summaryrefslogtreecommitdiffstats
path: root/js/photos-4.js.map
diff options
context:
space:
mode:
Diffstat (limited to 'js/photos-4.js.map')
-rw-r--r--js/photos-4.js.map2
1 files changed, 1 insertions, 1 deletions
diff --git a/js/photos-4.js.map b/js/photos-4.js.map
index f434720a..0157dfe1 100644
--- a/js/photos-4.js.map
+++ b/js/photos-4.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///./src/patchedRequest.js","webpack:///./src/services/DavClient.js","webpack:///./src/services/DavRequest.js","webpack:///./src/components/VirtualGrid.vue?633d","webpack:///./src/assets/grid-sizes.js","webpack:///./node_modules/debounce/index.js","webpack:///./src/components/VirtualGrid.vue?dcd9","webpack:///./src/components/VirtualGrid.vue?6307","webpack:///./src/views/Timeline.vue?58d2","webpack:///./src/services/PhotoSearch.js","webpack:///./node_modules/@essentials/raf/dist/module/index.js","webpack:///./node_modules/@essentials/request-timeout/dist/module/index.js","webpack:///./src/services/GridConfig.js","webpack:///./src/mixins/GridConfig.js","webpack:///./src/components/VirtualGrid.vue?d88f","webpack:///src/components/VirtualGrid.vue","webpack:///./src/components/VirtualGrid.vue","webpack:///./src/components/VirtualGrid.vue?e82b","webpack:///src/views/Timeline.vue","webpack:///./src/views/Timeline.vue?21b8","webpack:///./src/views/Timeline.vue"],"names":["request","require","oldPrepareRequestOptions","prepareRequestOptions","requestOptions","methodOptions","cancelToken","method","module","exports","webdav","getPatcher","patch","axios","remote","generateRemoteUrl","client","createClient","parseUrl","pathname","props","content","i","locals","add","default","sizes","400","marginTop","marginW","count","gap","700","1024","1280","1440","1600","2048","2560","3440","max","debounce","func","wait","immediate","timeout","args","context","timestamp","result","later","last","Date","now","setTimeout","apply","debounced","this","arguments","callNow","clear","clearTimeout","flush","___CSS_LOADER_API_IMPORT___","push","onlyFavorites","options","Object","assign","page","perPage","prefixPath","getCurrentUser","uid","orMime","allowedMimes","reduce","str","mime","eqFavorites","headers","data","deep","details","getDirectoryContents","response","map","genFileInfo","filename","replace","u","win","window","p","performance","af","Caf","Raf","raf","bind","caf","lastTime","callback","curr","next","Math","h","requestTimeout","fn","ms","start","handle","v","loop","call","Vue","gridConfig","watch","val","$emit","created","addEventListener","handleWindowResize","beforeDestroy","removeEventListener","methods","currentSize","keys","find","size","document","documentElement","clientWidth","getGridConfig","$on","console","debug","$off","_vm","_h","$createElement","_c","_self","ref","directives","name","rawName","value","shownFirstRow","expression","key","staticClass","style","paddingBottom","topPadding","attrs","_v","_l","item","index","component","_b","fileid","refInFor","tag","class","getRowNumber","list","_e","shownLastRow","lastRow","bottomPadding","error","_s","t","loading","isEmpty","path","rootTitle","getComponent","fileList","loadingPage","getProps","on","onBottomReached"],"mappings":"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","file":"photos-4.js?v=ae5bb7584a56c77b716f","sourcesContent":["/**\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\nconst request = require('webdav/dist/node/request')\n\nconst oldPrepareRequestOptions = request.prepareRequestOptions\n\n// While we wait for official cancellable webdav requests\n// https://github.com/perry-mitchell/webdav-client/issues/179\n// let's properly forward our axios options through webdav to axios\n\nrequest.prepareRequestOptions = function(requestOptions, methodOptions) {\n\t// add our cancelToken support\n\tif (methodOptions.cancelToken && typeof methodOptions.cancelToken === 'object') {\n\t\trequestOptions.cancelToken = methodOptions.cancelToken\n\t}\n\n\t// exploit old method\n\toldPrepareRequestOptions(requestOptions, methodOptions)\n\n\t// allow us to override the request method\n\tif (methodOptions.method && typeof methodOptions.method === 'string') {\n\t\trequestOptions.method = methodOptions.method\n\t}\n}\n\nmodule.exports = request\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\nimport webdav from 'webdav'\nimport axios from '@nextcloud/axios'\nimport parseUrl from 'url-parse'\nimport { generateRemoteUrl } from '@nextcloud/router'\n\n// force our axios\nconst patcher = webdav.getPatcher()\npatcher.patch('request', axios)\n\n// init webdav client on default dav endpoint\nconst remote = generateRemoteUrl('dav')\nconst client = webdav.createClient(remote)\n\nexport const remotePath = parseUrl(remote).pathname\nexport default client\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 */\nconst props = `\n\t<oc:fileid />\n\t<d:getlastmodified />\n\t<d:getetag />\n\t<d:getcontenttype />\n\t<d:getcontentlength />\n\t<nc:has-preview />\n\t<oc:favorite />\n\t<d:resourcetype />`\n\nexport { props }\nexport default `<?xml version=\"1.0\"?>\n\t\t\t<d:propfind xmlns:d=\"DAV:\"\n\t\t\t\txmlns:oc=\"http://owncloud.org/ns\"\n\t\t\t\txmlns:nc=\"http://nextcloud.org/ns\"\n\t\t\t\txmlns:ocs=\"http://open-collaboration-services.org/ns\">\n\t\t\t\t<d:prop>\n\t\t\t\t\t${props}\n\t\t\t\t</d:prop>\n\t\t\t</d:propfind>`\n","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VirtualGrid.vue?vue&type=style&index=0&id=4517b139&lang=scss&scoped=true&\");\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"c29390dc\", content, true, {});","/**\n * @copyright Copyright (c) 2018 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\n// for now we want to keep the same gap everywhere\nconst gap = 8\n\n/**\n * Define the max width proportions\n * The number (key) indicate the MAX size\n *\n * needs to be ompatible with webpack config\n * so no export default {}\n */\nmodule.exports = {\n\tsizes: {\n\t\t400: {\n\t\t\tmarginTop: 66, // same as grid-gap\n\t\t\tmarginW: gap, // same as grid-gap\n\t\t\tcount: 3,\n\t\t\tgap,\n\t\t},\n\t\t700: {\n\t\t\tmarginTop: 66,\n\t\t\tmarginW: 8, // same as grid-gap\n\t\t\tcount: 4,\n\t\t\tgap,\n\t\t},\n\t\t1024: {\n\t\t\tmarginTop: 66,\n\t\t\tmarginW: 44,\n\t\t\tcount: 5,\n\t\t\tgap,\n\t\t},\n\t\t1280: {\n\t\t\tmarginTop: 66,\n\t\t\tmarginW: 44,\n\t\t\tcount: 4,\n\t\t\tgap,\n\t\t},\n\t\t1440: {\n\t\t\tmarginTop: 88,\n\t\t\tmarginW: 66,\n\t\t\tcount: 5,\n\t\t\tgap,\n\t\t},\n\t\t1600: {\n\t\t\tmarginTop: 88,\n\t\t\tmarginW: 66,\n\t\t\tcount: 6,\n\t\t\tgap,\n\t\t},\n\t\t2048: {\n\t\t\tmarginTop: 88,\n\t\t\tmarginW: 66,\n\t\t\tcount: 7,\n\t\t\tgap,\n\t\t},\n\t\t2560: {\n\t\t\tmarginTop: 88,\n\t\t\tmarginW: 88,\n\t\t\tcount: 8,\n\t\t\tgap,\n\t\t},\n\t\t3440: {\n\t\t\tmarginTop: 88,\n\t\t\tmarginW: 88,\n\t\t\tcount: 9,\n\t\t\tgap,\n\t\t},\n\t\tmax: {\n\t\t\tmarginTop: 88,\n\t\t\tmarginW: 88,\n\t\t\tcount: 10,\n\t\t\tgap,\n\t\t},\n\t},\n}\n","/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing. The function also has a property 'clear' \n * that is a function which will clear the timer to prevent previously scheduled executions. \n *\n * @source underscore.js\n * @see http://unscriptable.com/2009/03/20/debouncing-javascript-methods/\n * @param {Function} function to wrap\n * @param {Number} timeout in ms (`100`)\n * @param {Boolean} whether to execute at the beginning (`false`)\n * @api public\n */\nfunction debounce(func, wait, immediate){\n var timeout, args, context, timestamp, result;\n if (null == wait) wait = 100;\n\n function later() {\n var last = Date.now() - timestamp;\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n context = args = null;\n }\n }\n };\n\n var debounced = function(){\n context = this;\n args = arguments;\n timestamp = Date.now();\n var callNow = immediate && !timeout;\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n context = args = null;\n }\n\n return result;\n };\n\n debounced.clear = function() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n };\n \n debounced.flush = function() {\n if (timeout) {\n result = func.apply(context, args);\n context = args = null;\n \n clearTimeout(timeout);\n timeout = null;\n }\n };\n\n return debounced;\n};\n\n// Adds compatibility for ES modules\ndebounce.debounce = debounce;\n\nmodule.exports = debounce;\n","import mod from \"-!../../node_modules/vue-style-loader/index.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VirtualGrid.vue?vue&type=style&index=0&id=4517b139&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../node_modules/vue-style-loader/index.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js!../../node_modules/sass-loader/dist/cjs.js??ref--1-3!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VirtualGrid.vue?vue&type=style&index=0&id=4517b139&lang=scss&scoped=true&\"","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".grid-filler[data-v-4517b139]{grid-column-end:-1}.grid-loading[data-v-4517b139]{grid-column:1/-1;height:88px}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.error === 404)?_c('EmptyContent',{attrs:{\"illustration-name\":\"folder\"}},[_vm._v(\"\\n\\t\"+_vm._s(_vm.t('photos', 'This folder does not exists'))+\"\\n\")]):(_vm.error)?_c('EmptyContent',[_vm._v(\"\\n\\t\"+_vm._s(_vm.t('photos', 'An error occurred'))+\"\\n\")]):(!_vm.loading && _vm.isEmpty)?_c('EmptyContent',{attrs:{\"illustration-name\":\"empty\"}},[_vm._v(\"\\n\\t\"+_vm._s(_vm.t('photos', 'No photos in here'))+\"\\n\")]):(!_vm.loading)?_c('div',[_c('Navigation',{key:\"navigation\",attrs:{\"basename\":_vm.path,\"filename\":'/',\"root-title\":_vm.rootTitle}}),_vm._v(\" \"),_c('VirtualGrid',{attrs:{\"component\":_vm.getComponent,\"list\":_vm.fileList,\"loading-page\":_vm.loadingPage,\"props\":_vm.getProps},on:{\"bottomReached\":_vm.onBottomReached}})],1):_vm._e()}\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 *\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\nimport { genFileInfo } from '../utils/fileUtils'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport allowedMimes from './AllowedMimes'\nimport client from './DavClient'\nimport { props } from './DavRequest'\nimport { sizes } from '../assets/grid-sizes'\n\n/**\n * List files from a folder and filter out unwanted mimes\n *\n * @param {boolean} [onlyFavorites=false] not used\n * @param {Object} [options] used for the cancellable requests\n * @param {number} [options.page=0] which page to start (starts at 0)\n * @param {number} [options.perPage] how many to display per page default is 5 times the max number per line from the grid-sizes config file\n * @param {boolean} [options.full=false] get full data of the files\n * @returns {Array} the file list\n */\nexport default async function(onlyFavorites = false, options = {}) {\n\t// default function options\n\toptions = Object.assign({}, {\n\t\tpage: 0, // start at the first page\n\t\tperPage: sizes.max.count * 10, // ten rows of the max width\n\t}, options)\n\n\tconst prefixPath = `/files/${getCurrentUser().uid}`\n\n\t// generating the search or condition\n\t// based on the allowed mimetypes\n\tconst orMime = allowedMimes.reduce((str, mime) => `${str}\n\t\t<d:eq>\n\t\t\t<d:prop>\n\t\t\t\t<d:getcontenttype/>\n\t\t\t</d:prop>\n\t\t\t<d:literal>${mime}</d:literal>\n\t\t</d:eq>\n\t`, '')\n\n\tconst eqFavorites = onlyFavorites\n\t\t? `<d:eq>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<oc:favorite/>\n\t\t\t\t</d:prop>\n\t\t\t\t<d:literal>1</d:literal>\n\t\t\t</d:eq>`\n\t\t: ''\n\n\toptions = Object.assign({\n\t\tmethod: 'SEARCH',\n\t\theaders: {\n\t\t\t'content-Type': 'text/xml',\n\t\t},\n\t\tdata: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\t\t\t<d:searchrequest xmlns:d=\"DAV:\"\n\t\t\t\txmlns:oc=\"http://owncloud.org/ns\"\n\t\t\t\txmlns:nc=\"http://nextcloud.org/ns\"\n\t\t\t\txmlns:ns=\"https://github.com/icewind1991/SearchDAV/ns\"\n\t\t\t\txmlns:ocs=\"http://open-collaboration-services.org/ns\">\n\t\t\t\t<d:basicsearch>\n\t\t\t\t\t<d:select>\n\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t${props}\n\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t</d:select>\n\t\t\t\t\t<d:from>\n\t\t\t\t\t\t<d:scope>\n\t\t\t\t\t\t\t<d:href>${prefixPath}</d:href>\n\t\t\t\t\t\t\t<d:depth>infinity</d:depth>\n\t\t\t\t\t\t</d:scope>\n\t\t\t\t\t</d:from>\n\t\t\t\t\t<d:where>\n\t\t\t\t\t\t<d:and>\n\t\t\t\t\t\t\t<d:or>\n\t\t\t\t\t\t\t\t${orMime}\n\t\t\t\t\t\t\t</d:or>\n\t\t\t\t\t\t\t${eqFavorites}\n\t\t\t\t\t\t\t<d:eq>\n\t\t\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t\t\t<oc:owner-id/>\n\t\t\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t\t\t\t<d:literal>${getCurrentUser().uid}</d:literal>\n\t\t\t\t\t\t\t</d:eq>\n\t\t\t\t\t\t</d:and>\n\t\t\t\t\t</d:where>\n\t\t\t\t\t<d:orderby>\n\t\t\t\t\t\t<d:order>\n\t\t\t\t\t\t\t<d:prop><d:getlastmodified/></d:prop>\n\t\t\t\t\t\t\t<d:descending/>\n\t\t\t\t\t\t</d:order>\n\t\t\t\t\t</d:orderby>\n\t\t\t\t\t<d:limit>\n\t\t\t\t\t\t<d:nresults>${options.perPage}</d:nresults>\n\t\t\t\t\t\t<ns:firstresult>${options.page * options.perPage}</ns:firstresult>\n\t\t\t\t\t</d:limit>\n\t\t\t\t</d:basicsearch>\n\t\t\t</d:searchrequest>`,\n\t\tdeep: true,\n\t\tdetails: true,\n\t}, options)\n\n\tconst response = await client.getDirectoryContents('', options)\n\n\treturn response.data\n\t\t.map(data => genFileInfo(data))\n\t\t// remove prefix path from full file path\n\t\t.map(data => Object.assign({}, data, { filename: data.filename.replace(prefixPath, '') }))\n\n}\n","let u = 'undefined',\n win = typeof window !== u ? window : {},\n p = typeof performance !== u ? performance : Date,\n now = () => p.now(),\n af = 'AnimationFrame',\n Caf = 'cancel' + af,\n Raf = 'request' + af,\n raf = win[Raf] && /*#__PURE__*/win[Raf].bind(win),\n caf = win[Caf] && /*#__PURE__*/win[Caf].bind(win);\n\nfunction _ref(h) {\n return clearTimeout(h);\n}\n\nif (!raf || !caf) {\n let lastTime = 0;\n\n raf = callback => {\n let curr = now(),\n next = Math.max(lastTime + 1000 / 60, curr);\n return setTimeout(() => {\n callback(lastTime = next);\n }, next - curr);\n };\n\n caf = _ref;\n}\n\nexport { raf, caf, now };","/**\n * Copyright 2011, Joe Lambert.\n * Free to use under the MIT license.\n * http://www.opensource.org/licenses/mit-license.php\n **/\nimport { raf, caf, now } from '@essentials/raf';\nexport const clearRequestTimeout = handle => {\n caf(handle.v || -1);\n};\nexport const requestTimeout = (fn, ms) => {\n const start = now(),\n handle = {};\n\n const loop = () => {\n now() - start >= ms ? fn.call(null) : handle.v = raf(loop);\n };\n\n handle.v = raf(loop);\n return handle;\n};\nexport default requestTimeout;","/**\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\nimport Vue from 'vue'\nimport { sizes } from '../assets/grid-sizes'\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).find(size => size > document.documentElement.clientWidth)\n\t\t\tthis.gridConfig = sizes[currentSize]\n\t\t},\n\t},\n})\n","/**\n * @copyright Copyright (c) 2018 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\nimport getGridConfig from '../services/GridConfig'\n\n/**\n * Get the current used grid config\n */\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tgridConfig: {},\n\t\t}\n\t},\n\n\tcreated() {\n\t\tgetGridConfig.$on('changed', val => {\n\t\t\tthis.gridConfig = val\n\t\t})\n\t\tconsole.debug('Current grid config', getGridConfig.gridConfig)\n\t\tthis.gridConfig = getGridConfig.gridConfig\n\t},\n\n\tbeforeDestroy() {\n\t\tgetGridConfig.$off('changed', this.gridConfig)\n\t},\n}\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VirtualGrid.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!./VirtualGrid.vue?vue&type=script&lang=js&\"","\n<template>\n\t<Grid ref=\"grid\">\n\t\t<!-- top spacer -->\n\t\t<span v-show=\"shownFirstRow > 0\"\n\t\t\tkey=\"filler-top\"\n\t\t\tref=\"filler-top\"\n\t\t\t:style=\"{paddingBottom: topPadding}\"\n\t\t\tclass=\"grid-filler grid-filler--top\"\n\t\t\trole=\"none\" />\n\n\t\t<!-- files list -->\n\t\t<component :is=\"component(item)\"\n\t\t\tv-for=\"(item, index) in shownList\"\n\t\t\t:key=\"item.fileid\"\n\t\t\t:ref=\"`item-${index}`\"\n\t\t\t:class=\"`row-${getRowNumber(index)}`\"\n\t\t\t:list=\"list\"\n\t\t\tv-bind=\"props(item)\" />\n\n\t\t<!-- next page loading indicator -->\n\t\t<div v-if=\"loadingPage\"\n\t\t\tkey=\"grid-loading\"\n\t\t\tclass=\"grid-loading icon-loading\"\n\t\t\trole=\"none\" />\n\n\t\t<!-- bottom spacer -->\n\t\t<span v-show=\"shownLastRow < lastRow\"\n\t\t\tref=\"filler-bottom\"\n\t\t\tkey=\"filler-bottom\"\n\t\t\t:style=\"{paddingBottom: bottomPadding}\"\n\t\t\tclass=\"grid-filler grid-filler--bottom\"\n\t\t\trole=\"none\" />\n\t</Grid>\n</template>\n\n<script>\nimport { requestTimeout, clearRequestTimeout } from '@essentials/request-timeout'\nimport Grid from './Grid'\nimport GridConfigMixin from '../mixins/GridConfig'\n\n/**\n * Specifies the number of miliseconds during which to disable pointer events while a scroll is in progress.\n * This improves performance and makes scrolling smoother.\n */\nexport const DEFAULT_SCROLLING_RESET_TIME_INTERVAL = 150\n\nexport default {\n\tname: 'VirtualGrid',\n\tcomponents: {\n\t\tGrid,\n\t},\n\tmixins: [GridConfigMixin],\n\n\tprops: {\n\t\tlist: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => ([]),\n\t\t},\n\t\tprops: {\n\t\t\ttype: Function,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t\tcomponent: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\t\tloadingPage: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tshownFirstRow: 0,\n\t\t\tshownLastRow: this.getRowNumber(this.list.length - 1),\n\t\t}\n\t},\n\n\tcomputed: {\n\n\t\tshownList() {\n\t\t\treturn this.list.filter((item, index) => this.isVisible(index))\n\t\t},\n\n\t\t/**\n\t\t * Calculate the top filler needed padding\n\t\t * to compensate for the hidden items\n\t\t * @returns {string}\n\t\t */\n\t\ttopPadding() {\n\t\t\treturn `${this.shownFirstRow * 100}%`\n\t\t},\n\t\t/**\n\t\t * Calculate the bottom filler needed padding\n\t\t * to compensate for the hidden items\n\t\t * Because bottomShift indicate the index of the last visible item,\n\t\t * we need to calcuta ehow any rows there is to compensate\n\t\t * between bottomShift and the end of the list\n\t\t * @returns {string}\n\t\t */\n\t\tbottomPadding() {\n\t\t\treturn `${(this.lastRow - this.shownLastRow) * 100}%`\n\t\t},\n\n\t\tlastRow() {\n\t\t\treturn this.getRowNumber(this.list.length - 1)\n\t\t},\n\t},\n\n\tcreated() {\n\t\twindow.addEventListener('resize', this.onDocumentScroll)\n\t\twindow.addEventListener('scroll', this.onDocumentScroll)\n\t},\n\tmounted() {\n\t\tthis.onDocumentScroll()\n\t},\n\tbeforeDestroy() {\n\t\twindow.removeEventListener('resize', this.onDocumentScroll)\n\t\twindow.removeEventListener('scroll', this.onDocumentScroll)\n\t},\n\n\tmethods: {\n\n\t\t/**\n\t\t * Request an animation frame and debounce the onScroll method\n\t\t */\n\t\tdebounceOnDocumentScroll() {\n\t\t\tif (this.debounceOnDocumentScrollRequest) {\n\t\t\t\tclearRequestTimeout(this.debounceOnDocumentScrollRequest)\n\t\t\t}\n\n\t\t\tthis.debounceOnDocumentScrollRequest = requestTimeout(\n\t\t\t\tthis.onDocumentScroll,\n\t\t\t\tDEFAULT_SCROLLING_RESET_TIME_INTERVAL, //\n\t\t\t)\n\t\t},\n\n\t\t/**\n\t\t * Handle document scroll\n\t\t * Detect first visible/hidden to implement virtual scrolling\n\t\t */\n\t\tonDocumentScroll() {\n\n\t\t\t// get the row height\n\t\t\tconst gridContainer = this.$refs.grid.$el\n\t\t\tconst gridStyles = getComputedStyle(gridContainer)\n\t\t\tconst rowHeight = parseFloat(gridStyles.gridTemplateColumns.split(' ')[0], 10)\n\n\t\t\t// scrolled content\n\t\t\t// rounding up to tens to make sure we only detect changes by steps of 10px\n\t\t\tconst scrolled = this.roundToTen(window.pageYOffset - this.gridConfig.marginTop)\n\n\t\t\t// adding one above and one under to have a trigger area of one row\n\t\t\tconst shownFirstRow = Math.floor(scrolled / (rowHeight + this.gridConfig.gap)) - 1\n\t\t\tconst shownLastRow = Math.ceil(window.innerHeight / rowHeight) + shownFirstRow + 1\n\n\t\t\tthis.shownFirstRow = Math.max(shownFirstRow, 0) // the first shown row cannot be negative\n\t\t\tthis.shownLastRow = Math.min(shownLastRow, this.lastRow) // the last shown row cannot be lower than the last row\n\n\t\t\tif (this.shownLastRow >= this.lastRow) {\n\t\t\t\tthis.$emit('bottomReached')\n\t\t\t}\n\n\t\t},\n\n\t\tisVisible(index) {\n\t\t\tconst row = this.getRowNumber(index)\n\t\t\treturn row >= this.shownFirstRow && row < this.shownLastRow + 1\n\t\t},\n\n\t\t/**\n\t\t * Return the row number of the provided index\n\t\t *\n\t\t * @param {number} index the index\n\t\t * @returns {number}\n\t\t */\n\t\tgetRowNumber(index) {\n\t\t\t// in case the grid config is not here yet, let's\n\t\t\tconst count = this.gridConfig ? this.gridConfig.count : this.list.length\n\t\t\treturn Math.floor(index / count)\n\t\t},\n\n\t\t/**\n\t\t * Round the provided number to a tens of its value\n\t\t *\n\t\t * @param {number} number the number to round\n\t\t * @returns {number}\n\t\t */\n\t\troundToTen(number) {\n\t\t\treturn Math.floor(number / 10) * 10\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.grid-filler {\n\t// put the filler at the end of the row to put the next one into a new line\n\tgrid-column-end: -1;\n}\n\n.grid-loading {\n\tgrid-column: 1/-1;\n\theight: 88px;\n}\n</style>\n","import { render, staticRenderFns } from \"./VirtualGrid.vue?vue&type=template&id=4517b139&scoped=true&\"\nimport script from \"./VirtualGrid.vue?vue&type=script&lang=js&\"\nexport * from \"./VirtualGrid.vue?vue&type=script&lang=js&\"\nimport style0 from \"./VirtualGrid.vue?vue&type=style&index=0&id=4517b139&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 \"4517b139\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Grid',{ref:\"grid\"},[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.shownFirstRow > 0),expression:\"shownFirstRow > 0\"}],key:\"filler-top\",ref:\"filler-top\",staticClass:\"grid-filler grid-filler--top\",style:({paddingBottom: _vm.topPadding}),attrs:{\"role\":\"none\"}}),_vm._v(\" \"),_vm._l((_vm.shownList),function(item,index){return _c(_vm.component(item),_vm._b({key:item.fileid,ref:(\"item-\" + index),refInFor:true,tag:\"component\",class:(\"row-\" + (_vm.getRowNumber(index))),attrs:{\"list\":_vm.list}},'component',_vm.props(item),false))}),_vm._v(\" \"),(_vm.loadingPage)?_c('div',{key:\"grid-loading\",staticClass:\"grid-loading icon-loading\",attrs:{\"role\":\"none\"}}):_vm._e(),_vm._v(\" \"),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.shownLastRow < _vm.lastRow),expression:\"shownLastRow < lastRow\"}],key:\"filler-bottom\",ref:\"filler-bottom\",staticClass:\"grid-filler grid-filler--bottom\",style:({paddingBottom: _vm.bottomPadding}),attrs:{\"role\":\"none\"}})],2)}\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 -\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\n<template>\n\t<!-- Errors handlers-->\n\t<EmptyContent v-if=\"error === 404\" illustration-name=\"folder\">\n\t\t{{ t('photos', 'This folder does not exists') }}\n\t</EmptyContent>\n\t<EmptyContent v-else-if=\"error\">\n\t\t{{ t('photos', 'An error occurred') }}\n\t</EmptyContent>\n\t<EmptyContent v-else-if=\"!loading && isEmpty\" illustration-name=\"empty\">\n\t\t{{ t('photos', 'No photos in here') }}\n\t</EmptyContent>\n\n\t<!-- Folder content -->\n\t<div v-else-if=\"!loading\">\n\t\t<Navigation\n\t\t\tkey=\"navigation\"\n\t\t\t:basename=\"path\"\n\t\t\t:filename=\"'/'\"\n\t\t\t:root-title=\"rootTitle\" />\n\n\t\t<VirtualGrid\n\t\t\t:component=\"getComponent\"\n\t\t\t:list=\"fileList\"\n\t\t\t:loading-page=\"loadingPage\"\n\t\t\t:props=\"getProps\"\n\t\t\t@bottomReached=\"onBottomReached\" />\n\t</div>\n</template>\n\n<script>\nimport { mapGetters } from 'vuex'\nimport debounce from 'debounce'\n\nimport getPhotos from '../services/PhotoSearch'\n\nimport EmptyContent from '../components/EmptyContent'\nimport File from '../components/File'\nimport VirtualGrid from '../components/VirtualGrid'\nimport Navigation from '../components/Navigation'\n\nimport cancelableRequest from '../utils/CancelableRequest'\nimport GridConfigMixin from '../mixins/GridConfig'\n\nexport default {\n\tname: 'Timeline',\n\tcomponents: {\n\t\tEmptyContent,\n\t\tVirtualGrid,\n\t\tNavigation,\n\t},\n\tmixins: [GridConfigMixin],\n\tprops: {\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tonlyFavorites: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\trootTitle: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tpath: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tcancelRequest: null,\n\t\t\tdone: false,\n\t\t\terror: null,\n\t\t\tloadingPage: false,\n\t\t\tpage: 0,\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'timeline',\n\t\t]),\n\n\t\tfileList() {\n\t\t\treturn this.timeline\n\t\t\t\t.map(id => this.files[id])\n\t\t\t\t.filter(file => !!file)\n\t\t},\n\n\t\t// is current folder empty?\n\t\tisEmpty() {\n\t\t\treturn this.fileList.length === 0\n\t\t},\n\t},\n\n\twatch: {\n\t\tasync onlyFavorites() {\n\t\t\t// reset component\n\t\t\tthis.resetState()\n\n\t\t\t// content is completely different\n\t\t\tthis.$emit('update:loading', true)\n\t\t\tthis.fetchContent()\n\t\t},\n\t},\n\n\tasync beforeMount() {\n\t\tthis.resetState()\n\t\tthis.fetchContent()\n\t},\n\n\tbeforeDestroy() {\n\t\t// cancel any pending requests\n\t\tif (this.cancelRequest) {\n\t\t\tthis.cancelRequest('Changed view')\n\t\t}\n\t},\n\n\tmethods: {\n\t\tasync fetchContent() {\n\t\t\t// only one simultaneous page load\n\t\t\tif (this.loadingPage) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// cancel any pending requests\n\t\t\tif (this.cancelRequest) {\n\t\t\t\tthis.cancelRequest('Changed view')\n\t\t\t}\n\n\t\t\t// if we don't already have some cached data let's show a loader\n\t\t\tif (this.timeline.length === 0) {\n\t\t\t\tthis.$emit('update:loading', true)\n\t\t\t}\n\t\t\tthis.error = null\n\t\t\tthis.loadingPage = true\n\n\t\t\t// init cancellable request\n\t\t\tconst { request, cancel } = cancelableRequest(getPhotos)\n\t\t\tthis.cancelRequest = cancel\n\n\t\t\ttry {\n\t\t\t\t// get content and current folder info\n\t\t\t\tconst files = await request(this.onlyFavorites, {\n\t\t\t\t\tpage: this.page,\n\t\t\t\t\tperPage: this.gridConfig.count * 5, // we load 5 rows,\n\t\t\t\t})\n\t\t\t\tthis.$store.dispatch('updateTimeline', files)\n\t\t\t\tthis.$store.dispatch('appendFiles', files)\n\n\t\t\t\t// next time we load this script, we load the next page if the list returned\n\t\t\t\tif (files.length === this.gridConfig.count * 5) {\n\t\t\t\t\tthis.page++\n\t\t\t\t} else {\n\t\t\t\t\tconsole.debug('We loaded the last page')\n\t\t\t\t\tthis.done = true\n\t\t\t\t}\n\n\t\t\t\t// return for the viewer loadMore method\n\t\t\t\treturn files\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 })\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\tconsole.error('Error fetching timeline', error)\n\t\t\t} finally {\n\t\t\t\t// done loading even with errors\n\t\t\t\tthis.$emit('update:loading', false)\n\t\t\t\tthis.loadingPage = false\n\t\t\t\tthis.cancelRequest = null\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Return the props based on the element\n\t\t * Here we want to bind the full fileinfo\n\t\t * object so we stupidly return it whole!\n\t\t *\n\t\t * @param {Object} item the scoped item from the VirtualGrid\n\t\t * @returns {Object}\n\t\t */\n\t\tgetProps(item) {\n\t\t\treturn Object.assign({}, item, {\n\t\t\t\tloadMore: this.fetchContent,\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Return the component based on the element\n\t\t * We only have files in the Timeline,\n\t\t * so we return Files!\n\t\t *\n\t\t * @returns {Object}\n\t\t */\n\t\tgetComponent() {\n\t\t\treturn File\n\t\t},\n\n\t\tdebounceOnBottomReached: debounce(function() {\n\t\t\tthis.onBottomReached()\n\t\t}, 1000),\n\n\t\t/**\n\t\t * When virtual grid reach the bottom,\n\t\t * we load the next page\n\t\t */\n\t\tonBottomReached() {\n\t\t\t// if we're currently loading or if a previous\n\t\t\t// request returned the last page, we stop\n\t\t\tif (this.loadingPage || this.done) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconsole.debug('Loading next page', this.page)\n\t\t\tthis.fetchContent()\n\t\t},\n\n\t\t/**\n\t\t * Reset this component data to a pristine state\n\t\t */\n\t\tresetState() {\n\t\t\tthis.$store.dispatch('resetTimeline')\n\t\t\tthis.done = false\n\t\t\tthis.error = null\n\t\t\tthis.loadingPage = false\n\t\t\tthis.page = 0\n\t\t\tthis.page = 0\n\t\t},\n\n\t},\n\n}\n</script>\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Timeline.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Timeline.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Timeline.vue?vue&type=template&id=563a6ae0&\"\nimport script from \"./Timeline.vue?vue&type=script&lang=js&\"\nexport * from \"./Timeline.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///./src/patchedRequest.js","webpack:///./src/services/DavClient.js","webpack:///./src/services/DavRequest.js","webpack:///./src/components/VirtualGrid.vue?633d","webpack:///./src/assets/grid-sizes.js","webpack:///./node_modules/debounce/index.js","webpack:///./src/components/VirtualGrid.vue?dcd9","webpack:///./src/components/VirtualGrid.vue?6307","webpack:///./src/views/Timeline.vue?58d2","webpack:///./src/services/PhotoSearch.js","webpack:///./node_modules/@essentials/raf/dist/module/index.js","webpack:///./node_modules/@essentials/request-timeout/dist/module/index.js","webpack:///./src/services/GridConfig.js","webpack:///./src/mixins/GridConfig.js","webpack:///./src/components/VirtualGrid.vue?d88f","webpack:///src/components/VirtualGrid.vue","webpack:///./src/components/VirtualGrid.vue","webpack:///./src/components/VirtualGrid.vue?e82b","webpack:///src/views/Timeline.vue","webpack:///./src/views/Timeline.vue?21b8","webpack:///./src/views/Timeline.vue"],"names":["request","require","oldPrepareRequestOptions","prepareRequestOptions","requestOptions","methodOptions","cancelToken","method","module","exports","webdav","getPatcher","patch","axios","remote","generateRemoteUrl","client","createClient","parseUrl","pathname","props","content","i","locals","add","default","sizes","400","marginTop","marginW","count","gap","700","1024","1280","1440","1600","2048","2560","3440","max","debounce","func","wait","immediate","timeout","args","context","timestamp","result","later","last","Date","now","setTimeout","apply","debounced","this","arguments","callNow","clear","clearTimeout","flush","___CSS_LOADER_API_IMPORT___","push","onlyFavorites","options","Object","assign","page","perPage","prefixPath","getCurrentUser","uid","orMime","allowedMimes","reduce","str","mime","eqFavorites","headers","data","deep","details","getDirectoryContents","response","map","genFileInfo","filename","replace","u","win","window","p","performance","af","Caf","Raf","raf","bind","caf","lastTime","callback","curr","next","Math","h","requestTimeout","fn","ms","start","handle","v","loop","call","Vue","gridConfig","watch","val","$emit","created","addEventListener","handleWindowResize","beforeDestroy","removeEventListener","methods","currentSize","keys","find","size","document","documentElement","clientWidth","getGridConfig","$on","console","debug","$off","_vm","_h","$createElement","_c","_self","ref","directives","name","rawName","value","shownFirstRow","expression","key","staticClass","style","paddingBottom","topPadding","attrs","_v","_l","item","index","component","_b","fileid","refInFor","tag","class","getRowNumber","list","_e","shownLastRow","lastRow","bottomPadding","error","_s","t","loading","isEmpty","path","rootTitle","getComponent","fileList","loadingPage","getProps","on","onBottomReached"],"mappings":";;;;;;;;;;;;;;;;;;;;;GAsBA,IAAMA,EAAUC,EAAQ,KAElBC,EAA2BF,EAAQG,sBAMzCH,EAAQG,sBAAwB,SAASC,EAAgBC,GAEpDA,EAAcC,aAAoD,WAArC,EAAOD,EAAcC,eACrDF,EAAeE,YAAcD,EAAcC,aAI5CJ,EAAyBE,EAAgBC,GAGrCA,EAAcE,QAA0C,iBAAzBF,EAAcE,SAChDH,EAAeG,OAASF,EAAcE,SAIxCC,EAAOC,QAAUT,G,iCC7CjB,kEA4BgBU,IAAOC,aACfC,MAAM,UAAWC,KAGzB,IAAMC,EAASC,4BAAkB,OAC3BC,EAASN,IAAOO,aAAaH,GAETI,IAASJ,GAAQK,SAC5BH,O,iCCpCf;;;;;;;;;;;;;;;;;;;;;;AAqBA,IAAMI,EAAQ,+KAWC,sPAMRA,EANP,6C,oBC7BA,IAAIC,EAAU,EAAQ,KACA,iBAAZA,IAAsBA,EAAU,CAAC,CAACb,EAAOc,EAAID,EAAS,MAC7DA,EAAQE,SAAQf,EAAOC,QAAUY,EAAQE,SAG/BC,EADH,EAAQ,KAA+DC,SAChE,WAAYJ,GA