photos/js/photos-src_views_Timeline_v...

1 line
70 KiB
XML

{"version":3,"file":"photos-src_views_Timeline_vue.js?v=7a1aadc4b72a1feeb8f5","mappings":"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","sources":["webpack:///photos/src/services/PhotoSearch.js","webpack:///photos/src/mixins/FetchFilesMixin.js","webpack:///photos/src/mixins/FilesByMonthMixin.js","webpack:///photos/src/components/Albums/AlbumPicker.vue?vue&type=style&index=0&id=c27aa5aa&lang=scss&scoped=true&","webpack:///photos/src/views/Timeline.vue?vue&type=style&index=0&id=302f95b0&lang=scss&scoped=true&","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=21a95e74&","webpack:///photos/src/components/Actions/ActionDownload.vue?vue&type=template&id=c26f867a&","webpack:///photos/src/components/Actions/ActionDownload.vue","webpack:///photos/src/components/Actions/ActionDownload.vue?vue&type=script&lang=js&","webpack://photos/./src/components/Actions/ActionDownload.vue?3d40","webpack:///photos/src/components/Actions/ActionFavorite.vue?vue&type=template&id=16c16c0a&","webpack:///photos/src/components/Actions/ActionFavorite.vue","webpack:///photos/src/components/Actions/ActionFavorite.vue?vue&type=script&lang=js&","webpack://photos/./src/components/Actions/ActionFavorite.vue?4be4","webpack:///photos/src/views/Timeline.vue?vue&type=template&id=302f95b0&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=5764b316&","webpack:///photos/src/components/Albums/AlbumPicker.vue","webpack:///photos/src/components/Albums/AlbumPicker.vue?vue&type=script&lang=js&","webpack://photos/./src/components/Albums/AlbumPicker.vue?910d","webpack://photos/./src/components/Albums/AlbumPicker.vue?0644","webpack:///photos/src/components/Albums/AlbumPicker.vue?vue&type=template&id=c27aa5aa&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?3dc6","webpack://photos/./src/views/Timeline.vue?2f21"],"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\nimport { genFileInfo } from '../utils/fileUtils.js'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { allMimes } from './AllowedMimes.js'\nimport client from './DavClient.js'\nimport { props } from './DavRequest.js'\nimport moment from '@nextcloud/moment'\n\n/**\n * List files from a folder and filter out unwanted mimes\n *\n * @param {object} path the lookup path\n * @param {object} [options] used for the cancellable requests\n * @param {number} [options.firstResult=0] Index of the first result that we want (starts at 0)\n * @param {number} [options.nbResults=200] The number of file to fetch\n * @param {string[]} [options.mimesType=allMimes] Mime type of the files\n * @param {boolean} [options.full=false] get full data of the files\n * @param {boolean} [options.onThisDay=false] get only items from this day of year\n * @param {boolean} [options.onlyFavorites=false] get only favorite items\n * @return {Promise<object[]>} the file list\n */\nexport default async function(path = '', options = {}) {\n\t// default function options\n\toptions = {\n\t\tfirstResult: 0,\n\t\tnbResults: 200,\n\t\tmimesType: allMimes,\n\t\tonThisDay: false,\n\t\tonlyFavorites: false,\n\t\t...options,\n\t}\n\n\tconst prefixPath = `/files/${getCurrentUser().uid}`\n\n\t// generating the search or condition\n\t// based on the allowed mimetypes\n\tconst orMime = options.mimesType.reduce((str, mime) => `${str}\n\t\t<d:eq>\n\t\t\t<d:prop>\n\t\t\t\t<d:getcontenttype/>\n\t\t\t</d:prop>\n\t\t\t<d:literal>${mime}</d:literal>\n\t\t</d:eq>\n\t`, '')\n\n\tconst eqFavorites = options.onlyFavorites\n\t\t? `<d:eq>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<oc:favorite/>\n\t\t\t\t</d:prop>\n\t\t\t\t<d:literal>1</d:literal>\n\t\t\t</d:eq>`\n\t\t: ''\n\n\tconst onThisDay = options.onThisDay\n\t\t? `<d:or>${Array(20).fill(1)\n\t\t\t.map((_, years) => {\n\t\t\t\tconst start = moment(Date.now()).startOf('day').subtract(3, 'd').subtract(years + 1, 'y')\n\t\t\t\tconst end = moment(Date.now()).endOf('day').add(3, 'd').subtract(years + 1, 'y')\n\t\t\t\treturn `<d:and>\n\t\t\t\t<d:gt>\n\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t<d:getlastmodified />\n\t\t\t\t\t</d:prop>\n\t\t\t\t\t<d:literal>${start.format(moment.defaultFormatUtc)}</d:literal>\n\t\t\t\t</d:gt>\n\t\t\t\t<d:lt>\n\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t<d:getlastmodified />\n\t\t\t\t\t</d:prop>\n\t\t\t\t\t<d:literal>${end.format(moment.defaultFormatUtc)}</d:literal>\n\t\t\t\t</d:lt>\n\t\t\t</d:and>`\n\t\t\t}).join('\\n')}</d:or>`\n\t\t: ''\n\n\toptions = Object.assign({\n\t\tmethod: 'SEARCH',\n\t\theaders: {\n\t\t\t'content-Type': 'text/xml',\n\t\t},\n\t\tdata: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\t\t\t<d:searchrequest xmlns:d=\"DAV:\"\n\t\t\t\txmlns:oc=\"http://owncloud.org/ns\"\n\t\t\t\txmlns:nc=\"http://nextcloud.org/ns\"\n\t\t\t\txmlns:ns=\"https://github.com/icewind1991/SearchDAV/ns\"\n\t\t\t\txmlns:ocs=\"http://open-collaboration-services.org/ns\">\n\t\t\t\t<d:basicsearch>\n\t\t\t\t\t<d:select>\n\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t${props}\n\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t</d:select>\n\t\t\t\t\t<d:from>\n\t\t\t\t\t\t<d:scope>\n\t\t\t\t\t\t\t<d:href>${prefixPath}/${path}</d:href>\n\t\t\t\t\t\t\t<d:depth>infinity</d:depth>\n\t\t\t\t\t\t</d:scope>\n\t\t\t\t\t</d:from>\n\t\t\t\t\t<d:where>\n\t\t\t\t\t\t<d:and>\n\t\t\t\t\t\t\t<d:or>\n\t\t\t\t\t\t\t\t${orMime}\n\t\t\t\t\t\t\t</d:or>\n\t\t\t\t\t\t\t${eqFavorites}\n\t\t\t\t\t\t\t${onThisDay}\n\t\t\t\t\t\t</d:and>\n\t\t\t\t\t</d:where>\n\t\t\t\t\t<d:orderby>\n\t\t\t\t\t\t<d:order>\n\t\t\t\t\t\t\t<d:prop><d:getlastmodified/></d:prop>\n\t\t\t\t\t\t\t<d:descending/>\n\t\t\t\t\t\t</d:order>\n\t\t\t\t\t</d:orderby>\n\t\t\t\t\t<d:limit>\n\t\t\t\t\t\t<d:nresults>${options.nbResults}</d:nresults>\n\t\t\t\t\t\t<ns:firstresult>${options.firstResult}</ns:firstresult>\n\t\t\t\t\t</d:limit>\n\t\t\t\t</d:basicsearch>\n\t\t\t</d:searchrequest>`,\n\t\tdeep: true,\n\t\tdetails: true,\n\t}, options)\n\n\tconst response = await client.getDirectoryContents('', options)\n\n\treturn response.data.map(data => genFileInfo(data))\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\nimport logger from '../services/logger.js'\nimport getPhotos from '../services/PhotoSearch.js'\nimport SemaphoreWithPriority from '../utils/semaphoreWithPriority.js'\nimport AbortControllerMixin from './AbortControllerMixin.js'\n\nexport default {\n\tname: 'FetchFilesMixin',\n\n\tmixins: [\n\t\tAbortControllerMixin,\n\t],\n\n\tdata() {\n\t\treturn {\n\t\t\terrorFetchingFiles: null,\n\t\t\tloadingFiles: false,\n\t\t\tdoneFetchingFiles: false,\n\t\t\tsemaphore: new SemaphoreWithPriority(30),\n\t\t\tfetchSemaphore: new SemaphoreWithPriority(1),\n\t\t\tsemaphoreSymbol: null,\n\t\t\tfetchedFileIds: [],\n\t\t}\n\t},\n\n\twatch: {\n\t\t$route() {\n\t\t\tthis.resetFetchFilesState()\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * @param {string} path - Path to pass to getPhotos.\n\t\t * @param {object} options - Options to pass to getPhotos.\n\t\t * @param {string[]} [blacklist=[]] - Array of ids to filter out.\n\t\t * @return {Promise<string[]>} - The next batch of data depending on global offset.\n\t\t */\n\t\tasync fetchFiles(path = '', options = {}, blacklist = []) {\n\t\t\tif (this.doneFetchingFiles || this.loadingFiles) {\n\t\t\t\treturn []\n\t\t\t}\n\n\t\t\tconst semaphoreSymbol = await this.semaphore.acquire(() => 0, 'fetchFiles')\n\t\t\tconst fetchSemaphoreSymbol = await this.fetchSemaphore.acquire()\n\n\t\t\ttry {\n\t\t\t\tthis.errorFetchingFiles = null\n\t\t\t\tthis.loadingFiles = true\n\t\t\t\tthis.semaphoreSymbol = semaphoreSymbol\n\n\t\t\t\tconst numberOfImagesPerBatch = 200\n\n\t\t\t\t// Load next batch of images\n\t\t\t\tconst fetchedFiles = await getPhotos(path, {\n\t\t\t\t\tfirstResult: this.fetchedFileIds.length,\n\t\t\t\t\tnbResults: numberOfImagesPerBatch,\n\t\t\t\t\t...options,\n\t\t\t\t\tsignal: this.abortController.signal,\n\t\t\t\t})\n\n\t\t\t\t// If we get less files than requested that means we got to the end\n\t\t\t\tif (fetchedFiles.length !== numberOfImagesPerBatch) {\n\t\t\t\t\tthis.doneFetchingFiles = true\n\t\t\t\t}\n\n\t\t\t\tconst fileIds = fetchedFiles\n\t\t\t\t\t.map(file => file.fileid)\n\t\t\t\t\t.filter(fileId => !this.fetchedFileIds.includes(fileId)) // Filter to prevent duplicate fileIds.\n\n\t\t\t\tthis.fetchedFileIds.push(\n\t\t\t\t\t...fileIds\n\t\t\t\t\t\t.map((fileId) => fileId.toString())\n\t\t\t\t\t\t.filter((fileId) => !blacklist.includes(fileId))\n\t\t\t\t)\n\n\t\t\t\tthis.$store.dispatch('appendFiles', fetchedFiles)\n\n\t\t\t\tlogger.debug(`[FetchFilesMixin] Fetched ${fileIds.length} new files: `, fileIds)\n\n\t\t\t\treturn fileIds\n\t\t\t} catch (error) {\n\t\t\t\tif (error.response?.status === 404) {\n\t\t\t\t\tthis.errorFetchingFiles = 404\n\t\t\t\t} else if (error.code === 'ERR_CANCELED') {\n\t\t\t\t\treturn []\n\t\t\t\t} else {\n\t\t\t\t\tthis.errorFetchingFiles = error\n\t\t\t\t}\n\n\t\t\t\t// cancelled request, moving on...\n\t\t\t\tlogger.error('Error fetching files', { error })\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loadingFiles = false\n\t\t\t\tthis.semaphore.release(semaphoreSymbol)\n\t\t\t\tthis.fetchSemaphore.release(fetchSemaphoreSymbol)\n\t\t\t}\n\n\t\t\treturn []\n\t\t},\n\n\t\tresetFetchFilesState() {\n\t\t\tthis.doneFetchingFiles = false\n\t\t\tthis.errorFetchingFiles = null\n\t\t\tthis.loadingFiles = false\n\t\t\tthis.fetchedFileIds = []\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: '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-c27aa5aa]{padding:32px;padding-top:16px}.album-picker h2[data-v-c27aa5aa]{display:flex;align-items:center;height:60px}.album-picker h2 .loading-icon[data-v-c27aa5aa]{margin-left:32px}.album-picker .albums-container[data-v-c27aa5aa]{min-height:150px;max-height:350px;overflow-x:scroll;padding:2px}.album-picker .albums-container .album[data-v-c27aa5aa] .list-item{padding:8px 16px;box-sizing:border-box}.album-picker .albums-container .album[data-v-c27aa5aa]:not(:last-child){margin-bottom:16px}.album-picker .albums-container .album__image[data-v-c27aa5aa]{width:40px;height:40px;object-fit:none;border-radius:var(--border-radius)}.album-picker .albums-container .album__image--placeholder[data-v-c27aa5aa]{background:var(--color-primary-light)}.album-picker .albums-container .album__image--placeholder[data-v-c27aa5aa] .material-design-icon{width:100%;height:100%}.album-picker .albums-container .album__image--placeholder[data-v-c27aa5aa] .material-design-icon .material-design-icon__svg{fill:var(--color-primary)}.album-picker .new-album-button[data-v-c27aa5aa]{margin-top:32px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/Albums/AlbumPicker.vue\"],\"names\":[],\"mappings\":\"AA6HA,+BACC,YAAA,CACA,gBAAA,CAEA,kCACC,YAAA,CACA,kBAAA,CACA,WAAA,CAEA,gDACC,gBAAA,CAIF,iDACC,gBAAA,CACA,gBAAA,CACA,iBAAA,CACA,WAAA,CAIC,oEACC,gBAAA,CACA,qBAAA,CAGD,yEACC,kBAAA,CAGD,+DACC,UAAA,CACA,WAAA,CACA,eAAA,CACA,kCAAA,CAEA,4EACC,qCAAA,CAEA,mGACC,UAAA,CACA,WAAA,CAEA,8HACC,yBAAA,CAQN,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.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\\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-x: scroll;\\n\\t\\tpadding: 2px;\\n\\n\\t\\t.album {\\n\\n\\t\\t\\t::v-deep .list-item {\\n\\t\\t\\t\\tpadding: 8px 16px;\\n\\t\\t\\t\\tbox-sizing: border-box;\\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&__image {\\n\\t\\t\\t\\twidth: 40px;\\n\\t\\t\\t\\theight: 40px;\\n\\t\\t\\t\\tobject-fit: none;\\n\\t\\t\\t\\tborder-radius: var(--border-radius);\\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\\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, \".timeline[data-v-302f95b0]{display:flex;flex-direction:column}.timeline__header__left[data-v-302f95b0]{display:flex}.timeline__file-list[data-v-302f95b0]{padding:0 64px}@media only screen and (max-width: 1200px){.timeline__file-list[data-v-302f95b0]{padding:0 4px}}.timeline__file-list[data-v-302f95b0] .files-list-viewer__section-header{top:var(--photos-navigation-height)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/views/Timeline.vue\"],\"names\":[],\"mappings\":\"AAkRA,2BACC,YAAA,CACA,qBAAA,CAGC,yCACC,YAAA,CAIF,sCACC,cAAA,CAEA,2CAHD,sCAIE,aAAA,CAAA,CAGD,0EACC,mCAAA\",\"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.timeline {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\n\\t&__header {\\n\\t\\t&__left {\\n\\t\\t\\tdisplay: flex;\\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: var(--photos-navigation-height);\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"!title\"\n :aria-label=\"title\"\n class=\"material-design-icon image-multiple-icon\"\n role=\"img\"\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 emits: ['click'],\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=21a95e74&\"\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 _c('NcActionLink',{attrs:{\"close-after-click\":true,\"href\":_vm.downloadUrl,\"download\":_vm.downloadUrl,\"aria-label\":_vm.title}},[_vm._v(\"\\n\\t\"+_vm._s(_vm.title)+\"\\n\\t\"),_vm._t(\"icon\",null,{\"slot\":\"icon\"})],2)}\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<NcActionLink :close-after-click=\"true\"\n\t\t:href=\"downloadUrl\"\n\t\t:download=\"downloadUrl\"\n\t\t:aria-label=\"title\">\n\t\t{{ title }}\n\t\t<slot slot=\"icon\" name=\"icon\" />\n\t</NcActionLink>\n</template>\n\n<script>\nimport { mapGetters } from 'vuex'\n\nimport { generateUrl } from '@nextcloud/router'\nimport { NcActionLink } from '@nextcloud/vue'\n\nexport default {\n\tname: 'ActionDownload',\n\n\tcomponents: {\n\t\tNcActionLink,\n\t},\n\n\tprops: {\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\tselectedFileIds: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\t...mapGetters([\n\t\t\t'files',\n\t\t]),\n\n\t\tdownloadUrl() {\n\t\t\tconst params = new URLSearchParams()\n\t\t\tconst filePaths = this.fileNames.map(fileName => '/' + fileName.split('/').splice(3).join('/'))\n\t\t\tparams.append('files', JSON.stringify(filePaths))\n\n\t\t\treturn generateUrl(`/apps/files/ajax/download.php?${params}`)\n\t\t},\n\n\t\tfileNames() {\n\t\t\treturn this.selectedFileIds.map(fileId => this.files[fileId].filename)\n\t\t},\n\t},\n}\n</script>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ActionDownload.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!./ActionDownload.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ActionDownload.vue?vue&type=template&id=c26f867a&\"\nimport script from \"./ActionDownload.vue?vue&type=script&lang=js&\"\nexport * from \"./ActionDownload.vue?vue&type=script&lang=js&\"\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.shouldFavoriteSelection)?_c('NcActionButton',{attrs:{\"close-after-click\":true,\"aria-label\":_vm.t('photos', 'Mark selection as favorite')},on:{\"click\":_vm.favoriteSelection}},[_vm._v(\"\\n\\t\"+_vm._s(_vm.t('photos', 'Add selection to favorites'))+\"\\n\\t\"),_c('Star',{attrs:{\"slot\":\"icon\"},slot:\"icon\"})],1):_c('NcActionButton',{attrs:{\"close-after-click\":true,\"aria-label\":_vm.t('photos', 'Remove selection from favorites')},on:{\"click\":_vm.unFavoriteSelection}},[_vm._v(\"\\n\\t\"+_vm._s(_vm.t('photos', 'Remove selection from favorites'))+\"\\n\\t\"),_c('Star',{attrs:{\"slot\":\"icon\"},slot:\"icon\"})],1)}\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<NcActionButton v-if=\"shouldFavoriteSelection\"\n\t\t:close-after-click=\"true\"\n\t\t:aria-label=\"t('photos', 'Mark selection as favorite')\"\n\t\t@click=\"favoriteSelection\">\n\t\t{{ t('photos', 'Add selection to favorites') }}\n\t\t<Star slot=\"icon\" />\n\t</NcActionButton>\n\t<NcActionButton v-else\n\t\t:close-after-click=\"true\"\n\t\t:aria-label=\"t('photos', 'Remove selection from favorites')\"\n\t\t@click=\"unFavoriteSelection\">\n\t\t{{ t('photos', 'Remove selection from favorites') }}\n\t\t<Star slot=\"icon\" />\n\t</NcActionButton>\n</template>\n\n<script>\nimport { mapActions, mapGetters } from 'vuex'\nimport Star from 'vue-material-design-icons/Star'\n\nimport { NcActionButton } from '@nextcloud/vue'\n\nexport default {\n\tname: 'ActionFavorite',\n\tcomponents: {\n\t\tStar,\n\t\tNcActionButton,\n\t},\n\n\tprops: {\n\t\tselectedFileIds: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\t...mapGetters([\n\t\t\t'files',\n\t\t]),\n\n\t\t/** @return {boolean} */\n\t\tshouldFavoriteSelection() {\n\t\t\t// Favorite all selection if at least one file is not in the favorites.\n\t\t\treturn this.selectedFileIds.some((fileId) => this.files[fileId].favorite === 0)\n\t\t},\n\t},\n\n\tmethods: {\n\t\t...mapActions([\n\t\t\t'toggleFavoriteForFiles',\n\t\t]),\n\n\t\tasync favoriteSelection() {\n\t\t\tawait this.toggleFavoriteForFiles({ fileIds: this.selectedFileIds, favoriteState: 1 })\n\t\t},\n\n\t\tasync unFavoriteSelection() {\n\t\t\tawait this.toggleFavoriteForFiles({ fileIds: this.selectedFileIds, favoriteState: 0 })\n\t\t},\n\t},\n}\n</script>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ActionFavorite.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!./ActionFavorite.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ActionFavorite.vue?vue&type=template&id=16c16c0a&\"\nimport script from \"./ActionFavorite.vue?vue&type=script&lang=js&\"\nexport * from \"./ActionFavorite.vue?vue&type=script&lang=js&\"\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('NcEmptyContent',[_vm._v(\"\\n\\t\"+_vm._s(_vm.t('photos', 'An error occurred'))+\"\\n\")]):_c('div',{staticClass:\"timeline\"},[_c('HeaderNavigation',{key:\"navigation\",attrs:{\"loading\":_vm.loadingCount > 0,\"path\":'/',\"title\":_vm.rootTitle,\"root-title\":_vm.rootTitle},on:{\"refresh\":_vm.resetFetchFilesState}},[_c('div',{staticClass:\"timeline__header__left\"},[(_vm.selectedFileIds.length === 0)?_c('NcActions',{attrs:{\"force-title\":true,\"force-menu\":true,\"menu-title\":_vm.t('photos', 'Add')}},[_c('Plus',{attrs:{\"slot\":\"icon\"},slot:\"icon\"}),_vm._v(\" \"),_c('NcActionButton',{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\\t\"+_vm._s(_vm.t('photos', 'Create new album'))+\"\\n\\t\\t\\t\\t\\t\"),_c('PlusBoxMultiple',{attrs:{\"slot\":\"icon\"},slot:\"icon\"})],1)],1):[_c('NcButton',{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\\t\"+_vm._s(_vm.t('photos', 'Add to album'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActions',{attrs:{\"aria-label\":_vm.t('photos', 'Open actions menu')}},[_c('ActionDownload',{attrs:{\"selected-file-ids\":_vm.selectedFileIds,\"title\":_vm.t('photos', 'Download selected files')}},[_c('Download',{attrs:{\"slot\":\"icon\"},slot:\"icon\"})],1),_vm._v(\" \"),_c('ActionFavorite',{attrs:{\"selected-file-ids\":_vm.selectedFileIds}}),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"close-after-click\":true,\"aria-label\":_vm.t('photos', 'Delete selection')},on:{\"click\":_vm.deleteSelection}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('photos', 'Delete selection'))+\"\\n\\t\\t\\t\\t\\t\\t\"),_c('Delete',{attrs:{\"slot\":\"icon\"},slot:\"icon\"})],1)],1)]],2)]),_vm._v(\" \"),_c('FilesListViewer',{ref:\"filesListViewer\",staticClass:\"timeline__file-list\",attrs:{\"container-element\":_vm.appContent,\"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('NcModal',{key:\"albumCreationForm\",attrs:{\"close-button-contained\":false,\"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('NcModal',{key:\"albumPicker\",attrs:{\"close-button-contained\":false,\"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 v-bind=\"$attrs\"\n :aria-hidden=\"!title\"\n :aria-label=\"title\"\n class=\"material-design-icon plus-box-multiple-icon\"\n role=\"img\"\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 emits: ['click'],\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=5764b316&\"\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 }","<!--\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<NcLoadingIcon v-if=\"loadingAlbums\" class=\"loading-icon\" />\n\t\t</h2>\n\n\t\t<ul class=\"albums-container\">\n\t\t\t<NcListItem v-for=\"album in albums\"\n\t\t\t\t:key=\"album.basename\"\n\t\t\t\tclass=\"album\"\n\t\t\t\t:title=\"album.basename\"\n\t\t\t\t:aria-label=\"t('photos', 'Add selection to album {ablumName}', {albumName: album.basename})\"\n\t\t\t\t@click=\"pickAlbum(album.basename)\">\n\t\t\t\t<template slot=\"icon\">\n\t\t\t\t\t<img v-if=\"album.lastPhoto !== -1\" class=\"album__image\" :src=\"album.lastPhoto | toCoverUrl\">\n\t\t\t\t\t<div v-else class=\"album__image album__image--placeholder\">\n\t\t\t\t\t\t<ImageMultiple :size=\"32\" />\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\n\t\t\t\t<template slot=\"subtitle\">\n\t\t\t\t\t{{ n('photos', '%n item', '%n photos and videos', album.nbItems) }}\n\t\t\t\t\t<!-- TODO: finish collaboration -->\n\t\t\t\t\t<!--⸱ {{ n('photos', 'Share with %n user', 'Share with %n users', album.isShared) }}-->\n\t\t\t\t</template>\n\t\t\t</NcListItem>\n\t\t</ul>\n\n\t\t<NcButton :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</NcButton>\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 { NcButton, NcListItem, NcLoadingIcon } from '@nextcloud/vue'\nimport { generateUrl } from '@nextcloud/router'\n\nimport FetchAlbumsMixin from '../../mixins/FetchAlbumsMixin.js'\nimport AlbumForm from './AlbumForm.vue'\n\nexport default {\n\tname: 'AlbumPicker',\n\n\tcomponents: {\n\t\tPlus,\n\t\tImageMultiple,\n\t\tNcButton,\n\t\tNcListItem,\n\t\tNcLoadingIcon,\n\t\tAlbumForm,\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(`/apps/photos/api/v1/preview/${fileId}?x=${64}&y=${64}`)\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\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-x: scroll;\n\t\tpadding: 2px;\n\n\t\t.album {\n\n\t\t\t::v-deep .list-item {\n\t\t\t\tpadding: 8px 16px;\n\t\t\t\tbox-sizing: border-box;\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&__image {\n\t\t\t\twidth: 40px;\n\t\t\t\theight: 40px;\n\t\t\t\tobject-fit: none;\n\t\t\t\tborder-radius: var(--border-radius);\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\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=c27aa5aa&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=c27aa5aa&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AlbumPicker.vue?vue&type=template&id=c27aa5aa&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=c27aa5aa&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 \"c27aa5aa\",\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('NcLoadingIcon',{staticClass:\"loading-icon\"}):_vm._e()],1),_vm._v(\" \"),_c('ul',{staticClass:\"albums-container\"},_vm._l((_vm.albums),function(album){return _c('NcListItem',{key:album.basename,staticClass:\"album\",attrs:{\"title\":album.basename,\"aria-label\":_vm.t('photos', 'Add selection to album {ablumName}', {albumName: album.basename})},on:{\"click\":function($event){return _vm.pickAlbum(album.basename)}}},[_c('template',{slot:\"icon\"},[(album.lastPhoto !== -1)?_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('template',{slot:\"subtitle\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.n('photos', '%n item', '%n photos and videos', album.nbItems))+\"\\n\\t\\t\\t\\t\")])],2)}),1),_vm._v(\" \"),_c('NcButton',{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<NcEmptyContent v-if=\"errorFetchingFiles\">\n\t\t{{ t('photos', 'An error occurred') }}\n\t</NcEmptyContent>\n\n\t<div v-else class=\"timeline\">\n\t\t<!-- Header -->\n\t\t<HeaderNavigation key=\"navigation\"\n\t\t\t:loading=\"loadingCount > 0\"\n\t\t\t:path=\"'/'\"\n\t\t\t:title=\"rootTitle\"\n\t\t\t:root-title=\"rootTitle\"\n\t\t\t@refresh=\"resetFetchFilesState\">\n\t\t\t<div class=\"timeline__header__left\">\n\t\t\t\t<!-- TODO: UploadPicker -->\n\t\t\t\t<NcActions v-if=\"selectedFileIds.length === 0\"\n\t\t\t\t\t:force-title=\"true\"\n\t\t\t\t\t:force-menu=\"true\"\n\t\t\t\t\t:menu-title=\"t('photos', 'Add')\">\n\t\t\t\t\t<Plus slot=\"icon\" />\n\t\t\t\t\t<NcActionButton :close-after-click=\"true\"\n\t\t\t\t\t\t:aria-label=\"t('photos', 'Create a new album')\"\n\t\t\t\t\t\t@click=\"showAlbumCreationForm = true\">\n\t\t\t\t\t\t{{ t('photos', 'Create new album') }}\n\t\t\t\t\t\t<PlusBoxMultiple slot=\"icon\" />\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</NcActions>\n\n\t\t\t\t<template v-else>\n\t\t\t\t\t<NcButton :close-after-click=\"true\"\n\t\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t\t:aria-label=\"t('photos', 'Add selection to an album')\"\n\t\t\t\t\t\t@click=\"showAlbumPicker = true\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<Plus slot=\"icon\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ t('photos', 'Add to album') }}\n\t\t\t\t\t</NcButton>\n\n\t\t\t\t\t<NcActions :aria-label=\"t('photos', 'Open actions menu')\">\n\t\t\t\t\t\t<ActionDownload :selected-file-ids=\"selectedFileIds\" :title=\"t('photos', 'Download selected files')\">\n\t\t\t\t\t\t\t<Download slot=\"icon\" />\n\t\t\t\t\t\t</ActionDownload>\n\n\t\t\t\t\t\t<ActionFavorite :selected-file-ids=\"selectedFileIds\" />\n\n\t\t\t\t\t\t<NcActionButton :close-after-click=\"true\"\n\t\t\t\t\t\t\t:aria-label=\"t('photos', 'Delete selection')\"\n\t\t\t\t\t\t\t@click=\"deleteSelection\">\n\t\t\t\t\t\t\t{{ t('photos', 'Delete selection') }}\n\t\t\t\t\t\t\t<Delete slot=\"icon\" />\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t</NcActions>\n\t\t\t\t</template>\n\t\t\t</div>\n\t\t</HeaderNavigation>\n\n\t\t<FilesListViewer ref=\"filesListViewer\"\n\t\t\t:container-element=\"appContent\"\n\t\t\tclass=\"timeline__file-list\"\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<NcModal v-if=\"showAlbumCreationForm\"\n\t\t\tkey=\"albumCreationForm\"\n\t\t\t:close-button-contained=\"false\"\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</NcModal>\n\n\t\t<NcModal v-if=\"showAlbumPicker\"\n\t\t\tkey=\"albumPicker\"\n\t\t\t:close-button-contained=\"false\"\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</NcModal>\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 Download from 'vue-material-design-icons/Download'\n\nimport { NcModal, NcActions, NcActionButton, NcButton, NcEmptyContent, isMobile } from '@nextcloud/vue'\nimport moment from '@nextcloud/moment'\n\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 File from '../components/File.vue'\nimport AlbumForm from '../components/Albums/AlbumForm.vue'\nimport AlbumPicker from '../components/Albums/AlbumPicker.vue'\nimport ActionFavorite from '../components/Actions/ActionFavorite.vue'\nimport ActionDownload from '../components/Actions/ActionDownload.vue'\nimport HeaderNavigation from '../components/HeaderNavigation.vue'\n\nexport default {\n\tname: 'Timeline',\n\tcomponents: {\n\t\tDelete,\n\t\tPlusBoxMultiple,\n\t\tDownload,\n\t\tPlus,\n\t\tNcEmptyContent,\n\t\tNcModal,\n\t\tNcActions,\n\t\tNcActionButton,\n\t\tNcButton,\n\t\tAlbumForm,\n\t\tAlbumPicker,\n\t\tFilesListViewer,\n\t\tFile,\n\t\tActionFavorite,\n\t\tActionDownload,\n\t\tHeaderNavigation,\n\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\trootTitle: {\n\t\t\ttype: String,\n\t\t\trequired: true,\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\tappContent: document.getElementById('app-content-vue'),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t...mapGetters([\n\t\t\t'files',\n\t\t]),\n\t},\n\n\tmethods: {\n\t\t...mapActions(['deleteFiles', '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\tfileInfo: file,\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\tthis.showAlbumPicker = false\n\t\t\tawait this.addFilesToAlbum({ albumName, fileIdsToAdd: this.selectedFileIds })\n\t\t},\n\n\t\tasync deleteSelection() {\n\t\t\t// Need to store the file ids so it is not changed before the deleteFiles call.\n\t\t\tconst fileIds = this.selectedFileIds\n\t\t\tthis.onUncheckFiles(fileIds)\n\t\t\tthis.fetchedFileIds = this.fetchedFileIds.filter(fileid => !fileIds.includes(fileid))\n\t\t\tawait this.deleteFiles(fileIds)\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\t&__left {\n\t\t\tdisplay: flex;\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: var(--photos-navigation-height);\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=302f95b0&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=302f95b0&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Timeline.vue?vue&type=template&id=302f95b0&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=302f95b0&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 \"302f95b0\",\n null\n \n)\n\nexport default component.exports"],"names":["path","options","firstResult","nbResults","mimesType","allMimes","onThisDay","onlyFavorites","prefixPath","getCurrentUser","uid","orMime","reduce","str","mime","eqFavorites","Array","fill","map","_","years","start","moment","Date","now","startOf","subtract","end","endOf","add","format","join","Object","assign","method","headers","data","props","deep","details","client","response","genFileInfo","name","mixins","AbortControllerMixin","errorFetchingFiles","loadingFiles","doneFetchingFiles","semaphore","SemaphoreWithPriority","fetchSemaphore","semaphoreSymbol","fetchedFileIds","watch","$route","this","resetFetchFilesState","methods","fetchFiles","blacklist","acquire","fetchSemaphoreSymbol","numberOfImagesPerBatch","getPhotos","length","signal","abortController","fetchedFiles","fileIds","file","fileid","filter","fileId","includes","push","toString","$store","dispatch","logger","status","code","error","console","release","computed","fileIdsByMonth","filesByMonth","files","month","keys","forEach","sort","sortFilesByTimestamp","monthsList","month1","month2","___CSS_LOADER_EXPORT___","module","id","emits","title","type","String","fillColor","default","size","Number","_vm","_h","$createElement","_c","_self","_b","staticClass","attrs","on","$event","$emit","$attrs","_v","_s","_e","downloadUrl","_t","t","favoriteSelection","slot","unFavoriteSelection","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","showAlbumCreationForm","albumCreatedHandler","_l","album","key","basename","albumName","pickAlbum","lastPhoto","_f","n","nbItems","scopedSlots","_u","fn","proxy","loadingCount","rootTitle","selectedFileIds","showAlbumPicker","deleteSelection","ref","appContent","isMobile","getContent","visibility","selection","openViewer","onFileSelectToggle","addSelectionToAlbum"],"sourceRoot":""}