photos/js/photos-src_views_Timeline_v...

1 line
74 KiB
Plaintext

{"version":3,"file":"photos-src_views_Timeline_vue.js?v=23e5ed0de64a5b948ab9","mappings":"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","sources":["webpack:///photos/src/mixins/FilesByMonthMixin.js","webpack:///photos/src/components/AlbumPicker.vue?vue&type=style&index=0&id=1f5ec298&lang=scss&scoped=true&","webpack:///photos/src/components/EmptyContent.vue?vue&type=style&index=0&lang=scss&","webpack:///photos/src/views/Timeline.vue?vue&type=style&index=0&id=3c2a3606&lang=scss&scoped=true&","webpack:///photos/node_modules/vue-material-design-icons/Delete.vue","webpack:///photos/node_modules/vue-material-design-icons/Delete.vue?vue&type=script&lang=js&","webpack://photos/./node_modules/vue-material-design-icons/Delete.vue?92e1","webpack:///photos/node_modules/vue-material-design-icons/Delete.vue?vue&type=template&id=238388be&","webpack:///photos/node_modules/vue-material-design-icons/ImageMultiple.vue","webpack:///photos/node_modules/vue-material-design-icons/ImageMultiple.vue?vue&type=script&lang=js&","webpack://photos/./node_modules/vue-material-design-icons/ImageMultiple.vue?126d","webpack:///photos/node_modules/vue-material-design-icons/ImageMultiple.vue?vue&type=template&id=2a6b9fca&","webpack:///photos/src/components/EmptyContent.vue?vue&type=template&id=b4c69d2c&","webpack:///photos/src/components/EmptyContent.vue","webpack:///photos/src/components/EmptyContent.vue?vue&type=script&lang=js&","webpack://photos/./src/components/EmptyContent.vue?7390","webpack://photos/./src/components/EmptyContent.vue?b265","webpack:///photos/src/views/Timeline.vue?vue&type=template&id=3c2a3606&scoped=true&","webpack:///photos/node_modules/vue-material-design-icons/PlusBoxMultiple.vue","webpack:///photos/node_modules/vue-material-design-icons/PlusBoxMultiple.vue?vue&type=script&lang=js&","webpack://photos/./node_modules/vue-material-design-icons/PlusBoxMultiple.vue?d86c","webpack:///photos/node_modules/vue-material-design-icons/PlusBoxMultiple.vue?vue&type=template&id=2c7c0169&","webpack:///photos/node_modules/vue-material-design-icons/FileUpload.vue","webpack:///photos/node_modules/vue-material-design-icons/FileUpload.vue?vue&type=script&lang=js&","webpack://photos/./node_modules/vue-material-design-icons/FileUpload.vue?c468","webpack:///photos/node_modules/vue-material-design-icons/FileUpload.vue?vue&type=template&id=59f0f9c3&","webpack:///photos/src/components/AlbumPicker.vue","webpack:///photos/src/components/AlbumPicker.vue?vue&type=script&lang=js&","webpack://photos/./src/components/AlbumPicker.vue?139f","webpack://photos/./src/components/AlbumPicker.vue?9965","webpack:///photos/src/components/AlbumPicker.vue?vue&type=template&id=1f5ec298&scoped=true&","webpack:///photos/src/views/Timeline.vue","webpack:///photos/src/views/Timeline.vue?vue&type=script&lang=js&","webpack://photos/./src/views/Timeline.vue?113b","webpack://photos/./src/views/Timeline.vue?2f21","webpack:///photos/src/assets/Illustrations|lazy|/^\\.\\/.*\\.svg$/|groupOptions: {}|namespace object"],"sourcesContent":["/**\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: 'FilesByMonthMixin',\n\n\tcomputed: {\n\t\t/**\n\t\t * @return {object<String, []>}\n\t\t */\n\t\tfileIdsByMonth() {\n\t\t\tconst filesByMonth = {}\n\t\t\tfor (const fileId of this.fetchedFileIds) {\n\t\t\t\tconst file = this.files[fileId]\n\t\t\t\tfilesByMonth[file.month] = filesByMonth[file.month] ?? []\n\t\t\t\tfilesByMonth[file.month].push(file.fileid)\n\t\t\t}\n\n\t\t\t// Sort files in sections.\n\t\t\tObject.keys(filesByMonth)\n\t\t\t\t.forEach(month => filesByMonth[month].sort(this.sortFilesByTimestamp))\n\n\t\t\treturn filesByMonth\n\t\t},\n\n\t\t/**\n\t\t * @return {string[]}\n\t\t */\n\t\tmonthsList() {\n\t\t\treturn Object\n\t\t\t\t.keys(this.fileIdsByMonth)\n\t\t\t\t.sort((month1, month2) => month1 > month2 ? -1 : 1)\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, \".album-picker[data-v-1f5ec298]{padding:32px;padding-top:16px}.album-picker h2[data-v-1f5ec298]{display:flex;align-items:center;height:60px;padding-left:8px}.album-picker h2 .loading-icon[data-v-1f5ec298]{margin-left:32px}.album-picker .albums-container[data-v-1f5ec298]{min-height:150px;max-height:350px;overflow:scroll;padding-right:8px}.album-picker .albums-container .album[data-v-1f5ec298]{display:flex;padding:8px;border-radius:8px}.album-picker .albums-container .album[data-v-1f5ec298],.album-picker .albums-container .album *[data-v-1f5ec298]{cursor:pointer}.album-picker .albums-container .album[data-v-1f5ec298]:not(:last-child){margin-bottom:16px}.album-picker .albums-container .album[data-v-1f5ec298]:hover{background:var(--color-background-dark)}.album-picker .albums-container .album__image[data-v-1f5ec298]{width:50px;height:50px;object-fit:none;border-radius:4px;margin-right:8px;background:var(--color-background-darker)}.album-picker .albums-container .album__image--placeholder[data-v-1f5ec298]{background:var(--color-primary-light)}.album-picker .albums-container .album__image--placeholder[data-v-1f5ec298] .material-design-icon{width:100%;height:100%}.album-picker .albums-container .album__image--placeholder[data-v-1f5ec298] .material-design-icon .material-design-icon__svg{fill:var(--color-primary)}.album-picker .albums-container .album__details[data-v-1f5ec298]{display:flex;align-items:flex-start;flex-direction:column;min-width:0}.album-picker .albums-container .album__details__first-line[data-v-1f5ec298]{width:100%}.album-picker .albums-container .album__details__name[data-v-1f5ec298]{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.album-picker .albums-container .album__details__second-line[data-v-1f5ec298]{color:var(--color-text-lighter)}.album-picker .new-album-button[data-v-1f5ec298]{margin-top:32px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/AlbumPicker.vue\"],\"names\":[],\"mappings\":\"AA+HA,+BACC,YAAA,CACA,gBAAA,CAEA,kCACC,YAAA,CACA,kBAAA,CACA,WAAA,CACA,gBAAA,CAEA,gDACC,gBAAA,CAIF,iDACC,gBAAA,CACA,gBAAA,CACA,eAAA,CACA,iBAAA,CAEA,wDACC,YAAA,CACA,WAAA,CACA,iBAAA,CAEA,kHACC,cAAA,CAGD,yEACC,kBAAA,CAGD,8DACC,uCAAA,CAGD,+DACC,UAAA,CACA,WAAA,CACA,eAAA,CACA,iBAAA,CACA,gBAAA,CACA,yCAAA,CAEA,4EACC,qCAAA,CAEA,mGACC,UAAA,CACA,WAAA,CAEA,8HACC,yBAAA,CAMJ,iEACC,YAAA,CACA,sBAAA,CACA,qBAAA,CACA,WAAA,CAEA,6EACC,UAAA,CAGD,uEACC,aAAA,CACA,eAAA,CACA,kBAAA,CACA,sBAAA,CAGA,8EACA,+BAAA,CAMJ,iDACC,eAAA\",\"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\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.album-picker {\\n\\tpadding: 32px;\\n\\tpadding-top: 16px;\\n\\n\\th2 {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\t\\theight: 60px;\\n\\t\\tpadding-left: 8px;\\n\\n\\t\\t.loading-icon {\\n\\t\\t\\tmargin-left: 32px;\\n\\t\\t}\\n\\t}\\n\\n\\t.albums-container {\\n\\t\\tmin-height: 150px;\\n\\t\\tmax-height: 350px;\\n\\t\\toverflow: scroll;\\n\\t\\tpadding-right: 8px;\\n\\n\\t\\t.album {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tpadding: 8px;\\n\\t\\t\\tborder-radius: 8px;\\n\\n\\t\\t\\t&, & * {\\n\\t\\t\\t\\tcursor: pointer;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&:not(:last-child) {\\n\\t\\t\\t\\tmargin-bottom: 16px;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&:hover {\\n\\t\\t\\t\\tbackground: var(--color-background-dark);\\n\\t\\t\\t}\\n\\n\\t\\t\\t&__image {\\n\\t\\t\\t\\twidth: 50px;\\n\\t\\t\\t\\theight: 50px;\\n\\t\\t\\t\\tobject-fit: none;\\n\\t\\t\\t\\tborder-radius: 4px;\\n\\t\\t\\t\\tmargin-right: 8px;\\n\\t\\t\\t\\tbackground: var(--color-background-darker);\\n\\n\\t\\t\\t\\t&--placeholder {\\n\\t\\t\\t\\t\\tbackground: var(--color-primary-light);\\n\\n\\t\\t\\t\\t\\t::v-deep .material-design-icon {\\n\\t\\t\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t\\t\\t\\theight: 100%;\\n\\n\\t\\t\\t\\t\\t\\t.material-design-icon__svg {\\n\\t\\t\\t\\t\\t\\t\\tfill: var(--color-primary);\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t&__details {\\n\\t\\t\\t\\tdisplay: flex;\\n\\t\\t\\t\\talign-items: flex-start;\\n\\t\\t\\t\\tflex-direction: column;\\n\\t\\t\\t\\tmin-width: 0;\\n\\n\\t\\t\\t\\t&__first-line {\\n\\t\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t&__name {\\n\\t\\t\\t\\t\\tdisplay: block;\\n\\t\\t\\t\\t\\toverflow: hidden;\\n\\t\\t\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t&__second-line{\\n\\t\\t\\t\\t\\tcolor: var(--color-text-lighter);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t.new-album-button {\\n\\t\\tmargin-top: 32px;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".emptycontent{grid-column:1/-1;margin-top:20vh}.illustration{min-width:200px;max-width:15%;width:300px;margin:auto;margin-bottom:20px;position:relative}.illustration svg{width:100%;height:100%;max-height:40vh}.illustration [fill*=\\\"6c63ff\\\"]{fill:var(--color-primary-element)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/EmptyContent.vue\"],\"names\":[],\"mappings\":\"AAmHA,cAEC,gBAAA,CACA,eAAA,CAGD,cACC,eAAA,CACA,aAAA,CACA,WAAA,CACA,WAAA,CACA,kBAAA,CACA,iBAAA,CAEA,kBACC,UAAA,CACA,WAAA,CACA,eAAA,CAID,+BACC,iCAAA\",\"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\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.emptycontent {\\n\\t// span all the available columns\\n\\tgrid-column: 1/-1;\\n\\tmargin-top: 20vh;\\n}\\n\\n.illustration {\\n\\tmin-width: 200px;\\n\\tmax-width: 15%;\\n\\twidth: 300px;\\n\\tmargin: auto;\\n\\tmargin-bottom: 20px;\\n\\tposition: relative;\\n\\n\\tsvg {\\n\\t\\twidth: 100%;\\n\\t\\theight: 100%;\\n\\t\\tmax-height: 40vh;\\n\\t}\\n\\n\\t// change colour of illustration\\n\\t[fill*='6c63ff'] {\\n\\t\\tfill: var(--color-primary-element);\\n\\t}\\n}\\n\"],\"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, \".timeline[data-v-3c2a3606]{display:flex;flex-direction:column}.timeline__header[data-v-3c2a3606]{display:flex;min-height:60px;align-items:center;position:-webkit-sticky;position:sticky;top:var(--header-height);width:100%;height:60px;z-index:3;background:var(--color-main-background);padding:0 64px}@media only screen and (max-width: 1200px){.timeline__header[data-v-3c2a3606]{padding:0 48px}}.timeline__header>*[data-v-3c2a3606]{margin-right:8px}.timeline__header .loader[data-v-3c2a3606]{margin-left:16px}.timeline__file-list[data-v-3c2a3606]{padding:0 64px}@media only screen and (max-width: 1200px){.timeline__file-list[data-v-3c2a3606]{padding:0 4px}}.timeline__file-list[data-v-3c2a3606] .files-list-viewer__section-header{top:calc(var(--header-height) + 60px)}.timeline__file-list[data-v-3c2a3606] .files-list-viewer__section-header{top:calc(var(--header-height) + 60px)}.timeline__file-list .section-header[data-v-3c2a3606]{padding:24px 0 16px 0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/views/Timeline.vue\"],\"names\":[],\"mappings\":\"AA8UA,2BACC,YAAA,CACA,qBAAA,CAEA,mCACC,YAAA,CACA,eAAA,CACA,kBAAA,CACA,uBAAA,CAAA,eAAA,CACA,wBAAA,CACA,UAAA,CACA,WAAA,CACA,SAAA,CACA,uCAAA,CACA,cAAA,CAEA,2CAZD,mCAaE,cAAA,CAAA,CAGD,qCACC,gBAAA,CAGD,2CACC,gBAAA,CAIF,sCACC,cAAA,CAEA,2CAHD,sCAIE,aAAA,CAAA,CAGD,0EACC,qCAAA,CAGD,0EACC,qCAAA,CAGD,sDACC,qBAAA\",\"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\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.timeline {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\n\\t&__header {\\n\\t\\tdisplay: flex;\\n\\t\\tmin-height: 60px;\\n\\t\\talign-items: center;\\n\\t\\tposition: sticky;\\n\\t\\ttop: var(--header-height);\\n\\t\\twidth: 100%;\\n\\t\\theight: 60px;\\n\\t\\tz-index: 3;\\n\\t\\tbackground: var(--color-main-background);\\n\\t\\tpadding: 0 64px;\\n\\n\\t\\t@media only screen and (max-width: 1200px) {\\n\\t\\t\\tpadding: 0 48px;\\n\\t\\t}\\n\\n\\t\\t& > * {\\n\\t\\t\\tmargin-right: 8px;\\n\\t\\t}\\n\\n\\t\\t.loader {\\n\\t\\t\\tmargin-left: 16px;\\n\\t\\t}\\n\\t}\\n\\n\\t&__file-list {\\n\\t\\tpadding: 0 64px;\\n\\n\\t\\t@media only screen and (max-width: 1200px) {\\n\\t\\t\\tpadding: 0 4px;\\n\\t\\t}\\n\\n\\t\\t::v-deep .files-list-viewer__section-header {\\n\\t\\t\\ttop: calc(var(--header-height) + 60px);\\n\\t\\t}\\n\\n\\t\\t::v-deep .files-list-viewer__section-header {\\n\\t\\t\\ttop: calc(var(--header-height) + 60px);\\n\\t\\t}\\n\\n\\t\\t.section-header {\\n\\t\\t\\tpadding: 24px 0 16px 0;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","<template>\n <span :aria-hidden=\"!title\"\n :aria-label=\"title\"\n class=\"material-design-icon delete-icon\"\n role=\"img\"\n v-bind=\"$attrs\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M19,4H15.5L14.5,3H9.5L8.5,4H5V6H19M6,19A2,2 0 0,0 8,21H16A2,2 0 0,0 18,19V7H6V19Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"DeleteIcon\",\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./Delete.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./Delete.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Delete.vue?vue&type=template&id=238388be&\"\nimport script from \"./Delete.vue?vue&type=script&lang=js&\"\nexport * from \"./Delete.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',_vm._b({staticClass:\"material-design-icon delete-icon\",attrs:{\"aria-hidden\":!_vm.title,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'span',_vm.$attrs,false),[_c('svg',{staticClass:\"material-design-icon__svg\",attrs:{\"fill\":_vm.fillColor,\"width\":_vm.size,\"height\":_vm.size,\"viewBox\":\"0 0 24 24\"}},[_c('path',{attrs:{\"d\":\"M19,4H15.5L14.5,3H9.5L8.5,4H5V6H19M6,19A2,2 0 0,0 8,21H16A2,2 0 0,0 18,19V7H6V19Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <span :aria-hidden=\"!title\"\n :aria-label=\"title\"\n class=\"material-design-icon image-multiple-icon\"\n role=\"img\"\n v-bind=\"$attrs\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M22,16V4A2,2 0 0,0 20,2H8A2,2 0 0,0 6,4V16A2,2 0 0,0 8,18H20A2,2 0 0,0 22,16M11,12L13.03,14.71L16,11L20,16H8M2,6V20A2,2 0 0,0 4,22H18V20H4V6\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"ImageMultipleIcon\",\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./ImageMultiple.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./ImageMultiple.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ImageMultiple.vue?vue&type=template&id=2a6b9fca&\"\nimport script from \"./ImageMultiple.vue?vue&type=script&lang=js&\"\nexport * from \"./ImageMultiple.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',_vm._b({staticClass:\"material-design-icon image-multiple-icon\",attrs:{\"aria-hidden\":!_vm.title,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'span',_vm.$attrs,false),[_c('svg',{staticClass:\"material-design-icon__svg\",attrs:{\"fill\":_vm.fillColor,\"width\":_vm.size,\"height\":_vm.size,\"viewBox\":\"0 0 24 24\"}},[_c('path',{attrs:{\"d\":\"M22,16V4A2,2 0 0,0 20,2H8A2,2 0 0,0 6,4V16A2,2 0 0,0 8,18H20A2,2 0 0,0 22,16M11,12L13.03,14.71L16,11L20,16H8M2,6V20A2,2 0 0,0 4,22H18V20H4V6\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isReady)?_c('div',{staticClass:\"emptycontent\"},[(_vm.haveIllustration)?_c('div',{staticClass:\"illustration\",domProps:{\"innerHTML\":_vm._s(_vm.illustration)}}):_c('div',{staticClass:\"icon-error\"}),_vm._v(\" \"),_c('h2',[_vm._t(\"default\")],2),_vm._v(\" \"),_c('p',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.$slots.desc),expression:\"$slots.desc\"}]},[_vm._t(\"desc\")],2)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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 v-if=\"isReady\" class=\"emptycontent\">\n\t\t<!-- eslint-disable-next-line vue/no-v-html (because it's an SVG file) -->\n\t\t<div v-if=\"haveIllustration\" class=\"illustration\" v-html=\"illustration\" />\n\t\t<div v-else class=\"icon-error\" />\n\t\t<h2><slot /></h2>\n\t\t<p v-show=\"$slots.desc\">\n\t\t\t<slot name=\"desc\" />\n\t\t</p>\n\t</div>\n</template>\n\n<script>\nexport default {\n\tname: 'EmptyContent',\n\tprops: {\n\t\tillustrationName: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tillustration: '',\n\t\t}\n\t},\n\tcomputed: {\n\t\t/**\n\t\t * Does this component have an illustration\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\thaveIllustration() {\n\t\t\treturn this.illustrationName !== ''\n\t\t},\n\n\t\t/**\n\t\t * Is the illustration loaded\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisLoaded() {\n\t\t\tif (!this.haveIllustration) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn this.illustration !== ''\n\t\t},\n\n\t\t/**\n\t\t * The component is ready if the illustration\n\t\t * is done loading or if there is none\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisReady() {\n\t\t\treturn !this.haveIllustration || (this.haveIllustration && this.isLoaded)\n\t\t},\n\t},\n\n\t/**\n\t * Fetch the new illustration as soon as it changes\n\t */\n\twatch: {\n\t\tillustrationName() {\n\t\t\tthis.getIllustration()\n\t\t},\n\t},\n\tbeforeMount() {\n\t\tthis.getIllustration()\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Fetch the illustration as webpack chunk\n\t\t */\n\t\tasync getIllustration() {\n\t\t\tthis.illustration = ''\n\t\t\tif (this.illustrationName !== '') {\n\t\t\t\ttry {\n\t\t\t\t\tconst illustration = await import(`../assets/Illustrations/${this.illustrationName}.svg`)\n\t\t\t\t\tthis.illustration = illustration.default\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error('Could not get the error illustration', error)\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\n}\n</script>\n\n<style lang=\"scss\">\n.emptycontent {\n\t// span all the available columns\n\tgrid-column: 1/-1;\n\tmargin-top: 20vh;\n}\n\n.illustration {\n\tmin-width: 200px;\n\tmax-width: 15%;\n\twidth: 300px;\n\tmargin: auto;\n\tmargin-bottom: 20px;\n\tposition: relative;\n\n\tsvg {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tmax-height: 40vh;\n\t}\n\n\t// change colour of illustration\n\t[fill*='6c63ff'] {\n\t\tfill: var(--color-primary-element);\n\t}\n}\n</style>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmptyContent.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmptyContent.vue?vue&type=script&lang=js&\"","\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[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmptyContent.vue?vue&type=style&index=0&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[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmptyContent.vue?vue&type=style&index=0&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./EmptyContent.vue?vue&type=template&id=b4c69d2c&\"\nimport script from \"./EmptyContent.vue?vue&type=script&lang=js&\"\nexport * from \"./EmptyContent.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EmptyContent.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.errorFetchingFiles)?_c('EmptyContent',[_vm._v(\"\\n\\t\"+_vm._s(_vm.t('photos', 'An error occurred'))+\"\\n\")]):_c('div',{staticClass:\"timeline\"},[_c('div',{staticClass:\"timeline__header\"},[(_vm.selectedFileIds.length === 0)?_c('Actions',{attrs:{\"force-title\":true,\"force-menu\":true,\"menu-title\":_vm.t('photos', 'Add'),\"primary\":true}},[_c('Plus',{attrs:{\"slot\":\"icon\"},slot:\"icon\"}),_vm._v(\" \"),_c('ActionButton',{attrs:{\"close-after-click\":true},on:{\"click\":_vm.openUploader}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('photos', 'Upload media'))+\"\\n\\t\\t\\t\\t\"),_c('FileUpload',{attrs:{\"slot\":\"icon\"},slot:\"icon\"})],1),_vm._v(\" \"),_c('ActionButton',{attrs:{\"close-after-click\":true,\"aria-label\":_vm.t('photos', 'Create a new album')},on:{\"click\":function($event){_vm.showAlbumCreationForm = true}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('photos', 'Create new album'))+\"\\n\\t\\t\\t\\t\"),_c('PlusBoxMultiple',{attrs:{\"slot\":\"icon\"},slot:\"icon\"})],1)],1):[_c('Button',{attrs:{\"close-after-click\":true,\"type\":\"primary\",\"aria-label\":_vm.t('photos', 'Add selection to an album')},on:{\"click\":function($event){_vm.showAlbumPicker = true}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Plus',{attrs:{\"slot\":\"icon\"},slot:\"icon\"})]},proxy:true}])},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('photos', 'Add to album'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('Actions',[_c('ActionButton',{attrs:{\"close-after-click\":true,\"aria-label\":_vm.t('photos', 'Download selection')},on:{\"click\":_vm.downloadSelection}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('photos', 'Download'))+\"\\n\\t\\t\\t\\t\\t\"),_c('Download',{attrs:{\"slot\":\"icon\"},slot:\"icon\"})],1),_vm._v(\" \"),(_vm.shouldFavorite)?_c('ActionButton',{attrs:{\"close-after-click\":true,\"aria-label\":_vm.t('photos', 'Mark selection as favorite')},on:{\"click\":_vm.favoriteSelection}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('photos', 'Favorite'))+\"\\n\\t\\t\\t\\t\\t\"),_c('Star',{attrs:{\"slot\":\"icon\"},slot:\"icon\"})],1):_c('ActionButton',{attrs:{\"close-after-click\":true,\"aria-label\":_vm.t('photos', 'Remove selection from favorites')},on:{\"click\":_vm.unFavoriteSelection}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('photos', 'Remove from favorites'))+\"\\n\\t\\t\\t\\t\\t\"),_c('Star',{attrs:{\"slot\":\"icon\"},slot:\"icon\"})],1),_vm._v(\" \"),_c('ActionButton',{attrs:{\"close-after-click\":true,\"aria-label\":_vm.t('photos', 'Delete selection')},on:{\"click\":_vm.deleteSelection}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('photos', 'Delete'))+\"\\n\\t\\t\\t\\t\\t\"),_c('Delete',{attrs:{\"slot\":\"icon\"},slot:\"icon\"})],1)],1),_vm._v(\" \"),_c('Actions')],_vm._v(\" \"),(_vm.loadingCount > 0)?_c('Loader',{key:\"loader\"}):_vm._e()],2),_vm._v(\" \"),_c('FilesListViewer',{ref:\"filesListViewer\",staticClass:\"timeline__file-list\",attrs:{\"use-window\":true,\"file-ids-by-section\":_vm.fileIdsByMonth,\"sections\":_vm.monthsList,\"loading\":_vm.loadingFiles,\"base-height\":_vm.isMobile ? 120 : 200,\"empty-message\":_vm.t('photos', 'No photos in here')},on:{\"need-content\":_vm.getContent},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar file = ref.file;\nvar visibility = ref.visibility;\nreturn [(file.sectionHeader)?_c('h3',{staticClass:\"section-header\",attrs:{\"id\":(\"file-picker-section-header-\" + (file.id))}},[_c('b',[_vm._v(_vm._s(_vm._f(\"dateMonth\")(file.id)))]),_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm._f(\"dateYear\")(file.id))+\"\\n\\t\\t\\t\")]):_c('File',{attrs:{\"file\":_vm.files[file.id],\"allow-selection\":true,\"selected\":_vm.selection[file.id] === true,\"visibility\":visibility,\"semaphore\":_vm.semaphore},on:{\"click\":_vm.openViewer,\"select-toggled\":_vm.onFileSelectToggle}})]}}])}),_vm._v(\" \"),(_vm.showAlbumCreationForm)?_c('Modal',{key:\"albumCreationForm\",attrs:{\"title\":_vm.t('photos', 'New album')},on:{\"close\":function($event){_vm.showAlbumCreationForm = false}}},[_c('AlbumForm',{on:{\"done\":function($event){_vm.showAlbumCreationForm = false}}})],1):_vm._e(),_vm._v(\" \"),(_vm.showAlbumPicker)?_c('Modal',{key:\"albumPicker\",attrs:{\"title\":_vm.t('photos', 'Add to album')},on:{\"close\":function($event){_vm.showAlbumPicker = false}}},[_c('AlbumPicker',{on:{\"album-picked\":_vm.addSelectionToAlbum}})],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <span :aria-hidden=\"!title\"\n :aria-label=\"title\"\n class=\"material-design-icon plus-box-multiple-icon\"\n role=\"img\"\n v-bind=\"$attrs\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M19,11H15V15H13V11H9V9H13V5H15V9H19M20,2H8A2,2 0 0,0 6,4V16A2,2 0 0,0 8,18H20A2,2 0 0,0 22,16V4A2,2 0 0,0 20,2M4,6H2V20A2,2 0 0,0 4,22H18V20H4V6Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"PlusBoxMultipleIcon\",\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./PlusBoxMultiple.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./PlusBoxMultiple.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlusBoxMultiple.vue?vue&type=template&id=2c7c0169&\"\nimport script from \"./PlusBoxMultiple.vue?vue&type=script&lang=js&\"\nexport * from \"./PlusBoxMultiple.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',_vm._b({staticClass:\"material-design-icon plus-box-multiple-icon\",attrs:{\"aria-hidden\":!_vm.title,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'span',_vm.$attrs,false),[_c('svg',{staticClass:\"material-design-icon__svg\",attrs:{\"fill\":_vm.fillColor,\"width\":_vm.size,\"height\":_vm.size,\"viewBox\":\"0 0 24 24\"}},[_c('path',{attrs:{\"d\":\"M19,11H15V15H13V11H9V9H13V5H15V9H19M20,2H8A2,2 0 0,0 6,4V16A2,2 0 0,0 8,18H20A2,2 0 0,0 22,16V4A2,2 0 0,0 20,2M4,6H2V20A2,2 0 0,0 4,22H18V20H4V6Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <span :aria-hidden=\"!title\"\n :aria-label=\"title\"\n class=\"material-design-icon file-upload-icon\"\n role=\"img\"\n v-bind=\"$attrs\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2M13.5,16V19H10.5V16H8L12,12L16,16H13.5M13,9V3.5L18.5,9H13Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"FileUploadIcon\",\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./FileUpload.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./FileUpload.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./FileUpload.vue?vue&type=template&id=59f0f9c3&\"\nimport script from \"./FileUpload.vue?vue&type=script&lang=js&\"\nexport * from \"./FileUpload.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',_vm._b({staticClass:\"material-design-icon file-upload-icon\",attrs:{\"aria-hidden\":!_vm.title,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'span',_vm.$attrs,false),[_c('svg',{staticClass:\"material-design-icon__svg\",attrs:{\"fill\":_vm.fillColor,\"width\":_vm.size,\"height\":_vm.size,\"viewBox\":\"0 0 24 24\"}},[_c('path',{attrs:{\"d\":\"M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2M13.5,16V19H10.5V16H8L12,12L16,16H13.5M13,9V3.5L18.5,9H13Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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<template>\n\t<div v-if=\"!showAlbumCreationForm\" class=\"album-picker\">\n\t\t<h2>\n\t\t\t{{ t('photos', 'Add to Album') }}\n\t\t\t<Loader v-if=\"loadingAlbums\" class=\"loading-icon\" />\n\t\t</h2>\n\n\t\t<div class=\"albums-container\">\n\t\t\t<div v-for=\"album in albums\"\n\t\t\t\t:key=\"album.basename\"\n\t\t\t\tclass=\"album\"\n\t\t\t\t@click=\"pickAlbum(album.basename)\">\n\t\t\t\t<img v-if=\"album.lastPhoto !== 0\" class=\"album__image\" :src=\"album.lastPhoto | toCoverUrl\">\n\t\t\t\t<div v-else class=\"album__image album__image--placeholder\">\n\t\t\t\t\t<ImageMultiple :size=\"32\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"album__details\">\n\t\t\t\t\t<div class=\"album__details__first-line\">\n\t\t\t\t\t\t<b class=\"album__details__name\">\n\t\t\t\t\t\t\t{{ album.basename }}\n\t\t\t\t\t\t</b>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"album__details__second-line\">\n\t\t\t\t\t\t{{ n('photos', '%n item', '%n photos and videos', album.nbItems) }}\n\t\t\t\t\t\t<!-- TODO: finish collaboration -->\n\t\t\t\t\t\t<!--⸱ {{ n('photos', 'Share with %n user', 'Share with %n others', album.isShared) }}-->\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<Button :aria-label=\"t('photos', 'Create a new album.')\"\n\t\t\tclass=\"new-album-button\"\n\t\t\ttype=\"tertiary\"\n\t\t\t@click=\"showAlbumCreationForm = true\">\n\t\t\t<template #icon>\n\t\t\t\t<Plus />\n\t\t\t</template>\n\t\t\t{{ t('photos', 'Create new album') }}\n\t\t</Button>\n\t</div>\n\n\t<AlbumForm v-else\n\t\t:display-back-button=\"true\"\n\t\t:title=\"t('photos', 'New album')\"\n\t\t@back=\"showAlbumCreationForm = false\"\n\t\t@done=\"albumCreatedHandler\" />\n</template>\n\n<script>\nimport Plus from 'vue-material-design-icons/Plus'\nimport ImageMultiple from 'vue-material-design-icons/ImageMultiple'\n\nimport { Button } from '@nextcloud/vue'\nimport { generateUrl } from '@nextcloud/router'\n\nimport FetchAlbumsMixin from '../mixins/FetchAlbumsMixin.js'\nimport AlbumForm from './AlbumForm.vue'\nimport Loader from '../components/Loader.vue'\n\nexport default {\n\tname: 'AlbumPicker',\n\n\tcomponents: {\n\t\tButton,\n\t\tAlbumForm,\n\t\tLoader,\n\t\tPlus,\n\t\tImageMultiple,\n\t},\n\n\tfilters: {\n\t\t/**\n\t\t * @param {string} fileId - The id of the file.\n\t\t * @return {string}\n\t\t */\n\t\ttoCoverUrl(fileId) {\n\t\t\treturn generateUrl(`/core/preview?fileId=${fileId}&x=${64}&y=${64}&forceIcon=0&a=1`)\n\t\t},\n\t},\n\n\tmixins: [\n\t\tFetchAlbumsMixin,\n\t],\n\n\tdata() {\n\t\treturn {\n\t\t\tshowAlbumCreationForm: false,\n\t\t}\n\t},\n\n\tmethods: {\n\t\talbumCreatedHandler() {\n\t\t\tthis.showAlbumCreationForm = false\n\t\t\tthis.fetchAlbums()\n\t\t},\n\n\t\tpickAlbum(albumBaseName) {\n\t\t\tthis.$emit('album-picked', albumBaseName)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.album-picker {\n\tpadding: 32px;\n\tpadding-top: 16px;\n\n\th2 {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\theight: 60px;\n\t\tpadding-left: 8px;\n\n\t\t.loading-icon {\n\t\t\tmargin-left: 32px;\n\t\t}\n\t}\n\n\t.albums-container {\n\t\tmin-height: 150px;\n\t\tmax-height: 350px;\n\t\toverflow: scroll;\n\t\tpadding-right: 8px;\n\n\t\t.album {\n\t\t\tdisplay: flex;\n\t\t\tpadding: 8px;\n\t\t\tborder-radius: 8px;\n\n\t\t\t&, & * {\n\t\t\t\tcursor: pointer;\n\t\t\t}\n\n\t\t\t&:not(:last-child) {\n\t\t\t\tmargin-bottom: 16px;\n\t\t\t}\n\n\t\t\t&:hover {\n\t\t\t\tbackground: var(--color-background-dark);\n\t\t\t}\n\n\t\t\t&__image {\n\t\t\t\twidth: 50px;\n\t\t\t\theight: 50px;\n\t\t\t\tobject-fit: none;\n\t\t\t\tborder-radius: 4px;\n\t\t\t\tmargin-right: 8px;\n\t\t\t\tbackground: var(--color-background-darker);\n\n\t\t\t\t&--placeholder {\n\t\t\t\t\tbackground: var(--color-primary-light);\n\n\t\t\t\t\t::v-deep .material-design-icon {\n\t\t\t\t\t\twidth: 100%;\n\t\t\t\t\t\theight: 100%;\n\n\t\t\t\t\t\t.material-design-icon__svg {\n\t\t\t\t\t\t\tfill: var(--color-primary);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&__details {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: flex-start;\n\t\t\t\tflex-direction: column;\n\t\t\t\tmin-width: 0;\n\n\t\t\t\t&__first-line {\n\t\t\t\t\twidth: 100%;\n\t\t\t\t}\n\n\t\t\t\t&__name {\n\t\t\t\t\tdisplay: block;\n\t\t\t\t\toverflow: hidden;\n\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\t}\n\n\t\t\t\t\t&__second-line{\n\t\t\t\t\tcolor: var(--color-text-lighter);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t.new-album-button {\n\t\tmargin-top: 32px;\n\t}\n}\n</style>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AlbumPicker.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!./AlbumPicker.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[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AlbumPicker.vue?vue&type=style&index=0&id=1f5ec298&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[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AlbumPicker.vue?vue&type=style&index=0&id=1f5ec298&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AlbumPicker.vue?vue&type=template&id=1f5ec298&scoped=true&\"\nimport script from \"./AlbumPicker.vue?vue&type=script&lang=js&\"\nexport * from \"./AlbumPicker.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AlbumPicker.vue?vue&type=style&index=0&id=1f5ec298&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 \"1f5ec298\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.showAlbumCreationForm)?_c('div',{staticClass:\"album-picker\"},[_c('h2',[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('photos', 'Add to Album'))+\"\\n\\t\\t\"),(_vm.loadingAlbums)?_c('Loader',{staticClass:\"loading-icon\"}):_vm._e()],1),_vm._v(\" \"),_c('div',{staticClass:\"albums-container\"},_vm._l((_vm.albums),function(album){return _c('div',{key:album.basename,staticClass:\"album\",on:{\"click\":function($event){return _vm.pickAlbum(album.basename)}}},[(album.lastPhoto !== 0)?_c('img',{staticClass:\"album__image\",attrs:{\"src\":_vm._f(\"toCoverUrl\")(album.lastPhoto)}}):_c('div',{staticClass:\"album__image album__image--placeholder\"},[_c('ImageMultiple',{attrs:{\"size\":32}})],1),_vm._v(\" \"),_c('div',{staticClass:\"album__details\"},[_c('div',{staticClass:\"album__details__first-line\"},[_c('b',{staticClass:\"album__details__name\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(album.basename)+\"\\n\\t\\t\\t\\t\\t\")])]),_vm._v(\" \"),_c('div',{staticClass:\"album__details__second-line\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.n('photos', '%n item', '%n photos and videos', album.nbItems))+\"\\n\\t\\t\\t\\t\\t\")])])])}),0),_vm._v(\" \"),_c('Button',{staticClass:\"new-album-button\",attrs:{\"aria-label\":_vm.t('photos', 'Create a new album.'),\"type\":\"tertiary\"},on:{\"click\":function($event){_vm.showAlbumCreationForm = true}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Plus')]},proxy:true}],null,false,1489515321)},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('photos', 'Create new album'))+\"\\n\\t\")])],1):_c('AlbumForm',{attrs:{\"display-back-button\":true,\"title\":_vm.t('photos', 'New album')},on:{\"back\":function($event){_vm.showAlbumCreationForm = false},\"done\":_vm.albumCreatedHandler}})}\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 - @author Corentin Mors <medias@pixelswap.fr>\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\n<template>\n\t<!-- Errors handlers -->\n\t<EmptyContent v-if=\"errorFetchingFiles\">\n\t\t{{ t('photos', 'An error occurred') }}\n\t</EmptyContent>\n\n\t<div v-else class=\"timeline\">\n\t\t<div class=\"timeline__header\">\n\t\t\t<Actions v-if=\"selectedFileIds.length === 0\"\n\t\t\t\t:force-title=\"true\"\n\t\t\t\t:force-menu=\"true\"\n\t\t\t\t:menu-title=\"t('photos', 'Add')\"\n\t\t\t\t:primary=\"true\">\n\t\t\t\t<Plus slot=\"icon\" />\n\t\t\t\t<ActionButton :close-after-click=\"true\" @click=\"openUploader\">\n\t\t\t\t\t{{ t('photos', 'Upload media') }}\n\t\t\t\t\t<FileUpload slot=\"icon\" />\n\t\t\t\t</ActionButton>\n\t\t\t\t<ActionButton :close-after-click=\"true\"\n\t\t\t\t\t:aria-label=\"t('photos', 'Create a new album')\"\n\t\t\t\t\t@click=\"showAlbumCreationForm = true\">\n\t\t\t\t\t{{ t('photos', 'Create new album') }}\n\t\t\t\t\t<PlusBoxMultiple slot=\"icon\" />\n\t\t\t\t</ActionButton>\n\t\t\t</Actions>\n\n\t\t\t<template v-else>\n\t\t\t\t<Button :close-after-click=\"true\"\n\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t:aria-label=\"t('photos', 'Add selection to an album')\"\n\t\t\t\t\t@click=\"showAlbumPicker = true\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<Plus slot=\"icon\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ t('photos', 'Add to album') }}\n\t\t\t\t</Button>\n\t\t\t\t<Actions>\n\t\t\t\t\t<ActionButton :close-after-click=\"true\"\n\t\t\t\t\t\t:aria-label=\"t('photos', 'Download selection')\"\n\t\t\t\t\t\t@click=\"downloadSelection\">\n\t\t\t\t\t\t{{ t('photos', 'Download') }}\n\t\t\t\t\t\t<Download slot=\"icon\" />\n\t\t\t\t\t</ActionButton>\n\t\t\t\t\t<ActionButton v-if=\"shouldFavorite\"\n\t\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t\t:aria-label=\"t('photos', 'Mark selection as favorite')\"\n\t\t\t\t\t\t@click=\"favoriteSelection\">\n\t\t\t\t\t\t{{ t('photos', 'Favorite') }}\n\t\t\t\t\t\t<Star slot=\"icon\" />\n\t\t\t\t\t</ActionButton>\n\t\t\t\t\t<ActionButton v-else\n\t\t\t\t\t\t:close-after-click=\"true\"\n\t\t\t\t\t\t:aria-label=\"t('photos', 'Remove selection from favorites')\"\n\t\t\t\t\t\t@click=\"unFavoriteSelection\">\n\t\t\t\t\t\t{{ t('photos', 'Remove from favorites') }}\n\t\t\t\t\t\t<Star slot=\"icon\" />\n\t\t\t\t\t</ActionButton>\n\t\t\t\t\t<ActionButton :close-after-click=\"true\"\n\t\t\t\t\t\t:aria-label=\"t('photos', 'Delete selection')\"\n\t\t\t\t\t\t@click=\"deleteSelection\">\n\t\t\t\t\t\t{{ t('photos', 'Delete') }}\n\t\t\t\t\t\t<Delete slot=\"icon\" />\n\t\t\t\t\t</ActionButton>\n\t\t\t\t</Actions>\n\t\t\t\t<!-- HACK: Needed to make the above Actions work, no idea why be it is like that in the documentation. -->\n\t\t\t\t<Actions />\n\t\t\t</template>\n\n\t\t\t<Loader v-if=\"loadingCount > 0\" key=\"loader\" />\n\t\t</div>\n\n\t\t<FilesListViewer ref=\"filesListViewer\"\n\t\t\tclass=\"timeline__file-list\"\n\t\t\t:use-window=\"true\"\n\t\t\t:file-ids-by-section=\"fileIdsByMonth\"\n\t\t\t:sections=\"monthsList\"\n\t\t\t:loading=\"loadingFiles\"\n\t\t\t:base-height=\"isMobile ? 120 : 200\"\n\t\t\t:empty-message=\"t('photos', 'No photos in here')\"\n\t\t\t@need-content=\"getContent\">\n\t\t\t<template slot-scope=\"{file, visibility}\">\n\t\t\t\t<h3 v-if=\"file.sectionHeader\"\n\t\t\t\t\t:id=\"`file-picker-section-header-${file.id}`\"\n\t\t\t\t\tclass=\"section-header\">\n\t\t\t\t\t<b>{{ file.id | dateMonth }}</b>\n\t\t\t\t\t{{ file.id | dateYear }}\n\t\t\t\t</h3>\n\t\t\t\t<File v-else\n\t\t\t\t\t:file=\"files[file.id]\"\n\t\t\t\t\t:allow-selection=\"true\"\n\t\t\t\t\t:selected=\"selection[file.id] === true\"\n\t\t\t\t\t:visibility=\"visibility\"\n\t\t\t\t\t:semaphore=\"semaphore\"\n\t\t\t\t\t@click=\"openViewer\"\n\t\t\t\t\t@select-toggled=\"onFileSelectToggle\" />\n\t\t\t</template>\n\t\t</FilesListViewer>\n\n\t\t<Modal v-if=\"showAlbumCreationForm\"\n\t\t\tkey=\"albumCreationForm\"\n\t\t\t:title=\"t('photos', 'New album')\"\n\t\t\t@close=\"showAlbumCreationForm = false\">\n\t\t\t<AlbumForm @done=\"showAlbumCreationForm = false\" />\n\t\t</Modal>\n\n\t\t<Modal v-if=\"showAlbumPicker\"\n\t\t\tkey=\"albumPicker\"\n\t\t\t:title=\"t('photos', 'Add to album')\"\n\t\t\t@close=\"showAlbumPicker = false\">\n\t\t\t<AlbumPicker @album-picked=\"addSelectionToAlbum\" />\n\t\t</Modal>\n\t</div>\n</template>\n\n<script>\nimport { mapActions, mapGetters } from 'vuex'\nimport Plus from 'vue-material-design-icons/Plus'\nimport Delete from 'vue-material-design-icons/Delete'\nimport PlusBoxMultiple from 'vue-material-design-icons/PlusBoxMultiple'\nimport FileUpload from 'vue-material-design-icons/FileUpload'\nimport Star from 'vue-material-design-icons/Star'\nimport Download from 'vue-material-design-icons/Download'\n\nimport { Modal, Actions, ActionButton, Button, isMobile } from '@nextcloud/vue'\nimport moment from '@nextcloud/moment'\n\nimport logger from '../services/logger.js'\nimport { allMimes } from '../services/AllowedMimes.js'\nimport FetchFilesMixin from '../mixins/FetchFilesMixin.js'\nimport FilesByMonthMixin from '../mixins/FilesByMonthMixin.js'\nimport FilesSelectionMixin from '../mixins/FilesSelectionMixin.js'\nimport FilesListViewer from '../components/FilesListViewer.vue'\nimport EmptyContent from '../components/EmptyContent.vue'\nimport File from '../components/File.vue'\nimport Loader from '../components/Loader.vue'\nimport AlbumForm from '../components/AlbumForm.vue'\nimport AlbumPicker from '../components/AlbumPicker.vue'\n\nexport default {\n\tname: 'Timeline',\n\tcomponents: {\n\t\tEmptyContent,\n\t\tAlbumForm,\n\t\tAlbumPicker,\n\t\tFilesListViewer,\n\t\tLoader,\n\t\tFile,\n\t\tModal,\n\t\tActions,\n\t\tActionButton,\n\t\tButton,\n\t\tPlus,\n\t\tDelete,\n\t\tFileUpload,\n\t\tPlusBoxMultiple,\n\t\tStar,\n\t\tDownload,\n\t},\n\n\tfilters: {\n\t\t/**\n\t\t * @param {string} date - In the following format: YYYYMM\n\t\t */\n\t\tdateMonth(date) {\n\t\t\treturn moment(date, 'YYYYMM').format('MMMM')\n\t\t},\n\t\t/**\n\t\t * @param {string} date - In the following format: YYYYMM\n\t\t */\n\t\tdateYear(date) {\n\t\t\treturn moment(date, 'YYYYMM').format('YYYY')\n\t\t},\n\t},\n\n\tmixins: [\n\t\tFetchFilesMixin,\n\t\tFilesSelectionMixin,\n\t\tFilesByMonthMixin,\n\t\tisMobile,\n\t],\n\n\tbeforeRouteLeave(to, from, next) {\n\t\twindow.scrollTo(0, 0)\n\t\tnext()\n\t},\n\n\tprops: {\n\t\tonlyFavorites: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tmimesType: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => allMimes,\n\t\t},\n\t\tonThisDay: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloadingCount: 0,\n\t\t\tshowAlbumCreationForm: false,\n\t\t\tshowAlbumPicker: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t...mapGetters([\n\t\t\t'files',\n\t\t]),\n\n\t\t/** @type {boolean} */\n\t\tshouldFavorite() {\n\t\t\t// Favorite all selection if at least one file is not on the favorites.\n\t\t\treturn this.selectedFileIds.some((fileId) => this.$store.state.files.files[fileId].favorite === 0)\n\t\t},\n\t},\n\n\tmethods: {\n\t\t...mapActions(['deleteFiles', 'toggleFavoriteForFiles', 'downloadFiles', 'addFilesToAlbum']),\n\n\t\tgetContent() {\n\t\t\tthis.fetchFiles('', {\n\t\t\t\tmimesType: this.mimesType,\n\t\t\t\tonThisDay: this.onThisDay,\n\t\t\t\tonlyFavorites: this.onlyFavorites,\n\t\t\t})\n\t\t},\n\n\t\topenViewer(fileId) {\n\t\t\tconst file = this.files[fileId]\n\t\t\tOCA.Viewer.open({\n\t\t\t\tpath: file.filename,\n\t\t\t\tlist: Object.values(this.fileIdsByMonth).flat().map(fileId => this.files[fileId]),\n\t\t\t\tloadMore: file.loadMore ? async () => await file.loadMore(true) : () => [],\n\t\t\t\tcanLoop: file.canLoop,\n\t\t\t})\n\t\t},\n\n\t\topenUploader() {\n\t\t\t// TODO: finish when implementing upload\n\t\t},\n\n\t\tasync addSelectionToAlbum(albumName) {\n\t\t\ttry {\n\t\t\t\tthis.showAlbumPicker = false\n\t\t\t\tthis.loadingCount++\n\t\t\t\tawait this.addFilesToAlbum({ albumName, fileIdsToAdd: this.selectedFileIds })\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loadingCount--\n\t\t\t}\n\t\t},\n\n\t\tasync favoriteSelection() {\n\t\t\ttry {\n\t\t\t\tthis.loadingCount++\n\t\t\t\tawait this.toggleFavoriteForFiles({ fileIds: this.selectedFileIds, favoriteState: true })\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loadingCount--\n\t\t\t}\n\t\t},\n\n\t\tasync unFavoriteSelection() {\n\t\t\ttry {\n\t\t\t\tthis.loadingCount++\n\t\t\t\tawait this.toggleFavoriteForFiles({ fileIds: this.selectedFileIds, favoriteState: false })\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loadingCount--\n\t\t\t}\n\t\t},\n\n\t\tasync deleteSelection() {\n\t\t\ttry {\n\t\t\t\tthis.loadingCount++\n\t\t\t\t// Need to store the file ids so it is not changed before the deleteFiles call.\n\t\t\t\tconst fileIds = this.selectedFileIds\n\t\t\t\tthis.onUncheckFiles(fileIds)\n\t\t\t\tthis.fetchedFileIds = this.fetchedFileIds.filter(fileid => !fileIds.includes(fileid))\n\t\t\t\tawait this.deleteFiles(fileIds)\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loadingCount--\n\t\t\t}\n\t\t},\n\n\t\tasync downloadSelection() {\n\t\t\ttry {\n\t\t\t\tthis.loadingCount++\n\t\t\t\tawait this.downloadFiles(this.selectedFileIds)\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loadingCount--\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n<style lang=\"scss\" scoped>\n.timeline {\n\tdisplay: flex;\n\tflex-direction: column;\n\n\t&__header {\n\t\tdisplay: flex;\n\t\tmin-height: 60px;\n\t\talign-items: center;\n\t\tposition: sticky;\n\t\ttop: var(--header-height);\n\t\twidth: 100%;\n\t\theight: 60px;\n\t\tz-index: 3;\n\t\tbackground: var(--color-main-background);\n\t\tpadding: 0 64px;\n\n\t\t@media only screen and (max-width: 1200px) {\n\t\t\tpadding: 0 48px;\n\t\t}\n\n\t\t& > * {\n\t\t\tmargin-right: 8px;\n\t\t}\n\n\t\t.loader {\n\t\t\tmargin-left: 16px;\n\t\t}\n\t}\n\n\t&__file-list {\n\t\tpadding: 0 64px;\n\n\t\t@media only screen and (max-width: 1200px) {\n\t\t\tpadding: 0 4px;\n\t\t}\n\n\t\t::v-deep .files-list-viewer__section-header {\n\t\t\ttop: calc(var(--header-height) + 60px);\n\t\t}\n\n\t\t::v-deep .files-list-viewer__section-header {\n\t\t\ttop: calc(var(--header-height) + 60px);\n\t\t}\n\n\t\t.section-header {\n\t\t\tpadding: 24px 0 16px 0;\n\t\t}\n\t}\n}\n</style>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Timeline.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Timeline.vue?vue&type=script&lang=js&\"","\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[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Timeline.vue?vue&type=style&index=0&id=3c2a3606&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[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Timeline.vue?vue&type=style&index=0&id=3c2a3606&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Timeline.vue?vue&type=template&id=3c2a3606&scoped=true&\"\nimport script from \"./Timeline.vue?vue&type=script&lang=js&\"\nexport * from \"./Timeline.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Timeline.vue?vue&type=style&index=0&id=3c2a3606&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 \"3c2a3606\",\n null\n \n)\n\nexport default component.exports","var map = {\n\t\"./empty.svg\": [\n\t\t51612,\n\t\t\"src_assets_Illustrations_empty_svg\"\n\t],\n\t\"./folder.svg\": [\n\t\t80917,\n\t\t\"src_assets_Illustrations_folder_svg\"\n\t],\n\t\"./images.svg\": [\n\t\t39777,\n\t\t\"src_assets_Illustrations_images_svg\"\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(() => {\n\t\treturn __webpack_require__.t(id, 1 | 16);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = 57767;\nmodule.exports = webpackAsyncContext;"],"names":["name","computed","fileIdsByMonth","filesByMonth","this","fetchedFileIds","fileId","file","files","month","push","fileid","Object","keys","forEach","sort","sortFilesByTimestamp","monthsList","month1","month2","___CSS_LOADER_EXPORT___","module","id","props","title","type","String","fillColor","default","size","Number","_vm","_h","$createElement","_c","_self","_b","staticClass","attrs","on","$event","$emit","$attrs","_v","_s","_e","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","domProps","illustration","_t","directives","rawName","value","$slots","expression","showAlbumCreationForm","t","albumCreatedHandler","_l","album","key","basename","pickAlbum","lastPhoto","_f","n","nbItems","scopedSlots","_u","fn","proxy","selectedFileIds","length","slot","openUploader","showAlbumPicker","downloadSelection","favoriteSelection","unFavoriteSelection","deleteSelection","loadingCount","ref","loadingFiles","isMobile","getContent","visibility","selection","semaphore","openViewer","onFileSelectToggle","addSelectionToAlbum","map","webpackAsyncContext","req","__webpack_require__","o","Promise","resolve","then","e","Error","code","ids","exports"],"sourceRoot":""}