photos/js/photos-src_views_Folders_vu...

1 line
121 KiB
Plaintext

{"version":3,"file":"photos-src_views_Folders_vue.js?v=65cb0d2fd16c8804c3d8","mappings":"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","sources":["webpack:///photos/src/assets/grid-sizes.js","webpack:///photos/src/mixins/AbortControllerMixin.js","webpack:///photos/src/mixins/UserConfig.js","webpack:///photos/src/components/FileLegacy.vue?vue&type=style&index=0&id=7f7a68cc&prod&lang=scss&scoped=true","webpack:///photos/src/components/Folder.vue?vue&type=style&index=0&id=eae08446&prod&lang=scss&scoped=true","webpack:///photos/src/components/FolderTagPreview.vue?vue&type=style&index=0&id=e38275f4&prod&lang=scss&scoped=true","webpack:///photos/src/components/HeaderNavigation.vue?vue&type=style&index=0&id=809e621a&prod&lang=scss","webpack:///photos/src/components/HeaderNavigation.vue?vue&type=style&index=1&id=809e621a&prod&lang=scss&scoped=true","webpack:///photos/src/views/Folders.vue?vue&type=style&index=0&id=0510aa84&prod&lang=scss&scoped=true","webpack://photos/./src/components/HeaderNavigation.vue?6d2b","webpack:///photos/src/components/HeaderNavigation.vue","webpack:///photos/src/components/HeaderNavigation.vue?vue&type=script&lang=js","webpack://photos/./src/components/HeaderNavigation.vue?6964","webpack://photos/./src/components/HeaderNavigation.vue?beaf","webpack://photos/./src/components/HeaderNavigation.vue?6702","webpack://photos/./src/views/Folders.vue?a854","webpack:///photos/src/components/FileLegacy.vue","webpack:///photos/src/components/FileLegacy.vue?vue&type=script&lang=js","webpack://photos/./src/components/FileLegacy.vue?c922","webpack://photos/./src/components/FileLegacy.vue?a369","webpack://photos/./src/components/FileLegacy.vue?3402","webpack://photos/./src/components/Folder.vue?3d8e","webpack:///photos/src/components/FolderTagPreview.vue","webpack:///photos/src/components/FolderTagPreview.vue?vue&type=script&lang=js","webpack://photos/./src/components/FolderTagPreview.vue?6ec7","webpack://photos/./src/components/FolderTagPreview.vue?9d8b","webpack://photos/./src/components/FolderTagPreview.vue?6b80","webpack:///photos/src/services/AlbumContent.js","webpack:///photos/src/components/Folder.vue","webpack:///photos/src/components/Folder.vue?vue&type=script&lang=js","webpack://photos/./src/components/Folder.vue?c4d2","webpack://photos/./src/components/Folder.vue?c398","webpack:///photos/src/services/GridConfig.js","webpack:///photos/src/mixins/GridConfig.js","webpack:///photos/src/views/Folders.vue","webpack:///photos/src/views/Folders.vue?vue&type=script&lang=js","webpack:///photos/src/services/FileInfo.js","webpack://photos/./src/views/Folders.vue?25b6","webpack://photos/./src/views/Folders.vue?6715"],"sourcesContent":["/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\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 compatible with webpack config\n * so no export default {}\n */\nmodule.exports = {\n\tsizes: {\n\t\t400: {\n\t\t\tmarginTop: 66,\n\t\t\tmarginW: 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: 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","/**\n * @copyright Copyright (c) 2022 Louis Chemineau <louis@chmn.me>\n *\n * @author Louis Chemineau <louis@chmn.me>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default {\n\tname: 'AbortControllerMixin',\n\n\tdata() {\n\t\treturn {\n\t\t\tabortController: new AbortController(),\n\t\t}\n\t},\n\n\tbeforeDestroy() {\n\t\tthis.abortController.abort()\n\t},\n\n\tbeforeRouteLeave(from, to, next) {\n\t\tthis.abortController.abort()\n\t\tthis.abortController = new AbortController()\n\t\tnext()\n\t},\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { emit, subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport { generateUrl } from '@nextcloud/router'\nimport { loadState } from '@nextcloud/initial-state'\nimport axios from '@nextcloud/axios'\n\nconst eventName = 'photos:user-config-changed'\n\nexport default {\n\tdata() {\n\t\tconst croppedLayoutLocalStorage = localStorage.getItem('photos:croppedLayout')\n\n\t\treturn {\n\t\t\tcroppedLayout: croppedLayoutLocalStorage !== null\n\t\t\t\t? croppedLayoutLocalStorage === 'true'\n\t\t\t\t: loadState('photos', 'croppedLayout', 'false') === 'true',\n\t\t\tphotosLocation: loadState('photos', 'photosLocation', ''),\n\t\t}\n\t},\n\n\tcreated() {\n\t\tsubscribe(eventName, this.updateLocalSetting)\n\t},\n\n\tbeforeDestroy() {\n\t\tunsubscribe(eventName, this.updateLocalSetting)\n\t},\n\n\tmethods: {\n\t\tupdateLocalSetting({ setting, value }) {\n\t\t\tthis[setting] = value\n\t\t},\n\t\tupdateSetting(setting) {\n\t\t\tconst value = this[setting]\n\t\t\t// Long time save setting\n\t\t\taxios.put(generateUrl('apps/photos/api/v1/config/' + setting), {\n\t\t\t\tvalue: value.toString(),\n\t\t\t})\n\t\t\t// Current session save setting\n\t\t\tlocalStorage.setItem('photos:' + setting, value)\n\t\t\t// Visible elements update setting\n\t\t\temit(eventName, { setting, value })\n\t\t},\n\t},\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".file[data-v-7f7a68cc],.folder[data-v-7f7a68cc]{position:relative;display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-radius:var(--border-radius);overflow:hidden}.file .cover[data-v-7f7a68cc],.folder .cover[data-v-7f7a68cc]{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-7f7a68cc],.file:active .cover[data-v-7f7a68cc],.file:hover .cover[data-v-7f7a68cc],.file:focus .cover[data-v-7f7a68cc],.folder.active .cover[data-v-7f7a68cc],.folder:active .cover[data-v-7f7a68cc],.folder:hover .cover[data-v-7f7a68cc],.folder:focus .cover[data-v-7f7a68cc]{opacity:.3}.file--clear.active .cover[data-v-7f7a68cc],.file--clear:active .cover[data-v-7f7a68cc],.file--clear:hover .cover[data-v-7f7a68cc],.file--clear:focus .cover[data-v-7f7a68cc],.folder--clear.active .cover[data-v-7f7a68cc],.folder--clear:active .cover[data-v-7f7a68cc],.folder--clear:hover .cover[data-v-7f7a68cc],.folder--clear:focus .cover[data-v-7f7a68cc]{opacity:.1}.fade-enter-active[data-v-7f7a68cc],.fade-leave-active[data-v-7f7a68cc]{transition:opacity var(--animation-quick) ease-in-out}.fade-enter[data-v-7f7a68cc],.fade-leave-to[data-v-7f7a68cc]{opacity:0}.transition-group[data-v-7f7a68cc]{display:contents}.icon-video-white[data-v-7f7a68cc]{position:absolute;top:10px;right:10px;z-index:20}img[data-v-7f7a68cc]{position:absolute;width:100%;height:100%;z-index:10;color:rgba(0,0,0,0);object-fit:contain}.file--cropped img[data-v-7f7a68cc]{object-fit:cover}svg[data-v-7f7a68cc]{position:absolute;width:70%;height:70%}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/mixins/FileFolder.scss\",\"webpack://./src/components/FileLegacy.vue\"],\"names\":[],\"mappings\":\"AAsBA,gDAEC,iBAAA,CACA,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,wBAAA,CAAA,gBAAA,CACA,kCAAA,CACA,eAAA,CAEA,8DACC,SAAA,CAMA,UAAA,CACA,mBAAA,CACA,qDAAA,CACA,SAAA,CACA,uCAAA,CAOA,4SACC,UAAA,CAQD,oWACC,UAAA,CAKH,wEACC,qDAAA,CAGD,6DACC,SAAA,CClED,mCACC,gBAAA,CAGD,mCACC,iBAAA,CACA,QAAA,CACA,UAAA,CACA,UAAA,CAGD,qBACC,iBAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CAEA,mBAAA,CAEA,kBAAA,CAEA,oCACC,gBAAA,CAIF,qBACC,iBAAA,CACA,SAAA,CACA,UAAA\",\"sourcesContent\":[\"/**\\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\\n *\\n * @author John Molakvoæ <skjnldsv@protonmail.com>\\n *\\n * @license AGPL-3.0-or-later\\n *\\n * This program is free software: you can redistribute it and/or modify\\n * it under the terms of the GNU Affero General Public License as\\n * published by the Free Software Foundation, either version 3 of the\\n * License, or (at your option) any later version.\\n *\\n * This program is distributed in the hope that it will be useful,\\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n * GNU Affero General Public License for more details.\\n *\\n * You should have received a copy of the GNU Affero General Public License\\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\\n *\\n */\\n\\n.file,\\n.folder {\\n\\tposition: relative;\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tjustify-content: center;\\n\\tuser-select: none;\\n\\tborder-radius: var(--border-radius);\\n\\toverflow: hidden;\\n\\n\\t.cover {\\n\\t\\tz-index: 2;\\n\\t\\t// We want nice squares despite anything that is in it.\\n\\t\\t// The .cover is what makes the exact square size of the grid.\\n\\t\\t// We use padding-bottom because padding with percentage\\n\\t\\t// always refers to the width. And we only want to fit\\n\\t\\t// the css grid's width.\\n\\t\\twidth: 100%;\\n\\t\\tpadding-bottom: 100%;\\n\\t\\ttransition: opacity var(--animation-quick) ease-in-out;\\n\\t\\topacity: 0;\\n\\t\\tbackground-color: var(--color-main-text);\\n\\t}\\n\\n\\t&.active,\\n\\t&:active,\\n\\t&:hover,\\n\\t&:focus {\\n\\t\\t.cover {\\n\\t\\t\\topacity: .3;\\n\\t\\t}\\n\\t}\\n\\n\\t&--clear.active,\\n\\t&--clear:active,\\n\\t&--clear:hover,\\n\\t&--clear:focus {\\n\\t\\t.cover {\\n\\t\\t\\topacity: .1;\\n\\t\\t}\\n\\t}\\n}\\n\\n.fade-enter-active, .fade-leave-active {\\n\\ttransition: opacity var(--animation-quick) ease-in-out;\\n}\\n\\n.fade-enter, .fade-leave-to {\\n\\topacity: 0;\\n}\\n\",\"$sizes: (\\\"400\\\": (\\\"count\\\": 3, \\\"marginTop\\\": 66, \\\"marginW\\\": 8), \\\"700\\\": (\\\"count\\\": 4, \\\"marginTop\\\": 66, \\\"marginW\\\": 8), \\\"1024\\\": (\\\"count\\\": 5, \\\"marginTop\\\": 66, \\\"marginW\\\": 44), \\\"1280\\\": (\\\"count\\\": 4, \\\"marginTop\\\": 66, \\\"marginW\\\": 44), \\\"1440\\\": (\\\"count\\\": 5, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"1600\\\": (\\\"count\\\": 6, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"2048\\\": (\\\"count\\\": 7, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"2560\\\": (\\\"count\\\": 8, \\\"marginTop\\\": 88, \\\"marginW\\\": 88), \\\"3440\\\": (\\\"count\\\": 9, \\\"marginTop\\\": 88, \\\"marginW\\\": 88), \\\"max\\\": (\\\"count\\\": 10, \\\"marginTop\\\": 88, \\\"marginW\\\": 88));\\n\\n@import '../mixins/FileFolder';\\n\\n.transition-group {\\n\\tdisplay: contents;\\n}\\n\\n.icon-video-white {\\n\\tposition: absolute;\\n\\ttop: 10px;\\n\\tright: 10px;\\n\\tz-index: 20;\\n}\\n\\nimg {\\n\\tposition: absolute;\\n\\twidth: 100%;\\n\\theight: 100%;\\n\\tz-index: 10;\\n\\n\\tcolor: transparent; // should be diplayed on error\\n\\n\\tobject-fit: contain;\\n\\n\\t.file--cropped & {\\n\\t\\tobject-fit: cover;\\n\\t}\\n}\\n\\nsvg {\\n\\tposition: absolute;\\n\\twidth: 70%;\\n\\theight: 70%;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".file[data-v-eae08446],.folder[data-v-eae08446]{position:relative;display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-radius:var(--border-radius);overflow:hidden}.file .cover[data-v-eae08446],.folder .cover[data-v-eae08446]{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-eae08446],.file:active .cover[data-v-eae08446],.file:hover .cover[data-v-eae08446],.file:focus .cover[data-v-eae08446],.folder.active .cover[data-v-eae08446],.folder:active .cover[data-v-eae08446],.folder:hover .cover[data-v-eae08446],.folder:focus .cover[data-v-eae08446]{opacity:.3}.file--clear.active .cover[data-v-eae08446],.file--clear:active .cover[data-v-eae08446],.file--clear:hover .cover[data-v-eae08446],.file--clear:focus .cover[data-v-eae08446],.folder--clear.active .cover[data-v-eae08446],.folder--clear:active .cover[data-v-eae08446],.folder--clear:hover .cover[data-v-eae08446],.folder--clear:focus .cover[data-v-eae08446]{opacity:.1}.fade-enter-active[data-v-eae08446],.fade-leave-active[data-v-eae08446]{transition:opacity var(--animation-quick) ease-in-out}.fade-enter[data-v-eae08446],.fade-leave-to[data-v-eae08446]{opacity:0}.folder-content[data-v-eae08446]{position:absolute;display:grid;width:100%;height:100%}.folder-content--grid-1[data-v-eae08446]{grid-template-columns:1fr;grid-template-rows:1fr}.folder-content--grid-2[data-v-eae08446]{grid-template-columns:1fr;grid-template-rows:1fr 1fr}.folder-content--grid-3[data-v-eae08446]{grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr}.folder-content--grid-3 img[data-v-eae08446]:first-child{grid-column:span 2}.folder-content--grid-4[data-v-eae08446]{grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr}.folder-content img[data-v-eae08446]{width:100%;height:100%;object-fit:cover}.folder-name[data-v-eae08446]{position:absolute;z-index:3;display:flex;overflow:hidden;flex-direction:column;width:100%;height:100%;transition:opacity var(--animation-quick) ease-in-out;opacity:1}.folder-name__icon[data-v-eae08446]{height:40%;margin-top:calc(30% - 1rem / 2);background-size:40%}.folder-name__name[data-v-eae08446]{overflow:hidden;height:1rem;padding:0 10px;text-align:center;white-space:nowrap;text-overflow:ellipsis;color:var(--color-main-background);text-shadow:0 0 8px var(--color-main-text);font-size:1rem;line-height:1rem}.folder--clear .folder-name__icon[data-v-eae08446]{opacity:.3}.folder--clear .folder-name__name[data-v-eae08446]{color:var(--color-main-text);text-shadow:0 0 8px var(--color-main-background)}.folder:not(.folder--clear) .cover[data-v-eae08446]{opacity:.3}.folder:not(.folder--clear).active .folder-name[data-v-eae08446],.folder:not(.folder--clear).active .cover[data-v-eae08446],.folder:not(.folder--clear):active .folder-name[data-v-eae08446],.folder:not(.folder--clear):active .cover[data-v-eae08446],.folder:not(.folder--clear):hover .folder-name[data-v-eae08446],.folder:not(.folder--clear):hover .cover[data-v-eae08446],.folder:not(.folder--clear):focus .folder-name[data-v-eae08446],.folder:not(.folder--clear):focus .cover[data-v-eae08446]{opacity:0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/mixins/FileFolder.scss\",\"webpack://./src/components/Folder.vue\"],\"names\":[],\"mappings\":\"AAsBA,gDAEC,iBAAA,CACA,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,wBAAA,CAAA,gBAAA,CACA,kCAAA,CACA,eAAA,CAEA,8DACC,SAAA,CAMA,UAAA,CACA,mBAAA,CACA,qDAAA,CACA,SAAA,CACA,uCAAA,CAOA,4SACC,UAAA,CAQD,oWACC,UAAA,CAKH,wEACC,qDAAA,CAGD,6DACC,SAAA,CClED,iCACC,iBAAA,CACA,YAAA,CACA,UAAA,CACA,WAAA,CAEA,yCACC,yBAAA,CACA,sBAAA,CAED,yCACC,yBAAA,CACA,0BAAA,CAED,yCACC,6BAAA,CACA,0BAAA,CACA,yDACC,kBAAA,CAGF,yCACC,6BAAA,CACA,0BAAA,CAED,qCACC,UAAA,CACA,WAAA,CAEA,gBAAA,CAMF,8BACC,iBAAA,CACA,SAAA,CACA,YAAA,CACA,eAAA,CACA,qBAAA,CACA,UAAA,CACA,WAAA,CACA,qDAAA,CACA,SAAA,CACA,oCACC,UAAA,CACA,+BAAA,CACA,mBAAA,CAED,oCACC,eAAA,CACA,WAnBY,CAoBZ,cAAA,CACA,iBAAA,CACA,kBAAA,CACA,sBAAA,CACA,kCAAA,CACA,0CAAA,CACA,cA1BY,CA2BZ,gBA3BY,CAmCZ,mDACC,UAAA,CAED,mDACC,4BAAA,CACA,gDAAA,CAQD,oDACC,UAAA,CASA,4eAEC,SAAA\",\"sourcesContent\":[\"/**\\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\\n *\\n * @author John Molakvoæ <skjnldsv@protonmail.com>\\n *\\n * @license AGPL-3.0-or-later\\n *\\n * This program is free software: you can redistribute it and/or modify\\n * it under the terms of the GNU Affero General Public License as\\n * published by the Free Software Foundation, either version 3 of the\\n * License, or (at your option) any later version.\\n *\\n * This program is distributed in the hope that it will be useful,\\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n * GNU Affero General Public License for more details.\\n *\\n * You should have received a copy of the GNU Affero General Public License\\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\\n *\\n */\\n\\n.file,\\n.folder {\\n\\tposition: relative;\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tjustify-content: center;\\n\\tuser-select: none;\\n\\tborder-radius: var(--border-radius);\\n\\toverflow: hidden;\\n\\n\\t.cover {\\n\\t\\tz-index: 2;\\n\\t\\t// We want nice squares despite anything that is in it.\\n\\t\\t// The .cover is what makes the exact square size of the grid.\\n\\t\\t// We use padding-bottom because padding with percentage\\n\\t\\t// always refers to the width. And we only want to fit\\n\\t\\t// the css grid's width.\\n\\t\\twidth: 100%;\\n\\t\\tpadding-bottom: 100%;\\n\\t\\ttransition: opacity var(--animation-quick) ease-in-out;\\n\\t\\topacity: 0;\\n\\t\\tbackground-color: var(--color-main-text);\\n\\t}\\n\\n\\t&.active,\\n\\t&:active,\\n\\t&:hover,\\n\\t&:focus {\\n\\t\\t.cover {\\n\\t\\t\\topacity: .3;\\n\\t\\t}\\n\\t}\\n\\n\\t&--clear.active,\\n\\t&--clear:active,\\n\\t&--clear:hover,\\n\\t&--clear:focus {\\n\\t\\t.cover {\\n\\t\\t\\topacity: .1;\\n\\t\\t}\\n\\t}\\n}\\n\\n.fade-enter-active, .fade-leave-active {\\n\\ttransition: opacity var(--animation-quick) ease-in-out;\\n}\\n\\n.fade-enter, .fade-leave-to {\\n\\topacity: 0;\\n}\\n\",\"$sizes: (\\\"400\\\": (\\\"count\\\": 3, \\\"marginTop\\\": 66, \\\"marginW\\\": 8), \\\"700\\\": (\\\"count\\\": 4, \\\"marginTop\\\": 66, \\\"marginW\\\": 8), \\\"1024\\\": (\\\"count\\\": 5, \\\"marginTop\\\": 66, \\\"marginW\\\": 44), \\\"1280\\\": (\\\"count\\\": 4, \\\"marginTop\\\": 66, \\\"marginW\\\": 44), \\\"1440\\\": (\\\"count\\\": 5, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"1600\\\": (\\\"count\\\": 6, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"2048\\\": (\\\"count\\\": 7, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"2560\\\": (\\\"count\\\": 8, \\\"marginTop\\\": 88, \\\"marginW\\\": 88), \\\"3440\\\": (\\\"count\\\": 9, \\\"marginTop\\\": 88, \\\"marginW\\\": 88), \\\"max\\\": (\\\"count\\\": 10, \\\"marginTop\\\": 88, \\\"marginW\\\": 88));\\n\\n@import '../mixins/FileFolder';\\n\\n.folder-content {\\n\\tposition: absolute;\\n\\tdisplay: grid;\\n\\twidth: 100%;\\n\\theight: 100%;\\n\\t// folder layout if less than 4 pictures\\n\\t&--grid-1 {\\n\\t\\tgrid-template-columns: 1fr;\\n\\t\\tgrid-template-rows: 1fr;\\n\\t}\\n\\t&--grid-2 {\\n\\t\\tgrid-template-columns: 1fr;\\n\\t\\tgrid-template-rows: 1fr 1fr;\\n\\t}\\n\\t&--grid-3 {\\n\\t\\tgrid-template-columns: 1fr 1fr;\\n\\t\\tgrid-template-rows: 1fr 1fr;\\n\\t\\timg:first-child {\\n\\t\\t\\tgrid-column: span 2;\\n\\t\\t}\\n\\t}\\n\\t&--grid-4 {\\n\\t\\tgrid-template-columns: 1fr 1fr;\\n\\t\\tgrid-template-rows: 1fr 1fr;\\n\\t}\\n\\timg {\\n\\t\\twidth: 100%;\\n\\t\\theight: 100%;\\n\\n\\t\\tobject-fit: cover;\\n\\t}\\n}\\n\\n$name-height: 1rem;\\n\\n.folder-name {\\n\\tposition: absolute;\\n\\tz-index: 3;\\n\\tdisplay: flex;\\n\\toverflow: hidden;\\n\\tflex-direction: column;\\n\\twidth: 100%;\\n\\theight: 100%;\\n\\ttransition: opacity var(--animation-quick) ease-in-out;\\n\\topacity: 1;\\n\\t&__icon {\\n\\t\\theight: 40%;\\n\\t\\tmargin-top: calc(30% - #{$name-height} / 2); // center name+icon\\n\\t\\tbackground-size: 40%;\\n\\t}\\n\\t&__name {\\n\\t\\toverflow: hidden;\\n\\t\\theight: $name-height;\\n\\t\\tpadding: 0 10px;\\n\\t\\ttext-align: center;\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\tcolor: var(--color-main-background);\\n\\t\\ttext-shadow: 0 0 8px var(--color-main-text);\\n\\t\\tfont-size: $name-height;\\n\\t\\tline-height: $name-height;\\n\\t}\\n}\\n\\n// Cover management empty/full\\n.folder {\\n\\t// if no img, let's display the folder icon as default black\\n\\t&--clear {\\n\\t\\t.folder-name__icon {\\n\\t\\t\\topacity: .3;\\n\\t\\t}\\n\\t\\t.folder-name__name {\\n\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\ttext-shadow: 0 0 8px var(--color-main-background);\\n\\t\\t}\\n\\t}\\n\\n\\t// show the cover as background\\n\\t// if there are pictures in it\\n\\t// so we can sho the folder+name above it\\n\\t&:not(.folder--clear) {\\n\\t\\t.cover {\\n\\t\\t\\topacity: .3;\\n\\t\\t}\\n\\n\\t\\t// hide everything but pictures\\n\\t\\t// on hover/active/focus\\n\\t\\t&.active,\\n\\t\\t&:active,\\n\\t\\t&:hover,\\n\\t\\t&:focus {\\n\\t\\t\\t.folder-name,\\n\\t\\t\\t.cover {\\n\\t\\t\\t\\topacity: 0;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".file[data-v-e38275f4],.folder[data-v-e38275f4]{position:relative;display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-radius:var(--border-radius);overflow:hidden}.file .cover[data-v-e38275f4],.folder .cover[data-v-e38275f4]{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-e38275f4],.file:active .cover[data-v-e38275f4],.file:hover .cover[data-v-e38275f4],.file:focus .cover[data-v-e38275f4],.folder.active .cover[data-v-e38275f4],.folder:active .cover[data-v-e38275f4],.folder:hover .cover[data-v-e38275f4],.folder:focus .cover[data-v-e38275f4]{opacity:.3}.file--clear.active .cover[data-v-e38275f4],.file--clear:active .cover[data-v-e38275f4],.file--clear:hover .cover[data-v-e38275f4],.file--clear:focus .cover[data-v-e38275f4],.folder--clear.active .cover[data-v-e38275f4],.folder--clear:active .cover[data-v-e38275f4],.folder--clear:hover .cover[data-v-e38275f4],.folder--clear:focus .cover[data-v-e38275f4]{opacity:.1}.fade-enter-active[data-v-e38275f4],.fade-leave-active[data-v-e38275f4]{transition:opacity var(--animation-quick) ease-in-out}.fade-enter[data-v-e38275f4],.fade-leave-to[data-v-e38275f4]{opacity:0}.folder-content[data-v-e38275f4]{position:absolute;display:grid;width:100%;height:100%}.folder-content--grid-1[data-v-e38275f4]{grid-template-columns:1fr;grid-template-rows:1fr}.folder-content--grid-2[data-v-e38275f4]{grid-template-columns:1fr;grid-template-rows:1fr 1fr}.folder-content--grid-3[data-v-e38275f4]{grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr}.folder-content--grid-3 img[data-v-e38275f4]:first-child{grid-column:span 2}.folder-content--grid-4[data-v-e38275f4]{grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr}.folder-content img[data-v-e38275f4]{width:100%;height:100%;object-fit:cover}.folder-name[data-v-e38275f4]{position:absolute;z-index:3;display:flex;overflow:hidden;flex-direction:column;width:100%;height:100%;transition:opacity var(--animation-quick) ease-in-out;opacity:1}.folder-name__icon[data-v-e38275f4]{height:40%;margin-top:calc(30% - 1rem / 2);background-size:40%}.folder-name__name[data-v-e38275f4]{overflow:hidden;height:1rem;padding:0 10px;text-align:center;white-space:nowrap;text-overflow:ellipsis;color:var(--color-main-background);text-shadow:0 0 8px var(--color-main-text);font-size:1rem;line-height:1rem}.folder[data-v-e38275f4]{border-radius:var(--border-radius-large)}.folder--clear .folder-name__icon[data-v-e38275f4]{opacity:.3}.folder--clear .folder-name__name[data-v-e38275f4]{color:var(--color-main-text);text-shadow:0 0 8px var(--color-main-background)}.folder:not(.folder--clear) .cover[data-v-e38275f4]{opacity:.3}.folder:not(.folder--clear):active .folder-name[data-v-e38275f4],.folder:not(.folder--clear):active .cover[data-v-e38275f4],.folder:not(.folder--clear):hover .folder-name[data-v-e38275f4],.folder:not(.folder--clear):hover .cover[data-v-e38275f4],.folder:not(.folder--clear):focus .folder-name[data-v-e38275f4],.folder:not(.folder--clear):focus .cover[data-v-e38275f4]{opacity:0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/mixins/FileFolder.scss\",\"webpack://./src/components/FolderTagPreview.vue\"],\"names\":[],\"mappings\":\"AAsBA,gDAEC,iBAAA,CACA,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,wBAAA,CAAA,gBAAA,CACA,kCAAA,CACA,eAAA,CAEA,8DACC,SAAA,CAMA,UAAA,CACA,mBAAA,CACA,qDAAA,CACA,SAAA,CACA,uCAAA,CAOA,4SACC,UAAA,CAQD,oWACC,UAAA,CAKH,wEACC,qDAAA,CAGD,6DACC,SAAA,CClED,iCACC,iBAAA,CACA,YAAA,CACA,UAAA,CACA,WAAA,CAEA,yCACC,yBAAA,CACA,sBAAA,CAED,yCACC,yBAAA,CACA,0BAAA,CAED,yCACC,6BAAA,CACA,0BAAA,CACA,yDACC,kBAAA,CAGF,yCACC,6BAAA,CACA,0BAAA,CAED,qCACC,UAAA,CACA,WAAA,CAEA,gBAAA,CAMF,8BACC,iBAAA,CACA,SAAA,CACA,YAAA,CACA,eAAA,CACA,qBAAA,CACA,UAAA,CACA,WAAA,CACA,qDAAA,CACA,SAAA,CACA,oCACC,UAAA,CACA,+BAAA,CACA,mBAAA,CAED,oCACC,eAAA,CACA,WAnBY,CAoBZ,cAAA,CACA,iBAAA,CACA,kBAAA,CACA,sBAAA,CACA,kCAAA,CACA,0CAAA,CACA,cA1BY,CA2BZ,gBA3BY,CAgCd,yBACC,wCAAA,CAGC,mDACC,UAAA,CAED,mDACC,4BAAA,CACA,gDAAA,CAQD,oDACC,UAAA,CAQA,gXAEC,SAAA\",\"sourcesContent\":[\"/**\\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\\n *\\n * @author John Molakvoæ <skjnldsv@protonmail.com>\\n *\\n * @license AGPL-3.0-or-later\\n *\\n * This program is free software: you can redistribute it and/or modify\\n * it under the terms of the GNU Affero General Public License as\\n * published by the Free Software Foundation, either version 3 of the\\n * License, or (at your option) any later version.\\n *\\n * This program is distributed in the hope that it will be useful,\\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n * GNU Affero General Public License for more details.\\n *\\n * You should have received a copy of the GNU Affero General Public License\\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\\n *\\n */\\n\\n.file,\\n.folder {\\n\\tposition: relative;\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tjustify-content: center;\\n\\tuser-select: none;\\n\\tborder-radius: var(--border-radius);\\n\\toverflow: hidden;\\n\\n\\t.cover {\\n\\t\\tz-index: 2;\\n\\t\\t// We want nice squares despite anything that is in it.\\n\\t\\t// The .cover is what makes the exact square size of the grid.\\n\\t\\t// We use padding-bottom because padding with percentage\\n\\t\\t// always refers to the width. And we only want to fit\\n\\t\\t// the css grid's width.\\n\\t\\twidth: 100%;\\n\\t\\tpadding-bottom: 100%;\\n\\t\\ttransition: opacity var(--animation-quick) ease-in-out;\\n\\t\\topacity: 0;\\n\\t\\tbackground-color: var(--color-main-text);\\n\\t}\\n\\n\\t&.active,\\n\\t&:active,\\n\\t&:hover,\\n\\t&:focus {\\n\\t\\t.cover {\\n\\t\\t\\topacity: .3;\\n\\t\\t}\\n\\t}\\n\\n\\t&--clear.active,\\n\\t&--clear:active,\\n\\t&--clear:hover,\\n\\t&--clear:focus {\\n\\t\\t.cover {\\n\\t\\t\\topacity: .1;\\n\\t\\t}\\n\\t}\\n}\\n\\n.fade-enter-active, .fade-leave-active {\\n\\ttransition: opacity var(--animation-quick) ease-in-out;\\n}\\n\\n.fade-enter, .fade-leave-to {\\n\\topacity: 0;\\n}\\n\",\"$sizes: (\\\"400\\\": (\\\"count\\\": 3, \\\"marginTop\\\": 66, \\\"marginW\\\": 8), \\\"700\\\": (\\\"count\\\": 4, \\\"marginTop\\\": 66, \\\"marginW\\\": 8), \\\"1024\\\": (\\\"count\\\": 5, \\\"marginTop\\\": 66, \\\"marginW\\\": 44), \\\"1280\\\": (\\\"count\\\": 4, \\\"marginTop\\\": 66, \\\"marginW\\\": 44), \\\"1440\\\": (\\\"count\\\": 5, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"1600\\\": (\\\"count\\\": 6, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"2048\\\": (\\\"count\\\": 7, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"2560\\\": (\\\"count\\\": 8, \\\"marginTop\\\": 88, \\\"marginW\\\": 88), \\\"3440\\\": (\\\"count\\\": 9, \\\"marginTop\\\": 88, \\\"marginW\\\": 88), \\\"max\\\": (\\\"count\\\": 10, \\\"marginTop\\\": 88, \\\"marginW\\\": 88));\\n\\n@import '../mixins/FileFolder';\\n\\n.folder-content {\\n\\tposition: absolute;\\n\\tdisplay: grid;\\n\\twidth: 100%;\\n\\theight: 100%;\\n\\t// folder layout if less than 4 pictures\\n\\t&--grid-1 {\\n\\t\\tgrid-template-columns: 1fr;\\n\\t\\tgrid-template-rows: 1fr;\\n\\t}\\n\\t&--grid-2 {\\n\\t\\tgrid-template-columns: 1fr;\\n\\t\\tgrid-template-rows: 1fr 1fr;\\n\\t}\\n\\t&--grid-3 {\\n\\t\\tgrid-template-columns: 1fr 1fr;\\n\\t\\tgrid-template-rows: 1fr 1fr;\\n\\t\\timg:first-child {\\n\\t\\t\\tgrid-column: span 2;\\n\\t\\t}\\n\\t}\\n\\t&--grid-4 {\\n\\t\\tgrid-template-columns: 1fr 1fr;\\n\\t\\tgrid-template-rows: 1fr 1fr;\\n\\t}\\n\\timg {\\n\\t\\twidth: 100%;\\n\\t\\theight: 100%;\\n\\n\\t\\tobject-fit: cover;\\n\\t}\\n}\\n\\n$name-height: 1rem;\\n\\n.folder-name {\\n\\tposition: absolute;\\n\\tz-index: 3;\\n\\tdisplay: flex;\\n\\toverflow: hidden;\\n\\tflex-direction: column;\\n\\twidth: 100%;\\n\\theight: 100%;\\n\\ttransition: opacity var(--animation-quick) ease-in-out;\\n\\topacity: 1;\\n\\t&__icon {\\n\\t\\theight: 40%;\\n\\t\\tmargin-top: calc(30% - #{$name-height} / 2); // center name+icon\\n\\t\\tbackground-size: 40%;\\n\\t}\\n\\t&__name {\\n\\t\\toverflow: hidden;\\n\\t\\theight: $name-height;\\n\\t\\tpadding: 0 10px;\\n\\t\\ttext-align: center;\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\tcolor: var(--color-main-background);\\n\\t\\ttext-shadow: 0 0 8px var(--color-main-text);\\n\\t\\tfont-size: $name-height;\\n\\t\\tline-height: $name-height;\\n\\t}\\n}\\n\\n// Cover management empty/full\\n.folder {\\n\\tborder-radius: var(--border-radius-large);\\n\\t// if no img, let's display the folder icon as default black\\n\\t&--clear {\\n\\t\\t.folder-name__icon {\\n\\t\\t\\topacity: .3;\\n\\t\\t}\\n\\t\\t.folder-name__name {\\n\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\ttext-shadow: 0 0 8px var(--color-main-background);\\n\\t\\t}\\n\\t}\\n\\n\\t// show the cover as background\\n\\t// if there are pictures in it\\n\\t// so we can sho the folder+name above it\\n\\t&:not(.folder--clear) {\\n\\t\\t.cover {\\n\\t\\t\\topacity: .3;\\n\\t\\t}\\n\\n\\t\\t// hide everything but pictures\\n\\t\\t// on hover/active/focus\\n\\t\\t&:active,\\n\\t\\t&:hover,\\n\\t\\t&:focus {\\n\\t\\t\\t.folder-name,\\n\\t\\t\\t.cover {\\n\\t\\t\\t\\topacity: 0;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \":root{--photos-navigation-height: 64px;--photos-navigation-spacing: calc((var(--photos-navigation-height) - 44px) / 2)}button.app-navigation-toggle{top:0 !important;right:calc(var(--photos-navigation-height)*-1) !important;margin:var(--photos-navigation-spacing) !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/HeaderNavigation.vue\"],\"names\":[],\"mappings\":\"AAEA,MACC,gCAAA,CAEA,+EAAA,CAID,6BAEC,gBAAA,CACA,yDAAA,CACA,kDAAA\",\"sourcesContent\":[\"$sizes: (\\\"400\\\": (\\\"count\\\": 3, \\\"marginTop\\\": 66, \\\"marginW\\\": 8), \\\"700\\\": (\\\"count\\\": 4, \\\"marginTop\\\": 66, \\\"marginW\\\": 8), \\\"1024\\\": (\\\"count\\\": 5, \\\"marginTop\\\": 66, \\\"marginW\\\": 44), \\\"1280\\\": (\\\"count\\\": 4, \\\"marginTop\\\": 66, \\\"marginW\\\": 44), \\\"1440\\\": (\\\"count\\\": 5, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"1600\\\": (\\\"count\\\": 6, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"2048\\\": (\\\"count\\\": 7, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"2560\\\": (\\\"count\\\": 8, \\\"marginTop\\\": 88, \\\"marginW\\\": 88), \\\"3440\\\": (\\\"count\\\": 9, \\\"marginTop\\\": 88, \\\"marginW\\\": 88), \\\"max\\\": (\\\"count\\\": 10, \\\"marginTop\\\": 88, \\\"marginW\\\": 88));\\n\\n:root {\\n\\t--photos-navigation-height: 64px;\\n\\t// header height - button size\\n\\t--photos-navigation-spacing: calc((var(--photos-navigation-height) - 44px) / 2);\\n}\\n\\n// Properly position the navigation toggle button\\nbutton.app-navigation-toggle {\\n\\t// App-navigation have a 4px margin top\\n\\ttop: 0 !important;\\n\\tright: calc(var(--photos-navigation-height) * -1) !important;\\n\\tmargin: var(--photos-navigation-spacing) !important;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".photos-navigation[data-v-809e621a]{position:-webkit-sticky;position:sticky;z-index:20;top:0;display:flex;align-items:center;width:100%;min-height:var(--photos-navigation-height);padding:0 var(--photos-navigation-height);background:var(--color-main-background)}.photos-navigation__back[data-v-809e621a]{position:absolute !important;left:0;margin:var(--photos-navigation-spacing) !important}.photos-navigation__title[data-v-809e621a]{max-width:50%;margin-right:calc(2*var(--photos-navigation-spacing));display:flex;flex-direction:column}.photos-navigation__title__main[data-v-809e621a]{margin:0;cursor:pointer}.photos-navigation__title__main[data-v-809e621a],.photos-navigation__title__sub[data-v-809e621a]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.photos-navigation__loader[data-v-809e621a]{margin-left:32px}.photos-navigation__content-right[data-v-809e621a]{display:flex;align-items:center;justify-content:center;margin-left:auto}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/HeaderNavigation.vue\"],\"names\":[],\"mappings\":\"AAEA,oCACC,uBAAA,CAAA,eAAA,CACA,UAAA,CACA,KAAA,CACA,YAAA,CACA,kBAAA,CACA,UAAA,CACA,0CAAA,CACA,yCAAA,CACA,uCAAA,CAEA,0CAEC,4BAAA,CACA,MAAA,CACA,kDAAA,CAGD,2CACC,aAAA,CACA,qDAAA,CACA,YAAA,CACA,qBAAA,CAEA,iDACC,QAAA,CACA,cAAA,CAGD,iGACC,eAAA,CACA,kBAAA,CACA,sBAAA,CAIF,4CACC,gBAAA,CAGD,mDACC,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,gBAAA\",\"sourcesContent\":[\"$sizes: (\\\"400\\\": (\\\"count\\\": 3, \\\"marginTop\\\": 66, \\\"marginW\\\": 8), \\\"700\\\": (\\\"count\\\": 4, \\\"marginTop\\\": 66, \\\"marginW\\\": 8), \\\"1024\\\": (\\\"count\\\": 5, \\\"marginTop\\\": 66, \\\"marginW\\\": 44), \\\"1280\\\": (\\\"count\\\": 4, \\\"marginTop\\\": 66, \\\"marginW\\\": 44), \\\"1440\\\": (\\\"count\\\": 5, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"1600\\\": (\\\"count\\\": 6, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"2048\\\": (\\\"count\\\": 7, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"2560\\\": (\\\"count\\\": 8, \\\"marginTop\\\": 88, \\\"marginW\\\": 88), \\\"3440\\\": (\\\"count\\\": 9, \\\"marginTop\\\": 88, \\\"marginW\\\": 88), \\\"max\\\": (\\\"count\\\": 10, \\\"marginTop\\\": 88, \\\"marginW\\\": 88));\\n\\n.photos-navigation {\\n\\tposition: sticky;\\n\\tz-index: 20;\\n\\ttop: 0;\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\twidth: 100%;\\n\\tmin-height: var(--photos-navigation-height);\\n\\tpadding: 0 var(--photos-navigation-height);\\n\\tbackground: var(--color-main-background);\\n\\n\\t&__back {\\n\\t\\t// Above the navigation menu\\n\\t\\tposition: absolute !important;\\n\\t\\tleft: 0;\\n\\t\\tmargin: var(--photos-navigation-spacing) !important;\\n\\t}\\n\\n\\t&__title {\\n\\t\\tmax-width: 50%;\\n\\t\\tmargin-right: calc(2 * var(--photos-navigation-spacing));\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\n\\t\\t&__main {\\n\\t\\t\\tmargin: 0;\\n\\t\\t\\tcursor: pointer;\\n\\t\\t}\\n\\n\\t\\t&__main, &__sub {\\n\\t\\t\\toverflow: hidden;\\n\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t}\\n\\t}\\n\\n\\t&__loader {\\n\\t\\tmargin-left: 32px;\\n\\t}\\n\\n\\t&__content-right {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\t\\tjustify-content: center;\\n\\t\\tmargin-left: auto;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"@media(min-width: 0px)and (max-width: 400px){.grid-container[data-v-0510aa84]{padding:0px 8px 256px 8px}}@media(min-width: 400px)and (max-width: 700px){.grid-container[data-v-0510aa84]{padding:0px 8px 256px 8px}}@media(min-width: 700px)and (max-width: 1024px){.grid-container[data-v-0510aa84]{padding:0px 44px 256px 44px}}@media(min-width: 1024px)and (max-width: 1280px){.grid-container[data-v-0510aa84]{padding:0px 44px 256px 44px}}@media(min-width: 1280px)and (max-width: 1440px){.grid-container[data-v-0510aa84]{padding:0px 66px 256px 66px}}@media(min-width: 1440px)and (max-width: 1600px){.grid-container[data-v-0510aa84]{padding:0px 66px 256px 66px}}@media(min-width: 1600px)and (max-width: 2048px){.grid-container[data-v-0510aa84]{padding:0px 66px 256px 66px}}@media(min-width: 2048px)and (max-width: 2560px){.grid-container[data-v-0510aa84]{padding:0px 88px 256px 88px}}@media(min-width: 2560px)and (max-width: 3440px){.grid-container[data-v-0510aa84]{padding:0px 88px 256px 88px}}@media(min-width: 3440px){.grid-container[data-v-0510aa84]{padding:0px 88px 256px 88px}}.photos-navigation[data-v-0510aa84]{position:relative}.photos-navigation--uploading[data-v-0510aa84]{margin-bottom:30px}[data-v-0510aa84] .upload-picker .upload-picker__progress{position:absolute;bottom:-30px;left:64px;margin:0}[data-v-0510aa84] .upload-picker .upload-picker__cancel{position:absolute;bottom:-24px;right:50px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/mixins/GridSizes.scss\",\"webpack://./src/views/Folders.vue\"],\"names\":[],\"mappings\":\"AAoCG,6CChCH,iCAEE,yBAAA,CAAA,CD8BC,+CChCH,iCAEE,yBAAA,CAAA,CD8BC,gDChCH,iCAEE,2BAAA,CAAA,CD8BC,iDChCH,iCAEE,2BAAA,CAAA,CD8BC,iDChCH,iCAEE,2BAAA,CAAA,CD8BC,iDChCH,iCAEE,2BAAA,CAAA,CD8BC,iDChCH,iCAEE,2BAAA,CAAA,CD8BC,iDChCH,iCAEE,2BAAA,CAAA,CD8BC,iDChCH,iCAEE,2BAAA,CAAA,CD0BC,0BC5BH,iCAEE,2BAAA,CAAA,CAIF,oCACC,iBAAA,CAGA,+CACC,kBAAA,CAKD,0DACC,iBAAA,CACA,YAAA,CACA,SAAA,CACA,QAAA,CAGD,wDACC,iBAAA,CACA,YAAA,CACA,UAAA\",\"sourcesContent\":[\"/**\\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\\n *\\n * @author John Molakvoæ <skjnldsv@protonmail.com>\\n *\\n * @license AGPL-3.0-or-later\\n *\\n * This program is free software: you can redistribute it and/or modify\\n * it under the terms of the GNU Affero General Public License as\\n * published by the Free Software Foundation, either version 3 of the\\n * License, or (at your option) any later version.\\n *\\n * This program is distributed in the hope that it will be useful,\\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n * GNU Affero General Public License for more details.\\n *\\n * You should have received a copy of the GNU Affero General Public License\\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\\n *\\n */\\n@use 'sass:map';\\n\\n@mixin grid-sizes() {\\n\\t$previous: 0;\\n\\n\\t@each $size, $config in $sizes {\\n\\t\\t$count: map.get($config, 'count');\\n\\t\\t$marginTop: map.get($config, 'marginTop');\\n\\t\\t$marginW: map.get($config, 'marginW');\\n\\n\\t\\t@if $size == 'max' {\\n\\t\\t\\t@media (min-width: #{$previous}px) {\\n\\t\\t\\t\\t@content($marginTop, $marginW);\\n\\t\\t\\t}\\n\\t\\t} @else {\\n\\t\\t\\t@media (min-width: #{$previous}px) and (max-width: #{$size}px) {\\n\\t\\t\\t\\t@content($marginTop, $marginW);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\t$previous: $size;\\n\\t}\\n}\\n\",\"$sizes: (\\\"400\\\": (\\\"count\\\": 3, \\\"marginTop\\\": 66, \\\"marginW\\\": 8), \\\"700\\\": (\\\"count\\\": 4, \\\"marginTop\\\": 66, \\\"marginW\\\": 8), \\\"1024\\\": (\\\"count\\\": 5, \\\"marginTop\\\": 66, \\\"marginW\\\": 44), \\\"1280\\\": (\\\"count\\\": 4, \\\"marginTop\\\": 66, \\\"marginW\\\": 44), \\\"1440\\\": (\\\"count\\\": 5, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"1600\\\": (\\\"count\\\": 6, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"2048\\\": (\\\"count\\\": 7, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"2560\\\": (\\\"count\\\": 8, \\\"marginTop\\\": 88, \\\"marginW\\\": 88), \\\"3440\\\": (\\\"count\\\": 9, \\\"marginTop\\\": 88, \\\"marginW\\\": 88), \\\"max\\\": (\\\"count\\\": 10, \\\"marginTop\\\": 88, \\\"marginW\\\": 88));\\n\\n@import '../mixins/GridSizes';\\n\\n.grid-container {\\n\\t@include grid-sizes using ($marginTop, $marginW) {\\n\\t\\tpadding: 0px #{$marginW}px 256px #{$marginW}px;\\n\\t}\\n}\\n\\n.photos-navigation {\\n\\tposition: relative;\\n\\n\\t// Add space at the bottom for the progress bar.\\n\\t&--uploading {\\n\\t\\tmargin-bottom: 30px;\\n\\t}\\n}\\n\\n:deep(.upload-picker) {\\n\\t.upload-picker__progress {\\n\\t\\tposition: absolute;\\n\\t\\tbottom: -30px;\\n\\t\\tleft: 64px;\\n\\t\\tmargin: 0;\\n\\t}\\n\\n\\t.upload-picker__cancel {\\n\\t\\tposition: absolute;\\n\\t\\tbottom: -24px;\\n\\t\\tright: 50px;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"photos-navigation\",class:{'photos-navigation--root': _vm.isRoot},attrs:{\"role\":\"toolbar\"}},[(!_vm.isRoot)?_c('NcButton',{staticClass:\"photos-navigation__back\",attrs:{\"type\":\"tertiary\"},on:{\"click\":_vm.folderUp},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('ArrowLeft',{attrs:{\"size\":20}})]},proxy:true}],null,false,1821202730)}):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"photos-navigation__title\"},[_c('h2',{staticClass:\"photos-navigation__title__main\",on:{\"click\":_vm.refresh}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.name)+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('div',{staticClass:\"photos-navigation__title__sub\"}),_vm._v(\" \"),_vm._t(\"subtitle\")],2),_vm._v(\" \"),(_vm.$slots.default)?_c('div',{staticClass:\"photos-navigation__content\"},[_vm._t(\"default\")],2):_vm._e(),_vm._v(\" \"),_c('NcLoadingIcon',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.loading),expression:\"loading\"}],staticClass:\"photos-navigation__loader\"}),_vm._v(\" \"),_c('div',{staticClass:\"photos-navigation__content-right\"},[_vm._t(\"right\")],2)],1)\n}\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 AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div :class=\"{'photos-navigation--root': isRoot}\" class=\"photos-navigation\" role=\"toolbar\">\n\t\t<!-- Back navigation button -->\n\t\t<NcButton v-if=\"!isRoot\"\n\t\t\tclass=\"photos-navigation__back\"\n\t\t\ttype=\"tertiary\"\n\t\t\t@click=\"folderUp\">\n\t\t\t<template #icon>\n\t\t\t\t<ArrowLeft :size=\"20\" />\n\t\t\t</template>\n\t\t</NcButton>\n\n\t\t<!-- Main Navigation title -->\n\t\t<div class=\"photos-navigation__title\">\n\t\t\t<h2 class=\"photos-navigation__title__main\" @click=\"refresh\">\n\t\t\t\t{{ name }}\n\t\t\t</h2>\n\t\t\t<div class=\"photos-navigation__title__sub\" />\n\t\t\t<slot name=\"subtitle\" />\n\t\t</div>\n\n\t\t<!-- Main slot -->\n\t\t<div v-if=\"$slots.default\" class=\"photos-navigation__content\">\n\t\t\t<slot />\n\t\t</div>\n\n\t\t<NcLoadingIcon v-show=\"loading\" class=\"photos-navigation__loader\" />\n\n\t\t<div class=\"photos-navigation__content-right\">\n\t\t\t<slot name=\"right\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport ArrowLeft from 'vue-material-design-icons/ArrowLeft.vue'\n\nimport { NcButton, NcLoadingIcon } from '@nextcloud/vue'\n\nexport default {\n\tname: 'HeaderNavigation',\n\n\tcomponents: {\n\t\tArrowLeft,\n\t\tNcButton,\n\t\tNcLoadingIcon,\n\t},\n\n\tinheritAttrs: false,\n\n\tprops: {\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tpath: {\n\t\t\ttype: String,\n\t\t\tdefault: '/',\n\t\t},\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\trootTitle: {\n\t\t\ttype: String,\n\t\t\tdefault: t('photos', 'Photos'),\n\t\t},\n\t\t// The route params\n\t\tparams: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\tisRoot() {\n\t\t\tconst isRoot = this.path === '/'\n\t\t\tthis.toggleNavigationButton(!isRoot)\n\t\t\treturn isRoot\n\t\t},\n\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.title\n\t\t},\n\n\t\tparentPath() {\n\t\t\tconst path = this.path.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\n\t\tparentName() {\n\t\t\treturn this.parentPath && this.parentPath.split('/').pop()\n\t\t},\n\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 *\n\t\t * @return {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: this.params || { 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\n\t\trefresh() {\n\t\t\tthis.$emit('refresh')\n\t\t},\n\n\t\ttoggleNavigationButton(hide) {\n\t\t\t// Hide the navigation toggle if the back button is shown\n\t\t\tconst navigationToggle = document.querySelector('button.app-navigation-toggle')\n\t\t\tif (navigationToggle !== null) {\n\t\t\t\tnavigationToggle.style.display = hide ? 'none' : null\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\">\n:root {\n\t--photos-navigation-height: 64px;\n\t// header height - button size\n\t--photos-navigation-spacing: calc((var(--photos-navigation-height) - 44px) / 2);\n}\n\n// Properly position the navigation toggle button\nbutton.app-navigation-toggle {\n\t// App-navigation have a 4px margin top\n\ttop: 0 !important;\n\tright: calc(var(--photos-navigation-height) * -1) !important;\n\tmargin: var(--photos-navigation-spacing) !important;\n}\n\n</style>\n\n<style lang=\"scss\" scoped>\n.photos-navigation {\n\tposition: sticky;\n\tz-index: 20;\n\ttop: 0;\n\tdisplay: flex;\n\talign-items: center;\n\twidth: 100%;\n\tmin-height: var(--photos-navigation-height);\n\tpadding: 0 var(--photos-navigation-height);\n\tbackground: var(--color-main-background);\n\n\t&__back {\n\t\t// Above the navigation menu\n\t\tposition: absolute !important;\n\t\tleft: 0;\n\t\tmargin: var(--photos-navigation-spacing) !important;\n\t}\n\n\t&__title {\n\t\tmax-width: 50%;\n\t\tmargin-right: calc(2 * var(--photos-navigation-spacing));\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\n\t\t&__main {\n\t\t\tmargin: 0;\n\t\t\tcursor: pointer;\n\t\t}\n\n\t\t&__main, &__sub {\n\t\t\toverflow: hidden;\n\t\t\twhite-space: nowrap;\n\t\t\ttext-overflow: ellipsis;\n\t\t}\n\t}\n\n\t&__loader {\n\t\tmargin-left: 32px;\n\t}\n\n\t&__content-right {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tmargin-left: auto;\n\t}\n}\n\n</style>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HeaderNavigation.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!./HeaderNavigation.vue?vue&type=script&lang=js\"","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HeaderNavigation.vue?vue&type=style&index=0&id=809e621a&prod&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HeaderNavigation.vue?vue&type=style&index=0&id=809e621a&prod&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HeaderNavigation.vue?vue&type=style&index=1&id=809e621a&prod&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HeaderNavigation.vue?vue&type=style&index=1&id=809e621a&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./HeaderNavigation.vue?vue&type=template&id=809e621a&scoped=true\"\nimport script from \"./HeaderNavigation.vue?vue&type=script&lang=js\"\nexport * from \"./HeaderNavigation.vue?vue&type=script&lang=js\"\nimport style0 from \"./HeaderNavigation.vue?vue&type=style&index=0&id=809e621a&prod&lang=scss\"\nimport style1 from \"./HeaderNavigation.vue?vue&type=style&index=1&id=809e621a&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"809e621a\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.error === 404)?_c('NcEmptyContent',{attrs:{\"illustration-name\":\"folder\"}},[_vm._v(\"\\n\\t\"+_vm._s(_vm.t('photos', 'This folder does not exist'))+\"\\n\")]):(_vm.error)?_c('NcEmptyContent',[_vm._v(\"\\n\\t\"+_vm._s(_vm.t('photos', 'An error occurred'))+\"\\n\")]):(_vm.initializing)?_c('NcEmptyContent',{attrs:{\"icon\":\"icon-loading\"}},[_vm._v(\"\\n\\t\"+_vm._s(_vm.t('photos', 'Loading folders …'))+\"\\n\")]):(!_vm.initializing)?_c('div',[_c('HeaderNavigation',{key:\"navigation\",class:{'photos-navigation--uploading': _vm.uploader.queue?.length > 0},attrs:{\"loading\":_vm.loading,\"path\":_vm.path,\"title\":_vm.folder.basename.toString(),\"root-title\":_vm.rootTitle},on:{\"refresh\":_vm.onRefresh}},[_c('UploadPicker',{attrs:{\"accept\":_vm.allowedMimes,\"destination\":_vm.path,\"multiple\":true},on:{\"uploaded\":_vm.onUpload}})],1),_vm._v(\" \"),(_vm.isEmpty)?_c('NcEmptyContent',{key:\"emptycontent\",attrs:{\"illustration-name\":\"empty\"}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('photos', 'No photos in here'))+\"\\n\\t\")]):_c('div',{staticClass:\"grid-container\"},[_c('VirtualGrid',{ref:\"virtualgrid\",attrs:{\"items\":_vm.contentList,\"scroll-element\":_vm.appContent,\"get-column-count\":() => _vm.gridConfig.count,\"get-grid-gap\":() => _vm.gridConfig.gap}})],1)],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2020 Corentin Mors\n -\n - @license AGPL-3.0-or-later\n -\n - @author Corentin Mors <medias@pixelswap.fr>\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<a :class=\"{\n\t\t\t'file--cropped': croppedLayout,\n\t\t}\"\n\t\tclass=\"file\"\n\t\t:href=\"item.injected.source\"\n\t\t:aria-label=\"ariaLabel\"\n\t\t@click.prevent=\"openViewer\">\n\t\t<div v-if=\"item.injected.mime.includes('video') && item.injected.hasPreview\" class=\"icon-video-white\" />\n\t\t<!-- image and loading placeholder -->\n\t\t<transition-group name=\"fade\" class=\"transition-group\">\n\t\t\t<img v-if=\"!error\"\n\t\t\t\tref=\"img\"\n\t\t\t\t:key=\"`${item.injected.basename}-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\t\t@error=\"onError\">\n\n\t\t\t<svg v-if=\"!loaded || error\"\n\t\t\t\t:key=\"`${item.injected.basename}-svg`\"\n\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\tviewBox=\"0 0 32 32\"\n\t\t\t\tfill=\"url(#placeholder__gradient)\">\n\t\t\t\t<use v-if=\"isImage\" href=\"#placeholder--img\" />\n\t\t\t\t<use v-else href=\"#placeholder--video\" />\n\t\t\t</svg>\n\t\t</transition-group>\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 { generateUrl } from '@nextcloud/router'\n\nimport UserConfig from '../mixins/UserConfig.js'\n\nexport default {\n\tname: 'FileLegacy',\n\tmixins: [UserConfig],\n\tinheritAttrs: false,\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\terror: false,\n\t\t}\n\t},\n\n\tcomputed: {\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\tdecodedEtag() {\n\t\t\treturn this.item.injected.etag.replace('&quot;', '').replace('&quot;', '')\n\t\t},\n\t\tsrc() {\n\t\t\treturn generateUrl(`/core/preview?fileId=${this.item.injected.fileid}&c=${this.decodedEtag}&x=${250}&y=${250}&forceIcon=0&a=${this.croppedLayout ? '0' : '1'}`)\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\tfileInfo: this.item.injected,\n\t\t\t\tlist: this.item.injected.list,\n\t\t\t\tloadMore: this.item.injected.loadMore ? async () => await this.item.injected.loadMore(true) : () => [],\n\t\t\t\tcanLoop: this.item.injected.canLoop,\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\tonError() {\n\t\t\tthis.error = true\n\t\t},\n\t},\n\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../mixins/FileFolder';\n\n.transition-group {\n\tdisplay: contents;\n}\n\n.icon-video-white {\n\tposition: absolute;\n\ttop: 10px;\n\tright: 10px;\n\tz-index: 20;\n}\n\nimg {\n\tposition: absolute;\n\twidth: 100%;\n\theight: 100%;\n\tz-index: 10;\n\n\tcolor: transparent; // should be diplayed on error\n\n\tobject-fit: contain;\n\n\t.file--cropped & {\n\t\tobject-fit: cover;\n\t}\n}\n\nsvg {\n\tposition: absolute;\n\twidth: 70%;\n\theight: 70%;\n}\n</style>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileLegacy.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!./FileLegacy.vue?vue&type=script&lang=js\"","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileLegacy.vue?vue&type=style&index=0&id=7f7a68cc&prod&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileLegacy.vue?vue&type=style&index=0&id=7f7a68cc&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FileLegacy.vue?vue&type=template&id=7f7a68cc&scoped=true\"\nimport script from \"./FileLegacy.vue?vue&type=script&lang=js\"\nexport * from \"./FileLegacy.vue?vue&type=script&lang=js\"\nimport style0 from \"./FileLegacy.vue?vue&type=style&index=0&id=7f7a68cc&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7f7a68cc\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('a',{staticClass:\"file\",class:{\n\t\t'file--cropped': _vm.croppedLayout,\n\t},attrs:{\"href\":_vm.item.injected.source,\"aria-label\":_vm.ariaLabel},on:{\"click\":function($event){$event.preventDefault();return _vm.openViewer.apply(null, arguments)}}},[(_vm.item.injected.mime.includes('video') && _vm.item.injected.hasPreview)?_c('div',{staticClass:\"icon-video-white\"}):_vm._e(),_vm._v(\" \"),_c('transition-group',{staticClass:\"transition-group\",attrs:{\"name\":\"fade\"}},[(!_vm.error)?_c('img',{key:`${_vm.item.injected.basename}-img`,ref:\"img\",attrs:{\"src\":_vm.src,\"alt\":_vm.item.injected.basename,\"aria-describedby\":_vm.ariaUuid},on:{\"load\":_vm.onLoad,\"error\":_vm.onError}}):_vm._e(),_vm._v(\" \"),(!_vm.loaded || _vm.error)?_c('svg',{key:`${_vm.item.injected.basename}-svg`,attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 32 32\",\"fill\":\"url(#placeholder__gradient)\"}},[(_vm.isImage)?_c('use',{attrs:{\"href\":\"#placeholder--img\"}}):_c('use',{attrs:{\"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)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('FolderTagPreview',{attrs:{\"id\":_vm.item.injected.fileid,\"name\":_vm.item.injected.basename.toString(),\"path\":_vm.item.injected.filename,\"file-list\":_vm.previewFiles}})\n}\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 AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<router-link :class=\"{'folder--clear': isEmpty}\"\n\t\tclass=\"folder\"\n\t\t:to=\"toLink\"\n\t\t:aria-label=\"ariaLabel\">\n\t\t<!-- Images preview -->\n\t\t<transition name=\"fade\">\n\t\t\t<div v-show=\"loaded\"\n\t\t\t\t:class=\"`folder-content--grid-${previewList.length}`\"\n\t\t\t\tclass=\"folder-content\"\n\t\t\t\trole=\"none\">\n\t\t\t\t<img v-for=\"file in previewList\"\n\t\t\t\t\t:key=\"file.fileid\"\n\t\t\t\t\t:src=\"generateImgSrc(file)\"\n\t\t\t\t\talt=\"\"\n\t\t\t\t\t@load=\"loaded = true\"\n\t\t\t\t\t@error=\"onPreviewFail(file)\">\n\t\t\t</div>\n\t\t</transition>\n\n\t\t<div class=\"folder-name\">\n\t\t\t<span :class=\"[!isEmpty ? 'icon-white' : 'icon-dark', icon]\"\n\t\t\t\tclass=\"folder-name__icon\"\n\t\t\t\trole=\"img\" />\n\t\t\t<p :id=\"ariaUuid\" class=\"folder-name__name\">\n\t\t\t\t{{ name }}\n\t\t\t</p>\n\t\t</div>\n\n\t\t<div class=\"cover\" role=\"none\" />\n\t</router-link>\n</template>\n\n<script>\nimport { generateUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\n\nexport default {\n\tname: 'FolderTagPreview',\n\n\tprops: {\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\tdefault: 'icon-folder',\n\t\t},\n\t\tid: {\n\t\t\ttype: [Number, String],\n\t\t\trequired: true,\n\t\t},\n\t\tname: {\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\tfileList: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tto: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloaded: false,\n\t\t\tfailed: [],\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t// folder is empty\n\t\tisEmpty() {\n\t\t\treturn this.previewList.length === 0\n\t\t},\n\n\t\tariaUuid() {\n\t\t\treturn `folder-${this.id}`\n\t\t},\n\t\tariaLabel() {\n\t\t\treturn t('photos', 'Open the \"{name}\" sub-directory', { name: this.name })\n\t\t},\n\n\t\t/**\n\t\t * Previews list without the failed ones\n\t\t *\n\t\t * @return {object[]} the previews fileinfo\n\t\t */\n\t\tpreviewList() {\n\t\t\treturn this.fileList\n\t\t\t\t.filter(file => this.failed.indexOf(file.fileid) === -1)\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 based on the\n\t\t * current named route, get the final url back, decode it\n\t\t * and use it as a direct string.\n\t\t * Which vue-router does not encode afterwards!\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\ttoLink() {\n\t\t\tif (this.to) {\n\t\t\t\treturn this.to\n\t\t\t}\n\n\t\t\t// Remove leading /file/{userId}\n\t\t\tconst prefix = `/files/${getCurrentUser()?.uid}`\n\t\t\tlet path = this.path.replace(new RegExp(`^${prefix}`), '')\n\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\tpath = regex.exec(path)[1]\n\n\t\t\t// apply to current route\n\t\t\treturn Object.assign({}, this.$route, {\n\t\t\t\tparams: { path: path.split('/') },\n\t\t\t})\n\t\t},\n\t},\n\n\tmethods: {\n\t\tgenerateImgSrc({ fileid, etag }) {\n\t\t\t// use etag to force cache reload if file changed\n\t\t\treturn generateUrl(`/core/preview?fileId=${fileid}&c=${etag}&x=${250}&y=${250}&forceIcon=0&a=0`)\n\t\t},\n\t\tonPreviewFail({ fileid }) {\n\t\t\tthis.failed.push(fileid)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../mixins/FileFolder';\n\n.folder-content {\n\tposition: absolute;\n\tdisplay: grid;\n\twidth: 100%;\n\theight: 100%;\n\t// folder layout if less than 4 pictures\n\t&--grid-1 {\n\t\tgrid-template-columns: 1fr;\n\t\tgrid-template-rows: 1fr;\n\t}\n\t&--grid-2 {\n\t\tgrid-template-columns: 1fr;\n\t\tgrid-template-rows: 1fr 1fr;\n\t}\n\t&--grid-3 {\n\t\tgrid-template-columns: 1fr 1fr;\n\t\tgrid-template-rows: 1fr 1fr;\n\t\timg:first-child {\n\t\t\tgrid-column: span 2;\n\t\t}\n\t}\n\t&--grid-4 {\n\t\tgrid-template-columns: 1fr 1fr;\n\t\tgrid-template-rows: 1fr 1fr;\n\t}\n\timg {\n\t\twidth: 100%;\n\t\theight: 100%;\n\n\t\tobject-fit: cover;\n\t}\n}\n\n$name-height: 1rem;\n\n.folder-name {\n\tposition: absolute;\n\tz-index: 3;\n\tdisplay: flex;\n\toverflow: hidden;\n\tflex-direction: column;\n\twidth: 100%;\n\theight: 100%;\n\ttransition: opacity var(--animation-quick) ease-in-out;\n\topacity: 1;\n\t&__icon {\n\t\theight: 40%;\n\t\tmargin-top: calc(30% - #{$name-height} / 2); // center name+icon\n\t\tbackground-size: 40%;\n\t}\n\t&__name {\n\t\toverflow: hidden;\n\t\theight: $name-height;\n\t\tpadding: 0 10px;\n\t\ttext-align: center;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\tcolor: var(--color-main-background);\n\t\ttext-shadow: 0 0 8px var(--color-main-text);\n\t\tfont-size: $name-height;\n\t\tline-height: $name-height;\n\t}\n}\n\n// Cover management empty/full\n.folder {\n\tborder-radius: var(--border-radius-large);\n\t// if no img, let's display the folder icon as default black\n\t&--clear {\n\t\t.folder-name__icon {\n\t\t\topacity: .3;\n\t\t}\n\t\t.folder-name__name {\n\t\t\tcolor: var(--color-main-text);\n\t\t\ttext-shadow: 0 0 8px var(--color-main-background);\n\t\t}\n\t}\n\n\t// show the cover as background\n\t// if there are pictures in it\n\t// so we can sho the folder+name above it\n\t&:not(.folder--clear) {\n\t\t.cover {\n\t\t\topacity: .3;\n\t\t}\n\n\t\t// hide everything but pictures\n\t\t// on hover/active/focus\n\t\t&:active,\n\t\t&:hover,\n\t\t&:focus {\n\t\t\t.folder-name,\n\t\t\t.cover {\n\t\t\t\topacity: 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\n</style>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FolderTagPreview.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!./FolderTagPreview.vue?vue&type=script&lang=js\"","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FolderTagPreview.vue?vue&type=style&index=0&id=e38275f4&prod&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FolderTagPreview.vue?vue&type=style&index=0&id=e38275f4&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FolderTagPreview.vue?vue&type=template&id=e38275f4&scoped=true\"\nimport script from \"./FolderTagPreview.vue?vue&type=script&lang=js\"\nexport * from \"./FolderTagPreview.vue?vue&type=script&lang=js\"\nimport style0 from \"./FolderTagPreview.vue?vue&type=style&index=0&id=e38275f4&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e38275f4\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('router-link',{staticClass:\"folder\",class:{'folder--clear': _vm.isEmpty},attrs:{\"to\":_vm.toLink,\"aria-label\":_vm.ariaLabel}},[_c('transition',{attrs:{\"name\":\"fade\"}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.loaded),expression:\"loaded\"}],staticClass:\"folder-content\",class:`folder-content--grid-${_vm.previewList.length}`,attrs:{\"role\":\"none\"}},_vm._l((_vm.previewList),function(file){return _c('img',{key:file.fileid,attrs:{\"src\":_vm.generateImgSrc(file),\"alt\":\"\"},on:{\"load\":function($event){_vm.loaded = true},\"error\":function($event){return _vm.onPreviewFail(file)}}})}),0)]),_vm._v(\" \"),_c('div',{staticClass:\"folder-name\"},[_c('span',{staticClass:\"folder-name__icon\",class:[!_vm.isEmpty ? 'icon-white' : 'icon-dark', _vm.icon],attrs:{\"role\":\"img\"}}),_vm._v(\" \"),_c('p',{staticClass:\"folder-name__name\",attrs:{\"id\":_vm.ariaUuid}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.name)+\"\\n\\t\\t\")])]),_vm._v(\" \"),_c('div',{staticClass:\"cover\",attrs:{\"role\":\"none\"}})],1)\n}\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 AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport axios from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\nimport { genFileInfo, encodeFilePath } from '../utils/fileUtils.js'\nimport allowedMimes from './AllowedMimes.js'\nimport { getCurrentUser } from '@nextcloud/auth'\n\n/**\n * List files from a folder and filter out unwanted mimes\n *\n * @param {string} path the path relative to the user root\n * @param {object} [options] optional options for axios\n * @param {boolean} [options.shared] fetch shared albums ?\n * @return {Promise<object[]>} the file list\n */\nexport default async function(path = '/', options = {}) {\n\tconst endpoint = generateUrl(`/apps/photos/api/v1/${options.shared ? 'shared' : 'albums'}`)\n\tconst prefix = `/files/${getCurrentUser()?.uid}`\n\n\t// fetch listing\n\tconst response = await axios.get(endpoint + encodeFilePath(path), options)\n\tconst list = response.data\n\t\t.map(data => ({ ...data, filename: `${prefix}${data.filename}` }))\n\t\t.map(data => genFileInfo(data))\n\n\t// filter all the files and folders\n\tlet folder = {}\n\tconst folders = []\n\tconst files = []\n\n\tfor (const entry of list) {\n\t\t// is this the current provided path ?\n\t\tif (entry.filename === `${prefix}${path}`) {\n\t\t\tfolder = entry\n\t\t} else if (entry.type !== 'file') {\n\t\t\tfolders.push(entry)\n\t\t} else if (allowedMimes.indexOf(entry.mime) > -1) {\n\t\t\tfiles.push(entry)\n\t\t}\n\t}\n\n\t// return current folder, subfolders and files\n\treturn { folder, folders, files }\n}\n","<!--\n - @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n - @author Corentin Mors <medias@pixelswap.fr>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<FolderTagPreview :id=\"item.injected.fileid\"\n\t\t:name=\"item.injected.basename.toString()\"\n\t\t:path=\"item.injected.filename\"\n\t\t:file-list=\"previewFiles\" />\n</template>\n\n<script>\nimport { mapGetters } from 'vuex'\n\nimport { getCurrentUser } from '@nextcloud/auth'\n\nimport FolderTagPreview from './FolderTagPreview.vue'\nimport getAlbumContent from '../services/AlbumContent.js'\nimport AbortControllerMixin from '../mixins/AbortControllerMixin.js'\n\nexport default {\n\tname: 'Folder',\n\n\tcomponents: {\n\t\tFolderTagPreview,\n\t},\n\n\tmixins: [\n\t\tAbortControllerMixin,\n\t],\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\tpreviewFolder: this.item.injected.fileid,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t// global lists\n\t\t...mapGetters([\n\t\t\t'files',\n\t\t\t'folders',\n\t\t]),\n\n\t\t// files list of the current folder\n\t\tfolderContent() {\n\t\t\treturn this.folders[this.item.injected.fileid]\n\t\t},\n\t\tpreviewFiles() {\n\t\t\tconst previewFolderContent = this.folders[this.previewFolder]\n\n\t\t\tconst previewFiles = previewFolderContent\n\t\t\t\t? previewFolderContent\n\t\t\t\t\t.map(id => this.files[id])\n\t\t\t\t\t.slice(0, 4) // only get the 4 first images\n\t\t\t\t: []\n\n\t\t\t// If we didn't found any previews in the folder we try the next subfolder\n\t\t\t// We limit to one subfolder for performance concerns\n\t\t\tif (previewFiles.length === 0\n\t\t\t\t&& this.files[this.previewFolder].folders\n\t\t\t\t&& this.previewFolder === this.item.injected.fileid) {\n\n\t\t\t\tconst firstChildFolder = this.files[this.previewFolder].folders[0]\n\t\t\t\tthis.updatePreviewFolder(firstChildFolder)\n\n\t\t\t\tif (!this.folders[this.previewFolder]) {\n\t\t\t\t\tthis.getFolderData(this.files[this.previewFolder].filename)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn previewFiles\n\t\t},\n\t},\n\n\tasync created() {\n\t\tif (!this.folderContent) {\n\t\t\tawait this.getFolderData(this.item.injected.filename)\n\t\t}\n\t},\n\n\tmethods: {\n\t\tasync getFolderData(filename) {\n\t\t\ttry {\n\t\t\t\t// Remove leading /file/{userId}\n\t\t\t\tconst prefix = `/files/${getCurrentUser()?.uid}`\n\t\t\t\tconst unPrefixedFileName = filename.replace(new RegExp(`^${prefix}`), '')\n\n\t\t\t\t// get data\n\t\t\t\tconst { folder, folders, files } = await getAlbumContent(unPrefixedFileName, {\n\t\t\t\t\tshared: this.item.injected.showShared,\n\t\t\t\t\tsignal: this.abortController.signal,\n\t\t\t\t})\n\t\t\t\tthis.$store.dispatch('updateFolders', { fileid: folder.fileid, files, folders })\n\t\t\t\tthis.$store.dispatch('updateFiles', { folder, files, folders })\n\t\t\t} catch (error) {\n\t\t\t\tif (error.response && error.response.status) {\n\t\t\t\t\tconsole.error('Failed to get folder content', filename, error.response)\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tupdatePreviewFolder(path) {\n\t\t\tthis.previewFolder = path\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../mixins/FileFolder';\n\n.folder-content {\n\tposition: absolute;\n\tdisplay: grid;\n\twidth: 100%;\n\theight: 100%;\n\t// folder layout if less than 4 pictures\n\t&--grid-1 {\n\t\tgrid-template-columns: 1fr;\n\t\tgrid-template-rows: 1fr;\n\t}\n\t&--grid-2 {\n\t\tgrid-template-columns: 1fr;\n\t\tgrid-template-rows: 1fr 1fr;\n\t}\n\t&--grid-3 {\n\t\tgrid-template-columns: 1fr 1fr;\n\t\tgrid-template-rows: 1fr 1fr;\n\t\timg:first-child {\n\t\t\tgrid-column: span 2;\n\t\t}\n\t}\n\t&--grid-4 {\n\t\tgrid-template-columns: 1fr 1fr;\n\t\tgrid-template-rows: 1fr 1fr;\n\t}\n\timg {\n\t\twidth: 100%;\n\t\theight: 100%;\n\n\t\tobject-fit: cover;\n\t}\n}\n\n$name-height: 1rem;\n\n.folder-name {\n\tposition: absolute;\n\tz-index: 3;\n\tdisplay: flex;\n\toverflow: hidden;\n\tflex-direction: column;\n\twidth: 100%;\n\theight: 100%;\n\ttransition: opacity var(--animation-quick) ease-in-out;\n\topacity: 1;\n\t&__icon {\n\t\theight: 40%;\n\t\tmargin-top: calc(30% - #{$name-height} / 2); // center name+icon\n\t\tbackground-size: 40%;\n\t}\n\t&__name {\n\t\toverflow: hidden;\n\t\theight: $name-height;\n\t\tpadding: 0 10px;\n\t\ttext-align: center;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\tcolor: var(--color-main-background);\n\t\ttext-shadow: 0 0 8px var(--color-main-text);\n\t\tfont-size: $name-height;\n\t\tline-height: $name-height;\n\t}\n}\n\n// Cover management empty/full\n.folder {\n\t// if no img, let's display the folder icon as default black\n\t&--clear {\n\t\t.folder-name__icon {\n\t\t\topacity: .3;\n\t\t}\n\t\t.folder-name__name {\n\t\t\tcolor: var(--color-main-text);\n\t\t\ttext-shadow: 0 0 8px var(--color-main-background);\n\t\t}\n\t}\n\n\t// show the cover as background\n\t// if there are pictures in it\n\t// so we can sho the folder+name above it\n\t&:not(.folder--clear) {\n\t\t.cover {\n\t\t\topacity: .3;\n\t\t}\n\n\t\t// hide everything but pictures\n\t\t// on hover/active/focus\n\t\t&.active,\n\t\t&:active,\n\t\t&:hover,\n\t\t&:focus {\n\t\t\t.folder-name,\n\t\t\t.cover {\n\t\t\t\topacity: 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\n</style>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Folder.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!./Folder.vue?vue&type=script&lang=js\"","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Folder.vue?vue&type=style&index=0&id=eae08446&prod&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Folder.vue?vue&type=style&index=0&id=eae08446&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Folder.vue?vue&type=template&id=eae08446&scoped=true\"\nimport script from \"./Folder.vue?vue&type=script&lang=js\"\nexport * from \"./Folder.vue?vue&type=script&lang=js\"\nimport style0 from \"./Folder.vue?vue&type=style&index=0&id=eae08446&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"eae08446\",\n null\n \n)\n\nexport default component.exports","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport { sizes } from '../assets/grid-sizes.js'\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] || sizes.max\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 AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport getGridConfig from '../services/GridConfig.js'\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(`[${appName}]`, 'Grid config', Object.assign({}, 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 - @author Corentin Mors <medias@pixelswap.fr>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<!-- Errors handlers-->\n\t<NcEmptyContent v-if=\"error === 404\" illustration-name=\"folder\">\n\t\t{{ t('photos', 'This folder does not exist') }}\n\t</NcEmptyContent>\n\t<NcEmptyContent v-else-if=\"error\">\n\t\t{{ t('photos', 'An error occurred') }}\n\t</NcEmptyContent>\n\t<NcEmptyContent v-else-if=\"initializing\" icon=\"icon-loading\">\n\t\t{{ t('photos', 'Loading folders …') }}\n\t</NcEmptyContent>\n\n\t<!-- Folder content -->\n\t<div v-else-if=\"!initializing\">\n\t\t<HeaderNavigation key=\"navigation\"\n\t\t\t:class=\"{'photos-navigation--uploading': uploader.queue?.length > 0}\"\n\t\t\t:loading=\"loading\"\n\t\t\t:path=\"path\"\n\t\t\t:title=\"folder.basename.toString()\"\n\t\t\t:root-title=\"rootTitle\"\n\t\t\t@refresh=\"onRefresh\">\n\t\t\t<UploadPicker :accept=\"allowedMimes\"\n\t\t\t\t:destination=\"path\"\n\t\t\t\t:multiple=\"true\"\n\t\t\t\t@uploaded=\"onUpload\" />\n\t\t</HeaderNavigation>\n\n\t\t<!-- Empty folder, should only happen via direct link -->\n\t\t<NcEmptyContent v-if=\"isEmpty\" key=\"emptycontent\" illustration-name=\"empty\">\n\t\t\t{{ t('photos', 'No photos in here') }}\n\t\t</NcEmptyContent>\n\n\t\t<div v-else class=\"grid-container\">\n\t\t\t<VirtualGrid ref=\"virtualgrid\"\n\t\t\t\t:items=\"contentList\"\n\t\t\t\t:scroll-element=\"appContent\"\n\t\t\t\t:get-column-count=\"() => gridConfig.count\"\n\t\t\t\t:get-grid-gap=\"() => gridConfig.gap\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { mapGetters } from 'vuex'\nimport { UploadPicker, getUploader } from '@nextcloud/upload'\nimport { NcEmptyContent } from '@nextcloud/vue'\nimport VirtualGrid from 'vue-virtual-grid'\n\nimport FileLegacy from '../components/FileLegacy.vue'\nimport Folder from '../components/Folder.vue'\nimport HeaderNavigation from '../components/HeaderNavigation.vue'\n\nimport { prefixPath } from '../services/DavClient.js'\nimport allowedMimes from '../services/AllowedMimes.js'\nimport getAlbumContent from '../services/AlbumContent.js'\n\nimport AbortControllerMixin from '../mixins/AbortControllerMixin.js'\nimport GridConfigMixin from '../mixins/GridConfig.js'\nimport getFileInfo from '../services/FileInfo.js'\n\nexport default {\n\tname: 'Folders',\n\tcomponents: {\n\t\tVirtualGrid,\n\t\tHeaderNavigation,\n\t\tNcEmptyContent,\n\t\tUploadPicker,\n\t},\n\tmixins: [\n\t\tAbortControllerMixin,\n\t\tGridConfigMixin,\n\t],\n\tprops: {\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\tshowShared: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\terror: null,\n\t\t\tallowedMimes,\n\n\t\t\tinitializing: true,\n\t\t\tloading: false,\n\n\t\t\tappContent: document.getElementById('app-content-vue'),\n\n\t\t\tuploader: getUploader(),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t// global lists\n\t\t...mapGetters([\n\t\t\t'files',\n\t\t\t'folders',\n\t\t]),\n\n\t\t// current folder id from current path\n\t\tfolderId() {\n\t\t\treturn this.$store.getters.folderId(this.path)\n\t\t},\n\n\t\t// files list of the current folder\n\t\tfolder() {\n\t\t\treturn this.files[this.folderId]\n\t\t},\n\t\tfolderContent() {\n\t\t\treturn this.folders[this.folderId]\n\t\t},\n\t\tfileList() {\n\t\t\tconst list = this.folderContent\n\t\t\t\t&& this.folderContent\n\t\t\t\t\t.map(id => this.files[id])\n\t\t\t\t\t.filter(file => !!file)\n\t\t\treturn list\n\t\t},\n\n\t\t// subfolders of the current folder\n\t\tsubFolders() {\n\t\t\treturn this.folderId\n\t\t\t\t&& this.files[this.folderId]\n\t\t\t\t&& this.files[this.folderId].folders\n\t\t},\n\t\tfolderList() {\n\t\t\tconst list = this.subFolders\n\t\t\t\t&& this.subFolders\n\t\t\t\t\t.map(id => this.files[id])\n\t\t\t\t\t.filter(file => !!file)\n\t\t\treturn list\n\t\t},\n\t\tcontentList() {\n\t\t\tconst folders = this.folderList?.map((folder) => {\n\t\t\t\treturn {\n\t\t\t\t\tid: `folder-${folder.fileid}`,\n\t\t\t\t\tinjected: {\n\t\t\t\t\t\t...folder,\n\t\t\t\t\t\tshowShared: this.showShared,\n\t\t\t\t\t},\n\t\t\t\t\twidth: 256,\n\t\t\t\t\theight: 256,\n\t\t\t\t\tcolumnSpan: 1,\n\t\t\t\t\trenderComponent: Folder,\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tconst files = this.fileList?.map((file) => {\n\t\t\t\treturn {\n\t\t\t\t\tid: `file-${file.fileid}`,\n\t\t\t\t\tinjected: {\n\t\t\t\t\t\t...file,\n\t\t\t\t\t\tlist: this.fileList,\n\t\t\t\t\t},\n\t\t\t\t\twidth: 256,\n\t\t\t\t\theight: 256,\n\t\t\t\t\tcolumnSpan: 1,\n\t\t\t\t\trenderComponent: FileLegacy,\n\t\t\t\t}\n\t\t\t})\n\n\t\t\treturn [...(folders || []), ...(files || [])]\n\t\t},\n\n\t\t// is current folder empty?\n\t\tisEmpty() {\n\t\t\treturn !this.haveFiles && !this.haveFolders\n\t\t},\n\t\thaveFiles() {\n\t\t\treturn !!this.fileList && this.fileList.length !== 0\n\t\t},\n\t\thaveFolders() {\n\t\t\treturn !!this.folderList && this.folderList.length !== 0\n\t\t},\n\t},\n\n\twatch: {\n\t\tpath() {\n\t\t\tthis.fetchFolderContent()\n\t\t},\n\t\tshowShared() {\n\t\t\tthis.fetchFolderContent()\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\tthis.fetchFolderContent()\n\t},\n\n\tmethods: {\n\t\tonRefresh() {\n\t\t\tthis.fetchFolderContent()\n\t\t},\n\n\t\tasync fetchFolderContent() {\n\t\t\tthis.error = null\n\t\t\tthis.loading = true\n\n\t\t\t// close any potential opened viewer & sidebar\n\t\t\tOCA?.Viewer?.close?.()\n\t\t\tOCA?.Files?.Sidebar?.close?.()\n\n\t\t\t// if we don't already have some cached data let's show a loader\n\t\t\tif (!this.files[this.folderId] || !this.folders[this.folderId]) {\n\t\t\t\tthis.initializing = true\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\t// get content and current folder info\n\t\t\t\tconst { folder, folders, files } = await getAlbumContent(this.path, {\n\t\t\t\t\tshared: this.showShared,\n\t\t\t\t\tsignal: this.abortController.signal,\n\t\t\t\t})\n\t\t\t\tthis.$store.dispatch('addPath', { path: this.path, fileid: folder.fileid })\n\t\t\t\tthis.$store.dispatch('updateFolders', { fileid: folder.fileid, files, folders })\n\t\t\t\tthis.$store.dispatch('updateFiles', { folder, files, folders })\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}\n\t\t\t\t// cancelled request, moving on...\n\t\t\t\tconsole.error('Error fetching album data', error)\n\t\t\t} finally {\n\t\t\t\t// done loading even with errors\n\t\t\t\tthis.loading = false\n\t\t\t\tthis.initializing = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Fetch file Info and add them into the store\n\t\t *\n\t\t * @param {Upload[]} uploads the newly uploaded files\n\t\t */\n\t\tonUpload(uploads) {\n\t\t\tuploads.forEach(async upload => {\n\t\t\t\tconst relPath = upload.path.split(prefixPath).pop()\n\t\t\t\tconst file = await getFileInfo(relPath)\n\t\t\t\tthis.$store.dispatch('appendFiles', [file])\n\t\t\t\tthis.$store.dispatch('addFilesToFolder', { fileid: this.folderId, files: [file] })\n\t\t\t})\n\t\t},\n\t},\n\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../mixins/GridSizes';\n\n.grid-container {\n\t@include grid-sizes using ($marginTop, $marginW) {\n\t\tpadding: 0px #{$marginW}px 256px #{$marginW}px;\n\t}\n}\n\n.photos-navigation {\n\tposition: relative;\n\n\t// Add space at the bottom for the progress bar.\n\t&--uploading {\n\t\tmargin-bottom: 30px;\n\t}\n}\n\n:deep(.upload-picker) {\n\t.upload-picker__progress {\n\t\tposition: absolute;\n\t\tbottom: -30px;\n\t\tleft: 64px;\n\t\tmargin: 0;\n\t}\n\n\t.upload-picker__cancel {\n\t\tposition: absolute;\n\t\tbottom: -24px;\n\t\tright: 50px;\n\t}\n}\n\n</style>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Folders.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!./Folders.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 AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport client, { prefixPath } from './DavClient.js'\nimport request from './DavRequest.js'\nimport { genFileInfo } from '../utils/fileUtils.js'\n\n/**\n * Get a file info\n *\n * @param {string} path the path relative to the user root\n * @return {FileInfo} the file info\n */\nexport default async function(path) {\n\t// getDirectoryContents doesn't accept / for root\n\tconst fixedPath = path === '/' ? '' : path\n\n\t// fetch listing\n\tconst response = await client.stat(prefixPath + fixedPath, {\n\t\tdata: request,\n\t\tdetails: true,\n\t})\n\n\treturn genFileInfo(response.data)\n}\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Folders.vue?vue&type=style&index=0&id=0510aa84&prod&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Folders.vue?vue&type=style&index=0&id=0510aa84&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Folders.vue?vue&type=template&id=0510aa84&scoped=true\"\nimport script from \"./Folders.vue?vue&type=script&lang=js\"\nexport * from \"./Folders.vue?vue&type=script&lang=js\"\nimport style0 from \"./Folders.vue?vue&type=style&index=0&id=0510aa84&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0510aa84\",\n null\n \n)\n\nexport default component.exports"],"names":["module","exports","sizes","marginTop","marginW","count","gap","max","name","data","abortController","AbortController","beforeDestroy","this","abort","beforeRouteLeave","from","to","next","eventName","croppedLayoutLocalStorage","localStorage","getItem","croppedLayout","loadState","photosLocation","created","subscribe","updateLocalSetting","unsubscribe","methods","_ref","setting","value","updateSetting","axios","generateUrl","toString","setItem","emit","___CSS_LOADER_EXPORT___","push","id","components","ArrowLeft","NcButton","NcLoadingIcon","inheritAttrs","props","loading","type","Boolean","default","path","String","title","required","rootTitle","t","params","Object","computed","isRoot","toggleNavigationButton","parentPath","split","pop","parent","join","trim","parentName","backToText","folder","exec","assign","$route","decodeURIComponent","$router","resolve","resolved","folderUp","refresh","$emit","hide","navigationToggle","document","querySelector","style","display","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","_c","_self","staticClass","class","attrs","_e","on","scopedSlots","_u","key","fn","proxy","_v","_s","_t","$slots","directives","rawName","expression","mixins","UserConfig","item","loaded","error","ariaUuid","concat","injected","fileid","ariaLabel","basename","isImage","mime","startsWith","decodedEtag","etag","replace","src","$refs","openViewer","OCA","Viewer","open","fileInfo","list","loadMore","canLoop","onLoad","onError","source","$event","preventDefault","apply","arguments","includes","hasPreview","ref","icon","Number","fileList","Array","failed","isEmpty","previewList","length","filter","file","indexOf","toLink","_getCurrentUser","prefix","getCurrentUser","uid","RegExp","generateImgSrc","onPreviewFail","_ref2","_l","async","undefined","endpoint","shared","encodeFilePath","map","filename","genFileInfo","folders","files","entry","allowedMimes","FolderTagPreview","AbortControllerMixin","previewFolder","mapGetters","folderContent","previewFiles","previewFolderContent","slice","firstChildFolder","updatePreviewFolder","getFolderData","unPrefixedFileName","getAlbumContent","showShared","signal","$store","dispatch","response","status","console","Vue","gridConfig","watch","val","window","addEventListener","handleWindowResize","removeEventListener","currentSize","keys","find","size","documentElement","clientWidth","getGridConfig","debug","appName","VirtualGrid","HeaderNavigation","NcEmptyContent","UploadPicker","GridConfigMixin","initializing","appContent","getElementById","uploader","getUploader","folderId","getters","subFolders","folderList","contentList","_this$folderList","_this$fileList","width","height","columnSpan","renderComponent","Folder","FileLegacy","haveFiles","haveFolders","fetchFolderContent","beforeMount","onRefresh","_OCA","_OCA$close","_OCA2","_OCA2$close","close","call","Files","Sidebar","setTimeout","onUpload","uploads","forEach","relPath","upload","prefixPath","fixedPath","client","request","details","getFileInfo","_vm$uploader$queue","queue","get-column-count","get-grid-gap"],"sourceRoot":""}