diff --git a/CHANGELOG.md b/CHANGELOG.md index 82a97887fd..71a361ce9d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ #### New Features #### Improvements +- Converted the footer to a Vue component ([#4520](https://github.com/pymedusa/Medusa/pull/4520)) #### Fixes diff --git a/medusa/server/web/core/base.py b/medusa/server/web/core/base.py index 8c48c049b2..b8afd74816 100644 --- a/medusa/server/web/core/base.py +++ b/medusa/server/web/core/base.py @@ -5,9 +5,7 @@ import os import re import sys -import time import traceback -from builtins import str from concurrent.futures import ThreadPoolExecutor from mako.exceptions import RichTraceback @@ -28,6 +26,7 @@ from six import ( iteritems, + text_type, viewitems, ) @@ -75,8 +74,8 @@ def __init__(self, rh, filename): lookup = get_lookup() self.template = lookup.get_template(filename) - base_url = (rh.request.headers.get('X-Forwarded-Proto', rh.request.protocol) + '://' + - rh.request.headers.get('X-Forwarded-Host', rh.request.host)) + base_url = (rh.request.headers.get('X-Forwarded-Proto', rh.request.protocol) + '://' + + rh.request.headers.get('X-Forwarded-Host', rh.request.host)) self.arguments = { 'sbHttpPort': app.WEB_PORT, @@ -85,8 +84,7 @@ def __init__(self, rh, filename): 'sbHandleReverseProxy': app.HANDLE_REVERSE_PROXY, 'sbDefaultPage': app.DEFAULT_PAGE, 'loggedIn': rh.get_current_user(), - 'sbStartTime': rh.startTime, - 'sbPID': str(app.PID), + 'sbPID': text_type(app.PID), 'title': 'FixME', 'header': 'FixME', 'controller': 'FixME', @@ -114,7 +112,6 @@ def render(self, *args, **kwargs): if key not in kwargs: kwargs[key] = self.arguments[key] - kwargs['makoStartTime'] = time.time() try: return self.template.render_unicode(*args, **kwargs) except Exception: @@ -130,15 +127,8 @@ def render(self, *args, **kwargs): class BaseHandler(RequestHandler): """Base Handler for the server.""" - startTime = 0. - - def __init__(self, *args, **kwargs): - self.startTime = time.time() - - super(BaseHandler, self).__init__(*args, **kwargs) - def write_error(self, status_code, **kwargs): - """Base error Handler for 404's.""" + """Error handler for 404's.""" # handle 404 http errors if status_code == 404: url = self.request.uri diff --git a/setup.cfg b/setup.cfg index e069eb6c22..61cc30c0c1 100644 --- a/setup.cfg +++ b/setup.cfg @@ -7,7 +7,10 @@ multiline-quotes = double docstring-quotes = double ; flake8 max-line-length = 160 -; If per-file ignores are needed, use: https://github.com/snoack/flake8-per-file-ignores +per-file-ignores = + ; http://flake8.pycqa.org/en/latest/user/options.html#cmdoption-flake8-per-file-ignores + ; [Example] + ; medusa/server/web/core/base.py:D100,D101,D102,D103,D107 ignore = ; Error codes reference: https://git.io/fNlTP ; Q002: Handled by flake8-docstrings @@ -131,7 +134,7 @@ flake8-ignore = medusa/server/web/config/subtitles.py D102 D200 D204 D400 E501 N802 medusa/server/web/core/__init__.py D104 F401 medusa/server/web/core/authentication.py D102 D200 D202 D204 D205 D400 - medusa/server/web/core/base.py D100 D101 D102 D103 D200 D204 D210 D400 D401 N802 N815 + medusa/server/web/core/base.py D100 D101 D102 D103 N802 medusa/server/web/core/calendar.py D200 D204 D205 D400 D401 medusa/server/web/core/file_browser.py D100 D101 D102 N803 medusa/server/web/core/history.py D100 D101 D102 N802 diff --git a/setup.py b/setup.py index c9363a3405..2ff4dc2b47 100644 --- a/setup.py +++ b/setup.py @@ -102,7 +102,7 @@ def packages(): }, cmdclass={'test': PyTest}, tests_require=tests_runtime_require + [ - 'flake8>=3.5.0', + 'flake8>=3.7.7', 'flake8-docstrings>=1.3.0', 'flake8-import-order>=0.18', 'flake8-quotes>=1.0.0', diff --git a/themes-default/slim/package.json b/themes-default/slim/package.json index 78cca1593c..666a66f0c9 100644 --- a/themes-default/slim/package.json +++ b/themes-default/slim/package.json @@ -90,6 +90,7 @@ "optimize-css-assets-webpack-plugin": "5.0.1", "stylelint": "10.1.0", "stylelint-config-standard": "18.3.0", + "timekeeper": "2.2.0", "vue-jest": "3.0.4", "vue-loader": "15.7.0", "webpack": "4.34.0", diff --git a/themes-default/slim/src/app.js b/themes-default/slim/src/app.js index d59fbc3272..fcfb24aef3 100644 --- a/themes-default/slim/src/app.js +++ b/themes-default/slim/src/app.js @@ -36,7 +36,8 @@ const app = new Vue({ const { $store } = this; Promise.all([ $store.dispatch('login', { username: window.username }), - $store.dispatch('getConfig') + $store.dispatch('getConfig'), + $store.dispatch('getStats') ]).then(([_, config]) => { if (isDevelopment) { console.log('App Loaded!'); diff --git a/themes-default/slim/src/components/app-footer.vue b/themes-default/slim/src/components/app-footer.vue new file mode 100644 index 0000000000..ad2fc27478 --- /dev/null +++ b/themes-default/slim/src/components/app-footer.vue @@ -0,0 +1,113 @@ + + + + + diff --git a/themes-default/slim/src/components/index.js b/themes-default/slim/src/components/index.js index d02e0551c8..5e80405703 100644 --- a/themes-default/slim/src/components/index.js +++ b/themes-default/slim/src/components/index.js @@ -2,6 +2,7 @@ export { default as AddRecommended } from './add-recommended.vue'; export { default as AddShowOptions } from './add-show-options.vue'; export { default as AddShows } from './add-shows.vue'; export { default as AnidbReleaseGroupUi } from './anidb-release-group-ui.vue'; +export { default as AppFooter } from './app-footer.vue'; export { default as AppHeader } from './app-header.vue'; export { default as Backstretch } from './backstretch.vue'; export { default as Config } from './config.vue'; diff --git a/themes-default/slim/src/global-vue-shim.js b/themes-default/slim/src/global-vue-shim.js index 4fe4e13cb8..d4de3ea183 100644 --- a/themes-default/slim/src/global-vue-shim.js +++ b/themes-default/slim/src/global-vue-shim.js @@ -7,6 +7,7 @@ import Snotify from 'vue-snotify'; import { AddShowOptions, AnidbReleaseGroupUi, + AppFooter, AppHeader, AppLink, Asset, @@ -46,6 +47,7 @@ export const registerGlobalComponents = () => { // @TODO: These should be registered in an `App.vue` component when possible, // along with some of the `main.mako` template components = components.concat([ + AppFooter, AppHeader, ScrollButtons, SubMenu @@ -119,7 +121,8 @@ export default () => { /* This is used by the `app-header` component to only show the logout button if a username is set */ store.dispatch('login', { username }), - store.dispatch('getConfig') + store.dispatch('getConfig'), + store.dispatch('getStats') ]).then(([_, config]) => { this.$emit('loaded'); // Legacy - send config.main to jQuery (received by index.js) diff --git a/themes-default/slim/src/store/modules/system.js b/themes-default/slim/src/store/modules/system.js index 8871ac0e88..f14c20d913 100644 --- a/themes-default/slim/src/store/modules/system.js +++ b/themes-default/slim/src/store/modules/system.js @@ -1,5 +1,33 @@ import { ADD_CONFIG } from '../mutation-types'; +/** + * An object representing a scheduler. + * + * If a scheduler isn't initialized on the backend, + * this object will only have the `key` and `name` properties. + * @typedef {object} Scheduler + * @property {string} key + * A camelCase key representing this scheduler. + * @property {string} name + * The scheduler's name. + * @property {boolean} [isAlive] + * Is the scheduler alive? + * @property {boolean|string} [isEnabled] + * Is the scheduler enabled? For the `backlog` scheduler, the value might be `Paused`. + * @property {boolean} [isActive] + * Is the scheduler's action currently running? + * @property {string|null} [startTime] + * The time of day in which this scheduler runs (format: ISO-8601 time), or `null` if not applicable. + * @property {number} [cycleTime] + * The duration in milliseconds between each run, or `null` if not applicable. + * @property {number} [nextRun] + * The duration in milliseconds until the next run. + * @property {string} [lastRun] + * The date and time of the previous run (format: ISO-8601 date-time). + * @property {boolean} [isSilent] + * Is the scheduler silent? + */ + const state = { memoryUsage: null, schedulers: [], @@ -15,9 +43,15 @@ const mutations = { }; const getters = { - // Get a scheduler object using a key - getScheduler: state => key => { - return state.schedulers.find(scheduler => key === scheduler.key); + getScheduler: state => { + /** + * Get a scheduler object using a key. + * + * @param {string} key The combined quality to split. + * @returns {Scheduler|object} The scheduler object or an empty object if not found. + */ + const _getScheduler = key => state.schedulers.find(scheduler => key === scheduler.key) || {}; + return _getScheduler; } }; diff --git a/themes-default/slim/test/__fixtures__/common.json b/themes-default/slim/test/__fixtures__/common.json index 9fd7aee38f..75fc93fd2b 100644 --- a/themes-default/slim/test/__fixtures__/common.json +++ b/themes-default/slim/test/__fixtures__/common.json @@ -26,6 +26,8 @@ "dbPath": "C:\\Medusa\\Data\\main.db", "cacheDir": "C:\\Medusa\\Data\\cache", "logDir": "C:\\Medusa\\Data\\Logs", + "datePreset": "%Y-%m-%d", + "timePreset": "%H:%M", "postProcessing": { "postponeIfSyncFiles": true, "showDownloadDir": "C:\\Downloads\\TV", @@ -430,6 +432,157 @@ } ] }, + "system": { + "memoryUsage": "56.85 MB", + "schedulers": [ + { + "key": "dailySearch", + "name": "Daily Search", + "isAlive": true, + "isEnabled": true, + "isActive": false, + "startTime": null, + "cycleTime": 2400000, + "nextRun": 2386016, + "lastRun": "2019-06-10T21:00:53.477616", + "isSilent": true + }, + { + "key": "backlog", + "name": "Backlog", + "isAlive": true, + "isEnabled": true, + "isActive": false, + "startTime": null, + "cycleTime": 43200000, + "nextRun": 43186017, + "lastRun": "2019-06-10T21:00:53.478603", + "isSilent": true + }, + { + "key": "showUpdate", + "name": "Show Update", + "isAlive": true, + "isEnabled": true, + "isActive": false, + "startTime": "03:52:00", + "cycleTime": 3600000, + "nextRun": 24652538, + "lastRun": "2019-06-10T21:00:00", + "isSilent": true + }, + { + "key": "versionCheck", + "name": "Version Check", + "isAlive": true, + "isEnabled": true, + "isActive": false, + "startTime": null, + "cycleTime": 3600000, + "nextRun": 3586035, + "lastRun": "2019-06-10T21:00:53.496593", + "isSilent": false + }, + { + "key": "showQueue", + "name": "Show Queue", + "isAlive": true, + "isEnabled": true, + "isActive": false, + "startTime": null, + "cycleTime": 3000, + "nextRun": 1110, + "lastRun": "2019-06-10T21:01:05.571404", + "isSilent": true + }, + { + "key": "searchQueue", + "name": "Search Queue", + "isAlive": true, + "isEnabled": true, + "isActive": false, + "startTime": null, + "cycleTime": 3000, + "nextRun": 1110, + "lastRun": "2019-06-10T21:01:05.571404", + "isSilent": true + }, + { + "key": "properFinder", + "name": "Proper Finder", + "isAlive": true, + "isEnabled": true, + "isActive": false, + "startTime": null, + "cycleTime": 14400000, + "nextRun": 14386017, + "lastRun": "2019-06-10T21:00:53.478603", + "isSilent": false + }, + { + "key": "postProcess", + "name": "Post Process", + "isAlive": true, + "isEnabled": false, + "isActive": false, + "startTime": null, + "cycleTime": 600000, + "nextRun": null, + "lastRun": "2019-06-10T21:00:53.478603", + "isSilent": true + }, + { + "key": "subtitlesFinder", + "name": "Subtitles Finder", + "isAlive": true, + "isEnabled": true, + "isActive": false, + "startTime": null, + "cycleTime": 3600000, + "nextRun": 3586017, + "lastRun": "2019-06-10T21:00:53.478603", + "isSilent": false + }, + { + "key": "traktChecker", + "name": "Trakt Checker", + "isAlive": true, + "isEnabled": false, + "isActive": false, + "startTime": null, + "cycleTime": 3600000, + "nextRun": null, + "lastRun": "2019-06-10T20:05:53.478603", + "isSilent": true + }, + { + "key": "torrentChecker", + "name": "Torrent Checker", + "isAlive": true, + "isEnabled": false, + "isActive": false, + "startTime": null, + "cycleTime": 3600000, + "nextRun": null, + "lastRun": "2019-06-10T21:00:53.478603", + "isSilent": false + } + ], + "showQueue": [] + }, + "stats": { + "overall": { + "episodes": { + "downloaded": 100, + "snatched": 5, + "total": 150 + }, + "shows": { + "active": 2, + "total": 2 + } + } + }, "metadata": { "metadataProviders": { "kodi_12plus": { diff --git a/themes-default/slim/test/specs/__snapshots__/app-footer.spec.js.snap b/themes-default/slim/test/specs/__snapshots__/app-footer.spec.js.snap new file mode 100644 index 0000000000..614450358d --- /dev/null +++ b/themes-default/slim/test/specs/__snapshots__/app-footer.spec.js.snap @@ -0,0 +1,94 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`AppFooter renders 1`] = ` + +`; diff --git a/themes-default/slim/test/specs/app-footer.spec.js b/themes-default/slim/test/specs/app-footer.spec.js new file mode 100644 index 0000000000..9f4db93581 --- /dev/null +++ b/themes-default/slim/test/specs/app-footer.spec.js @@ -0,0 +1,42 @@ +import Vuex, { Store } from 'vuex'; +import VueRouter from 'vue-router'; +import { createLocalVue, shallowMount } from '@vue/test-utils'; +import tk from 'timekeeper'; + +import { AppFooter } from '../../src/components'; +import constsModule from '../../src/store/modules/consts'; +import systemModule from '../../src/store/modules/system'; +import fixtures from '../__fixtures__/common'; + +describe('AppFooter', () => { + let localVue; + let store; + + beforeEach(() => { + localVue = createLocalVue(); + localVue.use(Vuex); + localVue.use(VueRouter); + + const { state } = fixtures; + store = new Store({ + modules: { + consts: constsModule, + system: systemModule + } + }); + store.replaceState(state); + }); + + it('renders', () => { + tk.travel(new Date(2019, 6, 10, 9, 51, 21, 300)); + + const wrapper = shallowMount(AppFooter, { + localVue, + store + }); + + expect(wrapper.element).toMatchSnapshot(); + + tk.reset(); + }); +}); diff --git a/themes-default/slim/views/layouts/main.mako b/themes-default/slim/views/layouts/main.mako index 6a1cf39e75..1f12b9526b 100644 --- a/themes-default/slim/views/layouts/main.mako +++ b/themes-default/slim/views/layouts/main.mako @@ -72,7 +72,7 @@ <%block name="content" /> - <%include file="/partials/footer.mako" /> + diff --git a/themes-default/slim/views/partials/footer.mako b/themes-default/slim/views/partials/footer.mako deleted file mode 100644 index 697e1356bd..0000000000 --- a/themes-default/slim/views/partials/footer.mako +++ /dev/null @@ -1,59 +0,0 @@ -<%! - from datetime import datetime - from time import time - from contextlib2 import suppress - import os - import re - from medusa import app - from medusa.helper.common import pretty_file_size - from medusa.sbdatetime import sbdatetime - from medusa.show.show import Show - - mem_usage = None - with suppress(ImportError): - from psutil import Process - from os import getpid - mem_usage = 'psutil' - - with suppress(ImportError): - if not mem_usage: - import resource # resource module is unix only - mem_usage = 'resource' -%> - -% if loggedIn: - <% - stats = Show.overall_stats() - ep_downloaded = stats['episodes']['downloaded'] - ep_snatched = stats['episodes']['snatched'] - ep_total = stats['episodes']['total'] - ep_percentage = '' if ep_total == 0 else '(%s%%)' % re.sub(r'(\d+)(\.\d)\d+', r'\1\2', str((float(ep_downloaded)/float(ep_total))*100)) - %> - -% endif - diff --git a/themes-default/slim/yarn.lock b/themes-default/slim/yarn.lock index 32f4d5a9c1..788a93bb33 100644 --- a/themes-default/slim/yarn.lock +++ b/themes-default/slim/yarn.lock @@ -11826,6 +11826,11 @@ timed-out@^4.0.0, timed-out@^4.0.1: resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= +timekeeper@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/timekeeper/-/timekeeper-2.2.0.tgz#9645731fce9e3280a18614a57a9d1b72af3ca368" + integrity sha512-W3AmPTJWZkRwu+iSNxPIsLZ2ByADsOLbbLxe46UJyWj3mlYLlwucKiq+/dPm0l9wTzqoF3/2PH0AGFCebjq23A== + timers-browserify@^2.0.4: version "2.0.10" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae" diff --git a/themes/dark/assets/js/app.js b/themes/dark/assets/js/app.js index 5f1c5c4e54..595822d355 100644 --- a/themes/dark/assets/js/app.js +++ b/themes/dark/assets/js/app.js @@ -8,7 +8,7 @@ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n/* harmony import */ var vue_async_computed__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-async-computed */ \"./node_modules/vue-async-computed/dist/vue-async-computed.esm.js\");\n/* harmony import */ var vue_snotify__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-snotify */ \"./node_modules/vue-snotify/vue-snotify.esm.js\");\n/* harmony import */ var _global_vue_shim__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./global-vue-shim */ \"./src/global-vue-shim.js\");\n/* harmony import */ var _router__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./router */ \"./src/router/index.js\");\n/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./store */ \"./src/store/index.js\");\n/* harmony import */ var _utils_core__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/core */ \"./src/utils/core.js\");\n\n\n\n\n\n\n\nvue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].config.devtools = true;\nvue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].config.performance = true; // Register plugins\n\nvue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].use(vue_async_computed__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\nvue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].use(vue_snotify__WEBPACK_IMPORTED_MODULE_2__[\"default\"]); // @TODO: Remove this before v1.0.0\n\nObject(_global_vue_shim__WEBPACK_IMPORTED_MODULE_3__[\"registerGlobalComponents\"])();\nconst app = new vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"]({\n name: 'App',\n router: _router__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n store: _store__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n\n data() {\n return {\n globalLoading: false,\n pageComponent: false\n };\n },\n\n mounted() {\n if (_utils_core__WEBPACK_IMPORTED_MODULE_6__[\"isDevelopment\"]) {\n console.log('App Mounted!');\n }\n\n if (!window.location.pathname.includes('/login')) {\n const {\n $store\n } = this;\n Promise.all([$store.dispatch('login', {\n username: window.username\n }), $store.dispatch('getConfig')]).then(([_, config]) => {\n if (_utils_core__WEBPACK_IMPORTED_MODULE_6__[\"isDevelopment\"]) {\n console.log('App Loaded!');\n } // Legacy - send config.main to jQuery (received by index.js)\n\n\n const event = new CustomEvent('medusa-config-loaded', {\n detail: config.main\n });\n window.dispatchEvent(event);\n }).catch(error => {\n console.debug(error);\n alert('Unable to connect to Medusa!'); // eslint-disable-line no-alert\n });\n }\n }\n\n}).$mount('#vue-wrap');\n/* harmony default export */ __webpack_exports__[\"default\"] = (app);\n\n//# sourceURL=webpack:///./src/app.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n/* harmony import */ var vue_async_computed__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-async-computed */ \"./node_modules/vue-async-computed/dist/vue-async-computed.esm.js\");\n/* harmony import */ var vue_snotify__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-snotify */ \"./node_modules/vue-snotify/vue-snotify.esm.js\");\n/* harmony import */ var _global_vue_shim__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./global-vue-shim */ \"./src/global-vue-shim.js\");\n/* harmony import */ var _router__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./router */ \"./src/router/index.js\");\n/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./store */ \"./src/store/index.js\");\n/* harmony import */ var _utils_core__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/core */ \"./src/utils/core.js\");\n\n\n\n\n\n\n\nvue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].config.devtools = true;\nvue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].config.performance = true; // Register plugins\n\nvue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].use(vue_async_computed__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\nvue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].use(vue_snotify__WEBPACK_IMPORTED_MODULE_2__[\"default\"]); // @TODO: Remove this before v1.0.0\n\nObject(_global_vue_shim__WEBPACK_IMPORTED_MODULE_3__[\"registerGlobalComponents\"])();\nconst app = new vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"]({\n name: 'App',\n router: _router__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n store: _store__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n\n data() {\n return {\n globalLoading: false,\n pageComponent: false\n };\n },\n\n mounted() {\n if (_utils_core__WEBPACK_IMPORTED_MODULE_6__[\"isDevelopment\"]) {\n console.log('App Mounted!');\n }\n\n if (!window.location.pathname.includes('/login')) {\n const {\n $store\n } = this;\n Promise.all([$store.dispatch('login', {\n username: window.username\n }), $store.dispatch('getConfig'), $store.dispatch('getStats')]).then(([_, config]) => {\n if (_utils_core__WEBPACK_IMPORTED_MODULE_6__[\"isDevelopment\"]) {\n console.log('App Loaded!');\n } // Legacy - send config.main to jQuery (received by index.js)\n\n\n const event = new CustomEvent('medusa-config-loaded', {\n detail: config.main\n });\n window.dispatchEvent(event);\n }).catch(error => {\n console.debug(error);\n alert('Unable to connect to Medusa!'); // eslint-disable-line no-alert\n });\n }\n }\n\n}).$mount('#vue-wrap');\n/* harmony default export */ __webpack_exports__[\"default\"] = (app);\n\n//# sourceURL=webpack:///./src/app.js?"); /***/ }) diff --git a/themes/dark/assets/js/medusa-runtime.js b/themes/dark/assets/js/medusa-runtime.js index 7f34f6e58c..cb08a557a9 100644 --- a/themes/dark/assets/js/medusa-runtime.js +++ b/themes/dark/assets/js/medusa-runtime.js @@ -48,6 +48,18 @@ eval("__webpack_require__.r(__webpack_exports__);\n//\n//\n//\n//\n//\n//\n//\n/ /***/ }), +/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./src/components/app-footer.vue?vue&type=script&lang=js&": +/*!**************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./src/components/app-footer.vue?vue&type=script&lang=js& ***! + \**************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n/* harmony import */ var date_fns_format__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! date-fns/format */ \"./node_modules/date-fns/esm/format/index.js\");\n/* harmony import */ var _utils_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/core */ \"./src/utils/core.js\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers */ \"./src/components/helpers/index.js\");\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: 'app-footer',\n components: {\n AppLink: _helpers__WEBPACK_IMPORTED_MODULE_3__[\"AppLink\"]\n },\n computed: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_0__[\"mapState\"])(['config', 'stats', 'system']), Object(vuex__WEBPACK_IMPORTED_MODULE_0__[\"mapGetters\"])(['getStatus', 'getScheduler']), {\n snatchedStatus() {\n const status = this.getStatus({\n key: 'snatched'\n });\n return status ? status.value : '';\n },\n\n episodePercentage() {\n const {\n downloaded,\n total\n } = this.stats.overall.episodes;\n\n if (!total) {\n return '';\n }\n\n const raw = downloaded / total * 100;\n return raw.toFixed(1) + '%';\n },\n\n nowInUserPreset() {\n const {\n datePreset,\n timePreset\n } = this.config;\n const preset = Object(_utils_core__WEBPACK_IMPORTED_MODULE_2__[\"convertDateFormat\"])(\"\".concat(datePreset, \" \").concat(timePreset));\n return Object(date_fns_format__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(new Date(), preset);\n }\n\n }),\n methods: {\n /**\n * Return a formatted next run time of the scheduler matching the provided key.\n *\n * @param {string} scheduler A scheduler key.\n * @returns {string} The formatted next run time.\n */\n schedulerNextRun(scheduler) {\n /** @type {import('../store/modules/system').Scheduler} */\n const {\n nextRun\n } = this.getScheduler(scheduler); // The next run can be `undefined` when the scheduler was not initialized\n // on the backend, and `null` when the scheduler is not enabled.\n\n if (nextRun === undefined) {\n return '??:??:??';\n }\n\n if (nextRun === null) {\n return 'Disabled';\n }\n\n return this.formatTimeDuration(nextRun);\n },\n\n /**\n * Return a formatted string representing the provided duration.\n *\n * This function will not use any units greater than a day.\n * @param {number} durationInMs Duration of time in milliseconds.\n * @returns {string} The formatted duration.\n *\n * @example\n */\n formatTimeDuration(durationInMs) {\n const days = parseInt(durationInMs / 86400000, 10);\n let daysText = '';\n\n if (days > 0) {\n daysText = String(days) + (days > 1 ? ' days, ' : ' day, ');\n }\n\n const date = new Date(durationInMs % 86400000);\n\n const zeroPad = (num, len = 2) => String(num).padStart(len, '0');\n\n const hours = String(date.getUTCHours());\n const minutes = zeroPad(date.getUTCMinutes());\n const seconds = zeroPad(date.getUTCSeconds() + Math.round(date.getUTCMilliseconds() / 1000));\n return daysText + [hours, minutes, seconds].join(':');\n }\n\n }\n});\n\n//# sourceURL=webpack:///./src/components/app-footer.vue?./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options"); + +/***/ }), + /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./src/components/app-header.vue?vue&type=script&lang=js&": /*!**************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./src/components/app-header.vue?vue&type=script&lang=js& ***! @@ -712,6 +724,18 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ }), +/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/app-footer.vue?vue&type=template&id=844e7d52&scoped=true&": +/*!****************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/app-footer.vue?vue&type=template&id=844e7d52&scoped=true& ***! + \****************************************************************************************************************************************************************************************************************/ +/*! exports provided: render, staticRenderFns */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"footer\", [\n _c(\n \"div\",\n { staticClass: \"footer clearfix\" },\n [\n _c(\"span\", { staticClass: \"footerhighlight\" }, [\n _vm._v(_vm._s(_vm.stats.overall.shows.total))\n ]),\n _vm._v(\" Shows (\"),\n _c(\"span\", { staticClass: \"footerhighlight\" }, [\n _vm._v(_vm._s(_vm.stats.overall.shows.active))\n ]),\n _vm._v(\" Active)\\n | \"),\n _c(\"span\", { staticClass: \"footerhighlight\" }, [\n _vm._v(_vm._s(_vm.stats.overall.episodes.downloaded))\n ]),\n _vm._v(\" \"),\n _vm.stats.overall.episodes.snatched\n ? [\n _c(\n \"span\",\n { staticClass: \"footerhighlight\" },\n [\n _c(\n \"app-link\",\n {\n attrs: {\n href:\n \"manage/episodeStatuses?whichStatus=\" +\n _vm.snatchedStatus,\n title: \"View overview of snatched episodes\"\n }\n },\n [_vm._v(\"+\" + _vm._s(_vm.stats.overall.episodes.snatched))]\n )\n ],\n 1\n ),\n _vm._v(\"\\n Snatched\\n \")\n ]\n : _vm._e(),\n _vm._v(\"\\n / \"),\n _c(\"span\", { staticClass: \"footerhighlight\" }, [\n _vm._v(_vm._s(_vm.stats.overall.episodes.total))\n ]),\n _vm._v(\" Episodes Downloaded \"),\n _vm.episodePercentage\n ? _c(\"span\", { staticClass: \"footerhighlight\" }, [\n _vm._v(\"(\" + _vm._s(_vm.episodePercentage) + \")\")\n ])\n : _vm._e(),\n _vm._v(\"\\n | Daily Search: \"),\n _c(\"span\", { staticClass: \"footerhighlight\" }, [\n _vm._v(_vm._s(_vm.schedulerNextRun(\"dailySearch\")))\n ]),\n _vm._v(\"\\n | Backlog Search: \"),\n _c(\"span\", { staticClass: \"footerhighlight\" }, [\n _vm._v(_vm._s(_vm.schedulerNextRun(\"backlog\")))\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n [\n _vm.system.memoryUsage\n ? [\n _vm._v(\"\\n Memory used: \"),\n _c(\"span\", { staticClass: \"footerhighlight\" }, [\n _vm._v(_vm._s(_vm.system.memoryUsage))\n ]),\n _vm._v(\" |\\n \")\n ]\n : _vm._e(),\n _vm._v(\" \"),\n _vm._v(\"\\n Branch: \"),\n _c(\"span\", { staticClass: \"footerhighlight\" }, [\n _vm._v(_vm._s(_vm.config.branch || \"Unknown\"))\n ]),\n _vm._v(\" |\\n Now: \"),\n _c(\"span\", { staticClass: \"footerhighlight\" }, [\n _vm._v(_vm._s(_vm.nowInUserPreset))\n ])\n ],\n 2\n )\n ],\n 2\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack:///./src/components/app-footer.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options"); + +/***/ }), + /***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/app-header.vue?vue&type=template&id=41e9b56e&": /*!****************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/app-header.vue?vue&type=template&id=41e9b56e& ***! @@ -1424,6 +1448,42 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _nod /***/ }), +/***/ "./src/components/app-footer.vue": +/*!***************************************!*\ + !*** ./src/components/app-footer.vue ***! + \***************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _app_footer_vue_vue_type_template_id_844e7d52_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./app-footer.vue?vue&type=template&id=844e7d52&scoped=true& */ \"./src/components/app-footer.vue?vue&type=template&id=844e7d52&scoped=true&\");\n/* harmony import */ var _app_footer_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./app-footer.vue?vue&type=script&lang=js& */ \"./src/components/app-footer.vue?vue&type=script&lang=js&\");\n/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _app_footer_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _app_footer_vue_vue_type_template_id_844e7d52_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _app_footer_vue_vue_type_template_id_844e7d52_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n \"844e7d52\",\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/components/app-footer.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n//# sourceURL=webpack:///./src/components/app-footer.vue?"); + +/***/ }), + +/***/ "./src/components/app-footer.vue?vue&type=script&lang=js&": +/*!****************************************************************!*\ + !*** ./src/components/app-footer.vue?vue&type=script&lang=js& ***! + \****************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_app_footer_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib!../../node_modules/vue-loader/lib??vue-loader-options!./app-footer.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./src/components/app-footer.vue?vue&type=script&lang=js&\");\n/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_app_footer_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n//# sourceURL=webpack:///./src/components/app-footer.vue?"); + +/***/ }), + +/***/ "./src/components/app-footer.vue?vue&type=template&id=844e7d52&scoped=true&": +/*!**********************************************************************************!*\ + !*** ./src/components/app-footer.vue?vue&type=template&id=844e7d52&scoped=true& ***! + \**********************************************************************************/ +/*! exports provided: render, staticRenderFns */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_app_footer_vue_vue_type_template_id_844e7d52_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./app-footer.vue?vue&type=template&id=844e7d52&scoped=true& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/app-footer.vue?vue&type=template&id=844e7d52&scoped=true&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_app_footer_vue_vue_type_template_id_844e7d52_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_app_footer_vue_vue_type_template_id_844e7d52_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n//# sourceURL=webpack:///./src/components/app-footer.vue?"); + +/***/ }), + /***/ "./src/components/app-header.vue": /*!***************************************!*\ !*** ./src/components/app-header.vue ***! @@ -2376,11 +2436,11 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _404 /*!*********************************!*\ !*** ./src/components/index.js ***! \*********************************/ -/*! exports provided: AddRecommended, AddShowOptions, AddShows, AnidbReleaseGroupUi, AppHeader, Backstretch, Config, ConfigPostProcessing, Home, IRC, Login, Logs, ManualPostProcess, RootDirs, Show, ShowHeader, SnatchSelection, Status, SubMenu, SubtitleSearch, NotFound, AppLink, Asset, ConfigTemplate, ConfigTextboxNumber, ConfigTextbox, ConfigToggleSlider, FileBrowser, LanguageSelect, NamePattern, PlotInfo, QualityChooser, QualityPill, ScrollButtons, SelectList, ShowSelector, StateSwitch */ +/*! exports provided: AddRecommended, AddShowOptions, AddShows, AnidbReleaseGroupUi, AppFooter, AppHeader, Backstretch, Config, ConfigPostProcessing, Home, IRC, Login, Logs, ManualPostProcess, RootDirs, Show, ShowHeader, SnatchSelection, Status, SubMenu, SubtitleSearch, NotFound, AppLink, Asset, ConfigTemplate, ConfigTextboxNumber, ConfigTextbox, ConfigToggleSlider, FileBrowser, LanguageSelect, NamePattern, PlotInfo, QualityChooser, QualityPill, ScrollButtons, SelectList, ShowSelector, StateSwitch */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _add_recommended_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./add-recommended.vue */ \"./src/components/add-recommended.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AddRecommended\", function() { return _add_recommended_vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _add_show_options_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./add-show-options.vue */ \"./src/components/add-show-options.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AddShowOptions\", function() { return _add_show_options_vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _add_shows_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./add-shows.vue */ \"./src/components/add-shows.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AddShows\", function() { return _add_shows_vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _anidb_release_group_ui_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./anidb-release-group-ui.vue */ \"./src/components/anidb-release-group-ui.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AnidbReleaseGroupUi\", function() { return _anidb_release_group_ui_vue__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _app_header_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./app-header.vue */ \"./src/components/app-header.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AppHeader\", function() { return _app_header_vue__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _backstretch_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./backstretch.vue */ \"./src/components/backstretch.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Backstretch\", function() { return _backstretch_vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony import */ var _config_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./config.vue */ \"./src/components/config.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Config\", function() { return _config_vue__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony import */ var _config_post_processing_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./config-post-processing.vue */ \"./src/components/config-post-processing.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConfigPostProcessing\", function() { return _config_post_processing_vue__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony import */ var _home_vue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./home.vue */ \"./src/components/home.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Home\", function() { return _home_vue__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n/* harmony import */ var _irc_vue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./irc.vue */ \"./src/components/irc.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"IRC\", function() { return _irc_vue__WEBPACK_IMPORTED_MODULE_9__[\"default\"]; });\n\n/* harmony import */ var _login_vue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./login.vue */ \"./src/components/login.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Login\", function() { return _login_vue__WEBPACK_IMPORTED_MODULE_10__[\"default\"]; });\n\n/* harmony import */ var _logs_vue__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./logs.vue */ \"./src/components/logs.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Logs\", function() { return _logs_vue__WEBPACK_IMPORTED_MODULE_11__[\"default\"]; });\n\n/* harmony import */ var _manual_post_process_vue__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./manual-post-process.vue */ \"./src/components/manual-post-process.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ManualPostProcess\", function() { return _manual_post_process_vue__WEBPACK_IMPORTED_MODULE_12__[\"default\"]; });\n\n/* harmony import */ var _root_dirs_vue__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./root-dirs.vue */ \"./src/components/root-dirs.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RootDirs\", function() { return _root_dirs_vue__WEBPACK_IMPORTED_MODULE_13__[\"default\"]; });\n\n/* harmony import */ var _show_vue__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./show.vue */ \"./src/components/show.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Show\", function() { return _show_vue__WEBPACK_IMPORTED_MODULE_14__[\"default\"]; });\n\n/* harmony import */ var _show_header_vue__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./show-header.vue */ \"./src/components/show-header.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ShowHeader\", function() { return _show_header_vue__WEBPACK_IMPORTED_MODULE_15__[\"default\"]; });\n\n/* harmony import */ var _snatch_selection_vue__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./snatch-selection.vue */ \"./src/components/snatch-selection.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SnatchSelection\", function() { return _snatch_selection_vue__WEBPACK_IMPORTED_MODULE_16__[\"default\"]; });\n\n/* harmony import */ var _status_vue__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./status.vue */ \"./src/components/status.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Status\", function() { return _status_vue__WEBPACK_IMPORTED_MODULE_17__[\"default\"]; });\n\n/* harmony import */ var _sub_menu_vue__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./sub-menu.vue */ \"./src/components/sub-menu.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SubMenu\", function() { return _sub_menu_vue__WEBPACK_IMPORTED_MODULE_18__[\"default\"]; });\n\n/* harmony import */ var _subtitle_search_vue__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./subtitle-search.vue */ \"./src/components/subtitle-search.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SubtitleSearch\", function() { return _subtitle_search_vue__WEBPACK_IMPORTED_MODULE_19__[\"default\"]; });\n\n/* harmony import */ var _http__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./http */ \"./src/components/http/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"NotFound\", function() { return _http__WEBPACK_IMPORTED_MODULE_20__[\"NotFound\"]; });\n\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./helpers */ \"./src/components/helpers/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AppLink\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"AppLink\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Asset\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"Asset\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConfigTemplate\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"ConfigTemplate\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConfigTextboxNumber\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"ConfigTextboxNumber\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConfigTextbox\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"ConfigTextbox\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConfigToggleSlider\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"ConfigToggleSlider\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FileBrowser\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"FileBrowser\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LanguageSelect\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"LanguageSelect\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"NamePattern\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"NamePattern\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PlotInfo\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"PlotInfo\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QualityChooser\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"QualityChooser\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QualityPill\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"QualityPill\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ScrollButtons\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"ScrollButtons\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SelectList\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"SelectList\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ShowSelector\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"ShowSelector\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"StateSwitch\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"StateSwitch\"]; });\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=webpack:///./src/components/index.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _add_recommended_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./add-recommended.vue */ \"./src/components/add-recommended.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AddRecommended\", function() { return _add_recommended_vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _add_show_options_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./add-show-options.vue */ \"./src/components/add-show-options.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AddShowOptions\", function() { return _add_show_options_vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _add_shows_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./add-shows.vue */ \"./src/components/add-shows.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AddShows\", function() { return _add_shows_vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _anidb_release_group_ui_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./anidb-release-group-ui.vue */ \"./src/components/anidb-release-group-ui.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AnidbReleaseGroupUi\", function() { return _anidb_release_group_ui_vue__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _app_footer_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./app-footer.vue */ \"./src/components/app-footer.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AppFooter\", function() { return _app_footer_vue__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _app_header_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./app-header.vue */ \"./src/components/app-header.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AppHeader\", function() { return _app_header_vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony import */ var _backstretch_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./backstretch.vue */ \"./src/components/backstretch.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Backstretch\", function() { return _backstretch_vue__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony import */ var _config_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./config.vue */ \"./src/components/config.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Config\", function() { return _config_vue__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony import */ var _config_post_processing_vue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./config-post-processing.vue */ \"./src/components/config-post-processing.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConfigPostProcessing\", function() { return _config_post_processing_vue__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n/* harmony import */ var _home_vue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./home.vue */ \"./src/components/home.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Home\", function() { return _home_vue__WEBPACK_IMPORTED_MODULE_9__[\"default\"]; });\n\n/* harmony import */ var _irc_vue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./irc.vue */ \"./src/components/irc.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"IRC\", function() { return _irc_vue__WEBPACK_IMPORTED_MODULE_10__[\"default\"]; });\n\n/* harmony import */ var _login_vue__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./login.vue */ \"./src/components/login.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Login\", function() { return _login_vue__WEBPACK_IMPORTED_MODULE_11__[\"default\"]; });\n\n/* harmony import */ var _logs_vue__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./logs.vue */ \"./src/components/logs.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Logs\", function() { return _logs_vue__WEBPACK_IMPORTED_MODULE_12__[\"default\"]; });\n\n/* harmony import */ var _manual_post_process_vue__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./manual-post-process.vue */ \"./src/components/manual-post-process.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ManualPostProcess\", function() { return _manual_post_process_vue__WEBPACK_IMPORTED_MODULE_13__[\"default\"]; });\n\n/* harmony import */ var _root_dirs_vue__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./root-dirs.vue */ \"./src/components/root-dirs.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RootDirs\", function() { return _root_dirs_vue__WEBPACK_IMPORTED_MODULE_14__[\"default\"]; });\n\n/* harmony import */ var _show_vue__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./show.vue */ \"./src/components/show.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Show\", function() { return _show_vue__WEBPACK_IMPORTED_MODULE_15__[\"default\"]; });\n\n/* harmony import */ var _show_header_vue__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./show-header.vue */ \"./src/components/show-header.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ShowHeader\", function() { return _show_header_vue__WEBPACK_IMPORTED_MODULE_16__[\"default\"]; });\n\n/* harmony import */ var _snatch_selection_vue__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./snatch-selection.vue */ \"./src/components/snatch-selection.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SnatchSelection\", function() { return _snatch_selection_vue__WEBPACK_IMPORTED_MODULE_17__[\"default\"]; });\n\n/* harmony import */ var _status_vue__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./status.vue */ \"./src/components/status.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Status\", function() { return _status_vue__WEBPACK_IMPORTED_MODULE_18__[\"default\"]; });\n\n/* harmony import */ var _sub_menu_vue__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./sub-menu.vue */ \"./src/components/sub-menu.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SubMenu\", function() { return _sub_menu_vue__WEBPACK_IMPORTED_MODULE_19__[\"default\"]; });\n\n/* harmony import */ var _subtitle_search_vue__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./subtitle-search.vue */ \"./src/components/subtitle-search.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SubtitleSearch\", function() { return _subtitle_search_vue__WEBPACK_IMPORTED_MODULE_20__[\"default\"]; });\n\n/* harmony import */ var _http__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./http */ \"./src/components/http/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"NotFound\", function() { return _http__WEBPACK_IMPORTED_MODULE_21__[\"NotFound\"]; });\n\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./helpers */ \"./src/components/helpers/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AppLink\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"AppLink\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Asset\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"Asset\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConfigTemplate\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"ConfigTemplate\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConfigTextboxNumber\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"ConfigTextboxNumber\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConfigTextbox\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"ConfigTextbox\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConfigToggleSlider\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"ConfigToggleSlider\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FileBrowser\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"FileBrowser\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LanguageSelect\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"LanguageSelect\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"NamePattern\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"NamePattern\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PlotInfo\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"PlotInfo\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QualityChooser\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"QualityChooser\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QualityPill\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"QualityPill\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ScrollButtons\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"ScrollButtons\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SelectList\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"SelectList\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ShowSelector\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"ShowSelector\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"StateSwitch\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"StateSwitch\"]; });\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=webpack:///./src/components/index.js?"); /***/ }), @@ -2812,7 +2872,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _nod /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"registerGlobalComponents\", function() { return registerGlobalComponents; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n/* harmony import */ var vue_meta__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-meta */ \"./node_modules/vue-meta/dist/vue-meta.esm.js\");\n/* harmony import */ var vue_async_computed__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-async-computed */ \"./node_modules/vue-async-computed/dist/vue-async-computed.esm.js\");\n/* harmony import */ var vue_snotify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue-snotify */ \"./node_modules/vue-snotify/vue-snotify.esm.js\");\n/* harmony import */ var _components__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components */ \"./src/components/index.js\");\n/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./store */ \"./src/store/index.js\");\n/* harmony import */ var _utils_core__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/core */ \"./src/utils/core.js\");\n// @TODO: Remove this file before v1.0.0\n\n\n\n\n\n\n\n/**\n * Register global components and x-template components.\n */\n\nconst registerGlobalComponents = () => {\n // Start with the x-template components\n let {\n components\n } = window; // Add global components (in use by `main.mako`)\n // @TODO: These should be registered in an `App.vue` component when possible,\n // along with some of the `main.mako` template\n\n components = components.concat([_components__WEBPACK_IMPORTED_MODULE_4__[\"AppHeader\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"ScrollButtons\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"SubMenu\"]]); // Add global components (in use by pages/components that are not SFCs yet)\n // Use this when it's not possible to use `components: { ... }` in a component's definition.\n // If a component that uses any of these is a SFC, please use the `components` key when defining it.\n // @TODO: Instead of globally registering these,\n // they should be registered in each component that uses them\n\n components = components.concat([_components__WEBPACK_IMPORTED_MODULE_4__[\"AddShowOptions\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"AnidbReleaseGroupUi\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"AppLink\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"Asset\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"Backstretch\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"ConfigTemplate\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"ConfigTextbox\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"ConfigTextboxNumber\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"ConfigToggleSlider\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"FileBrowser\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"LanguageSelect\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"PlotInfo\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"QualityChooser\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"QualityPill\"], // @FIXME: (sharkykh) Used in a hack/workaround in `static/js/ajax-episode-search.js`\n _components__WEBPACK_IMPORTED_MODULE_4__[\"RootDirs\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"SelectList\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"ShowSelector\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"StateSwitch\"]]); // Add components for pages that use `pageComponent`\n // @TODO: These need to be converted to Vue SFCs\n\n components = components.concat([_components__WEBPACK_IMPORTED_MODULE_4__[\"Home\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"ManualPostProcess\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"Show\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"SnatchSelection\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"Status\"]]); // Register the components globally\n\n components.forEach(component => {\n if (_utils_core__WEBPACK_IMPORTED_MODULE_6__[\"isDevelopment\"]) {\n console.debug(\"Registering \".concat(component.name));\n }\n\n vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].component(component.name, component);\n });\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (() => {\n const warningTemplate = (name, state) => \"\".concat(name, \" is using the global Vuex '\").concat(state, \"' state, \") + \"please replace that with a local one using: mapState(['\".concat(state, \"'])\");\n\n vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].mixin({\n data() {\n // These are only needed for the root Vue\n if (this.$root === this) {\n return {\n globalLoading: true,\n pageComponent: false\n };\n }\n\n return {};\n },\n\n mounted() {\n if (this.$root === this && !window.location.pathname.includes('/login')) {\n const {\n username\n } = window;\n Promise.all([\n /* This is used by the `app-header` component\n to only show the logout button if a username is set */\n _store__WEBPACK_IMPORTED_MODULE_5__[\"default\"].dispatch('login', {\n username\n }), _store__WEBPACK_IMPORTED_MODULE_5__[\"default\"].dispatch('getConfig')]).then(([_, config]) => {\n this.$emit('loaded'); // Legacy - send config.main to jQuery (received by index.js)\n\n const event = new CustomEvent('medusa-config-loaded', {\n detail: config.main\n });\n window.dispatchEvent(event);\n }).catch(error => {\n console.debug(error);\n alert('Unable to connect to Medusa!'); // eslint-disable-line no-alert\n });\n }\n\n this.$once('loaded', () => {\n this.$root.globalLoading = false;\n });\n },\n\n // Make auth and config accessible to all components\n // @TODO: Remove this completely\n computed: {\n // Deprecate the global `Vuex.mapState(['auth', 'config'])`\n auth() {\n if (_utils_core__WEBPACK_IMPORTED_MODULE_6__[\"isDevelopment\"] && !this.__VUE_DEVTOOLS_UID__) {\n console.warn(warningTemplate(this._name, 'auth'));\n }\n\n return this.$store.state.auth;\n },\n\n config() {\n if (_utils_core__WEBPACK_IMPORTED_MODULE_6__[\"isDevelopment\"] && !this.__VUE_DEVTOOLS_UID__) {\n console.warn(warningTemplate(this._name, 'config'));\n }\n\n return this.$store.state.config;\n }\n\n }\n });\n\n if (_utils_core__WEBPACK_IMPORTED_MODULE_6__[\"isDevelopment\"]) {\n console.debug('Loading local Vue');\n } // Register plugins\n\n\n vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].use(vue_async_computed__WEBPACK_IMPORTED_MODULE_2__[\"default\"]);\n vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].use(vue_meta__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].use(vue_snotify__WEBPACK_IMPORTED_MODULE_3__[\"default\"]);\n registerGlobalComponents();\n});\n\n//# sourceURL=webpack:///./src/global-vue-shim.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"registerGlobalComponents\", function() { return registerGlobalComponents; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n/* harmony import */ var vue_meta__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-meta */ \"./node_modules/vue-meta/dist/vue-meta.esm.js\");\n/* harmony import */ var vue_async_computed__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-async-computed */ \"./node_modules/vue-async-computed/dist/vue-async-computed.esm.js\");\n/* harmony import */ var vue_snotify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue-snotify */ \"./node_modules/vue-snotify/vue-snotify.esm.js\");\n/* harmony import */ var _components__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components */ \"./src/components/index.js\");\n/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./store */ \"./src/store/index.js\");\n/* harmony import */ var _utils_core__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/core */ \"./src/utils/core.js\");\n// @TODO: Remove this file before v1.0.0\n\n\n\n\n\n\n\n/**\n * Register global components and x-template components.\n */\n\nconst registerGlobalComponents = () => {\n // Start with the x-template components\n let {\n components\n } = window; // Add global components (in use by `main.mako`)\n // @TODO: These should be registered in an `App.vue` component when possible,\n // along with some of the `main.mako` template\n\n components = components.concat([_components__WEBPACK_IMPORTED_MODULE_4__[\"AppFooter\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"AppHeader\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"ScrollButtons\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"SubMenu\"]]); // Add global components (in use by pages/components that are not SFCs yet)\n // Use this when it's not possible to use `components: { ... }` in a component's definition.\n // If a component that uses any of these is a SFC, please use the `components` key when defining it.\n // @TODO: Instead of globally registering these,\n // they should be registered in each component that uses them\n\n components = components.concat([_components__WEBPACK_IMPORTED_MODULE_4__[\"AddShowOptions\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"AnidbReleaseGroupUi\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"AppLink\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"Asset\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"Backstretch\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"ConfigTemplate\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"ConfigTextbox\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"ConfigTextboxNumber\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"ConfigToggleSlider\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"FileBrowser\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"LanguageSelect\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"PlotInfo\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"QualityChooser\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"QualityPill\"], // @FIXME: (sharkykh) Used in a hack/workaround in `static/js/ajax-episode-search.js`\n _components__WEBPACK_IMPORTED_MODULE_4__[\"RootDirs\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"SelectList\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"ShowSelector\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"StateSwitch\"]]); // Add components for pages that use `pageComponent`\n // @TODO: These need to be converted to Vue SFCs\n\n components = components.concat([_components__WEBPACK_IMPORTED_MODULE_4__[\"Home\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"ManualPostProcess\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"Show\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"SnatchSelection\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"Status\"]]); // Register the components globally\n\n components.forEach(component => {\n if (_utils_core__WEBPACK_IMPORTED_MODULE_6__[\"isDevelopment\"]) {\n console.debug(\"Registering \".concat(component.name));\n }\n\n vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].component(component.name, component);\n });\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (() => {\n const warningTemplate = (name, state) => \"\".concat(name, \" is using the global Vuex '\").concat(state, \"' state, \") + \"please replace that with a local one using: mapState(['\".concat(state, \"'])\");\n\n vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].mixin({\n data() {\n // These are only needed for the root Vue\n if (this.$root === this) {\n return {\n globalLoading: true,\n pageComponent: false\n };\n }\n\n return {};\n },\n\n mounted() {\n if (this.$root === this && !window.location.pathname.includes('/login')) {\n const {\n username\n } = window;\n Promise.all([\n /* This is used by the `app-header` component\n to only show the logout button if a username is set */\n _store__WEBPACK_IMPORTED_MODULE_5__[\"default\"].dispatch('login', {\n username\n }), _store__WEBPACK_IMPORTED_MODULE_5__[\"default\"].dispatch('getConfig'), _store__WEBPACK_IMPORTED_MODULE_5__[\"default\"].dispatch('getStats')]).then(([_, config]) => {\n this.$emit('loaded'); // Legacy - send config.main to jQuery (received by index.js)\n\n const event = new CustomEvent('medusa-config-loaded', {\n detail: config.main\n });\n window.dispatchEvent(event);\n }).catch(error => {\n console.debug(error);\n alert('Unable to connect to Medusa!'); // eslint-disable-line no-alert\n });\n }\n\n this.$once('loaded', () => {\n this.$root.globalLoading = false;\n });\n },\n\n // Make auth and config accessible to all components\n // @TODO: Remove this completely\n computed: {\n // Deprecate the global `Vuex.mapState(['auth', 'config'])`\n auth() {\n if (_utils_core__WEBPACK_IMPORTED_MODULE_6__[\"isDevelopment\"] && !this.__VUE_DEVTOOLS_UID__) {\n console.warn(warningTemplate(this._name, 'auth'));\n }\n\n return this.$store.state.auth;\n },\n\n config() {\n if (_utils_core__WEBPACK_IMPORTED_MODULE_6__[\"isDevelopment\"] && !this.__VUE_DEVTOOLS_UID__) {\n console.warn(warningTemplate(this._name, 'config'));\n }\n\n return this.$store.state.config;\n }\n\n }\n });\n\n if (_utils_core__WEBPACK_IMPORTED_MODULE_6__[\"isDevelopment\"]) {\n console.debug('Loading local Vue');\n } // Register plugins\n\n\n vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].use(vue_async_computed__WEBPACK_IMPORTED_MODULE_2__[\"default\"]);\n vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].use(vue_meta__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].use(vue_snotify__WEBPACK_IMPORTED_MODULE_3__[\"default\"]);\n registerGlobalComponents();\n});\n\n//# sourceURL=webpack:///./src/global-vue-shim.js?"); /***/ }), @@ -3268,7 +3328,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _api /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _mutation_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../mutation-types */ \"./src/store/mutation-types.js\");\n\nconst state = {\n memoryUsage: null,\n schedulers: [],\n showQueue: []\n};\nconst mutations = {\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__[\"ADD_CONFIG\"]](state, {\n section,\n config\n }) {\n if (section === 'system') {\n state = Object.assign(state, config);\n }\n }\n\n};\nconst getters = {\n // Get a scheduler object using a key\n getScheduler: state => key => {\n return state.schedulers.find(scheduler => key === scheduler.key);\n }\n};\nconst actions = {};\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n state,\n mutations,\n getters,\n actions\n});\n\n//# sourceURL=webpack:///./src/store/modules/system.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _mutation_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../mutation-types */ \"./src/store/mutation-types.js\");\n\n/**\n * An object representing a scheduler.\n *\n * If a scheduler isn't initialized on the backend,\n * this object will only have the `key` and `name` properties.\n * @typedef {object} Scheduler\n * @property {string} key\n * A camelCase key representing this scheduler.\n * @property {string} name\n * The scheduler's name.\n * @property {boolean} [isAlive]\n * Is the scheduler alive?\n * @property {boolean|string} [isEnabled]\n * Is the scheduler enabled? For the `backlog` scheduler, the value might be `Paused`.\n * @property {boolean} [isActive]\n * Is the scheduler's action currently running?\n * @property {string|null} [startTime]\n * The time of day in which this scheduler runs (format: ISO-8601 time), or `null` if not applicable.\n * @property {number} [cycleTime]\n * The duration in milliseconds between each run, or `null` if not applicable.\n * @property {number} [nextRun]\n * The duration in milliseconds until the next run.\n * @property {string} [lastRun]\n * The date and time of the previous run (format: ISO-8601 date-time).\n * @property {boolean} [isSilent]\n * Is the scheduler silent?\n */\n\nconst state = {\n memoryUsage: null,\n schedulers: [],\n showQueue: []\n};\nconst mutations = {\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__[\"ADD_CONFIG\"]](state, {\n section,\n config\n }) {\n if (section === 'system') {\n state = Object.assign(state, config);\n }\n }\n\n};\nconst getters = {\n getScheduler: state => {\n /**\n * Get a scheduler object using a key.\n *\n * @param {string} key The combined quality to split.\n * @returns {Scheduler|object} The scheduler object or an empty object if not found.\n */\n const _getScheduler = key => state.schedulers.find(scheduler => key === scheduler.key) || {};\n\n return _getScheduler;\n }\n};\nconst actions = {};\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n state,\n mutations,\n getters,\n actions\n});\n\n//# sourceURL=webpack:///./src/store/modules/system.js?"); /***/ }), diff --git a/themes/dark/templates/layouts/main.mako b/themes/dark/templates/layouts/main.mako index 6a1cf39e75..1f12b9526b 100644 --- a/themes/dark/templates/layouts/main.mako +++ b/themes/dark/templates/layouts/main.mako @@ -72,7 +72,7 @@ <%block name="content" /> - <%include file="/partials/footer.mako" /> + diff --git a/themes/dark/templates/partials/footer.mako b/themes/dark/templates/partials/footer.mako deleted file mode 100644 index 697e1356bd..0000000000 --- a/themes/dark/templates/partials/footer.mako +++ /dev/null @@ -1,59 +0,0 @@ -<%! - from datetime import datetime - from time import time - from contextlib2 import suppress - import os - import re - from medusa import app - from medusa.helper.common import pretty_file_size - from medusa.sbdatetime import sbdatetime - from medusa.show.show import Show - - mem_usage = None - with suppress(ImportError): - from psutil import Process - from os import getpid - mem_usage = 'psutil' - - with suppress(ImportError): - if not mem_usage: - import resource # resource module is unix only - mem_usage = 'resource' -%> - -% if loggedIn: - <% - stats = Show.overall_stats() - ep_downloaded = stats['episodes']['downloaded'] - ep_snatched = stats['episodes']['snatched'] - ep_total = stats['episodes']['total'] - ep_percentage = '' if ep_total == 0 else '(%s%%)' % re.sub(r'(\d+)(\.\d)\d+', r'\1\2', str((float(ep_downloaded)/float(ep_total))*100)) - %> - -% endif - diff --git a/themes/light/assets/js/app.js b/themes/light/assets/js/app.js index 5f1c5c4e54..595822d355 100644 --- a/themes/light/assets/js/app.js +++ b/themes/light/assets/js/app.js @@ -8,7 +8,7 @@ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n/* harmony import */ var vue_async_computed__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-async-computed */ \"./node_modules/vue-async-computed/dist/vue-async-computed.esm.js\");\n/* harmony import */ var vue_snotify__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-snotify */ \"./node_modules/vue-snotify/vue-snotify.esm.js\");\n/* harmony import */ var _global_vue_shim__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./global-vue-shim */ \"./src/global-vue-shim.js\");\n/* harmony import */ var _router__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./router */ \"./src/router/index.js\");\n/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./store */ \"./src/store/index.js\");\n/* harmony import */ var _utils_core__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/core */ \"./src/utils/core.js\");\n\n\n\n\n\n\n\nvue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].config.devtools = true;\nvue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].config.performance = true; // Register plugins\n\nvue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].use(vue_async_computed__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\nvue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].use(vue_snotify__WEBPACK_IMPORTED_MODULE_2__[\"default\"]); // @TODO: Remove this before v1.0.0\n\nObject(_global_vue_shim__WEBPACK_IMPORTED_MODULE_3__[\"registerGlobalComponents\"])();\nconst app = new vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"]({\n name: 'App',\n router: _router__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n store: _store__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n\n data() {\n return {\n globalLoading: false,\n pageComponent: false\n };\n },\n\n mounted() {\n if (_utils_core__WEBPACK_IMPORTED_MODULE_6__[\"isDevelopment\"]) {\n console.log('App Mounted!');\n }\n\n if (!window.location.pathname.includes('/login')) {\n const {\n $store\n } = this;\n Promise.all([$store.dispatch('login', {\n username: window.username\n }), $store.dispatch('getConfig')]).then(([_, config]) => {\n if (_utils_core__WEBPACK_IMPORTED_MODULE_6__[\"isDevelopment\"]) {\n console.log('App Loaded!');\n } // Legacy - send config.main to jQuery (received by index.js)\n\n\n const event = new CustomEvent('medusa-config-loaded', {\n detail: config.main\n });\n window.dispatchEvent(event);\n }).catch(error => {\n console.debug(error);\n alert('Unable to connect to Medusa!'); // eslint-disable-line no-alert\n });\n }\n }\n\n}).$mount('#vue-wrap');\n/* harmony default export */ __webpack_exports__[\"default\"] = (app);\n\n//# sourceURL=webpack:///./src/app.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n/* harmony import */ var vue_async_computed__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-async-computed */ \"./node_modules/vue-async-computed/dist/vue-async-computed.esm.js\");\n/* harmony import */ var vue_snotify__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-snotify */ \"./node_modules/vue-snotify/vue-snotify.esm.js\");\n/* harmony import */ var _global_vue_shim__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./global-vue-shim */ \"./src/global-vue-shim.js\");\n/* harmony import */ var _router__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./router */ \"./src/router/index.js\");\n/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./store */ \"./src/store/index.js\");\n/* harmony import */ var _utils_core__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/core */ \"./src/utils/core.js\");\n\n\n\n\n\n\n\nvue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].config.devtools = true;\nvue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].config.performance = true; // Register plugins\n\nvue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].use(vue_async_computed__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\nvue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].use(vue_snotify__WEBPACK_IMPORTED_MODULE_2__[\"default\"]); // @TODO: Remove this before v1.0.0\n\nObject(_global_vue_shim__WEBPACK_IMPORTED_MODULE_3__[\"registerGlobalComponents\"])();\nconst app = new vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"]({\n name: 'App',\n router: _router__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n store: _store__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n\n data() {\n return {\n globalLoading: false,\n pageComponent: false\n };\n },\n\n mounted() {\n if (_utils_core__WEBPACK_IMPORTED_MODULE_6__[\"isDevelopment\"]) {\n console.log('App Mounted!');\n }\n\n if (!window.location.pathname.includes('/login')) {\n const {\n $store\n } = this;\n Promise.all([$store.dispatch('login', {\n username: window.username\n }), $store.dispatch('getConfig'), $store.dispatch('getStats')]).then(([_, config]) => {\n if (_utils_core__WEBPACK_IMPORTED_MODULE_6__[\"isDevelopment\"]) {\n console.log('App Loaded!');\n } // Legacy - send config.main to jQuery (received by index.js)\n\n\n const event = new CustomEvent('medusa-config-loaded', {\n detail: config.main\n });\n window.dispatchEvent(event);\n }).catch(error => {\n console.debug(error);\n alert('Unable to connect to Medusa!'); // eslint-disable-line no-alert\n });\n }\n }\n\n}).$mount('#vue-wrap');\n/* harmony default export */ __webpack_exports__[\"default\"] = (app);\n\n//# sourceURL=webpack:///./src/app.js?"); /***/ }) diff --git a/themes/light/assets/js/medusa-runtime.js b/themes/light/assets/js/medusa-runtime.js index 7f34f6e58c..cb08a557a9 100644 --- a/themes/light/assets/js/medusa-runtime.js +++ b/themes/light/assets/js/medusa-runtime.js @@ -48,6 +48,18 @@ eval("__webpack_require__.r(__webpack_exports__);\n//\n//\n//\n//\n//\n//\n//\n/ /***/ }), +/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./src/components/app-footer.vue?vue&type=script&lang=js&": +/*!**************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./src/components/app-footer.vue?vue&type=script&lang=js& ***! + \**************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n/* harmony import */ var date_fns_format__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! date-fns/format */ \"./node_modules/date-fns/esm/format/index.js\");\n/* harmony import */ var _utils_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/core */ \"./src/utils/core.js\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers */ \"./src/components/helpers/index.js\");\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: 'app-footer',\n components: {\n AppLink: _helpers__WEBPACK_IMPORTED_MODULE_3__[\"AppLink\"]\n },\n computed: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_0__[\"mapState\"])(['config', 'stats', 'system']), Object(vuex__WEBPACK_IMPORTED_MODULE_0__[\"mapGetters\"])(['getStatus', 'getScheduler']), {\n snatchedStatus() {\n const status = this.getStatus({\n key: 'snatched'\n });\n return status ? status.value : '';\n },\n\n episodePercentage() {\n const {\n downloaded,\n total\n } = this.stats.overall.episodes;\n\n if (!total) {\n return '';\n }\n\n const raw = downloaded / total * 100;\n return raw.toFixed(1) + '%';\n },\n\n nowInUserPreset() {\n const {\n datePreset,\n timePreset\n } = this.config;\n const preset = Object(_utils_core__WEBPACK_IMPORTED_MODULE_2__[\"convertDateFormat\"])(\"\".concat(datePreset, \" \").concat(timePreset));\n return Object(date_fns_format__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(new Date(), preset);\n }\n\n }),\n methods: {\n /**\n * Return a formatted next run time of the scheduler matching the provided key.\n *\n * @param {string} scheduler A scheduler key.\n * @returns {string} The formatted next run time.\n */\n schedulerNextRun(scheduler) {\n /** @type {import('../store/modules/system').Scheduler} */\n const {\n nextRun\n } = this.getScheduler(scheduler); // The next run can be `undefined` when the scheduler was not initialized\n // on the backend, and `null` when the scheduler is not enabled.\n\n if (nextRun === undefined) {\n return '??:??:??';\n }\n\n if (nextRun === null) {\n return 'Disabled';\n }\n\n return this.formatTimeDuration(nextRun);\n },\n\n /**\n * Return a formatted string representing the provided duration.\n *\n * This function will not use any units greater than a day.\n * @param {number} durationInMs Duration of time in milliseconds.\n * @returns {string} The formatted duration.\n *\n * @example\n */\n formatTimeDuration(durationInMs) {\n const days = parseInt(durationInMs / 86400000, 10);\n let daysText = '';\n\n if (days > 0) {\n daysText = String(days) + (days > 1 ? ' days, ' : ' day, ');\n }\n\n const date = new Date(durationInMs % 86400000);\n\n const zeroPad = (num, len = 2) => String(num).padStart(len, '0');\n\n const hours = String(date.getUTCHours());\n const minutes = zeroPad(date.getUTCMinutes());\n const seconds = zeroPad(date.getUTCSeconds() + Math.round(date.getUTCMilliseconds() / 1000));\n return daysText + [hours, minutes, seconds].join(':');\n }\n\n }\n});\n\n//# sourceURL=webpack:///./src/components/app-footer.vue?./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options"); + +/***/ }), + /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./src/components/app-header.vue?vue&type=script&lang=js&": /*!**************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./src/components/app-header.vue?vue&type=script&lang=js& ***! @@ -712,6 +724,18 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ }), +/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/app-footer.vue?vue&type=template&id=844e7d52&scoped=true&": +/*!****************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/app-footer.vue?vue&type=template&id=844e7d52&scoped=true& ***! + \****************************************************************************************************************************************************************************************************************/ +/*! exports provided: render, staticRenderFns */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"footer\", [\n _c(\n \"div\",\n { staticClass: \"footer clearfix\" },\n [\n _c(\"span\", { staticClass: \"footerhighlight\" }, [\n _vm._v(_vm._s(_vm.stats.overall.shows.total))\n ]),\n _vm._v(\" Shows (\"),\n _c(\"span\", { staticClass: \"footerhighlight\" }, [\n _vm._v(_vm._s(_vm.stats.overall.shows.active))\n ]),\n _vm._v(\" Active)\\n | \"),\n _c(\"span\", { staticClass: \"footerhighlight\" }, [\n _vm._v(_vm._s(_vm.stats.overall.episodes.downloaded))\n ]),\n _vm._v(\" \"),\n _vm.stats.overall.episodes.snatched\n ? [\n _c(\n \"span\",\n { staticClass: \"footerhighlight\" },\n [\n _c(\n \"app-link\",\n {\n attrs: {\n href:\n \"manage/episodeStatuses?whichStatus=\" +\n _vm.snatchedStatus,\n title: \"View overview of snatched episodes\"\n }\n },\n [_vm._v(\"+\" + _vm._s(_vm.stats.overall.episodes.snatched))]\n )\n ],\n 1\n ),\n _vm._v(\"\\n Snatched\\n \")\n ]\n : _vm._e(),\n _vm._v(\"\\n / \"),\n _c(\"span\", { staticClass: \"footerhighlight\" }, [\n _vm._v(_vm._s(_vm.stats.overall.episodes.total))\n ]),\n _vm._v(\" Episodes Downloaded \"),\n _vm.episodePercentage\n ? _c(\"span\", { staticClass: \"footerhighlight\" }, [\n _vm._v(\"(\" + _vm._s(_vm.episodePercentage) + \")\")\n ])\n : _vm._e(),\n _vm._v(\"\\n | Daily Search: \"),\n _c(\"span\", { staticClass: \"footerhighlight\" }, [\n _vm._v(_vm._s(_vm.schedulerNextRun(\"dailySearch\")))\n ]),\n _vm._v(\"\\n | Backlog Search: \"),\n _c(\"span\", { staticClass: \"footerhighlight\" }, [\n _vm._v(_vm._s(_vm.schedulerNextRun(\"backlog\")))\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n [\n _vm.system.memoryUsage\n ? [\n _vm._v(\"\\n Memory used: \"),\n _c(\"span\", { staticClass: \"footerhighlight\" }, [\n _vm._v(_vm._s(_vm.system.memoryUsage))\n ]),\n _vm._v(\" |\\n \")\n ]\n : _vm._e(),\n _vm._v(\" \"),\n _vm._v(\"\\n Branch: \"),\n _c(\"span\", { staticClass: \"footerhighlight\" }, [\n _vm._v(_vm._s(_vm.config.branch || \"Unknown\"))\n ]),\n _vm._v(\" |\\n Now: \"),\n _c(\"span\", { staticClass: \"footerhighlight\" }, [\n _vm._v(_vm._s(_vm.nowInUserPreset))\n ])\n ],\n 2\n )\n ],\n 2\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack:///./src/components/app-footer.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options"); + +/***/ }), + /***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/app-header.vue?vue&type=template&id=41e9b56e&": /*!****************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/app-header.vue?vue&type=template&id=41e9b56e& ***! @@ -1424,6 +1448,42 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _nod /***/ }), +/***/ "./src/components/app-footer.vue": +/*!***************************************!*\ + !*** ./src/components/app-footer.vue ***! + \***************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _app_footer_vue_vue_type_template_id_844e7d52_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./app-footer.vue?vue&type=template&id=844e7d52&scoped=true& */ \"./src/components/app-footer.vue?vue&type=template&id=844e7d52&scoped=true&\");\n/* harmony import */ var _app_footer_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./app-footer.vue?vue&type=script&lang=js& */ \"./src/components/app-footer.vue?vue&type=script&lang=js&\");\n/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _app_footer_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _app_footer_vue_vue_type_template_id_844e7d52_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _app_footer_vue_vue_type_template_id_844e7d52_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n \"844e7d52\",\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/components/app-footer.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n//# sourceURL=webpack:///./src/components/app-footer.vue?"); + +/***/ }), + +/***/ "./src/components/app-footer.vue?vue&type=script&lang=js&": +/*!****************************************************************!*\ + !*** ./src/components/app-footer.vue?vue&type=script&lang=js& ***! + \****************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_app_footer_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib!../../node_modules/vue-loader/lib??vue-loader-options!./app-footer.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./src/components/app-footer.vue?vue&type=script&lang=js&\");\n/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_app_footer_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n//# sourceURL=webpack:///./src/components/app-footer.vue?"); + +/***/ }), + +/***/ "./src/components/app-footer.vue?vue&type=template&id=844e7d52&scoped=true&": +/*!**********************************************************************************!*\ + !*** ./src/components/app-footer.vue?vue&type=template&id=844e7d52&scoped=true& ***! + \**********************************************************************************/ +/*! exports provided: render, staticRenderFns */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_app_footer_vue_vue_type_template_id_844e7d52_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./app-footer.vue?vue&type=template&id=844e7d52&scoped=true& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/components/app-footer.vue?vue&type=template&id=844e7d52&scoped=true&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_app_footer_vue_vue_type_template_id_844e7d52_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_app_footer_vue_vue_type_template_id_844e7d52_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n//# sourceURL=webpack:///./src/components/app-footer.vue?"); + +/***/ }), + /***/ "./src/components/app-header.vue": /*!***************************************!*\ !*** ./src/components/app-header.vue ***! @@ -2376,11 +2436,11 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _404 /*!*********************************!*\ !*** ./src/components/index.js ***! \*********************************/ -/*! exports provided: AddRecommended, AddShowOptions, AddShows, AnidbReleaseGroupUi, AppHeader, Backstretch, Config, ConfigPostProcessing, Home, IRC, Login, Logs, ManualPostProcess, RootDirs, Show, ShowHeader, SnatchSelection, Status, SubMenu, SubtitleSearch, NotFound, AppLink, Asset, ConfigTemplate, ConfigTextboxNumber, ConfigTextbox, ConfigToggleSlider, FileBrowser, LanguageSelect, NamePattern, PlotInfo, QualityChooser, QualityPill, ScrollButtons, SelectList, ShowSelector, StateSwitch */ +/*! exports provided: AddRecommended, AddShowOptions, AddShows, AnidbReleaseGroupUi, AppFooter, AppHeader, Backstretch, Config, ConfigPostProcessing, Home, IRC, Login, Logs, ManualPostProcess, RootDirs, Show, ShowHeader, SnatchSelection, Status, SubMenu, SubtitleSearch, NotFound, AppLink, Asset, ConfigTemplate, ConfigTextboxNumber, ConfigTextbox, ConfigToggleSlider, FileBrowser, LanguageSelect, NamePattern, PlotInfo, QualityChooser, QualityPill, ScrollButtons, SelectList, ShowSelector, StateSwitch */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _add_recommended_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./add-recommended.vue */ \"./src/components/add-recommended.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AddRecommended\", function() { return _add_recommended_vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _add_show_options_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./add-show-options.vue */ \"./src/components/add-show-options.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AddShowOptions\", function() { return _add_show_options_vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _add_shows_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./add-shows.vue */ \"./src/components/add-shows.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AddShows\", function() { return _add_shows_vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _anidb_release_group_ui_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./anidb-release-group-ui.vue */ \"./src/components/anidb-release-group-ui.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AnidbReleaseGroupUi\", function() { return _anidb_release_group_ui_vue__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _app_header_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./app-header.vue */ \"./src/components/app-header.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AppHeader\", function() { return _app_header_vue__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _backstretch_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./backstretch.vue */ \"./src/components/backstretch.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Backstretch\", function() { return _backstretch_vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony import */ var _config_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./config.vue */ \"./src/components/config.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Config\", function() { return _config_vue__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony import */ var _config_post_processing_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./config-post-processing.vue */ \"./src/components/config-post-processing.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConfigPostProcessing\", function() { return _config_post_processing_vue__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony import */ var _home_vue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./home.vue */ \"./src/components/home.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Home\", function() { return _home_vue__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n/* harmony import */ var _irc_vue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./irc.vue */ \"./src/components/irc.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"IRC\", function() { return _irc_vue__WEBPACK_IMPORTED_MODULE_9__[\"default\"]; });\n\n/* harmony import */ var _login_vue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./login.vue */ \"./src/components/login.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Login\", function() { return _login_vue__WEBPACK_IMPORTED_MODULE_10__[\"default\"]; });\n\n/* harmony import */ var _logs_vue__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./logs.vue */ \"./src/components/logs.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Logs\", function() { return _logs_vue__WEBPACK_IMPORTED_MODULE_11__[\"default\"]; });\n\n/* harmony import */ var _manual_post_process_vue__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./manual-post-process.vue */ \"./src/components/manual-post-process.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ManualPostProcess\", function() { return _manual_post_process_vue__WEBPACK_IMPORTED_MODULE_12__[\"default\"]; });\n\n/* harmony import */ var _root_dirs_vue__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./root-dirs.vue */ \"./src/components/root-dirs.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RootDirs\", function() { return _root_dirs_vue__WEBPACK_IMPORTED_MODULE_13__[\"default\"]; });\n\n/* harmony import */ var _show_vue__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./show.vue */ \"./src/components/show.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Show\", function() { return _show_vue__WEBPACK_IMPORTED_MODULE_14__[\"default\"]; });\n\n/* harmony import */ var _show_header_vue__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./show-header.vue */ \"./src/components/show-header.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ShowHeader\", function() { return _show_header_vue__WEBPACK_IMPORTED_MODULE_15__[\"default\"]; });\n\n/* harmony import */ var _snatch_selection_vue__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./snatch-selection.vue */ \"./src/components/snatch-selection.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SnatchSelection\", function() { return _snatch_selection_vue__WEBPACK_IMPORTED_MODULE_16__[\"default\"]; });\n\n/* harmony import */ var _status_vue__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./status.vue */ \"./src/components/status.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Status\", function() { return _status_vue__WEBPACK_IMPORTED_MODULE_17__[\"default\"]; });\n\n/* harmony import */ var _sub_menu_vue__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./sub-menu.vue */ \"./src/components/sub-menu.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SubMenu\", function() { return _sub_menu_vue__WEBPACK_IMPORTED_MODULE_18__[\"default\"]; });\n\n/* harmony import */ var _subtitle_search_vue__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./subtitle-search.vue */ \"./src/components/subtitle-search.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SubtitleSearch\", function() { return _subtitle_search_vue__WEBPACK_IMPORTED_MODULE_19__[\"default\"]; });\n\n/* harmony import */ var _http__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./http */ \"./src/components/http/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"NotFound\", function() { return _http__WEBPACK_IMPORTED_MODULE_20__[\"NotFound\"]; });\n\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./helpers */ \"./src/components/helpers/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AppLink\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"AppLink\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Asset\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"Asset\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConfigTemplate\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"ConfigTemplate\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConfigTextboxNumber\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"ConfigTextboxNumber\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConfigTextbox\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"ConfigTextbox\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConfigToggleSlider\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"ConfigToggleSlider\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FileBrowser\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"FileBrowser\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LanguageSelect\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"LanguageSelect\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"NamePattern\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"NamePattern\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PlotInfo\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"PlotInfo\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QualityChooser\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"QualityChooser\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QualityPill\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"QualityPill\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ScrollButtons\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"ScrollButtons\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SelectList\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"SelectList\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ShowSelector\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"ShowSelector\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"StateSwitch\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_21__[\"StateSwitch\"]; });\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=webpack:///./src/components/index.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _add_recommended_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./add-recommended.vue */ \"./src/components/add-recommended.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AddRecommended\", function() { return _add_recommended_vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _add_show_options_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./add-show-options.vue */ \"./src/components/add-show-options.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AddShowOptions\", function() { return _add_show_options_vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _add_shows_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./add-shows.vue */ \"./src/components/add-shows.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AddShows\", function() { return _add_shows_vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _anidb_release_group_ui_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./anidb-release-group-ui.vue */ \"./src/components/anidb-release-group-ui.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AnidbReleaseGroupUi\", function() { return _anidb_release_group_ui_vue__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _app_footer_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./app-footer.vue */ \"./src/components/app-footer.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AppFooter\", function() { return _app_footer_vue__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _app_header_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./app-header.vue */ \"./src/components/app-header.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AppHeader\", function() { return _app_header_vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony import */ var _backstretch_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./backstretch.vue */ \"./src/components/backstretch.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Backstretch\", function() { return _backstretch_vue__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony import */ var _config_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./config.vue */ \"./src/components/config.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Config\", function() { return _config_vue__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony import */ var _config_post_processing_vue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./config-post-processing.vue */ \"./src/components/config-post-processing.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConfigPostProcessing\", function() { return _config_post_processing_vue__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n/* harmony import */ var _home_vue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./home.vue */ \"./src/components/home.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Home\", function() { return _home_vue__WEBPACK_IMPORTED_MODULE_9__[\"default\"]; });\n\n/* harmony import */ var _irc_vue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./irc.vue */ \"./src/components/irc.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"IRC\", function() { return _irc_vue__WEBPACK_IMPORTED_MODULE_10__[\"default\"]; });\n\n/* harmony import */ var _login_vue__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./login.vue */ \"./src/components/login.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Login\", function() { return _login_vue__WEBPACK_IMPORTED_MODULE_11__[\"default\"]; });\n\n/* harmony import */ var _logs_vue__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./logs.vue */ \"./src/components/logs.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Logs\", function() { return _logs_vue__WEBPACK_IMPORTED_MODULE_12__[\"default\"]; });\n\n/* harmony import */ var _manual_post_process_vue__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./manual-post-process.vue */ \"./src/components/manual-post-process.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ManualPostProcess\", function() { return _manual_post_process_vue__WEBPACK_IMPORTED_MODULE_13__[\"default\"]; });\n\n/* harmony import */ var _root_dirs_vue__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./root-dirs.vue */ \"./src/components/root-dirs.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RootDirs\", function() { return _root_dirs_vue__WEBPACK_IMPORTED_MODULE_14__[\"default\"]; });\n\n/* harmony import */ var _show_vue__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./show.vue */ \"./src/components/show.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Show\", function() { return _show_vue__WEBPACK_IMPORTED_MODULE_15__[\"default\"]; });\n\n/* harmony import */ var _show_header_vue__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./show-header.vue */ \"./src/components/show-header.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ShowHeader\", function() { return _show_header_vue__WEBPACK_IMPORTED_MODULE_16__[\"default\"]; });\n\n/* harmony import */ var _snatch_selection_vue__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./snatch-selection.vue */ \"./src/components/snatch-selection.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SnatchSelection\", function() { return _snatch_selection_vue__WEBPACK_IMPORTED_MODULE_17__[\"default\"]; });\n\n/* harmony import */ var _status_vue__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./status.vue */ \"./src/components/status.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Status\", function() { return _status_vue__WEBPACK_IMPORTED_MODULE_18__[\"default\"]; });\n\n/* harmony import */ var _sub_menu_vue__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./sub-menu.vue */ \"./src/components/sub-menu.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SubMenu\", function() { return _sub_menu_vue__WEBPACK_IMPORTED_MODULE_19__[\"default\"]; });\n\n/* harmony import */ var _subtitle_search_vue__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./subtitle-search.vue */ \"./src/components/subtitle-search.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SubtitleSearch\", function() { return _subtitle_search_vue__WEBPACK_IMPORTED_MODULE_20__[\"default\"]; });\n\n/* harmony import */ var _http__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./http */ \"./src/components/http/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"NotFound\", function() { return _http__WEBPACK_IMPORTED_MODULE_21__[\"NotFound\"]; });\n\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./helpers */ \"./src/components/helpers/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AppLink\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"AppLink\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Asset\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"Asset\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConfigTemplate\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"ConfigTemplate\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConfigTextboxNumber\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"ConfigTextboxNumber\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConfigTextbox\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"ConfigTextbox\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConfigToggleSlider\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"ConfigToggleSlider\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FileBrowser\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"FileBrowser\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LanguageSelect\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"LanguageSelect\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"NamePattern\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"NamePattern\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PlotInfo\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"PlotInfo\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QualityChooser\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"QualityChooser\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QualityPill\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"QualityPill\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ScrollButtons\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"ScrollButtons\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SelectList\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"SelectList\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ShowSelector\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"ShowSelector\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"StateSwitch\", function() { return _helpers__WEBPACK_IMPORTED_MODULE_22__[\"StateSwitch\"]; });\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=webpack:///./src/components/index.js?"); /***/ }), @@ -2812,7 +2872,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _nod /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"registerGlobalComponents\", function() { return registerGlobalComponents; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n/* harmony import */ var vue_meta__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-meta */ \"./node_modules/vue-meta/dist/vue-meta.esm.js\");\n/* harmony import */ var vue_async_computed__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-async-computed */ \"./node_modules/vue-async-computed/dist/vue-async-computed.esm.js\");\n/* harmony import */ var vue_snotify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue-snotify */ \"./node_modules/vue-snotify/vue-snotify.esm.js\");\n/* harmony import */ var _components__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components */ \"./src/components/index.js\");\n/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./store */ \"./src/store/index.js\");\n/* harmony import */ var _utils_core__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/core */ \"./src/utils/core.js\");\n// @TODO: Remove this file before v1.0.0\n\n\n\n\n\n\n\n/**\n * Register global components and x-template components.\n */\n\nconst registerGlobalComponents = () => {\n // Start with the x-template components\n let {\n components\n } = window; // Add global components (in use by `main.mako`)\n // @TODO: These should be registered in an `App.vue` component when possible,\n // along with some of the `main.mako` template\n\n components = components.concat([_components__WEBPACK_IMPORTED_MODULE_4__[\"AppHeader\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"ScrollButtons\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"SubMenu\"]]); // Add global components (in use by pages/components that are not SFCs yet)\n // Use this when it's not possible to use `components: { ... }` in a component's definition.\n // If a component that uses any of these is a SFC, please use the `components` key when defining it.\n // @TODO: Instead of globally registering these,\n // they should be registered in each component that uses them\n\n components = components.concat([_components__WEBPACK_IMPORTED_MODULE_4__[\"AddShowOptions\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"AnidbReleaseGroupUi\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"AppLink\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"Asset\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"Backstretch\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"ConfigTemplate\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"ConfigTextbox\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"ConfigTextboxNumber\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"ConfigToggleSlider\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"FileBrowser\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"LanguageSelect\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"PlotInfo\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"QualityChooser\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"QualityPill\"], // @FIXME: (sharkykh) Used in a hack/workaround in `static/js/ajax-episode-search.js`\n _components__WEBPACK_IMPORTED_MODULE_4__[\"RootDirs\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"SelectList\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"ShowSelector\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"StateSwitch\"]]); // Add components for pages that use `pageComponent`\n // @TODO: These need to be converted to Vue SFCs\n\n components = components.concat([_components__WEBPACK_IMPORTED_MODULE_4__[\"Home\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"ManualPostProcess\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"Show\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"SnatchSelection\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"Status\"]]); // Register the components globally\n\n components.forEach(component => {\n if (_utils_core__WEBPACK_IMPORTED_MODULE_6__[\"isDevelopment\"]) {\n console.debug(\"Registering \".concat(component.name));\n }\n\n vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].component(component.name, component);\n });\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (() => {\n const warningTemplate = (name, state) => \"\".concat(name, \" is using the global Vuex '\").concat(state, \"' state, \") + \"please replace that with a local one using: mapState(['\".concat(state, \"'])\");\n\n vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].mixin({\n data() {\n // These are only needed for the root Vue\n if (this.$root === this) {\n return {\n globalLoading: true,\n pageComponent: false\n };\n }\n\n return {};\n },\n\n mounted() {\n if (this.$root === this && !window.location.pathname.includes('/login')) {\n const {\n username\n } = window;\n Promise.all([\n /* This is used by the `app-header` component\n to only show the logout button if a username is set */\n _store__WEBPACK_IMPORTED_MODULE_5__[\"default\"].dispatch('login', {\n username\n }), _store__WEBPACK_IMPORTED_MODULE_5__[\"default\"].dispatch('getConfig')]).then(([_, config]) => {\n this.$emit('loaded'); // Legacy - send config.main to jQuery (received by index.js)\n\n const event = new CustomEvent('medusa-config-loaded', {\n detail: config.main\n });\n window.dispatchEvent(event);\n }).catch(error => {\n console.debug(error);\n alert('Unable to connect to Medusa!'); // eslint-disable-line no-alert\n });\n }\n\n this.$once('loaded', () => {\n this.$root.globalLoading = false;\n });\n },\n\n // Make auth and config accessible to all components\n // @TODO: Remove this completely\n computed: {\n // Deprecate the global `Vuex.mapState(['auth', 'config'])`\n auth() {\n if (_utils_core__WEBPACK_IMPORTED_MODULE_6__[\"isDevelopment\"] && !this.__VUE_DEVTOOLS_UID__) {\n console.warn(warningTemplate(this._name, 'auth'));\n }\n\n return this.$store.state.auth;\n },\n\n config() {\n if (_utils_core__WEBPACK_IMPORTED_MODULE_6__[\"isDevelopment\"] && !this.__VUE_DEVTOOLS_UID__) {\n console.warn(warningTemplate(this._name, 'config'));\n }\n\n return this.$store.state.config;\n }\n\n }\n });\n\n if (_utils_core__WEBPACK_IMPORTED_MODULE_6__[\"isDevelopment\"]) {\n console.debug('Loading local Vue');\n } // Register plugins\n\n\n vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].use(vue_async_computed__WEBPACK_IMPORTED_MODULE_2__[\"default\"]);\n vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].use(vue_meta__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].use(vue_snotify__WEBPACK_IMPORTED_MODULE_3__[\"default\"]);\n registerGlobalComponents();\n});\n\n//# sourceURL=webpack:///./src/global-vue-shim.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"registerGlobalComponents\", function() { return registerGlobalComponents; });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n/* harmony import */ var vue_meta__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-meta */ \"./node_modules/vue-meta/dist/vue-meta.esm.js\");\n/* harmony import */ var vue_async_computed__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-async-computed */ \"./node_modules/vue-async-computed/dist/vue-async-computed.esm.js\");\n/* harmony import */ var vue_snotify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue-snotify */ \"./node_modules/vue-snotify/vue-snotify.esm.js\");\n/* harmony import */ var _components__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components */ \"./src/components/index.js\");\n/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./store */ \"./src/store/index.js\");\n/* harmony import */ var _utils_core__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/core */ \"./src/utils/core.js\");\n// @TODO: Remove this file before v1.0.0\n\n\n\n\n\n\n\n/**\n * Register global components and x-template components.\n */\n\nconst registerGlobalComponents = () => {\n // Start with the x-template components\n let {\n components\n } = window; // Add global components (in use by `main.mako`)\n // @TODO: These should be registered in an `App.vue` component when possible,\n // along with some of the `main.mako` template\n\n components = components.concat([_components__WEBPACK_IMPORTED_MODULE_4__[\"AppFooter\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"AppHeader\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"ScrollButtons\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"SubMenu\"]]); // Add global components (in use by pages/components that are not SFCs yet)\n // Use this when it's not possible to use `components: { ... }` in a component's definition.\n // If a component that uses any of these is a SFC, please use the `components` key when defining it.\n // @TODO: Instead of globally registering these,\n // they should be registered in each component that uses them\n\n components = components.concat([_components__WEBPACK_IMPORTED_MODULE_4__[\"AddShowOptions\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"AnidbReleaseGroupUi\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"AppLink\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"Asset\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"Backstretch\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"ConfigTemplate\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"ConfigTextbox\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"ConfigTextboxNumber\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"ConfigToggleSlider\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"FileBrowser\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"LanguageSelect\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"PlotInfo\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"QualityChooser\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"QualityPill\"], // @FIXME: (sharkykh) Used in a hack/workaround in `static/js/ajax-episode-search.js`\n _components__WEBPACK_IMPORTED_MODULE_4__[\"RootDirs\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"SelectList\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"ShowSelector\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"StateSwitch\"]]); // Add components for pages that use `pageComponent`\n // @TODO: These need to be converted to Vue SFCs\n\n components = components.concat([_components__WEBPACK_IMPORTED_MODULE_4__[\"Home\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"ManualPostProcess\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"Show\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"SnatchSelection\"], _components__WEBPACK_IMPORTED_MODULE_4__[\"Status\"]]); // Register the components globally\n\n components.forEach(component => {\n if (_utils_core__WEBPACK_IMPORTED_MODULE_6__[\"isDevelopment\"]) {\n console.debug(\"Registering \".concat(component.name));\n }\n\n vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].component(component.name, component);\n });\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (() => {\n const warningTemplate = (name, state) => \"\".concat(name, \" is using the global Vuex '\").concat(state, \"' state, \") + \"please replace that with a local one using: mapState(['\".concat(state, \"'])\");\n\n vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].mixin({\n data() {\n // These are only needed for the root Vue\n if (this.$root === this) {\n return {\n globalLoading: true,\n pageComponent: false\n };\n }\n\n return {};\n },\n\n mounted() {\n if (this.$root === this && !window.location.pathname.includes('/login')) {\n const {\n username\n } = window;\n Promise.all([\n /* This is used by the `app-header` component\n to only show the logout button if a username is set */\n _store__WEBPACK_IMPORTED_MODULE_5__[\"default\"].dispatch('login', {\n username\n }), _store__WEBPACK_IMPORTED_MODULE_5__[\"default\"].dispatch('getConfig'), _store__WEBPACK_IMPORTED_MODULE_5__[\"default\"].dispatch('getStats')]).then(([_, config]) => {\n this.$emit('loaded'); // Legacy - send config.main to jQuery (received by index.js)\n\n const event = new CustomEvent('medusa-config-loaded', {\n detail: config.main\n });\n window.dispatchEvent(event);\n }).catch(error => {\n console.debug(error);\n alert('Unable to connect to Medusa!'); // eslint-disable-line no-alert\n });\n }\n\n this.$once('loaded', () => {\n this.$root.globalLoading = false;\n });\n },\n\n // Make auth and config accessible to all components\n // @TODO: Remove this completely\n computed: {\n // Deprecate the global `Vuex.mapState(['auth', 'config'])`\n auth() {\n if (_utils_core__WEBPACK_IMPORTED_MODULE_6__[\"isDevelopment\"] && !this.__VUE_DEVTOOLS_UID__) {\n console.warn(warningTemplate(this._name, 'auth'));\n }\n\n return this.$store.state.auth;\n },\n\n config() {\n if (_utils_core__WEBPACK_IMPORTED_MODULE_6__[\"isDevelopment\"] && !this.__VUE_DEVTOOLS_UID__) {\n console.warn(warningTemplate(this._name, 'config'));\n }\n\n return this.$store.state.config;\n }\n\n }\n });\n\n if (_utils_core__WEBPACK_IMPORTED_MODULE_6__[\"isDevelopment\"]) {\n console.debug('Loading local Vue');\n } // Register plugins\n\n\n vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].use(vue_async_computed__WEBPACK_IMPORTED_MODULE_2__[\"default\"]);\n vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].use(vue_meta__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].use(vue_snotify__WEBPACK_IMPORTED_MODULE_3__[\"default\"]);\n registerGlobalComponents();\n});\n\n//# sourceURL=webpack:///./src/global-vue-shim.js?"); /***/ }), @@ -3268,7 +3328,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _api /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _mutation_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../mutation-types */ \"./src/store/mutation-types.js\");\n\nconst state = {\n memoryUsage: null,\n schedulers: [],\n showQueue: []\n};\nconst mutations = {\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__[\"ADD_CONFIG\"]](state, {\n section,\n config\n }) {\n if (section === 'system') {\n state = Object.assign(state, config);\n }\n }\n\n};\nconst getters = {\n // Get a scheduler object using a key\n getScheduler: state => key => {\n return state.schedulers.find(scheduler => key === scheduler.key);\n }\n};\nconst actions = {};\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n state,\n mutations,\n getters,\n actions\n});\n\n//# sourceURL=webpack:///./src/store/modules/system.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _mutation_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../mutation-types */ \"./src/store/mutation-types.js\");\n\n/**\n * An object representing a scheduler.\n *\n * If a scheduler isn't initialized on the backend,\n * this object will only have the `key` and `name` properties.\n * @typedef {object} Scheduler\n * @property {string} key\n * A camelCase key representing this scheduler.\n * @property {string} name\n * The scheduler's name.\n * @property {boolean} [isAlive]\n * Is the scheduler alive?\n * @property {boolean|string} [isEnabled]\n * Is the scheduler enabled? For the `backlog` scheduler, the value might be `Paused`.\n * @property {boolean} [isActive]\n * Is the scheduler's action currently running?\n * @property {string|null} [startTime]\n * The time of day in which this scheduler runs (format: ISO-8601 time), or `null` if not applicable.\n * @property {number} [cycleTime]\n * The duration in milliseconds between each run, or `null` if not applicable.\n * @property {number} [nextRun]\n * The duration in milliseconds until the next run.\n * @property {string} [lastRun]\n * The date and time of the previous run (format: ISO-8601 date-time).\n * @property {boolean} [isSilent]\n * Is the scheduler silent?\n */\n\nconst state = {\n memoryUsage: null,\n schedulers: [],\n showQueue: []\n};\nconst mutations = {\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__[\"ADD_CONFIG\"]](state, {\n section,\n config\n }) {\n if (section === 'system') {\n state = Object.assign(state, config);\n }\n }\n\n};\nconst getters = {\n getScheduler: state => {\n /**\n * Get a scheduler object using a key.\n *\n * @param {string} key The combined quality to split.\n * @returns {Scheduler|object} The scheduler object or an empty object if not found.\n */\n const _getScheduler = key => state.schedulers.find(scheduler => key === scheduler.key) || {};\n\n return _getScheduler;\n }\n};\nconst actions = {};\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n state,\n mutations,\n getters,\n actions\n});\n\n//# sourceURL=webpack:///./src/store/modules/system.js?"); /***/ }), diff --git a/themes/light/templates/layouts/main.mako b/themes/light/templates/layouts/main.mako index 6a1cf39e75..1f12b9526b 100644 --- a/themes/light/templates/layouts/main.mako +++ b/themes/light/templates/layouts/main.mako @@ -72,7 +72,7 @@ <%block name="content" /> - <%include file="/partials/footer.mako" /> + diff --git a/themes/light/templates/partials/footer.mako b/themes/light/templates/partials/footer.mako deleted file mode 100644 index 697e1356bd..0000000000 --- a/themes/light/templates/partials/footer.mako +++ /dev/null @@ -1,59 +0,0 @@ -<%! - from datetime import datetime - from time import time - from contextlib2 import suppress - import os - import re - from medusa import app - from medusa.helper.common import pretty_file_size - from medusa.sbdatetime import sbdatetime - from medusa.show.show import Show - - mem_usage = None - with suppress(ImportError): - from psutil import Process - from os import getpid - mem_usage = 'psutil' - - with suppress(ImportError): - if not mem_usage: - import resource # resource module is unix only - mem_usage = 'resource' -%> - -% if loggedIn: - <% - stats = Show.overall_stats() - ep_downloaded = stats['episodes']['downloaded'] - ep_snatched = stats['episodes']['snatched'] - ep_total = stats['episodes']['total'] - ep_percentage = '' if ep_total == 0 else '(%s%%)' % re.sub(r'(\d+)(\.\d)\d+', r'\1\2', str((float(ep_downloaded)/float(ep_total))*100)) - %> - -% endif -