FA Webcomic Auto Loader

Gives you the option to load all the subsequent comic pages on a FurAffinity comic page automatically. Even for pages without given Links

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name        FA Webcomic Auto Loader
// @namespace   Violentmonkey Scripts
// @match       *://*.furaffinity.net/*
// @require     https://update.greasyfork.org/scripts/525666/1549449/Furaffinity-Prototype-Extensions.js
// @require     https://update.greasyfork.org/scripts/483952/1672922/Furaffinity-Request-Helper.js
// @require     https://update.greasyfork.org/scripts/485827/1549457/Furaffinity-Match-List.js
// @require     https://update.greasyfork.org/scripts/485153/1549461/Furaffinity-Loading-Animations.js
// @require     https://update.greasyfork.org/scripts/475041/1617223/Furaffinity-Custom-Settings.js
// @grant       GM_info
// @version     2.2.8
// @author      Midori Dragon
// @description Gives you the option to load all the subsequent comic pages on a FurAffinity comic page automatically. Even for pages without given Links
// @icon        https://www.furaffinity.net/themes/beta/img/banners/fa_logo.png
// @license     MIT
// @homepageURL https://greasyfork.org/scripts/457759-fa-webcomic-auto-loader
// @supportURL  https://greasyfork.org/scripts/457759-fa-webcomic-auto-loader/feedback
// ==/UserScript==
// jshint esversion: 8
(() => {
    "use strict";
    var __webpack_modules__ = {
        56: (module, __unused_webpack_exports, __webpack_require__) => {
            module.exports = function setAttributesWithoutAttributes(styleElement) {
                var nonce = true ? __webpack_require__.nc : 0;
                if (nonce) {
                    styleElement.setAttribute("nonce", nonce);
                }
            };
        },
        72: module => {
            var stylesInDOM = [];
            function getIndexByIdentifier(identifier) {
                var result = -1;
                for (var i = 0; i < stylesInDOM.length; i++) {
                    if (stylesInDOM[i].identifier === identifier) {
                        result = i;
                        break;
                    }
                }
                return result;
            }
            function modulesToDom(list, options) {
                var idCountMap = {};
                var identifiers = [];
                for (var i = 0; i < list.length; i++) {
                    var item = list[i];
                    var id = options.base ? item[0] + options.base : item[0];
                    var count = idCountMap[id] || 0;
                    var identifier = "".concat(id, " ").concat(count);
                    idCountMap[id] = count + 1;
                    var indexByIdentifier = getIndexByIdentifier(identifier);
                    var obj = {
                        css: item[1],
                        media: item[2],
                        sourceMap: item[3],
                        supports: item[4],
                        layer: item[5]
                    };
                    if (-1 !== indexByIdentifier) {
                        stylesInDOM[indexByIdentifier].references++;
                        stylesInDOM[indexByIdentifier].updater(obj);
                    } else {
                        var updater = addElementStyle(obj, options);
                        options.byIndex = i;
                        stylesInDOM.splice(i, 0, {
                            identifier,
                            updater,
                            references: 1
                        });
                    }
                    identifiers.push(identifier);
                }
                return identifiers;
            }
            function addElementStyle(obj, options) {
                var api = options.domAPI(options);
                api.update(obj);
                return function updater(newObj) {
                    if (newObj) {
                        if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {
                            return;
                        }
                        api.update(obj = newObj);
                    } else {
                        api.remove();
                    }
                };
            }
            module.exports = function(list, options) {
                var lastIdentifiers = modulesToDom(list = list || [], options = options || {});
                return function update(newList) {
                    newList = newList || [];
                    for (var i = 0; i < lastIdentifiers.length; i++) {
                        var index = getIndexByIdentifier(lastIdentifiers[i]);
                        stylesInDOM[index].references--;
                    }
                    var newLastIdentifiers = modulesToDom(newList, options);
                    for (var _i = 0; _i < lastIdentifiers.length; _i++) {
                        var _index = getIndexByIdentifier(lastIdentifiers[_i]);
                        if (0 === stylesInDOM[_index].references) {
                            stylesInDOM[_index].updater();
                            stylesInDOM.splice(_index, 1);
                        }
                    }
                    lastIdentifiers = newLastIdentifiers;
                };
            };
        },
        113: module => {
            module.exports = function styleTagTransform(css, styleElement) {
                if (styleElement.styleSheet) {
                    styleElement.styleSheet.cssText = css;
                } else {
                    for (;styleElement.firstChild; ) {
                        styleElement.removeChild(styleElement.firstChild);
                    }
                    styleElement.appendChild(document.createTextNode(css));
                }
            };
        },
        314: module => {
            module.exports = function(cssWithMappingToString) {
                var list = [];
                list.toString = function toString() {
                    return this.map(function(item) {
                        var content = "";
                        var needLayer = "undefined" !== typeof item[5];
                        if (item[4]) {
                            content += "@supports (".concat(item[4], ") {");
                        }
                        if (item[2]) {
                            content += "@media ".concat(item[2], " {");
                        }
                        if (needLayer) {
                            content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {");
                        }
                        content += cssWithMappingToString(item);
                        if (needLayer) {
                            content += "}";
                        }
                        if (item[2]) {
                            content += "}";
                        }
                        if (item[4]) {
                            content += "}";
                        }
                        return content;
                    }).join("");
                };
                list.i = function i(modules, media, dedupe, supports, layer) {
                    if ("string" === typeof modules) {
                        modules = [ [ null, modules, void 0 ] ];
                    }
                    var alreadyImportedModules = {};
                    if (dedupe) {
                        for (var k = 0; k < this.length; k++) {
                            var id = this[k][0];
                            if (null != id) {
                                alreadyImportedModules[id] = true;
                            }
                        }
                    }
                    for (var _k = 0; _k < modules.length; _k++) {
                        var item = [].concat(modules[_k]);
                        if (!dedupe || !alreadyImportedModules[item[0]]) {
                            if ("undefined" !== typeof layer) {
                                if ("undefined" === typeof item[5]) {
                                    item[5] = layer;
                                } else {
                                    item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}");
                                    item[5] = layer;
                                }
                            }
                            if (media) {
                                if (!item[2]) {
                                    item[2] = media;
                                } else {
                                    item[1] = "@media ".concat(item[2], " {").concat(item[1], "}");
                                    item[2] = media;
                                }
                            }
                            if (supports) {
                                if (!item[4]) {
                                    item[4] = "".concat(supports);
                                } else {
                                    item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}");
                                    item[4] = supports;
                                }
                            }
                            list.push(item);
                        }
                    }
                };
                return list;
            };
        },
        540: module => {
            module.exports = function insertStyleElement(options) {
                var element = document.createElement("style");
                options.setAttributes(element, options.attributes);
                options.insert(element, options.options);
                return element;
            };
        },
        601: module => {
            module.exports = function(i) {
                return i[1];
            };
        },
        659: module => {
            var memo = {};
            module.exports = function insertBySelector(insert, style) {
                var target = function getTarget(target) {
                    if ("undefined" === typeof memo[target]) {
                        var styleTarget = document.querySelector(target);
                        if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {
                            try {
                                styleTarget = styleTarget.contentDocument.head;
                            } catch (e) {
                                styleTarget = null;
                            }
                        }
                        memo[target] = styleTarget;
                    }
                    return memo[target];
                }(insert);
                if (!target) {
                    throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");
                }
                target.appendChild(style);
            };
        },
        782: (module, __webpack_exports__, __webpack_require__) => {
            __webpack_require__.d(__webpack_exports__, {
                A: () => __WEBPACK_DEFAULT_EXPORT__
            });
            var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(601);
            var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = __webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
            var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);
            var ___CSS_LOADER_EXPORT___ = __webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__)()(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default());
            ___CSS_LOADER_EXPORT___.push([ module.id, ".wal-lightbox-nav {\n    position: fixed;\n    left: 50%;\n    bottom: 10px;\n    transform: translateX(-50%);\n    opacity: 0.7;\n    transition: opacity 0.2s linear;\n    z-index: 100000000;\n}\n\n.wal-lightbox-nav:hover {\n    opacity: 1;\n}\n\n.wal-no-select {\n    user-select: none;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n}", "" ]);
            const __WEBPACK_DEFAULT_EXPORT__ = ___CSS_LOADER_EXPORT___;
        },
        825: module => {
            module.exports = function domAPI(options) {
                if ("undefined" === typeof document) {
                    return {
                        update: function update() {},
                        remove: function remove() {}
                    };
                }
                var styleElement = options.insertStyleElement(options);
                return {
                    update: function update(obj) {
                        !function apply(styleElement, options, obj) {
                            var css = "";
                            if (obj.supports) {
                                css += "@supports (".concat(obj.supports, ") {");
                            }
                            if (obj.media) {
                                css += "@media ".concat(obj.media, " {");
                            }
                            var needLayer = "undefined" !== typeof obj.layer;
                            if (needLayer) {
                                css += "@layer".concat(obj.layer.length > 0 ? " ".concat(obj.layer) : "", " {");
                            }
                            css += obj.css;
                            if (needLayer) {
                                css += "}";
                            }
                            if (obj.media) {
                                css += "}";
                            }
                            if (obj.supports) {
                                css += "}";
                            }
                            var sourceMap = obj.sourceMap;
                            if (sourceMap && "undefined" !== typeof btoa) {
                                css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */");
                            }
                            options.styleTagTransform(css, styleElement, options.options);
                        }(styleElement, options, obj);
                    },
                    remove: function remove() {
                        !function removeStyleElement(styleElement) {
                            if (null === styleElement.parentNode) {
                                return false;
                            }
                            styleElement.parentNode.removeChild(styleElement);
                        }(styleElement);
                    }
                };
            };
        }
    };
    var __webpack_module_cache__ = {};
    function __webpack_require__(moduleId) {
        var cachedModule = __webpack_module_cache__[moduleId];
        if (void 0 !== cachedModule) {
            return cachedModule.exports;
        }
        var module = __webpack_module_cache__[moduleId] = {
            id: moduleId,
            exports: {}
        };
        __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
        return module.exports;
    }
    __webpack_require__.n = module => {
        var getter = module && module.__esModule ? () => module.default : () => module;
        __webpack_require__.d(getter, {
            a: getter
        });
        return getter;
    };
    __webpack_require__.d = (exports, definition) => {
        for (var key in definition) {
            if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
                Object.defineProperty(exports, key, {
                    enumerable: true,
                    get: definition[key]
                });
            }
        }
    };
    __webpack_require__.o = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);
    __webpack_require__.nc = void 0;
    __webpack_require__.d({}, {
        KS: () => backwardSearchSetting,
        hQ: () => customLightboxShowNavSetting,
        _d: () => loadingSpinSpeedSetting,
        WE: () => overwriteNavButtonsSetting,
        uL: () => requestHelper,
        vD: () => scriptName,
        iT: () => useCustomLightboxSetting
    });
    var LogLevel;
    !function(LogLevel) {
        LogLevel[LogLevel.Error = 1] = "Error";
        LogLevel[LogLevel.Warning = 2] = "Warning";
        LogLevel[LogLevel.Info = 3] = "Info";
    }(LogLevel || (LogLevel = {}));
    class Logger {
        static log(logLevel = LogLevel.Warning, ...args) {
            if (null == window.__FF_GLOBAL_LOG_LEVEL__) {
                window.__FF_GLOBAL_LOG_LEVEL__ = LogLevel.Error;
            }
            if (!(logLevel > window.__FF_GLOBAL_LOG_LEVEL__)) {
                switch (logLevel) {
                  case LogLevel.Error:
                    console.error(...args);
                    break;

                  case LogLevel.Warning:
                    console.warn(...args);
                    break;

                  case LogLevel.Info:
                    console.log(...args);
                }
            }
        }
        static setLogLevel(logLevel) {
            window.__FF_GLOBAL_LOG_LEVEL__ = logLevel;
        }
        static logError(...args) {
            Logger.log(LogLevel.Error, ...args);
        }
        static logWarning(...args) {
            Logger.log(LogLevel.Warning, ...args);
        }
        static logInfo(...args) {
            Logger.log(LogLevel.Info, ...args);
        }
    }
    function checkTags(element) {
        var _a;
        if (!("1" === document.body.getAttribute("data-user-logged-in"))) {
            Logger.logWarning("User is not logged in, skipping tag check");
            setBlockedState(element, false);
            return;
        }
        const tagsHideMissingTags = "1" === document.body.getAttribute("data-tag-blocklist-hide-tagless");
        const tags = null === (_a = element.getAttribute("data-tags")) || void 0 === _a ? void 0 : _a.trim().split(/\s+/);
        let blockReason = "";
        if (null != tags && tags.length > 0 && "" !== tags[0]) {
            const blockedTags = function getBannedTags(tags) {
                var _a;
                const blockedTags = null !== (_a = document.body.getAttribute("data-tag-blocklist")) && void 0 !== _a ? _a : "";
                const tagsBlocklist = Array.from(blockedTags.split(" "));
                let bTags = [];
                if (null == tags || 0 === tags.length) {
                    return [];
                }
                for (const tag of tags) {
                    for (const blockedTag of tagsBlocklist) {
                        if (tag === blockedTag) {
                            bTags.push(blockedTag);
                        }
                    }
                }
                return [ ...new Set(bTags) ];
            }(tags);
            if (blockedTags.length <= 0) {
                setBlockedState(element, false);
            } else {
                setBlockedState(element, true);
                Logger.logInfo(`${element.id} blocked tags: ${blockedTags.join(", ")}`);
                blockReason = "Blocked tags:\n";
                for (const tag of blockedTags) {
                    blockReason += "• " + tag + "\n";
                }
            }
        } else {
            setBlockedState(element, tagsHideMissingTags);
            if (tagsHideMissingTags) {
                blockReason = "Content is missing tags.";
            }
        }
        if ("" !== blockReason && "submissionImg" !== element.id) {
            element.setAttribute("title", blockReason);
        }
    }
    function setBlockedState(element, isBlocked) {
        element.classList[isBlocked ? "add" : "remove"]("blocked-content");
    }
    function getDocViewSid(doc) {
        let ogUrl = doc.querySelector('meta[property="og:url"]').getAttribute("content");
        if (null == ogUrl) {
            return -1;
        }
        ogUrl = ogUrl.trimEnd("/");
        return parseInt(ogUrl.split("/").pop());
    }
    const string = class {
        static isNullOrWhitespace(str) {
            return null == str || "" === str.trim();
        }
        static isNullOrEmpty(str) {
            return null == str || "" === str;
        }
    };
    class ComicNavigation {
        constructor(prevId, firstId, nextId) {
            this.prevId = -1;
            this.firstId = -1;
            this.nextId = -1;
            this.prevId = prevId;
            this.firstId = firstId;
            this.nextId = nextId;
        }
        static fromElement(elem) {
            var _a;
            const comicNav = new ComicNavigation(-1, -1, -1);
            const navElems = elem.querySelectorAll('a[href*="view"]');
            if (null == navElems || 0 === navElems.length) {
                return null;
            }
            for (const navElem of Array.from(navElems)) {
                const navText = null === (_a = null === navElem || void 0 === navElem ? void 0 : navElem.textContent) || void 0 === _a ? void 0 : _a.toLowerCase();
                if (string.isNullOrWhitespace(navText)) {
                    continue;
                }
                let idText = navElem.getAttribute("href");
                if (string.isNullOrWhitespace(idText)) {
                    continue;
                }
                const i = idText.search(/[?#]/);
                idText = -1 === i ? idText : idText.slice(0, i);
                idText = idText.trimEnd("/");
                idText = idText.split("/").pop();
                if (navText.includes("prev")) {
                    comicNav.prevId = parseInt(idText);
                } else if (navText.includes("next")) {
                    comicNav.nextId = parseInt(idText);
                } else if (navText.includes("start") || navText.includes("first")) {
                    comicNav.firstId = parseInt(idText);
                }
            }
            return comicNav;
        }
    }
    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) {
                result.done ? resolve(result.value) : function adopt(value) {
                    return value instanceof P ? value : new P(function(resolve) {
                        resolve(value);
                    });
                }(result.value).then(fulfilled, rejected);
            }
            step((generator = generator.apply(thisArg, _arguments || [])).next());
        });
    };
    class AutoLoaderSearch {
        constructor(rootImg, rootSid, comicNav) {
            this.currImgIndex = 1;
            this.currSid = -1;
            this.rootImg = rootImg;
            this.rootSid = rootSid;
            this.currComicNav = comicNav;
        }
        search() {
            return __awaiter(this, void 0, void 0, function*() {
                var _a;
                const loadedImgs = {};
                loadedImgs[this.rootSid] = this.rootImg;
                Logger.logInfo(`${scriptName}: starting search...`);
                do {
                    try {
                        if (null == this.currComicNav) {
                            break;
                        }
                        const img = yield this.getPage(this.currComicNav.nextId);
                        if (null == img) {
                            break;
                        }
                        if (this.currSid in loadedImgs) {
                            break;
                        }
                        Logger.logInfo(`${scriptName}: found image with sid '${this.currSid}'`);
                        loadedImgs[this.currSid] = img;
                        this.currImgIndex++;
                    } catch (error) {
                        Logger.logError(error);
                        break;
                    }
                } while (-1 !== (null === (_a = this.currComicNav) || void 0 === _a ? void 0 : _a.nextId));
                Logger.logInfo(`${scriptName}: finished search. Found ${Object.keys(loadedImgs).length} images.`);
                return loadedImgs;
            });
        }
        getPage(sid) {
            return __awaiter(this, void 0, void 0, function*() {
                var _a;
                if (sid <= 0) {
                    return;
                }
                const page = yield requestHelper.SubmissionRequests.getSubmissionPage(sid);
                const img = page.getElementById("submissionImg");
                img.setAttribute("wal-index", this.currImgIndex.toString());
                img.setAttribute("wal-sid", sid.toString());
                this.currSid = getDocViewSid(page);
                const descriptionElem = null === (_a = page.getElementById("columnpage")) || void 0 === _a ? void 0 : _a.querySelector('div[class*="submission-description"]');
                if (null != descriptionElem) {
                    this.currComicNav = ComicNavigation.fromElement(descriptionElem);
                } else {
                    this.currComicNav = null;
                }
                return img;
            });
        }
    }
    function isSubmissionPageInGallery(doc) {
        const columnPage = doc.getElementById("columnpage");
        const favNav = null === columnPage || void 0 === columnPage ? void 0 : columnPage.querySelector('div[class*="favorite-nav"]');
        const mainGalleryButton = null === favNav || void 0 === favNav ? void 0 : favNav.querySelector('a[title*="submissions"]');
        if (null != mainGalleryButton && mainGalleryButton.href.includes("gallery")) {
            return true;
        } else {
            return false;
        }
    }
    function isSubmissionPageInScraps(doc) {
        const columnPage = doc.getElementById("columnpage");
        const favNav = null === columnPage || void 0 === columnPage ? void 0 : columnPage.querySelector('div[class*="favorite-nav"]');
        const mainGalleryButton = null === favNav || void 0 === favNav ? void 0 : favNav.querySelector('a[title*="submissions"]');
        if (null != mainGalleryButton && mainGalleryButton.href.includes("scraps")) {
            return true;
        } else {
            return false;
        }
    }
    function getCurrGalleryFolder() {
        const url = window.location.toString().toLowerCase();
        if (!url.includes("gallery") || !url.includes("folder")) {
            return;
        }
        const parts = url.split("/");
        const folderIdIndex = parts.indexOf("folder") + 1;
        if (folderIdIndex >= parts.length) {
            return;
        }
        const folderId = parts[folderIdIndex];
        return parseInt(folderId);
    }
    function generalizeString(inputString, textToNumbers, removeCommonPhrases, removeSpecialChars, removeNumbers, removeSpaces, removeRoman) {
        let outputString = inputString.toLowerCase();
        if (removeCommonPhrases) {
            const commonPhrases = [ "page", "part", "book", "episode" ];
            outputString = outputString.replace(new RegExp(`(?:^|\\s)(${commonPhrases.join("|")})(?:\\s|$)`, "g"), "");
        }
        if (removeRoman) {
            const roman = [ "i", "ii", "iii", "iv", "v", "vi", "vii", "viii", "ix", "x", "xi", "xii", "xiii", "xiv", "xv", "xvi", "xvii", "xviii", "xix", "xx" ];
            outputString = outputString.replace(new RegExp(`(?:^|[^a-zA-Z])(${roman.join("|")})(?:[^a-zA-Z]|$)`, "g"), "");
        }
        if (textToNumbers) {
            const numbers = {
                zero: 0,
                one: 1,
                two: 2,
                three: 3,
                four: 4,
                five: 5,
                six: 6,
                seven: 7,
                eight: 8,
                nine: 9,
                ten: 10,
                eleven: 11,
                twelve: 12,
                thirteen: 13,
                fourteen: 14,
                fifteen: 15,
                sixteen: 16,
                seventeen: 17,
                eighteen: 18,
                nineteen: 19,
                twenty: 20,
                thirty: 30,
                forty: 40,
                fifty: 50,
                sixty: 60,
                seventy: 70,
                eighty: 80,
                ninety: 90,
                hundred: 100
            };
            outputString = outputString.replace(new RegExp(Object.keys(numbers).join("|"), "gi"), match => numbers[match.toLowerCase()].toString());
        }
        if (removeSpecialChars) {
            outputString = outputString.replace(/[^a-zA-Z0-9 ]/g, "");
        }
        if (removeNumbers) {
            outputString = outputString.replace(/[^a-zA-Z ]/g, "");
        }
        if (removeSpaces) {
            outputString = outputString.replace(/\s/g, "");
        }
        return outputString;
    }
    function figureTitleIsGenerallyEqual(figure, title) {
        const figCaption = figure.querySelector("figcaption");
        const titleElem = null === figCaption || void 0 === figCaption ? void 0 : figCaption.querySelector('a[href*="view"]');
        if (null != titleElem) {
            const figTitleGeneralized = generalizeString(titleElem.title.toLowerCase(), true, true, true, true, true, true);
            const currTitleGeneralized = generalizeString(title, true, true, true, true, true, true);
            if (string.isNullOrWhitespace(figTitleGeneralized) || string.isNullOrWhitespace(currTitleGeneralized)) {
                return false;
            } else {
                return figTitleGeneralized.includes(currTitleGeneralized) || currTitleGeneralized.includes(figTitleGeneralized);
            }
        }
        return false;
    }
    function getDocUsername(doc) {
        const columnPage = doc.getElementById("columnpage");
        const submissionIdContainer = null === columnPage || void 0 === columnPage ? void 0 : columnPage.querySelector('div[class*="submission-id-container"]');
        const usernameContainer = null === submissionIdContainer || void 0 === submissionIdContainer ? void 0 : submissionIdContainer.querySelector('a[href*="user"]');
        if (null != usernameContainer) {
            let username = usernameContainer.href;
            username = username.trimEnd("/");
            username = username.split("/").pop();
            return username;
        }
    }
    var BackwardSearch_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) {
                result.done ? resolve(result.value) : function adopt(value) {
                    return value instanceof P ? value : new P(function(resolve) {
                        resolve(value);
                    });
                }(result.value).then(fulfilled, rejected);
            }
            step((generator = generator.apply(thisArg, _arguments || [])).next());
        });
    };
    class BackwardSearch {
        constructor(currSid, amount, currSubmissionPageNo) {
            this.sidToIgnore = [];
            this._currSid = currSid;
            this._amount = amount;
            this.currSubmissionPageNo = currSubmissionPageNo;
            this.sidToIgnore.push(currSid);
        }
        search() {
            return BackwardSearch_awaiter(this, void 0, void 0, function*() {
                var _a, _b;
                const isInGallery = isSubmissionPageInGallery(document);
                const isInScraps = isSubmissionPageInScraps(document);
                if (!isInGallery && !isInScraps) {
                    return {};
                }
                const columnpage = document.getElementById("columnpage");
                const submissionIdContainer = null === columnpage || void 0 === columnpage ? void 0 : columnpage.querySelector('div[class*="submission-id-container"]');
                const submissionTitle = null === submissionIdContainer || void 0 === submissionIdContainer ? void 0 : submissionIdContainer.querySelector('div[class*="submission-title"]');
                const currTitle = null === (_b = null === (_a = null === submissionTitle || void 0 === submissionTitle ? void 0 : submissionTitle.querySelector("h2")) || void 0 === _a ? void 0 : _a.querySelector("p")) || void 0 === _b ? void 0 : _b.textContent;
                if (string.isNullOrWhitespace(currTitle)) {
                    return {};
                }
                const currUsername = getDocUsername(document);
                const folderId = getCurrGalleryFolder();
                Logger.logInfo(`${scriptName}: finding submission page...`);
                if (null == this.currSubmissionPageNo || this.currSubmissionPageNo < 1) {
                    if (isInGallery) {
                        this.currSubmissionPageNo = yield requestHelper.UserRequests.GalleryRequests.Gallery.getSubmissionPageNo(currUsername, this._currSid, folderId, -1, -1);
                    } else if (isInScraps) {
                        this.currSubmissionPageNo = yield requestHelper.UserRequests.GalleryRequests.Scraps.getSubmissionPageNo(currUsername, this._currSid, -1, -1);
                    }
                }
                Logger.logInfo(`${scriptName}: found submission on page '${this.currSubmissionPageNo}'`);
                Logger.logInfo(`${scriptName}: searching figures backward...`);
                let figures = [];
                if (isInGallery) {
                    figures = yield requestHelper.UserRequests.GalleryRequests.Gallery.getFiguresInFolderBetweenPages(currUsername, folderId, this.currSubmissionPageNo, this.currSubmissionPageNo + this._amount);
                } else if (isInScraps) {
                    figures = yield requestHelper.UserRequests.GalleryRequests.Scraps.getFiguresBetweenPages(currUsername, this.currSubmissionPageNo, this.currSubmissionPageNo + this._amount);
                }
                let figuresFlattend = figures.flat();
                figuresFlattend = figuresFlattend.filter(figure => !this.sidToIgnore.includes(parseInt(figure.id.trimStart("sid-"))));
                figuresFlattend = figuresFlattend.filter(figure => figureTitleIsGenerallyEqual(figure, currTitle));
                figuresFlattend.reverse();
                Logger.logInfo(`${scriptName}: searching figures backward found '${figuresFlattend.length}' figures`);
                Logger.logInfo(`${scriptName}: loading submission pages...`);
                const result = {};
                for (let i = 0; i < figuresFlattend.length; i++) {
                    const figureSid = figuresFlattend[i].id.trimStart("sid-");
                    const subDoc = yield requestHelper.SubmissionRequests.getSubmissionPage(parseInt(figureSid));
                    const img = null === subDoc || void 0 === subDoc ? void 0 : subDoc.getElementById("submissionImg");
                    if (null != img) {
                        img.setAttribute("wal-index", (-(figuresFlattend.length - i)).toString());
                        img.setAttribute("wal-sid", figureSid);
                        result[parseInt(figureSid)] = img;
                        Logger.logInfo(`${scriptName}: loaded submission '${figureSid}' with index '${(-(figuresFlattend.length - i)).toString()}'`);
                    }
                }
                return result;
            });
        }
    }
    var ForwardSearch_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) {
                result.done ? resolve(result.value) : function adopt(value) {
                    return value instanceof P ? value : new P(function(resolve) {
                        resolve(value);
                    });
                }(result.value).then(fulfilled, rejected);
            }
            step((generator = generator.apply(thisArg, _arguments || [])).next());
        });
    };
    class ForwardSearch {
        constructor(currSid, currSubmissionPageNo) {
            this.sidToIgnore = [];
            this._currSid = currSid;
            this.currSubmissionPageNo = currSubmissionPageNo;
            this.sidToIgnore.push(currSid);
        }
        search() {
            return ForwardSearch_awaiter(this, void 0, void 0, function*() {
                var _a, _b;
                const isInGallery = isSubmissionPageInGallery(document);
                const isInScraps = isSubmissionPageInScraps(document);
                if (!isInGallery && !isInScraps) {
                    return {};
                }
                const columnpage = document.getElementById("columnpage");
                const submissionIdContainer = null === columnpage || void 0 === columnpage ? void 0 : columnpage.querySelector('div[class*="submission-id-container"]');
                const submissionTitle = null === submissionIdContainer || void 0 === submissionIdContainer ? void 0 : submissionIdContainer.querySelector('div[class*="submission-title"]');
                const currTitle = null === (_b = null === (_a = null === submissionTitle || void 0 === submissionTitle ? void 0 : submissionTitle.querySelector("h2")) || void 0 === _a ? void 0 : _a.querySelector("p")) || void 0 === _b ? void 0 : _b.textContent;
                if (string.isNullOrWhitespace(currTitle)) {
                    return {};
                }
                const currUsername = getDocUsername(document);
                const folderId = getCurrGalleryFolder();
                Logger.logInfo(`${scriptName}: finding submission page...`);
                if (null == this.currSubmissionPageNo || this.currSubmissionPageNo < 1) {
                    if (isInGallery) {
                        this.currSubmissionPageNo = yield requestHelper.UserRequests.GalleryRequests.Gallery.getSubmissionPageNo(currUsername, this._currSid, folderId, -1, -1);
                    } else if (isInScraps) {
                        this.currSubmissionPageNo = yield requestHelper.UserRequests.GalleryRequests.Scraps.getSubmissionPageNo(currUsername, this._currSid, -1, -1);
                    }
                }
                Logger.logInfo(`${scriptName}: found submission on page '${this.currSubmissionPageNo}'`);
                Logger.logInfo(`${scriptName}: searching figures forward...`);
                let figures = [];
                if (isInGallery) {
                    figures = yield requestHelper.UserRequests.GalleryRequests.Gallery.getFiguresInFolderBetweenIds(currUsername, folderId, void 0, this._currSid);
                } else if (isInScraps) {
                    figures = yield requestHelper.UserRequests.GalleryRequests.Scraps.getFiguresBetweenIds(currUsername, void 0, this._currSid);
                }
                let figuresFlattend = figures.flat();
                figuresFlattend = figuresFlattend.filter(figure => !this.sidToIgnore.includes(parseInt(figure.id.trimStart("sid-"))));
                figuresFlattend = figuresFlattend.filter(figure => figureTitleIsGenerallyEqual(figure, currTitle));
                figuresFlattend.reverse();
                Logger.logInfo(`${scriptName}: searching figures forward found '${figuresFlattend.length}' figures`);
                Logger.logInfo(`${scriptName}: loading submission pages...`);
                const result = {};
                for (let i = 0; i < figuresFlattend.length; i++) {
                    const figureSid = figuresFlattend[i].id.trimStart("sid-");
                    const subDoc = yield requestHelper.SubmissionRequests.getSubmissionPage(parseInt(figureSid));
                    const img = null === subDoc || void 0 === subDoc ? void 0 : subDoc.getElementById("submissionImg");
                    if (null != img) {
                        img.setAttribute("wal-index", (i + 1).toString());
                        img.setAttribute("wal-sid", figureSid);
                        result[parseInt(figureSid)] = img;
                        Logger.logInfo(`${scriptName}: loaded submission '${figureSid}' with index '${(i + 1).toString()}'`);
                    }
                }
                return result;
            });
        }
    }
    class LightboxHTML {
        static get html() {
            return '\n<div class="viewer-container viewer-backdrop viewer-fixed viewer-fade viewer-in hidden" tabindex="-1" touch-action="none"\n    id="viewer0" style="z-index: 999999900;" role="dialog" aria-labelledby="viewerTitle0" aria-modal="true">\n    <div class="viewer-canvas" data-viewer-action="hide">\n    </div>\n</div>';
        }
    }
    var injectStylesIntoStyleTag = __webpack_require__(72);
    var injectStylesIntoStyleTag_default = __webpack_require__.n(injectStylesIntoStyleTag);
    var styleDomAPI = __webpack_require__(825);
    var styleDomAPI_default = __webpack_require__.n(styleDomAPI);
    var insertBySelector = __webpack_require__(659);
    var insertBySelector_default = __webpack_require__.n(insertBySelector);
    var setAttributesWithoutAttributes = __webpack_require__(56);
    var setAttributesWithoutAttributes_default = __webpack_require__.n(setAttributesWithoutAttributes);
    var insertStyleElement = __webpack_require__(540);
    var insertStyleElement_default = __webpack_require__.n(insertStyleElement);
    var styleTagTransform = __webpack_require__(113);
    var styleTagTransform_default = __webpack_require__.n(styleTagTransform);
    var LightboxStyle = __webpack_require__(782);
    var options = {};
    options.styleTagTransform = styleTagTransform_default();
    options.setAttributes = setAttributesWithoutAttributes_default();
    options.insert = insertBySelector_default().bind(null, "head");
    options.domAPI = styleDomAPI_default();
    options.insertStyleElement = insertStyleElement_default();
    injectStylesIntoStyleTag_default()(LightboxStyle.A, options);
    LightboxStyle.A && LightboxStyle.A.locals && LightboxStyle.A.locals;
    class Lightbox {
        constructor(orgSid, imgs) {
            this.currWalIndex = 0;
            this._imgCount = -1;
            this.initializeViewerCanvas();
            this._lightboxContainer = document.body.querySelector('div[class*="viewer-canvas"]');
            this._imgCount = Object.keys(imgs).length;
            const orgImgClone = document.getElementById("columnpage").querySelector(`img[wal-sid="${orgSid}"]`).readdToDom();
            imgs[orgSid] = orgImgClone;
            this.prepareOrgLightbox();
            this.addSubmissionToLightbox(imgs);
            if (customLightboxShowNavSetting.value) {
                this._lightboxNavContainer = this.createNavigationButtons();
                this._lightboxContainer.insertAfterThis(this._lightboxNavContainer);
            }
            this._boundHandleArrowKeys = this.handleArrowKeys.bind(this);
        }
        get isHidden() {
            var _a, _b;
            return null !== (_b = null === (_a = this._lightboxContainer.parentElement) || void 0 === _a ? void 0 : _a.classList.contains("hidden")) && void 0 !== _b ? _b : false;
        }
        set isHidden(value) {
            var _a, _b, _c, _d, _e;
            if (this.isHidden !== value) {
                if (value) {
                    window.removeEventListener("keydown", this._boundHandleArrowKeys);
                    null === (_a = this._lightboxContainer.parentElement) || void 0 === _a || _a.classList.add("hidden");
                    null === (_b = this._lightboxNavContainer) || void 0 === _b || _b.classList.add("hidden");
                    for (const child of Array.from(this._lightboxContainer.children)) {
                        child.classList.add("hidden");
                    }
                } else {
                    window.addEventListener("keydown", this._boundHandleArrowKeys);
                    null === (_c = this._lightboxContainer.children[this.currWalIndex]) || void 0 === _c || _c.classList.remove("hidden");
                    null === (_d = this._lightboxContainer.parentElement) || void 0 === _d || _d.classList.remove("hidden");
                    null === (_e = this._lightboxNavContainer) || void 0 === _e || _e.classList.remove("hidden");
                }
            }
        }
        navigateLeft() {
            if (this.currWalIndex > 0) {
                Logger.logInfo(`${scriptName}: navigating left '${this.currWalIndex} -> ${this.currWalIndex - 1}'`);
                const currImg = this._lightboxContainer.children[this.currWalIndex];
                const prevImg = this._lightboxContainer.children[this.currWalIndex - 1];
                if (null != currImg && null != prevImg) {
                    currImg.classList.add("hidden");
                    prevImg.classList.remove("hidden");
                }
                this.currWalIndex--;
            }
        }
        navigateRight() {
            if (this.currWalIndex + 1 < this._imgCount) {
                Logger.logInfo(`${scriptName}: navigating right '${this.currWalIndex} -> ${this.currWalIndex + 1}'`);
                const currImg = this._lightboxContainer.children[this.currWalIndex];
                const nextImg = this._lightboxContainer.children[this.currWalIndex + 1];
                if (null != currImg && null != nextImg) {
                    currImg.classList.add("hidden");
                    nextImg.classList.remove("hidden");
                }
                this.currWalIndex++;
            }
        }
        handleArrowKeys(event) {
            switch (event.key) {
              case "ArrowLeft":
              case "ArrowUp":
                this.navigateLeft();
                break;

              case "ArrowRight":
              case "ArrowDown":
                this.navigateRight();
            }
            event.preventDefault();
        }
        getIndexOfClickedImage(img) {
            let clickedWalIndex = img.getAttribute("wal-index");
            if (!string.isNullOrWhitespace(clickedWalIndex)) {
                this.currWalIndex = parseInt(clickedWalIndex);
                const clickedImg = this._lightboxContainer.querySelector(`img[wal-index="${this.currWalIndex}"]`);
                return null === clickedImg || void 0 === clickedImg ? void 0 : clickedImg.getIndexOfThis();
            }
        }
        prepareOrgLightbox() {
            this._lightboxContainer.innerHTML = "";
            this._lightboxContainer = this._lightboxContainer.readdToDom();
            this._lightboxContainer.addEventListener("click", () => {
                this.isHidden = true;
            });
        }
        addSubmissionToLightbox(imgs) {
            const sortedImages = Object.values(imgs).sort((a, b) => {
                var _a, _b;
                return parseInt(null !== (_a = a.getAttribute("wal-index")) && void 0 !== _a ? _a : "0") - parseInt(null !== (_b = b.getAttribute("wal-index")) && void 0 !== _b ? _b : "0");
            });
            for (const img of sortedImages) {
                img.addEventListener("click", () => {
                    var _a;
                    this.currWalIndex = null !== (_a = this.getIndexOfClickedImage(img)) && void 0 !== _a ? _a : 0;
                    this.isHidden = false;
                });
                const clone = img.cloneNode(false);
                clone.classList.add("hidden");
                clone.style.height = "100%";
                clone.style.width = "100%";
                clone.style.objectFit = "contain";
                this._lightboxContainer.appendChild(clone);
            }
        }
        createNavigationButtons() {
            const container = document.createElement("div");
            container.classList.add("wal-lightbox-nav", "hidden", "wal-no-select");
            const leftButton = document.createElement("a");
            leftButton.classList.add("button", "standard", "mobile-fix");
            leftButton.textContent = "<---";
            leftButton.style.marginRight = "4px";
            leftButton.addEventListener("click", this.navigateLeft.bind(this));
            container.appendChild(leftButton);
            const closeButton = document.createElement("a");
            closeButton.classList.add("button", "standard", "mobile-fix");
            closeButton.textContent = "Close";
            closeButton.addEventListener("click", () => {
                this.isHidden = true;
            });
            container.appendChild(closeButton);
            const rightButton = document.createElement("a");
            rightButton.classList.add("button", "standard", "mobile-fix");
            rightButton.textContent = "---\x3e";
            rightButton.style.marginLeft = "4px";
            rightButton.addEventListener("click", this.navigateRight.bind(this));
            container.appendChild(rightButton);
            return container;
        }
        initializeViewerCanvas() {
            if (!document.body.querySelector('div[class*="viewer-canvas"]')) {
                const viewerTemp = document.createElement("div");
                viewerTemp.innerHTML = LightboxHTML.html;
                const viewerContainer = viewerTemp.firstElementChild;
                document.body.appendChild(viewerContainer);
                Logger.logInfo(`${scriptName}: Created viewer canvas structure in hidden state`);
            }
        }
    }
    var AutoLoader_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) {
                result.done ? resolve(result.value) : function adopt(value) {
                    return value instanceof P ? value : new P(function(resolve) {
                        resolve(value);
                    });
                }(result.value).then(fulfilled, rejected);
            }
            step((generator = generator.apply(thisArg, _arguments || [])).next());
        });
    };
    class AutoLoader {
        constructor() {
            var _a;
            this.currComicNav = null;
            this.currSid = -1;
            this._comicNavExists = false;
            this.currSid = getDocViewSid(document);
            this.submissionImg = document.getElementById("submissionImg");
            this.submissionImg.setAttribute("wal-index", "0");
            this.submissionImg.setAttribute("wal-sid", this.currSid.toString());
            this._searchButton = document.createElement("a");
            this._searchButton.id = "wal-search-button";
            this._searchButton.classList.add("wal-button", "button", "standard", "mobile-fix");
            this._searchButton.type = "button";
            this._searchButton.style.margin = "20px 0 10px 0";
            this.submissionImg.parentNode.appendChild(document.createElement("br"));
            this.submissionImg.parentNode.appendChild(this._searchButton);
            const descriptionElem = null === (_a = document.getElementById("columnpage")) || void 0 === _a ? void 0 : _a.querySelector('div[class*="submission-description"]');
            if (null != descriptionElem) {
                this.currComicNav = ComicNavigation.fromElement(descriptionElem);
                if (null != this.currComicNav) {
                    if (-1 !== this.currComicNav.prevId || -1 !== this.currComicNav.firstId || -1 !== this.currComicNav.nextId) {
                        this._comicNavExists = true;
                        if (overwriteNavButtonsSetting.value) {
                            this.overwriteNavButtons();
                        }
                    }
                }
            }
            this.updateSearchButton(this.comicNavExists);
            const loadingSpinnerContainer = document.createElement("div");
            loadingSpinnerContainer.classList.add("wal-loading-spinner");
            loadingSpinnerContainer.style.margin = "20px 0 20px 0";
            this._loadingSpinner = new window.FALoadingSpinner(loadingSpinnerContainer);
            this._loadingSpinner.delay = loadingSpinSpeedSetting.value;
            this._loadingSpinner.spinnerThickness = 6;
            this.submissionImg.parentNode.appendChild(loadingSpinnerContainer);
        }
        get comicNavExists() {
            return this._comicNavExists;
        }
        set comicNavExists(value) {
            if (value !== this.comicNavExists) {
                this._comicNavExists = value;
                this.updateSearchButton(value);
            }
        }
        startAutoloader() {
            this.startAutoLoaderAsync();
        }
        startAutoLoaderAsync() {
            return AutoLoader_awaiter(this, void 0, void 0, function*() {
                this._loadingSpinner.visible = true;
                const autoLoader = new AutoLoaderSearch(this.submissionImg, this.currSid, this.currComicNav);
                const submissions = yield autoLoader.search();
                const submissionIds = Object.keys(submissions).map(Number);
                if (0 === submissionIds.length || 1 === submissionIds.length && submissionIds[0] === this.currSid) {
                    this.comicNavExists = false;
                } else {
                    this.addLoadedSubmissions(submissions);
                    if (useCustomLightboxSetting.value) {
                        new Lightbox(this.currSid, submissions);
                    }
                }
                this._loadingSpinner.visible = false;
            });
        }
        startSimilarSearch() {
            this.startSimilarSearchAsync();
        }
        startSimilarSearchAsync() {
            return AutoLoader_awaiter(this, void 0, void 0, function*() {
                this._loadingSpinner.visible = true;
                const forwardSearch = new ForwardSearch(this.currSid);
                const submissionsAfter = yield forwardSearch.search();
                const backwardSearch = new BackwardSearch(this.currSid, backwardSearchSetting.value, forwardSearch.currSubmissionPageNo);
                backwardSearch.sidToIgnore.push(...Object.keys(submissionsAfter).map(Number));
                const submissionsBefore = yield backwardSearch.search();
                this.addLoadedSubmissions(submissionsBefore, submissionsAfter);
                if (useCustomLightboxSetting.value) {
                    new Lightbox(this.currSid, Object.assign(Object.assign({}, submissionsBefore), submissionsAfter));
                }
                this._loadingSpinner.visible = false;
            });
        }
        addLoadedSubmissions(...imgsArr) {
            const columnpage = document.getElementById("columnpage");
            for (const imgs of imgsArr) {
                Logger.logInfo(`${scriptName}: adding '${Object.keys(imgs).length}' submissions...`);
                let prevSid = this.currSid;
                for (const sid of Object.keys(imgs).map(Number)) {
                    if (imgs[sid].getAttribute("wal-sid") === this.currSid.toString()) {
                        continue;
                    }
                    const lastImg = columnpage.querySelector(`img[wal-sid="${prevSid}"]`);
                    const lastIndex = parseInt(lastImg.getAttribute("wal-index"));
                    if (parseInt(imgs[sid].getAttribute("wal-index")) < lastIndex) {
                        lastImg.insertBeforeThis(imgs[sid]);
                        imgs[sid].insertAfterThis(document.createElement("br"));
                        imgs[sid].insertAfterThis(document.createElement("br"));
                        checkTags(imgs[sid]);
                        Logger.logInfo(`${scriptName}: added submission ${sid} before submission ${prevSid}`);
                    } else {
                        lastImg.insertAfterThis(imgs[sid]);
                        imgs[sid].insertBeforeThis(document.createElement("br"));
                        imgs[sid].insertBeforeThis(document.createElement("br"));
                        checkTags(imgs[sid]);
                        Logger.logInfo(`${scriptName}: added submission ${sid} after submission ${prevSid}`);
                    }
                    prevSid = sid;
                }
            }
        }
        overwriteNavButtons() {
            var _a, _b, _c, _d, _e, _f;
            if (!this.comicNavExists) {
                return;
            }
            const columnpage = document.getElementById("columnpage");
            const favoriteNav = null === columnpage || void 0 === columnpage ? void 0 : columnpage.querySelector('div[class*="favorite-nav"]');
            let prevButton = null === favoriteNav || void 0 === favoriteNav ? void 0 : favoriteNav.children[0];
            if (null != prevButton && -1 !== this.currComicNav.prevId) {
                if (null !== (_c = null === (_b = null === (_a = prevButton.textContent) || void 0 === _a ? void 0 : _a.toLowerCase()) || void 0 === _b ? void 0 : _b.includes("prev")) && void 0 !== _c ? _c : false) {
                    prevButton.href = `/view/${this.currComicNav.prevId}/`;
                } else {
                    const prevButtonReal = document.createElement("a");
                    prevButtonReal.href = `/view/${this.currComicNav.prevId}/`;
                    prevButtonReal.classList.add("button", "standard", "mobile-fix");
                    prevButtonReal.textContent = "Prev";
                    prevButtonReal.style.marginRight = "4px";
                    prevButton.insertBeforeThis(prevButtonReal);
                }
            }
            let nextButton = null === favoriteNav || void 0 === favoriteNav ? void 0 : favoriteNav.children[favoriteNav.children.length - 1];
            if (null != nextButton && -1 !== this.currComicNav.nextId) {
                if (null !== (_f = null === (_e = null === (_d = nextButton.textContent) || void 0 === _d ? void 0 : _d.toLowerCase()) || void 0 === _e ? void 0 : _e.includes("next")) && void 0 !== _f ? _f : false) {
                    nextButton.href = `/view/${this.currComicNav.nextId}/`;
                } else {
                    const nextButtonReal = document.createElement("a");
                    nextButtonReal.href = `/view/${this.currComicNav.nextId}/`;
                    nextButtonReal.classList.add("button", "standard", "mobile-fix");
                    nextButtonReal.textContent = "Next";
                    nextButtonReal.style.marginLeft = "4px";
                    nextButton.insertAfterThis(nextButtonReal);
                }
            }
        }
        updateSearchButton(showAutoLoader) {
            this._searchButton.style.display = "inline-block";
            this._searchButton.textContent = showAutoLoader ? "Auto load Pages" : "Search for similar Pages";
            if (showAutoLoader) {
                this._searchButton.onclick = () => {
                    this.startAutoloader();
                    this._searchButton.style.display = "none";
                };
            } else {
                this._searchButton.onclick = () => {
                    this.startSimilarSearch();
                    this._searchButton.style.display = "none";
                };
            }
        }
    }
    const scriptName = "FA Webcomic Auto Loader";
    const customSettings = new window.FACustomSettings("Furaffinity Features Settings", `${scriptName} Settings`);
    const showSearchButtonSetting = customSettings.newSetting(window.FASettingType.Boolean, "Similar Search Button");
    showSearchButtonSetting.description = "Sets wether the search for similar Pages button is show.";
    showSearchButtonSetting.defaultValue = true;
    const loadingSpinSpeedSetting = customSettings.newSetting(window.FASettingType.Number, "Loading Animation");
    loadingSpinSpeedSetting.description = "Sets the duration that the loading animation takes for a full rotation in milliseconds.";
    loadingSpinSpeedSetting.defaultValue = 1e3;
    const backwardSearchSetting = customSettings.newSetting(window.FASettingType.Number, "Backward Search Amount");
    backwardSearchSetting.description = "Sets the amount of similar pages to search backward. (More Pages take longer)";
    backwardSearchSetting.defaultValue = 3;
    const overwriteNavButtonsSetting = customSettings.newSetting(window.FASettingType.Boolean, "Overwrite Nav Buttons");
    overwriteNavButtonsSetting.description = "Sets wether the default Navigation Buttons (next/prev) are overwritten by the Auto-Loader. (Works only if comic navigation is present)";
    overwriteNavButtonsSetting.defaultValue = true;
    const useCustomLightboxSetting = customSettings.newSetting(window.FASettingType.Boolean, "Use Custom Lightbox");
    useCustomLightboxSetting.description = "Sets wether the default Lightbox (fullscreen view) is overwritten by the Auto-Loader.";
    useCustomLightboxSetting.defaultValue = true;
    const customLightboxShowNavSetting = customSettings.newSetting(window.FASettingType.Boolean, "Custom Lightbox Show Nav");
    customLightboxShowNavSetting.description = "Sets wether the Lightbox Navigation (next/prev) is shown in the Custom Lightbox.";
    customLightboxShowNavSetting.defaultValue = true;
    customSettings.loadSettings();
    const requestHelper = new window.FARequestHelper(2);
    if (customSettings.isFeatureEnabled) {
        const matchList = new window.FAMatchList(customSettings);
        matchList.matches = [ "net/view" ];
        matchList.runInIFrame = false;
        if (matchList.hasMatch) {
            new AutoLoader;
        }
    }
})();