photos/js/photos-src_views_Tags_vue.j...

1 line
32 KiB
Plaintext

{"version":3,"file":"photos-src_views_Tags_vue.js?v=f01cee6ba0bd4ea685f7","mappings":"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","sources":["webpack:///photos/src/mixins/AbortControllerMixin.js","webpack:///photos/src/components/TagCover.vue?vue&type=style&index=0&id=2e7648be&prod&scoped=true&lang=scss","webpack:///photos/src/views/Tags.vue?vue&type=style&index=0&id=d7c9fb6c&prod&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/views/Tags.vue?1884","webpack:///photos/src/components/TagCover.vue","webpack:///photos/src/components/TagCover.vue?vue&type=script&lang=js","webpack://photos/./src/components/TagCover.vue?4d3c","webpack://photos/./src/components/TagCover.vue?c8c5","webpack:///photos/src/views/Tags.vue?vue&type=script&lang=js","webpack:///photos/src/views/Tags.vue","webpack://photos/./src/components/TagCover.vue?818f","webpack://photos/./src/views/Tags.vue?9df9","webpack://photos/./src/views/Tags.vue?dcb7"],"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: 'AbortControllerMixin',\n\n\tdata() {\n\t\treturn {\n\t\t\tabortController: new AbortController(),\n\t\t}\n\t},\n\n\tbeforeDestroy() {\n\t\tthis.abortController.abort()\n\t},\n\n\tbeforeRouteLeave(from, to, next) {\n\t\tthis.abortController.abort()\n\t\tthis.abortController = new AbortController()\n\t\tnext()\n\t},\n}\n","// 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, \".tag-cover[data-v-2e7648be]{display:flex;flex-direction:column;padding:16px;border-radius:12px}.tag-cover[data-v-2e7648be]:hover,.tag-cover[data-v-2e7648be]:focus{background:var(--color-background-dark)}.tag-cover__image[data-v-2e7648be]{width:350px;height:350px;object-fit:cover;border-radius:12px}@media only screen and (max-width: 1200px){.tag-cover__image[data-v-2e7648be]{width:250px;height:250px}}.tag-cover__image--placeholder[data-v-2e7648be]{background:var(--color-primary-element-light)}.tag-cover__image--placeholder[data-v-2e7648be] .material-design-icon{width:100%;height:100%}.tag-cover__image--placeholder[data-v-2e7648be] .material-design-icon .material-design-icon__svg{fill:var(--color-primary-element)}.tag-cover__details[data-v-2e7648be]{display:flex;flex-direction:column;margin-top:16px;width:350px}@media only screen and (max-width: 1200px){.tag-cover__details[data-v-2e7648be]{width:250px}}.tag-cover__details__first-line[data-v-2e7648be]{display:flex}.tag-cover__details__second-line[data-v-2e7648be]{display:flex;color:var(--color-text-lighter)}.tag-cover__details__name[data-v-2e7648be]{flex-grow:1;margin:0;font-weight:normal;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/TagCover.vue\"],\"names\":[],\"mappings\":\"AAEA,4BACC,YAAA,CACA,qBAAA,CACA,YAAA,CACA,kBAAA,CAEA,oEACC,uCAAA,CAGD,mCACC,WAAA,CACA,YAAA,CACA,gBAAA,CACA,kBAAA,CAEA,2CAND,mCAOE,WAAA,CACA,YAAA,CAAA,CAGD,gDACC,6CAAA,CAEA,sEACC,UAAA,CACA,WAAA,CAEA,iGACC,iCAAA,CAMJ,qCACC,YAAA,CACA,qBAAA,CACA,eAAA,CACA,WAAA,CAEA,2CAND,qCAOE,WAAA,CAAA,CAGD,iDACC,YAAA,CAGD,kDACC,YAAA,CACA,+BAAA,CAGD,2CACC,WAAA,CACA,QAAA,CACA,kBAAA,CACA,eAAA,CACA,kBAAA,CACA,sBAAA\",\"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.tag-cover {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tpadding: 16px;\\n\\tborder-radius: 12px;\\n\\n\\t&:hover, &:focus {\\n\\t\\tbackground: var(--color-background-dark);\\n\\t}\\n\\n\\t&__image {\\n\\t\\twidth: 350px;\\n\\t\\theight: 350px;\\n\\t\\tobject-fit: cover;\\n\\t\\tborder-radius: 12px;\\n\\n\\t\\t@media only screen and (max-width: 1200px) {\\n\\t\\t\\twidth: 250px;\\n\\t\\t\\theight: 250px;\\n\\t\\t}\\n\\n\\t\\t&--placeholder {\\n\\t\\t\\tbackground: var(--color-primary-element-light);\\n\\n\\t\\t\\t:deep .material-design-icon {\\n\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t\\theight: 100%;\\n\\n\\t\\t\\t\\t.material-design-icon__svg {\\n\\t\\t\\t\\t\\tfill: var(--color-primary-element);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t&__details {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\t\\tmargin-top: 16px;\\n\\t\\twidth: 350px;\\n\\n\\t\\t@media only screen and (max-width: 1200px) {\\n\\t\\t\\twidth: 250px;\\n\\t\\t}\\n\\n\\t\\t&__first-line {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t}\\n\\n\\t\\t&__second-line {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tcolor: var(--color-text-lighter);\\n\\t\\t}\\n\\n\\t\\t&__name {\\n\\t\\t\\tflex-grow: 1;\\n\\t\\t\\tmargin: 0;\\n\\t\\t\\tfont-weight: normal;\\n\\t\\t\\toverflow: hidden;\\n\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\ttext-overflow: ellipsis;\\n\\n\\t\\t}\\n\\t}\\n\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".loader[data-v-d7c9fb6c]{margin-top:30vh}.container[data-v-d7c9fb6c]{padding-left:44px}.container>h2[data-v-d7c9fb6c]{margin-left:14px;margin-top:40px}.popular-tags[data-v-d7c9fb6c],.tags[data-v-d7c9fb6c]{display:flex;flex-direction:row;gap:8px;flex-wrap:wrap}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/views/Tags.vue\"],\"names\":[],\"mappings\":\"AAEA,yBACC,eAAA,CAGD,4BACC,iBAAA,CAEA,+BACC,gBAAA,CACA,eAAA,CAIF,sDACC,YAAA,CACA,kBAAA,CACA,OAAA,CACA,cAAA\",\"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.loader {\\n\\tmargin-top: 30vh;\\n}\\n\\n.container {\\n\\tpadding-left: 44px;\\n\\n\\t> h2 {\\n\\t\\tmargin-left: 14px;\\n\\t\\tmargin-top: 40px;\\n\\t}\\n}\\n\\n.popular-tags, .tags {\\n\\tdisplay: flex;\\n\\tflex-direction: row;\\n\\tgap: 8px;\\n\\tflex-wrap: wrap;\\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 render(){var _vm=this,_c=_vm._self._c;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()])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[(_vm.error)?_c('NcEmptyContent',{attrs:{\"name\":_vm.t('photos', 'An error occurred')}}):_vm._e(),_vm._v(\" \"),(!_vm.loading && _vm.tagsList.length === 0)?_c('NcEmptyContent',{attrs:{\"name\":_vm.t('photos', 'No tags yet'),\"description\":_vm.t('photos', 'Photos with tags will show up here')}}):_vm._e(),_vm._v(\" \"),(_vm.loading)?_c('NcLoadingIcon',{staticClass:\"loader\"}):_c('div',{staticClass:\"container\"},[(_vm.popularTags.length)?_c('h2',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('photos', 'Popular tags'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"popular-tags\"},_vm._l((_vm.popularTags),function(tag){return _c('TagCover',{key:tag.id,attrs:{\"tag\":tag}})}),1),_vm._v(\" \"),(_vm.tagsList.length)?_c('h2',[_vm._v(\"\\n\\t\\t\\tAll tags\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"tags\"},_vm._l((_vm.tagsList),function(tag){return _c('TagCover',{key:tag.id,attrs:{\"tag\":tag}})}),1)])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n - @author Corentin Mors <medias@pixelswap.fr>\n - @author Marcel Klehr <mklehr@gmx.net>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<router-link class=\"tag-cover\" :to=\"`/tags/${tag.displayName}`\">\n\t\t<img v-if=\"tag.filesAssigned !== 0\"\n\t\t\tclass=\"tag-cover__image\"\n\t\t\t:src=\"coverUrl\">\n\t\t<div v-else class=\"tag-cover__image tag-cover__image--placeholder\">\n\t\t\t<ImageMultipleIcon :size=\"128\" />\n\t\t</div>\n\t\t<div class=\"tag-cover__details\">\n\t\t\t<div class=\"tag-cover__details__first-line\">\n\t\t\t\t<h3 class=\"tag-cover__details__name\">\n\t\t\t\t\t{{ t('recognize', tag.displayName) }}\n\t\t\t\t</h3>\n\t\t\t</div>\n\t\t\t<div class=\"tag-cover__details__second-line\">\n\t\t\t\t{{ n('photos', '%n photo', '%n photos', count) }}\n\t\t\t</div>\n\t\t</div>\n\t</router-link>\n</template>\n\n<script>\nimport { mapGetters } from 'vuex'\nimport ImageMultipleIcon from 'vue-material-design-icons/ImageMultiple.vue'\n\nimport { generateUrl } from '@nextcloud/router'\n\nimport AbortControllerMixin from '../mixins/AbortControllerMixin.js'\n\nexport default {\n\tname: 'TagCover',\n\n\tcomponents: {\n\t\tImageMultipleIcon,\n\t},\n\n\tmixins: [\n\t\tAbortControllerMixin,\n\t],\n\n\tprops: {\n\t\ttag: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloadCover: false,\n\t\t\tobserver: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t// global lists\n\t\t...mapGetters([\n\t\t\t'files',\n\t\t\t'tags',\n\t\t]),\n\n\t\t/**\n\t\t * @return {string}\n\t\t */\n\t\tcoverUrl() {\n\t\t\tif (!this.loadCover) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn generateUrl(`/core/preview?fileId=${this.tag.referenceFileid}&x=${512}&y=${512}&forceIcon=0&a=1`)\n\t\t},\n\n\t\tcount() {\n\t\t\treturn this.tag.filesAssigned\n\t\t},\n\t},\n\n\twatch: {\n\t\tloadCover() {\n\t\t\tif (this.tag.filesAssigned) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.$store.dispatch('fetchTagFiles', { id: this.tag.id, signal: this.abortController.signal })\n\t\t},\n\t},\n\n\tmounted() {\n\t\tthis.observer = new IntersectionObserver((entries) => {\n\t\t\tif (entries[0].isIntersecting) {\n\t\t\t\tthis.loadCover = true\n\t\t\t\tthis.observer.disconnect()\n\t\t\t}\n\t\t})\n\t\tthis.observer.observe(this.$el)\n\t},\n}\n</script>\n<style scoped lang=\"scss\">\n.tag-cover {\n\tdisplay: flex;\n\tflex-direction: column;\n\tpadding: 16px;\n\tborder-radius: 12px;\n\n\t&:hover, &:focus {\n\t\tbackground: var(--color-background-dark);\n\t}\n\n\t&__image {\n\t\twidth: 350px;\n\t\theight: 350px;\n\t\tobject-fit: cover;\n\t\tborder-radius: 12px;\n\n\t\t@media only screen and (max-width: 1200px) {\n\t\t\twidth: 250px;\n\t\t\theight: 250px;\n\t\t}\n\n\t\t&--placeholder {\n\t\t\tbackground: var(--color-primary-element-light);\n\n\t\t\t:deep .material-design-icon {\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\n\t\t\t\t.material-design-icon__svg {\n\t\t\t\t\tfill: var(--color-primary-element);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t&__details {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tmargin-top: 16px;\n\t\twidth: 350px;\n\n\t\t@media only screen and (max-width: 1200px) {\n\t\t\twidth: 250px;\n\t\t}\n\n\t\t&__first-line {\n\t\t\tdisplay: flex;\n\t\t}\n\n\t\t&__second-line {\n\t\t\tdisplay: flex;\n\t\t\tcolor: var(--color-text-lighter);\n\t\t}\n\n\t\t&__name {\n\t\t\tflex-grow: 1;\n\t\t\tmargin: 0;\n\t\t\tfont-weight: normal;\n\t\t\toverflow: hidden;\n\t\t\twhite-space: nowrap;\n\t\t\ttext-overflow: ellipsis;\n\n\t\t}\n\t}\n\n}\n</style>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TagCover.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!./TagCover.vue?vue&type=script&lang=js\"","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TagCover.vue?vue&type=style&index=0&id=2e7648be&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TagCover.vue?vue&type=style&index=0&id=2e7648be&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TagCover.vue?vue&type=template&id=2e7648be&scoped=true\"\nimport script from \"./TagCover.vue?vue&type=script&lang=js\"\nexport * from \"./TagCover.vue?vue&type=script&lang=js\"\nimport style0 from \"./TagCover.vue?vue&type=style&index=0&id=2e7648be&prod&scoped=true&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2e7648be\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Tags.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!./Tags.vue?vue&type=script&lang=js\"","<!--\n - @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n - @author Corentin Mors <medias@pixelswap.fr>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div>\n\t\t<!-- Errors handlers-->\n\t\t<NcEmptyContent v-if=\"error\" :name=\"t('photos', 'An error occurred')\" />\n\n\t\t<NcEmptyContent v-if=\"!loading && tagsList.length === 0\" :name=\"t('photos', 'No tags yet')\" :description=\"t('photos', 'Photos with tags will show up here')\" />\n\n\t\t<NcLoadingIcon v-if=\"loading\" class=\"loader\" />\n\n\t\t<div v-else class=\"container\">\n\t\t\t<h2 v-if=\"popularTags.length\">\n\t\t\t\t{{ t('photos', 'Popular tags') }}\n\t\t\t</h2>\n\t\t\t<div class=\"popular-tags\">\n\t\t\t\t<TagCover v-for=\"tag in popularTags\" :key=\"tag.id\" :tag=\"tag\" />\n\t\t\t</div>\n\t\t\t<h2 v-if=\"tagsList.length\">\n\t\t\t\tAll tags\n\t\t\t</h2>\n\t\t\t<div class=\"tags\">\n\t\t\t\t<TagCover v-for=\"tag in tagsList\" :key=\"tag.id\" :tag=\"tag\" />\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { mapGetters } from 'vuex'\n\nimport { NcEmptyContent, NcLoadingIcon } from '@nextcloud/vue'\n\nimport TagCover from '../components/TagCover.vue'\nimport AbortControllerMixin from '../mixins/AbortControllerMixin.js'\n\nexport default {\n\tname: 'Tags',\n\tcomponents: {\n\t\tTagCover,\n\t\tNcLoadingIcon,\n\t\tNcEmptyContent,\n\t},\n\tmixins: [AbortControllerMixin],\n\n\tdata() {\n\t\treturn {\n\t\t\terror: null,\n\t\t\tloading: false,\n\t\t\tshowTags: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t// global lists\n\t\t...mapGetters([\n\t\t\t'files',\n\t\t\t'tags',\n\t\t\t'tagsNames',\n\t\t]),\n\n\t\ttagsList() {\n\t\t\treturn Object.keys(this.tagsNames)\n\t\t\t\t.map(tagName => this.tags[this.tagsNames[tagName]])\n\t\t\t\t.filter(tag => tag && tag.id)\n\t\t},\n\n\t\tpopularTags() {\n\t\t\treturn Object.keys(this.tagsNames)\n\t\t\t\t.filter(tagName => (this.tags[this.tagsNames[tagName]].filesAssigned) > 50)\n\t\t\t\t.sort((a, b) => (this.tags[this.tagsNames[b]].filesAssigned || this.tagCounts[b]) - (this.tags[this.tagsNames[a]].filesAssigned || this.tagCounts[a]))\n\t\t\t\t.slice(0, 9)\n\t\t\t\t.map(tagName => this.tags[this.tagsNames[tagName]])\n\t\t},\n\t},\n\n\tasync beforeMount() {\n\t\tawait this.fetchRootContent()\n\t},\n\n\tmethods: {\n\t\tasync fetchRootContent() {\n\t\t\t// close any potential opened viewer\n\t\t\tOCA.Viewer.close()\n\n\t\t\tthis.error = null\n\n\t\t\ttry {\n\t\t\t\t// fetch content\n\t\t\t\tif (!this.tagsList.length) {\n\t\t\t\t\tthis.loading = true\n\t\t\t\t\tawait this.$store.dispatch('fetchAllTags', {\n\t\t\t\t\t\tsignal: this.abortController.signal,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error)\n\t\t\t\tthis.error = true\n\t\t\t} finally {\n\t\t\t\t// done loading\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.loader {\n\tmargin-top: 30vh;\n}\n\n.container {\n\tpadding-left: 44px;\n\n\t> h2 {\n\t\tmargin-left: 14px;\n\t\tmargin-top: 40px;\n\t}\n}\n\n.popular-tags, .tags {\n\tdisplay: flex;\n\tflex-direction: row;\n\tgap: 8px;\n\tflex-wrap: wrap;\n}\n</style>\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('router-link',{staticClass:\"tag-cover\",attrs:{\"to\":`/tags/${_vm.tag.displayName}`}},[(_vm.tag.filesAssigned !== 0)?_c('img',{staticClass:\"tag-cover__image\",attrs:{\"src\":_vm.coverUrl}}):_c('div',{staticClass:\"tag-cover__image tag-cover__image--placeholder\"},[_c('ImageMultipleIcon',{attrs:{\"size\":128}})],1),_vm._v(\" \"),_c('div',{staticClass:\"tag-cover__details\"},[_c('div',{staticClass:\"tag-cover__details__first-line\"},[_c('h3',{staticClass:\"tag-cover__details__name\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('recognize', _vm.tag.displayName))+\"\\n\\t\\t\\t\")])]),_vm._v(\" \"),_c('div',{staticClass:\"tag-cover__details__second-line\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.n('photos', '%n photo', '%n photos', _vm.count))+\"\\n\\t\\t\")])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Tags.vue?vue&type=style&index=0&id=d7c9fb6c&prod&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Tags.vue?vue&type=style&index=0&id=d7c9fb6c&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Tags.vue?vue&type=template&id=d7c9fb6c&scoped=true\"\nimport script from \"./Tags.vue?vue&type=script&lang=js\"\nexport * from \"./Tags.vue?vue&type=script&lang=js\"\nimport style0 from \"./Tags.vue?vue&type=style&index=0&id=d7c9fb6c&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d7c9fb6c\",\n null\n \n)\n\nexport default component.exports"],"names":["name","data","abortController","AbortController","beforeDestroy","this","abort","beforeRouteLeave","from","to","next","___CSS_LOADER_EXPORT___","push","module","id","emits","props","title","type","String","fillColor","default","size","Number","_vm","_c","_self","_b","staticClass","attrs","on","$event","$emit","$attrs","_v","_s","_e","components","ImageMultipleIcon","mixins","AbortControllerMixin","tag","Object","required","loadCover","observer","computed","mapGetters","coverUrl","generateUrl","concat","referenceFileid","count","filesAssigned","watch","$store","dispatch","signal","mounted","IntersectionObserver","entries","isIntersecting","disconnect","observe","$el","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","TagCover","displayName","t","n","NcLoadingIcon","NcEmptyContent","error","loading","showTags","tagsList","keys","tagsNames","map","tagName","tags","filter","popularTags","sort","a","b","tagCounts","slice","fetchRootContent","methods","OCA","Viewer","close","length","console","_l","key"],"sourceRoot":""}