Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/photos.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorentin Mors <corentin.mors@dashlane.com>2020-10-12 16:39:45 +0300
committerJohn Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>2020-10-12 19:30:19 +0300
commit39b85f9d1c088e53f2b38f74c3f4e5780abdb865 (patch)
tree0702aa07bacc79b149c06b3c6815d367a47f8bbe /js/photos-5.js.map
parent051dab0bad14a566be16a3eda66fe72099477310 (diff)
Fix Jan issues
Signed-off-by: Corentin Mors <corentin.mors@dashlane.com>
Diffstat (limited to 'js/photos-5.js.map')
-rw-r--r--js/photos-5.js.map2
1 files changed, 1 insertions, 1 deletions
diff --git a/js/photos-5.js.map b/js/photos-5.js.map
index cdc81895..0c5a6594 100644
--- a/js/photos-5.js.map
+++ b/js/photos-5.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///./src/patchedRequest.js","webpack:///./src/components/EmptyContent.vue?10c4","webpack:///./src/components/Navigation.vue?cad9","webpack:///./src/utils/CancelableRequest.js","webpack:///./src/services/AllowedMimes.js","webpack:///./src/services/DavClient.js","webpack:///src/components/EmptyContent.vue","webpack:///./src/components/EmptyContent.vue?ff18","webpack:///./src/components/EmptyContent.vue","webpack:///./src/components/EmptyContent.vue?9bb1","webpack:///./src/components/Navigation.vue?0cf3","webpack:///./src/components/Navigation.vue?4411","webpack:///src/components/Navigation.vue","webpack:///./src/components/Navigation.vue","webpack:///./src/assets/Illustrations lazy ^\\.\\/.*\\.svg$ namespace object","webpack:///./src/components/EmptyContent.vue?b182","webpack:///./src/components/EmptyContent.vue?6200","webpack:///./src/components/Navigation.vue?49db","webpack:///./src/components/Navigation.vue?f149","webpack:///./src/services/DavRequest.js","webpack:///./src/components/FileVirtualGrid.vue?39ab","webpack:///./src/components/SeparatorVirtualGrid.vue?7b40","webpack:///./src/views/Timeline.vue?c681","webpack:///./src/assets/grid-sizes.js","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./src/components/FileVirtualGrid.vue?823c","webpack:///./src/components/FileVirtualGrid.vue?851b","webpack:///./src/components/SeparatorVirtualGrid.vue?1a7e","webpack:///./src/components/SeparatorVirtualGrid.vue?a54d","webpack:///./src/views/Timeline.vue?8fe4","webpack:///./src/views/Timeline.vue?751c","webpack:///./src/views/Timeline.vue?436b","webpack:///./src/services/PhotoSearch.js","webpack:///src/components/FileVirtualGrid.vue","webpack:///./src/components/FileVirtualGrid.vue?950a","webpack:///./src/components/FileVirtualGrid.vue","webpack:///./src/components/FileVirtualGrid.vue?f955","webpack:///./src/components/SeparatorVirtualGrid.vue?bd8e","webpack:///src/components/SeparatorVirtualGrid.vue","webpack:///./src/components/SeparatorVirtualGrid.vue","webpack:///./src/components/SeparatorVirtualGrid.vue?5e6f","webpack:///./src/services/GridConfig.js","webpack:///./src/mixins/GridConfig.js","webpack:///src/views/Timeline.vue","webpack:///./src/views/Timeline.vue?21b8","webpack:///./src/views/Timeline.vue"],"names":["request","require","oldPrepareRequestOptions","prepareRequestOptions","requestOptions","methodOptions","cancelToken","method","module","exports","content","i","locals","add","default","CancelableRequest","axios","CancelToken","source","url","options","Object","assign","token","cancel","mimes","loadState","webdav","getPatcher","patch","remote","generateRemoteUrl","client","createClient","parseUrl","pathname","component","_vm","this","_h","$createElement","_c","_self","staticClass","domProps","_s","illustration","_v","_t","directives","name","rawName","value","$slots","expression","_e","class","isRoot","attrs","on","folderUp","backToText","showActions","showSidebar","t","map","webpackAsyncContext","req","__webpack_require__","o","Promise","resolve","then","e","Error","code","ids","id","keys","___CSS_LOADER_API_IMPORT___","push","props","sizes","400","marginTop","marginW","count","gap","700","1024","1280","1440","1600","2048","2560","3440","max","webpackContext","webpackContextResolve","onlyFavorites","page","perPage","prefixPath","getCurrentUser","uid","orMime","allowedMimes","reduce","str","mime","eqFavorites","headers","data","deep","details","getDirectoryContents","response","genFileInfo","filename","replace","loaded","davPath","ariaLabel","$event","preventDefault","openViewer","item","injected","includes","hasPreview","ref","src","basename","ariaUuid","onLoad","style","height","month","year","Vue","gridConfig","watch","val","$emit","created","window","addEventListener","handleWindowResize","beforeDestroy","removeEventListener","methods","currentSize","find","size","document","documentElement","clientWidth","getGridConfig","$on","console","debug","$off","error","loading","key","path","rootTitle","getContent"],"mappings":"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","file":"photos-5.js?v=98ebe759595bc0471db2","sourcesContent":["/**\n * @copyright Copyright (c) 2019 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\nconst request = require('webdav/dist/node/request')\n\nconst oldPrepareRequestOptions = request.prepareRequestOptions\n\n// While we wait for official cancellable webdav requests\n// https://github.com/perry-mitchell/webdav-client/issues/179\n// let's properly forward our axios options through webdav to axios\n\nrequest.prepareRequestOptions = function(requestOptions, methodOptions) {\n\t// add our cancelToken support\n\tif (methodOptions.cancelToken && typeof methodOptions.cancelToken === 'object') {\n\t\trequestOptions.cancelToken = methodOptions.cancelToken\n\t}\n\n\t// exploit old method\n\toldPrepareRequestOptions(requestOptions, methodOptions)\n\n\t// allow us to override the request method\n\tif (methodOptions.method && typeof methodOptions.method === 'string') {\n\t\trequestOptions.method = methodOptions.method\n\t}\n}\n\nmodule.exports = request\n","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmptyContent.vue?vue&type=style&index=0&lang=scss&\");\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"f03f0a4a\", content, true, {});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=style&index=0&id=4c3113d6&lang=scss&scoped=true&\");\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"70c813b9\", content, true, {});","/**\n * @copyright Copyright (c) 2019 Marco Ambrosini <marcoambrosini@pm.me>\n *\n * @author Marco Ambrosini <marcoambrosini@pm.me>\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\nimport axios from '@nextcloud/axios'\n\n/**\n * Create a cancel token\n * @returns {CancelTokenSource}\n */\nconst createCancelToken = () => axios.CancelToken.source()\n\n/**\n * Creates a cancelable axios 'request object'.\n *\n * @param {function} request the axios promise request\n * @returns {Object}\n */\nconst CancelableRequest = function(request) {\n\t/**\n\t * Generate an axios cancel token\n\t */\n\tconst cancelToken = createCancelToken()\n\n\t/**\n\t * Execute the request\n\t *\n\t * @param {string} url the url to send the request to\n\t * @param {Object} [options] optional config for the request\n\t */\n\tconst fetch = async function(url, options) {\n\t\treturn request(\n\t\t\turl,\n\t\t\tObject.assign({ cancelToken: cancelToken.token }, options)\n\t\t)\n\t}\n\n\treturn {\n\t\trequest: fetch,\n\t\tcancel: cancelToken.cancel,\n\t}\n}\n\nexport default CancelableRequest\n","/**\n * @copyright Copyright (c) 2018 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\nimport { loadState } from '@nextcloud/initial-state'\n\nconst mimes = loadState('photos', 'mimes')\nexport default mimes\n","/**\n * @copyright Copyright (c) 2019 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\nimport webdav from 'webdav'\nimport axios from '@nextcloud/axios'\nimport parseUrl from 'url-parse'\nimport { generateRemoteUrl } from '@nextcloud/router'\n\n// force our axios\nconst patcher = webdav.getPatcher()\npatcher.patch('request', axios)\n\n// init webdav client on default dav endpoint\nconst remote = generateRemoteUrl('dav')\nconst client = webdav.createClient(remote)\n\nexport const remotePath = parseUrl(remote).pathname\nexport default client\n","<!--\n - @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div v-if=\"isReady\" class=\"emptycontent\">\n\t\t<!-- eslint-disable-next-line vue/no-v-html (because it's an SVG file) -->\n\t\t<div v-if=\"haveIllustration\" class=\"illustration\" v-html=\"illustration\" />\n\t\t<div v-else class=\"icon-error\" />\n\t\t<h2><slot /></h2>\n\t\t<p v-show=\"$slots.desc\">\n\t\t\t<slot name=\"desc\" />\n\t\t</p>\n\t</div>\n</template>\n\n<script>\nexport default {\n\tname: 'EmptyContent',\n\tprops: {\n\t\tillustrationName: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tillustration: '',\n\t\t}\n\t},\n\tcomputed: {\n\t\t/**\n\t\t * Does this component have an illustration\n\t\t *\n\t\t * @returns {boolean}\n\t\t */\n\t\thaveIllustration() {\n\t\t\treturn this.illustrationName !== ''\n\t\t},\n\n\t\t/**\n\t\t * Is the illustration loaded\n\t\t *\n\t\t * @returns {boolean}\n\t\t */\n\t\tisLoaded() {\n\t\t\tif (!this.haveIllustration) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn this.illustration !== ''\n\t\t},\n\n\t\t/**\n\t\t * The component is ready if the illustration\n\t\t * is done loading or if there is none\n\t\t *\n\t\t * @returns {boolean}\n\t\t */\n\t\tisReady() {\n\t\t\treturn !this.haveIllustration || (this.haveIllustration && this.isLoaded)\n\t\t},\n\t},\n\n\t/**\n\t * Fetch the new illustration as soon as it changes\n\t */\n\twatch: {\n\t\tillustrationName() {\n\t\t\tthis.getIllustration()\n\t\t},\n\t},\n\tbeforeMount() {\n\t\tthis.getIllustration()\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Fetch the illustration as webpack chunk\n\t\t */\n\t\tasync getIllustration() {\n\t\t\tthis.illustration = ''\n\t\t\tif (this.illustrationName !== '') {\n\t\t\t\ttry {\n\t\t\t\t\tconst illustration = await import(`../assets/Illustrations/${this.illustrationName}.svg`)\n\t\t\t\t\tthis.illustration = illustration.default\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error('Could not get the error illustration', error)\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\n}\n</script>\n\n<style lang=\"scss\">\n.emptycontent {\n\t// span all the available columns\n\tgrid-column: 1/-1;\n\tmargin-top: 20vh;\n}\n\n.illustration {\n\tmin-width: 200px;\n\tmax-width: 15%;\n\twidth: 300px;\n\tmargin: auto;\n\tmargin-bottom: 20px;\n\tposition: relative;\n\n\tsvg {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tmax-height: 40vh;\n\t}\n\n\t// change colour of illustration\n\t[fill*='6c63ff'] {\n\t\tfill: var(--color-primary-element);\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!./EmptyContent.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!./EmptyContent.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EmptyContent.vue?vue&type=template&id=5881a110&\"\nimport script from \"./EmptyContent.vue?vue&type=script&lang=js&\"\nexport * from \"./EmptyContent.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EmptyContent.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isReady)?_c('div',{staticClass:\"emptycontent\"},[(_vm.haveIllustration)?_c('div',{staticClass:\"illustration\",domProps:{\"innerHTML\":_vm._s(_vm.illustration)}}):_c('div',{staticClass:\"icon-error\"}),_vm._v(\" \"),_c('h2',[_vm._t(\"default\")],2),_vm._v(\" \"),_c('p',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.$slots.desc),expression:\"$slots.desc\"}]},[_vm._t(\"desc\")],2)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"photos-navigation\",class:{'photos-navigation--root': _vm.isRoot},attrs:{\"role\":\"toolbar\"}},[(!_vm.isRoot)?_c('Actions',{staticClass:\"photos-navigation__back\"},[_c('ActionButton',{attrs:{\"icon\":\"icon-confirm\"},on:{\"click\":_vm.folderUp}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.backToText)+\"\\n\\t\\t\")])],1):_vm._e(),_vm._v(\" \"),_c('h2',{staticClass:\"photos-navigation__title\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.name)+\"\\n\\t\")]),_vm._v(\" \"),(!_vm.isRoot && _vm.showActions)?_c('Actions',{staticClass:\"photos-navigation__share\"},[_c('ActionButton',{attrs:{\"icon\":\"icon-shared\"},on:{\"click\":_vm.showSidebar}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('photos', 'Share this folder'))+\"\\n\\t\\t\")])],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div :class=\"{'photos-navigation--root': isRoot}\" class=\"photos-navigation\" role=\"toolbar\">\n\t\t<Actions v-if=\"!isRoot\" class=\"photos-navigation__back\">\n\t\t\t<ActionButton\n\t\t\t\ticon=\"icon-confirm\"\n\t\t\t\t@click=\"folderUp\">\n\t\t\t\t{{ backToText }}\n\t\t\t</ActionButton>\n\t\t</Actions>\n\t\t<h2 class=\"photos-navigation__title\">\n\t\t\t{{ name }}\n\t\t</h2>\n\t\t<Actions v-if=\"!isRoot && showActions\" class=\"photos-navigation__share\">\n\t\t\t<ActionButton\n\t\t\t\ticon=\"icon-shared\"\n\t\t\t\t@click=\"showSidebar\">\n\t\t\t\t{{ t('photos', 'Share this folder') }}\n\t\t\t</ActionButton>\n\t\t</Actions>\n\t</div>\n</template>\n\n<script>\nimport Actions from '@nextcloud/vue/dist/Components/Actions'\nimport ActionButton from '@nextcloud/vue/dist/Components/ActionButton'\nexport default {\n\tname: 'Navigation',\n\n\tcomponents: {\n\t\tActionButton,\n\t\tActions,\n\t},\n\tinheritAttrs: false,\n\n\tprops: {\n\t\tbasename: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tfilename: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tshowActions: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\trootTitle: {\n\t\t\ttype: String,\n\t\t\tdefault: t('photos', 'Photos'),\n\t\t},\n\t},\n\n\tcomputed: {\n\t\tisRoot() {\n\t\t\treturn this.filename === '/'\n\t\t},\n\t\tname() {\n\t\t\tif (this.isRoot) {\n\t\t\t\treturn this.rootTitle\n\t\t\t}\n\t\t\treturn this.basename\n\t\t},\n\t\tparentPath() {\n\t\t\tconst path = this.filename.split('/')\n\t\t\tpath.pop()\n\t\t\tconst parent = path.join('/')\n\t\t\treturn this.isRoot || parent.trim() === ''\n\t\t\t\t? '/'\n\t\t\t\t: path.join('/')\n\t\t},\n\t\tparentName() {\n\t\t\treturn this.parentPath && this.parentPath.split('/').pop()\n\t\t},\n\t\tbackToText() {\n\t\t\tif (this.parentPath === '/') {\n\t\t\t\treturn t('photos', 'Back to {folder}', { folder: this.rootTitle })\n\t\t\t}\n\t\t\treturn t('photos', 'Back to {folder}', { folder: this.parentName })\n\t\t},\n\n\t\t/**\n\t\t * We do not want encoded slashes when browsing by folder\n\t\t * so we generate a new valid route object, get the final url back\n\t\t * decode it and use it as a direct string, which vue-router\n\t\t * does not encode afterwards\n\t\t * @returns {string|object}\n\t\t */\n\t\tto() {\n\t\t\t// always remove first slash, the router\n\t\t\t// manage it automatically\n\t\t\tconst regex = /^\\/?(.*)/i\n\t\t\tconst path = regex.exec(this.parentPath)[1]\n\n\t\t\t// apply to current route\n\t\t\tconst { name, params } = Object.assign({}, this.$route, {\n\t\t\t\tparams: { path },\n\t\t\t})\n\n\t\t\t// return the full object as we don't care about\n\t\t\t// an empty path if this is route\n\t\t\tif (path === '') {\n\t\t\t\treturn { name }\n\t\t\t}\n\n\t\t\t// returning a string prevent vue-router to encode it again\n\t\t\treturn decodeURIComponent(this.$router.resolve({ name, params }).resolved.path)\n\t\t},\n\t},\n\n\tmethods: {\n\t\tfolderUp() {\n\t\t\tthis.$router.push(this.to)\n\t\t},\n\t\tshowSidebar() {\n\t\t\tOCA.Files.Sidebar.open(this.filename)\n\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.icon-confirm {\n\ttransform: rotate(180deg)\n}\n\n.photos-navigation {\n\tdisplay: flex;\n\tposition: block;\n\theight: 44px;\n\tpadding: 0 40px;\n\talign-items: center;\n\tmax-width: 100%;\n\t&__title {\n\t\tmargin: 0;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\t&__share {\n\t\tmargin-left: 10px;\n\t}\n\t&__back,\n\t&__share {\n\t\tflex-grow: 0;\n\t\tflex-shrink: 0;\n\t}\n}\n\n// generate variants based on grid sizes\n// TODO: use mixins/GridSizes as soon as node-sass supports it\n// needs node-sass 5.0 (with libsass 3.6)\n// https://github.com/sass/node-sass/pull/2312\n$previous: 0;\n@each $size, $config in get('sizes') {\n\t$marginTop: map-get($config, 'marginTop');\n\t$marginW: map-get($config, 'marginW');\n\n\t// if this is the last entry, only use min-width\n\t$rule: '(min-width: #{$previous}px) and (max-width: #{$size}px)';\n\t@if $size == 'max' {\n\t\t$rule: '(min-width: #{$previous}px)';\n\t}\n\n\t@media #{$rule} {\n\t\t.photos-navigation {\n\t\t\t// we space this with 2/3 margin top, 1/3 margin bottom\n\t\t\ttop: ($marginTop - 44px) * 2 / 3;\n\t\t\t// padding-left: $marginW;\n\t\t\t@if $marginW >= 44px {\n\t\t\t\t&__back {\n\t\t\t\t\tmargin: 0 (($marginW - 44px) / 2);\n\t\t\t\t}\n\t\t\t}\n\t\t\t&--root &__title {\n\t\t\t\tpadding-left: #{$marginW - 44}px;\n\t\t\t}\n\t\t}\n\t}\n\t$previous: $size;\n}\n</style>\n","import { render, staticRenderFns } from \"./Navigation.vue?vue&type=template&id=4c3113d6&scoped=true&\"\nimport script from \"./Navigation.vue?vue&type=script&lang=js&\"\nexport * from \"./Navigation.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Navigation.vue?vue&type=style&index=0&id=4c3113d6&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 \"4c3113d6\",\n null\n \n)\n\nexport default component.exports","var map = {\n\t\"./empty.svg\": [\n\t\t497,\n\t\t8\n\t],\n\t\"./folder.svg\": [\n\t\t498,\n\t\t9\n\t],\n\t\"./images.svg\": [\n\t\t499,\n\t\t10\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(function() {\n\t\treturn __webpack_require__.t(id, 7);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 228;\nmodule.exports = webpackAsyncContext;","import mod from \"-!../../node_modules/vue-style-loader/index.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmptyContent.vue?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../../node_modules/vue-style-loader/index.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmptyContent.vue?vue&type=style&index=0&lang=scss&\"","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".emptycontent{grid-column:1/-1;margin-top:20vh}.illustration{min-width:200px;max-width:15%;width:300px;margin:auto;margin-bottom:20px;position:relative}.illustration svg{width:100%;height:100%;max-height:40vh}.illustration [fill*='6c63ff']{fill:var(--color-primary-element)}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","import mod from \"-!../../node_modules/vue-style-loader/index.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=style&index=0&id=4c3113d6&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../node_modules/vue-style-loader/index.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=style&index=0&id=4c3113d6&lang=scss&scoped=true&\"","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".icon-confirm[data-v-4c3113d6]{transform:rotate(180deg)}.photos-navigation[data-v-4c3113d6]{display:flex;position:block;height:44px;padding:0 40px;align-items:center;max-width:100%}.photos-navigation__title[data-v-4c3113d6]{margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.photos-navigation__share[data-v-4c3113d6]{margin-left:10px}.photos-navigation__back[data-v-4c3113d6],.photos-navigation__share[data-v-4c3113d6]{flex-grow:0;flex-shrink:0}@media (min-width: 0px) and (max-width: 400px){.photos-navigation[data-v-4c3113d6]{top:14.66667px}.photos-navigation--root .photos-navigation__title[data-v-4c3113d6]{padding-left:-36px}}@media (min-width: 400px) and (max-width: 700px){.photos-navigation[data-v-4c3113d6]{top:14.66667px}.photos-navigation--root .photos-navigation__title[data-v-4c3113d6]{padding-left:-36px}}@media (min-width: 700px) and (max-width: 1024px){.photos-navigation[data-v-4c3113d6]{top:14.66667px}.photos-navigation__back[data-v-4c3113d6]{margin:0 0px}.photos-navigation--root .photos-navigation__title[data-v-4c3113d6]{padding-left:0px}}@media (min-width: 1024px) and (max-width: 1280px){.photos-navigation[data-v-4c3113d6]{top:14.66667px}.photos-navigation__back[data-v-4c3113d6]{margin:0 0px}.photos-navigation--root .photos-navigation__title[data-v-4c3113d6]{padding-left:0px}}@media (min-width: 1280px) and (max-width: 1440px){.photos-navigation[data-v-4c3113d6]{top:29.33333px}.photos-navigation__back[data-v-4c3113d6]{margin:0 11px}.photos-navigation--root .photos-navigation__title[data-v-4c3113d6]{padding-left:22px}}@media (min-width: 1440px) and (max-width: 1600px){.photos-navigation[data-v-4c3113d6]{top:29.33333px}.photos-navigation__back[data-v-4c3113d6]{margin:0 11px}.photos-navigation--root .photos-navigation__title[data-v-4c3113d6]{padding-left:22px}}@media (min-width: 1600px) and (max-width: 2048px){.photos-navigation[data-v-4c3113d6]{top:29.33333px}.photos-navigation__back[data-v-4c3113d6]{margin:0 11px}.photos-navigation--root .photos-navigation__title[data-v-4c3113d6]{padding-left:22px}}@media (min-width: 2048px) and (max-width: 2560px){.photos-navigation[data-v-4c3113d6]{top:29.33333px}.photos-navigation__back[data-v-4c3113d6]{margin:0 22px}.photos-navigation--root .photos-navigation__title[data-v-4c3113d6]{padding-left:44px}}@media (min-width: 2560px) and (max-width: 3440px){.photos-navigation[data-v-4c3113d6]{top:29.33333px}.photos-navigation__back[data-v-4c3113d6]{margin:0 22px}.photos-navigation--root .photos-navigation__title[data-v-4c3113d6]{padding-left:44px}}@media (min-width: 3440px){.photos-navigation[data-v-4c3113d6]{top:29.33333px}.photos-navigation__back[data-v-4c3113d6]{margin:0 22px}.photos-navigation--root .photos-navigation__title[data-v-4c3113d6]{padding-left:44px}}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","/**\n * @copyright Copyright (c) 2019 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 */\nconst props = `\n\t<oc:fileid />\n\t<d:getlastmodified />\n\t<d:getetag />\n\t<d:getcontenttype />\n\t<d:getcontentlength />\n\t<nc:has-preview />\n\t<oc:favorite />\n\t<d:resourcetype />`\n\nexport { props }\nexport default `<?xml version=\"1.0\"?>\n\t\t\t<d:propfind xmlns:d=\"DAV:\"\n\t\t\t\txmlns:oc=\"http://owncloud.org/ns\"\n\t\t\t\txmlns:nc=\"http://nextcloud.org/ns\"\n\t\t\t\txmlns:ocs=\"http://open-collaboration-services.org/ns\">\n\t\t\t\t<d:prop>\n\t\t\t\t\t${props}\n\t\t\t\t</d:prop>\n\t\t\t</d:propfind>`\n","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileVirtualGrid.vue?vue&type=style&index=0&id=5f893fc6&lang=scss&scoped=true&\");\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"9798e87c\", content, true, {});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SeparatorVirtualGrid.vue?vue&type=style&index=0&id=2aaee38e&lang=scss&scoped=true&\");\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"2883e8dc\", content, true, {});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Timeline.vue?vue&type=style&index=0&id=3c65684c&lang=scss&scoped=true&\");\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"ffa84a50\", content, true, {});","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n// for now we want to keep the same gap everywhere\nconst gap = 8\n\n/**\n * Define the max width proportions\n * The number (key) indicate the MAX size\n *\n * needs to be ompatible with webpack config\n * so no export default {}\n */\nmodule.exports = {\n\tsizes: {\n\t\t400: {\n\t\t\tmarginTop: 66, // same as grid-gap\n\t\t\tmarginW: gap, // same as grid-gap\n\t\t\tcount: 3,\n\t\t\tgap,\n\t\t},\n\t\t700: {\n\t\t\tmarginTop: 66,\n\t\t\tmarginW: 8, // same as grid-gap\n\t\t\tcount: 4,\n\t\t\tgap,\n\t\t},\n\t\t1024: {\n\t\t\tmarginTop: 66,\n\t\t\tmarginW: 44,\n\t\t\tcount: 5,\n\t\t\tgap,\n\t\t},\n\t\t1280: {\n\t\t\tmarginTop: 66,\n\t\t\tmarginW: 44,\n\t\t\tcount: 4,\n\t\t\tgap,\n\t\t},\n\t\t1440: {\n\t\t\tmarginTop: 88,\n\t\t\tmarginW: 66,\n\t\t\tcount: 5,\n\t\t\tgap,\n\t\t},\n\t\t1600: {\n\t\t\tmarginTop: 88,\n\t\t\tmarginW: 66,\n\t\t\tcount: 6,\n\t\t\tgap,\n\t\t},\n\t\t2048: {\n\t\t\tmarginTop: 88,\n\t\t\tmarginW: 66,\n\t\t\tcount: 7,\n\t\t\tgap,\n\t\t},\n\t\t2560: {\n\t\t\tmarginTop: 88,\n\t\t\tmarginW: 88,\n\t\t\tcount: 8,\n\t\t\tgap,\n\t\t},\n\t\t3440: {\n\t\t\tmarginTop: 88,\n\t\t\tmarginW: 88,\n\t\t\tcount: 9,\n\t\t\tgap,\n\t\t},\n\t\tmax: {\n\t\t\tmarginTop: 88,\n\t\t\tmarginW: 88,\n\t\t\tcount: 10,\n\t\t\tgap,\n\t\t},\n\t},\n}\n","var map = {\n\t\"./af\": 361,\n\t\"./af.js\": 361,\n\t\"./ar\": 362,\n\t\"./ar-dz\": 363,\n\t\"./ar-dz.js\": 363,\n\t\"./ar-kw\": 364,\n\t\"./ar-kw.js\": 364,\n\t\"./ar-ly\": 365,\n\t\"./ar-ly.js\": 365,\n\t\"./ar-ma\": 366,\n\t\"./ar-ma.js\": 366,\n\t\"./ar-sa\": 367,\n\t\"./ar-sa.js\": 367,\n\t\"./ar-tn\": 368,\n\t\"./ar-tn.js\": 368,\n\t\"./ar.js\": 362,\n\t\"./az\": 369,\n\t\"./az.js\": 369,\n\t\"./be\": 370,\n\t\"./be.js\": 370,\n\t\"./bg\": 371,\n\t\"./bg.js\": 371,\n\t\"./bm\": 372,\n\t\"./bm.js\": 372,\n\t\"./bn\": 373,\n\t\"./bn-bd\": 374,\n\t\"./bn-bd.js\": 374,\n\t\"./bn.js\": 373,\n\t\"./bo\": 375,\n\t\"./bo.js\": 375,\n\t\"./br\": 376,\n\t\"./br.js\": 376,\n\t\"./bs\": 377,\n\t\"./bs.js\": 377,\n\t\"./ca\": 378,\n\t\"./ca.js\": 378,\n\t\"./cs\": 379,\n\t\"./cs.js\": 379,\n\t\"./cv\": 380,\n\t\"./cv.js\": 380,\n\t\"./cy\": 381,\n\t\"./cy.js\": 381,\n\t\"./da\": 382,\n\t\"./da.js\": 382,\n\t\"./de\": 383,\n\t\"./de-at\": 384,\n\t\"./de-at.js\": 384,\n\t\"./de-ch\": 385,\n\t\"./de-ch.js\": 385,\n\t\"./de.js\": 383,\n\t\"./dv\": 386,\n\t\"./dv.js\": 386,\n\t\"./el\": 387,\n\t\"./el.js\": 387,\n\t\"./en-au\": 388,\n\t\"./en-au.js\": 388,\n\t\"./en-ca\": 389,\n\t\"./en-ca.js\": 389,\n\t\"./en-gb\": 390,\n\t\"./en-gb.js\": 390,\n\t\"./en-ie\": 391,\n\t\"./en-ie.js\": 391,\n\t\"./en-il\": 392,\n\t\"./en-il.js\": 392,\n\t\"./en-in\": 393,\n\t\"./en-in.js\": 393,\n\t\"./en-nz\": 394,\n\t\"./en-nz.js\": 394,\n\t\"./en-sg\": 395,\n\t\"./en-sg.js\": 395,\n\t\"./eo\": 396,\n\t\"./eo.js\": 396,\n\t\"./es\": 397,\n\t\"./es-do\": 398,\n\t\"./es-do.js\": 398,\n\t\"./es-mx\": 399,\n\t\"./es-mx.js\": 399,\n\t\"./es-us\": 400,\n\t\"./es-us.js\": 400,\n\t\"./es.js\": 397,\n\t\"./et\": 401,\n\t\"./et.js\": 401,\n\t\"./eu\": 402,\n\t\"./eu.js\": 402,\n\t\"./fa\": 403,\n\t\"./fa.js\": 403,\n\t\"./fi\": 404,\n\t\"./fi.js\": 404,\n\t\"./fil\": 405,\n\t\"./fil.js\": 405,\n\t\"./fo\": 406,\n\t\"./fo.js\": 406,\n\t\"./fr\": 407,\n\t\"./fr-ca\": 408,\n\t\"./fr-ca.js\": 408,\n\t\"./fr-ch\": 409,\n\t\"./fr-ch.js\": 409,\n\t\"./fr.js\": 407,\n\t\"./fy\": 410,\n\t\"./fy.js\": 410,\n\t\"./ga\": 411,\n\t\"./ga.js\": 411,\n\t\"./gd\": 412,\n\t\"./gd.js\": 412,\n\t\"./gl\": 413,\n\t\"./gl.js\": 413,\n\t\"./gom-deva\": 414,\n\t\"./gom-deva.js\": 414,\n\t\"./gom-latn\": 415,\n\t\"./gom-latn.js\": 415,\n\t\"./gu\": 416,\n\t\"./gu.js\": 416,\n\t\"./he\": 417,\n\t\"./he.js\": 417,\n\t\"./hi\": 418,\n\t\"./hi.js\": 418,\n\t\"./hr\": 419,\n\t\"./hr.js\": 419,\n\t\"./hu\": 420,\n\t\"./hu.js\": 420,\n\t\"./hy-am\": 421,\n\t\"./hy-am.js\": 421,\n\t\"./id\": 422,\n\t\"./id.js\": 422,\n\t\"./is\": 423,\n\t\"./is.js\": 423,\n\t\"./it\": 424,\n\t\"./it-ch\": 425,\n\t\"./it-ch.js\": 425,\n\t\"./it.js\": 424,\n\t\"./ja\": 426,\n\t\"./ja.js\": 426,\n\t\"./jv\": 427,\n\t\"./jv.js\": 427,\n\t\"./ka\": 428,\n\t\"./ka.js\": 428,\n\t\"./kk\": 429,\n\t\"./kk.js\": 429,\n\t\"./km\": 430,\n\t\"./km.js\": 430,\n\t\"./kn\": 431,\n\t\"./kn.js\": 431,\n\t\"./ko\": 432,\n\t\"./ko.js\": 432,\n\t\"./ku\": 433,\n\t\"./ku.js\": 433,\n\t\"./ky\": 434,\n\t\"./ky.js\": 434,\n\t\"./lb\": 435,\n\t\"./lb.js\": 435,\n\t\"./lo\": 436,\n\t\"./lo.js\": 436,\n\t\"./lt\": 437,\n\t\"./lt.js\": 437,\n\t\"./lv\": 438,\n\t\"./lv.js\": 438,\n\t\"./me\": 439,\n\t\"./me.js\": 439,\n\t\"./mi\": 440,\n\t\"./mi.js\": 440,\n\t\"./mk\": 441,\n\t\"./mk.js\": 441,\n\t\"./ml\": 442,\n\t\"./ml.js\": 442,\n\t\"./mn\": 443,\n\t\"./mn.js\": 443,\n\t\"./mr\": 444,\n\t\"./mr.js\": 444,\n\t\"./ms\": 445,\n\t\"./ms-my\": 446,\n\t\"./ms-my.js\": 446,\n\t\"./ms.js\": 445,\n\t\"./mt\": 447,\n\t\"./mt.js\": 447,\n\t\"./my\": 448,\n\t\"./my.js\": 448,\n\t\"./nb\": 449,\n\t\"./nb.js\": 449,\n\t\"./ne\": 450,\n\t\"./ne.js\": 450,\n\t\"./nl\": 451,\n\t\"./nl-be\": 452,\n\t\"./nl-be.js\": 452,\n\t\"./nl.js\": 451,\n\t\"./nn\": 453,\n\t\"./nn.js\": 453,\n\t\"./oc-lnc\": 454,\n\t\"./oc-lnc.js\": 454,\n\t\"./pa-in\": 455,\n\t\"./pa-in.js\": 455,\n\t\"./pl\": 456,\n\t\"./pl.js\": 456,\n\t\"./pt\": 457,\n\t\"./pt-br\": 458,\n\t\"./pt-br.js\": 458,\n\t\"./pt.js\": 457,\n\t\"./ro\": 459,\n\t\"./ro.js\": 459,\n\t\"./ru\": 460,\n\t\"./ru.js\": 460,\n\t\"./sd\": 461,\n\t\"./sd.js\": 461,\n\t\"./se\": 462,\n\t\"./se.js\": 462,\n\t\"./si\": 463,\n\t\"./si.js\": 463,\n\t\"./sk\": 464,\n\t\"./sk.js\": 464,\n\t\"./sl\": 465,\n\t\"./sl.js\": 465,\n\t\"./sq\": 466,\n\t\"./sq.js\": 466,\n\t\"./sr\": 467,\n\t\"./sr-cyrl\": 468,\n\t\"./sr-cyrl.js\": 468,\n\t\"./sr.js\": 467,\n\t\"./ss\": 469,\n\t\"./ss.js\": 469,\n\t\"./sv\": 470,\n\t\"./sv.js\": 470,\n\t\"./sw\": 471,\n\t\"./sw.js\": 471,\n\t\"./ta\": 472,\n\t\"./ta.js\": 472,\n\t\"./te\": 473,\n\t\"./te.js\": 473,\n\t\"./tet\": 474,\n\t\"./tet.js\": 474,\n\t\"./tg\": 475,\n\t\"./tg.js\": 475,\n\t\"./th\": 476,\n\t\"./th.js\": 476,\n\t\"./tk\": 477,\n\t\"./tk.js\": 477,\n\t\"./tl-ph\": 478,\n\t\"./tl-ph.js\": 478,\n\t\"./tlh\": 479,\n\t\"./tlh.js\": 479,\n\t\"./tr\": 480,\n\t\"./tr.js\": 480,\n\t\"./tzl\": 481,\n\t\"./tzl.js\": 481,\n\t\"./tzm\": 482,\n\t\"./tzm-latn\": 483,\n\t\"./tzm-latn.js\": 483,\n\t\"./tzm.js\": 482,\n\t\"./ug-cn\": 484,\n\t\"./ug-cn.js\": 484,\n\t\"./uk\": 485,\n\t\"./uk.js\": 485,\n\t\"./ur\": 486,\n\t\"./ur.js\": 486,\n\t\"./uz\": 487,\n\t\"./uz-latn\": 488,\n\t\"./uz-latn.js\": 488,\n\t\"./uz.js\": 487,\n\t\"./vi\": 489,\n\t\"./vi.js\": 489,\n\t\"./x-pseudo\": 490,\n\t\"./x-pseudo.js\": 490,\n\t\"./yo\": 491,\n\t\"./yo.js\": 491,\n\t\"./zh-cn\": 492,\n\t\"./zh-cn.js\": 492,\n\t\"./zh-hk\": 493,\n\t\"./zh-hk.js\": 493,\n\t\"./zh-mo\": 494,\n\t\"./zh-mo.js\": 494,\n\t\"./zh-tw\": 495,\n\t\"./zh-tw.js\": 495\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 665;","import mod from \"-!../../node_modules/vue-style-loader/index.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileVirtualGrid.vue?vue&type=style&index=0&id=5f893fc6&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../node_modules/vue-style-loader/index.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileVirtualGrid.vue?vue&type=style&index=0&id=5f893fc6&lang=scss&scoped=true&\"","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".file[data-v-5f893fc6],.folder[data-v-5f893fc6]{position:relative;display:flex;align-items:center;justify-content:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:var(--border-radius);overflow:hidden}.file .cover[data-v-5f893fc6],.folder .cover[data-v-5f893fc6]{z-index:2;width:100%;padding-bottom:100%;transition:opacity var(--animation-quick) ease-in-out;opacity:0;background-color:var(--color-main-text)}.file.active .cover[data-v-5f893fc6],.file:active .cover[data-v-5f893fc6],.file:hover .cover[data-v-5f893fc6],.file:focus .cover[data-v-5f893fc6],.folder.active .cover[data-v-5f893fc6],.folder:active .cover[data-v-5f893fc6],.folder:hover .cover[data-v-5f893fc6],.folder:focus .cover[data-v-5f893fc6]{opacity:.3}.file--clear.active .cover[data-v-5f893fc6],.file--clear:active .cover[data-v-5f893fc6],.file--clear:hover .cover[data-v-5f893fc6],.file--clear:focus .cover[data-v-5f893fc6],.folder--clear.active .cover[data-v-5f893fc6],.folder--clear:active .cover[data-v-5f893fc6],.folder--clear:hover .cover[data-v-5f893fc6],.folder--clear:focus .cover[data-v-5f893fc6]{opacity:.1}.fade-enter-active[data-v-5f893fc6],.fade-leave-active[data-v-5f893fc6]{transition:opacity var(--animation-quick) ease-in-out}.fade-enter[data-v-5f893fc6],.fade-leave-to[data-v-5f893fc6]{opacity:0}.icon-video-white[data-v-5f893fc6]{position:absolute;top:10px;right:10px;z-index:5}img[data-v-5f893fc6]{position:absolute;width:100%;height:100%;-o-object-fit:cover;object-fit:cover}svg[data-v-5f893fc6]{position:absolute;width:70%;height:70%}.file--clear[data-v-5f893fc6]{background:var(--color-background-hover)}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","import mod from \"-!../../node_modules/vue-style-loader/index.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SeparatorVirtualGrid.vue?vue&type=style&index=0&id=2aaee38e&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../node_modules/vue-style-loader/index.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SeparatorVirtualGrid.vue?vue&type=style&index=0&id=2aaee38e&lang=scss&scoped=true&\"","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".grid-title[data-v-2aaee38e]{grid-column:1/8;padding:48px 0 12px 0;background:#fff;margin:0}.grid-title span[data-v-2aaee38e]{font-weight:normal}.grid-title.first-title[data-v-2aaee38e]{padding:0 0 12px 0}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","import mod from \"-!../../node_modules/vue-style-loader/index.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Timeline.vue?vue&type=style&index=0&id=3c65684c&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../node_modules/vue-style-loader/index.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Timeline.vue?vue&type=style&index=0&id=3c65684c&lang=scss&scoped=true&\"","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"@media (min-width: 0px) and (max-width: 400px){.grid-container[data-v-3c65684c]{padding:66px 8px 8px 8px}}@media (min-width: 400px) and (max-width: 700px){.grid-container[data-v-3c65684c]{padding:66px 8px 8px 8px}}@media (min-width: 700px) and (max-width: 1024px){.grid-container[data-v-3c65684c]{padding:66px 44px 44px 44px}}@media (min-width: 1024px) and (max-width: 1280px){.grid-container[data-v-3c65684c]{padding:66px 44px 44px 44px}}@media (min-width: 1280px) and (max-width: 1440px){.grid-container[data-v-3c65684c]{padding:88px 66px 66px 66px}}@media (min-width: 1440px) and (max-width: 1600px){.grid-container[data-v-3c65684c]{padding:88px 66px 66px 66px}}@media (min-width: 1600px) and (max-width: 2048px){.grid-container[data-v-3c65684c]{padding:88px 66px 66px 66px}}@media (min-width: 2048px) and (max-width: 2560px){.grid-container[data-v-3c65684c]{padding:88px 88px 88px 88px}}@media (min-width: 2560px) and (max-width: 3440px){.grid-container[data-v-3c65684c]{padding:88px 88px 88px 88px}}@media (min-width: 3440px){.grid-container[data-v-3c65684c]{padding:88px 88px 88px 88px}}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.error === 404)?_c('EmptyContent',{attrs:{\"illustration-name\":\"folder\"}},[_vm._v(\"\\n\\t\"+_vm._s(_vm.t('photos', 'This folder does not exists'))+\"\\n\")]):(_vm.error)?_c('EmptyContent',[_vm._v(\"\\n\\t\"+_vm._s(_vm.t('photos', 'An error occurred'))+\"\\n\")]):(!_vm.loading)?_c('div',[(_vm.isEmpty)?_c('Navigation',{key:\"navigation\",attrs:{\"basename\":_vm.path,\"filename\":'/',\"root-title\":_vm.rootTitle}}):_vm._e(),_vm._v(\" \"),(_vm.isEmpty)?_c('EmptyContent',{attrs:{\"illustration-name\":\"empty\"}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('photos', 'No photos in here'))+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"grid-container\"},[_c('VirtualGrid',{ref:\"virtualgrid\",attrs:{\"update-function\":_vm.getContent,\"get-column-count\":function () { return _vm.gridConfig.count; },\"get-grid-gap\":function () { return _vm.gridConfig.gap; },\"update-trigger-margin\":700}})],1)],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 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\nimport { genFileInfo } from '../utils/fileUtils'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport allowedMimes from './AllowedMimes'\nimport client from './DavClient'\nimport { props } from './DavRequest'\nimport { sizes } from '../assets/grid-sizes'\n\n/**\n * List files from a folder and filter out unwanted mimes\n *\n * @param {boolean} [onlyFavorites=false] not used\n * @param {Object} [options] used for the cancellable requests\n * @param {number} [options.page=0] which page to start (starts at 0)\n * @param {number} [options.perPage] how many to display per page default is 5 times the max number per line from the grid-sizes config file\n * @param {boolean} [options.full=false] get full data of the files\n * @returns {Array} the file list\n */\nexport default async function(onlyFavorites = false, options = {}) {\n\t// default function options\n\toptions = Object.assign({}, {\n\t\tpage: 0, // start at the first page\n\t\tperPage: sizes.max.count * 10, // ten rows of the max width\n\t}, options)\n\n\tconst prefixPath = `/files/${getCurrentUser().uid}`\n\n\t// generating the search or condition\n\t// based on the allowed mimetypes\n\tconst orMime = allowedMimes.reduce((str, mime) => `${str}\n\t\t<d:eq>\n\t\t\t<d:prop>\n\t\t\t\t<d:getcontenttype/>\n\t\t\t</d:prop>\n\t\t\t<d:literal>${mime}</d:literal>\n\t\t</d:eq>\n\t`, '')\n\n\tconst eqFavorites = onlyFavorites\n\t\t? `<d:eq>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<oc:favorite/>\n\t\t\t\t</d:prop>\n\t\t\t\t<d:literal>1</d:literal>\n\t\t\t</d:eq>`\n\t\t: ''\n\n\toptions = Object.assign({\n\t\tmethod: 'SEARCH',\n\t\theaders: {\n\t\t\t'content-Type': 'text/xml',\n\t\t},\n\t\tdata: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\t\t\t<d:searchrequest xmlns:d=\"DAV:\"\n\t\t\t\txmlns:oc=\"http://owncloud.org/ns\"\n\t\t\t\txmlns:nc=\"http://nextcloud.org/ns\"\n\t\t\t\txmlns:ns=\"https://github.com/icewind1991/SearchDAV/ns\"\n\t\t\t\txmlns:ocs=\"http://open-collaboration-services.org/ns\">\n\t\t\t\t<d:basicsearch>\n\t\t\t\t\t<d:select>\n\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t${props}\n\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t</d:select>\n\t\t\t\t\t<d:from>\n\t\t\t\t\t\t<d:scope>\n\t\t\t\t\t\t\t<d:href>${prefixPath}</d:href>\n\t\t\t\t\t\t\t<d:depth>infinity</d:depth>\n\t\t\t\t\t\t</d:scope>\n\t\t\t\t\t</d:from>\n\t\t\t\t\t<d:where>\n\t\t\t\t\t\t<d:and>\n\t\t\t\t\t\t\t<d:or>\n\t\t\t\t\t\t\t\t${orMime}\n\t\t\t\t\t\t\t</d:or>\n\t\t\t\t\t\t\t${eqFavorites}\n\t\t\t\t\t\t\t<d:eq>\n\t\t\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t\t\t<oc:owner-id/>\n\t\t\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t\t\t\t<d:literal>${getCurrentUser().uid}</d:literal>\n\t\t\t\t\t\t\t</d:eq>\n\t\t\t\t\t\t</d:and>\n\t\t\t\t\t</d:where>\n\t\t\t\t\t<d:orderby>\n\t\t\t\t\t\t<d:order>\n\t\t\t\t\t\t\t<d:prop><d:getlastmodified/></d:prop>\n\t\t\t\t\t\t\t<d:descending/>\n\t\t\t\t\t\t</d:order>\n\t\t\t\t\t</d:orderby>\n\t\t\t\t\t<d:limit>\n\t\t\t\t\t\t<d:nresults>${options.perPage}</d:nresults>\n\t\t\t\t\t\t<ns:firstresult>${options.page * options.perPage}</ns:firstresult>\n\t\t\t\t\t</d:limit>\n\t\t\t\t</d:basicsearch>\n\t\t\t</d:searchrequest>`,\n\t\tdeep: true,\n\t\tdetails: true,\n\t}, options)\n\n\tconst response = await client.getDirectoryContents('', options)\n\n\treturn response.data\n\t\t.map(data => genFileInfo(data))\n\t\t// remove prefix path from full file path\n\t\t.map(data => Object.assign({}, data, { filename: data.filename.replace(prefixPath, '') }))\n\n}\n","\n<template>\n\t<a :class=\"{'file--clear': !loaded}\"\n\t\tclass=\"file\"\n\t\t:href=\"davPath\"\n\t\t:aria-label=\"ariaLabel\"\n\t\t@click.prevent=\"openViewer\">\n\t\t<div v-if=\"item.injected.mime.includes('video') && hasPreview\" class=\"icon-video-white\" />\n\t\t<!-- image and loading placeholder -->\n\t\t<transition name=\"fade\">\n\t\t\t<img v-show=\"loaded\"\n\t\t\t\tref=\"img\"\n\t\t\t\t:src=\"src\"\n\t\t\t\t:alt=\"item.injected.basename\"\n\t\t\t\t:aria-describedby=\"ariaUuid\"\n\t\t\t\t@load=\"onLoad\">\n\t\t</transition>\n\t\t<svg v-if=\"!loaded\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\tviewBox=\"0 0 32 32\"\n\t\t\tfill=\"url(#placeholder__gradient)\">\n\t\t\t<use v-if=\"isImage\" xlink:href=\"#placeholder--img\" />\n\t\t\t<use v-else xlink:href=\"#placeholder--video\" />\n\t\t</svg>\n\n\t\t<!-- image name and cover -->\n\t\t<p :id=\"ariaUuid\" class=\"hidden-visually\">{{ item.injected.basename }}</p>\n\t\t<div class=\"cover\" role=\"none\" />\n\t</a>\n</template>\n\n<script>\nimport { generateRemoteUrl, generateUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\n\nexport default {\n\tname: 'FileVirtualGrid',\n\tinheritAttrs: false,\n\n\tprops: {\n\t\titem: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloaded: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tdavPath() {\n\t\t\treturn generateRemoteUrl(`dav/files/${getCurrentUser().uid}`) + this.item.injected.filename\n\t\t},\n\t\tariaUuid() {\n\t\t\treturn `image-${this.item.injected.fileid}`\n\t\t},\n\t\tariaLabel() {\n\t\t\treturn t('photos', 'Open the full size \"{name}\" image', { name: this.item.injected.basename })\n\t\t},\n\t\tisImage() {\n\t\t\treturn this.item.injected.mime.startsWith('image')\n\t\t},\n\t\tsrc() {\n\t\t\treturn generateUrl(`/core/preview?fileId=${this.item.injected.fileid}&x=${256}&y=${256}&a=false&v=${this.item.injected.etag}`)\n\t\t},\n\t},\n\n\tbeforeDestroy() {\n\t\t// cancel any pending load\n\t\tthis.$refs.src = ''\n\t},\n\n\tmethods: {\n\t\topenViewer() {\n\t\t\tOCA.Viewer.open({\n\t\t\t\tpath: this.item.injected.filename,\n\t\t\t\tlist: this.filterOnlyViewableFiles(this.item.injected.list()),\n\t\t\t\tloadMore: async() => this.filterOnlyViewableFiles(await this.item.injected.loadMore()),\n\t\t\t})\n\t\t},\n\n\t\t/** When the image is fully loaded by browser we remove the placeholder */\n\t\tonLoad() {\n\t\t\tthis.loaded = true\n\t\t},\n\n\t\t/** Function to remove all elements in the list that are not images/videos (such as titles)\n\t\t * @param {Array} list List of elements\n\t\t * @returns {Array} List of elements that can be rendered by viewer\n\t\t */\n\t\tfilterOnlyViewableFiles(list) {\n\t\t\treturn list.filter(item => item.injected.filename).map(item => item.injected)\n\t\t},\n\t},\n\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../mixins/FileFolder.scss';\n\n.icon-video-white {\n\tposition: absolute;\n\ttop: 10px;\n\tright: 10px;\n\tz-index: 5;\n}\n\nimg {\n\tposition: absolute;\n\twidth: 100%;\n\theight: 100%;\n\n\tobject-fit: cover;\n}\n\nsvg {\n\tposition: absolute;\n\twidth: 70%;\n\theight: 70%;\n}\n\n.file--clear {\n\tbackground: var(--color-background-hover);\n}\n</style>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileVirtualGrid.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!./FileVirtualGrid.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./FileVirtualGrid.vue?vue&type=template&id=5f893fc6&scoped=true&\"\nimport script from \"./FileVirtualGrid.vue?vue&type=script&lang=js&\"\nexport * from \"./FileVirtualGrid.vue?vue&type=script&lang=js&\"\nimport style0 from \"./FileVirtualGrid.vue?vue&type=style&index=0&id=5f893fc6&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 \"5f893fc6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{staticClass:\"file\",class:{'file--clear': !_vm.loaded},attrs:{\"href\":_vm.davPath,\"aria-label\":_vm.ariaLabel},on:{\"click\":function($event){$event.preventDefault();return _vm.openViewer($event)}}},[(_vm.item.injected.mime.includes('video') && _vm.hasPreview)?_c('div',{staticClass:\"icon-video-white\"}):_vm._e(),_vm._v(\" \"),_c('transition',{attrs:{\"name\":\"fade\"}},[_c('img',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.loaded),expression:\"loaded\"}],ref:\"img\",attrs:{\"src\":_vm.src,\"alt\":_vm.item.injected.basename,\"aria-describedby\":_vm.ariaUuid},on:{\"load\":_vm.onLoad}})]),_vm._v(\" \"),(!_vm.loaded)?_c('svg',{attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 32 32\",\"fill\":\"url(#placeholder__gradient)\"}},[(_vm.isImage)?_c('use',{attrs:{\"xlink:href\":\"#placeholder--img\"}}):_c('use',{attrs:{\"xlink:href\":\"#placeholder--video\"}})]):_vm._e(),_vm._v(\" \"),_c('p',{staticClass:\"hidden-visually\",attrs:{\"id\":_vm.ariaUuid}},[_vm._v(_vm._s(_vm.item.injected.basename))]),_vm._v(\" \"),_c('div',{staticClass:\"cover\",attrs:{\"role\":\"none\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SeparatorVirtualGrid.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!./SeparatorVirtualGrid.vue?vue&type=script&lang=js&\"","<template>\n\t<h2 class=\"grid-title\" :style=\"{height: item.height + 'px'}\">\n\t\t{{ item.injected.month }}\n\t\t<span>{{ item.injected.year }}</span>\n\t</h2>\n</template>\n\n<script>\nexport default {\n\tname: 'SeparatorVirtualGrid',\n\n\tinheritAttrs: false,\n\n\tprops: {\n\t\titem: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.grid-title {\n\tgrid-column: 1/8;\n\tpadding: 48px 0 12px 0;\n\tbackground:#fff;\n\tmargin: 0;\n\tspan {\n\t\tfont-weight: normal;\n\t}\n\t&.first-title {\n\t\tpadding: 0 0 12px 0;\n\t}\n}\n</style>\n","import { render, staticRenderFns } from \"./SeparatorVirtualGrid.vue?vue&type=template&id=2aaee38e&scoped=true&\"\nimport script from \"./SeparatorVirtualGrid.vue?vue&type=script&lang=js&\"\nexport * from \"./SeparatorVirtualGrid.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SeparatorVirtualGrid.vue?vue&type=style&index=0&id=2aaee38e&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 \"2aaee38e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('h2',{staticClass:\"grid-title\",style:({height: _vm.item.height + 'px'})},[_vm._v(\"\\n\\t\"+_vm._s(_vm.item.injected.month)+\"\\n\\t\"),_c('span',[_vm._v(_vm._s(_vm.item.injected.year))])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 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\nimport Vue from 'vue'\nimport { sizes } from '../assets/grid-sizes'\n\nexport default new Vue({\n\tdata() {\n\t\treturn {\n\t\t\tgridConfig: sizes.max,\n\t\t}\n\t},\n\twatch: {\n\t\tgridConfig(val) {\n\t\t\tthis.$emit('changed', val)\n\t\t},\n\t},\n\tcreated() {\n\t\twindow.addEventListener('resize', this.handleWindowResize)\n\t\tthis.handleWindowResize()\n\t},\n\tbeforeDestroy() {\n\t\twindow.removeEventListener('resize', this.handleWindowResize)\n\t},\n\tmethods: {\n\t\thandleWindowResize() {\n\t\t\t// find the first grid size that fit the current window width\n\t\t\tconst currentSize = Object.keys(sizes).find(size => size > document.documentElement.clientWidth)\n\t\t\tthis.gridConfig = sizes[currentSize]\n\t\t},\n\t},\n})\n","/**\n * @copyright Copyright (c) 2018 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\nimport getGridConfig from '../services/GridConfig'\n\n/**\n * Get the current used grid config\n */\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tgridConfig: {},\n\t\t}\n\t},\n\n\tcreated() {\n\t\tgetGridConfig.$on('changed', val => {\n\t\t\tthis.gridConfig = val\n\t\t})\n\t\tconsole.debug('Current grid config', getGridConfig.gridConfig)\n\t\tthis.gridConfig = getGridConfig.gridConfig\n\t},\n\n\tbeforeDestroy() {\n\t\tgetGridConfig.$off('changed', this.gridConfig)\n\t},\n}\n","<!--\n - @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<!-- Errors handlers-->\n\t<EmptyContent v-if=\"error === 404\" illustration-name=\"folder\">\n\t\t{{ t('photos', 'This folder does not exists') }}\n\t</EmptyContent>\n\t<EmptyContent v-else-if=\"error\">\n\t\t{{ t('photos', 'An error occurred') }}\n\t</EmptyContent>\n\n\t<!-- Folder content -->\n\t<div v-else-if=\"!loading\">\n\t\t<Navigation\n\t\t\tv-if=\"isEmpty\"\n\t\t\tkey=\"navigation\"\n\t\t\t:basename=\"path\"\n\t\t\t:filename=\"'/'\"\n\t\t\t:root-title=\"rootTitle\" />\n\n\t\t<EmptyContent v-if=\"isEmpty\" illustration-name=\"empty\">\n\t\t\t{{ t('photos', 'No photos in here') }}\n\t\t</EmptyContent>\n\n\t\t<div class=\"grid-container\">\n\t\t\t<VirtualGrid\n\t\t\t\tref=\"virtualgrid\"\n\t\t\t\t:update-function=\"getContent\"\n\t\t\t\t:get-column-count=\"() => gridConfig.count\"\n\t\t\t\t:get-grid-gap=\"() => gridConfig.gap\"\n\t\t\t\t:update-trigger-margin=\"700\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport * as moment from 'moment'\n\nimport getPhotos from '../services/PhotoSearch'\n\nimport EmptyContent from '../components/EmptyContent'\nimport FileVirtualGrid from '../components/FileVirtualGrid'\nimport SeparatorVirtualGrid from '../components/SeparatorVirtualGrid'\nimport VirtualGrid from 'vue-virtual-grid'\nimport Navigation from '../components/Navigation'\n\nimport cancelableRequest from '../utils/CancelableRequest'\nimport GridConfigMixin from '../mixins/GridConfig'\n\nexport default {\n\tname: 'Timeline',\n\tcomponents: {\n\t\tEmptyContent,\n\t\tVirtualGrid,\n\t\tNavigation,\n\t},\n\tmixins: [GridConfigMixin],\n\tprops: {\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tonlyFavorites: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\trootTitle: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tpath: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tcancelRequest: null,\n\t\t\tdone: false,\n\t\t\terror: null,\n\t\t\tloadingPage: false,\n\t\t\tisEmpty: false,\n\t\t\tlastSection: '',\n\t\t}\n\t},\n\n\twatch: {\n\t\tasync onlyFavorites() {\n\t\t\t// reset component\n\t\t\tthis.resetState()\n\t\t},\n\t},\n\n\tasync beforeMount() {\n\t\tthis.$emit('update:loading', false)\n\t\tthis.loadingPage = false\n\t},\n\n\tbeforeDestroy() {\n\t\t// cancel any pending requests\n\t\tif (this.cancelRequest) {\n\t\t\tthis.cancelRequest('Changed view')\n\t\t}\n\t},\n\n\tmethods: {\n\t\tasync getContent(params) {\n\t\t\tif (this.done) {\n\t\t\t\treturn Promise.resolve([])\n\t\t\t}\n\n\t\t\t// cancel any pending requests\n\t\t\tif (this.cancelRequest) {\n\t\t\t\tthis.cancelRequest('Changed view')\n\t\t\t}\n\n\t\t\t// done loading even with errors\n\t\t\tconst { request, cancel } = cancelableRequest(getPhotos)\n\t\t\tthis.cancelRequest = cancel\n\n\t\t\tconst numberOfImagesPerBatch = this.gridConfig.count * 5 // loading 5 rows\n\n\t\t\ttry {\n\t\t\t\t// Load next batch of images\n\t\t\t\tconst files = await request(this.onlyFavorites, {\n\t\t\t\t\tpage: params.offset, // offset is incremented +1 by the virtualgrid lib\n\t\t\t\t\tperPage: numberOfImagesPerBatch,\n\t\t\t\t})\n\n\t\t\t\t// If first batch of images is empty, there is no images\n\t\t\t\tif (files.length === params.offset === 0) {\n\t\t\t\t\tthis.isEmpty = true\n\t\t\t\t}\n\n\t\t\t\t// If we get less files than requested that means we got to the end\n\t\t\t\tif (files.length !== numberOfImagesPerBatch) {\n\t\t\t\t\tthis.done = true\n\t\t\t\t}\n\n\t\t\t\t/** The goal of this flat map is to return an array of images separated by titles (months)\n\t\t\t\t * ie: [{month1}, {image1}, {image2}, {month2}, {image3}, {image4}, {image5}]\n\t\t\t\t * First we get the current month+year of the image\n\t\t\t\t * We compare it to the previous image month+year\n\t\t\t\t * If there is a difference we have to insert a title object before the current image\n\t\t\t\t * If it's equal we just add the current image to the array\n\t\t\t\t * Note: the injected param of objects are used to pass custom params to the grid lib\n\t\t\t\t * In our case injected could be an image/video (aka file) or a title (year/month)\n\t\t\t\t * Note2: titles are rendered full width and images are rendered on 1 column and 256x256 ratio\n\t\t\t\t */\n\t\t\t\treturn files.flatMap((file, index) => {\n\t\t\t\t\tconst finalArray = []\n\t\t\t\t\tconst currentSection = this.getFormatedDate(file.lastmod, 'YYYY MMMM')\n\t\t\t\t\tif (\n\t\t\t\t\t\tcurrentSection\n\t\t\t\t\t\t!== this.getFormatedDate(files[index - 1]?.lastmod, 'YYYY MMMM')\n\t\t\t\t\t\t&& (this.lastSection !== currentSection)\n\t\t\t\t\t) {\n\t\t\t\t\t\tfinalArray.push({\n\t\t\t\t\t\t\tid: `title-${index}`,\n\t\t\t\t\t\t\tinjected: {\n\t\t\t\t\t\t\t\tyear: this.getFormatedDate(file.lastmod, 'YYYY'),\n\t\t\t\t\t\t\t\tmonth: this.getFormatedDate(file.lastmod, 'MMMM'),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\theight: 90,\n\t\t\t\t\t\t\tcolumnSpan: 0, // means full width\n\t\t\t\t\t\t\tnewRow: true,\n\t\t\t\t\t\t\trenderComponent: SeparatorVirtualGrid,\n\t\t\t\t\t\t})\n\t\t\t\t\t\tthis.lastSection = currentSection // we keep track of the last section for the next batch\n\t\t\t\t\t}\n\t\t\t\t\tfinalArray.push({\n\t\t\t\t\t\tid: `img-${file.fileid}`,\n\t\t\t\t\t\tinjected: {\n\t\t\t\t\t\t\t...file,\n\t\t\t\t\t\t\tlist: this.$refs.virtualgrid.getCurrentItems,\n\t\t\t\t\t\t\tloadMore: this.$refs.virtualgrid.loadMoreData,\n\t\t\t\t\t\t},\n\t\t\t\t\t\twidth: 256,\n\t\t\t\t\t\theight: 256,\n\t\t\t\t\t\tcolumnSpan: 1,\n\t\t\t\t\t\trenderComponent: FileVirtualGrid,\n\t\t\t\t\t})\n\t\t\t\t\treturn finalArray\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\tif (error.response && error.response.status) {\n\t\t\t\t\tif (error.response.status === 404) {\n\t\t\t\t\t\tthis.error = 404\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tthis.$router.push({ name: this.$route.name })\n\t\t\t\t\t\t}, 3000)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.error = error\n\t\t\t\t\t}\n\t\t\t\t} else if (params.offset === 0) { // if we get an error at first batch we assume list is empty\n\t\t\t\t\tthis.isEmpty = true\n\t\t\t\t}\n\n\t\t\t\t// cancelled request, moving on...\n\t\t\t\tconsole.error('Error fetching timeline', error)\n\t\t\t\treturn Promise.resolve([])\n\t\t\t} finally {\n\t\t\t\t// done loading even with errors\n\t\t\t\tthis.$emit('update:loading', false)\n\t\t\t\tthis.loadingPage = false\n\t\t\t\tthis.cancelRequest = null\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Reset this component data to a pristine state\n\t\t */\n\t\tresetState() {\n\t\t\tthis.$store.dispatch('resetTimeline')\n\t\t\tthis.done = false\n\t\t\tthis.isEmpty = false\n\t\t\tthis.error = null\n\t\t\tthis.loadingPage = false\n\t\t\tthis.$refs.virtualgrid.resetGrid()\n\t\t},\n\n\t\tgetFormatedDate(string, format) {\n\t\t\treturn moment(string).format(format)\n\t\t},\n\n\t},\n\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$previous: 0;\n@each $size, $config in get('sizes') {\n\t$marginTop: map-get($config, 'marginTop');\n\t$marginW: map-get($config, 'marginW');\n\t// if this is the last entry, only use min-width\n\t$rule: '(min-width: #{$previous}px) and (max-width: #{$size}px)';\n\t@if $size == 'max' {\n\t\t$rule: '(min-width: #{$previous}px)';\n\t}\n\t@media #{$rule} {\n\t\t.grid-container {\n\t\t\tpadding: #{$marginTop}px #{$marginW}px #{$marginW}px #{$marginW}px;\n\t\t}\n\t}\n\t$previous: $size;\n}\n</style>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Timeline.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!./Timeline.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Timeline.vue?vue&type=template&id=3c65684c&scoped=true&\"\nimport script from \"./Timeline.vue?vue&type=script&lang=js&\"\nexport * from \"./Timeline.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Timeline.vue?vue&type=style&index=0&id=3c65684c&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 \"3c65684c\",\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///./src/patchedRequest.js","webpack:///./src/components/EmptyContent.vue?10c4","webpack:///./src/components/Navigation.vue?cad9","webpack:///./src/utils/CancelableRequest.js","webpack:///./src/services/AllowedMimes.js","webpack:///./src/services/DavClient.js","webpack:///src/components/EmptyContent.vue","webpack:///./src/components/EmptyContent.vue?ff18","webpack:///./src/components/EmptyContent.vue","webpack:///./src/components/EmptyContent.vue?9bb1","webpack:///./src/components/Navigation.vue?0cf3","webpack:///./src/components/Navigation.vue?4411","webpack:///src/components/Navigation.vue","webpack:///./src/components/Navigation.vue","webpack:///./src/assets/Illustrations lazy ^\\.\\/.*\\.svg$ namespace object","webpack:///./src/components/EmptyContent.vue?b182","webpack:///./src/components/EmptyContent.vue?6200","webpack:///./src/components/Navigation.vue?49db","webpack:///./src/components/Navigation.vue?f149","webpack:///./src/services/DavRequest.js","webpack:///./src/components/FileVirtualGrid.vue?39ab","webpack:///./src/components/SeparatorVirtualGrid.vue?50f5","webpack:///./src/views/Timeline.vue?9edf","webpack:///./src/assets/grid-sizes.js","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./src/components/FileVirtualGrid.vue?823c","webpack:///./src/components/FileVirtualGrid.vue?851b","webpack:///./src/components/SeparatorVirtualGrid.vue?b7e7","webpack:///./src/components/SeparatorVirtualGrid.vue?44e4","webpack:///./src/views/Timeline.vue?3775","webpack:///./src/views/Timeline.vue?6de6","webpack:///./src/views/Timeline.vue?83b1","webpack:///./src/services/PhotoSearch.js","webpack:///src/components/FileVirtualGrid.vue","webpack:///./src/components/FileVirtualGrid.vue?950a","webpack:///./src/components/FileVirtualGrid.vue","webpack:///./src/components/FileVirtualGrid.vue?f955","webpack:///./src/components/SeparatorVirtualGrid.vue?bd8e","webpack:///src/components/SeparatorVirtualGrid.vue","webpack:///./src/components/SeparatorVirtualGrid.vue","webpack:///./src/components/SeparatorVirtualGrid.vue?4181","webpack:///./src/services/GridConfig.js","webpack:///./src/mixins/GridConfig.js","webpack:///src/views/Timeline.vue","webpack:///./src/views/Timeline.vue?21b8","webpack:///./src/views/Timeline.vue"],"names":["request","require","oldPrepareRequestOptions","prepareRequestOptions","requestOptions","methodOptions","cancelToken","method","module","exports","content","i","locals","add","default","CancelableRequest","axios","CancelToken","source","url","options","Object","assign","token","cancel","mimes","loadState","webdav","getPatcher","patch","remote","generateRemoteUrl","client","createClient","parseUrl","pathname","component","_vm","this","_h","$createElement","_c","_self","staticClass","domProps","_s","illustration","_v","_t","directives","name","rawName","value","$slots","expression","_e","class","isRoot","attrs","on","folderUp","backToText","showActions","showSidebar","t","map","webpackAsyncContext","req","__webpack_require__","o","Promise","resolve","then","e","Error","code","ids","id","keys","___CSS_LOADER_API_IMPORT___","push","props","sizes","400","marginTop","marginW","count","gap","700","1024","1280","1440","1600","2048","2560","3440","max","webpackContext","webpackContextResolve","onlyFavorites","page","perPage","prefixPath","getCurrentUser","uid","orMime","allowedMimes","reduce","str","mime","eqFavorites","headers","data","deep","details","getDirectoryContents","response","genFileInfo","filename","replace","loaded","davPath","ariaLabel","$event","preventDefault","openViewer","item","injected","includes","hasPreview","ref","src","basename","ariaUuid","onLoad","style","height","month","year","Vue","gridConfig","watch","val","$emit","created","window","addEventListener","handleWindowResize","beforeDestroy","removeEventListener","methods","currentSize","find","size","document","documentElement","clientWidth","getGridConfig","$on","console","debug","$off","error","loading","key","path","rootTitle","getContent"],"mappings":"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","file":"photos-5.js?v=4f33891f74daebf6be7d","sourcesContent":["/**\n * @copyright Copyright (c) 2019 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\nconst request = require('webdav/dist/node/request')\n\nconst oldPrepareRequestOptions = request.prepareRequestOptions\n\n// While we wait for official cancellable webdav requests\n// https://github.com/perry-mitchell/webdav-client/issues/179\n// let's properly forward our axios options through webdav to axios\n\nrequest.prepareRequestOptions = function(requestOptions, methodOptions) {\n\t// add our cancelToken support\n\tif (methodOptions.cancelToken && typeof methodOptions.cancelToken === 'object') {\n\t\trequestOptions.cancelToken = methodOptions.cancelToken\n\t}\n\n\t// exploit old method\n\toldPrepareRequestOptions(requestOptions, methodOptions)\n\n\t// allow us to override the request method\n\tif (methodOptions.method && typeof methodOptions.method === 'string') {\n\t\trequestOptions.method = methodOptions.method\n\t}\n}\n\nmodule.exports = request\n","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmptyContent.vue?vue&type=style&index=0&lang=scss&\");\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"f03f0a4a\", content, true, {});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=style&index=0&id=4c3113d6&lang=scss&scoped=true&\");\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"70c813b9\", content, true, {});","/**\n * @copyright Copyright (c) 2019 Marco Ambrosini <marcoambrosini@pm.me>\n *\n * @author Marco Ambrosini <marcoambrosini@pm.me>\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\nimport axios from '@nextcloud/axios'\n\n/**\n * Create a cancel token\n * @returns {CancelTokenSource}\n */\nconst createCancelToken = () => axios.CancelToken.source()\n\n/**\n * Creates a cancelable axios 'request object'.\n *\n * @param {function} request the axios promise request\n * @returns {Object}\n */\nconst CancelableRequest = function(request) {\n\t/**\n\t * Generate an axios cancel token\n\t */\n\tconst cancelToken = createCancelToken()\n\n\t/**\n\t * Execute the request\n\t *\n\t * @param {string} url the url to send the request to\n\t * @param {Object} [options] optional config for the request\n\t */\n\tconst fetch = async function(url, options) {\n\t\treturn request(\n\t\t\turl,\n\t\t\tObject.assign({ cancelToken: cancelToken.token }, options)\n\t\t)\n\t}\n\n\treturn {\n\t\trequest: fetch,\n\t\tcancel: cancelToken.cancel,\n\t}\n}\n\nexport default CancelableRequest\n","/**\n * @copyright Copyright (c) 2018 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\nimport { loadState } from '@nextcloud/initial-state'\n\nconst mimes = loadState('photos', 'mimes')\nexport default mimes\n","/**\n * @copyright Copyright (c) 2019 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\nimport webdav from 'webdav'\nimport axios from '@nextcloud/axios'\nimport parseUrl from 'url-parse'\nimport { generateRemoteUrl } from '@nextcloud/router'\n\n// force our axios\nconst patcher = webdav.getPatcher()\npatcher.patch('request', axios)\n\n// init webdav client on default dav endpoint\nconst remote = generateRemoteUrl('dav')\nconst client = webdav.createClient(remote)\n\nexport const remotePath = parseUrl(remote).pathname\nexport default client\n","<!--\n - @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div v-if=\"isReady\" class=\"emptycontent\">\n\t\t<!-- eslint-disable-next-line vue/no-v-html (because it's an SVG file) -->\n\t\t<div v-if=\"haveIllustration\" class=\"illustration\" v-html=\"illustration\" />\n\t\t<div v-else class=\"icon-error\" />\n\t\t<h2><slot /></h2>\n\t\t<p v-show=\"$slots.desc\">\n\t\t\t<slot name=\"desc\" />\n\t\t</p>\n\t</div>\n</template>\n\n<script>\nexport default {\n\tname: 'EmptyContent',\n\tprops: {\n\t\tillustrationName: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tillustration: '',\n\t\t}\n\t},\n\tcomputed: {\n\t\t/**\n\t\t * Does this component have an illustration\n\t\t *\n\t\t * @returns {boolean}\n\t\t */\n\t\thaveIllustration() {\n\t\t\treturn this.illustrationName !== ''\n\t\t},\n\n\t\t/**\n\t\t * Is the illustration loaded\n\t\t *\n\t\t * @returns {boolean}\n\t\t */\n\t\tisLoaded() {\n\t\t\tif (!this.haveIllustration) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn this.illustration !== ''\n\t\t},\n\n\t\t/**\n\t\t * The component is ready if the illustration\n\t\t * is done loading or if there is none\n\t\t *\n\t\t * @returns {boolean}\n\t\t */\n\t\tisReady() {\n\t\t\treturn !this.haveIllustration || (this.haveIllustration && this.isLoaded)\n\t\t},\n\t},\n\n\t/**\n\t * Fetch the new illustration as soon as it changes\n\t */\n\twatch: {\n\t\tillustrationName() {\n\t\t\tthis.getIllustration()\n\t\t},\n\t},\n\tbeforeMount() {\n\t\tthis.getIllustration()\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Fetch the illustration as webpack chunk\n\t\t */\n\t\tasync getIllustration() {\n\t\t\tthis.illustration = ''\n\t\t\tif (this.illustrationName !== '') {\n\t\t\t\ttry {\n\t\t\t\t\tconst illustration = await import(`../assets/Illustrations/${this.illustrationName}.svg`)\n\t\t\t\t\tthis.illustration = illustration.default\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error('Could not get the error illustration', error)\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\n}\n</script>\n\n<style lang=\"scss\">\n.emptycontent {\n\t// span all the available columns\n\tgrid-column: 1/-1;\n\tmargin-top: 20vh;\n}\n\n.illustration {\n\tmin-width: 200px;\n\tmax-width: 15%;\n\twidth: 300px;\n\tmargin: auto;\n\tmargin-bottom: 20px;\n\tposition: relative;\n\n\tsvg {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tmax-height: 40vh;\n\t}\n\n\t// change colour of illustration\n\t[fill*='6c63ff'] {\n\t\tfill: var(--color-primary-element);\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!./EmptyContent.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!./EmptyContent.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EmptyContent.vue?vue&type=template&id=5881a110&\"\nimport script from \"./EmptyContent.vue?vue&type=script&lang=js&\"\nexport * from \"./EmptyContent.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EmptyContent.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isReady)?_c('div',{staticClass:\"emptycontent\"},[(_vm.haveIllustration)?_c('div',{staticClass:\"illustration\",domProps:{\"innerHTML\":_vm._s(_vm.illustration)}}):_c('div',{staticClass:\"icon-error\"}),_vm._v(\" \"),_c('h2',[_vm._t(\"default\")],2),_vm._v(\" \"),_c('p',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.$slots.desc),expression:\"$slots.desc\"}]},[_vm._t(\"desc\")],2)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"photos-navigation\",class:{'photos-navigation--root': _vm.isRoot},attrs:{\"role\":\"toolbar\"}},[(!_vm.isRoot)?_c('Actions',{staticClass:\"photos-navigation__back\"},[_c('ActionButton',{attrs:{\"icon\":\"icon-confirm\"},on:{\"click\":_vm.folderUp}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.backToText)+\"\\n\\t\\t\")])],1):_vm._e(),_vm._v(\" \"),_c('h2',{staticClass:\"photos-navigation__title\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.name)+\"\\n\\t\")]),_vm._v(\" \"),(!_vm.isRoot && _vm.showActions)?_c('Actions',{staticClass:\"photos-navigation__share\"},[_c('ActionButton',{attrs:{\"icon\":\"icon-shared\"},on:{\"click\":_vm.showSidebar}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('photos', 'Share this folder'))+\"\\n\\t\\t\")])],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div :class=\"{'photos-navigation--root': isRoot}\" class=\"photos-navigation\" role=\"toolbar\">\n\t\t<Actions v-if=\"!isRoot\" class=\"photos-navigation__back\">\n\t\t\t<ActionButton\n\t\t\t\ticon=\"icon-confirm\"\n\t\t\t\t@click=\"folderUp\">\n\t\t\t\t{{ backToText }}\n\t\t\t</ActionButton>\n\t\t</Actions>\n\t\t<h2 class=\"photos-navigation__title\">\n\t\t\t{{ name }}\n\t\t</h2>\n\t\t<Actions v-if=\"!isRoot && showActions\" class=\"photos-navigation__share\">\n\t\t\t<ActionButton\n\t\t\t\ticon=\"icon-shared\"\n\t\t\t\t@click=\"showSidebar\">\n\t\t\t\t{{ t('photos', 'Share this folder') }}\n\t\t\t</ActionButton>\n\t\t</Actions>\n\t</div>\n</template>\n\n<script>\nimport Actions from '@nextcloud/vue/dist/Components/Actions'\nimport ActionButton from '@nextcloud/vue/dist/Components/ActionButton'\nexport default {\n\tname: 'Navigation',\n\n\tcomponents: {\n\t\tActionButton,\n\t\tActions,\n\t},\n\tinheritAttrs: false,\n\n\tprops: {\n\t\tbasename: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tfilename: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tshowActions: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\trootTitle: {\n\t\t\ttype: String,\n\t\t\tdefault: t('photos', 'Photos'),\n\t\t},\n\t},\n\n\tcomputed: {\n\t\tisRoot() {\n\t\t\treturn this.filename === '/'\n\t\t},\n\t\tname() {\n\t\t\tif (this.isRoot) {\n\t\t\t\treturn this.rootTitle\n\t\t\t}\n\t\t\treturn this.basename\n\t\t},\n\t\tparentPath() {\n\t\t\tconst path = this.filename.split('/')\n\t\t\tpath.pop()\n\t\t\tconst parent = path.join('/')\n\t\t\treturn this.isRoot || parent.trim() === ''\n\t\t\t\t? '/'\n\t\t\t\t: path.join('/')\n\t\t},\n\t\tparentName() {\n\t\t\treturn this.parentPath && this.parentPath.split('/').pop()\n\t\t},\n\t\tbackToText() {\n\t\t\tif (this.parentPath === '/') {\n\t\t\t\treturn t('photos', 'Back to {folder}', { folder: this.rootTitle })\n\t\t\t}\n\t\t\treturn t('photos', 'Back to {folder}', { folder: this.parentName })\n\t\t},\n\n\t\t/**\n\t\t * We do not want encoded slashes when browsing by folder\n\t\t * so we generate a new valid route object, get the final url back\n\t\t * decode it and use it as a direct string, which vue-router\n\t\t * does not encode afterwards\n\t\t * @returns {string|object}\n\t\t */\n\t\tto() {\n\t\t\t// always remove first slash, the router\n\t\t\t// manage it automatically\n\t\t\tconst regex = /^\\/?(.*)/i\n\t\t\tconst path = regex.exec(this.parentPath)[1]\n\n\t\t\t// apply to current route\n\t\t\tconst { name, params } = Object.assign({}, this.$route, {\n\t\t\t\tparams: { path },\n\t\t\t})\n\n\t\t\t// return the full object as we don't care about\n\t\t\t// an empty path if this is route\n\t\t\tif (path === '') {\n\t\t\t\treturn { name }\n\t\t\t}\n\n\t\t\t// returning a string prevent vue-router to encode it again\n\t\t\treturn decodeURIComponent(this.$router.resolve({ name, params }).resolved.path)\n\t\t},\n\t},\n\n\tmethods: {\n\t\tfolderUp() {\n\t\t\tthis.$router.push(this.to)\n\t\t},\n\t\tshowSidebar() {\n\t\t\tOCA.Files.Sidebar.open(this.filename)\n\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.icon-confirm {\n\ttransform: rotate(180deg)\n}\n\n.photos-navigation {\n\tdisplay: flex;\n\tposition: block;\n\theight: 44px;\n\tpadding: 0 40px;\n\talign-items: center;\n\tmax-width: 100%;\n\t&__title {\n\t\tmargin: 0;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\t&__share {\n\t\tmargin-left: 10px;\n\t}\n\t&__back,\n\t&__share {\n\t\tflex-grow: 0;\n\t\tflex-shrink: 0;\n\t}\n}\n\n// generate variants based on grid sizes\n// TODO: use mixins/GridSizes as soon as node-sass supports it\n// needs node-sass 5.0 (with libsass 3.6)\n// https://github.com/sass/node-sass/pull/2312\n$previous: 0;\n@each $size, $config in get('sizes') {\n\t$marginTop: map-get($config, 'marginTop');\n\t$marginW: map-get($config, 'marginW');\n\n\t// if this is the last entry, only use min-width\n\t$rule: '(min-width: #{$previous}px) and (max-width: #{$size}px)';\n\t@if $size == 'max' {\n\t\t$rule: '(min-width: #{$previous}px)';\n\t}\n\n\t@media #{$rule} {\n\t\t.photos-navigation {\n\t\t\t// we space this with 2/3 margin top, 1/3 margin bottom\n\t\t\ttop: ($marginTop - 44px) * 2 / 3;\n\t\t\t// padding-left: $marginW;\n\t\t\t@if $marginW >= 44px {\n\t\t\t\t&__back {\n\t\t\t\t\tmargin: 0 (($marginW - 44px) / 2);\n\t\t\t\t}\n\t\t\t}\n\t\t\t&--root &__title {\n\t\t\t\tpadding-left: #{$marginW - 44}px;\n\t\t\t}\n\t\t}\n\t}\n\t$previous: $size;\n}\n</style>\n","import { render, staticRenderFns } from \"./Navigation.vue?vue&type=template&id=4c3113d6&scoped=true&\"\nimport script from \"./Navigation.vue?vue&type=script&lang=js&\"\nexport * from \"./Navigation.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Navigation.vue?vue&type=style&index=0&id=4c3113d6&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 \"4c3113d6\",\n null\n \n)\n\nexport default component.exports","var map = {\n\t\"./empty.svg\": [\n\t\t497,\n\t\t8\n\t],\n\t\"./folder.svg\": [\n\t\t498,\n\t\t9\n\t],\n\t\"./images.svg\": [\n\t\t499,\n\t\t10\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(function() {\n\t\treturn __webpack_require__.t(id, 7);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 228;\nmodule.exports = webpackAsyncContext;","import mod from \"-!../../node_modules/vue-style-loader/index.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmptyContent.vue?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../../node_modules/vue-style-loader/index.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmptyContent.vue?vue&type=style&index=0&lang=scss&\"","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".emptycontent{grid-column:1/-1;margin-top:20vh}.illustration{min-width:200px;max-width:15%;width:300px;margin:auto;margin-bottom:20px;position:relative}.illustration svg{width:100%;height:100%;max-height:40vh}.illustration [fill*='6c63ff']{fill:var(--color-primary-element)}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","import mod from \"-!../../node_modules/vue-style-loader/index.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=style&index=0&id=4c3113d6&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../node_modules/vue-style-loader/index.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=style&index=0&id=4c3113d6&lang=scss&scoped=true&\"","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".icon-confirm[data-v-4c3113d6]{transform:rotate(180deg)}.photos-navigation[data-v-4c3113d6]{display:flex;position:block;height:44px;padding:0 40px;align-items:center;max-width:100%}.photos-navigation__title[data-v-4c3113d6]{margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.photos-navigation__share[data-v-4c3113d6]{margin-left:10px}.photos-navigation__back[data-v-4c3113d6],.photos-navigation__share[data-v-4c3113d6]{flex-grow:0;flex-shrink:0}@media (min-width: 0px) and (max-width: 400px){.photos-navigation[data-v-4c3113d6]{top:14.66667px}.photos-navigation--root .photos-navigation__title[data-v-4c3113d6]{padding-left:-36px}}@media (min-width: 400px) and (max-width: 700px){.photos-navigation[data-v-4c3113d6]{top:14.66667px}.photos-navigation--root .photos-navigation__title[data-v-4c3113d6]{padding-left:-36px}}@media (min-width: 700px) and (max-width: 1024px){.photos-navigation[data-v-4c3113d6]{top:14.66667px}.photos-navigation__back[data-v-4c3113d6]{margin:0 0px}.photos-navigation--root .photos-navigation__title[data-v-4c3113d6]{padding-left:0px}}@media (min-width: 1024px) and (max-width: 1280px){.photos-navigation[data-v-4c3113d6]{top:14.66667px}.photos-navigation__back[data-v-4c3113d6]{margin:0 0px}.photos-navigation--root .photos-navigation__title[data-v-4c3113d6]{padding-left:0px}}@media (min-width: 1280px) and (max-width: 1440px){.photos-navigation[data-v-4c3113d6]{top:29.33333px}.photos-navigation__back[data-v-4c3113d6]{margin:0 11px}.photos-navigation--root .photos-navigation__title[data-v-4c3113d6]{padding-left:22px}}@media (min-width: 1440px) and (max-width: 1600px){.photos-navigation[data-v-4c3113d6]{top:29.33333px}.photos-navigation__back[data-v-4c3113d6]{margin:0 11px}.photos-navigation--root .photos-navigation__title[data-v-4c3113d6]{padding-left:22px}}@media (min-width: 1600px) and (max-width: 2048px){.photos-navigation[data-v-4c3113d6]{top:29.33333px}.photos-navigation__back[data-v-4c3113d6]{margin:0 11px}.photos-navigation--root .photos-navigation__title[data-v-4c3113d6]{padding-left:22px}}@media (min-width: 2048px) and (max-width: 2560px){.photos-navigation[data-v-4c3113d6]{top:29.33333px}.photos-navigation__back[data-v-4c3113d6]{margin:0 22px}.photos-navigation--root .photos-navigation__title[data-v-4c3113d6]{padding-left:44px}}@media (min-width: 2560px) and (max-width: 3440px){.photos-navigation[data-v-4c3113d6]{top:29.33333px}.photos-navigation__back[data-v-4c3113d6]{margin:0 22px}.photos-navigation--root .photos-navigation__title[data-v-4c3113d6]{padding-left:44px}}@media (min-width: 3440px){.photos-navigation[data-v-4c3113d6]{top:29.33333px}.photos-navigation__back[data-v-4c3113d6]{margin:0 22px}.photos-navigation--root .photos-navigation__title[data-v-4c3113d6]{padding-left:44px}}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","/**\n * @copyright Copyright (c) 2019 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 */\nconst props = `\n\t<oc:fileid />\n\t<d:getlastmodified />\n\t<d:getetag />\n\t<d:getcontenttype />\n\t<d:getcontentlength />\n\t<nc:has-preview />\n\t<oc:favorite />\n\t<d:resourcetype />`\n\nexport { props }\nexport default `<?xml version=\"1.0\"?>\n\t\t\t<d:propfind xmlns:d=\"DAV:\"\n\t\t\t\txmlns:oc=\"http://owncloud.org/ns\"\n\t\t\t\txmlns:nc=\"http://nextcloud.org/ns\"\n\t\t\t\txmlns:ocs=\"http://open-collaboration-services.org/ns\">\n\t\t\t\t<d:prop>\n\t\t\t\t\t${props}\n\t\t\t\t</d:prop>\n\t\t\t</d:propfind>`\n","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileVirtualGrid.vue?vue&type=style&index=0&id=5f893fc6&lang=scss&scoped=true&\");\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"9798e87c\", content, true, {});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SeparatorVirtualGrid.vue?vue&type=style&index=0&id=00355104&lang=scss&scoped=true&\");\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"2247f470\", content, true, {});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Timeline.vue?vue&type=style&index=0&id=3f8970cb&lang=scss&scoped=true&\");\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"56dcc9e4\", content, true, {});","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n// for now we want to keep the same gap everywhere\nconst gap = 8\n\n/**\n * Define the max width proportions\n * The number (key) indicate the MAX size\n *\n * needs to be ompatible with webpack config\n * so no export default {}\n */\nmodule.exports = {\n\tsizes: {\n\t\t400: {\n\t\t\tmarginTop: 66, // same as grid-gap\n\t\t\tmarginW: gap, // same as grid-gap\n\t\t\tcount: 3,\n\t\t\tgap,\n\t\t},\n\t\t700: {\n\t\t\tmarginTop: 66,\n\t\t\tmarginW: 8, // same as grid-gap\n\t\t\tcount: 4,\n\t\t\tgap,\n\t\t},\n\t\t1024: {\n\t\t\tmarginTop: 66,\n\t\t\tmarginW: 44,\n\t\t\tcount: 5,\n\t\t\tgap,\n\t\t},\n\t\t1280: {\n\t\t\tmarginTop: 66,\n\t\t\tmarginW: 44,\n\t\t\tcount: 4,\n\t\t\tgap,\n\t\t},\n\t\t1440: {\n\t\t\tmarginTop: 88,\n\t\t\tmarginW: 66,\n\t\t\tcount: 5,\n\t\t\tgap,\n\t\t},\n\t\t1600: {\n\t\t\tmarginTop: 88,\n\t\t\tmarginW: 66,\n\t\t\tcount: 6,\n\t\t\tgap,\n\t\t},\n\t\t2048: {\n\t\t\tmarginTop: 88,\n\t\t\tmarginW: 66,\n\t\t\tcount: 7,\n\t\t\tgap,\n\t\t},\n\t\t2560: {\n\t\t\tmarginTop: 88,\n\t\t\tmarginW: 88,\n\t\t\tcount: 8,\n\t\t\tgap,\n\t\t},\n\t\t3440: {\n\t\t\tmarginTop: 88,\n\t\t\tmarginW: 88,\n\t\t\tcount: 9,\n\t\t\tgap,\n\t\t},\n\t\tmax: {\n\t\t\tmarginTop: 88,\n\t\t\tmarginW: 88,\n\t\t\tcount: 10,\n\t\t\tgap,\n\t\t},\n\t},\n}\n","var map = {\n\t\"./af\": 361,\n\t\"./af.js\": 361,\n\t\"./ar\": 362,\n\t\"./ar-dz\": 363,\n\t\"./ar-dz.js\": 363,\n\t\"./ar-kw\": 364,\n\t\"./ar-kw.js\": 364,\n\t\"./ar-ly\": 365,\n\t\"./ar-ly.js\": 365,\n\t\"./ar-ma\": 366,\n\t\"./ar-ma.js\": 366,\n\t\"./ar-sa\": 367,\n\t\"./ar-sa.js\": 367,\n\t\"./ar-tn\": 368,\n\t\"./ar-tn.js\": 368,\n\t\"./ar.js\": 362,\n\t\"./az\": 369,\n\t\"./az.js\": 369,\n\t\"./be\": 370,\n\t\"./be.js\": 370,\n\t\"./bg\": 371,\n\t\"./bg.js\": 371,\n\t\"./bm\": 372,\n\t\"./bm.js\": 372,\n\t\"./bn\": 373,\n\t\"./bn-bd\": 374,\n\t\"./bn-bd.js\": 374,\n\t\"./bn.js\": 373,\n\t\"./bo\": 375,\n\t\"./bo.js\": 375,\n\t\"./br\": 376,\n\t\"./br.js\": 376,\n\t\"./bs\": 377,\n\t\"./bs.js\": 377,\n\t\"./ca\": 378,\n\t\"./ca.js\": 378,\n\t\"./cs\": 379,\n\t\"./cs.js\": 379,\n\t\"./cv\": 380,\n\t\"./cv.js\": 380,\n\t\"./cy\": 381,\n\t\"./cy.js\": 381,\n\t\"./da\": 382,\n\t\"./da.js\": 382,\n\t\"./de\": 383,\n\t\"./de-at\": 384,\n\t\"./de-at.js\": 384,\n\t\"./de-ch\": 385,\n\t\"./de-ch.js\": 385,\n\t\"./de.js\": 383,\n\t\"./dv\": 386,\n\t\"./dv.js\": 386,\n\t\"./el\": 387,\n\t\"./el.js\": 387,\n\t\"./en-au\": 388,\n\t\"./en-au.js\": 388,\n\t\"./en-ca\": 389,\n\t\"./en-ca.js\": 389,\n\t\"./en-gb\": 390,\n\t\"./en-gb.js\": 390,\n\t\"./en-ie\": 391,\n\t\"./en-ie.js\": 391,\n\t\"./en-il\": 392,\n\t\"./en-il.js\": 392,\n\t\"./en-in\": 393,\n\t\"./en-in.js\": 393,\n\t\"./en-nz\": 394,\n\t\"./en-nz.js\": 394,\n\t\"./en-sg\": 395,\n\t\"./en-sg.js\": 395,\n\t\"./eo\": 396,\n\t\"./eo.js\": 396,\n\t\"./es\": 397,\n\t\"./es-do\": 398,\n\t\"./es-do.js\": 398,\n\t\"./es-mx\": 399,\n\t\"./es-mx.js\": 399,\n\t\"./es-us\": 400,\n\t\"./es-us.js\": 400,\n\t\"./es.js\": 397,\n\t\"./et\": 401,\n\t\"./et.js\": 401,\n\t\"./eu\": 402,\n\t\"./eu.js\": 402,\n\t\"./fa\": 403,\n\t\"./fa.js\": 403,\n\t\"./fi\": 404,\n\t\"./fi.js\": 404,\n\t\"./fil\": 405,\n\t\"./fil.js\": 405,\n\t\"./fo\": 406,\n\t\"./fo.js\": 406,\n\t\"./fr\": 407,\n\t\"./fr-ca\": 408,\n\t\"./fr-ca.js\": 408,\n\t\"./fr-ch\": 409,\n\t\"./fr-ch.js\": 409,\n\t\"./fr.js\": 407,\n\t\"./fy\": 410,\n\t\"./fy.js\": 410,\n\t\"./ga\": 411,\n\t\"./ga.js\": 411,\n\t\"./gd\": 412,\n\t\"./gd.js\": 412,\n\t\"./gl\": 413,\n\t\"./gl.js\": 413,\n\t\"./gom-deva\": 414,\n\t\"./gom-deva.js\": 414,\n\t\"./gom-latn\": 415,\n\t\"./gom-latn.js\": 415,\n\t\"./gu\": 416,\n\t\"./gu.js\": 416,\n\t\"./he\": 417,\n\t\"./he.js\": 417,\n\t\"./hi\": 418,\n\t\"./hi.js\": 418,\n\t\"./hr\": 419,\n\t\"./hr.js\": 419,\n\t\"./hu\": 420,\n\t\"./hu.js\": 420,\n\t\"./hy-am\": 421,\n\t\"./hy-am.js\": 421,\n\t\"./id\": 422,\n\t\"./id.js\": 422,\n\t\"./is\": 423,\n\t\"./is.js\": 423,\n\t\"./it\": 424,\n\t\"./it-ch\": 425,\n\t\"./it-ch.js\": 425,\n\t\"./it.js\": 424,\n\t\"./ja\": 426,\n\t\"./ja.js\": 426,\n\t\"./jv\": 427,\n\t\"./jv.js\": 427,\n\t\"./ka\": 428,\n\t\"./ka.js\": 428,\n\t\"./kk\": 429,\n\t\"./kk.js\": 429,\n\t\"./km\": 430,\n\t\"./km.js\": 430,\n\t\"./kn\": 431,\n\t\"./kn.js\": 431,\n\t\"./ko\": 432,\n\t\"./ko.js\": 432,\n\t\"./ku\": 433,\n\t\"./ku.js\": 433,\n\t\"./ky\": 434,\n\t\"./ky.js\": 434,\n\t\"./lb\": 435,\n\t\"./lb.js\": 435,\n\t\"./lo\": 436,\n\t\"./lo.js\": 436,\n\t\"./lt\": 437,\n\t\"./lt.js\": 437,\n\t\"./lv\": 438,\n\t\"./lv.js\": 438,\n\t\"./me\": 439,\n\t\"./me.js\": 439,\n\t\"./mi\": 440,\n\t\"./mi.js\": 440,\n\t\"./mk\": 441,\n\t\"./mk.js\": 441,\n\t\"./ml\": 442,\n\t\"./ml.js\": 442,\n\t\"./mn\": 443,\n\t\"./mn.js\": 443,\n\t\"./mr\": 444,\n\t\"./mr.js\": 444,\n\t\"./ms\": 445,\n\t\"./ms-my\": 446,\n\t\"./ms-my.js\": 446,\n\t\"./ms.js\": 445,\n\t\"./mt\": 447,\n\t\"./mt.js\": 447,\n\t\"./my\": 448,\n\t\"./my.js\": 448,\n\t\"./nb\": 449,\n\t\"./nb.js\": 449,\n\t\"./ne\": 450,\n\t\"./ne.js\": 450,\n\t\"./nl\": 451,\n\t\"./nl-be\": 452,\n\t\"./nl-be.js\": 452,\n\t\"./nl.js\": 451,\n\t\"./nn\": 453,\n\t\"./nn.js\": 453,\n\t\"./oc-lnc\": 454,\n\t\"./oc-lnc.js\": 454,\n\t\"./pa-in\": 455,\n\t\"./pa-in.js\": 455,\n\t\"./pl\": 456,\n\t\"./pl.js\": 456,\n\t\"./pt\": 457,\n\t\"./pt-br\": 458,\n\t\"./pt-br.js\": 458,\n\t\"./pt.js\": 457,\n\t\"./ro\": 459,\n\t\"./ro.js\": 459,\n\t\"./ru\": 460,\n\t\"./ru.js\": 460,\n\t\"./sd\": 461,\n\t\"./sd.js\": 461,\n\t\"./se\": 462,\n\t\"./se.js\": 462,\n\t\"./si\": 463,\n\t\"./si.js\": 463,\n\t\"./sk\": 464,\n\t\"./sk.js\": 464,\n\t\"./sl\": 465,\n\t\"./sl.js\": 465,\n\t\"./sq\": 466,\n\t\"./sq.js\": 466,\n\t\"./sr\": 467,\n\t\"./sr-cyrl\": 468,\n\t\"./sr-cyrl.js\": 468,\n\t\"./sr.js\": 467,\n\t\"./ss\": 469,\n\t\"./ss.js\": 469,\n\t\"./sv\": 470,\n\t\"./sv.js\": 470,\n\t\"./sw\": 471,\n\t\"./sw.js\": 471,\n\t\"./ta\": 472,\n\t\"./ta.js\": 472,\n\t\"./te\": 473,\n\t\"./te.js\": 473,\n\t\"./tet\": 474,\n\t\"./tet.js\": 474,\n\t\"./tg\": 475,\n\t\"./tg.js\": 475,\n\t\"./th\": 476,\n\t\"./th.js\": 476,\n\t\"./tk\": 477,\n\t\"./tk.js\": 477,\n\t\"./tl-ph\": 478,\n\t\"./tl-ph.js\": 478,\n\t\"./tlh\": 479,\n\t\"./tlh.js\": 479,\n\t\"./tr\": 480,\n\t\"./tr.js\": 480,\n\t\"./tzl\": 481,\n\t\"./tzl.js\": 481,\n\t\"./tzm\": 482,\n\t\"./tzm-latn\": 483,\n\t\"./tzm-latn.js\": 483,\n\t\"./tzm.js\": 482,\n\t\"./ug-cn\": 484,\n\t\"./ug-cn.js\": 484,\n\t\"./uk\": 485,\n\t\"./uk.js\": 485,\n\t\"./ur\": 486,\n\t\"./ur.js\": 486,\n\t\"./uz\": 487,\n\t\"./uz-latn\": 488,\n\t\"./uz-latn.js\": 488,\n\t\"./uz.js\": 487,\n\t\"./vi\": 489,\n\t\"./vi.js\": 489,\n\t\"./x-pseudo\": 490,\n\t\"./x-pseudo.js\": 490,\n\t\"./yo\": 491,\n\t\"./yo.js\": 491,\n\t\"./zh-cn\": 492,\n\t\"./zh-cn.js\": 492,\n\t\"./zh-hk\": 493,\n\t\"./zh-hk.js\": 493,\n\t\"./zh-mo\": 494,\n\t\"./zh-mo.js\": 494,\n\t\"./zh-tw\": 495,\n\t\"./zh-tw.js\": 495\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 665;","import mod from \"-!../../node_modules/vue-style-loader/index.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileVirtualGrid.vue?vue&type=style&index=0&id=5f893fc6&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../node_modules/vue-style-loader/index.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileVirtualGrid.vue?vue&type=style&index=0&id=5f893fc6&lang=scss&scoped=true&\"","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".file[data-v-5f893fc6],.folder[data-v-5f893fc6]{position:relative;display:flex;align-items:center;justify-content:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:var(--border-radius);overflow:hidden}.file .cover[data-v-5f893fc6],.folder .cover[data-v-5f893fc6]{z-index:2;width:100%;padding-bottom:100%;transition:opacity var(--animation-quick) ease-in-out;opacity:0;background-color:var(--color-main-text)}.file.active .cover[data-v-5f893fc6],.file:active .cover[data-v-5f893fc6],.file:hover .cover[data-v-5f893fc6],.file:focus .cover[data-v-5f893fc6],.folder.active .cover[data-v-5f893fc6],.folder:active .cover[data-v-5f893fc6],.folder:hover .cover[data-v-5f893fc6],.folder:focus .cover[data-v-5f893fc6]{opacity:.3}.file--clear.active .cover[data-v-5f893fc6],.file--clear:active .cover[data-v-5f893fc6],.file--clear:hover .cover[data-v-5f893fc6],.file--clear:focus .cover[data-v-5f893fc6],.folder--clear.active .cover[data-v-5f893fc6],.folder--clear:active .cover[data-v-5f893fc6],.folder--clear:hover .cover[data-v-5f893fc6],.folder--clear:focus .cover[data-v-5f893fc6]{opacity:.1}.fade-enter-active[data-v-5f893fc6],.fade-leave-active[data-v-5f893fc6]{transition:opacity var(--animation-quick) ease-in-out}.fade-enter[data-v-5f893fc6],.fade-leave-to[data-v-5f893fc6]{opacity:0}.icon-video-white[data-v-5f893fc6]{position:absolute;top:10px;right:10px;z-index:5}img[data-v-5f893fc6]{position:absolute;width:100%;height:100%;-o-object-fit:cover;object-fit:cover}svg[data-v-5f893fc6]{position:absolute;width:70%;height:70%}.file--clear[data-v-5f893fc6]{background:var(--color-background-hover)}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","import mod from \"-!../../node_modules/vue-style-loader/index.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SeparatorVirtualGrid.vue?vue&type=style&index=0&id=00355104&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../node_modules/vue-style-loader/index.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SeparatorVirtualGrid.vue?vue&type=style&index=0&id=00355104&lang=scss&scoped=true&\"","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".grid-title[data-v-00355104]{grid-column:1/8;padding:48px 0 12px 0;margin:0}.grid-title span[data-v-00355104]{font-weight:normal}.grid-title.first-title[data-v-00355104]{padding:0 0 12px 0}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","import mod from \"-!../../node_modules/vue-style-loader/index.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Timeline.vue?vue&type=style&index=0&id=3f8970cb&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../node_modules/vue-style-loader/index.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Timeline.vue?vue&type=style&index=0&id=3f8970cb&lang=scss&scoped=true&\"","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"@media (min-width: 0px) and (max-width: 400px){.grid-container[data-v-3f8970cb]{padding:0px 8px 256px 8px}}@media (min-width: 400px) and (max-width: 700px){.grid-container[data-v-3f8970cb]{padding:0px 8px 256px 8px}}@media (min-width: 700px) and (max-width: 1024px){.grid-container[data-v-3f8970cb]{padding:0px 44px 256px 44px}}@media (min-width: 1024px) and (max-width: 1280px){.grid-container[data-v-3f8970cb]{padding:0px 44px 256px 44px}}@media (min-width: 1280px) and (max-width: 1440px){.grid-container[data-v-3f8970cb]{padding:0px 66px 256px 66px}}@media (min-width: 1440px) and (max-width: 1600px){.grid-container[data-v-3f8970cb]{padding:0px 66px 256px 66px}}@media (min-width: 1600px) and (max-width: 2048px){.grid-container[data-v-3f8970cb]{padding:0px 66px 256px 66px}}@media (min-width: 2048px) and (max-width: 2560px){.grid-container[data-v-3f8970cb]{padding:0px 88px 256px 88px}}@media (min-width: 2560px) and (max-width: 3440px){.grid-container[data-v-3f8970cb]{padding:0px 88px 256px 88px}}@media (min-width: 3440px){.grid-container[data-v-3f8970cb]{padding:0px 88px 256px 88px}}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.error === 404)?_c('EmptyContent',{attrs:{\"illustration-name\":\"folder\"}},[_vm._v(\"\\n\\t\"+_vm._s(_vm.t('photos', 'This folder does not exists'))+\"\\n\")]):(_vm.error)?_c('EmptyContent',[_vm._v(\"\\n\\t\"+_vm._s(_vm.t('photos', 'An error occurred'))+\"\\n\")]):(!_vm.loading)?_c('div',[(_vm.isEmpty)?_c('Navigation',{key:\"navigation\",attrs:{\"basename\":_vm.path,\"filename\":'/',\"root-title\":_vm.rootTitle}}):_vm._e(),_vm._v(\" \"),(_vm.isEmpty)?_c('EmptyContent',{attrs:{\"illustration-name\":\"empty\"}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('photos', 'No photos in here'))+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"grid-container\"},[_c('VirtualGrid',{ref:\"virtualgrid\",attrs:{\"update-function\":_vm.getContent,\"get-column-count\":function () { return _vm.gridConfig.count; },\"get-grid-gap\":function () { return _vm.gridConfig.gap; },\"update-trigger-margin\":700}})],1)],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 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\nimport { genFileInfo } from '../utils/fileUtils'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport allowedMimes from './AllowedMimes'\nimport client from './DavClient'\nimport { props } from './DavRequest'\nimport { sizes } from '../assets/grid-sizes'\n\n/**\n * List files from a folder and filter out unwanted mimes\n *\n * @param {boolean} [onlyFavorites=false] not used\n * @param {Object} [options] used for the cancellable requests\n * @param {number} [options.page=0] which page to start (starts at 0)\n * @param {number} [options.perPage] how many to display per page default is 5 times the max number per line from the grid-sizes config file\n * @param {boolean} [options.full=false] get full data of the files\n * @returns {Array} the file list\n */\nexport default async function(onlyFavorites = false, options = {}) {\n\t// default function options\n\toptions = Object.assign({}, {\n\t\tpage: 0, // start at the first page\n\t\tperPage: sizes.max.count * 10, // ten rows of the max width\n\t}, options)\n\n\tconst prefixPath = `/files/${getCurrentUser().uid}`\n\n\t// generating the search or condition\n\t// based on the allowed mimetypes\n\tconst orMime = allowedMimes.reduce((str, mime) => `${str}\n\t\t<d:eq>\n\t\t\t<d:prop>\n\t\t\t\t<d:getcontenttype/>\n\t\t\t</d:prop>\n\t\t\t<d:literal>${mime}</d:literal>\n\t\t</d:eq>\n\t`, '')\n\n\tconst eqFavorites = onlyFavorites\n\t\t? `<d:eq>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<oc:favorite/>\n\t\t\t\t</d:prop>\n\t\t\t\t<d:literal>1</d:literal>\n\t\t\t</d:eq>`\n\t\t: ''\n\n\toptions = Object.assign({\n\t\tmethod: 'SEARCH',\n\t\theaders: {\n\t\t\t'content-Type': 'text/xml',\n\t\t},\n\t\tdata: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\t\t\t<d:searchrequest xmlns:d=\"DAV:\"\n\t\t\t\txmlns:oc=\"http://owncloud.org/ns\"\n\t\t\t\txmlns:nc=\"http://nextcloud.org/ns\"\n\t\t\t\txmlns:ns=\"https://github.com/icewind1991/SearchDAV/ns\"\n\t\t\t\txmlns:ocs=\"http://open-collaboration-services.org/ns\">\n\t\t\t\t<d:basicsearch>\n\t\t\t\t\t<d:select>\n\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t${props}\n\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t</d:select>\n\t\t\t\t\t<d:from>\n\t\t\t\t\t\t<d:scope>\n\t\t\t\t\t\t\t<d:href>${prefixPath}</d:href>\n\t\t\t\t\t\t\t<d:depth>infinity</d:depth>\n\t\t\t\t\t\t</d:scope>\n\t\t\t\t\t</d:from>\n\t\t\t\t\t<d:where>\n\t\t\t\t\t\t<d:and>\n\t\t\t\t\t\t\t<d:or>\n\t\t\t\t\t\t\t\t${orMime}\n\t\t\t\t\t\t\t</d:or>\n\t\t\t\t\t\t\t${eqFavorites}\n\t\t\t\t\t\t\t<d:eq>\n\t\t\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t\t\t<oc:owner-id/>\n\t\t\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t\t\t\t<d:literal>${getCurrentUser().uid}</d:literal>\n\t\t\t\t\t\t\t</d:eq>\n\t\t\t\t\t\t</d:and>\n\t\t\t\t\t</d:where>\n\t\t\t\t\t<d:orderby>\n\t\t\t\t\t\t<d:order>\n\t\t\t\t\t\t\t<d:prop><d:getlastmodified/></d:prop>\n\t\t\t\t\t\t\t<d:descending/>\n\t\t\t\t\t\t</d:order>\n\t\t\t\t\t</d:orderby>\n\t\t\t\t\t<d:limit>\n\t\t\t\t\t\t<d:nresults>${options.perPage}</d:nresults>\n\t\t\t\t\t\t<ns:firstresult>${options.page * options.perPage}</ns:firstresult>\n\t\t\t\t\t</d:limit>\n\t\t\t\t</d:basicsearch>\n\t\t\t</d:searchrequest>`,\n\t\tdeep: true,\n\t\tdetails: true,\n\t}, options)\n\n\tconst response = await client.getDirectoryContents('', options)\n\n\treturn response.data\n\t\t.map(data => genFileInfo(data))\n\t\t// remove prefix path from full file path\n\t\t.map(data => Object.assign({}, data, { filename: data.filename.replace(prefixPath, '') }))\n\n}\n","\n<template>\n\t<a :class=\"{'file--clear': !loaded}\"\n\t\tclass=\"file\"\n\t\t:href=\"davPath\"\n\t\t:aria-label=\"ariaLabel\"\n\t\t@click.prevent=\"openViewer\">\n\t\t<div v-if=\"item.injected.mime.includes('video') && hasPreview\" class=\"icon-video-white\" />\n\t\t<!-- image and loading placeholder -->\n\t\t<transition name=\"fade\">\n\t\t\t<img v-show=\"loaded\"\n\t\t\t\tref=\"img\"\n\t\t\t\t:src=\"src\"\n\t\t\t\t:alt=\"item.injected.basename\"\n\t\t\t\t:aria-describedby=\"ariaUuid\"\n\t\t\t\t@load=\"onLoad\">\n\t\t</transition>\n\t\t<svg v-if=\"!loaded\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\tviewBox=\"0 0 32 32\"\n\t\t\tfill=\"url(#placeholder__gradient)\">\n\t\t\t<use v-if=\"isImage\" xlink:href=\"#placeholder--img\" />\n\t\t\t<use v-else xlink:href=\"#placeholder--video\" />\n\t\t</svg>\n\n\t\t<!-- image name and cover -->\n\t\t<p :id=\"ariaUuid\" class=\"hidden-visually\">{{ item.injected.basename }}</p>\n\t\t<div class=\"cover\" role=\"none\" />\n\t</a>\n</template>\n\n<script>\nimport { generateRemoteUrl, generateUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\n\nexport default {\n\tname: 'FileVirtualGrid',\n\tinheritAttrs: false,\n\n\tprops: {\n\t\titem: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloaded: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tdavPath() {\n\t\t\treturn generateRemoteUrl(`dav/files/${getCurrentUser().uid}`) + this.item.injected.filename\n\t\t},\n\t\tariaUuid() {\n\t\t\treturn `image-${this.item.injected.fileid}`\n\t\t},\n\t\tariaLabel() {\n\t\t\treturn t('photos', 'Open the full size \"{name}\" image', { name: this.item.injected.basename })\n\t\t},\n\t\tisImage() {\n\t\t\treturn this.item.injected.mime.startsWith('image')\n\t\t},\n\t\tsrc() {\n\t\t\treturn generateUrl(`/core/preview?fileId=${this.item.injected.fileid}&x=${256}&y=${256}&a=false&v=${this.item.injected.etag}`)\n\t\t},\n\t},\n\n\tbeforeDestroy() {\n\t\t// cancel any pending load\n\t\tthis.$refs.src = ''\n\t},\n\n\tmethods: {\n\t\topenViewer() {\n\t\t\tOCA.Viewer.open({\n\t\t\t\tpath: this.item.injected.filename,\n\t\t\t\tlist: this.filterOnlyViewableFiles(this.item.injected.list()),\n\t\t\t\tloadMore: async() => this.filterOnlyViewableFiles(await this.item.injected.loadMore()),\n\t\t\t})\n\t\t},\n\n\t\t/** When the image is fully loaded by browser we remove the placeholder */\n\t\tonLoad() {\n\t\t\tthis.loaded = true\n\t\t},\n\n\t\t/** Function to remove all elements in the list that are not images/videos (such as titles)\n\t\t * @param {Array} list List of elements\n\t\t * @returns {Array} List of elements that can be rendered by viewer\n\t\t */\n\t\tfilterOnlyViewableFiles(list) {\n\t\t\treturn list.filter(item => item.injected.filename).map(item => item.injected)\n\t\t},\n\t},\n\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../mixins/FileFolder.scss';\n\n.icon-video-white {\n\tposition: absolute;\n\ttop: 10px;\n\tright: 10px;\n\tz-index: 5;\n}\n\nimg {\n\tposition: absolute;\n\twidth: 100%;\n\theight: 100%;\n\n\tobject-fit: cover;\n}\n\nsvg {\n\tposition: absolute;\n\twidth: 70%;\n\theight: 70%;\n}\n\n.file--clear {\n\tbackground: var(--color-background-hover);\n}\n</style>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileVirtualGrid.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!./FileVirtualGrid.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./FileVirtualGrid.vue?vue&type=template&id=5f893fc6&scoped=true&\"\nimport script from \"./FileVirtualGrid.vue?vue&type=script&lang=js&\"\nexport * from \"./FileVirtualGrid.vue?vue&type=script&lang=js&\"\nimport style0 from \"./FileVirtualGrid.vue?vue&type=style&index=0&id=5f893fc6&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 \"5f893fc6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{staticClass:\"file\",class:{'file--clear': !_vm.loaded},attrs:{\"href\":_vm.davPath,\"aria-label\":_vm.ariaLabel},on:{\"click\":function($event){$event.preventDefault();return _vm.openViewer($event)}}},[(_vm.item.injected.mime.includes('video') && _vm.hasPreview)?_c('div',{staticClass:\"icon-video-white\"}):_vm._e(),_vm._v(\" \"),_c('transition',{attrs:{\"name\":\"fade\"}},[_c('img',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.loaded),expression:\"loaded\"}],ref:\"img\",attrs:{\"src\":_vm.src,\"alt\":_vm.item.injected.basename,\"aria-describedby\":_vm.ariaUuid},on:{\"load\":_vm.onLoad}})]),_vm._v(\" \"),(!_vm.loaded)?_c('svg',{attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 32 32\",\"fill\":\"url(#placeholder__gradient)\"}},[(_vm.isImage)?_c('use',{attrs:{\"xlink:href\":\"#placeholder--img\"}}):_c('use',{attrs:{\"xlink:href\":\"#placeholder--video\"}})]):_vm._e(),_vm._v(\" \"),_c('p',{staticClass:\"hidden-visually\",attrs:{\"id\":_vm.ariaUuid}},[_vm._v(_vm._s(_vm.item.injected.basename))]),_vm._v(\" \"),_c('div',{staticClass:\"cover\",attrs:{\"role\":\"none\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SeparatorVirtualGrid.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!./SeparatorVirtualGrid.vue?vue&type=script&lang=js&\"","<template>\n\t<h2 class=\"grid-title\" :style=\"{height: item.height + 'px'}\">\n\t\t{{ item.injected.month }}\n\t\t<span>{{ item.injected.year }}</span>\n\t</h2>\n</template>\n\n<script>\nexport default {\n\tname: 'SeparatorVirtualGrid',\n\n\tinheritAttrs: false,\n\n\tprops: {\n\t\titem: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.grid-title {\n\tgrid-column: 1/8;\n\tpadding: 48px 0 12px 0;\n\tmargin: 0;\n\tspan {\n\t\tfont-weight: normal;\n\t}\n\t&.first-title {\n\t\tpadding: 0 0 12px 0;\n\t}\n}\n</style>\n","import { render, staticRenderFns } from \"./SeparatorVirtualGrid.vue?vue&type=template&id=00355104&scoped=true&\"\nimport script from \"./SeparatorVirtualGrid.vue?vue&type=script&lang=js&\"\nexport * from \"./SeparatorVirtualGrid.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SeparatorVirtualGrid.vue?vue&type=style&index=0&id=00355104&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 \"00355104\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('h2',{staticClass:\"grid-title\",style:({height: _vm.item.height + 'px'})},[_vm._v(\"\\n\\t\"+_vm._s(_vm.item.injected.month)+\"\\n\\t\"),_c('span',[_vm._v(_vm._s(_vm.item.injected.year))])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 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\nimport Vue from 'vue'\nimport { sizes } from '../assets/grid-sizes'\n\nexport default new Vue({\n\tdata() {\n\t\treturn {\n\t\t\tgridConfig: sizes.max,\n\t\t}\n\t},\n\twatch: {\n\t\tgridConfig(val) {\n\t\t\tthis.$emit('changed', val)\n\t\t},\n\t},\n\tcreated() {\n\t\twindow.addEventListener('resize', this.handleWindowResize)\n\t\tthis.handleWindowResize()\n\t},\n\tbeforeDestroy() {\n\t\twindow.removeEventListener('resize', this.handleWindowResize)\n\t},\n\tmethods: {\n\t\thandleWindowResize() {\n\t\t\t// find the first grid size that fit the current window width\n\t\t\tconst currentSize = Object.keys(sizes).find(size => size > document.documentElement.clientWidth)\n\t\t\tthis.gridConfig = sizes[currentSize]\n\t\t},\n\t},\n})\n","/**\n * @copyright Copyright (c) 2018 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\nimport getGridConfig from '../services/GridConfig'\n\n/**\n * Get the current used grid config\n */\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tgridConfig: {},\n\t\t}\n\t},\n\n\tcreated() {\n\t\tgetGridConfig.$on('changed', val => {\n\t\t\tthis.gridConfig = val\n\t\t})\n\t\tconsole.debug('Current grid config', getGridConfig.gridConfig)\n\t\tthis.gridConfig = getGridConfig.gridConfig\n\t},\n\n\tbeforeDestroy() {\n\t\tgetGridConfig.$off('changed', this.gridConfig)\n\t},\n}\n","<!--\n - @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<!-- Errors handlers-->\n\t<EmptyContent v-if=\"error === 404\" illustration-name=\"folder\">\n\t\t{{ t('photos', 'This folder does not exists') }}\n\t</EmptyContent>\n\t<EmptyContent v-else-if=\"error\">\n\t\t{{ t('photos', 'An error occurred') }}\n\t</EmptyContent>\n\n\t<!-- Folder content -->\n\t<div v-else-if=\"!loading\">\n\t\t<Navigation\n\t\t\tv-if=\"isEmpty\"\n\t\t\tkey=\"navigation\"\n\t\t\t:basename=\"path\"\n\t\t\t:filename=\"'/'\"\n\t\t\t:root-title=\"rootTitle\" />\n\n\t\t<EmptyContent v-if=\"isEmpty\" illustration-name=\"empty\">\n\t\t\t{{ t('photos', 'No photos in here') }}\n\t\t</EmptyContent>\n\n\t\t<div class=\"grid-container\">\n\t\t\t<VirtualGrid\n\t\t\t\tref=\"virtualgrid\"\n\t\t\t\t:update-function=\"getContent\"\n\t\t\t\t:get-column-count=\"() => gridConfig.count\"\n\t\t\t\t:get-grid-gap=\"() => gridConfig.gap\"\n\t\t\t\t:update-trigger-margin=\"700\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport * as moment from 'moment'\n\nimport getPhotos from '../services/PhotoSearch'\n\nimport EmptyContent from '../components/EmptyContent'\nimport FileVirtualGrid from '../components/FileVirtualGrid'\nimport SeparatorVirtualGrid from '../components/SeparatorVirtualGrid'\nimport VirtualGrid from 'vue-virtual-grid'\nimport Navigation from '../components/Navigation'\n\nimport cancelableRequest from '../utils/CancelableRequest'\nimport GridConfigMixin from '../mixins/GridConfig'\n\nexport default {\n\tname: 'Timeline',\n\tcomponents: {\n\t\tEmptyContent,\n\t\tVirtualGrid,\n\t\tNavigation,\n\t},\n\tmixins: [GridConfigMixin],\n\tprops: {\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tonlyFavorites: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\trootTitle: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tpath: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tcancelRequest: null,\n\t\t\tdone: false,\n\t\t\terror: null,\n\t\t\tloadingPage: false,\n\t\t\tisEmpty: false,\n\t\t\tlastSection: '',\n\t\t}\n\t},\n\n\twatch: {\n\t\tasync onlyFavorites() {\n\t\t\t// reset component\n\t\t\tthis.resetState()\n\t\t},\n\t},\n\n\tasync beforeMount() {\n\t\tthis.$emit('update:loading', false)\n\t\tthis.loadingPage = false\n\t},\n\n\tbeforeDestroy() {\n\t\t// cancel any pending requests\n\t\tif (this.cancelRequest) {\n\t\t\tthis.cancelRequest('Changed view')\n\t\t}\n\t},\n\n\tmethods: {\n\t\tasync getContent(params) {\n\t\t\tif (this.done) {\n\t\t\t\treturn Promise.resolve([])\n\t\t\t}\n\n\t\t\t// cancel any pending requests\n\t\t\tif (this.cancelRequest) {\n\t\t\t\tthis.cancelRequest('Changed view')\n\t\t\t}\n\n\t\t\t// done loading even with errors\n\t\t\tconst { request, cancel } = cancelableRequest(getPhotos)\n\t\t\tthis.cancelRequest = cancel\n\n\t\t\tconst numberOfImagesPerBatch = this.gridConfig.count * 5 // loading 5 rows\n\n\t\t\ttry {\n\t\t\t\t// Load next batch of images\n\t\t\t\tconst files = await request(this.onlyFavorites, {\n\t\t\t\t\tpage: params.offset, // offset is incremented +1 by the virtualgrid lib\n\t\t\t\t\tperPage: numberOfImagesPerBatch,\n\t\t\t\t})\n\n\t\t\t\t// If first batch of images is empty, there is no images\n\t\t\t\tif (files.length === params.offset === 0) {\n\t\t\t\t\tthis.isEmpty = true\n\t\t\t\t}\n\n\t\t\t\t// If we get less files than requested that means we got to the end\n\t\t\t\tif (files.length !== numberOfImagesPerBatch) {\n\t\t\t\t\tthis.done = true\n\t\t\t\t}\n\n\t\t\t\t/** The goal of this flat map is to return an array of images separated by titles (months)\n\t\t\t\t * ie: [{month1}, {image1}, {image2}, {month2}, {image3}, {image4}, {image5}]\n\t\t\t\t * First we get the current month+year of the image\n\t\t\t\t * We compare it to the previous image month+year\n\t\t\t\t * If there is a difference we have to insert a title object before the current image\n\t\t\t\t * If it's equal we just add the current image to the array\n\t\t\t\t * Note: the injected param of objects are used to pass custom params to the grid lib\n\t\t\t\t * In our case injected could be an image/video (aka file) or a title (year/month)\n\t\t\t\t * Note2: titles are rendered full width and images are rendered on 1 column and 256x256 ratio\n\t\t\t\t */\n\t\t\t\treturn files.flatMap((file, index) => {\n\t\t\t\t\tconst finalArray = []\n\t\t\t\t\tconst currentSection = this.getFormatedDate(file.lastmod, 'YYYY MMMM')\n\t\t\t\t\tif (\n\t\t\t\t\t\tcurrentSection\n\t\t\t\t\t\t!== this.getFormatedDate(files[index - 1]?.lastmod, 'YYYY MMMM')\n\t\t\t\t\t\t&& (this.lastSection !== currentSection)\n\t\t\t\t\t) {\n\t\t\t\t\t\tfinalArray.push({\n\t\t\t\t\t\t\tid: `title-${index}`,\n\t\t\t\t\t\t\tinjected: {\n\t\t\t\t\t\t\t\tyear: this.getFormatedDate(file.lastmod, 'YYYY'),\n\t\t\t\t\t\t\t\tmonth: this.getFormatedDate(file.lastmod, 'MMMM'),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\theight: 90,\n\t\t\t\t\t\t\tcolumnSpan: 0, // means full width\n\t\t\t\t\t\t\tnewRow: true,\n\t\t\t\t\t\t\trenderComponent: SeparatorVirtualGrid,\n\t\t\t\t\t\t})\n\t\t\t\t\t\tthis.lastSection = currentSection // we keep track of the last section for the next batch\n\t\t\t\t\t}\n\t\t\t\t\tfinalArray.push({\n\t\t\t\t\t\tid: `img-${file.fileid}`,\n\t\t\t\t\t\tinjected: {\n\t\t\t\t\t\t\t...file,\n\t\t\t\t\t\t\tlist: this.$refs.virtualgrid.getCurrentItems,\n\t\t\t\t\t\t\tloadMore: this.$refs.virtualgrid.loadMoreData,\n\t\t\t\t\t\t},\n\t\t\t\t\t\twidth: 256,\n\t\t\t\t\t\theight: 256,\n\t\t\t\t\t\tcolumnSpan: 1,\n\t\t\t\t\t\trenderComponent: FileVirtualGrid,\n\t\t\t\t\t})\n\t\t\t\t\treturn finalArray\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\tif (error.response && error.response.status) {\n\t\t\t\t\tif (error.response.status === 404) {\n\t\t\t\t\t\tthis.error = 404\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tthis.$router.push({ name: this.$route.name })\n\t\t\t\t\t\t}, 3000)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.error = error\n\t\t\t\t\t}\n\t\t\t\t} else if (params.offset === 0) { // if we get an error at first batch we assume list is empty\n\t\t\t\t\tthis.isEmpty = true\n\t\t\t\t}\n\n\t\t\t\t// cancelled request, moving on...\n\t\t\t\tconsole.error('Error fetching timeline', error)\n\t\t\t\treturn Promise.resolve([])\n\t\t\t} finally {\n\t\t\t\t// done loading even with errors\n\t\t\t\tthis.$emit('update:loading', false)\n\t\t\t\tthis.loadingPage = false\n\t\t\t\tthis.cancelRequest = null\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Reset this component data to a pristine state\n\t\t */\n\t\tresetState() {\n\t\t\tthis.$store.dispatch('resetTimeline')\n\t\t\tthis.done = false\n\t\t\tthis.isEmpty = false\n\t\t\tthis.error = null\n\t\t\tthis.loadingPage = false\n\t\t\tthis.$refs.virtualgrid.resetGrid()\n\t\t},\n\n\t\tgetFormatedDate(string, format) {\n\t\t\treturn moment(string).format(format)\n\t\t},\n\n\t},\n\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$previous: 0;\n@each $size, $config in get('sizes') {\n\t$marginTop: map-get($config, 'marginTop');\n\t$marginW: map-get($config, 'marginW');\n\t// if this is the last entry, only use min-width\n\t$rule: '(min-width: #{$previous}px) and (max-width: #{$size}px)';\n\t@if $size == 'max' {\n\t\t$rule: '(min-width: #{$previous}px)';\n\t}\n\t@media #{$rule} {\n\t\t.grid-container {\n\t\t\tpadding: 0px #{$marginW}px 256px #{$marginW}px;\n\t\t}\n\t}\n\t$previous: $size;\n}\n</style>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Timeline.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!./Timeline.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Timeline.vue?vue&type=template&id=3f8970cb&scoped=true&\"\nimport script from \"./Timeline.vue?vue&type=script&lang=js&\"\nexport * from \"./Timeline.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Timeline.vue?vue&type=style&index=0&id=3f8970cb&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 \"3f8970cb\",\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""} \ No newline at end of file