diff --git a/.github/workflows/python-backend.yml b/.github/workflows/python-backend.yml index be717e1a98..7d73a3209a 100644 --- a/.github/workflows/python-backend.yml +++ b/.github/workflows/python-backend.yml @@ -8,18 +8,18 @@ jobs: strategy: max-parallel: 4 matrix: - python-version: [3.7, 3.8, 3.9, '3.10', '3.11'] + python-version: [3.7, 3.8, 3.9, '3.10', '3.11', '3.12'] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | python -m pip install --upgrade pip - pip install tox tox-gh-actions + pip install -r test_requirements.txt - name: Test with tox run: tox - name: Upload coverage to Codecov diff --git a/.github/workflows/version-check.yml b/.github/workflows/version-check.yml index 5207de742e..06c6321be2 100644 --- a/.github/workflows/version-check.yml +++ b/.github/workflows/version-check.yml @@ -7,7 +7,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.9] + python-version: [3.12] steps: - uses: actions/checkout@v2 diff --git a/ext/boto/compat.py b/ext/boto/compat.py index d257180307..036b27f3f8 100644 --- a/ext/boto/compat.py +++ b/ext/boto/compat.py @@ -46,16 +46,16 @@ # This is probably running on App Engine. expanduser = (lambda x: x) -from boto.vendored import six +import six -from boto.vendored.six import BytesIO, StringIO -from boto.vendored.six.moves import filter, http_client, map, _thread, \ - urllib, zip -from boto.vendored.six.moves.queue import Queue -from boto.vendored.six.moves.urllib.parse import parse_qs, quote, unquote, \ +from six import BytesIO, StringIO +from six.moves import filter, http_client, map, _thread, urllib, zip +from six.moves.queue import Queue +from six.moves.urllib.parse import parse_qs, quote, unquote, \ urlparse, urlsplit -from boto.vendored.six.moves.urllib.parse import unquote_plus -from boto.vendored.six.moves.urllib.request import urlopen +from six.moves.urllib.parse import unquote_plus +from six.moves.urllib.request import urlopen + if six.PY3: # StandardError was removed, so use the base exception type instead diff --git a/ext/boto/plugin.py b/ext/boto/plugin.py index 2c2931c9df..0ec3eb199a 100644 --- a/ext/boto/plugin.py +++ b/ext/boto/plugin.py @@ -37,7 +37,7 @@ class MyFancyAuth(AuthPlugin): """ import glob -import imp +import importlib.util import os.path @@ -66,16 +66,21 @@ def get_plugin(cls, requested_capability=None): return result +def _load_module_with_importlib(name, path): + spec = importlib.util.find_spec(name, path) + if spec: + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + else: + raise ImportError(f"Module {name} not found in path {path}") + + def _import_module(filename): (path, name) = os.path.split(filename) - (name, ext) = os.path.splitext(name) - - (file, filename, data) = imp.find_module(name, [path]) - try: - return imp.load_module(name, file, filename, data) - finally: - if file: - file.close() + (name, _) = os.path.splitext(name) + + return _load_module_with_importlib(name, [path]) _plugin_loaded = False diff --git a/ext/imdbpie/auth.py b/ext/imdbpie/auth.py index 235a4dbd34..ca85cef63b 100644 --- a/ext/imdbpie/auth.py +++ b/ext/imdbpie/auth.py @@ -14,9 +14,9 @@ import diskcache from dateutil.tz import tzutc from dateutil.parser import parse -import boto.utils +from six import ensure_text from six.moves.urllib.parse import urlparse, parse_qs, quote -from boto import provider +from boto.provider import Provider from boto.connection import HTTPRequest from boto.auth import HmacAuthV3HTTPHandler @@ -42,7 +42,7 @@ def canonical_query_string(self, http_request): return '' qs_parts = [] for param in sorted(http_request.params): - value = boto.utils.get_utf8_value(http_request.params[param]) + value = ensure_text(http_request.params[param]) param_ = quote(param, safe='-_.~') value_ = quote(value, safe='-_.~') qs_parts.append('{0}={1}'.format(param_, value_)) @@ -118,7 +118,7 @@ def get_auth_headers(self, url_path): handler = ZuluHmacAuthV3HTTPHandler( host=HOST, config={}, - provider=provider.Provider( + provider=Provider( name='aws', access_key=creds['accessKeyId'], secret_key=creds['secretAccessKey'], diff --git a/lib/pkg_resources/__init__.py b/lib/pkg_resources/__init__.py index 955fdc48b6..3c65edc07a 100644 --- a/lib/pkg_resources/__init__.py +++ b/lib/pkg_resources/__init__.py @@ -71,7 +71,7 @@ except ImportError: importlib_machinery = None -from pkg_resources.extern import appdirs +import appdirs from pkg_resources.extern import packaging __import__('pkg_resources.extern.packaging.version') __import__('pkg_resources.extern.packaging.specifiers') @@ -2169,7 +2169,7 @@ def resolve_egg_link(path): return next(dist_groups, ()) -register_finder(pkgutil.ImpImporter, find_on_path) +register_finder(pkgutil.zipimporter, find_on_path) if hasattr(importlib_machinery, 'FileFinder'): register_finder(importlib_machinery.FileFinder, find_on_path) @@ -2210,7 +2210,7 @@ def _handle_ns(packageName, path_item): # capture warnings due to #1111 with warnings.catch_warnings(): warnings.simplefilter("ignore") - loader = importer.find_module(packageName) + loader = importer.find_spec(packageName) if loader is None: return None @@ -2324,7 +2324,7 @@ def file_ns_handler(importer, path_item, packageName, module): return subpath -register_namespace_handler(pkgutil.ImpImporter, file_ns_handler) +register_namespace_handler(pkgutil.zipimporter, file_ns_handler) register_namespace_handler(zipimport.zipimporter, file_ns_handler) if hasattr(importlib_machinery, 'FileFinder'): diff --git a/medusa/process_tv.py b/medusa/process_tv.py index c7d2238964..4cd4140c4a 100644 --- a/medusa/process_tv.py +++ b/medusa/process_tv.py @@ -287,6 +287,23 @@ def __init__(self, path, process_method=None, failed=False, episodes=[], process self.episodes = episodes self.process_single_resource = process_single_resource + def _is_tv_download_dir(self, path): + """Check if the path exists, combine with the tv_download_dir path if available.""" + if not app.TV_DOWNLOAD_DIR: + self.log_and_output('tv_download_dir not set, not using it', level=logging.DEBUG) + return False + + if not os.path.isdir(app.TV_DOWNLOAD_DIR): + self.log_and_output('tv_download_dir set, but cant resove to a local directory', level=logging.DEBUG) + return False + + if not helpers.real_path(path) != helpers.real_path(app.TV_DOWNLOAD_DIR): + self.log_and_output('real path didnt match for the path: [] but cant resove to a local directory', + level=logging.DEBUG, **{'path': helpers.real_path(path), 'tv_download_dir': helpers.real_path(app.TV_DOWNLOAD_DIR)}) + return False + + return True + @property def directory(self): """Return the root directory we are going to process.""" @@ -305,13 +322,13 @@ def directory(self, path): # If the client and the application are not on the same machine, # translate the directory into a network directory - elif all([app.TV_DOWNLOAD_DIR, os.path.isdir(app.TV_DOWNLOAD_DIR), - helpers.real_path(path) == helpers.real_path(app.TV_DOWNLOAD_DIR)]): + elif self._is_tv_download_dir(path): directory = os.path.join( app.TV_DOWNLOAD_DIR, os.path.abspath(path).split(os.path.sep)[-1] ) self.log_and_output('Trying to use folder: {directory}', level=logging.DEBUG, **{'directory': directory}) + else: self.log_and_output( 'Unable to figure out what folder to process.' diff --git a/test_requirements.txt b/test_requirements.txt index 52b24a837a..3f2d489dbb 100644 --- a/test_requirements.txt +++ b/test_requirements.txt @@ -12,7 +12,10 @@ pytest-cov==4.1.0 pytest-flake8==1.1.1 pytest-tornado==0.8.1 PyYAML==6.0.1 +setuptools==68.0.0 six==1.16.0 +tox +tox-gh-actions tornado==6.1 urllib3<2.0.0 vcrpy diff --git a/themes-default/slim/.eslintrc.js b/themes-default/slim/.eslintrc.js index 971427a59a..5170574856 100644 --- a/themes-default/slim/.eslintrc.js +++ b/themes-default/slim/.eslintrc.js @@ -100,6 +100,7 @@ module.exports = { selfClosingTag: 'always', }, ], + 'import/no-named-as-default-member': 'off', }, // Please do not use root `globals` because they can't be overriden. globals: {}, diff --git a/themes-default/slim/src/components/display-show.vue b/themes-default/slim/src/components/display-show.vue index 367beabb46..7839000b14 100644 --- a/themes-default/slim/src/components/display-show.vue +++ b/themes-default/slim/src/components/display-show.vue @@ -73,7 +73,7 @@ @@ -1217,7 +1217,7 @@ tablesorter.css } .displayShow >>> .vgt-table tr:hover { - opacity: 0.9; + opacity: 0.8; } .displayShow >>> .unaired { diff --git a/themes-default/slim/src/components/edit-show.vue b/themes-default/slim/src/components/edit-show.vue index 9c237c16b8..beeb467329 100644 --- a/themes-default/slim/src/components/edit-show.vue +++ b/themes-default/slim/src/components/edit-show.vue @@ -383,9 +383,9 @@ export default { methods: { ...mapActions({ getShow: 'getShow', - setShow: 'setShow', setCurrentShow: 'setCurrentShow', - setShowConfig: 'setShowConfig' + setShowConfig: 'setShowConfig', + saveShowConfig: 'saveShowConfig' }), loadShow() { const { setCurrentShow, getShow, showSlug } = this; @@ -398,7 +398,7 @@ export default { setCurrentShow(showSlug); }, async saveShow(subject) { - const { show, showLoaded } = this; + const { show, showLoaded, saveShowConfig } = this; // We want to wait until the page has been fully loaded, before starting to save stuff. if (!showLoaded) { @@ -412,46 +412,8 @@ export default { // Disable the save button until we're done. this.saving = true; - const showConfig = show.config; - const data = { - config: { - aliases: showConfig.aliases, - defaultEpisodeStatus: showConfig.defaultEpisodeStatus, - dvdOrder: showConfig.dvdOrder, - seasonFolders: showConfig.seasonFolders, - anime: showConfig.anime, - scene: showConfig.scene, - sports: showConfig.sports, - paused: showConfig.paused, - location: showConfig.location, - airByDate: showConfig.airByDate, - subtitlesEnabled: showConfig.subtitlesEnabled, - release: { - requiredWords: showConfig.release.requiredWords, - ignoredWords: showConfig.release.ignoredWords, - requiredWordsExclude: showConfig.release.requiredWordsExclude, - ignoredWordsExclude: showConfig.release.ignoredWordsExclude - }, - qualities: { - preferred: showConfig.qualities.preferred, - allowed: showConfig.qualities.allowed - }, - airdateOffset: showConfig.airdateOffset, - showLists: showConfig.showLists, - templates: showConfig.templates, - searchTemplates: showConfig.searchTemplates - }, - language: show.language - }; - - if (data.config.anime) { - data.config.release.blacklist = showConfig.release.blacklist; - data.config.release.whitelist = showConfig.release.whitelist; - } - - const { showSlug, setShow } = this; try { - await setShow({ showSlug, data }); + await saveShowConfig({ show }); this.$snotify.success( 'You may need to "Re-scan files" or "Force Full Update".', 'Saved', @@ -459,7 +421,7 @@ export default { ); } catch (error) { this.$snotify.error( - `Error while trying to save ${this.show.title}: ${error.message || 'Unknown'}`, + `Error while trying to save ${show.title}: ${error.message || 'Unknown'}`, 'Error' ); } finally { diff --git a/themes-default/slim/src/components/show-results.vue b/themes-default/slim/src/components/show-results.vue index 22078b1d2b..d6830e0f32 100644 --- a/themes-default/slim/src/components/show-results.vue +++ b/themes-default/slim/src/components/show-results.vue @@ -45,6 +45,11 @@ > + + {{props.row.releaseGroup}} + + + @@ -95,13 +100,15 @@ import { StateSwitch } from './helpers'; import QualityPill from './helpers/quality-pill.vue'; import { episodeToSlug, humanFileSize } from '../utils/core'; import { VTooltip } from 'v-tooltip'; +import ManageWhitelist from './show-results/manage-whitelist.vue'; export default { name: 'show-results', components: { VueGoodTable, StateSwitch, - QualityPill + QualityPill, + ManageWhitelist }, directives: { tooltip: VTooltip @@ -461,4 +468,8 @@ export default { #no-result { color: rgb(255, 255, 255); } + +.release-group { + position: relative; +} diff --git a/themes-default/slim/src/components/show-results/manage-whitelist.vue b/themes-default/slim/src/components/show-results/manage-whitelist.vue new file mode 100644 index 0000000000..3756028964 --- /dev/null +++ b/themes-default/slim/src/components/show-results/manage-whitelist.vue @@ -0,0 +1,135 @@ + + + diff --git a/themes-default/slim/src/store/modules/shows.js b/themes-default/slim/src/store/modules/shows.js index 54e22695e7..84ef2b636e 100644 --- a/themes-default/slim/src/store/modules/shows.js +++ b/themes-default/slim/src/store/modules/shows.js @@ -589,6 +589,46 @@ const actions = { updateEpisode({ state, commit }, episode) { const show = state.shows.find(({ id }) => id.slug === episode.showSlug); commit(ADD_SHOW_EPISODE, { show, episodes: [episode] }); + }, + saveShowConfig({ rootState }, { show }) { + const showConfig = show.config; + const data = { + config: { + aliases: showConfig.aliases, + defaultEpisodeStatus: showConfig.defaultEpisodeStatus, + dvdOrder: showConfig.dvdOrder, + seasonFolders: showConfig.seasonFolders, + anime: showConfig.anime, + scene: showConfig.scene, + sports: showConfig.sports, + paused: showConfig.paused, + location: showConfig.location, + airByDate: showConfig.airByDate, + subtitlesEnabled: showConfig.subtitlesEnabled, + release: { + requiredWords: showConfig.release.requiredWords, + ignoredWords: showConfig.release.ignoredWords, + requiredWordsExclude: showConfig.release.requiredWordsExclude, + ignoredWordsExclude: showConfig.release.ignoredWordsExclude + }, + qualities: { + preferred: showConfig.qualities.preferred, + allowed: showConfig.qualities.allowed + }, + airdateOffset: showConfig.airdateOffset, + showLists: showConfig.showLists, + templates: showConfig.templates, + searchTemplates: showConfig.searchTemplates + }, + language: show.language + }; + + if (data.config.anime) { + data.config.release.blacklist = showConfig.release.blacklist; + data.config.release.whitelist = showConfig.release.whitelist; + } + + return rootState.auth.client.api.patch(`series/${show.id.slug}`, data); } }; diff --git a/themes-default/slim/src/style/vgt-table.scss b/themes-default/slim/src/style/vgt-table.scss index a3dda14452..1eaa4c64db 100644 --- a/themes-default/slim/src/style/vgt-table.scss +++ b/themes-default/slim/src/style/vgt-table.scss @@ -1,4 +1,13 @@ /** Use this as table styling for all table layouts */ +$blue: 190, 222, 237; +$pink: 235, 193, 234; +$yellow: 55, 218, 138; +$red: 255, 153, 153; +$peach: 255, 221, 221; +$lightYellow: 245, 241, 228; +$green: 221, 255, 221; +$opacity: 0.8; + .vgt-table-styling { .vgt-table { width: 100%; @@ -111,7 +120,7 @@ } tr:hover { - opacity: 0.9; + background-color: rgba(var(--row-background-color), 0.8); } /* When using collored rows (using the episode status name, Snatched, Downloaded, Failed, etc.) @@ -131,29 +140,35 @@ } .skipped { - background-color: rgb(190, 222, 237); + --row-background-color: #{$blue}; + background-color: rgb(var(--row-background-color)); } .snatched { - background-color: rgb(235, 193, 234); + --row-background-color: #{$pink}; + background-color: rgb(var(--row-background-color)); } .downloaded { - background-color: rgb(255, 218, 138); + --row-background-color: #{$yellow}; + background-color: rgb(var(--row-background-color)); } .failed { - background-color: rgb(255, 153, 153); + --row-background-color: #{$red}; + background-color: rgb(var(--row-background-color)); } .subtitled { - background-color: rgb(190, 222, 237); + --row-background-color: #{$blue}; + background-color: rgb(var(--row-background-color)); } .archived { - background-color: rgb(245, 241, 228); + --row-background-color: #{$lightYellow}; + background-color: rgb(var(--row-background-color)); } - } + } .tablesorter-header-inner { padding: 0 2px; @@ -342,19 +357,23 @@ /* Schedule list layout */ .schedule tr.today { - background-color: rgb(245, 241, 228); + --row-background-color: #{$lightYellow}; + background-color: rgb(var(--row-background-color)); } .schedule tr.soon { - background-color: rgb(221, 255, 221); + --row-background-color: #{$green}; + background-color: rgb(var(--row-background-color)); } .schedule tr.missed { - background-color: rgb(255, 221, 221); + --row-background-color: #{$peach}; + background-color: rgb(var(--row-background-color)); } .schedule tr.later { - background-color: rgb(190, 222, 237); + --row-background-color: #{$blue}; + background-color: rgb(var(--row-background-color)); } .schedule tr, diff --git a/themes-default/slim/static/images/svg/close.svg b/themes-default/slim/static/images/svg/close.svg new file mode 100644 index 0000000000..c60d87cec9 --- /dev/null +++ b/themes-default/slim/static/images/svg/close.svg @@ -0,0 +1,16 @@ + + + + + + + + + \ No newline at end of file diff --git a/themes/dark/assets/img/svg/close.svg b/themes/dark/assets/img/svg/close.svg new file mode 100644 index 0000000000..9d69553bfe --- /dev/null +++ b/themes/dark/assets/img/svg/close.svg @@ -0,0 +1,16 @@ + + + + + + + + + \ No newline at end of file diff --git a/themes/dark/assets/js/medusa-runtime.js b/themes/dark/assets/js/medusa-runtime.js index 5eb3602836..8b7fa0d998 100644 --- a/themes/dark/assets/js/medusa-runtime.js +++ b/themes/dark/assets/js/medusa-runtime.js @@ -246,7 +246,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_7__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n/* harmony import */ var _utils_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/core */ \"./src/utils/core.js\");\n/* harmony import */ var vue_nav_tabs_dist_vue_tabs_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-nav-tabs/dist/vue-tabs.js */ \"./node_modules/vue-nav-tabs/dist/vue-tabs.js\");\n/* harmony import */ var vue_nav_tabs_dist_vue_tabs_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(vue_nav_tabs_dist_vue_tabs_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _anidb_release_group_ui_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./anidb-release-group-ui.vue */ \"./src/components/anidb-release-group-ui.vue\");\n/* harmony import */ var _backstretch_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./backstretch.vue */ \"./src/components/backstretch.vue\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./helpers */ \"./src/components/helpers/index.js\");\n/* harmony import */ var vue_multiselect__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vue-multiselect */ \"./node_modules/vue-multiselect/dist/vue-multiselect.min.js\");\n/* harmony import */ var vue_multiselect__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(vue_multiselect__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var vue_multiselect_dist_vue_multiselect_min_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! vue-multiselect/dist/vue-multiselect.min.css */ \"./node_modules/vue-multiselect/dist/vue-multiselect.min.css\");\n\n\n\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'edit-show',\n components: {\n AnidbReleaseGroupUi: _anidb_release_group_ui_vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n AppLink: _helpers__WEBPACK_IMPORTED_MODULE_4__.AppLink,\n Backstretch: _backstretch_vue__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n ConfigSceneExceptions: _helpers__WEBPACK_IMPORTED_MODULE_4__.ConfigSceneExceptions,\n ConfigTemplate: _helpers__WEBPACK_IMPORTED_MODULE_4__.ConfigTemplate,\n ConfigTextboxNumber: _helpers__WEBPACK_IMPORTED_MODULE_4__.ConfigTextboxNumber,\n ConfigToggleSlider: _helpers__WEBPACK_IMPORTED_MODULE_4__.ConfigToggleSlider,\n FileBrowser: _helpers__WEBPACK_IMPORTED_MODULE_4__.FileBrowser,\n LanguageSelect: _helpers__WEBPACK_IMPORTED_MODULE_4__.LanguageSelect,\n Multiselect: (vue_multiselect__WEBPACK_IMPORTED_MODULE_5___default()),\n QualityChooser: _helpers__WEBPACK_IMPORTED_MODULE_4__.QualityChooser,\n SelectList: _helpers__WEBPACK_IMPORTED_MODULE_4__.SelectList,\n VueTabs: vue_nav_tabs_dist_vue_tabs_js__WEBPACK_IMPORTED_MODULE_1__.VueTabs,\n VTab: vue_nav_tabs_dist_vue_tabs_js__WEBPACK_IMPORTED_MODULE_1__.VTab,\n SearchTemplateContainer: _helpers__WEBPACK_IMPORTED_MODULE_4__.SearchTemplateContainer\n },\n metaInfo() {\n if (!this.show || !this.show.title) {\n return {\n title: 'Medusa'\n };\n }\n const {\n title\n } = this.show;\n return {\n title,\n titleTemplate: '%s | Medusa'\n };\n },\n props: {\n /**\n * Show Slug\n */\n slug: {\n type: String\n }\n },\n data() {\n return {\n saving: false,\n loadError: null\n };\n },\n computed: {\n ...(0,vuex__WEBPACK_IMPORTED_MODULE_7__.mapState)({\n general: state => state.config.general,\n indexers: state => state.config.indexers,\n anime: state => state.config.anime,\n layout: state => state.config.layout,\n episodeStatuses: state => state.config.consts.statuses,\n search: state => state.config.search\n }),\n ...(0,vuex__WEBPACK_IMPORTED_MODULE_7__.mapGetters)({\n show: 'getCurrentShow',\n getStatus: 'getStatus'\n }),\n showLists: {\n get() {\n const {\n show\n } = this;\n return show.config.showLists.map(list => list.toLowerCase());\n },\n set(value) {\n const {\n show,\n setShowConfig\n } = this;\n setShowConfig({\n show,\n config: {\n ...show.config,\n showLists: value\n }\n });\n }\n },\n showSlug() {\n const {\n slug\n } = this;\n return slug || this.$route.query.showslug;\n },\n showLoaded() {\n return Boolean(this.show.id.slug);\n },\n defaultEpisodeStatusOptions() {\n if (this.episodeStatuses.length === 0) {\n return [];\n }\n // Get status objects, in this order\n return ['wanted', 'skipped', 'ignored'].map(key => this.getStatus({\n key\n }));\n },\n availableLanguages() {\n if (this.indexers.main.validLanguages) {\n return this.indexers.main.validLanguages.join(',');\n }\n return '';\n },\n combinedQualities() {\n const {\n allowed,\n preferred\n } = this.show.config.qualities;\n return (0,_utils_core__WEBPACK_IMPORTED_MODULE_0__.combineQualities)(allowed, preferred);\n },\n saveButton() {\n return this.saving === false ? 'Save Changes' : 'Saving...';\n },\n globalIgnored() {\n const {\n search\n } = this;\n return search.filters.ignored.map(x => x.toLowerCase());\n },\n globalRequired() {\n const {\n search\n } = this;\n return search.filters.required.map(x => x.toLowerCase());\n },\n effectiveIgnored() {\n const {\n globalIgnored\n } = this;\n const showIgnored = this.show.config.release.ignoredWords.map(x => x.toLowerCase());\n if (this.show.config.release.ignoredWordsExclude) {\n return (0,_utils_core__WEBPACK_IMPORTED_MODULE_0__.arrayExclude)(globalIgnored, showIgnored);\n }\n return (0,_utils_core__WEBPACK_IMPORTED_MODULE_0__.arrayUnique)(globalIgnored.concat(showIgnored));\n },\n effectiveRequired() {\n const {\n globalRequired\n } = this;\n const showRequired = this.show.config.release.requiredWords.map(x => x.toLowerCase());\n if (this.show.config.release.requiredWordsExclude) {\n return (0,_utils_core__WEBPACK_IMPORTED_MODULE_0__.arrayExclude)(globalRequired, showRequired);\n }\n return (0,_utils_core__WEBPACK_IMPORTED_MODULE_0__.arrayUnique)(globalRequired.concat(showRequired));\n },\n selectedFormat() {\n const {\n show\n } = this;\n const {\n config\n } = show;\n return ['anime', 'sports', 'airByDate'].find(item => config[item]);\n }\n },\n created() {\n this.loadShow();\n },\n methods: {\n ...(0,vuex__WEBPACK_IMPORTED_MODULE_7__.mapActions)({\n getShow: 'getShow',\n setShow: 'setShow',\n setCurrentShow: 'setCurrentShow',\n setShowConfig: 'setShowConfig'\n }),\n loadShow() {\n const {\n setCurrentShow,\n getShow,\n showSlug\n } = this;\n\n // We need detailed info for the xem / scene exceptions, so let's get it.\n getShow({\n showSlug,\n detailed: true\n });\n\n // Let's tell the store which show we currently want as current.\n // Run this after getShow(), as it will trigger the initializeEpisodes() method.\n setCurrentShow(showSlug);\n },\n async saveShow(subject) {\n const {\n show,\n showLoaded\n } = this;\n\n // We want to wait until the page has been fully loaded, before starting to save stuff.\n if (!showLoaded) {\n return;\n }\n if (!['show', 'all'].includes(subject)) {\n return;\n }\n\n // Disable the save button until we're done.\n this.saving = true;\n const showConfig = show.config;\n const data = {\n config: {\n aliases: showConfig.aliases,\n defaultEpisodeStatus: showConfig.defaultEpisodeStatus,\n dvdOrder: showConfig.dvdOrder,\n seasonFolders: showConfig.seasonFolders,\n anime: showConfig.anime,\n scene: showConfig.scene,\n sports: showConfig.sports,\n paused: showConfig.paused,\n location: showConfig.location,\n airByDate: showConfig.airByDate,\n subtitlesEnabled: showConfig.subtitlesEnabled,\n release: {\n requiredWords: showConfig.release.requiredWords,\n ignoredWords: showConfig.release.ignoredWords,\n requiredWordsExclude: showConfig.release.requiredWordsExclude,\n ignoredWordsExclude: showConfig.release.ignoredWordsExclude\n },\n qualities: {\n preferred: showConfig.qualities.preferred,\n allowed: showConfig.qualities.allowed\n },\n airdateOffset: showConfig.airdateOffset,\n showLists: showConfig.showLists,\n templates: showConfig.templates,\n searchTemplates: showConfig.searchTemplates\n },\n language: show.language\n };\n if (data.config.anime) {\n data.config.release.blacklist = showConfig.release.blacklist;\n data.config.release.whitelist = showConfig.release.whitelist;\n }\n const {\n showSlug,\n setShow\n } = this;\n try {\n await setShow({\n showSlug,\n data\n });\n this.$snotify.success('You may need to \"Re-scan files\" or \"Force Full Update\".', 'Saved', {\n timeout: 5000\n });\n } catch (error) {\n this.$snotify.error(`Error while trying to save ${this.show.title}: ${error.message || 'Unknown'}`, 'Error');\n } finally {\n // Re-enable the save button.\n this.saving = false;\n }\n },\n onChangeIgnoredWords(items) {\n this.show.config.release.ignoredWords = items.map(item => item.value);\n },\n onChangeRequiredWords(items) {\n this.show.config.release.requiredWords = items.map(item => item.value);\n },\n onChangeReleaseGroupsAnime(groupNames) {\n this.show.config.release.whitelist = groupNames.whitelist;\n this.show.config.release.blacklist = groupNames.blacklist;\n },\n updateLanguage(value) {\n this.show.language = value;\n },\n changeFormat(value, formatOption) {\n const {\n anime,\n general\n } = this;\n this.show.config[formatOption] = value;\n if (value) {\n // Check each format option, disable the other options.\n ['anime', 'sports', 'airByDate'].filter(item => item !== formatOption).forEach(option => {\n this.show.config[option] = false;\n });\n }\n if (formatOption === 'anime' && anime.autoAnimeToList) {\n if (value) {\n // Auto anime to list is enabled. If changing the show format to anime, add 'Anime' to show lists.\n this.showLists = anime.showlistDefaultAnime;\n // The filter makes sure there are unique strings.\n this.showLists = this.showLists.filter((v, i, a) => a.indexOf(v) === i);\n } else {\n // Return to default show lists.\n this.showLists = general.showDefaults.showLists;\n }\n }\n }\n }\n});\n\n//# sourceURL=webpack://slim/./src/components/edit-show.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-1!./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_7__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n/* harmony import */ var _utils_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/core */ \"./src/utils/core.js\");\n/* harmony import */ var vue_nav_tabs_dist_vue_tabs_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-nav-tabs/dist/vue-tabs.js */ \"./node_modules/vue-nav-tabs/dist/vue-tabs.js\");\n/* harmony import */ var vue_nav_tabs_dist_vue_tabs_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(vue_nav_tabs_dist_vue_tabs_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _anidb_release_group_ui_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./anidb-release-group-ui.vue */ \"./src/components/anidb-release-group-ui.vue\");\n/* harmony import */ var _backstretch_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./backstretch.vue */ \"./src/components/backstretch.vue\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./helpers */ \"./src/components/helpers/index.js\");\n/* harmony import */ var vue_multiselect__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vue-multiselect */ \"./node_modules/vue-multiselect/dist/vue-multiselect.min.js\");\n/* harmony import */ var vue_multiselect__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(vue_multiselect__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var vue_multiselect_dist_vue_multiselect_min_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! vue-multiselect/dist/vue-multiselect.min.css */ \"./node_modules/vue-multiselect/dist/vue-multiselect.min.css\");\n\n\n\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'edit-show',\n components: {\n AnidbReleaseGroupUi: _anidb_release_group_ui_vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n AppLink: _helpers__WEBPACK_IMPORTED_MODULE_4__.AppLink,\n Backstretch: _backstretch_vue__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n ConfigSceneExceptions: _helpers__WEBPACK_IMPORTED_MODULE_4__.ConfigSceneExceptions,\n ConfigTemplate: _helpers__WEBPACK_IMPORTED_MODULE_4__.ConfigTemplate,\n ConfigTextboxNumber: _helpers__WEBPACK_IMPORTED_MODULE_4__.ConfigTextboxNumber,\n ConfigToggleSlider: _helpers__WEBPACK_IMPORTED_MODULE_4__.ConfigToggleSlider,\n FileBrowser: _helpers__WEBPACK_IMPORTED_MODULE_4__.FileBrowser,\n LanguageSelect: _helpers__WEBPACK_IMPORTED_MODULE_4__.LanguageSelect,\n Multiselect: (vue_multiselect__WEBPACK_IMPORTED_MODULE_5___default()),\n QualityChooser: _helpers__WEBPACK_IMPORTED_MODULE_4__.QualityChooser,\n SelectList: _helpers__WEBPACK_IMPORTED_MODULE_4__.SelectList,\n VueTabs: vue_nav_tabs_dist_vue_tabs_js__WEBPACK_IMPORTED_MODULE_1__.VueTabs,\n VTab: vue_nav_tabs_dist_vue_tabs_js__WEBPACK_IMPORTED_MODULE_1__.VTab,\n SearchTemplateContainer: _helpers__WEBPACK_IMPORTED_MODULE_4__.SearchTemplateContainer\n },\n metaInfo() {\n if (!this.show || !this.show.title) {\n return {\n title: 'Medusa'\n };\n }\n const {\n title\n } = this.show;\n return {\n title,\n titleTemplate: '%s | Medusa'\n };\n },\n props: {\n /**\n * Show Slug\n */\n slug: {\n type: String\n }\n },\n data() {\n return {\n saving: false,\n loadError: null\n };\n },\n computed: {\n ...(0,vuex__WEBPACK_IMPORTED_MODULE_7__.mapState)({\n general: state => state.config.general,\n indexers: state => state.config.indexers,\n anime: state => state.config.anime,\n layout: state => state.config.layout,\n episodeStatuses: state => state.config.consts.statuses,\n search: state => state.config.search\n }),\n ...(0,vuex__WEBPACK_IMPORTED_MODULE_7__.mapGetters)({\n show: 'getCurrentShow',\n getStatus: 'getStatus'\n }),\n showLists: {\n get() {\n const {\n show\n } = this;\n return show.config.showLists.map(list => list.toLowerCase());\n },\n set(value) {\n const {\n show,\n setShowConfig\n } = this;\n setShowConfig({\n show,\n config: {\n ...show.config,\n showLists: value\n }\n });\n }\n },\n showSlug() {\n const {\n slug\n } = this;\n return slug || this.$route.query.showslug;\n },\n showLoaded() {\n return Boolean(this.show.id.slug);\n },\n defaultEpisodeStatusOptions() {\n if (this.episodeStatuses.length === 0) {\n return [];\n }\n // Get status objects, in this order\n return ['wanted', 'skipped', 'ignored'].map(key => this.getStatus({\n key\n }));\n },\n availableLanguages() {\n if (this.indexers.main.validLanguages) {\n return this.indexers.main.validLanguages.join(',');\n }\n return '';\n },\n combinedQualities() {\n const {\n allowed,\n preferred\n } = this.show.config.qualities;\n return (0,_utils_core__WEBPACK_IMPORTED_MODULE_0__.combineQualities)(allowed, preferred);\n },\n saveButton() {\n return this.saving === false ? 'Save Changes' : 'Saving...';\n },\n globalIgnored() {\n const {\n search\n } = this;\n return search.filters.ignored.map(x => x.toLowerCase());\n },\n globalRequired() {\n const {\n search\n } = this;\n return search.filters.required.map(x => x.toLowerCase());\n },\n effectiveIgnored() {\n const {\n globalIgnored\n } = this;\n const showIgnored = this.show.config.release.ignoredWords.map(x => x.toLowerCase());\n if (this.show.config.release.ignoredWordsExclude) {\n return (0,_utils_core__WEBPACK_IMPORTED_MODULE_0__.arrayExclude)(globalIgnored, showIgnored);\n }\n return (0,_utils_core__WEBPACK_IMPORTED_MODULE_0__.arrayUnique)(globalIgnored.concat(showIgnored));\n },\n effectiveRequired() {\n const {\n globalRequired\n } = this;\n const showRequired = this.show.config.release.requiredWords.map(x => x.toLowerCase());\n if (this.show.config.release.requiredWordsExclude) {\n return (0,_utils_core__WEBPACK_IMPORTED_MODULE_0__.arrayExclude)(globalRequired, showRequired);\n }\n return (0,_utils_core__WEBPACK_IMPORTED_MODULE_0__.arrayUnique)(globalRequired.concat(showRequired));\n },\n selectedFormat() {\n const {\n show\n } = this;\n const {\n config\n } = show;\n return ['anime', 'sports', 'airByDate'].find(item => config[item]);\n }\n },\n created() {\n this.loadShow();\n },\n methods: {\n ...(0,vuex__WEBPACK_IMPORTED_MODULE_7__.mapActions)({\n getShow: 'getShow',\n setCurrentShow: 'setCurrentShow',\n setShowConfig: 'setShowConfig',\n saveShowConfig: 'saveShowConfig'\n }),\n loadShow() {\n const {\n setCurrentShow,\n getShow,\n showSlug\n } = this;\n\n // We need detailed info for the xem / scene exceptions, so let's get it.\n getShow({\n showSlug,\n detailed: true\n });\n\n // Let's tell the store which show we currently want as current.\n // Run this after getShow(), as it will trigger the initializeEpisodes() method.\n setCurrentShow(showSlug);\n },\n async saveShow(subject) {\n const {\n show,\n showLoaded,\n saveShowConfig\n } = this;\n\n // We want to wait until the page has been fully loaded, before starting to save stuff.\n if (!showLoaded) {\n return;\n }\n if (!['show', 'all'].includes(subject)) {\n return;\n }\n\n // Disable the save button until we're done.\n this.saving = true;\n try {\n await saveShowConfig({\n show\n });\n this.$snotify.success('You may need to \"Re-scan files\" or \"Force Full Update\".', 'Saved', {\n timeout: 5000\n });\n } catch (error) {\n this.$snotify.error(`Error while trying to save ${show.title}: ${error.message || 'Unknown'}`, 'Error');\n } finally {\n // Re-enable the save button.\n this.saving = false;\n }\n },\n onChangeIgnoredWords(items) {\n this.show.config.release.ignoredWords = items.map(item => item.value);\n },\n onChangeRequiredWords(items) {\n this.show.config.release.requiredWords = items.map(item => item.value);\n },\n onChangeReleaseGroupsAnime(groupNames) {\n this.show.config.release.whitelist = groupNames.whitelist;\n this.show.config.release.blacklist = groupNames.blacklist;\n },\n updateLanguage(value) {\n this.show.language = value;\n },\n changeFormat(value, formatOption) {\n const {\n anime,\n general\n } = this;\n this.show.config[formatOption] = value;\n if (value) {\n // Check each format option, disable the other options.\n ['anime', 'sports', 'airByDate'].filter(item => item !== formatOption).forEach(option => {\n this.show.config[option] = false;\n });\n }\n if (formatOption === 'anime' && anime.autoAnimeToList) {\n if (value) {\n // Auto anime to list is enabled. If changing the show format to anime, add 'Anime' to show lists.\n this.showLists = anime.showlistDefaultAnime;\n // The filter makes sure there are unique strings.\n this.showLists = this.showLists.filter((v, i, a) => a.indexOf(v) === i);\n } else {\n // Return to default show lists.\n this.showLists = general.showDefaults.showLists;\n }\n }\n }\n }\n});\n\n//# sourceURL=webpack://slim/./src/components/edit-show.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-1!./node_modules/vue-loader/lib/index.js??vue-loader-options"); /***/ }), @@ -1170,7 +1170,18 @@ 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_6__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n/* harmony import */ var vue_good_table__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vue-good-table */ \"./node_modules/vue-good-table/dist/vue-good-table.esm.js\");\n/* harmony import */ var _mixins_manage_cookie__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../mixins/manage-cookie */ \"./src/mixins/manage-cookie.js\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers */ \"./src/components/helpers/index.js\");\n/* harmony import */ var _helpers_quality_pill_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers/quality-pill.vue */ \"./src/components/helpers/quality-pill.vue\");\n/* harmony import */ var _utils_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/core */ \"./src/utils/core.js\");\n/* harmony import */ var v_tooltip__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! v-tooltip */ \"./node_modules/v-tooltip/dist/v-tooltip.esm.js\");\n\n\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'show-results',\n components: {\n VueGoodTable: vue_good_table__WEBPACK_IMPORTED_MODULE_5__.VueGoodTable,\n StateSwitch: _helpers__WEBPACK_IMPORTED_MODULE_1__.StateSwitch,\n QualityPill: _helpers_quality_pill_vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"]\n },\n directives: {\n tooltip: v_tooltip__WEBPACK_IMPORTED_MODULE_4__.VTooltip\n },\n mixins: [(0,_mixins_manage_cookie__WEBPACK_IMPORTED_MODULE_0__.manageCookieMixin)('showResults')],\n props: {\n show: {\n type: Object,\n required: true\n },\n season: {\n type: Number,\n required: true\n },\n episode: {\n type: Number,\n required: false\n },\n searchType: {\n type: String,\n default: 'episode'\n }\n },\n data() {\n const {\n getCookie\n } = this;\n const perPageDropdown = [25, 50, 100, 250, 500];\n const getPaginationPerPage = () => {\n const rows = getCookie('pagination-perPage');\n if (!rows) {\n return 50;\n }\n if (!perPageDropdown.includes(rows)) {\n return 500;\n }\n return rows;\n };\n return {\n columns: [{\n label: 'Release',\n field: 'release',\n tdClass: 'release',\n filterOptions: {\n enabled: true\n },\n hidden: getCookie('Release')\n }, {\n label: 'Group',\n field: 'releaseGroup',\n filterOptions: {\n enabled: true\n },\n width: '0',\n hidden: getCookie('Group')\n }, {\n label: 'Provider',\n field: 'provider.name',\n filterOptions: {\n enabled: true\n },\n width: '8rem',\n hidden: getCookie('Provider')\n }, {\n label: 'Quality',\n field: 'quality',\n type: 'number',\n filterOptions: {\n customFilter: true\n },\n hidden: getCookie('Quality')\n }, {\n label: 'Seeds',\n field: 'seeders',\n type: 'number',\n hidden: getCookie('Seeds')\n }, {\n label: 'Peers',\n field: 'leechers',\n type: 'number',\n hidden: getCookie('Peers')\n }, {\n label: 'Size',\n field: 'size',\n formatFn: _utils_core__WEBPACK_IMPORTED_MODULE_3__.humanFileSize,\n type: 'number',\n hidden: getCookie('Size')\n }, {\n label: 'Added',\n field: 'dateAdded',\n type: 'date',\n sortable: true,\n dateInputFormat: 'yyyy-MM-dd\\'T\\'HH:mm:ss',\n // E.g. 07-09-2017 19:16:25\n dateOutputFormat: 'yyyy/MM/dd HH:mm:ss',\n hidden: getCookie('Added')\n }, {\n label: 'Published',\n field: 'pubdate',\n type: 'date',\n sortable: true,\n dateInputFormat: 'yyyy-MM-dd\\'T\\'HH:mm:ssXXX',\n dateOutputFormat: 'yyyy-MM-dd HH:mm:ss',\n hidden: getCookie('Published')\n }, {\n label: 'Updated',\n field: 'time',\n type: 'date',\n sortable: true,\n dateInputFormat: 'yyyy-MM-dd\\'T\\'HH:mm:ss',\n dateOutputFormat: 'yyyy/MM/dd HH:mm:ss',\n hidden: getCookie('Updated')\n }, {\n label: 'Snatch',\n field: 'snatch',\n sortable: false\n }],\n loading: false,\n loadingMessage: '',\n perPageDropdown,\n getPaginationPerPage\n };\n },\n async mounted() {\n const {\n forceSearch,\n getProviders,\n getProviderCacheResults,\n show,\n season,\n episode\n } = this;\n await getProviders();\n const result = await getProviderCacheResults({\n showSlug: show.id.slug,\n season,\n episode\n });\n\n // TODO: put a modal in between\n if (result.providersSearched > 0 && result.totalSearchResults.length === 0) {\n forceSearch();\n }\n },\n computed: {\n ...(0,vuex__WEBPACK_IMPORTED_MODULE_6__.mapState)({\n config: state => state.config.general,\n layout: state => state.config.layout,\n search: state => state.config.search,\n providers: state => state.provider.providers,\n queueitems: state => state.queue.queueitems,\n history: state => state.history.episodeHistory,\n client: state => state.auth.client\n }),\n ...(0,vuex__WEBPACK_IMPORTED_MODULE_6__.mapGetters)({\n fuzzyParseDateTime: 'fuzzyParseDateTime',\n effectiveIgnored: 'effectiveIgnored',\n effectiveRequired: 'effectiveRequired'\n }),\n combinedResults() {\n const {\n episode,\n episodeHistory,\n providers,\n season,\n show\n } = this;\n let results = [];\n const getLastHistoryStatus = result => {\n const sortedHistory = episodeHistory.slice().sort(item => item.actionDate).reverse();\n for (const historyRow of sortedHistory) {\n if (historyRow.resource === result.release && historyRow.size === result.size) {\n return historyRow.statusName.toLocaleLowerCase();\n }\n }\n return 'skipped';\n };\n for (const provider of Object.values(providers).filter(provider => provider.config.enabled)) {\n if (provider.cache && provider.cache.length > 0) {\n results = [...results, ...provider.cache.filter(searchResult => {\n if (episode) {\n return searchResult.showSlug === show.id.slug && searchResult.season === season && searchResult.episodes.includes(episode);\n }\n return searchResult.showSlug === show.id.slug && searchResult.season === season && searchResult.seasonPack;\n }).map(result => {\n return {\n ...result,\n status: getLastHistoryStatus(result)\n };\n })];\n }\n }\n return results;\n },\n /**\n * Helper to get the current episode or season slug.\n * @returns {string} episode slug.\n */\n episodeSlug() {\n const {\n season,\n episode\n } = this;\n return (0,_utils_core__WEBPACK_IMPORTED_MODULE_3__.episodeToSlug)(season, episode);\n },\n /**\n * Helper to check if showSlug and season/episode slug exist.\n * @returns {array} history for episode or empty array.\n */\n episodeHistory() {\n const {\n episodeSlug,\n history,\n show\n } = this;\n if (!history[show.id.slug] || !history[show.id.slug][episodeSlug]) {\n return [];\n }\n return history[show.id.slug][episodeSlug];\n }\n },\n methods: {\n humanFileSize: _utils_core__WEBPACK_IMPORTED_MODULE_3__.humanFileSize,\n ...(0,vuex__WEBPACK_IMPORTED_MODULE_6__.mapActions)({\n getProviders: 'getProviders',\n getProviderCacheResults: 'getProviderCacheResults',\n getShowEpisodeHistory: 'getShowEpisodeHistory'\n }),\n close() {\n this.$emit('close');\n // Destroy the vue listeners, etc\n this.$destroy();\n // Remove the element from the DOM\n this.$el.remove();\n },\n async getProviderResults() {\n const {\n episode,\n getProviderCacheResults,\n season,\n show\n } = this;\n this.loading = true;\n this.loadingMessage = 'Refreshing results from cache';\n await getProviderCacheResults({\n showSlug: show.id.slug,\n season,\n episode\n });\n setTimeout(() => {\n this.loading = false;\n }, 1000);\n },\n forceSearch() {\n const {\n episode,\n episodeSlug,\n season,\n show\n } = this;\n let data = {};\n data = {\n showSlug: show.id.slug,\n options: {},\n [episode ? 'episodes' : 'season']: [episodeSlug]\n };\n this.loading = true;\n this.loadingMessage = 'Queue search...';\n this.client.api.put('search/manual', data) // eslint-disable-line no-undef\n .then(() => {\n console.info(`Queued search for show: ${show.id.slug} season: ${season}, episode: ${episode}`);\n this.loadingMessage = 'Queued search...';\n }).catch(error => {\n console.error(String(error));\n });\n },\n rowStyleClassFn(row) {\n const {\n effectiveIgnored,\n effectiveRequired,\n search,\n show\n } = this;\n const classes = [row.status || 'skipped'];\n const getReleaseNameClasses = name => {\n const classes = [];\n if (effectiveIgnored(show).map(word => {\n return name.toLowerCase().includes(word.toLowerCase());\n }).filter(x => x === true).length > 0) {\n classes.push('global-ignored');\n }\n if (effectiveRequired(show).map(word => {\n return name.toLowerCase().includes(word.toLowerCase());\n }).filter(x => x === true).length > 0) {\n classes.push('global-required');\n }\n if (search.filters.undesired.map(word => {\n return name.toLowerCase().includes(word.toLowerCase());\n }).filter(x => x === true).length > 0) {\n classes.push('global-undesired');\n }\n return classes;\n };\n return [...classes, ...getReleaseNameClasses(row.release)].join(' ');\n },\n async snatchResult(evt, result) {\n const {\n layout\n } = this;\n evt.target.src = `images/loading16-${layout.themeName}.gif`;\n try {\n const response = await this.client.apiRoute('home/pickManualSearch', {\n params: {\n provider: result.provider.id,\n identifier: result.identifier\n }\n });\n if (response.data.result === 'success') {\n evt.target.src = 'images/save.png';\n } else {\n evt.target.src = 'images/no16.png';\n }\n } catch (error) {\n console.error(String(error));\n evt.target.src = 'images/no16.png';\n }\n },\n updatePaginationPerPage(rows) {\n const {\n setCookie\n } = this;\n this.paginationPerPage = rows;\n setCookie('pagination-perPage', rows);\n }\n },\n watch: {\n queueitems: {\n async handler(queue) {\n // Check for manual searches\n const queueForThisEpisode = queue.filter(q => ['MANUAL-SEARCH'].includes(q.name) && q.segment.length && q.segment.find(ep => ep.season === this.season && ep.episode === this.episode));\n const [last] = queueForThisEpisode.slice(-1);\n if (last) {\n const searchStatus = last.success === null ? 'running' : 'finished';\n if (searchStatus === 'running') {\n this.loading = true;\n this.loadingMessage = 'Started searching providers...';\n } else {\n this.loadingMessage = 'Finished manual search';\n setTimeout(() => {\n this.loading = false;\n this.loadingMessage = '';\n }, 5000);\n }\n }\n\n // Check for snach selection\n const snatchedForThisEpisode = queue.filter(q => q.name === 'SNATCH-RESULT' && q.segment.length && q.segment.find(ep => ep.season === this.season && ep.episode === this.episode));\n const [lastSnatch] = snatchedForThisEpisode.slice(-1);\n if (lastSnatch && lastSnatch.success === true) {\n const {\n getProviderCacheResults,\n getShowEpisodeHistory,\n show,\n season,\n episode,\n episodeSlug\n } = this;\n\n // Something changed, let's get a new batch of provider results.\n await getShowEpisodeHistory({\n showSlug: show.id.slug,\n episodeSlug\n });\n await getProviderCacheResults({\n showSlug: show.id.slug,\n season,\n episode\n });\n }\n },\n deep: true,\n immediate: false\n }\n }\n});\n\n//# sourceURL=webpack://slim/./src/components/show-results.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-1!./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_7__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n/* harmony import */ var vue_good_table__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! vue-good-table */ \"./node_modules/vue-good-table/dist/vue-good-table.esm.js\");\n/* harmony import */ var _mixins_manage_cookie__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../mixins/manage-cookie */ \"./src/mixins/manage-cookie.js\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers */ \"./src/components/helpers/index.js\");\n/* harmony import */ var _helpers_quality_pill_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers/quality-pill.vue */ \"./src/components/helpers/quality-pill.vue\");\n/* harmony import */ var _utils_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/core */ \"./src/utils/core.js\");\n/* harmony import */ var v_tooltip__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! v-tooltip */ \"./node_modules/v-tooltip/dist/v-tooltip.esm.js\");\n/* harmony import */ var _show_results_manage_whitelist_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./show-results/manage-whitelist.vue */ \"./src/components/show-results/manage-whitelist.vue\");\n\n\n\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'show-results',\n components: {\n VueGoodTable: vue_good_table__WEBPACK_IMPORTED_MODULE_6__.VueGoodTable,\n StateSwitch: _helpers__WEBPACK_IMPORTED_MODULE_1__.StateSwitch,\n QualityPill: _helpers_quality_pill_vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n ManageWhitelist: _show_results_manage_whitelist_vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"]\n },\n directives: {\n tooltip: v_tooltip__WEBPACK_IMPORTED_MODULE_4__.VTooltip\n },\n mixins: [(0,_mixins_manage_cookie__WEBPACK_IMPORTED_MODULE_0__.manageCookieMixin)('showResults')],\n props: {\n show: {\n type: Object,\n required: true\n },\n season: {\n type: Number,\n required: true\n },\n episode: {\n type: Number,\n required: false\n },\n searchType: {\n type: String,\n default: 'episode'\n }\n },\n data() {\n const {\n getCookie\n } = this;\n const perPageDropdown = [25, 50, 100, 250, 500];\n const getPaginationPerPage = () => {\n const rows = getCookie('pagination-perPage');\n if (!rows) {\n return 50;\n }\n if (!perPageDropdown.includes(rows)) {\n return 500;\n }\n return rows;\n };\n return {\n columns: [{\n label: 'Release',\n field: 'release',\n tdClass: 'release',\n filterOptions: {\n enabled: true\n },\n hidden: getCookie('Release')\n }, {\n label: 'Group',\n field: 'releaseGroup',\n filterOptions: {\n enabled: true\n },\n width: '0',\n hidden: getCookie('Group')\n }, {\n label: 'Provider',\n field: 'provider.name',\n filterOptions: {\n enabled: true\n },\n width: '8rem',\n hidden: getCookie('Provider')\n }, {\n label: 'Quality',\n field: 'quality',\n type: 'number',\n filterOptions: {\n customFilter: true\n },\n hidden: getCookie('Quality')\n }, {\n label: 'Seeds',\n field: 'seeders',\n type: 'number',\n hidden: getCookie('Seeds')\n }, {\n label: 'Peers',\n field: 'leechers',\n type: 'number',\n hidden: getCookie('Peers')\n }, {\n label: 'Size',\n field: 'size',\n formatFn: _utils_core__WEBPACK_IMPORTED_MODULE_3__.humanFileSize,\n type: 'number',\n hidden: getCookie('Size')\n }, {\n label: 'Added',\n field: 'dateAdded',\n type: 'date',\n sortable: true,\n dateInputFormat: 'yyyy-MM-dd\\'T\\'HH:mm:ss',\n // E.g. 07-09-2017 19:16:25\n dateOutputFormat: 'yyyy/MM/dd HH:mm:ss',\n hidden: getCookie('Added')\n }, {\n label: 'Published',\n field: 'pubdate',\n type: 'date',\n sortable: true,\n dateInputFormat: 'yyyy-MM-dd\\'T\\'HH:mm:ssXXX',\n dateOutputFormat: 'yyyy-MM-dd HH:mm:ss',\n hidden: getCookie('Published')\n }, {\n label: 'Updated',\n field: 'time',\n type: 'date',\n sortable: true,\n dateInputFormat: 'yyyy-MM-dd\\'T\\'HH:mm:ss',\n dateOutputFormat: 'yyyy/MM/dd HH:mm:ss',\n hidden: getCookie('Updated')\n }, {\n label: 'Snatch',\n field: 'snatch',\n sortable: false\n }],\n loading: false,\n loadingMessage: '',\n perPageDropdown,\n getPaginationPerPage\n };\n },\n async mounted() {\n const {\n forceSearch,\n getProviders,\n getProviderCacheResults,\n show,\n season,\n episode\n } = this;\n await getProviders();\n const result = await getProviderCacheResults({\n showSlug: show.id.slug,\n season,\n episode\n });\n\n // TODO: put a modal in between\n if (result.providersSearched > 0 && result.totalSearchResults.length === 0) {\n forceSearch();\n }\n },\n computed: {\n ...(0,vuex__WEBPACK_IMPORTED_MODULE_7__.mapState)({\n config: state => state.config.general,\n layout: state => state.config.layout,\n search: state => state.config.search,\n providers: state => state.provider.providers,\n queueitems: state => state.queue.queueitems,\n history: state => state.history.episodeHistory,\n client: state => state.auth.client\n }),\n ...(0,vuex__WEBPACK_IMPORTED_MODULE_7__.mapGetters)({\n fuzzyParseDateTime: 'fuzzyParseDateTime',\n effectiveIgnored: 'effectiveIgnored',\n effectiveRequired: 'effectiveRequired'\n }),\n combinedResults() {\n const {\n episode,\n episodeHistory,\n providers,\n season,\n show\n } = this;\n let results = [];\n const getLastHistoryStatus = result => {\n const sortedHistory = episodeHistory.slice().sort(item => item.actionDate).reverse();\n for (const historyRow of sortedHistory) {\n if (historyRow.resource === result.release && historyRow.size === result.size) {\n return historyRow.statusName.toLocaleLowerCase();\n }\n }\n return 'skipped';\n };\n for (const provider of Object.values(providers).filter(provider => provider.config.enabled)) {\n if (provider.cache && provider.cache.length > 0) {\n results = [...results, ...provider.cache.filter(searchResult => {\n if (episode) {\n return searchResult.showSlug === show.id.slug && searchResult.season === season && searchResult.episodes.includes(episode);\n }\n return searchResult.showSlug === show.id.slug && searchResult.season === season && searchResult.seasonPack;\n }).map(result => {\n return {\n ...result,\n status: getLastHistoryStatus(result)\n };\n })];\n }\n }\n return results;\n },\n /**\n * Helper to get the current episode or season slug.\n * @returns {string} episode slug.\n */\n episodeSlug() {\n const {\n season,\n episode\n } = this;\n return (0,_utils_core__WEBPACK_IMPORTED_MODULE_3__.episodeToSlug)(season, episode);\n },\n /**\n * Helper to check if showSlug and season/episode slug exist.\n * @returns {array} history for episode or empty array.\n */\n episodeHistory() {\n const {\n episodeSlug,\n history,\n show\n } = this;\n if (!history[show.id.slug] || !history[show.id.slug][episodeSlug]) {\n return [];\n }\n return history[show.id.slug][episodeSlug];\n }\n },\n methods: {\n humanFileSize: _utils_core__WEBPACK_IMPORTED_MODULE_3__.humanFileSize,\n ...(0,vuex__WEBPACK_IMPORTED_MODULE_7__.mapActions)({\n getProviders: 'getProviders',\n getProviderCacheResults: 'getProviderCacheResults',\n getShowEpisodeHistory: 'getShowEpisodeHistory'\n }),\n close() {\n this.$emit('close');\n // Destroy the vue listeners, etc\n this.$destroy();\n // Remove the element from the DOM\n this.$el.remove();\n },\n async getProviderResults() {\n const {\n episode,\n getProviderCacheResults,\n season,\n show\n } = this;\n this.loading = true;\n this.loadingMessage = 'Refreshing results from cache';\n await getProviderCacheResults({\n showSlug: show.id.slug,\n season,\n episode\n });\n setTimeout(() => {\n this.loading = false;\n }, 1000);\n },\n forceSearch() {\n const {\n episode,\n episodeSlug,\n season,\n show\n } = this;\n let data = {};\n data = {\n showSlug: show.id.slug,\n options: {},\n [episode ? 'episodes' : 'season']: [episodeSlug]\n };\n this.loading = true;\n this.loadingMessage = 'Queue search...';\n this.client.api.put('search/manual', data) // eslint-disable-line no-undef\n .then(() => {\n console.info(`Queued search for show: ${show.id.slug} season: ${season}, episode: ${episode}`);\n this.loadingMessage = 'Queued search...';\n }).catch(error => {\n console.error(String(error));\n });\n },\n rowStyleClassFn(row) {\n const {\n effectiveIgnored,\n effectiveRequired,\n search,\n show\n } = this;\n const classes = [row.status || 'skipped'];\n const getReleaseNameClasses = name => {\n const classes = [];\n if (effectiveIgnored(show).map(word => {\n return name.toLowerCase().includes(word.toLowerCase());\n }).filter(x => x === true).length > 0) {\n classes.push('global-ignored');\n }\n if (effectiveRequired(show).map(word => {\n return name.toLowerCase().includes(word.toLowerCase());\n }).filter(x => x === true).length > 0) {\n classes.push('global-required');\n }\n if (search.filters.undesired.map(word => {\n return name.toLowerCase().includes(word.toLowerCase());\n }).filter(x => x === true).length > 0) {\n classes.push('global-undesired');\n }\n return classes;\n };\n return [...classes, ...getReleaseNameClasses(row.release)].join(' ');\n },\n async snatchResult(evt, result) {\n const {\n layout\n } = this;\n evt.target.src = `images/loading16-${layout.themeName}.gif`;\n try {\n const response = await this.client.apiRoute('home/pickManualSearch', {\n params: {\n provider: result.provider.id,\n identifier: result.identifier\n }\n });\n if (response.data.result === 'success') {\n evt.target.src = 'images/save.png';\n } else {\n evt.target.src = 'images/no16.png';\n }\n } catch (error) {\n console.error(String(error));\n evt.target.src = 'images/no16.png';\n }\n },\n updatePaginationPerPage(rows) {\n const {\n setCookie\n } = this;\n this.paginationPerPage = rows;\n setCookie('pagination-perPage', rows);\n }\n },\n watch: {\n queueitems: {\n async handler(queue) {\n // Check for manual searches\n const queueForThisEpisode = queue.filter(q => ['MANUAL-SEARCH'].includes(q.name) && q.segment.length && q.segment.find(ep => ep.season === this.season && ep.episode === this.episode));\n const [last] = queueForThisEpisode.slice(-1);\n if (last) {\n const searchStatus = last.success === null ? 'running' : 'finished';\n if (searchStatus === 'running') {\n this.loading = true;\n this.loadingMessage = 'Started searching providers...';\n } else {\n this.loadingMessage = 'Finished manual search';\n setTimeout(() => {\n this.loading = false;\n this.loadingMessage = '';\n }, 5000);\n }\n }\n\n // Check for snach selection\n const snatchedForThisEpisode = queue.filter(q => q.name === 'SNATCH-RESULT' && q.segment.length && q.segment.find(ep => ep.season === this.season && ep.episode === this.episode));\n const [lastSnatch] = snatchedForThisEpisode.slice(-1);\n if (lastSnatch && lastSnatch.success === true) {\n const {\n getProviderCacheResults,\n getShowEpisodeHistory,\n show,\n season,\n episode,\n episodeSlug\n } = this;\n\n // Something changed, let's get a new batch of provider results.\n await getShowEpisodeHistory({\n showSlug: show.id.slug,\n episodeSlug\n });\n await getProviderCacheResults({\n showSlug: show.id.slug,\n season,\n episode\n });\n }\n },\n deep: true,\n immediate: false\n }\n }\n});\n\n//# sourceURL=webpack://slim/./src/components/show-results.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-1!./node_modules/vue-loader/lib/index.js??vue-loader-options"); + +/***/ }), + +/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-1!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/show-results/manage-whitelist.vue?vue&type=script&lang=js&": +/*!********************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-1!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/show-results/manage-whitelist.vue?vue&type=script&lang=js& ***! + \********************************************************************************************************************************************************************************************************/ +/***/ ((__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_0__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'manage-whitelist',\n data() {\n return {\n open: false\n };\n },\n props: {\n releaseGroup: {\n type: String\n }\n },\n computed: {\n ...(0,vuex__WEBPACK_IMPORTED_MODULE_0__.mapGetters)({\n show: 'getCurrentShow'\n })\n },\n methods: {\n ...(0,vuex__WEBPACK_IMPORTED_MODULE_0__.mapActions)({\n saveShowConfig: 'saveShowConfig'\n }),\n addToWhitelist() {\n const {\n releaseGroup,\n show\n } = this;\n if (!show.config.release.whitelist.map(item => item.toLowerCase()).includes(releaseGroup.toLowerCase())) {\n this.show.config.release.whitelist.push(releaseGroup);\n this.save(`adding release group ${releaseGroup} from the whitelist`);\n }\n },\n removeFromWhitelist() {\n const {\n releaseGroup,\n show\n } = this;\n if (show.config.release.whitelist.map(item => item.toLowerCase()).includes(releaseGroup.toLowerCase())) {\n this.show.config.release.whitelist = this.show.config.release.whitelist.filter(group => group.toLowerCase() !== releaseGroup.toLowerCase());\n this.save(`removing release group ${releaseGroup} from the whitelist`);\n }\n },\n addToBlacklist() {\n const {\n releaseGroup,\n show\n } = this;\n if (!show.config.release.blacklist.map(item => item.toLowerCase()).includes(releaseGroup.toLowerCase())) {\n this.show.config.release.blacklist.push(releaseGroup);\n this.save(`adding release group ${releaseGroup} from the blacklist`);\n }\n },\n removeFromBlacklist() {\n const {\n releaseGroup,\n show\n } = this;\n if (show.config.release.blacklist.map(item => item.toLowerCase()).includes(releaseGroup.toLowerCase())) {\n this.show.config.release.blacklist = this.show.config.release.blacklist.filter(group => group.toLowerCase() !== releaseGroup.toLowerCase());\n this.save(`removing release group ${releaseGroup} from the blacklist`);\n }\n },\n async save(message) {\n const {\n saveShowConfig,\n show\n } = this;\n try {\n await saveShowConfig({\n show\n });\n this.$snotify.success(message, 'Saved', {\n timeout: 5000\n });\n } catch (error) {\n this.$snotify.error(`failed ${message}`, 'Error');\n }\n }\n }\n});\n\n//# sourceURL=webpack://slim/./src/components/show-results/manage-whitelist.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-1!./node_modules/vue-loader/lib/index.js??vue-loader-options"); /***/ }), @@ -1456,7 +1467,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 render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"display-show-template\",\n class: _vm.theme\n }, [_c(\"vue-snotify\"), _vm._v(\" \"), _vm.show.id.slug ? _c(\"backstretch\", {\n key: _vm.show.id.slug,\n attrs: {\n slug: _vm.show.id.slug\n }\n }) : _vm._e(), _vm._v(\" \"), _c(\"input\", {\n attrs: {\n type: \"hidden\",\n id: \"series-id\",\n value: \"\"\n }\n }), _vm._v(\" \"), _c(\"input\", {\n attrs: {\n type: \"hidden\",\n id: \"indexer-name\",\n value: \"\"\n }\n }), _vm._v(\" \"), _c(\"input\", {\n attrs: {\n type: \"hidden\",\n id: \"series-slug\",\n value: \"\"\n }\n }), _vm._v(\" \"), _c(\"show-header\", {\n key: `show-header-${_vm.showSlug}`,\n ref: \"show-header\",\n attrs: {\n type: \"show\",\n slug: _vm.showSlug\n },\n on: {\n reflow: _vm.reflowLayout,\n update: _vm.statusQualityUpdate,\n \"update-overview-status\": function ($event) {\n _vm.filterByOverviewStatus = $event;\n }\n }\n }), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"row\"\n }, [_c(\"div\", {\n staticClass: \"col-md-12 top-15 displayShow horizontal-scroll\"\n }, [_vm.show.seasons ? _c(\"vue-good-table\", {\n ref: \"table-seasons\",\n attrs: {\n columns: _vm.columns,\n rows: _vm.orderedSeasons,\n groupOptions: {\n enabled: true,\n mode: \"span\"\n },\n \"pagination-options\": {\n enabled: _vm.layout.show.pagination.enable,\n perPage: _vm.paginationPerPage,\n perPageDropdown: _vm.perPageDropdown\n },\n \"search-options\": {\n enabled: true,\n trigger: \"enter\",\n skipDiacritics: false,\n placeholder: \"Search episodes\"\n },\n \"sort-options\": {\n enabled: true,\n initialSortBy: _vm.getSortBy(\"episode\", \"desc\")\n },\n selectOptions: {\n enabled: true,\n selectOnCheckboxOnly: true,\n // only select when checkbox is clicked instead of the row\n selectionInfoClass: \"select-info\",\n selectionText: \"episodes selected\",\n clearSelectionText: \"clear\",\n selectAllByGroup: true\n },\n \"row-style-class\": _vm.rowStyleClassFn,\n \"column-filter-options\": {\n enabled: true\n }\n },\n on: {\n \"on-selected-rows-change\": function ($event) {\n _vm.selectedEpisodes = $event.selectedRows;\n },\n \"on-per-page-change\": function ($event) {\n return _vm.updatePaginationPerPage($event.currentPerPage);\n },\n \"on-page-change\": _vm.onPageChange\n },\n scopedSlots: _vm._u([{\n key: \"table-header-row\",\n fn: function (props) {\n return [_c(\"h3\", {\n staticClass: \"season-header toggle collapse\"\n }, [_c(\"app-link\", {\n attrs: {\n name: \"season-\" + props.row.season\n }\n }), _vm._v(\"\\n \" + _vm._s(props.row.season > 0 ? \"Season \" + props.row.season : \"Specials\") + \"\\n \"), _vm._v(\" \"), _vm.anyEpisodeNotUnaired(props.row) ? _c(\"app-link\", {\n staticClass: \"epManualSearch\",\n attrs: {\n href: `home/snatchSelection?showslug=${_vm.show.id.slug}&season=${props.row.season}&episode=1&manual_search_type=season`\n }\n }, [_c(\"img\", {\n attrs: {\n \"data-ep-manual-search\": \"\",\n src: \"images/manualsearch-white.png\",\n width: \"16\",\n height: \"16\",\n alt: \"search\",\n title: \"Manual Search\"\n }\n })]) : _vm._e(), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"season-scene-exception\",\n attrs: {\n \"data-season\": props.row.season > 0 ? props.row.season : \"Specials\"\n }\n }), _vm._v(\" \"), _c(\"img\", _vm._b({}, \"img\", _vm.getSeasonExceptions(props.row.season), false))], 1)];\n }\n }, {\n key: \"table-footer-row\",\n fn: function (_ref) {\n let {\n headerRow\n } = _ref;\n return [_c(\"tr\", {\n staticClass: \"seasoncols border-bottom shadow\",\n attrs: {\n colspan: \"9999\",\n id: `season-${headerRow.season}-footer`\n }\n }, [_c(\"th\", {\n staticClass: \"col-footer\",\n attrs: {\n colspan: \"15\",\n align: \"left\"\n }\n }, [_vm._v(\"Season contains \" + _vm._s(headerRow.children.length) + \" episodes with total filesize: \" + _vm._s(_vm.addFileSize(headerRow)))])]), _vm._v(\" \"), _c(\"tr\", {\n staticClass: \"spacer\"\n })];\n }\n }, {\n key: \"table-row\",\n fn: function (props) {\n return [props.column.field == \"content.hasNfo\" ? _c(\"span\", [_c(\"img\", {\n attrs: {\n src: `images/${props.row.content.hasNfo ? \"nfo.gif\" : \"nfo-no.gif\"}`,\n alt: props.row.content.hasNfo ? \"Y\" : \"N\",\n width: \"23\",\n height: \"11\"\n }\n })]) : props.column.field == \"content.hasTbn\" ? _c(\"span\", [_c(\"img\", {\n attrs: {\n src: `images/${props.row.content.hasTbn ? \"tbn.gif\" : \"tbn-no.gif\"}`,\n alt: props.row.content.hasTbn ? \"Y\" : \"N\",\n width: \"23\",\n height: \"11\"\n }\n })]) : props.column.label == \"Episode\" ? _c(\"span\", [_c(\"span\", {\n class: {\n addQTip: props.row.file.location !== \"\"\n },\n attrs: {\n title: props.row.file.location !== \"\" ? props.row.file.location : \"\"\n }\n }, [_vm._v(_vm._s(props.row.episode))])]) : props.column.label == \"Scene\" ? _c(\"span\", [_c(\"div\", {\n staticClass: \"align-center\"\n }, [_c(\"scene-number-input\", {\n attrs: {\n show: _vm.show,\n \"initial-episode\": props.row\n }\n })], 1)]) : props.column.label == \"Scene Abs. #\" ? _c(\"span\", [_c(\"div\", {\n staticClass: \"align-center\"\n }, [_c(\"scene-number-anime-input\", {\n attrs: {\n show: _vm.show,\n \"initial-episode\": props.row\n }\n })], 1)]) : props.column.label == \"Title\" ? _c(\"span\", [props.row.description !== \"\" ? _c(\"plot-info\", {\n attrs: {\n description: props.row.description,\n \"show-slug\": _vm.show.id.slug,\n season: props.row.season,\n episode: props.row.episode\n }\n }) : _vm._e(), _vm._v(\"\\n \" + _vm._s(props.row.title) + \"\\n \")], 1) : props.column.label == \"File\" ? _c(\"span\", [_c(\"span\", {\n staticClass: \"addQTip\",\n attrs: {\n title: props.row.file.location\n }\n }, [_vm._v(_vm._s(props.row.file.name))])]) : props.column.label == \"Subtitles\" ? _c(\"span\", [_c(\"div\", {\n staticClass: \"subtitles align-center\"\n }, _vm._l(props.row.subtitles, function (flag) {\n return _c(\"div\", {\n key: flag\n }, [flag !== \"und\" ? _c(\"img\", {\n staticClass: \"addQTip\",\n attrs: {\n src: `images/subtitles/flags/${flag}.png`,\n width: \"16\",\n height: \"11\",\n alt: flag,\n title: flag,\n onError: \"this.onerror=null;this.src='images/flags/unknown.png';\"\n },\n on: {\n click: function ($event) {\n return _vm.searchSubtitle($event, props.row, flag);\n }\n }\n }) : _c(\"img\", {\n staticClass: \"subtitle-flag\",\n attrs: {\n src: `images/subtitles/flags/${flag}.png`,\n width: \"16\",\n height: \"11\",\n alt: flag,\n onError: \"this.onerror=null;this.src='images/flags/unknown.png';\"\n }\n })]);\n }), 0)]) : props.column.label == \"Status\" ? _c(\"span\", [_c(\"div\", {\n staticClass: \"pull-left\"\n }, [props.row.quality !== 0 ? _c(\"quality-pill\", {\n attrs: {\n quality: props.row.quality\n }\n }) : _vm._e(), _vm._v(\"\\n \" + _vm._s(props.row.status) + \"\\n \"), props.row.status !== \"Unaired\" ? _c(\"img\", {\n staticClass: \"addQTip\",\n staticStyle: {\n \"margin-left\": \"5px\"\n },\n attrs: {\n title: props.row.watched ? \"This episode has been flagged as watched\" : \"\",\n src: `images/${props.row.watched ? \"\" : \"not\"}watched.png`,\n width: \"16\",\n height: \"16\"\n },\n on: {\n click: function ($event) {\n return _vm.updateEpisodeWatched(props.row, !props.row.watched);\n }\n }\n }) : _vm._e()], 1)]) : props.column.field == \"search\" ? _c(\"span\", [_c(\"div\", {\n staticClass: \"full-width\"\n }, [props.row.slug ? _c(\"search\", {\n ref: `search-${props.row.slug}`,\n staticStyle: {\n \"margin-right\": \"0.25rem\"\n },\n attrs: {\n searchType: \"backlog\",\n showSlug: _vm.showSlug,\n episode: {\n episode: props.row.episode,\n season: props.row.season,\n slug: props.row.slug\n }\n }\n }) : _vm._e(), _vm._v(\" \"), props.row.slug ? _c(\"search\", {\n staticStyle: {\n \"margin-right\": \"0.25rem\"\n },\n attrs: {\n searchType: \"manual\",\n showSlug: _vm.showSlug,\n episode: {\n episode: props.row.episode,\n season: props.row.season,\n slug: props.row.slug\n }\n }\n }) : _vm._e(), _vm._v(\" \"), _c(\"img\", {\n attrs: {\n src: \"images/closed_captioning.png\",\n height: \"16\",\n alt: \"search subtitles\",\n title: \"Search Subtitles\"\n },\n on: {\n click: function ($event) {\n return _vm.searchSubtitle($event, props.row);\n }\n }\n })], 1), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"mobile\"\n }, [_c(\"select\", {\n staticClass: \"form-control input-sm mobile-select\",\n attrs: {\n name: \"search-select\"\n },\n on: {\n change: function ($event) {\n return _vm.mobileSelectSearch($event, props.row);\n }\n }\n }, [_c(\"option\", {\n attrs: {\n disabled: \"\",\n selected: \"\",\n value: \"search action\"\n }\n }, [_vm._v(\"search action\")]), _vm._v(\" \"), _c(\"option\", {\n attrs: {\n value: \"forced\"\n }\n }, [_vm._v(_vm._s(_vm.retryDownload(props.row) ? \"retry\" : \"search\"))]), _vm._v(\" \"), _c(\"option\", {\n attrs: {\n value: \"manual\"\n }\n }, [_vm._v(\"manual\")]), _vm._v(\" \"), _c(\"option\", {\n attrs: {\n value: \"subtitle\"\n }\n }, [_vm._v(\"subtitle\")])])])]) : _c(\"span\", [_vm._v(\"\\n \" + _vm._s(props.formattedRow[props.column.field]) + \"\\n \")])];\n }\n }, {\n key: \"table-column\",\n fn: function (props) {\n return [props.column.label == \"Abs. #\" ? _c(\"span\", [_c(\"span\", {\n staticClass: \"addQTip\",\n attrs: {\n title: \"Absolute episode number\"\n }\n }, [_vm._v(_vm._s(props.column.label))])]) : props.column.label == \"Scene Abs. #\" ? _c(\"span\", [_c(\"span\", {\n staticClass: \"addQTip\",\n attrs: {\n title: \"Scene Absolute episode number\"\n }\n }, [_vm._v(_vm._s(props.column.label))])]) : _c(\"span\", [_vm._v(\"\\n \" + _vm._s(props.column.label) + \"\\n \")])];\n }\n }], null, false, 2301737876)\n }) : _vm._e(), _vm._v(\" \"), _vm.layout.show.specials && _vm.specials && _vm.specials.length > 0 ? _c(\"vue-good-table\", {\n ref: \"table-specials\",\n attrs: {\n columns: _vm.columns,\n rows: _vm.specials,\n groupOptions: {\n enabled: true,\n mode: \"span\",\n customChildObject: \"episodes\"\n },\n \"pagination-options\": {\n enabled: false\n },\n \"search-options\": {\n enabled: true,\n trigger: \"enter\",\n skipDiacritics: false,\n placeholder: \"Search specials\"\n },\n \"sort-options\": {\n enabled: true,\n multipleColumns: true,\n initialSortBy: _vm.getSortBy(\"episode\", \"desc\") // From mixin manage-cookie.js\n },\n\n selectOptions: {\n enabled: true,\n selectOnCheckboxOnly: true,\n // only select when checkbox is clicked instead of the row\n selectionInfoClass: \"select-info\",\n selectionText: \"episodes selected\",\n clearSelectionText: \"clear\",\n selectAllByGroup: true\n },\n \"row-style-class\": _vm.rowStyleClassFn,\n \"column-filter-options\": {\n enabled: false\n }\n },\n on: {\n \"on-selected-rows-change\": function ($event) {\n _vm.selectedEpisodes = $event.selectedRows;\n }\n },\n scopedSlots: _vm._u([{\n key: \"table-header-row\",\n fn: function (props) {\n return [_c(\"h3\", {\n staticClass: \"season-header toggle collapse\"\n }, [_c(\"app-link\", {\n attrs: {\n name: \"season-\" + props.row.season\n }\n }), _vm._v(\"\\n \" + _vm._s(props.row.season > 0 ? \"Season \" + props.row.season : \"Specials\") + \"\\n \"), _vm._v(\" \"), _vm.anyEpisodeNotUnaired(props.row) ? _c(\"app-link\", {\n staticClass: \"epManualSearch\",\n attrs: {\n href: `home/snatchSelection?showslug=${_vm.show.id.slug}&season=${props.row.season}&episode=1&manual_search_type=season`\n }\n }, [_c(\"img\", {\n attrs: {\n \"data-ep-manual-search\": \"\",\n src: \"images/manualsearch-white.png\",\n width: \"16\",\n height: \"16\",\n alt: \"search\",\n title: \"Manual Search\"\n }\n })]) : _vm._e(), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"season-scene-exception\",\n attrs: {\n \"data-season\": props.row.season > 0 ? props.row.season : \"Specials\"\n }\n }), _vm._v(\" \"), _c(\"img\", _vm._b({}, \"img\", _vm.getSeasonExceptions(props.row.season), false))], 1)];\n }\n }, {\n key: \"table-footer-row\",\n fn: function (_ref2) {\n let {\n headerRow\n } = _ref2;\n return [_c(\"tr\", {\n staticClass: \"seasoncols border-bottom shadow\",\n attrs: {\n colspan: \"9999\",\n id: `season-${headerRow.season}-footer`\n }\n }, [_c(\"th\", {\n staticClass: \"col-footer\",\n attrs: {\n colspan: \"15\",\n align: \"left\"\n }\n }, [_vm._v(\"Season contains \" + _vm._s(headerRow.children.length) + \" episodes with total filesize: \" + _vm._s(_vm.addFileSize(headerRow)))])]), _vm._v(\" \"), _c(\"tr\", {\n staticClass: \"spacer\"\n })];\n }\n }, {\n key: \"table-row\",\n fn: function (props) {\n return [props.column.field == \"content.hasNfo\" ? _c(\"span\", [_c(\"img\", {\n attrs: {\n src: `images/${props.row.content.hasNfo ? \"nfo.gif\" : \"nfo-no.gif\"}`,\n alt: props.row.content.hasNfo ? \"Y\" : \"N\",\n width: \"23\",\n height: \"11\"\n }\n })]) : props.column.field == \"content.hasTbn\" ? _c(\"span\", [_c(\"img\", {\n attrs: {\n src: `images/${props.row.content.hasTbn ? \"tbn.gif\" : \"tbn-no.gif\"}`,\n alt: props.row.content.hasTbn ? \"Y\" : \"N\",\n width: \"23\",\n height: \"11\"\n }\n })]) : props.column.label == \"Episode\" ? _c(\"span\", [_c(\"span\", {\n class: {\n addQTip: props.row.file.location !== \"\"\n },\n attrs: {\n title: props.row.file.location !== \"\" ? props.row.file.location : \"\"\n }\n }, [_vm._v(_vm._s(props.row.episode))])]) : props.column.label == \"Scene\" ? _c(\"span\", [_c(\"div\", {\n staticClass: \"align-center\"\n }, [_c(\"scene-number-input\", {\n attrs: {\n show: _vm.show,\n \"initial-episode\": props.row\n }\n })], 1)]) : props.column.label == \"Scene Abs. #\" ? _c(\"span\", [_c(\"div\", {\n staticClass: \"align-center\"\n }, [_c(\"scene-number-anime-input\", {\n attrs: {\n show: _vm.show,\n \"initial-episode\": props.row\n }\n })], 1)]) : props.column.label == \"Title\" ? _c(\"span\", [props.row.description !== \"\" ? _c(\"plot-info\", {\n attrs: {\n description: props.row.description,\n \"show-slug\": _vm.show.id.slug,\n season: props.row.season,\n episode: props.row.episode\n }\n }) : _vm._e(), _vm._v(\"\\n \" + _vm._s(props.row.title) + \"\\n \")], 1) : props.column.label == \"File\" ? _c(\"span\", [_c(\"span\", {\n staticClass: \"addQTip\",\n attrs: {\n title: props.row.file.location\n }\n }, [_vm._v(_vm._s(props.row.file.name))])]) : props.column.label == \"Subtitles\" ? _c(\"span\", [_c(\"div\", {\n staticClass: \"subtitles align-center\"\n }, _vm._l(props.row.subtitles, function (flag) {\n return _c(\"div\", {\n key: flag\n }, [flag !== \"und\" ? _c(\"img\", {\n staticClass: \"addQTip\",\n attrs: {\n src: `images/subtitles/flags/${flag}.png`,\n width: \"16\",\n height: \"11\",\n alt: flag,\n title: flag,\n onError: \"this.onerror=null;this.src='images/flags/unknown.png';\"\n },\n on: {\n click: function ($event) {\n return _vm.searchSubtitle($event, props.row, flag);\n }\n }\n }) : _c(\"img\", {\n staticClass: \"subtitle-flag\",\n attrs: {\n src: `images/subtitles/flags/${flag}.png`,\n width: \"16\",\n height: \"11\",\n alt: \"flag\",\n onError: \"this.onerror=null;this.src='images/flags/unknown.png';\"\n }\n })]);\n }), 0)]) : props.column.label == \"Status\" ? _c(\"span\", [_c(\"div\", {\n staticClass: \"pull-left align-center\"\n }, [_vm._v(\"\\n \" + _vm._s(props.row.status) + \"\\n \"), props.row.quality !== 0 ? _c(\"quality-pill\", {\n staticClass: \"quality-margins\",\n attrs: {\n quality: props.row.quality\n }\n }) : _vm._e(), _vm._v(\" \"), props.row.status !== \"Unaired\" ? _c(\"img\", {\n staticClass: \"addQTip\",\n attrs: {\n title: props.row.watched ? \"This episode has been flagged as watched\" : \"\",\n src: `images/${props.row.watched ? \"\" : \"not\"}watched.png`,\n width: \"16\"\n },\n on: {\n click: function ($event) {\n return _vm.updateEpisodeWatched(props.row, !props.row.watched);\n }\n }\n }) : _vm._e()], 1)]) : props.column.field == \"search\" ? _c(\"span\", [_c(\"div\", {\n staticClass: \"full-width\"\n }, [props.row.slug ? _c(\"search\", {\n ref: `search-${props.row.slug}`,\n staticStyle: {\n \"margin-right\": \"0.25rem\"\n },\n attrs: {\n searchType: \"backlog\",\n showSlug: _vm.showSlug,\n episode: {\n episode: props.row.episode,\n season: props.row.season,\n slug: props.row.slug\n }\n }\n }) : _vm._e(), _vm._v(\" \"), props.row.slug ? _c(\"search\", {\n staticStyle: {\n \"margin-right\": \"0.25rem\"\n },\n attrs: {\n searchType: \"manual\",\n showSlug: _vm.showSlug,\n episode: {\n episode: props.row.episode,\n season: props.row.season,\n slug: props.row.slug\n }\n }\n }) : _vm._e(), _vm._v(\" \"), _c(\"img\", {\n attrs: {\n src: \"images/closed_captioning.png\",\n height: \"16\",\n alt: \"search subtitles\",\n title: \"Search Subtitles\"\n },\n on: {\n click: function ($event) {\n return _vm.searchSubtitle($event, props.row);\n }\n }\n })], 1), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"mobile\"\n }, [_c(\"select\", {\n staticClass: \"form-control input-sm mobile-select\",\n attrs: {\n name: \"search-select\"\n },\n on: {\n change: function ($event) {\n return _vm.mobileSelectSearch($event, props.row);\n }\n }\n }, [_c(\"option\", {\n attrs: {\n disabled: \"\",\n selected: \"\",\n value: \"search action\"\n }\n }, [_vm._v(\"search action\")]), _vm._v(\" \"), _c(\"option\", {\n attrs: {\n value: \"forced\"\n }\n }, [_vm._v(_vm._s(_vm.retryDownload(props.row) ? \"retry\" : \"search\"))]), _vm._v(\" \"), _c(\"option\", {\n attrs: {\n value: \"manual\"\n }\n }, [_vm._v(\"manual\")]), _vm._v(\" \"), _c(\"option\", {\n attrs: {\n value: \"subtitle\"\n }\n }, [_vm._v(\"subtitle\")])])])]) : _c(\"span\", [_vm._v(\"\\n \" + _vm._s(props.formattedRow[props.column.field]) + \"\\n \")])];\n }\n }, {\n key: \"table-column\",\n fn: function (props) {\n return [props.column.label == \"Abs. #\" ? _c(\"span\", [_c(\"span\", {\n staticClass: \"addQTip\",\n attrs: {\n title: \"Absolute episode number\"\n }\n }, [_vm._v(_vm._s(props.column.label))])]) : props.column.label == \"Scene Abs. #\" ? _c(\"span\", [_c(\"span\", {\n staticClass: \"addQTip\",\n attrs: {\n title: \"Scene Absolute episode number\"\n }\n }, [_vm._v(_vm._s(props.column.label))])]) : _c(\"span\", [_vm._v(\"\\n \" + _vm._s(props.column.label) + \"\\n \")])];\n }\n }], null, false, 1911762760)\n }) : _vm._e()], 1)]), _vm._v(\" \"), _c(\"modal\", {\n attrs: {\n name: \"query-start-backlog-search\",\n height: \"auto\",\n width: \"80%\"\n },\n on: {\n \"before-open\": _vm.beforeBacklogSearchModalClose\n }\n }, [_c(\"transition\", {\n attrs: {\n name: \"modal\"\n }\n }, [_c(\"div\", {\n staticClass: \"modal-mask\"\n }, [_c(\"div\", {\n staticClass: \"modal-wrapper\"\n }, [_c(\"div\", {\n staticClass: \"modal-content\"\n }, [_c(\"div\", {\n staticClass: \"modal-header\"\n }, [_c(\"button\", {\n staticClass: \"close\",\n attrs: {\n type: \"button\",\n \"data-dismiss\": \"modal\",\n \"aria-hidden\": \"true\"\n }\n }, [_vm._v(\"×\")]), _vm._v(\" \"), _c(\"h4\", {\n staticClass: \"modal-title\"\n }, [_vm._v(\"Start search?\")])]), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"modal-body\"\n }, [_c(\"p\", [_vm._v(\"Some episodes have been changed to 'Wanted'. Do you want to trigger a backlog search for these \" + _vm._s(_vm.backlogSearchEpisodes.length) + \" episode(s)\")])]), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"modal-footer\"\n }, [_c(\"button\", {\n staticClass: \"btn-medusa btn-danger\",\n attrs: {\n type: \"button\",\n \"data-dismiss\": \"modal\"\n },\n on: {\n click: function ($event) {\n return _vm.$modal.hide(\"query-start-backlog-search\");\n }\n }\n }, [_vm._v(\"No\")]), _vm._v(\" \"), _c(\"button\", {\n staticClass: \"btn-medusa btn-success\",\n attrs: {\n type: \"button\",\n \"data-dismiss\": \"modal\"\n },\n on: {\n click: function ($event) {\n _vm.search(_vm.backlogSearchEpisodes, \"backlog\");\n _vm.$modal.hide(\"query-start-backlog-search\");\n }\n }\n }, [_vm._v(\"Yes\")])])])])])])], 1), _vm._v(\" \"), _c(\"modal\", {\n attrs: {\n name: \"query-mark-failed-and-search\",\n height: \"auto\",\n width: \"80%\"\n },\n on: {\n \"before-open\": _vm.beforeFailedSearchModalClose\n }\n }, [_c(\"transition\", {\n attrs: {\n name: \"modal\"\n }\n }, [_c(\"div\", {\n staticClass: \"modal-mask\"\n }, [_c(\"div\", {\n staticClass: \"modal-wrapper\"\n }, [_c(\"div\", {\n staticClass: \"modal-content\"\n }, [_c(\"div\", {\n staticClass: \"modal-header\"\n }, [_vm._v(\"\\n Mark episode as failed and search?\\n \")]), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"modal-body\"\n }, [_c(\"p\", [_vm._v(\"Starting to search for the episode\")]), _vm._v(\" \"), _vm.failedSearchEpisodes && _vm.failedSearchEpisodes.length === 1 ? _c(\"p\", [_vm._v(\"Would you also like to mark episode \" + _vm._s(_vm.failedSearchEpisodes[0].slug) + ' as \"failed\"? This will make sure the episode cannot be downloaded again')]) : _vm.failedSearchEpisodes ? _c(\"p\", [_vm._v(\"Would you also like to mark episodes \" + _vm._s(_vm.failedSearchEpisodes.map(ep => ep.slug).join(\", \")) + ' as \"failed\"? This will make sure the episode cannot be downloaded again')]) : _vm._e()]), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"modal-footer\"\n }, [_c(\"button\", {\n staticClass: \"btn-medusa btn-danger\",\n attrs: {\n type: \"button\",\n \"data-dismiss\": \"modal\"\n },\n on: {\n click: function ($event) {\n _vm.search(_vm.failedSearchEpisodes, \"backlog\");\n _vm.$modal.hide(\"query-mark-failed-and-search\");\n }\n }\n }, [_vm._v(\"No\")]), _vm._v(\" \"), _c(\"button\", {\n staticClass: \"btn-medusa btn-success\",\n attrs: {\n type: \"button\",\n \"data-dismiss\": \"modal\"\n },\n on: {\n click: function ($event) {\n _vm.search(_vm.failedSearchEpisodes, \"failed\");\n _vm.$modal.hide(\"query-mark-failed-and-search\");\n }\n }\n }, [_vm._v(\"Yes\")]), _vm._v(\" \"), _c(\"button\", {\n staticClass: \"btn-medusa btn-danger\",\n attrs: {\n type: \"button\",\n \"data-dismiss\": \"modal\"\n },\n on: {\n click: function ($event) {\n return _vm.$modal.hide(\"query-mark-failed-and-search\");\n }\n }\n }, [_vm._v(\"Cancel\")])])])])])])], 1)], 1);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n\n\n//# sourceURL=webpack://slim/./src/components/display-show.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-1!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet%5B1%5D.rules%5B2%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 */ render: () => (/* binding */ render),\n/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"display-show-template\",\n class: _vm.theme\n }, [_c(\"vue-snotify\"), _vm._v(\" \"), _vm.show.id.slug ? _c(\"backstretch\", {\n key: _vm.show.id.slug,\n attrs: {\n slug: _vm.show.id.slug\n }\n }) : _vm._e(), _vm._v(\" \"), _c(\"input\", {\n attrs: {\n type: \"hidden\",\n id: \"series-id\",\n value: \"\"\n }\n }), _vm._v(\" \"), _c(\"input\", {\n attrs: {\n type: \"hidden\",\n id: \"indexer-name\",\n value: \"\"\n }\n }), _vm._v(\" \"), _c(\"input\", {\n attrs: {\n type: \"hidden\",\n id: \"series-slug\",\n value: \"\"\n }\n }), _vm._v(\" \"), _c(\"show-header\", {\n key: `show-header-${_vm.showSlug}`,\n ref: \"show-header\",\n attrs: {\n type: \"show\",\n slug: _vm.showSlug\n },\n on: {\n reflow: _vm.reflowLayout,\n update: _vm.statusQualityUpdate,\n \"update-overview-status\": function ($event) {\n _vm.filterByOverviewStatus = $event;\n }\n }\n }), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"row\"\n }, [_c(\"div\", {\n staticClass: \"col-md-12 top-15 displayShow horizontal-scroll\"\n }, [_vm.show.seasons ? _c(\"vue-good-table\", {\n ref: \"table-seasons\",\n attrs: {\n columns: _vm.columns,\n rows: _vm.orderedSeasons,\n groupOptions: {\n enabled: true,\n mode: \"span\"\n },\n \"pagination-options\": {\n enabled: _vm.layout.show.pagination.enable,\n perPage: _vm.paginationPerPage,\n perPageDropdown: _vm.perPageDropdown\n },\n \"search-options\": {\n enabled: true,\n trigger: \"enter\",\n skipDiacritics: false,\n placeholder: \"Search episodes\"\n },\n \"sort-options\": {\n enabled: true,\n initialSortBy: _vm.getSortBy(\"episode\", \"desc\")\n },\n selectOptions: {\n enabled: true,\n selectOnCheckboxOnly: true,\n // only select when checkbox is clicked instead of the row\n selectionInfoClass: \"select-info\",\n selectionText: \"episodes selected\",\n clearSelectionText: \"clear\",\n selectAllByGroup: true\n },\n \"row-style-class\": _vm.rowStyleClassFn,\n \"column-filter-options\": {\n enabled: true\n }\n },\n on: {\n \"on-selected-rows-change\": function ($event) {\n _vm.selectedEpisodes = $event.selectedRows;\n },\n \"on-per-page-change\": function ($event) {\n return _vm.updatePaginationPerPage($event.currentPerPage);\n },\n \"on-page-change\": _vm.onPageChange\n },\n scopedSlots: _vm._u([{\n key: \"table-header-row\",\n fn: function (props) {\n return [_c(\"h3\", {\n staticClass: \"season-header toggle collapse\"\n }, [_c(\"app-link\", {\n attrs: {\n name: \"season-\" + props.row.season\n }\n }), _vm._v(\"\\n \" + _vm._s(props.row.season > 0 ? \"Season \" + props.row.season : \"Specials\") + \"\\n \"), _vm._v(\" \"), _vm.anyEpisodeNotUnaired(props.row) ? _c(\"app-link\", {\n staticClass: \"epManualSearch\",\n attrs: {\n href: `home/snatchSelection?showslug=${_vm.show.id.slug}&season=${props.row.season}&episode=1&manual_search_type=season`\n }\n }, [_c(\"img\", {\n attrs: {\n \"data-ep-manual-search\": \"\",\n src: \"images/manualsearch-white.png\",\n width: \"16\",\n height: \"16\",\n alt: \"search\",\n title: \"Manual Search\"\n }\n })]) : _vm._e(), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"season-scene-exception\",\n attrs: {\n \"data-season\": props.row.season > 0 ? props.row.season : \"Specials\"\n }\n }), _vm._v(\" \"), _c(\"img\", _vm._b({}, \"img\", _vm.getSeasonExceptions(props.row.season), false))], 1)];\n }\n }, {\n key: \"table-footer-row\",\n fn: function (_ref) {\n let {\n headerRow\n } = _ref;\n return [_c(\"tr\", {\n staticClass: \"seasoncols border-bottom shadow\",\n attrs: {\n colspan: \"9999\",\n id: `season-${headerRow.season}-footer`\n }\n }, [_c(\"th\", {\n staticClass: \"col-footer\",\n attrs: {\n colspan: \"15\"\n }\n }, [_vm._v(\"Season contains \" + _vm._s(headerRow.children.length) + \" episodes with total filesize: \" + _vm._s(_vm.addFileSize(headerRow)))])]), _vm._v(\" \"), _c(\"tr\", {\n staticClass: \"spacer\"\n })];\n }\n }, {\n key: \"table-row\",\n fn: function (props) {\n return [props.column.field == \"content.hasNfo\" ? _c(\"span\", [_c(\"img\", {\n attrs: {\n src: `images/${props.row.content.hasNfo ? \"nfo.gif\" : \"nfo-no.gif\"}`,\n alt: props.row.content.hasNfo ? \"Y\" : \"N\",\n width: \"23\",\n height: \"11\"\n }\n })]) : props.column.field == \"content.hasTbn\" ? _c(\"span\", [_c(\"img\", {\n attrs: {\n src: `images/${props.row.content.hasTbn ? \"tbn.gif\" : \"tbn-no.gif\"}`,\n alt: props.row.content.hasTbn ? \"Y\" : \"N\",\n width: \"23\",\n height: \"11\"\n }\n })]) : props.column.label == \"Episode\" ? _c(\"span\", [_c(\"span\", {\n class: {\n addQTip: props.row.file.location !== \"\"\n },\n attrs: {\n title: props.row.file.location !== \"\" ? props.row.file.location : \"\"\n }\n }, [_vm._v(_vm._s(props.row.episode))])]) : props.column.label == \"Scene\" ? _c(\"span\", [_c(\"div\", {\n staticClass: \"align-center\"\n }, [_c(\"scene-number-input\", {\n attrs: {\n show: _vm.show,\n \"initial-episode\": props.row\n }\n })], 1)]) : props.column.label == \"Scene Abs. #\" ? _c(\"span\", [_c(\"div\", {\n staticClass: \"align-center\"\n }, [_c(\"scene-number-anime-input\", {\n attrs: {\n show: _vm.show,\n \"initial-episode\": props.row\n }\n })], 1)]) : props.column.label == \"Title\" ? _c(\"span\", [props.row.description !== \"\" ? _c(\"plot-info\", {\n attrs: {\n description: props.row.description,\n \"show-slug\": _vm.show.id.slug,\n season: props.row.season,\n episode: props.row.episode\n }\n }) : _vm._e(), _vm._v(\"\\n \" + _vm._s(props.row.title) + \"\\n \")], 1) : props.column.label == \"File\" ? _c(\"span\", [_c(\"span\", {\n staticClass: \"addQTip\",\n attrs: {\n title: props.row.file.location\n }\n }, [_vm._v(_vm._s(props.row.file.name))])]) : props.column.label == \"Subtitles\" ? _c(\"span\", [_c(\"div\", {\n staticClass: \"subtitles align-center\"\n }, _vm._l(props.row.subtitles, function (flag) {\n return _c(\"div\", {\n key: flag\n }, [flag !== \"und\" ? _c(\"img\", {\n staticClass: \"addQTip\",\n attrs: {\n src: `images/subtitles/flags/${flag}.png`,\n width: \"16\",\n height: \"11\",\n alt: flag,\n title: flag,\n onError: \"this.onerror=null;this.src='images/flags/unknown.png';\"\n },\n on: {\n click: function ($event) {\n return _vm.searchSubtitle($event, props.row, flag);\n }\n }\n }) : _c(\"img\", {\n staticClass: \"subtitle-flag\",\n attrs: {\n src: `images/subtitles/flags/${flag}.png`,\n width: \"16\",\n height: \"11\",\n alt: flag,\n onError: \"this.onerror=null;this.src='images/flags/unknown.png';\"\n }\n })]);\n }), 0)]) : props.column.label == \"Status\" ? _c(\"span\", [_c(\"div\", {\n staticClass: \"pull-left\"\n }, [props.row.quality !== 0 ? _c(\"quality-pill\", {\n attrs: {\n quality: props.row.quality\n }\n }) : _vm._e(), _vm._v(\"\\n \" + _vm._s(props.row.status) + \"\\n \"), props.row.status !== \"Unaired\" ? _c(\"img\", {\n staticClass: \"addQTip\",\n staticStyle: {\n \"margin-left\": \"5px\"\n },\n attrs: {\n title: props.row.watched ? \"This episode has been flagged as watched\" : \"\",\n src: `images/${props.row.watched ? \"\" : \"not\"}watched.png`,\n width: \"16\",\n height: \"16\"\n },\n on: {\n click: function ($event) {\n return _vm.updateEpisodeWatched(props.row, !props.row.watched);\n }\n }\n }) : _vm._e()], 1)]) : props.column.field == \"search\" ? _c(\"span\", [_c(\"div\", {\n staticClass: \"full-width\"\n }, [props.row.slug ? _c(\"search\", {\n ref: `search-${props.row.slug}`,\n staticStyle: {\n \"margin-right\": \"0.25rem\"\n },\n attrs: {\n searchType: \"backlog\",\n showSlug: _vm.showSlug,\n episode: {\n episode: props.row.episode,\n season: props.row.season,\n slug: props.row.slug\n }\n }\n }) : _vm._e(), _vm._v(\" \"), props.row.slug ? _c(\"search\", {\n staticStyle: {\n \"margin-right\": \"0.25rem\"\n },\n attrs: {\n searchType: \"manual\",\n showSlug: _vm.showSlug,\n episode: {\n episode: props.row.episode,\n season: props.row.season,\n slug: props.row.slug\n }\n }\n }) : _vm._e(), _vm._v(\" \"), _c(\"img\", {\n attrs: {\n src: \"images/closed_captioning.png\",\n height: \"16\",\n alt: \"search subtitles\",\n title: \"Search Subtitles\"\n },\n on: {\n click: function ($event) {\n return _vm.searchSubtitle($event, props.row);\n }\n }\n })], 1), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"mobile\"\n }, [_c(\"select\", {\n staticClass: \"form-control input-sm mobile-select\",\n attrs: {\n name: \"search-select\"\n },\n on: {\n change: function ($event) {\n return _vm.mobileSelectSearch($event, props.row);\n }\n }\n }, [_c(\"option\", {\n attrs: {\n disabled: \"\",\n selected: \"\",\n value: \"search action\"\n }\n }, [_vm._v(\"search action\")]), _vm._v(\" \"), _c(\"option\", {\n attrs: {\n value: \"forced\"\n }\n }, [_vm._v(_vm._s(_vm.retryDownload(props.row) ? \"retry\" : \"search\"))]), _vm._v(\" \"), _c(\"option\", {\n attrs: {\n value: \"manual\"\n }\n }, [_vm._v(\"manual\")]), _vm._v(\" \"), _c(\"option\", {\n attrs: {\n value: \"subtitle\"\n }\n }, [_vm._v(\"subtitle\")])])])]) : _c(\"span\", [_vm._v(\"\\n \" + _vm._s(props.formattedRow[props.column.field]) + \"\\n \")])];\n }\n }, {\n key: \"table-column\",\n fn: function (props) {\n return [props.column.label == \"Abs. #\" ? _c(\"span\", [_c(\"span\", {\n staticClass: \"addQTip\",\n attrs: {\n title: \"Absolute episode number\"\n }\n }, [_vm._v(_vm._s(props.column.label))])]) : props.column.label == \"Scene Abs. #\" ? _c(\"span\", [_c(\"span\", {\n staticClass: \"addQTip\",\n attrs: {\n title: \"Scene Absolute episode number\"\n }\n }, [_vm._v(_vm._s(props.column.label))])]) : _c(\"span\", [_vm._v(\"\\n \" + _vm._s(props.column.label) + \"\\n \")])];\n }\n }], null, false, 4032649652)\n }) : _vm._e(), _vm._v(\" \"), _vm.layout.show.specials && _vm.specials && _vm.specials.length > 0 ? _c(\"vue-good-table\", {\n ref: \"table-specials\",\n attrs: {\n columns: _vm.columns,\n rows: _vm.specials,\n groupOptions: {\n enabled: true,\n mode: \"span\",\n customChildObject: \"episodes\"\n },\n \"pagination-options\": {\n enabled: false\n },\n \"search-options\": {\n enabled: true,\n trigger: \"enter\",\n skipDiacritics: false,\n placeholder: \"Search specials\"\n },\n \"sort-options\": {\n enabled: true,\n multipleColumns: true,\n initialSortBy: _vm.getSortBy(\"episode\", \"desc\") // From mixin manage-cookie.js\n },\n\n selectOptions: {\n enabled: true,\n selectOnCheckboxOnly: true,\n // only select when checkbox is clicked instead of the row\n selectionInfoClass: \"select-info\",\n selectionText: \"episodes selected\",\n clearSelectionText: \"clear\",\n selectAllByGroup: true\n },\n \"row-style-class\": _vm.rowStyleClassFn,\n \"column-filter-options\": {\n enabled: false\n }\n },\n on: {\n \"on-selected-rows-change\": function ($event) {\n _vm.selectedEpisodes = $event.selectedRows;\n }\n },\n scopedSlots: _vm._u([{\n key: \"table-header-row\",\n fn: function (props) {\n return [_c(\"h3\", {\n staticClass: \"season-header toggle collapse\"\n }, [_c(\"app-link\", {\n attrs: {\n name: \"season-\" + props.row.season\n }\n }), _vm._v(\"\\n \" + _vm._s(props.row.season > 0 ? \"Season \" + props.row.season : \"Specials\") + \"\\n \"), _vm._v(\" \"), _vm.anyEpisodeNotUnaired(props.row) ? _c(\"app-link\", {\n staticClass: \"epManualSearch\",\n attrs: {\n href: `home/snatchSelection?showslug=${_vm.show.id.slug}&season=${props.row.season}&episode=1&manual_search_type=season`\n }\n }, [_c(\"img\", {\n attrs: {\n \"data-ep-manual-search\": \"\",\n src: \"images/manualsearch-white.png\",\n width: \"16\",\n height: \"16\",\n alt: \"search\",\n title: \"Manual Search\"\n }\n })]) : _vm._e(), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"season-scene-exception\",\n attrs: {\n \"data-season\": props.row.season > 0 ? props.row.season : \"Specials\"\n }\n }), _vm._v(\" \"), _c(\"img\", _vm._b({}, \"img\", _vm.getSeasonExceptions(props.row.season), false))], 1)];\n }\n }, {\n key: \"table-footer-row\",\n fn: function (_ref2) {\n let {\n headerRow\n } = _ref2;\n return [_c(\"tr\", {\n staticClass: \"seasoncols border-bottom shadow\",\n attrs: {\n colspan: \"9999\",\n id: `season-${headerRow.season}-footer`\n }\n }, [_c(\"th\", {\n staticClass: \"col-footer\",\n attrs: {\n colspan: \"15\",\n align: \"left\"\n }\n }, [_vm._v(\"Season contains \" + _vm._s(headerRow.children.length) + \" episodes with total filesize: \" + _vm._s(_vm.addFileSize(headerRow)))])]), _vm._v(\" \"), _c(\"tr\", {\n staticClass: \"spacer\"\n })];\n }\n }, {\n key: \"table-row\",\n fn: function (props) {\n return [props.column.field == \"content.hasNfo\" ? _c(\"span\", [_c(\"img\", {\n attrs: {\n src: `images/${props.row.content.hasNfo ? \"nfo.gif\" : \"nfo-no.gif\"}`,\n alt: props.row.content.hasNfo ? \"Y\" : \"N\",\n width: \"23\",\n height: \"11\"\n }\n })]) : props.column.field == \"content.hasTbn\" ? _c(\"span\", [_c(\"img\", {\n attrs: {\n src: `images/${props.row.content.hasTbn ? \"tbn.gif\" : \"tbn-no.gif\"}`,\n alt: props.row.content.hasTbn ? \"Y\" : \"N\",\n width: \"23\",\n height: \"11\"\n }\n })]) : props.column.label == \"Episode\" ? _c(\"span\", [_c(\"span\", {\n class: {\n addQTip: props.row.file.location !== \"\"\n },\n attrs: {\n title: props.row.file.location !== \"\" ? props.row.file.location : \"\"\n }\n }, [_vm._v(_vm._s(props.row.episode))])]) : props.column.label == \"Scene\" ? _c(\"span\", [_c(\"div\", {\n staticClass: \"align-center\"\n }, [_c(\"scene-number-input\", {\n attrs: {\n show: _vm.show,\n \"initial-episode\": props.row\n }\n })], 1)]) : props.column.label == \"Scene Abs. #\" ? _c(\"span\", [_c(\"div\", {\n staticClass: \"align-center\"\n }, [_c(\"scene-number-anime-input\", {\n attrs: {\n show: _vm.show,\n \"initial-episode\": props.row\n }\n })], 1)]) : props.column.label == \"Title\" ? _c(\"span\", [props.row.description !== \"\" ? _c(\"plot-info\", {\n attrs: {\n description: props.row.description,\n \"show-slug\": _vm.show.id.slug,\n season: props.row.season,\n episode: props.row.episode\n }\n }) : _vm._e(), _vm._v(\"\\n \" + _vm._s(props.row.title) + \"\\n \")], 1) : props.column.label == \"File\" ? _c(\"span\", [_c(\"span\", {\n staticClass: \"addQTip\",\n attrs: {\n title: props.row.file.location\n }\n }, [_vm._v(_vm._s(props.row.file.name))])]) : props.column.label == \"Subtitles\" ? _c(\"span\", [_c(\"div\", {\n staticClass: \"subtitles align-center\"\n }, _vm._l(props.row.subtitles, function (flag) {\n return _c(\"div\", {\n key: flag\n }, [flag !== \"und\" ? _c(\"img\", {\n staticClass: \"addQTip\",\n attrs: {\n src: `images/subtitles/flags/${flag}.png`,\n width: \"16\",\n height: \"11\",\n alt: flag,\n title: flag,\n onError: \"this.onerror=null;this.src='images/flags/unknown.png';\"\n },\n on: {\n click: function ($event) {\n return _vm.searchSubtitle($event, props.row, flag);\n }\n }\n }) : _c(\"img\", {\n staticClass: \"subtitle-flag\",\n attrs: {\n src: `images/subtitles/flags/${flag}.png`,\n width: \"16\",\n height: \"11\",\n alt: \"flag\",\n onError: \"this.onerror=null;this.src='images/flags/unknown.png';\"\n }\n })]);\n }), 0)]) : props.column.label == \"Status\" ? _c(\"span\", [_c(\"div\", {\n staticClass: \"pull-left align-center\"\n }, [_vm._v(\"\\n \" + _vm._s(props.row.status) + \"\\n \"), props.row.quality !== 0 ? _c(\"quality-pill\", {\n staticClass: \"quality-margins\",\n attrs: {\n quality: props.row.quality\n }\n }) : _vm._e(), _vm._v(\" \"), props.row.status !== \"Unaired\" ? _c(\"img\", {\n staticClass: \"addQTip\",\n attrs: {\n title: props.row.watched ? \"This episode has been flagged as watched\" : \"\",\n src: `images/${props.row.watched ? \"\" : \"not\"}watched.png`,\n width: \"16\"\n },\n on: {\n click: function ($event) {\n return _vm.updateEpisodeWatched(props.row, !props.row.watched);\n }\n }\n }) : _vm._e()], 1)]) : props.column.field == \"search\" ? _c(\"span\", [_c(\"div\", {\n staticClass: \"full-width\"\n }, [props.row.slug ? _c(\"search\", {\n ref: `search-${props.row.slug}`,\n staticStyle: {\n \"margin-right\": \"0.25rem\"\n },\n attrs: {\n searchType: \"backlog\",\n showSlug: _vm.showSlug,\n episode: {\n episode: props.row.episode,\n season: props.row.season,\n slug: props.row.slug\n }\n }\n }) : _vm._e(), _vm._v(\" \"), props.row.slug ? _c(\"search\", {\n staticStyle: {\n \"margin-right\": \"0.25rem\"\n },\n attrs: {\n searchType: \"manual\",\n showSlug: _vm.showSlug,\n episode: {\n episode: props.row.episode,\n season: props.row.season,\n slug: props.row.slug\n }\n }\n }) : _vm._e(), _vm._v(\" \"), _c(\"img\", {\n attrs: {\n src: \"images/closed_captioning.png\",\n height: \"16\",\n alt: \"search subtitles\",\n title: \"Search Subtitles\"\n },\n on: {\n click: function ($event) {\n return _vm.searchSubtitle($event, props.row);\n }\n }\n })], 1), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"mobile\"\n }, [_c(\"select\", {\n staticClass: \"form-control input-sm mobile-select\",\n attrs: {\n name: \"search-select\"\n },\n on: {\n change: function ($event) {\n return _vm.mobileSelectSearch($event, props.row);\n }\n }\n }, [_c(\"option\", {\n attrs: {\n disabled: \"\",\n selected: \"\",\n value: \"search action\"\n }\n }, [_vm._v(\"search action\")]), _vm._v(\" \"), _c(\"option\", {\n attrs: {\n value: \"forced\"\n }\n }, [_vm._v(_vm._s(_vm.retryDownload(props.row) ? \"retry\" : \"search\"))]), _vm._v(\" \"), _c(\"option\", {\n attrs: {\n value: \"manual\"\n }\n }, [_vm._v(\"manual\")]), _vm._v(\" \"), _c(\"option\", {\n attrs: {\n value: \"subtitle\"\n }\n }, [_vm._v(\"subtitle\")])])])]) : _c(\"span\", [_vm._v(\"\\n \" + _vm._s(props.formattedRow[props.column.field]) + \"\\n \")])];\n }\n }, {\n key: \"table-column\",\n fn: function (props) {\n return [props.column.label == \"Abs. #\" ? _c(\"span\", [_c(\"span\", {\n staticClass: \"addQTip\",\n attrs: {\n title: \"Absolute episode number\"\n }\n }, [_vm._v(_vm._s(props.column.label))])]) : props.column.label == \"Scene Abs. #\" ? _c(\"span\", [_c(\"span\", {\n staticClass: \"addQTip\",\n attrs: {\n title: \"Scene Absolute episode number\"\n }\n }, [_vm._v(_vm._s(props.column.label))])]) : _c(\"span\", [_vm._v(\"\\n \" + _vm._s(props.column.label) + \"\\n \")])];\n }\n }], null, false, 1911762760)\n }) : _vm._e()], 1)]), _vm._v(\" \"), _c(\"modal\", {\n attrs: {\n name: \"query-start-backlog-search\",\n height: \"auto\",\n width: \"80%\"\n },\n on: {\n \"before-open\": _vm.beforeBacklogSearchModalClose\n }\n }, [_c(\"transition\", {\n attrs: {\n name: \"modal\"\n }\n }, [_c(\"div\", {\n staticClass: \"modal-mask\"\n }, [_c(\"div\", {\n staticClass: \"modal-wrapper\"\n }, [_c(\"div\", {\n staticClass: \"modal-content\"\n }, [_c(\"div\", {\n staticClass: \"modal-header\"\n }, [_c(\"button\", {\n staticClass: \"close\",\n attrs: {\n type: \"button\",\n \"data-dismiss\": \"modal\",\n \"aria-hidden\": \"true\"\n }\n }, [_vm._v(\"×\")]), _vm._v(\" \"), _c(\"h4\", {\n staticClass: \"modal-title\"\n }, [_vm._v(\"Start search?\")])]), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"modal-body\"\n }, [_c(\"p\", [_vm._v(\"Some episodes have been changed to 'Wanted'. Do you want to trigger a backlog search for these \" + _vm._s(_vm.backlogSearchEpisodes.length) + \" episode(s)\")])]), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"modal-footer\"\n }, [_c(\"button\", {\n staticClass: \"btn-medusa btn-danger\",\n attrs: {\n type: \"button\",\n \"data-dismiss\": \"modal\"\n },\n on: {\n click: function ($event) {\n return _vm.$modal.hide(\"query-start-backlog-search\");\n }\n }\n }, [_vm._v(\"No\")]), _vm._v(\" \"), _c(\"button\", {\n staticClass: \"btn-medusa btn-success\",\n attrs: {\n type: \"button\",\n \"data-dismiss\": \"modal\"\n },\n on: {\n click: function ($event) {\n _vm.search(_vm.backlogSearchEpisodes, \"backlog\");\n _vm.$modal.hide(\"query-start-backlog-search\");\n }\n }\n }, [_vm._v(\"Yes\")])])])])])])], 1), _vm._v(\" \"), _c(\"modal\", {\n attrs: {\n name: \"query-mark-failed-and-search\",\n height: \"auto\",\n width: \"80%\"\n },\n on: {\n \"before-open\": _vm.beforeFailedSearchModalClose\n }\n }, [_c(\"transition\", {\n attrs: {\n name: \"modal\"\n }\n }, [_c(\"div\", {\n staticClass: \"modal-mask\"\n }, [_c(\"div\", {\n staticClass: \"modal-wrapper\"\n }, [_c(\"div\", {\n staticClass: \"modal-content\"\n }, [_c(\"div\", {\n staticClass: \"modal-header\"\n }, [_vm._v(\"\\n Mark episode as failed and search?\\n \")]), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"modal-body\"\n }, [_c(\"p\", [_vm._v(\"Starting to search for the episode\")]), _vm._v(\" \"), _vm.failedSearchEpisodes && _vm.failedSearchEpisodes.length === 1 ? _c(\"p\", [_vm._v(\"Would you also like to mark episode \" + _vm._s(_vm.failedSearchEpisodes[0].slug) + ' as \"failed\"? This will make sure the episode cannot be downloaded again')]) : _vm.failedSearchEpisodes ? _c(\"p\", [_vm._v(\"Would you also like to mark episodes \" + _vm._s(_vm.failedSearchEpisodes.map(ep => ep.slug).join(\", \")) + ' as \"failed\"? This will make sure the episode cannot be downloaded again')]) : _vm._e()]), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"modal-footer\"\n }, [_c(\"button\", {\n staticClass: \"btn-medusa btn-danger\",\n attrs: {\n type: \"button\",\n \"data-dismiss\": \"modal\"\n },\n on: {\n click: function ($event) {\n _vm.search(_vm.failedSearchEpisodes, \"backlog\");\n _vm.$modal.hide(\"query-mark-failed-and-search\");\n }\n }\n }, [_vm._v(\"No\")]), _vm._v(\" \"), _c(\"button\", {\n staticClass: \"btn-medusa btn-success\",\n attrs: {\n type: \"button\",\n \"data-dismiss\": \"modal\"\n },\n on: {\n click: function ($event) {\n _vm.search(_vm.failedSearchEpisodes, \"failed\");\n _vm.$modal.hide(\"query-mark-failed-and-search\");\n }\n }\n }, [_vm._v(\"Yes\")]), _vm._v(\" \"), _c(\"button\", {\n staticClass: \"btn-medusa btn-danger\",\n attrs: {\n type: \"button\",\n \"data-dismiss\": \"modal\"\n },\n on: {\n click: function ($event) {\n return _vm.$modal.hide(\"query-mark-failed-and-search\");\n }\n }\n }, [_vm._v(\"Cancel\")])])])])])])], 1)], 1);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n\n\n//# sourceURL=webpack://slim/./src/components/display-show.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-1!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet%5B1%5D.rules%5B2%5D!./node_modules/vue-loader/lib/index.js??vue-loader-options"); /***/ }), @@ -2391,7 +2402,18 @@ 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 render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"show-results-wrapper\"\n }, [_c(\"div\", {\n staticClass: \"row horizontal-scroll\"\n }, [_c(\"div\", {\n staticClass: \"col-md-12 top-15\"\n }, [_c(\"div\", {\n staticClass: \"button-row\"\n }, [_c(\"input\", {\n staticClass: \"btn-medusa manualSearchButton top-5 bottom-5\",\n attrs: {\n type: \"button\",\n value: \"Refresh Results\"\n },\n on: {\n click: _vm.getProviderResults\n }\n }), _vm._v(\" \"), _c(\"input\", {\n staticClass: \"btn-medusa manualSearchButton top-5 bottom-5\",\n attrs: {\n type: \"button\",\n value: \"Force Search\"\n },\n on: {\n click: _vm.forceSearch\n }\n }), _vm._v(\" \"), _vm.loading ? [_c(\"state-switch\", {\n attrs: {\n state: \"loading\"\n }\n }), _vm._v(\" \"), _c(\"span\", [_vm._v(_vm._s(_vm.loadingMessage))])] : _vm._e()], 2), _vm._v(\" \"), _c(\"vue-good-table\", {\n directives: [{\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.show.id.slug,\n expression: \"show.id.slug\"\n }],\n ref: \"vgt-show-results\",\n attrs: {\n columns: _vm.columns,\n rows: _vm.combinedResults,\n \"search-options\": {\n enabled: false\n },\n \"sort-options\": {\n enabled: true,\n initialSortBy: _vm.getSortBy(\"quality\", \"desc\")\n },\n \"column-filter-options\": {\n enabled: true\n },\n \"row-style-class\": _vm.rowStyleClassFn,\n styleClass: \"vgt-table condensed\",\n \"pagination-options\": {\n enabled: true,\n perPage: _vm.getPaginationPerPage(),\n perPageDropdown: _vm.perPageDropdown\n }\n },\n on: {\n \"on-per-page-change\": function ($event) {\n return _vm.updatePaginationPerPage($event.currentPerPage);\n },\n \"on-sort-change\": _vm.saveSorting\n },\n scopedSlots: _vm._u([{\n key: \"table-row\",\n fn: function (props) {\n return [props.column.label === \"Provider\" ? _c(\"span\", {\n staticClass: \"align-center\"\n }, [_c(\"img\", {\n directives: [{\n name: \"tooltip\",\n rawName: \"v-tooltip.right\",\n value: props.row.provider.name,\n expression: \"props.row.provider.name\",\n modifiers: {\n right: true\n }\n }],\n attrs: {\n src: `images/providers/${props.row.provider.imageName}`,\n alt: props.row.provider.name,\n width: \"16\",\n title: props.row.provider.name,\n onError: \"this.onerror=null;this.src='images/providers/missing.png';\"\n }\n })]) : props.column.label === \"Quality\" ? _c(\"span\", {\n staticClass: \"align-center\"\n }, [props.row.quality !== 0 ? _c(\"quality-pill\", {\n attrs: {\n quality: props.row.quality\n }\n }) : _vm._e()], 1) : props.column.label === \"Seeds\" ? _c(\"span\", {\n staticClass: \"align-center\"\n }, [_vm._v(\"\\n \" + _vm._s(props.row.seeders !== -1 ? props.row.seeders : \"-\") + \"\\n \")]) : props.column.label === \"Peers\" ? _c(\"span\", {\n staticClass: \"align-center\"\n }, [_vm._v(\"\\n \" + _vm._s(props.row.leechers !== -1 ? props.row.leechers : \"-\") + \"\\n \")]) : props.column.label === \"Added\" ? _c(\"span\", {\n staticClass: \"align-center\"\n }, [_vm._v(\"\\n \" + _vm._s(props.row.dateAdded ? _vm.fuzzyParseDateTime(props.row.dateAdded) : \"\") + \"\\n \")]) : props.column.label === \"Published\" ? _c(\"span\", {\n staticClass: \"align-center\"\n }, [_vm._v(\"\\n \" + _vm._s(props.row.pubdate ? _vm.fuzzyParseDateTime(props.row.pubdate) : \"\") + \"\\n \")]) : props.column.label === \"Updated\" ? _c(\"span\", {\n staticClass: \"align-center\"\n }, [_vm._v(\"\\n \" + _vm._s(props.row.time ? _vm.fuzzyParseDateTime(props.row.time) : \"\") + \"\\n \")]) : props.column.label == \"Snatch\" ? _c(\"span\", [_c(\"img\", {\n attrs: {\n src: \"images/download.png\",\n width: \"16\",\n height: \"16\",\n alt: \"snatch\",\n title: \"Download selected episode\",\n \"data-identifier\": props.row.identifier\n },\n on: {\n click: function ($event) {\n return _vm.snatchResult($event, props.row);\n }\n }\n })]) : _c(\"span\", [_vm._v(\"\\n \" + _vm._s(props.formattedRow[props.column.field]) + \"\\n \")])];\n }\n }])\n }, [_vm._v(\" \"), _c(\"div\", {\n attrs: {\n slot: \"emptystate\",\n id: \"no-result\"\n },\n slot: \"emptystate\"\n }, [_vm._v(\"\\n No search results available\\n \")])])], 1)])]);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n\n\n//# sourceURL=webpack://slim/./src/components/show-results.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-1!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet%5B1%5D.rules%5B2%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 */ render: () => (/* binding */ render),\n/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"show-results-wrapper\"\n }, [_c(\"div\", {\n staticClass: \"row horizontal-scroll\"\n }, [_c(\"div\", {\n staticClass: \"col-md-12 top-15\"\n }, [_c(\"div\", {\n staticClass: \"button-row\"\n }, [_c(\"input\", {\n staticClass: \"btn-medusa manualSearchButton top-5 bottom-5\",\n attrs: {\n type: \"button\",\n value: \"Refresh Results\"\n },\n on: {\n click: _vm.getProviderResults\n }\n }), _vm._v(\" \"), _c(\"input\", {\n staticClass: \"btn-medusa manualSearchButton top-5 bottom-5\",\n attrs: {\n type: \"button\",\n value: \"Force Search\"\n },\n on: {\n click: _vm.forceSearch\n }\n }), _vm._v(\" \"), _vm.loading ? [_c(\"state-switch\", {\n attrs: {\n state: \"loading\"\n }\n }), _vm._v(\" \"), _c(\"span\", [_vm._v(_vm._s(_vm.loadingMessage))])] : _vm._e()], 2), _vm._v(\" \"), _c(\"vue-good-table\", {\n directives: [{\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.show.id.slug,\n expression: \"show.id.slug\"\n }],\n ref: \"vgt-show-results\",\n attrs: {\n columns: _vm.columns,\n rows: _vm.combinedResults,\n \"search-options\": {\n enabled: false\n },\n \"sort-options\": {\n enabled: true,\n initialSortBy: _vm.getSortBy(\"quality\", \"desc\")\n },\n \"column-filter-options\": {\n enabled: true\n },\n \"row-style-class\": _vm.rowStyleClassFn,\n styleClass: \"vgt-table condensed\",\n \"pagination-options\": {\n enabled: true,\n perPage: _vm.getPaginationPerPage(),\n perPageDropdown: _vm.perPageDropdown\n }\n },\n on: {\n \"on-per-page-change\": function ($event) {\n return _vm.updatePaginationPerPage($event.currentPerPage);\n },\n \"on-sort-change\": _vm.saveSorting\n },\n scopedSlots: _vm._u([{\n key: \"table-row\",\n fn: function (props) {\n return [props.column.label === \"Provider\" ? _c(\"span\", {\n staticClass: \"align-center\"\n }, [_c(\"img\", {\n directives: [{\n name: \"tooltip\",\n rawName: \"v-tooltip.right\",\n value: props.row.provider.name,\n expression: \"props.row.provider.name\",\n modifiers: {\n right: true\n }\n }],\n attrs: {\n src: `images/providers/${props.row.provider.imageName}`,\n alt: props.row.provider.name,\n width: \"16\",\n title: props.row.provider.name,\n onError: \"this.onerror=null;this.src='images/providers/missing.png';\"\n }\n })]) : props.column.label === \"Group\" ? _c(\"span\", {\n staticClass: \"align-center release-group\"\n }, [_vm._v(\"\\n \" + _vm._s(props.row.releaseGroup) + \"\\n \"), _vm.show.config.anime && props.row.releaseGroup ? _c(\"manage-whitelist\", {\n attrs: {\n show: _vm.show,\n releaseGroup: props.row.releaseGroup\n }\n }) : _vm._e()], 1) : props.column.label === \"Quality\" ? _c(\"span\", {\n staticClass: \"align-center\"\n }, [props.row.quality !== 0 ? _c(\"quality-pill\", {\n attrs: {\n quality: props.row.quality\n }\n }) : _vm._e()], 1) : props.column.label === \"Seeds\" ? _c(\"span\", {\n staticClass: \"align-center\"\n }, [_vm._v(\"\\n \" + _vm._s(props.row.seeders !== -1 ? props.row.seeders : \"-\") + \"\\n \")]) : props.column.label === \"Peers\" ? _c(\"span\", {\n staticClass: \"align-center\"\n }, [_vm._v(\"\\n \" + _vm._s(props.row.leechers !== -1 ? props.row.leechers : \"-\") + \"\\n \")]) : props.column.label === \"Added\" ? _c(\"span\", {\n staticClass: \"align-center\"\n }, [_vm._v(\"\\n \" + _vm._s(props.row.dateAdded ? _vm.fuzzyParseDateTime(props.row.dateAdded) : \"\") + \"\\n \")]) : props.column.label === \"Published\" ? _c(\"span\", {\n staticClass: \"align-center\"\n }, [_vm._v(\"\\n \" + _vm._s(props.row.pubdate ? _vm.fuzzyParseDateTime(props.row.pubdate) : \"\") + \"\\n \")]) : props.column.label === \"Updated\" ? _c(\"span\", {\n staticClass: \"align-center\"\n }, [_vm._v(\"\\n \" + _vm._s(props.row.time ? _vm.fuzzyParseDateTime(props.row.time) : \"\") + \"\\n \")]) : props.column.label == \"Snatch\" ? _c(\"span\", [_c(\"img\", {\n attrs: {\n src: \"images/download.png\",\n width: \"16\",\n height: \"16\",\n alt: \"snatch\",\n title: \"Download selected episode\",\n \"data-identifier\": props.row.identifier\n },\n on: {\n click: function ($event) {\n return _vm.snatchResult($event, props.row);\n }\n }\n })]) : _c(\"span\", [_vm._v(\"\\n \" + _vm._s(props.formattedRow[props.column.field]) + \"\\n \")])];\n }\n }])\n }, [_vm._v(\" \"), _c(\"div\", {\n attrs: {\n slot: \"emptystate\",\n id: \"no-result\"\n },\n slot: \"emptystate\"\n }, [_vm._v(\"\\n No search results available\\n \")])])], 1)])]);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n\n\n//# sourceURL=webpack://slim/./src/components/show-results.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-1!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet%5B1%5D.rules%5B2%5D!./node_modules/vue-loader/lib/index.js??vue-loader-options"); + +/***/ }), + +/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-1!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/show-results/manage-whitelist.vue?vue&type=template&id=1e6eebc8&scoped=true&": +/*!*******************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-1!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/show-results/manage-whitelist.vue?vue&type=template&id=1e6eebc8&scoped=true& ***! + \*******************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__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 render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n attrs: {\n id: \"manage-whitelist-wrapper\"\n }\n }, [ true ? _c(\"img\", {\n attrs: {\n src: \"images/info32.png\",\n width: \"16\",\n height: \"16\",\n alt: \"\"\n },\n on: {\n click: function ($event) {\n _vm.open = !_vm.open;\n }\n }\n }) : 0, _vm._v(\" \"), _vm.open ? _c(\"div\", {\n staticClass: \"manage-whitelist-control-wrapper\"\n }, [_c(\"div\", {\n staticClass: \"title-header\"\n }, [_c(\"span\", {\n staticClass: \"title\"\n }, [_vm._v(_vm._s(_vm.releaseGroup))]), _vm._v(\" \"), _c(\"svg\", {\n staticClass: \"manage-whitelist-close\",\n on: {\n click: function ($event) {\n _vm.open = !_vm.open;\n }\n }\n }, [_c(\"use\", {\n attrs: {\n \"xlink:href\": \"images/svg/close.svg#close\"\n }\n })])]), _vm._v(\" \"), _c(\"form\", [_c(\"button\", {\n on: {\n click: function ($event) {\n $event.preventDefault();\n return _vm.addToWhitelist.apply(null, arguments);\n }\n }\n }, [_vm._v(\"Add to whitelist\")]), _vm._v(\" \"), _c(\"button\", {\n on: {\n click: function ($event) {\n $event.preventDefault();\n return _vm.removeFromWhitelist.apply(null, arguments);\n }\n }\n }, [_vm._v(\"Remove from whitelist\")]), _vm._v(\" \"), _c(\"button\", {\n on: {\n click: function ($event) {\n $event.preventDefault();\n return _vm.addToBlacklist.apply(null, arguments);\n }\n }\n }, [_vm._v(\"Add to blacklist\")]), _vm._v(\" \"), _c(\"button\", {\n on: {\n click: function ($event) {\n $event.preventDefault();\n return _vm.removeFromBlacklist.apply(null, arguments);\n }\n }\n }, [_vm._v(\"Remove from blacklist\")])])]) : _vm._e()]);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n\n\n//# sourceURL=webpack://slim/./src/components/show-results/manage-whitelist.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-1!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet%5B1%5D.rules%5B2%5D!./node_modules/vue-loader/lib/index.js??vue-loader-options"); /***/ }), @@ -3106,7 +3128,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_1__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n/* harmony import */ var _mutation_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../mutation-types */ \"./src/store/mutation-types.js\");\n\n\n\n/**\n * @typedef {object} ShowIdentifier\n * @property {string} indexer The indexer name (e.g. `tvdb`)\n * @property {number} id The show ID on the indexer (e.g. `12345`)\n */\n\nconst state = {\n shows: [],\n currentShow: {\n showSlug: null\n },\n loading: {\n total: null,\n current: null,\n display: false,\n finished: false\n },\n queueitems: []\n};\nconst mutations = {\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOW](state, show) {\n const existingShow = state.shows.find(_ref => {\n let {\n id,\n indexer\n } = _ref;\n return Number(show.id[show.indexer]) === Number(id[indexer]);\n });\n if (!existingShow) {\n console.debug(`Adding ${show.title || show.indexer + String(show.id)} as it wasn't found in the shows array`, show);\n state.shows.push(show);\n return;\n }\n\n // Merge new show object over old one\n // this allows detailed queries to update the record\n // without the non-detailed removing the extra data\n console.debug(`Found ${show.title || show.indexer + String(show.id)} in shows array attempting merge`);\n const newShow = {\n ...existingShow,\n ...show\n };\n\n // Repair the searchTemplates\n newShow.config.searchTemplates = show.config.searchTemplates ? show.config.searchTemplates : existingShow.config.searchTemplates;\n\n // Update state\n vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"].set(state.shows, state.shows.indexOf(existingShow), newShow);\n console.debug(`Merged ${newShow.title || newShow.indexer + String(newShow.id)}`, newShow);\n },\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOWS](state, shows) {\n // If the show is already available, we only want to merge values\n const mergedShows = [];\n for (const newShow of shows) {\n const existing = state.shows.find(stateShow => stateShow.id.slug === newShow.id.slug);\n if (existing) {\n const {\n sceneAbsoluteNumbering,\n xemAbsoluteNumbering,\n sceneNumbering,\n ...showWithoutDetailed\n } = newShow;\n\n // Repair searchTemplates.\n const mergedShow = {\n ...existing,\n ...showWithoutDetailed\n };\n mergedShow.config.searchTemplates = showWithoutDetailed.config.searchTemplates ? showWithoutDetailed.config.searchTemplates : existing.config.searchTemplates;\n mergedShows.push(mergedShow);\n } else {\n mergedShows.push(newShow);\n }\n }\n state.shows = mergedShows;\n console.debug(`Added ${shows.length} shows to store`);\n },\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOW_CONFIG](state, _ref2) {\n let {\n show,\n config\n } = _ref2;\n const existingShow = state.shows.find(_ref3 => {\n let {\n id,\n indexer\n } = _ref3;\n return Number(show.id[show.indexer]) === Number(id[indexer]);\n });\n existingShow.config = {\n ...existingShow.config,\n ...config\n };\n },\n currentShow(state, showSlug) {\n state.currentShow.showSlug = showSlug;\n },\n setLoadingTotal(state, total) {\n state.loading.total = total;\n },\n setLoadingCurrent(state, current) {\n state.loading.current = current;\n },\n updateLoadingCurrent(state, current) {\n state.loading.current += current;\n },\n setLoadingDisplay(state, display) {\n state.loading.display = display;\n },\n setLoadingFinished(state, finished) {\n state.loading.finished = finished;\n },\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOW_EPISODE](state, _ref4) {\n let {\n show,\n episodes\n } = _ref4;\n // Creating a new show object (from the state one) as we want to trigger a store update\n const newShow = Object.assign({}, state.shows.find(_ref5 => {\n let {\n id,\n indexer\n } = _ref5;\n return Number(show.id[show.indexer]) === Number(id[indexer]);\n }));\n if (!newShow.seasons) {\n newShow.seasons = [];\n }\n\n // Recreate an Array with season objects, with each season having an episodes array.\n // This format is used by vue-good-table (displayShow).\n episodes.forEach(episode => {\n let existingSeason = newShow.seasons.find(season => season.season === episode.season);\n if (existingSeason) {\n // Shallow copy\n existingSeason = {\n ...existingSeason\n };\n const foundIndex = existingSeason.children.findIndex(element => element.slug === episode.slug);\n if (foundIndex === -1) {\n existingSeason.children.push(episode);\n } else {\n existingSeason.children.splice(foundIndex, 1, episode);\n }\n } else {\n const newSeason = {\n season: episode.season,\n children: [],\n html: false,\n mode: 'span',\n label: 1\n };\n newShow.seasons.push(newSeason);\n newSeason.children.push(episode);\n }\n });\n\n // Update state\n const existingShow = state.shows.find(_ref6 => {\n let {\n id,\n indexer\n } = _ref6;\n return Number(show.id[show.indexer]) === Number(id[indexer]);\n });\n vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"].set(state.shows, state.shows.indexOf(existingShow), newShow);\n console.log(`Storing episodes for show ${newShow.title} seasons: ${[...new Set(episodes.map(episode => episode.season))].join(', ')}`);\n },\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOW_SCENE_EXCEPTION](state, _ref7) {\n let {\n show,\n exception\n } = _ref7;\n // Get current show object\n const currentShow = Object.assign({}, state.shows.find(_ref8 => {\n let {\n id,\n indexer\n } = _ref8;\n return Number(show.id[show.indexer]) === Number(id[indexer]);\n }));\n if (currentShow.config.aliases.find(e => e.title === exception.title && e.season === exception.season)) {\n console.warn(`Can't add exception ${exception.title} with season ${exception.season} to show ${currentShow.title} as it already exists.`);\n return;\n }\n currentShow.config.aliases.push(exception);\n },\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.REMOVE_SHOW_SCENE_EXCEPTION](state, _ref9) {\n let {\n show,\n exception\n } = _ref9;\n // Get current show object\n const currentShow = Object.assign({}, state.shows.find(_ref10 => {\n let {\n id,\n indexer\n } = _ref10;\n return Number(show.id[show.indexer]) === Number(id[indexer]);\n }));\n if (!currentShow.config.aliases.find(e => e.title === exception.title && e.season === exception.season)) {\n console.warn(`Can't remove exception ${exception.title} with season ${exception.season} to show ${currentShow.title} as it does not exist.`);\n return;\n }\n currentShow.config.aliases.splice(currentShow.config.aliases.indexOf(exception), 1);\n },\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOW_QUEUE_ITEM](state, queueItem) {\n const existingQueueItem = state.queueitems.find(item => item.identifier === queueItem.identifier);\n if (existingQueueItem) {\n vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"].set(state.queueitems, state.queueitems.indexOf(existingQueueItem), {\n ...existingQueueItem,\n ...queueItem\n });\n } else {\n vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"].set(state.queueitems, state.queueitems.length, queueItem);\n }\n },\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOW_CONFIG_TEMPLATE](state, _ref11) {\n let {\n show,\n template\n } = _ref11;\n // Get current show object\n const currentShow = Object.assign({}, state.shows.find(_ref12 => {\n let {\n id,\n indexer\n } = _ref12;\n return Number(show.id[show.indexer]) === Number(id[indexer]);\n }));\n if (currentShow.config.searchTemplates.find(t => t.template === template.pattern)) {\n console.warn(`Can't add template (${template.pattern} to show ${currentShow.title} as it already exists.`);\n return;\n }\n currentShow.config.searchTemplates.push(template);\n },\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.REMOVE_SHOW_CONFIG_TEMPLATE](state, _ref13) {\n let {\n show,\n template\n } = _ref13;\n // Get current show object\n const currentShow = Object.assign({}, state.shows.find(_ref14 => {\n let {\n id,\n indexer\n } = _ref14;\n return Number(show.id[show.indexer]) === Number(id[indexer]);\n }));\n if (template.id) {\n currentShow.config.searchTemplates = currentShow.config.searchTemplates.filter(t => t.id !== template.id);\n return;\n }\n currentShow.config.searchTemplates = currentShow.config.searchTemplates.filter(t => !(t.title === template.title && t.season === template.season && t.template === template.template));\n },\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.REMOVE_SHOW](state, removedShow) {\n state.shows = state.shows.filter(existingShow => removedShow.id.slug !== existingShow.id.slug);\n },\n loadShowsFromStore(state, namespace) {\n // Check if the ID exists\n // Update (namespaced) localStorage\n if (localStorage.getItem('shows')) {\n vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"].set(state, 'shows', JSON.parse(localStorage.getItem(`${namespace}shows`)));\n }\n }\n};\nconst getters = {\n getShowById: state => {\n /**\n * Get a show from the loaded shows state, identified by show slug.\n *\n * @param {string} showSlug Show identifier.\n * @returns {object|undefined} Show object or undefined if not found.\n */\n const getShowById = showSlug => state.shows.find(show => show.id.slug === showSlug);\n return getShowById;\n },\n getShowByTitle: state => title => state.shows.find(show => show.title === title),\n getSeason: state => _ref15 => {\n let {\n showSlug,\n season\n } = _ref15;\n const show = state.shows.find(show => show.id.slug === showSlug);\n return show && show.seasons ? show.seasons[season] : undefined;\n },\n getEpisode: state => _ref16 => {\n let {\n showSlug,\n season,\n episode\n } = _ref16;\n const show = state.shows.find(show => show.id.slug === showSlug);\n return show && show.seasons && show.seasons.find(s => s.season === season) ? show.seasons.find(s => s.season === season).children.find(ep => ep.episode === episode) : undefined;\n },\n getCurrentShow: (state, _, rootState) => {\n return state.shows.find(show => show.id.slug === state.currentShow.showSlug) || rootState.defaults.show;\n },\n getShowIndexerUrl: (state, getters, rootState) => show => {\n const indexerConfig = rootState.config.indexers.indexers;\n if (!show.indexer || !indexerConfig[show.indexer]) {\n return;\n }\n const id = show.id[show.indexer];\n const indexerUrl = indexerConfig[show.indexer].showUrl;\n if (show.indexer === 'imdb') {\n return `${indexerUrl}${String(id).padStart(7, '0')}`;\n }\n return `${indexerUrl}${id}`;\n },\n showsWithStats: (state, getters, rootState) => {\n if (!state.shows) {\n return [];\n }\n return state.shows.map(show => {\n let showStats = rootState.stats.show.stats.find(stat => stat.indexerId === getters.indexerNameToId(show.indexer) && stat.seriesId === show.id[show.indexer]);\n const newLine = '\\u000D';\n let text = 'Unaired';\n let title = '';\n if (!showStats) {\n showStats = {\n epDownloaded: 0,\n epSnatched: 0,\n epTotal: 0,\n seriesSize: 0\n };\n }\n if (showStats.epTotal >= 1) {\n text = showStats.epDownloaded;\n title = `Downloaded: ${showStats.epDownloaded}`;\n if (showStats.epSnatched) {\n text += `+${showStats.epSnatched}`;\n title += `${newLine}Snatched: ${showStats.epSnatched}`;\n }\n text += ` / ${showStats.epTotal}`;\n title += `${newLine}Total: ${showStats.epTotal}`;\n }\n show.stats = {\n episodes: {\n total: showStats.epTotal,\n snatched: showStats.epSnatched,\n downloaded: showStats.epDownloaded,\n size: showStats.seriesSize\n },\n tooltip: {\n text,\n title,\n percentage: showStats.epDownloaded * 100 / (showStats.epTotal || 1)\n }\n };\n return show;\n });\n },\n showsInLists: (state, getters, rootState) => {\n const {\n layout,\n general\n } = rootState.config;\n const {\n show\n } = layout;\n const {\n showListOrder\n } = show;\n const {\n rootDirs\n } = general;\n const {\n selectedRootIndex,\n local\n } = layout;\n const {\n showFilterByName\n } = local;\n const {\n showsWithStats\n } = getters;\n let shows = null;\n\n // Filter root dirs\n shows = showsWithStats.filter(show => selectedRootIndex === -1 || show.config.location.includes(rootDirs.slice(1)[selectedRootIndex]));\n\n // Filter by text for the banner, simple and smallposter layouts.\n // The Poster layout uses vue-isotope and this does not respond well to changes to the `list` property.\n if (layout.home !== 'poster') {\n shows = shows.filter(show => show.title.toLowerCase().includes(showFilterByName.toLowerCase()));\n }\n const categorizedShows = showListOrder.filter(listTitle => shows.filter(show => show.config.showLists.map(list => list.toLowerCase()).includes(listTitle.toLowerCase())).length > 0).map(listTitle => ({\n listTitle,\n shows: shows.filter(show => show.config.showLists.map(list => list.toLowerCase()).includes(listTitle.toLowerCase()))\n }));\n\n // Check for shows that are not in any category anymore\n const uncategorizedShows = shows.filter(show => {\n return show.config.showLists.map(item => {\n return showListOrder.map(list => list.toLowerCase()).includes(item.toLowerCase());\n }).every(item => !item);\n });\n if (uncategorizedShows.length > 0) {\n categorizedShows.push({\n listTitle: 'uncategorized',\n shows: uncategorizedShows\n });\n }\n if (categorizedShows.length === 0 && uncategorizedShows.length === 0) {\n categorizedShows.push({\n listTitle: 'Series',\n shows: []\n });\n }\n return categorizedShows;\n }\n};\n\n/**\n * An object representing request parameters for getting a show from the API.\n *\n * @typedef {object} ShowGetParameters\n * @property {boolean} detailed Fetch detailed information? (e.g. scene/xem numbering)\n * @property {boolean} episodes Fetch seasons & episodes?\n */\n\nconst actions = {\n /**\n * Get show from API and commit it to the store.\n *\n * @param {*} context The store context.\n * @param {ShowIdentifier&ShowGetParameters} parameters Request parameters.\n * @returns {Promise} The API response.\n */\n getShow(_ref17, _ref18) {\n let {\n rootState,\n commit\n } = _ref17;\n let {\n showSlug,\n detailed,\n episodes\n } = _ref18;\n return new Promise((resolve, reject) => {\n const params = {};\n let timeout = 30000;\n if (detailed !== undefined) {\n params.detailed = detailed;\n timeout = 60000;\n timeout = 60000;\n }\n if (episodes !== undefined) {\n params.episodes = episodes;\n timeout = 60000;\n }\n rootState.auth.client.api.get(`/series/${showSlug}`, {\n params,\n timeout\n }).then(res => {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOW, res.data);\n resolve(res.data);\n }).catch(error => {\n reject(error);\n });\n });\n },\n /**\n * Get episdoes for a specified show from API and commit it to the store.\n *\n * @param {*} context - The store context.\n * @param {ShowParameteres} parameters - Request parameters.\n * @returns {Promise} The API response.\n */\n getEpisodes(_ref19, _ref20) {\n let {\n rootState,\n commit,\n getters\n } = _ref19;\n let {\n showSlug,\n season\n } = _ref20;\n return new Promise((resolve, reject) => {\n const {\n getShowById\n } = getters;\n const show = getShowById(showSlug);\n const limit = 1000;\n const params = {\n limit\n };\n if (season !== undefined) {\n params.season = season;\n }\n\n // Get episodes\n rootState.auth.client.api.get(`/series/${showSlug}/episodes`, {\n params\n }).then(response => {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOW_EPISODE, {\n show,\n episodes: response.data\n });\n resolve();\n }).catch(error => {\n console.log(`Could not retrieve a episodes for show ${showSlug}, error: ${error}`);\n reject(error);\n });\n });\n },\n /**\n * Get shows from API and commit them to the store.\n *\n * @param {*} context - The store context.\n * @param {(ShowIdentifier&ShowGetParameters)[]} shows Shows to get. If not provided, gets the first 1k shows.\n * @returns {undefined|Promise} undefined if `shows` was provided or the API response if not.\n */\n getShows(context, shows) {\n const {\n commit,\n dispatch,\n state,\n rootState\n } = context;\n\n // If no shows are provided get the first 1000\n if (shows) {\n // Return a specific show list. (not used afaik).\n return shows.forEach(show => dispatch('getShow', show));\n }\n return new Promise((resolve, _) => {\n // Loading new shows, commit show loading information to state.\n commit('setLoadingTotal', 0);\n commit('setLoadingCurrent', 0);\n commit('setLoadingDisplay', true);\n const limit = 1000;\n const page = 1;\n const params = {\n limit,\n page\n };\n const pageRequests = [];\n const newShows = [];\n\n // Get first page\n pageRequests.push(rootState.auth.client.api.get('/series', {\n params\n }).then(response => {\n commit('setLoadingTotal', Number(response.headers['x-pagination-count']));\n const totalPages = Number(response.headers['x-pagination-total']);\n newShows.push(...response.data);\n commit('updateLoadingCurrent', response.data.length);\n\n // Optionally get additional pages\n for (let page = 2; page <= totalPages; page++) {\n pageRequests.push(new Promise((resolve, reject) => {\n const newPage = {\n page\n };\n newPage.limit = params.limit;\n return rootState.auth.client.api.get('/series', {\n params: newPage\n }).then(response => {\n newShows.push(...response.data);\n commit('updateLoadingCurrent', response.data.length);\n resolve();\n }).catch(error => {\n reject(error);\n });\n }));\n }\n }).catch(() => {\n console.log('Could not retrieve a list of shows');\n }).finally(() => {\n Promise.all(pageRequests).then(() => {\n // Commit all the found shows to store.\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOWS, newShows);\n\n // Update (namespaced) localStorage\n const namespace = rootState.config.system.webRoot ? `${rootState.config.system.webRoot}_` : '';\n try {\n localStorage.setItem(`${namespace}shows`, JSON.stringify(state.shows));\n } catch (error) {\n console.warn(error);\n }\n resolve();\n });\n }));\n });\n },\n setShow(_ref21, _ref22) {\n let {\n rootState\n } = _ref21;\n let {\n showSlug,\n data\n } = _ref22;\n // Update show, updated show will arrive over a WebSocket message\n return rootState.auth.client.api.patch(`series/${showSlug}`, data);\n },\n updateShow(context, show) {\n // Update local store\n const {\n commit\n } = context;\n return commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOW, show);\n },\n addSceneException(context, _ref23) {\n let {\n show,\n exception\n } = _ref23;\n const {\n commit\n } = context;\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOW_SCENE_EXCEPTION, {\n show,\n exception\n });\n },\n removeSceneException(context, _ref24) {\n let {\n show,\n exception\n } = _ref24;\n const {\n commit\n } = context;\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.REMOVE_SHOW_SCENE_EXCEPTION, {\n show,\n exception\n });\n },\n setCurrentShow(context, showSlug) {\n return new Promise(resolve => {\n // Set current show\n const {\n commit\n } = context;\n commit('currentShow', showSlug);\n resolve();\n });\n },\n setShowConfig(context, _ref25) {\n let {\n show,\n config\n } = _ref25;\n const {\n commit\n } = context;\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOW_CONFIG, {\n show,\n config\n });\n },\n removeShow(_ref26, show) {\n let {\n commit,\n rootState,\n state\n } = _ref26;\n // Remove the show from store and localStorage (provided through websocket)\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.REMOVE_SHOW, show);\n\n // Update recentShows.\n rootState.config.general.recentShows = rootState.config.general.recentShows.filter(recentShow => recentShow.showSlug !== show.id.slug);\n const config = {\n recentShows: rootState.config.general.recentShows\n };\n rootState.auth.client.api.patch('config/main', config);\n\n // Update (namespaced) localStorage\n const namespace = rootState.config.system.webRoot ? `${rootState.config.system.webRoot}_` : '';\n try {\n localStorage.setItem(`${namespace}shows`, JSON.stringify(state.shows));\n } catch (error) {\n console.warn(error);\n }\n },\n updateShowQueueItem(context, queueItem) {\n // Update store's search queue item. (provided through websocket)\n const {\n commit\n } = context;\n return commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOW_QUEUE_ITEM, queueItem);\n },\n addSearchTemplate(_ref27, _ref28) {\n let {\n rootState,\n getters,\n commit\n } = _ref27;\n let {\n show,\n template\n } = _ref28;\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOW_CONFIG_TEMPLATE, {\n show,\n template\n });\n const data = {\n config: {\n searchTemplates: getters.getCurrentShow.config.searchTemplates\n }\n };\n return rootState.auth.client.api.patch(`series/${show.indexer}${show.id[show.indexer]}`, data);\n },\n removeSearchTemplate(_ref29, _ref30) {\n let {\n rootState,\n getters,\n commit\n } = _ref29;\n let {\n show,\n template\n } = _ref30;\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.REMOVE_SHOW_CONFIG_TEMPLATE, {\n show,\n template\n });\n const data = {\n config: {\n searchTemplates: getters.getCurrentShow.config.searchTemplates\n }\n };\n return rootState.auth.client.api.patch(`series/${show.indexer}${show.id[show.indexer]}`, data);\n },\n initShowsFromLocalStorage(_ref31) {\n let {\n rootState,\n commit\n } = _ref31;\n const namespace = rootState.config.system.webRoot ? `${rootState.config.system.webRoot}_` : '';\n return commit('loadShowsFromStore', namespace);\n },\n updateEpisode(_ref32, episode) {\n let {\n state,\n commit\n } = _ref32;\n const show = state.shows.find(_ref33 => {\n let {\n id\n } = _ref33;\n return id.slug === episode.showSlug;\n });\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOW_EPISODE, {\n show,\n episodes: [episode]\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/shows.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_1__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n/* harmony import */ var _mutation_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../mutation-types */ \"./src/store/mutation-types.js\");\n\n\n\n/**\n * @typedef {object} ShowIdentifier\n * @property {string} indexer The indexer name (e.g. `tvdb`)\n * @property {number} id The show ID on the indexer (e.g. `12345`)\n */\n\nconst state = {\n shows: [],\n currentShow: {\n showSlug: null\n },\n loading: {\n total: null,\n current: null,\n display: false,\n finished: false\n },\n queueitems: []\n};\nconst mutations = {\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOW](state, show) {\n const existingShow = state.shows.find(_ref => {\n let {\n id,\n indexer\n } = _ref;\n return Number(show.id[show.indexer]) === Number(id[indexer]);\n });\n if (!existingShow) {\n console.debug(`Adding ${show.title || show.indexer + String(show.id)} as it wasn't found in the shows array`, show);\n state.shows.push(show);\n return;\n }\n\n // Merge new show object over old one\n // this allows detailed queries to update the record\n // without the non-detailed removing the extra data\n console.debug(`Found ${show.title || show.indexer + String(show.id)} in shows array attempting merge`);\n const newShow = {\n ...existingShow,\n ...show\n };\n\n // Repair the searchTemplates\n newShow.config.searchTemplates = show.config.searchTemplates ? show.config.searchTemplates : existingShow.config.searchTemplates;\n\n // Update state\n vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"].set(state.shows, state.shows.indexOf(existingShow), newShow);\n console.debug(`Merged ${newShow.title || newShow.indexer + String(newShow.id)}`, newShow);\n },\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOWS](state, shows) {\n // If the show is already available, we only want to merge values\n const mergedShows = [];\n for (const newShow of shows) {\n const existing = state.shows.find(stateShow => stateShow.id.slug === newShow.id.slug);\n if (existing) {\n const {\n sceneAbsoluteNumbering,\n xemAbsoluteNumbering,\n sceneNumbering,\n ...showWithoutDetailed\n } = newShow;\n\n // Repair searchTemplates.\n const mergedShow = {\n ...existing,\n ...showWithoutDetailed\n };\n mergedShow.config.searchTemplates = showWithoutDetailed.config.searchTemplates ? showWithoutDetailed.config.searchTemplates : existing.config.searchTemplates;\n mergedShows.push(mergedShow);\n } else {\n mergedShows.push(newShow);\n }\n }\n state.shows = mergedShows;\n console.debug(`Added ${shows.length} shows to store`);\n },\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOW_CONFIG](state, _ref2) {\n let {\n show,\n config\n } = _ref2;\n const existingShow = state.shows.find(_ref3 => {\n let {\n id,\n indexer\n } = _ref3;\n return Number(show.id[show.indexer]) === Number(id[indexer]);\n });\n existingShow.config = {\n ...existingShow.config,\n ...config\n };\n },\n currentShow(state, showSlug) {\n state.currentShow.showSlug = showSlug;\n },\n setLoadingTotal(state, total) {\n state.loading.total = total;\n },\n setLoadingCurrent(state, current) {\n state.loading.current = current;\n },\n updateLoadingCurrent(state, current) {\n state.loading.current += current;\n },\n setLoadingDisplay(state, display) {\n state.loading.display = display;\n },\n setLoadingFinished(state, finished) {\n state.loading.finished = finished;\n },\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOW_EPISODE](state, _ref4) {\n let {\n show,\n episodes\n } = _ref4;\n // Creating a new show object (from the state one) as we want to trigger a store update\n const newShow = Object.assign({}, state.shows.find(_ref5 => {\n let {\n id,\n indexer\n } = _ref5;\n return Number(show.id[show.indexer]) === Number(id[indexer]);\n }));\n if (!newShow.seasons) {\n newShow.seasons = [];\n }\n\n // Recreate an Array with season objects, with each season having an episodes array.\n // This format is used by vue-good-table (displayShow).\n episodes.forEach(episode => {\n let existingSeason = newShow.seasons.find(season => season.season === episode.season);\n if (existingSeason) {\n // Shallow copy\n existingSeason = {\n ...existingSeason\n };\n const foundIndex = existingSeason.children.findIndex(element => element.slug === episode.slug);\n if (foundIndex === -1) {\n existingSeason.children.push(episode);\n } else {\n existingSeason.children.splice(foundIndex, 1, episode);\n }\n } else {\n const newSeason = {\n season: episode.season,\n children: [],\n html: false,\n mode: 'span',\n label: 1\n };\n newShow.seasons.push(newSeason);\n newSeason.children.push(episode);\n }\n });\n\n // Update state\n const existingShow = state.shows.find(_ref6 => {\n let {\n id,\n indexer\n } = _ref6;\n return Number(show.id[show.indexer]) === Number(id[indexer]);\n });\n vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"].set(state.shows, state.shows.indexOf(existingShow), newShow);\n console.log(`Storing episodes for show ${newShow.title} seasons: ${[...new Set(episodes.map(episode => episode.season))].join(', ')}`);\n },\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOW_SCENE_EXCEPTION](state, _ref7) {\n let {\n show,\n exception\n } = _ref7;\n // Get current show object\n const currentShow = Object.assign({}, state.shows.find(_ref8 => {\n let {\n id,\n indexer\n } = _ref8;\n return Number(show.id[show.indexer]) === Number(id[indexer]);\n }));\n if (currentShow.config.aliases.find(e => e.title === exception.title && e.season === exception.season)) {\n console.warn(`Can't add exception ${exception.title} with season ${exception.season} to show ${currentShow.title} as it already exists.`);\n return;\n }\n currentShow.config.aliases.push(exception);\n },\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.REMOVE_SHOW_SCENE_EXCEPTION](state, _ref9) {\n let {\n show,\n exception\n } = _ref9;\n // Get current show object\n const currentShow = Object.assign({}, state.shows.find(_ref10 => {\n let {\n id,\n indexer\n } = _ref10;\n return Number(show.id[show.indexer]) === Number(id[indexer]);\n }));\n if (!currentShow.config.aliases.find(e => e.title === exception.title && e.season === exception.season)) {\n console.warn(`Can't remove exception ${exception.title} with season ${exception.season} to show ${currentShow.title} as it does not exist.`);\n return;\n }\n currentShow.config.aliases.splice(currentShow.config.aliases.indexOf(exception), 1);\n },\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOW_QUEUE_ITEM](state, queueItem) {\n const existingQueueItem = state.queueitems.find(item => item.identifier === queueItem.identifier);\n if (existingQueueItem) {\n vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"].set(state.queueitems, state.queueitems.indexOf(existingQueueItem), {\n ...existingQueueItem,\n ...queueItem\n });\n } else {\n vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"].set(state.queueitems, state.queueitems.length, queueItem);\n }\n },\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOW_CONFIG_TEMPLATE](state, _ref11) {\n let {\n show,\n template\n } = _ref11;\n // Get current show object\n const currentShow = Object.assign({}, state.shows.find(_ref12 => {\n let {\n id,\n indexer\n } = _ref12;\n return Number(show.id[show.indexer]) === Number(id[indexer]);\n }));\n if (currentShow.config.searchTemplates.find(t => t.template === template.pattern)) {\n console.warn(`Can't add template (${template.pattern} to show ${currentShow.title} as it already exists.`);\n return;\n }\n currentShow.config.searchTemplates.push(template);\n },\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.REMOVE_SHOW_CONFIG_TEMPLATE](state, _ref13) {\n let {\n show,\n template\n } = _ref13;\n // Get current show object\n const currentShow = Object.assign({}, state.shows.find(_ref14 => {\n let {\n id,\n indexer\n } = _ref14;\n return Number(show.id[show.indexer]) === Number(id[indexer]);\n }));\n if (template.id) {\n currentShow.config.searchTemplates = currentShow.config.searchTemplates.filter(t => t.id !== template.id);\n return;\n }\n currentShow.config.searchTemplates = currentShow.config.searchTemplates.filter(t => !(t.title === template.title && t.season === template.season && t.template === template.template));\n },\n [_mutation_types__WEBPACK_IMPORTED_MODULE_0__.REMOVE_SHOW](state, removedShow) {\n state.shows = state.shows.filter(existingShow => removedShow.id.slug !== existingShow.id.slug);\n },\n loadShowsFromStore(state, namespace) {\n // Check if the ID exists\n // Update (namespaced) localStorage\n if (localStorage.getItem('shows')) {\n vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"].set(state, 'shows', JSON.parse(localStorage.getItem(`${namespace}shows`)));\n }\n }\n};\nconst getters = {\n getShowById: state => {\n /**\n * Get a show from the loaded shows state, identified by show slug.\n *\n * @param {string} showSlug Show identifier.\n * @returns {object|undefined} Show object or undefined if not found.\n */\n const getShowById = showSlug => state.shows.find(show => show.id.slug === showSlug);\n return getShowById;\n },\n getShowByTitle: state => title => state.shows.find(show => show.title === title),\n getSeason: state => _ref15 => {\n let {\n showSlug,\n season\n } = _ref15;\n const show = state.shows.find(show => show.id.slug === showSlug);\n return show && show.seasons ? show.seasons[season] : undefined;\n },\n getEpisode: state => _ref16 => {\n let {\n showSlug,\n season,\n episode\n } = _ref16;\n const show = state.shows.find(show => show.id.slug === showSlug);\n return show && show.seasons && show.seasons.find(s => s.season === season) ? show.seasons.find(s => s.season === season).children.find(ep => ep.episode === episode) : undefined;\n },\n getCurrentShow: (state, _, rootState) => {\n return state.shows.find(show => show.id.slug === state.currentShow.showSlug) || rootState.defaults.show;\n },\n getShowIndexerUrl: (state, getters, rootState) => show => {\n const indexerConfig = rootState.config.indexers.indexers;\n if (!show.indexer || !indexerConfig[show.indexer]) {\n return;\n }\n const id = show.id[show.indexer];\n const indexerUrl = indexerConfig[show.indexer].showUrl;\n if (show.indexer === 'imdb') {\n return `${indexerUrl}${String(id).padStart(7, '0')}`;\n }\n return `${indexerUrl}${id}`;\n },\n showsWithStats: (state, getters, rootState) => {\n if (!state.shows) {\n return [];\n }\n return state.shows.map(show => {\n let showStats = rootState.stats.show.stats.find(stat => stat.indexerId === getters.indexerNameToId(show.indexer) && stat.seriesId === show.id[show.indexer]);\n const newLine = '\\u000D';\n let text = 'Unaired';\n let title = '';\n if (!showStats) {\n showStats = {\n epDownloaded: 0,\n epSnatched: 0,\n epTotal: 0,\n seriesSize: 0\n };\n }\n if (showStats.epTotal >= 1) {\n text = showStats.epDownloaded;\n title = `Downloaded: ${showStats.epDownloaded}`;\n if (showStats.epSnatched) {\n text += `+${showStats.epSnatched}`;\n title += `${newLine}Snatched: ${showStats.epSnatched}`;\n }\n text += ` / ${showStats.epTotal}`;\n title += `${newLine}Total: ${showStats.epTotal}`;\n }\n show.stats = {\n episodes: {\n total: showStats.epTotal,\n snatched: showStats.epSnatched,\n downloaded: showStats.epDownloaded,\n size: showStats.seriesSize\n },\n tooltip: {\n text,\n title,\n percentage: showStats.epDownloaded * 100 / (showStats.epTotal || 1)\n }\n };\n return show;\n });\n },\n showsInLists: (state, getters, rootState) => {\n const {\n layout,\n general\n } = rootState.config;\n const {\n show\n } = layout;\n const {\n showListOrder\n } = show;\n const {\n rootDirs\n } = general;\n const {\n selectedRootIndex,\n local\n } = layout;\n const {\n showFilterByName\n } = local;\n const {\n showsWithStats\n } = getters;\n let shows = null;\n\n // Filter root dirs\n shows = showsWithStats.filter(show => selectedRootIndex === -1 || show.config.location.includes(rootDirs.slice(1)[selectedRootIndex]));\n\n // Filter by text for the banner, simple and smallposter layouts.\n // The Poster layout uses vue-isotope and this does not respond well to changes to the `list` property.\n if (layout.home !== 'poster') {\n shows = shows.filter(show => show.title.toLowerCase().includes(showFilterByName.toLowerCase()));\n }\n const categorizedShows = showListOrder.filter(listTitle => shows.filter(show => show.config.showLists.map(list => list.toLowerCase()).includes(listTitle.toLowerCase())).length > 0).map(listTitle => ({\n listTitle,\n shows: shows.filter(show => show.config.showLists.map(list => list.toLowerCase()).includes(listTitle.toLowerCase()))\n }));\n\n // Check for shows that are not in any category anymore\n const uncategorizedShows = shows.filter(show => {\n return show.config.showLists.map(item => {\n return showListOrder.map(list => list.toLowerCase()).includes(item.toLowerCase());\n }).every(item => !item);\n });\n if (uncategorizedShows.length > 0) {\n categorizedShows.push({\n listTitle: 'uncategorized',\n shows: uncategorizedShows\n });\n }\n if (categorizedShows.length === 0 && uncategorizedShows.length === 0) {\n categorizedShows.push({\n listTitle: 'Series',\n shows: []\n });\n }\n return categorizedShows;\n }\n};\n\n/**\n * An object representing request parameters for getting a show from the API.\n *\n * @typedef {object} ShowGetParameters\n * @property {boolean} detailed Fetch detailed information? (e.g. scene/xem numbering)\n * @property {boolean} episodes Fetch seasons & episodes?\n */\n\nconst actions = {\n /**\n * Get show from API and commit it to the store.\n *\n * @param {*} context The store context.\n * @param {ShowIdentifier&ShowGetParameters} parameters Request parameters.\n * @returns {Promise} The API response.\n */\n getShow(_ref17, _ref18) {\n let {\n rootState,\n commit\n } = _ref17;\n let {\n showSlug,\n detailed,\n episodes\n } = _ref18;\n return new Promise((resolve, reject) => {\n const params = {};\n let timeout = 30000;\n if (detailed !== undefined) {\n params.detailed = detailed;\n timeout = 60000;\n timeout = 60000;\n }\n if (episodes !== undefined) {\n params.episodes = episodes;\n timeout = 60000;\n }\n rootState.auth.client.api.get(`/series/${showSlug}`, {\n params,\n timeout\n }).then(res => {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOW, res.data);\n resolve(res.data);\n }).catch(error => {\n reject(error);\n });\n });\n },\n /**\n * Get episdoes for a specified show from API and commit it to the store.\n *\n * @param {*} context - The store context.\n * @param {ShowParameteres} parameters - Request parameters.\n * @returns {Promise} The API response.\n */\n getEpisodes(_ref19, _ref20) {\n let {\n rootState,\n commit,\n getters\n } = _ref19;\n let {\n showSlug,\n season\n } = _ref20;\n return new Promise((resolve, reject) => {\n const {\n getShowById\n } = getters;\n const show = getShowById(showSlug);\n const limit = 1000;\n const params = {\n limit\n };\n if (season !== undefined) {\n params.season = season;\n }\n\n // Get episodes\n rootState.auth.client.api.get(`/series/${showSlug}/episodes`, {\n params\n }).then(response => {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOW_EPISODE, {\n show,\n episodes: response.data\n });\n resolve();\n }).catch(error => {\n console.log(`Could not retrieve a episodes for show ${showSlug}, error: ${error}`);\n reject(error);\n });\n });\n },\n /**\n * Get shows from API and commit them to the store.\n *\n * @param {*} context - The store context.\n * @param {(ShowIdentifier&ShowGetParameters)[]} shows Shows to get. If not provided, gets the first 1k shows.\n * @returns {undefined|Promise} undefined if `shows` was provided or the API response if not.\n */\n getShows(context, shows) {\n const {\n commit,\n dispatch,\n state,\n rootState\n } = context;\n\n // If no shows are provided get the first 1000\n if (shows) {\n // Return a specific show list. (not used afaik).\n return shows.forEach(show => dispatch('getShow', show));\n }\n return new Promise((resolve, _) => {\n // Loading new shows, commit show loading information to state.\n commit('setLoadingTotal', 0);\n commit('setLoadingCurrent', 0);\n commit('setLoadingDisplay', true);\n const limit = 1000;\n const page = 1;\n const params = {\n limit,\n page\n };\n const pageRequests = [];\n const newShows = [];\n\n // Get first page\n pageRequests.push(rootState.auth.client.api.get('/series', {\n params\n }).then(response => {\n commit('setLoadingTotal', Number(response.headers['x-pagination-count']));\n const totalPages = Number(response.headers['x-pagination-total']);\n newShows.push(...response.data);\n commit('updateLoadingCurrent', response.data.length);\n\n // Optionally get additional pages\n for (let page = 2; page <= totalPages; page++) {\n pageRequests.push(new Promise((resolve, reject) => {\n const newPage = {\n page\n };\n newPage.limit = params.limit;\n return rootState.auth.client.api.get('/series', {\n params: newPage\n }).then(response => {\n newShows.push(...response.data);\n commit('updateLoadingCurrent', response.data.length);\n resolve();\n }).catch(error => {\n reject(error);\n });\n }));\n }\n }).catch(() => {\n console.log('Could not retrieve a list of shows');\n }).finally(() => {\n Promise.all(pageRequests).then(() => {\n // Commit all the found shows to store.\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOWS, newShows);\n\n // Update (namespaced) localStorage\n const namespace = rootState.config.system.webRoot ? `${rootState.config.system.webRoot}_` : '';\n try {\n localStorage.setItem(`${namespace}shows`, JSON.stringify(state.shows));\n } catch (error) {\n console.warn(error);\n }\n resolve();\n });\n }));\n });\n },\n setShow(_ref21, _ref22) {\n let {\n rootState\n } = _ref21;\n let {\n showSlug,\n data\n } = _ref22;\n // Update show, updated show will arrive over a WebSocket message\n return rootState.auth.client.api.patch(`series/${showSlug}`, data);\n },\n updateShow(context, show) {\n // Update local store\n const {\n commit\n } = context;\n return commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOW, show);\n },\n addSceneException(context, _ref23) {\n let {\n show,\n exception\n } = _ref23;\n const {\n commit\n } = context;\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOW_SCENE_EXCEPTION, {\n show,\n exception\n });\n },\n removeSceneException(context, _ref24) {\n let {\n show,\n exception\n } = _ref24;\n const {\n commit\n } = context;\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.REMOVE_SHOW_SCENE_EXCEPTION, {\n show,\n exception\n });\n },\n setCurrentShow(context, showSlug) {\n return new Promise(resolve => {\n // Set current show\n const {\n commit\n } = context;\n commit('currentShow', showSlug);\n resolve();\n });\n },\n setShowConfig(context, _ref25) {\n let {\n show,\n config\n } = _ref25;\n const {\n commit\n } = context;\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOW_CONFIG, {\n show,\n config\n });\n },\n removeShow(_ref26, show) {\n let {\n commit,\n rootState,\n state\n } = _ref26;\n // Remove the show from store and localStorage (provided through websocket)\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.REMOVE_SHOW, show);\n\n // Update recentShows.\n rootState.config.general.recentShows = rootState.config.general.recentShows.filter(recentShow => recentShow.showSlug !== show.id.slug);\n const config = {\n recentShows: rootState.config.general.recentShows\n };\n rootState.auth.client.api.patch('config/main', config);\n\n // Update (namespaced) localStorage\n const namespace = rootState.config.system.webRoot ? `${rootState.config.system.webRoot}_` : '';\n try {\n localStorage.setItem(`${namespace}shows`, JSON.stringify(state.shows));\n } catch (error) {\n console.warn(error);\n }\n },\n updateShowQueueItem(context, queueItem) {\n // Update store's search queue item. (provided through websocket)\n const {\n commit\n } = context;\n return commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOW_QUEUE_ITEM, queueItem);\n },\n addSearchTemplate(_ref27, _ref28) {\n let {\n rootState,\n getters,\n commit\n } = _ref27;\n let {\n show,\n template\n } = _ref28;\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOW_CONFIG_TEMPLATE, {\n show,\n template\n });\n const data = {\n config: {\n searchTemplates: getters.getCurrentShow.config.searchTemplates\n }\n };\n return rootState.auth.client.api.patch(`series/${show.indexer}${show.id[show.indexer]}`, data);\n },\n removeSearchTemplate(_ref29, _ref30) {\n let {\n rootState,\n getters,\n commit\n } = _ref29;\n let {\n show,\n template\n } = _ref30;\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.REMOVE_SHOW_CONFIG_TEMPLATE, {\n show,\n template\n });\n const data = {\n config: {\n searchTemplates: getters.getCurrentShow.config.searchTemplates\n }\n };\n return rootState.auth.client.api.patch(`series/${show.indexer}${show.id[show.indexer]}`, data);\n },\n initShowsFromLocalStorage(_ref31) {\n let {\n rootState,\n commit\n } = _ref31;\n const namespace = rootState.config.system.webRoot ? `${rootState.config.system.webRoot}_` : '';\n return commit('loadShowsFromStore', namespace);\n },\n updateEpisode(_ref32, episode) {\n let {\n state,\n commit\n } = _ref32;\n const show = state.shows.find(_ref33 => {\n let {\n id\n } = _ref33;\n return id.slug === episode.showSlug;\n });\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_0__.ADD_SHOW_EPISODE, {\n show,\n episodes: [episode]\n });\n },\n saveShowConfig(_ref34, _ref35) {\n let {\n rootState\n } = _ref34;\n let {\n show\n } = _ref35;\n const showConfig = show.config;\n const data = {\n config: {\n aliases: showConfig.aliases,\n defaultEpisodeStatus: showConfig.defaultEpisodeStatus,\n dvdOrder: showConfig.dvdOrder,\n seasonFolders: showConfig.seasonFolders,\n anime: showConfig.anime,\n scene: showConfig.scene,\n sports: showConfig.sports,\n paused: showConfig.paused,\n location: showConfig.location,\n airByDate: showConfig.airByDate,\n subtitlesEnabled: showConfig.subtitlesEnabled,\n release: {\n requiredWords: showConfig.release.requiredWords,\n ignoredWords: showConfig.release.ignoredWords,\n requiredWordsExclude: showConfig.release.requiredWordsExclude,\n ignoredWordsExclude: showConfig.release.ignoredWordsExclude\n },\n qualities: {\n preferred: showConfig.qualities.preferred,\n allowed: showConfig.qualities.allowed\n },\n airdateOffset: showConfig.airdateOffset,\n showLists: showConfig.showLists,\n templates: showConfig.templates,\n searchTemplates: showConfig.searchTemplates\n },\n language: show.language\n };\n if (data.config.anime) {\n data.config.release.blacklist = showConfig.release.blacklist;\n data.config.release.whitelist = showConfig.release.whitelist;\n }\n return rootState.auth.client.api.patch(`series/${show.id.slug}`, data);\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/shows.js?"); /***/ }), @@ -3172,7 +3194,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: rgb(85, 85, 85);\n background-image: url(${___CSS_LOADER_URL_REPLACEMENT_0___});\n}\n.vgt-table-styling .vgt-table thead th.sorting.sorting-asc {\n background-color: rgb(85, 85, 85);\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: rgb(0, 0, 0);\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: rgb(190, 222, 237);\n}\n.vgt-table-styling .vgt-table .snatched {\n background-color: rgb(235, 193, 234);\n}\n.vgt-table-styling .vgt-table .downloaded {\n background-color: rgb(255, 218, 138);\n}\n.vgt-table-styling .vgt-table .failed {\n background-color: rgb(255, 153, 153);\n}\n.vgt-table-styling .vgt-table .subtitled {\n background-color: rgb(190, 222, 237);\n}\n.vgt-table-styling .vgt-table .archived {\n background-color: rgb(245, 241, 228);\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: rgb(255, 255, 255);\n padding: 1em;\n background-color: rgb(51, 51, 51);\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: rgb(245, 241, 228);\n}\n.vgt-table-styling .schedule tr.soon {\n background-color: rgb(221, 255, 221);\n}\n.vgt-table-styling .schedule tr.missed {\n background-color: rgb(255, 221, 221);\n}\n.vgt-table-styling .schedule tr.later {\n background-color: rgb(190, 222, 237);\n}\n.vgt-table-styling .schedule tr,\n.vgt-table-styling .schedule tr a {\n color: rgb(0, 0, 0);\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 rgb(17, 17, 17);\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: rgb(55, 55, 55);\n}\n.modal-content {\n background: rgb(34, 34, 34);\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: rgb(34, 34, 34);\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 rgb(204, 204, 204);\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"); +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: rgb(85, 85, 85);\n background-image: url(${___CSS_LOADER_URL_REPLACEMENT_0___});\n}\n.vgt-table-styling .vgt-table thead th.sorting.sorting-asc {\n background-color: rgb(85, 85, 85);\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 background-color: rgba(var(--row-background-color), 0.8);\n}\n.vgt-table-styling .vgt-table tr.status td > span {\n color: rgb(0, 0, 0);\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 --row-background-color: 190, 222, 237;\n background-color: rgb(var(--row-background-color));\n}\n.vgt-table-styling .vgt-table .snatched {\n --row-background-color: 235, 193, 234;\n background-color: rgb(var(--row-background-color));\n}\n.vgt-table-styling .vgt-table .downloaded {\n --row-background-color: 55, 218, 138;\n background-color: rgb(var(--row-background-color));\n}\n.vgt-table-styling .vgt-table .failed {\n --row-background-color: 255, 153, 153;\n background-color: rgb(var(--row-background-color));\n}\n.vgt-table-styling .vgt-table .subtitled {\n --row-background-color: 190, 222, 237;\n background-color: rgb(var(--row-background-color));\n}\n.vgt-table-styling .vgt-table .archived {\n --row-background-color: 245, 241, 228;\n background-color: rgb(var(--row-background-color));\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: rgb(255, 255, 255);\n padding: 1em;\n background-color: rgb(51, 51, 51);\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 --row-background-color: 245, 241, 228;\n background-color: rgb(var(--row-background-color));\n}\n.vgt-table-styling .schedule tr.soon {\n --row-background-color: 221, 255, 221;\n background-color: rgb(var(--row-background-color));\n}\n.vgt-table-styling .schedule tr.missed {\n --row-background-color: 255, 221, 221;\n background-color: rgb(var(--row-background-color));\n}\n.vgt-table-styling .schedule tr.later {\n --row-background-color: 190, 222, 237;\n background-color: rgb(var(--row-background-color));\n}\n.vgt-table-styling .schedule tr,\n.vgt-table-styling .schedule tr a {\n color: rgb(0, 0, 0);\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 rgb(17, 17, 17);\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: rgb(55, 55, 55);\n}\n.modal-content {\n background: rgb(34, 34, 34);\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: rgb(34, 34, 34);\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 rgb(204, 204, 204);\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"); /***/ }), @@ -3252,7 +3274,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.defaultTable.displayShow[data-v-6dfe8938] {\n clear: both;\n}\n.displayShowTable.displayShow[data-v-6dfe8938] {\n clear: both;\n}\n.fanartBackground.displayShow[data-v-6dfe8938] {\n clear: both;\n opacity: 0.9;\n}\n.fanartBackground table[data-v-6dfe8938] {\n table-layout: auto;\n width: 100%;\n border-collapse: collapse;\n border-spacing: 0;\n text-align: center;\n border: none;\n empty-cells: show;\n color: rgb(0, 0, 0) !important;\n}\n.summaryFanArt[data-v-6dfe8938] {\n opacity: 0.9;\n}\n.fanartBackground > table th.vgt-row-header[data-v-6dfe8938] {\n border: none !important;\n background-color: transparent !important;\n color: rgb(255, 255, 255) !important;\n padding-top: 15px !important;\n text-align: left !important;\n}\n.fanartBackground td.col-search[data-v-6dfe8938] {\n text-align: center;\n}\n\n/* Trying to migrate this from tablesorter */\n\n/* =======================================================================\ntablesorter.css\n========================================================================== */\n.displayShow[data-v-6dfe8938] .vgt-global-search__input.vgt-pull-left {\n float: left;\n height: 40px;\n}\n.displayShow[data-v-6dfe8938] .vgt-input {\n border: 1px solid #ccc;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.displayShow[data-v-6dfe8938] div.vgt-responsive > table tbody > tr > th.vgt-row-header > span {\n font-size: 24px;\n margin-top: 20px;\n margin-bottom: 10px;\n}\n.displayShow[data-v-6dfe8938] .vgt-table {\n width: 100%;\n margin-right: auto;\n margin-left: auto;\n color: rgb(0, 0, 0);\n text-align: left;\n border-spacing: 0;\n border-collapse: initial;\n}\n.displayShow[data-v-6dfe8938] .vgt-table th,\n.displayShow[data-v-6dfe8938] .vgt-table td {\n padding: 4px;\n border-top: rgb(34, 34, 34) 1px solid;\n border-left: rgb(34, 34, 34) 1px solid;\n vertical-align: middle;\n}\n\n/* remove extra border from left edge */\n.displayShow[data-v-6dfe8938] .vgt-table th:first-child,\n.displayShow[data-v-6dfe8938] .vgt-table td:first-child {\n border-left: none;\n}\n.displayShow[data-v-6dfe8938] .vgt-table span.break-word {\n word-wrap: break-word;\n}\n.displayShow[data-v-6dfe8938] .vgt-table thead th.sorting.sorting-desc {\n background-color: rgb(85, 85, 85);\n background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7);\n}\n.displayShow[data-v-6dfe8938] .vgt-table thead th.sorting.sorting-asc {\n background-color: rgb(85, 85, 85);\n background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7);\n background-position-x: right;\n background-position-y: bottom;\n}\n.displayShow[data-v-6dfe8938] .vgt-table th {\n text-align: center;\n text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.3);\n background-color: rgb(51, 51, 51);\n white-space: nowrap;\n color: rgb(255, 255, 255);\n border-collapse: collapse;\n font-weight: normal;\n position: relative;\n background-image: none;\n padding: 4px;\n cursor: default;\n}\n.displayShow[data-v-6dfe8938] .vgt-table thead 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.displayShow[data-v-6dfe8938] .vgt-table thead th.sorting {\n background-repeat: no-repeat;\n}\n.displayShow[data-v-6dfe8938] .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.displayShow[data-v-6dfe8938] .vgt-table tr.tablesorter-filter-row,\n.displayShow[data-v-6dfe8938] .vgt-table tr.tablesorter-filter-row td {\n text-align: center;\n}\n\n/* optional disabled input styling */\n.displayShow[data-v-6dfe8938] .vgt-table input.tablesorter-filter-row .disabled {\n display: none;\n}\n.tablesorter-header-inner[data-v-6dfe8938] {\n padding: 0 2px;\n text-align: center;\n}\n.displayShow[data-v-6dfe8938] .vgt-table tfoot tr {\n color: rgb(255, 255, 255);\n text-align: center;\n text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.3);\n background-color: rgb(51, 51, 51);\n border-collapse: collapse;\n}\n.displayShow[data-v-6dfe8938] .vgt-table tfoot a {\n color: rgb(255, 255, 255);\n text-decoration: none;\n}\n.displayShow[data-v-6dfe8938] .vgt-table th.vgt-row-header {\n text-align: left;\n}\n.displayShow[data-v-6dfe8938] .vgt-table .season-header {\n display: inline;\n margin-left: 5px;\n}\n.displayShow[data-v-6dfe8938] .vgt-table tr.spacer {\n height: 25px;\n}\n.displayShow[data-v-6dfe8938] .vgt-table tr:hover {\n opacity: 0.9;\n}\n.displayShow[data-v-6dfe8938] .unaired {\n background-color: rgb(245, 241, 228);\n}\n.displayShow[data-v-6dfe8938] .skipped {\n background-color: rgb(190, 222, 237);\n}\n.displayShow[data-v-6dfe8938] .preferred {\n background-color: rgb(195, 227, 200);\n}\n.displayShow[data-v-6dfe8938] .archived {\n background-color: rgb(195, 227, 200);\n}\n.displayShow[data-v-6dfe8938] .allowed {\n background-color: rgb(255, 218, 138);\n}\n.displayShow[data-v-6dfe8938] .wanted {\n background-color: rgb(255, 176, 176);\n}\n.displayShow[data-v-6dfe8938] .snatched {\n background-color: rgb(235, 193, 234);\n}\n.displayShow[data-v-6dfe8938] .downloaded {\n background-color: rgb(255, 218, 138);\n}\n.displayShow[data-v-6dfe8938] .failed {\n background-color: rgb(255, 153, 153);\n}\n.displayShow[data-v-6dfe8938] span.unaired {\n color: rgb(88, 75, 32);\n}\n.displayShow[data-v-6dfe8938] span.skipped {\n color: rgb(29, 80, 104);\n}\n.displayShow[data-v-6dfe8938] span.preffered {\n color: rgb(41, 87, 48);\n}\n.displayShow[data-v-6dfe8938] span.allowed {\n color: rgb(118, 81, 0);\n}\n.displayShow[data-v-6dfe8938] span.wanted {\n color: rgb(137, 0, 0);\n}\n.displayShow[data-v-6dfe8938] span.snatched {\n color: rgb(101, 33, 100);\n}\n.displayShow[data-v-6dfe8938] span.unaired b,\n.displayShow[data-v-6dfe8938] span.skipped b,\n.displayShow[data-v-6dfe8938] span.preferred b,\n.displayShow[data-v-6dfe8938] span.allowed b,\n.displayShow[data-v-6dfe8938] span.wanted b,\n.displayShow[data-v-6dfe8938] span.snatched b {\n color: rgb(0, 0, 0);\n font-weight: 800;\n}\n.mobile-select[data-v-6dfe8938] {\n width: 110px;\n font-size: x-small;\n}\ntd.col-footer[data-v-6dfe8938] {\n text-align: left !important;\n}\n.displayShow[data-v-6dfe8938] .vgt-wrap__footer {\n color: rgb(255, 255, 255);\n padding: 1em;\n background-color: rgb(51, 51, 51);\n margin-bottom: 1em;\n display: flex;\n justify-content: space-between;\n}\n.displayShow[data-v-6dfe8938] .footer__row-count,\n.displayShow[data-v-6dfe8938] .footer__navigation__page-info {\n display: inline;\n}\n.displayShow[data-v-6dfe8938] .footer__row-count__label {\n margin-right: 1em;\n}\n.displayShow[data-v-6dfe8938] .vgt-wrap__footer .footer__navigation {\n font-size: 14px;\n}\n.displayShow[data-v-6dfe8938] .vgt-pull-right {\n float: right !important;\n}\n.displayShow[data-v-6dfe8938] .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.displayShow[data-v-6dfe8938] .vgt-wrap__footer .footer__navigation__info,\n.displayShow[data-v-6dfe8938] .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.select-info span[data-v-6dfe8938] {\n margin-left: 5px;\n line-height: 40px;\n}\n.subtitles > div[data-v-6dfe8938] {\n float: left;\n}\n.subtitles > div[data-v-6dfe8938]:not(:last-child) {\n margin-right: 2px;\n}\n.displayShow[data-v-6dfe8938] .vgt-dropdown > .button-group {\n position: relative;\n}\n.displayShow[data-v-6dfe8938] .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.displayShow[data-v-6dfe8938] .dropdown-toggle:hover,\n.displayShow[data-v-6dfe8938] .dropdown-toggle:active {\n width: 2em;\n}\n.displayShow[data-v-6dfe8938] .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.displayShow[data-v-6dfe8938] .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`, \"\"]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n\n\n//# sourceURL=webpack://slim/./src/components/display-show.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.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.defaultTable.displayShow[data-v-6dfe8938] {\n clear: both;\n}\n.displayShowTable.displayShow[data-v-6dfe8938] {\n clear: both;\n}\n.fanartBackground.displayShow[data-v-6dfe8938] {\n clear: both;\n opacity: 0.9;\n}\n.fanartBackground table[data-v-6dfe8938] {\n table-layout: auto;\n width: 100%;\n border-collapse: collapse;\n border-spacing: 0;\n text-align: center;\n border: none;\n empty-cells: show;\n color: rgb(0, 0, 0) !important;\n}\n.summaryFanArt[data-v-6dfe8938] {\n opacity: 0.9;\n}\n.fanartBackground > table th.vgt-row-header[data-v-6dfe8938] {\n border: none !important;\n background-color: transparent !important;\n color: rgb(255, 255, 255) !important;\n padding-top: 15px !important;\n text-align: left !important;\n}\n.fanartBackground td.col-search[data-v-6dfe8938] {\n text-align: center;\n}\n\n/* Trying to migrate this from tablesorter */\n\n/* =======================================================================\ntablesorter.css\n========================================================================== */\n.displayShow[data-v-6dfe8938] .vgt-global-search__input.vgt-pull-left {\n float: left;\n height: 40px;\n}\n.displayShow[data-v-6dfe8938] .vgt-input {\n border: 1px solid #ccc;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.displayShow[data-v-6dfe8938] div.vgt-responsive > table tbody > tr > th.vgt-row-header > span {\n font-size: 24px;\n margin-top: 20px;\n margin-bottom: 10px;\n}\n.displayShow[data-v-6dfe8938] .vgt-table {\n width: 100%;\n margin-right: auto;\n margin-left: auto;\n color: rgb(0, 0, 0);\n text-align: left;\n border-spacing: 0;\n border-collapse: initial;\n}\n.displayShow[data-v-6dfe8938] .vgt-table th,\n.displayShow[data-v-6dfe8938] .vgt-table td {\n padding: 4px;\n border-top: rgb(34, 34, 34) 1px solid;\n border-left: rgb(34, 34, 34) 1px solid;\n vertical-align: middle;\n}\n\n/* remove extra border from left edge */\n.displayShow[data-v-6dfe8938] .vgt-table th:first-child,\n.displayShow[data-v-6dfe8938] .vgt-table td:first-child {\n border-left: none;\n}\n.displayShow[data-v-6dfe8938] .vgt-table span.break-word {\n word-wrap: break-word;\n}\n.displayShow[data-v-6dfe8938] .vgt-table thead th.sorting.sorting-desc {\n background-color: rgb(85, 85, 85);\n background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7);\n}\n.displayShow[data-v-6dfe8938] .vgt-table thead th.sorting.sorting-asc {\n background-color: rgb(85, 85, 85);\n background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7);\n background-position-x: right;\n background-position-y: bottom;\n}\n.displayShow[data-v-6dfe8938] .vgt-table th {\n text-align: center;\n text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.3);\n background-color: rgb(51, 51, 51);\n white-space: nowrap;\n color: rgb(255, 255, 255);\n border-collapse: collapse;\n font-weight: normal;\n position: relative;\n background-image: none;\n padding: 4px;\n cursor: default;\n}\n.displayShow[data-v-6dfe8938] .vgt-table thead 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.displayShow[data-v-6dfe8938] .vgt-table thead th.sorting {\n background-repeat: no-repeat;\n}\n.displayShow[data-v-6dfe8938] .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.displayShow[data-v-6dfe8938] .vgt-table tr.tablesorter-filter-row,\n.displayShow[data-v-6dfe8938] .vgt-table tr.tablesorter-filter-row td {\n text-align: center;\n}\n\n/* optional disabled input styling */\n.displayShow[data-v-6dfe8938] .vgt-table input.tablesorter-filter-row .disabled {\n display: none;\n}\n.tablesorter-header-inner[data-v-6dfe8938] {\n padding: 0 2px;\n text-align: center;\n}\n.displayShow[data-v-6dfe8938] .vgt-table tfoot tr {\n color: rgb(255, 255, 255);\n text-align: center;\n text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.3);\n background-color: rgb(51, 51, 51);\n border-collapse: collapse;\n}\n.displayShow[data-v-6dfe8938] .vgt-table tfoot a {\n color: rgb(255, 255, 255);\n text-decoration: none;\n}\n.displayShow[data-v-6dfe8938] .vgt-table th.vgt-row-header {\n text-align: left;\n}\n.displayShow[data-v-6dfe8938] .vgt-table .season-header {\n display: inline;\n margin-left: 5px;\n}\n.displayShow[data-v-6dfe8938] .vgt-table tr.spacer {\n height: 25px;\n}\n.displayShow[data-v-6dfe8938] .vgt-table tr:hover {\n opacity: 0.8;\n}\n.displayShow[data-v-6dfe8938] .unaired {\n background-color: rgb(245, 241, 228);\n}\n.displayShow[data-v-6dfe8938] .skipped {\n background-color: rgb(190, 222, 237);\n}\n.displayShow[data-v-6dfe8938] .preferred {\n background-color: rgb(195, 227, 200);\n}\n.displayShow[data-v-6dfe8938] .archived {\n background-color: rgb(195, 227, 200);\n}\n.displayShow[data-v-6dfe8938] .allowed {\n background-color: rgb(255, 218, 138);\n}\n.displayShow[data-v-6dfe8938] .wanted {\n background-color: rgb(255, 176, 176);\n}\n.displayShow[data-v-6dfe8938] .snatched {\n background-color: rgb(235, 193, 234);\n}\n.displayShow[data-v-6dfe8938] .downloaded {\n background-color: rgb(255, 218, 138);\n}\n.displayShow[data-v-6dfe8938] .failed {\n background-color: rgb(255, 153, 153);\n}\n.displayShow[data-v-6dfe8938] span.unaired {\n color: rgb(88, 75, 32);\n}\n.displayShow[data-v-6dfe8938] span.skipped {\n color: rgb(29, 80, 104);\n}\n.displayShow[data-v-6dfe8938] span.preffered {\n color: rgb(41, 87, 48);\n}\n.displayShow[data-v-6dfe8938] span.allowed {\n color: rgb(118, 81, 0);\n}\n.displayShow[data-v-6dfe8938] span.wanted {\n color: rgb(137, 0, 0);\n}\n.displayShow[data-v-6dfe8938] span.snatched {\n color: rgb(101, 33, 100);\n}\n.displayShow[data-v-6dfe8938] span.unaired b,\n.displayShow[data-v-6dfe8938] span.skipped b,\n.displayShow[data-v-6dfe8938] span.preferred b,\n.displayShow[data-v-6dfe8938] span.allowed b,\n.displayShow[data-v-6dfe8938] span.wanted b,\n.displayShow[data-v-6dfe8938] span.snatched b {\n color: rgb(0, 0, 0);\n font-weight: 800;\n}\n.mobile-select[data-v-6dfe8938] {\n width: 110px;\n font-size: x-small;\n}\ntd.col-footer[data-v-6dfe8938] {\n text-align: left !important;\n}\n.displayShow[data-v-6dfe8938] .vgt-wrap__footer {\n color: rgb(255, 255, 255);\n padding: 1em;\n background-color: rgb(51, 51, 51);\n margin-bottom: 1em;\n display: flex;\n justify-content: space-between;\n}\n.displayShow[data-v-6dfe8938] .footer__row-count,\n.displayShow[data-v-6dfe8938] .footer__navigation__page-info {\n display: inline;\n}\n.displayShow[data-v-6dfe8938] .footer__row-count__label {\n margin-right: 1em;\n}\n.displayShow[data-v-6dfe8938] .vgt-wrap__footer .footer__navigation {\n font-size: 14px;\n}\n.displayShow[data-v-6dfe8938] .vgt-pull-right {\n float: right !important;\n}\n.displayShow[data-v-6dfe8938] .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.displayShow[data-v-6dfe8938] .vgt-wrap__footer .footer__navigation__info,\n.displayShow[data-v-6dfe8938] .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.select-info span[data-v-6dfe8938] {\n margin-left: 5px;\n line-height: 40px;\n}\n.subtitles > div[data-v-6dfe8938] {\n float: left;\n}\n.subtitles > div[data-v-6dfe8938]:not(:last-child) {\n margin-right: 2px;\n}\n.displayShow[data-v-6dfe8938] .vgt-dropdown > .button-group {\n position: relative;\n}\n.displayShow[data-v-6dfe8938] .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.displayShow[data-v-6dfe8938] .dropdown-toggle:hover,\n.displayShow[data-v-6dfe8938] .dropdown-toggle:active {\n width: 2em;\n}\n.displayShow[data-v-6dfe8938] .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.displayShow[data-v-6dfe8938] .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`, \"\"]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n\n\n//# sourceURL=webpack://slim/./src/components/display-show.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use%5B1%5D!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options"); /***/ }), @@ -3902,7 +3924,17 @@ 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.show-results-wrapper[data-v-68e9fa36] tbody {\n color: rgb(0, 0, 0);\n}\n#no-result[data-v-68e9fa36] {\n color: rgb(255, 255, 255);\n}\n`, \"\"]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n\n\n//# sourceURL=webpack://slim/./src/components/show-results.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.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.show-results-wrapper[data-v-68e9fa36] tbody {\n color: rgb(0, 0, 0);\n}\n#no-result[data-v-68e9fa36] {\n color: rgb(255, 255, 255);\n}\n.release-group[data-v-68e9fa36] {\n position: relative;\n}\n`, \"\"]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n\n\n//# sourceURL=webpack://slim/./src/components/show-results.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use%5B1%5D!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options"); + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/show-results/manage-whitelist.vue?vue&type=style&index=0&id=1e6eebc8&scoped=true&lang=css&": +/*!*****************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/show-results/manage-whitelist.vue?vue&type=style&index=0&id=1e6eebc8&scoped=true&lang=css& ***! + \*****************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((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.manage-whitelist-control-wrapper[data-v-1e6eebc8] {\n position: absolute;\n display: flex;\n top: 25px;\n left: 0;\n background-color: rgb(51, 51, 51);\n padding: 1rem;\n border-radius: 4px;\n z-index: 1;\n flex-flow: column;\n justify-content: center;\n min-width: 20rem;\n}\n.title-header[data-v-1e6eebc8] {\n display: flex;\n justify-content: space-between;\n margin-bottom: 5px;\n}\n.title[data-v-1e6eebc8] {\n margin-bottom: 5px;\n text-align: center;\n color: white;\n font-weight: 700;\n}\n.manage-whitelist-close[data-v-1e6eebc8] {\n color: red;\n width: 20px;\n height: 20px;\n}\n.manage-whitelist-control-wrapper form[data-v-1e6eebc8] {\n display: flex;\n flex-flow: column;\n gap: 5px;\n}\n.manage-whitelist-control-wrapper button[data-v-1e6eebc8] {\n width: 100%;\n padding: 10px 0;\n}\n`, \"\"]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n\n\n//# sourceURL=webpack://slim/./src/components/show-results/manage-whitelist.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use%5B1%5D!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options"); /***/ }), @@ -5123,6 +5155,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./src/components/show-results/manage-whitelist.vue": +/*!**********************************************************!*\ + !*** ./src/components/show-results/manage-whitelist.vue ***! + \**********************************************************/ +/***/ ((__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 _manage_whitelist_vue_vue_type_template_id_1e6eebc8_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./manage-whitelist.vue?vue&type=template&id=1e6eebc8&scoped=true& */ \"./src/components/show-results/manage-whitelist.vue?vue&type=template&id=1e6eebc8&scoped=true&\");\n/* harmony import */ var _manage_whitelist_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./manage-whitelist.vue?vue&type=script&lang=js& */ \"./src/components/show-results/manage-whitelist.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _manage_whitelist_vue_vue_type_style_index_0_id_1e6eebc8_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./manage-whitelist.vue?vue&type=style&index=0&id=1e6eebc8&scoped=true&lang=css& */ \"./src/components/show-results/manage-whitelist.vue?vue&type=style&index=0&id=1e6eebc8&scoped=true&lang=css&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n;\n\n\n/* normalize component */\n\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(\n _manage_whitelist_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _manage_whitelist_vue_vue_type_template_id_1e6eebc8_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,\n _manage_whitelist_vue_vue_type_template_id_1e6eebc8_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n false,\n null,\n \"1e6eebc8\",\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/components/show-results/manage-whitelist.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);\n\n//# sourceURL=webpack://slim/./src/components/show-results/manage-whitelist.vue?"); + +/***/ }), + /***/ "./src/components/snatch-selection.vue": /*!*********************************************!*\ !*** ./src/components/snatch-selection.vue ***! @@ -6355,6 +6398,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./src/components/show-results/manage-whitelist.vue?vue&type=script&lang=js&": +/*!***********************************************************************************!*\ + !*** ./src/components/show-results/manage-whitelist.vue?vue&type=script&lang=js& ***! + \***********************************************************************************/ +/***/ ((__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 _node_modules_babel_loader_lib_index_js_clonedRuleSet_1_node_modules_vue_loader_lib_index_js_vue_loader_options_manage_whitelist_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./manage-whitelist.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-1!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/show-results/manage-whitelist.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_1_node_modules_vue_loader_lib_index_js_vue_loader_options_manage_whitelist_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n//# sourceURL=webpack://slim/./src/components/show-results/manage-whitelist.vue?"); + +/***/ }), + /***/ "./src/components/snatch-selection.vue?vue&type=script&lang=js&": /*!**********************************************************************!*\ !*** ./src/components/snatch-selection.vue?vue&type=script&lang=js& ***! @@ -7576,6 +7630,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./src/components/show-results/manage-whitelist.vue?vue&type=template&id=1e6eebc8&scoped=true&": +/*!*****************************************************************************************************!*\ + !*** ./src/components/show-results/manage-whitelist.vue?vue&type=template&id=1e6eebc8&scoped=true& ***! + \*****************************************************************************************************/ +/***/ ((__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: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_1_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_manage_whitelist_vue_vue_type_template_id_1e6eebc8_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render),\n/* harmony export */ staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_1_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_manage_whitelist_vue_vue_type_template_id_1e6eebc8_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_1_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_manage_whitelist_vue_vue_type_template_id_1e6eebc8_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./manage-whitelist.vue?vue&type=template&id=1e6eebc8&scoped=true& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-1!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/show-results/manage-whitelist.vue?vue&type=template&id=1e6eebc8&scoped=true&\");\n\n\n//# sourceURL=webpack://slim/./src/components/show-results/manage-whitelist.vue?"); + +/***/ }), + /***/ "./src/components/snatch-selection.vue?vue&type=template&id=0ad4c7fc&scoped=true&": /*!****************************************************************************************!*\ !*** ./src/components/snatch-selection.vue?vue&type=template&id=0ad4c7fc&scoped=true& ***! @@ -8456,6 +8521,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _nod /***/ }), +/***/ "./src/components/show-results/manage-whitelist.vue?vue&type=style&index=0&id=1e6eebc8&scoped=true&lang=css&": +/*!*******************************************************************************************************************!*\ + !*** ./src/components/show-results/manage-whitelist.vue?vue&type=style&index=0&id=1e6eebc8&scoped=true&lang=css& ***! + \*******************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_clonedRuleSet_3_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_manage_whitelist_vue_vue_type_style_index_0_id_1e6eebc8_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-style-loader/index.js!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./manage-whitelist.vue?vue&type=style&index=0&id=1e6eebc8&scoped=true&lang=css& */ \"./node_modules/vue-style-loader/index.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/show-results/manage-whitelist.vue?vue&type=style&index=0&id=1e6eebc8&scoped=true&lang=css&\");\n/* harmony import */ var _node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_clonedRuleSet_3_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_manage_whitelist_vue_vue_type_style_index_0_id_1e6eebc8_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_clonedRuleSet_3_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_manage_whitelist_vue_vue_type_style_index_0_id_1e6eebc8_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_clonedRuleSet_3_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_manage_whitelist_vue_vue_type_style_index_0_id_1e6eebc8_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_clonedRuleSet_3_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_manage_whitelist_vue_vue_type_style_index_0_id_1e6eebc8_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__[__WEBPACK_IMPORT_KEY__]\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\n\n//# sourceURL=webpack://slim/./src/components/show-results/manage-whitelist.vue?"); + +/***/ }), + /***/ "./src/components/snatch-selection.vue?vue&type=style&index=0&id=0ad4c7fc&scoped=true&lang=css&": /*!******************************************************************************************************!*\ !*** ./src/components/snatch-selection.vue?vue&type=style&index=0&id=0ad4c7fc&scoped=true&lang=css& ***! @@ -9230,6 +9306,16 @@ eval("// style-loader: Adds some css to the DOM by adding a \n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./lazy-image.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./lazy-image.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./lazy-image.vue?vue&type=template&id=05ed6915&scoped=true&\"\nimport script from \"./lazy-image.vue?vue&type=script&lang=js&\"\nexport * from \"./lazy-image.vue?vue&type=script&lang=js&\"\nimport style0 from \"./lazy-image.vue?vue&type=style&index=0&id=05ed6915&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"05ed6915\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('img',{staticClass:\"app-image\",class:_vm.lazyCls,style:(_vm.style),attrs:{\"data-src\":_vm.lazySrc,\"data-srcset\":_vm.lazySrcset},on:{\"error\":function($event){_vm.error = true}}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./asset.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./asset.vue?vue&type=script&lang=js&\"","\n\n\n","import { render, staticRenderFns } from \"./asset.vue?vue&type=template&id=ad0dcc86&scoped=true&\"\nimport script from \"./asset.vue?vue&type=script&lang=js&\"\nexport * from \"./asset.vue?vue&type=script&lang=js&\"\nimport style0 from \"./asset.vue?vue&type=style&index=0&id=ad0dcc86&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"ad0dcc86\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (!_vm.lazy)?_c('div',{staticStyle:{\"display\":\"inherit\"}},[(!_vm.link)?_c('img',_vm._b({on:{\"error\":function($event){_vm.error = true}}},'img',{ src: _vm.src, class: _vm.cls, class: _vm.newCls },false)):_c('app-link',{attrs:{\"href\":_vm.href}},[_c('img',_vm._b({on:{\"error\":function($event){_vm.error = true}}},'img',{ src: _vm.src, class: _vm.newCls, style: _vm.imgStyle },false))])],1):_c('div',{staticStyle:{\"display\":\"inherit\"}},[(!_vm.link)?_c('lazy-image',{attrs:{\"lazy-src\":_vm.src,\"lazy-cls\":_vm.newCls,\"lazy-default-src\":_vm.defaultSrc,\"lazy-width\":_vm.imgWidth}}):_c('app-link',{attrs:{\"href\":_vm.href}},[_c('lazy-image',{attrs:{\"lazy-src\":_vm.src,\"lazy-cls\":_vm.newCls,\"lazy-default-src\":_vm.defaultSrc}})],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"select-list max-width\"},[_c('ul',[_vm._l((_vm.items),function(exception){return _c('li',{key:`${exception.title}-${exception.season}`},[_c('div',{staticClass:\"input-group form-inline\",attrs:{\"disabled\":!exception.custom}},[_c('input',{staticClass:\"form-control input-sm\",attrs:{\"type\":\"text\",\"disabled\":!exception.custom},domProps:{\"value\":exception.title}}),_vm._v(\" \"),_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(exception.season),expression:\"exception.season\"}],staticClass:\"select-season\",attrs:{\"name\":\"scene-exception-season\",\"disabled\":!exception.custom},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.$set(exception, \"season\", $event.target.multiple ? $$selectedVal : $$selectedVal[0])}}},_vm._l((_vm.availableSeasons),function(season){return _c('option',{key:season.value,domProps:{\"value\":season.value}},[_vm._v(\"\\n \"+_vm._s(season.description)+\"\\n \")])}),0),_vm._v(\" \"),(!exception.custom)?_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.right\",value:('This exception has been automatically added through an automated process sourcing title aliases from medusa github repo, thexem.de or anidb.info'),expression:\"'This exception has been automatically added through an automated process sourcing title aliases from medusa github repo, thexem.de or anidb.info'\",modifiers:{\"right\":true}}],staticClass:\"external-scene-exception\"},[_vm._m(0,true)]):_c('div',{staticClass:\"input-group-btn\",on:{\"click\":function($event){return _vm.removeException(exception)}}},[_vm._m(1,true)])])])}),_vm._v(\" \"),_c('div',{staticClass:\"new-item\"},[_c('div',{staticClass:\"input-group form-inline\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newItem),expression:\"newItem\"}],ref:\"newItemInput\",staticClass:\"form-control input-sm\",attrs:{\"type\":\"text\",\"placeholder\":\"add new values per line\"},domProps:{\"value\":(_vm.newItem)},on:{\"input\":function($event){if($event.target.composing)return;_vm.newItem=$event.target.value}}}),_vm._v(\" \"),_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selectedSeason),expression:\"selectedSeason\"}],staticClass:\"select-season\",attrs:{\"name\":\"add-exception-season\"},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.selectedSeason=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.availableSeasons),function(season){return _c('option',{key:season.value,domProps:{\"value\":season.value}},[_vm._v(\"\\n \"+_vm._s(season.description)+\"\\n \")])}),0),_vm._v(\" \"),_c('div',{staticClass:\"input-group-btn\",attrs:{\"disabled\":!_vm.unique},on:{\"click\":function($event){return _vm.addException()}}},[_vm._m(2)])])]),_vm._v(\" \"),(!_vm.unique)?_c('div',[_vm._m(3)]):_vm._e(),_vm._v(\" \"),(_vm.newItem.length > 0 && _vm.unique)?_c('div',{staticClass:\"new-item-help\"},[_vm._v(\"\\n Click \"),_c('i',{staticClass:\"glyphicon glyphicon-plus\"}),_vm._v(\" to add your \"),_c('b',[_vm._v(_vm._s(_vm.selectedSeason === -1 ? 'Show Exception' : 'Season Exception'))]),_vm._v(\".\\n \")]):_vm._e()],2)])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"align-center\"},[_c('img',{attrs:{\"src\":\"images/ico/favicon-16.png\",\"width\":\"16\",\"height\":\"16\",\"alt\":\"search\",\"title\":\"This exception has been automatically added through an automated process sourcing title aliases from medusa github repo, thexem.de or anidb.info\"}})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"btn btn-default input-sm\",staticStyle:{\"font-size\":\"14px\"}},[_c('i',{staticClass:\"glyphicon glyphicon-remove\",attrs:{\"title\":\"Remove\"}})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"btn btn-default input-sm\",staticStyle:{\"font-size\":\"14px\"}},[_c('i',{staticClass:\"glyphicon glyphicon-plus\",attrs:{\"title\":\"Add\"}})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('p',[_c('b',[_vm._v(\"This exception has already been added for this show.\"),_c('br'),_vm._v(\"Can't add the same exception twice!\")])])\n}]\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-scene-exceptions.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-scene-exceptions.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./config-scene-exceptions.vue?vue&type=template&id=2cd053b2&scoped=true&\"\nimport script from \"./config-scene-exceptions.vue?vue&type=script&lang=js&\"\nexport * from \"./config-scene-exceptions.vue?vue&type=script&lang=js&\"\nimport style0 from \"./config-scene-exceptions.vue?vue&type=style&index=0&id=2cd053b2&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2cd053b2\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{attrs:{\"id\":\"config-subtitle-languages\"}},[_c('vue-tags-input',{attrs:{\"tags\":_vm.wantedLanguages,\"autocomplete-items\":_vm.filteredItems,\"add-only-from-autocomplete\":\"\",\"placeholder\":\"Write to search a language and select it\"},on:{\"tags-changed\":_vm.tagsChanged},scopedSlots:_vm._u([{key:\"autocomplete-item\",fn:function(props){return _c('div',{staticClass:\"autocomplete-item\",on:{\"click\":function($event){return props.performAdd(props.item)}}},[_c('img',{staticStyle:{\"vertical-align\":\"middle !important\"},attrs:{\"src\":`images/subtitles/flags/${props.item.text}.png`,\"onError\":\"this.onerror=null; this.src='images/flags/unknown.png';\"}}),_vm._v(\"\\n \"+_vm._s(props.item.name)+\"\\n \")])}},{key:\"tag-left\",fn:function(props){return _c('div',{staticClass:\"country-left\",on:{\"click\":function($event){return props.performOpenEdit(props.index)}}},[_c('img',{staticStyle:{\"vertical-align\":\"middle !important\"},attrs:{\"src\":`images/subtitles/flags/${props.tag.text}.png`,\"onError\":\"this.onerror=null; this.src='images/flags/unknown.png';\"}})])}}]),model:{value:(_vm.tag),callback:function ($$v) {_vm.tag=$$v},expression:\"tag\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-subtitle-languages.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-subtitle-languages.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./config-subtitle-languages.vue?vue&type=template&id=0fbc8b46&scoped=true&\"\nimport script from \"./config-subtitle-languages.vue?vue&type=script&lang=js&\"\nexport * from \"./config-subtitle-languages.vue?vue&type=script&lang=js&\"\nimport style0 from \"./config-subtitle-languages.vue?vue&type=style&index=0&id=0fbc8b46&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0fbc8b46\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-textbox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-textbox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./config-textbox.vue?vue&type=template&id=1f6251e9&scoped=true&\"\nimport script from \"./config-textbox.vue?vue&type=script&lang=js&\"\nexport * from \"./config-textbox.vue?vue&type=script&lang=js&\"\nimport style0 from \"./config-textbox.vue?vue&type=style&index=0&id=1f6251e9&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1f6251e9\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{attrs:{\"id\":\"config-textbox\"}},[_c('div',{staticClass:\"form-group\"},[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-sm-2\"},[_c('label',{staticClass:\"control-label\",attrs:{\"for\":_vm.id}},[_c('span',[_vm._v(_vm._s(_vm.label))])])]),_vm._v(\" \"),_c('div',{staticClass:\"col-sm-10 content\"},[_c('div',{staticClass:\"parent\",class:_vm.inputClass},[((({id: _vm.id, type: _vm.type, name: _vm.id, placeholder: _vm.placeholder, disabled: _vm.disabled}).type)==='checkbox')?_c('input',_vm._b({directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.localValue),expression:\"localValue\"}],attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.localValue)?_vm._i(_vm.localValue,null)>-1:(_vm.localValue)},on:{\"input\":function($event){return _vm.updateValue()},\"change\":function($event){var $$a=_vm.localValue,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.localValue=$$a.concat([$$v]))}else{$$i>-1&&(_vm.localValue=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.localValue=$$c}}}},'input',{id: _vm.id, type: _vm.type, name: _vm.id, placeholder: _vm.placeholder, disabled: _vm.disabled},false)):((({id: _vm.id, type: _vm.type, name: _vm.id, placeholder: _vm.placeholder, disabled: _vm.disabled}).type)==='radio')?_c('input',_vm._b({directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.localValue),expression:\"localValue\"}],attrs:{\"type\":\"radio\"},domProps:{\"checked\":_vm._q(_vm.localValue,null)},on:{\"input\":function($event){return _vm.updateValue()},\"change\":function($event){_vm.localValue=null}}},'input',{id: _vm.id, type: _vm.type, name: _vm.id, placeholder: _vm.placeholder, disabled: _vm.disabled},false)):_c('input',_vm._b({directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.localValue),expression:\"localValue\"}],attrs:{\"type\":({id: _vm.id, type: _vm.type, name: _vm.id, placeholder: _vm.placeholder, disabled: _vm.disabled}).type},domProps:{\"value\":(_vm.localValue)},on:{\"input\":[function($event){if($event.target.composing)return;_vm.localValue=$event.target.value},function($event){return _vm.updateValue()}]}},'input',{id: _vm.id, type: _vm.type, name: _vm.id, placeholder: _vm.placeholder, disabled: _vm.disabled},false)),_vm._v(\" \"),_c('transition',{attrs:{\"name\":\"uri-error\"}},[(_vm.uriError)?_c('div',{staticClass:\"uri-error\"},[_vm._v(\"Make sure to start your URI with http://, https://, scgi://, etc..\")]):_vm._e()]),_vm._v(\" \"),_vm._t(\"warning\")],2),_vm._v(\" \"),_vm._l((_vm.explanations),function(explanation,index){return _c('p',{key:index},[_vm._v(_vm._s(explanation))])}),_vm._v(\" \"),_vm._t(\"default\")],2)])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-textbox-number.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-textbox-number.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./config-textbox-number.vue?vue&type=template&id=69e4e766&\"\nimport script from \"./config-textbox-number.vue?vue&type=script&lang=js&\"\nexport * from \"./config-textbox-number.vue?vue&type=script&lang=js&\"\nimport style0 from \"./config-textbox-number.vue?vue&type=style&index=0&id=69e4e766&prod&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{attrs:{\"id\":\"config-textbox-number-content\"}},[_c('div',{staticClass:\"form-group\"},[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-sm-2\"},[_c('label',{staticClass:\"control-label\",attrs:{\"for\":_vm.id}},[_c('span',[_vm._v(_vm._s(_vm.label))])])]),_vm._v(\" \"),_c('div',{staticClass:\"col-sm-10 content\"},[_c('input',_vm._b({directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.localValue),expression:\"localValue\"}],attrs:{\"type\":\"number\"},domProps:{\"value\":(_vm.localValue)},on:{\"input\":[function($event){if($event.target.composing)return;_vm.localValue=$event.target.value},function($event){return _vm.updateValue()}]}},'input',{min: _vm.min, max: _vm.max, step: _vm.step, id: _vm.id, name: _vm.id, class: _vm.inputClass, placeholder: _vm.placeholder, disabled: _vm.disabled},false)),_vm._v(\" \"),_vm._l((_vm.explanations),function(explanation,index){return _c('p',{key:index},[_vm._v(_vm._s(explanation))])}),_vm._v(\" \"),_vm._t(\"default\")],2)])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return (!_vm.experimental || _vm.experimentalEnabled)?_c('div',{attrs:{\"id\":\"config-toggle-slider-content\"}},[_c('div',{staticClass:\"form-group\"},[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-sm-2\"},[_c('label',{staticClass:\"control-label\",attrs:{\"for\":_vm.id}},[_c('span',[_vm._v(_vm._s(_vm.label))])])]),_vm._v(\" \"),_c('div',{staticClass:\"col-sm-10 content\"},[_c('toggle-button',_vm._b({attrs:{\"width\":45,\"height\":22,\"sync\":\"\"},on:{\"input\":function($event){return _vm.updateValue()}},model:{value:(_vm.localChecked),callback:function ($$v) {_vm.localChecked=$$v},expression:\"localChecked\"}},'toggle-button',{id: _vm.id, name: _vm.id, disabled: _vm.disabled},false)),_vm._v(\" \"),_vm._l((_vm.explanations),function(explanation,index){return _c('p',{key:index},[_vm._v(_vm._s(explanation))])}),_vm._v(\" \"),_vm._t(\"default\"),_vm._v(\" \"),(_vm.experimental)?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\"This is an experimental feature\")]):_vm._e()],2)])])]):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-toggle-slider.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-toggle-slider.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./config-toggle-slider.vue?vue&type=template&id=4bfe1717&\"\nimport script from \"./config-toggle-slider.vue?vue&type=script&lang=js&\"\nexport * from \"./config-toggle-slider.vue?vue&type=script&lang=js&\"\nimport style0 from \"./config-toggle-slider.vue?vue&type=style&index=0&id=4bfe1717&prod&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{attrs:{\"id\":\"custom-newznab\"}},[_c('config-template',{attrs:{\"label-for\":\"select_newznab_provider\",\"label\":\"Select Provider\"}},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selectedProvider),expression:\"selectedProvider\"}],staticClass:\"form-control input-sm max-input350\",attrs:{\"id\":\"select-provider\"},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.selectedProvider=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},[_c('option',{attrs:{\"value\":\"#add\"}},[_vm._v(\"--- add new provider ---\")]),_vm._v(\" \"),_vm._l((_vm.newznabProviderOptions),function(option){return _c('option',{key:option.value,domProps:{\"value\":option.value}},[_vm._v(\"\\n \"+_vm._s(option.text)+\"\\n \")])})],2)]),_vm._v(\" \"),(_vm.currentProvider && _vm.selectedProvider !== '#add')?_c('div',{staticClass:\"edit-provider\"},[_c('config-textbox',{attrs:{\"disabled\":\"\",\"label\":\"Provider name\",\"id\":\"edit_provider_name\"},model:{value:(_vm.currentProvider.name),callback:function ($$v) {_vm.$set(_vm.currentProvider, \"name\", $$v)},expression:\"currentProvider.name\"}}),_vm._v(\" \"),_c('config-textbox',{attrs:{\"label\":\"Site Url\",\"id\":\"edit_provider_url\"},model:{value:(_vm.currentProvider.config.url),callback:function ($$v) {_vm.$set(_vm.currentProvider.config, \"url\", $$v)},expression:\"currentProvider.config.url\"}}),_vm._v(\" \"),_c('config-textbox',{attrs:{\"type\":\"password\",\"label\":\"Api key\",\"id\":\"edit_provider_api\"},model:{value:(_vm.currentProvider.config.apikey),callback:function ($$v) {_vm.$set(_vm.currentProvider.config, \"apikey\", $$v)},expression:\"currentProvider.config.apikey\"}}),_vm._v(\" \"),_c('config-template',{attrs:{\"label\":\"Categories\",\"label-for\":\"catids\"}},[_c('multiselect',{attrs:{\"value\":_vm.providerCatIds,\"multiple\":true,\"options\":_vm.availableCategories,\"label\":\"id\",\"track-by\":\"id\",\"taggable\":true,\"tag-placeholder\":\"Add this as new cat id\",\"placeholder\":\"Search or add a cat id\"},on:{\"tag\":_vm.addTag,\"input\":function($event){_vm.currentProvider.config.catIds = $event.map(cat => cat.id)}},scopedSlots:_vm._u([{key:\"option\",fn:function(props){return [(props.option.isTag)?_c('span',[_c('strong',[_vm._v(_vm._s(props.option.label))])]):_c('span',[_c('strong',[_vm._v(_vm._s(props.option.id))]),_vm._v(\" (\"+_vm._s(props.option.name)+\")\")])]}}],null,false,2742372380)})],1),_vm._v(\" \"),_c('button',{staticClass:\"btn-medusa btn-danger newznab_delete\",attrs:{\"disabled\":_vm.currentProvider.default,\"id\":\"newznab_delete\"},on:{\"click\":_vm.removeProvider}},[_vm._v(\"Delete\")]),_vm._v(\" \"),_c('button',{staticClass:\"btn-medusa config_submitter_refresh\",on:{\"click\":function($event){return _vm.$emit('save')}}},[_vm._v(\"Save Changes\")]),_vm._v(\" \"),(_vm.currentProvider.manager === 'prowlarr')?_c('p',{staticClass:\"manager-note\"},[_c('img',{staticStyle:{\"width\":\"16px\"},attrs:{\"src\":\"images/providers/prowlarr.png\"}}),_vm._v(\"\\n Note! This is a provider configured through the 'Configure Custom Prowlarr Providers' tab.\\n \")]):_vm._e()],1):_vm._e(),_vm._v(\" \"),(_vm.selectedProvider === '#add')?_c('div',{staticClass:\"add-provider\"},[_c('config-textbox',{attrs:{\"label\":\"Provider name\",\"id\":\"add_provider_name\"},scopedSlots:_vm._u([{key:\"warning\",fn:function(){return [_c('transition',{attrs:{\"name\":\"warning\"}},[(!_vm.providerIdAvailable)?_c('div',{staticClass:\"warning\"},[_vm._v(\"This provider id is already used.\")]):_vm._e()])]},proxy:true}],null,false,3405532282),model:{value:(_vm.name),callback:function ($$v) {_vm.name=$$v},expression:\"name\"}}),_vm._v(\" \"),_c('config-textbox',{attrs:{\"label\":\"Site Url\",\"id\":\"add_provider_url\"},model:{value:(_vm.url),callback:function ($$v) {_vm.url=$$v},expression:\"url\"}}),_vm._v(\" \"),_c('config-textbox',{attrs:{\"type\":\"password\",\"label\":\"Api key\",\"id\":\"add_provider_api\"},model:{value:(_vm.apikey),callback:function ($$v) {_vm.apikey=$$v},expression:\"apikey\"}}),_vm._v(\" \"),_c('button',{staticClass:\"btn-medusa config_submitter\",attrs:{\"disabled\":!_vm.providerIdAvailable},on:{\"click\":_vm.addProvider}},[_vm._v(\"Add Provider\")])],1):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-custom-newznab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-custom-newznab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./config-custom-newznab.vue?vue&type=template&id=5c3e11ee&scoped=true&\"\nimport script from \"./config-custom-newznab.vue?vue&type=script&lang=js&\"\nexport * from \"./config-custom-newznab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./config-custom-newznab.vue?vue&type=style&index=0&id=5c3e11ee&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5c3e11ee\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{attrs:{\"id\":\"custom-prowlarr\"}},[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-lg-12\"},[_c('config-textbox',{attrs:{\"label\":\"Prowlarr Url\",\"id\":\"prowlarr_url\"},model:{value:(_vm.prowlarr.url),callback:function ($$v) {_vm.$set(_vm.prowlarr, \"url\", $$v)},expression:\"prowlarr.url\"}}),_vm._v(\" \"),_c('config-textbox',{attrs:{\"label\":\"Api Key\",\"id\":\"prowlarr_apikey\"},model:{value:(_vm.prowlarr.apikey),callback:function ($$v) {_vm.$set(_vm.prowlarr, \"apikey\", $$v)},expression:\"prowlarr.apikey\"}}),_vm._v(\" \"),_c('button',{staticClass:\"btn-medusa config_submitter\",on:{\"click\":_vm.saveConfig}},[_vm._v(\"Save\")]),_vm._v(\" \"),_c('button',{staticClass:\"btn-medusa config_submitter\",on:{\"click\":_vm.testConnectivity}},[_vm._v(\"Test\")]),_vm._v(\" \"),_c('button',{staticClass:\"btn-medusa config_submitter\",on:{\"click\":_vm.getAvailableProviders}},[_vm._v(\"Get Providers\")]),_vm._v(\" \"),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.testResult),expression:\"testResult\"}],staticClass:\"testresult\"},[_vm._v(_vm._s(_vm.testResult))])],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-lg-12 vgt-table-styling\"},[_c('h3',[_vm._v(\"Available providers\")]),_vm._v(\" \"),_c('vue-good-table',{attrs:{\"columns\":_vm.columns,\"rows\":_vm.prowlarrProviders,\"search-options\":{\n enabled: false\n },\"sort-options\":{\n enabled: true,\n initialSortBy: { field: 'name', type: 'asc' }\n },\"styleClass\":\"vgt-table condensed\"},scopedSlots:_vm._u([{key:\"table-row\",fn:function(props){return [(props.column.label === 'Added')?_c('span',{staticClass:\"align-center\"},[(props.row.localProvider)?_c('img',{attrs:{\"src\":\"/images/yes16.png\"}}):_vm._e()]):(props.column.label === 'Action')?_c('span',{staticClass:\"align-center\"},[(!props.row.localProvider)?_c('button',{staticClass:\"btn-medusa config_submitter\",on:{\"click\":function($event){return _vm.addProvider(props.row)}}},[_vm._v(\"Add Provider\")]):_c('button',{staticClass:\"btn-medusa btn-danger\",on:{\"click\":function($event){return _vm.removeProvider(props.row)}}},[_vm._v(\"Remove Provider\")])]):_vm._e()]}}])})],1)])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-custom-prowlarr.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-custom-prowlarr.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./config-custom-prowlarr.vue?vue&type=template&id=8373d546&scoped=true&\"\nimport script from \"./config-custom-prowlarr.vue?vue&type=script&lang=js&\"\nexport * from \"./config-custom-prowlarr.vue?vue&type=script&lang=js&\"\nimport style0 from \"./config-custom-prowlarr.vue?vue&type=style&index=0&id=8373d546&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8373d546\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-custom-torrentrss.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-custom-torrentrss.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./config-custom-torrentrss.vue?vue&type=template&id=26f7d7fa&scoped=true&\"\nimport script from \"./config-custom-torrentrss.vue?vue&type=script&lang=js&\"\nexport * from \"./config-custom-torrentrss.vue?vue&type=script&lang=js&\"\nimport style0 from \"./config-custom-torrentrss.vue?vue&type=style&index=0&id=26f7d7fa&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"26f7d7fa\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{attrs:{\"id\":\"custom-torrentrss\"}},[_c('config-template',{attrs:{\"label-for\":\"select_torrentrss_provider\",\"label\":\"Select Provider\"}},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selectedProvider),expression:\"selectedProvider\"}],staticClass:\"form-control input-sm max-input350\",attrs:{\"id\":\"select-provider\"},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.selectedProvider=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},[_c('option',{attrs:{\"value\":\"#add\"}},[_vm._v(\"--- add new provider ---\")]),_vm._v(\" \"),_vm._l((_vm.torrentrssProviderOptions),function(option){return _c('option',{key:option.value,domProps:{\"value\":option.value}},[_vm._v(\"\\n \"+_vm._s(option.text)+\"\\n \")])})],2)]),_vm._v(\" \"),(_vm.currentProvider && _vm.selectedProvider !== '#add')?_c('div',{staticClass:\"edit-provider\"},[_c('config-textbox',{attrs:{\"disabled\":\"\",\"label\":\"Provider name\",\"id\":\"edit_provider_name\"},model:{value:(_vm.currentProvider.name),callback:function ($$v) {_vm.$set(_vm.currentProvider, \"name\", $$v)},expression:\"currentProvider.name\"}}),_vm._v(\" \"),_c('config-textbox',{attrs:{\"label\":\"Rss Url\",\"id\":\"edit_provider_url\"},model:{value:(_vm.currentProvider.config.url),callback:function ($$v) {_vm.$set(_vm.currentProvider.config, \"url\", $$v)},expression:\"currentProvider.config.url\"}}),_vm._v(\" \"),_c('config-textbox',{attrs:{\"label\":\"Cookies (optional)\",\"id\":\"edit_provider_cookies\"},model:{value:(_vm.currentProvider.config.cookies.values),callback:function ($$v) {_vm.$set(_vm.currentProvider.config.cookies, \"values\", $$v)},expression:\"currentProvider.config.cookies.values\"}}),_vm._v(\" \"),_c('config-textbox',{attrs:{\"label\":\"Search element\",\"id\":\"edit_provider_search_element\"},model:{value:(_vm.currentProvider.config.titleTag),callback:function ($$v) {_vm.$set(_vm.currentProvider.config, \"titleTag\", $$v)},expression:\"currentProvider.config.titleTag\"}}),_vm._v(\" \"),_c('button',{staticClass:\"btn-medusa btn-danger torrentrss_delete\",attrs:{\"id\":\"torrentrss_delete\"},on:{\"click\":_vm.removeProvider}},[_vm._v(\"Delete\")]),_vm._v(\" \"),_c('button',{staticClass:\"btn-medusa config_submitter_refresh\",on:{\"click\":function($event){return _vm.$emit('save')}}},[_vm._v(\"Save Changes\")])],1):_vm._e(),_vm._v(\" \"),(_vm.selectedProvider === '#add')?_c('div',{staticClass:\"add-provider\"},[_c('config-textbox',{attrs:{\"label\":\"Provider name\",\"id\":\"add_provider_name\"},scopedSlots:_vm._u([{key:\"warning\",fn:function(){return [_c('transition',{attrs:{\"name\":\"warning\"}},[(!_vm.providerIdAvailable)?_c('div',{staticClass:\"warning\"},[_vm._v(\"This provider id is already used.\")]):_vm._e()])]},proxy:true}],null,false,3405532282),model:{value:(_vm.name),callback:function ($$v) {_vm.name=$$v},expression:\"name\"}}),_vm._v(\" \"),_c('config-textbox',{attrs:{\"label\":\"Site Url\",\"id\":\"add_provider_url\"},model:{value:(_vm.url),callback:function ($$v) {_vm.url=$$v},expression:\"url\"}}),_vm._v(\" \"),_c('config-textbox',{attrs:{\"label\":\"Cookies\",\"id\":\"add_provider_cookies\"},model:{value:(_vm.cookies),callback:function ($$v) {_vm.cookies=$$v},expression:\"cookies\"}}),_vm._v(\" \"),_c('config-textbox',{attrs:{\"label\":\"Search element\",\"id\":\"add_provider_search_element\"},model:{value:(_vm.searchElement),callback:function ($$v) {_vm.searchElement=$$v},expression:\"searchElement\"}}),_vm._v(\" \"),_c('button',{staticClass:\"btn-medusa config_submitter\",attrs:{\"disabled\":!_vm.providerIdAvailable},on:{\"click\":_vm.addProvider}},[_vm._v(\"Add Provider\")])],1):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-custom-torznab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-custom-torznab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./config-custom-torznab.vue?vue&type=template&id=2a24e1e0&scoped=true&\"\nimport script from \"./config-custom-torznab.vue?vue&type=script&lang=js&\"\nexport * from \"./config-custom-torznab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./config-custom-torznab.vue?vue&type=style&index=0&id=2a24e1e0&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2a24e1e0\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{attrs:{\"id\":\"custom-torznab\"}},[_c('config-template',{attrs:{\"label-for\":\"select_torznab_provider\",\"label\":\"Select Provider\"}},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selectedProvider),expression:\"selectedProvider\"}],staticClass:\"form-control input-sm max-input350\",attrs:{\"id\":\"select-provider\"},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.selectedProvider=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},[_c('option',{attrs:{\"value\":\"#add\"}},[_vm._v(\"--- add new provider ---\")]),_vm._v(\" \"),_vm._l((_vm.torznabProviderOptions),function(option){return _c('option',{key:option.value,domProps:{\"value\":option.value}},[_vm._v(\"\\n \"+_vm._s(option.text)+\"\\n \")])})],2)]),_vm._v(\" \"),(_vm.currentProvider && _vm.selectedProvider !== '#add')?_c('div',{staticClass:\"edit-provider\"},[_c('config-textbox',{attrs:{\"disabled\":\"\",\"label\":\"Provider name\",\"id\":\"edit_provider_name\"},model:{value:(_vm.currentProvider.name),callback:function ($$v) {_vm.$set(_vm.currentProvider, \"name\", $$v)},expression:\"currentProvider.name\"}}),_vm._v(\" \"),_c('config-textbox',{attrs:{\"label\":\"Site Url\",\"id\":\"edit_provider_url\"},model:{value:(_vm.currentProvider.config.url),callback:function ($$v) {_vm.$set(_vm.currentProvider.config, \"url\", $$v)},expression:\"currentProvider.config.url\"}}),_vm._v(\" \"),_c('config-textbox',{attrs:{\"type\":\"password\",\"label\":\"Api key\",\"id\":\"edit_provider_api\"},model:{value:(_vm.currentProvider.config.apikey),callback:function ($$v) {_vm.$set(_vm.currentProvider.config, \"apikey\", $$v)},expression:\"currentProvider.config.apikey\"}}),_vm._v(\" \"),_c('config-template',{attrs:{\"label\":\"Categories\",\"label-for\":\"catids\"}},[_c('multiselect',{attrs:{\"value\":_vm.providerCatIds,\"multiple\":true,\"options\":_vm.availableCategories,\"label\":\"id\",\"track-by\":\"id\",\"taggable\":true,\"tag-placeholder\":\"Add this as new cat id\",\"placeholder\":\"Search or add a cat id\"},on:{\"tag\":_vm.addTag,\"input\":function($event){_vm.currentProvider.config.catIds = $event.map(cat => cat.id)}},scopedSlots:_vm._u([{key:\"option\",fn:function(props){return [(props.option.isTag)?_c('span',[_c('strong',[_vm._v(_vm._s(props.option.label))])]):_c('span',[_c('strong',[_vm._v(_vm._s(props.option.id))]),_vm._v(\" (\"+_vm._s(props.option.name)+\")\")])]}}],null,false,2742372380)})],1),_vm._v(\" \"),_c('button',{staticClass:\"btn-medusa btn-danger torznab_delete\",attrs:{\"disabled\":_vm.currentProvider.default,\"id\":\"torznab_delete\"},on:{\"click\":_vm.removeProvider}},[_vm._v(\"Delete\")]),_vm._v(\" \"),_c('button',{staticClass:\"btn-medusa config_submitter_refresh\",on:{\"click\":function($event){return _vm.$emit('save')}}},[_vm._v(\"Save Changes\")]),_vm._v(\" \"),(_vm.currentProvider.manager === 'prowlarr')?_c('p',{staticClass:\"manager-note\"},[_c('img',{staticStyle:{\"width\":\"16px\"},attrs:{\"src\":\"images/providers/prowlarr.png\"}}),_vm._v(\"\\n Note! This is a provider configured through the 'Configure Custom Prowlarr Providers' tab.\\n \")]):_vm._e()],1):_vm._e(),_vm._v(\" \"),(_vm.selectedProvider === '#add')?_c('div',{staticClass:\"add-provider\"},[_c('config-textbox',{attrs:{\"label\":\"Provider name\",\"id\":\"add_provider_name\"},scopedSlots:_vm._u([{key:\"warning\",fn:function(){return [_c('transition',{attrs:{\"name\":\"warning\"}},[(!_vm.providerIdAvailable)?_c('div',{staticClass:\"warning\"},[_vm._v(\"This provider id is already used.\")]):_vm._e()])]},proxy:true}],null,false,3405532282),model:{value:(_vm.name),callback:function ($$v) {_vm.name=$$v},expression:\"name\"}}),_vm._v(\" \"),_c('config-textbox',{attrs:{\"label\":\"Site Url\",\"id\":\"add_provider_url\"},model:{value:(_vm.url),callback:function ($$v) {_vm.url=$$v},expression:\"url\"}}),_vm._v(\" \"),_c('config-textbox',{attrs:{\"type\":\"password\",\"label\":\"Api key\",\"id\":\"add_provider_api\"},model:{value:(_vm.apikey),callback:function ($$v) {_vm.apikey=$$v},expression:\"apikey\"}}),_vm._v(\" \"),_c('button',{staticClass:\"btn-medusa config_submitter\",attrs:{\"disabled\":!_vm.providerIdAvailable},on:{\"click\":_vm.addProvider}},[_vm._v(\"Add Provider\")])],1):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{attrs:{\"id\":\"provider-options-nzb\"}},[(Object.keys(_vm.editProvider).length > 0)?_c('div',{staticClass:\"providerDiv\",attrs:{\"id\":`${_vm.editProvider.id}Div`}},[('username' in _vm.editProvider.config && _vm.editProvider.subType !== 'newznab')?_c('config-textbox',{attrs:{\"label\":\"Username\",\"id\":`${_vm.editProvider.id}_username`},model:{value:(_vm.editProvider.config.username),callback:function ($$v) {_vm.$set(_vm.editProvider.config, \"username\", $$v)},expression:\"editProvider.config.username\"}}):_vm._e(),_vm._v(\" \"),(_vm.editProvider.default && _vm.editProvider.needsAuth)?[_c('config-template',{attrs:{\"label-for\":`${_vm.editProvider.id}_url`,\"label\":\"URL\"}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.editProvider.config.url),expression:\"editProvider.config.url\"}],staticClass:\"form-control input-sm max-input350\",attrs:{\"type\":\"text\",\"id\":`${_vm.editProvider.id}_url`},domProps:{\"value\":(_vm.editProvider.config.url)},on:{\"input\":function($event){if($event.target.composing)return;_vm.$set(_vm.editProvider.config, \"url\", $event.target.value)}}})]),_vm._v(\" \"),('apikey' in _vm.editProvider.config)?_c('config-textbox',{attrs:{\"type\":\"password\",\"label\":\"API key\",\"id\":`${_vm.editProvider.id}_url`,\"input-class\":\"newznab_api_key\"},model:{value:(_vm.editProvider.config.apikey),callback:function ($$v) {_vm.$set(_vm.editProvider.config, \"apikey\", $$v)},expression:\"editProvider.config.apikey\"}}):_vm._e()]:(_vm.editProvider.subType !== 'newznab')?[('apikey' in _vm.editProvider.config)?_c('config-textbox',{attrs:{\"type\":\"password\",\"label\":\"API key\",\"id\":`${_vm.editProvider.id}_url`,\"input-class\":\"newznab_api_key\"},model:{value:(_vm.editProvider.config.apikey),callback:function ($$v) {_vm.$set(_vm.editProvider.config, \"apikey\", $$v)},expression:\"editProvider.config.apikey\"}}):_vm._e()]:_vm._e(),_vm._v(\" \"),_c('config-toggle-slider',{attrs:{\"label\":\"Enable daily searches\",\"name\":`${_vm.editProvider.id}_enable_daily`,\"id\":`${_vm.editProvider.id}_enable_daily`},model:{value:(_vm.editProvider.config.search.daily.enabled),callback:function ($$v) {_vm.$set(_vm.editProvider.config.search.daily, \"enabled\", $$v)},expression:\"editProvider.config.search.daily.enabled\"}},[_c('p',[_vm._v(\"enable provider to perform daily searches.\")])]),_vm._v(\" \"),_c('config-toggle-slider',{attrs:{\"label\":\"Enable manual searches\",\"name\":`${_vm.editProvider.id}_enable_manual`,\"id\":`${_vm.editProvider.id}_enable_manual`},model:{value:(_vm.editProvider.config.search.manual.enabled),callback:function ($$v) {_vm.$set(_vm.editProvider.config.search.manual, \"enabled\", $$v)},expression:\"editProvider.config.search.manual.enabled\"}},[_c('p',[_vm._v(\"enable provider to be used in 'Manual Search' feature.\")])]),_vm._v(\" \"),_c('config-toggle-slider',{attrs:{\"label\":\"Enable backlog searches\",\"name\":`${_vm.editProvider.id}_enable_backlog`,\"id\":`${_vm.editProvider.id}_enable_backlog`},model:{value:(_vm.editProvider.config.search.backlog.enabled),callback:function ($$v) {_vm.$set(_vm.editProvider.config.search.backlog, \"enabled\", $$v)},expression:\"editProvider.config.search.backlog.enabled\"}},[_c('p',[_vm._v(\"enable provider to perform backlog searches.\")])]),_vm._v(\" \"),_c('config-template',{attrs:{\"label-for\":\"backlog_search_mode\",\"label\":\"Backlog search mode\"}},[_c('div',{staticClass:\"radio-item\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.editProvider.config.search.mode),expression:\"editProvider.config.search.mode\"}],attrs:{\"type\":\"radio\",\"name\":`${_vm.editProvider.id}_search_mode_sponly`,\"id\":`${_vm.editProvider.id}_search_mode_sponly`,\"value\":\"sponly\"},domProps:{\"checked\":_vm._q(_vm.editProvider.config.search.mode,\"sponly\")},on:{\"change\":function($event){return _vm.$set(_vm.editProvider.config.search, \"mode\", \"sponly\")}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"one\"}},[_vm._v(\"Season packs only\")])]),_vm._v(\" \"),_c('div',{staticClass:\"radio-item\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.editProvider.config.search.mode),expression:\"editProvider.config.search.mode\"}],attrs:{\"type\":\"radio\",\"name\":`${_vm.editProvider.id}_search_mode_eponly`,\"id\":`${_vm.editProvider.id}_search_mode_eponly`,\"value\":\"eponly\"},domProps:{\"checked\":_vm._q(_vm.editProvider.config.search.mode,\"eponly\")},on:{\"change\":function($event){return _vm.$set(_vm.editProvider.config.search, \"mode\", \"eponly\")}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"one\"}},[_vm._v(\"Episodes only\")])]),_vm._v(\" \"),_c('p',[_vm._v(\"when searching with backlog you can choose to have it look for season packs only, or choose to have it build a complete season from just single episodes.\")])]),_vm._v(\" \"),_c('config-toggle-slider',{attrs:{\"label\":\"Enable fallback\",\"name\":`${_vm.editProvider.id}_enable_fallback`,\"id\":`${_vm.editProvider.id}_enable_fallback`},model:{value:(_vm.editProvider.config.search.fallback),callback:function ($$v) {_vm.$set(_vm.editProvider.config.search, \"fallback\", $$v)},expression:\"editProvider.config.search.fallback\"}},[_c('p',[_vm._v(\"when searching for a complete season depending on search mode you may return no results, this helps by restarting the search using the opposite search mode.\")])]),_vm._v(\" \"),_c('config-toggle-slider',{attrs:{\"label\":\"Enable search delay\",\"name\":`${_vm.editProvider.id}_enable_search_delay`,\"id\":`${_vm.editProvider.id}_enable_search_delay`},model:{value:(_vm.editProvider.config.search.delay.enabled),callback:function ($$v) {_vm.$set(_vm.editProvider.config.search.delay, \"enabled\", $$v)},expression:\"editProvider.config.search.delay.enabled\"}},[_c('p',[_vm._v(\"Enable to delay downloads for this provider for an x amount of hours. The provider will start snatching results for a specific episode after a delay has expired, compared to when it first got a result for the specific episode.\")]),_vm._v(\" \"),_c('p',[_vm._v(\"A negative value will have the daily search accepts results before the episode scheduled air date/time.\")]),_vm._v(\" \"),_c('p',[_vm._v(\"Proper and Backlog searches are exempted from the delay.\")])]),_vm._v(\" \"),(_vm.editProvider.config.search.delay.enabled)?_c('config-textbox-number',{attrs:{\"value\":_vm.editProvider.config.search.delay.duration / 60.0,\"label\":\"Search delay (hours)\",\"id\":`${_vm.editProvider.id}_search_delay_duration`,\"min\":0.5,\"step\":0.5},on:{\"input\":function($event){_vm.editProvider.config.search.delay.duration = $event * 60}}},[_c('p',[_vm._v(\"Amount of hours to wait for downloading a result compared to the first result for a specific episode.\")])]):_vm._e()],2):_vm._e(),_vm._v(\" \"),_c('button',{staticClass:\"btn-medusa config_submitter\",staticStyle:{\"float\":\"left\"},attrs:{\"disabled\":_vm.saving},on:{\"click\":_vm.save}},[_vm._v(\"Save Changes\")]),_vm._v(\" \"),_c('test-provider',{attrs:{\"provider-id\":_vm.editProvider.id,\"provider-name\":_vm.editProvider.name}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./test-provider.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./test-provider.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./test-provider.vue?vue&type=template&id=a8b1934a&scoped=true&\"\nimport script from \"./test-provider.vue?vue&type=script&lang=js&\"\nexport * from \"./test-provider.vue?vue&type=script&lang=js&\"\nimport style0 from \"./test-provider.vue?vue&type=style&index=0&id=a8b1934a&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"a8b1934a\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"test-provider\"},[_c('button',{staticClass:\"btn-medusa config_submitter\",on:{\"click\":_vm.test}},[_vm._v(\"Test for results\")]),_vm._v(\" \"),(_vm.loading)?_c('state-switch',{attrs:{\"state\":\"loading\",\"theme\":_vm.layout.themeName}}):_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.testResult),expression:\"testResult\"}],staticClass:\"testresult\"},[_vm._v(_vm._s(_vm.testResult))])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-provider-nzb.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-provider-nzb.vue?vue&type=script&lang=js&\"","\n\n\n\n\n","import { render, staticRenderFns } from \"./config-provider-nzb.vue?vue&type=template&id=0cf8c207&\"\nimport script from \"./config-provider-nzb.vue?vue&type=script&lang=js&\"\nexport * from \"./config-provider-nzb.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-provider-torrent.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-provider-torrent.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./config-provider-torrent.vue?vue&type=template&id=66655510&\"\nimport script from \"./config-provider-torrent.vue?vue&type=script&lang=js&\"\nexport * from \"./config-provider-torrent.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{attrs:{\"id\":\"provider-options-torrent\"}},[(Object.keys(_vm.editProvider).length > 0)?_c('div',{staticClass:\"providerDiv\",attrs:{\"id\":`${_vm.editProvider.id}Div`}},[('customUrl' in _vm.editProvider.config)?_c('config-textbox',{attrs:{\"label\":\"Custom Url\",\"id\":`${_vm.editProvider.id}_custom_url`},model:{value:(_vm.editProvider.config.customUrl),callback:function ($$v) {_vm.$set(_vm.editProvider.config, \"customUrl\", $$v)},expression:\"editProvider.config.customUrl\"}},[_c('p',[_vm._v(\"The URL should include the protocol (and port if applicable). Examples: http://192.168.1.4/ or http://localhost:3000/\")])]):_vm._e(),_vm._v(\" \"),('apikey' in _vm.editProvider.config && _vm.editProvider.config.subType !== 'torznab')?_c('config-textbox',{attrs:{\"type\":\"password\",\"label\":\"API key\",\"id\":`${_vm.editProvider.id}_api_key`},model:{value:(_vm.editProvider.config.apikey),callback:function ($$v) {_vm.$set(_vm.editProvider.config, \"apikey\", $$v)},expression:\"editProvider.config.apikey\"}}):_vm._e(),_vm._v(\" \"),('digest' in _vm.editProvider.config)?_c('config-textbox',{attrs:{\"type\":\"password\",\"label\":\"Digest\",\"id\":`${_vm.editProvider.id}_digest`},model:{value:(_vm.editProvider.config.digest),callback:function ($$v) {_vm.$set(_vm.editProvider.config, \"digest\", $$v)},expression:\"editProvider.config.digest\"}}):_vm._e(),_vm._v(\" \"),('hash' in _vm.editProvider.config)?_c('config-textbox',{attrs:{\"label\":\"Hash\",\"id\":`${_vm.editProvider.id}_hash`},model:{value:(_vm.editProvider.config.hash),callback:function ($$v) {_vm.$set(_vm.editProvider.config, \"hash\", $$v)},expression:\"editProvider.config.hash\"}}):_vm._e(),_vm._v(\" \"),('username' in _vm.editProvider.config)?_c('config-textbox',{attrs:{\"label\":\"Username\",\"id\":`${_vm.editProvider.id}_username`},model:{value:(_vm.editProvider.config.username),callback:function ($$v) {_vm.$set(_vm.editProvider.config, \"username\", $$v)},expression:\"editProvider.config.username\"}}):_vm._e(),_vm._v(\" \"),('password' in _vm.editProvider.config)?_c('config-textbox',{attrs:{\"autocomplete\":\"no\",\"type\":\"password\",\"label\":\"Password\",\"id\":`${_vm.editProvider.id}_password`},model:{value:(_vm.editProvider.config.password),callback:function ($$v) {_vm.$set(_vm.editProvider.config, \"password\", $$v)},expression:\"editProvider.config.password\"}}):_vm._e(),_vm._v(\" \"),(_vm.editProvider.config.cookies.enabled || _vm.editProvider.subType === 'torrentrss')?_c('config-textbox',{attrs:{\"label\":\"Cookies\",\"id\":`${_vm.editProvider.id}_cookies`},model:{value:(_vm.editProvider.config.cookies.values),callback:function ($$v) {_vm.$set(_vm.editProvider.config.cookies, \"values\", $$v)},expression:\"editProvider.config.cookies.values\"}},[(_vm.editProvider.config.cookies.required)?[_c('p',[_vm._v(\"eg. \"+_vm._s(_vm.editProvider.config.cookies.required.map(cookie => cookie + '=xx;').join('').slice(0, -1)))]),_vm._v(\" \"),_c('p',[_vm._v(\"This provider requires the following cookies: \"+_vm._s(_vm.editProvider.config.cookies.required.join(', '))+\".\\n \"),_c('br'),_vm._v(\"For a step by step guide please follow the link to our \"),_c('app-link',{attrs:{\"href\":\"https://github.com/pymedusa/Medusa/wiki/Configure-Providers-with-captcha-protection\"}},[_vm._v(\"WIKI\")])],1)]:_vm._e()],2):_vm._e(),_vm._v(\" \"),('passkey' in _vm.editProvider.config)?_c('config-textbox',{attrs:{\"label\":\"Passkey\",\"id\":`${_vm.editProvider.id}_passkey`},model:{value:(_vm.editProvider.config.passkey),callback:function ($$v) {_vm.$set(_vm.editProvider.config, \"passkey\", $$v)},expression:\"editProvider.config.passkey\"}}):_vm._e(),_vm._v(\" \"),('pin' in _vm.editProvider.config)?_c('config-textbox',{attrs:{\"type\":\"password\",\"label\":\"Pin\",\"id\":`${_vm.editProvider.id}_pin`},model:{value:(_vm.editProvider.config.pin),callback:function ($$v) {_vm.$set(_vm.editProvider.config, \"pin\", $$v)},expression:\"editProvider.config.pin\"}}):_vm._e(),_vm._v(\" \"),('pid' in _vm.editProvider.config)?_c('config-textbox',{attrs:{\"type\":\"password\",\"label\":\"Pid\",\"id\":`${_vm.editProvider.id}_pid`},model:{value:(_vm.editProvider.config.pid),callback:function ($$v) {_vm.$set(_vm.editProvider.config, \"pid\", $$v)},expression:\"editProvider.config.pid\"}}):_vm._e(),_vm._v(\" \"),('ratio' in _vm.editProvider.config)?_c('config-textbox-number',{attrs:{\"min\":-1,\"step\":0.1,\"label\":\"Seed ratio\",\"id\":`${_vm.editProvider.id}_seed_ratio`},model:{value:(_vm.editProvider.config.ratio),callback:function ($$v) {_vm.$set(_vm.editProvider.config, \"ratio\", $$v)},expression:\"editProvider.config.ratio\"}},[_c('p',[_vm._v(\"Configure a desired seeding ratio. Used by the (automated download handler in config - postprocessing)\\n \"),_c('br'),_vm._v(\"-1 for provider specific option is disabled.\\n \"),_c('br'),_vm._v(\"0 for not using a seed ratio. Actions configured in the download handler, will not wait for finished seeding.\\n \"),_c('br'),_vm._v(\"If disabled the global option is used in config - postprocessing (automated download handling))\\n \")])]):_vm._e(),_vm._v(\" \"),('minseed' in _vm.editProvider.config)?_c('config-textbox-number',{attrs:{\"label\":\"Minimum seeders\",\"min\":0,\"step\":1,\"id\":`${_vm.editProvider.id}_min_seed`},model:{value:(_vm.editProvider.config.minseed),callback:function ($$v) {_vm.$set(_vm.editProvider.config, \"minseed\", $$v)},expression:\"editProvider.config.minseed\"}}):_vm._e(),_vm._v(\" \"),('minleech' in _vm.editProvider.config)?_c('config-textbox-number',{attrs:{\"label\":\"Minimum leechers\",\"min\":0,\"step\":1,\"id\":`${_vm.editProvider.id}_min_leech`},model:{value:(_vm.editProvider.config.minleech),callback:function ($$v) {_vm.$set(_vm.editProvider.config, \"minleech\", $$v)},expression:\"editProvider.config.minleech\"}}):_vm._e(),_vm._v(\" \"),('confirmed' in _vm.editProvider.config)?_c('config-toggle-slider',{attrs:{\"label\":\"Confirmed downloads\",\"name\":`${_vm.editProvider.id}_confirmed`,\"id\":`${_vm.editProvider.id}_confirmed`},model:{value:(_vm.editProvider.config.confirmed),callback:function ($$v) {_vm.$set(_vm.editProvider.config, \"confirmed\", $$v)},expression:\"editProvider.config.confirmed\"}},[_c('p',[_vm._v(\"only download torrents from trusted or verified uploaders ?\")])]):_vm._e(),_vm._v(\" \"),('ranked' in _vm.editProvider.config)?_c('config-toggle-slider',{attrs:{\"label\":\"Ranked torrents\",\"name\":`${_vm.editProvider.id}_ranked`,\"id\":`${_vm.editProvider.id}_ranked`},model:{value:(_vm.editProvider.config.ranked),callback:function ($$v) {_vm.$set(_vm.editProvider.config, \"ranked\", $$v)},expression:\"editProvider.config.ranked\"}},[_c('p',[_vm._v(\"only download ranked torrents (trusted releases)\")])]):_vm._e(),_vm._v(\" \"),('sorting' in _vm.editProvider.config)?_c('config-template',{attrs:{\"label-for\":\"sorting\",\"label\":\"Sorting results by\"}},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.editProvider.config.sorting),expression:\"editProvider.config.sorting\"}],staticClass:\"form-control input-sm max-input350\",attrs:{\"id\":\"sorting\"},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.$set(_vm.editProvider.config, \"sorting\", $event.target.multiple ? $$selectedVal : $$selectedVal[0])}}},[_c('option',{attrs:{\"value\":\"last\"}},[_vm._v(\"last\")]),_vm._v(\" \"),_c('option',{attrs:{\"value\":\"seeders\"}},[_vm._v(\"seeders\")]),_vm._v(\" \"),_c('option',{attrs:{\"value\":\"leechers\"}},[_vm._v(\"leechers\")])])]):_vm._e(),_vm._v(\" \"),('freeleech' in _vm.editProvider.config)?_c('config-toggle-slider',{attrs:{\"label\":\"Freeleech\",\"name\":`${_vm.editProvider.id}_freeleech`,\"id\":`${_vm.editProvider.id}_freeleech`},model:{value:(_vm.editProvider.config.freeleech),callback:function ($$v) {_vm.$set(_vm.editProvider.config, \"freeleech\", $$v)},expression:\"editProvider.config.freeleech\"}},[_c('p',[_vm._v(\"only download \"),_c('b',[_vm._v(\"\\\"FreeLeech\\\"\")]),_vm._v(\" torrents.\")])]):_vm._e(),_vm._v(\" \"),_c('config-toggle-slider',{attrs:{\"label\":\"Enable daily searches\",\"name\":`${_vm.editProvider.id}_enable_daily`,\"id\":`${_vm.editProvider.id}_enable_daily`},model:{value:(_vm.editProvider.config.search.daily.enabled),callback:function ($$v) {_vm.$set(_vm.editProvider.config.search.daily, \"enabled\", $$v)},expression:\"editProvider.config.search.daily.enabled\"}},[_c('p',[_vm._v(\"enable provider to perform daily searches.\")])]),_vm._v(\" \"),_c('config-toggle-slider',{attrs:{\"label\":\"Enable manual searches\",\"name\":`${_vm.editProvider.id}_enable_manual`,\"id\":`${_vm.editProvider.id}_enable_manual`},model:{value:(_vm.editProvider.config.search.manual.enabled),callback:function ($$v) {_vm.$set(_vm.editProvider.config.search.manual, \"enabled\", $$v)},expression:\"editProvider.config.search.manual.enabled\"}},[_c('p',[_vm._v(\"enable provider to be used in 'Manual Search' feature.\")])]),_vm._v(\" \"),_c('config-toggle-slider',{attrs:{\"label\":\"Enable backlog searches\",\"name\":`${_vm.editProvider.id}_enable_backlog`,\"id\":`${_vm.editProvider.id}_enable_backlog`},model:{value:(_vm.editProvider.config.search.backlog.enabled),callback:function ($$v) {_vm.$set(_vm.editProvider.config.search.backlog, \"enabled\", $$v)},expression:\"editProvider.config.search.backlog.enabled\"}},[_c('p',[_vm._v(\"enable provider to perform backlog searches.\")])]),_vm._v(\" \"),_c('config-template',{attrs:{\"label-for\":\"backlog_search_mode\",\"label\":\"Backlog search mode\"}},[_c('div',{staticClass:\"radio-item\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.editProvider.config.search.mode),expression:\"editProvider.config.search.mode\"}],attrs:{\"type\":\"radio\",\"name\":`${_vm.editProvider.id}_search_mode_sponly`,\"id\":`${_vm.editProvider.id}_search_mode_sponly`,\"value\":\"sponly\"},domProps:{\"checked\":_vm._q(_vm.editProvider.config.search.mode,\"sponly\")},on:{\"change\":function($event){return _vm.$set(_vm.editProvider.config.search, \"mode\", \"sponly\")}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"one\"}},[_vm._v(\"Season packs only\")])]),_vm._v(\" \"),_c('div',{staticClass:\"radio-item\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.editProvider.config.search.mode),expression:\"editProvider.config.search.mode\"}],attrs:{\"type\":\"radio\",\"name\":`${_vm.editProvider.id}_search_mode_eponly`,\"id\":`${_vm.editProvider.id}_search_mode_eponly`,\"value\":\"eponly\"},domProps:{\"checked\":_vm._q(_vm.editProvider.config.search.mode,\"eponly\")},on:{\"change\":function($event){return _vm.$set(_vm.editProvider.config.search, \"mode\", \"eponly\")}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"one\"}},[_vm._v(\"Episodes only\")])]),_vm._v(\" \"),_c('p',[_vm._v(\"when searching with backlog you can choose to have it look for season packs only, or choose to have it build a complete season from just single episodes.\")])]),_vm._v(\" \"),_c('config-toggle-slider',{attrs:{\"label\":\"Enable fallback\",\"name\":`${_vm.editProvider.id}_enable_fallback`,\"id\":`${_vm.editProvider.id}_enable_fallback`},model:{value:(_vm.editProvider.config.search.fallback),callback:function ($$v) {_vm.$set(_vm.editProvider.config.search, \"fallback\", $$v)},expression:\"editProvider.config.search.fallback\"}},[_c('p',[_vm._v(\"when searching for a complete season depending on search mode you may return no results, this helps by restarting the search using the opposite search mode.\")])]),_vm._v(\" \"),_c('config-toggle-slider',{attrs:{\"label\":\"Enable search delay\",\"name\":`${_vm.editProvider.id}_enable_search_delay`,\"id\":`${_vm.editProvider.id}_enable_search_delay`},model:{value:(_vm.editProvider.config.search.delay.enabled),callback:function ($$v) {_vm.$set(_vm.editProvider.config.search.delay, \"enabled\", $$v)},expression:\"editProvider.config.search.delay.enabled\"}},[_c('p',[_vm._v(\"Enable to delay downloads for this provider for an x amount of hours. The provider will start snatching results for a specific episode after a delay has expired, compared to when it first got a result for the specific episode.\")]),_vm._v(\" \"),_c('p',[_vm._v(\"A negative value will have the daily search accepts results before the episode scheduled air date/time.\")]),_vm._v(\" \"),_c('p',[_vm._v(\"Proper and Backlog searches are exempted from the delay.\")])]),_vm._v(\" \"),(_vm.editProvider.config.search.delay.enabled)?_c('config-textbox-number',{attrs:{\"value\":_vm.editProvider.config.search.delay.duration / 60.0,\"label\":\"Search delay (hours)\",\"id\":`${_vm.editProvider.id}_search_delay_duration`,\"step\":0.5},on:{\"input\":function($event){_vm.editProvider.config.search.delay.duration = $event * 60}}},[_c('p',[_vm._v(\"Amount of hours to wait for downloading a result compared to the first result for a specific episode.\")])]):_vm._e()],1):_vm._e(),_vm._v(\" \"),_c('button',{staticClass:\"btn-medusa config_submitter\",staticStyle:{\"float\":\"left\"},attrs:{\"disabled\":_vm.saving},on:{\"click\":_vm.save}},[_vm._v(\"Save Changes\")]),_vm._v(\" \"),_c('test-provider',{attrs:{\"provider-id\":_vm.editProvider.id,\"provider-name\":_vm.editProvider.name}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./custom-logs.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./custom-logs.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./custom-logs.vue?vue&type=template&id=12aec99f&scoped=true&\"\nimport script from \"./custom-logs.vue?vue&type=script&lang=js&\"\nexport * from \"./custom-logs.vue?vue&type=script&lang=js&\"\nimport style0 from \"./custom-logs.vue?vue&type=style&index=0&id=12aec99f&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"12aec99f\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"select-list\"},[_c('div',{staticClass:\"wrapper\"},_vm._l((_vm.customLogs),function(customLog){return _c('div',{key:customLog.identifier},[_c('div',{staticClass:\"level\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(customLog.level),expression:\"customLog.level\"}],on:{\"input\":function($event){return _vm.saveLogs($event, customLog.identifier)},\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.$set(customLog, \"level\", $event.target.multiple ? $$selectedVal : $$selectedVal[0])}}},_vm._l((_vm.levels),function(option){return _c('option',{key:option.value,domProps:{\"value\":option.value}},[_vm._v(_vm._s(option.text)+\"\\n \")])}),0)]),_vm._v(\" \"),_c('div',{staticClass:\"identifier\"},[_vm._v(_vm._s(customLog.identifier))])])}),0)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./externals.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./externals.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./externals.vue?vue&type=template&id=7713c2cf&\"\nimport script from \"./externals.vue?vue&type=script&lang=js&\"\nexport * from \"./externals.vue?vue&type=script&lang=js&\"\nimport style0 from \"./externals.vue?vue&type=style&index=0&id=7713c2cf&prod&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"external-ids\"},[_c('span',[_vm._v(\" - \")]),_vm._v(\" \"),(_vm.externals.imdb && _vm.show.imdbInfo)?_c('app-link',{attrs:{\"href\":`https://www.imdb.com/title/${_vm.show.imdbInfo.imdbId}`,\"title\":`https://www.imdb.com/title/${_vm.show.imdbInfo.imdbId}`}},[_c('img',{staticStyle:{\"margin-top\":\"-1px\",\"vertical-align\":\"middle\"},attrs:{\"alt\":\"[imdb]\",\"height\":\"16\",\"width\":\"16\",\"src\":\"images/imdb16.png\"}})]):_vm._e(),_vm._v(\" \"),(_vm.externals.trakt)?_c('app-link',{attrs:{\"href\":`https://trakt.tv/shows/${_vm.externals.trakt}`,\"title\":`https://trakt.tv/shows/${_vm.externals.trakt}`}},[_c('img',{attrs:{\"alt\":\"[trakt]\",\"height\":\"16\",\"width\":\"16\",\"src\":\"images/trakt.png\"}})]):_vm._e(),_vm._v(\" \"),(_vm.externals.tvdb)?_c('app-link',{attrs:{\"href\":`https://www.thetvdb.com/dereferrer/series/${_vm.externals.tvdb}`,\"title\":`https://www.thetvdb.com/dereferrer/series/${_vm.externals.tvdb}`}},[_c('img',{attrs:{\"alt\":\"[tvdb]\",\"height\":\"16\",\"width\":\"16\",\"src\":\"images/thetvdb16.png\"}})]):_vm._e(),_vm._v(\" \"),(_vm.externals.tvmaze)?_c('app-link',{attrs:{\"href\":`https://www.tvmaze.com/shows/${_vm.externals.tvmaze}`,\"title\":`https://www.tvmaze.com/shows/${_vm.externals.tvmaze}`}},[_c('img',{attrs:{\"alt\":\"[tvmaze]\",\"height\":\"16\",\"width\":\"16\",\"src\":\"images/tvmaze16.png\"}})]):_vm._e(),_vm._v(\" \"),(_vm.externals.tmdb)?_c('app-link',{attrs:{\"href\":`https://www.themoviedb.org/tv/${_vm.externals.tmdb}`,\"title\":`https://www.themoviedb.org/tv/${_vm.externals.tmdb}`}},[_c('img',{attrs:{\"alt\":\"[tmdb]\",\"height\":\"16\",\"width\":\"16\",\"src\":\"images/tmdb16.png\"}})]):_vm._e(),_vm._v(\" \"),(_vm.show.xemNumbering && _vm.show.xemNumbering.length > 0)?_c('app-link',{attrs:{\"href\":`http://thexem.de/search?q=${_vm.show.title}`,\"title\":`http://thexem.de/search?q=${_vm.show.title}`}},[_c('img',{staticStyle:{\"margin-top\":\"-1px\",\"vertical-align\":\"middle\"},attrs:{\"alt\":\"[xem]\",\"height\":\"16\",\"width\":\"16\",\"src\":\"images/xem.png\"}})]):_vm._e(),_vm._v(\" \"),(_vm.externals.tvdb)?_c('app-link',{attrs:{\"href\":`https://fanart.tv/series/${_vm.externals.tvdb}`,\"title\":`https://fanart.tv/series/${_vm.externals.tvdb}`}},[_c('img',{staticClass:\"fanart\",attrs:{\"alt\":\"[fanart.tv]\",\"height\":\"16\",\"width\":\"16\",\"src\":\"images/fanart.tv.png\"}})]):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"file-browser max-width\"},[_c('div',{class:(_vm.showBrowseButton ? 'input-group' : 'input-group-no-btn')},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.currentPath),expression:\"currentPath\"}],ref:\"locationInput\",staticClass:\"form-control input-sm fileBrowserField\",attrs:{\"name\":_vm.name,\"type\":\"text\"},domProps:{\"value\":(_vm.currentPath)},on:{\"input\":function($event){if($event.target.composing)return;_vm.currentPath=$event.target.value}}}),_vm._v(\" \"),(_vm.showBrowseButton)?_c('div',{staticClass:\"input-group-btn\",attrs:{\"title\":_vm.title,\"alt\":_vm.title},on:{\"click\":function($event){$event.preventDefault();return _vm.openDialog.apply(null, arguments)}}},[_vm._m(0)]):_vm._e()]),_vm._v(\" \"),_c('div',{ref:\"fileBrowserDialog\",staticClass:\"fileBrowserDialog\"}),_vm._v(\" \"),_c('input',{ref:\"fileBrowserSearchBox\",staticClass:\"form-control\",staticStyle:{\"display\":\"none\"},attrs:{\"type\":\"text\"},domProps:{\"value\":_vm.currentPath},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.browse($event.target.value)}}}),_vm._v(\" \"),_c('ul',{ref:\"fileBrowserFileList\"},_vm._l((_vm.files),function(file){return _c('li',{key:file.name,staticClass:\"ui-state-default ui-corner-all\"},[_c('a',{on:{\"mouseover\":function($event){return _vm.toggleFolder(file, $event)},\"mouseout\":function($event){return _vm.toggleFolder(file, $event)},\"click\":function($event){return _vm.fileClicked(file)}}},[_c('span',{class:'ui-icon ' + (file.isFile ? 'ui-icon-blank' : 'ui-icon-folder-collapsed')}),_vm._v(\" \"+_vm._s(file.name)+\"\\n \")])])}),0)])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"btn btn-default input-sm\",staticStyle:{\"font-size\":\"14px\"}},[_c('i',{staticClass:\"glyphicon glyphicon-open\"})])\n}]\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./file-browser.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./file-browser.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./file-browser.vue?vue&type=template&id=b7bcca72&scoped=true&\"\nimport script from \"./file-browser.vue?vue&type=script&lang=js&\"\nexport * from \"./file-browser.vue?vue&type=script&lang=js&\"\nimport style0 from \"./file-browser.vue?vue&type=style&index=0&id=b7bcca72&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b7bcca72\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('select')\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./language-select.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./language-select.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./language-select.vue?vue&type=template&id=6d9e3033&\"\nimport script from \"./language-select.vue?vue&type=script&lang=js&\"\nexport * from \"./language-select.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./load-progress-bar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./load-progress-bar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./load-progress-bar.vue?vue&type=template&id=3b82c21e&\"\nimport script from \"./load-progress-bar.vue?vue&type=script&lang=js&\"\nexport * from \"./load-progress-bar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./load-progress-bar.vue?vue&type=style&index=0&id=3b82c21e&prod&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.display)?_c('div',{staticClass:\"load-progress-bar-container\"},[_c('div',{staticClass:\"border\"},[_c('div',{staticClass:\"msg\"},[_vm._v(_vm._s(_vm.loadMsg))]),_vm._v(\" \"),_c('div',{staticClass:\"progress\",style:(_vm.styleProgress)})])]):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{attrs:{\"id\":\"name-pattern-wrapper\"}},[(_vm.type)?_c('div',{staticClass:\"form-group\"},[_c('div',{staticClass:\"col-sm-2\"},[_c('label',{staticClass:\"control-label\",attrs:{\"for\":\"enable_naming_custom\"}},[_c('span',[_vm._v(\"Custom \"+_vm._s(_vm.type))])])]),_vm._v(\" \"),_c('div',{staticClass:\"col-sm-10 content\"},[_c('toggle-button',{attrs:{\"width\":45,\"height\":22,\"id\":\"enable_naming_custom\",\"name\":\"enable_naming_custom\",\"sync\":\"\"},on:{\"input\":function($event){return _vm.update()}},model:{value:(_vm.isEnabled),callback:function ($$v) {_vm.isEnabled=$$v},expression:\"isEnabled\"}}),_vm._v(\" \"),_c('span',[_vm._v(\"Name \"+_vm._s(_vm.type)+\" shows differently than regular shows?\")])],1)]):_vm._e(),_vm._v(\" \"),(!_vm.type || _vm.isEnabled)?_c('div',{staticClass:\"episode-naming\"},[_c('div',{staticClass:\"form-group\"},[_vm._m(0),_vm._v(\" \"),_c('div',{staticClass:\"col-sm-10 content\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selectedNamingPattern),expression:\"selectedNamingPattern\"}],staticClass:\"form-control input-sm\",attrs:{\"id\":\"name_presets\"},on:{\"change\":[function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.selectedNamingPattern=$event.target.multiple ? $$selectedVal : $$selectedVal[0]},_vm.updatePatternSamples],\"input\":function($event){return _vm.update()}}},_vm._l((_vm.presets),function(preset){return _c('option',{key:preset.pattern,attrs:{\"id\":preset.pattern}},[_vm._v(_vm._s(preset.example))])}),0)])]),_vm._v(\" \"),_c('div',{attrs:{\"id\":\"naming_custom\"}},[(_vm.isCustom)?_c('div',{staticClass:\"form-group\",staticStyle:{\"padding-top\":\"0\"}},[_vm._m(1),_vm._v(\" \"),_c('div',{staticClass:\"col-sm-10 content\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.customName),expression:\"customName\"}],staticClass:\"form-control-inline-max input-sm max-input350\",attrs:{\"type\":\"text\",\"name\":\"naming_pattern\",\"id\":\"naming_pattern\"},domProps:{\"value\":(_vm.customName)},on:{\"change\":_vm.updatePatternSamples,\"input\":function($event){if($event.target.composing)return;_vm.customName=$event.target.value}}}),_vm._v(\" \"),_c('img',{staticClass:\"legend\",attrs:{\"src\":\"images/legend16.png\",\"width\":\"16\",\"height\":\"16\",\"alt\":\"[Toggle Key]\",\"id\":\"show_naming_key\",\"title\":\"Toggle Naming Legend\"},on:{\"click\":function($event){_vm.showLegend = !_vm.showLegend}}})])]):_vm._e(),_vm._v(\" \"),(_vm.showLegend && _vm.isCustom)?_c('div',{staticClass:\"nocheck\",attrs:{\"id\":\"naming_key\"}},[_c('table',{staticClass:\"Key\"},[_vm._m(2),_vm._v(\" \"),_vm._m(3),_vm._v(\" \"),_c('tbody',[_vm._m(4),_vm._v(\" \"),_vm._m(5),_vm._v(\" \"),_vm._m(6),_vm._v(\" \"),_vm._m(7),_vm._v(\" \"),_vm._m(8),_vm._v(\" \"),_vm._m(9),_vm._v(\" \"),_vm._m(10),_vm._v(\" \"),_vm._m(11),_vm._v(\" \"),_vm._m(12),_vm._v(\" \"),_vm._m(13),_vm._v(\" \"),_vm._m(14),_vm._v(\" \"),_vm._m(15),_vm._v(\" \"),_vm._m(16),_vm._v(\" \"),_vm._m(17),_vm._v(\" \"),_vm._m(18),_vm._v(\" \"),_vm._m(19),_vm._v(\" \"),_c('tr',[_vm._m(20),_vm._v(\" \"),_c('td',[_vm._v(\"%M\")]),_vm._v(\" \"),_c('td',[_vm._v(_vm._s(_vm.getDateFormat('M')))])]),_vm._v(\" \"),_c('tr',{staticClass:\"even\"},[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%D\")]),_vm._v(\" \"),_c('td',[_vm._v(_vm._s(_vm.getDateFormat('d')))])]),_vm._v(\" \"),_c('tr',[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%Y\")]),_vm._v(\" \"),_c('td',[_vm._v(_vm._s(_vm.getDateFormat('yyyy')))])]),_vm._v(\" \"),_c('tr',[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%Mm\")]),_vm._v(\" \"),_c('td',[_vm._v(_vm._s(_vm.getDateFormat('MMM')))])]),_vm._v(\" \"),_c('tr',[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%MM\")]),_vm._v(\" \"),_c('td',[_vm._v(_vm._s(_vm.getDateFormat('MMMM')))])]),_vm._v(\" \"),_c('tr',[_vm._m(21),_vm._v(\" \"),_c('td',[_vm._v(\"%CM\")]),_vm._v(\" \"),_c('td',[_vm._v(_vm._s(_vm.getDateFormat('M')))])]),_vm._v(\" \"),_c('tr',{staticClass:\"even\"},[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%CD\")]),_vm._v(\" \"),_c('td',[_vm._v(_vm._s(_vm.getDateFormat('d')))])]),_vm._v(\" \"),_c('tr',[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%CY\")]),_vm._v(\" \"),_c('td',[_vm._v(_vm._s(_vm.getDateFormat('yyyy')))])]),_vm._v(\" \"),_vm._m(22),_vm._v(\" \"),_vm._m(23),_vm._v(\" \"),_vm._m(24),_vm._v(\" \"),_vm._m(25),_vm._v(\" \"),_vm._m(26),_vm._v(\" \"),_vm._m(27),_vm._v(\" \"),_c('tr',{staticClass:\"even\"},[_vm._m(28),_vm._v(\" \"),_c('td',[_vm._v(\"%SY\")]),_vm._v(\" \"),_c('td',[_vm._v(_vm._s(_vm.getDateFormat('yyyy')))])]),_vm._v(\" \"),_vm._m(29),_vm._v(\" \"),_vm._m(30),_vm._v(\" \"),_vm._m(31)])])]):_vm._e()]),_vm._v(\" \"),(_vm.selectedMultiEpStyle)?_c('div',{staticClass:\"form-group\"},[_vm._m(32),_vm._v(\" \"),_c('div',{staticClass:\"col-sm-10 content\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selectedMultiEpStyle),expression:\"selectedMultiEpStyle\"}],staticClass:\"form-control input-sm\",attrs:{\"id\":\"naming_multi_ep\",\"name\":\"naming_multi_ep\"},on:{\"change\":[function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.selectedMultiEpStyle=$event.target.multiple ? $$selectedVal : $$selectedVal[0]},_vm.updatePatternSamples],\"input\":function($event){return _vm.update($event)}}},_vm._l((_vm.availableMultiEpStyles),function(multiEpStyle){return _c('option',{key:multiEpStyle.value,attrs:{\"id\":\"multiEpStyle\"},domProps:{\"value\":multiEpStyle.value}},[_vm._v(_vm._s(multiEpStyle.text))])}),0)])]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"form-group row\"},[_c('h3',{staticClass:\"col-sm-12\"},[_vm._v(\"Single-EP Sample:\")]),_vm._v(\" \"),_c('div',{staticClass:\"example col-sm-12\"},[_c('span',{staticClass:\"jumbo\",attrs:{\"id\":\"naming_example\"}},[_vm._v(_vm._s(_vm.namingExample))])])]),_vm._v(\" \"),(_vm.isMulti)?_c('div',{staticClass:\"form-group row\"},[_c('h3',{staticClass:\"col-sm-12\"},[_vm._v(\"Multi-EP sample:\")]),_vm._v(\" \"),_c('div',{staticClass:\"example col-sm-12\"},[_c('span',{staticClass:\"jumbo\",attrs:{\"id\":\"naming_example_multi\"}},[_vm._v(_vm._s(_vm.namingExampleMulti))])])]):_vm._e(),_vm._v(\" \"),(_vm.animeType > 0)?_c('div',{staticClass:\"form-group\"},[_vm._m(33),_vm._v(\" \"),_c('div',{staticClass:\"col-sm-10 content\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.animeType),expression:\"animeType\"}],attrs:{\"type\":\"radio\",\"name\":\"naming_anime\",\"id\":\"naming_anime\",\"value\":\"1\"},domProps:{\"checked\":_vm._q(_vm.animeType,\"1\")},on:{\"change\":[function($event){_vm.animeType=\"1\"},_vm.updatePatternSamples]}}),_vm._v(\" \"),_c('span',[_vm._v(\"Add the absolute number to the season/episode format?\")]),_vm._v(\" \"),_c('p',[_vm._v(\"Only applies to animes. (e.g. S15E45 - 310 vs S15E45)\")])])]):_vm._e(),_vm._v(\" \"),(_vm.animeType > 0)?_c('div',{staticClass:\"form-group\"},[_vm._m(34),_vm._v(\" \"),_c('div',{staticClass:\"col-sm-10 content\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.animeType),expression:\"animeType\"}],attrs:{\"type\":\"radio\",\"name\":\"naming_anime\",\"id\":\"naming_anime_only\",\"value\":\"2\"},domProps:{\"checked\":_vm._q(_vm.animeType,\"2\")},on:{\"change\":[function($event){_vm.animeType=\"2\"},_vm.updatePatternSamples]}}),_vm._v(\" \"),_c('span',[_vm._v(\"Replace season/episode format with absolute number\")]),_vm._v(\" \"),_c('p',[_vm._v(\"Only applies to animes.\")])])]):_vm._e(),_vm._v(\" \"),(_vm.animeType > 0)?_c('div',{staticClass:\"form-group\"},[_vm._m(35),_vm._v(\" \"),_c('div',{staticClass:\"col-sm-10 content\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.animeType),expression:\"animeType\"}],attrs:{\"type\":\"radio\",\"name\":\"naming_anime\",\"id\":\"naming_anime_none\",\"value\":\"3\"},domProps:{\"checked\":_vm._q(_vm.animeType,\"3\")},on:{\"change\":[function($event){_vm.animeType=\"3\"},_vm.updatePatternSamples]}}),_vm._v(\" \"),_c('span',[_vm._v(\"Don't include the absolute number\")]),_vm._v(\" \"),_c('p',[_vm._v(\"Only applies to animes.\")])])]):_vm._e()]):_vm._e()])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"col-sm-2\"},[_c('label',{staticClass:\"control-label\",attrs:{\"for\":\"name_presets\"}},[_c('span',[_vm._v(\"Name Pattern:\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"col-sm-2\"},[_c('label',{staticClass:\"control-label\"},[_c('span',[_vm._v(\" \")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('thead',[_c('tr',[_c('th',{staticClass:\"align-right\"},[_vm._v(\"Meaning\")]),_vm._v(\" \"),_c('th',[_vm._v(\"Pattern\")]),_vm._v(\" \"),_c('th',{attrs:{\"width\":\"60%\"}},[_vm._v(\"Result\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tfoot',[_c('tr',[_c('th',{attrs:{\"colspan\":\"3\"}},[_vm._v(\"Use lower case if you want lower case names (eg. %sn, %e.n, %q_n etc)\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',[_c('td',{staticClass:\"align-right\"},[_c('b',[_vm._v(\"Show Name:\")])]),_vm._v(\" \"),_c('td',[_vm._v(\"%SN\")]),_vm._v(\" \"),_c('td',[_vm._v(\"Show Name\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',{staticClass:\"even\"},[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%S.N\")]),_vm._v(\" \"),_c('td',[_vm._v(\"Show.Name\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%S_N\")]),_vm._v(\" \"),_c('td',[_vm._v(\"Show_Name\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',{staticClass:\"even\"},[_c('td',{staticClass:\"align-right\"},[_c('b',[_vm._v(\"Season Number:\")])]),_vm._v(\" \"),_c('td',[_vm._v(\"%S\")]),_vm._v(\" \"),_c('td',[_vm._v(\"2\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%0S\")]),_vm._v(\" \"),_c('td',[_vm._v(\"02\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',{staticClass:\"even\"},[_c('td',{staticClass:\"align-right\"},[_c('b',[_vm._v(\"XEM Season Number:\")])]),_vm._v(\" \"),_c('td',[_vm._v(\"%XS\")]),_vm._v(\" \"),_c('td',[_vm._v(\"2\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%0XS\")]),_vm._v(\" \"),_c('td',[_vm._v(\"02\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',{staticClass:\"even\"},[_c('td',{staticClass:\"align-right\"},[_c('b',[_vm._v(\"Episode Number:\")])]),_vm._v(\" \"),_c('td',[_vm._v(\"%E\")]),_vm._v(\" \"),_c('td',[_vm._v(\"3\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%0E\")]),_vm._v(\" \"),_c('td',[_vm._v(\"03\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',{staticClass:\"even\"},[_c('td',{staticClass:\"align-right\"},[_c('b',[_vm._v(\"XEM Episode Number:\")])]),_vm._v(\" \"),_c('td',[_vm._v(\"%XE\")]),_vm._v(\" \"),_c('td',[_vm._v(\"3\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%0XE\")]),_vm._v(\" \"),_c('td',[_vm._v(\"03\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',{staticClass:\"even\"},[_c('td',{staticClass:\"align-right\"},[_c('b',[_vm._v(\"Absolute Episode Number:\")])]),_vm._v(\" \"),_c('td',[_vm._v(\"%AB\")]),_vm._v(\" \"),_c('td',[_vm._v(\"003\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',[_c('td',{staticClass:\"align-right\"},[_c('b',[_vm._v(\"Xem Absolute Episode Number:\")])]),_vm._v(\" \"),_c('td',[_vm._v(\"%XAB\")]),_vm._v(\" \"),_c('td',[_vm._v(\"003\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',{staticClass:\"even\"},[_c('td',{staticClass:\"align-right\"},[_c('b',[_vm._v(\"Episode Name:\")])]),_vm._v(\" \"),_c('td',[_vm._v(\"%EN\")]),_vm._v(\" \"),_c('td',[_vm._v(\"Episode Name\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%E.N\")]),_vm._v(\" \"),_c('td',[_vm._v(\"Episode.Name\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',{staticClass:\"even\"},[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%E_N\")]),_vm._v(\" \"),_c('td',[_vm._v(\"Episode_Name\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('td',{staticClass:\"align-right\"},[_c('b',[_vm._v(\"Air Date:\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('td',{staticClass:\"align-right\"},[_c('b',[_vm._v(\"Post-Processing Date:\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',[_c('td',{staticClass:\"align-right\"},[_c('b',[_vm._v(\"Quality:\")])]),_vm._v(\" \"),_c('td',[_vm._v(\"%QN\")]),_vm._v(\" \"),_c('td',[_vm._v(\"720p BluRay\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',{staticClass:\"even\"},[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%Q.N\")]),_vm._v(\" \"),_c('td',[_vm._v(\"720p.BluRay\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%Q_N\")]),_vm._v(\" \"),_c('td',[_vm._v(\"720p_BluRay\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',[_c('td',{staticClass:\"align-right\"},[_c('b',[_vm._v(\"Scene Quality:\")])]),_vm._v(\" \"),_c('td',[_vm._v(\"%SQN\")]),_vm._v(\" \"),_c('td',[_vm._v(\"720p HDTV x264\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',{staticClass:\"even\"},[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%SQ.N\")]),_vm._v(\" \"),_c('td',[_vm._v(\"720p.HDTV.x264\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%SQ_N\")]),_vm._v(\" \"),_c('td',[_vm._v(\"720p_HDTV_x264\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('td',{staticClass:\"align-right\"},[_c('b',[_vm._v(\"Show premiere year:\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',[_c('td',{staticClass:\"align-right\"},[_c('i',{staticClass:\"glyphicon glyphicon-info-sign\",attrs:{\"title\":\"Multi-EP style is ignored\"}}),_vm._v(\" \"),_c('b',[_vm._v(\"Release Name:\")])]),_vm._v(\" \"),_c('td',[_vm._v(\"%RN\")]),_vm._v(\" \"),_c('td',[_vm._v(\"Show.Name.S02E03.HDTV.x264-RLSGROUP\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',{staticClass:\"even\"},[_c('td',{staticClass:\"align-right\"},[_c('i',{staticClass:\"glyphicon glyphicon-info-sign\",attrs:{\"title\":\"UNKNOWN_RELEASE_GROUP is used in place of RLSGROUP if it could not be properly detected\"}}),_vm._v(\" \"),_c('b',[_vm._v(\"Release Group:\")])]),_vm._v(\" \"),_c('td',[_vm._v(\"%RG\")]),_vm._v(\" \"),_c('td',[_vm._v(\"RLSGROUP\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',[_c('td',{staticClass:\"align-right\"},[_c('i',{staticClass:\"glyphicon glyphicon-info-sign\",attrs:{\"title\":\"If episode is proper/repack add 'proper' to name.\"}}),_vm._v(\" \"),_c('b',[_vm._v(\"Release Type:\")])]),_vm._v(\" \"),_c('td',[_vm._v(\"%RT\")]),_vm._v(\" \"),_c('td',[_vm._v(\"PROPER\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"col-sm-2\"},[_c('label',{staticClass:\"control-label\",attrs:{\"for\":\"naming_multi_ep\"}},[_c('span',[_vm._v(\"Multi-Episode Style:\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"col-sm-2\"},[_c('label',{staticClass:\"control-label\",attrs:{\"for\":\"naming_anime\"}},[_c('span',[_vm._v(\"Add Absolute Number\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"col-sm-2\"},[_c('label',{staticClass:\"control-label\",attrs:{\"for\":\"naming_anime_only\"}},[_c('span',[_vm._v(\"Only Absolute Number\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"col-sm-2\"},[_c('label',{staticClass:\"control-label\",attrs:{\"for\":\"naming_anime_none\"}},[_c('span',[_vm._v(\"No Absolute Number\")])])])\n}]\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./name-pattern.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./name-pattern.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./name-pattern.vue?vue&type=template&id=06949d9e&\"\nimport script from \"./name-pattern.vue?vue&type=script&lang=js&\"\nexport * from \"./name-pattern.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./plot-info.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./plot-info.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./plot-info.vue?vue&type=template&id=b01c2572&\"\nimport script from \"./plot-info.vue?vue&type=script&lang=js&\"\nexport * from \"./plot-info.vue?vue&type=script&lang=js&\"\nimport style0 from \"./plot-info.vue?vue&type=style&index=0&id=b01c2572&prod&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.description !== '')?_c('img',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.right\",value:({content: _vm.description}),expression:\"{content: description}\",modifiers:{\"right\":true}}],class:_vm.plotInfoClass,attrs:{\"src\":\"images/info32.png\",\"width\":\"16\",\"height\":\"16\",\"alt\":\"\"}}):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./progress-bar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./progress-bar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./progress-bar.vue?vue&type=template&id=2a6be2d2&scoped=true&\"\nimport script from \"./progress-bar.vue?vue&type=script&lang=js&\"\nexport * from \"./progress-bar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./progress-bar.vue?vue&type=style&index=0&id=2a6be2d2&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2a6be2d2\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',_vm._b({staticClass:\"progressbar hidden-print ui-progressbar ui-corner-all ui-widget ui-widget-content\",attrs:{\"role\":\"progressbar\"}},'div',{ title: _vm.title },false),[(_vm.text)?_c('div',{staticClass:\"progressbarText\"},[_vm._v(_vm._s(_vm.text))]):_vm._e(),_vm._v(\" \"),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.normalisedPercentage >= 1),expression:\"normalisedPercentage >= 1\"}],class:['ui-progressbar-value', 'ui-corner-left', 'ui-widget-header', 'progress-' + _vm.normalisedPercentage],style:({ width: `${_vm.percentage}%` })})])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _vm._m(0)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"show-option pull-right\"},[_vm._v(\"\\n Poster Size:\\n \"),_c('div',{staticStyle:{\"width\":\"100px\",\"display\":\"inline-block\",\"margin-left\":\"7px\"},attrs:{\"id\":\"posterSizeSlider\"}})])\n}]\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./poster-size-slider.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./poster-size-slider.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./poster-size-slider.vue?vue&type=template&id=2421162a&\"\nimport script from \"./poster-size-slider.vue?vue&type=script&lang=js&\"\nexport * from \"./poster-size-slider.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./quality-chooser.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./quality-chooser.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./quality-chooser.vue?vue&type=template&id=7daf2e28&scoped=true&\"\nimport script from \"./quality-chooser.vue?vue&type=script&lang=js&\"\nexport * from \"./quality-chooser.vue?vue&type=script&lang=js&\"\nimport style0 from \"./quality-chooser.vue?vue&type=style&index=0&id=7daf2e28&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7daf2e28\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('select',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(_vm.selectedQualityPreset),expression:\"selectedQualityPreset\",modifiers:{\"number\":true}}],staticClass:\"form-control form-control-inline input-sm\",attrs:{\"name\":\"quality_preset\"},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return _vm._n(val)}); _vm.selectedQualityPreset=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},[(_vm.keep)?_c('option',{attrs:{\"value\":\"keep\"}},[_vm._v(\"< Keep >\")]):_vm._e(),_vm._v(\" \"),_c('option',{domProps:{\"value\":0}},[_vm._v(\"Custom\")]),_vm._v(\" \"),_vm._l((_vm.qualityPresets),function(preset){return _c('option',{key:`quality-preset-${preset.key}`,domProps:{\"value\":preset.value}},[_vm._v(\"\\n \"+_vm._s(preset.name)+\"\\n \")])})],2),_vm._v(\" \"),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.selectedQualityPreset === 0),expression:\"selectedQualityPreset === 0\"}],attrs:{\"id\":\"customQualityWrapper\"}},[_vm._m(0),_vm._v(\" \"),_c('div',[_c('h5',[_vm._v(\"Allowed\")]),_vm._v(\" \"),_c('select',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(_vm.allowedQualities),expression:\"allowedQualities\",modifiers:{\"number\":true}}],staticClass:\"form-control form-control-inline input-sm\",attrs:{\"name\":\"allowed_qualities\",\"multiple\":\"multiple\",\"size\":_vm.validQualities.length},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return _vm._n(val)}); _vm.allowedQualities=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.validQualities),function(quality){return _c('option',{key:`quality-list-${quality.key}`,domProps:{\"value\":quality.value}},[_vm._v(\"\\n \"+_vm._s(quality.name)+\"\\n \")])}),0)]),_vm._v(\" \"),_c('div',[_c('h5',[_vm._v(\"Preferred\")]),_vm._v(\" \"),_c('select',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(_vm.preferredQualities),expression:\"preferredQualities\",modifiers:{\"number\":true}}],staticClass:\"form-control form-control-inline input-sm\",attrs:{\"name\":\"preferred_qualities\",\"multiple\":\"multiple\",\"size\":_vm.validQualities.length,\"disabled\":_vm.allowedQualities.length === 0},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return _vm._n(val)}); _vm.preferredQualities=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.validQualities),function(quality){return _c('option',{key:`quality-list-${quality.key}`,domProps:{\"value\":quality.value}},[_vm._v(\"\\n \"+_vm._s(quality.name)+\"\\n \")])}),0)])]),_vm._v(\" \"),(_vm.selectedQualityPreset !== 'keep')?_c('div',[((_vm.allowedQualities.length + _vm.preferredQualities.length) >= 1)?_c('div',{attrs:{\"id\":\"qualityExplanation\"}},[_vm._m(1),_vm._v(\" \"),(_vm.preferredQualities.length === 0)?_c('h5',[_vm._v(\"\\n This will download \"),_c('b',[_vm._v(\"any\")]),_vm._v(\" of these qualities and then stops searching:\\n \"),_c('label',{attrs:{\"id\":\"allowedExplanation\"}},[_vm._v(_vm._s(_vm.explanation.allowed.join(', ')))])]):[_c('h5',[_vm._v(\"\\n Downloads \"),_c('b',[_vm._v(\"any\")]),_vm._v(\" of these qualities:\\n \"),_c('label',{attrs:{\"id\":\"allowedPreferredExplanation\"}},[_vm._v(_vm._s(_vm.explanation.allowed.join(', ')))])]),_vm._v(\" \"),_c('h5',[_vm._v(\"\\n But it will stop searching when one of these is downloaded:\\n \"),_c('label',{attrs:{\"id\":\"preferredExplanation\"}},[_vm._v(_vm._s(_vm.explanation.preferred.join(', ')))])])]],2):_c('div',[_vm._v(\"Please select at least one allowed quality.\")])]):_vm._e(),_vm._v(\" \"),(_vm.backloggedEpisodes)?_c('div',[_c('h5',{staticClass:\"{ 'red-text': !backloggedEpisodes.status }\",domProps:{\"innerHTML\":_vm._s(_vm.backloggedEpisodes.html)}})]):_vm._e(),_vm._v(\" \"),(_vm.archive)?_c('div',{attrs:{\"id\":\"archive\"}},[_c('h5',[_c('b',[_vm._v(\"Archive downloaded episodes that are not currently in\\n \"),_c('app-link',{staticClass:\"backlog-link\",attrs:{\"href\":\"manage/backlogOverview/\",\"target\":\"_blank\"}},[_vm._v(\"backlog\")]),_vm._v(\".\")],1),_vm._v(\" \"),_c('br'),_vm._v(\"Avoids unnecessarily increasing your backlog\\n \"),_c('br')]),_vm._v(\" \"),_c('button',{staticClass:\"btn-medusa btn-inline\",attrs:{\"disabled\":_vm.archiveButton.disabled},on:{\"click\":function($event){$event.preventDefault();return _vm.archiveEpisodes.apply(null, arguments)}}},[_vm._v(\"\\n \"+_vm._s(_vm.archiveButton.text)+\"\\n \")]),_vm._v(\" \"),_c('h5',[_vm._v(_vm._s(_vm.archivedStatus))])]):_vm._e()])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('p',[_c('b',[_c('strong',[_vm._v(\"Preferred\")])]),_vm._v(\" qualities will replace those in \"),_c('b',[_c('strong',[_vm._v(\"allowed\")])]),_vm._v(\", even if they are lower.\\n \")])\n},function (){var _vm=this,_c=_vm._self._c;return _c('h5',[_c('b',[_vm._v(\"Quality setting explanation:\")])])\n}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./scene-number-input.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./scene-number-input.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./scene-number-input.vue?vue&type=template&id=8a700f60&scoped=true&\"\nimport script from \"./scene-number-input.vue?vue&type=script&lang=js&\"\nexport * from \"./scene-number-input.vue?vue&type=script&lang=js&\"\nimport style0 from \"./scene-number-input.vue?vue&type=style&index=0&id=8a700f60&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8a700f60\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('input',{staticClass:\"sceneSeasonXEpisode form-control input-scene addQTip\",class:[\n _vm.isValid === true ? 'isValid' : '',\n _vm.isValid === false ? 'isInvalid' : '',\n _vm.numberingFrom === 'custom' ? 'isCustom' : ''\n ],staticStyle:{\"padding\":\"0\",\"text-align\":\"center\",\"max-width\":\"60px\"},attrs:{\"type\":\"text\",\"placeholder\":`${_vm.sceneSeason || _vm.initialEpisode.season}x${_vm.sceneEpisode || _vm.initialEpisode.episode}`,\"size\":\"6\",\"maxlength\":\"8\",\"title\":\"Change this value if scene numbering differs from the indexer episode numbering. Generally used for non-anime shows.\"},domProps:{\"value\":`${_vm.sceneSeason || _vm.initialEpisode.season}x${_vm.sceneEpisode || _vm.initialEpisode.episode}`},on:{\"change\":_vm.changeSceneNumbering}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./scene-number-anime-input.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./scene-number-anime-input.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./scene-number-anime-input.vue?vue&type=template&id=9e73c4ba&scoped=true&\"\nimport script from \"./scene-number-anime-input.vue?vue&type=script&lang=js&\"\nexport * from \"./scene-number-anime-input.vue?vue&type=script&lang=js&\"\nimport style0 from \"./scene-number-anime-input.vue?vue&type=style&index=0&id=9e73c4ba&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"9e73c4ba\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('input',{staticClass:\"sceneAbsolute form-control input-scene addQTip\",class:[\n _vm.isValid === true ? 'isValid' : '',\n _vm.isValid === false ? 'isInvalid' : '',\n _vm.numberingFrom === 'custom' ? 'isCustom' : ''\n ],staticStyle:{\"padding\":\"0\",\"text-align\":\"center\",\"max-width\":\"60px\"},attrs:{\"type\":\"text\",\"placeholder\":_vm.sceneAbsolute,\"size\":\"6\",\"maxlength\":\"8\",\"title\":\"Change this value if scene absolute numbering differs from the indexer absolute numbering. Generally used for anime shows.\"},domProps:{\"value\":_vm.sceneAbsolute},on:{\"change\":_vm.changeSceneNumbering}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{attrs:{\"id\":\"scroll-buttons-wrapper\"}},[_c('div',{staticClass:\"scroll-wrapper top\",class:{ show: _vm.showToTop },on:{\"click\":function($event){$event.preventDefault();return _vm.scrollTop.apply(null, arguments)}}},[_vm._m(0)]),_vm._v(\" \"),_c('div',{staticClass:\"scroll-wrapper left\",class:{ show: _vm.showLeftRight }},[_c('span',{staticClass:\"scroll-left-inner\"},[_c('i',{staticClass:\"glyphicon glyphicon-circle-arrow-left\",on:{\"click\":function($event){$event.preventDefault();return _vm.scrollLeft.apply(null, arguments)}}})])]),_vm._v(\" \"),_c('div',{staticClass:\"scroll-wrapper right\",class:{ show: _vm.showLeftRight }},[_c('span',{staticClass:\"scroll-right-inner\"},[_c('i',{staticClass:\"glyphicon glyphicon-circle-arrow-right\",on:{\"click\":function($event){$event.preventDefault();return _vm.scrollRight.apply(null, arguments)}}})])])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('span',{staticClass:\"scroll-top-inner\"},[_c('i',{staticClass:\"glyphicon glyphicon-circle-arrow-up\"})])\n}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./scroll-buttons.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./scroll-buttons.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./scroll-buttons.vue?vue&type=template&id=03c5223c&\"\nimport script from \"./scroll-buttons.vue?vue&type=script&lang=js&\"\nexport * from \"./scroll-buttons.vue?vue&type=script&lang=js&\"\nimport style0 from \"./scroll-buttons.vue?vue&type=style&index=0&id=03c5223c&prod&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./search.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./search.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./search.vue?vue&type=template&id=1b50fd5d&scoped=true&\"\nimport script from \"./search.vue?vue&type=script&lang=js&\"\nexport * from \"./search.vue?vue&type=script&lang=js&\"\nimport style0 from \"./search.vue?vue&type=style&index=0&id=1b50fd5d&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1b50fd5d\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"search-wrapper\"},[(_vm.searchType === 'backlog')?_c('img',{ref:`search-${_vm.episode.slug}`,staticClass:\"epForcedSearch\",attrs:{\"id\":`${_vm.showSlug}x${_vm.episode.season}x${_vm.episode.episode}`,\"name\":`${_vm.showSlug}x${_vm.episode.season}x${_vm.episode.episode}`,\"src\":_vm.src,\"height\":\"16\",\"alt\":_vm.retryDownload(_vm.episode) ? 'retry' : 'search',\"title\":_vm.retryDownload(_vm.episode) ? 'Retry Download' : 'Forced Seach',\"disabled\":_vm.disabled},on:{\"click\":function($event){return _vm.queueSearch(_vm.episode)}}}):_vm._e(),_vm._v(\" \"),(_vm.searchType === 'manual')?_c('app-link',{staticClass:\"epManualSearch\",attrs:{\"id\":`${_vm.showSlug}x${_vm.episode.episode}`,\"name\":`${_vm.showSlug}x${_vm.episode.season}x${_vm.episode.episode}`,\"href\":`home/snatchSelection?showslug=${_vm.showSlug}&season=${_vm.episode.season}&episode=${_vm.episode.episode}`}},[_c('img',{attrs:{\"data-ep-manual-search\":\"\",\"src\":\"images/manualsearch.png\",\"width\":\"16\",\"height\":\"16\",\"alt\":\"search\",\"title\":\"Manual Search\"}})]):_vm._e(),_vm._v(\" \"),_c('modal',{attrs:{\"name\":\"query-start-backlog-search\",\"height\":'auto',\"width\":'80%'},on:{\"before-open\":_vm.beforeBacklogSearchModalClose}},[_c('transition',{attrs:{\"name\":\"modal\"}},[_c('div',{staticClass:\"modal-mask\"},[_c('div',{staticClass:\"modal-wrapper\"},[_c('div',{staticClass:\"modal-content\"},[_c('div',{staticClass:\"modal-header\"},[_c('button',{staticClass:\"close\",attrs:{\"type\":\"button\",\"data-dismiss\":\"modal\",\"aria-hidden\":\"true\"}},[_vm._v(\"×\")]),_vm._v(\" \"),_c('h4',{staticClass:\"modal-title\"},[_vm._v(\"Start search?\")])]),_vm._v(\" \"),_c('div',{staticClass:\"modal-body\"},[_c('p',[_vm._v(\"Some episodes have been changed to 'Wanted'. Do you want to trigger a backlog search for these \"+_vm._s(_vm.backlogSearchEpisodes.length)+\" episode(s)\")])]),_vm._v(\" \"),_c('div',{staticClass:\"modal-footer\"},[_c('button',{staticClass:\"btn-medusa btn-danger\",attrs:{\"type\":\"button\",\"data-dismiss\":\"modal\"},on:{\"click\":function($event){return _vm.$modal.hide('query-start-backlog-search')}}},[_vm._v(\"No\")]),_vm._v(\" \"),_c('button',{staticClass:\"btn-medusa btn-success\",attrs:{\"type\":\"button\",\"data-dismiss\":\"modal\"},on:{\"click\":function($event){_vm.search(_vm.backlogSearchEpisodes, 'backlog'); _vm.$modal.hide('query-start-backlog-search')}}},[_vm._v(\"Yes\")])])])])])])],1),_vm._v(\" \"),_c('modal',{attrs:{\"name\":\"query-mark-failed-and-search\",\"height\":'auto',\"width\":'80%'},on:{\"before-open\":_vm.beforeFailedSearchModalClose}},[_c('transition',{attrs:{\"name\":\"modal\"}},[_c('div',{staticClass:\"modal-mask\"},[_c('div',{staticClass:\"modal-wrapper\"},[_c('div',{staticClass:\"modal-content\"},[_c('div',{staticClass:\"modal-header\"},[_vm._v(\"\\n Mark episode as failed and search?\\n \")]),_vm._v(\" \"),_c('div',{staticClass:\"modal-body\"},[_c('p',[_vm._v(\"Starting to search for the episode\")]),_vm._v(\" \"),(_vm.failedSearchEpisodes && _vm.failedSearchEpisodes.length === 1)?_c('p',[_vm._v(\"Would you also like to mark episode \"+_vm._s(_vm.failedSearchEpisodes[0].slug)+\" as \\\"failed\\\"? This will make sure the episode cannot be downloaded again\")]):(_vm.failedSearchEpisodes)?_c('p',[_vm._v(\"Would you also like to mark episodes \"+_vm._s(_vm.failedSearchEpisodes.map(ep => ep.slug).join(', '))+\" as \\\"failed\\\"? This will make sure the episode cannot be downloaded again\")]):_vm._e()]),_vm._v(\" \"),_c('div',{staticClass:\"modal-footer\"},[_c('button',{staticClass:\"btn-medusa btn-danger\",attrs:{\"type\":\"button\",\"data-dismiss\":\"modal\"},on:{\"click\":function($event){_vm.search(_vm.failedSearchEpisodes, 'backlog'); _vm.$modal.hide('query-mark-failed-and-search')}}},[_vm._v(\"No\")]),_vm._v(\" \"),_c('button',{staticClass:\"btn-medusa btn-success\",attrs:{\"type\":\"button\",\"data-dismiss\":\"modal\"},on:{\"click\":function($event){_vm.search(_vm.failedSearchEpisodes, 'failed'); _vm.$modal.hide('query-mark-failed-and-search')}}},[_vm._v(\"Yes\")]),_vm._v(\" \"),_c('button',{staticClass:\"btn-medusa btn-danger\",attrs:{\"type\":\"button\",\"data-dismiss\":\"modal\"},on:{\"click\":function($event){return _vm.$modal.hide('query-mark-failed-and-search')}}},[_vm._v(\"Cancel\")])])])])])])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{attrs:{\"id\":\"search-template-container\"}},[_c('vue-snotify'),_vm._v(\" \"),_c('div',{staticClass:\"form-group\"},[_c('div',{staticClass:\"row\"},[_vm._m(0),_vm._v(\" \"),_c('div',{staticClass:\"col-sm-10 content\"},_vm._l((_vm.defaultEpisodeTemplates),function(template){return _c('search-template-pattern',_vm._b({key:template.id},'search-template-pattern',{ template, format: _vm.showFormat, animeType: _vm.animeType },false))}),1)])]),_vm._v(\" \"),_c('div',{staticClass:\"form-group\"},[_c('div',{staticClass:\"row\"},[_vm._m(1),_vm._v(\" \"),_c('div',{staticClass:\"col-sm-10 content\"},_vm._l((_vm.defaultSeasonTemplates),function(template){return _c('search-template-pattern',_vm._b({key:template.id},'search-template-pattern',{ template, format: _vm.showFormat, animeType: _vm.animeType },false))}),1)])]),_vm._v(\" \"),_c('div',{staticClass:\"form-group\"},[_c('div',{staticClass:\"row\"},[_vm._m(2),_vm._v(\" \"),_c('div',{staticClass:\"col-sm-10 content\"},_vm._l((_vm.customTemplates),function(template){return _c('search-template-pattern',_vm._b({key:template.template,on:{\"remove\":_vm.remove}},'search-template-pattern',{ template, format: _vm.showFormat, animeType: _vm.animeType },false))}),1)])]),_vm._v(\" \"),_c('search-template-custom',_vm._b({on:{\"input\":_vm.add}},'search-template-custom',{ show: _vm.show, animeType: _vm.animeType, format: _vm.showFormat },false)),_vm._v(\" \"),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showFormat === 'anime'),expression:\"showFormat === 'anime'\"}]},[_c('div',{staticClass:\"row\"},[(_vm.animeType > 0)?_c('div',{staticClass:\"form-group\"},[_vm._m(3),_vm._v(\" \"),_c('div',{staticClass:\"col-sm-10 content\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.animeType),expression:\"animeType\"}],attrs:{\"type\":\"radio\",\"name\":\"naming_anime\",\"id\":\"naming_anime\"},domProps:{\"value\":1,\"checked\":_vm._q(_vm.animeType,1)},on:{\"change\":function($event){_vm.animeType=1}}}),_vm._v(\" \"),_c('span',[_vm._v(\"Add the absolute number to the season/episode format?\")]),_vm._v(\" \"),_c('p',[_vm._v(\"Only applies to animes. (e.g. S15E45 - 310 vs S15E45)\")])])]):_vm._e()]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[(_vm.animeType > 0)?_c('div',{staticClass:\"form-group\"},[_vm._m(4),_vm._v(\" \"),_c('div',{staticClass:\"col-sm-10 content\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.animeType),expression:\"animeType\"}],attrs:{\"type\":\"radio\",\"name\":\"naming_anime\",\"id\":\"naming_anime_only\"},domProps:{\"value\":2,\"checked\":_vm._q(_vm.animeType,2)},on:{\"change\":function($event){_vm.animeType=2}}}),_vm._v(\" \"),_c('span',[_vm._v(\"Replace season/episode format with absolute number\")]),_vm._v(\" \"),_c('p',[_vm._v(\"Only applies to animes.\")])])]):_vm._e()]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[(_vm.animeType > 0)?_c('div',{staticClass:\"form-group\"},[_vm._m(5),_vm._v(\" \"),_c('div',{staticClass:\"col-sm-10 content\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.animeType),expression:\"animeType\"}],attrs:{\"type\":\"radio\",\"name\":\"naming_anime\",\"id\":\"naming_anime_none\"},domProps:{\"value\":3,\"checked\":_vm._q(_vm.animeType,3)},on:{\"change\":function($event){_vm.animeType=3}}}),_vm._v(\" \"),_c('span',[_vm._v(\"Don't include the absolute number\")]),_vm._v(\" \"),_c('p',[_vm._v(\"Only applies to animes.\")])])]):_vm._e()])]),_vm._v(\" \"),_c('div',{staticClass:\"nocheck\",attrs:{\"id\":\"naming-key\"}},[_c('table',{staticClass:\"Key\"},[_vm._m(6),_vm._v(\" \"),_vm._m(7),_vm._v(\" \"),_c('tbody',[_vm._m(8),_vm._v(\" \"),_vm._m(9),_vm._v(\" \"),_vm._m(10),_vm._v(\" \"),_vm._m(11),_vm._v(\" \"),_vm._m(12),_vm._v(\" \"),_vm._m(13),_vm._v(\" \"),_vm._m(14),_vm._v(\" \"),_vm._m(15),_vm._v(\" \"),_vm._m(16),_vm._v(\" \"),_vm._m(17),_vm._v(\" \"),_vm._m(18),_vm._v(\" \"),_vm._m(19),_vm._v(\" \"),_vm._m(20),_vm._v(\" \"),_vm._m(21),_vm._v(\" \"),_vm._m(22),_vm._v(\" \"),_vm._m(23),_vm._v(\" \"),_c('tr',[_vm._m(24),_vm._v(\" \"),_c('td',[_vm._v(\"%M\")]),_vm._v(\" \"),_c('td',[_vm._v(_vm._s(_vm.getDateFormat('M')))])]),_vm._v(\" \"),_c('tr',{staticClass:\"even\"},[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%D\")]),_vm._v(\" \"),_c('td',[_vm._v(_vm._s(_vm.getDateFormat('d')))])]),_vm._v(\" \"),_c('tr',[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%Y\")]),_vm._v(\" \"),_c('td',[_vm._v(_vm._s(_vm.getDateFormat('yyyy')))])]),_vm._v(\" \"),_c('tr',[_vm._m(25),_vm._v(\" \"),_c('td',[_vm._v(\"%CM\")]),_vm._v(\" \"),_c('td',[_vm._v(_vm._s(_vm.getDateFormat('M')))])]),_vm._v(\" \"),_c('tr',{staticClass:\"even\"},[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%CD\")]),_vm._v(\" \"),_c('td',[_vm._v(_vm._s(_vm.getDateFormat('d')))])]),_vm._v(\" \"),_c('tr',[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%CY\")]),_vm._v(\" \"),_c('td',[_vm._v(_vm._s(_vm.getDateFormat('yyyy')))])]),_vm._v(\" \"),_vm._m(26),_vm._v(\" \"),_vm._m(27),_vm._v(\" \"),_vm._m(28),_vm._v(\" \"),_vm._m(29),_vm._v(\" \"),_vm._m(30),_vm._v(\" \"),_vm._m(31),_vm._v(\" \"),_vm._m(32),_vm._v(\" \"),_vm._m(33),_vm._v(\" \"),_vm._m(34)])])])],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"col-sm-2\"},[_c('label',{staticClass:\"control-label\",attrs:{\"for\":\"default_templates\"}},[_c('span',[_vm._v(\"Default Episode Templates\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"col-sm-2\"},[_c('label',{staticClass:\"control-label\",attrs:{\"for\":\"default_templates\"}},[_c('span',[_vm._v(\"Default Season Templates\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"col-sm-2\"},[_c('label',{staticClass:\"control-label\",attrs:{\"for\":\"default_templates\"}},[_c('span',[_vm._v(\"Custom Templates\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('label',{staticClass:\"col-sm-2 control-label\",attrs:{\"for\":\"naming_anime\"}},[_c('span',[_vm._v(\"Add Absolute Number\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('label',{staticClass:\"col-sm-2 control-label\",attrs:{\"for\":\"naming_anime_only\"}},[_c('span',[_vm._v(\"Only Absolute Number\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('label',{staticClass:\"col-sm-2 control-label\",attrs:{\"for\":\"naming_anime_none\"}},[_c('span',[_vm._v(\"No Absolute Number\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('thead',[_c('tr',[_c('th',{staticClass:\"align-right\"},[_vm._v(\"Meaning\")]),_vm._v(\" \"),_c('th',[_vm._v(\"Pattern\")]),_vm._v(\" \"),_c('th',{attrs:{\"width\":\"60%\"}},[_vm._v(\"Result\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tfoot',[_c('tr',[_c('th',{attrs:{\"colspan\":\"3\"}},[_vm._v(\"\\n Use lower case if you want lower case names (eg.\\n %sn, %e.n, %q_n etc)\\n \")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',[_c('td',{staticClass:\"align-right\"},[_c('b',[_vm._v(\"Show Name:\")])]),_vm._v(\" \"),_c('td',[_vm._v(\"%SN\")]),_vm._v(\" \"),_c('td',[_vm._v(\"Show Name\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',{staticClass:\"even\"},[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%S.N\")]),_vm._v(\" \"),_c('td',[_vm._v(\"Show.Name\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%S_N\")]),_vm._v(\" \"),_c('td',[_vm._v(\"Show_Name\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',{staticClass:\"even\"},[_c('td',{staticClass:\"align-right\"},[_c('b',[_vm._v(\"Season Number:\")])]),_vm._v(\" \"),_c('td',[_vm._v(\"%S\")]),_vm._v(\" \"),_c('td',[_vm._v(\"2\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%0S\")]),_vm._v(\" \"),_c('td',[_vm._v(\"02\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',{staticClass:\"even\"},[_c('td',{staticClass:\"align-right\"},[_c('b',[_vm._v(\"XEM Season Number:\")])]),_vm._v(\" \"),_c('td',[_vm._v(\"%XS\")]),_vm._v(\" \"),_c('td',[_vm._v(\"2\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%0XS\")]),_vm._v(\" \"),_c('td',[_vm._v(\"02\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',{staticClass:\"even\"},[_c('td',{staticClass:\"align-right\"},[_c('b',[_vm._v(\"Episode Number:\")])]),_vm._v(\" \"),_c('td',[_vm._v(\"%E\")]),_vm._v(\" \"),_c('td',[_vm._v(\"3\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%0E\")]),_vm._v(\" \"),_c('td',[_vm._v(\"03\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',{staticClass:\"even\"},[_c('td',{staticClass:\"align-right\"},[_c('b',[_vm._v(\"XEM Episode Number:\")])]),_vm._v(\" \"),_c('td',[_vm._v(\"%XE\")]),_vm._v(\" \"),_c('td',[_vm._v(\"3\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%0XE\")]),_vm._v(\" \"),_c('td',[_vm._v(\"03\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',{staticClass:\"even\"},[_c('td',{staticClass:\"align-right\"},[_c('b',[_vm._v(\"Absolute Episode Number:\")])]),_vm._v(\" \"),_c('td',[_vm._v(\"%AB\")]),_vm._v(\" \"),_c('td',[_vm._v(\"003\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',[_c('td',{staticClass:\"align-right\"},[_c('b',[_vm._v(\"Xem Absolute Episode Number:\")])]),_vm._v(\" \"),_c('td',[_vm._v(\"%XAB\")]),_vm._v(\" \"),_c('td',[_vm._v(\"003\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',{staticClass:\"even\"},[_c('td',{staticClass:\"align-right\"},[_c('b',[_vm._v(\"Episode Name:\")])]),_vm._v(\" \"),_c('td',[_vm._v(\"%EN\")]),_vm._v(\" \"),_c('td',[_vm._v(\"Episode Name\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%E.N\")]),_vm._v(\" \"),_c('td',[_vm._v(\"Episode.Name\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',{staticClass:\"even\"},[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%E_N\")]),_vm._v(\" \"),_c('td',[_vm._v(\"Episode_Name\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('td',{staticClass:\"align-right\"},[_c('b',[_vm._v(\"Air Date:\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('td',{staticClass:\"align-right\"},[_c('b',[_vm._v(\"Post-Processing Date:\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',[_c('td',{staticClass:\"align-right\"},[_c('b',[_vm._v(\"Quality:\")])]),_vm._v(\" \"),_c('td',[_vm._v(\"%QN\")]),_vm._v(\" \"),_c('td',[_vm._v(\"720p BluRay\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',{staticClass:\"even\"},[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%Q.N\")]),_vm._v(\" \"),_c('td',[_vm._v(\"720p.BluRay\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%Q_N\")]),_vm._v(\" \"),_c('td',[_vm._v(\"720p_BluRay\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',[_c('td',{staticClass:\"align-right\"},[_c('b',[_vm._v(\"Scene Quality:\")])]),_vm._v(\" \"),_c('td',[_vm._v(\"%SQN\")]),_vm._v(\" \"),_c('td',[_vm._v(\"720p HDTV x264\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',{staticClass:\"even\"},[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%SQ.N\")]),_vm._v(\" \"),_c('td',[_vm._v(\"720p.HDTV.x264\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',[_c('td',[_vm._v(\" \")]),_vm._v(\" \"),_c('td',[_vm._v(\"%SQ_N\")]),_vm._v(\" \"),_c('td',[_vm._v(\"720p_HDTV_x264\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',{staticClass:\"even\"},[_c('td',{staticClass:\"align-right\"},[_c('i',{staticClass:\"glyphicon glyphicon-info-sign\",attrs:{\"title\":\"Multi-EP style is ignored\"}}),_vm._v(\" \"),_c('b',[_vm._v(\"Release Name:\")])]),_vm._v(\" \"),_c('td',[_vm._v(\"%RN\")]),_vm._v(\" \"),_c('td',[_vm._v(\"Show.Name.S02E03.HDTV.x264-RLSGROUP\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',[_c('td',{staticClass:\"align-right\"},[_c('i',{staticClass:\"glyphicon glyphicon-info-sign\",attrs:{\"title\":\"UNKNOWN_RELEASE_GROUP is used in place of RLSGROUP if it could not be properly detected\"}}),_vm._v(\" \"),_c('b',[_vm._v(\"Release Group:\")])]),_vm._v(\" \"),_c('td',[_vm._v(\"%RG\")]),_vm._v(\" \"),_c('td',[_vm._v(\"RLSGROUP\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',{staticClass:\"even\"},[_c('td',{staticClass:\"align-right\"},[_c('i',{staticClass:\"glyphicon glyphicon-info-sign\",attrs:{\"title\":\"If episode is proper/repack add 'proper' to name.\"}}),_vm._v(\" \"),_c('b',[_vm._v(\"Release Type:\")])]),_vm._v(\" \"),_c('td',[_vm._v(\"%RT\")]),_vm._v(\" \"),_c('td',[_vm._v(\"PROPER\")])])\n}]\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./search-template-custom.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./search-template-custom.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./search-template-custom.vue?vue&type=template&id=4f60cc3f&scoped=true&\"\nimport script from \"./search-template-custom.vue?vue&type=script&lang=js&\"\nexport * from \"./search-template-custom.vue?vue&type=script&lang=js&\"\nimport style0 from \"./search-template-custom.vue?vue&type=style&index=0&id=4f60cc3f&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4f60cc3f\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"form-group\",attrs:{\"id\":\"search-template-custom\"}},[_vm._m(0),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-lg-12 content\"},[_c('div',{staticClass:\"row\"},[_vm._m(1),_vm._v(\" \"),_c('div',{staticClass:\"col-sm-10 content\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selectedTitle),expression:\"selectedTitle\"}],staticClass:\"form-control input-sm\",attrs:{\"id\":\"default_page\",\"name\":\"default_page\"},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.selectedTitle=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.selectTitles),function(option){return _c('option',{key:option.title,domProps:{\"value\":option}},[_vm._v(_vm._s(_vm.titleOptionDescription(option))+\"\\n \")])}),0)])]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_vm._m(2),_vm._v(\" \"),_c('div',{staticClass:\"col-sm-10\"},[_c('div',{staticClass:\"checkbox\"},[_c('label',{attrs:{\"for\":\"episode\"}},[_vm._v(\"Episode\")]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.episodeOrSeason),expression:\"episodeOrSeason\"}],attrs:{\"type\":\"radio\",\"id\":\"episode\"},domProps:{\"value\":'episode',\"checked\":_vm._q(_vm.episodeOrSeason,'episode')},on:{\"change\":function($event){_vm.episodeOrSeason='episode'}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"episode\"}},[_vm._v(\"Season\")]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.episodeOrSeason),expression:\"episodeOrSeason\"}],attrs:{\"type\":\"radio\",\"id\":\"season\"},domProps:{\"value\":'season',\"checked\":_vm._q(_vm.episodeOrSeason,'season')},on:{\"change\":function($event){_vm.episodeOrSeason='season'}}})])])]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_vm._m(3),_vm._v(\" \"),_c('div',{staticClass:\"col-sm-10 pattern\"},[(_vm.selectedTitle)?_c('span',{ref:\"inputTitle\"},[_vm._v(\"%SN\")]):_vm._e(),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.addPattern),expression:\"addPattern\"}],staticClass:\"form-control-inline-max input-sm max-input350 search-pattern\",staticStyle:{\"padding-left\":\"50px\"},attrs:{\"type\":\"text\",\"name\":\"new_pattern\",\"disabled\":!_vm.selectedTitle},domProps:{\"value\":(_vm.addPattern)},on:{\"input\":function($event){if($event.target.composing)return;_vm.addPattern=$event.target.value}}}),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.enabled),expression:\"enabled\"}],attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.enabled)?_vm._i(_vm.enabled,null)>-1:(_vm.enabled)},on:{\"change\":function($event){var $$a=_vm.enabled,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.enabled=$$a.concat([$$v]))}else{$$i>-1&&(_vm.enabled=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.enabled=$$c}}}}),_vm._v(\" \"),(!_vm.validated && _vm.isValidMessage)?_c('p',[_vm._v(_vm._s(_vm.isValidMessage))]):_vm._e()])]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_vm._m(4),_vm._v(\" \"),_c('div',{staticClass:\"col-sm-10\",class:{ 'error-message': !_vm.validated }},[_vm._v(\"\\n \"+_vm._s(_vm.patternExample)+\"\\n \")])]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-sm-2\"}),_vm._v(\" \"),_c('div',{staticClass:\"col-sm-10 vertical-align\"},[_c('input',{staticClass:\"btn-medusa pull-left button\",attrs:{\"id\":\"submit\",\"type\":\"submit\",\"value\":\"Add custom exception\",\"disabled\":!_vm.validated},on:{\"click\":_vm.add}}),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.notification))])])])])])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-sm-2\"},[_c('label',{staticClass:\"control-label\",attrs:{\"for\":\"default_templates\"}},[_c('span',[_vm._v(\"Add Custom Template\")])])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"col-sm-2\"},[_c('label',{staticClass:\"control-label\"},[_c('span',[_vm._v(\"Title:\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"col-sm-2\"},[_c('label',{staticClass:\"control-label\"},[_c('span',[_vm._v(\"Episode or Season search:\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"col-sm-2\"},[_c('label',{staticClass:\"control-label\"},[_c('span',[_vm._v(\"Search Template:\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"col-sm-2\"},[_c('label',{staticClass:\"control-label\"},[_c('span',[_vm._v(\"example:\")])])])\n}]\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./search-template-pattern.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./search-template-pattern.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./search-template-pattern.vue?vue&type=template&id=007d54df&scoped=true&\"\nimport script from \"./search-template-pattern.vue?vue&type=script&lang=js&\"\nexport * from \"./search-template-pattern.vue?vue&type=script&lang=js&\"\nimport style0 from \"./search-template-pattern.vue?vue&type=style&index=0&id=007d54df&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"007d54df\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./search-template-container.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./search-template-container.vue?vue&type=script&lang=js&\"","\n\n\n\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{attrs:{\"id\":\"search-template-pattern\"}},[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-sm-12 content\"},[_c('div',{staticClass:\"template-wrapper\"},[_c('span',{staticClass:\"template-title\"},[_vm._v(_vm._s(_vm.searchTemplate.title))]),_vm._v(\" \"),_c('img',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.right\",value:({\n content: _vm.searchTemplate.season === -1 ? 'Show Exception' : `Season ${_vm.searchTemplate.season} Exception`\n }),expression:\"{\\n content: searchTemplate.season === -1 ? 'Show Exception' : `Season ${searchTemplate.season} Exception`\\n }\",modifiers:{\"right\":true}}],staticStyle:{\"margin-bottom\":\"2px\"},attrs:{\"src\":\"images/info32.png\",\"width\":\"16\",\"height\":\"16\",\"alt\":\"\"}}),_vm._v(\" \"),(!_vm.searchTemplate.default)?_c('img',{staticClass:\"template-remove\",attrs:{\"src\":\"images/no16.png\"},on:{\"click\":function($event){return _vm.$emit('remove', _vm.searchTemplate)}}}):_vm._e(),_vm._v(\" \"),_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.right\",value:({ content: _vm.tooltipContent }),expression:\"{ content: tooltipContent }\",modifiers:{\"right\":true}}],staticClass:\"tooltip-wrapper-pattern\"},[_c('div',{staticClass:\"template-body\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.searchTemplate.template),expression:\"searchTemplate.template\"}],staticClass:\"form-control-inline-max input-sm max-input350 search-pattern\",class:{ invalid: !_vm.validated },attrs:{\"type\":\"text\",\"name\":\"search_pattern\",\"disabled\":\"disabled\"},domProps:{\"value\":(_vm.searchTemplate.template)},on:{\"input\":function($event){if($event.target.composing)return;_vm.$set(_vm.searchTemplate, \"template\", $event.target.value)}}}),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.searchTemplate.enabled),expression:\"searchTemplate.enabled\"}],attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.searchTemplate.enabled)?_vm._i(_vm.searchTemplate.enabled,null)>-1:(_vm.searchTemplate.enabled)},on:{\"change\":function($event){var $$a=_vm.searchTemplate.enabled,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(_vm.searchTemplate, \"enabled\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(_vm.searchTemplate, \"enabled\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(_vm.searchTemplate, \"enabled\", $$c)}}}}),_vm._v(\" \"),_c('i',{staticClass:\"show-template glyphicon\",class:`glyphicon-eye-${_vm.showExample ? 'close' : 'open'}`,attrs:{\"title\":\"Show template example\"},on:{\"click\":function($event){_vm.showExample = !_vm.showExample}}})])])]),_vm._v(\" \"),(_vm.showExample)?_c('span',{staticClass:\"template-example\",class:{ invalid: !_vm.validated },attrs:{\"name\":\"search_pattern\"}},[_vm._v(\"Example: \"+_vm._s(_vm.searchTemplateExample)+\"\\n \")]):_vm._e()])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./search-template-container.vue?vue&type=template&id=110c2eea&\"\nimport script from \"./search-template-container.vue?vue&type=script&lang=js&\"\nexport * from \"./search-template-container.vue?vue&type=script&lang=js&\"\nimport style0 from \"./search-template-container.vue?vue&type=style&index=0&id=110c2eea&prod&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./select-list.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./select-list.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./select-list.vue?vue&type=template&id=1843461f&scoped=true&\"\nimport script from \"./select-list.vue?vue&type=script&lang=js&\"\nexport * from \"./select-list.vue?vue&type=script&lang=js&\"\nimport style0 from \"./select-list.vue?vue&type=style&index=0&id=1843461f&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1843461f\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',_vm._b({staticClass:\"select-list max-width\"},'div',{disabled: _vm.disabled},false),[_c('i',{staticClass:\"switch-input glyphicon glyphicon-refresh\",attrs:{\"title\":\"Switch between a list and comma separated values\"},on:{\"click\":function($event){return _vm.switchFields()}}}),_vm._v(\" \"),(!_vm.csvMode)?_c('ul',[_vm._l((_vm.editItems),function(item){return _c('li',{key:item.id},[_c('div',{staticClass:\"input-group\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(item.value),expression:\"item.value\"}],staticClass:\"form-control input-sm\",attrs:{\"disabled\":\"\",\"type\":\"text\"},domProps:{\"value\":(item.value)},on:{\"input\":[function($event){if($event.target.composing)return;_vm.$set(item, \"value\", $event.target.value)},function($event){return _vm.removeEmpty(item)}]}}),_vm._v(\" \"),_c('div',{staticClass:\"input-group-btn\",on:{\"click\":function($event){return _vm.deleteItem(item)}}},[_vm._m(0,true)])])])}),_vm._v(\" \"),_c('div',{staticClass:\"new-item\"},[_c('div',{staticClass:\"input-group\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newItem),expression:\"newItem\"}],ref:\"newItemInput\",staticClass:\"form-control input-sm\",attrs:{\"type\":\"text\",\"placeholder\":\"add new values per line\"},domProps:{\"value\":(_vm.newItem)},on:{\"input\":function($event){if($event.target.composing)return;_vm.newItem=$event.target.value}}}),_vm._v(\" \"),_c('div',{staticClass:\"input-group-btn\",on:{\"click\":function($event){return _vm.addNewItem()}}},[_vm._m(1)])])]),_vm._v(\" \"),(_vm.newItem.length > 0)?_c('div',{staticClass:\"new-item-help\"},[_vm._v(\"\\n Click \"),_c('i',{staticClass:\"glyphicon glyphicon-plus\"}),_vm._v(\" to finish adding the value.\\n \")]):_vm._e()],2):_c('div',{staticClass:\"csv\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.csv),expression:\"csv\"}],staticClass:\"form-control input-sm\",attrs:{\"type\":\"text\",\"placeholder\":\"add values comma separated\"},domProps:{\"value\":(_vm.csv)},on:{\"input\":function($event){if($event.target.composing)return;_vm.csv=$event.target.value}}})])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"btn btn-default input-sm\",staticStyle:{\"font-size\":\"14px\",\"background-color\":\"rgb(238, 238, 238)\"}},[_c('i',{staticClass:\"glyphicon glyphicon-remove\",attrs:{\"title\":\"Remove\"}})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"btn btn-default input-sm\",staticStyle:{\"font-size\":\"14px\"}},[_c('i',{staticClass:\"glyphicon glyphicon-plus\",attrs:{\"title\":\"Add\"}})])\n}]\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./select-trakt-lists.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./select-trakt-lists.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./select-trakt-lists.vue?vue&type=template&id=20efe074&scoped=true&\"\nimport script from \"./select-trakt-lists.vue?vue&type=script&lang=js&\"\nexport * from \"./select-trakt-lists.vue?vue&type=script&lang=js&\"\nimport style0 from \"./select-trakt-lists.vue?vue&type=style&index=0&id=20efe074&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"20efe074\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"select-trakt-list max-width\"},[_c('ul',_vm._l((_vm.availableLists),function(availableList){return _c('li',{key:availableList},[_c('div',{staticClass:\"trakt-list-group\"},[_c('input',{staticClass:\"form-control input-sm available-list\",attrs:{\"disabled\":\"\",\"type\":\"text\"},domProps:{\"value\":availableList}}),_vm._v(\" \"),_c('input',{attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":_vm.selectedLists.find(list => list === availableList)},on:{\"input\":function($event){return _vm.saveLists($event, availableList)}}})])])}),0)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"show-selector form-inline hidden-print\"},[_c('div',{staticClass:\"select-show-group pull-left top-5 bottom-5\"},[(_vm.shows.length === 0)?_c('select',{class:_vm.selectClass,attrs:{\"disabled\":\"\"}},[_c('option',[_vm._v(\"Loading...\")])]):_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selectedShowSlug),expression:\"selectedShowSlug\"}],class:_vm.selectClass,on:{\"change\":[function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.selectedShowSlug=$event.target.multiple ? $$selectedVal : $$selectedVal[0]},function($event){return _vm.changeRoute($event.target.value);}]}},[(_vm.placeHolder)?_c('option',{attrs:{\"disabled\":\"\",\"hidden\":\"\"},domProps:{\"value\":_vm.placeHolder,\"selected\":!_vm.selectedShowSlug}},[_vm._v(_vm._s(_vm.placeHolder))]):_vm._e(),_vm._v(\" \"),(_vm.sortedLists && _vm.sortedLists.length > 1)?_vm._l((_vm.sortedLists),function(list){return _c('optgroup',{key:list.listTitle,attrs:{\"label\":list.listTitle}},_vm._l((list.shows),function(show){return _c('option',{key:show.id.slug,domProps:{\"value\":show.id.slug}},[_vm._v(_vm._s(show.title))])}),0)}):_vm._l((_vm.sortedLists[0].shows),function(show){return _c('option',{key:show.id.slug,domProps:{\"value\":show.id.slug}},[_vm._v(_vm._s(show.title))])})],2)])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./show-selector.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./show-selector.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./show-selector.vue?vue&type=template&id=0611a026&\"\nimport script from \"./show-selector.vue?vue&type=script&lang=js&\"\nexport * from \"./show-selector.vue?vue&type=script&lang=js&\"\nimport style0 from \"./show-selector.vue?vue&type=style&index=0&id=0611a026&prod&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',_vm._b({staticClass:\"sorted-select-list max-width\"},'div',{disabled: _vm.disabled},false),[_c('draggable',{staticClass:\"list-group\",attrs:{\"tag\":\"ul\",\"handle\":\".handle\"},on:{\"start\":function($event){_vm.dragging = true},\"end\":function($event){_vm.dragging = false}},model:{value:(_vm.editItems),callback:function ($$v) {_vm.editItems=$$v},expression:\"editItems\"}},_vm._l((_vm.editItems),function(item){return _c('li',{key:item.id,staticClass:\"draggable-list\"},[_c('font-awesome-icon',{staticClass:\"handle\",attrs:{\"icon\":'align-justify'}}),_vm._v(\" \"),_c('div',{staticClass:\"draggable-input-group\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(item.value),expression:\"item.value\"}],staticClass:\"form-control input-sm\",attrs:{\"type\":\"text\"},domProps:{\"value\":(item.value)},on:{\"input\":[function($event){if($event.target.composing)return;_vm.$set(item, \"value\", $event.target.value)},function($event){return _vm.removeEmpty(item)}]}}),_vm._v(\" \"),_c('div',{staticClass:\"input-group-btn\",on:{\"click\":function($event){return _vm.deleteItem(item)}}},[_c('div',{staticClass:\"btn btn-default input-sm\",staticStyle:{\"font-size\":\"14px\"}},[_c('i',{staticClass:\"glyphicon glyphicon-remove\",attrs:{\"title\":\"Remove\"}})])])])],1)}),0),_vm._v(\" \"),_c('div',{staticClass:\"new-item\"},[_c('div',{staticClass:\"draggable-input-group\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newItem),expression:\"newItem\"}],ref:\"newItemInput\",staticClass:\"form-control input-sm\",attrs:{\"type\":\"text\",\"placeholder\":\"add new values per line\"},domProps:{\"value\":(_vm.newItem)},on:{\"input\":function($event){if($event.target.composing)return;_vm.newItem=$event.target.value}}}),_vm._v(\" \"),_c('div',{staticClass:\"input-group-btn\",on:{\"click\":function($event){return _vm.addNewItem()}}},[_vm._m(0)])])]),_vm._v(\" \"),(_vm.newItem.length > 0)?_c('div',{staticClass:\"new-item-help\"},[_vm._v(\"\\n Click \"),_c('i',{staticClass:\"glyphicon glyphicon-plus\"}),_vm._v(\" to finish adding the value.\\n \")]):_vm._e()],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"btn btn-default input-sm\",staticStyle:{\"font-size\":\"14px\"}},[_c('i',{staticClass:\"glyphicon glyphicon-plus\",attrs:{\"title\":\"Add\"}})])\n}]\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./sorted-select-list.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./sorted-select-list.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./sorted-select-list.vue?vue&type=template&id=48a6e4c2&scoped=true&\"\nimport script from \"./sorted-select-list.vue?vue&type=script&lang=js&\"\nexport * from \"./sorted-select-list.vue?vue&type=script&lang=js&\"\nimport style0 from \"./sorted-select-list.vue?vue&type=style&index=0&id=48a6e4c2&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"48a6e4c2\",\n null\n \n)\n\nexport default component.exports","\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./test-guessit.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./test-guessit.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./test-guessit.vue?vue&type=template&id=3808856d&scoped=true&\"\nimport script from \"./test-guessit.vue?vue&type=script&lang=js&\"\nexport * from \"./test-guessit.vue?vue&type=script&lang=js&\"\nimport style0 from \"./test-guessit.vue?vue&type=style&index=0&id=3808856d&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3808856d\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_vm._m(0),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_vm._m(1),_vm._v(\" \"),_c('div',{staticClass:\"col-lg-10\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.releaseName),expression:\"releaseName\"}],staticClass:\"form-control input-sm\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.releaseName)},on:{\"input\":function($event){if($event.target.composing)return;_vm.releaseName=$event.target.value}}})])]),_vm._v(\" \"),(_vm.show)?_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-lg-12 matched-show\"},[_c('span',{staticStyle:{\"margin-right\":\"0.4rem\"}},[_vm._v(\"Matched to show:\")]),_vm._v(\" \"),_c('span',[_c('app-link',{attrs:{\"href\":`home/displayShow?showslug=${_vm.show.id.slug}`}},[_vm._v(_vm._s(_vm.show.title))])],1)])]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-lg-12\"},[_c('h4',[_vm._v(\"Enriched parsed result\")]),_vm._v(\" \"),_c('pre',[_vm._v(_vm._s(JSON.stringify(_vm.parse, undefined, 4)))])])]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-lg-12\"},[_c('h4',[_vm._v(\"Guessit result\")]),_vm._v(\" \"),_c('pre',[_vm._v(_vm._s(JSON.stringify(_vm.guessit, undefined, 4)))])])]),_vm._v(\" \"),(_vm.error)?_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-lg-12\"},[_c('div',{staticClass:\"error\"},[_vm._v(_vm._s(_vm.error))])])]):_vm._e(),_vm._v(\" \"),_c('button',{staticClass:\"btn-medusa config_submitter\",on:{\"click\":function($event){$event.preventDefault();return _vm.testReleaseName.apply(null, arguments)}}},[_vm._v(\"Test Release Name\")])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-lg-12\"},[_c('p',[_vm._v(\"Guessit is a library used for parsing release names. As a minimum Medusa requires a show title, season and episode (if not parsed as a season pack).\")]),_vm._v(\" \"),_c('p',[_vm._v(\"You can fill in your release name and click the `Test Release Name` button, to get the parse result.\")]),_vm._v(\" \"),_c('p',[_vm._v(\"Medusa uses guessit to \\\"guess\\\" a show title, season, episode and other information. It then uses other known info, like scene exception, season exceptions and scene numbering to enrich the result.\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"col-lg-2\"},[_c('h4',[_vm._v(\"Release name:\")])])\n}]\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('config-toggle-slider',{attrs:{\"label\":\"Enable\",\"id\":\"use_trakt\",\"explanations\":['Send Trakt.tv notifications?']},on:{\"change\":function($event){return _vm.save()}},model:{value:(_vm.trakt.enabled),callback:function ($$v) {_vm.$set(_vm.trakt, \"enabled\", $$v)},expression:\"trakt.enabled\"}}),_vm._v(\" \"),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.trakt.enabled),expression:\"trakt.enabled\"}],attrs:{\"id\":\"content-use-trakt-client\"}},[_c('config-template',{attrs:{\"label-for\":\"trakt_request_auth\",\"label\":\"\"}},[_c('input',{staticClass:\"btn-medusa\",attrs:{\"type\":\"button\",\"value\":\"Connect to your trakt account\",\"id\":\"Trakt\"},on:{\"click\":_vm.TraktRequestDeviceCode}}),_vm._v(\" \"),(_vm.traktRequestSend && _vm.traktUserCode)?_c('span',{staticStyle:{\"display\":\"inline\"}},[_vm._v(\"Use this code in the popup: \"+_vm._s(_vm.traktUserCode))]):_vm._e(),_vm._v(\" \"),(_vm.traktRequestSend && _vm.traktUserCode && _vm.traktRequestMessage)?_c('p',[_vm._v(\"Trakt request status: \"+_vm._s(_vm.traktRequestMessage))]):_vm._e(),_vm._v(\" \"),(_vm.traktRequestAuthenticated && _vm.traktRequestMessage)?_c('p',[_vm._v(_vm._s(_vm.traktRequestMessage))]):_vm._e()]),_vm._v(\" \"),(!_vm.authOnly)?[_c('config-textbox-number',{attrs:{\"label\":\"API Timeout\",\"id\":\"trakt_timeout\",\"explanations\":['Seconds to wait for Trakt API to respond. (Use 0 to wait forever)']},model:{value:(_vm.trakt.timeout),callback:function ($$v) {_vm.$set(_vm.trakt, \"timeout\", $$v)},expression:\"trakt.timeout\"}}),_vm._v(\" \"),_c('config-template',{attrs:{\"label-for\":\"trakt_default_indexer\",\"label\":\"Default indexer\"}},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.trakt.defaultIndexer),expression:\"trakt.defaultIndexer\"}],staticClass:\"form-control\",attrs:{\"id\":\"trakt_default_indexer\",\"name\":\"trakt_default_indexer\"},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.$set(_vm.trakt, \"defaultIndexer\", $event.target.multiple ? $$selectedVal : $$selectedVal[0])}}},_vm._l((_vm.traktIndexersOptions),function(option){return _c('option',{key:option.key,domProps:{\"value\":option.value}},[_vm._v(\"\\n \"+_vm._s(option.text)+\"\\n \")])}),0)]),_vm._v(\" \"),_c('config-toggle-slider',{attrs:{\"label\":\"Sync libraries\",\"id\":\"trakt_sync\"},on:{\"change\":function($event){return _vm.save()}},model:{value:(_vm.trakt.sync),callback:function ($$v) {_vm.$set(_vm.trakt, \"sync\", $$v)},expression:\"trakt.sync\"}},[_c('p',[_vm._v(\"Sync your Medusa show library with your Trakt collection.\")]),_vm._v(\" \"),_c('p',[_vm._v(\"Note: Don't enable this setting if you use the Trakt addon for Kodi or any other script that syncs your library.\")]),_vm._v(\" \"),_c('p',[_vm._v(\"Kodi detects that the episode was deleted and removes from collection which causes Medusa to re-add it. This causes a loop between Medusa and Kodi adding and deleting the episode.\")])]),_vm._v(\" \"),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.trakt.sync),expression:\"trakt.sync\"}],attrs:{\"id\":\"content-use-trakt-client\"}},[_c('config-toggle-slider',{attrs:{\"label\":\"Remove Episodes From Collection\",\"id\":\"trakt_remove_watchlist\",\"explanations\":['Remove an Episode from your Trakt Collection if it is not in your Medusa Library.', 'Note:Don\\'t enable this setting if you use the Trakt addon for Kodi or any other script that syncs your library.']},on:{\"change\":function($event){return _vm.save()}},model:{value:(_vm.trakt.removeWatchlist),callback:function ($$v) {_vm.$set(_vm.trakt, \"removeWatchlist\", $$v)},expression:\"trakt.removeWatchlist\"}})],1),_vm._v(\" \"),_c('config-toggle-slider',{attrs:{\"label\":\"Sync watchlist\",\"id\":\"trakt_sync_watchlist\"},on:{\"change\":function($event){return _vm.save()}},model:{value:(_vm.trakt.syncWatchlist),callback:function ($$v) {_vm.$set(_vm.trakt, \"syncWatchlist\", $$v)},expression:\"trakt.syncWatchlist\"}},[_c('p',[_vm._v(\"Sync your Medusa library with your Trakt Watchlist (either Show and Episode).\")]),_vm._v(\" \"),_c('p',[_vm._v(\"Episode will be added on watch list when wanted or snatched and will be removed when downloaded\")]),_vm._v(\" \"),_c('p',[_vm._v(\"Note: By design, Trakt automatically removes episodes and/or shows from watchlist as soon you have watched them.\")])]),_vm._v(\" \"),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.trakt.syncWatchlist),expression:\"trakt.syncWatchlist\"}],attrs:{\"id\":\"content-use-trakt-client\"}},[_c('config-template',{attrs:{\"label-for\":\"trakt_default_indexer\",\"label\":\"Watchlist add method\"}},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.trakt.methodAdd),expression:\"trakt.methodAdd\"}],staticClass:\"form-control\",attrs:{\"id\":\"trakt_method_add\",\"name\":\"trakt_method_add\"},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.$set(_vm.trakt, \"methodAdd\", $event.target.multiple ? $$selectedVal : $$selectedVal[0])}}},_vm._l((_vm.traktMethodOptions),function(option){return _c('option',{key:option.key,domProps:{\"value\":option.value}},[_vm._v(\"\\n \"+_vm._s(option.text)+\"\\n \")])}),0),_vm._v(\" \"),_c('p',[_vm._v(\"method in which to download episodes for new shows.\")])]),_vm._v(\" \"),_c('config-toggle-slider',{attrs:{\"label\":\"Remove episode\",\"id\":\"trakt_remove_watchlist\"},on:{\"change\":function($event){return _vm.save()}},model:{value:(_vm.trakt.removeWatchlist),callback:function ($$v) {_vm.$set(_vm.trakt, \"removeWatchlist\", $$v)},expression:\"trakt.removeWatchlist\"}},[_c('p',[_vm._v(\"remove an episode from your watchlist after it's downloaded.\")])]),_vm._v(\" \"),_c('config-toggle-slider',{attrs:{\"label\":\"Remove series\",\"id\":\"trakt_remove_serieslist\"},on:{\"change\":function($event){return _vm.save()}},model:{value:(_vm.trakt.removeSerieslist),callback:function ($$v) {_vm.$set(_vm.trakt, \"removeSerieslist\", $$v)},expression:\"trakt.removeSerieslist\"}},[_c('p',[_vm._v(\"remove the whole series from your watchlist after any download.\")])]),_vm._v(\" \"),_c('config-toggle-slider',{attrs:{\"label\":\"Remove watched show\",\"id\":\"trakt_remove_show_from_application\"},on:{\"change\":function($event){return _vm.save()}},model:{value:(_vm.trakt.removeShowFromApplication),callback:function ($$v) {_vm.$set(_vm.trakt, \"removeShowFromApplication\", $$v)},expression:\"trakt.removeShowFromApplication\"}},[_c('p',[_vm._v(\"remove the show from Medusa if it\\\\'s ended and completely watched\")])]),_vm._v(\" \"),_c('config-toggle-slider',{attrs:{\"label\":\"Start paused\",\"id\":\"trakt_start_paused\"},on:{\"change\":function($event){return _vm.save()}},model:{value:(_vm.trakt.startPaused),callback:function ($$v) {_vm.$set(_vm.trakt, \"startPaused\", $$v)},expression:\"trakt.startPaused\"}},[_c('p',[_vm._v(\"shows grabbed from your trakt watchlist start paused.\")])])],1),_vm._v(\" \"),_c('config-textbox',{class:_vm.traktBlacklistClass,attrs:{\"label\":\"Trakt blackList name\",\"id\":\"trakt_blacklist_name\"},on:{\"change\":function($event){return _vm.save()}},model:{value:(_vm.trakt.blacklistName),callback:function ($$v) {_vm.$set(_vm.trakt, \"blacklistName\", $$v)},expression:\"trakt.blacklistName\"}},[_c('p',[_vm._v(\"Name(slug) of List on Trakt for blacklisting show on 'Add Trending Show' & 'Add Recommended Shows' pages\")])])]:_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"testNotification\",attrs:{\"id\":\"testTrakt-result\"}},[_vm._v(_vm._s(_vm.testTraktResult))]),_vm._v(\" \"),_c('input',{attrs:{\"type\":\"hidden\",\"id\":\"trakt_pin_url\"},domProps:{\"value\":_vm.trakt.pinUrl}}),_vm._v(\" \"),_c('button',{staticClass:\"btn-medusa\",attrs:{\"id\":\"testTrakt\"},on:{\"click\":_vm.testTrakt}},[_vm._v(\"Test Trakt\")]),_vm._v(\" \"),(!_vm.authOnly)?_c('button',{staticClass:\"btn-medusa\",attrs:{\"id\":\"forceSync\"},on:{\"click\":_vm.traktForceSync}},[_vm._v(\"Force Sync\")]):_vm._e(),_vm._v(\" \"),_c('button',{staticClass:\"btn-medusa config_submitter\",attrs:{\"disabled\":_vm.saving},on:{\"click\":_vm.save}},[_vm._v(\"Save Changes\")])],2)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./trakt-authentication.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./trakt-authentication.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./trakt-authentication.vue?vue&type=template&id=769fed2d&scoped=true&\"\nimport script from \"./trakt-authentication.vue?vue&type=script&lang=js&\"\nexport * from \"./trakt-authentication.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"769fed2d\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./alerts.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./alerts.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./alerts.vue?vue&type=template&id=4c38c771&\"\nimport script from \"./alerts.vue?vue&type=script&lang=js&\"\nexport * from \"./alerts.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.system.branch !== null)?_c('div',{attrs:{\"id\":\"alerts\"}},[(_vm.system.branch !== 'master' && !_vm.developer)?_c('div',{staticClass:\"text-center\"},[_c('div',{staticClass:\"alert alert-danger upgrade-notification hidden-print\",attrs:{\"role\":\"alert\"}},[_c('span',[_vm._v(\"You're using the \"+_vm._s(_vm.system.branch)+\" branch. Please use 'master' unless specifically asked\")])])]):_vm._e(),_vm._v(\" \"),(_vm.system.newestVersionMessage)?_c('div',{staticClass:\"text-center\"},[_c('div',{staticClass:\"alert alert-success upgrade-notification hidden-print\",attrs:{\"role\":\"alert\"}},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.system.newestVersionMessage)}})])]):_vm._e()]):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./app-header.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./app-header.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./app-header.vue?vue&type=template&id=855bd53e&\"\nimport script from \"./app-header.vue?vue&type=script&lang=js&\"\nexport * from \"./app-header.vue?vue&type=script&lang=js&\"\nimport style0 from \"./app-header.vue?vue&type=style&index=0&id=855bd53e&prod&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('nav',{staticClass:\"navbar navbar-default navbar-fixed-top hidden-print\",attrs:{\"role\":\"navigation\"}},[_c('div',{staticClass:\"container-fluid\"},[_c('div',{staticClass:\"navbar-header\"},[_c('button',{staticClass:\"navbar-toggle collapsed\",attrs:{\"type\":\"button\",\"data-toggle\":\"collapse\",\"data-target\":\"#main_nav\"}},[(_vm.toolsBadgeCount > 0)?_c('span',{class:`floating-badge${_vm.toolsBadgeClass}`},[_vm._v(_vm._s(_vm.toolsBadgeCount))]):_vm._e(),_vm._v(\" \"),_c('span',{staticClass:\"sr-only\"},[_vm._v(\"Toggle navigation\")]),_vm._v(\" \"),_c('span',{staticClass:\"icon-bar\"}),_vm._v(\" \"),_c('span',{staticClass:\"icon-bar\"}),_vm._v(\" \"),_c('span',{staticClass:\"icon-bar\"})]),_vm._v(\" \"),(!_vm.isConnected || !_vm.socketIsConnected)?_c('app-link',{staticClass:\"navbar-brand\",staticStyle:{\"position\":\"relative\"},attrs:{\"title\":\"Medusa\"}},[_c('img',{staticClass:\"img-responsive pull-left\",staticStyle:{\"height\":\"50px\"},attrs:{\"alt\":\"Medusa\",\"src\":\"images/medusa.png\"},on:{\"click\":_vm.reloadPage}}),_vm._v(\" \"),_c('img',{staticClass:\"disconnected spin-hover-90\",attrs:{\"alt\":\"disconnected\",\"src\":\"images/no16.png\"}})]):_c('app-link',{staticClass:\"navbar-brand\",attrs:{\"href\":\"home/\",\"title\":\"Medusa\"}},[_c('img',{staticClass:\"img-responsive pull-left\",staticStyle:{\"height\":\"50px\"},attrs:{\"alt\":\"Medusa\",\"src\":\"images/medusa.png\"}})])],1),_vm._v(\" \"),(_vm.isAuthenticated)?_c('div',{staticClass:\"collapse navbar-collapse\",attrs:{\"id\":\"main_nav\"}},[_c('ul',{staticClass:\"nav navbar-nav navbar-right navbar-mobile\"},[_c('li',{staticClass:\"navbar-split dropdown\",class:{ active: _vm.topMenu === 'home' },attrs:{\"id\":\"NAVhome\"}},[_c('app-link',{staticClass:\"dropdown-toggle\",attrs:{\"aria-haspopup\":\"true\",\"data-toggle\":\"dropdown\",\"data-hover\":\"dropdown\"}},[_c('span',[_vm._v(\"Shows\")]),_vm._v(\" \"),_c('b',{staticClass:\"caret\"})]),_vm._v(\" \"),_c('ul',{staticClass:\"dropdown-menu\"},[_c('li',[_c('app-link',{attrs:{\"href\":\"home/\"}},[_c('i',{staticClass:\"menu-icon-home\"}),_vm._v(\" Show List\")])],1),_vm._v(\" \"),_c('li',[_c('app-link',{attrs:{\"href\":\"addShows/\"}},[_c('i',{staticClass:\"menu-icon-addshow\"}),_vm._v(\" Add Shows\")])],1),_vm._v(\" \"),_c('li',[_c('app-link',{attrs:{\"href\":\"addRecommended/\"}},[_c('i',{staticClass:\"menu-icon-addshow\"}),_vm._v(\" Add Recommended Shows\")])],1),_vm._v(\" \"),_c('li',[_c('app-link',{attrs:{\"href\":\"home/postprocess/\"}},[_c('i',{staticClass:\"menu-icon-postprocess\"}),_vm._v(\" Manual Post-Processing\")])],1),_vm._v(\" \"),(_vm.recentShows.length > 0)?_c('li',{staticClass:\"divider\",attrs:{\"role\":\"separator\"}}):_vm._e(),_vm._v(\" \"),_vm._l((_vm.recentShows),function(recentShow){return _c('li',{key:recentShow.link},[_c('app-link',{attrs:{\"href\":recentShow.link}},[_c('i',{staticClass:\"menu-icon-addshow\"}),_vm._v(\" \"+_vm._s(recentShow.name)+\"\\n \")])],1)})],2),_vm._v(\" \"),_c('div',{staticStyle:{\"clear\":\"both\"}})],1),_vm._v(\" \"),_c('li',{staticClass:\"navbar-split\",class:{ active: _vm.topMenu === 'schedule' },attrs:{\"id\":\"NAVschedule\"}},[_c('app-link',{attrs:{\"href\":\"schedule/\"}},[_vm._v(\"Schedule\")])],1),_vm._v(\" \"),_c('li',{staticClass:\"navbar-split\",class:{ active: _vm.topMenu === 'history' },attrs:{\"id\":\"NAVhistory\"}},[_c('app-link',{attrs:{\"href\":\"history/\"}},[_vm._v(\"History\")])],1),_vm._v(\" \"),_c('li',{staticClass:\"navbar-split dropdown\",class:{ active: _vm.topMenu === 'manage' },attrs:{\"id\":\"NAVmanage\"}},[_c('app-link',{staticClass:\"dropdown-toggle\",attrs:{\"aria-haspopup\":\"true\",\"data-toggle\":\"dropdown\",\"data-hover\":\"dropdown\"}},[_c('span',[_vm._v(\"Manage\")]),_vm._v(\" \"),_c('b',{staticClass:\"caret\"})]),_vm._v(\" \"),_c('ul',{staticClass:\"dropdown-menu\"},[_c('li',[_c('app-link',{attrs:{\"href\":\"manage/\"}},[_c('i',{staticClass:\"menu-icon-manage\"}),_vm._v(\" Mass Update\")])],1),_vm._v(\" \"),_c('li',[_c('app-link',{attrs:{\"href\":\"manage/changeIndexer/\"}},[_c('i',{staticClass:\"menu-icon-manage-change\"}),_vm._v(\" Change Indexer\")])],1),_vm._v(\" \"),_c('li',[_c('app-link',{attrs:{\"href\":\"manage/backlogOverview/\"}},[_c('i',{staticClass:\"menu-icon-backlog-view\"}),_vm._v(\" Backlog Overview\")])],1),_vm._v(\" \"),_c('li',[_c('app-link',{attrs:{\"href\":\"manage/manageSearches/\"}},[_c('i',{staticClass:\"menu-icon-manage-searches\"}),_vm._v(\" Manage Searches\")])],1),_vm._v(\" \"),_c('li',[_c('app-link',{attrs:{\"href\":\"manage/episodeStatuses/\"}},[_c('i',{staticClass:\"menu-icon-manage2\"}),_vm._v(\" Episode Status Management\")])],1),_vm._v(\" \"),(_vm.linkVisible.plex)?_c('li',[_c('a',{attrs:{\"href\":\"home/updatePLEX/\"},on:{\"click\":function($event){$event.preventDefault();return _vm.updatePlex.apply(null, arguments)}}},[_c('i',{staticClass:\"menu-icon-plex\"}),_vm._v(\" Update PLEX\")])]):_vm._e(),_vm._v(\" \"),(_vm.linkVisible.kodi)?_c('li',[_c('a',{attrs:{\"href\":\"home/updateKODI/\"},on:{\"click\":function($event){$event.preventDefault();return _vm.updateKodi.apply(null, arguments)}}},[_c('i',{staticClass:\"menu-icon-kodi\"}),_vm._v(\" Update KODI\")])]):_vm._e(),_vm._v(\" \"),(_vm.linkVisible.emby)?_c('li',[_c('a',{attrs:{\"href\":\"home/updateEMBY/\"},on:{\"click\":function($event){$event.preventDefault();return _vm.updateEmby.apply(null, arguments)}}},[_c('i',{staticClass:\"menu-icon-emby\"}),_vm._v(\" Update Emby\")])]):_vm._e(),_vm._v(\" \"),(_vm.linkVisible.manageTorrents)?_c('li',[_c('app-link',{attrs:{\"href\":\"manage/manageTorrents/\",\"target\":\"_blank\"}},[_c('i',{staticClass:\"menu-icon-bittorrent\"}),_vm._v(\" Manage Torrents\")])],1):_vm._e(),_vm._v(\" \"),(_vm.linkVisible.failedDownloads)?_c('li',[_c('app-link',{attrs:{\"href\":\"manage/failedDownloads/\"}},[_c('i',{staticClass:\"menu-icon-failed-download\"}),_vm._v(\" Failed Downloads\")])],1):_vm._e(),_vm._v(\" \"),(_vm.linkVisible.subtitleMissed)?_c('li',[_c('app-link',{attrs:{\"href\":\"manage/subtitleMissed/\"}},[_c('i',{staticClass:\"menu-icon-backlog\"}),_vm._v(\" Missed Subtitle Management\")])],1):_vm._e()]),_vm._v(\" \"),_c('div',{staticStyle:{\"clear\":\"both\"}})],1),_vm._v(\" \"),_c('li',{staticClass:\"navbar-split dropdown\",class:{ active: _vm.topMenu === 'config' },attrs:{\"id\":\"NAVconfig\"}},[_c('app-link',{staticClass:\"dropdown-toggle\",attrs:{\"aria-haspopup\":\"true\",\"data-toggle\":\"dropdown\",\"data-hover\":\"dropdown\"}},[_c('span',{staticClass:\"visible-xs-inline\"},[_vm._v(\"Config\")]),_c('img',{staticClass:\"navbaricon hidden-xs\",attrs:{\"src\":\"images/menu/system18.png\"}}),_vm._v(\" \"),_c('b',{staticClass:\"caret\"})]),_vm._v(\" \"),_c('ul',{staticClass:\"dropdown-menu\"},[_c('li',[_c('app-link',{attrs:{\"href\":\"config/\"}},[_c('i',{staticClass:\"menu-icon-help\"}),_vm._v(\" Help & Info\")])],1),_vm._v(\" \"),_c('li',[_c('app-link',{attrs:{\"href\":\"config/general/\"}},[_c('i',{staticClass:\"menu-icon-config\"}),_vm._v(\" General\")])],1),_vm._v(\" \"),_c('li',[_c('app-link',{attrs:{\"href\":\"config/backuprestore/\"}},[_c('i',{staticClass:\"menu-icon-backup\"}),_vm._v(\" Backup & Restore\")])],1),_vm._v(\" \"),_c('li',[_c('app-link',{attrs:{\"href\":\"config/search/\"}},[_c('i',{staticClass:\"menu-icon-manage-searches\"}),_vm._v(\" Search Settings\")])],1),_vm._v(\" \"),_c('li',[_c('app-link',{attrs:{\"href\":\"config/providers/\"}},[_c('i',{staticClass:\"menu-icon-provider\"}),_vm._v(\" Search Providers\")])],1),_vm._v(\" \"),_c('li',[_c('app-link',{attrs:{\"href\":\"config/subtitles/\"}},[_c('i',{staticClass:\"menu-icon-backlog\"}),_vm._v(\" Subtitles Settings\")])],1),_vm._v(\" \"),_c('li',[_c('app-link',{attrs:{\"href\":\"config/postProcessing/\"}},[_c('i',{staticClass:\"menu-icon-postprocess\"}),_vm._v(\" Post-Processing\")])],1),_vm._v(\" \"),_c('li',[_c('app-link',{attrs:{\"href\":\"config/notifications/\"}},[_c('i',{staticClass:\"menu-icon-notification\"}),_vm._v(\" Notifications\")])],1),_vm._v(\" \"),_c('li',[_c('app-link',{attrs:{\"href\":\"config/anime/\"}},[_c('i',{staticClass:\"menu-icon-anime\"}),_vm._v(\" Anime\")])],1)]),_vm._v(\" \"),_c('div',{staticStyle:{\"clear\":\"both\"}})],1),_vm._v(\" \"),_c('li',{staticClass:\"navbar-split dropdown\",class:{ active: _vm.topMenu === 'system' },attrs:{\"id\":\"NAVsystem\"}},[_c('app-link',{staticClass:\"padding-right-15 dropdown-toggle\",attrs:{\"aria-haspopup\":\"true\",\"data-toggle\":\"dropdown\",\"data-hover\":\"dropdown\"}},[_c('span',{staticClass:\"visible-xs-inline\"},[_vm._v(\"Tools\")]),_c('img',{staticClass:\"navbaricon hidden-xs\",attrs:{\"src\":\"images/menu/system18-2.png\"}}),_vm._v(\" \"),(_vm.toolsBadgeCount > 0)?_c('span',{class:`badge${_vm.toolsBadgeClass}`},[_vm._v(_vm._s(_vm.toolsBadgeCount))]):_vm._e(),_vm._v(\" \"),_c('b',{staticClass:\"caret\"})]),_vm._v(\" \"),_c('ul',{staticClass:\"dropdown-menu\"},[_c('li',[_c('app-link',{attrs:{\"href\":\"news/\"}},[_c('i',{staticClass:\"menu-icon-news\"}),_vm._v(\" News \"),(_vm.system.news.unread > 0)?_c('span',{staticClass:\"badge\"},[_vm._v(_vm._s(_vm.system.news.unread))]):_vm._e()])],1),_vm._v(\" \"),_c('li',[_c('app-link',{attrs:{\"href\":\"IRC/\"}},[_c('i',{staticClass:\"menu-icon-irc\"}),_vm._v(\" IRC\")])],1),_vm._v(\" \"),_c('li',[_c('app-link',{attrs:{\"href\":\"changes/\"}},[_c('i',{staticClass:\"menu-icon-changelog\"}),_vm._v(\" Changelog\")])],1),_vm._v(\" \"),_c('li',{staticClass:\"divider\",attrs:{\"role\":\"separator\"}}),_vm._v(\" \"),(_vm.config.logs.numErrors > 0)?_c('li',[_c('app-link',{attrs:{\"href\":\"errorlogs/\"}},[_c('i',{staticClass:\"menu-icon-error\"}),_vm._v(\" View Errors \"),_c('span',{staticClass:\"badge btn-danger\"},[_vm._v(_vm._s(_vm.config.logs.numErrors))])])],1):_vm._e(),_vm._v(\" \"),(_vm.config.logs.numWarnings > 0)?_c('li',[_c('app-link',{attrs:{\"href\":`errorlogs/?level=${_vm.warningLevel}`}},[_c('i',{staticClass:\"menu-icon-viewlog-errors\"}),_vm._v(\" View Warnings \"),_c('span',{staticClass:\"badge btn-warning\"},[_vm._v(_vm._s(_vm.config.logs.numWarnings))])])],1):_vm._e(),_vm._v(\" \"),_c('li',[_c('app-link',{attrs:{\"href\":\"errorlogs/viewlog/\"}},[_c('i',{staticClass:\"menu-icon-viewlog\"}),_vm._v(\" View Log\")])],1),_vm._v(\" \"),_c('li',{staticClass:\"divider\",attrs:{\"role\":\"separator\"}}),_vm._v(\" \"),_c('li',[_c('app-link',{attrs:{\"href\":'home/update'},nativeOn:{\"click\":function($event){$event.preventDefault();return _vm.checkForupdates($event)}}},[_c('i',{staticClass:\"menu-icon-update\"}),_vm._v(\" Check For Updates\")])],1),_vm._v(\" \"),_c('li',[_c('app-link',{attrs:{\"href\":'home/restart'}},[_c('i',{staticClass:\"menu-icon-restart\"}),_vm._v(\" Restart\")])],1),_vm._v(\" \"),_c('li',[_c('app-link',{attrs:{\"href\":'home/shutdown'},on:{\"click\":function($event){$event.preventDefault();return _vm.$router.push({ name: 'shutdown' });}}},[_c('i',{staticClass:\"menu-icon-shutdown\"}),_vm._v(\" Shutdown\")])],1),_vm._v(\" \"),(_vm.username)?_c('li',[_c('app-link',{attrs:{\"href\":\"logout\"},nativeOn:{\"click\":function($event){$event.preventDefault();return _vm.confirmDialog($event, 'logout')}}},[_c('i',{staticClass:\"menu-icon-shutdown\"}),_vm._v(\" Logout\")])],1):_vm._e(),_vm._v(\" \"),_c('li',{staticClass:\"divider\",attrs:{\"role\":\"separator\"}}),_vm._v(\" \"),_c('li',[_c('app-link',{attrs:{\"href\":\"home/status/\"}},[_c('i',{staticClass:\"menu-icon-info\"}),_vm._v(\" Server Status\")])],1)]),_vm._v(\" \"),_c('div',{staticStyle:{\"clear\":\"both\"}})],1)])]):_vm._e()])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.subMenu.length > 0)?_c('div',{attrs:{\"id\":\"sub-menu-wrapper\"}},[_c('div',{staticClass:\"col-md-12 shadow\",attrs:{\"id\":\"sub-menu-container\"}},[_c('div',{staticClass:\"submenu-default hidden-print\",attrs:{\"id\":\"sub-menu\"}},[_vm._l((_vm.subMenu),function(menuItem){return _c('app-link',{key:`sub-menu-${menuItem.title}`,staticClass:\"btn-medusa top-5 bottom-5\",attrs:{\"href\":menuItem.path},nativeOn:_vm._d({},[_vm.clickEventCond(menuItem),function($event){$event.preventDefault();return _vm.runMethod($event, menuItem)}])},[_c('span',{class:['pull-left', menuItem.icon]}),_vm._v(\" \"+_vm._s(menuItem.title)+\"\\n \")])}),_vm._v(\" \"),(_vm.showForRoutes)?_c('show-selector',{attrs:{\"show-slug\":_vm.$route.query.showslug,\"follow-selection\":\"\"}}):_vm._e()],2)]),_vm._v(\" \"),_c('div',{staticClass:\"btn-group\"})]):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./sub-menu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./sub-menu.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./sub-menu.vue?vue&type=template&id=5844b6a9&scoped=true&\"\nimport script from \"./sub-menu.vue?vue&type=script&lang=js&\"\nexport * from \"./sub-menu.vue?vue&type=script&lang=js&\"\nimport style0 from \"./sub-menu.vue?vue&type=style&index=0&id=5844b6a9&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5844b6a9\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('footer',[_c('div',{staticClass:\"footer clearfix\"},[_c('span',{staticClass:\"footerhighlight\"},[_vm._v(_vm._s(_vm.stats.overall.shows.total))]),_vm._v(\" Shows (\"),_c('span',{staticClass:\"footerhighlight\"},[_vm._v(_vm._s(_vm.stats.overall.shows.active))]),_vm._v(\" Active)\\n | \"),_c('span',{staticClass:\"footerhighlight\"},[_vm._v(_vm._s(_vm.stats.overall.episodes.downloaded))]),_vm._v(\" \"),(_vm.stats.overall.episodes.snatched)?[_c('span',{staticClass:\"footerhighlight\"},[_c('app-link',{attrs:{\"href\":`manage/episodeStatuses?status=${_vm.snatchedStatus}`,\"title\":\"View overview of snatched episodes\"}},[_vm._v(\"+\"+_vm._s(_vm.stats.overall.episodes.snatched))])],1),_vm._v(\"\\n Snatched\\n \")]:_vm._e(),_vm._v(\"\\n / \"),_c('span',{staticClass:\"footerhighlight\"},[_vm._v(_vm._s(_vm.stats.overall.episodes.total))]),_vm._v(\" Episodes Downloaded \"),(_vm.episodePercentage)?_c('span',{staticClass:\"footerhighlight\"},[_vm._v(\"(\"+_vm._s(_vm.episodePercentage)+\")\")]):_vm._e(),_vm._v(\"\\n | Daily Search: \"),_c('span',{staticClass:\"footerhighlight\"},[_vm._v(_vm._s(_vm.schedulerNextRun('dailySearch')))]),_vm._v(\"\\n | Backlog Search: \"),_c('span',{staticClass:\"footerhighlight\"},[_vm._v(_vm._s(_vm.schedulerNextRun('backlog')))]),_vm._v(\" \"),_c('div',[(_vm.system.memoryUsage)?[_vm._v(\"\\n Memory used: \"),_c('span',{staticClass:\"footerhighlight\"},[_vm._v(_vm._s(_vm.system.memoryUsage))]),_vm._v(\" |\\n \")]:_vm._e(),_vm._v(\" \"),_vm._v(\"\\n Branch: \"),_c('span',{staticClass:\"footerhighlight\"},[_vm._v(_vm._s(_vm.system.branch || 'Unknown'))]),_vm._v(\" |\\n Now: \"),_c('span',{staticClass:\"footerhighlight\"},[_vm._v(_vm._s(_vm.nowInUserPreset))])],2)],2)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./app-footer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./app-footer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./app-footer.vue?vue&type=template&id=5cf1e725&scoped=true&\"\nimport script from \"./app-footer.vue?vue&type=script&lang=js&\"\nexport * from \"./app-footer.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5cf1e725\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./app.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./app.vue?vue&type=script&lang=js&\"","\n\n\n\n\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../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!./app.vue?vue&type=style&index=0&id=58d7b0d4&prod&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../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!./app.vue?vue&type=style&index=0&id=58d7b0d4&prod&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./app.vue?vue&type=template&id=58d7b0d4&\"\nimport script from \"./app.vue?vue&type=script&lang=js&\"\nexport * from \"./app.vue?vue&type=script&lang=js&\"\nimport style0 from \"./app.vue?vue&type=style&index=0&id=58d7b0d4&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{attrs:{\"id\":\"app\"}},[(_vm.isAuthenticated)?_c('div',[(_vm.showsLoading)?_c('load-progress-bar',_vm._b({},'load-progress-bar',{display: _vm.showsLoading.display, current: _vm.showsLoading.current, total: _vm.showsLoading.total},false)):_vm._e(),_vm._v(\" \"),_c('app-header'),_vm._v(\" \"),_c('sub-menu'),_vm._v(\" \"),_c('div',{attrs:{\"id\":\"content-row\"}},[_c('div',{class:_vm.layout.wide ? 'col-lg-12 col-md-12' : 'col-lg-10 col-lg-offset-1 col-md-10 col-md-offset-1',attrs:{\"id\":\"content-col\"}},[_c('vue-snotify'),_vm._v(\" \"),_c('alerts'),_vm._v(\" \"),(_vm.$route.meta.header)?_c('h1',{staticClass:\"header\"},[_vm._v(_vm._s(_vm.$route.meta.header))]):_vm._e(),_vm._v(\" \"),_c('keep-alive',{attrs:{\"exclude\":_vm.excludeFromCaching}},[_c('router-view',{key:_vm.$route.meta.nocache ? `${_vm.$route.fullPath}` : _vm.$route.name})],1),_vm._v(\" \"),_c('app-footer'),_vm._v(\" \"),_c('scroll-buttons')],1)])],1):_c('div',[_c('router-view')],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('tr',{ref:\"changeIndexerRow\"},[_c('td',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.currentShow.checked),expression:\"currentShow.checked\"}],attrs:{\"type\":\"checkbox\",\"data-slug\":_vm.show.id.slug},domProps:{\"checked\":Array.isArray(_vm.currentShow.checked)?_vm._i(_vm.currentShow.checked,null)>-1:(_vm.currentShow.checked)},on:{\"change\":function($event){var $$a=_vm.currentShow.checked,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(_vm.currentShow, \"checked\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(_vm.currentShow, \"checked\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(_vm.currentShow, \"checked\", $$c)}}}})]),_vm._v(\" \"),_c('td',[_c('app-link',{attrs:{\"href\":`home/displayShow?showslug=${_vm.show.id.slug}`}},[_vm._v(_vm._s(_vm.show.name))])],1),_vm._v(\" \"),_c('td',[_vm._v(_vm._s(_vm.show.indexer))]),_vm._v(\" \"),_c('td',[_c('select-indexer',_vm._b({on:{\"change\":_vm.selectIndexerChange}},'select-indexer',{show: _vm.show, searchedShow: _vm.searchedShow},false))],1),_vm._v(\" \"),_c('td',{staticClass:\"align-center\"},[(_vm.state)?_c('div',{staticClass:\"step-container\"},[_c('div',{staticClass:\"state\"},[_c('state-switch',{attrs:{\"state\":_vm.state}})],1),_vm._v(\" \"),_c('div',{staticClass:\"stepdisplay\"},[_c('ul',_vm._l((_vm.show.changeStatus.steps),function(step){return _c('li',{key:step},[_vm._v(_vm._s(step))])}),0)])]):_vm._e()])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./select-indexer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./select-indexer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./select-indexer.vue?vue&type=template&id=75f70d78&scoped=true&\"\nimport script from \"./select-indexer.vue?vue&type=script&lang=js&\"\nexport * from \"./select-indexer.vue?vue&type=script&lang=js&\"\nimport style0 from \"./select-indexer.vue?vue&type=style&index=0&id=75f70d78&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"75f70d78\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"align-center\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selectedIndexer),expression:\"selectedIndexer\"}],attrs:{\"name\":\"indexer\"},on:{\"change\":[function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.selectedIndexer=$event.target.multiple ? $$selectedVal : $$selectedVal[0]},function($event){return _vm.$emit('change', _vm.selectedIndexer)}]}},[_c('option',{attrs:{\"disabled\":\"\",\"value\":\"--select--\"}},[_vm._v(\"--select--\")]),_vm._v(\" \"),_vm._l((_vm.externalsOptions),function(option){return _c('option',{key:option.value,domProps:{\"value\":{value: option.value, text: option.text}}},[_vm._v(\"\\n \"+_vm._s(option.text)+\"\\n \")])})],2),_vm._v(\" \"),(_vm.searchedShow && _vm.searchedShow.searched)?_c('div',{staticClass:\"star\",attrs:{\"title\":\"This indexer was manually selected\"}},[_vm._v(\"*\")]):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./change-indexer-row.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./change-indexer-row.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./change-indexer-row.vue?vue&type=template&id=2f075332&scoped=true&\"\nimport script from \"./change-indexer-row.vue?vue&type=script&lang=js&\"\nexport * from \"./change-indexer-row.vue?vue&type=script&lang=js&\"\nimport style0 from \"./change-indexer-row.vue?vue&type=style&index=0&id=2f075332&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2f075332\",\n null\n \n)\n\nexport default component.exports","// @TODO: Remove this file before v1.0.0\nimport Vue from 'vue';\nimport AsyncComputed from 'vue-async-computed';\nimport VueMeta from 'vue-meta';\nimport Snotify from 'vue-snotify';\nimport VueCookies from 'vue-cookies';\nimport VModal from 'vue-js-modal';\nimport { VTooltip } from 'v-tooltip';\nimport { library } from '@fortawesome/fontawesome-svg-core';\nimport { faAlignJustify, faImages } from '@fortawesome/free-solid-svg-icons';\nimport { faTimesCircle } from '@fortawesome/free-regular-svg-icons';\n\nlibrary.add([faAlignJustify, faImages, faTimesCircle]);\n\nimport { App } from './components';\nimport store from './store';\nimport { isDevelopment } from './utils/core';\n\n/**\n * Register global components and x-template components.\n */\nexport const registerGlobalComponents = () => {\n // Start with the x-template components\n let { components = [] } = window;\n\n // Add global components (in use by `main.mako`)\n // @TODO: These should be registered in an `App.vue` component when possible,\n // along with some of the `main.mako` template\n components = components.concat([\n App\n ]);\n\n // Register the components globally\n components.forEach(component => {\n if (isDevelopment) {\n console.debug(`Registering ${component.name}`);\n }\n Vue.component(component.name, component);\n });\n};\n\n/**\n * Register plugins.\n */\nexport const registerPlugins = () => {\n Vue.use(AsyncComputed);\n Vue.use(VueMeta);\n Vue.use(Snotify);\n Vue.use(VueCookies);\n Vue.use(VModal, { dynamicDefault: { height: 'auto' } });\n Vue.use(VTooltip);\n\n // Set default cookie expire time\n Vue.$cookies.config('10y');\n};\n\n/**\n * Apply the global Vue shim.\n */\nexport default () => {\n const warningTemplate = (name, state) =>\n `${name} is using the global Vuex '${state}' state, ` +\n `please replace that with a local one using: mapState(['${state}'])`;\n\n Vue.mixin({\n data() {\n // These are only needed for the root Vue\n if (this.$root === this) {\n return {\n pageComponent: false,\n showsLoading: false\n };\n }\n return {};\n },\n mounted() {\n if (this.$root === this && !window.location.pathname.includes('/login')) {\n const { username } = window;\n Promise.all([\n /* This is used by the `app-header` component\n to only show the logout button if a username is set */\n store.dispatch('login', { username }),\n store.dispatch('getConfig'),\n store.dispatch('getStats')\n ]).then(([_, config]) => {\n this.$root.$emit('loaded');\n // Legacy - send config.general to jQuery (received by index.js)\n const event = new CustomEvent('medusa-config-loaded', { detail: { general: config.main, layout: config.layout } });\n window.dispatchEvent(event);\n }).catch(error => {\n console.debug(error);\n alert('Unable to connect to Medusa!'); // eslint-disable-line no-alert\n });\n }\n },\n // Make auth and config accessible to all components\n // @TODO: Remove this completely\n computed: {\n // Deprecate the global `Vuex.mapState(['auth', 'config'])`\n auth() {\n if (isDevelopment && !this.__VUE_DEVTOOLS_UID__) {\n console.warn(warningTemplate(this._name, 'auth'));\n }\n return this.$store.state.auth;\n },\n config() {\n if (isDevelopment && !this.__VUE_DEVTOOLS_UID__) {\n console.warn(warningTemplate(this._name, 'config'));\n }\n return this.$store.state.config;\n }\n }\n });\n\n if (isDevelopment) {\n console.debug('Loading local Vue');\n }\n\n registerPlugins();\n\n registerGlobalComponents();\n};\n","/**\n * Vue Cookie handler for the vue-good-tables enable/disable columns feature.\n * @param {String} cookiePrefix String used to specify the specific table.\n * @example - Prefix `Home` with the column Label `title` will result in the cookie key `Home-title`\n * @returns {void}\n */\nexport const manageCookieMixin = cookiePrefix => {\n return {\n methods: {\n getCookie(key) {\n if (key.includes(cookiePrefix)) {\n return key;\n }\n const cookie = this.$cookies.get(`${cookiePrefix}-${key}`);\n try {\n return JSON.parse(cookie);\n } catch {\n return cookie;\n }\n },\n setCookie(key, value) {\n return this.$cookies.set(`${cookiePrefix}-${key}`, JSON.stringify(value));\n },\n /**\n * Save vue-good-table sort field and sort order (desc/asc)\n * @param {*} evt - Vue good table sorting event (triggered by the `on-sort-change` event)\n */\n saveSorting(evt) {\n const { setCookie } = this;\n // Store cookies, for sort field and type (asc/desc)\n setCookie('sort-field', evt.map(item => item.field));\n setCookie('sort-type', evt.map(item => item.type));\n },\n /**\n * Get vue-good-table sort field and sort order.\n * @param {string} defaultField - default vue good table field to sort by.\n * @param {string} defaultType - default vue good table sort order (ascending / descending).\n * @returns {object} - Object with the field and type properties.\n */\n getSortBy(defaultField = 'title', defaultType = 'asc') {\n const { getCookie } = this;\n // Try to get cookies, for sort field and type (asc/desc)\n const sortField = getCookie('sort-field');\n const sortType = getCookie('sort-type');\n const sort = [];\n\n if (Array.isArray(sortField) && sortField.length === 2) {\n sortField.forEach((_, index) => {\n sort.push({ field: sortField[index] || defaultField, type: sortType[index] || defaultType });\n });\n return sort;\n }\n\n if (sortField === null || sortType === null) {\n return ({ field: defaultField, type: defaultType });\n }\n\n return ({ field: sortField[0] || defaultField, type: sortType[0] || defaultType });\n }\n },\n created() {\n // Watch the columns property on the VM. This is the default named property for the vue-good-tables columns.\n this.$watch(() => this.columns, columns => {\n // Monitor the columns, to update the cookies, when changed.\n const { setCookie } = this;\n for (const column of columns) {\n if (column) {\n setCookie(column.label, column.hidden);\n }\n }\n }, { deep: true });\n }\n };\n};\n","import pretty from 'pretty-bytes';\nimport { mapGetters, mapState } from 'vuex';\n\n/**\n * Vue bindings for the simple, small poster and banner layouts.\n * @returns {void}\n */\nexport const showlistTableMixin = {\n data() {\n const { getCookie } = this;\n return {\n columns: [{\n label: 'Next Ep',\n field: 'nextAirDate',\n type: 'date',\n sortable: true,\n dateInputFormat: 'yyyy-MM-dd\\'T\\'HH:mm:ssXXX',\n dateOutputFormat: 'yyyy-MM-dd\\'T\\'HH:mm:ssXXX',\n sortFn: this.sortDateNext,\n hidden: getCookie('Next Ep')\n }, {\n label: 'Prev Ep',\n field: 'prevAirDate',\n type: 'date',\n sortable: true,\n dateInputFormat: 'yyyy-MM-dd\\'T\\'HH:mm:ssXXX',\n dateOutputFormat: 'yyyy-MM-dd\\'T\\'HH:mm:ssXXX',\n sortFn: this.sortDatePrev,\n hidden: getCookie('Prev Ep')\n }, {\n label: 'Show',\n field: 'title',\n filterOptions: {\n enabled: true\n },\n sortFn: this.sortTitle,\n hidden: getCookie('Show')\n }, {\n label: 'Network',\n field: 'network',\n filterOptions: {\n enabled: true\n },\n hidden: getCookie('Network')\n }, {\n label: 'Indexer',\n field: 'indexer',\n filterOptions: {\n enabled: true,\n filterDropdownItems: ['tvdb', 'tvmaze', 'tmdb', 'imdb']\n },\n hidden: getCookie('Indexer')\n }, {\n label: 'Quality',\n field: 'config.qualities',\n filterOptions: {\n enabled: true,\n filterFn: this.qualityColumnFilterFn\n },\n sortable: false,\n hidden: getCookie('Quality')\n }, {\n label: 'Downloads',\n field: 'stats.tooltip.percentage',\n sortFn: this.sortDownloads,\n type: 'boolean',\n hidden: getCookie('Downloads')\n }, {\n label: 'Size',\n type: 'number',\n field: 'stats.episodes.size',\n hidden: getCookie('Size')\n }, {\n label: 'Active',\n field: this.fealdFnActive,\n filterOptions: {\n enabled: true,\n filterDropdownItems: [\n { value: true, text: 'yes' },\n { value: false, text: 'no' }\n ]\n },\n type: 'boolean',\n hidden: getCookie('Active')\n }, {\n label: 'Status',\n field: 'status',\n filterOptions: {\n enabled: true\n },\n hidden: getCookie('Status')\n }, {\n label: 'Xem',\n field: this.fealdFnXem,\n filterOptions: {\n enabled: true,\n filterDropdownItems: [\n { value: true, text: 'yes' },\n { value: false, text: 'no' }\n ]\n },\n type: 'boolean',\n hidden: getCookie('Xem')\n }]\n };\n },\n computed: {\n ...mapState({\n config: state => state.config.general,\n indexerConfig: state => state.config.indexers.indexers,\n stateLayout: state => state.config.layout,\n qualityValues: state => state.config.consts.qualities.values\n }),\n ...mapGetters({\n fuzzyParseDateTime: 'fuzzyParseDateTime',\n showsInLists: 'showsInLists',\n getShowIndexerUrl: 'getShowIndexerUrl'\n }),\n maxNextAirDate() {\n const { shows } = this;\n return Math.max(...shows.filter(show => show.nextAirDate).map(show => Date.parse(show.nextAirDate)));\n }\n },\n methods: {\n prettyBytes: bytes => pretty(bytes),\n parsePrevDateFn(row) {\n const { fuzzyParseDateTime } = this;\n if (row.prevAirDate) {\n console.log(`Calculating time for show ${row.title} prev date: ${row.prevAirDate}`);\n return fuzzyParseDateTime(row.prevAirDate);\n }\n\n return '';\n },\n parseNextDateFn(row) {\n const { fuzzyParseDateTime } = this;\n if (row.nextAirDate) {\n console.log(`Calculating time for show ${row.title} next date: ${row.nextAirDate}`);\n return fuzzyParseDateTime(row.nextAirDate);\n }\n\n return '';\n },\n fealdFnXem(row) {\n return row.xemNumbering && row.xemNumbering.length !== 0;\n },\n fealdFnActive(row) {\n return row.config && !row.config.paused && row.status === 'Continuing';\n },\n sortDateNext(x, y) {\n const { maxNextAirDate } = this;\n\n if (x === null && y === null) {\n return 0;\n }\n\n if (x === null || y === null) {\n return x === null ? 1 : -1;\n }\n\n // Convert to timestamps\n x = Date.parse(x);\n y = Date.parse(y);\n\n // This next airdate lies in the past. We need to correct this.\n if (x < Date.now()) {\n x += maxNextAirDate;\n }\n\n if (y < Date.now()) {\n y += maxNextAirDate;\n }\n\n return (x < y ? -1 : (x > y ? 1 : 0));\n },\n sortDatePrev(x, y) {\n if (x === null && y === null) {\n return 0;\n }\n\n // Standardize dates and nulls\n x = x ? Date.parse(x) : 0;\n y = y ? Date.parse(y) : 0;\n\n if (x === null || y === null) {\n return x === null ? -1 : 1;\n }\n\n const xTsDiff = x - Date.now();\n const yTsDiff = y - Date.now();\n\n return xTsDiff < yTsDiff ? -1 : (xTsDiff > yTsDiff ? 1 : 0);\n },\n sortTitle(x, y) {\n const { stateLayout } = this;\n const { sortArticle } = stateLayout;\n\n let titleX = x;\n let titleY = y;\n\n if (!sortArticle) {\n titleX = titleX.replace(/^((?:a(?!\\s+to)n?)|the)\\s/i, '').toLowerCase();\n titleY = titleY.replace(/^((?:a(?!\\s+to)n?)|the)\\s/i, '').toLowerCase();\n }\n\n return (titleX < titleY ? -1 : (titleX > titleY ? 1 : 0));\n },\n sortDownloads(x, y, _, rowX, rowY) {\n if ((x === 0 || x === 100) && x === y) {\n return rowX.stats.episodes.total < rowY.stats.episodes.total ? -1 : (rowX.stats.episodes.total < rowY.stats.episodes.total ? 1 : 0);\n }\n\n return x < y ? -1 : (x > y ? 1 : 0);\n },\n qualityColumnFilterFn(data, filterString) {\n const { qualityValues } = this;\n return [...data.allowed, ...data.preferred].map(q => qualityValues.find(qv => qv.value === q).name.includes(filterString)).some(isTrue => isTrue);\n }\n }\n};\n","/** @type {import('.').SubMenu} */\nexport const configSubMenu = [\n { title: 'General', path: 'config/general/', icon: 'menu-icon-config' },\n { title: 'Backup/Restore', path: 'config/backuprestore/', icon: 'menu-icon-backup' },\n { title: 'Search Settings', path: 'config/search/', icon: 'menu-icon-manage-searches' },\n { title: 'Search Providers', path: 'config/providers/', icon: 'menu-icon-provider' },\n { title: 'Subtitles Settings', path: 'config/subtitles/', icon: 'menu-icon-backlog' },\n { title: 'Post-Processing', path: 'config/postProcessing/', icon: 'menu-icon-postprocess' },\n { title: 'Notifications', path: 'config/notifications/', icon: 'menu-icon-notification' },\n { title: 'Anime', path: 'config/anime/', icon: 'menu-icon-anime' }\n];\n\n// eslint-disable-next-line valid-jsdoc\n/** @type {import('.').SubMenuFunction} */\nexport const errorlogsSubMenu = vm => {\n const { $route, $store } = vm;\n const level = $route.params.level || $route.query.level;\n const { config } = $store.state;\n const { loggingLevels, numErrors, numWarnings } = config.general.logs;\n if (Object.keys(loggingLevels).length === 0) {\n return [];\n }\n\n const isLevelError = (level === undefined || Number(level) === loggingLevels.error);\n\n return [\n {\n title: 'Clear Errors',\n path: 'errorlogs/clearerrors/',\n requires: numErrors >= 1 && isLevelError,\n icon: 'ui-icon ui-icon-trash'\n },\n {\n title: 'Clear Warnings',\n path: `errorlogs/clearerrors/?level=${loggingLevels.warning}`,\n requires: numWarnings >= 1 && Number(level) === loggingLevels.warning,\n icon: 'ui-icon ui-icon-trash'\n },\n {\n title: 'Submit Errors',\n path: 'errorlogs/submit_errors/',\n requires: numErrors >= 1 && isLevelError,\n confirm: 'submiterrors',\n icon: 'ui-icon ui-icon-arrowreturnthick-1-n'\n }\n ];\n};\n\n/** @type {import('.').SubMenu} */\nexport const historySubMenu = [\n { title: 'Clear History', path: 'history/clearHistory', icon: 'ui-icon ui-icon-trash', confirm: 'clearhistory' },\n { title: 'Trim History', path: 'history/trimHistory', icon: 'menu-icon-cut', confirm: 'trimhistory' }\n];\n\n// eslint-disable-next-line valid-jsdoc\n/** @type {import('.').SubMenuFunction} */\nexport const showSubMenu = vm => {\n const { $route, $store } = vm;\n const { config } = $store.state;\n const { notifiers } = config;\n\n const showSlug = $route.params.showSlug || $route.query.showslug;\n\n const show = $store.getters.getCurrentShow;\n const { showQueueStatus } = show;\n\n const queuedActionStatus = action => {\n if (!showQueueStatus) {\n return false;\n }\n return Boolean(showQueueStatus.find(status => status.action === action && status.active === true));\n };\n\n const isBeingAdded = queuedActionStatus('isBeingAdded');\n const isBeingUpdated = queuedActionStatus('isBeingUpdated');\n const isBeingSubtitled = queuedActionStatus('isBeingSubtitled');\n\n /** @type {import('.').SubMenu} */\n let menu = [{\n title: 'Edit',\n path: `home/editShow?showslug=${showSlug}`,\n icon: 'ui-icon ui-icon-pencil'\n }];\n if (!isBeingAdded && !isBeingUpdated) {\n menu = menu.concat([\n {\n title: show.config.paused ? 'Resume' : 'Pause',\n path: `home/togglePause?showslug=${showSlug}`,\n icon: `ui-icon ui-icon-${show.config.paused ? 'play' : 'pause'}`\n },\n {\n title: 'Remove',\n path: `home/deleteShow?showslug=${showSlug}`,\n confirm: 'removeshow',\n icon: 'ui-icon ui-icon-trash'\n },\n {\n title: 'Re-scan files',\n path: `home/refreshShow?showslug=${showSlug}`,\n icon: 'ui-icon ui-icon-refresh'\n },\n {\n title: 'Force Full Update',\n path: `home/updateShow?showslug=${showSlug}`,\n icon: 'ui-icon ui-icon-transfer-e-w'\n },\n {\n title: 'Update show in KODI',\n path: `home/updateKODI?showslug=${showSlug}`,\n method: 'updatekodi',\n requires: notifiers.kodi.enabled && notifiers.kodi.update.library,\n icon: 'menu-icon-kodi'\n },\n {\n title: 'Update show in Emby',\n path: `home/updateEMBY?showslug=${showSlug}`,\n requires: notifiers.emby.enabled,\n icon: 'menu-icon-emby'\n },\n {\n title: 'Preview Rename',\n path: `home/testRename?showslug=${showSlug}`,\n icon: 'ui-icon ui-icon-tag'\n },\n {\n title: 'Download Subtitles',\n path: `home/subtitleShow?showslug=${showSlug}`,\n requires: config.subtitles.enabled && !isBeingSubtitled && show.config.subtitlesEnabled,\n icon: 'menu-icon-backlog'\n }\n ]);\n }\n return menu;\n};\n","import {\n configSubMenu,\n errorlogsSubMenu,\n historySubMenu,\n showSubMenu\n} from './sub-menus';\n\n/** @type {import('.').Route[]} */\nconst homeRoutes = [\n {\n path: '/home',\n name: 'home',\n meta: {\n title: 'Home',\n topMenu: 'home',\n converted: true\n },\n component: () => import('../components/home.vue')\n },\n {\n path: '/home/editShow',\n name: 'editShow',\n meta: {\n topMenu: 'home',\n subMenu: showSubMenu,\n converted: true,\n nocache: true // Use this flag, to have the router-view use :key=\"$route.fullPath\"\n },\n component: () => import('../components/edit-show.vue')\n },\n {\n path: '/home/displayShow',\n name: 'show',\n meta: {\n topMenu: 'home',\n subMenu: showSubMenu,\n converted: true,\n nocache: true // Use this flag, to have the router-view use :key=\"$route.fullPath\"\n },\n component: () => import('../components/display-show.vue')\n },\n {\n path: '/home/snatchSelection',\n name: 'snatchSelection',\n meta: {\n topMenu: 'home',\n subMenu: showSubMenu,\n converted: true,\n nocache: true // Use this flag, to have the router-view use :key=\"$route.fullPath\"\n },\n component: () => import('../components/snatch-selection.vue')\n },\n {\n path: '/home/testRename',\n name: 'testRename',\n meta: {\n topMenu: 'home',\n subMenu: showSubMenu,\n title: 'Preview Rename',\n header: 'Preview Rename',\n converted: true\n },\n component: () => import('../components/test-rename.vue')\n },\n {\n path: '/home/postprocess',\n name: 'postprocess',\n meta: {\n title: 'Manual Post-Processing',\n header: 'Manual Post-Processing',\n topMenu: 'home',\n converted: true\n },\n component: () => import('../components/manual-post-process.vue')\n },\n {\n path: '/home/status',\n name: 'status',\n meta: {\n title: 'Status',\n topMenu: 'system',\n converted: true\n },\n component: () => import('../components/status.vue')\n },\n {\n path: '/home/restart',\n name: 'restart',\n meta: {\n title: 'Restarting...',\n header: 'Performing Restart',\n topMenu: 'system',\n converted: true\n },\n component: () => import('../components/restart.vue')\n },\n {\n path: '/home/shutdown',\n name: 'shutdown',\n meta: {\n header: 'Shutting down',\n topMenu: 'system',\n converted: true\n },\n component: () => import('../components/restart.vue'),\n props: { shutdown: true }\n },\n {\n path: '/home/update',\n name: 'update',\n meta: {\n header: 'Update Medusa',\n topMenu: 'system',\n converted: true\n },\n component: () => import('../components/update.vue')\n }\n];\n\n/** @type {import('.').Route[]} */\nconst configRoutes = [\n {\n path: '/config',\n name: 'config',\n meta: {\n title: 'Help & Info',\n header: 'Medusa Configuration',\n topMenu: 'config',\n subMenu: configSubMenu,\n converted: true\n },\n component: () => import('../components/config.vue')\n },\n {\n path: '/config/anime',\n name: 'configAnime',\n meta: {\n title: 'Config - Anime',\n header: 'Anime',\n topMenu: 'config',\n subMenu: configSubMenu,\n converted: true\n },\n component: () => import('../components/config-anime.vue')\n },\n {\n path: '/config/backuprestore',\n name: 'configBackupRestore',\n meta: {\n title: 'Config - Backup/Restore',\n header: 'Backup/Restore',\n topMenu: 'config',\n subMenu: configSubMenu,\n converted: true\n },\n component: () => import('../components/config-backup-restore.vue')\n },\n {\n path: '/config/general',\n name: 'configGeneral',\n meta: {\n title: 'Config - General',\n header: 'General Configuration',\n topMenu: 'config',\n subMenu: configSubMenu,\n converted: true\n },\n component: () => import('../components/config-general.vue')\n },\n {\n path: '/config/notifications',\n name: 'configNotifications',\n meta: {\n title: 'Config - Notifications',\n header: 'Notifications',\n topMenu: 'config',\n subMenu: configSubMenu,\n converted: true\n },\n component: () => import('../components/config-notifications.vue')\n },\n {\n path: '/config/postProcessing',\n name: 'configPostProcessing',\n meta: {\n title: 'Config - Post-Processing',\n header: 'Post-Processing',\n topMenu: 'config',\n subMenu: configSubMenu,\n converted: true\n },\n component: () => import('../components/config-post-processing.vue')\n },\n {\n path: '/config/providers',\n name: 'configSearchProviders',\n meta: {\n title: 'Config - Providers',\n header: 'Search Providers',\n topMenu: 'config',\n subMenu: configSubMenu,\n converted: true\n },\n component: () => import('../components/config-providers.vue')\n },\n {\n path: '/config/search',\n name: 'configSearchSettings',\n meta: {\n title: 'Config - Episode Search',\n header: 'Search Settings',\n topMenu: 'config',\n subMenu: configSubMenu,\n converted: true\n },\n component: () => import('../components/config-search.vue')\n },\n {\n path: '/config/subtitles',\n name: 'configSubtitles',\n meta: {\n title: 'Config - Subtitles',\n header: 'Subtitles',\n topMenu: 'config',\n subMenu: configSubMenu,\n converted: true\n },\n component: () => import('../components/config-subtitles.vue')\n }\n];\n\n/** @type {import('.').Route[]} */\nconst addShowRoutes = [\n {\n path: '/addShows',\n name: 'addShows',\n meta: {\n title: 'Add Shows',\n header: 'Add Shows',\n topMenu: 'home',\n converted: true\n },\n component: () => import('../components/add-shows.vue')\n },\n {\n path: '/addShows/existingShows',\n name: 'addExistingShows',\n meta: {\n title: 'Add Existing Shows',\n header: 'Add Existing Shows',\n topMenu: 'home',\n converted: true,\n nocache: true\n },\n component: () => import('../components/new-shows-existing.vue')\n },\n {\n path: '/addShows/newShow',\n name: 'addNewShow',\n meta: {\n title: 'Add New Show',\n header: 'Add New Show',\n topMenu: 'home',\n converted: true,\n nocache: true\n },\n props: route => ({ ...route.params }),\n component: () => import('../components/new-show.vue')\n }\n];\n\n/** @type {import('.').Route} */\nconst loginRoute = {\n path: '/login',\n name: 'login',\n meta: {\n title: 'Login'\n },\n component: () => import('../components/login.vue')\n};\n\n/** @type {import('.').Route} */\nconst addRecommendedRoute = {\n path: '/addRecommended',\n name: 'addRecommended',\n meta: {\n title: 'Add Recommended Shows',\n header: 'Add Recommended Shows',\n topMenu: 'home',\n converted: true\n },\n component: () => import('../components/recommended.vue')\n};\n\n/** @type {import('.').Route} */\nconst scheduleRoute = {\n path: '/schedule',\n name: 'schedule',\n meta: {\n title: 'Schedule',\n header: 'Schedule',\n topMenu: 'schedule',\n converted: true\n },\n component: () => import('../components/schedule.vue')\n};\n\n/** @type {import('.').Route} */\nconst historyRoute = {\n path: '/history',\n name: 'history',\n meta: {\n title: 'History',\n header: 'History',\n topMenu: 'history',\n subMenu: historySubMenu,\n converted: true\n },\n component: () => import('../components/history.vue')\n};\n\n/** @type {import('.').Route} */\nconst downloadsRoute = {\n path: '/downloads',\n name: 'downloads',\n meta: {\n title: 'Downloads',\n header: 'Downloads',\n converted: true\n },\n component: () => import('../components/current-downloads.vue')\n};\n\n/** @type {import('.').Route[]} */\nconst manageRoutes = [\n {\n path: '/manage',\n name: 'manage',\n meta: {\n title: 'Mass Update',\n topMenu: 'manage',\n converted: true\n },\n component: () => import('../components/manage-mass-update.vue'),\n props: true\n },\n {\n path: '/manage/changeIndexer',\n name: 'manageChangeIndexer',\n meta: {\n title: 'Change show indexer',\n header: 'Change show indexer',\n topMenu: 'manage',\n converted: true\n },\n component: () => import('../components/change-indexer.vue')\n },\n {\n path: '/manage/backlogOverview',\n name: 'manageBacklogOverview',\n meta: {\n title: 'Backlog Overview',\n header: 'Backlog Overview',\n topMenu: 'manage',\n converted: true\n },\n component: () => import('../components/manage-backlog.vue')\n },\n {\n path: '/manage/episodeStatuses',\n name: 'manageEpisodeOverview',\n meta: {\n title: 'Episode Overview',\n header: 'Episode Overview',\n topMenu: 'manage',\n converted: true\n },\n component: () => import('../components/manage-episode-status.vue')\n },\n {\n path: '/manage/failedDownloads',\n name: 'manageFailedDownloads',\n meta: {\n title: 'Failed Downloads',\n header: 'Failed Downloads',\n topMenu: 'manage',\n converted: true\n },\n component: () => import('../components/manage-failed-downloads.vue')\n },\n {\n path: '/manage/manageSearches',\n name: 'manageManageSearches',\n meta: {\n title: 'Manage Searches',\n header: 'Manage Searches',\n topMenu: 'manage',\n converted: true\n },\n component: () => import('../components/manage-searches.vue')\n },\n {\n path: '/manage/massEdit',\n name: 'manageMassEdit',\n meta: {\n title: 'Mass Edit',\n topMenu: 'manage',\n converted: true\n },\n component: () => import('../components/manage-mass-edit.vue'),\n props: true\n },\n {\n path: '/manage/subtitleMissed',\n name: 'manageSubtitleMissed',\n meta: {\n title: 'Missing Subtitles',\n header: 'Missing Subtitles',\n topMenu: 'manage',\n converted: true\n },\n component: () => import('../components/manage-missing-subtitles.vue')\n }\n];\n\n/** @type {import('.').Route[]} */\nconst errorLogsRoutes = [\n {\n path: '/errorlogs',\n name: 'errorlogs',\n meta: {\n title: 'Logs & Errors',\n topMenu: 'system',\n subMenu: errorlogsSubMenu,\n converted: true\n },\n component: () => import('../components/log-reporter.vue'),\n props: true\n },\n {\n path: '/errorlogs/viewlog',\n name: 'viewlog',\n meta: {\n title: 'Logs',\n header: 'Log File',\n topMenu: 'system',\n converted: true\n },\n component: () => import('../components/logs.vue')\n }\n];\n\n/** @type {import('.').Route} */\nconst newsRoute = {\n path: '/news',\n name: 'news',\n meta: {\n title: 'News',\n header: 'News',\n topMenu: 'system',\n converted: true\n },\n component: () => import('../components/news.vue')\n};\n\n/** @type {import('.').Route} */\nconst changesRoute = {\n path: '/changes',\n name: 'changes',\n meta: {\n title: 'Changelog',\n header: 'Changelog',\n topMenu: 'system',\n converted: true\n },\n component: () => import('../components/changelog.vue')\n};\n\n/** @type {import('.').Route} */\nconst ircRoute = {\n path: '/IRC',\n name: 'IRC',\n meta: {\n title: 'IRC',\n topMenu: 'system',\n converted: true\n },\n component: () => import('../components/irc.vue')\n};\n\n/** @type {import('.').Route} */\nconst notFoundRoute = {\n path: '/not-found',\n name: 'not-found',\n meta: {\n title: '404',\n header: '404 - page not found'\n },\n component: () => import('../components/http/404.vue')\n};\n\n// @NOTE: Redirect can only be added once all routes are vue\n/** @type {import('.').Route} */\nconst notFoundRedirect = {\n path: '*',\n redirect: '/not-found'\n};\n\n/** @type {import('.').Route[]} */\nexport default [\n ...homeRoutes,\n ...configRoutes,\n ...addShowRoutes,\n loginRoute,\n addRecommendedRoute,\n scheduleRoute,\n historyRoute,\n downloadsRoute,\n ...manageRoutes,\n ...errorLogsRoutes,\n newsRoute,\n changesRoute,\n ircRoute,\n notFoundRoute,\n notFoundRedirect\n];\n","import Vue from 'vue';\nimport VueRouter from 'vue-router';\n\nimport routes from './routes';\n\nVue.use(VueRouter);\nconst router = new VueRouter({\n mode: 'history',\n routes\n});\n\nrouter.beforeEach((to, from, next) => {\n const { meta } = to;\n const { title } = meta;\n\n // If there's no title then it's not a .vue route\n // or it's handling its own title\n if (title) {\n document.title = `${title} | Medusa`;\n }\n\n // Always call next otherwise the will be empty\n next();\n});\n\nexport default router;\n","import axios from 'axios';\n\n// This should be more dynamic. As now when we change the apiKey in config-general.vue. This won't work anymore.\n// Because of this, a page reload is required.\n\nexport default function() {\n this.webRoot = document.body.getAttribute('web-root');\n this.token = null;\n this.getToken = () => {\n return axios.get(`${this.webRoot}/token`)\n .then(response => {\n this.token = response.data;\n this.apiRoute = axios.create({\n baseURL: `${this.webRoot}/`,\n timeout: 60000,\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json'\n }\n });\n\n this.api = axios.create({\n baseURL: `${this.webRoot}/api/v2/`,\n timeout: 30000,\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n 'x-auth': `Bearer ${this.token}`\n }\n });\n });\n };\n}\n","import {\n AUTHENTICATE,\n CONNECT,\n LOGIN_PENDING,\n LOGIN_SUCCESS,\n LOGIN_FAILED,\n LOGOUT,\n REFRESH_TOKEN,\n REMOVE_AUTH_ERROR\n} from '../mutation-types';\nimport ApiClient from '../../api';\nimport VueJwtDecode from 'vue-jwt-decode';\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};\n\nconst mutations = {\n [LOGIN_PENDING]() { },\n [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 [LOGIN_FAILED](state, { error }) {\n state.user = {};\n state.isAuthenticated = false;\n state.error = error;\n },\n [LOGOUT](state) {\n state.user = {};\n state.isAuthenticated = false;\n state.error = null;\n },\n [REFRESH_TOKEN]() {},\n [REMOVE_AUTH_ERROR]() {},\n [AUTHENTICATE](state, client) {\n state.client = client;\n state.tokens.access = client.token;\n },\n [CONNECT](state, value) {\n state.isConnected = value;\n }\n};\n\nconst getters = {};\n\nconst actions = {\n login({ commit, state }) {\n commit(LOGIN_PENDING);\n\n // Check if we got a token from the /token call.\n const { client } = state;\n const { token } = client;\n if (!token) {\n commit(LOGIN_FAILED, { error: 'Missing token' });\n return { success: false, error: 'Missing token' };\n }\n\n const credentials = VueJwtDecode.decode(token);\n\n // @TODO: Add real JWT login\n const apiLogin = credentials => Promise.resolve(credentials);\n\n return apiLogin(credentials).then(user => {\n commit(LOGIN_SUCCESS, user);\n return { success: true };\n }).catch(error => {\n commit(LOGIN_FAILED, { error, credentials });\n return { success: false, error };\n });\n },\n logout(context) {\n const { commit } = context;\n commit(LOGOUT);\n },\n auth({ commit }) {\n // Get the JWT token\n return new Promise(resolve => {\n const apiClient = new ApiClient();\n apiClient.getToken()\n .then(() => {\n commit(AUTHENTICATE, apiClient);\n resolve();\n });\n });\n },\n connect({ commit }, connected) {\n commit(CONNECT, connected);\n }\n};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","const state = {\n show: {\n airs: null,\n airsFormatValid: null,\n akas: null,\n cache: null,\n classification: null,\n seasonCount: [],\n config: {\n airByDate: null,\n aliases: [],\n anime: null,\n defaultEpisodeStatus: null,\n dvdOrder: null,\n location: null,\n locationValid: null,\n paused: null,\n qualities: {\n allowed: [],\n preferred: []\n },\n release: {\n requiredWords: [],\n ignoredWords: [],\n blacklist: [],\n whitelist: [],\n requiredWordsExclude: null,\n ignoredWordsExclude: null\n },\n scene: null,\n seasonFolders: null,\n sports: null,\n subtitlesEnabled: null,\n airdateOffset: null,\n templates: null,\n searchTemplates: []\n },\n countries: null,\n genres: [],\n id: {\n tvdb: null,\n trakt: null,\n imdb: null,\n slug: null\n },\n indexer: null,\n imdbInfo: {\n akas: null,\n certificates: null,\n countries: null,\n countryCodes: null,\n genres: null,\n imdbId: null,\n imdbInfoId: null,\n indexer: null,\n indexerId: null,\n lastUpdate: null,\n plot: null,\n rating: null,\n runtimes: null,\n title: null,\n votes: null\n },\n language: null,\n network: null,\n nextAirDate: null,\n plot: null,\n rating: {\n imdb: {\n rating: null,\n votes: null\n }\n },\n runtime: null,\n showType: null,\n status: null,\n title: null,\n type: null,\n year: {},\n size: null,\n\n // ===========================\n // Detailed (`?detailed=true`)\n // ===========================\n\n showQueueStatus: [],\n xemNumbering: [],\n sceneAbsoluteNumbering: [],\n xemAbsoluteNumbering: [],\n sceneNumbering: [],\n\n // ===========================\n // Episodes (`?episodes=true`)\n // ===========================\n\n // Seasons array is added to the show object under this query,\n // but we currently check to see if this property is defined before fetching the show with `?episodes=true`.\n seasons: [],\n episodeCount: null\n },\n provider: {\n id: null,\n name: null,\n config: {},\n cache: []\n }\n};\n\nconst mutations = {};\n\nconst getters = {};\n\nconst actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","import Vue from 'vue';\nimport { ADD_HISTORY, ADD_HISTORY_ROW, ADD_SHOW_HISTORY, ADD_SHOW_EPISODE_HISTORY } from '../mutation-types';\nimport { episodeToSlug } from '../../utils/core';\n\nconst state = {\n remote: {\n rows: [],\n totalRows: 0,\n page: 1,\n perPage: 25,\n sort: [{\n field: 'date',\n type: 'desc'\n }],\n filter: null\n },\n remoteCompact: {\n rows: [],\n totalRows: 0,\n page: 1,\n perPage: 25,\n sort: [{\n field: 'date',\n type: 'desc'\n }],\n filter: null\n },\n episodeHistory: {},\n historyLast: null,\n historyLastCompact: null,\n loading: false\n};\n\nconst mutations = {\n [ADD_HISTORY_ROW](state, { history, compact }) {\n // Only evaluate compact once.\n const historyKey = compact ? 'remoteCompact' : 'remote';\n\n // Update state, add one item at the top.\n state[historyKey].rows.unshift(history);\n },\n [ADD_HISTORY](state, { history, compact }) {\n // Only evaluate compact once.\n const historyKey = compact ? 'remoteCompact' : 'remote';\n\n // Update state\n Vue.set(state[historyKey], 'rows', history);\n },\n [ADD_SHOW_HISTORY](state, { showSlug, history }) {\n // Add history data to episodeHistory, but without passing the show slug.\n for (const row of history) {\n if (!Object.keys(state.episodeHistory).includes(showSlug)) {\n Vue.set(state.episodeHistory, showSlug, {});\n }\n\n const episodeSlug = episodeToSlug(row.season, row.episode);\n if (!state.episodeHistory[showSlug][episodeSlug]) {\n state.episodeHistory[showSlug][episodeSlug] = [];\n }\n\n state.episodeHistory[showSlug][episodeSlug].push(row);\n }\n },\n [ADD_SHOW_EPISODE_HISTORY](state, { showSlug, episodeSlug, history }) {\n // Keep an object of shows, with their history per episode\n // Example: {tvdb1234: {s01e01: [history]}}\n\n if (!Object.keys(state.episodeHistory).includes(showSlug)) {\n Vue.set(state.episodeHistory, showSlug, {});\n }\n\n Vue.set(state.episodeHistory[showSlug], episodeSlug, history);\n },\n setLoading(state, value) {\n state.loading = value;\n },\n setRemoteTotal(state, { total, compact = false }) {\n state[compact ? 'remoteCompact' : 'remote'].totalRows = total;\n }\n};\n\nconst getters = {\n getShowHistoryBySlug: state => showSlug => state.showHistory[showSlug],\n getLastReleaseName: state => ({ showSlug, episodeSlug }) => {\n if (state.episodeHistory[showSlug] !== undefined) {\n if (state.episodeHistory[showSlug][episodeSlug] !== undefined) {\n if (state.episodeHistory[showSlug][episodeSlug].length === 1) {\n return state.episodeHistory[showSlug][episodeSlug][0].resource;\n }\n const filteredHistory = state.episodeHistory[showSlug][episodeSlug]\n .slice()\n .sort((a, b) => (a.actionDate - b.actionDate) * -1)\n .filter(ep => ['Snatched', 'Downloaded'].includes(ep.statusName) && ep.resource !== '');\n if (filteredHistory.length > 0) {\n return filteredHistory[0].resource;\n }\n }\n }\n },\n getEpisodeHistory: state => ({ showSlug, episodeSlug }) => {\n if (state.episodeHistory[showSlug] === undefined) {\n return [];\n }\n\n return state.episodeHistory[showSlug][episodeSlug] || [];\n },\n getSeasonHistory: state => ({ showSlug, season }) => {\n if (state.episodeHistory[showSlug] === undefined) {\n return [];\n }\n\n return Object.values(state.episodeHistory[showSlug]).flat().filter(row => row.season === season) || [];\n }\n};\n\n/**\n * An object representing request parameters for getting a show from the API.\n *\n * @typedef {object} ShowGetParameters\n * @property {boolean} detailed Fetch detailed information? (e.g. scene/xem numbering)\n * @property {boolean} episodes Fetch seasons & episodes?\n */\n\nconst actions = {\n /**\n * Get show history from API and commit it to the store.\n *\n * @param {*} context The store context.\n * @param {ShowIdentifier&ShowGetParameters} parameters Request parameters.\n * @returns {Promise} The API response.\n */\n async getShowHistory({ rootState, commit }, { slug }) {\n const response = await rootState.auth.client.api.get(`/history/${slug}`);\n if (response.data.length > 0) {\n commit(ADD_SHOW_HISTORY, { showSlug: slug, history: response.data });\n }\n },\n /**\n * Get detailed history from API and commit them to the store.\n *\n * @param {*} context - The store context.\n * @param {object} args - arguments.\n */\n async getHistory({ rootState, commit }, args) {\n let url = '/history';\n const page = args?.page || 1;\n const limit = args?.perPage || 1000;\n let sort = args?.sort || [{ field: 'date', type: 'desc' }];\n const filter = args?.filter || {};\n const showSlug = args?.showSlug;\n const compact = args?.compact;\n\n const params = {\n page,\n limit\n };\n\n if (sort) {\n if (!Array.isArray(sort)) {\n sort = [sort];\n }\n params.sort = JSON.stringify(sort);\n }\n\n if (filter) {\n params.filter = JSON.stringify(filter);\n }\n\n if (showSlug) {\n url = `${url}/${showSlug}`;\n }\n\n if (compact) {\n params.compact = true;\n }\n\n commit('setLoading', true);\n let response = null;\n try {\n response = await rootState.auth.client.api.get(url, { params }); // eslint-disable-line no-await-in-loop\n if (response) {\n commit('setRemoteTotal', { total: Number(response.headers['x-pagination-count']), compact });\n if (showSlug) {\n commit(ADD_SHOW_HISTORY, { showSlug, history: response.data, compact });\n } else {\n commit(ADD_HISTORY, { history: response.data, compact });\n }\n }\n } catch (error) {\n if (error.response && error.response.status === 404) {\n console.debug(`No history available${showSlug ? ' for show ' + showSlug : ''}`);\n }\n }\n\n commit('setLoading', false);\n },\n /**\n * Get episode history from API and commit it to the store.\n *\n * @param {*} context The store context.\n * @param {ShowIdentifier&ShowGetParameters} parameters Request parameters.\n * @returns {Promise} The API response.\n */\n getShowEpisodeHistory({ rootState, commit }, { showSlug, episodeSlug }) {\n return new Promise(resolve => {\n rootState.auth.client.api.get(`/history/${showSlug}/episode/${episodeSlug}`)\n .then(response => {\n if (response.data.length > 0) {\n commit(ADD_SHOW_EPISODE_HISTORY, { showSlug, episodeSlug, history: response.data });\n }\n resolve();\n })\n .catch(() => {\n console.warn(`No episode history found for show ${showSlug} and episode ${episodeSlug}`);\n });\n });\n },\n updateHistory({ rootState, commit }, data) {\n // Update store's search queue item. (provided through websocket)\n const compact = rootState.config.layout.history === 'compact';\n // We can't live update the compact layout, as it requires to aggregate the data.\n if (compact) {\n return;\n }\n commit(ADD_HISTORY_ROW, { history: data });\n }\n};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","import { NOTIFICATIONS_ENABLED, NOTIFICATIONS_DISABLED } from '../mutation-types';\n\nconst state = {\n enabled: true\n};\n\nconst mutations = {\n [NOTIFICATIONS_ENABLED](state) {\n state.enabled = true;\n },\n [NOTIFICATIONS_DISABLED](state) {\n state.enabled = false;\n }\n};\n\nconst getters = {};\n\nconst actions = {\n enable(context) {\n const { commit } = context;\n commit(NOTIFICATIONS_ENABLED);\n },\n disable(context) {\n const { commit } = context;\n commit(NOTIFICATIONS_DISABLED);\n },\n test() {\n return window.displayNotification('error', 'test', 'test
hello world', 'notification-test');\n }\n};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","import Vue from 'vue';\nimport {\n ADD_PROVIDER,\n ADD_PROVIDERS,\n ADD_PROVIDER_CACHE,\n ADD_SEARCH_RESULTS,\n REMOVE_PROVIDER\n} from '../mutation-types';\n\nconst state = {\n providers: []\n};\n\nconst mutations = {\n [ADD_PROVIDER](state, provider) {\n if (!state.providers.find(p => p.id === provider.id)) {\n state.providers.push(provider);\n }\n },\n [ADD_PROVIDERS](state, providers) {\n providers.forEach(provider => {\n const existingProvider = state.providers.find(p => p.id === provider.id);\n if (existingProvider) {\n Vue.set(state.providers, state.providers.indexOf(existingProvider), provider);\n } else {\n state.providers.push(provider);\n }\n });\n },\n [REMOVE_PROVIDER](state, providerId) {\n state.providers = state.providers.filter(prov => prov.id !== providerId);\n },\n [ADD_PROVIDER_CACHE](state, { providerId, cache }) {\n // Check if this provider has already been added.\n let currentProvider = state.providers.find(prov => prov.id === providerId);\n if (!currentProvider) {\n currentProvider = {\n name: '',\n config: {}\n };\n state.providers.push(currentProvider);\n }\n\n if (currentProvider.cache === undefined) {\n Vue.set(currentProvider, 'cache', []);\n }\n\n const newCache = [];\n\n for (const result of cache) {\n const existingIdentifier = currentProvider.cache.find(item => item.identifier === result.identifier);\n if (existingIdentifier) {\n newCache.push({ ...existingIdentifier, ...result });\n } else {\n newCache.push(result);\n }\n }\n\n Vue.set(currentProvider, 'cache', newCache);\n },\n /**\n * Add search results which have been retreived through the webSocket.\n * @param {*} state - Vue state\n * @param {Array} searchResults - One or more search results.\n */\n [ADD_SEARCH_RESULTS](state, searchResults) {\n for (const searchResult of searchResults) {\n let currentProvider = state.providers.find(prov => prov.id === searchResult.provider.id);\n\n if (!currentProvider) {\n currentProvider = {\n name: '',\n config: {},\n cache: []\n };\n }\n\n const { cache } = currentProvider;\n\n // Check if we don't allready have this result in our store.\n // In that case, we update the existing object.\n const existingSearchResult = (cache || []).find(result => result.identifier === searchResult.identifier);\n if (existingSearchResult) {\n // Because this is an existing result, whe're not overwriting dateAdded field.\n const { dateAdded, ...rest } = searchResult;\n Vue.set(currentProvider.cache, cache.indexOf(existingSearchResult), { ...existingSearchResult, ...rest });\n } else {\n Vue.set(currentProvider, 'cache', [...cache || [], ...[searchResult]]);\n }\n }\n }\n};\n\nconst getters = {\n providerNameToId: _ => providerName => providerName.replace(/[^\\d\\w_]/gi, '_').toLowerCase().trim() // eslint-disable-line unicorn/better-regex\n};\n\n/**\n * An object representing request parameters for getting a show from the API.\n *\n * @typedef {object} ShowGetParameters\n * @property {boolean} detailed Fetch detailed information? (e.g. scene/xem numbering)\n * @property {boolean} episodes Fetch seasons & episodes?\n */\n\nconst actions = {\n /**\n * Get providers.\n *\n * @param {*} context The store context.\n * @returns {Promise} The API response.\n */\n getProviders({ rootState, commit }) {\n return new Promise((resolve, reject) => {\n rootState.auth.client.api.get('/providers')\n .then(response => {\n commit(ADD_PROVIDERS, response.data);\n resolve();\n })\n .catch(error => {\n console.error(`Could not get providers with error: ${error}`);\n reject();\n });\n });\n },\n /**\n * Get provider cache results for enabled providers.\n *\n * @param {*} context The store context.\n * @param {String} The provider id.\n * @returns {void}.\n */\n async getProviderCacheResults({ rootState, commit, state }, { showSlug, season, episode }) {\n const limit = 1000;\n const params = { limit, showslug: showSlug, season };\n if (episode) {\n params.episode = episode;\n }\n\n const getProviderResults = async provider => {\n let page = 0;\n let lastPage = false;\n const results = [];\n\n const currentProvider = state.providers.find(prov => prov.id === provider.id);\n if (!currentProvider) {\n return results;\n }\n\n const { id: providerId } = currentProvider;\n\n page = 0;\n lastPage = false;\n\n while (!lastPage) {\n let response = null;\n page += 1;\n\n params.page = page;\n\n try {\n response = await rootState.auth.client.api.get(`/providers/${providerId}/results`, { params }); // eslint-disable-line no-await-in-loop\n } catch (error) {\n if (error.response && error.response.status === 404) {\n console.debug(`No results available for provider ${provider.name}`);\n }\n\n lastPage = true;\n }\n\n if (response) {\n commit(ADD_PROVIDER_CACHE, { providerId, cache: response.data });\n results.push(...response.data);\n\n if (response.data.length < limit) {\n lastPage = true;\n }\n } else {\n lastPage = true;\n }\n }\n return results;\n };\n\n const result = {\n providersSearched: 0,\n totalSearchResults: []\n };\n\n for (const provider of state.providers) {\n if (!provider.config.enabled) {\n continue;\n }\n\n result.providersSearched += 1;\n const providerResults = await getProviderResults(provider); // eslint-disable-line no-await-in-loop\n result.totalSearchResults.push(...providerResults);\n }\n\n return result;\n },\n /**\n * Get provider cache results for enabled providers.\n *\n * @param {*} {commit} Destructured commit object.\n * @param {Object} searchResult - Search result.\n * @returns {void}.\n */\n addManualSearchResult({ commit }, searchResult) {\n commit(ADD_SEARCH_RESULTS, [searchResult]);\n }\n\n};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","import Vue from 'vue';\nimport {\n ADD_RECOMMENDED_SHOW,\n SET_RECOMMENDED_SHOWS,\n SET_RECOMMENDED_SHOWS_TRAKT_REMOVED,\n SET_RECOMMENDED_SHOWS_CATEGORIES\n} from '../mutation-types';\n\nconst IMDB = 10;\nconst ANIDB = 11;\nconst TRAKT = 12;\nconst ANILIST = 13;\nconst ALL = -1;\n\nconst state = {\n limit: 1000,\n page: {\n [IMDB]: 1,\n [ANIDB]: 1,\n [TRAKT]: 1,\n [ANILIST]: 1,\n [ALL]: 1\n },\n shows: [],\n trakt: {\n removedFromMedusa: [],\n blacklistEnabled: false,\n availableLists: []\n },\n categories: {},\n externals: {\n IMDB,\n ANIDB,\n TRAKT,\n ANILIST\n },\n sourceToString: {\n [IMDB]: 'imdb',\n [ANIDB]: 'anidb',\n [TRAKT]: 'trakt',\n [ANILIST]: 'anilist'\n }\n};\n\nconst mutations = {\n [ADD_RECOMMENDED_SHOW](state, show) {\n const existingShow = state.shows.find(({ seriesId, source }) => Number(show.seriesId[show.source]) === Number(seriesId[source]));\n\n if (!existingShow) {\n console.debug(`Adding ${show.title || show.source + String(show.seriesId)} as it wasn't found in the shows array`, show);\n state.shows.push(show);\n return;\n }\n\n // Merge new recommended show object over old one\n // this allows detailed queries to update the record\n // without the non-detailed removing the extra data\n console.debug(`Found ${show.title || show.source + String(show.seriesId)} in shows array attempting merge`);\n const newShow = {\n ...existingShow,\n ...show\n };\n\n // Update state\n Vue.set(state.shows, state.shows.indexOf(existingShow), newShow);\n console.debug(`Merged ${newShow.title || newShow.source + String(newShow.seriesId)}`, newShow);\n },\n [SET_RECOMMENDED_SHOWS](state, { shows, source }) {\n if (shows.length < state.limit) {\n state.page[source] = -1;\n }\n state.shows = [...state.shows, ...shows];\n },\n [SET_RECOMMENDED_SHOWS_TRAKT_REMOVED](state, data) {\n state.trakt.removedFromMedusa = data.removedFromMedusa;\n state.trakt.blacklistEnabled = data.blacklistEnabled;\n state.trakt.availableLists = data.availableLists;\n },\n [SET_RECOMMENDED_SHOWS_CATEGORIES](state, data) {\n state.categories = data;\n },\n increasePage(state, source) {\n state.page[source] += 1;\n },\n resetPage(state, source) {\n state.page[source] = 1;\n }\n};\n\nconst getters = {};\n\nconst actions = {\n /**\n * Get recommended shows from API and commit them to the store.\n *\n * @param {*} context - The store context.\n * @param {String} source - Identifier for the recommended shows list.\n * @returns {(undefined|Promise)} undefined if `shows` was provided or the API response if not.\n */\n getRecommendedShows({ rootState, state, commit }, source) {\n if (state.page[source] === -1) {\n return;\n }\n const identifier = source ? state.sourceToString[source] : '';\n const { page } = state;\n return rootState.auth.client.api.get(`/recommended/${identifier}?page=${page[source]}&limit=${state.limit}`, { timeout: 90000 })\n .then(response => {\n commit(SET_RECOMMENDED_SHOWS, { shows: response.data, source });\n });\n },\n getRecommendedShowsOptions({ rootState, commit }) {\n rootState.auth.client.api.get('/recommended/trakt/removed', { timeout: 60000 })\n .then(response => {\n commit(SET_RECOMMENDED_SHOWS_TRAKT_REMOVED, response.data);\n });\n rootState.auth.client.api.get('/recommended/categories', { timeout: 60000 })\n .then(response => {\n commit(SET_RECOMMENDED_SHOWS_CATEGORIES, response.data);\n });\n },\n /**\n * Get more recommended shows from the paginated api.\n *\n * This method is triggered through a manual user interaction,\n * clicking on a \"Get More\" button.\n *\n * @param {*} param - Commit and dispatch.\n * @param {*} source - Get a specific source (imdb, trakt, all, ..)\n * @returns {Promise} - A promise from the getRecommendedShows method.\n */\n getMoreShows({ commit, dispatch }, source) {\n commit('increasePage', source);\n return dispatch('getRecommendedShows', source);\n }\n};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","import Vue from 'vue';\nimport {\n ADD_SHOW,\n ADD_SHOW_QUEUE_ITEM,\n ADD_SHOW_CONFIG,\n ADD_SHOWS,\n ADD_SHOW_CONFIG_TEMPLATE,\n ADD_SHOW_EPISODE,\n ADD_SHOW_SCENE_EXCEPTION,\n REMOVE_SHOW_SCENE_EXCEPTION,\n REMOVE_SHOW,\n REMOVE_SHOW_CONFIG_TEMPLATE\n} from '../mutation-types';\n\n/**\n * @typedef {object} ShowIdentifier\n * @property {string} indexer The indexer name (e.g. `tvdb`)\n * @property {number} id The show ID on the indexer (e.g. `12345`)\n */\n\nconst state = {\n shows: [],\n currentShow: {\n showSlug: null\n },\n loading: {\n total: null,\n current: null,\n display: false,\n finished: false\n },\n queueitems: []\n};\n\nconst mutations = {\n [ADD_SHOW](state, show) {\n const existingShow = state.shows.find(({ id, indexer }) => Number(show.id[show.indexer]) === Number(id[indexer]));\n\n if (!existingShow) {\n console.debug(`Adding ${show.title || show.indexer + String(show.id)} as it wasn't found in the shows array`, show);\n state.shows.push(show);\n return;\n }\n\n // Merge new show object over old one\n // this allows detailed queries to update the record\n // without the non-detailed removing the extra data\n console.debug(`Found ${show.title || show.indexer + String(show.id)} in shows array attempting merge`);\n const newShow = {\n ...existingShow,\n ...show\n };\n\n // Repair the searchTemplates\n newShow.config.searchTemplates = show.config.searchTemplates ? show.config.searchTemplates : existingShow.config.searchTemplates;\n\n // Update state\n Vue.set(state.shows, state.shows.indexOf(existingShow), newShow);\n console.debug(`Merged ${newShow.title || newShow.indexer + String(newShow.id)}`, newShow);\n },\n [ADD_SHOWS](state, shows) {\n // If the show is already available, we only want to merge values\n const mergedShows = [];\n for (const newShow of shows) {\n const existing = state.shows.find(stateShow => stateShow.id.slug === newShow.id.slug);\n if (existing) {\n const {\n sceneAbsoluteNumbering,\n xemAbsoluteNumbering,\n sceneNumbering,\n ...showWithoutDetailed\n } = newShow;\n\n // Repair searchTemplates.\n const mergedShow = { ...existing, ...showWithoutDetailed };\n mergedShow.config.searchTemplates = showWithoutDetailed.config.searchTemplates ? showWithoutDetailed.config.searchTemplates : existing.config.searchTemplates;\n\n mergedShows.push(mergedShow);\n } else {\n mergedShows.push(newShow);\n }\n }\n state.shows = mergedShows;\n console.debug(`Added ${shows.length} shows to store`);\n },\n [ADD_SHOW_CONFIG](state, { show, config }) {\n const existingShow = state.shows.find(({ id, indexer }) => Number(show.id[show.indexer]) === Number(id[indexer]));\n existingShow.config = { ...existingShow.config, ...config };\n },\n currentShow(state, showSlug) {\n state.currentShow.showSlug = showSlug;\n },\n setLoadingTotal(state, total) {\n state.loading.total = total;\n },\n setLoadingCurrent(state, current) {\n state.loading.current = current;\n },\n updateLoadingCurrent(state, current) {\n state.loading.current += current;\n },\n setLoadingDisplay(state, display) {\n state.loading.display = display;\n },\n setLoadingFinished(state, finished) {\n state.loading.finished = finished;\n },\n [ADD_SHOW_EPISODE](state, { show, episodes }) {\n // Creating a new show object (from the state one) as we want to trigger a store update\n const newShow = Object.assign({}, state.shows.find(({ id, indexer }) => Number(show.id[show.indexer]) === Number(id[indexer])));\n\n if (!newShow.seasons) {\n newShow.seasons = [];\n }\n\n // Recreate an Array with season objects, with each season having an episodes array.\n // This format is used by vue-good-table (displayShow).\n episodes.forEach(episode => {\n let existingSeason = newShow.seasons.find(season => season.season === episode.season);\n\n if (existingSeason) {\n // Shallow copy\n existingSeason = { ...existingSeason };\n\n const foundIndex = existingSeason.children.findIndex(element => element.slug === episode.slug);\n if (foundIndex === -1) {\n existingSeason.children.push(episode);\n } else {\n existingSeason.children.splice(foundIndex, 1, episode);\n }\n } else {\n const newSeason = {\n season: episode.season,\n children: [],\n html: false,\n mode: 'span',\n label: 1\n };\n newShow.seasons.push(newSeason);\n newSeason.children.push(episode);\n }\n });\n\n // Update state\n const existingShow = state.shows.find(({ id, indexer }) => Number(show.id[show.indexer]) === Number(id[indexer]));\n Vue.set(state.shows, state.shows.indexOf(existingShow), newShow);\n console.log(`Storing episodes for show ${newShow.title} seasons: ${[...new Set(episodes.map(episode => episode.season))].join(', ')}`);\n },\n [ADD_SHOW_SCENE_EXCEPTION](state, { show, exception }) {\n // Get current show object\n const currentShow = Object.assign({}, state.shows.find(({ id, indexer }) => Number(show.id[show.indexer]) === Number(id[indexer])));\n\n if (currentShow.config.aliases.find(e => e.title === exception.title && e.season === exception.season)) {\n console.warn(`Can't add exception ${exception.title} with season ${exception.season} to show ${currentShow.title} as it already exists.`);\n return;\n }\n\n currentShow.config.aliases.push(exception);\n },\n [REMOVE_SHOW_SCENE_EXCEPTION](state, { show, exception }) {\n // Get current show object\n const currentShow = Object.assign({}, state.shows.find(({ id, indexer }) => Number(show.id[show.indexer]) === Number(id[indexer])));\n\n if (!currentShow.config.aliases.find(e => e.title === exception.title && e.season === exception.season)) {\n console.warn(`Can't remove exception ${exception.title} with season ${exception.season} to show ${currentShow.title} as it does not exist.`);\n return;\n }\n\n currentShow.config.aliases.splice(currentShow.config.aliases.indexOf(exception), 1);\n },\n [ADD_SHOW_QUEUE_ITEM](state, queueItem) {\n const existingQueueItem = state.queueitems.find(item => item.identifier === queueItem.identifier);\n\n if (existingQueueItem) {\n Vue.set(state.queueitems, state.queueitems.indexOf(existingQueueItem), { ...existingQueueItem, ...queueItem });\n } else {\n Vue.set(state.queueitems, state.queueitems.length, queueItem);\n }\n },\n [ADD_SHOW_CONFIG_TEMPLATE](state, { show, template }) {\n // Get current show object\n const currentShow = Object.assign({}, state.shows.find(({ id, indexer }) => Number(show.id[show.indexer]) === Number(id[indexer])));\n\n if (currentShow.config.searchTemplates.find(t => t.template === template.pattern)) {\n console.warn(`Can't add template (${template.pattern} to show ${currentShow.title} as it already exists.`);\n return;\n }\n\n currentShow.config.searchTemplates.push(template);\n },\n [REMOVE_SHOW_CONFIG_TEMPLATE](state, { show, template }) {\n // Get current show object\n const currentShow = Object.assign({}, state.shows.find(({ id, indexer }) => Number(show.id[show.indexer]) === Number(id[indexer])));\n\n if (template.id) {\n currentShow.config.searchTemplates = currentShow.config.searchTemplates.filter(\n t => t.id !== template.id\n );\n return;\n }\n\n currentShow.config.searchTemplates = currentShow.config.searchTemplates.filter(\n t => !(t.title === template.title && t.season === template.season && t.template === template.template)\n );\n },\n [REMOVE_SHOW](state, removedShow) {\n state.shows = state.shows.filter(existingShow => removedShow.id.slug !== existingShow.id.slug);\n },\n loadShowsFromStore(state, namespace) {\n // Check if the ID exists\n // Update (namespaced) localStorage\n if (localStorage.getItem('shows')) {\n Vue.set(state, 'shows', JSON.parse(localStorage.getItem(`${namespace}shows`)));\n }\n }\n};\n\nconst getters = {\n getShowById: state => {\n /**\n * Get a show from the loaded shows state, identified by show slug.\n *\n * @param {string} showSlug Show identifier.\n * @returns {object|undefined} Show object or undefined if not found.\n */\n const getShowById = showSlug => state.shows.find(show => show.id.slug === showSlug);\n return getShowById;\n },\n getShowByTitle: state => title => state.shows.find(show => show.title === title),\n getSeason: state => ({ showSlug, season }) => {\n const show = state.shows.find(show => show.id.slug === showSlug);\n return show && show.seasons ? show.seasons[season] : undefined;\n },\n getEpisode: state => ({ showSlug, season, episode }) => {\n const show = state.shows.find(show => show.id.slug === showSlug);\n return show && show.seasons && show.seasons.find(s => s.season === season) ? show.seasons.find(s => s.season === season).children.find(ep => ep.episode === episode) : undefined;\n },\n getCurrentShow: (state, _, rootState) => {\n return state.shows.find(show => show.id.slug === state.currentShow.showSlug) || rootState.defaults.show;\n },\n getShowIndexerUrl: (state, getters, rootState) => show => {\n const indexerConfig = rootState.config.indexers.indexers;\n if (!show.indexer || !indexerConfig[show.indexer]) {\n return;\n }\n\n const id = show.id[show.indexer];\n const indexerUrl = indexerConfig[show.indexer].showUrl;\n\n if (show.indexer === 'imdb') {\n return `${indexerUrl}${String(id).padStart(7, '0')}`;\n }\n return `${indexerUrl}${id}`;\n },\n showsWithStats: (state, getters, rootState) => {\n if (!state.shows) {\n return [];\n }\n\n return state.shows.map(show => {\n let showStats = rootState.stats.show.stats.find(stat => stat.indexerId === getters.indexerNameToId(show.indexer) && stat.seriesId === show.id[show.indexer]);\n const newLine = '\\u000D';\n let text = 'Unaired';\n let title = '';\n\n if (!showStats) {\n showStats = {\n epDownloaded: 0,\n epSnatched: 0,\n epTotal: 0,\n seriesSize: 0\n };\n }\n\n if (showStats.epTotal >= 1) {\n text = showStats.epDownloaded;\n title = `Downloaded: ${showStats.epDownloaded}`;\n\n if (showStats.epSnatched) {\n text += `+${showStats.epSnatched}`;\n title += `${newLine}Snatched: ${showStats.epSnatched}`;\n }\n\n text += ` / ${showStats.epTotal}`;\n title += `${newLine}Total: ${showStats.epTotal}`;\n }\n\n show.stats = {\n episodes: {\n total: showStats.epTotal,\n snatched: showStats.epSnatched,\n downloaded: showStats.epDownloaded,\n size: showStats.seriesSize\n },\n tooltip: {\n text,\n title,\n percentage: (showStats.epDownloaded * 100) / (showStats.epTotal || 1)\n }\n };\n return show;\n });\n },\n showsInLists: (state, getters, rootState) => {\n const { layout, general } = rootState.config;\n const { show } = layout;\n const { showListOrder } = show;\n const { rootDirs } = general;\n const { selectedRootIndex, local } = layout;\n const { showFilterByName } = local;\n\n const { showsWithStats } = getters;\n\n let shows = null;\n\n // Filter root dirs\n shows = showsWithStats.filter(show => selectedRootIndex === -1 || show.config.location.includes(rootDirs.slice(1)[selectedRootIndex]));\n\n // Filter by text for the banner, simple and smallposter layouts.\n // The Poster layout uses vue-isotope and this does not respond well to changes to the `list` property.\n if (layout.home !== 'poster') {\n shows = shows.filter(show => show.title.toLowerCase().includes(showFilterByName.toLowerCase()));\n }\n\n const categorizedShows = showListOrder.filter(\n listTitle => shows.filter(\n show => show.config.showLists.map(\n list => list.toLowerCase()\n ).includes(listTitle.toLowerCase())\n ).length > 0\n ).map(\n listTitle => ({ listTitle, shows: shows.filter(\n show => show.config.showLists.map(list => list.toLowerCase()).includes(listTitle.toLowerCase())\n ) })\n );\n\n // Check for shows that are not in any category anymore\n const uncategorizedShows = shows.filter(show => {\n return show.config.showLists.map(item => {\n return showListOrder.map(list => list.toLowerCase()).includes(item.toLowerCase());\n }).every(item => !item);\n });\n\n if (uncategorizedShows.length > 0) {\n categorizedShows.push({ listTitle: 'uncategorized', shows: uncategorizedShows });\n }\n\n if (categorizedShows.length === 0 && uncategorizedShows.length === 0) {\n categorizedShows.push({ listTitle: 'Series', shows: [] });\n }\n\n return categorizedShows;\n }\n};\n\n/**\n * An object representing request parameters for getting a show from the API.\n *\n * @typedef {object} ShowGetParameters\n * @property {boolean} detailed Fetch detailed information? (e.g. scene/xem numbering)\n * @property {boolean} episodes Fetch seasons & episodes?\n */\n\nconst actions = {\n /**\n * Get show from API and commit it to the store.\n *\n * @param {*} context The store context.\n * @param {ShowIdentifier&ShowGetParameters} parameters Request parameters.\n * @returns {Promise} The API response.\n */\n getShow({ rootState, commit }, { showSlug, detailed, episodes }) {\n return new Promise((resolve, reject) => {\n const params = {};\n let timeout = 30000;\n\n if (detailed !== undefined) {\n params.detailed = detailed;\n timeout = 60000;\n timeout = 60000;\n }\n\n if (episodes !== undefined) {\n params.episodes = episodes;\n timeout = 60000;\n }\n\n rootState.auth.client.api.get(`/series/${showSlug}`, { params, timeout })\n .then(res => {\n commit(ADD_SHOW, res.data);\n resolve(res.data);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n /**\n * Get episdoes for a specified show from API and commit it to the store.\n *\n * @param {*} context - The store context.\n * @param {ShowParameteres} parameters - Request parameters.\n * @returns {Promise} The API response.\n */\n getEpisodes({ rootState, commit, getters }, { showSlug, season }) {\n return new Promise((resolve, reject) => {\n const { getShowById } = getters;\n const show = getShowById(showSlug);\n\n const limit = 1000;\n const params = {\n limit\n };\n\n if (season !== undefined) {\n params.season = season;\n }\n\n // Get episodes\n rootState.auth.client.api.get(`/series/${showSlug}/episodes`, { params })\n .then(response => {\n commit(ADD_SHOW_EPISODE, { show, episodes: response.data });\n resolve();\n })\n .catch(error => {\n console.log(`Could not retrieve a episodes for show ${showSlug}, error: ${error}`);\n reject(error);\n });\n });\n },\n /**\n * Get shows from API and commit them to the store.\n *\n * @param {*} context - The store context.\n * @param {(ShowIdentifier&ShowGetParameters)[]} shows Shows to get. If not provided, gets the first 1k shows.\n * @returns {undefined|Promise} undefined if `shows` was provided or the API response if not.\n */\n getShows(context, shows) {\n const { commit, dispatch, state, rootState } = context;\n\n // If no shows are provided get the first 1000\n if (shows) {\n // Return a specific show list. (not used afaik).\n return shows.forEach(show => dispatch('getShow', show));\n }\n\n return new Promise((resolve, _) => {\n // Loading new shows, commit show loading information to state.\n commit('setLoadingTotal', 0);\n commit('setLoadingCurrent', 0);\n commit('setLoadingDisplay', true);\n\n const limit = 1000;\n const page = 1;\n const params = {\n limit,\n page\n };\n\n const pageRequests = [];\n const newShows = [];\n\n // Get first page\n pageRequests.push(rootState.auth.client.api.get('/series', { params })\n .then(response => {\n commit('setLoadingTotal', Number(response.headers['x-pagination-count']));\n const totalPages = Number(response.headers['x-pagination-total']);\n\n newShows.push(...response.data);\n\n commit('updateLoadingCurrent', response.data.length);\n\n // Optionally get additional pages\n for (let page = 2; page <= totalPages; page++) {\n pageRequests.push(new Promise((resolve, reject) => {\n const newPage = { page };\n newPage.limit = params.limit;\n return rootState.auth.client.api.get('/series', { params: newPage })\n .then(response => {\n newShows.push(...response.data);\n commit('updateLoadingCurrent', response.data.length);\n resolve();\n })\n .catch(error => {\n reject(error);\n });\n }));\n }\n })\n .catch(() => {\n console.log('Could not retrieve a list of shows');\n })\n .finally(() => {\n Promise.all(pageRequests)\n .then(() => {\n // Commit all the found shows to store.\n commit(ADD_SHOWS, newShows);\n\n // Update (namespaced) localStorage\n const namespace = rootState.config.system.webRoot ? `${rootState.config.system.webRoot}_` : '';\n try {\n localStorage.setItem(`${namespace}shows`, JSON.stringify(state.shows));\n } catch (error) {\n console.warn(error);\n }\n resolve();\n });\n })\n );\n });\n },\n setShow({ rootState }, { showSlug, data }) {\n // Update show, updated show will arrive over a WebSocket message\n return rootState.auth.client.api.patch(`series/${showSlug}`, data);\n },\n updateShow(context, show) {\n // Update local store\n const { commit } = context;\n return commit(ADD_SHOW, show);\n },\n addSceneException(context, { show, exception }) {\n const { commit } = context;\n commit(ADD_SHOW_SCENE_EXCEPTION, { show, exception });\n },\n removeSceneException(context, { show, exception }) {\n const { commit } = context;\n commit(REMOVE_SHOW_SCENE_EXCEPTION, { show, exception });\n },\n setCurrentShow(context, showSlug) {\n return new Promise(resolve => {\n // Set current show\n const { commit } = context;\n commit('currentShow', showSlug);\n resolve();\n });\n },\n setShowConfig(context, { show, config }) {\n const { commit } = context;\n commit(ADD_SHOW_CONFIG, { show, config });\n },\n removeShow({ commit, rootState, state }, show) {\n // Remove the show from store and localStorage (provided through websocket)\n commit(REMOVE_SHOW, show);\n\n // Update recentShows.\n rootState.config.general.recentShows = rootState.config.general.recentShows.filter(\n recentShow => recentShow.showSlug !== show.id.slug\n );\n const config = {\n recentShows: rootState.config.general.recentShows\n };\n rootState.auth.client.api.patch('config/main', config);\n\n // Update (namespaced) localStorage\n const namespace = rootState.config.system.webRoot ? `${rootState.config.system.webRoot}_` : '';\n try {\n localStorage.setItem(`${namespace}shows`, JSON.stringify(state.shows));\n } catch (error) {\n console.warn(error);\n }\n },\n updateShowQueueItem(context, queueItem) {\n // Update store's search queue item. (provided through websocket)\n const { commit } = context;\n return commit(ADD_SHOW_QUEUE_ITEM, queueItem);\n },\n addSearchTemplate({ rootState, getters, commit }, { show, template }) {\n commit(ADD_SHOW_CONFIG_TEMPLATE, { show, template });\n const data = {\n config: {\n searchTemplates: getters.getCurrentShow.config.searchTemplates\n }\n };\n return rootState.auth.client.api.patch(`series/${show.indexer}${show.id[show.indexer]}`, data);\n },\n removeSearchTemplate({ rootState, getters, commit }, { show, template }) {\n commit(REMOVE_SHOW_CONFIG_TEMPLATE, { show, template });\n const data = {\n config: {\n searchTemplates: getters.getCurrentShow.config.searchTemplates\n }\n };\n return rootState.auth.client.api.patch(`series/${show.indexer}${show.id[show.indexer]}`, data);\n },\n initShowsFromLocalStorage({ rootState, commit }) {\n const namespace = rootState.config.system.webRoot ? `${rootState.config.system.webRoot}_` : '';\n return commit('loadShowsFromStore', namespace);\n },\n updateEpisode({ state, commit }, episode) {\n const show = state.shows.find(({ id }) => id.slug === episode.showSlug);\n commit(ADD_SHOW_EPISODE, { show, episodes: [episode] });\n }\n};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","import { ADD_SCHEDULE } from '../mutation-types';\n\nconst state = {\n categories: ['later', 'missed', 'soon', 'today'],\n later: [],\n missed: [],\n soon: [],\n today: [],\n displayCategory: {\n later: false,\n missed: false,\n soon: true,\n today: true\n }\n};\n\nconst mutations = {\n [ADD_SCHEDULE](state, schedule) {\n for (const category in schedule) { // eslint-disable-line guard-for-in\n state[category] = schedule[category];\n }\n },\n setDisplayCategory(state, { category, value }) {\n state.displayCategory[category] = value;\n }\n};\n\nconst getters = {\n getScheduleFlattened: state => {\n const flattendedSchedule = [];\n const { categories, displayCategory } = state;\n for (const category of categories) {\n if (!displayCategory[category]) {\n continue;\n }\n\n const episodes = state[category];\n for (const episode of episodes) {\n episode.class = category;\n }\n flattendedSchedule.push(...episodes);\n }\n return flattendedSchedule;\n },\n /**\n * Group the coming episodes into an array of objects with an attibute header (the week day)\n * and an attribute episodes with an array of coming episodes.\n * @param {object} state - local state object.\n * @param {object} getters - local getters object.\n * @param {object} rootState - root state object.\n * @returns {array} - Array of grouped episodes by header.\n */\n groupedSchedule: (state, getters, rootState) => {\n const { missed, soon, today, later, displayCategory } = state;\n const { displayPaused } = rootState.config.layout.comingEps;\n\n const days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];\n\n /* Return an array of the days to come */\n const comingDays = (currentDay, nrComingDays) => {\n let currentDayOfTheWeek = currentDay.getDay();\n const returnDays = [];\n for (let i = 0; i < nrComingDays; i++) {\n if (currentDayOfTheWeek > 7) {\n currentDayOfTheWeek = 1;\n }\n returnDays.push(currentDayOfTheWeek);\n currentDayOfTheWeek += 1;\n }\n return returnDays;\n };\n\n const _MS_PER_DAY = 1000 * 60 * 60 * 24;\n\n // A and b are javascript Date objects\n function dateDiffInDays(a, b) {\n // Discard the time and time-zone information.\n const utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());\n const utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());\n\n return Math.floor((utc2 - utc1) / _MS_PER_DAY);\n }\n\n const newArray = [];\n const combinedEpisodes = [];\n\n if (displayCategory.missed) {\n combinedEpisodes.push(...missed);\n }\n\n if (displayCategory.today) {\n combinedEpisodes.push(...today);\n }\n\n if (displayCategory.soon) {\n combinedEpisodes.push(...soon);\n }\n\n if (displayCategory.later) {\n combinedEpisodes.push(...later);\n }\n\n const filteredEpisodes = combinedEpisodes.filter(item => !item.paused || displayPaused);\n if (filteredEpisodes.length === 0) {\n return [];\n }\n\n let currentDay = new Date(filteredEpisodes[0].airdate);\n\n // Group the coming episodes by day.\n for (const episode of filteredEpisodes) {\n // Calculate the gaps in the week, for which we don't have any scheduled shows.\n if (currentDay !== new Date(episode.airdate)) {\n const diffDays = dateDiffInDays(currentDay, new Date(episode.airdate));\n if (diffDays > 1) {\n let dayHeader = days[comingDays(currentDay, diffDays)[1] - 1];\n\n // Add the elipses if there is a wider gap then 1 day.\n if (diffDays > 2) {\n dayHeader = `${dayHeader} ...`;\n }\n\n newArray.push({\n header: dayHeader,\n class: 'soon',\n episodes: []\n });\n }\n }\n\n currentDay = new Date(episode.airdate);\n\n let weekDay = newArray.find(item => item.airdate === episode.airdate);\n if (!weekDay) {\n weekDay = {\n airdate: episode.airdate,\n header: days[episode.weekday],\n class: 'soon',\n episodes: []\n };\n newArray.push(weekDay);\n }\n\n episode.airsTime = episode.airs.split(' ').slice(-2).join(' ');\n weekDay.episodes.push(episode);\n }\n return newArray;\n },\n /**\n * Group and sort the coming episodes into an array of objects with an attibute header (the week day).\n * Group the coming episodes into groups of missed, today, soon (subgrouped per day) and later.\n * @param {object} state - local state object.\n * @param {object} getters - local getters object.\n * @param {object} rootState - root state object.\n * @returns {array} - Array of grouped episodes by header.\n */\n sortedSchedule: (state, getters, rootState) => sort => {\n const {\n displayCategory,\n missed, today, soon, later\n } = state;\n const { displayPaused } = rootState.config.layout.comingEps;\n const days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];\n const newArray = [];\n\n if (sort === 'date') {\n if (displayCategory.missed) {\n // Group missed episodes (one group)\n newArray.push({\n header: 'missed',\n class: 'missed',\n episodes: missed.filter(item => !item.paused || displayPaused)\n });\n }\n\n if (displayCategory.today) {\n // Group missed episodes (one group)\n newArray.push({\n header: 'today',\n class: 'today',\n episodes: today.filter(item => !item.paused || displayPaused)\n });\n }\n\n if (displayCategory.soon) {\n // Group the coming episodes by day.\n for (const episode of soon.filter(item => !item.paused || displayPaused)) {\n let weekDay = newArray.find(item => item.header === days[episode.weekday]);\n if (!weekDay) {\n weekDay = {\n header: days[episode.weekday],\n class: 'soon',\n episodes: []\n };\n newArray.push(weekDay);\n }\n weekDay.episodes.push(episode);\n }\n }\n\n if (displayCategory.later) {\n // Group later episodes (one group)\n newArray.push({\n header: 'later',\n class: 'later',\n episodes: later.filter(item => !item.paused || displayPaused)\n });\n }\n return newArray;\n }\n\n if (sort === 'network') {\n const { getScheduleFlattened } = getters;\n const filteredSchedule = getScheduleFlattened.filter(item => !item.paused || displayPaused);\n\n for (const episode of filteredSchedule.sort((a, b) => a.network.localeCompare(b.network))) {\n let network = newArray.find(item => item.header === episode.network);\n if (!network) {\n network = {\n header: episode.network,\n class: episode.class,\n episodes: []\n };\n newArray.push(network);\n }\n network.episodes.push(episode);\n }\n return newArray;\n }\n }\n};\n\n/**\n * An object representing request parameters for getting a show from the API.\n *\n * @typedef {object} ShowGetParameters\n * @property {boolean} detailed Fetch detailed information? (e.g. scene/xem numbering)\n * @property {boolean} episodes Fetch seasons & episodes?\n */\n\nconst actions = {\n /**\n * Get show schedule from API and commit it to the store.\n *\n * @param {*} context The store context.\n * @param {ShowIdentifier&ShowGetParameters} parameters Request parameters.\n * @returns {Promise} The API response.\n */\n async getSchedule({ rootState, commit, state }) {\n const params = {\n category: state.categories,\n paused: true\n };\n const response = await rootState.auth.client.api.get('/schedule', { params });\n if (response.data) {\n commit(ADD_SCHEDULE, response.data);\n }\n }\n};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","import {\n SOCKET_ONOPEN,\n SOCKET_ONCLOSE,\n SOCKET_ONERROR,\n SOCKET_ONMESSAGE,\n SOCKET_RECONNECT,\n SOCKET_RECONNECT_ERROR\n} from '../mutation-types';\n\nconst state = {\n isConnected: false,\n // Current message\n message: {},\n // Delivered messages for this session\n messages: [],\n reconnectError: false\n};\n\nconst mutations = {\n [SOCKET_ONOPEN](state) {\n state.isConnected = true;\n },\n [SOCKET_ONCLOSE](state) {\n state.isConnected = false;\n },\n [SOCKET_ONERROR](state, event) {\n console.error(state, event);\n },\n // Default handler called for all websocket methods\n [SOCKET_ONMESSAGE](state, message) {\n const { data, event } = message;\n\n // Set the current message\n state.message = message;\n\n if (event === 'notification') {\n // Save it so we can look it up later\n const existingMessage = state.messages.filter(message => message.hash === data.hash);\n if (existingMessage.length === 1) {\n state.messages[state.messages.indexOf(existingMessage)] = message;\n } else {\n state.messages.push(message);\n }\n }\n },\n // Mutations for websocket reconnect methods\n [SOCKET_RECONNECT](state, count) {\n console.info(state, count);\n },\n [SOCKET_RECONNECT_ERROR](state) {\n state.reconnectError = true;\n\n const title = 'Error connecting to websocket';\n let error = '';\n error += 'Please check your network connection. ';\n error += 'If you are using a reverse proxy, please take a look at our wiki for config examples.';\n\n window.displayNotification('notice', title, error);\n }\n};\n\nconst getters = {};\n\nconst actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","import { ADD_STATS, SET_STATS, SET_MAX_DOWNLOAD_COUNT } from '../mutation-types';\n\nconst state = {\n overall: {\n episodes: {\n downloaded: null,\n snatched: null,\n total: null\n },\n shows: {\n active: null,\n total: null\n }\n },\n show: {\n maxDownloadCount: 0,\n stats: []\n }\n};\n\nconst mutations = {\n [ADD_STATS](state, payload) {\n const { type, stats } = payload;\n state[type] = Object.assign(state[type], stats);\n },\n [SET_STATS](state, stats) {\n state.stats = stats;\n },\n [SET_MAX_DOWNLOAD_COUNT](state, downloadCount) {\n state.maxDownloadCount = downloadCount;\n }\n};\n\nconst getters = {};\n\nconst actions = {\n getStats({ rootState, commit }, type) {\n return rootState.auth.client.api.get(`/stats/${(type || '')}`).then(res => {\n commit(ADD_STATS, {\n type: (type || 'overall'),\n stats: res.data\n });\n });\n }\n};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","import { ADD_CONFIG, UPDATE_SHOWLIST_DEFAULT } from '../../mutation-types';\n\nconst state = {\n anidb: {\n enabled: false,\n username: null,\n password: null,\n useMylist: false\n },\n autoAnimeToList: false,\n showlistDefaultAnime: []\n};\n\nconst mutations = {\n [ADD_CONFIG](state, { section, config }) {\n if (section === 'anime') {\n state = Object.assign(state, config);\n }\n },\n [UPDATE_SHOWLIST_DEFAULT](state, value) {\n state.showlistDefaultAnime = value;\n }\n};\n\nconst getters = {};\n\nconst actions = {\n updateShowlistDefault(context, showlistDefaultAnime) {\n const { commit } = context;\n return commit(UPDATE_SHOWLIST_DEFAULT, showlistDefaultAnime);\n }\n};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","import { ADD_CONFIG } from '../../mutation-types';\n\nconst state = {\n torrents: {\n authType: null,\n dir: null,\n enabled: null,\n highBandwidth: null,\n host: null,\n label: null,\n labelAnime: null,\n method: null,\n path: null,\n paused: null,\n rpcUrl: null,\n seedLocation: null,\n seedTime: null,\n username: null,\n password: null,\n verifySSL: null,\n testStatus: 'Click below to test'\n },\n nzb: {\n enabled: null,\n method: null,\n nzbget: {\n category: null,\n categoryAnime: null,\n categoryAnimeBacklog: null,\n categoryBacklog: null,\n host: null,\n priority: null,\n useHttps: null,\n username: null,\n password: null\n },\n sabnzbd: {\n category: null,\n forced: null,\n categoryAnime: null,\n categoryBacklog: null,\n categoryAnimeBacklog: null,\n host: null,\n username: null,\n password: null,\n apiKey: null\n }\n }\n};\n\nconst mutations = {\n [ADD_CONFIG](state, { section, config }) {\n if (section === 'clients') {\n state = Object.assign(state, config);\n }\n }\n};\n\nconst getters = {};\n\nconst actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","import { ADD_CONFIG } from '../../mutation-types';\n\n/**\n * An object representing a split quality.\n *\n * @typedef {Object} Quality\n * @property {number[]} allowed - Allowed qualities\n * @property {number[]} preferred - Preferred qualities\n */\n\nconst state = {\n qualities: {\n values: [],\n anySets: [],\n presets: []\n },\n statuses: [],\n clientStatuses: []\n};\n\nconst mutations = {\n [ADD_CONFIG](state, { section, config }) {\n if (section === 'consts') {\n state = Object.assign(state, config);\n }\n }\n};\n\nconst getters = {\n // Get a quality object using a key or a value\n getQuality: state => ({ key, value }) => {\n if ([key, value].every(x => x === undefined) || [key, value].every(x => x !== undefined)) {\n throw new Error('Conflict in `getQuality`: Please provide either `key` or `value`.');\n }\n return state.qualities.values.find(quality => key === quality.key || value === quality.value);\n },\n // Get a quality any-set object using a key or a value\n getQualityAnySet: state => ({ key, value }) => {\n if ([key, value].every(x => x === undefined) || [key, value].every(x => x !== undefined)) {\n throw new Error('Conflict in `getQualityAnySet`: Please provide either `key` or `value`.');\n }\n return state.qualities.anySets.find(preset => key === preset.key || value === preset.value);\n },\n // Get a quality preset object using a key or a value\n getQualityPreset: state => ({ key, value }) => {\n if ([key, value].every(x => x === undefined) || [key, value].every(x => x !== undefined)) {\n throw new Error('Conflict in `getQualityPreset`: Please provide either `key` or `value`.');\n }\n return state.qualities.presets.find(preset => key === preset.key || value === preset.value);\n },\n // Get a status object using a key or a value\n getStatus: state => ({ key, value }) => {\n if ([key, value].every(x => x === undefined) || [key, value].every(x => x !== undefined)) {\n throw new Error('Conflict in `getStatus`: Please provide either `key` or `value`.');\n }\n return state.statuses.find(status => key === status.key || value === status.value);\n },\n /**\n * Get an episode overview status using the episode status and quality.\n *\n * @typedef {Object} - Episode status\n * @property {Object} quality - Episode quality\n * @property {Object} configQualities - Shows configured qualities (allowed and preferred)\n * @returns {String} The overview status\n */\n // eslint-disable-next-line no-unused-vars\n getOverviewStatus: _state => (status, quality, configQualities) => {\n if (['Unset', 'Unaired'].includes(status)) {\n return 'Unaired';\n }\n\n if (['Skipped', 'Ignored'].includes(status)) {\n return 'Skipped';\n }\n\n if (['Archived'].includes(status)) {\n return 'Preferred';\n }\n\n if (['Wanted', 'Failed'].includes(status)) {\n return 'Wanted';\n }\n\n if (['Snatched', 'Snatched (Proper)', 'Snatched (Best)'].includes(status)) {\n return 'Snatched';\n }\n\n if (['Downloaded'].includes(status)) {\n // Check if the show has been configured with only allowed qualities.\n if (configQualities.allowed.length > 0 && configQualities.preferred.length === 0) {\n // This is a hack, because technically the quality does not fit in the Preferred quality.\n // But because 'preferred' translates to the css color \"green\", we use it.\n if (configQualities.allowed.includes(quality)) {\n return 'Preferred';\n }\n }\n\n if (configQualities.preferred.includes(quality)) {\n return 'Preferred';\n }\n\n if (configQualities.allowed.includes(quality)) {\n return 'Allowed';\n }\n\n return 'Wanted';\n }\n\n return status;\n },\n splitQuality: state => {\n /**\n * Split a combined quality to allowed and preferred qualities.\n * Converted Python method from `medusa.common.Quality.split_quality`.\n *\n * @param {number} quality - The combined quality to split\n * @returns {Quality} The split quality\n */\n const _splitQuality = quality => {\n return state.qualities.values.reduce((result, { value }) => {\n quality >>>= 0; // Unsigned int\n if (value & quality) {\n result.allowed.push(value);\n }\n if ((value << 16) & quality) {\n result.preferred.push(value);\n }\n return result;\n }, { allowed: [], preferred: [] });\n };\n return _splitQuality;\n }\n};\n\nconst actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","import { ADD_CONFIG } from '../../mutation-types';\n\nconst state = {\n main: {\n externalMappings: {},\n statusMap: {},\n traktIndexers: {},\n validLanguages: [],\n langabbvToId: {},\n recommendedLists: {}\n },\n indexers: {\n tvdb: {\n apiParams: {\n useZip: null,\n language: null\n },\n baseUrl: null,\n enabled: null,\n icon: null,\n id: null,\n identifier: null,\n mappedTo: null,\n name: null,\n scene_loc: null, // eslint-disable-line camelcase\n showUrl: null,\n xemOrigin: null\n },\n tmdb: {\n apiParams: {\n useZip: null,\n language: null\n },\n baseUrl: null,\n enabled: null,\n icon: null,\n id: null,\n identifier: null,\n mappedTo: null,\n name: null,\n scene_loc: null, // eslint-disable-line camelcase\n showUrl: null,\n xemOrigin: null\n },\n tvmaze: {\n apiParams: {\n useZip: null,\n language: null\n },\n baseUrl: null,\n enabled: null,\n icon: null,\n id: null,\n identifier: null,\n mappedTo: null,\n name: null,\n scene_loc: null, // eslint-disable-line camelcase\n showUrl: null,\n xemOrigin: null\n },\n imdb: {\n apiParams: {\n useZip: null,\n language: null\n },\n baseUrl: null,\n enabled: null,\n icon: null,\n id: null,\n identifier: null,\n mappedTo: null,\n name: null,\n scene_loc: null, // eslint-disable-line camelcase\n showUrl: null,\n xemOrigin: null\n }\n }\n};\n\nconst mutations = {\n [ADD_CONFIG](state, { section, config }) {\n if (section === 'indexers') {\n state = Object.assign(state, config);\n }\n }\n};\n\nconst getters = {\n // Get an indexer's name using its ID.\n indexerIdToName: state => indexerId => {\n if (!indexerId) {\n return undefined;\n }\n const { indexers } = state;\n return Object.keys(indexers).find(name => indexers[name].id === Number.parseInt(indexerId, 10));\n },\n // Get an indexer's ID using its name.\n indexerNameToId: state => indexerName => {\n const { indexers } = state;\n if (!indexerName || !indexers) {\n return undefined;\n }\n return indexers[indexerName].id;\n },\n /**\n * Return the indexers showUrl.\n * @param {object} state - State object.\n * @returns {string|undefined} Indexers show url or undefined if not found.\n */\n getIndexer: state => indexerId => {\n return Object.values(state.indexers).find(indexer => indexer.id === indexerId);\n }\n};\n\nconst actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","import { ADD_CONFIG, UPDATE_LAYOUT_LOCAL } from '../../mutation-types';\nimport formatDate from 'date-fns/format';\nimport parseISO from 'date-fns/parseISO';\nimport TimeAgo from 'javascript-time-ago';\nimport en from 'javascript-time-ago/locale/en';\n\nimport { convertDateFormat, divmod } from '../../../utils/core';\n\n// Add locale-specific relative date/time formatting rules.\nTimeAgo.addDefaultLocale(en);\n\nconst state = {\n show: {\n specials: null,\n showListOrder: [],\n pagination: {\n enable: null\n }\n },\n home: null,\n selectedRootIndex: null,\n history: null,\n historyLimit: null,\n schedule: null,\n wide: null,\n timezoneDisplay: null,\n timeStyle: null,\n dateStyle: null,\n themeName: null,\n splitHomeInTabs: null,\n animeSplitHome: null,\n fanartBackground: null,\n fanartBackgroundOpacity: null,\n trimZero: null,\n sortArticle: null,\n fuzzyDating: null,\n comingEps: {\n missedRange: null,\n sort: null,\n displayPaused: null,\n layout: null\n },\n backlogOverview: {\n status: null,\n period: null\n },\n posterSortdir: null,\n posterSortby: null,\n // Local config store properties, are saved to.\n local: {\n showFilterByName: '',\n posterSize: 188,\n currentShowTab: null\n }\n};\n\nconst mutations = {\n [ADD_CONFIG](state, { section, config }) {\n if (section === 'layout') {\n state = Object.assign(state, config);\n }\n },\n [UPDATE_LAYOUT_LOCAL](state, local) {\n state.local = { ...state.local, ...local };\n }\n};\n\nconst getters = {\n fuzzyParseDateTime: state => (airDate, showSeconds = false) => {\n const timeAgo = new TimeAgo('en-US');\n const { dateStyle, fuzzyDating, timeStyle } = state;\n\n if (!airDate || !dateStyle) {\n return '';\n }\n\n if (fuzzyDating) {\n return timeAgo.format(new Date(airDate));\n }\n\n if (dateStyle === '%x') {\n return new Date(airDate).toLocaleString();\n }\n\n // Only the history page should show seconds.\n const formatTimeStyle = showSeconds ? timeStyle : timeStyle.replace(':%S', '');\n const fdate = parseISO(airDate);\n return formatDate(fdate, convertDateFormat(`${dateStyle} ${formatTimeStyle}`));\n },\n fuzzyParseTime: state => (airDate, showSeconds = false) => {\n const timeAgo = new TimeAgo('en-US');\n const { dateStyle, fuzzyDating, timeStyle } = state;\n\n if (!airDate || !dateStyle) {\n return '';\n }\n\n if (timeStyle === '%x') {\n return new Date(airDate).toLocaleTimeString();\n }\n\n if (fuzzyDating) {\n return timeAgo.format(new Date(airDate));\n }\n\n // Only the history page should show seconds.\n const formatTimeStyle = showSeconds ? timeStyle : timeStyle.replace(':%S', '');\n const fdate = parseISO(airDate);\n return formatDate(fdate, convertDateFormat(formatTimeStyle));\n },\n getShowFilterByName: state => {\n return state.local.showFilterByName;\n },\n /**\n * PrettyTimeDelta\n *\n * Translate seconds into a pretty hours, minutes, seconds representation.\n * @param {object} state - State object.\n * @returns {number} seconds - Number of seconds to translate.\n */\n prettyTimeDelta: state => seconds => { // eslint-disable-line no-unused-vars\n let signStr = '';\n if (seconds < 0) {\n signStr = '-';\n }\n\n let days = 0;\n let hours = 0;\n let minutes = 0;\n\n const daysSeconds = divmod(seconds, 86400);\n days = daysSeconds.quotient;\n seconds = daysSeconds.remainder;\n\n const hoursSeconds = divmod(seconds, 3600);\n hours = hoursSeconds.quotient;\n seconds = hoursSeconds.remainder;\n\n const minuteSeconds = divmod(seconds, 60);\n minutes = minuteSeconds.quotient;\n seconds = minuteSeconds.remainder;\n\n if (days > 0) {\n signStr += ` ${days}d`;\n }\n\n if (hours > 0) {\n signStr += ` ${hours}h`;\n }\n\n if (minutes > 0) {\n signStr += ` ${minutes}m`;\n }\n\n if (seconds > 0) {\n signStr += ` ${seconds}s`;\n }\n\n return signStr;\n }\n};\n\nconst actions = {\n setLayout({ rootState, commit }, { page, layout }) {\n // Don't wait for the api, just commit to store.\n commit(ADD_CONFIG, {\n section: 'layout', config: { [page]: layout }\n });\n\n return rootState.auth.client.api.patch('config/main', { layout: { [page]: layout } });\n },\n setTheme({ rootState, commit }, { themeName }) {\n return rootState.auth.client.api.patch('config/main', { layout: { themeName } })\n .then(() => {\n return commit(ADD_CONFIG, {\n section: 'layout', config: { themeName }\n });\n });\n },\n setSpecials({ rootState, commit, state }, specials) {\n const show = Object.assign({}, state.show);\n show.specials = specials;\n\n return rootState.auth.client.api.patch('config/main', { layout: { show } })\n .then(() => {\n return commit(ADD_CONFIG, {\n section: 'layout', config: { show }\n });\n });\n },\n setPosterSortBy({ rootState, commit }, { value }) {\n return rootState.auth.client.api.patch('config/main', { layout: { posterSortby: value } })\n .then(() => {\n return commit(ADD_CONFIG, {\n section: 'layout', config: { posterSortby: value }\n });\n });\n },\n setPosterSortDir({ rootState, commit }, { value }) {\n return rootState.auth.client.api.patch('config/main', { layout: { posterSortdir: value } })\n .then(() => {\n return commit(ADD_CONFIG, {\n section: 'layout', config: { posterSortdir: value }\n });\n });\n },\n setLayoutShow({ rootState, commit }, value) {\n return rootState.auth.client.api.patch('config/main', { layout: { show: value } })\n .then(() => {\n return commit(ADD_CONFIG, {\n section: 'layout', config: { show: value }\n });\n });\n },\n setStoreLayout({ rootState, commit }, { key, value }) {\n return rootState.auth.client.api.patch('config/main', { layout: { [key]: value } })\n .then(() => {\n return commit(ADD_CONFIG, {\n section: 'layout', config: { [key]: value }\n });\n });\n },\n setLayoutLocal(context, { key, value }) {\n const { commit } = context;\n return commit(UPDATE_LAYOUT_LOCAL, { [key]: value });\n },\n setBacklogOverview({ rootState, commit, state }, { key, value }) {\n const backlogOverview = { ...state.backlogOverview };\n backlogOverview[key] = value;\n commit(ADD_CONFIG, {\n section: 'layout', config: { backlogOverview }\n });\n return rootState.auth.client.api.patch('config/main', { layout: { backlogOverview } });\n }\n};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","import { ADD_CONFIG } from '../../mutation-types';\nimport { arrayUnique, arrayExclude } from '../../../utils/core';\n\nconst state = {\n addTitleWithYear: null,\n wikiUrl: null,\n donationsUrl: null,\n namingForceFolders: null,\n sourceUrl: null,\n rootDirs: [],\n brokenProviders: [],\n logs: {\n debug: null,\n dbDebug: null,\n loggingLevels: {},\n numErrors: null,\n numWarnings: null,\n actualLogDir: null,\n nr: null,\n size: null,\n subliminalLog: null,\n privacyLevel: null,\n custom: {}\n },\n cpuPreset: null,\n anonRedirect: null,\n recentShows: [],\n randomShowSlug: null, // @TODO: Recreate this in Vue when the webapp has a reliable list of shows to choose from.\n showDefaults: {\n status: null,\n statusAfter: null,\n quality: null,\n subtitles: null,\n seasonFolders: null,\n anime: null,\n scene: null,\n showLists: null\n },\n launchBrowser: null,\n defaultPage: null,\n trashRemoveShow: null,\n indexerDefaultLanguage: null,\n showUpdateHour: null,\n indexerTimeout: null,\n indexerDefault: null,\n plexFallBack: {\n enable: null,\n notifications: null,\n timeout: null\n },\n recommended: {\n cache: {\n shows: null,\n trakt: null,\n imdb: null,\n anidb: null,\n anilist: null,\n purgeAfterDays: null\n },\n trakt: {\n selectedLists: [],\n availableLists: []\n }\n },\n versionNotify: null,\n autoUpdate: null,\n updateFrequency: null,\n notifyOnUpdate: null,\n availableThemes: null,\n timePresets: [],\n datePresets: [],\n webInterface: {\n apiKey: null,\n log: null,\n username: null,\n password: null,\n port: null,\n host: null,\n notifyOnLogin: null,\n ipv6: null,\n httpsEnable: null,\n httpsCert: null,\n httpsKey: null,\n handleReverseProxy: null\n },\n sslVerify: null,\n sslCaBundle: null,\n noRestart: null,\n encryptionVersion: null,\n calendarUnprotected: null,\n calendarIcons: null,\n proxySetting: null,\n proxyProviders: null,\n proxyClients: null,\n proxyIndexers: null,\n proxyOthers: null,\n skipRemovedFiles: null,\n epDefaultDeletedStatus: null,\n developer: null,\n experimental: null,\n git: {\n username: null,\n password: null,\n token: null,\n authType: null,\n remote: null,\n path: null,\n org: null,\n reset: null,\n resetBranches: null,\n url: null\n },\n // Remove backlogOverview after manage_backlogOverview.mako is gone.\n backlogOverview: {\n status: null,\n period: null\n },\n // Remove themeName when we get fully rid of MEDUSA.config.\n themeName: null,\n providers: {\n prowlarr: {\n url: null,\n apikey: null\n }\n },\n backup: {\n cacheDb: null,\n cacheFiles: null\n }\n};\n\nconst mutations = {\n [ADD_CONFIG](state, { section, config }) {\n if (section === 'main') {\n state = Object.assign(state, config);\n }\n },\n addRecentShow(state, { show }) {\n state.recentShows = state.recentShows.filter(\n filterShow =>\n !(filterShow.showSlug === show.showSlug && filterShow.name === show.name)\n );\n\n state.recentShows.unshift(show); // Add the new show object to the start of the array.\n state.recentShows = state.recentShows.slice(0, 5); // Cut the array of at 5 items.\n },\n updateTraktSelectedLists(state, selectedLists) {\n state.recommended.trakt.selectedLists = selectedLists;\n }\n};\n\nconst getters = {\n effectiveIgnored: (state, _, rootState) => series => {\n const seriesIgnored = series.config.release.ignoredWords.map(x => x.toLowerCase());\n const globalIgnored = rootState.config.search.filters.ignored.map(x => x.toLowerCase());\n if (!series.config.release.ignoredWordsExclude) {\n return arrayUnique(globalIgnored.concat(seriesIgnored));\n }\n return arrayExclude(globalIgnored, seriesIgnored);\n },\n effectiveRequired: (state, _, rootState) => series => {\n const seriesRequired = series.config.release.requiredWords.map(x => x.toLowerCase());\n const globalRequired = rootState.config.search.filters.required.map(x => x.toLowerCase());\n if (!series.config.release.requiredWordsExclude) {\n return arrayUnique(globalRequired.concat(seriesRequired));\n }\n return arrayExclude(globalRequired, seriesRequired);\n }\n};\n\nconst actions = {\n getConfig({ rootState, commit }, section) {\n return rootState.auth.client.api.get('/config/' + (section || '')).then(res => {\n if (section) {\n const config = res.data;\n commit(ADD_CONFIG, { section, config });\n return config;\n }\n\n const sections = res.data;\n Object.keys(sections).forEach(section => {\n const config = sections[section];\n commit(ADD_CONFIG, { section, config });\n });\n return sections;\n });\n },\n setConfig({ rootState }, { section, config }) {\n return rootState.auth.client.api.patch(`config/${section}`, config);\n },\n updateConfig({ commit }, { section, config }) {\n return commit(ADD_CONFIG, { section, config });\n },\n getApiKey({ rootState, commit }) {\n const section = 'main';\n const config = { webInterface: { apiKey: '' } };\n return rootState.auth.client.apiRoute.get('config/general/generate_api_key')\n .then(response => {\n config.webInterface.apiKey = response.data;\n return commit(ADD_CONFIG, { section, config });\n });\n },\n setRecentShow({ rootState, commit, state }, show) {\n commit('addRecentShow', { show });\n const config = {\n recentShows: state.recentShows\n };\n return rootState.auth.client.api.patch('config/main', config);\n },\n setCustomLogs({ rootState, commit }, logs) {\n // Convert back to object.\n const reducedLogs = logs.reduce((obj, item) => ({ ...obj, [item.identifier]: item.level }), {});\n\n return rootState.auth.client.api.patch('config/main', { logs: { custom: logs } })\n .then(() => {\n return commit(ADD_CONFIG, {\n section: 'main', config: { logs: { custom: reducedLogs } }\n });\n });\n },\n setTraktSelectedLists({ rootState, commit }, selectedLists) {\n return rootState.auth.client.api.patch('config/main', { recommended: { trakt: { selectedLists } } })\n .then(() => {\n return commit('updateTraktSelectedLists', selectedLists);\n });\n }\n};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","import { ADD_CONFIG } from '../../mutation-types';\n\nconst state = {\n metadataProviders: {}\n};\n\nconst mutations = {\n [ADD_CONFIG](state, { section, config }) {\n if (section === 'metadata') {\n state = Object.assign(state, config);\n }\n }\n};\n\nconst getters = {};\n\nconst actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","export const state = {\n enabled: null,\n notifyOnSnatch: null,\n notifyOnDownload: null,\n notifyOnSubtitleDownload: null,\n accessToken: null\n};\n\nexport const mutations = {};\n\nexport const getters = {};\n\nexport const actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","export const state = {\n enabled: null,\n notifyOnSnatch: null,\n notifyOnDownload: null,\n notifyOnSubtitleDownload: null,\n webhook: null,\n tts: null,\n overrideAvatar: null\n};\n\nexport const mutations = {};\n\nexport const getters = {};\n\nexport const actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","export const state = {\n enabled: null,\n notifyOnSnatch: null,\n notifyOnDownload: null,\n notifyOnSubtitleDownload: null,\n host: null,\n port: null,\n from: null,\n tls: null,\n username: null,\n password: null,\n addressList: [],\n subject: null\n};\n\nexport const mutations = {};\n\nexport const getters = {};\n\nexport const actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","export const state = {\n enabled: null,\n host: null,\n apiKey: null\n};\n\nexport const mutations = {};\n\nexport const getters = {};\n\nexport const actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","export const state = {\n enabled: null,\n notifyOnSnatch: null,\n notifyOnDownload: null,\n notifyOnSubtitleDownload: null,\n api: null,\n id: null\n};\n\nexport const mutations = {};\n\nexport const getters = {};\n\nexport const actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","export const state = {\n enabled: null,\n host: null,\n password: null,\n notifyOnSnatch: null,\n notifyOnDownload: null,\n notifyOnSubtitleDownload: null\n};\n\nexport const mutations = {};\n\nexport const getters = {};\n\nexport const actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","export const state = {\n enabled: null,\n alwaysOn: null,\n libraryCleanPending: null,\n cleanLibrary: null,\n host: [],\n username: null,\n password: null,\n notifyOnSnatch: null,\n notifyOnDownload: null,\n notifyOnSubtitleDownload: null,\n update: {\n library: null,\n full: null,\n onlyFirst: null\n }\n};\n\nexport const mutations = {};\n\nexport const getters = {};\n\nexport const actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","export const state = {\n enabled: null,\n notifyOnSnatch: null,\n notifyOnDownload: null,\n notifyOnSubtitleDownload: null\n};\n\nexport const mutations = {};\n\nexport const getters = {};\n\nexport const actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","export const state = {\n enabled: null,\n host: null,\n database: null,\n mount: null\n};\n\nexport const mutations = {};\n\nexport const getters = {};\n\nexport const actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","export const state = {\n enabled: null,\n host: null,\n dbloc: null,\n database: null\n};\n\nexport const mutations = {};\n\nexport const getters = {};\n\nexport const actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","export const state = {\n client: {\n host: [],\n username: null,\n enabled: null,\n notifyOnSnatch: null,\n notifyOnDownload: null,\n notifyOnSubtitleDownload: null\n },\n server: {\n updateLibrary: null,\n host: [],\n enabled: null,\n https: null,\n username: null,\n password: null,\n token: null\n }\n};\n\nexport const mutations = {};\n\nexport const getters = {};\n\nexport const actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","export const state = {\n enabled: null,\n api: [],\n messageTitle: null,\n priority: null,\n notifyOnSnatch: null,\n notifyOnDownload: null,\n notifyOnSubtitleDownload: null\n};\n\nexport const mutations = {};\n\nexport const getters = {};\n\nexport const actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","export const state = {\n enabled: null,\n notifyOnSnatch: null,\n notifyOnDownload: null,\n notifyOnSubtitleDownload: null,\n authToken: null\n};\n\nexport const mutations = {};\n\nexport const getters = {};\n\nexport const actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","export const state = {\n enabled: null,\n notifyOnSnatch: null,\n notifyOnDownload: null,\n notifyOnSubtitleDownload: null,\n authToken: null,\n device: null\n};\n\nexport const mutations = {};\n\nexport const getters = {};\n\nexport const actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","export const state = {\n enabled: null,\n notifyOnSnatch: null,\n notifyOnDownload: null,\n notifyOnSubtitleDownload: null,\n api: null,\n device: null\n};\n\nexport const mutations = {};\n\nexport const getters = {};\n\nexport const actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","export const state = {\n enabled: null,\n apiKey: null,\n userKey: null,\n device: [],\n sound: null,\n notifyOnSnatch: null,\n notifyOnDownload: null,\n notifyOnSubtitleDownload: null\n};\n\nexport const mutations = {};\n\nexport const getters = {};\n\nexport const actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","export const state = {\n enabled: null,\n host: null,\n name: null,\n shareName: null\n};\n\nexport const mutations = {};\n\nexport const getters = {};\n\nexport const actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","export const state = {\n enabled: null,\n notifyOnSnatch: null,\n notifyOnDownload: null,\n notifyOnSubtitleDownload: null,\n webhook: null\n};\n\nexport const mutations = {};\n\nexport const getters = {};\n\nexport const actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","export const state = {\n enabled: null,\n notifyOnSnatch: null,\n notifyOnDownload: null,\n notifyOnSubtitleDownload: null\n};\n\nexport const mutations = {};\n\nexport const getters = {};\n\nexport const actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","export const state = {\n enabled: null\n};\n\nexport const mutations = {};\n\nexport const getters = {};\n\nexport const actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","export const state = {\n enabled: null,\n notifyOnSnatch: null,\n notifyOnDownload: null,\n notifyOnSubtitleDownload: null,\n api: null,\n id: null\n};\n\nexport const mutations = {};\n\nexport const getters = {};\n\nexport const actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","export const state = {\n enabled: null,\n pinUrl: null,\n username: null,\n accessToken: null,\n timeout: null,\n defaultIndexer: null,\n sync: null,\n syncRemove: null,\n syncWatchlist: null,\n methodAdd: null,\n removeWatchlist: null,\n removeSerieslist: null,\n removeShowFromApplication: null,\n startPaused: null,\n blacklistName: null\n};\n\nexport const mutations = {};\n\nexport const getters = {};\n\nexport const actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","export const state = {\n enabled: null,\n notifyOnSnatch: null,\n notifyOnDownload: null,\n notifyOnSubtitleDownload: null,\n dmto: null,\n prefix: null,\n directMessage: null\n};\n\nexport const mutations = {};\n\nexport const getters = {};\n\nexport const actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","import { ADD_CONFIG } from '../../../mutation-types';\nimport boxcar2 from './boxcar2';\nimport discord from './discord';\nimport email from './email';\nimport emby from './emby';\nimport freemobile from './freemobile';\nimport growl from './growl';\nimport kodi from './kodi';\nimport libnotify from './libnotify';\nimport nmj from './nmj';\nimport nmjv2 from './nmjv2';\nimport plex from './plex';\nimport prowl from './prowl';\nimport pushalot from './pushalot';\nimport pushbullet from './pushbullet';\nimport join from './join';\nimport pushover from './pushover';\nimport pyTivo from './py-tivo';\nimport slack from './slack';\nimport synology from './synology';\nimport synologyIndex from './synology-index';\nimport telegram from './telegram';\nimport trakt from './trakt';\nimport twitter from './twitter';\n\nconst state = {};\n\nconst mutations = {\n [ADD_CONFIG](state, { section, config }) {\n if (section === 'notifiers') {\n state = Object.assign(state, config);\n }\n }\n};\n\nconst getters = {};\n\nconst actions = {};\n\nconst modules = {\n boxcar2,\n discord,\n email,\n emby,\n freemobile,\n growl,\n kodi,\n libnotify,\n nmj,\n nmjv2,\n plex,\n prowl,\n pushalot,\n pushbullet,\n join,\n pushover,\n pyTivo,\n slack,\n synology,\n synologyIndex,\n telegram,\n trakt,\n twitter\n};\n\nexport default {\n state,\n mutations,\n getters,\n actions,\n modules\n};\n","import { ADD_CONFIG } from '../../mutation-types';\n\nconst state = {\n naming: {\n pattern: null,\n multiEp: null,\n enableCustomNamingSports: null,\n enableCustomNamingAirByDate: null,\n patternSports: null,\n patternAirByDate: null,\n enableCustomNamingAnime: null,\n patternAnime: null,\n animeMultiEp: null,\n animeNamingType: null,\n stripYear: null\n },\n showDownloadDir: null,\n processAutomatically: null,\n processMethod: null,\n specificProcessMethod: null,\n processMethodTorrent: null,\n processMethodNzb: null,\n deleteRarContent: null,\n unpack: null,\n noDelete: null,\n reflinkAvailable: null,\n postponeIfSyncFiles: null,\n autoPostprocessorFrequency: 10,\n airdateEpisodes: null,\n moveAssociatedFiles: null,\n allowedExtensions: [],\n addShowsWithoutDir: null,\n createMissingShowDirs: null,\n renameEpisodes: null,\n postponeIfNoSubs: null,\n nfoRename: null,\n syncFiles: [],\n fileTimestampTimezone: 'local',\n extraScripts: [],\n extraScriptsUrl: null,\n multiEpStrings: {},\n downloadHandler: {\n enabled: null,\n frequency: null,\n minFrequency: null,\n torrentSeedRatio: null,\n torrentSeedAction: null\n },\n ffmpeg: {\n checkStreams: null,\n path: ''\n }\n};\n\nconst mutations = {\n [ADD_CONFIG](state, { section, config }) {\n if (section === 'postprocessing') {\n state = Object.assign(state, config);\n }\n }\n};\n\nconst getters = {};\n\nconst actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","import { ADD_CONFIG } from '../../mutation-types';\n\nconst state = {\n filters: {\n ignoreUnknownSubs: false,\n ignored: [\n 'german',\n 'french',\n 'core2hd',\n 'dutch',\n 'swedish',\n 'reenc',\n 'MrLss',\n 'dubbed'\n ],\n undesired: [\n 'internal',\n 'xvid'\n ],\n ignoredSubsList: [\n 'dk',\n 'fin',\n 'heb',\n 'kor',\n 'nor',\n 'nordic',\n 'pl',\n 'swe'\n ],\n required: [],\n preferred: []\n },\n general: {\n minDailySearchFrequency: 10,\n minBacklogFrequency: 720,\n dailySearchFrequency: 40,\n checkPropersInterval: '4h',\n usenetRetention: 500,\n maxCacheAge: 30,\n backlogDays: 7,\n backlogFrequency: 720,\n cacheTrimming: false,\n downloadPropers: true,\n failedDownloads: {\n enabled: null,\n deleteFailed: null\n },\n removeFromClient: false,\n randomizeProviders: false,\n propersSearchDays: 2,\n allowHighPriority: true,\n trackersList: [\n 'udp://tracker.coppersurfer.tk:6969/announce',\n 'udp://tracker.leechers-paradise.org:6969/announce',\n 'udp://tracker.zer0day.to:1337/announce',\n 'udp://tracker.opentrackr.org:1337/announce',\n 'http://tracker.opentrackr.org:1337/announce',\n 'udp://p4p.arenabg.com:1337/announce',\n 'http://p4p.arenabg.com:1337/announce',\n 'udp://explodie.org:6969/announce',\n 'udp://9.rarbg.com:2710/announce',\n 'http://explodie.org:6969/announce',\n 'http://tracker.dler.org:6969/announce',\n 'udp://public.popcorn-tracker.org:6969/announce',\n 'udp://tracker.internetwarriors.net:1337/announce',\n 'udp://ipv4.tracker.harry.lu:80/announce',\n 'http://ipv4.tracker.harry.lu:80/announce',\n 'udp://mgtracker.org:2710/announce',\n 'http://mgtracker.org:6969/announce',\n 'udp://tracker.mg64.net:6969/announce',\n 'http://tracker.mg64.net:6881/announce',\n 'http://torrentsmd.com:8080/announce'\n ]\n }\n};\n\nconst mutations = {\n [ADD_CONFIG](state, { section, config }) {\n if (section === 'search') {\n state = Object.assign(state, config);\n }\n }\n};\n\nconst getters = {};\n\nconst actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","import { ADD_CONFIG } from '../../mutation-types';\n\nconst state = {\n acceptUnknownEmbeddedSubs: null,\n codeFilter: [],\n enabled: null,\n eraseCache: null,\n extraScripts: [],\n finderFrequency: null,\n hearingImpaired: null,\n ignoreEmbeddedSubs: null,\n keepOnlyWanted: null,\n location: null,\n logHistory: null,\n multiLanguage: null,\n perfectMatch: null,\n preScripts: [],\n providerLogins: {\n addic7ed: { user: '', pass: '' },\n legendastv: { user: '', pass: '' },\n opensubtitles: { user: '', pass: '' }\n },\n services: [],\n stopAtFirst: null,\n wantedLanguages: [],\n wikiUrl: ''\n};\n\nconst mutations = {\n [ADD_CONFIG](state, { section, config }) {\n if (section === 'subtitles') {\n state = Object.assign(state, config);\n }\n }\n};\n\nconst getters = {};\n\nconst actions = {\n};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","import { ADD_CONFIG, ADD_REMOTE_BRANCHES, ADD_SHOW_QUEUE_ITEM } from '../../mutation-types';\n/**\n * An object representing a scheduler.\n *\n * If a scheduler isn't initialized on the backend,\n * this object will only have the `key` and `name` properties.\n * @typedef {object} Scheduler\n * @property {string} key\n * A camelCase key representing this scheduler.\n * @property {string} name\n * The scheduler's name.\n * @property {boolean} [isAlive]\n * Is the scheduler alive?\n * @property {boolean|string} [isEnabled]\n * Is the scheduler enabled? For the `backlog` scheduler, the value might be `Paused`.\n * @property {boolean} [isActive]\n * Is the scheduler's action currently running?\n * @property {string|null} [startTime]\n * The time of day in which this scheduler runs (format: ISO-8601 time), or `null` if not applicable.\n * @property {number} [cycleTime]\n * The duration in milliseconds between each run, or `null` if not applicable.\n * @property {number} [nextRun]\n * The duration in milliseconds until the next run.\n * @property {string} [lastRun]\n * The date and time of the previous run (format: ISO-8601 date-time).\n * @property {boolean} [isSilent]\n * Is the scheduler silent?\n */\n\nconst state = {\n configLoaded: false,\n branch: null,\n memoryUsage: null,\n schedulers: [],\n showQueue: [],\n diskSpace: [],\n sslVersion: null,\n pythonVersion: null,\n pid: null,\n os: null,\n logDir: null,\n dbPath: null,\n configFile: null,\n databaseVersion: {\n major: null,\n minor: null\n },\n locale: null,\n timezone: null,\n localUser: null,\n programDir: null,\n dataDir: null,\n cacheDir: null,\n appArgs: [],\n webRoot: null,\n runsInDocker: null,\n newestVersionMessage: null,\n gitRemoteBranches: [],\n cpuPresets: null,\n news: {\n lastRead: null,\n latest: null,\n unread: null\n },\n ffprobeVersion: null\n};\n\nconst mutations = {\n [ADD_CONFIG](state, { section, config }) {\n if (section === 'system') {\n state = Object.assign(state, config);\n }\n },\n [ADD_REMOTE_BRANCHES](state, branches) {\n state.gitRemoteBranches = branches;\n }\n};\n\nconst getters = {\n getScheduler: state => {\n /**\n * Get a scheduler object using a key.\n *\n * @param {string} key The combined quality to split.\n * @returns {Scheduler|object} The scheduler object or an empty object if not found.\n */\n const _getScheduler = key => state.schedulers.find(scheduler => key === scheduler.key) || {};\n return _getScheduler;\n }\n};\n\nconst actions = {\n getGitRemoteBranches({ rootState, commit }) {\n return rootState.auth.client.apiRoute('home/branchForceUpdate')\n .then(response => {\n if (response.data && response.data.branches.length > 0) {\n commit(ADD_REMOTE_BRANCHES, response.data.branches);\n return response.data.branches;\n }\n });\n },\n getShowQueue({ rootState, commit }) {\n return rootState.auth.client.api.get('/config/system/showQueue').then(res => {\n const showQueue = res.data;\n const config = { showQueue };\n commit(ADD_CONFIG, { section: 'system', config });\n return showQueue;\n });\n },\n updateQueueItemShow({ commit }, queueItem) {\n // Update store's show queue item. (provided through websocket)\n return commit(ADD_SHOW_QUEUE_ITEM, queueItem);\n }\n\n};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","import anime from './anime';\nimport clients from './clients';\nimport consts from './consts';\nimport indexers from './indexers';\nimport layout from './layout';\nimport general from './general';\nimport metadata from './metadata';\nimport notifiers from './notifiers';\nimport postprocessing from './postprocessing';\nimport search from './search';\nimport subtitles from './subtitles';\nimport system from './system';\n\nconst modules = {\n anime,\n clients,\n consts,\n indexers,\n layout,\n general,\n metadata,\n notifiers,\n postprocessing,\n search,\n subtitles,\n system\n};\n\nconst state = {};\n\nconst mutations = {};\n\nconst getters = {};\n\nconst actions = {};\n\nexport default {\n state,\n mutations,\n getters,\n actions,\n modules\n};\n","import Vue from 'vue';\nimport { ADD_QUEUE_ITEM, SET_LAST_ITEM } from '../mutation-types';\n\nconst state = {\n queueitems: [],\n last: null\n};\n\nconst mutations = {\n [ADD_QUEUE_ITEM](state, queueItem) {\n const existingQueueItem = state.queueitems.find(item => item.identifier === queueItem.identifier);\n\n if (existingQueueItem) {\n Vue.set(state.queueitems, state.queueitems.indexOf(existingQueueItem), { ...existingQueueItem, ...queueItem });\n } else {\n Vue.set(state.queueitems, state.queueitems.length, queueItem);\n }\n },\n [SET_LAST_ITEM](state, queueItem) {\n state.last = queueItem;\n }\n};\n\nconst getters = {\n getQueueItemsByName: state => name => state.queueitems.filter(q => name.includes(q.name)),\n getQueueItemsByIdentifier: state => identifier => state.queueitems.filter(q => q.identifier === identifier)\n};\n\nconst actions = {\n updateQueueItem(context, queueItem) {\n // Update store's search queue item. (provided through websocket)\n const { commit } = context;\n commit(SET_LAST_ITEM, queueItem);\n return commit(ADD_QUEUE_ITEM, queueItem);\n }\n};\n\nexport default {\n state,\n mutations,\n getters,\n actions\n};\n","import Vue from 'vue';\nimport Vuex, { Store } from 'vuex';\nimport VueNativeSock from 'vue-native-websocket';\nimport {\n auth,\n config,\n defaults,\n history,\n notifications,\n provider,\n recommended,\n schedule,\n shows,\n socket,\n stats,\n queue\n} from './modules';\nimport {\n SOCKET_ONOPEN,\n SOCKET_ONCLOSE,\n SOCKET_ONERROR,\n SOCKET_ONMESSAGE,\n SOCKET_RECONNECT,\n SOCKET_RECONNECT_ERROR\n} from './mutation-types';\n\nVue.use(Vuex);\n\nconst store = new Store({\n modules: {\n auth,\n config,\n defaults,\n history,\n notifications,\n provider,\n recommended,\n schedule,\n shows,\n socket,\n stats,\n queue\n },\n state: {},\n mutations: {},\n getters: {},\n actions: {}\n});\n\n// Keep as a non-arrow function for `this` context.\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 { data, event } = message;\n\n // Show the notification to the user\n if (event === 'notification') {\n const { body, hash, type, title } = data;\n window.displayNotification(type, title, body, hash);\n } else if (event === 'configUpdated') {\n const { section, config } = data;\n this.store.dispatch('updateConfig', { section, config });\n } else if (event === 'showUpdated' || event === 'showAdded') {\n this.store.dispatch('updateShow', data);\n } else if (event === 'showRemoved') {\n // We need this for the QueueItemChangeIndexerstatus\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 if (event === 'episodeUpdated') {\n this.store.dispatch('updateEpisode', data);\n } else {\n window.displayNotification('info', event, data);\n }\n }\n\n // Resume normal 'passToStore' handling\n next(eventName, event);\n};\n\nconst websocketUrl = (() => {\n const { protocol, host } = window.location;\n const proto = protocol === 'https:' ? 'wss:' : 'ws:';\n const WSMessageUrl = '/ui';\n let webRoot = document.body.getAttribute('web-root');\n if (webRoot) {\n if (!webRoot.startsWith('/')) {\n webRoot = `/${webRoot}`;\n }\n }\n return `${proto}//${host}${webRoot}/ws${WSMessageUrl}`;\n})();\n\nVue.use(VueNativeSock, websocketUrl, {\n store,\n format: 'json',\n reconnection: true, // (Boolean) whether to reconnect automatically (false)\n reconnectionAttempts: 25, // (Number) number of reconnection attempts before giving up (Infinity),\n reconnectionDelay: 2500, // (Number) how long to initially wait before attempting a new (1000)\n passToStoreHandler, // (Function|) Handler for events triggered by the WebSocket (false)\n mutations: {\n SOCKET_ONOPEN,\n SOCKET_ONCLOSE,\n SOCKET_ONERROR,\n SOCKET_ONMESSAGE,\n SOCKET_RECONNECT,\n SOCKET_RECONNECT_ERROR\n }\n});\n\nexport default store;\n","const 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\nexport {\n AUTHENTICATE,\n CONNECT,\n LOGIN_PENDING,\n LOGIN_SUCCESS,\n LOGIN_FAILED,\n LOGOUT,\n REFRESH_TOKEN,\n REMOVE_AUTH_ERROR,\n SOCKET_ONOPEN,\n SOCKET_ONCLOSE,\n SOCKET_ONERROR,\n SOCKET_ONMESSAGE,\n SOCKET_RECONNECT,\n SOCKET_RECONNECT_ERROR,\n NOTIFICATIONS_ENABLED,\n NOTIFICATIONS_DISABLED,\n ADD_CONFIG,\n UPDATE_LAYOUT_LOCAL,\n ADD_HISTORY,\n ADD_HISTORY_ROW,\n ADD_SHOW,\n ADD_STATS,\n ADD_SHOW_CONFIG,\n ADD_RECOMMENDED_SHOW,\n SET_RECOMMENDED_SHOWS,\n SET_RECOMMENDED_SHOWS_TRAKT_REMOVED,\n SET_RECOMMENDED_SHOWS_CATEGORIES,\n ADD_SHOWS,\n ADD_SHOW_EPISODE,\n ADD_REMOTE_BRANCHES,\n SET_STATS,\n SET_MAX_DOWNLOAD_COUNT,\n ADD_SHOW_SCENE_EXCEPTION,\n REMOVE_SHOW_SCENE_EXCEPTION,\n REMOVE_SHOW_CONFIG_TEMPLATE,\n ADD_SHOW_HISTORY,\n ADD_SHOW_EPISODE_HISTORY,\n ADD_PROVIDER,\n ADD_PROVIDERS,\n ADD_PROVIDER_CACHE,\n ADD_SEARCH_RESULTS,\n ADD_QUEUE_ITEM,\n SET_LAST_ITEM,\n ADD_SHOW_QUEUE_ITEM,\n REMOVE_SHOW,\n REMOVE_PROVIDER,\n UPDATE_SHOWLIST_DEFAULT,\n ADD_SHOW_CONFIG_TEMPLATE,\n ADD_SCHEDULE\n};\n","export const isDevelopment = process.env.NODE_ENV === 'development';\n\n/**\n * Calculate the combined value of the selected qualities.\n * @param {number[]} allowedQualities - Array of allowed qualities.\n * @param {number[]} [preferredQualities=[]] - Array of preferred qualities.\n * @returns {number} An unsigned integer.\n */\nexport const combineQualities = (allowedQualities, preferredQualities = []) => {\n const reducer = (accumulator, currentValue) => accumulator | currentValue;\n const allowed = allowedQualities.reduce((a, c) => reducer(a, c), 0);\n const preferred = preferredQualities.reduce((a, c) => reducer(a, c), 0);\n\n return (allowed | (preferred << 16)) >>> 0; // Unsigned int\n};\n\n/**\n * Return a human readable representation of the provided size.\n * @param {number} bytes - The size in bytes to convert\n * @param {boolean} [useDecimal=false] - Use decimal instead of binary prefixes (e.g. kilo = 1000 instead of 1024)\n * @returns {string} The converted size.\n */\nexport const humanFileSize = (bytes, useDecimal = false) => {\n if (!bytes) {\n bytes = 0;\n }\n\n bytes = Math.max(bytes, 0);\n\n const thresh = useDecimal ? 1000 : 1024;\n if (Math.abs(bytes) < thresh) {\n return bytes.toFixed(2) + ' B';\n }\n const units = ['KB', 'MB', 'GB', 'TB', 'PB'];\n let u = -1;\n do {\n bytes /= thresh;\n ++u;\n } while (Math.abs(bytes) >= thresh && u < units.length - 1);\n\n return `${bytes.toFixed(2)} ${units[u]}`;\n};\n\n// Maps Python date/time tokens to date-fns tokens\n// Python: https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior\n// date-fns: https://date-fns.org/v2.0.0-alpha.27/docs/format\nconst datePresetMap = {\n '%a': 'ccc', // Weekday name, short\n '%A': 'cccc', // Weekday name, full\n '%w': 'c', // Weekday number\n '%d': 'dd', // Day of the month, zero-padded\n '%b': 'LLL', // Month name, short\n '%B': 'LLLL', // Month name, full\n '%m': 'MM', // Month number, zero-padded\n '%y': 'yy', // Year without century, zero-padded\n '%Y': 'yyyy', // Year with century\n '%H': 'HH', // Hour (24-hour clock), zero-padded\n '%I': 'hh', // Hour (12-hour clock), zero-padded\n '%p': 'a', // AM / PM\n '%M': 'mm', // Minute, zero-padded\n '%S': 'ss', // Second, zero-padded\n '%f': 'SSSSSS', // Microsecond, zero-padded\n '%z': 'xx', // UTC offset in the form +HHMM or -HHMM\n // '%Z': '', // [UNSUPPORTED] Time zone name\n '%j': 'DDD', // Day of the year, zero-padded\n '%U': 'II', // Week number of the year (Sunday as the first day of the week), zero padded\n '%W': 'ww', // Week number of the year (Monday as the first day of the week)\n '%c': 'Pp', // Locale's appropriate date and time representation\n '%x': 'P', // Locale's appropriate date representation\n '%X': 'p', // Locale's appropriate time representation\n '%%': '%' // Literal '%' character\n};\n\n/**\n * Convert a Python date format to a DateFns compatible date format.\n * Automatically escapes non-token characters.\n * @param {string} format - The Python date format.\n * @returns {string} The new format.\n */\nexport const convertDateFormat = format => {\n let newFormat = '';\n let index = 0;\n let escaping = false;\n while (index < format.length) {\n const chr = format.charAt(index);\n // Escape single quotes\n if (chr === \"'\") {\n newFormat += chr + chr;\n } else if (chr === '%') {\n if (escaping) {\n escaping = false;\n newFormat += \"'\";\n }\n\n ++index;\n if (index === format.length) {\n throw new Error(`Single % at end of format string: ${format}`);\n }\n const chr2 = format.charAt(index);\n const tokenKey = chr + chr2;\n const token = datePresetMap[tokenKey];\n if (token === undefined) {\n throw new Error(`Unrecognized token \"${tokenKey}\" in format string: ${format}`);\n }\n newFormat += token;\n // Only letters need to escaped\n } else if (/[^a-z]/i.test(chr)) {\n if (escaping) {\n escaping = false;\n newFormat += \"'\";\n }\n newFormat += chr;\n // Escape anything else\n } else {\n if (!escaping) {\n escaping = true;\n newFormat += \"'\";\n }\n newFormat += chr;\n }\n\n ++index;\n\n if (index === format.length && escaping) {\n newFormat += \"'\";\n }\n }\n return newFormat;\n};\n\n/**\n * Create an array with unique strings\n * @param {string[]} array - array with strings\n * @returns {string[]} array with unique strings\n */\nexport const arrayUnique = array => {\n return array.reduce((result, item) => {\n return result.includes(item) ? result : result.concat(item);\n }, []);\n};\n\n/**\n * Exclude strings out of the array `exclude` compared to the strings in the array baseArray.\n * @param {string[]} baseArray - array of strings\n * @param {string[]} exclude - array of strings which we want to exclude in baseArray\n * @returns {string[]} reduced array\n */\nexport const arrayExclude = (baseArray, exclude) => {\n return baseArray.filter(item => !exclude.includes(item));\n};\n\n/**\n * A simple wait function.\n * @param {number} ms - Time to wait.\n * @returns {Promise} Resolves when done waiting.\n */\nexport const wait = /* istanbul ignore next */ ms => new Promise(resolve => setTimeout(resolve, ms));\n\n/**\n * Returns when `check` evaluates as truthy.\n * @param {function} check - Function to evaluate every poll interval.\n * @param {number} [poll=100] - Interval to check, in milliseconds.\n * @param {number} [timeout=3000] - Timeout to stop waiting after, in milliseconds.\n * @returns {Promise} The approximate amount of time waited, in milliseconds.\n * @throws Will throw an error when the timeout has been exceeded.\n */\nexport const waitFor = /* istanbul ignore next */ async (check, poll = 100, timeout = 3000) => {\n let ms = 0;\n while (!check()) {\n await wait(poll); // eslint-disable-line no-await-in-loop\n ms += poll;\n if (ms > timeout) {\n throw new Error(`waitFor timed out (${timeout}ms)`);\n }\n }\n return ms;\n};\n\n/**\n * Transform a season and episode number to an episode slug.\n * If the episode number is not provided, return a season slug.\n * @param {number} season - Season number.\n * @param {number} episode - Episode number.\n * @returns {string} Episode or Season slug.\n */\nexport const episodeToSlug = (season, episode) => {\n if (episode) {\n return `s${season.toString().padStart(2, '0')}e${episode.toString().padStart(2, '0')}`;\n }\n return `s${season.toString().padStart(2, '0')}`;\n};\n\n/**\n * Transform a showSlug to separate indexer and showId.\n * @param {string} showSlug - Show slug.\n * @returns {object} Object with attributes indexer and showId.\n */\nexport const showSlugToId = showSlug => {\n const show = { indexer: undefined, showId: undefined };\n if (showSlug === undefined) {\n return show;\n }\n\n const match = showSlug.toLowerCase().match(/([a-z]+)(\\d+)/);\n show.indexer = match[1];\n show.showId = match[2];\n return show;\n};\n\n/**\n * Force reload.\n * Force a reload of the page and ignore local cache.\n * window.location.reload(true) doesn't seem to work on chrome. But the self assign does.\n*/\nexport const forceBrowserReload = () => {\n if (Boolean(window.chrome) && Boolean(window.chrome.webstore)) {\n window.location.href = window.location.href; // eslint-disable-line no-self-assign\n } else {\n window.location.reload(true);\n }\n};\n\n/**\n * Divmod\n *\n * Calculate a divider and mod.\n * @param {number} seconds - Number of seconds to divmod.\n * @param {number} div - Divider and modulus.\n * @returns {object} - And object with keys quotient and remainder.\n */\nexport const divmod = (seconds, div) => {\n const quotient = Math.floor(seconds / div);\n const remainder = seconds % div;\n return { quotient, remainder };\n};\n\n/**\n * Sort method for sorting a shows array with an optionally Article sorting enabled.\n * A sort function that will sort by title, but `a`, `an` and `the` removed from the titles.\n *\n * @param {array} shows - Array of shows.\n * @param {boolean} sortArticle - Include articles (the, a, an) when sorting.\n * @returns {array} - A sorted array with shows.\n */\nexport const sortShows = (shows, sortArticle = false) => {\n const sortShows = [...shows]; // Clone array.\n const sortKey = title => (sortArticle ? title : title.replace(/^((?:the|a|an)\\s)/i, '')).toLowerCase();\n const sortFn = (showA, showB) => {\n const titleA = sortKey(showA.title);\n const titleB = sortKey(showB.title);\n if (titleA < titleB) {\n return -1;\n }\n if (titleA > titleB) {\n return 1;\n }\n return 0;\n };\n\n return sortShows.sort(sortFn);\n};\n","/**\n * Attach a jquery qtip to elements with the .imdbstars class.\n */\nexport const attachImdbTooltip = () => {\n $('.imdbstars').qtip({\n content: {\n text() {\n // Retrieve content from custom attribute of the $('.selector') elements.\n return $(this).attr('qtip-content');\n }\n },\n show: {\n solo: true\n },\n position: {\n my: 'right center',\n at: 'center left',\n adjust: {\n y: 0,\n x: -6\n }\n },\n style: {\n tip: {\n corner: true,\n method: 'polygon'\n },\n classes: 'qtip-rounded qtip-shadow ui-tooltip-sb'\n }\n });\n};\n\n/**\n * Attach a default qtip to elements with the addQTip class.\n */\nexport const addQTip = () => {\n $('.addQTip').each((_, element) => {\n $(element).css({\n cursor: 'help',\n 'text-shadow': '0px 0px 0.5px #666'\n });\n\n const my = $(element).data('qtip-my') || 'left center';\n const at = $(element).data('qtip-at') || 'middle right';\n\n $(element).qtip({\n show: {\n solo: true\n },\n position: {\n my,\n at\n },\n style: {\n tip: {\n corner: true,\n method: 'polygon'\n },\n classes: 'qtip-rounded qtip-shadow ui-tooltip-sb'\n }\n });\n });\n};\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_1___ = new URL(\"data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.vgt-table-styling .vgt-table{width:100%;margin-right:auto;margin-left:auto;text-align:left;border-spacing:0;border-collapse:initial}.vgt-table-styling .vgt-table th,.vgt-table-styling .vgt-table td{padding:4px;vertical-align:middle}.vgt-table-styling .vgt-table th:first-child,.vgt-table-styling .vgt-table td:first-child{border-left:none}.vgt-table-styling .vgt-table th{text-align:center;border-collapse:collapse;font-weight:normal;position:relative}.vgt-table-styling .vgt-table span.break-word{word-wrap:break-word}.vgt-table-styling .vgt-table thead th.sorting.sorting-asc{background-position-x:right;background-position-y:bottom}.vgt-table-styling .vgt-table thead th.sorting{background-repeat:no-repeat}.vgt-table-styling .vgt-table thead th.sorting.sorting-desc{background-color:#555;background-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___})}.vgt-table-styling .vgt-table thead th.sorting.sorting-asc{background-color:#555;background-image:url(${___CSS_LOADER_URL_REPLACEMENT_1___});background-position-x:right;background-position-y:bottom}.vgt-table-styling .vgt-table th.sortable button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:rgba(0,0,0,0);border:none;position:absolute;top:0;left:0;width:100%;height:100%}.vgt-table-styling .vgt-table thead th{padding:4px;cursor:default}.vgt-table-styling .vgt-table input.tablesorter-filter{width:98%;height:auto;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.vgt-table-styling .vgt-table tr.tablesorter-filter-row,.vgt-table-styling .vgt-table tr.tablesorter-filter-row td{text-align:center}.vgt-table-styling .vgt-table input.tablesorter-filter-row .disabled{display:none}.vgt-table-styling .vgt-table tfoot tr{text-align:center;border-collapse:collapse}.vgt-table-styling .vgt-table tfoot a{text-decoration:none}.vgt-table-styling .vgt-table th.vgt-row-header{text-align:left}.vgt-table-styling .vgt-table .season-header{display:inline;margin-left:5px}.vgt-table-styling .vgt-table tr.spacer{height:25px}.vgt-table-styling .vgt-table tr:hover{opacity:.9}.vgt-table-styling .vgt-table tr.status td>span{color:#000}.vgt-table-styling .vgt-table span.episode-title>a{text-decoration:none}.vgt-table-styling .vgt-table span.episode-title>a:hover,.vgt-table-styling .vgt-table span.episode-title>a:focus{text-decoration:underline}.vgt-table-styling .vgt-table .skipped{background-color:#bedeed}.vgt-table-styling .vgt-table .snatched{background-color:#ebc1ea}.vgt-table-styling .vgt-table .downloaded{background-color:#ffda8a}.vgt-table-styling .vgt-table .failed{background-color:#f99}.vgt-table-styling .vgt-table .subtitled{background-color:#bedeed}.vgt-table-styling .vgt-table .archived{background-color:#f5f1e4}.vgt-table-styling .tablesorter-header-inner{padding:0 2px;text-align:center}.vgt-table-styling .vgt-dropdown>.button-group{position:relative}.vgt-table-styling .dropdown-toggle{position:absolute;z-index:1;top:.1em;right:.1em;width:1em;transition:width .2s ease-in-out}.vgt-table-styling .dropdown-toggle:hover,.vgt-table-styling .dropdown-toggle:active{width:2em}.vgt-table-styling .vgt-dropdown-menu{position:absolute;z-index:1;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-clip:padding-box;border-radius:3px;right:0;top:2em}.vgt-table-styling .vgt-dropdown-menu>li>span{display:block;padding:3px 5px;clear:both;font-weight:400;line-height:1.42857143;white-space:nowrap}.vgt-table-styling .align-center{display:flex;justify-content:center}.vgt-table-styling .span-center>span{display:flex;justify-content:center}.vgt-table-styling .indexer-image :not(:last-child){margin-right:5px}.vgt-table-styling .button-row{width:100%;display:inline-block}.vgt-table-styling .global-ignored td.release span{color:red}.vgt-table-styling .show-ignored td.release span{color:red;font-style:italic}.vgt-table-styling .global-required td.release span{color:green}.vgt-table-styling .show-required td.release span{color:green;font-style:italic}.vgt-table-styling .global-undesired td.release span{color:orange}.vgt-table-styling td.col-footer{text-align:left !important}.vgt-table-styling .vgt-wrap__footer{color:#fff;padding:1em;background-color:#333;margin-bottom:1em;display:flex;justify-content:space-between}.vgt-table-styling .footer__row-count,.vgt-table-styling .footer__navigation__page-info{display:inline}.vgt-table-styling .footer__row-count__label{margin-right:1em}.vgt-table-styling .vgt-wrap__footer .footer__navigation{font-size:14px}.vgt-table-styling .vgt-pull-right{float:right !important}.vgt-table-styling .footer__navigation__page-btn{display:inline-block;padding:4px 10px;margin-bottom:0;font-size:12px;line-height:16px;vertical-align:middle;border-radius:1px}.vgt-table-styling .footer__navigation__page-btn:hover{text-decoration:none;background-position:0 -150px;transition:background-position 0s linear;background-image:none}.vgt-table-styling .footer__navigation__page-btn.disabled{display:none}.vgt-table-styling .vgt-wrap__footer .footer__navigation__page-btn .chevron{width:24px;height:24px;border-radius:15%;position:relative;margin:0 8px}.vgt-table-styling .vgt-wrap__footer .footer__navigation__info,.vgt-table-styling .vgt-wrap__footer .footer__navigation__page-info{display:inline-flex;color:#909399;margin:0 16px;margin-top:0;margin-right:16px;margin-bottom:0;margin-left:16px}.vgt-table-styling .vgt-input{height:23px;line-height:23px;font-size:.9em;width:100%;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:3px;padding:0 10px;margin:0}.vgt-table-styling .vgt-select{height:23px;line-height:23px;font-size:.9em;width:100%;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:3px;padding:0 10px}.vgt-table-styling .schedule tr.today{background-color:#f5f1e4}.vgt-table-styling .schedule tr.soon{background-color:#dfd}.vgt-table-styling .schedule tr.missed{background-color:#fdd}.vgt-table-styling .schedule tr.later{background-color:#bedeed}.vgt-table-styling .schedule tr,.vgt-table-styling .schedule tr a{color:#000}.tooltip-wrapper{float:left;min-width:340px}.invalid{background-color:#ff5b5b}.tooltip{display:block !important;z-index:10000}.tooltip .tooltip-inner{background:#ffef93;color:#555;border-radius:16px;padding:5px 10px 4px;border:1px solid #f1d031;-webkit-box-shadow:1px 1px 3px 1px rgba(0,0,0,.15);-moz-box-shadow:1px 1px 3px 1px rgba(0,0,0,.15);box-shadow:1px 1px 3px 1px rgba(0,0,0,.15)}.tooltip .tooltip-arrow{width:0;height:0;position:absolute;margin:5px;border:1px solid #ffef93;z-index:1}.tooltip[x-placement^=top]{margin-bottom:5px}.tooltip[x-placement^=top] .tooltip-arrow{border-width:5px 5px 0 5px;border-left-color:rgba(0,0,0,0) !important;border-right-color:rgba(0,0,0,0) !important;border-bottom-color:rgba(0,0,0,0) !important;bottom:-5px;left:calc(50% - 4px);margin-top:0;margin-bottom:0}.tooltip[x-placement^=bottom]{margin-top:5px}.tooltip[x-placement^=bottom] .tooltip-arrow{border-width:0 5px 5px 5px;border-left-color:rgba(0,0,0,0) !important;border-right-color:rgba(0,0,0,0) !important;border-top-color:rgba(0,0,0,0) !important;top:-5px;left:calc(50% - 4px);margin-top:0;margin-bottom:0}.tooltip[x-placement^=right]{margin-left:5px}.tooltip[x-placement^=right] .tooltip-arrow{border-width:5px 5px 5px 0;border-left-color:rgba(0,0,0,0) !important;border-top-color:rgba(0,0,0,0) !important;border-bottom-color:rgba(0,0,0,0) !important;left:-4px;top:calc(50% - 5px);margin-left:0;margin-right:0}.tooltip[x-placement^=left]{margin-right:5px}.tooltip[x-placement^=left] .tooltip-arrow{border-width:5px 0 5px 5px;border-top-color:rgba(0,0,0,0) !important;border-right-color:rgba(0,0,0,0) !important;border-bottom-color:rgba(0,0,0,0) !important;right:-4px;top:calc(50% - 5px);margin-left:0;margin-right:0}.tooltip.popover .popover-inner{background:#ffef93;color:#555;padding:24px;border-radius:5px;box-shadow:0 5px 30px rgba(0,0,0,.1)}.tooltip.popover .popover-arrow{border-color:#ffef93}.tooltip[aria-hidden=true]{visibility:hidden;opacity:0;transition:opacity .15s,visibility .15s}.tooltip[aria-hidden=false]{visibility:visible;opacity:1;transition:opacity .15s}.modal-container{border:1px solid #111;box-shadow:0 0 12px 0 rgba(0,0,0,.175);border-radius:0}.modal-header{padding:9px 15px;border-bottom:none;border-radius:0;background-color:#373737}.modal-content{background:#222;border-radius:0;border:1px solid rgba(0,0,0,.2);box-shadow:0 5px 15px rgba(0,0,0,.5);color:#fff}.modal-body{background:#222;overflow-y:auto}.modal-footer{border-top:none;text-align:center}.vue-tags-input{width:273px;border:1px solid #ccc;border-radius:3px}.vue-tags-input .ti-tag{display:inline-flex;width:100%}.vue-tags-input .ti-input{border:none}.vue-tags-input .country-left{margin-right:5px}svg.back-arrow{color:#337ab7;width:20px;height:20px;float:left;margin-right:1em;cursor:pointer}svg.back-arrow:hover,svg.back-arrow:focus{color:#23527c;transform:translateX(-2px);transition:transform ease-in-out .2s}.spin-hover-90:hover{animation:spin-90 .3s linear}@keyframes spin-90{from{transform:rotate(0deg)}to{transform:rotate(90deg)}}#app{padding-top:4rem}@media(max-width: 768px){#app{padding-top:3.8rem}}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/style/vgt-table.scss\",\"webpack://./src/style/v-tooltip.scss\",\"webpack://./src/style/modal.scss\",\"webpack://./src/style/vue-tags.scss\",\"webpack://./src/style/back-arrow.scss\",\"webpack://./src/style/spin.scss\",\"webpack://./src/components/app.vue\"],\"names\":[],\"mappings\":\"AAEI,8BACI,UAAA,CACA,iBAAA,CACA,gBAAA,CACA,eAAA,CACA,gBAAA,CACA,uBAAA,CAEA,kEAEI,WAAA,CACA,qBAAA,CAIJ,0FAEI,gBAAA,CAGJ,iCACI,iBAAA,CACA,wBAAA,CACA,kBAAA,CACA,iBAAA,CAGJ,8CACI,oBAAA,CAGJ,2DACI,2BAAA,CACA,4BAAA,CAGJ,+CACI,2BAAA,CAGJ,4DACI,qBAAA,CACA,wDAAA,CAGJ,2DACI,qBAAA,CACA,wDAAA,CACA,2BAAA,CACA,4BAAA,CAGJ,iDACI,uBAAA,CACA,oBAAA,CACA,eAAA,CACA,wBAAA,CACA,WAAA,CACA,iBAAA,CACA,KAAA,CACA,MAAA,CACA,UAAA,CACA,WAAA,CAGJ,uCACI,WAAA,CACA,cAAA,CAGJ,uDACI,SAAA,CACA,WAAA,CACA,6BAAA,CACA,0BAAA,CACA,qBAAA,CAGJ,mHAEI,iBAAA,CAIJ,qEACI,YAAA,CAGJ,uCACI,iBAAA,CACA,wBAAA,CAGJ,sCACI,oBAAA,CAGJ,gDACI,eAAA,CAGJ,6CACI,cAAA,CACA,eAAA,CAGJ,wCACI,WAAA,CAGJ,uCACI,UAAA,CAMJ,gDACI,UAAA,CAGJ,mDACI,oBAAA,CAEA,kHAEI,yBAAA,CAIR,uCACI,wBAAA,CAGJ,wCACI,wBAAA,CAGJ,0CACI,wBAAA,CAGJ,sCACI,qBAAA,CAGJ,yCACI,wBAAA,CAGJ,wCACI,wBAAA,CAIR,6CACI,aAAA,CACA,iBAAA,CAGJ,+CACI,iBAAA,CAGJ,oCACI,iBAAA,CACA,SAAA,CACA,QAAA,CACA,UAAA,CACA,SAAA,CACA,gCAAA,CAEA,qFAEI,SAAA,CAIR,sCACI,iBAAA,CACA,SAAA,CACA,UAAA,CACA,eAAA,CACA,aAAA,CACA,cAAA,CACA,cAAA,CACA,eAAA,CACA,eAAA,CACA,2BAAA,CACA,iBAAA,CACA,OAAA,CACA,OAAA,CAEA,8CACI,aAAA,CACA,eAAA,CACA,UAAA,CACA,eAAA,CACA,sBAAA,CACA,kBAAA,CAKR,iCACI,YAAA,CACA,sBAAA,CAGJ,qCACI,YAAA,CACA,sBAAA,CAGJ,oDACI,gBAAA,CAGJ,+BACI,UAAA,CACA,oBAAA,CAGJ,mDACI,SAAA,CAGJ,iDACI,SAAA,CACA,iBAAA,CAGJ,oDACI,WAAA,CAGJ,kDACI,WAAA,CACA,iBAAA,CAGJ,qDACI,YAAA,CAGJ,iCACI,0BAAA,CAGJ,qCACI,UAAA,CACA,WAAA,CACA,qBAAA,CACA,iBAAA,CACA,YAAA,CACA,6BAAA,CAGJ,wFAEI,cAAA,CAGJ,6CACI,gBAAA,CAGJ,yDACI,cAAA,CAGJ,mCACI,sBAAA,CAGJ,iDACI,oBAAA,CACA,gBAAA,CACA,eAAA,CACA,cAAA,CACA,gBAAA,CACA,qBAAA,CACA,iBAAA,CAGJ,uDACI,oBAAA,CACA,4BAAA,CACA,wCAAA,CACA,qBAAA,CAGJ,0DACI,YAAA,CAGJ,4EACI,UAAA,CACA,WAAA,CACA,iBAAA,CACA,iBAAA,CACA,YAAA,CAGJ,mIAEI,mBAAA,CACA,aAAA,CACA,aAAA,CACA,YAAA,CACA,iBAAA,CACA,eAAA,CACA,gBAAA,CAGJ,8BACI,WAAA,CACA,gBAAA,CACA,cAAA,CACA,UAAA,CACA,qBAAA,CACA,qBAAA,CACA,qBAAA,CACA,iBAAA,CACA,cAAA,CACA,QAAA,CAGJ,+BACI,WAAA,CACA,gBAAA,CACA,cAAA,CACA,UAAA,CACA,qBAAA,CACA,qBAAA,CACA,qBAAA,CACA,iBAAA,CACA,cAAA,CAIJ,sCACI,wBAAA,CAGJ,qCACI,qBAAA,CAGJ,uCACI,qBAAA,CAGJ,sCACI,wBAAA,CAGJ,kEAEI,UAAA,CCpWR,iBACI,UAAA,CACA,eAAA,CAGJ,SACI,wBARW,CAWf,SACI,wBAAA,CACA,aAAA,CAEA,wBACI,kBAlBO,CAmBP,UAAA,CACA,kBAAA,CACA,oBAAA,CACA,wBAAA,CACA,kDAAA,CACA,+CAAA,CACA,0CAAA,CAGJ,wBACI,OAAA,CACA,QAAA,CACA,iBAAA,CACA,UAAA,CACA,wBAAA,CACA,SAAA,CAKR,2BACI,iBAAA,CACA,0CACI,0BAAA,CACA,0CAAA,CACA,2CAAA,CACA,4CAAA,CACA,WAAA,CACA,oBAAA,CACA,YAAA,CACA,eAAA,CAIR,8BACI,cAAA,CACA,6CACI,0BAAA,CACA,0CAAA,CACA,2CAAA,CACA,yCAAA,CACA,QAAA,CACA,oBAAA,CACA,YAAA,CACA,eAAA,CAIR,6BACI,eAAA,CACA,4CACI,0BAAA,CACA,0CAAA,CACA,yCAAA,CACA,4CAAA,CACA,SAAA,CACA,mBAAA,CACA,aAAA,CACA,cAAA,CAIR,4BACI,gBAAA,CACA,2CACI,0BAAA,CACA,yCAAA,CACA,2CAAA,CACA,4CAAA,CACA,UAAA,CACA,mBAAA,CACA,aAAA,CACA,cAAA,CAKJ,gCACI,kBAjGO,CAkGP,UAAA,CACA,YAAA,CACA,iBAAA,CACA,oCAAA,CAGJ,gCACI,oBAzGO,CA6Gf,2BACI,iBAAA,CACA,SAAA,CACA,uCAAA,CAGJ,4BACI,kBAAA,CACA,SAAA,CACA,uBAAA,CCtHJ,iBACI,qBAAA,CACA,sCAAA,CACA,eAAA,CAGJ,cACI,gBAAA,CACA,kBAAA,CACA,eAAA,CACA,wBAAA,CAGJ,eACI,eAAA,CACA,eAAA,CACA,+BAAA,CACA,oCAAA,CACA,UAAA,CAGJ,YACI,eAAA,CACA,eAAA,CAGJ,cACI,eAAA,CACA,iBAAA,CC7BJ,gBACI,WAAA,CACA,qBAAA,CACA,iBAAA,CAEA,wBACI,mBAAA,CACA,UAAA,CAGJ,0BACI,WAAA,CAGJ,8BACI,gBAAA,CCfR,eACI,aAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CACA,gBAAA,CACA,cAAA,CAGJ,0CAEI,aAAA,CACA,0BAAA,CACA,oCAAA,CCbJ,qBACI,4BAAA,CAGJ,mBACI,KACI,sBAAA,CAGJ,GACI,uBAAA,CAAA,CCDR,KACI,gBAAA,CAGJ,yBACI,KACI,kBAAA,CAAA\",\"sourcesContent\":[\"/** Use this as table styling for all table layouts */\\n.vgt-table-styling {\\n .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 \\n th,\\n td {\\n padding: 4px;\\n vertical-align: middle;\\n }\\n\\n /* remove extra border from left edge */\\n th:first-child,\\n td:first-child {\\n border-left: none;\\n }\\n\\n th {\\n text-align: center;\\n border-collapse: collapse;\\n font-weight: normal;\\n position: relative;\\n }\\n\\n span.break-word {\\n word-wrap: break-word;\\n }\\n\\n thead th.sorting.sorting-asc {\\n background-position-x: right;\\n background-position-y: bottom;\\n }\\n\\n thead th.sorting {\\n background-repeat: no-repeat;\\n }\\n\\n thead th.sorting.sorting-desc {\\n background-color: rgb(85, 85, 85);\\n background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7);\\n }\\n\\n thead th.sorting.sorting-asc {\\n background-color: rgb(85, 85, 85);\\n background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7);\\n background-position-x: right;\\n background-position-y: bottom;\\n }\\n\\n 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\\n thead th {\\n padding: 4px;\\n cursor: default;\\n }\\n\\n 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\\n tr.tablesorter-filter-row,\\n tr.tablesorter-filter-row td {\\n text-align: center;\\n }\\n\\n /* optional disabled input styling */\\n input.tablesorter-filter-row .disabled {\\n display: none;\\n }\\n\\n tfoot tr {\\n text-align: center;\\n border-collapse: collapse;\\n }\\n\\n tfoot a {\\n text-decoration: none;\\n }\\n\\n th.vgt-row-header {\\n text-align: left;\\n }\\n\\n .season-header {\\n display: inline;\\n margin-left: 5px;\\n }\\n\\n tr.spacer {\\n height: 25px;\\n }\\n\\n tr:hover {\\n opacity: 0.9;\\n }\\n\\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 tr.status td > span {\\n color: rgb(0, 0, 0);\\n }\\n\\n span.episode-title > a {\\n text-decoration: none;\\n \\n &:hover,\\n &:focus {\\n text-decoration: underline;\\n }\\n }\\n\\n .skipped {\\n background-color: rgb(190, 222, 237);\\n }\\n \\n .snatched {\\n background-color: rgb(235, 193, 234);\\n }\\n \\n .downloaded {\\n background-color: rgb(255, 218, 138);\\n }\\n \\n .failed {\\n background-color: rgb(255, 153, 153);\\n }\\n \\n .subtitled {\\n background-color: rgb(190, 222, 237);\\n }\\n\\n .archived {\\n background-color: rgb(245, 241, 228);\\n }\\n } \\n\\n .tablesorter-header-inner {\\n padding: 0 2px;\\n text-align: center;\\n }\\n\\n .vgt-dropdown > .button-group {\\n position: relative;\\n }\\n\\n .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 &:hover,\\n &:active {\\n width: 2em;\\n }\\n }\\n\\n .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 > 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 \\n }\\n\\n .align-center {\\n display: flex;\\n justify-content: center;\\n }\\n\\n .span-center > span {\\n display: flex;\\n justify-content: center;\\n }\\n\\n .indexer-image :not(:last-child) {\\n margin-right: 5px;\\n }\\n\\n .button-row {\\n width: 100%;\\n display: inline-block;\\n }\\n\\n .global-ignored td.release span {\\n color: red;\\n }\\n\\n .show-ignored td.release span {\\n color: red;\\n font-style: italic;\\n }\\n\\n .global-required td.release span {\\n color: green;\\n }\\n\\n .show-required td.release span {\\n color: green;\\n font-style: italic;\\n }\\n\\n .global-undesired td.release span {\\n color: orange;\\n }\\n\\n td.col-footer {\\n text-align: left !important;\\n }\\n\\n .vgt-wrap__footer {\\n color: rgb(255, 255, 255);\\n padding: 1em;\\n background-color: rgb(51, 51, 51);\\n margin-bottom: 1em;\\n display: flex;\\n justify-content: space-between;\\n }\\n\\n .footer__row-count,\\n .footer__navigation__page-info {\\n display: inline;\\n }\\n\\n .footer__row-count__label {\\n margin-right: 1em;\\n }\\n\\n .vgt-wrap__footer .footer__navigation {\\n font-size: 14px;\\n }\\n\\n .vgt-pull-right {\\n float: right !important;\\n }\\n\\n .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\\n .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\\n .footer__navigation__page-btn.disabled {\\n display: none;\\n }\\n\\n .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\\n .vgt-wrap__footer .footer__navigation__info,\\n .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\\n .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 \\n .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\\n /* Schedule list layout */\\n .schedule tr.today {\\n background-color: rgb(245, 241, 228);\\n }\\n\\n .schedule tr.soon {\\n background-color: rgb(221, 255, 221);\\n }\\n\\n .schedule tr.missed {\\n background-color: rgb(255, 221, 221);\\n }\\n\\n .schedule tr.later {\\n background-color: rgb(190, 222, 237);\\n }\\n\\n .schedule tr,\\n .schedule tr a {\\n color: rgb(0, 0, 0);\\n }\\n}\",\"// variables\\n$tooltipColor: #ffef93;\\n$tooltipBorderColor: #f1d031;\\n$invalidColor: #ff5b5b;\\n\\n.tooltip-wrapper {\\n float: left;\\n min-width: 340px;\\n}\\n\\n.invalid {\\n background-color: $invalidColor;\\n}\\n\\n.tooltip {\\n display: block !important;\\n z-index: 10000;\\n\\n .tooltip-inner {\\n background: $tooltipColor;\\n color: #555;\\n border-radius: 16px;\\n padding: 5px 10px 4px;\\n border: 1px solid $tooltipBorderColor;\\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\\n .tooltip-arrow {\\n width: 0;\\n height: 0;\\n position: absolute;\\n margin: 5px;\\n border: 1px solid $tooltipColor;\\n z-index: 1;\\n }\\n\\n}\\n\\n.tooltip[x-placement^='top'] {\\n margin-bottom: 5px;\\n .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}\\n\\n.tooltip[x-placement^='bottom'] {\\n margin-top: 5px;\\n .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}\\n\\n.tooltip[x-placement^='right'] {\\n margin-left: 5px;\\n .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}\\n\\n.tooltip[x-placement^='left'] {\\n margin-right: 5px;\\n .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}\\n\\n.tooltip.popover {\\n .popover-inner {\\n background: $tooltipColor;\\n color: #555;\\n padding: 24px;\\n border-radius: 5px;\\n box-shadow: 0 5px 30px rgba(black, 0.1);\\n }\\n\\n .popover-arrow {\\n border-color: $tooltipColor;\\n }\\n}\\n\\n.tooltip[aria-hidden='true'] {\\n visibility: hidden;\\n opacity: 0;\\n transition: opacity 0.15s, visibility 0.15s;\\n}\\n\\n.tooltip[aria-hidden='false'] {\\n visibility: visible;\\n opacity: 1;\\n transition: opacity 0.15s;\\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 rgb(17, 17, 17);\\n box-shadow: 0 0 12px 0 rgba(0, 0, 0, 0.175);\\n border-radius: 0;\\n}\\n\\n.modal-header {\\n padding: 9px 15px;\\n border-bottom: none;\\n border-radius: 0;\\n background-color: rgb(55, 55, 55);\\n}\\n\\n.modal-content {\\n background: rgb(34, 34, 34);\\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\\n.modal-body {\\n background: rgb(34, 34, 34);\\n overflow-y: auto;\\n}\\n\\n.modal-footer {\\n border-top: none;\\n text-align: center;\\n}\\n\",\".vue-tags-input {\\n width: 273px;\\n border: 1px solid rgb(204, 204, 204);\\n border-radius: 3px;\\n\\n .ti-tag {\\n display: inline-flex;\\n width: 100%;\\n }\\n\\n .ti-input {\\n border: none;\\n }\\n\\n .country-left {\\n margin-right: 5px;\\n }\\n}\",\"svg.back-arrow {\\n color: #337ab7;\\n width: 20px;\\n height: 20px;\\n float: left;\\n margin-right: 1em;\\n cursor: pointer;\\n}\\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}\",\".spin-hover-90:hover {\\n animation: spin-90 0.3s linear;\\n}\\n\\n@keyframes spin-90 {\\n from {\\n transform: rotate(0deg);\\n }\\n\\n to {\\n transform: rotate(90deg);\\n }\\n}\\n\",\"\\n/* Global style definitions should go here. */\\n@use '../style/vgt-table.scss';\\n@use '../style/v-tooltip.scss';\\n@use '../style/modal.scss';\\n@use '../style/vue-tags.scss';\\n@use '../style/back-arrow.scss';\\n@use '../style/spin.scss';\\n\\n#app {\\n padding-top: 4rem;\\n}\\n\\n@media (max-width: 768px) {\\n #app {\\n padding-top: 3.8rem;\\n }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\ndiv.anidb-release-group-ui-wrapper[data-v-5721f056] {\n clear: both;\n margin-bottom: 20px;\n}\ndiv.anidb-release-group-ui-wrapper ul[data-v-5721f056] {\n border-style: solid;\n border-width: thin;\n padding: 5px 2px 2px 5px;\n list-style: none;\n}\ndiv.anidb-release-group-ui-wrapper li.active[data-v-5721f056] {\n background-color: cornflowerblue;\n}\ndiv.anidb-release-group-ui-wrapper div.arrow img[data-v-5721f056] {\n cursor: pointer;\n height: 32px;\n width: 32px;\n}\ndiv.anidb-release-group-ui-wrapper img.deleteFromWhitelist[data-v-5721f056],\ndiv.anidb-release-group-ui-wrapper img.deleteFromBlacklist[data-v-5721f056] {\n float: right;\n}\ndiv.anidb-release-group-ui-wrapper #add-new-release-group p > img[data-v-5721f056] {\n height: 16px;\n width: 16px;\n background-color: rgb(204, 204, 204);\n}\ndiv.anidb-release-group-ui-wrapper.placeholder[data-v-5721f056] {\n height: 32px;\n}\ndiv.anidb-release-group-ui-wrapper.max-width[data-v-5721f056] {\n max-width: 960px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/anidb-release-group-ui.vue\"],\"names\":[],\"mappings\":\";AAmOA;IACA,WAAA;IACA,mBAAA;AACA;AAEA;IACA,mBAAA;IACA,kBAAA;IACA,wBAAA;IACA,gBAAA;AACA;AAEA;IACA,gCAAA;AACA;AAEA;IACA,eAAA;IACA,YAAA;IACA,WAAA;AACA;AAEA;;IAEA,YAAA;AACA;AAEA;IACA,YAAA;IACA,WAAA;IACA,oCAAA;AACA;AAEA;IACA,YAAA;AACA;AAEA;IACA,gBAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_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`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/app-header.vue\"],\"names\":[],\"mappings\":\";AAiUA;IACA,kBAAA;IACA,SAAA;IACA,WAAA;IACA,cAAA;IACA,sBAAA;IACA,yBAAA;IACA,oBAAA;IACA,eAAA;IACA,iBAAA;IACA,qBAAA;IACA,YAAA;AACA;AAEA;IACA,gBAAA;AACA;AAEA;AACA;QACA,gBAAA;AACA;AAEA;QACA,kBAAA;AACA;AAEA;QACA,kBAAA;AACA;AAEA;QACA,aAAA;QACA,kCAAA;AACA;AAEA;QACA,4BAAA;AACA;AACA;AAEA;IACA,kBAAA;IACA,WAAA;IACA,cAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n#filter-indexers[data-v-6885b38d] {\n float: right;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/change-indexer.vue\"],\"names\":[],\"mappings\":\";AA6KA;IACA,YAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.display-inline[data-v-30441dd8] {\n display: inline;\n}\n.radio-item[data-v-30441dd8] {\n display: block;\n}\n.multiselect[data-v-30441dd8] {\n margin-bottom: 10px;\n}\n.margin-bottom-10[data-v-30441dd8] {\n margin-bottom: 10px;\n}\n.plotInfo[data-v-30441dd8] {\n cursor: help;\n float: right;\n position: relative;\n top: 2px;\n}\n.plotInfoNone[data-v-30441dd8] {\n cursor: help;\n float: right;\n position: relative;\n top: 2px;\n opacity: 0.4;\n}\n.v-popover[data-v-30441dd8] {\n display: inline;\n}\n.tooltip-base[data-v-30441dd8] {\n position: relative;\n display: inline-block !important;\n z-index: 999;\n max-width: 276px;\n padding: 1px;\n font-family: Helvetica Neue, Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n line-height: 1.42857143;\n line-break: auto;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n white-space: normal;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n}\n.tooltip-base.tooltip-themed-dark[data-v-30441dd8] {\n background-color: rgb(51, 51, 51);\n border-color: #111;\n}\n.tooltip-base .tooltip-inner[data-v-30441dd8] {\n background-color: inherit;\n color: inherit;\n text-align: inherit;\n max-width: inherit;\n padding: 0;\n border-radius: 6px;\n}\n.tooltip-title[data-v-30441dd8] {\n padding: 8px 14px;\n margin: 0;\n border-radius: 5px 5px 0 0;\n}\n.tooltip-content[data-v-30441dd8] {\n padding: 9px 14px;\n margin: 0;\n}\n.tooltip-themed-dark .tooltip-title[data-v-30441dd8] {\n background-color: rgb(35, 35, 35);\n border-bottom-color: #111;\n}\n.tooltip-themed-light .tooltip-title[data-v-30441dd8] {\n padding: 8px 14px;\n margin: 0;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.tooltip-base[x-placement^=\"left\"][data-v-30441dd8]::after,\n.tooltip-base[x-placement^=\"left\"][data-v-30441dd8]::before {\n left: 100%;\n top: 50%;\n border: solid transparent;\n content: \" \";\n height: 0;\n width: 0;\n position: absolute;\n pointer-events: none;\n}\n.tooltip-base[x-placement^=\"left\"][data-v-30441dd8]::after {\n border-color: rgba(255, 255, 255, 0);\n border-left-color: #fff;\n border-width: 11px;\n margin-top: -11px;\n content: \" \";\n}\n.tooltip-base[x-placement^=\"left\"][data-v-30441dd8]::before {\n border-color: rgba(0, 0, 0, 0);\n border-left-color: rgba(0, 0, 0, 0.2);\n border-width: 12px;\n margin-top: -12px;\n content: \" \";\n}\n.tooltip-base[x-placement^=\"right\"][data-v-30441dd8]::after,\n.tooltip-base[x-placement^=\"right\"][data-v-30441dd8]::before {\n right: 100%;\n top: 50%;\n border: solid transparent;\n content: \" \";\n height: 0;\n width: 0;\n position: absolute;\n pointer-events: none;\n}\n.tooltip-base[x-placement^=\"right\"][data-v-30441dd8]::after {\n border-color: rgba(255, 255, 255, 0);\n border-right-color: #fff;\n border-width: 11px;\n margin-top: -11px;\n content: \" \";\n}\n.tooltip-base[x-placement^=\"right\"][data-v-30441dd8]::before {\n border-color: rgba(0, 0, 0, 0);\n border-right-color: rgba(0, 0, 0, 0.2);\n border-width: 12px;\n margin-top: -12px;\n content: \" \";\n}\n\n/* The background of the arrow, the outline */\n.tooltip-themed-dark[x-placement^=\"left\"][data-v-30441dd8]::before {\n border-left-color: #000 !important;\n}\n\n/* The background of the arrow, the outline */\n.tooltip-themed-dark[x-placement^=\"right\"][data-v-30441dd8]::before {\n border-right-color: #000 !important;\n}\n\n/* The foreground of the arrow, the filling */\n.tooltip-themed-dark[x-placement^=\"left\"][data-v-30441dd8]::after {\n border-left-color: rgb(51, 51, 51) !important;\n}\n\n/* The foreground of the arrow, the filling */\n.tooltip-themed-dark[x-placement^=\"right\"][data-v-30441dd8]::after {\n border-right-color: rgb(51, 51, 51) !important;\n}\n.tooltip-arrow[data-v-30441dd8] {\n display: none;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/config-general.vue\"],\"names\":[],\"mappings\":\";AAw/BA;IACA,eAAA;AACA;AAEA;IACA,cAAA;AACA;AAEA;IACA,mBAAA;AACA;AAEA;IACA,mBAAA;AACA;AAEA;IACA,YAAA;IACA,YAAA;IACA,kBAAA;IACA,QAAA;AACA;AAEA;IACA,YAAA;IACA,YAAA;IACA,kBAAA;IACA,QAAA;IACA,YAAA;AACA;AAEA;IACA,eAAA;AACA;AAEA;IACA,kBAAA;IACA,gCAAA;IACA,YAAA;IACA,gBAAA;IACA,YAAA;IACA,yDAAA;IACA,kBAAA;IACA,gBAAA;IACA,eAAA;IACA,uBAAA;IACA,gBAAA;IACA,iBAAA;IACA,qBAAA;IACA,iBAAA;IACA,oBAAA;IACA,sBAAA;IACA,kBAAA;IACA,oBAAA;IACA,iBAAA;IACA,mBAAA;IACA,sBAAA;IACA,4BAAA;IACA,oCAAA;IACA,kBAAA;IACA,yCAAA;AACA;AAEA;IACA,iCAAA;IACA,kBAAA;AACA;AAEA;IACA,yBAAA;IACA,cAAA;IACA,mBAAA;IACA,kBAAA;IACA,UAAA;IACA,kBAAA;AACA;AAEA;IACA,iBAAA;IACA,SAAA;IACA,0BAAA;AACA;AAEA;IACA,iBAAA;IACA,SAAA;AACA;AAEA;IACA,iCAAA;IACA,yBAAA;AACA;AAEA;IACA,iBAAA;IACA,SAAA;IACA,eAAA;IACA,yBAAA;IACA,gCAAA;IACA,0BAAA;AACA;AAEA;;IAEA,UAAA;IACA,QAAA;IACA,yBAAA;IACA,YAAA;IACA,SAAA;IACA,QAAA;IACA,kBAAA;IACA,oBAAA;AACA;AAEA;IACA,oCAAA;IACA,uBAAA;IACA,kBAAA;IACA,iBAAA;IACA,YAAA;AACA;AAEA;IACA,8BAAA;IACA,qCAAA;IACA,kBAAA;IACA,iBAAA;IACA,YAAA;AACA;AAEA;;IAEA,WAAA;IACA,QAAA;IACA,yBAAA;IACA,YAAA;IACA,SAAA;IACA,QAAA;IACA,kBAAA;IACA,oBAAA;AACA;AAEA;IACA,oCAAA;IACA,wBAAA;IACA,kBAAA;IACA,iBAAA;IACA,YAAA;AACA;AAEA;IACA,8BAAA;IACA,sCAAA;IACA,kBAAA;IACA,iBAAA;IACA,YAAA;AACA;;AAEA,6CAAA;AACA;IACA,kCAAA;AACA;;AAEA,6CAAA;AACA;IACA,mCAAA;AACA;;AAEA,8CAAA;AACA;IACA,6CAAA;AACA;;AAEA,8CAAA;AACA;IACA,8CAAA;AACA;AAEA;IACA,aAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.metadata {\n padding-left: 20px;\n display: flex;\n}\n.metadata-options-wrapper {\n min-width: 190px;\n}\n.metadata-example-wrapper {\n width: 325px;\n margin-left: 4em;\n}\n@media (max-width: 480px) {\n.metadata {\n flex-direction: column;\n}\n.metadata-example-wrapper {\n margin-left: 0;\n}\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/config-post-processing.vue\"],\"names\":[],\"mappings\":\";AA0hBA;IACA,kBAAA;IACA,aAAA;AACA;AAEA;IACA,gBAAA;AACA;AAEA;IACA,YAAA;IACA,gBAAA;AACA;AAEA;AACA;QACA,sBAAA;AACA;AAEA;QACA,cAAA;AACA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\nul.extra-scripts {\n padding: 0;\n margin-left: 15px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/config-subtitles.vue\"],\"names\":[],\"mappings\":\";AA8OA;IACA,UAAA;IACA,iBAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.infoTable tr td[data-v-0e222bd8]:first-child {\n vertical-align: top;\n}\npre[data-v-0e222bd8] {\n padding: 5px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/config.vue\"],\"names\":[],\"mappings\":\";AAmEA;IACA,mBAAA;AACA;AAEA;IACA,YAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.defaultTable.displayShow[data-v-0711c5e4] {\n clear: both;\n}\n.displayShowTable.displayShow[data-v-0711c5e4] {\n clear: both;\n}\n.fanartBackground.displayShow[data-v-0711c5e4] {\n clear: both;\n opacity: 0.9;\n}\n.fanartBackground table[data-v-0711c5e4] {\n table-layout: auto;\n width: 100%;\n border-collapse: collapse;\n border-spacing: 0;\n text-align: center;\n border: none;\n empty-cells: show;\n color: rgb(0, 0, 0) !important;\n}\n.summaryFanArt[data-v-0711c5e4] {\n opacity: 0.9;\n}\n.fanartBackground > table th.vgt-row-header[data-v-0711c5e4] {\n border: none !important;\n background-color: transparent !important;\n color: rgb(255, 255, 255) !important;\n padding-top: 15px !important;\n text-align: left !important;\n}\n.fanartBackground td.col-search[data-v-0711c5e4] {\n text-align: center;\n}\n\n/* Trying to migrate this from tablesorter */\n\n/* =======================================================================\ntablesorter.css\n========================================================================== */\n.displayShow[data-v-0711c5e4] .vgt-global-search__input.vgt-pull-left {\n float: left;\n height: 40px;\n}\n.displayShow[data-v-0711c5e4] .vgt-input {\n border: 1px solid #ccc;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.displayShow[data-v-0711c5e4] div.vgt-responsive > table tbody > tr > th.vgt-row-header > span {\n font-size: 24px;\n margin-top: 20px;\n margin-bottom: 10px;\n}\n.displayShow[data-v-0711c5e4] .vgt-table {\n width: 100%;\n margin-right: auto;\n margin-left: auto;\n color: rgb(0, 0, 0);\n text-align: left;\n border-spacing: 0;\n border-collapse: initial;\n}\n.displayShow[data-v-0711c5e4] .vgt-table th,\n.displayShow[data-v-0711c5e4] .vgt-table td {\n padding: 4px;\n border-top: rgb(34, 34, 34) 1px solid;\n border-left: rgb(34, 34, 34) 1px solid;\n vertical-align: middle;\n}\n\n/* remove extra border from left edge */\n.displayShow[data-v-0711c5e4] .vgt-table th:first-child,\n.displayShow[data-v-0711c5e4] .vgt-table td:first-child {\n border-left: none;\n}\n.displayShow[data-v-0711c5e4] .vgt-table span.break-word {\n word-wrap: break-word;\n}\n.displayShow[data-v-0711c5e4] .vgt-table thead th.sorting.sorting-desc {\n background-color: rgb(85, 85, 85);\n background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7);\n}\n.displayShow[data-v-0711c5e4] .vgt-table thead th.sorting.sorting-asc {\n background-color: rgb(85, 85, 85);\n background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7);\n background-position-x: right;\n background-position-y: bottom;\n}\n.displayShow[data-v-0711c5e4] .vgt-table th {\n text-align: center;\n text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.3);\n background-color: rgb(51, 51, 51);\n white-space: nowrap;\n color: rgb(255, 255, 255);\n border-collapse: collapse;\n font-weight: normal;\n position: relative;\n background-image: none;\n padding: 4px;\n cursor: default;\n}\n.displayShow[data-v-0711c5e4] .vgt-table thead 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.displayShow[data-v-0711c5e4] .vgt-table thead th.sorting {\n background-repeat: no-repeat;\n}\n.displayShow[data-v-0711c5e4] .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.displayShow[data-v-0711c5e4] .vgt-table tr.tablesorter-filter-row,\n.displayShow[data-v-0711c5e4] .vgt-table tr.tablesorter-filter-row td {\n text-align: center;\n}\n\n/* optional disabled input styling */\n.displayShow[data-v-0711c5e4] .vgt-table input.tablesorter-filter-row .disabled {\n display: none;\n}\n.tablesorter-header-inner[data-v-0711c5e4] {\n padding: 0 2px;\n text-align: center;\n}\n.displayShow[data-v-0711c5e4] .vgt-table tfoot tr {\n color: rgb(255, 255, 255);\n text-align: center;\n text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.3);\n background-color: rgb(51, 51, 51);\n border-collapse: collapse;\n}\n.displayShow[data-v-0711c5e4] .vgt-table tfoot a {\n color: rgb(255, 255, 255);\n text-decoration: none;\n}\n.displayShow[data-v-0711c5e4] .vgt-table th.vgt-row-header {\n text-align: left;\n}\n.displayShow[data-v-0711c5e4] .vgt-table .season-header {\n display: inline;\n margin-left: 5px;\n}\n.displayShow[data-v-0711c5e4] .vgt-table tr.spacer {\n height: 25px;\n}\n.displayShow[data-v-0711c5e4] .vgt-table tr:hover {\n opacity: 0.9;\n}\n.displayShow[data-v-0711c5e4] .unaired {\n background-color: rgb(245, 241, 228);\n}\n.displayShow[data-v-0711c5e4] .skipped {\n background-color: rgb(190, 222, 237);\n}\n.displayShow[data-v-0711c5e4] .preferred {\n background-color: rgb(195, 227, 200);\n}\n.displayShow[data-v-0711c5e4] .archived {\n background-color: rgb(195, 227, 200);\n}\n.displayShow[data-v-0711c5e4] .allowed {\n background-color: rgb(255, 218, 138);\n}\n.displayShow[data-v-0711c5e4] .wanted {\n background-color: rgb(255, 176, 176);\n}\n.displayShow[data-v-0711c5e4] .snatched {\n background-color: rgb(235, 193, 234);\n}\n.displayShow[data-v-0711c5e4] .downloaded {\n background-color: rgb(255, 218, 138);\n}\n.displayShow[data-v-0711c5e4] .failed {\n background-color: rgb(255, 153, 153);\n}\n.displayShow[data-v-0711c5e4] span.unaired {\n color: rgb(88, 75, 32);\n}\n.displayShow[data-v-0711c5e4] span.skipped {\n color: rgb(29, 80, 104);\n}\n.displayShow[data-v-0711c5e4] span.preffered {\n color: rgb(41, 87, 48);\n}\n.displayShow[data-v-0711c5e4] span.allowed {\n color: rgb(118, 81, 0);\n}\n.displayShow[data-v-0711c5e4] span.wanted {\n color: rgb(137, 0, 0);\n}\n.displayShow[data-v-0711c5e4] span.snatched {\n color: rgb(101, 33, 100);\n}\n.displayShow[data-v-0711c5e4] span.unaired b,\n.displayShow[data-v-0711c5e4] span.skipped b,\n.displayShow[data-v-0711c5e4] span.preferred b,\n.displayShow[data-v-0711c5e4] span.allowed b,\n.displayShow[data-v-0711c5e4] span.wanted b,\n.displayShow[data-v-0711c5e4] span.snatched b {\n color: rgb(0, 0, 0);\n font-weight: 800;\n}\n.mobile-select[data-v-0711c5e4] {\n width: 110px;\n font-size: x-small;\n}\ntd.col-footer[data-v-0711c5e4] {\n text-align: left !important;\n}\n.displayShow[data-v-0711c5e4] .vgt-wrap__footer {\n color: rgb(255, 255, 255);\n padding: 1em;\n background-color: rgb(51, 51, 51);\n margin-bottom: 1em;\n display: flex;\n justify-content: space-between;\n}\n.displayShow[data-v-0711c5e4] .footer__row-count,\n.displayShow[data-v-0711c5e4] .footer__navigation__page-info {\n display: inline;\n}\n.displayShow[data-v-0711c5e4] .footer__row-count__label {\n margin-right: 1em;\n}\n.displayShow[data-v-0711c5e4] .vgt-wrap__footer .footer__navigation {\n font-size: 14px;\n}\n.displayShow[data-v-0711c5e4] .vgt-pull-right {\n float: right !important;\n}\n.displayShow[data-v-0711c5e4] .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.displayShow[data-v-0711c5e4] .vgt-wrap__footer .footer__navigation__info,\n.displayShow[data-v-0711c5e4] .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.select-info span[data-v-0711c5e4] {\n margin-left: 5px;\n line-height: 40px;\n}\n.subtitles > div[data-v-0711c5e4] {\n float: left;\n}\n.subtitles > div[data-v-0711c5e4]:not(:last-child) {\n margin-right: 2px;\n}\n.displayShow[data-v-0711c5e4] .vgt-dropdown > .button-group {\n position: relative;\n}\n.displayShow[data-v-0711c5e4] .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.displayShow[data-v-0711c5e4] .dropdown-toggle:hover,\n.displayShow[data-v-0711c5e4] .dropdown-toggle:active {\n width: 2em;\n}\n.displayShow[data-v-0711c5e4] .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.displayShow[data-v-0711c5e4] .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`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/display-show.vue\"],\"names\":[],\"mappings\":\";AAugCA;IACA,WAAA;AACA;AAEA;IACA,WAAA;AACA;AAEA;IACA,WAAA;IACA,YAAA;AACA;AAEA;IACA,kBAAA;IACA,WAAA;IACA,yBAAA;IACA,iBAAA;IACA,kBAAA;IACA,YAAA;IACA,iBAAA;IACA,8BAAA;AACA;AAEA;IACA,YAAA;AACA;AAEA;IACA,uBAAA;IACA,wCAAA;IACA,oCAAA;IACA,4BAAA;IACA,2BAAA;AACA;AAEA;IACA,kBAAA;AACA;;AAEA,4CAAA;;AAEA;;4EAEA;AAEA;IACA,WAAA;IACA,YAAA;AACA;AAEA;IACA,sBAAA;IACA,8GAAA;IACA,YAAA;IACA,iBAAA;IACA,eAAA;IACA,gBAAA;IACA,kBAAA;AACA;AAEA;IACA,eAAA;IACA,gBAAA;IACA,mBAAA;AACA;AAEA;IACA,WAAA;IACA,kBAAA;IACA,iBAAA;IACA,mBAAA;IACA,gBAAA;IACA,iBAAA;IACA,wBAAA;AACA;AAEA;;IAEA,YAAA;IACA,qCAAA;IACA,sCAAA;IACA,sBAAA;AACA;;AAEA,uCAAA;AACA;;IAEA,iBAAA;AACA;AAEA;IACA,qBAAA;AACA;AAEA;IACA,iCAAA;IACA,qHAAA;AACA;AAEA;IACA,iCAAA;IACA,qHAAA;IACA,4BAAA;IACA,6BAAA;AACA;AAEA;IACA,kBAAA;IACA,2CAAA;IACA,iCAAA;IACA,mBAAA;IACA,yBAAA;IACA,yBAAA;IACA,mBAAA;IACA,kBAAA;IACA,sBAAA;IACA,YAAA;IACA,eAAA;AACA;AAEA;IACA,wBAAA;IACA,qBAAA;IACA,gBAAA;IACA,uBAAA;IACA,YAAA;IACA,kBAAA;IACA,MAAA;IACA,OAAA;IACA,WAAA;IACA,YAAA;AACA;AAEA;IACA,4BAAA;AACA;AAEA;IACA,UAAA;IACA,YAAA;IACA,8BAAA;IACA,2BAAA;IACA,sBAAA;AACA;AAEA;;IAEA,kBAAA;AACA;;AAEA,oCAAA;AACA;IACA,aAAA;AACA;AAEA;IACA,cAAA;IACA,kBAAA;AACA;AAEA;IACA,yBAAA;IACA,kBAAA;IACA,2CAAA;IACA,iCAAA;IACA,yBAAA;AACA;AAEA;IACA,yBAAA;IACA,qBAAA;AACA;AAEA;IACA,gBAAA;AACA;AAEA;IACA,eAAA;IACA,gBAAA;AACA;AAEA;IACA,YAAA;AACA;AAEA;IACA,YAAA;AACA;AAEA;IACA,oCAAA;AACA;AAEA;IACA,oCAAA;AACA;AAEA;IACA,oCAAA;AACA;AAEA;IACA,oCAAA;AACA;AAEA;IACA,oCAAA;AACA;AAEA;IACA,oCAAA;AACA;AAEA;IACA,oCAAA;AACA;AAEA;IACA,oCAAA;AACA;AAEA;IACA,oCAAA;AACA;AAEA;IACA,sBAAA;AACA;AAEA;IACA,uBAAA;AACA;AAEA;IACA,sBAAA;AACA;AAEA;IACA,sBAAA;AACA;AAEA;IACA,qBAAA;AACA;AAEA;IACA,wBAAA;AACA;AAEA;;;;;;IAMA,mBAAA;IACA,gBAAA;AACA;AAEA;IACA,YAAA;IACA,kBAAA;AACA;AAEA;IACA,2BAAA;AACA;AAEA;IACA,yBAAA;IACA,YAAA;IACA,iCAAA;IACA,kBAAA;IACA,aAAA;IACA,8BAAA;AACA;AAEA;;IAEA,eAAA;AACA;AAEA;IACA,iBAAA;AACA;AAEA;IACA,eAAA;AACA;AAEA;IACA,uBAAA;AACA;AAEA;IACA,WAAA;IACA,YAAA;IACA,kBAAA;IACA,kBAAA;IACA,aAAA;AACA;AAEA;;IAEA,oBAAA;IACA,cAAA;IACA,cAAA;IACA,aAAA;IACA,kBAAA;IACA,gBAAA;IACA,iBAAA;AACA;AAEA;IACA,gBAAA;IACA,iBAAA;AACA;AAEA;IACA,WAAA;AACA;AAEA;IACA,iBAAA;AACA;AAEA;IACA,kBAAA;AACA;AAEA;IACA,kBAAA;IACA,UAAA;IACA,UAAA;IACA,YAAA;IACA,UAAA;IACA,kCAAA;AACA;AAEA;;IAEA,UAAA;AACA;AAEA;IACA,kBAAA;IACA,UAAA;IACA,WAAA;IACA,gBAAA;IACA,cAAA;IACA,eAAA;IACA,eAAA;IACA,gBAAA;IACA,gBAAA;IACA,4BAAA;IACA,kBAAA;IACA,QAAA;IACA,QAAA;AACA;AAEA;IACA,cAAA;IACA,gBAAA;IACA,WAAA;IACA,gBAAA;IACA,uBAAA;IACA,mBAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n/*\n@NOTE: This fixes the header blocking elements when using a hash link\ne.g. displayShow?showslug=tvdb83462#season-5\n*/\n[false-link]::before {\n content: '';\n display: block;\n position: absolute;\n height: 100px;\n margin-top: -100px;\n z-index: -100;\n}\n.router-link,\n.router-link-active {\n cursor: pointer;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/app-link.vue\"],\"names\":[],\"mappings\":\";AAoKA;;;CAGA;AACA;IACA,WAAA;IACA,cAAA;IACA,kBAAA;IACA,aAAA;IACA,kBAAA;IACA,aAAA;AACA;AAEA;;IAEA,eAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.width-40[data-v-ad0dcc86] {\n width: 40px;\n}\n.width-50[data-v-ad0dcc86] {\n width: 50px;\n}\n\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/asset.vue\"],\"names\":[],\"mappings\":\";AAgGA;IACA,WAAA;AACA;AAEA;IACA,WAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.warning-enter-active[data-v-5c3e11ee],\n.warning-leave-active[data-v-5c3e11ee] {\n -moz-transition-duration: 0.3s;\n -webkit-transition-duration: 0.3s;\n -o-transition-duration: 0.3s;\n transition-duration: 0.3s;\n -moz-transition-timing-function: ease-in;\n -webkit-transition-timing-function: ease-in;\n -o-transition-timing-function: ease-in;\n transition-timing-function: ease-in;\n}\n.warning-enter-to[data-v-5c3e11ee],\n.warning-leave[data-v-5c3e11ee] {\n max-height: 100%;\n}\n.warning-enter[data-v-5c3e11ee],\n.warning-leave-to[data-v-5c3e11ee] {\n max-height: 0;\n}\n.warning[data-v-5c3e11ee] {\n display: block;\n overflow: hidden;\n width: 100%;\n position: absolute;\n left: 0;\n background-color: #e23636;\n padding: 0 2px 0 2px;\n}\n.manager-note[data-v-5c3e11ee] {\n margin: 5px 0;\n padding: 10px;\n border: 1px solid #ccc;\n}\n.manager-note > img[data-v-5c3e11ee] {\n width: 16px;\n padding-bottom: 4px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/config-custom-newznab.vue\"],\"names\":[],\"mappings\":\";AAwOA;;IAEA,8BAAA;IACA,iCAAA;IACA,4BAAA;IACA,yBAAA;IACA,wCAAA;IACA,2CAAA;IACA,sCAAA;IACA,mCAAA;AACA;AAEA;;IAEA,gBAAA;AACA;AAEA;;IAEA,aAAA;AACA;AAEA;IACA,cAAA;IACA,gBAAA;IACA,WAAA;IACA,kBAAA;IACA,OAAA;IACA,yBAAA;IACA,oBAAA;AACA;AAEA;IACA,aAAA;IACA,aAAA;IACA,sBAAA;AACA;AAEA;IACA,WAAA;IACA,mBAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.testresult[data-v-8373d546] {\n display: inline-block;\n border-style: solid;\n border-width: 1px;\n padding: 1px 4px 4px 4px;\n border-color: #ccc;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/config-custom-prowlarr.vue\"],\"names\":[],\"mappings\":\";AA+MA;IACA,qBAAA;IACA,mBAAA;IACA,iBAAA;IACA,wBAAA;IACA,kBAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.warning-enter-active[data-v-26f7d7fa],\n.warning-leave-active[data-v-26f7d7fa] {\n -moz-transition-duration: 0.3s;\n -webkit-transition-duration: 0.3s;\n -o-transition-duration: 0.3s;\n transition-duration: 0.3s;\n -moz-transition-timing-function: ease-in;\n -webkit-transition-timing-function: ease-in;\n -o-transition-timing-function: ease-in;\n transition-timing-function: ease-in;\n}\n.warning-enter-to[data-v-26f7d7fa],\n.warning-leave[data-v-26f7d7fa] {\n max-height: 100%;\n}\n.warning-enter[data-v-26f7d7fa],\n.warning-leave-to[data-v-26f7d7fa] {\n max-height: 0;\n}\n.warning[data-v-26f7d7fa] {\n display: block;\n overflow: hidden;\n width: 100%;\n position: absolute;\n left: 0;\n background-color: #e23636;\n padding: 0 2px 0 2px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/config-custom-torrentrss.vue\"],\"names\":[],\"mappings\":\";AA+JA;;IAEA,8BAAA;IACA,iCAAA;IACA,4BAAA;IACA,yBAAA;IACA,wCAAA;IACA,2CAAA;IACA,sCAAA;IACA,mCAAA;AACA;AAEA;;IAEA,gBAAA;AACA;AAEA;;IAEA,aAAA;AACA;AAEA;IACA,cAAA;IACA,gBAAA;IACA,WAAA;IACA,kBAAA;IACA,OAAA;IACA,yBAAA;IACA,oBAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.warning-enter-active[data-v-2a24e1e0],\n.warning-leave-active[data-v-2a24e1e0] {\n -moz-transition-duration: 0.3s;\n -webkit-transition-duration: 0.3s;\n -o-transition-duration: 0.3s;\n transition-duration: 0.3s;\n -moz-transition-timing-function: ease-in;\n -webkit-transition-timing-function: ease-in;\n -o-transition-timing-function: ease-in;\n transition-timing-function: ease-in;\n}\n.warning-enter-to[data-v-2a24e1e0],\n.warning-leave[data-v-2a24e1e0] {\n max-height: 100%;\n}\n.warning-enter[data-v-2a24e1e0],\n.warning-leave-to[data-v-2a24e1e0] {\n max-height: 0;\n}\n.warning[data-v-2a24e1e0] {\n display: block;\n overflow: hidden;\n width: 100%;\n position: absolute;\n left: 0;\n background-color: #e23636;\n padding: 0 2px 0 2px;\n z-index: 1;\n}\n.manager-note[data-v-2a24e1e0] {\n margin: 5px 0;\n padding: 10px;\n border: 1px solid #ccc;\n}\n.manager-note > img[data-v-2a24e1e0] {\n width: 16px;\n padding-bottom: 4px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/config-custom-torznab.vue\"],\"names\":[],\"mappings\":\";AAsOA;;IAEA,8BAAA;IACA,iCAAA;IACA,4BAAA;IACA,yBAAA;IACA,wCAAA;IACA,2CAAA;IACA,sCAAA;IACA,mCAAA;AACA;AAEA;;IAEA,gBAAA;AACA;AAEA;;IAEA,aAAA;AACA;AAEA;IACA,cAAA;IACA,gBAAA;IACA,WAAA;IACA,kBAAA;IACA,OAAA;IACA,yBAAA;IACA,oBAAA;IACA,UAAA;AACA;AAEA;IACA,aAAA;IACA,aAAA;IACA,sBAAA;AACA;AAEA;IACA,WAAA;IACA,mBAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\ndiv.select-list ul[data-v-2cd053b2] {\n padding-left: 0;\n}\ndiv.select-list li[data-v-2cd053b2] {\n list-style-type: none;\n display: flex;\n}\ndiv.select-list .new-item[data-v-2cd053b2] {\n display: flex;\n}\ndiv.select-list .new-item-help[data-v-2cd053b2] {\n font-weight: bold;\n padding-top: 5px;\n}\ndiv.select-list input[data-v-2cd053b2],\ndiv.select-list img[data-v-2cd053b2] {\n display: inline-block;\n box-sizing: border-box;\n}\ndiv.select-list.max-width[data-v-2cd053b2] {\n max-width: 450px;\n}\ndiv.select-list .switch-input[data-v-2cd053b2] {\n left: -8px;\n top: 4px;\n position: absolute;\n z-index: 10;\n opacity: 0.6;\n}\n.form-inline[data-v-2cd053b2] {\n display: contents;\n}\n.select-season[data-v-2cd053b2] {\n height: 30px;\n padding: 0 3px 0 2px;\n}\n.select-season[disabled=disabled][data-v-2cd053b2] {\n background-color: #eee;\n}\n.external-scene-exception[data-v-2cd053b2] {\n display: table-cell;\n width: 4.5px;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n background-color: #fff;\n border-color: #ccc;\n}\n.external-scene-exception div[data-v-2cd053b2] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 30px;\n border: 1px solid #ccc;\n border-top-left-radius: 0;\n border-top-right-radius: 4px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 4px;\n z-index: 2;\n margin-left: -1px;\n}\n.external-scene-exception > img[data-v-2cd053b2] {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n.external-scene-exception:last-child > .div[data-v-2cd053b2] {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/config-scene-exceptions.vue\"],\"names\":[],\"mappings\":\";AA6KA;IACA,eAAA;AACA;AAEA;IACA,qBAAA;IACA,aAAA;AACA;AAEA;IACA,aAAA;AACA;AAEA;IACA,iBAAA;IACA,gBAAA;AACA;AAEA;;IAEA,qBAAA;IACA,sBAAA;AACA;AAEA;IACA,gBAAA;AACA;AAEA;IACA,UAAA;IACA,QAAA;IACA,kBAAA;IACA,WAAA;IACA,YAAA;AACA;AAEA;IACA,iBAAA;AACA;AAEA;IACA,YAAA;IACA,oBAAA;AACA;AAEA;IACA,sBAAA;AACA;AAEA;IACA,mBAAA;IACA,YAAA;IACA,yBAAA;IACA,4BAAA;IACA,sBAAA;IACA,kBAAA;AACA;AAEA;IACA,aAAA;IACA,mBAAA;IACA,uBAAA;IACA,WAAA;IACA,YAAA;IACA,sBAAA;IACA,yBAAA;IACA,4BAAA;IACA,4BAAA;IACA,+BAAA;IACA,UAAA;IACA,iBAAA;AACA;AAEA;IACA,cAAA;IACA,iBAAA;IACA,kBAAA;AACA;AAEA;IACA,yBAAA;IACA,4BAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.autocomplete-item[data-v-0fbc8b46] {\n background: white;\n color: black;\n}\n\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/config-subtitle-languages.vue\"],\"names\":[],\"mappings\":\";AA+EA;IACA,iBAAA;IACA,YAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.form-control {\n color: rgb(0, 0, 0);\n}\n.input75 {\n width: 75px;\n margin-top: -4px;\n}\n.input250 {\n width: 250px;\n margin-top: -4px;\n}\n.input350 {\n width: 350px;\n margin-top: -4px;\n}\n.input450 {\n width: 450px;\n margin-top: -4px;\n}\ninput {\n margin-bottom: 5px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/config-textbox-number.vue\"],\"names\":[],\"mappings\":\";AA4FA;IACA,mBAAA;AACA;AAEA;IACA,WAAA;IACA,gBAAA;AACA;AAEA;IACA,YAAA;IACA,gBAAA;AACA;AAEA;IACA,YAAA;IACA,gBAAA;AACA;AAEA;IACA,YAAA;IACA,gBAAA;AACA;AAEA;IACA,kBAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.input75[data-v-1f6251e9] {\n width: 75px;\n margin-top: -4px;\n}\n.input250[data-v-1f6251e9] {\n width: 250px;\n margin-top: -4px;\n}\n.input350[data-v-1f6251e9] {\n width: 350px;\n margin-top: -4px;\n}\n.input450[data-v-1f6251e9] {\n width: 450px;\n margin-top: -4px;\n}\ninput[data-v-1f6251e9] {\n margin-bottom: 5px;\n width: 100%;\n border: none;\n}\n.uri-error-enter-active[data-v-1f6251e9],\n.uri-error-leave-active[data-v-1f6251e9] {\n -moz-transition-duration: 0.3s;\n -webkit-transition-duration: 0.3s;\n -o-transition-duration: 0.3s;\n transition-duration: 0.3s;\n -moz-transition-timing-function: ease-in;\n -webkit-transition-timing-function: ease-in;\n -o-transition-timing-function: ease-in;\n transition-timing-function: ease-in;\n}\n.uri-error-enter-to[data-v-1f6251e9],\n.uri-error-leave[data-v-1f6251e9] {\n max-height: 100%;\n}\n.uri-error-enter[data-v-1f6251e9],\n.uri-error-leave-to[data-v-1f6251e9] {\n max-height: 0;\n}\n.parent[data-v-1f6251e9] {\n position: relative;\n}\ndiv.uri-error[data-v-1f6251e9] {\n display: block;\n overflow: hidden;\n width: 100%;\n position: absolute;\n left: 0;\n background-color: #e23636;\n padding: 0 2px 0 2px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/config-textbox.vue\"],\"names\":[],\"mappings\":\";AAiGA;IACA,WAAA;IACA,gBAAA;AACA;AAEA;IACA,YAAA;IACA,gBAAA;AACA;AAEA;IACA,YAAA;IACA,gBAAA;AACA;AAEA;IACA,YAAA;IACA,gBAAA;AACA;AAEA;IACA,kBAAA;IACA,WAAA;IACA,YAAA;AACA;AAEA;;IAEA,8BAAA;IACA,iCAAA;IACA,4BAAA;IACA,yBAAA;IACA,wCAAA;IACA,2CAAA;IACA,sCAAA;IACA,mCAAA;AACA;AAEA;;IAEA,gBAAA;AACA;AAEA;;IAEA,aAAA;AACA;AAEA;IACA,kBAAA;AACA;AAEA;IACA,cAAA;IACA,gBAAA;IACA,WAAA;IACA,kBAAA;IACA,OAAA;IACA,yBAAA;IACA,oBAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.input75 {\n width: 75px;\n margin-top: -4px;\n}\n.input250 {\n width: 250px;\n margin-top: -4px;\n}\n.input350 {\n width: 350px;\n margin-top: -4px;\n}\n.input450 {\n width: 450px;\n margin-top: -4px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/config-toggle-slider.vue\"],\"names\":[],\"mappings\":\";AAkFA;IACA,WAAA;IACA,gBAAA;AACA;AAEA;IACA,YAAA;IACA,gBAAA;AACA;AAEA;IACA,YAAA;IACA,gBAAA;AACA;AAEA;IACA,YAAA;IACA,gBAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\ndiv.wrapper > div[data-v-12aec99f] {\n margin-bottom: 5px;\n}\ndiv.identifier[data-v-12aec99f] {\n float: none;\n width: auto;\n overflow: hidden;\n}\ndiv.level[data-v-12aec99f] {\n float: right;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/custom-logs.vue\"],\"names\":[],\"mappings\":\";AA0EA;IACA,kBAAA;AACA;AAEA;IACA,WAAA;IACA,WAAA;IACA,gBAAA;AACA;AAEA;IACA,YAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.external-ids {\n display: inline-block;\n}\n.external-ids > * {\n margin-left: 2px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/externals.vue\"],\"names\":[],\"mappings\":\";AA4DA;IACA,qBAAA;AACA;AAEA;IACA,gBAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\ndiv.file-browser.max-width[data-v-b7bcca72] {\n max-width: 450px;\n}\ndiv.file-browser .input-group-no-btn[data-v-b7bcca72] {\n display: flex;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/file-browser.vue\"],\"names\":[],\"mappings\":\";AAmTA;IACA,gBAAA;AACA;AAEA;IACA,aAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.app-image[data-v-05ed6915] {\n max-width: 100%;\n max-height: 100%;\n width: auto;\n height: auto;\n vertical-align: middle;\n}\nimg[data-v-05ed6915]:not([src]) {\n visibility: hidden;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/lazy-image.vue\"],\"names\":[],\"mappings\":\";AA+HA;IACA,eAAA;IACA,gBAAA;IACA,WAAA;IACA,YAAA;IACA,sBAAA;AACA;AAEA;IACA,kBAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.load-progress-bar-container {\n position: absolute;\n bottom: 0;\n right: 0;\n}\n.border {\n box-sizing: border-box;\n height: 26px;\n text-size-adjust: 100%;\n width: 382px;\n perspective-origin: 191px 13px;\n transform-origin: 191px 13px;\n border: 1px solid #ccc;\n border-radius: 5px;\n}\n@media (max-width: 767px) {\n.border {\n width: 100%;\n}\n.load-progress-bar-container {\n width: 100%;\n}\n}\n.progress {\n box-sizing: border-box;\n height: 24px;\n text-size-adjust: 100%;\n width: 76px;\n perspective-origin: 38px 12px;\n transform-origin: 38px 12px;\n background: rgba(99, 177, 137, 0.63) none repeat scroll 0% 0% / auto padding-box border-box;\n}\n.msg {\n position: absolute;\n padding: 3px 5px 0 5px;\n}\n\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/load-progress-bar.vue\"],\"names\":[],\"mappings\":\";AAqCA;IACA,kBAAA;IACA,SAAA;IACA,QAAA;AACA;AAEA;IACA,sBAAA;IACA,YAAA;IACA,sBAAA;IACA,YAAA;IACA,8BAAA;IACA,4BAAA;IACA,sBAAA;IACA,kBAAA;AACA;AAEA;AACA;QACA,WAAA;AACA;AAEA;QACA,WAAA;AACA;AACA;AAEA;IACA,sBAAA;IACA,YAAA;IACA,sBAAA;IACA,WAAA;IACA,6BAAA;IACA,2BAAA;IACA,2FAAA;AACA;AAEA;IACA,kBAAA;IACA,sBAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.plotInfo {\n cursor: help;\n float: right;\n position: relative;\n top: 2px;\n}\n.plotInfoNone {\n cursor: help;\n float: right;\n position: relative;\n top: 2px;\n opacity: 0.4;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/plot-info.vue\"],\"names\":[],\"mappings\":\";AA0BA;IACA,YAAA;IACA,YAAA;IACA,kBAAA;IACA,QAAA;AACA;AAEA;IACA,YAAA;IACA,YAAA;IACA,kBAAA;IACA,QAAA;IACA,YAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.progressbar[data-v-2a6be2d2] {\n position: relative;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/progress-bar.vue\"],\"names\":[],\"mappings\":\";AAsCA;IACA,kBAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n/* Put both custom quality selectors in the same row */\n#customQualityWrapper > div[data-v-7daf2e28] {\n display: inline-block;\n text-align: left;\n}\n\n/* Put some distance between the two selectors */\n#customQualityWrapper > div[data-v-7daf2e28]:first-of-type {\n padding-right: 30px;\n}\n.backlog-link[data-v-7daf2e28] {\n color: blue;\n text-decoration: underline;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/quality-chooser.vue\"],\"names\":[],\"mappings\":\";AAkVA,sDAAA;AACA;IACA,qBAAA;IACA,gBAAA;AACA;;AAEA,gDAAA;AACA;IACA,mBAAA;AACA;AAEA;IACA,WAAA;IACA,0BAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n/* Base class */\n.quality[data-v-27b6c0c4] {\n font: 12px/13px \"Open Sans\", verdana, sans-serif;\n background-image: -webkit-linear-gradient(top, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0) 50%, rgba(0, 0, 0, 0) 50%, rgba(0, 0, 0, 0.25));\n background-image: -moz-linear-gradient(top, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0) 50%, rgba(0, 0, 0, 0) 50%, rgba(0, 0, 0, 0.25));\n background-image: -o-linear-gradient(top, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0) 50%, rgba(0, 0, 0, 0) 50%, rgba(0, 0, 0, 0.25));\n background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0) 50%, rgba(0, 0, 0, 0) 50%, rgba(0, 0, 0, 0.25));\n box-shadow: inset 0 1px rgba(255, 255, 255, 0.1), inset 0 -1px 3px rgba(0, 0, 0, 0.3), inset 0 0 0 1px rgba(255, 255, 255, 0.08), 0 1px 2px rgba(0, 0, 0, 0.15);\n text-shadow: 0 1px rgba(0, 0, 0, 0.8);\n color: rgb(255, 255, 255);\n display: inline-block;\n padding: 2px 4px;\n text-align: center;\n vertical-align: baseline;\n border-radius: 4px;\n white-space: nowrap;\n}\n\n/* Custom */\n.custom[data-v-27b6c0c4] {\n background-color: rgb(98, 25, 147);\n}\n\n/* HD-720p + FHD-1080p */\n.hd[data-v-27b6c0c4], \n.anyhdtv[data-v-27b6c0c4], \n.anywebdl[data-v-27b6c0c4], \n.anybluray[data-v-27b6c0c4] { /* AnySet */\n background-color: rgb(38, 114, 182);\n background-image:\n repeating-linear-gradient(\n -45deg,\n rgb(38, 114, 182),\n rgb(38, 114, 182) 10px,\n rgb(91, 153, 13) 10px,\n rgb(91, 153, 13) 20px\n );\n}\n\n/* HD-720p */\n.hd720p[data-v-27b6c0c4], \n.hdtv[data-v-27b6c0c4],\n.hdwebdl[data-v-27b6c0c4],\n.hdbluray[data-v-27b6c0c4] {\n background-color: rgb(91, 153, 13);\n}\n\n/* FHD-1080p */\n.hd1080p[data-v-27b6c0c4], \n.fullhdtv[data-v-27b6c0c4],\n.fullhdwebdl[data-v-27b6c0c4],\n.fullhdbluray[data-v-27b6c0c4] {\n background-color: rgb(38, 114, 182);\n}\n\n/* UHD-4K + UHD-8K */\n.uhd[data-v-27b6c0c4] { /* Preset */\n background-color: rgb(117, 0, 255);\n background-image:\n repeating-linear-gradient(\n -45deg,\n rgb(117, 0, 255),\n rgb(117, 0, 255) 10px,\n rgb(65, 0, 119) 10px,\n rgb(65, 0, 119) 20px\n );\n}\n\n/* UHD-4K */\n.uhd4k[data-v-27b6c0c4], \n.anyuhd4k[data-v-27b6c0c4], \n.uhd4ktv[data-v-27b6c0c4],\n.uhd4kwebdl[data-v-27b6c0c4],\n.uhd4kbluray[data-v-27b6c0c4] {\n background-color: rgb(117, 0, 255);\n}\n\n/* UHD-8K */\n.uhd8k[data-v-27b6c0c4], \n.anyuhd8k[data-v-27b6c0c4], \n.uhd8ktv[data-v-27b6c0c4],\n.uhd8kwebdl[data-v-27b6c0c4],\n.uhd8kbluray[data-v-27b6c0c4] {\n background-color: rgb(65, 0, 119);\n}\n\n/* RawHD/RawHDTV */\n.rawhdtv[data-v-27b6c0c4] {\n background-color: rgb(205, 115, 0);\n}\n\n/* SD */\n.sd[data-v-27b6c0c4], \n.sdtv[data-v-27b6c0c4],\n.sddvd[data-v-27b6c0c4] {\n background-color: rgb(190, 38, 37);\n}\n\n/* Any */\n.any[data-v-27b6c0c4] { /* Preset */\n background-color: rgb(102, 102, 102);\n}\n\n/* Unknown */\n.unknown[data-v-27b6c0c4] {\n background-color: rgb(153, 153, 153);\n}\n\n/* Proper (used on History page) */\n.proper[data-v-27b6c0c4] {\n background-color: rgb(63, 127, 0);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/quality-pill.vue\"],\"names\":[],\"mappings\":\";AA8MA,eAAA;AACA;IACA,gDAAA;IACA,gJAAA;IACA,6IAAA;IACA,2IAAA;IACA,8IAAA;IACA,+JAAA;IACA,qCAAA;IACA,yBAAA;IACA,qBAAA;IACA,gBAAA;IACA,kBAAA;IACA,wBAAA;IACA,kBAAA;IACA,mBAAA;AACA;;AAEA,WAAA;AACA;IACA,kCAAA;AACA;;AAEA,wBAAA;AACA;;;8BAGA,WAAA;IACA,mCAAA;IACA;;;;;;;KAOA;AACA;;AAEA,YAAA;AACA;;;;IAIA,kCAAA;AACA;;AAEA,cAAA;AACA;;;;IAIA,mCAAA;AACA;;AAEA,oBAAA;AACA,wBAAA,WAAA;IACA,kCAAA;IACA;;;;;;;KAOA;AACA;;AAEA,WAAA;AACA;;;;;IAKA,kCAAA;AACA;;AAEA,WAAA;AACA;;;;;IAKA,iCAAA;AACA;;AAEA,kBAAA;AACA;IACA,kCAAA;AACA;;AAEA,OAAA;AACA;;;IAGA,kCAAA;AACA;;AAEA,QAAA;AACA,wBAAA,WAAA;IACA,oCAAA;AACA;;AAEA,YAAA;AACA;IACA,oCAAA;AACA;;AAEA,kCAAA;AACA;IACA,iCAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.isValid[data-v-9e73c4ba] {\n background-color: #90ee90;\n color: #fff;\n font-weight: bold;\n}\n.isInvalid[data-v-9e73c4ba] {\n background-color: #f00;\n color: #fff !important;\n font-weight: bold;\n}\n.isCustom[data-v-9e73c4ba] {\n background-color: #00ebaf;\n color: #fff !important;\n font-weight: bold;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/scene-number-anime-input.vue\"],\"names\":[],\"mappings\":\";AAsIA;IACA,yBAAA;IACA,WAAA;IACA,iBAAA;AACA;AAEA;IACA,sBAAA;IACA,sBAAA;IACA,iBAAA;AACA;AAEA;IACA,yBAAA;IACA,sBAAA;IACA,iBAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.isValid[data-v-8a700f60] {\n background-color: #90ee90;\n color: #fff;\n font-weight: bold;\n}\n.isInvalid[data-v-8a700f60] {\n background-color: #f00;\n color: #fff !important;\n font-weight: bold;\n}\n.isCustom[data-v-8a700f60] {\n background-color: #00ebaf;\n color: #fff !important;\n font-weight: bold;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/scene-number-input.vue\"],\"names\":[],\"mappings\":\";AA+KA;IACA,yBAAA;IACA,WAAA;IACA,iBAAA;AACA;AAEA;IACA,sBAAA;IACA,sBAAA;IACA,iBAAA;AACA;AAEA;IACA,yBAAA;IACA,sBAAA;IACA,iBAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.scroll-wrapper {\n position: fixed;\n opacity: 0;\n visibility: hidden;\n overflow: hidden;\n text-align: center;\n font-size: 20px;\n z-index: 999;\n background-color: #777;\n color: #eee;\n width: 50px;\n height: 48px;\n line-height: 48px;\n right: 30px;\n bottom: 30px;\n padding-top: 2px;\n border-radius: 10px;\n -webkit-transition: all 0.5s ease-in-out;\n -moz-transition: all 0.5s ease-in-out;\n -ms-transition: all 0.5s ease-in-out;\n -o-transition: all 0.5s ease-in-out;\n transition: all 0.5s ease-in-out;\n}\n.scroll-wrapper.show {\n visibility: visible;\n cursor: pointer;\n opacity: 1;\n}\n.scroll-wrapper.left {\n position: fixed;\n right: 150px;\n}\n.scroll-wrapper.right {\n position: fixed;\n right: 90px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/scroll-buttons.vue\"],\"names\":[],\"mappings\":\";AA8FA;IACA,eAAA;IACA,UAAA;IACA,kBAAA;IACA,gBAAA;IACA,kBAAA;IACA,eAAA;IACA,YAAA;IACA,sBAAA;IACA,WAAA;IACA,WAAA;IACA,YAAA;IACA,iBAAA;IACA,WAAA;IACA,YAAA;IACA,gBAAA;IACA,mBAAA;IACA,wCAAA;IACA,qCAAA;IACA,oCAAA;IACA,mCAAA;IACA,gCAAA;AACA;AAEA;IACA,mBAAA;IACA,eAAA;IACA,UAAA;AACA;AAEA;IACA,eAAA;IACA,YAAA;AACA;AAEA;IACA,eAAA;IACA,WAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n#naming-key {\n margin: 20px 0 20px 0;\n}\n.template-container {\n padding-left: 40px;\n}\n.show-template {\n left: -8px;\n top: 4px;\n position: absolute;\n z-index: 10;\n opacity: 0.6;\n}\n.move-down {\n transform: translateY(10px);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/search-template-container.vue\"],\"names\":[],\"mappings\":\";AA6dA;IACA,qBAAA;AACA;AAEA;IACA,kBAAA;AACA;AAEA;IACA,UAAA;IACA,QAAA;IACA,kBAAA;IACA,WAAA;IACA,YAAA;AACA;AAEA;IACA,2BAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.show-template[data-v-4f60cc3f] {\n left: -8px;\n top: 4px;\n position: absolute;\n z-index: 10;\n opacity: 0.6;\n}\n.template-example[data-v-4f60cc3f] {\n display: block;\n line-height: 20px;\n margin-bottom: 15px;\n padding: 2px 5px 2px 2px;\n clear: left;\n max-width: 338px;\n}\n.tooltip-wrapper[data-v-4f60cc3f] {\n min-width: 340px;\n}\n.invalid[data-v-4f60cc3f] {\n background-color: #ff5b5b;\n}\n.error-message[data-v-4f60cc3f] {\n color: red;\n}\n.tooltip[data-v-4f60cc3f] {\n display: block !important;\n z-index: 10000;\n}\n.tooltip .tooltip-inner[data-v-4f60cc3f] {\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[data-v-4f60cc3f] {\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'][data-v-4f60cc3f] {\n margin-bottom: 5px;\n}\n.tooltip[x-placement^='top'] .tooltip-arrow[data-v-4f60cc3f] {\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'][data-v-4f60cc3f] {\n margin-top: 5px;\n}\n.tooltip[x-placement^='bottom'] .tooltip-arrow[data-v-4f60cc3f] {\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'][data-v-4f60cc3f] {\n margin-left: 5px;\n}\n.tooltip[x-placement^='right'] .tooltip-arrow[data-v-4f60cc3f] {\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'][data-v-4f60cc3f] {\n margin-right: 5px;\n}\n.tooltip[x-placement^='left'] .tooltip-arrow[data-v-4f60cc3f] {\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[data-v-4f60cc3f] {\n background: #ffef93;\n color: #555;\n padding: 24px;\n border-radius: 5px;\n box-shadow: 0 5px 30px rgba(black, 0.1);\n}\n.tooltip.popover .popover-arrow[data-v-4f60cc3f] {\n border-color: #ffef93;\n}\n.tooltip[aria-hidden='true'][data-v-4f60cc3f] {\n visibility: hidden;\n opacity: 0;\n transition: opacity 0.15s, visibility 0.15s;\n}\n.tooltip[aria-hidden='false'][data-v-4f60cc3f] {\n visibility: visible;\n opacity: 1;\n transition: opacity 0.15s;\n}\n.vertical-align[data-v-4f60cc3f] {\n display: flex;\n align-items: center;\n}\n.vertical-align > p[data-v-4f60cc3f] {\n margin: auto 10px;\n}\n.pattern > span[data-v-4f60cc3f] {\n position: absolute;\n top: 0;\n left: 25px;\n color: black;\n background-color: grey;\n padding: 1px 5px;\n opacity: 0.8;\n border-radius: 5px;\n}\n.pattern[data-v-4f60cc3f] {\n position: relative;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/search-template-custom.vue\"],\"names\":[],\"mappings\":\";AA+TA;IACA,UAAA;IACA,QAAA;IACA,kBAAA;IACA,WAAA;IACA,YAAA;AACA;AAEA;IACA,cAAA;IACA,iBAAA;IACA,mBAAA;IACA,wBAAA;IACA,WAAA;IACA,gBAAA;AACA;AAEA;IACA,gBAAA;AACA;AAEA;IACA,yBAAA;AACA;AAEA;IACA,UAAA;AACA;AAEA;IACA,yBAAA;IACA,cAAA;AACA;AAEA;IACA,mBAAA;IACA,WAAA;IACA,mBAAA;IACA,qBAAA;IACA,yBAAA;IACA,uDAAA;IACA,oDAAA;IACA,+CAAA;AACA;AAEA;IACA,QAAA;IACA,SAAA;IACA,kBAAA;IACA,WAAA;IACA,yBAAA;IACA,UAAA;AACA;AAEA;IACA,kBAAA;AACA;AAEA;IACA,2BAAA;IACA,yCAAA;IACA,0CAAA;IACA,2CAAA;IACA,YAAA;IACA,qBAAA;IACA,aAAA;IACA,gBAAA;AACA;AAEA;IACA,eAAA;AACA;AAEA;IACA,2BAAA;IACA,yCAAA;IACA,0CAAA;IACA,wCAAA;IACA,SAAA;IACA,qBAAA;IACA,aAAA;IACA,gBAAA;AACA;AAEA;IACA,gBAAA;AACA;AAEA;IACA,2BAAA;IACA,yCAAA;IACA,wCAAA;IACA,2CAAA;IACA,UAAA;IACA,oBAAA;IACA,cAAA;IACA,eAAA;AACA;AAEA;IACA,iBAAA;AACA;AAEA;IACA,2BAAA;IACA,wCAAA;IACA,0CAAA;IACA,2CAAA;IACA,WAAA;IACA,oBAAA;IACA,cAAA;IACA,eAAA;AACA;AAEA;IACA,mBAAA;IACA,WAAA;IACA,aAAA;IACA,kBAAA;IACA,uCAAA;AACA;AAEA;IACA,qBAAA;AACA;AAEA;IACA,kBAAA;IACA,UAAA;IACA,2CAAA;AACA;AAEA;IACA,mBAAA;IACA,UAAA;IACA,yBAAA;AACA;AAEA;IACA,aAAA;IACA,mBAAA;AACA;AAEA;IACA,iBAAA;AACA;AAEA;IACA,kBAAA;IACA,MAAA;IACA,UAAA;IACA,YAAA;IACA,sBAAA;IACA,gBAAA;IACA,YAAA;IACA,kBAAA;AACA;AAEA;IACA,kBAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.show-template[data-v-007d54df] {\n left: -8px;\n top: 4px;\n position: absolute;\n z-index: 10;\n opacity: 0.6;\n}\n.template-example[data-v-007d54df] {\n display: block;\n line-height: 20px;\n margin-bottom: 15px;\n padding: 2px 5px 2px 2px;\n clear: left;\n max-width: 338px;\n}\n.template-wrapper[data-v-007d54df] {\n max-width: 350px;\n}\n.tooltip-wrapper-pattern[data-v-007d54df] {\n max-width: 350px;\n}\n.invalid[data-v-007d54df] {\n background-color: #ff5b5b;\n}\n.tooltip[data-v-007d54df] {\n display: block !important;\n z-index: 10000;\n}\n.tooltip .tooltip-inner[data-v-007d54df] {\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[data-v-007d54df] {\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'][data-v-007d54df] {\n margin-bottom: 5px;\n}\n.tooltip[x-placement^='top'] .tooltip-arrow[data-v-007d54df] {\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'][data-v-007d54df] {\n margin-top: 5px;\n}\n.tooltip[x-placement^='bottom'] .tooltip-arrow[data-v-007d54df] {\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'][data-v-007d54df] {\n margin-left: 5px;\n}\n.tooltip[x-placement^='right'] .tooltip-arrow[data-v-007d54df] {\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'][data-v-007d54df] {\n margin-right: 5px;\n}\n.tooltip[x-placement^='left'] .tooltip-arrow[data-v-007d54df] {\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[data-v-007d54df] {\n background: #ffef93;\n color: #555;\n padding: 24px;\n border-radius: 5px;\n box-shadow: 0 5px 30px rgba(black, 0.1);\n}\n.tooltip.popover .popover-arrow[data-v-007d54df] {\n border-color: #ffef93;\n}\n.tooltip[aria-hidden='true'][data-v-007d54df] {\n visibility: hidden;\n opacity: 0;\n transition: opacity 0.15s, visibility 0.15s;\n}\n.tooltip[aria-hidden='false'][data-v-007d54df] {\n visibility: visible;\n opacity: 1;\n transition: opacity 0.15s;\n}\n.template-title[data-v-007d54df] {\n padding: 0 0 3px 5px;\n display: inline-block;\n}\n.template-remove[data-v-007d54df] {\n float: right;\n margin-right: 4px;\n margin-top: 2px;\n}\n.template-remove[data-v-007d54df]:hover {\n animation-name: spin-007d54df;\n animation-duration: 500ms;\n animation-timing-function: ease-out;\n}\n@keyframes spin-007d54df {\nfrom {\n transform: rotate(0deg);\n}\nto {\n transform: rotate(180deg);\n}\n}\n.template-body[data-v-007d54df] {\n display: flex;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/search-template-pattern.vue\"],\"names\":[],\"mappings\":\";AAqMA;IACA,UAAA;IACA,QAAA;IACA,kBAAA;IACA,WAAA;IACA,YAAA;AACA;AAEA;IACA,cAAA;IACA,iBAAA;IACA,mBAAA;IACA,wBAAA;IACA,WAAA;IACA,gBAAA;AACA;AAEA;IACA,gBAAA;AACA;AAEA;IACA,gBAAA;AACA;AAEA;IACA,yBAAA;AACA;AAEA;IACA,yBAAA;IACA,cAAA;AACA;AAEA;IACA,mBAAA;IACA,WAAA;IACA,mBAAA;IACA,qBAAA;IACA,yBAAA;IACA,uDAAA;IACA,oDAAA;IACA,+CAAA;AACA;AAEA;IACA,QAAA;IACA,SAAA;IACA,kBAAA;IACA,WAAA;IACA,yBAAA;IACA,UAAA;AACA;AAEA;IACA,kBAAA;AACA;AAEA;IACA,2BAAA;IACA,yCAAA;IACA,0CAAA;IACA,2CAAA;IACA,YAAA;IACA,qBAAA;IACA,aAAA;IACA,gBAAA;AACA;AAEA;IACA,eAAA;AACA;AAEA;IACA,2BAAA;IACA,yCAAA;IACA,0CAAA;IACA,wCAAA;IACA,SAAA;IACA,qBAAA;IACA,aAAA;IACA,gBAAA;AACA;AAEA;IACA,gBAAA;AACA;AAEA;IACA,2BAAA;IACA,yCAAA;IACA,wCAAA;IACA,2CAAA;IACA,UAAA;IACA,oBAAA;IACA,cAAA;IACA,eAAA;AACA;AAEA;IACA,iBAAA;AACA;AAEA;IACA,2BAAA;IACA,wCAAA;IACA,0CAAA;IACA,2CAAA;IACA,WAAA;IACA,oBAAA;IACA,cAAA;IACA,eAAA;AACA;AAEA;IACA,mBAAA;IACA,WAAA;IACA,aAAA;IACA,kBAAA;IACA,uCAAA;AACA;AAEA;IACA,qBAAA;AACA;AAEA;IACA,kBAAA;IACA,UAAA;IACA,2CAAA;AACA;AAEA;IACA,mBAAA;IACA,UAAA;IACA,yBAAA;AACA;AAEA;IACA,oBAAA;IACA,qBAAA;AACA;AAEA;IACA,YAAA;IACA,iBAAA;IACA,eAAA;AACA;AAEA;IACA,6BAAA;IACA,yBAAA;IACA,mCAAA;AACA;AAEA;AACA;QACA,uBAAA;AACA;AAEA;QACA,yBAAA;AACA;AACA;AAEA;IACA,aAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.mobile-select[data-v-1b50fd5d] {\n width: 110px;\n font-size: x-small;\n}\n.search-wrapper[data-v-1b50fd5d] {\n float: left;\n}\n.search-wrapper > img[data-v-1b50fd5d] {\n cursor: pointer;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/search.vue\"],\"names\":[],\"mappings\":\";AA4MA;IACA,YAAA;IACA,kBAAA;AACA;AAEA;IACA,WAAA;AACA;AAEA;IACA,eAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\ndiv.select-list ul[data-v-1843461f] {\n padding-left: 0;\n}\ndiv.select-list li[data-v-1843461f] {\n list-style-type: none;\n display: flex;\n}\ndiv.select-list .new-item[data-v-1843461f] {\n display: flex;\n}\ndiv.select-list .new-item-help[data-v-1843461f] {\n font-weight: bold;\n padding-top: 5px;\n}\ndiv.select-list input[data-v-1843461f],\ndiv.select-list img[data-v-1843461f] {\n display: inline-block;\n box-sizing: border-box;\n}\ndiv.select-list.max-width[data-v-1843461f] {\n max-width: 450px;\n}\ndiv.select-list .switch-input[data-v-1843461f] {\n left: -8px;\n top: 4px;\n position: absolute;\n z-index: 10;\n opacity: 0.6;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/select-list.vue\"],\"names\":[],\"mappings\":\";AA6KA;IACA,eAAA;AACA;AAEA;IACA,qBAAA;IACA,aAAA;AACA;AAEA;IACA,aAAA;AACA;AAEA;IACA,iBAAA;IACA,gBAAA;AACA;AAEA;;IAEA,qBAAA;IACA,sBAAA;AACA;AAEA;IACA,gBAAA;AACA;AAEA;IACA,UAAA;IACA,QAAA;IACA,kBAAA;IACA,WAAA;IACA,YAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\nul[data-v-20efe074] {\n padding-left: 0;\n}\nli[data-v-20efe074] {\n list-style-type: none;\n}\n.trakt-list-group[data-v-20efe074] {\n display: inline-flex;\n height: 25px;\n}\ninput[data-v-20efe074] {\n display: inline-block;\n box-sizing: border-box;\n}\ninput.available-list[data-v-20efe074] {\n height: 22px;\n}\ninput[type=checkbox][data-v-20efe074] {\n width: 20px;\n height: 20px;\n}\n.max-width[data-v-20efe074] {\n max-width: 450px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/select-trakt-lists.vue\"],\"names\":[],\"mappings\":\";AA2CA;IACA,eAAA;AACA;AAEA;IACA,qBAAA;AACA;AAEA;IACA,oBAAA;IACA,YAAA;AACA;AAEA;IACA,qBAAA;IACA,sBAAA;AACA;AAEA;IACA,YAAA;AACA;AAEA;IACA,WAAA;IACA,YAAA;AACA;AAEA;IACA,gBAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\nselect.select-show {\n display: inline-block;\n height: 25px;\n padding: 1px;\n min-width: 200px;\n}\n.show-selector {\n height: 31px;\n display: table-cell;\n left: 20px;\n margin-bottom: 5px;\n}\n@media (max-width: 767px) and (min-width: 341px) {\n.select-show-group,\n .select-show {\n width: 100%;\n}\n}\n@media (max-width: 340px) {\n.select-show-group {\n width: 100%;\n}\n}\n@media (max-width: 767px) {\n.show-selector {\n float: left;\n width: 100%;\n}\n.select-show {\n width: 100%;\n}\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/show-selector.vue\"],\"names\":[],\"mappings\":\";AA2GA;IACA,qBAAA;IACA,YAAA;IACA,YAAA;IACA,gBAAA;AACA;AAEA;IACA,YAAA;IACA,mBAAA;IACA,UAAA;IACA,kBAAA;AACA;AAEA;AACA;;QAEA,WAAA;AACA;AACA;AAEA;AACA;QACA,WAAA;AACA;AACA;AAEA;AACA;QACA,WAAA;QACA,WAAA;AACA;AAEA;QACA,WAAA;AACA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\ndiv.select-list ul[data-v-48a6e4c2] {\n padding-left: 0;\n}\ndiv.select-list li[data-v-48a6e4c2] {\n list-style-type: none;\n display: flex;\n}\ndiv.select-list .new-item[data-v-48a6e4c2] {\n display: flex;\n}\ndiv.select-list .new-item-help[data-v-48a6e4c2] {\n font-weight: bold;\n padding-top: 5px;\n}\ndiv.select-list input[data-v-48a6e4c2],\ndiv.select-list img[data-v-48a6e4c2] {\n display: inline-block;\n box-sizing: border-box;\n}\ndiv.select-list.max-width[data-v-48a6e4c2] {\n max-width: 450px;\n}\ndiv.select-list .switch-input[data-v-48a6e4c2] {\n left: -8px;\n top: 4px;\n position: absolute;\n z-index: 10;\n opacity: 0.6;\n}\n.draggable-list[data-v-48a6e4c2] {\n list-style: none;\n}\n.draggable-input-group[data-v-48a6e4c2] {\n display: inline-flex;\n width: 300px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/sorted-select-list.vue\"],\"names\":[],\"mappings\":\";AA8IA;IACA,eAAA;AACA;AAEA;IACA,qBAAA;IACA,aAAA;AACA;AAEA;IACA,aAAA;AACA;AAEA;IACA,iBAAA;IACA,gBAAA;AACA;AAEA;;IAEA,qBAAA;IACA,sBAAA;AACA;AAEA;IACA,gBAAA;AACA;AAEA;IACA,UAAA;IACA,QAAA;IACA,kBAAA;IACA,WAAA;IACA,YAAA;AACA;AAEA;IACA,gBAAA;AACA;AAEA;IACA,oBAAA;IACA,YAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.opacity-25 {\n opacity: 0.25;\n}\n.opacity-75 {\n opacity: 0.75;\n}\n.animate-spin {\n animation: spin 1s linear infinite;\n color: green;\n}\n@keyframes spin {\nfrom {\n transform: rotate(0deg);\n}\nto {\n transform: rotate(360deg);\n}\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/state-switch.vue\"],\"names\":[],\"mappings\":\";AAuEA;IACA,aAAA;AACA;AAEA;IACA,aAAA;AACA;AAEA;IACA,kCAAA;IACA,YAAA;AACA;AAEA;AACA;QACA,uBAAA;AACA;AAEA;QACA,yBAAA;AACA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\npre[data-v-3808856d] {\n word-wrap: break-word;\n}\n.error[data-v-3808856d] {\n width: 100%;\n padding: 0.5rem;\n background-color: red;\n font-weight: 700;\n border-radius: 2px;\n margin-bottom: 2rem;\n}\n.matched-show[data-v-3808856d] {\n display: flex;\n margin-bottom: 2rem;\n}\n.matched-show > div[data-v-3808856d] {\n margin-right: 2rem;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/test-guessit.vue\"],\"names\":[],\"mappings\":\";AA2FA;IACA,qBAAA;AACA;AAEA;IACA,WAAA;IACA,eAAA;IACA,qBAAA;IACA,gBAAA;IACA,kBAAA;IACA,mBAAA;AACA;AAEA;IACA,aAAA;IACA,mBAAA;AACA;AAEA;IACA,kBAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.test-provider[data-v-a8b1934a] {\n float: left;\n}\n.test-provider > button[data-v-a8b1934a] {\n margin: 0 5px;\n}\n.testresult[data-v-a8b1934a] {\n border-style: solid;\n border-width: 1px;\n padding: 1px 4px 4px 4px;\n border-color: #ccc;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/helpers/test-provider.vue\"],\"names\":[],\"mappings\":\";AA8DA;IACA,WAAA;AACA;AAEA;IACA,aAAA;AACA;AAEA;IACA,mBAAA;IACA,iBAAA;IACA,wBAAA;IACA,kBAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n/* History compact */\nspan.release-group[data-v-797f44ba] {\n cursor: help;\n margin-right: 5px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/history-compact.vue\"],\"names\":[],\"mappings\":\";AAwTA,oBAAA;AACA;IACA,YAAA;IACA,iBAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n/* History tables */\n.status-name > svg[data-v-20b91a7b] {\n margin-left: 5px;\n}\n.vgt-multiselect[data-v-20b91a7b] {\n min-height: 30px;\n}\n.multiselect--active[data-v-20b91a7b] {\n min-width: 200px;\n}\n.vgt-multiselect[data-v-20b91a7b] .multiselect__placeholder {\n margin-bottom: 0;\n padding-top: 0;\n}\n.vgt-multiselect[data-v-20b91a7b] .multiselect__tags {\n padding-top: 0;\n min-height: 30px;\n}\n:not(tr.status) span.episode-title a[data-v-20b91a7b],\n:not(tr.status) span.show-title a[data-v-20b91a7b] {\n text-decoration: none;\n color: rgb(255, 255, 255);\n}\ntr.status span.episode-title a[data-v-20b91a7b],\ntr span.show-title a[data-v-20b91a7b] {\n text-decoration: none;\n color: rgb(0, 0, 0);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/history-detailed.vue\"],\"names\":[],\"mappings\":\";AA+YA,mBAAA;AACA;IACA,gBAAA;AACA;AAEA;IACA,gBAAA;AACA;AAEA;IACA,gBAAA;AACA;AAEA;IACA,gBAAA;IACA,cAAA;AACA;AAEA;IACA,cAAA;IACA,gBAAA;AACA;AAEA;;IAEA,qBAAA;IACA,yBAAA;AACA;AAEA;;IAEA,qBAAA;IACA,mBAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\nul.list-group > li[data-v-f833a152] {\n list-style: none;\n margin-bottom: 10px;\n}\n.home-header-controls[data-v-f833a152] {\n display: flex;\n}\n.home-header-controls > h2[data-v-f833a152] {\n white-space: nowrap;\n}\n.home-options[data-v-f833a152] {\n align-self: flex-end;\n width: 100%;\n}\n.home-filter-option[data-v-f833a152] {\n margin-left: 10px;\n line-height: 40px;\n}\n@media (max-width: 768px) {\n.show-option[data-v-f833a152] {\n width: 100%;\n display: inline-block;\n}\n.show-option-layout > span[data-v-f833a152] {\n display: none;\n}\n}\n\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/home.vue\"],\"names\":[],\"mappings\":\";AAqMA;IACA,gBAAA;IACA,mBAAA;AACA;AAEA;IACA,aAAA;AACA;AAEA;IACA,mBAAA;AACA;AAEA;IACA,oBAAA;IACA,WAAA;AACA;AAEA;IACA,iBAAA;IACA,iBAAA;AACA;AAEA;AACA;QACA,WAAA;QACA,qBAAA;AACA;AAEA;QACA,aAAA;AACA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","// Imports\nvar ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/sourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.irc-frame[data-v-1aa6670a] {\n width: 100%;\n height: 500px;\n border: 1px #000 solid;\n}\n.loading-spinner[data-v-1aa6670a] {\n background-position: center center;\n background-repeat: no-repeat;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/irc.vue\"],\"names\":[],\"mappings\":\";AA2BA;IACA,WAAA;IACA,aAAA;IACA,sBAAA;AACA;AAEA;IACA,kCAAA;IACA,4BAAA;AACA\",\"sourcesContent\":[\"