// ==UserScript== // @name MAL-Sync // @namespace https://greasyfork.org/users/92233 // @description Integrates MyAnimeList/AniList/Kitsu/Simkl into various sites, with auto episode tracking. // @version 0.7.3 // @author lolamtisch@gmail.com // @license GPL-3.0 // @iconURL https://raw.githubusercontent.com/lolamtisch/MALSync/master/assets/icons/icon128.png // @grant GM_xmlhttpRequest // @grant GM_getValue // @grant GM_setValue // @grant GM_deleteValue // @grant GM_listValues // @grant GM_addStyle // @grant GM_getResourceText // @grant GM.xmlHttpRequest // @grant GM.getValue // @grant GM.setValue // @match *://myanimelist.net/anime/* // @match *://myanimelist.net/manga/* // @match *://myanimelist.net/animelist/* // @match *://myanimelist.net/mangalist/* // @match *://myanimelist.net/anime.php?id=* // @match *://myanimelist.net/manga.php?id=* // @match *://myanimelist.net/character/* // @match *://myanimelist.net/people/* // @match *://myanimelist.net/search/* // @match *://anilist.co/* // @match *://kitsu.io/* // @match *://simkl.com/* // @match *://kissanime.ru/Anime/* // @match *://kissanime.to/Anime/* // @match *://kissmanga.com/Manga/* // @match *://*.9anime.to/watch/* // @match *://*.9anime.is/watch/* // @match *://*.9anime.ru/watch/* // @match *://*.9anime.ch/watch/* // @match *://*.9anime.nl/watch/* // @match *://*.9anime.live/watch/* // @match *://*.9anime.one/watch/* // @match *://*.9anime.page/watch/* // @match *://*.9anime.video/watch/* // @match *://*.9anime.life/watch/* // @match *://*.9anime.love/watch/* // @match *://*.9anime.tv/watch/* // @match *://*.crunchyroll.com/* // @match *://*.mangadex.org/manga/* // @match *://*.mangadex.org/title/* // @match *://*.mangadex.org/chapter/* // @match *://*.mangadex.cc/manga/* // @match *://*.mangadex.cc/title/* // @match *://*.mangadex.cc/chapter/* // @match *://*.gogoanime.tv/* // @match *://*.gogoanime.io/* // @match *://*.gogoanime.in/* // @match *://*.gogoanime.se/* // @match *://*.gogoanime.sh/* // @match *://*.gogoanime.video/* // @match *://*.gogoanime.movie/* // @match *://*.gogoanimes.co/* // @match *://*.animego.to/* // @match *://*.anime4you.one/show/1/aid/* // @match *://*.branitube.net/watch/* // @match *://*.branitube.net/animes/* // @match *://*.www.turkanime.tv/video/* // @match *://*.www.turkanime.tv/anime/* // @match *://*.www.turkanime.net/video/* // @match *://*.www.turkanime.net/anime/* // @match *://twist.moe/* // @match *://app.emby.media/* // @match *://app.plex.tv/* // @match *://www.netflix.com/* // @match *://animepahe.com/play/* // @match *://animepahe.com/anime/* // @match *://animeflv.net/anime/* // @match *://animeflv.net/ver/* // @match *://jkanime.net/* // @match *://vrv.co/* // @match *://proxer.me/* // @match *://novelplanet.com/Novel/* // @match *://4anime.to/* // @match *://www.dreamanimes.com.br/* // @match *://*.animeultima.eu/a/* // @match *://*.animeultima.to/a/* // @match *://*.aniflix.tv/* // @match *://animedaisuki.moe/watch/* // @match *://animedaisuki.moe/anime/* // @match *://www.animefreak.tv/watch/* // @match *://www.anime-planet.com/anime/* // @match *://*.kickassanime.io/anime/* // @match *://*.kickassanime.ru/anime/* // @match *://*.kickassanime.rs/anime/* // @match *://www.riie.net/* // @match *://animekisa.tv/* // @match *://*.wakanim.tv/* // @match *://animeindo.moe/* // @match *://shinden.pl/episode/* // @match *://shinden.pl/series/* // @match *://www.funimation.com/shows/* // @match *://voiranime.com/* // @match *://*.dubbedanime.net/* // @match *://www.viz.com/* // @match *://manganelo.com/* // @match *://mangakakalot.com/* // @match *://*.neko-sama.fr/* // @match *://www.animezone.pl/odcinki/* // @match *://www.animezone.pl/odcinek/* // @match *://www.animezone.pl/anime/* // @match *://anime-odcinki.pl/anime/* // @match *://animeflix.io/* // @match *://*.animefever.tv/* // @match *://serimanga.com/* // @match *://mangadenizi.com/* // @match *://moeclip.com/* // @match *://mangalivre.net/* // @match *://tmofans.com/* // @match *://lectortmo.com/* // @match *://unionleitor.top/* // @match *://unionmangas.top/* // @match *://myanime.moe/* // @match *://mangaplus.shueisha.co.jp/* // @match *://*.japscan.co/* // @match *://mangakisa.com/* // @match *://goyabu.com/* // @match *://*.animesvision.com.br/* // @match *://www.hulu.com/* // @match *://aniwatch.me/* // @match *://www.hidive.com/* // @match *://jaiminisbox.com/reader/series/* // @match *://jaiminisbox.com/reader/read/* // @match *://manga.fascans.com/manga/* // @match *://*.animestrue.net/anime/*/temporada* // @match *://*.primevideo.com/* // @match *://mangakatana.com/manga/* // @match *://manga4life.com/* // @match *://bato.to/* // @match *://dreamsub.stream/* // @match *://mangapark.net/* // @match *://animeshouse.net/episodio/* // @match *://animeshouse.net/filme/* // @match *://*.openload.co/* // @match *://*.openload.pw/* // @match *://*.streamango.com/* // @match *://*.mp4upload.com/* // @match *://*.mcloud.to/* // @match *://*.prettyfast.to/* // @match *://*.rapidvideo.com/* // @match *://*.rapidvid.to/* // @match *://*.static.crunchyroll.com/* // @match *://*.static.vrv.co/* // @match *://*.vidstreaming.io/* // @match *://*.vidstreaming.me/* // @match *://*.xstreamcdn.com/* // @match *://*.gcloud.live/* // @match *://*.oload.tv/* // @match *://*.mail.ru/* // @match *://*.myvi.ru/* // @match *://*.sibnet.ru/* // @match *://*.tune.pk/* // @match *://*.vimple.ru/* // @match *://*.href.li/* // @match *://*.vk.com/* // @match *://*.cloudvideo.tv/* // @match *://*.fembed.net/* // @match *://*.fembed.com/* // @match *://*.animeproxy.info/* // @match *://*.feurl.com/* // @match *://*.youpload.co/* // @match *://*.yourupload.com/* // @match *://*.vidlox.me/* // @match *://*.kwik.cx/* // @match *://*.mega.nz/* // @match *://*.animeflv.net/* // @match *://*.hqq.tv/* // @match *://*.jkanime.net/* // @match *://*.ok.ru/* // @match *://*.novelplanet.me/* // @match *://*.stream.proxer.me/* // @match *://verystream.com/* // @match *://*.animeultima.eu/e/* // @match *://*.animeultima.eu/faststream/* // @match *://*.animeultima.to/e/* // @match *://*.animeultima.to/faststream/* // @match *://*.vidoza.net/* // @match *://crazyload.co/* // @match *://gounlimited.to/* // @match *://www.ani-stream.com/* // @match *://flex.aniflex.org/public/dist/* // @match *://animedaisuki.moe/embed/* // @match *://wakanim.tv/*/*/*/embeddedplayer/* // @match *://superitu.com/embed/* // @match *://www.dailymotion.com/embed/* // @match *://vev.io/embed/* // @match *://vev.red/embed/* // @match *://www.funimation.com/player/* // @match *://jwpstream.com/jwps/yplayer.php* // @match *://www.vaplayer.xyz/v/* // @match *://mp4.sh/embed/* // @match *://embed.mystream.to/* // @match *://*.bitchute.com/embed/* // @match *://*.streamcherry.com/embed/* // @match *://*.clipwatching.com/* // @match *://*.flix555.com/* // @match *://*.vshare.io/v/* // @match *://*.replay.watch/* // @match *://*.playhydrax.com/* // @match *://hydrax.net/* // @match *://*.streamium.xyz/* // @match *://animo-pace-stream.io/* // @match *://*.pstream.net/e/* // @match *://*.animefever.tv/embed/* // @match *://*.haloani.ru/* // @match *://*.moeclip.com/v/* // @match *://*.mixdrop.co/e/* // @exclude *myanimelist.net/anime/season* // @exclude *myanimelist.net/anime/producer* // @exclude *myanimelist.net/manga/magazine* // @exclude *myanimelist.net/anime/genre* // @exclude *myanimelist.net/manga/genre* // @exclude *crunchyroll.com/ // @exclude *crunchyroll.com // @exclude *crunchyroll.com/acct* // @exclude *crunchyroll.com/anime* // @exclude *crunchyroll.com/comics* // @exclude *crunchyroll.com/edit* // @exclude *crunchyroll.com/email* // @exclude *crunchyroll.com/forum* // @exclude *crunchyroll.com/home* // @exclude *crunchyroll.com/inbox* // @exclude *crunchyroll.com/library* // @exclude *crunchyroll.com/login* // @exclude *crunchyroll.com/manga* // @exclude *crunchyroll.com/newprivate* // @exclude *crunchyroll.com/news* // @exclude *crunchyroll.com/notifications* // @exclude *crunchyroll.com/order* // @exclude *crunchyroll.com/outbox* // @exclude *crunchyroll.com/pm* // @exclude *crunchyroll.com/search* // @exclude *crunchyroll.com/store* // @exclude *crunchyroll.com/user* // @exclude *crunchyroll.com/videos* // @exclude *crunchyroll.com/affiliate_iframeplayer* // @exclude *gogoanime*.*/ // @exclude *gogoanime*.*/*.html // @exclude *gogoanime*.*/anime-List* // @exclude *gogoanime*.*/user* // @exclude *animego*.*/ // @exclude *animego*.*/*.html // @exclude *animego*.*/anime-List* // @exclude *animego*.*/user* // @exclude *://jkanime.net/ // @exclude *://jkanime.net/letra/* // @exclude *://jkanime.net/buscar/* // @exclude *://jkanime.net/terminos-condiciones/ // @require http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js // @resource material.css https://code.getmdl.io/1.3.0/material.indigo-pink.min.css // @resource materialFont.css https://fonts.googleapis.com/icon?family=Material+Icons // @resource material.js https://greasyfork.org/scripts/377924-material-design-lite-mal-sync/code/material-design-lite%20MAL-Sync.js?version=671593 // @run-at document_start // @connect myanimelist.net // @connect kissanimelist.firebaseio.com // @connect graphql.anilist.co // @connect media.kitsu.io // @connect api.simkl.com // @connect api.malsync.moe // @connect * // @downloadURL none // ==/UserScript== var i18n = {"Search":"Search","Show":"Show","Help":"Help","Update":"Update","Reset":"Reset","Remove":"Remove","Loading":"Loading","Select":"Select","Yes":"Yes","No":"No","NothingFound":"Nothing Found","Not_Found":"Not Found!","NoEntries":"No Entries","fullscreen":"fullscreen","close":"close","All":"All","Package_Description":"Integrates MyAnimeList/AniList/Kitsu/Simkl into various sites, with auto episode tracking.","UI_Status":"Status:","UI_Status_watching_anime":"Watching","UI_Status_watching_manga":"Reading","UI_Status_Completed":"Completed","UI_Status_OnHold":"On-Hold","UI_Status_Dropped":"Dropped","UI_Status_planTo_anime":"Plan to Watch","UI_Status_planTo_manga":"Plan to Read","UI_Status_Rewatching_anime":"Rewatching","UI_Status_Rewatching_manga":"Rereading","UI_Episode":"Episode:","UI_Volume":"Volume:","UI_Chapter":"Chapter:","UI_Score":"Your Score:","UI_Score_Not_Rated":"Not rated","UI_Score_Masterpiece":"(10) Masterpiece","UI_Score_Great":"(9) Great","UI_Score_VeryGood":"(8) Very Good","UI_Score_Good":"(7) Good","UI_Score_Fine":"(6) Fine","UI_Score_Average":"(5) Average","UI_Score_Bad":"(4) Bad","UI_Score_VeryBad":"(3) Very Bad","UI_Score_Horrible":"(2) Horrible","UI_Score_Appalling":"(1) Appalling","syncPage_flashm_resumeMsg":"Resume at $1","syncPage_flashm_sync_anime":"Update $1 to episode $2","syncPage_flashm_sync_manga":"Update $1 to chapter $2","syncPage_flashm_sync_undefined_undo":"Undo","syncPage_flashm_sync_undefined_wrong":"Wrong?","syncPage_flashm_failded":"Update failed","syncPage_flashConfirm_complete":"Set as completed?","syncPage_flashConfirm_start_anime":"Start watching?","syncPage_flashConfirm_rewatch_finish_anime":"Finish rewatching?","syncPage_flashConfirm_rewatch_finish_manga":"Finish rereading?","syncPage_flashConfirm_start_manga":"Start reading?","syncPage_flashConfirm_rewatch_start_anime":"Rewatch Anime?","syncPage_flashConfirm_rewatch_start_manga":"Reread Manga?","syncPage_flashConfirm_Anime_Correct":"Is \"$1\" correct?","syncPage_malObj_addAnime":"Add to $1","syncPage_malObj_nextEp_anime":"Episode $1","syncPage_malObj_nextEp_manga":"Chapter $1","syncPage_flashConfirm_offsetHandler_1":"A possible Episode offset of $1 was detected. Is that correct? ","anilistClass_authentication":"Token saved you can close this page now","kitsuClass_authentication_text":"To login with Kitsu, you need to enter your account's e-mail and password.
Your credentials are not stored on your computer or anywhere else.
They are directly sent to Kitsu. Only the returned access token is saved.
","kitsuClass_authentication_Password":"Password","kitsuClass_authentication_Login":"Login","kitsuClass_authentication_Success":"Token saved you can close this page now","kitsuClass_authentication_Wrong":"Credentials wrong","bookmarksItem_Days":"Days","bookmarksItem_Day":"Day","bookmarksItem_Hours":"Hours","bookmarksItem_Hour":"Hour","bookmarksItem_mins":"mins","prediction_Episode":"Next episode estimated in $1","prediction_Airing":"Airing in $1","correction_Offset":"Episode Offset","correction_Offset_text":"Input the episode offset, if an anime has 12 episodes, but uses the numbers 0-11 rather than 1-12, you simply type \" +1 \" in the episode offset.","correction_WrongUrl":"Only change this URL if it points to the wrong anime page on MAL.","correction_Search":"Correction Search","correction_Search_text":"This field is for finding an anime, when you need to correct the \"MyAnimeList URL\" shown above.
To make a search, simply begin typing the name of an anime, and a list with results will automatically appear as you type.","correction_NoMal":"If the Anime/Manga can't be found on MAL","correction_NoEntry":"No entry on MyAnimeList","correction_NewOffset":"New Offset ($1) set.","correction_OffsetReset":"Offset reset","correction_NewUrl":"New URL '$1' set.","correction_NewUrlReset":"MyAnimeList URL reset","correction_DBRequest":"Submit database correction request?","overview_Continue_anime":"Continue watching","overview_Continue_manga":"Continue reading","overview_Next_Episode_anime":"Next Episode","overview_Next_Episode_manga":"Next Chapter","overview_Resume_Episode_anime":"Resume Episode","overview_Resume_Episode_manga":"Resume Chapter","overview_EditDetails":"Edit Details","overview_Characters":"Characters","overview_OpeningTheme":"Opening Theme:","overview_EndingTheme":"Ending Theme:","search_Type":"Type:","search_Score":"Score:","search_Year":"Year:","settings_General":"General","settings_Mode":"Mode","settings_Authenticate":"Authenticate","settings_LocalSync":"Local storage fallback","settings_LocalSync_Import":"Import","settings_LocalSync_Export":"Export","settings_Animesync":"Anime sync","settings_Animesync_Video":"Video","settings_Animesync_Instant":"Instant","settings_Animesync_Manual":"Manual","settings_Mangasync":"Manga sync","settings_AutoTracking_Video":"Update on $1% of video progress","settings_AutoTracking_Instant":"Delay instant autotracking by $1 seconds","settings_StreamingSite":"Streaming Site Links","settings_StreamingSite_text":"If disabled, the streaming site will no longer appear in an animes sidebar on MyAnimeList/AniList/Kitsu.","settings_Thumbnails":"Thumbnails","settings_Thumbnails_text":"The option is for resizing the thumbnails on MyAnimeList.
Like thumbnails for characters, people, recommendations, etc.","settings_Thumbnails_Large":"Large","settings_Thumbnails_Medium":"Medium","settings_Thumbnails_Small":"Small","settings_Thumbnails_Default":"MAL Default","settings_FriendScore":"Friend scores on detail page","settings_epPredictions":"Estimate episode number","settings_malTags":"Use Tags/Notes","settings_malTags_Text":"If enabled: On your MyAnimeList/Anilist Anime List and the bookmark list in miniMAL, an icon-link will be added to the last used streaming site you were using to watch an anime.
Simply click the icon to continue watching the anime.","settings_malContinue":"Continue watching links","settings_malResume":"Resume watching links","settings_miniMAL_floatButtonStealth":"Stealth UI mode","settings_miniMAL_floatButtonHide":"Hide miniMAL floating menu button","settings_miniMAL_autoCloseMinimal":"Clicking outside closes miniMAL","settings_miniMAL_Display":"Display to the","settings_miniMAL_window":"Open in separate window","settings_miniMAL_Display_Left":"Left","settings_miniMAL_Display_Right":"Right","settings_miniMAL_Height":"Height (px / %)","settings_miniMAL_Width":"Width (px / %)","settings_Shortcuts":"Shortcuts","settings_miniMAL_Open":"Open miniMAL","settings_miniMAL_NotSet":"Not Set","settings_Video_Player":"Video Player","settings_Video_Fullscreen":"Auto fullscreen","settings_Video_Resume":"Auto resume","settings_autoNextEp":"Autoplay next episode","settings_Shortcuts_Correction":"Open anime relation correction popup","settings_Shortcuts_Next_Episode":"Open next episode shortcut","settings_Shortcuts_Skip_Forward":"Skips the opening","settings_Shortcuts_Skip_Backward":"Jump back to opening's beginning","settings_Shortcuts_Click":"Click to enter shortcut","settings_introSkip":"Set opening skip length ($1 seconds)","settings_UpdateCheck":"Update Check","settings_UpdateCheck_Text":"Checks for new episodes in the background.","settings_Interval":"Interval","settings_Interval_Off":"Off","settings_Notifications":"Notifications","settings_Debugging":"Debugging","settings_ETC":"ETC","settings_Userscriptmode":"Userscript mode","settings_Userscriptmode_Text":"Disables the content script. This makes it possible to have the extension and userscript enabled at the same time.","settings_StrictCookies":"Strict Cookies","settings_StrictCookies_Text":"This option adds Firefox Multi-Account Containers support. Make sure to restart the browser after enabling this option","settings_highlightAllEp":"Highlight all Episodes/Chapters","settings_highlightAllEp_Text":"This option will highlight all watched chapters/episodes in the list you can find on some Anime/Manga sites","settings_ClearCache":"Clear Cache","settings_presenceHidePage":"Show MAL-Sync icon instead of page icon","settings_shortcut_tooltip":"It is not recommended to set the shortcut to a single key","updateCheck_Refresh":"Refresh","updateCheck_StartCheck":"Start Check","updateCheck_NotificationCheck":"Notification Check","updateCheck_Episode":"Episode","updateCheck_Message":"Message","updateCheck_NotificationHistory":"Notification History","minimalApp_Overview":"Overview","minimalApp_Reviews":"Reviews","minimalApp_Recommendations":"Recommendations","minimalApp_Settings":"Settings","minimalClass_Popup":"Please allow pop-ups for this website","minimalClass_versionMsg":"Updated to version $1 $2CHANGELOG]","minimalClass_versionMsg_Text_1":"Thank you for installing MAL-Sync","minimalClass_versionMsg_Text_2":"Having Questions?","minimalClass_versionMsg_Text_3":"Open Source Code:","minimalClass_versionMsg_Text_4":"uBlock users please subscribe to this filter list! This fixes some problems like broken images","installPage_Mode":"Please select which Anime database you want use:","installPage_Howto":"How to use?","installPage_Howto_Description":"Just open an episode or chapter on any of the supported pages. The sync waits until 85% of the video is watched. For mangas it syncs on page load. This can be changed in the settings.","installPage_Wrong":"It syncs to the wrong MAL entry?","installPage_Wrong_Description":"You can easily change the relation like shown in the gif below. An episode offset can be set on that page too.","Anilist_Authenticate":"Please Authenticate Here","Emby_Authenticate":"MAL-Sync needs an Emby API key to work. More infos Here","Error_Authenticate":"Please Authenticate Here","Discord_rpc_browsing":"Browsing $1","nextEpShort_no_support":"This page doesn't support opening the next episode","nextEpShort_no_nextEp":"Couldn't find the next episode"} /*! For license information please see malsync.user.js.LICENSE */ !function(modules) { var installedModules = {}; function __webpack_require__(moduleId) { if (installedModules[moduleId]) return installedModules[moduleId].exports; var module = installedModules[moduleId] = { i: moduleId, l: !1, exports: {} }; return modules[moduleId].call(module.exports, module, module.exports, __webpack_require__), module.l = !0, module.exports; } __webpack_require__.m = modules, __webpack_require__.c = installedModules, __webpack_require__.d = function(exports, name, getter) { __webpack_require__.o(exports, name) || Object.defineProperty(exports, name, { enumerable: !0, get: getter }); }, __webpack_require__.r = function(exports) { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(exports, "__esModule", { value: !0 }); }, __webpack_require__.t = function(value, mode) { if (1 & mode && (value = __webpack_require__(value)), 8 & mode) return value; if (4 & mode && "object" == typeof value && value && value.__esModule) return value; var ns = Object.create(null); if (__webpack_require__.r(ns), Object.defineProperty(ns, "default", { enumerable: !0, value: value }), 2 & mode && "string" != typeof value) for (var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); return ns; }, __webpack_require__.n = function(module) { var getter = module && module.__esModule ? function() { return module.default; } : function() { return module; }; return __webpack_require__.d(getter, "a", getter), getter; }, __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }, __webpack_require__.p = "", __webpack_require__(__webpack_require__.s = 183); }([ function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); var userscriptLegacy = __webpack_require__(71), __awaiter = function(thisArg, _arguments, P, generator) { return new (P || (P = Promise))((function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } function step(result) { var value; result.done ? resolve(result.value) : (value = result.value, value instanceof P ? value : new P((function(resolve) { resolve(value); }))).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); })); }; const requestUserscriptLegacy = { xhr(method, url) { return __awaiter(this, void 0, void 0, (function*() { return new Promise((resolve, reject) => { var request = { method: method, url: url, synchronous: !1, headers: [], data: null, onload: function(response) { console.log(response); var responseObj = { finalUrl: response.finalUrl, responseText: response.responseText, status: response.status }; resolve(responseObj); } }; "object" == typeof url && (request.url = url.url, request.headers = url.headers, request.data = url.data), GM_xmlhttpRequest(request); }); })); } }; var settings = __webpack_require__(72); __webpack_require__.d(__webpack_exports__, "storage", (function() { return storage; })), __webpack_require__.d(__webpack_exports__, "request", (function() { return request; })), __webpack_require__.d(__webpack_exports__, "settings", (function() { return userscript_settings; })), __webpack_require__.d(__webpack_exports__, "type", (function() { return type; })); var storage = userscriptLegacy.a, request = requestUserscriptLegacy, userscript_settings = settings.a, type = "userscript"; }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__), __webpack_require__.d(__webpack_exports__, "log", (function() { return log; })), __webpack_require__.d(__webpack_exports__, "error", (function() { return error; })), __webpack_require__.d(__webpack_exports__, "info", (function() { return info; })); var log = Function.prototype.bind.call(console.log, console, "%cMAL-Sync", "background-color: #2e51a2; color: white; padding: 2px 10px; border-radius: 3px;"), error = Function.prototype.bind.call(console.error, console, "%cMAL-Sync", "background-color: #8f0000; color: white; padding: 2px 10px; border-radius: 3px;"), info = Function.prototype.bind.call(console.info, console, "%cMAL-Sync", "background-color: wheat; color: black; padding: 2px 10px; border-radius: 3px;"); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__), function(j, api, con, utils) { __webpack_require__.d(__webpack_exports__, "urlPart", (function() { return urlPart; })), __webpack_require__.d(__webpack_exports__, "urlParam", (function() { return urlParam; })), __webpack_require__.d(__webpack_exports__, "getBaseText", (function() { return getBaseText; })), __webpack_require__.d(__webpack_exports__, "favicon", (function() { return favicon; })), __webpack_require__.d(__webpack_exports__, "watching", (function() { return watching; })), __webpack_require__.d(__webpack_exports__, "planTo", (function() { return planTo; })), __webpack_require__.d(__webpack_exports__, "episode", (function() { return episode; })), __webpack_require__.d(__webpack_exports__, "syncRegex", (function() { return syncRegex; })), __webpack_require__.d(__webpack_exports__, "status", (function() { return status; })), __webpack_require__.d(__webpack_exports__, "getselect", (function() { return getselect; })), __webpack_require__.d(__webpack_exports__, "absoluteLink", (function() { return absoluteLink; })), __webpack_require__.d(__webpack_exports__, "parseHtml", (function() { return parseHtml; })), __webpack_require__.d(__webpack_exports__, "urlChangeDetect", (function() { return urlChangeDetect; })), __webpack_require__.d(__webpack_exports__, "changeDetect", (function() { return changeDetect; })), __webpack_require__.d(__webpack_exports__, "waitUntilTrue", (function() { return waitUntilTrue; })), __webpack_require__.d(__webpack_exports__, "checkDoubleExecution", (function() { return checkDoubleExecution; })), __webpack_require__.d(__webpack_exports__, "getUrlFromTags", (function() { return getUrlFromTags; })), __webpack_require__.d(__webpack_exports__, "setUrlInTags", (function() { return setUrlInTags; })), __webpack_require__.d(__webpack_exports__, "setResumeWaching", (function() { return setResumeWaching; })), __webpack_require__.d(__webpack_exports__, "getResumeWaching", (function() { return getResumeWaching; })), __webpack_require__.d(__webpack_exports__, "setContinueWaching", (function() { return setContinueWaching; })), __webpack_require__.d(__webpack_exports__, "getContinueWaching", (function() { return getContinueWaching; })), __webpack_require__.d(__webpack_exports__, "handleMalImages", (function() { return handleMalImages; })), __webpack_require__.d(__webpack_exports__, "getMalToKissArray", (function() { return getMalToKissArray; })), __webpack_require__.d(__webpack_exports__, "getMalToKissApi", (function() { return getMalToKissApi; })), __webpack_require__.d(__webpack_exports__, "getMalToKissFirebase", (function() { return getMalToKissFirebase; })), __webpack_require__.d(__webpack_exports__, "getTooltip", (function() { return getTooltip; })), __webpack_require__.d(__webpack_exports__, "epPredictionUI", (function() { return epPredictionUI; })), __webpack_require__.d(__webpack_exports__, "timeDiffToText", (function() { return timeDiffToText; })), __webpack_require__.d(__webpack_exports__, "canHideTabs", (function() { return canHideTabs; })), __webpack_require__.d(__webpack_exports__, "epPrediction", (function() { return epPrediction; })), __webpack_require__.d(__webpack_exports__, "statusTag", (function() { return statusTag; })), __webpack_require__.d(__webpack_exports__, "notifications", (function() { return notifications; })), __webpack_require__.d(__webpack_exports__, "timeCache", (function() { return timeCache; })), __webpack_require__.d(__webpack_exports__, "flashm", (function() { return flashm; })), __webpack_require__.d(__webpack_exports__, "flashConfirm", (function() { return flashConfirm; })), __webpack_require__.d(__webpack_exports__, "lazyload", (function() { return lazyload; })), __webpack_require__.d(__webpack_exports__, "elementInViewport", (function() { return elementInViewport; })); var __awaiter = function(thisArg, _arguments, P, generator) { return new (P || (P = Promise))((function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } function step(result) { var value; result.done ? resolve(result.value) : (value = result.value, value instanceof P ? value : new P((function(resolve) { resolve(value); }))).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); })); }; function urlPart(url, part) { try { return url.split("/")[part].split("?")[0].split("#")[0]; } catch (e) { return; } } function urlParam(url, name) { var results = new RegExp("[?&]" + name + "=([^&#]*)").exec(url); return null == results ? null : decodeURI(results[1]) || 0; } function getBaseText(element) { var text = element.text(); return element.children().each((function() { text = text.replace(j.$(this).text(), ""); })), text; } function favicon(domain) { return -1 !== domain.indexOf("animeheaven") ? "http://animeheaven.eu/favicon.ico" : "https://www.google.com/s2/favicons?domain=" + domain; } function watching(type) { return "manga" === type ? "Reading" : "Watching"; } function planTo(type) { return "manga" === type ? "Plan to Read" : "Plan to Watch"; } function episode(type) { return "manga" === type ? api.storage.lang("UI_Chapter") : api.storage.lang("UI_Episode"); } var status, syncRegex = /(^settings\/.*|^updateCheckTime$|^tempVersion$|^local:\/\/)/; function getselect(data, name) { var temp = data.split('name="' + name + '"')[1].split("")[0]; if (!(temp.indexOf('selected="selected"') > -1)) return ""; temp = temp.split(" -1) return temp[i].split('value="')[1].split('"')[0]; } function absoluteLink(url, domain) { return void 0 === url ? url : (url.startsWith("http") || ("/" !== url.charAt(0) && (url = "/" + url), url = domain + url), url); } function parseHtml(text) { return (new DOMParser).parseFromString("" + text, "text/html").body.textContent; } function urlChangeDetect(callback) { var currentPage = window.location.href; return setInterval((function() { currentPage != window.location.href && (currentPage = window.location.href, callback()); }), 100); } function changeDetect(callback, func) { var currentPage = func(); return setInterval((function() { var temp = func(); void 0 !== temp && currentPage != temp && (currentPage = func(), callback()); }), 500); } function waitUntilTrue(condition, callback) { var Interval = null; return Interval = setInterval((function() { condition() && (clearInterval(Interval), callback()); }), 100); } !function(status) { status[status.watching = 1] = "watching", status[status.completed = 2] = "completed", status[status.onhold = 3] = "onhold", status[status.dropped = 4] = "dropped", status[status.planToWatch = 6] = "planToWatch"; }(status || (status = {})); var doubleId = Math.random(); function checkDoubleExecution() { $(".mal-sync-double-detect").length && $(".mal-sync-double-detect").each((function(index) { $(this).text() !== doubleId.toString() && alert("Double execution detected! Please run MAL-Sync once only."); })), $("body").after('"); } function getUrlFromTags(tags) { if (api.settings.get("malTags")) return /malSync::[\d\D]+::/.test(tags) ? atobURL(tags.split("malSync::")[1].split("::")[0]) : /last::[\d\D]+::/.test(tags) ? atobURL(tags.split("last::")[1].split("::")[0]) : void 0; function atobURL(encoded) { try { return atob(encoded); } catch (e) { return encoded; } } } function setUrlInTags(url, tags) { if ("" === url) return tags = tags.replace(/,?(malSync|last)::[^ \n]+?::/, ""); if (!api.settings.get("malTags")) return tags; var addition = "malSync::" + btoa(url) + "::"; return tags = /(last|malSync)::[\d\D]+::/.test(tags) ? tags.replace(/(last|malSync)::[^\^]*?::/, addition) : tags + "," + addition; } function setResumeWaching(url, ep, type, id) { return __awaiter(this, void 0, void 0, (function*() { return api.storage.set("resume/" + type + "/" + id, { url: url, ep: ep }); })); } function getResumeWaching(type, id) { return __awaiter(this, void 0, void 0, (function*() { if (api.settings.get("malResume")) return api.storage.get("resume/" + type + "/" + id); })); } function setContinueWaching(url, ep, type, id) { return __awaiter(this, void 0, void 0, (function*() { return api.storage.set("continue/" + type + "/" + id, { url: url, ep: ep }); })); } function getContinueWaching(type, id) { return __awaiter(this, void 0, void 0, (function*() { if (api.settings.get("malContinue")) return api.storage.get("continue/" + type + "/" + id); })); } function handleMalImages(url) { return -1 !== url.indexOf("questionmark") ? api.storage.assetUrl("questionmark.gif") : url; } function getMalToKissArray(type, id) { return __awaiter(this, void 0, void 0, (function*() { return id ? getMalToKissApi(type, id).catch(e => (con.error(e), getMalToKissFirebase(type, id))) : {}; })); } function getMalToKissApi(type, id) { return __awaiter(this, void 0, void 0, (function*() { var url = "https://api.malsync.moe/mal/" + type + "/" + id; return api.request.xhr("GET", url).then(response => __awaiter(this, void 0, void 0, (function*() { if (con.log("malSync response", response), 400 === response.status) return {}; if (200 === response.status) { var data = JSON.parse(response.responseText); for (var pageKey in data.Sites) api.settings.get(pageKey) || (con.log(pageKey + " is deactivated"), delete data.Sites[pageKey]); return data && data.Sites ? data.Sites : {}; } throw "malsync offline"; }))); })); } function getMalToKissFirebase(type, id) { return __awaiter(this, void 0, void 0, (function*() { return new Promise((resolve, reject) => { var url = "https://kissanimelist.firebaseio.com/Data2/Mal" + type + "/" + id + "/Sites.json"; api.request.xhr("GET", url).then(response => __awaiter(this, void 0, void 0, (function*() { var json = j.$.parseJSON(response.responseText); for (var pageKey in json) { var page = json[pageKey]; if (api.settings.get(pageKey)) for (var streamKey in page) { var stream = page[streamKey], streamUrl = "https://kissanimelist.firebaseio.com/Data2/" + stream + "/" + encodeURIComponent(streamKey) + ".json", cache = yield api.storage.get("MalToKiss/" + stream + "/" + encodeURIComponent(streamKey), null); if (null != cache && cache.constructor === Object && 0 !== Object.keys(cache).length) var streamJson = cache; else { var streamRespose = yield api.request.xhr("GET", streamUrl); streamJson = j.$.parseJSON(streamRespose.responseText); api.storage.set("MalToKiss/" + stream + "/" + encodeURIComponent(streamKey), streamJson); } streamJson ? id in streamJson.Mal ? ("Crunchyroll" === pageKey && (streamJson.url = streamJson.url + "?season=" + streamKey), json[pageKey][streamKey] = streamJson) : (con.error("[K2M] Wrong mal id", streamJson), delete json[pageKey][streamKey]) : (con.error("[K2M] " + pageKey + "/" + streamKey + " not found"), delete json[pageKey][streamKey]); } else con.log(pageKey + " is deactivated"), delete json[pageKey]; } con.log("Mal2Kiss", json), resolve(json); }))); }); })); } function getTooltip(text, style = "", direction = "top") { var rNumber = Math.floor(1e3 * Math.random() + 1); return '
contact_support
' + text + "
"; } function epPredictionUI(malid, cacheKey, type = "anime", callback) { return __awaiter(this, void 0, void 0, (function*() { utils.epPrediction(malid, (function(pre) { return __awaiter(this, void 0, void 0, (function*() { pre || callback(!1); var updateCheckTime = yield api.storage.get("updateCheckTime"), aniCache = yield api.storage.get("mal/" + malid + "/aniSch"), elCache = void 0; if (void 0 !== updateCheckTime && updateCheckTime && "0" !== updateCheckTime && (elCache = yield api.storage.get("updateCheck/" + type + "/" + cacheKey)), !1 !== pre || void 0 !== elCache) { var UI = { tag: "", text: "", color: "", colorStyle: "", tagEpisode: !1, prediction: pre, aniCache: aniCache, elCache: elCache }, airing = pre.airing, episode = pre.episode; if (void 0 !== aniCache) { var timestamp = 1e3 * aniCache.nextEpTime; if (Date.now() < timestamp) { episode = aniCache.currentEp; var delta = (timestamp - Date.now()) / 1e3; pre.diffDays = Math.floor(delta / 86400), delta -= 86400 * pre.diffDays, pre.diffHours = Math.floor(delta / 3600) % 24, delta -= 3600 * pre.diffHours, pre.diffMinutes = Math.floor(delta / 60) % 60, delta -= 60 * pre.diffMinutes; } else Date.now() - timestamp < 864e5 && (episode = aniCache.currentEp + 1); } void 0 !== elCache && void 0 === elCache.error && (elCache.finished || (airing = !0), elCache.newestEp && "" !== elCache.newestEp && void 0 !== elCache.newestEp && (episode = elCache.newestEp, UI.color = "red")), "" !== UI.color && (UI.colorStyle = "background-color: #00ff0057;"), airing ? (pre.airing && (UI.text = api.storage.lang("prediction_Episode", [ pre.diffDays + "d " + pre.diffHours + "h " + pre.diffMinutes + "m" ])), episode && (UI.tag = '[' + episode + "]", UI.tagEpisode = episode)) : pre && (UI.text = '', UI.text += api.storage.lang("prediction_Airing", [ 7 * pre.diffWeeks + pre.diffDays + "d " + pre.diffHours + "h " + pre.diffMinutes + "m " ]), UI.text += ""), callback(UI); } })); })); })); } function timeDiffToText(delta) { var text = ""; delta /= 1e3; var diffDays = Math.floor(delta / 86400); delta -= 86400 * diffDays, diffDays && (text += diffDays + "d "); var diffHours = Math.floor(delta / 3600) % 24; delta -= 3600 * diffHours, diffHours && diffDays < 2 && (text += diffHours + "h "); var diffMinutes = Math.floor(delta / 60) % 60; return delta -= 60 * diffMinutes, diffMinutes && !diffDays && diffHours < 3 && (text += diffMinutes + "min "), text; } function canHideTabs() { return "undefined" != typeof browser && void 0 !== browser.tabs.hide; } function epPrediction(malId, callback) { return __awaiter(this, void 0, void 0, (function*() { if (api.settings.get("epPredictions")) { var timestamp = yield api.storage.get("mal/" + malId + "/release"); if (void 0 !== timestamp) { var airing = 1, episode = 0; if (Date.now() < timestamp && (airing = 0), airing) var delta = Math.abs(Date.now() - timestamp) / 1e3; else delta = Math.abs(timestamp - Date.now()) / 1e3; var diffWeeks = Math.floor(delta / 604800); delta -= 604800 * diffWeeks, airing && (delta = 604800 - delta); var diffDays = Math.floor(delta / 86400); delta -= 86400 * diffDays; var diffHours = Math.floor(delta / 3600) % 24; delta -= 3600 * diffHours; var diffMinutes = Math.floor(delta / 60) % 60; delta -= 60 * diffMinutes, airing && (episode = diffWeeks - ((new Date).getFullYear() - new Date(timestamp).getFullYear()), ++episode > 50 && (episode = 0)); var maxEp = yield api.storage.get("mal/" + malId + "/release"); if (void 0 === maxEp || episode < maxEp) return void callback({ timestamp: timestamp, airing: airing, diffWeeks: diffWeeks, diffDays: diffDays, diffHours: diffHours, diffMinutes: diffMinutes, episode: episode }); } callback(!1); } })); } function statusTag(status, type, id) { var info = { anime: { 1: { class: "watching", text: "CW", title: "Watching" }, 2: { class: "completed", text: "CMPL", title: "Completed" }, 3: { class: "on-hold", text: " HOLD", title: "On-Hold" }, 4: { class: "dropped", text: "DROP", title: "Dropped" }, 6: { class: "plantowatch", text: "PTW", title: "Plan to Watch" } }, manga: { 1: { class: "reading", text: "CR", title: "Reading" }, 2: { class: "completed", text: "CMPL", title: "Completed" }, 3: { class: "on-hold", text: " HOLD", title: "On-Hold" }, 4: { class: "dropped", text: "DROP", title: "Dropped" }, 6: { class: "plantoread", text: "PTR", title: "Plan to Read" } } }; if ($.each([ 1, 2, 3, 4, 6 ], (function(i, el) { info.anime[info.anime[el].title] = info.anime[el], info.manga[info.manga[el].title] = info.manga[el]; })), status) { var tempInfo = info[type][status]; return ` ${tempInfo.text}`; } return !1; } function notifications(url, title, message, iconUrl = "") { var messageObj = { type: "basic", title: title, message: message, iconUrl: iconUrl }; con.log("Notification", url, messageObj), api.storage.get("notificationHistory").then(history => { void 0 === history && (history = []), history.length >= 10 && history.shift(), history.push({ url: url, title: messageObj.title, message: messageObj.message, iconUrl: messageObj.iconUrl, timestamp: Date.now() }), api.storage.set("notificationHistory", history); }); try { return chrome.notifications.create(url, messageObj); } catch (e) { con.error(e); } } function timeCache(key, dataFunction, ttl) { return __awaiter(this, void 0, void 0, (function*() { return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, (function*() { var value = yield api.storage.get(key); if (void 0 !== value && (new Date).getTime() < value.timestamp) resolve(value.data); else { var result = yield dataFunction(); api.storage.set(key, { data: result, timestamp: (new Date).getTime() + ttl }).then(() => { resolve(result); }); } }))); })); } function flashm(text, options) { j.$("#flash-div-top").length || function() { api.storage.addStyle('.flashinfo{ transition: max-height 2s, opacity 2s 2s; } .mini-stealth .flashinfo{ opacity: 0; } #flashinfo-div.hover .flashinfo{ opacity: 1; } .flashinfo:hover{ max-height:5000px !important; z-index: 2147483647; opacity: 1; transition: max-height 2s; } .flashinfo .synopsis{ transition: max-height 2s, max-width 2s ease 2s; } .flashinfo:hover .synopsis{ max-height:9999px !important; max-width: 500px !important; transition: max-height 2s; } #flashinfo-div{ z-index: 2; transition: 2s; } #flashinfo-div:hover, #flashinfo-div.hover{ z-index: 2147483647; } #flash-div-top, #flash-div-bottom, #flashinfo-div{ font-family: "Helvetica","Arial",sans-serif; color: white; font-size: 14px; font-weight: 400; line-height: 17px; } #flash-div-top h2, #flash-div-bottom h2, #flashinfo-div h2{ font-family: "Helvetica","Arial",sans-serif; color: white; font-size: 14px; font-weight: 700; line-height: 17px; padding: 0; margin: 0; } #flash-div-top a, #flash-div-bottom a, #flashinfo-div a{ color: #DF6300; }'); var extraClass = ""; api.settings.get("floatButtonStealth") && (extraClass = "mini-stealth"); j.$("body").after('
'); }(), con.log("[Flash] Message:", text); var colorF = "#323232"; if (void 0 !== options && void 0 !== options.error && options.error) colorF = "#3e0808"; var flashdiv = "#flash-div-bottom"; void 0 !== options && void 0 !== options.position && options.position && (flashdiv = "#flash-div-" + options.position); var messClass = "flash"; if (void 0 !== options && void 0 !== options.type && options.type) { var tempClass = "type-" + options.type; j.$(flashdiv + " ." + tempClass + ", #flashinfo-div ." + tempClass).removeClass(tempClass).fadeOut({ duration: 1e3, queue: !1, complete: function() { j.$(this).remove(); } }), messClass += " " + tempClass; } var mess = '"; if (void 0 !== options && void 0 !== options.hoverInfo && options.hoverInfo) { mess = '", j.$("#flashinfo-div").addClass("hover"); var flashm = j.$(mess).appendTo("#flashinfo-div"); void 0 !== options && void 0 !== options.minimized && options.minimized && flashm.css("max-height", "8px"); } else flashm = j.$(mess).appendTo(flashdiv); return void 0 !== options && void 0 !== options.permanent && options.permanent ? flashm.slideDown(800) : void 0 !== options && void 0 !== options.hoverInfo && options.hoverInfo ? flashm.slideDown(800).delay(4e3).queue((function() { j.$("#flashinfo-div").removeClass("hover"), flashm.css("max-height", "8px"); })) : flashm.slideDown(800).delay(4e3).slideUp(800, () => { j.$(this).remove(); }), flashm; } function flashConfirm(message, type, yesCall = (() => {}), cancelCall = (() => {})) { return __awaiter(this, void 0, void 0, (function*() { return new Promise((function(resolve, reject) { var flasmessage = flashm(message = '
' + message + '
', { permanent: !0, position: "top", type: type }); flasmessage.find(".Yes").click((function(evt) { resolve(!0), j.$(evt.target).parentsUntil(".flash").fadeOut(300, (function() { j.$(this).remove(); })), yesCall(); })), flasmessage.find(".Cancel").click((function(evt) { resolve(!1), j.$(evt.target).parentsUntil(".flash").fadeOut(300, (function() { j.$(this).remove(); })), cancelCall(); })); })); })); } var lazyloaded = !1, lazyimages = new Array; function lazyload(doc, scrollElement = ".mdl-layout__content") { function loadImage(el, fn) { if (!j.$(el).is(":visible")) return !1; if (j.$(el).hasClass("lazyBack")) j.$(el).css("background-image", "url(" + el.getAttribute("data-src") + ")").removeClass("lazyBack"); else { var img = new Image, src = el.getAttribute("data-src"); img.onload = function() { el.parent ? el.parent.replaceChild(img, el) : el.src = src, fn && fn(); }, img.src = src; } } for (var i = 0; i < lazyimages.length; i++) $(lazyimages[i]).addClass("init"); lazyimages = new Array; var query = doc.find("img.lazy.init, .lazyBack.init"), processScroll = function() { for (var i = 0; i < lazyimages.length; i++) utils.elementInViewport(lazyimages[i], 600) && loadImage(lazyimages[i], (function() { lazyimages.splice(i, i); })), $(lazyimages[i]).length || lazyimages.splice(i, i); }; for (i = 0; i < query.length; i++) lazyimages.push(query[i]), $(query[i]).removeClass("init"); processScroll(), lazyloaded || (lazyloaded = !0, doc.find(scrollElement).scroll((function() { processScroll(); }))); } function elementInViewport(el, horizontalOffset = 0) { var rect = el.getBoundingClientRect(); return rect.top >= 0 && rect.left >= 0 && rect.top - horizontalOffset <= (window.innerHeight || document.documentElement.clientHeight); } }.call(this, __webpack_require__(3), __webpack_require__(0), __webpack_require__(1), __webpack_require__(2)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__), __webpack_require__.d(__webpack_exports__, "$", (function() { return $; })); var $ = jQuery; }, function(module, exports) { module.exports = function(useSourceMap) { var list = []; return list.toString = function() { return this.map((function(item) { var content = function(item, useSourceMap) { var content = item[1] || "", cssMapping = item[3]; if (!cssMapping) return content; if (useSourceMap && "function" == typeof btoa) { var sourceMapping = (sourceMap = cssMapping, "/*# sourceMappingURL=data:application/json;charset=utf-8;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + " */"), sourceURLs = cssMapping.sources.map((function(source) { return "/*# sourceURL=" + cssMapping.sourceRoot + source + " */"; })); return [ content ].concat(sourceURLs).concat([ sourceMapping ]).join("\n"); } var sourceMap; return [ content ].join("\n"); }(item, useSourceMap); return item[2] ? "@media " + item[2] + "{" + content + "}" : content; })).join(""); }, list.i = function(modules, mediaQuery) { "string" == typeof modules && (modules = [ [ null, modules, "" ] ]); for (var alreadyImportedModules = {}, i = 0; i < this.length; i++) { var id = this[i][0]; "number" == typeof id && (alreadyImportedModules[id] = !0); } for (i = 0; i < modules.length; i++) { var item = modules[i]; "number" == typeof item[0] && alreadyImportedModules[item[0]] || (mediaQuery && !item[2] ? item[2] = mediaQuery : mediaQuery && (item[2] = "(" + item[2] + ") and (" + mediaQuery + ")"), list.push(item)); } }, list; }; }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; var status, score, errorCode; __webpack_require__.d(__webpack_exports__, "b", (function() { return status; })), __webpack_require__.d(__webpack_exports__, "a", (function() { return errorCode; })), function(status) { status[status.NoState = 0] = "NoState", status[status.Watching = 1] = "Watching", status[status.Completed = 2] = "Completed", status[status.Onhold = 3] = "Onhold", status[status.Dropped = 4] = "Dropped", status[status.PlanToWatch = 6] = "PlanToWatch", status[status.All = 7] = "All", status[status.Rewatching = 23] = "Rewatching"; }(status || (status = {})), function(score) { score[score.NoScore = 0] = "NoScore", score[score.R1 = 1] = "R1", score[score.R2 = 2] = "R2", score[score.R3 = 3] = "R3", score[score.R4 = 4] = "R4", score[score.R5 = 5] = "R5", score[score.R6 = 6] = "R6", score[score.R7 = 7] = "R7", score[score.R8 = 8] = "R8", score[score.R9 = 9] = "R9", score[score.R10 = 10] = "R10"; }(score || (score = {})), function(errorCode) { errorCode[errorCode.UrlNotSuported = 901] = "UrlNotSuported", errorCode[errorCode.NotAutenticated = 902] = "NotAutenticated", errorCode[errorCode.ServerOffline = 903] = "ServerOffline", errorCode[errorCode.EntryNotFound = 904] = "EntryNotFound", errorCode[errorCode.GenericError = 905] = "GenericError"; }(errorCode || (errorCode = {})); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; function normalizeComponent(scriptExports, render, staticRenderFns, functionalTemplate, injectStyles, scopeId, moduleIdentifier, shadowMode) { var hook, options = "function" == typeof scriptExports ? scriptExports.options : scriptExports; if (render && (options.render = render, options.staticRenderFns = staticRenderFns, options._compiled = !0), functionalTemplate && (options.functional = !0), scopeId && (options._scopeId = "data-v-" + scopeId), moduleIdentifier ? (hook = function(context) { (context = context || this.$vnode && this.$vnode.ssrContext || this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) || "undefined" == typeof __VUE_SSR_CONTEXT__ || (context = __VUE_SSR_CONTEXT__), injectStyles && injectStyles.call(this, context), context && context._registeredComponents && context._registeredComponents.add(moduleIdentifier); }, options._ssrRegister = hook) : injectStyles && (hook = shadowMode ? function() { injectStyles.call(this, this.$root.$options.shadowRoot); } : injectStyles), hook) if (options.functional) { options._injectStyles = hook; var originalRender = options.render; options.render = function(h, context) { return hook.call(context), originalRender(h, context); }; } else { var existing = options.beforeCreate; options.beforeCreate = existing ? [].concat(existing, hook) : [ hook ]; } return { exports: scriptExports, options: options }; } __webpack_require__.d(__webpack_exports__, "a", (function() { return normalizeComponent; })); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(api, con) { __webpack_require__.d(__webpack_exports__, "f", (function() { return translateList; })), __webpack_require__.d(__webpack_exports__, "b", (function() { return getCacheKey; })), __webpack_require__.d(__webpack_exports__, "c", (function() { return getEpisode; })), __webpack_require__.d(__webpack_exports__, "e", (function() { return syncList; })), __webpack_require__.d(__webpack_exports__, "d", (function() { return getSingle; })), __webpack_require__.d(__webpack_exports__, "a", (function() { return call; })); var cacheList, __awaiter = function(thisArg, _arguments, P, generator) { return new (P || (P = Promise))((function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } function step(result) { var value; result.done ? resolve(result.value) : (value = result.value, value instanceof P ? value : new P((function(resolve) { resolve(value); }))).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); })); }, client_id = "39e8640b6f1a60aaf60f3f3313475e830517badab8048a4e52ff2d10deb2b9b0"; function translateList(simklStatus, malStatus = null) { var list = { watching: 1, plantowatch: 6, completed: 2, notinteresting: 4, hold: 3 }; return null != malStatus ? Object.keys(list).find(key => list[key] === malStatus) : list[simklStatus]; } function getCacheKey(id, simklId) { return isNaN(id) || !id ? "simkl:" + simklId : id; } function getEpisode(episode) { if ("number" == typeof episode) return episode; if (episode) { var temp = episode.match(/e\d+/i); if (null !== temp) { var episodePart = parseInt(temp[0].replace(/\D/, "")); return isNaN(episodePart) ? 0 : episodePart; } } return 0; } function syncList(lazy = !1) { return __awaiter(this, void 0, void 0, (function*() { if (void 0 === cacheList) cacheList = yield api.storage.get("simklList"); else if (lazy) return cacheList; var lastCheck = yield api.storage.get("simklLastCheck"), activity = yield this.call("https://api.simkl.com/sync/activities"); if (con.log("Activity", lastCheck, activity.anime), lastCheck && lastCheck.removed_from_list !== activity.anime.removed_from_list) { var checkRemoveList = yield this.call("https://api.simkl.com/sync/all-items/anime"), newCacheList = {}; if (checkRemoveList) for (var i = 0; i < checkRemoveList.anime.length; i++) { const el = checkRemoveList.anime[i]; null != cacheList[el.show.ids.simkl] && (newCacheList[el.show.ids.simkl] = cacheList[el.show.ids.simkl]); } cacheList = newCacheList, con.log("remove", cacheList); } var dateFrom = ""; if (lastCheck && cacheList && (dateFrom = "date_from=" + lastCheck.all, lastCheck.all === activity.anime.all)) return con.log("Up to date"), cacheList; if (cacheList || (cacheList = {}), lastCheck && lastCheck.rated_at !== activity.anime.rated_at) { var rated = yield this.call("https://api.simkl.com/sync/ratings/anime?" + dateFrom); if (con.log("ratedUpdate", rated), rated) for (i = 0; i < rated.anime.length; i++) { const el = rated.anime[i]; cacheList[el.show.ids.simkl] = el; } } var list = yield this.call("https://api.simkl.com/sync/all-items/anime?" + dateFrom); if (con.log("listUpdate", list), list) for (i = 0; i < list.anime.length; i++) { const el = list.anime[i]; cacheList[el.show.ids.simkl] = el; } return con.log("totalList", cacheList), yield api.storage.set("simklList", cacheList), yield api.storage.set("simklLastCheck", activity.anime), cacheList; })); } function getSingle(ids, lazy = !1) { return __awaiter(this, void 0, void 0, (function*() { var list = yield this.syncList(lazy); if (ids.simkl) { if (null != list[ids.simkl]) return list[ids.simkl]; } else { if (!ids.mal) throw "No id passed"; for (var listVal = Object.values(list), i = 0; i < listVal.length; i++) { var el = listVal[i]; if (void 0 !== el.show.ids.mal && el.show.ids.mal == ids.mal) return el; } } return null; })); } function call(url, sData = {}, asParameter = !1, methode = "GET", login = !0) { return __awaiter(this, void 0, void 0, (function*() { asParameter && (url += "?" + new URLSearchParams(Object.entries(sData))), con.log("call", methode, url, sData); var headers = { Authorization: "Bearer " + api.settings.get("simklToken"), "simkl-api-key": client_id, Accept: "application/vnd.api+json", "Content-Type": "application/json" }; return login || (con.log("No login"), delete headers.Authorization), api.request.xhr(methode, { url: url, headers: headers, data: sData }).then(response => __awaiter(this, void 0, void 0, (function*() { var res = this.jsonParse(response); return this.errorHandling(res, response.status), res; }))); })); } }).call(this, __webpack_require__(0), __webpack_require__(1)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.d(__webpack_exports__, "b", (function() { return pages; })), __webpack_require__.d(__webpack_exports__, "a", (function() { return pageSearch; })); var _Kissanime_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(87), _Kissmanga_main__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(88), _nineAnime_main__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(89), _Crunchyroll_main__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(90), _Mangadex_main__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(91), _Gogoanime_main__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(92), _Anime4you_main__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(93), _Branitube_main__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(94), _Turkanime_main__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(95), _Twistmoe_main__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(96), _Emby_main__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(97), _Plex_main__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(98), _Netflix_main__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(99), _animepahe_main__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(100), _Animeflv_main__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(101), _Jkanime_main__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(102), _Vrv_main__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(103), _Proxer_main__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(104), _Novelplanet_main__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(105), _fourAnime_main__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(106), _Dreamanimes_main__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(107), _animeultima_main__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(108), _Aniflix_main__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(109), _AnimeDaisuki_main__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(110), _Animefreak_main__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(111), _AnimePlanet_main__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(112), _KickAssAnime_main__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(113), _RiiE_main__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(114), _AnimeKisa_main__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(115), _Wakanim_main__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(116), _AnimeIndo_main__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(117), _Shinden_main__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(118), _Funimation_main__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(119), _Voiranime_main__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(120), _DubbedAnime_main__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(121), _VIZ_main__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(122), _MangaNelo_main__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(123), _Mangakakalot_main__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(124), _NekoSama_main__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(125), _AnimeZone_main__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(126), _AnimeOdcinki_main__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(127), _Animeflix_main__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(128), _AnimeFever_main__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(129), _serimanga_main__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(130), _mangadenizi_main__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(131), _moeclip_main__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(132), _mangalivre_main__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(133), _tmofans_main__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(134), _unionmangas_main__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(135), _myAnime_main__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(136), _MangaPlus_main__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(137), _JapScan_main__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(138), _MangaKisa_main__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(139), _Goyabu_main__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(140), _AnimesVision_main__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(141), _Hulu_main__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(142), _Aniwatch_main__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(143), _Hidive_main__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(144), _JaiminisBox_main__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(145), _FallenAngels_main__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(146), _animestrue_main__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(147), _PrimeVideo_main__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(148), _MangaKatana_main__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(149), _manga4life_main__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(150), _bato_main__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(151), _DreamSub_main__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(152), _MangaPark_main__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(153), _AnimesHouse_main__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(154); const pages = { Kissanime: _Kissanime_main__WEBPACK_IMPORTED_MODULE_0__.a, Kissmanga: _Kissmanga_main__WEBPACK_IMPORTED_MODULE_1__.a, nineAnime: _nineAnime_main__WEBPACK_IMPORTED_MODULE_2__.a, Crunchyroll: _Crunchyroll_main__WEBPACK_IMPORTED_MODULE_3__.a, Vrv: _Vrv_main__WEBPACK_IMPORTED_MODULE_16__.a, Mangadex: _Mangadex_main__WEBPACK_IMPORTED_MODULE_4__.a, Gogoanime: _Gogoanime_main__WEBPACK_IMPORTED_MODULE_5__.a, Twistmoe: _Twistmoe_main__WEBPACK_IMPORTED_MODULE_9__.a, Anime4you: _Anime4you_main__WEBPACK_IMPORTED_MODULE_6__.a, Branitube: _Branitube_main__WEBPACK_IMPORTED_MODULE_7__.a, Turkanime: _Turkanime_main__WEBPACK_IMPORTED_MODULE_8__.a, animepahe: _animepahe_main__WEBPACK_IMPORTED_MODULE_13__.a, Netflix: _Netflix_main__WEBPACK_IMPORTED_MODULE_12__.a, animeflv: _Animeflv_main__WEBPACK_IMPORTED_MODULE_14__.a, Jkanime: _Jkanime_main__WEBPACK_IMPORTED_MODULE_15__.a, Proxer: _Proxer_main__WEBPACK_IMPORTED_MODULE_17__.a, Wakanim: _Wakanim_main__WEBPACK_IMPORTED_MODULE_29__.a, Emby: _Emby_main__WEBPACK_IMPORTED_MODULE_10__.a, Plex: _Plex_main__WEBPACK_IMPORTED_MODULE_11__.a, Novelplanet: _Novelplanet_main__WEBPACK_IMPORTED_MODULE_18__.a, fourAnime: _fourAnime_main__WEBPACK_IMPORTED_MODULE_19__.a, Dreamanimes: _Dreamanimes_main__WEBPACK_IMPORTED_MODULE_20__.a, animeultima: _animeultima_main__WEBPACK_IMPORTED_MODULE_21__.a, Aniflix: _Aniflix_main__WEBPACK_IMPORTED_MODULE_22__.a, Animefreak: _Animefreak_main__WEBPACK_IMPORTED_MODULE_24__.a, AnimeDaisuki: _AnimeDaisuki_main__WEBPACK_IMPORTED_MODULE_23__.a, AnimePlanet: _AnimePlanet_main__WEBPACK_IMPORTED_MODULE_25__.a, KickAssAnime: _KickAssAnime_main__WEBPACK_IMPORTED_MODULE_26__.a, RiiE: _RiiE_main__WEBPACK_IMPORTED_MODULE_27__.a, AnimeKisa: _AnimeKisa_main__WEBPACK_IMPORTED_MODULE_28__.a, AnimeIndo: _AnimeIndo_main__WEBPACK_IMPORTED_MODULE_30__.a, Shinden: _Shinden_main__WEBPACK_IMPORTED_MODULE_31__.a, Funimation: _Funimation_main__WEBPACK_IMPORTED_MODULE_32__.a, Voiranime: _Voiranime_main__WEBPACK_IMPORTED_MODULE_33__.a, DubbedAnime: _DubbedAnime_main__WEBPACK_IMPORTED_MODULE_34__.a, MangaNelo: _MangaNelo_main__WEBPACK_IMPORTED_MODULE_36__.a, Mangakakalot: _Mangakakalot_main__WEBPACK_IMPORTED_MODULE_37__.a, VIZ: _VIZ_main__WEBPACK_IMPORTED_MODULE_35__.a, NekoSama: _NekoSama_main__WEBPACK_IMPORTED_MODULE_38__.a, AnimeOdcinki: _AnimeOdcinki_main__WEBPACK_IMPORTED_MODULE_40__.a, AnimeZone: _AnimeZone_main__WEBPACK_IMPORTED_MODULE_39__.a, Animeflix: _Animeflix_main__WEBPACK_IMPORTED_MODULE_41__.a, AnimeFever: _AnimeFever_main__WEBPACK_IMPORTED_MODULE_42__.a, serimanga: _serimanga_main__WEBPACK_IMPORTED_MODULE_43__.a, mangadenizi: _mangadenizi_main__WEBPACK_IMPORTED_MODULE_44__.a, moeclip: _moeclip_main__WEBPACK_IMPORTED_MODULE_45__.a, mangalivre: _mangalivre_main__WEBPACK_IMPORTED_MODULE_46__.a, tmofans: _tmofans_main__WEBPACK_IMPORTED_MODULE_47__.a, unionmangas: _unionmangas_main__WEBPACK_IMPORTED_MODULE_48__.a, myAnime: _myAnime_main__WEBPACK_IMPORTED_MODULE_49__.a, MangaPlus: _MangaPlus_main__WEBPACK_IMPORTED_MODULE_50__.a, JapScan: _JapScan_main__WEBPACK_IMPORTED_MODULE_51__.a, MangaKisa: _MangaKisa_main__WEBPACK_IMPORTED_MODULE_52__.a, Goyabu: _Goyabu_main__WEBPACK_IMPORTED_MODULE_53__.a, AnimesVision: _AnimesVision_main__WEBPACK_IMPORTED_MODULE_54__.a, Hulu: _Hulu_main__WEBPACK_IMPORTED_MODULE_55__.a, Aniwatch: _Aniwatch_main__WEBPACK_IMPORTED_MODULE_56__.a, Hidive: _Hidive_main__WEBPACK_IMPORTED_MODULE_57__.a, JaiminisBox: _JaiminisBox_main__WEBPACK_IMPORTED_MODULE_58__.a, FallenAngels: _FallenAngels_main__WEBPACK_IMPORTED_MODULE_59__.a, animestrue: _animestrue_main__WEBPACK_IMPORTED_MODULE_60__.a, PrimeVideo: _PrimeVideo_main__WEBPACK_IMPORTED_MODULE_61__.a, MangaKatana: _MangaKatana_main__WEBPACK_IMPORTED_MODULE_62__.a, manga4life: _manga4life_main__WEBPACK_IMPORTED_MODULE_63__.a, bato: _bato_main__WEBPACK_IMPORTED_MODULE_64__.a, DreamSub: _DreamSub_main__WEBPACK_IMPORTED_MODULE_65__.a, MangaPark: _MangaPark_main__WEBPACK_IMPORTED_MODULE_66__.a, AnimesHouse: _AnimesHouse_main__WEBPACK_IMPORTED_MODULE_67__.a }, pageSearch = { Crunchyroll: { name: "Crunchyroll", type: "anime", domain: "www.crunchyroll.com", searchUrl: titleEncoded => "http://www.crunchyroll.com/search?q=" + titleEncoded }, Netflix: { name: "Netflix", type: "anime", domain: "www.netflix.com", searchUrl: titleEncoded => "https://www.netflix.com/search?q=" + titleEncoded }, nineAnime: { name: "9Anime", type: "anime", domain: "9anime.to", searchUrl: titleEncoded => "https://www1.9anime.to/search?keyword=" + titleEncoded }, Kissanime: { name: "Kissanime", type: "anime", domain: "kissanime.ru", searchUrl: titleEncoded => "https://kissanime.ru/Search/Anime?keyword=" + titleEncoded }, Gogoanime: { name: "Gogoanime", type: "anime", domain: "www.gogoanime.in", searchUrl: titleEncoded => "http://gogoanimes.co/search.html?keyword=" + titleEncoded }, Turkanime: { name: "Turkanime", type: "anime", domain: "www.turkanime.tv/", searchUrl: titleEncoded => "https://www.google.com/search?q=" + titleEncoded + "+site:turkanime.tv/anime/ OR site:turkanime.net/anime/" }, animeflv: { name: "animeflv", type: "anime", domain: "animeflv.net", searchUrl: titleEncoded => "https://animeflv.net/browse?q=" + titleEncoded }, Jkanime: { name: "Jkanime", type: "anime", domain: "jkanime.net", searchUrl: titleEncoded => "https://jkanime.net/buscar/" + titleEncoded + "/1/" }, Mangadex: { name: "Mangadex", type: "manga", domain: "mangadex.org", searchUrl: titleEncoded => "https://mangadex.org/quick_search/" + titleEncoded }, Kissmanga: { name: "Kissmanga", type: "manga", domain: "kissmanga.com", searchUrl: titleEncoded => "https://kissmanga.com/Search/Manga?keyword=" + titleEncoded }, Novelplanet: { name: "Novelplanet", type: "manga", domain: "novelplanet.com", searchUrl: titleEncoded => "https://novelplanet.com/NovelList?name=" + titleEncoded }, Proxeranime: { name: "Proxer", type: "anime", domain: "proxer.me", searchUrl: titleEncoded => "https://proxer.me/search?s=search&name=" + titleEncoded + "&typ=all-anime&tags=¬ags=#top" }, Animeflix: { name: "Animeflix", type: "anime", domain: "animeflix.io", searchUrl: titleEncoded => "https://www.google.com/search?q=" + titleEncoded + "+site:animeflix.io/shows/" }, Proxermanga: { name: "Proxer", type: "manga", domain: "proxer.me", searchUrl: titleEncoded => "https://proxer.me/search?s=search&name=" + titleEncoded + "&typ=all-manga&tags=¬ags=#top" }, MangaUpdates: { name: "Mangaupdates", type: "manga", domain: "mangaupdates.com", searchUrl: titleEncoded => "https://www.mangaupdates.com/series.html?search=" + titleEncoded }, Novelupdates: { name: "Novel Updates [No Sync]", type: "manga", domain: "www.novelupdates.com", searchUrl: titleEncoded => "https://www.novelupdates.com/?s=" + titleEncoded }, Doujinshi: { name: "Doujinshi", type: "manga", domain: "www.doujinshi.org", searchUrl: titleEncoded => "https://www.doujinshi.org/search/simple/?T=objects&sn=" + titleEncoded }, AniDb: { name: "aniDB", type: "anime", domain: "anidb.net", searchUrl: titleEncoded => "https://anidb.net/anime/?do.search=1&adb.search=" + titleEncoded }, AniList: { name: "AniList", type: "anime", domain: "anilist.co", searchUrl: titleEncoded => "https://anilist.co/search/anime?sort=SEARCH_MATCH&search=" + titleEncoded }, AniListManga: { name: "AniList", type: "manga", domain: "anilist.co", searchUrl: titleEncoded => "https://anilist.co/search/manga?sort=SEARCH_MATCH&search=" + titleEncoded }, Kitsu: { name: "Kitsu", type: "anime", domain: "kitsu.io", searchUrl: titleEncoded => "https://kitsu.io/anime?text=" + titleEncoded }, KitsuManga: { name: "Kitsu", type: "manga", domain: "kitsu.io", searchUrl: titleEncoded => "https://kitsu.io/manga?text=" + titleEncoded }, SimklAnime: { name: "Simkl", type: "anime", domain: "simkl.com", searchUrl: titleEncoded => "https://simkl.com/search/?type=anime&q=" + titleEncoded }, MALManga: { name: "MyAnimeList", type: "manga", domain: "myanimelist.net", searchUrl: titleEncoded => "https://myanimelist.net/manga.php?q=" + titleEncoded }, MALAnime: { name: "MyAnimeList", type: "anime", domain: "myanimelist.net", searchUrl: titleEncoded => "https://myanimelist.net/anime.php?q=" + titleEncoded }, LiveChart: { name: "LiveChart", type: "anime", domain: "livechart.me", searchUrl: titleEncoded => "https://www.livechart.me/search?q=" + titleEncoded }, AnimeNewsNetwork: { name: "AnimeNewsNetwork", type: "anime", domain: "animenewsnetwork.com", searchUrl: titleEncoded => "https://www.animenewsnetwork.com/encyclopedia/search/name?only=anime&q=" + titleEncoded }, AnimeNewsNetworkManga: { name: "AnimeNewsNetwork", type: "manga", domain: "animenewsnetwork.com", searchUrl: titleEncoded => "https://www.animenewsnetwork.com/encyclopedia/search/name?only=manga&q=" + titleEncoded }, AnimePlanetAnime: { name: "Anime-Planet", type: "anime", domain: "anime-planet.com", searchUrl: titleEncoded => "https://www.anime-planet.com/search.php?search_type=anime&search=" + titleEncoded }, AnimePlanetManga: { name: "Anime-Planet", type: "manga", domain: "anime-planet.com", searchUrl: titleEncoded => "https://www.anime-planet.com/search.php?search_type=manga&search=" + titleEncoded }, AniSeachAnime: { name: "AniSearch", type: "anime", domain: "anisearch.com", searchUrl: titleEncoded => "https://www.anisearch.com/anime/index?text=" + titleEncoded }, AniSeachManga: { name: "AniSearch", type: "manga", domain: "anisearch.com", searchUrl: titleEncoded => "https://www.anisearch.com/manga/index?text=" + titleEncoded }, Hidive: { name: "Hidive", type: "anime", domain: "www.hidive.com", searchUrl: titleEncoded => "http://www.hidive.com/search?q=" + titleEncoded }, ShikimoriAnime: { name: "Shikimori", type: "anime", domain: "shikimori.org", searchUrl: titleEncoded => "https://shikimori.org/animes?search=" + titleEncoded }, ShikimoriManga: { name: "Shikimori", type: "manga", domain: "shikimori.org", searchUrl: titleEncoded => "https://shikimori.org/mangas?search=" + titleEncoded }, Notify: { name: "Notify", type: "anime", domain: "notify.moe", searchUrl: titleEncoded => "https://notify.moe/search/" + titleEncoded }, Annict: { name: "Annict", type: "anime", domain: "annict.com", searchUrl: titleEncoded => "https://annict.com/search?q=" + titleEncoded }, Trakt: { name: "Trakt", type: "anime", domain: "trakt.tv", searchUrl: titleEncoded => "https://trakt.tv/search?query=" + titleEncoded } }; }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(api) { function translateList(aniStatus, malStatus = null) { var list = { current: 1, planned: 6, completed: 2, dropped: 4, on_hold: 3 }; return null != malStatus ? Object.keys(list).find(key => list[key] === malStatus) : list[aniStatus]; } function getTitle(titles, canonicalTitle) { switch (api.settings.get("kitsuOptions").titleLanguagePreference) { case "english": var title = titles.en; break; case "romanized": title = titles.en_jp; break; case "canonical": default: title = canonicalTitle; } if (void 0 !== title && title || (title = titles.en), void 0 !== title && title || (title = titles.en_jp), void 0 !== title && title || (title = titles.ja_jp), void 0 === title || !title) { var keys = Object.keys(titles); if (!keys.length) return "No Title"; title = titles[keys[0]]; } return title; } function getCacheKey(id, kitsuId) { return isNaN(id) || !id ? "kitsu:" + kitsuId : id; } __webpack_require__.d(__webpack_exports__, "c", (function() { return translateList; })), __webpack_require__.d(__webpack_exports__, "b", (function() { return getTitle; })), __webpack_require__.d(__webpack_exports__, "a", (function() { return getCacheKey; })); }).call(this, __webpack_require__(0)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(api, con) { function translateList(aniStatus, malStatus = null) { var list = { CURRENT: 1, PLANNING: 6, COMPLETED: 2, DROPPED: 4, PAUSED: 3, REPEATING: 1 }; return null != malStatus ? Object.keys(list).find(key => list[key] === malStatus) : list[aniStatus]; } var statusTranslate; function getCacheKey(id, kitsuId) { return isNaN(id) || !id ? "anilist:" + kitsuId : id; } __webpack_require__.d(__webpack_exports__, "c", (function() { return translateList; })), __webpack_require__.d(__webpack_exports__, "b", (function() { return statusTranslate; })), __webpack_require__.d(__webpack_exports__, "a", (function() { return getCacheKey; })), function(statusTranslate) { statusTranslate[statusTranslate.CURRENT = 1] = "CURRENT", statusTranslate[statusTranslate.PLANNING = 6] = "PLANNING", statusTranslate[statusTranslate.COMPLETED = 2] = "COMPLETED", statusTranslate[statusTranslate.DROPPED = 4] = "DROPPED", statusTranslate[statusTranslate.PAUSED = 3] = "PAUSED", statusTranslate[statusTranslate.REPEATING = 23] = "REPEATING"; }(statusTranslate || (statusTranslate = {})); }).call(this, __webpack_require__(0), __webpack_require__(1)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(con, api) { __webpack_require__.d(__webpack_exports__, "b", (function() { return generateSync; })), __webpack_require__.d(__webpack_exports__, "e", (function() { return getType; })), __webpack_require__.d(__webpack_exports__, "g", (function() { return syncList; })), __webpack_require__.d(__webpack_exports__, "f", (function() { return retriveLists; })), __webpack_require__.d(__webpack_exports__, "d", (function() { return getListProvider; })), __webpack_require__.d(__webpack_exports__, "c", (function() { return getList; })), __webpack_require__.d(__webpack_exports__, "a", (function() { return background; })); var _provider_MyAnimeList_single__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(19), _provider_AniList_single__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(24), _provider_Kitsu_single__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(25), _provider_Simkl_single__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(26), _provider_MyAnimeList_list__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27), _provider_AniList_list__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(28), _provider_Kitsu_list__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(29), _provider_Simkl_list__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(20), __awaiter = function(thisArg, _arguments, P, generator) { return new (P || (P = Promise))((function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } function step(result) { var value; result.done ? resolve(result.value) : (value = result.value, value instanceof P ? value : new P((function(resolve) { resolve(value); }))).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); })); }; function generateSync(masterList, slaveLists, mode, typeArray, list, missing) { for (var i in mapToArray(masterList, list, !0), slaveLists) mapToArray(slaveLists[i], list, !1); for (var i in list) changeCheck(list[i], mode), missingCheck(list[i], missing, typeArray, mode); } function getType(url) { if (-1 !== url.indexOf("anilist.co")) return "ANILIST"; if (-1 !== url.indexOf("kitsu.io")) return "KITSU"; if (-1 !== url.indexOf("myanimelist.net")) return "MAL"; if (-1 !== url.indexOf("simkl.com")) return "SIMKL"; throw "Type not found"; } function mapToArray(provierList, resultList, masterM = !1) { for (var i = 0; i < provierList.length; i++) { var el = provierList[i], temp = resultList[el.malId]; void 0 === temp && (temp = { diff: !1, master: {}, slaves: [] }), masterM ? temp.master = el : (el.diff = {}, temp.slaves.push(el)), !isNaN(el.malId) && el.malId && (resultList[el.malId] = temp); } } function changeCheck(item, mode) { if (item.master && item.master.uid) for (var i = 0; i < item.slaves.length; i++) { var slave = item.slaves[i]; slave.watchedEp !== item.master.watchedEp && (2 == item.master.status ? slave.watchedEp !== slave.totalEp && (item.diff = !0, slave.diff.watchedEp = slave.totalEp) : (item.diff = !0, slave.diff.watchedEp = item.master.watchedEp)), slave.status !== item.master.status && (item.diff = !0, slave.diff.status = item.master.status), slave.score !== item.master.score && (item.diff = !0, slave.diff.score = item.master.score); } } function missingCheck(item, missing, types, mode) { if (item.master && item.master.uid) { var tempTypes = []; tempTypes.push(getType(item.master.url)); for (var i = 0; i < item.slaves.length; i++) { var slave = item.slaves[i]; tempTypes.push(getType(slave.url)); } for (var t in types) { var type = types[t]; tempTypes.includes(type) || missing.push({ title: item.master.title, syncType: type, malId: item.master.malId, watchedEp: item.master.watchedEp, score: item.master.score, status: item.master.status, url: "https://myanimelist.net/" + item.master.type + "/" + item.master.malId, error: null }); } } } function syncList(list, thisMissing) { return __awaiter(this, void 0, void 0, (function*() { for (var i in list) { var el = list[i]; if (el.diff) try { yield syncListItem(el), el.diff = !1; } catch (e) { con.error(e); } } var missing = thisMissing.slice(); for (var i in missing) { var miss = missing[i]; con.log("Sync missing", miss), yield syncMissing(miss).then(() => { thisMissing.splice(thisMissing.indexOf(miss), 1); }).catch(e => { con.error("Error", e), miss.error = e; }); } })); } function syncListItem(item) { return __awaiter(this, void 0, void 0, (function*() { for (var i = 0; i < item.slaves.length; i++) { var slave = item.slaves[i]; con.log("sync list item", slave), yield syncItem(slave, getType(slave.url)); } })); } function syncMissing(item) { return __awaiter(this, void 0, void 0, (function*() { return item.diff = { watchedEp: item.watchedEp, status: item.status, score: item.score }, syncItem(item, item.syncType); })); } function syncItem(slave, pageType) { if (0 !== Object.keys(slave.diff).length) { if ("MAL" == pageType) var singleClass = new _provider_MyAnimeList_single__WEBPACK_IMPORTED_MODULE_0__.a(slave.url); else if ("ANILIST" == pageType) singleClass = new _provider_AniList_single__WEBPACK_IMPORTED_MODULE_1__.a(slave.url); else if ("KITSU" == pageType) singleClass = new _provider_Kitsu_single__WEBPACK_IMPORTED_MODULE_2__.a(slave.url); else { if ("SIMKL" != pageType) throw "No sync type"; singleClass = new _provider_Simkl_single__WEBPACK_IMPORTED_MODULE_3__.a(slave.url); } return singleClass.update().then(() => (void 0 !== slave.diff.watchedEp && singleClass.setEpisode(slave.diff.watchedEp), void 0 !== slave.diff.status && singleClass.setStatus(slave.diff.status), void 0 !== slave.diff.score && singleClass.setScore(slave.diff.score), singleClass.sync())); } } function retriveLists(providerList, type, apiTemp, getListF) { return __awaiter(this, void 0, void 0, (function*() { var typeArray = [], masterMode = apiTemp.settings.get("syncMode"), listP = []; providerList.forEach(pi => { pi.providerSettings.text = "Loading", listP.push(getListF(pi.listProvider, type).then(list => { pi.providerSettings.list = list, pi.providerSettings.text = "Done", masterMode == pi.providerType && (pi.providerSettings.master = !0), typeArray.push(pi.providerType); }).catch(e => { pi.providerSettings.text = e; })); }), yield Promise.all(listP); var master = !1, slaves = []; return providerList.forEach((function(pi) { pi.providerSettings.master ? master = pi.providerSettings.list : null !== pi.providerSettings.list && slaves.push(pi.providerSettings.list); })), { master: master, slaves: slaves, typeArray: typeArray }; })); } function getListProvider(providerSettingList) { return [ { providerType: "MAL", providerSettings: providerSettingList.mal, listProvider: _provider_MyAnimeList_list__WEBPACK_IMPORTED_MODULE_4__.a }, { providerType: "ANILIST", providerSettings: providerSettingList.anilist, listProvider: _provider_AniList_list__WEBPACK_IMPORTED_MODULE_5__.a }, { providerType: "KITSU", providerSettings: providerSettingList.kitsu, listProvider: _provider_Kitsu_list__WEBPACK_IMPORTED_MODULE_6__.a }, { providerType: "SIMKL", providerSettings: providerSettingList.simkl, listProvider: _provider_Simkl_list__WEBPACK_IMPORTED_MODULE_7__.a } ]; } function getList(prov, type) { var listProvider = new prov(7, type); return listProvider.get().then(list => list).catch(e => { throw con.error(e), listProvider.errorMessage(e); }); } var background = { isEnabled: function() { return __awaiter(this, void 0, void 0, (function*() { return api.storage.get("backgroundListSync").then((function(state) { return __awaiter(this, void 0, void 0, (function*() { return con.info("background list sync state", state), !(!state || state.mode !== (yield api.settings.getAsync("syncMode"))) || (background.disable(), !1); })); })); })); }, enable: function() { return __awaiter(this, void 0, void 0, (function*() { return api.storage.set("backgroundListSync", { mode: yield api.settings.getAsync("syncMode") }); })); }, disable: function() { return api.storage.remove("backgroundListSync"); }, sync: function() { return __awaiter(this, void 0, void 0, (function*() { if (yield background.isEnabled()) return con.log("Start Background list Sync"), syncLists("anime").then(() => syncLists("manga")); function syncLists(type) { return __awaiter(this, void 0, void 0, (function*() { var list = {}, missing = [], providerList = getListProvider({ mal: { text: "Init", list: null, master: !1 }, anilist: { text: "Init", list: null, master: !1 }, kitsu: { text: "Init", list: null, master: !1 }, simkl: { text: "Init", list: null, master: !1 } }), listOptions = yield retriveLists(providerList, type, api, getList); generateSync(listOptions.master, listOptions.slaves, "mirror", listOptions.typeArray, list, missing), con.log("Start syncing", list, missing), syncList(list, missing); })); } con.error("Background list Sync not allowed"); })); } }; }).call(this, __webpack_require__(1), __webpack_require__(0)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(con, utils, api, j) { __webpack_require__.d(__webpack_exports__, "a", (function() { return SingleAbstract; })); var _definitions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5), __awaiter = function(thisArg, _arguments, P, generator) { return new (P || (P = Promise))((function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } function step(result) { var value; result.done ? resolve(result.value) : (value = result.value, value instanceof P ? value : new P((function(resolve) { resolve(value); }))).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); })); }; class SingleAbstract { constructor(url) { return this.url = url, this.type = null, this.rewatchingSupport = !0, this.ids = { mal: NaN, ani: NaN, kitsu: { id: NaN, slug: "" }, simkl: NaN }, this._onList = !1, this._authenticated = !1, this.handleUrl(url), this; } getType() { return this.type; } getUrl() { return this.url; } supportsRewatching() { return this.rewatchingSupport; } setStatus(status) { return this._setStatus(status), this; } getStatus() { return this.isOnList() ? this._getStatus() : _definitions__WEBPACK_IMPORTED_MODULE_0__.b.NoState; } setScore(score) { return (score = parseInt(score + "")) || (score = 0), this._setScore(score), this; } getScore() { var score = this._getScore(); return score || 0; } setEpisode(episode) { return episode = parseInt(episode + ""), this.getTotalEpisodes() && episode > this.getTotalEpisodes() && (episode = this.getTotalEpisodes()), this._setEpisode(episode), this; } getEpisode() { return this._getEpisode(); } setVolume(volume) { return this._setVolume(volume), this; } getVolume() { return this._getVolume(); } setStreamingUrl(streamingUrl) { return this._setStreamingUrl(streamingUrl), this; } getStreamingUrl() { return this._getStreamingUrl(); } update() { return con.log("[SINGLE]", "Update info", this.ids), this.lastError = null, this._update().catch(e => { throw this.lastError = e, e; }).then(() => { this.persistanceState = this.getStateEl(); }); } sync() { return con.log("[SINGLE]", "Sync", this.ids), this.lastError = null, this._sync().catch(e => { throw this.lastError = e, e; }).then(() => { this.undoState = this.persistanceState; }); } undo() { if (con.log("[SINGLE]", "Undo", this.undoState), !this.undoState) throw new Error("No undo state found"); return this.setStateEl(this.undoState), this.sync().then(() => { this.undoState = null; }); } getTitle() { return this._getTitle(); } getTotalEpisodes() { var eps = this._getTotalEpisodes(); return eps || (eps = 0), eps; } getTotalVolumes() { return this._getTotalVolumes(); } isOnList() { return this._onList; } isAuthenticated() { return this._authenticated; } getDisplayUrl() { return this._getDisplayUrl(); } getMalUrl() { return isNaN(this.ids.mal) ? null : "https://myanimelist.net/" + this.getType() + "/" + this.ids.mal + "/" + encodeURIComponent(this.getTitle().replace(/\//, "_")); } getMalId() { return isNaN(this.ids.mal) ? null : this.ids.mal; } getIds() { return this.ids; } getImage() { return this._getImage(); } getRating() { return this._getRating().then(rating => rating || "N/A"); } setResumeWaching(url, ep) { return utils.setResumeWaching(url, ep, this.type, this.getCacheKey()); } getResumeWaching() { return utils.getResumeWaching(this.type, this.getCacheKey()); } setContinueWaching(url, ep) { return utils.setContinueWaching(url, ep, this.type, this.getCacheKey()); } getContinueWaching() { return utils.getContinueWaching(this.type, this.getCacheKey()); } getStateEl() { return { episode: this.getEpisode(), volume: this.getVolume(), status: this.getStatus(), score: this.getScore() }; } setStateEl(state) { this.setEpisode(state.episode), this.setVolume(state.volume), this.setStatus(state.status), this.setScore(state.score); } getStateDiff() { var persistance = this.getStateEl(); if (persistance && this.undoState) { var diff = {}; for (var key in persistance) persistance[key] !== this.undoState[key] && (diff[key] = persistance[key]); return diff; } } checkSync(episode, volume, isNovel = !1) { return __awaiter(this, void 0, void 0, (function*() { var curEpisode = this.getEpisode(), curStatus = this.getStatus(), curVolume = this.getVolume(); return curStatus === _definitions__WEBPACK_IMPORTED_MODULE_0__.b.Completed ? 1 === episode && this.startRewatchingMessage() : !(curEpisode >= episode && !(isNovel && void 0 !== volume && volume > curVolume)) && (episode && episode === this.getTotalEpisodes() ? (curStatus === _definitions__WEBPACK_IMPORTED_MODULE_0__.b.Rewatching ? yield this.finishRewatchingMessage() : yield this.finishWatchingMessage(), !0) : curStatus === _definitions__WEBPACK_IMPORTED_MODULE_0__.b.Watching || curStatus === _definitions__WEBPACK_IMPORTED_MODULE_0__.b.Rewatching || this.startWatchingMessage()); })); } startWatchingMessage() { return __awaiter(this, void 0, void 0, (function*() { return utils.flashConfirm(api.storage.lang("syncPage_flashConfirm_start_" + this.getType()), "add").then(res => (res && this.setStatus(_definitions__WEBPACK_IMPORTED_MODULE_0__.b.Watching), res)); })); } finishWatchingMessage() { return __awaiter(this, void 0, void 0, (function*() { var currentScore = this.getScoreCheckboxValue(), checkHtml = '
", utils.flashConfirm(api.storage.lang("syncPage_flashConfirm_complete") + checkHtml, "complete").then(res => (res && (this.setStatus(_definitions__WEBPACK_IMPORTED_MODULE_0__.b.Completed), void 0 !== j.$("#finish_score").val() && j.$("#finish_score").val() > 0 && (con.log("finish_score: " + j.$("#finish_score :selected").val()), this.handleScoreCheckbox(j.$("#finish_score :selected").val()))), res)); })); } startRewatchingMessage() { return __awaiter(this, void 0, void 0, (function*() { return utils.flashConfirm(api.storage.lang("syncPage_flashConfirm_rewatch_start_" + this.getType()), "add").then(res => (res && this.setStatus(_definitions__WEBPACK_IMPORTED_MODULE_0__.b.Rewatching), res)); })); } finishRewatchingMessage() { return __awaiter(this, void 0, void 0, (function*() { return utils.flashConfirm(api.storage.lang("syncPage_flashConfirm_rewatch_finish_" + this.getType()), "complete").then(res => (res && this.setStatus(_definitions__WEBPACK_IMPORTED_MODULE_0__.b.Completed), res)); })); } getScoreCheckbox() { return [ { value: "0", label: api.storage.lang("UI_Score_Not_Rated") }, { value: "10", label: api.storage.lang("UI_Score_Masterpiece") }, { value: "9", label: api.storage.lang("UI_Score_Great") }, { value: "8", label: api.storage.lang("UI_Score_VeryGood") }, { value: "7", label: api.storage.lang("UI_Score_Good") }, { value: "6", label: api.storage.lang("UI_Score_Fine") }, { value: "5", label: api.storage.lang("UI_Score_Average") }, { value: "4", label: api.storage.lang("UI_Score_Bad") }, { value: "3", label: api.storage.lang("UI_Score_VeryBad") }, { value: "2", label: api.storage.lang("UI_Score_Horrible") }, { value: "1", label: api.storage.lang("UI_Score_Appalling") } ]; } getScoreCheckboxValue() { return this.getScore(); } handleScoreCheckbox(value) { this.setScore(value); } getDisplayScoreCheckbox() { var curScore = this.getScoreCheckboxValue(), labelEl = this.getScoreCheckbox().filter(el => el.value == curScore); return labelEl.length ? labelEl[0].label : ""; } getStatusCheckbox() { var statusEs = [ { value: "1", label: api.storage.lang("UI_Status_watching_" + this.getType()) }, { value: "2", label: api.storage.lang("UI_Status_Completed") }, { value: "3", label: api.storage.lang("UI_Status_OnHold") }, { value: "4", label: api.storage.lang("UI_Status_Dropped") }, { value: "6", label: api.storage.lang("UI_Status_planTo_" + this.getType()) } ]; return this.rewatchingSupport && statusEs.push({ value: "23", label: api.storage.lang("UI_Status_Rewatching_" + this.getType()) }), statusEs; } handleStatusCheckbox(value) { this.setStatus(value); } getStatusCheckboxValue() { return this.getStatus(); } getLastError() { return this.lastError; } getLastErrorMessage() { return this.errorMessage(this.getLastError()); } errorObj(code, message) { return { code: code, message: message }; } flashmError(error) { utils.flashm(this.errorMessage(error), { error: !0, type: "error" }); } errorMessage(error) { if (void 0 === error.code) return error; switch (error.code) { case _definitions__WEBPACK_IMPORTED_MODULE_0__.a.NotAutenticated: return api.storage.lang("Error_Authenticate", [ this.authenticationUrl ]); case _definitions__WEBPACK_IMPORTED_MODULE_0__.a.ServerOffline: return `[${this.shortName}] Server Offline`; case _definitions__WEBPACK_IMPORTED_MODULE_0__.a.UrlNotSuported: return "Incorrect url provided"; case _definitions__WEBPACK_IMPORTED_MODULE_0__.a.EntryNotFound: return "Entry for this " + this.getType() + " could not be found on " + this.shortName; default: return error.message; } } } }).call(this, __webpack_require__(1), __webpack_require__(2), __webpack_require__(0), __webpack_require__(3)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(api, utils) { __webpack_require__.d(__webpack_exports__, "a", (function() { return ListAbstract; })); var _utils_epPrediction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(77), _utils_Cache__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(78), __awaiter = function(thisArg, _arguments, P, generator) { return new (P || (P = Promise))((function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } function step(result) { var value; result.done ? resolve(result.value) : (value = result.value, value instanceof P ? value : new P((function(resolve) { resolve(value); }))).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); })); }; class ListAbstract { constructor(status = 1, listType = "anime", callbacks = {}, username = null, offset = 0, templist = []) { return this.status = status, this.listType = listType, this.callbacks = callbacks, this.username = username, this.offset = offset, this.templist = templist, this.done = !1, this.modes = { sortAiring: !1, cached: !1 }, this.api = api, this.cacheObj = void 0, this; } setTemplist(list) { return this.templist = list, this; } isDone() { return this.done; } get() { return __awaiter(this, void 0, void 0, (function*() { var retList = []; do { if (retList = yield this.getPart(), void 0 !== this.callbacks.singleCallback) { retList.length || this.callbacks.singleCallback(!1, 0, 0); for (var i = 0; i < retList.length; i++) this.callbacks.singleCallback(retList[i]); } this.templist = this.templist.concat(retList), void 0 !== this.callbacks.continueCall && (this.modes.cached && this.getCache().setValue(this.templist.slice(0, 18)), yield this.callbacks.continueCall(this.templist)); } while (!this.done); return this.modes.sortAiring && (yield this.sortAiringList()), this.modes.cached && this.getCache().setValue(this.templist.slice(0, 18)), void 0 !== this.callbacks.continueCall && this.callbacks.continueCall(this.templist), this.templist; })); } getCached() { return __awaiter(this, void 0, void 0, (function*() { if (this.getCache().hasValue()) { var cachelist = yield this.getCache().getValue(); return cachelist.forEach(item => { (item = this.fn(item)).watchedEp = "", item.score = ""; }), cachelist; } return []; })); } jsonParse(response) { if ("" === response.responseText) throw { code: 444, message: "No Response" }; try { return JSON.parse(response.responseText); } catch (e) { throw { code: 406, message: "Not Acceptable", error: e }; } } flashmError(error) { utils.flashm(this.errorMessage(error), { error: !0, type: "error" }); } errorMessage(error) { if (void 0 === error.code) return error; switch (error.code) { case 400: case 401: return api.storage.lang("Error_Authenticate", [ this.authenticationUrl ]); default: return error.message; } } fn(item) { var continueUrlTemp = null, predictionsObj = null; return item.fn = { continueUrl: () => null !== continueUrlTemp ? continueUrlTemp : utils.getContinueWaching(item.type, item.cacheKey).then(obj => { var res = void 0, curEp = parseInt(item.watchedEp.toString()); return void 0 !== obj && obj.ep === curEp + 1 && (res = obj.url), continueUrlTemp = res; }), predictions: () => null !== predictionsObj ? predictionsObj : new _utils_epPrediction__WEBPACK_IMPORTED_MODULE_0__.a(item.malId, item.cacheKey, item.type).init().then(obj => predictionsObj = obj) }, item; } sortAiringList() { return __awaiter(this, void 0, void 0, (function*() { var listP = []; this.templist.forEach(item => { listP.push(item.fn.predictions()); }), yield Promise.all(listP); var normalItems = [], preItems = [], watchedItems = []; function sortItems(a, b) { var valA = a.fn.predictions().getNextEpTimestamp(), valB = b.fn.predictions().getNextEpTimestamp(); return valA || (valA = 999999999999), valB || (valB = valA), valA - valB; } this.templist.forEach(item => { var prediction = item.fn.predictions(); prediction.getAiring() && prediction.getNextEpTimestamp() ? item.watchedEp < prediction.getEp().ep ? preItems.push(item) : watchedItems.push(item) : normalItems.push(item); }), preItems = preItems.sort(sortItems).reverse(), watchedItems = watchedItems.sort(sortItems), this.templist = preItems.concat(watchedItems, normalItems); })); } getCache() { return this.cacheObj ? this.cacheObj : (this.cacheObj = new _utils_Cache__WEBPACK_IMPORTED_MODULE_1__.a("list/" + this.name + "/" + this.listType + "/" + this.status, 1728e5), this.cacheObj); } } }).call(this, __webpack_require__(0), __webpack_require__(2)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.d(__webpack_exports__, "a", (function() { return getSingle; })); var _helper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59), _MyAnimeList_single__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(19), _AniList_single__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(24), _Kitsu_single__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(25), _Simkl_single__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(26), _Local_single__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(74); function getSingle(url) { if (/^local:\/\//i.test(url)) return new _Local_single__WEBPACK_IMPORTED_MODULE_5__.a(url); var syncMode = _helper__WEBPACK_IMPORTED_MODULE_0__.a(url); if ("MAL" == syncMode) return new _MyAnimeList_single__WEBPACK_IMPORTED_MODULE_1__.a(url); if ("ANILIST" == syncMode) return new _AniList_single__WEBPACK_IMPORTED_MODULE_2__.a(url); if ("KITSU" == syncMode) return new _Kitsu_single__WEBPACK_IMPORTED_MODULE_3__.a(url); if ("SIMKL" == syncMode) return new _Simkl_single__WEBPACK_IMPORTED_MODULE_4__.a(url); throw "Unknown sync mode"; } }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(api) { __webpack_require__.d(__webpack_exports__, "a", (function() { return getCacheKey; })), __webpack_require__.d(__webpack_exports__, "c", (function() { return getSyncList; })), __webpack_require__.d(__webpack_exports__, "b", (function() { return getRegex; })); var __awaiter = function(thisArg, _arguments, P, generator) { return new (P || (P = Promise))((function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } function step(result) { var value; result.done ? resolve(result.value) : (value = result.value, value instanceof P ? value : new P((function(resolve) { resolve(value); }))).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); })); }; function getCacheKey(id, page) { return "local:" + id + ":" + page; } function getSyncList() { return __awaiter(this, void 0, void 0, (function*() { if ("userscript" == api.type) { var list = yield api.storage.list("sync"); for (var key in list) list[key] = yield api.storage.get(key); var data = list; } else data = api.storage.list("sync"); return data; })); } function getRegex(listType) { return new RegExp("^local://[^/]*/" + listType, "i"); } }).call(this, __webpack_require__(0)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(api, con, j, utils) { __webpack_require__.d(__webpack_exports__, "b", (function() { return client_id; })), __webpack_require__.d(__webpack_exports__, "c", (function() { return simklIdToMal; })), __webpack_require__.d(__webpack_exports__, "a", (function() { return call; })); var _templates__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64), __awaiter = function(thisArg, _arguments, P, generator) { return new (P || (P = Promise))((function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } function step(result) { var value; result.done ? resolve(result.value) : (value = result.value, value instanceof P ? value : new P((function(resolve) { resolve(value); }))).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); })); }, client_id = "39e8640b6f1a60aaf60f3f3313475e830517badab8048a4e52ff2d10deb2b9b0"; function simklIdToMal(simklId) { return call("https://api.simkl.com/anime/" + simklId, { extended: "full" }, !0).then(res => void 0 === res.ids.mal ? null : res.ids.mal); } function call(url, sData = {}, asParameter = !1, methode = "GET", login = !0) { return __awaiter(this, void 0, void 0, (function*() { asParameter && (url += "?" + j.$.param(sData)), con.log("call", methode, url, sData); var headers = { Authorization: "Bearer " + api.settings.get("simklToken"), "simkl-api-key": client_id, Accept: "application/vnd.api+json", "Content-Type": "application/json" }; return login || (con.log("No login"), delete headers.Authorization), api.request.xhr(methode, { url: url, headers: headers, data: sData }).then(response => __awaiter(this, void 0, void 0, (function*() { switch (response.status) { case 200: case 201: case 204: case 302: break; case 401: if (login) return call(url, sData, asParameter, methode, !1); throw utils.flashm(_templates__WEBPACK_IMPORTED_MODULE_0__.a.noLogin, { error: !0, type: "error" }), getThrowError(); default: throw utils.flashm("Simkl: " + getErrorText(), { error: !0, type: "error" }), getThrowError(); } try { return JSON.parse(response.responseText); } catch (e) { throw con.error(response), e; } function getErrorText() { return JSON.parse(response.responseText).error; } function getThrowError() { return { status: response.status, message: getErrorText() }; } }))); })); } }).call(this, __webpack_require__(0), __webpack_require__(1), __webpack_require__(3), __webpack_require__(2)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(api) { __webpack_require__.d(__webpack_exports__, "a", (function() { return getList; })), __webpack_require__.d(__webpack_exports__, "c", (function() { return getOnlyList; })), __webpack_require__.d(__webpack_exports__, "b", (function() { return getListbyType; })); var _helper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59), _MyAnimeList_list__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27), _AniList_list__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(28), _Kitsu_list__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(29), _Simkl_list__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(20), _Local_list__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(79), __awaiter = function(thisArg, _arguments, P, generator) { return new (P || (P = Promise))((function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } function step(result) { var value; result.done ? resolve(result.value) : (value = result.value, value instanceof P ? value : new P((function(resolve) { resolve(value); }))).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); })); }; function getList(...args) { return __awaiter(this, void 0, void 0, (function*() { var tempList = []; api.settings.get("localSync") && (tempList = yield new _Local_list__WEBPACK_IMPORTED_MODULE_5__.a(...args).get()); var list = getListObj(args); return list.setTemplist(tempList), list; })); } function getOnlyList(...args) { return getListObj(args); } function getListbyType(syncMode, args = []) { return getListObj(args, syncMode); } function getListObj(args, syncMode = "") { if (syncMode || (syncMode = _helper__WEBPACK_IMPORTED_MODULE_0__.a(args[1] ? args[1] : "anime")), "MAL" == syncMode) return new _MyAnimeList_list__WEBPACK_IMPORTED_MODULE_1__.a(...args); if ("ANILIST" == syncMode) return new _AniList_list__WEBPACK_IMPORTED_MODULE_2__.a(...args); if ("KITSU" == syncMode) return new _Kitsu_list__WEBPACK_IMPORTED_MODULE_3__.a(...args); if ("SIMKL" == syncMode) return new _Simkl_list__WEBPACK_IMPORTED_MODULE_4__.a(...args); throw "Unknown sync mode"; } }).call(this, __webpack_require__(0)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(api) { __webpack_require__.d(__webpack_exports__, "a", (function() { return search; })); var _MyAnimeList_metadata__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(60), _AniList_metadata__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(61), _Kitsu_metadata__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(62), _Simkl_metadata__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(63); function search(keyword, type, options = {}, sync = !1) { var syncMode = function(type = "") { var mode = api.settings.get("syncMode"); return "SIMKL" !== mode || "manga" !== type && -1 === type.indexOf("/manga/") ? mode : api.settings.get("syncModeSimkl"); }(type); return "KITSU" == syncMode ? Object(_Kitsu_metadata__WEBPACK_IMPORTED_MODULE_2__.b)(keyword, type, options, sync) : "ANILIST" == syncMode ? Object(_AniList_metadata__WEBPACK_IMPORTED_MODULE_1__.b)(keyword, type, options, sync) : "SIMKL" == syncMode ? Object(_Simkl_metadata__WEBPACK_IMPORTED_MODULE_3__.b)(keyword, type, options, sync) : Object(_MyAnimeList_metadata__WEBPACK_IMPORTED_MODULE_0__.b)(keyword, type, options, sync); } }).call(this, __webpack_require__(0)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(utils, con, j, api) { __webpack_require__.d(__webpack_exports__, "a", (function() { return Single; })); var _singleAbstract__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(12), _definitions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5), __awaiter = function(thisArg, _arguments, P, generator) { return new (P || (P = Promise))((function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } function step(result) { var value; result.done ? resolve(result.value) : (value = result.value, value instanceof P ? value : new P((function(resolve) { resolve(value); }))).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); })); }; class Single extends _singleAbstract__WEBPACK_IMPORTED_MODULE_0__.a { constructor() { super(...arguments), this.displayUrl = "", this.additionalInfo = { name: "Unknown", totalEp: 0, totalVol: 0 }, this.pending = !1, this.shortName = "MAL", this.authenticationUrl = "https://myanimelist.net/login.php"; } handleUrl(url) { if (url.match(/myanimelist\.net\/(anime|manga)\/\d*/i)) return this.type = utils.urlPart(url, 3), void (this.ids.mal = utils.urlPart(url, 4)); throw this.errorObj(_definitions__WEBPACK_IMPORTED_MODULE_1__.a.UrlNotSuported, "Url not supported"); } getCacheKey() { return this.ids.mal; } _getStatus() { if ("manga" == this.type) var curSt = this.animeInfo[".add_manga[status]"]; else curSt = this.animeInfo[".add_anime[status]"]; return this.getRewatching() && 2 === curSt ? 23 : curSt; } _setStatus(status) { 23 == status ? (status = 2, this.setRewatching(!0)) : this.setRewatching(!1), "manga" == this.type && (this.animeInfo[".add_manga[status]"] = status), this.animeInfo[".add_anime[status]"] = status; } _getScore() { return "manga" == this.type ? this.animeInfo[".add_manga[score]"] : this.animeInfo[".add_anime[score]"]; } _setScore(score) { score || (score = ""), "manga" == this.type && (this.animeInfo[".add_manga[score]"] = score), this.animeInfo[".add_anime[score]"] = score; } _getEpisode() { return "manga" == this.type ? this.animeInfo[".add_manga[num_read_chapters]"] : this.animeInfo[".add_anime[num_watched_episodes]"]; } _setEpisode(episode) { episode || (episode = 0), "manga" == this.type && (this.animeInfo[".add_manga[num_read_chapters]"] = parseInt(episode + "")), this.animeInfo[".add_anime[num_watched_episodes]"] = parseInt(episode + ""); } _getVolume() { return "manga" == this.type ? this.animeInfo[".add_manga[num_read_volumes]"] : 0; } _setVolume(volume) { "manga" != this.type || (this.animeInfo[".add_manga[num_read_volumes]"] = volume); } _getStreamingUrl() { var tags = this.animeInfo[".add_anime[tags]"]; return "manga" == this.type && (tags = this.animeInfo[".add_manga[tags]"]), utils.getUrlFromTags(tags); } _setStreamingUrl(url) { var tags = this.animeInfo[".add_anime[tags]"]; "manga" == this.type && (tags = this.animeInfo[".add_manga[tags]"]), tags || (tags = ""), tags = utils.setUrlInTags(url, tags), "manga" != this.type ? this.animeInfo[".add_anime[tags]"] = tags : this.animeInfo[".add_manga[tags]"] = tags; } getRewatching() { return "manga" == this.type ? this.animeInfo[".add_manga[is_rereading]"] : this.animeInfo[".add_anime[is_rewatching]"]; } setRewatching(state) { var sState = 0; state && (sState = 1), "manga" != this.type ? this.animeInfo[".add_anime[is_rewatching]"] = sState : this.animeInfo[".add_manga[is_rereading]"] = sState; } _getTitle() { return this.additionalInfo.name; } _getTotalEpisodes() { return this.additionalInfo.totalEp; } _getTotalVolumes() { return this.additionalInfo.totalVol; } _getDisplayUrl() { return this.url; } _getImage() { return this.apiCall("GET", this.url).then(data => { var image = ""; try { image = data.split('property="og:image"')[1].split('content="')[1].split('"')[0]; } catch (e) { console.log("[mal.ts] Error:", e); } return image; }); } _getRating() { var url = ""; return url = "anime" == this.type ? "https://myanimelist.net/includes/ajax.inc.php?t=64&id=" + this.ids.mal : "https://myanimelist.net/includes/ajax.inc.php?t=65&id=" + this.ids.mal, this.apiCall("GET", url).then(data => data.split("Score:")[1].split("<")[0]); } _update() { return __awaiter(this, void 0, void 0, (function*() { var editUrl = "https://myanimelist.net/ownlist/" + this.type + "/" + this.ids.mal + "/edit?hideLayout"; return con.log("Update MAL info", editUrl), this.apiCall("GET", editUrl).then(data => { this._authenticated = !0, this.animeInfo = this.getObject(data); }); })); } _sync() { return __awaiter(this, void 0, void 0, (function*() { var url = "https://myanimelist.net/ownlist/" + this.type + "/" + this.ids.mal + "/edit"; if (this.pending) throw this.errorObj(_definitions__WEBPACK_IMPORTED_MODULE_1__.a.GenericError, "This " + this.type + " is currently pending approval. It can´t be saved to mal for now"); this._onList || (url = "anime" == this.type ? "https://myanimelist.net/ownlist/anime/add?selected_series_id=" + this.ids.mal : "https://myanimelist.net/ownlist/manga/add?selected_manga_id=" + this.ids.mal), 1 == this.getStatus() && this.getEpisode() > 0 && this.setStartingDateToNow(), 2 == this.getStatus() && (this.setCompletionDateToNow(), this.getTotalEpisodes() && this.setEpisode(this.getTotalEpisodes())); var parameter = ""; return j.$.each(this.animeInfo, (function(index, value) { "." === index.toString().charAt(0) && (".add_anime[is_rewatching]" !== index && ".add_manga[is_rereading]" !== index || 0 !== parseInt(value)) && (parameter += encodeURIComponent(index.toString().substring(1)) + "=" + encodeURIComponent(value) + "&"); })), con.log("[SET] URL:", url), con.log("[SET] Object:", this.animeInfo), this.apiCall("POST", { url: url, data: parameter, headers: { "Content-Type": "application/x-www-form-urlencoded" } }).then(data => { if (!(data.indexOf("Successfully") >= 0)) throw this.errorObj(_definitions__WEBPACK_IMPORTED_MODULE_1__.a.ServerOffline, "Update failed"); con.log("Update Succeeded"); }); })); } apiCall(post, options) { return api.request.xhr(post, options).then(response => { if (response.status > 499 && response.status < 600 || 0 === response.status) throw this.errorObj(_definitions__WEBPACK_IMPORTED_MODULE_1__.a.ServerOffline, "Server Offline status: " + response.status); if (response.finalUrl.indexOf("myanimelist.net/login.php") > -1 || response.responseText.indexOf("Unauthorized") > -1) throw this._authenticated = !1, this.errorObj(_definitions__WEBPACK_IMPORTED_MODULE_1__.a.NotAutenticated, "Not Authenticated"); return response.responseText; }); } getObject(data) { var anime, getselect = utils.getselect; if (void 0 === data.split('
-1 && (this._onList = !1), data.indexOf("pending approval") > -1 && (this.pending = !0), data = data.split('")[0], this.additionalInfo.totalEp = parseInt(data.split('id="totalEpisodes">')[1].split("<")[0]), this.additionalInfo.name = data.split('')[1].split("<")[0], anime[".anime_id"] = parseInt(data.split('name="anime_id"')[1].split('value="')[1].split('"')[0]), anime[".aeps"] = parseInt(data.split('name="aeps"')[1].split('value="')[1].split('"')[0]), anime[".astatus"] = parseInt(data.split('name="astatus"')[1].split('value="')[1].split('"')[0]), anime[".add_anime[status]"] = parseInt(getselect(data, "add_anime[status]")), anime[".add_anime[status]"] || (anime[".add_anime[status]"] = 6), data.split('name="add_anime[is_rewatching]"')[1].split(">")[0].indexOf('checked="checked"') >= 0 && (anime[".add_anime[is_rewatching]"] = 1), anime[".add_anime[num_watched_episodes]"] = parseInt(data.split('name="add_anime[num_watched_episodes]"')[1].split('value="')[1].split('"')[0]), isNaN(anime[".add_anime[num_watched_episodes]"]) && (anime[".add_anime[num_watched_episodes]"] = ""), anime[".add_anime[score]"] = getselect(data, "add_anime[score]"), anime[".add_anime[start_date][month]"] = getselect(data, "add_anime[start_date][month]"), anime[".add_anime[start_date][day]"] = getselect(data, "add_anime[start_date][day]"), anime[".add_anime[start_date][year]"] = getselect(data, "add_anime[start_date][year]"), anime[".add_anime[finish_date][month]"] = getselect(data, "add_anime[finish_date][month]"), anime[".add_anime[finish_date][day]"] = getselect(data, "add_anime[finish_date][day]"), anime[".add_anime[finish_date][year]"] = getselect(data, "add_anime[finish_date][year]"), anime[".add_anime[tags]"] = utils.parseHtml(data.split('name="add_anime[tags]"')[1].split(">")[1].split("<")[0]), anime[".add_anime[priority]"] = getselect(data, "add_anime[priority]"), anime[".add_anime[storage_type]"] = getselect(data, "add_anime[storage_type]"), anime[".add_anime[storage_value]"] = data.split('name="add_anime[storage_value]"')[1].split('value="')[1].split('"')[0], anime[".add_anime[num_watched_times]"] = data.split('name="add_anime[num_watched_times]"')[1].split('value="')[1].split('"')[0], anime[".add_anime[rewatch_value]"] = getselect(data, "add_anime[rewatch_value]"), anime[".add_anime[comments]"] = utils.parseHtml(data.split('name="add_anime[comments]"')[1].split(">")[1].split("<")[0]), anime[".add_anime[is_asked_to_discuss]"] = getselect(data, "add_anime[is_asked_to_discuss]"), "" === anime[".add_anime[is_asked_to_discuss]"] && (anime[".add_anime[is_asked_to_discuss]"] = 0), anime[".add_anime[sns_post_type]"] = getselect(data, "add_anime[sns_post_type]"), anime[".submitIt"] = data.split('name="submitIt"')[1].split('value="')[1].split('"')[0], con.log("[GET] Object:", anime), anime) : ((anime = {})[".csrf_token"] = data.split("'csrf_token'")[1].split("'")[1].split("'")[0], data.indexOf("Add Manga") > -1 && (this._onList = !1), data.indexOf("pending approval") > -1 && (this.pending = !0), data = data.split('")[0], this.additionalInfo.totalEp = parseInt(data.split('id="totalChap">')[1].split("<")[0]), this.additionalInfo.totalVol = parseInt(data.split('id="totalVol">')[1].split("<")[0]), this.additionalInfo.name = data.split('')[1].split("<")[0], anime[".entry_id"] = parseInt(data.split('name="entry_id"')[1].split('value="')[1].split('"')[0]), anime[".manga_id"] = parseInt(data.split('name="manga_id"')[1].split('value="')[1].split('"')[0]), anime.volumes = parseInt(data.split('id="volumes"')[1].split('value="')[1].split('"')[0]), anime.mstatus = parseInt(data.split('id="mstatus"')[1].split('value="')[1].split('"')[0]), anime[".add_manga[status]"] = parseInt(getselect(data, "add_manga[status]")), data.split('name="add_manga[is_rereading]"')[1].split(">")[0].indexOf('checked="checked"') >= 0 && (anime[".add_manga[is_rereading]"] = 1), anime[".add_manga[num_read_volumes]"] = parseInt(data.split('name="add_manga[num_read_volumes]"')[1].split('value="')[1].split('"')[0]), isNaN(anime[".add_manga[num_read_volumes]"]) && (anime[".add_manga[num_read_volumes]"] = ""), anime[".add_manga[num_read_chapters]"] = parseInt(data.split('name="add_manga[num_read_chapters]"')[1].split('value="')[1].split('"')[0]), isNaN(anime[".add_manga[num_read_chapters]"]) && (anime[".add_manga[num_read_chapters]"] = ""), anime[".add_manga[score]"] = getselect(data, "add_manga[score]"), anime[".add_manga[start_date][month]"] = getselect(data, "add_manga[start_date][month]"), anime[".add_manga[start_date][day]"] = getselect(data, "add_manga[start_date][day]"), anime[".add_manga[start_date][year]"] = getselect(data, "add_manga[start_date][year]"), anime[".add_manga[finish_date][month]"] = getselect(data, "add_manga[finish_date][month]"), anime[".add_manga[finish_date][day]"] = getselect(data, "add_manga[finish_date][day]"), anime[".add_manga[finish_date][year]"] = getselect(data, "add_manga[finish_date][year]"), anime[".add_manga[tags]"] = utils.parseHtml(data.split('name="add_manga[tags]"')[1].split(">")[1].split("<")[0]), anime[".add_manga[priority]"] = getselect(data, "add_manga[priority]"), anime[".add_manga[storage_type]"] = getselect(data, "add_manga[storage_type]"), anime[".add_manga[num_retail_volumes]"] = data.split('name="add_manga[num_retail_volumes]"')[1].split('value="')[1].split('"')[0], anime[".add_manga[num_read_times]"] = data.split('name="add_manga[num_read_times]"')[1].split('value="')[1].split('"')[0], anime[".add_manga[reread_value]"] = getselect(data, "add_manga[reread_value]"), anime[".add_manga[comments]"] = utils.parseHtml(data.split('name="add_manga[comments]"')[1].split(">")[1].split("<")[0]), anime[".add_manga[is_asked_to_discuss]"] = getselect(data, "add_manga[is_asked_to_discuss]"), "" == anime[".add_manga[is_asked_to_discuss]"] && (anime[".add_manga[is_asked_to_discuss]"] = 0), anime[".add_manga[sns_post_type]"] = getselect(data, "add_manga[sns_post_type]"), anime[".submitIt"] = data.split('name="submitIt"')[1].split('value="')[1].split('"')[0], con.log("[GET] Object:", anime), anime); } setCompletionDateToNow() { var Datec = new Date; "" === this.animeInfo[".add_anime[finish_date][day]"] || "" === this.animeInfo[".add_manga[finish_date][day]"] ? ("manga" == this.type && (this.animeInfo[".add_manga[finish_date][year]"] = Datec.getFullYear(), this.animeInfo[".add_manga[finish_date][month]"] = Datec.getMonth() + 1, this.animeInfo[".add_manga[finish_date][day]"] = Datec.getDate()), this.animeInfo[".add_anime[finish_date][year]"] = Datec.getFullYear(), this.animeInfo[".add_anime[finish_date][month]"] = Datec.getMonth() + 1, this.animeInfo[".add_anime[finish_date][day]"] = Datec.getDate()) : con.error("Completion date already set"); } setStartingDateToNow() { var Datec = new Date; "" === this.animeInfo[".add_anime[start_date][day]"] || "" === this.animeInfo[".add_manga[start_date][day]"] ? ("manga" == this.type && (this.animeInfo[".add_manga[start_date][year]"] = Datec.getFullYear(), this.animeInfo[".add_manga[start_date][month]"] = Datec.getMonth() + 1, this.animeInfo[".add_manga[start_date][day]"] = Datec.getDate()), this.animeInfo[".add_anime[start_date][year]"] = Datec.getFullYear(), this.animeInfo[".add_anime[start_date][month]"] = Datec.getMonth() + 1, this.animeInfo[".add_anime[start_date][day]"] = Datec.getDate()) : con.info("Start date already set"); } } }).call(this, __webpack_require__(2), __webpack_require__(1), __webpack_require__(3), __webpack_require__(0)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(con) { __webpack_require__.d(__webpack_exports__, "a", (function() { return userlist; })); var _listAbstract__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13), _helper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7), __awaiter = function(thisArg, _arguments, P, generator) { return new (P || (P = Promise))((function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } function step(result) { var value; result.done ? resolve(result.value) : (value = result.value, value instanceof P ? value : new P((function(resolve) { resolve(value); }))).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); })); }; class userlist extends _listAbstract__WEBPACK_IMPORTED_MODULE_0__.a { constructor() { super(...arguments), this.name = "Simkl", this.authenticationUrl = "https://simkl.com/oauth/authorize?response_type=code&client_id=39e8640b6f1a60aaf60f3f3313475e830517badab8048a4e52ff2d10deb2b9b0&redirect_uri=https://simkl.com/apps/chrome/mal-sync/connected/", this.syncList = _helper__WEBPACK_IMPORTED_MODULE_1__.e, this.translateList = _helper__WEBPACK_IMPORTED_MODULE_1__.f, this.getCacheKey = _helper__WEBPACK_IMPORTED_MODULE_1__.b, this.getEpisode = _helper__WEBPACK_IMPORTED_MODULE_1__.c, this.call = _helper__WEBPACK_IMPORTED_MODULE_1__.a; } getUsername() { return __awaiter(this, void 0, void 0, (function*() { return this.call("https://api.simkl.com/users/settings").then(res => { if (con.log(res), res && res.user && void 0 !== res.user.name) return res.user.name; throw { code: 400, message: "Not Authenticated" }; }); })); } errorHandling(res, code) { if (void 0 !== res.error) throw con.error(res.error), { code: code, message: res.error }; switch (code) { case 200: case 201: case 204: case 302: break; default: throw { code: code, message: "Code: " + code }; } } getPart() { return __awaiter(this, void 0, void 0, (function*() { if (con.log("[UserList][Simkl]", "status: " + this.status), "manga" === this.listType) throw { code: 415, message: "Does not support manga" }; return this.syncList().then(list => { this.done = !0; var data = this.prepareData(Object.values(list), this.listType, this.status); return con.log(data), data; }); })); } prepareData(data, listType, status) { for (var newData = [], i = 0; i < data.length; i++) { var el = data[i], st = this.translateList(el.status); if ((7 === status || parseInt(st) === status) && "anime" === listType) { var tempData = this.fn({ malId: el.show.ids.mal, uid: el.show.ids.simkl, cacheKey: this.getCacheKey(el.show.ids.mal, el.show.ids.simkl), type: listType, title: el.show.title, url: "https://simkl.com/" + listType + "/" + el.show.ids.simkl, watchedEp: this.getEpisode(el.last_watched), totalEp: el.total_episodes_count, status: st, score: el.user_rating ? el.user_rating : 0, image: "https://simkl.in/posters/" + el.show.poster + "_ca.jpg", tags: el.private_memo, airingState: el.anime_airing_status }); newData.push(tempData); } } return newData; } } }).call(this, __webpack_require__(1)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(global, setImmediate) { var emptyObject = Object.freeze({}); function isUndef(v) { return null == v; } function isDef(v) { return null != v; } function isTrue(v) { return !0 === v; } function isPrimitive(value) { return "string" == typeof value || "number" == typeof value || "symbol" == typeof value || "boolean" == typeof value; } function isObject(obj) { return null !== obj && "object" == typeof obj; } var _toString = Object.prototype.toString; function isPlainObject(obj) { return "[object Object]" === _toString.call(obj); } function isRegExp(v) { return "[object RegExp]" === _toString.call(v); } function isValidArrayIndex(val) { var n = parseFloat(String(val)); return n >= 0 && Math.floor(n) === n && isFinite(val); } function isPromise(val) { return isDef(val) && "function" == typeof val.then && "function" == typeof val.catch; } function toString(val) { return null == val ? "" : Array.isArray(val) || isPlainObject(val) && val.toString === _toString ? JSON.stringify(val, null, 2) : String(val); } function toNumber(val) { var n = parseFloat(val); return isNaN(n) ? val : n; } function makeMap(str, expectsLowerCase) { for (var map = Object.create(null), list = str.split(","), i = 0; i < list.length; i++) map[list[i]] = !0; return expectsLowerCase ? function(val) { return map[val.toLowerCase()]; } : function(val) { return map[val]; }; } var isBuiltInTag = makeMap("slot,component", !0), isReservedAttribute = makeMap("key,ref,slot,slot-scope,is"); function remove(arr, item) { if (arr.length) { var index = arr.indexOf(item); if (index > -1) return arr.splice(index, 1); } } var hasOwnProperty = Object.prototype.hasOwnProperty; function hasOwn(obj, key) { return hasOwnProperty.call(obj, key); } function cached(fn) { var cache = Object.create(null); return function(str) { return cache[str] || (cache[str] = fn(str)); }; } var camelizeRE = /-(\w)/g, camelize = cached((function(str) { return str.replace(camelizeRE, (function(_, c) { return c ? c.toUpperCase() : ""; })); })), capitalize = cached((function(str) { return str.charAt(0).toUpperCase() + str.slice(1); })), hyphenateRE = /\B([A-Z])/g, hyphenate = cached((function(str) { return str.replace(hyphenateRE, "-$1").toLowerCase(); })); var bind = Function.prototype.bind ? function(fn, ctx) { return fn.bind(ctx); } : function(fn, ctx) { function boundFn(a) { var l = arguments.length; return l ? l > 1 ? fn.apply(ctx, arguments) : fn.call(ctx, a) : fn.call(ctx); } return boundFn._length = fn.length, boundFn; }; function toArray(list, start) { start = start || 0; for (var i = list.length - start, ret = new Array(i); i--; ) ret[i] = list[i + start]; return ret; } function extend(to, _from) { for (var key in _from) to[key] = _from[key]; return to; } function toObject(arr) { for (var res = {}, i = 0; i < arr.length; i++) arr[i] && extend(res, arr[i]); return res; } function noop(a, b, c) {} var no = function(a, b, c) { return !1; }, identity = function(_) { return _; }; function looseEqual(a, b) { if (a === b) return !0; var isObjectA = isObject(a), isObjectB = isObject(b); if (!isObjectA || !isObjectB) return !isObjectA && !isObjectB && String(a) === String(b); try { var isArrayA = Array.isArray(a), isArrayB = Array.isArray(b); if (isArrayA && isArrayB) return a.length === b.length && a.every((function(e, i) { return looseEqual(e, b[i]); })); if (a instanceof Date && b instanceof Date) return a.getTime() === b.getTime(); if (isArrayA || isArrayB) return !1; var keysA = Object.keys(a), keysB = Object.keys(b); return keysA.length === keysB.length && keysA.every((function(key) { return looseEqual(a[key], b[key]); })); } catch (e) { return !1; } } function looseIndexOf(arr, val) { for (var i = 0; i < arr.length; i++) if (looseEqual(arr[i], val)) return i; return -1; } function once(fn) { var called = !1; return function() { called || (called = !0, fn.apply(this, arguments)); }; } var SSR_ATTR = "data-server-rendered", ASSET_TYPES = [ "component", "directive", "filter" ], LIFECYCLE_HOOKS = [ "beforeCreate", "created", "beforeMount", "mounted", "beforeUpdate", "updated", "beforeDestroy", "destroyed", "activated", "deactivated", "errorCaptured", "serverPrefetch" ], config = { optionMergeStrategies: Object.create(null), silent: !1, productionTip: !1, devtools: !1, performance: !1, errorHandler: null, warnHandler: null, ignoredElements: [], keyCodes: Object.create(null), isReservedTag: no, isReservedAttr: no, isUnknownElement: no, getTagNamespace: noop, parsePlatformTagName: identity, mustUseProp: no, async: !0, _lifecycleHooks: LIFECYCLE_HOOKS }, unicodeRegExp = /a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/; function isReserved(str) { var c = (str + "").charCodeAt(0); return 36 === c || 95 === c; } function def(obj, key, val, enumerable) { Object.defineProperty(obj, key, { value: val, enumerable: !!enumerable, writable: !0, configurable: !0 }); } var bailRE = new RegExp("[^" + unicodeRegExp.source + ".$_\\d]"); var _isServer, hasProto = "__proto__" in {}, inBrowser = "undefined" != typeof window, inWeex = "undefined" != typeof WXEnvironment && !!WXEnvironment.platform, weexPlatform = inWeex && WXEnvironment.platform.toLowerCase(), UA = inBrowser && window.navigator.userAgent.toLowerCase(), isIE = UA && /msie|trident/.test(UA), isIE9 = UA && UA.indexOf("msie 9.0") > 0, isEdge = UA && UA.indexOf("edge/") > 0, isIOS = (UA && UA.indexOf("android"), UA && /iphone|ipad|ipod|ios/.test(UA) || "ios" === weexPlatform), isFF = (UA && /chrome\/\d+/.test(UA), UA && /phantomjs/.test(UA), UA && UA.match(/firefox\/(\d+)/)), nativeWatch = {}.watch, supportsPassive = !1; if (inBrowser) try { var opts = {}; Object.defineProperty(opts, "passive", { get: function() { supportsPassive = !0; } }), window.addEventListener("test-passive", null, opts); } catch (e) {} var isServerRendering = function() { return void 0 === _isServer && (_isServer = !inBrowser && !inWeex && void 0 !== global && (global.process && "server" === global.process.env.VUE_ENV)), _isServer; }, devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__; function isNative(Ctor) { return "function" == typeof Ctor && /native code/.test(Ctor.toString()); } var _Set, hasSymbol = "undefined" != typeof Symbol && isNative(Symbol) && "undefined" != typeof Reflect && isNative(Reflect.ownKeys); _Set = "undefined" != typeof Set && isNative(Set) ? Set : function() { function Set() { this.set = Object.create(null); } return Set.prototype.has = function(key) { return !0 === this.set[key]; }, Set.prototype.add = function(key) { this.set[key] = !0; }, Set.prototype.clear = function() { this.set = Object.create(null); }, Set; }(); var warn = noop, uid = 0, Dep = function() { this.id = uid++, this.subs = []; }; Dep.prototype.addSub = function(sub) { this.subs.push(sub); }, Dep.prototype.removeSub = function(sub) { remove(this.subs, sub); }, Dep.prototype.depend = function() { Dep.target && Dep.target.addDep(this); }, Dep.prototype.notify = function() { var subs = this.subs.slice(); for (var i = 0, l = subs.length; i < l; i++) subs[i].update(); }, Dep.target = null; var targetStack = []; function pushTarget(target) { targetStack.push(target), Dep.target = target; } function popTarget() { targetStack.pop(), Dep.target = targetStack[targetStack.length - 1]; } var VNode = function(tag, data, children, text, elm, context, componentOptions, asyncFactory) { this.tag = tag, this.data = data, this.children = children, this.text = text, this.elm = elm, this.ns = void 0, this.context = context, this.fnContext = void 0, this.fnOptions = void 0, this.fnScopeId = void 0, this.key = data && data.key, this.componentOptions = componentOptions, this.componentInstance = void 0, this.parent = void 0, this.raw = !1, this.isStatic = !1, this.isRootInsert = !0, this.isComment = !1, this.isCloned = !1, this.isOnce = !1, this.asyncFactory = asyncFactory, this.asyncMeta = void 0, this.isAsyncPlaceholder = !1; }, prototypeAccessors = { child: { configurable: !0 } }; prototypeAccessors.child.get = function() { return this.componentInstance; }, Object.defineProperties(VNode.prototype, prototypeAccessors); var createEmptyVNode = function(text) { void 0 === text && (text = ""); var node = new VNode; return node.text = text, node.isComment = !0, node; }; function createTextVNode(val) { return new VNode(void 0, void 0, void 0, String(val)); } function cloneVNode(vnode) { var cloned = new VNode(vnode.tag, vnode.data, vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory); return cloned.ns = vnode.ns, cloned.isStatic = vnode.isStatic, cloned.key = vnode.key, cloned.isComment = vnode.isComment, cloned.fnContext = vnode.fnContext, cloned.fnOptions = vnode.fnOptions, cloned.fnScopeId = vnode.fnScopeId, cloned.asyncMeta = vnode.asyncMeta, cloned.isCloned = !0, cloned; } var arrayProto = Array.prototype, arrayMethods = Object.create(arrayProto); [ "push", "pop", "shift", "unshift", "splice", "sort", "reverse" ].forEach((function(method) { var original = arrayProto[method]; def(arrayMethods, method, (function() { for (var args = [], len = arguments.length; len--; ) args[len] = arguments[len]; var inserted, result = original.apply(this, args), ob = this.__ob__; switch (method) { case "push": case "unshift": inserted = args; break; case "splice": inserted = args.slice(2); } return inserted && ob.observeArray(inserted), ob.dep.notify(), result; })); })); var arrayKeys = Object.getOwnPropertyNames(arrayMethods), shouldObserve = !0; function toggleObserving(value) { shouldObserve = value; } var Observer = function(value) { this.value = value, this.dep = new Dep, this.vmCount = 0, def(value, "__ob__", this), Array.isArray(value) ? (hasProto ? function(target, src) { target.__proto__ = src; }(value, arrayMethods) : function(target, src, keys) { for (var i = 0, l = keys.length; i < l; i++) { var key = keys[i]; def(target, key, src[key]); } }(value, arrayMethods, arrayKeys), this.observeArray(value)) : this.walk(value); }; function observe(value, asRootData) { var ob; if (isObject(value) && !(value instanceof VNode)) return hasOwn(value, "__ob__") && value.__ob__ instanceof Observer ? ob = value.__ob__ : shouldObserve && !isServerRendering() && (Array.isArray(value) || isPlainObject(value)) && Object.isExtensible(value) && !value._isVue && (ob = new Observer(value)), asRootData && ob && ob.vmCount++, ob; } function defineReactive$$1(obj, key, val, customSetter, shallow) { var dep = new Dep, property = Object.getOwnPropertyDescriptor(obj, key); if (!property || !1 !== property.configurable) { var getter = property && property.get, setter = property && property.set; getter && !setter || 2 !== arguments.length || (val = obj[key]); var childOb = !shallow && observe(val); Object.defineProperty(obj, key, { enumerable: !0, configurable: !0, get: function() { var value = getter ? getter.call(obj) : val; return Dep.target && (dep.depend(), childOb && (childOb.dep.depend(), Array.isArray(value) && function dependArray(value) { for (var e = void 0, i = 0, l = value.length; i < l; i++) (e = value[i]) && e.__ob__ && e.__ob__.dep.depend(), Array.isArray(e) && dependArray(e); }(value))), value; }, set: function(newVal) { var value = getter ? getter.call(obj) : val; newVal === value || newVal != newVal && value != value || getter && !setter || (setter ? setter.call(obj, newVal) : val = newVal, childOb = !shallow && observe(newVal), dep.notify()); } }); } } function set(target, key, val) { if (Array.isArray(target) && isValidArrayIndex(key)) return target.length = Math.max(target.length, key), target.splice(key, 1, val), val; if (key in target && !(key in Object.prototype)) return target[key] = val, val; var ob = target.__ob__; return target._isVue || ob && ob.vmCount ? val : ob ? (defineReactive$$1(ob.value, key, val), ob.dep.notify(), val) : (target[key] = val, val); } function del(target, key) { if (Array.isArray(target) && isValidArrayIndex(key)) target.splice(key, 1); else { var ob = target.__ob__; target._isVue || ob && ob.vmCount || hasOwn(target, key) && (delete target[key], ob && ob.dep.notify()); } } Observer.prototype.walk = function(obj) { for (var keys = Object.keys(obj), i = 0; i < keys.length; i++) defineReactive$$1(obj, keys[i]); }, Observer.prototype.observeArray = function(items) { for (var i = 0, l = items.length; i < l; i++) observe(items[i]); }; var strats = config.optionMergeStrategies; function mergeData(to, from) { if (!from) return to; for (var key, toVal, fromVal, keys = hasSymbol ? Reflect.ownKeys(from) : Object.keys(from), i = 0; i < keys.length; i++) "__ob__" !== (key = keys[i]) && (toVal = to[key], fromVal = from[key], hasOwn(to, key) ? toVal !== fromVal && isPlainObject(toVal) && isPlainObject(fromVal) && mergeData(toVal, fromVal) : set(to, key, fromVal)); return to; } function mergeDataOrFn(parentVal, childVal, vm) { return vm ? function() { var instanceData = "function" == typeof childVal ? childVal.call(vm, vm) : childVal, defaultData = "function" == typeof parentVal ? parentVal.call(vm, vm) : parentVal; return instanceData ? mergeData(instanceData, defaultData) : defaultData; } : childVal ? parentVal ? function() { return mergeData("function" == typeof childVal ? childVal.call(this, this) : childVal, "function" == typeof parentVal ? parentVal.call(this, this) : parentVal); } : childVal : parentVal; } function mergeHook(parentVal, childVal) { var res = childVal ? parentVal ? parentVal.concat(childVal) : Array.isArray(childVal) ? childVal : [ childVal ] : parentVal; return res ? function(hooks) { for (var res = [], i = 0; i < hooks.length; i++) -1 === res.indexOf(hooks[i]) && res.push(hooks[i]); return res; }(res) : res; } function mergeAssets(parentVal, childVal, vm, key) { var res = Object.create(parentVal || null); return childVal ? extend(res, childVal) : res; } strats.data = function(parentVal, childVal, vm) { return vm ? mergeDataOrFn(parentVal, childVal, vm) : childVal && "function" != typeof childVal ? parentVal : mergeDataOrFn(parentVal, childVal); }, LIFECYCLE_HOOKS.forEach((function(hook) { strats[hook] = mergeHook; })), ASSET_TYPES.forEach((function(type) { strats[type + "s"] = mergeAssets; })), strats.watch = function(parentVal, childVal, vm, key) { if (parentVal === nativeWatch && (parentVal = void 0), childVal === nativeWatch && (childVal = void 0), !childVal) return Object.create(parentVal || null); if (!parentVal) return childVal; var ret = {}; for (var key$1 in extend(ret, parentVal), childVal) { var parent = ret[key$1], child = childVal[key$1]; parent && !Array.isArray(parent) && (parent = [ parent ]), ret[key$1] = parent ? parent.concat(child) : Array.isArray(child) ? child : [ child ]; } return ret; }, strats.props = strats.methods = strats.inject = strats.computed = function(parentVal, childVal, vm, key) { if (!parentVal) return childVal; var ret = Object.create(null); return extend(ret, parentVal), childVal && extend(ret, childVal), ret; }, strats.provide = mergeDataOrFn; var defaultStrat = function(parentVal, childVal) { return void 0 === childVal ? parentVal : childVal; }; function mergeOptions(parent, child, vm) { if ("function" == typeof child && (child = child.options), function(options, vm) { var props = options.props; if (props) { var i, val, res = {}; if (Array.isArray(props)) for (i = props.length; i--; ) "string" == typeof (val = props[i]) && (res[camelize(val)] = { type: null }); else if (isPlainObject(props)) for (var key in props) val = props[key], res[camelize(key)] = isPlainObject(val) ? val : { type: val }; else 0; options.props = res; } }(child), function(options, vm) { var inject = options.inject; if (inject) { var normalized = options.inject = {}; if (Array.isArray(inject)) for (var i = 0; i < inject.length; i++) normalized[inject[i]] = { from: inject[i] }; else if (isPlainObject(inject)) for (var key in inject) { var val = inject[key]; normalized[key] = isPlainObject(val) ? extend({ from: key }, val) : { from: val }; } else 0; } }(child), function(options) { var dirs = options.directives; if (dirs) for (var key in dirs) { var def$$1 = dirs[key]; "function" == typeof def$$1 && (dirs[key] = { bind: def$$1, update: def$$1 }); } }(child), !child._base && (child.extends && (parent = mergeOptions(parent, child.extends, vm)), child.mixins)) for (var i = 0, l = child.mixins.length; i < l; i++) parent = mergeOptions(parent, child.mixins[i], vm); var key, options = {}; for (key in parent) mergeField(key); for (key in child) hasOwn(parent, key) || mergeField(key); function mergeField(key) { var strat = strats[key] || defaultStrat; options[key] = strat(parent[key], child[key], vm, key); } return options; } function resolveAsset(options, type, id, warnMissing) { if ("string" == typeof id) { var assets = options[type]; if (hasOwn(assets, id)) return assets[id]; var camelizedId = camelize(id); if (hasOwn(assets, camelizedId)) return assets[camelizedId]; var PascalCaseId = capitalize(camelizedId); return hasOwn(assets, PascalCaseId) ? assets[PascalCaseId] : assets[id] || assets[camelizedId] || assets[PascalCaseId]; } } function validateProp(key, propOptions, propsData, vm) { var prop = propOptions[key], absent = !hasOwn(propsData, key), value = propsData[key], booleanIndex = getTypeIndex(Boolean, prop.type); if (booleanIndex > -1) if (absent && !hasOwn(prop, "default")) value = !1; else if ("" === value || value === hyphenate(key)) { var stringIndex = getTypeIndex(String, prop.type); (stringIndex < 0 || booleanIndex < stringIndex) && (value = !0); } if (void 0 === value) { value = function(vm, prop, key) { if (!hasOwn(prop, "default")) return; var def = prop.default; 0; if (vm && vm.$options.propsData && void 0 === vm.$options.propsData[key] && void 0 !== vm._props[key]) return vm._props[key]; return "function" == typeof def && "Function" !== getType(prop.type) ? def.call(vm) : def; }(vm, prop, key); var prevShouldObserve = shouldObserve; toggleObserving(!0), observe(value), toggleObserving(prevShouldObserve); } return value; } function getType(fn) { var match = fn && fn.toString().match(/^\s*function (\w+)/); return match ? match[1] : ""; } function isSameType(a, b) { return getType(a) === getType(b); } function getTypeIndex(type, expectedTypes) { if (!Array.isArray(expectedTypes)) return isSameType(expectedTypes, type) ? 0 : -1; for (var i = 0, len = expectedTypes.length; i < len; i++) if (isSameType(expectedTypes[i], type)) return i; return -1; } function handleError(err, vm, info) { pushTarget(); try { if (vm) for (var cur = vm; cur = cur.$parent; ) { var hooks = cur.$options.errorCaptured; if (hooks) for (var i = 0; i < hooks.length; i++) try { if (!1 === hooks[i].call(cur, err, vm, info)) return; } catch (e) { globalHandleError(e, cur, "errorCaptured hook"); } } globalHandleError(err, vm, info); } finally { popTarget(); } } function invokeWithErrorHandling(handler, context, args, vm, info) { var res; try { (res = args ? handler.apply(context, args) : handler.call(context)) && !res._isVue && isPromise(res) && !res._handled && (res.catch((function(e) { return handleError(e, vm, info + " (Promise/async)"); })), res._handled = !0); } catch (e) { handleError(e, vm, info); } return res; } function globalHandleError(err, vm, info) { if (config.errorHandler) try { return config.errorHandler.call(null, err, vm, info); } catch (e) { e !== err && logError(e, null, "config.errorHandler"); } logError(err, vm, info); } function logError(err, vm, info) { if (!inBrowser && !inWeex || "undefined" == typeof console) throw err; console.error(err); } var timerFunc, isUsingMicroTask = !1, callbacks = [], pending = !1; function flushCallbacks() { pending = !1; var copies = callbacks.slice(0); callbacks.length = 0; for (var i = 0; i < copies.length; i++) copies[i](); } if ("undefined" != typeof Promise && isNative(Promise)) { var p = Promise.resolve(); timerFunc = function() { p.then(flushCallbacks), isIOS && setTimeout(noop); }, isUsingMicroTask = !0; } else if (isIE || "undefined" == typeof MutationObserver || !isNative(MutationObserver) && "[object MutationObserverConstructor]" !== MutationObserver.toString()) timerFunc = void 0 !== setImmediate && isNative(setImmediate) ? function() { setImmediate(flushCallbacks); } : function() { setTimeout(flushCallbacks, 0); }; else { var counter = 1, observer = new MutationObserver(flushCallbacks), textNode = document.createTextNode(String(counter)); observer.observe(textNode, { characterData: !0 }), timerFunc = function() { counter = (counter + 1) % 2, textNode.data = String(counter); }, isUsingMicroTask = !0; } function nextTick(cb, ctx) { var _resolve; if (callbacks.push((function() { if (cb) try { cb.call(ctx); } catch (e) { handleError(e, ctx, "nextTick"); } else _resolve && _resolve(ctx); })), pending || (pending = !0, timerFunc()), !cb && "undefined" != typeof Promise) return new Promise((function(resolve) { _resolve = resolve; })); } var seenObjects = new _Set; function traverse(val) { !function _traverse(val, seen) { var i, keys, isA = Array.isArray(val); if (!isA && !isObject(val) || Object.isFrozen(val) || val instanceof VNode) return; if (val.__ob__) { var depId = val.__ob__.dep.id; if (seen.has(depId)) return; seen.add(depId); } if (isA) for (i = val.length; i--; ) _traverse(val[i], seen); else for (keys = Object.keys(val), i = keys.length; i--; ) _traverse(val[keys[i]], seen); }(val, seenObjects), seenObjects.clear(); } var normalizeEvent = cached((function(name) { var passive = "&" === name.charAt(0), once$$1 = "~" === (name = passive ? name.slice(1) : name).charAt(0), capture = "!" === (name = once$$1 ? name.slice(1) : name).charAt(0); return { name: name = capture ? name.slice(1) : name, once: once$$1, capture: capture, passive: passive }; })); function createFnInvoker(fns, vm) { function invoker() { var arguments$1 = arguments, fns = invoker.fns; if (!Array.isArray(fns)) return invokeWithErrorHandling(fns, null, arguments, vm, "v-on handler"); for (var cloned = fns.slice(), i = 0; i < cloned.length; i++) invokeWithErrorHandling(cloned[i], null, arguments$1, vm, "v-on handler"); } return invoker.fns = fns, invoker; } function updateListeners(on, oldOn, add, remove$$1, createOnceHandler, vm) { var name, cur, old, event; for (name in on) cur = on[name], old = oldOn[name], event = normalizeEvent(name), isUndef(cur) || (isUndef(old) ? (isUndef(cur.fns) && (cur = on[name] = createFnInvoker(cur, vm)), isTrue(event.once) && (cur = on[name] = createOnceHandler(event.name, cur, event.capture)), add(event.name, cur, event.capture, event.passive, event.params)) : cur !== old && (old.fns = cur, on[name] = old)); for (name in oldOn) isUndef(on[name]) && remove$$1((event = normalizeEvent(name)).name, oldOn[name], event.capture); } function mergeVNodeHook(def, hookKey, hook) { var invoker; def instanceof VNode && (def = def.data.hook || (def.data.hook = {})); var oldHook = def[hookKey]; function wrappedHook() { hook.apply(this, arguments), remove(invoker.fns, wrappedHook); } isUndef(oldHook) ? invoker = createFnInvoker([ wrappedHook ]) : isDef(oldHook.fns) && isTrue(oldHook.merged) ? (invoker = oldHook).fns.push(wrappedHook) : invoker = createFnInvoker([ oldHook, wrappedHook ]), invoker.merged = !0, def[hookKey] = invoker; } function checkProp(res, hash, key, altKey, preserve) { if (isDef(hash)) { if (hasOwn(hash, key)) return res[key] = hash[key], preserve || delete hash[key], !0; if (hasOwn(hash, altKey)) return res[key] = hash[altKey], preserve || delete hash[altKey], !0; } return !1; } function normalizeChildren(children) { return isPrimitive(children) ? [ createTextVNode(children) ] : Array.isArray(children) ? function normalizeArrayChildren(children, nestedIndex) { var i, c, lastIndex, last, res = []; for (i = 0; i < children.length; i++) isUndef(c = children[i]) || "boolean" == typeof c || (lastIndex = res.length - 1, last = res[lastIndex], Array.isArray(c) ? c.length > 0 && (isTextNode((c = normalizeArrayChildren(c, (nestedIndex || "") + "_" + i))[0]) && isTextNode(last) && (res[lastIndex] = createTextVNode(last.text + c[0].text), c.shift()), res.push.apply(res, c)) : isPrimitive(c) ? isTextNode(last) ? res[lastIndex] = createTextVNode(last.text + c) : "" !== c && res.push(createTextVNode(c)) : isTextNode(c) && isTextNode(last) ? res[lastIndex] = createTextVNode(last.text + c.text) : (isTrue(children._isVList) && isDef(c.tag) && isUndef(c.key) && isDef(nestedIndex) && (c.key = "__vlist" + nestedIndex + "_" + i + "__"), res.push(c))); return res; }(children) : void 0; } function isTextNode(node) { return isDef(node) && isDef(node.text) && !1 === node.isComment; } function resolveInject(inject, vm) { if (inject) { for (var result = Object.create(null), keys = hasSymbol ? Reflect.ownKeys(inject) : Object.keys(inject), i = 0; i < keys.length; i++) { var key = keys[i]; if ("__ob__" !== key) { for (var provideKey = inject[key].from, source = vm; source; ) { if (source._provided && hasOwn(source._provided, provideKey)) { result[key] = source._provided[provideKey]; break; } source = source.$parent; } if (!source) if ("default" in inject[key]) { var provideDefault = inject[key].default; result[key] = "function" == typeof provideDefault ? provideDefault.call(vm) : provideDefault; } else 0; } } return result; } } function resolveSlots(children, context) { if (!children || !children.length) return {}; for (var slots = {}, i = 0, l = children.length; i < l; i++) { var child = children[i], data = child.data; if (data && data.attrs && data.attrs.slot && delete data.attrs.slot, child.context !== context && child.fnContext !== context || !data || null == data.slot) (slots.default || (slots.default = [])).push(child); else { var name = data.slot, slot = slots[name] || (slots[name] = []); "template" === child.tag ? slot.push.apply(slot, child.children || []) : slot.push(child); } } for (var name$1 in slots) slots[name$1].every(isWhitespace) && delete slots[name$1]; return slots; } function isWhitespace(node) { return node.isComment && !node.asyncFactory || " " === node.text; } function normalizeScopedSlots(slots, normalSlots, prevSlots) { var res, hasNormalSlots = Object.keys(normalSlots).length > 0, isStable = slots ? !!slots.$stable : !hasNormalSlots, key = slots && slots.$key; if (slots) { if (slots._normalized) return slots._normalized; if (isStable && prevSlots && prevSlots !== emptyObject && key === prevSlots.$key && !hasNormalSlots && !prevSlots.$hasNormal) return prevSlots; for (var key$1 in res = {}, slots) slots[key$1] && "$" !== key$1[0] && (res[key$1] = normalizeScopedSlot(normalSlots, key$1, slots[key$1])); } else res = {}; for (var key$2 in normalSlots) key$2 in res || (res[key$2] = proxyNormalSlot(normalSlots, key$2)); return slots && Object.isExtensible(slots) && (slots._normalized = res), def(res, "$stable", isStable), def(res, "$key", key), def(res, "$hasNormal", hasNormalSlots), res; } function normalizeScopedSlot(normalSlots, key, fn) { var normalized = function() { var res = arguments.length ? fn.apply(null, arguments) : fn({}); return (res = res && "object" == typeof res && !Array.isArray(res) ? [ res ] : normalizeChildren(res)) && (0 === res.length || 1 === res.length && res[0].isComment) ? void 0 : res; }; return fn.proxy && Object.defineProperty(normalSlots, key, { get: normalized, enumerable: !0, configurable: !0 }), normalized; } function proxyNormalSlot(slots, key) { return function() { return slots[key]; }; } function renderList(val, render) { var ret, i, l, keys, key; if (Array.isArray(val) || "string" == typeof val) for (ret = new Array(val.length), i = 0, l = val.length; i < l; i++) ret[i] = render(val[i], i); else if ("number" == typeof val) for (ret = new Array(val), i = 0; i < val; i++) ret[i] = render(i + 1, i); else if (isObject(val)) if (hasSymbol && val[Symbol.iterator]) { ret = []; for (var iterator = val[Symbol.iterator](), result = iterator.next(); !result.done; ) ret.push(render(result.value, ret.length)), result = iterator.next(); } else for (keys = Object.keys(val), ret = new Array(keys.length), i = 0, l = keys.length; i < l; i++) key = keys[i], ret[i] = render(val[key], key, i); return isDef(ret) || (ret = []), ret._isVList = !0, ret; } function renderSlot(name, fallback, props, bindObject) { var nodes, scopedSlotFn = this.$scopedSlots[name]; scopedSlotFn ? (props = props || {}, bindObject && (props = extend(extend({}, bindObject), props)), nodes = scopedSlotFn(props) || fallback) : nodes = this.$slots[name] || fallback; var target = props && props.slot; return target ? this.$createElement("template", { slot: target }, nodes) : nodes; } function resolveFilter(id) { return resolveAsset(this.$options, "filters", id) || identity; } function isKeyNotMatch(expect, actual) { return Array.isArray(expect) ? -1 === expect.indexOf(actual) : expect !== actual; } function checkKeyCodes(eventKeyCode, key, builtInKeyCode, eventKeyName, builtInKeyName) { var mappedKeyCode = config.keyCodes[key] || builtInKeyCode; return builtInKeyName && eventKeyName && !config.keyCodes[key] ? isKeyNotMatch(builtInKeyName, eventKeyName) : mappedKeyCode ? isKeyNotMatch(mappedKeyCode, eventKeyCode) : eventKeyName ? hyphenate(eventKeyName) !== key : void 0; } function bindObjectProps(data, tag, value, asProp, isSync) { if (value) if (isObject(value)) { var hash; Array.isArray(value) && (value = toObject(value)); var loop = function(key) { if ("class" === key || "style" === key || isReservedAttribute(key)) hash = data; else { var type = data.attrs && data.attrs.type; hash = asProp || config.mustUseProp(tag, type, key) ? data.domProps || (data.domProps = {}) : data.attrs || (data.attrs = {}); } var camelizedKey = camelize(key), hyphenatedKey = hyphenate(key); camelizedKey in hash || hyphenatedKey in hash || (hash[key] = value[key], isSync && ((data.on || (data.on = {}))["update:" + key] = function($event) { value[key] = $event; })); }; for (var key in value) loop(key); } else ; return data; } function renderStatic(index, isInFor) { var cached = this._staticTrees || (this._staticTrees = []), tree = cached[index]; return tree && !isInFor ? tree : (markStatic(tree = cached[index] = this.$options.staticRenderFns[index].call(this._renderProxy, null, this), "__static__" + index, !1), tree); } function markOnce(tree, index, key) { return markStatic(tree, "__once__" + index + (key ? "_" + key : ""), !0), tree; } function markStatic(tree, key, isOnce) { if (Array.isArray(tree)) for (var i = 0; i < tree.length; i++) tree[i] && "string" != typeof tree[i] && markStaticNode(tree[i], key + "_" + i, isOnce); else markStaticNode(tree, key, isOnce); } function markStaticNode(node, key, isOnce) { node.isStatic = !0, node.key = key, node.isOnce = isOnce; } function bindObjectListeners(data, value) { if (value) if (isPlainObject(value)) { var on = data.on = data.on ? extend({}, data.on) : {}; for (var key in value) { var existing = on[key], ours = value[key]; on[key] = existing ? [].concat(existing, ours) : ours; } } else ; return data; } function resolveScopedSlots(fns, res, hasDynamicKeys, contentHashKey) { res = res || { $stable: !hasDynamicKeys }; for (var i = 0; i < fns.length; i++) { var slot = fns[i]; Array.isArray(slot) ? resolveScopedSlots(slot, res, hasDynamicKeys) : slot && (slot.proxy && (slot.fn.proxy = !0), res[slot.key] = slot.fn); } return contentHashKey && (res.$key = contentHashKey), res; } function bindDynamicKeys(baseObj, values) { for (var i = 0; i < values.length; i += 2) { var key = values[i]; "string" == typeof key && key && (baseObj[values[i]] = values[i + 1]); } return baseObj; } function prependModifier(value, symbol) { return "string" == typeof value ? symbol + value : value; } function installRenderHelpers(target) { target._o = markOnce, target._n = toNumber, target._s = toString, target._l = renderList, target._t = renderSlot, target._q = looseEqual, target._i = looseIndexOf, target._m = renderStatic, target._f = resolveFilter, target._k = checkKeyCodes, target._b = bindObjectProps, target._v = createTextVNode, target._e = createEmptyVNode, target._u = resolveScopedSlots, target._g = bindObjectListeners, target._d = bindDynamicKeys, target._p = prependModifier; } function FunctionalRenderContext(data, props, children, parent, Ctor) { var contextVm, this$1 = this, options = Ctor.options; hasOwn(parent, "_uid") ? (contextVm = Object.create(parent))._original = parent : (contextVm = parent, parent = parent._original); var isCompiled = isTrue(options._compiled), needNormalization = !isCompiled; this.data = data, this.props = props, this.children = children, this.parent = parent, this.listeners = data.on || emptyObject, this.injections = resolveInject(options.inject, parent), this.slots = function() { return this$1.$slots || normalizeScopedSlots(data.scopedSlots, this$1.$slots = resolveSlots(children, parent)), this$1.$slots; }, Object.defineProperty(this, "scopedSlots", { enumerable: !0, get: function() { return normalizeScopedSlots(data.scopedSlots, this.slots()); } }), isCompiled && (this.$options = options, this.$slots = this.slots(), this.$scopedSlots = normalizeScopedSlots(data.scopedSlots, this.$slots)), options._scopeId ? this._c = function(a, b, c, d) { var vnode = createElement(contextVm, a, b, c, d, needNormalization); return vnode && !Array.isArray(vnode) && (vnode.fnScopeId = options._scopeId, vnode.fnContext = parent), vnode; } : this._c = function(a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); }; } function cloneAndMarkFunctionalResult(vnode, data, contextVm, options, renderContext) { var clone = cloneVNode(vnode); return clone.fnContext = contextVm, clone.fnOptions = options, data.slot && ((clone.data || (clone.data = {})).slot = data.slot), clone; } function mergeProps(to, from) { for (var key in from) to[camelize(key)] = from[key]; } installRenderHelpers(FunctionalRenderContext.prototype); var componentVNodeHooks = { init: function(vnode, hydrating) { if (vnode.componentInstance && !vnode.componentInstance._isDestroyed && vnode.data.keepAlive) { var mountedNode = vnode; componentVNodeHooks.prepatch(mountedNode, mountedNode); } else { (vnode.componentInstance = function(vnode, parent) { var options = { _isComponent: !0, _parentVnode: vnode, parent: parent }, inlineTemplate = vnode.data.inlineTemplate; isDef(inlineTemplate) && (options.render = inlineTemplate.render, options.staticRenderFns = inlineTemplate.staticRenderFns); return new vnode.componentOptions.Ctor(options); }(vnode, activeInstance)).$mount(hydrating ? vnode.elm : void 0, hydrating); } }, prepatch: function(oldVnode, vnode) { var options = vnode.componentOptions; !function(vm, propsData, listeners, parentVnode, renderChildren) { 0; var newScopedSlots = parentVnode.data.scopedSlots, oldScopedSlots = vm.$scopedSlots, hasDynamicScopedSlot = !!(newScopedSlots && !newScopedSlots.$stable || oldScopedSlots !== emptyObject && !oldScopedSlots.$stable || newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key), needsForceUpdate = !!(renderChildren || vm.$options._renderChildren || hasDynamicScopedSlot); vm.$options._parentVnode = parentVnode, vm.$vnode = parentVnode, vm._vnode && (vm._vnode.parent = parentVnode); if (vm.$options._renderChildren = renderChildren, vm.$attrs = parentVnode.data.attrs || emptyObject, vm.$listeners = listeners || emptyObject, propsData && vm.$options.props) { toggleObserving(!1); for (var props = vm._props, propKeys = vm.$options._propKeys || [], i = 0; i < propKeys.length; i++) { var key = propKeys[i], propOptions = vm.$options.props; props[key] = validateProp(key, propOptions, propsData, vm); } toggleObserving(!0), vm.$options.propsData = propsData; } listeners = listeners || emptyObject; var oldListeners = vm.$options._parentListeners; vm.$options._parentListeners = listeners, updateComponentListeners(vm, listeners, oldListeners), needsForceUpdate && (vm.$slots = resolveSlots(renderChildren, parentVnode.context), vm.$forceUpdate()); 0; }(vnode.componentInstance = oldVnode.componentInstance, options.propsData, options.listeners, vnode, options.children); }, insert: function(vnode) { var vm, context = vnode.context, componentInstance = vnode.componentInstance; componentInstance._isMounted || (componentInstance._isMounted = !0, callHook(componentInstance, "mounted")), vnode.data.keepAlive && (context._isMounted ? ((vm = componentInstance)._inactive = !1, activatedChildren.push(vm)) : activateChildComponent(componentInstance, !0)); }, destroy: function(vnode) { var componentInstance = vnode.componentInstance; componentInstance._isDestroyed || (vnode.data.keepAlive ? function deactivateChildComponent(vm, direct) { if (direct && (vm._directInactive = !0, isInInactiveTree(vm))) return; if (!vm._inactive) { vm._inactive = !0; for (var i = 0; i < vm.$children.length; i++) deactivateChildComponent(vm.$children[i]); callHook(vm, "deactivated"); } }(componentInstance, !0) : componentInstance.$destroy()); } }, hooksToMerge = Object.keys(componentVNodeHooks); function createComponent(Ctor, data, context, children, tag) { if (!isUndef(Ctor)) { var baseCtor = context.$options._base; if (isObject(Ctor) && (Ctor = baseCtor.extend(Ctor)), "function" == typeof Ctor) { var asyncFactory; if (isUndef(Ctor.cid) && void 0 === (Ctor = function(factory, baseCtor) { if (isTrue(factory.error) && isDef(factory.errorComp)) return factory.errorComp; if (isDef(factory.resolved)) return factory.resolved; var owner = currentRenderingInstance; owner && isDef(factory.owners) && -1 === factory.owners.indexOf(owner) && factory.owners.push(owner); if (isTrue(factory.loading) && isDef(factory.loadingComp)) return factory.loadingComp; if (owner && !isDef(factory.owners)) { var owners = factory.owners = [ owner ], sync = !0, timerLoading = null, timerTimeout = null; owner.$on("hook:destroyed", (function() { return remove(owners, owner); })); var forceRender = function(renderCompleted) { for (var i = 0, l = owners.length; i < l; i++) owners[i].$forceUpdate(); renderCompleted && (owners.length = 0, null !== timerLoading && (clearTimeout(timerLoading), timerLoading = null), null !== timerTimeout && (clearTimeout(timerTimeout), timerTimeout = null)); }, resolve = once((function(res) { factory.resolved = ensureCtor(res, baseCtor), sync ? owners.length = 0 : forceRender(!0); })), reject = once((function(reason) { isDef(factory.errorComp) && (factory.error = !0, forceRender(!0)); })), res = factory(resolve, reject); return isObject(res) && (isPromise(res) ? isUndef(factory.resolved) && res.then(resolve, reject) : isPromise(res.component) && (res.component.then(resolve, reject), isDef(res.error) && (factory.errorComp = ensureCtor(res.error, baseCtor)), isDef(res.loading) && (factory.loadingComp = ensureCtor(res.loading, baseCtor), 0 === res.delay ? factory.loading = !0 : timerLoading = setTimeout((function() { timerLoading = null, isUndef(factory.resolved) && isUndef(factory.error) && (factory.loading = !0, forceRender(!1)); }), res.delay || 200)), isDef(res.timeout) && (timerTimeout = setTimeout((function() { timerTimeout = null, isUndef(factory.resolved) && reject(null); }), res.timeout)))), sync = !1, factory.loading ? factory.loadingComp : factory.resolved; } }(asyncFactory = Ctor, baseCtor))) return function(factory, data, context, children, tag) { var node = createEmptyVNode(); return node.asyncFactory = factory, node.asyncMeta = { data: data, context: context, children: children, tag: tag }, node; }(asyncFactory, data, context, children, tag); data = data || {}, resolveConstructorOptions(Ctor), isDef(data.model) && function(options, data) { var prop = options.model && options.model.prop || "value", event = options.model && options.model.event || "input"; (data.attrs || (data.attrs = {}))[prop] = data.model.value; var on = data.on || (data.on = {}), existing = on[event], callback = data.model.callback; isDef(existing) ? (Array.isArray(existing) ? -1 === existing.indexOf(callback) : existing !== callback) && (on[event] = [ callback ].concat(existing)) : on[event] = callback; }(Ctor.options, data); var propsData = function(data, Ctor, tag) { var propOptions = Ctor.options.props; if (!isUndef(propOptions)) { var res = {}, attrs = data.attrs, props = data.props; if (isDef(attrs) || isDef(props)) for (var key in propOptions) { var altKey = hyphenate(key); checkProp(res, props, key, altKey, !0) || checkProp(res, attrs, key, altKey, !1); } return res; } }(data, Ctor); if (isTrue(Ctor.options.functional)) return function(Ctor, propsData, data, contextVm, children) { var options = Ctor.options, props = {}, propOptions = options.props; if (isDef(propOptions)) for (var key in propOptions) props[key] = validateProp(key, propOptions, propsData || emptyObject); else isDef(data.attrs) && mergeProps(props, data.attrs), isDef(data.props) && mergeProps(props, data.props); var renderContext = new FunctionalRenderContext(data, props, children, contextVm, Ctor), vnode = options.render.call(null, renderContext._c, renderContext); if (vnode instanceof VNode) return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext); if (Array.isArray(vnode)) { for (var vnodes = normalizeChildren(vnode) || [], res = new Array(vnodes.length), i = 0; i < vnodes.length; i++) res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext); return res; } }(Ctor, propsData, data, context, children); var listeners = data.on; if (data.on = data.nativeOn, isTrue(Ctor.options.abstract)) { var slot = data.slot; data = {}, slot && (data.slot = slot); } !function(data) { for (var hooks = data.hook || (data.hook = {}), i = 0; i < hooksToMerge.length; i++) { var key = hooksToMerge[i], existing = hooks[key], toMerge = componentVNodeHooks[key]; existing === toMerge || existing && existing._merged || (hooks[key] = existing ? mergeHook$1(toMerge, existing) : toMerge); } }(data); var name = Ctor.options.name || tag; return new VNode("vue-component-" + Ctor.cid + (name ? "-" + name : ""), data, void 0, void 0, void 0, context, { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children }, asyncFactory); } } } function mergeHook$1(f1, f2) { var merged = function(a, b) { f1(a, b), f2(a, b); }; return merged._merged = !0, merged; } var SIMPLE_NORMALIZE = 1, ALWAYS_NORMALIZE = 2; function createElement(context, tag, data, children, normalizationType, alwaysNormalize) { return (Array.isArray(data) || isPrimitive(data)) && (normalizationType = children, children = data, data = void 0), isTrue(alwaysNormalize) && (normalizationType = ALWAYS_NORMALIZE), function(context, tag, data, children, normalizationType) { if (isDef(data) && isDef(data.__ob__)) return createEmptyVNode(); isDef(data) && isDef(data.is) && (tag = data.is); if (!tag) return createEmptyVNode(); 0; Array.isArray(children) && "function" == typeof children[0] && ((data = data || {}).scopedSlots = { default: children[0] }, children.length = 0); normalizationType === ALWAYS_NORMALIZE ? children = normalizeChildren(children) : normalizationType === SIMPLE_NORMALIZE && (children = function(children) { for (var i = 0; i < children.length; i++) if (Array.isArray(children[i])) return Array.prototype.concat.apply([], children); return children; }(children)); var vnode, ns; if ("string" == typeof tag) { var Ctor; ns = context.$vnode && context.$vnode.ns || config.getTagNamespace(tag), vnode = config.isReservedTag(tag) ? new VNode(config.parsePlatformTagName(tag), data, children, void 0, void 0, context) : data && data.pre || !isDef(Ctor = resolveAsset(context.$options, "components", tag)) ? new VNode(tag, data, children, void 0, void 0, context) : createComponent(Ctor, data, context, children, tag); } else vnode = createComponent(tag, data, context, children); return Array.isArray(vnode) ? vnode : isDef(vnode) ? (isDef(ns) && function applyNS(vnode, ns, force) { vnode.ns = ns, "foreignObject" === vnode.tag && (ns = void 0, force = !0); if (isDef(vnode.children)) for (var i = 0, l = vnode.children.length; i < l; i++) { var child = vnode.children[i]; isDef(child.tag) && (isUndef(child.ns) || isTrue(force) && "svg" !== child.tag) && applyNS(child, ns, force); } }(vnode, ns), isDef(data) && function(data) { isObject(data.style) && traverse(data.style); isObject(data.class) && traverse(data.class); }(data), vnode) : createEmptyVNode(); }(context, tag, data, children, normalizationType); } var target, currentRenderingInstance = null; function ensureCtor(comp, base) { return (comp.__esModule || hasSymbol && "Module" === comp[Symbol.toStringTag]) && (comp = comp.default), isObject(comp) ? base.extend(comp) : comp; } function isAsyncPlaceholder(node) { return node.isComment && node.asyncFactory; } function getFirstComponentChild(children) { if (Array.isArray(children)) for (var i = 0; i < children.length; i++) { var c = children[i]; if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) return c; } } function add(event, fn) { target.$on(event, fn); } function remove$1(event, fn) { target.$off(event, fn); } function createOnceHandler(event, fn) { var _target = target; return function onceHandler() { var res = fn.apply(null, arguments); null !== res && _target.$off(event, onceHandler); }; } function updateComponentListeners(vm, listeners, oldListeners) { target = vm, updateListeners(listeners, oldListeners || {}, add, remove$1, createOnceHandler, vm), target = void 0; } var activeInstance = null; function setActiveInstance(vm) { var prevActiveInstance = activeInstance; return activeInstance = vm, function() { activeInstance = prevActiveInstance; }; } function isInInactiveTree(vm) { for (;vm && (vm = vm.$parent); ) if (vm._inactive) return !0; return !1; } function activateChildComponent(vm, direct) { if (direct) { if (vm._directInactive = !1, isInInactiveTree(vm)) return; } else if (vm._directInactive) return; if (vm._inactive || null === vm._inactive) { vm._inactive = !1; for (var i = 0; i < vm.$children.length; i++) activateChildComponent(vm.$children[i]); callHook(vm, "activated"); } } function callHook(vm, hook) { pushTarget(); var handlers = vm.$options[hook], info = hook + " hook"; if (handlers) for (var i = 0, j = handlers.length; i < j; i++) invokeWithErrorHandling(handlers[i], vm, null, vm, info); vm._hasHookEvent && vm.$emit("hook:" + hook), popTarget(); } var queue = [], activatedChildren = [], has = {}, waiting = !1, flushing = !1, index = 0; var currentFlushTimestamp = 0, getNow = Date.now; if (inBrowser && !isIE) { var performance = window.performance; performance && "function" == typeof performance.now && getNow() > document.createEvent("Event").timeStamp && (getNow = function() { return performance.now(); }); } function flushSchedulerQueue() { var watcher, id; for (currentFlushTimestamp = getNow(), flushing = !0, queue.sort((function(a, b) { return a.id - b.id; })), index = 0; index < queue.length; index++) (watcher = queue[index]).before && watcher.before(), id = watcher.id, has[id] = null, watcher.run(); var activatedQueue = activatedChildren.slice(), updatedQueue = queue.slice(); index = queue.length = activatedChildren.length = 0, has = {}, waiting = flushing = !1, function(queue) { for (var i = 0; i < queue.length; i++) queue[i]._inactive = !0, activateChildComponent(queue[i], !0); }(activatedQueue), function(queue) { var i = queue.length; for (;i--; ) { var watcher = queue[i], vm = watcher.vm; vm._watcher === watcher && vm._isMounted && !vm._isDestroyed && callHook(vm, "updated"); } }(updatedQueue), devtools && config.devtools && devtools.emit("flush"); } var uid$2 = 0, Watcher = function(vm, expOrFn, cb, options, isRenderWatcher) { this.vm = vm, isRenderWatcher && (vm._watcher = this), vm._watchers.push(this), options ? (this.deep = !!options.deep, this.user = !!options.user, this.lazy = !!options.lazy, this.sync = !!options.sync, this.before = options.before) : this.deep = this.user = this.lazy = this.sync = !1, this.cb = cb, this.id = ++uid$2, this.active = !0, this.dirty = this.lazy, this.deps = [], this.newDeps = [], this.depIds = new _Set, this.newDepIds = new _Set, this.expression = "", "function" == typeof expOrFn ? this.getter = expOrFn : (this.getter = function(path) { if (!bailRE.test(path)) { var segments = path.split("."); return function(obj) { for (var i = 0; i < segments.length; i++) { if (!obj) return; obj = obj[segments[i]]; } return obj; }; } }(expOrFn), this.getter || (this.getter = noop)), this.value = this.lazy ? void 0 : this.get(); }; Watcher.prototype.get = function() { var value; pushTarget(this); var vm = this.vm; try { value = this.getter.call(vm, vm); } catch (e) { if (!this.user) throw e; handleError(e, vm, 'getter for watcher "' + this.expression + '"'); } finally { this.deep && traverse(value), popTarget(), this.cleanupDeps(); } return value; }, Watcher.prototype.addDep = function(dep) { var id = dep.id; this.newDepIds.has(id) || (this.newDepIds.add(id), this.newDeps.push(dep), this.depIds.has(id) || dep.addSub(this)); }, Watcher.prototype.cleanupDeps = function() { for (var i = this.deps.length; i--; ) { var dep = this.deps[i]; this.newDepIds.has(dep.id) || dep.removeSub(this); } var tmp = this.depIds; this.depIds = this.newDepIds, this.newDepIds = tmp, this.newDepIds.clear(), tmp = this.deps, this.deps = this.newDeps, this.newDeps = tmp, this.newDeps.length = 0; }, Watcher.prototype.update = function() { this.lazy ? this.dirty = !0 : this.sync ? this.run() : function(watcher) { var id = watcher.id; if (null == has[id]) { if (has[id] = !0, flushing) { for (var i = queue.length - 1; i > index && queue[i].id > watcher.id; ) i--; queue.splice(i + 1, 0, watcher); } else queue.push(watcher); waiting || (waiting = !0, nextTick(flushSchedulerQueue)); } }(this); }, Watcher.prototype.run = function() { if (this.active) { var value = this.get(); if (value !== this.value || isObject(value) || this.deep) { var oldValue = this.value; if (this.value = value, this.user) try { this.cb.call(this.vm, value, oldValue); } catch (e) { handleError(e, this.vm, 'callback for watcher "' + this.expression + '"'); } else this.cb.call(this.vm, value, oldValue); } } }, Watcher.prototype.evaluate = function() { this.value = this.get(), this.dirty = !1; }, Watcher.prototype.depend = function() { for (var i = this.deps.length; i--; ) this.deps[i].depend(); }, Watcher.prototype.teardown = function() { if (this.active) { this.vm._isBeingDestroyed || remove(this.vm._watchers, this); for (var i = this.deps.length; i--; ) this.deps[i].removeSub(this); this.active = !1; } }; var sharedPropertyDefinition = { enumerable: !0, configurable: !0, get: noop, set: noop }; function proxy(target, sourceKey, key) { sharedPropertyDefinition.get = function() { return this[sourceKey][key]; }, sharedPropertyDefinition.set = function(val) { this[sourceKey][key] = val; }, Object.defineProperty(target, key, sharedPropertyDefinition); } function initState(vm) { vm._watchers = []; var opts = vm.$options; opts.props && function(vm, propsOptions) { var propsData = vm.$options.propsData || {}, props = vm._props = {}, keys = vm.$options._propKeys = []; vm.$parent && toggleObserving(!1); var loop = function(key) { keys.push(key); var value = validateProp(key, propsOptions, propsData, vm); defineReactive$$1(props, key, value), key in vm || proxy(vm, "_props", key); }; for (var key in propsOptions) loop(key); toggleObserving(!0); }(vm, opts.props), opts.methods && function(vm, methods) { vm.$options.props; for (var key in methods) vm[key] = "function" != typeof methods[key] ? noop : bind(methods[key], vm); }(vm, opts.methods), opts.data ? function(vm) { var data = vm.$options.data; isPlainObject(data = vm._data = "function" == typeof data ? function(data, vm) { pushTarget(); try { return data.call(vm, vm); } catch (e) { return handleError(e, vm, "data()"), {}; } finally { popTarget(); } }(data, vm) : data || {}) || (data = {}); var keys = Object.keys(data), props = vm.$options.props, i = (vm.$options.methods, keys.length); for (;i--; ) { var key = keys[i]; 0, props && hasOwn(props, key) || isReserved(key) || proxy(vm, "_data", key); } observe(data, !0); }(vm) : observe(vm._data = {}, !0), opts.computed && function(vm, computed) { var watchers = vm._computedWatchers = Object.create(null), isSSR = isServerRendering(); for (var key in computed) { var userDef = computed[key], getter = "function" == typeof userDef ? userDef : userDef.get; 0, isSSR || (watchers[key] = new Watcher(vm, getter || noop, noop, computedWatcherOptions)), key in vm || defineComputed(vm, key, userDef); } }(vm, opts.computed), opts.watch && opts.watch !== nativeWatch && function(vm, watch) { for (var key in watch) { var handler = watch[key]; if (Array.isArray(handler)) for (var i = 0; i < handler.length; i++) createWatcher(vm, key, handler[i]); else createWatcher(vm, key, handler); } }(vm, opts.watch); } var computedWatcherOptions = { lazy: !0 }; function defineComputed(target, key, userDef) { var shouldCache = !isServerRendering(); "function" == typeof userDef ? (sharedPropertyDefinition.get = shouldCache ? createComputedGetter(key) : createGetterInvoker(userDef), sharedPropertyDefinition.set = noop) : (sharedPropertyDefinition.get = userDef.get ? shouldCache && !1 !== userDef.cache ? createComputedGetter(key) : createGetterInvoker(userDef.get) : noop, sharedPropertyDefinition.set = userDef.set || noop), Object.defineProperty(target, key, sharedPropertyDefinition); } function createComputedGetter(key) { return function() { var watcher = this._computedWatchers && this._computedWatchers[key]; if (watcher) return watcher.dirty && watcher.evaluate(), Dep.target && watcher.depend(), watcher.value; }; } function createGetterInvoker(fn) { return function() { return fn.call(this, this); }; } function createWatcher(vm, expOrFn, handler, options) { return isPlainObject(handler) && (options = handler, handler = handler.handler), "string" == typeof handler && (handler = vm[handler]), vm.$watch(expOrFn, handler, options); } var uid$3 = 0; function resolveConstructorOptions(Ctor) { var options = Ctor.options; if (Ctor.super) { var superOptions = resolveConstructorOptions(Ctor.super); if (superOptions !== Ctor.superOptions) { Ctor.superOptions = superOptions; var modifiedOptions = function(Ctor) { var modified, latest = Ctor.options, sealed = Ctor.sealedOptions; for (var key in latest) latest[key] !== sealed[key] && (modified || (modified = {}), modified[key] = latest[key]); return modified; }(Ctor); modifiedOptions && extend(Ctor.extendOptions, modifiedOptions), (options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions)).name && (options.components[options.name] = Ctor); } } return options; } function Vue(options) { this._init(options); } function initExtend(Vue) { Vue.cid = 0; var cid = 1; Vue.extend = function(extendOptions) { extendOptions = extendOptions || {}; var Super = this, SuperId = Super.cid, cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {}); if (cachedCtors[SuperId]) return cachedCtors[SuperId]; var name = extendOptions.name || Super.options.name; var Sub = function(options) { this._init(options); }; return (Sub.prototype = Object.create(Super.prototype)).constructor = Sub, Sub.cid = cid++, Sub.options = mergeOptions(Super.options, extendOptions), Sub.super = Super, Sub.options.props && function(Comp) { var props = Comp.options.props; for (var key in props) proxy(Comp.prototype, "_props", key); }(Sub), Sub.options.computed && function(Comp) { var computed = Comp.options.computed; for (var key in computed) defineComputed(Comp.prototype, key, computed[key]); }(Sub), Sub.extend = Super.extend, Sub.mixin = Super.mixin, Sub.use = Super.use, ASSET_TYPES.forEach((function(type) { Sub[type] = Super[type]; })), name && (Sub.options.components[name] = Sub), Sub.superOptions = Super.options, Sub.extendOptions = extendOptions, Sub.sealedOptions = extend({}, Sub.options), cachedCtors[SuperId] = Sub, Sub; }; } function getComponentName(opts) { return opts && (opts.Ctor.options.name || opts.tag); } function matches(pattern, name) { return Array.isArray(pattern) ? pattern.indexOf(name) > -1 : "string" == typeof pattern ? pattern.split(",").indexOf(name) > -1 : !!isRegExp(pattern) && pattern.test(name); } function pruneCache(keepAliveInstance, filter) { var cache = keepAliveInstance.cache, keys = keepAliveInstance.keys, _vnode = keepAliveInstance._vnode; for (var key in cache) { var cachedNode = cache[key]; if (cachedNode) { var name = getComponentName(cachedNode.componentOptions); name && !filter(name) && pruneCacheEntry(cache, key, keys, _vnode); } } } function pruneCacheEntry(cache, key, keys, current) { var cached$$1 = cache[key]; !cached$$1 || current && cached$$1.tag === current.tag || cached$$1.componentInstance.$destroy(), cache[key] = null, remove(keys, key); } !function(Vue) { Vue.prototype._init = function(options) { var vm = this; vm._uid = uid$3++, vm._isVue = !0, options && options._isComponent ? function(vm, options) { var opts = vm.$options = Object.create(vm.constructor.options), parentVnode = options._parentVnode; opts.parent = options.parent, opts._parentVnode = parentVnode; var vnodeComponentOptions = parentVnode.componentOptions; opts.propsData = vnodeComponentOptions.propsData, opts._parentListeners = vnodeComponentOptions.listeners, opts._renderChildren = vnodeComponentOptions.children, opts._componentTag = vnodeComponentOptions.tag, options.render && (opts.render = options.render, opts.staticRenderFns = options.staticRenderFns); }(vm, options) : vm.$options = mergeOptions(resolveConstructorOptions(vm.constructor), options || {}, vm), vm._renderProxy = vm, vm._self = vm, function(vm) { var options = vm.$options, parent = options.parent; if (parent && !options.abstract) { for (;parent.$options.abstract && parent.$parent; ) parent = parent.$parent; parent.$children.push(vm); } vm.$parent = parent, vm.$root = parent ? parent.$root : vm, vm.$children = [], vm.$refs = {}, vm._watcher = null, vm._inactive = null, vm._directInactive = !1, vm._isMounted = !1, vm._isDestroyed = !1, vm._isBeingDestroyed = !1; }(vm), function(vm) { vm._events = Object.create(null), vm._hasHookEvent = !1; var listeners = vm.$options._parentListeners; listeners && updateComponentListeners(vm, listeners); }(vm), function(vm) { vm._vnode = null, vm._staticTrees = null; var options = vm.$options, parentVnode = vm.$vnode = options._parentVnode, renderContext = parentVnode && parentVnode.context; vm.$slots = resolveSlots(options._renderChildren, renderContext), vm.$scopedSlots = emptyObject, vm._c = function(a, b, c, d) { return createElement(vm, a, b, c, d, !1); }, vm.$createElement = function(a, b, c, d) { return createElement(vm, a, b, c, d, !0); }; var parentData = parentVnode && parentVnode.data; defineReactive$$1(vm, "$attrs", parentData && parentData.attrs || emptyObject, null, !0), defineReactive$$1(vm, "$listeners", options._parentListeners || emptyObject, null, !0); }(vm), callHook(vm, "beforeCreate"), function(vm) { var result = resolveInject(vm.$options.inject, vm); result && (toggleObserving(!1), Object.keys(result).forEach((function(key) { defineReactive$$1(vm, key, result[key]); })), toggleObserving(!0)); }(vm), initState(vm), function(vm) { var provide = vm.$options.provide; provide && (vm._provided = "function" == typeof provide ? provide.call(vm) : provide); }(vm), callHook(vm, "created"), vm.$options.el && vm.$mount(vm.$options.el); }; }(Vue), function(Vue) { var dataDef = { get: function() { return this._data; } }, propsDef = { get: function() { return this._props; } }; Object.defineProperty(Vue.prototype, "$data", dataDef), Object.defineProperty(Vue.prototype, "$props", propsDef), Vue.prototype.$set = set, Vue.prototype.$delete = del, Vue.prototype.$watch = function(expOrFn, cb, options) { if (isPlainObject(cb)) return createWatcher(this, expOrFn, cb, options); (options = options || {}).user = !0; var watcher = new Watcher(this, expOrFn, cb, options); if (options.immediate) try { cb.call(this, watcher.value); } catch (error) { handleError(error, this, 'callback for immediate watcher "' + watcher.expression + '"'); } return function() { watcher.teardown(); }; }; }(Vue), function(Vue) { var hookRE = /^hook:/; Vue.prototype.$on = function(event, fn) { var vm = this; if (Array.isArray(event)) for (var i = 0, l = event.length; i < l; i++) vm.$on(event[i], fn); else (vm._events[event] || (vm._events[event] = [])).push(fn), hookRE.test(event) && (vm._hasHookEvent = !0); return vm; }, Vue.prototype.$once = function(event, fn) { var vm = this; function on() { vm.$off(event, on), fn.apply(vm, arguments); } return on.fn = fn, vm.$on(event, on), vm; }, Vue.prototype.$off = function(event, fn) { var vm = this; if (!arguments.length) return vm._events = Object.create(null), vm; if (Array.isArray(event)) { for (var i$1 = 0, l = event.length; i$1 < l; i$1++) vm.$off(event[i$1], fn); return vm; } var cb, cbs = vm._events[event]; if (!cbs) return vm; if (!fn) return vm._events[event] = null, vm; for (var i = cbs.length; i--; ) if ((cb = cbs[i]) === fn || cb.fn === fn) { cbs.splice(i, 1); break; } return vm; }, Vue.prototype.$emit = function(event) { var vm = this, cbs = vm._events[event]; if (cbs) { cbs = cbs.length > 1 ? toArray(cbs) : cbs; for (var args = toArray(arguments, 1), info = 'event handler for "' + event + '"', i = 0, l = cbs.length; i < l; i++) invokeWithErrorHandling(cbs[i], vm, args, vm, info); } return vm; }; }(Vue), function(Vue) { Vue.prototype._update = function(vnode, hydrating) { var vm = this, prevEl = vm.$el, prevVnode = vm._vnode, restoreActiveInstance = setActiveInstance(vm); vm._vnode = vnode, vm.$el = prevVnode ? vm.__patch__(prevVnode, vnode) : vm.__patch__(vm.$el, vnode, hydrating, !1), restoreActiveInstance(), prevEl && (prevEl.__vue__ = null), vm.$el && (vm.$el.__vue__ = vm), vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode && (vm.$parent.$el = vm.$el); }, Vue.prototype.$forceUpdate = function() { this._watcher && this._watcher.update(); }, Vue.prototype.$destroy = function() { var vm = this; if (!vm._isBeingDestroyed) { callHook(vm, "beforeDestroy"), vm._isBeingDestroyed = !0; var parent = vm.$parent; !parent || parent._isBeingDestroyed || vm.$options.abstract || remove(parent.$children, vm), vm._watcher && vm._watcher.teardown(); for (var i = vm._watchers.length; i--; ) vm._watchers[i].teardown(); vm._data.__ob__ && vm._data.__ob__.vmCount--, vm._isDestroyed = !0, vm.__patch__(vm._vnode, null), callHook(vm, "destroyed"), vm.$off(), vm.$el && (vm.$el.__vue__ = null), vm.$vnode && (vm.$vnode.parent = null); } }; }(Vue), function(Vue) { installRenderHelpers(Vue.prototype), Vue.prototype.$nextTick = function(fn) { return nextTick(fn, this); }, Vue.prototype._render = function() { var vnode, vm = this, ref = vm.$options, render = ref.render, _parentVnode = ref._parentVnode; _parentVnode && (vm.$scopedSlots = normalizeScopedSlots(_parentVnode.data.scopedSlots, vm.$slots, vm.$scopedSlots)), vm.$vnode = _parentVnode; try { currentRenderingInstance = vm, vnode = render.call(vm._renderProxy, vm.$createElement); } catch (e) { handleError(e, vm, "render"), vnode = vm._vnode; } finally { currentRenderingInstance = null; } return Array.isArray(vnode) && 1 === vnode.length && (vnode = vnode[0]), vnode instanceof VNode || (vnode = createEmptyVNode()), vnode.parent = _parentVnode, vnode; }; }(Vue); var patternTypes = [ String, RegExp, Array ], builtInComponents = { KeepAlive: { name: "keep-alive", abstract: !0, props: { include: patternTypes, exclude: patternTypes, max: [ String, Number ] }, created: function() { this.cache = Object.create(null), this.keys = []; }, destroyed: function() { for (var key in this.cache) pruneCacheEntry(this.cache, key, this.keys); }, mounted: function() { var this$1 = this; this.$watch("include", (function(val) { pruneCache(this$1, (function(name) { return matches(val, name); })); })), this.$watch("exclude", (function(val) { pruneCache(this$1, (function(name) { return !matches(val, name); })); })); }, render: function() { var slot = this.$slots.default, vnode = getFirstComponentChild(slot), componentOptions = vnode && vnode.componentOptions; if (componentOptions) { var name = getComponentName(componentOptions), include = this.include, exclude = this.exclude; if (include && (!name || !matches(include, name)) || exclude && name && matches(exclude, name)) return vnode; var cache = this.cache, keys = this.keys, key = null == vnode.key ? componentOptions.Ctor.cid + (componentOptions.tag ? "::" + componentOptions.tag : "") : vnode.key; cache[key] ? (vnode.componentInstance = cache[key].componentInstance, remove(keys, key), keys.push(key)) : (cache[key] = vnode, keys.push(key), this.max && keys.length > parseInt(this.max) && pruneCacheEntry(cache, keys[0], keys, this._vnode)), vnode.data.keepAlive = !0; } return vnode || slot && slot[0]; } } }; !function(Vue) { var configDef = { get: function() { return config; } }; Object.defineProperty(Vue, "config", configDef), Vue.util = { warn: warn, extend: extend, mergeOptions: mergeOptions, defineReactive: defineReactive$$1 }, Vue.set = set, Vue.delete = del, Vue.nextTick = nextTick, Vue.observable = function(obj) { return observe(obj), obj; }, Vue.options = Object.create(null), ASSET_TYPES.forEach((function(type) { Vue.options[type + "s"] = Object.create(null); })), Vue.options._base = Vue, extend(Vue.options.components, builtInComponents), function(Vue) { Vue.use = function(plugin) { var installedPlugins = this._installedPlugins || (this._installedPlugins = []); if (installedPlugins.indexOf(plugin) > -1) return this; var args = toArray(arguments, 1); return args.unshift(this), "function" == typeof plugin.install ? plugin.install.apply(plugin, args) : "function" == typeof plugin && plugin.apply(null, args), installedPlugins.push(plugin), this; }; }(Vue), function(Vue) { Vue.mixin = function(mixin) { return this.options = mergeOptions(this.options, mixin), this; }; }(Vue), initExtend(Vue), function(Vue) { ASSET_TYPES.forEach((function(type) { Vue[type] = function(id, definition) { return definition ? ("component" === type && isPlainObject(definition) && (definition.name = definition.name || id, definition = this.options._base.extend(definition)), "directive" === type && "function" == typeof definition && (definition = { bind: definition, update: definition }), this.options[type + "s"][id] = definition, definition) : this.options[type + "s"][id]; }; })); }(Vue); }(Vue), Object.defineProperty(Vue.prototype, "$isServer", { get: isServerRendering }), Object.defineProperty(Vue.prototype, "$ssrContext", { get: function() { return this.$vnode && this.$vnode.ssrContext; } }), Object.defineProperty(Vue, "FunctionalRenderContext", { value: FunctionalRenderContext }), Vue.version = "2.6.10"; var isReservedAttr = makeMap("style,class"), acceptValue = makeMap("input,textarea,option,select,progress"), mustUseProp = function(tag, type, attr) { return "value" === attr && acceptValue(tag) && "button" !== type || "selected" === attr && "option" === tag || "checked" === attr && "input" === tag || "muted" === attr && "video" === tag; }, isEnumeratedAttr = makeMap("contenteditable,draggable,spellcheck"), isValidContentEditableValue = makeMap("events,caret,typing,plaintext-only"), convertEnumeratedValue = function(key, value) { return isFalsyAttrValue(value) || "false" === value ? "false" : "contenteditable" === key && isValidContentEditableValue(value) ? value : "true"; }, isBooleanAttr = makeMap("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"), xlinkNS = "http://www.w3.org/1999/xlink", isXlink = function(name) { return ":" === name.charAt(5) && "xlink" === name.slice(0, 5); }, getXlinkProp = function(name) { return isXlink(name) ? name.slice(6, name.length) : ""; }, isFalsyAttrValue = function(val) { return null == val || !1 === val; }; function genClassForVnode(vnode) { for (var data = vnode.data, parentNode = vnode, childNode = vnode; isDef(childNode.componentInstance); ) (childNode = childNode.componentInstance._vnode) && childNode.data && (data = mergeClassData(childNode.data, data)); for (;isDef(parentNode = parentNode.parent); ) parentNode && parentNode.data && (data = mergeClassData(data, parentNode.data)); return function(staticClass, dynamicClass) { if (isDef(staticClass) || isDef(dynamicClass)) return concat(staticClass, stringifyClass(dynamicClass)); return ""; }(data.staticClass, data.class); } function mergeClassData(child, parent) { return { staticClass: concat(child.staticClass, parent.staticClass), class: isDef(child.class) ? [ child.class, parent.class ] : parent.class }; } function concat(a, b) { return a ? b ? a + " " + b : a : b || ""; } function stringifyClass(value) { return Array.isArray(value) ? function(value) { for (var stringified, res = "", i = 0, l = value.length; i < l; i++) isDef(stringified = stringifyClass(value[i])) && "" !== stringified && (res && (res += " "), res += stringified); return res; }(value) : isObject(value) ? function(value) { var res = ""; for (var key in value) value[key] && (res && (res += " "), res += key); return res; }(value) : "string" == typeof value ? value : ""; } var namespaceMap = { svg: "http://www.w3.org/2000/svg", math: "http://www.w3.org/1998/Math/MathML" }, isHTMLTag = makeMap("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"), isSVG = makeMap("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view", !0), isReservedTag = function(tag) { return isHTMLTag(tag) || isSVG(tag); }; function getTagNamespace(tag) { return isSVG(tag) ? "svg" : "math" === tag ? "math" : void 0; } var unknownElementCache = Object.create(null); var isTextInputType = makeMap("text,number,password,search,email,tel,url"); function query(el) { if ("string" == typeof el) { var selected = document.querySelector(el); return selected || document.createElement("div"); } return el; } var nodeOps = Object.freeze({ createElement: function(tagName, vnode) { var elm = document.createElement(tagName); return "select" !== tagName ? elm : (vnode.data && vnode.data.attrs && void 0 !== vnode.data.attrs.multiple && elm.setAttribute("multiple", "multiple"), elm); }, createElementNS: function(namespace, tagName) { return document.createElementNS(namespaceMap[namespace], tagName); }, createTextNode: function(text) { return document.createTextNode(text); }, createComment: function(text) { return document.createComment(text); }, insertBefore: function(parentNode, newNode, referenceNode) { parentNode.insertBefore(newNode, referenceNode); }, removeChild: function(node, child) { node.removeChild(child); }, appendChild: function(node, child) { node.appendChild(child); }, parentNode: function(node) { return node.parentNode; }, nextSibling: function(node) { return node.nextSibling; }, tagName: function(node) { return node.tagName; }, setTextContent: function(node, text) { node.textContent = text; }, setStyleScope: function(node, scopeId) { node.setAttribute(scopeId, ""); } }), ref = { create: function(_, vnode) { registerRef(vnode); }, update: function(oldVnode, vnode) { oldVnode.data.ref !== vnode.data.ref && (registerRef(oldVnode, !0), registerRef(vnode)); }, destroy: function(vnode) { registerRef(vnode, !0); } }; function registerRef(vnode, isRemoval) { var key = vnode.data.ref; if (isDef(key)) { var vm = vnode.context, ref = vnode.componentInstance || vnode.elm, refs = vm.$refs; isRemoval ? Array.isArray(refs[key]) ? remove(refs[key], ref) : refs[key] === ref && (refs[key] = void 0) : vnode.data.refInFor ? Array.isArray(refs[key]) ? refs[key].indexOf(ref) < 0 && refs[key].push(ref) : refs[key] = [ ref ] : refs[key] = ref; } } var emptyNode = new VNode("", {}, []), hooks = [ "create", "activate", "update", "remove", "destroy" ]; function sameVnode(a, b) { return a.key === b.key && (a.tag === b.tag && a.isComment === b.isComment && isDef(a.data) === isDef(b.data) && function(a, b) { if ("input" !== a.tag) return !0; var i, typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type, typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type; return typeA === typeB || isTextInputType(typeA) && isTextInputType(typeB); }(a, b) || isTrue(a.isAsyncPlaceholder) && a.asyncFactory === b.asyncFactory && isUndef(b.asyncFactory.error)); } function createKeyToOldIdx(children, beginIdx, endIdx) { var i, key, map = {}; for (i = beginIdx; i <= endIdx; ++i) isDef(key = children[i].key) && (map[key] = i); return map; } var directives = { create: updateDirectives, update: updateDirectives, destroy: function(vnode) { updateDirectives(vnode, emptyNode); } }; function updateDirectives(oldVnode, vnode) { (oldVnode.data.directives || vnode.data.directives) && function(oldVnode, vnode) { var key, oldDir, dir, isCreate = oldVnode === emptyNode, isDestroy = vnode === emptyNode, oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context), newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context), dirsWithInsert = [], dirsWithPostpatch = []; for (key in newDirs) oldDir = oldDirs[key], dir = newDirs[key], oldDir ? (dir.oldValue = oldDir.value, dir.oldArg = oldDir.arg, callHook$1(dir, "update", vnode, oldVnode), dir.def && dir.def.componentUpdated && dirsWithPostpatch.push(dir)) : (callHook$1(dir, "bind", vnode, oldVnode), dir.def && dir.def.inserted && dirsWithInsert.push(dir)); if (dirsWithInsert.length) { var callInsert = function() { for (var i = 0; i < dirsWithInsert.length; i++) callHook$1(dirsWithInsert[i], "inserted", vnode, oldVnode); }; isCreate ? mergeVNodeHook(vnode, "insert", callInsert) : callInsert(); } dirsWithPostpatch.length && mergeVNodeHook(vnode, "postpatch", (function() { for (var i = 0; i < dirsWithPostpatch.length; i++) callHook$1(dirsWithPostpatch[i], "componentUpdated", vnode, oldVnode); })); if (!isCreate) for (key in oldDirs) newDirs[key] || callHook$1(oldDirs[key], "unbind", oldVnode, oldVnode, isDestroy); }(oldVnode, vnode); } var emptyModifiers = Object.create(null); function normalizeDirectives$1(dirs, vm) { var i, dir, res = Object.create(null); if (!dirs) return res; for (i = 0; i < dirs.length; i++) (dir = dirs[i]).modifiers || (dir.modifiers = emptyModifiers), res[getRawDirName(dir)] = dir, dir.def = resolveAsset(vm.$options, "directives", dir.name); return res; } function getRawDirName(dir) { return dir.rawName || dir.name + "." + Object.keys(dir.modifiers || {}).join("."); } function callHook$1(dir, hook, vnode, oldVnode, isDestroy) { var fn = dir.def && dir.def[hook]; if (fn) try { fn(vnode.elm, dir, vnode, oldVnode, isDestroy); } catch (e) { handleError(e, vnode.context, "directive " + dir.name + " " + hook + " hook"); } } var baseModules = [ ref, directives ]; function updateAttrs(oldVnode, vnode) { var opts = vnode.componentOptions; if (!(isDef(opts) && !1 === opts.Ctor.options.inheritAttrs || isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs))) { var key, cur, elm = vnode.elm, oldAttrs = oldVnode.data.attrs || {}, attrs = vnode.data.attrs || {}; for (key in isDef(attrs.__ob__) && (attrs = vnode.data.attrs = extend({}, attrs)), attrs) cur = attrs[key], oldAttrs[key] !== cur && setAttr(elm, key, cur); for (key in (isIE || isEdge) && attrs.value !== oldAttrs.value && setAttr(elm, "value", attrs.value), oldAttrs) isUndef(attrs[key]) && (isXlink(key) ? elm.removeAttributeNS(xlinkNS, getXlinkProp(key)) : isEnumeratedAttr(key) || elm.removeAttribute(key)); } } function setAttr(el, key, value) { el.tagName.indexOf("-") > -1 ? baseSetAttr(el, key, value) : isBooleanAttr(key) ? isFalsyAttrValue(value) ? el.removeAttribute(key) : (value = "allowfullscreen" === key && "EMBED" === el.tagName ? "true" : key, el.setAttribute(key, value)) : isEnumeratedAttr(key) ? el.setAttribute(key, convertEnumeratedValue(key, value)) : isXlink(key) ? isFalsyAttrValue(value) ? el.removeAttributeNS(xlinkNS, getXlinkProp(key)) : el.setAttributeNS(xlinkNS, key, value) : baseSetAttr(el, key, value); } function baseSetAttr(el, key, value) { if (isFalsyAttrValue(value)) el.removeAttribute(key); else { if (isIE && !isIE9 && "TEXTAREA" === el.tagName && "placeholder" === key && "" !== value && !el.__ieph) { var blocker = function(e) { e.stopImmediatePropagation(), el.removeEventListener("input", blocker); }; el.addEventListener("input", blocker), el.__ieph = !0; } el.setAttribute(key, value); } } var attrs = { create: updateAttrs, update: updateAttrs }; function updateClass(oldVnode, vnode) { var el = vnode.elm, data = vnode.data, oldData = oldVnode.data; if (!(isUndef(data.staticClass) && isUndef(data.class) && (isUndef(oldData) || isUndef(oldData.staticClass) && isUndef(oldData.class)))) { var cls = genClassForVnode(vnode), transitionClass = el._transitionClasses; isDef(transitionClass) && (cls = concat(cls, stringifyClass(transitionClass))), cls !== el._prevClass && (el.setAttribute("class", cls), el._prevClass = cls); } } var len, str, chr, index$1, expressionPos, expressionEndPos, klass = { create: updateClass, update: updateClass }, validDivisionCharRE = /[\w).+\-_$\]]/; function parseFilters(exp) { var c, prev, i, expression, filters, inSingle = !1, inDouble = !1, inTemplateString = !1, inRegex = !1, curly = 0, square = 0, paren = 0, lastFilterIndex = 0; for (i = 0; i < exp.length; i++) if (prev = c, c = exp.charCodeAt(i), inSingle) 39 === c && 92 !== prev && (inSingle = !1); else if (inDouble) 34 === c && 92 !== prev && (inDouble = !1); else if (inTemplateString) 96 === c && 92 !== prev && (inTemplateString = !1); else if (inRegex) 47 === c && 92 !== prev && (inRegex = !1); else if (124 !== c || 124 === exp.charCodeAt(i + 1) || 124 === exp.charCodeAt(i - 1) || curly || square || paren) { switch (c) { case 34: inDouble = !0; break; case 39: inSingle = !0; break; case 96: inTemplateString = !0; break; case 40: paren++; break; case 41: paren--; break; case 91: square++; break; case 93: square--; break; case 123: curly++; break; case 125: curly--; } if (47 === c) { for (var j = i - 1, p = void 0; j >= 0 && " " === (p = exp.charAt(j)); j--) ; p && validDivisionCharRE.test(p) || (inRegex = !0); } } else void 0 === expression ? (lastFilterIndex = i + 1, expression = exp.slice(0, i).trim()) : pushFilter(); function pushFilter() { (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim()), lastFilterIndex = i + 1; } if (void 0 === expression ? expression = exp.slice(0, i).trim() : 0 !== lastFilterIndex && pushFilter(), filters) for (i = 0; i < filters.length; i++) expression = wrapFilter(expression, filters[i]); return expression; } function wrapFilter(exp, filter) { var i = filter.indexOf("("); if (i < 0) return '_f("' + filter + '")(' + exp + ")"; var name = filter.slice(0, i), args = filter.slice(i + 1); return '_f("' + name + '")(' + exp + (")" !== args ? "," + args : args); } function baseWarn(msg, range) { console.error("[Vue compiler]: " + msg); } function pluckModuleFunction(modules, key) { return modules ? modules.map((function(m) { return m[key]; })).filter((function(_) { return _; })) : []; } function addProp(el, name, value, range, dynamic) { (el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range)), el.plain = !1; } function addAttr(el, name, value, range, dynamic) { (dynamic ? el.dynamicAttrs || (el.dynamicAttrs = []) : el.attrs || (el.attrs = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range)), el.plain = !1; } function addRawAttr(el, name, value, range) { el.attrsMap[name] = value, el.attrsList.push(rangeSetItem({ name: name, value: value }, range)); } function addDirective(el, name, rawName, value, arg, isDynamicArg, modifiers, range) { (el.directives || (el.directives = [])).push(rangeSetItem({ name: name, rawName: rawName, value: value, arg: arg, isDynamicArg: isDynamicArg, modifiers: modifiers }, range)), el.plain = !1; } function prependModifierMarker(symbol, name, dynamic) { return dynamic ? "_p(" + name + ',"' + symbol + '")' : symbol + name; } function addHandler(el, name, value, modifiers, important, warn, range, dynamic) { var events; (modifiers = modifiers || emptyObject).right ? dynamic ? name = "(" + name + ")==='click'?'contextmenu':(" + name + ")" : "click" === name && (name = "contextmenu", delete modifiers.right) : modifiers.middle && (dynamic ? name = "(" + name + ")==='click'?'mouseup':(" + name + ")" : "click" === name && (name = "mouseup")), modifiers.capture && (delete modifiers.capture, name = prependModifierMarker("!", name, dynamic)), modifiers.once && (delete modifiers.once, name = prependModifierMarker("~", name, dynamic)), modifiers.passive && (delete modifiers.passive, name = prependModifierMarker("&", name, dynamic)), modifiers.native ? (delete modifiers.native, events = el.nativeEvents || (el.nativeEvents = {})) : events = el.events || (el.events = {}); var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range); modifiers !== emptyObject && (newHandler.modifiers = modifiers); var handlers = events[name]; Array.isArray(handlers) ? important ? handlers.unshift(newHandler) : handlers.push(newHandler) : events[name] = handlers ? important ? [ newHandler, handlers ] : [ handlers, newHandler ] : newHandler, el.plain = !1; } function getBindingAttr(el, name, getStatic) { var dynamicValue = getAndRemoveAttr(el, ":" + name) || getAndRemoveAttr(el, "v-bind:" + name); if (null != dynamicValue) return parseFilters(dynamicValue); if (!1 !== getStatic) { var staticValue = getAndRemoveAttr(el, name); if (null != staticValue) return JSON.stringify(staticValue); } } function getAndRemoveAttr(el, name, removeFromMap) { var val; if (null != (val = el.attrsMap[name])) for (var list = el.attrsList, i = 0, l = list.length; i < l; i++) if (list[i].name === name) { list.splice(i, 1); break; } return removeFromMap && delete el.attrsMap[name], val; } function getAndRemoveAttrByRegex(el, name) { for (var list = el.attrsList, i = 0, l = list.length; i < l; i++) { var attr = list[i]; if (name.test(attr.name)) return list.splice(i, 1), attr; } } function rangeSetItem(item, range) { return range && (null != range.start && (item.start = range.start), null != range.end && (item.end = range.end)), item; } function genComponentModel(el, value, modifiers) { var ref = modifiers || {}, number = ref.number, valueExpression = "$$v"; ref.trim && (valueExpression = "(typeof $$v === 'string'? $$v.trim(): $$v)"), number && (valueExpression = "_n(" + valueExpression + ")"); var assignment = genAssignmentCode(value, valueExpression); el.model = { value: "(" + value + ")", expression: JSON.stringify(value), callback: "function ($$v) {" + assignment + "}" }; } function genAssignmentCode(value, assignment) { var res = function(val) { if (val = val.trim(), len = val.length, val.indexOf("[") < 0 || val.lastIndexOf("]") < len - 1) return (index$1 = val.lastIndexOf(".")) > -1 ? { exp: val.slice(0, index$1), key: '"' + val.slice(index$1 + 1) + '"' } : { exp: val, key: null }; str = val, index$1 = expressionPos = expressionEndPos = 0; for (;!eof(); ) isStringStart(chr = next()) ? parseString(chr) : 91 === chr && parseBracket(chr); return { exp: val.slice(0, expressionPos), key: val.slice(expressionPos + 1, expressionEndPos) }; }(value); return null === res.key ? value + "=" + assignment : "$set(" + res.exp + ", " + res.key + ", " + assignment + ")"; } function next() { return str.charCodeAt(++index$1); } function eof() { return index$1 >= len; } function isStringStart(chr) { return 34 === chr || 39 === chr; } function parseBracket(chr) { var inBracket = 1; for (expressionPos = index$1; !eof(); ) if (isStringStart(chr = next())) parseString(chr); else if (91 === chr && inBracket++, 93 === chr && inBracket--, 0 === inBracket) { expressionEndPos = index$1; break; } } function parseString(chr) { for (var stringQuote = chr; !eof() && (chr = next()) !== stringQuote; ) ; } var target$1, RANGE_TOKEN = "__r", CHECKBOX_RADIO_TOKEN = "__c"; function createOnceHandler$1(event, handler, capture) { var _target = target$1; return function onceHandler() { var res = handler.apply(null, arguments); null !== res && remove$2(event, onceHandler, capture, _target); }; } var useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53); function add$1(name, handler, capture, passive) { if (useMicrotaskFix) { var attachedTimestamp = currentFlushTimestamp, original = handler; handler = original._wrapper = function(e) { if (e.target === e.currentTarget || e.timeStamp >= attachedTimestamp || e.timeStamp <= 0 || e.target.ownerDocument !== document) return original.apply(this, arguments); }; } target$1.addEventListener(name, handler, supportsPassive ? { capture: capture, passive: passive } : capture); } function remove$2(name, handler, capture, _target) { (_target || target$1).removeEventListener(name, handler._wrapper || handler, capture); } function updateDOMListeners(oldVnode, vnode) { if (!isUndef(oldVnode.data.on) || !isUndef(vnode.data.on)) { var on = vnode.data.on || {}, oldOn = oldVnode.data.on || {}; target$1 = vnode.elm, function(on) { if (isDef(on[RANGE_TOKEN])) { var event = isIE ? "change" : "input"; on[event] = [].concat(on[RANGE_TOKEN], on[event] || []), delete on[RANGE_TOKEN]; } isDef(on[CHECKBOX_RADIO_TOKEN]) && (on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []), delete on[CHECKBOX_RADIO_TOKEN]); }(on), updateListeners(on, oldOn, add$1, remove$2, createOnceHandler$1, vnode.context), target$1 = void 0; } } var svgContainer, events = { create: updateDOMListeners, update: updateDOMListeners }; function updateDOMProps(oldVnode, vnode) { if (!isUndef(oldVnode.data.domProps) || !isUndef(vnode.data.domProps)) { var key, cur, elm = vnode.elm, oldProps = oldVnode.data.domProps || {}, props = vnode.data.domProps || {}; for (key in isDef(props.__ob__) && (props = vnode.data.domProps = extend({}, props)), oldProps) key in props || (elm[key] = ""); for (key in props) { if (cur = props[key], "textContent" === key || "innerHTML" === key) { if (vnode.children && (vnode.children.length = 0), cur === oldProps[key]) continue; 1 === elm.childNodes.length && elm.removeChild(elm.childNodes[0]); } if ("value" === key && "PROGRESS" !== elm.tagName) { elm._value = cur; var strCur = isUndef(cur) ? "" : String(cur); shouldUpdateValue(elm, strCur) && (elm.value = strCur); } else if ("innerHTML" === key && isSVG(elm.tagName) && isUndef(elm.innerHTML)) { (svgContainer = svgContainer || document.createElement("div")).innerHTML = "" + cur + ""; for (var svg = svgContainer.firstChild; elm.firstChild; ) elm.removeChild(elm.firstChild); for (;svg.firstChild; ) elm.appendChild(svg.firstChild); } else if (cur !== oldProps[key]) try { elm[key] = cur; } catch (e) {} } } } function shouldUpdateValue(elm, checkVal) { return !elm.composing && ("OPTION" === elm.tagName || function(elm, checkVal) { var notInFocus = !0; try { notInFocus = document.activeElement !== elm; } catch (e) {} return notInFocus && elm.value !== checkVal; }(elm, checkVal) || function(elm, newVal) { var value = elm.value, modifiers = elm._vModifiers; if (isDef(modifiers)) { if (modifiers.number) return toNumber(value) !== toNumber(newVal); if (modifiers.trim) return value.trim() !== newVal.trim(); } return value !== newVal; }(elm, checkVal)); } var domProps = { create: updateDOMProps, update: updateDOMProps }, parseStyleText = cached((function(cssText) { var res = {}, propertyDelimiter = /:(.+)/; return cssText.split(/;(?![^(]*\))/g).forEach((function(item) { if (item) { var tmp = item.split(propertyDelimiter); tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim()); } })), res; })); function normalizeStyleData(data) { var style = normalizeStyleBinding(data.style); return data.staticStyle ? extend(data.staticStyle, style) : style; } function normalizeStyleBinding(bindingStyle) { return Array.isArray(bindingStyle) ? toObject(bindingStyle) : "string" == typeof bindingStyle ? parseStyleText(bindingStyle) : bindingStyle; } var emptyStyle, cssVarRE = /^--/, importantRE = /\s*!important$/, setProp = function(el, name, val) { if (cssVarRE.test(name)) el.style.setProperty(name, val); else if (importantRE.test(val)) el.style.setProperty(hyphenate(name), val.replace(importantRE, ""), "important"); else { var normalizedName = normalize(name); if (Array.isArray(val)) for (var i = 0, len = val.length; i < len; i++) el.style[normalizedName] = val[i]; else el.style[normalizedName] = val; } }, vendorNames = [ "Webkit", "Moz", "ms" ], normalize = cached((function(prop) { if (emptyStyle = emptyStyle || document.createElement("div").style, "filter" !== (prop = camelize(prop)) && prop in emptyStyle) return prop; for (var capName = prop.charAt(0).toUpperCase() + prop.slice(1), i = 0; i < vendorNames.length; i++) { var name = vendorNames[i] + capName; if (name in emptyStyle) return name; } })); function updateStyle(oldVnode, vnode) { var data = vnode.data, oldData = oldVnode.data; if (!(isUndef(data.staticStyle) && isUndef(data.style) && isUndef(oldData.staticStyle) && isUndef(oldData.style))) { var cur, name, el = vnode.elm, oldStaticStyle = oldData.staticStyle, oldStyleBinding = oldData.normalizedStyle || oldData.style || {}, oldStyle = oldStaticStyle || oldStyleBinding, style = normalizeStyleBinding(vnode.data.style) || {}; vnode.data.normalizedStyle = isDef(style.__ob__) ? extend({}, style) : style; var newStyle = function(vnode, checkChild) { var styleData, res = {}; if (checkChild) for (var childNode = vnode; childNode.componentInstance; ) (childNode = childNode.componentInstance._vnode) && childNode.data && (styleData = normalizeStyleData(childNode.data)) && extend(res, styleData); (styleData = normalizeStyleData(vnode.data)) && extend(res, styleData); for (var parentNode = vnode; parentNode = parentNode.parent; ) parentNode.data && (styleData = normalizeStyleData(parentNode.data)) && extend(res, styleData); return res; }(vnode, !0); for (name in oldStyle) isUndef(newStyle[name]) && setProp(el, name, ""); for (name in newStyle) (cur = newStyle[name]) !== oldStyle[name] && setProp(el, name, null == cur ? "" : cur); } } var style = { create: updateStyle, update: updateStyle }, whitespaceRE = /\s+/; function addClass(el, cls) { if (cls && (cls = cls.trim())) if (el.classList) cls.indexOf(" ") > -1 ? cls.split(whitespaceRE).forEach((function(c) { return el.classList.add(c); })) : el.classList.add(cls); else { var cur = " " + (el.getAttribute("class") || "") + " "; cur.indexOf(" " + cls + " ") < 0 && el.setAttribute("class", (cur + cls).trim()); } } function removeClass(el, cls) { if (cls && (cls = cls.trim())) if (el.classList) cls.indexOf(" ") > -1 ? cls.split(whitespaceRE).forEach((function(c) { return el.classList.remove(c); })) : el.classList.remove(cls), el.classList.length || el.removeAttribute("class"); else { for (var cur = " " + (el.getAttribute("class") || "") + " ", tar = " " + cls + " "; cur.indexOf(tar) >= 0; ) cur = cur.replace(tar, " "); (cur = cur.trim()) ? el.setAttribute("class", cur) : el.removeAttribute("class"); } } function resolveTransition(def$$1) { if (def$$1) { if ("object" == typeof def$$1) { var res = {}; return !1 !== def$$1.css && extend(res, autoCssTransition(def$$1.name || "v")), extend(res, def$$1), res; } return "string" == typeof def$$1 ? autoCssTransition(def$$1) : void 0; } } var autoCssTransition = cached((function(name) { return { enterClass: name + "-enter", enterToClass: name + "-enter-to", enterActiveClass: name + "-enter-active", leaveClass: name + "-leave", leaveToClass: name + "-leave-to", leaveActiveClass: name + "-leave-active" }; })), hasTransition = inBrowser && !isIE9, TRANSITION = "transition", ANIMATION = "animation", transitionProp = "transition", transitionEndEvent = "transitionend", animationProp = "animation", animationEndEvent = "animationend"; hasTransition && (void 0 === window.ontransitionend && void 0 !== window.onwebkittransitionend && (transitionProp = "WebkitTransition", transitionEndEvent = "webkitTransitionEnd"), void 0 === window.onanimationend && void 0 !== window.onwebkitanimationend && (animationProp = "WebkitAnimation", animationEndEvent = "webkitAnimationEnd")); var raf = inBrowser ? window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : setTimeout : function(fn) { return fn(); }; function nextFrame(fn) { raf((function() { raf(fn); })); } function addTransitionClass(el, cls) { var transitionClasses = el._transitionClasses || (el._transitionClasses = []); transitionClasses.indexOf(cls) < 0 && (transitionClasses.push(cls), addClass(el, cls)); } function removeTransitionClass(el, cls) { el._transitionClasses && remove(el._transitionClasses, cls), removeClass(el, cls); } function whenTransitionEnds(el, expectedType, cb) { var ref = getTransitionInfo(el, expectedType), type = ref.type, timeout = ref.timeout, propCount = ref.propCount; if (!type) return cb(); var event = type === TRANSITION ? transitionEndEvent : animationEndEvent, ended = 0, end = function() { el.removeEventListener(event, onEnd), cb(); }, onEnd = function(e) { e.target === el && ++ended >= propCount && end(); }; setTimeout((function() { ended < propCount && end(); }), timeout + 1), el.addEventListener(event, onEnd); } var transformRE = /\b(transform|all)(,|$)/; function getTransitionInfo(el, expectedType) { var type, styles = window.getComputedStyle(el), transitionDelays = (styles[transitionProp + "Delay"] || "").split(", "), transitionDurations = (styles[transitionProp + "Duration"] || "").split(", "), transitionTimeout = getTimeout(transitionDelays, transitionDurations), animationDelays = (styles[animationProp + "Delay"] || "").split(", "), animationDurations = (styles[animationProp + "Duration"] || "").split(", "), animationTimeout = getTimeout(animationDelays, animationDurations), timeout = 0, propCount = 0; return expectedType === TRANSITION ? transitionTimeout > 0 && (type = TRANSITION, timeout = transitionTimeout, propCount = transitionDurations.length) : expectedType === ANIMATION ? animationTimeout > 0 && (type = ANIMATION, timeout = animationTimeout, propCount = animationDurations.length) : propCount = (type = (timeout = Math.max(transitionTimeout, animationTimeout)) > 0 ? transitionTimeout > animationTimeout ? TRANSITION : ANIMATION : null) ? type === TRANSITION ? transitionDurations.length : animationDurations.length : 0, { type: type, timeout: timeout, propCount: propCount, hasTransform: type === TRANSITION && transformRE.test(styles[transitionProp + "Property"]) }; } function getTimeout(delays, durations) { for (;delays.length < durations.length; ) delays = delays.concat(delays); return Math.max.apply(null, durations.map((function(d, i) { return toMs(d) + toMs(delays[i]); }))); } function toMs(s) { return 1e3 * Number(s.slice(0, -1).replace(",", ".")); } function enter(vnode, toggleDisplay) { var el = vnode.elm; isDef(el._leaveCb) && (el._leaveCb.cancelled = !0, el._leaveCb()); var data = resolveTransition(vnode.data.transition); if (!isUndef(data) && !isDef(el._enterCb) && 1 === el.nodeType) { for (var css = data.css, type = data.type, enterClass = data.enterClass, enterToClass = data.enterToClass, enterActiveClass = data.enterActiveClass, appearClass = data.appearClass, appearToClass = data.appearToClass, appearActiveClass = data.appearActiveClass, beforeEnter = data.beforeEnter, enter = data.enter, afterEnter = data.afterEnter, enterCancelled = data.enterCancelled, beforeAppear = data.beforeAppear, appear = data.appear, afterAppear = data.afterAppear, appearCancelled = data.appearCancelled, duration = data.duration, context = activeInstance, transitionNode = activeInstance.$vnode; transitionNode && transitionNode.parent; ) context = transitionNode.context, transitionNode = transitionNode.parent; var isAppear = !context._isMounted || !vnode.isRootInsert; if (!isAppear || appear || "" === appear) { var startClass = isAppear && appearClass ? appearClass : enterClass, activeClass = isAppear && appearActiveClass ? appearActiveClass : enterActiveClass, toClass = isAppear && appearToClass ? appearToClass : enterToClass, beforeEnterHook = isAppear && beforeAppear || beforeEnter, enterHook = isAppear && "function" == typeof appear ? appear : enter, afterEnterHook = isAppear && afterAppear || afterEnter, enterCancelledHook = isAppear && appearCancelled || enterCancelled, explicitEnterDuration = toNumber(isObject(duration) ? duration.enter : duration); 0; var expectsCSS = !1 !== css && !isIE9, userWantsControl = getHookArgumentsLength(enterHook), cb = el._enterCb = once((function() { expectsCSS && (removeTransitionClass(el, toClass), removeTransitionClass(el, activeClass)), cb.cancelled ? (expectsCSS && removeTransitionClass(el, startClass), enterCancelledHook && enterCancelledHook(el)) : afterEnterHook && afterEnterHook(el), el._enterCb = null; })); vnode.data.show || mergeVNodeHook(vnode, "insert", (function() { var parent = el.parentNode, pendingNode = parent && parent._pending && parent._pending[vnode.key]; pendingNode && pendingNode.tag === vnode.tag && pendingNode.elm._leaveCb && pendingNode.elm._leaveCb(), enterHook && enterHook(el, cb); })), beforeEnterHook && beforeEnterHook(el), expectsCSS && (addTransitionClass(el, startClass), addTransitionClass(el, activeClass), nextFrame((function() { removeTransitionClass(el, startClass), cb.cancelled || (addTransitionClass(el, toClass), userWantsControl || (isValidDuration(explicitEnterDuration) ? setTimeout(cb, explicitEnterDuration) : whenTransitionEnds(el, type, cb))); }))), vnode.data.show && (toggleDisplay && toggleDisplay(), enterHook && enterHook(el, cb)), expectsCSS || userWantsControl || cb(); } } } function leave(vnode, rm) { var el = vnode.elm; isDef(el._enterCb) && (el._enterCb.cancelled = !0, el._enterCb()); var data = resolveTransition(vnode.data.transition); if (isUndef(data) || 1 !== el.nodeType) return rm(); if (!isDef(el._leaveCb)) { var css = data.css, type = data.type, leaveClass = data.leaveClass, leaveToClass = data.leaveToClass, leaveActiveClass = data.leaveActiveClass, beforeLeave = data.beforeLeave, leave = data.leave, afterLeave = data.afterLeave, leaveCancelled = data.leaveCancelled, delayLeave = data.delayLeave, duration = data.duration, expectsCSS = !1 !== css && !isIE9, userWantsControl = getHookArgumentsLength(leave), explicitLeaveDuration = toNumber(isObject(duration) ? duration.leave : duration); 0; var cb = el._leaveCb = once((function() { el.parentNode && el.parentNode._pending && (el.parentNode._pending[vnode.key] = null), expectsCSS && (removeTransitionClass(el, leaveToClass), removeTransitionClass(el, leaveActiveClass)), cb.cancelled ? (expectsCSS && removeTransitionClass(el, leaveClass), leaveCancelled && leaveCancelled(el)) : (rm(), afterLeave && afterLeave(el)), el._leaveCb = null; })); delayLeave ? delayLeave(performLeave) : performLeave(); } function performLeave() { cb.cancelled || (!vnode.data.show && el.parentNode && ((el.parentNode._pending || (el.parentNode._pending = {}))[vnode.key] = vnode), beforeLeave && beforeLeave(el), expectsCSS && (addTransitionClass(el, leaveClass), addTransitionClass(el, leaveActiveClass), nextFrame((function() { removeTransitionClass(el, leaveClass), cb.cancelled || (addTransitionClass(el, leaveToClass), userWantsControl || (isValidDuration(explicitLeaveDuration) ? setTimeout(cb, explicitLeaveDuration) : whenTransitionEnds(el, type, cb))); }))), leave && leave(el, cb), expectsCSS || userWantsControl || cb()); } } function isValidDuration(val) { return "number" == typeof val && !isNaN(val); } function getHookArgumentsLength(fn) { if (isUndef(fn)) return !1; var invokerFns = fn.fns; return isDef(invokerFns) ? getHookArgumentsLength(Array.isArray(invokerFns) ? invokerFns[0] : invokerFns) : (fn._length || fn.length) > 1; } function _enter(_, vnode) { !0 !== vnode.data.show && enter(vnode); } var patch = function(backend) { var i, j, cbs = {}, modules = backend.modules, nodeOps = backend.nodeOps; for (i = 0; i < hooks.length; ++i) for (cbs[hooks[i]] = [], j = 0; j < modules.length; ++j) isDef(modules[j][hooks[i]]) && cbs[hooks[i]].push(modules[j][hooks[i]]); function removeNode(el) { var parent = nodeOps.parentNode(el); isDef(parent) && nodeOps.removeChild(parent, el); } function createElm(vnode, insertedVnodeQueue, parentElm, refElm, nested, ownerArray, index) { if (isDef(vnode.elm) && isDef(ownerArray) && (vnode = ownerArray[index] = cloneVNode(vnode)), vnode.isRootInsert = !nested, !function(vnode, insertedVnodeQueue, parentElm, refElm) { var i = vnode.data; if (isDef(i)) { var isReactivated = isDef(vnode.componentInstance) && i.keepAlive; if (isDef(i = i.hook) && isDef(i = i.init) && i(vnode, !1), isDef(vnode.componentInstance)) return initComponent(vnode, insertedVnodeQueue), insert(parentElm, vnode.elm, refElm), isTrue(isReactivated) && function(vnode, insertedVnodeQueue, parentElm, refElm) { var i, innerNode = vnode; for (;innerNode.componentInstance; ) if (innerNode = innerNode.componentInstance._vnode, isDef(i = innerNode.data) && isDef(i = i.transition)) { for (i = 0; i < cbs.activate.length; ++i) cbs.activate[i](emptyNode, innerNode); insertedVnodeQueue.push(innerNode); break; } insert(parentElm, vnode.elm, refElm); }(vnode, insertedVnodeQueue, parentElm, refElm), !0; } }(vnode, insertedVnodeQueue, parentElm, refElm)) { var data = vnode.data, children = vnode.children, tag = vnode.tag; isDef(tag) ? (vnode.elm = vnode.ns ? nodeOps.createElementNS(vnode.ns, tag) : nodeOps.createElement(tag, vnode), setScope(vnode), createChildren(vnode, children, insertedVnodeQueue), isDef(data) && invokeCreateHooks(vnode, insertedVnodeQueue), insert(parentElm, vnode.elm, refElm)) : isTrue(vnode.isComment) ? (vnode.elm = nodeOps.createComment(vnode.text), insert(parentElm, vnode.elm, refElm)) : (vnode.elm = nodeOps.createTextNode(vnode.text), insert(parentElm, vnode.elm, refElm)); } } function initComponent(vnode, insertedVnodeQueue) { isDef(vnode.data.pendingInsert) && (insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert), vnode.data.pendingInsert = null), vnode.elm = vnode.componentInstance.$el, isPatchable(vnode) ? (invokeCreateHooks(vnode, insertedVnodeQueue), setScope(vnode)) : (registerRef(vnode), insertedVnodeQueue.push(vnode)); } function insert(parent, elm, ref$$1) { isDef(parent) && (isDef(ref$$1) ? nodeOps.parentNode(ref$$1) === parent && nodeOps.insertBefore(parent, elm, ref$$1) : nodeOps.appendChild(parent, elm)); } function createChildren(vnode, children, insertedVnodeQueue) { if (Array.isArray(children)) { 0; for (var i = 0; i < children.length; ++i) createElm(children[i], insertedVnodeQueue, vnode.elm, null, !0, children, i); } else isPrimitive(vnode.text) && nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text))); } function isPatchable(vnode) { for (;vnode.componentInstance; ) vnode = vnode.componentInstance._vnode; return isDef(vnode.tag); } function invokeCreateHooks(vnode, insertedVnodeQueue) { for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) cbs.create[i$1](emptyNode, vnode); isDef(i = vnode.data.hook) && (isDef(i.create) && i.create(emptyNode, vnode), isDef(i.insert) && insertedVnodeQueue.push(vnode)); } function setScope(vnode) { var i; if (isDef(i = vnode.fnScopeId)) nodeOps.setStyleScope(vnode.elm, i); else for (var ancestor = vnode; ancestor; ) isDef(i = ancestor.context) && isDef(i = i.$options._scopeId) && nodeOps.setStyleScope(vnode.elm, i), ancestor = ancestor.parent; isDef(i = activeInstance) && i !== vnode.context && i !== vnode.fnContext && isDef(i = i.$options._scopeId) && nodeOps.setStyleScope(vnode.elm, i); } function addVnodes(parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) { for (;startIdx <= endIdx; ++startIdx) createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, !1, vnodes, startIdx); } function invokeDestroyHook(vnode) { var i, j, data = vnode.data; if (isDef(data)) for (isDef(i = data.hook) && isDef(i = i.destroy) && i(vnode), i = 0; i < cbs.destroy.length; ++i) cbs.destroy[i](vnode); if (isDef(i = vnode.children)) for (j = 0; j < vnode.children.length; ++j) invokeDestroyHook(vnode.children[j]); } function removeVnodes(parentElm, vnodes, startIdx, endIdx) { for (;startIdx <= endIdx; ++startIdx) { var ch = vnodes[startIdx]; isDef(ch) && (isDef(ch.tag) ? (removeAndInvokeRemoveHook(ch), invokeDestroyHook(ch)) : removeNode(ch.elm)); } } function removeAndInvokeRemoveHook(vnode, rm) { if (isDef(rm) || isDef(vnode.data)) { var i, listeners = cbs.remove.length + 1; for (isDef(rm) ? rm.listeners += listeners : rm = function(childElm, listeners) { function remove$$1() { 0 == --remove$$1.listeners && removeNode(childElm); } return remove$$1.listeners = listeners, remove$$1; }(vnode.elm, listeners), isDef(i = vnode.componentInstance) && isDef(i = i._vnode) && isDef(i.data) && removeAndInvokeRemoveHook(i, rm), i = 0; i < cbs.remove.length; ++i) cbs.remove[i](vnode, rm); isDef(i = vnode.data.hook) && isDef(i = i.remove) ? i(vnode, rm) : rm(); } else removeNode(vnode.elm); } function findIdxInOld(node, oldCh, start, end) { for (var i = start; i < end; i++) { var c = oldCh[i]; if (isDef(c) && sameVnode(node, c)) return i; } } function patchVnode(oldVnode, vnode, insertedVnodeQueue, ownerArray, index, removeOnly) { if (oldVnode !== vnode) { isDef(vnode.elm) && isDef(ownerArray) && (vnode = ownerArray[index] = cloneVNode(vnode)); var elm = vnode.elm = oldVnode.elm; if (isTrue(oldVnode.isAsyncPlaceholder)) isDef(vnode.asyncFactory.resolved) ? hydrate(oldVnode.elm, vnode, insertedVnodeQueue) : vnode.isAsyncPlaceholder = !0; else if (isTrue(vnode.isStatic) && isTrue(oldVnode.isStatic) && vnode.key === oldVnode.key && (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))) vnode.componentInstance = oldVnode.componentInstance; else { var i, data = vnode.data; isDef(data) && isDef(i = data.hook) && isDef(i = i.prepatch) && i(oldVnode, vnode); var oldCh = oldVnode.children, ch = vnode.children; if (isDef(data) && isPatchable(vnode)) { for (i = 0; i < cbs.update.length; ++i) cbs.update[i](oldVnode, vnode); isDef(i = data.hook) && isDef(i = i.update) && i(oldVnode, vnode); } isUndef(vnode.text) ? isDef(oldCh) && isDef(ch) ? oldCh !== ch && function(parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) { var oldKeyToIdx, idxInOld, vnodeToMove, oldStartIdx = 0, newStartIdx = 0, oldEndIdx = oldCh.length - 1, oldStartVnode = oldCh[0], oldEndVnode = oldCh[oldEndIdx], newEndIdx = newCh.length - 1, newStartVnode = newCh[0], newEndVnode = newCh[newEndIdx], canMove = !removeOnly; for (0; oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx; ) isUndef(oldStartVnode) ? oldStartVnode = oldCh[++oldStartIdx] : isUndef(oldEndVnode) ? oldEndVnode = oldCh[--oldEndIdx] : sameVnode(oldStartVnode, newStartVnode) ? (patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx), oldStartVnode = oldCh[++oldStartIdx], newStartVnode = newCh[++newStartIdx]) : sameVnode(oldEndVnode, newEndVnode) ? (patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx), oldEndVnode = oldCh[--oldEndIdx], newEndVnode = newCh[--newEndIdx]) : sameVnode(oldStartVnode, newEndVnode) ? (patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx), canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm)), oldStartVnode = oldCh[++oldStartIdx], newEndVnode = newCh[--newEndIdx]) : sameVnode(oldEndVnode, newStartVnode) ? (patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx), canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm), oldEndVnode = oldCh[--oldEndIdx], newStartVnode = newCh[++newStartIdx]) : (isUndef(oldKeyToIdx) && (oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx)), isUndef(idxInOld = isDef(newStartVnode.key) ? oldKeyToIdx[newStartVnode.key] : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx)) ? createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, !1, newCh, newStartIdx) : sameVnode(vnodeToMove = oldCh[idxInOld], newStartVnode) ? (patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx), oldCh[idxInOld] = void 0, canMove && nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm)) : createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, !1, newCh, newStartIdx), newStartVnode = newCh[++newStartIdx]); oldStartIdx > oldEndIdx ? addVnodes(parentElm, isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue) : newStartIdx > newEndIdx && removeVnodes(0, oldCh, oldStartIdx, oldEndIdx); }(elm, oldCh, ch, insertedVnodeQueue, removeOnly) : isDef(ch) ? (isDef(oldVnode.text) && nodeOps.setTextContent(elm, ""), addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue)) : isDef(oldCh) ? removeVnodes(0, oldCh, 0, oldCh.length - 1) : isDef(oldVnode.text) && nodeOps.setTextContent(elm, "") : oldVnode.text !== vnode.text && nodeOps.setTextContent(elm, vnode.text), isDef(data) && isDef(i = data.hook) && isDef(i = i.postpatch) && i(oldVnode, vnode); } } } function invokeInsertHook(vnode, queue, initial) { if (isTrue(initial) && isDef(vnode.parent)) vnode.parent.data.pendingInsert = queue; else for (var i = 0; i < queue.length; ++i) queue[i].data.hook.insert(queue[i]); } var isRenderedModule = makeMap("attrs,class,staticClass,staticStyle,key"); function hydrate(elm, vnode, insertedVnodeQueue, inVPre) { var i, tag = vnode.tag, data = vnode.data, children = vnode.children; if (inVPre = inVPre || data && data.pre, vnode.elm = elm, isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) return vnode.isAsyncPlaceholder = !0, !0; if (isDef(data) && (isDef(i = data.hook) && isDef(i = i.init) && i(vnode, !0), isDef(i = vnode.componentInstance))) return initComponent(vnode, insertedVnodeQueue), !0; if (isDef(tag)) { if (isDef(children)) if (elm.hasChildNodes()) if (isDef(i = data) && isDef(i = i.domProps) && isDef(i = i.innerHTML)) { if (i !== elm.innerHTML) return !1; } else { for (var childrenMatch = !0, childNode = elm.firstChild, i$1 = 0; i$1 < children.length; i$1++) { if (!childNode || !hydrate(childNode, children[i$1], insertedVnodeQueue, inVPre)) { childrenMatch = !1; break; } childNode = childNode.nextSibling; } if (!childrenMatch || childNode) return !1; } else createChildren(vnode, children, insertedVnodeQueue); if (isDef(data)) { var fullInvoke = !1; for (var key in data) if (!isRenderedModule(key)) { fullInvoke = !0, invokeCreateHooks(vnode, insertedVnodeQueue); break; } !fullInvoke && data.class && traverse(data.class); } } else elm.data !== vnode.text && (elm.data = vnode.text); return !0; } return function(oldVnode, vnode, hydrating, removeOnly) { if (!isUndef(vnode)) { var elm, isInitialPatch = !1, insertedVnodeQueue = []; if (isUndef(oldVnode)) isInitialPatch = !0, createElm(vnode, insertedVnodeQueue); else { var isRealElement = isDef(oldVnode.nodeType); if (!isRealElement && sameVnode(oldVnode, vnode)) patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly); else { if (isRealElement) { if (1 === oldVnode.nodeType && oldVnode.hasAttribute(SSR_ATTR) && (oldVnode.removeAttribute(SSR_ATTR), hydrating = !0), isTrue(hydrating) && hydrate(oldVnode, vnode, insertedVnodeQueue)) return invokeInsertHook(vnode, insertedVnodeQueue, !0), oldVnode; elm = oldVnode, oldVnode = new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], void 0, elm); } var oldElm = oldVnode.elm, parentElm = nodeOps.parentNode(oldElm); if (createElm(vnode, insertedVnodeQueue, oldElm._leaveCb ? null : parentElm, nodeOps.nextSibling(oldElm)), isDef(vnode.parent)) for (var ancestor = vnode.parent, patchable = isPatchable(vnode); ancestor; ) { for (var i = 0; i < cbs.destroy.length; ++i) cbs.destroy[i](ancestor); if (ancestor.elm = vnode.elm, patchable) { for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) cbs.create[i$1](emptyNode, ancestor); var insert = ancestor.data.hook.insert; if (insert.merged) for (var i$2 = 1; i$2 < insert.fns.length; i$2++) insert.fns[i$2](); } else registerRef(ancestor); ancestor = ancestor.parent; } isDef(parentElm) ? removeVnodes(0, [ oldVnode ], 0, 0) : isDef(oldVnode.tag) && invokeDestroyHook(oldVnode); } } return invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch), vnode.elm; } isDef(oldVnode) && invokeDestroyHook(oldVnode); }; }({ nodeOps: nodeOps, modules: [ attrs, klass, events, domProps, style, inBrowser ? { create: _enter, activate: _enter, remove: function(vnode, rm) { !0 !== vnode.data.show ? leave(vnode, rm) : rm(); } } : {} ].concat(baseModules) }); isIE9 && document.addEventListener("selectionchange", (function() { var el = document.activeElement; el && el.vmodel && trigger(el, "input"); })); var directive = { inserted: function(el, binding, vnode, oldVnode) { "select" === vnode.tag ? (oldVnode.elm && !oldVnode.elm._vOptions ? mergeVNodeHook(vnode, "postpatch", (function() { directive.componentUpdated(el, binding, vnode); })) : setSelected(el, binding, vnode.context), el._vOptions = [].map.call(el.options, getValue)) : ("textarea" === vnode.tag || isTextInputType(el.type)) && (el._vModifiers = binding.modifiers, binding.modifiers.lazy || (el.addEventListener("compositionstart", onCompositionStart), el.addEventListener("compositionend", onCompositionEnd), el.addEventListener("change", onCompositionEnd), isIE9 && (el.vmodel = !0))); }, componentUpdated: function(el, binding, vnode) { if ("select" === vnode.tag) { setSelected(el, binding, vnode.context); var prevOptions = el._vOptions, curOptions = el._vOptions = [].map.call(el.options, getValue); if (curOptions.some((function(o, i) { return !looseEqual(o, prevOptions[i]); }))) (el.multiple ? binding.value.some((function(v) { return hasNoMatchingOption(v, curOptions); })) : binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, curOptions)) && trigger(el, "change"); } } }; function setSelected(el, binding, vm) { actuallySetSelected(el, binding, vm), (isIE || isEdge) && setTimeout((function() { actuallySetSelected(el, binding, vm); }), 0); } function actuallySetSelected(el, binding, vm) { var value = binding.value, isMultiple = el.multiple; if (!isMultiple || Array.isArray(value)) { for (var selected, option, i = 0, l = el.options.length; i < l; i++) if (option = el.options[i], isMultiple) selected = looseIndexOf(value, getValue(option)) > -1, option.selected !== selected && (option.selected = selected); else if (looseEqual(getValue(option), value)) return void (el.selectedIndex !== i && (el.selectedIndex = i)); isMultiple || (el.selectedIndex = -1); } } function hasNoMatchingOption(value, options) { return options.every((function(o) { return !looseEqual(o, value); })); } function getValue(option) { return "_value" in option ? option._value : option.value; } function onCompositionStart(e) { e.target.composing = !0; } function onCompositionEnd(e) { e.target.composing && (e.target.composing = !1, trigger(e.target, "input")); } function trigger(el, type) { var e = document.createEvent("HTMLEvents"); e.initEvent(type, !0, !0), el.dispatchEvent(e); } function locateNode(vnode) { return !vnode.componentInstance || vnode.data && vnode.data.transition ? vnode : locateNode(vnode.componentInstance._vnode); } var platformDirectives = { model: directive, show: { bind: function(el, ref, vnode) { var value = ref.value, transition$$1 = (vnode = locateNode(vnode)).data && vnode.data.transition, originalDisplay = el.__vOriginalDisplay = "none" === el.style.display ? "" : el.style.display; value && transition$$1 ? (vnode.data.show = !0, enter(vnode, (function() { el.style.display = originalDisplay; }))) : el.style.display = value ? originalDisplay : "none"; }, update: function(el, ref, vnode) { var value = ref.value; !value != !ref.oldValue && ((vnode = locateNode(vnode)).data && vnode.data.transition ? (vnode.data.show = !0, value ? enter(vnode, (function() { el.style.display = el.__vOriginalDisplay; })) : leave(vnode, (function() { el.style.display = "none"; }))) : el.style.display = value ? el.__vOriginalDisplay : "none"); }, unbind: function(el, binding, vnode, oldVnode, isDestroy) { isDestroy || (el.style.display = el.__vOriginalDisplay); } } }, transitionProps = { name: String, appear: Boolean, css: Boolean, mode: String, type: String, enterClass: String, leaveClass: String, enterToClass: String, leaveToClass: String, enterActiveClass: String, leaveActiveClass: String, appearClass: String, appearActiveClass: String, appearToClass: String, duration: [ Number, String, Object ] }; function getRealChild(vnode) { var compOptions = vnode && vnode.componentOptions; return compOptions && compOptions.Ctor.options.abstract ? getRealChild(getFirstComponentChild(compOptions.children)) : vnode; } function extractTransitionData(comp) { var data = {}, options = comp.$options; for (var key in options.propsData) data[key] = comp[key]; var listeners = options._parentListeners; for (var key$1 in listeners) data[camelize(key$1)] = listeners[key$1]; return data; } function placeholder(h, rawChild) { if (/\d-keep-alive$/.test(rawChild.tag)) return h("keep-alive", { props: rawChild.componentOptions.propsData }); } var isNotTextNode = function(c) { return c.tag || isAsyncPlaceholder(c); }, isVShowDirective = function(d) { return "show" === d.name; }, Transition = { name: "transition", props: transitionProps, abstract: !0, render: function(h) { var this$1 = this, children = this.$slots.default; if (children && (children = children.filter(isNotTextNode)).length) { 0; var mode = this.mode; 0; var rawChild = children[0]; if (function(vnode) { for (;vnode = vnode.parent; ) if (vnode.data.transition) return !0; }(this.$vnode)) return rawChild; var child = getRealChild(rawChild); if (!child) return rawChild; if (this._leaving) return placeholder(h, rawChild); var id = "__transition-" + this._uid + "-"; child.key = null == child.key ? child.isComment ? id + "comment" : id + child.tag : isPrimitive(child.key) ? 0 === String(child.key).indexOf(id) ? child.key : id + child.key : child.key; var data = (child.data || (child.data = {})).transition = extractTransitionData(this), oldRawChild = this._vnode, oldChild = getRealChild(oldRawChild); if (child.data.directives && child.data.directives.some(isVShowDirective) && (child.data.show = !0), oldChild && oldChild.data && !function(child, oldChild) { return oldChild.key === child.key && oldChild.tag === child.tag; }(child, oldChild) && !isAsyncPlaceholder(oldChild) && (!oldChild.componentInstance || !oldChild.componentInstance._vnode.isComment)) { var oldData = oldChild.data.transition = extend({}, data); if ("out-in" === mode) return this._leaving = !0, mergeVNodeHook(oldData, "afterLeave", (function() { this$1._leaving = !1, this$1.$forceUpdate(); })), placeholder(h, rawChild); if ("in-out" === mode) { if (isAsyncPlaceholder(child)) return oldRawChild; var delayedLeave, performLeave = function() { delayedLeave(); }; mergeVNodeHook(data, "afterEnter", performLeave), mergeVNodeHook(data, "enterCancelled", performLeave), mergeVNodeHook(oldData, "delayLeave", (function(leave) { delayedLeave = leave; })); } } return rawChild; } } }, props = extend({ tag: String, moveClass: String }, transitionProps); function callPendingCbs(c) { c.elm._moveCb && c.elm._moveCb(), c.elm._enterCb && c.elm._enterCb(); } function recordPosition(c) { c.data.newPos = c.elm.getBoundingClientRect(); } function applyTranslation(c) { var oldPos = c.data.pos, newPos = c.data.newPos, dx = oldPos.left - newPos.left, dy = oldPos.top - newPos.top; if (dx || dy) { c.data.moved = !0; var s = c.elm.style; s.transform = s.WebkitTransform = "translate(" + dx + "px," + dy + "px)", s.transitionDuration = "0s"; } } delete props.mode; var platformComponents = { Transition: Transition, TransitionGroup: { props: props, beforeMount: function() { var this$1 = this, update = this._update; this._update = function(vnode, hydrating) { var restoreActiveInstance = setActiveInstance(this$1); this$1.__patch__(this$1._vnode, this$1.kept, !1, !0), this$1._vnode = this$1.kept, restoreActiveInstance(), update.call(this$1, vnode, hydrating); }; }, render: function(h) { for (var tag = this.tag || this.$vnode.data.tag || "span", map = Object.create(null), prevChildren = this.prevChildren = this.children, rawChildren = this.$slots.default || [], children = this.children = [], transitionData = extractTransitionData(this), i = 0; i < rawChildren.length; i++) { var c = rawChildren[i]; if (c.tag) if (null != c.key && 0 !== String(c.key).indexOf("__vlist")) children.push(c), map[c.key] = c, (c.data || (c.data = {})).transition = transitionData; else ; } if (prevChildren) { for (var kept = [], removed = [], i$1 = 0; i$1 < prevChildren.length; i$1++) { var c$1 = prevChildren[i$1]; c$1.data.transition = transitionData, c$1.data.pos = c$1.elm.getBoundingClientRect(), map[c$1.key] ? kept.push(c$1) : removed.push(c$1); } this.kept = h(tag, null, kept), this.removed = removed; } return h(tag, null, children); }, updated: function() { var children = this.prevChildren, moveClass = this.moveClass || (this.name || "v") + "-move"; children.length && this.hasMove(children[0].elm, moveClass) && (children.forEach(callPendingCbs), children.forEach(recordPosition), children.forEach(applyTranslation), this._reflow = document.body.offsetHeight, children.forEach((function(c) { if (c.data.moved) { var el = c.elm, s = el.style; addTransitionClass(el, moveClass), s.transform = s.WebkitTransform = s.transitionDuration = "", el.addEventListener(transitionEndEvent, el._moveCb = function cb(e) { e && e.target !== el || e && !/transform$/.test(e.propertyName) || (el.removeEventListener(transitionEndEvent, cb), el._moveCb = null, removeTransitionClass(el, moveClass)); }); } }))); }, methods: { hasMove: function(el, moveClass) { if (!hasTransition) return !1; if (this._hasMove) return this._hasMove; var clone = el.cloneNode(); el._transitionClasses && el._transitionClasses.forEach((function(cls) { removeClass(clone, cls); })), addClass(clone, moveClass), clone.style.display = "none", this.$el.appendChild(clone); var info = getTransitionInfo(clone); return this.$el.removeChild(clone), this._hasMove = info.hasTransform; } } } }; Vue.config.mustUseProp = mustUseProp, Vue.config.isReservedTag = isReservedTag, Vue.config.isReservedAttr = isReservedAttr, Vue.config.getTagNamespace = getTagNamespace, Vue.config.isUnknownElement = function(tag) { if (!inBrowser) return !0; if (isReservedTag(tag)) return !1; if (tag = tag.toLowerCase(), null != unknownElementCache[tag]) return unknownElementCache[tag]; var el = document.createElement(tag); return tag.indexOf("-") > -1 ? unknownElementCache[tag] = el.constructor === window.HTMLUnknownElement || el.constructor === window.HTMLElement : unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()); }, extend(Vue.options.directives, platformDirectives), extend(Vue.options.components, platformComponents), Vue.prototype.__patch__ = inBrowser ? patch : noop, Vue.prototype.$mount = function(el, hydrating) { return function(vm, el, hydrating) { var updateComponent; return vm.$el = el, vm.$options.render || (vm.$options.render = createEmptyVNode), callHook(vm, "beforeMount"), updateComponent = function() { vm._update(vm._render(), hydrating); }, new Watcher(vm, updateComponent, noop, { before: function() { vm._isMounted && !vm._isDestroyed && callHook(vm, "beforeUpdate"); } }, !0), hydrating = !1, null == vm.$vnode && (vm._isMounted = !0, callHook(vm, "mounted")), vm; }(this, el = el && inBrowser ? query(el) : void 0, hydrating); }, inBrowser && setTimeout((function() { config.devtools && devtools && devtools.emit("init", Vue); }), 0); var defaultTagRE = /\{\{((?:.|\r?\n)+?)\}\}/g, regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g, buildRegex = cached((function(delimiters) { var open = delimiters[0].replace(regexEscapeRE, "\\$&"), close = delimiters[1].replace(regexEscapeRE, "\\$&"); return new RegExp(open + "((?:.|\\n)+?)" + close, "g"); })); var klass$1 = { staticKeys: [ "staticClass" ], transformNode: function(el, options) { options.warn; var staticClass = getAndRemoveAttr(el, "class"); staticClass && (el.staticClass = JSON.stringify(staticClass)); var classBinding = getBindingAttr(el, "class", !1); classBinding && (el.classBinding = classBinding); }, genData: function(el) { var data = ""; return el.staticClass && (data += "staticClass:" + el.staticClass + ","), el.classBinding && (data += "class:" + el.classBinding + ","), data; } }; var decoder, style$1 = { staticKeys: [ "staticStyle" ], transformNode: function(el, options) { options.warn; var staticStyle = getAndRemoveAttr(el, "style"); staticStyle && (el.staticStyle = JSON.stringify(parseStyleText(staticStyle))); var styleBinding = getBindingAttr(el, "style", !1); styleBinding && (el.styleBinding = styleBinding); }, genData: function(el) { var data = ""; return el.staticStyle && (data += "staticStyle:" + el.staticStyle + ","), el.styleBinding && (data += "style:(" + el.styleBinding + "),"), data; } }, he_decode = function(html) { return (decoder = decoder || document.createElement("div")).innerHTML = html, decoder.textContent; }, isUnaryTag = makeMap("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"), canBeLeftOpenTag = makeMap("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"), isNonPhrasingTag = makeMap("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"), attribute = /^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/, dynamicArgAttribute = /^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/, ncname = "[a-zA-Z_][\\-\\.0-9_a-zA-Z" + unicodeRegExp.source + "]*", qnameCapture = "((?:" + ncname + "\\:)?" + ncname + ")", startTagOpen = new RegExp("^<" + qnameCapture), startTagClose = /^\s*(\/?)>/, endTag = new RegExp("^<\\/" + qnameCapture + "[^>]*>"), doctype = /^]+>/i, comment = /^", """: '"', "&": "&", " ": "\n", " ": "\t", "'": "'" }, encodedAttr = /&(?:lt|gt|quot|amp|#39);/g, encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g, isIgnoreNewlineTag = makeMap("pre,textarea", !0), shouldIgnoreFirstNewline = function(tag, html) { return tag && isIgnoreNewlineTag(tag) && "\n" === html[0]; }; function decodeAttr(value, shouldDecodeNewlines) { var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr; return value.replace(re, (function(match) { return decodingMap[match]; })); } var warn$2, delimiters, transforms, preTransforms, postTransforms, platformIsPreTag, platformMustUseProp, platformGetTagNamespace, onRE = /^@|^v-on:/, dirRE = /^v-|^@|^:/, forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/, forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/, stripParensRE = /^\(|\)$/g, dynamicArgRE = /^\[.*\]$/, argRE = /:(.*)$/, bindRE = /^:|^\.|^v-bind:/, modifierRE = /\.[^.\]]+(?=[^\]]*$)/g, slotRE = /^v-slot(:|$)|^#/, lineBreakRE = /[\r\n]/, whitespaceRE$1 = /\s+/g, decodeHTMLCached = cached(he_decode), emptySlotScopeToken = "_empty_"; function createASTElement(tag, attrs, parent) { return { type: 1, tag: tag, attrsList: attrs, attrsMap: makeAttrsMap(attrs), rawAttrsMap: {}, parent: parent, children: [] }; } function parse(template, options) { warn$2 = options.warn || baseWarn, platformIsPreTag = options.isPreTag || no, platformMustUseProp = options.mustUseProp || no, platformGetTagNamespace = options.getTagNamespace || no; var isReservedTag = options.isReservedTag || no; (function(el) { return !!el.component || !isReservedTag(el.tag); }), transforms = pluckModuleFunction(options.modules, "transformNode"), preTransforms = pluckModuleFunction(options.modules, "preTransformNode"), postTransforms = pluckModuleFunction(options.modules, "postTransformNode"), delimiters = options.delimiters; var root, currentParent, stack = [], preserveWhitespace = !1 !== options.preserveWhitespace, whitespaceOption = options.whitespace, inVPre = !1, inPre = !1; function closeElement(element) { if (trimEndingWhitespace(element), inVPre || element.processed || (element = processElement(element, options)), stack.length || element === root || root.if && (element.elseif || element.else) && addIfCondition(root, { exp: element.elseif, block: element }), currentParent && !element.forbidden) if (element.elseif || element.else) el = element, (prev = function(children) { for (var i = children.length; i--; ) { if (1 === children[i].type) return children[i]; children.pop(); } }(currentParent.children)) && prev.if && addIfCondition(prev, { exp: el.elseif, block: el }); else { if (element.slotScope) { var name = element.slotTarget || '"default"'; (currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name] = element; } currentParent.children.push(element), element.parent = currentParent; } var el, prev; element.children = element.children.filter((function(c) { return !c.slotScope; })), trimEndingWhitespace(element), element.pre && (inVPre = !1), platformIsPreTag(element.tag) && (inPre = !1); for (var i = 0; i < postTransforms.length; i++) postTransforms[i](element, options); } function trimEndingWhitespace(el) { if (!inPre) for (var lastNode; (lastNode = el.children[el.children.length - 1]) && 3 === lastNode.type && " " === lastNode.text; ) el.children.pop(); } return function(html, options) { for (var last, lastTag, stack = [], expectHTML = options.expectHTML, isUnaryTag$$1 = options.isUnaryTag || no, canBeLeftOpenTag$$1 = options.canBeLeftOpenTag || no, index = 0; html; ) { if (last = html, lastTag && isPlainTextElement(lastTag)) { var endTagLength = 0, stackedTag = lastTag.toLowerCase(), reStackedTag = reCache[stackedTag] || (reCache[stackedTag] = new RegExp("([\\s\\S]*?)(]*>)", "i")), rest$1 = html.replace(reStackedTag, (function(all, text, endTag) { return endTagLength = endTag.length, isPlainTextElement(stackedTag) || "noscript" === stackedTag || (text = text.replace(//g, "$1").replace(//g, "$1")), shouldIgnoreFirstNewline(stackedTag, text) && (text = text.slice(1)), options.chars && options.chars(text), ""; })); index += html.length - rest$1.length, html = rest$1, parseEndTag(stackedTag, index - endTagLength, index); } else { var textEnd = html.indexOf("<"); if (0 === textEnd) { if (comment.test(html)) { var commentEnd = html.indexOf("--\x3e"); if (commentEnd >= 0) { options.shouldKeepComment && options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3), advance(commentEnd + 3); continue; } } if (conditionalComment.test(html)) { var conditionalEnd = html.indexOf("]>"); if (conditionalEnd >= 0) { advance(conditionalEnd + 2); continue; } } var doctypeMatch = html.match(doctype); if (doctypeMatch) { advance(doctypeMatch[0].length); continue; } var endTagMatch = html.match(endTag); if (endTagMatch) { var curIndex = index; advance(endTagMatch[0].length), parseEndTag(endTagMatch[1], curIndex, index); continue; } var startTagMatch = parseStartTag(); if (startTagMatch) { handleStartTag(startTagMatch), shouldIgnoreFirstNewline(startTagMatch.tagName, html) && advance(1); continue; } } var text = void 0, rest = void 0, next = void 0; if (textEnd >= 0) { for (rest = html.slice(textEnd); !(endTag.test(rest) || startTagOpen.test(rest) || comment.test(rest) || conditionalComment.test(rest) || (next = rest.indexOf("<", 1)) < 0); ) textEnd += next, rest = html.slice(textEnd); text = html.substring(0, textEnd); } textEnd < 0 && (text = html), text && advance(text.length), options.chars && text && options.chars(text, index - text.length, index); } if (html === last) { options.chars && options.chars(html); break; } } function advance(n) { index += n, html = html.substring(n); } function parseStartTag() { var start = html.match(startTagOpen); if (start) { var end, attr, match = { tagName: start[1], attrs: [], start: index }; for (advance(start[0].length); !(end = html.match(startTagClose)) && (attr = html.match(dynamicArgAttribute) || html.match(attribute)); ) attr.start = index, advance(attr[0].length), attr.end = index, match.attrs.push(attr); if (end) return match.unarySlash = end[1], advance(end[0].length), match.end = index, match; } } function handleStartTag(match) { var tagName = match.tagName, unarySlash = match.unarySlash; expectHTML && ("p" === lastTag && isNonPhrasingTag(tagName) && parseEndTag(lastTag), canBeLeftOpenTag$$1(tagName) && lastTag === tagName && parseEndTag(tagName)); for (var unary = isUnaryTag$$1(tagName) || !!unarySlash, l = match.attrs.length, attrs = new Array(l), i = 0; i < l; i++) { var args = match.attrs[i], value = args[3] || args[4] || args[5] || "", shouldDecodeNewlines = "a" === tagName && "href" === args[1] ? options.shouldDecodeNewlinesForHref : options.shouldDecodeNewlines; attrs[i] = { name: args[1], value: decodeAttr(value, shouldDecodeNewlines) }; } unary || (stack.push({ tag: tagName, lowerCasedTag: tagName.toLowerCase(), attrs: attrs, start: match.start, end: match.end }), lastTag = tagName), options.start && options.start(tagName, attrs, unary, match.start, match.end); } function parseEndTag(tagName, start, end) { var pos, lowerCasedTagName; if (null == start && (start = index), null == end && (end = index), tagName) for (lowerCasedTagName = tagName.toLowerCase(), pos = stack.length - 1; pos >= 0 && stack[pos].lowerCasedTag !== lowerCasedTagName; pos--) ; else pos = 0; if (pos >= 0) { for (var i = stack.length - 1; i >= pos; i--) options.end && options.end(stack[i].tag, start, end); stack.length = pos, lastTag = pos && stack[pos - 1].tag; } else "br" === lowerCasedTagName ? options.start && options.start(tagName, [], !0, start, end) : "p" === lowerCasedTagName && (options.start && options.start(tagName, [], !1, start, end), options.end && options.end(tagName, start, end)); } parseEndTag(); }(template, { warn: warn$2, expectHTML: options.expectHTML, isUnaryTag: options.isUnaryTag, canBeLeftOpenTag: options.canBeLeftOpenTag, shouldDecodeNewlines: options.shouldDecodeNewlines, shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref, shouldKeepComment: options.comments, outputSourceRange: options.outputSourceRange, start: function(tag, attrs, unary, start$1, end) { var ns = currentParent && currentParent.ns || platformGetTagNamespace(tag); isIE && "svg" === ns && (attrs = function(attrs) { for (var res = [], i = 0; i < attrs.length; i++) { var attr = attrs[i]; ieNSBug.test(attr.name) || (attr.name = attr.name.replace(ieNSPrefix, ""), res.push(attr)); } return res; }(attrs)); var el, element = createASTElement(tag, attrs, currentParent); ns && (element.ns = ns), "style" !== (el = element).tag && ("script" !== el.tag || el.attrsMap.type && "text/javascript" !== el.attrsMap.type) || isServerRendering() || (element.forbidden = !0); for (var i = 0; i < preTransforms.length; i++) element = preTransforms[i](element, options) || element; inVPre || (!function(el) { null != getAndRemoveAttr(el, "v-pre") && (el.pre = !0); }(element), element.pre && (inVPre = !0)), platformIsPreTag(element.tag) && (inPre = !0), inVPre ? function(el) { var list = el.attrsList, len = list.length; if (len) for (var attrs = el.attrs = new Array(len), i = 0; i < len; i++) attrs[i] = { name: list[i].name, value: JSON.stringify(list[i].value) }, null != list[i].start && (attrs[i].start = list[i].start, attrs[i].end = list[i].end); else el.pre || (el.plain = !0); }(element) : element.processed || (processFor(element), function(el) { var exp = getAndRemoveAttr(el, "v-if"); if (exp) el.if = exp, addIfCondition(el, { exp: exp, block: el }); else { null != getAndRemoveAttr(el, "v-else") && (el.else = !0); var elseif = getAndRemoveAttr(el, "v-else-if"); elseif && (el.elseif = elseif); } }(element), function(el) { null != getAndRemoveAttr(el, "v-once") && (el.once = !0); }(element)), root || (root = element), unary ? closeElement(element) : (currentParent = element, stack.push(element)); }, end: function(tag, start, end$1) { var element = stack[stack.length - 1]; stack.length -= 1, currentParent = stack[stack.length - 1], closeElement(element); }, chars: function(text, start, end) { if (currentParent && (!isIE || "textarea" !== currentParent.tag || currentParent.attrsMap.placeholder !== text)) { var el, res, child, children = currentParent.children; if (text = inPre || text.trim() ? "script" === (el = currentParent).tag || "style" === el.tag ? text : decodeHTMLCached(text) : children.length ? whitespaceOption ? "condense" === whitespaceOption && lineBreakRE.test(text) ? "" : " " : preserveWhitespace ? " " : "" : "") inPre || "condense" !== whitespaceOption || (text = text.replace(whitespaceRE$1, " ")), !inVPre && " " !== text && (res = function(text, delimiters) { var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE; if (tagRE.test(text)) { for (var match, index, tokenValue, tokens = [], rawTokens = [], lastIndex = tagRE.lastIndex = 0; match = tagRE.exec(text); ) { (index = match.index) > lastIndex && (rawTokens.push(tokenValue = text.slice(lastIndex, index)), tokens.push(JSON.stringify(tokenValue))); var exp = parseFilters(match[1].trim()); tokens.push("_s(" + exp + ")"), rawTokens.push({ "@binding": exp }), lastIndex = index + match[0].length; } return lastIndex < text.length && (rawTokens.push(tokenValue = text.slice(lastIndex)), tokens.push(JSON.stringify(tokenValue))), { expression: tokens.join("+"), tokens: rawTokens }; } }(text, delimiters)) ? child = { type: 2, expression: res.expression, tokens: res.tokens, text: text } : " " === text && children.length && " " === children[children.length - 1].text || (child = { type: 3, text: text }), child && children.push(child); } }, comment: function(text, start, end) { if (currentParent) { var child = { type: 3, text: text, isComment: !0 }; 0, currentParent.children.push(child); } } }), root; } function processElement(element, options) { var el; !function(el) { var exp = getBindingAttr(el, "key"); if (exp) { el.key = exp; } }(element), element.plain = !element.key && !element.scopedSlots && !element.attrsList.length, function(el) { var ref = getBindingAttr(el, "ref"); ref && (el.ref = ref, el.refInFor = function(el) { var parent = el; for (;parent; ) { if (void 0 !== parent.for) return !0; parent = parent.parent; } return !1; }(el)); }(element), function(el) { var slotScope; "template" === el.tag ? (slotScope = getAndRemoveAttr(el, "scope"), el.slotScope = slotScope || getAndRemoveAttr(el, "slot-scope")) : (slotScope = getAndRemoveAttr(el, "slot-scope")) && (el.slotScope = slotScope); var slotTarget = getBindingAttr(el, "slot"); slotTarget && (el.slotTarget = '""' === slotTarget ? '"default"' : slotTarget, el.slotTargetDynamic = !(!el.attrsMap[":slot"] && !el.attrsMap["v-bind:slot"]), "template" === el.tag || el.slotScope || addAttr(el, "slot", slotTarget, function(el, name) { return el.rawAttrsMap[":" + name] || el.rawAttrsMap["v-bind:" + name] || el.rawAttrsMap[name]; }(el, "slot"))); if ("template" === el.tag) { var slotBinding = getAndRemoveAttrByRegex(el, slotRE); if (slotBinding) { 0; var ref = getSlotName(slotBinding), name = ref.name, dynamic = ref.dynamic; el.slotTarget = name, el.slotTargetDynamic = dynamic, el.slotScope = slotBinding.value || emptySlotScopeToken; } } else { var slotBinding$1 = getAndRemoveAttrByRegex(el, slotRE); if (slotBinding$1) { 0; var slots = el.scopedSlots || (el.scopedSlots = {}), ref$1 = getSlotName(slotBinding$1), name$1 = ref$1.name, dynamic$1 = ref$1.dynamic, slotContainer = slots[name$1] = createASTElement("template", [], el); slotContainer.slotTarget = name$1, slotContainer.slotTargetDynamic = dynamic$1, slotContainer.children = el.children.filter((function(c) { if (!c.slotScope) return c.parent = slotContainer, !0; })), slotContainer.slotScope = slotBinding$1.value || emptySlotScopeToken, el.children = [], el.plain = !1; } } }(element), "slot" === (el = element).tag && (el.slotName = getBindingAttr(el, "name")), function(el) { var binding; (binding = getBindingAttr(el, "is")) && (el.component = binding); null != getAndRemoveAttr(el, "inline-template") && (el.inlineTemplate = !0); }(element); for (var i = 0; i < transforms.length; i++) element = transforms[i](element, options) || element; return function(el) { var i, l, name, rawName, value, modifiers, syncGen, isDynamic, list = el.attrsList; for (i = 0, l = list.length; i < l; i++) { if (name = rawName = list[i].name, value = list[i].value, dirRE.test(name)) if (el.hasBindings = !0, (modifiers = parseModifiers(name.replace(dirRE, ""))) && (name = name.replace(modifierRE, "")), bindRE.test(name)) name = name.replace(bindRE, ""), value = parseFilters(value), (isDynamic = dynamicArgRE.test(name)) && (name = name.slice(1, -1)), modifiers && (modifiers.prop && !isDynamic && "innerHtml" === (name = camelize(name)) && (name = "innerHTML"), modifiers.camel && !isDynamic && (name = camelize(name)), modifiers.sync && (syncGen = genAssignmentCode(value, "$event"), isDynamic ? addHandler(el, '"update:"+(' + name + ")", syncGen, null, !1, 0, list[i], !0) : (addHandler(el, "update:" + camelize(name), syncGen, null, !1, 0, list[i]), hyphenate(name) !== camelize(name) && addHandler(el, "update:" + hyphenate(name), syncGen, null, !1, 0, list[i])))), modifiers && modifiers.prop || !el.component && platformMustUseProp(el.tag, el.attrsMap.type, name) ? addProp(el, name, value, list[i], isDynamic) : addAttr(el, name, value, list[i], isDynamic); else if (onRE.test(name)) name = name.replace(onRE, ""), (isDynamic = dynamicArgRE.test(name)) && (name = name.slice(1, -1)), addHandler(el, name, value, modifiers, !1, 0, list[i], isDynamic); else { var argMatch = (name = name.replace(dirRE, "")).match(argRE), arg = argMatch && argMatch[1]; isDynamic = !1, arg && (name = name.slice(0, -(arg.length + 1)), dynamicArgRE.test(arg) && (arg = arg.slice(1, -1), isDynamic = !0)), addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]); } else addAttr(el, name, JSON.stringify(value), list[i]), !el.component && "muted" === name && platformMustUseProp(el.tag, el.attrsMap.type, name) && addProp(el, name, "true", list[i]); } }(element), element; } function processFor(el) { var exp; if (exp = getAndRemoveAttr(el, "v-for")) { var res = function(exp) { var inMatch = exp.match(forAliasRE); if (!inMatch) return; var res = {}; res.for = inMatch[2].trim(); var alias = inMatch[1].trim().replace(stripParensRE, ""), iteratorMatch = alias.match(forIteratorRE); iteratorMatch ? (res.alias = alias.replace(forIteratorRE, "").trim(), res.iterator1 = iteratorMatch[1].trim(), iteratorMatch[2] && (res.iterator2 = iteratorMatch[2].trim())) : res.alias = alias; return res; }(exp); res && extend(el, res); } } function addIfCondition(el, condition) { el.ifConditions || (el.ifConditions = []), el.ifConditions.push(condition); } function getSlotName(binding) { var name = binding.name.replace(slotRE, ""); return name || "#" !== binding.name[0] && (name = "default"), dynamicArgRE.test(name) ? { name: name.slice(1, -1), dynamic: !0 } : { name: '"' + name + '"', dynamic: !1 }; } function parseModifiers(name) { var match = name.match(modifierRE); if (match) { var ret = {}; return match.forEach((function(m) { ret[m.slice(1)] = !0; })), ret; } } function makeAttrsMap(attrs) { for (var map = {}, i = 0, l = attrs.length; i < l; i++) map[attrs[i].name] = attrs[i].value; return map; } var ieNSBug = /^xmlns:NS\d+/, ieNSPrefix = /^NS\d+:/; function cloneASTElement(el) { return createASTElement(el.tag, el.attrsList.slice(), el.parent); } var modules$1 = [ klass$1, style$1, { preTransformNode: function(el, options) { if ("input" === el.tag) { var typeBinding, map = el.attrsMap; if (!map["v-model"]) return; if ((map[":type"] || map["v-bind:type"]) && (typeBinding = getBindingAttr(el, "type")), map.type || typeBinding || !map["v-bind"] || (typeBinding = "(" + map["v-bind"] + ").type"), typeBinding) { var ifCondition = getAndRemoveAttr(el, "v-if", !0), ifConditionExtra = ifCondition ? "&&(" + ifCondition + ")" : "", hasElse = null != getAndRemoveAttr(el, "v-else", !0), elseIfCondition = getAndRemoveAttr(el, "v-else-if", !0), branch0 = cloneASTElement(el); processFor(branch0), addRawAttr(branch0, "type", "checkbox"), processElement(branch0, options), branch0.processed = !0, branch0.if = "(" + typeBinding + ")==='checkbox'" + ifConditionExtra, addIfCondition(branch0, { exp: branch0.if, block: branch0 }); var branch1 = cloneASTElement(el); getAndRemoveAttr(branch1, "v-for", !0), addRawAttr(branch1, "type", "radio"), processElement(branch1, options), addIfCondition(branch0, { exp: "(" + typeBinding + ")==='radio'" + ifConditionExtra, block: branch1 }); var branch2 = cloneASTElement(el); return getAndRemoveAttr(branch2, "v-for", !0), addRawAttr(branch2, ":type", typeBinding), processElement(branch2, options), addIfCondition(branch0, { exp: ifCondition, block: branch2 }), hasElse ? branch0.else = !0 : elseIfCondition && (branch0.elseif = elseIfCondition), branch0; } } } } ]; var isStaticKey, isPlatformReservedTag, baseOptions = { expectHTML: !0, modules: modules$1, directives: { model: function(el, dir, _warn) { _warn; var value = dir.value, modifiers = dir.modifiers, tag = el.tag, type = el.attrsMap.type; if (el.component) return genComponentModel(el, value, modifiers), !1; if ("select" === tag) !function(el, value, modifiers) { var code = 'var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = "_value" in o ? o._value : o.value;return ' + (modifiers && modifiers.number ? "_n(val)" : "val") + "});"; code = code + " " + genAssignmentCode(value, "$event.target.multiple ? $$selectedVal : $$selectedVal[0]"), addHandler(el, "change", code, null, !0); }(el, value, modifiers); else if ("input" === tag && "checkbox" === type) !function(el, value, modifiers) { var number = modifiers && modifiers.number, valueBinding = getBindingAttr(el, "value") || "null", trueValueBinding = getBindingAttr(el, "true-value") || "true", falseValueBinding = getBindingAttr(el, "false-value") || "false"; addProp(el, "checked", "Array.isArray(" + value + ")?_i(" + value + "," + valueBinding + ")>-1" + ("true" === trueValueBinding ? ":(" + value + ")" : ":_q(" + value + "," + trueValueBinding + ")")), addHandler(el, "change", "var $$a=" + value + ",$$el=$event.target,$$c=$$el.checked?(" + trueValueBinding + "):(" + falseValueBinding + ");if(Array.isArray($$a)){var $$v=" + (number ? "_n(" + valueBinding + ")" : valueBinding) + ",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&(" + genAssignmentCode(value, "$$a.concat([$$v])") + ")}else{$$i>-1&&(" + genAssignmentCode(value, "$$a.slice(0,$$i).concat($$a.slice($$i+1))") + ")}}else{" + genAssignmentCode(value, "$$c") + "}", null, !0); }(el, value, modifiers); else if ("input" === tag && "radio" === type) !function(el, value, modifiers) { var number = modifiers && modifiers.number, valueBinding = getBindingAttr(el, "value") || "null"; addProp(el, "checked", "_q(" + value + "," + (valueBinding = number ? "_n(" + valueBinding + ")" : valueBinding) + ")"), addHandler(el, "change", genAssignmentCode(value, valueBinding), null, !0); }(el, value, modifiers); else if ("input" === tag || "textarea" === tag) !function(el, value, modifiers) { var type = el.attrsMap.type; 0; var ref = modifiers || {}, lazy = ref.lazy, number = ref.number, trim = ref.trim, needCompositionGuard = !lazy && "range" !== type, event = lazy ? "change" : "range" === type ? RANGE_TOKEN : "input", valueExpression = "$event.target.value"; trim && (valueExpression = "$event.target.value.trim()"); number && (valueExpression = "_n(" + valueExpression + ")"); var code = genAssignmentCode(value, valueExpression); needCompositionGuard && (code = "if($event.target.composing)return;" + code); addProp(el, "value", "(" + value + ")"), addHandler(el, event, code, null, !0), (trim || number) && addHandler(el, "blur", "$forceUpdate()"); }(el, value, modifiers); else { if (!config.isReservedTag(tag)) return genComponentModel(el, value, modifiers), !1; } return !0; }, text: function(el, dir) { dir.value && addProp(el, "textContent", "_s(" + dir.value + ")", dir); }, html: function(el, dir) { dir.value && addProp(el, "innerHTML", "_s(" + dir.value + ")", dir); } }, isPreTag: function(tag) { return "pre" === tag; }, isUnaryTag: isUnaryTag, mustUseProp: mustUseProp, canBeLeftOpenTag: canBeLeftOpenTag, isReservedTag: isReservedTag, getTagNamespace: getTagNamespace, staticKeys: function(modules) { return modules.reduce((function(keys, m) { return keys.concat(m.staticKeys || []); }), []).join(","); }(modules$1) }, genStaticKeysCached = cached((function(keys) { return makeMap("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap" + (keys ? "," + keys : "")); })); function optimize(root, options) { root && (isStaticKey = genStaticKeysCached(options.staticKeys || ""), isPlatformReservedTag = options.isReservedTag || no, function markStatic$1(node) { if (node.static = function(node) { if (2 === node.type) return !1; if (3 === node.type) return !0; return !(!node.pre && (node.hasBindings || node.if || node.for || isBuiltInTag(node.tag) || !isPlatformReservedTag(node.tag) || function(node) { for (;node.parent; ) { if ("template" !== (node = node.parent).tag) return !1; if (node.for) return !0; } return !1; }(node) || !Object.keys(node).every(isStaticKey))); }(node), 1 === node.type) { if (!isPlatformReservedTag(node.tag) && "slot" !== node.tag && null == node.attrsMap["inline-template"]) return; for (var i = 0, l = node.children.length; i < l; i++) { var child = node.children[i]; markStatic$1(child), child.static || (node.static = !1); } if (node.ifConditions) for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 < l$1; i$1++) { var block = node.ifConditions[i$1].block; markStatic$1(block), block.static || (node.static = !1); } } }(root), function markStaticRoots(node, isInFor) { if (1 === node.type) { if ((node.static || node.once) && (node.staticInFor = isInFor), node.static && node.children.length && (1 !== node.children.length || 3 !== node.children[0].type)) return void (node.staticRoot = !0); if (node.staticRoot = !1, node.children) for (var i = 0, l = node.children.length; i < l; i++) markStaticRoots(node.children[i], isInFor || !!node.for); if (node.ifConditions) for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 < l$1; i$1++) markStaticRoots(node.ifConditions[i$1].block, isInFor); } }(root, !1)); } var fnExpRE = /^([\w$_]+|\([^)]*?\))\s*=>|^function\s*(?:[\w$]+)?\s*\(/, fnInvokeRE = /\([^)]*?\);*$/, simplePathRE = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/, keyCodes = { esc: 27, tab: 9, enter: 13, space: 32, up: 38, left: 37, right: 39, down: 40, delete: [ 8, 46 ] }, keyNames = { esc: [ "Esc", "Escape" ], tab: "Tab", enter: "Enter", space: [ " ", "Spacebar" ], up: [ "Up", "ArrowUp" ], left: [ "Left", "ArrowLeft" ], right: [ "Right", "ArrowRight" ], down: [ "Down", "ArrowDown" ], delete: [ "Backspace", "Delete", "Del" ] }, genGuard = function(condition) { return "if(" + condition + ")return null;"; }, modifierCode = { stop: "$event.stopPropagation();", prevent: "$event.preventDefault();", self: genGuard("$event.target !== $event.currentTarget"), ctrl: genGuard("!$event.ctrlKey"), shift: genGuard("!$event.shiftKey"), alt: genGuard("!$event.altKey"), meta: genGuard("!$event.metaKey"), left: genGuard("'button' in $event && $event.button !== 0"), middle: genGuard("'button' in $event && $event.button !== 1"), right: genGuard("'button' in $event && $event.button !== 2") }; function genHandlers(events, isNative) { var prefix = isNative ? "nativeOn:" : "on:", staticHandlers = "", dynamicHandlers = ""; for (var name in events) { var handlerCode = genHandler(events[name]); events[name] && events[name].dynamic ? dynamicHandlers += name + "," + handlerCode + "," : staticHandlers += '"' + name + '":' + handlerCode + ","; } return staticHandlers = "{" + staticHandlers.slice(0, -1) + "}", dynamicHandlers ? prefix + "_d(" + staticHandlers + ",[" + dynamicHandlers.slice(0, -1) + "])" : prefix + staticHandlers; } function genHandler(handler) { if (!handler) return "function(){}"; if (Array.isArray(handler)) return "[" + handler.map((function(handler) { return genHandler(handler); })).join(",") + "]"; var isMethodPath = simplePathRE.test(handler.value), isFunctionExpression = fnExpRE.test(handler.value), isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, "")); if (handler.modifiers) { var code = "", genModifierCode = "", keys = []; for (var key in handler.modifiers) if (modifierCode[key]) genModifierCode += modifierCode[key], keyCodes[key] && keys.push(key); else if ("exact" === key) { var modifiers = handler.modifiers; genModifierCode += genGuard([ "ctrl", "shift", "alt", "meta" ].filter((function(keyModifier) { return !modifiers[keyModifier]; })).map((function(keyModifier) { return "$event." + keyModifier + "Key"; })).join("||")); } else keys.push(key); return keys.length && (code += function(keys) { return "if(!$event.type.indexOf('key')&&" + keys.map(genFilterCode).join("&&") + ")return null;"; }(keys)), genModifierCode && (code += genModifierCode), "function($event){" + code + (isMethodPath ? "return " + handler.value + "($event)" : isFunctionExpression ? "return (" + handler.value + ")($event)" : isFunctionInvocation ? "return " + handler.value : handler.value) + "}"; } return isMethodPath || isFunctionExpression ? handler.value : "function($event){" + (isFunctionInvocation ? "return " + handler.value : handler.value) + "}"; } function genFilterCode(key) { var keyVal = parseInt(key, 10); if (keyVal) return "$event.keyCode!==" + keyVal; var keyCode = keyCodes[key], keyName = keyNames[key]; return "_k($event.keyCode," + JSON.stringify(key) + "," + JSON.stringify(keyCode) + ",$event.key," + JSON.stringify(keyName) + ")"; } var baseDirectives = { on: function(el, dir) { el.wrapListeners = function(code) { return "_g(" + code + "," + dir.value + ")"; }; }, bind: function(el, dir) { el.wrapData = function(code) { return "_b(" + code + ",'" + el.tag + "'," + dir.value + "," + (dir.modifiers && dir.modifiers.prop ? "true" : "false") + (dir.modifiers && dir.modifiers.sync ? ",true" : "") + ")"; }; }, cloak: noop }, CodegenState = function(options) { this.options = options, this.warn = options.warn || baseWarn, this.transforms = pluckModuleFunction(options.modules, "transformCode"), this.dataGenFns = pluckModuleFunction(options.modules, "genData"), this.directives = extend(extend({}, baseDirectives), options.directives); var isReservedTag = options.isReservedTag || no; this.maybeComponent = function(el) { return !!el.component || !isReservedTag(el.tag); }, this.onceId = 0, this.staticRenderFns = [], this.pre = !1; }; function generate(ast, options) { var state = new CodegenState(options); return { render: "with(this){return " + (ast ? genElement(ast, state) : '_c("div")') + "}", staticRenderFns: state.staticRenderFns }; } function genElement(el, state) { if (el.parent && (el.pre = el.pre || el.parent.pre), el.staticRoot && !el.staticProcessed) return genStatic(el, state); if (el.once && !el.onceProcessed) return genOnce(el, state); if (el.for && !el.forProcessed) return genFor(el, state); if (el.if && !el.ifProcessed) return genIf(el, state); if ("template" !== el.tag || el.slotTarget || state.pre) { if ("slot" === el.tag) return function(el, state) { var slotName = el.slotName || '"default"', children = genChildren(el, state), res = "_t(" + slotName + (children ? "," + children : ""), attrs = el.attrs || el.dynamicAttrs ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map((function(attr) { return { name: camelize(attr.name), value: attr.value, dynamic: attr.dynamic }; }))) : null, bind$$1 = el.attrsMap["v-bind"]; !attrs && !bind$$1 || children || (res += ",null"); attrs && (res += "," + attrs); bind$$1 && (res += (attrs ? "" : ",null") + "," + bind$$1); return res + ")"; }(el, state); var code; if (el.component) code = function(componentName, el, state) { var children = el.inlineTemplate ? null : genChildren(el, state, !0); return "_c(" + componentName + "," + genData$2(el, state) + (children ? "," + children : "") + ")"; }(el.component, el, state); else { var data; (!el.plain || el.pre && state.maybeComponent(el)) && (data = genData$2(el, state)); var children = el.inlineTemplate ? null : genChildren(el, state, !0); code = "_c('" + el.tag + "'" + (data ? "," + data : "") + (children ? "," + children : "") + ")"; } for (var i = 0; i < state.transforms.length; i++) code = state.transforms[i](el, code); return code; } return genChildren(el, state) || "void 0"; } function genStatic(el, state) { el.staticProcessed = !0; var originalPreState = state.pre; return el.pre && (state.pre = el.pre), state.staticRenderFns.push("with(this){return " + genElement(el, state) + "}"), state.pre = originalPreState, "_m(" + (state.staticRenderFns.length - 1) + (el.staticInFor ? ",true" : "") + ")"; } function genOnce(el, state) { if (el.onceProcessed = !0, el.if && !el.ifProcessed) return genIf(el, state); if (el.staticInFor) { for (var key = "", parent = el.parent; parent; ) { if (parent.for) { key = parent.key; break; } parent = parent.parent; } return key ? "_o(" + genElement(el, state) + "," + state.onceId++ + "," + key + ")" : genElement(el, state); } return genStatic(el, state); } function genIf(el, state, altGen, altEmpty) { return el.ifProcessed = !0, function genIfConditions(conditions, state, altGen, altEmpty) { if (!conditions.length) return altEmpty || "_e()"; var condition = conditions.shift(); return condition.exp ? "(" + condition.exp + ")?" + genTernaryExp(condition.block) + ":" + genIfConditions(conditions, state, altGen, altEmpty) : "" + genTernaryExp(condition.block); function genTernaryExp(el) { return altGen ? altGen(el, state) : el.once ? genOnce(el, state) : genElement(el, state); } }(el.ifConditions.slice(), state, altGen, altEmpty); } function genFor(el, state, altGen, altHelper) { var exp = el.for, alias = el.alias, iterator1 = el.iterator1 ? "," + el.iterator1 : "", iterator2 = el.iterator2 ? "," + el.iterator2 : ""; return el.forProcessed = !0, (altHelper || "_l") + "((" + exp + "),function(" + alias + iterator1 + iterator2 + "){return " + (altGen || genElement)(el, state) + "})"; } function genData$2(el, state) { var data = "{", dirs = function(el, state) { var dirs = el.directives; if (!dirs) return; var i, l, dir, needRuntime, res = "directives:[", hasRuntime = !1; for (i = 0, l = dirs.length; i < l; i++) { dir = dirs[i], needRuntime = !0; var gen = state.directives[dir.name]; gen && (needRuntime = !!gen(el, dir, state.warn)), needRuntime && (hasRuntime = !0, res += '{name:"' + dir.name + '",rawName:"' + dir.rawName + '"' + (dir.value ? ",value:(" + dir.value + "),expression:" + JSON.stringify(dir.value) : "") + (dir.arg ? ",arg:" + (dir.isDynamicArg ? dir.arg : '"' + dir.arg + '"') : "") + (dir.modifiers ? ",modifiers:" + JSON.stringify(dir.modifiers) : "") + "},"); } if (hasRuntime) return res.slice(0, -1) + "]"; }(el, state); dirs && (data += dirs + ","), el.key && (data += "key:" + el.key + ","), el.ref && (data += "ref:" + el.ref + ","), el.refInFor && (data += "refInFor:true,"), el.pre && (data += "pre:true,"), el.component && (data += 'tag:"' + el.tag + '",'); for (var i = 0; i < state.dataGenFns.length; i++) data += state.dataGenFns[i](el); if (el.attrs && (data += "attrs:" + genProps(el.attrs) + ","), el.props && (data += "domProps:" + genProps(el.props) + ","), el.events && (data += genHandlers(el.events, !1) + ","), el.nativeEvents && (data += genHandlers(el.nativeEvents, !0) + ","), el.slotTarget && !el.slotScope && (data += "slot:" + el.slotTarget + ","), el.scopedSlots && (data += function(el, slots, state) { var needsForceUpdate = el.for || Object.keys(slots).some((function(key) { var slot = slots[key]; return slot.slotTargetDynamic || slot.if || slot.for || containsSlotChild(slot); })), needsKey = !!el.if; if (!needsForceUpdate) for (var parent = el.parent; parent; ) { if (parent.slotScope && parent.slotScope !== emptySlotScopeToken || parent.for) { needsForceUpdate = !0; break; } parent.if && (needsKey = !0), parent = parent.parent; } var generatedSlots = Object.keys(slots).map((function(key) { return genScopedSlot(slots[key], state); })).join(","); return "scopedSlots:_u([" + generatedSlots + "]" + (needsForceUpdate ? ",null,true" : "") + (!needsForceUpdate && needsKey ? ",null,false," + function(str) { var hash = 5381, i = str.length; for (;i; ) hash = 33 * hash ^ str.charCodeAt(--i); return hash >>> 0; }(generatedSlots) : "") + ")"; }(el, el.scopedSlots, state) + ","), el.model && (data += "model:{value:" + el.model.value + ",callback:" + el.model.callback + ",expression:" + el.model.expression + "},"), el.inlineTemplate) { var inlineTemplate = function(el, state) { var ast = el.children[0]; 0; if (ast && 1 === ast.type) { var inlineRenderFns = generate(ast, state.options); return "inlineTemplate:{render:function(){" + inlineRenderFns.render + "},staticRenderFns:[" + inlineRenderFns.staticRenderFns.map((function(code) { return "function(){" + code + "}"; })).join(",") + "]}"; } }(el, state); inlineTemplate && (data += inlineTemplate + ","); } return data = data.replace(/,$/, "") + "}", el.dynamicAttrs && (data = "_b(" + data + ',"' + el.tag + '",' + genProps(el.dynamicAttrs) + ")"), el.wrapData && (data = el.wrapData(data)), el.wrapListeners && (data = el.wrapListeners(data)), data; } function containsSlotChild(el) { return 1 === el.type && ("slot" === el.tag || el.children.some(containsSlotChild)); } function genScopedSlot(el, state) { var isLegacySyntax = el.attrsMap["slot-scope"]; if (el.if && !el.ifProcessed && !isLegacySyntax) return genIf(el, state, genScopedSlot, "null"); if (el.for && !el.forProcessed) return genFor(el, state, genScopedSlot); var slotScope = el.slotScope === emptySlotScopeToken ? "" : String(el.slotScope), fn = "function(" + slotScope + "){return " + ("template" === el.tag ? el.if && isLegacySyntax ? "(" + el.if + ")?" + (genChildren(el, state) || "undefined") + ":undefined" : genChildren(el, state) || "undefined" : genElement(el, state)) + "}", reverseProxy = slotScope ? "" : ",proxy:true"; return "{key:" + (el.slotTarget || '"default"') + ",fn:" + fn + reverseProxy + "}"; } function genChildren(el, state, checkSkip, altGenElement, altGenNode) { var children = el.children; if (children.length) { var el$1 = children[0]; if (1 === children.length && el$1.for && "template" !== el$1.tag && "slot" !== el$1.tag) { var normalizationType = checkSkip ? state.maybeComponent(el$1) ? ",1" : ",0" : ""; return "" + (altGenElement || genElement)(el$1, state) + normalizationType; } var normalizationType$1 = checkSkip ? function(children, maybeComponent) { for (var res = 0, i = 0; i < children.length; i++) { var el = children[i]; if (1 === el.type) { if (needsNormalization(el) || el.ifConditions && el.ifConditions.some((function(c) { return needsNormalization(c.block); }))) { res = 2; break; } (maybeComponent(el) || el.ifConditions && el.ifConditions.some((function(c) { return maybeComponent(c.block); }))) && (res = 1); } } return res; }(children, state.maybeComponent) : 0, gen = altGenNode || genNode; return "[" + children.map((function(c) { return gen(c, state); })).join(",") + "]" + (normalizationType$1 ? "," + normalizationType$1 : ""); } } function needsNormalization(el) { return void 0 !== el.for || "template" === el.tag || "slot" === el.tag; } function genNode(node, state) { return 1 === node.type ? genElement(node, state) : 3 === node.type && node.isComment ? function(comment) { return "_e(" + JSON.stringify(comment.text) + ")"; }(node) : function(text) { return "_v(" + (2 === text.type ? text.expression : transformSpecialNewlines(JSON.stringify(text.text))) + ")"; }(node); } function genProps(props) { for (var staticProps = "", dynamicProps = "", i = 0; i < props.length; i++) { var prop = props[i], value = transformSpecialNewlines(prop.value); prop.dynamic ? dynamicProps += prop.name + "," + value + "," : staticProps += '"' + prop.name + '":' + value + ","; } return staticProps = "{" + staticProps.slice(0, -1) + "}", dynamicProps ? "_d(" + staticProps + ",[" + dynamicProps.slice(0, -1) + "])" : staticProps; } function transformSpecialNewlines(text) { return text.replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029"); } new RegExp("\\b" + "do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments".split(",").join("\\b|\\b") + "\\b"), new RegExp("\\b" + "delete,typeof,void".split(",").join("\\s*\\([^\\)]*\\)|\\b") + "\\s*\\([^\\)]*\\)"); function createFunction(code, errors) { try { return new Function(code); } catch (err) { return errors.push({ err: err, code: code }), noop; } } function createCompileToFunctionFn(compile) { var cache = Object.create(null); return function(template, options, vm) { (options = extend({}, options)).warn; delete options.warn; var key = options.delimiters ? String(options.delimiters) + template : template; if (cache[key]) return cache[key]; var compiled = compile(template, options); var res = {}, fnGenErrors = []; return res.render = createFunction(compiled.render, fnGenErrors), res.staticRenderFns = compiled.staticRenderFns.map((function(code) { return createFunction(code, fnGenErrors); })), cache[key] = res; }; } var baseCompile, div, ref$1 = (baseCompile = function(template, options) { var ast = parse(template.trim(), options); !1 !== options.optimize && optimize(ast, options); var code = generate(ast, options); return { ast: ast, render: code.render, staticRenderFns: code.staticRenderFns }; }, function(baseOptions) { function compile(template, options) { var finalOptions = Object.create(baseOptions), errors = [], tips = []; if (options) for (var key in options.modules && (finalOptions.modules = (baseOptions.modules || []).concat(options.modules)), options.directives && (finalOptions.directives = extend(Object.create(baseOptions.directives || null), options.directives)), options) "modules" !== key && "directives" !== key && (finalOptions[key] = options[key]); finalOptions.warn = function(msg, range, tip) { (tip ? tips : errors).push(msg); }; var compiled = baseCompile(template.trim(), finalOptions); return compiled.errors = errors, compiled.tips = tips, compiled; } return { compile: compile, compileToFunctions: createCompileToFunctionFn(compile) }; })(baseOptions), compileToFunctions = (ref$1.compile, ref$1.compileToFunctions); function getShouldDecode(href) { return (div = div || document.createElement("div")).innerHTML = href ? '' : '
', div.innerHTML.indexOf(" ") > 0; } var shouldDecodeNewlines = !!inBrowser && getShouldDecode(!1), shouldDecodeNewlinesForHref = !!inBrowser && getShouldDecode(!0), idToTemplate = cached((function(id) { var el = query(id); return el && el.innerHTML; })), mount = Vue.prototype.$mount; Vue.prototype.$mount = function(el, hydrating) { if ((el = el && query(el)) === document.body || el === document.documentElement) return this; var options = this.$options; if (!options.render) { var template = options.template; if (template) if ("string" == typeof template) "#" === template.charAt(0) && (template = idToTemplate(template)); else { if (!template.nodeType) return this; template = template.innerHTML; } else el && (template = function(el) { if (el.outerHTML) return el.outerHTML; var container = document.createElement("div"); return container.appendChild(el.cloneNode(!0)), container.innerHTML; }(el)); if (template) { 0; var ref = compileToFunctions(template, { outputSourceRange: !1, shouldDecodeNewlines: shouldDecodeNewlines, shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref, delimiters: options.delimiters, comments: options.comments }, this), render = ref.render, staticRenderFns = ref.staticRenderFns; options.render = render, options.staticRenderFns = staticRenderFns; } } return mount.call(this, el, hydrating); }, Vue.compile = compileToFunctions, __webpack_exports__.a = Vue; }).call(this, __webpack_require__(66), __webpack_require__(190).setImmediate); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.d(__webpack_exports__, "a", (function() { return keyboardMap; })); var keyboardMap = [ "", "", "", "CANCEL", "", "", "HELP", "", "BACK_SPACE", "TAB", "", "", "CLEAR", "ENTER", "ENTER_SPECIAL", "", "SHIFT", "CONTROL", "ALT", "PAUSE", "CAPS_LOCK", "KANA", "EISU", "JUNJA", "FINAL", "HANJA", "", "ESCAPE", "CONVERT", "NONCONVERT", "ACCEPT", "MODECHANGE", "SPACE", "PAGE_UP", "PAGE_DOWN", "END", "HOME", "LEFT", "UP", "RIGHT", "DOWN", "SELECT", "PRINT", "EXECUTE", "PRINTSCREEN", "INSERT", "DELETE", "", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "COLON", "SEMICOLON", "LESS_THAN", "EQUALS", "GREATER_THAN", "QUESTION_MARK", "AT", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "OS_KEY", "", "CONTEXT_MENU", "", "SLEEP", "NUMPAD0", "NUMPAD1", "NUMPAD2", "NUMPAD3", "NUMPAD4", "NUMPAD5", "NUMPAD6", "NUMPAD7", "NUMPAD8", "NUMPAD9", "MULTIPLY", "ADD", "SEPARATOR", "SUBTRACT", "DECIMAL", "DIVIDE", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", "F13", "F14", "F15", "F16", "F17", "F18", "F19", "F20", "F21", "F22", "F23", "F24", "", "", "", "", "", "", "", "", "NUM_LOCK", "SCROLL_LOCK", "WIN_OEM_FJ_JISHO", "WIN_OEM_FJ_MASSHOU", "WIN_OEM_FJ_TOUROKU", "WIN_OEM_FJ_LOYA", "WIN_OEM_FJ_ROYA", "", "", "", "", "", "", "", "", "", "CIRCUMFLEX", "EXCLAMATION", "DOUBLE_QUOTE", "HASH", "DOLLAR", "PERCENT", "AMPERSAND", "UNDERSCORE", "OPEN_PAREN", "CLOSE_PAREN", "ASTERISK", "PLUS", "PIPE", "HYPHEN_MINUS", "OPEN_CURLY_BRACKET", "CLOSE_CURLY_BRACKET", "TILDE", "", "", "", "", "VOLUME_MUTE", "VOLUME_DOWN", "VOLUME_UP", "", "", "SEMICOLON", "EQUALS", "COMMA", "MINUS", "PERIOD", "SLASH", "BACK_QUOTE", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "OPEN_BRACKET", "BACK_SLASH", "CLOSE_BRACKET", "QUOTE", "", "META", "ALTGR", "", "WIN_ICO_HELP", "WIN_ICO_00", "", "WIN_ICO_CLEAR", "", "", "WIN_OEM_RESET", "WIN_OEM_JUMP", "WIN_OEM_PA1", "WIN_OEM_PA2", "WIN_OEM_PA3", "WIN_OEM_WSCTRL", "WIN_OEM_CUSEL", "WIN_OEM_ATTN", "WIN_OEM_FINISH", "WIN_OEM_COPY", "WIN_OEM_AUTO", "WIN_OEM_ENLW", "WIN_OEM_BACKTAB", "ATTN", "CRSEL", "EXSEL", "EREOF", "PLAY", "ZOOM", "", "PA1", "WIN_OEM_CLEAR", "" ]; }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(api, utils, con) { __webpack_require__.d(__webpack_exports__, "d", (function() { return malToKitsu; })), __webpack_require__.d(__webpack_exports__, "c", (function() { return kitsuToMal; })), __webpack_require__.d(__webpack_exports__, "b", (function() { return kitsuSlugtoKitsu; })), __webpack_require__.d(__webpack_exports__, "a", (function() { return getTitle; })); __webpack_require__(31); function accessToken() { return api.settings.get("kitsuToken"); } function malToKitsu(malid, type) { return api.request.xhr("Get", { url: "https://kitsu.io/api/edge/mappings?filter[externalSite]=myanimelist/" + type + "&filter[externalId]=" + malid + "&include=item&fields[item]=id", headers: { "Content-Type": "application/vnd.api+json", Accept: "application/vnd.api+json" } }).then(response => { return JSON.parse(response.responseText); }); } function kitsuToMal(kitsuId, type) { return api.request.xhr("Get", { url: "https://kitsu.io/api/edge/" + type + "/" + kitsuId + "/mappings?filter[externalSite]=myanimelist/" + type, headers: { "Content-Type": "application/vnd.api+json", Accept: "application/vnd.api+json" } }).then(response => { var res = JSON.parse(response.responseText); return con.log("[KtoM]", res), void 0 !== res.data && res.data.length ? res.data[0].attributes.externalId : null; }); } function kitsuSlugtoKitsu(kitsuSlug, type) { var headers = { "Content-Type": "application/vnd.api+json", Accept: "application/vnd.api+json" }; return accessToken() && (headers.Authorization = "Bearer " + accessToken()), api.request.xhr("Get", { url: "https://kitsu.io/api/edge/" + type + "?filter[slug]=" + kitsuSlug + "&page[limit]=1&include=mappings", headers: headers }).then(response => { var res = JSON.parse(response.responseText), malId = NaN; if (void 0 !== res && void 0 !== res.included) for (var k = 0; k < res.included.length; k++) { var mapping = res.included[k]; if ("mappings" == mapping.type && mapping.attributes.externalSite === "myanimelist/" + type) { malId = mapping.attributes.externalId, res.included.splice(k, 1); break; } } return { res: res, malId: malId }; }); } function getTitle(titles) { var title = titles.en; if (void 0 !== title && title || (title = titles.en_jp), void 0 !== title && title || (title = titles.ja_jp), void 0 === title || !title) { var keys = Object.values(titles).filter(obj => obj); if (!keys.length) return "No Title"; title = keys[0]; } return title; } }).call(this, __webpack_require__(0), __webpack_require__(2), __webpack_require__(1)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(utils, con, api) { __webpack_require__.d(__webpack_exports__, "a", (function() { return Single; })); var _singleAbstract__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(12), _helper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(10), _definitions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5), __awaiter = function(thisArg, _arguments, P, generator) { return new (P || (P = Promise))((function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } function step(result) { var value; result.done ? resolve(result.value) : (value = result.value, value instanceof P ? value : new P((function(resolve) { resolve(value); }))).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); })); }; class Single extends _singleAbstract__WEBPACK_IMPORTED_MODULE_0__.a { constructor() { super(...arguments), this.displayUrl = "", this.shortName = "AniList", this.authenticationUrl = "https://anilist.co/api/v2/oauth/authorize?client_id=1487&response_type=token"; } handleUrl(url) { if (url.match(/anilist\.co\/(anime|manga)\/\d*/i)) return this.type = utils.urlPart(url, 3), void (this.ids.ani = utils.urlPart(url, 4)); if (url.match(/myanimelist\.net\/(anime|manga)\/\d*/i)) return this.type = utils.urlPart(url, 3), void (this.ids.mal = utils.urlPart(url, 4)); throw this.errorObj(_definitions__WEBPACK_IMPORTED_MODULE_2__.a.UrlNotSuported, "Url not supported"); } getCacheKey() { return _helper__WEBPACK_IMPORTED_MODULE_1__.a(this.ids.mal, this.ids.ani); } _getStatus() { return parseInt(_helper__WEBPACK_IMPORTED_MODULE_1__.b[this.animeInfo.mediaListEntry.status]); } _setStatus(status) { this.animeInfo.mediaListEntry.status = _helper__WEBPACK_IMPORTED_MODULE_1__.b[status]; } _getScore() { if (0 === this.animeInfo.mediaListEntry.score) return 0; var score = Math.round(this.animeInfo.mediaListEntry.score / 10); return 0 === score ? 1 : score; } _setScore(score) { this.animeInfo.mediaListEntry.score = 10 * score; } _getEpisode() { return this.animeInfo.mediaListEntry.progress; } _setEpisode(episode) { this.animeInfo.mediaListEntry.progress = parseInt(episode + ""); } _getVolume() { return this.animeInfo.mediaListEntry.progressVolumes; } _setVolume(volume) { this.animeInfo.mediaListEntry.progressVolumes = volume; } _getStreamingUrl() { var tags = this.animeInfo.mediaListEntry.notes; return utils.getUrlFromTags(tags); } _setStreamingUrl(url) { var tags = this.animeInfo.mediaListEntry.notes; null != tags && "null" != tags || (tags = ""), tags = utils.setUrlInTags(url, tags), this.animeInfo.mediaListEntry.notes = tags; } _getTitle() { return this.animeInfo.title.userPreferred; } _getTotalEpisodes() { var eps = this.animeInfo.episodes ? this.animeInfo.episodes : this.animeInfo.chapters; return null == eps ? 0 : eps; } _getTotalVolumes() { var vol = this.animeInfo.volumes; return vol || 0; } _getDisplayUrl() { return "" !== this.displayUrl && null != this.displayUrl ? this.displayUrl : this.url; } _getImage() { return Promise.resolve(this.animeInfo.coverImage.large); } _getRating() { return Promise.resolve(this.animeInfo.averageScore); } _update() { return __awaiter(this, void 0, void 0, (function*() { var selectId = this.ids.mal, selectQuery = "idMal"; isNaN(this.ids.mal) && (selectId = this.ids.ani, selectQuery = "id"); var query = `\n query ($id: Int, $type: MediaType) {\n Media (${selectQuery}: $id, type: $type) {\n id\n idMal\n siteUrl\n episodes\n chapters\n volumes\n averageScore\n coverImage{\n large\n }\n title {\n userPreferred\n }\n mediaListEntry {\n status\n progress\n progressVolumes\n score(format: POINT_100)\n repeat\n notes\n }\n }\n }\n `, variables = { id: selectId, type: this.type.toUpperCase() }; return this._authenticated = !0, this.apiCall(query, variables).catch(e => { if (e.code === _definitions__WEBPACK_IMPORTED_MODULE_2__.a.NotAutenticated) return this._authenticated = !1, this.apiCall(query, variables, !1); throw e; }).then(json => { if (con.log("[SINGLE]", "Data", json), this.animeInfo = json.data.Media, this.ids.ani = this.animeInfo.id, isNaN(this.ids.mal) && this.animeInfo.idMal && (this.ids.mal = this.animeInfo.idMal), this.displayUrl = this.animeInfo.siteUrl, this._onList = !0, null === this.animeInfo.mediaListEntry && (this._onList = !1, this.animeInfo.mediaListEntry = { notes: "", progress: 0, progressVolumes: 0, repeat: 0, score: 0, status: "PLANNING" }), !this._authenticated) throw this.errorObj(_definitions__WEBPACK_IMPORTED_MODULE_2__.a.NotAutenticated, "Not Authenticated"); }); })); } _sync() { return __awaiter(this, void 0, void 0, (function*() { var query = "\n mutation ($mediaId: Int, $status: MediaListStatus, $progress: Int, $scoreRaw: Int, $notes: String) {\n SaveMediaListEntry (mediaId: $mediaId, status: $status, progress: $progress, scoreRaw: $scoreRaw, notes: $notes) {\n id\n status\n progress\n }\n }\n ", variables = { mediaId: this.ids.ani, status: this.animeInfo.mediaListEntry.status, progress: this.animeInfo.mediaListEntry.progress, scoreRaw: this.animeInfo.mediaListEntry.score, notes: this.animeInfo.mediaListEntry.notes }; return "manga" == this.type && (query = "\n mutation ($mediaId: Int, $status: MediaListStatus, $progress: Int, $scoreRaw: Int, $notes: String, $volumes: Int) {\n SaveMediaListEntry (mediaId: $mediaId, status: $status, progress: $progress, scoreRaw: $scoreRaw, notes: $notes, progressVolumes: $volumes) {\n id\n status\n progress\n progressVolumes\n }\n }\n ", variables.volumes = this.animeInfo.mediaListEntry.progressVolumes), this.apiCall(query, variables); })); } apiCall(query, variables, authentication = !0) { var headers = { "Content-Type": "application/json", Accept: "application/json" }; return authentication && (headers.Authorization = "Bearer " + api.settings.get("anilistToken")), api.request.xhr("POST", { url: "https://graphql.anilist.co", headers: headers, data: JSON.stringify({ query: query, variables: variables }) }).then(response => { if (response.status > 499 && response.status < 600 || 0 === response.status) throw this.errorObj(_definitions__WEBPACK_IMPORTED_MODULE_2__.a.ServerOffline, "Server Offline status: " + response.status); var res = JSON.parse(response.responseText); if (void 0 !== res.errors && res.errors.length) { con.error("[SINGLE]", "Error", res.errors); var error = res.errors[0]; switch (error.status) { case 400: throw this.errorObj(_definitions__WEBPACK_IMPORTED_MODULE_2__.a.NotAutenticated, error.message); case 404: throw this.errorObj(_definitions__WEBPACK_IMPORTED_MODULE_2__.a.EntryNotFound, error.message); default: throw this.errorObj(error.status, error.message); } } return res; }); } getScoreMode() { return api.settings.get("anilistOptions").scoreFormat; } getScoreCheckbox() { switch (this.getScoreMode()) { case "POINT_3": return [ { value: "0", label: api.storage.lang("UI_Score_Not_Rated") }, { value: "85", label: "🙂" }, { value: "60", label: "😐" }, { value: "35", label: "🙁" } ]; case "POINT_5": return [ { value: "0", label: api.storage.lang("UI_Score_Not_Rated") }, { value: "90", label: "★★★★★" }, { value: "70", label: "★★★★" }, { value: "50", label: "★★★" }, { value: "30", label: "★★" }, { value: "10", label: "★" } ]; case "POINT_10_DECIMAL": for (var resArr = [ { value: "0", label: api.storage.lang("UI_Score_Not_Rated") } ], i = 1; i < 101; i++) resArr.push({ value: i.toString(), label: (i / 10).toFixed(1) }); return resArr; case "POINT_100": for (resArr = [ { value: "0", label: api.storage.lang("UI_Score_Not_Rated") } ], i = 1; i < 101; i++) resArr.push({ value: i.toString(), label: i }); return resArr; default: return super.getScoreCheckbox(); } } getScoreCheckboxValue() { var curScore = this.animeInfo.mediaListEntry.score; switch (this.getScoreMode()) { case "POINT_3": return curScore ? curScore >= 73 ? 85 : curScore <= 47 ? 35 : 60 : 0; case "POINT_5": return curScore ? curScore < 20 ? 10 : curScore < 40 ? 30 : curScore < 60 ? 50 : curScore < 80 ? 70 : 90 : 0; case "POINT_10_DECIMAL": case "POINT_100": return curScore; default: return super.getScoreCheckboxValue(); } } handleScoreCheckbox(value) { switch (this.getScoreMode()) { case "POINT_3": case "POINT_5": case "POINT_10_DECIMAL": case "POINT_100": this.animeInfo.mediaListEntry.score = value; break; default: super.handleScoreCheckbox(value); } } } }).call(this, __webpack_require__(2), __webpack_require__(1), __webpack_require__(0)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(utils, con, api) { __webpack_require__.d(__webpack_exports__, "a", (function() { return Single; })); var _singleAbstract__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(12), _helper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9), _definitions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5), __awaiter = function(thisArg, _arguments, P, generator) { return new (P || (P = Promise))((function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } function step(result) { var value; result.done ? resolve(result.value) : (value = result.value, value instanceof P ? value : new P((function(resolve) { resolve(value); }))).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); })); }; class Single extends _singleAbstract__WEBPACK_IMPORTED_MODULE_0__.a { constructor() { super(...arguments), this.shortName = "Kitsu", this.authenticationUrl = "https://kitsu.io/404?mal-sync=authentication"; } listI() { return this.animeInfo.data[0]; } animeI() { return this.animeInfo.included[0]; } handleUrl(url) { if (url.match(/kitsu\.io\/(anime|manga)\/.*/i)) return this.type = utils.urlPart(url, 3), void (this.ids.kitsu.slug = utils.urlPart(url, 4)); if (url.match(/myanimelist\.net\/(anime|manga)\/\d*/i)) return this.type = utils.urlPart(url, 3), void (this.ids.mal = utils.urlPart(url, 4)); throw this.errorObj(_definitions__WEBPACK_IMPORTED_MODULE_2__.a.UrlNotSuported, "Url not supported"); } getCacheKey() { return _helper__WEBPACK_IMPORTED_MODULE_1__.a(this.ids.mal, this.ids.kitsu.id); } _getStatus() { return this.listI().attributes.reconsuming && "current" === this.listI().attributes.status ? 23 : parseInt(_helper__WEBPACK_IMPORTED_MODULE_1__.c(this.listI().attributes.status)); } _setStatus(status) { 23 == status ? (status = 1, this.listI().attributes.reconsuming = !0) : this.listI().attributes.reconsuming = !1, this.listI().attributes.status = _helper__WEBPACK_IMPORTED_MODULE_1__.c(status, parseInt(status.toString())); } _getScore() { return this.listI().attributes.ratingTwenty ? Math.round(this.listI().attributes.ratingTwenty / 2) : 0; } _setScore(score) { this.listI().attributes.ratingTwenty = 0 !== score ? 2 * score : null; } _getEpisode() { return this.listI().attributes.progress; } _setEpisode(episode) { this.listI().attributes.progress = parseInt(episode + ""); } _getVolume() { return this.listI().attributes.volumesOwned; } _setVolume(volume) { this.listI().attributes.volumesOwned = volume; } _getStreamingUrl() { var tags = this.listI().attributes.notes; return utils.getUrlFromTags(tags); } _setStreamingUrl(url) { var tags = this.listI().attributes.notes; null != tags && "null" != tags || (tags = ""), tags = utils.setUrlInTags(url, tags), this.listI().attributes.notes = tags; } _getTitle() { return _helper__WEBPACK_IMPORTED_MODULE_1__.b(this.animeI().attributes.titles, this.animeI().attributes.canonicalTitle); } _getTotalEpisodes() { var eps = this.animeI().attributes.episodeCount ? this.animeI().attributes.episodeCount : this.animeI().attributes.chapterCount; return null == eps ? 0 : eps; } _getTotalVolumes() { var vol = this.animeI().attributes.volumeCount; return vol || 0; } _getDisplayUrl() { return "https://kitsu.io/" + this.getType() + "/" + this.animeI().attributes.slug; } _getImage() { return Promise.resolve(this.animeI().attributes.posterImage.large); } _getRating() { return null == this.animeI().attributes.averageRating ? Promise.resolve("") : Promise.resolve(this.animeI().attributes.averageRating + "%"); } _update() { return __awaiter(this, void 0, void 0, (function*() { if (isNaN(this.ids.mal)) { var kitsuSlugRes = yield this.kitsuSlugtoKitsu(this.ids.kitsu.slug, this.getType()); try { this.ids.kitsu.id = kitsuSlugRes.res.data[0].id, this.ids.mal = kitsuSlugRes.malId; } catch (e) { throw this._authenticated = !0, this.errorObj(_definitions__WEBPACK_IMPORTED_MODULE_2__.a.EntryNotFound, "Not found"); } } if (isNaN(this.ids.kitsu.id)) { var kitsuRes = yield this.malToKitsu(this.ids.mal, this.getType()); try { this.ids.kitsu.id = kitsuRes.data[0].relationships.item.data.id; } catch (e) { throw this._authenticated = !0, this.errorObj(_definitions__WEBPACK_IMPORTED_MODULE_2__.a.EntryNotFound, "Not found"); } } return this._authenticated = !0, this.userId().then(userId => this.apiCall("GET", "https://kitsu.io/api/edge/library-entries?filter[user_id]=" + userId + "&filter[kind]=" + this.getType() + "&filter[" + this.getType() + "_id]=" + this.ids.kitsu.id + "&page[limit]=1&page[limit]=1&include=" + this.getType() + "&fields[" + this.getType() + "]=slug,titles,canonicalTitle,averageRating,posterImage," + ("anime" == this.getType() ? "episodeCount" : "chapterCount,volumeCount"))).catch(e => { if (e.code === _definitions__WEBPACK_IMPORTED_MODULE_2__.a.NotAutenticated) return this._authenticated = !1, { data: [], included: [] }; throw e; }).then(res => { this.animeInfo = res, this._onList = !0, this.animeInfo.data.length || (this._onList = !1, this.animeInfo.data[0] = { attributes: { notes: "", progress: 0, volumesOwned: 0, reconsuming: !1, reconsumeCount: !1, ratingTwenty: null, status: "planned" } }, this.animeInfo.included = void 0 !== kitsuRes ? kitsuRes.included : kitsuSlugRes.res.data); try { this.animeI(); } catch (e) { throw con.error(e), this.errorObj(_definitions__WEBPACK_IMPORTED_MODULE_2__.a.EntryNotFound, "Not found"); } if (!this._authenticated) throw this.errorObj(_definitions__WEBPACK_IMPORTED_MODULE_2__.a.NotAutenticated, "Not Authenticated"); }); })); } _sync() { return __awaiter(this, void 0, void 0, (function*() { this.listI().attributes.ratingTwenty < 2 && (this.listI().attributes.ratingTwenty = null); var variables = { data: { attributes: { notes: this.listI().attributes.notes, progress: this.listI().attributes.progress, volumesOwned: this.listI().attributes.volumesOwned, reconsuming: this.listI().attributes.reconsuming, reconsumeCount: this.listI().attributes.reconsumeCount, ratingTwenty: this.listI().attributes.ratingTwenty ? this.listI().attributes.ratingTwenty : null, status: this.listI().attributes.status }, type: "library-entries" } }, tType = this.getType(); if (tType) { if (this.isOnList()) { var updateUrl = "https://kitsu.io/api/edge/library-entries/" + this.listI().id; variables.data.id = this.listI().id; var post = "PATCH"; } else { updateUrl = "https://kitsu.io/api/edge/library-entries/"; variables.data.relationships = { [tType]: { data: { type: tType, id: this.ids.kitsu.id } }, user: { data: { type: "users", id: yield this.userId() } } }; post = "POST"; } return con.log(post, variables), this.apiCall(post, updateUrl, variables); } })); } apiCall(mode, url, variables = {}, authentication = !0) { var headers = { "Content-Type": "application/vnd.api+json", Accept: "application/vnd.api+json" }; return authentication && (headers.Authorization = "Bearer " + api.settings.get("kitsuToken")), api.request.xhr(mode, { url: url, headers: headers, data: JSON.stringify(variables) }).then(response => { if (response.status > 499 && response.status < 600 || 0 === response.status) throw this.errorObj(_definitions__WEBPACK_IMPORTED_MODULE_2__.a.ServerOffline, "Server Offline status: " + response.status); var res = JSON.parse(response.responseText); if (void 0 !== res.errors && res.errors.length) { con.error("[SINGLE]", "Error", res.errors); var error = res.errors[0]; switch (parseInt(error.status)) { case 401: case 403: throw this.errorObj(_definitions__WEBPACK_IMPORTED_MODULE_2__.a.NotAutenticated, error.detail); case 404: throw this.errorObj(_definitions__WEBPACK_IMPORTED_MODULE_2__.a.EntryNotFound, error.detail); default: throw this.errorObj(error.status, error.detail); } } return res; }); } kitsuSlugtoKitsu(kitsuSlug, type) { return this.apiCall("Get", "https://kitsu.io/api/edge/" + type + "?filter[slug]=" + kitsuSlug + "&page[limit]=1&include=mappings", {}).catch(e => { if (e.code === _definitions__WEBPACK_IMPORTED_MODULE_2__.a.NotAutenticated) return this._authenticated = !1, this.apiCall("Get", "https://kitsu.io/api/edge/" + type + "?filter[slug]=" + kitsuSlug + "&page[limit]=1&include=mappings", {}, !1); throw e; }).then(res => { var malId = NaN; if (void 0 !== res && void 0 !== res.included) for (var k = 0; k < res.included.length; k++) { var mapping = res.included[k]; if ("mappings" == mapping.type && mapping.attributes.externalSite === "myanimelist/" + type) { malId = mapping.attributes.externalId, res.included.splice(k, 1); break; } } return { res: res, malId: malId }; }); } malToKitsu(malid, type) { return this.apiCall("Get", "https://kitsu.io/api/edge/mappings?filter[externalSite]=myanimelist/" + type + "&filter[externalId]=" + malid + "&include=item&fields[item]=id", {}).catch(e => { if (e.code === _definitions__WEBPACK_IMPORTED_MODULE_2__.a.NotAutenticated) return this._authenticated = !1, this.apiCall("Get", "https://kitsu.io/api/edge/mappings?filter[externalSite]=myanimelist/" + type + "&filter[externalId]=" + malid + "&include=item&fields[item]=id", {}, !1); throw e; }).then(res => res); } userId() { return __awaiter(this, void 0, void 0, (function*() { var userId = yield api.storage.get("kitsuUserId"); return void 0 !== userId ? userId : this.apiCall("Get", "https://kitsu.io/api/edge/users?filter[self]=true").then(res => { if (void 0 === res.data || !res.data.length || void 0 === res.data[0]) throw this.errorObj(_definitions__WEBPACK_IMPORTED_MODULE_2__.a.NotAutenticated, "Not Authenticated"); return api.storage.set("kitsuUserId", res.data[0].id), res.data[0].id; }); })); } getScoreMode() { return api.settings.get("kitsuOptions").ratingSystem; } getScoreCheckbox() { switch (this.getScoreMode()) { case "simple": return [ { value: "0", label: api.storage.lang("UI_Score_Not_Rated") }, { value: "20", label: "😀" }, { value: "14", label: "🙂" }, { value: "8", label: "😐" }, { value: "2", label: "🙁" } ]; case "regular": for (var resArr = [ { value: "0", label: api.storage.lang("UI_Score_Not_Rated") } ], i = 1; i < 11; i++) resArr.push({ value: (2 * i).toString(), label: (i / 2).toFixed(1).toString() }); return resArr; case "advanced": for (resArr = [ { value: "0", label: api.storage.lang("UI_Score_Not_Rated") } ], i = 1; i < 21; i++) resArr.push({ value: i.toString(), label: (i / 2).toFixed(1).toString() }); return resArr; default: return super.getScoreCheckbox(); } } getScoreCheckboxValue() { var curScore = this.listI().attributes.ratingTwenty; switch (curScore || (curScore = 0), this.getScoreMode()) { case "simple": return curScore ? curScore < 6 ? 2 : curScore < 12 ? 8 : curScore < 18 ? 14 : 20 : 0; case "regular": return 2 * Math.round(curScore / 2); case "advanced": return curScore; default: return super.getScoreCheckboxValue(); } } handleScoreCheckbox(value) { switch (this.getScoreMode()) { case "simple": case "regular": case "advanced": if (0 === value) return void (this.listI().attributes.ratingTwenty = null); this.listI().attributes.ratingTwenty = value; break; default: super.handleScoreCheckbox(value); } } } }).call(this, __webpack_require__(2), __webpack_require__(1), __webpack_require__(0)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(utils, con) { __webpack_require__.d(__webpack_exports__, "a", (function() { return Single; })); var _singleAbstract__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(12), _helper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7), _definitions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5), __awaiter = function(thisArg, _arguments, P, generator) { return new (P || (P = Promise))((function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } function step(result) { var value; result.done ? resolve(result.value) : (value = result.value, value instanceof P ? value : new P((function(resolve) { resolve(value); }))).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); })); }; class Single extends _singleAbstract__WEBPACK_IMPORTED_MODULE_0__.a { constructor() { super(...arguments), this.episodeUpdate = !1, this.statusUpdate = !1, this.ratingUpdate = !1, this.minWatchedEp = 1, this.curWatchedEp = 0, this.shortName = "Simkl", this.authenticationUrl = "https://simkl.com/oauth/authorize?response_type=code&client_id=39e8640b6f1a60aaf60f3f3313475e830517badab8048a4e52ff2d10deb2b9b0&redirect_uri=https://simkl.com/apps/chrome/mal-sync/connected/", this.rewatchingSupport = !1, this.syncList = _helper__WEBPACK_IMPORTED_MODULE_1__.e, this.getSingle = _helper__WEBPACK_IMPORTED_MODULE_1__.d, this.call = _helper__WEBPACK_IMPORTED_MODULE_1__.a; } handleUrl(url) { if (url.match(/simkl\.com\/(anime|manga)\/\d*/i)) { if (this.type = utils.urlPart(url, 3), this.ids.simkl = parseInt(utils.urlPart(url, 4)), "manga" === this.type) throw "Simkl has no manga support"; } else { if (!url.match(/myanimelist\.net\/(anime|manga)\/\d*/i)) throw this.errorObj(_definitions__WEBPACK_IMPORTED_MODULE_2__.a.UrlNotSuported, "Url not supported"); if (this.type = utils.urlPart(url, 3), this.ids.mal = utils.urlPart(url, 4), "manga" === this.type) throw "Simkl has no manga support"; } } getCacheKey() { return _helper__WEBPACK_IMPORTED_MODULE_1__.b(this.ids.mal, this.ids.simkl); } _getStatus() { return parseInt(_helper__WEBPACK_IMPORTED_MODULE_1__.f(this.animeInfo.status)); } _setStatus(status) { 23 == status && (status = 1), (status = _helper__WEBPACK_IMPORTED_MODULE_1__.f(status, parseInt(status.toString()))) !== this.animeInfo.status && (this.statusUpdate = !0), this.animeInfo.status = status; } _getScore() { var score = this.animeInfo.user_rating; return null === score ? 0 : score; } _setScore(score) { 0 === score && (score = null), score != this.animeInfo.user_rating && (this.ratingUpdate = !0), this.animeInfo.user_rating = score; } _getEpisode() { return this.curWatchedEp; } _setEpisode(episode) { episode != this.curWatchedEp && (this.episodeUpdate = !0), this.curWatchedEp = episode; } _getVolume() { return 0; } _setVolume(volume) { con.error("You cant set Volumes for animes"); } _getStreamingUrl() { var tags = this.animeInfo.private_memo; return utils.getUrlFromTags(tags); } _setStreamingUrl(url) { var tags = this.animeInfo.private_memo; null != tags && "null" != tags || (tags = ""), tags = utils.setUrlInTags(url, tags), this.animeInfo.private_memo = tags; } _getTitle() { return this.animeInfo.show.title; } _getTotalEpisodes() { var eps = this.animeInfo.total_episodes_count; return null == eps ? 0 : eps; } _getTotalVolumes() { return 0; } _getDisplayUrl() { return "https://simkl.com/" + this.getType() + "/" + this.ids.simkl; } _getImage() { return Promise.resolve("https://simkl.in/posters/" + this.animeInfo.show.poster + "_ca.jpg"); } _getRating() { return __awaiter(this, void 0, void 0, (function*() { try { return (yield this.call("https://api.simkl.com/ratings", { simkl: this.ids.simkl }, !0)).simkl.rating; } catch (e) { return con.error(e), "N/A"; } })); } _update() { return __awaiter(this, void 0, void 0, (function*() { if (isNaN(this.ids.mal)) var de = { simkl: this.ids.simkl }; else de = { mal: this.ids.mal }; return this._authenticated = !0, this.getSingle(de).catch(e => { if (e.code === _definitions__WEBPACK_IMPORTED_MODULE_2__.a.NotAutenticated) return this._authenticated = !1, ""; throw e; }).then(res => __awaiter(this, void 0, void 0, (function*() { if (con.log(res), this.episodeUpdate = !1, this.statusUpdate = !1, this.ratingUpdate = !1, this.animeInfo = res, this._onList = !0, !this.animeInfo) { if (this._onList = !1, de.simkl) { if (!(el = yield this.call("https://api.simkl.com/anime/" + de.simkl, { extended: "full" }, !0))) throw this.errorObj(_definitions__WEBPACK_IMPORTED_MODULE_2__.a.EntryNotFound, "Anime not found"); } else { var el; if (!(el = yield this.call("https://api.simkl.com/search/id", de, !0))) throw this.errorObj(_definitions__WEBPACK_IMPORTED_MODULE_2__.a.EntryNotFound, "Anime not found"); if (el[0].mal && el[0].mal.type && "Special" === el[0].mal.type) throw { code: 415, message: "Is a special" }; el = el[0]; } this.animeInfo = { last_watched: "", last_watched_at: "", next_to_watch: "", not_aired_episodes_count: 0, private_memo: "", status: "plantowatch", total_episodes_count: 0, user_rating: null, watched_episodes_count: 0, show: el }, con.log("Add anime", this.animeInfo); } if (isNaN(this.ids.simkl) && (this.ids.simkl = parseInt(this.animeInfo.show.ids.simkl)), isNaN(this.ids.mal) && void 0 !== this.animeInfo.show.ids.mal && (this.ids.mal = this.animeInfo.show.ids.mal), this.curWatchedEp = _helper__WEBPACK_IMPORTED_MODULE_1__.c(this.animeInfo.last_watched), !this.curWatchedEp && this.animeInfo.next_to_watch) { var next = _helper__WEBPACK_IMPORTED_MODULE_1__.c(this.animeInfo.next_to_watch); next && (this.curWatchedEp = next - 1); } if (this.minWatchedEp = this.curWatchedEp + 1, !this._authenticated) throw this.errorObj(_definitions__WEBPACK_IMPORTED_MODULE_2__.a.NotAutenticated, "Not Authenticated"); }))); })); } _sync() { return __awaiter(this, void 0, void 0, (function*() { if (con.log("[SET] Object:", this.animeInfo, "status", this.statusUpdate, "episode", this.episodeUpdate, "rating", this.ratingUpdate, "minWatchedEp", this.minWatchedEp, "curWatchedEp", this.curWatchedEp), this.statusUpdate || !this.isOnList()) { var response = yield this.call("https://api.simkl.com/sync/add-to-list", JSON.stringify({ shows: [ { to: this.animeInfo.status, ids: { simkl: this.ids.simkl } } ] }), !1, "POST"); con.log("Status response", response); } if (this.episodeUpdate || !this.isOnList()) { var curEp = this.curWatchedEp, episodes = []; if (this.minWatchedEp <= curEp) { if (curEp) { for (var i = this.minWatchedEp; i <= curEp; i++) episodes.push({ number: i }); response = yield this.call("https://api.simkl.com/sync/history", JSON.stringify({ shows: [ { ids: { simkl: this.ids.simkl }, private_memo: this.animeInfo.private_memo, seasons: [ { number: 1, episodes: episodes } ] } ] }), !1, "POST"); con.log("Episode response", response); } } else { for (i = this.minWatchedEp - 1; i > curEp; i -= 1) episodes.push({ number: i }); response = yield this.call("https://api.simkl.com/sync/history/remove", JSON.stringify({ shows: [ { ids: { simkl: this.ids.simkl }, seasons: [ { number: 1, episodes: episodes } ] } ] }), !1, "POST"); con.log("Episode remove response", response); } this.minWatchedEp = curEp + 1; } if (this.ratingUpdate) if (this.animeInfo.user_rating) { response = yield this.call("https://api.simkl.com/sync/ratings", JSON.stringify({ shows: [ { rating: this.animeInfo.user_rating, ids: { simkl: this.ids.simkl } } ] }), !1, "POST"); con.log("Rating response", response); } else { response = yield this.call("https://api.simkl.com/sync/ratings/remove", JSON.stringify({ shows: [ { ids: { simkl: this.ids.simkl } } ] }), !1, "POST"); con.log("Rating remove response", response); } this.episodeUpdate = !1, this.statusUpdate = !1, this.ratingUpdate = !1; })); } errorHandling(res, code) { if (code > 499 && code < 600 || 0 === code) throw this.errorObj(_definitions__WEBPACK_IMPORTED_MODULE_2__.a.ServerOffline, "Server Offline status: " + code); if (res && void 0 !== res.error) { con.error("[SINGLE]", "Error", res.error); var error = res.error; if (error.code) throw error.code, this.errorObj(error.code, error.error); switch (error) { case "user_token_failed": throw this.errorObj(_definitions__WEBPACK_IMPORTED_MODULE_2__.a.NotAutenticated, "user_token_failed"); default: throw error; } } } jsonParse(response) { if ("" === response.responseText) throw { code: 444, message: "No Response" }; try { return JSON.parse(response.responseText); } catch (e) { throw { code: 406, message: "Not Acceptable", error: e }; } } } }).call(this, __webpack_require__(2), __webpack_require__(1)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(api, con) { __webpack_require__.d(__webpack_exports__, "a", (function() { return userlist; })); var _listAbstract__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13), __awaiter = function(thisArg, _arguments, P, generator) { return new (P || (P = Promise))((function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } function step(result) { var value; result.done ? resolve(result.value) : (value = result.value, value instanceof P ? value : new P((function(resolve) { resolve(value); }))).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); })); }; class userlist extends _listAbstract__WEBPACK_IMPORTED_MODULE_0__.a { constructor() { super(...arguments), this.name = "MyAnimeList", this.authenticationUrl = "https://myanimelist.net/login.php"; } getUsername() { return __awaiter(this, void 0, void 0, (function*() { return api.request.xhr("GET", "https://myanimelist.net/panel.php?go=export&hideLayout").then(response => { var username = !1; try { username = response.responseText.split('USER_NAME = "')[1].split('"')[0]; } catch (e) {} if (con.log("[Username]", username), !username) throw { code: 400, message: "Not Authenticated" }; return username; }); })); } errorHandling(res) { if (void 0 !== res.errors) throw con.error(res.errors), { code: parseInt(res.errors[0].status), message: res.errors[0].title }; } getPart() { return __awaiter(this, void 0, void 0, (function*() { this.username || (this.username = yield this.getUsername()); var sorting = ""; 1 === this.status && (sorting = "&order=5"), con.log("[UserList][MAL]", "username: " + this.username, "status: " + this.status, "offset: " + this.offset, "sorting: " + sorting); var url = "https://myanimelist.net/" + this.listType + "list/" + this.username + "/load.json?offset=" + this.offset + "&status=" + this.status + sorting; return api.request.xhr("GET", url).then(response => { var res = this.jsonParse(response), data = this.prepareData(res); return data.length > 299 ? this.offset += 300 : this.done = !0, data; }); })); } prepareData(data) { for (var newData = [], i = 0; i < data.length; i++) { var el = data[i]; "anime" === this.listType ? newData.push(this.fn({ uid: el.anime_id, malId: el.anime_id, cacheKey: el.anime_id, type: this.listType, title: el.anime_title, url: "https://myanimelist.net" + el.anime_url, watchedEp: el.num_watched_episodes, totalEp: el.anime_num_episodes, status: el.status, score: el.score, image: el.anime_image_path, tags: el.tags, airingState: el.anime_airing_status })) : newData.push(this.fn({ uid: el.manga_id, malId: el.manga_id, cacheKey: el.manga_id, type: this.listType, title: el.manga_title, url: "https://myanimelist.net" + el.manga_url, watchedEp: el.num_read_chapters, totalEp: el.manga_num_chapters, status: el.status, score: el.score, image: el.manga_image_path, tags: el.tags, airingState: el.anime_airing_status })); } return newData; } } }).call(this, __webpack_require__(0), __webpack_require__(1)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(con, api) { __webpack_require__.d(__webpack_exports__, "a", (function() { return userlist; })); var _listAbstract__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13), _helper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(10), __awaiter = function(thisArg, _arguments, P, generator) { return new (P || (P = Promise))((function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } function step(result) { var value; result.done ? resolve(result.value) : (value = result.value, value instanceof P ? value : new P((function(resolve) { resolve(value); }))).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); })); }; class userlist extends _listAbstract__WEBPACK_IMPORTED_MODULE_0__.a { constructor() { super(...arguments), this.name = "AniList", this.compact = !1, this.authenticationUrl = "https://anilist.co/api/v2/oauth/authorize?client_id=1487&response_type=token"; } getUsername() { return this.api.request.xhr("POST", { url: "https://graphql.anilist.co", headers: { Authorization: "Bearer " + this.accessToken(), "Content-Type": "application/json", Accept: "application/json" }, data: JSON.stringify({ query: "\n query {\n Viewer {\n name\n id\n options {\n displayAdultContent\n }\n mediaListOptions {\n scoreFormat\n }\n }\n }\n ", variables: [] }) }).then(response => { var res = this.jsonParse(response); if (con.log(res), this.errorHandling(res), res.data.Viewer.options && res.data.Viewer.mediaListOptions) { var opt = api.settings.get("anilistOptions"); opt.displayAdultContent = res.data.Viewer.options.displayAdultContent, opt.scoreFormat = res.data.Viewer.mediaListOptions.scoreFormat, api.settings.set("anilistOptions", opt); } return res.data.Viewer.name; }); } errorHandling(res) { if (void 0 !== res.errors) throw con.error(res.errors), { code: res.errors[0].status, message: res.errors[0].message }; } accessToken() { return this.api.settings.get("anilistToken"); } getPart() { return __awaiter(this, void 0, void 0, (function*() { this.offset < 1 && (this.offset = 1), con.log("[UserList][AniList]", "username: " + this.username, "status: " + this.status, "offset: " + this.offset), null == this.username && (this.username = yield this.getUsername()); var query = "\n query ($page: Int, $userName: String, $type: MediaType, $status: MediaListStatus, $sort: [MediaListSort] ) {\n Page (page: $page, perPage: 100) {\n pageInfo {\n hasNextPage\n }\n mediaList (status: $status, type: $type, userName: $userName, sort: $sort) {\n status\n score(format: POINT_100)\n progress\n progressVolumes\n notes\n media {\n siteUrl\n id\n idMal\n episodes\n chapters\n volumes\n status\n averageScore\n coverImage{\n large\n }\n title {\n userPreferred\n }\n }\n }\n }\n }\n "; this.compact && (query = "\n query ($page: Int, $userName: String, $type: MediaType, $status: MediaListStatus, $sort: [MediaListSort]) {\n Page (page: $page, perPage: 100) {\n pageInfo {\n hasNextPage\n }\n mediaList (status: $status, type: $type, userName: $userName, sort: $sort) {\n progress\n media {\n id\n idMal\n }\n }\n }\n }\n "); var variables = { page: this.offset, userName: this.username, type: this.listType.toUpperCase(), status: _helper__WEBPACK_IMPORTED_MODULE_1__.c(parseInt(this.status.toString()), parseInt(this.status.toString())), sort: "UPDATED_TIME_DESC" }; return 1 !== this.status && (variables.sort = null), this.api.request.xhr("POST", { url: "https://graphql.anilist.co", headers: { Authorization: "Bearer " + this.accessToken(), "Content-Type": "application/json", Accept: "application/json" }, data: JSON.stringify({ query: query, variables: variables }) }).then(response => { var res = this.jsonParse(response); con.log("res", res), this.errorHandling(res); var data = res.data.Page.mediaList; return this.offset = this.offset + 1, res.data.Page.pageInfo.hasNextPage || (this.done = !0), this.compact ? this.prepareCompact(data, this.listType) : this.prepareData(data, this.listType); }); })); } prepareData(data, listType) { for (var newData = [], i = 0; i < data.length; i++) { var el = data[i]; if ("anime" === listType) var tempData = this.fn({ uid: el.media.id, malId: el.media.idMal, cacheKey: _helper__WEBPACK_IMPORTED_MODULE_1__.a(el.media.idMal, el.media.id), type: listType, title: el.media.title.userPreferred, url: el.media.siteUrl, watchedEp: el.progress, totalEp: el.media.episodes, status: _helper__WEBPACK_IMPORTED_MODULE_1__.c(el.status), score: Math.round(el.score / 10), image: el.media.coverImage.large, tags: el.notes, airingState: el.anime_airing_status }); else tempData = this.fn({ uid: el.media.id, malId: el.media.idMal, cacheKey: _helper__WEBPACK_IMPORTED_MODULE_1__.a(el.media.idMal, el.media.id), type: listType, title: el.media.title.userPreferred, url: el.media.siteUrl, watchedEp: el.progress, totalEp: el.media.chapters, status: _helper__WEBPACK_IMPORTED_MODULE_1__.c(el.status), score: Math.round(el.score / 10), image: el.media.coverImage.large, tags: el.notes, airingState: el.anime_airing_status }); null == tempData.totalEp && (tempData.totalEp = 0), newData.push(tempData); } return newData; } prepareCompact(data, listType) { for (var newData = [], i = 0; i < data.length; i++) { var el = data[i]; newData.push({ malid: el.media.idMal, id: el.media.id, watchedEp: el.progress, cacheKey: _helper__WEBPACK_IMPORTED_MODULE_1__.a(el.media.idMal, el.media.id) }); } return newData; } } }).call(this, __webpack_require__(1), __webpack_require__(0)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(api, con) { __webpack_require__.d(__webpack_exports__, "a", (function() { return userlist; })); var _listAbstract__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13), _helper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9), __awaiter = function(thisArg, _arguments, P, generator) { return new (P || (P = Promise))((function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } function step(result) { var value; result.done ? resolve(result.value) : (value = result.value, value instanceof P ? value : new P((function(resolve) { resolve(value); }))).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); })); }; class userlist extends _listAbstract__WEBPACK_IMPORTED_MODULE_0__.a { constructor() { super(...arguments), this.name = "Kitsu", this.authenticationUrl = "https://kitsu.io/404?mal-sync=authentication"; } getUsername() { return __awaiter(this, void 0, void 0, (function*() { var user = yield this.userRequest(), opt = api.settings.get("kitsuOptions"); return opt.titleLanguagePreference = user.attributes.titleLanguagePreference, opt.sfwFilter = user.attributes.sfwFilter, opt.ratingSystem = user.attributes.ratingSystem, api.settings.set("kitsuOptions", opt), user.attributes.name; })); } getUserId() { return __awaiter(this, void 0, void 0, (function*() { var userId = yield api.storage.get("kitsuUserId"); if (void 0 !== userId) return userId; var user = yield this.userRequest(); return api.storage.set("kitsuUserId", user.id), user.id; })); } userRequest() { return api.request.xhr("Get", { url: "https://kitsu.io/api/edge/users?filter[self]=true", headers: { Authorization: "Bearer " + this.accessToken(), "Content-Type": "application/vnd.api+json", Accept: "application/vnd.api+json" } }).then(response => { var res = this.jsonParse(response); if (con.log(res), this.errorHandling(res), void 0 === res.data[0]) throw { code: 400, message: "Not Authenticated" }; return res.data[0]; }); } errorHandling(res) { if (void 0 !== res.errors) throw con.error(res.errors), { code: parseInt(res.errors[0].status), message: res.errors[0].title }; } accessToken() { return api.settings.get("kitsuToken"); } getPart() { return __awaiter(this, void 0, void 0, (function*() { var userid = yield this.getUserId(), statusPart = "", sorting = ""; 7 !== this.status && (1 === this.status && (sorting = "&sort=-progressed_at"), statusPart = "&filter[status]=" + _helper__WEBPACK_IMPORTED_MODULE_1__.c(this.status, this.status)); return con.log("[UserList][Kitsu]", "user: " + userid, "status: " + this.status, "offset: " + this.offset), api.request.xhr("GET", { url: "https://kitsu.io/api/edge/library-entries?filter[user_id]=" + userid + statusPart + "&filter[kind]=" + this.listType + "&page[offset]=" + this.offset + "&page[limit]=50" + sorting + "&include=" + this.listType + "," + this.listType + ".mappings," + this.listType + ".mappings.item&fields[" + this.listType + "]=slug,titles,canonicalTitle,averageRating,posterImage," + ("anime" == this.listType ? "episodeCount" : "chapterCount,volumeCount"), headers: { Authorization: "Bearer " + this.accessToken(), "Content-Type": "application/vnd.api+json", Accept: "application/vnd.api+json" }, data: {} }).then(response => { var res = this.jsonParse(response); return con.log(res), this.errorHandling(res), this.offset += 50, res.meta.count > this.offset || (this.done = !0), this.prepareData(res, this.listType); }); })); } prepareData(data, listType) { for (var newData = [], i = 0; i < data.data.length; i++) { for (var list = data.data[i], el = data.included[i], name = _helper__WEBPACK_IMPORTED_MODULE_1__.b(el.attributes.titles, el.attributes.canonicalTitle), malId = NaN, k = 0; k < data.included.length; k++) { var mapping = data.included[k]; if ("mappings" == mapping.type && mapping.attributes.externalSite === "myanimelist/" + listType && mapping.relationships.item.data.id == el.id) { malId = mapping.attributes.externalId, data.included.splice(k, 1); break; } } if ("anime" === listType) var tempData = this.fn({ malId: malId, uid: el.id, cacheKey: _helper__WEBPACK_IMPORTED_MODULE_1__.a(malId, el.id), kitsuSlug: el.attributes.slug, type: listType, title: name, url: "https://kitsu.io/" + listType + "/" + el.attributes.slug, watchedEp: list.attributes.progress, totalEp: el.attributes.episodeCount, status: _helper__WEBPACK_IMPORTED_MODULE_1__.c(list.attributes.status), score: list.attributes.ratingTwenty / 2, image: el.attributes.posterImage && el.attributes.posterImage.large ? el.attributes.posterImage.large : "", tags: list.attributes.notes, airingState: el.anime_airing_status }); else tempData = this.fn({ malId: malId, uid: el.id, cacheKey: _helper__WEBPACK_IMPORTED_MODULE_1__.a(malId, el.id), kitsuSlug: el.attributes.slug, type: listType, title: name, url: "https://kitsu.io/" + listType + "/" + el.attributes.slug, watchedEp: list.attributes.progress, totalEp: el.attributes.chapterCount, status: _helper__WEBPACK_IMPORTED_MODULE_1__.c(list.attributes.status), score: list.attributes.ratingTwenty / 2, image: el.attributes.posterImage && el.attributes.posterImage.large ? el.attributes.posterImage.large : "", tags: list.attributes.notes, airingState: el.anime_airing_status }); null == tempData.totalEp && (tempData.totalEp = 0), newData.push(tempData); } return newData; } } }).call(this, __webpack_require__(0), __webpack_require__(1)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(con, api) { __webpack_require__.d(__webpack_exports__, "a", (function() { return getPlayerTime; })), __webpack_require__.d(__webpack_exports__, "b", (function() { return shortcutListener; })); var inter, __awaiter = function(thisArg, _arguments, P, generator) { return new (P || (P = Promise))((function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } function step(result) { var value; result.done ? resolve(result.value) : (value = result.value, value instanceof P ? value : new P((function(resolve) { resolve(value); }))).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); })); }; function getPlayerTime(callback) { clearInterval(inter), inter = setInterval((function() { for (var players = document.getElementsByTagName("video"), i = 0; i < players.length; i++) { var player = players[i], duration = player.duration, current = player.currentTime, paused = player.paused; if (duration && duration > 60) { var item = { current: current, duration: duration, paused: paused }; con.info(window.location.href, item), callback(item, player), playerExtras(item, player); break; } } }), 1e3); } var videoIdentifier = ""; function playerExtras(item, player) { var tempVideoIdentifier = player.currentSrc; item.current > 1 && videoIdentifier !== tempVideoIdentifier && (videoIdentifier = tempVideoIdentifier, con.info("New player detected"), function(player) { __awaiter(this, void 0, void 0, (function*() { if (yield api.settings.getAsync("autofull")) if (window.fullScreen || window.innerWidth == screen.width && window.innerHeight == screen.height) con.info("Browser already in fullscreen"); else { var playerEl = player, ids = [ "player", "vstr", "vplayer", "mgvideo", "myVideo", "b-video-wrapper", "vilos" ], classes = [ "AT-player", "plyr", "AkiraPlayer", "video-js" ], found = !1; for (var i in ids) { var playerTemp = document.getElementById(ids[i]); if (null !== playerTemp) { found = !0, playerEl = playerTemp; break; } } for (var i in classes) { var classTemp = document.getElementsByClassName(classes[i]).item(0); if (null !== classTemp) { found = !0, playerEl = classTemp; break; } } if (!found) for (var vHeight = playerEl.offsetHeight, vWidth = playerEl.offsetWidth; playerEl.parentElement && vHeight === playerEl.parentElement.offsetHeight && vWidth === playerEl.parentElement.offsetWidth; ) playerEl = playerEl.parentElement, found = !0; if (!found && !player.getAttribute("controls")) { function exitHandler() { (document.webkitIsFullScreen || document.mozFullScreen || null !== document.msFullscreenElement) && player.removeAttribute("controls", "controls"); } document.addEventListener && (document.addEventListener("fullscreenchange", exitHandler, !1), document.addEventListener("mozfullscreenchange", exitHandler, !1), document.addEventListener("MSFullscreenChange", exitHandler, !1), document.addEventListener("webkitfullscreenchange", exitHandler, !1)), player.setAttribute("controls", "controls"); } playerEl.requestFullscreen ? playerEl.requestFullscreen() : playerEl.msRequestFullscreen ? playerEl.msRequestFullscreen() : playerEl.mozRequestFullScreen ? playerEl.mozRequestFullScreen() : playerEl.webkitRequestFullscreen && playerEl.webkitRequestFullscreen(); } })); }(player)); } var init = !1; const shortcutOptions = [ "introSkipFwd", "introSkipBwd", "nextEpShort", "correctionShort" ]; function shortcutListener(callback) { callback, init || function() { init = !0; var keyMap = {}; function checkShortcut(option) { var keys = api.settings.get(option); if (!keys.length) return !1; var shortcutTrue = !0; return keys.forEach((function(sKey) { keyMap[sKey] || (shortcutTrue = !1); })), shortcutTrue && Object.values(keyMap).filter(c => c).length !== keys.length && (shortcutTrue = !1), shortcutTrue; } onkeydown = onkeyup = function(e) { var key = (e = e || event).which || e.keyCode; keyMap[key] = "keydown" == e.type; for (var i = 0; i < shortcutOptions.length; i++) { const option = shortcutOptions[i]; checkShortcut(option) && (/textarea|input|select/i.test(e.target.nodeName) || e.target.shadowRoot ? con.info("Input field. Shortcut suppressed.") : shortcutDetected(option)); } function shortcutDetected(option) { return keyMap = {}, callback({ shortcut: option }), !1; } }, window.addEventListener("focus", (function(event) { keyMap = {}; }), !1); }(); } }).call(this, __webpack_require__(1), __webpack_require__(0)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.d(__webpack_exports__, "a", (function() { return kitsu; })); const kitsu = { shortName: "Kitsu", score: "Kitsu Score:", noLogin: 'Please Authenticate Here' }; }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(api, utils, j, con) { var timer, _minimalApp_settings_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167), _minimalApp_overview_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169), _minimalApp_recommendations_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(166), _minimalApp_bookmarks_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(160), _minimalApp_search_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(173), _minimalApp_updateCheck_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(174), _minimalApp_listSync_listSync_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(170), _minimalApp_cleanTags_cleanTags_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(168), _minimalApp_reviews_vue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(172), _provider_singleFactory__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(14), ignoreCurrentTab = !0, ignoreNullBase = !1, scrollHandler = {}, scrollHandlerArray = [], popupStorage_fetch = function() { return JSON.parse(localStorage.getItem("VUE-MAL-SYNC") || "[]"); }, popupStorage_save = function(state) { localStorage.setItem("VUE-MAL-SYNC", JSON.stringify(state)); }; __webpack_exports__.a = { components: { overviewVue: _minimalApp_overview_vue__WEBPACK_IMPORTED_MODULE_1__.a, recommendationsVue: _minimalApp_recommendations_vue__WEBPACK_IMPORTED_MODULE_2__.a, reviewsVue: _minimalApp_reviews_vue__WEBPACK_IMPORTED_MODULE_8__.a, bookmarksVue: _minimalApp_bookmarks_vue__WEBPACK_IMPORTED_MODULE_3__.a, searchVue: _minimalApp_search_vue__WEBPACK_IMPORTED_MODULE_4__.a, updateCheckVue: _minimalApp_updateCheck_vue__WEBPACK_IMPORTED_MODULE_5__.a, listSyncVue: _minimalApp_listSync_listSync_vue__WEBPACK_IMPORTED_MODULE_6__.a, cleanTagsVue: _minimalApp_cleanTags_cleanTags_vue__WEBPACK_IMPORTED_MODULE_7__.a, settingsVue: _minimalApp_settings_vue__WEBPACK_IMPORTED_MODULE_0__.a }, data: () => ({ tabs: { overview: { title: "overview", scroll: 0 }, reviews: { title: "reviews", scroll: 0 }, recommendations: { title: "recommendations", scroll: 0 }, settings: { title: "settings", scroll: 0 }, bookmarks: { title: "bookmarks", scroll: 0, state: 1, type: "anime" }, search: { title: "search", scroll: 0, type: "anime", keyword: "" }, updateCheck: { title: "updateCheck", scroll: 0 }, listSync: { title: "listSync", scroll: 0, type: "anime" }, cleanTags: { title: "cleanTags", scroll: 0 } }, keyword: "", currentTab: "settings", renderUrl: "", renderObj: null, history: [], baseFallback: "", page: null, options: api.settings.options }), computed: { base: function() { return this.page ? this.page.singleObj ? this.page.singleObj.getUrl() : (this.renderUrl = "", "") : this.baseFallback; }, renderMalUrl: function() { return null !== this.renderObj ? this.renderObj.getMalUrl() : null; }, showReviewAndRecom: function() { return null !== this.renderMalUrl || null === this.renderObj; }, utils: function() { return utils; }, backbutton: function() { return this.history.length > 0; }, backbuttonSearchStyle: function() { return this.backbutton ? { "margin-left": "-17px" } : { "margin-left": "-57px" }; }, backbuttonBookStyle: function() { return this.backbutton ? { left: "40px" } : { left: "0px" }; }, popOver: function() { return this.currentTab === this.tabs.bookmarks.title || (this.currentTab === this.tabs.search.title || (this.currentTab === this.tabs.updateCheck.title || (this.currentTab === this.tabs.listSync.title || this.currentTab === this.tabs.cleanTags.title))); }, navigation: function() { return !this.popOver && !this.onlySettings; }, onlySettings: function() { return "" === this.renderUrl; }, bookIcon: function() { j.$(this.$el); return "bookmarks" === this.currentTab ? this.onlySettings ? "settings" : "collections_bookmark" : "book"; } }, mounted: function() { if (this.isPopup()) { var state = popupStorage_fetch(); void 0 !== state && void 0 !== state.currentTab && (ignoreNullBase = !0, this.setCurrent(state)); } j.$(this.$el).find(".mdl-layout__content").first().scroll(() => { if (scrollHandlerArray.length) { var pos = { pos: this.getScroll(), elHeight: j.$(this.$el).find(".mdl-layout__content").first().height(), height: j.$(this.$el).find(".mdl-layout__content > .is-active").first().height() }; for (var i in scrollHandlerArray) scrollHandlerArray[i](pos); } }); }, updated: function() { this.isPopup() && popupStorage_save(this.getCurrent(this.currentTab)); }, watch: { renderUrl: function(url, oldUrl) { this.renderObj = null; var tempRenderObj = new _provider_singleFactory__WEBPACK_IMPORTED_MODULE_9__.a(url); tempRenderObj.update().then(() => { this.renderObj = tempRenderObj; }).catch(e => { throw this.renderObj = tempRenderObj, e; }); }, currentTab: function(tab, oldtab) { this.tabs[oldtab].scroll = this.getScroll(), this.$nextTick(() => { this.setScroll(this.tabs[tab].scroll); }), ignoreCurrentTab ? ignoreCurrentTab = !1 : (this.currentTab === this.tabs.bookmarks.title && this.history.push(this.getCurrent(oldtab)), this.currentTab === this.tabs.search.title && this.history.push(this.getCurrent(oldtab)), this.currentTab === this.tabs.updateCheck.title && this.history.push(this.getCurrent(oldtab)), this.currentTab === this.tabs.listSync.title && this.history.push(this.getCurrent(oldtab)), this.currentTab === this.tabs.cleanTags.title && this.history.push(this.getCurrent(oldtab))); }, keyword: function(keyword) { "" !== keyword ? this.selectTab("search") : this.selectTab("overview"); }, base: function(base, oldBase) { if (base !== oldBase) { for (;this.history.length > 0; ) this.history.pop(); this.fill(base, !0); } } }, methods: { lang: api.storage.lang, selectTab(selectedTab) { !this.onlySettings || "overview" !== selectedTab && "reviews" !== selectedTab && "recommendations" !== selectedTab || (selectedTab = "settings"), con.log("Tab Changed", selectedTab), this.currentTab = selectedTab; }, registerScroll(key, fn) { scrollHandler[key] = fn, scrollHandlerArray = Object.values(scrollHandler); }, unregisterScroll(key) { delete scrollHandler[key], scrollHandlerArray = Object.values(scrollHandler); }, getScroll() { return j.$(this.$el).find(".mdl-layout__content").first().scrollTop(); }, setScroll(scroll) { return j.$(this.$el).find(".mdl-layout__content").first().scrollTop(scroll); }, isPopup: () => !!j.$("#Mal-Sync-Popup").length, fill(url, isBase = !1) { con.log("fill", url); j.$(this.$el); return null == url ? (this.isPopup() && this.selectTab("bookmarks"), !1) : /^https:\/\/myanimelist.net\/(anime|manga)\/\d+/i.test(url) || /^https:\/\/kitsu.io\/(anime|manga)\/.+/i.test(url) || /^https:\/\/anilist.co\/(anime|manga)\/\d+/i.test(url) || /^https:\/\/simkl.com\/(anime|manga)\/\d+/i.test(url) || /^local:\/\//i.test(url) ? (isBase || this.history.push(this.getCurrent(this.currentTab)), this.renderUrl = url, this.currentTab = "overview", !0) : (this.isPopup() && this.selectTab("bookmarks"), !1); }, urlClick(url) { if (/^local:\/\//i.test(url) || (url = utils.absoluteLink(url, "https://myanimelist.net")), !this.fill(url)) { var win = window.open(url, "_blank"); win ? win.focus() : alert(api.storage.lang("minimalClass_Popup")); } }, fillBase(url) { con.log("Fill Base", url, this.history), ignoreNullBase && null === url || (this.baseFallback = url), "" === url && (this.renderUrl = url); }, setPage(page) { this.page = page, void 0 === this.page.singleObj && this.$set(this.page, "singleObj", void 0); }, backbuttonClick() { con.log("History", this.history), this.history.length > 0 && this.setCurrent(this.history.pop()); }, bookClick() { j.$(this.$el); "book" !== this.bookIcon ? this.selectTab("overview") : this.selectTab("bookmarks"); }, keywordSet() { clearTimeout(timer), timer = setTimeout(() => { this.tabs.search.keyword = this.keyword; }, 300); }, getCurrent(tab, url = this.renderUrl) { return { renderUrl: url, currentTab: tab, tabData: j.$.extend(!0, {}, this.tabs[tab]) }; }, setCurrent(historyElement) { con.log("Set Current", historyElement), void 0 !== historyElement.tabData.keyword && (this.keyword = historyElement.tabData.keyword), this.tabs[historyElement.currentTab] = historyElement.tabData, this.renderUrl = historyElement.renderUrl, this.currentTab !== historyElement.currentTab && (ignoreCurrentTab = !0), this.currentTab = historyElement.currentTab; }, rebuildListSync() { this.currentTab = "", this.$nextTick(() => { this.currentTab = "listSync"; }); }, searchClick(item) { this.urlClick(item.url); } } }; }).call(this, __webpack_require__(0), __webpack_require__(2), __webpack_require__(3), __webpack_require__(1)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(api, con, j, utils) { var _components_settingsCheckbox_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(180), _components_settingsNumberInput_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(177), _components_settingsDropdown_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(181), _components_settingsFileUpload_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(176), _components_settingsShortcut_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(182), _components_settingsLogin_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(179), _components_tooltip_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(65), _correction_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(175), _provider_Local_import__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(67); __webpack_exports__.a = { components: { correction: _correction_vue__WEBPACK_IMPORTED_MODULE_7__.a, tooltip: _components_tooltip_vue__WEBPACK_IMPORTED_MODULE_6__.a, checkbox: _components_settingsCheckbox_vue__WEBPACK_IMPORTED_MODULE_0__.a, numberInput: _components_settingsNumberInput_vue__WEBPACK_IMPORTED_MODULE_1__.a, dropdown: _components_settingsDropdown_vue__WEBPACK_IMPORTED_MODULE_2__.a, fileUpload: _components_settingsFileUpload_vue__WEBPACK_IMPORTED_MODULE_3__.a, shortcut: _components_settingsShortcut_vue__WEBPACK_IMPORTED_MODULE_4__.a, login: _components_settingsLogin_vue__WEBPACK_IMPORTED_MODULE_5__.a }, props: { page: { type: Object, default: null } }, mounted: function() { api.request.xhr("GET", "https://kissanimelist.firebaseio.com/Data2/Notification/Contributer.json").then(response => { try { this.contributer = JSON.parse(response.responseText.replace(/(^"|"$)/gi, "").replace(/\\"/g, '"')); } catch (e) { return void con.error("Contributer Could not be retieved", e); } con.log("Contributer", this.contributer); }), "webextension" == api.type && j.$("#Mal-Sync-Popup").length && chrome.commands.getAll(commands => { con.info("Commands", commands); var tempCommands = commands.reduce((function(total, current) { return total[current.name] = current, total; }), {}); this.commands = tempCommands; }); }, methods: { lang: api.storage.lang, myOpen: function() { this.isOpen = !this.isOpen; }, isExtension: function() { return "webextension" === api.type; }, importFallbackSync: function(filecontent) { con.log("Import FallbackSync", filecontent); try { var iData = JSON.parse(filecontent); con.log("data", iData); var firstData = iData[Object.keys(iData)[0]]; if (!firstData.hasOwnProperty("name")) throw "No name"; if (!firstData.hasOwnProperty("progress")) throw "No progress"; if (!firstData.hasOwnProperty("score")) throw "No score"; if (!firstData.hasOwnProperty("status")) throw "No status"; if (!firstData.hasOwnProperty("tags")) throw "No tags"; Object(_provider_Local_import__WEBPACK_IMPORTED_MODULE_8__.b)(iData).then(() => { utils.flashm("File imported"); }); } catch (e) { alert("File has wrong formating"), con.error("File has wrong formating:", e); } }, exportFallbackSync: async function() { var exportObj = await Object(_provider_Local_import__WEBPACK_IMPORTED_MODULE_8__.a)(); con.log("Export", exportObj); var filecontent = "data:text/csv;charset=utf-8," + JSON.stringify(exportObj), encodedUri = encodeURI(filecontent); try { var link = document.createElement("a"); link.setAttribute("href", encodedUri), link.setAttribute("download", "malsync_" + (new Date).toJSON().slice(0, 10).replace(/-/g, "/") + ".txt"), document.body.appendChild(link), link.click(); } catch (e) { window.open(encodedUri); } utils.flashm("File exported"); } }, data: function() { return { contributer: [], isOpen: !1, options: api.settings.options, commands: null, version: { link: `https://malsync.moe/changelog#${api.storage.version()}`, img: `https://img.shields.io/badge/Changelog-${api.storage.version()}-green.svg?style=flat-square&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAtxQTFRFAAAARj1Hw158LyQzRDRBVF54Ew0ZXqvnIx4labLsQEFTdsD7ZpPC////VE1SNCg3Nik7PS1CSzBKWjRXczBXjjBUsTZd0WuILSUyMiU2MiI2Nyc9dypNoClRbC5INTQ+YXKMMCQ7PyQ/WitFKx4vFxchT16CRStIPSY6TSQ6jjhScb33TViCpCROni9VYKzqTlN+qDBZXK3sYi5JXbHyQzNGXLLzTTZOW6/wQC5EX67sNSw7Y67qWa3vLCUzMCo1uc3fXq3rWa/yLCgxSEdKZa7nV6rrWrDyKCEsMzA1aLDpYbLyYbj6SUJgPj5VLy87e8D6csP+c8r/d9L/fNT+esnydLbgcKfOa5vDdJ/MQi5GSjFLTTFOYi9PWS1NUS9OTTFPRzFLSDJMTTBMXjBPaS5NZzBVgTdjczVfbjVhXjVaTjRTQzJMSzRNTzVOTzNLai1ShzJcjjNdiDNeejRhbDVhWzZbSzRRQzFKQjJKUDNMiyxPYy9UlzBfyDBlpjJgcjJbajNfXDVaTDNRPzBHPTBHVDJNrDBZxSpaV1aBajBZkDNipzNjnTNjdDJdYzJcXDRZTzRQPzFHRzJHZTJNcS9MZ2WUcS9VcDNdezRgcjJeezNgZTNaTjNRRDFLQzJJQjNHQjJGWDJLUjJKYoK4cS5NWTFTWzRaWDJVbjRbWDNVSzNQRjJMUTRLSTVHSzRJjjZbfDdZYqXlhEZwVS5MSzRUVTNUczVbTjJRSTNOUDRMSTNLQTJISTNGczZUXjVRWrH0W3+1Ri9OSDJSSzNSTDNTRzJRRzNRSTNNQzJLPzFKPjJGPjFCOSw/W67vTWOORi5NSjJRSzNVTDRURTJRQTBNQTFKQzJKPjFINSw9XKrpSVyIQCxLRS9QRjJSQjJPRzRQUTROQjBFLyc1W6rrS22ePTRVQSxLSjNVSzZYTzZWUTJPOSw+Z778YqPWWnGcV1F/UkZxT0Nm////ch6M6QAAAFp0Uk5TAAAAAAAAAAAAAAAAAAABKH2/3+bIjTgFCm7a/f7nhRILifn9nRJx+v6JBC3b6UV//aPB3OTz5/bL3Y6oNuLuTAGA/ZsIEp79shwRhervmxwFQqDd+frjqksImWc25wAAAAFiS0dEDfa0YfUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEbSURBVBjTARAB7/4AAAABDg8QERITFBUWFwIAAAAAAxgZGhtaW1xdHB0eHwQAAAUgISJeX2BhYmNkZSMkJQYAACYnZmdoaWprbG1ubygpKgArLHBxcnN0dXZ3eHl6ey0uAC8wfH1+f4CBgoOEhYaHiDEAMomKi4yNjo+QkZKSk5SVMwA0lpeYmZqbnJ2en6ChoqM1ADakpaanqKmqq6ytrq+wsTcAOLKztLW2t7i5uru8vb6/OQA6wMHCw8TFxsfIycrLzM07ADw9zs/Q0dLT1NXW19jZPj8AQEFC2tvc3d7U3+Dh4uNDRAAHRUZH5OXm5+jp6uvsSEkIAAAJSktM7e7v8PHyTU5PCgAAAAALUFFSU1RVVldYWQwNAEGXdELuOiRkAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE4LTA1LTE2VDEzOjM2OjI0KzAwOjAwK9TuQgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxOC0wNS0xNlQxMzozNjoyNCswMDowMFqJVv4AAABGdEVYdHNvZnR3YXJlAEltYWdlTWFnaWNrIDYuNy44LTkgMjAxNC0wNS0xMiBRMTYgaHR0cDovL3d3dy5pbWFnZW1hZ2ljay5vcmfchu0AAAAAGHRFWHRUaHVtYjo6RG9jdW1lbnQ6OlBhZ2VzADGn/7svAAAAGHRFWHRUaHVtYjo6SW1hZ2U6OmhlaWdodAAxOTIPAHKFAAAAF3RFWHRUaHVtYjo6SW1hZ2U6OldpZHRoADE5MtOsIQgAAAAZdEVYdFRodW1iOjpNaW1ldHlwZQBpbWFnZS9wbmc/slZOAAAAF3RFWHRUaHVtYjo6TVRpbWUAMTUyNjQ3Nzc4NGTqj8oAAAAPdEVYdFRodW1iOjpTaXplADBCQpSiPuwAAABWdEVYdFRodW1iOjpVUkkAZmlsZTovLy9tbnRsb2cvZmF2aWNvbnMvMjAxOC0wNS0xNi82ODRlZmQxYzBmMTdmMzAxMjIzMWFmNzQ4YzhmYjJjYy5pY28ucG5nP6GaiQAAAABJRU5ErkJggg==` } }; } }; }).call(this, __webpack_require__(0), __webpack_require__(1), __webpack_require__(3), __webpack_require__(2)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(api) { __webpack_exports__.a = { props: { option: { type: String } }, computed: { value: { get: function() { return api.settings.get(this.option); }, set: function(value) { api.settings.set(this.option, value); } } } }; }).call(this, __webpack_require__(0)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(api) { __webpack_exports__.a = { props: { option: { type: String }, min: { type: Number, default: 0 }, max: { type: Number, default: 999 }, step: { type: Number, default: 1 } }, computed: { value: { get: function() { return api.settings.get(this.option); }, set: function(value) { "" !== value && null !== value && value >= this.min && value <= this.max && (api.settings.set(this.option, value), this.$emit("changed", value)); } } } }; }).call(this, __webpack_require__(0)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(api) { __webpack_exports__.a = { props: { option: { type: String }, text: { type: String } }, computed: { value: { get: function() { return api.settings.get(this.option); }, set: function(value) { api.settings.set(this.option, value), this.$emit("changed", value); } } } }; }).call(this, __webpack_require__(0)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(api, con) { __webpack_exports__.a = { props: { button: { type: Boolean, default: !0 } }, methods: { type: () => api.type, buttonClick() { this.button = !1; }, handleFileUpload(event) { if (con.log("File Found", event), window.FileReader) { var reader = new FileReader; reader.onload = evt => { if (2 == evt.target.readyState) if (evt.target.error) alert("Error while reading file"); else { var filecontent = evt.target.result; this.$emit("upload", filecontent); } }, reader.readAsText(event.target.files[0]); } else alert("Browser is not compatible"); }, openWindow(e) { e.preventDefault(), e.stopPropagation(); var win = window.open(chrome.extension.getURL("window.html"), "_blank"); win ? win.focus() : alert(api.storage.lang("minimalClass_Popup")); } } }; }).call(this, __webpack_require__(0), __webpack_require__(1)); }, function(module, exports, __webpack_require__) { var result = __webpack_require__(185); module.exports = "string" == typeof result ? result : result.toString(); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(api, con) { var tempKeysTimeout, _tooltip_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(65), _keyboardMap__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(22); __webpack_exports__.a = { components: { tooltip: _tooltip_vue__WEBPACK_IMPORTED_MODULE_0__.a }, data: function() { return { keys: {}, tempKeys: {} }; }, props: { option: { type: String } }, computed: { display() { return this.tempRec ? Object.keys(this.tempKeys).map(val => _keyboardMap__WEBPACK_IMPORTED_MODULE_1__.a[val]).join(" + ") : this.rec ? Object.keys(this.keys).map(val => _keyboardMap__WEBPACK_IMPORTED_MODULE_1__.a[val]).join(" + ") : this.value && Object.keys(this.value).length ? Object.keys(this.value).map(val => _keyboardMap__WEBPACK_IMPORTED_MODULE_1__.a[val]).join(" + ") : this.lang("settings_Shortcuts_Click"); }, rec() { return Object.keys(this.keys).length; }, tempRec() { return Object.keys(this.tempKeys).length; }, value: { get: function() { var temp = api.settings.get(this.option); if (!temp || !temp.length) return {}; for (var rv = {}, i = 0; i < temp.length; ++i) rv[temp[i]] = temp[i]; return rv; }, set: function(value) { api.settings.set(this.option, Object.keys(value)); } } }, methods: { lang: api.storage.lang, keyDown(event) { this.keys[event.keyCode] || con.log("down" + event.keyCode), this.$set(this.keys, event.keyCode, _keyboardMap__WEBPACK_IMPORTED_MODULE_1__.a[event.keyCode]), this.tempKeys = {}; }, keyUp(event) { con.log("up" + event.keyCode), this.setTempState(this.keys), this.$delete(this.keys, event.keyCode); }, focusLost() { this.keys = {}; }, setTempState(state) { if (!Object.keys(this.tempKeys).length) { var tempState = Object.assign({}, state); this.tempKeys = tempState, clearTimeout(tempKeysTimeout), tempKeysTimeout = setTimeout(() => { Object.keys(this.keys).length || (this.value = tempState), this.tempKeys = {}; }, 500); } } } }; }).call(this, __webpack_require__(0), __webpack_require__(1)); }, function(module, exports, __webpack_require__) { var result = __webpack_require__(187); module.exports = "string" == typeof result ? result : result.toString(); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(api) { var _provider_listFactory__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(17); __webpack_exports__.a = { data: function() { return { username: "", listObj: null }; }, props: { option: { type: String } }, mounted: function() { this.init(); }, computed: { mode: { get: function() { return api.settings.get(this.option); }, set: function(value) {} }, pageName() { return this.listObj ? this.listObj.name : "Loading"; }, pageAuth() { return this.listObj ? this.listObj.authenticationUrl : ""; } }, methods: { lang: api.storage.lang, init() { return this.username = "", this.listObj = Object(_provider_listFactory__WEBPACK_IMPORTED_MODULE_0__.b)(this.mode), this.listObj.getUsername().then(username => { this.username = username; }); } }, watch: { mode() { this.init(); } } }; }).call(this, __webpack_require__(0)); }, function(module, exports, __webpack_require__) { var result = __webpack_require__(189); module.exports = "string" == typeof result ? result : result.toString(); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(api) { var _components_keyboardMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22); __webpack_exports__.a = { props: { page: { type: Object, default: null } }, data: function() { return {}; }, watch: {}, mounted: function() {}, computed: { keys: function() { return api.settings.get("correctionShort").map(val => _components_keyboardMap__WEBPACK_IMPORTED_MODULE_0__.a[val]).join(" + "); } }, methods: { lang: api.storage.lang, openPopup: function() { return this.page.openCorrectionUi(), !1; } } }; }).call(this, __webpack_require__(0)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(utils, api, con) { var _provider_singleFactory__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(14), _provider_MyAnimeList_metadata__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(60), _provider_AniList_metadata__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(61), _provider_Kitsu_metadata__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(62), _provider_Simkl_metadata__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(63); __webpack_exports__.a = { data: function() { return { metaObj: null, error: null, imageTemp: null, mal: { resumeUrl: null, continueUrl: null }, kiss2mal: {}, related: [], prediction: null, utils: utils }; }, props: { renderObj: { type: Object, default: null } }, watch: { renderObj: async function(renderObj) { this.render(renderObj); } }, computed: { objError: function() { return this.renderObj && this.renderObj.getLastError() ? this.renderObj.getLastErrorMessage() : null; }, editUrl: function() { return void 0 !== this.renderObj.getDetailUrl ? this.renderObj.getDetailUrl() : null; }, malStatus: { get: function() { return this.renderObj && this.renderObj.isAuthenticated() ? this.renderObj.getStatusCheckboxValue() : null; }, set: function(value) { this.renderObj && this.renderObj.isAuthenticated() && this.renderObj.handleStatusCheckbox(value); } }, malEpisode: { get: function() { return this.renderObj && this.renderObj.isAuthenticated() ? this.renderObj.addAnime ? null : this.renderObj.getEpisode() : null; }, set: function(value) { this.renderObj && this.renderObj.isAuthenticated() && this.renderObj.setEpisode(value); } }, malVolume: { get: function() { return this.renderObj && this.renderObj.isAuthenticated() ? this.renderObj.addAnime ? null : this.renderObj.getVolume() : null; }, set: function(value) { this.renderObj && this.renderObj.isAuthenticated() && this.renderObj.setVolume(value); } }, malScore: { get: function() { return this.renderObj && this.renderObj.isAuthenticated() ? this.renderObj.getScoreCheckboxValue() : null; }, set: function(value) { this.renderObj && this.renderObj.isAuthenticated() && this.renderObj.handleScoreCheckbox(value); } }, statistics: function() { var stats = {}; try { stats = this.metaObj.getStatistics(); } catch (e) { console.log("[iframeOverview] Error:", e); } return stats; }, displayUrl: function() { return null != this.renderObj ? this.renderObj.getDisplayUrl() : this.renderObj.url; }, image: function() { var image = ""; try { image = this.metaObj.getImage(); } catch (e) { console.log("[iframeOverview] Error:", e); } try { null !== this.imageTemp && "" !== this.imageTemp && (image = this.imageTemp); } catch (e) { console.log("[iframeOverview] Error:", e); } return image; }, title: function() { var title = ""; try { title = this.metaObj.getTitle(); } catch (e) { console.log("[iframeOverview] Error:", e); } try { title = this.renderObj.getTitle(); } catch (e) { console.log("[iframeOverview] Error:", e); } return title; }, description: function() { var description = ""; try { description = this.metaObj.getDescription(); } catch (e) { console.log("[iframeOverview] Error:", e); } return description; }, altTitle: function() { var altTitle = {}; try { altTitle = this.metaObj.getAltTitle(); } catch (e) { console.log("[iframeOverview] Error:", e); } return altTitle; }, streaming: function() { var streamhtml = null, malObj = this.renderObj; if (null == malObj || !malObj.isAuthenticated()) return null; var streamUrl = malObj.getStreamingUrl(); return void 0 !== streamUrl && (streamhtml = `\n
\n \n ${api.storage.lang("overview_Continue_" + malObj.getType())}\n `, con.log("Resume", this.mal.resumeUrl, "Continue", this.mal.continueUrl), void 0 !== this.mal.continueUrl && this.mal.continueUrl && this.mal.continueUrl.ep === malObj.getEpisode() + 1 ? streamhtml += `\n ${api.storage.lang("overview_Next_Episode_" + malObj.getType())}\n ` : void 0 !== this.mal.resumeUrl && this.mal.resumeUrl && this.mal.resumeUrl.ep === malObj.getEpisode() && (streamhtml += `\n ${api.storage.lang("overview_Resume_Episode_" + malObj.getType())}\n `), streamhtml += "
\n "), streamhtml; }, characters: function() { var char = {}; try { char = this.metaObj.getCharacters(); } catch (e) { console.log("[iframeOverview] Error:", e); } return char; }, info: function() { var info = {}; try { info = this.metaObj.getInfo(); } catch (e) { console.log("[iframeOverview] Error:", e); } return info; }, openingSongs: function() { var opening = {}; try { opening = this.metaObj.getOpeningSongs(); } catch (e) { console.log("[iframeOverview] Error:", e); } return opening; }, endingSongs: function() { var ending = {}; try { ending = this.metaObj.getEndingSongs(); } catch (e) { console.log("[iframeOverview] Error:", e); } return ending; } }, methods: { lang: api.storage.lang, render: async function(renderObj) { if (this.metaObj = null, this.error = null, this.mal.resumeUrl = null, this.mal.continueUrl = null, this.kiss2mal = {}, this.related = [], this.prediction = null, this.imageTemp = null, null != renderObj) { var syncMode = api.settings.get("syncMode"); "SIMKL" === syncMode && "manga" === renderObj.type && (syncMode = api.settings.get("syncModeSimkl")); try { /^local:\/\//i.test(renderObj.url) ? this.metaObj = {} : "ANILIST" === syncMode ? this.metaObj = await new _provider_AniList_metadata__WEBPACK_IMPORTED_MODULE_2__.a(renderObj.url).init() : "KITSU" === syncMode ? this.metaObj = await new _provider_Kitsu_metadata__WEBPACK_IMPORTED_MODULE_3__.a(renderObj.url).init() : "SIMKL" === syncMode ? this.metaObj = await new _provider_Simkl_metadata__WEBPACK_IMPORTED_MODULE_4__.a(renderObj.url).init() : null !== renderObj.getMalUrl() && (this.metaObj = await new _provider_MyAnimeList_metadata__WEBPACK_IMPORTED_MODULE_1__.a(renderObj.getMalUrl()).init()); } catch (e) { return con.error("Could not retrive metadata", e), void (this.error = e); } null !== this.metaObj && (this.related = this.getRelated()), null !== renderObj.getMalUrl() && (renderObj.isAuthenticated() && this.updateStatusTags(), renderObj.getMalUrl().split("").length > 3 && utils.getMalToKissArray(renderObj.getType(), renderObj.getMalId()).then(links => { this.kiss2mal = links; })), "MAL" !== this.renderObj.shortName && (this.imageTemp = await this.renderObj.getImage()), this.mal.resumeUrl = await renderObj.getResumeWaching(), this.mal.continueUrl = await renderObj.getContinueWaching(), utils.epPredictionUI(renderObj.id, renderObj.getCacheKey(), renderObj.type, prediction => { this.prediction = prediction; }); } }, clickRender: function() { this.render(this.renderObj); }, malSync: function() { this.renderObj.sync().then((function() { utils.flashm("Updated"); }), e => { throw this.renderObj.flashmError(e), e; }); }, remove: function() { this.renderObj.delete().then(() => { utils.flashm("Removed"), this.renderObj.update(); }, () => { throw this.renderObj.flashmError(e), this.renderObj.update(), e; }); }, reload: function() { utils.flashm("Loading"), this.renderObj.update(); }, getMal2KissFavicon: function(streams) { try { return utils.favicon(streams[Object.keys(streams)[0]].url.split("/")[2]); } catch (e) { return con.error(e), ""; } }, getRelated: function() { var related = {}; try { related = this.metaObj.getRelated(); } catch (e) { console.log("[iframeOverview] Error:", e); } return related; }, updateStatusTags: async function() { for (var relatedKey in this.related) { var relate = this.related[relatedKey]; for (var linkKey in relate.links) { var link = relate.links[linkKey], url = utils.absoluteLink(link.url, "https://myanimelist.net"); if (void 0 !== url) { var tag = await utils.timeCache("MALTAG/" + url, (async function() { var malObj = Object(_provider_singleFactory__WEBPACK_IMPORTED_MODULE_0__.a)(url); return await malObj.update(), await new Promise((resolve, reject) => { setTimeout(resolve, 2e3); }), utils.statusTag(malObj.getStatus(), malObj.type, malObj.id); }), 1728e5); tag && (this.related[relatedKey].links[linkKey].statusTag = tag); } } } } } }; }).call(this, __webpack_require__(2), __webpack_require__(0), __webpack_require__(1)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(j, api) { __webpack_exports__.a = { data: function() { return { xhr: "" }; }, props: { url: { type: String, default: "" }, state: { type: Boolean, default: !1 } }, updated: function() { var minimal = j.$(this.$el); minimal.find(".js-similar-recommendations-button").addClass("nojs").click((function() { j.$(this).parent().find(".more").toggle(); })), minimal.find(".js-toggle-recommendation-button").addClass("nojs").click((function() { var revID = j.$(this).attr("data-id"); minimal.find("#recommend" + revID).css("display", "initial"), j.$(this).remove(); })), minimal.find("#malRecommendations .more .borderClass").addClass("mdl-shadow--2dp").css("padding", "10px"), minimal.find(".lazyload").each((function() { j.$(this).attr("src", j.$(this).attr("data-src")); })); }, watch: { url: async function(url) { this.xhr = "", this.state && api.request.xhr("GET", this.url + "/userrecs").then(response => { this.xhr = response.responseText; }); }, state: async function(state) { state && "" === this.xhr && api.request.xhr("GET", this.url + "/userrecs").then(response => { this.xhr = response.responseText; }); } }, computed: { recommendations: function() { try { var recommendationsBlock = this.xhr.split("Make a recommendation")[1].split("")[1].split('
{ recommendationsHtml += '
', recommendationsHtml += '
', recommendationsHtml += j.$(value).find(".picSurround").html(), recommendationsHtml += "
", recommendationsHtml += '
', recommendationsHtml += '
', j.$(value).find(".button_edit, .button_add, td:eq(1) > div:eq(1) span").remove(), recommendationsHtml += j.$(value).find("td:eq(1) > div:eq(1)").html(), recommendationsHtml += "
", recommendationsHtml += '
', j.$(value).find('a[href^="/dbchanges.php?go=report"]').remove(), recommendationsHtml += j.$(value).find(".borderClass").html(), recommendationsHtml += "
", recommendationsHtml += '
', recommendationsHtml += void 0 !== j.$(value).find(".spaceit").html() ? j.$(value).find(".spaceit").html() : "", recommendationsHtml += '", recommendationsHtml += "
", recommendationsHtml += "
", recommendationsHtml += "
"; }), recommendationsHtml += ""; } catch (e) { console.log("[iframeRecommendations] Error:", e); } return recommendationsHtml; } }, methods: { lang: api.storage.lang } }; }).call(this, __webpack_require__(3), __webpack_require__(0)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(j, api, con) { var cb, _provider_listFactory__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(17), _bookmarksItem_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(178); __webpack_exports__.a = { components: { bookmarksItem: _bookmarksItem_vue__WEBPACK_IMPORTED_MODULE_1__.a }, data: function() { return { items: [], loading: !0, errorText: null, cache: !1 }; }, props: { listType: { type: String, default: "anime" }, state: { type: Number, default: 1 } }, mounted: function() { this.load(), this.$parent.registerScroll("books", this.handleScroll); }, activated: function() { this.$nextTick(() => { j.$(this.$el).closest("html").find("head").click(); }); }, deactivated: function() { this.$parent.unregisterScroll("books"); }, watch: { listType: function(type) { this.load(); }, state: function(state) { this.load(); } }, methods: { lang: api.storage.lang, load: async function() { this.loading = !0, this.cache = !0, this.errorText = null, cb = void 0; var listProvider = await Object(_provider_listFactory__WEBPACK_IMPORTED_MODULE_0__.a)(this.state, this.listType), listError = e => { con.error(e), this.errorText = listProvider.errorMessage(e), this.loading = !1; }; listProvider.modes.cached = !0, listProvider.getCached().then(list => { this.items = list; }), 1 !== this.state && "1" !== this.state ? (listProvider.callbacks = { continueCall: list => { if (this.loading = !1, this.cache = !1, this.items = list, !listProvider.isDone()) return new Promise(resolve => { cb = () => { resolve(); }; }); } }, listProvider.get().catch(listError)) : (listProvider.modes.sortAiring = !0, listProvider.get().then(list => { this.loading = !1, this.cache = !1, this.items = list; }).catch(listError)); }, handleScroll: function(pos) { pos.pos + pos.elHeight + 1e3 > pos.height && void 0 !== cb && (this.loading = !0, cb(), cb = void 0); } } }; }).call(this, __webpack_require__(3), __webpack_require__(0), __webpack_require__(1)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(utils, api) { __webpack_require__(18); __webpack_exports__.a = { data: function() { return { prediction: void 0, resumeUrl: null, continueUrl: null }; }, props: { item: { type: Object } }, mounted: async function() { if (void 0 === this.item.resume) { var resumeUrl = null, continueUrl = null, type = (this.item.malId, this.item.type), resumeUrlObj = await utils.getResumeWaching(type, this.item.cacheKey), continueUrlObj = await utils.getContinueWaching(type, this.item.cacheKey), curEp = parseInt(this.item.watchedEp.toString()); void 0 !== continueUrlObj && continueUrlObj.ep === curEp + 1 ? continueUrl = continueUrlObj.url : void 0 !== resumeUrlObj && resumeUrlObj.ep === curEp && (resumeUrl = resumeUrlObj.url), this.resumeUrl = resumeUrl, this.continueUrl = continueUrl; } void 0 === this.prediction && (this.setPrediction(), setInterval(() => { this.setPrediction(); }, 6e4)); }, watch: {}, computed: { imageHi: function() { var imageHi = this.item.image, regexDimensions = /\/r\/\d*x\d*/g; return regexDimensions.test(imageHi) && (imageHi = imageHi.replace(/v.jpg$/g, ".jpg").replace(regexDimensions, "")), imageHi; }, barTotal: function() { return this.prediction && this.prediction.tagEpisode && !this.hasTotalEp ? this.prediction.tagEpisode > this.item.watchedEp ? Math.ceil(1.2 * this.prediction.tagEpisode) : Math.ceil(1.2 * this.item.watchedEp) : this.item.totalEp; }, hasTotalEp: function() { return 0 !== parseInt(this.item.totalEp); }, progress: function() { return "width: " + this.item.watchedEp / this.barTotal * 100 + "%; max-width: 100%;"; }, predictionBar: function() { var predictionProgress = this.prediction.tagEpisode / this.barTotal * 100, color = "orange"; return "" !== this.prediction.color && (color = this.prediction.color), "width: " + predictionProgress + "%; background-color: " + color; }, streamUrl: function() { return utils.getUrlFromTags(this.item.tags); }, preTexter: function() { var pre = this.prediction.prediction, diffDays = pre.diffDays, diffHours = pre.diffHours, diffMinutes = pre.diffMinutes; diffDays > 1 && diffHours > 12 && diffDays++; var text = ""; return diffDays > 1 ? text + diffDays + " " + api.storage.lang("bookmarksItem_Days") : (1 === diffDays && (text += diffDays + " " + api.storage.lang("bookmarksItem_Day") + " "), diffHours > 1 ? text + diffHours + " " + api.storage.lang("bookmarksItem_Hours") : (1 === diffHours && (text += diffHours + " " + api.storage.lang("bookmarksItem_Hour") + " "), text + diffMinutes + " " + api.storage.lang("bookmarksItem_mins"))); } }, methods: { lang: api.storage.lang, favicon: function(domain) { return utils.favicon(domain); }, assetUrl: function(asset) { return api.storage.assetUrl(asset); }, setPrediction: function() { utils.epPredictionUI(this.item.malId, this.item.cacheKey, this.item.type, prediction => { this.prediction = prediction; }); } } }; }).call(this, __webpack_require__(2), __webpack_require__(0)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(j, api) { var _provider_provider__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18); __webpack_exports__.a = { components: {}, data: function() { return { items: [], loading: !0 }; }, props: { type: { type: String, default: "anime" }, keyword: { type: String, default: "" } }, mounted: function() { this.load(); }, activated: function() { this.$nextTick(() => { j.$(this.$el).closest("html").find("head").click(); }); }, watch: { keyword: function(type) { this.load(); }, type: function(type) { this.load(); } }, methods: { lang: api.storage.lang, load: function() { this.loading = !0, Object(_provider_provider__WEBPACK_IMPORTED_MODULE_0__.a)(this.keyword, this.type).then(items => { this.loading = !1, this.items = items; }); }, clickItem: function(e, item) { e.preventDefault(), this.$emit("clicked", item); } } }; }).call(this, __webpack_require__(3), __webpack_require__(0)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(api, con, utils) { var interva, _provider_listFactory__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(17); __webpack_exports__.a = { data: function() { return { items: [], history: [] }; }, props: { listType: { type: String, default: "anime" } }, mounted: function() { this.load(), interva = setInterval(() => { this.load(); }, 5e3); }, destroyed: function() { clearInterval(interva); }, watch: { listType: function(type) { this.load(); } }, methods: { lang: api.storage.lang, load: async function() { var listProvider = await Object(_provider_listFactory__WEBPACK_IMPORTED_MODULE_0__.a)(1, this.listType); listProvider.get().then(async list => { for (var i = 0; i < list.length; i++) { var el = list[i], episode = "", error = "", trColor = ""; con.log("el", el); var elCache = await api.storage.get("updateCheck/" + this.listType + "/" + el.cacheKey); con.log("elCache", elCache), void 0 !== elCache && (episode = elCache.newestEp + "/" + el.totalEp, trColor = "orange", elCache.finished && (error = "finished", trColor = "green"), void 0 !== elCache.error && (error = elCache.error, trColor = "red")), el.episode = episode, el.trColor = trColor, el.error = error; } this.items = list; }).catch(e => { con.error(e), listProvider.flashmError(e); }), api.storage.get("notificationHistory").then(history => { history.forEach(entry => { var timeDiff = Date.now() - entry.timestamp; timeDiff = utils.timeDiffToText(timeDiff), timeDiff += "ago", entry.timeDiff = timeDiff; }), this.history = history.reverse(); }); }, deleteItem(item) { var delPath = "updateCheck/" + this.listType + "/" + item.cacheKey; con.log("delete", delPath, item), api.storage.remove(delPath), item.trColor = "black"; }, notificationTest() { utils.notifications("https://malsync.lolamtisch.de/", "MyAnimeList-Sync", "by lolamtisch", "https://cdn.myanimelist.net/images/anime/5/65187.jpg"); }, startCheck() { chrome.alarms.create("updateCheckNow", { when: Date.now() + 1e3 }), utils.flashm("Check started"); } } }; }).call(this, __webpack_require__(0), __webpack_require__(1), __webpack_require__(2)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(api) { var _syncHandler_ts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(11); __webpack_exports__.a = { data: function() { return { listProvider: { mal: { text: "Init", list: null, master: !1 }, anilist: { text: "Init", list: null, master: !1 }, kitsu: { text: "Init", list: null, master: !1 }, simkl: { text: "Init", list: null, master: !1 } }, listReady: !1, listLength: 0, list: {}, missing: [], isBackgroundEnabled: !1 }; }, props: { listType: { type: String, default: "anime" } }, mounted: async function() { _syncHandler_ts__WEBPACK_IMPORTED_MODULE_0__.a.isEnabled().then(state => { this.isBackgroundEnabled = state; }); var type = this.listType, providerList = _syncHandler_ts__WEBPACK_IMPORTED_MODULE_0__.d({ mal: this.listProvider.mal, anilist: this.listProvider.anilist, kitsu: this.listProvider.kitsu, simkl: this.listProvider.simkl }), listOptions = await _syncHandler_ts__WEBPACK_IMPORTED_MODULE_0__.f(providerList, type, api, _syncHandler_ts__WEBPACK_IMPORTED_MODULE_0__.c); _syncHandler_ts__WEBPACK_IMPORTED_MODULE_0__.b(listOptions.master, listOptions.slaves, "mirror", listOptions.typeArray, this.list, this.missing), this.list = Object.assign({}, this.list), this.listReady = !0; }, destroyed: function() {}, watch: {}, computed: { listSyncLength: function() { return Object.values(this.list).filter(el => el.diff).length; } }, methods: { lang: api.storage.lang, getType: _syncHandler_ts__WEBPACK_IMPORTED_MODULE_0__.e, apiType: function() { return api.type; }, getTypeColor: function(type) { return "ANILIST" == type ? "border-left: 5px solid #02a9ff" : "KITSU" == type ? "border-left: 5px solid #f75239" : "SIMKL" == type ? "border-left: 5px solid #ffbf00" : "border-left: 5px solid #2e51a2"; }, syncList: async function() { this.listReady = !1, this.listLength = this.listSyncLength, _syncHandler_ts__WEBPACK_IMPORTED_MODULE_0__.g(this.list, this.missing); }, backgroundClick: async function() { await _syncHandler_ts__WEBPACK_IMPORTED_MODULE_0__.a.isEnabled() ? (_syncHandler_ts__WEBPACK_IMPORTED_MODULE_0__.a.disable(), this.isBackgroundEnabled = !1) : (_syncHandler_ts__WEBPACK_IMPORTED_MODULE_0__.a.enable(), this.isBackgroundEnabled = !0); } } }; }).call(this, __webpack_require__(0)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(api, utils, con) { var _provider_singleFactory__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(14), _provider_listFactory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17); async function cleanTags(url) { var entryClass = Object(_provider_singleFactory__WEBPACK_IMPORTED_MODULE_0__.a)(url); return entryClass.update().then(() => (entryClass.setStreamingUrl(""), entryClass.sync())).catch(e => { con.error(e); }); } function getList(type) { var listProvider = Object(_provider_listFactory__WEBPACK_IMPORTED_MODULE_1__.c)(7, type); return listProvider.get().then(list => list).catch(e => { throw con.error(e), listProvider.errorMessage(e); }); } __webpack_exports__.a = { data: function() { return { animeLoading: !1, animelist: null, animelistLength: null, mangaLoading: !1, mangalist: null, mangalistLength: null }; }, props: {}, mounted: async function() {}, destroyed: function() {}, watch: {}, computed: {}, methods: { lang: api.storage.lang, cleanTags: function() { this.animeLoading = !0, getList("anime").then(async list => { for (this.animelist = list, this.animelistLength = this.animelist.length; this.animelist.length; ) { var anime = this.animelist.pop(), streamUrl = utils.getUrlFromTags(anime.tags); void 0 !== streamUrl && (console.log(streamUrl), await cleanTags(anime.url)); } }).then(() => getList("manga")).then(async list => { for (this.mangalist = list, this.mangalistLength = this.mangalist.length; this.mangalist.length; ) { var manga = this.mangalist.pop(); void 0 !== utils.getUrlFromTags(manga.tags) && await cleanTags(manga.url); } }); } } }; }).call(this, __webpack_require__(0), __webpack_require__(2), __webpack_require__(1)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(j, api) { __webpack_exports__.a = { data: function() { return { xhr: "" }; }, props: { url: { type: String, default: "" }, state: { type: Boolean, default: !1 } }, updated: function() { var minimal = j.$(this.$el); minimal.find(".js-toggle-review-button").addClass("nojs").click((function() { var revID = j.$(this).attr("data-id"); minimal.find("#review" + revID).css("display", "initial"), minimal.find("#revhelp_output_" + revID).remove(), j.$(this).remove(); })), minimal.find(".mb8 a").addClass("nojs").click((function() { var revID = j.$(this).attr("onclick").split("j.$('")[1].split("'")[0]; minimal.find(revID).toggle(); })); }, watch: { url: async function(url) { this.xhr = "", this.state && api.request.xhr("GET", this.url + "/reviews").then(response => { this.xhr = response.responseText; }); }, state: async function(state) { state && "" === this.xhr && api.request.xhr("GET", this.url + "/reviews").then(response => { this.xhr = response.responseText; }); } }, computed: { reviews: function() { var html = ""; try { var reviews = this.xhr.split("Reviews")[1].split("

")[0], reviewsData = j.$.parseHTML(reviews), reviewsHtml = ""; j.$.each(j.$(reviewsData).filter(".borderDark"), (index, value) => { reviewsHtml += '
', reviewsHtml += '
', j.$(value).find(".spaceit > div").css("max-width", "60%"), reviewsHtml += j.$(value).find(".spaceit").first().html(), reviewsHtml += "
", reviewsHtml += '
', j.$(value).find(".textReadability, .textReadability > span").contents().filter((function() { return 3 === this.nodeType && j.$.trim(this.nodeValue).length; })).wrap('

'), j.$(value).find("br").css("line-height", "10px"), reviewsHtml += j.$(value).find(".textReadability").html(), reviewsHtml += "

", reviewsHtml += "
"; }), html = reviewsHtml += ""; } catch (e) { console.log("[iframeReview] Error:", e); } return html; } }, methods: { lang: api.storage.lang } }; }).call(this, __webpack_require__(3), __webpack_require__(0)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(api, utils) { var _components_search_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(165), _components_inputButton_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(163), _components_entry_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(164); __webpack_exports__.a = { components: { entry: _components_entry_vue__WEBPACK_IMPORTED_MODULE_2__.a, inputButton: _components_inputButton_vue__WEBPACK_IMPORTED_MODULE_1__.a, search: _components_search_vue__WEBPACK_IMPORTED_MODULE_0__.a }, data: () => ({ inputOffset: 0 }), computed: { searchClass: function() { return this.$parent.searchClass; }, syncPage: function() { return this.$parent.searchClass.getSyncPage(); }, currentStateEp: function() { if (this.syncPage && this.syncPage.curState && this.syncPage.curState.episode) return this.syncPage.curState.episode; }, syncMode: function() { return this.$parent.syncMode; }, offset: function() { return this.searchClass.getOffset(); } }, methods: { lang: api.storage.lang, setPage: function(url, id = 0) { this.searchClass.setUrl(url, id), utils.flashm(api.storage.lang("correction_NewUrl", [ url ]), !1), this.close(); }, setOffset: function(offset) { this.searchClass.setOffset(offset); }, close: function() { this.$root.$destroy(); }, calcEpOffset: function(ep) { return parseInt(ep) - parseInt(this.inputOffset); } } }; }).call(this, __webpack_require__(0), __webpack_require__(2)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(api) { var searchTimeout, _provider_provider__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18); __webpack_exports__.a = { components: {}, data: function() { return { items: [], loading: !1, searchKeyword: "" }; }, props: { type: { type: String, default: "anime" }, keyword: { type: String, default: "" }, syncMode: { type: Boolean, default: !1 }, currentId: { type: Number, default: 0 } }, mounted: function() { this.syncMode && (this.searchKeyword = this.keyword, this.load()); }, watch: { keyword: function(type) { this.searchKeyword = this.keyword, this.load(); }, searchKeyword: function(type) { clearTimeout(searchTimeout), searchTimeout = setTimeout(() => { this.load(); }, 200); }, type: function(type) { this.load(); } }, methods: { lang: api.storage.lang, load: function() { this.searchKeyword && (this.loading = !0, Object(_provider_provider__WEBPACK_IMPORTED_MODULE_0__.a)(this.searchKeyword, this.type).then(items => { this.loading = !1, this.items = items, this.$nextTick(() => { this.$el.scrollIntoView({ behavior: "smooth" }); }); })); }, inputFocus: function() { this.searchKeyword || (this.searchKeyword = this.keyword); }, clickItem: async function(e, item) { if (e.preventDefault(), item) { var url = await item.malUrl(); url ? this.$emit("clicked", { url: url, id: item.id }) : this.$emit("clicked", { url: item.url, id: item.id }); } else this.$emit("clicked", { url: "", id: 0 }); } } }; }).call(this, __webpack_require__(0)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(api) { __webpack_exports__.a = { data: function() { return { inputString: "" }; }, props: { state: { type: String | Number, default: "" }, type: { type: String, default: "" }, label: { type: String, default: "" } }, mounted: function() { this.inputString = this.state; }, watch: { state: function(type) { this.inputString = this.state; }, inputString: function(val) { this.$emit("change", this.inputString); } }, methods: { lang: api.storage.lang, click: function() { this.$emit("clicked", this.inputString); } } }; }).call(this, __webpack_require__(0)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(api, utils) { __webpack_exports__.a = { data: function() { return { image: "" }; }, props: { obj: { type: Object, default: void 0 } }, mounted: function() {}, computed: { status: { get: function() { return this.obj && this.obj.isAuthenticated() ? this.obj.getStatus() : null; }, set: function(value) { this.obj && this.obj.isAuthenticated() && this.obj.setStatus(value); } }, episode: { get: function() { return this.obj && this.obj.isAuthenticated() && this.obj.isOnList() ? this.obj.getEpisode() : null; }, set: function(value) { this.obj && this.obj.isAuthenticated() && this.obj.setEpisode(value); } }, volume: { get: function() { return this.obj && this.obj.isAuthenticated() && this.obj.isOnList() ? this.obj.getVolume() : null; }, set: function(value) { this.obj && this.obj.isAuthenticated() && this.obj.setVolume(value); } }, score: { get: function() { return this.obj && this.obj.isAuthenticated() ? this.obj.getDisplayScoreCheckbox() : null; }, set: function(value) { this.obj && this.obj.isAuthenticated() && this.obj.setScore(value); } } }, watch: { obj: { deep: !0, immediate: !0, handler(val, oldVal) { if (val && (!oldVal || oldVal.getUrl() !== val.getUrl())) { var tempUrl = val.getUrl(); val.getImage().then(img => { this.obj && this.obj.getUrl() === tempUrl && (this.image = img); }); } } } }, methods: { lang: api.storage.lang, utilsepisode: utils.episode, statusText: function(state) { switch (state) { case 1: return api.storage.lang("UI_Status_watching_" + this.obj.getType()); case 2: return api.storage.lang("UI_Status_Completed"); case 3: return api.storage.lang("UI_Status_OnHold"); case 4: return api.storage.lang("UI_Status_Dropped"); case 6: return api.storage.lang("UI_Status_planTo_" + this.obj.getType()); case 23: return api.storage.lang("UI_Status_Rewatching_" + this.obj.getType()); default: return ""; } } } }; }).call(this, __webpack_require__(0), __webpack_require__(2)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(api, utils, con) { __webpack_exports__.a = { data: () => ({ streamUrl: void 0, continueUrl: null, resumeUrl: null, links: null, pageSearch: null, classes: { minimized: !0, search: !1 } }), created: function() { var classes = JSON.parse(localStorage.getItem("SIMKL-MAL-SYNC")); classes && (this.classes = classes); }, watch: { streamUrl: function(url, oldUrl) { url && (this.classes.minimized = !0, this.classes.search = !1); } }, methods: { lang: api.storage.lang, favicon: utils.favicon, assetUrl: api.storage.assetUrl, getMal2KissFavicon: function(streams) { try { return utils.favicon(streams[Object.keys(streams)[0]].url.split("/")[2]); } catch (e) { return con.error(e), ""; } }, toggleSearch: function() { this.classes.search = !this.classes.search, this.saveClasses(); }, pressMinimized: function() { null === this.links || Object.keys(this.links).length ? this.toggleMinimized() : this.toggleSearch(), this.saveClasses(); }, toggleMinimized: function() { this.classes.minimized = !this.classes.minimized, this.classes.search && this.classes.minimized && this.toggleSearch(), this.saveClasses(); }, removeSource: function(key) { api.settings.set(key, !1), this.$delete(this.links, key); }, saveClasses: function() { localStorage.setItem("SIMKL-MAL-SYNC", JSON.stringify(this.classes)); } } }; }).call(this, __webpack_require__(0), __webpack_require__(2), __webpack_require__(1)); }, function(module, exports, __webpack_require__) { var result = __webpack_require__(338); module.exports = "string" == typeof result ? result : result.toString(); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(api) { function getSyncMode(type = "") { var mode = api.settings.get("syncMode"); return "SIMKL" !== mode || "manga" !== type && -1 === type.indexOf("/manga/") ? mode : api.settings.get("syncModeSimkl"); } __webpack_require__.d(__webpack_exports__, "a", (function() { return getSyncMode; })); }).call(this, __webpack_require__(0)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(api, j, utils) { __webpack_require__.d(__webpack_exports__, "a", (function() { return metadata; })), __webpack_require__.d(__webpack_exports__, "b", (function() { return search; })); class metadata { constructor(malUrl) { return this.malUrl = malUrl, this.xhr = "", this; } init() { return api.request.xhr("GET", this.malUrl).then(response => (this.xhr = response.responseText, this)); } getTitle() { var title = ""; try { title = this.xhr.split('itemprop="name">')[1].split("<")[0]; } catch (e) { console.log("[iframeOverview] Error:", e); } return title; } getDescription() { var description = ""; try { description = this.xhr.split('itemprop="description">')[1].split("" + this.xhr.split("

Alternative Titles

")[1].split("

")[0] + "

"); altTitle = j.$(tempHtml).find(".spaceit_pad").toArray().map((function(i) { return utils.getBaseText(j.$(i)).trim(); })); } catch (e) { console.log("[iframeOverview] Error:", e); } return altTitle; } getCharacters() { var charArray = []; try { var characterBlock = this.xhr.split("detail-characters-list")[1].split("")[0], charHtml = j.$.parseHTML('
table"), (index, value) => { index || 1; var regexDimensions = /\/r\/\d*x\d*/g, charImg = j.$(value).find("img").first().attr("data-src"); charImg = regexDimensions.test(charImg) ? charImg.replace(regexDimensions, "") : api.storage.assetUrl("questionmark.gif"), charImg = utils.handleMalImages(charImg), charArray.push({ img: charImg, html: j.$(value).find(".borderClass .spaceit_pad").first().parent().html() }); }); } catch (e) { console.log("[iframeOverview] Error:", e); } return charArray; } getStatistics() { var stats = []; try { var statsBlock = this.xhr.split("

Statistics

")[1].split("

")[0], tempHtml = j.$.parseHTML(statsBlock); j.$.each(j.$(tempHtml).filter("div").slice(0, 5), (function(index, value) { var title = j.$(value).find(".dark_text").text(), body = null != j.$(value).find("span[itemprop=ratingValue]").height() ? j.$(value).find("span[itemprop=ratingValue]").text() : j.$(value).clone().children().remove().end().text(); stats.push({ title: title, body: body.trim() }); })); } catch (e) { console.log("[iframeOverview] Error:", e); } return stats; } getInfo() { var html = []; try { var infoBlock = this.xhr.split("

Information

")[1].split("

")[0], infoData = j.$.parseHTML(infoBlock); j.$.each(j.$(infoData).filter("div"), (index, value) => { var title = j.$(value).find(".dark_text").text(); j.$(value).find(".dark_text").remove(), html.push({ title: title.trim(), body: j.$(value).html().trim() }); }), this.getExternalLinks(html); } catch (e) { console.log("[iframeOverview] Error:", e); } return html; } getExternalLinks(html) { try { var infoBlock = this.xhr.split("

External Links

")[1].split("
")[0] + "
", infoData = j.$.parseHTML(infoBlock), body = ""; j.$.each(j.$(infoData).find("a"), (index, value) => { index && (body += ", "), body += '' + j.$(value).text() + ""; }), "" !== body && html.push({ title: "External Links", body: body }); } catch (e) { console.log("[iframeOverview] Error:", e); } } getOpeningSongs() { var openingSongs = []; try { var openingBlock = "
" + this.xhr.split('opnening">')[1].split("
")[0] + "
", openingData = j.$.parseHTML(openingBlock); openingSongs = j.$.map(j.$(openingData).find(".theme-song"), j.$.text); } catch (e) { console.log("[iframeOverview] Error:", e); } return openingSongs; } getEndingSongs() { var endingSongs = []; try { var endingBlock = "
" + this.xhr.split(' ending">')[1].split("
")[0] + "", endingData = j.$.parseHTML(endingBlock); endingSongs = j.$.map(j.$(endingData).find(".theme-song"), j.$.text); } catch (e) { console.log("[iframeOverview] Error:", e); } return endingSongs; } getRelated() { var el = []; try { var relatedBlock = this.xhr.split("Related ")[1].split("")[1].split("

")[0], related = j.$.parseHTML(relatedBlock); j.$.each(j.$(related).filter("table").find("tr"), (function(index, value) { var links = []; j.$(value).find(".borderClass").last().find("a").each((function(index, value) { links.push({ url: j.$(value).attr("href"), title: j.$(value).text(), statusTag: "" }); })), el.push({ type: j.$(value).find(".borderClass").first().text(), links: links }); })); } catch (e) { console.log("[iframeOverview] Error:", e); } return el; } } function search(keyword, type, options = {}, sync = !1) { return api.request.xhr("GET", "https://myanimelist.net/search/prefix.json?type=" + type + "&keyword=" + keyword + "&v=1").then(response => { var items = JSON.parse(response.responseText).categories[0].items, resItems = []; return items.forEach((function(item) { resItems.push({ id: item.id, name: item.name, altNames: [], url: item.url, malUrl: () => item.url, image: item.image_url, media_type: item.payload.media_type, isNovel: "Novel" === item.payload.media_type, score: item.payload.score, year: item.payload.start_year }); })), resItems; }); } }).call(this, __webpack_require__(0), __webpack_require__(3), __webpack_require__(2)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(utils, con, api, j) { __webpack_require__.d(__webpack_exports__, "a", (function() { return metadata; })), __webpack_require__.d(__webpack_exports__, "b", (function() { return search; })); class metadata { constructor(malUrl) { this.malUrl = malUrl, this.aniId = NaN, this.type = utils.urlPart(malUrl, 3), void 0 !== malUrl && malUrl.indexOf("myanimelist.net") > -1 ? this.id = utils.urlPart(malUrl, 4) : void 0 !== malUrl && malUrl.indexOf("anilist.co") > -1 ? (this.id = NaN, this.aniId = utils.urlPart(malUrl, 4)) : this.id = NaN; } init() { con.log("Update AniList info", this.id ? "MAL: " + this.id : "AniList: " + this.aniId); var selectId = this.id, selectQuery = "idMal"; isNaN(this.id) && (selectId = this.aniId, selectQuery = "id"); var query = `\n query ($id: Int, $type: MediaType) {\n Media (${selectQuery}: $id, type: $type) {\n id\n idMal\n siteUrl\n episodes\n chapters\n volumes\n averageScore\n synonyms\n description(asHtml: true)\n coverImage{\n large\n }\n title {\n userPreferred\n romaji\n english\n native\n }\n characters (perPage: 6, sort: [ROLE, ID]) {\n edges {\n id\n role\n node {\n id\n siteUrl\n name {\n first\n last\n }\n image {\n large\n }\n }\n }\n }\n popularity\n favourites\n rankings {\n id\n rank\n type\n format\n year\n season\n allTime\n context\n }\n relations {\n edges {\n id\n relationType (version: 2)\n node {\n id\n siteUrl\n title {\n userPreferred\n }\n }\n }\n }\n format\n episodes\n duration\n status\n startDate {\n year\n month\n day\n }\n endDate {\n year\n month\n day\n }\n season\n studios {\n edges {\n isMain\n node {\n siteUrl\n id\n name\n }\n }\n }\n source(version: 2)\n genres\n externalLinks {\n site\n url\n }\n }\n }\n `, variables = { id: selectId, type: this.type.toUpperCase() }; return api.request.xhr("POST", { url: "https://graphql.anilist.co", headers: { "Content-Type": "application/json", Accept: "application/json" }, data: JSON.stringify({ query: query, variables: variables }) }).then(response => { var res = JSON.parse(response.responseText); return con.log(res), this.xhr = res, this; }); } getTitle() { var title = ""; try { title = this.xhr.data.Media.title.userPreferred; } catch (e) { console.log("[iframeOverview] Error:", e); } return title; } getDescription() { var description = ""; try { description = this.xhr.data.Media.description; } catch (e) { console.log("[iframeOverview] Error:", e); } return description; } getImage() { var image = ""; try { image = this.xhr.data.Media.coverImage.large; } catch (e) { console.log("[iframeOverview] Error:", e); } return image; } getAltTitle() { var altTitle = []; try { for (var prop in this.xhr.data.Media.title) { var el = this.xhr.data.Media.title[prop]; el !== this.getTitle() && el && altTitle.push(el); } } catch (e) { console.log("[iframeOverview] Error:", e); } return altTitle; } getCharacters() { var charArray = []; try { this.xhr.data.Media.characters.edges.forEach((function(i) { var name = ""; null !== i.node.name.last && (name += i.node.name.last), "" !== i.node.name.first && "" !== i.node.name.last && null !== i.node.name.first && null !== i.node.name.last && (name += ", "), null !== i.node.name.first && (name += i.node.name.first), name = '' + name + "", charArray.push({ img: i.node.image.large, html: name }); })); } catch (e) { console.log("[iframeOverview] Error:", e); } return charArray; } getStatistics() { var stats = []; try { null !== this.xhr.data.Media.averageScore && stats.push({ title: "Score:", body: this.xhr.data.Media.averageScore }), null !== this.xhr.data.Media.favourites && stats.push({ title: "Favourites:", body: this.xhr.data.Media.favourites }), null !== this.xhr.data.Media.popularity && stats.push({ title: "Popularity:", body: this.xhr.data.Media.popularity }), this.xhr.data.Media.rankings.forEach((function(i) { if (stats.length < 4 && i.allTime) { var title = i.context.replace("all time", "").trim() + ":"; title = title.charAt(0).toUpperCase() + title.slice(1), stats.push({ title: title, body: "#" + i.rank }); } })); } catch (e) { console.log("[iframeOverview] Error:", e); } return stats; } getInfo() { var html = []; try { if (null !== this.xhr.data.Media.format) { var format = this.xhr.data.Media.format.toLowerCase().replace("_", " "); format = format.charAt(0).toUpperCase() + format.slice(1), html.push({ title: "Format:", body: format }); } if (null !== this.xhr.data.Media.episodes && html.push({ title: "Episodes:", body: this.xhr.data.Media.episodes }), null !== this.xhr.data.Media.duration && html.push({ title: "Episode Duration:", body: this.xhr.data.Media.duration + " mins" }), null !== this.xhr.data.Media.status) { var status = this.xhr.data.Media.status.toLowerCase().replace("_", " "); status = status.charAt(0).toUpperCase() + status.slice(1), html.push({ title: "Status:", body: status }); } if (null !== this.xhr.data.Media.startDate.year && html.push({ title: "Start Date:", body: this.xhr.data.Media.startDate.year + "-" + this.xhr.data.Media.startDate.month + "-" + this.xhr.data.Media.startDate.day }), null !== this.xhr.data.Media.endDate.year && html.push({ title: "End Date:", body: this.xhr.data.Media.endDate.year + "-" + this.xhr.data.Media.endDate.month + "-" + this.xhr.data.Media.endDate.day }), null !== this.xhr.data.Media.season) { var season = this.xhr.data.Media.season.toLowerCase().replace("_", " "); season = season.charAt(0).toUpperCase() + season.slice(1), null !== this.xhr.data.Media.endDate.year && (season += " " + this.xhr.data.Media.endDate.year), html.push({ title: "Season:", body: season }); } var studios = ""; if (this.xhr.data.Media.studios.edges.forEach((function(i, index) { i.isMain && ("" !== studios && (studios += ", "), studios += '' + i.node.name + ""); })), "" !== studios && html.push({ title: "Studios:", body: studios }), null !== this.xhr.data.Media.source) { var source = this.xhr.data.Media.source.toLowerCase().replace("_", " "); source = source.charAt(0).toUpperCase() + source.slice(1), html.push({ title: "Source:", body: source }); } if (null !== this.xhr.data.Media.genres) { var gen = []; this.xhr.data.Media.genres.forEach((function(i, index) { gen.push('' + i + ""); })), html.push({ title: "Genres:", body: gen.join(", ") }); } var external = ""; this.xhr.data.Media.externalLinks.forEach((function(i, index) { "" !== external && (external += ", "), external += '' + i.site + ""; })), "" !== external && html.push({ title: "External Links:", body: external }); } catch (e) { console.log("[iframeOverview] Error:", e); } return html; } getOpeningSongs() { return []; } getEndingSongs() { return []; } getRelated() { var el = [], links = {}; try { this.xhr.data.Media.relations.edges.forEach((function(i) { if (void 0 === links[i.relationType]) { var title = i.relationType.toLowerCase().replace("_", " "); title = title.charAt(0).toUpperCase() + title.slice(1), links[i.relationType] = { type: title, links: [] }; } links[i.relationType].links.push({ url: i.node.siteUrl, title: i.node.title.userPreferred, statusTag: "" }); })), el = Object.keys(links).map(key => links[key]); } catch (e) { console.log("[iframeOverview] Error:", e); } return el; } } function search(keyword, type, options = {}, sync = !1) { var query = `\n query ($search: String) {\n ${type}: Page (perPage: 10) {\n pageInfo {\n total\n }\n results: media (type: ${type.toUpperCase()}, search: $search) {\n id\n siteUrl\n idMal\n title {\n userPreferred\n romaji\n english\n native\n }\n coverImage {\n medium\n }\n type\n format\n averageScore\n startDate {\n year\n }\n synonyms\n }\n }\n }\n `, variables = { search: keyword }; return api.request.xhr("POST", { url: "https://graphql.anilist.co", headers: { "Content-Type": "application/json", Accept: "application/json" }, data: JSON.stringify({ query: query, variables: variables }) }).then(response => { var res = JSON.parse(response.responseText); con.log(res); var resItems = []; return j.$.each(res.data[type].results, (function(index, item) { resItems.push({ id: item.id, name: item.title.userPreferred, altNames: Object.values(item.title).concat(item.synonyms), url: item.siteUrl, malUrl: () => item.idMal ? "https://myanimelist.net/" + type + "/" + item.idMal : null, image: item.coverImage.medium, media_type: item.format ? (item.format.charAt(0) + item.format.slice(1).toLowerCase()).replace("_", " ") : "", isNovel: "NOVEL" === item.format, score: item.averageScore, year: item.startDate.year }); })), resItems; }); } }).call(this, __webpack_require__(2), __webpack_require__(1), __webpack_require__(0), __webpack_require__(3)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(utils, con, api) { __webpack_require__.d(__webpack_exports__, "a", (function() { return metadata; })), __webpack_require__.d(__webpack_exports__, "b", (function() { return search; })); var _helper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(23), _src_provider_definitions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5), __awaiter = function(thisArg, _arguments, P, generator) { return new (P || (P = Promise))((function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } function step(result) { var value; result.done ? resolve(result.value) : (value = result.value, value instanceof P ? value : new P((function(resolve) { resolve(value); }))).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); })); }; class metadata { constructor(malUrl) { return this.malUrl = malUrl, this.kitsuSlug = "", this.kitsuId = NaN, this.type = utils.urlPart(malUrl, 3), void 0 !== malUrl && malUrl.indexOf("myanimelist.net") > -1 ? this.id = utils.urlPart(malUrl, 4) : void 0 !== malUrl && malUrl.indexOf("kitsu.io") > -1 ? (this.id = NaN, this.kitsuSlug = utils.urlPart(malUrl, 4)) : this.id = NaN, this; } animeI() { return this.animeInfo.data; } init() { return __awaiter(this, void 0, void 0, (function*() { if (con.log("Update Kitsu info", this.id ? "MAL: " + this.id : "Kitsu: " + this.kitsuSlug), isNaN(this.id)) { var kitsuSlugRes = yield _helper__WEBPACK_IMPORTED_MODULE_0__.b(this.kitsuSlug, this.type); this.kitsuId = kitsuSlugRes.res.data[0].id, this.id = kitsuSlugRes.malId; } if (isNaN(this.kitsuId)) { var kitsuRes = yield _helper__WEBPACK_IMPORTED_MODULE_0__.d(this.id, this.type); try { this.kitsuId = kitsuRes.data[0].relationships.item.data.id; } catch (e) { con.error("Not found", e); } } return apiCall("GET", "https://kitsu.io/api/edge/" + this.type + "/" + this.kitsuId + "?include=characters.character,mediaRelationships.destination,categories&fields[categories]=slug,title&", {}).then(res => { this.animeInfo = res; try { this.animeI().attributes.slug; } catch (e) { throw con.error(e), "Not Found"; } return this; }); })); } getTitle() { var title = ""; try { title = _helper__WEBPACK_IMPORTED_MODULE_0__.a(this.animeI().attributes.titles); } catch (e) { console.log("[iframeOverview] Error:", e); } return title; } getDescription() { var description = ""; try { description = '' + this.animeI().attributes.synopsis.replace("—", " ") + ""; } catch (e) { console.log("[iframeOverview] Error:", e); } return description; } getImage() { var image = ""; try { image = this.animeI().attributes.posterImage.large; } catch (e) { console.log("[iframeOverview] Error:", e); } return image; } getAltTitle() { var altTitle = []; try { for (var prop in this.animeI().attributes.abbreviatedTitles) { (el = this.animeI().attributes.abbreviatedTitles[prop]) !== this.getTitle() && el && altTitle.push(el); } for (var prop in this.animeI().attributes.titles) { var el; (el = this.animeI().attributes.titles[prop]) !== this.getTitle() && el && altTitle.push(el); } } catch (e) { console.log("[iframeOverview] Error:", e); } return altTitle; } getCharacters() { var charArray = []; try { this.animeInfo.included.forEach((function(i) { if ("characters" === i.type && charArray.length < 10) { var name = i.attributes.name; void 0 !== i.attributes.malId && null !== i.attributes.malId && i.attributes.malId && (name = '' + name + ""), charArray.push({ img: null !== i.attributes.image ? i.attributes.image.original : api.storage.assetUrl("questionmark.gif"), html: name }); } })); } catch (e) { console.log("[iframeOverview] Error:", e); } return charArray; } getStatistics() { var stats = []; try { null !== this.animeI().attributes.averageRating && stats.push({ title: "Score:", body: this.animeI().attributes.averageRating }), null !== this.animeI().attributes.ratingRank && stats.push({ title: "Ranked:", body: "#" + this.animeI().attributes.ratingRank }), null !== this.animeI().attributes.popularityRank && stats.push({ title: "Popularity:", body: "#" + this.animeI().attributes.popularityRank }), null !== this.animeI().attributes.userCount && stats.push({ title: "Members:", body: this.animeI().attributes.userCount }); } catch (e) { console.log("[iframeOverview] Error:", e); } return stats; } getInfo() { var html = []; try { if (void 0 !== this.animeI().attributes.subtype && null !== this.animeI().attributes.subtype) { var format = this.animeI().attributes.subtype.toLowerCase().replace("_", " "); format = format.charAt(0).toUpperCase() + format.slice(1), html.push({ title: "Format:", body: format }); } if (void 0 !== this.animeI().attributes.episodeCount && null !== this.animeI().attributes.episodeCount && html.push({ title: "Episodes:", body: this.animeI().attributes.episodeCount }), void 0 !== this.animeI().attributes.episodeLength && null !== this.animeI().attributes.episodeLength && html.push({ title: "Episode Duration:", body: this.animeI().attributes.episodeLength + " mins" }), void 0 !== this.animeI().attributes.status && null !== this.animeI().attributes.status) { var status = this.animeI().attributes.status.toLowerCase().replace("_", " "); status = status.charAt(0).toUpperCase() + status.slice(1), html.push({ title: "Status:", body: status }); } void 0 !== this.animeI().attributes.startDate && null !== this.animeI().attributes.startDate && html.push({ title: "Start Date:", body: this.animeI().attributes.startDate }), void 0 !== this.animeI().attributes.endDate && null !== this.animeI().attributes.endDate && html.push({ title: "Start Date:", body: this.animeI().attributes.endDate }); var genres = []; this.animeInfo.included.forEach(i => { "categories" === i.type && genres.length < 6 && genres.push('' + i.attributes.title + ""); }), genres.length && html.push({ title: "Genres:", body: genres.join(", ") }), void 0 !== this.animeI().attributes.ageRating && null !== this.animeI().attributes.ageRating && html.push({ title: "Rating:", body: this.animeI().attributes.ageRating }), void 0 !== this.animeI().attributes.totalLength && null !== this.animeI().attributes.totalLength && html.push({ title: "Total playtime:", body: this.animeI().attributes.totalLength + " mins" }); } catch (e) { console.log("[iframeOverview] Error:", e); } return html; } getOpeningSongs() { return []; } getEndingSongs() { return []; } getRelated() { var el = [], links = {}; try { var an = []; this.animeInfo.included.forEach((function(i) { "manga" !== i.type && "anime" !== i.type || (an[i.id] = { url: "https://kitsu.io/" + i.type + "/" + i.attributes.slug, title: _helper__WEBPACK_IMPORTED_MODULE_0__.a(i.attributes.titles), statusTag: "" }); })), this.animeInfo.included.forEach((function(i) { if ("mediaRelationships" === i.type) { if (void 0 === links[i.attributes.role]) { var title = i.attributes.role.toLowerCase().replace("_", " "); title = title.charAt(0).toUpperCase() + title.slice(1), links[i.attributes.role] = { type: title, links: [] }; } var el = an[i.relationships.destination.data.id]; links[i.attributes.role].links.push(el); } })), el = Object.keys(links).map(key => links[key]); } catch (e) { console.log("[iframeOverview] Error:", e); } return el; } } function search(keyword, type, options = {}, sync = !1) { return apiCall("GET", "https://kitsu.io/api/edge/" + type + "?filter[text]=" + keyword + "&page[limit]=10&page[offset]=0&fields[" + type + "]=id,slug,titles,averageRating,startDate,posterImage,subtype", {}).then(res => { con.log("search", res); var resItems = []; return res.data.forEach((function(item) { resItems.push({ id: item.id, name: _helper__WEBPACK_IMPORTED_MODULE_0__.a(item.attributes.titles), altNames: Object.values(item.attributes.titles), url: "https://kitsu.io/" + type + "/" + item.attributes.slug, malUrl: () => __awaiter(this, void 0, void 0, (function*() { var malId = yield _helper__WEBPACK_IMPORTED_MODULE_0__.c(item.id, type); return malId ? "https://myanimelist.net/" + type + "/" + malId : null; })), image: item.attributes.posterImage && void 0 !== item.attributes.posterImage.tiny ? item.attributes.posterImage.tiny : "", media_type: item.attributes.subtype, isNovel: "novel" === item.attributes.subtype, score: item.attributes.averageRating, year: item.attributes.startDate }); })), resItems; }); } function apiCall(mode, url, variables = {}, authentication = !0) { var headers = { "Content-Type": "application/vnd.api+json", Accept: "application/vnd.api+json" }; return authentication && (headers.Authorization = "Bearer " + api.settings.get("kitsuToken")), api.request.xhr(mode, { url: url, headers: headers, data: JSON.stringify(variables) }).then(response => { if (response.status > 499 && response.status < 600 || 0 === response.status) throw { code: _src_provider_definitions__WEBPACK_IMPORTED_MODULE_1__.a.ServerOffline, message: "Server Offline status: " + response.status }; var res = JSON.parse(response.responseText); if (void 0 !== res.errors && res.errors.length) { con.error("[META]", "Error", res.errors); var error = res.errors[0]; switch (parseInt(error.status)) { case 401: case 403: throw { code: _src_provider_definitions__WEBPACK_IMPORTED_MODULE_1__.a.NotAutenticated, message: error.detail }; case 404: throw { code: _src_provider_definitions__WEBPACK_IMPORTED_MODULE_1__.a.EntryNotFound, message: error.detail }; default: throw { code: error.status, message: error.detail }; } } return res; }); } }).call(this, __webpack_require__(2), __webpack_require__(1), __webpack_require__(0)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(utils, con, j) { __webpack_require__.d(__webpack_exports__, "a", (function() { return metadata; })), __webpack_require__.d(__webpack_exports__, "b", (function() { return search; })); var _helper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(16), __awaiter = function(thisArg, _arguments, P, generator) { return new (P || (P = Promise))((function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } function step(result) { var value; result.done ? resolve(result.value) : (value = result.value, value instanceof P ? value : new P((function(resolve) { resolve(value); }))).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); })); }; class metadata { constructor(malUrl) { return this.malUrl = malUrl, this.simklId = NaN, this.type = utils.urlPart(malUrl, 3), void 0 !== malUrl && malUrl.indexOf("myanimelist.net") > -1 ? this.id = utils.urlPart(malUrl, 4) : void 0 !== malUrl && malUrl.indexOf("simkl.com") > -1 ? (this.id = NaN, this.simklId = utils.urlPart(malUrl, 4)) : this.id = NaN, this; } init() { return __awaiter(this, void 0, void 0, (function*() { if (con.log("Update Simkl info", this.id ? "MAL: " + this.id : "Simkl: " + this.simklId), isNaN(this.id)) var de = { simkl: this.simklId }; else de = { mal: this.id }; if (isNaN(this.simklId)) { var el = yield _helper__WEBPACK_IMPORTED_MODULE_0__.a("https://api.simkl.com/search/id", de, !0); if (!el) throw "Anime not found"; con.error(el), this.simklId = el[0].ids.simkl; } return _helper__WEBPACK_IMPORTED_MODULE_0__.a("https://api.simkl.com/anime/" + this.simklId, { extended: "full" }, !0).then(res => (con.log(res), this.animeInfo = res, this)); })); } getTitle() { var title = ""; try { title = this.animeInfo.title; } catch (e) { console.log("[iframeOverview] Error:", e); } return title; } getDescription() { var description = ""; try { description = this.animeInfo.overview; } catch (e) { console.log("[iframeOverview] Error:", e); } return description; } getImage() { var image = ""; try { image = "https://simkl.in/posters/" + this.animeInfo.poster + "_ca.jpg"; } catch (e) { console.log("[iframeOverview] Error:", e); } return image; } getAltTitle() { var altTitle = []; try { void 0 !== typeof this.animeInfo.en_title && this.animeInfo.en_title && altTitle.push(this.animeInfo.en_title); } catch (e) { console.log("[iframeOverview] Error:", e); } return altTitle; } getCharacters() { return []; } getStatistics() { var stats = []; try { null !== this.animeInfo.ratings.simkl.rating && stats.push({ title: "Score:", body: this.animeInfo.ratings.simkl.rating }), void 0 !== this.animeInfo.ratings.mal && null !== this.animeInfo.ratings.mal.rating && stats.push({ title: "MAL Score:", body: this.animeInfo.ratings.mal.rating }), void 0 !== this.animeInfo.rank && null !== this.animeInfo.rank && stats.push({ title: "Ranked:", body: "#" + this.animeInfo.rank }), null !== this.animeInfo.ratings.simkl.votes && stats.push({ title: "Votes:", body: this.animeInfo.ratings.simkl.votes }); } catch (e) { console.log("[iframeOverview] Error:", e); } return stats; } getInfo() { var html = []; try { void 0 !== this.animeInfo.anime_type && null !== this.animeInfo.anime_type && html.push({ title: "Type:", body: this.animeInfo.anime_type }), void 0 !== this.animeInfo.total_episodes && null !== this.animeInfo.total_episodes && html.push({ title: "Episodes:", body: this.animeInfo.total_episodes }), void 0 !== this.animeInfo.status && null !== this.animeInfo.status && html.push({ title: "Status:", body: this.animeInfo.status }), void 0 !== this.animeInfo.year && null !== this.animeInfo.year && html.push({ title: "Year:", body: this.animeInfo.year }), void 0 !== this.animeInfo.airs && null !== this.animeInfo.airs && html.push({ title: "Broadcast:", body: this.animeInfo.airs.day + " at " + this.animeInfo.airs.time }), void 0 !== this.animeInfo.network && null !== this.animeInfo.network && html.push({ title: "Licensor:", body: this.animeInfo.network }); var genres = []; this.animeInfo.genres.forEach(i => { genres.length < 6 && genres.push('' + i + ""); }), genres.length && html.push({ title: "Genres:", body: genres.join(", ") }), void 0 !== this.animeInfo.runtime && null !== this.animeInfo.runtime && html.push({ title: "Duration:", body: this.animeInfo.runtime + "mins" }), void 0 !== this.animeInfo.certification && null !== this.animeInfo.certification && html.push({ title: "Rating:", body: this.animeInfo.certification }); } catch (e) { console.log("[iframeOverview] Error:", e); } return html; } getOpeningSongs() { return []; } getEndingSongs() { return []; } getRelated() { return []; } } function search(keyword, type, options = {}, sync = !1) { return _helper__WEBPACK_IMPORTED_MODULE_0__.a("https://api.simkl.com/search/" + type, { q: keyword }, !0).then(res => { var resItems = []; return con.log("search", res), j.$.each(res, (function(index, item) { resItems.push({ id: item.ids.simkl_id, name: item.title, altNames: [], url: "https://simkl.com/" + type + "/" + item.ids.simkl_id + "/" + item.ids.slug, malUrl: () => __awaiter(this, void 0, void 0, (function*() { var malId = yield _helper__WEBPACK_IMPORTED_MODULE_0__.c(item.ids.simkl_id); return malId ? "https://myanimelist.net/" + type + "/" + malId : null; })), image: "https://simkl.in/posters/" + item.poster + "_cm.jpg", media_type: item.type, isNovel: !1, score: null, year: item.year }); })), resItems; }); } }).call(this, __webpack_require__(2), __webpack_require__(1), __webpack_require__(3)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.d(__webpack_exports__, "a", (function() { return simkl; })); const simkl = { shortName: "Simkl", score: "Simkl Score:", noLogin: 'Please Authenticate Here' }; }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; var render = function() { var _vm = this, _h = _vm.$createElement, _c = _vm._self._c || _h; return _c("div", [ _c("div", { staticClass: "icon material-icons", staticStyle: { "font-size": "16px", "line-height": "0", color: "#7f7f7f", "padding-bottom": "20px", "padding-left": "3px" }, style: _vm.tagStyle, attrs: { id: _vm.id } }, [ _vm._v("\n " + _vm._s(_vm.iconText) + "\n ") ]), _vm._v(" "), _c("div", { staticClass: "mdl-tooltip mdl-tooltip--large", class: _vm.directionClass, attrs: { for: _vm.id } }, [ _vm._t("default") ], 2) ]); }; render._withStripped = !0; var components_tooltipvue_type_script_lang_js_ = { data: function() { return { number: Math.floor(1e3 * Math.random() + 1) }; }, props: { direction: { type: String, default: "top" }, tagStyle: { type: String, default: "" }, iconText: { type: String, default: "contact_support" } }, computed: { id: function() { return "tt-" + this.number; }, directionClass: function() { return "mdl-tooltip--" + this.direction; } } }, componentNormalizer = __webpack_require__(6), component = Object(componentNormalizer.a)(components_tooltipvue_type_script_lang_js_, render, [], !1, null, null, null); component.options.__file = "src/minimal/minimalApp/components/tooltip.vue"; __webpack_exports__.a = component.exports; }, function(module, exports) { var g; g = function() { return this; }(); try { g = g || new Function("return this")(); } catch (e) { "object" == typeof window && (g = window); } module.exports = g; }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(con, api) { __webpack_require__.d(__webpack_exports__, "a", (function() { return exportData; })), __webpack_require__.d(__webpack_exports__, "b", (function() { return importData; })); var _helper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(15), __awaiter = function(thisArg, _arguments, P, generator) { return new (P || (P = Promise))((function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } function step(result) { var value; result.done ? resolve(result.value) : (value = result.value, value instanceof P ? value : new P((function(resolve) { resolve(value); }))).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); })); }; function exportData() { return __awaiter(this, void 0, void 0, (function*() { var data = yield _helper__WEBPACK_IMPORTED_MODULE_0__.c(), newData = {}; for (var key in data) _helper__WEBPACK_IMPORTED_MODULE_0__.b("(anime|manga)").test(key) && (newData[key] = data[key]); return newData; })); } function importData(newData) { return __awaiter(this, void 0, void 0, (function*() { var data = yield _helper__WEBPACK_IMPORTED_MODULE_0__.c(); for (var key in data) _helper__WEBPACK_IMPORTED_MODULE_0__.b("(anime|manga)").test(key) && (con.log("Remove", key), api.storage.remove(key)); for (var k in newData) con.log("Set", k, newData[k]), api.storage.set(k, newData[k]); return 1; })); } }).call(this, __webpack_require__(1), __webpack_require__(0)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(con, utils) { __webpack_require__.d(__webpack_exports__, "a", (function() { return searchClass; })); var _searchClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(85), _correctionApp_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(161), vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21); class searchClass extends _searchClass__WEBPACK_IMPORTED_MODULE_0__.a { constructor() { super(...arguments), this.reloadSync = !1; } openCorrectionCheck() { this.getUrl(); return this.state && this.state.similarity && this.state.similarity.same ? (con.log("similarity", this.state.similarity.value), !1) : this.openCorrection(!0).then(() => this.changed); } openCorrection(syncMode = !1) { return new Promise((resolve, reject) => { if (this.vueInstance && (this.vueInstance.$destroy(), !syncMode)) return void resolve(!1); var flasmessage = utils.flashm('
', { permanent: !0, position: "top", type: "correction" }); flasmessage.find(".shadow").get(0).attachShadow({ mode: "open" }).innerHTML = `\n \n
\n `; let element = flasmessage.find(".shadow").get(0).shadowRoot.querySelector("#correctionApp"); this.vueInstance = new vue__WEBPACK_IMPORTED_MODULE_2__.a({ el: element, render: h => h(_correctionApp_vue__WEBPACK_IMPORTED_MODULE_1__.a), data: () => ({ searchClass: this, syncMode: syncMode }), destroyed: () => { resolve(this.changed), flasmessage.remove(), this.vueInstance = void 0; } }); }); } } }).call(this, __webpack_require__(1), __webpack_require__(2)); }, function(module, exports) { function compareTwoStrings(first, second) { if (first = first.replace(/\s+/g, ""), second = second.replace(/\s+/g, ""), !first.length && !second.length) return 1; if (!first.length || !second.length) return 0; if (first === second) return 1; if (1 === first.length && 1 === second.length) return 0; if (first.length < 2 || second.length < 2) return 0; let firstBigrams = new Map; for (let i = 0; i < first.length - 1; i++) { const bigram = first.substring(i, i + 2), count = firstBigrams.has(bigram) ? firstBigrams.get(bigram) + 1 : 1; firstBigrams.set(bigram, count); } let intersectionSize = 0; for (let i = 0; i < second.length - 1; i++) { const bigram = second.substring(i, i + 2), count = firstBigrams.has(bigram) ? firstBigrams.get(bigram) : 0; count > 0 && (firstBigrams.set(bigram, count - 1), intersectionSize++); } return 2 * intersectionSize / (first.length + second.length - 2); } module.exports = { compareTwoStrings: compareTwoStrings, findBestMatch: function(mainString, targetStrings) { if (!function(mainString, targetStrings) { return "string" == typeof mainString && (!!Array.isArray(targetStrings) && (!!targetStrings.length && !targetStrings.find(s => "string" != typeof s))); }(mainString, targetStrings)) throw new Error("Bad arguments: First argument should be a string, second should be an array of strings"); const ratings = []; let bestMatchIndex = 0; for (let i = 0; i < targetStrings.length; i++) { const currentTargetString = targetStrings[i], currentRating = compareTwoStrings(mainString, currentTargetString); ratings.push({ target: currentTargetString, rating: currentRating }), currentRating > ratings[bestMatchIndex].rating && (bestMatchIndex = i); } const bestMatch = ratings[bestMatchIndex]; return { ratings: ratings, bestMatch: bestMatch, bestMatchIndex: bestMatchIndex }; } }; }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(api, utils, con) { function aniListToMal(anilistId, type) { var variables = { id: anilistId, type: type.toUpperCase() }; return api.request.xhr("POST", { url: "https://graphql.anilist.co", headers: { "Content-Type": "application/json", Accept: "application/json" }, data: JSON.stringify({ query: "\n query ($id: Int, $type: MediaType) {\n Media (id: $id, type: $type) {\n id\n idMal\n }\n }\n ", variables: variables }) }).then(response => { var res = JSON.parse(response.responseText); return con.log(res), function(res, silent = !1) { if (void 0 !== res.errors) for (var i = 0, len = res.errors.length; i < len; i++) { var error = res.errors[i]; switch (error.status) { case 400: if (!silent) return utils.flashm(api.storage.lang("Anilist_Authenticate"), { error: !0, type: "error" }), "noLogin"; case 404: if (!silent) { utils.flashm("anilist: " + error.message, { error: !0, type: "error" }); break; } default: throw silent || utils.flashm("anilist: " + error.message, { error: !0, type: "error" }), error.message; } } }(res), res.data.Media.idMal; }); } __webpack_require__.d(__webpack_exports__, "a", (function() { return aniListToMal; })); }).call(this, __webpack_require__(0), __webpack_require__(2), __webpack_require__(1)); }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; (function(j) { __webpack_require__.d(__webpack_exports__, "a", (function() { return userscriptLegacy; })); var __awaiter = function(thisArg, _arguments, P, generator) { return new (P || (P = Promise))((function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } function step(result) { var value; result.done ? resolve(result.value) : (value = result.value, value instanceof P ? value : new P((function(resolve) { resolve(value); }))).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); })); }; const userscriptLegacy = { set(key, value) { return __awaiter(this, void 0, void 0, (function*() { GM_setValue(key, value); })); }, get(key) { return __awaiter(this, void 0, void 0, (function*() { return GM_getValue(key); })); }, remove(key) { return __awaiter(this, void 0, void 0, (function*() { GM_deleteValue(key); })); }, list() { return __awaiter(this, void 0, void 0, (function*() { var reverseArray = {}; return j.$.each(GM_listValues(), (function(index, cache) { reverseArray[cache] = index; })), reverseArray; })); }, addStyle(css) { return __awaiter(this, void 0, void 0, (function*() { GM_addStyle(css); })); }, version: () => GM_info.script.version, lang(selector, args) { var message = i18n[selector]; if (void 0 !== args) for (var argIndex = 0; argIndex < args.length; argIndex++) message = message.replace("$" + (argIndex + 1), args[argIndex]); return message; }, assetUrl: filename => "https://raw.githubusercontent.com/lolamtisch/MALSync/master/assets/assets/" + filename, injectCssResource(res, head) { head.append(j.$("