aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJulius Härtl <jus@bitgrid.net>2023-03-03 09:26:16 +0100
committerGitHub <noreply@github.com>2023-03-03 09:26:16 +0100
commit26696c4deb50579d084df536cffbd3dea2e8a609 (patch)
tree746e8a1a716a30a08d892458b64193241a576fe3
parentbc94fab8eea4eb76ea98a34076510c2054b9d741 (diff)
parent322dbe8860e1a619d035755abba4c3fe95fd2474 (diff)
downloadnextcloud-server-26696c4deb50579d084df536cffbd3dea2e8a609.tar.gz
nextcloud-server-26696c4deb50579d084df536cffbd3dea2e8a609.zip
Merge pull request #37021 from nextcloud/enh/notes-recommended
feat: Add notes as recommended app
-rw-r--r--core/img/apps/notes.svg1
-rw-r--r--core/src/components/setup/RecommendedApps.vue4
-rw-r--r--dist/core-recommendedapps.js4
-rw-r--r--dist/core-recommendedapps.js.map2
4 files changed, 8 insertions, 3 deletions
diff --git a/core/img/apps/notes.svg b/core/img/apps/notes.svg
new file mode 100644
index 00000000000..38e29fd623b
--- /dev/null
+++ b/core/img/apps/notes.svg
@@ -0,0 +1 @@
+<svg height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h24v24h-24z" fill="none"/><path d="m3 17.25v3.75h3.75l11.06-11.06-3.75-3.75zm17.71-10.21c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75z"/></svg> \ No newline at end of file
diff --git a/core/src/components/setup/RecommendedApps.vue b/core/src/components/setup/RecommendedApps.vue
index 6b81106ff72..8032d1dbdc9 100644
--- a/core/src/components/setup/RecommendedApps.vue
+++ b/core/src/components/setup/RecommendedApps.vue
@@ -106,6 +106,10 @@ const recommended = {
description: t('core', 'Collaborative documents, spreadsheets and presentations, built on Collabora Online.'),
icon: imagePath('core', 'apps/richdocuments.svg'),
},
+ notes: {
+ description: t('core', 'Distraction free note taking app.'),
+ icon: imagePath('core', 'apps/notes.svg'),
+ },
richdocumentscode: {
hidden: true,
},
diff --git a/dist/core-recommendedapps.js b/dist/core-recommendedapps.js
index 3bfcc87ae7c..13194fcc855 100644
--- a/dist/core-recommendedapps.js
+++ b/dist/core-recommendedapps.js
@@ -1,3 +1,3 @@
/*! For license information please see core-recommendedapps.js.LICENSE.txt */
-!function(){"use strict";var n,t={74151:function(n,t,e){var o,a=e(45994),i=e(31352),r=e(20144),c=e(17499),s=null===(o=(0,a.ts)())?(0,c.IY)().setApp("core").build():(0,c.IY)().setApp("core").setUid(o.uid).build(),l=e(4820),p=e(79753),d=e(79954),u=e(63560),f=e(10861),m=e.n(f);function g(n,t,e,o,a,i,r){try{var c=n[i](r),s=c.value}catch(n){return void e(n)}c.done?t(s):Promise.resolve(s).then(o,a)}var A={calendar:{description:(0,i.Iu)("core","Schedule work & meetings, synced with all your devices."),icon:(0,p.imagePath)("core","places/calendar.svg")},contacts:{description:(0,i.Iu)("core","Keep your colleagues and friends in one place without leaking their private info."),icon:(0,p.imagePath)("core","places/contacts.svg")},mail:{description:(0,i.Iu)("core","Simple email app nicely integrated with Files, Contacts and Calendar."),icon:(0,p.imagePath)("core","actions/mail.svg")},spreed:{description:(0,i.Iu)("core","Chatting, video calls, screensharing, online meetings and web conferencing – in your browser and with mobile apps."),icon:(0,p.imagePath)("core","apps/spreed.svg")},richdocuments:{name:"Nextcloud Office",description:(0,i.Iu)("core","Collaborative documents, spreadsheets and presentations, built on Collabora Online."),icon:(0,p.imagePath)("core","apps/richdocuments.svg")},richdocumentscode:{hidden:!0}},h=Object.keys(A),v=(0,d.j)("core","defaultPageUrl"),C={name:"RecommendedApps",components:{NcButton:m()},data:function(){return{showInstallButton:!1,installingApps:!1,loadingApps:!0,loadingAppsError:!1,apps:[],defaultPageUrl:v}},computed:{recommendedApps:function(){return this.apps.filter((function(n){return h.includes(n.id)}))}},mounted:function(){var n,t=this;return(n=regeneratorRuntime.mark((function n(){var e,o;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,n.next=3,l.default.get((0,p.generateUrl)("settings/apps/list"));case 3:e=n.sent,o=e.data,s.info("".concat(o.apps.length," apps fetched")),t.apps=o.apps.map((function(n){return Object.assign(n,{loading:!1,installationError:!1})})),s.debug("".concat(t.recommendedApps.length," recommended apps found"),{apps:t.recommendedApps}),t.showInstallButton=!0,n.next=15;break;case 11:n.prev=11,n.t0=n.catch(0),s.error("could not fetch app list",{error:n.t0}),t.loadingAppsError=!0;case 15:return n.prev=15,t.loadingApps=!1,n.finish(15);case 18:case"end":return n.stop()}}),n,null,[[0,11,15,18]])})),function(){var t=this,e=arguments;return new Promise((function(o,a){var i=n.apply(t,e);function r(n){g(i,o,a,r,c,"next",n)}function c(n){g(i,o,a,r,c,"throw",n)}r(void 0)}))})()},methods:{installApps:function(){this.showInstallButton=!1,this.installingApps=!0;var n=(0,u.Z)(1),t=this.recommendedApps.filter((function(n){return!n.active&&n.isCompatible&&n.canInstall})).map((function(t){return n((function(){return s.info("installing ".concat(t.id)),t.loading=!0,l.default.post((0,p.generateUrl)("settings/apps/enable"),{appIds:[t.id],groups:[]}).catch((function(n){s.error("could not install ".concat(t.id),{error:n}),t.installationError=!0})).then((function(){s.info("installed ".concat(t.id)),t.loading=!1}))}))}));s.debug("installing ".concat(t.length," recommended apps")),Promise.all(t).then((function(){s.info("all recommended apps installed, redirecting …"),window.location=v})).catch((function(n){return s.error("could not install recommended apps",{error:n})}))},customIcon:function(n){return n in A&&A[n].icon?A[n].icon:(s.warn("no app icon for recommended app ".concat(n)),(0,p.imagePath)("core","places/default-app-icon.svg"))},customName:function(n){return n.id in A&&A[n.id].name||n.name},customDescription:function(n){return n in A?A[n].description:(s.warn("no app description for recommended app ".concat(n)),"")},isHidden:function(n){return n in A&&!!A[n].hidden},goTo:function(n){window.location.href=n}}},b=C,x=e(93379),w=e.n(x),_=e(7795),y=e.n(_),k=e(90569),I=e.n(k),P=e(3565),B=e.n(P),O=e(19216),j=e.n(O),D=e(44589),E=e.n(D),S=e(47041),T={};T.styleTagTransform=E(),T.setAttributes=B(),T.insert=I().bind(null,"head"),T.domAPI=y(),T.insertStyleElement=j(),w()(S.Z,T),S.Z&&S.Z.locals&&S.Z.locals;var U=(0,e(51900).Z)(b,(function(){var n=this,t=n._self._c;return t("div",{staticClass:"guest-box"},[t("h2",[n._v(n._s(n.t("core","Recommended apps")))]),n._v(" "),n.loadingApps?t("p",{staticClass:"loading text-center"},[n._v("\n\t\t"+n._s(n.t("core","Loading apps …"))+"\n\t")]):n.loadingAppsError?t("p",{staticClass:"loading-error text-center"},[n._v("\n\t\t"+n._s(n.t("core","Could not fetch list of apps from the App Store."))+"\n\t")]):n.installingApps?t("p",{staticClass:"text-center"},[n._v("\n\t\t"+n._s(n.t("core","Installing apps …"))+"\n\t")]):n._e(),n._v(" "),n._l(n.recommendedApps,(function(e){return t("div",{key:e.id,staticClass:"app"},[n.isHidden(e.id)?n._e():[t("img",{attrs:{src:n.customIcon(e.id),alt:""}}),n._v(" "),t("div",{staticClass:"info"},[t("h3",[n._v("\n\t\t\t\t\t"+n._s(n.customName(e))+"\n\t\t\t\t\t"),e.loading?t("span",{staticClass:"icon icon-loading-small-dark"}):e.active?t("span",{staticClass:"icon icon-checkmark-white"}):n._e()]),n._v(" "),t("p",{domProps:{innerHTML:n._s(n.customDescription(e.id))}}),n._v(" "),e.installationError?t("p",[t("strong",[n._v(n._s(n.t("core","App download or installation failed")))])]):e.isCompatible?e.canInstall?n._e():t("p",[t("strong",[n._v(n._s(n.t("core","Cannot install this app")))])]):t("p",[t("strong",[n._v(n._s(n.t("core","Cannot install this app because it is not compatible")))])])])]],2)})),n._v(" "),t("div",{staticClass:"dialog-row"},[n.showInstallButton?t("NcButton",{attrs:{type:"tertiary",role:"link",href:"defaultPageUrl"},on:{click:function(t){return n.goTo(n.defaultPageUrl)}}},[n._v("\n\t\t\t"+n._s(n.t("core","Skip"))+"\n\t\t")]):n._e(),n._v(" "),n.showInstallButton?t("NcButton",{attrs:{type:"primary"},on:{click:function(t){return t.stopPropagation(),t.preventDefault(),n.installApps.apply(null,arguments)}}},[n._v("\n\t\t\t"+n._s(n.t("core","Install recommended apps"))+"\n\t\t")]):n._e()],1)],2)}),[],!1,null,"e55e3a9c",null),Z=U.exports;e.nc=btoa((0,a.IH)()),r.ZP.mixin({methods:{t:i.Iu}}),(new(r.ZP.extend(Z))).$mount("#recommended-apps"),s.debug("recommended apps view rendered")},47041:function(n,t,e){var o=e(87537),a=e.n(o),i=e(23645),r=e.n(i)()(a());r.push([n.id,".dialog-row[data-v-e55e3a9c]{display:flex;justify-content:end;margin-top:8px}p.loading[data-v-e55e3a9c],p.loading-error[data-v-e55e3a9c]{height:100px}p[data-v-e55e3a9c]:last-child{margin-top:10px}.text-center[data-v-e55e3a9c]{text-align:center}.app[data-v-e55e3a9c]{display:flex;flex-direction:row}.app img[data-v-e55e3a9c]{height:50px;width:50px;filter:var(--background-invert-if-dark)}.app img[data-v-e55e3a9c],.app .info[data-v-e55e3a9c]{padding:12px}.app .info h3[data-v-e55e3a9c],.app .info p[data-v-e55e3a9c]{text-align:left}.app .info h3[data-v-e55e3a9c]{margin-top:0}.app .info h3>span.icon[data-v-e55e3a9c]{display:inline-block}","",{version:3,sources:["webpack://./core/src/components/setup/RecommendedApps.vue"],names:[],mappings:"AACA,6BACC,YAAA,CACA,mBAAA,CACA,cAAA,CAIA,4DAEC,YAAA,CAGD,8BACC,eAAA,CAIF,8BACC,iBAAA,CAGD,sBACC,YAAA,CACA,kBAAA,CAEA,0BACC,WAAA,CACA,UAAA,CACA,uCAAA,CAGD,sDACC,YAAA,CAIA,6DACC,eAAA,CAGD,+BACC,YAAA,CAGD,yCACC,oBAAA",sourcesContent:["\n.dialog-row {\n\tdisplay: flex;\n\tjustify-content: end;\n\tmargin-top: 8px;\n}\n\np {\n\t&.loading,\n\t&.loading-error {\n\t\theight: 100px;\n\t}\n\n\t&:last-child {\n\t\tmargin-top: 10px;\n\t}\n}\n\n.text-center {\n\ttext-align: center;\n}\n\n.app {\n\tdisplay: flex;\n\tflex-direction: row;\n\n\timg {\n\t\theight: 50px;\n\t\twidth: 50px;\n\t\tfilter: var(--background-invert-if-dark);\n\t}\n\n\timg, .info {\n\t\tpadding: 12px;\n\t}\n\n\t.info {\n\t\th3, p {\n\t\t\ttext-align: left;\n\t\t}\n\n\t\th3 {\n\t\t\tmargin-top: 0;\n\t\t}\n\n\t\th3 > span.icon {\n\t\t\tdisplay: inline-block;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),t.Z=r}},e={};function o(n){var a=e[n];if(void 0!==a)return a.exports;var i=e[n]={id:n,loaded:!1,exports:{}};return t[n].call(i.exports,i,i.exports,o),i.loaded=!0,i.exports}o.m=t,n=[],o.O=function(t,e,a,i){if(!e){var r=1/0;for(p=0;p<n.length;p++){e=n[p][0],a=n[p][1],i=n[p][2];for(var c=!0,s=0;s<e.length;s++)(!1&i||r>=i)&&Object.keys(o.O).every((function(n){return o.O[n](e[s])}))?e.splice(s--,1):(c=!1,i<r&&(r=i));if(c){n.splice(p--,1);var l=a();void 0!==l&&(t=l)}}return t}i=i||0;for(var p=n.length;p>0&&n[p-1][2]>i;p--)n[p]=n[p-1];n[p]=[e,a,i]},o.n=function(n){var t=n&&n.__esModule?function(){return n.default}:function(){return n};return o.d(t,{a:t}),t},o.d=function(n,t){for(var e in t)o.o(t,e)&&!o.o(n,e)&&Object.defineProperty(n,e,{enumerable:!0,get:t[e]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(n){if("object"==typeof window)return window}}(),o.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},o.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},o.nmd=function(n){return n.paths=[],n.children||(n.children=[]),n},o.j=1033,function(){o.b=document.baseURI||self.location.href;var n={1033:0};o.O.j=function(t){return 0===n[t]};var t=function(t,e){var a,i,r=e[0],c=e[1],s=e[2],l=0;if(r.some((function(t){return 0!==n[t]}))){for(a in c)o.o(c,a)&&(o.m[a]=c[a]);if(s)var p=s(o)}for(t&&t(e);l<r.length;l++)i=r[l],o.o(n,i)&&n[i]&&n[i][0](),n[i]=0;return o.O(p)},e=self.webpackChunknextcloud=self.webpackChunknextcloud||[];e.forEach(t.bind(null,0)),e.push=t.bind(null,e.push.bind(e))}(),o.nc=void 0;var a=o.O(void 0,[7874],(function(){return o(74151)}));a=o.O(a)}();
-//# sourceMappingURL=core-recommendedapps.js.map?v=23fda7df781ae16b57e1 \ No newline at end of file
+!function(){"use strict";var n,t={69295:function(n,t,e){var o,i=e(45994),a=e(31352),r=e(20144),s=e(17499),c=null===(o=(0,i.ts)())?(0,s.IY)().setApp("core").build():(0,s.IY)().setApp("core").setUid(o.uid).build(),p=e(4820),l=e(79753),d=e(79954),u=e(63560),f=e(10861),g=e.n(f);function m(n,t,e,o,i,a,r){try{var s=n[a](r),c=s.value}catch(n){return void e(n)}s.done?t(c):Promise.resolve(c).then(o,i)}var A={calendar:{description:(0,a.Iu)("core","Schedule work & meetings, synced with all your devices."),icon:(0,l.imagePath)("core","places/calendar.svg")},contacts:{description:(0,a.Iu)("core","Keep your colleagues and friends in one place without leaking their private info."),icon:(0,l.imagePath)("core","places/contacts.svg")},mail:{description:(0,a.Iu)("core","Simple email app nicely integrated with Files, Contacts and Calendar."),icon:(0,l.imagePath)("core","actions/mail.svg")},spreed:{description:(0,a.Iu)("core","Chatting, video calls, screensharing, online meetings and web conferencing – in your browser and with mobile apps."),icon:(0,l.imagePath)("core","apps/spreed.svg")},richdocuments:{name:"Nextcloud Office",description:(0,a.Iu)("core","Collaborative documents, spreadsheets and presentations, built on Collabora Online."),icon:(0,l.imagePath)("core","apps/richdocuments.svg")},notes:{description:(0,a.Iu)("core","Distraction free note taking app."),icon:(0,l.imagePath)("core","apps/notes.svg")},richdocumentscode:{hidden:!0}},h=Object.keys(A),v=(0,d.j)("core","defaultPageUrl"),b={name:"RecommendedApps",components:{NcButton:g()},data:function(){return{showInstallButton:!1,installingApps:!1,loadingApps:!0,loadingAppsError:!1,apps:[],defaultPageUrl:v}},computed:{recommendedApps:function(){return this.apps.filter((function(n){return h.includes(n.id)}))}},mounted:function(){var n,t=this;return(n=regeneratorRuntime.mark((function n(){var e,o;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,n.next=3,p.default.get((0,l.generateUrl)("settings/apps/list"));case 3:e=n.sent,o=e.data,c.info("".concat(o.apps.length," apps fetched")),t.apps=o.apps.map((function(n){return Object.assign(n,{loading:!1,installationError:!1})})),c.debug("".concat(t.recommendedApps.length," recommended apps found"),{apps:t.recommendedApps}),t.showInstallButton=!0,n.next=15;break;case 11:n.prev=11,n.t0=n.catch(0),c.error("could not fetch app list",{error:n.t0}),t.loadingAppsError=!0;case 15:return n.prev=15,t.loadingApps=!1,n.finish(15);case 18:case"end":return n.stop()}}),n,null,[[0,11,15,18]])})),function(){var t=this,e=arguments;return new Promise((function(o,i){var a=n.apply(t,e);function r(n){m(a,o,i,r,s,"next",n)}function s(n){m(a,o,i,r,s,"throw",n)}r(void 0)}))})()},methods:{installApps:function(){this.showInstallButton=!1,this.installingApps=!0;var n=(0,u.Z)(1),t=this.recommendedApps.filter((function(n){return!n.active&&n.isCompatible&&n.canInstall})).map((function(t){return n((function(){return c.info("installing ".concat(t.id)),t.loading=!0,p.default.post((0,l.generateUrl)("settings/apps/enable"),{appIds:[t.id],groups:[]}).catch((function(n){c.error("could not install ".concat(t.id),{error:n}),t.installationError=!0})).then((function(){c.info("installed ".concat(t.id)),t.loading=!1}))}))}));c.debug("installing ".concat(t.length," recommended apps")),Promise.all(t).then((function(){c.info("all recommended apps installed, redirecting …"),window.location=v})).catch((function(n){return c.error("could not install recommended apps",{error:n})}))},customIcon:function(n){return n in A&&A[n].icon?A[n].icon:(c.warn("no app icon for recommended app ".concat(n)),(0,l.imagePath)("core","places/default-app-icon.svg"))},customName:function(n){return n.id in A&&A[n.id].name||n.name},customDescription:function(n){return n in A?A[n].description:(c.warn("no app description for recommended app ".concat(n)),"")},isHidden:function(n){return n in A&&!!A[n].hidden},goTo:function(n){window.location.href=n}}},C=b,x=e(93379),w=e.n(x),_=e(7795),y=e.n(_),k=e(90569),I=e.n(k),P=e(3565),B=e.n(P),O=e(19216),j=e.n(O),D=e(44589),E=e.n(D),S=e(84430),T={};T.styleTagTransform=E(),T.setAttributes=B(),T.insert=I().bind(null,"head"),T.domAPI=y(),T.insertStyleElement=j(),w()(S.Z,T),S.Z&&S.Z.locals&&S.Z.locals;var U=(0,e(51900).Z)(C,(function(){var n=this,t=n._self._c;return t("div",{staticClass:"guest-box"},[t("h2",[n._v(n._s(n.t("core","Recommended apps")))]),n._v(" "),n.loadingApps?t("p",{staticClass:"loading text-center"},[n._v("\n\t\t"+n._s(n.t("core","Loading apps …"))+"\n\t")]):n.loadingAppsError?t("p",{staticClass:"loading-error text-center"},[n._v("\n\t\t"+n._s(n.t("core","Could not fetch list of apps from the App Store."))+"\n\t")]):n.installingApps?t("p",{staticClass:"text-center"},[n._v("\n\t\t"+n._s(n.t("core","Installing apps …"))+"\n\t")]):n._e(),n._v(" "),n._l(n.recommendedApps,(function(e){return t("div",{key:e.id,staticClass:"app"},[n.isHidden(e.id)?n._e():[t("img",{attrs:{src:n.customIcon(e.id),alt:""}}),n._v(" "),t("div",{staticClass:"info"},[t("h3",[n._v("\n\t\t\t\t\t"+n._s(n.customName(e))+"\n\t\t\t\t\t"),e.loading?t("span",{staticClass:"icon icon-loading-small-dark"}):e.active?t("span",{staticClass:"icon icon-checkmark-white"}):n._e()]),n._v(" "),t("p",{domProps:{innerHTML:n._s(n.customDescription(e.id))}}),n._v(" "),e.installationError?t("p",[t("strong",[n._v(n._s(n.t("core","App download or installation failed")))])]):e.isCompatible?e.canInstall?n._e():t("p",[t("strong",[n._v(n._s(n.t("core","Cannot install this app")))])]):t("p",[t("strong",[n._v(n._s(n.t("core","Cannot install this app because it is not compatible")))])])])]],2)})),n._v(" "),t("div",{staticClass:"dialog-row"},[n.showInstallButton?t("NcButton",{attrs:{type:"tertiary",role:"link",href:"defaultPageUrl"},on:{click:function(t){return n.goTo(n.defaultPageUrl)}}},[n._v("\n\t\t\t"+n._s(n.t("core","Skip"))+"\n\t\t")]):n._e(),n._v(" "),n.showInstallButton?t("NcButton",{attrs:{type:"primary"},on:{click:function(t){return t.stopPropagation(),t.preventDefault(),n.installApps.apply(null,arguments)}}},[n._v("\n\t\t\t"+n._s(n.t("core","Install recommended apps"))+"\n\t\t")]):n._e()],1)],2)}),[],!1,null,"b72b44fa",null),Z=U.exports;e.nc=btoa((0,i.IH)()),r.ZP.mixin({methods:{t:a.Iu}}),(new(r.ZP.extend(Z))).$mount("#recommended-apps"),c.debug("recommended apps view rendered")},84430:function(n,t,e){var o=e(87537),i=e.n(o),a=e(23645),r=e.n(a)()(i());r.push([n.id,".dialog-row[data-v-b72b44fa]{display:flex;justify-content:end;margin-top:8px}p.loading[data-v-b72b44fa],p.loading-error[data-v-b72b44fa]{height:100px}p[data-v-b72b44fa]:last-child{margin-top:10px}.text-center[data-v-b72b44fa]{text-align:center}.app[data-v-b72b44fa]{display:flex;flex-direction:row}.app img[data-v-b72b44fa]{height:50px;width:50px;filter:var(--background-invert-if-dark)}.app img[data-v-b72b44fa],.app .info[data-v-b72b44fa]{padding:12px}.app .info h3[data-v-b72b44fa],.app .info p[data-v-b72b44fa]{text-align:left}.app .info h3[data-v-b72b44fa]{margin-top:0}.app .info h3>span.icon[data-v-b72b44fa]{display:inline-block}","",{version:3,sources:["webpack://./core/src/components/setup/RecommendedApps.vue"],names:[],mappings:"AACA,6BACC,YAAA,CACA,mBAAA,CACA,cAAA,CAIA,4DAEC,YAAA,CAGD,8BACC,eAAA,CAIF,8BACC,iBAAA,CAGD,sBACC,YAAA,CACA,kBAAA,CAEA,0BACC,WAAA,CACA,UAAA,CACA,uCAAA,CAGD,sDACC,YAAA,CAIA,6DACC,eAAA,CAGD,+BACC,YAAA,CAGD,yCACC,oBAAA",sourcesContent:["\n.dialog-row {\n\tdisplay: flex;\n\tjustify-content: end;\n\tmargin-top: 8px;\n}\n\np {\n\t&.loading,\n\t&.loading-error {\n\t\theight: 100px;\n\t}\n\n\t&:last-child {\n\t\tmargin-top: 10px;\n\t}\n}\n\n.text-center {\n\ttext-align: center;\n}\n\n.app {\n\tdisplay: flex;\n\tflex-direction: row;\n\n\timg {\n\t\theight: 50px;\n\t\twidth: 50px;\n\t\tfilter: var(--background-invert-if-dark);\n\t}\n\n\timg, .info {\n\t\tpadding: 12px;\n\t}\n\n\t.info {\n\t\th3, p {\n\t\t\ttext-align: left;\n\t\t}\n\n\t\th3 {\n\t\t\tmargin-top: 0;\n\t\t}\n\n\t\th3 > span.icon {\n\t\t\tdisplay: inline-block;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),t.Z=r}},e={};function o(n){var i=e[n];if(void 0!==i)return i.exports;var a=e[n]={id:n,loaded:!1,exports:{}};return t[n].call(a.exports,a,a.exports,o),a.loaded=!0,a.exports}o.m=t,n=[],o.O=function(t,e,i,a){if(!e){var r=1/0;for(l=0;l<n.length;l++){e=n[l][0],i=n[l][1],a=n[l][2];for(var s=!0,c=0;c<e.length;c++)(!1&a||r>=a)&&Object.keys(o.O).every((function(n){return o.O[n](e[c])}))?e.splice(c--,1):(s=!1,a<r&&(r=a));if(s){n.splice(l--,1);var p=i();void 0!==p&&(t=p)}}return t}a=a||0;for(var l=n.length;l>0&&n[l-1][2]>a;l--)n[l]=n[l-1];n[l]=[e,i,a]},o.n=function(n){var t=n&&n.__esModule?function(){return n.default}:function(){return n};return o.d(t,{a:t}),t},o.d=function(n,t){for(var e in t)o.o(t,e)&&!o.o(n,e)&&Object.defineProperty(n,e,{enumerable:!0,get:t[e]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(n){if("object"==typeof window)return window}}(),o.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},o.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},o.nmd=function(n){return n.paths=[],n.children||(n.children=[]),n},o.j=1033,function(){o.b=document.baseURI||self.location.href;var n={1033:0};o.O.j=function(t){return 0===n[t]};var t=function(t,e){var i,a,r=e[0],s=e[1],c=e[2],p=0;if(r.some((function(t){return 0!==n[t]}))){for(i in s)o.o(s,i)&&(o.m[i]=s[i]);if(c)var l=c(o)}for(t&&t(e);p<r.length;p++)a=r[p],o.o(n,a)&&n[a]&&n[a][0](),n[a]=0;return o.O(l)},e=self.webpackChunknextcloud=self.webpackChunknextcloud||[];e.forEach(t.bind(null,0)),e.push=t.bind(null,e.push.bind(e))}(),o.nc=void 0;var i=o.O(void 0,[7874],(function(){return o(69295)}));i=o.O(i)}();
+//# sourceMappingURL=core-recommendedapps.js.map?v=38c471d9205b133c0e7d \ No newline at end of file
diff --git a/dist/core-recommendedapps.js.map b/dist/core-recommendedapps.js.map
index 9e9fb2b135a..e90905d754c 100644
--- a/dist/core-recommendedapps.js.map
+++ b/dist/core-recommendedapps.js.map
@@ -1 +1 @@
-{"version":3,"file":"core-recommendedapps.js?v=23fda7df781ae16b57e1","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/core/src/logger.js","webpack:///nextcloud/core/src/components/setup/RecommendedApps.vue","webpack:///nextcloud/core/src/components/setup/RecommendedApps.vue?vue&type=script&lang=js&","webpack://nextcloud/./core/src/components/setup/RecommendedApps.vue?6f20","webpack://nextcloud/./core/src/components/setup/RecommendedApps.vue?84e8","webpack://nextcloud/./core/src/components/setup/RecommendedApps.vue?5f06","webpack:///nextcloud/core/src/recommendedapps.js","webpack:///nextcloud/core/src/components/setup/RecommendedApps.vue?vue&type=style&index=0&id=e55e3a9c&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 Christoph Wurst <christoph@winzerhof-wurst.at>\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 { getCurrentUser } from '@nextcloud/auth'\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nconst getLogger = user => {\n\tif (user === null) {\n\t\treturn getLoggerBuilder()\n\t\t\t.setApp('core')\n\t\t\t.build()\n\t}\n\treturn getLoggerBuilder()\n\t\t.setApp('core')\n\t\t.setUid(user.uid)\n\t\t.build()\n}\n\nexport default getLogger(getCurrentUser())\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<div class=\"guest-box\">\n\t\t<h2>{{ t('core', 'Recommended apps') }}</h2>\n\t\t<p v-if=\"loadingApps\" class=\"loading text-center\">\n\t\t\t{{ t('core', 'Loading apps …') }}\n\t\t</p>\n\t\t<p v-else-if=\"loadingAppsError\" class=\"loading-error text-center\">\n\t\t\t{{ t('core', 'Could not fetch list of apps from the App Store.') }}\n\t\t</p>\n\t\t<p v-else-if=\"installingApps\" class=\"text-center\">\n\t\t\t{{ t('core', 'Installing apps …') }}\n\t\t</p>\n\n\t\t<div v-for=\"app in recommendedApps\" :key=\"app.id\" class=\"app\">\n\t\t\t<template v-if=\"!isHidden(app.id)\">\n\t\t\t\t<img :src=\"customIcon(app.id)\" alt=\"\">\n\t\t\t\t<div class=\"info\">\n\t\t\t\t\t<h3>\n\t\t\t\t\t\t{{ customName(app) }}\n\t\t\t\t\t\t<span v-if=\"app.loading\" class=\"icon icon-loading-small-dark\" />\n\t\t\t\t\t\t<span v-else-if=\"app.active\" class=\"icon icon-checkmark-white\" />\n\t\t\t\t\t</h3>\n\t\t\t\t\t<p v-html=\"customDescription(app.id)\" />\n\t\t\t\t\t<p v-if=\"app.installationError\">\n\t\t\t\t\t\t<strong>{{ t('core', 'App download or installation failed') }}</strong>\n\t\t\t\t\t</p>\n\t\t\t\t\t<p v-else-if=\"!app.isCompatible\">\n\t\t\t\t\t\t<strong>{{ t('core', 'Cannot install this app because it is not compatible') }}</strong>\n\t\t\t\t\t</p>\n\t\t\t\t\t<p v-else-if=\"!app.canInstall\">\n\t\t\t\t\t\t<strong>{{ t('core', 'Cannot install this app') }}</strong>\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t</div>\n\n\t\t<div class=\"dialog-row\">\n\t\t\t<NcButton v-if=\"showInstallButton\"\n\t\t\t\ttype=\"tertiary\"\n\t\t\t\trole=\"link\"\n\t\t\t\thref=\"defaultPageUrl\"\n\t\t\t\t@click=\"goTo(defaultPageUrl)\">\n\t\t\t\t{{ t('core', 'Skip') }}\n\t\t\t</NcButton>\n\n\t\t\t<NcButton v-if=\"showInstallButton\"\n\t\t\t\ttype=\"primary\"\n\t\t\t\t@click.stop.prevent=\"installApps\">\n\t\t\t\t{{ t('core', 'Install recommended apps') }}\n\t\t\t</NcButton>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { generateUrl, imagePath } from '@nextcloud/router'\nimport { loadState } from '@nextcloud/initial-state'\nimport pLimit from 'p-limit'\nimport { translate as t } from '@nextcloud/l10n'\n\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton'\n\nimport logger from '../../logger'\n\nconst recommended = {\n\tcalendar: {\n\t\tdescription: t('core', 'Schedule work & meetings, synced with all your devices.'),\n\t\ticon: imagePath('core', 'places/calendar.svg'),\n\t},\n\tcontacts: {\n\t\tdescription: t('core', 'Keep your colleagues and friends in one place without leaking their private info.'),\n\t\ticon: imagePath('core', 'places/contacts.svg'),\n\t},\n\tmail: {\n\t\tdescription: t('core', 'Simple email app nicely integrated with Files, Contacts and Calendar.'),\n\t\ticon: imagePath('core', 'actions/mail.svg'),\n\t},\n\tspreed: {\n\t\tdescription: t('core', 'Chatting, video calls, screensharing, online meetings and web conferencing – in your browser and with mobile apps.'),\n\t\ticon: imagePath('core', 'apps/spreed.svg'),\n\t},\n\trichdocuments: {\n\t\tname: 'Nextcloud Office',\n\t\tdescription: t('core', 'Collaborative documents, spreadsheets and presentations, built on Collabora Online.'),\n\t\ticon: imagePath('core', 'apps/richdocuments.svg'),\n\t},\n\trichdocumentscode: {\n\t\thidden: true,\n\t},\n}\nconst recommendedIds = Object.keys(recommended)\nconst defaultPageUrl = loadState('core', 'defaultPageUrl')\n\nexport default {\n\tname: 'RecommendedApps',\n\tcomponents: {\n\t\tNcButton,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowInstallButton: false,\n\t\t\tinstallingApps: false,\n\t\t\tloadingApps: true,\n\t\t\tloadingAppsError: false,\n\t\t\tapps: [],\n\t\t\tdefaultPageUrl,\n\t\t}\n\t},\n\tcomputed: {\n\t\trecommendedApps() {\n\t\t\treturn this.apps.filter(app => recommendedIds.includes(app.id))\n\t\t},\n\t},\n\tasync mounted() {\n\t\ttry {\n\t\t\tconst { data } = await axios.get(generateUrl('settings/apps/list'))\n\t\t\tlogger.info(`${data.apps.length} apps fetched`)\n\n\t\t\tthis.apps = data.apps.map(app => Object.assign(app, { loading: false, installationError: false }))\n\t\t\tlogger.debug(`${this.recommendedApps.length} recommended apps found`, { apps: this.recommendedApps })\n\n\t\t\tthis.showInstallButton = true\n\t\t} catch (error) {\n\t\t\tlogger.error('could not fetch app list', { error })\n\n\t\t\tthis.loadingAppsError = true\n\t\t} finally {\n\t\t\tthis.loadingApps = false\n\t\t}\n\t},\n\tmethods: {\n\t\tinstallApps() {\n\t\t\tthis.showInstallButton = false\n\t\t\tthis.installingApps = true\n\n\t\t\tconst limit = pLimit(1)\n\t\t\tconst installing = this.recommendedApps\n\t\t\t\t.filter(app => !app.active && app.isCompatible && app.canInstall)\n\t\t\t\t.map(app => limit(() => {\n\t\t\t\t\tlogger.info(`installing ${app.id}`)\n\t\t\t\t\tapp.loading = true\n\t\t\t\t\treturn axios.post(generateUrl('settings/apps/enable'), { appIds: [app.id], groups: [] })\n\t\t\t\t\t\t.catch(error => {\n\t\t\t\t\t\t\tlogger.error(`could not install ${app.id}`, { error })\n\t\t\t\t\t\t\tapp.installationError = true\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\tlogger.info(`installed ${app.id}`)\n\t\t\t\t\t\t\tapp.loading = false\n\t\t\t\t\t\t})\n\t\t\t\t}))\n\t\t\tlogger.debug(`installing ${installing.length} recommended apps`)\n\t\t\tPromise.all(installing)\n\t\t\t\t.then(() => {\n\t\t\t\t\tlogger.info('all recommended apps installed, redirecting …')\n\n\t\t\t\t\twindow.location = defaultPageUrl\n\t\t\t\t})\n\t\t\t\t.catch(error => logger.error('could not install recommended apps', { error }))\n\t\t},\n\t\tcustomIcon(appId) {\n\t\t\tif (!(appId in recommended) || !recommended[appId].icon) {\n\t\t\t\tlogger.warn(`no app icon for recommended app ${appId}`)\n\t\t\t\treturn imagePath('core', 'places/default-app-icon.svg')\n\t\t\t}\n\t\t\treturn recommended[appId].icon\n\t\t},\n\t\tcustomName(app) {\n\t\t\tif (!(app.id in recommended)) {\n\t\t\t\treturn app.name\n\t\t\t}\n\t\t\treturn recommended[app.id].name || app.name\n\t\t},\n\t\tcustomDescription(appId) {\n\t\t\tif (!(appId in recommended)) {\n\t\t\t\tlogger.warn(`no app description for recommended app ${appId}`)\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn recommended[appId].description\n\t\t},\n\t\tisHidden(appId) {\n\t\t\tif (!(appId in recommended)) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn !!recommended[appId].hidden\n\t\t},\n\t\tgoTo(href) {\n\t\t\twindow.location.href = href\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.dialog-row {\n\tdisplay: flex;\n\tjustify-content: end;\n\tmargin-top: 8px;\n}\n\np {\n\t&.loading,\n\t&.loading-error {\n\t\theight: 100px;\n\t}\n\n\t&:last-child {\n\t\tmargin-top: 10px;\n\t}\n}\n\n.text-center {\n\ttext-align: center;\n}\n\n.app {\n\tdisplay: flex;\n\tflex-direction: row;\n\n\timg {\n\t\theight: 50px;\n\t\twidth: 50px;\n\t\tfilter: var(--background-invert-if-dark);\n\t}\n\n\timg, .info {\n\t\tpadding: 12px;\n\t}\n\n\t.info {\n\t\th3, p {\n\t\t\ttext-align: left;\n\t\t}\n\n\t\th3 {\n\t\t\tmargin-top: 0;\n\t\t}\n\n\t\th3 > span.icon {\n\t\t\tdisplay: inline-block;\n\t\t}\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!./RecommendedApps.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!./RecommendedApps.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!./RecommendedApps.vue?vue&type=style&index=0&id=e55e3a9c&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!./RecommendedApps.vue?vue&type=style&index=0&id=e55e3a9c&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./RecommendedApps.vue?vue&type=template&id=e55e3a9c&scoped=true&\"\nimport script from \"./RecommendedApps.vue?vue&type=script&lang=js&\"\nexport * from \"./RecommendedApps.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RecommendedApps.vue?vue&type=style&index=0&id=e55e3a9c&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 \"e55e3a9c\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"guest-box\"},[_c('h2',[_vm._v(_vm._s(_vm.t('core', 'Recommended apps')))]),_vm._v(\" \"),(_vm.loadingApps)?_c('p',{staticClass:\"loading text-center\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('core', 'Loading apps …'))+\"\\n\\t\")]):(_vm.loadingAppsError)?_c('p',{staticClass:\"loading-error text-center\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('core', 'Could not fetch list of apps from the App Store.'))+\"\\n\\t\")]):(_vm.installingApps)?_c('p',{staticClass:\"text-center\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('core', 'Installing apps …'))+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),_vm._l((_vm.recommendedApps),function(app){return _c('div',{key:app.id,staticClass:\"app\"},[(!_vm.isHidden(app.id))?[_c('img',{attrs:{\"src\":_vm.customIcon(app.id),\"alt\":\"\"}}),_vm._v(\" \"),_c('div',{staticClass:\"info\"},[_c('h3',[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.customName(app))+\"\\n\\t\\t\\t\\t\\t\"),(app.loading)?_c('span',{staticClass:\"icon icon-loading-small-dark\"}):(app.active)?_c('span',{staticClass:\"icon icon-checkmark-white\"}):_vm._e()]),_vm._v(\" \"),_c('p',{domProps:{\"innerHTML\":_vm._s(_vm.customDescription(app.id))}}),_vm._v(\" \"),(app.installationError)?_c('p',[_c('strong',[_vm._v(_vm._s(_vm.t('core', 'App download or installation failed')))])]):(!app.isCompatible)?_c('p',[_c('strong',[_vm._v(_vm._s(_vm.t('core', 'Cannot install this app because it is not compatible')))])]):(!app.canInstall)?_c('p',[_c('strong',[_vm._v(_vm._s(_vm.t('core', 'Cannot install this app')))])]):_vm._e()])]:_vm._e()],2)}),_vm._v(\" \"),_c('div',{staticClass:\"dialog-row\"},[(_vm.showInstallButton)?_c('NcButton',{attrs:{\"type\":\"tertiary\",\"role\":\"link\",\"href\":\"defaultPageUrl\"},on:{\"click\":function($event){return _vm.goTo(_vm.defaultPageUrl)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Skip'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.showInstallButton)?_c('NcButton',{attrs:{\"type\":\"primary\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.installApps.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Install recommended apps'))+\"\\n\\t\\t\")]):_vm._e()],1)],2)\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 *\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 { getRequestToken } from '@nextcloud/auth'\nimport { translate as t } from '@nextcloud/l10n'\nimport Vue from 'vue'\n\nimport logger from './logger'\nimport RecommendedApps from './components/setup/RecommendedApps'\n\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(getRequestToken())\n\nVue.mixin({\n\tmethods: {\n\t\tt,\n\t},\n})\n\nconst View = Vue.extend(RecommendedApps)\nnew View().$mount('#recommended-apps')\n\nlogger.debug('recommended apps view rendered')\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, \".dialog-row[data-v-e55e3a9c]{display:flex;justify-content:end;margin-top:8px}p.loading[data-v-e55e3a9c],p.loading-error[data-v-e55e3a9c]{height:100px}p[data-v-e55e3a9c]:last-child{margin-top:10px}.text-center[data-v-e55e3a9c]{text-align:center}.app[data-v-e55e3a9c]{display:flex;flex-direction:row}.app img[data-v-e55e3a9c]{height:50px;width:50px;filter:var(--background-invert-if-dark)}.app img[data-v-e55e3a9c],.app .info[data-v-e55e3a9c]{padding:12px}.app .info h3[data-v-e55e3a9c],.app .info p[data-v-e55e3a9c]{text-align:left}.app .info h3[data-v-e55e3a9c]{margin-top:0}.app .info h3>span.icon[data-v-e55e3a9c]{display:inline-block}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/setup/RecommendedApps.vue\"],\"names\":[],\"mappings\":\"AACA,6BACC,YAAA,CACA,mBAAA,CACA,cAAA,CAIA,4DAEC,YAAA,CAGD,8BACC,eAAA,CAIF,8BACC,iBAAA,CAGD,sBACC,YAAA,CACA,kBAAA,CAEA,0BACC,WAAA,CACA,UAAA,CACA,uCAAA,CAGD,sDACC,YAAA,CAIA,6DACC,eAAA,CAGD,+BACC,YAAA,CAGD,yCACC,oBAAA\",\"sourcesContent\":[\"\\n.dialog-row {\\n\\tdisplay: flex;\\n\\tjustify-content: end;\\n\\tmargin-top: 8px;\\n}\\n\\np {\\n\\t&.loading,\\n\\t&.loading-error {\\n\\t\\theight: 100px;\\n\\t}\\n\\n\\t&:last-child {\\n\\t\\tmargin-top: 10px;\\n\\t}\\n}\\n\\n.text-center {\\n\\ttext-align: center;\\n}\\n\\n.app {\\n\\tdisplay: flex;\\n\\tflex-direction: row;\\n\\n\\timg {\\n\\t\\theight: 50px;\\n\\t\\twidth: 50px;\\n\\t\\tfilter: var(--background-invert-if-dark);\\n\\t}\\n\\n\\timg, .info {\\n\\t\\tpadding: 12px;\\n\\t}\\n\\n\\t.info {\\n\\t\\th3, p {\\n\\t\\t\\ttext-align: left;\\n\\t\\t}\\n\\n\\t\\th3 {\\n\\t\\t\\tmargin-top: 0;\\n\\t\\t}\\n\\n\\t\\th3 > span.icon {\\n\\t\\t\\tdisplay: inline-block;\\n\\t\\t}\\n\\t}\\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 = 1033;","__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\t1033: 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__(74151); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","user","getCurrentUser","getLoggerBuilder","setApp","build","setUid","uid","calendar","description","icon","contacts","mail","spreed","richdocuments","name","richdocumentscode","hidden","components","NcButton","data","showInstallButton","installingApps","loadingApps","loadingAppsError","apps","defaultPageUrl","computed","recommendedApps","mounted","axios","logger","loading","installationError","error","methods","installApps","filter","map","app","appIds","groups","catch","then","Promise","window","customIcon","customName","customDescription","isHidden","goTo","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","component","_vm","this","_c","_self","staticClass","_v","_s","t","_e","_l","key","id","attrs","active","domProps","isCompatible","canInstall","on","$event","stopPropagation","preventDefault","apply","arguments","__webpack_nonce__","btoa","getRequestToken","Vue","RecommendedApps","$mount","debug","___CSS_LOADER_EXPORT___","push","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","length","fulfilled","j","Object","keys","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","e","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","value","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":"core-recommendedapps.js?v=38c471d9205b133c0e7d","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/core/src/logger.js","webpack:///nextcloud/core/src/components/setup/RecommendedApps.vue","webpack:///nextcloud/core/src/components/setup/RecommendedApps.vue?vue&type=script&lang=js&","webpack://nextcloud/./core/src/components/setup/RecommendedApps.vue?5529","webpack://nextcloud/./core/src/components/setup/RecommendedApps.vue?84e8","webpack://nextcloud/./core/src/components/setup/RecommendedApps.vue?5f06","webpack:///nextcloud/core/src/recommendedapps.js","webpack:///nextcloud/core/src/components/setup/RecommendedApps.vue?vue&type=style&index=0&id=b72b44fa&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 Christoph Wurst <christoph@winzerhof-wurst.at>\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 { getCurrentUser } from '@nextcloud/auth'\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nconst getLogger = user => {\n\tif (user === null) {\n\t\treturn getLoggerBuilder()\n\t\t\t.setApp('core')\n\t\t\t.build()\n\t}\n\treturn getLoggerBuilder()\n\t\t.setApp('core')\n\t\t.setUid(user.uid)\n\t\t.build()\n}\n\nexport default getLogger(getCurrentUser())\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<div class=\"guest-box\">\n\t\t<h2>{{ t('core', 'Recommended apps') }}</h2>\n\t\t<p v-if=\"loadingApps\" class=\"loading text-center\">\n\t\t\t{{ t('core', 'Loading apps …') }}\n\t\t</p>\n\t\t<p v-else-if=\"loadingAppsError\" class=\"loading-error text-center\">\n\t\t\t{{ t('core', 'Could not fetch list of apps from the App Store.') }}\n\t\t</p>\n\t\t<p v-else-if=\"installingApps\" class=\"text-center\">\n\t\t\t{{ t('core', 'Installing apps …') }}\n\t\t</p>\n\n\t\t<div v-for=\"app in recommendedApps\" :key=\"app.id\" class=\"app\">\n\t\t\t<template v-if=\"!isHidden(app.id)\">\n\t\t\t\t<img :src=\"customIcon(app.id)\" alt=\"\">\n\t\t\t\t<div class=\"info\">\n\t\t\t\t\t<h3>\n\t\t\t\t\t\t{{ customName(app) }}\n\t\t\t\t\t\t<span v-if=\"app.loading\" class=\"icon icon-loading-small-dark\" />\n\t\t\t\t\t\t<span v-else-if=\"app.active\" class=\"icon icon-checkmark-white\" />\n\t\t\t\t\t</h3>\n\t\t\t\t\t<p v-html=\"customDescription(app.id)\" />\n\t\t\t\t\t<p v-if=\"app.installationError\">\n\t\t\t\t\t\t<strong>{{ t('core', 'App download or installation failed') }}</strong>\n\t\t\t\t\t</p>\n\t\t\t\t\t<p v-else-if=\"!app.isCompatible\">\n\t\t\t\t\t\t<strong>{{ t('core', 'Cannot install this app because it is not compatible') }}</strong>\n\t\t\t\t\t</p>\n\t\t\t\t\t<p v-else-if=\"!app.canInstall\">\n\t\t\t\t\t\t<strong>{{ t('core', 'Cannot install this app') }}</strong>\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t</div>\n\n\t\t<div class=\"dialog-row\">\n\t\t\t<NcButton v-if=\"showInstallButton\"\n\t\t\t\ttype=\"tertiary\"\n\t\t\t\trole=\"link\"\n\t\t\t\thref=\"defaultPageUrl\"\n\t\t\t\t@click=\"goTo(defaultPageUrl)\">\n\t\t\t\t{{ t('core', 'Skip') }}\n\t\t\t</NcButton>\n\n\t\t\t<NcButton v-if=\"showInstallButton\"\n\t\t\t\ttype=\"primary\"\n\t\t\t\t@click.stop.prevent=\"installApps\">\n\t\t\t\t{{ t('core', 'Install recommended apps') }}\n\t\t\t</NcButton>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { generateUrl, imagePath } from '@nextcloud/router'\nimport { loadState } from '@nextcloud/initial-state'\nimport pLimit from 'p-limit'\nimport { translate as t } from '@nextcloud/l10n'\n\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton'\n\nimport logger from '../../logger'\n\nconst recommended = {\n\tcalendar: {\n\t\tdescription: t('core', 'Schedule work & meetings, synced with all your devices.'),\n\t\ticon: imagePath('core', 'places/calendar.svg'),\n\t},\n\tcontacts: {\n\t\tdescription: t('core', 'Keep your colleagues and friends in one place without leaking their private info.'),\n\t\ticon: imagePath('core', 'places/contacts.svg'),\n\t},\n\tmail: {\n\t\tdescription: t('core', 'Simple email app nicely integrated with Files, Contacts and Calendar.'),\n\t\ticon: imagePath('core', 'actions/mail.svg'),\n\t},\n\tspreed: {\n\t\tdescription: t('core', 'Chatting, video calls, screensharing, online meetings and web conferencing – in your browser and with mobile apps.'),\n\t\ticon: imagePath('core', 'apps/spreed.svg'),\n\t},\n\trichdocuments: {\n\t\tname: 'Nextcloud Office',\n\t\tdescription: t('core', 'Collaborative documents, spreadsheets and presentations, built on Collabora Online.'),\n\t\ticon: imagePath('core', 'apps/richdocuments.svg'),\n\t},\n\tnotes: {\n\t\tdescription: t('core', 'Distraction free note taking app.'),\n\t\ticon: imagePath('core', 'apps/notes.svg'),\n\t},\n\trichdocumentscode: {\n\t\thidden: true,\n\t},\n}\nconst recommendedIds = Object.keys(recommended)\nconst defaultPageUrl = loadState('core', 'defaultPageUrl')\n\nexport default {\n\tname: 'RecommendedApps',\n\tcomponents: {\n\t\tNcButton,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowInstallButton: false,\n\t\t\tinstallingApps: false,\n\t\t\tloadingApps: true,\n\t\t\tloadingAppsError: false,\n\t\t\tapps: [],\n\t\t\tdefaultPageUrl,\n\t\t}\n\t},\n\tcomputed: {\n\t\trecommendedApps() {\n\t\t\treturn this.apps.filter(app => recommendedIds.includes(app.id))\n\t\t},\n\t},\n\tasync mounted() {\n\t\ttry {\n\t\t\tconst { data } = await axios.get(generateUrl('settings/apps/list'))\n\t\t\tlogger.info(`${data.apps.length} apps fetched`)\n\n\t\t\tthis.apps = data.apps.map(app => Object.assign(app, { loading: false, installationError: false }))\n\t\t\tlogger.debug(`${this.recommendedApps.length} recommended apps found`, { apps: this.recommendedApps })\n\n\t\t\tthis.showInstallButton = true\n\t\t} catch (error) {\n\t\t\tlogger.error('could not fetch app list', { error })\n\n\t\t\tthis.loadingAppsError = true\n\t\t} finally {\n\t\t\tthis.loadingApps = false\n\t\t}\n\t},\n\tmethods: {\n\t\tinstallApps() {\n\t\t\tthis.showInstallButton = false\n\t\t\tthis.installingApps = true\n\n\t\t\tconst limit = pLimit(1)\n\t\t\tconst installing = this.recommendedApps\n\t\t\t\t.filter(app => !app.active && app.isCompatible && app.canInstall)\n\t\t\t\t.map(app => limit(() => {\n\t\t\t\t\tlogger.info(`installing ${app.id}`)\n\t\t\t\t\tapp.loading = true\n\t\t\t\t\treturn axios.post(generateUrl('settings/apps/enable'), { appIds: [app.id], groups: [] })\n\t\t\t\t\t\t.catch(error => {\n\t\t\t\t\t\t\tlogger.error(`could not install ${app.id}`, { error })\n\t\t\t\t\t\t\tapp.installationError = true\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\tlogger.info(`installed ${app.id}`)\n\t\t\t\t\t\t\tapp.loading = false\n\t\t\t\t\t\t})\n\t\t\t\t}))\n\t\t\tlogger.debug(`installing ${installing.length} recommended apps`)\n\t\t\tPromise.all(installing)\n\t\t\t\t.then(() => {\n\t\t\t\t\tlogger.info('all recommended apps installed, redirecting …')\n\n\t\t\t\t\twindow.location = defaultPageUrl\n\t\t\t\t})\n\t\t\t\t.catch(error => logger.error('could not install recommended apps', { error }))\n\t\t},\n\t\tcustomIcon(appId) {\n\t\t\tif (!(appId in recommended) || !recommended[appId].icon) {\n\t\t\t\tlogger.warn(`no app icon for recommended app ${appId}`)\n\t\t\t\treturn imagePath('core', 'places/default-app-icon.svg')\n\t\t\t}\n\t\t\treturn recommended[appId].icon\n\t\t},\n\t\tcustomName(app) {\n\t\t\tif (!(app.id in recommended)) {\n\t\t\t\treturn app.name\n\t\t\t}\n\t\t\treturn recommended[app.id].name || app.name\n\t\t},\n\t\tcustomDescription(appId) {\n\t\t\tif (!(appId in recommended)) {\n\t\t\t\tlogger.warn(`no app description for recommended app ${appId}`)\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn recommended[appId].description\n\t\t},\n\t\tisHidden(appId) {\n\t\t\tif (!(appId in recommended)) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn !!recommended[appId].hidden\n\t\t},\n\t\tgoTo(href) {\n\t\t\twindow.location.href = href\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.dialog-row {\n\tdisplay: flex;\n\tjustify-content: end;\n\tmargin-top: 8px;\n}\n\np {\n\t&.loading,\n\t&.loading-error {\n\t\theight: 100px;\n\t}\n\n\t&:last-child {\n\t\tmargin-top: 10px;\n\t}\n}\n\n.text-center {\n\ttext-align: center;\n}\n\n.app {\n\tdisplay: flex;\n\tflex-direction: row;\n\n\timg {\n\t\theight: 50px;\n\t\twidth: 50px;\n\t\tfilter: var(--background-invert-if-dark);\n\t}\n\n\timg, .info {\n\t\tpadding: 12px;\n\t}\n\n\t.info {\n\t\th3, p {\n\t\t\ttext-align: left;\n\t\t}\n\n\t\th3 {\n\t\t\tmargin-top: 0;\n\t\t}\n\n\t\th3 > span.icon {\n\t\t\tdisplay: inline-block;\n\t\t}\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!./RecommendedApps.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!./RecommendedApps.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!./RecommendedApps.vue?vue&type=style&index=0&id=b72b44fa&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!./RecommendedApps.vue?vue&type=style&index=0&id=b72b44fa&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./RecommendedApps.vue?vue&type=template&id=b72b44fa&scoped=true&\"\nimport script from \"./RecommendedApps.vue?vue&type=script&lang=js&\"\nexport * from \"./RecommendedApps.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RecommendedApps.vue?vue&type=style&index=0&id=b72b44fa&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 \"b72b44fa\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"guest-box\"},[_c('h2',[_vm._v(_vm._s(_vm.t('core', 'Recommended apps')))]),_vm._v(\" \"),(_vm.loadingApps)?_c('p',{staticClass:\"loading text-center\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('core', 'Loading apps …'))+\"\\n\\t\")]):(_vm.loadingAppsError)?_c('p',{staticClass:\"loading-error text-center\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('core', 'Could not fetch list of apps from the App Store.'))+\"\\n\\t\")]):(_vm.installingApps)?_c('p',{staticClass:\"text-center\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('core', 'Installing apps …'))+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),_vm._l((_vm.recommendedApps),function(app){return _c('div',{key:app.id,staticClass:\"app\"},[(!_vm.isHidden(app.id))?[_c('img',{attrs:{\"src\":_vm.customIcon(app.id),\"alt\":\"\"}}),_vm._v(\" \"),_c('div',{staticClass:\"info\"},[_c('h3',[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.customName(app))+\"\\n\\t\\t\\t\\t\\t\"),(app.loading)?_c('span',{staticClass:\"icon icon-loading-small-dark\"}):(app.active)?_c('span',{staticClass:\"icon icon-checkmark-white\"}):_vm._e()]),_vm._v(\" \"),_c('p',{domProps:{\"innerHTML\":_vm._s(_vm.customDescription(app.id))}}),_vm._v(\" \"),(app.installationError)?_c('p',[_c('strong',[_vm._v(_vm._s(_vm.t('core', 'App download or installation failed')))])]):(!app.isCompatible)?_c('p',[_c('strong',[_vm._v(_vm._s(_vm.t('core', 'Cannot install this app because it is not compatible')))])]):(!app.canInstall)?_c('p',[_c('strong',[_vm._v(_vm._s(_vm.t('core', 'Cannot install this app')))])]):_vm._e()])]:_vm._e()],2)}),_vm._v(\" \"),_c('div',{staticClass:\"dialog-row\"},[(_vm.showInstallButton)?_c('NcButton',{attrs:{\"type\":\"tertiary\",\"role\":\"link\",\"href\":\"defaultPageUrl\"},on:{\"click\":function($event){return _vm.goTo(_vm.defaultPageUrl)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Skip'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.showInstallButton)?_c('NcButton',{attrs:{\"type\":\"primary\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.installApps.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Install recommended apps'))+\"\\n\\t\\t\")]):_vm._e()],1)],2)\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 *\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 { getRequestToken } from '@nextcloud/auth'\nimport { translate as t } from '@nextcloud/l10n'\nimport Vue from 'vue'\n\nimport logger from './logger'\nimport RecommendedApps from './components/setup/RecommendedApps'\n\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(getRequestToken())\n\nVue.mixin({\n\tmethods: {\n\t\tt,\n\t},\n})\n\nconst View = Vue.extend(RecommendedApps)\nnew View().$mount('#recommended-apps')\n\nlogger.debug('recommended apps view rendered')\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, \".dialog-row[data-v-b72b44fa]{display:flex;justify-content:end;margin-top:8px}p.loading[data-v-b72b44fa],p.loading-error[data-v-b72b44fa]{height:100px}p[data-v-b72b44fa]:last-child{margin-top:10px}.text-center[data-v-b72b44fa]{text-align:center}.app[data-v-b72b44fa]{display:flex;flex-direction:row}.app img[data-v-b72b44fa]{height:50px;width:50px;filter:var(--background-invert-if-dark)}.app img[data-v-b72b44fa],.app .info[data-v-b72b44fa]{padding:12px}.app .info h3[data-v-b72b44fa],.app .info p[data-v-b72b44fa]{text-align:left}.app .info h3[data-v-b72b44fa]{margin-top:0}.app .info h3>span.icon[data-v-b72b44fa]{display:inline-block}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/setup/RecommendedApps.vue\"],\"names\":[],\"mappings\":\"AACA,6BACC,YAAA,CACA,mBAAA,CACA,cAAA,CAIA,4DAEC,YAAA,CAGD,8BACC,eAAA,CAIF,8BACC,iBAAA,CAGD,sBACC,YAAA,CACA,kBAAA,CAEA,0BACC,WAAA,CACA,UAAA,CACA,uCAAA,CAGD,sDACC,YAAA,CAIA,6DACC,eAAA,CAGD,+BACC,YAAA,CAGD,yCACC,oBAAA\",\"sourcesContent\":[\"\\n.dialog-row {\\n\\tdisplay: flex;\\n\\tjustify-content: end;\\n\\tmargin-top: 8px;\\n}\\n\\np {\\n\\t&.loading,\\n\\t&.loading-error {\\n\\t\\theight: 100px;\\n\\t}\\n\\n\\t&:last-child {\\n\\t\\tmargin-top: 10px;\\n\\t}\\n}\\n\\n.text-center {\\n\\ttext-align: center;\\n}\\n\\n.app {\\n\\tdisplay: flex;\\n\\tflex-direction: row;\\n\\n\\timg {\\n\\t\\theight: 50px;\\n\\t\\twidth: 50px;\\n\\t\\tfilter: var(--background-invert-if-dark);\\n\\t}\\n\\n\\timg, .info {\\n\\t\\tpadding: 12px;\\n\\t}\\n\\n\\t.info {\\n\\t\\th3, p {\\n\\t\\t\\ttext-align: left;\\n\\t\\t}\\n\\n\\t\\th3 {\\n\\t\\t\\tmargin-top: 0;\\n\\t\\t}\\n\\n\\t\\th3 > span.icon {\\n\\t\\t\\tdisplay: inline-block;\\n\\t\\t}\\n\\t}\\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 = 1033;","__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\t1033: 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__(69295); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","user","getCurrentUser","getLoggerBuilder","setApp","build","setUid","uid","calendar","description","icon","contacts","mail","spreed","richdocuments","name","notes","richdocumentscode","hidden","components","NcButton","data","showInstallButton","installingApps","loadingApps","loadingAppsError","apps","defaultPageUrl","computed","recommendedApps","mounted","axios","logger","loading","installationError","error","methods","installApps","filter","map","app","appIds","groups","catch","then","Promise","window","customIcon","customName","customDescription","isHidden","goTo","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","component","_vm","this","_c","_self","staticClass","_v","_s","t","_e","_l","key","id","attrs","active","domProps","isCompatible","canInstall","on","$event","stopPropagation","preventDefault","apply","arguments","__webpack_nonce__","btoa","getRequestToken","Vue","RecommendedApps","$mount","debug","___CSS_LOADER_EXPORT___","push","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","length","fulfilled","j","Object","keys","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","e","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","value","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