Server IP : 184.154.167.98 / Your IP : 3.16.130.151 Web Server : Apache System : Linux pink.dnsnetservice.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64 User : puertode ( 1767) PHP Version : 8.2.26 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /home/puertode/public_html/tampico1900/apps/photos/js/ |
Upload File : |
{"version":3,"file":"photos-src_views_AlbumContent_vue.js?v=09978252f3f08470332d","mappings":"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","sources":["webpack:///photos/src/mixins/FilesByMonthMixin.js","webpack:///photos/src/components/FilesPicker.vue?vue&type=style&index=0&id=0810cf23&lang=scss&scoped=true&","webpack:///photos/src/views/AlbumContent.vue?vue&type=style&index=0&id=ab5b8038&lang=scss&scoped=true&","webpack:///photos/node_modules/vue-material-design-icons/ShareVariant.vue","webpack:///photos/node_modules/vue-material-design-icons/ShareVariant.vue?vue&type=script&lang=js&","webpack://photos/./node_modules/vue-material-design-icons/ShareVariant.vue?0b71","webpack:///photos/node_modules/vue-material-design-icons/ShareVariant.vue?vue&type=template&id=1f144a5c&","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/components/FilesPicker.vue?vue&type=template&id=0810cf23&scoped=true&","webpack:///photos/src/components/FilesPicker.vue","webpack:///photos/src/components/FilesPicker.vue?vue&type=script&lang=js&","webpack://photos/./src/components/FilesPicker.vue?5932","webpack://photos/./src/components/FilesPicker.vue?2782","webpack:///photos/src/views/AlbumContent.vue?vue&type=template&id=ab5b8038&scoped=true&","webpack:///photos/node_modules/vue-material-design-icons/DownloadMultiple.vue","webpack:///photos/node_modules/vue-material-design-icons/DownloadMultiple.vue?vue&type=script&lang=js&","webpack://photos/./node_modules/vue-material-design-icons/DownloadMultiple.vue?2e77","webpack:///photos/node_modules/vue-material-design-icons/DownloadMultiple.vue?vue&type=template&id=63c2fc60&","webpack:///photos/src/views/AlbumContent.vue","webpack:///photos/src/views/AlbumContent.vue?vue&type=script&lang=js&","webpack://photos/./src/views/AlbumContent.vue?979a","webpack://photos/./src/views/AlbumContent.vue?df0e"],"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\tif (file) {\n\t\t\t\t\tfilesByMonth[file.month] = filesByMonth[file.month] ?? []\n\t\t\t\t\tfilesByMonth[file.month].push(file.fileid)\n\t\t\t\t}\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\tmethods: {\n\t\t/**\n\t\t * @param {string} fileId1 The first file ID\n\t\t * @param {string} fileId2 The second file ID\n\t\t * @return {-1 | 1}\n\t\t */\n\t\tsortFilesByTimestamp(fileId1, fileId2) {\n\t\t\treturn this.files[fileId1].timestamp > this.files[fileId2].timestamp ? -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, \".file-picker[data-v-0810cf23]{display:flex;flex-direction:column;padding:12px}.file-picker__content[data-v-0810cf23]{display:flex;align-items:flex-start;flex-grow:1;height:500px}.file-picker__navigation[data-v-0810cf23]{flex-basis:200px;overflow:scroll;margin-right:8px;padding-right:8px;height:100%}@media only screen and (max-width: 1200px){.file-picker__navigation[data-v-0810cf23]{flex-basis:100px}}.file-picker__navigation--placeholder[data-v-0810cf23]{background:var(--color-primary-light);border-radius:var(--border-radius-large)}.file-picker__navigation__month[data-v-0810cf23]{font-weight:bold;font-size:16px;border-radius:var(--border-radius-pill);padding:8px 16px;margin:4px 0;cursor:pointer}@media only screen and (max-width: 1200px){.file-picker__navigation__month[data-v-0810cf23]{text-align:center}}.file-picker__navigation__month[data-v-0810cf23]:hover{background:var(--color-background-dark)}.file-picker__navigation__month.selected[data-v-0810cf23]{background:var(--color-primary-element-lighter)}.file-picker__file-list[data-v-0810cf23]{flex-grow:1;min-width:0;height:100%}.file-picker__file-list--placeholder[data-v-0810cf23]{background:var(--color-primary-light);border-radius:var(--border-radius-large)}.file-picker__file-list .section-header[data-v-0810cf23]{font-weight:bold;font-size:20px;padding:8px 0 4px 0}.file-picker__file-list[data-v-0810cf23] .empty-content{position:absolute;width:100%;margin-top:0;height:100%;display:flex;flex-direction:column;justify-content:center}.file-picker__actions[data-v-0810cf23]{display:flex;justify-content:space-between;justify-items:center;padding-top:16px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/FilesPicker.vue\"],\"names\":[],\"mappings\":\"AAuLA,8BACC,YAAA,CACA,qBAAA,CACA,YAAA,CAEA,uCACC,YAAA,CACA,sBAAA,CACA,WAAA,CACA,YAAA,CAGD,0CACC,gBAAA,CACA,eAAA,CACA,gBAAA,CACA,iBAAA,CACA,WAAA,CAEA,2CAPD,0CAQE,gBAAA,CAAA,CAGD,uDACC,qCAAA,CACA,wCAAA,CAGD,iDACC,gBAAA,CACA,cAAA,CACA,uCAAA,CACA,gBAAA,CACA,YAAA,CACA,cAAA,CAEA,2CARD,iDASE,iBAAA,CAAA,CAGD,uDACC,uCAAA,CAGD,0DACC,+CAAA,CAKH,yCACC,WAAA,CACA,WAAA,CACA,WAAA,CAEA,sDACC,qCAAA,CACA,wCAAA,CAGD,yDACC,gBAAA,CACA,cAAA,CACA,mBAAA,CAGD,yDACC,iBAAA,CACA,UAAA,CACA,YAAA,CACA,WAAA,CACA,YAAA,CACA,qBAAA,CACA,sBAAA,CAIF,uCACC,YAAA,CACA,6BAAA,CACA,oBAAA,CACA,gBAAA\",\"sourcesContent\":[\"$sizes: (\\\"400\\\": (\\\"count\\\": 3, \\\"marginTop\\\": 66, \\\"marginW\\\": 8), \\\"700\\\": (\\\"count\\\": 4, \\\"marginTop\\\": 66, \\\"marginW\\\": 8), \\\"1024\\\": (\\\"count\\\": 5, \\\"marginTop\\\": 66, \\\"marginW\\\": 44), \\\"1280\\\": (\\\"count\\\": 4, \\\"marginTop\\\": 66, \\\"marginW\\\": 44), \\\"1440\\\": (\\\"count\\\": 5, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"1600\\\": (\\\"count\\\": 6, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"2048\\\": (\\\"count\\\": 7, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"2560\\\": (\\\"count\\\": 8, \\\"marginTop\\\": 88, \\\"marginW\\\": 88), \\\"3440\\\": (\\\"count\\\": 9, \\\"marginTop\\\": 88, \\\"marginW\\\": 88), \\\"max\\\": (\\\"count\\\": 10, \\\"marginTop\\\": 88, \\\"marginW\\\": 88));\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.file-picker {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tpadding: 12px;\\n\\n\\t&__content {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: flex-start;\\n\\t\\tflex-grow: 1;\\n\\t\\theight: 500px;\\n\\t}\\n\\n\\t&__navigation {\\n\\t\\tflex-basis: 200px;\\n\\t\\toverflow: scroll;\\n\\t\\tmargin-right: 8px;\\n\\t\\tpadding-right: 8px;\\n\\t\\theight: 100%;\\n\\n\\t\\t@media only screen and (max-width: 1200px) {\\n\\t\\t\\tflex-basis: 100px;\\n\\t\\t}\\n\\n\\t\\t&--placeholder {\\n\\t\\t\\tbackground: var(--color-primary-light);\\n\\t\\t\\tborder-radius: var(--border-radius-large);\\n\\t\\t}\\n\\n\\t\\t&__month {\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t\\tfont-size: 16px;\\n\\t\\t\\tborder-radius: var(--border-radius-pill);\\n\\t\\t\\tpadding: 8px 16px;\\n\\t\\t\\tmargin: 4px 0;\\n\\t\\t\\tcursor: pointer;\\n\\n\\t\\t\\t@media only screen and (max-width: 1200px) {\\n\\t\\t\\t\\ttext-align: center;\\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&.selected {\\n\\t\\t\\t\\tbackground: var(--color-primary-element-lighter);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t&__file-list {\\n\\t\\tflex-grow: 1;\\n\\t\\tmin-width: 0;\\n\\t\\theight: 100%;\\n\\n\\t\\t&--placeholder {\\n\\t\\t\\tbackground: var(--color-primary-light);\\n\\t\\t\\tborder-radius: var(--border-radius-large);\\n\\t\\t}\\n\\n\\t\\t.section-header {\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t\\tfont-size: 20px;\\n\\t\\t\\tpadding: 8px 0 4px 0;\\n\\t\\t}\\n\\n\\t\\t::v-deep .empty-content {\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\tmargin-top: 0;\\n\\t\\t\\theight: 100%;\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tflex-direction: column;\\n\\t\\t\\tjustify-content: center;\\n\\t\\t}\\n\\t}\\n\\n\\t&__actions {\\n\\t\\tdisplay: flex;\\n\\t\\tjustify-content: space-between;\\n\\t\\tjustify-items: center;\\n\\t\\tpadding-top: 16px;\\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, \".album__title[data-v-ab5b8038]{width:100%}.album__name[data-v-ab5b8038]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.album__location[data-v-ab5b8038]{margin-left:-4px;display:flex;color:var(--color-text-lighter)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/views/AlbumContent.vue\"],\"names\":[],\"mappings\":\"AAgbC,+BACC,UAAA,CAGD,8BACC,eAAA,CACA,kBAAA,CACA,sBAAA,CAGD,kCACC,gBAAA,CACA,YAAA,CACA,+BAAA\",\"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\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\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 {\\n\\t&__title {\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\t&__name {\\n\\t\\toverflow: hidden;\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n\\n\\t&__location {\\n\\t\\tmargin-left: -4px;\\n\\t\\tdisplay: flex;\\n\\t\\tcolor: var(--color-text-lighter);\\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 share-variant-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=\"M18,16.08C17.24,16.08 16.56,16.38 16.04,16.85L8.91,12.7C8.96,12.47 9,12.24 9,12C9,11.76 8.96,11.53 8.91,11.3L15.96,7.19C16.5,7.69 17.21,8 18,8A3,3 0 0,0 21,5A3,3 0 0,0 18,2A3,3 0 0,0 15,5C15,5.24 15.04,5.47 15.09,5.7L8.04,9.81C7.5,9.31 6.79,9 6,9A3,3 0 0,0 3,12A3,3 0 0,0 6,15C6.79,15 7.5,14.69 8.04,14.19L15.16,18.34C15.11,18.55 15.08,18.77 15.08,19C15.08,20.61 16.39,21.91 18,21.91C19.61,21.91 20.92,20.61 20.92,19A2.92,2.92 0 0,0 18,16.08Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"ShareVariantIcon\",\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!./ShareVariant.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./ShareVariant.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ShareVariant.vue?vue&type=template&id=1f144a5c&\"\nimport script from \"./ShareVariant.vue?vue&type=script&lang=js&\"\nexport * from \"./ShareVariant.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 share-variant-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\":\"M18,16.08C17.24,16.08 16.56,16.38 16.04,16.85L8.91,12.7C8.96,12.47 9,12.24 9,12C9,11.76 8.96,11.53 8.91,11.3L15.96,7.19C16.5,7.69 17.21,8 18,8A3,3 0 0,0 21,5A3,3 0 0,0 18,2A3,3 0 0,0 15,5C15,5.24 15.04,5.47 15.09,5.7L8.04,9.81C7.5,9.31 6.79,9 6,9A3,3 0 0,0 3,12A3,3 0 0,0 6,15C6.79,15 7.5,14.69 8.04,14.19L15.16,18.34C15.11,18.55 15.08,18.77 15.08,19C15.08,20.61 16.39,21.91 18,21.91C19.61,21.91 20.92,20.61 20.92,19A2.92,2.92 0 0,0 18,16.08Z\"}},[(_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 _c('div',{staticClass:\"file-picker\"},[_c('div',{staticClass:\"file-picker__content\"},[_c('div',{staticClass:\"file-picker__navigation\",class:{'file-picker__navigation--placeholder': _vm.monthsList.length === 0}},_vm._l((_vm.monthsList),function(month){return _c('div',{key:month,staticClass:\"file-picker__navigation__month\",class:{selected: _vm.targetMonth === month},on:{\"click\":function($event){_vm.targetMonth = month}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm._f(\"dateMonthAndYear\")(month))+\"\\n\\t\\t\\t\")])}),0),_vm._v(\" \"),_c('FilesListViewer',{staticClass:\"file-picker__file-list\",class:{'file-picker__file-list--placeholder': _vm.monthsList.length === 0},attrs:{\"file-ids-by-section\":_vm.fileIdsByMonth,\"empty-message\":_vm.t('photos', 'There are no photos or videos yet!'),\"sections\":_vm.monthsList,\"loading\":_vm.loadingFiles,\"base-height\":100,\"section-header-height\":50,\"scroll-to-section\":_vm.targetMonth},on:{\"need-content\":_vm.getFiles},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar file = ref.file;\nvar height = ref.height;\nvar visibility = ref.visibility;\nreturn [(file.sectionHeader)?_c('h3',{staticClass:\"section-header\",style:({ height: (height + \"px\")}),attrs:{\"id\":(\"file-picker-section-header-\" + (file.id))}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm._f(\"dateMonthAndYear\")(file.id))+\"\\n\\t\\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:{\"select-toggled\":_vm.onFileSelectToggle}})]}}])})],1),_vm._v(\" \"),_c('div',{staticClass:\"file-picker__actions\"},[_c('UploadPicker',{attrs:{\"accept\":_vm.allowedMimes,\"context\":_vm.uploadContext,\"destination\":_vm.photosLocation,\"multiple\":true},on:{\"uploaded\":_vm.getFiles}}),_vm._v(\" \"),_c('NcButton',{attrs:{\"type\":\"primary\",\"disabled\":_vm.loading || _vm.selectedFileIds.length === 0},on:{\"click\":_vm.emitPickedEvent},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(!_vm.loading)?_c('ImagePlus'):_vm._e(),_vm._v(\" \"),(_vm.loading)?_c('NcLoadingIcon'):_vm._e()]},proxy:true}])},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('photos', 'Add to {destination}', { destination: _vm.destination }))+\"\\n\\t\\t\")])],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<div class=\"file-picker\">\n\t\t<div class=\"file-picker__content\">\n\t\t\t<div class=\"file-picker__navigation\"\n\t\t\t\t:class=\"{'file-picker__navigation--placeholder': monthsList.length === 0}\">\n\t\t\t\t<div v-for=\"month in monthsList\"\n\t\t\t\t\t:key=\"month\"\n\t\t\t\t\tclass=\"file-picker__navigation__month\"\n\t\t\t\t\t:class=\"{selected: targetMonth === month}\"\n\t\t\t\t\t@click=\"targetMonth = month\">\n\t\t\t\t\t{{ month | dateMonthAndYear }}\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<FilesListViewer class=\"file-picker__file-list\"\n\t\t\t\t:class=\"{'file-picker__file-list--placeholder': monthsList.length === 0}\"\n\t\t\t\t:file-ids-by-section=\"fileIdsByMonth\"\n\t\t\t\t:empty-message=\"t('photos', 'There are no photos or videos yet!')\"\n\t\t\t\t:sections=\"monthsList\"\n\t\t\t\t:loading=\"loadingFiles\"\n\t\t\t\t:base-height=\"100\"\n\t\t\t\t:section-header-height=\"50\"\n\t\t\t\t:scroll-to-section=\"targetMonth\"\n\t\t\t\t@need-content=\"getFiles\">\n\t\t\t\t<template slot-scope=\"{file, height, visibility}\">\n\t\t\t\t\t<h3 v-if=\"file.sectionHeader\"\n\t\t\t\t\t\t:id=\"`file-picker-section-header-${file.id}`\"\n\t\t\t\t\t\t:style=\"{ height: `${height}px`}\"\n\t\t\t\t\t\tclass=\"section-header\">\n\t\t\t\t\t\t{{ file.id | dateMonthAndYear }}\n\t\t\t\t\t</h3>\n\n\t\t\t\t\t<File v-else\n\t\t\t\t\t\t:file=\"files[file.id]\"\n\t\t\t\t\t\t:allow-selection=\"true\"\n\t\t\t\t\t\t:selected=\"selection[file.id] === true\"\n\t\t\t\t\t\t:visibility=\"visibility\"\n\t\t\t\t\t\t:semaphore=\"semaphore\"\n\t\t\t\t\t\t@select-toggled=\"onFileSelectToggle\" />\n\t\t\t\t</template>\n\t\t\t</FilesListViewer>\n\t\t</div>\n\n\t\t<div class=\"file-picker__actions\">\n\t\t\t<UploadPicker :accept=\"allowedMimes\"\n\t\t\t\t:context=\"uploadContext\"\n\t\t\t\t:destination=\"photosLocation\"\n\t\t\t\t:multiple=\"true\"\n\t\t\t\t@uploaded=\"getFiles\" />\n\t\t\t<NcButton type=\"primary\" :disabled=\"loading || selectedFileIds.length === 0\" @click=\"emitPickedEvent\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<ImagePlus v-if=\"!loading\" />\n\t\t\t\t\t<NcLoadingIcon v-if=\"loading\" />\n\t\t\t\t</template>\n\t\t\t\t{{ t('photos', 'Add to {destination}', { destination }) }}\n\t\t\t</NcButton>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { mapGetters } from 'vuex'\nimport { NcButton, NcLoadingIcon } from '@nextcloud/vue'\nimport { UploadPicker } from '@nextcloud/upload'\nimport moment from '@nextcloud/moment'\n\nimport ImagePlus from 'vue-material-design-icons/ImagePlus'\n\nimport FilesListViewer from './FilesListViewer.vue'\nimport File from './File.vue'\n\nimport FetchFilesMixin from '../mixins/FetchFilesMixin.js'\nimport FilesSelectionMixin from '../mixins/FilesSelectionMixin.js'\nimport FilesByMonthMixin from '../mixins/FilesByMonthMixin.js'\nimport UserConfig from '../mixins/UserConfig.js'\nimport allowedMimes from '../services/AllowedMimes.js'\n\nexport default {\n\tname: 'FilesPicker',\n\n\tcomponents: {\n\t\tFile,\n\t\tFilesListViewer,\n\t\tImagePlus,\n\t\tNcButton,\n\t\tNcLoadingIcon,\n\t\tUploadPicker,\n\t},\n\n\tfilters: {\n\t\t/**\n\t\t * @param {string} date - In the following format: YYYYMM\n\t\t */\n\t\tdateMonthAndYear(date) {\n\t\t\treturn moment(date, 'YYYYMM').format('MMMM YYYY')\n\t\t},\n\t},\n\tmixins: [\n\t\tFetchFilesMixin,\n\t\tFilesByMonthMixin,\n\t\tFilesSelectionMixin,\n\t\tUserConfig,\n\t],\n\n\tprops: {\n\t\t// Label to show in the submit button.\n\t\tdestination: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\t// List of file ids to not show.\n\t\tblacklistIds: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t// Whether we should disable the submit button and show a spinner.\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tallowedMimes,\n\t\t\ttargetMonth: null,\n\t\t\tuploadContext: {\n\t\t\t\troute: 'albumpicker',\n\t\t\t},\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t...mapGetters([\n\t\t\t'files',\n\t\t]),\n\t},\n\n\twatch: {\n\t\tmonthsList(value) {\n\t\t\tif (this.targetMonth === null) {\n\t\t\t\tthis.targetMonth = value[0]\n\t\t\t}\n\t\t},\n\t},\n\n\tmethods: {\n\t\tgetFiles() {\n\t\t\tthis.fetchFiles('', {}, this.blacklistIds)\n\t\t},\n\n\t\temitPickedEvent() {\n\t\t\tthis.$emit('files-picked', this.selectedFileIds)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.file-picker {\n\tdisplay: flex;\n\tflex-direction: column;\n\tpadding: 12px;\n\n\t&__content {\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t\tflex-grow: 1;\n\t\theight: 500px;\n\t}\n\n\t&__navigation {\n\t\tflex-basis: 200px;\n\t\toverflow: scroll;\n\t\tmargin-right: 8px;\n\t\tpadding-right: 8px;\n\t\theight: 100%;\n\n\t\t@media only screen and (max-width: 1200px) {\n\t\t\tflex-basis: 100px;\n\t\t}\n\n\t\t&--placeholder {\n\t\t\tbackground: var(--color-primary-light);\n\t\t\tborder-radius: var(--border-radius-large);\n\t\t}\n\n\t\t&__month {\n\t\t\tfont-weight: bold;\n\t\t\tfont-size: 16px;\n\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\tpadding: 8px 16px;\n\t\t\tmargin: 4px 0;\n\t\t\tcursor: pointer;\n\n\t\t\t@media only screen and (max-width: 1200px) {\n\t\t\t\ttext-align: center;\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&.selected {\n\t\t\t\tbackground: var(--color-primary-element-lighter);\n\t\t\t}\n\t\t}\n\t}\n\n\t&__file-list {\n\t\tflex-grow: 1;\n\t\tmin-width: 0;\n\t\theight: 100%;\n\n\t\t&--placeholder {\n\t\t\tbackground: var(--color-primary-light);\n\t\t\tborder-radius: var(--border-radius-large);\n\t\t}\n\n\t\t.section-header {\n\t\t\tfont-weight: bold;\n\t\t\tfont-size: 20px;\n\t\t\tpadding: 8px 0 4px 0;\n\t\t}\n\n\t\t::v-deep .empty-content {\n\t\t\tposition: absolute;\n\t\t\twidth: 100%;\n\t\t\tmargin-top: 0;\n\t\t\theight: 100%;\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\tjustify-content: center;\n\t\t}\n\t}\n\n\t&__actions {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\tjustify-items: center;\n\t\tpadding-top: 16px;\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!./FilesPicker.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!./FilesPicker.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!./FilesPicker.vue?vue&type=style&index=0&id=0810cf23&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!./FilesPicker.vue?vue&type=style&index=0&id=0810cf23&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FilesPicker.vue?vue&type=template&id=0810cf23&scoped=true&\"\nimport script from \"./FilesPicker.vue?vue&type=script&lang=js&\"\nexport * from \"./FilesPicker.vue?vue&type=script&lang=js&\"\nimport style0 from \"./FilesPicker.vue?vue&type=style&index=0&id=0810cf23&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 \"0810cf23\",\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('div',[(true)?_c('CollectionContent',{ref:\"collectionContent\",attrs:{\"collection\":_vm.album,\"collection-file-ids\":_vm.albumFileIds,\"semaphore\":_vm.semaphore,\"loading\":_vm.loadingAlbums || _vm.loadingFiles,\"error\":_vm.errorFetchingAlbums || _vm.errorFetchingFiles},scopedSlots:_vm._u([{key:\"header\",fn:function(ref){\nvar selectedFileIds = ref.selectedFileIds;\nreturn _c('HeaderNavigation',{key:\"navigation\",attrs:{\"loading\":_vm.loadingFiles,\"params\":{ albumName: _vm.albumName },\"path\":'/' + _vm.albumName,\"title\":_vm.albumName},on:{\"refresh\":_vm.fetchAlbumContent}},[(_vm.album.location !== '')?_c('div',{staticClass:\"album__location\",attrs:{\"slot\":\"subtitle\"},slot:\"subtitle\"},[_c('MapMarker'),_vm._v(_vm._s(_vm.album.location)+\"\\n\\t\\t\\t\")],1):_vm._e(),_vm._v(\" \"),(_vm.album !== undefined)?_c('template',{slot:\"right\"},[(_vm.album.nbItems !== 0)?_c('UploadPicker',{attrs:{\"accept\":_vm.allowedMimes,\"context\":_vm.uploadContext,\"destination\":_vm.album.basename,\"root\":_vm.uploadContext.root,\"multiple\":true},on:{\"uploaded\":_vm.onUpload}}):_vm._e(),_vm._v(\" \"),(_vm.sharingEnabled)?_c('NcButton',{attrs:{\"type\":\"tertiary\",\"aria-label\":_vm.t('photos', 'Manage collaborators for this album')},on:{\"click\":function($event){_vm.showManageCollaboratorView = true}}},[_c('ShareVariant',{attrs:{\"slot\":\"icon\"},slot:\"icon\"})],1):_vm._e(),_vm._v(\" \"),_c('NcActions',{attrs:{\"aria-label\":_vm.t('photos', 'Open actions menu')}},[_c('NcActionButton',{attrs:{\"close-after-click\":true,\"aria-label\":_vm.t('photos', 'Edit album details')},on:{\"click\":function($event){_vm.showEditAlbumForm = true}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('photos', 'Edit album details'))+\"\\n\\t\\t\\t\\t\\t\\t\"),_c('Pencil',{attrs:{\"slot\":\"icon\"},slot:\"icon\"})],1),_vm._v(\" \"),(_vm.albumFileIds.length > 0)?_c('ActionDownload',{attrs:{\"selected-file-ids\":_vm.albumFileIds,\"title\":_vm.t('photos', 'Download all files in album')}},[_c('DownloadMultiple',{attrs:{\"slot\":\"icon\"},slot:\"icon\"})],1):_vm._e(),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"close-after-click\":true},on:{\"click\":_vm.handleDeleteAlbum}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('photos', 'Delete album'))+\"\\n\\t\\t\\t\\t\\t\\t\"),_c('Delete',{attrs:{\"slot\":\"icon\"},slot:\"icon\"})],1),_vm._v(\" \"),(selectedFileIds.length > 0)?[_c('NcActionSeparator'),_vm._v(\" \"),_c('ActionDownload',{attrs:{\"selected-file-ids\":selectedFileIds,\"title\":_vm.t('photos', 'Download selected files')}},[_c('Download',{attrs:{\"slot\":\"icon\"},slot:\"icon\"})],1),_vm._v(\" \"),_c('ActionFavorite',{attrs:{\"selected-file-ids\":selectedFileIds}}),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"close-after-click\":true},on:{\"click\":function($event){return _vm.handleRemoveFilesFromAlbum(selectedFileIds)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('photos', 'Remove selection from album'))+\"\\n\\t\\t\\t\\t\\t\\t\\t\"),_c('Close',{attrs:{\"slot\":\"icon\"},slot:\"icon\"})],1)]:_vm._e()],2)],1):_vm._e()],2)}}],null,false,3771967189)},[_vm._v(\" \"),(_vm.album !== undefined && _vm.album.nbItems === 0 && !(_vm.loadingFiles || _vm.loadingAlbums))?_c('NcEmptyContent',{staticClass:\"album__empty\",attrs:{\"slot\":\"empty-content\",\"title\":_vm.t('photos', 'This album does not have any photos or videos yet!')},slot:\"empty-content\"},[_c('ImagePlus',{attrs:{\"slot\":\"icon\"},slot:\"icon\"}),_vm._v(\" \"),_c('NcButton',{staticClass:\"album__empty__button\",attrs:{\"slot\":\"action\",\"type\":\"primary\",\"aria-label\":_vm.t('photos', 'Add photos to this album')},on:{\"click\":function($event){_vm.showAddPhotosModal = true}},slot:\"action\"},[_c('Plus',{attrs:{\"slot\":\"icon\"},slot:\"icon\"}),_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('photos', \"Add\"))+\"\\n\\t\\t\\t\")],1)],1):_vm._e()],1):_vm._e(),_vm._v(\" \"),(_vm.showAddPhotosModal)?_c('NcModal',{attrs:{\"size\":\"large\",\"title\":_vm.t('photos', 'Add photos to the album')},on:{\"close\":function($event){_vm.showAddPhotosModal = false}}},[_c('FilesPicker',{attrs:{\"destination\":_vm.album.basename,\"blacklist-ids\":_vm.albumFileIds},on:{\"files-picked\":_vm.handleFilesPicked}})],1):_vm._e(),_vm._v(\" \"),(_vm.showManageCollaboratorView)?_c('NcModal',{attrs:{\"title\":_vm.t('photos', 'Manage collaborators')},on:{\"close\":function($event){_vm.showManageCollaboratorView = false}}},[_c('CollaboratorsSelectionForm',{attrs:{\"album-name\":_vm.album.basename,\"collaborators\":_vm.album.collaborators,\"public-link\":_vm.album.publicLink},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar collaborators = ref.collaborators;\nreturn [_c('NcButton',{attrs:{\"aria-label\":_vm.t('photos', 'Save collaborators for this album.'),\"type\":\"primary\",\"disabled\":_vm.loadingAddCollaborators},on:{\"click\":function($event){return _vm.handleSetCollaborators(collaborators)}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.loadingAddCollaborators)?_c('NcLoadingIcon'):_vm._e()]},proxy:true}],null,true)},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('photos', 'Save'))+\"\\n\\t\\t\\t\\t\")])]}}],null,false,4058924180)})],1):_vm._e(),_vm._v(\" \"),(_vm.showEditAlbumForm)?_c('NcModal',{attrs:{\"title\":_vm.t('photos', 'Edit album details')},on:{\"close\":function($event){_vm.showEditAlbumForm = false}}},[_c('AlbumForm',{attrs:{\"album\":_vm.album},on:{\"done\":_vm.redirectToNewName}})],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 download-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=\"M9,1V7H5L12,14L19,7H15V1H9M5,16V18H19V16H5M5,20V22H19V20H5Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"DownloadMultipleIcon\",\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!./DownloadMultiple.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./DownloadMultiple.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DownloadMultiple.vue?vue&type=template&id=63c2fc60&\"\nimport script from \"./DownloadMultiple.vue?vue&type=script&lang=js&\"\nexport * from \"./DownloadMultiple.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 download-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\":\"M9,1V7H5L12,14L19,7H15V1H9M5,16V18H19V16H5M5,20V22H19V20H5Z\"}},[(_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>\n\t\t<CollectionContent v-if=\"true\"\n\t\t\tref=\"collectionContent\"\n\t\t\t:collection=\"album\"\n\t\t\t:collection-file-ids=\"albumFileIds\"\n\t\t\t:semaphore=\"semaphore\"\n\t\t\t:loading=\"loadingAlbums || loadingFiles\"\n\t\t\t:error=\"errorFetchingAlbums || errorFetchingFiles\">\n\t\t\t<!-- Header -->\n\t\t\t<HeaderNavigation key=\"navigation\"\n\t\t\t\tslot=\"header\"\n\t\t\t\tslot-scope=\"{selectedFileIds}\"\n\t\t\t\t:loading=\"loadingFiles\"\n\t\t\t\t:params=\"{ albumName }\"\n\t\t\t\t:path=\"'/' + albumName\"\n\t\t\t\t:title=\"albumName\"\n\t\t\t\t@refresh=\"fetchAlbumContent\">\n\t\t\t\t<div v-if=\"album.location !== ''\" slot=\"subtitle\" class=\"album__location\">\n\t\t\t\t\t<MapMarker />{{ album.location }}\n\t\t\t\t</div>\n\t\t\t\t<template v-if=\"album !== undefined\"\n\t\t\t\t\tslot=\"right\">\n\t\t\t\t\t<UploadPicker v-if=\"album.nbItems !== 0\"\n\t\t\t\t\t\t:accept=\"allowedMimes\"\n\t\t\t\t\t\t:context=\"uploadContext\"\n\t\t\t\t\t\t:destination=\"album.basename\"\n\t\t\t\t\t\t:root=\"uploadContext.root\"\n\t\t\t\t\t\t:multiple=\"true\"\n\t\t\t\t\t\t@uploaded=\"onUpload\" />\n\n\t\t\t\t\t<NcButton v-if=\"sharingEnabled\"\n\t\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t\t:aria-label=\"t('photos', 'Manage collaborators for this album')\"\n\t\t\t\t\t\t@click=\"showManageCollaboratorView = true\">\n\t\t\t\t\t\t<ShareVariant slot=\"icon\" />\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<NcActionButton :close-after-click=\"true\"\n\t\t\t\t\t\t\t:aria-label=\"t('photos', 'Edit album details')\"\n\t\t\t\t\t\t\t@click=\"showEditAlbumForm = true\">\n\t\t\t\t\t\t\t{{ t('photos', 'Edit album details') }}\n\t\t\t\t\t\t\t<Pencil slot=\"icon\" />\n\t\t\t\t\t\t</NcActionButton>\n\n\t\t\t\t\t\t<ActionDownload v-if=\"albumFileIds.length > 0\"\n\t\t\t\t\t\t\t:selected-file-ids=\"albumFileIds\"\n\t\t\t\t\t\t\t:title=\"t('photos', 'Download all files in album')\">\n\t\t\t\t\t\t\t<DownloadMultiple slot=\"icon\" />\n\t\t\t\t\t\t</ActionDownload>\n\n\t\t\t\t\t\t<NcActionButton :close-after-click=\"true\"\n\t\t\t\t\t\t\t@click=\"handleDeleteAlbum\">\n\t\t\t\t\t\t\t{{ t('photos', 'Delete album') }}\n\t\t\t\t\t\t\t<Delete slot=\"icon\" />\n\t\t\t\t\t\t</NcActionButton>\n\n\t\t\t\t\t\t<template v-if=\"selectedFileIds.length > 0\">\n\t\t\t\t\t\t\t<NcActionSeparator />\n\n\t\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\t<Download slot=\"icon\" />\n\t\t\t\t\t\t\t</ActionDownload>\n\n\t\t\t\t\t\t\t<ActionFavorite :selected-file-ids=\"selectedFileIds\" />\n\n\t\t\t\t\t\t\t<NcActionButton :close-after-click=\"true\"\n\t\t\t\t\t\t\t\t@click=\"handleRemoveFilesFromAlbum(selectedFileIds)\">\n\t\t\t\t\t\t\t\t{{ t('photos', 'Remove selection from album') }}\n\t\t\t\t\t\t\t\t<Close slot=\"icon\" />\n\t\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcActions>\n\t\t\t\t</template>\n\t\t\t</HeaderNavigation>\n\n\t\t\t<!-- No content -->\n\t\t\t<NcEmptyContent v-if=\"album !== undefined && album.nbItems === 0 && !(loadingFiles || loadingAlbums)\"\n\t\t\t\tslot=\"empty-content\"\n\t\t\t\t:title=\"t('photos', 'This album does not have any photos or videos yet!')\"\n\t\t\t\tclass=\"album__empty\">\n\t\t\t\t<ImagePlus slot=\"icon\" />\n\n\t\t\t\t<NcButton slot=\"action\"\n\t\t\t\t\tclass=\"album__empty__button\"\n\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t:aria-label=\"t('photos', 'Add photos to this album')\"\n\t\t\t\t\t@click=\"showAddPhotosModal = true\">\n\t\t\t\t\t<Plus slot=\"icon\" />\n\t\t\t\t\t{{ t('photos', \"Add\") }}\n\t\t\t\t</NcButton>\n\t\t\t</NcEmptyContent>\n\t\t</CollectionContent>\n\n\t\t<NcModal v-if=\"showAddPhotosModal\"\n\t\t\tsize=\"large\"\n\t\t\t:title=\"t('photos', 'Add photos to the album')\"\n\t\t\t@close=\"showAddPhotosModal = false\">\n\t\t\t<FilesPicker :destination=\"album.basename\"\n\t\t\t\t:blacklist-ids=\"albumFileIds\"\n\t\t\t\t@files-picked=\"handleFilesPicked\" />\n\t\t</NcModal>\n\n\t\t<NcModal v-if=\"showManageCollaboratorView\"\n\t\t\t:title=\"t('photos', 'Manage collaborators')\"\n\t\t\t@close=\"showManageCollaboratorView = false\">\n\t\t\t<CollaboratorsSelectionForm :album-name=\"album.basename\"\n\t\t\t\t:collaborators=\"album.collaborators\"\n\t\t\t\t:public-link=\"album.publicLink\">\n\t\t\t\t<template slot-scope=\"{collaborators}\">\n\t\t\t\t\t<NcButton :aria-label=\"t('photos', 'Save collaborators for this album.')\"\n\t\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t\t:disabled=\"loadingAddCollaborators\"\n\t\t\t\t\t\t@click=\"handleSetCollaborators(collaborators)\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<NcLoadingIcon v-if=\"loadingAddCollaborators\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ t('photos', 'Save') }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t</template>\n\t\t\t</CollaboratorsSelectionForm>\n\t\t</NcModal>\n\n\t\t<NcModal v-if=\"showEditAlbumForm\"\n\t\t\t:title=\"t('photos', 'Edit album details')\"\n\t\t\t@close=\"showEditAlbumForm = false\">\n\t\t\t<AlbumForm :album=\"album\" @done=\"redirectToNewName\" />\n\t\t</NcModal>\n\t</div>\n</template>\n\n<script>\n// eslint-disable-next-line node/no-extraneous-import\nimport { addNewFileMenuEntry, removeNewFileMenuEntry } from '@nextcloud/files'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { mapActions, mapGetters } from 'vuex'\nimport { NcActions, NcActionButton, NcButton, NcModal, NcEmptyContent, NcActionSeparator, NcLoadingIcon, isMobile } from '@nextcloud/vue'\nimport { UploadPicker } from '@nextcloud/upload'\nimport debounce from 'debounce'\n\nimport Close from 'vue-material-design-icons/Close'\nimport Delete from 'vue-material-design-icons/Delete'\nimport Download from 'vue-material-design-icons/Download'\nimport DownloadMultiple from 'vue-material-design-icons/DownloadMultiple'\nimport ImagePlus from 'vue-material-design-icons/ImagePlus'\nimport MapMarker from 'vue-material-design-icons/MapMarker'\nimport Pencil from 'vue-material-design-icons/Pencil'\nimport Plus from 'vue-material-design-icons/Plus'\nimport PlusSvg from '@mdi/svg/svg/plus.svg'\nimport ShareVariant from 'vue-material-design-icons/ShareVariant'\n\nimport AbortControllerMixin from '../mixins/AbortControllerMixin.js'\nimport FetchAlbumsMixin from '../mixins/FetchAlbumsMixin.js'\nimport FetchFilesMixin from '../mixins/FetchFilesMixin.js'\nimport UserConfig from '../mixins/UserConfig.js'\n\nimport ActionDownload from '../components/Actions/ActionDownload.vue'\nimport ActionFavorite from '../components/Actions/ActionFavorite.vue'\nimport AlbumForm from '../components/Albums/AlbumForm.vue'\nimport CollaboratorsSelectionForm from '../components/Albums/CollaboratorsSelectionForm.vue'\nimport CollectionContent from '../components/Collection/CollectionContent.vue'\nimport FilesPicker from '../components/FilesPicker.vue'\nimport HeaderNavigation from '../components/HeaderNavigation.vue'\n\nimport { genFileInfo } from '../utils/fileUtils.js'\nimport allowedMimes from '../services/AllowedMimes.js'\nimport client from '../services/DavClient.js'\nimport DavRequest from '../services/DavRequest.js'\nimport logger from '../services/logger.js'\n\nexport default {\n\tname: 'AlbumContent',\n\tcomponents: {\n\t\tActionDownload,\n\t\tActionFavorite,\n\t\tAlbumForm,\n\t\tClose,\n\t\tCollaboratorsSelectionForm,\n\t\tCollectionContent,\n\t\tDelete,\n\t\tDownload,\n\t\tDownloadMultiple,\n\t\tFilesPicker,\n\t\tHeaderNavigation,\n\t\tImagePlus,\n\t\tMapMarker,\n\t\tNcActionButton,\n\t\tNcActions,\n\t\tNcActionSeparator,\n\t\tNcButton,\n\t\tNcEmptyContent,\n\t\tNcLoadingIcon,\n\t\tNcModal,\n\t\tPencil,\n\t\tPlus,\n\t\tShareVariant,\n\t\tUploadPicker,\n\t},\n\n\tmixins: [\n\t\tAbortControllerMixin,\n\t\tFetchAlbumsMixin,\n\t\tFetchFilesMixin,\n\t\tisMobile,\n\t\tUserConfig,\n\t],\n\n\tprops: {\n\t\talbumName: {\n\t\t\ttype: String,\n\t\t\tdefault: '/',\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tallowedMimes,\n\n\t\t\tshowAddPhotosModal: false,\n\t\t\tshowManageCollaboratorView: false,\n\t\t\tshowEditAlbumForm: false,\n\n\t\t\tloadingAddCollaborators: false,\n\t\t\tnewFileMenuEntry: {\n\t\t\t\tid: 'album-add',\n\t\t\t\tdisplayName: t('photos', 'Add photos to this album'),\n\t\t\t\ttemplateName: '',\n\t\t\t\tif: (context) => context.route === this.$route.name,\n\t\t\t\t/** Existing icon css class */\n\t\t\t\ticonSvgInline: PlusSvg,\n\t\t\t\t/** Function to be run after creation */\n\t\t\t\thandler: () => { this.showAddPhotosModal = true },\n\t\t\t},\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t...mapGetters([\n\t\t\t'albumsFiles',\n\t\t]),\n\n\t\t/**\n\t\t * @return {object} The album information for the current albumName.\n\t\t */\n\t\talbum() {\n\t\t\treturn this.albums[this.albumName] || {}\n\t\t},\n\n\t\t/**\n\t\t * @return {string[]} The list of files for the current albumName.\n\t\t */\n\t\talbumFileIds() {\n\t\t\treturn this.albumsFiles[this.albumName] || []\n\t\t},\n\n\t\t/**\n\t\t * @return {boolean} Whether sharing is enabled.\n\t\t */\n\t\tsharingEnabled() {\n\t\t\treturn OC.Share !== undefined\n\t\t},\n\n\t\t/**\n\t\t * The upload picker context\n\t\t * We're uploading to the album folder, and the backend handle\n\t\t * the writing to the default location as well as the album update.\n\t\t * The context is also used for the NewFileMenu.\n\t\t */\n\t\tuploadContext() {\n\t\t\treturn {\n\t\t\t\t...this.album,\n\t\t\t\troute: this.$route.name,\n\t\t\t\troot: `dav/photos/${getCurrentUser()?.uid}/albums`,\n\t\t\t}\n\t\t},\n\t},\n\n\twatch: {\n\t\talbum(newAlbum, oldAlbum) {\n\t\t\tif (newAlbum.filename !== oldAlbum.filename) {\n\t\t\t\tthis.fetchAlbumContent()\n\t\t\t}\n\t\t},\n\t},\n\n\tmounted() {\n\t\tthis.fetchAlbumContent()\n\t\taddNewFileMenuEntry(this.newFileMenuEntry)\n\t},\n\n\tdestroyed() {\n\t\tremoveNewFileMenuEntry(this.newFileMenuEntry)\n\t},\n\n\tmethods: {\n\t\t...mapActions([\n\t\t\t'appendFiles',\n\t\t\t'deleteAlbum',\n\t\t\t'addFilesToAlbum',\n\t\t\t'removeFilesFromAlbum',\n\t\t\t'updateAlbum',\n\t\t]),\n\n\t\tasync fetchAlbumContent() {\n\t\t\tif (this.loadingFiles || this.showEditAlbumForm) {\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 response = await client.getDirectoryContents(\n\t\t\t\t\t`/photos/${getCurrentUser()?.uid}/albums/${this.albumName}`,\n\t\t\t\t\t{\n\t\t\t\t\t\tdata: DavRequest,\n\t\t\t\t\t\tdetails: true,\n\t\t\t\t\t\tsignal: this.abortController.signal,\n\t\t\t\t\t}\n\t\t\t\t)\n\n\t\t\t\t// Gen files info and filtering invalid files\n\t\t\t\tconst fetchedFiles = response.data\n\t\t\t\t\t.map(file => genFileInfo(file))\n\t\t\t\t\t.filter(file => file.fileid)\n\n\t\t\t\tconst fileIds = fetchedFiles\n\t\t\t\t\t.map(file => file.fileid.toString())\n\n\t\t\t\tthis.appendFiles(fetchedFiles)\n\n\t\t\t\tif (fetchedFiles.length > 0) {\n\t\t\t\t\tawait this.$store.commit('setAlbumFiles', { albumName: this.albumName, fileIds })\n\t\t\t\t}\n\n\t\t\t\tlogger.debug(`[AlbumContent] Fetched ${fileIds.length} new files: `, 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\tlogger.error('[AlbumContent] Error fetching album files', { 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\tredirectToNewName({ album }) {\n\t\t\tthis.showEditAlbumForm = false\n\n\t\t\tif (this.album.basename !== album.basename) {\n\t\t\t\tthis.$router.push(`/albums/${album.basename}`)\n\t\t\t}\n\t\t},\n\n\t\tasync handleFilesPicked(fileIds) {\n\t\t\tthis.showAddPhotosModal = false\n\t\t\tawait this.addFilesToAlbum({ albumName: this.albumName, fileIdsToAdd: fileIds })\n\t\t\t// Re-fetch album content to have the proper filenames.\n\t\t\tawait this.fetchAlbumContent()\n\t\t},\n\n\t\tasync handleRemoveFilesFromAlbum(fileIds) {\n\t\t\tthis.$refs.collectionContent.onUncheckFiles(fileIds)\n\t\t\tawait this.removeFilesFromAlbum({ albumName: this.albumName, fileIdsToRemove: fileIds })\n\t\t},\n\n\t\tasync handleDeleteAlbum() {\n\t\t\tawait this.deleteAlbum({ albumName: this.albumName })\n\t\t\tthis.$router.push('/albums')\n\t\t},\n\n\t\tasync handleSetCollaborators(collaborators) {\n\t\t\ttry {\n\t\t\t\tthis.loadingAddCollaborators = true\n\t\t\t\tthis.showManageCollaboratorView = false\n\t\t\t\tawait this.updateAlbum({ albumName: this.albumName, properties: { collaborators } })\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loadingAddCollaborators = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * A new File has been uploaded, let's add it\n\t\t *\n\t\t * @param {Upload[]} uploads\n\t\t */\n\t\tonUpload: debounce(function() {\n\t\t\tthis.fetchAlbumContent()\n\t\t}, 500),\n\t},\n}\n</script>\n<style lang=\"scss\" scoped>\n.album {\n\t&__title {\n\t\twidth: 100%;\n\t}\n\n\t&__name {\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t&__location {\n\t\tmargin-left: -4px;\n\t\tdisplay: flex;\n\t\tcolor: var(--color-text-lighter);\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!./AlbumContent.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!./AlbumContent.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!./AlbumContent.vue?vue&type=style&index=0&id=ab5b8038&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!./AlbumContent.vue?vue&type=style&index=0&id=ab5b8038&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AlbumContent.vue?vue&type=template&id=ab5b8038&scoped=true&\"\nimport script from \"./AlbumContent.vue?vue&type=script&lang=js&\"\nexport * from \"./AlbumContent.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AlbumContent.vue?vue&type=style&index=0&id=ab5b8038&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 \"ab5b8038\",\n null\n \n)\n\nexport default component.exports"],"names":["name","computed","fileIdsByMonth","filesByMonth","this","fetchedFileIds","fileId","file","files","month","push","fileid","Object","keys","forEach","sort","sortFilesByTimestamp","monthsList","month1","month2","methods","fileId1","fileId2","timestamp","___CSS_LOADER_EXPORT___","module","id","emits","props","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","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","class","length","_l","key","selected","targetMonth","_f","loadingFiles","getFiles","scopedSlots","_u","fn","ref","height","visibility","style","selection","semaphore","onFileSelectToggle","allowedMimes","uploadContext","photosLocation","loading","selectedFileIds","emitPickedEvent","proxy","destination","album","albumFileIds","loadingAlbums","errorFetchingAlbums","errorFetchingFiles","albumName","fetchAlbumContent","location","undefined","nbItems","basename","root","onUpload","showManageCollaboratorView","showEditAlbumForm","handleDeleteAlbum","handleRemoveFilesFromAlbum","showAddPhotosModal","handleFilesPicked","collaborators","publicLink","loadingAddCollaborators","handleSetCollaborators","redirectToNewName"],"sourceRoot":""}