diff --git a/apps/files/css/files.scss b/apps/files/css/files.scss index 507a43ade6..2c70da4702 100644 --- a/apps/files/css/files.scss +++ b/apps/files/css/files.scss @@ -295,7 +295,8 @@ table td.fileaction { width: 32px; text-align: center; } -table td.filename a.name { +table td.filename a.name, +table td.filename p.name { display: flex; position:relative; /* Firefox needs to explicitly have this default set … */ -moz-box-sizing: border-box; @@ -331,6 +332,9 @@ table td.filename .thumbnail { position: absolute; z-index: 4; } +table td.filename p.name .thumbnail { + cursor: default; +} // Show slight border around previews for images, txt, etc. table tr[data-has-preview='true'] .thumbnail { @@ -452,7 +456,8 @@ table td.selection { -webkit-transition:background-image 500ms; -moz-transition:background-image 500ms; -o-transition:background-image 500ms; transition:background-image 500ms; } -#fileList tr td.filename a.name label { +#fileList tr td.filename a.name label, +#fileList tr td.filename p.name label { position: absolute; width: 80%; height: 50px; diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index d6f31dcbaf..218a10e6dd 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -124,6 +124,14 @@ */ dirInfo: null, + /** + * Whether to prevent or to execute the default file actions when the + * file name is clicked. + * + * @type boolean + */ + _defaultFileActionsDisabled: false, + /** * File actions handler, defaults to OCA.Files.FileActions * @type OCA.Files.FileActions @@ -284,6 +292,10 @@ this._detailsView.$el.addClass('disappear'); } + if (options && options.defaultFileActionsDisabled) { + this._defaultFileActionsDisabled = options.defaultFileActionsDisabled + } + this._initFileActions(options.fileActions); if (this._detailsView) { @@ -834,7 +846,9 @@ if (!this._detailsView || $(event.target).is('.nametext, .name, .thumbnail') || $(event.target).closest('.nametext').length) { var filename = $tr.attr('data-file'); var renaming = $tr.data('renaming'); - if (!renaming) { + if (this._defaultFileActionsDisabled) { + event.preventDefault(); + } else if (!renaming) { this.fileActions.currentFile = $tr.find('td'); var mime = this.fileActions.getCurrentMimeType(); var type = this.fileActions.getCurrentType(); @@ -1479,6 +1493,11 @@ "class": "name", "href": linkUrl }); + if (this._defaultFileActionsDisabled) { + linkElem = $('

').attr({ + "class": "name" + }) + } linkElem.append('
'); diff --git a/apps/files_sharing/js/app.js b/apps/files_sharing/js/app.js index b6ca71e15d..54dfdfbc64 100644 --- a/apps/files_sharing/js/app.js +++ b/apps/files_sharing/js/app.js @@ -110,6 +110,7 @@ OCA.Sharing.App = { $el, { id: 'shares.deleted', + defaultFileActionsDisabled: true, showDeleted: true, sharedWithUser: true, fileActions: this._restoreShareAction(), diff --git a/apps/files_sharing/js/dist/files_sharing.js b/apps/files_sharing/js/dist/files_sharing.js index 58a2c41ad1..77465e4946 100644 --- a/apps/files_sharing/js/dist/files_sharing.js +++ b/apps/files_sharing/js/dist/files_sharing.js @@ -1,2 +1,2 @@ -!function(e){var i={};function t(s){if(i[s])return i[s].exports;var n=i[s]={i:s,l:!1,exports:{}};return e[s].call(n.exports,n,n.exports,t),n.l=!0,n.exports}t.m=e,t.c=i,t.d=function(e,i,s){t.o(e,i)||Object.defineProperty(e,i,{enumerable:!0,get:s})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,i){if(1&i&&(e=t(e)),8&i)return e;if(4&i&&"object"==typeof e&&e&&e.__esModule)return e;var s=Object.create(null);if(t.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:e}),2&i&&"string"!=typeof e)for(var n in e)t.d(s,n,function(i){return e[i]}.bind(null,n));return s},t.n=function(e){var i=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(i,"a",i),i},t.o=function(e,i){return Object.prototype.hasOwnProperty.call(e,i)},t.p="/js/",t(t.s=11)}({11:function(e,i,t){"use strict";t.r(i);t(12),t(13);t.nc=btoa(OC.requestToken),t.p=OC.linkTo("files_sharing","js/dist/")},12:function(e,i){OCA.Sharing||(OCA.Sharing={}),OCA.Sharing.App={_inFileList:null,_outFileList:null,_overviewFileList:null,initSharingIn:function(e){return this._inFileList?this._inFileList:(this._inFileList=new OCA.Sharing.FileList(e,{id:"shares.self",sharedWithUser:!0,fileActions:this._createFileActions(),config:OCA.Files.App.getFilesConfig(),shown:!0}),this._extendFileList(this._inFileList),this._inFileList.appName=t("files_sharing","Shared with you"),this._inFileList.$el.find("#emptycontent").html('

'+t("files_sharing","Nothing shared with you yet")+"

"+t("files_sharing","Files and folders others share with you will show up here")+"

"),this._inFileList)},initSharingOut:function(e){return this._outFileList?this._outFileList:(this._outFileList=new OCA.Sharing.FileList(e,{id:"shares.others",sharedWithUser:!1,fileActions:this._createFileActions(),config:OCA.Files.App.getFilesConfig(),shown:!0}),this._extendFileList(this._outFileList),this._outFileList.appName=t("files_sharing","Shared with others"),this._outFileList.$el.find("#emptycontent").html('

'+t("files_sharing","Nothing shared yet")+"

"+t("files_sharing","Files and folders you share will show up here")+"

"),this._outFileList)},initSharingLinks:function(e){return this._linkFileList?this._linkFileList:(this._linkFileList=new OCA.Sharing.FileList(e,{id:"shares.link",linksOnly:!0,fileActions:this._createFileActions(),config:OCA.Files.App.getFilesConfig(),shown:!0}),this._extendFileList(this._linkFileList),this._linkFileList.appName=t("files_sharing","Shared by link"),this._linkFileList.$el.find("#emptycontent").html('

'+t("files_sharing","No shared links")+"

"+t("files_sharing","Files and folders you share by link will show up here")+"

"),this._linkFileList)},initSharingDeleted:function(e){return this._deletedFileList?this._deletedFileList:(this._deletedFileList=new OCA.Sharing.FileList(e,{id:"shares.deleted",showDeleted:!0,sharedWithUser:!0,fileActions:this._restoreShareAction(),config:OCA.Files.App.getFilesConfig(),shown:!0}),this._extendFileList(this._deletedFileList),this._deletedFileList.appName=t("files_sharing","Deleted shares"),this._deletedFileList.$el.find("#emptycontent").html('

'+t("files_sharing","No deleted shares")+"

"+t("files_sharing","Shares you deleted will show up here")+"

"),this._deletedFileList)},initShareingOverview:function(e){return this._overviewFileList?this._overviewFileList:(this._overviewFileList=new OCA.Sharing.FileList(e,{id:"shares.overview",config:OCA.Files.App.getFilesConfig(),isOverview:!0,shown:!0}),this._extendFileList(this._overviewFileList),this._overviewFileList.appName=t("files_sharing","Shares"),this._overviewFileList.$el.find("#emptycontent").html('

'+t("files_sharing","No shares")+"

"+t("files_sharing","Shares will show up here")+"

"),this._overviewFileList)},removeSharingIn:function(){this._inFileList&&this._inFileList.$fileList.empty()},removeSharingOut:function(){this._outFileList&&this._outFileList.$fileList.empty()},removeSharingLinks:function(){this._linkFileList&&this._linkFileList.$fileList.empty()},removeSharingDeleted:function(){this._deletedFileList&&this._deletedFileList.$fileList.empty()},removeSharingOverview:function(){this._overviewFileList&&this._overviewFileList.$fileList.empty()},destroy:function(){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:function(){var e=new OCA.Files.FileActions;return e.registerDefaultActions(),e.merge(OCA.Files.fileActions),this._globalActionsInitialized||(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=!0),e.register("dir","Open",OC.PERMISSION_READ,"",function(e,i){OCA.Files.App.setActiveView("files",{silent:!0}),OCA.Files.App.fileList.changeDirectory(OC.joinPaths(i.$file.attr("data-path"),e),!0,!0)}),e.setDefault("dir","Open"),e},_restoreShareAction:function(){var e=new OCA.Files.FileActions;return e.registerAction({name:"Restore",displayName:"",altText:t("files_sharing","Restore share"),mime:"all",permissions:OC.PERMISSION_ALL,iconClass:"icon-history",type:OCA.Files.FileActions.TYPE_INLINE,actionHandler:function(e,i){var s=i.$file.data("shareId");$.post(OC.linkToOCS("apps/files_sharing/api/v1/deletedshares",2)+s).success(function(e){i.fileList.remove(i.fileInfoModel.attributes.name)}).fail(function(){OC.Notification.showTemporary(t("files_sharing","Something happened. Unable to restore the share."))})}}),e},_onActionsUpdated:function(e){_.each([this._inFileList,this._outFileList,this._linkFileList],function(i){i&&(e.action?i.fileActions.registerAction(e.action):e.defaultAction&&i.fileActions.setDefault(e.defaultAction.mime,e.defaultAction.name))})},_extendFileList:function(e){e.fileSummary.$el.find(".filesize").remove()}},$(document).ready(function(){$("#app-content-sharingin").on("show",function(e){OCA.Sharing.App.initSharingIn($(e.target))}),$("#app-content-sharingin").on("hide",function(){OCA.Sharing.App.removeSharingIn()}),$("#app-content-sharingout").on("show",function(e){OCA.Sharing.App.initSharingOut($(e.target))}),$("#app-content-sharingout").on("hide",function(){OCA.Sharing.App.removeSharingOut()}),$("#app-content-sharinglinks").on("show",function(e){OCA.Sharing.App.initSharingLinks($(e.target))}),$("#app-content-sharinglinks").on("hide",function(){OCA.Sharing.App.removeSharingLinks()}),$("#app-content-deletedshares").on("show",function(e){OCA.Sharing.App.initSharingDeleted($(e.target))}),$("#app-content-deletedshares").on("hide",function(){OCA.Sharing.App.removeSharingDeleted()}),$("#app-content-shareoverview").on("show",function(e){OCA.Sharing.App.initShareingOverview($(e.target))}),$("#app-content-shareoverview").on("hide",function(){OCA.Sharing.App.removeSharingOverview()})})},13:function(e,i){var s;(s=function(e,i){this.initialize(e,i)}).prototype=_.extend({},OCA.Files.FileList.prototype,{appName:"Shares",_sharedWithUser:!1,_linksOnly:!1,_showDeleted:!1,_clientSideSort:!0,_allowSelection:!1,_isOverview:!1,initialize:function(e,i){OCA.Files.FileList.prototype.initialize.apply(this,arguments),this.initialized||(i&&i.sharedWithUser&&(this._sharedWithUser=!0),i&&i.linksOnly&&(this._linksOnly=!0),i&&i.showDeleted&&(this._showDeleted=!0),i&&i.isOverview&&(this._isOverview=!0))},_renderRow:function(){return OCA.Files.FileList.prototype._renderRow.apply(this,arguments)},_createRow:function(e){var i=OCA.Files.FileList.prototype._createRow.apply(this,arguments);if(i.find(".filesize").remove(),i.find("td.date").before(i.children("td:first")),i.find("td.filename input:checkbox").remove(),i.attr("data-share-id",_.pluck(e.shares,"id").join(",")),this._sharedWithUser){i.attr("data-share-owner",e.shareOwner),i.attr("data-mounttype","shared-root");var s=parseInt(i.attr("data-permissions"))|OC.PERMISSION_DELETE;i.attr("data-permissions",s)}if(this._showDeleted&&(s=e.permissions,i.attr("data-share-permissions",s)),this._linksOnly){var n=0;e.shares&&null!==e.shares[0].expiration&&(n=moment(e.shares[0].expiration).valueOf()),i.attr("data-expiration",n);var r,a,o=Math.round((n-(new Date).getTime())/1e3/60/60/24*5);o>=160&&(o=160),n>0?(r=OC.Util.formatDate(n),a=OC.Util.relativeModifiedDate(n)):(r=t("files_sharing","No expiration date set"),a="",o=160),td=$("").attr({class:"date"}),td.append($("").attr({class:"modified",title:r,style:"color:rgb("+o+","+o+","+o+")"}).text(a).tooltip({placement:"top"})),i.append(td)}return i},setSharedWithUser:function(e){this._sharedWithUser=!!e},updateEmptyContent:function(){"/"===this.getCurrentDirectory()?(this.$el.find("#emptycontent").toggleClass("hidden",!this.isEmpty),this.$el.find("#filestable thead th").toggleClass("hidden",this.isEmpty),this._linksOnly||this.$el.find("th.column-expiration").addClass("hidden")):OCA.Files.FileList.prototype.updateEmptyContent.apply(this,arguments)},getDirectoryPermissions:function(){return OC.PERMISSION_READ|OC.PERMISSION_DELETE},updateStorageStatistics:function(){},updateRow:function(e,i,t){return e},reload:function(){this.showMask(),this._reloadCall&&this._reloadCall.abort(),this._setCurrentDir("/",!1);var e=[],i={url:OC.linkToOCS("apps/files_sharing/api/v1",2)+"deletedshares",data:{format:"json",include_tags:!0},type:"GET",beforeSend:function(e){e.setRequestHeader("OCS-APIREQUEST","true")}},t={url:OC.linkToOCS("apps/files_sharing/api/v1")+"shares",data:{format:"json",shared_with_me:!1!==this._sharedWithUser,include_tags:!0},type:"GET",beforeSend:function(e){e.setRequestHeader("OCS-APIREQUEST","true")}},s={url:OC.linkToOCS("apps/files_sharing/api/v1")+"remote_shares",data:{format:"json",include_tags:!0},type:"GET",beforeSend:function(e){e.setRequestHeader("OCS-APIREQUEST","true")}};this._showDeleted?e.push($.ajax(i)):(e.push($.ajax(t)),(!1!==this._sharedWithUser||this._isOverview)&&e.push($.ajax(s)),this._isOverview&&(t.data.shared_with_me=!t.data.shared_with_me,e.push($.ajax(t)))),this._reloadCall=$.when.apply($,e);var n=this.reloadCallback.bind(this);return this._reloadCall.then(n,n)},reloadCallback:function(e,i,s){delete this._reloadCall,this.hideMask(),this.$el.find("#headerSharedWith").text(t("files_sharing",this._sharedWithUser?"Shared by":"Shared with"));var n=[];return e[0]&&e[0].ocs&&(e=e[0]),i&&i[0]&&i[0].ocs&&(i=i[0]),s&&s[0]&&s[0].ocs&&(s=s[0]),e.ocs&&e.ocs.data&&(n=n.concat(this._makeFilesFromShares(e.ocs.data,this._sharedWithUser))),i&&i.ocs&&i.ocs.data&&(n=n.concat(this._makeFilesFromRemoteShares(i.ocs.data))),s&&s.ocs&&s.ocs.data&&(n=n.concat(this._makeFilesFromShares(s.ocs.data,!this._sharedWithUser))),this.setFiles(n),!0},_makeFilesFromRemoteShares:function(e){var i=e;return i=_.chain(i).map(function(e){var i={shareOwner:e.owner+"@"+e.remote.replace(/.*?:\/\//g,""),name:OC.basename(e.mountpoint),mtime:1e3*e.mtime,mimetype:e.mimetype,type:e.type,id:e.file_id,path:OC.dirname(e.mountpoint),permissions:e.permissions,tags:e.tags||[]};return i.shares=[{id:e.id,type:OC.Share.SHARE_TYPE_REMOTE}],i}).value()},_makeFilesFromShares:function(e,i){var t=e;return this._linksOnly&&(t=_.filter(e,function(e){return e.share_type===OC.Share.SHARE_TYPE_LINK})),(t=_.chain(t).map(function(e){var t={id:e.file_source,icon:OC.MimeType.getIconUrl(e.mimetype),mimetype:e.mimetype,tags:e.tags||[]};return"folder"===e.item_type?(t.type="dir",t.mimetype="httpd/unix-directory"):t.type="file",t.share={id:e.id,type:e.share_type,target:e.share_with,stime:1e3*e.stime,expiration:e.expiration},i?(t.shareOwner=e.displayname_owner,t.shareOwnerId=e.uid_owner,t.name=OC.basename(e.file_target),t.path=OC.dirname(e.file_target),t.permissions=e.permissions,t.path&&(t.extraData=e.file_target)):(e.share_type!==OC.Share.SHARE_TYPE_LINK&&(t.share.targetDisplayName=e.share_with_displayname,t.share.targetShareWithId=e.share_with),t.name=OC.basename(e.path),t.path=OC.dirname(e.path),t.permissions=OC.PERMISSION_ALL,t.path&&(t.extraData=e.path)),t}).reduce(function(e,i){var t=e[i.id],s=i.share.targetDisplayName,n=i.share.targetShareWithId;return t?(i.share.stime>t.mtime&&(t.mtime=i.share.stime),t.shares.push(i.share)):((t=e[i.id]=i).shares=[i.share],t.recipients={},t.recipientData={},t.shareTypes={},t.recipientsCount=0,t.mtime=i.share.stime),s&&(t.recipientsCount<4&&(t.recipients[s]=!0,t.recipientData[t.recipientsCount]={shareWith:n,shareWithDisplayName:s}),t.recipientsCount++),t.shareTypes[i.share.type]=!0,delete i.share,e},{}).values().each(function(e){e.mountType="shared",delete e.recipientsCount,i?delete e.shareTypes:e.shareTypes=_.keys(e.shareTypes)}).value()).sort(this._sortComparator)}}),OCA.Sharing.FileList=s}}); +!function(e){var i={};function t(s){if(i[s])return i[s].exports;var n=i[s]={i:s,l:!1,exports:{}};return e[s].call(n.exports,n,n.exports,t),n.l=!0,n.exports}t.m=e,t.c=i,t.d=function(e,i,s){t.o(e,i)||Object.defineProperty(e,i,{enumerable:!0,get:s})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,i){if(1&i&&(e=t(e)),8&i)return e;if(4&i&&"object"==typeof e&&e&&e.__esModule)return e;var s=Object.create(null);if(t.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:e}),2&i&&"string"!=typeof e)for(var n in e)t.d(s,n,function(i){return e[i]}.bind(null,n));return s},t.n=function(e){var i=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(i,"a",i),i},t.o=function(e,i){return Object.prototype.hasOwnProperty.call(e,i)},t.p="/js/",t(t.s=11)}({11:function(e,i,t){"use strict";t.r(i);t(12),t(13);t.nc=btoa(OC.requestToken),t.p=OC.linkTo("files_sharing","js/dist/")},12:function(e,i){OCA.Sharing||(OCA.Sharing={}),OCA.Sharing.App={_inFileList:null,_outFileList:null,_overviewFileList:null,initSharingIn:function(e){return this._inFileList?this._inFileList:(this._inFileList=new OCA.Sharing.FileList(e,{id:"shares.self",sharedWithUser:!0,fileActions:this._createFileActions(),config:OCA.Files.App.getFilesConfig(),shown:!0}),this._extendFileList(this._inFileList),this._inFileList.appName=t("files_sharing","Shared with you"),this._inFileList.$el.find("#emptycontent").html('

'+t("files_sharing","Nothing shared with you yet")+"

"+t("files_sharing","Files and folders others share with you will show up here")+"

"),this._inFileList)},initSharingOut:function(e){return this._outFileList?this._outFileList:(this._outFileList=new OCA.Sharing.FileList(e,{id:"shares.others",sharedWithUser:!1,fileActions:this._createFileActions(),config:OCA.Files.App.getFilesConfig(),shown:!0}),this._extendFileList(this._outFileList),this._outFileList.appName=t("files_sharing","Shared with others"),this._outFileList.$el.find("#emptycontent").html('

'+t("files_sharing","Nothing shared yet")+"

"+t("files_sharing","Files and folders you share will show up here")+"

"),this._outFileList)},initSharingLinks:function(e){return this._linkFileList?this._linkFileList:(this._linkFileList=new OCA.Sharing.FileList(e,{id:"shares.link",linksOnly:!0,fileActions:this._createFileActions(),config:OCA.Files.App.getFilesConfig(),shown:!0}),this._extendFileList(this._linkFileList),this._linkFileList.appName=t("files_sharing","Shared by link"),this._linkFileList.$el.find("#emptycontent").html('

'+t("files_sharing","No shared links")+"

"+t("files_sharing","Files and folders you share by link will show up here")+"

"),this._linkFileList)},initSharingDeleted:function(e){return this._deletedFileList?this._deletedFileList:(this._deletedFileList=new OCA.Sharing.FileList(e,{id:"shares.deleted",defaultFileActionsDisabled:!0,showDeleted:!0,sharedWithUser:!0,fileActions:this._restoreShareAction(),config:OCA.Files.App.getFilesConfig(),shown:!0}),this._extendFileList(this._deletedFileList),this._deletedFileList.appName=t("files_sharing","Deleted shares"),this._deletedFileList.$el.find("#emptycontent").html('

'+t("files_sharing","No deleted shares")+"

"+t("files_sharing","Shares you deleted will show up here")+"

"),this._deletedFileList)},initShareingOverview:function(e){return this._overviewFileList?this._overviewFileList:(this._overviewFileList=new OCA.Sharing.FileList(e,{id:"shares.overview",config:OCA.Files.App.getFilesConfig(),isOverview:!0,shown:!0}),this._extendFileList(this._overviewFileList),this._overviewFileList.appName=t("files_sharing","Shares"),this._overviewFileList.$el.find("#emptycontent").html('

'+t("files_sharing","No shares")+"

"+t("files_sharing","Shares will show up here")+"

"),this._overviewFileList)},removeSharingIn:function(){this._inFileList&&this._inFileList.$fileList.empty()},removeSharingOut:function(){this._outFileList&&this._outFileList.$fileList.empty()},removeSharingLinks:function(){this._linkFileList&&this._linkFileList.$fileList.empty()},removeSharingDeleted:function(){this._deletedFileList&&this._deletedFileList.$fileList.empty()},removeSharingOverview:function(){this._overviewFileList&&this._overviewFileList.$fileList.empty()},destroy:function(){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:function(){var e=new OCA.Files.FileActions;return e.registerDefaultActions(),e.merge(OCA.Files.fileActions),this._globalActionsInitialized||(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=!0),e.register("dir","Open",OC.PERMISSION_READ,"",function(e,i){OCA.Files.App.setActiveView("files",{silent:!0}),OCA.Files.App.fileList.changeDirectory(OC.joinPaths(i.$file.attr("data-path"),e),!0,!0)}),e.setDefault("dir","Open"),e},_restoreShareAction:function(){var e=new OCA.Files.FileActions;return e.registerAction({name:"Restore",displayName:"",altText:t("files_sharing","Restore share"),mime:"all",permissions:OC.PERMISSION_ALL,iconClass:"icon-history",type:OCA.Files.FileActions.TYPE_INLINE,actionHandler:function(e,i){var s=i.$file.data("shareId");$.post(OC.linkToOCS("apps/files_sharing/api/v1/deletedshares",2)+s).success(function(e){i.fileList.remove(i.fileInfoModel.attributes.name)}).fail(function(){OC.Notification.showTemporary(t("files_sharing","Something happened. Unable to restore the share."))})}}),e},_onActionsUpdated:function(e){_.each([this._inFileList,this._outFileList,this._linkFileList],function(i){i&&(e.action?i.fileActions.registerAction(e.action):e.defaultAction&&i.fileActions.setDefault(e.defaultAction.mime,e.defaultAction.name))})},_extendFileList:function(e){e.fileSummary.$el.find(".filesize").remove()}},$(document).ready(function(){$("#app-content-sharingin").on("show",function(e){OCA.Sharing.App.initSharingIn($(e.target))}),$("#app-content-sharingin").on("hide",function(){OCA.Sharing.App.removeSharingIn()}),$("#app-content-sharingout").on("show",function(e){OCA.Sharing.App.initSharingOut($(e.target))}),$("#app-content-sharingout").on("hide",function(){OCA.Sharing.App.removeSharingOut()}),$("#app-content-sharinglinks").on("show",function(e){OCA.Sharing.App.initSharingLinks($(e.target))}),$("#app-content-sharinglinks").on("hide",function(){OCA.Sharing.App.removeSharingLinks()}),$("#app-content-deletedshares").on("show",function(e){OCA.Sharing.App.initSharingDeleted($(e.target))}),$("#app-content-deletedshares").on("hide",function(){OCA.Sharing.App.removeSharingDeleted()}),$("#app-content-shareoverview").on("show",function(e){OCA.Sharing.App.initShareingOverview($(e.target))}),$("#app-content-shareoverview").on("hide",function(){OCA.Sharing.App.removeSharingOverview()})})},13:function(e,i){var s;(s=function(e,i){this.initialize(e,i)}).prototype=_.extend({},OCA.Files.FileList.prototype,{appName:"Shares",_sharedWithUser:!1,_linksOnly:!1,_showDeleted:!1,_clientSideSort:!0,_allowSelection:!1,_isOverview:!1,initialize:function(e,i){OCA.Files.FileList.prototype.initialize.apply(this,arguments),this.initialized||(i&&i.sharedWithUser&&(this._sharedWithUser=!0),i&&i.linksOnly&&(this._linksOnly=!0),i&&i.showDeleted&&(this._showDeleted=!0),i&&i.isOverview&&(this._isOverview=!0))},_renderRow:function(){return OCA.Files.FileList.prototype._renderRow.apply(this,arguments)},_createRow:function(e){var i=OCA.Files.FileList.prototype._createRow.apply(this,arguments);if(i.find(".filesize").remove(),i.find("td.date").before(i.children("td:first")),i.find("td.filename input:checkbox").remove(),i.attr("data-share-id",_.pluck(e.shares,"id").join(",")),this._sharedWithUser){i.attr("data-share-owner",e.shareOwner),i.attr("data-mounttype","shared-root");var s=parseInt(i.attr("data-permissions"))|OC.PERMISSION_DELETE;i.attr("data-permissions",s)}if(this._showDeleted&&(s=e.permissions,i.attr("data-share-permissions",s)),this._linksOnly){var n=0;e.shares&&null!==e.shares[0].expiration&&(n=moment(e.shares[0].expiration).valueOf()),i.attr("data-expiration",n);var r,a,o=Math.round((n-(new Date).getTime())/1e3/60/60/24*5);o>=160&&(o=160),n>0?(r=OC.Util.formatDate(n),a=OC.Util.relativeModifiedDate(n)):(r=t("files_sharing","No expiration date set"),a="",o=160),td=$("").attr({class:"date"}),td.append($("").attr({class:"modified",title:r,style:"color:rgb("+o+","+o+","+o+")"}).text(a).tooltip({placement:"top"})),i.append(td)}return i},setSharedWithUser:function(e){this._sharedWithUser=!!e},updateEmptyContent:function(){"/"===this.getCurrentDirectory()?(this.$el.find("#emptycontent").toggleClass("hidden",!this.isEmpty),this.$el.find("#filestable thead th").toggleClass("hidden",this.isEmpty),this._linksOnly||this.$el.find("th.column-expiration").addClass("hidden")):OCA.Files.FileList.prototype.updateEmptyContent.apply(this,arguments)},getDirectoryPermissions:function(){return OC.PERMISSION_READ|OC.PERMISSION_DELETE},updateStorageStatistics:function(){},updateRow:function(e,i,t){return e},reload:function(){this.showMask(),this._reloadCall&&this._reloadCall.abort(),this._setCurrentDir("/",!1);var e=[],i={url:OC.linkToOCS("apps/files_sharing/api/v1",2)+"deletedshares",data:{format:"json",include_tags:!0},type:"GET",beforeSend:function(e){e.setRequestHeader("OCS-APIREQUEST","true")}},t={url:OC.linkToOCS("apps/files_sharing/api/v1")+"shares",data:{format:"json",shared_with_me:!1!==this._sharedWithUser,include_tags:!0},type:"GET",beforeSend:function(e){e.setRequestHeader("OCS-APIREQUEST","true")}},s={url:OC.linkToOCS("apps/files_sharing/api/v1")+"remote_shares",data:{format:"json",include_tags:!0},type:"GET",beforeSend:function(e){e.setRequestHeader("OCS-APIREQUEST","true")}};this._showDeleted?e.push($.ajax(i)):(e.push($.ajax(t)),(!1!==this._sharedWithUser||this._isOverview)&&e.push($.ajax(s)),this._isOverview&&(t.data.shared_with_me=!t.data.shared_with_me,e.push($.ajax(t)))),this._reloadCall=$.when.apply($,e);var n=this.reloadCallback.bind(this);return this._reloadCall.then(n,n)},reloadCallback:function(e,i,s){delete this._reloadCall,this.hideMask(),this.$el.find("#headerSharedWith").text(t("files_sharing",this._sharedWithUser?"Shared by":"Shared with"));var n=[];return e[0]&&e[0].ocs&&(e=e[0]),i&&i[0]&&i[0].ocs&&(i=i[0]),s&&s[0]&&s[0].ocs&&(s=s[0]),e.ocs&&e.ocs.data&&(n=n.concat(this._makeFilesFromShares(e.ocs.data,this._sharedWithUser))),i&&i.ocs&&i.ocs.data&&(n=n.concat(this._makeFilesFromRemoteShares(i.ocs.data))),s&&s.ocs&&s.ocs.data&&(n=n.concat(this._makeFilesFromShares(s.ocs.data,!this._sharedWithUser))),this.setFiles(n),!0},_makeFilesFromRemoteShares:function(e){var i=e;return i=_.chain(i).map(function(e){var i={shareOwner:e.owner+"@"+e.remote.replace(/.*?:\/\//g,""),name:OC.basename(e.mountpoint),mtime:1e3*e.mtime,mimetype:e.mimetype,type:e.type,id:e.file_id,path:OC.dirname(e.mountpoint),permissions:e.permissions,tags:e.tags||[]};return i.shares=[{id:e.id,type:OC.Share.SHARE_TYPE_REMOTE}],i}).value()},_makeFilesFromShares:function(e,i){var t=e;return this._linksOnly&&(t=_.filter(e,function(e){return e.share_type===OC.Share.SHARE_TYPE_LINK})),(t=_.chain(t).map(function(e){var t={id:e.file_source,icon:OC.MimeType.getIconUrl(e.mimetype),mimetype:e.mimetype,tags:e.tags||[]};return"folder"===e.item_type?(t.type="dir",t.mimetype="httpd/unix-directory"):t.type="file",t.share={id:e.id,type:e.share_type,target:e.share_with,stime:1e3*e.stime,expiration:e.expiration},i?(t.shareOwner=e.displayname_owner,t.shareOwnerId=e.uid_owner,t.name=OC.basename(e.file_target),t.path=OC.dirname(e.file_target),t.permissions=e.permissions,t.path&&(t.extraData=e.file_target)):(e.share_type!==OC.Share.SHARE_TYPE_LINK&&(t.share.targetDisplayName=e.share_with_displayname,t.share.targetShareWithId=e.share_with),t.name=OC.basename(e.path),t.path=OC.dirname(e.path),t.permissions=OC.PERMISSION_ALL,t.path&&(t.extraData=e.path)),t}).reduce(function(e,i){var t=e[i.id],s=i.share.targetDisplayName,n=i.share.targetShareWithId;return t?(i.share.stime>t.mtime&&(t.mtime=i.share.stime),t.shares.push(i.share)):((t=e[i.id]=i).shares=[i.share],t.recipients={},t.recipientData={},t.shareTypes={},t.recipientsCount=0,t.mtime=i.share.stime),s&&(t.recipientsCount<4&&(t.recipients[s]=!0,t.recipientData[t.recipientsCount]={shareWith:n,shareWithDisplayName:s}),t.recipientsCount++),t.shareTypes[i.share.type]=!0,delete i.share,e},{}).values().each(function(e){e.mountType="shared",delete e.recipientsCount,i?delete e.shareTypes:e.shareTypes=_.keys(e.shareTypes)}).value()).sort(this._sortComparator)}}),OCA.Sharing.FileList=s}}); //# sourceMappingURL=files_sharing.js.map \ No newline at end of file diff --git a/apps/files_sharing/js/dist/files_sharing.js.map b/apps/files_sharing/js/dist/files_sharing.js.map index 250515ff0a..143a368cf6 100644 --- a/apps/files_sharing/js/dist/files_sharing.js.map +++ b/apps/files_sharing/js/dist/files_sharing.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./apps/files_sharing/src/files_sharing.js","webpack:///./apps/files_sharing/js/app.js","webpack:///./apps/files_sharing/js/sharedfilelist.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","__webpack_nonce__","btoa","OC","requestToken","__webpack_public_path__","linkTo","OCA","Sharing","App","_inFileList","_outFileList","_overviewFileList","initSharingIn","$el","this","FileList","id","sharedWithUser","fileActions","_createFileActions","config","Files","getFilesConfig","shown","_extendFileList","appName","find","html","initSharingOut","initSharingLinks","_linkFileList","linksOnly","initSharingDeleted","_deletedFileList","showDeleted","_restoreShareAction","initShareingOverview","isOverview","removeSharingIn","$fileList","empty","removeSharingOut","removeSharingLinks","removeSharingDeleted","removeSharingOverview","destroy","off","_onActionsUpdated","_globalActionsInitialized","FileActions","registerDefaultActions","merge","_","on","register","PERMISSION_READ","filename","context","setActiveView","silent","fileList","changeDirectory","joinPaths","$file","attr","setDefault","registerAction","displayName","altText","mime","permissions","PERMISSION_ALL","iconClass","type","TYPE_INLINE","actionHandler","fileName","shareId","data","$","post","linkToOCS","success","result","remove","fileInfoModel","attributes","fail","Notification","showTemporary","ev","each","list","action","defaultAction","fileSummary","document","ready","e","target","options","initialize","extend","_sharedWithUser","_linksOnly","_showDeleted","_clientSideSort","_allowSelection","_isOverview","apply","arguments","initialized","_renderRow","_createRow","fileData","$tr","before","children","pluck","shares","join","shareOwner","permission","parseInt","PERMISSION_DELETE","expirationTimestamp","expiration","moment","valueOf","formatted","text","modifiedColor","Math","round","Date","getTime","Util","formatDate","relativeModifiedDate","td","class","append","title","style","tooltip","placement","setSharedWithUser","state","updateEmptyContent","getCurrentDirectory","toggleClass","isEmpty","addClass","getDirectoryPermissions","updateStorageStatistics","updateRow","fileInfo","reload","showMask","_reloadCall","abort","_setCurrentDir","promises","deletedShares","url","format","include_tags","beforeSend","xhr","setRequestHeader","shared_with_me","remoteShares","push","ajax","when","callBack","reloadCallback","then","additionalShares","hideMask","files","ocs","concat","_makeFilesFromShares","_makeFilesFromRemoteShares","setFiles","chain","map","share","file","owner","remote","replace","basename","mountpoint","mtime","mimetype","file_id","path","dirname","tags","Share","SHARE_TYPE_REMOTE","filter","share_type","SHARE_TYPE_LINK","file_source","icon","MimeType","getIconUrl","item_type","share_with","stime","displayname_owner","shareOwnerId","uid_owner","file_target","extraData","targetDisplayName","share_with_displayname","targetShareWithId","reduce","memo","recipient","recipientId","recipients","recipientData","shareTypes","recipientsCount","shareWith","shareWithDisplayName","values","mountType","keys","sort","_sortComparator"],"mappings":"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","file":"files_sharing.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/js/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 11);\n","__webpack_nonce__ = btoa(OC.requestToken);\n__webpack_public_path__ = OC.linkTo('files_sharing', 'js/dist/');\n\nimport '../js/app';\nimport '../js/sharedfilelist';\n","/*\n * Copyright (c) 2014 Vincent Petry \n *\n * This file is licensed under the Affero General Public License version 3\n * or later.\n *\n * See the COPYING-README file.\n *\n */\n\nif (!OCA.Sharing) {\n\t/**\n\t * @namespace OCA.Sharing\n\t */\n\tOCA.Sharing = {};\n}\n/**\n * @namespace\n */\nOCA.Sharing.App = {\n\n\t_inFileList: null,\n\t_outFileList: null,\n\t_overviewFileList: null,\n\n\tinitSharingIn: function($el) {\n\t\tif (this._inFileList) {\n\t\t\treturn this._inFileList;\n\t\t}\n\n\t\tthis._inFileList = new OCA.Sharing.FileList(\n\t\t\t$el,\n\t\t\t{\n\t\t\t\tid: 'shares.self',\n\t\t\t\tsharedWithUser: true,\n\t\t\t\tfileActions: this._createFileActions(),\n\t\t\t\tconfig: OCA.Files.App.getFilesConfig(),\n\t\t\t\t// The file list is created when a \"show\" event is handled, so\n\t\t\t\t// it should be marked as \"shown\" like it would have been done\n\t\t\t\t// if handling the event with the file list already created.\n\t\t\t\tshown: true\n\t\t\t}\n\t\t);\n\n\t\tthis._extendFileList(this._inFileList);\n\t\tthis._inFileList.appName = t('files_sharing', 'Shared with you');\n\t\tthis._inFileList.$el.find('#emptycontent').html('
' +\n\t\t\t'

' + t('files_sharing', 'Nothing shared with you yet') + '

' +\n\t\t\t'

' + t('files_sharing', 'Files and folders others share with you will show up here') + '

');\n\t\treturn this._inFileList;\n\t},\n\n\tinitSharingOut: function($el) {\n\t\tif (this._outFileList) {\n\t\t\treturn this._outFileList;\n\t\t}\n\t\tthis._outFileList = new OCA.Sharing.FileList(\n\t\t\t$el,\n\t\t\t{\n\t\t\t\tid: 'shares.others',\n\t\t\t\tsharedWithUser: false,\n\t\t\t\tfileActions: this._createFileActions(),\n\t\t\t\tconfig: OCA.Files.App.getFilesConfig(),\n\t\t\t\t// The file list is created when a \"show\" event is handled, so\n\t\t\t\t// it should be marked as \"shown\" like it would have been done\n\t\t\t\t// if handling the event with the file list already created.\n\t\t\t\tshown: true\n\t\t\t}\n\t\t);\n\n\t\tthis._extendFileList(this._outFileList);\n\t\tthis._outFileList.appName = t('files_sharing', 'Shared with others');\n\t\tthis._outFileList.$el.find('#emptycontent').html('
' +\n\t\t\t'

' + t('files_sharing', 'Nothing shared yet') + '

' +\n\t\t\t'

' + t('files_sharing', 'Files and folders you share will show up here') + '

');\n\t\treturn this._outFileList;\n\t},\n\n\tinitSharingLinks: function($el) {\n\t\tif (this._linkFileList) {\n\t\t\treturn this._linkFileList;\n\t\t}\n\t\tthis._linkFileList = new OCA.Sharing.FileList(\n\t\t\t$el,\n\t\t\t{\n\t\t\t\tid: 'shares.link',\n\t\t\t\tlinksOnly: true,\n\t\t\t\tfileActions: this._createFileActions(),\n\t\t\t\tconfig: OCA.Files.App.getFilesConfig(),\n\t\t\t\t// The file list is created when a \"show\" event is handled, so\n\t\t\t\t// it should be marked as \"shown\" like it would have been done\n\t\t\t\t// if handling the event with the file list already created.\n\t\t\t\tshown: true\n\t\t\t}\n\t\t);\n\n\t\tthis._extendFileList(this._linkFileList);\n\t\tthis._linkFileList.appName = t('files_sharing', 'Shared by link');\n\t\tthis._linkFileList.$el.find('#emptycontent').html('
' +\n\t\t\t'

' + t('files_sharing', 'No shared links') + '

' +\n\t\t\t'

' + t('files_sharing', 'Files and folders you share by link will show up here') + '

');\n\t\treturn this._linkFileList;\n\t},\n\n\tinitSharingDeleted: function($el) {\n\t\tif (this._deletedFileList) {\n\t\t\treturn this._deletedFileList;\n\t\t}\n\t\tthis._deletedFileList = new OCA.Sharing.FileList(\n\t\t\t$el,\n\t\t\t{\n\t\t\t\tid: 'shares.deleted',\n\t\t\t\tshowDeleted: true,\n\t\t\t\tsharedWithUser: true,\n\t\t\t\tfileActions: this._restoreShareAction(),\n\t\t\t\tconfig: OCA.Files.App.getFilesConfig(),\n\t\t\t\t// The file list is created when a \"show\" event is handled, so\n\t\t\t\t// it should be marked as \"shown\" like it would have been done\n\t\t\t\t// if handling the event with the file list already created.\n\t\t\t\tshown: true\n\t\t\t}\n\t\t);\n\n\t\tthis._extendFileList(this._deletedFileList);\n\t\tthis._deletedFileList.appName = t('files_sharing', 'Deleted shares');\n\t\tthis._deletedFileList.$el.find('#emptycontent').html('
' +\n\t\t\t'

' + t('files_sharing', 'No deleted shares') + '

' +\n\t\t\t'

' + t('files_sharing', 'Shares you deleted will show up here') + '

');\n\t\treturn this._deletedFileList;\n\t},\n\n\tinitShareingOverview: function($el) {\n\t\tif (this._overviewFileList) {\n\t\t\treturn this._overviewFileList;\n\t\t}\n\t\tthis._overviewFileList = new OCA.Sharing.FileList(\n\t\t\t$el,\n\t\t\t{\n\t\t\t\tid: 'shares.overview',\n\t\t\t\tconfig: OCA.Files.App.getFilesConfig(),\n\t\t\t\tisOverview: true,\n\t\t\t\t// The file list is created when a \"show\" event is handled, so\n\t\t\t\t// it should be marked as \"shown\" like it would have been done\n\t\t\t\t// if handling the event with the file list already created.\n\t\t\t\tshown: true\n\t\t\t}\n\t\t);\n\n\t\tthis._extendFileList(this._overviewFileList);\n\t\tthis._overviewFileList.appName = t('files_sharing', 'Shares');\n\t\tthis._overviewFileList.$el.find('#emptycontent').html('
' +\n\t\t\t'

' + t('files_sharing', 'No shares') + '

' +\n\t\t\t'

' + t('files_sharing', 'Shares will show up here') + '

');\n\t\treturn this._overviewFileList;\n\t},\n\n\tremoveSharingIn: function() {\n\t\tif (this._inFileList) {\n\t\t\tthis._inFileList.$fileList.empty();\n\t\t}\n\t},\n\n\tremoveSharingOut: function() {\n\t\tif (this._outFileList) {\n\t\t\tthis._outFileList.$fileList.empty();\n\t\t}\n\t},\n\n\tremoveSharingLinks: function() {\n\t\tif (this._linkFileList) {\n\t\t\tthis._linkFileList.$fileList.empty();\n\t\t}\n\t},\n\n\tremoveSharingDeleted: function() {\n\t\tif (this._deletedFileList) {\n\t\t\tthis._deletedFileList.$fileList.empty();\n\t\t}\n\t},\n\n\tremoveSharingOverview: function() {\n\t\tif (this._overviewFileList) {\n\t\t\tthis._overviewFileList.$fileList.empty();\n\t\t}\n\t},\n\n\t/**\n\t * Destroy the app\n\t */\n\tdestroy: function() {\n\t\tOCA.Files.fileActions.off('setDefault.app-sharing', this._onActionsUpdated);\n\t\tOCA.Files.fileActions.off('registerAction.app-sharing', this._onActionsUpdated);\n\t\tthis.removeSharingIn();\n\t\tthis.removeSharingOut();\n\t\tthis.removeSharingLinks();\n\t\tthis._inFileList = null;\n\t\tthis._outFileList = null;\n\t\tthis._linkFileList = null;\n\t\tthis._overviewFileList = null;\n\t\tdelete this._globalActionsInitialized;\n\t},\n\n\t_createFileActions: function() {\n\t\t// inherit file actions from the files app\n\t\tvar fileActions = new OCA.Files.FileActions();\n\t\t// note: not merging the legacy actions because legacy apps are not\n\t\t// compatible with the sharing overview and need to be adapted first\n\t\tfileActions.registerDefaultActions();\n\t\tfileActions.merge(OCA.Files.fileActions);\n\n\t\tif (!this._globalActionsInitialized) {\n\t\t\t// in case actions are registered later\n\t\t\tthis._onActionsUpdated = _.bind(this._onActionsUpdated, this);\n\t\t\tOCA.Files.fileActions.on('setDefault.app-sharing', this._onActionsUpdated);\n\t\t\tOCA.Files.fileActions.on('registerAction.app-sharing', this._onActionsUpdated);\n\t\t\tthis._globalActionsInitialized = true;\n\t\t}\n\n\t\t// when the user clicks on a folder, redirect to the corresponding\n\t\t// folder in the files app instead of opening it directly\n\t\tfileActions.register('dir', 'Open', OC.PERMISSION_READ, '', function (filename, context) {\n\t\t\tOCA.Files.App.setActiveView('files', {silent: true});\n\t\t\tOCA.Files.App.fileList.changeDirectory(OC.joinPaths(context.$file.attr('data-path'), filename), true, true);\n\t\t});\n\t\tfileActions.setDefault('dir', 'Open');\n\t\treturn fileActions;\n\t},\n\n\t_restoreShareAction: function() {\n\t\tvar fileActions = new OCA.Files.FileActions();\n\t\tfileActions.registerAction({\n\t\t\tname: 'Restore',\n\t\t\tdisplayName: '',\n\t\t\taltText: t('files_sharing', 'Restore share'),\n\t\t\tmime: 'all',\n\t\t\tpermissions: OC.PERMISSION_ALL,\n\t\t\ticonClass: 'icon-history',\n\t\t\ttype: OCA.Files.FileActions.TYPE_INLINE,\n\t\t\tactionHandler: function(fileName, context) {\n\t\t\t\tvar shareId = context.$file.data('shareId');\n\t\t\t\t$.post(OC.linkToOCS('apps/files_sharing/api/v1/deletedshares', 2) + shareId)\n\t\t\t\t.success(function(result) {\n\t\t\t\t\tcontext.fileList.remove(context.fileInfoModel.attributes.name);\n\t\t\t\t}).fail(function() {\n\t\t\t\t\tOC.Notification.showTemporary(t('files_sharing', 'Something happened. Unable to restore the share.'));\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\treturn fileActions;\n\t},\n\n\t_onActionsUpdated: function(ev) {\n\t\t_.each([this._inFileList, this._outFileList, this._linkFileList], function(list) {\n\t\t\tif (!list) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (ev.action) {\n\t\t\t\tlist.fileActions.registerAction(ev.action);\n\t\t\t} else if (ev.defaultAction) {\n\t\t\t\tlist.fileActions.setDefault(\n\t\t\t\t\tev.defaultAction.mime,\n\t\t\t\t\tev.defaultAction.name\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t},\n\n\t_extendFileList: function(fileList) {\n\t\t// remove size column from summary\n\t\tfileList.fileSummary.$el.find('.filesize').remove();\n\t}\n};\n\n$(document).ready(function() {\n\t$('#app-content-sharingin').on('show', function(e) {\n\t\tOCA.Sharing.App.initSharingIn($(e.target));\n\t});\n\t$('#app-content-sharingin').on('hide', function() {\n\t\tOCA.Sharing.App.removeSharingIn();\n\t});\n\t$('#app-content-sharingout').on('show', function(e) {\n\t\tOCA.Sharing.App.initSharingOut($(e.target));\n\t});\n\t$('#app-content-sharingout').on('hide', function() {\n\t\tOCA.Sharing.App.removeSharingOut();\n\t});\n\t$('#app-content-sharinglinks').on('show', function(e) {\n\t\tOCA.Sharing.App.initSharingLinks($(e.target));\n\t});\n\t$('#app-content-sharinglinks').on('hide', function() {\n\t\tOCA.Sharing.App.removeSharingLinks();\n\t});\n\t$('#app-content-deletedshares').on('show', function(e) {\n\t\tOCA.Sharing.App.initSharingDeleted($(e.target));\n\t});\n\t$('#app-content-deletedshares').on('hide', function() {\n\t\tOCA.Sharing.App.removeSharingDeleted();\n\t});\n\t$('#app-content-shareoverview').on('show', function(e) {\n\t\tOCA.Sharing.App.initShareingOverview($(e.target));\n\t});\n\t$('#app-content-shareoverview').on('hide', function() {\n\t\tOCA.Sharing.App.removeSharingOverview();\n\t});\n});\n","/*\n * Copyright (c) 2014 Vincent Petry \n *\n * This file is licensed under the Affero General Public License version 3\n * or later.\n *\n * See the COPYING-README file.\n *\n */\n(function() {\n\n\t/**\n\t * @class OCA.Sharing.FileList\n\t * @augments OCA.Files.FileList\n\t *\n\t * @classdesc Sharing file list.\n\t * Contains both \"shared with others\" and \"shared with you\" modes.\n\t *\n\t * @param $el container element with existing markup for the #controls\n\t * and a table\n\t * @param [options] map of options, see other parameters\n\t * @param {boolean} [options.sharedWithUser] true to return files shared with\n\t * the current user, false to return files that the user shared with others.\n\t * Defaults to false.\n\t * @param {boolean} [options.linksOnly] true to return only link shares\n\t */\n\tvar FileList = function($el, options) {\n\t\tthis.initialize($el, options);\n\t};\n\tFileList.prototype = _.extend({}, OCA.Files.FileList.prototype,\n\t\t/** @lends OCA.Sharing.FileList.prototype */ {\n\t\tappName: 'Shares',\n\n\t\t/**\n\t\t * Whether the list shows the files shared with the user (true) or\n\t\t * the files that the user shared with others (false).\n\t\t */\n\t\t_sharedWithUser: false,\n\t\t_linksOnly: false,\n\t\t_showDeleted: false,\n\t\t_clientSideSort: true,\n\t\t_allowSelection: false,\n\t\t_isOverview: false,\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tinitialize: function($el, options) {\n\t\t\tOCA.Files.FileList.prototype.initialize.apply(this, arguments);\n\t\t\tif (this.initialized) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// TODO: consolidate both options\n\t\t\tif (options && options.sharedWithUser) {\n\t\t\t\tthis._sharedWithUser = true;\n\t\t\t}\n\t\t\tif (options && options.linksOnly) {\n\t\t\t\tthis._linksOnly = true;\n\t\t\t}\n\t\t\tif (options && options.showDeleted) {\n\t\t\t\tthis._showDeleted = true;\n\t\t\t}\n\t\t\tif (options && options.isOverview) {\n\t\t\t\tthis._isOverview = true;\n\t\t\t}\n\t\t},\n\n\t\t_renderRow: function() {\n\t\t\t// HACK: needed to call the overridden _renderRow\n\t\t\t// this is because at the time this class is created\n\t\t\t// the overriding hasn't been done yet...\n\t\t\treturn OCA.Files.FileList.prototype._renderRow.apply(this, arguments);\n\t\t},\n\n\t\t_createRow: function(fileData) {\n\t\t\t// TODO: hook earlier and render the whole row here\n\t\t\tvar $tr = OCA.Files.FileList.prototype._createRow.apply(this, arguments);\n\t\t\t$tr.find('.filesize').remove();\n\t\t\t$tr.find('td.date').before($tr.children('td:first'));\n\t\t\t$tr.find('td.filename input:checkbox').remove();\n\t\t\t$tr.attr('data-share-id', _.pluck(fileData.shares, 'id').join(','));\n\t\t\tif (this._sharedWithUser) {\n\t\t\t\t$tr.attr('data-share-owner', fileData.shareOwner);\n\t\t\t\t$tr.attr('data-mounttype', 'shared-root');\n\t\t\t\tvar permission = parseInt($tr.attr('data-permissions')) | OC.PERMISSION_DELETE;\n\t\t\t\t$tr.attr('data-permissions', permission);\n\t\t\t}\n\t\t\tif (this._showDeleted) {\n\t\t\t\tvar permission = fileData.permissions;\n\t\t\t\t$tr.attr('data-share-permissions', permission);\n\t\t\t}\n\n\t\t\t// add row with expiration date for link only shares - influenced by _createRow of filelist\n\t\t\tif (this._linksOnly) {\n\t\t\t\tvar expirationTimestamp = 0;\n\t\t\t\tif(fileData.shares && fileData.shares[0].expiration !== null) {\n\t\t\t\t\texpirationTimestamp = moment(fileData.shares[0].expiration).valueOf();\n\t\t\t\t}\n\t\t\t\t$tr.attr('data-expiration', expirationTimestamp);\n\n\t\t\t\t// date column (1000 milliseconds to seconds, 60 seconds, 60 minutes, 24 hours)\n\t\t\t\t// difference in days multiplied by 5 - brightest shade for expiry dates in more than 32 days (160/5)\n\t\t\t\tvar modifiedColor = Math.round((expirationTimestamp - (new Date()).getTime()) / 1000 / 60 / 60 / 24 * 5);\n\t\t\t\t// ensure that the brightest color is still readable\n\t\t\t\tif (modifiedColor >= 160) {\n\t\t\t\t\tmodifiedColor = 160;\n\t\t\t\t}\n\n\t\t\t\tvar formatted;\n\t\t\t\tvar text;\n\t\t\t\tif (expirationTimestamp > 0) {\n\t\t\t\t\tformatted = OC.Util.formatDate(expirationTimestamp);\n\t\t\t\t\ttext = OC.Util.relativeModifiedDate(expirationTimestamp);\n\t\t\t\t} else {\n\t\t\t\t\tformatted = t('files_sharing', 'No expiration date set');\n\t\t\t\t\ttext = '';\n\t\t\t\t\tmodifiedColor = 160;\n\t\t\t\t}\n\t\t\t\ttd = $('').attr({\"class\": \"date\"});\n\t\t\t\ttd.append($('').attr({\n\t\t\t\t\t\t\"class\": \"modified\",\n\t\t\t\t\t\t\"title\": formatted,\n\t\t\t\t\t\t\"style\": 'color:rgb(' + modifiedColor + ',' + modifiedColor + ',' + modifiedColor + ')'\n\t\t\t\t\t}).text(text)\n\t\t\t\t\t\t.tooltip({placement: 'top'})\n\t\t\t\t);\n\n\t\t\t\t$tr.append(td);\n\t\t\t}\n\t\t\treturn $tr;\n\t\t},\n\n\t\t/**\n\t\t * Set whether the list should contain outgoing shares\n\t\t * or incoming shares.\n\t\t *\n\t\t * @param state true for incoming shares, false otherwise\n\t\t */\n\t\tsetSharedWithUser: function(state) {\n\t\t\tthis._sharedWithUser = !!state;\n\t\t},\n\n\t\tupdateEmptyContent: function() {\n\t\t\tvar dir = this.getCurrentDirectory();\n\t\t\tif (dir === '/') {\n\t\t\t\t// root has special permissions\n\t\t\t\tthis.$el.find('#emptycontent').toggleClass('hidden', !this.isEmpty);\n\t\t\t\tthis.$el.find('#filestable thead th').toggleClass('hidden', this.isEmpty);\n\n\t\t\t\t// hide expiration date header for non link only shares\n\t\t\t\tif (!this._linksOnly) {\n\t\t\t\t\tthis.$el.find('th.column-expiration').addClass('hidden');\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tOCA.Files.FileList.prototype.updateEmptyContent.apply(this, arguments);\n\t\t\t}\n\t\t},\n\n\t\tgetDirectoryPermissions: function() {\n\t\t\treturn OC.PERMISSION_READ | OC.PERMISSION_DELETE;\n\t\t},\n\n\t\tupdateStorageStatistics: function() {\n\t\t\t// no op because it doesn't have\n\t\t\t// storage info like free space / used space\n\t\t},\n\n\t\tupdateRow: function($tr, fileInfo, options) {\n\t\t\t// no-op, suppress re-rendering\n\t\t\treturn $tr;\n\t\t},\n\n\t\treload: function() {\n\t\t\tthis.showMask();\n\t\t\tif (this._reloadCall) {\n\t\t\t\tthis._reloadCall.abort();\n\t\t\t}\n\n\t\t\t// there is only root\n\t\t\tthis._setCurrentDir('/', false);\n\n\t\t\tvar promises = [];\n\n\t\t\tvar deletedShares = {\n\t\t\t\turl: OC.linkToOCS('apps/files_sharing/api/v1', 2) + 'deletedshares',\n\t\t\t\t/* jshint camelcase: false */\n\t\t\t\tdata: {\n\t\t\t\t\tformat: 'json',\n\t\t\t\t\tinclude_tags: true\n\t\t\t\t},\n\t\t\t\ttype: 'GET',\n\t\t\t\tbeforeSend: function (xhr) {\n\t\t\t\t\txhr.setRequestHeader('OCS-APIREQUEST', 'true');\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tvar shares = {\n\t\t\t\turl: OC.linkToOCS('apps/files_sharing/api/v1') + 'shares',\n\t\t\t\t/* jshint camelcase: false */\n\t\t\t\tdata: {\n\t\t\t\t\tformat: 'json',\n\t\t\t\t\tshared_with_me: this._sharedWithUser !== false,\n\t\t\t\t\tinclude_tags: true\n\t\t\t\t},\n\t\t\t\ttype: 'GET',\n\t\t\t\tbeforeSend: function (xhr) {\n\t\t\t\t\txhr.setRequestHeader('OCS-APIREQUEST', 'true');\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tvar remoteShares = {\n\t\t\t\turl: OC.linkToOCS('apps/files_sharing/api/v1') + 'remote_shares',\n\t\t\t\t/* jshint camelcase: false */\n\t\t\t\tdata: {\n\t\t\t\t\tformat: 'json',\n\t\t\t\t\tinclude_tags: true\n\t\t\t\t},\n\t\t\t\ttype: 'GET',\n\t\t\t\tbeforeSend: function (xhr) {\n\t\t\t\t\txhr.setRequestHeader('OCS-APIREQUEST', 'true');\n\t\t\t\t},\n\t\t\t};\n\n\t\t\t// Add the proper ajax requests to the list and run them\n\t\t\t// and make sure we have 2 promises\n\t\t\tif (this._showDeleted) {\n\t\t\t\tpromises.push($.ajax(deletedShares));\n\t\t\t} else {\n\t\t\t\tpromises.push($.ajax(shares));\n\n\t\t\t\tif (this._sharedWithUser !== false || this._isOverview) {\n\t\t\t\t\tpromises.push($.ajax(remoteShares));\n\t\t\t\t}\n\t\t\t\tif (this._isOverview) {\n\t\t\t\t\tshares.data.shared_with_me = !shares.data.shared_with_me;\n\t\t\t\t\tpromises.push($.ajax(shares));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._reloadCall = $.when.apply($, promises);\n\t\t\tvar callBack = this.reloadCallback.bind(this);\n\t\t\treturn this._reloadCall.then(callBack, callBack);\n\t\t},\n\n\t\treloadCallback: function(shares, remoteShares, additionalShares) {\n\t\t\tdelete this._reloadCall;\n\t\t\tthis.hideMask();\n\n\t\t\tthis.$el.find('#headerSharedWith').text(\n\t\t\t\tt('files_sharing', this._sharedWithUser ? 'Shared by' : 'Shared with')\n\t\t\t);\n\n\t\t\tvar files = [];\n\n\t\t\t// make sure to use the same format\n\t\t\tif (shares[0] && shares[0].ocs) {\n\t\t\t\tshares = shares[0];\n\t\t\t}\n\t\t\tif (remoteShares && remoteShares[0] && remoteShares[0].ocs) {\n\t\t\t\tremoteShares = remoteShares[0];\n\t\t\t}\n\t\t\tif (additionalShares && additionalShares[0] && additionalShares[0].ocs) {\n\t\t\t\tadditionalShares = additionalShares[0];\n\t\t\t}\n\n\t\t\tif (shares.ocs && shares.ocs.data) {\n\t\t\t\tfiles = files.concat(this._makeFilesFromShares(shares.ocs.data, this._sharedWithUser));\n\t\t\t}\n\n\t\t\tif (remoteShares && remoteShares.ocs && remoteShares.ocs.data) {\n\t\t\t\tfiles = files.concat(this._makeFilesFromRemoteShares(remoteShares.ocs.data));\n\t\t\t}\n\n\t\t\tif (additionalShares && additionalShares.ocs && additionalShares.ocs.data) {\n\t\t\t\tfiles = files.concat(this._makeFilesFromShares(additionalShares.ocs.data, !this._sharedWithUser));\n\t\t\t}\n\n\n\t\t\tthis.setFiles(files);\n\t\t\treturn true;\n\t\t},\n\n\t\t_makeFilesFromRemoteShares: function(data) {\n\t\t\tvar files = data;\n\n\t\t\tfiles = _.chain(files)\n\t\t\t\t// convert share data to file data\n\t\t\t\t.map(function(share) {\n\t\t\t\t\tvar file = {\n\t\t\t\t\t\tshareOwner: share.owner + '@' + share.remote.replace(/.*?:\\/\\//g, \"\"),\n\t\t\t\t\t\tname: OC.basename(share.mountpoint),\n\t\t\t\t\t\tmtime: share.mtime * 1000,\n\t\t\t\t\t\tmimetype: share.mimetype,\n\t\t\t\t\t\ttype: share.type,\n\t\t\t\t\t\tid: share.file_id,\n\t\t\t\t\t\tpath: OC.dirname(share.mountpoint),\n\t\t\t\t\t\tpermissions: share.permissions,\n\t\t\t\t\t\ttags: share.tags || []\n\t\t\t\t\t};\n\n\t\t\t\t\tfile.shares = [{\n\t\t\t\t\t\tid: share.id,\n\t\t\t\t\t\ttype: OC.Share.SHARE_TYPE_REMOTE\n\t\t\t\t\t}];\n\t\t\t\t\treturn file;\n\t\t\t\t})\n\t\t\t\t.value();\n\t\t\treturn files;\n\t\t},\n\n\t\t/**\n\t\t * Converts the OCS API share response data to a file info\n\t\t * list\n\t\t * @param {Array} data OCS API share array\n\t\t * @param {bool} sharedWithUser\n\t\t * @return {Array.} array of shared file info\n\t\t */\n\t\t_makeFilesFromShares: function(data, sharedWithUser) {\n\t\t\t/* jshint camelcase: false */\n\t\t\tvar files = data;\n\n\t\t\tif (this._linksOnly) {\n\t\t\t\tfiles = _.filter(data, function(share) {\n\t\t\t\t\treturn share.share_type === OC.Share.SHARE_TYPE_LINK;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// OCS API uses non-camelcased names\n\t\t\tfiles = _.chain(files)\n\t\t\t\t// convert share data to file data\n\t\t\t\t.map(function(share) {\n\t\t\t\t\t// TODO: use OC.Files.FileInfo\n\t\t\t\t\tvar file = {\n\t\t\t\t\t\tid: share.file_source,\n\t\t\t\t\t\ticon: OC.MimeType.getIconUrl(share.mimetype),\n\t\t\t\t\t\tmimetype: share.mimetype,\n\t\t\t\t\t\ttags: share.tags || []\n\t\t\t\t\t};\n\t\t\t\t\tif (share.item_type === 'folder') {\n\t\t\t\t\t\tfile.type = 'dir';\n\t\t\t\t\t\tfile.mimetype = 'httpd/unix-directory';\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tfile.type = 'file';\n\t\t\t\t\t}\n\t\t\t\t\tfile.share = {\n\t\t\t\t\t\tid: share.id,\n\t\t\t\t\t\ttype: share.share_type,\n\t\t\t\t\t\ttarget: share.share_with,\n\t\t\t\t\t\tstime: share.stime * 1000,\n\t\t\t\t\t\texpiration: share.expiration,\n\t\t\t\t\t};\n\t\t\t\t\tif (sharedWithUser) {\n\t\t\t\t\t\tfile.shareOwner = share.displayname_owner;\n\t\t\t\t\t\tfile.shareOwnerId = share.uid_owner;\n\t\t\t\t\t\tfile.name = OC.basename(share.file_target);\n\t\t\t\t\t\tfile.path = OC.dirname(share.file_target);\n\t\t\t\t\t\tfile.permissions = share.permissions;\n\t\t\t\t\t\tif (file.path) {\n\t\t\t\t\t\t\tfile.extraData = share.file_target;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (share.share_type !== OC.Share.SHARE_TYPE_LINK) {\n\t\t\t\t\t\t\tfile.share.targetDisplayName = share.share_with_displayname;\n\t\t\t\t\t\t\tfile.share.targetShareWithId = share.share_with;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfile.name = OC.basename(share.path);\n\t\t\t\t\t\tfile.path = OC.dirname(share.path);\n\t\t\t\t\t\tfile.permissions = OC.PERMISSION_ALL;\n\t\t\t\t\t\tif (file.path) {\n\t\t\t\t\t\t\tfile.extraData = share.path;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn file;\n\t\t\t\t})\n\t\t\t\t// Group all files and have a \"shares\" array with\n\t\t\t\t// the share info for each file.\n\t\t\t\t//\n\t\t\t\t// This uses a hash memo to cumulate share information\n\t\t\t\t// inside the same file object (by file id).\n\t\t\t\t.reduce(function(memo, file) {\n\t\t\t\t\tvar data = memo[file.id];\n\t\t\t\t\tvar recipient = file.share.targetDisplayName;\n\t\t\t\t\tvar recipientId = file.share.targetShareWithId;\n\t\t\t\t\tif (!data) {\n\t\t\t\t\t\tdata = memo[file.id] = file;\n\t\t\t\t\t\tdata.shares = [file.share];\n\t\t\t\t\t\t// using a hash to make them unique,\n\t\t\t\t\t\t// this is only a list to be displayed\n\t\t\t\t\t\tdata.recipients = {};\n\t\t\t\t\t\tdata.recipientData = {};\n\t\t\t\t\t\t// share types\n\t\t\t\t\t\tdata.shareTypes = {};\n\t\t\t\t\t\t// counter is cheaper than calling _.keys().length\n\t\t\t\t\t\tdata.recipientsCount = 0;\n\t\t\t\t\t\tdata.mtime = file.share.stime;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// always take the most recent stime\n\t\t\t\t\t\tif (file.share.stime > data.mtime) {\n\t\t\t\t\t\t\tdata.mtime = file.share.stime;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdata.shares.push(file.share);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (recipient) {\n\t\t\t\t\t\t// limit counterparts for output\n\t\t\t\t\t\tif (data.recipientsCount < 4) {\n\t\t\t\t\t\t\t// only store the first ones, they will be the only ones\n\t\t\t\t\t\t\t// displayed\n\t\t\t\t\t\t\tdata.recipients[recipient] = true;\n\t\t\t\t\t\t\tdata.recipientData[data.recipientsCount] = {\n\t\t\t\t\t\t\t\t'shareWith': recipientId,\n\t\t\t\t\t\t\t\t'shareWithDisplayName': recipient\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdata.recipientsCount++;\n\t\t\t\t\t}\n\n\t\t\t\t\tdata.shareTypes[file.share.type] = true;\n\n\t\t\t\t\tdelete file.share;\n\t\t\t\t\treturn memo;\n\t\t\t\t}, {})\n\t\t\t\t// Retrieve only the values of the returned hash\n\t\t\t\t.values()\n\t\t\t\t// Clean up\n\t\t\t\t.each(function(data) {\n\t\t\t\t\t// convert the recipients map to a flat\n\t\t\t\t\t// array of sorted names\n\t\t\t\t\tdata.mountType = 'shared';\n\t\t\t\t\tdelete data.recipientsCount;\n\t\t\t\t\tif (sharedWithUser) {\n\t\t\t\t\t\t// only for outgoing shares\n\t\t\t\t\t\tdelete data.shareTypes;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdata.shareTypes = _.keys(data.shareTypes);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t// Finish the chain by getting the result\n\t\t\t\t.value();\n\n\t\t\t// Sort by expected sort comparator\n\t\t\treturn files.sort(this._sortComparator);\n\t\t},\n\t});\n\n\t/**\n\t * Share info attributes.\n\t *\n\t * @typedef {Object} OCA.Sharing.ShareInfo\n\t *\n\t * @property {int} id share ID\n\t * @property {int} type share type\n\t * @property {String} target share target, either user name or group name\n\t * @property {int} stime share timestamp in milliseconds\n\t * @property {String} [targetDisplayName] display name of the recipient\n\t * (only when shared with others)\n\t * @property {String} [targetShareWithId] id of the recipient\n\t *\n\t */\n\n\t/**\n\t * Recipient attributes\n\t *\n\t * @typedef {Object} OCA.Sharing.RecipientInfo\n\t * @property {String} shareWith the id of the recipient\n\t * @property {String} shareWithDisplayName the display name of the recipient\n\t */\n\n\t/**\n\t * Shared file info attributes.\n\t *\n\t * @typedef {OCA.Files.FileInfo} OCA.Sharing.SharedFileInfo\n\t *\n\t * @property {Array.} shares array of shares for\n\t * this file\n\t * @property {int} mtime most recent share time (if multiple shares)\n\t * @property {String} shareOwner name of the share owner\n\t * @property {Array.} recipients name of the first 4 recipients\n\t * (this is mostly for display purposes)\n\t * @property {Object.} recipientData (as object for easier\n\t * passing to HTML data attributes with jQuery)\n\t */\n\n\tOCA.Sharing.FileList = FileList;\n})();\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./apps/files_sharing/src/files_sharing.js","webpack:///./apps/files_sharing/js/app.js","webpack:///./apps/files_sharing/js/sharedfilelist.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","__webpack_nonce__","btoa","OC","requestToken","__webpack_public_path__","linkTo","OCA","Sharing","App","_inFileList","_outFileList","_overviewFileList","initSharingIn","$el","this","FileList","id","sharedWithUser","fileActions","_createFileActions","config","Files","getFilesConfig","shown","_extendFileList","appName","find","html","initSharingOut","initSharingLinks","_linkFileList","linksOnly","initSharingDeleted","_deletedFileList","defaultFileActionsDisabled","showDeleted","_restoreShareAction","initShareingOverview","isOverview","removeSharingIn","$fileList","empty","removeSharingOut","removeSharingLinks","removeSharingDeleted","removeSharingOverview","destroy","off","_onActionsUpdated","_globalActionsInitialized","FileActions","registerDefaultActions","merge","_","on","register","PERMISSION_READ","filename","context","setActiveView","silent","fileList","changeDirectory","joinPaths","$file","attr","setDefault","registerAction","displayName","altText","mime","permissions","PERMISSION_ALL","iconClass","type","TYPE_INLINE","actionHandler","fileName","shareId","data","$","post","linkToOCS","success","result","remove","fileInfoModel","attributes","fail","Notification","showTemporary","ev","each","list","action","defaultAction","fileSummary","document","ready","e","target","options","initialize","extend","_sharedWithUser","_linksOnly","_showDeleted","_clientSideSort","_allowSelection","_isOverview","apply","arguments","initialized","_renderRow","_createRow","fileData","$tr","before","children","pluck","shares","join","shareOwner","permission","parseInt","PERMISSION_DELETE","expirationTimestamp","expiration","moment","valueOf","formatted","text","modifiedColor","Math","round","Date","getTime","Util","formatDate","relativeModifiedDate","td","class","append","title","style","tooltip","placement","setSharedWithUser","state","updateEmptyContent","getCurrentDirectory","toggleClass","isEmpty","addClass","getDirectoryPermissions","updateStorageStatistics","updateRow","fileInfo","reload","showMask","_reloadCall","abort","_setCurrentDir","promises","deletedShares","url","format","include_tags","beforeSend","xhr","setRequestHeader","shared_with_me","remoteShares","push","ajax","when","callBack","reloadCallback","then","additionalShares","hideMask","files","ocs","concat","_makeFilesFromShares","_makeFilesFromRemoteShares","setFiles","chain","map","share","file","owner","remote","replace","basename","mountpoint","mtime","mimetype","file_id","path","dirname","tags","Share","SHARE_TYPE_REMOTE","filter","share_type","SHARE_TYPE_LINK","file_source","icon","MimeType","getIconUrl","item_type","share_with","stime","displayname_owner","shareOwnerId","uid_owner","file_target","extraData","targetDisplayName","share_with_displayname","targetShareWithId","reduce","memo","recipient","recipientId","recipients","recipientData","shareTypes","recipientsCount","shareWith","shareWithDisplayName","values","mountType","keys","sort","_sortComparator"],"mappings":"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","file":"files_sharing.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/js/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 11);\n","__webpack_nonce__ = btoa(OC.requestToken);\n__webpack_public_path__ = OC.linkTo('files_sharing', 'js/dist/');\n\nimport '../js/app';\nimport '../js/sharedfilelist';\n","/*\n * Copyright (c) 2014 Vincent Petry \n *\n * This file is licensed under the Affero General Public License version 3\n * or later.\n *\n * See the COPYING-README file.\n *\n */\n\nif (!OCA.Sharing) {\n\t/**\n\t * @namespace OCA.Sharing\n\t */\n\tOCA.Sharing = {};\n}\n/**\n * @namespace\n */\nOCA.Sharing.App = {\n\n\t_inFileList: null,\n\t_outFileList: null,\n\t_overviewFileList: null,\n\n\tinitSharingIn: function($el) {\n\t\tif (this._inFileList) {\n\t\t\treturn this._inFileList;\n\t\t}\n\n\t\tthis._inFileList = new OCA.Sharing.FileList(\n\t\t\t$el,\n\t\t\t{\n\t\t\t\tid: 'shares.self',\n\t\t\t\tsharedWithUser: true,\n\t\t\t\tfileActions: this._createFileActions(),\n\t\t\t\tconfig: OCA.Files.App.getFilesConfig(),\n\t\t\t\t// The file list is created when a \"show\" event is handled, so\n\t\t\t\t// it should be marked as \"shown\" like it would have been done\n\t\t\t\t// if handling the event with the file list already created.\n\t\t\t\tshown: true\n\t\t\t}\n\t\t);\n\n\t\tthis._extendFileList(this._inFileList);\n\t\tthis._inFileList.appName = t('files_sharing', 'Shared with you');\n\t\tthis._inFileList.$el.find('#emptycontent').html('
' +\n\t\t\t'

' + t('files_sharing', 'Nothing shared with you yet') + '

' +\n\t\t\t'

' + t('files_sharing', 'Files and folders others share with you will show up here') + '

');\n\t\treturn this._inFileList;\n\t},\n\n\tinitSharingOut: function($el) {\n\t\tif (this._outFileList) {\n\t\t\treturn this._outFileList;\n\t\t}\n\t\tthis._outFileList = new OCA.Sharing.FileList(\n\t\t\t$el,\n\t\t\t{\n\t\t\t\tid: 'shares.others',\n\t\t\t\tsharedWithUser: false,\n\t\t\t\tfileActions: this._createFileActions(),\n\t\t\t\tconfig: OCA.Files.App.getFilesConfig(),\n\t\t\t\t// The file list is created when a \"show\" event is handled, so\n\t\t\t\t// it should be marked as \"shown\" like it would have been done\n\t\t\t\t// if handling the event with the file list already created.\n\t\t\t\tshown: true\n\t\t\t}\n\t\t);\n\n\t\tthis._extendFileList(this._outFileList);\n\t\tthis._outFileList.appName = t('files_sharing', 'Shared with others');\n\t\tthis._outFileList.$el.find('#emptycontent').html('
' +\n\t\t\t'

' + t('files_sharing', 'Nothing shared yet') + '

' +\n\t\t\t'

' + t('files_sharing', 'Files and folders you share will show up here') + '

');\n\t\treturn this._outFileList;\n\t},\n\n\tinitSharingLinks: function($el) {\n\t\tif (this._linkFileList) {\n\t\t\treturn this._linkFileList;\n\t\t}\n\t\tthis._linkFileList = new OCA.Sharing.FileList(\n\t\t\t$el,\n\t\t\t{\n\t\t\t\tid: 'shares.link',\n\t\t\t\tlinksOnly: true,\n\t\t\t\tfileActions: this._createFileActions(),\n\t\t\t\tconfig: OCA.Files.App.getFilesConfig(),\n\t\t\t\t// The file list is created when a \"show\" event is handled, so\n\t\t\t\t// it should be marked as \"shown\" like it would have been done\n\t\t\t\t// if handling the event with the file list already created.\n\t\t\t\tshown: true\n\t\t\t}\n\t\t);\n\n\t\tthis._extendFileList(this._linkFileList);\n\t\tthis._linkFileList.appName = t('files_sharing', 'Shared by link');\n\t\tthis._linkFileList.$el.find('#emptycontent').html('
' +\n\t\t\t'

' + t('files_sharing', 'No shared links') + '

' +\n\t\t\t'

' + t('files_sharing', 'Files and folders you share by link will show up here') + '

');\n\t\treturn this._linkFileList;\n\t},\n\n\tinitSharingDeleted: function($el) {\n\t\tif (this._deletedFileList) {\n\t\t\treturn this._deletedFileList;\n\t\t}\n\t\tthis._deletedFileList = new OCA.Sharing.FileList(\n\t\t\t$el,\n\t\t\t{\n\t\t\t\tid: 'shares.deleted',\n\t\t\t\tdefaultFileActionsDisabled: true,\n\t\t\t\tshowDeleted: true,\n\t\t\t\tsharedWithUser: true,\n\t\t\t\tfileActions: this._restoreShareAction(),\n\t\t\t\tconfig: OCA.Files.App.getFilesConfig(),\n\t\t\t\t// The file list is created when a \"show\" event is handled, so\n\t\t\t\t// it should be marked as \"shown\" like it would have been done\n\t\t\t\t// if handling the event with the file list already created.\n\t\t\t\tshown: true\n\t\t\t}\n\t\t);\n\n\t\tthis._extendFileList(this._deletedFileList);\n\t\tthis._deletedFileList.appName = t('files_sharing', 'Deleted shares');\n\t\tthis._deletedFileList.$el.find('#emptycontent').html('
' +\n\t\t\t'

' + t('files_sharing', 'No deleted shares') + '

' +\n\t\t\t'

' + t('files_sharing', 'Shares you deleted will show up here') + '

');\n\t\treturn this._deletedFileList;\n\t},\n\n\tinitShareingOverview: function($el) {\n\t\tif (this._overviewFileList) {\n\t\t\treturn this._overviewFileList;\n\t\t}\n\t\tthis._overviewFileList = new OCA.Sharing.FileList(\n\t\t\t$el,\n\t\t\t{\n\t\t\t\tid: 'shares.overview',\n\t\t\t\tconfig: OCA.Files.App.getFilesConfig(),\n\t\t\t\tisOverview: true,\n\t\t\t\t// The file list is created when a \"show\" event is handled, so\n\t\t\t\t// it should be marked as \"shown\" like it would have been done\n\t\t\t\t// if handling the event with the file list already created.\n\t\t\t\tshown: true\n\t\t\t}\n\t\t);\n\n\t\tthis._extendFileList(this._overviewFileList);\n\t\tthis._overviewFileList.appName = t('files_sharing', 'Shares');\n\t\tthis._overviewFileList.$el.find('#emptycontent').html('
' +\n\t\t\t'

' + t('files_sharing', 'No shares') + '

' +\n\t\t\t'

' + t('files_sharing', 'Shares will show up here') + '

');\n\t\treturn this._overviewFileList;\n\t},\n\n\tremoveSharingIn: function() {\n\t\tif (this._inFileList) {\n\t\t\tthis._inFileList.$fileList.empty();\n\t\t}\n\t},\n\n\tremoveSharingOut: function() {\n\t\tif (this._outFileList) {\n\t\t\tthis._outFileList.$fileList.empty();\n\t\t}\n\t},\n\n\tremoveSharingLinks: function() {\n\t\tif (this._linkFileList) {\n\t\t\tthis._linkFileList.$fileList.empty();\n\t\t}\n\t},\n\n\tremoveSharingDeleted: function() {\n\t\tif (this._deletedFileList) {\n\t\t\tthis._deletedFileList.$fileList.empty();\n\t\t}\n\t},\n\n\tremoveSharingOverview: function() {\n\t\tif (this._overviewFileList) {\n\t\t\tthis._overviewFileList.$fileList.empty();\n\t\t}\n\t},\n\n\t/**\n\t * Destroy the app\n\t */\n\tdestroy: function() {\n\t\tOCA.Files.fileActions.off('setDefault.app-sharing', this._onActionsUpdated);\n\t\tOCA.Files.fileActions.off('registerAction.app-sharing', this._onActionsUpdated);\n\t\tthis.removeSharingIn();\n\t\tthis.removeSharingOut();\n\t\tthis.removeSharingLinks();\n\t\tthis._inFileList = null;\n\t\tthis._outFileList = null;\n\t\tthis._linkFileList = null;\n\t\tthis._overviewFileList = null;\n\t\tdelete this._globalActionsInitialized;\n\t},\n\n\t_createFileActions: function() {\n\t\t// inherit file actions from the files app\n\t\tvar fileActions = new OCA.Files.FileActions();\n\t\t// note: not merging the legacy actions because legacy apps are not\n\t\t// compatible with the sharing overview and need to be adapted first\n\t\tfileActions.registerDefaultActions();\n\t\tfileActions.merge(OCA.Files.fileActions);\n\n\t\tif (!this._globalActionsInitialized) {\n\t\t\t// in case actions are registered later\n\t\t\tthis._onActionsUpdated = _.bind(this._onActionsUpdated, this);\n\t\t\tOCA.Files.fileActions.on('setDefault.app-sharing', this._onActionsUpdated);\n\t\t\tOCA.Files.fileActions.on('registerAction.app-sharing', this._onActionsUpdated);\n\t\t\tthis._globalActionsInitialized = true;\n\t\t}\n\n\t\t// when the user clicks on a folder, redirect to the corresponding\n\t\t// folder in the files app instead of opening it directly\n\t\tfileActions.register('dir', 'Open', OC.PERMISSION_READ, '', function (filename, context) {\n\t\t\tOCA.Files.App.setActiveView('files', {silent: true});\n\t\t\tOCA.Files.App.fileList.changeDirectory(OC.joinPaths(context.$file.attr('data-path'), filename), true, true);\n\t\t});\n\t\tfileActions.setDefault('dir', 'Open');\n\t\treturn fileActions;\n\t},\n\n\t_restoreShareAction: function() {\n\t\tvar fileActions = new OCA.Files.FileActions();\n\t\tfileActions.registerAction({\n\t\t\tname: 'Restore',\n\t\t\tdisplayName: '',\n\t\t\taltText: t('files_sharing', 'Restore share'),\n\t\t\tmime: 'all',\n\t\t\tpermissions: OC.PERMISSION_ALL,\n\t\t\ticonClass: 'icon-history',\n\t\t\ttype: OCA.Files.FileActions.TYPE_INLINE,\n\t\t\tactionHandler: function(fileName, context) {\n\t\t\t\tvar shareId = context.$file.data('shareId');\n\t\t\t\t$.post(OC.linkToOCS('apps/files_sharing/api/v1/deletedshares', 2) + shareId)\n\t\t\t\t.success(function(result) {\n\t\t\t\t\tcontext.fileList.remove(context.fileInfoModel.attributes.name);\n\t\t\t\t}).fail(function() {\n\t\t\t\t\tOC.Notification.showTemporary(t('files_sharing', 'Something happened. Unable to restore the share.'));\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\treturn fileActions;\n\t},\n\n\t_onActionsUpdated: function(ev) {\n\t\t_.each([this._inFileList, this._outFileList, this._linkFileList], function(list) {\n\t\t\tif (!list) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (ev.action) {\n\t\t\t\tlist.fileActions.registerAction(ev.action);\n\t\t\t} else if (ev.defaultAction) {\n\t\t\t\tlist.fileActions.setDefault(\n\t\t\t\t\tev.defaultAction.mime,\n\t\t\t\t\tev.defaultAction.name\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t},\n\n\t_extendFileList: function(fileList) {\n\t\t// remove size column from summary\n\t\tfileList.fileSummary.$el.find('.filesize').remove();\n\t}\n};\n\n$(document).ready(function() {\n\t$('#app-content-sharingin').on('show', function(e) {\n\t\tOCA.Sharing.App.initSharingIn($(e.target));\n\t});\n\t$('#app-content-sharingin').on('hide', function() {\n\t\tOCA.Sharing.App.removeSharingIn();\n\t});\n\t$('#app-content-sharingout').on('show', function(e) {\n\t\tOCA.Sharing.App.initSharingOut($(e.target));\n\t});\n\t$('#app-content-sharingout').on('hide', function() {\n\t\tOCA.Sharing.App.removeSharingOut();\n\t});\n\t$('#app-content-sharinglinks').on('show', function(e) {\n\t\tOCA.Sharing.App.initSharingLinks($(e.target));\n\t});\n\t$('#app-content-sharinglinks').on('hide', function() {\n\t\tOCA.Sharing.App.removeSharingLinks();\n\t});\n\t$('#app-content-deletedshares').on('show', function(e) {\n\t\tOCA.Sharing.App.initSharingDeleted($(e.target));\n\t});\n\t$('#app-content-deletedshares').on('hide', function() {\n\t\tOCA.Sharing.App.removeSharingDeleted();\n\t});\n\t$('#app-content-shareoverview').on('show', function(e) {\n\t\tOCA.Sharing.App.initShareingOverview($(e.target));\n\t});\n\t$('#app-content-shareoverview').on('hide', function() {\n\t\tOCA.Sharing.App.removeSharingOverview();\n\t});\n});\n","/*\n * Copyright (c) 2014 Vincent Petry \n *\n * This file is licensed under the Affero General Public License version 3\n * or later.\n *\n * See the COPYING-README file.\n *\n */\n(function() {\n\n\t/**\n\t * @class OCA.Sharing.FileList\n\t * @augments OCA.Files.FileList\n\t *\n\t * @classdesc Sharing file list.\n\t * Contains both \"shared with others\" and \"shared with you\" modes.\n\t *\n\t * @param $el container element with existing markup for the #controls\n\t * and a table\n\t * @param [options] map of options, see other parameters\n\t * @param {boolean} [options.sharedWithUser] true to return files shared with\n\t * the current user, false to return files that the user shared with others.\n\t * Defaults to false.\n\t * @param {boolean} [options.linksOnly] true to return only link shares\n\t */\n\tvar FileList = function($el, options) {\n\t\tthis.initialize($el, options);\n\t};\n\tFileList.prototype = _.extend({}, OCA.Files.FileList.prototype,\n\t\t/** @lends OCA.Sharing.FileList.prototype */ {\n\t\tappName: 'Shares',\n\n\t\t/**\n\t\t * Whether the list shows the files shared with the user (true) or\n\t\t * the files that the user shared with others (false).\n\t\t */\n\t\t_sharedWithUser: false,\n\t\t_linksOnly: false,\n\t\t_showDeleted: false,\n\t\t_clientSideSort: true,\n\t\t_allowSelection: false,\n\t\t_isOverview: false,\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tinitialize: function($el, options) {\n\t\t\tOCA.Files.FileList.prototype.initialize.apply(this, arguments);\n\t\t\tif (this.initialized) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// TODO: consolidate both options\n\t\t\tif (options && options.sharedWithUser) {\n\t\t\t\tthis._sharedWithUser = true;\n\t\t\t}\n\t\t\tif (options && options.linksOnly) {\n\t\t\t\tthis._linksOnly = true;\n\t\t\t}\n\t\t\tif (options && options.showDeleted) {\n\t\t\t\tthis._showDeleted = true;\n\t\t\t}\n\t\t\tif (options && options.isOverview) {\n\t\t\t\tthis._isOverview = true;\n\t\t\t}\n\t\t},\n\n\t\t_renderRow: function() {\n\t\t\t// HACK: needed to call the overridden _renderRow\n\t\t\t// this is because at the time this class is created\n\t\t\t// the overriding hasn't been done yet...\n\t\t\treturn OCA.Files.FileList.prototype._renderRow.apply(this, arguments);\n\t\t},\n\n\t\t_createRow: function(fileData) {\n\t\t\t// TODO: hook earlier and render the whole row here\n\t\t\tvar $tr = OCA.Files.FileList.prototype._createRow.apply(this, arguments);\n\t\t\t$tr.find('.filesize').remove();\n\t\t\t$tr.find('td.date').before($tr.children('td:first'));\n\t\t\t$tr.find('td.filename input:checkbox').remove();\n\t\t\t$tr.attr('data-share-id', _.pluck(fileData.shares, 'id').join(','));\n\t\t\tif (this._sharedWithUser) {\n\t\t\t\t$tr.attr('data-share-owner', fileData.shareOwner);\n\t\t\t\t$tr.attr('data-mounttype', 'shared-root');\n\t\t\t\tvar permission = parseInt($tr.attr('data-permissions')) | OC.PERMISSION_DELETE;\n\t\t\t\t$tr.attr('data-permissions', permission);\n\t\t\t}\n\t\t\tif (this._showDeleted) {\n\t\t\t\tvar permission = fileData.permissions;\n\t\t\t\t$tr.attr('data-share-permissions', permission);\n\t\t\t}\n\n\t\t\t// add row with expiration date for link only shares - influenced by _createRow of filelist\n\t\t\tif (this._linksOnly) {\n\t\t\t\tvar expirationTimestamp = 0;\n\t\t\t\tif(fileData.shares && fileData.shares[0].expiration !== null) {\n\t\t\t\t\texpirationTimestamp = moment(fileData.shares[0].expiration).valueOf();\n\t\t\t\t}\n\t\t\t\t$tr.attr('data-expiration', expirationTimestamp);\n\n\t\t\t\t// date column (1000 milliseconds to seconds, 60 seconds, 60 minutes, 24 hours)\n\t\t\t\t// difference in days multiplied by 5 - brightest shade for expiry dates in more than 32 days (160/5)\n\t\t\t\tvar modifiedColor = Math.round((expirationTimestamp - (new Date()).getTime()) / 1000 / 60 / 60 / 24 * 5);\n\t\t\t\t// ensure that the brightest color is still readable\n\t\t\t\tif (modifiedColor >= 160) {\n\t\t\t\t\tmodifiedColor = 160;\n\t\t\t\t}\n\n\t\t\t\tvar formatted;\n\t\t\t\tvar text;\n\t\t\t\tif (expirationTimestamp > 0) {\n\t\t\t\t\tformatted = OC.Util.formatDate(expirationTimestamp);\n\t\t\t\t\ttext = OC.Util.relativeModifiedDate(expirationTimestamp);\n\t\t\t\t} else {\n\t\t\t\t\tformatted = t('files_sharing', 'No expiration date set');\n\t\t\t\t\ttext = '';\n\t\t\t\t\tmodifiedColor = 160;\n\t\t\t\t}\n\t\t\t\ttd = $('').attr({\"class\": \"date\"});\n\t\t\t\ttd.append($('').attr({\n\t\t\t\t\t\t\"class\": \"modified\",\n\t\t\t\t\t\t\"title\": formatted,\n\t\t\t\t\t\t\"style\": 'color:rgb(' + modifiedColor + ',' + modifiedColor + ',' + modifiedColor + ')'\n\t\t\t\t\t}).text(text)\n\t\t\t\t\t\t.tooltip({placement: 'top'})\n\t\t\t\t);\n\n\t\t\t\t$tr.append(td);\n\t\t\t}\n\t\t\treturn $tr;\n\t\t},\n\n\t\t/**\n\t\t * Set whether the list should contain outgoing shares\n\t\t * or incoming shares.\n\t\t *\n\t\t * @param state true for incoming shares, false otherwise\n\t\t */\n\t\tsetSharedWithUser: function(state) {\n\t\t\tthis._sharedWithUser = !!state;\n\t\t},\n\n\t\tupdateEmptyContent: function() {\n\t\t\tvar dir = this.getCurrentDirectory();\n\t\t\tif (dir === '/') {\n\t\t\t\t// root has special permissions\n\t\t\t\tthis.$el.find('#emptycontent').toggleClass('hidden', !this.isEmpty);\n\t\t\t\tthis.$el.find('#filestable thead th').toggleClass('hidden', this.isEmpty);\n\n\t\t\t\t// hide expiration date header for non link only shares\n\t\t\t\tif (!this._linksOnly) {\n\t\t\t\t\tthis.$el.find('th.column-expiration').addClass('hidden');\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tOCA.Files.FileList.prototype.updateEmptyContent.apply(this, arguments);\n\t\t\t}\n\t\t},\n\n\t\tgetDirectoryPermissions: function() {\n\t\t\treturn OC.PERMISSION_READ | OC.PERMISSION_DELETE;\n\t\t},\n\n\t\tupdateStorageStatistics: function() {\n\t\t\t// no op because it doesn't have\n\t\t\t// storage info like free space / used space\n\t\t},\n\n\t\tupdateRow: function($tr, fileInfo, options) {\n\t\t\t// no-op, suppress re-rendering\n\t\t\treturn $tr;\n\t\t},\n\n\t\treload: function() {\n\t\t\tthis.showMask();\n\t\t\tif (this._reloadCall) {\n\t\t\t\tthis._reloadCall.abort();\n\t\t\t}\n\n\t\t\t// there is only root\n\t\t\tthis._setCurrentDir('/', false);\n\n\t\t\tvar promises = [];\n\n\t\t\tvar deletedShares = {\n\t\t\t\turl: OC.linkToOCS('apps/files_sharing/api/v1', 2) + 'deletedshares',\n\t\t\t\t/* jshint camelcase: false */\n\t\t\t\tdata: {\n\t\t\t\t\tformat: 'json',\n\t\t\t\t\tinclude_tags: true\n\t\t\t\t},\n\t\t\t\ttype: 'GET',\n\t\t\t\tbeforeSend: function (xhr) {\n\t\t\t\t\txhr.setRequestHeader('OCS-APIREQUEST', 'true');\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tvar shares = {\n\t\t\t\turl: OC.linkToOCS('apps/files_sharing/api/v1') + 'shares',\n\t\t\t\t/* jshint camelcase: false */\n\t\t\t\tdata: {\n\t\t\t\t\tformat: 'json',\n\t\t\t\t\tshared_with_me: this._sharedWithUser !== false,\n\t\t\t\t\tinclude_tags: true\n\t\t\t\t},\n\t\t\t\ttype: 'GET',\n\t\t\t\tbeforeSend: function (xhr) {\n\t\t\t\t\txhr.setRequestHeader('OCS-APIREQUEST', 'true');\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tvar remoteShares = {\n\t\t\t\turl: OC.linkToOCS('apps/files_sharing/api/v1') + 'remote_shares',\n\t\t\t\t/* jshint camelcase: false */\n\t\t\t\tdata: {\n\t\t\t\t\tformat: 'json',\n\t\t\t\t\tinclude_tags: true\n\t\t\t\t},\n\t\t\t\ttype: 'GET',\n\t\t\t\tbeforeSend: function (xhr) {\n\t\t\t\t\txhr.setRequestHeader('OCS-APIREQUEST', 'true');\n\t\t\t\t},\n\t\t\t};\n\n\t\t\t// Add the proper ajax requests to the list and run them\n\t\t\t// and make sure we have 2 promises\n\t\t\tif (this._showDeleted) {\n\t\t\t\tpromises.push($.ajax(deletedShares));\n\t\t\t} else {\n\t\t\t\tpromises.push($.ajax(shares));\n\n\t\t\t\tif (this._sharedWithUser !== false || this._isOverview) {\n\t\t\t\t\tpromises.push($.ajax(remoteShares));\n\t\t\t\t}\n\t\t\t\tif (this._isOverview) {\n\t\t\t\t\tshares.data.shared_with_me = !shares.data.shared_with_me;\n\t\t\t\t\tpromises.push($.ajax(shares));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._reloadCall = $.when.apply($, promises);\n\t\t\tvar callBack = this.reloadCallback.bind(this);\n\t\t\treturn this._reloadCall.then(callBack, callBack);\n\t\t},\n\n\t\treloadCallback: function(shares, remoteShares, additionalShares) {\n\t\t\tdelete this._reloadCall;\n\t\t\tthis.hideMask();\n\n\t\t\tthis.$el.find('#headerSharedWith').text(\n\t\t\t\tt('files_sharing', this._sharedWithUser ? 'Shared by' : 'Shared with')\n\t\t\t);\n\n\t\t\tvar files = [];\n\n\t\t\t// make sure to use the same format\n\t\t\tif (shares[0] && shares[0].ocs) {\n\t\t\t\tshares = shares[0];\n\t\t\t}\n\t\t\tif (remoteShares && remoteShares[0] && remoteShares[0].ocs) {\n\t\t\t\tremoteShares = remoteShares[0];\n\t\t\t}\n\t\t\tif (additionalShares && additionalShares[0] && additionalShares[0].ocs) {\n\t\t\t\tadditionalShares = additionalShares[0];\n\t\t\t}\n\n\t\t\tif (shares.ocs && shares.ocs.data) {\n\t\t\t\tfiles = files.concat(this._makeFilesFromShares(shares.ocs.data, this._sharedWithUser));\n\t\t\t}\n\n\t\t\tif (remoteShares && remoteShares.ocs && remoteShares.ocs.data) {\n\t\t\t\tfiles = files.concat(this._makeFilesFromRemoteShares(remoteShares.ocs.data));\n\t\t\t}\n\n\t\t\tif (additionalShares && additionalShares.ocs && additionalShares.ocs.data) {\n\t\t\t\tfiles = files.concat(this._makeFilesFromShares(additionalShares.ocs.data, !this._sharedWithUser));\n\t\t\t}\n\n\n\t\t\tthis.setFiles(files);\n\t\t\treturn true;\n\t\t},\n\n\t\t_makeFilesFromRemoteShares: function(data) {\n\t\t\tvar files = data;\n\n\t\t\tfiles = _.chain(files)\n\t\t\t\t// convert share data to file data\n\t\t\t\t.map(function(share) {\n\t\t\t\t\tvar file = {\n\t\t\t\t\t\tshareOwner: share.owner + '@' + share.remote.replace(/.*?:\\/\\//g, \"\"),\n\t\t\t\t\t\tname: OC.basename(share.mountpoint),\n\t\t\t\t\t\tmtime: share.mtime * 1000,\n\t\t\t\t\t\tmimetype: share.mimetype,\n\t\t\t\t\t\ttype: share.type,\n\t\t\t\t\t\tid: share.file_id,\n\t\t\t\t\t\tpath: OC.dirname(share.mountpoint),\n\t\t\t\t\t\tpermissions: share.permissions,\n\t\t\t\t\t\ttags: share.tags || []\n\t\t\t\t\t};\n\n\t\t\t\t\tfile.shares = [{\n\t\t\t\t\t\tid: share.id,\n\t\t\t\t\t\ttype: OC.Share.SHARE_TYPE_REMOTE\n\t\t\t\t\t}];\n\t\t\t\t\treturn file;\n\t\t\t\t})\n\t\t\t\t.value();\n\t\t\treturn files;\n\t\t},\n\n\t\t/**\n\t\t * Converts the OCS API share response data to a file info\n\t\t * list\n\t\t * @param {Array} data OCS API share array\n\t\t * @param {bool} sharedWithUser\n\t\t * @return {Array.} array of shared file info\n\t\t */\n\t\t_makeFilesFromShares: function(data, sharedWithUser) {\n\t\t\t/* jshint camelcase: false */\n\t\t\tvar files = data;\n\n\t\t\tif (this._linksOnly) {\n\t\t\t\tfiles = _.filter(data, function(share) {\n\t\t\t\t\treturn share.share_type === OC.Share.SHARE_TYPE_LINK;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// OCS API uses non-camelcased names\n\t\t\tfiles = _.chain(files)\n\t\t\t\t// convert share data to file data\n\t\t\t\t.map(function(share) {\n\t\t\t\t\t// TODO: use OC.Files.FileInfo\n\t\t\t\t\tvar file = {\n\t\t\t\t\t\tid: share.file_source,\n\t\t\t\t\t\ticon: OC.MimeType.getIconUrl(share.mimetype),\n\t\t\t\t\t\tmimetype: share.mimetype,\n\t\t\t\t\t\ttags: share.tags || []\n\t\t\t\t\t};\n\t\t\t\t\tif (share.item_type === 'folder') {\n\t\t\t\t\t\tfile.type = 'dir';\n\t\t\t\t\t\tfile.mimetype = 'httpd/unix-directory';\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tfile.type = 'file';\n\t\t\t\t\t}\n\t\t\t\t\tfile.share = {\n\t\t\t\t\t\tid: share.id,\n\t\t\t\t\t\ttype: share.share_type,\n\t\t\t\t\t\ttarget: share.share_with,\n\t\t\t\t\t\tstime: share.stime * 1000,\n\t\t\t\t\t\texpiration: share.expiration,\n\t\t\t\t\t};\n\t\t\t\t\tif (sharedWithUser) {\n\t\t\t\t\t\tfile.shareOwner = share.displayname_owner;\n\t\t\t\t\t\tfile.shareOwnerId = share.uid_owner;\n\t\t\t\t\t\tfile.name = OC.basename(share.file_target);\n\t\t\t\t\t\tfile.path = OC.dirname(share.file_target);\n\t\t\t\t\t\tfile.permissions = share.permissions;\n\t\t\t\t\t\tif (file.path) {\n\t\t\t\t\t\t\tfile.extraData = share.file_target;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (share.share_type !== OC.Share.SHARE_TYPE_LINK) {\n\t\t\t\t\t\t\tfile.share.targetDisplayName = share.share_with_displayname;\n\t\t\t\t\t\t\tfile.share.targetShareWithId = share.share_with;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfile.name = OC.basename(share.path);\n\t\t\t\t\t\tfile.path = OC.dirname(share.path);\n\t\t\t\t\t\tfile.permissions = OC.PERMISSION_ALL;\n\t\t\t\t\t\tif (file.path) {\n\t\t\t\t\t\t\tfile.extraData = share.path;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn file;\n\t\t\t\t})\n\t\t\t\t// Group all files and have a \"shares\" array with\n\t\t\t\t// the share info for each file.\n\t\t\t\t//\n\t\t\t\t// This uses a hash memo to cumulate share information\n\t\t\t\t// inside the same file object (by file id).\n\t\t\t\t.reduce(function(memo, file) {\n\t\t\t\t\tvar data = memo[file.id];\n\t\t\t\t\tvar recipient = file.share.targetDisplayName;\n\t\t\t\t\tvar recipientId = file.share.targetShareWithId;\n\t\t\t\t\tif (!data) {\n\t\t\t\t\t\tdata = memo[file.id] = file;\n\t\t\t\t\t\tdata.shares = [file.share];\n\t\t\t\t\t\t// using a hash to make them unique,\n\t\t\t\t\t\t// this is only a list to be displayed\n\t\t\t\t\t\tdata.recipients = {};\n\t\t\t\t\t\tdata.recipientData = {};\n\t\t\t\t\t\t// share types\n\t\t\t\t\t\tdata.shareTypes = {};\n\t\t\t\t\t\t// counter is cheaper than calling _.keys().length\n\t\t\t\t\t\tdata.recipientsCount = 0;\n\t\t\t\t\t\tdata.mtime = file.share.stime;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// always take the most recent stime\n\t\t\t\t\t\tif (file.share.stime > data.mtime) {\n\t\t\t\t\t\t\tdata.mtime = file.share.stime;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdata.shares.push(file.share);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (recipient) {\n\t\t\t\t\t\t// limit counterparts for output\n\t\t\t\t\t\tif (data.recipientsCount < 4) {\n\t\t\t\t\t\t\t// only store the first ones, they will be the only ones\n\t\t\t\t\t\t\t// displayed\n\t\t\t\t\t\t\tdata.recipients[recipient] = true;\n\t\t\t\t\t\t\tdata.recipientData[data.recipientsCount] = {\n\t\t\t\t\t\t\t\t'shareWith': recipientId,\n\t\t\t\t\t\t\t\t'shareWithDisplayName': recipient\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdata.recipientsCount++;\n\t\t\t\t\t}\n\n\t\t\t\t\tdata.shareTypes[file.share.type] = true;\n\n\t\t\t\t\tdelete file.share;\n\t\t\t\t\treturn memo;\n\t\t\t\t}, {})\n\t\t\t\t// Retrieve only the values of the returned hash\n\t\t\t\t.values()\n\t\t\t\t// Clean up\n\t\t\t\t.each(function(data) {\n\t\t\t\t\t// convert the recipients map to a flat\n\t\t\t\t\t// array of sorted names\n\t\t\t\t\tdata.mountType = 'shared';\n\t\t\t\t\tdelete data.recipientsCount;\n\t\t\t\t\tif (sharedWithUser) {\n\t\t\t\t\t\t// only for outgoing shares\n\t\t\t\t\t\tdelete data.shareTypes;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdata.shareTypes = _.keys(data.shareTypes);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t// Finish the chain by getting the result\n\t\t\t\t.value();\n\n\t\t\t// Sort by expected sort comparator\n\t\t\treturn files.sort(this._sortComparator);\n\t\t},\n\t});\n\n\t/**\n\t * Share info attributes.\n\t *\n\t * @typedef {Object} OCA.Sharing.ShareInfo\n\t *\n\t * @property {int} id share ID\n\t * @property {int} type share type\n\t * @property {String} target share target, either user name or group name\n\t * @property {int} stime share timestamp in milliseconds\n\t * @property {String} [targetDisplayName] display name of the recipient\n\t * (only when shared with others)\n\t * @property {String} [targetShareWithId] id of the recipient\n\t *\n\t */\n\n\t/**\n\t * Recipient attributes\n\t *\n\t * @typedef {Object} OCA.Sharing.RecipientInfo\n\t * @property {String} shareWith the id of the recipient\n\t * @property {String} shareWithDisplayName the display name of the recipient\n\t */\n\n\t/**\n\t * Shared file info attributes.\n\t *\n\t * @typedef {OCA.Files.FileInfo} OCA.Sharing.SharedFileInfo\n\t *\n\t * @property {Array.} shares array of shares for\n\t * this file\n\t * @property {int} mtime most recent share time (if multiple shares)\n\t * @property {String} shareOwner name of the share owner\n\t * @property {Array.} recipients name of the first 4 recipients\n\t * (this is mostly for display purposes)\n\t * @property {Object.} recipientData (as object for easier\n\t * passing to HTML data attributes with jQuery)\n\t */\n\n\tOCA.Sharing.FileList = FileList;\n})();\n"],"sourceRoot":""} \ No newline at end of file