diff --git a/CHANGELOG.md b/CHANGELOG.md index 8df532a406..304e64b429 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ #### New Features #### Improvements +- Added connection (lost) indicator on the Medusa log ([10774](https://github.com/pymedusa/Medusa/pull/10774)) #### Fixes diff --git a/themes-default/slim/src/app.js b/themes-default/slim/src/app.js index d050e9d734..eac5c53756 100644 --- a/themes-default/slim/src/app.js +++ b/themes-default/slim/src/app.js @@ -63,16 +63,20 @@ export default new Vue({ setLoadingFinished(true); setLoadingDisplay(false); }, 2000); + this.connect(true); }); }).catch(error => { console.debug(error); alert('Unable to connect to Medusa!'); // eslint-disable-line no-alert + this.connect(false); }); } }, methods: { ...mapActions({ - getShows: 'getShows' + getShows: 'getShows', + connect: 'connect' + }), ...mapMutations([ 'setLoadingDisplay', diff --git a/themes-default/slim/src/components/app-header.vue b/themes-default/slim/src/components/app-header.vue index 692486afb7..6a8be3e1d0 100644 --- a/themes-default/slim/src/components/app-header.vue +++ b/themes-default/slim/src/components/app-header.vue @@ -9,7 +9,11 @@ - Medusa + + Medusa + disconnected + + Medusa diff --git a/themes/dark/assets/js/app.js b/themes/dark/assets/js/app.js index 3cb4e6100f..9a1132b624 100644 --- a/themes/dark/assets/js/app.js +++ b/themes/dark/assets/js/app.js @@ -15,7 +15,7 @@ \********************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n/* harmony import */ var _global_vue_shim__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./global-vue-shim */ \"./src/global-vue-shim.js\");\n/* harmony import */ var _router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./router */ \"./src/router/index.js\");\n/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./store */ \"./src/store/index.js\");\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n/* harmony import */ var _utils_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/core */ \"./src/utils/core.js\");\n/* harmony import */ var _components__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components */ \"./src/components/index.js\");\n\n\n\n\n\n\n\nvue__WEBPACK_IMPORTED_MODULE_5__[\"default\"].config.devtools = true;\nvue__WEBPACK_IMPORTED_MODULE_5__[\"default\"].config.performance = true;\n\nif (document.body.getAttribute('developer') === 'True') {\n vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"].config.devtools = true;\n vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"].config.performance = true;\n}\n\n(0,_global_vue_shim__WEBPACK_IMPORTED_MODULE_0__.registerPlugins)(); // @TODO: Remove this before v1.0.0\n\n(0,_global_vue_shim__WEBPACK_IMPORTED_MODULE_0__.registerGlobalComponents)();\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"]({\n name: 'index',\n router: _router__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n store: _store__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n\n data() {\n return {\n isAuthenticated: false\n };\n },\n\n async mounted() {\n const {\n getShows,\n setLoadingDisplay,\n setLoadingFinished\n } = this;\n\n if (_utils_core__WEBPACK_IMPORTED_MODULE_3__.isDevelopment) {\n console.log('App Mounted!');\n }\n\n await this.$store.dispatch('auth');\n\n if (!window.location.pathname.includes('/login')) {\n const {\n $store\n } = this;\n await $store.dispatch('login');\n this.isAuthenticated = true;\n Promise.all([$store.dispatch('getConfig'), $store.dispatch('getStats')]).then(_ref => {\n let [config] = _ref;\n\n if (_utils_core__WEBPACK_IMPORTED_MODULE_3__.isDevelopment) {\n console.log('App Loaded!');\n } // Legacy - send config.general to jQuery (received by index.js)\n\n\n const event = new CustomEvent('medusa-config-loaded', {\n detail: {\n general: config.general,\n layout: config.layout\n }\n });\n window.dispatchEvent(event); // Let's bootstrap the app with essential data like the shows.\n // For the storing of the shows in the browsers cache, we depend on config/general.\n\n getShows().then(() => {\n console.log('Finished loading all shows.');\n setTimeout(() => {\n setLoadingFinished(true);\n setLoadingDisplay(false);\n }, 2000);\n });\n }).catch(error => {\n console.debug(error);\n alert('Unable to connect to Medusa!'); // eslint-disable-line no-alert\n });\n }\n },\n\n methods: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_6__.mapActions)({\n getShows: 'getShows'\n }),\n ...(0,vuex__WEBPACK_IMPORTED_MODULE_6__.mapMutations)(['setLoadingDisplay', 'setLoadingFinished'])\n },\n\n render(h) {\n // eslint-disable-line vue/require-render-return\n // Do not start with rendering the app, before we're sure we authenticated.\n if (this.isAuthenticated || window.location.pathname.includes('/login')) {\n return h(_components__WEBPACK_IMPORTED_MODULE_4__.App);\n }\n }\n\n}).$mount('#app-wrapper'));\n\n//# sourceURL=webpack://slim/./src/app.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n/* harmony import */ var _global_vue_shim__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./global-vue-shim */ \"./src/global-vue-shim.js\");\n/* harmony import */ var _router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./router */ \"./src/router/index.js\");\n/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./store */ \"./src/store/index.js\");\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n/* harmony import */ var _utils_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/core */ \"./src/utils/core.js\");\n/* harmony import */ var _components__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components */ \"./src/components/index.js\");\n\n\n\n\n\n\n\nvue__WEBPACK_IMPORTED_MODULE_5__[\"default\"].config.devtools = true;\nvue__WEBPACK_IMPORTED_MODULE_5__[\"default\"].config.performance = true;\n\nif (document.body.getAttribute('developer') === 'True') {\n vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"].config.devtools = true;\n vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"].config.performance = true;\n}\n\n(0,_global_vue_shim__WEBPACK_IMPORTED_MODULE_0__.registerPlugins)(); // @TODO: Remove this before v1.0.0\n\n(0,_global_vue_shim__WEBPACK_IMPORTED_MODULE_0__.registerGlobalComponents)();\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"]({\n name: 'index',\n router: _router__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n store: _store__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n\n data() {\n return {\n isAuthenticated: false\n };\n },\n\n async mounted() {\n const {\n getShows,\n setLoadingDisplay,\n setLoadingFinished\n } = this;\n\n if (_utils_core__WEBPACK_IMPORTED_MODULE_3__.isDevelopment) {\n console.log('App Mounted!');\n }\n\n await this.$store.dispatch('auth');\n\n if (!window.location.pathname.includes('/login')) {\n const {\n $store\n } = this;\n await $store.dispatch('login');\n this.isAuthenticated = true;\n Promise.all([$store.dispatch('getConfig'), $store.dispatch('getStats')]).then(_ref => {\n let [config] = _ref;\n\n if (_utils_core__WEBPACK_IMPORTED_MODULE_3__.isDevelopment) {\n console.log('App Loaded!');\n } // Legacy - send config.general to jQuery (received by index.js)\n\n\n const event = new CustomEvent('medusa-config-loaded', {\n detail: {\n general: config.general,\n layout: config.layout\n }\n });\n window.dispatchEvent(event); // Let's bootstrap the app with essential data like the shows.\n // For the storing of the shows in the browsers cache, we depend on config/general.\n\n getShows().then(() => {\n console.log('Finished loading all shows.');\n setTimeout(() => {\n setLoadingFinished(true);\n setLoadingDisplay(false);\n }, 2000);\n this.connect(true);\n });\n }).catch(error => {\n console.debug(error);\n alert('Unable to connect to Medusa!'); // eslint-disable-line no-alert\n\n this.connect(false);\n });\n }\n },\n\n methods: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_6__.mapActions)({\n getShows: 'getShows',\n connect: 'connect'\n }),\n ...(0,vuex__WEBPACK_IMPORTED_MODULE_6__.mapMutations)(['setLoadingDisplay', 'setLoadingFinished'])\n },\n\n render(h) {\n // eslint-disable-line vue/require-render-return\n // Do not start with rendering the app, before we're sure we authenticated.\n if (this.isAuthenticated || window.location.pathname.includes('/login')) {\n return h(_components__WEBPACK_IMPORTED_MODULE_4__.App);\n }\n }\n\n}).$mount('#app-wrapper'));\n\n//# sourceURL=webpack://slim/./src/app.js?"); /***/ }) diff --git a/themes/dark/assets/js/medusa-runtime.js b/themes/dark/assets/js/medusa-runtime.js index 76c5b12123..5464ed9ac2 100644 --- a/themes/dark/assets/js/medusa-runtime.js +++ b/themes/dark/assets/js/medusa-runtime.js @@ -70,7 +70,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/components/helpers/index.js\");\n/* provided dependency */ var $ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\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//\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//\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//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'app-header',\n components: {\n AppLink: _helpers__WEBPACK_IMPORTED_MODULE_0__.AppLink\n },\n computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_1__.mapState)({\n config: state => state.config.general,\n subtitles: state => state.config.subtitles,\n clients: state => state.config.clients,\n notifiers: state => state.config.notifiers,\n postprocessing: state => state.config.postprocessing,\n search: state => state.config.search,\n system: state => state.config.system,\n isAuthenticated: state => state.auth.isAuthenticated,\n username: state => state.auth.user.username,\n warningLevel: state => state.config.general.logs.loggingLevels.warning,\n client: state => state.auth.client\n }),\n\n /**\n * Moved into a computed, so it's easier to mock in Jest.\n * @returns {Object} - Route name and query.\n */\n currentShowRoute() {\n const {\n $route\n } = this;\n return {\n name: $route.name,\n query: $route.query\n };\n },\n\n recentShows() {\n const {\n config,\n currentShowRoute\n } = this;\n const {\n recentShows\n } = config;\n\n const hideActiveShow = show => !(currentShowRoute.name === 'show' && show.showSlug === currentShowRoute.query.showslug);\n\n return recentShows.filter(hideActiveShow).map(show => {\n const link = `home/displayShow?showslug=${show.showSlug}`;\n return {\n name: show.name,\n link\n };\n });\n },\n\n topMenu() {\n return this.$route.meta.topMenu;\n },\n\n toolsBadgeCount() {\n const {\n config\n } = this;\n const {\n system\n } = this;\n const {\n logs\n } = config;\n const {\n news\n } = system;\n return logs.numErrors + logs.numWarnings + news.unread;\n },\n\n toolsBadgeClass() {\n const {\n config\n } = this;\n const {\n logs\n } = config;\n\n if (logs.numErrors > 0) {\n return ' btn-danger';\n }\n\n if (logs.numWarnings > 0) {\n return ' btn-warning';\n }\n\n return '';\n },\n\n linkVisible() {\n const {\n clients,\n notifiers,\n search,\n subtitles\n } = this;\n const {\n general\n } = search;\n const {\n kodi,\n plex,\n emby\n } = notifiers;\n return {\n plex: plex.server.enabled && plex.server.host.length !== 0,\n kodi: kodi.enabled && kodi.host.length !== 0,\n\n /* @TODO: Originally there was a check to make sure the API key\n was configured for Emby: ` app.EMBY_APIKEY != '' ` */\n emby: emby.enabled && emby.host,\n manageTorrents: clients.torrents.enabled && clients.torrents.method !== 'blackhole',\n failedDownloads: general.failedDownloads.enabled,\n subtitleMissed: subtitles.enabled\n };\n }\n\n },\n\n mounted() {\n const {\n $el\n } = this; // Auto close menus when clicking a RouterLink\n\n $el.clickCloseMenus = event => {\n const {\n target\n } = event;\n\n if (target.matches('#main_nav a.router-link, #main_nav a.router-link *') && (target.ariaExpanded === 'true' || target.ariaExpanded === null)) {\n const dropdown = target.closest('.dropdown');\n\n if (dropdown) {\n dropdown.querySelector('.dropdown-toggle').setAttribute('aria-expanded', false);\n dropdown.querySelector('.dropdown-menu').style.display = 'none';\n } // Also collapse the main nav if it's open\n\n\n $('#main_nav').collapse('hide');\n }\n };\n\n $el.addEventListener('click', $el.clickCloseMenus, {\n passive: true\n }); // Hover Dropdown for Nav\n\n $($el).on({\n mouseenter(event) {\n const $target = $(event.currentTarget);\n $target.find('.dropdown-menu').stop(true, true).delay(200).fadeIn(500, () => {\n $target.find('.dropdown-toggle').attr('aria-expanded', 'true');\n });\n },\n\n mouseleave(event) {\n const $target = $(event.currentTarget);\n $target.find('.dropdown-toggle').attr('aria-expanded', 'false');\n $target.find('.dropdown-menu').stop(true, true).delay(200).fadeOut(500);\n }\n\n }, 'ul.nav li.dropdown');\n },\n\n destroyed() {\n // Revert `mounted()`\n const {\n $el\n } = this; // Auto close menus when clicking a RouterLink\n\n $el.removeEventListener('click', $el.clickCloseMenus); // Hover Dropdown for Nav\n\n $($el).off('mouseenter mouseleave', 'ul.nav li.dropdown'); // @TODO Replace this with a real touchscreen check\n // hack alert: if we don't have a touchscreen, and we are already hovering the mouse, then click should link instead of toggle\n\n if ((navigator.maxTouchPoints || 0) < 2) {\n $($el).off('click', '.dropdown-toggle');\n }\n },\n\n methods: {\n confirmDialog(event, action) {\n const options = {\n confirmButton: 'Yes',\n cancelButton: 'Cancel',\n dialogClass: 'modal-dialog',\n post: false,\n button: $(event.currentTarget || event.target),\n\n confirm($element) {\n window.location.href = $element[0].href;\n }\n\n };\n\n if (action === 'newversion') {\n options.title = 'New version';\n options.text = 'New version available, update now?';\n } else if (action === 'logout') {\n options.title = 'Logout';\n options.text = 'Are you sure you want to logout from Medusa?';\n } else {\n return;\n }\n\n $.confirm(options, event);\n },\n\n async checkForupdates(event) {\n const {\n client,\n confirmDialog\n } = this;\n\n try {\n this.$snotify.info('Checking for a new version...');\n await client.api.post('system/operation', {\n type: 'CHECKFORUPDATE'\n });\n confirmDialog(event, 'newversion');\n } catch (error) {\n this.$snotify.info('You are already on the latest version');\n }\n },\n\n async updateKodi() {\n const {\n client\n } = this;\n\n try {\n await client.api.post('notifications/kodi/update');\n } catch (error) {\n this.$snotify.info('Error trying to update kodi');\n }\n },\n\n async updateEmby() {\n const {\n client\n } = this;\n\n try {\n await client.api.post('notifications/emby/update');\n } catch (error) {\n this.$snotify.info('Error trying to update emby');\n }\n },\n\n async updatePlex() {\n const {\n client\n } = this;\n\n try {\n await client.api.post('notifications/plex/update');\n } catch (error) {\n this.$snotify.info('Error trying to update plex');\n }\n }\n\n }\n});\n\n//# sourceURL=webpack://slim/./src/components/app-header.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-1%5B0%5D.rules%5B0%5D!./node_modules/vue-loader/lib/index.js??vue-loader-options"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/components/helpers/index.js\");\n/* provided dependency */ var $ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\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//\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//\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//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'app-header',\n components: {\n AppLink: _helpers__WEBPACK_IMPORTED_MODULE_0__.AppLink\n },\n computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_1__.mapState)({\n config: state => state.config.general,\n subtitles: state => state.config.subtitles,\n clients: state => state.config.clients,\n notifiers: state => state.config.notifiers,\n postprocessing: state => state.config.postprocessing,\n search: state => state.config.search,\n system: state => state.config.system,\n isAuthenticated: state => state.auth.isAuthenticated,\n username: state => state.auth.user.username,\n warningLevel: state => state.config.general.logs.loggingLevels.warning,\n client: state => state.auth.client,\n isConnected: state => state.auth.isConnected,\n socketIsConnected: state => state.socket.isConnected\n }),\n\n /**\n * Moved into a computed, so it's easier to mock in Jest.\n * @returns {Object} - Route name and query.\n */\n currentShowRoute() {\n const {\n $route\n } = this;\n return {\n name: $route.name,\n query: $route.query\n };\n },\n\n recentShows() {\n const {\n config,\n currentShowRoute\n } = this;\n const {\n recentShows\n } = config;\n\n const hideActiveShow = show => !(currentShowRoute.name === 'show' && show.showSlug === currentShowRoute.query.showslug);\n\n return recentShows.filter(hideActiveShow).map(show => {\n const link = `home/displayShow?showslug=${show.showSlug}`;\n return {\n name: show.name,\n link\n };\n });\n },\n\n topMenu() {\n return this.$route.meta.topMenu;\n },\n\n toolsBadgeCount() {\n const {\n config\n } = this;\n const {\n system\n } = this;\n const {\n logs\n } = config;\n const {\n news\n } = system;\n return logs.numErrors + logs.numWarnings + news.unread;\n },\n\n toolsBadgeClass() {\n const {\n config\n } = this;\n const {\n logs\n } = config;\n\n if (logs.numErrors > 0) {\n return ' btn-danger';\n }\n\n if (logs.numWarnings > 0) {\n return ' btn-warning';\n }\n\n return '';\n },\n\n linkVisible() {\n const {\n clients,\n notifiers,\n search,\n subtitles\n } = this;\n const {\n general\n } = search;\n const {\n kodi,\n plex,\n emby\n } = notifiers;\n return {\n plex: plex.server.enabled && plex.server.host.length !== 0,\n kodi: kodi.enabled && kodi.host.length !== 0,\n\n /* @TODO: Originally there was a check to make sure the API key\n was configured for Emby: ` app.EMBY_APIKEY != '' ` */\n emby: emby.enabled && emby.host,\n manageTorrents: clients.torrents.enabled && clients.torrents.method !== 'blackhole',\n failedDownloads: general.failedDownloads.enabled,\n subtitleMissed: subtitles.enabled\n };\n }\n\n },\n\n mounted() {\n const {\n $el\n } = this; // Auto close menus when clicking a RouterLink\n\n $el.clickCloseMenus = event => {\n const {\n target\n } = event;\n\n if (target.matches('#main_nav a.router-link, #main_nav a.router-link *') && (target.ariaExpanded === 'true' || target.ariaExpanded === null)) {\n const dropdown = target.closest('.dropdown');\n\n if (dropdown) {\n dropdown.querySelector('.dropdown-toggle').setAttribute('aria-expanded', false);\n dropdown.querySelector('.dropdown-menu').style.display = 'none';\n } // Also collapse the main nav if it's open\n\n\n $('#main_nav').collapse('hide');\n }\n };\n\n $el.addEventListener('click', $el.clickCloseMenus, {\n passive: true\n }); // Hover Dropdown for Nav\n\n $($el).on({\n mouseenter(event) {\n const $target = $(event.currentTarget);\n $target.find('.dropdown-menu').stop(true, true).delay(200).fadeIn(500, () => {\n $target.find('.dropdown-toggle').attr('aria-expanded', 'true');\n });\n },\n\n mouseleave(event) {\n const $target = $(event.currentTarget);\n $target.find('.dropdown-toggle').attr('aria-expanded', 'false');\n $target.find('.dropdown-menu').stop(true, true).delay(200).fadeOut(500);\n }\n\n }, 'ul.nav li.dropdown');\n },\n\n destroyed() {\n // Revert `mounted()`\n const {\n $el\n } = this; // Auto close menus when clicking a RouterLink\n\n $el.removeEventListener('click', $el.clickCloseMenus); // Hover Dropdown for Nav\n\n $($el).off('mouseenter mouseleave', 'ul.nav li.dropdown'); // @TODO Replace this with a real touchscreen check\n // hack alert: if we don't have a touchscreen, and we are already hovering the mouse, then click should link instead of toggle\n\n if ((navigator.maxTouchPoints || 0) < 2) {\n $($el).off('click', '.dropdown-toggle');\n }\n },\n\n methods: {\n confirmDialog(event, action) {\n const options = {\n confirmButton: 'Yes',\n cancelButton: 'Cancel',\n dialogClass: 'modal-dialog',\n post: false,\n button: $(event.currentTarget || event.target),\n\n confirm($element) {\n window.location.href = $element[0].href;\n }\n\n };\n\n if (action === 'newversion') {\n options.title = 'New version';\n options.text = 'New version available, update now?';\n } else if (action === 'logout') {\n options.title = 'Logout';\n options.text = 'Are you sure you want to logout from Medusa?';\n } else {\n return;\n }\n\n $.confirm(options, event);\n },\n\n async checkForupdates(event) {\n const {\n client,\n confirmDialog\n } = this;\n\n try {\n this.$snotify.info('Checking for a new version...');\n await client.api.post('system/operation', {\n type: 'CHECKFORUPDATE'\n });\n confirmDialog(event, 'newversion');\n } catch (error) {\n this.$snotify.info('You are already on the latest version');\n }\n },\n\n async updateKodi() {\n const {\n client\n } = this;\n\n try {\n await client.api.post('notifications/kodi/update');\n } catch (error) {\n this.$snotify.info('Error trying to update kodi');\n }\n },\n\n async updateEmby() {\n const {\n client\n } = this;\n\n try {\n await client.api.post('notifications/emby/update');\n } catch (error) {\n this.$snotify.info('Error trying to update emby');\n }\n },\n\n async updatePlex() {\n const {\n client\n } = this;\n\n try {\n await client.api.post('notifications/plex/update');\n } catch (error) {\n this.$snotify.info('Error trying to update plex');\n }\n },\n\n reloadPage() {\n location.reload();\n }\n\n }\n});\n\n//# sourceURL=webpack://slim/./src/components/app-header.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-1%5B0%5D.rules%5B0%5D!./node_modules/vue-loader/lib/index.js??vue-loader-options"); /***/ }), @@ -1379,7 +1379,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n/* harmony import */ var vue_native_websocket__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-native-websocket */ \"./node_modules/vue-native-websocket/dist/build.js\");\n/* harmony import */ var vue_native_websocket__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue_native_websocket__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modules */ \"./src/store/modules/index.js\");\n/* harmony import */ var _mutation_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mutation-types */ \"./src/store/mutation-types.js\");\n\n\n\n\n\nvue__WEBPACK_IMPORTED_MODULE_3__[\"default\"].use(vuex__WEBPACK_IMPORTED_MODULE_4__[\"default\"]);\nconst store = new vuex__WEBPACK_IMPORTED_MODULE_4__.Store({\n modules: {\n auth: _modules__WEBPACK_IMPORTED_MODULE_1__.auth,\n config: _modules__WEBPACK_IMPORTED_MODULE_1__.config,\n defaults: _modules__WEBPACK_IMPORTED_MODULE_1__.defaults,\n history: _modules__WEBPACK_IMPORTED_MODULE_1__.history,\n notifications: _modules__WEBPACK_IMPORTED_MODULE_1__.notifications,\n provider: _modules__WEBPACK_IMPORTED_MODULE_1__.provider,\n recommended: _modules__WEBPACK_IMPORTED_MODULE_1__.recommended,\n schedule: _modules__WEBPACK_IMPORTED_MODULE_1__.schedule,\n shows: _modules__WEBPACK_IMPORTED_MODULE_1__.shows,\n socket: _modules__WEBPACK_IMPORTED_MODULE_1__.socket,\n stats: _modules__WEBPACK_IMPORTED_MODULE_1__.stats,\n queue: _modules__WEBPACK_IMPORTED_MODULE_1__.queue\n },\n state: {},\n mutations: {},\n getters: {},\n actions: {}\n}); // Keep as a non-arrow function for `this` context.\n\nconst passToStoreHandler = function (eventName, event, next) {\n const target = eventName.toUpperCase();\n const eventData = event.data;\n\n if (target === 'SOCKET_ONMESSAGE') {\n const message = JSON.parse(eventData);\n const {\n data,\n event\n } = message; // Show the notification to the user\n\n if (event === 'notification') {\n const {\n body,\n hash,\n type,\n title\n } = data;\n window.displayNotification(type, title, body, hash);\n } else if (event === 'configUpdated') {\n const {\n section,\n config\n } = data;\n this.store.dispatch('updateConfig', {\n section,\n config\n });\n } else if (event === 'showUpdated' || event === 'showAdded') {\n this.store.dispatch('updateShow', data);\n } else if (event === 'showRemoved') {\n // We need this for the QueueItemChangeIndexer\n this.store.dispatch('removeShow', data);\n } else if (event === 'addManualSearchResult') {\n this.store.dispatch('addManualSearchResult', data);\n } else if (event === 'QueueItemUpdate') {\n this.store.dispatch('updateQueueItem', data);\n } else if (event === 'QueueItemShow') {\n // Used as a generic showqueue item. If you want to know the specific action (update, refresh, remove, etc.)\n // Use queueItem.name. Like queueItem.name === 'REFRESH'.\n if (data.name === 'REMOVE-SHOW') {\n this.store.dispatch('removeShow', data.show);\n } else {\n this.store.dispatch('updateShowQueueItem', data);\n }\n } else if (event === 'historyUpdate') {\n this.store.dispatch('updateHistory', data);\n } else {\n window.displayNotification('info', event, data);\n }\n } // Resume normal 'passToStore' handling\n\n\n next(eventName, event);\n};\n\nconst websocketUrl = (() => {\n const {\n protocol,\n host\n } = window.location;\n const proto = protocol === 'https:' ? 'wss:' : 'ws:';\n const WSMessageUrl = '/ui';\n let webRoot = document.body.getAttribute('web-root');\n\n if (webRoot) {\n if (!webRoot.startsWith('/')) {\n webRoot = `/${webRoot}`;\n }\n }\n\n return `${proto}//${host}${webRoot}/ws${WSMessageUrl}`;\n})();\n\nvue__WEBPACK_IMPORTED_MODULE_3__[\"default\"].use((vue_native_websocket__WEBPACK_IMPORTED_MODULE_0___default()), websocketUrl, {\n store,\n format: 'json',\n reconnection: true,\n // (Boolean) whether to reconnect automatically (false)\n reconnectionAttempts: 2,\n // (Number) number of reconnection attempts before giving up (Infinity),\n reconnectionDelay: 1000,\n // (Number) how long to initially wait before attempting a new (1000)\n passToStoreHandler,\n // (Function|) Handler for events triggered by the WebSocket (false)\n mutations: {\n SOCKET_ONOPEN: _mutation_types__WEBPACK_IMPORTED_MODULE_2__.SOCKET_ONOPEN,\n SOCKET_ONCLOSE: _mutation_types__WEBPACK_IMPORTED_MODULE_2__.SOCKET_ONCLOSE,\n SOCKET_ONERROR: _mutation_types__WEBPACK_IMPORTED_MODULE_2__.SOCKET_ONERROR,\n SOCKET_ONMESSAGE: _mutation_types__WEBPACK_IMPORTED_MODULE_2__.SOCKET_ONMESSAGE,\n SOCKET_RECONNECT: _mutation_types__WEBPACK_IMPORTED_MODULE_2__.SOCKET_RECONNECT,\n SOCKET_RECONNECT_ERROR: _mutation_types__WEBPACK_IMPORTED_MODULE_2__.SOCKET_RECONNECT_ERROR\n }\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (store);\n\n//# sourceURL=webpack://slim/./src/store/index.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n/* harmony import */ var vue_native_websocket__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-native-websocket */ \"./node_modules/vue-native-websocket/dist/build.js\");\n/* harmony import */ var vue_native_websocket__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue_native_websocket__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modules */ \"./src/store/modules/index.js\");\n/* harmony import */ var _mutation_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mutation-types */ \"./src/store/mutation-types.js\");\n\n\n\n\n\nvue__WEBPACK_IMPORTED_MODULE_3__[\"default\"].use(vuex__WEBPACK_IMPORTED_MODULE_4__[\"default\"]);\nconst store = new vuex__WEBPACK_IMPORTED_MODULE_4__.Store({\n modules: {\n auth: _modules__WEBPACK_IMPORTED_MODULE_1__.auth,\n config: _modules__WEBPACK_IMPORTED_MODULE_1__.config,\n defaults: _modules__WEBPACK_IMPORTED_MODULE_1__.defaults,\n history: _modules__WEBPACK_IMPORTED_MODULE_1__.history,\n notifications: _modules__WEBPACK_IMPORTED_MODULE_1__.notifications,\n provider: _modules__WEBPACK_IMPORTED_MODULE_1__.provider,\n recommended: _modules__WEBPACK_IMPORTED_MODULE_1__.recommended,\n schedule: _modules__WEBPACK_IMPORTED_MODULE_1__.schedule,\n shows: _modules__WEBPACK_IMPORTED_MODULE_1__.shows,\n socket: _modules__WEBPACK_IMPORTED_MODULE_1__.socket,\n stats: _modules__WEBPACK_IMPORTED_MODULE_1__.stats,\n queue: _modules__WEBPACK_IMPORTED_MODULE_1__.queue\n },\n state: {},\n mutations: {},\n getters: {},\n actions: {}\n}); // Keep as a non-arrow function for `this` context.\n\nconst passToStoreHandler = function (eventName, event, next) {\n const target = eventName.toUpperCase();\n const eventData = event.data;\n\n if (target === 'SOCKET_ONMESSAGE') {\n const message = JSON.parse(eventData);\n const {\n data,\n event\n } = message; // Show the notification to the user\n\n if (event === 'notification') {\n const {\n body,\n hash,\n type,\n title\n } = data;\n window.displayNotification(type, title, body, hash);\n } else if (event === 'configUpdated') {\n const {\n section,\n config\n } = data;\n this.store.dispatch('updateConfig', {\n section,\n config\n });\n } else if (event === 'showUpdated' || event === 'showAdded') {\n this.store.dispatch('updateShow', data);\n } else if (event === 'showRemoved') {\n // We need this for the QueueItemChangeIndexer\n this.store.dispatch('removeShow', data);\n } else if (event === 'addManualSearchResult') {\n this.store.dispatch('addManualSearchResult', data);\n } else if (event === 'QueueItemUpdate') {\n this.store.dispatch('updateQueueItem', data);\n } else if (event === 'QueueItemShow') {\n // Used as a generic showqueue item. If you want to know the specific action (update, refresh, remove, etc.)\n // Use queueItem.name. Like queueItem.name === 'REFRESH'.\n if (data.name === 'REMOVE-SHOW') {\n this.store.dispatch('removeShow', data.show);\n } else {\n this.store.dispatch('updateShowQueueItem', data);\n }\n } else if (event === 'historyUpdate') {\n this.store.dispatch('updateHistory', data);\n } else {\n window.displayNotification('info', event, data);\n }\n } // Resume normal 'passToStore' handling\n\n\n next(eventName, event);\n};\n\nconst websocketUrl = (() => {\n const {\n protocol,\n host\n } = window.location;\n const proto = protocol === 'https:' ? 'wss:' : 'ws:';\n const WSMessageUrl = '/ui';\n let webRoot = document.body.getAttribute('web-root');\n\n if (webRoot) {\n if (!webRoot.startsWith('/')) {\n webRoot = `/${webRoot}`;\n }\n }\n\n return `${proto}//${host}${webRoot}/ws${WSMessageUrl}`;\n})();\n\nvue__WEBPACK_IMPORTED_MODULE_3__[\"default\"].use((vue_native_websocket__WEBPACK_IMPORTED_MODULE_0___default()), websocketUrl, {\n store,\n format: 'json',\n reconnection: true,\n // (Boolean) whether to reconnect automatically (false)\n reconnectionAttempts: 25,\n // (Number) number of reconnection attempts before giving up (Infinity),\n reconnectionDelay: 2500,\n // (Number) how long to initially wait before attempting a new (1000)\n passToStoreHandler,\n // (Function|) Handler for events triggered by the WebSocket (false)\n mutations: {\n SOCKET_ONOPEN: _mutation_types__WEBPACK_IMPORTED_MODULE_2__.SOCKET_ONOPEN,\n SOCKET_ONCLOSE: _mutation_types__WEBPACK_IMPORTED_MODULE_2__.SOCKET_ONCLOSE,\n SOCKET_ONERROR: _mutation_types__WEBPACK_IMPORTED_MODULE_2__.SOCKET_ONERROR,\n SOCKET_ONMESSAGE: _mutation_types__WEBPACK_IMPORTED_MODULE_2__.SOCKET_ONMESSAGE,\n SOCKET_RECONNECT: _mutation_types__WEBPACK_IMPORTED_MODULE_2__.SOCKET_RECONNECT,\n SOCKET_RECONNECT_ERROR: _mutation_types__WEBPACK_IMPORTED_MODULE_2__.SOCKET_RECONNECT_ERROR\n }\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (store);\n\n//# sourceURL=webpack://slim/./src/store/index.js?"); /***/ }), @@ -1390,7 +1390,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _mutation_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../mutation-types */ \"./src/store/mutation-types.js\");\n/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../api */ \"./src/api.js\");\n/* harmony import */ var vue_jwt_decode__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-jwt-decode */ \"./node_modules/vue-jwt-decode/dist/lib/vue-jwt-decode.min.js\");\n/* harmony import */ var vue_jwt_decode__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(vue_jwt_decode__WEBPACK_IMPORTED_MODULE_2__);\n\n\n\nconst state = {\n isAuthenticated: false,\n user: {},\n tokens: {\n access: null,\n refresh: null\n },\n error: null,\n client: null,\n apiKey: null,\n webRoot: null\n};\nconst mutations = {\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGIN_PENDING]() {},\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGIN_SUCCESS](state, user) {\n state.user.username = user.username;\n state.user.group = user.group;\n state.apiKey = user.apiKey;\n state.webRoot = user.webRoot;\n state.isAuthenticated = true;\n state.error = null;\n },\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGIN_FAILED](state, _ref) {\n let {\n error\n } = _ref;\n state.user = {};\n state.isAuthenticated = false;\n state.error = error;\n },\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGOUT](state) {\n state.user = {};\n state.isAuthenticated = false;\n state.error = null;\n },\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.REFRESH_TOKEN]() {},\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.REMOVE_AUTH_ERROR]() {},\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.AUTHENTICATE](state, client) {\n state.client = client;\n state.tokens.access = client.token;\n }\n\n};\nconst getters = {};\nconst actions = {\n login(_ref2) {\n let {\n commit,\n state\n } = _ref2;\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGIN_PENDING); // Check if we got a token from the /token call.\n\n const {\n client\n } = state;\n const {\n token\n } = client;\n\n if (!token) {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGIN_FAILED, {\n error: 'Missing token'\n });\n return {\n success: false,\n error: 'Missing token'\n };\n }\n\n const credentials = vue_jwt_decode__WEBPACK_IMPORTED_MODULE_2___default().decode(token); // @TODO: Add real JWT login\n\n const apiLogin = credentials => Promise.resolve(credentials);\n\n return apiLogin(credentials).then(user => {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGIN_SUCCESS, user);\n return {\n success: true\n };\n }).catch(error => {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGIN_FAILED, {\n error,\n credentials\n });\n return {\n success: false,\n error\n };\n });\n },\n\n logout(context) {\n const {\n commit\n } = context;\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGOUT);\n },\n\n auth(_ref3) {\n let {\n commit\n } = _ref3;\n // Get the JWT token\n return new Promise(resolve => {\n const apiClient = new _api__WEBPACK_IMPORTED_MODULE_1__[\"default\"]();\n apiClient.getToken().then(() => {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.AUTHENTICATE, apiClient);\n resolve();\n });\n });\n }\n\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n state,\n mutations,\n getters,\n actions\n});\n\n//# sourceURL=webpack://slim/./src/store/modules/auth.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _mutation_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../mutation-types */ \"./src/store/mutation-types.js\");\n/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../api */ \"./src/api.js\");\n/* harmony import */ var vue_jwt_decode__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-jwt-decode */ \"./node_modules/vue-jwt-decode/dist/lib/vue-jwt-decode.min.js\");\n/* harmony import */ var vue_jwt_decode__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(vue_jwt_decode__WEBPACK_IMPORTED_MODULE_2__);\n\n\n\nconst state = {\n isAuthenticated: false,\n isConnected: false,\n user: {},\n tokens: {\n access: null,\n refresh: null\n },\n error: null,\n client: null,\n apiKey: null,\n webRoot: null\n};\nconst mutations = {\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGIN_PENDING]() {},\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGIN_SUCCESS](state, user) {\n state.user.username = user.username;\n state.user.group = user.group;\n state.apiKey = user.apiKey;\n state.webRoot = user.webRoot;\n state.isAuthenticated = true;\n state.error = null;\n },\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGIN_FAILED](state, _ref) {\n let {\n error\n } = _ref;\n state.user = {};\n state.isAuthenticated = false;\n state.error = error;\n },\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGOUT](state) {\n state.user = {};\n state.isAuthenticated = false;\n state.error = null;\n },\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.REFRESH_TOKEN]() {},\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.REMOVE_AUTH_ERROR]() {},\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.AUTHENTICATE](state, client) {\n state.client = client;\n state.tokens.access = client.token;\n },\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.CONNECT](state, value) {\n state.isConnected = value;\n }\n\n};\nconst getters = {};\nconst actions = {\n login(_ref2) {\n let {\n commit,\n state\n } = _ref2;\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGIN_PENDING); // Check if we got a token from the /token call.\n\n const {\n client\n } = state;\n const {\n token\n } = client;\n\n if (!token) {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGIN_FAILED, {\n error: 'Missing token'\n });\n return {\n success: false,\n error: 'Missing token'\n };\n }\n\n const credentials = vue_jwt_decode__WEBPACK_IMPORTED_MODULE_2___default().decode(token); // @TODO: Add real JWT login\n\n const apiLogin = credentials => Promise.resolve(credentials);\n\n return apiLogin(credentials).then(user => {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGIN_SUCCESS, user);\n return {\n success: true\n };\n }).catch(error => {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGIN_FAILED, {\n error,\n credentials\n });\n return {\n success: false,\n error\n };\n });\n },\n\n logout(context) {\n const {\n commit\n } = context;\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGOUT);\n },\n\n auth(_ref3) {\n let {\n commit\n } = _ref3;\n // Get the JWT token\n return new Promise(resolve => {\n const apiClient = new _api__WEBPACK_IMPORTED_MODULE_1__[\"default\"]();\n apiClient.getToken().then(() => {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.AUTHENTICATE, apiClient);\n resolve();\n });\n });\n },\n\n connect(_ref4, connected) {\n let {\n commit\n } = _ref4;\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.CONNECT, connected);\n }\n\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n state,\n mutations,\n getters,\n actions\n});\n\n//# sourceURL=webpack://slim/./src/store/modules/auth.js?"); /***/ }), @@ -1918,7 +1918,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"AUTHENTICATE\": () => (/* binding */ AUTHENTICATE),\n/* harmony export */ \"LOGIN_PENDING\": () => (/* binding */ LOGIN_PENDING),\n/* harmony export */ \"LOGIN_SUCCESS\": () => (/* binding */ LOGIN_SUCCESS),\n/* harmony export */ \"LOGIN_FAILED\": () => (/* binding */ LOGIN_FAILED),\n/* harmony export */ \"LOGOUT\": () => (/* binding */ LOGOUT),\n/* harmony export */ \"REFRESH_TOKEN\": () => (/* binding */ REFRESH_TOKEN),\n/* harmony export */ \"REMOVE_AUTH_ERROR\": () => (/* binding */ REMOVE_AUTH_ERROR),\n/* harmony export */ \"SOCKET_ONOPEN\": () => (/* binding */ SOCKET_ONOPEN),\n/* harmony export */ \"SOCKET_ONCLOSE\": () => (/* binding */ SOCKET_ONCLOSE),\n/* harmony export */ \"SOCKET_ONERROR\": () => (/* binding */ SOCKET_ONERROR),\n/* harmony export */ \"SOCKET_ONMESSAGE\": () => (/* binding */ SOCKET_ONMESSAGE),\n/* harmony export */ \"SOCKET_RECONNECT\": () => (/* binding */ SOCKET_RECONNECT),\n/* harmony export */ \"SOCKET_RECONNECT_ERROR\": () => (/* binding */ SOCKET_RECONNECT_ERROR),\n/* harmony export */ \"NOTIFICATIONS_ENABLED\": () => (/* binding */ NOTIFICATIONS_ENABLED),\n/* harmony export */ \"NOTIFICATIONS_DISABLED\": () => (/* binding */ NOTIFICATIONS_DISABLED),\n/* harmony export */ \"ADD_CONFIG\": () => (/* binding */ ADD_CONFIG),\n/* harmony export */ \"UPDATE_LAYOUT_LOCAL\": () => (/* binding */ UPDATE_LAYOUT_LOCAL),\n/* harmony export */ \"ADD_HISTORY\": () => (/* binding */ ADD_HISTORY),\n/* harmony export */ \"ADD_HISTORY_ROW\": () => (/* binding */ ADD_HISTORY_ROW),\n/* harmony export */ \"ADD_SHOW\": () => (/* binding */ ADD_SHOW),\n/* harmony export */ \"ADD_STATS\": () => (/* binding */ ADD_STATS),\n/* harmony export */ \"ADD_SHOW_CONFIG\": () => (/* binding */ ADD_SHOW_CONFIG),\n/* harmony export */ \"ADD_RECOMMENDED_SHOW\": () => (/* binding */ ADD_RECOMMENDED_SHOW),\n/* harmony export */ \"SET_RECOMMENDED_SHOWS\": () => (/* binding */ SET_RECOMMENDED_SHOWS),\n/* harmony export */ \"SET_RECOMMENDED_SHOWS_TRAKT_REMOVED\": () => (/* binding */ SET_RECOMMENDED_SHOWS_TRAKT_REMOVED),\n/* harmony export */ \"SET_RECOMMENDED_SHOWS_CATEGORIES\": () => (/* binding */ SET_RECOMMENDED_SHOWS_CATEGORIES),\n/* harmony export */ \"ADD_SHOWS\": () => (/* binding */ ADD_SHOWS),\n/* harmony export */ \"ADD_SHOW_EPISODE\": () => (/* binding */ ADD_SHOW_EPISODE),\n/* harmony export */ \"ADD_REMOTE_BRANCHES\": () => (/* binding */ ADD_REMOTE_BRANCHES),\n/* harmony export */ \"SET_STATS\": () => (/* binding */ SET_STATS),\n/* harmony export */ \"SET_MAX_DOWNLOAD_COUNT\": () => (/* binding */ SET_MAX_DOWNLOAD_COUNT),\n/* harmony export */ \"ADD_SHOW_SCENE_EXCEPTION\": () => (/* binding */ ADD_SHOW_SCENE_EXCEPTION),\n/* harmony export */ \"REMOVE_SHOW_SCENE_EXCEPTION\": () => (/* binding */ REMOVE_SHOW_SCENE_EXCEPTION),\n/* harmony export */ \"REMOVE_SHOW_CONFIG_TEMPLATE\": () => (/* binding */ REMOVE_SHOW_CONFIG_TEMPLATE),\n/* harmony export */ \"ADD_SHOW_HISTORY\": () => (/* binding */ ADD_SHOW_HISTORY),\n/* harmony export */ \"ADD_SHOW_EPISODE_HISTORY\": () => (/* binding */ ADD_SHOW_EPISODE_HISTORY),\n/* harmony export */ \"ADD_PROVIDER\": () => (/* binding */ ADD_PROVIDER),\n/* harmony export */ \"ADD_PROVIDERS\": () => (/* binding */ ADD_PROVIDERS),\n/* harmony export */ \"ADD_PROVIDER_CACHE\": () => (/* binding */ ADD_PROVIDER_CACHE),\n/* harmony export */ \"ADD_SEARCH_RESULTS\": () => (/* binding */ ADD_SEARCH_RESULTS),\n/* harmony export */ \"ADD_QUEUE_ITEM\": () => (/* binding */ ADD_QUEUE_ITEM),\n/* harmony export */ \"SET_LAST_ITEM\": () => (/* binding */ SET_LAST_ITEM),\n/* harmony export */ \"ADD_SHOW_QUEUE_ITEM\": () => (/* binding */ ADD_SHOW_QUEUE_ITEM),\n/* harmony export */ \"REMOVE_SHOW\": () => (/* binding */ REMOVE_SHOW),\n/* harmony export */ \"REMOVE_PROVIDER\": () => (/* binding */ REMOVE_PROVIDER),\n/* harmony export */ \"UPDATE_SHOWLIST_DEFAULT\": () => (/* binding */ UPDATE_SHOWLIST_DEFAULT),\n/* harmony export */ \"ADD_SHOW_CONFIG_TEMPLATE\": () => (/* binding */ ADD_SHOW_CONFIG_TEMPLATE),\n/* harmony export */ \"ADD_SCHEDULE\": () => (/* binding */ ADD_SCHEDULE)\n/* harmony export */ });\nconst AUTHENTICATE = '🔒 Authenticating';\nconst LOGIN_PENDING = '🔒 Logging in';\nconst LOGIN_SUCCESS = '🔒 ✅ Login Successful';\nconst LOGIN_FAILED = '🔒 ❌ Login Failed';\nconst LOGOUT = '🔒 Logout';\nconst REFRESH_TOKEN = '🔒 Refresh Token';\nconst REMOVE_AUTH_ERROR = '🔒 Remove Auth Error';\nconst SOCKET_ONOPEN = '🔗 ✅ WebSocket connected';\nconst SOCKET_ONCLOSE = '🔗 ❌ WebSocket disconnected';\nconst SOCKET_ONERROR = '🔗 ❌ WebSocket error';\nconst SOCKET_ONMESSAGE = '🔗 ✉️ 📥 WebSocket message received';\nconst SOCKET_RECONNECT = '🔗 🔃 WebSocket reconnecting';\nconst SOCKET_RECONNECT_ERROR = '🔗 🔃 ❌ WebSocket reconnection attempt failed';\nconst NOTIFICATIONS_ENABLED = '🔔 Notifications Enabled';\nconst NOTIFICATIONS_DISABLED = '🔔 Notifications Disabled';\nconst ADD_CONFIG = '⚙️ Config added to store';\nconst UPDATE_LAYOUT_LOCAL = '⚙️ Local layout updated in store';\nconst ADD_REMOTE_BRANCHES = '⚙️ Add git remote branches to store';\nconst ADD_SHOW = '📺 Show added to store';\nconst ADD_SHOW_CONFIG = '📺 Show config updated in store';\nconst ADD_SHOWS = '📺 Multiple Shows added to store in bulk';\nconst ADD_SHOW_EPISODE = '📺 Shows season with episodes added to store';\nconst ADD_STATS = 'ℹ️ Statistics added to store';\nconst ADD_RECOMMENDED_SHOW = '📺 Recommended Show added to store';\nconst SET_RECOMMENDED_SHOWS = '📺 Recommended Shows added to store';\nconst SET_RECOMMENDED_SHOWS_TRAKT_REMOVED = '📺 Recommended Show Trakt removed added to store';\nconst SET_RECOMMENDED_SHOWS_CATEGORIES = '📺 Recommended Show categories added to store';\nconst SET_STATS = 'SET_STATS';\nconst SET_MAX_DOWNLOAD_COUNT = 'SET_MAX_DOWNLOAD_COUNT';\nconst ADD_SHOW_SCENE_EXCEPTION = '📺 Add a scene exception';\nconst REMOVE_SHOW_SCENE_EXCEPTION = '📺 Remove a scene exception';\nconst REMOVE_SHOW_CONFIG_TEMPLATE = '📺 Remove a shows search template';\nconst ADD_HISTORY = '📺 History added to store';\nconst ADD_HISTORY_ROW = '📺 History row added to store';\nconst ADD_SHOW_CONFIG_TEMPLATE = '📺 Search template added to shows templates';\nconst ADD_SHOW_HISTORY = '📺 Show specific History added to store';\nconst ADD_SHOW_EPISODE_HISTORY = \"📺 Show's episode specific History added to store\";\nconst ADD_PROVIDER = '⛽ Provider added to store';\nconst ADD_PROVIDERS = '⛽ Provider list added to store';\nconst ADD_PROVIDER_CACHE = '⛽ Provider cache results added to store';\nconst ADD_SEARCH_RESULTS = '⛽ New search results added for provider';\nconst ADD_QUEUE_ITEM = '🔍 Search queue item updated';\nconst SET_LAST_ITEM = '🔍 Search queue item set for last item';\nconst ADD_SHOW_QUEUE_ITEM = '📺 Show queue item added to store';\nconst REMOVE_SHOW = '📺 Show removed from store';\nconst REMOVE_PROVIDER = '⛽ Provider removed';\nconst UPDATE_SHOWLIST_DEFAULT = '⚙️ Anime config showlist default updated';\nconst ADD_SCHEDULE = '📅 Schedule information added';\n\n\n//# sourceURL=webpack://slim/./src/store/mutation-types.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"AUTHENTICATE\": () => (/* binding */ AUTHENTICATE),\n/* harmony export */ \"CONNECT\": () => (/* binding */ CONNECT),\n/* harmony export */ \"LOGIN_PENDING\": () => (/* binding */ LOGIN_PENDING),\n/* harmony export */ \"LOGIN_SUCCESS\": () => (/* binding */ LOGIN_SUCCESS),\n/* harmony export */ \"LOGIN_FAILED\": () => (/* binding */ LOGIN_FAILED),\n/* harmony export */ \"LOGOUT\": () => (/* binding */ LOGOUT),\n/* harmony export */ \"REFRESH_TOKEN\": () => (/* binding */ REFRESH_TOKEN),\n/* harmony export */ \"REMOVE_AUTH_ERROR\": () => (/* binding */ REMOVE_AUTH_ERROR),\n/* harmony export */ \"SOCKET_ONOPEN\": () => (/* binding */ SOCKET_ONOPEN),\n/* harmony export */ \"SOCKET_ONCLOSE\": () => (/* binding */ SOCKET_ONCLOSE),\n/* harmony export */ \"SOCKET_ONERROR\": () => (/* binding */ SOCKET_ONERROR),\n/* harmony export */ \"SOCKET_ONMESSAGE\": () => (/* binding */ SOCKET_ONMESSAGE),\n/* harmony export */ \"SOCKET_RECONNECT\": () => (/* binding */ SOCKET_RECONNECT),\n/* harmony export */ \"SOCKET_RECONNECT_ERROR\": () => (/* binding */ SOCKET_RECONNECT_ERROR),\n/* harmony export */ \"NOTIFICATIONS_ENABLED\": () => (/* binding */ NOTIFICATIONS_ENABLED),\n/* harmony export */ \"NOTIFICATIONS_DISABLED\": () => (/* binding */ NOTIFICATIONS_DISABLED),\n/* harmony export */ \"ADD_CONFIG\": () => (/* binding */ ADD_CONFIG),\n/* harmony export */ \"UPDATE_LAYOUT_LOCAL\": () => (/* binding */ UPDATE_LAYOUT_LOCAL),\n/* harmony export */ \"ADD_HISTORY\": () => (/* binding */ ADD_HISTORY),\n/* harmony export */ \"ADD_HISTORY_ROW\": () => (/* binding */ ADD_HISTORY_ROW),\n/* harmony export */ \"ADD_SHOW\": () => (/* binding */ ADD_SHOW),\n/* harmony export */ \"ADD_STATS\": () => (/* binding */ ADD_STATS),\n/* harmony export */ \"ADD_SHOW_CONFIG\": () => (/* binding */ ADD_SHOW_CONFIG),\n/* harmony export */ \"ADD_RECOMMENDED_SHOW\": () => (/* binding */ ADD_RECOMMENDED_SHOW),\n/* harmony export */ \"SET_RECOMMENDED_SHOWS\": () => (/* binding */ SET_RECOMMENDED_SHOWS),\n/* harmony export */ \"SET_RECOMMENDED_SHOWS_TRAKT_REMOVED\": () => (/* binding */ SET_RECOMMENDED_SHOWS_TRAKT_REMOVED),\n/* harmony export */ \"SET_RECOMMENDED_SHOWS_CATEGORIES\": () => (/* binding */ SET_RECOMMENDED_SHOWS_CATEGORIES),\n/* harmony export */ \"ADD_SHOWS\": () => (/* binding */ ADD_SHOWS),\n/* harmony export */ \"ADD_SHOW_EPISODE\": () => (/* binding */ ADD_SHOW_EPISODE),\n/* harmony export */ \"ADD_REMOTE_BRANCHES\": () => (/* binding */ ADD_REMOTE_BRANCHES),\n/* harmony export */ \"SET_STATS\": () => (/* binding */ SET_STATS),\n/* harmony export */ \"SET_MAX_DOWNLOAD_COUNT\": () => (/* binding */ SET_MAX_DOWNLOAD_COUNT),\n/* harmony export */ \"ADD_SHOW_SCENE_EXCEPTION\": () => (/* binding */ ADD_SHOW_SCENE_EXCEPTION),\n/* harmony export */ \"REMOVE_SHOW_SCENE_EXCEPTION\": () => (/* binding */ REMOVE_SHOW_SCENE_EXCEPTION),\n/* harmony export */ \"REMOVE_SHOW_CONFIG_TEMPLATE\": () => (/* binding */ REMOVE_SHOW_CONFIG_TEMPLATE),\n/* harmony export */ \"ADD_SHOW_HISTORY\": () => (/* binding */ ADD_SHOW_HISTORY),\n/* harmony export */ \"ADD_SHOW_EPISODE_HISTORY\": () => (/* binding */ ADD_SHOW_EPISODE_HISTORY),\n/* harmony export */ \"ADD_PROVIDER\": () => (/* binding */ ADD_PROVIDER),\n/* harmony export */ \"ADD_PROVIDERS\": () => (/* binding */ ADD_PROVIDERS),\n/* harmony export */ \"ADD_PROVIDER_CACHE\": () => (/* binding */ ADD_PROVIDER_CACHE),\n/* harmony export */ \"ADD_SEARCH_RESULTS\": () => (/* binding */ ADD_SEARCH_RESULTS),\n/* harmony export */ \"ADD_QUEUE_ITEM\": () => (/* binding */ ADD_QUEUE_ITEM),\n/* harmony export */ \"SET_LAST_ITEM\": () => (/* binding */ SET_LAST_ITEM),\n/* harmony export */ \"ADD_SHOW_QUEUE_ITEM\": () => (/* binding */ ADD_SHOW_QUEUE_ITEM),\n/* harmony export */ \"REMOVE_SHOW\": () => (/* binding */ REMOVE_SHOW),\n/* harmony export */ \"REMOVE_PROVIDER\": () => (/* binding */ REMOVE_PROVIDER),\n/* harmony export */ \"UPDATE_SHOWLIST_DEFAULT\": () => (/* binding */ UPDATE_SHOWLIST_DEFAULT),\n/* harmony export */ \"ADD_SHOW_CONFIG_TEMPLATE\": () => (/* binding */ ADD_SHOW_CONFIG_TEMPLATE),\n/* harmony export */ \"ADD_SCHEDULE\": () => (/* binding */ ADD_SCHEDULE)\n/* harmony export */ });\nconst AUTHENTICATE = '🔒 Authenticating';\nconst CONNECT = '🔒 🔗 Connected';\nconst LOGIN_PENDING = '🔒 Logging in';\nconst LOGIN_SUCCESS = '🔒 ✅ Login Successful';\nconst LOGIN_FAILED = '🔒 ❌ Login Failed';\nconst LOGOUT = '🔒 Logout';\nconst REFRESH_TOKEN = '🔒 Refresh Token';\nconst REMOVE_AUTH_ERROR = '🔒 Remove Auth Error';\nconst SOCKET_ONOPEN = '🔗 ✅ WebSocket connected';\nconst SOCKET_ONCLOSE = '🔗 ❌ WebSocket disconnected';\nconst SOCKET_ONERROR = '🔗 ❌ WebSocket error';\nconst SOCKET_ONMESSAGE = '🔗 ✉️ 📥 WebSocket message received';\nconst SOCKET_RECONNECT = '🔗 🔃 WebSocket reconnecting';\nconst SOCKET_RECONNECT_ERROR = '🔗 🔃 ❌ WebSocket reconnection attempt failed';\nconst NOTIFICATIONS_ENABLED = '🔔 Notifications Enabled';\nconst NOTIFICATIONS_DISABLED = '🔔 Notifications Disabled';\nconst ADD_CONFIG = '⚙️ Config added to store';\nconst UPDATE_LAYOUT_LOCAL = '⚙️ Local layout updated in store';\nconst ADD_REMOTE_BRANCHES = '⚙️ Add git remote branches to store';\nconst ADD_SHOW = '📺 Show added to store';\nconst ADD_SHOW_CONFIG = '📺 Show config updated in store';\nconst ADD_SHOWS = '📺 Multiple Shows added to store in bulk';\nconst ADD_SHOW_EPISODE = '📺 Shows season with episodes added to store';\nconst ADD_STATS = 'ℹ️ Statistics added to store';\nconst ADD_RECOMMENDED_SHOW = '📺 Recommended Show added to store';\nconst SET_RECOMMENDED_SHOWS = '📺 Recommended Shows added to store';\nconst SET_RECOMMENDED_SHOWS_TRAKT_REMOVED = '📺 Recommended Show Trakt removed added to store';\nconst SET_RECOMMENDED_SHOWS_CATEGORIES = '📺 Recommended Show categories added to store';\nconst SET_STATS = 'SET_STATS';\nconst SET_MAX_DOWNLOAD_COUNT = 'SET_MAX_DOWNLOAD_COUNT';\nconst ADD_SHOW_SCENE_EXCEPTION = '📺 Add a scene exception';\nconst REMOVE_SHOW_SCENE_EXCEPTION = '📺 Remove a scene exception';\nconst REMOVE_SHOW_CONFIG_TEMPLATE = '📺 Remove a shows search template';\nconst ADD_HISTORY = '📺 History added to store';\nconst ADD_HISTORY_ROW = '📺 History row added to store';\nconst ADD_SHOW_CONFIG_TEMPLATE = '📺 Search template added to shows templates';\nconst ADD_SHOW_HISTORY = '📺 Show specific History added to store';\nconst ADD_SHOW_EPISODE_HISTORY = \"📺 Show's episode specific History added to store\";\nconst ADD_PROVIDER = '⛽ Provider added to store';\nconst ADD_PROVIDERS = '⛽ Provider list added to store';\nconst ADD_PROVIDER_CACHE = '⛽ Provider cache results added to store';\nconst ADD_SEARCH_RESULTS = '⛽ New search results added for provider';\nconst ADD_QUEUE_ITEM = '🔍 Search queue item updated';\nconst SET_LAST_ITEM = '🔍 Search queue item set for last item';\nconst ADD_SHOW_QUEUE_ITEM = '📺 Show queue item added to store';\nconst REMOVE_SHOW = '📺 Show removed from store';\nconst REMOVE_PROVIDER = '⛽ Provider removed';\nconst UPDATE_SHOWLIST_DEFAULT = '⚙️ Anime config showlist default updated';\nconst ADD_SCHEDULE = '📅 Schedule information added';\n\n\n//# sourceURL=webpack://slim/./src/store/mutation-types.js?"); /***/ }), @@ -1951,7 +1951,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/getUrl.js */ \"./node_modules/css-loader/dist/runtime/getUrl.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__);\n// Imports\n\n\n\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __webpack_require__(/*! data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7 */ \"data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7\"), __webpack_require__.b);\nvar ___CSS_LOADER_URL_IMPORT_1___ = new URL(/* asset import */ __webpack_require__(/*! data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7 */ \"data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7\"), __webpack_require__.b);\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_1___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/** Use this as table styling for all table layouts */\\n.vgt-table-styling {\\n /* Schedule list layout */\\n}\\n.vgt-table-styling .vgt-table {\\n width: 100%;\\n margin-right: auto;\\n margin-left: auto;\\n text-align: left;\\n border-spacing: 0;\\n border-collapse: initial;\\n /* remove extra border from left edge */\\n /* optional disabled input styling */\\n /* When using collored rows (using the episode status name, Snatched, Downloaded, Failed, etc.)\\n * we'd like to have the text always black.\\n */\\n}\\n.vgt-table-styling .vgt-table th,\\n.vgt-table-styling .vgt-table td {\\n padding: 4px;\\n vertical-align: middle;\\n}\\n.vgt-table-styling .vgt-table th:first-child,\\n.vgt-table-styling .vgt-table td:first-child {\\n border-left: none;\\n}\\n.vgt-table-styling .vgt-table th {\\n text-align: center;\\n border-collapse: collapse;\\n font-weight: normal;\\n position: relative;\\n}\\n.vgt-table-styling .vgt-table span.break-word {\\n word-wrap: break-word;\\n}\\n.vgt-table-styling .vgt-table thead th.sorting.sorting-asc {\\n background-position-x: right;\\n background-position-y: bottom;\\n}\\n.vgt-table-styling .vgt-table thead th.sorting {\\n background-repeat: no-repeat;\\n}\\n.vgt-table-styling .vgt-table thead th.sorting.sorting-desc {\\n background-color: #555555;\\n background-image: url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \");\\n}\\n.vgt-table-styling .vgt-table thead th.sorting.sorting-asc {\\n background-color: #555555;\\n background-image: url(\" + ___CSS_LOADER_URL_REPLACEMENT_1___ + \");\\n background-position-x: right;\\n background-position-y: bottom;\\n}\\n.vgt-table-styling .vgt-table th.sortable button {\\n -webkit-appearance: none;\\n -moz-appearance: none;\\n appearance: none;\\n background: transparent;\\n border: none;\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n}\\n.vgt-table-styling .vgt-table thead th {\\n padding: 4px;\\n cursor: default;\\n}\\n.vgt-table-styling .vgt-table input.tablesorter-filter {\\n width: 98%;\\n height: auto;\\n -webkit-box-sizing: border-box;\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n}\\n.vgt-table-styling .vgt-table tr.tablesorter-filter-row,\\n.vgt-table-styling .vgt-table tr.tablesorter-filter-row td {\\n text-align: center;\\n}\\n.vgt-table-styling .vgt-table input.tablesorter-filter-row .disabled {\\n display: none;\\n}\\n.vgt-table-styling .vgt-table tfoot tr {\\n text-align: center;\\n border-collapse: collapse;\\n}\\n.vgt-table-styling .vgt-table tfoot a {\\n text-decoration: none;\\n}\\n.vgt-table-styling .vgt-table th.vgt-row-header {\\n text-align: left;\\n}\\n.vgt-table-styling .vgt-table .season-header {\\n display: inline;\\n margin-left: 5px;\\n}\\n.vgt-table-styling .vgt-table tr.spacer {\\n height: 25px;\\n}\\n.vgt-table-styling .vgt-table tr:hover {\\n opacity: 0.9;\\n}\\n.vgt-table-styling .vgt-table tr.status td > span {\\n color: black;\\n}\\n.vgt-table-styling .vgt-table span.episode-title > a {\\n text-decoration: none;\\n}\\n.vgt-table-styling .vgt-table span.episode-title > a:hover, .vgt-table-styling .vgt-table span.episode-title > a:focus {\\n text-decoration: underline;\\n}\\n.vgt-table-styling .vgt-table .skipped {\\n background-color: #bedeed;\\n}\\n.vgt-table-styling .vgt-table .snatched {\\n background-color: #ebc1ea;\\n}\\n.vgt-table-styling .vgt-table .downloaded {\\n background-color: #ffda8a;\\n}\\n.vgt-table-styling .vgt-table .failed {\\n background-color: #ff9999;\\n}\\n.vgt-table-styling .vgt-table .subtitled {\\n background-color: #bedeed;\\n}\\n.vgt-table-styling .vgt-table .archived {\\n background-color: #f5f1e4;\\n}\\n.vgt-table-styling .tablesorter-header-inner {\\n padding: 0 2px;\\n text-align: center;\\n}\\n.vgt-table-styling .vgt-dropdown > .button-group {\\n position: relative;\\n}\\n.vgt-table-styling .dropdown-toggle {\\n position: absolute;\\n z-index: 1;\\n top: 0.1em;\\n right: 0.1em;\\n width: 1em;\\n transition: width 0.2s ease-in-out;\\n}\\n.vgt-table-styling .dropdown-toggle:hover, .vgt-table-styling .dropdown-toggle:active {\\n width: 2em;\\n}\\n.vgt-table-styling .vgt-dropdown-menu {\\n position: absolute;\\n z-index: 1;\\n float: left;\\n min-width: 160px;\\n padding: 5px 0;\\n margin: 2px 0 0;\\n font-size: 14px;\\n text-align: left;\\n list-style: none;\\n background-clip: padding-box;\\n border-radius: 3px;\\n right: 0;\\n top: 2em;\\n}\\n.vgt-table-styling .vgt-dropdown-menu > li > span {\\n display: block;\\n padding: 3px 5px;\\n clear: both;\\n font-weight: 400;\\n line-height: 1.42857143;\\n white-space: nowrap;\\n}\\n.vgt-table-styling .align-center {\\n display: flex;\\n justify-content: center;\\n}\\n.vgt-table-styling .span-center > span {\\n display: flex;\\n justify-content: center;\\n}\\n.vgt-table-styling .indexer-image :not(:last-child) {\\n margin-right: 5px;\\n}\\n.vgt-table-styling .button-row {\\n width: 100%;\\n display: inline-block;\\n}\\n.vgt-table-styling .global-ignored td.release span {\\n color: red;\\n}\\n.vgt-table-styling .show-ignored td.release span {\\n color: red;\\n font-style: italic;\\n}\\n.vgt-table-styling .global-required td.release span {\\n color: green;\\n}\\n.vgt-table-styling .show-required td.release span {\\n color: green;\\n font-style: italic;\\n}\\n.vgt-table-styling .global-undesired td.release span {\\n color: orange;\\n}\\n.vgt-table-styling td.col-footer {\\n text-align: left !important;\\n}\\n.vgt-table-styling .vgt-wrap__footer {\\n color: white;\\n padding: 1em;\\n background-color: #333333;\\n margin-bottom: 1em;\\n display: flex;\\n justify-content: space-between;\\n}\\n.vgt-table-styling .footer__row-count,\\n.vgt-table-styling .footer__navigation__page-info {\\n display: inline;\\n}\\n.vgt-table-styling .footer__row-count__label {\\n margin-right: 1em;\\n}\\n.vgt-table-styling .vgt-wrap__footer .footer__navigation {\\n font-size: 14px;\\n}\\n.vgt-table-styling .vgt-pull-right {\\n float: right !important;\\n}\\n.vgt-table-styling .footer__navigation__page-btn {\\n display: inline-block;\\n padding: 4px 10px;\\n margin-bottom: 0;\\n font-size: 12px;\\n line-height: 16px;\\n vertical-align: middle;\\n border-radius: 1px;\\n}\\n.vgt-table-styling .footer__navigation__page-btn:hover {\\n text-decoration: none;\\n background-position: 0 -150px;\\n transition: background-position 0s linear;\\n background-image: none;\\n}\\n.vgt-table-styling .footer__navigation__page-btn.disabled {\\n display: none;\\n}\\n.vgt-table-styling .vgt-wrap__footer .footer__navigation__page-btn .chevron {\\n width: 24px;\\n height: 24px;\\n border-radius: 15%;\\n position: relative;\\n margin: 0 8px;\\n}\\n.vgt-table-styling .vgt-wrap__footer .footer__navigation__info,\\n.vgt-table-styling .vgt-wrap__footer .footer__navigation__page-info {\\n display: inline-flex;\\n color: #909399;\\n margin: 0 16px;\\n margin-top: 0;\\n margin-right: 16px;\\n margin-bottom: 0;\\n margin-left: 16px;\\n}\\n.vgt-table-styling .vgt-input {\\n height: 23px;\\n line-height: 23px;\\n font-size: 0.9em;\\n width: 100%;\\n background-color: #fff;\\n background-image: none;\\n border: 1px solid #ccc;\\n border-radius: 3px;\\n padding: 0 10px;\\n margin: 0;\\n}\\n.vgt-table-styling .vgt-select {\\n height: 23px;\\n line-height: 23px;\\n font-size: 0.9em;\\n width: 100%;\\n background-color: #fff;\\n background-image: none;\\n border: 1px solid #ccc;\\n border-radius: 3px;\\n padding: 0 10px;\\n}\\n.vgt-table-styling .schedule tr.today {\\n background-color: #f5f1e4;\\n}\\n.vgt-table-styling .schedule tr.soon {\\n background-color: #ddffdd;\\n}\\n.vgt-table-styling .schedule tr.missed {\\n background-color: #ffdddd;\\n}\\n.vgt-table-styling .schedule tr.later {\\n background-color: #bedeed;\\n}\\n.vgt-table-styling .schedule tr,\\n.vgt-table-styling .schedule tr a {\\n color: black;\\n}\\n.tooltip-wrapper {\\n float: left;\\n min-width: 340px;\\n}\\n.invalid {\\n background-color: #ff5b5b;\\n}\\n.tooltip {\\n display: block !important;\\n z-index: 10000;\\n}\\n.tooltip .tooltip-inner {\\n background: #ffef93;\\n color: #555;\\n border-radius: 16px;\\n padding: 5px 10px 4px;\\n border: 1px solid #f1d031;\\n -webkit-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);\\n -moz-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);\\n box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);\\n}\\n.tooltip .tooltip-arrow {\\n width: 0;\\n height: 0;\\n position: absolute;\\n margin: 5px;\\n border: 1px solid #ffef93;\\n z-index: 1;\\n}\\n.tooltip[x-placement^=top] {\\n margin-bottom: 5px;\\n}\\n.tooltip[x-placement^=top] .tooltip-arrow {\\n border-width: 5px 5px 0 5px;\\n border-left-color: transparent !important;\\n border-right-color: transparent !important;\\n border-bottom-color: transparent !important;\\n bottom: -5px;\\n left: calc(50% - 4px);\\n margin-top: 0;\\n margin-bottom: 0;\\n}\\n.tooltip[x-placement^=bottom] {\\n margin-top: 5px;\\n}\\n.tooltip[x-placement^=bottom] .tooltip-arrow {\\n border-width: 0 5px 5px 5px;\\n border-left-color: transparent !important;\\n border-right-color: transparent !important;\\n border-top-color: transparent !important;\\n top: -5px;\\n left: calc(50% - 4px);\\n margin-top: 0;\\n margin-bottom: 0;\\n}\\n.tooltip[x-placement^=right] {\\n margin-left: 5px;\\n}\\n.tooltip[x-placement^=right] .tooltip-arrow {\\n border-width: 5px 5px 5px 0;\\n border-left-color: transparent !important;\\n border-top-color: transparent !important;\\n border-bottom-color: transparent !important;\\n left: -4px;\\n top: calc(50% - 5px);\\n margin-left: 0;\\n margin-right: 0;\\n}\\n.tooltip[x-placement^=left] {\\n margin-right: 5px;\\n}\\n.tooltip[x-placement^=left] .tooltip-arrow {\\n border-width: 5px 0 5px 5px;\\n border-top-color: transparent !important;\\n border-right-color: transparent !important;\\n border-bottom-color: transparent !important;\\n right: -4px;\\n top: calc(50% - 5px);\\n margin-left: 0;\\n margin-right: 0;\\n}\\n.tooltip.popover .popover-inner {\\n background: #ffef93;\\n color: #555;\\n padding: 24px;\\n border-radius: 5px;\\n box-shadow: 0 5px 30px rgba(0, 0, 0, 0.1);\\n}\\n.tooltip.popover .popover-arrow {\\n border-color: #ffef93;\\n}\\n.tooltip[aria-hidden=true] {\\n visibility: hidden;\\n opacity: 0;\\n transition: opacity 0.15s, visibility 0.15s;\\n}\\n.tooltip[aria-hidden=false] {\\n visibility: visible;\\n opacity: 1;\\n transition: opacity 0.15s;\\n}\\n\\n/** Style the modal. This should be saved somewhere, where we create one modal template with slots, and style that. */\\n.modal-container {\\n border: 1px solid #111111;\\n box-shadow: 0 0 12px 0 rgba(0, 0, 0, 0.175);\\n border-radius: 0;\\n}\\n.modal-header {\\n padding: 9px 15px;\\n border-bottom: none;\\n border-radius: 0;\\n background-color: #373737;\\n}\\n.modal-content {\\n background: #222222;\\n border-radius: 0;\\n border: 1px solid rgba(0, 0, 0, 0.2);\\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\\n color: white;\\n}\\n.modal-body {\\n background: #222222;\\n overflow-y: auto;\\n}\\n.modal-footer {\\n border-top: none;\\n text-align: center;\\n}\\n.vue-tags-input {\\n width: 273px;\\n border: 1px solid #cccccc;\\n border-radius: 3px;\\n}\\n.vue-tags-input .ti-tag {\\n display: inline-flex;\\n width: 100%;\\n}\\n.vue-tags-input .ti-input {\\n border: none;\\n}\\n.vue-tags-input .country-left {\\n margin-right: 5px;\\n}\\nsvg.back-arrow {\\n color: #337ab7;\\n width: 20px;\\n height: 20px;\\n float: left;\\n margin-right: 1em;\\n cursor: pointer;\\n}\\nsvg.back-arrow:hover,\\nsvg.back-arrow:focus {\\n color: #23527c;\\n transform: translateX(-2px);\\n transition: transform ease-in-out 0.2s;\\n}\\n\\n/* Global style definitions should go here. */\\n#app {\\n padding-top: 4rem;\\n}\\n@media (max-width: 768px) {\\n#app {\\n padding-top: 3.8rem;\\n}\\n}\", \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://slim/./src/components/app.vue?./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/getUrl.js */ \"./node_modules/css-loader/dist/runtime/getUrl.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__);\n// Imports\n\n\n\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __webpack_require__(/*! data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7 */ \"data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7\"), __webpack_require__.b);\nvar ___CSS_LOADER_URL_IMPORT_1___ = new URL(/* asset import */ __webpack_require__(/*! data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7 */ \"data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7\"), __webpack_require__.b);\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_1___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/** Use this as table styling for all table layouts */\\n.vgt-table-styling {\\n /* Schedule list layout */\\n}\\n.vgt-table-styling .vgt-table {\\n width: 100%;\\n margin-right: auto;\\n margin-left: auto;\\n text-align: left;\\n border-spacing: 0;\\n border-collapse: initial;\\n /* remove extra border from left edge */\\n /* optional disabled input styling */\\n /* When using collored rows (using the episode status name, Snatched, Downloaded, Failed, etc.)\\n * we'd like to have the text always black.\\n */\\n}\\n.vgt-table-styling .vgt-table th,\\n.vgt-table-styling .vgt-table td {\\n padding: 4px;\\n vertical-align: middle;\\n}\\n.vgt-table-styling .vgt-table th:first-child,\\n.vgt-table-styling .vgt-table td:first-child {\\n border-left: none;\\n}\\n.vgt-table-styling .vgt-table th {\\n text-align: center;\\n border-collapse: collapse;\\n font-weight: normal;\\n position: relative;\\n}\\n.vgt-table-styling .vgt-table span.break-word {\\n word-wrap: break-word;\\n}\\n.vgt-table-styling .vgt-table thead th.sorting.sorting-asc {\\n background-position-x: right;\\n background-position-y: bottom;\\n}\\n.vgt-table-styling .vgt-table thead th.sorting {\\n background-repeat: no-repeat;\\n}\\n.vgt-table-styling .vgt-table thead th.sorting.sorting-desc {\\n background-color: #555555;\\n background-image: url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \");\\n}\\n.vgt-table-styling .vgt-table thead th.sorting.sorting-asc {\\n background-color: #555555;\\n background-image: url(\" + ___CSS_LOADER_URL_REPLACEMENT_1___ + \");\\n background-position-x: right;\\n background-position-y: bottom;\\n}\\n.vgt-table-styling .vgt-table th.sortable button {\\n -webkit-appearance: none;\\n -moz-appearance: none;\\n appearance: none;\\n background: transparent;\\n border: none;\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n}\\n.vgt-table-styling .vgt-table thead th {\\n padding: 4px;\\n cursor: default;\\n}\\n.vgt-table-styling .vgt-table input.tablesorter-filter {\\n width: 98%;\\n height: auto;\\n -webkit-box-sizing: border-box;\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n}\\n.vgt-table-styling .vgt-table tr.tablesorter-filter-row,\\n.vgt-table-styling .vgt-table tr.tablesorter-filter-row td {\\n text-align: center;\\n}\\n.vgt-table-styling .vgt-table input.tablesorter-filter-row .disabled {\\n display: none;\\n}\\n.vgt-table-styling .vgt-table tfoot tr {\\n text-align: center;\\n border-collapse: collapse;\\n}\\n.vgt-table-styling .vgt-table tfoot a {\\n text-decoration: none;\\n}\\n.vgt-table-styling .vgt-table th.vgt-row-header {\\n text-align: left;\\n}\\n.vgt-table-styling .vgt-table .season-header {\\n display: inline;\\n margin-left: 5px;\\n}\\n.vgt-table-styling .vgt-table tr.spacer {\\n height: 25px;\\n}\\n.vgt-table-styling .vgt-table tr:hover {\\n opacity: 0.9;\\n}\\n.vgt-table-styling .vgt-table tr.status td > span {\\n color: black;\\n}\\n.vgt-table-styling .vgt-table span.episode-title > a {\\n text-decoration: none;\\n}\\n.vgt-table-styling .vgt-table span.episode-title > a:hover, .vgt-table-styling .vgt-table span.episode-title > a:focus {\\n text-decoration: underline;\\n}\\n.vgt-table-styling .vgt-table .skipped {\\n background-color: #bedeed;\\n}\\n.vgt-table-styling .vgt-table .snatched {\\n background-color: #ebc1ea;\\n}\\n.vgt-table-styling .vgt-table .downloaded {\\n background-color: #ffda8a;\\n}\\n.vgt-table-styling .vgt-table .failed {\\n background-color: #ff9999;\\n}\\n.vgt-table-styling .vgt-table .subtitled {\\n background-color: #bedeed;\\n}\\n.vgt-table-styling .vgt-table .archived {\\n background-color: #f5f1e4;\\n}\\n.vgt-table-styling .tablesorter-header-inner {\\n padding: 0 2px;\\n text-align: center;\\n}\\n.vgt-table-styling .vgt-dropdown > .button-group {\\n position: relative;\\n}\\n.vgt-table-styling .dropdown-toggle {\\n position: absolute;\\n z-index: 1;\\n top: 0.1em;\\n right: 0.1em;\\n width: 1em;\\n transition: width 0.2s ease-in-out;\\n}\\n.vgt-table-styling .dropdown-toggle:hover, .vgt-table-styling .dropdown-toggle:active {\\n width: 2em;\\n}\\n.vgt-table-styling .vgt-dropdown-menu {\\n position: absolute;\\n z-index: 1;\\n float: left;\\n min-width: 160px;\\n padding: 5px 0;\\n margin: 2px 0 0;\\n font-size: 14px;\\n text-align: left;\\n list-style: none;\\n background-clip: padding-box;\\n border-radius: 3px;\\n right: 0;\\n top: 2em;\\n}\\n.vgt-table-styling .vgt-dropdown-menu > li > span {\\n display: block;\\n padding: 3px 5px;\\n clear: both;\\n font-weight: 400;\\n line-height: 1.42857143;\\n white-space: nowrap;\\n}\\n.vgt-table-styling .align-center {\\n display: flex;\\n justify-content: center;\\n}\\n.vgt-table-styling .span-center > span {\\n display: flex;\\n justify-content: center;\\n}\\n.vgt-table-styling .indexer-image :not(:last-child) {\\n margin-right: 5px;\\n}\\n.vgt-table-styling .button-row {\\n width: 100%;\\n display: inline-block;\\n}\\n.vgt-table-styling .global-ignored td.release span {\\n color: red;\\n}\\n.vgt-table-styling .show-ignored td.release span {\\n color: red;\\n font-style: italic;\\n}\\n.vgt-table-styling .global-required td.release span {\\n color: green;\\n}\\n.vgt-table-styling .show-required td.release span {\\n color: green;\\n font-style: italic;\\n}\\n.vgt-table-styling .global-undesired td.release span {\\n color: orange;\\n}\\n.vgt-table-styling td.col-footer {\\n text-align: left !important;\\n}\\n.vgt-table-styling .vgt-wrap__footer {\\n color: white;\\n padding: 1em;\\n background-color: #333333;\\n margin-bottom: 1em;\\n display: flex;\\n justify-content: space-between;\\n}\\n.vgt-table-styling .footer__row-count,\\n.vgt-table-styling .footer__navigation__page-info {\\n display: inline;\\n}\\n.vgt-table-styling .footer__row-count__label {\\n margin-right: 1em;\\n}\\n.vgt-table-styling .vgt-wrap__footer .footer__navigation {\\n font-size: 14px;\\n}\\n.vgt-table-styling .vgt-pull-right {\\n float: right !important;\\n}\\n.vgt-table-styling .footer__navigation__page-btn {\\n display: inline-block;\\n padding: 4px 10px;\\n margin-bottom: 0;\\n font-size: 12px;\\n line-height: 16px;\\n vertical-align: middle;\\n border-radius: 1px;\\n}\\n.vgt-table-styling .footer__navigation__page-btn:hover {\\n text-decoration: none;\\n background-position: 0 -150px;\\n transition: background-position 0s linear;\\n background-image: none;\\n}\\n.vgt-table-styling .footer__navigation__page-btn.disabled {\\n display: none;\\n}\\n.vgt-table-styling .vgt-wrap__footer .footer__navigation__page-btn .chevron {\\n width: 24px;\\n height: 24px;\\n border-radius: 15%;\\n position: relative;\\n margin: 0 8px;\\n}\\n.vgt-table-styling .vgt-wrap__footer .footer__navigation__info,\\n.vgt-table-styling .vgt-wrap__footer .footer__navigation__page-info {\\n display: inline-flex;\\n color: #909399;\\n margin: 0 16px;\\n margin-top: 0;\\n margin-right: 16px;\\n margin-bottom: 0;\\n margin-left: 16px;\\n}\\n.vgt-table-styling .vgt-input {\\n height: 23px;\\n line-height: 23px;\\n font-size: 0.9em;\\n width: 100%;\\n background-color: #fff;\\n background-image: none;\\n border: 1px solid #ccc;\\n border-radius: 3px;\\n padding: 0 10px;\\n margin: 0;\\n}\\n.vgt-table-styling .vgt-select {\\n height: 23px;\\n line-height: 23px;\\n font-size: 0.9em;\\n width: 100%;\\n background-color: #fff;\\n background-image: none;\\n border: 1px solid #ccc;\\n border-radius: 3px;\\n padding: 0 10px;\\n}\\n.vgt-table-styling .schedule tr.today {\\n background-color: #f5f1e4;\\n}\\n.vgt-table-styling .schedule tr.soon {\\n background-color: #ddffdd;\\n}\\n.vgt-table-styling .schedule tr.missed {\\n background-color: #ffdddd;\\n}\\n.vgt-table-styling .schedule tr.later {\\n background-color: #bedeed;\\n}\\n.vgt-table-styling .schedule tr,\\n.vgt-table-styling .schedule tr a {\\n color: black;\\n}\\n.tooltip-wrapper {\\n float: left;\\n min-width: 340px;\\n}\\n.invalid {\\n background-color: #ff5b5b;\\n}\\n.tooltip {\\n display: block !important;\\n z-index: 10000;\\n}\\n.tooltip .tooltip-inner {\\n background: #ffef93;\\n color: #555;\\n border-radius: 16px;\\n padding: 5px 10px 4px;\\n border: 1px solid #f1d031;\\n -webkit-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);\\n -moz-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);\\n box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);\\n}\\n.tooltip .tooltip-arrow {\\n width: 0;\\n height: 0;\\n position: absolute;\\n margin: 5px;\\n border: 1px solid #ffef93;\\n z-index: 1;\\n}\\n.tooltip[x-placement^=top] {\\n margin-bottom: 5px;\\n}\\n.tooltip[x-placement^=top] .tooltip-arrow {\\n border-width: 5px 5px 0 5px;\\n border-left-color: transparent !important;\\n border-right-color: transparent !important;\\n border-bottom-color: transparent !important;\\n bottom: -5px;\\n left: calc(50% - 4px);\\n margin-top: 0;\\n margin-bottom: 0;\\n}\\n.tooltip[x-placement^=bottom] {\\n margin-top: 5px;\\n}\\n.tooltip[x-placement^=bottom] .tooltip-arrow {\\n border-width: 0 5px 5px 5px;\\n border-left-color: transparent !important;\\n border-right-color: transparent !important;\\n border-top-color: transparent !important;\\n top: -5px;\\n left: calc(50% - 4px);\\n margin-top: 0;\\n margin-bottom: 0;\\n}\\n.tooltip[x-placement^=right] {\\n margin-left: 5px;\\n}\\n.tooltip[x-placement^=right] .tooltip-arrow {\\n border-width: 5px 5px 5px 0;\\n border-left-color: transparent !important;\\n border-top-color: transparent !important;\\n border-bottom-color: transparent !important;\\n left: -4px;\\n top: calc(50% - 5px);\\n margin-left: 0;\\n margin-right: 0;\\n}\\n.tooltip[x-placement^=left] {\\n margin-right: 5px;\\n}\\n.tooltip[x-placement^=left] .tooltip-arrow {\\n border-width: 5px 0 5px 5px;\\n border-top-color: transparent !important;\\n border-right-color: transparent !important;\\n border-bottom-color: transparent !important;\\n right: -4px;\\n top: calc(50% - 5px);\\n margin-left: 0;\\n margin-right: 0;\\n}\\n.tooltip.popover .popover-inner {\\n background: #ffef93;\\n color: #555;\\n padding: 24px;\\n border-radius: 5px;\\n box-shadow: 0 5px 30px rgba(0, 0, 0, 0.1);\\n}\\n.tooltip.popover .popover-arrow {\\n border-color: #ffef93;\\n}\\n.tooltip[aria-hidden=true] {\\n visibility: hidden;\\n opacity: 0;\\n transition: opacity 0.15s, visibility 0.15s;\\n}\\n.tooltip[aria-hidden=false] {\\n visibility: visible;\\n opacity: 1;\\n transition: opacity 0.15s;\\n}\\n\\n/** Style the modal. This should be saved somewhere, where we create one modal template with slots, and style that. */\\n.modal-container {\\n border: 1px solid #111111;\\n box-shadow: 0 0 12px 0 rgba(0, 0, 0, 0.175);\\n border-radius: 0;\\n}\\n.modal-header {\\n padding: 9px 15px;\\n border-bottom: none;\\n border-radius: 0;\\n background-color: #373737;\\n}\\n.modal-content {\\n background: #222222;\\n border-radius: 0;\\n border: 1px solid rgba(0, 0, 0, 0.2);\\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\\n color: white;\\n}\\n.modal-body {\\n background: #222222;\\n overflow-y: auto;\\n}\\n.modal-footer {\\n border-top: none;\\n text-align: center;\\n}\\n.vue-tags-input {\\n width: 273px;\\n border: 1px solid #cccccc;\\n border-radius: 3px;\\n}\\n.vue-tags-input .ti-tag {\\n display: inline-flex;\\n width: 100%;\\n}\\n.vue-tags-input .ti-input {\\n border: none;\\n}\\n.vue-tags-input .country-left {\\n margin-right: 5px;\\n}\\nsvg.back-arrow {\\n color: #337ab7;\\n width: 20px;\\n height: 20px;\\n float: left;\\n margin-right: 1em;\\n cursor: pointer;\\n}\\nsvg.back-arrow:hover,\\nsvg.back-arrow:focus {\\n color: #23527c;\\n transform: translateX(-2px);\\n transition: transform ease-in-out 0.2s;\\n}\\n.spin-hover-90:hover {\\n animation: spin-90 0.3s linear;\\n}\\n@keyframes spin-90 {\\nfrom {\\n transform: rotate(0deg);\\n}\\nto {\\n transform: rotate(90deg);\\n}\\n}\\n/* Global style definitions should go here. */\\n#app {\\n padding-top: 4rem;\\n}\\n@media (max-width: 768px) {\\n#app {\\n padding-top: 3.8rem;\\n}\\n}\", \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://slim/./src/components/app.vue?./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options"); /***/ }), @@ -1971,7 +1971,7 @@ eval("// Imports\nvar ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ = __webpack_requi \**********************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -eval("// Imports\nvar ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.floating-badge {\\n position: absolute;\\n top: -5px;\\n right: -8px;\\n padding: 0 4px;\\n background-color: #777;\\n border: 2px solid #959595;\\n border-radius: 100px;\\n font-size: 12px;\\n font-weight: bold;\\n text-decoration: none;\\n color: white;\\n}\\n.navbar {\\n margin-bottom: 0;\\n}\\n@media (max-width: 767px) {\\n.navbar-fixed-top .navbar-collapse {\\n max-height: 100%;\\n}\\n.navbar-mobile > li {\\n text-align: center;\\n}\\n.navbar-mobile::before {\\n position: absolute;\\n}\\n.navbar-mobile {\\n display: grid;\\n grid-template-columns: 1fr 1fr 1fr;\\n}\\n.navbar-mobile #NAVsystem > ul {\\n transform: translateX(-6rem);\\n}\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n\n\n//# sourceURL=webpack://slim/./src/components/app-header.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3%5B0%5D.rules%5B0%5D.use%5B1%5D!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options"); +eval("// Imports\nvar ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.floating-badge {\\n position: absolute;\\n top: -5px;\\n right: -8px;\\n padding: 0 4px;\\n background-color: #777;\\n border: 2px solid #959595;\\n border-radius: 100px;\\n font-size: 12px;\\n font-weight: bold;\\n text-decoration: none;\\n color: white;\\n}\\n.navbar {\\n margin-bottom: 0;\\n}\\n@media (max-width: 767px) {\\n.navbar-fixed-top .navbar-collapse {\\n max-height: 100%;\\n}\\n.navbar-mobile > li {\\n text-align: center;\\n}\\n.navbar-mobile::before {\\n position: absolute;\\n}\\n.navbar-mobile {\\n display: grid;\\n grid-template-columns: 1fr 1fr 1fr;\\n}\\n.navbar-mobile #NAVsystem > ul {\\n transform: translateX(-6rem);\\n}\\n}\\n.disconnected {\\n position: absolute;\\n right: 1rem;\\n bottom: 0.5rem;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n\n\n//# sourceURL=webpack://slim/./src/components/app-header.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3%5B0%5D.rules%5B0%5D.use%5B1%5D!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options"); /***/ }), @@ -7341,7 +7341,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": () => (/* binding */ render),\n/* harmony export */ \"staticRenderFns\": () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"nav\",\n {\n staticClass: \"navbar navbar-default navbar-fixed-top hidden-print\",\n attrs: { role: \"navigation\" }\n },\n [\n _c(\"div\", { staticClass: \"container-fluid\" }, [\n _c(\n \"div\",\n { staticClass: \"navbar-header\" },\n [\n _c(\n \"button\",\n {\n staticClass: \"navbar-toggle collapsed\",\n attrs: {\n type: \"button\",\n \"data-toggle\": \"collapse\",\n \"data-target\": \"#main_nav\"\n }\n },\n [\n _vm.toolsBadgeCount > 0\n ? _c(\n \"span\",\n { class: \"floating-badge\" + _vm.toolsBadgeClass },\n [_vm._v(_vm._s(_vm.toolsBadgeCount))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"sr-only\" }, [\n _vm._v(\"Toggle navigation\")\n ]),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"icon-bar\" }),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"icon-bar\" }),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"icon-bar\" })\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"app-link\",\n {\n staticClass: \"navbar-brand\",\n attrs: { href: \"home/\", title: \"Medusa\" }\n },\n [\n _c(\"img\", {\n staticClass: \"img-responsive pull-left\",\n staticStyle: { height: \"50px\" },\n attrs: { alt: \"Medusa\", src: \"images/medusa.png\" }\n })\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.isAuthenticated\n ? _c(\n \"div\",\n {\n staticClass: \"collapse navbar-collapse\",\n attrs: { id: \"main_nav\" }\n },\n [\n _c(\n \"ul\",\n { staticClass: \"nav navbar-nav navbar-right navbar-mobile\" },\n [\n _c(\n \"li\",\n {\n staticClass: \"navbar-split dropdown\",\n class: { active: _vm.topMenu === \"home\" },\n attrs: { id: \"NAVhome\" }\n },\n [\n _c(\n \"app-link\",\n {\n staticClass: \"dropdown-toggle\",\n attrs: {\n \"aria-haspopup\": \"true\",\n \"data-toggle\": \"dropdown\",\n \"data-hover\": \"dropdown\"\n }\n },\n [\n _c(\"span\", [_vm._v(\"Shows\")]),\n _vm._v(\" \"),\n _c(\"b\", { staticClass: \"caret\" })\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"ul\",\n { staticClass: \"dropdown-menu\" },\n [\n _c(\n \"li\",\n [\n _c(\"app-link\", { attrs: { href: \"home/\" } }, [\n _c(\"i\", { staticClass: \"menu-icon-home\" }),\n _vm._v(\" Show List\")\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"addShows/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-addshow\"\n }),\n _vm._v(\" Add Shows\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"addRecommended/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-addshow\"\n }),\n _vm._v(\" Add Recommended Shows\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"home/postprocess/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-postprocess\"\n }),\n _vm._v(\" Manual Post-Processing\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.recentShows.length > 0\n ? _c(\"li\", {\n staticClass: \"divider\",\n attrs: { role: \"separator\" }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm._l(_vm.recentShows, function(recentShow) {\n return _c(\n \"li\",\n { key: recentShow.link },\n [\n _c(\n \"app-link\",\n { attrs: { href: recentShow.link } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-addshow\"\n }),\n _vm._v(\n \" \" +\n _vm._s(recentShow.name) +\n \"\\n \"\n )\n ]\n )\n ],\n 1\n )\n })\n ],\n 2\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticStyle: { clear: \"both\" } })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n {\n staticClass: \"navbar-split\",\n class: { active: _vm.topMenu === \"schedule\" },\n attrs: { id: \"NAVschedule\" }\n },\n [\n _c(\"app-link\", { attrs: { href: \"schedule/\" } }, [\n _vm._v(\"Schedule\")\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n {\n staticClass: \"navbar-split\",\n class: { active: _vm.topMenu === \"history\" },\n attrs: { id: \"NAVhistory\" }\n },\n [\n _c(\"app-link\", { attrs: { href: \"history/\" } }, [\n _vm._v(\"History\")\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n {\n staticClass: \"navbar-split dropdown\",\n class: { active: _vm.topMenu === \"manage\" },\n attrs: { id: \"NAVmanage\" }\n },\n [\n _c(\n \"app-link\",\n {\n staticClass: \"dropdown-toggle\",\n attrs: {\n \"aria-haspopup\": \"true\",\n \"data-toggle\": \"dropdown\",\n \"data-hover\": \"dropdown\"\n }\n },\n [\n _c(\"span\", [_vm._v(\"Manage\")]),\n _vm._v(\" \"),\n _c(\"b\", { staticClass: \"caret\" })\n ]\n ),\n _vm._v(\" \"),\n _c(\"ul\", { staticClass: \"dropdown-menu\" }, [\n _c(\n \"li\",\n [\n _c(\"app-link\", { attrs: { href: \"manage/\" } }, [\n _c(\"i\", { staticClass: \"menu-icon-manage\" }),\n _vm._v(\" Mass Update\")\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"manage/changeIndexer/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-manage-change\"\n }),\n _vm._v(\" Change Indexer\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"manage/backlogOverview/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-backlog-view\"\n }),\n _vm._v(\" Backlog Overview\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"manage/manageSearches/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-manage-searches\"\n }),\n _vm._v(\" Manage Searches\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"manage/episodeStatuses/\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-manage2\" }),\n _vm._v(\" Episode Status Management\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.linkVisible.plex\n ? _c(\"li\", [\n _c(\n \"a\",\n {\n attrs: { href: \"home/updatePLEX/\" },\n on: {\n click: function($event) {\n $event.preventDefault()\n return _vm.updatePlex.apply(\n null,\n arguments\n )\n }\n }\n },\n [\n _c(\"i\", { staticClass: \"menu-icon-plex\" }),\n _vm._v(\" Update PLEX\")\n ]\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.linkVisible.kodi\n ? _c(\"li\", [\n _c(\n \"a\",\n {\n attrs: { href: \"home/updateKODI/\" },\n on: {\n click: function($event) {\n $event.preventDefault()\n return _vm.updateKodi.apply(\n null,\n arguments\n )\n }\n }\n },\n [\n _c(\"i\", { staticClass: \"menu-icon-kodi\" }),\n _vm._v(\" Update KODI\")\n ]\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.linkVisible.emby\n ? _c(\"li\", [\n _c(\n \"a\",\n {\n attrs: { href: \"home/updateEMBY/\" },\n on: {\n click: function($event) {\n $event.preventDefault()\n return _vm.updateEmby.apply(\n null,\n arguments\n )\n }\n }\n },\n [\n _c(\"i\", { staticClass: \"menu-icon-emby\" }),\n _vm._v(\" Update Emby\")\n ]\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.linkVisible.manageTorrents\n ? _c(\n \"li\",\n [\n _c(\n \"app-link\",\n {\n attrs: {\n href: \"manage/manageTorrents/\",\n target: \"_blank\"\n }\n },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-bittorrent\"\n }),\n _vm._v(\" Manage Torrents\")\n ]\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.linkVisible.failedDownloads\n ? _c(\n \"li\",\n [\n _c(\n \"app-link\",\n {\n attrs: { href: \"manage/failedDownloads/\" }\n },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-failed-download\"\n }),\n _vm._v(\" Failed Downloads\")\n ]\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.linkVisible.subtitleMissed\n ? _c(\n \"li\",\n [\n _c(\n \"app-link\",\n {\n attrs: { href: \"manage/subtitleMissed/\" }\n },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-backlog\"\n }),\n _vm._v(\" Missed Subtitle Management\")\n ]\n )\n ],\n 1\n )\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticStyle: { clear: \"both\" } })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n {\n staticClass: \"navbar-split dropdown\",\n class: { active: _vm.topMenu === \"config\" },\n attrs: { id: \"NAVconfig\" }\n },\n [\n _c(\n \"app-link\",\n {\n staticClass: \"dropdown-toggle\",\n attrs: {\n \"aria-haspopup\": \"true\",\n \"data-toggle\": \"dropdown\",\n \"data-hover\": \"dropdown\"\n }\n },\n [\n _c(\"span\", { staticClass: \"visible-xs-inline\" }, [\n _vm._v(\"Config\")\n ]),\n _c(\"img\", {\n staticClass: \"navbaricon hidden-xs\",\n attrs: { src: \"images/menu/system18.png\" }\n }),\n _vm._v(\" \"),\n _c(\"b\", { staticClass: \"caret\" })\n ]\n ),\n _vm._v(\" \"),\n _c(\"ul\", { staticClass: \"dropdown-menu\" }, [\n _c(\n \"li\",\n [\n _c(\"app-link\", { attrs: { href: \"config/\" } }, [\n _c(\"i\", { staticClass: \"menu-icon-help\" }),\n _vm._v(\" Help & Info\")\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/general/\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-config\" }),\n _vm._v(\" General\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/backuprestore/\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-backup\" }),\n _vm._v(\" Backup & Restore\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/search/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-manage-searches\"\n }),\n _vm._v(\" Search Settings\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/providers/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-provider\"\n }),\n _vm._v(\" Search Providers\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/subtitles/\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-backlog\" }),\n _vm._v(\" Subtitles Settings\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/postProcessing/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-postprocess\"\n }),\n _vm._v(\" Post-Processing\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/notifications/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-notification\"\n }),\n _vm._v(\" Notifications\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/anime/\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-anime\" }),\n _vm._v(\" Anime\")\n ]\n )\n ],\n 1\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticStyle: { clear: \"both\" } })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n {\n staticClass: \"navbar-split dropdown\",\n class: { active: _vm.topMenu === \"system\" },\n attrs: { id: \"NAVsystem\" }\n },\n [\n _c(\n \"app-link\",\n {\n staticClass: \"padding-right-15 dropdown-toggle\",\n attrs: {\n \"aria-haspopup\": \"true\",\n \"data-toggle\": \"dropdown\",\n \"data-hover\": \"dropdown\"\n }\n },\n [\n _c(\"span\", { staticClass: \"visible-xs-inline\" }, [\n _vm._v(\"Tools\")\n ]),\n _c(\"img\", {\n staticClass: \"navbaricon hidden-xs\",\n attrs: { src: \"images/menu/system18-2.png\" }\n }),\n _vm._v(\" \"),\n _vm.toolsBadgeCount > 0\n ? _c(\n \"span\",\n { class: \"badge\" + _vm.toolsBadgeClass },\n [_vm._v(_vm._s(_vm.toolsBadgeCount))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"b\", { staticClass: \"caret\" })\n ]\n ),\n _vm._v(\" \"),\n _c(\"ul\", { staticClass: \"dropdown-menu\" }, [\n _c(\n \"li\",\n [\n _c(\"app-link\", { attrs: { href: \"news/\" } }, [\n _c(\"i\", { staticClass: \"menu-icon-news\" }),\n _vm._v(\" News \"),\n _vm.system.news.unread > 0\n ? _c(\"span\", { staticClass: \"badge\" }, [\n _vm._v(_vm._s(_vm.system.news.unread))\n ])\n : _vm._e()\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\"app-link\", { attrs: { href: \"IRC/\" } }, [\n _c(\"i\", { staticClass: \"menu-icon-irc\" }),\n _vm._v(\" IRC\")\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\"app-link\", { attrs: { href: \"changes/\" } }, [\n _c(\"i\", { staticClass: \"menu-icon-changelog\" }),\n _vm._v(\" Changelog\")\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"li\", {\n staticClass: \"divider\",\n attrs: { role: \"separator\" }\n }),\n _vm._v(\" \"),\n _vm.config.logs.numErrors > 0\n ? _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"errorlogs/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-error\"\n }),\n _vm._v(\" View Errors \"),\n _c(\n \"span\",\n { staticClass: \"badge btn-danger\" },\n [\n _vm._v(\n _vm._s(_vm.config.logs.numErrors)\n )\n ]\n )\n ]\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.config.logs.numWarnings > 0\n ? _c(\n \"li\",\n [\n _c(\n \"app-link\",\n {\n attrs: {\n href:\n \"errorlogs/?level=\" + _vm.warningLevel\n }\n },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-viewlog-errors\"\n }),\n _vm._v(\" View Warnings \"),\n _c(\n \"span\",\n { staticClass: \"badge btn-warning\" },\n [\n _vm._v(\n _vm._s(_vm.config.logs.numWarnings)\n )\n ]\n )\n ]\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"errorlogs/viewlog/\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-viewlog\" }),\n _vm._v(\" View Log\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"li\", {\n staticClass: \"divider\",\n attrs: { role: \"separator\" }\n }),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n {\n attrs: { href: \"home/update\" },\n nativeOn: {\n click: function($event) {\n $event.preventDefault()\n return _vm.checkForupdates($event)\n }\n }\n },\n [\n _c(\"i\", { staticClass: \"menu-icon-update\" }),\n _vm._v(\" Check For Updates\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"home/restart\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-restart\" }),\n _vm._v(\" Restart\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n {\n attrs: { href: \"home/shutdown\" },\n on: {\n click: function($event) {\n $event.preventDefault()\n return _vm.$router.push({\n name: \"shutdown\"\n })\n }\n }\n },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-shutdown\"\n }),\n _vm._v(\" Shutdown\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.username\n ? _c(\n \"li\",\n [\n _c(\n \"app-link\",\n {\n attrs: { href: \"logout\" },\n nativeOn: {\n click: function($event) {\n $event.preventDefault()\n return _vm.confirmDialog(\n $event,\n \"logout\"\n )\n }\n }\n },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-shutdown\"\n }),\n _vm._v(\" Logout\")\n ]\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"li\", {\n staticClass: \"divider\",\n attrs: { role: \"separator\" }\n }),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"home/status/\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-info\" }),\n _vm._v(\" Server Status\")\n ]\n )\n ],\n 1\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticStyle: { clear: \"both\" } })\n ],\n 1\n )\n ]\n )\n ]\n )\n : _vm._e()\n ])\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack://slim/./src/components/app-header.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": () => (/* binding */ render),\n/* harmony export */ \"staticRenderFns\": () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"nav\",\n {\n staticClass: \"navbar navbar-default navbar-fixed-top hidden-print\",\n attrs: { role: \"navigation\" }\n },\n [\n _c(\"div\", { staticClass: \"container-fluid\" }, [\n _c(\n \"div\",\n { staticClass: \"navbar-header\" },\n [\n _c(\n \"button\",\n {\n staticClass: \"navbar-toggle collapsed\",\n attrs: {\n type: \"button\",\n \"data-toggle\": \"collapse\",\n \"data-target\": \"#main_nav\"\n }\n },\n [\n _vm.toolsBadgeCount > 0\n ? _c(\n \"span\",\n { class: \"floating-badge\" + _vm.toolsBadgeClass },\n [_vm._v(_vm._s(_vm.toolsBadgeCount))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"sr-only\" }, [\n _vm._v(\"Toggle navigation\")\n ]),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"icon-bar\" }),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"icon-bar\" }),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"icon-bar\" })\n ]\n ),\n _vm._v(\" \"),\n _vm.isConnected || !_vm.socketIsConnected\n ? _c(\n \"app-link\",\n {\n staticClass: \"navbar-brand\",\n staticStyle: { position: \"relative\" },\n attrs: { title: \"Medusa\" }\n },\n [\n _c(\"img\", {\n staticClass: \"img-responsive pull-left\",\n staticStyle: { height: \"50px\" },\n attrs: { alt: \"Medusa\", src: \"images/medusa.png\" },\n on: { click: _vm.reloadPage }\n }),\n _vm._v(\" \"),\n _c(\"img\", {\n staticClass: \"disconnected spin-hover-90\",\n attrs: { alt: \"disconnected\", src: \"images/no16.png\" }\n })\n ]\n )\n : _c(\n \"app-link\",\n {\n staticClass: \"navbar-brand\",\n attrs: { href: \"home/\", title: \"Medusa\" }\n },\n [\n _c(\"img\", {\n staticClass: \"img-responsive pull-left\",\n staticStyle: { height: \"50px\" },\n attrs: { alt: \"Medusa\", src: \"images/medusa.png\" }\n })\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.isAuthenticated\n ? _c(\n \"div\",\n {\n staticClass: \"collapse navbar-collapse\",\n attrs: { id: \"main_nav\" }\n },\n [\n _c(\n \"ul\",\n { staticClass: \"nav navbar-nav navbar-right navbar-mobile\" },\n [\n _c(\n \"li\",\n {\n staticClass: \"navbar-split dropdown\",\n class: { active: _vm.topMenu === \"home\" },\n attrs: { id: \"NAVhome\" }\n },\n [\n _c(\n \"app-link\",\n {\n staticClass: \"dropdown-toggle\",\n attrs: {\n \"aria-haspopup\": \"true\",\n \"data-toggle\": \"dropdown\",\n \"data-hover\": \"dropdown\"\n }\n },\n [\n _c(\"span\", [_vm._v(\"Shows\")]),\n _vm._v(\" \"),\n _c(\"b\", { staticClass: \"caret\" })\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"ul\",\n { staticClass: \"dropdown-menu\" },\n [\n _c(\n \"li\",\n [\n _c(\"app-link\", { attrs: { href: \"home/\" } }, [\n _c(\"i\", { staticClass: \"menu-icon-home\" }),\n _vm._v(\" Show List\")\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"addShows/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-addshow\"\n }),\n _vm._v(\" Add Shows\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"addRecommended/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-addshow\"\n }),\n _vm._v(\" Add Recommended Shows\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"home/postprocess/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-postprocess\"\n }),\n _vm._v(\" Manual Post-Processing\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.recentShows.length > 0\n ? _c(\"li\", {\n staticClass: \"divider\",\n attrs: { role: \"separator\" }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm._l(_vm.recentShows, function(recentShow) {\n return _c(\n \"li\",\n { key: recentShow.link },\n [\n _c(\n \"app-link\",\n { attrs: { href: recentShow.link } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-addshow\"\n }),\n _vm._v(\n \" \" +\n _vm._s(recentShow.name) +\n \"\\n \"\n )\n ]\n )\n ],\n 1\n )\n })\n ],\n 2\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticStyle: { clear: \"both\" } })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n {\n staticClass: \"navbar-split\",\n class: { active: _vm.topMenu === \"schedule\" },\n attrs: { id: \"NAVschedule\" }\n },\n [\n _c(\"app-link\", { attrs: { href: \"schedule/\" } }, [\n _vm._v(\"Schedule\")\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n {\n staticClass: \"navbar-split\",\n class: { active: _vm.topMenu === \"history\" },\n attrs: { id: \"NAVhistory\" }\n },\n [\n _c(\"app-link\", { attrs: { href: \"history/\" } }, [\n _vm._v(\"History\")\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n {\n staticClass: \"navbar-split dropdown\",\n class: { active: _vm.topMenu === \"manage\" },\n attrs: { id: \"NAVmanage\" }\n },\n [\n _c(\n \"app-link\",\n {\n staticClass: \"dropdown-toggle\",\n attrs: {\n \"aria-haspopup\": \"true\",\n \"data-toggle\": \"dropdown\",\n \"data-hover\": \"dropdown\"\n }\n },\n [\n _c(\"span\", [_vm._v(\"Manage\")]),\n _vm._v(\" \"),\n _c(\"b\", { staticClass: \"caret\" })\n ]\n ),\n _vm._v(\" \"),\n _c(\"ul\", { staticClass: \"dropdown-menu\" }, [\n _c(\n \"li\",\n [\n _c(\"app-link\", { attrs: { href: \"manage/\" } }, [\n _c(\"i\", { staticClass: \"menu-icon-manage\" }),\n _vm._v(\" Mass Update\")\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"manage/changeIndexer/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-manage-change\"\n }),\n _vm._v(\" Change Indexer\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"manage/backlogOverview/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-backlog-view\"\n }),\n _vm._v(\" Backlog Overview\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"manage/manageSearches/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-manage-searches\"\n }),\n _vm._v(\" Manage Searches\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"manage/episodeStatuses/\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-manage2\" }),\n _vm._v(\" Episode Status Management\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.linkVisible.plex\n ? _c(\"li\", [\n _c(\n \"a\",\n {\n attrs: { href: \"home/updatePLEX/\" },\n on: {\n click: function($event) {\n $event.preventDefault()\n return _vm.updatePlex.apply(\n null,\n arguments\n )\n }\n }\n },\n [\n _c(\"i\", { staticClass: \"menu-icon-plex\" }),\n _vm._v(\" Update PLEX\")\n ]\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.linkVisible.kodi\n ? _c(\"li\", [\n _c(\n \"a\",\n {\n attrs: { href: \"home/updateKODI/\" },\n on: {\n click: function($event) {\n $event.preventDefault()\n return _vm.updateKodi.apply(\n null,\n arguments\n )\n }\n }\n },\n [\n _c(\"i\", { staticClass: \"menu-icon-kodi\" }),\n _vm._v(\" Update KODI\")\n ]\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.linkVisible.emby\n ? _c(\"li\", [\n _c(\n \"a\",\n {\n attrs: { href: \"home/updateEMBY/\" },\n on: {\n click: function($event) {\n $event.preventDefault()\n return _vm.updateEmby.apply(\n null,\n arguments\n )\n }\n }\n },\n [\n _c(\"i\", { staticClass: \"menu-icon-emby\" }),\n _vm._v(\" Update Emby\")\n ]\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.linkVisible.manageTorrents\n ? _c(\n \"li\",\n [\n _c(\n \"app-link\",\n {\n attrs: {\n href: \"manage/manageTorrents/\",\n target: \"_blank\"\n }\n },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-bittorrent\"\n }),\n _vm._v(\" Manage Torrents\")\n ]\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.linkVisible.failedDownloads\n ? _c(\n \"li\",\n [\n _c(\n \"app-link\",\n {\n attrs: { href: \"manage/failedDownloads/\" }\n },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-failed-download\"\n }),\n _vm._v(\" Failed Downloads\")\n ]\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.linkVisible.subtitleMissed\n ? _c(\n \"li\",\n [\n _c(\n \"app-link\",\n {\n attrs: { href: \"manage/subtitleMissed/\" }\n },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-backlog\"\n }),\n _vm._v(\" Missed Subtitle Management\")\n ]\n )\n ],\n 1\n )\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticStyle: { clear: \"both\" } })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n {\n staticClass: \"navbar-split dropdown\",\n class: { active: _vm.topMenu === \"config\" },\n attrs: { id: \"NAVconfig\" }\n },\n [\n _c(\n \"app-link\",\n {\n staticClass: \"dropdown-toggle\",\n attrs: {\n \"aria-haspopup\": \"true\",\n \"data-toggle\": \"dropdown\",\n \"data-hover\": \"dropdown\"\n }\n },\n [\n _c(\"span\", { staticClass: \"visible-xs-inline\" }, [\n _vm._v(\"Config\")\n ]),\n _c(\"img\", {\n staticClass: \"navbaricon hidden-xs\",\n attrs: { src: \"images/menu/system18.png\" }\n }),\n _vm._v(\" \"),\n _c(\"b\", { staticClass: \"caret\" })\n ]\n ),\n _vm._v(\" \"),\n _c(\"ul\", { staticClass: \"dropdown-menu\" }, [\n _c(\n \"li\",\n [\n _c(\"app-link\", { attrs: { href: \"config/\" } }, [\n _c(\"i\", { staticClass: \"menu-icon-help\" }),\n _vm._v(\" Help & Info\")\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/general/\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-config\" }),\n _vm._v(\" General\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/backuprestore/\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-backup\" }),\n _vm._v(\" Backup & Restore\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/search/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-manage-searches\"\n }),\n _vm._v(\" Search Settings\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/providers/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-provider\"\n }),\n _vm._v(\" Search Providers\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/subtitles/\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-backlog\" }),\n _vm._v(\" Subtitles Settings\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/postProcessing/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-postprocess\"\n }),\n _vm._v(\" Post-Processing\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/notifications/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-notification\"\n }),\n _vm._v(\" Notifications\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/anime/\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-anime\" }),\n _vm._v(\" Anime\")\n ]\n )\n ],\n 1\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticStyle: { clear: \"both\" } })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n {\n staticClass: \"navbar-split dropdown\",\n class: { active: _vm.topMenu === \"system\" },\n attrs: { id: \"NAVsystem\" }\n },\n [\n _c(\n \"app-link\",\n {\n staticClass: \"padding-right-15 dropdown-toggle\",\n attrs: {\n \"aria-haspopup\": \"true\",\n \"data-toggle\": \"dropdown\",\n \"data-hover\": \"dropdown\"\n }\n },\n [\n _c(\"span\", { staticClass: \"visible-xs-inline\" }, [\n _vm._v(\"Tools\")\n ]),\n _c(\"img\", {\n staticClass: \"navbaricon hidden-xs\",\n attrs: { src: \"images/menu/system18-2.png\" }\n }),\n _vm._v(\" \"),\n _vm.toolsBadgeCount > 0\n ? _c(\n \"span\",\n { class: \"badge\" + _vm.toolsBadgeClass },\n [_vm._v(_vm._s(_vm.toolsBadgeCount))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"b\", { staticClass: \"caret\" })\n ]\n ),\n _vm._v(\" \"),\n _c(\"ul\", { staticClass: \"dropdown-menu\" }, [\n _c(\n \"li\",\n [\n _c(\"app-link\", { attrs: { href: \"news/\" } }, [\n _c(\"i\", { staticClass: \"menu-icon-news\" }),\n _vm._v(\" News \"),\n _vm.system.news.unread > 0\n ? _c(\"span\", { staticClass: \"badge\" }, [\n _vm._v(_vm._s(_vm.system.news.unread))\n ])\n : _vm._e()\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\"app-link\", { attrs: { href: \"IRC/\" } }, [\n _c(\"i\", { staticClass: \"menu-icon-irc\" }),\n _vm._v(\" IRC\")\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\"app-link\", { attrs: { href: \"changes/\" } }, [\n _c(\"i\", { staticClass: \"menu-icon-changelog\" }),\n _vm._v(\" Changelog\")\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"li\", {\n staticClass: \"divider\",\n attrs: { role: \"separator\" }\n }),\n _vm._v(\" \"),\n _vm.config.logs.numErrors > 0\n ? _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"errorlogs/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-error\"\n }),\n _vm._v(\" View Errors \"),\n _c(\n \"span\",\n { staticClass: \"badge btn-danger\" },\n [\n _vm._v(\n _vm._s(_vm.config.logs.numErrors)\n )\n ]\n )\n ]\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.config.logs.numWarnings > 0\n ? _c(\n \"li\",\n [\n _c(\n \"app-link\",\n {\n attrs: {\n href:\n \"errorlogs/?level=\" + _vm.warningLevel\n }\n },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-viewlog-errors\"\n }),\n _vm._v(\" View Warnings \"),\n _c(\n \"span\",\n { staticClass: \"badge btn-warning\" },\n [\n _vm._v(\n _vm._s(_vm.config.logs.numWarnings)\n )\n ]\n )\n ]\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"errorlogs/viewlog/\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-viewlog\" }),\n _vm._v(\" View Log\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"li\", {\n staticClass: \"divider\",\n attrs: { role: \"separator\" }\n }),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n {\n attrs: { href: \"home/update\" },\n nativeOn: {\n click: function($event) {\n $event.preventDefault()\n return _vm.checkForupdates($event)\n }\n }\n },\n [\n _c(\"i\", { staticClass: \"menu-icon-update\" }),\n _vm._v(\" Check For Updates\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"home/restart\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-restart\" }),\n _vm._v(\" Restart\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n {\n attrs: { href: \"home/shutdown\" },\n on: {\n click: function($event) {\n $event.preventDefault()\n return _vm.$router.push({\n name: \"shutdown\"\n })\n }\n }\n },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-shutdown\"\n }),\n _vm._v(\" Shutdown\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.username\n ? _c(\n \"li\",\n [\n _c(\n \"app-link\",\n {\n attrs: { href: \"logout\" },\n nativeOn: {\n click: function($event) {\n $event.preventDefault()\n return _vm.confirmDialog(\n $event,\n \"logout\"\n )\n }\n }\n },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-shutdown\"\n }),\n _vm._v(\" Logout\")\n ]\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"li\", {\n staticClass: \"divider\",\n attrs: { role: \"separator\" }\n }),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"home/status/\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-info\" }),\n _vm._v(\" Server Status\")\n ]\n )\n ],\n 1\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticStyle: { clear: \"both\" } })\n ],\n 1\n )\n ]\n )\n ]\n )\n : _vm._e()\n ])\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack://slim/./src/components/app-header.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options"); /***/ }), diff --git a/themes/light/assets/js/app.js b/themes/light/assets/js/app.js index 3cb4e6100f..9a1132b624 100644 --- a/themes/light/assets/js/app.js +++ b/themes/light/assets/js/app.js @@ -15,7 +15,7 @@ \********************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n/* harmony import */ var _global_vue_shim__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./global-vue-shim */ \"./src/global-vue-shim.js\");\n/* harmony import */ var _router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./router */ \"./src/router/index.js\");\n/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./store */ \"./src/store/index.js\");\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n/* harmony import */ var _utils_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/core */ \"./src/utils/core.js\");\n/* harmony import */ var _components__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components */ \"./src/components/index.js\");\n\n\n\n\n\n\n\nvue__WEBPACK_IMPORTED_MODULE_5__[\"default\"].config.devtools = true;\nvue__WEBPACK_IMPORTED_MODULE_5__[\"default\"].config.performance = true;\n\nif (document.body.getAttribute('developer') === 'True') {\n vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"].config.devtools = true;\n vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"].config.performance = true;\n}\n\n(0,_global_vue_shim__WEBPACK_IMPORTED_MODULE_0__.registerPlugins)(); // @TODO: Remove this before v1.0.0\n\n(0,_global_vue_shim__WEBPACK_IMPORTED_MODULE_0__.registerGlobalComponents)();\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"]({\n name: 'index',\n router: _router__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n store: _store__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n\n data() {\n return {\n isAuthenticated: false\n };\n },\n\n async mounted() {\n const {\n getShows,\n setLoadingDisplay,\n setLoadingFinished\n } = this;\n\n if (_utils_core__WEBPACK_IMPORTED_MODULE_3__.isDevelopment) {\n console.log('App Mounted!');\n }\n\n await this.$store.dispatch('auth');\n\n if (!window.location.pathname.includes('/login')) {\n const {\n $store\n } = this;\n await $store.dispatch('login');\n this.isAuthenticated = true;\n Promise.all([$store.dispatch('getConfig'), $store.dispatch('getStats')]).then(_ref => {\n let [config] = _ref;\n\n if (_utils_core__WEBPACK_IMPORTED_MODULE_3__.isDevelopment) {\n console.log('App Loaded!');\n } // Legacy - send config.general to jQuery (received by index.js)\n\n\n const event = new CustomEvent('medusa-config-loaded', {\n detail: {\n general: config.general,\n layout: config.layout\n }\n });\n window.dispatchEvent(event); // Let's bootstrap the app with essential data like the shows.\n // For the storing of the shows in the browsers cache, we depend on config/general.\n\n getShows().then(() => {\n console.log('Finished loading all shows.');\n setTimeout(() => {\n setLoadingFinished(true);\n setLoadingDisplay(false);\n }, 2000);\n });\n }).catch(error => {\n console.debug(error);\n alert('Unable to connect to Medusa!'); // eslint-disable-line no-alert\n });\n }\n },\n\n methods: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_6__.mapActions)({\n getShows: 'getShows'\n }),\n ...(0,vuex__WEBPACK_IMPORTED_MODULE_6__.mapMutations)(['setLoadingDisplay', 'setLoadingFinished'])\n },\n\n render(h) {\n // eslint-disable-line vue/require-render-return\n // Do not start with rendering the app, before we're sure we authenticated.\n if (this.isAuthenticated || window.location.pathname.includes('/login')) {\n return h(_components__WEBPACK_IMPORTED_MODULE_4__.App);\n }\n }\n\n}).$mount('#app-wrapper'));\n\n//# sourceURL=webpack://slim/./src/app.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n/* harmony import */ var _global_vue_shim__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./global-vue-shim */ \"./src/global-vue-shim.js\");\n/* harmony import */ var _router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./router */ \"./src/router/index.js\");\n/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./store */ \"./src/store/index.js\");\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n/* harmony import */ var _utils_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/core */ \"./src/utils/core.js\");\n/* harmony import */ var _components__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components */ \"./src/components/index.js\");\n\n\n\n\n\n\n\nvue__WEBPACK_IMPORTED_MODULE_5__[\"default\"].config.devtools = true;\nvue__WEBPACK_IMPORTED_MODULE_5__[\"default\"].config.performance = true;\n\nif (document.body.getAttribute('developer') === 'True') {\n vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"].config.devtools = true;\n vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"].config.performance = true;\n}\n\n(0,_global_vue_shim__WEBPACK_IMPORTED_MODULE_0__.registerPlugins)(); // @TODO: Remove this before v1.0.0\n\n(0,_global_vue_shim__WEBPACK_IMPORTED_MODULE_0__.registerGlobalComponents)();\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"]({\n name: 'index',\n router: _router__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n store: _store__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n\n data() {\n return {\n isAuthenticated: false\n };\n },\n\n async mounted() {\n const {\n getShows,\n setLoadingDisplay,\n setLoadingFinished\n } = this;\n\n if (_utils_core__WEBPACK_IMPORTED_MODULE_3__.isDevelopment) {\n console.log('App Mounted!');\n }\n\n await this.$store.dispatch('auth');\n\n if (!window.location.pathname.includes('/login')) {\n const {\n $store\n } = this;\n await $store.dispatch('login');\n this.isAuthenticated = true;\n Promise.all([$store.dispatch('getConfig'), $store.dispatch('getStats')]).then(_ref => {\n let [config] = _ref;\n\n if (_utils_core__WEBPACK_IMPORTED_MODULE_3__.isDevelopment) {\n console.log('App Loaded!');\n } // Legacy - send config.general to jQuery (received by index.js)\n\n\n const event = new CustomEvent('medusa-config-loaded', {\n detail: {\n general: config.general,\n layout: config.layout\n }\n });\n window.dispatchEvent(event); // Let's bootstrap the app with essential data like the shows.\n // For the storing of the shows in the browsers cache, we depend on config/general.\n\n getShows().then(() => {\n console.log('Finished loading all shows.');\n setTimeout(() => {\n setLoadingFinished(true);\n setLoadingDisplay(false);\n }, 2000);\n this.connect(true);\n });\n }).catch(error => {\n console.debug(error);\n alert('Unable to connect to Medusa!'); // eslint-disable-line no-alert\n\n this.connect(false);\n });\n }\n },\n\n methods: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_6__.mapActions)({\n getShows: 'getShows',\n connect: 'connect'\n }),\n ...(0,vuex__WEBPACK_IMPORTED_MODULE_6__.mapMutations)(['setLoadingDisplay', 'setLoadingFinished'])\n },\n\n render(h) {\n // eslint-disable-line vue/require-render-return\n // Do not start with rendering the app, before we're sure we authenticated.\n if (this.isAuthenticated || window.location.pathname.includes('/login')) {\n return h(_components__WEBPACK_IMPORTED_MODULE_4__.App);\n }\n }\n\n}).$mount('#app-wrapper'));\n\n//# sourceURL=webpack://slim/./src/app.js?"); /***/ }) diff --git a/themes/light/assets/js/medusa-runtime.js b/themes/light/assets/js/medusa-runtime.js index 76c5b12123..5464ed9ac2 100644 --- a/themes/light/assets/js/medusa-runtime.js +++ b/themes/light/assets/js/medusa-runtime.js @@ -70,7 +70,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/components/helpers/index.js\");\n/* provided dependency */ var $ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\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//\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//\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//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'app-header',\n components: {\n AppLink: _helpers__WEBPACK_IMPORTED_MODULE_0__.AppLink\n },\n computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_1__.mapState)({\n config: state => state.config.general,\n subtitles: state => state.config.subtitles,\n clients: state => state.config.clients,\n notifiers: state => state.config.notifiers,\n postprocessing: state => state.config.postprocessing,\n search: state => state.config.search,\n system: state => state.config.system,\n isAuthenticated: state => state.auth.isAuthenticated,\n username: state => state.auth.user.username,\n warningLevel: state => state.config.general.logs.loggingLevels.warning,\n client: state => state.auth.client\n }),\n\n /**\n * Moved into a computed, so it's easier to mock in Jest.\n * @returns {Object} - Route name and query.\n */\n currentShowRoute() {\n const {\n $route\n } = this;\n return {\n name: $route.name,\n query: $route.query\n };\n },\n\n recentShows() {\n const {\n config,\n currentShowRoute\n } = this;\n const {\n recentShows\n } = config;\n\n const hideActiveShow = show => !(currentShowRoute.name === 'show' && show.showSlug === currentShowRoute.query.showslug);\n\n return recentShows.filter(hideActiveShow).map(show => {\n const link = `home/displayShow?showslug=${show.showSlug}`;\n return {\n name: show.name,\n link\n };\n });\n },\n\n topMenu() {\n return this.$route.meta.topMenu;\n },\n\n toolsBadgeCount() {\n const {\n config\n } = this;\n const {\n system\n } = this;\n const {\n logs\n } = config;\n const {\n news\n } = system;\n return logs.numErrors + logs.numWarnings + news.unread;\n },\n\n toolsBadgeClass() {\n const {\n config\n } = this;\n const {\n logs\n } = config;\n\n if (logs.numErrors > 0) {\n return ' btn-danger';\n }\n\n if (logs.numWarnings > 0) {\n return ' btn-warning';\n }\n\n return '';\n },\n\n linkVisible() {\n const {\n clients,\n notifiers,\n search,\n subtitles\n } = this;\n const {\n general\n } = search;\n const {\n kodi,\n plex,\n emby\n } = notifiers;\n return {\n plex: plex.server.enabled && plex.server.host.length !== 0,\n kodi: kodi.enabled && kodi.host.length !== 0,\n\n /* @TODO: Originally there was a check to make sure the API key\n was configured for Emby: ` app.EMBY_APIKEY != '' ` */\n emby: emby.enabled && emby.host,\n manageTorrents: clients.torrents.enabled && clients.torrents.method !== 'blackhole',\n failedDownloads: general.failedDownloads.enabled,\n subtitleMissed: subtitles.enabled\n };\n }\n\n },\n\n mounted() {\n const {\n $el\n } = this; // Auto close menus when clicking a RouterLink\n\n $el.clickCloseMenus = event => {\n const {\n target\n } = event;\n\n if (target.matches('#main_nav a.router-link, #main_nav a.router-link *') && (target.ariaExpanded === 'true' || target.ariaExpanded === null)) {\n const dropdown = target.closest('.dropdown');\n\n if (dropdown) {\n dropdown.querySelector('.dropdown-toggle').setAttribute('aria-expanded', false);\n dropdown.querySelector('.dropdown-menu').style.display = 'none';\n } // Also collapse the main nav if it's open\n\n\n $('#main_nav').collapse('hide');\n }\n };\n\n $el.addEventListener('click', $el.clickCloseMenus, {\n passive: true\n }); // Hover Dropdown for Nav\n\n $($el).on({\n mouseenter(event) {\n const $target = $(event.currentTarget);\n $target.find('.dropdown-menu').stop(true, true).delay(200).fadeIn(500, () => {\n $target.find('.dropdown-toggle').attr('aria-expanded', 'true');\n });\n },\n\n mouseleave(event) {\n const $target = $(event.currentTarget);\n $target.find('.dropdown-toggle').attr('aria-expanded', 'false');\n $target.find('.dropdown-menu').stop(true, true).delay(200).fadeOut(500);\n }\n\n }, 'ul.nav li.dropdown');\n },\n\n destroyed() {\n // Revert `mounted()`\n const {\n $el\n } = this; // Auto close menus when clicking a RouterLink\n\n $el.removeEventListener('click', $el.clickCloseMenus); // Hover Dropdown for Nav\n\n $($el).off('mouseenter mouseleave', 'ul.nav li.dropdown'); // @TODO Replace this with a real touchscreen check\n // hack alert: if we don't have a touchscreen, and we are already hovering the mouse, then click should link instead of toggle\n\n if ((navigator.maxTouchPoints || 0) < 2) {\n $($el).off('click', '.dropdown-toggle');\n }\n },\n\n methods: {\n confirmDialog(event, action) {\n const options = {\n confirmButton: 'Yes',\n cancelButton: 'Cancel',\n dialogClass: 'modal-dialog',\n post: false,\n button: $(event.currentTarget || event.target),\n\n confirm($element) {\n window.location.href = $element[0].href;\n }\n\n };\n\n if (action === 'newversion') {\n options.title = 'New version';\n options.text = 'New version available, update now?';\n } else if (action === 'logout') {\n options.title = 'Logout';\n options.text = 'Are you sure you want to logout from Medusa?';\n } else {\n return;\n }\n\n $.confirm(options, event);\n },\n\n async checkForupdates(event) {\n const {\n client,\n confirmDialog\n } = this;\n\n try {\n this.$snotify.info('Checking for a new version...');\n await client.api.post('system/operation', {\n type: 'CHECKFORUPDATE'\n });\n confirmDialog(event, 'newversion');\n } catch (error) {\n this.$snotify.info('You are already on the latest version');\n }\n },\n\n async updateKodi() {\n const {\n client\n } = this;\n\n try {\n await client.api.post('notifications/kodi/update');\n } catch (error) {\n this.$snotify.info('Error trying to update kodi');\n }\n },\n\n async updateEmby() {\n const {\n client\n } = this;\n\n try {\n await client.api.post('notifications/emby/update');\n } catch (error) {\n this.$snotify.info('Error trying to update emby');\n }\n },\n\n async updatePlex() {\n const {\n client\n } = this;\n\n try {\n await client.api.post('notifications/plex/update');\n } catch (error) {\n this.$snotify.info('Error trying to update plex');\n }\n }\n\n }\n});\n\n//# sourceURL=webpack://slim/./src/components/app-header.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-1%5B0%5D.rules%5B0%5D!./node_modules/vue-loader/lib/index.js??vue-loader-options"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./src/components/helpers/index.js\");\n/* provided dependency */ var $ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\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//\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//\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//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'app-header',\n components: {\n AppLink: _helpers__WEBPACK_IMPORTED_MODULE_0__.AppLink\n },\n computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_1__.mapState)({\n config: state => state.config.general,\n subtitles: state => state.config.subtitles,\n clients: state => state.config.clients,\n notifiers: state => state.config.notifiers,\n postprocessing: state => state.config.postprocessing,\n search: state => state.config.search,\n system: state => state.config.system,\n isAuthenticated: state => state.auth.isAuthenticated,\n username: state => state.auth.user.username,\n warningLevel: state => state.config.general.logs.loggingLevels.warning,\n client: state => state.auth.client,\n isConnected: state => state.auth.isConnected,\n socketIsConnected: state => state.socket.isConnected\n }),\n\n /**\n * Moved into a computed, so it's easier to mock in Jest.\n * @returns {Object} - Route name and query.\n */\n currentShowRoute() {\n const {\n $route\n } = this;\n return {\n name: $route.name,\n query: $route.query\n };\n },\n\n recentShows() {\n const {\n config,\n currentShowRoute\n } = this;\n const {\n recentShows\n } = config;\n\n const hideActiveShow = show => !(currentShowRoute.name === 'show' && show.showSlug === currentShowRoute.query.showslug);\n\n return recentShows.filter(hideActiveShow).map(show => {\n const link = `home/displayShow?showslug=${show.showSlug}`;\n return {\n name: show.name,\n link\n };\n });\n },\n\n topMenu() {\n return this.$route.meta.topMenu;\n },\n\n toolsBadgeCount() {\n const {\n config\n } = this;\n const {\n system\n } = this;\n const {\n logs\n } = config;\n const {\n news\n } = system;\n return logs.numErrors + logs.numWarnings + news.unread;\n },\n\n toolsBadgeClass() {\n const {\n config\n } = this;\n const {\n logs\n } = config;\n\n if (logs.numErrors > 0) {\n return ' btn-danger';\n }\n\n if (logs.numWarnings > 0) {\n return ' btn-warning';\n }\n\n return '';\n },\n\n linkVisible() {\n const {\n clients,\n notifiers,\n search,\n subtitles\n } = this;\n const {\n general\n } = search;\n const {\n kodi,\n plex,\n emby\n } = notifiers;\n return {\n plex: plex.server.enabled && plex.server.host.length !== 0,\n kodi: kodi.enabled && kodi.host.length !== 0,\n\n /* @TODO: Originally there was a check to make sure the API key\n was configured for Emby: ` app.EMBY_APIKEY != '' ` */\n emby: emby.enabled && emby.host,\n manageTorrents: clients.torrents.enabled && clients.torrents.method !== 'blackhole',\n failedDownloads: general.failedDownloads.enabled,\n subtitleMissed: subtitles.enabled\n };\n }\n\n },\n\n mounted() {\n const {\n $el\n } = this; // Auto close menus when clicking a RouterLink\n\n $el.clickCloseMenus = event => {\n const {\n target\n } = event;\n\n if (target.matches('#main_nav a.router-link, #main_nav a.router-link *') && (target.ariaExpanded === 'true' || target.ariaExpanded === null)) {\n const dropdown = target.closest('.dropdown');\n\n if (dropdown) {\n dropdown.querySelector('.dropdown-toggle').setAttribute('aria-expanded', false);\n dropdown.querySelector('.dropdown-menu').style.display = 'none';\n } // Also collapse the main nav if it's open\n\n\n $('#main_nav').collapse('hide');\n }\n };\n\n $el.addEventListener('click', $el.clickCloseMenus, {\n passive: true\n }); // Hover Dropdown for Nav\n\n $($el).on({\n mouseenter(event) {\n const $target = $(event.currentTarget);\n $target.find('.dropdown-menu').stop(true, true).delay(200).fadeIn(500, () => {\n $target.find('.dropdown-toggle').attr('aria-expanded', 'true');\n });\n },\n\n mouseleave(event) {\n const $target = $(event.currentTarget);\n $target.find('.dropdown-toggle').attr('aria-expanded', 'false');\n $target.find('.dropdown-menu').stop(true, true).delay(200).fadeOut(500);\n }\n\n }, 'ul.nav li.dropdown');\n },\n\n destroyed() {\n // Revert `mounted()`\n const {\n $el\n } = this; // Auto close menus when clicking a RouterLink\n\n $el.removeEventListener('click', $el.clickCloseMenus); // Hover Dropdown for Nav\n\n $($el).off('mouseenter mouseleave', 'ul.nav li.dropdown'); // @TODO Replace this with a real touchscreen check\n // hack alert: if we don't have a touchscreen, and we are already hovering the mouse, then click should link instead of toggle\n\n if ((navigator.maxTouchPoints || 0) < 2) {\n $($el).off('click', '.dropdown-toggle');\n }\n },\n\n methods: {\n confirmDialog(event, action) {\n const options = {\n confirmButton: 'Yes',\n cancelButton: 'Cancel',\n dialogClass: 'modal-dialog',\n post: false,\n button: $(event.currentTarget || event.target),\n\n confirm($element) {\n window.location.href = $element[0].href;\n }\n\n };\n\n if (action === 'newversion') {\n options.title = 'New version';\n options.text = 'New version available, update now?';\n } else if (action === 'logout') {\n options.title = 'Logout';\n options.text = 'Are you sure you want to logout from Medusa?';\n } else {\n return;\n }\n\n $.confirm(options, event);\n },\n\n async checkForupdates(event) {\n const {\n client,\n confirmDialog\n } = this;\n\n try {\n this.$snotify.info('Checking for a new version...');\n await client.api.post('system/operation', {\n type: 'CHECKFORUPDATE'\n });\n confirmDialog(event, 'newversion');\n } catch (error) {\n this.$snotify.info('You are already on the latest version');\n }\n },\n\n async updateKodi() {\n const {\n client\n } = this;\n\n try {\n await client.api.post('notifications/kodi/update');\n } catch (error) {\n this.$snotify.info('Error trying to update kodi');\n }\n },\n\n async updateEmby() {\n const {\n client\n } = this;\n\n try {\n await client.api.post('notifications/emby/update');\n } catch (error) {\n this.$snotify.info('Error trying to update emby');\n }\n },\n\n async updatePlex() {\n const {\n client\n } = this;\n\n try {\n await client.api.post('notifications/plex/update');\n } catch (error) {\n this.$snotify.info('Error trying to update plex');\n }\n },\n\n reloadPage() {\n location.reload();\n }\n\n }\n});\n\n//# sourceURL=webpack://slim/./src/components/app-header.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-1%5B0%5D.rules%5B0%5D!./node_modules/vue-loader/lib/index.js??vue-loader-options"); /***/ }), @@ -1379,7 +1379,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n/* harmony import */ var vue_native_websocket__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-native-websocket */ \"./node_modules/vue-native-websocket/dist/build.js\");\n/* harmony import */ var vue_native_websocket__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue_native_websocket__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modules */ \"./src/store/modules/index.js\");\n/* harmony import */ var _mutation_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mutation-types */ \"./src/store/mutation-types.js\");\n\n\n\n\n\nvue__WEBPACK_IMPORTED_MODULE_3__[\"default\"].use(vuex__WEBPACK_IMPORTED_MODULE_4__[\"default\"]);\nconst store = new vuex__WEBPACK_IMPORTED_MODULE_4__.Store({\n modules: {\n auth: _modules__WEBPACK_IMPORTED_MODULE_1__.auth,\n config: _modules__WEBPACK_IMPORTED_MODULE_1__.config,\n defaults: _modules__WEBPACK_IMPORTED_MODULE_1__.defaults,\n history: _modules__WEBPACK_IMPORTED_MODULE_1__.history,\n notifications: _modules__WEBPACK_IMPORTED_MODULE_1__.notifications,\n provider: _modules__WEBPACK_IMPORTED_MODULE_1__.provider,\n recommended: _modules__WEBPACK_IMPORTED_MODULE_1__.recommended,\n schedule: _modules__WEBPACK_IMPORTED_MODULE_1__.schedule,\n shows: _modules__WEBPACK_IMPORTED_MODULE_1__.shows,\n socket: _modules__WEBPACK_IMPORTED_MODULE_1__.socket,\n stats: _modules__WEBPACK_IMPORTED_MODULE_1__.stats,\n queue: _modules__WEBPACK_IMPORTED_MODULE_1__.queue\n },\n state: {},\n mutations: {},\n getters: {},\n actions: {}\n}); // Keep as a non-arrow function for `this` context.\n\nconst passToStoreHandler = function (eventName, event, next) {\n const target = eventName.toUpperCase();\n const eventData = event.data;\n\n if (target === 'SOCKET_ONMESSAGE') {\n const message = JSON.parse(eventData);\n const {\n data,\n event\n } = message; // Show the notification to the user\n\n if (event === 'notification') {\n const {\n body,\n hash,\n type,\n title\n } = data;\n window.displayNotification(type, title, body, hash);\n } else if (event === 'configUpdated') {\n const {\n section,\n config\n } = data;\n this.store.dispatch('updateConfig', {\n section,\n config\n });\n } else if (event === 'showUpdated' || event === 'showAdded') {\n this.store.dispatch('updateShow', data);\n } else if (event === 'showRemoved') {\n // We need this for the QueueItemChangeIndexer\n this.store.dispatch('removeShow', data);\n } else if (event === 'addManualSearchResult') {\n this.store.dispatch('addManualSearchResult', data);\n } else if (event === 'QueueItemUpdate') {\n this.store.dispatch('updateQueueItem', data);\n } else if (event === 'QueueItemShow') {\n // Used as a generic showqueue item. If you want to know the specific action (update, refresh, remove, etc.)\n // Use queueItem.name. Like queueItem.name === 'REFRESH'.\n if (data.name === 'REMOVE-SHOW') {\n this.store.dispatch('removeShow', data.show);\n } else {\n this.store.dispatch('updateShowQueueItem', data);\n }\n } else if (event === 'historyUpdate') {\n this.store.dispatch('updateHistory', data);\n } else {\n window.displayNotification('info', event, data);\n }\n } // Resume normal 'passToStore' handling\n\n\n next(eventName, event);\n};\n\nconst websocketUrl = (() => {\n const {\n protocol,\n host\n } = window.location;\n const proto = protocol === 'https:' ? 'wss:' : 'ws:';\n const WSMessageUrl = '/ui';\n let webRoot = document.body.getAttribute('web-root');\n\n if (webRoot) {\n if (!webRoot.startsWith('/')) {\n webRoot = `/${webRoot}`;\n }\n }\n\n return `${proto}//${host}${webRoot}/ws${WSMessageUrl}`;\n})();\n\nvue__WEBPACK_IMPORTED_MODULE_3__[\"default\"].use((vue_native_websocket__WEBPACK_IMPORTED_MODULE_0___default()), websocketUrl, {\n store,\n format: 'json',\n reconnection: true,\n // (Boolean) whether to reconnect automatically (false)\n reconnectionAttempts: 2,\n // (Number) number of reconnection attempts before giving up (Infinity),\n reconnectionDelay: 1000,\n // (Number) how long to initially wait before attempting a new (1000)\n passToStoreHandler,\n // (Function|) Handler for events triggered by the WebSocket (false)\n mutations: {\n SOCKET_ONOPEN: _mutation_types__WEBPACK_IMPORTED_MODULE_2__.SOCKET_ONOPEN,\n SOCKET_ONCLOSE: _mutation_types__WEBPACK_IMPORTED_MODULE_2__.SOCKET_ONCLOSE,\n SOCKET_ONERROR: _mutation_types__WEBPACK_IMPORTED_MODULE_2__.SOCKET_ONERROR,\n SOCKET_ONMESSAGE: _mutation_types__WEBPACK_IMPORTED_MODULE_2__.SOCKET_ONMESSAGE,\n SOCKET_RECONNECT: _mutation_types__WEBPACK_IMPORTED_MODULE_2__.SOCKET_RECONNECT,\n SOCKET_RECONNECT_ERROR: _mutation_types__WEBPACK_IMPORTED_MODULE_2__.SOCKET_RECONNECT_ERROR\n }\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (store);\n\n//# sourceURL=webpack://slim/./src/store/index.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n/* harmony import */ var vue_native_websocket__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-native-websocket */ \"./node_modules/vue-native-websocket/dist/build.js\");\n/* harmony import */ var vue_native_websocket__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue_native_websocket__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modules */ \"./src/store/modules/index.js\");\n/* harmony import */ var _mutation_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mutation-types */ \"./src/store/mutation-types.js\");\n\n\n\n\n\nvue__WEBPACK_IMPORTED_MODULE_3__[\"default\"].use(vuex__WEBPACK_IMPORTED_MODULE_4__[\"default\"]);\nconst store = new vuex__WEBPACK_IMPORTED_MODULE_4__.Store({\n modules: {\n auth: _modules__WEBPACK_IMPORTED_MODULE_1__.auth,\n config: _modules__WEBPACK_IMPORTED_MODULE_1__.config,\n defaults: _modules__WEBPACK_IMPORTED_MODULE_1__.defaults,\n history: _modules__WEBPACK_IMPORTED_MODULE_1__.history,\n notifications: _modules__WEBPACK_IMPORTED_MODULE_1__.notifications,\n provider: _modules__WEBPACK_IMPORTED_MODULE_1__.provider,\n recommended: _modules__WEBPACK_IMPORTED_MODULE_1__.recommended,\n schedule: _modules__WEBPACK_IMPORTED_MODULE_1__.schedule,\n shows: _modules__WEBPACK_IMPORTED_MODULE_1__.shows,\n socket: _modules__WEBPACK_IMPORTED_MODULE_1__.socket,\n stats: _modules__WEBPACK_IMPORTED_MODULE_1__.stats,\n queue: _modules__WEBPACK_IMPORTED_MODULE_1__.queue\n },\n state: {},\n mutations: {},\n getters: {},\n actions: {}\n}); // Keep as a non-arrow function for `this` context.\n\nconst passToStoreHandler = function (eventName, event, next) {\n const target = eventName.toUpperCase();\n const eventData = event.data;\n\n if (target === 'SOCKET_ONMESSAGE') {\n const message = JSON.parse(eventData);\n const {\n data,\n event\n } = message; // Show the notification to the user\n\n if (event === 'notification') {\n const {\n body,\n hash,\n type,\n title\n } = data;\n window.displayNotification(type, title, body, hash);\n } else if (event === 'configUpdated') {\n const {\n section,\n config\n } = data;\n this.store.dispatch('updateConfig', {\n section,\n config\n });\n } else if (event === 'showUpdated' || event === 'showAdded') {\n this.store.dispatch('updateShow', data);\n } else if (event === 'showRemoved') {\n // We need this for the QueueItemChangeIndexer\n this.store.dispatch('removeShow', data);\n } else if (event === 'addManualSearchResult') {\n this.store.dispatch('addManualSearchResult', data);\n } else if (event === 'QueueItemUpdate') {\n this.store.dispatch('updateQueueItem', data);\n } else if (event === 'QueueItemShow') {\n // Used as a generic showqueue item. If you want to know the specific action (update, refresh, remove, etc.)\n // Use queueItem.name. Like queueItem.name === 'REFRESH'.\n if (data.name === 'REMOVE-SHOW') {\n this.store.dispatch('removeShow', data.show);\n } else {\n this.store.dispatch('updateShowQueueItem', data);\n }\n } else if (event === 'historyUpdate') {\n this.store.dispatch('updateHistory', data);\n } else {\n window.displayNotification('info', event, data);\n }\n } // Resume normal 'passToStore' handling\n\n\n next(eventName, event);\n};\n\nconst websocketUrl = (() => {\n const {\n protocol,\n host\n } = window.location;\n const proto = protocol === 'https:' ? 'wss:' : 'ws:';\n const WSMessageUrl = '/ui';\n let webRoot = document.body.getAttribute('web-root');\n\n if (webRoot) {\n if (!webRoot.startsWith('/')) {\n webRoot = `/${webRoot}`;\n }\n }\n\n return `${proto}//${host}${webRoot}/ws${WSMessageUrl}`;\n})();\n\nvue__WEBPACK_IMPORTED_MODULE_3__[\"default\"].use((vue_native_websocket__WEBPACK_IMPORTED_MODULE_0___default()), websocketUrl, {\n store,\n format: 'json',\n reconnection: true,\n // (Boolean) whether to reconnect automatically (false)\n reconnectionAttempts: 25,\n // (Number) number of reconnection attempts before giving up (Infinity),\n reconnectionDelay: 2500,\n // (Number) how long to initially wait before attempting a new (1000)\n passToStoreHandler,\n // (Function|) Handler for events triggered by the WebSocket (false)\n mutations: {\n SOCKET_ONOPEN: _mutation_types__WEBPACK_IMPORTED_MODULE_2__.SOCKET_ONOPEN,\n SOCKET_ONCLOSE: _mutation_types__WEBPACK_IMPORTED_MODULE_2__.SOCKET_ONCLOSE,\n SOCKET_ONERROR: _mutation_types__WEBPACK_IMPORTED_MODULE_2__.SOCKET_ONERROR,\n SOCKET_ONMESSAGE: _mutation_types__WEBPACK_IMPORTED_MODULE_2__.SOCKET_ONMESSAGE,\n SOCKET_RECONNECT: _mutation_types__WEBPACK_IMPORTED_MODULE_2__.SOCKET_RECONNECT,\n SOCKET_RECONNECT_ERROR: _mutation_types__WEBPACK_IMPORTED_MODULE_2__.SOCKET_RECONNECT_ERROR\n }\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (store);\n\n//# sourceURL=webpack://slim/./src/store/index.js?"); /***/ }), @@ -1390,7 +1390,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _mutation_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../mutation-types */ \"./src/store/mutation-types.js\");\n/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../api */ \"./src/api.js\");\n/* harmony import */ var vue_jwt_decode__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-jwt-decode */ \"./node_modules/vue-jwt-decode/dist/lib/vue-jwt-decode.min.js\");\n/* harmony import */ var vue_jwt_decode__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(vue_jwt_decode__WEBPACK_IMPORTED_MODULE_2__);\n\n\n\nconst state = {\n isAuthenticated: false,\n user: {},\n tokens: {\n access: null,\n refresh: null\n },\n error: null,\n client: null,\n apiKey: null,\n webRoot: null\n};\nconst mutations = {\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGIN_PENDING]() {},\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGIN_SUCCESS](state, user) {\n state.user.username = user.username;\n state.user.group = user.group;\n state.apiKey = user.apiKey;\n state.webRoot = user.webRoot;\n state.isAuthenticated = true;\n state.error = null;\n },\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGIN_FAILED](state, _ref) {\n let {\n error\n } = _ref;\n state.user = {};\n state.isAuthenticated = false;\n state.error = error;\n },\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGOUT](state) {\n state.user = {};\n state.isAuthenticated = false;\n state.error = null;\n },\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.REFRESH_TOKEN]() {},\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.REMOVE_AUTH_ERROR]() {},\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.AUTHENTICATE](state, client) {\n state.client = client;\n state.tokens.access = client.token;\n }\n\n};\nconst getters = {};\nconst actions = {\n login(_ref2) {\n let {\n commit,\n state\n } = _ref2;\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGIN_PENDING); // Check if we got a token from the /token call.\n\n const {\n client\n } = state;\n const {\n token\n } = client;\n\n if (!token) {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGIN_FAILED, {\n error: 'Missing token'\n });\n return {\n success: false,\n error: 'Missing token'\n };\n }\n\n const credentials = vue_jwt_decode__WEBPACK_IMPORTED_MODULE_2___default().decode(token); // @TODO: Add real JWT login\n\n const apiLogin = credentials => Promise.resolve(credentials);\n\n return apiLogin(credentials).then(user => {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGIN_SUCCESS, user);\n return {\n success: true\n };\n }).catch(error => {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGIN_FAILED, {\n error,\n credentials\n });\n return {\n success: false,\n error\n };\n });\n },\n\n logout(context) {\n const {\n commit\n } = context;\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGOUT);\n },\n\n auth(_ref3) {\n let {\n commit\n } = _ref3;\n // Get the JWT token\n return new Promise(resolve => {\n const apiClient = new _api__WEBPACK_IMPORTED_MODULE_1__[\"default\"]();\n apiClient.getToken().then(() => {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.AUTHENTICATE, apiClient);\n resolve();\n });\n });\n }\n\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n state,\n mutations,\n getters,\n actions\n});\n\n//# sourceURL=webpack://slim/./src/store/modules/auth.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _mutation_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../mutation-types */ \"./src/store/mutation-types.js\");\n/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../api */ \"./src/api.js\");\n/* harmony import */ var vue_jwt_decode__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-jwt-decode */ \"./node_modules/vue-jwt-decode/dist/lib/vue-jwt-decode.min.js\");\n/* harmony import */ var vue_jwt_decode__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(vue_jwt_decode__WEBPACK_IMPORTED_MODULE_2__);\n\n\n\nconst state = {\n isAuthenticated: false,\n isConnected: false,\n user: {},\n tokens: {\n access: null,\n refresh: null\n },\n error: null,\n client: null,\n apiKey: null,\n webRoot: null\n};\nconst mutations = {\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGIN_PENDING]() {},\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGIN_SUCCESS](state, user) {\n state.user.username = user.username;\n state.user.group = user.group;\n state.apiKey = user.apiKey;\n state.webRoot = user.webRoot;\n state.isAuthenticated = true;\n state.error = null;\n },\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGIN_FAILED](state, _ref) {\n let {\n error\n } = _ref;\n state.user = {};\n state.isAuthenticated = false;\n state.error = error;\n },\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGOUT](state) {\n state.user = {};\n state.isAuthenticated = false;\n state.error = null;\n },\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.REFRESH_TOKEN]() {},\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.REMOVE_AUTH_ERROR]() {},\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.AUTHENTICATE](state, client) {\n state.client = client;\n state.tokens.access = client.token;\n },\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.CONNECT](state, value) {\n state.isConnected = value;\n }\n\n};\nconst getters = {};\nconst actions = {\n login(_ref2) {\n let {\n commit,\n state\n } = _ref2;\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGIN_PENDING); // Check if we got a token from the /token call.\n\n const {\n client\n } = state;\n const {\n token\n } = client;\n\n if (!token) {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGIN_FAILED, {\n error: 'Missing token'\n });\n return {\n success: false,\n error: 'Missing token'\n };\n }\n\n const credentials = vue_jwt_decode__WEBPACK_IMPORTED_MODULE_2___default().decode(token); // @TODO: Add real JWT login\n\n const apiLogin = credentials => Promise.resolve(credentials);\n\n return apiLogin(credentials).then(user => {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGIN_SUCCESS, user);\n return {\n success: true\n };\n }).catch(error => {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGIN_FAILED, {\n error,\n credentials\n });\n return {\n success: false,\n error\n };\n });\n },\n\n logout(context) {\n const {\n commit\n } = context;\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.LOGOUT);\n },\n\n auth(_ref3) {\n let {\n commit\n } = _ref3;\n // Get the JWT token\n return new Promise(resolve => {\n const apiClient = new _api__WEBPACK_IMPORTED_MODULE_1__[\"default\"]();\n apiClient.getToken().then(() => {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.AUTHENTICATE, apiClient);\n resolve();\n });\n });\n },\n\n connect(_ref4, connected) {\n let {\n commit\n } = _ref4;\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.CONNECT, connected);\n }\n\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n state,\n mutations,\n getters,\n actions\n});\n\n//# sourceURL=webpack://slim/./src/store/modules/auth.js?"); /***/ }), @@ -1918,7 +1918,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"AUTHENTICATE\": () => (/* binding */ AUTHENTICATE),\n/* harmony export */ \"LOGIN_PENDING\": () => (/* binding */ LOGIN_PENDING),\n/* harmony export */ \"LOGIN_SUCCESS\": () => (/* binding */ LOGIN_SUCCESS),\n/* harmony export */ \"LOGIN_FAILED\": () => (/* binding */ LOGIN_FAILED),\n/* harmony export */ \"LOGOUT\": () => (/* binding */ LOGOUT),\n/* harmony export */ \"REFRESH_TOKEN\": () => (/* binding */ REFRESH_TOKEN),\n/* harmony export */ \"REMOVE_AUTH_ERROR\": () => (/* binding */ REMOVE_AUTH_ERROR),\n/* harmony export */ \"SOCKET_ONOPEN\": () => (/* binding */ SOCKET_ONOPEN),\n/* harmony export */ \"SOCKET_ONCLOSE\": () => (/* binding */ SOCKET_ONCLOSE),\n/* harmony export */ \"SOCKET_ONERROR\": () => (/* binding */ SOCKET_ONERROR),\n/* harmony export */ \"SOCKET_ONMESSAGE\": () => (/* binding */ SOCKET_ONMESSAGE),\n/* harmony export */ \"SOCKET_RECONNECT\": () => (/* binding */ SOCKET_RECONNECT),\n/* harmony export */ \"SOCKET_RECONNECT_ERROR\": () => (/* binding */ SOCKET_RECONNECT_ERROR),\n/* harmony export */ \"NOTIFICATIONS_ENABLED\": () => (/* binding */ NOTIFICATIONS_ENABLED),\n/* harmony export */ \"NOTIFICATIONS_DISABLED\": () => (/* binding */ NOTIFICATIONS_DISABLED),\n/* harmony export */ \"ADD_CONFIG\": () => (/* binding */ ADD_CONFIG),\n/* harmony export */ \"UPDATE_LAYOUT_LOCAL\": () => (/* binding */ UPDATE_LAYOUT_LOCAL),\n/* harmony export */ \"ADD_HISTORY\": () => (/* binding */ ADD_HISTORY),\n/* harmony export */ \"ADD_HISTORY_ROW\": () => (/* binding */ ADD_HISTORY_ROW),\n/* harmony export */ \"ADD_SHOW\": () => (/* binding */ ADD_SHOW),\n/* harmony export */ \"ADD_STATS\": () => (/* binding */ ADD_STATS),\n/* harmony export */ \"ADD_SHOW_CONFIG\": () => (/* binding */ ADD_SHOW_CONFIG),\n/* harmony export */ \"ADD_RECOMMENDED_SHOW\": () => (/* binding */ ADD_RECOMMENDED_SHOW),\n/* harmony export */ \"SET_RECOMMENDED_SHOWS\": () => (/* binding */ SET_RECOMMENDED_SHOWS),\n/* harmony export */ \"SET_RECOMMENDED_SHOWS_TRAKT_REMOVED\": () => (/* binding */ SET_RECOMMENDED_SHOWS_TRAKT_REMOVED),\n/* harmony export */ \"SET_RECOMMENDED_SHOWS_CATEGORIES\": () => (/* binding */ SET_RECOMMENDED_SHOWS_CATEGORIES),\n/* harmony export */ \"ADD_SHOWS\": () => (/* binding */ ADD_SHOWS),\n/* harmony export */ \"ADD_SHOW_EPISODE\": () => (/* binding */ ADD_SHOW_EPISODE),\n/* harmony export */ \"ADD_REMOTE_BRANCHES\": () => (/* binding */ ADD_REMOTE_BRANCHES),\n/* harmony export */ \"SET_STATS\": () => (/* binding */ SET_STATS),\n/* harmony export */ \"SET_MAX_DOWNLOAD_COUNT\": () => (/* binding */ SET_MAX_DOWNLOAD_COUNT),\n/* harmony export */ \"ADD_SHOW_SCENE_EXCEPTION\": () => (/* binding */ ADD_SHOW_SCENE_EXCEPTION),\n/* harmony export */ \"REMOVE_SHOW_SCENE_EXCEPTION\": () => (/* binding */ REMOVE_SHOW_SCENE_EXCEPTION),\n/* harmony export */ \"REMOVE_SHOW_CONFIG_TEMPLATE\": () => (/* binding */ REMOVE_SHOW_CONFIG_TEMPLATE),\n/* harmony export */ \"ADD_SHOW_HISTORY\": () => (/* binding */ ADD_SHOW_HISTORY),\n/* harmony export */ \"ADD_SHOW_EPISODE_HISTORY\": () => (/* binding */ ADD_SHOW_EPISODE_HISTORY),\n/* harmony export */ \"ADD_PROVIDER\": () => (/* binding */ ADD_PROVIDER),\n/* harmony export */ \"ADD_PROVIDERS\": () => (/* binding */ ADD_PROVIDERS),\n/* harmony export */ \"ADD_PROVIDER_CACHE\": () => (/* binding */ ADD_PROVIDER_CACHE),\n/* harmony export */ \"ADD_SEARCH_RESULTS\": () => (/* binding */ ADD_SEARCH_RESULTS),\n/* harmony export */ \"ADD_QUEUE_ITEM\": () => (/* binding */ ADD_QUEUE_ITEM),\n/* harmony export */ \"SET_LAST_ITEM\": () => (/* binding */ SET_LAST_ITEM),\n/* harmony export */ \"ADD_SHOW_QUEUE_ITEM\": () => (/* binding */ ADD_SHOW_QUEUE_ITEM),\n/* harmony export */ \"REMOVE_SHOW\": () => (/* binding */ REMOVE_SHOW),\n/* harmony export */ \"REMOVE_PROVIDER\": () => (/* binding */ REMOVE_PROVIDER),\n/* harmony export */ \"UPDATE_SHOWLIST_DEFAULT\": () => (/* binding */ UPDATE_SHOWLIST_DEFAULT),\n/* harmony export */ \"ADD_SHOW_CONFIG_TEMPLATE\": () => (/* binding */ ADD_SHOW_CONFIG_TEMPLATE),\n/* harmony export */ \"ADD_SCHEDULE\": () => (/* binding */ ADD_SCHEDULE)\n/* harmony export */ });\nconst AUTHENTICATE = '🔒 Authenticating';\nconst LOGIN_PENDING = '🔒 Logging in';\nconst LOGIN_SUCCESS = '🔒 ✅ Login Successful';\nconst LOGIN_FAILED = '🔒 ❌ Login Failed';\nconst LOGOUT = '🔒 Logout';\nconst REFRESH_TOKEN = '🔒 Refresh Token';\nconst REMOVE_AUTH_ERROR = '🔒 Remove Auth Error';\nconst SOCKET_ONOPEN = '🔗 ✅ WebSocket connected';\nconst SOCKET_ONCLOSE = '🔗 ❌ WebSocket disconnected';\nconst SOCKET_ONERROR = '🔗 ❌ WebSocket error';\nconst SOCKET_ONMESSAGE = '🔗 ✉️ 📥 WebSocket message received';\nconst SOCKET_RECONNECT = '🔗 🔃 WebSocket reconnecting';\nconst SOCKET_RECONNECT_ERROR = '🔗 🔃 ❌ WebSocket reconnection attempt failed';\nconst NOTIFICATIONS_ENABLED = '🔔 Notifications Enabled';\nconst NOTIFICATIONS_DISABLED = '🔔 Notifications Disabled';\nconst ADD_CONFIG = '⚙️ Config added to store';\nconst UPDATE_LAYOUT_LOCAL = '⚙️ Local layout updated in store';\nconst ADD_REMOTE_BRANCHES = '⚙️ Add git remote branches to store';\nconst ADD_SHOW = '📺 Show added to store';\nconst ADD_SHOW_CONFIG = '📺 Show config updated in store';\nconst ADD_SHOWS = '📺 Multiple Shows added to store in bulk';\nconst ADD_SHOW_EPISODE = '📺 Shows season with episodes added to store';\nconst ADD_STATS = 'ℹ️ Statistics added to store';\nconst ADD_RECOMMENDED_SHOW = '📺 Recommended Show added to store';\nconst SET_RECOMMENDED_SHOWS = '📺 Recommended Shows added to store';\nconst SET_RECOMMENDED_SHOWS_TRAKT_REMOVED = '📺 Recommended Show Trakt removed added to store';\nconst SET_RECOMMENDED_SHOWS_CATEGORIES = '📺 Recommended Show categories added to store';\nconst SET_STATS = 'SET_STATS';\nconst SET_MAX_DOWNLOAD_COUNT = 'SET_MAX_DOWNLOAD_COUNT';\nconst ADD_SHOW_SCENE_EXCEPTION = '📺 Add a scene exception';\nconst REMOVE_SHOW_SCENE_EXCEPTION = '📺 Remove a scene exception';\nconst REMOVE_SHOW_CONFIG_TEMPLATE = '📺 Remove a shows search template';\nconst ADD_HISTORY = '📺 History added to store';\nconst ADD_HISTORY_ROW = '📺 History row added to store';\nconst ADD_SHOW_CONFIG_TEMPLATE = '📺 Search template added to shows templates';\nconst ADD_SHOW_HISTORY = '📺 Show specific History added to store';\nconst ADD_SHOW_EPISODE_HISTORY = \"📺 Show's episode specific History added to store\";\nconst ADD_PROVIDER = '⛽ Provider added to store';\nconst ADD_PROVIDERS = '⛽ Provider list added to store';\nconst ADD_PROVIDER_CACHE = '⛽ Provider cache results added to store';\nconst ADD_SEARCH_RESULTS = '⛽ New search results added for provider';\nconst ADD_QUEUE_ITEM = '🔍 Search queue item updated';\nconst SET_LAST_ITEM = '🔍 Search queue item set for last item';\nconst ADD_SHOW_QUEUE_ITEM = '📺 Show queue item added to store';\nconst REMOVE_SHOW = '📺 Show removed from store';\nconst REMOVE_PROVIDER = '⛽ Provider removed';\nconst UPDATE_SHOWLIST_DEFAULT = '⚙️ Anime config showlist default updated';\nconst ADD_SCHEDULE = '📅 Schedule information added';\n\n\n//# sourceURL=webpack://slim/./src/store/mutation-types.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"AUTHENTICATE\": () => (/* binding */ AUTHENTICATE),\n/* harmony export */ \"CONNECT\": () => (/* binding */ CONNECT),\n/* harmony export */ \"LOGIN_PENDING\": () => (/* binding */ LOGIN_PENDING),\n/* harmony export */ \"LOGIN_SUCCESS\": () => (/* binding */ LOGIN_SUCCESS),\n/* harmony export */ \"LOGIN_FAILED\": () => (/* binding */ LOGIN_FAILED),\n/* harmony export */ \"LOGOUT\": () => (/* binding */ LOGOUT),\n/* harmony export */ \"REFRESH_TOKEN\": () => (/* binding */ REFRESH_TOKEN),\n/* harmony export */ \"REMOVE_AUTH_ERROR\": () => (/* binding */ REMOVE_AUTH_ERROR),\n/* harmony export */ \"SOCKET_ONOPEN\": () => (/* binding */ SOCKET_ONOPEN),\n/* harmony export */ \"SOCKET_ONCLOSE\": () => (/* binding */ SOCKET_ONCLOSE),\n/* harmony export */ \"SOCKET_ONERROR\": () => (/* binding */ SOCKET_ONERROR),\n/* harmony export */ \"SOCKET_ONMESSAGE\": () => (/* binding */ SOCKET_ONMESSAGE),\n/* harmony export */ \"SOCKET_RECONNECT\": () => (/* binding */ SOCKET_RECONNECT),\n/* harmony export */ \"SOCKET_RECONNECT_ERROR\": () => (/* binding */ SOCKET_RECONNECT_ERROR),\n/* harmony export */ \"NOTIFICATIONS_ENABLED\": () => (/* binding */ NOTIFICATIONS_ENABLED),\n/* harmony export */ \"NOTIFICATIONS_DISABLED\": () => (/* binding */ NOTIFICATIONS_DISABLED),\n/* harmony export */ \"ADD_CONFIG\": () => (/* binding */ ADD_CONFIG),\n/* harmony export */ \"UPDATE_LAYOUT_LOCAL\": () => (/* binding */ UPDATE_LAYOUT_LOCAL),\n/* harmony export */ \"ADD_HISTORY\": () => (/* binding */ ADD_HISTORY),\n/* harmony export */ \"ADD_HISTORY_ROW\": () => (/* binding */ ADD_HISTORY_ROW),\n/* harmony export */ \"ADD_SHOW\": () => (/* binding */ ADD_SHOW),\n/* harmony export */ \"ADD_STATS\": () => (/* binding */ ADD_STATS),\n/* harmony export */ \"ADD_SHOW_CONFIG\": () => (/* binding */ ADD_SHOW_CONFIG),\n/* harmony export */ \"ADD_RECOMMENDED_SHOW\": () => (/* binding */ ADD_RECOMMENDED_SHOW),\n/* harmony export */ \"SET_RECOMMENDED_SHOWS\": () => (/* binding */ SET_RECOMMENDED_SHOWS),\n/* harmony export */ \"SET_RECOMMENDED_SHOWS_TRAKT_REMOVED\": () => (/* binding */ SET_RECOMMENDED_SHOWS_TRAKT_REMOVED),\n/* harmony export */ \"SET_RECOMMENDED_SHOWS_CATEGORIES\": () => (/* binding */ SET_RECOMMENDED_SHOWS_CATEGORIES),\n/* harmony export */ \"ADD_SHOWS\": () => (/* binding */ ADD_SHOWS),\n/* harmony export */ \"ADD_SHOW_EPISODE\": () => (/* binding */ ADD_SHOW_EPISODE),\n/* harmony export */ \"ADD_REMOTE_BRANCHES\": () => (/* binding */ ADD_REMOTE_BRANCHES),\n/* harmony export */ \"SET_STATS\": () => (/* binding */ SET_STATS),\n/* harmony export */ \"SET_MAX_DOWNLOAD_COUNT\": () => (/* binding */ SET_MAX_DOWNLOAD_COUNT),\n/* harmony export */ \"ADD_SHOW_SCENE_EXCEPTION\": () => (/* binding */ ADD_SHOW_SCENE_EXCEPTION),\n/* harmony export */ \"REMOVE_SHOW_SCENE_EXCEPTION\": () => (/* binding */ REMOVE_SHOW_SCENE_EXCEPTION),\n/* harmony export */ \"REMOVE_SHOW_CONFIG_TEMPLATE\": () => (/* binding */ REMOVE_SHOW_CONFIG_TEMPLATE),\n/* harmony export */ \"ADD_SHOW_HISTORY\": () => (/* binding */ ADD_SHOW_HISTORY),\n/* harmony export */ \"ADD_SHOW_EPISODE_HISTORY\": () => (/* binding */ ADD_SHOW_EPISODE_HISTORY),\n/* harmony export */ \"ADD_PROVIDER\": () => (/* binding */ ADD_PROVIDER),\n/* harmony export */ \"ADD_PROVIDERS\": () => (/* binding */ ADD_PROVIDERS),\n/* harmony export */ \"ADD_PROVIDER_CACHE\": () => (/* binding */ ADD_PROVIDER_CACHE),\n/* harmony export */ \"ADD_SEARCH_RESULTS\": () => (/* binding */ ADD_SEARCH_RESULTS),\n/* harmony export */ \"ADD_QUEUE_ITEM\": () => (/* binding */ ADD_QUEUE_ITEM),\n/* harmony export */ \"SET_LAST_ITEM\": () => (/* binding */ SET_LAST_ITEM),\n/* harmony export */ \"ADD_SHOW_QUEUE_ITEM\": () => (/* binding */ ADD_SHOW_QUEUE_ITEM),\n/* harmony export */ \"REMOVE_SHOW\": () => (/* binding */ REMOVE_SHOW),\n/* harmony export */ \"REMOVE_PROVIDER\": () => (/* binding */ REMOVE_PROVIDER),\n/* harmony export */ \"UPDATE_SHOWLIST_DEFAULT\": () => (/* binding */ UPDATE_SHOWLIST_DEFAULT),\n/* harmony export */ \"ADD_SHOW_CONFIG_TEMPLATE\": () => (/* binding */ ADD_SHOW_CONFIG_TEMPLATE),\n/* harmony export */ \"ADD_SCHEDULE\": () => (/* binding */ ADD_SCHEDULE)\n/* harmony export */ });\nconst AUTHENTICATE = '🔒 Authenticating';\nconst CONNECT = '🔒 🔗 Connected';\nconst LOGIN_PENDING = '🔒 Logging in';\nconst LOGIN_SUCCESS = '🔒 ✅ Login Successful';\nconst LOGIN_FAILED = '🔒 ❌ Login Failed';\nconst LOGOUT = '🔒 Logout';\nconst REFRESH_TOKEN = '🔒 Refresh Token';\nconst REMOVE_AUTH_ERROR = '🔒 Remove Auth Error';\nconst SOCKET_ONOPEN = '🔗 ✅ WebSocket connected';\nconst SOCKET_ONCLOSE = '🔗 ❌ WebSocket disconnected';\nconst SOCKET_ONERROR = '🔗 ❌ WebSocket error';\nconst SOCKET_ONMESSAGE = '🔗 ✉️ 📥 WebSocket message received';\nconst SOCKET_RECONNECT = '🔗 🔃 WebSocket reconnecting';\nconst SOCKET_RECONNECT_ERROR = '🔗 🔃 ❌ WebSocket reconnection attempt failed';\nconst NOTIFICATIONS_ENABLED = '🔔 Notifications Enabled';\nconst NOTIFICATIONS_DISABLED = '🔔 Notifications Disabled';\nconst ADD_CONFIG = '⚙️ Config added to store';\nconst UPDATE_LAYOUT_LOCAL = '⚙️ Local layout updated in store';\nconst ADD_REMOTE_BRANCHES = '⚙️ Add git remote branches to store';\nconst ADD_SHOW = '📺 Show added to store';\nconst ADD_SHOW_CONFIG = '📺 Show config updated in store';\nconst ADD_SHOWS = '📺 Multiple Shows added to store in bulk';\nconst ADD_SHOW_EPISODE = '📺 Shows season with episodes added to store';\nconst ADD_STATS = 'ℹ️ Statistics added to store';\nconst ADD_RECOMMENDED_SHOW = '📺 Recommended Show added to store';\nconst SET_RECOMMENDED_SHOWS = '📺 Recommended Shows added to store';\nconst SET_RECOMMENDED_SHOWS_TRAKT_REMOVED = '📺 Recommended Show Trakt removed added to store';\nconst SET_RECOMMENDED_SHOWS_CATEGORIES = '📺 Recommended Show categories added to store';\nconst SET_STATS = 'SET_STATS';\nconst SET_MAX_DOWNLOAD_COUNT = 'SET_MAX_DOWNLOAD_COUNT';\nconst ADD_SHOW_SCENE_EXCEPTION = '📺 Add a scene exception';\nconst REMOVE_SHOW_SCENE_EXCEPTION = '📺 Remove a scene exception';\nconst REMOVE_SHOW_CONFIG_TEMPLATE = '📺 Remove a shows search template';\nconst ADD_HISTORY = '📺 History added to store';\nconst ADD_HISTORY_ROW = '📺 History row added to store';\nconst ADD_SHOW_CONFIG_TEMPLATE = '📺 Search template added to shows templates';\nconst ADD_SHOW_HISTORY = '📺 Show specific History added to store';\nconst ADD_SHOW_EPISODE_HISTORY = \"📺 Show's episode specific History added to store\";\nconst ADD_PROVIDER = '⛽ Provider added to store';\nconst ADD_PROVIDERS = '⛽ Provider list added to store';\nconst ADD_PROVIDER_CACHE = '⛽ Provider cache results added to store';\nconst ADD_SEARCH_RESULTS = '⛽ New search results added for provider';\nconst ADD_QUEUE_ITEM = '🔍 Search queue item updated';\nconst SET_LAST_ITEM = '🔍 Search queue item set for last item';\nconst ADD_SHOW_QUEUE_ITEM = '📺 Show queue item added to store';\nconst REMOVE_SHOW = '📺 Show removed from store';\nconst REMOVE_PROVIDER = '⛽ Provider removed';\nconst UPDATE_SHOWLIST_DEFAULT = '⚙️ Anime config showlist default updated';\nconst ADD_SCHEDULE = '📅 Schedule information added';\n\n\n//# sourceURL=webpack://slim/./src/store/mutation-types.js?"); /***/ }), @@ -1951,7 +1951,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/getUrl.js */ \"./node_modules/css-loader/dist/runtime/getUrl.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__);\n// Imports\n\n\n\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __webpack_require__(/*! data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7 */ \"data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7\"), __webpack_require__.b);\nvar ___CSS_LOADER_URL_IMPORT_1___ = new URL(/* asset import */ __webpack_require__(/*! data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7 */ \"data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7\"), __webpack_require__.b);\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_1___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/** Use this as table styling for all table layouts */\\n.vgt-table-styling {\\n /* Schedule list layout */\\n}\\n.vgt-table-styling .vgt-table {\\n width: 100%;\\n margin-right: auto;\\n margin-left: auto;\\n text-align: left;\\n border-spacing: 0;\\n border-collapse: initial;\\n /* remove extra border from left edge */\\n /* optional disabled input styling */\\n /* When using collored rows (using the episode status name, Snatched, Downloaded, Failed, etc.)\\n * we'd like to have the text always black.\\n */\\n}\\n.vgt-table-styling .vgt-table th,\\n.vgt-table-styling .vgt-table td {\\n padding: 4px;\\n vertical-align: middle;\\n}\\n.vgt-table-styling .vgt-table th:first-child,\\n.vgt-table-styling .vgt-table td:first-child {\\n border-left: none;\\n}\\n.vgt-table-styling .vgt-table th {\\n text-align: center;\\n border-collapse: collapse;\\n font-weight: normal;\\n position: relative;\\n}\\n.vgt-table-styling .vgt-table span.break-word {\\n word-wrap: break-word;\\n}\\n.vgt-table-styling .vgt-table thead th.sorting.sorting-asc {\\n background-position-x: right;\\n background-position-y: bottom;\\n}\\n.vgt-table-styling .vgt-table thead th.sorting {\\n background-repeat: no-repeat;\\n}\\n.vgt-table-styling .vgt-table thead th.sorting.sorting-desc {\\n background-color: #555555;\\n background-image: url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \");\\n}\\n.vgt-table-styling .vgt-table thead th.sorting.sorting-asc {\\n background-color: #555555;\\n background-image: url(\" + ___CSS_LOADER_URL_REPLACEMENT_1___ + \");\\n background-position-x: right;\\n background-position-y: bottom;\\n}\\n.vgt-table-styling .vgt-table th.sortable button {\\n -webkit-appearance: none;\\n -moz-appearance: none;\\n appearance: none;\\n background: transparent;\\n border: none;\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n}\\n.vgt-table-styling .vgt-table thead th {\\n padding: 4px;\\n cursor: default;\\n}\\n.vgt-table-styling .vgt-table input.tablesorter-filter {\\n width: 98%;\\n height: auto;\\n -webkit-box-sizing: border-box;\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n}\\n.vgt-table-styling .vgt-table tr.tablesorter-filter-row,\\n.vgt-table-styling .vgt-table tr.tablesorter-filter-row td {\\n text-align: center;\\n}\\n.vgt-table-styling .vgt-table input.tablesorter-filter-row .disabled {\\n display: none;\\n}\\n.vgt-table-styling .vgt-table tfoot tr {\\n text-align: center;\\n border-collapse: collapse;\\n}\\n.vgt-table-styling .vgt-table tfoot a {\\n text-decoration: none;\\n}\\n.vgt-table-styling .vgt-table th.vgt-row-header {\\n text-align: left;\\n}\\n.vgt-table-styling .vgt-table .season-header {\\n display: inline;\\n margin-left: 5px;\\n}\\n.vgt-table-styling .vgt-table tr.spacer {\\n height: 25px;\\n}\\n.vgt-table-styling .vgt-table tr:hover {\\n opacity: 0.9;\\n}\\n.vgt-table-styling .vgt-table tr.status td > span {\\n color: black;\\n}\\n.vgt-table-styling .vgt-table span.episode-title > a {\\n text-decoration: none;\\n}\\n.vgt-table-styling .vgt-table span.episode-title > a:hover, .vgt-table-styling .vgt-table span.episode-title > a:focus {\\n text-decoration: underline;\\n}\\n.vgt-table-styling .vgt-table .skipped {\\n background-color: #bedeed;\\n}\\n.vgt-table-styling .vgt-table .snatched {\\n background-color: #ebc1ea;\\n}\\n.vgt-table-styling .vgt-table .downloaded {\\n background-color: #ffda8a;\\n}\\n.vgt-table-styling .vgt-table .failed {\\n background-color: #ff9999;\\n}\\n.vgt-table-styling .vgt-table .subtitled {\\n background-color: #bedeed;\\n}\\n.vgt-table-styling .vgt-table .archived {\\n background-color: #f5f1e4;\\n}\\n.vgt-table-styling .tablesorter-header-inner {\\n padding: 0 2px;\\n text-align: center;\\n}\\n.vgt-table-styling .vgt-dropdown > .button-group {\\n position: relative;\\n}\\n.vgt-table-styling .dropdown-toggle {\\n position: absolute;\\n z-index: 1;\\n top: 0.1em;\\n right: 0.1em;\\n width: 1em;\\n transition: width 0.2s ease-in-out;\\n}\\n.vgt-table-styling .dropdown-toggle:hover, .vgt-table-styling .dropdown-toggle:active {\\n width: 2em;\\n}\\n.vgt-table-styling .vgt-dropdown-menu {\\n position: absolute;\\n z-index: 1;\\n float: left;\\n min-width: 160px;\\n padding: 5px 0;\\n margin: 2px 0 0;\\n font-size: 14px;\\n text-align: left;\\n list-style: none;\\n background-clip: padding-box;\\n border-radius: 3px;\\n right: 0;\\n top: 2em;\\n}\\n.vgt-table-styling .vgt-dropdown-menu > li > span {\\n display: block;\\n padding: 3px 5px;\\n clear: both;\\n font-weight: 400;\\n line-height: 1.42857143;\\n white-space: nowrap;\\n}\\n.vgt-table-styling .align-center {\\n display: flex;\\n justify-content: center;\\n}\\n.vgt-table-styling .span-center > span {\\n display: flex;\\n justify-content: center;\\n}\\n.vgt-table-styling .indexer-image :not(:last-child) {\\n margin-right: 5px;\\n}\\n.vgt-table-styling .button-row {\\n width: 100%;\\n display: inline-block;\\n}\\n.vgt-table-styling .global-ignored td.release span {\\n color: red;\\n}\\n.vgt-table-styling .show-ignored td.release span {\\n color: red;\\n font-style: italic;\\n}\\n.vgt-table-styling .global-required td.release span {\\n color: green;\\n}\\n.vgt-table-styling .show-required td.release span {\\n color: green;\\n font-style: italic;\\n}\\n.vgt-table-styling .global-undesired td.release span {\\n color: orange;\\n}\\n.vgt-table-styling td.col-footer {\\n text-align: left !important;\\n}\\n.vgt-table-styling .vgt-wrap__footer {\\n color: white;\\n padding: 1em;\\n background-color: #333333;\\n margin-bottom: 1em;\\n display: flex;\\n justify-content: space-between;\\n}\\n.vgt-table-styling .footer__row-count,\\n.vgt-table-styling .footer__navigation__page-info {\\n display: inline;\\n}\\n.vgt-table-styling .footer__row-count__label {\\n margin-right: 1em;\\n}\\n.vgt-table-styling .vgt-wrap__footer .footer__navigation {\\n font-size: 14px;\\n}\\n.vgt-table-styling .vgt-pull-right {\\n float: right !important;\\n}\\n.vgt-table-styling .footer__navigation__page-btn {\\n display: inline-block;\\n padding: 4px 10px;\\n margin-bottom: 0;\\n font-size: 12px;\\n line-height: 16px;\\n vertical-align: middle;\\n border-radius: 1px;\\n}\\n.vgt-table-styling .footer__navigation__page-btn:hover {\\n text-decoration: none;\\n background-position: 0 -150px;\\n transition: background-position 0s linear;\\n background-image: none;\\n}\\n.vgt-table-styling .footer__navigation__page-btn.disabled {\\n display: none;\\n}\\n.vgt-table-styling .vgt-wrap__footer .footer__navigation__page-btn .chevron {\\n width: 24px;\\n height: 24px;\\n border-radius: 15%;\\n position: relative;\\n margin: 0 8px;\\n}\\n.vgt-table-styling .vgt-wrap__footer .footer__navigation__info,\\n.vgt-table-styling .vgt-wrap__footer .footer__navigation__page-info {\\n display: inline-flex;\\n color: #909399;\\n margin: 0 16px;\\n margin-top: 0;\\n margin-right: 16px;\\n margin-bottom: 0;\\n margin-left: 16px;\\n}\\n.vgt-table-styling .vgt-input {\\n height: 23px;\\n line-height: 23px;\\n font-size: 0.9em;\\n width: 100%;\\n background-color: #fff;\\n background-image: none;\\n border: 1px solid #ccc;\\n border-radius: 3px;\\n padding: 0 10px;\\n margin: 0;\\n}\\n.vgt-table-styling .vgt-select {\\n height: 23px;\\n line-height: 23px;\\n font-size: 0.9em;\\n width: 100%;\\n background-color: #fff;\\n background-image: none;\\n border: 1px solid #ccc;\\n border-radius: 3px;\\n padding: 0 10px;\\n}\\n.vgt-table-styling .schedule tr.today {\\n background-color: #f5f1e4;\\n}\\n.vgt-table-styling .schedule tr.soon {\\n background-color: #ddffdd;\\n}\\n.vgt-table-styling .schedule tr.missed {\\n background-color: #ffdddd;\\n}\\n.vgt-table-styling .schedule tr.later {\\n background-color: #bedeed;\\n}\\n.vgt-table-styling .schedule tr,\\n.vgt-table-styling .schedule tr a {\\n color: black;\\n}\\n.tooltip-wrapper {\\n float: left;\\n min-width: 340px;\\n}\\n.invalid {\\n background-color: #ff5b5b;\\n}\\n.tooltip {\\n display: block !important;\\n z-index: 10000;\\n}\\n.tooltip .tooltip-inner {\\n background: #ffef93;\\n color: #555;\\n border-radius: 16px;\\n padding: 5px 10px 4px;\\n border: 1px solid #f1d031;\\n -webkit-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);\\n -moz-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);\\n box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);\\n}\\n.tooltip .tooltip-arrow {\\n width: 0;\\n height: 0;\\n position: absolute;\\n margin: 5px;\\n border: 1px solid #ffef93;\\n z-index: 1;\\n}\\n.tooltip[x-placement^=top] {\\n margin-bottom: 5px;\\n}\\n.tooltip[x-placement^=top] .tooltip-arrow {\\n border-width: 5px 5px 0 5px;\\n border-left-color: transparent !important;\\n border-right-color: transparent !important;\\n border-bottom-color: transparent !important;\\n bottom: -5px;\\n left: calc(50% - 4px);\\n margin-top: 0;\\n margin-bottom: 0;\\n}\\n.tooltip[x-placement^=bottom] {\\n margin-top: 5px;\\n}\\n.tooltip[x-placement^=bottom] .tooltip-arrow {\\n border-width: 0 5px 5px 5px;\\n border-left-color: transparent !important;\\n border-right-color: transparent !important;\\n border-top-color: transparent !important;\\n top: -5px;\\n left: calc(50% - 4px);\\n margin-top: 0;\\n margin-bottom: 0;\\n}\\n.tooltip[x-placement^=right] {\\n margin-left: 5px;\\n}\\n.tooltip[x-placement^=right] .tooltip-arrow {\\n border-width: 5px 5px 5px 0;\\n border-left-color: transparent !important;\\n border-top-color: transparent !important;\\n border-bottom-color: transparent !important;\\n left: -4px;\\n top: calc(50% - 5px);\\n margin-left: 0;\\n margin-right: 0;\\n}\\n.tooltip[x-placement^=left] {\\n margin-right: 5px;\\n}\\n.tooltip[x-placement^=left] .tooltip-arrow {\\n border-width: 5px 0 5px 5px;\\n border-top-color: transparent !important;\\n border-right-color: transparent !important;\\n border-bottom-color: transparent !important;\\n right: -4px;\\n top: calc(50% - 5px);\\n margin-left: 0;\\n margin-right: 0;\\n}\\n.tooltip.popover .popover-inner {\\n background: #ffef93;\\n color: #555;\\n padding: 24px;\\n border-radius: 5px;\\n box-shadow: 0 5px 30px rgba(0, 0, 0, 0.1);\\n}\\n.tooltip.popover .popover-arrow {\\n border-color: #ffef93;\\n}\\n.tooltip[aria-hidden=true] {\\n visibility: hidden;\\n opacity: 0;\\n transition: opacity 0.15s, visibility 0.15s;\\n}\\n.tooltip[aria-hidden=false] {\\n visibility: visible;\\n opacity: 1;\\n transition: opacity 0.15s;\\n}\\n\\n/** Style the modal. This should be saved somewhere, where we create one modal template with slots, and style that. */\\n.modal-container {\\n border: 1px solid #111111;\\n box-shadow: 0 0 12px 0 rgba(0, 0, 0, 0.175);\\n border-radius: 0;\\n}\\n.modal-header {\\n padding: 9px 15px;\\n border-bottom: none;\\n border-radius: 0;\\n background-color: #373737;\\n}\\n.modal-content {\\n background: #222222;\\n border-radius: 0;\\n border: 1px solid rgba(0, 0, 0, 0.2);\\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\\n color: white;\\n}\\n.modal-body {\\n background: #222222;\\n overflow-y: auto;\\n}\\n.modal-footer {\\n border-top: none;\\n text-align: center;\\n}\\n.vue-tags-input {\\n width: 273px;\\n border: 1px solid #cccccc;\\n border-radius: 3px;\\n}\\n.vue-tags-input .ti-tag {\\n display: inline-flex;\\n width: 100%;\\n}\\n.vue-tags-input .ti-input {\\n border: none;\\n}\\n.vue-tags-input .country-left {\\n margin-right: 5px;\\n}\\nsvg.back-arrow {\\n color: #337ab7;\\n width: 20px;\\n height: 20px;\\n float: left;\\n margin-right: 1em;\\n cursor: pointer;\\n}\\nsvg.back-arrow:hover,\\nsvg.back-arrow:focus {\\n color: #23527c;\\n transform: translateX(-2px);\\n transition: transform ease-in-out 0.2s;\\n}\\n\\n/* Global style definitions should go here. */\\n#app {\\n padding-top: 4rem;\\n}\\n@media (max-width: 768px) {\\n#app {\\n padding-top: 3.8rem;\\n}\\n}\", \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://slim/./src/components/app.vue?./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/getUrl.js */ \"./node_modules/css-loader/dist/runtime/getUrl.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__);\n// Imports\n\n\n\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __webpack_require__(/*! data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7 */ \"data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7\"), __webpack_require__.b);\nvar ___CSS_LOADER_URL_IMPORT_1___ = new URL(/* asset import */ __webpack_require__(/*! data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7 */ \"data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7\"), __webpack_require__.b);\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_1___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/** Use this as table styling for all table layouts */\\n.vgt-table-styling {\\n /* Schedule list layout */\\n}\\n.vgt-table-styling .vgt-table {\\n width: 100%;\\n margin-right: auto;\\n margin-left: auto;\\n text-align: left;\\n border-spacing: 0;\\n border-collapse: initial;\\n /* remove extra border from left edge */\\n /* optional disabled input styling */\\n /* When using collored rows (using the episode status name, Snatched, Downloaded, Failed, etc.)\\n * we'd like to have the text always black.\\n */\\n}\\n.vgt-table-styling .vgt-table th,\\n.vgt-table-styling .vgt-table td {\\n padding: 4px;\\n vertical-align: middle;\\n}\\n.vgt-table-styling .vgt-table th:first-child,\\n.vgt-table-styling .vgt-table td:first-child {\\n border-left: none;\\n}\\n.vgt-table-styling .vgt-table th {\\n text-align: center;\\n border-collapse: collapse;\\n font-weight: normal;\\n position: relative;\\n}\\n.vgt-table-styling .vgt-table span.break-word {\\n word-wrap: break-word;\\n}\\n.vgt-table-styling .vgt-table thead th.sorting.sorting-asc {\\n background-position-x: right;\\n background-position-y: bottom;\\n}\\n.vgt-table-styling .vgt-table thead th.sorting {\\n background-repeat: no-repeat;\\n}\\n.vgt-table-styling .vgt-table thead th.sorting.sorting-desc {\\n background-color: #555555;\\n background-image: url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \");\\n}\\n.vgt-table-styling .vgt-table thead th.sorting.sorting-asc {\\n background-color: #555555;\\n background-image: url(\" + ___CSS_LOADER_URL_REPLACEMENT_1___ + \");\\n background-position-x: right;\\n background-position-y: bottom;\\n}\\n.vgt-table-styling .vgt-table th.sortable button {\\n -webkit-appearance: none;\\n -moz-appearance: none;\\n appearance: none;\\n background: transparent;\\n border: none;\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n}\\n.vgt-table-styling .vgt-table thead th {\\n padding: 4px;\\n cursor: default;\\n}\\n.vgt-table-styling .vgt-table input.tablesorter-filter {\\n width: 98%;\\n height: auto;\\n -webkit-box-sizing: border-box;\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n}\\n.vgt-table-styling .vgt-table tr.tablesorter-filter-row,\\n.vgt-table-styling .vgt-table tr.tablesorter-filter-row td {\\n text-align: center;\\n}\\n.vgt-table-styling .vgt-table input.tablesorter-filter-row .disabled {\\n display: none;\\n}\\n.vgt-table-styling .vgt-table tfoot tr {\\n text-align: center;\\n border-collapse: collapse;\\n}\\n.vgt-table-styling .vgt-table tfoot a {\\n text-decoration: none;\\n}\\n.vgt-table-styling .vgt-table th.vgt-row-header {\\n text-align: left;\\n}\\n.vgt-table-styling .vgt-table .season-header {\\n display: inline;\\n margin-left: 5px;\\n}\\n.vgt-table-styling .vgt-table tr.spacer {\\n height: 25px;\\n}\\n.vgt-table-styling .vgt-table tr:hover {\\n opacity: 0.9;\\n}\\n.vgt-table-styling .vgt-table tr.status td > span {\\n color: black;\\n}\\n.vgt-table-styling .vgt-table span.episode-title > a {\\n text-decoration: none;\\n}\\n.vgt-table-styling .vgt-table span.episode-title > a:hover, .vgt-table-styling .vgt-table span.episode-title > a:focus {\\n text-decoration: underline;\\n}\\n.vgt-table-styling .vgt-table .skipped {\\n background-color: #bedeed;\\n}\\n.vgt-table-styling .vgt-table .snatched {\\n background-color: #ebc1ea;\\n}\\n.vgt-table-styling .vgt-table .downloaded {\\n background-color: #ffda8a;\\n}\\n.vgt-table-styling .vgt-table .failed {\\n background-color: #ff9999;\\n}\\n.vgt-table-styling .vgt-table .subtitled {\\n background-color: #bedeed;\\n}\\n.vgt-table-styling .vgt-table .archived {\\n background-color: #f5f1e4;\\n}\\n.vgt-table-styling .tablesorter-header-inner {\\n padding: 0 2px;\\n text-align: center;\\n}\\n.vgt-table-styling .vgt-dropdown > .button-group {\\n position: relative;\\n}\\n.vgt-table-styling .dropdown-toggle {\\n position: absolute;\\n z-index: 1;\\n top: 0.1em;\\n right: 0.1em;\\n width: 1em;\\n transition: width 0.2s ease-in-out;\\n}\\n.vgt-table-styling .dropdown-toggle:hover, .vgt-table-styling .dropdown-toggle:active {\\n width: 2em;\\n}\\n.vgt-table-styling .vgt-dropdown-menu {\\n position: absolute;\\n z-index: 1;\\n float: left;\\n min-width: 160px;\\n padding: 5px 0;\\n margin: 2px 0 0;\\n font-size: 14px;\\n text-align: left;\\n list-style: none;\\n background-clip: padding-box;\\n border-radius: 3px;\\n right: 0;\\n top: 2em;\\n}\\n.vgt-table-styling .vgt-dropdown-menu > li > span {\\n display: block;\\n padding: 3px 5px;\\n clear: both;\\n font-weight: 400;\\n line-height: 1.42857143;\\n white-space: nowrap;\\n}\\n.vgt-table-styling .align-center {\\n display: flex;\\n justify-content: center;\\n}\\n.vgt-table-styling .span-center > span {\\n display: flex;\\n justify-content: center;\\n}\\n.vgt-table-styling .indexer-image :not(:last-child) {\\n margin-right: 5px;\\n}\\n.vgt-table-styling .button-row {\\n width: 100%;\\n display: inline-block;\\n}\\n.vgt-table-styling .global-ignored td.release span {\\n color: red;\\n}\\n.vgt-table-styling .show-ignored td.release span {\\n color: red;\\n font-style: italic;\\n}\\n.vgt-table-styling .global-required td.release span {\\n color: green;\\n}\\n.vgt-table-styling .show-required td.release span {\\n color: green;\\n font-style: italic;\\n}\\n.vgt-table-styling .global-undesired td.release span {\\n color: orange;\\n}\\n.vgt-table-styling td.col-footer {\\n text-align: left !important;\\n}\\n.vgt-table-styling .vgt-wrap__footer {\\n color: white;\\n padding: 1em;\\n background-color: #333333;\\n margin-bottom: 1em;\\n display: flex;\\n justify-content: space-between;\\n}\\n.vgt-table-styling .footer__row-count,\\n.vgt-table-styling .footer__navigation__page-info {\\n display: inline;\\n}\\n.vgt-table-styling .footer__row-count__label {\\n margin-right: 1em;\\n}\\n.vgt-table-styling .vgt-wrap__footer .footer__navigation {\\n font-size: 14px;\\n}\\n.vgt-table-styling .vgt-pull-right {\\n float: right !important;\\n}\\n.vgt-table-styling .footer__navigation__page-btn {\\n display: inline-block;\\n padding: 4px 10px;\\n margin-bottom: 0;\\n font-size: 12px;\\n line-height: 16px;\\n vertical-align: middle;\\n border-radius: 1px;\\n}\\n.vgt-table-styling .footer__navigation__page-btn:hover {\\n text-decoration: none;\\n background-position: 0 -150px;\\n transition: background-position 0s linear;\\n background-image: none;\\n}\\n.vgt-table-styling .footer__navigation__page-btn.disabled {\\n display: none;\\n}\\n.vgt-table-styling .vgt-wrap__footer .footer__navigation__page-btn .chevron {\\n width: 24px;\\n height: 24px;\\n border-radius: 15%;\\n position: relative;\\n margin: 0 8px;\\n}\\n.vgt-table-styling .vgt-wrap__footer .footer__navigation__info,\\n.vgt-table-styling .vgt-wrap__footer .footer__navigation__page-info {\\n display: inline-flex;\\n color: #909399;\\n margin: 0 16px;\\n margin-top: 0;\\n margin-right: 16px;\\n margin-bottom: 0;\\n margin-left: 16px;\\n}\\n.vgt-table-styling .vgt-input {\\n height: 23px;\\n line-height: 23px;\\n font-size: 0.9em;\\n width: 100%;\\n background-color: #fff;\\n background-image: none;\\n border: 1px solid #ccc;\\n border-radius: 3px;\\n padding: 0 10px;\\n margin: 0;\\n}\\n.vgt-table-styling .vgt-select {\\n height: 23px;\\n line-height: 23px;\\n font-size: 0.9em;\\n width: 100%;\\n background-color: #fff;\\n background-image: none;\\n border: 1px solid #ccc;\\n border-radius: 3px;\\n padding: 0 10px;\\n}\\n.vgt-table-styling .schedule tr.today {\\n background-color: #f5f1e4;\\n}\\n.vgt-table-styling .schedule tr.soon {\\n background-color: #ddffdd;\\n}\\n.vgt-table-styling .schedule tr.missed {\\n background-color: #ffdddd;\\n}\\n.vgt-table-styling .schedule tr.later {\\n background-color: #bedeed;\\n}\\n.vgt-table-styling .schedule tr,\\n.vgt-table-styling .schedule tr a {\\n color: black;\\n}\\n.tooltip-wrapper {\\n float: left;\\n min-width: 340px;\\n}\\n.invalid {\\n background-color: #ff5b5b;\\n}\\n.tooltip {\\n display: block !important;\\n z-index: 10000;\\n}\\n.tooltip .tooltip-inner {\\n background: #ffef93;\\n color: #555;\\n border-radius: 16px;\\n padding: 5px 10px 4px;\\n border: 1px solid #f1d031;\\n -webkit-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);\\n -moz-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);\\n box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);\\n}\\n.tooltip .tooltip-arrow {\\n width: 0;\\n height: 0;\\n position: absolute;\\n margin: 5px;\\n border: 1px solid #ffef93;\\n z-index: 1;\\n}\\n.tooltip[x-placement^=top] {\\n margin-bottom: 5px;\\n}\\n.tooltip[x-placement^=top] .tooltip-arrow {\\n border-width: 5px 5px 0 5px;\\n border-left-color: transparent !important;\\n border-right-color: transparent !important;\\n border-bottom-color: transparent !important;\\n bottom: -5px;\\n left: calc(50% - 4px);\\n margin-top: 0;\\n margin-bottom: 0;\\n}\\n.tooltip[x-placement^=bottom] {\\n margin-top: 5px;\\n}\\n.tooltip[x-placement^=bottom] .tooltip-arrow {\\n border-width: 0 5px 5px 5px;\\n border-left-color: transparent !important;\\n border-right-color: transparent !important;\\n border-top-color: transparent !important;\\n top: -5px;\\n left: calc(50% - 4px);\\n margin-top: 0;\\n margin-bottom: 0;\\n}\\n.tooltip[x-placement^=right] {\\n margin-left: 5px;\\n}\\n.tooltip[x-placement^=right] .tooltip-arrow {\\n border-width: 5px 5px 5px 0;\\n border-left-color: transparent !important;\\n border-top-color: transparent !important;\\n border-bottom-color: transparent !important;\\n left: -4px;\\n top: calc(50% - 5px);\\n margin-left: 0;\\n margin-right: 0;\\n}\\n.tooltip[x-placement^=left] {\\n margin-right: 5px;\\n}\\n.tooltip[x-placement^=left] .tooltip-arrow {\\n border-width: 5px 0 5px 5px;\\n border-top-color: transparent !important;\\n border-right-color: transparent !important;\\n border-bottom-color: transparent !important;\\n right: -4px;\\n top: calc(50% - 5px);\\n margin-left: 0;\\n margin-right: 0;\\n}\\n.tooltip.popover .popover-inner {\\n background: #ffef93;\\n color: #555;\\n padding: 24px;\\n border-radius: 5px;\\n box-shadow: 0 5px 30px rgba(0, 0, 0, 0.1);\\n}\\n.tooltip.popover .popover-arrow {\\n border-color: #ffef93;\\n}\\n.tooltip[aria-hidden=true] {\\n visibility: hidden;\\n opacity: 0;\\n transition: opacity 0.15s, visibility 0.15s;\\n}\\n.tooltip[aria-hidden=false] {\\n visibility: visible;\\n opacity: 1;\\n transition: opacity 0.15s;\\n}\\n\\n/** Style the modal. This should be saved somewhere, where we create one modal template with slots, and style that. */\\n.modal-container {\\n border: 1px solid #111111;\\n box-shadow: 0 0 12px 0 rgba(0, 0, 0, 0.175);\\n border-radius: 0;\\n}\\n.modal-header {\\n padding: 9px 15px;\\n border-bottom: none;\\n border-radius: 0;\\n background-color: #373737;\\n}\\n.modal-content {\\n background: #222222;\\n border-radius: 0;\\n border: 1px solid rgba(0, 0, 0, 0.2);\\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\\n color: white;\\n}\\n.modal-body {\\n background: #222222;\\n overflow-y: auto;\\n}\\n.modal-footer {\\n border-top: none;\\n text-align: center;\\n}\\n.vue-tags-input {\\n width: 273px;\\n border: 1px solid #cccccc;\\n border-radius: 3px;\\n}\\n.vue-tags-input .ti-tag {\\n display: inline-flex;\\n width: 100%;\\n}\\n.vue-tags-input .ti-input {\\n border: none;\\n}\\n.vue-tags-input .country-left {\\n margin-right: 5px;\\n}\\nsvg.back-arrow {\\n color: #337ab7;\\n width: 20px;\\n height: 20px;\\n float: left;\\n margin-right: 1em;\\n cursor: pointer;\\n}\\nsvg.back-arrow:hover,\\nsvg.back-arrow:focus {\\n color: #23527c;\\n transform: translateX(-2px);\\n transition: transform ease-in-out 0.2s;\\n}\\n.spin-hover-90:hover {\\n animation: spin-90 0.3s linear;\\n}\\n@keyframes spin-90 {\\nfrom {\\n transform: rotate(0deg);\\n}\\nto {\\n transform: rotate(90deg);\\n}\\n}\\n/* Global style definitions should go here. */\\n#app {\\n padding-top: 4rem;\\n}\\n@media (max-width: 768px) {\\n#app {\\n padding-top: 3.8rem;\\n}\\n}\", \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://slim/./src/components/app.vue?./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options"); /***/ }), @@ -1971,7 +1971,7 @@ eval("// Imports\nvar ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ = __webpack_requi \**********************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -eval("// Imports\nvar ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.floating-badge {\\n position: absolute;\\n top: -5px;\\n right: -8px;\\n padding: 0 4px;\\n background-color: #777;\\n border: 2px solid #959595;\\n border-radius: 100px;\\n font-size: 12px;\\n font-weight: bold;\\n text-decoration: none;\\n color: white;\\n}\\n.navbar {\\n margin-bottom: 0;\\n}\\n@media (max-width: 767px) {\\n.navbar-fixed-top .navbar-collapse {\\n max-height: 100%;\\n}\\n.navbar-mobile > li {\\n text-align: center;\\n}\\n.navbar-mobile::before {\\n position: absolute;\\n}\\n.navbar-mobile {\\n display: grid;\\n grid-template-columns: 1fr 1fr 1fr;\\n}\\n.navbar-mobile #NAVsystem > ul {\\n transform: translateX(-6rem);\\n}\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n\n\n//# sourceURL=webpack://slim/./src/components/app-header.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3%5B0%5D.rules%5B0%5D.use%5B1%5D!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options"); +eval("// Imports\nvar ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.floating-badge {\\n position: absolute;\\n top: -5px;\\n right: -8px;\\n padding: 0 4px;\\n background-color: #777;\\n border: 2px solid #959595;\\n border-radius: 100px;\\n font-size: 12px;\\n font-weight: bold;\\n text-decoration: none;\\n color: white;\\n}\\n.navbar {\\n margin-bottom: 0;\\n}\\n@media (max-width: 767px) {\\n.navbar-fixed-top .navbar-collapse {\\n max-height: 100%;\\n}\\n.navbar-mobile > li {\\n text-align: center;\\n}\\n.navbar-mobile::before {\\n position: absolute;\\n}\\n.navbar-mobile {\\n display: grid;\\n grid-template-columns: 1fr 1fr 1fr;\\n}\\n.navbar-mobile #NAVsystem > ul {\\n transform: translateX(-6rem);\\n}\\n}\\n.disconnected {\\n position: absolute;\\n right: 1rem;\\n bottom: 0.5rem;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n\n\n//# sourceURL=webpack://slim/./src/components/app-header.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3%5B0%5D.rules%5B0%5D.use%5B1%5D!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options"); /***/ }), @@ -7341,7 +7341,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": () => (/* binding */ render),\n/* harmony export */ \"staticRenderFns\": () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"nav\",\n {\n staticClass: \"navbar navbar-default navbar-fixed-top hidden-print\",\n attrs: { role: \"navigation\" }\n },\n [\n _c(\"div\", { staticClass: \"container-fluid\" }, [\n _c(\n \"div\",\n { staticClass: \"navbar-header\" },\n [\n _c(\n \"button\",\n {\n staticClass: \"navbar-toggle collapsed\",\n attrs: {\n type: \"button\",\n \"data-toggle\": \"collapse\",\n \"data-target\": \"#main_nav\"\n }\n },\n [\n _vm.toolsBadgeCount > 0\n ? _c(\n \"span\",\n { class: \"floating-badge\" + _vm.toolsBadgeClass },\n [_vm._v(_vm._s(_vm.toolsBadgeCount))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"sr-only\" }, [\n _vm._v(\"Toggle navigation\")\n ]),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"icon-bar\" }),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"icon-bar\" }),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"icon-bar\" })\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"app-link\",\n {\n staticClass: \"navbar-brand\",\n attrs: { href: \"home/\", title: \"Medusa\" }\n },\n [\n _c(\"img\", {\n staticClass: \"img-responsive pull-left\",\n staticStyle: { height: \"50px\" },\n attrs: { alt: \"Medusa\", src: \"images/medusa.png\" }\n })\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.isAuthenticated\n ? _c(\n \"div\",\n {\n staticClass: \"collapse navbar-collapse\",\n attrs: { id: \"main_nav\" }\n },\n [\n _c(\n \"ul\",\n { staticClass: \"nav navbar-nav navbar-right navbar-mobile\" },\n [\n _c(\n \"li\",\n {\n staticClass: \"navbar-split dropdown\",\n class: { active: _vm.topMenu === \"home\" },\n attrs: { id: \"NAVhome\" }\n },\n [\n _c(\n \"app-link\",\n {\n staticClass: \"dropdown-toggle\",\n attrs: {\n \"aria-haspopup\": \"true\",\n \"data-toggle\": \"dropdown\",\n \"data-hover\": \"dropdown\"\n }\n },\n [\n _c(\"span\", [_vm._v(\"Shows\")]),\n _vm._v(\" \"),\n _c(\"b\", { staticClass: \"caret\" })\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"ul\",\n { staticClass: \"dropdown-menu\" },\n [\n _c(\n \"li\",\n [\n _c(\"app-link\", { attrs: { href: \"home/\" } }, [\n _c(\"i\", { staticClass: \"menu-icon-home\" }),\n _vm._v(\" Show List\")\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"addShows/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-addshow\"\n }),\n _vm._v(\" Add Shows\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"addRecommended/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-addshow\"\n }),\n _vm._v(\" Add Recommended Shows\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"home/postprocess/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-postprocess\"\n }),\n _vm._v(\" Manual Post-Processing\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.recentShows.length > 0\n ? _c(\"li\", {\n staticClass: \"divider\",\n attrs: { role: \"separator\" }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm._l(_vm.recentShows, function(recentShow) {\n return _c(\n \"li\",\n { key: recentShow.link },\n [\n _c(\n \"app-link\",\n { attrs: { href: recentShow.link } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-addshow\"\n }),\n _vm._v(\n \" \" +\n _vm._s(recentShow.name) +\n \"\\n \"\n )\n ]\n )\n ],\n 1\n )\n })\n ],\n 2\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticStyle: { clear: \"both\" } })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n {\n staticClass: \"navbar-split\",\n class: { active: _vm.topMenu === \"schedule\" },\n attrs: { id: \"NAVschedule\" }\n },\n [\n _c(\"app-link\", { attrs: { href: \"schedule/\" } }, [\n _vm._v(\"Schedule\")\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n {\n staticClass: \"navbar-split\",\n class: { active: _vm.topMenu === \"history\" },\n attrs: { id: \"NAVhistory\" }\n },\n [\n _c(\"app-link\", { attrs: { href: \"history/\" } }, [\n _vm._v(\"History\")\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n {\n staticClass: \"navbar-split dropdown\",\n class: { active: _vm.topMenu === \"manage\" },\n attrs: { id: \"NAVmanage\" }\n },\n [\n _c(\n \"app-link\",\n {\n staticClass: \"dropdown-toggle\",\n attrs: {\n \"aria-haspopup\": \"true\",\n \"data-toggle\": \"dropdown\",\n \"data-hover\": \"dropdown\"\n }\n },\n [\n _c(\"span\", [_vm._v(\"Manage\")]),\n _vm._v(\" \"),\n _c(\"b\", { staticClass: \"caret\" })\n ]\n ),\n _vm._v(\" \"),\n _c(\"ul\", { staticClass: \"dropdown-menu\" }, [\n _c(\n \"li\",\n [\n _c(\"app-link\", { attrs: { href: \"manage/\" } }, [\n _c(\"i\", { staticClass: \"menu-icon-manage\" }),\n _vm._v(\" Mass Update\")\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"manage/changeIndexer/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-manage-change\"\n }),\n _vm._v(\" Change Indexer\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"manage/backlogOverview/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-backlog-view\"\n }),\n _vm._v(\" Backlog Overview\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"manage/manageSearches/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-manage-searches\"\n }),\n _vm._v(\" Manage Searches\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"manage/episodeStatuses/\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-manage2\" }),\n _vm._v(\" Episode Status Management\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.linkVisible.plex\n ? _c(\"li\", [\n _c(\n \"a\",\n {\n attrs: { href: \"home/updatePLEX/\" },\n on: {\n click: function($event) {\n $event.preventDefault()\n return _vm.updatePlex.apply(\n null,\n arguments\n )\n }\n }\n },\n [\n _c(\"i\", { staticClass: \"menu-icon-plex\" }),\n _vm._v(\" Update PLEX\")\n ]\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.linkVisible.kodi\n ? _c(\"li\", [\n _c(\n \"a\",\n {\n attrs: { href: \"home/updateKODI/\" },\n on: {\n click: function($event) {\n $event.preventDefault()\n return _vm.updateKodi.apply(\n null,\n arguments\n )\n }\n }\n },\n [\n _c(\"i\", { staticClass: \"menu-icon-kodi\" }),\n _vm._v(\" Update KODI\")\n ]\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.linkVisible.emby\n ? _c(\"li\", [\n _c(\n \"a\",\n {\n attrs: { href: \"home/updateEMBY/\" },\n on: {\n click: function($event) {\n $event.preventDefault()\n return _vm.updateEmby.apply(\n null,\n arguments\n )\n }\n }\n },\n [\n _c(\"i\", { staticClass: \"menu-icon-emby\" }),\n _vm._v(\" Update Emby\")\n ]\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.linkVisible.manageTorrents\n ? _c(\n \"li\",\n [\n _c(\n \"app-link\",\n {\n attrs: {\n href: \"manage/manageTorrents/\",\n target: \"_blank\"\n }\n },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-bittorrent\"\n }),\n _vm._v(\" Manage Torrents\")\n ]\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.linkVisible.failedDownloads\n ? _c(\n \"li\",\n [\n _c(\n \"app-link\",\n {\n attrs: { href: \"manage/failedDownloads/\" }\n },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-failed-download\"\n }),\n _vm._v(\" Failed Downloads\")\n ]\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.linkVisible.subtitleMissed\n ? _c(\n \"li\",\n [\n _c(\n \"app-link\",\n {\n attrs: { href: \"manage/subtitleMissed/\" }\n },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-backlog\"\n }),\n _vm._v(\" Missed Subtitle Management\")\n ]\n )\n ],\n 1\n )\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticStyle: { clear: \"both\" } })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n {\n staticClass: \"navbar-split dropdown\",\n class: { active: _vm.topMenu === \"config\" },\n attrs: { id: \"NAVconfig\" }\n },\n [\n _c(\n \"app-link\",\n {\n staticClass: \"dropdown-toggle\",\n attrs: {\n \"aria-haspopup\": \"true\",\n \"data-toggle\": \"dropdown\",\n \"data-hover\": \"dropdown\"\n }\n },\n [\n _c(\"span\", { staticClass: \"visible-xs-inline\" }, [\n _vm._v(\"Config\")\n ]),\n _c(\"img\", {\n staticClass: \"navbaricon hidden-xs\",\n attrs: { src: \"images/menu/system18.png\" }\n }),\n _vm._v(\" \"),\n _c(\"b\", { staticClass: \"caret\" })\n ]\n ),\n _vm._v(\" \"),\n _c(\"ul\", { staticClass: \"dropdown-menu\" }, [\n _c(\n \"li\",\n [\n _c(\"app-link\", { attrs: { href: \"config/\" } }, [\n _c(\"i\", { staticClass: \"menu-icon-help\" }),\n _vm._v(\" Help & Info\")\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/general/\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-config\" }),\n _vm._v(\" General\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/backuprestore/\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-backup\" }),\n _vm._v(\" Backup & Restore\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/search/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-manage-searches\"\n }),\n _vm._v(\" Search Settings\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/providers/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-provider\"\n }),\n _vm._v(\" Search Providers\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/subtitles/\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-backlog\" }),\n _vm._v(\" Subtitles Settings\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/postProcessing/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-postprocess\"\n }),\n _vm._v(\" Post-Processing\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/notifications/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-notification\"\n }),\n _vm._v(\" Notifications\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/anime/\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-anime\" }),\n _vm._v(\" Anime\")\n ]\n )\n ],\n 1\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticStyle: { clear: \"both\" } })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n {\n staticClass: \"navbar-split dropdown\",\n class: { active: _vm.topMenu === \"system\" },\n attrs: { id: \"NAVsystem\" }\n },\n [\n _c(\n \"app-link\",\n {\n staticClass: \"padding-right-15 dropdown-toggle\",\n attrs: {\n \"aria-haspopup\": \"true\",\n \"data-toggle\": \"dropdown\",\n \"data-hover\": \"dropdown\"\n }\n },\n [\n _c(\"span\", { staticClass: \"visible-xs-inline\" }, [\n _vm._v(\"Tools\")\n ]),\n _c(\"img\", {\n staticClass: \"navbaricon hidden-xs\",\n attrs: { src: \"images/menu/system18-2.png\" }\n }),\n _vm._v(\" \"),\n _vm.toolsBadgeCount > 0\n ? _c(\n \"span\",\n { class: \"badge\" + _vm.toolsBadgeClass },\n [_vm._v(_vm._s(_vm.toolsBadgeCount))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"b\", { staticClass: \"caret\" })\n ]\n ),\n _vm._v(\" \"),\n _c(\"ul\", { staticClass: \"dropdown-menu\" }, [\n _c(\n \"li\",\n [\n _c(\"app-link\", { attrs: { href: \"news/\" } }, [\n _c(\"i\", { staticClass: \"menu-icon-news\" }),\n _vm._v(\" News \"),\n _vm.system.news.unread > 0\n ? _c(\"span\", { staticClass: \"badge\" }, [\n _vm._v(_vm._s(_vm.system.news.unread))\n ])\n : _vm._e()\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\"app-link\", { attrs: { href: \"IRC/\" } }, [\n _c(\"i\", { staticClass: \"menu-icon-irc\" }),\n _vm._v(\" IRC\")\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\"app-link\", { attrs: { href: \"changes/\" } }, [\n _c(\"i\", { staticClass: \"menu-icon-changelog\" }),\n _vm._v(\" Changelog\")\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"li\", {\n staticClass: \"divider\",\n attrs: { role: \"separator\" }\n }),\n _vm._v(\" \"),\n _vm.config.logs.numErrors > 0\n ? _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"errorlogs/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-error\"\n }),\n _vm._v(\" View Errors \"),\n _c(\n \"span\",\n { staticClass: \"badge btn-danger\" },\n [\n _vm._v(\n _vm._s(_vm.config.logs.numErrors)\n )\n ]\n )\n ]\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.config.logs.numWarnings > 0\n ? _c(\n \"li\",\n [\n _c(\n \"app-link\",\n {\n attrs: {\n href:\n \"errorlogs/?level=\" + _vm.warningLevel\n }\n },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-viewlog-errors\"\n }),\n _vm._v(\" View Warnings \"),\n _c(\n \"span\",\n { staticClass: \"badge btn-warning\" },\n [\n _vm._v(\n _vm._s(_vm.config.logs.numWarnings)\n )\n ]\n )\n ]\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"errorlogs/viewlog/\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-viewlog\" }),\n _vm._v(\" View Log\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"li\", {\n staticClass: \"divider\",\n attrs: { role: \"separator\" }\n }),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n {\n attrs: { href: \"home/update\" },\n nativeOn: {\n click: function($event) {\n $event.preventDefault()\n return _vm.checkForupdates($event)\n }\n }\n },\n [\n _c(\"i\", { staticClass: \"menu-icon-update\" }),\n _vm._v(\" Check For Updates\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"home/restart\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-restart\" }),\n _vm._v(\" Restart\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n {\n attrs: { href: \"home/shutdown\" },\n on: {\n click: function($event) {\n $event.preventDefault()\n return _vm.$router.push({\n name: \"shutdown\"\n })\n }\n }\n },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-shutdown\"\n }),\n _vm._v(\" Shutdown\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.username\n ? _c(\n \"li\",\n [\n _c(\n \"app-link\",\n {\n attrs: { href: \"logout\" },\n nativeOn: {\n click: function($event) {\n $event.preventDefault()\n return _vm.confirmDialog(\n $event,\n \"logout\"\n )\n }\n }\n },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-shutdown\"\n }),\n _vm._v(\" Logout\")\n ]\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"li\", {\n staticClass: \"divider\",\n attrs: { role: \"separator\" }\n }),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"home/status/\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-info\" }),\n _vm._v(\" Server Status\")\n ]\n )\n ],\n 1\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticStyle: { clear: \"both\" } })\n ],\n 1\n )\n ]\n )\n ]\n )\n : _vm._e()\n ])\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack://slim/./src/components/app-header.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": () => (/* binding */ render),\n/* harmony export */ \"staticRenderFns\": () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"nav\",\n {\n staticClass: \"navbar navbar-default navbar-fixed-top hidden-print\",\n attrs: { role: \"navigation\" }\n },\n [\n _c(\"div\", { staticClass: \"container-fluid\" }, [\n _c(\n \"div\",\n { staticClass: \"navbar-header\" },\n [\n _c(\n \"button\",\n {\n staticClass: \"navbar-toggle collapsed\",\n attrs: {\n type: \"button\",\n \"data-toggle\": \"collapse\",\n \"data-target\": \"#main_nav\"\n }\n },\n [\n _vm.toolsBadgeCount > 0\n ? _c(\n \"span\",\n { class: \"floating-badge\" + _vm.toolsBadgeClass },\n [_vm._v(_vm._s(_vm.toolsBadgeCount))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"sr-only\" }, [\n _vm._v(\"Toggle navigation\")\n ]),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"icon-bar\" }),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"icon-bar\" }),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"icon-bar\" })\n ]\n ),\n _vm._v(\" \"),\n _vm.isConnected || !_vm.socketIsConnected\n ? _c(\n \"app-link\",\n {\n staticClass: \"navbar-brand\",\n staticStyle: { position: \"relative\" },\n attrs: { title: \"Medusa\" }\n },\n [\n _c(\"img\", {\n staticClass: \"img-responsive pull-left\",\n staticStyle: { height: \"50px\" },\n attrs: { alt: \"Medusa\", src: \"images/medusa.png\" },\n on: { click: _vm.reloadPage }\n }),\n _vm._v(\" \"),\n _c(\"img\", {\n staticClass: \"disconnected spin-hover-90\",\n attrs: { alt: \"disconnected\", src: \"images/no16.png\" }\n })\n ]\n )\n : _c(\n \"app-link\",\n {\n staticClass: \"navbar-brand\",\n attrs: { href: \"home/\", title: \"Medusa\" }\n },\n [\n _c(\"img\", {\n staticClass: \"img-responsive pull-left\",\n staticStyle: { height: \"50px\" },\n attrs: { alt: \"Medusa\", src: \"images/medusa.png\" }\n })\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.isAuthenticated\n ? _c(\n \"div\",\n {\n staticClass: \"collapse navbar-collapse\",\n attrs: { id: \"main_nav\" }\n },\n [\n _c(\n \"ul\",\n { staticClass: \"nav navbar-nav navbar-right navbar-mobile\" },\n [\n _c(\n \"li\",\n {\n staticClass: \"navbar-split dropdown\",\n class: { active: _vm.topMenu === \"home\" },\n attrs: { id: \"NAVhome\" }\n },\n [\n _c(\n \"app-link\",\n {\n staticClass: \"dropdown-toggle\",\n attrs: {\n \"aria-haspopup\": \"true\",\n \"data-toggle\": \"dropdown\",\n \"data-hover\": \"dropdown\"\n }\n },\n [\n _c(\"span\", [_vm._v(\"Shows\")]),\n _vm._v(\" \"),\n _c(\"b\", { staticClass: \"caret\" })\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"ul\",\n { staticClass: \"dropdown-menu\" },\n [\n _c(\n \"li\",\n [\n _c(\"app-link\", { attrs: { href: \"home/\" } }, [\n _c(\"i\", { staticClass: \"menu-icon-home\" }),\n _vm._v(\" Show List\")\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"addShows/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-addshow\"\n }),\n _vm._v(\" Add Shows\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"addRecommended/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-addshow\"\n }),\n _vm._v(\" Add Recommended Shows\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"home/postprocess/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-postprocess\"\n }),\n _vm._v(\" Manual Post-Processing\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.recentShows.length > 0\n ? _c(\"li\", {\n staticClass: \"divider\",\n attrs: { role: \"separator\" }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm._l(_vm.recentShows, function(recentShow) {\n return _c(\n \"li\",\n { key: recentShow.link },\n [\n _c(\n \"app-link\",\n { attrs: { href: recentShow.link } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-addshow\"\n }),\n _vm._v(\n \" \" +\n _vm._s(recentShow.name) +\n \"\\n \"\n )\n ]\n )\n ],\n 1\n )\n })\n ],\n 2\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticStyle: { clear: \"both\" } })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n {\n staticClass: \"navbar-split\",\n class: { active: _vm.topMenu === \"schedule\" },\n attrs: { id: \"NAVschedule\" }\n },\n [\n _c(\"app-link\", { attrs: { href: \"schedule/\" } }, [\n _vm._v(\"Schedule\")\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n {\n staticClass: \"navbar-split\",\n class: { active: _vm.topMenu === \"history\" },\n attrs: { id: \"NAVhistory\" }\n },\n [\n _c(\"app-link\", { attrs: { href: \"history/\" } }, [\n _vm._v(\"History\")\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n {\n staticClass: \"navbar-split dropdown\",\n class: { active: _vm.topMenu === \"manage\" },\n attrs: { id: \"NAVmanage\" }\n },\n [\n _c(\n \"app-link\",\n {\n staticClass: \"dropdown-toggle\",\n attrs: {\n \"aria-haspopup\": \"true\",\n \"data-toggle\": \"dropdown\",\n \"data-hover\": \"dropdown\"\n }\n },\n [\n _c(\"span\", [_vm._v(\"Manage\")]),\n _vm._v(\" \"),\n _c(\"b\", { staticClass: \"caret\" })\n ]\n ),\n _vm._v(\" \"),\n _c(\"ul\", { staticClass: \"dropdown-menu\" }, [\n _c(\n \"li\",\n [\n _c(\"app-link\", { attrs: { href: \"manage/\" } }, [\n _c(\"i\", { staticClass: \"menu-icon-manage\" }),\n _vm._v(\" Mass Update\")\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"manage/changeIndexer/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-manage-change\"\n }),\n _vm._v(\" Change Indexer\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"manage/backlogOverview/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-backlog-view\"\n }),\n _vm._v(\" Backlog Overview\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"manage/manageSearches/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-manage-searches\"\n }),\n _vm._v(\" Manage Searches\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"manage/episodeStatuses/\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-manage2\" }),\n _vm._v(\" Episode Status Management\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.linkVisible.plex\n ? _c(\"li\", [\n _c(\n \"a\",\n {\n attrs: { href: \"home/updatePLEX/\" },\n on: {\n click: function($event) {\n $event.preventDefault()\n return _vm.updatePlex.apply(\n null,\n arguments\n )\n }\n }\n },\n [\n _c(\"i\", { staticClass: \"menu-icon-plex\" }),\n _vm._v(\" Update PLEX\")\n ]\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.linkVisible.kodi\n ? _c(\"li\", [\n _c(\n \"a\",\n {\n attrs: { href: \"home/updateKODI/\" },\n on: {\n click: function($event) {\n $event.preventDefault()\n return _vm.updateKodi.apply(\n null,\n arguments\n )\n }\n }\n },\n [\n _c(\"i\", { staticClass: \"menu-icon-kodi\" }),\n _vm._v(\" Update KODI\")\n ]\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.linkVisible.emby\n ? _c(\"li\", [\n _c(\n \"a\",\n {\n attrs: { href: \"home/updateEMBY/\" },\n on: {\n click: function($event) {\n $event.preventDefault()\n return _vm.updateEmby.apply(\n null,\n arguments\n )\n }\n }\n },\n [\n _c(\"i\", { staticClass: \"menu-icon-emby\" }),\n _vm._v(\" Update Emby\")\n ]\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.linkVisible.manageTorrents\n ? _c(\n \"li\",\n [\n _c(\n \"app-link\",\n {\n attrs: {\n href: \"manage/manageTorrents/\",\n target: \"_blank\"\n }\n },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-bittorrent\"\n }),\n _vm._v(\" Manage Torrents\")\n ]\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.linkVisible.failedDownloads\n ? _c(\n \"li\",\n [\n _c(\n \"app-link\",\n {\n attrs: { href: \"manage/failedDownloads/\" }\n },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-failed-download\"\n }),\n _vm._v(\" Failed Downloads\")\n ]\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.linkVisible.subtitleMissed\n ? _c(\n \"li\",\n [\n _c(\n \"app-link\",\n {\n attrs: { href: \"manage/subtitleMissed/\" }\n },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-backlog\"\n }),\n _vm._v(\" Missed Subtitle Management\")\n ]\n )\n ],\n 1\n )\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticStyle: { clear: \"both\" } })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n {\n staticClass: \"navbar-split dropdown\",\n class: { active: _vm.topMenu === \"config\" },\n attrs: { id: \"NAVconfig\" }\n },\n [\n _c(\n \"app-link\",\n {\n staticClass: \"dropdown-toggle\",\n attrs: {\n \"aria-haspopup\": \"true\",\n \"data-toggle\": \"dropdown\",\n \"data-hover\": \"dropdown\"\n }\n },\n [\n _c(\"span\", { staticClass: \"visible-xs-inline\" }, [\n _vm._v(\"Config\")\n ]),\n _c(\"img\", {\n staticClass: \"navbaricon hidden-xs\",\n attrs: { src: \"images/menu/system18.png\" }\n }),\n _vm._v(\" \"),\n _c(\"b\", { staticClass: \"caret\" })\n ]\n ),\n _vm._v(\" \"),\n _c(\"ul\", { staticClass: \"dropdown-menu\" }, [\n _c(\n \"li\",\n [\n _c(\"app-link\", { attrs: { href: \"config/\" } }, [\n _c(\"i\", { staticClass: \"menu-icon-help\" }),\n _vm._v(\" Help & Info\")\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/general/\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-config\" }),\n _vm._v(\" General\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/backuprestore/\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-backup\" }),\n _vm._v(\" Backup & Restore\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/search/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-manage-searches\"\n }),\n _vm._v(\" Search Settings\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/providers/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-provider\"\n }),\n _vm._v(\" Search Providers\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/subtitles/\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-backlog\" }),\n _vm._v(\" Subtitles Settings\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/postProcessing/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-postprocess\"\n }),\n _vm._v(\" Post-Processing\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/notifications/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-notification\"\n }),\n _vm._v(\" Notifications\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/anime/\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-anime\" }),\n _vm._v(\" Anime\")\n ]\n )\n ],\n 1\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticStyle: { clear: \"both\" } })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n {\n staticClass: \"navbar-split dropdown\",\n class: { active: _vm.topMenu === \"system\" },\n attrs: { id: \"NAVsystem\" }\n },\n [\n _c(\n \"app-link\",\n {\n staticClass: \"padding-right-15 dropdown-toggle\",\n attrs: {\n \"aria-haspopup\": \"true\",\n \"data-toggle\": \"dropdown\",\n \"data-hover\": \"dropdown\"\n }\n },\n [\n _c(\"span\", { staticClass: \"visible-xs-inline\" }, [\n _vm._v(\"Tools\")\n ]),\n _c(\"img\", {\n staticClass: \"navbaricon hidden-xs\",\n attrs: { src: \"images/menu/system18-2.png\" }\n }),\n _vm._v(\" \"),\n _vm.toolsBadgeCount > 0\n ? _c(\n \"span\",\n { class: \"badge\" + _vm.toolsBadgeClass },\n [_vm._v(_vm._s(_vm.toolsBadgeCount))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"b\", { staticClass: \"caret\" })\n ]\n ),\n _vm._v(\" \"),\n _c(\"ul\", { staticClass: \"dropdown-menu\" }, [\n _c(\n \"li\",\n [\n _c(\"app-link\", { attrs: { href: \"news/\" } }, [\n _c(\"i\", { staticClass: \"menu-icon-news\" }),\n _vm._v(\" News \"),\n _vm.system.news.unread > 0\n ? _c(\"span\", { staticClass: \"badge\" }, [\n _vm._v(_vm._s(_vm.system.news.unread))\n ])\n : _vm._e()\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\"app-link\", { attrs: { href: \"IRC/\" } }, [\n _c(\"i\", { staticClass: \"menu-icon-irc\" }),\n _vm._v(\" IRC\")\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\"app-link\", { attrs: { href: \"changes/\" } }, [\n _c(\"i\", { staticClass: \"menu-icon-changelog\" }),\n _vm._v(\" Changelog\")\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"li\", {\n staticClass: \"divider\",\n attrs: { role: \"separator\" }\n }),\n _vm._v(\" \"),\n _vm.config.logs.numErrors > 0\n ? _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"errorlogs/\" } },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-error\"\n }),\n _vm._v(\" View Errors \"),\n _c(\n \"span\",\n { staticClass: \"badge btn-danger\" },\n [\n _vm._v(\n _vm._s(_vm.config.logs.numErrors)\n )\n ]\n )\n ]\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.config.logs.numWarnings > 0\n ? _c(\n \"li\",\n [\n _c(\n \"app-link\",\n {\n attrs: {\n href:\n \"errorlogs/?level=\" + _vm.warningLevel\n }\n },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-viewlog-errors\"\n }),\n _vm._v(\" View Warnings \"),\n _c(\n \"span\",\n { staticClass: \"badge btn-warning\" },\n [\n _vm._v(\n _vm._s(_vm.config.logs.numWarnings)\n )\n ]\n )\n ]\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"errorlogs/viewlog/\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-viewlog\" }),\n _vm._v(\" View Log\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"li\", {\n staticClass: \"divider\",\n attrs: { role: \"separator\" }\n }),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n {\n attrs: { href: \"home/update\" },\n nativeOn: {\n click: function($event) {\n $event.preventDefault()\n return _vm.checkForupdates($event)\n }\n }\n },\n [\n _c(\"i\", { staticClass: \"menu-icon-update\" }),\n _vm._v(\" Check For Updates\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"home/restart\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-restart\" }),\n _vm._v(\" Restart\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n {\n attrs: { href: \"home/shutdown\" },\n on: {\n click: function($event) {\n $event.preventDefault()\n return _vm.$router.push({\n name: \"shutdown\"\n })\n }\n }\n },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-shutdown\"\n }),\n _vm._v(\" Shutdown\")\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.username\n ? _c(\n \"li\",\n [\n _c(\n \"app-link\",\n {\n attrs: { href: \"logout\" },\n nativeOn: {\n click: function($event) {\n $event.preventDefault()\n return _vm.confirmDialog(\n $event,\n \"logout\"\n )\n }\n }\n },\n [\n _c(\"i\", {\n staticClass: \"menu-icon-shutdown\"\n }),\n _vm._v(\" Logout\")\n ]\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"li\", {\n staticClass: \"divider\",\n attrs: { role: \"separator\" }\n }),\n _vm._v(\" \"),\n _c(\n \"li\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"home/status/\" } },\n [\n _c(\"i\", { staticClass: \"menu-icon-info\" }),\n _vm._v(\" Server Status\")\n ]\n )\n ],\n 1\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticStyle: { clear: \"both\" } })\n ],\n 1\n )\n ]\n )\n ]\n )\n : _vm._e()\n ])\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack://slim/./src/components/app-header.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options"); /***/ }),