HummingBirdAnimeClient/public/js/scripts.min.js.map
Timothy J. Warren 9a6d0052d7 Add background check for session validity
This checks when the app is made visible -- like the tab is switched to,
if the current session is still valid. If the session is not still
valid, the page is reloaded so that the session expiration is apparent.

Resolves #25
2020-08-05 21:46:14 -04:00

1 line
36 KiB
Plaintext

{"version":3,"file":"scripts.min.js.map","sources":["../../frontEndSrc/js/anime-client.js","../../frontEndSrc/js/events.js","../../frontEndSrc/js/anon.js","../../frontEndSrc/js/template-helpers.js","../../frontEndSrc/js/anime.js","../../frontEndSrc/js/manga.js"],"sourcesContent":["// -------------------------------------------------------------------------\n// ! Base\n// -------------------------------------------------------------------------\n\nconst matches = (elm, selector) => {\n\tlet m = (elm.document || elm.ownerDocument).querySelectorAll(selector);\n\tlet i = matches.length;\n\twhile (--i >= 0 && m.item(i) !== elm) {};\n\treturn i > -1;\n}\n\nexport const AnimeClient = {\n\t/**\n\t * Placeholder function\n\t */\n\tnoop: () => {},\n\t/**\n\t * DOM selector\n\t *\n\t * @param {string} selector - The dom selector string\n\t * @param {object} [context]\n\t * @return {[HTMLElement]} - array of dom elements\n\t */\n\t$(selector, context = null) {\n\t\tif (typeof selector !== 'string') {\n\t\t\treturn selector;\n\t\t}\n\n\t\tcontext = (context !== null && context.nodeType === 1)\n\t\t\t? context\n\t\t\t: document;\n\n\t\tlet elements = [];\n\t\tif (selector.match(/^#([\\w]+$)/)) {\n\t\t\telements.push(document.getElementById(selector.split('#')[1]));\n\t\t} else {\n\t\t\telements = [].slice.apply(context.querySelectorAll(selector));\n\t\t}\n\n\t\treturn elements;\n\t},\n\t/**\n\t * Does the selector exist on the current page?\n\t *\n\t * @param {string} selector\n\t * @returns {boolean}\n\t */\n\thasElement (selector) {\n\t\treturn AnimeClient.$(selector).length > 0;\n\t},\n\t/**\n\t * Scroll to the top of the Page\n\t *\n\t * @return {void}\n\t */\n\tscrollToTop () {\n\t\tconst el = AnimeClient.$('header')[0];\n\t\tel.scrollIntoView(true);\n\t},\n\t/**\n\t * Hide the selected element\n\t *\n\t * @param {string|Element} sel - the selector of the element to hide\n\t * @return {void}\n\t */\n\thide (sel) {\n\t\tif (typeof sel === 'string') {\n\t\t\tsel = AnimeClient.$(sel);\n\t\t}\n\n\t\tif (Array.isArray(sel)) {\n\t\t\tsel.forEach(el => el.setAttribute('hidden', 'hidden'));\n\t\t} else {\n\t\t\tsel.setAttribute('hidden', 'hidden');\n\t\t}\n\t},\n\t/**\n\t * UnHide the selected element\n\t *\n\t * @param {string|Element} sel - the selector of the element to hide\n\t * @return {void}\n\t */\n\tshow (sel) {\n\t\tif (typeof sel === 'string') {\n\t\t\tsel = AnimeClient.$(sel);\n\t\t}\n\n\t\tif (Array.isArray(sel)) {\n\t\t\tsel.forEach(el => el.removeAttribute('hidden'));\n\t\t} else {\n\t\t\tsel.removeAttribute('hidden');\n\t\t}\n\t},\n\t/**\n\t * Display a message box\n\t *\n\t * @param {string} type - message type: info, error, success\n\t * @param {string} message - the message itself\n\t * @return {void}\n\t */\n\tshowMessage (type, message) {\n\t\tlet template =\n\t\t\t`<div class='message ${type}'>\n\t\t\t\t<span class='icon'></span>\n\t\t\t\t${message}\n\t\t\t\t<span class='close'></span>\n\t\t\t</div>`;\n\n\t\tlet sel = AnimeClient.$('.message');\n\t\tif (sel[0] !== undefined) {\n\t\t\tsel[0].remove();\n\t\t}\n\n\t\tAnimeClient.$('header')[0].insertAdjacentHTML('beforeend', template);\n\t},\n\t/**\n\t * Finds the closest parent element matching the passed selector\n\t *\n\t * @param {HTMLElement} current - the current HTMLElement\n\t * @param {string} parentSelector - selector for the parent element\n\t * @return {HTMLElement|null} - the parent element\n\t */\n\tclosestParent (current, parentSelector) {\n\t\tif (Element.prototype.closest !== undefined) {\n\t\t\treturn current.closest(parentSelector);\n\t\t}\n\n\t\twhile (current !== document.documentElement) {\n\t\t\tif (matches(current, parentSelector)) {\n\t\t\t\treturn current;\n\t\t\t}\n\n\t\t\tcurrent = current.parentElement;\n\t\t}\n\n\t\treturn null;\n\t},\n\t/**\n\t * Generate a full url from a relative path\n\t *\n\t * @param {string} path - url path\n\t * @return {string} - full url\n\t */\n\turl (path) {\n\t\tlet uri = `//${document.location.host}`;\n\t\turi += (path.charAt(0) === '/') ? path : `/${path}`;\n\n\t\treturn uri;\n\t},\n\t/**\n\t * Throttle execution of a function\n\t *\n\t * @see https://remysharp.com/2010/07/21/throttling-function-calls\n\t * @see https://jsfiddle.net/jonathansampson/m7G64/\n\t * @param {Number} interval - the minimum throttle time in ms\n\t * @param {Function} fn - the function to throttle\n\t * @param {Object} [scope] - the 'this' object for the function\n\t * @return {Function}\n\t */\n\tthrottle (interval, fn, scope) {\n\t\tlet wait = false;\n\t\treturn function (...args) {\n\t\t\tconst context = scope || this;\n\n\t\t\tif ( ! wait) {\n\t\t\t\tfn.apply(context, args);\n\t\t\t\twait = true;\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\twait = false;\n\t\t\t\t}, interval);\n\t\t\t}\n\t\t};\n\t},\n};\n\n// -------------------------------------------------------------------------\n// ! Events\n// -------------------------------------------------------------------------\n\nfunction addEvent(sel, event, listener) {\n\t// Recurse!\n\tif (! event.match(/^([\\w\\-]+)$/)) {\n\t\tevent.split(' ').forEach((evt) => {\n\t\t\taddEvent(sel, evt, listener);\n\t\t});\n\t}\n\n\tsel.addEventListener(event, listener, false);\n}\n\nfunction delegateEvent(sel, target, event, listener) {\n\t// Attach the listener to the parent\n\taddEvent(sel, event, (e) => {\n\t\t// Get live version of the target selector\n\t\tAnimeClient.$(target, sel).forEach((element) => {\n\t\t\tif(e.target == element) {\n\t\t\t\tlistener.call(element, e);\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Add an event listener\n *\n * @param {string|HTMLElement} sel - the parent selector to bind to\n * @param {string} event - event name(s) to bind\n * @param {string|HTMLElement|function} target - the element to directly bind the event to\n * @param {function} [listener] - event listener callback\n * @return {void}\n */\nAnimeClient.on = (sel, event, target, listener) => {\n\tif (listener === undefined) {\n\t\tlistener = target;\n\t\tAnimeClient.$(sel).forEach((el) => {\n\t\t\taddEvent(el, event, listener);\n\t\t});\n\t} else {\n\t\tAnimeClient.$(sel).forEach((el) => {\n\t\t\tdelegateEvent(el, target, event, listener);\n\t\t});\n\t}\n};\n\n// -------------------------------------------------------------------------\n// ! Ajax\n// -------------------------------------------------------------------------\n\n/**\n * Url encoding for non-get requests\n *\n * @param data\n * @returns {string}\n * @private\n */\nfunction ajaxSerialize(data) {\n\tlet pairs = [];\n\n\tObject.keys(data).forEach((name) => {\n\t\tlet value = data[name].toString();\n\n\t\tname = encodeURIComponent(name);\n\t\tvalue = encodeURIComponent(value);\n\n\t\tpairs.push(`${name}=${value}`);\n\t});\n\n\treturn pairs.join('&');\n}\n\n/**\n * Make an ajax request\n *\n * Config:{\n * \tdata: // data to send with the request\n * \ttype: // http verb of the request, defaults to GET\n * \tsuccess: // success callback\n * \terror: // error callback\n * }\n *\n * @param {string} url - the url to request\n * @param {Object} config - the configuration object\n * @return {void}\n */\nAnimeClient.ajax = (url, config) => {\n\t// Set some sane defaults\n\tconst defaultConfig = {\n\t\tdata: {},\n\t\ttype: 'GET',\n\t\tdataType: '',\n\t\tsuccess: AnimeClient.noop,\n\t\tmimeType: 'application/x-www-form-urlencoded',\n\t\terror: AnimeClient.noop\n\t}\n\n\tconfig = {\n\t\t...defaultConfig,\n\t\t...config,\n\t}\n\n\tlet request = new XMLHttpRequest();\n\tlet method = String(config.type).toUpperCase();\n\n\tif (method === 'GET') {\n\t\turl += (url.match(/\\?/))\n\t\t\t? ajaxSerialize(config.data)\n\t\t\t: `?${ajaxSerialize(config.data)}`;\n\t}\n\n\trequest.open(method, url);\n\n\trequest.onreadystatechange = () => {\n\t\tif (request.readyState === 4) {\n\t\t\tlet responseText = '';\n\n\t\t\tif (request.responseType === 'json') {\n\t\t\t\tresponseText = JSON.parse(request.responseText);\n\t\t\t} else {\n\t\t\t\tresponseText = request.responseText;\n\t\t\t}\n\n\t\t\tif (request.status > 299) {\n\t\t\t\tconfig.error.call(null, request.status, responseText, request.response);\n\t\t\t} else {\n\t\t\t\tconfig.success.call(null, responseText, request.status);\n\t\t\t}\n\t\t}\n\t};\n\n\tif (config.dataType === 'json') {\n\t\tconfig.data = JSON.stringify(config.data);\n\t\tconfig.mimeType = 'application/json';\n\t} else {\n\t\tconfig.data = ajaxSerialize(config.data);\n\t}\n\n\trequest.setRequestHeader('Content-Type', config.mimeType);\n\n\tif (method === 'GET') {\n\t\trequest.send(null);\n\t} else {\n\t\trequest.send(config.data);\n\t}\n};\n\n/**\n * Do a get request\n *\n * @param {string} url\n * @param {object|function} data\n * @param {function} [callback]\n */\nAnimeClient.get = (url, data, callback = null) => {\n\tif (callback === null) {\n\t\tcallback = data;\n\t\tdata = {};\n\t}\n\n\treturn AnimeClient.ajax(url, {\n\t\tdata,\n\t\tsuccess: callback\n\t});\n};\n\n// -------------------------------------------------------------------------\n// Export\n// -------------------------------------------------------------------------\n\nexport default AnimeClient;","import _ from './anime-client.js';\n\n// ----------------------------------------------------------------------------\n// Event subscriptions\n// ----------------------------------------------------------------------------\n_.on('header', 'click', '.message', hide);\n_.on('form.js-delete', 'submit', confirmDelete);\n_.on('.js-clear-cache', 'click', clearAPICache);\n_.on('.vertical-tabs input', 'change', scrollToSection);\n_.on('.media-filter', 'input', filterMedia);\n\n// ----------------------------------------------------------------------------\n// Handler functions\n// ----------------------------------------------------------------------------\n\n/**\n * Hide the html element attached to the event\n *\n * @param event\n * @return void\n */\nfunction hide (event) {\n\t_.hide(event.target)\n}\n\n/**\n * Confirm deletion of an item\n *\n * @param event\n * @return void\n */\nfunction confirmDelete (event) {\n\tconst proceed = confirm('Are you ABSOLUTELY SURE you want to delete this item?');\n\n\tif (proceed === false) {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t}\n}\n\n/**\n * Clear the API cache, and show a message if the cache is cleared\n *\n * @return void\n */\nfunction clearAPICache () {\n\t_.get('/cache_purge', () => {\n\t\t_.showMessage('success', 'Successfully purged api cache');\n\t});\n}\n\n/**\n * Scroll to the accordion/vertical tab section just opened\n *\n * @param event\n * @return void\n */\nfunction scrollToSection (event) {\n\tconst el = event.currentTarget.parentElement;\n\tconst rect = el.getBoundingClientRect();\n\n\tconst top = rect.top + window.pageYOffset;\n\n\twindow.scrollTo({\n\t\ttop,\n\t\tbehavior: 'smooth',\n\t});\n}\n\n/**\n * Filter an anime or manga list\n *\n * @param event\n * @return void\n */\nfunction filterMedia (event) {\n\tconst rawFilter = event.target.value;\n\tconst filter = new RegExp(rawFilter, 'i');\n\n\t// console.log('Filtering items by: ', filter);\n\n\tif (rawFilter !== '') {\n\t\t// Filter the cover view\n\t\t_.$('article.media').forEach(article => {\n\t\t\tconst titleLink = _.$('.name a', article)[0];\n\t\t\tconst title = String(titleLink.textContent).trim();\n\t\t\tif ( ! filter.test(title)) {\n\t\t\t\t_.hide(article);\n\t\t\t} else {\n\t\t\t\t_.show(article);\n\t\t\t}\n\t\t});\n\n\t\t// Filter the list view\n\t\t_.$('table.media-wrap tbody tr').forEach(tr => {\n\t\t\tconst titleCell = _.$('td.align-left', tr)[0];\n\t\t\tconst titleLink = _.$('a', titleCell)[0];\n\t\t\tconst linkTitle = String(titleLink.textContent).trim();\n\t\t\tconst textTitle = String(titleCell.textContent).trim();\n\t\t\tif ( ! (filter.test(linkTitle) || filter.test(textTitle))) {\n\t\t\t\t_.hide(tr);\n\t\t\t} else {\n\t\t\t\t_.show(tr);\n\t\t\t}\n\t\t});\n\t} else {\n\t\t_.show('article.media');\n\t\t_.show('table.media-wrap tbody tr');\n\t}\n}\n\n// ----------------------------------------------------------------------------\n// Other event setup\n// ----------------------------------------------------------------------------\n(() => {\n\t// Var is intentional\n\tvar hidden = null;\n\tvar visibilityChange = null;\n\n\tif (typeof document.hidden !== \"undefined\") {\n\t\thidden = \"hidden\";\n\t\tvisibilityChange = \"visibilitychange\";\n\t} else if (typeof document.msHidden !== \"undefined\") {\n\t\thidden = \"msHidden\";\n\t\tvisibilityChange = \"msvisibilitychange\";\n\t} else if (typeof document.webkitHidden !== \"undefined\") {\n\t\thidden = \"webkitHidden\";\n\t\tvisibilityChange = \"webkitvisibilitychange\";\n\t}\n\n\tfunction handleVisibilityChange() {\n\t\t// Check the user's session to see if they are currently logged-in\n\t\t// when the page becomes visible\n\t\tif ( ! document[hidden]) {\n\t\t\t_.get('/heartbeat', (beat) => {\n\t\t\t\tconst status = JSON.parse(beat)\n\n\t\t\t\t// If the session is expired, immediately reload so that\n\t\t\t\t// you can't attempt to do an action that requires authentication\n\t\t\t\tif (status.hasAuth !== true) {\n\t\t\t\t\tlocation.reload();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tif (hidden === null) {\n\t\tconsole.info('Page visibility API not supported, JS session check will not work');\n\t} else {\n\t\tdocument.addEventListener(visibilityChange, handleVisibilityChange, false);\n\t}\n})();\n","import './events.js';\n\nif ('serviceWorker' in navigator) {\n\tnavigator.serviceWorker.register('/sw.js').then(reg => {\n\t\tconsole.log('Service worker registered', reg.scope);\n\t}).catch(error => {\n\t\tconsole.error('Failed to register service worker', error);\n\t});\n}\n\n","import _ from './anime-client.js';\n\n// Click on hidden MAL checkbox so\n// that MAL id is passed\n_.on('main', 'change', '.big-check', (e) => {\n\tconst id = e.target.id;\n\tdocument.getElementById(`mal_${id}`).checked = true;\n});\n\nexport function renderAnimeSearchResults (data) {\n\tconst results = [];\n\n\tdata.forEach(x => {\n\t\tconst item = x.attributes;\n\t\tconst titles = item.titles.join('<br />');\n\n\t\tresults.push(`\n\t\t\t<article class=\"media search\">\n\t\t\t\t<div class=\"name\">\n\t\t\t\t\t<input type=\"radio\" class=\"mal-check\" id=\"mal_${item.slug}\" name=\"mal_id\" value=\"${x.mal_id}\" />\n\t\t\t\t\t<input type=\"radio\" class=\"big-check\" id=\"${item.slug}\" name=\"id\" value=\"${x.id}\" />\n\t\t\t\t\t<label for=\"${item.slug}\">\n\t\t\t\t\t\t<picture width=\"220\">\n\t\t\t\t\t\t\t<source srcset=\"/public/images/anime/${x.id}.webp\" type=\"image/webp\" />\n\t\t\t\t\t\t\t<source srcset=\"/public/images/anime/${x.id}.jpg\" type=\"image/jpeg\" />\n\t\t\t\t\t\t\t<img src=\"/public/images/anime/${x.id}.jpg\" alt=\"\" width=\"220\" />\n\t\t\t\t\t\t</picture>\n\t\t\t\t\t\t<span class=\"name\">\n\t\t\t\t\t\t\t${item.canonicalTitle}<br />\n\t\t\t\t\t\t\t<small>${titles}</small>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</label>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<div class=\"row\">\n\t\t\t\t\t\t<span class=\"edit\">\n\t\t\t\t\t\t\t<a class=\"bracketed\" href=\"/anime/details/${item.slug}\">Info Page</a>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</article>\n\t\t`);\n\t});\n\n\treturn results.join('');\n}\n\nexport function renderMangaSearchResults (data) {\n\tconst results = [];\n\n\tdata.forEach(x => {\n\t\tconst item = x.attributes;\n\t\tconst titles = item.titles.join('<br />');\n\n\t\tresults.push(`\n\t\t\t<article class=\"media search\">\n\t\t\t\t<div class=\"name\">\n\t\t\t\t\t<input type=\"radio\" id=\"mal_${item.slug}\" name=\"mal_id\" value=\"${x.mal_id}\" />\n\t\t\t\t\t<input type=\"radio\" class=\"big-check\" id=\"${item.slug}\" name=\"id\" value=\"${x.id}\" />\n\t\t\t\t\t<label for=\"${item.slug}\">\n\t\t\t\t\t\t<picture width=\"220\">\n\t\t\t\t\t\t\t<source srcset=\"/public/images/manga/${x.id}.webp\" type=\"image/webp\" />\n\t\t\t\t\t\t\t<source srcset=\"/public/images/manga/${x.id}.jpg\" type=\"image/jpeg\" />\n\t\t\t\t\t\t\t<img src=\"/public/images/manga/${x.id}.jpg\" alt=\"\" width=\"220\" />\n\t\t\t\t\t\t</picture>\n\t\t\t\t\t\t<span class=\"name\">\n\t\t\t\t\t\t\t${item.canonicalTitle}<br />\n\t\t\t\t\t\t\t<small>${titles}</small>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</label>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"table\">\n\t\t\t\t\t<div class=\"row\">\n\t\t\t\t\t\t<span class=\"edit\">\n\t\t\t\t\t\t\t<a class=\"bracketed\" href=\"/manga/details/${item.slug}\">Info Page</a>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</article>\n\t\t`);\n\t});\n\n\treturn results.join('');\n}","import _ from './anime-client.js'\nimport { renderAnimeSearchResults } from './template-helpers.js'\n\nconst search = (query) => {\n\t// Show the loader\n\t_.show('.cssload-loader');\n\n\t// Do the api search\n\t_.get(_.url('/anime-collection/search'), { query }, (searchResults, status) => {\n\t\tsearchResults = JSON.parse(searchResults);\n\n\t\t// Hide the loader\n\t\t_.hide('.cssload-loader');\n\n\t\t// Show the results\n\t\t_.$('#series-list')[ 0 ].innerHTML = renderAnimeSearchResults(searchResults.data);\n\t});\n};\n\nif (_.hasElement('.anime #search')) {\n\t_.on('#search', 'input', _.throttle(250, (e) => {\n\t\tconst query = encodeURIComponent(e.target.value);\n\t\tif (query === '') {\n\t\t\treturn;\n\t\t}\n\n\t\tsearch(query);\n\t}));\n}\n\n// Action to increment episode count\n_.on('body.anime.list', 'click', '.plus-one', (e) => {\n\tlet parentSel = _.closestParent(e.target, 'article');\n\tlet watchedCount = parseInt(_.$('.completed_number', parentSel)[ 0 ].textContent, 10) || 0;\n\tlet totalCount = parseInt(_.$('.total_number', parentSel)[ 0 ].textContent, 10);\n\tlet title = _.$('.name a', parentSel)[ 0 ].textContent;\n\n\t// Setup the update data\n\tlet data = {\n\t\tid: parentSel.dataset.kitsuId,\n\t\tmal_id: parentSel.dataset.malId,\n\t\tdata: {\n\t\t\tprogress: watchedCount + 1\n\t\t}\n\t};\n\n\t// If the episode count is 0, and incremented,\n\t// change status to currently watching\n\tif (isNaN(watchedCount) || watchedCount === 0) {\n\t\tdata.data.status = 'current';\n\t}\n\n\t// If you increment at the last episode, mark as completed\n\tif ((!isNaN(watchedCount)) && (watchedCount + 1) === totalCount) {\n\t\tdata.data.status = 'completed';\n\t}\n\n\t_.show('#loading-shadow');\n\n\t// okay, lets actually make some changes!\n\t_.ajax(_.url('/anime/increment'), {\n\t\tdata,\n\t\tdataType: 'json',\n\t\ttype: 'POST',\n\t\tsuccess: (res) => {\n\t\t\tconst resData = JSON.parse(res);\n\n\t\t\tif (resData.errors) {\n\t\t\t\t_.hide('#loading-shadow');\n\t\t\t\t_.showMessage('error', `Failed to update ${title}. `);\n\t\t\t\t_.scrollToTop();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (resData.data.status === 'COMPLETED') {\n\t\t\t\t_.hide(parentSel);\n\t\t\t}\n\n\t\t\t_.hide('#loading-shadow');\n\n\t\t\t_.showMessage('success', `Successfully updated ${title}`);\n\t\t\t_.$('.completed_number', parentSel)[ 0 ].textContent = ++watchedCount;\n\t\t\t_.scrollToTop();\n\t\t},\n\t\terror: () => {\n\t\t\t_.hide('#loading-shadow');\n\t\t\t_.showMessage('error', `Failed to update ${title}. `);\n\t\t\t_.scrollToTop();\n\t\t}\n\t});\n});","import _ from './anime-client.js'\nimport { renderMangaSearchResults } from './template-helpers.js'\n\nconst search = (query) => {\n\t_.show('.cssload-loader');\n\t_.get(_.url('/manga/search'), { query }, (searchResults, status) => {\n\t\tsearchResults = JSON.parse(searchResults);\n\t\t_.hide('.cssload-loader');\n\t\t_.$('#series-list')[ 0 ].innerHTML = renderMangaSearchResults(searchResults.data);\n\t});\n};\n\nif (_.hasElement('.manga #search')) {\n\t_.on('#search', 'input', _.throttle(250, (e) => {\n\t\tlet query = encodeURIComponent(e.target.value);\n\t\tif (query === '') {\n\t\t\treturn;\n\t\t}\n\n\t\tsearch(query);\n\t}));\n}\n\n/**\n * Javascript for editing manga, if logged in\n */\n_.on('.manga.list', 'click', '.edit-buttons button', (e) => {\n\tlet thisSel = e.target;\n\tlet parentSel = _.closestParent(e.target, 'article');\n\tlet type = thisSel.classList.contains('plus-one-chapter') ? 'chapter' : 'volume';\n\tlet completed = parseInt(_.$(`.${type}s_read`, parentSel)[ 0 ].textContent, 10) || 0;\n\tlet total = parseInt(_.$(`.${type}_count`, parentSel)[ 0 ].textContent, 10);\n\tlet mangaName = _.$('.name', parentSel)[ 0 ].textContent;\n\n\tif (isNaN(completed)) {\n\t\tcompleted = 0;\n\t}\n\n\t// Setup the update data\n\tlet data = {\n\t\tid: parentSel.dataset.kitsuId,\n\t\tmal_id: parentSel.dataset.malId,\n\t\tdata: {\n\t\t\tprogress: completed\n\t\t}\n\t};\n\n\t// If the episode count is 0, and incremented,\n\t// change status to currently reading\n\tif (isNaN(completed) || completed === 0) {\n\t\tdata.data.status = 'current';\n\t}\n\n\t// If you increment at the last chapter, mark as completed\n\tif ((!isNaN(completed)) && (completed + 1) === total) {\n\t\tdata.data.status = 'completed';\n\t}\n\n\t// Update the total count\n\tdata.data.progress = ++completed;\n\n\t_.show('#loading-shadow');\n\n\t_.ajax(_.url('/manga/increment'), {\n\t\tdata,\n\t\tdataType: 'json',\n\t\ttype: 'POST',\n\t\tmimeType: 'application/json',\n\t\tsuccess: () => {\n\t\t\tif (data.data.status === 'completed') {\n\t\t\t\t_.hide(parentSel);\n\t\t\t}\n\n\t\t\t_.hide('#loading-shadow');\n\n\t\t\t_.$(`.${type}s_read`, parentSel)[ 0 ].textContent = completed;\n\t\t\t_.showMessage('success', `Successfully updated ${mangaName}`);\n\t\t\t_.scrollToTop();\n\t\t},\n\t\terror: () => {\n\t\t\t_.hide('#loading-shadow');\n\t\t\t_.showMessage('error', `Failed to update ${mangaName}`);\n\t\t\t_.scrollToTop();\n\t\t}\n\t});\n});"],"names":["selector","m","querySelectorAll","elm","document","ownerDocument","i","matches","length","item","noop","$","context","nodeType","elements","match","push","getElementById","split","slice","apply","hasElement","AnimeClient","scrollToTop","el","scrollIntoView","hide","sel","Array","isArray","forEach","setAttribute","show","removeAttribute","showMessage","type","message","template","undefined","remove","insertAdjacentHTML","closestParent","current","parentSelector","Element","prototype","closest","documentElement","parentElement","url","path","uri","location","host","charAt","throttle","interval","fn","scope","wait","args","setTimeout","addEvent","event","listener","evt","addEventListener","delegateEvent","target","e","element","call","stopPropagation","on","AnimeClient.on","ajaxSerialize","data","pairs","Object","keys","name","value","toString","encodeURIComponent","join","ajax","AnimeClient.ajax","config","dataType","success","mimeType","error","defaultConfig","request","XMLHttpRequest","method","String","toUpperCase","open","onreadystatechange","request.onreadystatechange","readyState","responseText","responseType","JSON","parse","status","response","stringify","setRequestHeader","send","get","AnimeClient.get","callback","confirmDelete","clearAPICache","scrollToSection","filterMedia","_","proceed","preventDefault","window","scrollTo","top","behavior","rawFilter","article","filter","test","title","tr","titleCell","linkTitle","textTitle","hidden","visibilityChange","msHidden","webkitHidden","handleVisibilityChange","beat","hasAuth","reload","console","info","navigator","serviceWorker","register","then","reg","log","catch","id","checked","renderAnimeSearchResults","x","results","slug","mal_id","canonicalTitle","titles","renderMangaSearchResults","query","searchResults","search","parentSel","watchedCount","parseInt","totalCount","dataset","kitsuId","malId","progress","isNaN","res","resData","errors","thisSel","classList","contains","completed","total","mangaName"],"mappings":"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"}