aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Molakvoæ <skjnldsv@users.noreply.github.com>2024-06-04 15:22:25 +0200
committernextcloud-command <nextcloud-command@users.noreply.github.com>2024-06-04 13:29:02 +0000
commit737084ea3e42103d27359240444278bdd7b94903 (patch)
treec4132f38b6fc996ee319816f124eee29d21afab1
parentfa85d065e669aefc4fd797d5a3bd813f08dd15fc (diff)
downloadnextcloud-server-737084ea3e42103d27359240444278bdd7b94903.tar.gz
nextcloud-server-737084ea3e42103d27359240444278bdd7b94903.zip
fix(core): remove unwanted unsupported browser import
Signed-off-by: John Molakvoæ <skjnldsv@users.noreply.github.com> Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
-rw-r--r--core/src/views/UnsupportedBrowser.vue2
-rw-r--r--dist/core-unsupported-browser.js4
-rw-r--r--dist/core-unsupported-browser.js.map2
3 files changed, 3 insertions, 5 deletions
diff --git a/core/src/views/UnsupportedBrowser.vue b/core/src/views/UnsupportedBrowser.vue
index b27d85e4326..02045856473 100644
--- a/core/src/views/UnsupportedBrowser.vue
+++ b/core/src/views/UnsupportedBrowser.vue
@@ -48,8 +48,6 @@
</template>
<script>
-// eslint-disable-next-line n/no-extraneous-import
-import { agents } from 'caniuse-lite/dist/unpacker/agents.js'
import { generateUrl, getRootUrl } from '@nextcloud/router'
import { translate as t, translatePlural as n } from '@nextcloud/l10n'
diff --git a/dist/core-unsupported-browser.js b/dist/core-unsupported-browser.js
index 3ca6f98f3bf..a68d3124e67 100644
--- a/dist/core-unsupported-browser.js
+++ b/dist/core-unsupported-browser.js
@@ -1,3 +1,3 @@
/*! For license information please see core-unsupported-browser.js.LICENSE.txt */
-(()=>{var t,e,n,r={23827:(t,e,n)=>{"use strict";var r=n(79753),o=n(20144),s=n(49232),i=n(31e3),a=n.n(i),u=n(77727),c=n.n(u);(0,s.z$)({allowHigherVersions:!0,browsers:c()});const l=a()(c()),p=(0,n(62556).getBuilder)("core").clearOnLogout().persist().build();var d=n(77958),f=n(17499);const b=null===(A=(0,d.ts)())?(0,f.IY)().setApp("core").build():(0,f.IY)().setApp("core").setUid(A.uid).build();var A;n(23085).Buffer;const v="unsupported-browser-ignore";(0,r.generateUrl)("/unsupported"),p.getItem(v),n(95459);var w=n(31352),g=n(10861),m=n.n(g),h=n(93455),_=n.n(h),y=n(97859),C=n(23085).Buffer;b.debug("Supported browsers",{supportedBrowsers:l});const x={name:"UnsupportedBrowser",components:{Web:y.default,NcButton:m(),NcEmptyContent:_()},data:()=>({agents:{}}),computed:{isMobile:()=>/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),filteredSupportedBrowsers(){return l.filter((t=>!!t&&(this.isMobile?this.isMobileBrowser(t):!this.isMobileBrowser(t))))},formattedBrowsersList(){const t={};return this.filteredSupportedBrowsers.forEach((e=>{const[n,r]=e.split(" ");(!t[n]||t[n]<parseFloat(r,10))&&(t[n]=parseFloat(r,10))})),Object.keys(t).map((e=>{var n,r;if(null===(n=this.agents[e])||void 0===n||!n.browser)return null;const o=t[e],s=null===(r=this.agents[e])||void 0===r?void 0:r.browser;return this.t("core","{name} version {version} and above",{name:s,version:o})})).filter((t=>null!==t))}},async beforeMount(){const{agents:t}=await n.e(7874).then(n.t.bind(n,90614,19));this.agents=t},methods:{t:w.Iu,n:w.uN,forceBrowsing(){p.setItem(v,!0);const t=new URLSearchParams(window.location.search);if(t.has("redirect_url")){let e=C.from(t.get("redirect_url"),"base64").toString()||"/";if(e=e.replace("index.php","").replace((0,r.getRootUrl)(),"").replace(/\/\//g,"/"),e.startsWith("/"))return void(window.location=(0,r.generateUrl)(e))}window.location=(0,r.generateUrl)("/")},isMobileBrowser:t=>(t=t.toLowerCase()).includes("and_")||t.includes("android")||t.includes("ios_")||t.includes("mobile")||t.includes("_mob")||t.includes("samsung")}};var B=n(93379),O=n.n(B),j=n(7795),k=n.n(j),S=n(90569),P=n.n(S),M=n(3565),U=n.n(M),I=n(19216),T=n.n(I),E=n(44589),R=n.n(E),$=n(89167),N={};N.styleTagTransform=R(),N.setAttributes=U(),N.insert=P().bind(null,"head"),N.domAPI=k(),N.insertStyleElement=T(),O()($.Z,N),$.Z&&$.Z.locals&&$.Z.locals;const Z=(0,n(51900).Z)(x,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"content-unsupported-browser guest-box"},[e("NcEmptyContent",{scopedSlots:t._u([{key:"icon",fn:function(){return[e("Web")]},proxy:!0},{key:"action",fn:function(){return[e("div",[e("h2",[t._v("\n\t\t\t\t\t"+t._s(t.t("core","Your browser is not supported. Please upgrade to a newer version or a supported one."))+"\n\t\t\t\t")]),t._v(" "),e("NcButton",{staticClass:"content-unsupported-browser__continue",attrs:{type:"primary"},on:{click:t.forceBrowsing}},[t._v("\n\t\t\t\t\t"+t._s(t.t("core","Continue with this unsupported browser"))+"\n\t\t\t\t")])],1),t._v(" "),e("ul",{staticClass:"content-unsupported-browser__list"},[e("h3",[t._v(t._s(t.t("core","Supported versions")))]),t._v(" "),t._l(t.formattedBrowsersList,(function(n){return e("li",{key:n},[t._v("\n\t\t\t\t\t"+t._s(n)+"\n\t\t\t\t")])}))],2)]},proxy:!0}])},[t._v("\n\t\t"+t._s(t.t("core","This browser is not supported"))+"\n\t\t")])],1)}),[],!1,null,"7827e390",null).exports;"true"===p.getItem(v)&&(window.location=(0,r.generateUrl)("/")),new o.default({el:"#unsupported-browser",name:"UnsupportedBrowserRoot",render:t=>t(Z)})},89167:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(87537),o=n.n(r),s=n(23645),i=n.n(s)()(o());i.push([t.id,".content-unsupported-browser[data-v-7827e390]{display:flex;justify-content:center;width:400px;max-width:calc(90vw - 60px);margin:auto;padding:30px}.content-unsupported-browser .empty-content[data-v-7827e390]{margin:0}.content-unsupported-browser .empty-content[data-v-7827e390] .empty-content__icon{opacity:1}.content-unsupported-browser__continue[data-v-7827e390]{display:block;margin:30px auto}.content-unsupported-browser__list[data-v-7827e390]{margin-top:60px;margin-bottom:30px}.content-unsupported-browser__list li[data-v-7827e390]{text-align:left}","",{version:3,sources:["webpack://./core/src/views/UnsupportedBrowser.vue"],names:[],mappings:"AAGA,8CACC,YAAA,CACA,sBAAA,CACA,WAAA,CACA,2BAAA,CACA,WAAA,CACA,YARS,CAUT,6DACC,QAAA,CACA,kFACC,SAAA,CAIF,wDACC,aAAA,CACA,gBAAA,CAGD,oDACC,eAAA,CACA,kBAxBQ,CAyBR,uDACC,eAAA",sourcesContent:["\n$spacing: 30px;\n\n.content-unsupported-browser {\n\tdisplay: flex;\n\tjustify-content: center;\n\twidth: 400px;\n\tmax-width: calc(90vw - 2 * $spacing);\n\tmargin: auto;\n\tpadding: $spacing;\n\n\t.empty-content {\n\t\tmargin: 0;\n\t\t&::v-deep .empty-content__icon {\n\t\t\topacity: 1;\n\t\t}\n\t}\n\n\t&__continue {\n\t\tdisplay: block;\n\t\tmargin: $spacing auto;\n\t}\n\n\t&__list {\n\t\tmargin-top: 2 * $spacing;\n\t\tmargin-bottom: $spacing;\n\t\tli {\n\t\t\ttext-align: left;\n\t\t}\n\t}\n}\n\n"],sourceRoot:""}]);const a=i},72950:()=>{}},o={};function s(t){var e=o[t];if(void 0!==e)return e.exports;var n=o[t]={id:t,loaded:!1,exports:{}};return r[t].call(n.exports,n,n.exports,s),n.loaded=!0,n.exports}s.m=r,t=[],s.O=(e,n,r,o)=>{if(!n){var i=1/0;for(l=0;l<t.length;l++){n=t[l][0],r=t[l][1],o=t[l][2];for(var a=!0,u=0;u<n.length;u++)(!1&o||i>=o)&&Object.keys(s.O).every((t=>s.O[t](n[u])))?n.splice(u--,1):(a=!1,o<i&&(i=o));if(a){t.splice(l--,1);var c=r();void 0!==c&&(e=c)}}return e}o=o||0;for(var l=t.length;l>0&&t[l-1][2]>o;l--)t[l]=t[l-1];t[l]=[n,r,o]},s.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return s.d(e,{a:e}),e},n=Object.getPrototypeOf?t=>Object.getPrototypeOf(t):t=>t.__proto__,s.t=function(t,r){if(1&r&&(t=this(t)),8&r)return t;if("object"==typeof t&&t){if(4&r&&t.__esModule)return t;if(16&r&&"function"==typeof t.then)return t}var o=Object.create(null);s.r(o);var i={};e=e||[null,n({}),n([]),n(n)];for(var a=2&r&&t;"object"==typeof a&&!~e.indexOf(a);a=n(a))Object.getOwnPropertyNames(a).forEach((e=>i[e]=()=>t[e]));return i.default=()=>t,s.d(o,i),o},s.d=(t,e)=>{for(var n in e)s.o(e,n)&&!s.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},s.e=()=>Promise.resolve(),s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),s.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),s.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},s.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),s.j=9315,(()=>{s.b=document.baseURI||self.location.href;var t={9315:0};s.O.j=e=>0===t[e];var e=(e,n)=>{var r,o,i=n[0],a=n[1],u=n[2],c=0;if(i.some((e=>0!==t[e]))){for(r in a)s.o(a,r)&&(s.m[r]=a[r]);if(u)var l=u(s)}for(e&&e(n);c<i.length;c++)o=i[c],s.o(t,o)&&t[o]&&t[o][0](),t[o]=0;return s.O(l)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))})(),s.nc=void 0;var i=s.O(void 0,[7874],(()=>s(23827)));i=s.O(i)})();
-//# sourceMappingURL=core-unsupported-browser.js.map?v=22d22a91bbb5ff86410b \ No newline at end of file
+(()=>{var t,e,n,r={43879:(t,e,n)=>{"use strict";var r=n(79753),o=n(20144),s=n(49232),i=n(31e3),a=n.n(i),c=n(77727),u=n.n(c);(0,s.z$)({allowHigherVersions:!0,browsers:u()});const l=a()(u()),p=(0,n(62556).getBuilder)("core").clearOnLogout().persist().build();var d=n(77958),f=n(17499);const b=null===(A=(0,d.ts)())?(0,f.IY)().setApp("core").build():(0,f.IY)().setApp("core").setUid(A.uid).build();var A;n(23085).Buffer;const v="unsupported-browser-ignore";(0,r.generateUrl)("/unsupported"),p.getItem(v);var w=n(31352),g=n(10861),m=n.n(g),h=n(93455),_=n.n(h),y=n(97859),C=n(23085).Buffer;b.debug("Supported browsers",{supportedBrowsers:l});const x={name:"UnsupportedBrowser",components:{Web:y.default,NcButton:m(),NcEmptyContent:_()},data:()=>({agents:{}}),computed:{isMobile:()=>/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),filteredSupportedBrowsers(){return l.filter((t=>!!t&&(this.isMobile?this.isMobileBrowser(t):!this.isMobileBrowser(t))))},formattedBrowsersList(){const t={};return this.filteredSupportedBrowsers.forEach((e=>{const[n,r]=e.split(" ");(!t[n]||t[n]<parseFloat(r,10))&&(t[n]=parseFloat(r,10))})),Object.keys(t).map((e=>{var n,r;if(null===(n=this.agents[e])||void 0===n||!n.browser)return null;const o=t[e],s=null===(r=this.agents[e])||void 0===r?void 0:r.browser;return this.t("core","{name} version {version} and above",{name:s,version:o})})).filter((t=>null!==t))}},async beforeMount(){const{agents:t}=await n.e(7874).then(n.t.bind(n,90614,19));this.agents=t},methods:{t:w.Iu,n:w.uN,forceBrowsing(){p.setItem(v,!0);const t=new URLSearchParams(window.location.search);if(t.has("redirect_url")){let e=C.from(t.get("redirect_url"),"base64").toString()||"/";if(e=e.replace("index.php","").replace((0,r.getRootUrl)(),"").replace(/\/\//g,"/"),e.startsWith("/"))return void(window.location=(0,r.generateUrl)(e))}window.location=(0,r.generateUrl)("/")},isMobileBrowser:t=>(t=t.toLowerCase()).includes("and_")||t.includes("android")||t.includes("ios_")||t.includes("mobile")||t.includes("_mob")||t.includes("samsung")}};var B=n(93379),O=n.n(B),j=n(7795),k=n.n(j),S=n(90569),P=n.n(S),M=n(3565),U=n.n(M),I=n(19216),T=n.n(I),E=n(44589),R=n.n(E),$=n(69427),N={};N.styleTagTransform=R(),N.setAttributes=U(),N.insert=P().bind(null,"head"),N.domAPI=k(),N.insertStyleElement=T(),O()($.Z,N),$.Z&&$.Z.locals&&$.Z.locals;const Z=(0,n(51900).Z)(x,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"content-unsupported-browser guest-box"},[e("NcEmptyContent",{scopedSlots:t._u([{key:"icon",fn:function(){return[e("Web")]},proxy:!0},{key:"action",fn:function(){return[e("div",[e("h2",[t._v("\n\t\t\t\t\t"+t._s(t.t("core","Your browser is not supported. Please upgrade to a newer version or a supported one."))+"\n\t\t\t\t")]),t._v(" "),e("NcButton",{staticClass:"content-unsupported-browser__continue",attrs:{type:"primary"},on:{click:t.forceBrowsing}},[t._v("\n\t\t\t\t\t"+t._s(t.t("core","Continue with this unsupported browser"))+"\n\t\t\t\t")])],1),t._v(" "),e("ul",{staticClass:"content-unsupported-browser__list"},[e("h3",[t._v(t._s(t.t("core","Supported versions")))]),t._v(" "),t._l(t.formattedBrowsersList,(function(n){return e("li",{key:n},[t._v("\n\t\t\t\t\t"+t._s(n)+"\n\t\t\t\t")])}))],2)]},proxy:!0}])},[t._v("\n\t\t"+t._s(t.t("core","This browser is not supported"))+"\n\t\t")])],1)}),[],!1,null,"200cf1a3",null).exports;"true"===p.getItem(v)&&(window.location=(0,r.generateUrl)("/")),new o.default({el:"#unsupported-browser",name:"UnsupportedBrowserRoot",render:t=>t(Z)})},69427:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(87537),o=n.n(r),s=n(23645),i=n.n(s)()(o());i.push([t.id,".content-unsupported-browser[data-v-200cf1a3]{display:flex;justify-content:center;width:400px;max-width:calc(90vw - 60px);margin:auto;padding:30px}.content-unsupported-browser .empty-content[data-v-200cf1a3]{margin:0}.content-unsupported-browser .empty-content[data-v-200cf1a3] .empty-content__icon{opacity:1}.content-unsupported-browser__continue[data-v-200cf1a3]{display:block;margin:30px auto}.content-unsupported-browser__list[data-v-200cf1a3]{margin-top:60px;margin-bottom:30px}.content-unsupported-browser__list li[data-v-200cf1a3]{text-align:left}","",{version:3,sources:["webpack://./core/src/views/UnsupportedBrowser.vue"],names:[],mappings:"AAGA,8CACC,YAAA,CACA,sBAAA,CACA,WAAA,CACA,2BAAA,CACA,WAAA,CACA,YARS,CAUT,6DACC,QAAA,CACA,kFACC,SAAA,CAIF,wDACC,aAAA,CACA,gBAAA,CAGD,oDACC,eAAA,CACA,kBAxBQ,CAyBR,uDACC,eAAA",sourcesContent:["\n$spacing: 30px;\n\n.content-unsupported-browser {\n\tdisplay: flex;\n\tjustify-content: center;\n\twidth: 400px;\n\tmax-width: calc(90vw - 2 * $spacing);\n\tmargin: auto;\n\tpadding: $spacing;\n\n\t.empty-content {\n\t\tmargin: 0;\n\t\t&::v-deep .empty-content__icon {\n\t\t\topacity: 1;\n\t\t}\n\t}\n\n\t&__continue {\n\t\tdisplay: block;\n\t\tmargin: $spacing auto;\n\t}\n\n\t&__list {\n\t\tmargin-top: 2 * $spacing;\n\t\tmargin-bottom: $spacing;\n\t\tli {\n\t\t\ttext-align: left;\n\t\t}\n\t}\n}\n\n"],sourceRoot:""}]);const a=i},72950:()=>{}},o={};function s(t){var e=o[t];if(void 0!==e)return e.exports;var n=o[t]={id:t,loaded:!1,exports:{}};return r[t].call(n.exports,n,n.exports,s),n.loaded=!0,n.exports}s.m=r,t=[],s.O=(e,n,r,o)=>{if(!n){var i=1/0;for(l=0;l<t.length;l++){n=t[l][0],r=t[l][1],o=t[l][2];for(var a=!0,c=0;c<n.length;c++)(!1&o||i>=o)&&Object.keys(s.O).every((t=>s.O[t](n[c])))?n.splice(c--,1):(a=!1,o<i&&(i=o));if(a){t.splice(l--,1);var u=r();void 0!==u&&(e=u)}}return e}o=o||0;for(var l=t.length;l>0&&t[l-1][2]>o;l--)t[l]=t[l-1];t[l]=[n,r,o]},s.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return s.d(e,{a:e}),e},n=Object.getPrototypeOf?t=>Object.getPrototypeOf(t):t=>t.__proto__,s.t=function(t,r){if(1&r&&(t=this(t)),8&r)return t;if("object"==typeof t&&t){if(4&r&&t.__esModule)return t;if(16&r&&"function"==typeof t.then)return t}var o=Object.create(null);s.r(o);var i={};e=e||[null,n({}),n([]),n(n)];for(var a=2&r&&t;"object"==typeof a&&!~e.indexOf(a);a=n(a))Object.getOwnPropertyNames(a).forEach((e=>i[e]=()=>t[e]));return i.default=()=>t,s.d(o,i),o},s.d=(t,e)=>{for(var n in e)s.o(e,n)&&!s.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},s.e=()=>Promise.resolve(),s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),s.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),s.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},s.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),s.j=9315,(()=>{s.b=document.baseURI||self.location.href;var t={9315:0};s.O.j=e=>0===t[e];var e=(e,n)=>{var r,o,i=n[0],a=n[1],c=n[2],u=0;if(i.some((e=>0!==t[e]))){for(r in a)s.o(a,r)&&(s.m[r]=a[r]);if(c)var l=c(s)}for(e&&e(n);u<i.length;u++)o=i[u],s.o(t,o)&&t[o]&&t[o][0](),t[o]=0;return s.O(l)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))})(),s.nc=void 0;var i=s.O(void 0,[7874],(()=>s(43879)));i=s.O(i)})();
+//# sourceMappingURL=core-unsupported-browser.js.map?v=106a7b8b90c4052a1caa \ No newline at end of file
diff --git a/dist/core-unsupported-browser.js.map b/dist/core-unsupported-browser.js.map
index 2787be0074a..4da12c7b1ae 100644
--- a/dist/core-unsupported-browser.js.map
+++ b/dist/core-unsupported-browser.js.map
@@ -1 +1 @@
-{"version":3,"file":"core-unsupported-browser.js?v=22d22a91bbb5ff86410b","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/create fake namespace object","webpack:///nextcloud/core/src/services/BrowsersListService.js","webpack:///nextcloud/core/src/services/BrowserStorageService.js","webpack:///nextcloud/core/src/logger.js","webpack:///nextcloud/core/src/utils/RedirectUnsupportedBrowsers.js","webpack://nextcloud/./core/src/views/UnsupportedBrowser.vue?7880","webpack:///nextcloud/core/src/views/UnsupportedBrowser.vue","webpack:///nextcloud/core/src/views/UnsupportedBrowser.vue?vue&type=script&lang=js&","webpack://nextcloud/./core/src/views/UnsupportedBrowser.vue?9416","webpack://nextcloud/./core/src/views/UnsupportedBrowser.vue?d53c","webpack:///nextcloud/core/src/unsupported-browser.js","webpack:///nextcloud/core/src/views/UnsupportedBrowser.vue?vue&type=style&index=0&id=7827e390&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/ensure chunk","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 = (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((key) => (__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};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","/**\n * @copyright 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 { getUserAgentRegex } from 'browserslist-useragent-regexp'\n// eslint-disable-next-line n/no-extraneous-import\nimport browserslist from 'browserslist'\nimport browserslistConfig from '@nextcloud/browserslist-config'\n\n// Generate a regex that matches user agents to detect incompatible browsers\nexport const supportedBrowsersRegExp = getUserAgentRegex({ allowHigherVersions: true, browsers: browserslistConfig })\nexport const supportedBrowsers = browserslist(browserslistConfig)\n","/**\n * @copyright 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 { getBuilder } from '@nextcloud/browser-storage'\n\nexport default getBuilder('core')\n\t.clearOnLogout()\n\t.persist()\n\t.build()\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 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 { generateUrl } from '@nextcloud/router'\nimport { supportedBrowsersRegExp } from '../services/BrowsersListService.js'\nimport browserStorage from '../services/BrowserStorageService.js'\nimport logger from '../logger.js'\n\nexport const browserStorageKey = 'unsupported-browser-ignore'\nconst redirectPath = generateUrl('/unsupported')\n\nconst isBrowserOverridden = browserStorage.getItem(browserStorageKey) === 'true'\n\n/**\n * Test the current browser user agent against our official browserslist config\n * and redirect if unsupported\n */\nexport const testSupportedBrowser = function() {\n\tif (supportedBrowsersRegExp.test(navigator.userAgent)) {\n\t\tlogger.debug('this browser is officially supported ! 🚀')\n\t\treturn\n\t}\n\n\t// If incompatible BUT ignored, let's keep going\n\tif (isBrowserOverridden) {\n\t\tlogger.debug('this browser is NOT supported but has been manually overridden ! ⚠️')\n\t\treturn\n\t}\n\n\t// If incompatible, NOT overridden AND NOT already on the warning page,\n\t// redirect to the unsupported warning page\n\tif (window.location.pathname.indexOf(redirectPath) === -1) {\n\t\tconst redirectUrl = window.location.href.replace(window.location.origin, '')\n\t\tconst base64Param = Buffer.from(redirectUrl).toString('base64')\n\t\thistory.pushState(null, null, `${redirectPath}?redirect_url=${base64Param}`)\n\t\twindow.location.reload()\n\t}\n}\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"content-unsupported-browser guest-box\"},[_c('NcEmptyContent',{scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Web')]},proxy:true},{key:\"action\",fn:function(){return [_c('div',[_c('h2',[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Your browser is not supported. Please upgrade to a newer version or a supported one.'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcButton',{staticClass:\"content-unsupported-browser__continue\",attrs:{\"type\":\"primary\"},on:{\"click\":_vm.forceBrowsing}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Continue with this unsupported browser'))+\"\\n\\t\\t\\t\\t\")])],1),_vm._v(\" \"),_c('ul',{staticClass:\"content-unsupported-browser__list\"},[_c('h3',[_vm._v(_vm._s(_vm.t('core', 'Supported versions')))]),_vm._v(\" \"),_vm._l((_vm.formattedBrowsersList),function(browser){return _c('li',{key:browser},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(browser)+\"\\n\\t\\t\\t\\t\")])})],2)]},proxy:true}])},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('core', 'This browser is not supported'))+\"\\n\\t\\t\")])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }"," <!--\n - @copyright 2022 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<template>\n\t<div class=\"content-unsupported-browser guest-box\">\n\t\t<NcEmptyContent>\n\t\t\t{{ t('core', 'This browser is not supported') }}\n\t\t\t<template #icon>\n\t\t\t\t<Web />\n\t\t\t</template>\n\t\t\t<template #action>\n\t\t\t\t<div>\n\t\t\t\t\t<h2>\n\t\t\t\t\t\t{{ t('core', 'Your browser is not supported. Please upgrade to a newer version or a supported one.') }}\n\t\t\t\t\t</h2>\n\t\t\t\t\t<NcButton class=\"content-unsupported-browser__continue\" type=\"primary\" @click=\"forceBrowsing\">\n\t\t\t\t\t\t{{ t('core', 'Continue with this unsupported browser') }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\n\t\t\t\t<ul class=\"content-unsupported-browser__list\">\n\t\t\t\t\t<h3>{{ t('core', 'Supported versions') }}</h3>\n\t\t\t\t\t<li v-for=\"browser in formattedBrowsersList\" :key=\"browser\">\n\t\t\t\t\t\t{{ browser }}\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</template>\n\t\t</NcEmptyContent>\n\t</div>\n</template>\n\n<script>\n// eslint-disable-next-line n/no-extraneous-import\nimport { agents } from 'caniuse-lite/dist/unpacker/agents.js'\nimport { generateUrl, getRootUrl } from '@nextcloud/router'\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n'\n\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js'\nimport Web from 'vue-material-design-icons/Web.vue'\n\nimport { browserStorageKey } from '../utils/RedirectUnsupportedBrowsers.js'\nimport { supportedBrowsers } from '../services/BrowsersListService.js'\nimport browserStorage from '../services/BrowserStorageService.js'\nimport logger from '../logger.js'\n\nlogger.debug('Supported browsers', { supportedBrowsers })\n\nexport default {\n\tname: 'UnsupportedBrowser',\n\tcomponents: {\n\t\tWeb,\n\t\tNcButton,\n\t\tNcEmptyContent,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tagents: {},\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tisMobile() {\n\t\t\treturn /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)\n\t\t},\n\n\t\t/**\n\t\t * Filter out or include mobile/desktop browsers depending\n\t\t * on the current user platform/device\n\t\t */\n\t\tfilteredSupportedBrowsers() {\n\t\t\treturn supportedBrowsers.filter(browser => {\n\t\t\t\tif (!browser) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\tif (this.isMobile) {\n\t\t\t\t\treturn this.isMobileBrowser(browser)\n\t\t\t\t}\n\t\t\t\treturn !this.isMobileBrowser(browser)\n\t\t\t})\n\t\t},\n\n\t\tformattedBrowsersList() {\n\t\t\tconst list = {}\n\n\t\t\t// supportedBrowsers is generated by webpack at compilation time\n\t\t\tthis.filteredSupportedBrowsers.forEach(browser => {\n\t\t\t\tconst [id, version] = browser.split(' ')\n\t\t\t\tif (!list[id] || list[id] < parseFloat(version, 10)) {\n\t\t\t\t\tlist[id] = parseFloat(version, 10)\n\t\t\t\t}\n\t\t\t})\n\n\t\t\treturn Object.keys(list).map(id => {\n\t\t\t\tif (!this.agents[id]?.browser) {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\n\t\t\t\tconst version = list[id]\n\t\t\t\tconst name = this.agents[id]?.browser\n\t\t\t\treturn this.t('core', '{name} version {version} and above', {\n\t\t\t\t\tname, version,\n\t\t\t\t})\n\t\t\t}).filter(entry => entry !== null)\n\t\t},\n\t},\n\n\tasync beforeMount() {\n\t\t// Dynamic load big list of user agents\n\t\t// eslint-disable-next-line n/no-extraneous-import\n\t\tconst { agents } = await import('caniuse-lite')\n\t\tthis.agents = agents\n\t},\n\n\tmethods: {\n\t\tt,\n\t\tn,\n\n\t\t// Set the flag allowing this browser and redirect to home\n\t\tforceBrowsing() {\n\t\t\tbrowserStorage.setItem(browserStorageKey, true)\n\n\t\t\t// Redirect if there is the data\n\t\t\tconst urlParams = new URLSearchParams(window.location.search)\n\t\t\tif (urlParams.has('redirect_url')) {\n\t\t\t\tlet redirectPath = Buffer.from(urlParams.get('redirect_url'), 'base64').toString() || '/'\n\n\t\t\t\t// remove index.php and double slashes\n\t\t\t\tredirectPath = redirectPath\n\t\t\t\t\t.replace('index.php', '')\n\t\t\t\t\t.replace(getRootUrl(), '')\n\t\t\t\t\t.replace(/\\/\\//g, '/')\n\n\t\t\t\t// if we have a valid redirect url, use it\n\t\t\t\tif (redirectPath.startsWith('/')) {\n\t\t\t\t\twindow.location = generateUrl(redirectPath)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// else redirect to root\n\t\t\twindow.location = generateUrl('/')\n\t\t},\n\n\t\t/**\n\t\t * Detect if the browserslist browser is a mobile one\n\t\t * https://github.com/browserslist/browserslist#query-composition\n\t\t *\n\t\t * @param {string} browser a valid browserlist browser. e.g `and_chr 90`\n\t\t */\n\t\tisMobileBrowser(browser) {\n\t\t\tbrowser = browser.toLowerCase()\n\t\t\treturn browser.includes('and_')\n\t\t\t\t|| browser.includes('android')\n\t\t\t\t|| browser.includes('ios_')\n\t\t\t\t|| browser.includes('mobile')\n\t\t\t\t|| browser.includes('_mob')\n\t\t\t\t|| browser.includes('samsung')\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$spacing: 30px;\n\n.content-unsupported-browser {\n\tdisplay: flex;\n\tjustify-content: center;\n\twidth: 400px;\n\tmax-width: calc(90vw - 2 * $spacing);\n\tmargin: auto;\n\tpadding: $spacing;\n\n\t.empty-content {\n\t\tmargin: 0;\n\t\t&::v-deep .empty-content__icon {\n\t\t\topacity: 1;\n\t\t}\n\t}\n\n\t&__continue {\n\t\tdisplay: block;\n\t\tmargin: $spacing auto;\n\t}\n\n\t&__list {\n\t\tmargin-top: 2 * $spacing;\n\t\tmargin-bottom: $spacing;\n\t\tli {\n\t\t\ttext-align: left;\n\t\t}\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!./UnsupportedBrowser.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!./UnsupportedBrowser.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!./UnsupportedBrowser.vue?vue&type=style&index=0&id=7827e390&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!./UnsupportedBrowser.vue?vue&type=style&index=0&id=7827e390&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UnsupportedBrowser.vue?vue&type=template&id=7827e390&scoped=true&\"\nimport script from \"./UnsupportedBrowser.vue?vue&type=script&lang=js&\"\nexport * from \"./UnsupportedBrowser.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UnsupportedBrowser.vue?vue&type=style&index=0&id=7827e390&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 \"7827e390\",\n null\n \n)\n\nexport default component.exports","/**\n * @copyright 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 { generateUrl } from '@nextcloud/router'\nimport Vue from 'vue'\n\nimport { browserStorageKey } from './utils/RedirectUnsupportedBrowsers.js'\nimport browserStorage from './services/BrowserStorageService.js'\nimport UnsupportedBrowser from './views/UnsupportedBrowser.vue'\n\n// If the ignore token is set, redirect\nif (browserStorage.getItem(browserStorageKey) === 'true') {\n\twindow.location = generateUrl('/')\n}\n\nexport default new Vue({\n\tel: '#unsupported-browser',\n\t// eslint-disable-next-line vue/match-component-file-name\n\tname: 'UnsupportedBrowserRoot',\n\trender: h => h(UnsupportedBrowser),\n})\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, \".content-unsupported-browser[data-v-7827e390]{display:flex;justify-content:center;width:400px;max-width:calc(90vw - 60px);margin:auto;padding:30px}.content-unsupported-browser .empty-content[data-v-7827e390]{margin:0}.content-unsupported-browser .empty-content[data-v-7827e390] .empty-content__icon{opacity:1}.content-unsupported-browser__continue[data-v-7827e390]{display:block;margin:30px auto}.content-unsupported-browser__list[data-v-7827e390]{margin-top:60px;margin-bottom:30px}.content-unsupported-browser__list li[data-v-7827e390]{text-align:left}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/views/UnsupportedBrowser.vue\"],\"names\":[],\"mappings\":\"AAGA,8CACC,YAAA,CACA,sBAAA,CACA,WAAA,CACA,2BAAA,CACA,WAAA,CACA,YARS,CAUT,6DACC,QAAA,CACA,kFACC,SAAA,CAIF,wDACC,aAAA,CACA,gBAAA,CAGD,oDACC,eAAA,CACA,kBAxBQ,CAyBR,uDACC,eAAA\",\"sourcesContent\":[\"\\n$spacing: 30px;\\n\\n.content-unsupported-browser {\\n\\tdisplay: flex;\\n\\tjustify-content: center;\\n\\twidth: 400px;\\n\\tmax-width: calc(90vw - 2 * $spacing);\\n\\tmargin: auto;\\n\\tpadding: $spacing;\\n\\n\\t.empty-content {\\n\\t\\tmargin: 0;\\n\\t\\t&::v-deep .empty-content__icon {\\n\\t\\t\\topacity: 1;\\n\\t\\t}\\n\\t}\\n\\n\\t&__continue {\\n\\t\\tdisplay: block;\\n\\t\\tmargin: $spacing auto;\\n\\t}\\n\\n\\t&__list {\\n\\t\\tmargin-top: 2 * $spacing;\\n\\t\\tmargin-bottom: $spacing;\\n\\t\\tli {\\n\\t\\t\\ttext-align: left;\\n\\t\\t}\\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 = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (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};","// The chunk loading function for additional chunks\n// Since all referenced chunks are already included\n// in this file, this function is empty here.\n__webpack_require__.e = () => (Promise.resolve());","__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 = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (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 = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 9315;","__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\t9315: 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 = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (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((id) => (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], () => (__webpack_require__(23827)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","leafPrototypes","getProto","getUserAgentRegex","allowHigherVersions","browsers","browserslistConfig","supportedBrowsers","browserslist","getBuilder","clearOnLogout","persist","build","user","getCurrentUser","getLoggerBuilder","setApp","setUid","uid","browserStorageKey","generateUrl","browserStorage","logger","name","components","Web","NcButton","NcEmptyContent","data","agents","computed","isMobile","test","navigator","userAgent","filteredSupportedBrowsers","browser","isMobileBrowser","formattedBrowsersList","list","forEach","id","version","split","parseFloat","Object","keys","map","_this$agents$id","_this$agents$id2","t","filter","entry","methods","n","forceBrowsing","urlParams","URLSearchParams","window","location","search","has","redirectPath","Buffer","from","get","toString","replace","getRootUrl","startsWith","toLowerCase","includes","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_c","_self","staticClass","scopedSlots","_u","key","fn","proxy","_v","_s","attrs","on","_l","Vue","el","render","h","UnsupportedBrowser","___CSS_LOADER_EXPORT___","push","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","O","result","chunkIds","priority","notFulfilled","Infinity","i","length","fulfilled","j","every","splice","r","getter","__esModule","d","a","getPrototypeOf","obj","value","mode","then","ns","create","def","current","indexOf","getOwnPropertyNames","definition","o","defineProperty","enumerable","e","Promise","resolve","g","globalThis","Function","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","document","baseURI","self","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","bind","nc","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"core-unsupported-browser.js?v=106a7b8b90c4052a1caa","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/create fake namespace object","webpack:///nextcloud/core/src/services/BrowsersListService.js","webpack:///nextcloud/core/src/services/BrowserStorageService.js","webpack:///nextcloud/core/src/logger.js","webpack:///nextcloud/core/src/utils/RedirectUnsupportedBrowsers.js","webpack://nextcloud/./core/src/views/UnsupportedBrowser.vue?7880","webpack:///nextcloud/core/src/views/UnsupportedBrowser.vue","webpack:///nextcloud/core/src/views/UnsupportedBrowser.vue?vue&type=script&lang=js&","webpack://nextcloud/./core/src/views/UnsupportedBrowser.vue?c6b3","webpack://nextcloud/./core/src/views/UnsupportedBrowser.vue?d53c","webpack:///nextcloud/core/src/unsupported-browser.js","webpack:///nextcloud/core/src/views/UnsupportedBrowser.vue?vue&type=style&index=0&id=200cf1a3&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/ensure chunk","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 = (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((key) => (__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};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","/**\n * @copyright 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 { getUserAgentRegex } from 'browserslist-useragent-regexp'\n// eslint-disable-next-line n/no-extraneous-import\nimport browserslist from 'browserslist'\nimport browserslistConfig from '@nextcloud/browserslist-config'\n\n// Generate a regex that matches user agents to detect incompatible browsers\nexport const supportedBrowsersRegExp = getUserAgentRegex({ allowHigherVersions: true, browsers: browserslistConfig })\nexport const supportedBrowsers = browserslist(browserslistConfig)\n","/**\n * @copyright 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 { getBuilder } from '@nextcloud/browser-storage'\n\nexport default getBuilder('core')\n\t.clearOnLogout()\n\t.persist()\n\t.build()\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 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 { generateUrl } from '@nextcloud/router'\nimport { supportedBrowsersRegExp } from '../services/BrowsersListService.js'\nimport browserStorage from '../services/BrowserStorageService.js'\nimport logger from '../logger.js'\n\nexport const browserStorageKey = 'unsupported-browser-ignore'\nconst redirectPath = generateUrl('/unsupported')\n\nconst isBrowserOverridden = browserStorage.getItem(browserStorageKey) === 'true'\n\n/**\n * Test the current browser user agent against our official browserslist config\n * and redirect if unsupported\n */\nexport const testSupportedBrowser = function() {\n\tif (supportedBrowsersRegExp.test(navigator.userAgent)) {\n\t\tlogger.debug('this browser is officially supported ! 🚀')\n\t\treturn\n\t}\n\n\t// If incompatible BUT ignored, let's keep going\n\tif (isBrowserOverridden) {\n\t\tlogger.debug('this browser is NOT supported but has been manually overridden ! ⚠️')\n\t\treturn\n\t}\n\n\t// If incompatible, NOT overridden AND NOT already on the warning page,\n\t// redirect to the unsupported warning page\n\tif (window.location.pathname.indexOf(redirectPath) === -1) {\n\t\tconst redirectUrl = window.location.href.replace(window.location.origin, '')\n\t\tconst base64Param = Buffer.from(redirectUrl).toString('base64')\n\t\thistory.pushState(null, null, `${redirectPath}?redirect_url=${base64Param}`)\n\t\twindow.location.reload()\n\t}\n}\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"content-unsupported-browser guest-box\"},[_c('NcEmptyContent',{scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Web')]},proxy:true},{key:\"action\",fn:function(){return [_c('div',[_c('h2',[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Your browser is not supported. Please upgrade to a newer version or a supported one.'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcButton',{staticClass:\"content-unsupported-browser__continue\",attrs:{\"type\":\"primary\"},on:{\"click\":_vm.forceBrowsing}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Continue with this unsupported browser'))+\"\\n\\t\\t\\t\\t\")])],1),_vm._v(\" \"),_c('ul',{staticClass:\"content-unsupported-browser__list\"},[_c('h3',[_vm._v(_vm._s(_vm.t('core', 'Supported versions')))]),_vm._v(\" \"),_vm._l((_vm.formattedBrowsersList),function(browser){return _c('li',{key:browser},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(browser)+\"\\n\\t\\t\\t\\t\")])})],2)]},proxy:true}])},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('core', 'This browser is not supported'))+\"\\n\\t\\t\")])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }"," <!--\n - @copyright 2022 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<template>\n\t<div class=\"content-unsupported-browser guest-box\">\n\t\t<NcEmptyContent>\n\t\t\t{{ t('core', 'This browser is not supported') }}\n\t\t\t<template #icon>\n\t\t\t\t<Web />\n\t\t\t</template>\n\t\t\t<template #action>\n\t\t\t\t<div>\n\t\t\t\t\t<h2>\n\t\t\t\t\t\t{{ t('core', 'Your browser is not supported. Please upgrade to a newer version or a supported one.') }}\n\t\t\t\t\t</h2>\n\t\t\t\t\t<NcButton class=\"content-unsupported-browser__continue\" type=\"primary\" @click=\"forceBrowsing\">\n\t\t\t\t\t\t{{ t('core', 'Continue with this unsupported browser') }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\n\t\t\t\t<ul class=\"content-unsupported-browser__list\">\n\t\t\t\t\t<h3>{{ t('core', 'Supported versions') }}</h3>\n\t\t\t\t\t<li v-for=\"browser in formattedBrowsersList\" :key=\"browser\">\n\t\t\t\t\t\t{{ browser }}\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</template>\n\t\t</NcEmptyContent>\n\t</div>\n</template>\n\n<script>\nimport { generateUrl, getRootUrl } from '@nextcloud/router'\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n'\n\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js'\nimport Web from 'vue-material-design-icons/Web.vue'\n\nimport { browserStorageKey } from '../utils/RedirectUnsupportedBrowsers.js'\nimport { supportedBrowsers } from '../services/BrowsersListService.js'\nimport browserStorage from '../services/BrowserStorageService.js'\nimport logger from '../logger.js'\n\nlogger.debug('Supported browsers', { supportedBrowsers })\n\nexport default {\n\tname: 'UnsupportedBrowser',\n\tcomponents: {\n\t\tWeb,\n\t\tNcButton,\n\t\tNcEmptyContent,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tagents: {},\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tisMobile() {\n\t\t\treturn /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)\n\t\t},\n\n\t\t/**\n\t\t * Filter out or include mobile/desktop browsers depending\n\t\t * on the current user platform/device\n\t\t */\n\t\tfilteredSupportedBrowsers() {\n\t\t\treturn supportedBrowsers.filter(browser => {\n\t\t\t\tif (!browser) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\tif (this.isMobile) {\n\t\t\t\t\treturn this.isMobileBrowser(browser)\n\t\t\t\t}\n\t\t\t\treturn !this.isMobileBrowser(browser)\n\t\t\t})\n\t\t},\n\n\t\tformattedBrowsersList() {\n\t\t\tconst list = {}\n\n\t\t\t// supportedBrowsers is generated by webpack at compilation time\n\t\t\tthis.filteredSupportedBrowsers.forEach(browser => {\n\t\t\t\tconst [id, version] = browser.split(' ')\n\t\t\t\tif (!list[id] || list[id] < parseFloat(version, 10)) {\n\t\t\t\t\tlist[id] = parseFloat(version, 10)\n\t\t\t\t}\n\t\t\t})\n\n\t\t\treturn Object.keys(list).map(id => {\n\t\t\t\tif (!this.agents[id]?.browser) {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\n\t\t\t\tconst version = list[id]\n\t\t\t\tconst name = this.agents[id]?.browser\n\t\t\t\treturn this.t('core', '{name} version {version} and above', {\n\t\t\t\t\tname, version,\n\t\t\t\t})\n\t\t\t}).filter(entry => entry !== null)\n\t\t},\n\t},\n\n\tasync beforeMount() {\n\t\t// Dynamic load big list of user agents\n\t\t// eslint-disable-next-line n/no-extraneous-import\n\t\tconst { agents } = await import('caniuse-lite')\n\t\tthis.agents = agents\n\t},\n\n\tmethods: {\n\t\tt,\n\t\tn,\n\n\t\t// Set the flag allowing this browser and redirect to home\n\t\tforceBrowsing() {\n\t\t\tbrowserStorage.setItem(browserStorageKey, true)\n\n\t\t\t// Redirect if there is the data\n\t\t\tconst urlParams = new URLSearchParams(window.location.search)\n\t\t\tif (urlParams.has('redirect_url')) {\n\t\t\t\tlet redirectPath = Buffer.from(urlParams.get('redirect_url'), 'base64').toString() || '/'\n\n\t\t\t\t// remove index.php and double slashes\n\t\t\t\tredirectPath = redirectPath\n\t\t\t\t\t.replace('index.php', '')\n\t\t\t\t\t.replace(getRootUrl(), '')\n\t\t\t\t\t.replace(/\\/\\//g, '/')\n\n\t\t\t\t// if we have a valid redirect url, use it\n\t\t\t\tif (redirectPath.startsWith('/')) {\n\t\t\t\t\twindow.location = generateUrl(redirectPath)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// else redirect to root\n\t\t\twindow.location = generateUrl('/')\n\t\t},\n\n\t\t/**\n\t\t * Detect if the browserslist browser is a mobile one\n\t\t * https://github.com/browserslist/browserslist#query-composition\n\t\t *\n\t\t * @param {string} browser a valid browserlist browser. e.g `and_chr 90`\n\t\t */\n\t\tisMobileBrowser(browser) {\n\t\t\tbrowser = browser.toLowerCase()\n\t\t\treturn browser.includes('and_')\n\t\t\t\t|| browser.includes('android')\n\t\t\t\t|| browser.includes('ios_')\n\t\t\t\t|| browser.includes('mobile')\n\t\t\t\t|| browser.includes('_mob')\n\t\t\t\t|| browser.includes('samsung')\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$spacing: 30px;\n\n.content-unsupported-browser {\n\tdisplay: flex;\n\tjustify-content: center;\n\twidth: 400px;\n\tmax-width: calc(90vw - 2 * $spacing);\n\tmargin: auto;\n\tpadding: $spacing;\n\n\t.empty-content {\n\t\tmargin: 0;\n\t\t&::v-deep .empty-content__icon {\n\t\t\topacity: 1;\n\t\t}\n\t}\n\n\t&__continue {\n\t\tdisplay: block;\n\t\tmargin: $spacing auto;\n\t}\n\n\t&__list {\n\t\tmargin-top: 2 * $spacing;\n\t\tmargin-bottom: $spacing;\n\t\tli {\n\t\t\ttext-align: left;\n\t\t}\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!./UnsupportedBrowser.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!./UnsupportedBrowser.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!./UnsupportedBrowser.vue?vue&type=style&index=0&id=200cf1a3&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!./UnsupportedBrowser.vue?vue&type=style&index=0&id=200cf1a3&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UnsupportedBrowser.vue?vue&type=template&id=200cf1a3&scoped=true&\"\nimport script from \"./UnsupportedBrowser.vue?vue&type=script&lang=js&\"\nexport * from \"./UnsupportedBrowser.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UnsupportedBrowser.vue?vue&type=style&index=0&id=200cf1a3&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 \"200cf1a3\",\n null\n \n)\n\nexport default component.exports","/**\n * @copyright 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 { generateUrl } from '@nextcloud/router'\nimport Vue from 'vue'\n\nimport { browserStorageKey } from './utils/RedirectUnsupportedBrowsers.js'\nimport browserStorage from './services/BrowserStorageService.js'\nimport UnsupportedBrowser from './views/UnsupportedBrowser.vue'\n\n// If the ignore token is set, redirect\nif (browserStorage.getItem(browserStorageKey) === 'true') {\n\twindow.location = generateUrl('/')\n}\n\nexport default new Vue({\n\tel: '#unsupported-browser',\n\t// eslint-disable-next-line vue/match-component-file-name\n\tname: 'UnsupportedBrowserRoot',\n\trender: h => h(UnsupportedBrowser),\n})\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, \".content-unsupported-browser[data-v-200cf1a3]{display:flex;justify-content:center;width:400px;max-width:calc(90vw - 60px);margin:auto;padding:30px}.content-unsupported-browser .empty-content[data-v-200cf1a3]{margin:0}.content-unsupported-browser .empty-content[data-v-200cf1a3] .empty-content__icon{opacity:1}.content-unsupported-browser__continue[data-v-200cf1a3]{display:block;margin:30px auto}.content-unsupported-browser__list[data-v-200cf1a3]{margin-top:60px;margin-bottom:30px}.content-unsupported-browser__list li[data-v-200cf1a3]{text-align:left}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/views/UnsupportedBrowser.vue\"],\"names\":[],\"mappings\":\"AAGA,8CACC,YAAA,CACA,sBAAA,CACA,WAAA,CACA,2BAAA,CACA,WAAA,CACA,YARS,CAUT,6DACC,QAAA,CACA,kFACC,SAAA,CAIF,wDACC,aAAA,CACA,gBAAA,CAGD,oDACC,eAAA,CACA,kBAxBQ,CAyBR,uDACC,eAAA\",\"sourcesContent\":[\"\\n$spacing: 30px;\\n\\n.content-unsupported-browser {\\n\\tdisplay: flex;\\n\\tjustify-content: center;\\n\\twidth: 400px;\\n\\tmax-width: calc(90vw - 2 * $spacing);\\n\\tmargin: auto;\\n\\tpadding: $spacing;\\n\\n\\t.empty-content {\\n\\t\\tmargin: 0;\\n\\t\\t&::v-deep .empty-content__icon {\\n\\t\\t\\topacity: 1;\\n\\t\\t}\\n\\t}\\n\\n\\t&__continue {\\n\\t\\tdisplay: block;\\n\\t\\tmargin: $spacing auto;\\n\\t}\\n\\n\\t&__list {\\n\\t\\tmargin-top: 2 * $spacing;\\n\\t\\tmargin-bottom: $spacing;\\n\\t\\tli {\\n\\t\\t\\ttext-align: left;\\n\\t\\t}\\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 = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (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};","// The chunk loading function for additional chunks\n// Since all referenced chunks are already included\n// in this file, this function is empty here.\n__webpack_require__.e = () => (Promise.resolve());","__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 = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (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 = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 9315;","__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\t9315: 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 = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (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((id) => (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], () => (__webpack_require__(43879)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","leafPrototypes","getProto","getUserAgentRegex","allowHigherVersions","browsers","browserslistConfig","supportedBrowsers","browserslist","getBuilder","clearOnLogout","persist","build","user","getCurrentUser","getLoggerBuilder","setApp","setUid","uid","browserStorageKey","generateUrl","browserStorage","logger","name","components","Web","NcButton","NcEmptyContent","data","agents","computed","isMobile","test","navigator","userAgent","filteredSupportedBrowsers","browser","isMobileBrowser","formattedBrowsersList","list","forEach","id","version","split","parseFloat","Object","keys","map","_this$agents$id","_this$agents$id2","t","filter","entry","methods","n","forceBrowsing","urlParams","URLSearchParams","window","location","search","has","redirectPath","Buffer","from","get","toString","replace","getRootUrl","startsWith","toLowerCase","includes","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_c","_self","staticClass","scopedSlots","_u","key","fn","proxy","_v","_s","attrs","on","_l","Vue","el","render","h","UnsupportedBrowser","___CSS_LOADER_EXPORT___","push","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","O","result","chunkIds","priority","notFulfilled","Infinity","i","length","fulfilled","j","every","splice","r","getter","__esModule","d","a","getPrototypeOf","obj","value","mode","then","ns","create","def","current","indexOf","getOwnPropertyNames","definition","o","defineProperty","enumerable","e","Promise","resolve","g","globalThis","Function","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","document","baseURI","self","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","bind","nc","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file