diff --git a/medusa/server/api/v2/recommended.py b/medusa/server/api/v2/recommended.py
index b7f128c2c5..87a115934e 100644
--- a/medusa/server/api/v2/recommended.py
+++ b/medusa/server/api/v2/recommended.py
@@ -39,27 +39,23 @@ class RecommendedHandler(BaseRequestHandler):
def get(self, identifier, path_param=None):
"""Query available recommended show lists."""
- if identifier and not RecommendedHandler.IDENTIFIER_TO_LIST.get(identifier):
+ if identifier and not RecommendedHandler.IDENTIFIER_TO_LIST.get(identifier) and identifier != 'categories':
return self._bad_request("Invalid recommended list identifier '{0}'".format(identifier))
- data = {'shows': [], 'trakt': {'removedFromMedusa': []}}
-
- shows = get_recommended_shows(source=RecommendedHandler.IDENTIFIER_TO_LIST.get(identifier))
-
- if shows:
- data['shows'] = [show.to_json() for show in shows]
-
- data['trakt']['removedFromMedusa'] = []
- if app.USE_TRAKT:
+ if identifier == 'trakt' and path_param == 'removed' and app.USE_TRAKT:
+ data = {'removedFromMedusa': [], 'blacklistEnabled': None}
try:
- data['trakt']['removedFromMedusa'] = TraktPopular().get_removed_from_medusa()
+ data['removedFromMedusa'] = TraktPopular().get_removed_from_medusa()
except Exception:
log.warning('Could not get the `removed from medusa` list')
- data['trakt']['blacklistEnabled'] = app.TRAKT_BLACKLIST_NAME != ''
+ data['blacklistEnabled'] = app.TRAKT_BLACKLIST_NAME != ''
+ return self._ok(data)
- data['categories'] = get_categories()
+ if identifier == 'categories':
+ return self._ok(get_categories())
- return self._ok(data)
+ shows = get_recommended_shows(source=RecommendedHandler.IDENTIFIER_TO_LIST.get(identifier))
+ return self._paginate([show.to_json() for show in shows], sort='-rating')
def post(self, identifier, path_param=None):
"""Force the start of a recommended show queue item."""
diff --git a/themes-default/slim/src/components/recommended.vue b/themes-default/slim/src/components/recommended.vue
index e0af2d0772..564aa113d3 100644
--- a/themes-default/slim/src/components/recommended.vue
+++ b/themes-default/slim/src/components/recommended.vue
@@ -72,7 +72,10 @@
Search for new recommended shows from {{sourceToString[selectedSource]}}
-
+
+
+
+
@@ -86,6 +89,7 @@ import AddShowOptions from './add-show-options.vue';
import {
ConfigTemplate,
ConfigToggleSlider,
+ StateSwitch,
TraktAuthentication
} from './helpers';
import RecommendedPoster from './recommended-poster.vue';
@@ -99,6 +103,7 @@ export default {
ConfigTemplate,
ConfigToggleSlider,
FontAwesomeIcon,
+ StateSwitch,
RecommendedPoster,
TraktAuthentication,
Isotope
@@ -198,16 +203,21 @@ export default {
showTraktAuthDialog: false,
traktWarning: false,
traktWarningMessage: '',
- showsLoaded: false
+ showsLoaded: false,
+ loadingShows: false
};
},
async mounted() {
- const { getRecommendedShows, sourceToString } = this;
- const identifiers = Object.values(sourceToString);
+ const { getRecommendedShows, getRecommendedShowsOptions, sourceToString } = this;
+ const sources = Object.keys(sourceToString);
+
+ await getRecommendedShowsOptions();
- for (const identifier of identifiers) {
+ for (const source of sources) {
+ this.loadingShows = true;
// eslint-disable-next-line no-await-in-loop
- await getRecommendedShows(identifier);
+ await getRecommendedShows(source);
+ this.loadingShows = false;
}
this.showsLoaded = true;
@@ -215,10 +225,6 @@ export default {
this.isotopeLayout();
});
- this.$once('loaded', () => {
- this.configLoaded = true;
- });
-
this.$watch('recommendedLists', () => {
this.setSelectedList(this.selectedSource);
});
@@ -231,7 +237,8 @@ export default {
traktConfig: state => state.recommended.trakt,
recommendedLists: state => state.recommended.categories,
queueitems: state => state.queue.queueitems,
- sourceToString: state => state.recommended.sourceToString
+ sourceToString: state => state.recommended.sourceToString,
+ page: state => state.recommended.page
}),
filteredShowsByList() {
const { imgLazyLoad, recommendedShows, selectedSource, selectedList } = this;
@@ -262,13 +269,18 @@ export default {
},
listOptions() {
const { recommendedLists, selectedSource } = this;
+ if (!recommendedLists || !(selectedSource in recommendedLists)) {
+ return;
+ }
const sourceLists = recommendedLists[selectedSource] || [];
return sourceLists.map(list => ({ text: list, value: list }));
}
},
methods: {
...mapActions({
- getRecommendedShows: 'getRecommendedShows'
+ getRecommendedShows: 'getRecommendedShows',
+ getRecommendedShowsOptions: 'getRecommendedShowsOptions',
+ getMoreShows: 'getMoreShows'
}),
containerClass(show) {
let classes = 'recommended-container default-poster show-row';
@@ -355,6 +367,13 @@ export default {
);
}
}
+ },
+ getMore() {
+ this.loadingShows = true;
+ this.getMoreShows(this.selectedSource)
+ .finally(() => {
+ this.loadingShows = false;
+ });
}
},
watch: {
@@ -410,4 +429,8 @@ span.trakt-warning {
color: red;
}
+.load-more {
+ display: flex;
+ justify-content: center;
+}
diff --git a/themes-default/slim/src/store/modules/recommended.js b/themes-default/slim/src/store/modules/recommended.js
index 789389a70c..32bbf660d3 100644
--- a/themes-default/slim/src/store/modules/recommended.js
+++ b/themes-default/slim/src/store/modules/recommended.js
@@ -3,7 +3,8 @@ import { api } from '../../api';
import {
ADD_RECOMMENDED_SHOW,
SET_RECOMMENDED_SHOWS,
- SET_RECOMMENDED_SHOWS_OPTIONS
+ SET_RECOMMENDED_SHOWS_TRAKT_REMOVED,
+ SET_RECOMMENDED_SHOWS_CATEGORIES
} from '../mutation-types';
const IMDB = 10;
@@ -12,6 +13,13 @@ const TRAKT = 12;
const ANILIST = 13;
const state = {
+ limit: 500,
+ page: {
+ [IMDB]: 1,
+ [ANIDB]: 1,
+ [TRAKT]: 1,
+ [ANILIST]: 1
+ },
shows: [],
trakt: {
removedFromMedusa: [],
@@ -56,24 +64,23 @@ const mutations = {
Vue.set(state.shows, state.shows.indexOf(existingShow), newShow);
console.debug(`Merged ${newShow.title || newShow.source + String(newShow.seriesId)}`, newShow);
},
- [SET_RECOMMENDED_SHOWS](state, { shows, identifier }) {
- if (identifier) {
- // If an identifier has been passed, remove the old shows for this identifier.
- const source = Number(Object.keys(state.sourceToString).find(key => state.sourceToString[key] === identifier));
- state.shows = state.shows.filter(show => show.source !== source);
- } else {
- // No identifier passed, meaning remove all shows from store.
- state.shows = [];
+ [SET_RECOMMENDED_SHOWS](state, { shows, source }) {
+ if (shows.length < state.limit) {
+ state.page[source] = -1;
}
state.shows = [...state.shows, ...shows];
},
- [SET_RECOMMENDED_SHOWS_OPTIONS](state, data) {
- state.trakt.removedFromMedusa = data.trakt.removedFromMedusa;
- state.trakt.blacklistEnabled = data.trakt.blacklistEnabled;
- state.trakt.availableLists = data.trakt.availableLists;
- state.categories = data.categories;
+ [SET_RECOMMENDED_SHOWS_TRAKT_REMOVED](state, data) {
+ state.trakt.removedFromMedusa = data.removedFromMedusa;
+ state.trakt.blacklistEnabled = data.blacklistEnabled;
+ state.trakt.availableLists = data.availableLists;
+ },
+ [SET_RECOMMENDED_SHOWS_CATEGORIES](state, data) {
+ state.categories = data;
+ },
+ increasePage(state, source) {
+ state.page[source] += 1;
}
-
};
const getters = {};
@@ -83,16 +90,33 @@ const actions = {
* Get recommended shows from API and commit them to the store.
*
* @param {*} context - The store context.
- * @param {String} identifier - Identifier for the recommended shows list.
+ * @param {String} source - Identifier for the recommended shows list.
* @returns {(undefined|Promise)} undefined if `shows` was provided or the API response if not.
*/
- getRecommendedShows({ commit }, identifier) {
- identifier = identifier ? identifier : '';
- return api.get(`/recommended/${identifier}`, { timeout: 60000 })
+ getRecommendedShows({ state, commit }, source) {
+ if (state.page[source] === -1) {
+ return;
+ }
+ const identifier = source ? state.sourceToString[source] : '';
+ const { page } = state;
+ return api.get(`/recommended/${identifier}?page=${page[source]}&limit=${state.limit}`, { timeout: 60000 })
.then(response => {
- commit(SET_RECOMMENDED_SHOWS, { shows: response.data.shows, identifier });
- commit(SET_RECOMMENDED_SHOWS_OPTIONS, response.data);
+ commit(SET_RECOMMENDED_SHOWS, { shows: response.data, source });
});
+ },
+ getRecommendedShowsOptions({ commit }) {
+ api.get('/recommended/trakt/removed', { timeout: 60000 })
+ .then(response => {
+ commit(SET_RECOMMENDED_SHOWS_TRAKT_REMOVED, response.data);
+ });
+ api.get('/recommended/categories', { timeout: 60000 })
+ .then(response => {
+ commit(SET_RECOMMENDED_SHOWS_CATEGORIES, response.data);
+ });
+ },
+ getMoreShows({ commit, dispatch }, source) {
+ commit('increasePage', source);
+ return dispatch('getRecommendedShows', source);
}
};
diff --git a/themes-default/slim/src/store/mutation-types.js b/themes-default/slim/src/store/mutation-types.js
index 9cfe76a32b..bfc4a06613 100644
--- a/themes-default/slim/src/store/mutation-types.js
+++ b/themes-default/slim/src/store/mutation-types.js
@@ -22,7 +22,8 @@ const ADD_SHOW_EPISODE = 'đē Shows season with episodes added to store';
const ADD_STATS = 'âšī¸ Statistics added to store';
const ADD_RECOMMENDED_SHOW = 'đē Recommended Show added to store';
const SET_RECOMMENDED_SHOWS = 'đē Recommended Shows added to store';
-const SET_RECOMMENDED_SHOWS_OPTIONS = 'đē Recommended Show Options added to store';
+const SET_RECOMMENDED_SHOWS_TRAKT_REMOVED = 'đē Recommended Show Trakt removed added to store';
+const SET_RECOMMENDED_SHOWS_CATEGORIES = 'đē Recommended Show categories added to store';
const SET_STATS = 'SET_STATS';
const SET_MAX_DOWNLOAD_COUNT = 'SET_MAX_DOWNLOAD_COUNT';
const ADD_SHOW_SCENE_EXCEPTION = 'đē Add a scene exception';
@@ -68,7 +69,8 @@ export {
ADD_SHOW_CONFIG,
ADD_RECOMMENDED_SHOW,
SET_RECOMMENDED_SHOWS,
- SET_RECOMMENDED_SHOWS_OPTIONS,
+ SET_RECOMMENDED_SHOWS_TRAKT_REMOVED,
+ SET_RECOMMENDED_SHOWS_CATEGORIES,
ADD_SHOWS,
ADD_SHOW_EPISODE,
ADD_REMOTE_BRANCHES,
diff --git a/themes/dark/assets/js/medusa-runtime.js b/themes/dark/assets/js/medusa-runtime.js
index a1398e9ee8..d7eb427948 100644
--- a/themes/dark/assets/js/medusa-runtime.js
+++ b/themes/dark/assets/js/medusa-runtime.js
@@ -961,7 +961,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 vanilla_lazyload__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vanilla-lazyload */ \"./node_modules/vanilla-lazyload/dist/lazyload.min.js\");\n/* harmony import */ var vanilla_lazyload__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vanilla_lazyload__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../api.js */ \"./src/api.js\");\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n/* harmony import */ var _add_show_options_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./add-show-options.vue */ \"./src/components/add-show-options.vue\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers */ \"./src/components/helpers/index.js\");\n/* harmony import */ var _recommended_poster_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./recommended-poster.vue */ \"./src/components/recommended-poster.vue\");\n/* harmony import */ var vueisotope__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vueisotope */ \"./node_modules/vueisotope/dist/vue_isotope.min.js\");\n/* harmony import */ var vueisotope__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(vueisotope__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _fortawesome_vue_fontawesome__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @fortawesome/vue-fontawesome */ \"./node_modules/@fortawesome/vue-fontawesome/index.es.js\");\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'recommended',\n components: {\n AddShowOptions: _add_show_options_vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n ConfigTemplate: _helpers__WEBPACK_IMPORTED_MODULE_3__.ConfigTemplate,\n ConfigToggleSlider: _helpers__WEBPACK_IMPORTED_MODULE_3__.ConfigToggleSlider,\n FontAwesomeIcon: _fortawesome_vue_fontawesome__WEBPACK_IMPORTED_MODULE_6__.FontAwesomeIcon,\n RecommendedPoster: _recommended_poster_vue__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n TraktAuthentication: _helpers__WEBPACK_IMPORTED_MODULE_3__.TraktAuthentication,\n Isotope: (vueisotope__WEBPACK_IMPORTED_MODULE_5___default())\n },\n\n metaInfo() {\n if (!this.show || !this.show.title) {\n return {\n title: 'Medusa'\n };\n }\n\n const {\n title\n } = this.show;\n return {\n title,\n titleTemplate: '%s | Medusa'\n };\n },\n\n data() {\n const IMDB = 10;\n const ANIDB = 11;\n const TRAKT = 12;\n const ANILIST = 13;\n const externals = {\n IMDB,\n ANIDB,\n TRAKT,\n ANILIST\n };\n const sortOptions = [{\n text: 'Name',\n value: 'name'\n }, {\n text: 'Original',\n value: 'original'\n }, {\n text: 'Votes',\n value: 'votes'\n }, {\n text: '% Rating',\n value: 'rating'\n }, {\n text: '% Rating > Votes',\n value: 'rating_votes'\n }];\n const sortDirectionOptions = [{\n text: 'Ascending',\n value: 'asc'\n }, {\n text: 'Descending',\n value: 'desc'\n }];\n return {\n externals,\n sortOptions,\n sortDirectionOptions,\n sortOptionsValue: 'original',\n sortDirectionOptionsValue: 'desc',\n filterOption: null,\n filterShows: '',\n configLoaded: false,\n rootDirs: [],\n enableShowOptions: false,\n selectedShowOptions: {\n subtitles: null,\n status: null,\n statusAfter: null,\n seasonFolders: null,\n anime: null,\n scene: null,\n release: {\n blacklist: [],\n whitelist: []\n },\n quality: {\n allowed: [],\n preferred: []\n }\n },\n sourceOptions: [{\n text: 'Anidb',\n value: externals.ANIDB\n }, {\n text: 'IMDB',\n value: externals.IMDB\n }, {\n text: 'Trakt',\n value: externals.TRAKT\n }, {\n text: 'AniList',\n value: externals.ANILIST\n }, {\n text: 'all',\n value: -1\n }],\n selectedSource: 10,\n selectedList: '',\n // Isotope stuff\n selected: null,\n option: {\n getSortData: {\n id: 'seriesId',\n title: itemElem => {\n return itemElem.title.toLowerCase();\n },\n rating: 'rating',\n votes: 'votes'\n },\n getFilterData: {\n filterByText: itemElem => {\n return itemElem.title.toLowerCase().includes(this.filterShows.toLowerCase());\n }\n },\n sortBy: 'votes',\n layoutMode: 'fitRows',\n sortAscending: false\n },\n showTraktAuthDialog: false,\n traktWarning: false,\n traktWarningMessage: '',\n showsLoaded: false\n };\n },\n\n async mounted() {\n const {\n getRecommendedShows,\n sourceToString\n } = this;\n const identifiers = Object.values(sourceToString);\n\n for (const identifier of identifiers) {\n // eslint-disable-next-line no-await-in-loop\n await getRecommendedShows(identifier);\n }\n\n this.showsLoaded = true;\n this.$nextTick(() => {\n this.isotopeLayout();\n });\n this.$once('loaded', () => {\n this.configLoaded = true;\n });\n this.$watch('recommendedLists', () => {\n this.setSelectedList(this.selectedSource);\n });\n },\n\n computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_7__.mapState)({\n config: state => state.config,\n trakt: state => state.config.notifiers.trakt,\n recommendedShows: state => state.recommended.shows,\n traktConfig: state => state.recommended.trakt,\n recommendedLists: state => state.recommended.categories,\n queueitems: state => state.queue.queueitems,\n sourceToString: state => state.recommended.sourceToString\n }),\n\n filteredShowsByList() {\n const {\n imgLazyLoad,\n recommendedShows,\n selectedSource,\n selectedList\n } = this;\n let filteredList = null;\n\n if (selectedSource === -1) {\n return recommendedShows;\n }\n\n filteredList = recommendedShows.filter(show => show.source === selectedSource);\n\n if (selectedList) {\n filteredList = filteredList.filter(show => show.subcat === selectedList);\n }\n\n this.$nextTick(() => {\n // This is needed for now.\n imgLazyLoad.update();\n });\n return filteredList;\n },\n\n imgLazyLoad() {\n console.log('imgLazyLoad object constructud!');\n return new (vanilla_lazyload__WEBPACK_IMPORTED_MODULE_0___default())({\n // Example of options object -> see options section\n threshold: 500\n });\n },\n\n listOptions() {\n const {\n recommendedLists,\n selectedSource\n } = this;\n const sourceLists = recommendedLists[selectedSource] || [];\n return sourceLists.map(list => ({\n text: list,\n value: list\n }));\n }\n\n },\n methods: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_7__.mapActions)({\n getRecommendedShows: 'getRecommendedShows'\n }),\n\n containerClass(show) {\n let classes = 'recommended-container default-poster show-row';\n const {\n traktConfig\n } = this;\n const {\n removedFromMedusa\n } = traktConfig;\n\n if (show.showInLibrary) {\n classes += ' show-in-list';\n }\n\n if (removedFromMedusa.includes(show.externals.tvdb_id)) {\n classes += ' removed-from-medusa';\n }\n\n return classes;\n },\n\n isotopeLayout() {\n const {\n imgLazyLoad\n } = this;\n console.log('isotope Layout loaded');\n imgLazyLoad.update();\n },\n\n updateOptions(options) {\n // Update seleted options from add-show-options.vue @change event.\n const {\n anime,\n scene,\n seasonFolders,\n status,\n subtitles,\n statusAfter,\n release,\n quality\n } = options;\n const {\n blacklist,\n whitelist\n } = release;\n const {\n allowed,\n preferred\n } = quality;\n this.selectedShowOptions.subtitles = subtitles;\n this.selectedShowOptions.status = status;\n this.selectedShowOptions.statusAfter = statusAfter;\n this.selectedShowOptions.seasonFolders = seasonFolders;\n this.selectedShowOptions.anime = anime;\n this.selectedShowOptions.scene = scene;\n this.selectedShowOptions.release.blacklist = blacklist;\n this.selectedShowOptions.release.whitelist = whitelist;\n this.selectedShowOptions.quality.allowed = allowed;\n this.selectedShowOptions.quality.preferred = preferred;\n },\n\n sort() {\n const mapped = {\n original: 'original-order',\n rating: 'rating',\n votes: 'votes',\n name: 'title',\n rating_votes: ['rating', 'votes'] // eslint-disable-line camelcase\n\n };\n const {\n option: isotopeOptions,\n sortOptionsValue\n } = this;\n this.option.sortBy = mapped[sortOptionsValue];\n this.$refs.filteredShows.arrange(isotopeOptions);\n },\n\n filter(key) {\n this.$refs.filteredShows.filter(key);\n this.filterOption = key;\n },\n\n sortDirection() {\n const {\n option: isotopeOptions,\n sortDirectionOptionsValue\n } = this;\n this.option.sortAscending = sortDirectionOptionsValue === 'asc';\n this.$refs.filteredShows.arrange(isotopeOptions);\n },\n\n setSelectedList(selectedSource) {\n const {\n recommendedLists,\n selectedList\n } = this;\n const listOptions = recommendedLists[selectedSource];\n\n if (!listOptions) {\n return;\n }\n\n if (selectedList === '' || !listOptions.includes(selectedList)) {\n this.selectedList = listOptions[0];\n }\n },\n\n async searchRecommendedShows() {\n const {\n sourceToString,\n selectedSource\n } = this;\n const source = sourceToString[selectedSource];\n\n try {\n await _api_js__WEBPACK_IMPORTED_MODULE_1__.api.post(`recommended/${source}`);\n this.$snotify.success('Started search for new recommended shows', `Searching ${source}`);\n } catch (error) {\n if (error.response.status === 409) {\n this.$snotify.error(error.response.data.error, 'Error');\n }\n }\n }\n\n },\n watch: {\n selectedSource(newValue) {\n this.setSelectedList(newValue);\n\n if (newValue === this.externals.TRAKT) {\n const {\n trakt\n } = this;\n\n if (!trakt.enabled) {\n this.traktWarning = true;\n this.traktWarningMessage = 'You havent enabled trakt yet.';\n return;\n }\n\n (0,_api_js__WEBPACK_IMPORTED_MODULE_1__.apiRoute)('home/testTrakt').then(result => {\n if (result.data !== 'Test notice sent successfully to Trakt') {\n // Ask user if he wants to setup trakt authentication.\n this.traktWarning = true;\n this.traktWarningMessage = 'We could not authenticate to trakt. Do you want to set this up now?';\n }\n });\n }\n },\n\n queueitems(queueItems) {\n const filterRecommended = item => {\n return item.name.includes('UPDATE-RECOMMENDED') && item.success;\n }; // Check for a new recommended show queue item and refresh results.\n\n\n if (queueItems.filter(filterRecommended)) {\n this.getRecommendedShows();\n }\n }\n\n }\n});\n\n//# sourceURL=webpack://slim/./src/components/recommended.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-1%5B0%5D.rules%5B0%5D!./node_modules/vue-loader/lib/index.js??vue-loader-options");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var vanilla_lazyload__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vanilla-lazyload */ \"./node_modules/vanilla-lazyload/dist/lazyload.min.js\");\n/* harmony import */ var vanilla_lazyload__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vanilla_lazyload__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../api.js */ \"./src/api.js\");\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n/* harmony import */ var _add_show_options_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./add-show-options.vue */ \"./src/components/add-show-options.vue\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers */ \"./src/components/helpers/index.js\");\n/* harmony import */ var _recommended_poster_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./recommended-poster.vue */ \"./src/components/recommended-poster.vue\");\n/* harmony import */ var vueisotope__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vueisotope */ \"./node_modules/vueisotope/dist/vue_isotope.min.js\");\n/* harmony import */ var vueisotope__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(vueisotope__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _fortawesome_vue_fontawesome__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @fortawesome/vue-fontawesome */ \"./node_modules/@fortawesome/vue-fontawesome/index.es.js\");\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'recommended',\n components: {\n AddShowOptions: _add_show_options_vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n ConfigTemplate: _helpers__WEBPACK_IMPORTED_MODULE_3__.ConfigTemplate,\n ConfigToggleSlider: _helpers__WEBPACK_IMPORTED_MODULE_3__.ConfigToggleSlider,\n FontAwesomeIcon: _fortawesome_vue_fontawesome__WEBPACK_IMPORTED_MODULE_6__.FontAwesomeIcon,\n StateSwitch: _helpers__WEBPACK_IMPORTED_MODULE_3__.StateSwitch,\n RecommendedPoster: _recommended_poster_vue__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n TraktAuthentication: _helpers__WEBPACK_IMPORTED_MODULE_3__.TraktAuthentication,\n Isotope: (vueisotope__WEBPACK_IMPORTED_MODULE_5___default())\n },\n\n metaInfo() {\n if (!this.show || !this.show.title) {\n return {\n title: 'Medusa'\n };\n }\n\n const {\n title\n } = this.show;\n return {\n title,\n titleTemplate: '%s | Medusa'\n };\n },\n\n data() {\n const IMDB = 10;\n const ANIDB = 11;\n const TRAKT = 12;\n const ANILIST = 13;\n const externals = {\n IMDB,\n ANIDB,\n TRAKT,\n ANILIST\n };\n const sortOptions = [{\n text: 'Name',\n value: 'name'\n }, {\n text: 'Original',\n value: 'original'\n }, {\n text: 'Votes',\n value: 'votes'\n }, {\n text: '% Rating',\n value: 'rating'\n }, {\n text: '% Rating > Votes',\n value: 'rating_votes'\n }];\n const sortDirectionOptions = [{\n text: 'Ascending',\n value: 'asc'\n }, {\n text: 'Descending',\n value: 'desc'\n }];\n return {\n externals,\n sortOptions,\n sortDirectionOptions,\n sortOptionsValue: 'original',\n sortDirectionOptionsValue: 'desc',\n filterOption: null,\n filterShows: '',\n configLoaded: false,\n rootDirs: [],\n enableShowOptions: false,\n selectedShowOptions: {\n subtitles: null,\n status: null,\n statusAfter: null,\n seasonFolders: null,\n anime: null,\n scene: null,\n release: {\n blacklist: [],\n whitelist: []\n },\n quality: {\n allowed: [],\n preferred: []\n }\n },\n sourceOptions: [{\n text: 'Anidb',\n value: externals.ANIDB\n }, {\n text: 'IMDB',\n value: externals.IMDB\n }, {\n text: 'Trakt',\n value: externals.TRAKT\n }, {\n text: 'AniList',\n value: externals.ANILIST\n }, {\n text: 'all',\n value: -1\n }],\n selectedSource: 10,\n selectedList: '',\n // Isotope stuff\n selected: null,\n option: {\n getSortData: {\n id: 'seriesId',\n title: itemElem => {\n return itemElem.title.toLowerCase();\n },\n rating: 'rating',\n votes: 'votes'\n },\n getFilterData: {\n filterByText: itemElem => {\n return itemElem.title.toLowerCase().includes(this.filterShows.toLowerCase());\n }\n },\n sortBy: 'votes',\n layoutMode: 'fitRows',\n sortAscending: false\n },\n showTraktAuthDialog: false,\n traktWarning: false,\n traktWarningMessage: '',\n showsLoaded: false,\n loadingShows: false\n };\n },\n\n async mounted() {\n const {\n getRecommendedShows,\n getRecommendedShowsOptions,\n sourceToString\n } = this;\n const sources = Object.keys(sourceToString);\n await getRecommendedShowsOptions();\n\n for (const source of sources) {\n this.loadingShows = true; // eslint-disable-next-line no-await-in-loop\n\n await getRecommendedShows(source);\n this.loadingShows = false;\n }\n\n this.showsLoaded = true;\n this.$nextTick(() => {\n this.isotopeLayout();\n });\n this.$watch('recommendedLists', () => {\n this.setSelectedList(this.selectedSource);\n });\n },\n\n computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_7__.mapState)({\n config: state => state.config,\n trakt: state => state.config.notifiers.trakt,\n recommendedShows: state => state.recommended.shows,\n traktConfig: state => state.recommended.trakt,\n recommendedLists: state => state.recommended.categories,\n queueitems: state => state.queue.queueitems,\n sourceToString: state => state.recommended.sourceToString,\n page: state => state.recommended.page\n }),\n\n filteredShowsByList() {\n const {\n imgLazyLoad,\n recommendedShows,\n selectedSource,\n selectedList\n } = this;\n let filteredList = null;\n\n if (selectedSource === -1) {\n return recommendedShows;\n }\n\n filteredList = recommendedShows.filter(show => show.source === selectedSource);\n\n if (selectedList) {\n filteredList = filteredList.filter(show => show.subcat === selectedList);\n }\n\n this.$nextTick(() => {\n // This is needed for now.\n imgLazyLoad.update();\n });\n return filteredList;\n },\n\n imgLazyLoad() {\n console.log('imgLazyLoad object constructud!');\n return new (vanilla_lazyload__WEBPACK_IMPORTED_MODULE_0___default())({\n // Example of options object -> see options section\n threshold: 500\n });\n },\n\n listOptions() {\n const {\n recommendedLists,\n selectedSource\n } = this;\n\n if (!recommendedLists || !(selectedSource in recommendedLists)) {\n return;\n }\n\n const sourceLists = recommendedLists[selectedSource] || [];\n return sourceLists.map(list => ({\n text: list,\n value: list\n }));\n }\n\n },\n methods: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_7__.mapActions)({\n getRecommendedShows: 'getRecommendedShows',\n getRecommendedShowsOptions: 'getRecommendedShowsOptions',\n getMoreShows: 'getMoreShows'\n }),\n\n containerClass(show) {\n let classes = 'recommended-container default-poster show-row';\n const {\n traktConfig\n } = this;\n const {\n removedFromMedusa\n } = traktConfig;\n\n if (show.showInLibrary) {\n classes += ' show-in-list';\n }\n\n if (removedFromMedusa.includes(show.externals.tvdb_id)) {\n classes += ' removed-from-medusa';\n }\n\n return classes;\n },\n\n isotopeLayout() {\n const {\n imgLazyLoad\n } = this;\n console.log('isotope Layout loaded');\n imgLazyLoad.update();\n },\n\n updateOptions(options) {\n // Update seleted options from add-show-options.vue @change event.\n const {\n anime,\n scene,\n seasonFolders,\n status,\n subtitles,\n statusAfter,\n release,\n quality\n } = options;\n const {\n blacklist,\n whitelist\n } = release;\n const {\n allowed,\n preferred\n } = quality;\n this.selectedShowOptions.subtitles = subtitles;\n this.selectedShowOptions.status = status;\n this.selectedShowOptions.statusAfter = statusAfter;\n this.selectedShowOptions.seasonFolders = seasonFolders;\n this.selectedShowOptions.anime = anime;\n this.selectedShowOptions.scene = scene;\n this.selectedShowOptions.release.blacklist = blacklist;\n this.selectedShowOptions.release.whitelist = whitelist;\n this.selectedShowOptions.quality.allowed = allowed;\n this.selectedShowOptions.quality.preferred = preferred;\n },\n\n sort() {\n const mapped = {\n original: 'original-order',\n rating: 'rating',\n votes: 'votes',\n name: 'title',\n rating_votes: ['rating', 'votes'] // eslint-disable-line camelcase\n\n };\n const {\n option: isotopeOptions,\n sortOptionsValue\n } = this;\n this.option.sortBy = mapped[sortOptionsValue];\n this.$refs.filteredShows.arrange(isotopeOptions);\n },\n\n filter(key) {\n this.$refs.filteredShows.filter(key);\n this.filterOption = key;\n },\n\n sortDirection() {\n const {\n option: isotopeOptions,\n sortDirectionOptionsValue\n } = this;\n this.option.sortAscending = sortDirectionOptionsValue === 'asc';\n this.$refs.filteredShows.arrange(isotopeOptions);\n },\n\n setSelectedList(selectedSource) {\n const {\n recommendedLists,\n selectedList\n } = this;\n const listOptions = recommendedLists[selectedSource];\n\n if (!listOptions) {\n return;\n }\n\n if (selectedList === '' || !listOptions.includes(selectedList)) {\n this.selectedList = listOptions[0];\n }\n },\n\n async searchRecommendedShows() {\n const {\n sourceToString,\n selectedSource\n } = this;\n const source = sourceToString[selectedSource];\n\n try {\n await _api_js__WEBPACK_IMPORTED_MODULE_1__.api.post(`recommended/${source}`);\n this.$snotify.success('Started search for new recommended shows', `Searching ${source}`);\n } catch (error) {\n if (error.response.status === 409) {\n this.$snotify.error(error.response.data.error, 'Error');\n }\n }\n },\n\n getMore() {\n this.loadingShows = true;\n this.getMoreShows(this.selectedSource).finally(() => {\n this.loadingShows = false;\n });\n }\n\n },\n watch: {\n selectedSource(newValue) {\n this.setSelectedList(newValue);\n\n if (newValue === this.externals.TRAKT) {\n const {\n trakt\n } = this;\n\n if (!trakt.enabled) {\n this.traktWarning = true;\n this.traktWarningMessage = 'You havent enabled trakt yet.';\n return;\n }\n\n (0,_api_js__WEBPACK_IMPORTED_MODULE_1__.apiRoute)('home/testTrakt').then(result => {\n if (result.data !== 'Test notice sent successfully to Trakt') {\n // Ask user if he wants to setup trakt authentication.\n this.traktWarning = true;\n this.traktWarningMessage = 'We could not authenticate to trakt. Do you want to set this up now?';\n }\n });\n }\n },\n\n queueitems(queueItems) {\n const filterRecommended = item => {\n return item.name.includes('UPDATE-RECOMMENDED') && item.success;\n }; // Check for a new recommended show queue item and refresh results.\n\n\n if (queueItems.filter(filterRecommended)) {\n this.getRecommendedShows();\n }\n }\n\n }\n});\n\n//# sourceURL=webpack://slim/./src/components/recommended.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-1%5B0%5D.rules%5B0%5D!./node_modules/vue-loader/lib/index.js??vue-loader-options");
/***/ }),
@@ -1830,7 +1830,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_2__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../api */ \"./src/api.js\");\n/* harmony import */ var _mutation_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../mutation-types */ \"./src/store/mutation-types.js\");\n\n\n\nconst IMDB = 10;\nconst ANIDB = 11;\nconst TRAKT = 12;\nconst ANILIST = 13;\nconst state = {\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};\nconst mutations = {\n [_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_RECOMMENDED_SHOW](state, show) {\n const existingShow = state.shows.find(_ref => {\n let {\n seriesId,\n source\n } = _ref;\n return Number(show.seriesId[show.source]) === Number(seriesId[source]);\n });\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 } // 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\n\n console.debug(`Found ${show.title || show.source + String(show.seriesId)} in shows array attempting merge`);\n const newShow = { ...existingShow,\n ...show\n }; // Update state\n\n vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"].set(state.shows, state.shows.indexOf(existingShow), newShow);\n console.debug(`Merged ${newShow.title || newShow.source + String(newShow.seriesId)}`, newShow);\n },\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_1__.SET_RECOMMENDED_SHOWS](state, _ref2) {\n let {\n shows,\n identifier\n } = _ref2;\n\n if (identifier) {\n // If an identifier has been passed, remove the old shows for this identifier.\n const source = Number(Object.keys(state.sourceToString).find(key => state.sourceToString[key] === identifier));\n state.shows = state.shows.filter(show => show.source !== source);\n } else {\n // No identifier passed, meaning remove all shows from store.\n state.shows = [];\n }\n\n state.shows = [...state.shows, ...shows];\n },\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_1__.SET_RECOMMENDED_SHOWS_OPTIONS](state, data) {\n state.trakt.removedFromMedusa = data.trakt.removedFromMedusa;\n state.trakt.blacklistEnabled = data.trakt.blacklistEnabled;\n state.trakt.availableLists = data.trakt.availableLists;\n state.categories = data.categories;\n }\n\n};\nconst getters = {};\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} identifier - Identifier for the recommended shows list.\n * @returns {(undefined|Promise)} undefined if `shows` was provided or the API response if not.\n */\n getRecommendedShows(_ref3, identifier) {\n let {\n commit\n } = _ref3;\n identifier = identifier ? identifier : '';\n return _api__WEBPACK_IMPORTED_MODULE_0__.api.get(`/recommended/${identifier}`, {\n timeout: 60000\n }).then(response => {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_1__.SET_RECOMMENDED_SHOWS, {\n shows: response.data.shows,\n identifier\n });\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_1__.SET_RECOMMENDED_SHOWS_OPTIONS, response.data);\n });\n }\n\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n state,\n mutations,\n getters,\n actions\n});\n\n//# sourceURL=webpack://slim/./src/store/modules/recommended.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_2__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../api */ \"./src/api.js\");\n/* harmony import */ var _mutation_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../mutation-types */ \"./src/store/mutation-types.js\");\n\n\n\nconst IMDB = 10;\nconst ANIDB = 11;\nconst TRAKT = 12;\nconst ANILIST = 13;\nconst state = {\n limit: 500,\n page: {\n [IMDB]: 1,\n [ANIDB]: 1,\n [TRAKT]: 1,\n [ANILIST]: 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};\nconst mutations = {\n [_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_RECOMMENDED_SHOW](state, show) {\n const existingShow = state.shows.find(_ref => {\n let {\n seriesId,\n source\n } = _ref;\n return Number(show.seriesId[show.source]) === Number(seriesId[source]);\n });\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 } // 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\n\n console.debug(`Found ${show.title || show.source + String(show.seriesId)} in shows array attempting merge`);\n const newShow = { ...existingShow,\n ...show\n }; // Update state\n\n vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"].set(state.shows, state.shows.indexOf(existingShow), newShow);\n console.debug(`Merged ${newShow.title || newShow.source + String(newShow.seriesId)}`, newShow);\n },\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_1__.SET_RECOMMENDED_SHOWS](state, _ref2) {\n let {\n shows,\n source\n } = _ref2;\n\n if (shows.length < state.limit) {\n state.page[source] = -1;\n }\n\n state.shows = [...state.shows, ...shows];\n },\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_1__.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\n [_mutation_types__WEBPACK_IMPORTED_MODULE_1__.SET_RECOMMENDED_SHOWS_CATEGORIES](state, data) {\n state.categories = data;\n },\n\n increasePage(state, source) {\n state.page[source] += 1;\n }\n\n};\nconst getters = {};\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(_ref3, source) {\n let {\n state,\n commit\n } = _ref3;\n\n if (state.page[source] === -1) {\n return;\n }\n\n const identifier = source ? state.sourceToString[source] : '';\n const {\n page\n } = state;\n return _api__WEBPACK_IMPORTED_MODULE_0__.api.get(`/recommended/${identifier}?page=${page[source]}&limit=${state.limit}`, {\n timeout: 60000\n }).then(response => {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_1__.SET_RECOMMENDED_SHOWS, {\n shows: response.data,\n source\n });\n });\n },\n\n getRecommendedShowsOptions(_ref4) {\n let {\n commit\n } = _ref4;\n _api__WEBPACK_IMPORTED_MODULE_0__.api.get('/recommended/trakt/removed', {\n timeout: 60000\n }).then(response => {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_1__.SET_RECOMMENDED_SHOWS_TRAKT_REMOVED, response.data);\n });\n _api__WEBPACK_IMPORTED_MODULE_0__.api.get('/recommended/categories', {\n timeout: 60000\n }).then(response => {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_1__.SET_RECOMMENDED_SHOWS_CATEGORIES, response.data);\n });\n },\n\n getMoreShows(_ref5, source) {\n let {\n commit,\n dispatch\n } = _ref5;\n commit('increasePage', source);\n return dispatch('getRecommendedShows', source);\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/recommended.js?");
/***/ }),
@@ -1885,7 +1885,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 */ \"LOGIN_PENDING\": () => (/* binding */ LOGIN_PENDING),\n/* harmony export */ \"LOGIN_SUCCESS\": () => (/* binding */ LOGIN_SUCCESS),\n/* harmony export */ \"LOGIN_FAILED\": () => (/* binding */ LOGIN_FAILED),\n/* harmony export */ \"LOGOUT\": () => (/* binding */ LOGOUT),\n/* harmony export */ \"REFRESH_TOKEN\": () => (/* binding */ REFRESH_TOKEN),\n/* harmony export */ \"REMOVE_AUTH_ERROR\": () => (/* binding */ REMOVE_AUTH_ERROR),\n/* harmony export */ \"SOCKET_ONOPEN\": () => (/* binding */ SOCKET_ONOPEN),\n/* harmony export */ \"SOCKET_ONCLOSE\": () => (/* binding */ SOCKET_ONCLOSE),\n/* harmony export */ \"SOCKET_ONERROR\": () => (/* binding */ SOCKET_ONERROR),\n/* harmony export */ \"SOCKET_ONMESSAGE\": () => (/* binding */ SOCKET_ONMESSAGE),\n/* harmony export */ \"SOCKET_RECONNECT\": () => (/* binding */ SOCKET_RECONNECT),\n/* harmony export */ \"SOCKET_RECONNECT_ERROR\": () => (/* binding */ SOCKET_RECONNECT_ERROR),\n/* harmony export */ \"NOTIFICATIONS_ENABLED\": () => (/* binding */ NOTIFICATIONS_ENABLED),\n/* harmony export */ \"NOTIFICATIONS_DISABLED\": () => (/* binding */ NOTIFICATIONS_DISABLED),\n/* harmony export */ \"ADD_CONFIG\": () => (/* binding */ ADD_CONFIG),\n/* harmony export */ \"UPDATE_LAYOUT_LOCAL\": () => (/* binding */ UPDATE_LAYOUT_LOCAL),\n/* harmony export */ \"ADD_HISTORY\": () => (/* binding */ ADD_HISTORY),\n/* harmony export */ \"ADD_HISTORY_ROW\": () => (/* binding */ ADD_HISTORY_ROW),\n/* harmony export */ \"ADD_SHOW\": () => (/* binding */ ADD_SHOW),\n/* harmony export */ \"ADD_STATS\": () => (/* binding */ ADD_STATS),\n/* harmony export */ \"ADD_SHOW_CONFIG\": () => (/* binding */ ADD_SHOW_CONFIG),\n/* harmony export */ \"ADD_RECOMMENDED_SHOW\": () => (/* binding */ ADD_RECOMMENDED_SHOW),\n/* harmony export */ \"SET_RECOMMENDED_SHOWS\": () => (/* binding */ SET_RECOMMENDED_SHOWS),\n/* harmony export */ \"SET_RECOMMENDED_SHOWS_OPTIONS\": () => (/* binding */ SET_RECOMMENDED_SHOWS_OPTIONS),\n/* harmony export */ \"ADD_SHOWS\": () => (/* binding */ ADD_SHOWS),\n/* harmony export */ \"ADD_SHOW_EPISODE\": () => (/* binding */ ADD_SHOW_EPISODE),\n/* harmony export */ \"ADD_REMOTE_BRANCHES\": () => (/* binding */ ADD_REMOTE_BRANCHES),\n/* harmony export */ \"SET_STATS\": () => (/* binding */ SET_STATS),\n/* harmony export */ \"SET_MAX_DOWNLOAD_COUNT\": () => (/* binding */ SET_MAX_DOWNLOAD_COUNT),\n/* harmony export */ \"ADD_SHOW_SCENE_EXCEPTION\": () => (/* binding */ ADD_SHOW_SCENE_EXCEPTION),\n/* harmony export */ \"REMOVE_SHOW_SCENE_EXCEPTION\": () => (/* binding */ REMOVE_SHOW_SCENE_EXCEPTION),\n/* harmony export */ \"REMOVE_SHOW_CONFIG_TEMPLATE\": () => (/* binding */ REMOVE_SHOW_CONFIG_TEMPLATE),\n/* harmony export */ \"ADD_SHOW_HISTORY\": () => (/* binding */ ADD_SHOW_HISTORY),\n/* harmony export */ \"ADD_SHOW_EPISODE_HISTORY\": () => (/* binding */ ADD_SHOW_EPISODE_HISTORY),\n/* harmony export */ \"ADD_PROVIDER\": () => (/* binding */ ADD_PROVIDER),\n/* harmony export */ \"ADD_PROVIDERS\": () => (/* binding */ ADD_PROVIDERS),\n/* harmony export */ \"ADD_PROVIDER_CACHE\": () => (/* binding */ ADD_PROVIDER_CACHE),\n/* harmony export */ \"ADD_SEARCH_RESULTS\": () => (/* binding */ ADD_SEARCH_RESULTS),\n/* harmony export */ \"ADD_QUEUE_ITEM\": () => (/* binding */ ADD_QUEUE_ITEM),\n/* harmony export */ \"ADD_SHOW_QUEUE_ITEM\": () => (/* binding */ ADD_SHOW_QUEUE_ITEM),\n/* harmony export */ \"REMOVE_SHOW\": () => (/* binding */ REMOVE_SHOW),\n/* harmony export */ \"REMOVE_PROVIDER\": () => (/* binding */ REMOVE_PROVIDER),\n/* harmony export */ \"UPDATE_SHOWLIST_DEFAULT\": () => (/* binding */ UPDATE_SHOWLIST_DEFAULT),\n/* harmony export */ \"ADD_SHOW_CONFIG_TEMPLATE\": () => (/* binding */ ADD_SHOW_CONFIG_TEMPLATE),\n/* harmony export */ \"ADD_SCHEDULE\": () => (/* binding */ ADD_SCHEDULE)\n/* harmony export */ });\nconst 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_OPTIONS = 'đē Recommended Show Options 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 ADD_SHOW_QUEUE_ITEM = 'đē Show queue item added to store';\nconst REMOVE_SHOW = 'đē Show removed from store';\nconst REMOVE_PROVIDER = 'âŊ Provider removed';\nconst UPDATE_SHOWLIST_DEFAULT = 'âī¸ Anime config showlist default updated';\nconst ADD_SCHEDULE = 'đ
Schedule information added';\n\n\n//# sourceURL=webpack://slim/./src/store/mutation-types.js?");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"LOGIN_PENDING\": () => (/* binding */ LOGIN_PENDING),\n/* harmony export */ \"LOGIN_SUCCESS\": () => (/* binding */ LOGIN_SUCCESS),\n/* harmony export */ \"LOGIN_FAILED\": () => (/* binding */ LOGIN_FAILED),\n/* harmony export */ \"LOGOUT\": () => (/* binding */ LOGOUT),\n/* harmony export */ \"REFRESH_TOKEN\": () => (/* binding */ REFRESH_TOKEN),\n/* harmony export */ \"REMOVE_AUTH_ERROR\": () => (/* binding */ REMOVE_AUTH_ERROR),\n/* harmony export */ \"SOCKET_ONOPEN\": () => (/* binding */ SOCKET_ONOPEN),\n/* harmony export */ \"SOCKET_ONCLOSE\": () => (/* binding */ SOCKET_ONCLOSE),\n/* harmony export */ \"SOCKET_ONERROR\": () => (/* binding */ SOCKET_ONERROR),\n/* harmony export */ \"SOCKET_ONMESSAGE\": () => (/* binding */ SOCKET_ONMESSAGE),\n/* harmony export */ \"SOCKET_RECONNECT\": () => (/* binding */ SOCKET_RECONNECT),\n/* harmony export */ \"SOCKET_RECONNECT_ERROR\": () => (/* binding */ SOCKET_RECONNECT_ERROR),\n/* harmony export */ \"NOTIFICATIONS_ENABLED\": () => (/* binding */ NOTIFICATIONS_ENABLED),\n/* harmony export */ \"NOTIFICATIONS_DISABLED\": () => (/* binding */ NOTIFICATIONS_DISABLED),\n/* harmony export */ \"ADD_CONFIG\": () => (/* binding */ ADD_CONFIG),\n/* harmony export */ \"UPDATE_LAYOUT_LOCAL\": () => (/* binding */ UPDATE_LAYOUT_LOCAL),\n/* harmony export */ \"ADD_HISTORY\": () => (/* binding */ ADD_HISTORY),\n/* harmony export */ \"ADD_HISTORY_ROW\": () => (/* binding */ ADD_HISTORY_ROW),\n/* harmony export */ \"ADD_SHOW\": () => (/* binding */ ADD_SHOW),\n/* harmony export */ \"ADD_STATS\": () => (/* binding */ ADD_STATS),\n/* harmony export */ \"ADD_SHOW_CONFIG\": () => (/* binding */ ADD_SHOW_CONFIG),\n/* harmony export */ \"ADD_RECOMMENDED_SHOW\": () => (/* binding */ ADD_RECOMMENDED_SHOW),\n/* harmony export */ \"SET_RECOMMENDED_SHOWS\": () => (/* binding */ SET_RECOMMENDED_SHOWS),\n/* harmony export */ \"SET_RECOMMENDED_SHOWS_TRAKT_REMOVED\": () => (/* binding */ SET_RECOMMENDED_SHOWS_TRAKT_REMOVED),\n/* harmony export */ \"SET_RECOMMENDED_SHOWS_CATEGORIES\": () => (/* binding */ SET_RECOMMENDED_SHOWS_CATEGORIES),\n/* harmony export */ \"ADD_SHOWS\": () => (/* binding */ ADD_SHOWS),\n/* harmony export */ \"ADD_SHOW_EPISODE\": () => (/* binding */ ADD_SHOW_EPISODE),\n/* harmony export */ \"ADD_REMOTE_BRANCHES\": () => (/* binding */ ADD_REMOTE_BRANCHES),\n/* harmony export */ \"SET_STATS\": () => (/* binding */ SET_STATS),\n/* harmony export */ \"SET_MAX_DOWNLOAD_COUNT\": () => (/* binding */ SET_MAX_DOWNLOAD_COUNT),\n/* harmony export */ \"ADD_SHOW_SCENE_EXCEPTION\": () => (/* binding */ ADD_SHOW_SCENE_EXCEPTION),\n/* harmony export */ \"REMOVE_SHOW_SCENE_EXCEPTION\": () => (/* binding */ REMOVE_SHOW_SCENE_EXCEPTION),\n/* harmony export */ \"REMOVE_SHOW_CONFIG_TEMPLATE\": () => (/* binding */ REMOVE_SHOW_CONFIG_TEMPLATE),\n/* harmony export */ \"ADD_SHOW_HISTORY\": () => (/* binding */ ADD_SHOW_HISTORY),\n/* harmony export */ \"ADD_SHOW_EPISODE_HISTORY\": () => (/* binding */ ADD_SHOW_EPISODE_HISTORY),\n/* harmony export */ \"ADD_PROVIDER\": () => (/* binding */ ADD_PROVIDER),\n/* harmony export */ \"ADD_PROVIDERS\": () => (/* binding */ ADD_PROVIDERS),\n/* harmony export */ \"ADD_PROVIDER_CACHE\": () => (/* binding */ ADD_PROVIDER_CACHE),\n/* harmony export */ \"ADD_SEARCH_RESULTS\": () => (/* binding */ ADD_SEARCH_RESULTS),\n/* harmony export */ \"ADD_QUEUE_ITEM\": () => (/* binding */ ADD_QUEUE_ITEM),\n/* harmony export */ \"ADD_SHOW_QUEUE_ITEM\": () => (/* binding */ ADD_SHOW_QUEUE_ITEM),\n/* harmony export */ \"REMOVE_SHOW\": () => (/* binding */ REMOVE_SHOW),\n/* harmony export */ \"REMOVE_PROVIDER\": () => (/* binding */ REMOVE_PROVIDER),\n/* harmony export */ \"UPDATE_SHOWLIST_DEFAULT\": () => (/* binding */ UPDATE_SHOWLIST_DEFAULT),\n/* harmony export */ \"ADD_SHOW_CONFIG_TEMPLATE\": () => (/* binding */ ADD_SHOW_CONFIG_TEMPLATE),\n/* harmony export */ \"ADD_SCHEDULE\": () => (/* binding */ ADD_SCHEDULE)\n/* harmony export */ });\nconst 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 ADD_SHOW_QUEUE_ITEM = 'đē Show queue item added to store';\nconst REMOVE_SHOW = 'đē Show removed from store';\nconst REMOVE_PROVIDER = 'âŊ Provider removed';\nconst UPDATE_SHOWLIST_DEFAULT = 'âī¸ Anime config showlist default updated';\nconst ADD_SCHEDULE = 'đ
Schedule information added';\n\n\n//# sourceURL=webpack://slim/./src/store/mutation-types.js?");
/***/ }),
@@ -2528,7 +2528,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.trakt-auth-container[data-v-7226820a] {\\n padding: 10px;\\n border: 1px solid rgb(255 255 255);\\n box-shadow: 5px 5px dimgrey;\\n}\\n.trakt-auth-container > .close-container[data-v-7226820a] {\\n position: absolute;\\n top: -24px;\\n right: 15px;\\n color: red;\\n}\\nspan.trakt-warning[data-v-7226820a] {\\n margin: 0 0 14px 0;\\n display: block;\\n color: red;\\n}\\n\\n\", \"\"]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n\n\n//# sourceURL=webpack://slim/./src/components/recommended.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3%5B0%5D.rules%5B0%5D.use%5B1%5D!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options");
+eval("// Imports\nvar ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.trakt-auth-container[data-v-7226820a] {\\n padding: 10px;\\n border: 1px solid rgb(255 255 255);\\n box-shadow: 5px 5px dimgrey;\\n}\\n.trakt-auth-container > .close-container[data-v-7226820a] {\\n position: absolute;\\n top: -24px;\\n right: 15px;\\n color: red;\\n}\\nspan.trakt-warning[data-v-7226820a] {\\n margin: 0 0 14px 0;\\n display: block;\\n color: red;\\n}\\n.load-more[data-v-7226820a] {\\n display: flex;\\n justify-content: center;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n\n\n//# sourceURL=webpack://slim/./src/components/recommended.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3%5B0%5D.rules%5B0%5D.use%5B1%5D!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options");
/***/ }),
@@ -8068,7 +8068,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": () => (/* binding */ render),\n/* harmony export */ \"staticRenderFns\": () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { attrs: { id: \"recommended-shows\" } },\n [\n _c(\"vue-snotify\"),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"row\", attrs: { id: \"recommended-shows-lists\" } },\n [\n _c(\n \"div\",\n { staticClass: \"col-md-12\" },\n [\n _c(\n \"config-template\",\n {\n attrs: {\n \"label-for\": \"recommended-source\",\n label: \"Select a Source\"\n }\n },\n [\n !_vm.showsLoaded\n ? _c(\n \"select\",\n {\n staticClass: \"form-control max-width\",\n attrs: { disabled: \"disabled\" }\n },\n [\n _c(\"option\", { attrs: { value: \"\" } }, [\n _vm._v(\"Loading shows, please wait\")\n ])\n ]\n )\n : _c(\n \"select\",\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.selectedSource,\n expression: \"selectedSource\"\n }\n ],\n staticClass: \"form-control max-width\",\n attrs: {\n disabled: !_vm.showsLoaded,\n id: \"recommended-source\",\n name: \"recommended-source\"\n },\n on: {\n change: function($event) {\n var $$selectedVal = Array.prototype.filter\n .call($event.target.options, function(o) {\n return o.selected\n })\n .map(function(o) {\n var val = \"_value\" in o ? o._value : o.value\n return val\n })\n _vm.selectedSource = $event.target.multiple\n ? $$selectedVal\n : $$selectedVal[0]\n }\n }\n },\n _vm._l(_vm.sourceOptions, function(option) {\n return _c(\n \"option\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showsLoaded,\n expression: \"showsLoaded\"\n }\n ],\n key: option.value,\n domProps: { value: option.value }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(option.text) +\n \"\\n \"\n )\n ]\n )\n }),\n 0\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"config-template\",\n {\n attrs: {\n \"label-for\": \"recommended-list\",\n label: \"Select a list\"\n }\n },\n [\n _c(\n \"select\",\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.selectedList,\n expression: \"selectedList\"\n }\n ],\n staticClass: \"form-control max-width\",\n attrs: {\n disabled: !_vm.showsLoaded,\n id: \"recommended-list\",\n name: \"recommended-list\"\n },\n on: {\n change: function($event) {\n var $$selectedVal = Array.prototype.filter\n .call($event.target.options, function(o) {\n return o.selected\n })\n .map(function(o) {\n var val = \"_value\" in o ? o._value : o.value\n return val\n })\n _vm.selectedList = $event.target.multiple\n ? $$selectedVal\n : $$selectedVal[0]\n }\n }\n },\n _vm._l(_vm.listOptions, function(option) {\n return _c(\n \"option\",\n {\n key: option.value,\n domProps: { value: option.value }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(option.text) +\n \"\\n \"\n )\n ]\n )\n }),\n 0\n )\n ]\n )\n ],\n 1\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"row\", attrs: { id: \"recommended-shows-options\" } },\n [\n _c(\n \"div\",\n { staticClass: \"col-md-12\" },\n [\n _c(\"config-toggle-slider\", {\n attrs: {\n label: \"Pass Default show options\",\n id: \"default_show_options\"\n },\n model: {\n value: _vm.enableShowOptions,\n callback: function($$v) {\n _vm.enableShowOptions = $$v\n },\n expression: \"enableShowOptions\"\n }\n }),\n _vm._v(\" \"),\n _c(\"add-show-options\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.enableShowOptions,\n expression: \"enableShowOptions\"\n }\n ],\n attrs: { \"enable-anime-options\": \"\" },\n on: { change: _vm.updateOptions }\n }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"show-option\" }, [\n _c(\"span\", [_vm._v(\"Sort By:\")]),\n _vm._v(\" \"),\n _c(\n \"select\",\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.sortOptionsValue,\n expression: \"sortOptionsValue\"\n }\n ],\n staticClass: \"form-control form-control-inline input-sm\",\n attrs: { name: \"showsort\", id: \"showsort\" },\n on: {\n change: [\n function($event) {\n var $$selectedVal = Array.prototype.filter\n .call($event.target.options, function(o) {\n return o.selected\n })\n .map(function(o) {\n var val = \"_value\" in o ? o._value : o.value\n return val\n })\n _vm.sortOptionsValue = $event.target.multiple\n ? $$selectedVal\n : $$selectedVal[0]\n },\n _vm.sort\n ]\n }\n },\n _vm._l(_vm.sortOptions, function(option) {\n return _c(\n \"option\",\n { key: option.value, domProps: { value: option.value } },\n [_vm._v(_vm._s(option.text))]\n )\n }),\n 0\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"show-option\" }, [\n _c(\"span\", { staticStyle: { \"margin-left\": \"12px\" } }, [\n _vm._v(\"Sort Order:\")\n ]),\n _vm._v(\" \"),\n _c(\n \"select\",\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.sortDirectionOptionsValue,\n expression: \"sortDirectionOptionsValue\"\n }\n ],\n staticClass: \"form-control form-control-inline input-sm\",\n attrs: {\n name: \"showsortdirection\",\n id: \"showsortdirection\"\n },\n on: {\n change: [\n function($event) {\n var $$selectedVal = Array.prototype.filter\n .call($event.target.options, function(o) {\n return o.selected\n })\n .map(function(o) {\n var val = \"_value\" in o ? o._value : o.value\n return val\n })\n _vm.sortDirectionOptionsValue = $event.target.multiple\n ? $$selectedVal\n : $$selectedVal[0]\n },\n _vm.sortDirection\n ]\n }\n },\n _vm._l(_vm.sortDirectionOptions, function(option) {\n return _c(\n \"option\",\n { key: option.value, domProps: { value: option.value } },\n [_vm._v(_vm._s(option.text))]\n )\n }),\n 0\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"show-option\" }, [\n _c(\"span\", { staticStyle: { \"margin-left\": \"12px\" } }, [\n _vm._v(\"Filter:\")\n ]),\n _vm._v(\" \"),\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.filterShows,\n expression: \"filterShows\"\n }\n ],\n staticClass: \"form-control form-control-inline input-sm\",\n attrs: { type: \"text\", placeholder: \"no filter\" },\n domProps: { value: _vm.filterShows },\n on: {\n input: [\n function($event) {\n if ($event.target.composing) {\n return\n }\n _vm.filterShows = $event.target.value\n },\n function($event) {\n return _vm.filter(\"filterByText\")\n }\n ]\n }\n })\n ])\n ],\n 1\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"row\", attrs: { id: \"recommended-shows\" } }, [\n _c(\n \"div\",\n { staticClass: \"col-md-12\", attrs: { id: \"popularShows\" } },\n [\n _vm.selectedSource === _vm.externals.TRAKT && _vm.traktWarning\n ? _c(\n \"div\",\n { staticClass: \"trakt-auth-container\" },\n [\n _c(\"font-awesome-icon\", {\n staticClass: \"close-container\",\n attrs: { icon: [\"far\", \"times-circle\"] },\n on: {\n click: function($event) {\n _vm.traktWarning = false\n }\n }\n }),\n _vm._v(\" \"),\n _vm.traktWarning\n ? _c(\"span\", { staticClass: \"trakt-warning\" }, [\n _vm._v(_vm._s(_vm.traktWarningMessage))\n ])\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.showTraktAuthDialog\n ? _c(\n \"button\",\n {\n staticClass: \"btn-medusa\",\n attrs: { id: \"config-trakt\" },\n on: {\n click: function($event) {\n _vm.showTraktAuthDialog = true\n }\n }\n },\n [_vm._v(\"Config Trakt\")]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showTraktAuthDialog\n ? _c(\"trakt-authentication\", {\n attrs: { \"auth-only\": \"\" }\n })\n : _vm._e()\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showsLoaded && _vm.filteredShowsByList.length\n ? _c(\n \"isotope\",\n {\n ref: \"filteredShows\",\n staticClass: \"isoDefault\",\n attrs: {\n list: _vm.filteredShowsByList,\n id: \"isotope-container\",\n options: _vm.option\n },\n on: { layout: _vm.isotopeLayout }\n },\n _vm._l(_vm.filteredShowsByList, function(show) {\n return _c(\n \"div\",\n {\n key: show.seriesId,\n class: _vm.containerClass(show),\n attrs: {\n \"data-name\": show.title,\n \"data-rating\": show.rating,\n \"data-votes\": show.votes,\n \"data-anime\": show.isAnime\n }\n },\n [_c(\"recommended-poster\", { attrs: { show: show } })],\n 1\n )\n }),\n 0\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showsLoaded &&\n _vm.filteredShowsByList.length === 0 &&\n _vm.selectedSource !== -1\n ? _c(\"div\", { staticClass: \"align-center\" }, [\n _c(\n \"button\",\n {\n staticClass: \"btn-medusa btn-xs rec-show-button\",\n on: { click: _vm.searchRecommendedShows }\n },\n [\n _vm._v(\n \"\\n Search for new recommended shows from \" +\n _vm._s(_vm.sourceToString[_vm.selectedSource]) +\n \"\\n \"\n )\n ]\n )\n ])\n : _vm._e()\n ],\n 1\n )\n ])\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack://slim/./src/components/recommended.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": () => (/* binding */ render),\n/* harmony export */ \"staticRenderFns\": () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { attrs: { id: \"recommended-shows\" } },\n [\n _c(\"vue-snotify\"),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"row\", attrs: { id: \"recommended-shows-lists\" } },\n [\n _c(\n \"div\",\n { staticClass: \"col-md-12\" },\n [\n _c(\n \"config-template\",\n {\n attrs: {\n \"label-for\": \"recommended-source\",\n label: \"Select a Source\"\n }\n },\n [\n !_vm.showsLoaded\n ? _c(\n \"select\",\n {\n staticClass: \"form-control max-width\",\n attrs: { disabled: \"disabled\" }\n },\n [\n _c(\"option\", { attrs: { value: \"\" } }, [\n _vm._v(\"Loading shows, please wait\")\n ])\n ]\n )\n : _c(\n \"select\",\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.selectedSource,\n expression: \"selectedSource\"\n }\n ],\n staticClass: \"form-control max-width\",\n attrs: {\n disabled: !_vm.showsLoaded,\n id: \"recommended-source\",\n name: \"recommended-source\"\n },\n on: {\n change: function($event) {\n var $$selectedVal = Array.prototype.filter\n .call($event.target.options, function(o) {\n return o.selected\n })\n .map(function(o) {\n var val = \"_value\" in o ? o._value : o.value\n return val\n })\n _vm.selectedSource = $event.target.multiple\n ? $$selectedVal\n : $$selectedVal[0]\n }\n }\n },\n _vm._l(_vm.sourceOptions, function(option) {\n return _c(\n \"option\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showsLoaded,\n expression: \"showsLoaded\"\n }\n ],\n key: option.value,\n domProps: { value: option.value }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(option.text) +\n \"\\n \"\n )\n ]\n )\n }),\n 0\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"config-template\",\n {\n attrs: {\n \"label-for\": \"recommended-list\",\n label: \"Select a list\"\n }\n },\n [\n _c(\n \"select\",\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.selectedList,\n expression: \"selectedList\"\n }\n ],\n staticClass: \"form-control max-width\",\n attrs: {\n disabled: !_vm.showsLoaded,\n id: \"recommended-list\",\n name: \"recommended-list\"\n },\n on: {\n change: function($event) {\n var $$selectedVal = Array.prototype.filter\n .call($event.target.options, function(o) {\n return o.selected\n })\n .map(function(o) {\n var val = \"_value\" in o ? o._value : o.value\n return val\n })\n _vm.selectedList = $event.target.multiple\n ? $$selectedVal\n : $$selectedVal[0]\n }\n }\n },\n _vm._l(_vm.listOptions, function(option) {\n return _c(\n \"option\",\n {\n key: option.value,\n domProps: { value: option.value }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(option.text) +\n \"\\n \"\n )\n ]\n )\n }),\n 0\n )\n ]\n )\n ],\n 1\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"row\", attrs: { id: \"recommended-shows-options\" } },\n [\n _c(\n \"div\",\n { staticClass: \"col-md-12\" },\n [\n _c(\"config-toggle-slider\", {\n attrs: {\n label: \"Pass Default show options\",\n id: \"default_show_options\"\n },\n model: {\n value: _vm.enableShowOptions,\n callback: function($$v) {\n _vm.enableShowOptions = $$v\n },\n expression: \"enableShowOptions\"\n }\n }),\n _vm._v(\" \"),\n _c(\"add-show-options\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.enableShowOptions,\n expression: \"enableShowOptions\"\n }\n ],\n attrs: { \"enable-anime-options\": \"\" },\n on: { change: _vm.updateOptions }\n }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"show-option\" }, [\n _c(\"span\", [_vm._v(\"Sort By:\")]),\n _vm._v(\" \"),\n _c(\n \"select\",\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.sortOptionsValue,\n expression: \"sortOptionsValue\"\n }\n ],\n staticClass: \"form-control form-control-inline input-sm\",\n attrs: { name: \"showsort\", id: \"showsort\" },\n on: {\n change: [\n function($event) {\n var $$selectedVal = Array.prototype.filter\n .call($event.target.options, function(o) {\n return o.selected\n })\n .map(function(o) {\n var val = \"_value\" in o ? o._value : o.value\n return val\n })\n _vm.sortOptionsValue = $event.target.multiple\n ? $$selectedVal\n : $$selectedVal[0]\n },\n _vm.sort\n ]\n }\n },\n _vm._l(_vm.sortOptions, function(option) {\n return _c(\n \"option\",\n { key: option.value, domProps: { value: option.value } },\n [_vm._v(_vm._s(option.text))]\n )\n }),\n 0\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"show-option\" }, [\n _c(\"span\", { staticStyle: { \"margin-left\": \"12px\" } }, [\n _vm._v(\"Sort Order:\")\n ]),\n _vm._v(\" \"),\n _c(\n \"select\",\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.sortDirectionOptionsValue,\n expression: \"sortDirectionOptionsValue\"\n }\n ],\n staticClass: \"form-control form-control-inline input-sm\",\n attrs: {\n name: \"showsortdirection\",\n id: \"showsortdirection\"\n },\n on: {\n change: [\n function($event) {\n var $$selectedVal = Array.prototype.filter\n .call($event.target.options, function(o) {\n return o.selected\n })\n .map(function(o) {\n var val = \"_value\" in o ? o._value : o.value\n return val\n })\n _vm.sortDirectionOptionsValue = $event.target.multiple\n ? $$selectedVal\n : $$selectedVal[0]\n },\n _vm.sortDirection\n ]\n }\n },\n _vm._l(_vm.sortDirectionOptions, function(option) {\n return _c(\n \"option\",\n { key: option.value, domProps: { value: option.value } },\n [_vm._v(_vm._s(option.text))]\n )\n }),\n 0\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"show-option\" }, [\n _c(\"span\", { staticStyle: { \"margin-left\": \"12px\" } }, [\n _vm._v(\"Filter:\")\n ]),\n _vm._v(\" \"),\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.filterShows,\n expression: \"filterShows\"\n }\n ],\n staticClass: \"form-control form-control-inline input-sm\",\n attrs: { type: \"text\", placeholder: \"no filter\" },\n domProps: { value: _vm.filterShows },\n on: {\n input: [\n function($event) {\n if ($event.target.composing) {\n return\n }\n _vm.filterShows = $event.target.value\n },\n function($event) {\n return _vm.filter(\"filterByText\")\n }\n ]\n }\n })\n ])\n ],\n 1\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"row\", attrs: { id: \"recommended-shows\" } }, [\n _c(\n \"div\",\n { staticClass: \"col-md-12\", attrs: { id: \"popularShows\" } },\n [\n _vm.selectedSource === _vm.externals.TRAKT && _vm.traktWarning\n ? _c(\n \"div\",\n { staticClass: \"trakt-auth-container\" },\n [\n _c(\"font-awesome-icon\", {\n staticClass: \"close-container\",\n attrs: { icon: [\"far\", \"times-circle\"] },\n on: {\n click: function($event) {\n _vm.traktWarning = false\n }\n }\n }),\n _vm._v(\" \"),\n _vm.traktWarning\n ? _c(\"span\", { staticClass: \"trakt-warning\" }, [\n _vm._v(_vm._s(_vm.traktWarningMessage))\n ])\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.showTraktAuthDialog\n ? _c(\n \"button\",\n {\n staticClass: \"btn-medusa\",\n attrs: { id: \"config-trakt\" },\n on: {\n click: function($event) {\n _vm.showTraktAuthDialog = true\n }\n }\n },\n [_vm._v(\"Config Trakt\")]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showTraktAuthDialog\n ? _c(\"trakt-authentication\", {\n attrs: { \"auth-only\": \"\" }\n })\n : _vm._e()\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showsLoaded && _vm.filteredShowsByList.length\n ? _c(\n \"isotope\",\n {\n ref: \"filteredShows\",\n staticClass: \"isoDefault\",\n attrs: {\n list: _vm.filteredShowsByList,\n id: \"isotope-container\",\n options: _vm.option\n },\n on: { layout: _vm.isotopeLayout }\n },\n _vm._l(_vm.filteredShowsByList, function(show) {\n return _c(\n \"div\",\n {\n key: show.seriesId,\n class: _vm.containerClass(show),\n attrs: {\n \"data-name\": show.title,\n \"data-rating\": show.rating,\n \"data-votes\": show.votes,\n \"data-anime\": show.isAnime\n }\n },\n [_c(\"recommended-poster\", { attrs: { show: show } })],\n 1\n )\n }),\n 0\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showsLoaded &&\n _vm.filteredShowsByList.length === 0 &&\n _vm.selectedSource !== -1\n ? _c(\"div\", { staticClass: \"align-center\" }, [\n _c(\n \"button\",\n {\n staticClass: \"btn-medusa btn-xs rec-show-button\",\n on: { click: _vm.searchRecommendedShows }\n },\n [\n _vm._v(\n \"\\n Search for new recommended shows from \" +\n _vm._s(_vm.sourceToString[_vm.selectedSource]) +\n \"\\n \"\n )\n ]\n )\n ])\n : _vm.page[_vm.selectedSource] !== -1\n ? _c(\n \"div\",\n { staticClass: \"load-more\" },\n [\n _vm.loadingShows\n ? _c(\"state-switch\", { attrs: { state: \"loading\" } })\n : _c(\n \"button\",\n {\n staticClass: \"btn-medusa\",\n on: { click: _vm.getMore }\n },\n [_vm._v(\"Load More\")]\n )\n ],\n 1\n )\n : _vm._e()\n ],\n 1\n )\n ])\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack://slim/./src/components/recommended.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options");
/***/ }),
diff --git a/themes/light/assets/js/medusa-runtime.js b/themes/light/assets/js/medusa-runtime.js
index a1398e9ee8..d7eb427948 100644
--- a/themes/light/assets/js/medusa-runtime.js
+++ b/themes/light/assets/js/medusa-runtime.js
@@ -961,7 +961,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 vanilla_lazyload__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vanilla-lazyload */ \"./node_modules/vanilla-lazyload/dist/lazyload.min.js\");\n/* harmony import */ var vanilla_lazyload__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vanilla_lazyload__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../api.js */ \"./src/api.js\");\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n/* harmony import */ var _add_show_options_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./add-show-options.vue */ \"./src/components/add-show-options.vue\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers */ \"./src/components/helpers/index.js\");\n/* harmony import */ var _recommended_poster_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./recommended-poster.vue */ \"./src/components/recommended-poster.vue\");\n/* harmony import */ var vueisotope__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vueisotope */ \"./node_modules/vueisotope/dist/vue_isotope.min.js\");\n/* harmony import */ var vueisotope__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(vueisotope__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _fortawesome_vue_fontawesome__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @fortawesome/vue-fontawesome */ \"./node_modules/@fortawesome/vue-fontawesome/index.es.js\");\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'recommended',\n components: {\n AddShowOptions: _add_show_options_vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n ConfigTemplate: _helpers__WEBPACK_IMPORTED_MODULE_3__.ConfigTemplate,\n ConfigToggleSlider: _helpers__WEBPACK_IMPORTED_MODULE_3__.ConfigToggleSlider,\n FontAwesomeIcon: _fortawesome_vue_fontawesome__WEBPACK_IMPORTED_MODULE_6__.FontAwesomeIcon,\n RecommendedPoster: _recommended_poster_vue__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n TraktAuthentication: _helpers__WEBPACK_IMPORTED_MODULE_3__.TraktAuthentication,\n Isotope: (vueisotope__WEBPACK_IMPORTED_MODULE_5___default())\n },\n\n metaInfo() {\n if (!this.show || !this.show.title) {\n return {\n title: 'Medusa'\n };\n }\n\n const {\n title\n } = this.show;\n return {\n title,\n titleTemplate: '%s | Medusa'\n };\n },\n\n data() {\n const IMDB = 10;\n const ANIDB = 11;\n const TRAKT = 12;\n const ANILIST = 13;\n const externals = {\n IMDB,\n ANIDB,\n TRAKT,\n ANILIST\n };\n const sortOptions = [{\n text: 'Name',\n value: 'name'\n }, {\n text: 'Original',\n value: 'original'\n }, {\n text: 'Votes',\n value: 'votes'\n }, {\n text: '% Rating',\n value: 'rating'\n }, {\n text: '% Rating > Votes',\n value: 'rating_votes'\n }];\n const sortDirectionOptions = [{\n text: 'Ascending',\n value: 'asc'\n }, {\n text: 'Descending',\n value: 'desc'\n }];\n return {\n externals,\n sortOptions,\n sortDirectionOptions,\n sortOptionsValue: 'original',\n sortDirectionOptionsValue: 'desc',\n filterOption: null,\n filterShows: '',\n configLoaded: false,\n rootDirs: [],\n enableShowOptions: false,\n selectedShowOptions: {\n subtitles: null,\n status: null,\n statusAfter: null,\n seasonFolders: null,\n anime: null,\n scene: null,\n release: {\n blacklist: [],\n whitelist: []\n },\n quality: {\n allowed: [],\n preferred: []\n }\n },\n sourceOptions: [{\n text: 'Anidb',\n value: externals.ANIDB\n }, {\n text: 'IMDB',\n value: externals.IMDB\n }, {\n text: 'Trakt',\n value: externals.TRAKT\n }, {\n text: 'AniList',\n value: externals.ANILIST\n }, {\n text: 'all',\n value: -1\n }],\n selectedSource: 10,\n selectedList: '',\n // Isotope stuff\n selected: null,\n option: {\n getSortData: {\n id: 'seriesId',\n title: itemElem => {\n return itemElem.title.toLowerCase();\n },\n rating: 'rating',\n votes: 'votes'\n },\n getFilterData: {\n filterByText: itemElem => {\n return itemElem.title.toLowerCase().includes(this.filterShows.toLowerCase());\n }\n },\n sortBy: 'votes',\n layoutMode: 'fitRows',\n sortAscending: false\n },\n showTraktAuthDialog: false,\n traktWarning: false,\n traktWarningMessage: '',\n showsLoaded: false\n };\n },\n\n async mounted() {\n const {\n getRecommendedShows,\n sourceToString\n } = this;\n const identifiers = Object.values(sourceToString);\n\n for (const identifier of identifiers) {\n // eslint-disable-next-line no-await-in-loop\n await getRecommendedShows(identifier);\n }\n\n this.showsLoaded = true;\n this.$nextTick(() => {\n this.isotopeLayout();\n });\n this.$once('loaded', () => {\n this.configLoaded = true;\n });\n this.$watch('recommendedLists', () => {\n this.setSelectedList(this.selectedSource);\n });\n },\n\n computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_7__.mapState)({\n config: state => state.config,\n trakt: state => state.config.notifiers.trakt,\n recommendedShows: state => state.recommended.shows,\n traktConfig: state => state.recommended.trakt,\n recommendedLists: state => state.recommended.categories,\n queueitems: state => state.queue.queueitems,\n sourceToString: state => state.recommended.sourceToString\n }),\n\n filteredShowsByList() {\n const {\n imgLazyLoad,\n recommendedShows,\n selectedSource,\n selectedList\n } = this;\n let filteredList = null;\n\n if (selectedSource === -1) {\n return recommendedShows;\n }\n\n filteredList = recommendedShows.filter(show => show.source === selectedSource);\n\n if (selectedList) {\n filteredList = filteredList.filter(show => show.subcat === selectedList);\n }\n\n this.$nextTick(() => {\n // This is needed for now.\n imgLazyLoad.update();\n });\n return filteredList;\n },\n\n imgLazyLoad() {\n console.log('imgLazyLoad object constructud!');\n return new (vanilla_lazyload__WEBPACK_IMPORTED_MODULE_0___default())({\n // Example of options object -> see options section\n threshold: 500\n });\n },\n\n listOptions() {\n const {\n recommendedLists,\n selectedSource\n } = this;\n const sourceLists = recommendedLists[selectedSource] || [];\n return sourceLists.map(list => ({\n text: list,\n value: list\n }));\n }\n\n },\n methods: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_7__.mapActions)({\n getRecommendedShows: 'getRecommendedShows'\n }),\n\n containerClass(show) {\n let classes = 'recommended-container default-poster show-row';\n const {\n traktConfig\n } = this;\n const {\n removedFromMedusa\n } = traktConfig;\n\n if (show.showInLibrary) {\n classes += ' show-in-list';\n }\n\n if (removedFromMedusa.includes(show.externals.tvdb_id)) {\n classes += ' removed-from-medusa';\n }\n\n return classes;\n },\n\n isotopeLayout() {\n const {\n imgLazyLoad\n } = this;\n console.log('isotope Layout loaded');\n imgLazyLoad.update();\n },\n\n updateOptions(options) {\n // Update seleted options from add-show-options.vue @change event.\n const {\n anime,\n scene,\n seasonFolders,\n status,\n subtitles,\n statusAfter,\n release,\n quality\n } = options;\n const {\n blacklist,\n whitelist\n } = release;\n const {\n allowed,\n preferred\n } = quality;\n this.selectedShowOptions.subtitles = subtitles;\n this.selectedShowOptions.status = status;\n this.selectedShowOptions.statusAfter = statusAfter;\n this.selectedShowOptions.seasonFolders = seasonFolders;\n this.selectedShowOptions.anime = anime;\n this.selectedShowOptions.scene = scene;\n this.selectedShowOptions.release.blacklist = blacklist;\n this.selectedShowOptions.release.whitelist = whitelist;\n this.selectedShowOptions.quality.allowed = allowed;\n this.selectedShowOptions.quality.preferred = preferred;\n },\n\n sort() {\n const mapped = {\n original: 'original-order',\n rating: 'rating',\n votes: 'votes',\n name: 'title',\n rating_votes: ['rating', 'votes'] // eslint-disable-line camelcase\n\n };\n const {\n option: isotopeOptions,\n sortOptionsValue\n } = this;\n this.option.sortBy = mapped[sortOptionsValue];\n this.$refs.filteredShows.arrange(isotopeOptions);\n },\n\n filter(key) {\n this.$refs.filteredShows.filter(key);\n this.filterOption = key;\n },\n\n sortDirection() {\n const {\n option: isotopeOptions,\n sortDirectionOptionsValue\n } = this;\n this.option.sortAscending = sortDirectionOptionsValue === 'asc';\n this.$refs.filteredShows.arrange(isotopeOptions);\n },\n\n setSelectedList(selectedSource) {\n const {\n recommendedLists,\n selectedList\n } = this;\n const listOptions = recommendedLists[selectedSource];\n\n if (!listOptions) {\n return;\n }\n\n if (selectedList === '' || !listOptions.includes(selectedList)) {\n this.selectedList = listOptions[0];\n }\n },\n\n async searchRecommendedShows() {\n const {\n sourceToString,\n selectedSource\n } = this;\n const source = sourceToString[selectedSource];\n\n try {\n await _api_js__WEBPACK_IMPORTED_MODULE_1__.api.post(`recommended/${source}`);\n this.$snotify.success('Started search for new recommended shows', `Searching ${source}`);\n } catch (error) {\n if (error.response.status === 409) {\n this.$snotify.error(error.response.data.error, 'Error');\n }\n }\n }\n\n },\n watch: {\n selectedSource(newValue) {\n this.setSelectedList(newValue);\n\n if (newValue === this.externals.TRAKT) {\n const {\n trakt\n } = this;\n\n if (!trakt.enabled) {\n this.traktWarning = true;\n this.traktWarningMessage = 'You havent enabled trakt yet.';\n return;\n }\n\n (0,_api_js__WEBPACK_IMPORTED_MODULE_1__.apiRoute)('home/testTrakt').then(result => {\n if (result.data !== 'Test notice sent successfully to Trakt') {\n // Ask user if he wants to setup trakt authentication.\n this.traktWarning = true;\n this.traktWarningMessage = 'We could not authenticate to trakt. Do you want to set this up now?';\n }\n });\n }\n },\n\n queueitems(queueItems) {\n const filterRecommended = item => {\n return item.name.includes('UPDATE-RECOMMENDED') && item.success;\n }; // Check for a new recommended show queue item and refresh results.\n\n\n if (queueItems.filter(filterRecommended)) {\n this.getRecommendedShows();\n }\n }\n\n }\n});\n\n//# sourceURL=webpack://slim/./src/components/recommended.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-1%5B0%5D.rules%5B0%5D!./node_modules/vue-loader/lib/index.js??vue-loader-options");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var vanilla_lazyload__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vanilla-lazyload */ \"./node_modules/vanilla-lazyload/dist/lazyload.min.js\");\n/* harmony import */ var vanilla_lazyload__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vanilla_lazyload__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../api.js */ \"./src/api.js\");\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n/* harmony import */ var _add_show_options_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./add-show-options.vue */ \"./src/components/add-show-options.vue\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers */ \"./src/components/helpers/index.js\");\n/* harmony import */ var _recommended_poster_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./recommended-poster.vue */ \"./src/components/recommended-poster.vue\");\n/* harmony import */ var vueisotope__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vueisotope */ \"./node_modules/vueisotope/dist/vue_isotope.min.js\");\n/* harmony import */ var vueisotope__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(vueisotope__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _fortawesome_vue_fontawesome__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @fortawesome/vue-fontawesome */ \"./node_modules/@fortawesome/vue-fontawesome/index.es.js\");\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'recommended',\n components: {\n AddShowOptions: _add_show_options_vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n ConfigTemplate: _helpers__WEBPACK_IMPORTED_MODULE_3__.ConfigTemplate,\n ConfigToggleSlider: _helpers__WEBPACK_IMPORTED_MODULE_3__.ConfigToggleSlider,\n FontAwesomeIcon: _fortawesome_vue_fontawesome__WEBPACK_IMPORTED_MODULE_6__.FontAwesomeIcon,\n StateSwitch: _helpers__WEBPACK_IMPORTED_MODULE_3__.StateSwitch,\n RecommendedPoster: _recommended_poster_vue__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n TraktAuthentication: _helpers__WEBPACK_IMPORTED_MODULE_3__.TraktAuthentication,\n Isotope: (vueisotope__WEBPACK_IMPORTED_MODULE_5___default())\n },\n\n metaInfo() {\n if (!this.show || !this.show.title) {\n return {\n title: 'Medusa'\n };\n }\n\n const {\n title\n } = this.show;\n return {\n title,\n titleTemplate: '%s | Medusa'\n };\n },\n\n data() {\n const IMDB = 10;\n const ANIDB = 11;\n const TRAKT = 12;\n const ANILIST = 13;\n const externals = {\n IMDB,\n ANIDB,\n TRAKT,\n ANILIST\n };\n const sortOptions = [{\n text: 'Name',\n value: 'name'\n }, {\n text: 'Original',\n value: 'original'\n }, {\n text: 'Votes',\n value: 'votes'\n }, {\n text: '% Rating',\n value: 'rating'\n }, {\n text: '% Rating > Votes',\n value: 'rating_votes'\n }];\n const sortDirectionOptions = [{\n text: 'Ascending',\n value: 'asc'\n }, {\n text: 'Descending',\n value: 'desc'\n }];\n return {\n externals,\n sortOptions,\n sortDirectionOptions,\n sortOptionsValue: 'original',\n sortDirectionOptionsValue: 'desc',\n filterOption: null,\n filterShows: '',\n configLoaded: false,\n rootDirs: [],\n enableShowOptions: false,\n selectedShowOptions: {\n subtitles: null,\n status: null,\n statusAfter: null,\n seasonFolders: null,\n anime: null,\n scene: null,\n release: {\n blacklist: [],\n whitelist: []\n },\n quality: {\n allowed: [],\n preferred: []\n }\n },\n sourceOptions: [{\n text: 'Anidb',\n value: externals.ANIDB\n }, {\n text: 'IMDB',\n value: externals.IMDB\n }, {\n text: 'Trakt',\n value: externals.TRAKT\n }, {\n text: 'AniList',\n value: externals.ANILIST\n }, {\n text: 'all',\n value: -1\n }],\n selectedSource: 10,\n selectedList: '',\n // Isotope stuff\n selected: null,\n option: {\n getSortData: {\n id: 'seriesId',\n title: itemElem => {\n return itemElem.title.toLowerCase();\n },\n rating: 'rating',\n votes: 'votes'\n },\n getFilterData: {\n filterByText: itemElem => {\n return itemElem.title.toLowerCase().includes(this.filterShows.toLowerCase());\n }\n },\n sortBy: 'votes',\n layoutMode: 'fitRows',\n sortAscending: false\n },\n showTraktAuthDialog: false,\n traktWarning: false,\n traktWarningMessage: '',\n showsLoaded: false,\n loadingShows: false\n };\n },\n\n async mounted() {\n const {\n getRecommendedShows,\n getRecommendedShowsOptions,\n sourceToString\n } = this;\n const sources = Object.keys(sourceToString);\n await getRecommendedShowsOptions();\n\n for (const source of sources) {\n this.loadingShows = true; // eslint-disable-next-line no-await-in-loop\n\n await getRecommendedShows(source);\n this.loadingShows = false;\n }\n\n this.showsLoaded = true;\n this.$nextTick(() => {\n this.isotopeLayout();\n });\n this.$watch('recommendedLists', () => {\n this.setSelectedList(this.selectedSource);\n });\n },\n\n computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_7__.mapState)({\n config: state => state.config,\n trakt: state => state.config.notifiers.trakt,\n recommendedShows: state => state.recommended.shows,\n traktConfig: state => state.recommended.trakt,\n recommendedLists: state => state.recommended.categories,\n queueitems: state => state.queue.queueitems,\n sourceToString: state => state.recommended.sourceToString,\n page: state => state.recommended.page\n }),\n\n filteredShowsByList() {\n const {\n imgLazyLoad,\n recommendedShows,\n selectedSource,\n selectedList\n } = this;\n let filteredList = null;\n\n if (selectedSource === -1) {\n return recommendedShows;\n }\n\n filteredList = recommendedShows.filter(show => show.source === selectedSource);\n\n if (selectedList) {\n filteredList = filteredList.filter(show => show.subcat === selectedList);\n }\n\n this.$nextTick(() => {\n // This is needed for now.\n imgLazyLoad.update();\n });\n return filteredList;\n },\n\n imgLazyLoad() {\n console.log('imgLazyLoad object constructud!');\n return new (vanilla_lazyload__WEBPACK_IMPORTED_MODULE_0___default())({\n // Example of options object -> see options section\n threshold: 500\n });\n },\n\n listOptions() {\n const {\n recommendedLists,\n selectedSource\n } = this;\n\n if (!recommendedLists || !(selectedSource in recommendedLists)) {\n return;\n }\n\n const sourceLists = recommendedLists[selectedSource] || [];\n return sourceLists.map(list => ({\n text: list,\n value: list\n }));\n }\n\n },\n methods: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_7__.mapActions)({\n getRecommendedShows: 'getRecommendedShows',\n getRecommendedShowsOptions: 'getRecommendedShowsOptions',\n getMoreShows: 'getMoreShows'\n }),\n\n containerClass(show) {\n let classes = 'recommended-container default-poster show-row';\n const {\n traktConfig\n } = this;\n const {\n removedFromMedusa\n } = traktConfig;\n\n if (show.showInLibrary) {\n classes += ' show-in-list';\n }\n\n if (removedFromMedusa.includes(show.externals.tvdb_id)) {\n classes += ' removed-from-medusa';\n }\n\n return classes;\n },\n\n isotopeLayout() {\n const {\n imgLazyLoad\n } = this;\n console.log('isotope Layout loaded');\n imgLazyLoad.update();\n },\n\n updateOptions(options) {\n // Update seleted options from add-show-options.vue @change event.\n const {\n anime,\n scene,\n seasonFolders,\n status,\n subtitles,\n statusAfter,\n release,\n quality\n } = options;\n const {\n blacklist,\n whitelist\n } = release;\n const {\n allowed,\n preferred\n } = quality;\n this.selectedShowOptions.subtitles = subtitles;\n this.selectedShowOptions.status = status;\n this.selectedShowOptions.statusAfter = statusAfter;\n this.selectedShowOptions.seasonFolders = seasonFolders;\n this.selectedShowOptions.anime = anime;\n this.selectedShowOptions.scene = scene;\n this.selectedShowOptions.release.blacklist = blacklist;\n this.selectedShowOptions.release.whitelist = whitelist;\n this.selectedShowOptions.quality.allowed = allowed;\n this.selectedShowOptions.quality.preferred = preferred;\n },\n\n sort() {\n const mapped = {\n original: 'original-order',\n rating: 'rating',\n votes: 'votes',\n name: 'title',\n rating_votes: ['rating', 'votes'] // eslint-disable-line camelcase\n\n };\n const {\n option: isotopeOptions,\n sortOptionsValue\n } = this;\n this.option.sortBy = mapped[sortOptionsValue];\n this.$refs.filteredShows.arrange(isotopeOptions);\n },\n\n filter(key) {\n this.$refs.filteredShows.filter(key);\n this.filterOption = key;\n },\n\n sortDirection() {\n const {\n option: isotopeOptions,\n sortDirectionOptionsValue\n } = this;\n this.option.sortAscending = sortDirectionOptionsValue === 'asc';\n this.$refs.filteredShows.arrange(isotopeOptions);\n },\n\n setSelectedList(selectedSource) {\n const {\n recommendedLists,\n selectedList\n } = this;\n const listOptions = recommendedLists[selectedSource];\n\n if (!listOptions) {\n return;\n }\n\n if (selectedList === '' || !listOptions.includes(selectedList)) {\n this.selectedList = listOptions[0];\n }\n },\n\n async searchRecommendedShows() {\n const {\n sourceToString,\n selectedSource\n } = this;\n const source = sourceToString[selectedSource];\n\n try {\n await _api_js__WEBPACK_IMPORTED_MODULE_1__.api.post(`recommended/${source}`);\n this.$snotify.success('Started search for new recommended shows', `Searching ${source}`);\n } catch (error) {\n if (error.response.status === 409) {\n this.$snotify.error(error.response.data.error, 'Error');\n }\n }\n },\n\n getMore() {\n this.loadingShows = true;\n this.getMoreShows(this.selectedSource).finally(() => {\n this.loadingShows = false;\n });\n }\n\n },\n watch: {\n selectedSource(newValue) {\n this.setSelectedList(newValue);\n\n if (newValue === this.externals.TRAKT) {\n const {\n trakt\n } = this;\n\n if (!trakt.enabled) {\n this.traktWarning = true;\n this.traktWarningMessage = 'You havent enabled trakt yet.';\n return;\n }\n\n (0,_api_js__WEBPACK_IMPORTED_MODULE_1__.apiRoute)('home/testTrakt').then(result => {\n if (result.data !== 'Test notice sent successfully to Trakt') {\n // Ask user if he wants to setup trakt authentication.\n this.traktWarning = true;\n this.traktWarningMessage = 'We could not authenticate to trakt. Do you want to set this up now?';\n }\n });\n }\n },\n\n queueitems(queueItems) {\n const filterRecommended = item => {\n return item.name.includes('UPDATE-RECOMMENDED') && item.success;\n }; // Check for a new recommended show queue item and refresh results.\n\n\n if (queueItems.filter(filterRecommended)) {\n this.getRecommendedShows();\n }\n }\n\n }\n});\n\n//# sourceURL=webpack://slim/./src/components/recommended.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-1%5B0%5D.rules%5B0%5D!./node_modules/vue-loader/lib/index.js??vue-loader-options");
/***/ }),
@@ -1830,7 +1830,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_2__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../api */ \"./src/api.js\");\n/* harmony import */ var _mutation_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../mutation-types */ \"./src/store/mutation-types.js\");\n\n\n\nconst IMDB = 10;\nconst ANIDB = 11;\nconst TRAKT = 12;\nconst ANILIST = 13;\nconst state = {\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};\nconst mutations = {\n [_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_RECOMMENDED_SHOW](state, show) {\n const existingShow = state.shows.find(_ref => {\n let {\n seriesId,\n source\n } = _ref;\n return Number(show.seriesId[show.source]) === Number(seriesId[source]);\n });\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 } // 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\n\n console.debug(`Found ${show.title || show.source + String(show.seriesId)} in shows array attempting merge`);\n const newShow = { ...existingShow,\n ...show\n }; // Update state\n\n vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"].set(state.shows, state.shows.indexOf(existingShow), newShow);\n console.debug(`Merged ${newShow.title || newShow.source + String(newShow.seriesId)}`, newShow);\n },\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_1__.SET_RECOMMENDED_SHOWS](state, _ref2) {\n let {\n shows,\n identifier\n } = _ref2;\n\n if (identifier) {\n // If an identifier has been passed, remove the old shows for this identifier.\n const source = Number(Object.keys(state.sourceToString).find(key => state.sourceToString[key] === identifier));\n state.shows = state.shows.filter(show => show.source !== source);\n } else {\n // No identifier passed, meaning remove all shows from store.\n state.shows = [];\n }\n\n state.shows = [...state.shows, ...shows];\n },\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_1__.SET_RECOMMENDED_SHOWS_OPTIONS](state, data) {\n state.trakt.removedFromMedusa = data.trakt.removedFromMedusa;\n state.trakt.blacklistEnabled = data.trakt.blacklistEnabled;\n state.trakt.availableLists = data.trakt.availableLists;\n state.categories = data.categories;\n }\n\n};\nconst getters = {};\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} identifier - Identifier for the recommended shows list.\n * @returns {(undefined|Promise)} undefined if `shows` was provided or the API response if not.\n */\n getRecommendedShows(_ref3, identifier) {\n let {\n commit\n } = _ref3;\n identifier = identifier ? identifier : '';\n return _api__WEBPACK_IMPORTED_MODULE_0__.api.get(`/recommended/${identifier}`, {\n timeout: 60000\n }).then(response => {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_1__.SET_RECOMMENDED_SHOWS, {\n shows: response.data.shows,\n identifier\n });\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_1__.SET_RECOMMENDED_SHOWS_OPTIONS, response.data);\n });\n }\n\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n state,\n mutations,\n getters,\n actions\n});\n\n//# sourceURL=webpack://slim/./src/store/modules/recommended.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_2__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../api */ \"./src/api.js\");\n/* harmony import */ var _mutation_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../mutation-types */ \"./src/store/mutation-types.js\");\n\n\n\nconst IMDB = 10;\nconst ANIDB = 11;\nconst TRAKT = 12;\nconst ANILIST = 13;\nconst state = {\n limit: 500,\n page: {\n [IMDB]: 1,\n [ANIDB]: 1,\n [TRAKT]: 1,\n [ANILIST]: 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};\nconst mutations = {\n [_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_RECOMMENDED_SHOW](state, show) {\n const existingShow = state.shows.find(_ref => {\n let {\n seriesId,\n source\n } = _ref;\n return Number(show.seriesId[show.source]) === Number(seriesId[source]);\n });\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 } // 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\n\n console.debug(`Found ${show.title || show.source + String(show.seriesId)} in shows array attempting merge`);\n const newShow = { ...existingShow,\n ...show\n }; // Update state\n\n vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"].set(state.shows, state.shows.indexOf(existingShow), newShow);\n console.debug(`Merged ${newShow.title || newShow.source + String(newShow.seriesId)}`, newShow);\n },\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_1__.SET_RECOMMENDED_SHOWS](state, _ref2) {\n let {\n shows,\n source\n } = _ref2;\n\n if (shows.length < state.limit) {\n state.page[source] = -1;\n }\n\n state.shows = [...state.shows, ...shows];\n },\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_1__.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\n [_mutation_types__WEBPACK_IMPORTED_MODULE_1__.SET_RECOMMENDED_SHOWS_CATEGORIES](state, data) {\n state.categories = data;\n },\n\n increasePage(state, source) {\n state.page[source] += 1;\n }\n\n};\nconst getters = {};\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(_ref3, source) {\n let {\n state,\n commit\n } = _ref3;\n\n if (state.page[source] === -1) {\n return;\n }\n\n const identifier = source ? state.sourceToString[source] : '';\n const {\n page\n } = state;\n return _api__WEBPACK_IMPORTED_MODULE_0__.api.get(`/recommended/${identifier}?page=${page[source]}&limit=${state.limit}`, {\n timeout: 60000\n }).then(response => {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_1__.SET_RECOMMENDED_SHOWS, {\n shows: response.data,\n source\n });\n });\n },\n\n getRecommendedShowsOptions(_ref4) {\n let {\n commit\n } = _ref4;\n _api__WEBPACK_IMPORTED_MODULE_0__.api.get('/recommended/trakt/removed', {\n timeout: 60000\n }).then(response => {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_1__.SET_RECOMMENDED_SHOWS_TRAKT_REMOVED, response.data);\n });\n _api__WEBPACK_IMPORTED_MODULE_0__.api.get('/recommended/categories', {\n timeout: 60000\n }).then(response => {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_1__.SET_RECOMMENDED_SHOWS_CATEGORIES, response.data);\n });\n },\n\n getMoreShows(_ref5, source) {\n let {\n commit,\n dispatch\n } = _ref5;\n commit('increasePage', source);\n return dispatch('getRecommendedShows', source);\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/recommended.js?");
/***/ }),
@@ -1885,7 +1885,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 */ \"LOGIN_PENDING\": () => (/* binding */ LOGIN_PENDING),\n/* harmony export */ \"LOGIN_SUCCESS\": () => (/* binding */ LOGIN_SUCCESS),\n/* harmony export */ \"LOGIN_FAILED\": () => (/* binding */ LOGIN_FAILED),\n/* harmony export */ \"LOGOUT\": () => (/* binding */ LOGOUT),\n/* harmony export */ \"REFRESH_TOKEN\": () => (/* binding */ REFRESH_TOKEN),\n/* harmony export */ \"REMOVE_AUTH_ERROR\": () => (/* binding */ REMOVE_AUTH_ERROR),\n/* harmony export */ \"SOCKET_ONOPEN\": () => (/* binding */ SOCKET_ONOPEN),\n/* harmony export */ \"SOCKET_ONCLOSE\": () => (/* binding */ SOCKET_ONCLOSE),\n/* harmony export */ \"SOCKET_ONERROR\": () => (/* binding */ SOCKET_ONERROR),\n/* harmony export */ \"SOCKET_ONMESSAGE\": () => (/* binding */ SOCKET_ONMESSAGE),\n/* harmony export */ \"SOCKET_RECONNECT\": () => (/* binding */ SOCKET_RECONNECT),\n/* harmony export */ \"SOCKET_RECONNECT_ERROR\": () => (/* binding */ SOCKET_RECONNECT_ERROR),\n/* harmony export */ \"NOTIFICATIONS_ENABLED\": () => (/* binding */ NOTIFICATIONS_ENABLED),\n/* harmony export */ \"NOTIFICATIONS_DISABLED\": () => (/* binding */ NOTIFICATIONS_DISABLED),\n/* harmony export */ \"ADD_CONFIG\": () => (/* binding */ ADD_CONFIG),\n/* harmony export */ \"UPDATE_LAYOUT_LOCAL\": () => (/* binding */ UPDATE_LAYOUT_LOCAL),\n/* harmony export */ \"ADD_HISTORY\": () => (/* binding */ ADD_HISTORY),\n/* harmony export */ \"ADD_HISTORY_ROW\": () => (/* binding */ ADD_HISTORY_ROW),\n/* harmony export */ \"ADD_SHOW\": () => (/* binding */ ADD_SHOW),\n/* harmony export */ \"ADD_STATS\": () => (/* binding */ ADD_STATS),\n/* harmony export */ \"ADD_SHOW_CONFIG\": () => (/* binding */ ADD_SHOW_CONFIG),\n/* harmony export */ \"ADD_RECOMMENDED_SHOW\": () => (/* binding */ ADD_RECOMMENDED_SHOW),\n/* harmony export */ \"SET_RECOMMENDED_SHOWS\": () => (/* binding */ SET_RECOMMENDED_SHOWS),\n/* harmony export */ \"SET_RECOMMENDED_SHOWS_OPTIONS\": () => (/* binding */ SET_RECOMMENDED_SHOWS_OPTIONS),\n/* harmony export */ \"ADD_SHOWS\": () => (/* binding */ ADD_SHOWS),\n/* harmony export */ \"ADD_SHOW_EPISODE\": () => (/* binding */ ADD_SHOW_EPISODE),\n/* harmony export */ \"ADD_REMOTE_BRANCHES\": () => (/* binding */ ADD_REMOTE_BRANCHES),\n/* harmony export */ \"SET_STATS\": () => (/* binding */ SET_STATS),\n/* harmony export */ \"SET_MAX_DOWNLOAD_COUNT\": () => (/* binding */ SET_MAX_DOWNLOAD_COUNT),\n/* harmony export */ \"ADD_SHOW_SCENE_EXCEPTION\": () => (/* binding */ ADD_SHOW_SCENE_EXCEPTION),\n/* harmony export */ \"REMOVE_SHOW_SCENE_EXCEPTION\": () => (/* binding */ REMOVE_SHOW_SCENE_EXCEPTION),\n/* harmony export */ \"REMOVE_SHOW_CONFIG_TEMPLATE\": () => (/* binding */ REMOVE_SHOW_CONFIG_TEMPLATE),\n/* harmony export */ \"ADD_SHOW_HISTORY\": () => (/* binding */ ADD_SHOW_HISTORY),\n/* harmony export */ \"ADD_SHOW_EPISODE_HISTORY\": () => (/* binding */ ADD_SHOW_EPISODE_HISTORY),\n/* harmony export */ \"ADD_PROVIDER\": () => (/* binding */ ADD_PROVIDER),\n/* harmony export */ \"ADD_PROVIDERS\": () => (/* binding */ ADD_PROVIDERS),\n/* harmony export */ \"ADD_PROVIDER_CACHE\": () => (/* binding */ ADD_PROVIDER_CACHE),\n/* harmony export */ \"ADD_SEARCH_RESULTS\": () => (/* binding */ ADD_SEARCH_RESULTS),\n/* harmony export */ \"ADD_QUEUE_ITEM\": () => (/* binding */ ADD_QUEUE_ITEM),\n/* harmony export */ \"ADD_SHOW_QUEUE_ITEM\": () => (/* binding */ ADD_SHOW_QUEUE_ITEM),\n/* harmony export */ \"REMOVE_SHOW\": () => (/* binding */ REMOVE_SHOW),\n/* harmony export */ \"REMOVE_PROVIDER\": () => (/* binding */ REMOVE_PROVIDER),\n/* harmony export */ \"UPDATE_SHOWLIST_DEFAULT\": () => (/* binding */ UPDATE_SHOWLIST_DEFAULT),\n/* harmony export */ \"ADD_SHOW_CONFIG_TEMPLATE\": () => (/* binding */ ADD_SHOW_CONFIG_TEMPLATE),\n/* harmony export */ \"ADD_SCHEDULE\": () => (/* binding */ ADD_SCHEDULE)\n/* harmony export */ });\nconst 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_OPTIONS = 'đē Recommended Show Options 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 ADD_SHOW_QUEUE_ITEM = 'đē Show queue item added to store';\nconst REMOVE_SHOW = 'đē Show removed from store';\nconst REMOVE_PROVIDER = 'âŊ Provider removed';\nconst UPDATE_SHOWLIST_DEFAULT = 'âī¸ Anime config showlist default updated';\nconst ADD_SCHEDULE = 'đ
Schedule information added';\n\n\n//# sourceURL=webpack://slim/./src/store/mutation-types.js?");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"LOGIN_PENDING\": () => (/* binding */ LOGIN_PENDING),\n/* harmony export */ \"LOGIN_SUCCESS\": () => (/* binding */ LOGIN_SUCCESS),\n/* harmony export */ \"LOGIN_FAILED\": () => (/* binding */ LOGIN_FAILED),\n/* harmony export */ \"LOGOUT\": () => (/* binding */ LOGOUT),\n/* harmony export */ \"REFRESH_TOKEN\": () => (/* binding */ REFRESH_TOKEN),\n/* harmony export */ \"REMOVE_AUTH_ERROR\": () => (/* binding */ REMOVE_AUTH_ERROR),\n/* harmony export */ \"SOCKET_ONOPEN\": () => (/* binding */ SOCKET_ONOPEN),\n/* harmony export */ \"SOCKET_ONCLOSE\": () => (/* binding */ SOCKET_ONCLOSE),\n/* harmony export */ \"SOCKET_ONERROR\": () => (/* binding */ SOCKET_ONERROR),\n/* harmony export */ \"SOCKET_ONMESSAGE\": () => (/* binding */ SOCKET_ONMESSAGE),\n/* harmony export */ \"SOCKET_RECONNECT\": () => (/* binding */ SOCKET_RECONNECT),\n/* harmony export */ \"SOCKET_RECONNECT_ERROR\": () => (/* binding */ SOCKET_RECONNECT_ERROR),\n/* harmony export */ \"NOTIFICATIONS_ENABLED\": () => (/* binding */ NOTIFICATIONS_ENABLED),\n/* harmony export */ \"NOTIFICATIONS_DISABLED\": () => (/* binding */ NOTIFICATIONS_DISABLED),\n/* harmony export */ \"ADD_CONFIG\": () => (/* binding */ ADD_CONFIG),\n/* harmony export */ \"UPDATE_LAYOUT_LOCAL\": () => (/* binding */ UPDATE_LAYOUT_LOCAL),\n/* harmony export */ \"ADD_HISTORY\": () => (/* binding */ ADD_HISTORY),\n/* harmony export */ \"ADD_HISTORY_ROW\": () => (/* binding */ ADD_HISTORY_ROW),\n/* harmony export */ \"ADD_SHOW\": () => (/* binding */ ADD_SHOW),\n/* harmony export */ \"ADD_STATS\": () => (/* binding */ ADD_STATS),\n/* harmony export */ \"ADD_SHOW_CONFIG\": () => (/* binding */ ADD_SHOW_CONFIG),\n/* harmony export */ \"ADD_RECOMMENDED_SHOW\": () => (/* binding */ ADD_RECOMMENDED_SHOW),\n/* harmony export */ \"SET_RECOMMENDED_SHOWS\": () => (/* binding */ SET_RECOMMENDED_SHOWS),\n/* harmony export */ \"SET_RECOMMENDED_SHOWS_TRAKT_REMOVED\": () => (/* binding */ SET_RECOMMENDED_SHOWS_TRAKT_REMOVED),\n/* harmony export */ \"SET_RECOMMENDED_SHOWS_CATEGORIES\": () => (/* binding */ SET_RECOMMENDED_SHOWS_CATEGORIES),\n/* harmony export */ \"ADD_SHOWS\": () => (/* binding */ ADD_SHOWS),\n/* harmony export */ \"ADD_SHOW_EPISODE\": () => (/* binding */ ADD_SHOW_EPISODE),\n/* harmony export */ \"ADD_REMOTE_BRANCHES\": () => (/* binding */ ADD_REMOTE_BRANCHES),\n/* harmony export */ \"SET_STATS\": () => (/* binding */ SET_STATS),\n/* harmony export */ \"SET_MAX_DOWNLOAD_COUNT\": () => (/* binding */ SET_MAX_DOWNLOAD_COUNT),\n/* harmony export */ \"ADD_SHOW_SCENE_EXCEPTION\": () => (/* binding */ ADD_SHOW_SCENE_EXCEPTION),\n/* harmony export */ \"REMOVE_SHOW_SCENE_EXCEPTION\": () => (/* binding */ REMOVE_SHOW_SCENE_EXCEPTION),\n/* harmony export */ \"REMOVE_SHOW_CONFIG_TEMPLATE\": () => (/* binding */ REMOVE_SHOW_CONFIG_TEMPLATE),\n/* harmony export */ \"ADD_SHOW_HISTORY\": () => (/* binding */ ADD_SHOW_HISTORY),\n/* harmony export */ \"ADD_SHOW_EPISODE_HISTORY\": () => (/* binding */ ADD_SHOW_EPISODE_HISTORY),\n/* harmony export */ \"ADD_PROVIDER\": () => (/* binding */ ADD_PROVIDER),\n/* harmony export */ \"ADD_PROVIDERS\": () => (/* binding */ ADD_PROVIDERS),\n/* harmony export */ \"ADD_PROVIDER_CACHE\": () => (/* binding */ ADD_PROVIDER_CACHE),\n/* harmony export */ \"ADD_SEARCH_RESULTS\": () => (/* binding */ ADD_SEARCH_RESULTS),\n/* harmony export */ \"ADD_QUEUE_ITEM\": () => (/* binding */ ADD_QUEUE_ITEM),\n/* harmony export */ \"ADD_SHOW_QUEUE_ITEM\": () => (/* binding */ ADD_SHOW_QUEUE_ITEM),\n/* harmony export */ \"REMOVE_SHOW\": () => (/* binding */ REMOVE_SHOW),\n/* harmony export */ \"REMOVE_PROVIDER\": () => (/* binding */ REMOVE_PROVIDER),\n/* harmony export */ \"UPDATE_SHOWLIST_DEFAULT\": () => (/* binding */ UPDATE_SHOWLIST_DEFAULT),\n/* harmony export */ \"ADD_SHOW_CONFIG_TEMPLATE\": () => (/* binding */ ADD_SHOW_CONFIG_TEMPLATE),\n/* harmony export */ \"ADD_SCHEDULE\": () => (/* binding */ ADD_SCHEDULE)\n/* harmony export */ });\nconst 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 ADD_SHOW_QUEUE_ITEM = 'đē Show queue item added to store';\nconst REMOVE_SHOW = 'đē Show removed from store';\nconst REMOVE_PROVIDER = 'âŊ Provider removed';\nconst UPDATE_SHOWLIST_DEFAULT = 'âī¸ Anime config showlist default updated';\nconst ADD_SCHEDULE = 'đ
Schedule information added';\n\n\n//# sourceURL=webpack://slim/./src/store/mutation-types.js?");
/***/ }),
@@ -2528,7 +2528,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.trakt-auth-container[data-v-7226820a] {\\n padding: 10px;\\n border: 1px solid rgb(255 255 255);\\n box-shadow: 5px 5px dimgrey;\\n}\\n.trakt-auth-container > .close-container[data-v-7226820a] {\\n position: absolute;\\n top: -24px;\\n right: 15px;\\n color: red;\\n}\\nspan.trakt-warning[data-v-7226820a] {\\n margin: 0 0 14px 0;\\n display: block;\\n color: red;\\n}\\n\\n\", \"\"]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n\n\n//# sourceURL=webpack://slim/./src/components/recommended.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3%5B0%5D.rules%5B0%5D.use%5B1%5D!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options");
+eval("// Imports\nvar ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.trakt-auth-container[data-v-7226820a] {\\n padding: 10px;\\n border: 1px solid rgb(255 255 255);\\n box-shadow: 5px 5px dimgrey;\\n}\\n.trakt-auth-container > .close-container[data-v-7226820a] {\\n position: absolute;\\n top: -24px;\\n right: 15px;\\n color: red;\\n}\\nspan.trakt-warning[data-v-7226820a] {\\n margin: 0 0 14px 0;\\n display: block;\\n color: red;\\n}\\n.load-more[data-v-7226820a] {\\n display: flex;\\n justify-content: center;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n\n\n//# sourceURL=webpack://slim/./src/components/recommended.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3%5B0%5D.rules%5B0%5D.use%5B1%5D!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options");
/***/ }),
@@ -8068,7 +8068,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": () => (/* binding */ render),\n/* harmony export */ \"staticRenderFns\": () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { attrs: { id: \"recommended-shows\" } },\n [\n _c(\"vue-snotify\"),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"row\", attrs: { id: \"recommended-shows-lists\" } },\n [\n _c(\n \"div\",\n { staticClass: \"col-md-12\" },\n [\n _c(\n \"config-template\",\n {\n attrs: {\n \"label-for\": \"recommended-source\",\n label: \"Select a Source\"\n }\n },\n [\n !_vm.showsLoaded\n ? _c(\n \"select\",\n {\n staticClass: \"form-control max-width\",\n attrs: { disabled: \"disabled\" }\n },\n [\n _c(\"option\", { attrs: { value: \"\" } }, [\n _vm._v(\"Loading shows, please wait\")\n ])\n ]\n )\n : _c(\n \"select\",\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.selectedSource,\n expression: \"selectedSource\"\n }\n ],\n staticClass: \"form-control max-width\",\n attrs: {\n disabled: !_vm.showsLoaded,\n id: \"recommended-source\",\n name: \"recommended-source\"\n },\n on: {\n change: function($event) {\n var $$selectedVal = Array.prototype.filter\n .call($event.target.options, function(o) {\n return o.selected\n })\n .map(function(o) {\n var val = \"_value\" in o ? o._value : o.value\n return val\n })\n _vm.selectedSource = $event.target.multiple\n ? $$selectedVal\n : $$selectedVal[0]\n }\n }\n },\n _vm._l(_vm.sourceOptions, function(option) {\n return _c(\n \"option\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showsLoaded,\n expression: \"showsLoaded\"\n }\n ],\n key: option.value,\n domProps: { value: option.value }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(option.text) +\n \"\\n \"\n )\n ]\n )\n }),\n 0\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"config-template\",\n {\n attrs: {\n \"label-for\": \"recommended-list\",\n label: \"Select a list\"\n }\n },\n [\n _c(\n \"select\",\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.selectedList,\n expression: \"selectedList\"\n }\n ],\n staticClass: \"form-control max-width\",\n attrs: {\n disabled: !_vm.showsLoaded,\n id: \"recommended-list\",\n name: \"recommended-list\"\n },\n on: {\n change: function($event) {\n var $$selectedVal = Array.prototype.filter\n .call($event.target.options, function(o) {\n return o.selected\n })\n .map(function(o) {\n var val = \"_value\" in o ? o._value : o.value\n return val\n })\n _vm.selectedList = $event.target.multiple\n ? $$selectedVal\n : $$selectedVal[0]\n }\n }\n },\n _vm._l(_vm.listOptions, function(option) {\n return _c(\n \"option\",\n {\n key: option.value,\n domProps: { value: option.value }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(option.text) +\n \"\\n \"\n )\n ]\n )\n }),\n 0\n )\n ]\n )\n ],\n 1\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"row\", attrs: { id: \"recommended-shows-options\" } },\n [\n _c(\n \"div\",\n { staticClass: \"col-md-12\" },\n [\n _c(\"config-toggle-slider\", {\n attrs: {\n label: \"Pass Default show options\",\n id: \"default_show_options\"\n },\n model: {\n value: _vm.enableShowOptions,\n callback: function($$v) {\n _vm.enableShowOptions = $$v\n },\n expression: \"enableShowOptions\"\n }\n }),\n _vm._v(\" \"),\n _c(\"add-show-options\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.enableShowOptions,\n expression: \"enableShowOptions\"\n }\n ],\n attrs: { \"enable-anime-options\": \"\" },\n on: { change: _vm.updateOptions }\n }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"show-option\" }, [\n _c(\"span\", [_vm._v(\"Sort By:\")]),\n _vm._v(\" \"),\n _c(\n \"select\",\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.sortOptionsValue,\n expression: \"sortOptionsValue\"\n }\n ],\n staticClass: \"form-control form-control-inline input-sm\",\n attrs: { name: \"showsort\", id: \"showsort\" },\n on: {\n change: [\n function($event) {\n var $$selectedVal = Array.prototype.filter\n .call($event.target.options, function(o) {\n return o.selected\n })\n .map(function(o) {\n var val = \"_value\" in o ? o._value : o.value\n return val\n })\n _vm.sortOptionsValue = $event.target.multiple\n ? $$selectedVal\n : $$selectedVal[0]\n },\n _vm.sort\n ]\n }\n },\n _vm._l(_vm.sortOptions, function(option) {\n return _c(\n \"option\",\n { key: option.value, domProps: { value: option.value } },\n [_vm._v(_vm._s(option.text))]\n )\n }),\n 0\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"show-option\" }, [\n _c(\"span\", { staticStyle: { \"margin-left\": \"12px\" } }, [\n _vm._v(\"Sort Order:\")\n ]),\n _vm._v(\" \"),\n _c(\n \"select\",\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.sortDirectionOptionsValue,\n expression: \"sortDirectionOptionsValue\"\n }\n ],\n staticClass: \"form-control form-control-inline input-sm\",\n attrs: {\n name: \"showsortdirection\",\n id: \"showsortdirection\"\n },\n on: {\n change: [\n function($event) {\n var $$selectedVal = Array.prototype.filter\n .call($event.target.options, function(o) {\n return o.selected\n })\n .map(function(o) {\n var val = \"_value\" in o ? o._value : o.value\n return val\n })\n _vm.sortDirectionOptionsValue = $event.target.multiple\n ? $$selectedVal\n : $$selectedVal[0]\n },\n _vm.sortDirection\n ]\n }\n },\n _vm._l(_vm.sortDirectionOptions, function(option) {\n return _c(\n \"option\",\n { key: option.value, domProps: { value: option.value } },\n [_vm._v(_vm._s(option.text))]\n )\n }),\n 0\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"show-option\" }, [\n _c(\"span\", { staticStyle: { \"margin-left\": \"12px\" } }, [\n _vm._v(\"Filter:\")\n ]),\n _vm._v(\" \"),\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.filterShows,\n expression: \"filterShows\"\n }\n ],\n staticClass: \"form-control form-control-inline input-sm\",\n attrs: { type: \"text\", placeholder: \"no filter\" },\n domProps: { value: _vm.filterShows },\n on: {\n input: [\n function($event) {\n if ($event.target.composing) {\n return\n }\n _vm.filterShows = $event.target.value\n },\n function($event) {\n return _vm.filter(\"filterByText\")\n }\n ]\n }\n })\n ])\n ],\n 1\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"row\", attrs: { id: \"recommended-shows\" } }, [\n _c(\n \"div\",\n { staticClass: \"col-md-12\", attrs: { id: \"popularShows\" } },\n [\n _vm.selectedSource === _vm.externals.TRAKT && _vm.traktWarning\n ? _c(\n \"div\",\n { staticClass: \"trakt-auth-container\" },\n [\n _c(\"font-awesome-icon\", {\n staticClass: \"close-container\",\n attrs: { icon: [\"far\", \"times-circle\"] },\n on: {\n click: function($event) {\n _vm.traktWarning = false\n }\n }\n }),\n _vm._v(\" \"),\n _vm.traktWarning\n ? _c(\"span\", { staticClass: \"trakt-warning\" }, [\n _vm._v(_vm._s(_vm.traktWarningMessage))\n ])\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.showTraktAuthDialog\n ? _c(\n \"button\",\n {\n staticClass: \"btn-medusa\",\n attrs: { id: \"config-trakt\" },\n on: {\n click: function($event) {\n _vm.showTraktAuthDialog = true\n }\n }\n },\n [_vm._v(\"Config Trakt\")]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showTraktAuthDialog\n ? _c(\"trakt-authentication\", {\n attrs: { \"auth-only\": \"\" }\n })\n : _vm._e()\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showsLoaded && _vm.filteredShowsByList.length\n ? _c(\n \"isotope\",\n {\n ref: \"filteredShows\",\n staticClass: \"isoDefault\",\n attrs: {\n list: _vm.filteredShowsByList,\n id: \"isotope-container\",\n options: _vm.option\n },\n on: { layout: _vm.isotopeLayout }\n },\n _vm._l(_vm.filteredShowsByList, function(show) {\n return _c(\n \"div\",\n {\n key: show.seriesId,\n class: _vm.containerClass(show),\n attrs: {\n \"data-name\": show.title,\n \"data-rating\": show.rating,\n \"data-votes\": show.votes,\n \"data-anime\": show.isAnime\n }\n },\n [_c(\"recommended-poster\", { attrs: { show: show } })],\n 1\n )\n }),\n 0\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showsLoaded &&\n _vm.filteredShowsByList.length === 0 &&\n _vm.selectedSource !== -1\n ? _c(\"div\", { staticClass: \"align-center\" }, [\n _c(\n \"button\",\n {\n staticClass: \"btn-medusa btn-xs rec-show-button\",\n on: { click: _vm.searchRecommendedShows }\n },\n [\n _vm._v(\n \"\\n Search for new recommended shows from \" +\n _vm._s(_vm.sourceToString[_vm.selectedSource]) +\n \"\\n \"\n )\n ]\n )\n ])\n : _vm._e()\n ],\n 1\n )\n ])\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack://slim/./src/components/recommended.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": () => (/* binding */ render),\n/* harmony export */ \"staticRenderFns\": () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { attrs: { id: \"recommended-shows\" } },\n [\n _c(\"vue-snotify\"),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"row\", attrs: { id: \"recommended-shows-lists\" } },\n [\n _c(\n \"div\",\n { staticClass: \"col-md-12\" },\n [\n _c(\n \"config-template\",\n {\n attrs: {\n \"label-for\": \"recommended-source\",\n label: \"Select a Source\"\n }\n },\n [\n !_vm.showsLoaded\n ? _c(\n \"select\",\n {\n staticClass: \"form-control max-width\",\n attrs: { disabled: \"disabled\" }\n },\n [\n _c(\"option\", { attrs: { value: \"\" } }, [\n _vm._v(\"Loading shows, please wait\")\n ])\n ]\n )\n : _c(\n \"select\",\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.selectedSource,\n expression: \"selectedSource\"\n }\n ],\n staticClass: \"form-control max-width\",\n attrs: {\n disabled: !_vm.showsLoaded,\n id: \"recommended-source\",\n name: \"recommended-source\"\n },\n on: {\n change: function($event) {\n var $$selectedVal = Array.prototype.filter\n .call($event.target.options, function(o) {\n return o.selected\n })\n .map(function(o) {\n var val = \"_value\" in o ? o._value : o.value\n return val\n })\n _vm.selectedSource = $event.target.multiple\n ? $$selectedVal\n : $$selectedVal[0]\n }\n }\n },\n _vm._l(_vm.sourceOptions, function(option) {\n return _c(\n \"option\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showsLoaded,\n expression: \"showsLoaded\"\n }\n ],\n key: option.value,\n domProps: { value: option.value }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(option.text) +\n \"\\n \"\n )\n ]\n )\n }),\n 0\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"config-template\",\n {\n attrs: {\n \"label-for\": \"recommended-list\",\n label: \"Select a list\"\n }\n },\n [\n _c(\n \"select\",\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.selectedList,\n expression: \"selectedList\"\n }\n ],\n staticClass: \"form-control max-width\",\n attrs: {\n disabled: !_vm.showsLoaded,\n id: \"recommended-list\",\n name: \"recommended-list\"\n },\n on: {\n change: function($event) {\n var $$selectedVal = Array.prototype.filter\n .call($event.target.options, function(o) {\n return o.selected\n })\n .map(function(o) {\n var val = \"_value\" in o ? o._value : o.value\n return val\n })\n _vm.selectedList = $event.target.multiple\n ? $$selectedVal\n : $$selectedVal[0]\n }\n }\n },\n _vm._l(_vm.listOptions, function(option) {\n return _c(\n \"option\",\n {\n key: option.value,\n domProps: { value: option.value }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(option.text) +\n \"\\n \"\n )\n ]\n )\n }),\n 0\n )\n ]\n )\n ],\n 1\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"row\", attrs: { id: \"recommended-shows-options\" } },\n [\n _c(\n \"div\",\n { staticClass: \"col-md-12\" },\n [\n _c(\"config-toggle-slider\", {\n attrs: {\n label: \"Pass Default show options\",\n id: \"default_show_options\"\n },\n model: {\n value: _vm.enableShowOptions,\n callback: function($$v) {\n _vm.enableShowOptions = $$v\n },\n expression: \"enableShowOptions\"\n }\n }),\n _vm._v(\" \"),\n _c(\"add-show-options\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.enableShowOptions,\n expression: \"enableShowOptions\"\n }\n ],\n attrs: { \"enable-anime-options\": \"\" },\n on: { change: _vm.updateOptions }\n }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"show-option\" }, [\n _c(\"span\", [_vm._v(\"Sort By:\")]),\n _vm._v(\" \"),\n _c(\n \"select\",\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.sortOptionsValue,\n expression: \"sortOptionsValue\"\n }\n ],\n staticClass: \"form-control form-control-inline input-sm\",\n attrs: { name: \"showsort\", id: \"showsort\" },\n on: {\n change: [\n function($event) {\n var $$selectedVal = Array.prototype.filter\n .call($event.target.options, function(o) {\n return o.selected\n })\n .map(function(o) {\n var val = \"_value\" in o ? o._value : o.value\n return val\n })\n _vm.sortOptionsValue = $event.target.multiple\n ? $$selectedVal\n : $$selectedVal[0]\n },\n _vm.sort\n ]\n }\n },\n _vm._l(_vm.sortOptions, function(option) {\n return _c(\n \"option\",\n { key: option.value, domProps: { value: option.value } },\n [_vm._v(_vm._s(option.text))]\n )\n }),\n 0\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"show-option\" }, [\n _c(\"span\", { staticStyle: { \"margin-left\": \"12px\" } }, [\n _vm._v(\"Sort Order:\")\n ]),\n _vm._v(\" \"),\n _c(\n \"select\",\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.sortDirectionOptionsValue,\n expression: \"sortDirectionOptionsValue\"\n }\n ],\n staticClass: \"form-control form-control-inline input-sm\",\n attrs: {\n name: \"showsortdirection\",\n id: \"showsortdirection\"\n },\n on: {\n change: [\n function($event) {\n var $$selectedVal = Array.prototype.filter\n .call($event.target.options, function(o) {\n return o.selected\n })\n .map(function(o) {\n var val = \"_value\" in o ? o._value : o.value\n return val\n })\n _vm.sortDirectionOptionsValue = $event.target.multiple\n ? $$selectedVal\n : $$selectedVal[0]\n },\n _vm.sortDirection\n ]\n }\n },\n _vm._l(_vm.sortDirectionOptions, function(option) {\n return _c(\n \"option\",\n { key: option.value, domProps: { value: option.value } },\n [_vm._v(_vm._s(option.text))]\n )\n }),\n 0\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"show-option\" }, [\n _c(\"span\", { staticStyle: { \"margin-left\": \"12px\" } }, [\n _vm._v(\"Filter:\")\n ]),\n _vm._v(\" \"),\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.filterShows,\n expression: \"filterShows\"\n }\n ],\n staticClass: \"form-control form-control-inline input-sm\",\n attrs: { type: \"text\", placeholder: \"no filter\" },\n domProps: { value: _vm.filterShows },\n on: {\n input: [\n function($event) {\n if ($event.target.composing) {\n return\n }\n _vm.filterShows = $event.target.value\n },\n function($event) {\n return _vm.filter(\"filterByText\")\n }\n ]\n }\n })\n ])\n ],\n 1\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"row\", attrs: { id: \"recommended-shows\" } }, [\n _c(\n \"div\",\n { staticClass: \"col-md-12\", attrs: { id: \"popularShows\" } },\n [\n _vm.selectedSource === _vm.externals.TRAKT && _vm.traktWarning\n ? _c(\n \"div\",\n { staticClass: \"trakt-auth-container\" },\n [\n _c(\"font-awesome-icon\", {\n staticClass: \"close-container\",\n attrs: { icon: [\"far\", \"times-circle\"] },\n on: {\n click: function($event) {\n _vm.traktWarning = false\n }\n }\n }),\n _vm._v(\" \"),\n _vm.traktWarning\n ? _c(\"span\", { staticClass: \"trakt-warning\" }, [\n _vm._v(_vm._s(_vm.traktWarningMessage))\n ])\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.showTraktAuthDialog\n ? _c(\n \"button\",\n {\n staticClass: \"btn-medusa\",\n attrs: { id: \"config-trakt\" },\n on: {\n click: function($event) {\n _vm.showTraktAuthDialog = true\n }\n }\n },\n [_vm._v(\"Config Trakt\")]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showTraktAuthDialog\n ? _c(\"trakt-authentication\", {\n attrs: { \"auth-only\": \"\" }\n })\n : _vm._e()\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showsLoaded && _vm.filteredShowsByList.length\n ? _c(\n \"isotope\",\n {\n ref: \"filteredShows\",\n staticClass: \"isoDefault\",\n attrs: {\n list: _vm.filteredShowsByList,\n id: \"isotope-container\",\n options: _vm.option\n },\n on: { layout: _vm.isotopeLayout }\n },\n _vm._l(_vm.filteredShowsByList, function(show) {\n return _c(\n \"div\",\n {\n key: show.seriesId,\n class: _vm.containerClass(show),\n attrs: {\n \"data-name\": show.title,\n \"data-rating\": show.rating,\n \"data-votes\": show.votes,\n \"data-anime\": show.isAnime\n }\n },\n [_c(\"recommended-poster\", { attrs: { show: show } })],\n 1\n )\n }),\n 0\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showsLoaded &&\n _vm.filteredShowsByList.length === 0 &&\n _vm.selectedSource !== -1\n ? _c(\"div\", { staticClass: \"align-center\" }, [\n _c(\n \"button\",\n {\n staticClass: \"btn-medusa btn-xs rec-show-button\",\n on: { click: _vm.searchRecommendedShows }\n },\n [\n _vm._v(\n \"\\n Search for new recommended shows from \" +\n _vm._s(_vm.sourceToString[_vm.selectedSource]) +\n \"\\n \"\n )\n ]\n )\n ])\n : _vm.page[_vm.selectedSource] !== -1\n ? _c(\n \"div\",\n { staticClass: \"load-more\" },\n [\n _vm.loadingShows\n ? _c(\"state-switch\", { attrs: { state: \"loading\" } })\n : _c(\n \"button\",\n {\n staticClass: \"btn-medusa\",\n on: { click: _vm.getMore }\n },\n [_vm._v(\"Load More\")]\n )\n ],\n 1\n )\n : _vm._e()\n ],\n 1\n )\n ])\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack://slim/./src/components/recommended.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options");
/***/ }),