diff options
author | Jakob Röhrl <jakob.roehrl@web.de> | 2020-10-20 15:36:47 +0300 |
---|---|---|
committer | Corentin Mors <corentin.mors@dashlane.com> | 2020-10-27 11:36:45 +0300 |
commit | c1e3e97f224e51d10b1383b653b3d7b0943a23aa (patch) | |
tree | 2545a73aa924ed364ab97879ce65318d284e0fb6 | |
parent | 238a889aa3e852bd3b21ee7676f2540abd439229 (diff) |
show if tags are installed
Signed-off-by: Jakob Röhrl <jakob.roehrl@web.de>
-rw-r--r-- | js/photos-3.js | 388 | ||||
-rw-r--r-- | lib/Controller/PageController.php | 1 | ||||
-rw-r--r-- | src/Photos.vue | 7 | ||||
-rw-r--r-- | src/services/AreTagsInstalled.js | 26 |
4 files changed, 421 insertions, 1 deletions
diff --git a/js/photos-3.js b/js/photos-3.js new file mode 100644 index 00000000..0b90053a --- /dev/null +++ b/js/photos-3.js @@ -0,0 +1,388 @@ +(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[3],{ + +/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./src/components/FolderTagPreview.vue?vue&type=script&lang=js&": +/*!********************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./src/components/FolderTagPreview.vue?vue&type=script&lang=js& ***! + \********************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.js"); +/* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_router__WEBPACK_IMPORTED_MODULE_0__); +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// + +/* harmony default export */ __webpack_exports__["default"] = ({ + name: 'FolderTagPreview', + props: { + icon: { + type: String, + default: 'icon-folder' + }, + id: { + type: Number, + required: true + }, + name: { + type: String, + required: true + }, + path: { + type: String, + required: true + }, + fileList: { + type: Array, + default: function _default() { + return []; + } + } + }, + data: function data() { + return { + loaded: false, + failed: [] + }; + }, + computed: { + // folder is empty + isEmpty: function isEmpty() { + return this.previewList.length === 0; + }, + ariaUuid: function ariaUuid() { + return "folder-".concat(this.id); + }, + ariaLabel: function ariaLabel() { + return t('photos', 'Open the "{name}" sub-directory', { + name: this.name + }); + }, + + /** + * Previews list without the failed ones + * @returns {Object[]} the previews fileinfo + */ + previewList: function previewList() { + var _this = this; + + return this.fileList.filter(function (file) { + return _this.failed.indexOf(file.fileid) === -1; + }); + }, + + /** + * We do not want encoded slashes when browsing by folder + * so we generate a new valid route object based on the + * current named route, get the final url back, decode it + * and use it as a direct string. + * Which vue-router does not encode afterwards! + * @returns {string} + */ + to: function to() { + // always remove first slash, the router + // manage it automatically + var regex = /^\/?(.+)/i; + var path = regex.exec(this.path)[1]; // apply to current route + + return Object.assign({}, this.$route, { + params: { + path: path + } + }); + } + }, + methods: { + generateImgSrc: function generateImgSrc(_ref) { + var fileid = _ref.fileid, + etag = _ref.etag; + // use etag to force cache reload if file changed + return Object(_nextcloud_router__WEBPACK_IMPORTED_MODULE_0__["generateUrl"])("/core/preview?fileId=".concat(fileid, "&x=", 256, "&y=", 256, "&a=true&v=").concat(etag)); + }, + onPreviewFail: function onPreviewFail(_ref2) { + var fileid = _ref2.fileid; + this.failed.push(fileid); + } + } +}); + +/***/ }), + +/***/ "./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?!./node_modules/vue-loader/lib/index.js?!./src/components/FolderTagPreview.vue?vue&type=style&index=0&id=77915c0c&lang=scss&scoped=true&": +/*!***************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./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??ref--1-3!./node_modules/vue-loader/lib??vue-loader-options!./src/components/FolderTagPreview.vue?vue&type=style&index=0&id=77915c0c&lang=scss&scoped=true& ***! + \***************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__); +// Imports + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(false); +// Module +___CSS_LOADER_EXPORT___.push([module.i, "@charset \"UTF-8\";\n/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GNU AGPL version 3 or any later version\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.file[data-v-77915c0c],\n.folder[data-v-77915c0c] {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n border-radius: var(--border-radius);\n overflow: hidden;\n}\n.file .cover[data-v-77915c0c],\n .folder .cover[data-v-77915c0c] {\n z-index: 2;\n width: 100%;\n padding-bottom: 100%;\n transition: opacity var(--animation-quick) ease-in-out;\n opacity: 0;\n background-color: var(--color-main-text);\n}\n.file.active .cover[data-v-77915c0c], .file:active .cover[data-v-77915c0c], .file:hover .cover[data-v-77915c0c], .file:focus .cover[data-v-77915c0c],\n .folder.active .cover[data-v-77915c0c],\n .folder:active .cover[data-v-77915c0c],\n .folder:hover .cover[data-v-77915c0c],\n .folder:focus .cover[data-v-77915c0c] {\n opacity: .3;\n}\n.file--clear.active .cover[data-v-77915c0c], .file--clear:active .cover[data-v-77915c0c], .file--clear:hover .cover[data-v-77915c0c], .file--clear:focus .cover[data-v-77915c0c],\n .folder--clear.active .cover[data-v-77915c0c],\n .folder--clear:active .cover[data-v-77915c0c],\n .folder--clear:hover .cover[data-v-77915c0c],\n .folder--clear:focus .cover[data-v-77915c0c] {\n opacity: .1;\n}\n.fade-enter-active[data-v-77915c0c], .fade-leave-active[data-v-77915c0c] {\n transition: opacity var(--animation-quick) ease-in-out;\n}\n.fade-enter[data-v-77915c0c], .fade-leave-to[data-v-77915c0c] {\n opacity: 0;\n}\n.folder-content[data-v-77915c0c] {\n position: absolute;\n display: grid;\n width: 100%;\n height: 100%;\n}\n.folder-content--grid-1[data-v-77915c0c] {\n grid-template-columns: 1fr;\n grid-template-rows: 1fr;\n}\n.folder-content--grid-2[data-v-77915c0c] {\n grid-template-columns: 1fr;\n grid-template-rows: 1fr 1fr;\n}\n.folder-content--grid-3[data-v-77915c0c] {\n grid-template-columns: 1fr 1fr;\n grid-template-rows: 1fr 1fr;\n}\n.folder-content--grid-3 img[data-v-77915c0c]:first-child {\n grid-column: span 2;\n}\n.folder-content--grid-4[data-v-77915c0c] {\n grid-template-columns: 1fr 1fr;\n grid-template-rows: 1fr 1fr;\n}\n.folder-content img[data-v-77915c0c] {\n width: 100%;\n height: 100%;\n -o-object-fit: cover;\n object-fit: cover;\n}\n.folder-name[data-v-77915c0c] {\n position: absolute;\n z-index: 3;\n display: flex;\n overflow: hidden;\n flex-direction: column;\n width: 100%;\n height: 100%;\n transition: opacity var(--animation-quick) ease-in-out;\n opacity: 1;\n}\n.folder-name__icon[data-v-77915c0c] {\n height: 40%;\n margin-top: calc(30% - 1rem / 2);\n background-size: 40%;\n}\n.folder-name__name[data-v-77915c0c] {\n overflow: hidden;\n height: 1rem;\n padding: 0 10px;\n text-align: center;\n white-space: nowrap;\n text-overflow: ellipsis;\n color: var(--color-main-background);\n text-shadow: 0 0 8px var(--color-main-text);\n font-size: 1rem;\n line-height: 1rem;\n}\n.folder--clear .folder-name__icon[data-v-77915c0c] {\n opacity: .3;\n}\n.folder--clear .folder-name__name[data-v-77915c0c] {\n color: var(--color-main-text);\n text-shadow: 0 0 8px var(--color-main-background);\n}\n.folder:not(.folder--clear) .cover[data-v-77915c0c] {\n opacity: .3;\n}\n.folder:not(.folder--clear):active .folder-name[data-v-77915c0c],\n.folder:not(.folder--clear):active .cover[data-v-77915c0c], .folder:not(.folder--clear):hover .folder-name[data-v-77915c0c],\n.folder:not(.folder--clear):hover .cover[data-v-77915c0c], .folder:not(.folder--clear):focus .folder-name[data-v-77915c0c],\n.folder:not(.folder--clear):focus .cover[data-v-77915c0c] {\n opacity: 0;\n}\n", ""]); +// Exports +/* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/style-loader/dist/cjs.js!./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?!./node_modules/vue-loader/lib/index.js?!./src/components/FolderTagPreview.vue?vue&type=style&index=0&id=77915c0c&lang=scss&scoped=true&": +/*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/style-loader/dist/cjs.js!./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??ref--1-3!./node_modules/vue-loader/lib??vue-loader-options!./src/components/FolderTagPreview.vue?vue&type=style&index=0&id=77915c0c&lang=scss&scoped=true& ***! + \*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var api = __webpack_require__(/*! ../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"); + var content = __webpack_require__(/*! !../../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??ref--1-3!../../node_modules/vue-loader/lib??vue-loader-options!./FolderTagPreview.vue?vue&type=style&index=0&id=77915c0c&lang=scss&scoped=true& */ "./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?!./node_modules/vue-loader/lib/index.js?!./src/components/FolderTagPreview.vue?vue&type=style&index=0&id=77915c0c&lang=scss&scoped=true&"); + + content = content.__esModule ? content.default : content; + + if (typeof content === 'string') { + content = [[module.i, content, '']]; + } + +var options = {}; + +options.insert = "head"; +options.singleton = false; + +var update = api(content, options); + + + +module.exports = content.locals || {}; + +/***/ }), + +/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/FolderTagPreview.vue?vue&type=template&id=77915c0c&scoped=true&": +/*!**********************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/FolderTagPreview.vue?vue&type=template&id=77915c0c&scoped=true& ***! + \**********************************************************************************************************************************************************************************************************************/ +/*! exports provided: render, staticRenderFns */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; }); +var render = function() { + var _vm = this + var _h = _vm.$createElement + var _c = _vm._self._c || _h + return _c( + "router-link", + { + staticClass: "folder", + class: { "folder--clear": _vm.isEmpty }, + attrs: { to: _vm.to, "aria-label": _vm.ariaLabel } + }, + [ + _c("transition", { attrs: { name: "fade" } }, [ + _c( + "div", + { + directives: [ + { + name: "show", + rawName: "v-show", + value: _vm.loaded, + expression: "loaded" + } + ], + staticClass: "folder-content", + class: "folder-content--grid-" + _vm.previewList.length, + attrs: { role: "none" } + }, + _vm._l(_vm.previewList, function(file) { + return _c("img", { + key: file.fileid, + attrs: { src: _vm.generateImgSrc(file), alt: "" }, + on: { + load: function($event) { + _vm.loaded = true + }, + error: function($event) { + return _vm.onPreviewFail(file) + } + } + }) + }), + 0 + ) + ]), + _vm._v(" "), + _c("div", { staticClass: "folder-name" }, [ + _c("span", { + staticClass: "folder-name__icon", + class: [!_vm.isEmpty ? "icon-white" : "icon-dark", _vm.icon], + attrs: { role: "img" } + }), + _vm._v(" "), + _c( + "p", + { staticClass: "folder-name__name", attrs: { id: _vm.ariaUuid } }, + [_vm._v("\n\t\t\t" + _vm._s(_vm.name) + "\n\t\t")] + ) + ]), + _vm._v(" "), + _c("div", { staticClass: "cover", attrs: { role: "none" } }) + ], + 1 + ) +} +var staticRenderFns = [] +render._withStripped = true + + + +/***/ }), + +/***/ "./src/components/FolderTagPreview.vue": +/*!*********************************************!*\ + !*** ./src/components/FolderTagPreview.vue ***! + \*********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _FolderTagPreview_vue_vue_type_template_id_77915c0c_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./FolderTagPreview.vue?vue&type=template&id=77915c0c&scoped=true& */ "./src/components/FolderTagPreview.vue?vue&type=template&id=77915c0c&scoped=true&"); +/* harmony import */ var _FolderTagPreview_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./FolderTagPreview.vue?vue&type=script&lang=js& */ "./src/components/FolderTagPreview.vue?vue&type=script&lang=js&"); +/* empty/unused harmony star reexport *//* harmony import */ var _FolderTagPreview_vue_vue_type_style_index_0_id_77915c0c_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./FolderTagPreview.vue?vue&type=style&index=0&id=77915c0c&lang=scss&scoped=true& */ "./src/components/FolderTagPreview.vue?vue&type=style&index=0&id=77915c0c&lang=scss&scoped=true&"); +/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js"); + + + + + + +/* normalize component */ + +var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])( + _FolderTagPreview_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"], + _FolderTagPreview_vue_vue_type_template_id_77915c0c_scoped_true___WEBPACK_IMPORTED_MODULE_0__["render"], + _FolderTagPreview_vue_vue_type_template_id_77915c0c_scoped_true___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"], + false, + null, + "77915c0c", + null + +) + +/* hot reload */ +if (false) { var api; } +component.options.__file = "src/components/FolderTagPreview.vue" +/* harmony default export */ __webpack_exports__["default"] = (component.exports); + +/***/ }), + +/***/ "./src/components/FolderTagPreview.vue?vue&type=script&lang=js&": +/*!**********************************************************************!*\ + !*** ./src/components/FolderTagPreview.vue?vue&type=script&lang=js& ***! + \**********************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_FolderTagPreview_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib!../../node_modules/vue-loader/lib??vue-loader-options!./FolderTagPreview.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./src/components/FolderTagPreview.vue?vue&type=script&lang=js&"); +/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_FolderTagPreview_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]); + +/***/ }), + +/***/ "./src/components/FolderTagPreview.vue?vue&type=style&index=0&id=77915c0c&lang=scss&scoped=true&": +/*!*******************************************************************************************************!*\ + !*** ./src/components/FolderTagPreview.vue?vue&type=style&index=0&id=77915c0c&lang=scss&scoped=true& ***! + \*******************************************************************************************************/ +/*! no static exports found */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _node_modules_style_loader_dist_cjs_js_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_ref_1_3_node_modules_vue_loader_lib_index_js_vue_loader_options_FolderTagPreview_vue_vue_type_style_index_0_id_77915c0c_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/style-loader/dist/cjs.js!../../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??ref--1-3!../../node_modules/vue-loader/lib??vue-loader-options!./FolderTagPreview.vue?vue&type=style&index=0&id=77915c0c&lang=scss&scoped=true& */ "./node_modules/style-loader/dist/cjs.js!./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?!./node_modules/vue-loader/lib/index.js?!./src/components/FolderTagPreview.vue?vue&type=style&index=0&id=77915c0c&lang=scss&scoped=true&"); +/* harmony import */ var _node_modules_style_loader_dist_cjs_js_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_ref_1_3_node_modules_vue_loader_lib_index_js_vue_loader_options_FolderTagPreview_vue_vue_type_style_index_0_id_77915c0c_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_cjs_js_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_ref_1_3_node_modules_vue_loader_lib_index_js_vue_loader_options_FolderTagPreview_vue_vue_type_style_index_0_id_77915c0c_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__); +/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_style_loader_dist_cjs_js_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_ref_1_3_node_modules_vue_loader_lib_index_js_vue_loader_options_FolderTagPreview_vue_vue_type_style_index_0_id_77915c0c_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__) if(["default"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_style_loader_dist_cjs_js_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_ref_1_3_node_modules_vue_loader_lib_index_js_vue_loader_options_FolderTagPreview_vue_vue_type_style_index_0_id_77915c0c_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__)); + /* harmony default export */ __webpack_exports__["default"] = (_node_modules_style_loader_dist_cjs_js_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_ref_1_3_node_modules_vue_loader_lib_index_js_vue_loader_options_FolderTagPreview_vue_vue_type_style_index_0_id_77915c0c_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default.a); + +/***/ }), + +/***/ "./src/components/FolderTagPreview.vue?vue&type=template&id=77915c0c&scoped=true&": +/*!****************************************************************************************!*\ + !*** ./src/components/FolderTagPreview.vue?vue&type=template&id=77915c0c&scoped=true& ***! + \****************************************************************************************/ +/*! exports provided: render, staticRenderFns */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_FolderTagPreview_vue_vue_type_template_id_77915c0c_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./FolderTagPreview.vue?vue&type=template&id=77915c0c&scoped=true& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/FolderTagPreview.vue?vue&type=template&id=77915c0c&scoped=true&"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_FolderTagPreview_vue_vue_type_template_id_77915c0c_scoped_true___WEBPACK_IMPORTED_MODULE_0__["render"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_FolderTagPreview_vue_vue_type_template_id_77915c0c_scoped_true___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; }); + + + +/***/ }) + +}]); +//# sourceMappingURL=photos-3.js.map?v=e46911c6d9488de835d0
\ No newline at end of file diff --git a/lib/Controller/PageController.php b/lib/Controller/PageController.php index 4fbc9599..19f3ce7e 100644 --- a/lib/Controller/PageController.php +++ b/lib/Controller/PageController.php @@ -87,6 +87,7 @@ class PageController extends Controller { $this->initialStateService->provideInitialState($this->appName, 'video-mimes', Application::VIDEO_MIMES); $this->initialStateService->provideInitialState($this->appName, 'maps', $this->appManager->isEnabledForUser('maps') === true); $this->initialStateService->provideInitialState($this->appName, 'croppedLayout', $this->config->getUserValue($user->getUid(), Application::APP_ID, 'croppedLayout', 'false')); + $this->initialStateService->provideInitialState($this->appName, 'systemtags', $this->appManager->isEnabledForUser('systemtags') === true); Util::addScript(Application::APP_ID, 'photos-main'); Util::addStyle(Application::APP_ID, 'icons'); diff --git a/src/Photos.vue b/src/Photos.vue index 5b3f241b..9d5ac8cf 100644 --- a/src/Photos.vue +++ b/src/Photos.vue @@ -33,7 +33,10 @@ <AppNavigationItem to="/favorites" :title="t('photos', 'Favorites')" icon="icon-favorite" /> <AppNavigationItem :to="{name: 'albums'}" :title="t('photos', 'Your folders')" icon="icon-files-dark" /> <AppNavigationItem :to="{name: 'shared'}" :title="t('photos', 'Shared with you')" icon="icon-share" /> - <AppNavigationItem :to="{name: 'tags'}" :title="t('photos', 'Tagged photos')" icon="icon-tag" /> + <AppNavigationItem v-if="areTagsInstalled" + :to="{name: 'tags'}" + :title="t('photos', 'Tagged photos')" + icon="icon-tag" /> <AppNavigationItem v-if="showLocationMenuEntry" :to="{name: 'maps'}" :title="t('photos', 'Locations')" @@ -74,6 +77,7 @@ import svgplaceholder from './assets/file-placeholder.svg' import imgplaceholder from './assets/image.svg' import videoplaceholder from './assets/video.svg' import isMapsInstalled from './services/IsMapsInstalled' +import areTagsInstalled from './services/AreTagsInstalled' export default { name: 'Photos', @@ -91,6 +95,7 @@ export default { svgplaceholder, imgplaceholder, videoplaceholder, + areTagsInstalled, showLocationMenuEntry: getCurrentUser() === null ? false : getCurrentUser().isAdmin || isMapsInstalled, diff --git a/src/services/AreTagsInstalled.js b/src/services/AreTagsInstalled.js new file mode 100644 index 00000000..cb5a97df --- /dev/null +++ b/src/services/AreTagsInstalled.js @@ -0,0 +1,26 @@ +/** + * @copyright Copyright (c) 2020 Jakob Röhrl <jakob.roehrl@web.de> + * + * @author Jakob Röhrl <jakob.roehrl@web.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +import { loadState } from '@nextcloud/initial-state' + +const systemtags = loadState('photos', 'systemtags') +export default systemtags |