From e930a0ccbef07f5ce9847c39584d4125aecffe38 Mon Sep 17 00:00:00 2001 From: Christoph Wurst <christoph@winzerhof-wurst.at> Date: Thu, 21 Feb 2019 21:36:14 +0100 Subject: [PATCH] Search sharees on lookup server when explicitly requested by user Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at> --- apps/files_sharing/js/additionalScripts.js | 2 +- .../files_sharing/js/additionalScripts.js.map | 2 +- .../lib/Controller/ShareesAPIController.php | 2 + .../files_sharing/src/style/sharetabview.scss | 5 + .../Controller/ShareesAPIControllerTest.php | 5 +- core/js/dist/share_backend.js | Bin 116988 -> 117318 bytes core/js/dist/share_backend.js.map | Bin 376196 -> 377548 bytes core/js/sharedialogview.js | 71 ++++++--- core/js/tests/specs/sharedialogviewSpec.js | 142 +++++++++++++----- .../Collaborators/LookupPlugin.php | 2 +- .../Collaborators/LookupPluginTest.php | 10 +- 11 files changed, 172 insertions(+), 69 deletions(-) diff --git a/apps/files_sharing/js/additionalScripts.js b/apps/files_sharing/js/additionalScripts.js index 19d1d3bd617..dfdfabc5a57 100644 --- a/apps/files_sharing/js/additionalScripts.js +++ b/apps/files_sharing/js/additionalScripts.js @@ -20,5 +20,5 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * */ -!function(){"use strict";var e=OC.Backbone.View.extend({tagName:"span",events:{click:"_onClick"},_dirInfo:void 0,_shareTab:void 0,initialize:function(e){this._shareTab=e.shareTab},render:function(e){if(this._dirInfo=e.dirInfo||null,null===this._dirInfo||"/"===this._dirInfo.path&&""===this._dirInfo.name)this.$el.removeClass("shared icon-public icon-shared"),this.$el.hide();else{var n=e.dirInfo&&e.dirInfo.shareTypes&&e.dirInfo.shareTypes.length>0;this.$el.removeClass("shared icon-public icon-shared"),n?(this.$el.addClass("shared"),-1!==e.dirInfo.shareTypes.indexOf(OC.Share.SHARE_TYPE_LINK)?this.$el.addClass("icon-public"):this.$el.addClass("icon-shared")):this.$el.addClass("icon-shared"),this.$el.show(),this.delegateEvents()}return this},_onClick:function(e){e.preventDefault();var n=new OCA.Files.FileInfoModel(this._dirInfo),t=this;n.on("change",function(){t.render({dirInfo:t._dirInfo})}),this._shareTab.on("sharesChanged",function(e){for(var n=[],i=e.getSharesWithCurrentItem(),r=0;r<i.length;r++)-1===n.indexOf(i[r].share_type)&&n.push(i[r].share_type);e.hasLinkShares()&&n.push(OC.Share.SHARE_TYPE_LINK),t._dirInfo.shareTypes=n,t.render({dirInfo:t._dirInfo})}),OCA.Files.App.fileList.showDetailsView(n,"shareTabView")}});OCA.Sharing.ShareBreadCrumbView=e}()},function(e,n,t){var i=t(7);"string"==typeof i&&(i=[[e.i,i,""]]);var r={hmr:!0,transform:void 0,insertInto:void 0};t(1)(i,r);i.locals&&(e.exports=i.locals)},function(e,n,t){(e.exports=t(0)(!1)).push([e.i,".app-files .shareTabView {\n min-height: 100px; }\n\n.share-autocomplete-item {\n display: flex; }\n .share-autocomplete-item.merged {\n margin-left: 32px; }\n .share-autocomplete-item .autocomplete-item-text {\n margin-left: 10px;\n margin-right: 10px;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n line-height: 32px;\n vertical-align: middle;\n flex-grow: 1; }\n .share-autocomplete-item .autocomplete-item-text .ui-state-highlight {\n border: none;\n margin: 0; }\n .share-autocomplete-item.with-description .autocomplete-item-text {\n line-height: 100%; }\n .share-autocomplete-item .autocomplete-item-details {\n display: block;\n line-height: 130%;\n font-size: 90%;\n opacity: 0.7; }\n .share-autocomplete-item .icon {\n opacity: .7;\n margin-right: 7px; }\n\n.shareTabView .oneline {\n white-space: nowrap;\n position: relative; }\n\n.shareTabView .shareWithLoading {\n padding-left: 10px;\n right: 35px;\n top: 3px; }\n\n.shareTabView .shareWithConfirm {\n position: absolute;\n right: 2px;\n top: 6px;\n padding: 14px;\n opacity: 0.5; }\n\n.shareTabView .shareWithField:focus ~ .shareWithConfirm {\n opacity: 1; }\n\n.shareTabView .linkMore {\n position: absolute;\n right: -7px;\n top: -4px;\n padding: 14px; }\n\n.shareTabView .popovermenu {\n /* Border above last entry '+ Add another share' to separate it from current link settings */ }\n .shareTabView .popovermenu .linkPassMenu .share-pass-submit {\n width: auto !important; }\n .shareTabView .popovermenu .linkPassMenu .icon-loading-small {\n background-color: var(--color-main-background);\n position: absolute;\n right: 8px;\n margin: 3px;\n padding: 10px;\n width: 32px;\n height: 32px;\n z-index: 10; }\n .shareTabView .popovermenu .datepicker {\n margin-left: 35px; }\n .shareTabView .popovermenu .share-add input.share-note-delete {\n border: none;\n background-color: transparent;\n width: 44px !important;\n padding: 0;\n flex: 0 0 44px;\n margin-left: auto; }\n .shareTabView .popovermenu .share-add input.share-note-delete.hidden {\n display: none; }\n .shareTabView .popovermenu .share-note-form span.icon-note {\n position: relative; }\n .shareTabView .popovermenu .share-note-form textarea.share-note {\n margin: 0;\n width: 200px;\n min-height: 70px;\n resize: none; }\n .shareTabView .popovermenu .share-note-form textarea.share-note + input.share-note-submit {\n position: absolute;\n width: 44px !important;\n height: 44px;\n bottom: 0px;\n right: 10px;\n margin: 0;\n background-color: transparent;\n border: none;\n opacity: .7; }\n .shareTabView .popovermenu .share-note-form textarea.share-note + input.share-note-submit:hover, .shareTabView .popovermenu .share-note-form textarea.share-note + input.share-note-submit:focus, .shareTabView .popovermenu .share-note-form textarea.share-note + input.share-note-submit:active {\n opacity: 1; }\n .shareTabView .popovermenu .share-note-form.share-note-link {\n margin-bottom: 10px; }\n .shareTabView .popovermenu .new-share {\n border-top: 1px solid var(--color-border); }\n\n.shareTabView .linkPass .icon-loading-small {\n margin-right: 0px; }\n\n.shareTabView .icon {\n background-size: 16px 16px; }\n\n.shareTabView .shareWithList .icon-loading-small:not(.hidden) + span,\n.shareTabView .linkShareView .icon-loading-small:not(.hidden) + input + label:before {\n /* Hide if loader is visible */\n display: none !important; }\n\n.shareTabView input[type='checkbox'] {\n margin: 0 3px 0 8px;\n vertical-align: middle; }\n\n.shareTabView input[type='text'].shareWithField, .shareTabView input[type='text'].emailField {\n width: 100%;\n box-sizing: border-box;\n padding-right: 32px;\n text-overflow: ellipsis; }\n\n.shareTabView input[type='text'].linkText .shareTabView input[type='password'].linkPassText, .shareTabView input[type='password'].passwordField {\n width: 180px !important; }\n\n.shareTabView form {\n font-size: 100%;\n margin-left: 0;\n margin-right: 0; }\n\n.shareTabView .share-note {\n border-radius: var(--border-radius);\n margin-bottom: 10px;\n margin-left: 37px; }\n\n.shareWithList {\n list-style-type: none;\n display: flex;\n flex-direction: column; }\n .shareWithList > li {\n height: 44px;\n white-space: normal;\n display: inline-flex;\n align-items: center;\n position: relative; }\n .shareWithList > li .avatar {\n width: 32px;\n height: 32px;\n background-color: var(--color-primary); }\n .shareWithList .unshare img {\n vertical-align: text-bottom;\n /* properly align icons */ }\n .shareWithList .sharingOptionsGroup {\n margin-left: auto;\n display: flex;\n align-items: center;\n white-space: nowrap; }\n .shareWithList .sharingOptionsGroup > .icon:not(.hidden),\n .shareWithList .sharingOptionsGroup .share-menu > .icon:not(.hidden) {\n padding: 14px;\n height: 44px;\n width: 44px;\n opacity: .5;\n display: block;\n cursor: pointer; }\n .shareWithList .sharingOptionsGroup > .icon:not(.hidden):hover, .shareWithList .sharingOptionsGroup > .icon:not(.hidden):focus, .shareWithList .sharingOptionsGroup > .icon:not(.hidden):active,\n .shareWithList .sharingOptionsGroup .share-menu > .icon:not(.hidden):hover,\n .shareWithList .sharingOptionsGroup .share-menu > .icon:not(.hidden):focus,\n .shareWithList .sharingOptionsGroup .share-menu > .icon:not(.hidden):active {\n opacity: .7; }\n .shareWithList .sharingOptionsGroup > .share-menu {\n position: relative;\n display: block; }\n .shareWithList .username {\n padding: 0 8px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis; }\n\n.ui-autocomplete {\n /* limit dropdown height to 6 1/2 entries */\n max-height: calc(36px * 6.5);\n overflow-y: auto;\n overflow-x: hidden;\n z-index: 1550 !important; }\n\n.notCreatable {\n padding-left: 12px;\n padding-top: 12px;\n color: var(--color-text-lighter); }\n\n.contactsmenu-popover {\n left: -6px;\n right: auto;\n padding: 3px 6px;\n top: 100%;\n margin-top: 0; }\n .contactsmenu-popover li.hidden {\n display: none !important; }\n .contactsmenu-popover:after {\n left: 8px;\n right: auto; }\n\n.reshare,\n#link label,\n#expiration label {\n display: inline-flex;\n align-items: center; }\n .reshare .avatar,\n #link label .avatar,\n #expiration label .avatar {\n margin-right: 5px; }\n\n.resharerInfoView.subView {\n position: relative; }\n",""])},function(e,n){e.exports=function(e){var n="undefined"!=typeof window&&window.location;if(!n)throw new Error("fixUrls requires window.location");if(!e||"string"!=typeof e)return e;var t=n.protocol+"//"+n.host,i=t+n.pathname.replace(/\/[^\/]*$/,"/");return e.replace(/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi,function(e,n){var r,a=n.trim().replace(/^"(.*)"$/,function(e,n){return n}).replace(/^'(.*)'$/,function(e,n){return n});return/^(#|data:|http:\/\/|https:\/\/|file:\/\/\/|\s*$)/i.test(a)?e:(r=0===a.indexOf("//")?a:0===a.indexOf("/")?t+a:i+a.replace(/^\.\//,""),"url("+JSON.stringify(r)+")")})}},function(e,n,t){var i=t(10);"string"==typeof i&&(i=[[e.i,i,""]]);var r={hmr:!0,transform:void 0,insertInto:void 0};t(1)(i,r);i.locals&&(e.exports=i.locals)},function(e,n,t){(e.exports=t(0)(!1)).push([e.i,"/**\n * @copyright 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\ndiv.crumb span.icon-shared,\ndiv.crumb span.icon-public {\n display: inline-block;\n cursor: pointer;\n opacity: 0.2;\n margin-right: 6px; }\n\ndiv.crumb span.icon-shared.shared,\ndiv.crumb span.icon-public.shared {\n opacity: 0.7; }\n",""])}]); +!function(){"use strict";var e=OC.Backbone.View.extend({tagName:"span",events:{click:"_onClick"},_dirInfo:void 0,_shareTab:void 0,initialize:function(e){this._shareTab=e.shareTab},render:function(e){if(this._dirInfo=e.dirInfo||null,null===this._dirInfo||"/"===this._dirInfo.path&&""===this._dirInfo.name)this.$el.removeClass("shared icon-public icon-shared"),this.$el.hide();else{var n=e.dirInfo&&e.dirInfo.shareTypes&&e.dirInfo.shareTypes.length>0;this.$el.removeClass("shared icon-public icon-shared"),n?(this.$el.addClass("shared"),-1!==e.dirInfo.shareTypes.indexOf(OC.Share.SHARE_TYPE_LINK)?this.$el.addClass("icon-public"):this.$el.addClass("icon-shared")):this.$el.addClass("icon-shared"),this.$el.show(),this.delegateEvents()}return this},_onClick:function(e){e.preventDefault();var n=new OCA.Files.FileInfoModel(this._dirInfo),t=this;n.on("change",function(){t.render({dirInfo:t._dirInfo})}),this._shareTab.on("sharesChanged",function(e){for(var n=[],i=e.getSharesWithCurrentItem(),r=0;r<i.length;r++)-1===n.indexOf(i[r].share_type)&&n.push(i[r].share_type);e.hasLinkShares()&&n.push(OC.Share.SHARE_TYPE_LINK),t._dirInfo.shareTypes=n,t.render({dirInfo:t._dirInfo})}),OCA.Files.App.fileList.showDetailsView(n,"shareTabView")}});OCA.Sharing.ShareBreadCrumbView=e}()},function(e,n,t){var i=t(7);"string"==typeof i&&(i=[[e.i,i,""]]);var r={hmr:!0,transform:void 0,insertInto:void 0};t(1)(i,r);i.locals&&(e.exports=i.locals)},function(e,n,t){(e.exports=t(0)(!1)).push([e.i,".app-files .shareTabView {\n min-height: 100px; }\n\n.share-autocomplete-item {\n display: flex; }\n .share-autocomplete-item.merged {\n margin-left: 32px; }\n .share-autocomplete-item .autocomplete-item-text {\n margin-left: 10px;\n margin-right: 10px;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n line-height: 32px;\n vertical-align: middle;\n flex-grow: 1; }\n .share-autocomplete-item .autocomplete-item-text .ui-state-highlight {\n border: none;\n margin: 0; }\n .share-autocomplete-item.with-description .autocomplete-item-text {\n line-height: 100%; }\n .share-autocomplete-item .autocomplete-item-details {\n display: block;\n line-height: 130%;\n font-size: 90%;\n opacity: 0.7; }\n .share-autocomplete-item .icon {\n opacity: .7;\n margin-right: 7px; }\n .share-autocomplete-item .icon.search-globally {\n width: 32px;\n height: 32px;\n margin-right: 0; }\n\n.shareTabView .oneline {\n white-space: nowrap;\n position: relative; }\n\n.shareTabView .shareWithLoading {\n padding-left: 10px;\n right: 35px;\n top: 3px; }\n\n.shareTabView .shareWithConfirm {\n position: absolute;\n right: 2px;\n top: 6px;\n padding: 14px;\n opacity: 0.5; }\n\n.shareTabView .shareWithField:focus ~ .shareWithConfirm {\n opacity: 1; }\n\n.shareTabView .linkMore {\n position: absolute;\n right: -7px;\n top: -4px;\n padding: 14px; }\n\n.shareTabView .popovermenu {\n /* Border above last entry '+ Add another share' to separate it from current link settings */ }\n .shareTabView .popovermenu .linkPassMenu .share-pass-submit {\n width: auto !important; }\n .shareTabView .popovermenu .linkPassMenu .icon-loading-small {\n background-color: var(--color-main-background);\n position: absolute;\n right: 8px;\n margin: 3px;\n padding: 10px;\n width: 32px;\n height: 32px;\n z-index: 10; }\n .shareTabView .popovermenu .datepicker {\n margin-left: 35px; }\n .shareTabView .popovermenu .share-add input.share-note-delete {\n border: none;\n background-color: transparent;\n width: 44px !important;\n padding: 0;\n flex: 0 0 44px;\n margin-left: auto; }\n .shareTabView .popovermenu .share-add input.share-note-delete.hidden {\n display: none; }\n .shareTabView .popovermenu .share-note-form span.icon-note {\n position: relative; }\n .shareTabView .popovermenu .share-note-form textarea.share-note {\n margin: 0;\n width: 200px;\n min-height: 70px;\n resize: none; }\n .shareTabView .popovermenu .share-note-form textarea.share-note + input.share-note-submit {\n position: absolute;\n width: 44px !important;\n height: 44px;\n bottom: 0px;\n right: 10px;\n margin: 0;\n background-color: transparent;\n border: none;\n opacity: .7; }\n .shareTabView .popovermenu .share-note-form textarea.share-note + input.share-note-submit:hover, .shareTabView .popovermenu .share-note-form textarea.share-note + input.share-note-submit:focus, .shareTabView .popovermenu .share-note-form textarea.share-note + input.share-note-submit:active {\n opacity: 1; }\n .shareTabView .popovermenu .share-note-form.share-note-link {\n margin-bottom: 10px; }\n .shareTabView .popovermenu .new-share {\n border-top: 1px solid var(--color-border); }\n\n.shareTabView .linkPass .icon-loading-small {\n margin-right: 0px; }\n\n.shareTabView .icon {\n background-size: 16px 16px; }\n\n.shareTabView .shareWithList .icon-loading-small:not(.hidden) + span,\n.shareTabView .linkShareView .icon-loading-small:not(.hidden) + input + label:before {\n /* Hide if loader is visible */\n display: none !important; }\n\n.shareTabView input[type='checkbox'] {\n margin: 0 3px 0 8px;\n vertical-align: middle; }\n\n.shareTabView input[type='text'].shareWithField, .shareTabView input[type='text'].emailField {\n width: 100%;\n box-sizing: border-box;\n padding-right: 32px;\n text-overflow: ellipsis; }\n\n.shareTabView input[type='text'].linkText .shareTabView input[type='password'].linkPassText, .shareTabView input[type='password'].passwordField {\n width: 180px !important; }\n\n.shareTabView form {\n font-size: 100%;\n margin-left: 0;\n margin-right: 0; }\n\n.shareTabView .share-note {\n border-radius: var(--border-radius);\n margin-bottom: 10px;\n margin-left: 37px; }\n\n.shareWithList {\n list-style-type: none;\n display: flex;\n flex-direction: column; }\n .shareWithList > li {\n height: 44px;\n white-space: normal;\n display: inline-flex;\n align-items: center;\n position: relative; }\n .shareWithList > li .avatar {\n width: 32px;\n height: 32px;\n background-color: var(--color-primary); }\n .shareWithList .unshare img {\n vertical-align: text-bottom;\n /* properly align icons */ }\n .shareWithList .sharingOptionsGroup {\n margin-left: auto;\n display: flex;\n align-items: center;\n white-space: nowrap; }\n .shareWithList .sharingOptionsGroup > .icon:not(.hidden),\n .shareWithList .sharingOptionsGroup .share-menu > .icon:not(.hidden) {\n padding: 14px;\n height: 44px;\n width: 44px;\n opacity: .5;\n display: block;\n cursor: pointer; }\n .shareWithList .sharingOptionsGroup > .icon:not(.hidden):hover, .shareWithList .sharingOptionsGroup > .icon:not(.hidden):focus, .shareWithList .sharingOptionsGroup > .icon:not(.hidden):active,\n .shareWithList .sharingOptionsGroup .share-menu > .icon:not(.hidden):hover,\n .shareWithList .sharingOptionsGroup .share-menu > .icon:not(.hidden):focus,\n .shareWithList .sharingOptionsGroup .share-menu > .icon:not(.hidden):active {\n opacity: .7; }\n .shareWithList .sharingOptionsGroup > .share-menu {\n position: relative;\n display: block; }\n .shareWithList .username {\n padding: 0 8px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis; }\n\n.ui-autocomplete {\n /* limit dropdown height to 6 1/2 entries */\n max-height: calc(36px * 6.5);\n overflow-y: auto;\n overflow-x: hidden;\n z-index: 1550 !important; }\n\n.notCreatable {\n padding-left: 12px;\n padding-top: 12px;\n color: var(--color-text-lighter); }\n\n.contactsmenu-popover {\n left: -6px;\n right: auto;\n padding: 3px 6px;\n top: 100%;\n margin-top: 0; }\n .contactsmenu-popover li.hidden {\n display: none !important; }\n .contactsmenu-popover:after {\n left: 8px;\n right: auto; }\n\n.reshare,\n#link label,\n#expiration label {\n display: inline-flex;\n align-items: center; }\n .reshare .avatar,\n #link label .avatar,\n #expiration label .avatar {\n margin-right: 5px; }\n\n.resharerInfoView.subView {\n position: relative; }\n",""])},function(e,n){e.exports=function(e){var n="undefined"!=typeof window&&window.location;if(!n)throw new Error("fixUrls requires window.location");if(!e||"string"!=typeof e)return e;var t=n.protocol+"//"+n.host,i=t+n.pathname.replace(/\/[^\/]*$/,"/");return e.replace(/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi,function(e,n){var r,a=n.trim().replace(/^"(.*)"$/,function(e,n){return n}).replace(/^'(.*)'$/,function(e,n){return n});return/^(#|data:|http:\/\/|https:\/\/|file:\/\/\/|\s*$)/i.test(a)?e:(r=0===a.indexOf("//")?a:0===a.indexOf("/")?t+a:i+a.replace(/^\.\//,""),"url("+JSON.stringify(r)+")")})}},function(e,n,t){var i=t(10);"string"==typeof i&&(i=[[e.i,i,""]]);var r={hmr:!0,transform:void 0,insertInto:void 0};t(1)(i,r);i.locals&&(e.exports=i.locals)},function(e,n,t){(e.exports=t(0)(!1)).push([e.i,"/**\n * @copyright 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\ndiv.crumb span.icon-shared,\ndiv.crumb span.icon-public {\n display: inline-block;\n cursor: pointer;\n opacity: 0.2;\n margin-right: 6px; }\n\ndiv.crumb span.icon-shared.shared,\ndiv.crumb span.icon-public.shared {\n opacity: 0.7; }\n",""])}]); //# sourceMappingURL=additionalScripts.js.map \ No newline at end of file diff --git a/apps/files_sharing/js/additionalScripts.js.map b/apps/files_sharing/js/additionalScripts.js.map index 6d19e8d3720..646a0be1b04 100644 --- a/apps/files_sharing/js/additionalScripts.js.map +++ b/apps/files_sharing/js/additionalScripts.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/css-loader/dist/runtime/api.js","webpack:///./node_modules/style-loader/lib/addStyles.js","webpack:///./apps/files_sharing/src/additionalScripts.js","webpack:///./apps/files_sharing/src/share.js","webpack:///./apps/files_sharing/src/sharetabview.js","webpack:///./apps/files_sharing/src/sharebreadcrumbview.js","webpack:///./apps/files_sharing/src/style/sharetabview.scss?3391","webpack:///./apps/files_sharing/src/style/sharetabview.scss","webpack:///./node_modules/style-loader/lib/urls.js","webpack:///./apps/files_sharing/src/style/sharebreadcrumb.scss?732e","webpack:///./apps/files_sharing/src/style/sharebreadcrumb.scss"],"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","useSourceMap","list","toString","this","map","item","content","cssMapping","btoa","sourceMapping","sourceMap","unescape","encodeURIComponent","JSON","stringify","sourceURLs","sources","source","sourceRoot","concat","join","cssWithMappingToString","mediaQuery","alreadyImportedModules","length","id","push","fn","memo","stylesInDom","isOldIE","window","document","all","atob","apply","arguments","getElement","target","parent","styleTarget","querySelector","HTMLIFrameElement","contentDocument","head","e","singleton","singletonCounter","stylesInsertedAtTop","fixUrls","addStylesToDom","styles","options","domStyle","refs","j","parts","addStyle","listToStyles","newStyles","base","part","css","media","insertStyleElement","style","insertInto","Error","lastStyleElementInsertedAtTop","insertAt","nextSibling","insertBefore","appendChild","firstChild","before","removeStyleElement","parentNode","removeChild","idx","indexOf","splice","createStyleElement","createElement","undefined","attrs","type","nonce","nc","getNonce","addAttrs","el","keys","forEach","setAttribute","obj","update","remove","result","transform","default","styleIndex","applyToSingletonTag","URL","createObjectURL","revokeObjectURL","Blob","link","rel","createLinkElement","autoFixUrls","convertToAbsoluteUrls","blob","oldSrc","href","styleSheet","cssText","createTextNode","newObj","DEBUG","newList","mayRemove","textStore","replaceText","index","replacement","filter","Boolean","cssNode","childNodes","__webpack_exports__","_","extend","OC","Files","Client","PROPERTY_SHARE_TYPES","NS_OWNCLOUD","PROPERTY_OWNER_ID","PROPERTY_OWNER_DISPLAY_NAME","OCA","Sharing","Util","attach","fileList","Share","fileActions","oldCreateRow","_createRow","fileData","tr","sharePermissions","getSharePermissions","permissions","actions","Comment","Details","Goto","attr","shareOwner","shareOwnerId","mountType","PERMISSION_UPDATE","recipientData","isEmpty","shareTypes","oldElementToFile","elementToFile","$el","fileInfo","split","expirationTimestamp","parseInt","shares","expiration","oldGetWebdavProperties","_getWebdavProperties","props","filesClient","addFileInfoParser","response","data","propStat","properties","permissionsProp","PROPERTY_PERMISSIONS","shareTypesProp","chain","xmlvalue","namespaceURI","nodeName","textContent","text","on","ev","$files","each","file","$tr","$","hasLink","hasShares","shareType","SHARE_TYPE_LINK","SHARE_TYPE_EMAIL","SHARE_TYPE_USER","SHARE_TYPE_GROUP","SHARE_TYPE_REMOTE","SHARE_TYPE_CIRCLE","SHARE_TYPE_ROOM","_updateFileActionIcon","sharesLoaded","registerAction","displayName","altText","mime","PERMISSION_ALL","iconClass","FileActions","TYPE_INLINE","actionHandler","fileName","context","$file","isNaN","showDetailsView","render","actionSpec","isDefault","PERMISSION_SHARE","_defaultRenderAction","shareTab","ShareTabView","order","shareModel","fileInfoModel","findFileEl","hasLinkShares","share","share_type","_updateFileListDataAttributes","hasUserShares","markFileAsShared","set","getShareTypes","icon","registerTabView","breadCrumbSharingDetailView","ShareBreadCrumbView","registerBreadCrumbDetailView","pluck","mapObject","shareWith","share_with","shareWithDisplayName","share_with_displayname","removeAttr","Plugins","register","DetailTabView","className","initialize","template","params","getLabel","getIcon","self","_dialog","model","off","html","isUndefined","attributes","itemType","isDirectory","itemSource","possiblePermissions","configModel","ShareConfigModel","ShareItemModel","ShareDialogView","find","append","fetch","trigger","empty","BreadCrumbView","Backbone","View","tagName","events","click","_dirInfo","_shareTab","dirInfo","path","removeClass","hide","isShared","addClass","show","delegateEvents","_onClick","preventDefault","FileInfoModel","getSharesWithCurrentItem","App","hmr","locals","location","baseUrl","protocol","host","currentDir","pathname","replace","fullMatch","origUrl","newUrl","unquotedOrigUrl","trim","$1","test"],"mappings":"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","file":"additionalScripts.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 = 2);\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function (useSourceMap) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item, useSourceMap);\n\n if (item[2]) {\n return '@media ' + item[2] + '{' + content + '}';\n } else {\n return content;\n }\n }).join('');\n }; // import a list of modules into the list\n\n\n list.i = function (modules, mediaQuery) {\n if (typeof modules === 'string') {\n modules = [[null, modules, '']];\n }\n\n var alreadyImportedModules = {};\n\n for (var i = 0; i < this.length; i++) {\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n\n for (i = 0; i < modules.length; i++) {\n var item = modules[i]; // skip already imported module\n // this implementation is not 100% perfect for weird media query combinations\n // when a module is imported multiple times with different media queries.\n // I hope this will never occur (Hey this way we have smaller bundles)\n\n if (item[0] == null || !alreadyImportedModules[item[0]]) {\n if (mediaQuery && !item[2]) {\n item[2] = mediaQuery;\n } else if (mediaQuery) {\n item[2] = '(' + item[2] + ') and (' + mediaQuery + ')';\n }\n\n list.push(item);\n }\n }\n };\n\n return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n var content = item[1] || '';\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (useSourceMap && typeof btoa === 'function') {\n var sourceMapping = toComment(cssMapping);\n var sourceURLs = cssMapping.sources.map(function (source) {\n return '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */';\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n }\n\n return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n return '/*# ' + data + ' */';\n}","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\nvar stylesInDom = {};\n\nvar\tmemoize = function (fn) {\n\tvar memo;\n\n\treturn function () {\n\t\tif (typeof memo === \"undefined\") memo = fn.apply(this, arguments);\n\t\treturn memo;\n\t};\n};\n\nvar isOldIE = memoize(function () {\n\t// Test for IE <= 9 as proposed by Browserhacks\n\t// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n\t// Tests for existence of standard globals is to allow style-loader\n\t// to operate correctly into non-standard environments\n\t// @see https://github.com/webpack-contrib/style-loader/issues/177\n\treturn window && document && document.all && !window.atob;\n});\n\nvar getTarget = function (target, parent) {\n if (parent){\n return parent.querySelector(target);\n }\n return document.querySelector(target);\n};\n\nvar getElement = (function (fn) {\n\tvar memo = {};\n\n\treturn function(target, parent) {\n // If passing function in options, then use it for resolve \"head\" element.\n // Useful for Shadow Root style i.e\n // {\n // insertInto: function () { return document.querySelector(\"#foo\").shadowRoot }\n // }\n if (typeof target === 'function') {\n return target();\n }\n if (typeof memo[target] === \"undefined\") {\n\t\t\tvar styleTarget = getTarget.call(this, target, parent);\n\t\t\t// Special case to return head of iframe instead of iframe itself\n\t\t\tif (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n\t\t\t\ttry {\n\t\t\t\t\t// This will throw an exception if access to iframe is blocked\n\t\t\t\t\t// due to cross-origin restrictions\n\t\t\t\t\tstyleTarget = styleTarget.contentDocument.head;\n\t\t\t\t} catch(e) {\n\t\t\t\t\tstyleTarget = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmemo[target] = styleTarget;\n\t\t}\n\t\treturn memo[target]\n\t};\n})();\n\nvar singleton = null;\nvar\tsingletonCounter = 0;\nvar\tstylesInsertedAtTop = [];\n\nvar\tfixUrls = require(\"./urls\");\n\nmodule.exports = function(list, options) {\n\tif (typeof DEBUG !== \"undefined\" && DEBUG) {\n\t\tif (typeof document !== \"object\") throw new Error(\"The style-loader cannot be used in a non-browser environment\");\n\t}\n\n\toptions = options || {};\n\n\toptions.attrs = typeof options.attrs === \"object\" ? options.attrs : {};\n\n\t// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n\t// tags it will allow on a page\n\tif (!options.singleton && typeof options.singleton !== \"boolean\") options.singleton = isOldIE();\n\n\t// By default, add <style> tags to the <head> element\n if (!options.insertInto) options.insertInto = \"head\";\n\n\t// By default, add <style> tags to the bottom of the target\n\tif (!options.insertAt) options.insertAt = \"bottom\";\n\n\tvar styles = listToStyles(list, options);\n\n\taddStylesToDom(styles, options);\n\n\treturn function update (newList) {\n\t\tvar mayRemove = [];\n\n\t\tfor (var i = 0; i < styles.length; i++) {\n\t\t\tvar item = styles[i];\n\t\t\tvar domStyle = stylesInDom[item.id];\n\n\t\t\tdomStyle.refs--;\n\t\t\tmayRemove.push(domStyle);\n\t\t}\n\n\t\tif(newList) {\n\t\t\tvar newStyles = listToStyles(newList, options);\n\t\t\taddStylesToDom(newStyles, options);\n\t\t}\n\n\t\tfor (var i = 0; i < mayRemove.length; i++) {\n\t\t\tvar domStyle = mayRemove[i];\n\n\t\t\tif(domStyle.refs === 0) {\n\t\t\t\tfor (var j = 0; j < domStyle.parts.length; j++) domStyle.parts[j]();\n\n\t\t\t\tdelete stylesInDom[domStyle.id];\n\t\t\t}\n\t\t}\n\t};\n};\n\nfunction addStylesToDom (styles, options) {\n\tfor (var i = 0; i < styles.length; i++) {\n\t\tvar item = styles[i];\n\t\tvar domStyle = stylesInDom[item.id];\n\n\t\tif(domStyle) {\n\t\t\tdomStyle.refs++;\n\n\t\t\tfor(var j = 0; j < domStyle.parts.length; j++) {\n\t\t\t\tdomStyle.parts[j](item.parts[j]);\n\t\t\t}\n\n\t\t\tfor(; j < item.parts.length; j++) {\n\t\t\t\tdomStyle.parts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\t\t} else {\n\t\t\tvar parts = [];\n\n\t\t\tfor(var j = 0; j < item.parts.length; j++) {\n\t\t\t\tparts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\n\t\t\tstylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};\n\t\t}\n\t}\n}\n\nfunction listToStyles (list, options) {\n\tvar styles = [];\n\tvar newStyles = {};\n\n\tfor (var i = 0; i < list.length; i++) {\n\t\tvar item = list[i];\n\t\tvar id = options.base ? item[0] + options.base : item[0];\n\t\tvar css = item[1];\n\t\tvar media = item[2];\n\t\tvar sourceMap = item[3];\n\t\tvar part = {css: css, media: media, sourceMap: sourceMap};\n\n\t\tif(!newStyles[id]) styles.push(newStyles[id] = {id: id, parts: [part]});\n\t\telse newStyles[id].parts.push(part);\n\t}\n\n\treturn styles;\n}\n\nfunction insertStyleElement (options, style) {\n\tvar target = getElement(options.insertInto)\n\n\tif (!target) {\n\t\tthrow new Error(\"Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.\");\n\t}\n\n\tvar lastStyleElementInsertedAtTop = stylesInsertedAtTop[stylesInsertedAtTop.length - 1];\n\n\tif (options.insertAt === \"top\") {\n\t\tif (!lastStyleElementInsertedAtTop) {\n\t\t\ttarget.insertBefore(style, target.firstChild);\n\t\t} else if (lastStyleElementInsertedAtTop.nextSibling) {\n\t\t\ttarget.insertBefore(style, lastStyleElementInsertedAtTop.nextSibling);\n\t\t} else {\n\t\t\ttarget.appendChild(style);\n\t\t}\n\t\tstylesInsertedAtTop.push(style);\n\t} else if (options.insertAt === \"bottom\") {\n\t\ttarget.appendChild(style);\n\t} else if (typeof options.insertAt === \"object\" && options.insertAt.before) {\n\t\tvar nextSibling = getElement(options.insertAt.before, target);\n\t\ttarget.insertBefore(style, nextSibling);\n\t} else {\n\t\tthrow new Error(\"[Style Loader]\\n\\n Invalid value for parameter 'insertAt' ('options.insertAt') found.\\n Must be 'top', 'bottom', or Object.\\n (https://github.com/webpack-contrib/style-loader#insertat)\\n\");\n\t}\n}\n\nfunction removeStyleElement (style) {\n\tif (style.parentNode === null) return false;\n\tstyle.parentNode.removeChild(style);\n\n\tvar idx = stylesInsertedAtTop.indexOf(style);\n\tif(idx >= 0) {\n\t\tstylesInsertedAtTop.splice(idx, 1);\n\t}\n}\n\nfunction createStyleElement (options) {\n\tvar style = document.createElement(\"style\");\n\n\tif(options.attrs.type === undefined) {\n\t\toptions.attrs.type = \"text/css\";\n\t}\n\n\tif(options.attrs.nonce === undefined) {\n\t\tvar nonce = getNonce();\n\t\tif (nonce) {\n\t\t\toptions.attrs.nonce = nonce;\n\t\t}\n\t}\n\n\taddAttrs(style, options.attrs);\n\tinsertStyleElement(options, style);\n\n\treturn style;\n}\n\nfunction createLinkElement (options) {\n\tvar link = document.createElement(\"link\");\n\n\tif(options.attrs.type === undefined) {\n\t\toptions.attrs.type = \"text/css\";\n\t}\n\toptions.attrs.rel = \"stylesheet\";\n\n\taddAttrs(link, options.attrs);\n\tinsertStyleElement(options, link);\n\n\treturn link;\n}\n\nfunction addAttrs (el, attrs) {\n\tObject.keys(attrs).forEach(function (key) {\n\t\tel.setAttribute(key, attrs[key]);\n\t});\n}\n\nfunction getNonce() {\n\tif (typeof __webpack_nonce__ === 'undefined') {\n\t\treturn null;\n\t}\n\n\treturn __webpack_nonce__;\n}\n\nfunction addStyle (obj, options) {\n\tvar style, update, remove, result;\n\n\t// If a transform function was defined, run it on the css\n\tif (options.transform && obj.css) {\n\t result = typeof options.transform === 'function'\n\t\t ? options.transform(obj.css) \n\t\t : options.transform.default(obj.css);\n\n\t if (result) {\n\t \t// If transform returns a value, use that instead of the original css.\n\t \t// This allows running runtime transformations on the css.\n\t \tobj.css = result;\n\t } else {\n\t \t// If the transform function returns a falsy value, don't add this css.\n\t \t// This allows conditional loading of css\n\t \treturn function() {\n\t \t\t// noop\n\t \t};\n\t }\n\t}\n\n\tif (options.singleton) {\n\t\tvar styleIndex = singletonCounter++;\n\n\t\tstyle = singleton || (singleton = createStyleElement(options));\n\n\t\tupdate = applyToSingletonTag.bind(null, style, styleIndex, false);\n\t\tremove = applyToSingletonTag.bind(null, style, styleIndex, true);\n\n\t} else if (\n\t\tobj.sourceMap &&\n\t\ttypeof URL === \"function\" &&\n\t\ttypeof URL.createObjectURL === \"function\" &&\n\t\ttypeof URL.revokeObjectURL === \"function\" &&\n\t\ttypeof Blob === \"function\" &&\n\t\ttypeof btoa === \"function\"\n\t) {\n\t\tstyle = createLinkElement(options);\n\t\tupdate = updateLink.bind(null, style, options);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\n\t\t\tif(style.href) URL.revokeObjectURL(style.href);\n\t\t};\n\t} else {\n\t\tstyle = createStyleElement(options);\n\t\tupdate = applyToTag.bind(null, style);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\t\t};\n\t}\n\n\tupdate(obj);\n\n\treturn function updateStyle (newObj) {\n\t\tif (newObj) {\n\t\t\tif (\n\t\t\t\tnewObj.css === obj.css &&\n\t\t\t\tnewObj.media === obj.media &&\n\t\t\t\tnewObj.sourceMap === obj.sourceMap\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdate(obj = newObj);\n\t\t} else {\n\t\t\tremove();\n\t\t}\n\t};\n}\n\nvar replaceText = (function () {\n\tvar textStore = [];\n\n\treturn function (index, replacement) {\n\t\ttextStore[index] = replacement;\n\n\t\treturn textStore.filter(Boolean).join('\\n');\n\t};\n})();\n\nfunction applyToSingletonTag (style, index, remove, obj) {\n\tvar css = remove ? \"\" : obj.css;\n\n\tif (style.styleSheet) {\n\t\tstyle.styleSheet.cssText = replaceText(index, css);\n\t} else {\n\t\tvar cssNode = document.createTextNode(css);\n\t\tvar childNodes = style.childNodes;\n\n\t\tif (childNodes[index]) style.removeChild(childNodes[index]);\n\n\t\tif (childNodes.length) {\n\t\t\tstyle.insertBefore(cssNode, childNodes[index]);\n\t\t} else {\n\t\t\tstyle.appendChild(cssNode);\n\t\t}\n\t}\n}\n\nfunction applyToTag (style, obj) {\n\tvar css = obj.css;\n\tvar media = obj.media;\n\n\tif(media) {\n\t\tstyle.setAttribute(\"media\", media)\n\t}\n\n\tif(style.styleSheet) {\n\t\tstyle.styleSheet.cssText = css;\n\t} else {\n\t\twhile(style.firstChild) {\n\t\t\tstyle.removeChild(style.firstChild);\n\t\t}\n\n\t\tstyle.appendChild(document.createTextNode(css));\n\t}\n}\n\nfunction updateLink (link, options, obj) {\n\tvar css = obj.css;\n\tvar sourceMap = obj.sourceMap;\n\n\t/*\n\t\tIf convertToAbsoluteUrls isn't defined, but sourcemaps are enabled\n\t\tand there is no publicPath defined then lets turn convertToAbsoluteUrls\n\t\ton by default. Otherwise default to the convertToAbsoluteUrls option\n\t\tdirectly\n\t*/\n\tvar autoFixUrls = options.convertToAbsoluteUrls === undefined && sourceMap;\n\n\tif (options.convertToAbsoluteUrls || autoFixUrls) {\n\t\tcss = fixUrls(css);\n\t}\n\n\tif (sourceMap) {\n\t\t// http://stackoverflow.com/a/26603875\n\t\tcss += \"\\n/*# sourceMappingURL=data:application/json;base64,\" + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + \" */\";\n\t}\n\n\tvar blob = new Blob([css], { type: \"text/css\" });\n\n\tvar oldSrc = link.href;\n\n\tlink.href = URL.createObjectURL(blob);\n\n\tif(oldSrc) URL.revokeObjectURL(oldSrc);\n}\n","import './share'\nimport './sharetabview'\nimport './sharebreadcrumbview'\n\nimport './style/sharetabview.scss'\nimport './style/sharebreadcrumb.scss'\n","/*\n * Copyright (c) 2014\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\n(function() {\n\n\t_.extend(OC.Files.Client, {\n\t\tPROPERTY_SHARE_TYPES:\t'{' + OC.Files.Client.NS_OWNCLOUD + '}share-types',\n\t\tPROPERTY_OWNER_ID:\t'{' + OC.Files.Client.NS_OWNCLOUD + '}owner-id',\n\t\tPROPERTY_OWNER_DISPLAY_NAME:\t'{' + OC.Files.Client.NS_OWNCLOUD + '}owner-display-name'\n\t});\n\n\tif (!OCA.Sharing) {\n\t\tOCA.Sharing = {};\n\t}\n\t/**\n\t * @namespace\n\t */\n\tOCA.Sharing.Util = {\n\t\t/**\n\t\t * Initialize the sharing plugin.\n\t\t *\n\t\t * Registers the \"Share\" file action and adds additional\n\t\t * DOM attributes for the sharing file info.\n\t\t *\n\t\t * @param {OCA.Files.FileList} fileList file list to be extended\n\t\t */\n\t\tattach: function(fileList) {\n\t\t\t// core sharing is disabled/not loaded\n\t\t\tif (!OC.Share) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (fileList.id === 'trashbin' || fileList.id === 'files.public') {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar fileActions = fileList.fileActions;\n\t\t\tvar oldCreateRow = fileList._createRow;\n\t\t\tfileList._createRow = function(fileData) {\n\n\t\t\t\tvar tr = oldCreateRow.apply(this, arguments);\n\t\t\t\tvar sharePermissions = OCA.Sharing.Util.getSharePermissions(fileData);\n\t\t\t\t\n\t\t\t\tif (fileData.permissions === 0) {\n\t\t\t\t\t// no permission, disabling sidebar\n\t\t\t\t\tdelete fileActions.actions.all.Comment;\n\t\t\t\t\tdelete fileActions.actions.all.Details;\n\t\t\t\t\tdelete fileActions.actions.all.Goto;\n\t\t\t\t}\n\t\t\t\ttr.attr('data-share-permissions', sharePermissions);\n\t\t\t\tif (fileData.shareOwner) {\n\t\t\t\t\ttr.attr('data-share-owner', fileData.shareOwner);\n\t\t\t\t\ttr.attr('data-share-owner-id', fileData.shareOwnerId);\n\t\t\t\t\t// user should always be able to rename a mount point\n\t\t\t\t\tif (fileData.mountType === 'shared-root') {\n\t\t\t\t\t\ttr.attr('data-permissions', fileData.permissions | OC.PERMISSION_UPDATE);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (fileData.recipientData && !_.isEmpty(fileData.recipientData)) {\n\t\t\t\t\ttr.attr('data-share-recipient-data', JSON.stringify(fileData.recipientData));\n\t\t\t\t}\n\t\t\t\tif (fileData.shareTypes) {\n\t\t\t\t\ttr.attr('data-share-types', fileData.shareTypes.join(','));\n\t\t\t\t}\n\t\t\t\treturn tr;\n\t\t\t};\n\n\t\t\tvar oldElementToFile = fileList.elementToFile;\n\t\t\tfileList.elementToFile = function($el) {\n\t\t\t\tvar fileInfo = oldElementToFile.apply(this, arguments);\n\t\t\t\tfileInfo.sharePermissions = $el.attr('data-share-permissions') || undefined;\n\t\t\t\tfileInfo.shareOwner = $el.attr('data-share-owner') || undefined;\n\t\t\t\tfileInfo.shareOwnerId = $el.attr('data-share-owner-id') || undefined;\n\n\t\t\t\tif( $el.attr('data-share-types')){\n\t\t\t\t\tfileInfo.shareTypes = $el.attr('data-share-types').split(',');\n\t\t\t\t}\n\n\t\t\t\tif( $el.attr('data-expiration')){\n\t\t\t\t\tvar expirationTimestamp = parseInt($el.attr('data-expiration'));\n\t\t\t\t\tfileInfo.shares = [];\n\t\t\t\t\tfileInfo.shares.push({expiration: expirationTimestamp});\n\t\t\t\t}\n\n\t\t\t\treturn fileInfo;\n\t\t\t};\n\n\t\t\tvar oldGetWebdavProperties = fileList._getWebdavProperties;\n\t\t\tfileList._getWebdavProperties = function() {\n\t\t\t\tvar props = oldGetWebdavProperties.apply(this, arguments);\n\t\t\t\tprops.push(OC.Files.Client.PROPERTY_OWNER_ID);\n\t\t\t\tprops.push(OC.Files.Client.PROPERTY_OWNER_DISPLAY_NAME);\n\t\t\t\tprops.push(OC.Files.Client.PROPERTY_SHARE_TYPES);\n\t\t\t\treturn props;\n\t\t\t};\n\n\t\t\tfileList.filesClient.addFileInfoParser(function(response) {\n\t\t\t\tvar data = {};\n\t\t\t\tvar props = response.propStat[0].properties;\n\t\t\t\tvar permissionsProp = props[OC.Files.Client.PROPERTY_PERMISSIONS];\n\n\t\t\t\tif (permissionsProp && permissionsProp.indexOf('S') >= 0) {\n\t\t\t\t\tdata.shareOwner = props[OC.Files.Client.PROPERTY_OWNER_DISPLAY_NAME];\n\t\t\t\t\tdata.shareOwnerId = props[OC.Files.Client.PROPERTY_OWNER_ID];\n\t\t\t\t}\n\n\t\t\t\tvar shareTypesProp = props[OC.Files.Client.PROPERTY_SHARE_TYPES];\n\t\t\t\tif (shareTypesProp) {\n\t\t\t\t\tdata.shareTypes = _.chain(shareTypesProp).filter(function(xmlvalue) {\n\t\t\t\t\t\treturn (xmlvalue.namespaceURI === OC.Files.Client.NS_OWNCLOUD && xmlvalue.nodeName.split(':')[1] === 'share-type');\n\t\t\t\t\t}).map(function(xmlvalue) {\n\t\t\t\t\t\treturn parseInt(xmlvalue.textContent || xmlvalue.text, 10);\n\t\t\t\t\t}).value();\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\t\t\t});\n\n\t\t\t// use delegate to catch the case with multiple file lists\n\t\t\tfileList.$el.on('fileActionsReady', function(ev){\n\t\t\t\tvar $files = ev.$files;\n\n\t\t\t\t_.each($files, function(file) {\n\t\t\t\t\tvar $tr = $(file);\n\t\t\t\t\tvar shareTypes = $tr.attr('data-share-types') || '';\n\t\t\t\t\tvar shareOwner = $tr.attr('data-share-owner');\n\t\t\t\t\tif (shareTypes || shareOwner) {\n\t\t\t\t\t\tvar hasLink = false;\n\t\t\t\t\t\tvar hasShares = false;\n\t\t\t\t\t\t_.each(shareTypes.split(',') || [], function(shareType) {\n\t\t\t\t\t\t\tshareType = parseInt(shareType, 10);\n\t\t\t\t\t\t\tif (shareType === OC.Share.SHARE_TYPE_LINK) {\n\t\t\t\t\t\t\t\thasLink = true;\n\t\t\t\t\t\t\t} else if (shareType === OC.Share.SHARE_TYPE_EMAIL) {\n\t\t\t\t\t\t\t\thasLink = true;\n\t\t\t\t\t\t\t} else if (shareType === OC.Share.SHARE_TYPE_USER) {\n\t\t\t\t\t\t\t\thasShares = true;\n\t\t\t\t\t\t\t} else if (shareType === OC.Share.SHARE_TYPE_GROUP) {\n\t\t\t\t\t\t\t\thasShares = true;\n\t\t\t\t\t\t\t} else if (shareType === OC.Share.SHARE_TYPE_REMOTE) {\n\t\t\t\t\t\t\t\thasShares = true;\n\t\t\t\t\t\t\t} else if (shareType === OC.Share.SHARE_TYPE_CIRCLE) {\n\t\t\t\t\t\t\t\thasShares = true;\n\t\t\t\t\t\t\t} else if (shareType === OC.Share.SHARE_TYPE_ROOM) {\n\t\t\t\t\t\t\t\thasShares = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tOCA.Sharing.Util._updateFileActionIcon($tr, hasShares, hasLink);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\n\t\t\tfileList.$el.on('changeDirectory', function() {\n\t\t\t\tOCA.Sharing.sharesLoaded = false;\n\t\t\t});\n\n\t\t\tfileActions.registerAction({\n\t\t\t\tname: 'Share',\n\t\t\t\tdisplayName: '',\n\t\t\t\taltText: t('core', 'Share'),\n\t\t\t\tmime: 'all',\n\t\t\t\tpermissions: OC.PERMISSION_ALL,\n\t\t\t\ticonClass: 'icon-shared',\n\t\t\t\ttype: OCA.Files.FileActions.TYPE_INLINE,\n\t\t\t\tactionHandler: function(fileName, context) {\n\t\t\t\t\t// do not open sidebar if permission is set and equal to 0\n\t\t\t\t\tvar permissions = parseInt(context.$file.data('share-permissions'), 10);\n\t\t\t\t\tif (isNaN(permissions) || permissions > 0) {\n\t\t\t\t\t\tfileList.showDetailsView(fileName, 'shareTabView');\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\trender: function(actionSpec, isDefault, context) {\n\t\t\t\t\tvar permissions = parseInt(context.$file.data('permissions'), 10);\n\t\t\t\t\t// if no share permissions but share owner exists, still show the link\n\t\t\t\t\tif ((permissions & OC.PERMISSION_SHARE) !== 0 || context.$file.attr('data-share-owner')) {\n\t\t\t\t\t\treturn fileActions._defaultRenderAction.call(fileActions, actionSpec, isDefault, context);\n\t\t\t\t\t}\n\t\t\t\t\t// don't render anything\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tvar shareTab = new OCA.Sharing.ShareTabView('shareTabView', {order: -20});\n\t\t\t// detect changes and change the matching list entry\n\t\t\tshareTab.on('sharesChanged', function(shareModel) {\n\t\t\t\tvar fileInfoModel = shareModel.fileInfoModel;\n\t\t\t\tvar $tr = fileList.findFileEl(fileInfoModel.get('name'));\n\n\t\t\t\t// We count email shares as link share\n\t\t\t\tvar hasLinkShares = shareModel.hasLinkShares();\n\t\t\t\tshareModel.get('shares').forEach(function (share) {\n\t\t\t\t\tif (share.share_type === OC.Share.SHARE_TYPE_EMAIL) {\n\t\t\t\t\t\thasLinkShares = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tOCA.Sharing.Util._updateFileListDataAttributes(fileList, $tr, shareModel);\n\t\t\t\tif (!OCA.Sharing.Util._updateFileActionIcon($tr, shareModel.hasUserShares(), hasLinkShares)) {\n\t\t\t\t\t// remove icon, if applicable\n\t\t\t\t\tOC.Share.markFileAsShared($tr, false, false);\n\t\t\t\t}\n\n\t\t\t\t// FIXME: this is too convoluted. We need to get rid of the above updates\n\t\t\t\t// and only ever update the model and let the events take care of rerendering\n\t\t\t\tfileInfoModel.set({\n\t\t\t\t\tshareTypes: shareModel.getShareTypes(),\n\t\t\t\t\t// in case markFileAsShared decided to change the icon,\n\t\t\t\t\t// we need to modify the model\n\t\t\t\t\t// (FIXME: yes, this is hacky)\n\t\t\t\t\ticon: $tr.attr('data-icon')\n\t\t\t\t});\n\t\t\t});\n\t\t\tfileList.registerTabView(shareTab);\n\n\t\t\tvar breadCrumbSharingDetailView = new OCA.Sharing.ShareBreadCrumbView({shareTab: shareTab});\n\t\t\tfileList.registerBreadCrumbDetailView(breadCrumbSharingDetailView);\n\t\t},\n\n\t\t/**\n\t\t * Update file list data attributes\n\t\t */\n\t\t_updateFileListDataAttributes: function(fileList, $tr, shareModel) {\n\t\t\t// files app current cannot show recipients on load, so we don't update the\n\t\t\t// icon when changed for consistency\n\t\t\tif (fileList.id === 'files') {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar recipients = _.pluck(shareModel.get('shares'), 'share_with_displayname');\n\t\t\t// note: we only update the data attribute because updateIcon()\n\t\t\tif (recipients.length) {\n\t\t\t\tvar recipientData = _.mapObject(shareModel.get('shares'), function (share) {\n\t\t\t\t\treturn {shareWith: share.share_with, shareWithDisplayName: share.share_with_displayname};\n\t\t\t\t});\n\t\t\t\t$tr.attr('data-share-recipient-data', JSON.stringify(recipientData));\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$tr.removeAttr('data-share-recipient-data');\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Update the file action share icon for the given file\n\t\t *\n\t\t * @param $tr file element of the file to update\n\t\t * @param {boolean} hasUserShares true if a user share exists\n\t\t * @param {boolean} hasLinkShares true if a link share exists\n\t\t *\n\t\t * @return {boolean} true if the icon was set, false otherwise\n\t\t */\n\t\t_updateFileActionIcon: function($tr, hasUserShares, hasLinkShares) {\n\t\t\t// if the statuses are loaded already, use them for the icon\n\t\t\t// (needed when scrolling to the next page)\n\t\t\tif (hasUserShares || hasLinkShares || $tr.attr('data-share-recipient-data') || $tr.attr('data-share-owner')) {\n\t\t\t\tOC.Share.markFileAsShared($tr, true, hasLinkShares);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\n\t\t/**\n\t\t * @param {Array} fileData\n\t\t * @returns {String}\n\t\t */\n\t\tgetSharePermissions: function(fileData) {\n\t\t\treturn fileData.sharePermissions;\n\t\t}\n\t};\n})();\n\nOC.Plugins.register('OCA.Files.FileList', OCA.Sharing.Util);\n","/*\n * Copyright (c) 2015\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\n/* @global Handlebars */\n\n(function() {\n\tvar TEMPLATE =\n\t\t'<div>' +\n\t\t'<div class=\"dialogContainer\"></div>' +\n\t\t'</div>';\n\n\t/**\n\t * @memberof OCA.Sharing\n\t */\n\tvar ShareTabView = OCA.Files.DetailTabView.extend(\n\t\t/** @lends OCA.Sharing.ShareTabView.prototype */ {\n\t\tid: 'shareTabView',\n\t\tclassName: 'tab shareTabView',\n\n\t\tinitialize: function(name, options) {\n\t\t\tOCA.Files.DetailTabView.prototype.initialize.call(this, name, options);\n\t\t\tOC.Plugins.attach('OCA.Sharing.ShareTabView', this);\n\t\t},\n\n\t\ttemplate: function(params) {\n\t\t\treturn \tTEMPLATE;\n\t\t},\n\n\t\tgetLabel: function() {\n\t\t\treturn t('files_sharing', 'Sharing');\n\t\t},\n\n\t\tgetIcon: function() {\n\t\t\treturn 'icon-shared';\n\t\t},\n\n\t\t/**\n\t\t * Renders this details view\n\t\t */\n\t\trender: function() {\n\t\t\tvar self = this;\n\t\t\tif (this._dialog) {\n\t\t\t\t// remove/destroy older instance\n\t\t\t\tthis._dialog.model.off();\n\t\t\t\tthis._dialog.remove();\n\t\t\t\tthis._dialog = null;\n\t\t\t}\n\n\t\t\tif (this.model) {\n\t\t\t\tthis.$el.html(this.template());\n\n\t\t\t\tif (_.isUndefined(this.model.get('sharePermissions'))) {\n\t\t\t\t\tthis.model.set('sharePermissions', OCA.Sharing.Util.getSharePermissions(this.model.attributes));\n\t\t\t\t}\n\n\t\t\t\t// TODO: the model should read these directly off the passed fileInfoModel\n\t\t\t\tvar attributes = {\n\t\t\t\t\titemType: this.model.isDirectory() ? 'folder' : 'file',\n\t\t\t\t \titemSource: this.model.get('id'),\n\t\t\t\t\tpossiblePermissions: this.model.get('sharePermissions')\n\t\t\t\t};\n\t\t\t\tvar configModel = new OC.Share.ShareConfigModel();\n\t\t\t\tvar shareModel = new OC.Share.ShareItemModel(attributes, {\n\t\t\t\t\tconfigModel: configModel,\n\t\t\t\t\tfileInfoModel: this.model\n\t\t\t\t});\n\t\t\t\tthis._dialog = new OC.Share.ShareDialogView({\n\t\t\t\t\tconfigModel: configModel,\n\t\t\t\t\tmodel: shareModel\n\t\t\t\t});\n\t\t\t\tthis.$el.find('.dialogContainer').append(this._dialog.$el);\n\t\t\t\tthis._dialog.render();\n\t\t\t\tthis._dialog.model.fetch();\n\t\t\t\tthis._dialog.model.on('change', function() {\n\t\t\t\t\tself.trigger('sharesChanged', shareModel);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.$el.empty();\n\t\t\t\t// TODO: render placeholder text?\n\t\t\t}\n\t\t\tthis.trigger('rendered');\n\t\t}\n\t});\n\n\tOCA.Sharing.ShareTabView = ShareTabView;\n})();\n\n","/* global Handlebars, OC */\n\n/**\n * @copyright 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n(function() {\n\t'use strict';\n\n\tvar BreadCrumbView = OC.Backbone.View.extend({\n\t\ttagName: 'span',\n\t\tevents: {\n\t\t\tclick: '_onClick'\n\t\t},\n\t\t_dirInfo: undefined,\n\n\t\t/** @type OCA.Sharing.ShareTabView */\n\t\t_shareTab: undefined,\n\n\t\tinitialize: function(options) {\n\t\t\tthis._shareTab = options.shareTab;\n\t\t},\n\n\t\trender: function(data) {\n\t\t\tthis._dirInfo = data.dirInfo || null;\n\n\t\t\tif (this._dirInfo !== null && (this._dirInfo.path !== '/' || this._dirInfo.name !== '')) {\n\t\t\t\tvar isShared = data.dirInfo && data.dirInfo.shareTypes && data.dirInfo.shareTypes.length > 0;\n\t\t\t\tthis.$el.removeClass('shared icon-public icon-shared');\n\t\t\t\tif (isShared) {\n\t\t\t\t\tthis.$el.addClass('shared');\n\t\t\t\t\tif (data.dirInfo.shareTypes.indexOf(OC.Share.SHARE_TYPE_LINK) !== -1) {\n\t\t\t\t\t\tthis.$el.addClass('icon-public');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.$el.addClass('icon-shared');\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.$el.addClass('icon-shared');\n\t\t\t\t}\n\t\t\t\tthis.$el.show();\n\t\t\t\tthis.delegateEvents();\n\t\t\t} else {\n\t\t\t\tthis.$el.removeClass('shared icon-public icon-shared');\n\t\t\t\tthis.$el.hide();\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\t_onClick: function(e) {\n\t\t\te.preventDefault();\n\n\t\t\tvar fileInfoModel = new OCA.Files.FileInfoModel(this._dirInfo);\n\t\t\tvar self = this;\n\t\t\tfileInfoModel.on('change', function() {\n\t\t\t\tself.render({\n\t\t\t\t\tdirInfo: self._dirInfo\n\t\t\t\t});\n\t\t\t});\n\t\t\tthis._shareTab.on('sharesChanged', function(shareModel) {\n\t\t\t\tvar shareTypes = [];\n\t\t\t\tvar shares = shareModel.getSharesWithCurrentItem();\n\n\t\t\t\tfor(var i = 0; i < shares.length; i++) {\n\t\t\t\t\tif (shareTypes.indexOf(shares[i].share_type) === -1) {\n\t\t\t\t\t\tshareTypes.push(shares[i].share_type);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (shareModel.hasLinkShares()) {\n\t\t\t\t\tshareTypes.push(OC.Share.SHARE_TYPE_LINK);\n\t\t\t\t}\n\n\t\t\t\t// Since the dirInfo isn't updated we need to do this dark hackery\n\t\t\t\tself._dirInfo.shareTypes = shareTypes;\n\n\t\t\t\tself.render({\n\t\t\t\t\tdirInfo: self._dirInfo\n\t\t\t\t});\n\t\t\t});\n\t\t\tOCA.Files.App.fileList.showDetailsView(fileInfoModel, 'shareTabView');\n\t\t}\n\t});\n\n\tOCA.Sharing.ShareBreadCrumbView = BreadCrumbView;\n})();\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/lib/loader.js!./sharetabview.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/lib/loader.js!./sharetabview.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/lib/loader.js!./sharetabview.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".app-files .shareTabView {\\n min-height: 100px; }\\n\\n.share-autocomplete-item {\\n display: flex; }\\n .share-autocomplete-item.merged {\\n margin-left: 32px; }\\n .share-autocomplete-item .autocomplete-item-text {\\n margin-left: 10px;\\n margin-right: 10px;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n overflow: hidden;\\n line-height: 32px;\\n vertical-align: middle;\\n flex-grow: 1; }\\n .share-autocomplete-item .autocomplete-item-text .ui-state-highlight {\\n border: none;\\n margin: 0; }\\n .share-autocomplete-item.with-description .autocomplete-item-text {\\n line-height: 100%; }\\n .share-autocomplete-item .autocomplete-item-details {\\n display: block;\\n line-height: 130%;\\n font-size: 90%;\\n opacity: 0.7; }\\n .share-autocomplete-item .icon {\\n opacity: .7;\\n margin-right: 7px; }\\n\\n.shareTabView .oneline {\\n white-space: nowrap;\\n position: relative; }\\n\\n.shareTabView .shareWithLoading {\\n padding-left: 10px;\\n right: 35px;\\n top: 3px; }\\n\\n.shareTabView .shareWithConfirm {\\n position: absolute;\\n right: 2px;\\n top: 6px;\\n padding: 14px;\\n opacity: 0.5; }\\n\\n.shareTabView .shareWithField:focus ~ .shareWithConfirm {\\n opacity: 1; }\\n\\n.shareTabView .linkMore {\\n position: absolute;\\n right: -7px;\\n top: -4px;\\n padding: 14px; }\\n\\n.shareTabView .popovermenu {\\n /* Border above last entry '+ Add another share' to separate it from current link settings */ }\\n .shareTabView .popovermenu .linkPassMenu .share-pass-submit {\\n width: auto !important; }\\n .shareTabView .popovermenu .linkPassMenu .icon-loading-small {\\n background-color: var(--color-main-background);\\n position: absolute;\\n right: 8px;\\n margin: 3px;\\n padding: 10px;\\n width: 32px;\\n height: 32px;\\n z-index: 10; }\\n .shareTabView .popovermenu .datepicker {\\n margin-left: 35px; }\\n .shareTabView .popovermenu .share-add input.share-note-delete {\\n border: none;\\n background-color: transparent;\\n width: 44px !important;\\n padding: 0;\\n flex: 0 0 44px;\\n margin-left: auto; }\\n .shareTabView .popovermenu .share-add input.share-note-delete.hidden {\\n display: none; }\\n .shareTabView .popovermenu .share-note-form span.icon-note {\\n position: relative; }\\n .shareTabView .popovermenu .share-note-form textarea.share-note {\\n margin: 0;\\n width: 200px;\\n min-height: 70px;\\n resize: none; }\\n .shareTabView .popovermenu .share-note-form textarea.share-note + input.share-note-submit {\\n position: absolute;\\n width: 44px !important;\\n height: 44px;\\n bottom: 0px;\\n right: 10px;\\n margin: 0;\\n background-color: transparent;\\n border: none;\\n opacity: .7; }\\n .shareTabView .popovermenu .share-note-form textarea.share-note + input.share-note-submit:hover, .shareTabView .popovermenu .share-note-form textarea.share-note + input.share-note-submit:focus, .shareTabView .popovermenu .share-note-form textarea.share-note + input.share-note-submit:active {\\n opacity: 1; }\\n .shareTabView .popovermenu .share-note-form.share-note-link {\\n margin-bottom: 10px; }\\n .shareTabView .popovermenu .new-share {\\n border-top: 1px solid var(--color-border); }\\n\\n.shareTabView .linkPass .icon-loading-small {\\n margin-right: 0px; }\\n\\n.shareTabView .icon {\\n background-size: 16px 16px; }\\n\\n.shareTabView .shareWithList .icon-loading-small:not(.hidden) + span,\\n.shareTabView .linkShareView .icon-loading-small:not(.hidden) + input + label:before {\\n /* Hide if loader is visible */\\n display: none !important; }\\n\\n.shareTabView input[type='checkbox'] {\\n margin: 0 3px 0 8px;\\n vertical-align: middle; }\\n\\n.shareTabView input[type='text'].shareWithField, .shareTabView input[type='text'].emailField {\\n width: 100%;\\n box-sizing: border-box;\\n padding-right: 32px;\\n text-overflow: ellipsis; }\\n\\n.shareTabView input[type='text'].linkText .shareTabView input[type='password'].linkPassText, .shareTabView input[type='password'].passwordField {\\n width: 180px !important; }\\n\\n.shareTabView form {\\n font-size: 100%;\\n margin-left: 0;\\n margin-right: 0; }\\n\\n.shareTabView .share-note {\\n border-radius: var(--border-radius);\\n margin-bottom: 10px;\\n margin-left: 37px; }\\n\\n.shareWithList {\\n list-style-type: none;\\n display: flex;\\n flex-direction: column; }\\n .shareWithList > li {\\n height: 44px;\\n white-space: normal;\\n display: inline-flex;\\n align-items: center;\\n position: relative; }\\n .shareWithList > li .avatar {\\n width: 32px;\\n height: 32px;\\n background-color: var(--color-primary); }\\n .shareWithList .unshare img {\\n vertical-align: text-bottom;\\n /* properly align icons */ }\\n .shareWithList .sharingOptionsGroup {\\n margin-left: auto;\\n display: flex;\\n align-items: center;\\n white-space: nowrap; }\\n .shareWithList .sharingOptionsGroup > .icon:not(.hidden),\\n .shareWithList .sharingOptionsGroup .share-menu > .icon:not(.hidden) {\\n padding: 14px;\\n height: 44px;\\n width: 44px;\\n opacity: .5;\\n display: block;\\n cursor: pointer; }\\n .shareWithList .sharingOptionsGroup > .icon:not(.hidden):hover, .shareWithList .sharingOptionsGroup > .icon:not(.hidden):focus, .shareWithList .sharingOptionsGroup > .icon:not(.hidden):active,\\n .shareWithList .sharingOptionsGroup .share-menu > .icon:not(.hidden):hover,\\n .shareWithList .sharingOptionsGroup .share-menu > .icon:not(.hidden):focus,\\n .shareWithList .sharingOptionsGroup .share-menu > .icon:not(.hidden):active {\\n opacity: .7; }\\n .shareWithList .sharingOptionsGroup > .share-menu {\\n position: relative;\\n display: block; }\\n .shareWithList .username {\\n padding: 0 8px;\\n overflow: hidden;\\n white-space: nowrap;\\n text-overflow: ellipsis; }\\n\\n.ui-autocomplete {\\n /* limit dropdown height to 6 1/2 entries */\\n max-height: calc(36px * 6.5);\\n overflow-y: auto;\\n overflow-x: hidden;\\n z-index: 1550 !important; }\\n\\n.notCreatable {\\n padding-left: 12px;\\n padding-top: 12px;\\n color: var(--color-text-lighter); }\\n\\n.contactsmenu-popover {\\n left: -6px;\\n right: auto;\\n padding: 3px 6px;\\n top: 100%;\\n margin-top: 0; }\\n .contactsmenu-popover li.hidden {\\n display: none !important; }\\n .contactsmenu-popover:after {\\n left: 8px;\\n right: auto; }\\n\\n.reshare,\\n#link label,\\n#expiration label {\\n display: inline-flex;\\n align-items: center; }\\n .reshare .avatar,\\n #link label .avatar,\\n #expiration label .avatar {\\n margin-right: 5px; }\\n\\n.resharerInfoView.subView {\\n position: relative; }\\n\", \"\"]);\n\n","\n/**\n * When source maps are enabled, `style-loader` uses a link element with a data-uri to\n * embed the css on the page. This breaks all relative urls because now they are relative to a\n * bundle instead of the current page.\n *\n * One solution is to only use full urls, but that may be impossible.\n *\n * Instead, this function \"fixes\" the relative urls to be absolute according to the current page location.\n *\n * A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command.\n *\n */\n\nmodule.exports = function (css) {\n // get current location\n var location = typeof window !== \"undefined\" && window.location;\n\n if (!location) {\n throw new Error(\"fixUrls requires window.location\");\n }\n\n\t// blank or null?\n\tif (!css || typeof css !== \"string\") {\n\t return css;\n }\n\n var baseUrl = location.protocol + \"//\" + location.host;\n var currentDir = baseUrl + location.pathname.replace(/\\/[^\\/]*$/, \"/\");\n\n\t// convert each url(...)\n\t/*\n\tThis regular expression is just a way to recursively match brackets within\n\ta string.\n\n\t /url\\s*\\( = Match on the word \"url\" with any whitespace after it and then a parens\n\t ( = Start a capturing group\n\t (?: = Start a non-capturing group\n\t [^)(] = Match anything that isn't a parentheses\n\t | = OR\n\t \\( = Match a start parentheses\n\t (?: = Start another non-capturing groups\n\t [^)(]+ = Match anything that isn't a parentheses\n\t | = OR\n\t \\( = Match a start parentheses\n\t [^)(]* = Match anything that isn't a parentheses\n\t \\) = Match a end parentheses\n\t ) = End Group\n *\\) = Match anything and then a close parens\n ) = Close non-capturing group\n * = Match anything\n ) = Close capturing group\n\t \\) = Match a close parens\n\n\t /gi = Get all matches, not the first. Be case insensitive.\n\t */\n\tvar fixedCss = css.replace(/url\\s*\\(((?:[^)(]|\\((?:[^)(]+|\\([^)(]*\\))*\\))*)\\)/gi, function(fullMatch, origUrl) {\n\t\t// strip quotes (if they exist)\n\t\tvar unquotedOrigUrl = origUrl\n\t\t\t.trim()\n\t\t\t.replace(/^\"(.*)\"$/, function(o, $1){ return $1; })\n\t\t\t.replace(/^'(.*)'$/, function(o, $1){ return $1; });\n\n\t\t// already a full url? no change\n\t\tif (/^(#|data:|http:\\/\\/|https:\\/\\/|file:\\/\\/\\/|\\s*$)/i.test(unquotedOrigUrl)) {\n\t\t return fullMatch;\n\t\t}\n\n\t\t// convert the url to a full url\n\t\tvar newUrl;\n\n\t\tif (unquotedOrigUrl.indexOf(\"//\") === 0) {\n\t\t \t//TODO: should we add protocol?\n\t\t\tnewUrl = unquotedOrigUrl;\n\t\t} else if (unquotedOrigUrl.indexOf(\"/\") === 0) {\n\t\t\t// path should be relative to the base url\n\t\t\tnewUrl = baseUrl + unquotedOrigUrl; // already starts with '/'\n\t\t} else {\n\t\t\t// path should be relative to current directory\n\t\t\tnewUrl = currentDir + unquotedOrigUrl.replace(/^\\.\\//, \"\"); // Strip leading './'\n\t\t}\n\n\t\t// send back the fixed url(...)\n\t\treturn \"url(\" + JSON.stringify(newUrl) + \")\";\n\t});\n\n\t// send back the fixed css\n\treturn fixedCss;\n};\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/lib/loader.js!./sharebreadcrumb.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/lib/loader.js!./sharebreadcrumb.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/lib/loader.js!./sharebreadcrumb.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/**\\n * @copyright 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\\n *\\n * @author 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\\n *\\n * @license GNU AGPL version 3 or any later version\\n *\\n * This program is free software: you can redistribute it and/or modify\\n * it under the terms of the GNU Affero General Public License as\\n * published by the Free Software Foundation, either version 3 of the\\n * License, or (at your option) any later version.\\n *\\n * This program is distributed in the hope that it will be useful,\\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n * GNU Affero General Public License for more details.\\n *\\n * You should have received a copy of the GNU Affero General Public License\\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\\n *\\n */\\ndiv.crumb span.icon-shared,\\ndiv.crumb span.icon-public {\\n display: inline-block;\\n cursor: pointer;\\n opacity: 0.2;\\n margin-right: 6px; }\\n\\ndiv.crumb span.icon-shared.shared,\\ndiv.crumb span.icon-public.shared {\\n opacity: 0.7; }\\n\", \"\"]);\n\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/css-loader/dist/runtime/api.js","webpack:///./node_modules/style-loader/lib/addStyles.js","webpack:///./apps/files_sharing/src/additionalScripts.js","webpack:///./apps/files_sharing/src/share.js","webpack:///./apps/files_sharing/src/sharetabview.js","webpack:///./apps/files_sharing/src/sharebreadcrumbview.js","webpack:///./apps/files_sharing/src/style/sharetabview.scss?3391","webpack:///./apps/files_sharing/src/style/sharetabview.scss","webpack:///./node_modules/style-loader/lib/urls.js","webpack:///./apps/files_sharing/src/style/sharebreadcrumb.scss?732e","webpack:///./apps/files_sharing/src/style/sharebreadcrumb.scss"],"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","useSourceMap","list","toString","this","map","item","content","cssMapping","btoa","sourceMapping","sourceMap","unescape","encodeURIComponent","JSON","stringify","sourceURLs","sources","source","sourceRoot","concat","join","cssWithMappingToString","mediaQuery","alreadyImportedModules","length","id","push","fn","memo","stylesInDom","isOldIE","window","document","all","atob","apply","arguments","getElement","target","parent","styleTarget","querySelector","HTMLIFrameElement","contentDocument","head","e","singleton","singletonCounter","stylesInsertedAtTop","fixUrls","addStylesToDom","styles","options","domStyle","refs","j","parts","addStyle","listToStyles","newStyles","base","part","css","media","insertStyleElement","style","insertInto","Error","lastStyleElementInsertedAtTop","insertAt","nextSibling","insertBefore","appendChild","firstChild","before","removeStyleElement","parentNode","removeChild","idx","indexOf","splice","createStyleElement","createElement","undefined","attrs","type","nonce","nc","getNonce","addAttrs","el","keys","forEach","setAttribute","obj","update","remove","result","transform","default","styleIndex","applyToSingletonTag","URL","createObjectURL","revokeObjectURL","Blob","link","rel","createLinkElement","autoFixUrls","convertToAbsoluteUrls","blob","oldSrc","href","styleSheet","cssText","createTextNode","newObj","DEBUG","newList","mayRemove","textStore","replaceText","index","replacement","filter","Boolean","cssNode","childNodes","__webpack_exports__","_","extend","OC","Files","Client","PROPERTY_SHARE_TYPES","NS_OWNCLOUD","PROPERTY_OWNER_ID","PROPERTY_OWNER_DISPLAY_NAME","OCA","Sharing","Util","attach","fileList","Share","fileActions","oldCreateRow","_createRow","fileData","tr","sharePermissions","getSharePermissions","permissions","actions","Comment","Details","Goto","attr","shareOwner","shareOwnerId","mountType","PERMISSION_UPDATE","recipientData","isEmpty","shareTypes","oldElementToFile","elementToFile","$el","fileInfo","split","expirationTimestamp","parseInt","shares","expiration","oldGetWebdavProperties","_getWebdavProperties","props","filesClient","addFileInfoParser","response","data","propStat","properties","permissionsProp","PROPERTY_PERMISSIONS","shareTypesProp","chain","xmlvalue","namespaceURI","nodeName","textContent","text","on","ev","$files","each","file","$tr","$","hasLink","hasShares","shareType","SHARE_TYPE_LINK","SHARE_TYPE_EMAIL","SHARE_TYPE_USER","SHARE_TYPE_GROUP","SHARE_TYPE_REMOTE","SHARE_TYPE_CIRCLE","SHARE_TYPE_ROOM","_updateFileActionIcon","sharesLoaded","registerAction","displayName","altText","mime","PERMISSION_ALL","iconClass","FileActions","TYPE_INLINE","actionHandler","fileName","context","$file","isNaN","showDetailsView","render","actionSpec","isDefault","PERMISSION_SHARE","_defaultRenderAction","shareTab","ShareTabView","order","shareModel","fileInfoModel","findFileEl","hasLinkShares","share","share_type","_updateFileListDataAttributes","hasUserShares","markFileAsShared","set","getShareTypes","icon","registerTabView","breadCrumbSharingDetailView","ShareBreadCrumbView","registerBreadCrumbDetailView","pluck","mapObject","shareWith","share_with","shareWithDisplayName","share_with_displayname","removeAttr","Plugins","register","DetailTabView","className","initialize","template","params","getLabel","getIcon","self","_dialog","model","off","html","isUndefined","attributes","itemType","isDirectory","itemSource","possiblePermissions","configModel","ShareConfigModel","ShareItemModel","ShareDialogView","find","append","fetch","trigger","empty","BreadCrumbView","Backbone","View","tagName","events","click","_dirInfo","_shareTab","dirInfo","path","removeClass","hide","isShared","addClass","show","delegateEvents","_onClick","preventDefault","FileInfoModel","getSharesWithCurrentItem","App","hmr","locals","location","baseUrl","protocol","host","currentDir","pathname","replace","fullMatch","origUrl","newUrl","unquotedOrigUrl","trim","$1","test"],"mappings":"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","file":"additionalScripts.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 = 2);\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function (useSourceMap) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item, useSourceMap);\n\n if (item[2]) {\n return '@media ' + item[2] + '{' + content + '}';\n } else {\n return content;\n }\n }).join('');\n }; // import a list of modules into the list\n\n\n list.i = function (modules, mediaQuery) {\n if (typeof modules === 'string') {\n modules = [[null, modules, '']];\n }\n\n var alreadyImportedModules = {};\n\n for (var i = 0; i < this.length; i++) {\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n\n for (i = 0; i < modules.length; i++) {\n var item = modules[i]; // skip already imported module\n // this implementation is not 100% perfect for weird media query combinations\n // when a module is imported multiple times with different media queries.\n // I hope this will never occur (Hey this way we have smaller bundles)\n\n if (item[0] == null || !alreadyImportedModules[item[0]]) {\n if (mediaQuery && !item[2]) {\n item[2] = mediaQuery;\n } else if (mediaQuery) {\n item[2] = '(' + item[2] + ') and (' + mediaQuery + ')';\n }\n\n list.push(item);\n }\n }\n };\n\n return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n var content = item[1] || '';\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (useSourceMap && typeof btoa === 'function') {\n var sourceMapping = toComment(cssMapping);\n var sourceURLs = cssMapping.sources.map(function (source) {\n return '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */';\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n }\n\n return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n return '/*# ' + data + ' */';\n}","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\nvar stylesInDom = {};\n\nvar\tmemoize = function (fn) {\n\tvar memo;\n\n\treturn function () {\n\t\tif (typeof memo === \"undefined\") memo = fn.apply(this, arguments);\n\t\treturn memo;\n\t};\n};\n\nvar isOldIE = memoize(function () {\n\t// Test for IE <= 9 as proposed by Browserhacks\n\t// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n\t// Tests for existence of standard globals is to allow style-loader\n\t// to operate correctly into non-standard environments\n\t// @see https://github.com/webpack-contrib/style-loader/issues/177\n\treturn window && document && document.all && !window.atob;\n});\n\nvar getTarget = function (target, parent) {\n if (parent){\n return parent.querySelector(target);\n }\n return document.querySelector(target);\n};\n\nvar getElement = (function (fn) {\n\tvar memo = {};\n\n\treturn function(target, parent) {\n // If passing function in options, then use it for resolve \"head\" element.\n // Useful for Shadow Root style i.e\n // {\n // insertInto: function () { return document.querySelector(\"#foo\").shadowRoot }\n // }\n if (typeof target === 'function') {\n return target();\n }\n if (typeof memo[target] === \"undefined\") {\n\t\t\tvar styleTarget = getTarget.call(this, target, parent);\n\t\t\t// Special case to return head of iframe instead of iframe itself\n\t\t\tif (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n\t\t\t\ttry {\n\t\t\t\t\t// This will throw an exception if access to iframe is blocked\n\t\t\t\t\t// due to cross-origin restrictions\n\t\t\t\t\tstyleTarget = styleTarget.contentDocument.head;\n\t\t\t\t} catch(e) {\n\t\t\t\t\tstyleTarget = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmemo[target] = styleTarget;\n\t\t}\n\t\treturn memo[target]\n\t};\n})();\n\nvar singleton = null;\nvar\tsingletonCounter = 0;\nvar\tstylesInsertedAtTop = [];\n\nvar\tfixUrls = require(\"./urls\");\n\nmodule.exports = function(list, options) {\n\tif (typeof DEBUG !== \"undefined\" && DEBUG) {\n\t\tif (typeof document !== \"object\") throw new Error(\"The style-loader cannot be used in a non-browser environment\");\n\t}\n\n\toptions = options || {};\n\n\toptions.attrs = typeof options.attrs === \"object\" ? options.attrs : {};\n\n\t// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n\t// tags it will allow on a page\n\tif (!options.singleton && typeof options.singleton !== \"boolean\") options.singleton = isOldIE();\n\n\t// By default, add <style> tags to the <head> element\n if (!options.insertInto) options.insertInto = \"head\";\n\n\t// By default, add <style> tags to the bottom of the target\n\tif (!options.insertAt) options.insertAt = \"bottom\";\n\n\tvar styles = listToStyles(list, options);\n\n\taddStylesToDom(styles, options);\n\n\treturn function update (newList) {\n\t\tvar mayRemove = [];\n\n\t\tfor (var i = 0; i < styles.length; i++) {\n\t\t\tvar item = styles[i];\n\t\t\tvar domStyle = stylesInDom[item.id];\n\n\t\t\tdomStyle.refs--;\n\t\t\tmayRemove.push(domStyle);\n\t\t}\n\n\t\tif(newList) {\n\t\t\tvar newStyles = listToStyles(newList, options);\n\t\t\taddStylesToDom(newStyles, options);\n\t\t}\n\n\t\tfor (var i = 0; i < mayRemove.length; i++) {\n\t\t\tvar domStyle = mayRemove[i];\n\n\t\t\tif(domStyle.refs === 0) {\n\t\t\t\tfor (var j = 0; j < domStyle.parts.length; j++) domStyle.parts[j]();\n\n\t\t\t\tdelete stylesInDom[domStyle.id];\n\t\t\t}\n\t\t}\n\t};\n};\n\nfunction addStylesToDom (styles, options) {\n\tfor (var i = 0; i < styles.length; i++) {\n\t\tvar item = styles[i];\n\t\tvar domStyle = stylesInDom[item.id];\n\n\t\tif(domStyle) {\n\t\t\tdomStyle.refs++;\n\n\t\t\tfor(var j = 0; j < domStyle.parts.length; j++) {\n\t\t\t\tdomStyle.parts[j](item.parts[j]);\n\t\t\t}\n\n\t\t\tfor(; j < item.parts.length; j++) {\n\t\t\t\tdomStyle.parts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\t\t} else {\n\t\t\tvar parts = [];\n\n\t\t\tfor(var j = 0; j < item.parts.length; j++) {\n\t\t\t\tparts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\n\t\t\tstylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};\n\t\t}\n\t}\n}\n\nfunction listToStyles (list, options) {\n\tvar styles = [];\n\tvar newStyles = {};\n\n\tfor (var i = 0; i < list.length; i++) {\n\t\tvar item = list[i];\n\t\tvar id = options.base ? item[0] + options.base : item[0];\n\t\tvar css = item[1];\n\t\tvar media = item[2];\n\t\tvar sourceMap = item[3];\n\t\tvar part = {css: css, media: media, sourceMap: sourceMap};\n\n\t\tif(!newStyles[id]) styles.push(newStyles[id] = {id: id, parts: [part]});\n\t\telse newStyles[id].parts.push(part);\n\t}\n\n\treturn styles;\n}\n\nfunction insertStyleElement (options, style) {\n\tvar target = getElement(options.insertInto)\n\n\tif (!target) {\n\t\tthrow new Error(\"Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.\");\n\t}\n\n\tvar lastStyleElementInsertedAtTop = stylesInsertedAtTop[stylesInsertedAtTop.length - 1];\n\n\tif (options.insertAt === \"top\") {\n\t\tif (!lastStyleElementInsertedAtTop) {\n\t\t\ttarget.insertBefore(style, target.firstChild);\n\t\t} else if (lastStyleElementInsertedAtTop.nextSibling) {\n\t\t\ttarget.insertBefore(style, lastStyleElementInsertedAtTop.nextSibling);\n\t\t} else {\n\t\t\ttarget.appendChild(style);\n\t\t}\n\t\tstylesInsertedAtTop.push(style);\n\t} else if (options.insertAt === \"bottom\") {\n\t\ttarget.appendChild(style);\n\t} else if (typeof options.insertAt === \"object\" && options.insertAt.before) {\n\t\tvar nextSibling = getElement(options.insertAt.before, target);\n\t\ttarget.insertBefore(style, nextSibling);\n\t} else {\n\t\tthrow new Error(\"[Style Loader]\\n\\n Invalid value for parameter 'insertAt' ('options.insertAt') found.\\n Must be 'top', 'bottom', or Object.\\n (https://github.com/webpack-contrib/style-loader#insertat)\\n\");\n\t}\n}\n\nfunction removeStyleElement (style) {\n\tif (style.parentNode === null) return false;\n\tstyle.parentNode.removeChild(style);\n\n\tvar idx = stylesInsertedAtTop.indexOf(style);\n\tif(idx >= 0) {\n\t\tstylesInsertedAtTop.splice(idx, 1);\n\t}\n}\n\nfunction createStyleElement (options) {\n\tvar style = document.createElement(\"style\");\n\n\tif(options.attrs.type === undefined) {\n\t\toptions.attrs.type = \"text/css\";\n\t}\n\n\tif(options.attrs.nonce === undefined) {\n\t\tvar nonce = getNonce();\n\t\tif (nonce) {\n\t\t\toptions.attrs.nonce = nonce;\n\t\t}\n\t}\n\n\taddAttrs(style, options.attrs);\n\tinsertStyleElement(options, style);\n\n\treturn style;\n}\n\nfunction createLinkElement (options) {\n\tvar link = document.createElement(\"link\");\n\n\tif(options.attrs.type === undefined) {\n\t\toptions.attrs.type = \"text/css\";\n\t}\n\toptions.attrs.rel = \"stylesheet\";\n\n\taddAttrs(link, options.attrs);\n\tinsertStyleElement(options, link);\n\n\treturn link;\n}\n\nfunction addAttrs (el, attrs) {\n\tObject.keys(attrs).forEach(function (key) {\n\t\tel.setAttribute(key, attrs[key]);\n\t});\n}\n\nfunction getNonce() {\n\tif (typeof __webpack_nonce__ === 'undefined') {\n\t\treturn null;\n\t}\n\n\treturn __webpack_nonce__;\n}\n\nfunction addStyle (obj, options) {\n\tvar style, update, remove, result;\n\n\t// If a transform function was defined, run it on the css\n\tif (options.transform && obj.css) {\n\t result = typeof options.transform === 'function'\n\t\t ? options.transform(obj.css) \n\t\t : options.transform.default(obj.css);\n\n\t if (result) {\n\t \t// If transform returns a value, use that instead of the original css.\n\t \t// This allows running runtime transformations on the css.\n\t \tobj.css = result;\n\t } else {\n\t \t// If the transform function returns a falsy value, don't add this css.\n\t \t// This allows conditional loading of css\n\t \treturn function() {\n\t \t\t// noop\n\t \t};\n\t }\n\t}\n\n\tif (options.singleton) {\n\t\tvar styleIndex = singletonCounter++;\n\n\t\tstyle = singleton || (singleton = createStyleElement(options));\n\n\t\tupdate = applyToSingletonTag.bind(null, style, styleIndex, false);\n\t\tremove = applyToSingletonTag.bind(null, style, styleIndex, true);\n\n\t} else if (\n\t\tobj.sourceMap &&\n\t\ttypeof URL === \"function\" &&\n\t\ttypeof URL.createObjectURL === \"function\" &&\n\t\ttypeof URL.revokeObjectURL === \"function\" &&\n\t\ttypeof Blob === \"function\" &&\n\t\ttypeof btoa === \"function\"\n\t) {\n\t\tstyle = createLinkElement(options);\n\t\tupdate = updateLink.bind(null, style, options);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\n\t\t\tif(style.href) URL.revokeObjectURL(style.href);\n\t\t};\n\t} else {\n\t\tstyle = createStyleElement(options);\n\t\tupdate = applyToTag.bind(null, style);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\t\t};\n\t}\n\n\tupdate(obj);\n\n\treturn function updateStyle (newObj) {\n\t\tif (newObj) {\n\t\t\tif (\n\t\t\t\tnewObj.css === obj.css &&\n\t\t\t\tnewObj.media === obj.media &&\n\t\t\t\tnewObj.sourceMap === obj.sourceMap\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdate(obj = newObj);\n\t\t} else {\n\t\t\tremove();\n\t\t}\n\t};\n}\n\nvar replaceText = (function () {\n\tvar textStore = [];\n\n\treturn function (index, replacement) {\n\t\ttextStore[index] = replacement;\n\n\t\treturn textStore.filter(Boolean).join('\\n');\n\t};\n})();\n\nfunction applyToSingletonTag (style, index, remove, obj) {\n\tvar css = remove ? \"\" : obj.css;\n\n\tif (style.styleSheet) {\n\t\tstyle.styleSheet.cssText = replaceText(index, css);\n\t} else {\n\t\tvar cssNode = document.createTextNode(css);\n\t\tvar childNodes = style.childNodes;\n\n\t\tif (childNodes[index]) style.removeChild(childNodes[index]);\n\n\t\tif (childNodes.length) {\n\t\t\tstyle.insertBefore(cssNode, childNodes[index]);\n\t\t} else {\n\t\t\tstyle.appendChild(cssNode);\n\t\t}\n\t}\n}\n\nfunction applyToTag (style, obj) {\n\tvar css = obj.css;\n\tvar media = obj.media;\n\n\tif(media) {\n\t\tstyle.setAttribute(\"media\", media)\n\t}\n\n\tif(style.styleSheet) {\n\t\tstyle.styleSheet.cssText = css;\n\t} else {\n\t\twhile(style.firstChild) {\n\t\t\tstyle.removeChild(style.firstChild);\n\t\t}\n\n\t\tstyle.appendChild(document.createTextNode(css));\n\t}\n}\n\nfunction updateLink (link, options, obj) {\n\tvar css = obj.css;\n\tvar sourceMap = obj.sourceMap;\n\n\t/*\n\t\tIf convertToAbsoluteUrls isn't defined, but sourcemaps are enabled\n\t\tand there is no publicPath defined then lets turn convertToAbsoluteUrls\n\t\ton by default. Otherwise default to the convertToAbsoluteUrls option\n\t\tdirectly\n\t*/\n\tvar autoFixUrls = options.convertToAbsoluteUrls === undefined && sourceMap;\n\n\tif (options.convertToAbsoluteUrls || autoFixUrls) {\n\t\tcss = fixUrls(css);\n\t}\n\n\tif (sourceMap) {\n\t\t// http://stackoverflow.com/a/26603875\n\t\tcss += \"\\n/*# sourceMappingURL=data:application/json;base64,\" + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + \" */\";\n\t}\n\n\tvar blob = new Blob([css], { type: \"text/css\" });\n\n\tvar oldSrc = link.href;\n\n\tlink.href = URL.createObjectURL(blob);\n\n\tif(oldSrc) URL.revokeObjectURL(oldSrc);\n}\n","import './share'\nimport './sharetabview'\nimport './sharebreadcrumbview'\n\nimport './style/sharetabview.scss'\nimport './style/sharebreadcrumb.scss'\n","/*\n * Copyright (c) 2014\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\n(function() {\n\n\t_.extend(OC.Files.Client, {\n\t\tPROPERTY_SHARE_TYPES:\t'{' + OC.Files.Client.NS_OWNCLOUD + '}share-types',\n\t\tPROPERTY_OWNER_ID:\t'{' + OC.Files.Client.NS_OWNCLOUD + '}owner-id',\n\t\tPROPERTY_OWNER_DISPLAY_NAME:\t'{' + OC.Files.Client.NS_OWNCLOUD + '}owner-display-name'\n\t});\n\n\tif (!OCA.Sharing) {\n\t\tOCA.Sharing = {};\n\t}\n\t/**\n\t * @namespace\n\t */\n\tOCA.Sharing.Util = {\n\t\t/**\n\t\t * Initialize the sharing plugin.\n\t\t *\n\t\t * Registers the \"Share\" file action and adds additional\n\t\t * DOM attributes for the sharing file info.\n\t\t *\n\t\t * @param {OCA.Files.FileList} fileList file list to be extended\n\t\t */\n\t\tattach: function(fileList) {\n\t\t\t// core sharing is disabled/not loaded\n\t\t\tif (!OC.Share) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (fileList.id === 'trashbin' || fileList.id === 'files.public') {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar fileActions = fileList.fileActions;\n\t\t\tvar oldCreateRow = fileList._createRow;\n\t\t\tfileList._createRow = function(fileData) {\n\n\t\t\t\tvar tr = oldCreateRow.apply(this, arguments);\n\t\t\t\tvar sharePermissions = OCA.Sharing.Util.getSharePermissions(fileData);\n\t\t\t\t\n\t\t\t\tif (fileData.permissions === 0) {\n\t\t\t\t\t// no permission, disabling sidebar\n\t\t\t\t\tdelete fileActions.actions.all.Comment;\n\t\t\t\t\tdelete fileActions.actions.all.Details;\n\t\t\t\t\tdelete fileActions.actions.all.Goto;\n\t\t\t\t}\n\t\t\t\ttr.attr('data-share-permissions', sharePermissions);\n\t\t\t\tif (fileData.shareOwner) {\n\t\t\t\t\ttr.attr('data-share-owner', fileData.shareOwner);\n\t\t\t\t\ttr.attr('data-share-owner-id', fileData.shareOwnerId);\n\t\t\t\t\t// user should always be able to rename a mount point\n\t\t\t\t\tif (fileData.mountType === 'shared-root') {\n\t\t\t\t\t\ttr.attr('data-permissions', fileData.permissions | OC.PERMISSION_UPDATE);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (fileData.recipientData && !_.isEmpty(fileData.recipientData)) {\n\t\t\t\t\ttr.attr('data-share-recipient-data', JSON.stringify(fileData.recipientData));\n\t\t\t\t}\n\t\t\t\tif (fileData.shareTypes) {\n\t\t\t\t\ttr.attr('data-share-types', fileData.shareTypes.join(','));\n\t\t\t\t}\n\t\t\t\treturn tr;\n\t\t\t};\n\n\t\t\tvar oldElementToFile = fileList.elementToFile;\n\t\t\tfileList.elementToFile = function($el) {\n\t\t\t\tvar fileInfo = oldElementToFile.apply(this, arguments);\n\t\t\t\tfileInfo.sharePermissions = $el.attr('data-share-permissions') || undefined;\n\t\t\t\tfileInfo.shareOwner = $el.attr('data-share-owner') || undefined;\n\t\t\t\tfileInfo.shareOwnerId = $el.attr('data-share-owner-id') || undefined;\n\n\t\t\t\tif( $el.attr('data-share-types')){\n\t\t\t\t\tfileInfo.shareTypes = $el.attr('data-share-types').split(',');\n\t\t\t\t}\n\n\t\t\t\tif( $el.attr('data-expiration')){\n\t\t\t\t\tvar expirationTimestamp = parseInt($el.attr('data-expiration'));\n\t\t\t\t\tfileInfo.shares = [];\n\t\t\t\t\tfileInfo.shares.push({expiration: expirationTimestamp});\n\t\t\t\t}\n\n\t\t\t\treturn fileInfo;\n\t\t\t};\n\n\t\t\tvar oldGetWebdavProperties = fileList._getWebdavProperties;\n\t\t\tfileList._getWebdavProperties = function() {\n\t\t\t\tvar props = oldGetWebdavProperties.apply(this, arguments);\n\t\t\t\tprops.push(OC.Files.Client.PROPERTY_OWNER_ID);\n\t\t\t\tprops.push(OC.Files.Client.PROPERTY_OWNER_DISPLAY_NAME);\n\t\t\t\tprops.push(OC.Files.Client.PROPERTY_SHARE_TYPES);\n\t\t\t\treturn props;\n\t\t\t};\n\n\t\t\tfileList.filesClient.addFileInfoParser(function(response) {\n\t\t\t\tvar data = {};\n\t\t\t\tvar props = response.propStat[0].properties;\n\t\t\t\tvar permissionsProp = props[OC.Files.Client.PROPERTY_PERMISSIONS];\n\n\t\t\t\tif (permissionsProp && permissionsProp.indexOf('S') >= 0) {\n\t\t\t\t\tdata.shareOwner = props[OC.Files.Client.PROPERTY_OWNER_DISPLAY_NAME];\n\t\t\t\t\tdata.shareOwnerId = props[OC.Files.Client.PROPERTY_OWNER_ID];\n\t\t\t\t}\n\n\t\t\t\tvar shareTypesProp = props[OC.Files.Client.PROPERTY_SHARE_TYPES];\n\t\t\t\tif (shareTypesProp) {\n\t\t\t\t\tdata.shareTypes = _.chain(shareTypesProp).filter(function(xmlvalue) {\n\t\t\t\t\t\treturn (xmlvalue.namespaceURI === OC.Files.Client.NS_OWNCLOUD && xmlvalue.nodeName.split(':')[1] === 'share-type');\n\t\t\t\t\t}).map(function(xmlvalue) {\n\t\t\t\t\t\treturn parseInt(xmlvalue.textContent || xmlvalue.text, 10);\n\t\t\t\t\t}).value();\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\t\t\t});\n\n\t\t\t// use delegate to catch the case with multiple file lists\n\t\t\tfileList.$el.on('fileActionsReady', function(ev){\n\t\t\t\tvar $files = ev.$files;\n\n\t\t\t\t_.each($files, function(file) {\n\t\t\t\t\tvar $tr = $(file);\n\t\t\t\t\tvar shareTypes = $tr.attr('data-share-types') || '';\n\t\t\t\t\tvar shareOwner = $tr.attr('data-share-owner');\n\t\t\t\t\tif (shareTypes || shareOwner) {\n\t\t\t\t\t\tvar hasLink = false;\n\t\t\t\t\t\tvar hasShares = false;\n\t\t\t\t\t\t_.each(shareTypes.split(',') || [], function(shareType) {\n\t\t\t\t\t\t\tshareType = parseInt(shareType, 10);\n\t\t\t\t\t\t\tif (shareType === OC.Share.SHARE_TYPE_LINK) {\n\t\t\t\t\t\t\t\thasLink = true;\n\t\t\t\t\t\t\t} else if (shareType === OC.Share.SHARE_TYPE_EMAIL) {\n\t\t\t\t\t\t\t\thasLink = true;\n\t\t\t\t\t\t\t} else if (shareType === OC.Share.SHARE_TYPE_USER) {\n\t\t\t\t\t\t\t\thasShares = true;\n\t\t\t\t\t\t\t} else if (shareType === OC.Share.SHARE_TYPE_GROUP) {\n\t\t\t\t\t\t\t\thasShares = true;\n\t\t\t\t\t\t\t} else if (shareType === OC.Share.SHARE_TYPE_REMOTE) {\n\t\t\t\t\t\t\t\thasShares = true;\n\t\t\t\t\t\t\t} else if (shareType === OC.Share.SHARE_TYPE_CIRCLE) {\n\t\t\t\t\t\t\t\thasShares = true;\n\t\t\t\t\t\t\t} else if (shareType === OC.Share.SHARE_TYPE_ROOM) {\n\t\t\t\t\t\t\t\thasShares = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tOCA.Sharing.Util._updateFileActionIcon($tr, hasShares, hasLink);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\n\t\t\tfileList.$el.on('changeDirectory', function() {\n\t\t\t\tOCA.Sharing.sharesLoaded = false;\n\t\t\t});\n\n\t\t\tfileActions.registerAction({\n\t\t\t\tname: 'Share',\n\t\t\t\tdisplayName: '',\n\t\t\t\taltText: t('core', 'Share'),\n\t\t\t\tmime: 'all',\n\t\t\t\tpermissions: OC.PERMISSION_ALL,\n\t\t\t\ticonClass: 'icon-shared',\n\t\t\t\ttype: OCA.Files.FileActions.TYPE_INLINE,\n\t\t\t\tactionHandler: function(fileName, context) {\n\t\t\t\t\t// do not open sidebar if permission is set and equal to 0\n\t\t\t\t\tvar permissions = parseInt(context.$file.data('share-permissions'), 10);\n\t\t\t\t\tif (isNaN(permissions) || permissions > 0) {\n\t\t\t\t\t\tfileList.showDetailsView(fileName, 'shareTabView');\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\trender: function(actionSpec, isDefault, context) {\n\t\t\t\t\tvar permissions = parseInt(context.$file.data('permissions'), 10);\n\t\t\t\t\t// if no share permissions but share owner exists, still show the link\n\t\t\t\t\tif ((permissions & OC.PERMISSION_SHARE) !== 0 || context.$file.attr('data-share-owner')) {\n\t\t\t\t\t\treturn fileActions._defaultRenderAction.call(fileActions, actionSpec, isDefault, context);\n\t\t\t\t\t}\n\t\t\t\t\t// don't render anything\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tvar shareTab = new OCA.Sharing.ShareTabView('shareTabView', {order: -20});\n\t\t\t// detect changes and change the matching list entry\n\t\t\tshareTab.on('sharesChanged', function(shareModel) {\n\t\t\t\tvar fileInfoModel = shareModel.fileInfoModel;\n\t\t\t\tvar $tr = fileList.findFileEl(fileInfoModel.get('name'));\n\n\t\t\t\t// We count email shares as link share\n\t\t\t\tvar hasLinkShares = shareModel.hasLinkShares();\n\t\t\t\tshareModel.get('shares').forEach(function (share) {\n\t\t\t\t\tif (share.share_type === OC.Share.SHARE_TYPE_EMAIL) {\n\t\t\t\t\t\thasLinkShares = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tOCA.Sharing.Util._updateFileListDataAttributes(fileList, $tr, shareModel);\n\t\t\t\tif (!OCA.Sharing.Util._updateFileActionIcon($tr, shareModel.hasUserShares(), hasLinkShares)) {\n\t\t\t\t\t// remove icon, if applicable\n\t\t\t\t\tOC.Share.markFileAsShared($tr, false, false);\n\t\t\t\t}\n\n\t\t\t\t// FIXME: this is too convoluted. We need to get rid of the above updates\n\t\t\t\t// and only ever update the model and let the events take care of rerendering\n\t\t\t\tfileInfoModel.set({\n\t\t\t\t\tshareTypes: shareModel.getShareTypes(),\n\t\t\t\t\t// in case markFileAsShared decided to change the icon,\n\t\t\t\t\t// we need to modify the model\n\t\t\t\t\t// (FIXME: yes, this is hacky)\n\t\t\t\t\ticon: $tr.attr('data-icon')\n\t\t\t\t});\n\t\t\t});\n\t\t\tfileList.registerTabView(shareTab);\n\n\t\t\tvar breadCrumbSharingDetailView = new OCA.Sharing.ShareBreadCrumbView({shareTab: shareTab});\n\t\t\tfileList.registerBreadCrumbDetailView(breadCrumbSharingDetailView);\n\t\t},\n\n\t\t/**\n\t\t * Update file list data attributes\n\t\t */\n\t\t_updateFileListDataAttributes: function(fileList, $tr, shareModel) {\n\t\t\t// files app current cannot show recipients on load, so we don't update the\n\t\t\t// icon when changed for consistency\n\t\t\tif (fileList.id === 'files') {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar recipients = _.pluck(shareModel.get('shares'), 'share_with_displayname');\n\t\t\t// note: we only update the data attribute because updateIcon()\n\t\t\tif (recipients.length) {\n\t\t\t\tvar recipientData = _.mapObject(shareModel.get('shares'), function (share) {\n\t\t\t\t\treturn {shareWith: share.share_with, shareWithDisplayName: share.share_with_displayname};\n\t\t\t\t});\n\t\t\t\t$tr.attr('data-share-recipient-data', JSON.stringify(recipientData));\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$tr.removeAttr('data-share-recipient-data');\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Update the file action share icon for the given file\n\t\t *\n\t\t * @param $tr file element of the file to update\n\t\t * @param {boolean} hasUserShares true if a user share exists\n\t\t * @param {boolean} hasLinkShares true if a link share exists\n\t\t *\n\t\t * @return {boolean} true if the icon was set, false otherwise\n\t\t */\n\t\t_updateFileActionIcon: function($tr, hasUserShares, hasLinkShares) {\n\t\t\t// if the statuses are loaded already, use them for the icon\n\t\t\t// (needed when scrolling to the next page)\n\t\t\tif (hasUserShares || hasLinkShares || $tr.attr('data-share-recipient-data') || $tr.attr('data-share-owner')) {\n\t\t\t\tOC.Share.markFileAsShared($tr, true, hasLinkShares);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\n\t\t/**\n\t\t * @param {Array} fileData\n\t\t * @returns {String}\n\t\t */\n\t\tgetSharePermissions: function(fileData) {\n\t\t\treturn fileData.sharePermissions;\n\t\t}\n\t};\n})();\n\nOC.Plugins.register('OCA.Files.FileList', OCA.Sharing.Util);\n","/*\n * Copyright (c) 2015\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\n/* @global Handlebars */\n\n(function() {\n\tvar TEMPLATE =\n\t\t'<div>' +\n\t\t'<div class=\"dialogContainer\"></div>' +\n\t\t'</div>';\n\n\t/**\n\t * @memberof OCA.Sharing\n\t */\n\tvar ShareTabView = OCA.Files.DetailTabView.extend(\n\t\t/** @lends OCA.Sharing.ShareTabView.prototype */ {\n\t\tid: 'shareTabView',\n\t\tclassName: 'tab shareTabView',\n\n\t\tinitialize: function(name, options) {\n\t\t\tOCA.Files.DetailTabView.prototype.initialize.call(this, name, options);\n\t\t\tOC.Plugins.attach('OCA.Sharing.ShareTabView', this);\n\t\t},\n\n\t\ttemplate: function(params) {\n\t\t\treturn \tTEMPLATE;\n\t\t},\n\n\t\tgetLabel: function() {\n\t\t\treturn t('files_sharing', 'Sharing');\n\t\t},\n\n\t\tgetIcon: function() {\n\t\t\treturn 'icon-shared';\n\t\t},\n\n\t\t/**\n\t\t * Renders this details view\n\t\t */\n\t\trender: function() {\n\t\t\tvar self = this;\n\t\t\tif (this._dialog) {\n\t\t\t\t// remove/destroy older instance\n\t\t\t\tthis._dialog.model.off();\n\t\t\t\tthis._dialog.remove();\n\t\t\t\tthis._dialog = null;\n\t\t\t}\n\n\t\t\tif (this.model) {\n\t\t\t\tthis.$el.html(this.template());\n\n\t\t\t\tif (_.isUndefined(this.model.get('sharePermissions'))) {\n\t\t\t\t\tthis.model.set('sharePermissions', OCA.Sharing.Util.getSharePermissions(this.model.attributes));\n\t\t\t\t}\n\n\t\t\t\t// TODO: the model should read these directly off the passed fileInfoModel\n\t\t\t\tvar attributes = {\n\t\t\t\t\titemType: this.model.isDirectory() ? 'folder' : 'file',\n\t\t\t\t \titemSource: this.model.get('id'),\n\t\t\t\t\tpossiblePermissions: this.model.get('sharePermissions')\n\t\t\t\t};\n\t\t\t\tvar configModel = new OC.Share.ShareConfigModel();\n\t\t\t\tvar shareModel = new OC.Share.ShareItemModel(attributes, {\n\t\t\t\t\tconfigModel: configModel,\n\t\t\t\t\tfileInfoModel: this.model\n\t\t\t\t});\n\t\t\t\tthis._dialog = new OC.Share.ShareDialogView({\n\t\t\t\t\tconfigModel: configModel,\n\t\t\t\t\tmodel: shareModel\n\t\t\t\t});\n\t\t\t\tthis.$el.find('.dialogContainer').append(this._dialog.$el);\n\t\t\t\tthis._dialog.render();\n\t\t\t\tthis._dialog.model.fetch();\n\t\t\t\tthis._dialog.model.on('change', function() {\n\t\t\t\t\tself.trigger('sharesChanged', shareModel);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.$el.empty();\n\t\t\t\t// TODO: render placeholder text?\n\t\t\t}\n\t\t\tthis.trigger('rendered');\n\t\t}\n\t});\n\n\tOCA.Sharing.ShareTabView = ShareTabView;\n})();\n\n","/* global Handlebars, OC */\n\n/**\n * @copyright 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n(function() {\n\t'use strict';\n\n\tvar BreadCrumbView = OC.Backbone.View.extend({\n\t\ttagName: 'span',\n\t\tevents: {\n\t\t\tclick: '_onClick'\n\t\t},\n\t\t_dirInfo: undefined,\n\n\t\t/** @type OCA.Sharing.ShareTabView */\n\t\t_shareTab: undefined,\n\n\t\tinitialize: function(options) {\n\t\t\tthis._shareTab = options.shareTab;\n\t\t},\n\n\t\trender: function(data) {\n\t\t\tthis._dirInfo = data.dirInfo || null;\n\n\t\t\tif (this._dirInfo !== null && (this._dirInfo.path !== '/' || this._dirInfo.name !== '')) {\n\t\t\t\tvar isShared = data.dirInfo && data.dirInfo.shareTypes && data.dirInfo.shareTypes.length > 0;\n\t\t\t\tthis.$el.removeClass('shared icon-public icon-shared');\n\t\t\t\tif (isShared) {\n\t\t\t\t\tthis.$el.addClass('shared');\n\t\t\t\t\tif (data.dirInfo.shareTypes.indexOf(OC.Share.SHARE_TYPE_LINK) !== -1) {\n\t\t\t\t\t\tthis.$el.addClass('icon-public');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.$el.addClass('icon-shared');\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.$el.addClass('icon-shared');\n\t\t\t\t}\n\t\t\t\tthis.$el.show();\n\t\t\t\tthis.delegateEvents();\n\t\t\t} else {\n\t\t\t\tthis.$el.removeClass('shared icon-public icon-shared');\n\t\t\t\tthis.$el.hide();\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\t_onClick: function(e) {\n\t\t\te.preventDefault();\n\n\t\t\tvar fileInfoModel = new OCA.Files.FileInfoModel(this._dirInfo);\n\t\t\tvar self = this;\n\t\t\tfileInfoModel.on('change', function() {\n\t\t\t\tself.render({\n\t\t\t\t\tdirInfo: self._dirInfo\n\t\t\t\t});\n\t\t\t});\n\t\t\tthis._shareTab.on('sharesChanged', function(shareModel) {\n\t\t\t\tvar shareTypes = [];\n\t\t\t\tvar shares = shareModel.getSharesWithCurrentItem();\n\n\t\t\t\tfor(var i = 0; i < shares.length; i++) {\n\t\t\t\t\tif (shareTypes.indexOf(shares[i].share_type) === -1) {\n\t\t\t\t\t\tshareTypes.push(shares[i].share_type);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (shareModel.hasLinkShares()) {\n\t\t\t\t\tshareTypes.push(OC.Share.SHARE_TYPE_LINK);\n\t\t\t\t}\n\n\t\t\t\t// Since the dirInfo isn't updated we need to do this dark hackery\n\t\t\t\tself._dirInfo.shareTypes = shareTypes;\n\n\t\t\t\tself.render({\n\t\t\t\t\tdirInfo: self._dirInfo\n\t\t\t\t});\n\t\t\t});\n\t\t\tOCA.Files.App.fileList.showDetailsView(fileInfoModel, 'shareTabView');\n\t\t}\n\t});\n\n\tOCA.Sharing.ShareBreadCrumbView = BreadCrumbView;\n})();\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/lib/loader.js!./sharetabview.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/lib/loader.js!./sharetabview.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/lib/loader.js!./sharetabview.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".app-files .shareTabView {\\n min-height: 100px; }\\n\\n.share-autocomplete-item {\\n display: flex; }\\n .share-autocomplete-item.merged {\\n margin-left: 32px; }\\n .share-autocomplete-item .autocomplete-item-text {\\n margin-left: 10px;\\n margin-right: 10px;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n overflow: hidden;\\n line-height: 32px;\\n vertical-align: middle;\\n flex-grow: 1; }\\n .share-autocomplete-item .autocomplete-item-text .ui-state-highlight {\\n border: none;\\n margin: 0; }\\n .share-autocomplete-item.with-description .autocomplete-item-text {\\n line-height: 100%; }\\n .share-autocomplete-item .autocomplete-item-details {\\n display: block;\\n line-height: 130%;\\n font-size: 90%;\\n opacity: 0.7; }\\n .share-autocomplete-item .icon {\\n opacity: .7;\\n margin-right: 7px; }\\n .share-autocomplete-item .icon.search-globally {\\n width: 32px;\\n height: 32px;\\n margin-right: 0; }\\n\\n.shareTabView .oneline {\\n white-space: nowrap;\\n position: relative; }\\n\\n.shareTabView .shareWithLoading {\\n padding-left: 10px;\\n right: 35px;\\n top: 3px; }\\n\\n.shareTabView .shareWithConfirm {\\n position: absolute;\\n right: 2px;\\n top: 6px;\\n padding: 14px;\\n opacity: 0.5; }\\n\\n.shareTabView .shareWithField:focus ~ .shareWithConfirm {\\n opacity: 1; }\\n\\n.shareTabView .linkMore {\\n position: absolute;\\n right: -7px;\\n top: -4px;\\n padding: 14px; }\\n\\n.shareTabView .popovermenu {\\n /* Border above last entry '+ Add another share' to separate it from current link settings */ }\\n .shareTabView .popovermenu .linkPassMenu .share-pass-submit {\\n width: auto !important; }\\n .shareTabView .popovermenu .linkPassMenu .icon-loading-small {\\n background-color: var(--color-main-background);\\n position: absolute;\\n right: 8px;\\n margin: 3px;\\n padding: 10px;\\n width: 32px;\\n height: 32px;\\n z-index: 10; }\\n .shareTabView .popovermenu .datepicker {\\n margin-left: 35px; }\\n .shareTabView .popovermenu .share-add input.share-note-delete {\\n border: none;\\n background-color: transparent;\\n width: 44px !important;\\n padding: 0;\\n flex: 0 0 44px;\\n margin-left: auto; }\\n .shareTabView .popovermenu .share-add input.share-note-delete.hidden {\\n display: none; }\\n .shareTabView .popovermenu .share-note-form span.icon-note {\\n position: relative; }\\n .shareTabView .popovermenu .share-note-form textarea.share-note {\\n margin: 0;\\n width: 200px;\\n min-height: 70px;\\n resize: none; }\\n .shareTabView .popovermenu .share-note-form textarea.share-note + input.share-note-submit {\\n position: absolute;\\n width: 44px !important;\\n height: 44px;\\n bottom: 0px;\\n right: 10px;\\n margin: 0;\\n background-color: transparent;\\n border: none;\\n opacity: .7; }\\n .shareTabView .popovermenu .share-note-form textarea.share-note + input.share-note-submit:hover, .shareTabView .popovermenu .share-note-form textarea.share-note + input.share-note-submit:focus, .shareTabView .popovermenu .share-note-form textarea.share-note + input.share-note-submit:active {\\n opacity: 1; }\\n .shareTabView .popovermenu .share-note-form.share-note-link {\\n margin-bottom: 10px; }\\n .shareTabView .popovermenu .new-share {\\n border-top: 1px solid var(--color-border); }\\n\\n.shareTabView .linkPass .icon-loading-small {\\n margin-right: 0px; }\\n\\n.shareTabView .icon {\\n background-size: 16px 16px; }\\n\\n.shareTabView .shareWithList .icon-loading-small:not(.hidden) + span,\\n.shareTabView .linkShareView .icon-loading-small:not(.hidden) + input + label:before {\\n /* Hide if loader is visible */\\n display: none !important; }\\n\\n.shareTabView input[type='checkbox'] {\\n margin: 0 3px 0 8px;\\n vertical-align: middle; }\\n\\n.shareTabView input[type='text'].shareWithField, .shareTabView input[type='text'].emailField {\\n width: 100%;\\n box-sizing: border-box;\\n padding-right: 32px;\\n text-overflow: ellipsis; }\\n\\n.shareTabView input[type='text'].linkText .shareTabView input[type='password'].linkPassText, .shareTabView input[type='password'].passwordField {\\n width: 180px !important; }\\n\\n.shareTabView form {\\n font-size: 100%;\\n margin-left: 0;\\n margin-right: 0; }\\n\\n.shareTabView .share-note {\\n border-radius: var(--border-radius);\\n margin-bottom: 10px;\\n margin-left: 37px; }\\n\\n.shareWithList {\\n list-style-type: none;\\n display: flex;\\n flex-direction: column; }\\n .shareWithList > li {\\n height: 44px;\\n white-space: normal;\\n display: inline-flex;\\n align-items: center;\\n position: relative; }\\n .shareWithList > li .avatar {\\n width: 32px;\\n height: 32px;\\n background-color: var(--color-primary); }\\n .shareWithList .unshare img {\\n vertical-align: text-bottom;\\n /* properly align icons */ }\\n .shareWithList .sharingOptionsGroup {\\n margin-left: auto;\\n display: flex;\\n align-items: center;\\n white-space: nowrap; }\\n .shareWithList .sharingOptionsGroup > .icon:not(.hidden),\\n .shareWithList .sharingOptionsGroup .share-menu > .icon:not(.hidden) {\\n padding: 14px;\\n height: 44px;\\n width: 44px;\\n opacity: .5;\\n display: block;\\n cursor: pointer; }\\n .shareWithList .sharingOptionsGroup > .icon:not(.hidden):hover, .shareWithList .sharingOptionsGroup > .icon:not(.hidden):focus, .shareWithList .sharingOptionsGroup > .icon:not(.hidden):active,\\n .shareWithList .sharingOptionsGroup .share-menu > .icon:not(.hidden):hover,\\n .shareWithList .sharingOptionsGroup .share-menu > .icon:not(.hidden):focus,\\n .shareWithList .sharingOptionsGroup .share-menu > .icon:not(.hidden):active {\\n opacity: .7; }\\n .shareWithList .sharingOptionsGroup > .share-menu {\\n position: relative;\\n display: block; }\\n .shareWithList .username {\\n padding: 0 8px;\\n overflow: hidden;\\n white-space: nowrap;\\n text-overflow: ellipsis; }\\n\\n.ui-autocomplete {\\n /* limit dropdown height to 6 1/2 entries */\\n max-height: calc(36px * 6.5);\\n overflow-y: auto;\\n overflow-x: hidden;\\n z-index: 1550 !important; }\\n\\n.notCreatable {\\n padding-left: 12px;\\n padding-top: 12px;\\n color: var(--color-text-lighter); }\\n\\n.contactsmenu-popover {\\n left: -6px;\\n right: auto;\\n padding: 3px 6px;\\n top: 100%;\\n margin-top: 0; }\\n .contactsmenu-popover li.hidden {\\n display: none !important; }\\n .contactsmenu-popover:after {\\n left: 8px;\\n right: auto; }\\n\\n.reshare,\\n#link label,\\n#expiration label {\\n display: inline-flex;\\n align-items: center; }\\n .reshare .avatar,\\n #link label .avatar,\\n #expiration label .avatar {\\n margin-right: 5px; }\\n\\n.resharerInfoView.subView {\\n position: relative; }\\n\", \"\"]);\n\n","\n/**\n * When source maps are enabled, `style-loader` uses a link element with a data-uri to\n * embed the css on the page. This breaks all relative urls because now they are relative to a\n * bundle instead of the current page.\n *\n * One solution is to only use full urls, but that may be impossible.\n *\n * Instead, this function \"fixes\" the relative urls to be absolute according to the current page location.\n *\n * A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command.\n *\n */\n\nmodule.exports = function (css) {\n // get current location\n var location = typeof window !== \"undefined\" && window.location;\n\n if (!location) {\n throw new Error(\"fixUrls requires window.location\");\n }\n\n\t// blank or null?\n\tif (!css || typeof css !== \"string\") {\n\t return css;\n }\n\n var baseUrl = location.protocol + \"//\" + location.host;\n var currentDir = baseUrl + location.pathname.replace(/\\/[^\\/]*$/, \"/\");\n\n\t// convert each url(...)\n\t/*\n\tThis regular expression is just a way to recursively match brackets within\n\ta string.\n\n\t /url\\s*\\( = Match on the word \"url\" with any whitespace after it and then a parens\n\t ( = Start a capturing group\n\t (?: = Start a non-capturing group\n\t [^)(] = Match anything that isn't a parentheses\n\t | = OR\n\t \\( = Match a start parentheses\n\t (?: = Start another non-capturing groups\n\t [^)(]+ = Match anything that isn't a parentheses\n\t | = OR\n\t \\( = Match a start parentheses\n\t [^)(]* = Match anything that isn't a parentheses\n\t \\) = Match a end parentheses\n\t ) = End Group\n *\\) = Match anything and then a close parens\n ) = Close non-capturing group\n * = Match anything\n ) = Close capturing group\n\t \\) = Match a close parens\n\n\t /gi = Get all matches, not the first. Be case insensitive.\n\t */\n\tvar fixedCss = css.replace(/url\\s*\\(((?:[^)(]|\\((?:[^)(]+|\\([^)(]*\\))*\\))*)\\)/gi, function(fullMatch, origUrl) {\n\t\t// strip quotes (if they exist)\n\t\tvar unquotedOrigUrl = origUrl\n\t\t\t.trim()\n\t\t\t.replace(/^\"(.*)\"$/, function(o, $1){ return $1; })\n\t\t\t.replace(/^'(.*)'$/, function(o, $1){ return $1; });\n\n\t\t// already a full url? no change\n\t\tif (/^(#|data:|http:\\/\\/|https:\\/\\/|file:\\/\\/\\/|\\s*$)/i.test(unquotedOrigUrl)) {\n\t\t return fullMatch;\n\t\t}\n\n\t\t// convert the url to a full url\n\t\tvar newUrl;\n\n\t\tif (unquotedOrigUrl.indexOf(\"//\") === 0) {\n\t\t \t//TODO: should we add protocol?\n\t\t\tnewUrl = unquotedOrigUrl;\n\t\t} else if (unquotedOrigUrl.indexOf(\"/\") === 0) {\n\t\t\t// path should be relative to the base url\n\t\t\tnewUrl = baseUrl + unquotedOrigUrl; // already starts with '/'\n\t\t} else {\n\t\t\t// path should be relative to current directory\n\t\t\tnewUrl = currentDir + unquotedOrigUrl.replace(/^\\.\\//, \"\"); // Strip leading './'\n\t\t}\n\n\t\t// send back the fixed url(...)\n\t\treturn \"url(\" + JSON.stringify(newUrl) + \")\";\n\t});\n\n\t// send back the fixed css\n\treturn fixedCss;\n};\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/lib/loader.js!./sharebreadcrumb.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/lib/loader.js!./sharebreadcrumb.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/lib/loader.js!./sharebreadcrumb.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/**\\n * @copyright 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\\n *\\n * @author 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\\n *\\n * @license GNU AGPL version 3 or any later version\\n *\\n * This program is free software: you can redistribute it and/or modify\\n * it under the terms of the GNU Affero General Public License as\\n * published by the Free Software Foundation, either version 3 of the\\n * License, or (at your option) any later version.\\n *\\n * This program is distributed in the hope that it will be useful,\\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n * GNU Affero General Public License for more details.\\n *\\n * You should have received a copy of the GNU Affero General Public License\\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\\n *\\n */\\ndiv.crumb span.icon-shared,\\ndiv.crumb span.icon-public {\\n display: inline-block;\\n cursor: pointer;\\n opacity: 0.2;\\n margin-right: 6px; }\\n\\ndiv.crumb span.icon-shared.shared,\\ndiv.crumb span.icon-public.shared {\\n opacity: 0.7; }\\n\", \"\"]);\n\n"],"sourceRoot":""} \ No newline at end of file diff --git a/apps/files_sharing/lib/Controller/ShareesAPIController.php b/apps/files_sharing/lib/Controller/ShareesAPIController.php index a52ee88855a..e1546e115ec 100644 --- a/apps/files_sharing/lib/Controller/ShareesAPIController.php +++ b/apps/files_sharing/lib/Controller/ShareesAPIController.php @@ -92,6 +92,7 @@ class ShareesAPIController extends OCSController { 'lookup' => [], 'circles' => [], 'rooms' => [], + 'lookupEnabled' => false, ]; protected $reachedEndFor = []; @@ -212,6 +213,7 @@ class ShareesAPIController extends OCSController { $result['exact'] = array_merge($this->result['exact'], $result['exact']); } $this->result = array_merge($this->result, $result); + $this->result['lookupEnabled'] = $this->config->getAppValue('files_sharing', 'lookupServerEnabled', 'yes') === 'yes'; $response = new DataResponse($this->result); if ($hasMoreResults) { diff --git a/apps/files_sharing/src/style/sharetabview.scss b/apps/files_sharing/src/style/sharetabview.scss index f698697407a..b3753f3f321 100644 --- a/apps/files_sharing/src/style/sharetabview.scss +++ b/apps/files_sharing/src/style/sharetabview.scss @@ -38,6 +38,11 @@ opacity: .7; margin-right: 7px; } + .icon.search-globally { + width: 32px; + height: 32px; + margin-right: 0; + } } .shareTabView { diff --git a/apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php b/apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php index 618a1095407..c5d31e3b59d 100644 --- a/apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php +++ b/apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php @@ -236,12 +236,13 @@ class ShareesAPIControllerTest extends TestCase { /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject $config */ $config = $this->createMock(IConfig::class); - $config->expects($this->exactly(2)) + $config->expects($this->exactly(3)) ->method('getAppValue') - ->with('core', $this->anything(), $this->anything()) + ->with($this->anything(), $this->anything(), $this->anything()) ->willReturnMap([ ['core', 'shareapi_only_share_with_group_members', 'no', $apiSetting], ['core', 'shareapi_allow_share_dialog_user_enumeration', 'yes', $enumSetting], + ['files_sharing', 'lookupServerEnabled', 'yes', 'yes'], ]); $this->shareManager->expects($itemType === 'file' || $itemType === 'folder' ? $this->once() : $this->never()) diff --git a/core/js/dist/share_backend.js b/core/js/dist/share_backend.js index c4b462464f641ed4b09d15db94817b6bcf07d2f4..3841199495759d7fc679d5e2e6e3793f387ecfca 100644 GIT binary patch delta 1971 zcmZ`)U2GIp6wcWNOA0DAP}&M*cGC<q^fK&9gt*JJ3fAx-wkeGoN-49ucemrtpL1t+ z+qBzOz@S0FTEdAj5o-lZ{7uyClZr1UKH$%j8e@!aMxT7cgc$G6?ktNxPxs6>_ndov zzH`parM53Fv@L!FU)ftH4cjjIPAZlp4e=qvu*)>Zk?M6DzF)h1^qcjl_|Use^F2Fj zn~p&}D#aPq-0W1GP^F|9l8it4AVe*~@TLz>w%5(7s>*P(1YI~*f_|`Yu>?Ce>uR6! zFwIlfr8!9^hU!h}43nqfLA+6do^=hE7<QCl6IT+;aA2dW=6x&c>9!?Nq7e^&I}MZg zT^SzdH(q}hHsOJ3*v(~k8WgaqE7MQ`@Nnr2Y~jc7^U#L}&cGvhJ`HzNyPtzU0bE>} zgO7V`l__?XDLKv46gsVCJ;i6#Wh94A1-c_sDt<f1&unmR!A~l%4t%_}05N|2T7h10 zYF}NreID8)j*77gbhXLplI99#{m;lE*D<j;58I-7)y7NnAYt1%*c3^-_~ksDRST_N z)ZZ_)LIv0M9Y&6{VlFjpk1}!)mlmKWQEvTL&mzhE8ym8;j6ri`BnY8rr1b_hHQiu! z*C%fU#Z%q82;DGrE1KvKuk9}{LU**N=JD(zY{h*%9%)2YvbL4gJZZ8i4K<~*tT5a4 zBxw}CUWC01qZ6Vic`6+rosdb%)^kE4rm7nM<hT_GGV%6XgS(O`Z@?N%rV<rdCc~=b z8wQzHi;6+5f;UBGREeqM6C@$0XZBC0XZri)rn%zy%!K0mdQKFZBB$oCD2_=1U{be0 zb80Lh6Uv_tFiSJ3DBf<Pes6A$DUQ#k0^OP~O`}1@$FSo9Y{tQhumxw&!=2c15*}D6 zG#u@>Lyt=#k_(Z8A(9P|BOx*sA|oN<hsb1zI3Y3=B4&t`7aEeBju}d$(?u~Oij7ca z4J|{BlqbcrwoBtAek5pbp<vh<%`j%-ygHiU)6{H*gd>Ajg6N7%nQfG)#7Lfuk&IlS z2BSg^e~M;3soq*9-Z%*zn@20MlIH}In!PN~>ezb<5`AIQ6NkDZT7jlCV%j<Gl0_WX zHg!f*dR0FKzqdm%piaCPQm1%3bppIbonrOfbMOQ3`)6K)RZK2{vL+ZcCzhb|K2M(I zJmtPqMYr;{6n7~fZYH((7~oTe#fit6*GStyVo=ghMc5Igl82AI42N;wGK?>98d1fg zZkTD=rJnCv!fmGOH%OeCjyEIJ2d7X|5_Sy;KGUs&@XyB^%}{ffXR_6?Lz<N{s4Ho; zCXKoR!xLAav-;UGT#vN#dNhh#ec>X!9f^9jvwZxo-s<=(Py!&h@jZTb{j1Qo=3YV1 zOPW&8yUbKB)+j(MHI~F<E3j?(gGblK8qU^_T}?I&?BC5C%^KJtS9e~5J&~v-iq(k~ zxCXJns_s#qkzlpRvq2CIw|I}?{3;0esSj=U5T;u7^^tDm4HHM9GZSVnM>BpQTs5^c zX$4KUh>-EUCNq`Rgr<aeKa+{2{P(V6a)l2F5=&O_k3G<hdspEw==jV#(1Wk7LOU3N zy#AnV<#pGL%V`}ypWq8b$DcZ&D?$uRYJAmfe*)IxhO1m_&ztZe{~MsC2;7Z7UxmB4 t8LridyDta(>-f{P%_tMR{stVv_b-F`e;U>MufVa$hSr2tm)`<i_!}rypgI5m delta 1462 zcmbVMO-x)>6wWuag<zs!0n1D)KQ`0%I?tCOCTa#AEC_CzW-zF2GDY&3xij<R{Y>A_ z%rtZuiqx3Uga9o^YfP<Bkfl-cRwlY}q1D*9FfK4LZcIp2mPVuA8JK}4u3X*keD6Ew zo_EeY=Zl+-e=Rl6evEG{f5*c2N9lu3v`{pRqqObekq%k)Tq|iAIi0yo=yjNCC$qiO zlt(vQisW&T?&T5T_(2|LVbUM-I8UPm1lw}V9#u0erb?R2jF+zDSj;8kIzse*0cRf7 zl(c6iUClBDCaLu4b*S`w5wGx2i$x6c<GUhce*E$Vvi@sV&<>xyiMc?7COGuo0y-#I z!n+N+vS-1j2PJgEqMZ_gfs{h$O6WqC24>OIkmafuD?afXIEG|}JVCQFXy$lfhU>gN z>i#U6IKDrFQw=#qr(bVCSS_P1(67<iG8P66#gVO~Bd1hXl|6^qj+8!3Wo*mKIa1~@ zXEVccnIq*DQp@OUA3OX}x2!2ICk<Eg#4x?eGehAZ!BF9_I;q)7ojGEEUbVX?4{|O~ z9#+|wWpGW}vW1FnRLRLn%S@`SV2Cx8uA@vH<?Cp;jtX@&Sw~}{>{zxd2t}pW^R!g2 zL}S+=my6@!u;3~zQ5+YgyrreOqdkhEa+C9B6^N2MU=BUq7jp;Ap}ttOB#P36VtTqR zjVPnC&diLPmEwxvD2Z_?D)z?*M*8ECh*%Fdnuw3fm0QE%I#d*8A{>5Ms1gRVGc2X_ zL`8}5>#Llp8Y~=sIL4mt>QzV1c}}+KTgjy!v|8gSg%;-!q1idSaMIY%FQV5HP1hKk zzMVs`Ia9N()g=T+3N<rXbC|3#UX2;s2V%b|+sv`_JQEx#CrybZraP?Lq)%Sw(^jNA z3AEGYCA6>3BN#duFT+YPJ?2U|+cGqV#Y}&29y`s5)46MSwl`jDO8nubRQXC%;{Mzs zegM~BTEbeRo7Ei2RcQAuw9)Zp1o>e0Eu-U@DLLY_O1m3;TvTe^M5yVsZmB8F%ut_- zwganm3n!aS^Cy?qY=b@@N5^BLWbXgxV01`uX^L>Bfe9w9E#o{7_rIbBM2UW1M&b$H zW+uDLt~E%UuDpA`7&g)2|Ga{)1N7W7TKq3p@lJrsaWt+>{C$cRZz1I0eH#fJsg#<w zR`8_%=WPre@o(RO9Pq!oi_bv2&!Cg?>wK|&xW?DlkL!GGIMi|zPf=?ECjyd5+pU$; zsn&tIF7WmF&n*PWxrdMVQv4~yH_zi+2ywScHOSgP8#J1}%p0rG!aBO>;u?QtzimMI T554bg;!+^c6ZN;ZpmqNXWBKe< diff --git a/core/js/dist/share_backend.js.map b/core/js/dist/share_backend.js.map index 85de6f4da00d3ce506a7f466ef62cecd39ca01be..43f40f9b39ed9875b156e12a65cbd642570fa0a7 100644 GIT binary patch delta 14113 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 aciFO0)=pTQ=PwnSynAf^>Iuv1{{IFsqL11D delta 12896 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 diff --git a/core/js/sharedialogview.js b/core/js/sharedialogview.js index b80db5d680a..d5ee3c93fe2 100644 --- a/core/js/sharedialogview.js +++ b/core/js/sharedialogview.js @@ -32,6 +32,10 @@ /** @type {boolean} **/ _showLink: true, + _lookup: false, + + _lookupAllowed: false, + /** @type {string} **/ tagName: 'div', @@ -125,24 +129,28 @@ /* trigger search after the field was re-selected */ onShareWithFieldFocus: function() { - this.$el.find('.shareWithField').autocomplete("search"); + var $shareWithField = this.$el.find('.shareWithField'); + $shareWithField.autocomplete("search", $shareWithField.val()); }, - _getSuggestions: function(searchTerm, perPage, model) { + _getSuggestions: function(searchTerm, perPage, model, lookup) { if (this._lastSuggestions && this._lastSuggestions.searchTerm === searchTerm && + this._lastSuggestions.lookup === lookup && this._lastSuggestions.perPage === perPage && this._lastSuggestions.model === model) { return this._lastSuggestions.promise; } var deferred = $.Deferred(); + var view = this; $.get( OC.linkToOCS('apps/files_sharing/api/v1') + 'sharees', { format: 'json', search: searchTerm, + lookup: lookup, perPage: perPage, itemType: model.get('itemType') }, @@ -300,6 +308,7 @@ var remotes = result.ocs.data.remotes; var remoteGroups = result.ocs.data.remote_groups; var lookup = result.ocs.data.lookup; + var lookupEnabled = result.ocs.data.lookupEnabled; var emails = []; if (typeof(result.ocs.data.emails) !== 'undefined') { emails = result.ocs.data.emails; @@ -365,8 +374,17 @@ lookup.length ) ); + if (!view._lookup && lookupEnabled) { + result.push( + { + label: t('core', 'Search globally'), + value: {}, + lookup: true + } + ) + } - deferred.resolve(result, exactMatches, moreResultsAvailable); + deferred.resolve(result, exactMatches, moreResultsAvailable, lookupEnabled); } else { deferred.reject(result.ocs.meta.message); } @@ -377,6 +395,7 @@ this._lastSuggestions = { searchTerm: searchTerm, + lookup: lookup, perPage: perPage, model: model, promise: deferred.promise() @@ -641,14 +660,8 @@ var $shareWithField = $('.shareWithField'); this._getRecommendations( view.model - ).done(function(suggestions, exactMatches) { - view._pendingOperationsCount--; - if (view._pendingOperationsCount === 0) { - $loading.addClass('hidden'); - $loading.removeClass('inlineblock'); - $confirm.removeClass('hidden'); - } - + ).done(function(suggestions) { + console.info('recommendations', suggestions); if (suggestions.length > 0) { $shareWithField .autocomplete("option", "autoFocus", true); @@ -659,13 +672,6 @@ response(); } }).fail(function(message) { - view._pendingOperationsCount--; - if (view._pendingOperationsCount === 0) { - $loading.addClass('hidden'); - $loading.removeClass('inlineblock'); - $confirm.removeClass('hidden'); - } - console.error('could not load recommendations', message) }); }, @@ -674,6 +680,7 @@ // If nothing is entered we show recommendations instead of search // results if (search.term.length === 0) { + console.info(search.term, 'empty search term -> using recommendations'); this.recommendationHandler(response); return; } @@ -716,7 +723,8 @@ this._getSuggestions( search.term.trim(), perPage, - view.model + view.model, + view._lookup ).done(function(suggestions, exactMatches, moreResultsAvailable) { view._pendingOperationsCount--; if (view._pendingOperationsCount === 0) { @@ -747,7 +755,7 @@ .attr('data-original-title', title) .tooltip('hide') .tooltip({ - placement: 'bottom', + placement: 'top', trigger: 'manual' }) .tooltip('fixTitle') @@ -818,6 +826,10 @@ insert.addClass('merged'); text = item.value.shareWith; description = type; + } else if (item.lookup) { + text = item.label; + icon = false; + insert.append('<span class="icon icon-search search-globally"></span>'); } else { var avatar = $("<div class='avatardiv'></div>").appendTo(insert); if (item.value.shareType === OC.Share.SHARE_TYPE_USER || item.value.shareType === OC.Share.SHARE_TYPE_CIRCLE) { @@ -843,7 +855,9 @@ ) .appendTo(insert); insert.attr('title', item.value.shareWith); - insert.append('<span class="icon '+icon+'" title="' + text + '"></span>'); + if (icon) { + insert.append('<span class="icon ' + icon + '" title="' + text + '"></span>'); + } insert = $("<a>") .append(insert); return $("<li>") @@ -869,6 +883,18 @@ return false; } + if (s.item.lookup) { + // Retrigger search but with global lookup this time + this._lookup = true; + var $shareWithField = this.$el.find('.shareWithField'); + var val = $shareWithField.val(); + setTimeout(function() { + console.debug('searching again, but globally. search term: ' + val); + $shareWithField.autocomplete("search", val); + }, 0); + return false; + } + e.preventDefault(); // Ensure that the keydown handler for the input field is not // called; otherwise it would try to add the recipient again, which @@ -947,12 +973,11 @@ }; var perPage = parseInt(oc_config['sharing.maxAutocompleteResults'], 10) || 200; - var onlyExactMatches = true; this._getSuggestions( $shareWithField.val(), perPage, this.model, - onlyExactMatches + this._lookup ).done(function(suggestions, exactMatches) { if (suggestions.length === 0) { restoreUI(); diff --git a/core/js/tests/specs/sharedialogviewSpec.js b/core/js/tests/specs/sharedialogviewSpec.js index 83ec459dc90..383a556bf70 100644 --- a/core/js/tests/specs/sharedialogviewSpec.js +++ b/core/js/tests/specs/sharedialogviewSpec.js @@ -350,7 +350,8 @@ describe('OC.Share.ShareDialogView', function() { 'groups': [], 'remotes': [], 'remote_groups': [], - 'lookup': [] + 'lookup': [], + 'lookupEnabled': true, } } }); @@ -365,7 +366,11 @@ describe('OC.Share.ShareDialogView', function() { ); expect(doneStub.calledOnce).toEqual(true); - expect(doneStub.calledWithExactly([], [], false)).toEqual(true); + sinon.assert.calledWithExactly(doneStub, [{ + label: t('core', 'Search globally'), + value: {}, + lookup: true + }], [], false, true); expect(failStub.called).toEqual(false); }); @@ -401,7 +406,8 @@ describe('OC.Share.ShareDialogView', function() { 'groups': [], 'remotes': [], 'remote_groups': [], - 'lookup': [] + 'lookup': [], + 'lookupEnabled': true, } } }); @@ -416,14 +422,20 @@ describe('OC.Share.ShareDialogView', function() { ); expect(doneStub.calledOnce).toEqual(true); - expect(doneStub.calledWithExactly( + sinon.assert.calledWithExactly(doneStub, [{ 'label': 'bobby', 'value': {'shareType': OC.Share.SHARE_TYPE_USER, 'shareWith': 'imbob'} + }, + { + label: t('core', 'Search globally'), + value: {}, + lookup: true }], [], - false - )).toEqual(true); + false, + true + ); expect(failStub.called).toEqual(false); }); it('single exact match', function() { @@ -458,7 +470,8 @@ describe('OC.Share.ShareDialogView', function() { 'groups': [], 'remotes': [], 'remote_groups': [], - 'lookup': [] + 'lookup': [], + 'lookupEnabled': true, } } }); @@ -473,17 +486,23 @@ describe('OC.Share.ShareDialogView', function() { ); expect(doneStub.calledOnce).toEqual(true); - expect(doneStub.calledWithExactly( + sinon.assert.calledWithExactly(doneStub, [{ 'label': 'bob', 'value': {'shareType': OC.Share.SHARE_TYPE_USER, 'shareWith': 'user1'} + }, + { + label: t('core', 'Search globally'), + value: {}, + lookup: true }], [{ 'label': 'bob', 'value': {'shareType': OC.Share.SHARE_TYPE_USER, 'shareWith': 'user1'} }], - false - )).toEqual(true); + false, + true + ); expect(failStub.called).toEqual(false); }); it('mixed matches', function() { @@ -549,7 +568,8 @@ describe('OC.Share.ShareDialogView', function() { ], 'remotes': [], 'remote_groups': [], - 'lookup': [] + 'lookup': [], + 'lookupEnabled': true } } }); @@ -564,7 +584,7 @@ describe('OC.Share.ShareDialogView', function() { ); expect(doneStub.calledOnce).toEqual(true); - expect(doneStub.calledWithExactly( + sinon.assert.calledWithExactly(doneStub, [{ 'label': 'bob', 'value': {'shareType': OC.Share.SHARE_TYPE_USER, 'shareWith': 'user1'} @@ -580,6 +600,11 @@ describe('OC.Share.ShareDialogView', function() { }, { 'label': 'bobfans', 'value': {'shareType': OC.Share.SHARE_TYPE_GROUP, 'shareWith': 'fans'} + }, + { + label: t('core', 'Search globally'), + value: {}, + lookup: true }], [{ 'label': 'bob', @@ -588,8 +613,9 @@ describe('OC.Share.ShareDialogView', function() { 'label': 'bob', 'value': {'shareType': OC.Share.SHARE_TYPE_GROUP, 'shareWith': 'group1'} }], - false - )).toEqual(true); + false, + true + ); expect(failStub.called).toEqual(false); }); @@ -657,7 +683,8 @@ describe('OC.Share.ShareDialogView', function() { ], 'remotes': [], 'remote_groups': [], - 'lookup': [] + 'lookup': [], + 'lookupEnabled': true } } }); @@ -672,7 +699,7 @@ describe('OC.Share.ShareDialogView', function() { ); expect(doneStub.calledOnce).toEqual(true); - expect(doneStub.calledWithExactly( + sinon.assert.calledWithExactly(doneStub, [{ 'label': 'bob', 'value': {'shareType': OC.Share.SHARE_TYPE_USER, 'shareWith': 'user1'} @@ -688,6 +715,11 @@ describe('OC.Share.ShareDialogView', function() { }, { 'label': 'bobfans', 'value': {'shareType': OC.Share.SHARE_TYPE_GROUP, 'shareWith': 'fans'} + }, + { + label: t('core', 'Search globally'), + value: {}, + lookup: true }], [{ 'label': 'bob', @@ -696,8 +728,9 @@ describe('OC.Share.ShareDialogView', function() { 'label': 'bob', 'value': {'shareType': OC.Share.SHARE_TYPE_GROUP, 'shareWith': 'group1'} }], + true, true - )).toEqual(true); + ); expect(failStub.called).toEqual(false); }); @@ -733,7 +766,8 @@ describe('OC.Share.ShareDialogView', function() { 'groups': [], 'remotes': [], 'remote_groups': [], - 'lookup': [] + 'lookup': [], + 'lookupEnabled': true } } }); @@ -752,11 +786,18 @@ describe('OC.Share.ShareDialogView', function() { [{ 'label': 'bob', 'value': {'shareType': OC.Share.SHARE_TYPE_USER, 'shareWith': 'user1'} - }], [{ + }, + { + label: t('core', 'Search globally'), + value: {}, + lookup: true + }], + [{ 'label': 'bob', 'value': {'shareType': OC.Share.SHARE_TYPE_USER, 'shareWith': 'user1'} }], - false + false, + true )).toEqual(true); expect(failStub.called).toEqual(false); @@ -769,17 +810,23 @@ describe('OC.Share.ShareDialogView', function() { expect(failStub.called).toEqual(false); expect(done2Stub.calledOnce).toEqual(true); - expect(done2Stub.calledWithExactly( + sinon.assert.calledWithExactly(doneStub, [{ 'label': 'bob', 'value': {'shareType': OC.Share.SHARE_TYPE_USER, 'shareWith': 'user1'} + }, + { + label: t('core', 'Search globally'), + value: {}, + lookup: true }], [{ 'label': 'bob', 'value': {'shareType': OC.Share.SHARE_TYPE_USER, 'shareWith': 'user1'} }], - false - )).toEqual(true); + false, + true + ); expect(fail2Stub.called).toEqual(false); }); @@ -815,7 +862,8 @@ describe('OC.Share.ShareDialogView', function() { 'groups': [], 'remotes': [], 'remote_groups': [], - 'lookup': [] + 'lookup': [], + 'lookupEnabled': true } } }); @@ -830,17 +878,23 @@ describe('OC.Share.ShareDialogView', function() { ); expect(doneStub.calledOnce).toEqual(true); - expect(doneStub.calledWithExactly( + sinon.assert.calledWithExactly(doneStub, [{ 'label': 'bob', 'value': {'shareType': OC.Share.SHARE_TYPE_USER, 'shareWith': 'user1'} + }, + { + label: t('core', 'Search globally'), + value: {}, + lookup: true }], [{ 'label': 'bob', 'value': {'shareType': OC.Share.SHARE_TYPE_USER, 'shareWith': 'user1'} }], - false - )).toEqual(true); + false, + true + ); expect(failStub.called).toEqual(false); var done2Stub = sinon.stub(); @@ -880,17 +934,23 @@ describe('OC.Share.ShareDialogView', function() { expect(fail2Stub.called).toEqual(false); expect(done3Stub.calledOnce).toEqual(true); - expect(done3Stub.calledWithExactly( + sinon.assert.calledWithExactly(done3Stub, [{ 'label': 'bob', 'value': {'shareType': OC.Share.SHARE_TYPE_USER, 'shareWith': 'user1'} + }, + { + label: t('core', 'Search globally'), + value: {}, + lookup: true }], [{ 'label': 'bob', 'value': {'shareType': OC.Share.SHARE_TYPE_USER, 'shareWith': 'user1'} }], - false - )).toEqual(true); + false, + true + ); expect(fail3Stub.called).toEqual(false); }); }); @@ -944,7 +1004,8 @@ describe('OC.Share.ShareDialogView', function() { 'groups': [], 'remotes': [], 'remote_groups': [], - 'lookup': [] + 'lookup': [], + 'lookupEnabled': true } } }); @@ -953,13 +1014,17 @@ describe('OC.Share.ShareDialogView', function() { {'Content-Type': 'application/json'}, jsonData ); - expect(response.calledWithExactly([{ + sinon.assert.calledWithExactly(response, [{ 'label': 'bob', 'value': {'shareType': OC.Share.SHARE_TYPE_USER, 'shareWith': 'user1'} }, { 'label': 'bobby', 'value': {'shareType': OC.Share.SHARE_TYPE_USER, 'shareWith': 'imbob'} - }])).toEqual(true); + }, { + label: t('core', 'Search globally'), + value: {}, + lookup: true + }]); expect(autocompleteStub.calledWith("option", "autoFocus", true)).toEqual(true); }); @@ -1001,7 +1066,8 @@ describe('OC.Share.ShareDialogView', function() { ], 'remotes': [], 'remote_groups': [], - 'lookup': [] + 'lookup': [], + 'lookupEnabled': true } } }); @@ -1010,13 +1076,17 @@ describe('OC.Share.ShareDialogView', function() { {'Content-Type': 'application/json'}, jsonData ); - expect(response.calledWithExactly([{ + sinon.assert.calledWithExactly(response, [{ 'label': 'group', 'value': {'shareType': OC.Share.SHARE_TYPE_GROUP, 'shareWith': 'group'} }, { 'label': 'group2', 'value': {'shareType': OC.Share.SHARE_TYPE_GROUP, 'shareWith': 'group2'} - }])).toEqual(true); + }, { + label: t('core', 'Search globally'), + value: {}, + lookup: true + }]); expect(autocompleteStub.calledWith("option", "autoFocus", true)).toEqual(true); }); diff --git a/lib/private/Collaboration/Collaborators/LookupPlugin.php b/lib/private/Collaboration/Collaborators/LookupPlugin.php index afb9da05ce3..438985ef0d3 100644 --- a/lib/private/Collaboration/Collaborators/LookupPlugin.php +++ b/lib/private/Collaboration/Collaborators/LookupPlugin.php @@ -62,7 +62,7 @@ class LookupPlugin implements ISearchPlugin { public function search($search, $limit, $offset, ISearchResult $searchResult) { $isGlobalScaleEnabled = $this->config->getSystemValue('gs.enabled', false); - $isLookupServerEnabled = $this->config->getAppValue('files_sharing', 'lookupServerEnabled', 'no') === 'yes'; + $isLookupServerEnabled = $this->config->getAppValue('files_sharing', 'lookupServerEnabled', 'yes') === 'yes'; $hasInternetConnection = (bool)$this->config->getSystemValue('has_internet_connection', true); // if case of Global Scale we always search the lookup server diff --git a/tests/lib/Collaboration/Collaborators/LookupPluginTest.php b/tests/lib/Collaboration/Collaborators/LookupPluginTest.php index 98e4adf2a7c..e4be6a73ee1 100644 --- a/tests/lib/Collaboration/Collaborators/LookupPluginTest.php +++ b/tests/lib/Collaboration/Collaborators/LookupPluginTest.php @@ -90,7 +90,7 @@ class LookupPluginTest extends TestCase { public function testSearchNoLookupServerURI() { $this->config->expects($this->once()) ->method('getAppValue') - ->with('files_sharing', 'lookupServerEnabled', 'no') + ->with('files_sharing', 'lookupServerEnabled', 'yes') ->willReturn('yes'); $this->config->expects($this->at(0)) ->method('getSystemValue') @@ -118,7 +118,7 @@ class LookupPluginTest extends TestCase { public function testSearchNoInternet() { $this->config->expects($this->once()) ->method('getAppValue') - ->with('files_sharing', 'lookupServerEnabled', 'no') + ->with('files_sharing', 'lookupServerEnabled', 'yes') ->willReturn('yes'); $this->config->expects($this->at(0)) ->method('getSystemValue') @@ -154,7 +154,7 @@ class LookupPluginTest extends TestCase { $this->config->expects($this->once()) ->method('getAppValue') - ->with('files_sharing', 'lookupServerEnabled', 'no') + ->with('files_sharing', 'lookupServerEnabled', 'yes') ->willReturn('yes'); $this->config->expects($this->at(0)) ->method('getSystemValue') @@ -213,7 +213,7 @@ class LookupPluginTest extends TestCase { $this->config->expects($this->once()) ->method('getAppValue') - ->with('files_sharing', 'lookupServerEnabled', 'no') + ->with('files_sharing', 'lookupServerEnabled', 'yes') ->willReturn($LookupEnabled ? 'yes' : 'no'); $this->config->expects($this->at(0)) ->method('getSystemValue') @@ -267,7 +267,7 @@ class LookupPluginTest extends TestCase { public function testSearchLookupServerDisabled() { $this->config->expects($this->once()) ->method('getAppValue') - ->with('files_sharing', 'lookupServerEnabled', 'no') + ->with('files_sharing', 'lookupServerEnabled', 'yes') ->willReturn('no'); /** @var ISearchResult|\PHPUnit_Framework_MockObject_MockObject $searchResult */ -- GitLab