Signed-off-by: John Molakvoæ <skjnldsv@protonmail.com>pull/39196/head
parent
a9f7e66d3d
commit
b0418f730f
File diff suppressed because one or more lines are too long
@ -1 +1 @@ |
||||
{"version":3,"sourceRoot":"","sources":["files.scss","../../../core/css/functions.scss"],"names":[],"mappings":"AAWA,SAEC,YACA,YACA,qBACA,WAED,oEACA,8BACA,kDAEC,+CAED,0BACC,oDAGD,mBACC,kBACA,aACA,SACA,4CACC,iBAIF,gBACC,aAGD,OACC,iBACA,YACA,aACA,aACA,mBAGD,6EAGC,yBACA,gCAID,kBACC,kBACA,WACA,gBACA,cACA,sBAEA,6CACC,aAGD,wBACC,wBACA,gBAEA,SAEA,WACA,cACA,0DAMD,wBACC,cACA,WAEA,mGAEC,8CAEA,6KACC,oCAKF,8DACC,oBAKH,yBACC,aAID,uCACC,cACA,WAGD,wBAGC,yBAEA,qBAGD,6FACC,+DAGD,iCACC,yDAGD,kFACC,0CAGD,4EACC,+DAID,gBCxEC,yCD2ED,iBC3EC,yCD8ED,oBC9EC,0CDiFD,yFCjFC,wCDuFD,uBCvFC,yCD0FD,2BC1FC,2CD6FD,mBC7FC,yCDgGD,2BChGC,4CDmGD,wBCnGC,0CDsGD,4BCtGC,4CD0GD,4CACC,WAGD,iCACC,WACA,YACA,eACA,SACA,eAGD,wCACC,aAGD,0CACC,WAGD,2BACC,YAED,4KAKC,+CAED,wMAKC,oDAGD,qCAEA,yDACC,oCAED,kCACC,iCACA,8BACA,4BACA,yBACA,mBAED,wGAIC,UACA,oCAGD,oBACC,oCAED,uBACC,6BAED,sBACC,cACA,aACA,YACA,sBACA,2BACA,sBACA,oCACC,kBAGF,kCACC,qBACA,mBAED,2BACC,eACA,iBAGD,uCACC,cAGD,yBACC,WACA,WACA,gBACA,qBACA,2BACA,WAED,wJAIC,kBAED,2CACC,eAED,4EAEC,mBAGD,kBAEC,4CACA,gBACA,mBAED,SACC,eACA,kBACA,+BACA,4BAED,qBACC,kBACA,aACA,UAGD,uBACC,kBACA,YAGD,0BACC,gBAED,uCACC,iBAED,8EAEC,2BACA,sBACA,kBAEA,gBAGD,qMAQC,gBACA,qPACC,MAIF,2BACC,0DACA,iBAGD,sDACC,iBAGD,+BACC,kBACA,aAED,kCACC,aAGD,0DAGC,WACA,kBAED,kDAEC,aACA,kBACA,2BACA,sBACA,YACA,iBACA,UAED,qCAEC,QACA,eACA,eACA,YAGA,8DACC,WAED,mEACC,WAGF,6BACC,qBACA,WACA,YACA,wBACA,2BACA,4BACA,gBACA,eACA,mCACA,eACA,kBACA,UAED,oCACC,eAID,2CACC,qCAGD,iDACC,qBACA,4BACA,YAED,uBACC,iBACA,kBACA,SAGD,6IACA,8FAEA,wCACC,kBACA,gBACA,uBACA,YAKA,kBACC,YACA,4BACC,QACA,YACA,aACA,gBACA,mBACA,uBACA,YACA,WACA,mBAID,+BACC,iBACA,aACA,uBACA,mBACA,kCACA,gBAEA,iDACC,iBACA,iBACA,wCACA,iCACA,oCACA,uBACA,mBACA,gBACA,uBACA,iBACA,kBAEA,uDACC,iBACA,sBAID,mEACC,gBAOL,iJAEC,wBAGD,mCACC,iCACA,8BACA,4BACA,yBAED,4BACC,WAGD,2CACC,uBACA,gBACA,kBACA,mBAKD,8BACC,kBACA,mBAEA,iBACA,OACA,SACA,YACA,cAEA,iBACA,eAEA,iBACA,oCACA,uBACA,mBAGD,mBACC,UAID,6DACC,WACA,eAID,iRAIC,UAID,0EACC,WAMA,wEACC,aAGD,oGACC,+CACA,wCACA,wBACA,yDACA,aAIF,oGAEC,mBAGD,+BACC,kBACA,WACA,eACA,gBACA,wJAGD,wFAEC,kBACA,UACA,YAGD,yCACC,qBACA,WAED,8CACC,kBACA,cACA,SACA,WACA,iBACA,kBACA,wDAEC,8CACA,8CACA,oBAEA,WACA,YACA,aACA,qBACA,uBAGF,8DACC,+CAGD,iDAGA,aACC,WAGD,iCACC,kBAID,mDAEC,gBAID,oCACC,qBACA,0BAGD,8EACC,0BAOA,kCACC,eAGD,sEACC,eAGD,sCACC,gBAIF,aACC,YACA,WACA,2BAGD,qCACC,wCAID,iBACI,kBACA,qBACA,sBAEJ,wBACI,aAEJ,mBACC,eACA,iBACA,iBAGD,0BACC,aAED,uBACC,kBACA,2BACA,mBAGD,8CACC,gBAIA,8BACC,eACA,iBACA,iBACA,WACA,2CACC,kBACA,0FAGC,kBACA,cACA,SACA,UACA,WACA,gBAED,mDACC,qBACA,sBAGF,0CACC,iBACA,oBACA,kBACA,mBAGA,oGACC,WAID,qIAEC,WAED,uDACC,WACA,0HACC,WAIH,wEACC,UAED,oCACC,+CACA,wCAGF,uGACC,WAED,wDACC,UAKF,4EACC,qBACA,eACA,gBACA,uBACA,sBACA,gBAGD,2CACC,yBAGD,yCACC,UAGD,kNAKC,UAGD,qCACC,gBAGD,0FAEC,WAGD,mDACC,eAGD,SACC,oCAGA,aAED,wCACC,WAEA,mBAKD,sBACC,aAED,2DAIC,+BAED,YACC,mBACA,mBACA,iBAED,wBACC,UAED,YACC,qBAGD,iBACC,WACA,aAED,6BACC,kBACA,mBACA,YAGA,gBAED,yBACC,kBAED,MACC,WACA,kBACA,MACA,OACA,QACA,SACA,8CACA,sCACA,wBACA,WACA,yBACA,8BACA,4BACA,6BACA,iCAED,kBACC,UAGD,aACC,gBACA,SACA,sBACA,eACA,gBACA,aAGA,oBACC,qBAKF,gBACC,sBACA,wBACA,gBACA,YACA,UACA,SACA,0DACA,WACA,yBACA,sBACA,qBACA,iBACA,aACA,MACA,kBAKE,0IACC,sBACA,qBACA,aACA,YACA,WACA,YACA,mBACA,uBAED,oFACC,aAQJ,0DACC,OAGD,6KAIC,qBACA,sBACA,0BAMA,sDACC,sBAED,yDACC,uDAIF,iJAGC,aAGD,oJAGC,WACA,YAGD,gCACC,kBAGD,YACC,mBAEA,uBACC,mCAIF,0DAEC,oCAED,qBACC,oCACA,4BACC,2BAIF,cACC,iBACA,kBACA,gBACA,6BACA,cACA,gBACA,YAEA,2BACC,aAGD,kCACC,UACA,kBACA,iBAIF,uBACC,oBACA,YACA,gBACA,+BACA,UACA,YACA,wBACA,sBAEA,6BACC,YAKA,oEACC,0BAIF,kCACC,WACA,mCAWA,kDACC,cACA,4CACA,0DACA,qDACC,WACA,YAMH,+CACC,aACA,+CACA,6BACA,aACA,cAGA,+DACC,cACA,kBACA,aACA,mCAEA,0fAKC,+BAEA,oxDAGC,+CAKH,kDACC,eACA,mBAGC,8EACC,YACA,eACA,kBACA,MAvDQ,MAwDR,OAxDQ,MAyDR,QAxDO,KAyDP,MACA,OACA,WAEA,yFACC,4BACA,6BACA,wBACA,SACA,mCACA,4BACA,2BAKA,wGACC,UACA,UACA,YAKH,uEACC,WACA,SACA,MACA,YAEA,YACA,gBAEA,kBAGD,iEACC,YACA,mCAIA,gBAKA,0BAEA,2EACC,aACA,YACA,iBACA,kBACA,iBACA,UAEA,0FACC,qBACA,kBACA,gBACA,uBACA,mBAED,kFACC,WACA,OACA,eAED,iFACC,WACA,OACA,eAID,sFACC,aAKF,8EACC,aAGD,8EACC,eACA,iBACA,aACA,mBACA,kBACA,QAEA,sFACC,QAxJK,KAyJL,WACA,YACA,aACA,mBACA,uBAGA,wGACC,aAQH,2GACC,yBAEA,6HACC,YACA,kBAIF,6GACC,yBAGD,6GACC,yBAIF,gEACC,iBACA,mCAEA,+EACC,WACA,cACA,YAMH,kHAEC,aAGD,sIAEC,kBACA,SACA,UACA,aACA,WAEA,kJACC,WACA,YACA,oBACA,QAzNO,KA0NP,kKACC,SACA,MA5NM,KA6NN,OA7NM,KAmOT,+DACC,OACA,YACA,aAGA,yFACC,gBACA,uBAMJ,+FACC,cAID,+CACC,aAEA,qEACC,qBACA,cAEA,aAEA,wEACC,iBAEA,iKAEC,aAGD,8EACI,cAQR,aACC,0DACA,YACA,SACA,aACA,WACA,YACA,mCACA,iCACA,YACA,gBAEA,uEAGC,UAGD,oEAEC,mEASF,cACC,eACA,MAOC,uGACC,gBAID,4EACC,WAKF,0BACC,kBACA,QACA,MAKF,gBACC,aAGD,8BACC,gBACA,sBACA,kBACA,kBACA,aACA,eACA,mBAEA,iCACC,WACA,eAGD,6DACC,aACA,YACA","file":"files.css"} |
||||
{"version":3,"sourceRoot":"","sources":["files.scss","../../../core/css/functions.scss"],"names":[],"mappings":"AAWA,SAEC,YACA,YACA,qBACA,WAED,oEACA,8BACA,kDAEC,+CAED,0BACC,oDAGD,mBACC,kBACA,aACA,SACA,4CACC,iBAIF,gBACC,aAGD,OACC,iBACA,YACA,aACA,aACA,mBAGD,6EAGC,yBACA,gCAID,kBACC,kBACA,WACA,gBACA,cACA,sBAEA,6CACC,aAGD,wBACC,wBACA,gBAEA,SAEA,WACA,cACA,0DAMD,wBACC,cACA,WAEA,mGAEC,8CAEA,6KACC,oCAKF,8DACC,oBAKH,yBACC,aAID,uCACC,cACA,WAGD,wBAGC,yBAEA,qBAGD,6FACC,+DAGD,iCACC,yDAGD,kFACC,0CAGD,4EACC,+DAID,gBCxEC,yCD2ED,iBC3EC,yCD8ED,oBC9EC,0CDiFD,qGCjFC,wCDuFD,0BCvFC,yCD0FD,2BC1FC,2CD6FD,mBC7FC,yCDgGD,2BChGC,4CDmGD,2BCnGC,0CDsGD,4BCtGC,4CD0GD,4CACC,WAGD,iCACC,WACA,YACA,eACA,SACA,eAGD,wCACC,aAGD,0CACC,WAGD,2BACC,YAED,4KAKC,+CAED,wMAKC,oDAGD,qCAEA,yDACC,oCAED,kCACC,iCACA,8BACA,4BACA,yBACA,mBAED,wGAIC,UACA,oCAGD,oBACC,oCAED,uBACC,6BAED,sBACC,cACA,aACA,YACA,sBACA,2BACA,sBACA,oCACC,kBAGF,kCACC,qBACA,mBAED,2BACC,eACA,iBAGD,uCACC,cAGD,yBACC,WACA,WACA,gBACA,qBACA,2BACA,WAED,wJAIC,kBAED,2CACC,eAED,4EAEC,mBAGD,kBAEC,4CACA,gBACA,mBAED,SACC,eACA,kBACA,+BACA,4BAED,qBACC,kBACA,aACA,UAGD,uBACC,kBACA,YAGD,0BACC,gBAED,uCACC,iBAED,8EAEC,2BACA,sBACA,kBAEA,gBAGD,qMAQC,gBACA,qPACC,MAIF,2BACC,0DACA,iBAGD,sDACC,iBAGD,+BACC,kBACA,aAED,kCACC,aAGD,0DAGC,WACA,kBAED,kDAEC,aACA,kBACA,2BACA,sBACA,YACA,iBACA,UAED,qCAEC,QACA,eACA,eACA,YAGA,8DACC,WAED,mEACC,WAGF,6BACC,qBACA,WACA,YACA,wBACA,2BACA,4BACA,gBACA,eACA,mCACA,eACA,kBACA,UAED,oCACC,eAID,2CACC,qCAGD,iDACC,qBACA,4BACA,YAED,uBACC,iBACA,kBACA,SAGD,6IACA,8FAEA,wCACC,kBACA,gBACA,uBACA,YAKA,kBACC,YACA,4BACC,QACA,YACA,aACA,gBACA,mBACA,uBACA,YACA,WACA,mBAID,+BACC,iBACA,aACA,uBACA,mBACA,kCACA,gBAEA,iDACC,iBACA,iBACA,wCACA,iCACA,oCACA,uBACA,mBACA,gBACA,uBACA,iBACA,kBAEA,uDACC,iBACA,sBAID,mEACC,gBAOL,iJAEC,wBAGD,mCACC,iCACA,8BACA,4BACA,yBAED,4BACC,WAGD,2CACC,uBACA,gBACA,kBACA,mBAKD,8BACC,kBACA,mBAEA,iBACA,OACA,SACA,YACA,cAEA,iBACA,eAEA,iBACA,oCACA,uBACA,mBAGD,mBACC,UAID,6DACC,WACA,eAID,iRAIC,UAID,0EACC,WAMA,wEACC,aAGD,oGACC,+CACA,wCACA,wBACA,yDACA,aAIF,oGAEC,mBAGD,+BACC,kBACA,WACA,eACA,gBACA,wJAGD,wFAEC,kBACA,UACA,YAGD,yCACC,qBACA,WAED,8CACC,kBACA,cACA,SACA,WACA,iBACA,kBACA,wDAEC,8CACA,8CACA,oBAEA,WACA,YACA,aACA,qBACA,uBAGF,8DACC,+CAGD,iDAGA,aACC,WAGD,iCACC,kBAID,mDAEC,gBAID,oCACC,qBACA,0BAGD,8EACC,0BAOA,kCACC,eAGD,sEACC,eAGD,sCACC,gBAIF,aACC,YACA,WACA,2BAGD,qCACC,wCAID,iBACI,kBACA,qBACA,sBAEJ,wBACI,aAEJ,mBACC,eACA,iBACA,iBAGD,0BACC,aAED,uBACC,kBACA,2BACA,mBAGD,8CACC,gBAIA,8BACC,eACA,iBACA,iBACA,WACA,2CACC,kBACA,0FAGC,kBACA,cACA,SACA,UACA,WACA,gBAED,mDACC,qBACA,sBAGF,0CACC,iBACA,oBACA,kBACA,mBAGA,oGACC,WAID,qIAEC,WAED,uDACC,WACA,0HACC,WAIH,wEACC,UAED,oCACC,+CACA,wCAGF,uGACC,WAED,wDACC,UAKF,4EACC,qBACA,eACA,gBACA,uBACA,sBACA,gBAGD,2CACC,yBAGD,yCACC,UAGD,kNAKC,UAGD,qCACC,gBAGD,0FAEC,WAGD,mDACC,eAGD,SACC,oCAGA,aAED,wCACC,WAEA,mBAKD,sBACC,aAED,2DAIC,+BAED,YACC,mBACA,mBACA,iBAED,wBACC,UAED,YACC,qBAGD,iBACC,WACA,aAED,6BACC,kBACA,mBACA,YAGA,gBAED,yBACC,kBAED,MACC,WACA,kBACA,MACA,OACA,QACA,SACA,8CACA,sCACA,wBACA,WACA,yBACA,8BACA,4BACA,6BACA,iCAED,kBACC,UAGD,aACC,gBACA,SACA,sBACA,eACA,gBACA,aAGA,oBACC,qBAKF,gBACC,sBACA,wBACA,gBACA,YACA,UACA,SACA,0DACA,WACA,yBACA,sBACA,qBACA,iBACA,aACA,MACA,kBAKE,0IACC,sBACA,qBACA,aACA,YACA,WACA,YACA,mBACA,uBAED,oFACC,aAQJ,0DACC,OAGD,6KAIC,qBACA,sBACA,0BAMA,sDACC,sBAED,yDACC,uDAIF,iJAGC,aAGD,oJAGC,WACA,YAGD,gCACC,kBAGD,YACC,mBAEA,uBACC,mCAIF,0DAEC,oCAED,qBACC,oCACA,4BACC,2BAIF,cACC,iBACA,kBACA,gBACA,6BACA,cACA,gBACA,YAEA,2BACC,aAGD,kCACC,UACA,kBACA,iBAIF,uBACC,oBACA,YACA,gBACA,+BACA,UACA,YACA,wBACA,sBAEA,6BACC,YAKA,oEACC,0BAIF,kCACC,WACA,mCAWA,kDACC,cACA,4CACA,0DACA,qDACC,WACA,YAMH,+CACC,aACA,+CACA,6BACA,aACA,cAGA,+DACC,cACA,kBACA,aACA,mCAEA,0fAKC,+BAEA,oxDAGC,+CAKH,kDACC,eACA,mBAGC,8EACC,YACA,eACA,kBACA,MAvDQ,MAwDR,OAxDQ,MAyDR,QAxDO,KAyDP,MACA,OACA,WAEA,yFACC,4BACA,6BACA,wBACA,SACA,mCACA,4BACA,2BAKA,wGACC,UACA,UACA,YAKH,uEACC,WACA,SACA,MACA,YAEA,YACA,gBAEA,kBAGD,iEACC,YACA,mCAIA,gBAKA,0BAEA,2EACC,aACA,YACA,iBACA,kBACA,iBACA,UAEA,0FACC,qBACA,kBACA,gBACA,uBACA,mBAED,kFACC,WACA,OACA,eAED,iFACC,WACA,OACA,eAID,sFACC,aAKF,8EACC,aAGD,8EACC,eACA,iBACA,aACA,mBACA,kBACA,QAEA,sFACC,QAxJK,KAyJL,WACA,YACA,aACA,mBACA,uBAGA,wGACC,aAQH,2GACC,yBAEA,6HACC,YACA,kBAIF,6GACC,yBAGD,6GACC,yBAIF,gEACC,iBACA,mCAEA,+EACC,WACA,cACA,YAMH,kHAEC,aAGD,sIAEC,kBACA,SACA,UACA,aACA,WAEA,kJACC,WACA,YACA,oBACA,QAzNO,KA0NP,kKACC,SACA,MA5NM,KA6NN,OA7NM,KAmOT,+DACC,OACA,YACA,aAGA,yFACC,gBACA,uBAMJ,+FACC,cAID,+CACC,aAEA,qEACC,qBACA,cAEA,aAEA,wEACC,iBAEA,iKAEC,aAGD,8EACI,cAQR,aACC,0DACA,YACA,SACA,aACA,WACA,YACA,mCACA,iCACA,YACA,gBAEA,uEAGC,UAGD,oEAEC,mEASF,cACC,eACA,MAOC,uGACC,gBAID,4EACC,WAKF,0BACC,kBACA,QACA,MAKF,gBACC,aAGD,8BACC,gBACA,sBACA,kBACA,kBACA,aACA,eACA,mBAEA,iCACC,WACA,eAGD,6DACC,aACA,YACA","file":"files.css"} |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,409 +0,0 @@ |
||||
/** |
||||
* Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com> |
||||
* |
||||
* This file is licensed under the Affero General Public License version 3 |
||||
* or later. |
||||
* |
||||
* See the COPYING-README file. |
||||
* |
||||
*/ |
||||
|
||||
if (!OCA.Sharing) { |
||||
/** |
||||
* @namespace OCA.Sharing |
||||
*/ |
||||
OCA.Sharing = {} |
||||
} |
||||
|
||||
/** |
||||
* @namespace |
||||
*/ |
||||
OCA.Sharing.App = { |
||||
|
||||
_inFileList: null, |
||||
_outFileList: null, |
||||
_overviewFileList: null, |
||||
_pendingFileList: null, |
||||
|
||||
initSharingIn($el) { |
||||
if (this._inFileList) { |
||||
return this._inFileList |
||||
} |
||||
|
||||
this._inFileList = new OCA.Sharing.FileList( |
||||
$el, |
||||
{ |
||||
id: 'shares.self', |
||||
sharedWithUser: true, |
||||
fileActions: this._createFileActions(), |
||||
config: OCA.Files.App.getFilesConfig(), |
||||
// The file list is created when a "show" event is handled, so
|
||||
// it should be marked as "shown" like it would have been done
|
||||
// if handling the event with the file list already created.
|
||||
shown: true, |
||||
} |
||||
) |
||||
|
||||
this._extendFileList(this._inFileList) |
||||
this._inFileList.appName = t('files_sharing', 'Shared with you') |
||||
this._inFileList.$el.find('.emptyfilelist.emptycontent').html('<div class="icon-shared"></div>' |
||||
+ '<h2>' + t('files_sharing', 'Nothing shared with you yet') + '</h2>' |
||||
+ '<p>' + t('files_sharing', 'Files and folders others share with you will show up here') + '</p>') |
||||
return this._inFileList |
||||
}, |
||||
|
||||
initSharingOut($el) { |
||||
if (this._outFileList) { |
||||
return this._outFileList |
||||
} |
||||
this._outFileList = new OCA.Sharing.FileList( |
||||
$el, |
||||
{ |
||||
id: 'shares.others', |
||||
sharedWithUser: false, |
||||
fileActions: this._createFileActions(), |
||||
config: OCA.Files.App.getFilesConfig(), |
||||
// The file list is created when a "show" event is handled, so
|
||||
// it should be marked as "shown" like it would have been done
|
||||
// if handling the event with the file list already created.
|
||||
shown: true, |
||||
} |
||||
) |
||||
|
||||
this._extendFileList(this._outFileList) |
||||
this._outFileList.appName = t('files_sharing', 'Shared with others') |
||||
this._outFileList.$el.find('.emptyfilelist.emptycontent').html('<div class="icon-shared"></div>' |
||||
+ '<h2>' + t('files_sharing', 'Nothing shared yet') + '</h2>' |
||||
+ '<p>' + t('files_sharing', 'Files and folders you share will show up here') + '</p>') |
||||
return this._outFileList |
||||
}, |
||||
|
||||
initSharingLinks($el) { |
||||
if (this._linkFileList) { |
||||
return this._linkFileList |
||||
} |
||||
this._linkFileList = new OCA.Sharing.FileList( |
||||
$el, |
||||
{ |
||||
id: 'shares.link', |
||||
linksOnly: true, |
||||
fileActions: this._createFileActions(), |
||||
config: OCA.Files.App.getFilesConfig(), |
||||
// The file list is created when a "show" event is handled, so
|
||||
// it should be marked as "shown" like it would have been done
|
||||
// if handling the event with the file list already created.
|
||||
shown: true, |
||||
} |
||||
) |
||||
|
||||
this._extendFileList(this._linkFileList) |
||||
this._linkFileList.appName = t('files_sharing', 'Shared by link') |
||||
this._linkFileList.$el.find('.emptyfilelist.emptycontent').html('<div class="icon-public"></div>' |
||||
+ '<h2>' + t('files_sharing', 'No shared links') + '</h2>' |
||||
+ '<p>' + t('files_sharing', 'Files and folders you share by link will show up here') + '</p>') |
||||
return this._linkFileList |
||||
}, |
||||
|
||||
initSharingDeleted($el) { |
||||
if (this._deletedFileList) { |
||||
return this._deletedFileList |
||||
} |
||||
this._deletedFileList = new OCA.Sharing.FileList( |
||||
$el, |
||||
{ |
||||
id: 'shares.deleted', |
||||
defaultFileActionsDisabled: true, |
||||
showDeleted: true, |
||||
sharedWithUser: true, |
||||
fileActions: this._restoreShareAction(), |
||||
config: OCA.Files.App.getFilesConfig(), |
||||
// The file list is created when a "show" event is handled, so
|
||||
// it should be marked as "shown" like it would have been done
|
||||
// if handling the event with the file list already created.
|
||||
shown: true, |
||||
} |
||||
) |
||||
|
||||
this._extendFileList(this._deletedFileList) |
||||
this._deletedFileList.appName = t('files_sharing', 'Deleted shares') |
||||
this._deletedFileList.$el.find('.emptyfilelist.emptycontent').html('<div class="icon-share"></div>' |
||||
+ '<h2>' + t('files_sharing', 'No deleted shares') + '</h2>' |
||||
+ '<p>' + t('files_sharing', 'Shares you deleted will show up here') + '</p>') |
||||
return this._deletedFileList |
||||
}, |
||||
|
||||
initSharingPening($el) { |
||||
if (this._pendingFileList) { |
||||
return this._pendingFileList |
||||
} |
||||
this._pendingFileList = new OCA.Sharing.FileList( |
||||
$el, |
||||
{ |
||||
id: 'shares.pending', |
||||
showPending: true, |
||||
detailsViewEnabled: false, |
||||
defaultFileActionsDisabled: true, |
||||
sharedWithUser: true, |
||||
fileActions: this._acceptShareAction(), |
||||
config: OCA.Files.App.getFilesConfig(), |
||||
// The file list is created when a "show" event is handled, so
|
||||
// it should be marked as "shown" like it would have been done
|
||||
// if handling the event with the file list already created.
|
||||
shown: true, |
||||
} |
||||
) |
||||
|
||||
this._extendFileList(this._pendingFileList) |
||||
this._pendingFileList.appName = t('files_sharing', 'Pending shares') |
||||
this._pendingFileList.$el.find('.emptyfilelist.emptycontent').html('<div class="icon-share"></div>' |
||||
+ '<h2>' + t('files_sharing', 'No pending shares') + '</h2>' |
||||
+ '<p>' + t('files_sharing', 'Shares you have received but not confirmed will show up here') + '</p>') |
||||
return this._pendingFileList |
||||
}, |
||||
|
||||
initShareingOverview($el) { |
||||
if (this._overviewFileList) { |
||||
return this._overviewFileList |
||||
} |
||||
this._overviewFileList = new OCA.Sharing.FileList( |
||||
$el, |
||||
{ |
||||
id: 'shares.overview', |
||||
fileActions: this._createFileActions(), |
||||
config: OCA.Files.App.getFilesConfig(), |
||||
isOverview: true, |
||||
// The file list is created when a "show" event is handled, so
|
||||
// it should be marked as "shown" like it would have been done
|
||||
// if handling the event with the file list already created.
|
||||
shown: true, |
||||
} |
||||
) |
||||
|
||||
this._extendFileList(this._overviewFileList) |
||||
this._overviewFileList.appName = t('files_sharing', 'Shares') |
||||
this._overviewFileList.$el.find('.emptyfilelist.emptycontent').html('<div class="icon-share"></div>' |
||||
+ '<h2>' + t('files_sharing', 'No shares') + '</h2>' |
||||
+ '<p>' + t('files_sharing', 'Shares will show up here') + '</p>') |
||||
return this._overviewFileList |
||||
}, |
||||
|
||||
removeSharingIn() { |
||||
if (this._inFileList) { |
||||
this._inFileList.$fileList.empty() |
||||
} |
||||
}, |
||||
|
||||
removeSharingOut() { |
||||
if (this._outFileList) { |
||||
this._outFileList.$fileList.empty() |
||||
} |
||||
}, |
||||
|
||||
removeSharingLinks() { |
||||
if (this._linkFileList) { |
||||
this._linkFileList.$fileList.empty() |
||||
} |
||||
}, |
||||
|
||||
removeSharingDeleted() { |
||||
if (this._deletedFileList) { |
||||
this._deletedFileList.$fileList.empty() |
||||
} |
||||
}, |
||||
|
||||
removeSharingPending() { |
||||
if (this._pendingFileList) { |
||||
this._pendingFileList.$fileList.empty() |
||||
} |
||||
}, |
||||
|
||||
removeSharingOverview() { |
||||
if (this._overviewFileList) { |
||||
this._overviewFileList.$fileList.empty() |
||||
} |
||||
}, |
||||
|
||||
/** |
||||
* Destroy the app |
||||
*/ |
||||
destroy() { |
||||
OCA.Files.fileActions.off('setDefault.app-sharing', this._onActionsUpdated) |
||||
OCA.Files.fileActions.off('registerAction.app-sharing', this._onActionsUpdated) |
||||
this.removeSharingIn() |
||||
this.removeSharingOut() |
||||
this.removeSharingLinks() |
||||
this._inFileList = null |
||||
this._outFileList = null |
||||
this._linkFileList = null |
||||
this._overviewFileList = null |
||||
delete this._globalActionsInitialized |
||||
}, |
||||
|
||||
_createFileActions() { |
||||
// inherit file actions from the files app
|
||||
const fileActions = new OCA.Files.FileActions() |
||||
// note: not merging the legacy actions because legacy apps are not
|
||||
// compatible with the sharing overview and need to be adapted first
|
||||
fileActions.registerDefaultActions() |
||||
fileActions.merge(OCA.Files.fileActions) |
||||
|
||||
if (!this._globalActionsInitialized) { |
||||
// in case actions are registered later
|
||||
this._onActionsUpdated = _.bind(this._onActionsUpdated, this) |
||||
OCA.Files.fileActions.on('setDefault.app-sharing', this._onActionsUpdated) |
||||
OCA.Files.fileActions.on('registerAction.app-sharing', this._onActionsUpdated) |
||||
this._globalActionsInitialized = true |
||||
} |
||||
|
||||
// when the user clicks on a folder, redirect to the corresponding
|
||||
// folder in the files app instead of opening it directly
|
||||
fileActions.register('dir', 'Open', OC.PERMISSION_READ, '', function(filename, context) { |
||||
OCA.Files.App.setActiveView('files', { silent: true }) |
||||
OCA.Files.App.fileList.changeDirectory(OC.joinPaths(context.$file.attr('data-path'), filename), true, true) |
||||
}) |
||||
fileActions.setDefault('dir', 'Open') |
||||
return fileActions |
||||
}, |
||||
|
||||
_restoreShareAction() { |
||||
const fileActions = new OCA.Files.FileActions() |
||||
fileActions.registerAction({ |
||||
name: 'Restore', |
||||
displayName: t('files_sharing', 'Restore'), |
||||
altText: t('files_sharing', 'Restore share'), |
||||
mime: 'all', |
||||
permissions: OC.PERMISSION_ALL, |
||||
iconClass: 'icon-history', |
||||
type: OCA.Files.FileActions.TYPE_INLINE, |
||||
actionHandler(fileName, context) { |
||||
const shareId = context.$file.data('shareId') |
||||
$.post(OC.linkToOCS('apps/files_sharing/api/v1/deletedshares', 2) + shareId) |
||||
.success(function(result) { |
||||
context.fileList.remove(context.fileInfoModel.attributes.name) |
||||
}).fail(function() { |
||||
OC.Notification.showTemporary(t('files_sharing', 'Something happened. Unable to restore the share.')) |
||||
}) |
||||
}, |
||||
}) |
||||
return fileActions |
||||
}, |
||||
|
||||
_acceptShareAction() { |
||||
const fileActions = new OCA.Files.FileActions() |
||||
fileActions.registerAction({ |
||||
name: 'Accept share', |
||||
displayName: t('files_sharing', 'Accept share'), |
||||
mime: 'all', |
||||
permissions: OC.PERMISSION_ALL, |
||||
iconClass: 'icon-checkmark', |
||||
type: OCA.Files.FileActions.TYPE_INLINE, |
||||
actionHandler(fileName, context) { |
||||
const shareId = context.$file.data('shareId') |
||||
let shareBase = 'shares/pending' |
||||
if (context.$file.attr('data-remote-id')) { |
||||
shareBase = 'remote_shares/pending' |
||||
} |
||||
$.post(OC.linkToOCS('apps/files_sharing/api/v1/' + shareBase, 2) + shareId) |
||||
.success(function(result) { |
||||
context.fileList.remove(context.fileInfoModel.attributes.name) |
||||
}).fail(function() { |
||||
OC.Notification.showTemporary(t('files_sharing', 'Something happened. Unable to accept the share.')) |
||||
}) |
||||
}, |
||||
}) |
||||
fileActions.registerAction({ |
||||
name: 'Reject share', |
||||
displayName: t('files_sharing', 'Reject share'), |
||||
mime: 'all', |
||||
permissions: OC.PERMISSION_ALL, |
||||
iconClass: 'icon-close', |
||||
type: OCA.Files.FileActions.TYPE_INLINE, |
||||
shouldRender(context) { |
||||
// disable rejecting group shares from the pending list because they anyway
|
||||
// land back into that same list
|
||||
if (context.$file.attr('data-remote-id') && parseInt(context.$file.attr('data-share-type'), 10) === OC.Share.SHARE_TYPE_REMOTE_GROUP) { |
||||
return false |
||||
} |
||||
return true |
||||
}, |
||||
actionHandler(fileName, context) { |
||||
const shareId = context.$file.data('shareId') |
||||
let shareBase = 'shares' |
||||
if (context.$file.attr('data-remote-id')) { |
||||
shareBase = 'remote_shares' |
||||
} |
||||
|
||||
$.ajax({ |
||||
url: OC.linkToOCS('apps/files_sharing/api/v1/' + shareBase, 2) + shareId, |
||||
type: 'DELETE', |
||||
}).success(function(result) { |
||||
context.fileList.remove(context.fileInfoModel.attributes.name) |
||||
}).fail(function() { |
||||
OC.Notification.showTemporary(t('files_sharing', 'Something happened. Unable to reject the share.')) |
||||
}) |
||||
}, |
||||
}) |
||||
return fileActions |
||||
}, |
||||
|
||||
_onActionsUpdated(ev) { |
||||
_.each([this._inFileList, this._outFileList, this._linkFileList], function(list) { |
||||
if (!list) { |
||||
return |
||||
} |
||||
|
||||
if (ev.action) { |
||||
list.fileActions.registerAction(ev.action) |
||||
} else if (ev.defaultAction) { |
||||
list.fileActions.setDefault( |
||||
ev.defaultAction.mime, |
||||
ev.defaultAction.name |
||||
) |
||||
} |
||||
}) |
||||
}, |
||||
|
||||
_extendFileList(fileList) { |
||||
// remove size column from summary
|
||||
fileList.fileSummary.$el.find('.filesize').remove() |
||||
}, |
||||
} |
||||
|
||||
window.addEventListener('DOMContentLoaded', function() { |
||||
$('#app-content-sharinginOld').on('show', function(e) { |
||||
OCA.Sharing.App.initSharingIn($(e.target)) |
||||
}) |
||||
$('#app-content-sharinginOld').on('hide', function() { |
||||
OCA.Sharing.App.removeSharingIn() |
||||
}) |
||||
$('#app-content-sharingoutOld').on('show', function(e) { |
||||
OCA.Sharing.App.initSharingOut($(e.target)) |
||||
}) |
||||
$('#app-content-sharingoutOld').on('hide', function() { |
||||
OCA.Sharing.App.removeSharingOut() |
||||
}) |
||||
$('#app-content-sharinglinksOld').on('show', function(e) { |
||||
OCA.Sharing.App.initSharingLinks($(e.target)) |
||||
}) |
||||
$('#app-content-sharinglinksOld').on('hide', function() { |
||||
OCA.Sharing.App.removeSharingLinks() |
||||
}) |
||||
$('#app-content-deletedsharesOld').on('show', function(e) { |
||||
OCA.Sharing.App.initSharingDeleted($(e.target)) |
||||
}) |
||||
$('#app-content-deletedsharesOld').on('hide', function() { |
||||
OCA.Sharing.App.removeSharingDeleted() |
||||
}) |
||||
$('#app-content-pendingsharesOld').on('show', function(e) { |
||||
OCA.Sharing.App.initSharingPening($(e.target)) |
||||
}) |
||||
$('#app-content-pendingsharesOld').on('hide', function() { |
||||
OCA.Sharing.App.removeSharingPending() |
||||
}) |
||||
$('#app-content-shareoverviewOld').on('show', function(e) { |
||||
OCA.Sharing.App.initShareingOverview($(e.target)) |
||||
}) |
||||
$('#app-content-shareoverviewOld').on('hide', function() { |
||||
OCA.Sharing.App.removeSharingOverview() |
||||
}) |
||||
}) |
@ -1,541 +0,0 @@ |
||||
/* eslint-disable */ |
||||
/* |
||||
* Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com> |
||||
* |
||||
* This file is licensed under the Affero General Public License version 3 |
||||
* or later. |
||||
* |
||||
* See the COPYING-README file. |
||||
* |
||||
*/ |
||||
(function() { |
||||
|
||||
/** |
||||
* @class OCA.Sharing.FileList |
||||
* @augments OCA.Files.FileList |
||||
* |
||||
* @classdesc Sharing file list. |
||||
* Contains both "shared with others" and "shared with you" modes. |
||||
* |
||||
* @param $el container element with existing markup for the .files-controls |
||||
* and a table |
||||
* @param [options] map of options, see other parameters |
||||
* @param {boolean} [options.sharedWithUser] true to return files shared with |
||||
* the current user, false to return files that the user shared with others. |
||||
* Defaults to false. |
||||
* @param {boolean} [options.linksOnly] true to return only link shares |
||||
*/ |
||||
var FileList = function($el, options) { |
||||
this.initialize($el, options) |
||||
} |
||||
FileList.prototype = _.extend({}, OCA.Files.FileList.prototype, |
||||
/** @lends OCA.Sharing.FileList.prototype */ { |
||||
appName: 'Shares', |
||||
|
||||
/** |
||||
* Whether the list shows the files shared with the user (true) or |
||||
* the files that the user shared with others (false). |
||||
*/ |
||||
_sharedWithUser: false, |
||||
_linksOnly: false, |
||||
_showDeleted: false, |
||||
_showPending: false, |
||||
_clientSideSort: true, |
||||
_allowSelection: false, |
||||
_isOverview: false, |
||||
|
||||
/** |
||||
* @private |
||||
*/ |
||||
initialize: function($el, options) { |
||||
OCA.Files.FileList.prototype.initialize.apply(this, arguments) |
||||
if (this.initialized) { |
||||
return |
||||
} |
||||
|
||||
// TODO: consolidate both options
|
||||
if (options && options.sharedWithUser) { |
||||
this._sharedWithUser = true |
||||
} |
||||
if (options && options.linksOnly) { |
||||
this._linksOnly = true |
||||
} |
||||
if (options && options.showDeleted) { |
||||
this._showDeleted = true |
||||
} |
||||
if (options && options.showPending) { |
||||
this._showPending = true |
||||
} |
||||
if (options && options.isOverview) { |
||||
this._isOverview = true |
||||
} |
||||
}, |
||||
|
||||
_renderRow: function() { |
||||
// HACK: needed to call the overridden _renderRow
|
||||
// this is because at the time this class is created
|
||||
// the overriding hasn't been done yet...
|
||||
return OCA.Files.FileList.prototype._renderRow.apply(this, arguments) |
||||
}, |
||||
|
||||
_createRow: function(fileData) { |
||||
// TODO: hook earlier and render the whole row here
|
||||
var $tr = OCA.Files.FileList.prototype._createRow.apply(this, arguments) |
||||
$tr.find('.filesize').remove() |
||||
$tr.find('td.date').before($tr.children('td:first')) |
||||
$tr.find('td.filename input:checkbox').remove() |
||||
$tr.attr('data-share-id', _.pluck(fileData.shares, 'id').join(',')) |
||||
if (this._sharedWithUser) { |
||||
$tr.attr('data-share-owner', fileData.shareOwner) |
||||
$tr.attr('data-mounttype', 'shared-root') |
||||
var permission = parseInt($tr.attr('data-permissions')) | OC.PERMISSION_DELETE |
||||
$tr.attr('data-permissions', permission) |
||||
} |
||||
if (this._showDeleted || this._showPending) { |
||||
var permission = fileData.permissions |
||||
$tr.attr('data-share-permissions', permission) |
||||
} |
||||
|
||||
if (fileData.remoteId) { |
||||
$tr.attr('data-remote-id', fileData.remoteId) |
||||
} |
||||
|
||||
if (fileData.shareType) { |
||||
$tr.attr('data-share-type', fileData.shareType) |
||||
} |
||||
|
||||
// add row with expiration date for link only shares - influenced by _createRow of filelist
|
||||
if (this._linksOnly) { |
||||
var expirationTimestamp = 0 |
||||
if (fileData.shares && fileData.shares[0].expiration !== null) { |
||||
expirationTimestamp = moment(fileData.shares[0].expiration).valueOf() |
||||
} |
||||
$tr.attr('data-expiration', expirationTimestamp) |
||||
|
||||
// date column (1000 milliseconds to seconds, 60 seconds, 60 minutes, 24 hours)
|
||||
// difference in days multiplied by 5 - brightest shade for expiry dates in more than 32 days (160/5)
|
||||
var modifiedColor = Math.round((expirationTimestamp - (new Date()).getTime()) / 1000 / 60 / 60 / 24 * 5) |
||||
// ensure that the brightest color is still readable
|
||||
if (modifiedColor >= 160) { |
||||
modifiedColor = 160 |
||||
} |
||||
|
||||
var formatted |
||||
var text |
||||
if (expirationTimestamp > 0) { |
||||
formatted = OC.Util.formatDate(expirationTimestamp) |
||||
text = OC.Util.relativeModifiedDate(expirationTimestamp) |
||||
} else { |
||||
formatted = t('files_sharing', 'No expiration date set') |
||||
text = '' |
||||
modifiedColor = 160 |
||||
} |
||||
td = $('<td></td>').attr({ 'class': 'date' }) |
||||
td.append($('<span></span>').attr({ |
||||
'class': 'modified', |
||||
'title': formatted, |
||||
'style': 'color:rgb(' + modifiedColor + ',' + modifiedColor + ',' + modifiedColor + ')' |
||||
}).text(text)) |
||||
|
||||
$tr.append(td) |
||||
} |
||||
return $tr |
||||
}, |
||||
|
||||
/** |
||||
* Set whether the list should contain outgoing shares |
||||
* or incoming shares. |
||||
* |
||||
* @param state true for incoming shares, false otherwise |
||||
*/ |
||||
setSharedWithUser: function(state) { |
||||
this._sharedWithUser = !!state |
||||
}, |
||||
|
||||
updateEmptyContent: function() { |
||||
var dir = this.getCurrentDirectory() |
||||
if (dir === '/') { |
||||
// root has special permissions
|
||||
this.$el.find('.emptyfilelist.emptycontent').toggleClass('hidden', !this.isEmpty) |
||||
this.$el.find('.files-filestable thead th').toggleClass('hidden', this.isEmpty) |
||||
|
||||
// hide expiration date header for non link only shares
|
||||
if (!this._linksOnly) { |
||||
this.$el.find('th.column-expiration').addClass('hidden') |
||||
} |
||||
} else { |
||||
OCA.Files.FileList.prototype.updateEmptyContent.apply(this, arguments) |
||||
} |
||||
}, |
||||
|
||||
getDirectoryPermissions: function() { |
||||
return OC.PERMISSION_READ | OC.PERMISSION_DELETE |
||||
}, |
||||
|
||||
updateStorageStatistics: function() { |
||||
// no op because it doesn't have
|
||||
// storage info like free space / used space
|
||||
}, |
||||
|
||||
reload: function() { |
||||
this.showMask() |
||||
if (this._reloadCall?.abort) { |
||||
this._reloadCall.abort() |
||||
} |
||||
|
||||
// there is only root
|
||||
this._setCurrentDir('/', false) |
||||
|
||||
var promises = [] |
||||
|
||||
var deletedShares = { |
||||
url: OC.linkToOCS('apps/files_sharing/api/v1', 2) + 'deletedshares', |
||||
/* jshint camelcase: false */ |
||||
data: { |
||||
format: 'json', |
||||
include_tags: true |
||||
}, |
||||
type: 'GET', |
||||
beforeSend: function(xhr) { |
||||
xhr.setRequestHeader('OCS-APIREQUEST', 'true') |
||||
} |
||||
} |
||||
|
||||
var pendingShares = { |
||||
url: OC.linkToOCS('apps/files_sharing/api/v1/shares', 2) + 'pending', |
||||
/* jshint camelcase: false */ |
||||
data: { |
||||
format: 'json' |
||||
}, |
||||
type: 'GET', |
||||
beforeSend: function(xhr) { |
||||
xhr.setRequestHeader('OCS-APIREQUEST', 'true') |
||||
} |
||||
} |
||||
|
||||
var pendingRemoteShares = { |
||||
url: OC.linkToOCS('apps/files_sharing/api/v1/remote_shares', 2) + 'pending', |
||||
/* jshint camelcase: false */ |
||||
data: { |
||||
format: 'json' |
||||
}, |
||||
type: 'GET', |
||||
beforeSend: function(xhr) { |
||||
xhr.setRequestHeader('OCS-APIREQUEST', 'true') |
||||
} |
||||
} |
||||
|
||||
var shares = { |
||||
url: OC.linkToOCS('apps/files_sharing/api/v1') + 'shares', |
||||
/* jshint camelcase: false */ |
||||
data: { |
||||
format: 'json', |
||||
shared_with_me: this._sharedWithUser !== false, |
||||
include_tags: true |
||||
}, |
||||
type: 'GET', |
||||
beforeSend: function(xhr) { |
||||
xhr.setRequestHeader('OCS-APIREQUEST', 'true') |
||||
} |
||||
} |
||||
|
||||
var remoteShares = { |
||||
url: OC.linkToOCS('apps/files_sharing/api/v1') + 'remote_shares', |
||||
/* jshint camelcase: false */ |
||||
data: { |
||||
format: 'json', |
||||
include_tags: true |
||||
}, |
||||
type: 'GET', |
||||
beforeSend: function(xhr) { |
||||
xhr.setRequestHeader('OCS-APIREQUEST', 'true') |
||||
} |
||||
} |
||||
|
||||
// Add the proper ajax requests to the list and run them
|
||||
// and make sure we have 2 promises
|
||||
if (this._showDeleted) { |
||||
promises.push($.ajax(deletedShares)) |
||||
} else if (this._showPending) { |
||||
promises.push($.ajax(pendingShares)) |
||||
promises.push($.ajax(pendingRemoteShares)) |
||||
} else { |
||||
promises.push($.ajax(shares)) |
||||
|
||||
if (this._sharedWithUser !== false || this._isOverview) { |
||||
promises.push($.ajax(remoteShares)) |
||||
} |
||||
if (this._isOverview) { |
||||
shares.data.shared_with_me = !shares.data.shared_with_me |
||||
promises.push($.ajax(shares)) |
||||
} |
||||
} |
||||
|
||||
this._reloadCall = $.when.apply($, promises) |
||||
var callBack = this.reloadCallback.bind(this) |
||||
return this._reloadCall.then(callBack, callBack) |
||||
}, |
||||
|
||||
reloadCallback: function(shares, remoteShares, additionalShares) { |
||||
delete this._reloadCall |
||||
this.hideMask() |
||||
|
||||
this.$el.find('#headerSharedWith').text( |
||||
t('files_sharing', this._sharedWithUser ? 'Shared by' : 'Shared with') |
||||
) |
||||
|
||||
var files = [] |
||||
|
||||
// make sure to use the same format
|
||||
if (shares[0] && shares[0].ocs) { |
||||
shares = shares[0] |
||||
} |
||||
if (remoteShares && remoteShares[0] && remoteShares[0].ocs) { |
||||
remoteShares = remoteShares[0] |
||||
} |
||||
if (additionalShares && additionalShares[0] && additionalShares[0].ocs) { |
||||
additionalShares = additionalShares[0] |
||||
} |
||||
|
||||
if (shares.ocs && shares.ocs.data) { |
||||
files = files.concat(this._makeFilesFromShares(shares.ocs.data, this._sharedWithUser)) |
||||
} |
||||
|
||||
if (remoteShares && remoteShares.ocs && remoteShares.ocs.data) { |
||||
files = files.concat(this._makeFilesFromRemoteShares(remoteShares.ocs.data)) |
||||
} |
||||
|
||||
if (additionalShares && additionalShares.ocs && additionalShares.ocs.data) { |
||||
if (this._showPending) { |
||||
// in this case the second callback is about pending remote shares
|
||||
files = files.concat(this._makeFilesFromRemoteShares(additionalShares.ocs.data)) |
||||
} else { |
||||
files = files.concat(this._makeFilesFromShares(additionalShares.ocs.data, !this._sharedWithUser)) |
||||
} |
||||
} |
||||
|
||||
this.setFiles(files) |
||||
return true |
||||
}, |
||||
|
||||
_makeFilesFromRemoteShares: function(data) { |
||||
var files = data |
||||
|
||||
files = _.chain(files) |
||||
// convert share data to file data
|
||||
.map(function(share) { |
||||
var file = { |
||||
shareOwner: share.owner + '@' + share.remote.replace(/.*?:\/\//g, ''), |
||||
name: OC.basename(share.mountpoint), |
||||
mtime: share.mtime * 1000, |
||||
mimetype: share.mimetype, |
||||
type: share.type, |
||||
// remote share types are different and need to be mapped
|
||||
shareType: (parseInt(share.share_type, 10) === 1) ? OC.Share.SHARE_TYPE_REMOTE_GROUP : OC.Share.SHARE_TYPE_REMOTE, |
||||
id: share.file_id, |
||||
path: OC.dirname(share.mountpoint), |
||||
permissions: share.permissions, |
||||
tags: share.tags || [] |
||||
} |
||||
|
||||
if (share.remote_id) { |
||||
// remote share
|
||||
if (share.accepted !== '1') { |
||||
file.name = OC.basename(share.name) |
||||
file.path = '/' |
||||
} |
||||
file.remoteId = share.remote_id |
||||
file.shareOwnerId = share.owner |
||||
} |
||||
|
||||
if (!file.mimetype) { |
||||
// pending shares usually have no type, so default to showing a directory icon
|
||||
file.mimetype = 'dir-shared' |
||||
} |
||||
|
||||
file.shares = [{ |
||||
id: share.id, |
||||
type: OC.Share.SHARE_TYPE_REMOTE |
||||
}] |
||||
return file |
||||
}) |
||||
.value() |
||||
return files |
||||
}, |
||||
|
||||
/** |
||||
* Converts the OCS API share response data to a file info |
||||
* list |
||||
* @param {Array} data OCS API share array |
||||
* @param {boolean} sharedWithUser |
||||
* @returns {Array.<OCA.Sharing.SharedFileInfo>} array of shared file info |
||||
*/ |
||||
_makeFilesFromShares: function(data, sharedWithUser) { |
||||
/* jshint camelcase: false */ |
||||
var files = data |
||||
|
||||
if (this._linksOnly) { |
||||
files = _.filter(data, function(share) { |
||||
return share.share_type === OC.Share.SHARE_TYPE_LINK |
||||
}) |
||||
} |
||||
|
||||
// OCS API uses non-camelcased names
|
||||
files = _.chain(files) |
||||
// convert share data to file data
|
||||
.map(function(share) { |
||||
// TODO: use OC.Files.FileInfo
|
||||
var file = { |
||||
id: share.file_source, |
||||
icon: OC.MimeType.getIconUrl(share.mimetype), |
||||
mimetype: share.mimetype, |
||||
hasPreview: share.has_preview, |
||||
tags: share.tags || [] |
||||
} |
||||
if (share.item_type === 'folder') { |
||||
file.type = 'dir' |
||||
file.mimetype = 'httpd/unix-directory' |
||||
} else { |
||||
file.type = 'file' |
||||
} |
||||
file.share = { |
||||
id: share.id, |
||||
type: share.share_type, |
||||
target: share.share_with, |
||||
stime: share.stime * 1000, |
||||
expiration: share.expiration |
||||
} |
||||
if (sharedWithUser) { |
||||
file.shareOwner = share.displayname_owner |
||||
file.shareOwnerId = share.uid_owner |
||||
file.name = OC.basename(share.file_target) |
||||
file.path = OC.dirname(share.file_target) |
||||
file.permissions = share.permissions |
||||
if (file.path) { |
||||
file.extraData = share.file_target |
||||
} |
||||
} else { |
||||
if (share.share_type !== OC.Share.SHARE_TYPE_LINK) { |
||||
file.share.targetDisplayName = share.share_with_displayname |
||||
file.share.targetShareWithId = share.share_with |
||||
} |
||||
file.name = OC.basename(share.path) |
||||
file.path = OC.dirname(share.path) |
||||
file.permissions = OC.PERMISSION_ALL |
||||
if (file.path) { |
||||
file.extraData = share.path |
||||
} |
||||
} |
||||
return file |
||||
}) |
||||
// Group all files and have a "shares" array with
|
||||
// the share info for each file.
|
||||
//
|
||||
// This uses a hash memo to cumulate share information
|
||||
// inside the same file object (by file id).
|
||||
.reduce(function(memo, file) { |
||||
var data = memo[file.id] |
||||
var recipient = file.share.targetDisplayName |
||||
var recipientId = file.share.targetShareWithId |
||||
if (!data) { |
||||
data = memo[file.id] = file |
||||
data.shares = [file.share] |
||||
// using a hash to make them unique,
|
||||
// this is only a list to be displayed
|
||||
data.recipients = {} |
||||
data.recipientData = {} |
||||
// share types
|
||||
data.shareTypes = {} |
||||
// counter is cheaper than calling _.keys().length
|
||||
data.recipientsCount = 0 |
||||
data.mtime = file.share.stime |
||||
} else { |
||||
// always take the most recent stime
|
||||
if (file.share.stime > data.mtime) { |
||||
data.mtime = file.share.stime |
||||
} |
||||
data.shares.push(file.share) |
||||
} |
||||
|
||||
if (recipient) { |
||||
// limit counterparts for output
|
||||
if (data.recipientsCount < 4) { |
||||
// only store the first ones, they will be the only ones
|
||||
// displayed
|
||||
data.recipients[recipient] = true |
||||
data.recipientData[data.recipientsCount] = { |
||||
'shareWith': recipientId, |
||||
'shareWithDisplayName': recipient |
||||
} |
||||
} |
||||
data.recipientsCount++ |
||||
} |
||||
|
||||
data.shareTypes[file.share.type] = true |
||||
|
||||
delete file.share |
||||
return memo |
||||
}, {}) |
||||
// Retrieve only the values of the returned hash
|
||||
.values() |
||||
// Clean up
|
||||
.each(function(data) { |
||||
// convert the recipients map to a flat
|
||||
// array of sorted names
|
||||
data.mountType = 'shared' |
||||
delete data.recipientsCount |
||||
if (sharedWithUser) { |
||||
// only for outgoing shares
|
||||
delete data.shareTypes |
||||
} else { |
||||
data.shareTypes = _.keys(data.shareTypes) |
||||
} |
||||
}) |
||||
// Finish the chain by getting the result
|
||||
.value() |
||||
|
||||
// Sort by expected sort comparator
|
||||
return files.sort(this._sortComparator) |
||||
} |
||||
}) |
||||
|
||||
/** |
||||
* Share info attributes. |
||||
* |
||||
* @typedef {Object} OCA.Sharing.ShareInfo |
||||
* |
||||
* @property {number} id share ID |
||||
* @property {number} type share type |
||||
* @property {String} target share target, either user name or group name |
||||
* @property {number} stime share timestamp in milliseconds |
||||
* @property {String} [targetDisplayName] display name of the recipient |
||||
* (only when shared with others) |
||||
* @property {String} [targetShareWithId] id of the recipient |
||||
* |
||||
*/ |
||||
|
||||
/** |
||||
* Recipient attributes |
||||
* |
||||
* @typedef {Object} OCA.Sharing.RecipientInfo |
||||
* @property {String} shareWith the id of the recipient |
||||
* @property {String} shareWithDisplayName the display name of the recipient |
||||
*/ |
||||
|
||||
/** |
||||
* Shared file info attributes. |
||||
* |
||||
* @typedef {OCA.Files.FileInfo} OCA.Sharing.SharedFileInfo |
||||
* |
||||
* @property {Array.<OCA.Sharing.ShareInfo>} shares array of shares for |
||||
* this file |
||||
* @property {number} mtime most recent share time (if multiple shares) |
||||
* @property {String} shareOwner name of the share owner |
||||
* @property {Array.<String>} recipients name of the first 4 recipients |
||||
* (this is mostly for display purposes) |
||||
* @property {Object.<OCA.Sharing.RecipientInfo>} recipientData (as object for easier |
||||
* passing to HTML data attributes with jQuery) |
||||
*/ |
||||
|
||||
OCA.Sharing.FileList = FileList |
||||
})() |
Loading…
Reference in new issue