]> source.dussan.org Git - nextcloud-server.git/commitdiff
Add underline decoration to links and use div element as target 37145/head
authorLouis Chemineau <louis@chmn.me>
Thu, 9 Mar 2023 14:17:18 +0000 (15:17 +0100)
committerLouis Chemineau <louis@chmn.me>
Thu, 9 Mar 2023 14:17:18 +0000 (15:17 +0100)
Signed-off-by: Louis Chemineau <louis@chmn.me>
apps/files/src/views/Settings.vue
apps/settings/src/components/AuthTokenSetupDialogue.vue
dist/files-main.js
dist/files-main.js.map
dist/settings-vue-settings-personal-security.js
dist/settings-vue-settings-personal-security.js.map

index f26c0b2e3fc779b1004c3a418cb032716f943cec..a7d1c44e719f151f84a482740b59e3140ed58abc 100644 (file)
                                </template>
                        </NcInputField>
                        <em>
-                               <a :href="webdavDocs" target="_blank" rel="noreferrer noopener">
+                               <a class="setting-link"
+                                       :href="webdavDocs"
+                                       target="_blank"
+                                       rel="noreferrer noopener">
                                        {{ t('files', 'Use this address to access your Files via WebDAV') }} ↗
                                </a>
                        </em>
-                       <br />
+                       <br>
                        <em>
-                               <a :href="appPasswordUrl">
-                                       {{ t('files', 'If you have enabled 2FA, you must create and use a new app password by clicking here.') }}
+                               <a class="setting-link" :href="appPasswordUrl">
+                                       {{ t('files', 'If you have enabled 2FA, you must create and use a new app password by clicking here.') }} ↗
                                </a>
                        </em>
                </NcAppSettingsSection>
@@ -175,5 +178,7 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-
+.setting-link:hover {
+       text-decoration: underline;
+}
 </style>
index e2ef0aeae5acac9af57ea0d1e46fdbdfca944a0f..4c92d318b6e5368e9e5612f98115a9de1c4079b5 100644 (file)
   -->
 
 <template>
-       <div v-if="!adding" class="row spacing">
-               <a id="generate-app-token-section">
-                       <!-- Port to TextField component when available -->
-                       <input v-model="deviceName"
-                               type="text"
-                               :maxlength="120"
-                               :disabled="loading"
-                               :placeholder="t('settings', 'App name')"
-                               @keydown.enter="submit">
-                       <NcButton :disabled="loading || deviceName.length === 0"
-                               type="primary"
-                               @click="submit">
-                               {{ t('settings', 'Create new app password') }}
-                       </NcButton>
-               </a>
+       <div v-if="!adding" id="generate-app-token-section" class="row spacing">
+               <!-- Port to TextField component when available -->
+               <input v-model="deviceName"
+                       type="text"
+                       :maxlength="120"
+                       :disabled="loading"
+                       :placeholder="t('settings', 'App name')"
+                       @keydown.enter="submit">
+               <NcButton :disabled="loading || deviceName.length === 0"
+                       type="primary"
+                       @click="submit">
+                       {{ t('settings', 'Create new app password') }}
+               </NcButton>
        </div>
        <div v-else class="spacing">
                {{ t('settings', 'Use the credentials below to configure your app or device.') }}
index 9083350584d14b8099b7de8e9431bf71acc7435c..c972a2d3ced29b339248b7b40dfc1a95b568b0f6 100644 (file)
@@ -1,3 +1,3 @@
 /*! For license information please see files-main.js.LICENSE.txt */
-!function(){"use strict";var e,n={91320:function(e,n,i){var r=i(17499),a=i(79954),o=i(31352),s=i(79753),l=i(45994),c=function(){var t,e,n,i,r=(null===(t=OCA)||void 0===t||null===(e=t.Files)||void 0===e||null===(n=e.App)||void 0===n||null===(i=n.currentFileList)||void 0===i?void 0:i.dirInfo)||{path:"/",name:""};return"".concat(r.path,"/").concat(r.name).replace(/\/\//gi,"/")},u=i(4820),p=i(20144),d=i(62520),f=i(64024),v=i(93455),m=i.n(v),g=i(70110),h=i.n(g);function A(t,e,n,i,r,a,o){try{var s=t[a](o),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}function b(t){return function(){var e=this,n=arguments;return new Promise((function(i,r){var a=t.apply(e,n);function o(t){A(a,i,r,o,s,"next",t)}function s(t){A(a,i,r,o,s,"throw",t)}o(void 0)}))}}var y=function(){var t=b(regeneratorRuntime.mark((function t(){var e;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,u.default.get((0,s.generateOcsUrl)("apps/files/api/v1/templates"));case 2:return e=t.sent,t.abrupt("return",e.data.ocs.data);case 4:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),w=function(){var t=b(regeneratorRuntime.mark((function t(e,n,i){var r;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,u.default.post((0,s.generateOcsUrl)("apps/files/api/v1/templates/create"),{filePath:e,templatePath:n,templateType:i});case 2:return r=t.sent,t.abrupt("return",r.data.ocs.data);case 4:case"end":return t.stop()}}),t)})));return function(e,n,i){return t.apply(this,arguments)}}(),C=256,_={name:"TemplatePreview",inheritAttrs:!1,props:{basename:{type:String,required:!0},checked:{type:Boolean,default:!1},fileid:{type:[String,Number],required:!0},filename:{type:String,required:!0},previewUrl:{type:String,default:null},hasPreview:{type:Boolean,default:!0},mime:{type:String,required:!0},ratio:{type:Number,default:null}},data:function(){return{failedPreview:!1}},computed:{nameWithoutExt:function(){return this.basename.indexOf(".")>-1?this.basename.split(".").slice(0,-1).join("."):this.basename},id:function(){return"template-picker-".concat(this.fileid)},realPreviewUrl:function(){return this.failedPreview&&this.mimeIcon?this.mimeIcon:this.previewUrl?this.previewUrl:(0,l.ts)()?(0,s.generateUrl)("/core/preview?fileId=".concat(this.fileid,"&x=").concat(C,"&y=").concat(C,"&a=1")):(0,s.generateUrl)("/apps/files_sharing/publicpreview/".concat(document.getElementById("sharingToken")&&document.getElementById("sharingToken").value,"?fileId=").concat(this.fileid,"&file=").concat(function(t){var e=(t.startsWith("/")?t:"/".concat(t)).split("/"),n="";return e.forEach((function(t){""!==t&&(n+="/"+encodeURIComponent(t))})),n}(this.filename),"&x=").concat(C,"&y=").concat(C,"&a=1"))},mimeIcon:function(){return OC.MimeType.getIconUrl(this.mime)}},methods:{onCheck:function(){this.$emit("check",this.fileid)},onFailure:function(){this.failedPreview=!0}}},S=_,k=i(93379),x=i.n(k),O=i(7795),P=i.n(O),j=i(90569),E=i.n(j),N=i(3565),T=i.n(N),F=i(19216),I=i.n(F),U=i(44589),D=i.n(U),B=i(87027),q={};q.styleTagTransform=D(),q.setAttributes=T(),q.insert=E().bind(null,"head"),q.domAPI=P(),q.insertStyleElement=I(),x()(B.Z,q),B.Z&&B.Z.locals&&B.Z.locals;var Z=i(51900),L=(0,Z.Z)(S,(function(){var t=this,e=t._self._c;return e("li",{staticClass:"template-picker__item"},[e("input",{staticClass:"radio",attrs:{id:t.id,type:"radio",name:"template-picker"},domProps:{checked:t.checked},on:{change:t.onCheck}}),t._v(" "),e("label",{staticClass:"template-picker__label",attrs:{for:t.id}},[e("div",{staticClass:"template-picker__preview",class:t.failedPreview?"template-picker__preview--failed":""},[e("img",{staticClass:"template-picker__image",attrs:{src:t.realPreviewUrl,alt:"",draggable:"false"},on:{error:t.onFailure}})]),t._v(" "),e("span",{staticClass:"template-picker__title"},[t._v("\n\t\t\t"+t._s(t.nameWithoutExt)+"\n\t\t")])])])}),[],!1,null,"440aea22",null).exports,R=i(25108);function V(t,e,n,i,r,a,o){try{var s=t[a](o),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}function M(t){return function(){var e=this,n=arguments;return new Promise((function(i,r){var a=t.apply(e,n);function o(t){V(a,i,r,o,s,"next",t)}function s(t){V(a,i,r,o,s,"throw",t)}o(void 0)}))}}var Q={name:"TemplatePicker",components:{NcEmptyContent:m(),NcModal:h(),TemplatePreview:L},props:{logger:{type:Object,required:!0}},data:function(){return{checked:-1,loading:!1,name:null,opened:!1,provider:null}},computed:{nameWithoutExt:function(){return this.name.indexOf(".")>-1?this.name.split(".").slice(0,-1).join("."):this.name},emptyTemplate:function(){var e,n;return{basename:t("files","Blank"),fileid:-1,filename:this.t("files","Blank"),hasPreview:!1,mime:(null===(e=this.provider)||void 0===e?void 0:e.mimetypes[0])||(null===(n=this.provider)||void 0===n?void 0:n.mimetypes)}},selectedTemplate:function(){var t=this;return this.provider.templates.find((function(e){return e.fileid===t.checked}))},style:function(){return{"--margin":"8px","--width":"160px","--border":"2px","--fullwidth":"180px","--height":this.provider.ratio?Math.round(160/this.provider.ratio)+"px":null}}},methods:{open:function(t,e){var n=this;return M(regeneratorRuntime.mark((function i(){var r,a;return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return n.checked=n.emptyTemplate.fileid,n.name=t,n.provider=e,i.next=5,y();case 5:if(r=i.sent,null!==(a=r.find((function(t){return t.app===e.app&&t.label===e.label})))){i.next=9;break}throw new Error("Failed to match provider in results");case 9:if(n.provider=a,0!==a.templates.length){i.next=13;break}return n.onSubmit(),i.abrupt("return");case 13:n.opened=!0;case 14:case"end":return i.stop()}}),i)})))()},close:function(){this.checked=this.emptyTemplate.fileid,this.loading=!1,this.name=null,this.opened=!1,this.provider=null},onCheck:function(t){this.checked=t},onSubmit:function(){var t=this;return M(regeneratorRuntime.mark((function e(){var n,i,r,a,o,s,l,u,p,v,m,g,h;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t.loading=!0,a=c(),o=null===(n=OCA)||void 0===n||null===(i=n.Files)||void 0===i||null===(r=i.App)||void 0===r?void 0:r.currentFileList,t.nameWithoutExt===t.name&&(t.logger.debug("Fixed invalid filename",{name:t.name,extension:null===(s=t.provider)||void 0===s?void 0:s.extension}),t.name=t.name+(null===(l=t.provider)||void 0===l?void 0:l.extension)),e.prev=4,e.next=7,w((0,d.normalize)("".concat(a,"/").concat(t.name)),null===(u=t.selectedTemplate)||void 0===u?void 0:u.filename,null===(p=t.selectedTemplate)||void 0===p?void 0:p.templateType);case 7:return v=e.sent,t.logger.debug("Created new file",v),e.next=11,null==o?void 0:o.addAndFetchFileInfo(t.name).then((function(t,e){return e}));case 11:m=e.sent,g=new OCA.Files.FileInfoModel(m,{filesClient:null==o?void 0:o.filesClient}),(h=OCA.Files.fileActions.getDefaultFileAction(v.mime,"file",OC.PERMISSION_ALL))&&h.action(v.basename,{$file:null==o?void 0:o.findFileEl(t.name),dir:a,fileList:o,fileActions:null==o?void 0:o.fileActions,fileInfoModel:g}),t.close(),e.next=23;break;case 18:e.prev=18,e.t0=e.catch(4),t.logger.error("Error while creating the new file from template"),R.error(e.t0),(0,f.x2)(t.t("files","Unable to create new file from template"));case 23:return e.prev=23,t.loading=!1,e.finish(23);case 26:case"end":return e.stop()}}),e,null,[[4,18,23,26]])})))()}}},W=Q,z=i(74502),G={};G.styleTagTransform=D(),G.setAttributes=T(),G.insert=E().bind(null,"head"),G.domAPI=P(),G.insertStyleElement=I(),x()(z.Z,G),z.Z&&z.Z.locals&&z.Z.locals;var $=(0,Z.Z)(W,(function(){var t=this,e=t._self._c;return t.opened?e("NcModal",{staticClass:"templates-picker",attrs:{"clear-view-delay":-1,size:"normal"},on:{close:t.close}},[e("form",{staticClass:"templates-picker__form",style:t.style,on:{submit:function(e){return e.preventDefault(),e.stopPropagation(),t.onSubmit.apply(null,arguments)}}},[e("h2",[t._v(t._s(t.t("files","Pick a template for {name}",{name:t.nameWithoutExt})))]),t._v(" "),e("ul",{staticClass:"templates-picker__list"},[e("TemplatePreview",t._b({attrs:{checked:t.checked===t.emptyTemplate.fileid},on:{check:t.onCheck}},"TemplatePreview",t.emptyTemplate,!1)),t._v(" "),t._l(t.provider.templates,(function(n){return e("TemplatePreview",t._b({key:n.fileid,attrs:{checked:t.checked===n.fileid,ratio:t.provider.ratio},on:{check:t.onCheck}},"TemplatePreview",n,!1))}))],2),t._v(" "),e("div",{staticClass:"templates-picker__buttons"},[e("button",{on:{click:t.close}},[t._v("\n\t\t\t\t"+t._s(t.t("files","Cancel"))+"\n\t\t\t")]),t._v(" "),e("input",{staticClass:"primary",attrs:{type:"submit","aria-label":t.t("files","Create a new file with the selected template")},domProps:{value:t.t("files","Create")}})])]),t._v(" "),t.loading?e("NcEmptyContent",{staticClass:"templates-picker__loading",attrs:{icon:"icon-loading"}},[t._v("\n\t\t"+t._s(t.t("files","Creating file"))+"\n\t")]):t._e()],1):t._e()}),[],!1,null,"55dd9121",null),Y=$.exports;function H(t,e,n,i,r,a,o){try{var s=t[a](o),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}var K=(0,r.IY)().setApp("files").detectUser().build();p.ZP.mixin({methods:{t:o.Iu,n:o.uN}});var J=document.createElement("div");J.id="template-picker",document.body.appendChild(J);var X=(0,a.j)("files","templates",[]),tt=(0,a.j)("files","templates_path",!1);K.debug("Templates providers",X),K.debug("Templates folder",{templatesPath:tt});var et=new(p.ZP.extend(Y))({name:"TemplatePicker",propsData:{logger:K}});et.$mount("#template-picker"),window.addEventListener("DOMContentLoaded",(function(){if(!tt){K.debug("Templates folder not initialized");var t={attach:function(t){t.addMenuEntry({id:"template-init",displayName:(0,o.Iu)("files","Set up templates folder"),templateName:(0,o.Iu)("files","Templates"),iconClass:"icon-template-add",fileType:"file",actionHandler:function(e){it(e),t.removeMenuEntry("template-init")}})}};OC.Plugins.register("OCA.Files.NewFileMenu",t)}})),X.forEach((function(t,e){var n={attach:function(n){var i=n.fileList;"files"!==i.id&&"files.public"!==i.id||n.addMenuEntry({id:"template-new-".concat(t.app,"-").concat(e),displayName:t.label,templateName:t.label+t.extension,iconClass:t.iconClass||"icon-file",fileType:"file",actionHandler:function(e){et.open(e,t)}})}};OC.Plugins.register("OCA.Files.NewFileMenu",n)}));var nt,it=function(){var t,e=(t=regeneratorRuntime.mark((function t(e){var n,i;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=(c()+"/".concat(e)).replace("//","/"),t.prev=1,K.debug("Initializing the templates directory",{templatePath:n}),t.next=5,u.default.post((0,s.generateOcsUrl)("apps/files/api/v1/templates/path"),{templatePath:n,copySystemTemplates:!0});case 5:i=t.sent,OCA.Files.App.currentFileList.changeDirectory(n,!0,!0),X=i.data.ocs.data.templates,tt=i.data.ocs.data.template_path,t.next=15;break;case 11:t.prev=11,t.t0=t.catch(1),K.error("Unable to initialize the templates directory"),(0,f.x2)((0,o.Iu)("files","Unable to initialize the templates directory"));case 15:case"end":return t.stop()}}),t,null,[[1,11]])})),function(){var e=this,n=arguments;return new Promise((function(i,r){var a=t.apply(e,n);function o(t){H(a,i,r,o,s,"next",t)}function s(t){H(a,i,r,o,s,"throw",t)}o(void 0)}))});return function(t){return e.apply(this,arguments)}}(),rt=i(78595);nt={attach:function(t){var e=this;(0,rt.Ld)("nextcloud:unified-search.search",(function(e){var n=e.query;t.setFilter(n)})),(0,rt.Ld)("nextcloud:unified-search.reset",(function(){e.query=null,t.setFilter("")}))}},window.OC.Plugins.register("OCA.Files.FileList",nt);var at=(0,r.IY)().setApp("files").detectUser().build();function ot(t){return ot="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ot(t)}function st(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function lt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?st(Object(n),!0).forEach((function(e){ct(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):st(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function ct(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==ot(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==ot(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===ot(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var ut=function(t){var e=t.id,n=t.name,i=t.order,r=t.icon,a=t.parent,o=t.classes,s=void 0===o?"":o,l=t.expanded,c=t.params;OCP.Files.Navigation.register({id:e,name:n,order:i,params:c,parent:a,expanded:!0===l,iconClass:r?"icon-".concat(r):"nav-icon-"+e,legacy:!0,sticky:s.includes("pinned")})},pt=i(41487),dt=i.n(pt);function ft(t){return ft="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ft(t)}function vt(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,gt(i.key),i)}}function mt(t,e,n){return(e=gt(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function gt(t){var e=function(t,e){if("object"!==ft(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==ft(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===ft(e)?e:String(e)}var ht=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),mt(this,"_views",[]),mt(this,"_currentView",null),at.debug("Navigation service initialized")}var e,n;return e=t,(n=[{key:"register",value:function(t){try{bt(t),At(t,this._views)}catch(e){throw e instanceof Error&&at.error(e.message,{view:t}),e}t.legacy&&at.warn("Legacy view detected, please migrate to Vue"),t.iconClass&&(t.legacy=!0),this._views.push(t)}},{key:"views",get:function(){return this._views}},{key:"setActive",value:function(t){this._currentView=t}},{key:"active",get:function(){return this._currentView}}])&&vt(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),t}(),At=function(t,e){if(e.find((function(e){return e.id===t.id})))throw new Error("Navigation id ".concat(t.id," is already registered"));return!0},bt=function(t){if(!t.id||"string"!=typeof t.id)throw new Error("Navigation id is required and must be a string");if(!t.name||"string"!=typeof t.name)throw new Error("Navigation name is required and must be a string");if(!t.legacy){if(!t.getFiles||"function"!=typeof t.getFiles)throw new Error("Navigation getFiles is required and must be a function");if(!t.icon||"string"!=typeof t.icon||!dt()(t.icon))throw new Error("Navigation icon is required and must be a valid svg string")}if(!("order"in t)||"number"!=typeof t.order)throw new Error("Navigation order is required and must be a number");if(t.columns&&t.columns.forEach(yt),t.emptyView&&"function"!=typeof t.emptyView)throw new Error("Navigation emptyView must be a function");if(t.parent&&"string"!=typeof t.parent)throw new Error("Navigation parent must be a string");if("sticky"in t&&"boolean"!=typeof t.sticky)throw new Error("Navigation sticky must be a boolean");if("expanded"in t&&"boolean"!=typeof t.expanded)throw new Error("Navigation expanded must be a boolean");return!0},yt=function(t){if(!t.id||"string"!=typeof t.id)throw new Error("Column id is required");if(!t.title||"string"!=typeof t.title)throw new Error("Column title is required");if(!t.property||"string"!=typeof t.property)throw new Error("Column property is required");if(t.sortFunction&&"function"!=typeof t.sortFunction)throw new Error("Column sortFunction must be a function");if(t.summary&&"function"!=typeof t.summary)throw new Error("Column summary must be a function");return!0},wt=i(57638),Ct=i(55209),_t=i.n(Ct),St=i(14032),kt=i.n(St),xt=i(91770),Ot=i(28615),Pt=i(74184),jt=i(48959),Et=i.n(jt);function Nt(t,e,n,i,r,a,o){try{var s=t[a](o),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}function Tt(t){return function(){var e=this,n=arguments;return new Promise((function(i,r){var a=t.apply(e,n);function o(t){Nt(a,i,r,o,s,"next",t)}function s(t){Nt(a,i,r,o,s,"throw",t)}o(void 0)}))}}var Ft={name:"NavigationQuota",components:{ChartPie:Pt.Z,NcAppNavigationItem:kt(),NcProgressBar:Et()},data:function(){return{loadingStorageStats:!1,storageStats:(0,a.j)("files","storageStats",null)}},computed:{storageStatsTitle:function(){var t,e,n,i=(0,xt.sS)(null===(t=this.storageStats)||void 0===t?void 0:t.used),r=(0,xt.sS)(null===(e=this.storageStats)||void 0===e?void 0:e.quota);return(null===(n=this.storageStats)||void 0===n?void 0:n.quota)<0?this.t("files","{usedQuotaByte} used",{usedQuotaByte:i}):this.t("files","{used} of {quota} used",{used:i,quota:r})},storageStatsTooltip:function(){return this.storageStats.relative?this.t("files","{relative}% used",this.storageStats):""}},beforeMount:function(){setInterval(this.throttleUpdateStorageStats,6e4),(0,rt.Ld)("files:file:created",this.throttleUpdateStorageStats),(0,rt.Ld)("files:file:deleted",this.throttleUpdateStorageStats),(0,rt.Ld)("files:file:moved",this.throttleUpdateStorageStats),(0,rt.Ld)("files:file:updated",this.throttleUpdateStorageStats),(0,rt.Ld)("files:folder:created",this.throttleUpdateStorageStats),(0,rt.Ld)("files:folder:deleted",this.throttleUpdateStorageStats),(0,rt.Ld)("files:folder:moved",this.throttleUpdateStorageStats),(0,rt.Ld)("files:folder:updated",this.throttleUpdateStorageStats)},methods:{debounceUpdateStorageStats:(0,Ot.D)(200,(function(t){this.updateStorageStats(t)})),throttleUpdateStorageStats:(0,Ot.P)(1e3,(function(t){this.updateStorageStats(t)})),updateStorageStats:function(){var e=arguments,n=this;return Tt(regeneratorRuntime.mark((function i(){var r,a,o;return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:if(r=e.length>0&&void 0!==e[0]?e[0]:null,!n.loadingStorageStats){i.next=3;break}return i.abrupt("return");case 3:return n.loadingStorageStats=!0,i.prev=4,i.next=7,u.default.get((0,s.generateUrl)("/apps/files/api/v1/stats"));case 7:if(null!=(o=i.sent)&&null!==(a=o.data)&&void 0!==a&&a.data){i.next=10;break}throw new Error("Invalid storage stats");case 10:n.storageStats=o.data.data,i.next=17;break;case 13:i.prev=13,i.t0=i.catch(4),at.error("Could not refresh storage stats",{error:i.t0}),r&&(0,f.x2)(t("files","Could not refresh storage stats"));case 17:return i.prev=17,n.loadingStorageStats=!1,i.finish(17);case 20:case"end":return i.stop()}}),i,null,[[4,13,17,20]])})))()},t:o.Iu}},It=Ft,Ut=i(358),Dt={};Dt.styleTagTransform=D(),Dt.setAttributes=T(),Dt.insert=E().bind(null,"head"),Dt.domAPI=P(),Dt.insertStyleElement=I(),x()(Ut.Z,Dt),Ut.Z&&Ut.Z.locals&&Ut.Z.locals;var Bt=(0,Z.Z)(It,(function(){var t=this,e=t._self._c;return t.storageStats?e("NcAppNavigationItem",{staticClass:"app-navigation-entry__settings-quota",class:{"app-navigation-entry__settings-quota--not-unlimited":t.storageStats.quota>=0},attrs:{"aria-label":t.t("files","Storage informations"),loading:t.loadingStorageStats,name:t.storageStatsTitle,title:t.storageStatsTooltip,"data-cy-files-navigation-settings-quota":""},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.debounceUpdateStorageStats.apply(null,arguments)}}},[e("ChartPie",{attrs:{slot:"icon",size:20},slot:"icon"}),t._v(" "),t.storageStats.quota>=0?e("NcProgressBar",{attrs:{slot:"extra",error:t.storageStats.relative>80,value:Math.min(t.storageStats.relative,100)},slot:"extra"}):t._e()],1):t._e()}),[],!1,null,"26c061ec",null),qt=Bt.exports,Zt=i(68988),Lt=i.n(Zt),Rt=i(16809),Vt=i.n(Rt),Mt=i(20571),Qt=i.n(Mt),Wt=i(70386),zt=i(36029),Gt=i.n(zt),$t={name:"Setting",props:{el:{type:Function,required:!0}},mounted:function(){this.$el.appendChild(this.el())}},Yt=(0,Z.Z)($t,(function(){return(0,this._self._c)("div")}),[],!1,null,null,null).exports;function Ht(t){return Ht="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ht(t)}function Kt(t,e,n,i,r,a,o){try{var s=t[a](o),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}function Jt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function Xt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Jt(Object(n),!0).forEach((function(e){te(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Jt(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function te(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==Ht(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==Ht(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===Ht(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var ee=(0,a.j)("files","config",{show_hidden:!1,crop_image_previews:!0}),ne={name:"Settings",components:{Clipboard:Wt.Z,NcAppSettingsDialog:Lt(),NcAppSettingsSection:Vt(),NcCheckboxRadioSwitch:Qt(),NcInputField:Gt(),Setting:Yt},props:{open:{type:Boolean,default:!1}},data:function(){var t,e,n,i;return Xt(Xt({},ee),{},{settings:(null===(t=window.OCA)||void 0===t||null===(e=t.Files)||void 0===e||null===(n=e.Settings)||void 0===n?void 0:n.settings)||[],webdavUrl:(0,s.generateRemoteUrl)("dav/files/"+encodeURIComponent(null===(i=(0,l.ts)())||void 0===i?void 0:i.uid)),webdavDocs:"https://docs.nextcloud.com/server/stable/go.php?to=user-webdav",appPasswordUrl:(0,s.generateUrl)("/settings/user/security#generate-app-token-section"),webdavUrlCopied:!1})},beforeMount:function(){this.settings.forEach((function(t){return t.open()}))},beforeDestroy:function(){this.settings.forEach((function(t){return t.close()}))},methods:{onClose:function(){this.$emit("close")},setConfig:function(t,e){(0,rt.j8)("files:config:updated",{key:t,value:e}),u.default.post((0,s.generateUrl)("/apps/files/api/v1/config/"+t),{value:e})},copyCloudId:function(){var e,n=this;return(e=regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(document.querySelector("input#webdav-url-input").select(),navigator.clipboard){e.next=4;break}return(0,f.x2)(t("files","Clipboard is not available")),e.abrupt("return");case 4:return e.next=6,navigator.clipboard.writeText(n.webdavUrl);case 6:n.webdavUrlCopied=!0,(0,f.s$)(t("files","WebDAV URL copied to clipboard")),setTimeout((function(){n.webdavUrlCopied=!1}),5e3);case 9:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(i,r){var a=e.apply(t,n);function o(t){Kt(a,i,r,o,s,"next",t)}function s(t){Kt(a,i,r,o,s,"throw",t)}o(void 0)}))})()},t:o.Iu}},ie=ne,re=(0,Z.Z)(ie,(function(){var t=this,e=t._self._c;return e("NcAppSettingsDialog",{attrs:{open:t.open,"show-navigation":!0,title:t.t("files","Files settings")},on:{"update:open":t.onClose}},[e("NcAppSettingsSection",{attrs:{id:"settings",title:t.t("files","Files settings")}},[e("NcCheckboxRadioSwitch",{attrs:{checked:t.show_hidden},on:{"update:checked":[function(e){t.show_hidden=e},function(e){return t.setConfig("show_hidden",e)}]}},[t._v("\n\t\t\t"+t._s(t.t("files","Show hidden files"))+"\n\t\t")]),t._v(" "),e("NcCheckboxRadioSwitch",{attrs:{checked:t.crop_image_previews},on:{"update:checked":[function(e){t.crop_image_previews=e},function(e){return t.setConfig("crop_image_previews",e)}]}},[t._v("\n\t\t\t"+t._s(t.t("files","Crop image previews"))+"\n\t\t")])],1),t._v(" "),0!==t.settings.length?e("NcAppSettingsSection",{attrs:{id:"more-settings",title:t.t("files","Additional settings")}},[t._l(t.settings,(function(t){return[e("Setting",{key:t.name,attrs:{el:t.el}})]}))],2):t._e(),t._v(" "),e("NcAppSettingsSection",{attrs:{id:"webdav",title:t.t("files","WebDAV")}},[e("NcInputField",{attrs:{id:"webdav-url-input","show-trailing-button":!0,success:t.webdavUrlCopied,"trailing-button-label":t.t("files","Copy to clipboard"),value:t.webdavUrl,readonly:"readonly",type:"url"},on:{focus:function(t){return t.target.select()},"trailing-button-click":t.copyCloudId},scopedSlots:t._u([{key:"trailing-button-icon",fn:function(){return[e("Clipboard",{attrs:{size:20}})]},proxy:!0}])}),t._v(" "),e("em",[e("a",{attrs:{href:t.webdavDocs,target:"_blank",rel:"noreferrer noopener"}},[t._v("\n\t\t\t\t"+t._s(t.t("files","Use this address to access your Files via WebDAV"))+" ↗\n\t\t\t")])]),t._v(" "),e("br"),t._v(" "),e("em",[e("a",{attrs:{href:t.appPasswordUrl}},[t._v("\n\t\t\t\t"+t._s(t.t("files","If you have enabled 2FA, you must create and use a new app password by clicking here."))+"\n\t\t\t")])])],1)],1)}),[],!1,null,"9ad9e82a",null).exports;function ae(t){return ae="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ae(t)}function oe(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function se(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?oe(Object(n),!0).forEach((function(e){le(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):oe(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function le(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==ae(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==ae(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===ae(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function ce(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}var ue={name:"Navigation",components:{Cog:wt.default,NcAppNavigation:_t(),NcAppNavigationItem:kt(),SettingsModal:re,NavigationQuota:qt},props:{Navigation:{type:ht,required:!0}},data:function(){return{settingsOpened:!1}},computed:{currentViewId:function(){var t,e;return(null===(t=this.$route)||void 0===t||null===(e=t.params)||void 0===e?void 0:e.view)||"files"},currentView:function(){var t=this;return this.views.find((function(e){return e.id===t.currentViewId}))},views:function(){return this.Navigation.views},parentViews:function(){return this.views.filter((function(t){return!t.parent})).sort((function(t,e){return t.order-e.order}))},childViews:function(){return this.views.filter((function(t){return!!t.parent})).reduce((function(t,e){return t[e.parent]=[].concat(function(t){if(Array.isArray(t))return ce(t)}(n=t[e.parent]||[])||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(n)||function(t,e){if(t){if("string"==typeof t)return ce(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ce(t,e):void 0}}(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),[e]),t[e.parent].sort((function(t,e){return t.order-e.order})),t;var n}),{})}},watch:{currentView:function(t,e){at.debug("View changed",{id:t.id,view:t}),this.showView(t,e)}},beforeMount:function(){this.currentView&&(at.debug("Navigation mounted. Showing requested view",{view:this.currentView}),this.showView(this.currentView)),(0,rt.Ld)("files:legacy-navigation:changed",this.onLegacyNavigationChanged)},methods:{showView:function(t,e){var n,i,r,a,o;if(null===(n=window)||void 0===n||null===(i=n.OCA)||void 0===i||null===(r=i.Files)||void 0===r||null===(a=r.Sidebar)||void 0===a||null===(o=a.close)||void 0===o||o.call(a),t.legacy){var s=document.querySelector("#app-content #app-content-"+this.currentView.id+".viewcontainer");document.querySelectorAll("#app-content .viewcontainer").forEach((function(t){t.classList.add("hidden")})),s.classList.remove("hidden");var l=OC.Util.History.parseUrlQuery().dir,c=void 0===l?"/":l,u={itemId:t.id,dir:c};at.debug("Triggering legacy navigation event",u),window.jQuery(s).trigger(new window.jQuery.Event("show",u)),window.jQuery(s).trigger(new window.jQuery.Event("urlChanged",u))}this.Navigation.setActive(t),(0,rt.j8)("files:navigation:changed",t)},onLegacyNavigationChanged:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{id:"files"},e=t.id,n=this.Navigation.views.find((function(t){return t.id===e}));n&&n.legacy&&n.id!==this.currentView.id&&(this.$router.replace(se(se({},this.$route),{},{params:{view:n.id}})),this.Navigation.setActive(n),this.showView(n))},onToggleExpand:function(t){t.expanded=!t.expanded,u.default.post((0,s.generateUrl)("/apps/files/api/v1/toggleShowFolder/".concat(t.id)),{show:t.expanded})},generateToNavigation:function(t){if(t.params){var e=t.params,n=e.dir,i=e.fileid;return{name:"filelist",params:t.params,query:{dir:n,fileid:i}}}return{name:"filelist",params:{view:t.id}}},openSettings:function(){this.settingsOpened=!0},onSettingsClose:function(){this.settingsOpened=!1},t:o.Iu}},pe=ue,de=i(50375),fe={};fe.styleTagTransform=D(),fe.setAttributes=T(),fe.insert=E().bind(null,"head"),fe.domAPI=P(),fe.insertStyleElement=I(),x()(de.Z,fe),de.Z&&de.Z.locals&&de.Z.locals;var ve=(0,Z.Z)(pe,(function(){var t=this,e=t._self._c;return e("NcAppNavigation",{attrs:{"data-cy-files-navigation":""},scopedSlots:t._u([{key:"list",fn:function(){return t._l(t.parentViews,(function(n){return e("NcAppNavigationItem",{key:n.id,attrs:{"allow-collapse":!0,"data-cy-files-navigation-item":n.id,icon:n.iconClass,open:n.expanded,pinned:n.sticky,title:n.name,to:t.generateToNavigation(n)},on:{"update:open":function(e){return t.onToggleExpand(n)}}},t._l(t.childViews[n.id],(function(n){return e("NcAppNavigationItem",{key:n.id,attrs:{"data-cy-files-navigation-item":n.id,exact:!0,icon:n.iconClass,title:n.name,to:t.generateToNavigation(n)}})})),1)}))},proxy:!0},{key:"footer",fn:function(){return[e("ul",{staticClass:"app-navigation-entry__settings"},[e("NavigationQuota"),t._v(" "),e("NcAppNavigationItem",{attrs:{"aria-label":t.t("files","Open the files app settings"),title:t.t("files","Files settings"),"data-cy-files-navigation-settings-button":""},on:{click:function(e){return e.preventDefault(),e.stopPropagation(),t.openSettings.apply(null,arguments)}}},[e("Cog",{attrs:{slot:"icon",size:20},slot:"icon"})],1)],1)]},proxy:!0}])},[t._v(" "),t._v(" "),e("SettingsModal",{attrs:{open:t.settingsOpened,"data-cy-files-navigation-settings":""},on:{close:t.onSettingsClose}})],1)}),[],!1,null,"83bb0f06",null),me=ve.exports,ge=i(25108);function he(t){return he="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},he(t)}function Ae(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,be(i.key),i)}}function be(t){var e=function(t,e){if("object"!==he(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==he(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===he(e)?e:String(e)}var ye=function(){function t(){var e,n,i;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),e=this,i=void 0,(n=be(n="_settings"))in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,this._settings=[],ge.debug("OCA.Files.Settings initialized")}var e,n;return e=t,(n=[{key:"register",value:function(t){return this._settings.filter((function(e){return e.name===t.name})).length>0?(ge.error("A setting with the same name is already registered"),!1):(this._settings.push(t),!0)}},{key:"settings",get:function(){return this._settings}}])&&Ae(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),t}();function we(t){return we="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},we(t)}function Ce(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,Se(i.key),i)}}function _e(t,e,n){return(e=Se(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Se(t){var e=function(t,e){if("object"!==we(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==we(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===we(e)?e:String(e)}var ke=function(){function t(e,n){var i=n.el,r=n.open,a=n.close;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),_e(this,"_close",void 0),_e(this,"_el",void 0),_e(this,"_name",void 0),_e(this,"_open",void 0),this._name=e,this._el=i,this._open=r,this._close=a,"function"!=typeof this._open&&(this._open=function(){}),"function"!=typeof this._close&&(this._close=function(){})}var e,n;return e=t,(n=[{key:"name",get:function(){return this._name}},{key:"el",get:function(){return this._el}},{key:"open",get:function(){return this._open}},{key:"close",get:function(){return this._close}}])&&Ce(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),t}(),xe=i(78345),Oe=i(17563);p.ZP.use(xe.Z);var Pe,je,Ee=new xe.Z({mode:"history",base:(0,s.generateUrl)("/apps/files",""),linkActiveClass:"active",routes:[{path:"/",alias:"/files"},{path:"/:view/:fileid?",name:"filelist",props:!0}],stringifyQuery:function(t){var e=(0,Oe.stringify)(t).replace(/%2F/gim,"/");return e?"?"+e:""}});window.OCA.Files=null!==(Pe=window.OCA.Files)&&void 0!==Pe?Pe:{},window.OCP.Files=null!==(je=window.OCP.Files)&&void 0!==je?je:{};var Ne=new ht;Object.assign(window.OCP.Files,{Navigation:Ne});var Te,Fe=new ye;Object.assign(window.OCA.Files,{Settings:Fe}),Object.assign(window.OCA.Files.Settings,{Setting:ke}),new(p.ZP.extend(me))({name:"FilesNavigationRoot",propsData:{Navigation:Ne},router:Ee}).$mount("#app-navigation-files"),(Te=Object.values((0,a.j)("files","navigation",{}))).length>0&&(at.debug("Legacy files views detected. Processing...",Te),Te.forEach((function(t){ut(t),t.sublist&&t.sublist.forEach((function(e){return ut(lt(lt({},e),{},{parent:t.id}))}))})))},358:function(t,e,n){var i=n(87537),r=n.n(i),a=n(23645),o=n.n(a)()(r());o.push([t.id,".app-navigation-entry__settings-quota--not-unlimited[data-v-26c061ec] .app-navigation-entry__title{margin-top:-4px}.app-navigation-entry__settings-quota progress[data-v-26c061ec]{position:absolute;bottom:10px;margin-left:44px;width:calc(100% - 44px - 22px)}","",{version:3,sources:["webpack://./apps/files/src/components/NavigationQuota.vue"],names:[],mappings:"AAIC,mGACC,eAAA,CAGD,gEACC,iBAAA,CACA,WAAA,CACA,gBAAA,CACA,8BAAA",sourcesContent:["\n// User storage stats display\n.app-navigation-entry__settings-quota {\n\t// Align title with progress and icon\n\t&--not-unlimited::v-deep .app-navigation-entry__title {\n\t\tmargin-top: -4px;\n\t}\n\n\tprogress {\n\t\tposition: absolute;\n\t\tbottom: 10px;\n\t\tmargin-left: 44px;\n\t\twidth: calc(100% - 44px - 22px);\n\t}\n}\n"],sourceRoot:""}]),e.Z=o},87027:function(t,e,n){var i=n(87537),r=n.n(i),a=n(23645),o=n.n(a)()(r());o.push([t.id,".template-picker__item[data-v-440aea22]{display:flex}.template-picker__label[data-v-440aea22]{display:flex;align-items:center;flex:1 1;flex-direction:column}.template-picker__label[data-v-440aea22],.template-picker__label *[data-v-440aea22]{cursor:pointer;user-select:none}.template-picker__label[data-v-440aea22]::before{display:none !important}.template-picker__preview[data-v-440aea22]{display:block;overflow:hidden;flex:1 1;width:var(--width);min-height:var(--height);max-height:var(--height);padding:0;border:var(--border) solid var(--color-border);border-radius:var(--border-radius-large)}input:checked+label>.template-picker__preview[data-v-440aea22]{border-color:var(--color-primary)}.template-picker__preview--failed[data-v-440aea22]{display:flex}.template-picker__image[data-v-440aea22]{max-width:100%;background-color:var(--color-main-background);object-fit:cover}.template-picker__preview--failed .template-picker__image[data-v-440aea22]{width:calc(var(--margin)*8);margin:auto;background-color:rgba(0,0,0,0) !important;object-fit:initial}.template-picker__title[data-v-440aea22]{overflow:hidden;max-width:calc(var(--width) + 4px);padding:var(--margin);white-space:nowrap;text-overflow:ellipsis}","",{version:3,sources:["webpack://./apps/files/src/components/TemplatePreview.vue"],names:[],mappings:"AAGC,wCACC,YAAA,CAGD,yCACC,YAAA,CAEA,kBAAA,CACA,QAAA,CACA,qBAAA,CAEA,oFACC,cAAA,CACA,gBAAA,CAGD,iDACC,uBAAA,CAIF,2CACC,aAAA,CACA,eAAA,CAEA,QAAA,CACA,kBAAA,CACA,wBAAA,CACA,wBAAA,CACA,SAAA,CACA,8CAAA,CACA,wCAAA,CAEA,+DACC,iCAAA,CAGD,mDAEC,YAAA,CAIF,yCACC,cAAA,CACA,6CAAA,CAEA,gBAAA,CAID,2EACC,2BAAA,CAEA,WAAA,CACA,yCAAA,CAEA,kBAAA,CAGD,yCACC,eAAA,CAEA,kCAAA,CACA,qBAAA,CACA,kBAAA,CACA,sBAAA",sourcesContent:["\n\n.template-picker {\n\t&__item {\n\t\tdisplay: flex;\n\t}\n\n\t&__label {\n\t\tdisplay: flex;\n\t\t// Align in the middle of the grid\n\t\talign-items: center;\n\t\tflex: 1 1;\n\t\tflex-direction: column;\n\n\t\t&, * {\n\t\t\tcursor: pointer;\n\t\t\tuser-select: none;\n\t\t}\n\n\t\t&::before {\n\t\t\tdisplay: none !important;\n\t\t}\n\t}\n\n\t&__preview {\n\t\tdisplay: block;\n\t\toverflow: hidden;\n\t\t// Stretch so all entries are the same width\n\t\tflex: 1 1;\n\t\twidth: var(--width);\n\t\tmin-height: var(--height);\n\t\tmax-height: var(--height);\n\t\tpadding: 0;\n\t\tborder: var(--border) solid var(--color-border);\n\t\tborder-radius: var(--border-radius-large);\n\n\t\tinput:checked + label > & {\n\t\t\tborder-color: var(--color-primary);\n\t\t}\n\n\t\t&--failed {\n\t\t\t// Make sure to properly center fallback icon\n\t\t\tdisplay: flex;\n\t\t}\n\t}\n\n\t&__image {\n\t\tmax-width: 100%;\n\t\tbackground-color: var(--color-main-background);\n\n\t\tobject-fit: cover;\n\t}\n\n\t// Failed preview, fallback to mime icon\n\t&__preview--failed &__image {\n\t\twidth: calc(var(--margin) * 8);\n\t\t// Center mime icon\n\t\tmargin: auto;\n\t\tbackground-color: transparent !important;\n\n\t\tobject-fit: initial;\n\t}\n\n\t&__title {\n\t\toverflow: hidden;\n\t\t// also count preview border\n\t\tmax-width: calc(var(--width) + 2*2px);\n\t\tpadding: var(--margin);\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\n"],sourceRoot:""}]),e.Z=o},50375:function(t,e,n){var i=n(87537),r=n.n(i),a=n(23645),o=n.n(a)()(r());o.push([t.id,".app-navigation[data-v-83bb0f06] .app-navigation-entry-icon{background-repeat:no-repeat;background-position:center}.app-navigation>ul.app-navigation__list[data-v-83bb0f06]{padding-bottom:var(--default-grid-baseline, 4px)}.app-navigation-entry__settings[data-v-83bb0f06]{height:auto !important;overflow:hidden !important;padding-top:0 !important;flex:0 0 auto}","",{version:3,sources:["webpack://./apps/files/src/views/Navigation.vue"],names:[],mappings:"AAEA,4DACC,2BAAA,CACA,0BAAA,CAGD,yDAEC,gDAAA,CAGD,iDACC,sBAAA,CACA,0BAAA,CACA,wBAAA,CAEA,aAAA",sourcesContent:["\n// TODO: remove when https://github.com/nextcloud/nextcloud-vue/pull/3539 is in\n.app-navigation::v-deep .app-navigation-entry-icon {\n\tbackground-repeat: no-repeat;\n\tbackground-position: center;\n}\n\n.app-navigation > ul.app-navigation__list {\n\t// Use flex gap value for more elegant spacing\n\tpadding-bottom: var(--default-grid-baseline, 4px);\n}\n\n.app-navigation-entry__settings {\n\theight: auto !important;\n\toverflow: hidden !important;\n\tpadding-top: 0 !important;\n\t// Prevent shrinking or growing\n\tflex: 0 0 auto;\n}\n"],sourceRoot:""}]),e.Z=o},74502:function(t,e,n){var i=n(87537),r=n.n(i),a=n(23645),o=n.n(a)()(r());o.push([t.id,".templates-picker__form[data-v-55dd9121]{padding:calc(var(--margin)*2);padding-bottom:0}.templates-picker__form h2[data-v-55dd9121]{text-align:center;font-weight:bold;margin:var(--margin) 0 calc(var(--margin)*2)}.templates-picker__list[data-v-55dd9121]{display:grid;grid-gap:calc(var(--margin)*2);grid-auto-columns:1fr;max-width:calc(var(--fullwidth)*6);grid-template-columns:repeat(auto-fit, var(--fullwidth));grid-auto-rows:1fr;justify-content:center}.templates-picker__buttons[data-v-55dd9121]{display:flex;justify-content:space-between;padding:calc(var(--margin)*2) var(--margin);position:sticky;bottom:0;background-image:linear-gradient(0, var(--gradient-main-background))}.templates-picker__buttons button[data-v-55dd9121],.templates-picker__buttons input[type=submit][data-v-55dd9121]{height:44px}.templates-picker[data-v-55dd9121] .modal-container{position:relative}.templates-picker__loading[data-v-55dd9121]{position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;margin:0;background-color:var(--color-main-background-translucent)}","",{version:3,sources:["webpack://./apps/files/src/views/TemplatePicker.vue"],names:[],mappings:"AAEC,yCACC,6BAAA,CAEA,gBAAA,CAEA,4CACC,iBAAA,CACA,gBAAA,CACA,4CAAA,CAIF,yCACC,YAAA,CACA,8BAAA,CACA,qBAAA,CAEA,kCAAA,CACA,wDAAA,CAEA,kBAAA,CAEA,sBAAA,CAGD,4CACC,YAAA,CACA,6BAAA,CACA,2CAAA,CACA,eAAA,CACA,QAAA,CACA,oEAAA,CAEA,kHACC,WAAA,CAKF,oDACC,iBAAA,CAGD,4CACC,iBAAA,CACA,KAAA,CACA,MAAA,CACA,sBAAA,CACA,UAAA,CACA,WAAA,CACA,QAAA,CACA,yDAAA",sourcesContent:["\n.templates-picker {\n\t&__form {\n\t\tpadding: calc(var(--margin) * 2);\n\t\t// Will be handled by the buttons\n\t\tpadding-bottom: 0;\n\n\t\th2 {\n\t\t\ttext-align: center;\n\t\t\tfont-weight: bold;\n\t\t\tmargin: var(--margin) 0 calc(var(--margin) * 2);\n\t\t}\n\t}\n\n\t&__list {\n\t\tdisplay: grid;\n\t\tgrid-gap: calc(var(--margin) * 2);\n\t\tgrid-auto-columns: 1fr;\n\t\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\n\t\tmax-width: calc(var(--fullwidth) * 6);\n\t\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\n\t\t// Make sure all rows are the same height\n\t\tgrid-auto-rows: 1fr;\n\t\t// Center the columns set\n\t\tjustify-content: center;\n\t}\n\n\t&__buttons {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\tpadding: calc(var(--margin) * 2) var(--margin);\n\t\tposition: sticky;\n\t\tbottom: 0;\n\t\tbackground-image: linear-gradient(0, var(--gradient-main-background));\n\n\t\tbutton, input[type='submit'] {\n\t\t\theight: 44px;\n\t\t}\n\t}\n\n\t// Make sure we're relative for the loading emptycontent on top\n\t::v-deep .modal-container {\n\t\tposition: relative;\n\t}\n\n\t&__loading {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tmargin: 0;\n\t\tbackground-color: var(--color-main-background-translucent);\n\t}\n}\n\n"],sourceRoot:""}]),e.Z=o}},i={};function r(t){var e=i[t];if(void 0!==e)return e.exports;var a=i[t]={id:t,loaded:!1,exports:{}};return n[t].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}r.m=n,e=[],r.O=function(t,n,i,a){if(!n){var o=1/0;for(u=0;u<e.length;u++){n=e[u][0],i=e[u][1],a=e[u][2];for(var s=!0,l=0;l<n.length;l++)(!1&a||o>=a)&&Object.keys(r.O).every((function(t){return r.O[t](n[l])}))?n.splice(l--,1):(s=!1,a<o&&(o=a));if(s){e.splice(u--,1);var c=i();void 0!==c&&(t=c)}}return t}a=a||0;for(var u=e.length;u>0&&e[u-1][2]>a;u--)e[u]=e[u-1];e[u]=[n,i,a]},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,{a:e}),e},r.d=function(t,e){for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},r.j=2181,function(){r.b=document.baseURI||self.location.href;var t={2181:0};r.O.j=function(e){return 0===t[e]};var e=function(e,n){var i,a,o=n[0],s=n[1],l=n[2],c=0;if(o.some((function(e){return 0!==t[e]}))){for(i in s)r.o(s,i)&&(r.m[i]=s[i]);if(l)var u=l(r)}for(e&&e(n);c<o.length;c++)a=o[c],r.o(t,a)&&t[a]&&t[a][0](),t[a]=0;return r.O(u)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))}(),r.nc=void 0;var a=r.O(void 0,[7874],(function(){return r(91320)}));a=r.O(a)}();
-//# sourceMappingURL=files-main.js.map?v=e2400fc70cb2b525fc36
\ No newline at end of file
+!function(){"use strict";var e,n={46724:function(e,n,i){var r=i(17499),a=i(79954),o=i(31352),s=i(79753),l=i(45994),c=function(){var t,e,n,i,r=(null===(t=OCA)||void 0===t||null===(e=t.Files)||void 0===e||null===(n=e.App)||void 0===n||null===(i=n.currentFileList)||void 0===i?void 0:i.dirInfo)||{path:"/",name:""};return"".concat(r.path,"/").concat(r.name).replace(/\/\//gi,"/")},u=i(4820),p=i(20144),d=i(62520),f=i(64024),v=i(93455),m=i.n(v),g=i(70110),h=i.n(g);function A(t,e,n,i,r,a,o){try{var s=t[a](o),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}function b(t){return function(){var e=this,n=arguments;return new Promise((function(i,r){var a=t.apply(e,n);function o(t){A(a,i,r,o,s,"next",t)}function s(t){A(a,i,r,o,s,"throw",t)}o(void 0)}))}}var y=function(){var t=b(regeneratorRuntime.mark((function t(){var e;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,u.default.get((0,s.generateOcsUrl)("apps/files/api/v1/templates"));case 2:return e=t.sent,t.abrupt("return",e.data.ocs.data);case 4:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),w=function(){var t=b(regeneratorRuntime.mark((function t(e,n,i){var r;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,u.default.post((0,s.generateOcsUrl)("apps/files/api/v1/templates/create"),{filePath:e,templatePath:n,templateType:i});case 2:return r=t.sent,t.abrupt("return",r.data.ocs.data);case 4:case"end":return t.stop()}}),t)})));return function(e,n,i){return t.apply(this,arguments)}}(),C=256,_={name:"TemplatePreview",inheritAttrs:!1,props:{basename:{type:String,required:!0},checked:{type:Boolean,default:!1},fileid:{type:[String,Number],required:!0},filename:{type:String,required:!0},previewUrl:{type:String,default:null},hasPreview:{type:Boolean,default:!0},mime:{type:String,required:!0},ratio:{type:Number,default:null}},data:function(){return{failedPreview:!1}},computed:{nameWithoutExt:function(){return this.basename.indexOf(".")>-1?this.basename.split(".").slice(0,-1).join("."):this.basename},id:function(){return"template-picker-".concat(this.fileid)},realPreviewUrl:function(){return this.failedPreview&&this.mimeIcon?this.mimeIcon:this.previewUrl?this.previewUrl:(0,l.ts)()?(0,s.generateUrl)("/core/preview?fileId=".concat(this.fileid,"&x=").concat(C,"&y=").concat(C,"&a=1")):(0,s.generateUrl)("/apps/files_sharing/publicpreview/".concat(document.getElementById("sharingToken")&&document.getElementById("sharingToken").value,"?fileId=").concat(this.fileid,"&file=").concat(function(t){var e=(t.startsWith("/")?t:"/".concat(t)).split("/"),n="";return e.forEach((function(t){""!==t&&(n+="/"+encodeURIComponent(t))})),n}(this.filename),"&x=").concat(C,"&y=").concat(C,"&a=1"))},mimeIcon:function(){return OC.MimeType.getIconUrl(this.mime)}},methods:{onCheck:function(){this.$emit("check",this.fileid)},onFailure:function(){this.failedPreview=!0}}},S=_,k=i(93379),x=i.n(k),O=i(7795),P=i.n(O),j=i(90569),E=i.n(j),N=i(3565),T=i.n(N),F=i(19216),I=i.n(F),U=i(44589),D=i.n(U),B=i(87027),Z={};Z.styleTagTransform=D(),Z.setAttributes=T(),Z.insert=E().bind(null,"head"),Z.domAPI=P(),Z.insertStyleElement=I(),x()(B.Z,Z),B.Z&&B.Z.locals&&B.Z.locals;var q=i(51900),R=(0,q.Z)(S,(function(){var t=this,e=t._self._c;return e("li",{staticClass:"template-picker__item"},[e("input",{staticClass:"radio",attrs:{id:t.id,type:"radio",name:"template-picker"},domProps:{checked:t.checked},on:{change:t.onCheck}}),t._v(" "),e("label",{staticClass:"template-picker__label",attrs:{for:t.id}},[e("div",{staticClass:"template-picker__preview",class:t.failedPreview?"template-picker__preview--failed":""},[e("img",{staticClass:"template-picker__image",attrs:{src:t.realPreviewUrl,alt:"",draggable:"false"},on:{error:t.onFailure}})]),t._v(" "),e("span",{staticClass:"template-picker__title"},[t._v("\n\t\t\t"+t._s(t.nameWithoutExt)+"\n\t\t")])])])}),[],!1,null,"440aea22",null).exports,L=i(25108);function V(t,e,n,i,r,a,o){try{var s=t[a](o),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}function M(t){return function(){var e=this,n=arguments;return new Promise((function(i,r){var a=t.apply(e,n);function o(t){V(a,i,r,o,s,"next",t)}function s(t){V(a,i,r,o,s,"throw",t)}o(void 0)}))}}var Q={name:"TemplatePicker",components:{NcEmptyContent:m(),NcModal:h(),TemplatePreview:R},props:{logger:{type:Object,required:!0}},data:function(){return{checked:-1,loading:!1,name:null,opened:!1,provider:null}},computed:{nameWithoutExt:function(){return this.name.indexOf(".")>-1?this.name.split(".").slice(0,-1).join("."):this.name},emptyTemplate:function(){var e,n;return{basename:t("files","Blank"),fileid:-1,filename:this.t("files","Blank"),hasPreview:!1,mime:(null===(e=this.provider)||void 0===e?void 0:e.mimetypes[0])||(null===(n=this.provider)||void 0===n?void 0:n.mimetypes)}},selectedTemplate:function(){var t=this;return this.provider.templates.find((function(e){return e.fileid===t.checked}))},style:function(){return{"--margin":"8px","--width":"160px","--border":"2px","--fullwidth":"180px","--height":this.provider.ratio?Math.round(160/this.provider.ratio)+"px":null}}},methods:{open:function(t,e){var n=this;return M(regeneratorRuntime.mark((function i(){var r,a;return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return n.checked=n.emptyTemplate.fileid,n.name=t,n.provider=e,i.next=5,y();case 5:if(r=i.sent,null!==(a=r.find((function(t){return t.app===e.app&&t.label===e.label})))){i.next=9;break}throw new Error("Failed to match provider in results");case 9:if(n.provider=a,0!==a.templates.length){i.next=13;break}return n.onSubmit(),i.abrupt("return");case 13:n.opened=!0;case 14:case"end":return i.stop()}}),i)})))()},close:function(){this.checked=this.emptyTemplate.fileid,this.loading=!1,this.name=null,this.opened=!1,this.provider=null},onCheck:function(t){this.checked=t},onSubmit:function(){var t=this;return M(regeneratorRuntime.mark((function e(){var n,i,r,a,o,s,l,u,p,v,m,g,h;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t.loading=!0,a=c(),o=null===(n=OCA)||void 0===n||null===(i=n.Files)||void 0===i||null===(r=i.App)||void 0===r?void 0:r.currentFileList,t.nameWithoutExt===t.name&&(t.logger.debug("Fixed invalid filename",{name:t.name,extension:null===(s=t.provider)||void 0===s?void 0:s.extension}),t.name=t.name+(null===(l=t.provider)||void 0===l?void 0:l.extension)),e.prev=4,e.next=7,w((0,d.normalize)("".concat(a,"/").concat(t.name)),null===(u=t.selectedTemplate)||void 0===u?void 0:u.filename,null===(p=t.selectedTemplate)||void 0===p?void 0:p.templateType);case 7:return v=e.sent,t.logger.debug("Created new file",v),e.next=11,null==o?void 0:o.addAndFetchFileInfo(t.name).then((function(t,e){return e}));case 11:m=e.sent,g=new OCA.Files.FileInfoModel(m,{filesClient:null==o?void 0:o.filesClient}),(h=OCA.Files.fileActions.getDefaultFileAction(v.mime,"file",OC.PERMISSION_ALL))&&h.action(v.basename,{$file:null==o?void 0:o.findFileEl(t.name),dir:a,fileList:o,fileActions:null==o?void 0:o.fileActions,fileInfoModel:g}),t.close(),e.next=23;break;case 18:e.prev=18,e.t0=e.catch(4),t.logger.error("Error while creating the new file from template"),L.error(e.t0),(0,f.x2)(t.t("files","Unable to create new file from template"));case 23:return e.prev=23,t.loading=!1,e.finish(23);case 26:case"end":return e.stop()}}),e,null,[[4,18,23,26]])})))()}}},W=Q,z=i(74502),G={};G.styleTagTransform=D(),G.setAttributes=T(),G.insert=E().bind(null,"head"),G.domAPI=P(),G.insertStyleElement=I(),x()(z.Z,G),z.Z&&z.Z.locals&&z.Z.locals;var $=(0,q.Z)(W,(function(){var t=this,e=t._self._c;return t.opened?e("NcModal",{staticClass:"templates-picker",attrs:{"clear-view-delay":-1,size:"normal"},on:{close:t.close}},[e("form",{staticClass:"templates-picker__form",style:t.style,on:{submit:function(e){return e.preventDefault(),e.stopPropagation(),t.onSubmit.apply(null,arguments)}}},[e("h2",[t._v(t._s(t.t("files","Pick a template for {name}",{name:t.nameWithoutExt})))]),t._v(" "),e("ul",{staticClass:"templates-picker__list"},[e("TemplatePreview",t._b({attrs:{checked:t.checked===t.emptyTemplate.fileid},on:{check:t.onCheck}},"TemplatePreview",t.emptyTemplate,!1)),t._v(" "),t._l(t.provider.templates,(function(n){return e("TemplatePreview",t._b({key:n.fileid,attrs:{checked:t.checked===n.fileid,ratio:t.provider.ratio},on:{check:t.onCheck}},"TemplatePreview",n,!1))}))],2),t._v(" "),e("div",{staticClass:"templates-picker__buttons"},[e("button",{on:{click:t.close}},[t._v("\n\t\t\t\t"+t._s(t.t("files","Cancel"))+"\n\t\t\t")]),t._v(" "),e("input",{staticClass:"primary",attrs:{type:"submit","aria-label":t.t("files","Create a new file with the selected template")},domProps:{value:t.t("files","Create")}})])]),t._v(" "),t.loading?e("NcEmptyContent",{staticClass:"templates-picker__loading",attrs:{icon:"icon-loading"}},[t._v("\n\t\t"+t._s(t.t("files","Creating file"))+"\n\t")]):t._e()],1):t._e()}),[],!1,null,"55dd9121",null),Y=$.exports;function H(t,e,n,i,r,a,o){try{var s=t[a](o),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}var K=(0,r.IY)().setApp("files").detectUser().build();p.ZP.mixin({methods:{t:o.Iu,n:o.uN}});var J=document.createElement("div");J.id="template-picker",document.body.appendChild(J);var X=(0,a.j)("files","templates",[]),tt=(0,a.j)("files","templates_path",!1);K.debug("Templates providers",X),K.debug("Templates folder",{templatesPath:tt});var et=new(p.ZP.extend(Y))({name:"TemplatePicker",propsData:{logger:K}});et.$mount("#template-picker"),window.addEventListener("DOMContentLoaded",(function(){if(!tt){K.debug("Templates folder not initialized");var t={attach:function(t){t.addMenuEntry({id:"template-init",displayName:(0,o.Iu)("files","Set up templates folder"),templateName:(0,o.Iu)("files","Templates"),iconClass:"icon-template-add",fileType:"file",actionHandler:function(e){it(e),t.removeMenuEntry("template-init")}})}};OC.Plugins.register("OCA.Files.NewFileMenu",t)}})),X.forEach((function(t,e){var n={attach:function(n){var i=n.fileList;"files"!==i.id&&"files.public"!==i.id||n.addMenuEntry({id:"template-new-".concat(t.app,"-").concat(e),displayName:t.label,templateName:t.label+t.extension,iconClass:t.iconClass||"icon-file",fileType:"file",actionHandler:function(e){et.open(e,t)}})}};OC.Plugins.register("OCA.Files.NewFileMenu",n)}));var nt,it=function(){var t,e=(t=regeneratorRuntime.mark((function t(e){var n,i;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=(c()+"/".concat(e)).replace("//","/"),t.prev=1,K.debug("Initializing the templates directory",{templatePath:n}),t.next=5,u.default.post((0,s.generateOcsUrl)("apps/files/api/v1/templates/path"),{templatePath:n,copySystemTemplates:!0});case 5:i=t.sent,OCA.Files.App.currentFileList.changeDirectory(n,!0,!0),X=i.data.ocs.data.templates,tt=i.data.ocs.data.template_path,t.next=15;break;case 11:t.prev=11,t.t0=t.catch(1),K.error("Unable to initialize the templates directory"),(0,f.x2)((0,o.Iu)("files","Unable to initialize the templates directory"));case 15:case"end":return t.stop()}}),t,null,[[1,11]])})),function(){var e=this,n=arguments;return new Promise((function(i,r){var a=t.apply(e,n);function o(t){H(a,i,r,o,s,"next",t)}function s(t){H(a,i,r,o,s,"throw",t)}o(void 0)}))});return function(t){return e.apply(this,arguments)}}(),rt=i(78595);nt={attach:function(t){var e=this;(0,rt.Ld)("nextcloud:unified-search.search",(function(e){var n=e.query;t.setFilter(n)})),(0,rt.Ld)("nextcloud:unified-search.reset",(function(){e.query=null,t.setFilter("")}))}},window.OC.Plugins.register("OCA.Files.FileList",nt);var at=(0,r.IY)().setApp("files").detectUser().build();function ot(t){return ot="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ot(t)}function st(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function lt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?st(Object(n),!0).forEach((function(e){ct(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):st(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function ct(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==ot(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==ot(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===ot(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var ut=function(t){var e=t.id,n=t.name,i=t.order,r=t.icon,a=t.parent,o=t.classes,s=void 0===o?"":o,l=t.expanded,c=t.params;OCP.Files.Navigation.register({id:e,name:n,order:i,params:c,parent:a,expanded:!0===l,iconClass:r?"icon-".concat(r):"nav-icon-"+e,legacy:!0,sticky:s.includes("pinned")})},pt=i(41487),dt=i.n(pt);function ft(t){return ft="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ft(t)}function vt(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,gt(i.key),i)}}function mt(t,e,n){return(e=gt(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function gt(t){var e=function(t,e){if("object"!==ft(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==ft(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===ft(e)?e:String(e)}var ht=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),mt(this,"_views",[]),mt(this,"_currentView",null),at.debug("Navigation service initialized")}var e,n;return e=t,(n=[{key:"register",value:function(t){try{bt(t),At(t,this._views)}catch(e){throw e instanceof Error&&at.error(e.message,{view:t}),e}t.legacy&&at.warn("Legacy view detected, please migrate to Vue"),t.iconClass&&(t.legacy=!0),this._views.push(t)}},{key:"views",get:function(){return this._views}},{key:"setActive",value:function(t){this._currentView=t}},{key:"active",get:function(){return this._currentView}}])&&vt(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),t}(),At=function(t,e){if(e.find((function(e){return e.id===t.id})))throw new Error("Navigation id ".concat(t.id," is already registered"));return!0},bt=function(t){if(!t.id||"string"!=typeof t.id)throw new Error("Navigation id is required and must be a string");if(!t.name||"string"!=typeof t.name)throw new Error("Navigation name is required and must be a string");if(!t.legacy){if(!t.getFiles||"function"!=typeof t.getFiles)throw new Error("Navigation getFiles is required and must be a function");if(!t.icon||"string"!=typeof t.icon||!dt()(t.icon))throw new Error("Navigation icon is required and must be a valid svg string")}if(!("order"in t)||"number"!=typeof t.order)throw new Error("Navigation order is required and must be a number");if(t.columns&&t.columns.forEach(yt),t.emptyView&&"function"!=typeof t.emptyView)throw new Error("Navigation emptyView must be a function");if(t.parent&&"string"!=typeof t.parent)throw new Error("Navigation parent must be a string");if("sticky"in t&&"boolean"!=typeof t.sticky)throw new Error("Navigation sticky must be a boolean");if("expanded"in t&&"boolean"!=typeof t.expanded)throw new Error("Navigation expanded must be a boolean");return!0},yt=function(t){if(!t.id||"string"!=typeof t.id)throw new Error("Column id is required");if(!t.title||"string"!=typeof t.title)throw new Error("Column title is required");if(!t.property||"string"!=typeof t.property)throw new Error("Column property is required");if(t.sortFunction&&"function"!=typeof t.sortFunction)throw new Error("Column sortFunction must be a function");if(t.summary&&"function"!=typeof t.summary)throw new Error("Column summary must be a function");return!0},wt=i(57638),Ct=i(55209),_t=i.n(Ct),St=i(14032),kt=i.n(St),xt=i(91770),Ot=i(28615),Pt=i(74184),jt=i(48959),Et=i.n(jt);function Nt(t,e,n,i,r,a,o){try{var s=t[a](o),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}function Tt(t){return function(){var e=this,n=arguments;return new Promise((function(i,r){var a=t.apply(e,n);function o(t){Nt(a,i,r,o,s,"next",t)}function s(t){Nt(a,i,r,o,s,"throw",t)}o(void 0)}))}}var Ft={name:"NavigationQuota",components:{ChartPie:Pt.Z,NcAppNavigationItem:kt(),NcProgressBar:Et()},data:function(){return{loadingStorageStats:!1,storageStats:(0,a.j)("files","storageStats",null)}},computed:{storageStatsTitle:function(){var t,e,n,i=(0,xt.sS)(null===(t=this.storageStats)||void 0===t?void 0:t.used),r=(0,xt.sS)(null===(e=this.storageStats)||void 0===e?void 0:e.quota);return(null===(n=this.storageStats)||void 0===n?void 0:n.quota)<0?this.t("files","{usedQuotaByte} used",{usedQuotaByte:i}):this.t("files","{used} of {quota} used",{used:i,quota:r})},storageStatsTooltip:function(){return this.storageStats.relative?this.t("files","{relative}% used",this.storageStats):""}},beforeMount:function(){setInterval(this.throttleUpdateStorageStats,6e4),(0,rt.Ld)("files:file:created",this.throttleUpdateStorageStats),(0,rt.Ld)("files:file:deleted",this.throttleUpdateStorageStats),(0,rt.Ld)("files:file:moved",this.throttleUpdateStorageStats),(0,rt.Ld)("files:file:updated",this.throttleUpdateStorageStats),(0,rt.Ld)("files:folder:created",this.throttleUpdateStorageStats),(0,rt.Ld)("files:folder:deleted",this.throttleUpdateStorageStats),(0,rt.Ld)("files:folder:moved",this.throttleUpdateStorageStats),(0,rt.Ld)("files:folder:updated",this.throttleUpdateStorageStats)},methods:{debounceUpdateStorageStats:(0,Ot.D)(200,(function(t){this.updateStorageStats(t)})),throttleUpdateStorageStats:(0,Ot.P)(1e3,(function(t){this.updateStorageStats(t)})),updateStorageStats:function(){var e=arguments,n=this;return Tt(regeneratorRuntime.mark((function i(){var r,a,o;return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:if(r=e.length>0&&void 0!==e[0]?e[0]:null,!n.loadingStorageStats){i.next=3;break}return i.abrupt("return");case 3:return n.loadingStorageStats=!0,i.prev=4,i.next=7,u.default.get((0,s.generateUrl)("/apps/files/api/v1/stats"));case 7:if(null!=(o=i.sent)&&null!==(a=o.data)&&void 0!==a&&a.data){i.next=10;break}throw new Error("Invalid storage stats");case 10:n.storageStats=o.data.data,i.next=17;break;case 13:i.prev=13,i.t0=i.catch(4),at.error("Could not refresh storage stats",{error:i.t0}),r&&(0,f.x2)(t("files","Could not refresh storage stats"));case 17:return i.prev=17,n.loadingStorageStats=!1,i.finish(17);case 20:case"end":return i.stop()}}),i,null,[[4,13,17,20]])})))()},t:o.Iu}},It=Ft,Ut=i(358),Dt={};Dt.styleTagTransform=D(),Dt.setAttributes=T(),Dt.insert=E().bind(null,"head"),Dt.domAPI=P(),Dt.insertStyleElement=I(),x()(Ut.Z,Dt),Ut.Z&&Ut.Z.locals&&Ut.Z.locals;var Bt=(0,q.Z)(It,(function(){var t=this,e=t._self._c;return t.storageStats?e("NcAppNavigationItem",{staticClass:"app-navigation-entry__settings-quota",class:{"app-navigation-entry__settings-quota--not-unlimited":t.storageStats.quota>=0},attrs:{"aria-label":t.t("files","Storage informations"),loading:t.loadingStorageStats,name:t.storageStatsTitle,title:t.storageStatsTooltip,"data-cy-files-navigation-settings-quota":""},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.debounceUpdateStorageStats.apply(null,arguments)}}},[e("ChartPie",{attrs:{slot:"icon",size:20},slot:"icon"}),t._v(" "),t.storageStats.quota>=0?e("NcProgressBar",{attrs:{slot:"extra",error:t.storageStats.relative>80,value:Math.min(t.storageStats.relative,100)},slot:"extra"}):t._e()],1):t._e()}),[],!1,null,"26c061ec",null),Zt=Bt.exports,qt=i(68988),Rt=i.n(qt),Lt=i(16809),Vt=i.n(Lt),Mt=i(20571),Qt=i.n(Mt),Wt=i(70386),zt=i(36029),Gt=i.n(zt),$t={name:"Setting",props:{el:{type:Function,required:!0}},mounted:function(){this.$el.appendChild(this.el())}},Yt=(0,q.Z)($t,(function(){return(0,this._self._c)("div")}),[],!1,null,null,null).exports;function Ht(t){return Ht="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ht(t)}function Kt(t,e,n,i,r,a,o){try{var s=t[a](o),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}function Jt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function Xt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Jt(Object(n),!0).forEach((function(e){te(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Jt(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function te(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==Ht(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==Ht(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===Ht(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var ee=(0,a.j)("files","config",{show_hidden:!1,crop_image_previews:!0}),ne={name:"Settings",components:{Clipboard:Wt.Z,NcAppSettingsDialog:Rt(),NcAppSettingsSection:Vt(),NcCheckboxRadioSwitch:Qt(),NcInputField:Gt(),Setting:Yt},props:{open:{type:Boolean,default:!1}},data:function(){var t,e,n,i;return Xt(Xt({},ee),{},{settings:(null===(t=window.OCA)||void 0===t||null===(e=t.Files)||void 0===e||null===(n=e.Settings)||void 0===n?void 0:n.settings)||[],webdavUrl:(0,s.generateRemoteUrl)("dav/files/"+encodeURIComponent(null===(i=(0,l.ts)())||void 0===i?void 0:i.uid)),webdavDocs:"https://docs.nextcloud.com/server/stable/go.php?to=user-webdav",appPasswordUrl:(0,s.generateUrl)("/settings/user/security#generate-app-token-section"),webdavUrlCopied:!1})},beforeMount:function(){this.settings.forEach((function(t){return t.open()}))},beforeDestroy:function(){this.settings.forEach((function(t){return t.close()}))},methods:{onClose:function(){this.$emit("close")},setConfig:function(t,e){(0,rt.j8)("files:config:updated",{key:t,value:e}),u.default.post((0,s.generateUrl)("/apps/files/api/v1/config/"+t),{value:e})},copyCloudId:function(){var e,n=this;return(e=regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(document.querySelector("input#webdav-url-input").select(),navigator.clipboard){e.next=4;break}return(0,f.x2)(t("files","Clipboard is not available")),e.abrupt("return");case 4:return e.next=6,navigator.clipboard.writeText(n.webdavUrl);case 6:n.webdavUrlCopied=!0,(0,f.s$)(t("files","WebDAV URL copied to clipboard")),setTimeout((function(){n.webdavUrlCopied=!1}),5e3);case 9:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(i,r){var a=e.apply(t,n);function o(t){Kt(a,i,r,o,s,"next",t)}function s(t){Kt(a,i,r,o,s,"throw",t)}o(void 0)}))})()},t:o.Iu}},ie=ne,re=i(56417),ae={};ae.styleTagTransform=D(),ae.setAttributes=T(),ae.insert=E().bind(null,"head"),ae.domAPI=P(),ae.insertStyleElement=I(),x()(re.Z,ae),re.Z&&re.Z.locals&&re.Z.locals;var oe=(0,q.Z)(ie,(function(){var t=this,e=t._self._c;return e("NcAppSettingsDialog",{attrs:{open:t.open,"show-navigation":!0,title:t.t("files","Files settings")},on:{"update:open":t.onClose}},[e("NcAppSettingsSection",{attrs:{id:"settings",title:t.t("files","Files settings")}},[e("NcCheckboxRadioSwitch",{attrs:{checked:t.show_hidden},on:{"update:checked":[function(e){t.show_hidden=e},function(e){return t.setConfig("show_hidden",e)}]}},[t._v("\n\t\t\t"+t._s(t.t("files","Show hidden files"))+"\n\t\t")]),t._v(" "),e("NcCheckboxRadioSwitch",{attrs:{checked:t.crop_image_previews},on:{"update:checked":[function(e){t.crop_image_previews=e},function(e){return t.setConfig("crop_image_previews",e)}]}},[t._v("\n\t\t\t"+t._s(t.t("files","Crop image previews"))+"\n\t\t")])],1),t._v(" "),0!==t.settings.length?e("NcAppSettingsSection",{attrs:{id:"more-settings",title:t.t("files","Additional settings")}},[t._l(t.settings,(function(t){return[e("Setting",{key:t.name,attrs:{el:t.el}})]}))],2):t._e(),t._v(" "),e("NcAppSettingsSection",{attrs:{id:"webdav",title:t.t("files","WebDAV")}},[e("NcInputField",{attrs:{id:"webdav-url-input","show-trailing-button":!0,success:t.webdavUrlCopied,"trailing-button-label":t.t("files","Copy to clipboard"),value:t.webdavUrl,readonly:"readonly",type:"url"},on:{focus:function(t){return t.target.select()},"trailing-button-click":t.copyCloudId},scopedSlots:t._u([{key:"trailing-button-icon",fn:function(){return[e("Clipboard",{attrs:{size:20}})]},proxy:!0}])}),t._v(" "),e("em",[e("a",{staticClass:"setting-link",attrs:{href:t.webdavDocs,target:"_blank",rel:"noreferrer noopener"}},[t._v("\n\t\t\t\t"+t._s(t.t("files","Use this address to access your Files via WebDAV"))+" ↗\n\t\t\t")])]),t._v(" "),e("br"),t._v(" "),e("em",[e("a",{staticClass:"setting-link",attrs:{href:t.appPasswordUrl}},[t._v("\n\t\t\t\t"+t._s(t.t("files","If you have enabled 2FA, you must create and use a new app password by clicking here."))+" ↗\n\t\t\t")])])],1)],1)}),[],!1,null,"c2541792",null).exports;function se(t){return se="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},se(t)}function le(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function ce(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?le(Object(n),!0).forEach((function(e){ue(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):le(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function ue(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==se(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==se(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===se(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function pe(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}var de={name:"Navigation",components:{Cog:wt.default,NcAppNavigation:_t(),NcAppNavigationItem:kt(),SettingsModal:oe,NavigationQuota:Zt},props:{Navigation:{type:ht,required:!0}},data:function(){return{settingsOpened:!1}},computed:{currentViewId:function(){var t,e;return(null===(t=this.$route)||void 0===t||null===(e=t.params)||void 0===e?void 0:e.view)||"files"},currentView:function(){var t=this;return this.views.find((function(e){return e.id===t.currentViewId}))},views:function(){return this.Navigation.views},parentViews:function(){return this.views.filter((function(t){return!t.parent})).sort((function(t,e){return t.order-e.order}))},childViews:function(){return this.views.filter((function(t){return!!t.parent})).reduce((function(t,e){return t[e.parent]=[].concat(function(t){if(Array.isArray(t))return pe(t)}(n=t[e.parent]||[])||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(n)||function(t,e){if(t){if("string"==typeof t)return pe(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?pe(t,e):void 0}}(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),[e]),t[e.parent].sort((function(t,e){return t.order-e.order})),t;var n}),{})}},watch:{currentView:function(t,e){at.debug("View changed",{id:t.id,view:t}),this.showView(t,e)}},beforeMount:function(){this.currentView&&(at.debug("Navigation mounted. Showing requested view",{view:this.currentView}),this.showView(this.currentView)),(0,rt.Ld)("files:legacy-navigation:changed",this.onLegacyNavigationChanged)},methods:{showView:function(t,e){var n,i,r,a,o;if(null===(n=window)||void 0===n||null===(i=n.OCA)||void 0===i||null===(r=i.Files)||void 0===r||null===(a=r.Sidebar)||void 0===a||null===(o=a.close)||void 0===o||o.call(a),t.legacy){var s=document.querySelector("#app-content #app-content-"+this.currentView.id+".viewcontainer");document.querySelectorAll("#app-content .viewcontainer").forEach((function(t){t.classList.add("hidden")})),s.classList.remove("hidden");var l=OC.Util.History.parseUrlQuery().dir,c=void 0===l?"/":l,u={itemId:t.id,dir:c};at.debug("Triggering legacy navigation event",u),window.jQuery(s).trigger(new window.jQuery.Event("show",u)),window.jQuery(s).trigger(new window.jQuery.Event("urlChanged",u))}this.Navigation.setActive(t),(0,rt.j8)("files:navigation:changed",t)},onLegacyNavigationChanged:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{id:"files"},e=t.id,n=this.Navigation.views.find((function(t){return t.id===e}));n&&n.legacy&&n.id!==this.currentView.id&&(this.$router.replace(ce(ce({},this.$route),{},{params:{view:n.id}})),this.Navigation.setActive(n),this.showView(n))},onToggleExpand:function(t){t.expanded=!t.expanded,u.default.post((0,s.generateUrl)("/apps/files/api/v1/toggleShowFolder/".concat(t.id)),{show:t.expanded})},generateToNavigation:function(t){if(t.params){var e=t.params,n=e.dir,i=e.fileid;return{name:"filelist",params:t.params,query:{dir:n,fileid:i}}}return{name:"filelist",params:{view:t.id}}},openSettings:function(){this.settingsOpened=!0},onSettingsClose:function(){this.settingsOpened=!1},t:o.Iu}},fe=de,ve=i(50375),me={};me.styleTagTransform=D(),me.setAttributes=T(),me.insert=E().bind(null,"head"),me.domAPI=P(),me.insertStyleElement=I(),x()(ve.Z,me),ve.Z&&ve.Z.locals&&ve.Z.locals;var ge=(0,q.Z)(fe,(function(){var t=this,e=t._self._c;return e("NcAppNavigation",{attrs:{"data-cy-files-navigation":""},scopedSlots:t._u([{key:"list",fn:function(){return t._l(t.parentViews,(function(n){return e("NcAppNavigationItem",{key:n.id,attrs:{"allow-collapse":!0,"data-cy-files-navigation-item":n.id,icon:n.iconClass,open:n.expanded,pinned:n.sticky,title:n.name,to:t.generateToNavigation(n)},on:{"update:open":function(e){return t.onToggleExpand(n)}}},t._l(t.childViews[n.id],(function(n){return e("NcAppNavigationItem",{key:n.id,attrs:{"data-cy-files-navigation-item":n.id,exact:!0,icon:n.iconClass,title:n.name,to:t.generateToNavigation(n)}})})),1)}))},proxy:!0},{key:"footer",fn:function(){return[e("ul",{staticClass:"app-navigation-entry__settings"},[e("NavigationQuota"),t._v(" "),e("NcAppNavigationItem",{attrs:{"aria-label":t.t("files","Open the files app settings"),title:t.t("files","Files settings"),"data-cy-files-navigation-settings-button":""},on:{click:function(e){return e.preventDefault(),e.stopPropagation(),t.openSettings.apply(null,arguments)}}},[e("Cog",{attrs:{slot:"icon",size:20},slot:"icon"})],1)],1)]},proxy:!0}])},[t._v(" "),t._v(" "),e("SettingsModal",{attrs:{open:t.settingsOpened,"data-cy-files-navigation-settings":""},on:{close:t.onSettingsClose}})],1)}),[],!1,null,"83bb0f06",null),he=ge.exports,Ae=i(25108);function be(t){return be="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},be(t)}function ye(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,we(i.key),i)}}function we(t){var e=function(t,e){if("object"!==be(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==be(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===be(e)?e:String(e)}var Ce=function(){function t(){var e,n,i;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),e=this,i=void 0,(n=we(n="_settings"))in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,this._settings=[],Ae.debug("OCA.Files.Settings initialized")}var e,n;return e=t,(n=[{key:"register",value:function(t){return this._settings.filter((function(e){return e.name===t.name})).length>0?(Ae.error("A setting with the same name is already registered"),!1):(this._settings.push(t),!0)}},{key:"settings",get:function(){return this._settings}}])&&ye(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),t}();function _e(t){return _e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_e(t)}function Se(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,xe(i.key),i)}}function ke(t,e,n){return(e=xe(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function xe(t){var e=function(t,e){if("object"!==_e(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==_e(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===_e(e)?e:String(e)}var Oe=function(){function t(e,n){var i=n.el,r=n.open,a=n.close;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),ke(this,"_close",void 0),ke(this,"_el",void 0),ke(this,"_name",void 0),ke(this,"_open",void 0),this._name=e,this._el=i,this._open=r,this._close=a,"function"!=typeof this._open&&(this._open=function(){}),"function"!=typeof this._close&&(this._close=function(){})}var e,n;return e=t,(n=[{key:"name",get:function(){return this._name}},{key:"el",get:function(){return this._el}},{key:"open",get:function(){return this._open}},{key:"close",get:function(){return this._close}}])&&Se(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),t}(),Pe=i(78345),je=i(17563);p.ZP.use(Pe.Z);var Ee,Ne,Te=new Pe.Z({mode:"history",base:(0,s.generateUrl)("/apps/files",""),linkActiveClass:"active",routes:[{path:"/",alias:"/files"},{path:"/:view/:fileid?",name:"filelist",props:!0}],stringifyQuery:function(t){var e=(0,je.stringify)(t).replace(/%2F/gim,"/");return e?"?"+e:""}});window.OCA.Files=null!==(Ee=window.OCA.Files)&&void 0!==Ee?Ee:{},window.OCP.Files=null!==(Ne=window.OCP.Files)&&void 0!==Ne?Ne:{};var Fe=new ht;Object.assign(window.OCP.Files,{Navigation:Fe});var Ie,Ue=new Ce;Object.assign(window.OCA.Files,{Settings:Ue}),Object.assign(window.OCA.Files.Settings,{Setting:Oe}),new(p.ZP.extend(he))({name:"FilesNavigationRoot",propsData:{Navigation:Fe},router:Te}).$mount("#app-navigation-files"),(Ie=Object.values((0,a.j)("files","navigation",{}))).length>0&&(at.debug("Legacy files views detected. Processing...",Ie),Ie.forEach((function(t){ut(t),t.sublist&&t.sublist.forEach((function(e){return ut(lt(lt({},e),{},{parent:t.id}))}))})))},358:function(t,e,n){var i=n(87537),r=n.n(i),a=n(23645),o=n.n(a)()(r());o.push([t.id,".app-navigation-entry__settings-quota--not-unlimited[data-v-26c061ec] .app-navigation-entry__title{margin-top:-4px}.app-navigation-entry__settings-quota progress[data-v-26c061ec]{position:absolute;bottom:10px;margin-left:44px;width:calc(100% - 44px - 22px)}","",{version:3,sources:["webpack://./apps/files/src/components/NavigationQuota.vue"],names:[],mappings:"AAIC,mGACC,eAAA,CAGD,gEACC,iBAAA,CACA,WAAA,CACA,gBAAA,CACA,8BAAA",sourcesContent:["\n// User storage stats display\n.app-navigation-entry__settings-quota {\n\t// Align title with progress and icon\n\t&--not-unlimited::v-deep .app-navigation-entry__title {\n\t\tmargin-top: -4px;\n\t}\n\n\tprogress {\n\t\tposition: absolute;\n\t\tbottom: 10px;\n\t\tmargin-left: 44px;\n\t\twidth: calc(100% - 44px - 22px);\n\t}\n}\n"],sourceRoot:""}]),e.Z=o},87027:function(t,e,n){var i=n(87537),r=n.n(i),a=n(23645),o=n.n(a)()(r());o.push([t.id,".template-picker__item[data-v-440aea22]{display:flex}.template-picker__label[data-v-440aea22]{display:flex;align-items:center;flex:1 1;flex-direction:column}.template-picker__label[data-v-440aea22],.template-picker__label *[data-v-440aea22]{cursor:pointer;user-select:none}.template-picker__label[data-v-440aea22]::before{display:none !important}.template-picker__preview[data-v-440aea22]{display:block;overflow:hidden;flex:1 1;width:var(--width);min-height:var(--height);max-height:var(--height);padding:0;border:var(--border) solid var(--color-border);border-radius:var(--border-radius-large)}input:checked+label>.template-picker__preview[data-v-440aea22]{border-color:var(--color-primary)}.template-picker__preview--failed[data-v-440aea22]{display:flex}.template-picker__image[data-v-440aea22]{max-width:100%;background-color:var(--color-main-background);object-fit:cover}.template-picker__preview--failed .template-picker__image[data-v-440aea22]{width:calc(var(--margin)*8);margin:auto;background-color:rgba(0,0,0,0) !important;object-fit:initial}.template-picker__title[data-v-440aea22]{overflow:hidden;max-width:calc(var(--width) + 4px);padding:var(--margin);white-space:nowrap;text-overflow:ellipsis}","",{version:3,sources:["webpack://./apps/files/src/components/TemplatePreview.vue"],names:[],mappings:"AAGC,wCACC,YAAA,CAGD,yCACC,YAAA,CAEA,kBAAA,CACA,QAAA,CACA,qBAAA,CAEA,oFACC,cAAA,CACA,gBAAA,CAGD,iDACC,uBAAA,CAIF,2CACC,aAAA,CACA,eAAA,CAEA,QAAA,CACA,kBAAA,CACA,wBAAA,CACA,wBAAA,CACA,SAAA,CACA,8CAAA,CACA,wCAAA,CAEA,+DACC,iCAAA,CAGD,mDAEC,YAAA,CAIF,yCACC,cAAA,CACA,6CAAA,CAEA,gBAAA,CAID,2EACC,2BAAA,CAEA,WAAA,CACA,yCAAA,CAEA,kBAAA,CAGD,yCACC,eAAA,CAEA,kCAAA,CACA,qBAAA,CACA,kBAAA,CACA,sBAAA",sourcesContent:["\n\n.template-picker {\n\t&__item {\n\t\tdisplay: flex;\n\t}\n\n\t&__label {\n\t\tdisplay: flex;\n\t\t// Align in the middle of the grid\n\t\talign-items: center;\n\t\tflex: 1 1;\n\t\tflex-direction: column;\n\n\t\t&, * {\n\t\t\tcursor: pointer;\n\t\t\tuser-select: none;\n\t\t}\n\n\t\t&::before {\n\t\t\tdisplay: none !important;\n\t\t}\n\t}\n\n\t&__preview {\n\t\tdisplay: block;\n\t\toverflow: hidden;\n\t\t// Stretch so all entries are the same width\n\t\tflex: 1 1;\n\t\twidth: var(--width);\n\t\tmin-height: var(--height);\n\t\tmax-height: var(--height);\n\t\tpadding: 0;\n\t\tborder: var(--border) solid var(--color-border);\n\t\tborder-radius: var(--border-radius-large);\n\n\t\tinput:checked + label > & {\n\t\t\tborder-color: var(--color-primary);\n\t\t}\n\n\t\t&--failed {\n\t\t\t// Make sure to properly center fallback icon\n\t\t\tdisplay: flex;\n\t\t}\n\t}\n\n\t&__image {\n\t\tmax-width: 100%;\n\t\tbackground-color: var(--color-main-background);\n\n\t\tobject-fit: cover;\n\t}\n\n\t// Failed preview, fallback to mime icon\n\t&__preview--failed &__image {\n\t\twidth: calc(var(--margin) * 8);\n\t\t// Center mime icon\n\t\tmargin: auto;\n\t\tbackground-color: transparent !important;\n\n\t\tobject-fit: initial;\n\t}\n\n\t&__title {\n\t\toverflow: hidden;\n\t\t// also count preview border\n\t\tmax-width: calc(var(--width) + 2*2px);\n\t\tpadding: var(--margin);\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\n"],sourceRoot:""}]),e.Z=o},50375:function(t,e,n){var i=n(87537),r=n.n(i),a=n(23645),o=n.n(a)()(r());o.push([t.id,".app-navigation[data-v-83bb0f06] .app-navigation-entry-icon{background-repeat:no-repeat;background-position:center}.app-navigation>ul.app-navigation__list[data-v-83bb0f06]{padding-bottom:var(--default-grid-baseline, 4px)}.app-navigation-entry__settings[data-v-83bb0f06]{height:auto !important;overflow:hidden !important;padding-top:0 !important;flex:0 0 auto}","",{version:3,sources:["webpack://./apps/files/src/views/Navigation.vue"],names:[],mappings:"AAEA,4DACC,2BAAA,CACA,0BAAA,CAGD,yDAEC,gDAAA,CAGD,iDACC,sBAAA,CACA,0BAAA,CACA,wBAAA,CAEA,aAAA",sourcesContent:["\n// TODO: remove when https://github.com/nextcloud/nextcloud-vue/pull/3539 is in\n.app-navigation::v-deep .app-navigation-entry-icon {\n\tbackground-repeat: no-repeat;\n\tbackground-position: center;\n}\n\n.app-navigation > ul.app-navigation__list {\n\t// Use flex gap value for more elegant spacing\n\tpadding-bottom: var(--default-grid-baseline, 4px);\n}\n\n.app-navigation-entry__settings {\n\theight: auto !important;\n\toverflow: hidden !important;\n\tpadding-top: 0 !important;\n\t// Prevent shrinking or growing\n\tflex: 0 0 auto;\n}\n"],sourceRoot:""}]),e.Z=o},56417:function(t,e,n){var i=n(87537),r=n.n(i),a=n(23645),o=n.n(a)()(r());o.push([t.id,".setting-link[data-v-c2541792]:hover{text-decoration:underline}","",{version:3,sources:["webpack://./apps/files/src/views/Settings.vue"],names:[],mappings:"AACA,qCACC,yBAAA",sourcesContent:["\n.setting-link:hover {\n\ttext-decoration: underline;\n}\n"],sourceRoot:""}]),e.Z=o},74502:function(t,e,n){var i=n(87537),r=n.n(i),a=n(23645),o=n.n(a)()(r());o.push([t.id,".templates-picker__form[data-v-55dd9121]{padding:calc(var(--margin)*2);padding-bottom:0}.templates-picker__form h2[data-v-55dd9121]{text-align:center;font-weight:bold;margin:var(--margin) 0 calc(var(--margin)*2)}.templates-picker__list[data-v-55dd9121]{display:grid;grid-gap:calc(var(--margin)*2);grid-auto-columns:1fr;max-width:calc(var(--fullwidth)*6);grid-template-columns:repeat(auto-fit, var(--fullwidth));grid-auto-rows:1fr;justify-content:center}.templates-picker__buttons[data-v-55dd9121]{display:flex;justify-content:space-between;padding:calc(var(--margin)*2) var(--margin);position:sticky;bottom:0;background-image:linear-gradient(0, var(--gradient-main-background))}.templates-picker__buttons button[data-v-55dd9121],.templates-picker__buttons input[type=submit][data-v-55dd9121]{height:44px}.templates-picker[data-v-55dd9121] .modal-container{position:relative}.templates-picker__loading[data-v-55dd9121]{position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;margin:0;background-color:var(--color-main-background-translucent)}","",{version:3,sources:["webpack://./apps/files/src/views/TemplatePicker.vue"],names:[],mappings:"AAEC,yCACC,6BAAA,CAEA,gBAAA,CAEA,4CACC,iBAAA,CACA,gBAAA,CACA,4CAAA,CAIF,yCACC,YAAA,CACA,8BAAA,CACA,qBAAA,CAEA,kCAAA,CACA,wDAAA,CAEA,kBAAA,CAEA,sBAAA,CAGD,4CACC,YAAA,CACA,6BAAA,CACA,2CAAA,CACA,eAAA,CACA,QAAA,CACA,oEAAA,CAEA,kHACC,WAAA,CAKF,oDACC,iBAAA,CAGD,4CACC,iBAAA,CACA,KAAA,CACA,MAAA,CACA,sBAAA,CACA,UAAA,CACA,WAAA,CACA,QAAA,CACA,yDAAA",sourcesContent:["\n.templates-picker {\n\t&__form {\n\t\tpadding: calc(var(--margin) * 2);\n\t\t// Will be handled by the buttons\n\t\tpadding-bottom: 0;\n\n\t\th2 {\n\t\t\ttext-align: center;\n\t\t\tfont-weight: bold;\n\t\t\tmargin: var(--margin) 0 calc(var(--margin) * 2);\n\t\t}\n\t}\n\n\t&__list {\n\t\tdisplay: grid;\n\t\tgrid-gap: calc(var(--margin) * 2);\n\t\tgrid-auto-columns: 1fr;\n\t\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\n\t\tmax-width: calc(var(--fullwidth) * 6);\n\t\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\n\t\t// Make sure all rows are the same height\n\t\tgrid-auto-rows: 1fr;\n\t\t// Center the columns set\n\t\tjustify-content: center;\n\t}\n\n\t&__buttons {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\tpadding: calc(var(--margin) * 2) var(--margin);\n\t\tposition: sticky;\n\t\tbottom: 0;\n\t\tbackground-image: linear-gradient(0, var(--gradient-main-background));\n\n\t\tbutton, input[type='submit'] {\n\t\t\theight: 44px;\n\t\t}\n\t}\n\n\t// Make sure we're relative for the loading emptycontent on top\n\t::v-deep .modal-container {\n\t\tposition: relative;\n\t}\n\n\t&__loading {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tmargin: 0;\n\t\tbackground-color: var(--color-main-background-translucent);\n\t}\n}\n\n"],sourceRoot:""}]),e.Z=o}},i={};function r(t){var e=i[t];if(void 0!==e)return e.exports;var a=i[t]={id:t,loaded:!1,exports:{}};return n[t].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}r.m=n,e=[],r.O=function(t,n,i,a){if(!n){var o=1/0;for(u=0;u<e.length;u++){n=e[u][0],i=e[u][1],a=e[u][2];for(var s=!0,l=0;l<n.length;l++)(!1&a||o>=a)&&Object.keys(r.O).every((function(t){return r.O[t](n[l])}))?n.splice(l--,1):(s=!1,a<o&&(o=a));if(s){e.splice(u--,1);var c=i();void 0!==c&&(t=c)}}return t}a=a||0;for(var u=e.length;u>0&&e[u-1][2]>a;u--)e[u]=e[u-1];e[u]=[n,i,a]},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,{a:e}),e},r.d=function(t,e){for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},r.j=2181,function(){r.b=document.baseURI||self.location.href;var t={2181:0};r.O.j=function(e){return 0===t[e]};var e=function(e,n){var i,a,o=n[0],s=n[1],l=n[2],c=0;if(o.some((function(e){return 0!==t[e]}))){for(i in s)r.o(s,i)&&(r.m[i]=s[i]);if(l)var u=l(r)}for(e&&e(n);c<o.length;c++)a=o[c],r.o(t,a)&&t[a]&&t[a][0](),t[a]=0;return r.O(u)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))}(),r.nc=void 0;var a=r.O(void 0,[7874],(function(){return r(46724)}));a=r.O(a)}();
+//# sourceMappingURL=files-main.js.map?v=98a5e02f80255aeef25c
\ No newline at end of file
index ebfc873f8f247b2d3d9e559ba704e68dc70924c2..666c6205549b9230ccee5dcc7b66c2512c908600 100644 (file)
@@ -1 +1 @@
-{"version":3,"file":"files-main.js?v=e2400fc70cb2b525fc36","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/files/src/utils/davUtils.js","webpack:///nextcloud/apps/files/src/services/Templates.js","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue","webpack:///nextcloud/apps/files/src/utils/fileUtils.js","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?c067","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?81db","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?c414","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?023e","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?afd8","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?1f7b","webpack:///nextcloud/apps/files/src/templates.js","webpack:///nextcloud/apps/files/src/legacy/filelistSearch.js","webpack:///nextcloud/apps/files/src/logger.js","webpack:///nextcloud/apps/files/src/legacy/navigationMapper.js","webpack:///nextcloud/apps/files/src/services/Navigation.ts","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?2b80","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?2966","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?08cb","webpack:///nextcloud/apps/files/src/components/Setting.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files/src/components/Setting.vue","webpack://nextcloud/./apps/files/src/components/Setting.vue?98ea","webpack://nextcloud/./apps/files/src/components/Setting.vue?8d57","webpack:///nextcloud/apps/files/src/views/Settings.vue","webpack:///nextcloud/apps/files/src/views/Settings.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/Settings.vue?b81b","webpack://nextcloud/./apps/files/src/views/Settings.vue?84f7","webpack:///nextcloud/apps/files/src/views/Navigation.vue","webpack:///nextcloud/apps/files/src/views/Navigation.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/Navigation.vue?98f5","webpack://nextcloud/./apps/files/src/views/Navigation.vue?74b9","webpack://nextcloud/./apps/files/src/views/Navigation.vue?8122","webpack:///nextcloud/apps/files/src/services/Settings.js","webpack:///nextcloud/apps/files/src/models/Setting.js","webpack:///nextcloud/apps/files/src/router/router.js","webpack:///nextcloud/apps/files/src/main.js","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue?vue&type=style&index=0&id=26c061ec&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue?vue&type=style&index=0&id=440aea22&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/views/Navigation.vue?vue&type=style&index=0&id=83bb0f06&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue?vue&type=style&index=0&id=55dd9121&prod&lang=scss&scoped=true&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\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\nimport { generateRemoteUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\n\nexport const getRootPath = function() {\n\tif (getCurrentUser()) {\n\t\treturn generateRemoteUrl(`dav/files/${getCurrentUser().uid}`)\n\t} else {\n\t\treturn generateRemoteUrl('webdav').replace('/remote.php', '/public.php')\n\t}\n}\n\nexport const isPublic = function() {\n\treturn !getCurrentUser()\n}\n\nexport const getToken = function() {\n\treturn document.getElementById('sharingToken') && document.getElementById('sharingToken').value\n}\n\n/**\n * Return the current directory, fallback to root\n *\n * @return {string}\n */\nexport const getCurrentDirectory = function() {\n\tconst currentDirInfo = OCA?.Files?.App?.currentFileList?.dirInfo\n\t\t|| { path: '/', name: '' }\n\n\t// Make sure we don't have double slashes\n\treturn `${currentDirInfo.path}/${currentDirInfo.name}`.replace(/\\/\\//gi, '/')\n}\n","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\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\nimport { generateOcsUrl } from '@nextcloud/router'\nimport axios from '@nextcloud/axios'\n\nexport const getTemplates = async function() {\n\tconst response = await axios.get(generateOcsUrl('apps/files/api/v1/templates'))\n\treturn response.data.ocs.data\n}\n\n/**\n * Create a new file from a specified template\n *\n * @param {string} filePath The new file destination path\n * @param {string} templatePath The template source path\n * @param {string} templateType The template type e.g 'user'\n */\nexport const createFromTemplate = async function(filePath, templatePath, templateType) {\n\tconst response = await axios.post(generateOcsUrl('apps/files/api/v1/templates/create'), {\n\t\tfilePath,\n\t\ttemplatePath,\n\t\ttemplateType,\n\t})\n\treturn response.data.ocs.data\n}\n","<!--\n  - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @author John Molakvoæ <skjnldsv@protonmail.com>\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<template>\n\t<li class=\"template-picker__item\">\n\t\t<input :id=\"id\"\n\t\t\t:checked=\"checked\"\n\t\t\ttype=\"radio\"\n\t\t\tclass=\"radio\"\n\t\t\tname=\"template-picker\"\n\t\t\t@change=\"onCheck\">\n\n\t\t<label :for=\"id\" class=\"template-picker__label\">\n\t\t\t<div class=\"template-picker__preview\"\n\t\t\t\t:class=\"failedPreview ? 'template-picker__preview--failed' : ''\">\n\t\t\t\t<img class=\"template-picker__image\"\n\t\t\t\t\t:src=\"realPreviewUrl\"\n\t\t\t\t\talt=\"\"\n\t\t\t\t\tdraggable=\"false\"\n\t\t\t\t\t@error=\"onFailure\">\n\t\t\t</div>\n\n\t\t\t<span class=\"template-picker__title\">\n\t\t\t\t{{ nameWithoutExt }}\n\t\t\t</span>\n\t\t</label>\n\t</li>\n</template>\n\n<script>\nimport { generateUrl } from '@nextcloud/router'\nimport { encodeFilePath } from '../utils/fileUtils'\nimport { getToken, isPublic } from '../utils/davUtils'\n\n// preview width generation\nconst previewWidth = 256\n\nexport default {\n\tname: 'TemplatePreview',\n\tinheritAttrs: false,\n\n\tprops: {\n\t\tbasename: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tchecked: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tfileid: {\n\t\t\ttype: [String, Number],\n\t\t\trequired: true,\n\t\t},\n\t\tfilename: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tpreviewUrl: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\thasPreview: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tmime: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tratio: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tfailedPreview: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Strip away extension from name\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tnameWithoutExt() {\n\t\t\treturn this.basename.indexOf('.') > -1 ? this.basename.split('.').slice(0, -1).join('.') : this.basename\n\t\t},\n\n\t\tid() {\n\t\t\treturn `template-picker-${this.fileid}`\n\t\t},\n\n\t\trealPreviewUrl() {\n\t\t\t// If original preview failed, fallback to mime icon\n\t\t\tif (this.failedPreview && this.mimeIcon) {\n\t\t\t\treturn this.mimeIcon\n\t\t\t}\n\n\t\t\tif (this.previewUrl) {\n\t\t\t\treturn this.previewUrl\n\t\t\t}\n\t\t\t// TODO: find a nicer standard way of doing this?\n\t\t\tif (isPublic()) {\n\t\t\t\treturn generateUrl(`/apps/files_sharing/publicpreview/${getToken()}?fileId=${this.fileid}&file=${encodeFilePath(this.filename)}&x=${previewWidth}&y=${previewWidth}&a=1`)\n\t\t\t}\n\t\t\treturn generateUrl(`/core/preview?fileId=${this.fileid}&x=${previewWidth}&y=${previewWidth}&a=1`)\n\t\t},\n\n\t\tmimeIcon() {\n\t\t\treturn OC.MimeType.getIconUrl(this.mime)\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonCheck() {\n\t\t\tthis.$emit('check', this.fileid)\n\t\t},\n\t\tonFailure() {\n\t\t\tthis.failedPreview = true\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n.template-picker {\n\t&__item {\n\t\tdisplay: flex;\n\t}\n\n\t&__label {\n\t\tdisplay: flex;\n\t\t// Align in the middle of the grid\n\t\talign-items: center;\n\t\tflex: 1 1;\n\t\tflex-direction: column;\n\n\t\t&, * {\n\t\t\tcursor: pointer;\n\t\t\tuser-select: none;\n\t\t}\n\n\t\t&::before {\n\t\t\tdisplay: none !important;\n\t\t}\n\t}\n\n\t&__preview {\n\t\tdisplay: block;\n\t\toverflow: hidden;\n\t\t// Stretch so all entries are the same width\n\t\tflex: 1 1;\n\t\twidth: var(--width);\n\t\tmin-height: var(--height);\n\t\tmax-height: var(--height);\n\t\tpadding: 0;\n\t\tborder: var(--border) solid var(--color-border);\n\t\tborder-radius: var(--border-radius-large);\n\n\t\tinput:checked + label > & {\n\t\t\tborder-color: var(--color-primary);\n\t\t}\n\n\t\t&--failed {\n\t\t\t// Make sure to properly center fallback icon\n\t\t\tdisplay: flex;\n\t\t}\n\t}\n\n\t&__image {\n\t\tmax-width: 100%;\n\t\tbackground-color: var(--color-main-background);\n\n\t\tobject-fit: cover;\n\t}\n\n\t// Failed preview, fallback to mime icon\n\t&__preview--failed &__image {\n\t\twidth: calc(var(--margin) * 8);\n\t\t// Center mime icon\n\t\tmargin: auto;\n\t\tbackground-color: transparent !important;\n\n\t\tobject-fit: initial;\n\t}\n\n\t&__title {\n\t\toverflow: hidden;\n\t\t// also count preview border\n\t\tmax-width: calc(var(--width) + 2*2px);\n\t\tpadding: var(--margin);\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\n</style>\n","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\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\nconst encodeFilePath = function(path) {\n\tconst pathSections = (path.startsWith('/') ? path : `/${path}`).split('/')\n\tlet relativePath = ''\n\tpathSections.forEach((section) => {\n\t\tif (section !== '') {\n\t\t\trelativePath += '/' + encodeURIComponent(section)\n\t\t}\n\t})\n\treturn relativePath\n}\n\n/**\n * Extract dir and name from file path\n *\n * @param {string} path the full path\n * @return {string[]} [dirPath, fileName]\n */\nconst extractFilePaths = function(path) {\n\tconst pathSections = path.split('/')\n\tconst fileName = pathSections[pathSections.length - 1]\n\tconst dirPath = pathSections.slice(0, pathSections.length - 1).join('/')\n\treturn [dirPath, fileName]\n}\n\nexport { encodeFilePath, extractFilePaths }\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=script&lang=js&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=style&index=0&id=440aea22&prod&lang=scss&scoped=true&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=style&index=0&id=440aea22&prod&lang=scss&scoped=true&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TemplatePreview.vue?vue&type=template&id=440aea22&scoped=true&\"\nimport script from \"./TemplatePreview.vue?vue&type=script&lang=js&\"\nexport * from \"./TemplatePreview.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TemplatePreview.vue?vue&type=style&index=0&id=440aea22&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"440aea22\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('li',{staticClass:\"template-picker__item\"},[_c('input',{staticClass:\"radio\",attrs:{\"id\":_vm.id,\"type\":\"radio\",\"name\":\"template-picker\"},domProps:{\"checked\":_vm.checked},on:{\"change\":_vm.onCheck}}),_vm._v(\" \"),_c('label',{staticClass:\"template-picker__label\",attrs:{\"for\":_vm.id}},[_c('div',{staticClass:\"template-picker__preview\",class:_vm.failedPreview ? 'template-picker__preview--failed' : ''},[_c('img',{staticClass:\"template-picker__image\",attrs:{\"src\":_vm.realPreviewUrl,\"alt\":\"\",\"draggable\":\"false\"},on:{\"error\":_vm.onFailure}})]),_vm._v(\" \"),_c('span',{staticClass:\"template-picker__title\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.nameWithoutExt)+\"\\n\\t\\t\")])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n  - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @author John Molakvoæ <skjnldsv@protonmail.com>\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<template>\n\t<NcModal v-if=\"opened\"\n\t\t:clear-view-delay=\"-1\"\n\t\tclass=\"templates-picker\"\n\t\tsize=\"normal\"\n\t\t@close=\"close\">\n\t\t<form class=\"templates-picker__form\"\n\t\t\t:style=\"style\"\n\t\t\t@submit.prevent.stop=\"onSubmit\">\n\t\t\t<h2>{{ t('files', 'Pick a template for {name}', { name: nameWithoutExt }) }}</h2>\n\n\t\t\t<!-- Templates list -->\n\t\t\t<ul class=\"templates-picker__list\">\n\t\t\t\t<TemplatePreview v-bind=\"emptyTemplate\"\n\t\t\t\t\t:checked=\"checked === emptyTemplate.fileid\"\n\t\t\t\t\t@check=\"onCheck\" />\n\n\t\t\t\t<TemplatePreview v-for=\"template in provider.templates\"\n\t\t\t\t\t:key=\"template.fileid\"\n\t\t\t\t\tv-bind=\"template\"\n\t\t\t\t\t:checked=\"checked === template.fileid\"\n\t\t\t\t\t:ratio=\"provider.ratio\"\n\t\t\t\t\t@check=\"onCheck\" />\n\t\t\t</ul>\n\n\t\t\t<!-- Cancel and submit -->\n\t\t\t<div class=\"templates-picker__buttons\">\n\t\t\t\t<button @click=\"close\">\n\t\t\t\t\t{{ t('files', 'Cancel') }}\n\t\t\t\t</button>\n\t\t\t\t<input type=\"submit\"\n\t\t\t\t\tclass=\"primary\"\n\t\t\t\t\t:value=\"t('files', 'Create')\"\n\t\t\t\t\t:aria-label=\"t('files', 'Create a new file with the selected template')\">\n\t\t\t</div>\n\t\t</form>\n\n\t\t<NcEmptyContent v-if=\"loading\" class=\"templates-picker__loading\" icon=\"icon-loading\">\n\t\t\t{{ t('files', 'Creating file') }}\n\t\t</NcEmptyContent>\n\t</NcModal>\n</template>\n\n<script>\nimport { normalize } from 'path'\nimport { showError } from '@nextcloud/dialogs'\nimport NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent'\nimport NcModal from '@nextcloud/vue/dist/Components/NcModal'\n\nimport { getCurrentDirectory } from '../utils/davUtils'\nimport { createFromTemplate, getTemplates } from '../services/Templates'\nimport TemplatePreview from '../components/TemplatePreview'\n\nconst border = 2\nconst margin = 8\nconst width = margin * 20\n\nexport default {\n\tname: 'TemplatePicker',\n\n\tcomponents: {\n\t\tNcEmptyContent,\n\t\tNcModal,\n\t\tTemplatePreview,\n\t},\n\n\tprops: {\n\t\tlogger: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\t// Check empty template by default\n\t\t\tchecked: -1,\n\t\t\tloading: false,\n\t\t\tname: null,\n\t\t\topened: false,\n\t\t\tprovider: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Strip away extension from name\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tnameWithoutExt() {\n\t\t\treturn this.name.indexOf('.') > -1\n\t\t\t\t? this.name.split('.').slice(0, -1).join('.')\n\t\t\t\t: this.name\n\t\t},\n\n\t\temptyTemplate() {\n\t\t\treturn {\n\t\t\t\tbasename: t('files', 'Blank'),\n\t\t\t\tfileid: -1,\n\t\t\t\tfilename: this.t('files', 'Blank'),\n\t\t\t\thasPreview: false,\n\t\t\t\tmime: this.provider?.mimetypes[0] || this.provider?.mimetypes,\n\t\t\t}\n\t\t},\n\n\t\tselectedTemplate() {\n\t\t\treturn this.provider.templates.find(template => template.fileid === this.checked)\n\t\t},\n\n\t\t/**\n\t\t * Style css vars bin,d\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\tstyle() {\n\t\t\treturn {\n\t\t\t\t'--margin': margin + 'px',\n\t\t\t\t'--width': width + 'px',\n\t\t\t\t'--border': border + 'px',\n\t\t\t\t'--fullwidth': width + 2 * margin + 2 * border + 'px',\n\t\t\t\t'--height': this.provider.ratio ? Math.round(width / this.provider.ratio) + 'px' : null,\n\t\t\t}\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Open the picker\n\t\t *\n\t\t * @param {string} name the file name to create\n\t\t * @param {object} provider the template provider picked\n\t\t */\n\t\tasync open(name, provider) {\n\n\t\t\tthis.checked = this.emptyTemplate.fileid\n\t\t\tthis.name = name\n\t\t\tthis.provider = provider\n\n\t\t\tconst templates = await getTemplates()\n\t\t\tconst fetchedProvider = templates.find((fetchedProvider) => fetchedProvider.app === provider.app && fetchedProvider.label === provider.label)\n\t\t\tif (fetchedProvider === null) {\n\t\t\t\tthrow new Error('Failed to match provider in results')\n\t\t\t}\n\t\t\tthis.provider = fetchedProvider\n\n\t\t\t// If there is no templates available, just create an empty file\n\t\t\tif (fetchedProvider.templates.length === 0) {\n\t\t\t\tthis.onSubmit()\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Else, open the picker\n\t\t\tthis.opened = true\n\t\t},\n\n\t\t/**\n\t\t * Close the picker and reset variables\n\t\t */\n\t\tclose() {\n\t\t\tthis.checked = this.emptyTemplate.fileid\n\t\t\tthis.loading = false\n\t\t\tthis.name = null\n\t\t\tthis.opened = false\n\t\t\tthis.provider = null\n\t\t},\n\n\t\t/**\n\t\t * Manages the radio template picker change\n\t\t *\n\t\t * @param {number} fileid the selected template file id\n\t\t */\n\t\tonCheck(fileid) {\n\t\t\tthis.checked = fileid\n\t\t},\n\n\t\tasync onSubmit() {\n\t\t\tthis.loading = true\n\t\t\tconst currentDirectory = getCurrentDirectory()\n\t\t\tconst fileList = OCA?.Files?.App?.currentFileList\n\n\t\t\t// If the file doesn't have an extension, add the default one\n\t\t\tif (this.nameWithoutExt === this.name) {\n\t\t\t\tthis.logger.debug('Fixed invalid filename', { name: this.name, extension: this.provider?.extension })\n\t\t\t\tthis.name = this.name + this.provider?.extension\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst fileInfo = await createFromTemplate(\n\t\t\t\t\tnormalize(`${currentDirectory}/${this.name}`),\n\t\t\t\t\tthis.selectedTemplate?.filename,\n\t\t\t\t\tthis.selectedTemplate?.templateType,\n\t\t\t\t)\n\t\t\t\tthis.logger.debug('Created new file', fileInfo)\n\n\t\t\t\t// Fetch FileInfo and model\n\t\t\t\tconst data = await fileList?.addAndFetchFileInfo(this.name).then((status, data) => data)\n\t\t\t\tconst model = new OCA.Files.FileInfoModel(data, {\n\t\t\t\t\tfilesClient: fileList?.filesClient,\n\t\t\t\t})\n\n\t\t\t\t// Run default action\n\t\t\t\tconst fileAction = OCA.Files.fileActions.getDefaultFileAction(fileInfo.mime, 'file', OC.PERMISSION_ALL)\n\t\t\t\tif (fileAction) {\n\t\t\t\t\tfileAction.action(fileInfo.basename, {\n\t\t\t\t\t\t$file: fileList?.findFileEl(this.name),\n\t\t\t\t\t\tdir: currentDirectory,\n\t\t\t\t\t\tfileList,\n\t\t\t\t\t\tfileActions: fileList?.fileActions,\n\t\t\t\t\t\tfileInfoModel: model,\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.close()\n\t\t\t} catch (error) {\n\t\t\t\tthis.logger.error('Error while creating the new file from template')\n\t\t\t\tconsole.error(error)\n\t\t\t\tshowError(this.t('files', 'Unable to create new file from template'))\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.templates-picker {\n\t&__form {\n\t\tpadding: calc(var(--margin) * 2);\n\t\t// Will be handled by the buttons\n\t\tpadding-bottom: 0;\n\n\t\th2 {\n\t\t\ttext-align: center;\n\t\t\tfont-weight: bold;\n\t\t\tmargin: var(--margin) 0 calc(var(--margin) * 2);\n\t\t}\n\t}\n\n\t&__list {\n\t\tdisplay: grid;\n\t\tgrid-gap: calc(var(--margin) * 2);\n\t\tgrid-auto-columns: 1fr;\n\t\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\n\t\tmax-width: calc(var(--fullwidth) * 6);\n\t\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\n\t\t// Make sure all rows are the same height\n\t\tgrid-auto-rows: 1fr;\n\t\t// Center the columns set\n\t\tjustify-content: center;\n\t}\n\n\t&__buttons {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\tpadding: calc(var(--margin) * 2) var(--margin);\n\t\tposition: sticky;\n\t\tbottom: 0;\n\t\tbackground-image: linear-gradient(0, var(--gradient-main-background));\n\n\t\tbutton, input[type='submit'] {\n\t\t\theight: 44px;\n\t\t}\n\t}\n\n\t// Make sure we're relative for the loading emptycontent on top\n\t::v-deep .modal-container {\n\t\tposition: relative;\n\t}\n\n\t&__loading {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tmargin: 0;\n\t\tbackground-color: var(--color-main-background-translucent);\n\t}\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=script&lang=js&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=style&index=0&id=55dd9121&prod&lang=scss&scoped=true&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=style&index=0&id=55dd9121&prod&lang=scss&scoped=true&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TemplatePicker.vue?vue&type=template&id=55dd9121&scoped=true&\"\nimport script from \"./TemplatePicker.vue?vue&type=script&lang=js&\"\nexport * from \"./TemplatePicker.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TemplatePicker.vue?vue&type=style&index=0&id=55dd9121&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"55dd9121\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.opened)?_c('NcModal',{staticClass:\"templates-picker\",attrs:{\"clear-view-delay\":-1,\"size\":\"normal\"},on:{\"close\":_vm.close}},[_c('form',{staticClass:\"templates-picker__form\",style:(_vm.style),on:{\"submit\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.onSubmit.apply(null, arguments)}}},[_c('h2',[_vm._v(_vm._s(_vm.t('files', 'Pick a template for {name}', { name: _vm.nameWithoutExt })))]),_vm._v(\" \"),_c('ul',{staticClass:\"templates-picker__list\"},[_c('TemplatePreview',_vm._b({attrs:{\"checked\":_vm.checked === _vm.emptyTemplate.fileid},on:{\"check\":_vm.onCheck}},'TemplatePreview',_vm.emptyTemplate,false)),_vm._v(\" \"),_vm._l((_vm.provider.templates),function(template){return _c('TemplatePreview',_vm._b({key:template.fileid,attrs:{\"checked\":_vm.checked === template.fileid,\"ratio\":_vm.provider.ratio},on:{\"check\":_vm.onCheck}},'TemplatePreview',template,false))})],2),_vm._v(\" \"),_c('div',{staticClass:\"templates-picker__buttons\"},[_c('button',{on:{\"click\":_vm.close}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'Cancel'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('input',{staticClass:\"primary\",attrs:{\"type\":\"submit\",\"aria-label\":_vm.t('files', 'Create a new file with the selected template')},domProps:{\"value\":_vm.t('files', 'Create')}})])]),_vm._v(\" \"),(_vm.loading)?_c('NcEmptyContent',{staticClass:\"templates-picker__loading\",attrs:{\"icon\":\"icon-loading\"}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('files', 'Creating file'))+\"\\n\\t\")]):_vm._e()],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\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\nimport { getLoggerBuilder } from '@nextcloud/logger'\nimport { loadState } from '@nextcloud/initial-state'\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { getCurrentDirectory } from './utils/davUtils'\nimport axios from '@nextcloud/axios'\nimport Vue from 'vue'\n\nimport TemplatePickerView from './views/TemplatePicker'\nimport { showError } from '@nextcloud/dialogs'\n\n// Set up logger\nconst logger = getLoggerBuilder()\n\t.setApp('files')\n\t.detectUser()\n\t.build()\n\n// Add translates functions\nVue.mixin({\n\tmethods: {\n\t\tt,\n\t\tn,\n\t},\n})\n\n// Create document root\nconst TemplatePickerRoot = document.createElement('div')\nTemplatePickerRoot.id = 'template-picker'\ndocument.body.appendChild(TemplatePickerRoot)\n\n// Retrieve and init templates\nlet templates = loadState('files', 'templates', [])\nlet templatesPath = loadState('files', 'templates_path', false)\nlogger.debug('Templates providers', templates)\nlogger.debug('Templates folder', { templatesPath })\n\n// Init vue app\nconst View = Vue.extend(TemplatePickerView)\nconst TemplatePicker = new View({\n\tname: 'TemplatePicker',\n\tpropsData: {\n\t\tlogger,\n\t},\n})\nTemplatePicker.$mount('#template-picker')\n\n// Init template engine after load to make sure it's the last injected entry\nwindow.addEventListener('DOMContentLoaded', function() {\n\tif (!templatesPath) {\n\t\tlogger.debug('Templates folder not initialized')\n\t\tconst initTemplatesPlugin = {\n\t\t\tattach(menu) {\n\t\t\t\t// register the new menu entry\n\t\t\t\tmenu.addMenuEntry({\n\t\t\t\t\tid: 'template-init',\n\t\t\t\t\tdisplayName: t('files', 'Set up templates folder'),\n\t\t\t\t\ttemplateName: t('files', 'Templates'),\n\t\t\t\t\ticonClass: 'icon-template-add',\n\t\t\t\t\tfileType: 'file',\n\t\t\t\t\tactionHandler(name) {\n\t\t\t\t\t\tinitTemplatesFolder(name)\n\t\t\t\t\t\tmenu.removeMenuEntry('template-init')\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t},\n\t\t}\n\t\tOC.Plugins.register('OCA.Files.NewFileMenu', initTemplatesPlugin)\n\t}\n})\n\n// Init template files menu\ntemplates.forEach((provider, index) => {\n\tconst newTemplatePlugin = {\n\t\tattach(menu) {\n\t\t\tconst fileList = menu.fileList\n\n\t\t\t// only attach to main file list, public view is not supported yet\n\t\t\tif (fileList.id !== 'files' && fileList.id !== 'files.public') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// register the new menu entry\n\t\t\tmenu.addMenuEntry({\n\t\t\t\tid: `template-new-${provider.app}-${index}`,\n\t\t\t\tdisplayName: provider.label,\n\t\t\t\ttemplateName: provider.label + provider.extension,\n\t\t\t\ticonClass: provider.iconClass || 'icon-file',\n\t\t\t\tfileType: 'file',\n\t\t\t\tactionHandler(name) {\n\t\t\t\t\tTemplatePicker.open(name, provider)\n\t\t\t\t},\n\t\t\t})\n\t\t},\n\t}\n\tOC.Plugins.register('OCA.Files.NewFileMenu', newTemplatePlugin)\n})\n\n/**\n * Init the template directory\n *\n * @param {string} name the templates folder name\n */\nconst initTemplatesFolder = async function(name) {\n\tconst templatePath = (getCurrentDirectory() + `/${name}`).replace('//', '/')\n\ttry {\n\t\tlogger.debug('Initializing the templates directory', { templatePath })\n\t\tconst response = await axios.post(generateOcsUrl('apps/files/api/v1/templates/path'), {\n\t\t\ttemplatePath,\n\t\t\tcopySystemTemplates: true,\n\t\t})\n\n\t\t// Go to template directory\n\t\tOCA.Files.App.currentFileList.changeDirectory(templatePath, true, true)\n\n\t\ttemplates = response.data.ocs.data.templates\n\t\ttemplatesPath = response.data.ocs.data.template_path\n\t} catch (error) {\n\t\tlogger.error('Unable to initialize the templates directory')\n\t\tshowError(t('files', 'Unable to initialize the templates directory'))\n\t}\n}\n","/*\n * @copyright Copyright (c) 2021 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\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\nimport { subscribe } from '@nextcloud/event-bus'\n\n(function() {\n\n\tconst FilesPlugin = {\n\t\tattach(fileList) {\n\t\t\tsubscribe('nextcloud:unified-search.search', ({ query }) => {\n\t\t\t\tfileList.setFilter(query)\n\t\t\t})\n\t\t\tsubscribe('nextcloud:unified-search.reset', () => {\n\t\t\t\tthis.query = null\n\t\t\t\tfileList.setFilter('')\n\t\t\t})\n\n\t\t},\n\t}\n\n\twindow.OC.Plugins.register('OCA.Files.FileList', FilesPlugin)\n\n})()\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\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 */\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nexport default getLoggerBuilder()\n\t.setApp('files')\n\t.detectUser()\n\t.build()\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\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\nimport { loadState } from '@nextcloud/initial-state'\nimport logger from '../logger.js'\n\n/**\n * Fetch and register the legacy files views\n */\nexport default function() {\n\tconst legacyViews = Object.values(loadState('files', 'navigation', {}))\n\n\tif (legacyViews.length > 0) {\n\t\tlogger.debug('Legacy files views detected. Processing...', legacyViews)\n\t\tlegacyViews.forEach(view => {\n\t\t\tregisterLegacyView(view)\n\t\t\tif (view.sublist) {\n\t\t\t\tview.sublist.forEach(subview => registerLegacyView({ ...subview, parent: view.id }))\n\t\t\t}\n\t\t})\n\t}\n}\n\nconst registerLegacyView = function({ id, name, order, icon, parent, classes = '', expanded, params }) {\n\tOCP.Files.Navigation.register({\n\t\tid,\n\t\tname,\n\t\torder,\n\t\tparams,\n\t\tparent,\n\t\texpanded: expanded === true,\n\t\ticonClass: icon ? `icon-${icon}` : 'nav-icon-' + id,\n\t\tlegacy: true,\n\t\tsticky: classes.includes('pinned'),\n\t})\n}\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\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 */\nimport type Node from '@nextcloud/files/dist/files/node'\nimport isSvg from 'is-svg'\n\nimport logger from '../logger'\n\nexport interface Column {\n\t/** Unique column ID */\n\tid: string\n\t/** Translated column title */\n\ttitle: string\n\t/** Property key from Node main or additional attributes.\n\tWill be used if no custom sort function is provided.\n\tSorting will be done by localCompare */\n\tproperty: string\n\t/** Special function used to sort Nodes between them */\n\tsortFunction?: (nodeA: Node, nodeB: Node) => number;\n\t/** Custom summary of the column to display at the end of the list.\n\t Will not be displayed if  nothing is provided */\n\tsummary?: (node: Node[]) => string\n}\n\nexport interface Navigation {\n\t/** Unique view ID */\n\tid: string\n\t/** Translated view name */\n\tname: string\n\t/** Method return the content of the  provided path */\n\tgetFiles: (path: string) => Node[]\n\t/** The view icon as an inline svg */\n\ticon: string\n\t/** The view order */\n\torder: number\n\t/** This view column(s). Name and actions are\n\tby default always included */\n\tcolumns?: Column[]\n\t/** The empty view element to render your empty content into */\n\temptyView?: (div: HTMLDivElement) => void\n\t/** The parent unique ID */\n\tparent?: string\n\t/** This view is sticky (sent at the bottom) */\n\tsticky?: boolean\n\t/** This view has children and is expanded or not */\n\texpanded?: boolean\n\n\t/**\n\t * This view is sticky a legacy view.\n\t * Here until all the views are migrated to Vue.\n\t * @deprecated It will be removed in a near future\n\t */\n\tlegacy?: boolean\n\t/**\n\t * An icon class. \n\t * @deprecated It will be removed in a near future\n\t */\n\ticonClass?: string\n}\n\nexport default class {\n\n\tprivate _views: Navigation[] = []\n\tprivate _currentView: Navigation | null = null\n\n\tconstructor() {\n\t\tlogger.debug('Navigation service initialized')\n\t}\n\n\tregister(view: Navigation) {\n\t\ttry {\n\t\t\tisValidNavigation(view)\n\t\t\tisUniqueNavigation(view, this._views)\n\t\t} catch (e) {\n\t\t\tif (e instanceof Error) {\n\t\t\t\tlogger.error(e.message, { view })\n\t\t\t}\n\t\t\tthrow e\n\t\t}\n\n\t\tif (view.legacy) {\n\t\t\tlogger.warn('Legacy view detected, please migrate to Vue')\n\t\t}\n\n\t\tif (view.iconClass) {\n\t\t\tview.legacy = true\n\t\t}\n\n\t\tthis._views.push(view)\n\t}\n\n\tget views(): Navigation[] {\n\t\treturn this._views\n\t}\n\n\tsetActive(view: Navigation | null) {\n\t\tthis._currentView = view\n\t}\n\n\tget active(): Navigation | null {\n\t\treturn this._currentView\n\t}\n\n}\n\n/**\n * Make sure the given view is unique\n * and not already registered.\n */\nconst isUniqueNavigation = function(view: Navigation, views: Navigation[]): boolean {\n\tif (views.find(search => search.id === view.id)) {\n\t\tthrow new Error(`Navigation id ${view.id} is already registered`)\n\t}\n\treturn true\n}\n\n/**\n * Typescript cannot validate an interface.\n * Please keep in sync with the Navigation interface requirements.\n */\nconst isValidNavigation = function(view: Navigation): boolean {\n\tif (!view.id || typeof view.id !== 'string') {\n\t\tthrow new Error('Navigation id is required and must be a string')\n\t}\n\n\tif (!view.name || typeof view.name !== 'string') {\n\t\tthrow new Error('Navigation name is required and must be a string')\n\t}\n\n\t/**\n\t * Legacy handle their content and icon differently\n\t * TODO: remove when support for legacy views is removed\n\t */\n\tif (!view.legacy) {\n\t\tif (!view.getFiles || typeof view.getFiles !== 'function') {\n\t\t\tthrow new Error('Navigation getFiles is required and must be a function')\n\t\t}\n\n\t\tif (!view.icon || typeof view.icon !== 'string' || !isSvg(view.icon)) {\n\t\t\tthrow new Error('Navigation icon is required and must be a valid svg string')\n\t\t}\n\t}\n\n\tif (!('order' in view) || typeof view.order !== 'number') {\n\t\tthrow new Error('Navigation order is required and must be a number')\n\t}\n\n\t// Optional properties\n\tif (view.columns) {\n\t\tview.columns.forEach(isValidColumn)\n\t}\n\n\tif (view.emptyView && typeof view.emptyView !== 'function') {\n\t\tthrow new Error('Navigation emptyView must be a function')\n\t}\n\n\tif (view.parent && typeof view.parent !== 'string') {\n\t\tthrow new Error('Navigation parent must be a string')\n\t}\n\n\tif ('sticky' in view && typeof view.sticky !== 'boolean') {\n\t\tthrow new Error('Navigation sticky must be a boolean')\n\t}\n\n\tif ('expanded' in view && typeof view.expanded !== 'boolean') {\n\t\tthrow new Error('Navigation expanded must be a boolean')\n\t}\n\n\treturn true\n}\n\n/**\n * Typescript cannot validate an interface.\n * Please keep in sync with the Column interface requirements.\n */\nconst isValidColumn = function(column: Column): boolean {\n\tif (!column.id || typeof column.id !== 'string') {\n\t\tthrow new Error('Column id is required')\n\t}\n\n\tif (!column.title || typeof column.title !== 'string') {\n\t\tthrow new Error('Column title is required')\n\t}\n\n\tif (!column.property || typeof column.property !== 'string') {\n\t\tthrow new Error('Column property is required')\n\t}\n\n\t// Optional properties\n\tif (column.sortFunction && typeof column.sortFunction !== 'function') {\n\t\tthrow new Error('Column sortFunction must be a function')\n\t}\n\n\tif (column.summary && typeof column.summary !== 'function') {\n\t\tthrow new Error('Column summary must be a function')\n\t}\n\n\treturn true\n}\n","<template>\n\t<NcAppNavigationItem v-if=\"storageStats\"\n\t\t:aria-label=\"t('files', 'Storage informations')\"\n\t\t:class=\"{ 'app-navigation-entry__settings-quota--not-unlimited': storageStats.quota >= 0}\"\n\t\t:loading=\"loadingStorageStats\"\n\t\t:name=\"storageStatsTitle\"\n\t\t:title=\"storageStatsTooltip\"\n\t\tclass=\"app-navigation-entry__settings-quota\"\n\t\tdata-cy-files-navigation-settings-quota\n\t\t@click.stop.prevent=\"debounceUpdateStorageStats\">\n\t\t<ChartPie slot=\"icon\" :size=\"20\" />\n\n\t\t<!-- Progress bar -->\n\t\t<NcProgressBar v-if=\"storageStats.quota >= 0\"\n\t\t\tslot=\"extra\"\n\t\t\t:error=\"storageStats.relative > 80\"\n\t\t\t:value=\"Math.min(storageStats.relative, 100)\" />\n\t</NcAppNavigationItem>\n</template>\n\n<script>\nimport { formatFileSize } from '@nextcloud/files'\nimport { generateUrl } from '@nextcloud/router'\nimport { loadState } from '@nextcloud/initial-state'\nimport { showError } from '@nextcloud/dialogs'\nimport { debounce, throttle } from 'throttle-debounce'\nimport { translate } from '@nextcloud/l10n'\nimport axios from '@nextcloud/axios'\nimport ChartPie from 'vue-material-design-icons/ChartPie.vue'\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'\nimport NcProgressBar from '@nextcloud/vue/dist/Components/NcProgressBar.js'\n\nimport logger from '../logger.js'\nimport { subscribe } from '@nextcloud/event-bus'\n\nexport default {\n\tname: 'NavigationQuota',\n\n\tcomponents: {\n\t\tChartPie,\n\t\tNcAppNavigationItem,\n\t\tNcProgressBar,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloadingStorageStats: false,\n\t\t\tstorageStats: loadState('files', 'storageStats', null),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tstorageStatsTitle() {\n\t\t\tconst usedQuotaByte = formatFileSize(this.storageStats?.used)\n\t\t\tconst quotaByte = formatFileSize(this.storageStats?.quota)\n\n\t\t\t// If no quota set\n\t\t\tif (this.storageStats?.quota < 0) {\n\t\t\t\treturn this.t('files', '{usedQuotaByte} used', { usedQuotaByte })\n\t\t\t}\n\n\t\t\treturn this.t('files', '{used} of {quota} used', {\n\t\t\t\tused: usedQuotaByte,\n\t\t\t\tquota: quotaByte,\n\t\t\t})\n\t\t},\n\t\tstorageStatsTooltip() {\n\t\t\tif (!this.storageStats.relative) {\n\t\t\t\treturn ''\n\t\t\t}\n\n\t\t\treturn this.t('files', '{relative}% used', this.storageStats)\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\t/**\n\t\t * Update storage stats every minute\n\t\t * TODO: remove when all views are migrated to Vue\n\t\t */\n\t\tsetInterval(this.throttleUpdateStorageStats, 60 * 1000)\n\n\t\tsubscribe('files:file:created', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:file:deleted', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:file:moved', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:file:updated', this.throttleUpdateStorageStats)\n\n\t\tsubscribe('files:folder:created', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:folder:deleted', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:folder:moved', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:folder:updated', this.throttleUpdateStorageStats)\n\t},\n\n\tmethods: {\n\t\t// From user input\n\t\tdebounceUpdateStorageStats: debounce(200, function(event) {\n\t\t\tthis.updateStorageStats(event)\n\t\t}),\n\t\t// From interval or event bus\n\t\tthrottleUpdateStorageStats: throttle(1000, function(event) {\n\t\t\tthis.updateStorageStats(event)\n\t\t}),\n\n\t\t/**\n\t\t * Update the storage stats\n\t\t * Throttled at max 1 refresh per minute\n\t\t *\n\t\t * @param {Event} [event = null] if user interaction\n\t\t */\n\t\tasync updateStorageStats(event = null) {\n\t\t\tif (this.loadingStorageStats) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.loadingStorageStats = true\n\t\t\ttry {\n\t\t\t\tconst response = await axios.get(generateUrl('/apps/files/api/v1/stats'))\n\t\t\t\tif (!response?.data?.data) {\n\t\t\t\t\tthrow new Error('Invalid storage stats')\n\t\t\t\t}\n\t\t\t\tthis.storageStats = response.data.data\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('Could not refresh storage stats', { error })\n\t\t\t\t// Only show to the user if it was manually triggered\n\t\t\t\tif (event) {\n\t\t\t\t\tshowError(t('files', 'Could not refresh storage stats'))\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tthis.loadingStorageStats = false\n\t\t\t}\n\t\t},\n\n\t\tt: translate,\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n// User storage stats display\n.app-navigation-entry__settings-quota {\n\t// Align title with progress and icon\n\t&--not-unlimited::v-deep .app-navigation-entry__title {\n\t\tmargin-top: -4px;\n\t}\n\n\tprogress {\n\t\tposition: absolute;\n\t\tbottom: 10px;\n\t\tmargin-left: 44px;\n\t\twidth: calc(100% - 44px - 22px);\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=script&lang=js&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=style&index=0&id=26c061ec&prod&lang=scss&scoped=true&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=style&index=0&id=26c061ec&prod&lang=scss&scoped=true&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./NavigationQuota.vue?vue&type=template&id=26c061ec&scoped=true&\"\nimport script from \"./NavigationQuota.vue?vue&type=script&lang=js&\"\nexport * from \"./NavigationQuota.vue?vue&type=script&lang=js&\"\nimport style0 from \"./NavigationQuota.vue?vue&type=style&index=0&id=26c061ec&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"26c061ec\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.storageStats)?_c('NcAppNavigationItem',{staticClass:\"app-navigation-entry__settings-quota\",class:{ 'app-navigation-entry__settings-quota--not-unlimited': _vm.storageStats.quota >= 0},attrs:{\"aria-label\":_vm.t('files', 'Storage informations'),\"loading\":_vm.loadingStorageStats,\"name\":_vm.storageStatsTitle,\"title\":_vm.storageStatsTooltip,\"data-cy-files-navigation-settings-quota\":\"\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.debounceUpdateStorageStats.apply(null, arguments)}}},[_c('ChartPie',{attrs:{\"slot\":\"icon\",\"size\":20},slot:\"icon\"}),_vm._v(\" \"),(_vm.storageStats.quota >= 0)?_c('NcProgressBar',{attrs:{\"slot\":\"extra\",\"error\":_vm.storageStats.relative > 80,\"value\":Math.min(_vm.storageStats.relative, 100)},slot:\"extra\"}):_vm._e()],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Setting.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Setting.vue?vue&type=script&lang=js&\"","<!--\n  - @copyright Copyright (c) 2020 Gary Kim <gary@garykim.dev>\n  -\n  - @author Gary Kim <gary@garykim.dev>\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<template>\n\t<div />\n</template>\n<script>\nexport default {\n\tname: 'Setting',\n\tprops: {\n\t\tel: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.$el.appendChild(this.el())\n\t},\n}\n</script>\n","import { render, staticRenderFns } from \"./Setting.vue?vue&type=template&id=03406edc&\"\nimport script from \"./Setting.vue?vue&type=script&lang=js&\"\nexport * from \"./Setting.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div')\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n  - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n  -\n  - @author Gary Kim <gary@garykim.dev>\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<template>\n\t<NcAppSettingsDialog :open=\"open\"\n\t\t:show-navigation=\"true\"\n\t\t:title=\"t('files', 'Files settings')\"\n\t\t@update:open=\"onClose\">\n\t\t<!-- Settings API-->\n\t\t<NcAppSettingsSection id=\"settings\" :title=\"t('files', 'Files settings')\">\n\t\t\t<NcCheckboxRadioSwitch :checked.sync=\"show_hidden\"\n\t\t\t\t@update:checked=\"setConfig('show_hidden', $event)\">\n\t\t\t\t{{ t('files', 'Show hidden files') }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t<NcCheckboxRadioSwitch :checked.sync=\"crop_image_previews\"\n\t\t\t\t@update:checked=\"setConfig('crop_image_previews', $event)\">\n\t\t\t\t{{ t('files', 'Crop image previews') }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t</NcAppSettingsSection>\n\n\t\t<!-- Settings API-->\n\t\t<NcAppSettingsSection v-if=\"settings.length !== 0\"\n\t\t\tid=\"more-settings\"\n\t\t\t:title=\"t('files', 'Additional settings')\">\n\t\t\t<template v-for=\"setting in settings\">\n\t\t\t\t<Setting :key=\"setting.name\" :el=\"setting.el\" />\n\t\t\t</template>\n\t\t</NcAppSettingsSection>\n\n\t\t<!-- Webdav URL-->\n\t\t<NcAppSettingsSection id=\"webdav\" :title=\"t('files', 'WebDAV')\">\n\t\t\t<NcInputField id=\"webdav-url-input\"\n\t\t\t\t:show-trailing-button=\"true\"\n\t\t\t\t:success=\"webdavUrlCopied\"\n\t\t\t\t:trailing-button-label=\"t('files', 'Copy to clipboard')\"\n\t\t\t\t:value=\"webdavUrl\"\n\t\t\t\treadonly=\"readonly\"\n\t\t\t\ttype=\"url\"\n\t\t\t\t@focus=\"$event.target.select()\"\n\t\t\t\t@trailing-button-click=\"copyCloudId\">\n\t\t\t\t<template #trailing-button-icon>\n\t\t\t\t\t<Clipboard :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcInputField>\n\t\t\t<em>\n\t\t\t\t<a :href=\"webdavDocs\" target=\"_blank\" rel=\"noreferrer noopener\">\n\t\t\t\t\t{{ t('files', 'Use this address to access your Files via WebDAV') }} ↗\n\t\t\t\t</a>\n\t\t\t</em>\n\t\t\t<br />\n\t\t\t<em>\n\t\t\t\t<a :href=\"appPasswordUrl\">\n\t\t\t\t\t{{ t('files', 'If you have enabled 2FA, you must create and use a new app password by clicking here.') }}\n\t\t\t\t</a>\n\t\t\t</em>\n\t\t</NcAppSettingsSection>\n\t</NcAppSettingsDialog>\n</template>\n\n<script>\nimport NcAppSettingsDialog from '@nextcloud/vue/dist/Components/NcAppSettingsDialog.js'\nimport NcAppSettingsSection from '@nextcloud/vue/dist/Components/NcAppSettingsSection.js'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'\nimport Clipboard from 'vue-material-design-icons/Clipboard.vue'\nimport NcInputField from '@nextcloud/vue/dist/Components/NcInputField'\nimport Setting from '../components/Setting.vue'\n\nimport { emit } from '@nextcloud/event-bus'\nimport { generateRemoteUrl, generateUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { loadState } from '@nextcloud/initial-state'\nimport { showError, showSuccess } from '@nextcloud/dialogs'\nimport { translate } from '@nextcloud/l10n'\nimport axios from '@nextcloud/axios'\n\nconst userConfig = loadState('files', 'config', {\n\tshow_hidden: false,\n\tcrop_image_previews: true,\n})\n\nexport default {\n\tname: 'Settings',\n\tcomponents: {\n\t\tClipboard,\n\t\tNcAppSettingsDialog,\n\t\tNcAppSettingsSection,\n\t\tNcCheckboxRadioSwitch,\n\t\tNcInputField,\n\t\tSetting,\n\t},\n\n\tprops: {\n\t\topen: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\n\t\t\t...userConfig,\n\n\t\t\t// Settings API\n\t\t\tsettings: window.OCA?.Files?.Settings?.settings || [],\n\n\t\t\t// Webdav infos\n\t\t\twebdavUrl: generateRemoteUrl('dav/files/' + encodeURIComponent(getCurrentUser()?.uid)),\n\t\t\twebdavDocs: 'https://docs.nextcloud.com/server/stable/go.php?to=user-webdav',\n\t\t\tappPasswordUrl: generateUrl('/settings/user/security#generate-app-token-section'),\n\t\t\twebdavUrlCopied: false,\n\t\t}\n\t},\n\n\tbeforeMount() {\n\t\t// Update the settings API entries state\n\t\tthis.settings.forEach(setting => setting.open())\n\t},\n\n\tbeforeDestroy() {\n\t\t// Update the settings API entries state\n\t\tthis.settings.forEach(setting => setting.close())\n\t},\n\n\tmethods: {\n\t\tonClose() {\n\t\t\tthis.$emit('close')\n\t\t},\n\n\t\tsetConfig(key, value) {\n\t\t\temit('files:config:updated', { key, value })\n\t\t\taxios.post(generateUrl('/apps/files/api/v1/config/' + key), {\n\t\t\t\tvalue,\n\t\t\t})\n\t\t},\n\n\t\tasync copyCloudId() {\n\t\t\tdocument.querySelector('input#webdav-url-input').select()\n\n\t\t\tif (!navigator.clipboard) {\n\t\t\t\t// Clipboard API not available\n\t\t\t\tshowError(t('files', 'Clipboard is not available'))\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tawait navigator.clipboard.writeText(this.webdavUrl)\n\t\t\tthis.webdavUrlCopied = true\n\t\t\tshowSuccess(t('files', 'WebDAV URL copied to clipboard'))\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.webdavUrlCopied = false\n\t\t\t}, 5000)\n\t\t},\n\n\t\tt: translate,\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Settings.vue?vue&type=template&id=9ad9e82a&scoped=true&\"\nimport script from \"./Settings.vue?vue&type=script&lang=js&\"\nexport * from \"./Settings.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"9ad9e82a\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcAppSettingsDialog',{attrs:{\"open\":_vm.open,\"show-navigation\":true,\"title\":_vm.t('files', 'Files settings')},on:{\"update:open\":_vm.onClose}},[_c('NcAppSettingsSection',{attrs:{\"id\":\"settings\",\"title\":_vm.t('files', 'Files settings')}},[_c('NcCheckboxRadioSwitch',{attrs:{\"checked\":_vm.show_hidden},on:{\"update:checked\":[function($event){_vm.show_hidden=$event},function($event){return _vm.setConfig('show_hidden', $event)}]}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files', 'Show hidden files'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('NcCheckboxRadioSwitch',{attrs:{\"checked\":_vm.crop_image_previews},on:{\"update:checked\":[function($event){_vm.crop_image_previews=$event},function($event){return _vm.setConfig('crop_image_previews', $event)}]}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files', 'Crop image previews'))+\"\\n\\t\\t\")])],1),_vm._v(\" \"),(_vm.settings.length !== 0)?_c('NcAppSettingsSection',{attrs:{\"id\":\"more-settings\",\"title\":_vm.t('files', 'Additional settings')}},[_vm._l((_vm.settings),function(setting){return [_c('Setting',{key:setting.name,attrs:{\"el\":setting.el}})]})],2):_vm._e(),_vm._v(\" \"),_c('NcAppSettingsSection',{attrs:{\"id\":\"webdav\",\"title\":_vm.t('files', 'WebDAV')}},[_c('NcInputField',{attrs:{\"id\":\"webdav-url-input\",\"show-trailing-button\":true,\"success\":_vm.webdavUrlCopied,\"trailing-button-label\":_vm.t('files', 'Copy to clipboard'),\"value\":_vm.webdavUrl,\"readonly\":\"readonly\",\"type\":\"url\"},on:{\"focus\":function($event){return $event.target.select()},\"trailing-button-click\":_vm.copyCloudId},scopedSlots:_vm._u([{key:\"trailing-button-icon\",fn:function(){return [_c('Clipboard',{attrs:{\"size\":20}})]},proxy:true}])}),_vm._v(\" \"),_c('em',[_c('a',{attrs:{\"href\":_vm.webdavDocs,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'Use this address to access your Files via WebDAV'))+\" ↗\\n\\t\\t\\t\")])]),_vm._v(\" \"),_c('br'),_vm._v(\" \"),_c('em',[_c('a',{attrs:{\"href\":_vm.appPasswordUrl}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'If you have enabled 2FA, you must create and use a new app password by clicking here.'))+\"\\n\\t\\t\\t\")])])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n  - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n  -\n  - @author Gary Kim <gary@garykim.dev>\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<template>\n\t<NcAppNavigation data-cy-files-navigation>\n\t\t<template #list>\n\t\t\t<NcAppNavigationItem v-for=\"view in parentViews\"\n\t\t\t\t:key=\"view.id\"\n\t\t\t\t:allow-collapse=\"true\"\n\t\t\t\t:data-cy-files-navigation-item=\"view.id\"\n\t\t\t\t:icon=\"view.iconClass\"\n\t\t\t\t:open=\"view.expanded\"\n\t\t\t\t:pinned=\"view.sticky\"\n\t\t\t\t:title=\"view.name\"\n\t\t\t\t:to=\"generateToNavigation(view)\"\n\t\t\t\t@update:open=\"onToggleExpand(view)\">\n\t\t\t\t<NcAppNavigationItem v-for=\"child in childViews[view.id]\"\n\t\t\t\t\t:key=\"child.id\"\n\t\t\t\t\t:data-cy-files-navigation-item=\"child.id\"\n\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\t:icon=\"child.iconClass\"\n\t\t\t\t\t:title=\"child.name\"\n\t\t\t\t\t:to=\"generateToNavigation(child)\" />\n\t\t\t</NcAppNavigationItem>\n\t\t</template>\n\n\t\t<!-- Non-scrollable navigation bottom elements -->\n\t\t<template #footer>\n\t\t\t<ul class=\"app-navigation-entry__settings\">\n\t\t\t\t<!-- User storage usage statistics -->\n\t\t\t\t<NavigationQuota />\n\n\t\t\t\t<!-- Files settings modal toggle-->\n\t\t\t\t<NcAppNavigationItem :aria-label=\"t('files', 'Open the files app settings')\"\n\t\t\t\t\t:title=\"t('files', 'Files settings')\"\n\t\t\t\t\tdata-cy-files-navigation-settings-button\n\t\t\t\t\t@click.prevent.stop=\"openSettings\">\n\t\t\t\t\t<Cog slot=\"icon\" :size=\"20\" />\n\t\t\t\t</NcAppNavigationItem>\n\t\t\t</ul>\n\t\t</template>\n\n\t\t<!-- Settings modal-->\n\t\t<SettingsModal :open=\"settingsOpened\"\n\t\t\tdata-cy-files-navigation-settings\n\t\t\t@close=\"onSettingsClose\" />\n\t</NcAppNavigation>\n</template>\n\n<script>\nimport { emit, subscribe } from '@nextcloud/event-bus'\nimport { generateUrl } from '@nextcloud/router'\nimport { translate } from '@nextcloud/l10n'\n\nimport axios from '@nextcloud/axios'\nimport Cog from 'vue-material-design-icons/Cog.vue'\nimport NcAppNavigation from '@nextcloud/vue/dist/Components/NcAppNavigation.js'\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'\n\nimport logger from '../logger.js'\nimport Navigation from '../services/Navigation.ts'\nimport NavigationQuota from '../components/NavigationQuota.vue'\nimport SettingsModal from './Settings.vue'\n\nexport default {\n\tname: 'Navigation',\n\n\tcomponents: {\n\t\tCog,\n\t\tNcAppNavigation,\n\t\tNcAppNavigationItem,\n\t\tSettingsModal,\n\t\tNavigationQuota,\n\t},\n\n\tprops: {\n\t\t// eslint-disable-next-line vue/prop-name-casing\n\t\tNavigation: {\n\t\t\ttype: Navigation,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tsettingsOpened: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcurrentViewId() {\n\t\t\treturn this.$route?.params?.view || 'files'\n\t\t},\n\n\t\t/** @return {Navigation} */\n\t\tcurrentView() {\n\t\t\treturn this.views.find(view => view.id === this.currentViewId)\n\t\t},\n\n\t\t/** @return {Navigation[]} */\n\t\tviews() {\n\t\t\treturn this.Navigation.views\n\t\t},\n\n\t\t/** @return {Navigation[]} */\n\t\tparentViews() {\n\t\t\treturn this.views\n\t\t\t\t// filter child views\n\t\t\t\t.filter(view => !view.parent)\n\t\t\t\t// sort views by order\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\treturn a.order - b.order\n\t\t\t\t})\n\t\t},\n\n\t\t/** @return {Navigation[]} */\n\t\tchildViews() {\n\t\t\treturn this.views\n\t\t\t\t// filter parent views\n\t\t\t\t.filter(view => !!view.parent)\n\t\t\t\t// create a map of parents and their children\n\t\t\t\t.reduce((list, view) => {\n\t\t\t\t\tlist[view.parent] = [...(list[view.parent] || []), view]\n\t\t\t\t\t// Sort children by order\n\t\t\t\t\tlist[view.parent].sort((a, b) => {\n\t\t\t\t\t\treturn a.order - b.order\n\t\t\t\t\t})\n\t\t\t\t\treturn list\n\t\t\t\t}, {})\n\t\t},\n\t},\n\n\twatch: {\n\t\tcurrentView(view, oldView) {\n\t\t\tlogger.debug('View changed', { id: view.id, view })\n\t\t\tthis.showView(view, oldView)\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\tif (this.currentView) {\n\t\t\tlogger.debug('Navigation mounted. Showing requested view', { view: this.currentView })\n\t\t\tthis.showView(this.currentView)\n\t\t}\n\n\t\tsubscribe('files:legacy-navigation:changed', this.onLegacyNavigationChanged)\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * @param {Navigation} view the new active view\n\t\t * @param {Navigation} oldView the old active view\n\t\t */\n\t\tshowView(view, oldView) {\n\t\t\t// Closing any opened sidebar\n\t\t\twindow?.OCA?.Files?.Sidebar?.close?.()\n\n\t\t\tif (view.legacy) {\n\t\t\t\tconst newAppContent = document.querySelector('#app-content #app-content-' + this.currentView.id + '.viewcontainer')\n\t\t\t\tdocument.querySelectorAll('#app-content .viewcontainer').forEach(el => {\n\t\t\t\t\tel.classList.add('hidden')\n\t\t\t\t})\n\t\t\t\tnewAppContent.classList.remove('hidden')\n\n\t\t\t\t// Triggering legacy navigation events\n\t\t\t\tconst { dir = '/' } = OC.Util.History.parseUrlQuery()\n\t\t\t\tconst params = { itemId: view.id, dir }\n\n\t\t\t\tlogger.debug('Triggering legacy navigation event', params)\n\t\t\t\twindow.jQuery(newAppContent).trigger(new window.jQuery.Event('show', params))\n\t\t\t\twindow.jQuery(newAppContent).trigger(new window.jQuery.Event('urlChanged', params))\n\n\t\t\t}\n\n\t\t\tthis.Navigation.setActive(view)\n\t\t\temit('files:navigation:changed', view)\n\t\t},\n\n\t\t/**\n\t\t * Coming from the legacy files app.\n\t\t * TODO: remove when all views are migrated.\n\t\t *\n\t\t * @param {Navigation} view the new active view\n\t\t */\n\t\tonLegacyNavigationChanged({ id } = { id: 'files' }) {\n\t\t\tconst view = this.Navigation.views.find(view => view.id === id)\n\t\t\tif (view && view.legacy && view.id !== this.currentView.id) {\n\t\t\t\t// Force update the current route as the request comes\n\t\t\t\t// from the legacy files app router\n\t\t\t\tthis.$router.replace({ ...this.$route, params: { view: view.id } })\n\t\t\t\tthis.Navigation.setActive(view)\n\t\t\t\tthis.showView(view)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Expand/collapse a a view with children and permanently\n\t\t * save this setting in the server.\n\t\t *\n\t\t * @param {Navigation} view the view to toggle\n\t\t */\n\t\tonToggleExpand(view) {\n\t\t\t// Invert state\n\t\t\tview.expanded = !view.expanded\n\t\t\taxios.post(generateUrl(`/apps/files/api/v1/toggleShowFolder/${view.id}`), { show: view.expanded })\n\t\t},\n\n\t\t/**\n\t\t * Generate the route to a view\n\t\t *\n\t\t * @param {Navigation} view the view to toggle\n\t\t */\n\t\tgenerateToNavigation(view) {\n\t\t\tif (view.params) {\n\t\t\t\tconst { dir, fileid } = view.params\n\t\t\t\treturn { name: 'filelist', params: view.params, query: { dir, fileid } }\n\t\t\t}\n\t\t\treturn { name: 'filelist', params: { view: view.id } }\n\t\t},\n\n\t\t/**\n\t\t * Open the settings modal\n\t\t */\n\t\topenSettings() {\n\t\t\tthis.settingsOpened = true\n\t\t},\n\n\t\t/**\n\t\t * Close the settings modal\n\t\t */\n\t\tonSettingsClose() {\n\t\t\tthis.settingsOpened = false\n\t\t},\n\n\t\tt: translate,\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n// TODO: remove when https://github.com/nextcloud/nextcloud-vue/pull/3539 is in\n.app-navigation::v-deep .app-navigation-entry-icon {\n\tbackground-repeat: no-repeat;\n\tbackground-position: center;\n}\n\n.app-navigation > ul.app-navigation__list {\n\t// Use flex gap value for more elegant spacing\n\tpadding-bottom: var(--default-grid-baseline, 4px);\n}\n\n.app-navigation-entry__settings {\n\theight: auto !important;\n\toverflow: hidden !important;\n\tpadding-top: 0 !important;\n\t// Prevent shrinking or growing\n\tflex: 0 0 auto;\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=script&lang=js&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=style&index=0&id=83bb0f06&prod&scoped=true&lang=scss&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=style&index=0&id=83bb0f06&prod&scoped=true&lang=scss&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Navigation.vue?vue&type=template&id=83bb0f06&scoped=true&\"\nimport script from \"./Navigation.vue?vue&type=script&lang=js&\"\nexport * from \"./Navigation.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Navigation.vue?vue&type=style&index=0&id=83bb0f06&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"83bb0f06\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcAppNavigation',{attrs:{\"data-cy-files-navigation\":\"\"},scopedSlots:_vm._u([{key:\"list\",fn:function(){return _vm._l((_vm.parentViews),function(view){return _c('NcAppNavigationItem',{key:view.id,attrs:{\"allow-collapse\":true,\"data-cy-files-navigation-item\":view.id,\"icon\":view.iconClass,\"open\":view.expanded,\"pinned\":view.sticky,\"title\":view.name,\"to\":_vm.generateToNavigation(view)},on:{\"update:open\":function($event){return _vm.onToggleExpand(view)}}},_vm._l((_vm.childViews[view.id]),function(child){return _c('NcAppNavigationItem',{key:child.id,attrs:{\"data-cy-files-navigation-item\":child.id,\"exact\":true,\"icon\":child.iconClass,\"title\":child.name,\"to\":_vm.generateToNavigation(child)}})}),1)})},proxy:true},{key:\"footer\",fn:function(){return [_c('ul',{staticClass:\"app-navigation-entry__settings\"},[_c('NavigationQuota'),_vm._v(\" \"),_c('NcAppNavigationItem',{attrs:{\"aria-label\":_vm.t('files', 'Open the files app settings'),\"title\":_vm.t('files', 'Files settings'),\"data-cy-files-navigation-settings-button\":\"\"},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.openSettings.apply(null, arguments)}}},[_c('Cog',{attrs:{\"slot\":\"icon\",\"size\":20},slot:\"icon\"})],1)],1)]},proxy:true}])},[_vm._v(\" \"),_vm._v(\" \"),_c('SettingsModal',{attrs:{\"open\":_vm.settingsOpened,\"data-cy-files-navigation-settings\":\"\"},on:{\"close\":_vm.onSettingsClose}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n *\n * @author Gary Kim <gary@garykim.dev>\n *\n * @license AGPL-3.0-or-later\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\nexport default class Settings {\n\n\t_settings\n\n\tconstructor() {\n\t\tthis._settings = []\n\t\tconsole.debug('OCA.Files.Settings initialized')\n\t}\n\n\t/**\n\t * Register a new setting\n\t *\n\t * @since 19.0.0\n\t * @param {OCA.Files.Settings.Setting} view element to add to settings\n\t * @return {boolean} whether registering was successful\n\t */\n\tregister(view) {\n\t\tif (this._settings.filter(e => e.name === view.name).length > 0) {\n\t\t\tconsole.error('A setting with the same name is already registered')\n\t\t\treturn false\n\t\t}\n\t\tthis._settings.push(view)\n\t\treturn true\n\t}\n\n\t/**\n\t * All settings elements\n\t *\n\t * @return {OCA.Files.Settings.Setting[]} All currently registered settings\n\t */\n\tget settings() {\n\t\treturn this._settings\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Gary Kim <gary@garykim.dev>\n *\n * @license AGPL-3.0-or-later\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\nexport default class Setting {\n\n\t_close\n\t_el\n\t_name\n\t_open\n\n\t/**\n\t * Create a new files app setting\n\t *\n\t * @since 19.0.0\n\t * @param {string} name the name of this setting\n\t * @param {object} component the component\n\t * @param {Function} component.el function that returns an unmounted dom element to be added\n\t * @param {Function} [component.open] callback for when setting is added\n\t * @param {Function} [component.close] callback for when setting is closed\n\t */\n\tconstructor(name, { el, open, close }) {\n\t\tthis._name = name\n\t\tthis._el = el\n\t\tthis._open = open\n\t\tthis._close = close\n\n\t\tif (typeof this._open !== 'function') {\n\t\t\tthis._open = () => {}\n\t\t}\n\n\t\tif (typeof this._close !== 'function') {\n\t\t\tthis._close = () => {}\n\t\t}\n\t}\n\n\tget name() {\n\t\treturn this._name\n\t}\n\n\tget el() {\n\t\treturn this._el\n\t}\n\n\tget open() {\n\t\treturn this._open\n\t}\n\n\tget close() {\n\t\treturn this._close\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\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 */\nimport Vue from 'vue'\nimport Router from 'vue-router'\nimport { generateUrl } from '@nextcloud/router'\nimport { stringify } from 'query-string'\n\nVue.use(Router)\n\nconst router = new Router({\n\tmode: 'history',\n\n\t// if index.php is in the url AND we got this far, then it's working:\n\t// let's keep using index.php in the url\n\tbase: generateUrl('/apps/files', ''),\n\tlinkActiveClass: 'active',\n\n\troutes: [\n\t\t{\n\t\t\tpath: '/',\n\t\t\t// Pretending we're using the default view\n\t\t\talias: '/files',\n\t\t},\n\t\t{\n\t\t\tpath: '/:view/:fileid?',\n\t\t\tname: 'filelist',\n\t\t\tprops: true,\n\t\t},\n\t],\n\n\t// Custom stringifyQuery to prevent encoding of slashes in the url\n\tstringifyQuery(query) {\n\t\tconst result = stringify(query).replace(/%2F/gmi, '/')\n\t\treturn result ? ('?' + result) : ''\n\t},\n})\n\nexport default router\n","import './templates.js'\nimport './legacy/filelistSearch.js'\nimport processLegacyFilesViews from './legacy/navigationMapper.js'\n\nimport Vue from 'vue'\nimport NavigationService from './services/Navigation.ts'\nimport NavigationView from './views/Navigation.vue'\n\nimport SettingsService from './services/Settings.js'\nimport SettingsModel from './models/Setting.js'\n\nimport router from './router/router.js'\n\n// Init private and public Files namespace\nwindow.OCA.Files = window.OCA.Files ?? {}\nwindow.OCP.Files = window.OCP.Files ?? {}\n\n// Init Navigation Service\nconst Navigation = new NavigationService()\nObject.assign(window.OCP.Files, { Navigation })\n\n// Init Files App Settings Service\nconst Settings = new SettingsService()\nObject.assign(window.OCA.Files, { Settings })\nObject.assign(window.OCA.Files.Settings, { Setting: SettingsModel })\n\n// Init Navigation View\nconst View = Vue.extend(NavigationView)\nconst FilesNavigationRoot = new View({\n\tname: 'FilesNavigationRoot',\n\tpropsData: {\n\t\tNavigation,\n\t},\n\trouter,\n})\nFilesNavigationRoot.$mount('#app-navigation-files')\n\n// Init legacy files views\nprocessLegacyFilesViews()\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-navigation-entry__settings-quota--not-unlimited[data-v-26c061ec] .app-navigation-entry__title{margin-top:-4px}.app-navigation-entry__settings-quota progress[data-v-26c061ec]{position:absolute;bottom:10px;margin-left:44px;width:calc(100% - 44px - 22px)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/NavigationQuota.vue\"],\"names\":[],\"mappings\":\"AAIC,mGACC,eAAA,CAGD,gEACC,iBAAA,CACA,WAAA,CACA,gBAAA,CACA,8BAAA\",\"sourcesContent\":[\"\\n// User storage stats display\\n.app-navigation-entry__settings-quota {\\n\\t// Align title with progress and icon\\n\\t&--not-unlimited::v-deep .app-navigation-entry__title {\\n\\t\\tmargin-top: -4px;\\n\\t}\\n\\n\\tprogress {\\n\\t\\tposition: absolute;\\n\\t\\tbottom: 10px;\\n\\t\\tmargin-left: 44px;\\n\\t\\twidth: calc(100% - 44px - 22px);\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".template-picker__item[data-v-440aea22]{display:flex}.template-picker__label[data-v-440aea22]{display:flex;align-items:center;flex:1 1;flex-direction:column}.template-picker__label[data-v-440aea22],.template-picker__label *[data-v-440aea22]{cursor:pointer;user-select:none}.template-picker__label[data-v-440aea22]::before{display:none !important}.template-picker__preview[data-v-440aea22]{display:block;overflow:hidden;flex:1 1;width:var(--width);min-height:var(--height);max-height:var(--height);padding:0;border:var(--border) solid var(--color-border);border-radius:var(--border-radius-large)}input:checked+label>.template-picker__preview[data-v-440aea22]{border-color:var(--color-primary)}.template-picker__preview--failed[data-v-440aea22]{display:flex}.template-picker__image[data-v-440aea22]{max-width:100%;background-color:var(--color-main-background);object-fit:cover}.template-picker__preview--failed .template-picker__image[data-v-440aea22]{width:calc(var(--margin)*8);margin:auto;background-color:rgba(0,0,0,0) !important;object-fit:initial}.template-picker__title[data-v-440aea22]{overflow:hidden;max-width:calc(var(--width) + 4px);padding:var(--margin);white-space:nowrap;text-overflow:ellipsis}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/TemplatePreview.vue\"],\"names\":[],\"mappings\":\"AAGC,wCACC,YAAA,CAGD,yCACC,YAAA,CAEA,kBAAA,CACA,QAAA,CACA,qBAAA,CAEA,oFACC,cAAA,CACA,gBAAA,CAGD,iDACC,uBAAA,CAIF,2CACC,aAAA,CACA,eAAA,CAEA,QAAA,CACA,kBAAA,CACA,wBAAA,CACA,wBAAA,CACA,SAAA,CACA,8CAAA,CACA,wCAAA,CAEA,+DACC,iCAAA,CAGD,mDAEC,YAAA,CAIF,yCACC,cAAA,CACA,6CAAA,CAEA,gBAAA,CAID,2EACC,2BAAA,CAEA,WAAA,CACA,yCAAA,CAEA,kBAAA,CAGD,yCACC,eAAA,CAEA,kCAAA,CACA,qBAAA,CACA,kBAAA,CACA,sBAAA\",\"sourcesContent\":[\"\\n\\n.template-picker {\\n\\t&__item {\\n\\t\\tdisplay: flex;\\n\\t}\\n\\n\\t&__label {\\n\\t\\tdisplay: flex;\\n\\t\\t// Align in the middle of the grid\\n\\t\\talign-items: center;\\n\\t\\tflex: 1 1;\\n\\t\\tflex-direction: column;\\n\\n\\t\\t&, * {\\n\\t\\t\\tcursor: pointer;\\n\\t\\t\\tuser-select: none;\\n\\t\\t}\\n\\n\\t\\t&::before {\\n\\t\\t\\tdisplay: none !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&__preview {\\n\\t\\tdisplay: block;\\n\\t\\toverflow: hidden;\\n\\t\\t// Stretch so all entries are the same width\\n\\t\\tflex: 1 1;\\n\\t\\twidth: var(--width);\\n\\t\\tmin-height: var(--height);\\n\\t\\tmax-height: var(--height);\\n\\t\\tpadding: 0;\\n\\t\\tborder: var(--border) solid var(--color-border);\\n\\t\\tborder-radius: var(--border-radius-large);\\n\\n\\t\\tinput:checked + label > & {\\n\\t\\t\\tborder-color: var(--color-primary);\\n\\t\\t}\\n\\n\\t\\t&--failed {\\n\\t\\t\\t// Make sure to properly center fallback icon\\n\\t\\t\\tdisplay: flex;\\n\\t\\t}\\n\\t}\\n\\n\\t&__image {\\n\\t\\tmax-width: 100%;\\n\\t\\tbackground-color: var(--color-main-background);\\n\\n\\t\\tobject-fit: cover;\\n\\t}\\n\\n\\t// Failed preview, fallback to mime icon\\n\\t&__preview--failed &__image {\\n\\t\\twidth: calc(var(--margin) * 8);\\n\\t\\t// Center mime icon\\n\\t\\tmargin: auto;\\n\\t\\tbackground-color: transparent !important;\\n\\n\\t\\tobject-fit: initial;\\n\\t}\\n\\n\\t&__title {\\n\\t\\toverflow: hidden;\\n\\t\\t// also count preview border\\n\\t\\tmax-width: calc(var(--width) + 2*2px);\\n\\t\\tpadding: var(--margin);\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-navigation[data-v-83bb0f06] .app-navigation-entry-icon{background-repeat:no-repeat;background-position:center}.app-navigation>ul.app-navigation__list[data-v-83bb0f06]{padding-bottom:var(--default-grid-baseline, 4px)}.app-navigation-entry__settings[data-v-83bb0f06]{height:auto !important;overflow:hidden !important;padding-top:0 !important;flex:0 0 auto}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/Navigation.vue\"],\"names\":[],\"mappings\":\"AAEA,4DACC,2BAAA,CACA,0BAAA,CAGD,yDAEC,gDAAA,CAGD,iDACC,sBAAA,CACA,0BAAA,CACA,wBAAA,CAEA,aAAA\",\"sourcesContent\":[\"\\n// TODO: remove when https://github.com/nextcloud/nextcloud-vue/pull/3539 is in\\n.app-navigation::v-deep .app-navigation-entry-icon {\\n\\tbackground-repeat: no-repeat;\\n\\tbackground-position: center;\\n}\\n\\n.app-navigation > ul.app-navigation__list {\\n\\t// Use flex gap value for more elegant spacing\\n\\tpadding-bottom: var(--default-grid-baseline, 4px);\\n}\\n\\n.app-navigation-entry__settings {\\n\\theight: auto !important;\\n\\toverflow: hidden !important;\\n\\tpadding-top: 0 !important;\\n\\t// Prevent shrinking or growing\\n\\tflex: 0 0 auto;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".templates-picker__form[data-v-55dd9121]{padding:calc(var(--margin)*2);padding-bottom:0}.templates-picker__form h2[data-v-55dd9121]{text-align:center;font-weight:bold;margin:var(--margin) 0 calc(var(--margin)*2)}.templates-picker__list[data-v-55dd9121]{display:grid;grid-gap:calc(var(--margin)*2);grid-auto-columns:1fr;max-width:calc(var(--fullwidth)*6);grid-template-columns:repeat(auto-fit, var(--fullwidth));grid-auto-rows:1fr;justify-content:center}.templates-picker__buttons[data-v-55dd9121]{display:flex;justify-content:space-between;padding:calc(var(--margin)*2) var(--margin);position:sticky;bottom:0;background-image:linear-gradient(0, var(--gradient-main-background))}.templates-picker__buttons button[data-v-55dd9121],.templates-picker__buttons input[type=submit][data-v-55dd9121]{height:44px}.templates-picker[data-v-55dd9121] .modal-container{position:relative}.templates-picker__loading[data-v-55dd9121]{position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;margin:0;background-color:var(--color-main-background-translucent)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/TemplatePicker.vue\"],\"names\":[],\"mappings\":\"AAEC,yCACC,6BAAA,CAEA,gBAAA,CAEA,4CACC,iBAAA,CACA,gBAAA,CACA,4CAAA,CAIF,yCACC,YAAA,CACA,8BAAA,CACA,qBAAA,CAEA,kCAAA,CACA,wDAAA,CAEA,kBAAA,CAEA,sBAAA,CAGD,4CACC,YAAA,CACA,6BAAA,CACA,2CAAA,CACA,eAAA,CACA,QAAA,CACA,oEAAA,CAEA,kHACC,WAAA,CAKF,oDACC,iBAAA,CAGD,4CACC,iBAAA,CACA,KAAA,CACA,MAAA,CACA,sBAAA,CACA,UAAA,CACA,WAAA,CACA,QAAA,CACA,yDAAA\",\"sourcesContent\":[\"\\n.templates-picker {\\n\\t&__form {\\n\\t\\tpadding: calc(var(--margin) * 2);\\n\\t\\t// Will be handled by the buttons\\n\\t\\tpadding-bottom: 0;\\n\\n\\t\\th2 {\\n\\t\\t\\ttext-align: center;\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t\\tmargin: var(--margin) 0 calc(var(--margin) * 2);\\n\\t\\t}\\n\\t}\\n\\n\\t&__list {\\n\\t\\tdisplay: grid;\\n\\t\\tgrid-gap: calc(var(--margin) * 2);\\n\\t\\tgrid-auto-columns: 1fr;\\n\\t\\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\\n\\t\\tmax-width: calc(var(--fullwidth) * 6);\\n\\t\\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\\n\\t\\t// Make sure all rows are the same height\\n\\t\\tgrid-auto-rows: 1fr;\\n\\t\\t// Center the columns set\\n\\t\\tjustify-content: center;\\n\\t}\\n\\n\\t&__buttons {\\n\\t\\tdisplay: flex;\\n\\t\\tjustify-content: space-between;\\n\\t\\tpadding: calc(var(--margin) * 2) var(--margin);\\n\\t\\tposition: sticky;\\n\\t\\tbottom: 0;\\n\\t\\tbackground-image: linear-gradient(0, var(--gradient-main-background));\\n\\n\\t\\tbutton, input[type='submit'] {\\n\\t\\t\\theight: 44px;\\n\\t\\t}\\n\\t}\\n\\n\\t// Make sure we're relative for the loading emptycontent on top\\n\\t::v-deep .modal-container {\\n\\t\\tposition: relative;\\n\\t}\\n\\n\\t&__loading {\\n\\t\\tposition: absolute;\\n\\t\\ttop: 0;\\n\\t\\tleft: 0;\\n\\t\\tjustify-content: center;\\n\\t\\twidth: 100%;\\n\\t\\theight: 100%;\\n\\t\\tmargin: 0;\\n\\t\\tbackground-color: var(--color-main-background-translucent);\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 2181;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2181: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], function() { return __webpack_require__(91320); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","getCurrentDirectory","currentDirInfo","OCA","Files","App","currentFileList","dirInfo","path","name","replace","getTemplates","axios","generateOcsUrl","response","data","ocs","createFromTemplate","filePath","templatePath","templateType","inheritAttrs","props","basename","type","required","checked","default","fileid","filename","previewUrl","hasPreview","mime","ratio","failedPreview","computed","nameWithoutExt","id","realPreviewUrl","getCurrentUser","document","getElementById","value","pathSections","startsWith","split","relativePath","forEach","section","encodeURIComponent","mimeIcon","methods","onCheck","onFailure","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_c","_self","staticClass","attrs","domProps","on","_v","class","_s","components","NcEmptyContent","NcModal","TemplatePreview","logger","loading","opened","provider","emptyTemplate","selectedTemplate","style","open","templates","fetchedProvider","close","onSubmit","currentDirectory","fileList","extension","normalize","fileInfo","model","filesClient","fileAction","$file","dir","fileActions","fileInfoModel","console","showError","$event","preventDefault","stopPropagation","apply","arguments","t","_b","_l","template","key","_e","getLoggerBuilder","setApp","detectUser","build","Vue","n","TemplatePickerRoot","createElement","body","appendChild","loadState","templatesPath","debug","TemplatePicker","TemplatePickerView","propsData","$mount","window","addEventListener","initTemplatesPlugin","attach","menu","addMenuEntry","displayName","templateName","iconClass","fileType","actionHandler","initTemplatesFolder","removeMenuEntry","OC","Plugins","register","index","newTemplatePlugin","app","label","FilesPlugin","copySystemTemplates","changeDirectory","template_path","error","subscribe","query","setFilter","registerLegacyView","order","icon","parent","classes","expanded","params","OCP","Navigation","legacy","sticky","includes","view","isValidNavigation","isUniqueNavigation","_views","e","Error","message","push","_currentView","views","find","search","getFiles","isSvg","columns","isValidColumn","emptyView","column","title","property","sortFunction","summary","ChartPie","NcAppNavigationItem","NcProgressBar","loadingStorageStats","storageStats","storageStatsTitle","usedQuotaByte","used","quota","storageStatsTooltip","beforeMount","setInterval","debounceUpdateStorageStats","throttleUpdateStorageStats","updateStorageStats","event","slot","relative","Math","min","el","mounted","show_hidden","crop_image_previews","Clipboard","NcAppSettingsDialog","NcAppSettingsSection","NcCheckboxRadioSwitch","NcInputField","Setting","userConfig","settings","webdavUrl","webdavDocs","appPasswordUrl","webdavUrlCopied","beforeDestroy","onClose","setConfig","emit","copyCloudId","navigator","showSuccess","setTimeout","length","setting","target","select","scopedSlots","_u","fn","proxy","Cog","NcAppNavigation","SettingsModal","NavigationQuota","settingsOpened","currentViewId","currentView","parentViews","filter","sort","childViews","reduce","list","watch","showView","newAppContent","itemId","onLegacyNavigationChanged","onToggleExpand","show","generateToNavigation","openSettings","onSettingsClose","child","Settings","_settings","_name","_el","_open","_close","Router","mode","base","generateUrl","linkActiveClass","routes","alias","stringifyQuery","result","stringify","NavigationService","Object","assign","legacyViews","SettingsService","SettingsModel","NavigationView","router","values","sublist","subview","___CSS_LOADER_EXPORT___","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","O","chunkIds","priority","notFulfilled","Infinity","i","fulfilled","j","keys","every","splice","r","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","baseURI","self","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","bind","nc","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"files-main.js?v=98a5e02f80255aeef25c","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/files/src/utils/davUtils.js","webpack:///nextcloud/apps/files/src/services/Templates.js","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue","webpack:///nextcloud/apps/files/src/utils/fileUtils.js","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?c067","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?81db","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?c414","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?023e","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?afd8","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?1f7b","webpack:///nextcloud/apps/files/src/templates.js","webpack:///nextcloud/apps/files/src/legacy/filelistSearch.js","webpack:///nextcloud/apps/files/src/logger.js","webpack:///nextcloud/apps/files/src/legacy/navigationMapper.js","webpack:///nextcloud/apps/files/src/services/Navigation.ts","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?2b80","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?2966","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?08cb","webpack:///nextcloud/apps/files/src/components/Setting.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files/src/components/Setting.vue","webpack://nextcloud/./apps/files/src/components/Setting.vue?98ea","webpack://nextcloud/./apps/files/src/components/Setting.vue?8d57","webpack:///nextcloud/apps/files/src/views/Settings.vue","webpack:///nextcloud/apps/files/src/views/Settings.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/Settings.vue?6520","webpack://nextcloud/./apps/files/src/views/Settings.vue?b81b","webpack://nextcloud/./apps/files/src/views/Settings.vue?84f7","webpack:///nextcloud/apps/files/src/views/Navigation.vue","webpack:///nextcloud/apps/files/src/views/Navigation.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/Navigation.vue?98f5","webpack://nextcloud/./apps/files/src/views/Navigation.vue?74b9","webpack://nextcloud/./apps/files/src/views/Navigation.vue?8122","webpack:///nextcloud/apps/files/src/services/Settings.js","webpack:///nextcloud/apps/files/src/models/Setting.js","webpack:///nextcloud/apps/files/src/router/router.js","webpack:///nextcloud/apps/files/src/main.js","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue?vue&type=style&index=0&id=26c061ec&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue?vue&type=style&index=0&id=440aea22&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/views/Navigation.vue?vue&type=style&index=0&id=83bb0f06&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/views/Settings.vue?vue&type=style&index=0&id=c2541792&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue?vue&type=style&index=0&id=55dd9121&prod&lang=scss&scoped=true&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\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\nimport { generateRemoteUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\n\nexport const getRootPath = function() {\n\tif (getCurrentUser()) {\n\t\treturn generateRemoteUrl(`dav/files/${getCurrentUser().uid}`)\n\t} else {\n\t\treturn generateRemoteUrl('webdav').replace('/remote.php', '/public.php')\n\t}\n}\n\nexport const isPublic = function() {\n\treturn !getCurrentUser()\n}\n\nexport const getToken = function() {\n\treturn document.getElementById('sharingToken') && document.getElementById('sharingToken').value\n}\n\n/**\n * Return the current directory, fallback to root\n *\n * @return {string}\n */\nexport const getCurrentDirectory = function() {\n\tconst currentDirInfo = OCA?.Files?.App?.currentFileList?.dirInfo\n\t\t|| { path: '/', name: '' }\n\n\t// Make sure we don't have double slashes\n\treturn `${currentDirInfo.path}/${currentDirInfo.name}`.replace(/\\/\\//gi, '/')\n}\n","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\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\nimport { generateOcsUrl } from '@nextcloud/router'\nimport axios from '@nextcloud/axios'\n\nexport const getTemplates = async function() {\n\tconst response = await axios.get(generateOcsUrl('apps/files/api/v1/templates'))\n\treturn response.data.ocs.data\n}\n\n/**\n * Create a new file from a specified template\n *\n * @param {string} filePath The new file destination path\n * @param {string} templatePath The template source path\n * @param {string} templateType The template type e.g 'user'\n */\nexport const createFromTemplate = async function(filePath, templatePath, templateType) {\n\tconst response = await axios.post(generateOcsUrl('apps/files/api/v1/templates/create'), {\n\t\tfilePath,\n\t\ttemplatePath,\n\t\ttemplateType,\n\t})\n\treturn response.data.ocs.data\n}\n","<!--\n  - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @author John Molakvoæ <skjnldsv@protonmail.com>\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<template>\n\t<li class=\"template-picker__item\">\n\t\t<input :id=\"id\"\n\t\t\t:checked=\"checked\"\n\t\t\ttype=\"radio\"\n\t\t\tclass=\"radio\"\n\t\t\tname=\"template-picker\"\n\t\t\t@change=\"onCheck\">\n\n\t\t<label :for=\"id\" class=\"template-picker__label\">\n\t\t\t<div class=\"template-picker__preview\"\n\t\t\t\t:class=\"failedPreview ? 'template-picker__preview--failed' : ''\">\n\t\t\t\t<img class=\"template-picker__image\"\n\t\t\t\t\t:src=\"realPreviewUrl\"\n\t\t\t\t\talt=\"\"\n\t\t\t\t\tdraggable=\"false\"\n\t\t\t\t\t@error=\"onFailure\">\n\t\t\t</div>\n\n\t\t\t<span class=\"template-picker__title\">\n\t\t\t\t{{ nameWithoutExt }}\n\t\t\t</span>\n\t\t</label>\n\t</li>\n</template>\n\n<script>\nimport { generateUrl } from '@nextcloud/router'\nimport { encodeFilePath } from '../utils/fileUtils'\nimport { getToken, isPublic } from '../utils/davUtils'\n\n// preview width generation\nconst previewWidth = 256\n\nexport default {\n\tname: 'TemplatePreview',\n\tinheritAttrs: false,\n\n\tprops: {\n\t\tbasename: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tchecked: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tfileid: {\n\t\t\ttype: [String, Number],\n\t\t\trequired: true,\n\t\t},\n\t\tfilename: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tpreviewUrl: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\thasPreview: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tmime: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tratio: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tfailedPreview: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Strip away extension from name\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tnameWithoutExt() {\n\t\t\treturn this.basename.indexOf('.') > -1 ? this.basename.split('.').slice(0, -1).join('.') : this.basename\n\t\t},\n\n\t\tid() {\n\t\t\treturn `template-picker-${this.fileid}`\n\t\t},\n\n\t\trealPreviewUrl() {\n\t\t\t// If original preview failed, fallback to mime icon\n\t\t\tif (this.failedPreview && this.mimeIcon) {\n\t\t\t\treturn this.mimeIcon\n\t\t\t}\n\n\t\t\tif (this.previewUrl) {\n\t\t\t\treturn this.previewUrl\n\t\t\t}\n\t\t\t// TODO: find a nicer standard way of doing this?\n\t\t\tif (isPublic()) {\n\t\t\t\treturn generateUrl(`/apps/files_sharing/publicpreview/${getToken()}?fileId=${this.fileid}&file=${encodeFilePath(this.filename)}&x=${previewWidth}&y=${previewWidth}&a=1`)\n\t\t\t}\n\t\t\treturn generateUrl(`/core/preview?fileId=${this.fileid}&x=${previewWidth}&y=${previewWidth}&a=1`)\n\t\t},\n\n\t\tmimeIcon() {\n\t\t\treturn OC.MimeType.getIconUrl(this.mime)\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonCheck() {\n\t\t\tthis.$emit('check', this.fileid)\n\t\t},\n\t\tonFailure() {\n\t\t\tthis.failedPreview = true\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n.template-picker {\n\t&__item {\n\t\tdisplay: flex;\n\t}\n\n\t&__label {\n\t\tdisplay: flex;\n\t\t// Align in the middle of the grid\n\t\talign-items: center;\n\t\tflex: 1 1;\n\t\tflex-direction: column;\n\n\t\t&, * {\n\t\t\tcursor: pointer;\n\t\t\tuser-select: none;\n\t\t}\n\n\t\t&::before {\n\t\t\tdisplay: none !important;\n\t\t}\n\t}\n\n\t&__preview {\n\t\tdisplay: block;\n\t\toverflow: hidden;\n\t\t// Stretch so all entries are the same width\n\t\tflex: 1 1;\n\t\twidth: var(--width);\n\t\tmin-height: var(--height);\n\t\tmax-height: var(--height);\n\t\tpadding: 0;\n\t\tborder: var(--border) solid var(--color-border);\n\t\tborder-radius: var(--border-radius-large);\n\n\t\tinput:checked + label > & {\n\t\t\tborder-color: var(--color-primary);\n\t\t}\n\n\t\t&--failed {\n\t\t\t// Make sure to properly center fallback icon\n\t\t\tdisplay: flex;\n\t\t}\n\t}\n\n\t&__image {\n\t\tmax-width: 100%;\n\t\tbackground-color: var(--color-main-background);\n\n\t\tobject-fit: cover;\n\t}\n\n\t// Failed preview, fallback to mime icon\n\t&__preview--failed &__image {\n\t\twidth: calc(var(--margin) * 8);\n\t\t// Center mime icon\n\t\tmargin: auto;\n\t\tbackground-color: transparent !important;\n\n\t\tobject-fit: initial;\n\t}\n\n\t&__title {\n\t\toverflow: hidden;\n\t\t// also count preview border\n\t\tmax-width: calc(var(--width) + 2*2px);\n\t\tpadding: var(--margin);\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\n</style>\n","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\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\nconst encodeFilePath = function(path) {\n\tconst pathSections = (path.startsWith('/') ? path : `/${path}`).split('/')\n\tlet relativePath = ''\n\tpathSections.forEach((section) => {\n\t\tif (section !== '') {\n\t\t\trelativePath += '/' + encodeURIComponent(section)\n\t\t}\n\t})\n\treturn relativePath\n}\n\n/**\n * Extract dir and name from file path\n *\n * @param {string} path the full path\n * @return {string[]} [dirPath, fileName]\n */\nconst extractFilePaths = function(path) {\n\tconst pathSections = path.split('/')\n\tconst fileName = pathSections[pathSections.length - 1]\n\tconst dirPath = pathSections.slice(0, pathSections.length - 1).join('/')\n\treturn [dirPath, fileName]\n}\n\nexport { encodeFilePath, extractFilePaths }\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=script&lang=js&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=style&index=0&id=440aea22&prod&lang=scss&scoped=true&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=style&index=0&id=440aea22&prod&lang=scss&scoped=true&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TemplatePreview.vue?vue&type=template&id=440aea22&scoped=true&\"\nimport script from \"./TemplatePreview.vue?vue&type=script&lang=js&\"\nexport * from \"./TemplatePreview.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TemplatePreview.vue?vue&type=style&index=0&id=440aea22&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"440aea22\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('li',{staticClass:\"template-picker__item\"},[_c('input',{staticClass:\"radio\",attrs:{\"id\":_vm.id,\"type\":\"radio\",\"name\":\"template-picker\"},domProps:{\"checked\":_vm.checked},on:{\"change\":_vm.onCheck}}),_vm._v(\" \"),_c('label',{staticClass:\"template-picker__label\",attrs:{\"for\":_vm.id}},[_c('div',{staticClass:\"template-picker__preview\",class:_vm.failedPreview ? 'template-picker__preview--failed' : ''},[_c('img',{staticClass:\"template-picker__image\",attrs:{\"src\":_vm.realPreviewUrl,\"alt\":\"\",\"draggable\":\"false\"},on:{\"error\":_vm.onFailure}})]),_vm._v(\" \"),_c('span',{staticClass:\"template-picker__title\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.nameWithoutExt)+\"\\n\\t\\t\")])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n  - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @author John Molakvoæ <skjnldsv@protonmail.com>\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<template>\n\t<NcModal v-if=\"opened\"\n\t\t:clear-view-delay=\"-1\"\n\t\tclass=\"templates-picker\"\n\t\tsize=\"normal\"\n\t\t@close=\"close\">\n\t\t<form class=\"templates-picker__form\"\n\t\t\t:style=\"style\"\n\t\t\t@submit.prevent.stop=\"onSubmit\">\n\t\t\t<h2>{{ t('files', 'Pick a template for {name}', { name: nameWithoutExt }) }}</h2>\n\n\t\t\t<!-- Templates list -->\n\t\t\t<ul class=\"templates-picker__list\">\n\t\t\t\t<TemplatePreview v-bind=\"emptyTemplate\"\n\t\t\t\t\t:checked=\"checked === emptyTemplate.fileid\"\n\t\t\t\t\t@check=\"onCheck\" />\n\n\t\t\t\t<TemplatePreview v-for=\"template in provider.templates\"\n\t\t\t\t\t:key=\"template.fileid\"\n\t\t\t\t\tv-bind=\"template\"\n\t\t\t\t\t:checked=\"checked === template.fileid\"\n\t\t\t\t\t:ratio=\"provider.ratio\"\n\t\t\t\t\t@check=\"onCheck\" />\n\t\t\t</ul>\n\n\t\t\t<!-- Cancel and submit -->\n\t\t\t<div class=\"templates-picker__buttons\">\n\t\t\t\t<button @click=\"close\">\n\t\t\t\t\t{{ t('files', 'Cancel') }}\n\t\t\t\t</button>\n\t\t\t\t<input type=\"submit\"\n\t\t\t\t\tclass=\"primary\"\n\t\t\t\t\t:value=\"t('files', 'Create')\"\n\t\t\t\t\t:aria-label=\"t('files', 'Create a new file with the selected template')\">\n\t\t\t</div>\n\t\t</form>\n\n\t\t<NcEmptyContent v-if=\"loading\" class=\"templates-picker__loading\" icon=\"icon-loading\">\n\t\t\t{{ t('files', 'Creating file') }}\n\t\t</NcEmptyContent>\n\t</NcModal>\n</template>\n\n<script>\nimport { normalize } from 'path'\nimport { showError } from '@nextcloud/dialogs'\nimport NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent'\nimport NcModal from '@nextcloud/vue/dist/Components/NcModal'\n\nimport { getCurrentDirectory } from '../utils/davUtils'\nimport { createFromTemplate, getTemplates } from '../services/Templates'\nimport TemplatePreview from '../components/TemplatePreview'\n\nconst border = 2\nconst margin = 8\nconst width = margin * 20\n\nexport default {\n\tname: 'TemplatePicker',\n\n\tcomponents: {\n\t\tNcEmptyContent,\n\t\tNcModal,\n\t\tTemplatePreview,\n\t},\n\n\tprops: {\n\t\tlogger: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\t// Check empty template by default\n\t\t\tchecked: -1,\n\t\t\tloading: false,\n\t\t\tname: null,\n\t\t\topened: false,\n\t\t\tprovider: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Strip away extension from name\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tnameWithoutExt() {\n\t\t\treturn this.name.indexOf('.') > -1\n\t\t\t\t? this.name.split('.').slice(0, -1).join('.')\n\t\t\t\t: this.name\n\t\t},\n\n\t\temptyTemplate() {\n\t\t\treturn {\n\t\t\t\tbasename: t('files', 'Blank'),\n\t\t\t\tfileid: -1,\n\t\t\t\tfilename: this.t('files', 'Blank'),\n\t\t\t\thasPreview: false,\n\t\t\t\tmime: this.provider?.mimetypes[0] || this.provider?.mimetypes,\n\t\t\t}\n\t\t},\n\n\t\tselectedTemplate() {\n\t\t\treturn this.provider.templates.find(template => template.fileid === this.checked)\n\t\t},\n\n\t\t/**\n\t\t * Style css vars bin,d\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\tstyle() {\n\t\t\treturn {\n\t\t\t\t'--margin': margin + 'px',\n\t\t\t\t'--width': width + 'px',\n\t\t\t\t'--border': border + 'px',\n\t\t\t\t'--fullwidth': width + 2 * margin + 2 * border + 'px',\n\t\t\t\t'--height': this.provider.ratio ? Math.round(width / this.provider.ratio) + 'px' : null,\n\t\t\t}\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Open the picker\n\t\t *\n\t\t * @param {string} name the file name to create\n\t\t * @param {object} provider the template provider picked\n\t\t */\n\t\tasync open(name, provider) {\n\n\t\t\tthis.checked = this.emptyTemplate.fileid\n\t\t\tthis.name = name\n\t\t\tthis.provider = provider\n\n\t\t\tconst templates = await getTemplates()\n\t\t\tconst fetchedProvider = templates.find((fetchedProvider) => fetchedProvider.app === provider.app && fetchedProvider.label === provider.label)\n\t\t\tif (fetchedProvider === null) {\n\t\t\t\tthrow new Error('Failed to match provider in results')\n\t\t\t}\n\t\t\tthis.provider = fetchedProvider\n\n\t\t\t// If there is no templates available, just create an empty file\n\t\t\tif (fetchedProvider.templates.length === 0) {\n\t\t\t\tthis.onSubmit()\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Else, open the picker\n\t\t\tthis.opened = true\n\t\t},\n\n\t\t/**\n\t\t * Close the picker and reset variables\n\t\t */\n\t\tclose() {\n\t\t\tthis.checked = this.emptyTemplate.fileid\n\t\t\tthis.loading = false\n\t\t\tthis.name = null\n\t\t\tthis.opened = false\n\t\t\tthis.provider = null\n\t\t},\n\n\t\t/**\n\t\t * Manages the radio template picker change\n\t\t *\n\t\t * @param {number} fileid the selected template file id\n\t\t */\n\t\tonCheck(fileid) {\n\t\t\tthis.checked = fileid\n\t\t},\n\n\t\tasync onSubmit() {\n\t\t\tthis.loading = true\n\t\t\tconst currentDirectory = getCurrentDirectory()\n\t\t\tconst fileList = OCA?.Files?.App?.currentFileList\n\n\t\t\t// If the file doesn't have an extension, add the default one\n\t\t\tif (this.nameWithoutExt === this.name) {\n\t\t\t\tthis.logger.debug('Fixed invalid filename', { name: this.name, extension: this.provider?.extension })\n\t\t\t\tthis.name = this.name + this.provider?.extension\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst fileInfo = await createFromTemplate(\n\t\t\t\t\tnormalize(`${currentDirectory}/${this.name}`),\n\t\t\t\t\tthis.selectedTemplate?.filename,\n\t\t\t\t\tthis.selectedTemplate?.templateType,\n\t\t\t\t)\n\t\t\t\tthis.logger.debug('Created new file', fileInfo)\n\n\t\t\t\t// Fetch FileInfo and model\n\t\t\t\tconst data = await fileList?.addAndFetchFileInfo(this.name).then((status, data) => data)\n\t\t\t\tconst model = new OCA.Files.FileInfoModel(data, {\n\t\t\t\t\tfilesClient: fileList?.filesClient,\n\t\t\t\t})\n\n\t\t\t\t// Run default action\n\t\t\t\tconst fileAction = OCA.Files.fileActions.getDefaultFileAction(fileInfo.mime, 'file', OC.PERMISSION_ALL)\n\t\t\t\tif (fileAction) {\n\t\t\t\t\tfileAction.action(fileInfo.basename, {\n\t\t\t\t\t\t$file: fileList?.findFileEl(this.name),\n\t\t\t\t\t\tdir: currentDirectory,\n\t\t\t\t\t\tfileList,\n\t\t\t\t\t\tfileActions: fileList?.fileActions,\n\t\t\t\t\t\tfileInfoModel: model,\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.close()\n\t\t\t} catch (error) {\n\t\t\t\tthis.logger.error('Error while creating the new file from template')\n\t\t\t\tconsole.error(error)\n\t\t\t\tshowError(this.t('files', 'Unable to create new file from template'))\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.templates-picker {\n\t&__form {\n\t\tpadding: calc(var(--margin) * 2);\n\t\t// Will be handled by the buttons\n\t\tpadding-bottom: 0;\n\n\t\th2 {\n\t\t\ttext-align: center;\n\t\t\tfont-weight: bold;\n\t\t\tmargin: var(--margin) 0 calc(var(--margin) * 2);\n\t\t}\n\t}\n\n\t&__list {\n\t\tdisplay: grid;\n\t\tgrid-gap: calc(var(--margin) * 2);\n\t\tgrid-auto-columns: 1fr;\n\t\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\n\t\tmax-width: calc(var(--fullwidth) * 6);\n\t\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\n\t\t// Make sure all rows are the same height\n\t\tgrid-auto-rows: 1fr;\n\t\t// Center the columns set\n\t\tjustify-content: center;\n\t}\n\n\t&__buttons {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\tpadding: calc(var(--margin) * 2) var(--margin);\n\t\tposition: sticky;\n\t\tbottom: 0;\n\t\tbackground-image: linear-gradient(0, var(--gradient-main-background));\n\n\t\tbutton, input[type='submit'] {\n\t\t\theight: 44px;\n\t\t}\n\t}\n\n\t// Make sure we're relative for the loading emptycontent on top\n\t::v-deep .modal-container {\n\t\tposition: relative;\n\t}\n\n\t&__loading {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tmargin: 0;\n\t\tbackground-color: var(--color-main-background-translucent);\n\t}\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=script&lang=js&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=style&index=0&id=55dd9121&prod&lang=scss&scoped=true&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=style&index=0&id=55dd9121&prod&lang=scss&scoped=true&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TemplatePicker.vue?vue&type=template&id=55dd9121&scoped=true&\"\nimport script from \"./TemplatePicker.vue?vue&type=script&lang=js&\"\nexport * from \"./TemplatePicker.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TemplatePicker.vue?vue&type=style&index=0&id=55dd9121&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"55dd9121\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.opened)?_c('NcModal',{staticClass:\"templates-picker\",attrs:{\"clear-view-delay\":-1,\"size\":\"normal\"},on:{\"close\":_vm.close}},[_c('form',{staticClass:\"templates-picker__form\",style:(_vm.style),on:{\"submit\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.onSubmit.apply(null, arguments)}}},[_c('h2',[_vm._v(_vm._s(_vm.t('files', 'Pick a template for {name}', { name: _vm.nameWithoutExt })))]),_vm._v(\" \"),_c('ul',{staticClass:\"templates-picker__list\"},[_c('TemplatePreview',_vm._b({attrs:{\"checked\":_vm.checked === _vm.emptyTemplate.fileid},on:{\"check\":_vm.onCheck}},'TemplatePreview',_vm.emptyTemplate,false)),_vm._v(\" \"),_vm._l((_vm.provider.templates),function(template){return _c('TemplatePreview',_vm._b({key:template.fileid,attrs:{\"checked\":_vm.checked === template.fileid,\"ratio\":_vm.provider.ratio},on:{\"check\":_vm.onCheck}},'TemplatePreview',template,false))})],2),_vm._v(\" \"),_c('div',{staticClass:\"templates-picker__buttons\"},[_c('button',{on:{\"click\":_vm.close}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'Cancel'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('input',{staticClass:\"primary\",attrs:{\"type\":\"submit\",\"aria-label\":_vm.t('files', 'Create a new file with the selected template')},domProps:{\"value\":_vm.t('files', 'Create')}})])]),_vm._v(\" \"),(_vm.loading)?_c('NcEmptyContent',{staticClass:\"templates-picker__loading\",attrs:{\"icon\":\"icon-loading\"}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('files', 'Creating file'))+\"\\n\\t\")]):_vm._e()],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\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\nimport { getLoggerBuilder } from '@nextcloud/logger'\nimport { loadState } from '@nextcloud/initial-state'\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { getCurrentDirectory } from './utils/davUtils'\nimport axios from '@nextcloud/axios'\nimport Vue from 'vue'\n\nimport TemplatePickerView from './views/TemplatePicker'\nimport { showError } from '@nextcloud/dialogs'\n\n// Set up logger\nconst logger = getLoggerBuilder()\n\t.setApp('files')\n\t.detectUser()\n\t.build()\n\n// Add translates functions\nVue.mixin({\n\tmethods: {\n\t\tt,\n\t\tn,\n\t},\n})\n\n// Create document root\nconst TemplatePickerRoot = document.createElement('div')\nTemplatePickerRoot.id = 'template-picker'\ndocument.body.appendChild(TemplatePickerRoot)\n\n// Retrieve and init templates\nlet templates = loadState('files', 'templates', [])\nlet templatesPath = loadState('files', 'templates_path', false)\nlogger.debug('Templates providers', templates)\nlogger.debug('Templates folder', { templatesPath })\n\n// Init vue app\nconst View = Vue.extend(TemplatePickerView)\nconst TemplatePicker = new View({\n\tname: 'TemplatePicker',\n\tpropsData: {\n\t\tlogger,\n\t},\n})\nTemplatePicker.$mount('#template-picker')\n\n// Init template engine after load to make sure it's the last injected entry\nwindow.addEventListener('DOMContentLoaded', function() {\n\tif (!templatesPath) {\n\t\tlogger.debug('Templates folder not initialized')\n\t\tconst initTemplatesPlugin = {\n\t\t\tattach(menu) {\n\t\t\t\t// register the new menu entry\n\t\t\t\tmenu.addMenuEntry({\n\t\t\t\t\tid: 'template-init',\n\t\t\t\t\tdisplayName: t('files', 'Set up templates folder'),\n\t\t\t\t\ttemplateName: t('files', 'Templates'),\n\t\t\t\t\ticonClass: 'icon-template-add',\n\t\t\t\t\tfileType: 'file',\n\t\t\t\t\tactionHandler(name) {\n\t\t\t\t\t\tinitTemplatesFolder(name)\n\t\t\t\t\t\tmenu.removeMenuEntry('template-init')\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t},\n\t\t}\n\t\tOC.Plugins.register('OCA.Files.NewFileMenu', initTemplatesPlugin)\n\t}\n})\n\n// Init template files menu\ntemplates.forEach((provider, index) => {\n\tconst newTemplatePlugin = {\n\t\tattach(menu) {\n\t\t\tconst fileList = menu.fileList\n\n\t\t\t// only attach to main file list, public view is not supported yet\n\t\t\tif (fileList.id !== 'files' && fileList.id !== 'files.public') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// register the new menu entry\n\t\t\tmenu.addMenuEntry({\n\t\t\t\tid: `template-new-${provider.app}-${index}`,\n\t\t\t\tdisplayName: provider.label,\n\t\t\t\ttemplateName: provider.label + provider.extension,\n\t\t\t\ticonClass: provider.iconClass || 'icon-file',\n\t\t\t\tfileType: 'file',\n\t\t\t\tactionHandler(name) {\n\t\t\t\t\tTemplatePicker.open(name, provider)\n\t\t\t\t},\n\t\t\t})\n\t\t},\n\t}\n\tOC.Plugins.register('OCA.Files.NewFileMenu', newTemplatePlugin)\n})\n\n/**\n * Init the template directory\n *\n * @param {string} name the templates folder name\n */\nconst initTemplatesFolder = async function(name) {\n\tconst templatePath = (getCurrentDirectory() + `/${name}`).replace('//', '/')\n\ttry {\n\t\tlogger.debug('Initializing the templates directory', { templatePath })\n\t\tconst response = await axios.post(generateOcsUrl('apps/files/api/v1/templates/path'), {\n\t\t\ttemplatePath,\n\t\t\tcopySystemTemplates: true,\n\t\t})\n\n\t\t// Go to template directory\n\t\tOCA.Files.App.currentFileList.changeDirectory(templatePath, true, true)\n\n\t\ttemplates = response.data.ocs.data.templates\n\t\ttemplatesPath = response.data.ocs.data.template_path\n\t} catch (error) {\n\t\tlogger.error('Unable to initialize the templates directory')\n\t\tshowError(t('files', 'Unable to initialize the templates directory'))\n\t}\n}\n","/*\n * @copyright Copyright (c) 2021 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\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\nimport { subscribe } from '@nextcloud/event-bus'\n\n(function() {\n\n\tconst FilesPlugin = {\n\t\tattach(fileList) {\n\t\t\tsubscribe('nextcloud:unified-search.search', ({ query }) => {\n\t\t\t\tfileList.setFilter(query)\n\t\t\t})\n\t\t\tsubscribe('nextcloud:unified-search.reset', () => {\n\t\t\t\tthis.query = null\n\t\t\t\tfileList.setFilter('')\n\t\t\t})\n\n\t\t},\n\t}\n\n\twindow.OC.Plugins.register('OCA.Files.FileList', FilesPlugin)\n\n})()\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\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 */\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nexport default getLoggerBuilder()\n\t.setApp('files')\n\t.detectUser()\n\t.build()\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\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\nimport { loadState } from '@nextcloud/initial-state'\nimport logger from '../logger.js'\n\n/**\n * Fetch and register the legacy files views\n */\nexport default function() {\n\tconst legacyViews = Object.values(loadState('files', 'navigation', {}))\n\n\tif (legacyViews.length > 0) {\n\t\tlogger.debug('Legacy files views detected. Processing...', legacyViews)\n\t\tlegacyViews.forEach(view => {\n\t\t\tregisterLegacyView(view)\n\t\t\tif (view.sublist) {\n\t\t\t\tview.sublist.forEach(subview => registerLegacyView({ ...subview, parent: view.id }))\n\t\t\t}\n\t\t})\n\t}\n}\n\nconst registerLegacyView = function({ id, name, order, icon, parent, classes = '', expanded, params }) {\n\tOCP.Files.Navigation.register({\n\t\tid,\n\t\tname,\n\t\torder,\n\t\tparams,\n\t\tparent,\n\t\texpanded: expanded === true,\n\t\ticonClass: icon ? `icon-${icon}` : 'nav-icon-' + id,\n\t\tlegacy: true,\n\t\tsticky: classes.includes('pinned'),\n\t})\n}\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\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 */\nimport type Node from '@nextcloud/files/dist/files/node'\nimport isSvg from 'is-svg'\n\nimport logger from '../logger'\n\nexport interface Column {\n\t/** Unique column ID */\n\tid: string\n\t/** Translated column title */\n\ttitle: string\n\t/** Property key from Node main or additional attributes.\n\tWill be used if no custom sort function is provided.\n\tSorting will be done by localCompare */\n\tproperty: string\n\t/** Special function used to sort Nodes between them */\n\tsortFunction?: (nodeA: Node, nodeB: Node) => number;\n\t/** Custom summary of the column to display at the end of the list.\n\t Will not be displayed if  nothing is provided */\n\tsummary?: (node: Node[]) => string\n}\n\nexport interface Navigation {\n\t/** Unique view ID */\n\tid: string\n\t/** Translated view name */\n\tname: string\n\t/** Method return the content of the  provided path */\n\tgetFiles: (path: string) => Node[]\n\t/** The view icon as an inline svg */\n\ticon: string\n\t/** The view order */\n\torder: number\n\t/** This view column(s). Name and actions are\n\tby default always included */\n\tcolumns?: Column[]\n\t/** The empty view element to render your empty content into */\n\temptyView?: (div: HTMLDivElement) => void\n\t/** The parent unique ID */\n\tparent?: string\n\t/** This view is sticky (sent at the bottom) */\n\tsticky?: boolean\n\t/** This view has children and is expanded or not */\n\texpanded?: boolean\n\n\t/**\n\t * This view is sticky a legacy view.\n\t * Here until all the views are migrated to Vue.\n\t * @deprecated It will be removed in a near future\n\t */\n\tlegacy?: boolean\n\t/**\n\t * An icon class. \n\t * @deprecated It will be removed in a near future\n\t */\n\ticonClass?: string\n}\n\nexport default class {\n\n\tprivate _views: Navigation[] = []\n\tprivate _currentView: Navigation | null = null\n\n\tconstructor() {\n\t\tlogger.debug('Navigation service initialized')\n\t}\n\n\tregister(view: Navigation) {\n\t\ttry {\n\t\t\tisValidNavigation(view)\n\t\t\tisUniqueNavigation(view, this._views)\n\t\t} catch (e) {\n\t\t\tif (e instanceof Error) {\n\t\t\t\tlogger.error(e.message, { view })\n\t\t\t}\n\t\t\tthrow e\n\t\t}\n\n\t\tif (view.legacy) {\n\t\t\tlogger.warn('Legacy view detected, please migrate to Vue')\n\t\t}\n\n\t\tif (view.iconClass) {\n\t\t\tview.legacy = true\n\t\t}\n\n\t\tthis._views.push(view)\n\t}\n\n\tget views(): Navigation[] {\n\t\treturn this._views\n\t}\n\n\tsetActive(view: Navigation | null) {\n\t\tthis._currentView = view\n\t}\n\n\tget active(): Navigation | null {\n\t\treturn this._currentView\n\t}\n\n}\n\n/**\n * Make sure the given view is unique\n * and not already registered.\n */\nconst isUniqueNavigation = function(view: Navigation, views: Navigation[]): boolean {\n\tif (views.find(search => search.id === view.id)) {\n\t\tthrow new Error(`Navigation id ${view.id} is already registered`)\n\t}\n\treturn true\n}\n\n/**\n * Typescript cannot validate an interface.\n * Please keep in sync with the Navigation interface requirements.\n */\nconst isValidNavigation = function(view: Navigation): boolean {\n\tif (!view.id || typeof view.id !== 'string') {\n\t\tthrow new Error('Navigation id is required and must be a string')\n\t}\n\n\tif (!view.name || typeof view.name !== 'string') {\n\t\tthrow new Error('Navigation name is required and must be a string')\n\t}\n\n\t/**\n\t * Legacy handle their content and icon differently\n\t * TODO: remove when support for legacy views is removed\n\t */\n\tif (!view.legacy) {\n\t\tif (!view.getFiles || typeof view.getFiles !== 'function') {\n\t\t\tthrow new Error('Navigation getFiles is required and must be a function')\n\t\t}\n\n\t\tif (!view.icon || typeof view.icon !== 'string' || !isSvg(view.icon)) {\n\t\t\tthrow new Error('Navigation icon is required and must be a valid svg string')\n\t\t}\n\t}\n\n\tif (!('order' in view) || typeof view.order !== 'number') {\n\t\tthrow new Error('Navigation order is required and must be a number')\n\t}\n\n\t// Optional properties\n\tif (view.columns) {\n\t\tview.columns.forEach(isValidColumn)\n\t}\n\n\tif (view.emptyView && typeof view.emptyView !== 'function') {\n\t\tthrow new Error('Navigation emptyView must be a function')\n\t}\n\n\tif (view.parent && typeof view.parent !== 'string') {\n\t\tthrow new Error('Navigation parent must be a string')\n\t}\n\n\tif ('sticky' in view && typeof view.sticky !== 'boolean') {\n\t\tthrow new Error('Navigation sticky must be a boolean')\n\t}\n\n\tif ('expanded' in view && typeof view.expanded !== 'boolean') {\n\t\tthrow new Error('Navigation expanded must be a boolean')\n\t}\n\n\treturn true\n}\n\n/**\n * Typescript cannot validate an interface.\n * Please keep in sync with the Column interface requirements.\n */\nconst isValidColumn = function(column: Column): boolean {\n\tif (!column.id || typeof column.id !== 'string') {\n\t\tthrow new Error('Column id is required')\n\t}\n\n\tif (!column.title || typeof column.title !== 'string') {\n\t\tthrow new Error('Column title is required')\n\t}\n\n\tif (!column.property || typeof column.property !== 'string') {\n\t\tthrow new Error('Column property is required')\n\t}\n\n\t// Optional properties\n\tif (column.sortFunction && typeof column.sortFunction !== 'function') {\n\t\tthrow new Error('Column sortFunction must be a function')\n\t}\n\n\tif (column.summary && typeof column.summary !== 'function') {\n\t\tthrow new Error('Column summary must be a function')\n\t}\n\n\treturn true\n}\n","<template>\n\t<NcAppNavigationItem v-if=\"storageStats\"\n\t\t:aria-label=\"t('files', 'Storage informations')\"\n\t\t:class=\"{ 'app-navigation-entry__settings-quota--not-unlimited': storageStats.quota >= 0}\"\n\t\t:loading=\"loadingStorageStats\"\n\t\t:name=\"storageStatsTitle\"\n\t\t:title=\"storageStatsTooltip\"\n\t\tclass=\"app-navigation-entry__settings-quota\"\n\t\tdata-cy-files-navigation-settings-quota\n\t\t@click.stop.prevent=\"debounceUpdateStorageStats\">\n\t\t<ChartPie slot=\"icon\" :size=\"20\" />\n\n\t\t<!-- Progress bar -->\n\t\t<NcProgressBar v-if=\"storageStats.quota >= 0\"\n\t\t\tslot=\"extra\"\n\t\t\t:error=\"storageStats.relative > 80\"\n\t\t\t:value=\"Math.min(storageStats.relative, 100)\" />\n\t</NcAppNavigationItem>\n</template>\n\n<script>\nimport { formatFileSize } from '@nextcloud/files'\nimport { generateUrl } from '@nextcloud/router'\nimport { loadState } from '@nextcloud/initial-state'\nimport { showError } from '@nextcloud/dialogs'\nimport { debounce, throttle } from 'throttle-debounce'\nimport { translate } from '@nextcloud/l10n'\nimport axios from '@nextcloud/axios'\nimport ChartPie from 'vue-material-design-icons/ChartPie.vue'\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'\nimport NcProgressBar from '@nextcloud/vue/dist/Components/NcProgressBar.js'\n\nimport logger from '../logger.js'\nimport { subscribe } from '@nextcloud/event-bus'\n\nexport default {\n\tname: 'NavigationQuota',\n\n\tcomponents: {\n\t\tChartPie,\n\t\tNcAppNavigationItem,\n\t\tNcProgressBar,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloadingStorageStats: false,\n\t\t\tstorageStats: loadState('files', 'storageStats', null),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tstorageStatsTitle() {\n\t\t\tconst usedQuotaByte = formatFileSize(this.storageStats?.used)\n\t\t\tconst quotaByte = formatFileSize(this.storageStats?.quota)\n\n\t\t\t// If no quota set\n\t\t\tif (this.storageStats?.quota < 0) {\n\t\t\t\treturn this.t('files', '{usedQuotaByte} used', { usedQuotaByte })\n\t\t\t}\n\n\t\t\treturn this.t('files', '{used} of {quota} used', {\n\t\t\t\tused: usedQuotaByte,\n\t\t\t\tquota: quotaByte,\n\t\t\t})\n\t\t},\n\t\tstorageStatsTooltip() {\n\t\t\tif (!this.storageStats.relative) {\n\t\t\t\treturn ''\n\t\t\t}\n\n\t\t\treturn this.t('files', '{relative}% used', this.storageStats)\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\t/**\n\t\t * Update storage stats every minute\n\t\t * TODO: remove when all views are migrated to Vue\n\t\t */\n\t\tsetInterval(this.throttleUpdateStorageStats, 60 * 1000)\n\n\t\tsubscribe('files:file:created', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:file:deleted', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:file:moved', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:file:updated', this.throttleUpdateStorageStats)\n\n\t\tsubscribe('files:folder:created', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:folder:deleted', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:folder:moved', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:folder:updated', this.throttleUpdateStorageStats)\n\t},\n\n\tmethods: {\n\t\t// From user input\n\t\tdebounceUpdateStorageStats: debounce(200, function(event) {\n\t\t\tthis.updateStorageStats(event)\n\t\t}),\n\t\t// From interval or event bus\n\t\tthrottleUpdateStorageStats: throttle(1000, function(event) {\n\t\t\tthis.updateStorageStats(event)\n\t\t}),\n\n\t\t/**\n\t\t * Update the storage stats\n\t\t * Throttled at max 1 refresh per minute\n\t\t *\n\t\t * @param {Event} [event = null] if user interaction\n\t\t */\n\t\tasync updateStorageStats(event = null) {\n\t\t\tif (this.loadingStorageStats) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.loadingStorageStats = true\n\t\t\ttry {\n\t\t\t\tconst response = await axios.get(generateUrl('/apps/files/api/v1/stats'))\n\t\t\t\tif (!response?.data?.data) {\n\t\t\t\t\tthrow new Error('Invalid storage stats')\n\t\t\t\t}\n\t\t\t\tthis.storageStats = response.data.data\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('Could not refresh storage stats', { error })\n\t\t\t\t// Only show to the user if it was manually triggered\n\t\t\t\tif (event) {\n\t\t\t\t\tshowError(t('files', 'Could not refresh storage stats'))\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tthis.loadingStorageStats = false\n\t\t\t}\n\t\t},\n\n\t\tt: translate,\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n// User storage stats display\n.app-navigation-entry__settings-quota {\n\t// Align title with progress and icon\n\t&--not-unlimited::v-deep .app-navigation-entry__title {\n\t\tmargin-top: -4px;\n\t}\n\n\tprogress {\n\t\tposition: absolute;\n\t\tbottom: 10px;\n\t\tmargin-left: 44px;\n\t\twidth: calc(100% - 44px - 22px);\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=script&lang=js&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=style&index=0&id=26c061ec&prod&lang=scss&scoped=true&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=style&index=0&id=26c061ec&prod&lang=scss&scoped=true&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./NavigationQuota.vue?vue&type=template&id=26c061ec&scoped=true&\"\nimport script from \"./NavigationQuota.vue?vue&type=script&lang=js&\"\nexport * from \"./NavigationQuota.vue?vue&type=script&lang=js&\"\nimport style0 from \"./NavigationQuota.vue?vue&type=style&index=0&id=26c061ec&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"26c061ec\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.storageStats)?_c('NcAppNavigationItem',{staticClass:\"app-navigation-entry__settings-quota\",class:{ 'app-navigation-entry__settings-quota--not-unlimited': _vm.storageStats.quota >= 0},attrs:{\"aria-label\":_vm.t('files', 'Storage informations'),\"loading\":_vm.loadingStorageStats,\"name\":_vm.storageStatsTitle,\"title\":_vm.storageStatsTooltip,\"data-cy-files-navigation-settings-quota\":\"\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.debounceUpdateStorageStats.apply(null, arguments)}}},[_c('ChartPie',{attrs:{\"slot\":\"icon\",\"size\":20},slot:\"icon\"}),_vm._v(\" \"),(_vm.storageStats.quota >= 0)?_c('NcProgressBar',{attrs:{\"slot\":\"extra\",\"error\":_vm.storageStats.relative > 80,\"value\":Math.min(_vm.storageStats.relative, 100)},slot:\"extra\"}):_vm._e()],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Setting.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Setting.vue?vue&type=script&lang=js&\"","<!--\n  - @copyright Copyright (c) 2020 Gary Kim <gary@garykim.dev>\n  -\n  - @author Gary Kim <gary@garykim.dev>\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<template>\n\t<div />\n</template>\n<script>\nexport default {\n\tname: 'Setting',\n\tprops: {\n\t\tel: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.$el.appendChild(this.el())\n\t},\n}\n</script>\n","import { render, staticRenderFns } from \"./Setting.vue?vue&type=template&id=03406edc&\"\nimport script from \"./Setting.vue?vue&type=script&lang=js&\"\nexport * from \"./Setting.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div')\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n  - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n  -\n  - @author Gary Kim <gary@garykim.dev>\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<template>\n\t<NcAppSettingsDialog :open=\"open\"\n\t\t:show-navigation=\"true\"\n\t\t:title=\"t('files', 'Files settings')\"\n\t\t@update:open=\"onClose\">\n\t\t<!-- Settings API-->\n\t\t<NcAppSettingsSection id=\"settings\" :title=\"t('files', 'Files settings')\">\n\t\t\t<NcCheckboxRadioSwitch :checked.sync=\"show_hidden\"\n\t\t\t\t@update:checked=\"setConfig('show_hidden', $event)\">\n\t\t\t\t{{ t('files', 'Show hidden files') }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t<NcCheckboxRadioSwitch :checked.sync=\"crop_image_previews\"\n\t\t\t\t@update:checked=\"setConfig('crop_image_previews', $event)\">\n\t\t\t\t{{ t('files', 'Crop image previews') }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t</NcAppSettingsSection>\n\n\t\t<!-- Settings API-->\n\t\t<NcAppSettingsSection v-if=\"settings.length !== 0\"\n\t\t\tid=\"more-settings\"\n\t\t\t:title=\"t('files', 'Additional settings')\">\n\t\t\t<template v-for=\"setting in settings\">\n\t\t\t\t<Setting :key=\"setting.name\" :el=\"setting.el\" />\n\t\t\t</template>\n\t\t</NcAppSettingsSection>\n\n\t\t<!-- Webdav URL-->\n\t\t<NcAppSettingsSection id=\"webdav\" :title=\"t('files', 'WebDAV')\">\n\t\t\t<NcInputField id=\"webdav-url-input\"\n\t\t\t\t:show-trailing-button=\"true\"\n\t\t\t\t:success=\"webdavUrlCopied\"\n\t\t\t\t:trailing-button-label=\"t('files', 'Copy to clipboard')\"\n\t\t\t\t:value=\"webdavUrl\"\n\t\t\t\treadonly=\"readonly\"\n\t\t\t\ttype=\"url\"\n\t\t\t\t@focus=\"$event.target.select()\"\n\t\t\t\t@trailing-button-click=\"copyCloudId\">\n\t\t\t\t<template #trailing-button-icon>\n\t\t\t\t\t<Clipboard :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcInputField>\n\t\t\t<em>\n\t\t\t\t<a class=\"setting-link\"\n\t\t\t\t\t:href=\"webdavDocs\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noreferrer noopener\">\n\t\t\t\t\t{{ t('files', 'Use this address to access your Files via WebDAV') }} ↗\n\t\t\t\t</a>\n\t\t\t</em>\n\t\t\t<br>\n\t\t\t<em>\n\t\t\t\t<a class=\"setting-link\" :href=\"appPasswordUrl\">\n\t\t\t\t\t{{ t('files', 'If you have enabled 2FA, you must create and use a new app password by clicking here.') }} ↗\n\t\t\t\t</a>\n\t\t\t</em>\n\t\t</NcAppSettingsSection>\n\t</NcAppSettingsDialog>\n</template>\n\n<script>\nimport NcAppSettingsDialog from '@nextcloud/vue/dist/Components/NcAppSettingsDialog.js'\nimport NcAppSettingsSection from '@nextcloud/vue/dist/Components/NcAppSettingsSection.js'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'\nimport Clipboard from 'vue-material-design-icons/Clipboard.vue'\nimport NcInputField from '@nextcloud/vue/dist/Components/NcInputField'\nimport Setting from '../components/Setting.vue'\n\nimport { emit } from '@nextcloud/event-bus'\nimport { generateRemoteUrl, generateUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { loadState } from '@nextcloud/initial-state'\nimport { showError, showSuccess } from '@nextcloud/dialogs'\nimport { translate } from '@nextcloud/l10n'\nimport axios from '@nextcloud/axios'\n\nconst userConfig = loadState('files', 'config', {\n\tshow_hidden: false,\n\tcrop_image_previews: true,\n})\n\nexport default {\n\tname: 'Settings',\n\tcomponents: {\n\t\tClipboard,\n\t\tNcAppSettingsDialog,\n\t\tNcAppSettingsSection,\n\t\tNcCheckboxRadioSwitch,\n\t\tNcInputField,\n\t\tSetting,\n\t},\n\n\tprops: {\n\t\topen: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\n\t\t\t...userConfig,\n\n\t\t\t// Settings API\n\t\t\tsettings: window.OCA?.Files?.Settings?.settings || [],\n\n\t\t\t// Webdav infos\n\t\t\twebdavUrl: generateRemoteUrl('dav/files/' + encodeURIComponent(getCurrentUser()?.uid)),\n\t\t\twebdavDocs: 'https://docs.nextcloud.com/server/stable/go.php?to=user-webdav',\n\t\t\tappPasswordUrl: generateUrl('/settings/user/security#generate-app-token-section'),\n\t\t\twebdavUrlCopied: false,\n\t\t}\n\t},\n\n\tbeforeMount() {\n\t\t// Update the settings API entries state\n\t\tthis.settings.forEach(setting => setting.open())\n\t},\n\n\tbeforeDestroy() {\n\t\t// Update the settings API entries state\n\t\tthis.settings.forEach(setting => setting.close())\n\t},\n\n\tmethods: {\n\t\tonClose() {\n\t\t\tthis.$emit('close')\n\t\t},\n\n\t\tsetConfig(key, value) {\n\t\t\temit('files:config:updated', { key, value })\n\t\t\taxios.post(generateUrl('/apps/files/api/v1/config/' + key), {\n\t\t\t\tvalue,\n\t\t\t})\n\t\t},\n\n\t\tasync copyCloudId() {\n\t\t\tdocument.querySelector('input#webdav-url-input').select()\n\n\t\t\tif (!navigator.clipboard) {\n\t\t\t\t// Clipboard API not available\n\t\t\t\tshowError(t('files', 'Clipboard is not available'))\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tawait navigator.clipboard.writeText(this.webdavUrl)\n\t\t\tthis.webdavUrlCopied = true\n\t\t\tshowSuccess(t('files', 'WebDAV URL copied to clipboard'))\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.webdavUrlCopied = false\n\t\t\t}, 5000)\n\t\t},\n\n\t\tt: translate,\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.setting-link:hover {\n\ttext-decoration: underline;\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.vue?vue&type=script&lang=js&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.vue?vue&type=style&index=0&id=c2541792&prod&lang=scss&scoped=true&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.vue?vue&type=style&index=0&id=c2541792&prod&lang=scss&scoped=true&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Settings.vue?vue&type=template&id=c2541792&scoped=true&\"\nimport script from \"./Settings.vue?vue&type=script&lang=js&\"\nexport * from \"./Settings.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Settings.vue?vue&type=style&index=0&id=c2541792&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"c2541792\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcAppSettingsDialog',{attrs:{\"open\":_vm.open,\"show-navigation\":true,\"title\":_vm.t('files', 'Files settings')},on:{\"update:open\":_vm.onClose}},[_c('NcAppSettingsSection',{attrs:{\"id\":\"settings\",\"title\":_vm.t('files', 'Files settings')}},[_c('NcCheckboxRadioSwitch',{attrs:{\"checked\":_vm.show_hidden},on:{\"update:checked\":[function($event){_vm.show_hidden=$event},function($event){return _vm.setConfig('show_hidden', $event)}]}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files', 'Show hidden files'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('NcCheckboxRadioSwitch',{attrs:{\"checked\":_vm.crop_image_previews},on:{\"update:checked\":[function($event){_vm.crop_image_previews=$event},function($event){return _vm.setConfig('crop_image_previews', $event)}]}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files', 'Crop image previews'))+\"\\n\\t\\t\")])],1),_vm._v(\" \"),(_vm.settings.length !== 0)?_c('NcAppSettingsSection',{attrs:{\"id\":\"more-settings\",\"title\":_vm.t('files', 'Additional settings')}},[_vm._l((_vm.settings),function(setting){return [_c('Setting',{key:setting.name,attrs:{\"el\":setting.el}})]})],2):_vm._e(),_vm._v(\" \"),_c('NcAppSettingsSection',{attrs:{\"id\":\"webdav\",\"title\":_vm.t('files', 'WebDAV')}},[_c('NcInputField',{attrs:{\"id\":\"webdav-url-input\",\"show-trailing-button\":true,\"success\":_vm.webdavUrlCopied,\"trailing-button-label\":_vm.t('files', 'Copy to clipboard'),\"value\":_vm.webdavUrl,\"readonly\":\"readonly\",\"type\":\"url\"},on:{\"focus\":function($event){return $event.target.select()},\"trailing-button-click\":_vm.copyCloudId},scopedSlots:_vm._u([{key:\"trailing-button-icon\",fn:function(){return [_c('Clipboard',{attrs:{\"size\":20}})]},proxy:true}])}),_vm._v(\" \"),_c('em',[_c('a',{staticClass:\"setting-link\",attrs:{\"href\":_vm.webdavDocs,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'Use this address to access your Files via WebDAV'))+\" ↗\\n\\t\\t\\t\")])]),_vm._v(\" \"),_c('br'),_vm._v(\" \"),_c('em',[_c('a',{staticClass:\"setting-link\",attrs:{\"href\":_vm.appPasswordUrl}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'If you have enabled 2FA, you must create and use a new app password by clicking here.'))+\" ↗\\n\\t\\t\\t\")])])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n  - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n  -\n  - @author Gary Kim <gary@garykim.dev>\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<template>\n\t<NcAppNavigation data-cy-files-navigation>\n\t\t<template #list>\n\t\t\t<NcAppNavigationItem v-for=\"view in parentViews\"\n\t\t\t\t:key=\"view.id\"\n\t\t\t\t:allow-collapse=\"true\"\n\t\t\t\t:data-cy-files-navigation-item=\"view.id\"\n\t\t\t\t:icon=\"view.iconClass\"\n\t\t\t\t:open=\"view.expanded\"\n\t\t\t\t:pinned=\"view.sticky\"\n\t\t\t\t:title=\"view.name\"\n\t\t\t\t:to=\"generateToNavigation(view)\"\n\t\t\t\t@update:open=\"onToggleExpand(view)\">\n\t\t\t\t<NcAppNavigationItem v-for=\"child in childViews[view.id]\"\n\t\t\t\t\t:key=\"child.id\"\n\t\t\t\t\t:data-cy-files-navigation-item=\"child.id\"\n\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\t:icon=\"child.iconClass\"\n\t\t\t\t\t:title=\"child.name\"\n\t\t\t\t\t:to=\"generateToNavigation(child)\" />\n\t\t\t</NcAppNavigationItem>\n\t\t</template>\n\n\t\t<!-- Non-scrollable navigation bottom elements -->\n\t\t<template #footer>\n\t\t\t<ul class=\"app-navigation-entry__settings\">\n\t\t\t\t<!-- User storage usage statistics -->\n\t\t\t\t<NavigationQuota />\n\n\t\t\t\t<!-- Files settings modal toggle-->\n\t\t\t\t<NcAppNavigationItem :aria-label=\"t('files', 'Open the files app settings')\"\n\t\t\t\t\t:title=\"t('files', 'Files settings')\"\n\t\t\t\t\tdata-cy-files-navigation-settings-button\n\t\t\t\t\t@click.prevent.stop=\"openSettings\">\n\t\t\t\t\t<Cog slot=\"icon\" :size=\"20\" />\n\t\t\t\t</NcAppNavigationItem>\n\t\t\t</ul>\n\t\t</template>\n\n\t\t<!-- Settings modal-->\n\t\t<SettingsModal :open=\"settingsOpened\"\n\t\t\tdata-cy-files-navigation-settings\n\t\t\t@close=\"onSettingsClose\" />\n\t</NcAppNavigation>\n</template>\n\n<script>\nimport { emit, subscribe } from '@nextcloud/event-bus'\nimport { generateUrl } from '@nextcloud/router'\nimport { translate } from '@nextcloud/l10n'\n\nimport axios from '@nextcloud/axios'\nimport Cog from 'vue-material-design-icons/Cog.vue'\nimport NcAppNavigation from '@nextcloud/vue/dist/Components/NcAppNavigation.js'\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'\n\nimport logger from '../logger.js'\nimport Navigation from '../services/Navigation.ts'\nimport NavigationQuota from '../components/NavigationQuota.vue'\nimport SettingsModal from './Settings.vue'\n\nexport default {\n\tname: 'Navigation',\n\n\tcomponents: {\n\t\tCog,\n\t\tNcAppNavigation,\n\t\tNcAppNavigationItem,\n\t\tSettingsModal,\n\t\tNavigationQuota,\n\t},\n\n\tprops: {\n\t\t// eslint-disable-next-line vue/prop-name-casing\n\t\tNavigation: {\n\t\t\ttype: Navigation,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tsettingsOpened: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcurrentViewId() {\n\t\t\treturn this.$route?.params?.view || 'files'\n\t\t},\n\n\t\t/** @return {Navigation} */\n\t\tcurrentView() {\n\t\t\treturn this.views.find(view => view.id === this.currentViewId)\n\t\t},\n\n\t\t/** @return {Navigation[]} */\n\t\tviews() {\n\t\t\treturn this.Navigation.views\n\t\t},\n\n\t\t/** @return {Navigation[]} */\n\t\tparentViews() {\n\t\t\treturn this.views\n\t\t\t\t// filter child views\n\t\t\t\t.filter(view => !view.parent)\n\t\t\t\t// sort views by order\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\treturn a.order - b.order\n\t\t\t\t})\n\t\t},\n\n\t\t/** @return {Navigation[]} */\n\t\tchildViews() {\n\t\t\treturn this.views\n\t\t\t\t// filter parent views\n\t\t\t\t.filter(view => !!view.parent)\n\t\t\t\t// create a map of parents and their children\n\t\t\t\t.reduce((list, view) => {\n\t\t\t\t\tlist[view.parent] = [...(list[view.parent] || []), view]\n\t\t\t\t\t// Sort children by order\n\t\t\t\t\tlist[view.parent].sort((a, b) => {\n\t\t\t\t\t\treturn a.order - b.order\n\t\t\t\t\t})\n\t\t\t\t\treturn list\n\t\t\t\t}, {})\n\t\t},\n\t},\n\n\twatch: {\n\t\tcurrentView(view, oldView) {\n\t\t\tlogger.debug('View changed', { id: view.id, view })\n\t\t\tthis.showView(view, oldView)\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\tif (this.currentView) {\n\t\t\tlogger.debug('Navigation mounted. Showing requested view', { view: this.currentView })\n\t\t\tthis.showView(this.currentView)\n\t\t}\n\n\t\tsubscribe('files:legacy-navigation:changed', this.onLegacyNavigationChanged)\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * @param {Navigation} view the new active view\n\t\t * @param {Navigation} oldView the old active view\n\t\t */\n\t\tshowView(view, oldView) {\n\t\t\t// Closing any opened sidebar\n\t\t\twindow?.OCA?.Files?.Sidebar?.close?.()\n\n\t\t\tif (view.legacy) {\n\t\t\t\tconst newAppContent = document.querySelector('#app-content #app-content-' + this.currentView.id + '.viewcontainer')\n\t\t\t\tdocument.querySelectorAll('#app-content .viewcontainer').forEach(el => {\n\t\t\t\t\tel.classList.add('hidden')\n\t\t\t\t})\n\t\t\t\tnewAppContent.classList.remove('hidden')\n\n\t\t\t\t// Triggering legacy navigation events\n\t\t\t\tconst { dir = '/' } = OC.Util.History.parseUrlQuery()\n\t\t\t\tconst params = { itemId: view.id, dir }\n\n\t\t\t\tlogger.debug('Triggering legacy navigation event', params)\n\t\t\t\twindow.jQuery(newAppContent).trigger(new window.jQuery.Event('show', params))\n\t\t\t\twindow.jQuery(newAppContent).trigger(new window.jQuery.Event('urlChanged', params))\n\n\t\t\t}\n\n\t\t\tthis.Navigation.setActive(view)\n\t\t\temit('files:navigation:changed', view)\n\t\t},\n\n\t\t/**\n\t\t * Coming from the legacy files app.\n\t\t * TODO: remove when all views are migrated.\n\t\t *\n\t\t * @param {Navigation} view the new active view\n\t\t */\n\t\tonLegacyNavigationChanged({ id } = { id: 'files' }) {\n\t\t\tconst view = this.Navigation.views.find(view => view.id === id)\n\t\t\tif (view && view.legacy && view.id !== this.currentView.id) {\n\t\t\t\t// Force update the current route as the request comes\n\t\t\t\t// from the legacy files app router\n\t\t\t\tthis.$router.replace({ ...this.$route, params: { view: view.id } })\n\t\t\t\tthis.Navigation.setActive(view)\n\t\t\t\tthis.showView(view)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Expand/collapse a a view with children and permanently\n\t\t * save this setting in the server.\n\t\t *\n\t\t * @param {Navigation} view the view to toggle\n\t\t */\n\t\tonToggleExpand(view) {\n\t\t\t// Invert state\n\t\t\tview.expanded = !view.expanded\n\t\t\taxios.post(generateUrl(`/apps/files/api/v1/toggleShowFolder/${view.id}`), { show: view.expanded })\n\t\t},\n\n\t\t/**\n\t\t * Generate the route to a view\n\t\t *\n\t\t * @param {Navigation} view the view to toggle\n\t\t */\n\t\tgenerateToNavigation(view) {\n\t\t\tif (view.params) {\n\t\t\t\tconst { dir, fileid } = view.params\n\t\t\t\treturn { name: 'filelist', params: view.params, query: { dir, fileid } }\n\t\t\t}\n\t\t\treturn { name: 'filelist', params: { view: view.id } }\n\t\t},\n\n\t\t/**\n\t\t * Open the settings modal\n\t\t */\n\t\topenSettings() {\n\t\t\tthis.settingsOpened = true\n\t\t},\n\n\t\t/**\n\t\t * Close the settings modal\n\t\t */\n\t\tonSettingsClose() {\n\t\t\tthis.settingsOpened = false\n\t\t},\n\n\t\tt: translate,\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n// TODO: remove when https://github.com/nextcloud/nextcloud-vue/pull/3539 is in\n.app-navigation::v-deep .app-navigation-entry-icon {\n\tbackground-repeat: no-repeat;\n\tbackground-position: center;\n}\n\n.app-navigation > ul.app-navigation__list {\n\t// Use flex gap value for more elegant spacing\n\tpadding-bottom: var(--default-grid-baseline, 4px);\n}\n\n.app-navigation-entry__settings {\n\theight: auto !important;\n\toverflow: hidden !important;\n\tpadding-top: 0 !important;\n\t// Prevent shrinking or growing\n\tflex: 0 0 auto;\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=script&lang=js&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=style&index=0&id=83bb0f06&prod&scoped=true&lang=scss&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=style&index=0&id=83bb0f06&prod&scoped=true&lang=scss&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Navigation.vue?vue&type=template&id=83bb0f06&scoped=true&\"\nimport script from \"./Navigation.vue?vue&type=script&lang=js&\"\nexport * from \"./Navigation.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Navigation.vue?vue&type=style&index=0&id=83bb0f06&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"83bb0f06\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcAppNavigation',{attrs:{\"data-cy-files-navigation\":\"\"},scopedSlots:_vm._u([{key:\"list\",fn:function(){return _vm._l((_vm.parentViews),function(view){return _c('NcAppNavigationItem',{key:view.id,attrs:{\"allow-collapse\":true,\"data-cy-files-navigation-item\":view.id,\"icon\":view.iconClass,\"open\":view.expanded,\"pinned\":view.sticky,\"title\":view.name,\"to\":_vm.generateToNavigation(view)},on:{\"update:open\":function($event){return _vm.onToggleExpand(view)}}},_vm._l((_vm.childViews[view.id]),function(child){return _c('NcAppNavigationItem',{key:child.id,attrs:{\"data-cy-files-navigation-item\":child.id,\"exact\":true,\"icon\":child.iconClass,\"title\":child.name,\"to\":_vm.generateToNavigation(child)}})}),1)})},proxy:true},{key:\"footer\",fn:function(){return [_c('ul',{staticClass:\"app-navigation-entry__settings\"},[_c('NavigationQuota'),_vm._v(\" \"),_c('NcAppNavigationItem',{attrs:{\"aria-label\":_vm.t('files', 'Open the files app settings'),\"title\":_vm.t('files', 'Files settings'),\"data-cy-files-navigation-settings-button\":\"\"},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.openSettings.apply(null, arguments)}}},[_c('Cog',{attrs:{\"slot\":\"icon\",\"size\":20},slot:\"icon\"})],1)],1)]},proxy:true}])},[_vm._v(\" \"),_vm._v(\" \"),_c('SettingsModal',{attrs:{\"open\":_vm.settingsOpened,\"data-cy-files-navigation-settings\":\"\"},on:{\"close\":_vm.onSettingsClose}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n *\n * @author Gary Kim <gary@garykim.dev>\n *\n * @license AGPL-3.0-or-later\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\nexport default class Settings {\n\n\t_settings\n\n\tconstructor() {\n\t\tthis._settings = []\n\t\tconsole.debug('OCA.Files.Settings initialized')\n\t}\n\n\t/**\n\t * Register a new setting\n\t *\n\t * @since 19.0.0\n\t * @param {OCA.Files.Settings.Setting} view element to add to settings\n\t * @return {boolean} whether registering was successful\n\t */\n\tregister(view) {\n\t\tif (this._settings.filter(e => e.name === view.name).length > 0) {\n\t\t\tconsole.error('A setting with the same name is already registered')\n\t\t\treturn false\n\t\t}\n\t\tthis._settings.push(view)\n\t\treturn true\n\t}\n\n\t/**\n\t * All settings elements\n\t *\n\t * @return {OCA.Files.Settings.Setting[]} All currently registered settings\n\t */\n\tget settings() {\n\t\treturn this._settings\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Gary Kim <gary@garykim.dev>\n *\n * @license AGPL-3.0-or-later\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\nexport default class Setting {\n\n\t_close\n\t_el\n\t_name\n\t_open\n\n\t/**\n\t * Create a new files app setting\n\t *\n\t * @since 19.0.0\n\t * @param {string} name the name of this setting\n\t * @param {object} component the component\n\t * @param {Function} component.el function that returns an unmounted dom element to be added\n\t * @param {Function} [component.open] callback for when setting is added\n\t * @param {Function} [component.close] callback for when setting is closed\n\t */\n\tconstructor(name, { el, open, close }) {\n\t\tthis._name = name\n\t\tthis._el = el\n\t\tthis._open = open\n\t\tthis._close = close\n\n\t\tif (typeof this._open !== 'function') {\n\t\t\tthis._open = () => {}\n\t\t}\n\n\t\tif (typeof this._close !== 'function') {\n\t\t\tthis._close = () => {}\n\t\t}\n\t}\n\n\tget name() {\n\t\treturn this._name\n\t}\n\n\tget el() {\n\t\treturn this._el\n\t}\n\n\tget open() {\n\t\treturn this._open\n\t}\n\n\tget close() {\n\t\treturn this._close\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\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 */\nimport Vue from 'vue'\nimport Router from 'vue-router'\nimport { generateUrl } from '@nextcloud/router'\nimport { stringify } from 'query-string'\n\nVue.use(Router)\n\nconst router = new Router({\n\tmode: 'history',\n\n\t// if index.php is in the url AND we got this far, then it's working:\n\t// let's keep using index.php in the url\n\tbase: generateUrl('/apps/files', ''),\n\tlinkActiveClass: 'active',\n\n\troutes: [\n\t\t{\n\t\t\tpath: '/',\n\t\t\t// Pretending we're using the default view\n\t\t\talias: '/files',\n\t\t},\n\t\t{\n\t\t\tpath: '/:view/:fileid?',\n\t\t\tname: 'filelist',\n\t\t\tprops: true,\n\t\t},\n\t],\n\n\t// Custom stringifyQuery to prevent encoding of slashes in the url\n\tstringifyQuery(query) {\n\t\tconst result = stringify(query).replace(/%2F/gmi, '/')\n\t\treturn result ? ('?' + result) : ''\n\t},\n})\n\nexport default router\n","import './templates.js'\nimport './legacy/filelistSearch.js'\nimport processLegacyFilesViews from './legacy/navigationMapper.js'\n\nimport Vue from 'vue'\nimport NavigationService from './services/Navigation.ts'\nimport NavigationView from './views/Navigation.vue'\n\nimport SettingsService from './services/Settings.js'\nimport SettingsModel from './models/Setting.js'\n\nimport router from './router/router.js'\n\n// Init private and public Files namespace\nwindow.OCA.Files = window.OCA.Files ?? {}\nwindow.OCP.Files = window.OCP.Files ?? {}\n\n// Init Navigation Service\nconst Navigation = new NavigationService()\nObject.assign(window.OCP.Files, { Navigation })\n\n// Init Files App Settings Service\nconst Settings = new SettingsService()\nObject.assign(window.OCA.Files, { Settings })\nObject.assign(window.OCA.Files.Settings, { Setting: SettingsModel })\n\n// Init Navigation View\nconst View = Vue.extend(NavigationView)\nconst FilesNavigationRoot = new View({\n\tname: 'FilesNavigationRoot',\n\tpropsData: {\n\t\tNavigation,\n\t},\n\trouter,\n})\nFilesNavigationRoot.$mount('#app-navigation-files')\n\n// Init legacy files views\nprocessLegacyFilesViews()\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-navigation-entry__settings-quota--not-unlimited[data-v-26c061ec] .app-navigation-entry__title{margin-top:-4px}.app-navigation-entry__settings-quota progress[data-v-26c061ec]{position:absolute;bottom:10px;margin-left:44px;width:calc(100% - 44px - 22px)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/NavigationQuota.vue\"],\"names\":[],\"mappings\":\"AAIC,mGACC,eAAA,CAGD,gEACC,iBAAA,CACA,WAAA,CACA,gBAAA,CACA,8BAAA\",\"sourcesContent\":[\"\\n// User storage stats display\\n.app-navigation-entry__settings-quota {\\n\\t// Align title with progress and icon\\n\\t&--not-unlimited::v-deep .app-navigation-entry__title {\\n\\t\\tmargin-top: -4px;\\n\\t}\\n\\n\\tprogress {\\n\\t\\tposition: absolute;\\n\\t\\tbottom: 10px;\\n\\t\\tmargin-left: 44px;\\n\\t\\twidth: calc(100% - 44px - 22px);\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".template-picker__item[data-v-440aea22]{display:flex}.template-picker__label[data-v-440aea22]{display:flex;align-items:center;flex:1 1;flex-direction:column}.template-picker__label[data-v-440aea22],.template-picker__label *[data-v-440aea22]{cursor:pointer;user-select:none}.template-picker__label[data-v-440aea22]::before{display:none !important}.template-picker__preview[data-v-440aea22]{display:block;overflow:hidden;flex:1 1;width:var(--width);min-height:var(--height);max-height:var(--height);padding:0;border:var(--border) solid var(--color-border);border-radius:var(--border-radius-large)}input:checked+label>.template-picker__preview[data-v-440aea22]{border-color:var(--color-primary)}.template-picker__preview--failed[data-v-440aea22]{display:flex}.template-picker__image[data-v-440aea22]{max-width:100%;background-color:var(--color-main-background);object-fit:cover}.template-picker__preview--failed .template-picker__image[data-v-440aea22]{width:calc(var(--margin)*8);margin:auto;background-color:rgba(0,0,0,0) !important;object-fit:initial}.template-picker__title[data-v-440aea22]{overflow:hidden;max-width:calc(var(--width) + 4px);padding:var(--margin);white-space:nowrap;text-overflow:ellipsis}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/TemplatePreview.vue\"],\"names\":[],\"mappings\":\"AAGC,wCACC,YAAA,CAGD,yCACC,YAAA,CAEA,kBAAA,CACA,QAAA,CACA,qBAAA,CAEA,oFACC,cAAA,CACA,gBAAA,CAGD,iDACC,uBAAA,CAIF,2CACC,aAAA,CACA,eAAA,CAEA,QAAA,CACA,kBAAA,CACA,wBAAA,CACA,wBAAA,CACA,SAAA,CACA,8CAAA,CACA,wCAAA,CAEA,+DACC,iCAAA,CAGD,mDAEC,YAAA,CAIF,yCACC,cAAA,CACA,6CAAA,CAEA,gBAAA,CAID,2EACC,2BAAA,CAEA,WAAA,CACA,yCAAA,CAEA,kBAAA,CAGD,yCACC,eAAA,CAEA,kCAAA,CACA,qBAAA,CACA,kBAAA,CACA,sBAAA\",\"sourcesContent\":[\"\\n\\n.template-picker {\\n\\t&__item {\\n\\t\\tdisplay: flex;\\n\\t}\\n\\n\\t&__label {\\n\\t\\tdisplay: flex;\\n\\t\\t// Align in the middle of the grid\\n\\t\\talign-items: center;\\n\\t\\tflex: 1 1;\\n\\t\\tflex-direction: column;\\n\\n\\t\\t&, * {\\n\\t\\t\\tcursor: pointer;\\n\\t\\t\\tuser-select: none;\\n\\t\\t}\\n\\n\\t\\t&::before {\\n\\t\\t\\tdisplay: none !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&__preview {\\n\\t\\tdisplay: block;\\n\\t\\toverflow: hidden;\\n\\t\\t// Stretch so all entries are the same width\\n\\t\\tflex: 1 1;\\n\\t\\twidth: var(--width);\\n\\t\\tmin-height: var(--height);\\n\\t\\tmax-height: var(--height);\\n\\t\\tpadding: 0;\\n\\t\\tborder: var(--border) solid var(--color-border);\\n\\t\\tborder-radius: var(--border-radius-large);\\n\\n\\t\\tinput:checked + label > & {\\n\\t\\t\\tborder-color: var(--color-primary);\\n\\t\\t}\\n\\n\\t\\t&--failed {\\n\\t\\t\\t// Make sure to properly center fallback icon\\n\\t\\t\\tdisplay: flex;\\n\\t\\t}\\n\\t}\\n\\n\\t&__image {\\n\\t\\tmax-width: 100%;\\n\\t\\tbackground-color: var(--color-main-background);\\n\\n\\t\\tobject-fit: cover;\\n\\t}\\n\\n\\t// Failed preview, fallback to mime icon\\n\\t&__preview--failed &__image {\\n\\t\\twidth: calc(var(--margin) * 8);\\n\\t\\t// Center mime icon\\n\\t\\tmargin: auto;\\n\\t\\tbackground-color: transparent !important;\\n\\n\\t\\tobject-fit: initial;\\n\\t}\\n\\n\\t&__title {\\n\\t\\toverflow: hidden;\\n\\t\\t// also count preview border\\n\\t\\tmax-width: calc(var(--width) + 2*2px);\\n\\t\\tpadding: var(--margin);\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-navigation[data-v-83bb0f06] .app-navigation-entry-icon{background-repeat:no-repeat;background-position:center}.app-navigation>ul.app-navigation__list[data-v-83bb0f06]{padding-bottom:var(--default-grid-baseline, 4px)}.app-navigation-entry__settings[data-v-83bb0f06]{height:auto !important;overflow:hidden !important;padding-top:0 !important;flex:0 0 auto}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/Navigation.vue\"],\"names\":[],\"mappings\":\"AAEA,4DACC,2BAAA,CACA,0BAAA,CAGD,yDAEC,gDAAA,CAGD,iDACC,sBAAA,CACA,0BAAA,CACA,wBAAA,CAEA,aAAA\",\"sourcesContent\":[\"\\n// TODO: remove when https://github.com/nextcloud/nextcloud-vue/pull/3539 is in\\n.app-navigation::v-deep .app-navigation-entry-icon {\\n\\tbackground-repeat: no-repeat;\\n\\tbackground-position: center;\\n}\\n\\n.app-navigation > ul.app-navigation__list {\\n\\t// Use flex gap value for more elegant spacing\\n\\tpadding-bottom: var(--default-grid-baseline, 4px);\\n}\\n\\n.app-navigation-entry__settings {\\n\\theight: auto !important;\\n\\toverflow: hidden !important;\\n\\tpadding-top: 0 !important;\\n\\t// Prevent shrinking or growing\\n\\tflex: 0 0 auto;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".setting-link[data-v-c2541792]:hover{text-decoration:underline}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/Settings.vue\"],\"names\":[],\"mappings\":\"AACA,qCACC,yBAAA\",\"sourcesContent\":[\"\\n.setting-link:hover {\\n\\ttext-decoration: underline;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".templates-picker__form[data-v-55dd9121]{padding:calc(var(--margin)*2);padding-bottom:0}.templates-picker__form h2[data-v-55dd9121]{text-align:center;font-weight:bold;margin:var(--margin) 0 calc(var(--margin)*2)}.templates-picker__list[data-v-55dd9121]{display:grid;grid-gap:calc(var(--margin)*2);grid-auto-columns:1fr;max-width:calc(var(--fullwidth)*6);grid-template-columns:repeat(auto-fit, var(--fullwidth));grid-auto-rows:1fr;justify-content:center}.templates-picker__buttons[data-v-55dd9121]{display:flex;justify-content:space-between;padding:calc(var(--margin)*2) var(--margin);position:sticky;bottom:0;background-image:linear-gradient(0, var(--gradient-main-background))}.templates-picker__buttons button[data-v-55dd9121],.templates-picker__buttons input[type=submit][data-v-55dd9121]{height:44px}.templates-picker[data-v-55dd9121] .modal-container{position:relative}.templates-picker__loading[data-v-55dd9121]{position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;margin:0;background-color:var(--color-main-background-translucent)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/TemplatePicker.vue\"],\"names\":[],\"mappings\":\"AAEC,yCACC,6BAAA,CAEA,gBAAA,CAEA,4CACC,iBAAA,CACA,gBAAA,CACA,4CAAA,CAIF,yCACC,YAAA,CACA,8BAAA,CACA,qBAAA,CAEA,kCAAA,CACA,wDAAA,CAEA,kBAAA,CAEA,sBAAA,CAGD,4CACC,YAAA,CACA,6BAAA,CACA,2CAAA,CACA,eAAA,CACA,QAAA,CACA,oEAAA,CAEA,kHACC,WAAA,CAKF,oDACC,iBAAA,CAGD,4CACC,iBAAA,CACA,KAAA,CACA,MAAA,CACA,sBAAA,CACA,UAAA,CACA,WAAA,CACA,QAAA,CACA,yDAAA\",\"sourcesContent\":[\"\\n.templates-picker {\\n\\t&__form {\\n\\t\\tpadding: calc(var(--margin) * 2);\\n\\t\\t// Will be handled by the buttons\\n\\t\\tpadding-bottom: 0;\\n\\n\\t\\th2 {\\n\\t\\t\\ttext-align: center;\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t\\tmargin: var(--margin) 0 calc(var(--margin) * 2);\\n\\t\\t}\\n\\t}\\n\\n\\t&__list {\\n\\t\\tdisplay: grid;\\n\\t\\tgrid-gap: calc(var(--margin) * 2);\\n\\t\\tgrid-auto-columns: 1fr;\\n\\t\\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\\n\\t\\tmax-width: calc(var(--fullwidth) * 6);\\n\\t\\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\\n\\t\\t// Make sure all rows are the same height\\n\\t\\tgrid-auto-rows: 1fr;\\n\\t\\t// Center the columns set\\n\\t\\tjustify-content: center;\\n\\t}\\n\\n\\t&__buttons {\\n\\t\\tdisplay: flex;\\n\\t\\tjustify-content: space-between;\\n\\t\\tpadding: calc(var(--margin) * 2) var(--margin);\\n\\t\\tposition: sticky;\\n\\t\\tbottom: 0;\\n\\t\\tbackground-image: linear-gradient(0, var(--gradient-main-background));\\n\\n\\t\\tbutton, input[type='submit'] {\\n\\t\\t\\theight: 44px;\\n\\t\\t}\\n\\t}\\n\\n\\t// Make sure we're relative for the loading emptycontent on top\\n\\t::v-deep .modal-container {\\n\\t\\tposition: relative;\\n\\t}\\n\\n\\t&__loading {\\n\\t\\tposition: absolute;\\n\\t\\ttop: 0;\\n\\t\\tleft: 0;\\n\\t\\tjustify-content: center;\\n\\t\\twidth: 100%;\\n\\t\\theight: 100%;\\n\\t\\tmargin: 0;\\n\\t\\tbackground-color: var(--color-main-background-translucent);\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 2181;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2181: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], function() { return __webpack_require__(46724); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","getCurrentDirectory","currentDirInfo","OCA","Files","App","currentFileList","dirInfo","path","name","replace","getTemplates","axios","generateOcsUrl","response","data","ocs","createFromTemplate","filePath","templatePath","templateType","inheritAttrs","props","basename","type","required","checked","default","fileid","filename","previewUrl","hasPreview","mime","ratio","failedPreview","computed","nameWithoutExt","id","realPreviewUrl","getCurrentUser","document","getElementById","value","pathSections","startsWith","split","relativePath","forEach","section","encodeURIComponent","mimeIcon","methods","onCheck","onFailure","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_c","_self","staticClass","attrs","domProps","on","_v","class","_s","components","NcEmptyContent","NcModal","TemplatePreview","logger","loading","opened","provider","emptyTemplate","selectedTemplate","style","open","templates","fetchedProvider","close","onSubmit","currentDirectory","fileList","extension","normalize","fileInfo","model","filesClient","fileAction","$file","dir","fileActions","fileInfoModel","console","showError","$event","preventDefault","stopPropagation","apply","arguments","t","_b","_l","template","key","_e","getLoggerBuilder","setApp","detectUser","build","Vue","n","TemplatePickerRoot","createElement","body","appendChild","loadState","templatesPath","debug","TemplatePicker","TemplatePickerView","propsData","$mount","window","addEventListener","initTemplatesPlugin","attach","menu","addMenuEntry","displayName","templateName","iconClass","fileType","actionHandler","initTemplatesFolder","removeMenuEntry","OC","Plugins","register","index","newTemplatePlugin","app","label","FilesPlugin","copySystemTemplates","changeDirectory","template_path","error","subscribe","query","setFilter","registerLegacyView","order","icon","parent","classes","expanded","params","OCP","Navigation","legacy","sticky","includes","view","isValidNavigation","isUniqueNavigation","_views","e","Error","message","push","_currentView","views","find","search","getFiles","isSvg","columns","isValidColumn","emptyView","column","title","property","sortFunction","summary","ChartPie","NcAppNavigationItem","NcProgressBar","loadingStorageStats","storageStats","storageStatsTitle","usedQuotaByte","used","quota","storageStatsTooltip","beforeMount","setInterval","debounceUpdateStorageStats","throttleUpdateStorageStats","updateStorageStats","event","slot","relative","Math","min","el","mounted","show_hidden","crop_image_previews","Clipboard","NcAppSettingsDialog","NcAppSettingsSection","NcCheckboxRadioSwitch","NcInputField","Setting","userConfig","settings","webdavUrl","webdavDocs","appPasswordUrl","webdavUrlCopied","beforeDestroy","onClose","setConfig","emit","copyCloudId","navigator","showSuccess","setTimeout","length","setting","target","select","scopedSlots","_u","fn","proxy","Cog","NcAppNavigation","SettingsModal","NavigationQuota","settingsOpened","currentViewId","currentView","parentViews","filter","sort","childViews","reduce","list","watch","showView","newAppContent","itemId","onLegacyNavigationChanged","onToggleExpand","show","generateToNavigation","openSettings","onSettingsClose","child","Settings","_settings","_name","_el","_open","_close","Router","mode","base","generateUrl","linkActiveClass","routes","alias","stringifyQuery","result","stringify","NavigationService","Object","assign","legacyViews","SettingsService","SettingsModel","NavigationView","router","values","sublist","subview","___CSS_LOADER_EXPORT___","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","O","chunkIds","priority","notFulfilled","Infinity","i","fulfilled","j","keys","every","splice","r","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","baseURI","self","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","bind","nc","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file
index 2a223e474050765669eb567a27c45ead53ce085f..116ecc0a944fac5af82f05ac7d9e2c8826d5b8df 100644 (file)
@@ -1,3 +1,3 @@
 /*! For license information please see settings-vue-settings-personal-security.js.LICENSE.txt */
-!function(){"use strict";var e,n={40726:function(e,n,o){var i=o(79954),a=o(20144),r=o(61361),s=o(4820),c=o(10128),p=(o(65509),o(79753)),d=o(15961),l={ie:/(?:MSIE|Trident|Trident\/7.0; rv)[ :](\d+)/,edge:/^Mozilla\/5\.0 \([^)]+\) AppleWebKit\/[0-9.]+ \(KHTML, like Gecko\) Chrome\/[0-9.]+ (?:Mobile Safari|Safari)\/[0-9.]+ Edge\/[0-9.]+$/,firefox:/^Mozilla\/5\.0 \([^)]*(Windows|OS X|Linux)[^)]+\) Gecko\/[0-9.]+ Firefox\/(\d+)(?:\.\d)?$/,chrome:/^Mozilla\/5\.0 \([^)]*(Windows|OS X|Linux)[^)]+\) AppleWebKit\/[0-9.]+ \(KHTML, like Gecko\) Chrome\/(\d+)[0-9.]+ (?:Mobile Safari|Safari)\/[0-9.]+$/,safari:/^Mozilla\/5\.0 \([^)]*(Windows|OS X)[^)]+\) AppleWebKit\/[0-9.]+ \(KHTML, like Gecko\)(?: Version\/([0-9]+)[0-9.]+)? Safari\/[0-9.A-Z]+$/,androidChrome:/Android.*(?:; (.*) Build\/).*Chrome\/(\d+)[0-9.]+/,iphone:/ *CPU +iPhone +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,ipad:/\(iPad; *CPU +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,iosClient:/^Mozilla\/5\.0 \(iOS\) (?:ownCloud|Nextcloud)-iOS.*$/,androidClient:/^Mozilla\/5\.0 \(Android\) (?:ownCloud|Nextcloud)-android.*$/,iosTalkClient:/^Mozilla\/5\.0 \(iOS\) Nextcloud-Talk.*$/,androidTalkClient:/^Mozilla\/5\.0 \(Android\) Nextcloud-Talk.*$/,davx5:/DAV(?:droid|x5)\/([^ ]+)/,webPirate:/(Sailfish).*WebPirate\/(\d+)/,sailfishBrowser:/(Sailfish).*SailfishBrowser\/(\d+)/,neon:/Neon \d+\.\d+\.\d+\+\d+/},u={ie:t("setting","Internet Explorer"),edge:t("setting","Edge"),firefox:t("setting","Firefox"),chrome:t("setting","Google Chrome"),safari:t("setting","Safari"),androidChrome:t("setting","Google Chrome for Android"),iphone:t("setting","iPhone"),ipad:t("setting","iPad"),iosClient:t("setting","{productName} iOS app",{productName:window.oc_defaults.productName}),androidClient:t("setting","{productName} Android app",{productName:window.oc_defaults.productName}),iosTalkClient:t("setting","{productName} Talk for iOS",{productName:window.oc_defaults.productName}),androidTalkClient:t("setting","{productName} Talk for Android",{productName:window.oc_defaults.productName}),davx5:"DAVx5",webPirate:"WebPirate",sailfishBrowser:"SailfishBrowser",neon:"Neon"},A={ie:"icon-desktop",edge:"icon-desktop",firefox:"icon-desktop",chrome:"icon-desktop",safari:"icon-desktop",androidChrome:"icon-phone",iphone:"icon-phone",ipad:"icon-tablet",iosClient:"icon-phone",androidClient:"icon-phone",iosTalkClient:"icon-phone",androidTalkClient:"icon-phone",davx5:"icon-phone",webPirate:"icon-link",sailfishBrowser:"icon-link"},h={name:"AuthToken",components:{NcActions:d.O3,NcActionButton:d.Js,NcActionCheckbox:d.Bt},props:{token:{type:Object,required:!0}},data:function(){return{showMore:this.token.canScope||this.token.canDelete,renaming:!1,newName:"",oldName:"",actionOpen:!1}},computed:{lastActivityRelative:function(){return OC.Util.relativeModifiedDate(1e3*this.token.lastActivity)},lastActivity:function(){return OC.Util.formatDate(1e3*this.token.lastActivity,"LLL")},iconName:function(){var e=this.token.name.match(/Mozilla\/5\.0 \((\w+)\) (?:mirall|csyncoC)\/(\d+\.\d+\.\d+)/),n="";e&&(this.token.name=t("settings","Sync client - {os}",{os:e[1],version:e[2]}),n="icon-desktop");var o=this.token.name,i=this.token.name;for(var a in l){var r=o.match(l[a]);r&&(i=r[2]&&r[1]?u[a]+" "+r[2]+" - "+r[1]:r[1]?u[a]+" "+r[1]:u[a],n=A[a])}return this.token.current&&(i=t("settings","This session")),{icon:n,name:i}},wiping:function(){return 2===this.token.type}},methods:{startRename:function(){var t=this;this.actionOpen=!1,this.oldName=this.token.name,this.newName=this.token.name,this.renaming=!0,this.$nextTick((function(){t.$refs.input.select()}))},cancelRename:function(){this.renaming=!1,this.$emit("rename",this.token,this.oldName)},revoke:function(){this.actionOpen=!1,this.$emit("delete",this.token)},rename:function(){this.renaming=!1,this.$emit("rename",this.token,this.newName)},wipe:function(){this.actionOpen=!1,this.$emit("wipe",this.token)}}},f=o(93379),g=o.n(f),m=o(7795),v=o.n(m),C=o(90569),k=o.n(C),w=o(3565),y=o.n(w),x=o(19216),b=o.n(x),_=o(44589),T=o.n(_),N=o(12283),B={};B.styleTagTransform=T(),B.setAttributes=y(),B.insert=k().bind(null,"head"),B.domAPI=v(),B.insertStyleElement=b(),g()(N.Z,B),N.Z&&N.Z.locals&&N.Z.locals;var O=o(51900),P=(0,O.Z)(h,(function(){var t=this,e=t._self._c;return e("tr",{class:t.wiping,attrs:{"data-id":t.token.id}},[e("td",{staticClass:"client"},[e("div",{class:t.iconName.icon})]),t._v(" "),e("td",{staticClass:"token-name"},[t.token.canRename&&t.renaming?e("input",{directives:[{name:"model",rawName:"v-model",value:t.newName,expression:"newName"}],ref:"input",attrs:{type:"text"},domProps:{value:t.newName},on:{keyup:[function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:t.rename.apply(null,arguments)},function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"esc",27,e.key,["Esc","Escape"])?null:t.cancelRename.apply(null,arguments)}],change:t.rename,input:function(e){e.target.composing||(t.newName=e.target.value)}}}):e("span",[t._v(t._s(t.iconName.name))]),t._v(" "),t.wiping?e("span",{staticClass:"wiping-warning"},[t._v("("+t._s(t.t("settings","Marked for remote wipe"))+")")]):t._e()]),t._v(" "),e("td",[e("span",{staticClass:"last-activity",attrs:{title:t.lastActivity}},[t._v(t._s(t.lastActivityRelative))])]),t._v(" "),e("td",{staticClass:"more"},[t.token.current?t._e():e("NcActions",{attrs:{title:t.t("settings","Device settings"),"aria-label":t.t("settings","Device settings"),open:t.actionOpen},on:{"update:open":function(e){t.actionOpen=e}}},[1===t.token.type?e("NcActionCheckbox",{attrs:{checked:t.token.scope.filesystem},on:{change:function(e){return e.stopPropagation(),e.preventDefault(),t.$emit("toggle-scope",t.token,"filesystem",!t.token.scope.filesystem)}}},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Allow filesystem access"))+"\n\t\t\t")]):t._e(),t._v(" "),t.token.canRename?e("NcActionButton",{attrs:{icon:"icon-rename"},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.startRename.apply(null,arguments)}}},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Rename"))+"\n\t\t\t")]):t._e(),t._v(" "),t.token.canDelete?[2!==t.token.type?[e("NcActionButton",{attrs:{icon:"icon-delete"},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.revoke.apply(null,arguments)}}},[t._v("\n\t\t\t\t\t\t"+t._s(t.t("settings","Revoke"))+"\n\t\t\t\t\t")]),t._v(" "),e("NcActionButton",{attrs:{icon:"icon-delete"},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.wipe.apply(null,arguments)}}},[t._v("\n\t\t\t\t\t\t"+t._s(t.t("settings","Wipe device"))+"\n\t\t\t\t\t")])]:2===t.token.type?e("NcActionButton",{attrs:{icon:"icon-delete",title:t.t("settings","Revoke")},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.revoke.apply(null,arguments)}}},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Revoking this token might prevent the wiping of your device if it has not started the wipe yet."))+"\n\t\t\t\t")]):t._e()]:t._e()],2)],1)])}),[],!1,null,"0f73a400",null),S={name:"AuthTokenList",components:{AuthToken:P.exports},props:{tokens:{type:Array,required:!0}},computed:{sortedTokens:function(){return this.tokens.slice().sort((function(t,e){var n=parseInt(t.lastActivity,10);return parseInt(e.lastActivity,10)-n}))}},methods:{toggleScope:function(t,e,n){this.$emit("toggle-scope",t,e,n)},rename:function(t,e){this.$emit("rename",t,e)},onDelete:function(t){this.$emit("delete",t)},onWipe:function(t){this.$emit("wipe",t)}}},D=o(82633),R={};R.styleTagTransform=T(),R.setAttributes=y(),R.insert=k().bind(null,"head"),R.domAPI=v(),R.insertStyleElement=b(),g()(D.Z,R),D.Z&&D.Z.locals&&D.Z.locals;var Z=o(30012),E={};E.styleTagTransform=T(),E.setAttributes=y(),E.insert=k().bind(null,"head"),E.domAPI=v(),E.insertStyleElement=b(),g()(Z.Z,E),Z.Z&&Z.Z.locals&&Z.Z.locals;var U=(0,O.Z)(S,(function(){var t=this,e=t._self._c;return e("table",{attrs:{id:"app-tokens-table"}},[t.tokens.length?e("thead",[e("tr",[e("th"),t._v(" "),e("th",[t._v(t._s(t.t("settings","Device")))]),t._v(" "),e("th",[t._v(t._s(t.t("settings","Last activity")))]),t._v(" "),e("th")])]):t._e(),t._v(" "),e("tbody",{staticClass:"token-list"},t._l(t.sortedTokens,(function(n){return e("AuthToken",{key:n.id,attrs:{token:n},on:{"toggle-scope":t.toggleScope,rename:t.rename,delete:t.onDelete,wipe:t.onWipe}})})),1)])}),[],!1,null,"4f8ceff3",null).exports,M=o(147),$=o.n(M),G=o(64024),W=o(10861),q=o.n(W),z=o(80419),L=o(85226),I=o(25108);function j(t,e,n,o,i,a,r){try{var s=t[a](r),c=s.value}catch(t){return void n(t)}s.done?e(c):Promise.resolve(c).then(o,i)}var K={name:"AuthTokenSetupDialogue",components:{Check:z.default,ContentCopy:L.Z,NcButton:q(),QR:$()},props:{add:{type:Function,required:!0}},data:function(){return{adding:!1,loading:!1,deviceName:"",appPassword:"",loginName:"",copied:!1,showQR:!1,qrUrl:""}},computed:{copyTooltipOptions:function(){return this.copied?t("settings","Copied!"):t("settings","Copy")}},methods:{selectInput:function(t){t.currentTarget.select()},submit:function(){var e=this;(0,c.confirmPassword)().then((function(){return e.loading=!0,e.add(e.deviceName)})).then((function(t){e.adding=!0,e.loginName=t.loginName,e.appPassword=t.token;var n=window.location.protocol+"//"+window.location.host+(0,p.getRootUrl)();e.qrUrl="nc://login/user:".concat(t.loginName,"&password:").concat(t.token,"&server:").concat(n),e.$nextTick((function(){e.$refs.appPassword.select()}))})).catch((function(n){I.error("could not create a new app password",n),OC.Notification.showTemporary(t("settings","Error while creating device token")),e.reset()}))},copyPassword:function(){var e,n=this;return(e=regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,navigator.clipboard.writeText(n.appPassword);case 3:n.copied=!0,e.next=11;break;case 6:e.prev=6,e.t0=e.catch(0),n.copied=!1,I.error(e.t0),(0,G.x2)(t("settings","Could not copy app password. Please copy it manually."));case 11:return e.prev=11,setTimeout((function(){n.copied=!1}),4e3),e.finish(11);case 14:case"end":return e.stop()}}),e,null,[[0,6,11,14]])})),function(){var t=this,n=arguments;return new Promise((function(o,i){var a=e.apply(t,n);function r(t){j(a,o,i,r,s,"next",t)}function s(t){j(a,o,i,r,s,"throw",t)}r(void 0)}))})()},reset:function(){this.adding=!1,this.loading=!1,this.showQR=!1,this.qrUrl="",this.deviceName="",this.appPassword="",this.loginName=""}}},Q=K,F=o(4734),X={};X.styleTagTransform=T(),X.setAttributes=y(),X.insert=k().bind(null,"head"),X.domAPI=v(),X.insertStyleElement=b(),g()(F.Z,X),F.Z&&F.Z.locals&&F.Z.locals;var H=(0,O.Z)(Q,(function(){var t=this,e=t._self._c;return t.adding?e("div",{staticClass:"spacing"},[t._v("\n\t"+t._s(t.t("settings","Use the credentials below to configure your app or device."))+"\n\t"+t._s(t.t("settings","For security reasons this password will only be shown once."))+"\n\t"),e("div",{staticClass:"app-password-row"},[e("label",{staticClass:"app-password-label",attrs:{for:"app-username"}},[t._v(t._s(t.t("settings","Username")))]),t._v(" "),e("input",{staticClass:"monospaced",attrs:{id:"app-username",type:"text",readonly:"readonly"},domProps:{value:t.loginName},on:{focus:t.selectInput}})]),t._v(" "),e("div",{staticClass:"app-password-row"},[e("label",{staticClass:"app-password-label",attrs:{for:"app-password"}},[t._v(t._s(t.t("settings","Password")))]),t._v(" "),e("input",{ref:"appPassword",staticClass:"monospaced",attrs:{id:"app-password",type:"text",readonly:"readonly"},domProps:{value:t.appPassword},on:{focus:t.selectInput}}),t._v(" "),e("NcButton",{attrs:{type:"tertiary",title:t.copyTooltipOptions,"aria-label":t.copyTooltipOptions},on:{click:t.copyPassword},scopedSlots:t._u([{key:"icon",fn:function(){return[t.copied?e("Check",{attrs:{size:20}}):e("ContentCopy",{attrs:{size:20}})]},proxy:!0}])}),t._v(" "),e("NcButton",{on:{click:t.reset}},[t._v("\n\t\t\t"+t._s(t.t("settings","Done"))+"\n\t\t")])],1),t._v(" "),e("div",{staticClass:"app-password-row"},[e("span",{staticClass:"app-password-label"}),t._v(" "),t.showQR?e("QR",{attrs:{value:t.qrUrl}}):e("a",{on:{click:function(e){t.showQR=!0}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Show QR code for mobile apps"))+"\n\t\t")])],1)]):e("div",{staticClass:"row spacing"},[e("a",{attrs:{id:"generate-app-token-section"}},[e("input",{directives:[{name:"model",rawName:"v-model",value:t.deviceName,expression:"deviceName"}],attrs:{type:"text",maxlength:120,disabled:t.loading,placeholder:t.t("settings","App name")},domProps:{value:t.deviceName},on:{keydown:function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:t.submit.apply(null,arguments)},input:function(e){e.target.composing||(t.deviceName=e.target.value)}}}),t._v(" "),e("NcButton",{attrs:{disabled:t.loading||0===t.deviceName.length,type:"primary"},on:{click:t.submit}},[t._v("\n\t\t\t"+t._s(t.t("settings","Create new app password"))+"\n\t\t")])],1)])}),[],!1,null,"7760634d",null),V=H.exports,Y=o(25108);function J(t,e,n,o,i,a,r){try{var s=t[a](r),c=s.value}catch(t){return void n(t)}s.done?e(c):Promise.resolve(c).then(o,i)}var tt=function(t){return function(e){return t(e),e}},et={name:"AuthTokenSection",components:{AuthTokenSetupDialogue:V,AuthTokenList:U},props:{tokens:{type:Array,required:!0},canCreateToken:{type:Boolean,required:!0}},data:function(){return{baseUrl:(0,p.generateUrl)("/settings/personal/authtokens")}},methods:{addNewToken:function(e){var n=this;Y.debug("creating a new app token",e);var o={name:e};return s.default.post(this.baseUrl,o).then((function(t){return t.data})).then(tt((function(){return Y.debug("app token created")}))).then(tt((function(t){return n.tokens.push(t.deviceToken)}))).catch((function(e){throw Y.error.bind("could not create app password",e),OC.Notification.showTemporary(t("settings","Error while creating device token")),e}))},toggleTokenScope:function(e,n,o){Y.debug("updating app token scope",e.id,n,o);var i=e.scope[n];return e.scope[n]=o,this.updateToken(e).then(tt((function(){return Y.debug("app token scope updated")}))).catch((function(o){throw Y.error.bind("could not update app token scope",o),OC.Notification.showTemporary(t("settings","Error while updating device token scope")),e.scope[n]=i,o}))},rename:function(e,n){Y.debug("renaming app token",e.id,e.name,n);var o=e.name;return e.name=n,this.updateToken(e).then(tt((function(){return Y.debug("app token name updated")}))).catch((function(n){Y.error.bind("could not update app token name",n),OC.Notification.showTemporary(t("settings","Error while updating device token name")),e.name=o}))},updateToken:function(t){return s.default.put(this.baseUrl+"/"+t.id,t).then((function(t){return t.data}))},deleteToken:function(e){var n=this;return Y.debug("deleting app token",e),this.tokens=this.tokens.filter((function(t){return t!==e})),s.default.delete(this.baseUrl+"/"+e.id).then((function(t){return t.data})).then(tt((function(){return Y.debug("app token deleted")}))).catch((function(o){Y.error.bind("could not delete app token",o),OC.Notification.showTemporary(t("settings","Error while deleting the token")),n.tokens.push(e)}))},wipeToken:function(e){var n,o=this;return(n=regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return Y.debug("wiping app token",e),n.prev=1,n.next=4,(0,c.confirmPassword)();case 4:return n.next=6,new Promise((function(e){OC.dialogs.confirm(t("settings","Do you really want to wipe your data from this device?"),t("settings","Confirm wipe"),e,!0)}));case 6:if(n.sent){n.next=9;break}return Y.debug("wipe aborted by user"),n.abrupt("return");case 9:return n.next=11,s.default.post(o.baseUrl+"/wipe/"+e.id);case 11:Y.debug("app token marked for wipe"),e.type=2,n.next=19;break;case 15:n.prev=15,n.t0=n.catch(1),Y.error("could not wipe app token",n.t0),OC.Notification.showTemporary(t("settings","Error while wiping the device with the token"));case 19:case"end":return n.stop()}}),n,null,[[1,15]])})),function(){var t=this,e=arguments;return new Promise((function(o,i){var a=n.apply(t,e);function r(t){J(a,o,i,r,s,"next",t)}function s(t){J(a,o,i,r,s,"throw",t)}r(void 0)}))})()}}},nt=et,ot=(0,O.Z)(nt,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"section",attrs:{id:"security"}},[e("h2",[t._v(t._s(t.t("settings","Devices & sessions",{},void 0,{sanitize:!1})))]),t._v(" "),e("p",{staticClass:"settings-hint hidden-when-empty"},[t._v("\n\t\t"+t._s(t.t("settings","Web, desktop and mobile clients currently logged in to your account."))+"\n\t")]),t._v(" "),e("AuthTokenList",{attrs:{tokens:t.tokens},on:{"toggle-scope":t.toggleTokenScope,rename:t.rename,delete:t.deleteToken,wipe:t.wipeToken}}),t._v(" "),t.canCreateToken?e("AuthTokenSetupDialogue",{attrs:{add:t.addNewToken}}):t._e()],1)}),[],!1,null,"240596c0",null).exports;o.nc=btoa(OC.requestToken),a.ZP.use(r.default,{defaultHtml:!1}),a.ZP.prototype.t=t,new(a.ZP.extend(ot))({propsData:{tokens:(0,i.j)("settings","app_tokens"),canCreateToken:(0,i.j)("settings","can_create_app_token")}}).$mount("#security-authtokens")},12283:function(t,e,n){var o=n(87537),i=n.n(o),a=n(23645),r=n.n(a)()(i());r.push([t.id,".wiping[data-v-0f73a400]{background-color:var(--color-background-darker)}td[data-v-0f73a400]{border-top:1px solid var(--color-border);max-width:200px;white-space:normal;vertical-align:middle;position:relative}td.client[data-v-0f73a400],td.more[data-v-0f73a400]{overflow:visible;position:relative;width:44px;height:44px}td.token-name[data-v-0f73a400]{padding:10px 6px}td.token-name.token-rename[data-v-0f73a400]{padding:0}td.token-name input[data-v-0f73a400]{width:100%;margin:0}td.token-name .wiping-warning[data-v-0f73a400]{color:var(--color-text-lighter)}td.more[data-v-0f73a400]{padding:0 10px}td.client div[data-v-0f73a400]{opacity:.57;width:44px;height:44px}","",{version:3,sources:["webpack://./apps/settings/src/components/AuthToken.vue"],names:[],mappings:"AACA,yBACC,+CAAA,CAGD,oBACC,wCAAA,CACA,eAAA,CACA,kBAAA,CACA,qBAAA,CACA,iBAAA,CAEA,oDACC,gBAAA,CACA,iBAAA,CACA,UAAA,CACA,WAAA,CAGD,+BACC,gBAAA,CAEA,4CACC,SAAA,CAGD,qCACC,UAAA,CACA,QAAA,CAGF,+CACC,+BAAA,CAGD,yBAEC,cAAA,CAMA,+BACC,WAAA,CACA,UAAA,CACA,WAAA",sourcesContent:["\n.wiping {\n\tbackground-color: var(--color-background-darker);\n}\n\ntd {\n\tborder-top: 1px solid var(--color-border);\n\tmax-width: 200px;\n\twhite-space: normal;\n\tvertical-align: middle;\n\tposition: relative;\n\n\t&%icon {\n\t\toverflow: visible;\n\t\tposition: relative;\n\t\twidth: 44px;\n\t\theight: 44px;\n\t}\n\n\t&.token-name {\n\t\tpadding: 10px 6px;\n\n\t\t&.token-rename {\n\t\t\tpadding: 0;\n\t\t}\n\n\t\tinput {\n\t\t\twidth: 100%;\n\t\t\tmargin: 0;\n\t\t}\n\t}\n\t&.token-name .wiping-warning {\n\t\tcolor: var(--color-text-lighter);\n\t}\n\n\t&.more {\n\t\t@extend %icon;\n\t\tpadding: 0 10px;\n\t}\n\n\t&.client {\n\t\t@extend %icon;\n\n\t\tdiv {\n\t\t\topacity: 0.57;\n\t\t\twidth: 44px;\n\t\t\theight: 44px;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),e.Z=r},82633:function(t,e,n){var o=n(87537),i=n.n(o),a=n(23645),r=n.n(a)()(i());r.push([t.id,"table[data-v-4f8ceff3]{width:100%;min-height:50px;padding-top:5px;max-width:580px}table th[data-v-4f8ceff3]{opacity:.5;padding:10px 0}.token-list td>a.icon-more[data-v-4f8ceff3]{transition:opacity var(--animation-quick)}.token-list a.icon-more[data-v-4f8ceff3]{padding:14px;display:block;width:44px;height:44px;opacity:.5}.token-list tr:hover td>a.icon[data-v-4f8ceff3],.token-list tr td>a.icon[data-v-4f8ceff3]:focus,.token-list tr.active td>a.icon[data-v-4f8ceff3]{opacity:1}","",{version:3,sources:["webpack://./apps/settings/src/components/AuthTokenList.vue"],names:[],mappings:"AACA,uBACC,UAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CAEA,0BACC,UAAA,CACA,cAAA,CAKD,4CACC,yCAAA,CAGD,yCACC,YAAA,CACA,aAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CAIA,iJAGC,SAAA",sourcesContent:["\ntable {\n\twidth: 100%;\n\tmin-height: 50px;\n\tpadding-top: 5px;\n\tmax-width: 580px;\n\n\tth {\n\t\topacity: .5;\n\t\tpadding: 10px 0;\n\t}\n}\n\n.token-list {\n\ttd > a.icon-more {\n\t\ttransition: opacity var(--animation-quick);\n\t}\n\n\ta.icon-more {\n\t\tpadding: 14px;\n\t\tdisplay: block;\n\t\twidth: 44px;\n\t\theight: 44px;\n\t\topacity: .5;\n\t}\n\n\ttr {\n\t\t&:hover td > a.icon,\n\t\ttd > a.icon:focus,\n\t\t&.active td > a.icon {\n\t\t\topacity: 1;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),e.Z=r},30012:function(t,e,n){var o=n(87537),i=n.n(o),a=n(23645),r=n.n(a)()(i());r.push([t.id,"#app-tokens-table tr>*:nth-child(2){padding-left:6px}#app-tokens-table tr>*:nth-child(3){text-align:right}","",{version:3,sources:["webpack://./apps/settings/src/components/AuthTokenList.vue"],names:[],mappings:"AAEC,oCACC,gBAAA,CAGD,oCACC,gBAAA",sourcesContent:["\n#app-tokens-table {\n\ttr > *:nth-child(2) {\n\t\tpadding-left: 6px;\n\t}\n\n\ttr > *:nth-child(3) {\n\t\ttext-align: right;\n\t}\n}\n"],sourceRoot:""}]),e.Z=r},4734:function(t,e,n){var o=n(87537),i=n.n(o),a=n(23645),r=n.n(a)()(i());r.push([t.id,".app-password-row[data-v-7760634d]{display:flex;align-items:center}.app-password-row .icon[data-v-7760634d]{background-size:16px 16px;display:inline-block;position:relative;top:3px;margin-left:5px;margin-right:8px}.app-password-label[data-v-7760634d]{display:table-cell;padding-right:1em;text-align:right;vertical-align:middle;width:100px}.row input[data-v-7760634d]{height:44px !important;padding:7px 12px;margin-right:12px;width:200px}.monospaced[data-v-7760634d]{width:245px;font-family:monospace}.button-vue[data-v-7760634d]{display:inline-block;margin:3px 3px 3px 3px}.row[data-v-7760634d]{display:flex;align-items:center}.spacing[data-v-7760634d]{padding-top:16px}","",{version:3,sources:["webpack://./apps/settings/src/components/AuthTokenSetupDialogue.vue"],names:[],mappings:"AACA,mCACC,YAAA,CACA,kBAAA,CAEA,yCACC,yBAAA,CACA,oBAAA,CACA,iBAAA,CACA,OAAA,CACA,eAAA,CACA,gBAAA,CAKF,qCACC,kBAAA,CACA,iBAAA,CACA,gBAAA,CACA,qBAAA,CACA,WAAA,CAGD,4BACC,sBAAA,CACA,gBAAA,CACA,iBAAA,CACA,WAAA,CAGD,6BACC,WAAA,CACA,qBAAA,CAGD,6BACC,oBAAA,CACA,sBAAA,CAGD,sBACC,YAAA,CACA,kBAAA,CAGD,0BACC,gBAAA",sourcesContent:["\n.app-password-row {\n\tdisplay: flex;\n\talign-items: center;\n\n\t.icon {\n\t\tbackground-size: 16px 16px;\n\t\tdisplay: inline-block;\n\t\tposition: relative;\n\t\ttop: 3px;\n\t\tmargin-left: 5px;\n\t\tmargin-right: 8px;\n\t}\n\n}\n\n.app-password-label {\n\tdisplay: table-cell;\n\tpadding-right: 1em;\n\ttext-align: right;\n\tvertical-align: middle;\n\twidth: 100px;\n}\n\n.row input {\n\theight: 44px !important;\n\tpadding: 7px 12px;\n\tmargin-right: 12px;\n\twidth: 200px;\n}\n\n.monospaced {\n\twidth: 245px;\n\tfont-family: monospace;\n}\n\n.button-vue{\n\tdisplay:inline-block;\n\tmargin: 3px 3px 3px 3px;\n}\n\n.row {\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.spacing {\n\tpadding-top: 16px;\n}\n"],sourceRoot:""}]),e.Z=r}},o={};function i(t){var e=o[t];if(void 0!==e)return e.exports;var a=o[t]={id:t,loaded:!1,exports:{}};return n[t].call(a.exports,a,a.exports,i),a.loaded=!0,a.exports}i.m=n,e=[],i.O=function(t,n,o,a){if(!n){var r=1/0;for(d=0;d<e.length;d++){n=e[d][0],o=e[d][1],a=e[d][2];for(var s=!0,c=0;c<n.length;c++)(!1&a||r>=a)&&Object.keys(i.O).every((function(t){return i.O[t](n[c])}))?n.splice(c--,1):(s=!1,a<r&&(r=a));if(s){e.splice(d--,1);var p=o();void 0!==p&&(t=p)}}return t}a=a||0;for(var d=e.length;d>0&&e[d-1][2]>a;d--)e[d]=e[d-1];e[d]=[n,o,a]},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,{a:e}),e},i.d=function(t,e){for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},i.j=4783,function(){i.b=document.baseURI||self.location.href;var t={4783:0};i.O.j=function(e){return 0===t[e]};var e=function(e,n){var o,a,r=n[0],s=n[1],c=n[2],p=0;if(r.some((function(e){return 0!==t[e]}))){for(o in s)i.o(s,o)&&(i.m[o]=s[o]);if(c)var d=c(i)}for(e&&e(n);p<r.length;p++)a=r[p],i.o(t,a)&&t[a]&&t[a][0](),t[a]=0;return i.O(d)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))}(),i.nc=void 0;var a=i.O(void 0,[7874],(function(){return i(40726)}));a=i.O(a)}();
-//# sourceMappingURL=settings-vue-settings-personal-security.js.map?v=a98ba53f8ad87946186f
\ No newline at end of file
+!function(){"use strict";var e,n={20063:function(e,n,o){var i=o(79954),a=o(20144),r=o(61361),s=o(4820),c=o(10128),p=(o(65509),o(79753)),d=o(15961),l={ie:/(?:MSIE|Trident|Trident\/7.0; rv)[ :](\d+)/,edge:/^Mozilla\/5\.0 \([^)]+\) AppleWebKit\/[0-9.]+ \(KHTML, like Gecko\) Chrome\/[0-9.]+ (?:Mobile Safari|Safari)\/[0-9.]+ Edge\/[0-9.]+$/,firefox:/^Mozilla\/5\.0 \([^)]*(Windows|OS X|Linux)[^)]+\) Gecko\/[0-9.]+ Firefox\/(\d+)(?:\.\d)?$/,chrome:/^Mozilla\/5\.0 \([^)]*(Windows|OS X|Linux)[^)]+\) AppleWebKit\/[0-9.]+ \(KHTML, like Gecko\) Chrome\/(\d+)[0-9.]+ (?:Mobile Safari|Safari)\/[0-9.]+$/,safari:/^Mozilla\/5\.0 \([^)]*(Windows|OS X)[^)]+\) AppleWebKit\/[0-9.]+ \(KHTML, like Gecko\)(?: Version\/([0-9]+)[0-9.]+)? Safari\/[0-9.A-Z]+$/,androidChrome:/Android.*(?:; (.*) Build\/).*Chrome\/(\d+)[0-9.]+/,iphone:/ *CPU +iPhone +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,ipad:/\(iPad; *CPU +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,iosClient:/^Mozilla\/5\.0 \(iOS\) (?:ownCloud|Nextcloud)-iOS.*$/,androidClient:/^Mozilla\/5\.0 \(Android\) (?:ownCloud|Nextcloud)-android.*$/,iosTalkClient:/^Mozilla\/5\.0 \(iOS\) Nextcloud-Talk.*$/,androidTalkClient:/^Mozilla\/5\.0 \(Android\) Nextcloud-Talk.*$/,davx5:/DAV(?:droid|x5)\/([^ ]+)/,webPirate:/(Sailfish).*WebPirate\/(\d+)/,sailfishBrowser:/(Sailfish).*SailfishBrowser\/(\d+)/,neon:/Neon \d+\.\d+\.\d+\+\d+/},u={ie:t("setting","Internet Explorer"),edge:t("setting","Edge"),firefox:t("setting","Firefox"),chrome:t("setting","Google Chrome"),safari:t("setting","Safari"),androidChrome:t("setting","Google Chrome for Android"),iphone:t("setting","iPhone"),ipad:t("setting","iPad"),iosClient:t("setting","{productName} iOS app",{productName:window.oc_defaults.productName}),androidClient:t("setting","{productName} Android app",{productName:window.oc_defaults.productName}),iosTalkClient:t("setting","{productName} Talk for iOS",{productName:window.oc_defaults.productName}),androidTalkClient:t("setting","{productName} Talk for Android",{productName:window.oc_defaults.productName}),davx5:"DAVx5",webPirate:"WebPirate",sailfishBrowser:"SailfishBrowser",neon:"Neon"},A={ie:"icon-desktop",edge:"icon-desktop",firefox:"icon-desktop",chrome:"icon-desktop",safari:"icon-desktop",androidChrome:"icon-phone",iphone:"icon-phone",ipad:"icon-tablet",iosClient:"icon-phone",androidClient:"icon-phone",iosTalkClient:"icon-phone",androidTalkClient:"icon-phone",davx5:"icon-phone",webPirate:"icon-link",sailfishBrowser:"icon-link"},h={name:"AuthToken",components:{NcActions:d.O3,NcActionButton:d.Js,NcActionCheckbox:d.Bt},props:{token:{type:Object,required:!0}},data:function(){return{showMore:this.token.canScope||this.token.canDelete,renaming:!1,newName:"",oldName:"",actionOpen:!1}},computed:{lastActivityRelative:function(){return OC.Util.relativeModifiedDate(1e3*this.token.lastActivity)},lastActivity:function(){return OC.Util.formatDate(1e3*this.token.lastActivity,"LLL")},iconName:function(){var e=this.token.name.match(/Mozilla\/5\.0 \((\w+)\) (?:mirall|csyncoC)\/(\d+\.\d+\.\d+)/),n="";e&&(this.token.name=t("settings","Sync client - {os}",{os:e[1],version:e[2]}),n="icon-desktop");var o=this.token.name,i=this.token.name;for(var a in l){var r=o.match(l[a]);r&&(i=r[2]&&r[1]?u[a]+" "+r[2]+" - "+r[1]:r[1]?u[a]+" "+r[1]:u[a],n=A[a])}return this.token.current&&(i=t("settings","This session")),{icon:n,name:i}},wiping:function(){return 2===this.token.type}},methods:{startRename:function(){var t=this;this.actionOpen=!1,this.oldName=this.token.name,this.newName=this.token.name,this.renaming=!0,this.$nextTick((function(){t.$refs.input.select()}))},cancelRename:function(){this.renaming=!1,this.$emit("rename",this.token,this.oldName)},revoke:function(){this.actionOpen=!1,this.$emit("delete",this.token)},rename:function(){this.renaming=!1,this.$emit("rename",this.token,this.newName)},wipe:function(){this.actionOpen=!1,this.$emit("wipe",this.token)}}},f=o(93379),g=o.n(f),m=o(7795),v=o.n(m),C=o(90569),k=o.n(C),w=o(3565),y=o.n(w),x=o(19216),b=o.n(x),_=o(44589),T=o.n(_),N=o(12283),B={};B.styleTagTransform=T(),B.setAttributes=y(),B.insert=k().bind(null,"head"),B.domAPI=v(),B.insertStyleElement=b(),g()(N.Z,B),N.Z&&N.Z.locals&&N.Z.locals;var O=o(51900),P=(0,O.Z)(h,(function(){var t=this,e=t._self._c;return e("tr",{class:t.wiping,attrs:{"data-id":t.token.id}},[e("td",{staticClass:"client"},[e("div",{class:t.iconName.icon})]),t._v(" "),e("td",{staticClass:"token-name"},[t.token.canRename&&t.renaming?e("input",{directives:[{name:"model",rawName:"v-model",value:t.newName,expression:"newName"}],ref:"input",attrs:{type:"text"},domProps:{value:t.newName},on:{keyup:[function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:t.rename.apply(null,arguments)},function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"esc",27,e.key,["Esc","Escape"])?null:t.cancelRename.apply(null,arguments)}],change:t.rename,input:function(e){e.target.composing||(t.newName=e.target.value)}}}):e("span",[t._v(t._s(t.iconName.name))]),t._v(" "),t.wiping?e("span",{staticClass:"wiping-warning"},[t._v("("+t._s(t.t("settings","Marked for remote wipe"))+")")]):t._e()]),t._v(" "),e("td",[e("span",{staticClass:"last-activity",attrs:{title:t.lastActivity}},[t._v(t._s(t.lastActivityRelative))])]),t._v(" "),e("td",{staticClass:"more"},[t.token.current?t._e():e("NcActions",{attrs:{title:t.t("settings","Device settings"),"aria-label":t.t("settings","Device settings"),open:t.actionOpen},on:{"update:open":function(e){t.actionOpen=e}}},[1===t.token.type?e("NcActionCheckbox",{attrs:{checked:t.token.scope.filesystem},on:{change:function(e){return e.stopPropagation(),e.preventDefault(),t.$emit("toggle-scope",t.token,"filesystem",!t.token.scope.filesystem)}}},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Allow filesystem access"))+"\n\t\t\t")]):t._e(),t._v(" "),t.token.canRename?e("NcActionButton",{attrs:{icon:"icon-rename"},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.startRename.apply(null,arguments)}}},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Rename"))+"\n\t\t\t")]):t._e(),t._v(" "),t.token.canDelete?[2!==t.token.type?[e("NcActionButton",{attrs:{icon:"icon-delete"},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.revoke.apply(null,arguments)}}},[t._v("\n\t\t\t\t\t\t"+t._s(t.t("settings","Revoke"))+"\n\t\t\t\t\t")]),t._v(" "),e("NcActionButton",{attrs:{icon:"icon-delete"},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.wipe.apply(null,arguments)}}},[t._v("\n\t\t\t\t\t\t"+t._s(t.t("settings","Wipe device"))+"\n\t\t\t\t\t")])]:2===t.token.type?e("NcActionButton",{attrs:{icon:"icon-delete",title:t.t("settings","Revoke")},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.revoke.apply(null,arguments)}}},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Revoking this token might prevent the wiping of your device if it has not started the wipe yet."))+"\n\t\t\t\t")]):t._e()]:t._e()],2)],1)])}),[],!1,null,"0f73a400",null),S={name:"AuthTokenList",components:{AuthToken:P.exports},props:{tokens:{type:Array,required:!0}},computed:{sortedTokens:function(){return this.tokens.slice().sort((function(t,e){var n=parseInt(t.lastActivity,10);return parseInt(e.lastActivity,10)-n}))}},methods:{toggleScope:function(t,e,n){this.$emit("toggle-scope",t,e,n)},rename:function(t,e){this.$emit("rename",t,e)},onDelete:function(t){this.$emit("delete",t)},onWipe:function(t){this.$emit("wipe",t)}}},D=o(82633),R={};R.styleTagTransform=T(),R.setAttributes=y(),R.insert=k().bind(null,"head"),R.domAPI=v(),R.insertStyleElement=b(),g()(D.Z,R),D.Z&&D.Z.locals&&D.Z.locals;var Z=o(30012),E={};E.styleTagTransform=T(),E.setAttributes=y(),E.insert=k().bind(null,"head"),E.domAPI=v(),E.insertStyleElement=b(),g()(Z.Z,E),Z.Z&&Z.Z.locals&&Z.Z.locals;var U=(0,O.Z)(S,(function(){var t=this,e=t._self._c;return e("table",{attrs:{id:"app-tokens-table"}},[t.tokens.length?e("thead",[e("tr",[e("th"),t._v(" "),e("th",[t._v(t._s(t.t("settings","Device")))]),t._v(" "),e("th",[t._v(t._s(t.t("settings","Last activity")))]),t._v(" "),e("th")])]):t._e(),t._v(" "),e("tbody",{staticClass:"token-list"},t._l(t.sortedTokens,(function(n){return e("AuthToken",{key:n.id,attrs:{token:n},on:{"toggle-scope":t.toggleScope,rename:t.rename,delete:t.onDelete,wipe:t.onWipe}})})),1)])}),[],!1,null,"4f8ceff3",null).exports,M=o(147),$=o.n(M),G=o(64024),W=o(10861),q=o.n(W),z=o(80419),L=o(85226),I=o(25108);function j(t,e,n,o,i,a,r){try{var s=t[a](r),c=s.value}catch(t){return void n(t)}s.done?e(c):Promise.resolve(c).then(o,i)}var K={name:"AuthTokenSetupDialogue",components:{Check:z.default,ContentCopy:L.Z,NcButton:q(),QR:$()},props:{add:{type:Function,required:!0}},data:function(){return{adding:!1,loading:!1,deviceName:"",appPassword:"",loginName:"",copied:!1,showQR:!1,qrUrl:""}},computed:{copyTooltipOptions:function(){return this.copied?t("settings","Copied!"):t("settings","Copy")}},methods:{selectInput:function(t){t.currentTarget.select()},submit:function(){var e=this;(0,c.confirmPassword)().then((function(){return e.loading=!0,e.add(e.deviceName)})).then((function(t){e.adding=!0,e.loginName=t.loginName,e.appPassword=t.token;var n=window.location.protocol+"//"+window.location.host+(0,p.getRootUrl)();e.qrUrl="nc://login/user:".concat(t.loginName,"&password:").concat(t.token,"&server:").concat(n),e.$nextTick((function(){e.$refs.appPassword.select()}))})).catch((function(n){I.error("could not create a new app password",n),OC.Notification.showTemporary(t("settings","Error while creating device token")),e.reset()}))},copyPassword:function(){var e,n=this;return(e=regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,navigator.clipboard.writeText(n.appPassword);case 3:n.copied=!0,e.next=11;break;case 6:e.prev=6,e.t0=e.catch(0),n.copied=!1,I.error(e.t0),(0,G.x2)(t("settings","Could not copy app password. Please copy it manually."));case 11:return e.prev=11,setTimeout((function(){n.copied=!1}),4e3),e.finish(11);case 14:case"end":return e.stop()}}),e,null,[[0,6,11,14]])})),function(){var t=this,n=arguments;return new Promise((function(o,i){var a=e.apply(t,n);function r(t){j(a,o,i,r,s,"next",t)}function s(t){j(a,o,i,r,s,"throw",t)}r(void 0)}))})()},reset:function(){this.adding=!1,this.loading=!1,this.showQR=!1,this.qrUrl="",this.deviceName="",this.appPassword="",this.loginName=""}}},Q=K,F=o(83084),X={};X.styleTagTransform=T(),X.setAttributes=y(),X.insert=k().bind(null,"head"),X.domAPI=v(),X.insertStyleElement=b(),g()(F.Z,X),F.Z&&F.Z.locals&&F.Z.locals;var H=(0,O.Z)(Q,(function(){var t=this,e=t._self._c;return t.adding?e("div",{staticClass:"spacing"},[t._v("\n\t"+t._s(t.t("settings","Use the credentials below to configure your app or device."))+"\n\t"+t._s(t.t("settings","For security reasons this password will only be shown once."))+"\n\t"),e("div",{staticClass:"app-password-row"},[e("label",{staticClass:"app-password-label",attrs:{for:"app-username"}},[t._v(t._s(t.t("settings","Username")))]),t._v(" "),e("input",{staticClass:"monospaced",attrs:{id:"app-username",type:"text",readonly:"readonly"},domProps:{value:t.loginName},on:{focus:t.selectInput}})]),t._v(" "),e("div",{staticClass:"app-password-row"},[e("label",{staticClass:"app-password-label",attrs:{for:"app-password"}},[t._v(t._s(t.t("settings","Password")))]),t._v(" "),e("input",{ref:"appPassword",staticClass:"monospaced",attrs:{id:"app-password",type:"text",readonly:"readonly"},domProps:{value:t.appPassword},on:{focus:t.selectInput}}),t._v(" "),e("NcButton",{attrs:{type:"tertiary",title:t.copyTooltipOptions,"aria-label":t.copyTooltipOptions},on:{click:t.copyPassword},scopedSlots:t._u([{key:"icon",fn:function(){return[t.copied?e("Check",{attrs:{size:20}}):e("ContentCopy",{attrs:{size:20}})]},proxy:!0}])}),t._v(" "),e("NcButton",{on:{click:t.reset}},[t._v("\n\t\t\t"+t._s(t.t("settings","Done"))+"\n\t\t")])],1),t._v(" "),e("div",{staticClass:"app-password-row"},[e("span",{staticClass:"app-password-label"}),t._v(" "),t.showQR?e("QR",{attrs:{value:t.qrUrl}}):e("a",{on:{click:function(e){t.showQR=!0}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Show QR code for mobile apps"))+"\n\t\t")])],1)]):e("div",{staticClass:"row spacing",attrs:{id:"generate-app-token-section"}},[e("input",{directives:[{name:"model",rawName:"v-model",value:t.deviceName,expression:"deviceName"}],attrs:{type:"text",maxlength:120,disabled:t.loading,placeholder:t.t("settings","App name")},domProps:{value:t.deviceName},on:{keydown:function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:t.submit.apply(null,arguments)},input:function(e){e.target.composing||(t.deviceName=e.target.value)}}}),t._v(" "),e("NcButton",{attrs:{disabled:t.loading||0===t.deviceName.length,type:"primary"},on:{click:t.submit}},[t._v("\n\t\t"+t._s(t.t("settings","Create new app password"))+"\n\t")])],1)}),[],!1,null,"05a9cc2c",null),V=H.exports,Y=o(25108);function J(t,e,n,o,i,a,r){try{var s=t[a](r),c=s.value}catch(t){return void n(t)}s.done?e(c):Promise.resolve(c).then(o,i)}var tt=function(t){return function(e){return t(e),e}},et={name:"AuthTokenSection",components:{AuthTokenSetupDialogue:V,AuthTokenList:U},props:{tokens:{type:Array,required:!0},canCreateToken:{type:Boolean,required:!0}},data:function(){return{baseUrl:(0,p.generateUrl)("/settings/personal/authtokens")}},methods:{addNewToken:function(e){var n=this;Y.debug("creating a new app token",e);var o={name:e};return s.default.post(this.baseUrl,o).then((function(t){return t.data})).then(tt((function(){return Y.debug("app token created")}))).then(tt((function(t){return n.tokens.push(t.deviceToken)}))).catch((function(e){throw Y.error.bind("could not create app password",e),OC.Notification.showTemporary(t("settings","Error while creating device token")),e}))},toggleTokenScope:function(e,n,o){Y.debug("updating app token scope",e.id,n,o);var i=e.scope[n];return e.scope[n]=o,this.updateToken(e).then(tt((function(){return Y.debug("app token scope updated")}))).catch((function(o){throw Y.error.bind("could not update app token scope",o),OC.Notification.showTemporary(t("settings","Error while updating device token scope")),e.scope[n]=i,o}))},rename:function(e,n){Y.debug("renaming app token",e.id,e.name,n);var o=e.name;return e.name=n,this.updateToken(e).then(tt((function(){return Y.debug("app token name updated")}))).catch((function(n){Y.error.bind("could not update app token name",n),OC.Notification.showTemporary(t("settings","Error while updating device token name")),e.name=o}))},updateToken:function(t){return s.default.put(this.baseUrl+"/"+t.id,t).then((function(t){return t.data}))},deleteToken:function(e){var n=this;return Y.debug("deleting app token",e),this.tokens=this.tokens.filter((function(t){return t!==e})),s.default.delete(this.baseUrl+"/"+e.id).then((function(t){return t.data})).then(tt((function(){return Y.debug("app token deleted")}))).catch((function(o){Y.error.bind("could not delete app token",o),OC.Notification.showTemporary(t("settings","Error while deleting the token")),n.tokens.push(e)}))},wipeToken:function(e){var n,o=this;return(n=regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return Y.debug("wiping app token",e),n.prev=1,n.next=4,(0,c.confirmPassword)();case 4:return n.next=6,new Promise((function(e){OC.dialogs.confirm(t("settings","Do you really want to wipe your data from this device?"),t("settings","Confirm wipe"),e,!0)}));case 6:if(n.sent){n.next=9;break}return Y.debug("wipe aborted by user"),n.abrupt("return");case 9:return n.next=11,s.default.post(o.baseUrl+"/wipe/"+e.id);case 11:Y.debug("app token marked for wipe"),e.type=2,n.next=19;break;case 15:n.prev=15,n.t0=n.catch(1),Y.error("could not wipe app token",n.t0),OC.Notification.showTemporary(t("settings","Error while wiping the device with the token"));case 19:case"end":return n.stop()}}),n,null,[[1,15]])})),function(){var t=this,e=arguments;return new Promise((function(o,i){var a=n.apply(t,e);function r(t){J(a,o,i,r,s,"next",t)}function s(t){J(a,o,i,r,s,"throw",t)}r(void 0)}))})()}}},nt=et,ot=(0,O.Z)(nt,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"section",attrs:{id:"security"}},[e("h2",[t._v(t._s(t.t("settings","Devices & sessions",{},void 0,{sanitize:!1})))]),t._v(" "),e("p",{staticClass:"settings-hint hidden-when-empty"},[t._v("\n\t\t"+t._s(t.t("settings","Web, desktop and mobile clients currently logged in to your account."))+"\n\t")]),t._v(" "),e("AuthTokenList",{attrs:{tokens:t.tokens},on:{"toggle-scope":t.toggleTokenScope,rename:t.rename,delete:t.deleteToken,wipe:t.wipeToken}}),t._v(" "),t.canCreateToken?e("AuthTokenSetupDialogue",{attrs:{add:t.addNewToken}}):t._e()],1)}),[],!1,null,"240596c0",null).exports;o.nc=btoa(OC.requestToken),a.ZP.use(r.default,{defaultHtml:!1}),a.ZP.prototype.t=t,new(a.ZP.extend(ot))({propsData:{tokens:(0,i.j)("settings","app_tokens"),canCreateToken:(0,i.j)("settings","can_create_app_token")}}).$mount("#security-authtokens")},12283:function(t,e,n){var o=n(87537),i=n.n(o),a=n(23645),r=n.n(a)()(i());r.push([t.id,".wiping[data-v-0f73a400]{background-color:var(--color-background-darker)}td[data-v-0f73a400]{border-top:1px solid var(--color-border);max-width:200px;white-space:normal;vertical-align:middle;position:relative}td.client[data-v-0f73a400],td.more[data-v-0f73a400]{overflow:visible;position:relative;width:44px;height:44px}td.token-name[data-v-0f73a400]{padding:10px 6px}td.token-name.token-rename[data-v-0f73a400]{padding:0}td.token-name input[data-v-0f73a400]{width:100%;margin:0}td.token-name .wiping-warning[data-v-0f73a400]{color:var(--color-text-lighter)}td.more[data-v-0f73a400]{padding:0 10px}td.client div[data-v-0f73a400]{opacity:.57;width:44px;height:44px}","",{version:3,sources:["webpack://./apps/settings/src/components/AuthToken.vue"],names:[],mappings:"AACA,yBACC,+CAAA,CAGD,oBACC,wCAAA,CACA,eAAA,CACA,kBAAA,CACA,qBAAA,CACA,iBAAA,CAEA,oDACC,gBAAA,CACA,iBAAA,CACA,UAAA,CACA,WAAA,CAGD,+BACC,gBAAA,CAEA,4CACC,SAAA,CAGD,qCACC,UAAA,CACA,QAAA,CAGF,+CACC,+BAAA,CAGD,yBAEC,cAAA,CAMA,+BACC,WAAA,CACA,UAAA,CACA,WAAA",sourcesContent:["\n.wiping {\n\tbackground-color: var(--color-background-darker);\n}\n\ntd {\n\tborder-top: 1px solid var(--color-border);\n\tmax-width: 200px;\n\twhite-space: normal;\n\tvertical-align: middle;\n\tposition: relative;\n\n\t&%icon {\n\t\toverflow: visible;\n\t\tposition: relative;\n\t\twidth: 44px;\n\t\theight: 44px;\n\t}\n\n\t&.token-name {\n\t\tpadding: 10px 6px;\n\n\t\t&.token-rename {\n\t\t\tpadding: 0;\n\t\t}\n\n\t\tinput {\n\t\t\twidth: 100%;\n\t\t\tmargin: 0;\n\t\t}\n\t}\n\t&.token-name .wiping-warning {\n\t\tcolor: var(--color-text-lighter);\n\t}\n\n\t&.more {\n\t\t@extend %icon;\n\t\tpadding: 0 10px;\n\t}\n\n\t&.client {\n\t\t@extend %icon;\n\n\t\tdiv {\n\t\t\topacity: 0.57;\n\t\t\twidth: 44px;\n\t\t\theight: 44px;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),e.Z=r},82633:function(t,e,n){var o=n(87537),i=n.n(o),a=n(23645),r=n.n(a)()(i());r.push([t.id,"table[data-v-4f8ceff3]{width:100%;min-height:50px;padding-top:5px;max-width:580px}table th[data-v-4f8ceff3]{opacity:.5;padding:10px 0}.token-list td>a.icon-more[data-v-4f8ceff3]{transition:opacity var(--animation-quick)}.token-list a.icon-more[data-v-4f8ceff3]{padding:14px;display:block;width:44px;height:44px;opacity:.5}.token-list tr:hover td>a.icon[data-v-4f8ceff3],.token-list tr td>a.icon[data-v-4f8ceff3]:focus,.token-list tr.active td>a.icon[data-v-4f8ceff3]{opacity:1}","",{version:3,sources:["webpack://./apps/settings/src/components/AuthTokenList.vue"],names:[],mappings:"AACA,uBACC,UAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CAEA,0BACC,UAAA,CACA,cAAA,CAKD,4CACC,yCAAA,CAGD,yCACC,YAAA,CACA,aAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CAIA,iJAGC,SAAA",sourcesContent:["\ntable {\n\twidth: 100%;\n\tmin-height: 50px;\n\tpadding-top: 5px;\n\tmax-width: 580px;\n\n\tth {\n\t\topacity: .5;\n\t\tpadding: 10px 0;\n\t}\n}\n\n.token-list {\n\ttd > a.icon-more {\n\t\ttransition: opacity var(--animation-quick);\n\t}\n\n\ta.icon-more {\n\t\tpadding: 14px;\n\t\tdisplay: block;\n\t\twidth: 44px;\n\t\theight: 44px;\n\t\topacity: .5;\n\t}\n\n\ttr {\n\t\t&:hover td > a.icon,\n\t\ttd > a.icon:focus,\n\t\t&.active td > a.icon {\n\t\t\topacity: 1;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),e.Z=r},30012:function(t,e,n){var o=n(87537),i=n.n(o),a=n(23645),r=n.n(a)()(i());r.push([t.id,"#app-tokens-table tr>*:nth-child(2){padding-left:6px}#app-tokens-table tr>*:nth-child(3){text-align:right}","",{version:3,sources:["webpack://./apps/settings/src/components/AuthTokenList.vue"],names:[],mappings:"AAEC,oCACC,gBAAA,CAGD,oCACC,gBAAA",sourcesContent:["\n#app-tokens-table {\n\ttr > *:nth-child(2) {\n\t\tpadding-left: 6px;\n\t}\n\n\ttr > *:nth-child(3) {\n\t\ttext-align: right;\n\t}\n}\n"],sourceRoot:""}]),e.Z=r},83084:function(t,e,n){var o=n(87537),i=n.n(o),a=n(23645),r=n.n(a)()(i());r.push([t.id,".app-password-row[data-v-05a9cc2c]{display:flex;align-items:center}.app-password-row .icon[data-v-05a9cc2c]{background-size:16px 16px;display:inline-block;position:relative;top:3px;margin-left:5px;margin-right:8px}.app-password-label[data-v-05a9cc2c]{display:table-cell;padding-right:1em;text-align:right;vertical-align:middle;width:100px}.row input[data-v-05a9cc2c]{height:44px !important;padding:7px 12px;margin-right:12px;width:200px}.monospaced[data-v-05a9cc2c]{width:245px;font-family:monospace}.button-vue[data-v-05a9cc2c]{display:inline-block;margin:3px 3px 3px 3px}.row[data-v-05a9cc2c]{display:flex;align-items:center}.spacing[data-v-05a9cc2c]{padding-top:16px}","",{version:3,sources:["webpack://./apps/settings/src/components/AuthTokenSetupDialogue.vue"],names:[],mappings:"AACA,mCACC,YAAA,CACA,kBAAA,CAEA,yCACC,yBAAA,CACA,oBAAA,CACA,iBAAA,CACA,OAAA,CACA,eAAA,CACA,gBAAA,CAKF,qCACC,kBAAA,CACA,iBAAA,CACA,gBAAA,CACA,qBAAA,CACA,WAAA,CAGD,4BACC,sBAAA,CACA,gBAAA,CACA,iBAAA,CACA,WAAA,CAGD,6BACC,WAAA,CACA,qBAAA,CAGD,6BACC,oBAAA,CACA,sBAAA,CAGD,sBACC,YAAA,CACA,kBAAA,CAGD,0BACC,gBAAA",sourcesContent:["\n.app-password-row {\n\tdisplay: flex;\n\talign-items: center;\n\n\t.icon {\n\t\tbackground-size: 16px 16px;\n\t\tdisplay: inline-block;\n\t\tposition: relative;\n\t\ttop: 3px;\n\t\tmargin-left: 5px;\n\t\tmargin-right: 8px;\n\t}\n\n}\n\n.app-password-label {\n\tdisplay: table-cell;\n\tpadding-right: 1em;\n\ttext-align: right;\n\tvertical-align: middle;\n\twidth: 100px;\n}\n\n.row input {\n\theight: 44px !important;\n\tpadding: 7px 12px;\n\tmargin-right: 12px;\n\twidth: 200px;\n}\n\n.monospaced {\n\twidth: 245px;\n\tfont-family: monospace;\n}\n\n.button-vue{\n\tdisplay:inline-block;\n\tmargin: 3px 3px 3px 3px;\n}\n\n.row {\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.spacing {\n\tpadding-top: 16px;\n}\n"],sourceRoot:""}]),e.Z=r}},o={};function i(t){var e=o[t];if(void 0!==e)return e.exports;var a=o[t]={id:t,loaded:!1,exports:{}};return n[t].call(a.exports,a,a.exports,i),a.loaded=!0,a.exports}i.m=n,e=[],i.O=function(t,n,o,a){if(!n){var r=1/0;for(d=0;d<e.length;d++){n=e[d][0],o=e[d][1],a=e[d][2];for(var s=!0,c=0;c<n.length;c++)(!1&a||r>=a)&&Object.keys(i.O).every((function(t){return i.O[t](n[c])}))?n.splice(c--,1):(s=!1,a<r&&(r=a));if(s){e.splice(d--,1);var p=o();void 0!==p&&(t=p)}}return t}a=a||0;for(var d=e.length;d>0&&e[d-1][2]>a;d--)e[d]=e[d-1];e[d]=[n,o,a]},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,{a:e}),e},i.d=function(t,e){for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},i.j=4783,function(){i.b=document.baseURI||self.location.href;var t={4783:0};i.O.j=function(e){return 0===t[e]};var e=function(e,n){var o,a,r=n[0],s=n[1],c=n[2],p=0;if(r.some((function(e){return 0!==t[e]}))){for(o in s)i.o(s,o)&&(i.m[o]=s[o]);if(c)var d=c(i)}for(e&&e(n);p<r.length;p++)a=r[p],i.o(t,a)&&t[a]&&t[a][0](),t[a]=0;return i.O(d)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))}(),i.nc=void 0;var a=i.O(void 0,[7874],(function(){return i(20063)}));a=i.O(a)}();
+//# sourceMappingURL=settings-vue-settings-personal-security.js.map?v=127d9e13f10dba29faee
\ No newline at end of file
index 42e6b5c18d9b6b41f8f6c8020226aff5b9428f4b..09b83f9db0638b29383c2436c35ef63b70f13173 100644 (file)
@@ -1 +1 @@
-{"version":3,"file":"settings-vue-settings-personal-security.js?v=a98ba53f8ad87946186f","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/settings/src/components/AuthToken.vue","webpack:///nextcloud/apps/settings/src/components/AuthToken.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/AuthToken.vue?70ef","webpack://nextcloud/./apps/settings/src/components/AuthToken.vue?1338","webpack://nextcloud/./apps/settings/src/components/AuthToken.vue?ca52","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?b8ab","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?0836","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?90cb","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?5c2d","webpack:///nextcloud/apps/settings/src/components/AuthTokenSetupDialogue.vue","webpack:///nextcloud/apps/settings/src/components/AuthTokenSetupDialogue.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/AuthTokenSetupDialogue.vue?84c8","webpack://nextcloud/./apps/settings/src/components/AuthTokenSetupDialogue.vue?521c","webpack://nextcloud/./apps/settings/src/components/AuthTokenSetupDialogue.vue?6bad","webpack:///nextcloud/apps/settings/src/components/AuthTokenSection.vue","webpack:///nextcloud/apps/settings/src/components/AuthTokenSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/AuthTokenSection.vue?e9d0","webpack://nextcloud/./apps/settings/src/components/AuthTokenSection.vue?a091","webpack:///nextcloud/apps/settings/src/main-personal-security.js","webpack:///nextcloud/apps/settings/src/components/AuthToken.vue?vue&type=style&index=0&id=0f73a400&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue?vue&type=style&index=0&id=4f8ceff3&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue?vue&type=style&index=1&id=4f8ceff3&prod&lang=scss&","webpack:///nextcloud/apps/settings/src/components/AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=7760634d&prod&lang=scss&scoped=true&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","<!--\n  - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n  -\n  - @author 2019 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<template>\n\t<tr :data-id=\"token.id\"\n\t\t:class=\"wiping\">\n\t\t<td class=\"client\">\n\t\t\t<div :class=\"iconName.icon\" />\n\t\t</td>\n\t\t<td class=\"token-name\">\n\t\t\t<input v-if=\"token.canRename && renaming\"\n\t\t\t\tref=\"input\"\n\t\t\t\tv-model=\"newName\"\n\t\t\t\ttype=\"text\"\n\t\t\t\t@keyup.enter=\"rename\"\n\t\t\t\t@change=\"rename\"\n\t\t\t\t@keyup.esc=\"cancelRename\">\n\t\t\t<span v-else>{{ iconName.name }}</span>\n\t\t\t<span v-if=\"wiping\" class=\"wiping-warning\">({{ t('settings', 'Marked for remote wipe') }})</span>\n\t\t</td>\n\t\t<td>\n\t\t\t<span :title=\"lastActivity\" class=\"last-activity\">{{ lastActivityRelative }}</span>\n\t\t</td>\n\t\t<td class=\"more\">\n\t\t\t<NcActions v-if=\"!token.current\"\n\t\t\t\t:title=\"t('settings', 'Device settings')\"\n\t\t\t\t:aria-label=\"t('settings', 'Device settings')\"\n\t\t\t\t:open.sync=\"actionOpen\">\n\t\t\t\t<NcActionCheckbox v-if=\"token.type === 1\"\n\t\t\t\t\t:checked=\"token.scope.filesystem\"\n\t\t\t\t\t@change.stop.prevent=\"$emit('toggle-scope', token, 'filesystem', !token.scope.filesystem)\">\n\t\t\t\t\t<!-- TODO: add text/longtext with some description -->\n\t\t\t\t\t{{ t('settings', 'Allow filesystem access') }}\n\t\t\t\t</NcActionCheckbox>\n\t\t\t\t<NcActionButton v-if=\"token.canRename\"\n\t\t\t\t\ticon=\"icon-rename\"\n\t\t\t\t\t@click.stop.prevent=\"startRename\">\n\t\t\t\t\t<!-- TODO: add text/longtext with some description -->\n\t\t\t\t\t{{ t('settings', 'Rename') }}\n\t\t\t\t</NcActionButton>\n\n\t\t\t\t<!-- revoke & wipe -->\n\t\t\t\t<template v-if=\"token.canDelete\">\n\t\t\t\t\t<template v-if=\"token.type !== 2\">\n\t\t\t\t\t\t<NcActionButton icon=\"icon-delete\"\n\t\t\t\t\t\t\t@click.stop.prevent=\"revoke\">\n\t\t\t\t\t\t\t<!-- TODO: add text/longtext with some description -->\n\t\t\t\t\t\t\t{{ t('settings', 'Revoke') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t\t<NcActionButton icon=\"icon-delete\"\n\t\t\t\t\t\t\t@click.stop.prevent=\"wipe\">\n\t\t\t\t\t\t\t{{ t('settings', 'Wipe device') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t</template>\n\t\t\t\t\t<NcActionButton v-else-if=\"token.type === 2\"\n\t\t\t\t\t\ticon=\"icon-delete\"\n\t\t\t\t\t\t:title=\"t('settings', 'Revoke')\"\n\t\t\t\t\t\t@click.stop.prevent=\"revoke\">\n\t\t\t\t\t\t{{ t('settings', 'Revoking this token might prevent the wiping of your device if it has not started the wipe yet.') }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</template>\n\t\t\t</NcActions>\n\t\t</td>\n\t</tr>\n</template>\n\n<script>\nimport {\n\tNcActions,\n\tNcActionButton,\n\tNcActionCheckbox,\n} from '@nextcloud/vue'\n\n// When using capture groups the following parts are extracted the first is used as the version number, the second as the OS\nconst userAgentMap = {\n\tie: /(?:MSIE|Trident|Trident\\/7.0; rv)[ :](\\d+)/,\n\t// Microsoft Edge User Agent from https://msdn.microsoft.com/en-us/library/hh869301(v=vs.85).aspx\n\tedge: /^Mozilla\\/5\\.0 \\([^)]+\\) AppleWebKit\\/[0-9.]+ \\(KHTML, like Gecko\\) Chrome\\/[0-9.]+ (?:Mobile Safari|Safari)\\/[0-9.]+ Edge\\/[0-9.]+$/,\n\t// Firefox User Agent from https://developer.mozilla.org/en-US/docs/Web/HTTP/Gecko_user_agent_string_reference\n\tfirefox: /^Mozilla\\/5\\.0 \\([^)]*(Windows|OS X|Linux)[^)]+\\) Gecko\\/[0-9.]+ Firefox\\/(\\d+)(?:\\.\\d)?$/,\n\t// Chrome User Agent from https://developer.chrome.com/multidevice/user-agent\n\tchrome: /^Mozilla\\/5\\.0 \\([^)]*(Windows|OS X|Linux)[^)]+\\) AppleWebKit\\/[0-9.]+ \\(KHTML, like Gecko\\) Chrome\\/(\\d+)[0-9.]+ (?:Mobile Safari|Safari)\\/[0-9.]+$/,\n\t// Safari User Agent from http://www.useragentstring.com/pages/Safari/\n\tsafari: /^Mozilla\\/5\\.0 \\([^)]*(Windows|OS X)[^)]+\\) AppleWebKit\\/[0-9.]+ \\(KHTML, like Gecko\\)(?: Version\\/([0-9]+)[0-9.]+)? Safari\\/[0-9.A-Z]+$/,\n\t// Android Chrome user agent: https://developers.google.com/chrome/mobile/docs/user-agent\n\tandroidChrome: /Android.*(?:; (.*) Build\\/).*Chrome\\/(\\d+)[0-9.]+/,\n\tiphone: / *CPU +iPhone +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,\n\tipad: /\\(iPad; *CPU +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,\n\tiosClient: /^Mozilla\\/5\\.0 \\(iOS\\) (?:ownCloud|Nextcloud)-iOS.*$/,\n\tandroidClient: /^Mozilla\\/5\\.0 \\(Android\\) (?:ownCloud|Nextcloud)-android.*$/,\n\tiosTalkClient: /^Mozilla\\/5\\.0 \\(iOS\\) Nextcloud-Talk.*$/,\n\tandroidTalkClient: /^Mozilla\\/5\\.0 \\(Android\\) Nextcloud-Talk.*$/,\n\t// DAVx5/3.3.8-beta2-gplay (2021/01/02; dav4jvm; okhttp/4.9.0) Android/10\n\tdavx5: /DAV(?:droid|x5)\\/([^ ]+)/,\n\t// Mozilla/5.0 (U; Linux; Maemo; Jolla; Sailfish; like Android 4.3) AppleWebKit/538.1 (KHTML, like Gecko) WebPirate/2.0 like Mobile Safari/538.1 (compatible)\n\twebPirate: /(Sailfish).*WebPirate\\/(\\d+)/,\n\t// Mozilla/5.0 (Maemo; Linux; U; Jolla; Sailfish; Mobile; rv:31.0) Gecko/31.0 Firefox/31.0 SailfishBrowser/1.0\n\tsailfishBrowser: /(Sailfish).*SailfishBrowser\\/(\\d+)/,\n\t// Neon 1.0.0+1\n\tneon: /Neon \\d+\\.\\d+\\.\\d+\\+\\d+/,\n}\nconst nameMap = {\n\tie: t('setting', 'Internet Explorer'),\n\tedge: t('setting', 'Edge'),\n\tfirefox: t('setting', 'Firefox'),\n\tchrome: t('setting', 'Google Chrome'),\n\tsafari: t('setting', 'Safari'),\n\tandroidChrome: t('setting', 'Google Chrome for Android'),\n\tiphone: t('setting', 'iPhone'),\n\tipad: t('setting', 'iPad'),\n\tiosClient: t('setting', '{productName} iOS app', { productName: window.oc_defaults.productName }),\n\tandroidClient: t('setting', '{productName} Android app', { productName: window.oc_defaults.productName }),\n\tiosTalkClient: t('setting', '{productName} Talk for iOS', { productName: window.oc_defaults.productName }),\n\tandroidTalkClient: t('setting', '{productName} Talk for Android', { productName: window.oc_defaults.productName }),\n\tdavx5: 'DAVx5',\n\twebPirate: 'WebPirate',\n\tsailfishBrowser: 'SailfishBrowser',\n\tneon: 'Neon',\n}\nconst iconMap = {\n\tie: 'icon-desktop',\n\tedge: 'icon-desktop',\n\tfirefox: 'icon-desktop',\n\tchrome: 'icon-desktop',\n\tsafari: 'icon-desktop',\n\tandroidChrome: 'icon-phone',\n\tiphone: 'icon-phone',\n\tipad: 'icon-tablet',\n\tiosClient: 'icon-phone',\n\tandroidClient: 'icon-phone',\n\tiosTalkClient: 'icon-phone',\n\tandroidTalkClient: 'icon-phone',\n\tdavx5: 'icon-phone',\n\twebPirate: 'icon-link',\n\tsailfishBrowser: 'icon-link',\n}\n\nexport default {\n\tname: 'AuthToken',\n\tcomponents: {\n\t\tNcActions,\n\t\tNcActionButton,\n\t\tNcActionCheckbox,\n\t},\n\tprops: {\n\t\ttoken: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowMore: this.token.canScope || this.token.canDelete,\n\t\t\trenaming: false,\n\t\t\tnewName: '',\n\t\t\toldName: '',\n\t\t\tactionOpen: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\tlastActivityRelative() {\n\t\t\treturn OC.Util.relativeModifiedDate(this.token.lastActivity * 1000)\n\t\t},\n\t\tlastActivity() {\n\t\t\treturn OC.Util.formatDate(this.token.lastActivity * 1000, 'LLL')\n\t\t},\n\t\ticonName() {\n\t\t\t// pretty format sync client user agent\n\t\t\tconst matches = this.token.name.match(/Mozilla\\/5\\.0 \\((\\w+)\\) (?:mirall|csyncoC)\\/(\\d+\\.\\d+\\.\\d+)/)\n\n\t\t\tlet icon = ''\n\t\t\tif (matches) {\n\t\t\t\t/* eslint-disable-next-line */\n\t\t\t\tthis.token.name = t('settings', 'Sync client - {os}', {\n\t\t\t\t\tos: matches[1],\n\t\t\t\t\tversion: matches[2],\n\t\t\t\t})\n\t\t\t\ticon = 'icon-desktop'\n\t\t\t}\n\n\t\t\t// preserve title for cases where we format it further\n\t\t\tconst title = this.token.name\n\t\t\tlet name = this.token.name\n\t\t\tfor (const client in userAgentMap) {\n\t\t\t\tconst matches = title.match(userAgentMap[client])\n\t\t\t\tif (matches) {\n\t\t\t\t\tif (matches[2] && matches[1]) { // version number and os\n\t\t\t\t\t\tname = nameMap[client] + ' ' + matches[2] + ' - ' + matches[1]\n\t\t\t\t\t} else if (matches[1]) { // only version number\n\t\t\t\t\t\tname = nameMap[client] + ' ' + matches[1]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tname = nameMap[client]\n\t\t\t\t\t}\n\n\t\t\t\t\ticon = iconMap[client]\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.token.current) {\n\t\t\t\tname = t('settings', 'This session')\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\ticon,\n\t\t\t\tname,\n\t\t\t}\n\t\t},\n\t\twiping() {\n\t\t\treturn this.token.type === 2\n\t\t},\n\t},\n\tmethods: {\n\t\tstartRename() {\n\t\t\t// Close action (popover menu)\n\t\t\tthis.actionOpen = false\n\n\t\t\tthis.oldName = this.token.name\n\t\t\tthis.newName = this.token.name\n\t\t\tthis.renaming = true\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$refs.input.select()\n\t\t\t})\n\t\t},\n\t\tcancelRename() {\n\t\t\tthis.renaming = false\n\t\t\tthis.$emit('rename', this.token, this.oldName)\n\t\t},\n\t\trevoke() {\n\t\t\tthis.actionOpen = false\n\t\t\tthis.$emit('delete', this.token)\n\t\t},\n\t\trename() {\n\t\t\tthis.renaming = false\n\t\t\tthis.$emit('rename', this.token, this.newName)\n\t\t},\n\t\twipe() {\n\t\t\tthis.actionOpen = false\n\t\t\tthis.$emit('wipe', this.token)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.wiping {\n\t\tbackground-color: var(--color-background-darker);\n\t}\n\n\ttd {\n\t\tborder-top: 1px solid var(--color-border);\n\t\tmax-width: 200px;\n\t\twhite-space: normal;\n\t\tvertical-align: middle;\n\t\tposition: relative;\n\n\t\t&%icon {\n\t\t\toverflow: visible;\n\t\t\tposition: relative;\n\t\t\twidth: 44px;\n\t\t\theight: 44px;\n\t\t}\n\n\t\t&.token-name {\n\t\t\tpadding: 10px 6px;\n\n\t\t\t&.token-rename {\n\t\t\t\tpadding: 0;\n\t\t\t}\n\n\t\t\tinput {\n\t\t\t\twidth: 100%;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t}\n\t\t&.token-name .wiping-warning {\n\t\t\tcolor: var(--color-text-lighter);\n\t\t}\n\n\t\t&.more {\n\t\t\t@extend %icon;\n\t\t\tpadding: 0 10px;\n\t\t}\n\n\t\t&.client {\n\t\t\t@extend %icon;\n\n\t\t\tdiv {\n\t\t\t\topacity: 0.57;\n\t\t\t\twidth: 44px;\n\t\t\t\theight: 44px;\n\t\t\t}\n\t\t}\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthToken.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthToken.vue?vue&type=script&lang=js&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthToken.vue?vue&type=style&index=0&id=0f73a400&prod&lang=scss&scoped=true&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthToken.vue?vue&type=style&index=0&id=0f73a400&prod&lang=scss&scoped=true&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AuthToken.vue?vue&type=template&id=0f73a400&scoped=true&\"\nimport script from \"./AuthToken.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthToken.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AuthToken.vue?vue&type=style&index=0&id=0f73a400&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"0f73a400\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('tr',{class:_vm.wiping,attrs:{\"data-id\":_vm.token.id}},[_c('td',{staticClass:\"client\"},[_c('div',{class:_vm.iconName.icon})]),_vm._v(\" \"),_c('td',{staticClass:\"token-name\"},[(_vm.token.canRename && _vm.renaming)?_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newName),expression:\"newName\"}],ref:\"input\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.newName)},on:{\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.rename.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"]))return null;return _vm.cancelRename.apply(null, arguments)}],\"change\":_vm.rename,\"input\":function($event){if($event.target.composing)return;_vm.newName=$event.target.value}}}):_c('span',[_vm._v(_vm._s(_vm.iconName.name))]),_vm._v(\" \"),(_vm.wiping)?_c('span',{staticClass:\"wiping-warning\"},[_vm._v(\"(\"+_vm._s(_vm.t('settings', 'Marked for remote wipe'))+\")\")]):_vm._e()]),_vm._v(\" \"),_c('td',[_c('span',{staticClass:\"last-activity\",attrs:{\"title\":_vm.lastActivity}},[_vm._v(_vm._s(_vm.lastActivityRelative))])]),_vm._v(\" \"),_c('td',{staticClass:\"more\"},[(!_vm.token.current)?_c('NcActions',{attrs:{\"title\":_vm.t('settings', 'Device settings'),\"aria-label\":_vm.t('settings', 'Device settings'),\"open\":_vm.actionOpen},on:{\"update:open\":function($event){_vm.actionOpen=$event}}},[(_vm.token.type === 1)?_c('NcActionCheckbox',{attrs:{\"checked\":_vm.token.scope.filesystem},on:{\"change\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.$emit('toggle-scope', _vm.token, 'filesystem', !_vm.token.scope.filesystem)}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Allow filesystem access'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.token.canRename)?_c('NcActionButton',{attrs:{\"icon\":\"icon-rename\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.startRename.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Rename'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.token.canDelete)?[(_vm.token.type !== 2)?[_c('NcActionButton',{attrs:{\"icon\":\"icon-delete\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.revoke.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Revoke'))+\"\\n\\t\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"icon\":\"icon-delete\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.wipe.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Wipe device'))+\"\\n\\t\\t\\t\\t\\t\")])]:(_vm.token.type === 2)?_c('NcActionButton',{attrs:{\"icon\":\"icon-delete\",\"title\":_vm.t('settings', 'Revoke')},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.revoke.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Revoking this token might prevent the wiping of your device if it has not started the wipe yet.'))+\"\\n\\t\\t\\t\\t\")]):_vm._e()]:_vm._e()],2):_vm._e()],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=script&lang=js&\"","<!--\n  - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n  -\n  - @author 2019 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<template>\n\t<table id=\"app-tokens-table\">\n\t\t<thead v-if=\"tokens.length\">\n\t\t\t<tr>\n\t\t\t\t<th />\n\t\t\t\t<th>{{ t('settings', 'Device') }}</th>\n\t\t\t\t<th>{{ t('settings', 'Last activity') }}</th>\n\t\t\t\t<th />\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody class=\"token-list\">\n\t\t\t<AuthToken v-for=\"token in sortedTokens\"\n\t\t\t\t:key=\"token.id\"\n\t\t\t\t:token=\"token\"\n\t\t\t\t@toggle-scope=\"toggleScope\"\n\t\t\t\t@rename=\"rename\"\n\t\t\t\t@delete=\"onDelete\"\n\t\t\t\t@wipe=\"onWipe\" />\n\t\t</tbody>\n\t</table>\n</template>\n\n<script>\nimport AuthToken from './AuthToken'\n\nexport default {\n\tname: 'AuthTokenList',\n\tcomponents: {\n\t\tAuthToken,\n\t},\n\tprops: {\n\t\ttokens: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tcomputed: {\n\t\tsortedTokens() {\n\t\t\treturn this.tokens.slice().sort((t1, t2) => {\n\t\t\t\tconst ts1 = parseInt(t1.lastActivity, 10)\n\t\t\t\tconst ts2 = parseInt(t2.lastActivity, 10)\n\t\t\t\treturn ts2 - ts1\n\t\t\t})\n\t\t},\n\t},\n\tmethods: {\n\t\ttoggleScope(token, scope, value) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('toggle-scope', token, scope, value)\n\t\t},\n\t\trename(token, newName) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('rename', token, newName)\n\t\t},\n\t\tonDelete(token) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('delete', token)\n\t\t},\n\t\tonWipe(token) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('wipe', token)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\ttable {\n\t\twidth: 100%;\n\t\tmin-height: 50px;\n\t\tpadding-top: 5px;\n\t\tmax-width: 580px;\n\n\t\tth {\n\t\t\topacity: .5;\n\t\t\tpadding: 10px 0;\n\t\t}\n\t}\n\n\t.token-list {\n\t\ttd > a.icon-more {\n\t\t\ttransition: opacity var(--animation-quick);\n\t\t}\n\n\t\ta.icon-more {\n\t\t\tpadding: 14px;\n\t\t\tdisplay: block;\n\t\t\twidth: 44px;\n\t\t\theight: 44px;\n\t\t\topacity: .5;\n\t\t}\n\n\t\ttr {\n\t\t\t&:hover td > a.icon,\n\t\t\ttd > a.icon:focus,\n\t\t\t&.active td > a.icon {\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\t}\n</style>\n\n<!-- some styles are not scoped to make them work on subcomponents -->\n<style lang=\"scss\">\n\t#app-tokens-table {\n\t\ttr > *:nth-child(2) {\n\t\t\tpadding-left: 6px;\n\t\t}\n\n\t\ttr > *:nth-child(3) {\n\t\t\ttext-align: right;\n\t\t}\n\t}\n</style>\n","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=style&index=0&id=4f8ceff3&prod&lang=scss&scoped=true&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=style&index=0&id=4f8ceff3&prod&lang=scss&scoped=true&\";\n       export default content && content.locals ? content.locals : undefined;\n","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=style&index=1&id=4f8ceff3&prod&lang=scss&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=style&index=1&id=4f8ceff3&prod&lang=scss&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AuthTokenList.vue?vue&type=template&id=4f8ceff3&scoped=true&\"\nimport script from \"./AuthTokenList.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthTokenList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AuthTokenList.vue?vue&type=style&index=0&id=4f8ceff3&prod&lang=scss&scoped=true&\"\nimport style1 from \"./AuthTokenList.vue?vue&type=style&index=1&id=4f8ceff3&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"4f8ceff3\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('table',{attrs:{\"id\":\"app-tokens-table\"}},[(_vm.tokens.length)?_c('thead',[_c('tr',[_c('th'),_vm._v(\" \"),_c('th',[_vm._v(_vm._s(_vm.t('settings', 'Device')))]),_vm._v(\" \"),_c('th',[_vm._v(_vm._s(_vm.t('settings', 'Last activity')))]),_vm._v(\" \"),_c('th')])]):_vm._e(),_vm._v(\" \"),_c('tbody',{staticClass:\"token-list\"},_vm._l((_vm.sortedTokens),function(token){return _c('AuthToken',{key:token.id,attrs:{\"token\":token},on:{\"toggle-scope\":_vm.toggleScope,\"rename\":_vm.rename,\"delete\":_vm.onDelete,\"wipe\":_vm.onWipe}})}),1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n  - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n  -\n  - @author 2019 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<template>\n\t<div v-if=\"!adding\" class=\"row spacing\">\n\t\t<a id=\"generate-app-token-section\">\n\t\t\t<!-- Port to TextField component when available -->\n\t\t\t<input v-model=\"deviceName\"\n\t\t\t\ttype=\"text\"\n\t\t\t\t:maxlength=\"120\"\n\t\t\t\t:disabled=\"loading\"\n\t\t\t\t:placeholder=\"t('settings', 'App name')\"\n\t\t\t\t@keydown.enter=\"submit\">\n\t\t\t<NcButton :disabled=\"loading || deviceName.length === 0\"\n\t\t\t\ttype=\"primary\"\n\t\t\t\t@click=\"submit\">\n\t\t\t\t{{ t('settings', 'Create new app password') }}\n\t\t\t</NcButton>\n\t\t</a>\n\t</div>\n\t<div v-else class=\"spacing\">\n\t\t{{ t('settings', 'Use the credentials below to configure your app or device.') }}\n\t\t{{ t('settings', 'For security reasons this password will only be shown once.') }}\n\t\t<div class=\"app-password-row\">\n\t\t\t<label for=\"app-username\" class=\"app-password-label\">{{ t('settings', 'Username') }}</label>\n\t\t\t<input id=\"app-username\"\n\t\t\t\t:value=\"loginName\"\n\t\t\t\ttype=\"text\"\n\t\t\t\tclass=\"monospaced\"\n\t\t\t\treadonly=\"readonly\"\n\t\t\t\t@focus=\"selectInput\">\n\t\t</div>\n\t\t<div class=\"app-password-row\">\n\t\t\t<label for=\"app-password\" class=\"app-password-label\">{{ t('settings', 'Password') }}</label>\n\t\t\t<input id=\"app-password\"\n\t\t\t\tref=\"appPassword\"\n\t\t\t\t:value=\"appPassword\"\n\t\t\t\ttype=\"text\"\n\t\t\t\tclass=\"monospaced\"\n\t\t\t\treadonly=\"readonly\"\n\t\t\t\t@focus=\"selectInput\">\n\t\t\t<NcButton type=\"tertiary\"\n\t\t\t\t:title=\"copyTooltipOptions\"\n\t\t\t\t:aria-label=\"copyTooltipOptions\"\n\t\t\t\t@click=\"copyPassword\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Check v-if=\"copied\" :size=\"20\" />\n\t\t\t\t\t<ContentCopy v-else :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<NcButton @click=\"reset\">\n\t\t\t\t{{ t('settings', 'Done') }}\n\t\t\t</NcButton>\n\t\t</div>\n\t\t<div class=\"app-password-row\">\n\t\t\t<span class=\"app-password-label\" />\n\t\t\t<a v-if=\"!showQR\"\n\t\t\t\t@click=\"showQR = true\">\n\t\t\t\t{{ t('settings', 'Show QR code for mobile apps') }}\n\t\t\t</a>\n\t\t\t<QR v-else\n\t\t\t\t:value=\"qrUrl\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport QR from '@chenfengyuan/vue-qrcode'\nimport { confirmPassword } from '@nextcloud/password-confirmation'\nimport '@nextcloud/password-confirmation/dist/style.css'\nimport { showError } from '@nextcloud/dialogs'\nimport { getRootUrl } from '@nextcloud/router'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton'\n\nimport Check from 'vue-material-design-icons/Check.vue'\nimport ContentCopy from 'vue-material-design-icons/ContentCopy.vue'\n\nexport default {\n\tname: 'AuthTokenSetupDialogue',\n\tcomponents: {\n\t\tCheck,\n\t\tContentCopy,\n\t\tNcButton,\n\t\tQR,\n\t},\n\tprops: {\n\t\tadd: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tadding: false,\n\t\t\tloading: false,\n\t\t\tdeviceName: '',\n\t\t\tappPassword: '',\n\t\t\tloginName: '',\n\t\t\tcopied: false,\n\t\t\tshowQR: false,\n\t\t\tqrUrl: '',\n\t\t}\n\t},\n\tcomputed: {\n\t\tcopyTooltipOptions() {\n\t\t\tif (this.copied) {\n\t\t\t\treturn t('settings', 'Copied!')\n\t\t\t}\n\t\t\treturn t('settings', 'Copy')\n\t\t},\n\t},\n\tmethods: {\n\t\tselectInput(e) {\n\t\t\te.currentTarget.select()\n\t\t},\n\t\tsubmit() {\n\t\t\tconfirmPassword()\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.loading = true\n\t\t\t\t\treturn this.add(this.deviceName)\n\t\t\t\t})\n\t\t\t\t.then(token => {\n\t\t\t\t\tthis.adding = true\n\t\t\t\t\tthis.loginName = token.loginName\n\t\t\t\t\tthis.appPassword = token.token\n\n\t\t\t\t\tconst server = window.location.protocol + '//' + window.location.host + getRootUrl()\n\t\t\t\t\tthis.qrUrl = `nc://login/user:${token.loginName}&password:${token.token}&server:${server}`\n\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tthis.$refs.appPassword.select()\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error('could not create a new app password', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while creating device token'))\n\n\t\t\t\t\tthis.reset()\n\t\t\t\t})\n\t\t},\n\t\tasync copyPassword() {\n\t\t\ttry {\n\t\t\t\tawait navigator.clipboard.writeText(this.appPassword)\n\t\t\t\tthis.copied = true\n\t\t\t} catch (e) {\n\t\t\t\tthis.copied = false\n\t\t\t\tconsole.error(e)\n\t\t\t\tshowError(t('settings', 'Could not copy app password. Please copy it manually.'))\n\t\t\t} finally {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.copied = false\n\t\t\t\t}, 4000)\n\t\t\t}\n\t\t},\n\t\treset() {\n\t\t\tthis.adding = false\n\t\t\tthis.loading = false\n\t\t\tthis.showQR = false\n\t\t\tthis.qrUrl = ''\n\t\t\tthis.deviceName = ''\n\t\t\tthis.appPassword = ''\n\t\t\tthis.loginName = ''\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.app-password-row {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\n\t\t.icon {\n\t\t\tbackground-size: 16px 16px;\n\t\t\tdisplay: inline-block;\n\t\t\tposition: relative;\n\t\t\ttop: 3px;\n\t\t\tmargin-left: 5px;\n\t\t\tmargin-right: 8px;\n\t\t}\n\n\t}\n\n\t.app-password-label {\n\t\tdisplay: table-cell;\n\t\tpadding-right: 1em;\n\t\ttext-align: right;\n\t\tvertical-align: middle;\n\t\twidth: 100px;\n\t}\n\n\t.row input {\n\t\theight: 44px !important;\n\t\tpadding: 7px 12px;\n\t\tmargin-right: 12px;\n\t\twidth: 200px;\n\t}\n\n\t.monospaced {\n\t\twidth: 245px;\n\t\tfont-family: monospace;\n\t}\n\n\t.button-vue{\n\t\tdisplay:inline-block;\n\t\tmargin: 3px 3px 3px 3px;\n\t}\n\n\t.row {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t}\n\n\t.spacing {\n\t\tpadding-top: 16px;\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSetupDialogue.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSetupDialogue.vue?vue&type=script&lang=js&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=7760634d&prod&lang=scss&scoped=true&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=7760634d&prod&lang=scss&scoped=true&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AuthTokenSetupDialogue.vue?vue&type=template&id=7760634d&scoped=true&\"\nimport script from \"./AuthTokenSetupDialogue.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthTokenSetupDialogue.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=7760634d&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"7760634d\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (!_vm.adding)?_c('div',{staticClass:\"row spacing\"},[_c('a',{attrs:{\"id\":\"generate-app-token-section\"}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.deviceName),expression:\"deviceName\"}],attrs:{\"type\":\"text\",\"maxlength\":120,\"disabled\":_vm.loading,\"placeholder\":_vm.t('settings', 'App name')},domProps:{\"value\":(_vm.deviceName)},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.submit.apply(null, arguments)},\"input\":function($event){if($event.target.composing)return;_vm.deviceName=$event.target.value}}}),_vm._v(\" \"),_c('NcButton',{attrs:{\"disabled\":_vm.loading || _vm.deviceName.length === 0,\"type\":\"primary\"},on:{\"click\":_vm.submit}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Create new app password'))+\"\\n\\t\\t\")])],1)]):_c('div',{staticClass:\"spacing\"},[_vm._v(\"\\n\\t\"+_vm._s(_vm.t('settings', 'Use the credentials below to configure your app or device.'))+\"\\n\\t\"+_vm._s(_vm.t('settings', 'For security reasons this password will only be shown once.'))+\"\\n\\t\"),_c('div',{staticClass:\"app-password-row\"},[_c('label',{staticClass:\"app-password-label\",attrs:{\"for\":\"app-username\"}},[_vm._v(_vm._s(_vm.t('settings', 'Username')))]),_vm._v(\" \"),_c('input',{staticClass:\"monospaced\",attrs:{\"id\":\"app-username\",\"type\":\"text\",\"readonly\":\"readonly\"},domProps:{\"value\":_vm.loginName},on:{\"focus\":_vm.selectInput}})]),_vm._v(\" \"),_c('div',{staticClass:\"app-password-row\"},[_c('label',{staticClass:\"app-password-label\",attrs:{\"for\":\"app-password\"}},[_vm._v(_vm._s(_vm.t('settings', 'Password')))]),_vm._v(\" \"),_c('input',{ref:\"appPassword\",staticClass:\"monospaced\",attrs:{\"id\":\"app-password\",\"type\":\"text\",\"readonly\":\"readonly\"},domProps:{\"value\":_vm.appPassword},on:{\"focus\":_vm.selectInput}}),_vm._v(\" \"),_c('NcButton',{attrs:{\"type\":\"tertiary\",\"title\":_vm.copyTooltipOptions,\"aria-label\":_vm.copyTooltipOptions},on:{\"click\":_vm.copyPassword},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.copied)?_c('Check',{attrs:{\"size\":20}}):_c('ContentCopy',{attrs:{\"size\":20}})]},proxy:true}])}),_vm._v(\" \"),_c('NcButton',{on:{\"click\":_vm.reset}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Done'))+\"\\n\\t\\t\")])],1),_vm._v(\" \"),_c('div',{staticClass:\"app-password-row\"},[_c('span',{staticClass:\"app-password-label\"}),_vm._v(\" \"),(!_vm.showQR)?_c('a',{on:{\"click\":function($event){_vm.showQR = true}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Show QR code for mobile apps'))+\"\\n\\t\\t\")]):_c('QR',{attrs:{\"value\":_vm.qrUrl}})],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n  - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n  -\n  - @author 2019 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<template>\n\t<div id=\"security\" class=\"section\">\n\t\t<h2>{{ t('settings', 'Devices & sessions', {}, undefined, {sanitize: false}) }}</h2>\n\t\t<p class=\"settings-hint hidden-when-empty\">\n\t\t\t{{ t('settings', 'Web, desktop and mobile clients currently logged in to your account.') }}\n\t\t</p>\n\t\t<AuthTokenList :tokens=\"tokens\"\n\t\t\t@toggle-scope=\"toggleTokenScope\"\n\t\t\t@rename=\"rename\"\n\t\t\t@delete=\"deleteToken\"\n\t\t\t@wipe=\"wipeToken\" />\n\t\t<AuthTokenSetupDialogue v-if=\"canCreateToken\" :add=\"addNewToken\" />\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { confirmPassword } from '@nextcloud/password-confirmation'\nimport '@nextcloud/password-confirmation/dist/style.css'\nimport { generateUrl } from '@nextcloud/router'\n\nimport AuthTokenList from './AuthTokenList'\nimport AuthTokenSetupDialogue from './AuthTokenSetupDialogue'\n\nconst confirm = () => {\n\treturn new Promise(resolve => {\n\t\tOC.dialogs.confirm(\n\t\t\tt('settings', 'Do you really want to wipe your data from this device?'),\n\t\t\tt('settings', 'Confirm wipe'),\n\t\t\tresolve,\n\t\t\ttrue\n\t\t)\n\t})\n}\n\n/**\n * Tap into a promise without losing the value\n *\n * @param {Function} cb the callback\n * @return {any} val the value\n */\nconst tap = cb => val => {\n\tcb(val)\n\treturn val\n}\n\nexport default {\n\tname: 'AuthTokenSection',\n\tcomponents: {\n\t\tAuthTokenSetupDialogue,\n\t\tAuthTokenList,\n\t},\n\tprops: {\n\t\ttokens: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\tcanCreateToken: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tbaseUrl: generateUrl('/settings/personal/authtokens'),\n\t\t}\n\t},\n\tmethods: {\n\t\taddNewToken(name) {\n\t\t\tconsole.debug('creating a new app token', name)\n\n\t\t\tconst data = {\n\t\t\t\tname,\n\t\t\t}\n\t\t\treturn axios.post(this.baseUrl, data)\n\t\t\t\t.then(resp => resp.data)\n\t\t\t\t.then(tap(() => console.debug('app token created')))\n\t\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\t\t.then(tap(data => this.tokens.push(data.deviceToken)))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not create app password', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while creating device token'))\n\t\t\t\t\tthrow err\n\t\t\t\t})\n\t\t},\n\t\ttoggleTokenScope(token, scope, value) {\n\t\t\tconsole.debug('updating app token scope', token.id, scope, value)\n\n\t\t\tconst oldVal = token.scope[scope]\n\t\t\ttoken.scope[scope] = value\n\n\t\t\treturn this.updateToken(token)\n\t\t\t\t.then(tap(() => console.debug('app token scope updated')))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not update app token scope', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while updating device token scope'))\n\n\t\t\t\t\t// Restore\n\t\t\t\t\ttoken.scope[scope] = oldVal\n\n\t\t\t\t\tthrow err\n\t\t\t\t})\n\t\t},\n\t\trename(token, newName) {\n\t\t\tconsole.debug('renaming app token', token.id, token.name, newName)\n\n\t\t\tconst oldName = token.name\n\t\t\ttoken.name = newName\n\n\t\t\treturn this.updateToken(token)\n\t\t\t\t.then(tap(() => console.debug('app token name updated')))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not update app token name', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while updating device token name'))\n\n\t\t\t\t\t// Restore\n\t\t\t\t\ttoken.name = oldName\n\t\t\t\t})\n\t\t},\n\t\tupdateToken(token) {\n\t\t\treturn axios.put(this.baseUrl + '/' + token.id, token)\n\t\t\t\t.then(resp => resp.data)\n\t\t},\n\t\tdeleteToken(token) {\n\t\t\tconsole.debug('deleting app token', token)\n\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.tokens = this.tokens.filter(t => t !== token)\n\n\t\t\treturn axios.delete(this.baseUrl + '/' + token.id)\n\t\t\t\t.then(resp => resp.data)\n\t\t\t\t.then(tap(() => console.debug('app token deleted')))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not delete app token', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while deleting the token'))\n\n\t\t\t\t\t// Restore\n\t\t\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\t\t\tthis.tokens.push(token)\n\t\t\t\t})\n\t\t},\n\t\tasync wipeToken(token) {\n\t\t\tconsole.debug('wiping app token', token)\n\n\t\t\ttry {\n\t\t\t\tawait confirmPassword()\n\n\t\t\t\tif (!(await confirm())) {\n\t\t\t\t\tconsole.debug('wipe aborted by user')\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tawait axios.post(this.baseUrl + '/wipe/' + token.id)\n\t\t\t\tconsole.debug('app token marked for wipe')\n\n\t\t\t\ttoken.type = 2\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error('could not wipe app token', err)\n\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while wiping the device with the token'))\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AuthTokenSection.vue?vue&type=template&id=240596c0&scoped=true&\"\nimport script from \"./AuthTokenSection.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthTokenSection.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"240596c0\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"section\",attrs:{\"id\":\"security\"}},[_c('h2',[_vm._v(_vm._s(_vm.t('settings', 'Devices & sessions', {}, undefined, {sanitize: false})))]),_vm._v(\" \"),_c('p',{staticClass:\"settings-hint hidden-when-empty\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings', 'Web, desktop and mobile clients currently logged in to your account.'))+\"\\n\\t\")]),_vm._v(\" \"),_c('AuthTokenList',{attrs:{\"tokens\":_vm.tokens},on:{\"toggle-scope\":_vm.toggleTokenScope,\"rename\":_vm.rename,\"delete\":_vm.deleteToken,\"wipe\":_vm.wipeToken}}),_vm._v(\" \"),(_vm.canCreateToken)?_c('AuthTokenSetupDialogue',{attrs:{\"add\":_vm.addNewToken}}):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\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\nimport { loadState } from '@nextcloud/initial-state'\nimport Vue from 'vue'\nimport VTooltip from 'v-tooltip'\n\nimport AuthTokenSection from './components/AuthTokenSection'\n\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(OC.requestToken)\n\nVue.use(VTooltip, { defaultHtml: false })\nVue.prototype.t = t\n\nconst View = Vue.extend(AuthTokenSection)\nnew View({\n\tpropsData: {\n\t\ttokens: loadState('settings', 'app_tokens'),\n\t\tcanCreateToken: loadState('settings', 'can_create_app_token'),\n\t},\n}).$mount('#security-authtokens')\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".wiping[data-v-0f73a400]{background-color:var(--color-background-darker)}td[data-v-0f73a400]{border-top:1px solid var(--color-border);max-width:200px;white-space:normal;vertical-align:middle;position:relative}td.client[data-v-0f73a400],td.more[data-v-0f73a400]{overflow:visible;position:relative;width:44px;height:44px}td.token-name[data-v-0f73a400]{padding:10px 6px}td.token-name.token-rename[data-v-0f73a400]{padding:0}td.token-name input[data-v-0f73a400]{width:100%;margin:0}td.token-name .wiping-warning[data-v-0f73a400]{color:var(--color-text-lighter)}td.more[data-v-0f73a400]{padding:0 10px}td.client div[data-v-0f73a400]{opacity:.57;width:44px;height:44px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthToken.vue\"],\"names\":[],\"mappings\":\"AACA,yBACC,+CAAA,CAGD,oBACC,wCAAA,CACA,eAAA,CACA,kBAAA,CACA,qBAAA,CACA,iBAAA,CAEA,oDACC,gBAAA,CACA,iBAAA,CACA,UAAA,CACA,WAAA,CAGD,+BACC,gBAAA,CAEA,4CACC,SAAA,CAGD,qCACC,UAAA,CACA,QAAA,CAGF,+CACC,+BAAA,CAGD,yBAEC,cAAA,CAMA,+BACC,WAAA,CACA,UAAA,CACA,WAAA\",\"sourcesContent\":[\"\\n.wiping {\\n\\tbackground-color: var(--color-background-darker);\\n}\\n\\ntd {\\n\\tborder-top: 1px solid var(--color-border);\\n\\tmax-width: 200px;\\n\\twhite-space: normal;\\n\\tvertical-align: middle;\\n\\tposition: relative;\\n\\n\\t&%icon {\\n\\t\\toverflow: visible;\\n\\t\\tposition: relative;\\n\\t\\twidth: 44px;\\n\\t\\theight: 44px;\\n\\t}\\n\\n\\t&.token-name {\\n\\t\\tpadding: 10px 6px;\\n\\n\\t\\t&.token-rename {\\n\\t\\t\\tpadding: 0;\\n\\t\\t}\\n\\n\\t\\tinput {\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\tmargin: 0;\\n\\t\\t}\\n\\t}\\n\\t&.token-name .wiping-warning {\\n\\t\\tcolor: var(--color-text-lighter);\\n\\t}\\n\\n\\t&.more {\\n\\t\\t@extend %icon;\\n\\t\\tpadding: 0 10px;\\n\\t}\\n\\n\\t&.client {\\n\\t\\t@extend %icon;\\n\\n\\t\\tdiv {\\n\\t\\t\\topacity: 0.57;\\n\\t\\t\\twidth: 44px;\\n\\t\\t\\theight: 44px;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"table[data-v-4f8ceff3]{width:100%;min-height:50px;padding-top:5px;max-width:580px}table th[data-v-4f8ceff3]{opacity:.5;padding:10px 0}.token-list td>a.icon-more[data-v-4f8ceff3]{transition:opacity var(--animation-quick)}.token-list a.icon-more[data-v-4f8ceff3]{padding:14px;display:block;width:44px;height:44px;opacity:.5}.token-list tr:hover td>a.icon[data-v-4f8ceff3],.token-list tr td>a.icon[data-v-4f8ceff3]:focus,.token-list tr.active td>a.icon[data-v-4f8ceff3]{opacity:1}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthTokenList.vue\"],\"names\":[],\"mappings\":\"AACA,uBACC,UAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CAEA,0BACC,UAAA,CACA,cAAA,CAKD,4CACC,yCAAA,CAGD,yCACC,YAAA,CACA,aAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CAIA,iJAGC,SAAA\",\"sourcesContent\":[\"\\ntable {\\n\\twidth: 100%;\\n\\tmin-height: 50px;\\n\\tpadding-top: 5px;\\n\\tmax-width: 580px;\\n\\n\\tth {\\n\\t\\topacity: .5;\\n\\t\\tpadding: 10px 0;\\n\\t}\\n}\\n\\n.token-list {\\n\\ttd > a.icon-more {\\n\\t\\ttransition: opacity var(--animation-quick);\\n\\t}\\n\\n\\ta.icon-more {\\n\\t\\tpadding: 14px;\\n\\t\\tdisplay: block;\\n\\t\\twidth: 44px;\\n\\t\\theight: 44px;\\n\\t\\topacity: .5;\\n\\t}\\n\\n\\ttr {\\n\\t\\t&:hover td > a.icon,\\n\\t\\ttd > a.icon:focus,\\n\\t\\t&.active td > a.icon {\\n\\t\\t\\topacity: 1;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#app-tokens-table tr>*:nth-child(2){padding-left:6px}#app-tokens-table tr>*:nth-child(3){text-align:right}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthTokenList.vue\"],\"names\":[],\"mappings\":\"AAEC,oCACC,gBAAA,CAGD,oCACC,gBAAA\",\"sourcesContent\":[\"\\n#app-tokens-table {\\n\\ttr > *:nth-child(2) {\\n\\t\\tpadding-left: 6px;\\n\\t}\\n\\n\\ttr > *:nth-child(3) {\\n\\t\\ttext-align: right;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-password-row[data-v-7760634d]{display:flex;align-items:center}.app-password-row .icon[data-v-7760634d]{background-size:16px 16px;display:inline-block;position:relative;top:3px;margin-left:5px;margin-right:8px}.app-password-label[data-v-7760634d]{display:table-cell;padding-right:1em;text-align:right;vertical-align:middle;width:100px}.row input[data-v-7760634d]{height:44px !important;padding:7px 12px;margin-right:12px;width:200px}.monospaced[data-v-7760634d]{width:245px;font-family:monospace}.button-vue[data-v-7760634d]{display:inline-block;margin:3px 3px 3px 3px}.row[data-v-7760634d]{display:flex;align-items:center}.spacing[data-v-7760634d]{padding-top:16px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthTokenSetupDialogue.vue\"],\"names\":[],\"mappings\":\"AACA,mCACC,YAAA,CACA,kBAAA,CAEA,yCACC,yBAAA,CACA,oBAAA,CACA,iBAAA,CACA,OAAA,CACA,eAAA,CACA,gBAAA,CAKF,qCACC,kBAAA,CACA,iBAAA,CACA,gBAAA,CACA,qBAAA,CACA,WAAA,CAGD,4BACC,sBAAA,CACA,gBAAA,CACA,iBAAA,CACA,WAAA,CAGD,6BACC,WAAA,CACA,qBAAA,CAGD,6BACC,oBAAA,CACA,sBAAA,CAGD,sBACC,YAAA,CACA,kBAAA,CAGD,0BACC,gBAAA\",\"sourcesContent\":[\"\\n.app-password-row {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\n\\t.icon {\\n\\t\\tbackground-size: 16px 16px;\\n\\t\\tdisplay: inline-block;\\n\\t\\tposition: relative;\\n\\t\\ttop: 3px;\\n\\t\\tmargin-left: 5px;\\n\\t\\tmargin-right: 8px;\\n\\t}\\n\\n}\\n\\n.app-password-label {\\n\\tdisplay: table-cell;\\n\\tpadding-right: 1em;\\n\\ttext-align: right;\\n\\tvertical-align: middle;\\n\\twidth: 100px;\\n}\\n\\n.row input {\\n\\theight: 44px !important;\\n\\tpadding: 7px 12px;\\n\\tmargin-right: 12px;\\n\\twidth: 200px;\\n}\\n\\n.monospaced {\\n\\twidth: 245px;\\n\\tfont-family: monospace;\\n}\\n\\n.button-vue{\\n\\tdisplay:inline-block;\\n\\tmargin: 3px 3px 3px 3px;\\n}\\n\\n.row {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n}\\n\\n.spacing {\\n\\tpadding-top: 16px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 4783;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t4783: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], function() { return __webpack_require__(40726); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","ie","edge","firefox","chrome","safari","androidChrome","iphone","ipad","iosClient","androidClient","iosTalkClient","androidTalkClient","davx5","webPirate","sailfishBrowser","neon","productName","name","components","NcActions","NcActionButton","NcActionCheckbox","props","token","type","required","data","showMore","renaming","newName","oldName","actionOpen","computed","lastActivityRelative","lastActivity","iconName","os","version","icon","wiping","methods","startRename","cancelRename","revoke","rename","wipe","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","component","_vm","this","_c","_self","class","attrs","id","staticClass","_v","canRename","directives","rawName","value","expression","ref","domProps","on","$event","indexOf","_k","keyCode","key","apply","arguments","target","composing","_s","t","_e","current","scope","filesystem","stopPropagation","preventDefault","$emit","canDelete","AuthToken","tokens","sortedTokens","toggleScope","onDelete","onWipe","length","_l","Check","ContentCopy","NcButton","QR","add","adding","loading","deviceName","appPassword","loginName","copied","showQR","qrUrl","copyTooltipOptions","selectInput","e","submit","confirmPassword","then","catch","console","OC","copyPassword","navigator","showError","setTimeout","reset","scopedSlots","_u","fn","proxy","cb","AuthTokenSetupDialogue","AuthTokenList","canCreateToken","baseUrl","addNewToken","toggleTokenScope","updateToken","deleteToken","wipeToken","resolve","axios","undefined","sanitize","__webpack_nonce__","btoa","requestToken","Vue","VTooltip","defaultHtml","AuthTokenSection","propsData","loadState","$mount","___CSS_LOADER_EXPORT___","push","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","loaded","__webpack_modules__","call","m","O","result","chunkIds","priority","notFulfilled","Infinity","i","fulfilled","j","Object","keys","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","window","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","document","baseURI","self","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","forEach","bind","nc","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"settings-vue-settings-personal-security.js?v=127d9e13f10dba29faee","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/settings/src/components/AuthToken.vue","webpack:///nextcloud/apps/settings/src/components/AuthToken.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/AuthToken.vue?70ef","webpack://nextcloud/./apps/settings/src/components/AuthToken.vue?1338","webpack://nextcloud/./apps/settings/src/components/AuthToken.vue?ca52","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?b8ab","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?0836","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?90cb","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?5c2d","webpack:///nextcloud/apps/settings/src/components/AuthTokenSetupDialogue.vue","webpack:///nextcloud/apps/settings/src/components/AuthTokenSetupDialogue.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/AuthTokenSetupDialogue.vue?0000","webpack://nextcloud/./apps/settings/src/components/AuthTokenSetupDialogue.vue?521c","webpack://nextcloud/./apps/settings/src/components/AuthTokenSetupDialogue.vue?6bad","webpack:///nextcloud/apps/settings/src/components/AuthTokenSection.vue","webpack:///nextcloud/apps/settings/src/components/AuthTokenSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/AuthTokenSection.vue?e9d0","webpack://nextcloud/./apps/settings/src/components/AuthTokenSection.vue?a091","webpack:///nextcloud/apps/settings/src/main-personal-security.js","webpack:///nextcloud/apps/settings/src/components/AuthToken.vue?vue&type=style&index=0&id=0f73a400&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue?vue&type=style&index=0&id=4f8ceff3&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue?vue&type=style&index=1&id=4f8ceff3&prod&lang=scss&","webpack:///nextcloud/apps/settings/src/components/AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=05a9cc2c&prod&lang=scss&scoped=true&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","<!--\n  - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n  -\n  - @author 2019 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<template>\n\t<tr :data-id=\"token.id\"\n\t\t:class=\"wiping\">\n\t\t<td class=\"client\">\n\t\t\t<div :class=\"iconName.icon\" />\n\t\t</td>\n\t\t<td class=\"token-name\">\n\t\t\t<input v-if=\"token.canRename && renaming\"\n\t\t\t\tref=\"input\"\n\t\t\t\tv-model=\"newName\"\n\t\t\t\ttype=\"text\"\n\t\t\t\t@keyup.enter=\"rename\"\n\t\t\t\t@change=\"rename\"\n\t\t\t\t@keyup.esc=\"cancelRename\">\n\t\t\t<span v-else>{{ iconName.name }}</span>\n\t\t\t<span v-if=\"wiping\" class=\"wiping-warning\">({{ t('settings', 'Marked for remote wipe') }})</span>\n\t\t</td>\n\t\t<td>\n\t\t\t<span :title=\"lastActivity\" class=\"last-activity\">{{ lastActivityRelative }}</span>\n\t\t</td>\n\t\t<td class=\"more\">\n\t\t\t<NcActions v-if=\"!token.current\"\n\t\t\t\t:title=\"t('settings', 'Device settings')\"\n\t\t\t\t:aria-label=\"t('settings', 'Device settings')\"\n\t\t\t\t:open.sync=\"actionOpen\">\n\t\t\t\t<NcActionCheckbox v-if=\"token.type === 1\"\n\t\t\t\t\t:checked=\"token.scope.filesystem\"\n\t\t\t\t\t@change.stop.prevent=\"$emit('toggle-scope', token, 'filesystem', !token.scope.filesystem)\">\n\t\t\t\t\t<!-- TODO: add text/longtext with some description -->\n\t\t\t\t\t{{ t('settings', 'Allow filesystem access') }}\n\t\t\t\t</NcActionCheckbox>\n\t\t\t\t<NcActionButton v-if=\"token.canRename\"\n\t\t\t\t\ticon=\"icon-rename\"\n\t\t\t\t\t@click.stop.prevent=\"startRename\">\n\t\t\t\t\t<!-- TODO: add text/longtext with some description -->\n\t\t\t\t\t{{ t('settings', 'Rename') }}\n\t\t\t\t</NcActionButton>\n\n\t\t\t\t<!-- revoke & wipe -->\n\t\t\t\t<template v-if=\"token.canDelete\">\n\t\t\t\t\t<template v-if=\"token.type !== 2\">\n\t\t\t\t\t\t<NcActionButton icon=\"icon-delete\"\n\t\t\t\t\t\t\t@click.stop.prevent=\"revoke\">\n\t\t\t\t\t\t\t<!-- TODO: add text/longtext with some description -->\n\t\t\t\t\t\t\t{{ t('settings', 'Revoke') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t\t<NcActionButton icon=\"icon-delete\"\n\t\t\t\t\t\t\t@click.stop.prevent=\"wipe\">\n\t\t\t\t\t\t\t{{ t('settings', 'Wipe device') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t</template>\n\t\t\t\t\t<NcActionButton v-else-if=\"token.type === 2\"\n\t\t\t\t\t\ticon=\"icon-delete\"\n\t\t\t\t\t\t:title=\"t('settings', 'Revoke')\"\n\t\t\t\t\t\t@click.stop.prevent=\"revoke\">\n\t\t\t\t\t\t{{ t('settings', 'Revoking this token might prevent the wiping of your device if it has not started the wipe yet.') }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</template>\n\t\t\t</NcActions>\n\t\t</td>\n\t</tr>\n</template>\n\n<script>\nimport {\n\tNcActions,\n\tNcActionButton,\n\tNcActionCheckbox,\n} from '@nextcloud/vue'\n\n// When using capture groups the following parts are extracted the first is used as the version number, the second as the OS\nconst userAgentMap = {\n\tie: /(?:MSIE|Trident|Trident\\/7.0; rv)[ :](\\d+)/,\n\t// Microsoft Edge User Agent from https://msdn.microsoft.com/en-us/library/hh869301(v=vs.85).aspx\n\tedge: /^Mozilla\\/5\\.0 \\([^)]+\\) AppleWebKit\\/[0-9.]+ \\(KHTML, like Gecko\\) Chrome\\/[0-9.]+ (?:Mobile Safari|Safari)\\/[0-9.]+ Edge\\/[0-9.]+$/,\n\t// Firefox User Agent from https://developer.mozilla.org/en-US/docs/Web/HTTP/Gecko_user_agent_string_reference\n\tfirefox: /^Mozilla\\/5\\.0 \\([^)]*(Windows|OS X|Linux)[^)]+\\) Gecko\\/[0-9.]+ Firefox\\/(\\d+)(?:\\.\\d)?$/,\n\t// Chrome User Agent from https://developer.chrome.com/multidevice/user-agent\n\tchrome: /^Mozilla\\/5\\.0 \\([^)]*(Windows|OS X|Linux)[^)]+\\) AppleWebKit\\/[0-9.]+ \\(KHTML, like Gecko\\) Chrome\\/(\\d+)[0-9.]+ (?:Mobile Safari|Safari)\\/[0-9.]+$/,\n\t// Safari User Agent from http://www.useragentstring.com/pages/Safari/\n\tsafari: /^Mozilla\\/5\\.0 \\([^)]*(Windows|OS X)[^)]+\\) AppleWebKit\\/[0-9.]+ \\(KHTML, like Gecko\\)(?: Version\\/([0-9]+)[0-9.]+)? Safari\\/[0-9.A-Z]+$/,\n\t// Android Chrome user agent: https://developers.google.com/chrome/mobile/docs/user-agent\n\tandroidChrome: /Android.*(?:; (.*) Build\\/).*Chrome\\/(\\d+)[0-9.]+/,\n\tiphone: / *CPU +iPhone +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,\n\tipad: /\\(iPad; *CPU +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,\n\tiosClient: /^Mozilla\\/5\\.0 \\(iOS\\) (?:ownCloud|Nextcloud)-iOS.*$/,\n\tandroidClient: /^Mozilla\\/5\\.0 \\(Android\\) (?:ownCloud|Nextcloud)-android.*$/,\n\tiosTalkClient: /^Mozilla\\/5\\.0 \\(iOS\\) Nextcloud-Talk.*$/,\n\tandroidTalkClient: /^Mozilla\\/5\\.0 \\(Android\\) Nextcloud-Talk.*$/,\n\t// DAVx5/3.3.8-beta2-gplay (2021/01/02; dav4jvm; okhttp/4.9.0) Android/10\n\tdavx5: /DAV(?:droid|x5)\\/([^ ]+)/,\n\t// Mozilla/5.0 (U; Linux; Maemo; Jolla; Sailfish; like Android 4.3) AppleWebKit/538.1 (KHTML, like Gecko) WebPirate/2.0 like Mobile Safari/538.1 (compatible)\n\twebPirate: /(Sailfish).*WebPirate\\/(\\d+)/,\n\t// Mozilla/5.0 (Maemo; Linux; U; Jolla; Sailfish; Mobile; rv:31.0) Gecko/31.0 Firefox/31.0 SailfishBrowser/1.0\n\tsailfishBrowser: /(Sailfish).*SailfishBrowser\\/(\\d+)/,\n\t// Neon 1.0.0+1\n\tneon: /Neon \\d+\\.\\d+\\.\\d+\\+\\d+/,\n}\nconst nameMap = {\n\tie: t('setting', 'Internet Explorer'),\n\tedge: t('setting', 'Edge'),\n\tfirefox: t('setting', 'Firefox'),\n\tchrome: t('setting', 'Google Chrome'),\n\tsafari: t('setting', 'Safari'),\n\tandroidChrome: t('setting', 'Google Chrome for Android'),\n\tiphone: t('setting', 'iPhone'),\n\tipad: t('setting', 'iPad'),\n\tiosClient: t('setting', '{productName} iOS app', { productName: window.oc_defaults.productName }),\n\tandroidClient: t('setting', '{productName} Android app', { productName: window.oc_defaults.productName }),\n\tiosTalkClient: t('setting', '{productName} Talk for iOS', { productName: window.oc_defaults.productName }),\n\tandroidTalkClient: t('setting', '{productName} Talk for Android', { productName: window.oc_defaults.productName }),\n\tdavx5: 'DAVx5',\n\twebPirate: 'WebPirate',\n\tsailfishBrowser: 'SailfishBrowser',\n\tneon: 'Neon',\n}\nconst iconMap = {\n\tie: 'icon-desktop',\n\tedge: 'icon-desktop',\n\tfirefox: 'icon-desktop',\n\tchrome: 'icon-desktop',\n\tsafari: 'icon-desktop',\n\tandroidChrome: 'icon-phone',\n\tiphone: 'icon-phone',\n\tipad: 'icon-tablet',\n\tiosClient: 'icon-phone',\n\tandroidClient: 'icon-phone',\n\tiosTalkClient: 'icon-phone',\n\tandroidTalkClient: 'icon-phone',\n\tdavx5: 'icon-phone',\n\twebPirate: 'icon-link',\n\tsailfishBrowser: 'icon-link',\n}\n\nexport default {\n\tname: 'AuthToken',\n\tcomponents: {\n\t\tNcActions,\n\t\tNcActionButton,\n\t\tNcActionCheckbox,\n\t},\n\tprops: {\n\t\ttoken: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowMore: this.token.canScope || this.token.canDelete,\n\t\t\trenaming: false,\n\t\t\tnewName: '',\n\t\t\toldName: '',\n\t\t\tactionOpen: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\tlastActivityRelative() {\n\t\t\treturn OC.Util.relativeModifiedDate(this.token.lastActivity * 1000)\n\t\t},\n\t\tlastActivity() {\n\t\t\treturn OC.Util.formatDate(this.token.lastActivity * 1000, 'LLL')\n\t\t},\n\t\ticonName() {\n\t\t\t// pretty format sync client user agent\n\t\t\tconst matches = this.token.name.match(/Mozilla\\/5\\.0 \\((\\w+)\\) (?:mirall|csyncoC)\\/(\\d+\\.\\d+\\.\\d+)/)\n\n\t\t\tlet icon = ''\n\t\t\tif (matches) {\n\t\t\t\t/* eslint-disable-next-line */\n\t\t\t\tthis.token.name = t('settings', 'Sync client - {os}', {\n\t\t\t\t\tos: matches[1],\n\t\t\t\t\tversion: matches[2],\n\t\t\t\t})\n\t\t\t\ticon = 'icon-desktop'\n\t\t\t}\n\n\t\t\t// preserve title for cases where we format it further\n\t\t\tconst title = this.token.name\n\t\t\tlet name = this.token.name\n\t\t\tfor (const client in userAgentMap) {\n\t\t\t\tconst matches = title.match(userAgentMap[client])\n\t\t\t\tif (matches) {\n\t\t\t\t\tif (matches[2] && matches[1]) { // version number and os\n\t\t\t\t\t\tname = nameMap[client] + ' ' + matches[2] + ' - ' + matches[1]\n\t\t\t\t\t} else if (matches[1]) { // only version number\n\t\t\t\t\t\tname = nameMap[client] + ' ' + matches[1]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tname = nameMap[client]\n\t\t\t\t\t}\n\n\t\t\t\t\ticon = iconMap[client]\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.token.current) {\n\t\t\t\tname = t('settings', 'This session')\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\ticon,\n\t\t\t\tname,\n\t\t\t}\n\t\t},\n\t\twiping() {\n\t\t\treturn this.token.type === 2\n\t\t},\n\t},\n\tmethods: {\n\t\tstartRename() {\n\t\t\t// Close action (popover menu)\n\t\t\tthis.actionOpen = false\n\n\t\t\tthis.oldName = this.token.name\n\t\t\tthis.newName = this.token.name\n\t\t\tthis.renaming = true\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$refs.input.select()\n\t\t\t})\n\t\t},\n\t\tcancelRename() {\n\t\t\tthis.renaming = false\n\t\t\tthis.$emit('rename', this.token, this.oldName)\n\t\t},\n\t\trevoke() {\n\t\t\tthis.actionOpen = false\n\t\t\tthis.$emit('delete', this.token)\n\t\t},\n\t\trename() {\n\t\t\tthis.renaming = false\n\t\t\tthis.$emit('rename', this.token, this.newName)\n\t\t},\n\t\twipe() {\n\t\t\tthis.actionOpen = false\n\t\t\tthis.$emit('wipe', this.token)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.wiping {\n\t\tbackground-color: var(--color-background-darker);\n\t}\n\n\ttd {\n\t\tborder-top: 1px solid var(--color-border);\n\t\tmax-width: 200px;\n\t\twhite-space: normal;\n\t\tvertical-align: middle;\n\t\tposition: relative;\n\n\t\t&%icon {\n\t\t\toverflow: visible;\n\t\t\tposition: relative;\n\t\t\twidth: 44px;\n\t\t\theight: 44px;\n\t\t}\n\n\t\t&.token-name {\n\t\t\tpadding: 10px 6px;\n\n\t\t\t&.token-rename {\n\t\t\t\tpadding: 0;\n\t\t\t}\n\n\t\t\tinput {\n\t\t\t\twidth: 100%;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t}\n\t\t&.token-name .wiping-warning {\n\t\t\tcolor: var(--color-text-lighter);\n\t\t}\n\n\t\t&.more {\n\t\t\t@extend %icon;\n\t\t\tpadding: 0 10px;\n\t\t}\n\n\t\t&.client {\n\t\t\t@extend %icon;\n\n\t\t\tdiv {\n\t\t\t\topacity: 0.57;\n\t\t\t\twidth: 44px;\n\t\t\t\theight: 44px;\n\t\t\t}\n\t\t}\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthToken.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthToken.vue?vue&type=script&lang=js&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthToken.vue?vue&type=style&index=0&id=0f73a400&prod&lang=scss&scoped=true&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthToken.vue?vue&type=style&index=0&id=0f73a400&prod&lang=scss&scoped=true&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AuthToken.vue?vue&type=template&id=0f73a400&scoped=true&\"\nimport script from \"./AuthToken.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthToken.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AuthToken.vue?vue&type=style&index=0&id=0f73a400&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"0f73a400\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('tr',{class:_vm.wiping,attrs:{\"data-id\":_vm.token.id}},[_c('td',{staticClass:\"client\"},[_c('div',{class:_vm.iconName.icon})]),_vm._v(\" \"),_c('td',{staticClass:\"token-name\"},[(_vm.token.canRename && _vm.renaming)?_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newName),expression:\"newName\"}],ref:\"input\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.newName)},on:{\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.rename.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"]))return null;return _vm.cancelRename.apply(null, arguments)}],\"change\":_vm.rename,\"input\":function($event){if($event.target.composing)return;_vm.newName=$event.target.value}}}):_c('span',[_vm._v(_vm._s(_vm.iconName.name))]),_vm._v(\" \"),(_vm.wiping)?_c('span',{staticClass:\"wiping-warning\"},[_vm._v(\"(\"+_vm._s(_vm.t('settings', 'Marked for remote wipe'))+\")\")]):_vm._e()]),_vm._v(\" \"),_c('td',[_c('span',{staticClass:\"last-activity\",attrs:{\"title\":_vm.lastActivity}},[_vm._v(_vm._s(_vm.lastActivityRelative))])]),_vm._v(\" \"),_c('td',{staticClass:\"more\"},[(!_vm.token.current)?_c('NcActions',{attrs:{\"title\":_vm.t('settings', 'Device settings'),\"aria-label\":_vm.t('settings', 'Device settings'),\"open\":_vm.actionOpen},on:{\"update:open\":function($event){_vm.actionOpen=$event}}},[(_vm.token.type === 1)?_c('NcActionCheckbox',{attrs:{\"checked\":_vm.token.scope.filesystem},on:{\"change\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.$emit('toggle-scope', _vm.token, 'filesystem', !_vm.token.scope.filesystem)}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Allow filesystem access'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.token.canRename)?_c('NcActionButton',{attrs:{\"icon\":\"icon-rename\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.startRename.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Rename'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.token.canDelete)?[(_vm.token.type !== 2)?[_c('NcActionButton',{attrs:{\"icon\":\"icon-delete\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.revoke.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Revoke'))+\"\\n\\t\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"icon\":\"icon-delete\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.wipe.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Wipe device'))+\"\\n\\t\\t\\t\\t\\t\")])]:(_vm.token.type === 2)?_c('NcActionButton',{attrs:{\"icon\":\"icon-delete\",\"title\":_vm.t('settings', 'Revoke')},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.revoke.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Revoking this token might prevent the wiping of your device if it has not started the wipe yet.'))+\"\\n\\t\\t\\t\\t\")]):_vm._e()]:_vm._e()],2):_vm._e()],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=script&lang=js&\"","<!--\n  - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n  -\n  - @author 2019 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<template>\n\t<table id=\"app-tokens-table\">\n\t\t<thead v-if=\"tokens.length\">\n\t\t\t<tr>\n\t\t\t\t<th />\n\t\t\t\t<th>{{ t('settings', 'Device') }}</th>\n\t\t\t\t<th>{{ t('settings', 'Last activity') }}</th>\n\t\t\t\t<th />\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody class=\"token-list\">\n\t\t\t<AuthToken v-for=\"token in sortedTokens\"\n\t\t\t\t:key=\"token.id\"\n\t\t\t\t:token=\"token\"\n\t\t\t\t@toggle-scope=\"toggleScope\"\n\t\t\t\t@rename=\"rename\"\n\t\t\t\t@delete=\"onDelete\"\n\t\t\t\t@wipe=\"onWipe\" />\n\t\t</tbody>\n\t</table>\n</template>\n\n<script>\nimport AuthToken from './AuthToken'\n\nexport default {\n\tname: 'AuthTokenList',\n\tcomponents: {\n\t\tAuthToken,\n\t},\n\tprops: {\n\t\ttokens: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tcomputed: {\n\t\tsortedTokens() {\n\t\t\treturn this.tokens.slice().sort((t1, t2) => {\n\t\t\t\tconst ts1 = parseInt(t1.lastActivity, 10)\n\t\t\t\tconst ts2 = parseInt(t2.lastActivity, 10)\n\t\t\t\treturn ts2 - ts1\n\t\t\t})\n\t\t},\n\t},\n\tmethods: {\n\t\ttoggleScope(token, scope, value) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('toggle-scope', token, scope, value)\n\t\t},\n\t\trename(token, newName) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('rename', token, newName)\n\t\t},\n\t\tonDelete(token) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('delete', token)\n\t\t},\n\t\tonWipe(token) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('wipe', token)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\ttable {\n\t\twidth: 100%;\n\t\tmin-height: 50px;\n\t\tpadding-top: 5px;\n\t\tmax-width: 580px;\n\n\t\tth {\n\t\t\topacity: .5;\n\t\t\tpadding: 10px 0;\n\t\t}\n\t}\n\n\t.token-list {\n\t\ttd > a.icon-more {\n\t\t\ttransition: opacity var(--animation-quick);\n\t\t}\n\n\t\ta.icon-more {\n\t\t\tpadding: 14px;\n\t\t\tdisplay: block;\n\t\t\twidth: 44px;\n\t\t\theight: 44px;\n\t\t\topacity: .5;\n\t\t}\n\n\t\ttr {\n\t\t\t&:hover td > a.icon,\n\t\t\ttd > a.icon:focus,\n\t\t\t&.active td > a.icon {\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\t}\n</style>\n\n<!-- some styles are not scoped to make them work on subcomponents -->\n<style lang=\"scss\">\n\t#app-tokens-table {\n\t\ttr > *:nth-child(2) {\n\t\t\tpadding-left: 6px;\n\t\t}\n\n\t\ttr > *:nth-child(3) {\n\t\t\ttext-align: right;\n\t\t}\n\t}\n</style>\n","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=style&index=0&id=4f8ceff3&prod&lang=scss&scoped=true&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=style&index=0&id=4f8ceff3&prod&lang=scss&scoped=true&\";\n       export default content && content.locals ? content.locals : undefined;\n","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=style&index=1&id=4f8ceff3&prod&lang=scss&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=style&index=1&id=4f8ceff3&prod&lang=scss&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AuthTokenList.vue?vue&type=template&id=4f8ceff3&scoped=true&\"\nimport script from \"./AuthTokenList.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthTokenList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AuthTokenList.vue?vue&type=style&index=0&id=4f8ceff3&prod&lang=scss&scoped=true&\"\nimport style1 from \"./AuthTokenList.vue?vue&type=style&index=1&id=4f8ceff3&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"4f8ceff3\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('table',{attrs:{\"id\":\"app-tokens-table\"}},[(_vm.tokens.length)?_c('thead',[_c('tr',[_c('th'),_vm._v(\" \"),_c('th',[_vm._v(_vm._s(_vm.t('settings', 'Device')))]),_vm._v(\" \"),_c('th',[_vm._v(_vm._s(_vm.t('settings', 'Last activity')))]),_vm._v(\" \"),_c('th')])]):_vm._e(),_vm._v(\" \"),_c('tbody',{staticClass:\"token-list\"},_vm._l((_vm.sortedTokens),function(token){return _c('AuthToken',{key:token.id,attrs:{\"token\":token},on:{\"toggle-scope\":_vm.toggleScope,\"rename\":_vm.rename,\"delete\":_vm.onDelete,\"wipe\":_vm.onWipe}})}),1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n  - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n  -\n  - @author 2019 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<template>\n\t<div v-if=\"!adding\" id=\"generate-app-token-section\" class=\"row spacing\">\n\t\t<!-- Port to TextField component when available -->\n\t\t<input v-model=\"deviceName\"\n\t\t\ttype=\"text\"\n\t\t\t:maxlength=\"120\"\n\t\t\t:disabled=\"loading\"\n\t\t\t:placeholder=\"t('settings', 'App name')\"\n\t\t\t@keydown.enter=\"submit\">\n\t\t<NcButton :disabled=\"loading || deviceName.length === 0\"\n\t\t\ttype=\"primary\"\n\t\t\t@click=\"submit\">\n\t\t\t{{ t('settings', 'Create new app password') }}\n\t\t</NcButton>\n\t</div>\n\t<div v-else class=\"spacing\">\n\t\t{{ t('settings', 'Use the credentials below to configure your app or device.') }}\n\t\t{{ t('settings', 'For security reasons this password will only be shown once.') }}\n\t\t<div class=\"app-password-row\">\n\t\t\t<label for=\"app-username\" class=\"app-password-label\">{{ t('settings', 'Username') }}</label>\n\t\t\t<input id=\"app-username\"\n\t\t\t\t:value=\"loginName\"\n\t\t\t\ttype=\"text\"\n\t\t\t\tclass=\"monospaced\"\n\t\t\t\treadonly=\"readonly\"\n\t\t\t\t@focus=\"selectInput\">\n\t\t</div>\n\t\t<div class=\"app-password-row\">\n\t\t\t<label for=\"app-password\" class=\"app-password-label\">{{ t('settings', 'Password') }}</label>\n\t\t\t<input id=\"app-password\"\n\t\t\t\tref=\"appPassword\"\n\t\t\t\t:value=\"appPassword\"\n\t\t\t\ttype=\"text\"\n\t\t\t\tclass=\"monospaced\"\n\t\t\t\treadonly=\"readonly\"\n\t\t\t\t@focus=\"selectInput\">\n\t\t\t<NcButton type=\"tertiary\"\n\t\t\t\t:title=\"copyTooltipOptions\"\n\t\t\t\t:aria-label=\"copyTooltipOptions\"\n\t\t\t\t@click=\"copyPassword\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Check v-if=\"copied\" :size=\"20\" />\n\t\t\t\t\t<ContentCopy v-else :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<NcButton @click=\"reset\">\n\t\t\t\t{{ t('settings', 'Done') }}\n\t\t\t</NcButton>\n\t\t</div>\n\t\t<div class=\"app-password-row\">\n\t\t\t<span class=\"app-password-label\" />\n\t\t\t<a v-if=\"!showQR\"\n\t\t\t\t@click=\"showQR = true\">\n\t\t\t\t{{ t('settings', 'Show QR code for mobile apps') }}\n\t\t\t</a>\n\t\t\t<QR v-else\n\t\t\t\t:value=\"qrUrl\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport QR from '@chenfengyuan/vue-qrcode'\nimport { confirmPassword } from '@nextcloud/password-confirmation'\nimport '@nextcloud/password-confirmation/dist/style.css'\nimport { showError } from '@nextcloud/dialogs'\nimport { getRootUrl } from '@nextcloud/router'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton'\n\nimport Check from 'vue-material-design-icons/Check.vue'\nimport ContentCopy from 'vue-material-design-icons/ContentCopy.vue'\n\nexport default {\n\tname: 'AuthTokenSetupDialogue',\n\tcomponents: {\n\t\tCheck,\n\t\tContentCopy,\n\t\tNcButton,\n\t\tQR,\n\t},\n\tprops: {\n\t\tadd: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tadding: false,\n\t\t\tloading: false,\n\t\t\tdeviceName: '',\n\t\t\tappPassword: '',\n\t\t\tloginName: '',\n\t\t\tcopied: false,\n\t\t\tshowQR: false,\n\t\t\tqrUrl: '',\n\t\t}\n\t},\n\tcomputed: {\n\t\tcopyTooltipOptions() {\n\t\t\tif (this.copied) {\n\t\t\t\treturn t('settings', 'Copied!')\n\t\t\t}\n\t\t\treturn t('settings', 'Copy')\n\t\t},\n\t},\n\tmethods: {\n\t\tselectInput(e) {\n\t\t\te.currentTarget.select()\n\t\t},\n\t\tsubmit() {\n\t\t\tconfirmPassword()\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.loading = true\n\t\t\t\t\treturn this.add(this.deviceName)\n\t\t\t\t})\n\t\t\t\t.then(token => {\n\t\t\t\t\tthis.adding = true\n\t\t\t\t\tthis.loginName = token.loginName\n\t\t\t\t\tthis.appPassword = token.token\n\n\t\t\t\t\tconst server = window.location.protocol + '//' + window.location.host + getRootUrl()\n\t\t\t\t\tthis.qrUrl = `nc://login/user:${token.loginName}&password:${token.token}&server:${server}`\n\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tthis.$refs.appPassword.select()\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error('could not create a new app password', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while creating device token'))\n\n\t\t\t\t\tthis.reset()\n\t\t\t\t})\n\t\t},\n\t\tasync copyPassword() {\n\t\t\ttry {\n\t\t\t\tawait navigator.clipboard.writeText(this.appPassword)\n\t\t\t\tthis.copied = true\n\t\t\t} catch (e) {\n\t\t\t\tthis.copied = false\n\t\t\t\tconsole.error(e)\n\t\t\t\tshowError(t('settings', 'Could not copy app password. Please copy it manually.'))\n\t\t\t} finally {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.copied = false\n\t\t\t\t}, 4000)\n\t\t\t}\n\t\t},\n\t\treset() {\n\t\t\tthis.adding = false\n\t\t\tthis.loading = false\n\t\t\tthis.showQR = false\n\t\t\tthis.qrUrl = ''\n\t\t\tthis.deviceName = ''\n\t\t\tthis.appPassword = ''\n\t\t\tthis.loginName = ''\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.app-password-row {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\n\t\t.icon {\n\t\t\tbackground-size: 16px 16px;\n\t\t\tdisplay: inline-block;\n\t\t\tposition: relative;\n\t\t\ttop: 3px;\n\t\t\tmargin-left: 5px;\n\t\t\tmargin-right: 8px;\n\t\t}\n\n\t}\n\n\t.app-password-label {\n\t\tdisplay: table-cell;\n\t\tpadding-right: 1em;\n\t\ttext-align: right;\n\t\tvertical-align: middle;\n\t\twidth: 100px;\n\t}\n\n\t.row input {\n\t\theight: 44px !important;\n\t\tpadding: 7px 12px;\n\t\tmargin-right: 12px;\n\t\twidth: 200px;\n\t}\n\n\t.monospaced {\n\t\twidth: 245px;\n\t\tfont-family: monospace;\n\t}\n\n\t.button-vue{\n\t\tdisplay:inline-block;\n\t\tmargin: 3px 3px 3px 3px;\n\t}\n\n\t.row {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t}\n\n\t.spacing {\n\t\tpadding-top: 16px;\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSetupDialogue.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSetupDialogue.vue?vue&type=script&lang=js&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=05a9cc2c&prod&lang=scss&scoped=true&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=05a9cc2c&prod&lang=scss&scoped=true&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AuthTokenSetupDialogue.vue?vue&type=template&id=05a9cc2c&scoped=true&\"\nimport script from \"./AuthTokenSetupDialogue.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthTokenSetupDialogue.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=05a9cc2c&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"05a9cc2c\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (!_vm.adding)?_c('div',{staticClass:\"row spacing\",attrs:{\"id\":\"generate-app-token-section\"}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.deviceName),expression:\"deviceName\"}],attrs:{\"type\":\"text\",\"maxlength\":120,\"disabled\":_vm.loading,\"placeholder\":_vm.t('settings', 'App name')},domProps:{\"value\":(_vm.deviceName)},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.submit.apply(null, arguments)},\"input\":function($event){if($event.target.composing)return;_vm.deviceName=$event.target.value}}}),_vm._v(\" \"),_c('NcButton',{attrs:{\"disabled\":_vm.loading || _vm.deviceName.length === 0,\"type\":\"primary\"},on:{\"click\":_vm.submit}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings', 'Create new app password'))+\"\\n\\t\")])],1):_c('div',{staticClass:\"spacing\"},[_vm._v(\"\\n\\t\"+_vm._s(_vm.t('settings', 'Use the credentials below to configure your app or device.'))+\"\\n\\t\"+_vm._s(_vm.t('settings', 'For security reasons this password will only be shown once.'))+\"\\n\\t\"),_c('div',{staticClass:\"app-password-row\"},[_c('label',{staticClass:\"app-password-label\",attrs:{\"for\":\"app-username\"}},[_vm._v(_vm._s(_vm.t('settings', 'Username')))]),_vm._v(\" \"),_c('input',{staticClass:\"monospaced\",attrs:{\"id\":\"app-username\",\"type\":\"text\",\"readonly\":\"readonly\"},domProps:{\"value\":_vm.loginName},on:{\"focus\":_vm.selectInput}})]),_vm._v(\" \"),_c('div',{staticClass:\"app-password-row\"},[_c('label',{staticClass:\"app-password-label\",attrs:{\"for\":\"app-password\"}},[_vm._v(_vm._s(_vm.t('settings', 'Password')))]),_vm._v(\" \"),_c('input',{ref:\"appPassword\",staticClass:\"monospaced\",attrs:{\"id\":\"app-password\",\"type\":\"text\",\"readonly\":\"readonly\"},domProps:{\"value\":_vm.appPassword},on:{\"focus\":_vm.selectInput}}),_vm._v(\" \"),_c('NcButton',{attrs:{\"type\":\"tertiary\",\"title\":_vm.copyTooltipOptions,\"aria-label\":_vm.copyTooltipOptions},on:{\"click\":_vm.copyPassword},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.copied)?_c('Check',{attrs:{\"size\":20}}):_c('ContentCopy',{attrs:{\"size\":20}})]},proxy:true}])}),_vm._v(\" \"),_c('NcButton',{on:{\"click\":_vm.reset}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Done'))+\"\\n\\t\\t\")])],1),_vm._v(\" \"),_c('div',{staticClass:\"app-password-row\"},[_c('span',{staticClass:\"app-password-label\"}),_vm._v(\" \"),(!_vm.showQR)?_c('a',{on:{\"click\":function($event){_vm.showQR = true}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Show QR code for mobile apps'))+\"\\n\\t\\t\")]):_c('QR',{attrs:{\"value\":_vm.qrUrl}})],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n  - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n  -\n  - @author 2019 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<template>\n\t<div id=\"security\" class=\"section\">\n\t\t<h2>{{ t('settings', 'Devices & sessions', {}, undefined, {sanitize: false}) }}</h2>\n\t\t<p class=\"settings-hint hidden-when-empty\">\n\t\t\t{{ t('settings', 'Web, desktop and mobile clients currently logged in to your account.') }}\n\t\t</p>\n\t\t<AuthTokenList :tokens=\"tokens\"\n\t\t\t@toggle-scope=\"toggleTokenScope\"\n\t\t\t@rename=\"rename\"\n\t\t\t@delete=\"deleteToken\"\n\t\t\t@wipe=\"wipeToken\" />\n\t\t<AuthTokenSetupDialogue v-if=\"canCreateToken\" :add=\"addNewToken\" />\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { confirmPassword } from '@nextcloud/password-confirmation'\nimport '@nextcloud/password-confirmation/dist/style.css'\nimport { generateUrl } from '@nextcloud/router'\n\nimport AuthTokenList from './AuthTokenList'\nimport AuthTokenSetupDialogue from './AuthTokenSetupDialogue'\n\nconst confirm = () => {\n\treturn new Promise(resolve => {\n\t\tOC.dialogs.confirm(\n\t\t\tt('settings', 'Do you really want to wipe your data from this device?'),\n\t\t\tt('settings', 'Confirm wipe'),\n\t\t\tresolve,\n\t\t\ttrue\n\t\t)\n\t})\n}\n\n/**\n * Tap into a promise without losing the value\n *\n * @param {Function} cb the callback\n * @return {any} val the value\n */\nconst tap = cb => val => {\n\tcb(val)\n\treturn val\n}\n\nexport default {\n\tname: 'AuthTokenSection',\n\tcomponents: {\n\t\tAuthTokenSetupDialogue,\n\t\tAuthTokenList,\n\t},\n\tprops: {\n\t\ttokens: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\tcanCreateToken: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tbaseUrl: generateUrl('/settings/personal/authtokens'),\n\t\t}\n\t},\n\tmethods: {\n\t\taddNewToken(name) {\n\t\t\tconsole.debug('creating a new app token', name)\n\n\t\t\tconst data = {\n\t\t\t\tname,\n\t\t\t}\n\t\t\treturn axios.post(this.baseUrl, data)\n\t\t\t\t.then(resp => resp.data)\n\t\t\t\t.then(tap(() => console.debug('app token created')))\n\t\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\t\t.then(tap(data => this.tokens.push(data.deviceToken)))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not create app password', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while creating device token'))\n\t\t\t\t\tthrow err\n\t\t\t\t})\n\t\t},\n\t\ttoggleTokenScope(token, scope, value) {\n\t\t\tconsole.debug('updating app token scope', token.id, scope, value)\n\n\t\t\tconst oldVal = token.scope[scope]\n\t\t\ttoken.scope[scope] = value\n\n\t\t\treturn this.updateToken(token)\n\t\t\t\t.then(tap(() => console.debug('app token scope updated')))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not update app token scope', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while updating device token scope'))\n\n\t\t\t\t\t// Restore\n\t\t\t\t\ttoken.scope[scope] = oldVal\n\n\t\t\t\t\tthrow err\n\t\t\t\t})\n\t\t},\n\t\trename(token, newName) {\n\t\t\tconsole.debug('renaming app token', token.id, token.name, newName)\n\n\t\t\tconst oldName = token.name\n\t\t\ttoken.name = newName\n\n\t\t\treturn this.updateToken(token)\n\t\t\t\t.then(tap(() => console.debug('app token name updated')))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not update app token name', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while updating device token name'))\n\n\t\t\t\t\t// Restore\n\t\t\t\t\ttoken.name = oldName\n\t\t\t\t})\n\t\t},\n\t\tupdateToken(token) {\n\t\t\treturn axios.put(this.baseUrl + '/' + token.id, token)\n\t\t\t\t.then(resp => resp.data)\n\t\t},\n\t\tdeleteToken(token) {\n\t\t\tconsole.debug('deleting app token', token)\n\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.tokens = this.tokens.filter(t => t !== token)\n\n\t\t\treturn axios.delete(this.baseUrl + '/' + token.id)\n\t\t\t\t.then(resp => resp.data)\n\t\t\t\t.then(tap(() => console.debug('app token deleted')))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not delete app token', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while deleting the token'))\n\n\t\t\t\t\t// Restore\n\t\t\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\t\t\tthis.tokens.push(token)\n\t\t\t\t})\n\t\t},\n\t\tasync wipeToken(token) {\n\t\t\tconsole.debug('wiping app token', token)\n\n\t\t\ttry {\n\t\t\t\tawait confirmPassword()\n\n\t\t\t\tif (!(await confirm())) {\n\t\t\t\t\tconsole.debug('wipe aborted by user')\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tawait axios.post(this.baseUrl + '/wipe/' + token.id)\n\t\t\t\tconsole.debug('app token marked for wipe')\n\n\t\t\t\ttoken.type = 2\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error('could not wipe app token', err)\n\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while wiping the device with the token'))\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AuthTokenSection.vue?vue&type=template&id=240596c0&scoped=true&\"\nimport script from \"./AuthTokenSection.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthTokenSection.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"240596c0\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"section\",attrs:{\"id\":\"security\"}},[_c('h2',[_vm._v(_vm._s(_vm.t('settings', 'Devices & sessions', {}, undefined, {sanitize: false})))]),_vm._v(\" \"),_c('p',{staticClass:\"settings-hint hidden-when-empty\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings', 'Web, desktop and mobile clients currently logged in to your account.'))+\"\\n\\t\")]),_vm._v(\" \"),_c('AuthTokenList',{attrs:{\"tokens\":_vm.tokens},on:{\"toggle-scope\":_vm.toggleTokenScope,\"rename\":_vm.rename,\"delete\":_vm.deleteToken,\"wipe\":_vm.wipeToken}}),_vm._v(\" \"),(_vm.canCreateToken)?_c('AuthTokenSetupDialogue',{attrs:{\"add\":_vm.addNewToken}}):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\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\nimport { loadState } from '@nextcloud/initial-state'\nimport Vue from 'vue'\nimport VTooltip from 'v-tooltip'\n\nimport AuthTokenSection from './components/AuthTokenSection'\n\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(OC.requestToken)\n\nVue.use(VTooltip, { defaultHtml: false })\nVue.prototype.t = t\n\nconst View = Vue.extend(AuthTokenSection)\nnew View({\n\tpropsData: {\n\t\ttokens: loadState('settings', 'app_tokens'),\n\t\tcanCreateToken: loadState('settings', 'can_create_app_token'),\n\t},\n}).$mount('#security-authtokens')\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".wiping[data-v-0f73a400]{background-color:var(--color-background-darker)}td[data-v-0f73a400]{border-top:1px solid var(--color-border);max-width:200px;white-space:normal;vertical-align:middle;position:relative}td.client[data-v-0f73a400],td.more[data-v-0f73a400]{overflow:visible;position:relative;width:44px;height:44px}td.token-name[data-v-0f73a400]{padding:10px 6px}td.token-name.token-rename[data-v-0f73a400]{padding:0}td.token-name input[data-v-0f73a400]{width:100%;margin:0}td.token-name .wiping-warning[data-v-0f73a400]{color:var(--color-text-lighter)}td.more[data-v-0f73a400]{padding:0 10px}td.client div[data-v-0f73a400]{opacity:.57;width:44px;height:44px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthToken.vue\"],\"names\":[],\"mappings\":\"AACA,yBACC,+CAAA,CAGD,oBACC,wCAAA,CACA,eAAA,CACA,kBAAA,CACA,qBAAA,CACA,iBAAA,CAEA,oDACC,gBAAA,CACA,iBAAA,CACA,UAAA,CACA,WAAA,CAGD,+BACC,gBAAA,CAEA,4CACC,SAAA,CAGD,qCACC,UAAA,CACA,QAAA,CAGF,+CACC,+BAAA,CAGD,yBAEC,cAAA,CAMA,+BACC,WAAA,CACA,UAAA,CACA,WAAA\",\"sourcesContent\":[\"\\n.wiping {\\n\\tbackground-color: var(--color-background-darker);\\n}\\n\\ntd {\\n\\tborder-top: 1px solid var(--color-border);\\n\\tmax-width: 200px;\\n\\twhite-space: normal;\\n\\tvertical-align: middle;\\n\\tposition: relative;\\n\\n\\t&%icon {\\n\\t\\toverflow: visible;\\n\\t\\tposition: relative;\\n\\t\\twidth: 44px;\\n\\t\\theight: 44px;\\n\\t}\\n\\n\\t&.token-name {\\n\\t\\tpadding: 10px 6px;\\n\\n\\t\\t&.token-rename {\\n\\t\\t\\tpadding: 0;\\n\\t\\t}\\n\\n\\t\\tinput {\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\tmargin: 0;\\n\\t\\t}\\n\\t}\\n\\t&.token-name .wiping-warning {\\n\\t\\tcolor: var(--color-text-lighter);\\n\\t}\\n\\n\\t&.more {\\n\\t\\t@extend %icon;\\n\\t\\tpadding: 0 10px;\\n\\t}\\n\\n\\t&.client {\\n\\t\\t@extend %icon;\\n\\n\\t\\tdiv {\\n\\t\\t\\topacity: 0.57;\\n\\t\\t\\twidth: 44px;\\n\\t\\t\\theight: 44px;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"table[data-v-4f8ceff3]{width:100%;min-height:50px;padding-top:5px;max-width:580px}table th[data-v-4f8ceff3]{opacity:.5;padding:10px 0}.token-list td>a.icon-more[data-v-4f8ceff3]{transition:opacity var(--animation-quick)}.token-list a.icon-more[data-v-4f8ceff3]{padding:14px;display:block;width:44px;height:44px;opacity:.5}.token-list tr:hover td>a.icon[data-v-4f8ceff3],.token-list tr td>a.icon[data-v-4f8ceff3]:focus,.token-list tr.active td>a.icon[data-v-4f8ceff3]{opacity:1}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthTokenList.vue\"],\"names\":[],\"mappings\":\"AACA,uBACC,UAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CAEA,0BACC,UAAA,CACA,cAAA,CAKD,4CACC,yCAAA,CAGD,yCACC,YAAA,CACA,aAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CAIA,iJAGC,SAAA\",\"sourcesContent\":[\"\\ntable {\\n\\twidth: 100%;\\n\\tmin-height: 50px;\\n\\tpadding-top: 5px;\\n\\tmax-width: 580px;\\n\\n\\tth {\\n\\t\\topacity: .5;\\n\\t\\tpadding: 10px 0;\\n\\t}\\n}\\n\\n.token-list {\\n\\ttd > a.icon-more {\\n\\t\\ttransition: opacity var(--animation-quick);\\n\\t}\\n\\n\\ta.icon-more {\\n\\t\\tpadding: 14px;\\n\\t\\tdisplay: block;\\n\\t\\twidth: 44px;\\n\\t\\theight: 44px;\\n\\t\\topacity: .5;\\n\\t}\\n\\n\\ttr {\\n\\t\\t&:hover td > a.icon,\\n\\t\\ttd > a.icon:focus,\\n\\t\\t&.active td > a.icon {\\n\\t\\t\\topacity: 1;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#app-tokens-table tr>*:nth-child(2){padding-left:6px}#app-tokens-table tr>*:nth-child(3){text-align:right}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthTokenList.vue\"],\"names\":[],\"mappings\":\"AAEC,oCACC,gBAAA,CAGD,oCACC,gBAAA\",\"sourcesContent\":[\"\\n#app-tokens-table {\\n\\ttr > *:nth-child(2) {\\n\\t\\tpadding-left: 6px;\\n\\t}\\n\\n\\ttr > *:nth-child(3) {\\n\\t\\ttext-align: right;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-password-row[data-v-05a9cc2c]{display:flex;align-items:center}.app-password-row .icon[data-v-05a9cc2c]{background-size:16px 16px;display:inline-block;position:relative;top:3px;margin-left:5px;margin-right:8px}.app-password-label[data-v-05a9cc2c]{display:table-cell;padding-right:1em;text-align:right;vertical-align:middle;width:100px}.row input[data-v-05a9cc2c]{height:44px !important;padding:7px 12px;margin-right:12px;width:200px}.monospaced[data-v-05a9cc2c]{width:245px;font-family:monospace}.button-vue[data-v-05a9cc2c]{display:inline-block;margin:3px 3px 3px 3px}.row[data-v-05a9cc2c]{display:flex;align-items:center}.spacing[data-v-05a9cc2c]{padding-top:16px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthTokenSetupDialogue.vue\"],\"names\":[],\"mappings\":\"AACA,mCACC,YAAA,CACA,kBAAA,CAEA,yCACC,yBAAA,CACA,oBAAA,CACA,iBAAA,CACA,OAAA,CACA,eAAA,CACA,gBAAA,CAKF,qCACC,kBAAA,CACA,iBAAA,CACA,gBAAA,CACA,qBAAA,CACA,WAAA,CAGD,4BACC,sBAAA,CACA,gBAAA,CACA,iBAAA,CACA,WAAA,CAGD,6BACC,WAAA,CACA,qBAAA,CAGD,6BACC,oBAAA,CACA,sBAAA,CAGD,sBACC,YAAA,CACA,kBAAA,CAGD,0BACC,gBAAA\",\"sourcesContent\":[\"\\n.app-password-row {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\n\\t.icon {\\n\\t\\tbackground-size: 16px 16px;\\n\\t\\tdisplay: inline-block;\\n\\t\\tposition: relative;\\n\\t\\ttop: 3px;\\n\\t\\tmargin-left: 5px;\\n\\t\\tmargin-right: 8px;\\n\\t}\\n\\n}\\n\\n.app-password-label {\\n\\tdisplay: table-cell;\\n\\tpadding-right: 1em;\\n\\ttext-align: right;\\n\\tvertical-align: middle;\\n\\twidth: 100px;\\n}\\n\\n.row input {\\n\\theight: 44px !important;\\n\\tpadding: 7px 12px;\\n\\tmargin-right: 12px;\\n\\twidth: 200px;\\n}\\n\\n.monospaced {\\n\\twidth: 245px;\\n\\tfont-family: monospace;\\n}\\n\\n.button-vue{\\n\\tdisplay:inline-block;\\n\\tmargin: 3px 3px 3px 3px;\\n}\\n\\n.row {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n}\\n\\n.spacing {\\n\\tpadding-top: 16px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 4783;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t4783: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], function() { return __webpack_require__(20063); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","ie","edge","firefox","chrome","safari","androidChrome","iphone","ipad","iosClient","androidClient","iosTalkClient","androidTalkClient","davx5","webPirate","sailfishBrowser","neon","productName","name","components","NcActions","NcActionButton","NcActionCheckbox","props","token","type","required","data","showMore","renaming","newName","oldName","actionOpen","computed","lastActivityRelative","lastActivity","iconName","os","version","icon","wiping","methods","startRename","cancelRename","revoke","rename","wipe","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","component","_vm","this","_c","_self","class","attrs","id","staticClass","_v","canRename","directives","rawName","value","expression","ref","domProps","on","$event","indexOf","_k","keyCode","key","apply","arguments","target","composing","_s","t","_e","current","scope","filesystem","stopPropagation","preventDefault","$emit","canDelete","AuthToken","tokens","sortedTokens","toggleScope","onDelete","onWipe","length","_l","Check","ContentCopy","NcButton","QR","add","adding","loading","deviceName","appPassword","loginName","copied","showQR","qrUrl","copyTooltipOptions","selectInput","e","submit","confirmPassword","then","catch","console","OC","copyPassword","navigator","showError","setTimeout","reset","scopedSlots","_u","fn","proxy","cb","AuthTokenSetupDialogue","AuthTokenList","canCreateToken","baseUrl","addNewToken","toggleTokenScope","updateToken","deleteToken","wipeToken","resolve","axios","undefined","sanitize","__webpack_nonce__","btoa","requestToken","Vue","VTooltip","defaultHtml","AuthTokenSection","propsData","loadState","$mount","___CSS_LOADER_EXPORT___","push","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","loaded","__webpack_modules__","call","m","O","result","chunkIds","priority","notFulfilled","Infinity","i","fulfilled","j","Object","keys","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","window","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","document","baseURI","self","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","forEach","bind","nc","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file