1 line
81 KiB
Plaintext
1 line
81 KiB
Plaintext
{"version":3,"file":"FoldersView-Dj623CV_.chunk.mjs","sources":["../node_modules/vue-virtual-grid/dist/vue-virtual-grid.es.js","../src/components/FileLegacy.vue","../src/components/FolderTagPreview.vue","../src/services/FolderContent.ts","../src/components/FolderComponent.vue","../src/assets/grid-sizes.ts","../src/services/GridConfig.ts","../src/mixins/GridConfig.ts","../src/views/FoldersView.vue"],"sourcesContent":["var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nimport Vue from \"vue\";\n/**\n * vue-class-component v7.2.6\n * (c) 2015-present Evan You\n * @license MIT\n */\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function(obj2) {\n return typeof obj2;\n };\n } else {\n _typeof = function(obj2) {\n return obj2 && typeof Symbol === \"function\" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? \"symbol\" : typeof obj2;\n };\n }\n return _typeof(obj);\n}\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++)\n arr2[i] = arr[i];\n return arr2;\n }\n}\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\")\n return Array.from(iter);\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\nfunction reflectionIsSupported() {\n return typeof Reflect !== \"undefined\" && Reflect.defineMetadata && Reflect.getOwnMetadataKeys;\n}\nfunction copyReflectionMetadata(to, from) {\n forwardMetadata(to, from);\n Object.getOwnPropertyNames(from.prototype).forEach(function(key) {\n forwardMetadata(to.prototype, from.prototype, key);\n });\n Object.getOwnPropertyNames(from).forEach(function(key) {\n forwardMetadata(to, from, key);\n });\n}\nfunction forwardMetadata(to, from, propertyKey) {\n var metaKeys = propertyKey ? Reflect.getOwnMetadataKeys(from, propertyKey) : Reflect.getOwnMetadataKeys(from);\n metaKeys.forEach(function(metaKey) {\n var metadata = propertyKey ? Reflect.getOwnMetadata(metaKey, from, propertyKey) : Reflect.getOwnMetadata(metaKey, from);\n if (propertyKey) {\n Reflect.defineMetadata(metaKey, metadata, to, propertyKey);\n } else {\n Reflect.defineMetadata(metaKey, metadata, to);\n }\n });\n}\nvar fakeArray = {\n __proto__: []\n};\nvar hasProto = fakeArray instanceof Array;\nfunction createDecorator(factory) {\n return function(target, key, index) {\n var Ctor = typeof target === \"function\" ? target : target.constructor;\n if (!Ctor.__decorators__) {\n Ctor.__decorators__ = [];\n }\n if (typeof index !== \"number\") {\n index = void 0;\n }\n Ctor.__decorators__.push(function(options) {\n return factory(options, key, index);\n });\n };\n}\nfunction isPrimitive(value) {\n var type = _typeof(value);\n return value == null || type !== \"object\" && type !== \"function\";\n}\nfunction collectDataFromConstructor(vm, Component2) {\n var originalInit = Component2.prototype._init;\n Component2.prototype._init = function() {\n var _this = this;\n var keys = Object.getOwnPropertyNames(vm);\n if (vm.$options.props) {\n for (var key in vm.$options.props) {\n if (!vm.hasOwnProperty(key)) {\n keys.push(key);\n }\n }\n }\n keys.forEach(function(key2) {\n Object.defineProperty(_this, key2, {\n get: function get() {\n return vm[key2];\n },\n set: function set(value) {\n vm[key2] = value;\n },\n configurable: true\n });\n });\n };\n var data = new Component2();\n Component2.prototype._init = originalInit;\n var plainData = {};\n Object.keys(data).forEach(function(key) {\n if (data[key] !== void 0) {\n plainData[key] = data[key];\n }\n });\n return plainData;\n}\nvar $internalHooks = [\n \"data\",\n \"beforeCreate\",\n \"created\",\n \"beforeMount\",\n \"mounted\",\n \"beforeDestroy\",\n \"destroyed\",\n \"beforeUpdate\",\n \"updated\",\n \"activated\",\n \"deactivated\",\n \"render\",\n \"errorCaptured\",\n \"serverPrefetch\"\n];\nfunction componentFactory(Component2) {\n var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n options.name = options.name || Component2._componentTag || Component2.name;\n var proto = Component2.prototype;\n Object.getOwnPropertyNames(proto).forEach(function(key) {\n if (key === \"constructor\") {\n return;\n }\n if ($internalHooks.indexOf(key) > -1) {\n options[key] = proto[key];\n return;\n }\n var descriptor = Object.getOwnPropertyDescriptor(proto, key);\n if (descriptor.value !== void 0) {\n if (typeof descriptor.value === \"function\") {\n (options.methods || (options.methods = {}))[key] = descriptor.value;\n } else {\n (options.mixins || (options.mixins = [])).push({\n data: function data() {\n return _defineProperty({}, key, descriptor.value);\n }\n });\n }\n } else if (descriptor.get || descriptor.set) {\n (options.computed || (options.computed = {}))[key] = {\n get: descriptor.get,\n set: descriptor.set\n };\n }\n });\n (options.mixins || (options.mixins = [])).push({\n data: function data() {\n return collectDataFromConstructor(this, Component2);\n }\n });\n var decorators = Component2.__decorators__;\n if (decorators) {\n decorators.forEach(function(fn) {\n return fn(options);\n });\n delete Component2.__decorators__;\n }\n var superProto = Object.getPrototypeOf(Component2.prototype);\n var Super = superProto instanceof Vue ? superProto.constructor : Vue;\n var Extended = Super.extend(options);\n forwardStaticMembers(Extended, Component2, Super);\n if (reflectionIsSupported()) {\n copyReflectionMetadata(Extended, Component2);\n }\n return Extended;\n}\nvar shouldIgnore = {\n prototype: true,\n arguments: true,\n callee: true,\n caller: true\n};\nfunction forwardStaticMembers(Extended, Original, Super) {\n Object.getOwnPropertyNames(Original).forEach(function(key) {\n if (shouldIgnore[key]) {\n return;\n }\n var extendedDescriptor = Object.getOwnPropertyDescriptor(Extended, key);\n if (extendedDescriptor && !extendedDescriptor.configurable) {\n return;\n }\n var descriptor = Object.getOwnPropertyDescriptor(Original, key);\n if (!hasProto) {\n if (key === \"cid\") {\n return;\n }\n var superDescriptor = Object.getOwnPropertyDescriptor(Super, key);\n if (!isPrimitive(descriptor.value) && superDescriptor && superDescriptor.value === descriptor.value) {\n return;\n }\n }\n Object.defineProperty(Extended, key, descriptor);\n });\n}\nfunction Component(options) {\n if (typeof options === \"function\") {\n return componentFactory(options);\n }\n return function(Component2) {\n return componentFactory(Component2, options);\n };\n}\nComponent.registerHooks = function registerHooks(keys) {\n $internalHooks.push.apply($internalHooks, _toConsumableArray(keys));\n};\nglobalThis && globalThis.__spreadArrays || function() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++)\n s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nfunction needToProduceProvide(original) {\n return typeof original !== \"function\" || !original.managed && !original.managedReactive;\n}\nfunction produceProvide(original) {\n var provide = function() {\n var _this = this;\n var rv = typeof original === \"function\" ? original.call(this) : original;\n rv = Object.create(rv || null);\n rv[reactiveInjectKey] = Object.create(this[reactiveInjectKey] || {});\n for (var i in provide.managed) {\n rv[provide.managed[i]] = this[i];\n }\n var _loop_1 = function(i2) {\n rv[provide.managedReactive[i2]] = this_1[i2];\n Object.defineProperty(rv[reactiveInjectKey], provide.managedReactive[i2], {\n enumerable: true,\n configurable: true,\n get: function() {\n return _this[i2];\n }\n });\n };\n var this_1 = this;\n for (var i in provide.managedReactive) {\n _loop_1(i);\n }\n return rv;\n };\n provide.managed = {};\n provide.managedReactive = {};\n return provide;\n}\nvar reactiveInjectKey = \"__reactiveInject__\";\nfunction inheritInjected(componentOptions) {\n if (!Array.isArray(componentOptions.inject)) {\n componentOptions.inject = componentOptions.inject || {};\n componentOptions.inject[reactiveInjectKey] = {\n from: reactiveInjectKey,\n default: {}\n };\n }\n}\nvar reflectMetadataIsSupported = typeof Reflect !== \"undefined\" && typeof Reflect.getMetadata !== \"undefined\";\nfunction applyMetadata(options, target, key) {\n if (reflectMetadataIsSupported) {\n if (!Array.isArray(options) && typeof options !== \"function\" && !options.hasOwnProperty(\"type\") && typeof options.type === \"undefined\") {\n var type = Reflect.getMetadata(\"design:type\", target, key);\n if (type !== Object) {\n options.type = type;\n }\n }\n }\n}\nfunction Prop(options) {\n if (options === void 0) {\n options = {};\n }\n return function(target, key) {\n applyMetadata(options, target, key);\n createDecorator(function(componentOptions, k) {\n (componentOptions.props || (componentOptions.props = {}))[k] = options;\n })(target, key);\n };\n}\nfunction ProvideReactive(key) {\n return createDecorator(function(componentOptions, k) {\n var provide = componentOptions.provide;\n inheritInjected(componentOptions);\n if (needToProduceProvide(provide)) {\n provide = componentOptions.provide = produceProvide(provide);\n }\n provide.managedReactive[k] = key || k;\n });\n}\nfunction Watch(path, options) {\n if (options === void 0) {\n options = {};\n }\n var _a = options.deep, deep = _a === void 0 ? false : _a, _b = options.immediate, immediate = _b === void 0 ? false : _b;\n return createDecorator(function(componentOptions, handler) {\n if (typeof componentOptions.watch !== \"object\") {\n componentOptions.watch = /* @__PURE__ */ Object.create(null);\n }\n var watch = componentOptions.watch;\n if (typeof watch[path] === \"object\" && !Array.isArray(watch[path])) {\n watch[path] = [watch[path]];\n } else if (typeof watch[path] === \"undefined\") {\n watch[path] = [];\n }\n watch[path].push({ handler, deep, immediate });\n });\n}\nconst getGridGapDefault = (elementWidth, windowHeight) => {\n if (elementWidth > 720 && windowHeight > 480) {\n return 10;\n } else {\n return 5;\n }\n};\nconst getColumnCountDefault = (elementWidth) => {\n return Math.floor(elementWidth / 250);\n};\nconst getWindowMarginDefault = (windowHeight) => {\n return Math.round(windowHeight * 1.5);\n};\nconst getItemRatioHeightDefault = (height, width, columnWidth) => {\n const imageRatio = height / width;\n return Math.round(columnWidth * imageRatio);\n};\nconst debugLog = (condition, ...args) => {\n if (condition) {\n console.debug(...args);\n }\n};\nvar __defProp2 = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __decorateClass = (decorators, target, key, kind) => {\n var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;\n for (var i = decorators.length - 1, decorator; i >= 0; i--)\n if (decorator = decorators[i])\n result = (kind ? decorator(target, key, result) : decorator(result)) || result;\n if (kind && result)\n __defProp2(target, key, result);\n return result;\n};\nlet VirtualGrid$1 = class extends Vue {\n constructor() {\n super(...arguments);\n this.updateLock = false;\n this.bottomReached = false;\n this.ref = null;\n this.containerData = {\n windowSize: { height: 0, width: 0 },\n windowScroll: { x: 0, y: 0 },\n elementWindowOffset: 0,\n elementSize: { height: 0, width: 0 }\n };\n }\n get loadingBatch() {\n return this.loader && this.updateLock;\n }\n get configData() {\n return this.computeConfigData(this.containerData, this.items);\n }\n get layoutData() {\n return this.computeLayoutData(this.configData);\n }\n get renderData() {\n return this.computeRenderData(this.configData, this.containerData, this.layoutData);\n }\n mounted() {\n var _a;\n this.ref = this.$refs.virtualGrid;\n this.initiliazeGrid();\n window.addEventListener(\"resize\", this.resize);\n ((_a = this.scrollElement) != null ? _a : window).addEventListener(\"scroll\", this.scroll);\n }\n beforeDestroy() {\n var _a;\n window.removeEventListener(\"resize\", this.resize);\n ((_a = this.scrollElement) != null ? _a : window).removeEventListener(\"scroll\", this.scroll);\n }\n onScrollElementChanged(scrollElement, oldScrollElement) {\n (oldScrollElement != null ? oldScrollElement : window).removeEventListener(\"scroll\", this.scroll);\n (scrollElement != null ? scrollElement : window).addEventListener(\"scroll\", this.scroll);\n }\n resize() {\n this.loadMoreData();\n }\n scroll() {\n this.loadMoreData();\n }\n initiliazeGrid() {\n this.computeContainerData();\n this.$nextTick(async () => {\n this.loadMoreData();\n });\n }\n loadMoreData() {\n this.loadMoreDataAsync().catch((error) => {\n if (error) {\n console.error(\"Fail to load next data batch\", error);\n }\n }).then();\n }\n async loadMoreDataAsync() {\n this.computeContainerData();\n const windowTop = this.containerData.windowScroll.y;\n const windowBottom = windowTop + this.containerData.windowSize.height;\n const bottomTrigger = Math.max(0, this.containerData.elementWindowOffset + this.containerData.elementSize.height - this.updateTriggerMargin);\n if (!this.bottomReached && windowBottom >= bottomTrigger && !this.updateLock) {\n this.updateLock = true;\n debugLog(this.debug, \"Loading next batch\");\n const isLastBatch = await this.updateFunction();\n if (isLastBatch) {\n debugLog(this.debug, \"Bottom reached\");\n this.bottomReached = true;\n }\n this.updateLock = false;\n await this.loadMoreDataAsync();\n }\n return;\n }\n computeContainerData() {\n if (this.ref === null) {\n return;\n }\n const windowSize = this.getWindowSize();\n const windowScroll = this.getWindowScroll();\n const elementWindowOffset = this.getElementOffset(this.ref);\n const elementSize = this.getElementSize(this.ref);\n this.containerData = { windowSize, windowScroll, elementWindowOffset, elementSize };\n }\n computeConfigData(containerData, items) {\n if (containerData === null || items === null) {\n return {\n windowMargin: 0,\n gridGap: 0,\n columnCount: 1,\n entries: []\n };\n }\n const elementWidth = containerData.elementSize ? containerData.elementSize.width : 0;\n const windowMargin = this.getWindowMargin(containerData.windowSize.height);\n const gridGap = this.getGridGap(elementWidth, containerData.windowSize.height);\n const columnCount = this.getColumnCount(elementWidth);\n const columnWidth = this.getColumnWidth(columnCount, gridGap, elementWidth);\n const entries = items.map((item) => {\n if (!item.width) {\n return item;\n }\n const imageWidth = columnWidth * item.columnSpan + gridGap * (item.columnSpan - 1);\n return __spreadProps(__spreadValues({}, item), {\n height: this.getItemRatioHeight(item.height, item.width, imageWidth),\n width: imageWidth\n });\n });\n return {\n windowMargin,\n gridGap,\n columnCount,\n entries\n };\n }\n computeLayoutData(configData) {\n if (configData === null) {\n return { cells: [], totalHeight: 0 };\n }\n let currentRowNumber = 1;\n let prevRowsTotalHeight = 0;\n let currentRowMaxHeight = 0;\n let columnShift = 0;\n const cells = configData.entries.map((entry, index) => {\n const { columnCount, gridGap } = configData;\n let columnSpanRecompute = entry.columnSpan;\n let heightRecompute = entry.height;\n if (columnSpanRecompute < 1) {\n columnSpanRecompute = columnCount;\n }\n const distanceToRowStart = (index + columnShift) % columnCount;\n if (entry.newRow && distanceToRowStart !== 0) {\n columnShift += columnCount - distanceToRowStart;\n }\n const shiftedIndex = index + columnShift;\n const columnNumber = shiftedIndex % columnCount + 1;\n const rowNumber = Math.floor(shiftedIndex / columnCount) + 1;\n if (columnNumber + columnSpanRecompute > columnCount + 1) {\n const overlapNumber = columnNumber + columnSpanRecompute - columnCount - 1;\n const overlapRatio = overlapNumber / columnSpanRecompute;\n heightRecompute = heightRecompute * (1 - overlapRatio);\n columnSpanRecompute -= overlapNumber;\n }\n if (columnSpanRecompute > 1) {\n columnShift += columnSpanRecompute - 1;\n }\n if (rowNumber !== currentRowNumber) {\n currentRowNumber = rowNumber;\n prevRowsTotalHeight += currentRowMaxHeight + gridGap;\n currentRowMaxHeight = 0;\n }\n const offset = prevRowsTotalHeight;\n const height = Math.round(heightRecompute);\n currentRowMaxHeight = Math.max(currentRowMaxHeight, height);\n return __spreadProps(__spreadValues({}, entry), { columnNumber, rowNumber, offset, height, columnSpan: columnSpanRecompute });\n });\n const totalHeight = prevRowsTotalHeight + currentRowMaxHeight;\n return { cells, totalHeight };\n }\n computeRenderData(configData, containerData, layoutData) {\n if (layoutData === null || configData === null) {\n return { cellsToRender: [], firstRenderedRowNumber: 0, firstRenderedRowOffset: 0 };\n }\n const cellsToRender = [];\n let firstRenderedRowNumber = null;\n let firstRenderedRowOffset = null;\n if (containerData.elementWindowOffset !== null) {\n const elementWindowOffset = containerData.elementWindowOffset;\n for (const cell of layoutData.cells) {\n const cellTop = elementWindowOffset + cell.offset;\n const cellBottom = cellTop + cell.height;\n const windowTop = containerData.windowScroll.y;\n const windowBottom = windowTop + containerData.windowSize.height;\n const renderTop = windowTop - configData.windowMargin;\n const renderBottom = windowBottom + configData.windowMargin;\n if (cellTop > renderBottom) {\n continue;\n }\n if (cellBottom < renderTop) {\n continue;\n }\n if (firstRenderedRowNumber === null) {\n firstRenderedRowNumber = cell.rowNumber;\n }\n if (cell.rowNumber === firstRenderedRowNumber) {\n firstRenderedRowOffset = firstRenderedRowOffset ? Math.min(firstRenderedRowOffset, cell.offset) : cell.offset;\n }\n cellsToRender.push(cell);\n }\n }\n return { cellsToRender, firstRenderedRowNumber, firstRenderedRowOffset };\n }\n getColumnWidth(columnCount, gridGap, elementWidth) {\n if (columnCount === null || gridGap === null || elementWidth === null) {\n return 0;\n }\n const totalGapSpace = (columnCount - 1) * gridGap;\n const columnWidth = Math.round((elementWidth - totalGapSpace) / columnCount);\n return columnWidth;\n }\n getGridRowStart(cell, renderData) {\n if (renderData === null) {\n return void 0;\n }\n const offset = renderData.firstRenderedRowNumber !== null ? renderData.firstRenderedRowNumber - 1 : 0;\n const gridRowStart = cell.rowNumber - offset;\n return `${gridRowStart}`;\n }\n resetGrid() {\n this.bottomReached = false;\n this.loadMoreData();\n }\n isSameElementSize(a, b) {\n return a.width === b.width && a.height === b.height;\n }\n getWindowSize() {\n return {\n width: window.innerWidth,\n height: window.innerHeight\n };\n }\n getElementSize(element) {\n const rect = element.getBoundingClientRect();\n return {\n width: rect.width,\n height: rect.height\n };\n }\n isSameElementScroll(a, b) {\n return a.x === b.x && a.y === b.y;\n }\n getWindowScroll() {\n return {\n x: window.scrollX,\n y: window.scrollY\n };\n }\n getElementOffset(element) {\n return window.scrollY + element.getBoundingClientRect().top;\n }\n};\n__decorateClass([\n Prop({ required: true })\n], VirtualGrid$1.prototype, \"items\", 2);\n__decorateClass([\n Prop({ default: () => () => true })\n], VirtualGrid$1.prototype, \"updateFunction\", 2);\n__decorateClass([\n Prop({ default: () => getGridGapDefault })\n], VirtualGrid$1.prototype, \"getGridGap\", 2);\n__decorateClass([\n Prop({ default: () => getColumnCountDefault })\n], VirtualGrid$1.prototype, \"getColumnCount\", 2);\n__decorateClass([\n Prop({ default: () => getWindowMarginDefault })\n], VirtualGrid$1.prototype, \"getWindowMargin\", 2);\n__decorateClass([\n Prop({ default: () => getItemRatioHeightDefault })\n], VirtualGrid$1.prototype, \"getItemRatioHeight\", 2);\n__decorateClass([\n Prop({ default: null })\n], VirtualGrid$1.prototype, \"scrollElement\", 2);\n__decorateClass([\n Prop({ default: 500 })\n], VirtualGrid$1.prototype, \"updateTriggerMargin\", 2);\n__decorateClass([\n Prop({ default: null })\n], VirtualGrid$1.prototype, \"loader\", 2);\n__decorateClass([\n Prop({ default: false })\n], VirtualGrid$1.prototype, \"debug\", 2);\n__decorateClass([\n ProvideReactive()\n], VirtualGrid$1.prototype, \"updateLock\", 2);\n__decorateClass([\n ProvideReactive()\n], VirtualGrid$1.prototype, \"bottomReached\", 2);\n__decorateClass([\n ProvideReactive()\n], VirtualGrid$1.prototype, \"ref\", 2);\n__decorateClass([\n ProvideReactive()\n], VirtualGrid$1.prototype, \"containerData\", 2);\n__decorateClass([\n Watch(\"scrollElement\")\n], VirtualGrid$1.prototype, \"onScrollElementChanged\", 1);\nVirtualGrid$1 = __decorateClass([\n Component({\n name: \"VirtualGrid\"\n })\n], VirtualGrid$1);\nvar render = function() {\n var _vm = this;\n var _h = _vm.$createElement;\n var _c = _vm._self._c || _h;\n return _c(\"div\", { ref: \"virtualGrid\", style: {\n boxSizing: \"border-box\",\n height: _vm.layoutData.totalHeight + \"px\",\n paddingTop: _vm.renderData !== null && _vm.renderData.firstRenderedRowOffset !== null ? _vm.renderData.firstRenderedRowOffset + \"px\" : \"0px\"\n } }, [_c(\"div\", { staticClass: \"grid\", style: {\n \"display\": \"-ms-grid\",\n \"display\": \"grid\",\n \"align-items\": \"center\",\n \"grid-template-columns\": \"repeat(\" + _vm.configData.columnCount + \", 1fr)\",\n \"gap\": _vm.configData.gridGap + \"px\"\n } }, _vm._l(_vm.renderData.cellsToRender, function(item) {\n return _c(\"div\", { key: item.id, staticClass: \"grid-item-wrapper\", style: {\n \"height\": item.height + \"px\",\n \"grid-column-start\": item.columnNumber,\n \"grid-column-end\": item.columnNumber + item.columnSpan,\n \"grid-row-start\": _vm.getGridRowStart(item, _vm.renderData)\n } }, [_c(item.renderComponent, _vm._g({ tag: \"component\", attrs: { \"item\": item } }, _vm.$listeners))], 1);\n }), 0), _c(_vm.loadingBatch && _vm.loader, { tag: \"component\" })], 1);\n};\nvar staticRenderFns = [];\nfunction normalizeComponent(scriptExports, render2, staticRenderFns2, functionalTemplate, injectStyles, scopeId, moduleIdentifier, shadowMode) {\n var options = typeof scriptExports === \"function\" ? scriptExports.options : scriptExports;\n if (render2) {\n options.render = render2;\n options.staticRenderFns = staticRenderFns2;\n options._compiled = true;\n }\n if (functionalTemplate) {\n options.functional = true;\n }\n if (scopeId) {\n options._scopeId = \"data-v-\" + scopeId;\n }\n var hook;\n if (moduleIdentifier) {\n hook = function(context) {\n context = context || this.$vnode && this.$vnode.ssrContext || this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext;\n if (!context && typeof __VUE_SSR_CONTEXT__ !== \"undefined\") {\n context = __VUE_SSR_CONTEXT__;\n }\n if (injectStyles) {\n injectStyles.call(this, context);\n }\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier);\n }\n };\n options._ssrRegister = hook;\n } else if (injectStyles) {\n hook = shadowMode ? function() {\n injectStyles.call(this, (options.functional ? this.parent : this).$root.$options.shadowRoot);\n } : injectStyles;\n }\n if (hook) {\n if (options.functional) {\n options._injectStyles = hook;\n var originalRender = options.render;\n options.render = function renderWithStyleInjection(h, context) {\n hook.call(context);\n return originalRender(h, context);\n };\n } else {\n var existing = options.beforeCreate;\n options.beforeCreate = existing ? [].concat(existing, hook) : [hook];\n }\n }\n return {\n exports: scriptExports,\n options\n };\n}\nconst __cssModules = {};\nvar __component__ = /* @__PURE__ */ normalizeComponent(VirtualGrid$1, render, staticRenderFns, false, __vue2_injectStyles, null, null, null);\nfunction __vue2_injectStyles(context) {\n for (let o in __cssModules) {\n this[o] = __cssModules[o];\n }\n}\nvar VirtualGrid = /* @__PURE__ */ function() {\n return __component__.exports;\n}();\nexport { VirtualGrid as default };\n","<!--\n - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<a\n\t\t:class=\"{\n\t\t\t'file--cropped': croppedLayout,\n\t\t}\"\n\t\tclass=\"file\"\n\t\t:href=\"item.injected.source\"\n\t\t:aria-label=\"ariaLabel\"\n\t\t@click.prevent=\"openViewer\">\n\t\t<div v-if=\"item.injected.mime.includes('video') && item.injected.hasPreview\" class=\"icon-video-white\" />\n\t\t<!-- image and loading placeholder -->\n\t\t<transition-group name=\"fade\" class=\"transition-group\">\n\t\t\t<img\n\t\t\t\tv-if=\"!error\"\n\t\t\t\tref=\"img\"\n\t\t\t\t:key=\"`${item.injected.basename}-img`\"\n\t\t\t\t:src=\"src\"\n\t\t\t\t:alt=\"item.injected.basename\"\n\t\t\t\t:aria-describedby=\"ariaUuid\"\n\t\t\t\t@load=\"onLoad\"\n\t\t\t\t@error=\"onError\">\n\n\t\t\t<svg\n\t\t\t\tv-if=\"!loaded || error\"\n\t\t\t\t:key=\"`${item.injected.basename}-svg`\"\n\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\tviewBox=\"0 0 32 32\"\n\t\t\t\tfill=\"url(#placeholder__gradient)\">\n\t\t\t\t<use v-if=\"isImage\" href=\"#placeholder--img\" />\n\t\t\t\t<use v-else href=\"#placeholder--video\" />\n\t\t\t</svg>\n\t\t</transition-group>\n\n\t\t<!-- image name and cover -->\n\t\t<p :id=\"ariaUuid\" class=\"hidden-visually\">{{ item.injected.basename }}</p>\n\t\t<div class=\"cover\" role=\"none\" />\n\t</a>\n</template>\n\n<script lang='ts'>\nimport type { PropType } from 'vue'\nimport type { InjectedItem } from './FolderComponent.vue'\n\nimport { t } from '@nextcloud/l10n'\nimport { generateUrl } from '@nextcloud/router'\nimport { legacyToViewerFileInfo } from '../utils/fileUtils.ts'\n\nexport default {\n\tname: 'FileLegacy',\n\tinheritAttrs: false,\n\tprops: {\n\t\titem: {\n\t\t\ttype: Object as PropType<InjectedItem>,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloaded: false,\n\t\t\terror: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tariaUuid() {\n\t\t\treturn `image-${this.item.injected.fileid}`\n\t\t},\n\n\t\tariaLabel() {\n\t\t\treturn t('photos', 'Open the full size \"{name}\" image', { name: this.item.injected.basename })\n\t\t},\n\n\t\tisImage() {\n\t\t\treturn this.item.injected.mime.startsWith('image')\n\t\t},\n\n\t\tdecodedEtag() {\n\t\t\treturn this.item.injected.etag.replace('"', '').replace('"', '')\n\t\t},\n\n\t\tsrc() {\n\t\t\treturn generateUrl(`/core/preview?fileId=${this.item.injected.fileid}&c=${this.decodedEtag}&x=${250}&y=${250}&forceIcon=0&a=${this.croppedLayout ? '0' : '1'}`)\n\t\t},\n\n\t\tcroppedLayout() {\n\t\t\treturn this.$store.state.userConfig.croppedLayout\n\t\t},\n\t},\n\n\tbeforeDestroy() {\n\t\t// cancel any pending load\n\t\tthis.$refs.src = ''\n\t},\n\n\tmethods: {\n\t\topenViewer() {\n\t\t\twindow.OCA.Viewer.open({\n\t\t\t\tfileInfo: legacyToViewerFileInfo(this.item.injected),\n\t\t\t\tlist: this.item.injected.list.map((file) => legacyToViewerFileInfo(file)),\n\t\t\t})\n\t\t},\n\n\t\t/** When the image is fully loaded by browser we remove the placeholder */\n\t\tonLoad() {\n\t\t\tthis.loaded = true\n\t\t},\n\n\t\tonError() {\n\t\t\tthis.error = true\n\t\t},\n\n\t\tt,\n\t},\n\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@use '../mixins/FileFolder';\n\n.transition-group {\n\tdisplay: contents;\n}\n\n.icon-video-white {\n\tposition: absolute;\n\ttop: 10px;\n\tinset-inline-end: 10px;\n\tz-index: 20;\n}\n\nimg {\n\tposition: absolute;\n\twidth: 100%;\n\theight: 100%;\n\tz-index: 10;\n\n\tcolor: transparent; // should be diplayed on error\n\n\tobject-fit: contain;\n\n\t.file--cropped & {\n\t\tobject-fit: cover;\n\t}\n}\n\nsvg {\n\tposition: absolute;\n\twidth: 70%;\n\theight: 70%;\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<RouterLink\n\t\tclass=\"folder\"\n\t\t:to=\"toLink\"\n\t\t:aria-label=\"ariaLabel\">\n\t\t<img\n\t\t\tv-if=\"previewUrl\"\n\t\t\tclass=\"folder__image\"\n\t\t\t:src=\"previewUrl\"\n\t\t\talt=\"\"\n\t\t\t@error=\"onPreviewFail(file)\">\n\n\t\t<span v-else class=\"folder__image folder__image--placeholder\">\n\t\t\t<FolderOutline\n\t\t\t\tclass=\"folder__icon\"\n\t\t\t\t:size=\"96\"\n\t\t\t\tfill-color=\"var(--color-primary-element)\" />\n\t\t</span>\n\n\t\t<span class=\"folder__details\">\n\t\t\t<FolderOutline />\n\t\t\t<span class=\"folder__title\">{{ name }}</span>\n\t\t</span>\n\t</RouterLink>\n</template>\n\n<script lang='ts'>\nimport type { PropType } from 'vue'\nimport type { Route } from 'vue-router'\nimport type { FoldersNode } from '../services/FolderContent.ts'\n\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { t } from '@nextcloud/l10n'\nimport { generateUrl } from '@nextcloud/router'\nimport { RouterLink } from 'vue-router'\nimport FolderOutline from 'vue-material-design-icons/FolderOutline.vue'\n\nexport default {\n\tname: 'FolderTagPreview',\n\n\tcomponents: {\n\t\tFolderOutline,\n\t\tRouterLink,\n\t},\n\n\tprops: {\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\tpath: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\tfileList: {\n\t\t\ttype: Array as PropType<FoldersNode[]>,\n\t\t\tdefault: () => [],\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tfailed: [] as number[],\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t// folder is empty\n\t\tisEmpty() {\n\t\t\treturn this.previewList.length === 0\n\t\t},\n\n\t\tariaLabel() {\n\t\t\treturn t('photos', 'Open the \"{name}\" folder', { name: this.name })\n\t\t},\n\n\t\t/**\n\t\t * Previews list without the failed ones\n\t\t */\n\t\tpreviewList(): FoldersNode[] {\n\t\t\treturn this.fileList\n\t\t\t\t.filter((file) => this.failed.indexOf(file.fileid) === -1)\n\t\t},\n\n\t\tpreviewUrl() {\n\t\t\tif (this.previewList.length === 0) {\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t\t// TODO: Check that etag is not null\n\t\t\tconst { fileid, etag } = this.previewList.at(-1) as FoldersNode\n\t\t\t// use etag to force cache reload if file changed\n\t\t\treturn generateUrl(`/core/preview?fileId=${fileid}&c=${etag}&x=${250}&y=${250}&forceIcon=0&a=0`)\n\t\t},\n\n\t\t/**\n\t\t * We do not want encoded slashes when browsing by folder\n\t\t * so we generate a new valid route object based on the\n\t\t * current named route, get the final url back, decode it\n\t\t * and use it as a direct string.\n\t\t * Which vue-router does not encode afterwards!\n\t\t */\n\t\ttoLink(): Route {\n\t\t\t// Remove leading /file/{userId}\n\t\t\tconst prefix = `/files/${getCurrentUser()?.uid}`\n\t\t\tlet path = this.path.replace(new RegExp(`^${prefix}`), '')\n\n\t\t\t// always remove first slash, the router\n\t\t\t// manage it automatically\n\t\t\tconst regex = /^\\/?(.+)/i\n\t\t\tpath = (regex.exec(path) as string[])[1]\n\n\t\t\t// apply to current route\n\t\t\treturn { ...this.$route, params: { path: path.split('/') } }\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonPreviewFail({ fileid }) {\n\t\t\tthis.failed.push(fileid)\n\t\t},\n\n\t\tt,\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.folder {\n\tdisplay: flex;\n\tflex-direction: column;\n\tpadding: 16px;\n\tborder-radius: var(--border-radius-large);\n\n\t&:hover,\n\t&:focus {\n\t\tbackground-color: var(--color-background-dark);\n\t}\n\n\t&__image {\n\t\twidth: 200px;\n\t\theight: 200px;\n\t\tobject-fit: cover;\n\t\tborder-radius: var(--border-radius-large);\n\n\t\t&--placeholder {\n\t\t\tbackground-color: var(--color-primary-element-light);\n\t\t}\n\t}\n\n\t&__icon {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t}\n\n\t&__details {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 12px;\n\t\tmargin-top: 16px;\n\t\twidth: 200px;\n\t}\n\n\t&__title {\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\tfont-size: 20px;\n\t\tmargin-bottom: 2px;\n\t\tline-height: 30px;\n\t\tcolor: var(--color-main-text);\n\t}\n}\n</style>\n","/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport axios, { type AxiosRequestConfig } from '@nextcloud/axios'\nimport { defaultRemoteURL, defaultRootPath } from '@nextcloud/files/dav'\nimport { generateUrl } from '@nextcloud/router'\nimport allowedMimes from './AllowedMimes.js'\n\nexport type FoldersNode = {\n\tbasename: string\n\tetag: string\n\tfileid: number\n\tfilename: string\n\tsource: string\n\tlastmod: number\n\tmime: string\n\tsize: number\n\ttype: string\n\tpermissions: string\n\thasPreview: boolean\n}\n\n/**\n * List files from a folder and filter out unwanted mimes\n *\n * @param path\n * @param options\n */\nexport default async function(path: string = '/', options: AxiosRequestConfig & { shared?: boolean } = {}) {\n\tconst endpoint = generateUrl(`/apps/photos/api/v1/${options.shared ? 'shared' : 'albums'}`)\n\n\t// fetch listing\n\tconst response = await axios.get(endpoint + path, options)\n\tconst list: FoldersNode[] = response.data\n\t\t.map((data) => ({\n\t\t\t...data,\n\t\t\tfilename: `${defaultRootPath}${data.filename}`,\n\t\t\tsource: decodeURI(defaultRemoteURL + `${defaultRootPath}${data.filename}`),\n\t\t}))\n\n\t// filter all the files and folders\n\tlet folder: FoldersNode | undefined\n\tconst folders: FoldersNode[] = []\n\tconst files: FoldersNode[] = []\n\n\tfor (const entry of list) {\n\t\t// is this the current provided path ?\n\t\tif (entry.filename === `${defaultRootPath}${path}`) {\n\t\t\tfolder = entry\n\t\t} else if (entry.type !== 'file') {\n\t\t\tfolders.push(entry)\n\t\t} else if (allowedMimes.indexOf(entry.mime) > -1) {\n\t\t\tfiles.push(entry)\n\t\t}\n\t}\n\n\t// return current folder, subfolders and files\n\treturn { folder, folders, files }\n}\n","<!--\n - SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<FolderTagPreview\n\t\t:id=\"item.injected.fileid\"\n\t\t:name=\"item.injected.basename.toString()\"\n\t\t:path=\"item.injected.filename\"\n\t\t:file-list=\"previewFiles\" />\n</template>\n\n<script lang='ts'>\nimport type Vue from 'vue'\n\nimport { getCurrentUser } from '@nextcloud/auth'\nimport {\n\ttype PropType,\n\n\tdefineComponent,\n} from 'vue'\nimport FolderTagPreview from './FolderTagPreview.vue'\nimport AbortControllerMixin from '../mixins/AbortControllerMixin.ts'\nimport getFolderContent, { type FoldersNode } from '../services/FolderContent.ts'\nimport logger from '../services/logger.ts'\n\nexport type InjectedItem = {\n\tid: string\n\tinjected: FoldersNode & {\n\t\tshowShared: true\n\t\tlist: FoldersNode[]\n\t}\n\twidth: number\n\theight: number\n\tcolumnSpan: number\n\trenderComponent: Vue\n}\n\nexport default defineComponent({\n\tname: 'FolderComponent',\n\n\tcomponents: {\n\t\tFolderTagPreview,\n\t},\n\n\tmixins: [AbortControllerMixin],\n\n\tinheritAttrs: false,\n\n\tprops: {\n\t\titem: {\n\t\t\ttype: Object as PropType<InjectedItem>,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tpreviewFolder: this.item.injected.fileid,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tfiles() {\n\t\t\treturn this.$store.state.folders.files\n\t\t},\n\n\t\tsubFolders() {\n\t\t\treturn this.$store.state.folders.subFolders\n\t\t},\n\n\t\tfolders() {\n\t\t\treturn this.$store.state.folders.folders\n\t\t},\n\n\t\t// files list of the current folder\n\t\tfolderContent() {\n\t\t\treturn this.folders[this.item.injected.fileid]\n\t\t},\n\n\t\tpreviewFiles() {\n\t\t\tconst previewFolderContent = this.folders[this.previewFolder]\n\n\t\t\tconst previewFiles = previewFolderContent\n\t\t\t\t? previewFolderContent\n\t\t\t\t\t\t.map((id) => this.files[id])\n\t\t\t\t\t\t.slice(0, 4) // only get the 4 first images\n\t\t\t\t: []\n\n\t\t\t// If we didn't found any previews in the folder we try the next subfolder\n\t\t\t// We limit to one subfolder for performance concerns\n\t\t\tif (previewFiles.length === 0\n\t\t\t\t&& this.subFolders[this.previewFolder]\n\t\t\t\t&& this.previewFolder === this.item.injected.fileid) {\n\t\t\t\tconst firstChildFolder = this.subFolders[this.previewFolder][0]\n\t\t\t\tthis.updatePreviewFolder(firstChildFolder)\n\n\t\t\t\tif (!this.folders[this.previewFolder]) {\n\t\t\t\t\tthis.getFolderData(this.files[this.previewFolder].filename)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn previewFiles\n\t\t},\n\t},\n\n\tasync created() {\n\t\tif (!this.folderContent) {\n\t\t\tawait this.getFolderData(this.item.injected.filename)\n\t\t}\n\t},\n\n\tmethods: {\n\t\tasync getFolderData(filename) {\n\t\t\ttry {\n\t\t\t\t// Remove leading /file/{userId}\n\t\t\t\tconst prefix = `/files/${getCurrentUser()?.uid}`\n\t\t\t\tconst unPrefixedFileName = filename.replace(new RegExp(`^${prefix}`), '')\n\n\t\t\t\t// get data\n\t\t\t\tconst { folder, folders, files } = await getFolderContent(unPrefixedFileName, {\n\t\t\t\t\tshared: this.item.injected.showShared,\n\t\t\t\t\tsignal: this.abortController.signal,\n\t\t\t\t})\n\t\t\t\tthis.$store.dispatch('updateFolders', { fileid: folder?.fileid, files, folders })\n\t\t\t\tthis.$store.dispatch('updateFoldersFiles', { folder, files, folders })\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('Failed to get folder content', { error, filename })\n\t\t\t}\n\t\t},\n\n\t\tupdatePreviewFolder(path) {\n\t\t\tthis.previewFolder = path\n\t\t},\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n@use '../mixins/FileFolder';\n\n.folder-content {\n\tposition: absolute;\n\tdisplay: grid;\n\twidth: 100%;\n\theight: 100%;\n\t// folder layout if less than 4 pictures\n\t&--grid-1 {\n\t\tgrid-template-columns: 1fr;\n\t\tgrid-template-rows: 1fr;\n\t}\n\t&--grid-2 {\n\t\tgrid-template-columns: 1fr;\n\t\tgrid-template-rows: 1fr 1fr;\n\t}\n\t&--grid-3 {\n\t\tgrid-template-columns: 1fr 1fr;\n\t\tgrid-template-rows: 1fr 1fr;\n\t\timg:first-child {\n\t\t\tgrid-column: span 2;\n\t\t}\n\t}\n\t&--grid-4 {\n\t\tgrid-template-columns: 1fr 1fr;\n\t\tgrid-template-rows: 1fr 1fr;\n\t}\n\timg {\n\t\twidth: 100%;\n\t\theight: 100%;\n\n\t\tobject-fit: cover;\n\t}\n}\n\n$name-height: 1rem;\n\n.folder-name {\n\tposition: absolute;\n\tz-index: 3;\n\tdisplay: flex;\n\toverflow: hidden;\n\tflex-direction: column;\n\twidth: 100%;\n\theight: 100%;\n\ttransition: opacity var(--animation-quick) ease-in-out;\n\topacity: 1;\n\t&__icon {\n\t\theight: 40%;\n\t\tmargin-top: calc(30% - #{$name-height} / 2); // center name+icon\n\t\tbackground-size: 40%;\n\t}\n\t&__name {\n\t\toverflow: hidden;\n\t\theight: $name-height;\n\t\tpadding: 0 10px;\n\t\ttext-align: center;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\tcolor: var(--color-main-background);\n\t\ttext-shadow: 0 0 8px var(--color-main-text);\n\t\tfont-size: $name-height;\n\t\tline-height: $name-height;\n\t}\n}\n\n// Cover management empty/full\n.folder {\n\t// if no img, let's display the folder icon as default black\n\t&--clear {\n\t\t.folder-name__icon {\n\t\t\topacity: .3;\n\t\t}\n\t\t.folder-name__name {\n\t\t\tcolor: var(--color-main-text);\n\t\t\ttext-shadow: 0 0 8px var(--color-main-background);\n\t\t}\n\t}\n\n\t// show the cover as background\n\t// if there are pictures in it\n\t// so we can sho the folder+name above it\n\t&:not(.folder--clear) {\n\t\t.cover {\n\t\t\topacity: .3;\n\t\t}\n\n\t\t// hide everything but pictures\n\t\t// on hover/active/focus\n\t\t&.active,\n\t\t&:active,\n\t\t&:hover,\n\t\t&:focus {\n\t\t\t.folder-name,\n\t\t\t.cover {\n\t\t\t\topacity: 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\n</style>\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\n/**\n * Define the max width proportions\n * The number (key) indicate the MAX size\n *\n * needs to be compatible with webpack config\n * so no export default {}\n */\nexport default {\n\t400: {\n\t\tmarginTop: 66,\n\t\tmarginW: 8,\n\t\tcount: 3,\n\t\tfolderCount: 1,\n\t},\n\t700: {\n\t\tmarginTop: 66,\n\t\tmarginW: 8,\n\t\tcount: 4,\n\t\tfolderCount: 1,\n\t},\n\t1024: {\n\t\tmarginTop: 66,\n\t\tmarginW: 44,\n\t\tcount: 5,\n\t\tfolderCount: 2,\n\t},\n\t1280: {\n\t\tmarginTop: 66,\n\t\tmarginW: 44,\n\t\tcount: 4,\n\t\tfolderCount: 2,\n\t},\n\t1440: {\n\t\tmarginTop: 88,\n\t\tmarginW: 66,\n\t\tcount: 5,\n\t\tfolderCount: 3,\n\t},\n\t1600: {\n\t\tmarginTop: 88,\n\t\tmarginW: 66,\n\t\tcount: 6,\n\t\tfolderCount: 4,\n\t},\n\t2048: {\n\t\tmarginTop: 88,\n\t\tmarginW: 66,\n\t\tcount: 7,\n\t\tfolderCount: 4,\n\t},\n\t2560: {\n\t\tmarginTop: 88,\n\t\tmarginW: 88,\n\t\tcount: 8,\n\t\tfolderCount: 6,\n\t},\n\t3440: {\n\t\tmarginTop: 88,\n\t\tmarginW: 88,\n\t\tcount: 9,\n\t\tfolderCount: 8,\n\t},\n\tmax: {\n\t\tmarginTop: 88,\n\t\tmarginW: 88,\n\t\tcount: 10,\n\t\tfolderCount: 10,\n\t},\n}\n","/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport Vue from 'vue'\nimport sizes from '../assets/grid-sizes.js'\n\nexport default new Vue({\n\tdata() {\n\t\treturn {\n\t\t\tgridConfig: sizes.max,\n\t\t}\n\t},\n\twatch: {\n\t\tgridConfig(val) {\n\t\t\tthis.$emit('changed', val)\n\t\t},\n\t},\n\tcreated() {\n\t\twindow.addEventListener('resize', this.handleWindowResize)\n\t\tthis.handleWindowResize()\n\t},\n\tbeforeDestroy() {\n\t\twindow.removeEventListener('resize', this.handleWindowResize)\n\t},\n\tmethods: {\n\t\thandleWindowResize() {\n\t\t\t// find the first grid size that fit the current window width\n\t\t\tconst currentSize = Object.keys(sizes).map((size) => Number.parseInt(size)).find((size) => size > document.documentElement.clientWidth)\n\t\t\tthis.gridConfig = sizes[currentSize as number] || sizes.max\n\t\t},\n\t},\n})\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { defineComponent } from 'vue'\nimport getGridConfig from '../services/GridConfig.js'\nimport logger from '../services/logger.js'\n\n/**\n * Get the current used grid config\n */\nexport default defineComponent({\n\tdata() {\n\t\treturn {\n\t\t\tgridConfig: {} as typeof getGridConfig.gridConfig,\n\t\t}\n\t},\n\n\tcreated() {\n\t\tgetGridConfig.$on('changed', this.handleGridConfigChange)\n\t\tlogger.debug('Grid config', { gridConfig: getGridConfig.gridConfig })\n\t\tthis.gridConfig = getGridConfig.gridConfig\n\t},\n\n\tbeforeDestroy() {\n\t\tgetGridConfig.$off('changed', this.handleGridConfigChange)\n\t},\n\n\tmethods: {\n\t\thandleGridConfigChange(val: typeof getGridConfig.gridConfig) {\n\t\t\tthis.gridConfig = val\n\t\t},\n\t},\n})\n","<!--\n - SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<!-- Errors handlers-->\n\t<NcEmptyContent v-if=\"error === 404\" :name=\"t('photos', 'This folder does not exist')\">\n\t\t<template #icon>\n\t\t\t<FolderOutline />\n\t\t</template>\n\t</NcEmptyContent>\n\t<NcEmptyContent v-else-if=\"error\" :name=\"t('photos', 'An error occurred')\" />\n\t<NcEmptyContent v-else-if=\"initializing\" :name=\"t('photos', 'Loading folders …')\">\n\t\t<template #icon>\n\t\t\t<NcLoadingIcon />\n\t\t</template>\n\t</NcEmptyContent>\n\n\t<!-- Folder content -->\n\t<div v-else-if=\"!initializing\">\n\t\t<HeaderNavigation\n\t\t\tkey=\"navigation\"\n\t\t\t:class=\"{ 'photos-navigation--uploading': uploader.queue?.length > 0 }\"\n\t\t\t:loading=\"loading\"\n\t\t\t:path=\"path\"\n\t\t\t:title=\"folder?.basename?.toString?.() || rootTitle\"\n\t\t\t:root-title=\"rootTitle\"\n\t\t\t@refresh=\"onRefresh\">\n\t\t\t<UploadPicker\n\t\t\t\t:accept=\"allowedMimes\"\n\t\t\t\t:destination=\"folderAsFolder\"\n\t\t\t\t:multiple=\"true\"\n\t\t\t\t@uploaded=\"onUpload\" />\n\t\t</HeaderNavigation>\n\n\t\t<!-- Empty folder, should only happen via direct link -->\n\t\t<NcEmptyContent v-if=\"isEmpty\" key=\"emptycontent\" :name=\"t('photos', 'No photos in here')\">\n\t\t\t<template #icon>\n\t\t\t\t<FolderOutline />\n\t\t\t</template>\n\t\t</NcEmptyContent>\n\n\t\t<div\n\t\t\tv-else\n\t\t\tclass=\"grid-container\"\n\t\t\t:class=\"{\n\t\t\t\t'grid-container--folders': haveFolders,\n\t\t\t}\">\n\t\t\t<VirtualGrid\n\t\t\t\tref=\"virtualgrid\"\n\t\t\t\t:items=\"contentList\"\n\t\t\t\t:scroll-element=\"appContent\"\n\t\t\t\t:get-column-count=\"() => haveFolders ? gridConfig.folderCount : gridConfig.count\"\n\t\t\t\t:get-grid-gap=\"() => haveFolders ? 16 : 8\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script lang='ts'>\nimport type { Upload } from '@nextcloud/upload'\n\nimport { Folder } from '@nextcloud/files'\nimport { defaultRootPath, parsePermissions } from '@nextcloud/files/dav'\nimport { t } from '@nextcloud/l10n'\nimport { getUploader, UploadPicker } from '@nextcloud/upload'\nimport VirtualGrid from 'vue-virtual-grid'\nimport NcEmptyContent from '@nextcloud/vue/components/NcEmptyContent'\nimport NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon'\nimport FolderOutline from 'vue-material-design-icons/FolderOutline.vue'\nimport FileLegacy from '../components/FileLegacy.vue'\nimport FolderComponent from '../components/FolderComponent.vue'\nimport HeaderNavigation from '../components/HeaderNavigation.vue'\nimport AbortControllerMixin from '../mixins/AbortControllerMixin.js'\nimport GridConfigMixin from '../mixins/GridConfig.js'\nimport allowedMimes from '../services/AllowedMimes.js'\nimport { fetchFile } from '../services/fileFetcher.ts'\nimport getFolderContent, { type FoldersNode } from '../services/FolderContent.ts'\nimport logger from '../services/logger.ts'\n\nexport default {\n\tname: 'FoldersView',\n\tcomponents: {\n\t\tFolderOutline,\n\t\tHeaderNavigation,\n\t\tNcEmptyContent,\n\t\tNcLoadingIcon,\n\t\tUploadPicker,\n\t\tVirtualGrid,\n\t},\n\n\tmixins: [\n\t\tAbortControllerMixin,\n\t\tGridConfigMixin,\n\t],\n\n\tprops: {\n\t\trootTitle: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\tpath: {\n\t\t\ttype: String,\n\t\t\tdefault: '/',\n\t\t},\n\n\t\tshowShared: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\terror: null as null | 404 | Error,\n\t\t\tallowedMimes,\n\n\t\t\tinitializing: true,\n\t\t\tloading: false,\n\n\t\t\tappContent: document.getElementById('app-content-vue'),\n\n\t\t\tuploader: getUploader(),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tfiles() {\n\t\t\treturn this.$store.state.folders.files\n\t\t},\n\n\t\tfolders() {\n\t\t\treturn this.$store.state.folders.folders\n\t\t},\n\n\t\t// current folder id from current path\n\t\tfolderId() {\n\t\t\treturn this.$store.state.folders.paths[this.path]\n\t\t},\n\n\t\t// files list of the current folder\n\t\tfolder() {\n\t\t\treturn this.files[this.folderId] as unknown as FoldersNode\n\t\t},\n\n\t\tfolderAsFolder() {\n\t\t\tif (!this.folder) {\n\t\t\t\treturn undefined\n\t\t\t}\n\n\t\t\treturn new Folder({\n\t\t\t\t...this.folder,\n\t\t\t\tpermissions: parsePermissions(this.folder.permissions),\n\t\t\t\towner: null,\n\t\t\t})\n\t\t},\n\n\t\tfolderContent() {\n\t\t\treturn this.folders[this.folderId] || []\n\t\t},\n\n\t\tfileList() {\n\t\t\tconst list = this.folderContent\n\t\t\t\t&& this.folderContent\n\t\t\t\t\t.map((id) => this.files[id])\n\t\t\t\t\t.filter((file) => !!file)\n\t\t\treturn list\n\t\t},\n\n\t\t// subfolders of the current folder\n\t\tsubFolders() {\n\t\t\treturn this.folderId\n\t\t\t\t&& this.files[this.folderId]\n\t\t\t\t&& this.$store.state.folders.subFolders[this.folderId]\n\t\t},\n\n\t\tfolderList() {\n\t\t\tconst list = this.subFolders\n\t\t\t\t&& this.subFolders\n\t\t\t\t\t.map((id) => this.files[id])\n\t\t\t\t\t.filter((file) => !!file)\n\t\t\treturn list\n\t\t},\n\n\t\tcontentList() {\n\t\t\tconst folders = this.folderList && this.folderList.map((folder) => {\n\t\t\t\treturn {\n\t\t\t\t\tid: `folder-${folder.fileid}`,\n\t\t\t\t\tinjected: {\n\t\t\t\t\t\t...folder,\n\t\t\t\t\t\tshowShared: this.showShared,\n\t\t\t\t\t},\n\t\t\t\t\twidth: 232,\n\t\t\t\t\theight: 280,\n\t\t\t\t\tcolumnSpan: 1,\n\t\t\t\t\trenderComponent: FolderComponent,\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tconst files = this.fileList?.map((file) => {\n\t\t\t\treturn {\n\t\t\t\t\tid: `file-${file.fileid}`,\n\t\t\t\t\tinjected: {\n\t\t\t\t\t\t...file,\n\t\t\t\t\t\tlist: this.fileList,\n\t\t\t\t\t},\n\t\t\t\t\twidth: 256,\n\t\t\t\t\theight: 256,\n\t\t\t\t\tcolumnSpan: 1,\n\t\t\t\t\trenderComponent: FileLegacy,\n\t\t\t\t}\n\t\t\t})\n\n\t\t\treturn [...(folders || []), ...(files || [])]\n\t\t},\n\n\t\t// is current folder empty?\n\t\tisEmpty() {\n\t\t\treturn !this.haveFiles && !this.haveFolders\n\t\t},\n\n\t\thaveFiles() {\n\t\t\treturn !!this.fileList && this.fileList.length !== 0\n\t\t},\n\n\t\thaveFolders() {\n\t\t\treturn !!this.folderList && this.folderList.length !== 0\n\t\t},\n\t},\n\n\twatch: {\n\t\tpath() {\n\t\t\tthis.fetchFolderContent()\n\t\t},\n\n\t\tshowShared() {\n\t\t\tthis.fetchFolderContent()\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\tthis.fetchFolderContent()\n\t},\n\n\tmethods: {\n\t\tonRefresh() {\n\t\t\tthis.fetchFolderContent()\n\t\t},\n\n\t\tasync fetchFolderContent() {\n\t\t\tthis.error = null\n\t\t\tthis.loading = true\n\n\t\t\t// close any potential opened viewer & sidebar\n\t\t\twindow.OCA?.Viewer?.close?.()\n\t\t\twindow.OCA?.Files?.Sidebar?.close?.()\n\n\t\t\t// if we don't already have some cached data let's show a loader\n\t\t\tif (!this.files[this.folderId] || !this.folders[this.folderId]) {\n\t\t\t\tthis.initializing = true\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\t// get content and current folder info\n\t\t\t\tconst { folder, folders, files } = await getFolderContent(this.path, {\n\t\t\t\t\tshared: this.showShared,\n\t\t\t\t\tsignal: this.abortController.signal,\n\t\t\t\t})\n\t\t\t\tthis.$store.dispatch('addPath', { path: this.path, fileid: folder?.fileid })\n\t\t\t\tthis.$store.dispatch('updateFolders', { fileid: folder?.fileid, files, folders })\n\t\t\t\tthis.$store.dispatch('updateFoldersFiles', { folder, files, folders })\n\t\t\t} catch (error) {\n\t\t\t\tif (error?.response && error.response.status) {\n\t\t\t\t\tif (error.response.status === 404) {\n\t\t\t\t\t\tthis.error = 404\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tthis.$router.push({ name: this.$route.name ?? undefined })\n\t\t\t\t\t\t}, 3000)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.error = error\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// cancelled request, moving on...\n\t\t\t\tlogger.error('Error fetching album data', { error })\n\t\t\t} finally {\n\t\t\t\t// done loading even with errors\n\t\t\t\tthis.loading = false\n\t\t\t\tthis.initializing = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Fetch file Info and add them into the store\n\t\t *\n\t\t * @param upload\n\t\t */\n\t\tasync onUpload(upload: Upload) {\n\t\t\tconst relPath = upload.source.split(defaultRootPath).pop()\n\t\t\tconst node = await fetchFile(defaultRootPath + relPath)\n\t\t\tif (node === null) {\n\t\t\t\tlogger.error('Failed to fetch file', { relPath })\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst file: FoldersNode = {\n\t\t\t\tfileid: node.fileid as number,\n\t\t\t\tbasename: node.basename,\n\t\t\t\tetag: node.attributes.etag,\n\t\t\t\tfilename: node.root + node.path,\n\t\t\t\tsource: node.source,\n\t\t\t\tlastmod: node.mtime?.getTime() as number,\n\t\t\t\tmime: node.mime as string,\n\t\t\t\tsize: node.size as number,\n\t\t\t\ttype: 'file',\n\t\t\t\tpermissions: '', // HACK: we don't need it but the format is not the expected one\n\t\t\t\thasPreview: node.attributes.hasPreview,\n\t\t\t}\n\n\t\t\tthis.$store.dispatch('appendFoldersFiles', [file])\n\t\t\tthis.$store.dispatch('addFilesToFolder', { fileid: this.folderId, files: [file] })\n\t\t},\n\n\t\tt,\n\t},\n\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@use 'sass:map';\n\n@mixin grid-sizes() {\n\t$previous: 0;\n\n\t@each $size, $config in $sizes {\n\t\t$count: map.get($config, 'count');\n\t\t$marginTop: map.get($config, 'marginTop');\n\t\t$marginW: map.get($config, 'marginW');\n\n\t\t@if $size == 'max' {\n\t\t\t@media (min-width: #{$previous}px) {\n\t\t\t\t@content($marginTop, $marginW);\n\t\t\t}\n\t\t}\n\n\t\t@else {\n\t\t\t@media (min-width: #{$previous}px) and (max-width: #{$size}px) {\n\t\t\t\t@content($marginTop, $marginW);\n\t\t\t}\n\t\t}\n\n\t\t$previous: $size;\n\t}\n}\n\n.grid-container {\n\t@include grid-sizes using ($marginTop, $marginW) {\n\t\tpadding: 0px #{$marginW}px 256px #{$marginW}px;\n\t}\n\n\t&--folders {\n\t\tpadding: 32px 48px;\n\n\t\t@media only screen and (max-width: 400px) {\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: center;\n\t\t\twidth: 100%;\n\t\t}\n\n\t\t@media only screen and (min-width: 400px) {\n\t\t\twidth: fit-content;\n\t\t}\n\t}\n}\n\n.photos-navigation {\n\tposition: relative;\n\n\t// Add space at the bottom for the progress bar.\n\t&--uploading {\n\t\tmargin-bottom: 30px;\n\t}\n\n\t:deep(.upload-picker) {\n\t\t.upload-picker__progress {\n\t\t\tposition: absolute;\n\t\t\tbottom: -30px;\n\t\t\tinset-inline-start: 64px;\n\t\t\tmargin: 0;\n\t\t}\n\n\t\t.upload-picker__cancel {\n\t\t\tposition: absolute;\n\t\t\tbottom: -24px;\n\t\t\tinset-inline-end: 50px;\n\t\t}\n\t}\n}\n</style>\n"],"names":["__defProp","__defProps","__getOwnPropDescs","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","obj","key","value","__spreadValues","a","b","prop","__spreadProps","_typeof","obj2","_defineProperty","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","i","arr2","iter","reflectionIsSupported","copyReflectionMetadata","to","from","forwardMetadata","propertyKey","metaKeys","metaKey","metadata","fakeArray","hasProto","createDecorator","factory","target","index","Ctor","options","isPrimitive","type","collectDataFromConstructor","vm","Component2","originalInit","_this","keys","key2","data","plainData","$internalHooks","componentFactory","proto","descriptor","decorators","fn","superProto","Super","Vue","Extended","forwardStaticMembers","shouldIgnore","Original","extendedDescriptor","superDescriptor","Component","needToProduceProvide","original","produceProvide","provide","rv","reactiveInjectKey","_loop_1","i2","this_1","inheritInjected","componentOptions","reflectMetadataIsSupported","applyMetadata","Prop","k","ProvideReactive","Watch","path","_a","deep","_b","immediate","handler","watch","getGridGapDefault","elementWidth","windowHeight","getColumnCountDefault","getWindowMarginDefault","getItemRatioHeightDefault","height","width","columnWidth","imageRatio","debugLog","condition","args","__defProp2","__getOwnPropDesc","__decorateClass","kind","result","decorator","VirtualGrid$1","scrollElement","oldScrollElement","error","windowBottom","bottomTrigger","windowSize","windowScroll","elementWindowOffset","elementSize","containerData","items","windowMargin","gridGap","columnCount","entries","item","imageWidth","configData","currentRowNumber","prevRowsTotalHeight","currentRowMaxHeight","columnShift","cells","entry","columnSpanRecompute","heightRecompute","distanceToRowStart","shiftedIndex","columnNumber","rowNumber","overlapNumber","overlapRatio","offset","totalHeight","layoutData","cellsToRender","firstRenderedRowNumber","firstRenderedRowOffset","cell","cellTop","cellBottom","windowTop","renderTop","renderBottom","totalGapSpace","renderData","element","rect","render","_vm","_h","_c","staticRenderFns","normalizeComponent","scriptExports","render2","staticRenderFns2","functionalTemplate","injectStyles","scopeId","moduleIdentifier","shadowMode","hook","originalRender","h","context","existing","__cssModules","__component__","__vue2_injectStyles","o","VirtualGrid","_sfc_main$3","t","generateUrl","legacyToViewerFileInfo","file","_sfc_main$2","FolderOutline","RouterLink","fileid","etag","prefix","getCurrentUser","getFolderContent","endpoint","list","axios","defaultRootPath","defaultRemoteURL","folder","folders","files","allowedMimes","_sfc_main$1","defineComponent","FolderTagPreview","AbortControllerMixin","previewFolderContent","previewFiles","id","firstChildFolder","filename","unPrefixedFileName","logger","sizes","getGridConfig","val","currentSize","size","GridConfigMixin","_sfc_main","HeaderNavigation","NcEmptyContent","NcLoadingIcon","UploadPicker","getUploader","Folder","parsePermissions","FolderComponent","FileLegacy","upload","relPath","node","fetchFile"],"mappings":"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","x_google_ignoreList":[0]} |