「MediaWiki:Gadget-HotCat.js」の版間の差分

提供: 萌えっ娘百科事典
移動先: 案内検索
(跨站同步)
(タグ: Bot)
 
(2人の利用者による、間の2版が非表示)
1行目: 1行目:
/*  
+
/* <pre> */
  * Clone from [https://zh.moegirl.org/MediaWiki:Gadget-HotCat.js], see the origin version here [https://commons.wikimedia.org/wiki/MediaWiki:Gadget-HotCat.js].
+
/**
  * The copyright belongs to the owner, see[https://commons.wikimedia.org/wiki/Help:Gadget-HotCat/Version_history],
+
  * -------------------------------------------------------------------------
  * and follow Quadruple licensed GFDL, GPL, LGPL and Creative Commons Attribution 3.0 (CC-BY-3.0).
+
  * !!! DON'T MODIFY THIS PAGE MANUALLY, YOUR CHANGES WILL BE OVERWRITTEN !!!
* Help information see [https://commons.wikimedia.org/wiki/Help:Gadget-HotCat].
+
  * -------------------------------------------------------------------------
 
  */
 
  */
//<nowiki>
+
var _addText = '{{GHIACode|page=GHIA:MoegirlPediaInterfaceCodes/blob/master/src/gadgets/HotCat/MediaWiki:Gadget-HotCat.js|user=[[U:AnnAngela]]|longId=4d899c79e616aad7593a9b843114e8d331af873f|shortId=4d899c7|message=fix(Gadget-HotCat): Fix unreachable condition}}';
/* jshint ignore:start */
+
 
(function() {
+
"use strict";
     var conf = window.mw ? mw.config.get() : window;
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
     if ((window.HotCat && !window.HotCat.nodeName) || conf.wgAction == 'edit') {
+
     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
         return;
+
     return new (P || (P = Promise))(function (resolve, reject) {
    }
+
         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
    window.HotCat = {
+
         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
         messages: {
+
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
            cat_removed: '移除[[分类:$1]]',
+
        step((generator = generator.apply(thisArg, _arguments || [])).next());
            template_removed: '移除{{[[分类:$1]]}}',
+
    });
            cat_added: '添加[[分类:$1]]',
+
};
            cat_keychange: '为[[分类:$1]]设定新索引:“$2”',
+
var __generator = (this && this.__generator) || function (thisArg, body) {
            cat_notFound: '分类“$1”未找到',
+
    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
            cat_exists: '分类“$1”已存在,不执行添加操作',
+
    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
            cat_resolved: '(已处理[[分类:$1]]的重定向)',
+
    function verb(n) { return function (v) { return step([n, v]); }; }
            uncat_removed: null, //萌百没有Template:Uncategorized
+
    function step(op) {
            separator: '; ',
+
        if (f) throw new TypeError("Generator is already executing.");
            prefix: "",
+
        while (_) try {
            using: '——[[Help:HotCat小工具|HotCat]]',
+
             if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
            multi_change: '$1个分类',
+
            if (y = 0, t) op = [op[0] & 2, t.value];
            commit: '保存',
+
            switch (op[0]) {
            ok: '确定',
+
                case 0: case 1: t = op; break;
            cancel: '取消',
+
                case 4: _.label++; return { value: op[1], done: false };
            multi_error: '无法连接到萌百服务器,因此您的分类更改无法保存,由此引发的不便我们深表歉意。',
+
                case 5: _.label++; y = op[1]; op = [0]; continue;
            short_catchange: null
+
                 case 7: op = _.ops.pop(); _.trys.pop(); continue;
        },
+
                 default:
        category_regexp: '[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]',
+
                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
        category_canonical: 'Category',
+
                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
        categories: '分类',
+
                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
        disambig_category: 'Disambiguation',
+
                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
        redir_category: 'Category redirects',
+
                    if (t[2]) _.ops.pop();
        links: {
+
                    _.trys.pop(); continue;
            change: '(±)',
 
            remove: '(\u2212)',
 
            add: '(+)',
 
            restore: '(×)',
 
            undo: '(×)',
 
            down: '(\u2193)',
 
            up: '(\u2191)'
 
        },
 
        tooltips: {
 
            change: '修改',
 
            remove: '移除',
 
            add: '新增一个分类',
 
            restore: '回退更改',
 
            undo: '回退更改',
 
            down: '打开已修改并显示子分类',
 
            up: '打开已修改并显示父分类'
 
        },
 
        addmulti: '<span>+<sup>+</sup></span>',
 
        multi_tooltip: '修改多个分类',
 
        disable: function() {
 
            var ns = conf.wgNamespaceNumber;
 
            var nsIds = conf.wgNamespaceIds;
 
             return (ns < 0 || ns === 10 || ns === 828 || ns === 8 || ns === 6 && conf.wgArticleId === 0 || ns === 2 && /\.(js|css)$/.test(conf.wgTitle) || nsIds && (ns === nsIds.creator || ns === nsIds.timedtext || ns === nsIds.institution));
 
        },
 
        uncat_regexp: /\{\{\s*([Uu]ncat(egori[sz]ed( image)?)?|[Nn]ocat|[Nn]eedscategory)[^}]*\}\}\s*(<\!--.*?--\>)?/g,
 
        existsYes: '//upload.wikimedia.org/wikipedia/commons/thumb/b/be/P_yes.svg/20px-P_yes.svg.png',
 
        existsNo: '//upload.wikimedia.org/wikipedia/commons/thumb/4/42/P_no.svg/20px-P_no.svg.png',
 
        template_regexp: '[Tt][Ee][Mm][Pp][Ll][Aa][Tt][Ee]',
 
        template_categories: {},
 
        engine_names: {
 
            searchindex: '搜索索引',
 
            pagelist: '页面列表',
 
            combined: '合并搜索',
 
            subcat: '子分类',
 
            parentcat: '父分类'
 
        },
 
        capitalizePageNames: true,
 
        upload_disabled: false,
 
        blacklist: null,
 
        bg_changed: '#F8CCB0',
 
        no_autocommit: false,
 
        del_needs_diff: false,
 
        suggest_delay: 100,
 
        editbox_width: 40,
 
        suggestions: 'combined',
 
        fixed_search: false,
 
        use_up_down: true,
 
        list_size: 5,
 
        single_minor: true,
 
        dont_add_to_watchlist: false,
 
        shortcuts: null,
 
        addShortcuts: function(map) {
 
            if (!map) return;
 
            window.HotCat.shortcuts = window.HotCat.shortcuts || {};
 
            for (var k in map) {
 
                if (!map.hasOwnProperty(k) || typeof k != 'string') continue;
 
                var v = map[k];
 
                if (typeof v != 'string') continue;
 
                 k = k.replace(/^\s+|\s+$/g, "");
 
                v = v.replace(/^\s+|\s+$/g, "");
 
                 if (k.length === 0 || v.length === 0) continue;
 
                window.HotCat.shortcuts[k] = v;
 
            }
 
        }
 
    };
 
    var ua = navigator.userAgent.toLowerCase();
 
    var is_ie6 = /msie ([0-9]{1,}[\.0-9]{0,})/.exec(ua) !== null && parseFloat(RegExp.$1) <= 6.0;
 
    var is_ie_lt8 = /msie ([0-9]{1,}[\.0-9]{0,})/.exec(ua) !== null && parseFloat(RegExp.$1) < 8.0;
 
    var is_webkit = /applewebkit\/\d+/.test(ua) && ua.indexOf('spoofer') < 0;
 
    var getJSON = (function() {
 
        function getRequest() {
 
            var request = null;
 
            try {
 
                request = new window.XMLHttpRequest();
 
            } catch (anything) {
 
                if (window.ActiveXObject) {
 
                    try {
 
                        request = new window.ActiveXObject('Microsoft.XMLHTTP');
 
                    } catch (any) {}
 
                }
 
            }
 
            return request;
 
        }
 
        return function(settings) {
 
            var req = getRequest();
 
            if (!req && settings && settings.error) settings.error(req);
 
            if (!req || !settings || !settings.uri) return req;
 
            var uri = armorUri(settings.uri);
 
            var args = settings.data || null;
 
            var method;
 
            if (args && uri.length + args.length + 1 > 2000) {
 
                method = 'POST';
 
                req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
 
            } else {
 
                method = 'GET';
 
                if (args) uri += '?' + args;
 
                args = null;
 
 
             }
 
             }
             req.open(method, uri, true);
+
             op = body.call(thisArg, _);
            req.onreadystatechange = function() {
+
        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
                if (req.readyState != 4) return;
+
         if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
                if (req.status != 200 || !req.responseText || !(/^\s*[\{\[]/.test(req.responseText))) {
 
                    if (settings.error) settings.error(req);
 
                } else {
 
                    if (settings.success) settings.success(eval('(' + req.responseText + ')'));
 
                }
 
            };
 
            req.setRequestHeader('Pragma', 'cache=yes');
 
            req.setRequestHeader('Cache-Control', 'no-transform');
 
            req.send(args);
 
            return req;
 
        };
 
    })();
 
    function armorUri(uri) {
 
         var url = new mw.Uri(uri);
 
        url.protocol = 'https'
 
        return url + '';
 
 
     }
 
     }
     function LoadTrigger(needed) {
+
};
        this.queue = [];
+
var __read = (this && this.__read) || function (o, n) {
         this.toLoad = needed;
+
     var m = typeof Symbol === "function" && o[Symbol.iterator];
 +
    if (!m) return o;
 +
    var i = m.call(o), r, ar = [], e;
 +
    try {
 +
         while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
 
     }
 
     }
     LoadTrigger.prototype = {
+
     catch (error) { e = { error: error }; }
        register: function(callback) {
+
    finally {
            if (this.toLoad <= 0) {
+
         try {
                callback();
+
             if (r && !r.done && (m = i["return"])) m.call(i);
            } else {
 
                this.queue[this.queue.length] = callback;
 
            }
 
        },
 
         loaded: function() {
 
             if (this.toLoad > 0) {
 
                this.toLoad--;
 
                if (this.toLoad === 0) {
 
                    for (var i = 0; i < this.queue.length; i++) this.queue[i]();
 
                    this.queue = [];
 
                }
 
            }
 
 
         }
 
         }
    };
+
         finally { if (e) throw e.error; }
    var setupCompleted = new LoadTrigger(1);
 
    HotCat.runWhenReady = function(callback) {
 
        setupCompleted.register(callback);
 
    };
 
    var loadTrigger = new LoadTrigger(2);
 
    function load(uri) {
 
        var head = document.getElementsByTagName('head')[0];
 
        var s = document.createElement('script');
 
        s.setAttribute('src', armorUri(uri));
 
        s.setAttribute('type', 'text/javascript');
 
        var done = false;
 
        function afterLoad() {
 
            if (done) return;
 
            done = true;
 
            s.onload = s.onreadystatechange = s.onerror = null;
 
            if (head && s.parentNode) head.removeChild(s);
 
            loadTrigger.loaded();
 
        }
 
         s.onload = s.onreadystatechange = function() {
 
            if (done) return;
 
            if (!this.readyState || this.readyState === 'loaded' || this.readyState === 'complete') {
 
                afterLoad();
 
            }
 
        };
 
        s.onerror = afterLoad;
 
        head.insertBefore(s, head.firstChild);
 
    }
 
    function loadJS(page) {
 
        load(conf.wgServer + conf.wgScript + '?title=' + encodeURIComponent(page) + '&action=raw&ctype=text/javascript');
 
 
     }
 
     }
     function loadURI(href) {
+
     return ar;
        var url = href;
+
};
         if (url.substring(0, 2) == '//') {
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
             url = window.location.protocol + url;
+
    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
        } else if (url.substring(0, 1) == '/') {
+
         if (ar || !(i in from)) {
             url = conf.wgServer + url;
+
             if (!ar) ar = Array.prototype.slice.call(from, 0, i);
 +
             ar[i] = from[i];
 
         }
 
         }
        load(url);
 
 
     }
 
     }
     loadJS('MediaWiki:Gadget-HotCat.js/local_defaults');
+
     return to.concat(ar || Array.prototype.slice.call(from));
    loadTrigger.loaded(); //由于i18n已内置,此处直接执行函数
+
};
    var wikiTextBlank = '[\\t _\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]+';
+
window.hotcat_translations_from_commons = false;
    var wikiTextBlankRE = new RegExp(wikiTextBlank, 'g');
+
(function () { return __awaiter(void 0, void 0, void 0, function () {
    var wikiTextBlankOrBidi = '[\\t _\\xA0\\u1680\\u180E\\u2000-\\u200B\\u200E\\u200F\\u2028-\\u202F\\u205F\\u3000]*';
+
     function autoLocalize(namespaceNumber, _fallback) {
    var formattedNamespaces = conf.wgFormattedNamespaces;
+
        var fallback = _fallback;
    var namespaceIds = conf.wgNamespaceIds;
+
         function createRegexpStr(name) {
     function autoLocalize(namespaceNumber, fallback) {
+
             if (!name || !name.length) {
    if (!formattedNamespaces) return;
+
                return "";
         function create_regexp_str(name) {
+
            }
             if (!name || name.length === 0) return "";
 
 
             var regex_name = "";
 
             var regex_name = "";
 
             for (var i = 0; i < name.length; i++) {
 
             for (var i = 0; i < name.length; i++) {
                 var initial = name.substr(i, 1);
+
                 var initial = name.charAt(i), ll = initial.toLowerCase(), ul = initial.toUpperCase();
                var ll = initial.toLowerCase();
+
                 if (ll === ul) {
                var ul = initial.toUpperCase();
 
                 if (ll == ul) {
 
 
                     regex_name += initial;
 
                     regex_name += initial;
                 } else {
+
                 }
                     regex_name += '[' + ll + ul + ']';
+
                else {
 +
                     regex_name += "[".concat(ll).concat(ul, "]");
 
                 }
 
                 }
 
             }
 
             }
             return regex_name.replace(/([\\\^\$\.\?\*\+\(\)])/g, '\\$1').replace(wikiTextBlankRE, wikiTextBlank);
+
             return regex_name.replace(/([\\^$.?*+()])/g, "\\$1").replace(wikiTextBlankRE, wikiTextBlank);
 
         }
 
         }
 
         fallback = fallback.toLowerCase();
 
         fallback = fallback.toLowerCase();
         var canonical = formattedNamespaces["" + namespaceNumber].toLowerCase();
+
         var canonical = formattedNamespaces["".concat(namespaceNumber)].toLowerCase();
         var regexp = create_regexp_str(canonical);
+
         var regexp = createRegexpStr(canonical);
         if (fallback && canonical != fallback) regexp += '|' + create_regexp_str(fallback);
+
         if (fallback && canonical !== fallback) {
 +
            regexp += "|".concat(createRegexpStr(fallback));
 +
        }
 
         if (namespaceIds) {
 
         if (namespaceIds) {
 
             for (var cat_name in namespaceIds) {
 
             for (var cat_name in namespaceIds) {
                 if (typeof cat_name == 'string' && cat_name.toLowerCase() != canonical && cat_name.toLowerCase() != fallback && namespaceIds[cat_name] == namespaceNumber) {
+
                 if (typeof cat_name === "string" && cat_name.toLowerCase() !== canonical && cat_name.toLowerCase() !== fallback && namespaceIds[cat_name] === namespaceNumber) {
                     regexp += '|' + create_regexp_str(cat_name);
+
                     regexp += "|".concat(createRegexpStr(cat_name));
 
                 }
 
                 }
 
             }
 
             }
 
         }
 
         }
 
         return regexp;
 
         return regexp;
    }
 
    if (formattedNamespaces['14']) {
 
        HotCat.category_canonical = formattedNamespaces['14'];
 
        HotCat.category_regexp = autoLocalize(14, 'category');
 
    }
 
    if (formattedNamespaces['10']) {
 
        HotCat.template_regexp = autoLocalize(10, 'template');
 
    }
 
    function bind(func, target) {
 
        var f = func,
 
            tgt = target;
 
        return function() {
 
            return f.apply(tgt, arguments);
 
        };
 
 
     }
 
     }
 
     function make(arg, literal) {
 
     function make(arg, literal) {
         if (!arg) return null;
+
         if (!arg) {
 +
            return null;
 +
        }
 
         return literal ? document.createTextNode(arg) : document.createElement(arg);
 
         return literal ? document.createTextNode(arg) : document.createElement(arg);
 
     }
 
     }
     function param(name, uri) {
+
     function param(name, _uri) {
         if (typeof uri == 'undefined' || uri === null) uri = document.location.href;
+
         var uri = _uri || document.location.href;
         var re = new RegExp('[&?]' + name + '=([^&#]*)');
+
         var re = new RegExp("[&?]".concat(name, "=([^&#]*)"));
 
         var m = re.exec(uri);
 
         var m = re.exec(uri);
         if (m && m.length > 1) return decodeURIComponent(m[1]);
+
         if (m && m.length > 1) {
 +
            return decodeURIComponent(m[1]);
 +
        }
 
         return null;
 
         return null;
 
     }
 
     }
 
     function title(href) {
 
     function title(href) {
         if (!href) return null;
+
         if (!href) {
         var script = conf.wgScript + '?';
+
            return null;
         if (href.indexOf(script) === 0 || href.indexOf(conf.wgServer + script) === 0 || conf.wgServer.substring(0, 2) == '//' && href.indexOf(document.location.protocol + conf.wgServer + script) === 0) {
+
        }
             return param('title', href);
+
         var script = "".concat(conf.wgScript, "?");
         } else {
+
         if (href.indexOf(script) === 0 || href.indexOf("".concat(conf.wgServer).concat(script)) === 0 || conf.wgServer.substring(0, 2) === "//" && href.indexOf("".concat(document.location.protocol).concat(conf.wgServer).concat(script)) === 0) {
            var prefix = conf.wgArticlePath.replace('$1', "");
+
             return param("title", href);
            if (href.indexOf(prefix) !== 0) prefix = conf.wgServer + prefix;
+
         }
            if (href.indexOf(prefix) !== 0 && prefix.substring(0, 2) == '//') prefix = document.location.protocol + prefix;
+
        var prefix = conf.wgArticlePath.replace("$1", "");
            if (href.indexOf(prefix) === 0)
+
        if (href.indexOf(prefix)) {
                return decodeURIComponent(href.substring(prefix.length));
+
            prefix = "".concat(conf.wgServer).concat(prefix);
 +
        }
 +
        if (href.indexOf(prefix) && prefix.substring(0, 2) === "//") {
 +
            prefix = document.location.protocol + prefix;
 +
        }
 +
        if (href.indexOf(prefix) === 0) {
 +
            return decodeURIComponent(href.substring(prefix.length));
 
         }
 
         }
 
         return null;
 
         return null;
 
     }
 
     }
 
     function hasClass(elem, name) {
 
     function hasClass(elem, name) {
         return (' ' + elem.className + ' ').indexOf(' ' + name + ' ') >= 0;
+
         return " ".concat(elem.className, " ").indexOf(" ".concat(name, " ")) >= 0;
 
     }
 
     }
 
     function capitalize(str) {
 
     function capitalize(str) {
         if (!str || str.length === 0) return str;
+
         if (!str || !str.length) {
 +
            return str;
 +
        }
 
         return str.substr(0, 1).toUpperCase() + str.substr(1);
 
         return str.substr(0, 1).toUpperCase() + str.substr(1);
 
     }
 
     }
 
     function wikiPagePath(pageName) {
 
     function wikiPagePath(pageName) {
         return conf.wgArticlePath.replace('$1', encodeURIComponent(pageName).replace(/%3A/g, ':').replace(/%2F/g, '/'));
+
         return conf.wgArticlePath.replace("$1", encodeURIComponent(pageName).replace(/%3A/g, ":").replace(/%2F/g, "/"));
 
     }
 
     }
 
     function escapeRE(str) {
 
     function escapeRE(str) {
         return str.replace(/([\\\^\$\.\?\*\+\(\)\[\]])/g, '\\$1');
+
         return str.replace(/([\\^$.?*+()[\]])/g, "\\$1");
 
     }
 
     }
     function substituteFactory(options) {
+
     function substituteFactory(_options) {
         options = options || {};
+
         var options = _options || {};
         var lead = options.indicator || '$';
+
         var lead = options.indicator || "$";
 
         var indicator = escapeRE(lead);
 
         var indicator = escapeRE(lead);
         var lbrace = escapeRE(options.lbrace || '{');
+
         var lbrace = escapeRE(options.lbrace || "{");
         var rbrace = escapeRE(options.rbrace || '}');
+
         var rbrace = escapeRE(options.rbrace || "}");
         var re;
+
         var re = new RegExp("(?:".concat(indicator, "(").concat(indicator, "))|(?:").concat(indicator, "(\\d+))|(?:").concat(indicator, "(?:").concat(lbrace, "([^").concat(lbrace).concat(rbrace, "]+)").concat(rbrace, "))|(?:").concat(indicator, "(?!(?:[").concat(indicator).concat(lbrace, "]|\\d))(\\S+?)\\b)"), "g");
        re = new RegExp('(?:' + indicator + '(' + indicator + '))|' + '(?:' + indicator + '(\\d+))|' + '(?:' + indicator + '(?:' + lbrace + '([^' + lbrace + rbrace + ']+)' + rbrace + '))|' + '(?:' + indicator + '(?!(?:[' + indicator + lbrace + ']|\\d))(\\S+?)\\b)', 'g');
+
         return function (str, map) {
         return function(str, map) {
+
             if (!map) {
             if (!map) return str;
+
                return str;
             return str.replace(re, function(match, prefix, idx, key, alpha) {
+
            }
                 if (prefix == lead) return lead;
+
             return str.replace(re, function (match, prefix, idx, key, alpha) {
 +
                 if (prefix === lead) {
 +
                    return lead;
 +
                }
 
                 var k = alpha || key || idx;
 
                 var k = alpha || key || idx;
                 var replacement = typeof map[k] === 'function' ? map[k](match, k) : map[k];
+
                 var replacement = typeof map[k] === "function" ? map[k](match, k) : map[k];
                 return typeof replacement === 'string' ? replacement : (replacement || match);
+
                 return typeof replacement === "string" ? replacement : replacement || match;
 
             });
 
             });
 
         };
 
         };
 
     }
 
     }
    var substitute = substituteFactory();
 
    var replaceShortcuts = (function() {
 
        var replaceHash = substituteFactory({
 
            indicator: '#',
 
            lbrace: '[',
 
            rbrace: ']'
 
        });
 
        return function(str, map) {
 
            var s = replaceHash(str, map);
 
            return HotCat.capitalizePageNames ? capitalize(s) : s;
 
        };
 
    })();
 
    var findCatsRE = new RegExp('\\[\\[' + wikiTextBlankOrBidi + '(?:' + HotCat.category_regexp + ')' + wikiTextBlankOrBidi + ':[^\\]]+\\]\\]', 'g');
 
 
     function replaceByBlanks(match) {
 
     function replaceByBlanks(match) {
         return match.replace(/(\s|\S)/g, ' ');
+
         return match.replace(/(\s|\S)/g, " ");
 
     }
 
     }
 
     function find_category(wikitext, category, once) {
 
     function find_category(wikitext, category, once) {
 
         var cat_regex = null;
 
         var cat_regex = null;
         if (HotCat.template_categories[category]) {
+
         if (HC.template_categories[category]) {
             cat_regex = new RegExp('\\{\\{' + wikiTextBlankOrBidi + '(' + HotCat.template_regexp + '(?=' + wikiTextBlankOrBidi + ':))?' + wikiTextBlankOrBidi + '(?:' + HotCat.template_categories[category] + ')' + wikiTextBlankOrBidi + '(\\|.*?)?\\}\\}', 'g');
+
             cat_regex = new RegExp("\\{\\{".concat(wikiTextBlankOrBidi, "(").concat(HC.template_regexp, "(?=").concat(wikiTextBlankOrBidi, ":))?").concat(wikiTextBlankOrBidi, "(?:").concat(HC.template_categories[category], ")").concat(wikiTextBlankOrBidi, "(\\|.*?)?\\}\\}"), "g");
         } else {
+
         }
 +
        else {
 
             var cat_name = escapeRE(category);
 
             var cat_name = escapeRE(category);
 
             var initial = cat_name.substr(0, 1);
 
             var initial = cat_name.substr(0, 1);
             cat_regex = new RegExp('\\[\\[' + wikiTextBlankOrBidi + '(' + HotCat.category_regexp + ')' + wikiTextBlankOrBidi + ':' + wikiTextBlankOrBidi + (initial == '\\' || !HotCat.capitalizePageNames ? initial : '[' + initial.toUpperCase() + initial.toLowerCase() + ']') + cat_name.substring(1).replace(wikiTextBlankRE, wikiTextBlank) + wikiTextBlankOrBidi + '(\\|.*?)?\\]\\]', 'g');
+
             cat_regex = new RegExp("\\[\\[".concat(wikiTextBlankOrBidi, "(").concat(HC.category_regexp, ")").concat(wikiTextBlankOrBidi, ":").concat(wikiTextBlankOrBidi).concat(initial === "\\" || !HC.capitalizePageNames ? initial : "[".concat(initial.toUpperCase()).concat(initial.toLowerCase(), "]")).concat(cat_name.substring(1).replace(wikiTextBlankRE, wikiTextBlank)).concat(wikiTextBlankOrBidi, "(\\|.*?)?\\]\\]"), "g");
 +
        }
 +
        if (once) {
 +
            return cat_regex.exec(wikitext);
 
         }
 
         }
        if (once) return cat_regex.exec(wikitext);
+
         var copiedtext = wikitext.replace(/<!--(\s|\S)*?-->/g, replaceByBlanks).replace(/<nowiki>(\s|\S)*?<\/nowiki>/g, replaceByBlanks);
         var copiedtext = wikitext.replace(/<\!--(\s|\S)*?--\>/g, replaceByBlanks).replace(/<nowiki\>(\s|\S)*?<\/nowiki>/g, replaceByBlanks);
 
 
         var result = [];
 
         var result = [];
 
         var curr_match = null;
 
         var curr_match = null;
361行目: 202行目:
 
         return result;
 
         return result;
 
     }
 
     }
    var interlanguageRE = null;
+
     function change_category(_wikitext, toRemove, toAdd, _key, is_hidden) {
     function change_category(wikitext, toRemove, toAdd, key, is_hidden) {
+
        var key = _key;
 +
        var wikitext = _wikitext;
 
         function find_insertionpoint(wikitext) {
 
         function find_insertionpoint(wikitext) {
             var copiedtext = wikitext.replace(/<\!--(\s|\S)*?--\>/g, replaceByBlanks).replace(/<nowiki\>(\s|\S)*?<\/nowiki>/g, replaceByBlanks);
+
             var copiedtext = wikitext.replace(/<!--(\s|\S)*?-->/g, replaceByBlanks).replace(/<nowiki>(\s|\S)*?<\/nowiki>/g, replaceByBlanks);
 
             var index = -1;
 
             var index = -1;
 
             findCatsRE.lastIndex = 0;
 
             findCatsRE.lastIndex = 0;
             while (findCatsRE.exec(copiedtext) !== null) index = findCatsRE.lastIndex;
+
             while (findCatsRE.exec(copiedtext) !== null) {
 +
                index = findCatsRE.lastIndex;
 +
            }
 
             if (index < 0) {
 
             if (index < 0) {
 
                 var match = null;
 
                 var match = null;
 
                 if (!interlanguageRE) {
 
                 if (!interlanguageRE) {
 
                     match = /((^|\n\r?)(\[\[\s*(([a-z]{2,3}(-[a-z]+)*)|simple|tokipona)\s*:[^\]]+\]\]\s*))+$/.exec(copiedtext);
 
                     match = /((^|\n\r?)(\[\[\s*(([a-z]{2,3}(-[a-z]+)*)|simple|tokipona)\s*:[^\]]+\]\]\s*))+$/.exec(copiedtext);
                 } else {
+
                 }
 +
                else {
 
                     match = interlanguageRE.exec(copiedtext);
 
                     match = interlanguageRE.exec(copiedtext);
 
                 }
 
                 }
                 if (match) index = match.index;
+
                 if (match) {
 +
                    index = match.index;
 +
                }
 
                 return {
 
                 return {
 
                     idx: index,
 
                     idx: index,
386行目: 233行目:
 
             };
 
             };
 
         }
 
         }
         var summary = [];
+
         var summary = [], nameSpace = HC.category_canonical, keyChange = toRemove && toAdd && toRemove === toAdd && toAdd.length;
        var nameSpace = HotCat.category_canonical;
+
         var cat_point = -1, matches;
         var cat_point = -1;
+
         if (key) {
         if (key) key = '|' + key;
+
            key = "|".concat(key);
        var keyChange = (toRemove && toAdd && toRemove == toAdd && toAdd.length > 0);
+
         }
         var matches;
+
         if (toRemove && toRemove.length) {
         if (toRemove && toRemove.length > 0) {
 
 
             matches = find_category(wikitext, toRemove);
 
             matches = find_category(wikitext, toRemove);
             if (!matches || matches.length === 0) {
+
             if (!matches || !matches.length) {
 
                 return {
 
                 return {
 
                     text: wikitext,
 
                     text: wikitext,
                     'summary': summary,
+
                     summary: summary,
                     error: HotCat.messages.cat_notFound.replace(/\$1/g, toRemove)
+
                     error: HC.messages.cat_notFound.replace(/\$1/g, toRemove)
 
                 };
 
                 };
             } else {
+
             }
                var before = wikitext.substring(0, matches[0].match.index);
+
            var before = wikitext.substring(0, matches[0].match.index), after = wikitext.substring(matches[0].match.index + matches[0].match[0].length);
                var after = wikitext.substring(matches[0].match.index + matches[0].match[0].length);
+
            if (matches.length > 1) {
                if (matches.length > 1) {
+
                matches.re.lastIndex = 0;
                    matches.re.lastIndex = 0;
+
                after = after.replace(matches.re, "");
                    after = after.replace(matches.re, "");
+
            }
 +
            if (toAdd) {
 +
                if (key === null) {
 +
                    key = matches[0].match[2];
 
                 }
 
                 }
                if (toAdd) {
+
            }
                    nameSpace = matches[0].match[1] || nameSpace;
+
            var i = before.length - 1;
                    if (key === null) key = matches[0].match[2];
+
            while (i >= 0 && before.charAt(i) !== "\n" && before.substr(i, 1).search(/\s/) >= 0) {
                }
+
                i--;
                var i = before.length - 1;
+
            }
                while (i >= 0 && before.charAt(i) != '\n' && before.substr(i, 1).search(/\s/) >= 0) i--;
+
            var j = 0;
                var j = 0;
+
            while (j < after.length && after.charAt(j) !== "\n" && after.substr(j, 1).search(/\s/) >= 0) {
                while (j < after.length && after.charAt(j) != '\n' && after.substr(j, 1).search(/\s/) >= 0)
+
                j++;
                    j++;
+
            }
                if (i >= 0 && before.charAt(i) == '\n' && (after.length === 0 || j < after.length && after.charAt(j) == '\n'))
+
            if (i >= 0 && before.charAt(i) === "\n" && (!after.length || j < after.length && after.charAt(j) === "\n")) {
                    i--;
+
                i--;
                if (i >= 0) before = before.substring(0, i + 1);
+
            }
                 else before = "";
+
            if (i >= 0) {
                if (j < after.length) after = after.substring(j);
+
                before = before.substring(0, i + 1);
                 else after = "";
+
            }
                if (before.length > 0 && before.substring(before.length - 1).search(/\S/) >= 0 && after.length > 0 && after.substr(0, 1).search(/\S/) >= 0)
+
            else {
                    before += ' ';
+
                 before = "";
                cat_point = before.length;
+
            }
                if (cat_point === 0 && after.length > 0 && after.substr(0, 1) == '\n') {
+
            if (j < after.length) {
                    after = after.substr(1);
+
                after = after.substring(j);
 +
            }
 +
            else {
 +
                 after = "";
 +
            }
 +
            if (before.length && before.substring(before.length - 1).search(/\S/) >= 0 && after.length && after.substr(0, 1).search(/\S/) >= 0) {
 +
                before += " ";
 +
            }
 +
            cat_point = before.length;
 +
            if (cat_point === 0 && after.length && after.substr(0, 1) === "\n") {
 +
                after = after.substr(1);
 +
            }
 +
            wikitext = before + after;
 +
            if (!keyChange) {
 +
                if (HC.template_categories[toRemove]) {
 +
                    summary.push(HC.messages.template_removed.replace(/\$1/g, toRemove));
 
                 }
 
                 }
                 wikitext = before + after;
+
                 else {
                if (!keyChange) {
+
                     summary.push(HC.messages.cat_removed.replace(/\$1/g, toRemove));
                     if (HotCat.template_categories[toRemove]) {
 
                        summary.push(HotCat.messages.template_removed.replace(/\$1/g, toRemove));
 
                    } else {
 
                        summary.push(HotCat.messages.cat_removed.replace(/\$1/g, toRemove));
 
                    }
 
 
                 }
 
                 }
 
             }
 
             }
 
         }
 
         }
         if (toAdd && toAdd.length > 0) {
+
         if (toAdd && toAdd.length) {
 
             matches = find_category(wikitext, toAdd);
 
             matches = find_category(wikitext, toAdd);
             if (matches && matches.length > 0) {
+
             if (matches && matches.length) {
 
                 return {
 
                 return {
 
                     text: wikitext,
 
                     text: wikitext,
                     'summary': summary,
+
                     summary: summary,
                     error: HotCat.messages.cat_exists.replace(/\$1/g, toAdd)
+
                     error: HC.messages.cat_exists.replace(/\$1/g, toAdd)
 
                 };
 
                 };
             } else {
+
             }
                var onCat = false;
+
            var onCat = false;
                if (cat_point < 0) {
+
            if (cat_point < 0) {
                    var point = find_insertionpoint(wikitext);
+
                var point = find_insertionpoint(wikitext);
                    cat_point = point.idx;
+
                cat_point = point.idx;
                    onCat = point.onCat;
+
                onCat = point.onCat;
                } else {
+
            }
                    onCat = true;
+
            else {
 +
                onCat = true;
 +
            }
 +
            var newcatstring = "[[".concat(nameSpace, ":").concat(toAdd).concat(key || "", "]]");
 +
            if (cat_point >= 0) {
 +
                var suffix = wikitext.substring(cat_point);
 +
                wikitext = wikitext.substring(0, cat_point) + (cat_point > 0 ? "\n" : "") + newcatstring + (!onCat ? "\n" : "");
 +
                if (suffix.length && suffix.substr(0, 1) !== "\n") {
 +
                    wikitext += "\n".concat(suffix);
 
                 }
 
                 }
                 var newcatstring = '[[' + nameSpace + ':' + toAdd + (key || "") + ']]';
+
                 else {
                if (cat_point >= 0) {
+
                     wikitext += suffix;
                     var suffix = wikitext.substring(cat_point);
+
                }
                    wikitext = wikitext.substring(0, cat_point) + (cat_point > 0 ? '\n' : "") + newcatstring + (!onCat ? '\n' : "");
+
            }
                    if (suffix.length > 0 && suffix.substr(0, 1) != '\n') {
+
            else {
                        wikitext += '\n' + suffix;
+
                if (wikitext.length && wikitext.substr(wikitext.length - 1, 1) !== "\n") {
                    } else {
+
                     wikitext += "\n";
                        wikitext += suffix;
 
                    }
 
                } else {
 
                    if (wikitext.length > 0 && wikitext.substr(wikitext.length - 1, 1) != '\n')
 
                        wikitext += '\n';
 
                     wikitext += (wikitext.length > 0 ? '\n' : "") + newcatstring;
 
 
                 }
 
                 }
                 if (keyChange) {
+
                 wikitext += (wikitext.length ? "\n" : "") + newcatstring;
                    var k = key || "";
+
            }
                    if (k.length > 0) k = k.substr(1);
+
            if (keyChange) {
                    summary.push(substitute(HotCat.messages.cat_keychange, [null, toAdd, k]));
+
                var k = key || "";
                } else {
+
                if (k.length) {
                    summary.push(HotCat.messages.cat_added.replace(/\$1/g, toAdd));
+
                    k = k.substr(1);
 
                 }
 
                 }
                 if (HotCat.uncat_regexp && !is_hidden) {
+
                 summary.push(substitute(HC.messages.cat_keychange, [null, toAdd, k]));
                    var txt = wikitext.replace(HotCat.uncat_regexp, "");
+
            }
                    if (txt.length != wikitext.length) {
+
            else {
                        wikitext = txt;
+
                summary.push(HC.messages.cat_added.replace(/\$1/g, toAdd));
                        summary.push(HotCat.messages.uncat_removed);
+
            }
                    }
+
            if (HC.uncat_regexp && !is_hidden) {
 +
                var txt = wikitext.replace(HC.uncat_regexp, "");
 +
                if (txt.length !== wikitext.length) {
 +
                    wikitext = txt;
 +
                    summary.push(HC.messages.uncat_removed);
 
                 }
 
                 }
 
             }
 
             }
487行目: 352行目:
 
         return {
 
         return {
 
             text: wikitext,
 
             text: wikitext,
             'summary': summary,
+
             summary: summary,
 
             error: null
 
             error: null
 
         };
 
         };
 
     }
 
     }
 
     function evtKeys(e) {
 
     function evtKeys(e) {
        e = e || window.event || window.Event;
 
 
         var code = 0;
 
         var code = 0;
         if (typeof e.ctrlKey != 'undefined') {
+
         if (e.ctrlKey) {
             if (e.ctrlKey || e.metaKey) code |= 1;
+
             if (e.ctrlKey || e.metaKey) {
             if (e.shiftKey) code |= 2;
+
                code |= 1;
        } else if (typeof e.modifiers != 'undefined') {
+
            }
            if (e.modifiers & (Event.CONTROL_MASK | Event.META_MASK)) code |= 1;
+
             if (e.shiftKey) {
             if (e.modifiers & Event.SHIFT_MASK) code |= 2;
+
                code |= 2;
 +
             }
 
         }
 
         }
 
         return code;
 
         return code;
 
     }
 
     }
 
     function evtKill(e) {
 
     function evtKill(e) {
        e = e || window.event || window.Event;
+
         if (e.preventDefault) {
         if (typeof e.preventDefault != 'undefined') {
 
 
             e.preventDefault();
 
             e.preventDefault();
 
             e.stopPropagation();
 
             e.stopPropagation();
         } else
+
         }
 +
        else {
 
             e.cancelBubble = true;
 
             e.cancelBubble = true;
 +
        }
 
         return false;
 
         return false;
 
     }
 
     }
     function addEvent(node, evt, f, capture) {
+
     function setPage(json) {
         if (window.jQuery && (!capture || !node.addEventListener)) window.jQuery(node).bind(evt, f);
+
        var startTime = null;
        else if (node.addEventListener) node.addEventListener(evt, f, capture);
+
         if (json && json.query) {
        else if (node.attachEvent) node.attachEvent('on' + evt, f);
+
            if (json.query.pages) {
        else node['on' + evt] = f;
+
                var page = json.query.pages[!conf.wgArticleId ? "-1" : "".concat(conf.wgArticleId)];
    }
+
                if (page) {
    var catLine = null;
+
                    if (page.revisions && page.revisions.length) {
    var onUpload = false;
+
                        pageText = page.revisions[0]["*"];
    var editors = [];
+
                        if (page.revisions[0].timestamp) {
    var commitButton = null;
+
                            pageTime = page.revisions[0].timestamp.replace(/\D/g, "");
    var commitForm = null;
+
                        }
    var multiSpan = null;
+
                        if (page.revisions[0].revid) {
    var pageText = null;
+
                            pageTextRevId = page.revisions[0].revid;
    var pageTime = null;
+
                        }
    var pageWatched = false;
+
                        if (page.revisions.length > 1) {
    var watchCreate = false;
+
                            conflictingUser = page.revisions[1].user;
    var watchEdit = false;
+
                        }
    var minorEdits = false;
+
                    }
    var editToken = null;
+
                    if (page.lastrevid) {
    var is_rtl = false;
+
                        lastRevId = page.lastrevid;
    var serverTime = null;
+
                    }
    var lastRevId = null;
+
                    if (page.starttimestamp) {
    var pageTextRevId = null;
+
                        startTime = page.starttimestamp.replace(/\D/g, "");
    var conflictingUser = null;
+
                    }
    var newDOM = false;
+
                    pageWatched = typeof page.watched === "string";
    function setMultiInput() {
+
                    if (json.query.tokens) {
        if (commitButton || onUpload) return;
+
                        editToken = json.query.tokens.csrftoken;
        commitButton = make('input');
+
                    }
        commitButton.type = 'button';
+
                    if (page.langlinks && (!json["query-continue"] || !json["query-continue"].langlinks)) {
        commitButton.value = HotCat.messages.commit;
+
                        var re = "";
        commitButton.onclick = multiSubmit;
+
                        for (var i = 0; i < page.langlinks.length; i++) {
        if (multiSpan) {
+
                            re += (i > 0 ? "|" : "") + page.langlinks[i].lang.replace(/([\\^$.?*+()])/g, "\\$1");
            multiSpan.parentNode.replaceChild(commitButton, multiSpan);
+
                        }
        } else {
+
                        if (re.length) {
            catLine.appendChild(commitButton);
+
                            interlanguageRE = new RegExp("((^|\\n\\r?)(\\[\\[\\s*(".concat(re, ")\\s*:[^\\]]+\\]\\]\\s*))+$"));
        }
+
                        }
    }
+
                    }
    function checkMultiInput() {
+
                }
        if (!commitButton) return;
+
            }
        var has_changes = false;
+
            if (json.query.general) {
        for (var i = 0; i < editors.length; i++) {
+
                if (json.query.general.time && !startTime) {
            if (editors[i].state != CategoryEditor.UNCHANGED) {
+
                    startTime = json.query.general.time.replace(/\D/g, "");
                has_changes = true;
+
                }
                 break;
+
                if (HC.capitalizePageNames === null) {
 +
                    HC.capitalizePageNames = json.query.general["case"] === "first-letter";
 +
                }
 +
            }
 +
            serverTime = startTime;
 +
            if (json.query.userinfo && json.query.userinfo.options) {
 +
                watchCreate = !HC.dont_add_to_watchlist && json.query.userinfo.options.watchcreations === "1";
 +
                watchEdit = !HC.dont_add_to_watchlist && json.query.userinfo.options.watchdefault === "1";
 +
                minorEdits = json.query.userinfo.options.minordefault === 1;
 +
                if (minorEdits) {
 +
                    HC.single_minor = true;
 +
                 }
 
             }
 
             }
 
         }
 
         }
        commitButton.disabled = !has_changes;
 
    }
 
    function currentTimestamp() {
 
        var now = new Date();
 
        var ts = "" + now.getUTCFullYear();
 
        function two(s) {
 
            return s.substr(s.length - 2);
 
        }
 
        ts = ts + two('0' + (now.getUTCMonth() + 1)) + two('0' + now.getUTCDate()) + two('00' + now.getUTCHours()) + two('00' + now.getUTCMinutes()) + two('00' + now.getUTCSeconds());
 
        return ts;
 
 
     }
 
     }
    var saveInProgress = false;
 
 
     function initiateEdit(doEdit, failure) {
 
     function initiateEdit(doEdit, failure) {
         if (saveInProgress) return;
+
         return __awaiter(this, void 0, void 0, function () {
        saveInProgress = true;
+
            function fail() {
        var oldButtonState;
+
                var args = [];
        if (commitButton) {
+
                for (var _i = 0; _i < arguments.length; _i++) {
            oldButtonState = commitButton.disabled;
+
                    args[_i] = arguments[_i];
            commitButton.disabled = true;
+
                }
        }
+
                saveInProgress = false;
        function fail() {
+
                if (commitButton) {
            saveInProgress = false;
+
                    commitButton.disabled = oldButtonState;
            if (commitButton) commitButton.disabled = oldButtonState;
+
                }
            failure.apply(this, arguments);
+
                failure.apply(void 0, __spreadArray([], __read(args), false));
        }
 
        getJSON({
 
            uri: conf.wgServer + conf.wgScriptPath + '/api.php',
 
            data: 'format=json&action=query&rawcontinue=&titles=' + encodeURIComponent(conf.wgPageName) + '&prop=info%7Crevisions%7Clanglinks&inprop=watched&intoken=edit&rvprop=content%7Ctimestamp%7Cids%7Cuser&lllimit=500' + '&rvlimit=2&rvdir=newer&rvstartid=' + conf.wgCurRevisionId + '&meta=siteinfo%7Cuserinfo&uiprop=options',
 
            success: function(json) {
 
                setPage(json);
 
                doEdit(fail);
 
            },
 
            error: function(req) {
 
                fail(req.status + ' ' + req.statusText);
 
 
             }
 
             }
 +
            var oldButtonState, json, req_1;
 +
            return __generator(this, function (_a) {
 +
                switch (_a.label) {
 +
                    case 0:
 +
                        if (saveInProgress) {
 +
                            return [2];
 +
                        }
 +
                        saveInProgress = true;
 +
                        if (commitButton) {
 +
                            oldButtonState = commitButton.disabled;
 +
                            commitButton.disabled = true;
 +
                        }
 +
                        _a.label = 1;
 +
                    case 1:
 +
                        _a.trys.push([1, 3, , 4]);
 +
                        return [4, $.getJSON("".concat(conf.wgServer).concat(conf.wgScriptPath, "/api.php?format=json&action=query&rawcontinue=&titles=").concat(encodeURIComponent(conf.wgPageName), "&prop=info%7Crevisions%7Clanglinks&inprop=watched&rvprop=content%7Ctimestamp%7Cids%7Cuser&lllimit=500&rvlimit=2&rvdir=newer&rvstartid=").concat(conf.wgCurRevisionId, "&meta=siteinfo%7Cuserinfo%7Ctokens&type=csrf&uiprop=options"))];
 +
                    case 2:
 +
                        json = _a.sent();
 +
                        setPage(json);
 +
                        doEdit(fail);
 +
                        return [3, 4];
 +
                    case 3:
 +
                        req_1 = _a.sent();
 +
                        fail("".concat(req_1.status, " ").concat(req_1.statusText));
 +
                        return [3, 4];
 +
                    case 4: return [2];
 +
                }
 +
            });
 
         });
 
         });
 
     }
 
     }
 
     function multiChangeMsg(count) {
 
     function multiChangeMsg(count) {
         var msg = HotCat.messages.multi_change;
+
         var msg = HC.messages.multi_change;
         if (typeof msg != 'string' && msg.length) {
+
         if (typeof msg !== "string" && msg.length) {
             if (window.mw && mw.language && mw.language.convertPlural) {
+
             if (mw.language && mw.language.convertPlural) {
 
                 msg = mw.language.convertPlural(count, msg);
 
                 msg = mw.language.convertPlural(count, msg);
             } else {
+
             }
 +
            else {
 
                 msg = msg[msg.length - 1];
 
                 msg = msg[msg.length - 1];
 
             }
 
             }
 
         }
 
         }
         return substitute(msg, [null, "" + count]);
+
         return substitute(msg, [null, "".concat(count)]);
 +
    }
 +
    function currentTimestamp() {
 +
        var now = new Date();
 +
        var ts = "".concat(now.getUTCFullYear());
 +
        function two(s) {
 +
            return s.substr(s.length - 2);
 +
        }
 +
        ts += two("0".concat(now.getUTCMonth() + 1)) + two("0".concat(now.getUTCDate())) + two("00".concat(now.getUTCHours())) + two("00".concat(now.getUTCMinutes())) + two("00".concat(now.getUTCSeconds()));
 +
        return ts;
 
     }
 
     }
 
     function performChanges(failure, singleEditor) {
 
     function performChanges(failure, singleEditor) {
 
         if (pageText === null) {
 
         if (pageText === null) {
             failure(HotCat.messages.multi_error);
+
             failure(HC.messages.multi_error);
 
             return;
 
             return;
 
         }
 
         }
         if (HotCat.messages.cat_keychange.indexOf('$2') < 0) HotCat.messages.cat_keychange += '"$2"';
+
         if (HC.messages.cat_keychange.indexOf("$2") < 0) {
         if (!HotCat.messages.short_catchange) HotCat.messages.short_catchange = '[[' + HotCat.category_canonical + ':$1]]';
+
            HC.messages.cat_keychange += '"$2"';
 +
        }
 +
         if (!HC.messages.short_catchange) {
 +
            HC.messages.short_catchange = "[[".concat(HC.category_canonical, ":$1]]");
 +
        }
 
         var action;
 
         var action;
         var editingOldVersion = lastRevId !== null && lastRevId != conf.wgCurRevisionId || pageTextRevId !== null && pageTextRevId != conf.wgCurRevisionId;
+
         var selfEditConflict = (lastRevId !== null && lastRevId !== conf.wgCurRevisionId || pageTextRevId !== null && pageTextRevId !== conf.wgCurRevisionId) && conflictingUser && conflictingUser === conf.wgUserName;
        var selfEditConflict = editingOldVersion && conflictingUser && conflictingUser == conf.wgUserName;
+
         if (singleEditor && !singleEditor.noCommit && !HC.no_autocommit && editToken && !selfEditConflict) {
         if (singleEditor && !singleEditor.noCommit && !HotCat.no_autocommit && editToken && !selfEditConflict) {
 
 
             commitForm.wpEditToken.value = editToken;
 
             commitForm.wpEditToken.value = editToken;
 
             action = commitForm.wpDiff;
 
             action = commitForm.wpDiff;
             if (action) action.name = action.value = 'wpSave';
+
             if (action) {
         } else {
+
                action.name = action.value = "wpSave";
 +
                commitForm.wpChangeTags.value += ",".concat(HC.automationChangeTag);
 +
            }
 +
         }
 +
        else {
 
             action = commitForm.wpSave;
 
             action = commitForm.wpSave;
             if (action) action.name = action.value = 'wpDiff';
+
             if (action) {
 +
                action.name = action.value = "wpDiff";
 +
            }
 
         }
 
         }
 
         var result = {
 
         var result = {
 
             text: pageText
 
             text: pageText
 
         };
 
         };
         var changed = [],
+
         var changed = [], added = [], deleted = [], toEdit = singleEditor ? [singleEditor] : editors;
            added = [],
+
         var changes = 0, error = null, edit, i;
            deleted = [],
 
            changes = 0;
 
        var toEdit = !!singleEditor ? [singleEditor] : editors;
 
         var error = null;
 
        var i;
 
 
         for (i = 0; i < toEdit.length; i++) {
 
         for (i = 0; i < toEdit.length; i++) {
             if (toEdit[i].state == CategoryEditor.CHANGED) {
+
             edit = toEdit[i];
                 result = change_category(result.text, toEdit[i].originalCategory, toEdit[i].currentCategory, toEdit[i].currentKey, toEdit[i].currentHidden);
+
            if (edit.state === CategoryEditor.CHANGED) {
 +
                 result = change_category(result.text, edit.originalCategory, edit.currentCategory, edit.currentKey, edit.currentHidden);
 
                 if (!result.error) {
 
                 if (!result.error) {
 
                     changes++;
 
                     changes++;
                     if (!toEdit[i].originalCategory || toEdit[i].originalCategory.length === 0) {
+
                     if (!edit.originalCategory || !edit.originalCategory.length) {
                         added.push(toEdit[i].currentCategory);
+
                         added.push(edit.currentCategory);
                     } else {
+
                     }
 +
                    else {
 
                         changed.push({
 
                         changed.push({
                             from: toEdit[i].originalCategory,
+
                             from: edit.originalCategory,
                             to: toEdit[i].currentCategory
+
                             to: edit.currentCategory
 
                         });
 
                         });
 
                     }
 
                     }
                 } else if (error === null) {
+
                 }
 +
                else if (error === null) {
 
                     error = result.error;
 
                     error = result.error;
 
                 }
 
                 }
             } else if (toEdit[i].state == CategoryEditor.DELETED && toEdit[i].originalCategory && toEdit[i].originalCategory.length > 0) {
+
             }
                 result = change_category(result.text, toEdit[i].originalCategory, null, null, false);
+
            else if (edit.state === CategoryEditor.DELETED && edit.originalCategory && edit.originalCategory.length) {
 +
                 result = change_category(result.text, edit.originalCategory, null, null, false);
 
                 if (!result.error) {
 
                 if (!result.error) {
 
                     changes++;
 
                     changes++;
                     deleted.push(toEdit[i].originalCategory);
+
                     deleted.push(edit.originalCategory);
                 } else if (error === null) {
+
                 }
 +
                else if (error === null) {
 
                     error = result.error;
 
                     error = result.error;
 
                 }
 
                 }
662行目: 565行目:
 
         if (error !== null) {
 
         if (error !== null) {
 
             action = commitForm.wpSave;
 
             action = commitForm.wpSave;
             if (action) action.name = action.value = 'wpDiff';
+
             if (action) {
 +
                action.name = action.value = "wpDiff";
 +
            }
 
         }
 
         }
        commitForm.wpAutoSummary.value = 'd41d8cd98f00b204e9800998ecf8427e';
 
 
         commitForm.wpMinoredit.checked = minorEdits;
 
         commitForm.wpMinoredit.checked = minorEdits;
         commitForm.wpWatchthis.checked = conf.wgArticleId === 0 && watchCreate || watchEdit || pageWatched;
+
         commitForm.wpWatchthis.checked = !conf.wgArticleId && watchCreate || watchEdit || pageWatched;
         if (conf.wgArticleId > 0 || !!singleEditor) {
+
         if (conf.wgArticleId || !!singleEditor) {
             if (changes == 1) {
+
            if (action && action.value === "wpSave") {
                 if (result.summary && result.summary.length > 0)
+
                if (HC.changeTag) {
                     commitForm.wpSummary.value = HotCat.messages.prefix + result.summary.join(HotCat.messages.separator) + HotCat.messages.using;
+
                    commitForm.wpChangeTags.value = "".concat(HC.changeTag, ",").concat(HC.automationChangeTag);
                 commitForm.wpMinoredit.checked = HotCat.single_minor || minorEdits;
+
                    HC.messages.using = "";
             } else if (changes > 1) {
+
                    HC.messages.prefix = "";
 +
                }
 +
            }
 +
            else {
 +
                commitForm.wpAutoSummary.value = HC.changeTag;
 +
            }
 +
             if (changes === 1) {
 +
                 if (result.summary && result.summary.length) {
 +
                     commitForm.wpSummary.value = HC.messages.prefix + result.summary.join(HC.messages.separator) + HC.messages.using;
 +
                }
 +
                 commitForm.wpMinoredit.checked = HC.single_minor || minorEdits;
 +
             }
 +
            else if (changes) {
 
                 var summary = [];
 
                 var summary = [];
 
                 var shortSummary = [];
 
                 var shortSummary = [];
 
                 for (i = 0; i < deleted.length; i++) {
 
                 for (i = 0; i < deleted.length; i++) {
                     summary.push('-' + substitute(HotCat.messages.short_catchange, [null, deleted[i]]));
+
                     summary.push("-".concat(substitute(HC.messages.short_catchange, [null, deleted[i]])));
 +
                }
 +
                if (deleted.length === 1) {
 +
                    shortSummary.push("-".concat(substitute(HC.messages.short_catchange, [null, deleted[0]])));
 +
                }
 +
                else if (deleted.length) {
 +
                    shortSummary.push("- ".concat(multiChangeMsg(deleted.length)));
 
                 }
 
                 }
                if (deleted.length == 1)
 
                    shortSummary.push('-' + substitute(HotCat.messages.short_catchange, [null, deleted[0]]));
 
                else if (deleted.length > 1)
 
                    shortSummary.push('- ' + multiChangeMsg(deleted.length));
 
 
                 for (i = 0; i < added.length; i++) {
 
                 for (i = 0; i < added.length; i++) {
                     summary.push('+' + substitute(HotCat.messages.short_catchange, [null, added[i]]));
+
                     summary.push("+".concat(substitute(HC.messages.short_catchange, [null, added[i]])));
 
                 }
 
                 }
                 if (added.length == 1)
+
                 if (added.length === 1) {
                     shortSummary.push('+' + substitute(HotCat.messages.short_catchange, [null, added[0]]));
+
                     shortSummary.push("+".concat(substitute(HC.messages.short_catchange, [null, added[0]])));
                 else if (added.length > 1)
+
                }
                     shortSummary.push('+ ' + multiChangeMsg(added.length));
+
                 else if (added.length) {
                 var arrow = is_rtl ? '\u2190' : '\u2192';
+
                     shortSummary.push("+ ".concat(multiChangeMsg(added.length)));
 +
                }
 +
                 var arrow = is_rtl ? "←" : "→";
 
                 for (i = 0; i < changed.length; i++) {
 
                 for (i = 0; i < changed.length; i++) {
                     if (changed[i].from != changed[i].to) {
+
                     if (changed[i].from !== changed[i].to) {
                         summary.push('±' + substitute(HotCat.messages.short_catchange, [null, changed[i].from]) + arrow + substitute(HotCat.messages.short_catchange, [null, changed[i].to]));
+
                         summary.push("\u00B1".concat(substitute(HC.messages.short_catchange, [null, changed[i].from])).concat(arrow).concat(substitute(HC.messages.short_catchange, [null, changed[i].to])));
                     } else {
+
                     }
                         summary.push('±' + substitute(HotCat.messages.short_catchange, [null, changed[i].from]));
+
                    else {
 +
                         summary.push("\u00B1".concat(substitute(HC.messages.short_catchange, [null, changed[i].from])));
 
                     }
 
                     }
 
                 }
 
                 }
                 if (changed.length == 1) {
+
                 if (changed.length === 1) {
                     if (changed[0].from != changed[0].to) {
+
                     if (changed[0].from !== changed[0].to) {
                         shortSummary.push('±' + substitute(HotCat.messages.short_catchange, [null, changed[0].from]) + arrow + substitute(HotCat.messages.short_catchange, [null, changed[0].to]));
+
                         shortSummary.push("\u00B1".concat(substitute(HC.messages.short_catchange, [null, changed[0].from])).concat(arrow).concat(substitute(HC.messages.short_catchange, [null, changed[0].to])));
                     } else {
+
                     }
                         shortSummary.push('±' + substitute(HotCat.messages.short_catchange, [null, changed[0].from]));
+
                    else {
 +
                         shortSummary.push("\u00B1".concat(substitute(HC.messages.short_catchange, [null, changed[0].from])));
 
                     }
 
                     }
                } else if (changed.length > 1) {
 
                    shortSummary.push('± ' + multiChangeMsg(changed.length));
 
 
                 }
 
                 }
                 if (summary.length > 0) {
+
                else if (changed.length) {
                     summary = summary.join(HotCat.messages.separator);
+
                    shortSummary.push("\u00B1 ".concat(multiChangeMsg(changed.length)));
                     if (summary.length > 200 - HotCat.messages.prefix.length - HotCat.messages.using.length) {
+
                }
                         summary = shortSummary.join(HotCat.messages.separator);
+
                 if (summary.length) {
 +
                     summary = summary.join(HC.messages.separator);
 +
                     if (summary.length > 200 - HC.messages.prefix.length - HC.messages.using.length) {
 +
                         summary = shortSummary.join(HC.messages.separator);
 
                     }
 
                     }
                     commitForm.wpSummary.value = HotCat.messages.prefix + summary + HotCat.messages.using;
+
                     commitForm.wpSummary.value = HC.messages.prefix + summary + HC.messages.using;
 
                 }
 
                 }
 
             }
 
             }
718行目: 641行目:
 
         commitForm.wpStarttime.value = serverTime || currentTimestamp();
 
         commitForm.wpStarttime.value = serverTime || currentTimestamp();
 
         commitForm.wpEdittime.value = pageTime || commitForm.wpStarttime.value;
 
         commitForm.wpEdittime.value = pageTime || commitForm.wpStarttime.value;
         if (selfEditConflict) commitForm.oldid.value = "" + (pageTextRevId || conf.wgCurRevisionId);
+
         if (selfEditConflict) {
 +
            commitForm.oldid.value = "".concat(pageTextRevId || conf.wgCurRevisionId);
 +
        }
 
         commitForm.hcCommit.click();
 
         commitForm.hcCommit.click();
 
     }
 
     }
     function resolveMulti(toResolve, callback) {
+
     function resolveOne(page, toResolve) {
         var i;
+
         var cats = page.categories, lks = page.links, is_hidden = page.categoryinfo && typeof page.categoryinfo.hidden === "string", is_missing = typeof page.missing === "string";
 +
        var is_dab = false, is_redir = typeof page.redirect === "string", i;
 
         for (i = 0; i < toResolve.length; i++) {
 
         for (i = 0; i < toResolve.length; i++) {
             toResolve[i].dab = null;
+
             if (i && toResolve[i].dabInputCleaned !== page.title.substring(page.title.indexOf(":") + 1)) {
            toResolve[i].dabInput = toResolve[i].lastInput;
+
                 continue;
        }
 
        if (noSuggestions) {
 
            callback(toResolve);
 
            return;
 
        }
 
        var args = 'action=query&prop=info%7Clinks%7Ccategories%7Ccategoryinfo&plnamespace=14' + '&pllimit=' + (toResolve.length * 10) + '&cllimit=' + (toResolve.length * 10) + '&format=json&titles=';
 
        for (i = 0; i < toResolve.length; i++) {
 
            var v = toResolve[i].dabInput;
 
            v = replaceShortcuts(v, HotCat.shortcuts);
 
            toResolve[i].dabInputCleaned = v;
 
            args += encodeURIComponent('Category:' + v);
 
            if (i + 1 < toResolve.length) args += '%7C';
 
        }
 
        getJSON({
 
            uri: conf.wgServer + conf.wgScriptPath + '/api.php',
 
            data: args,
 
            success: function(json) {
 
                resolveRedirects(toResolve, json);
 
                callback(toResolve);
 
            },
 
            error: function(req) {
 
                 if (!req) noSuggestions = true;
 
                callback(toResolve);
 
 
             }
 
             }
        });
 
    }
 
    function resolveOne(page, toResolve) {
 
        var cats = page.categories;
 
        var lks = page.links;
 
        var is_dab = false;
 
        var is_redir = typeof page.redirect == 'string';
 
        var is_hidden = page.categoryinfo && typeof page.categoryinfo.hidden == 'string';
 
        var is_missing = typeof page.missing == 'string';
 
        var i;
 
        for (i = 0; i < toResolve.length; i++) {
 
            if (toResolve.length > 1 && toResolve[i].dabInputCleaned != page.title.substring(page.title.indexOf(':') + 1)) continue;
 
 
             toResolve[i].currentHidden = is_hidden;
 
             toResolve[i].currentHidden = is_hidden;
 
             toResolve[i].inputExists = !is_missing;
 
             toResolve[i].inputExists = !is_missing;
             toResolve[i].icon.src = armorUri(is_missing ? HotCat.existsNo : HotCat.existsYes);
+
             toResolve[i].icon.src = is_missing ? HC.existsNo : HC.existsYes;
 +
        }
 +
        if (is_missing) {
 +
            return;
 
         }
 
         }
        if (is_missing) return;
+
         if (!is_redir && cats && (HC.disambig_category || HC.redir_category)) {
         if (!is_redir && cats && (HotCat.disambig_category || HotCat.redir_category)) {
 
 
             for (var c = 0; c < cats.length; c++) {
 
             for (var c = 0; c < cats.length; c++) {
                 var cat = cats[c]['title'];
+
                 var cat = cats[c].title;
 
                 if (cat) {
 
                 if (cat) {
                     cat = cat.substring(cat.indexOf(':') + 1).replace(/_/g, ' ');
+
                     cat = cat.substring(cat.indexOf(":") + 1).replace(/_/g, " ");
                     if (cat == HotCat.disambig_category) {
+
                     if (cat === HC.disambig_category) {
 
                         is_dab = true;
 
                         is_dab = true;
 
                         break;
 
                         break;
                     } else if (cat == HotCat.redir_category) {
+
                     }
 +
                    else if (cat === HC.redir_category) {
 
                         is_redir = true;
 
                         is_redir = true;
 
                         break;
 
                         break;
782行目: 676行目:
 
             }
 
             }
 
         }
 
         }
         if (!is_redir && !is_dab) return;
+
         if (!is_redir && !is_dab) {
         if (!lks || lks.length === 0) return;
+
            return;
 +
        }
 +
         if (!lks || !lks.length) {
 +
            return;
 +
        }
 
         var titles = [];
 
         var titles = [];
 
         for (i = 0; i < lks.length; i++) {
 
         for (i = 0; i < lks.length; i++) {
             if (lks[i]['ns'] == 14 && lks[i]['title'] && lks[i]['title'].length > 0) {
+
             if (lks[i].ns === 14 && lks[i].title && lks[i].title.length) {
                 var match = lks[i]['title'];
+
                 var match = lks[i].title;
                 match = match.substring(match.indexOf(':') + 1);
+
                 match = match.substring(match.indexOf(":") + 1);
                 if (!HotCat.blacklist || !HotCat.blacklist.test(match)) {
+
                 if (!HC.blacklist || !HC.blacklist.test(match)) {
 
                     titles.push(match);
 
                     titles.push(match);
 
                 }
 
                 }
 
             }
 
             }
 
         }
 
         }
         if (titles.length === 0) {
+
         if (!titles.length) {
 
             return;
 
             return;
 
         }
 
         }
 
         for (i = 0; i < toResolve.length; i++) {
 
         for (i = 0; i < toResolve.length; i++) {
             if (toResolve.length > 1 && toResolve[i].dabInputCleaned != page.title.substring(page.title.indexOf(':') + 1)) continue;
+
             if (i && toResolve[i].dabInputCleaned !== page.title.substring(page.title.indexOf(":") + 1)) {
 +
                continue;
 +
            }
 
             toResolve[i].inputExists = true;
 
             toResolve[i].inputExists = true;
             toResolve[i].icon.src = armorUri(HotCat.existsYes);
+
             toResolve[i].icon.src = HC.existsYes;
 
             if (titles.length > 1) {
 
             if (titles.length > 1) {
 
                 toResolve[i].dab = titles;
 
                 toResolve[i].dab = titles;
             } else {
+
             }
                 toResolve[i].text.value = titles[0] + (toResolve[i].currentKey !== null ? '|' + toResolve[i].currentKey : "");
+
            else {
 +
                 toResolve[i].text.value = titles[0] + (toResolve[i].currentKey !== null ? "|".concat(toResolve[i].currentKey) : "");
 
             }
 
             }
 
         }
 
         }
 
     }
 
     }
 
     function resolveRedirects(toResolve, params) {
 
     function resolveRedirects(toResolve, params) {
         if (!params || !params.query || !params.query.pages) return;
+
         if (!params || !params.query || !params.query.pages) {
        for (var p in params.query.pages) resolveOne(params.query.pages[p], toResolve);
+
             return;
    }
 
    function multiSubmit() {
 
        var toResolve = [];
 
        for (var i = 0; i < editors.length; i++) {
 
             if (editors[i].state == CategoryEditor.CHANGE_PENDING || editors[i].state == CategoryEditor.OPEN)
 
                toResolve.push(editors[i]);
 
 
         }
 
         }
         if (toResolve.length === 0) {
+
         for (var p in params.query.pages) {
             initiateEdit(function(failure) {
+
             resolveOne(params.query.pages[p], toResolve);
                performChanges(failure);
 
            }, function(msg) {
 
                alert(msg);
 
            });
 
            return;
 
 
         }
 
         }
        resolveMulti(toResolve, function(resolved) {
 
            var firstDab = null;
 
            var dontChange = false;
 
            for (var i = 0; i < resolved.length; i++) {
 
                if (resolved[i].lastInput != resolved[i].dabInput) {
 
                    dontChange = true;
 
                } else {
 
                    if (resolved[i].dab) {
 
                        if (!firstDab) firstDab = resolved[i];
 
                    } else {
 
                        if (resolved[i].acceptCheck(true)) resolved[i].commit();
 
                    }
 
                }
 
            }
 
            if (firstDab) {
 
                showDab(firstDab);
 
            } else if (!dontChange) {
 
                initiateEdit(function(failure) {
 
                    performChanges(failure);
 
                }, function(msg) {
 
                    alert(msg);
 
                });
 
            }
 
        });
 
 
     }
 
     }
     var cat_prefix = null;
+
     function resolveMulti(toResolve, callback) {
    var noSuggestions = false;
+
         return __awaiter(this, void 0, void 0, function () {
    var suggestionEngines = {
+
             var i, args, v, json, req_2;
         opensearch: {
+
             return __generator(this, function (_a) {
             uri: '/api.php?format=json&action=opensearch&namespace=14&limit=30&search=Category:$1',
+
                 switch (_a.label) {
             handler: function(queryResult, queryKey) {
+
                     case 0:
                 if (queryResult && queryResult.length >= 2) {
+
                        for (i = 0; i < toResolve.length; i++) {
                     var key = queryResult[0].substring(queryResult[0].indexOf(':') + 1);
+
                            toResolve[i].dab = null;
                    var titles = queryResult[1];
+
                             toResolve[i].dabInput = toResolve[i].lastInput;
                    var exists = false;
+
                        }
                    if (!cat_prefix) cat_prefix = new RegExp('^(' + HotCat.category_regexp + ':)');
+
                        if (noSuggestions) {
                    for (var i = 0; i < titles.length; i++) {
+
                             callback(toResolve);
                        cat_prefix.lastIndex = 0;
+
                             return [2];
                        var m = cat_prefix.exec(titles[i]);
 
                        if (m && m.length > 1) {
 
                             titles[i] = titles[i].substring(titles[i].indexOf(':') + 1);
 
                            if (key == titles[i]) exists = true;
 
                        } else {
 
                             titles.splice(i, 1);
 
                             i--;
 
 
                         }
 
                         }
                    }
+
                         args = "action=query&prop=info%7Clinks%7Ccategories%7Ccategoryinfo&plnamespace=14&pllimit=".concat(toResolve.length * 10, "&cllimit=").concat(toResolve.length * 10, "&format=json&titles=");
                    titles.exists = exists;
+
                        for (i = 0; i < toResolve.length; i++) {
                    if (queryKey != key) titles.normalized = key;
+
                            v = toResolve[i].dabInput;
                    return titles;
+
                            v = replaceShortcuts(v, HC.shortcuts);
                }
+
                            toResolve[i].dabInputCleaned = v;
                return null;
+
                             args += encodeURIComponent("Category:".concat(v));
            }
+
                             if (i + 1 < toResolve.length) {
        },
+
                                 args += "%7C";
        internalsearch: {
 
            uri: '/api.php?format=json&action=query&list=allpages&apnamespace=14&aplimit=30&apfrom=$1&apprefix=$1',
 
            handler: function(queryResult, queryKey) {
 
                if (queryResult && queryResult.query && queryResult.query.allpages) {
 
                    var titles = queryResult.query.allpages;
 
                    for (var i = 0; i < titles.length; i++) {
 
                         titles[i] = titles[i].title.substring(titles[i].title.indexOf(':') + 1);
 
                    }
 
                    return titles;
 
                }
 
                return null;
 
            }
 
        },
 
        exists: {
 
            uri: '/api.php?format=json&action=query&prop=info&titles=Category:$1',
 
            handler: function(queryResult, queryKey) {
 
                if (queryResult && queryResult.query && queryResult.query.pages && !queryResult.query.pages[-1]) {
 
                    for (var p in queryResult.query.pages) {
 
                        var title = queryResult.query.pages[p].title;
 
                        title = title.substring(title.indexOf(':') + 1);
 
                        var titles = [title];
 
                        titles.exists = true;
 
                        if (queryKey != title) titles.normalized = title;
 
                        return titles;
 
                    }
 
                }
 
                return null;
 
            }
 
        },
 
        subcategories: {
 
            uri: '/api.php?format=json&action=query&list=categorymembers' + (function(version) {
 
                var m = version.match(/^(\d+)\.(\d+)/);
 
                var major = 0,
 
                    minor = 0;
 
                if (m && m.length > 1) {
 
                    major = parseInt(m[1], 10);
 
                    minor = (m.length > 2 ? parseInt(m[2], 10) : 0);
 
                }
 
                if (major > 1 || major === 1 && minor > 17) return '&cmtype=subcat';
 
                return '&cmnamespace=14';
 
            })(conf.wgVersion) + '&cmlimit=max&cmtitle=Category:$1',
 
            handler: function(queryResult, queryKey) {
 
                if (queryResult && queryResult.query && queryResult.query.categorymembers) {
 
                    var titles = queryResult.query.categorymembers;
 
                    for (var i = 0; i < titles.length; i++) {
 
                        titles[i] = titles[i].title.substring(titles[i].title.indexOf(':') + 1);
 
                    }
 
                    return titles;
 
                }
 
                return null;
 
            }
 
        },
 
        parentcategories: {
 
            uri: '/api.php?format=json&action=query&prop=categories&titles=Category:$1&cllimit=max',
 
            handler: function(queryResult, queryKey) {
 
                if (queryResult && queryResult.query && queryResult.query.pages) {
 
                    for (var p in queryResult.query.pages) {
 
                        if (queryResult.query.pages[p].categories) {
 
                             var titles = queryResult.query.pages[p].categories;
 
                             for (var i = 0; i < titles.length; i++) {
 
                                 titles[i] = titles[i].title.substring(titles[i].title.indexOf(':') + 1);
 
 
                             }
 
                             }
                            return titles;
 
 
                         }
 
                         }
                     }
+
                        _a.label = 1;
 +
                     case 1:
 +
                        _a.trys.push([1, 3, , 4]);
 +
                        return [4, $.getJSON("".concat(conf.wgServer).concat(conf.wgScriptPath, "/api.php?").concat(args))];
 +
                    case 2:
 +
                        json = _a.sent();
 +
                        resolveRedirects(toResolve, json);
 +
                        callback(toResolve);
 +
                        return [3, 4];
 +
                    case 3:
 +
                        req_2 = _a.sent();
 +
                        if (!req_2) {
 +
                            noSuggestions = true;
 +
                        }
 +
                        callback(toResolve);
 +
                        return [3, 4];
 +
                    case 4: return [2];
 
                 }
 
                 }
                return null;
+
             });
             }
+
         });
        }
 
    };
 
    var suggestionConfigs = {
 
        searchindex: {
 
            name: 'Search index',
 
            engines: ['opensearch'],
 
            cache: {},
 
            show: true,
 
            temp: false,
 
            noCompletion: false
 
        },
 
        pagelist: {
 
            name: 'Page list',
 
            engines: ['internalsearch', 'exists'],
 
            cache: {},
 
            show: true,
 
            temp: false,
 
            noCompletion: false
 
         },
 
        combined: {
 
            name: 'Combined search',
 
            engines: ['opensearch', 'internalsearch'],
 
            cache: {},
 
            show: true,
 
            temp: false,
 
            noCompletion: false
 
        },
 
        subcat: {
 
            name: 'Subcategories',
 
            engines: ['subcategories'],
 
            cache: {},
 
            show: true,
 
            temp: true,
 
            noCompletion: true
 
        },
 
        parentcat: {
 
            name: 'Parent categories',
 
            engines: ['parentcategories'],
 
            cache: {},
 
            show: true,
 
            temp: true,
 
            noCompletion: true
 
        }
 
    };
 
    function CategoryEditor() {
 
        this.initialize.apply(this, arguments);
 
 
     }
 
     }
    CategoryEditor.UNCHANGED = 0;
+
     function makeActive(which) {
    CategoryEditor.OPEN = 1;
+
         if (which.is_active) {
    CategoryEditor.CHANGE_PENDING = 2;
+
             return;
    CategoryEditor.CHANGED = 3;
 
    CategoryEditor.DELETED = 4;
 
    var dummyElement = make('\xa0', true);
 
     function forceRedraw() {
 
         if (!is_ie6) return;
 
        if (dummyElement.parentNode) {
 
             document.body.removeChild(dummyElement);
 
        } else {
 
            document.body.appendChild(dummyElement);
 
 
         }
 
         }
    }
 
    var BS = 8,
 
        TAB = 9,
 
        RET = 13,
 
        ESC = 27,
 
        SPACE = 32,
 
        PGUP = 33,
 
        PGDOWN = 34,
 
        UP = 38,
 
        DOWN = 40,
 
        DEL = 46,
 
        IME = 229;
 
    function makeActive(which) {
 
        if (which.is_active) return;
 
 
         for (var i = 0; i < editors.length; i++) {
 
         for (var i = 0; i < editors.length; i++) {
             if (editors[i] !== which) editors[i].inactivate();
+
             if (editors[i] !== which) {
 +
                editors[i].inactivate();
 +
            }
 
         }
 
         }
 
         which.is_active = true;
 
         which.is_active = true;
 
         if (which.dab) {
 
         if (which.dab) {
 
             showDab(which);
 
             showDab(which);
         } else {
+
         }
 +
        else {
 
             var expectedInput = which.lastRealInput || which.lastInput || "";
 
             var expectedInput = which.lastRealInput || which.lastInput || "";
 
             var actualValue = which.text.value || "";
 
             var actualValue = which.text.value || "";
             if (expectedInput.length === 0 && actualValue.length > 0 || expectedInput.length > 0 && actualValue.indexOf(expectedInput) !== 0) {
+
             if (!expectedInput.length && actualValue.length || expectedInput.length && actualValue.indexOf(expectedInput)) {
 
                 which.showsList = false;
 
                 which.showsList = false;
                 var v = actualValue.split('|');
+
                 var v = actualValue.split("|");
 
                 which.lastRealInput = which.lastInput = v[0];
 
                 which.lastRealInput = which.lastInput = v[0];
                 if (v.length > 1) which.currentKey = v[1];
+
                 if (v.length > 1) {
                 if (which.lastSelection) which.lastSelection = {
+
                    which.currentKey = v[1];
                    start: v[0].length,
+
                }
                    end: v[0].length
+
                 if (which.lastSelection) {
                 };
+
                    which.lastSelection = {
 +
                        start: v[0].length,
 +
                        end: v[0].length
 +
                    };
 +
                 }
 +
            }
 +
            if (which.showsList) {
 +
                which.displayList();
 
             }
 
             }
            if (which.showsList) which.displayList();
 
 
             if (which.lastSelection) {
 
             if (which.lastSelection) {
 
                 if (is_webkit) {
 
                 if (is_webkit) {
                     window.setTimeout(function() {
+
                     window.setTimeout(function () {
 
                         which.setSelection(which.lastSelection.start, which.lastSelection.end);
 
                         which.setSelection(which.lastSelection.start, which.lastSelection.end);
 
                     }, 1);
 
                     }, 1);
                 } else {
+
                 }
 +
                else {
 
                     which.setSelection(which.lastSelection.start, which.lastSelection.end);
 
                     which.setSelection(which.lastSelection.start, which.lastSelection.end);
 
                 }
 
                 }
1,056行目: 810行目:
 
         if (!which.is_active) {
 
         if (!which.is_active) {
 
             makeActive(which);
 
             makeActive(which);
         } else {
+
         }
 +
        else {
 
             which.showSuggestions(which.dab, false, null, null);
 
             which.showSuggestions(which.dab, false, null, null);
 
             which.dab = null;
 
             which.dab = null;
 
         }
 
         }
 
     }
 
     }
     CategoryEditor.prototype = {
+
     function multiSubmit() {
        initialize: function(line, span, after, key, is_hidden) {
+
        var toResolve = [];
            if (!span) {
+
        for (var i = 0; i < editors.length; i++) {
                this.isAddCategory = true;
+
            if (editors[i].state === CategoryEditor.CHANGE_PENDING || editors[i].state === CategoryEditor.OPEN) {
                this.originalCategory = "";
+
                 toResolve.push(editors[i]);
                this.originalKey = null;
 
                this.originalExists = false;
 
                if (!newDOM) {
 
                    span = make('span');
 
                    span.className = 'noprint';
 
                    if (key) {
 
                        span.appendChild(make(' | ', true));
 
                        if (after) {
 
                            after.parentNode.insertBefore(span, after.nextSibling);
 
                            after = after.nextSibling;
 
                        } else {
 
                            line.appendChild(span);
 
                        }
 
                    } else if (line.firstChild) {
 
                        span.appendChild(make(' ', true));
 
                        line.appendChild(span);
 
                    }
 
                }
 
                this.linkSpan = make('span');
 
                this.linkSpan.className = 'noprint nopopups hotcatlink';
 
                var lk = make('a');
 
                lk.href = '#catlinks';
 
                lk.onclick = bind(this.open, this);
 
                lk.appendChild(make(HotCat.links.add, true));
 
                lk.title = HotCat.tooltips.add;
 
                this.linkSpan.appendChild(lk);
 
                span = make(newDOM ? 'li' : 'span');
 
                span.className = 'noprint';
 
                if (is_rtl) span.dir = 'rtl';
 
                span.appendChild(this.linkSpan);
 
                if (after)
 
                    after.parentNode.insertBefore(span, after.nextSibling);
 
                else
 
                    line.appendChild(span);
 
                this.normalLinks = null;
 
                this.undelLink = null;
 
                this.catLink = null;
 
            } else {
 
                 if (is_rtl) span.dir = 'rtl';
 
                this.isAddCategory = false;
 
                this.catLink = span.firstChild;
 
                this.originalCategory = after;
 
                this.originalKey = (key && key.length > 1) ? key.substr(1) : null;
 
                this.originalExists = !hasClass(this.catLink, 'new');
 
                this.makeLinkSpan();
 
                if (!this.originalExists && this.upDownLinks) this.upDownLinks.style.display = 'none';
 
                span.appendChild(this.linkSpan);
 
 
             }
 
             }
            this.originalHidden = is_hidden;
+
        }
            this.line = line;
+
        if (!toResolve.length) {
            this.engine = HotCat.suggestions;
+
             initiateEdit(function (failure) {
            this.span = span;
+
                performChanges(failure);
            this.currentCategory = this.originalCategory;
+
             }, function (msg) {
            this.currentExists = this.originalExists;
+
                 oouiDialog.alert(oouiDialog.sanitize(msg), {
            this.currentHidden = this.originalHidden;
+
                    title: "HotCat 小工具"
            this.currentKey = this.originalKey;
+
                 });
            this.state = CategoryEditor.UNCHANGED;
+
             });
            this.lastSavedState = CategoryEditor.UNCHANGED;
+
            return;
            this.lastSavedCategory = this.originalCategory;
+
        }
            this.lastSavedKey = this.originalKey;
+
        resolveMulti(toResolve, function (resolved) {
            this.lastSavedExists = this.originalExists;
+
            var firstDab = null;
            this.lastSavedHidden = this.originalHidden;
+
            var dontChange = false;
            if (this.catLink && this.currentKey) {
+
            for (var i = 0; i < resolved.length; i++) {
                this.catLink.title = this.currentKey;
+
                if (resolved[i].lastInput !== resolved[i].dabInput) {
             }
+
                     dontChange = true;
            editors[editors.length] = this;
 
        },
 
        makeLinkSpan: function() {
 
            this.normalLinks = make('span');
 
             var lk = null;
 
            if (this.originalCategory && this.originalCategory.length > 0) {
 
                 lk = make('a');
 
                lk.href = '#catlinks';
 
                lk.onclick = bind(this.remove, this);
 
                lk.appendChild(make(HotCat.links.remove, true));
 
                lk.title = HotCat.tooltips.remove;
 
                 this.normalLinks.appendChild(make(' ', true));
 
                this.normalLinks.appendChild(lk);
 
             }
 
            if (!HotCat.template_categories[this.originalCategory]) {
 
                lk = make('a');
 
                lk.href = '#catlinks';
 
                lk.onclick = bind(this.open, this);
 
                lk.appendChild(make(HotCat.links.change, true));
 
                lk.title = HotCat.tooltips.change;
 
                this.normalLinks.appendChild(make(' ', true));
 
                this.normalLinks.appendChild(lk);
 
                if (!noSuggestions && HotCat.use_up_down) {
 
                    this.upDownLinks = make('span');
 
                    lk = make('a');
 
                    lk.href = '#catlinks';
 
                    lk.onclick = bind(this.down, this);
 
                    lk.appendChild(make(HotCat.links.down, true));
 
                    lk.title = HotCat.tooltips.down;
 
                    this.upDownLinks.appendChild(make(' ', true));
 
                    this.upDownLinks.appendChild(lk);
 
                    lk = make('a');
 
                    lk.href = '#catlinks';
 
                    lk.onclick = bind(this.up, this);
 
                    lk.appendChild(make(HotCat.links.up, true));
 
                     lk.title = HotCat.tooltips.up;
 
                    this.upDownLinks.appendChild(make(' ', true));
 
                    this.upDownLinks.appendChild(lk);
 
                    this.normalLinks.appendChild(this.upDownLinks);
 
 
                 }
 
                 }
            }
+
                else {
            this.linkSpan = make('span');
+
                    if (resolved[i].dab) {
            this.linkSpan.className = 'noprint nopopups hotcatlink';
+
                         if (!firstDab) {
            this.linkSpan.appendChild(this.normalLinks);
+
                             firstDab = resolved[i];
            this.undelLink = make('span');
 
            this.undelLink.className = 'nopopups hotcatlink';
 
            this.undelLink.style.display = 'none';
 
            lk = make('a');
 
            lk.href = '#catlinks';
 
            lk.onclick = bind(this.restore, this);
 
            lk.appendChild(make(HotCat.links.restore, true));
 
            lk.title = HotCat.tooltips.restore;
 
            this.undelLink.appendChild(make(' ', true));
 
            this.undelLink.appendChild(lk);
 
            this.linkSpan.appendChild(this.undelLink);
 
        },
 
        invokeSuggestions: function(dont_autocomplete) {
 
            if (this.engine && suggestionConfigs[this.engine] && suggestionConfigs[this.engine].temp && !dont_autocomplete) {
 
                this.engine = HotCat.suggestions;
 
            }
 
            this.state = CategoryEditor.CHANGE_PENDING;
 
            var self = this;
 
            window.setTimeout(function() {
 
                self.textchange(dont_autocomplete);
 
            }, HotCat.suggest_delay);
 
        },
 
        makeForm: function() {
 
            var form = make('form');
 
            form.method = 'POST';
 
            form.onsubmit = bind(this.accept, this);
 
            this.form = form;
 
            var self = this;
 
            var text = make('input');
 
            text.type = 'text';
 
            text.size = HotCat.editbox_width;
 
            if (!noSuggestions) {
 
                text.onkeyup = function(evt) {
 
                    evt = evt || window.event || window.Event;
 
                    var key = evt.keyCode || 0;
 
                    if (self.ime && self.lastKey === IME && !self.usesComposition && (key === TAB || key === RET || key == ESC || key === SPACE)) self.ime = false;
 
                    if (self.ime) return true;
 
                    if (key === UP || key === DOWN || key === PGUP || key === PGDOWN) {
 
                         if (self.keyCount === 0) return self.processKey(evt);
 
                    } else {
 
                        if (key === ESC && self.lastKey !== IME) {
 
                             if (!self.resetKeySelection()) {
 
                                self.cancel();
 
                                return;
 
                            }
 
 
                         }
 
                         }
                        self.invokeSuggestions(key === BS || key === DEL || key === ESC);
 
                    }
 
                    return true;
 
                };
 
                text.onkeydown = function(evt) {
 
                    evt = evt || window.event || window.Event;
 
                    var key = evt.keyCode || 0;
 
                    self.lastKey = key;
 
                    self.keyCount = 0;
 
                    if (!self.ime && key === IME && !self.usesComposition) {
 
                        self.ime = true;
 
                    } else if (self.ime && key !== IME && !(key >= 16 && key <= 20 || key >= 91 && key <= 93 || key === 144)) {
 
                        self.ime = false;
 
                    }
 
                    if (self.ime) return true;
 
                    if (key === RET) return self.accept(evt);
 
                    return (key === ESC) ? evtKill(evt) : true;
 
                };
 
                text.onkeypress = function(evt) {
 
                    self.keyCount++;
 
                    return self.processKey(evt);
 
                };
 
                addEvent(text, 'focus', function() {
 
                    makeActive(self);
 
                });
 
                addEvent(text, (typeof text.onbeforedeactivate != 'undefined' && text.createTextRange) ? 'beforedeactivate' : 'blur', bind(this.saveView, this));
 
                try {
 
                    addEvent(text, 'compositionstart', function(evt) {
 
                        self.lastKey = IME;
 
                        self.usesComposition = true;
 
                        self.ime = true;
 
                    });
 
                    addEvent(text, 'compositionend', function(evt) {
 
                        self.lastKey = IME;
 
                        self.usesComposition = true;
 
                        self.ime = false;
 
                    });
 
                    addEvent(text, 'textInput', function(evt) {
 
                        self.ime = false;
 
                        self.invokeSuggestions(false);
 
                    });
 
                } catch (any) {}
 
                addEvent(text, 'blur', function(evt) {
 
                    self.usesComposition = false;
 
                    self.ime = false;
 
                });
 
            }
 
            this.text = text;
 
            this.icon = make('img');
 
            var list = null;
 
            if (!noSuggestions) {
 
                list = make('select');
 
                list.onclick = function(e) {
 
                    if (self.highlightSuggestion(0)) self.textchange(false, true);
 
                };
 
                list.ondblclick = function(e) {
 
                    if (self.highlightSuggestion(0)) self.accept(e);
 
                };
 
                list.onchange = function(e) {
 
                    self.highlightSuggestion(0);
 
                    self.text.focus();
 
                };
 
                list.onkeyup = function(evt) {
 
                    evt = evt || window.event || window.Event;
 
                    if (evt.keyCode === ESC) {
 
                        self.resetKeySelection();
 
                        self.text.focus();
 
                        window.setTimeout(function() {
 
                            self.textchange(true);
 
                        }, HotCat.suggest_delay);
 
                    } else if (evt.keyCode === RET) {
 
                        self.accept(evt);
 
 
                     }
 
                     }
                };
+
                     else {
                if (!HotCat.fixed_search) {
+
                         if (resolved[i].acceptCheck(true)) {
                     var engineSelector = make('select');
+
                             resolved[i].commit();
                    for (var key in suggestionConfigs) {
 
                         if (suggestionConfigs[key].show) {
 
                            var opt = make('option');
 
                            opt.value = key;
 
                            if (key == this.engine) opt.selected = true;
 
                             opt.appendChild(make(suggestionConfigs[key].name, true));
 
                            engineSelector.appendChild(opt);
 
 
                         }
 
                         }
 
                     }
 
                     }
                    engineSelector.onchange = function() {
 
                        self.engine = self.engineSelector.options[self.engineSelector.selectedIndex].value;
 
                        self.text.focus();
 
                        self.textchange(true, true);
 
                    };
 
                    this.engineSelector = engineSelector;
 
 
                 }
 
                 }
 
             }
 
             }
             this.list = list;
+
             if (firstDab) {
            function button_label(id, defaultText) {
+
                 showDab(firstDab);
                var label = null;
 
                if (onUpload && typeof UFUI != 'undefined' && typeof UIElements != 'undefined' && typeof UFUI.getLabel == 'function') {
 
                    try {
 
                        label = UFUI.getLabel(id, true);
 
                        while (label && label.nodeType != 3) label = label.firstChild;
 
                    } catch (ex) {
 
                        label = null;
 
                    }
 
                }
 
                 if (!label || !label.data) return defaultText;
 
                return label.data;
 
 
             }
 
             }
             var OK = make('input');
+
             else if (!dontChange) {
            OK.type = 'button';
+
                 initiateEdit(function (failure) {
            OK.value = button_label('wpOkUploadLbl', HotCat.messages.ok);
+
                     performChanges(failure);
            OK.onclick = bind(this.accept, this);
+
                 }, function (msg) {
            this.ok = OK;
+
                     oouiDialog.alert(oouiDialog.sanitize(msg), {
            var cancel = make('input');
+
                        title: "HotCat 小工具"
            cancel.type = 'button';
+
                     });
            cancel.value = button_label('wpCancelUploadLbl', HotCat.messages.cancel);
 
            cancel.onclick = bind(this.cancel, this);
 
            this.cancelButton = cancel;
 
            var span = make('span');
 
            span.className = 'hotcatinput';
 
            span.style.position = 'relative';
 
            span.appendChild(text);
 
            span.appendChild(make('\xa0', true));
 
            span.style.whiteSpace = 'nowrap';
 
            if (list) span.appendChild(list);
 
            if (this.engineSelector) span.appendChild(this.engineSelector);
 
            if (!noSuggestions) span.appendChild(this.icon);
 
            span.appendChild(OK);
 
            span.appendChild(cancel);
 
            form.appendChild(span);
 
            form.style.display = 'none';
 
            this.span.appendChild(form);
 
        },
 
        display: function(evt) {
 
            if (this.isAddCategory && !onUpload) {
 
                var newAdder = new CategoryEditor(this.line, null, this.span, true);
 
            }
 
            if (!commitButton && !onUpload) {
 
                for (var i = 0; i < editors.length; i++) {
 
                    if (editors[i].state != CategoryEditor.UNCHANGED) {
 
                        setMultiInput();
 
                        break;
 
                    }
 
                }
 
            }
 
            if (!this.form) {
 
                this.makeForm();
 
            }
 
            if (this.list) this.list.style.display = 'none';
 
            if (this.engineSelector) this.engineSelector.style.display = 'none';
 
            this.currentCategory = this.lastSavedCategory;
 
            this.currentExists = this.lastSavedExists;
 
            this.currentHidden = this.lastSavedHidden;
 
            this.currentKey = this.lastSavedKey;
 
            this.icon.src = armorUri(this.currentExists ? HotCat.existsYes : HotCat.existsNo);
 
            this.text.value = this.currentCategory + (this.currentKey !== null ? '|' + this.currentKey : "");
 
            this.originalState = this.state;
 
            this.lastInput = this.currentCategory;
 
            this.inputExists = this.currentExists;
 
            this.state = this.state == CategoryEditor.UNCHANGED ? CategoryEditor.OPEN : CategoryEditor.CHANGE_PENDING;
 
            this.lastSelection = {
 
                 start: this.currentCategory.length,
 
                end: this.currentCategory.length
 
            };
 
            this.showsList = false;
 
            if (this.catLink) this.catLink.style.display = 'none';
 
            this.linkSpan.style.display = 'none';
 
            this.form.style.display = 'inline';
 
            this.ok.disabled = false;
 
            var result = evtKill(evt);
 
            this.text.focus();
 
            this.text.readOnly = false;
 
            checkMultiInput();
 
            return result;
 
        },
 
        show: function(evt, engine, readOnly) {
 
            var result = this.display(evt);
 
            var v = this.lastSavedCategory;
 
            if (v.length === 0) return result;
 
            this.text.readOnly = !!readOnly;
 
            this.engine = engine;
 
            this.textchange(false, true);
 
            forceRedraw();
 
            return result;
 
        },
 
        open: function(evt) {
 
            return this.show(evt, (this.engine && suggestionConfigs[this.engine].temp) ? HotCat.suggestions : this.engine);
 
        },
 
        down: function(evt) {
 
            return this.show(evt, 'subcat', true);
 
        },
 
        up: function(evt) {
 
            return this.show(evt, 'parentcat');
 
        },
 
        cancel: function() {
 
            if (this.isAddCategory && !onUpload) {
 
                this.removeEditor();
 
                return;
 
            }
 
            this.inactivate();
 
            this.form.style.display = 'none';
 
            if (this.catLink) this.catLink.style.display = "";
 
            this.linkSpan.style.display = "";
 
            this.state = this.originalState;
 
            this.currentCategory = this.lastSavedCategory;
 
            this.currentKey = this.lastSavedKey;
 
            this.currentExists = this.lastSavedExists;
 
            this.currentHidden = this.lastSavedHidden;
 
            if (this.catLink) {
 
                if (this.currentKey && this.currentKey.length > 0) {
 
                     this.catLink.title = this.currentKey;
 
                } else {
 
                    this.catLink.title = "";
 
                }
 
            }
 
            if (this.state == CategoryEditor.UNCHANGED) {
 
                if (this.catLink) this.catLink.style.backgroundColor = 'transparent';
 
            } else {
 
                if (!onUpload) {
 
                    try {
 
                        this.catLink.style.backgroundColor = HotCat.bg_changed;
 
                    } catch (ex) {}
 
                 }
 
            }
 
            checkMultiInput();
 
            forceRedraw();
 
        },
 
        removeEditor: function() {
 
            if (!newDOM) {
 
                var next = this.span.nextSibling;
 
                if (next) next.parentNode.removeChild(next);
 
            }
 
            this.span.parentNode.removeChild(this.span);
 
            for (var i = 0; i < editors.length; i++) {
 
                if (editors[i] == this) {
 
                     editors.splice(i, 1);
 
                    break;
 
                }
 
            }
 
            checkMultiInput();
 
            var self = this;
 
            window.setTimeout(function() {
 
                delete self;
 
            }, 10);
 
        },
 
        rollback: function(evt) {
 
            this.undoLink.parentNode.removeChild(this.undoLink);
 
            this.undoLink = null;
 
            this.currentCategory = this.originalCategory;
 
            this.currentKey = this.originalKey;
 
            this.currentExists = this.originalExists;
 
            this.currentHidden = this.originalHidden;
 
            this.lastSavedCategory = this.originalCategory;
 
            this.lastSavedKey = this.originalKey;
 
            this.lastSavedExists = this.originalExists;
 
            this.lastSavedHidden = this.originalHidden;
 
            this.state = CategoryEditor.UNCHANGED;
 
            if (!this.currentCategory || this.currentCategory.length === 0) {
 
                this.removeEditor();
 
            } else {
 
                this.catLink.removeChild(this.catLink.firstChild);
 
                this.catLink.appendChild(make(this.currentCategory, true));
 
                this.catLink.href = wikiPagePath(HotCat.category_canonical + ':' + this.currentCategory);
 
                this.catLink.title = this.currentKey || "";
 
                this.catLink.className = this.currentExists ? "" : 'new';
 
                this.catLink.style.backgroundColor = 'transparent';
 
                if (this.upDownLinks) this.upDownLinks.style.display = this.currentExists ? "" : 'none';
 
                checkMultiInput();
 
            }
 
            return evtKill(evt);
 
        },
 
        inactivate: function() {
 
            if (this.list) this.list.style.display = 'none';
 
            if (this.engineSelector) this.engineSelector.style.display = 'none';
 
            this.is_active = false;
 
        },
 
        acceptCheck: function(dontCheck) {
 
            this.sanitizeInput();
 
            var value = this.text.value.split('|');
 
            var key = null;
 
            if (value.length > 1) key = value[1];
 
            var v = value[0].replace(/_/g, ' ').replace(/^\s+|\s+$/g, "");
 
            if (HotCat.capitalizePageNames) v = capitalize(v);
 
            this.lastInput = v;
 
            v = replaceShortcuts(v, HotCat.shortcuts);
 
            if (v.length === 0) {
 
                this.cancel();
 
                return false;
 
            }
 
            if (!dontCheck && (conf.wgNamespaceNumber === 14 && v == conf.wgTitle || HotCat.blacklist && HotCat.blacklist.test(v))) {
 
                this.cancel();
 
                return false;
 
            }
 
            this.currentCategory = v;
 
            this.currentKey = key;
 
            this.currentExists = this.inputExists;
 
            return true;
 
        },
 
        accept: function(evt) {
 
            this.noCommit = (evtKeys(evt) & 1) !== 0;
 
            var result = evtKill(evt);
 
            if (this.acceptCheck()) {
 
                var toResolve = [this];
 
                var original = this.currentCategory;
 
                resolveMulti(toResolve, function(resolved) {
 
                    if (resolved[0].dab) {
 
                        showDab(resolved[0]);
 
                     } else {
 
                        if (resolved[0].acceptCheck(true)) {
 
                            resolved[0].commit((resolved[0].currentCategory != original) ? HotCat.messages.cat_resolved.replace(/\$1/g, original) : null);
 
                        }
 
                    }
 
 
                 });
 
                 });
 
             }
 
             }
             return result;
+
        });
         },
+
    }
         close: function() {
+
    function setMultiInput() {
            if (!this.catLink) {
+
        if (commitButton || onUpload) {
                this.catLink = make('a');
+
             return;
                this.catLink.appendChild(make('foo', true));
+
         }
                this.catLink.style.display = 'none';
+
         commitButton = make("input");
                this.span.insertBefore(this.catLink, this.span.firstChild.nextSibling);
+
        commitButton.type = "button";
 +
        commitButton.value = HC.messages.commit;
 +
        commitButton.onclick = multiSubmit;
 +
        if (multiSpan) {
 +
            multiSpan.parentNode.replaceChild(commitButton, multiSpan);
 +
        }
 +
        else {
 +
            catLine.appendChild(commitButton);
 +
        }
 +
    }
 +
    function checkMultiInput() {
 +
        if (!commitButton) {
 +
            return;
 +
        }
 +
        var hasChanges = false;
 +
        for (var i = 0; i < editors.length; i++) {
 +
            if (editors[i].state !== CategoryEditor.UNCHANGED) {
 +
                hasChanges = true;
 +
                break;
 
             }
 
             }
             this.catLink.removeChild(this.catLink.firstChild);
+
        }
             this.catLink.appendChild(make(this.currentCategory, true));
+
        commitButton.disabled = !hasChanges;
            this.catLink.href = wikiPagePath(HotCat.category_canonical + ':' + this.currentCategory);
+
    }
            this.catLink.className = this.currentExists ? "" : 'new';
+
    function forceRedraw() {
            this.lastSavedCategory = this.currentCategory;
+
        if (dummyElement.parentNode) {
            this.lastSavedKey = this.currentKey;
+
             document.body.removeChild(dummyElement);
            this.lastSavedExists = this.currentExists;
+
        }
            this.lastSavedHidden = this.currentHidden;
+
        else {
            this.inactivate();
+
             document.body.appendChild(dummyElement);
            this.form.style.display = 'none';
+
        }
            this.catLink.title = this.currentKey || "";
+
    }
            this.catLink.style.display = "";
+
    function initialize() {
            if (this.isAddCategory) {
+
        var config = window.JSconfig !== undefined && window.JSconfig.keys ? window.JSconfig.keys : {};
                if (onUpload) {
+
        HC.dont_add_to_watchlist = window.hotcat_dont_add_to_watchlist !== undefined ? !!window.hotcat_dont_add_to_watchlist : config.HotCatDontAddToWatchlist !== undefined ? config.HotCatDontAddToWatchlist : HC.dont_add_to_watchlist;
                    var newAdder = new CategoryEditor(this.line, null, this.span, true);
+
        HC.no_autocommit = window.hotcat_no_autocommit !== undefined ? !!window.hotcat_no_autocommit : config.HotCatNoAutoCommit !== undefined ? config.HotCatNoAutoCommit : conf.wgNamespaceNumber % 2 ? true : HC.no_autocommit;
                }
+
        HC.del_needs_diff = window.hotcat_del_needs_diff !== undefined ? !!window.hotcat_del_needs_diff : config.HotCatDelNeedsDiff !== undefined ? config.HotCatDelNeedsDiff : HC.del_needs_diff;
                this.isAddCategory = false;
+
        HC.suggest_delay = window.hotcat_suggestion_delay || config.HotCatSuggestionDelay || HC.suggest_delay;
                this.linkSpan.parentNode.removeChild(this.linkSpan);
+
        HC.editbox_width = window.hotcat_editbox_width || config.HotCatEditBoxWidth || HC.editbox_width;
                this.makeLinkSpan();
+
        HC.suggestions = window.hotcat_suggestions || config.HotCatSuggestions || HC.suggestions;
                this.span.appendChild(this.linkSpan);
+
        if (typeof HC.suggestions !== "string" || !suggestionConfigs[HC.suggestions]) {
            }
+
            HC.suggestions = "combined";
            if (!this.undoLink) {
+
        }
                var span = make('span');
+
        HC.fixed_search = window.hotcat_suggestions_fixed !== undefined ? !!window.hotcat_suggestions_fixed : config.HotCatFixedSuggestions !== undefined ? config.HotCatFixedSuggestions : HC.fixed_search;
                var lk = make('a');
+
        HC.single_minor = window.hotcat_single_changes_are_minor !== undefined ? !!window.hotcat_single_changes_are_minor : config.HotCatMinorSingleChanges !== undefined ? config.HotCatMinorSingleChanges : HC.single_minor;
                lk.href = '#catlinks';
+
        HC.bg_changed = window.hotcat_changed_background || config.HotCatChangedBackground || HC.bg_changed;
                lk.onclick = bind(this.rollback, this);
+
        HC.use_up_down = window.hotcat_use_category_links !== undefined ? !!window.hotcat_use_category_links : config.HotCatUseCategoryLinks !== undefined ? config.HotCatUseCategoryLinks : HC.use_up_down;
                lk.appendChild(make(HotCat.links.undo, true));
+
        HC.listSize = window.hotcat_list_size || config.HotCatListSize || HC.listSize;
                lk.title = HotCat.tooltips.undo;
+
        if (conf.wgDBname !== "commonswiki") {
                span.appendChild(make(' ', true));
+
            HC.changeTag = config.HotCatChangeTag || "";
                span.appendChild(lk);
+
        }
                this.normalLinks.appendChild(span);
+
        if (HC.changeTag) {
                 this.undoLink = span;
+
            var eForm_1 = document.editform, catRegExp_1 = new RegExp("^\\[\\[(".concat(HC.category_regexp, "):"));
                 if (!onUpload) {
+
            var oldTxt_1;
                     try {
+
            var isMinorChange_1 = function () {
                        this.catLink.style.backgroundColor = HotCat.bg_changed;
+
                 var newTxt = eForm_1.wpTextbox1;
                    } catch (ex) {}
+
                 if (!newTxt) {
 +
                     return;
 
                 }
 
                 }
            }
+
                newTxt = newTxt.value;
            if (this.upDownLinks) this.upDownLinks.style.display = this.lastSavedExists ? "" : 'none';
+
                var oldLines = oldTxt_1.match(/^.*$/gm), newLines = newTxt.match(/^.*$/gm);
            this.linkSpan.style.display = "";
+
                 var cArr;
            this.state = CategoryEditor.CHANGED;
+
                 var except = function (aArr, bArr) {
            checkMultiInput();
+
                     var result = [];
            forceRedraw();
+
                     var lArr, sArr;
        },
+
                    if (aArr.length < bArr.length) {
        commit: function(comment) {
+
                        lArr = bArr;
            if ((this.currentCategory == this.originalCategory && (this.currentKey == this.originalKey || this.currentKey === null && this.originalKey.length === 0)) || conf.wgNamespaceNumber == 14 && this.currentCategory == conf.wgTitle || HotCat.blacklist && HotCat.blacklist.test(this.currentCategory)) {
+
                         sArr = aArr;
                this.cancel();
 
                 return;
 
            }
 
            if (commitButton || onUpload) {
 
                this.close();
 
            } else {
 
                this.close();
 
                 var self = this;
 
                initiateEdit(function(failure) {
 
                     performChanges(failure, self);
 
                }, function(msg) {
 
                     alert(msg);
 
                });
 
            }
 
        },
 
        remove: function(evt) {
 
            this.doRemove(evtKeys(evt) & 1);
 
            return evtKill(evt);
 
        },
 
        doRemove: function(noCommit) {
 
            if (this.isAddCategory) {
 
                this.cancel();
 
                return;
 
            }
 
            if (!commitButton && !onUpload) {
 
                for (var i = 0; i < editors.length; i++) {
 
                    if (editors[i].state != CategoryEditor.UNCHANGED) {
 
                        setMultiInput();
 
                         break;
 
 
                     }
 
                     }
                }
+
                     else {
            }
+
                         lArr = aArr;
            if (commitButton) {
+
                         sArr = bArr;
                this.catLink.title = "";
 
                this.catLink.style.cssText += '; text-decoration : line-through !important;';
 
                try {
 
                    this.catLink.style.backgroundColor = HotCat.bg_changed;
 
                } catch (ex) {}
 
                this.originalState = this.state;
 
                this.state = CategoryEditor.DELETED;
 
                this.normalLinks.style.display = 'none';
 
                this.undelLink.style.display = "";
 
                checkMultiInput();
 
            } else {
 
                if (onUpload) {
 
                     this.removeEditor();
 
                } else {
 
                    this.originalState = this.state;
 
                    this.state = CategoryEditor.DELETED;
 
                    this.noCommit = noCommit || HotCat.del_needs_diff;
 
                    var self = this;
 
                    initiateEdit(function(failure) {
 
                         performChanges(failure, self);
 
                    }, function(msg) {
 
                        self.state = self.originalState;
 
                        alert(msg);
 
                    });
 
                }
 
            }
 
        },
 
        restore: function(evt) {
 
            this.catLink.title = this.currentKey || "";
 
            this.catLink.style.textDecoration = "";
 
            this.state = this.originalState;
 
            if (this.state == CategoryEditor.UNCHANGED) {
 
                this.catLink.style.backgroundColor = 'transparent';
 
            } else {
 
                try {
 
                    this.catLink.style.backgroundColor = HotCat.bg_changed;
 
                } catch (ex) {}
 
            }
 
            this.normalLinks.style.display = "";
 
            this.undelLink.style.display = 'none';
 
            checkMultiInput();
 
            return evtKill(evt);
 
        },
 
        selectEngine: function(engineName) {
 
            if (!this.engineSelector) return;
 
            for (var i = 0; i < this.engineSelector.options.length; i++) {
 
                this.engineSelector.options[i].selected = this.engineSelector.options[i].value == engineName;
 
            }
 
        },
 
        sanitizeInput: function() {
 
            var v = this.text.value || "";
 
            v = v.replace(/^(\s|_)+/, "");
 
            var re = new RegExp('^(' + HotCat.category_regexp + '):');
 
            if (re.test(v)) {
 
                v = v.substring(v.indexOf(':') + 1).replace(/^(\s|_)+/, "");
 
            }
 
            if (HotCat.capitalizePageNames) v = capitalize(v);
 
            if (this.text.value !== null && this.text.value != v)
 
                this.text.value = v;
 
        },
 
        makeCall: function(url, callbackObj, engine, queryKey, cleanKey) {
 
            var cb = callbackObj;
 
            var e = engine;
 
            var v = queryKey;
 
            var z = cleanKey;
 
            var thisObj = this;
 
            function done() {
 
                cb.callsMade++;
 
                if (cb.callsMade === cb.nofCalls) {
 
                    if (cb.exists) cb.allTitles.exists = true;
 
                    if (cb.normalized) cb.allTitles.normalized = cb.normalized;
 
                    if (!cb.dontCache && !suggestionConfigs[cb.engineName].cache[z]) {
 
                         suggestionConfigs[cb.engineName].cache[z] = cb.allTitles;
 
 
                     }
 
                     }
                     thisObj.text.readOnly = false;
+
                     for (var i = 0; i < lArr.length; i++) {
                    if (!cb.cancelled) thisObj.showSuggestions(cb.allTitles, cb.noCompletion, v, cb.engineName);
+
                        var item = lArr[i];
                    if (cb === thisObj.callbackObj) thisObj.callbackObj = null;
+
                        var ind = $.inArray(item, sArr);
                    delete cb;
+
                         if (ind === -1) {
                }
+
                             result.push(item);
            }
 
            getJSON({
 
                uri: url,
 
                success: function(json) {
 
                    var titles = e.handler(json, z);
 
                    if (titles && titles.length > 0) {
 
                         if (cb.allTitles === null) {
 
                             cb.allTitles = titles;
 
                        } else {
 
                            cb.allTitles = cb.allTitles.concat(titles);
 
 
                         }
 
                         }
                         if (titles.exists) cb.exists = true;
+
                         else {
                        if (titles.normalized) cb.normalized = titles.normalized;
+
                             sArr.splice(ind, 1);
                    }
 
                    done();
 
                },
 
                error: function(req) {
 
                    if (!req) noSuggestions = true;
 
                    cb.dontCache = true;
 
                    done();
 
                }
 
            });
 
        },
 
        callbackObj: null,
 
        textchange: function(dont_autocomplete, force) {
 
            makeActive(this);
 
            this.sanitizeInput();
 
            var v = this.text.value;
 
            var pipe = v.indexOf('|');
 
            if (pipe >= 0) {
 
                this.currentKey = v.substring(pipe + 1);
 
                v = v.substring(0, pipe);
 
            } else {
 
                this.currentKey = null;
 
            }
 
            if (this.lastInput == v && !force) return;
 
            if (this.lastInput != v) checkMultiInput();
 
            this.lastInput = v;
 
            this.lastRealInput = v;
 
            this.ok.disabled = v.length > 0 && HotCat.blacklist && HotCat.blacklist.test(v);
 
            if (noSuggestions) {
 
                if (this.list) this.list.style.display = 'none';
 
                if (this.engineSelector) this.engineSelector.style.display = 'none';
 
                if (this.icon) this.icon.style.display = 'none';
 
                return;
 
            }
 
            if (v.length === 0) {
 
                this.showSuggestions([]);
 
                return;
 
            }
 
            var cleanKey = v.replace(/[\u200E\u200F\u202A-\u202E]/g, "").replace(wikiTextBlankRE, ' ');
 
            cleanKey = replaceShortcuts(cleanKey, HotCat.shortcuts);
 
            cleanKey = cleanKey.replace(/^\s+|\s+$/g, '');
 
            if (cleanKey.length === 0) {
 
                this.showSuggestions([]);
 
                return;
 
            }
 
            if (this.callbackObj) this.callbackObj.cancelled = true;
 
            var engineName = suggestionConfigs[this.engine] ? this.engine : 'combined';
 
            dont_autocomplete = dont_autocomplete || suggestionConfigs[engineName].noCompletion;
 
            if (suggestionConfigs[engineName].cache[cleanKey]) {
 
                this.showSuggestions(suggestionConfigs[engineName].cache[cleanKey], dont_autocomplete, v, engineName);
 
                return;
 
            }
 
            var engines = suggestionConfigs[engineName].engines;
 
            this.callbackObj = {
 
                allTitles: null,
 
                callsMade: 0,
 
                nofCalls: engines.length,
 
                noCompletion: dont_autocomplete,
 
                engineName: engineName
 
            };
 
            this.makeCalls(engines, this.callbackObj, v, cleanKey);
 
        },
 
        makeCalls: function(engines, cb, v, cleanKey) {
 
            for (var j = 0; j < engines.length; j++) {
 
                var engine = suggestionEngines[engines[j]];
 
                var url = conf.wgServer + conf.wgScriptPath + engine.uri.replace(/\$1/g, encodeURIComponent(cleanKey));
 
                this.makeCall(url, cb, engine, v, cleanKey);
 
            }
 
        },
 
        showSuggestions: function(titles, dontAutocomplete, queryKey, engineName) {
 
            this.text.readOnly = false;
 
            this.dab = null;
 
            this.showsList = false;
 
            if (!this.list) return;
 
            if (noSuggestions) {
 
                if (this.list) this.list.style.display = 'none';
 
                if (this.engineSelector) this.engineSelector.style.display = 'none';
 
                if (this.icon) this.icon.style.display = 'none';
 
                this.inputExists = true;
 
                return;
 
            }
 
            this.engineName = engineName;
 
            if (engineName) {
 
                if (!this.engineSelector) this.engineName = null;
 
            } else {
 
                if (this.engineSelector) this.engineSelector.style.display = 'none';
 
            }
 
            if (queryKey) {
 
                if (this.lastInput.indexOf(queryKey) !== 0) return;
 
                if (this.lastQuery && this.lastInput.indexOf(this.lastQuery) === 0 && this.lastQuery.length > queryKey.length)
 
                    return;
 
            }
 
            this.lastQuery = queryKey;
 
            var v = this.text.value.split('|');
 
            var key = v.length > 1 ? '|' + v[1] : "";
 
            v = (HotCat.capitalizePageNames ? capitalize(v[0]) : v[0]);
 
            var vNormalized = v;
 
            var knownToExist = titles && titles.exists;
 
            var i;
 
            if (titles) {
 
                if (titles.normalized && v.indexOf(queryKey) === 0) {
 
                    vNormalized = titles.normalized + v.substring(queryKey.length);
 
                }
 
                var vLow = vNormalized.toLowerCase();
 
                if (HotCat.blacklist) {
 
                    for (i = 0; i < titles.length; i++) {
 
                        if (HotCat.blacklist.test(titles[i])) {
 
                             titles.splice(i, 1);
 
                            i--;
 
 
                         }
 
                         }
 
                     }
 
                     }
                }
+
                     return result.concat(sArr);
                titles.sort(function(a, b) {
 
                    if (a == b) return 0;
 
                    if (a.indexOf(b) === 0) return 1;
 
                    if (b.indexOf(a) === 0) return -1;
 
                    var prefixMatchA = (a.indexOf(vNormalized) === 0 ? 1 : 0);
 
                    var prefixMatchB = (b.indexOf(vNormalized) === 0 ? 1 : 0);
 
                    if (prefixMatchA != prefixMatchB) return prefixMatchB - prefixMatchA;
 
                    var aLow = a.toLowerCase(),
 
                        bLow = b.toLowerCase();
 
                    prefixMatchA = (aLow.indexOf(vLow) === 0 ? 1 : 0);
 
                    prefixMatchB = (bLow.indexOf(vLow) === 0 ? 1 : 0);
 
                    if (prefixMatchA != prefixMatchB) return prefixMatchB - prefixMatchA;
 
                    if (a < b) return -1;
 
                    if (b < a) return 1;
 
                    return 0;
 
                });
 
                for (i = 0; i < titles.length; i++) {
 
                    if (i + 1 < titles.length && titles[i] == titles[i + 1] || conf.wgNamespaceNumber == 14 && titles[i] == conf.wgTitle) {
 
                        titles.splice(i, 1);
 
                        i--;
 
                    }
 
                }
 
            }
 
            if (!titles || titles.length === 0) {
 
                if (this.list) this.list.style.display = 'none';
 
                if (this.engineSelector) this.engineSelector.style.display = 'none';
 
                if (engineName && suggestionConfigs[engineName] && !suggestionConfigs[engineName].temp) {
 
                    if (this.icon) this.icon.src = armorUri(HotCat.existsNo);
 
                    this.inputExists = false;
 
                }
 
                return;
 
            }
 
            var firstTitle = titles[0];
 
            var completed = this.autoComplete(firstTitle, v, vNormalized, key, dontAutocomplete);
 
            var existing = completed || knownToExist || firstTitle == replaceShortcuts(v, HotCat.shortcuts);
 
            if (engineName && suggestionConfigs[engineName] && !suggestionConfigs[engineName].temp) {
 
                this.icon.src = armorUri(existing ? HotCat.existsYes : HotCat.existsNo);
 
                this.inputExists = existing;
 
            }
 
            if (completed) {
 
                this.lastInput = firstTitle;
 
                if (titles.length === 1) {
 
                    this.list.style.display = 'none';
 
                    if (this.engineSelector) this.engineSelector.style.display = 'none';
 
                    return;
 
                }
 
            }
 
            while (this.list.firstChild) this.list.removeChild(this.list.firstChild);
 
            for (i = 0; i < titles.length; i++) {
 
                var opt = make('option');
 
                opt.appendChild(make(titles[i], true));
 
                opt.selected = completed && (i === 0);
 
                this.list.appendChild(opt);
 
            }
 
            this.displayList();
 
        },
 
        displayList: function() {
 
            this.showsList = true;
 
            if (!this.is_active) {
 
                this.list.style.display = 'none';
 
                if (this.engineSelector) this.engineSelector.style.display = 'none';
 
                return;
 
            }
 
            var nofItems = (this.list.options.length > HotCat.list_size ? HotCat.list_size : this.list.options.length);
 
            if (nofItems <= 1) nofItems = 2;
 
            this.list.size = nofItems;
 
            this.list.style.align = is_rtl ? 'right' : 'left';
 
            this.list.style.zIndex = 5;
 
            this.list.style.position = 'absolute';
 
            var anchor = is_rtl ? 'right' : 'left';
 
            var listh = 0;
 
            if (this.list.style.display == 'none') {
 
                this.list.style.top = this.text.offsetTop + 'px';
 
                this.list.style[anchor] = '-10000px';
 
                this.list.style.display = "";
 
                listh = this.list.offsetHeight;
 
                this.list.style.display = 'none';
 
            } else {
 
                listh = this.list.offsetHeight;
 
            }
 
            var maxListHeight = listh;
 
            if (nofItems < HotCat.list_size) maxListHeight = (listh / nofItems) * HotCat.list_size;
 
            function viewport(what) {
 
                if (is_webkit && !document.evaluate)
 
                    return window['inner' + what];
 
                var s = 'client' + what;
 
                if (window.opera) return document.body[s];
 
                return (document.documentElement ? document.documentElement[s] : 0) || document.body[s] || 0;
 
            }
 
            function scroll_offset(what) {
 
                var s = 'scroll' + what;
 
                var result = (document.documentElement ? document.documentElement[s] : 0) || document.body[s] || 0;
 
                if (is_rtl && what == 'Left') {
 
                    if (result < 0) result = -result;
 
                    if (!is_webkit && !is_ie_lt8) {
 
                        result = scroll_offset('Width') - viewport('Width') - result;
 
                     }
 
                }
 
                return result;
 
            }
 
            function position(node) {
 
                if (node.getBoundingClientRect) {
 
                    var box = node.getBoundingClientRect();
 
                    return {
 
                        x: Math.round(box.left + scroll_offset('Left')),
 
                        y: Math.round(box.top + scroll_offset('Top'))
 
                    };
 
                }
 
                var t = 0,
 
                    l = 0;
 
                do {
 
                    t = t + (node.offsetTop || 0);
 
                    l = l + (node.offsetLeft || 0);
 
                    node = node.offsetParent;
 
                } while (node);
 
                return {
 
                    x: l,
 
                    y: t
 
 
                 };
 
                 };
            }
+
                cArr = except(oldLines, newLines);
            var textPos = position(this.text);
+
                if (cArr.length) {
            var nl = 0;
+
                    cArr = $.grep(cArr, function (_c) {
            var nt = 0;
+
                        var c = $.trim(_c);
            var offset = 0;
+
                        return c && !catRegExp_1.test(c);
            var textBoxWidth = this.text.offsetWidth || this.text.clientWidth;
+
                     });
            if (this.engineName) {
 
                this.engineSelector.style.zIndex = 5;
 
                this.engineSelector.style.position = 'absolute';
 
                this.engineSelector.style.width = textBoxWidth + 'px';
 
                if (this.engineSelector.style.display == 'none') {
 
                    this.engineSelector.style[anchor] = '-10000px';
 
                    this.engineSelector.style.top = '0px';
 
                    this.engineSelector.style.display = "";
 
                    offset = this.engineSelector.offsetHeight;
 
                     this.engineSelector.style.display = 'none';
 
                } else {
 
                    offset = this.engineSelector.offsetHeight;
 
 
                 }
 
                 }
                 this.engineSelector.style[anchor] = nl + 'px';
+
                 if (!cArr.length) {
            }
+
                     oldTxt_1 = newTxt;
            if (textPos.y < maxListHeight + offset + 1) {
+
                     return true;
                nt = this.text.offsetHeight + offset + 1;
 
                if (this.engineName) this.engineSelector.style.top = this.text.offsetHeight + 'px';
 
            } else {
 
                nt = -listh - offset - 1;
 
                if (this.engineName) this.engineSelector.style.top = -(offset + 1) + 'px';
 
            }
 
            this.list.style.top = nt + 'px';
 
            this.list.style.width = "";
 
            this.list.style[anchor] = nl + 'px';
 
            if (this.engineName) {
 
                this.selectEngine(this.engineName);
 
                this.engineSelector.style.display = "";
 
            }
 
            this.list.style.display = 'block';
 
            if (this.list.offsetWidth < textBoxWidth) {
 
                this.list.style.width = textBoxWidth + 'px';
 
                return;
 
            }
 
            var scroll = scroll_offset('Left');
 
            var view_w = viewport('Width');
 
            var w = this.list.offsetWidth;
 
            var l_pos = position(this.list);
 
            var left = l_pos.x;
 
            var right = left + w;
 
            if (left < scroll || right > scroll + view_w) {
 
                if (w > view_w) {
 
                    w = view_w;
 
                    this.list.style.width = w + 'px';
 
                    if (is_rtl) {
 
                        left = right - w;
 
                    } else {
 
                        right = left + w;
 
                    }
 
                }
 
                var relative_offset = 0;
 
                if (left < scroll) {
 
                    relative_offset = scroll - left;
 
                } else if (right > scroll + view_w) {
 
                    relative_offset = -(right - scroll - view_w);
 
                }
 
                if (is_rtl) relative_offset = -relative_offset;
 
                if (relative_offset !== 0) {
 
                    this.list.style[anchor] = (nl + relative_offset) + 'px';
 
                }
 
            }
 
        },
 
        autoComplete: function(newVal, actVal, normalizedActVal, key, dontModify) {
 
            if (newVal == actVal) return true;
 
            if (dontModify || this.ime || !this.canSelect()) return false;
 
            if (newVal.indexOf(actVal) !== 0) {
 
                if (normalizedActVal && newVal.indexOf(normalizedActVal) === 0) {
 
                    if (this.lastRealInput == actVal) this.lastRealInput = normalizedActVal;
 
                     actVal = normalizedActVal;
 
                } else {
 
                     return false;
 
                }
 
            }
 
            this.text.focus();
 
            this.text.value = newVal + key;
 
            this.setSelection(actVal.length, newVal.length);
 
            return true;
 
        },
 
        canSelect: function() {
 
            return this.text.setSelectionRange || this.text.createTextRange || typeof this.text.selectionStart != 'undefined' && typeof this.text.selectionEnd != 'undefined';
 
        },
 
        setSelection: function(from, to) {
 
            if (!this.text.value) return;
 
            if (this.text.setSelectionRange) {
 
                this.text.setSelectionRange(from, to);
 
            } else if (typeof this.text.selectionStart != 'undefined') {
 
                if (from > this.text.selectionStart) {
 
                    this.text.selectionEnd = to;
 
                    this.text.selectionStart = from;
 
                } else {
 
                    this.text.selectionStart = from;
 
                    this.text.selectionEnd = to;
 
 
                 }
 
                 }
            } else if (this.text.createTextRange) {
 
                var new_selection = this.text.createTextRange();
 
                new_selection.move('character', from);
 
                new_selection.moveEnd('character', to - from);
 
                new_selection.select();
 
            }
 
        },
 
        getSelection: function() {
 
            var from = 0,
 
                to = 0;
 
            if (!this.text.value) {} else if (typeof this.text.selectionStart != 'undefined') {
 
                from = this.text.selectionStart;
 
                to = this.text.selectionEnd;
 
            } else if (document.selection && document.selection.createRange) {
 
                var rng = document.selection.createRange().duplicate();
 
                if (rng.parentElement() === this.text) {
 
                    try {
 
                        var textRng = this.text.createTextRange();
 
                        textRng.move('character', 0);
 
                        textRng.setEndPoint('EndToEnd', rng);
 
                        to = textRng.text.length;
 
                        textRng.setEndPoint('EndToStart', rng);
 
                        from = textRng.text.length;
 
                    } catch (notFocused) {
 
                        from = this.text.value.length;
 
                        to = from;
 
                    }
 
                }
 
            }
 
            return {
 
                start: from,
 
                end: to
 
 
             };
 
             };
        },
+
            if (conf.wgAction === "submit" && conf.wgArticleId && eForm_1 && eForm_1.wpSummary && document.getElementById("wikiDiff")) {
        saveView: function(evt) {
+
                var sum_1 = eForm_1.wpSummary, sumA = eForm_1.wpAutoSummary;
            this.lastSelection = this.getSelection();
+
                 if (sum_1.value && sumA.value === HC.changeTag) {
        },
+
                     sumA.value = sumA.value.replace(HC.changeTag, "d41d8cd98f00b204e9800998ecf8427e");
        processKey: function(evt) {
+
                     var $ct_1 = $('<input type="hidden" name="wpChangeTags">').val(HC.changeTag);
            var dir = 0;
+
                     $(eForm_1).append($ct_1);
            switch (this.lastKey) {
+
                     oldTxt_1 = eForm_1.wpTextbox1.value;
                case UP:
+
                     $("#wpSave").one("click", function () {
                    dir = -1;
+
                        if ($ct_1.val()) {
                 case DOWN:
+
                            sum_1.value = sum_1.value.replace(HC.messages.using || HC.messages.prefix, "");
                    if (dir === 0) dir = 1;
+
                        }
                case PGUP:
+
                    });
                     if (dir === 0) dir = -HotCat.list_size;
+
                    var removeChangeTag_1 = function () {
                case PGDOWN:
+
                        $(eForm_1.wpTextbox1).add(sum_1).one("input", function () {
                    if (dir === 0) dir = HotCat.list_size;
+
                            window.setTimeout(function () {
                     if (this.list.style.display != 'none') {
+
                                if (!isMinorChange_1()) {
                        this.highlightSuggestion(dir);
+
                                    $ct_1.val("");
                        return evtKill(evt);
+
                                }
                     } else if (this.keyCount <= 1 && (!this.callbackObj || this.callbackObj.callsMade == this.callbackObj.nofCalls)) {
+
                                else {
                        this.textchange();
+
                                    removeChangeTag_1();
                     }
+
                                }
                    break;
+
                            }, 500);
                case ESC:
+
                        });
                     return evtKill(evt);
+
                     };
            }
+
                     removeChangeTag_1();
            return true;
 
        },
 
        highlightSuggestion: function(dir) {
 
            if (noSuggestions || !this.list || this.list.style.display == 'none') return false;
 
            var curr = this.list.selectedIndex;
 
            var tgt = -1;
 
            if (dir === 0) {
 
                if (curr < 0 || curr >= this.list.options.length) return false;
 
                tgt = curr;
 
            } else {
 
                tgt = curr < 0 ? 0 : curr + dir;
 
                tgt = tgt < 0 ? 0 : tgt;
 
                if (tgt >= this.list.options.length) tgt = this.list.options.length - 1;
 
            }
 
            if (tgt != curr || dir === 0) {
 
                if (curr >= 0 && curr < this.list.options.length && dir !== 0) this.list.options[curr].selected = false;
 
                this.list.options[tgt].selected = true;
 
                var v = this.text.value.split('|');
 
                var key = v.length > 1 ? '|' + v[1] : "";
 
                var completed = this.autoComplete(this.list.options[tgt].text, this.lastRealInput, null, key, false);
 
                if (!completed || this.list.options[tgt].text == this.lastRealInput) {
 
                     this.text.value = this.list.options[tgt].text + key;
 
                     if (this.canSelect()) this.setSelection(this.list.options[tgt].text.length, this.list.options[tgt].text.length);
 
 
                 }
 
                 }
                this.lastInput = this.list.options[tgt].text;
 
                this.inputExists = true;
 
                if (this.icon) this.icon.src = armorUri(HotCat.existsYes);
 
                this.state = CategoryEditor.CHANGE_PENDING;
 
 
             }
 
             }
            return true;
 
        },
 
        resetKeySelection: function() {
 
            if (noSuggestions || !this.list || this.list.style.display == 'none') return false;
 
            var curr = this.list.selectedIndex;
 
            if (curr >= 0 && curr < this.list.options.length) {
 
                this.list.options[curr].selected = false;
 
                var v = this.text.value.split('|');
 
                var key = v.length > 1 ? '|' + v[1] : "";
 
                var result = v[0] != this.lastInput;
 
                if (v[0] != this.lastRealInput) {
 
                    this.text.value = this.lastRealInput + key;
 
                    result = true;
 
                }
 
                this.lastInput = this.lastRealInput;
 
                return result;
 
            }
 
            return false;
 
 
         }
 
         }
    };
+
         HC.listSize = parseInt(HC.listSize, 10);
    function initialize() {
+
         if (isNaN(HC.listSize) || HC.listSize < 5) {
         var config = (typeof JSconfig != 'undefined' && JSconfig.keys) ? JSconfig.keys : {};
+
             HC.listSize = 5;
        HotCat.dont_add_to_watchlist = (typeof window.hotcat_dont_add_to_watchlist != 'undefined' ? !!window.hotcat_dont_add_to_watchlist : (typeof config.HotCatDontAddToWatchlist != 'undefined' ? config.HotCatDontAddToWatchlist : HotCat.dont_add_to_watchlist));
+
         }
         HotCat.no_autocommit = (typeof window.hotcat_no_autocommit != 'undefined' ? !!window.hotcat_no_autocommit : (typeof config.HotCatNoAutoCommit != 'undefined' ? config.HotCatNoAutoCommit : HotCat.no_autocommit));
+
         HC.listSize = Math.min(HC.listSize, 30);
        HotCat.del_needs_diff = (typeof window.hotcat_del_needs_diff != 'undefined' ? !!window.hotcat_del_needs_diff : (typeof config.HotCatDelNeedsDiff != 'undefined' ? config.HotCatDelNeedsDiff : HotCat.del_needs_diff));
+
         if (HC.engine_names) {
        HotCat.suggest_delay = window.hotcat_suggestion_delay || config['HotCatSuggestionDelay'] || HotCat.suggest_delay;
+
             for (var key in HC.engine_names) {
        HotCat.editbox_width = window.hotcat_editbox_width || config['HotCatEditBoxWidth'] || HotCat.editbox_width;
+
                 if (suggestionConfigs[key] && HC.engine_names[key]) {
        HotCat.suggestions = window.hotcat_suggestions || config['HotCatSuggestions'] || HotCat.suggestions;
+
                     suggestionConfigs[key].name = HC.engine_names[key];
        if (typeof HotCat.suggestions != 'string' || !suggestionConfigs[HotCat.suggestions])
 
             HotCat.suggestions = 'combined';
 
         HotCat.fixed_search = (typeof window.hotcat_suggestions_fixed != 'undefined' ? !!window.hotcat_suggestions_fixed : (typeof config.HotCatFixedSuggestions != 'undefined' ? config.HotCatFixedSuggestions : HotCat.fixed_search));
 
         HotCat.single_minor = (typeof window.hotcat_single_changes_are_minor != 'undefined' ? !!window.hotcat_single_changes_are_minor : (typeof config.HotCatMinorSingleChanges != 'undefined' ? config.HotCatMinorSingleChanges : HotCat.single_minor));
 
        HotCat.bg_changed = window.hotcat_changed_background || config.HotCatChangedBackground || HotCat.bg_changed;
 
        HotCat.use_up_down = (typeof window.hotcat_use_category_links != 'undefined' ? !!window.hotcat_use_category_links : (typeof config.HotCatUseCategoryLinks != 'undefined' ? config.HotCatUseCategoryLinks : HotCat.use_up_down));
 
        HotCat.list_size = window.hotcat_list_size || config.HotCatListSize || HotCat.list_size;
 
        HotCat.list_size = parseInt(HotCat.list_size, 10);
 
        if (isNaN(HotCat.list_size) || HotCat.list_size < 5) HotCat.list_size = 5;
 
        if (HotCat.list_size > 15) HotCat.list_size = 15;
 
         if (HotCat.engine_names) {
 
             for (var key in HotCat.engine_names) {
 
                 if (suggestionConfigs[key] && HotCat.engine_names[key]) {
 
                     suggestionConfigs[key].name = HotCat.engine_names[key];
 
 
                 }
 
                 }
 
             }
 
             }
 
         }
 
         }
         is_rtl = hasClass(document.body, 'rtl');
+
         is_rtl = hasClass(document.body, "rtl");
 
         if (!is_rtl) {
 
         if (!is_rtl) {
 
             if (document.defaultView && document.defaultView.getComputedStyle) {
 
             if (document.defaultView && document.defaultView.getComputedStyle) {
                 is_rtl = document.defaultView.getComputedStyle(document.body, null).getPropertyValue('direction');
+
                 is_rtl = document.defaultView.getComputedStyle(document.body, null).getPropertyValue("direction");
             } else if (document.body.currentStyle) {
+
             }
                 is_rtl = document.body.currentStyle['direction'];
+
            else if (document.body.currentStyle) {
             } else {
+
                 is_rtl = document.body.currentStyle.direction;
                 is_rtl = document.body.style['direction'];
+
             }
 +
            else {
 +
                 is_rtl = document.body.style.direction;
 
             }
 
             }
             is_rtl = (is_rtl == 'rtl');
+
             is_rtl = is_rtl === "rtl";
 
         }
 
         }
 
     }
 
     }
 
     function can_edit() {
 
     function can_edit() {
 
         var container = null;
 
         var container = null;
         switch (mw.config.get('skin')) {
+
         switch (mw.config.get("skin")) {
             case 'cologneblue':
+
             case "cologneblue": {
                 container = document.getElementById('quickbar');
+
                 container = document.getElementById("quickbar");
             case 'standard':
+
            }
             case 'nostalgia':
+
             case "standard":
                 if (!container) container = document.getElementById('topbar');
+
             case "nostalgia": {
                 var lks = container.getElementsByTagName('a');
+
                 if (!container) {
 +
                    container = document.getElementById("topbar");
 +
                }
 +
                 var lks = container.getElementsByTagName("a");
 
                 for (var i = 0; i < lks.length; i++) {
 
                 for (var i = 0; i < lks.length; i++) {
                     if (param('title', lks[i].href) == conf.wgPageName && param('action', lks[i].href) == 'edit')
+
                     if (param("title", lks[i].href) === conf.wgPageName && param("action", lks[i].href) === "edit") {
 
                         return true;
 
                         return true;
 +
                    }
 
                 }
 
                 }
 
                 return false;
 
                 return false;
 +
            }
 
             default:
 
             default:
                 return document.getElementById('ca-edit') !== null;
+
                 return document.getElementById("ca-edit") !== null;
 +
        }
 +
    }
 +
    function closeForm() {
 +
        for (var i = 0; i < editors.length; i++) {
 +
            var edit = editors[i];
 +
            if (edit.state === CategoryEditor.OPEN) {
 +
                edit.cancel();
 +
            }
 +
            else if (edit.state === CategoryEditor.CHANGE_PENDING) {
 +
                edit.sanitizeInput();
 +
                var value = edit.text.value.split("|");
 +
                var key = null;
 +
                if (value.length > 1) {
 +
                    key = value[1];
 +
                }
 +
                var v = value[0].replace(/_/g, " ").replace(/^\s+|\s+$/g, "");
 +
                if (!v.length) {
 +
                    edit.cancel();
 +
                }
 +
                else {
 +
                    edit.currentCategory = v;
 +
                    edit.currentKey = key;
 +
                    edit.currentExists = this.inputExists;
 +
                    edit.close();
 +
                }
 +
            }
 
         }
 
         }
        return false;
 
 
     }
 
     }
 
     function setup_upload() {
 
     function setup_upload() {
 
         onUpload = true;
 
         onUpload = true;
         var ip = document.getElementById('mw-htmlform-description') || document.getElementById('wpDestFile');
+
         var ip = document.getElementById("mw-htmlform-description") || document.getElementById("wpDestFile");
 +
        if (!ip) {
 +
            ip = document.getElementById("wpDestFile");
 +
            while (ip && ip.nodeName.toLowerCase() !== "table") {
 +
                ip = ip.parentNode;
 +
            }
 +
        }
 
         if (!ip) {
 
         if (!ip) {
             ip = document.getElementById('wpDestFile');
+
             return;
            while (ip && ip.nodeName.toLowerCase() != 'table') ip = ip.parentNode;
 
 
         }
 
         }
        if (!ip) return;
+
         var reupload = document.getElementById("wpForReUpload");
         var reupload = document.getElementById('wpForReUpload');
+
         var destFile = document.getElementById("wpDestFile");
         var destFile = document.getElementById('wpDestFile');
+
         if (reupload && !!reupload.value || destFile && (destFile.disabled || destFile.readOnly)) {
         if ((reupload && !!reupload.value) || (destFile && (destFile.disabled || destFile.readOnly)))
 
 
             return;
 
             return;
         var labelCell = make('td');
+
        }
         var lineCell = make('td');
+
         var labelCell = make("td");
         catLine = make('div');
+
         var lineCell = make("td");
         catLine.className = 'catlinks';
+
         catLine = make("div");
         catLine.id = 'catlinks';
+
         catLine.className = "catlinks";
         catLine.style.textAlign = is_rtl ? 'right' : 'left';
+
         catLine.id = "catlinks";
         catLine.style.margin = '0';
+
         catLine.style.textAlign = is_rtl ? "right" : "left";
         catLine.style.border = 'none';
+
         catLine.style.margin = "0";
 +
         catLine.style.border = "none";
 
         lineCell.appendChild(catLine);
 
         lineCell.appendChild(catLine);
 
         var label = null;
 
         var label = null;
         if (typeof UFUI != 'undefined' && typeof UIElements != 'undefined' && typeof UFUI.getLabel == 'function') {
+
         if (window.UFUI && window.UIElements && window.UFUI.getLabel instanceof Function) {
 
             try {
 
             try {
                 label = UFUI.getLabel('wpCategoriesUploadLbl');
+
                 label = window.UFUI.getLabel("wpCategoriesUploadLbl");
             } catch (ex) {
+
             }
 +
            catch (ex) {
 
                 label = null;
 
                 label = null;
 
             }
 
             }
 
         }
 
         }
 
         if (!label) {
 
         if (!label) {
             labelCell.id = 'hotcatLabel';
+
             labelCell.id = "hotcatLabel";
             labelCell.appendChild(make(HotCat.categories, true));
+
             labelCell.appendChild(make(HC.categories, true));
         } else {
+
         }
             labelCell.id = 'hotcatLabelTranslated';
+
        else {
 +
             labelCell.id = "hotcatLabelTranslated";
 
             labelCell.appendChild(label);
 
             labelCell.appendChild(label);
 
         }
 
         }
         labelCell.className = 'mw-label';
+
         labelCell.className = "mw-label";
         labelCell.style.textAlign = 'right';
+
         labelCell.style.textAlign = "right";
         labelCell.style.verticalAlign = 'middle';
+
         labelCell.style.verticalAlign = "middle";
         var form = document.getElementById('upload') || document.getElementById('mw-upload-form');
+
         var form = document.getElementById("upload") || document.getElementById("mw-upload-form");
 
         if (form) {
 
         if (form) {
 
             var newRow = ip.insertRow(-1);
 
             var newRow = ip.insertRow(-1);
 
             newRow.appendChild(labelCell);
 
             newRow.appendChild(labelCell);
 
             newRow.appendChild(lineCell);
 
             newRow.appendChild(lineCell);
             form.onsubmit = (function(oldSubmit) {
+
             form.onsubmit = function (oldSubmit) {
                 return function() {
+
                 return function () {
 +
                    var args = [];
 +
                    for (var _i = 0; _i < arguments.length; _i++) {
 +
                        args[_i] = arguments[_i];
 +
                    }
 
                     var do_submit = true;
 
                     var do_submit = true;
 
                     if (oldSubmit) {
 
                     if (oldSubmit) {
                         if (typeof oldSubmit == 'string')
+
                         if (typeof oldSubmit === "string") {
 
                             do_submit = eval(oldSubmit);
 
                             do_submit = eval(oldSubmit);
                         else if (typeof oldSubmit == 'function')
+
                        }
                             do_submit = oldSubmit.apply(form, arguments);
+
                         else if (oldSubmit instanceof Function) {
 +
                             do_submit = oldSubmit.bind(form).apply(void 0, __spreadArray([], __read(args), false));
 +
                        }
 +
                    }
 +
                    if (!do_submit) {
 +
                        return false;
 
                     }
 
                     }
                    if (!do_submit) return false;
 
 
                     closeForm();
 
                     closeForm();
                     var eb = document.getElementById('wpUploadDescription') || document.getElementById('wpDesc');
+
                     var eb = document.getElementById("wpUploadDescription") || document.getElementById("wpDesc");
 
                     var addedOne = false;
 
                     var addedOne = false;
 
                     for (var i = 0; i < editors.length; i++) {
 
                     for (var i = 0; i < editors.length; i++) {
 
                         var t = editors[i].currentCategory;
 
                         var t = editors[i].currentCategory;
                         if (!t) continue;
+
                         if (!t) {
 +
                            continue;
 +
                        }
 
                         var key = editors[i].currentKey;
 
                         var key = editors[i].currentKey;
                         var new_cat = '[[' + HotCat.category_canonical + ':' + t + (key ? '|' + key : "") + ']]';
+
                         var new_cat = "[[".concat(HC.category_canonical, ":").concat(t).concat(key ? "|".concat(key) : "", "]]");
                         var cleanedText = eb.value.replace(/<\!--(\s|\S)*?--\>/g, "").replace(/<nowiki\>(\s|\S)*?<\/nowiki>/g, "");
+
                         var cleanedText_1 = eb.value.replace(/<!--(\s|\S)*?-->/g, "").replace(/<nowiki>(\s|\S)*?<\/nowiki>/g, "");
                         if (!find_category(cleanedText, t, true)) {
+
                         if (!find_category(cleanedText_1, t, true)) {
                             eb.value += '\n' + new_cat;
+
                             eb.value += "\n".concat(new_cat);
 
                             addedOne = true;
 
                             addedOne = true;
 
                         }
 
                         }
2,279行目: 1,161行目:
 
                     return true;
 
                     return true;
 
                 };
 
                 };
             })(form.onsubmit);
+
             }(form.onsubmit);
 
         }
 
         }
 
     }
 
     }
     var cleanedText = null;
+
     function getTitle(span) {
 +
        if (span.firstChild.nodeType !== Node.ELEMENT_NODE) {
 +
            return null;
 +
        }
 +
        var catTitle = title(span.firstChild.getAttribute("href"));
 +
        if (!catTitle) {
 +
            return null;
 +
        }
 +
        catTitle = catTitle.substr(catTitle.indexOf(":") + 1).replace(/_/g, " ");
 +
        if (HC.blacklist && HC.blacklist.test(catTitle)) {
 +
            return null;
 +
        }
 +
        return catTitle;
 +
    }
 
     function isOnPage(span) {
 
     function isOnPage(span) {
         var catTitle = title(span.firstChild.getAttribute('href', 2));
+
         var catTitle = getTitle(span);
        if (!catTitle) return null;
 
        catTitle = catTitle.substr(catTitle.indexOf(':') + 1).replace(/_/g, ' ');
 
        if (HotCat.blacklist && HotCat.blacklist.test(catTitle)) return null;
 
 
         var result = {
 
         var result = {
 
             title: catTitle,
 
             title: catTitle,
 
             match: ["", "", ""]
 
             match: ["", "", ""]
 
         };
 
         };
         if (pageText === null) return result;
+
         if (pageText === null) {
 +
            return result;
 +
        }
 
         if (cleanedText === null) {
 
         if (cleanedText === null) {
             cleanedText = pageText.replace(/<\!--(\s|\S)*?--\>/g, "").replace(/<nowiki\>(\s|\S)*?<\/nowiki>/g, "");
+
             cleanedText = pageText.replace(/<!--(\s|\S)*?-->/g, "").replace(/<nowiki>(\s|\S)*?<\/nowiki>/g, "");
 
         }
 
         }
 
         result.match = find_category(cleanedText, catTitle, true);
 
         result.match = find_category(cleanedText, catTitle, true);
 
         return result;
 
         return result;
 
     }
 
     }
    var initialized = false;
 
    var setupTimeout = null;
 
 
     function findByClass(scope, tag, className) {
 
     function findByClass(scope, tag, className) {
         var result;
+
         var result = $(scope).find("".concat(tag, ".").concat(className));
        if (window.jQuery) {
+
         return result && result.length ? result[0] : null;
            result = window.jQuery(scope).find(tag + '.' + className);
+
    }
         } else {
+
    function list_categorys() {
            result = getElementsByClassName(scope, tag, className);
+
        if (pageText === null) {
 +
            return [];
 
         }
 
         }
         return (result && result.length) ? result[0] : null;
+
         if (cleanedText === null) {
 +
            cleanedText = pageText.replace(/<!--(\s|\S)*?-->/g, "").replace(/<nowiki>(\s|\S)*?<\/nowiki>/g, "");
 +
        }
 +
        var cat_regex = new RegExp("\\[\\[".concat(wikiTextBlankOrBidi, "(").concat(HC.category_regexp, ")").concat(wikiTextBlankOrBidi, ":").concat(wikiTextBlankOrBidi, "([^\\[\\]]+?)").concat(wikiTextBlankOrBidi, "(\\|.*?)?\\]\\]"), "g");
 +
        var result = [];
 +
        var curr_match = null;
 +
        while ((curr_match = cat_regex.exec(cleanedText)) !== null) {
 +
            result.push({
 +
                match: curr_match
 +
            });
 +
        }
 +
        result.re = cat_regex;
 +
        return result;
 
     }
 
     }
 
     function setup(additionalWork) {
 
     function setup(additionalWork) {
         if (initialized) return;
+
         if (initialized) {
 +
            return;
 +
        }
 
         initialized = true;
 
         initialized = true;
 
         if (setupTimeout) {
 
         if (setupTimeout) {
2,317行目: 1,224行目:
 
             setupTimeout = null;
 
             setupTimeout = null;
 
         }
 
         }
         catLine = catLine || document.getElementById('mw-normal-catlinks') || findByClass(document, 'p', 'catlinks');
+
         catLine = catLine || document.getElementById("mw-normal-catlinks");
         var hiddenCats = document.getElementById('mw-hidden-catlinks');
+
         var hiddenCats = document.getElementById("mw-hidden-catlinks");
 
         if (!catLine) {
 
         if (!catLine) {
 
             var footer = null;
 
             var footer = null;
 
             if (!hiddenCats) {
 
             if (!hiddenCats) {
                 footer = findByClass(document, 'div', 'printfooter');
+
                 footer = findByClass(document, "div", "printfooter");
                 if (!footer) return;
+
                 if (!footer) {
 +
                    return;
 +
                }
 
             }
 
             }
             catLine = make('div');
+
             catLine = make("div");
             catLine.id = 'mw-normal-catlinks';
+
             catLine.id = "mw-normal-catlinks";
             catLine.style.textAlign = is_rtl ? 'right' : 'left';
+
             catLine.style.textAlign = is_rtl ? "right" : "left";
             var label = make('a');
+
             var label = make("a");
             label.href = conf.wgArticlePath.replace('$1', 'Special:Categories');
+
             label.href = conf.wgArticlePath.replace("$1", "Special:Categories");
             label.title = HotCat.categories;
+
             label.title = HC.categories;
             label.appendChild(make(HotCat.categories, true));
+
             label.appendChild(make(HC.categories, true));
 
             catLine.appendChild(label);
 
             catLine.appendChild(label);
             catLine.appendChild(make(':', true));
+
             catLine.appendChild(make(":", true));
             var container = (hiddenCats ? hiddenCats.parentNode : document.getElementById('catlinks'));
+
             var container = hiddenCats ? hiddenCats.parentNode : document.getElementById("catlinks");
 
             if (!container) {
 
             if (!container) {
                 container = make('div');
+
                 container = make("div");
                 container.id = 'catlinks';
+
                 container.id = "catlinks";
 
                 footer.parentNode.insertBefore(container, footer.nextSibling);
 
                 footer.parentNode.insertBefore(container, footer.nextSibling);
 
             }
 
             }
             container.className = 'catlinks noprint';
+
             container.className = "catlinks noprint";
 
             container.style.display = "";
 
             container.style.display = "";
 
             if (!hiddenCats) {
 
             if (!hiddenCats) {
 
                 container.appendChild(catLine);
 
                 container.appendChild(catLine);
             } else {
+
             }
 +
            else {
 
                 container.insertBefore(catLine, hiddenCats);
 
                 container.insertBefore(catLine, hiddenCats);
 
             }
 
             }
 
         }
 
         }
         if (is_rtl) catLine.dir = 'rtl';
+
         if (is_rtl) {
         function createEditors(line, is_hidden) {
+
            catLine.dir = "rtl";
 +
        }
 +
        var chkCats = [], inpIndex = {};
 +
         function createEditors(_line, is_hidden, has_hidden) {
 +
            var line = _line;
 
             var i;
 
             var i;
             var cats = line.getElementsByTagName('li');
+
             var cats = line.getElementsByTagName("li");
             if (cats.length > 0) {
+
             if (cats.length) {
 
                 newDOM = true;
 
                 newDOM = true;
 
                 line = cats[0].parentNode;
 
                 line = cats[0].parentNode;
            } else {
 
                cats = line.getElementsByTagName('span');
 
 
             }
 
             }
             var copyCats = new Array(cats.length);
+
            else {
             for (i = 0; i < cats.length; i++) copyCats[i] = cats[i];
+
                cats = line.getElementsByTagName("span");
            var editor = null;
+
            }
            for (i = 0; i < copyCats.length; i++) {
+
             var copyCats = Array.from({
                 var test = isOnPage(copyCats[i]);
+
                length: cats.length
                 if (test !== null && test.match !== null) {
+
            });
                     editor = new CategoryEditor(line, copyCats[i], test.title, test.match[2], is_hidden);
+
            var idxCopys = {};
 +
            var sTitle = null;
 +
             for (i = 0; i < cats.length; i++) {
 +
                copyCats[i] = cats[i];
 +
                 sTitle = getTitle(copyCats[i]);
 +
                 if (sTitle) {
 +
                     idxCopys[sTitle] = i;
 
                 }
 
                 }
 
             }
 
             }
             return copyCats.length > 0 ? copyCats[copyCats.length - 1] : null;
+
            var inpageCats = list_categorys();
 +
            for (i = 0; i < inpageCats.length; i++) {
 +
                var normalized = inpageCats[i].match[2].replace(wikiTextBlankRE, " ");
 +
                if (HC.capitalizePageNames) {
 +
                    normalized = normalized.substr(0, 1).toUpperCase() + normalized.substr(1);
 +
                }
 +
                if (normalized in idxCopys && line) {
 +
                    new CategoryEditor(line, copyCats[idxCopys[normalized]], inpageCats[i].match[2], inpageCats[i].match[3], is_hidden);
 +
                    if (is_hidden && normalized in inpIndex) {
 +
                        chkCats.splice(chkCats.indexOf("".concat(HC.category_canonical, ":").concat(normalized)), 1);
 +
                        delete inpIndex[normalized];
 +
                    }
 +
                }
 +
                else if (!is_hidden && line) {
 +
                    chkCats.push("".concat(HC.category_canonical, ":").concat(normalized));
 +
                    inpIndex[normalized] = i;
 +
                }
 +
            }
 +
            if (chkCats.length && (!is_hidden && !has_hidden || is_hidden)) {
 +
                var arg_titles_1 = chkCats.join("|");
 +
                $.getJSON("".concat(conf.wgServer).concat(conf.wgScriptPath, "/api.php?action=query&format=json&titles=").concat(encodeURIComponent(arg_titles_1), "&redirects=1&converttitles=1"), function (json) {
 +
                    var converted = json.query.converted;
 +
                    if (!converted || converted.length < chkCats.length) {
 +
                        console.log(arg_titles_1);
 +
                    }
 +
                    if (!converted) {
 +
                        converted = [];
 +
                    }
 +
                    for (i = 0; i < converted.length; i++) {
 +
                        var sTitle_1 = converted[i].to.replace("".concat(HC.category_canonical, ":"), "");
 +
                        var sOrginal = inpIndex[converted[i].from.replace("".concat(HC.category_canonical, ":"), "")];
 +
                        if (sTitle_1 in idxCopys && line) {
 +
                            new CategoryEditor(line, copyCats[idxCopys[sTitle_1]], [inpageCats[sOrginal].match[2], sTitle_1], inpageCats[sOrginal].match[3], is_hidden);
 +
                        }
 +
                        else {
 +
                            console.log(sTitle_1);
 +
                        }
 +
                    }
 +
                });
 +
            }
 +
             return copyCats.length ? copyCats[copyCats.length - 1] : null;
 
         }
 
         }
         var lastSpan = createEditors(catLine, false);
+
         var lastSpan = createEditors(catLine, false, !!hiddenCats);
         var editor = new CategoryEditor(newDOM ? catLine.getElementsByTagName('ul')[0] : catLine, null, null, lastSpan !== null, false);
+
         new CategoryEditor(newDOM ? catLine.getElementsByTagName("ul")[0] : catLine, null, null, lastSpan !== null, false);
 
         if (!onUpload) {
 
         if (!onUpload) {
 
             if (pageText !== null && hiddenCats) {
 
             if (pageText !== null && hiddenCats) {
                 if (is_rtl) hiddenCats.dir = 'rtl';
+
                 if (is_rtl) {
                 createEditors(hiddenCats, true);
+
                    hiddenCats.dir = "rtl";
 +
                }
 +
                 createEditors(hiddenCats, true, true);
 +
            }
 +
            var enableMulti = make("span");
 +
            enableMulti.className = "noprint";
 +
            if (is_rtl) {
 +
                enableMulti.dir = "rtl";
 
             }
 
             }
            var enableMulti = make('span');
 
            enableMulti.className = 'noprint';
 
            if (is_rtl) enableMulti.dir = 'rtl';
 
 
             catLine.insertBefore(enableMulti, catLine.firstChild.nextSibling);
 
             catLine.insertBefore(enableMulti, catLine.firstChild.nextSibling);
             enableMulti.appendChild(make('\xa0', true));
+
             enableMulti.appendChild(make(" ", true));
             multiSpan = make('span');
+
             multiSpan = make("span");
 
             enableMulti.appendChild(multiSpan);
 
             enableMulti.appendChild(multiSpan);
             multiSpan.innerHTML = '(<a>' + HotCat.addmulti + '</a>)';
+
             multiSpan.innerHTML = "(<a>".concat(HC.addmulti, "</a>)");
             var lk = multiSpan.getElementsByTagName('a')[0];
+
             var lk = multiSpan.getElementsByTagName("a")[0];
             lk.onclick = function(evt) {
+
             lk.onclick = function (evt) {
 
                 setMultiInput();
 
                 setMultiInput();
 
                 checkMultiInput();
 
                 checkMultiInput();
 
                 return evtKill(evt);
 
                 return evtKill(evt);
 
             };
 
             };
             lk.title = HotCat.multi_tooltip;
+
             lk.title = HC.multi_tooltip;
             lk.style.cursor = 'pointer';
+
             lk.style.cursor = "pointer";
 
         }
 
         }
 
         cleanedText = null;
 
         cleanedText = null;
         if (typeof additionalWork == 'function') additionalWork();
+
         if (additionalWork instanceof Function) {
        setupCompleted.loaded();
+
             additionalWork();
        if (window.jQuery) jQuery('body').trigger('hotcatSetupCompleted');
 
    }
 
    function setPage(json) {
 
        var startTime = null;
 
        if (json && json.query) {
 
             if (json.query.pages) {
 
                var page = json.query.pages[conf.wgArticleId === 0 ? "-1" : "" + conf.wgArticleId];
 
                if (page) {
 
                    if (page.revisions && page.revisions.length > 0) {
 
                        pageText = page.revisions[0]['*'];
 
                        if (page.revisions[0].timestamp) pageTime = page.revisions[0].timestamp.replace(/\D/g, "");
 
                        if (page.revisions[0].revid) pageTextRevId = page.revisions[0].revid;
 
                        if (page.revisions.length > 1) conflictingUser = page.revisions[1].user;
 
                    }
 
                    if (page.lastrevid) lastRevId = page.lastrevid;
 
                    if (page.starttimestamp) startTime = page.starttimestamp.replace(/\D/g, "");
 
                    pageWatched = typeof page.watched == 'string';
 
                    editToken = page.edittoken;
 
                    if (page.langlinks && (!json['query-continue'] || !json['query-continue'].langlinks)) {
 
                        var re = "";
 
                        for (var i = 0; i < page.langlinks.length; i++) {
 
                            re += (i > 0 ? '|' : "") + page.langlinks[i].lang.replace(/([\\\^\$\.\?\*\+\(\)])/g, '\\$1');
 
                        }
 
                        if (re.length > 0) {
 
                            interlanguageRE = new RegExp('((^|\\n\\r?)(\\[\\[\\s*(' + re + ')\\s*:[^\\]]+\\]\\]\\s*))+$');
 
                        }
 
                    }
 
                }
 
            }
 
            if (json.query.general) {
 
                HotCat.capitalizePageNames = (json.query.general['case'] == 'first-letter');
 
                if (json.query.general.time && !startTime) startTime = json.query.general.time.replace(/\D/g, "");
 
            }
 
            serverTime = startTime;
 
            if (json.query.userinfo && json.query.userinfo.options) {
 
                watchCreate = !HotCat.dont_add_to_watchlist && json.query.userinfo.options.watchcreations == '1';
 
                watchEdit = !HotCat.dont_add_to_watchlist && json.query.userinfo.options.watchdefault == '1';
 
                minorEdits = json.query.userinfo.options.minordefault == 1;
 
                if (minorEdits) HotCat.single_minor = true;
 
            }
 
 
         }
 
         }
 +
        mw.hook("hotcat.ready").fire();
 +
        $("body").trigger("hotcatSetupCompleted");
 
     }
 
     }
 
     function createCommitForm() {
 
     function createCommitForm() {
         if (commitForm) return;
+
         if (commitForm) {
         var formContainer = make('div');
+
            return;
         formContainer.style.display = 'none';
+
        }
 +
         var formContainer = make("div");
 +
         formContainer.style.display = "none";
 
         document.body.appendChild(formContainer);
 
         document.body.appendChild(formContainer);
         formContainer.innerHTML = '<form id="hotcatCommitForm" method="post" enctype="multipart/form-data" action="' + conf.wgScript + '?title=' + encodeURIComponent(conf.wgPageName) + '&action=edit">' + '<input type="hidden" name="wpTextbox1" />' + '<input type="hidden" name="model" value="wikitext" />' + '<input type="hidden" name="format" value="text/x-wiki" />' + '<input type="hidden" name="wpSummary" value="" />' + '<input type="checkbox" name="wpMinoredit" value="1" />' + '<input type="checkbox" name="wpWatchthis" value="1" />' + '<input type="hidden" name="wpAutoSummary" value="" />' + '<input type="hidden" name="wpEdittime" />' + '<input type="hidden" name="wpStarttime" />' + '<input type="hidden" name="wpDiff" value="wpDiff" />' + '<input type="hidden" name="oldid" value="0" />' + '<input type="submit" name="hcCommit" value="hcCommit" />' + '<input type="hidden" name="wpEditToken" />' + '<input type="hidden" name="wpUltimateParam" value="1" />' + '</form>';
+
         formContainer.innerHTML = "<form id=\"hotcatCommitForm\" method=\"post\" enctype=\"multipart/form-data\" action=\"".concat(conf.wgScript, "?title=").concat(encodeURIComponent(conf.wgPageName), "&action=submit\"><input type=\"hidden\" name=\"wpTextbox1\"><input type=\"hidden\" name=\"model\" value=\"").concat(conf.wgPageContentModel, "\"><input type=\"hidden\" name=\"format\" value=\"text/x-wiki\"><input type=\"hidden\" name=\"wpSummary\" value=\"\"><input type=\"checkbox\" name=\"wpMinoredit\" value=\"1\"><input type=\"checkbox\" name=\"wpWatchthis\" value=\"1\"><input type=\"hidden\" name=\"wpAutoSummary\" value=\"d41d8cd98f00b204e9800998ecf8427e\"><input type=\"hidden\" name=\"wpEdittime\"><input type=\"hidden\" name=\"wpStarttime\"><input type=\"hidden\" name=\"wpDiff\" value=\"wpDiff\"><input type=\"hidden\" name=\"oldid\" value=\"0\"><input type=\"submit\" name=\"hcCommit\" value=\"hcCommit\"><input type=\"hidden\" name=\"wpEditToken\"><input type=\"hidden\" name=\"wpUltimateParam\" value=\"1\"><input type=\"hidden\" name=\"wpChangeTags\"><input type=\"hidden\" value=\"\u2133\uD835\uDCB2\u2665\uD835\uDCCA\uD835\uDCC3\uD835\uDCBE\uD835\uDCB8\u2134\uD835\uDCB9\u212F\" name=\"wpUnicodeCheck\"></form>");
         commitForm = document.getElementById('hotcatCommitForm');
+
         commitForm = document.getElementById("hotcatCommitForm");
 
     }
 
     }
 
     function getPage() {
 
     function getPage() {
         if (conf.wgArticleId === 0) {
+
         if (!conf.wgArticleId) {
 
             if (conf.wgNamespaceNumber === 2) {
 
             if (conf.wgNamespaceNumber === 2) {
 
                 return;
 
                 return;
2,454行目: 1,380行目:
 
             pageTime = null;
 
             pageTime = null;
 
             setup(createCommitForm);
 
             setup(createCommitForm);
         } else {
+
         }
             var url = conf.wgServer + conf.wgScriptPath + '/api.php?format=json&callback=HotCat.start&action=query&rawcontinue=&titles=' + encodeURIComponent(conf.wgPageName) + '&prop=info%7Crevisions&rvprop=content%7Ctimestamp%7Cids&meta=siteinfo&rvlimit=1&rvstartid=' + conf.wgCurRevisionId;
+
        else {
             var s = make('script');
+
             var url = "".concat(conf.wgServer).concat(conf.wgScriptPath, "/api.php?format=json&callback=HotCat.start&action=query&rawcontinue=&titles=").concat(encodeURIComponent(conf.wgPageName), "&prop=info%7Crevisions&rvprop=content%7Ctimestamp%7Cids&meta=siteinfo&rvlimit=1&rvstartid=").concat(conf.wgCurRevisionId);
             s.src = armorUri(url);
+
             var s = make("script");
             s.type = 'text/javascript';
+
             s.src = url;
            HotCat.start = function(json) {
+
             HC.start = function (json) {
 
                 setPage(json);
 
                 setPage(json);
 
                 setup(createCommitForm);
 
                 setup(createCommitForm);
 
             };
 
             };
             document.getElementsByTagName('head')[0].appendChild(s);
+
             document.getElementsByTagName("head")[0].appendChild(s);
             setupTimeout = window.setTimeout(function() {
+
             setupTimeout = window.setTimeout(function () {
 
                 setup(createCommitForm);
 
                 setup(createCommitForm);
             }, 4000);
+
             }, 4e3);
 
         }
 
         }
 
     }
 
     }
     function run() {
+
     function setState(state) {
        if (HotCat.started) return;
+
         var cats = state.split("\n");
        HotCat.started = true;
+
        if (!cats.length) {
        loadTrigger.register(really_run);
+
            return null;
    }
 
    function really_run() {
 
        initialize();
 
        if (is_rtl && is_ie6) return;
 
        if (!HotCat.upload_disabled && conf.wgNamespaceNumber === -1 && conf.wgCanonicalSpecialPageName == 'Upload' && conf.wgUserName) {
 
            setup_upload();
 
            setup(function() {
 
                if (typeof UploadForm != 'undefined' && typeof UploadForm.previous_hotcat_state != 'undefined' && UploadForm.previous_hotcat_state !== null) {
 
                    UploadForm.previous_hotcat_state = setState(UploadForm.previous_hotcat_state);
 
                }
 
            });
 
        } else {
 
            if (!conf.wgIsArticle || conf.wgAction != 'view' || param('diff') !== null || param('oldid') !== null || !can_edit() || HotCat.disable()) return;
 
            getPage();
 
        }
 
    }
 
    function closeForm() {
 
         for (var i = 0; i < editors.length; i++) {
 
            if (editors[i].state == CategoryEditor.OPEN) {
 
                editors[i].cancel();
 
            } else if (editors[i].state == CategoryEditor.CHANGE_PENDING) {
 
                editors[i].sanitizeInput();
 
                var value = editors[i].text.value.split('|');
 
                var key = null;
 
                if (value.length > 1) key = value[1];
 
                var v = value[0].replace(/_/g, ' ').replace(/^\s+|\s+$/g, "");
 
                if (v.length === 0) {
 
                    editors[i].cancel();
 
                } else {
 
                    editors[i].currentCategory = v;
 
                    editors[i].currentKey = key;
 
                    editors[i].currentExists = this.inputExists;
 
                    editors[i].close();
 
                }
 
            }
 
 
         }
 
         }
    }
+
         if (initialized && editors.length === 1 && editors[0].isAddCategory) {
    function getState() {
 
        var result = null;
 
        for (var i = 0; i < editors.length; i++) {
 
            var text = editors[i].currentCategory;
 
            var key = editors[i].currentKey;
 
            if (text && text.length > 0) {
 
                if (key !== null) text += '|' + key;
 
                if (result === null)
 
                    result = text;
 
                else
 
                    result = result + '\n' + text;
 
            }
 
        }
 
        return result;
 
    }
 
    function setState(state) {
 
        var cats = state.split('\n');
 
        if (cats.length === 0) return null;
 
         if (initialized && editors.length == 1 && editors[0].isAddCategory) {
 
 
             var newSpans = [];
 
             var newSpans = [];
             var before = editors.length == 1 ? editors[0].span : null;
+
             var before = editors.length === 1 ? editors[0].span : null;
             var i;
+
             var i = void 0;
 
             for (i = 0; i < cats.length; i++) {
 
             for (i = 0; i < cats.length; i++) {
                 if (cats[i].length === 0) continue;
+
                 if (!cats[i].length) {
                 var cat = cats[i].split('|');
+
                    continue;
 +
                }
 +
                 var cat = cats[i].split("|");
 
                 var key = cat.length > 1 ? cat[1] : null;
 
                 var key = cat.length > 1 ? cat[1] : null;
 
                 cat = cat[0];
 
                 cat = cat[0];
                 var lk = make('a');
+
                 var lk = make("a");
                 lk.href = wikiPagePath(HotCat.category_canonical + ':' + cat);
+
                 lk.href = wikiPagePath("".concat(HC.category_canonical, ":").concat(cat));
 
                 lk.appendChild(make(cat, true));
 
                 lk.appendChild(make(cat, true));
 
                 lk.title = cat;
 
                 lk.title = cat;
                 var span = make('span');
+
                 var span = make("span");
 
                 span.appendChild(lk);
 
                 span.appendChild(lk);
                 if (i === 0) catLine.insertBefore(make(' ', true), before);
+
                 if (!i) {
 +
                    catLine.insertBefore(make(" ", true), before);
 +
                }
 
                 catLine.insertBefore(span, before);
 
                 catLine.insertBefore(span, before);
                 if (before && i + 1 < cats.length) parent.insertBefore(make(' | ', true), before);
+
                 if (before && i + 1 < cats.length) {
 +
                    parent.insertBefore(make(" | ", true), before);
 +
                }
 
                 newSpans.push({
 
                 newSpans.push({
 
                     element: span,
 
                     element: span,
 
                     title: cat,
 
                     title: cat,
                     'key': key
+
                     key: key
 
                 });
 
                 });
 
             }
 
             }
 
             if (before) {
 
             if (before) {
                 before.parentNode.insertBefore(make(' | ', true), before);
+
                 before.parentNode.insertBefore(make(" | ", true), before);
 
             }
 
             }
            var editor = null;
 
 
             for (i = 0; i < newSpans.length; i++) {
 
             for (i = 0; i < newSpans.length; i++) {
                 editor = new CategoryEditor(catLine, newSpans[i].element, newSpans[i].title, newSpans[i].key);
+
                 new CategoryEditor(catLine, newSpans[i].element, newSpans[i].title, newSpans[i].key);
 
             }
 
             }
 
         }
 
         }
 
         return null;
 
         return null;
 
     }
 
     }
     window.hotcat_get_state = function() {
+
     function getState() {
         return getState();
+
         var result = null;
    };
+
        for (var i = 0; i < editors.length; i++) {
    window.hotcat_set_state = function(state) {
+
            var text = editors[i].currentCategory;
         return setState(state);
+
            var key = editors[i].currentKey;
     };
+
            if (text && text.length) {
     window.hotcat_close_form = function() {
+
                if (key !== null) {
         closeForm();
+
                    text += "|".concat(key);
    };
+
                }
    if (window.mw) {
+
                if (result === null) {
         mw.config.set('disableAJAXCategories', true);
+
                    result = text;
 +
                }
 +
                else {
 +
                    result += "\n".concat(text);
 +
                }
 +
            }
 +
        }
 +
         return result;
 +
     }
 +
     function really_run() {
 +
         initialize();
 +
        if (!HC.upload_disabled && conf.wgNamespaceNumber === -1 && conf.wgCanonicalSpecialPageName === "Upload" && conf.wgUserName) {
 +
            setup_upload();
 +
            setup(function () {
 +
                if (window.UploadForm && window.UploadForm.previous_hotcat_state) {
 +
                    window.UploadForm.previous_hotcat_state = setState(window.UploadForm.previous_hotcat_state);
 +
                }
 +
            });
 +
         }
 +
        else {
 +
            if (!conf.wgIsArticle || conf.wgAction !== "view" || param("diff") !== null || param("oldid") !== null || !can_edit() || HC.disable()) {
 +
                return;
 +
            }
 +
            getPage();
 +
        }
 
     }
 
     }
     var mwVersion = conf.wgVersion.split('.');
+
     function run() {
     if (mwVersion[0] >= 1 && parseFloat(mwVersion[1]) > 20) {
+
        if (HC.started) {
         if (parseFloat(mwVersion[1]) > 21) {
+
            return;
             var startHotCat = function() {
+
        }
                 mw.hook('wikipage.content').add(function() {
+
        HC.started = true;
                    catLine = null;
+
        loadTrigger.register(really_run);
                    editors = [];
+
     }
                    initialized = false;
+
    var conf, HC, ua, is_webkit, cat_prefix, noSuggestions, LoadTrigger, loadTrigger, userRights, autopatrol, local, wikiTextBlank, wikiTextBlankRE, wikiTextBlankOrBidi, formattedNamespaces, namespaceIds, substitute, replaceShortcuts, findCatsRE, interlanguageRE, catLine, onUpload, editors, commitButton, commitForm, multiSpan, pageText, pageTime, pageWatched, watchCreate, watchEdit, minorEdits, editToken, is_rtl, serverTime, lastRevId, pageTextRevId, conflictingUser, newDOM, CategoryEditor, saveInProgress, suggestionEngines, suggestionConfigs, dummyElement, BS, TAB, RET, ESC, SPACE, PGUP, PGDOWN, UP, DOWN, DEL, IME, cleanedText, initialized, setupTimeout;
                    HotCat.started = false;
+
    return __generator(this, function (_a) {
                    run();
+
         switch (_a.label) {
 +
            case 0: return [4, $.ready];
 +
             case 1:
 +
                 _a.sent();
 +
                conf = new Proxy({}, {
 +
                    get: function (_, name) {
 +
                        if (name === "wgServer") {
 +
                            return "https://".concat(location.hostname);
 +
                        }
 +
                        return mw.config.get(name);
 +
                    }
 
                 });
 
                 });
            };
+
                if (window.HotCat && !window.HotCat.nodeName || conf.wgAction === "edit") {
        } else {
+
                    return [2];
             var startHotCat = function() {
+
                }
                 jQuery(document).ready(run);
+
                HC = window.HotCat = {
            };
+
                    messages: {
 +
                        cat_removed: "removed [[Category:$1]]",
 +
                        template_removed: "removed {{[[Category:$1]]}}",
 +
                        cat_added: "added [[Category:$1]]",
 +
                        cat_keychange: 'new key for [[Category:$1]]: "$2"',
 +
                        cat_notFound: 'Category "$1" not found',
 +
                        cat_exists: 'Category "$1" already exists; not added.',
 +
                        cat_resolved: " (redirect [[Category:$1]] resolved)",
 +
                        uncat_removed: "removed {{uncategorized}}",
 +
                        separator: "; ",
 +
                        prefix: "",
 +
                        using: " using [[Help:Gadget-HotCat|HotCat]]",
 +
                        multi_change: "$1 categories",
 +
                        commit: "Save",
 +
                        ok: "OK",
 +
                        cancel: "Cancel",
 +
                        multi_error: "Could not retrieve the page text from the server. Therefore, your category changes cannot be saved. We apologize for the inconvenience.",
 +
                        short_catchange: null
 +
                    },
 +
                    categories: "Categories",
 +
                    disambig_category: "Disambiguation",
 +
                    redir_category: "Category redirects",
 +
                    links: {
 +
                        change: "(±)",
 +
                        remove: "(−)",
 +
                        add: "(+)",
 +
                        restore: "(×)",
 +
                        undo: "(×)",
 +
                        down: "(↓)",
 +
                        up: "(↑)"
 +
                    },
 +
                    changeTag: "HotCat",
 +
                    automationChangeTag: "Automation tool",
 +
                    tooltips: {
 +
                        change: "Modify",
 +
                        remove: "Remove",
 +
                        add: "Add a new category",
 +
                        restore: "Undo changes",
 +
                        undo: "Undo changes",
 +
                        down: "Open for modifying and display subcategories",
 +
                        up: "Open for modifying and display parent categories"
 +
                    },
 +
                    addmulti: "<span>+<sup>+</sup></span>",
 +
                    multi_tooltip: "Modify several categories",
 +
                    disable: function () {
 +
                        var ns = conf.wgNamespaceNumber;
 +
                        var nsIds = conf.wgNamespaceIds;
 +
                        return ns < 0 || ns === 10 || ns === 828 || ns === 8 || ns === 6 && !conf.wgArticleId || ns === 2 && /\.(js|css)$/.test(conf.wgTitle) || nsIds && (ns === nsIds.creator || ns === nsIds.timedtext || ns === nsIds.institution);
 +
                    },
 +
                    uncat_regexp: /\{\{\s*[Uu]ncategorized\s*[^}]*\}\}\s*(<!--.*?-->\s*)?/g,
 +
                    existsYes: "//upload.wikimedia.org/wikipedia/commons/thumb/b/be/P_yes.svg/20px-P_yes.svg.png",
 +
                    existsNo: "//upload.wikimedia.org/wikipedia/commons/thumb/4/42/P_no.svg/20px-P_no.svg.png",
 +
                    template_categories: {},
 +
                    engine_names: {
 +
                        searchindex: "Search index",
 +
                        pagelist: "Page list",
 +
                        combined: "Combined search",
 +
                        subcat: "Subcategories",
 +
                        parentcat: "Parent categories"
 +
                    },
 +
                    capitalizePageNames: null,
 +
                    upload_disabled: false,
 +
                    blacklist: null,
 +
                    bg_changed: "#FCA",
 +
                    no_autocommit: false,
 +
                    del_needs_diff: false,
 +
                    suggest_delay: 100,
 +
                    editbox_width: 40,
 +
                    suggestions: "combined",
 +
                    fixed_search: false,
 +
                    use_up_down: true,
 +
                    listSize: 5,
 +
                    single_minor: true,
 +
                    dont_add_to_watchlist: false,
 +
                    shortcuts: null,
 +
                    addShortcuts: function (map) {
 +
                        if (!map) {
 +
                            return;
 +
                        }
 +
                        window.HotCat.shortcuts = window.HotCat.shortcuts || {};
 +
                        for (var k in map) {
 +
                            if (!Object.prototype.hasOwnProperty.bind(map)(k) || typeof k !== "string") {
 +
                                continue;
 +
                            }
 +
                            var v = map[k];
 +
                            if (typeof v !== "string") {
 +
                                continue;
 +
                            }
 +
                            k = k.replace(/^\s+|\s+$/g, "");
 +
                            v = v.replace(/^\s+|\s+$/g, "");
 +
                            if (!k.length || !v.length) {
 +
                                continue;
 +
                            }
 +
                            window.HotCat.shortcuts[k] = v;
 +
                        }
 +
                    }
 +
                };
 +
                ua = navigator.userAgent.toLowerCase();
 +
                is_webkit = /applewebkit\/\d+/.test(ua) && ua.indexOf("spoofer") < 0;
 +
                cat_prefix = null;
 +
                noSuggestions = false;
 +
                LoadTrigger = (function () {
 +
                    function LoadTrigger(needed) {
 +
                        this.queue = [];
 +
                        this.needed = needed;
 +
                    }
 +
                    LoadTrigger.prototype.register = function (callback) {
 +
                        if (this.needed <= 0) {
 +
                            callback();
 +
                        }
 +
                        else {
 +
                            this.queue.push(callback);
 +
                        }
 +
                    };
 +
                    LoadTrigger.prototype.loaded = function () {
 +
                        this.needed--;
 +
                        if (this.needed === 0) {
 +
                            for (var i = 0; i < this.queue.length; i++) {
 +
                                this.queue[i]();
 +
                            }
 +
                            this.queue = [];
 +
                        }
 +
                    };
 +
                    return LoadTrigger;
 +
                }());
 +
                loadTrigger = new LoadTrigger(2);
 +
                return [4, mw.loader.using(["mediawiki.user"])];
 +
            case 2:
 +
                _a.sent();
 +
                return [4, mw.user.getRights()];
 +
             case 3:
 +
                userRights = _a.sent();
 +
                autopatrol = userRights.includes("autopatrol");
 +
                window.hotcat_no_autocommit = !autopatrol;
 +
                window.hotcat_del_needs_diff = !autopatrol;
 +
                loadTrigger.loaded();
 +
                if (conf.wgUserLanguage !== "en") {
 +
                    local = {
 +
                        messages: {
 +
                            cat_removed: "移除[[分类:$1]]",
 +
                            template_removed: "移除{{[[分类:$1]]}}",
 +
                            cat_added: "添加[[分类:$1]]",
 +
                            cat_keychange: "为[[分类:$1]]设定新索引:“$2”",
 +
                            cat_notFound: "分类“$1”未找到",
 +
                            cat_exists: "分类“$1”已存在,不执行添加操作",
 +
                            cat_resolved: "(已处理[[分类:$1]]的重定向)",
 +
                            uncat_removed: "",
 +
                            separator: "; ",
 +
                            prefix: "",
 +
                            using: "——[[Help:HotCat小工具|HotCat]]",
 +
                            multi_change: "$1个分类",
 +
                            commit: "保存",
 +
                            ok: "确定",
 +
                            cancel: "取消",
 +
                            multi_error: "无法连接到萌百服务器,因此您的分类更改无法保存,由此引发的不便我们深表歉意。",
 +
                            short_catchange: null
 +
                        },
 +
                        categories: "分类",
 +
                        redir_category: "分类重定向",
 +
                        tooltips: {
 +
                            change: "修改",
 +
                            remove: "移除",
 +
                            add: "新增一个分类",
 +
                            restore: "回退更改",
 +
                            undo: "回退更改",
 +
                            down: "打开以便修改并显示子分类",
 +
                            up: "打开以便修改并显示父分类"
 +
                        },
 +
                        multi_tooltip: "修改多个分类",
 +
                        engine_names: {
 +
                            searchindex: "搜索索引",
 +
                            pagelist: "页面列表",
 +
                            combined: "合并搜索",
 +
                            subcat: "子分类",
 +
                            parentcat: "父分类"
 +
                        },
 +
                        disambig_category: "消歧义页",
 +
                        blacklist: /(?:不可|已)索引页面|(?:调用重复模板参数|有(?:过多高开销解析器函数调用|忽略显示标题|模板循环|脚本错误|投票|参考文献错误)|含有(?:略过模板参数|受损文件链接)|展开模板后长度超过上限|扩展深度超出限制|使用无效自封闭HTML标签|受到保护无法编辑|即将删除)的页面|有错误的Scribunto模块|隐藏分类|页面的节点数超出限制|需要帮助/i,
 +
                        no_autocommit: !autopatrol,
 +
                        del_needs_diff: !autopatrol,
 +
                        existsYes: "".concat(mw.config.get("wgServer").replace("zh.moegirl", "img.moegirl"), "/common/thumb/b/be/P_yes.svg/20px-P_yes.svg.png"),
 +
                        existsNo: "".concat(mw.config.get("wgServer").replace("zh.moegirl", "img.moegirl"), "/common/thumb/4/42/P_no.svg/20px-P_no.svg.png"),
 +
                        disable: function () {
 +
                            var ns = mw.config.get("wgNamespaceNumber");
 +
                            var nsIds = mw.config.get("wgNamespaceIds");
 +
                            return ns < 0 || ns === nsIds.template || ns === nsIds.module || ns === nsIds.mediawiki || ns === nsIds.file && !mw.config.get("wgArticleId") || ns === nsIds.creator || ns === nsIds.timedtext || ns === nsIds.institution || mw.config.get("wgPageContentModel") !== "wikitext";
 +
                        }
 +
                    };
 +
                    $.extend(HC, local, true);
 +
                }
 +
                loadTrigger.loaded();
 +
                wikiTextBlank = "[\\t _\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]+";
 +
                wikiTextBlankRE = new RegExp(wikiTextBlank, "g");
 +
                wikiTextBlankOrBidi = "[\\t _\\xA0\\u1680\\u180E\\u2000-\\u200B\\u200E\\u200F\\u2028-\\u202F\\u205F\\u3000]*";
 +
                formattedNamespaces = conf.wgFormattedNamespaces;
 +
                namespaceIds = conf.wgNamespaceIds;
 +
                HC.category_canonical = formattedNamespaces["14"];
 +
                HC.category_regexp = autoLocalize(14, "category");
 +
                if (formattedNamespaces["10"]) {
 +
                    HC.template_regexp = autoLocalize(10, "template");
 +
                }
 +
                substitute = substituteFactory();
 +
                replaceShortcuts = function () {
 +
                    var replaceHash = substituteFactory({
 +
                        indicator: "#",
 +
                        lbrace: "[",
 +
                        rbrace: "]"
 +
                    });
 +
                    return function (str, map) {
 +
                        var s = replaceHash(str, map);
 +
                        return HC.capitalizePageNames ? capitalize(s) : s;
 +
                    };
 +
                }();
 +
                findCatsRE = new RegExp("\\[\\[".concat(wikiTextBlankOrBidi, "(?:").concat(HC.category_regexp, ")").concat(wikiTextBlankOrBidi, ":[^\\]]+\\]\\]"), "g");
 +
                 interlanguageRE = null;
 +
                catLine = null, onUpload = false, editors = [], commitButton = null, commitForm = null, multiSpan = null, pageText = null, pageTime = null, pageWatched = false, watchCreate = false, watchEdit = false, minorEdits = false, editToken = null, is_rtl = false, serverTime = null, lastRevId = null, pageTextRevId = null, conflictingUser = null, newDOM = false;
 +
                CategoryEditor = (function () {
 +
                    function CategoryEditor(line, _span, _after, key, is_hidden) {
 +
                        this.callbackObj = null;
 +
                        var span = _span;
 +
                        var after = _after;
 +
                        if (!span) {
 +
                            this.isAddCategory = true;
 +
                            this.originalCategory = "";
 +
                            this.originalKey = null;
 +
                            this.originalExists = false;
 +
                            if (!newDOM) {
 +
                                span = make("span");
 +
                                span.className = "noprint";
 +
                                if (key) {
 +
                                    span.appendChild(make(" | ", true));
 +
                                    if (after) {
 +
                                        after.parentNode.insertBefore(span, after.nextSibling);
 +
                                        after = after.nextSibling;
 +
                                    }
 +
                                    else {
 +
                                        line.appendChild(span);
 +
                                    }
 +
                                }
 +
                                else if (line.firstChild) {
 +
                                    span.appendChild(make(" ", true));
 +
                                    line.appendChild(span);
 +
                                }
 +
                            }
 +
                            this.linkSpan = make("span");
 +
                            this.linkSpan.className = "noprint nopopups hotcatlink";
 +
                            var lk = make("a");
 +
                            lk.href = "#catlinks";
 +
                            lk.onclick = this.open.bind(this);
 +
                            lk.appendChild(make(HC.links.add, true));
 +
                            lk.title = HC.tooltips.add;
 +
                            this.linkSpan.appendChild(lk);
 +
                            span = make(newDOM ? "li" : "span");
 +
                            span.className = "noprint";
 +
                            if (is_rtl) {
 +
                                span.dir = "rtl";
 +
                            }
 +
                            span.appendChild(this.linkSpan);
 +
                            if (after) {
 +
                                after.parentNode.insertBefore(span, after.nextSibling);
 +
                            }
 +
                            else {
 +
                                line.appendChild(span);
 +
                            }
 +
                            this.normalLinks = null;
 +
                            this.undelLink = null;
 +
                            this.catLink = null;
 +
                        }
 +
                        else {
 +
                            if (is_rtl) {
 +
                                span.dir = "rtl";
 +
                            }
 +
                            this.isAddCategory = false;
 +
                            this.catLink = span.firstChild;
 +
                            this.originalCategory = Array.isArray(after) ? after[0] : after;
 +
                            this.originalKey = key && key.length > 1 ? key.substr(1) : null;
 +
                            this.originalExists = !hasClass(this.catLink, "new");
 +
                            this.makeLinkSpan();
 +
                            if (!this.originalExists && this.upDownLinks) {
 +
                                this.upDownLinks.style.display = "none";
 +
                            }
 +
                            span.appendChild(this.linkSpan);
 +
                        }
 +
                        this.originalHidden = is_hidden;
 +
                        this.line = line;
 +
                        this.engine = HC.suggestions;
 +
                        this.span = span;
 +
                        this.currentCategory = !this.isAddCategory && Array.isArray(after) ? after[1] : this.originalCategory;
 +
                        this.currentExists = this.originalExists;
 +
                        this.currentHidden = this.originalHidden;
 +
                        this.currentKey = this.originalKey;
 +
                        this.state = CategoryEditor.UNCHANGED;
 +
                        this.lastSavedState = CategoryEditor.UNCHANGED;
 +
                        this.lastSavedCategory = this.currentCategory;
 +
                        this.lastSavedKey = this.originalKey;
 +
                        this.lastSavedExists = this.originalExists;
 +
                        this.lastSavedHidden = this.originalHidden;
 +
                        if (this.catLink && this.currentKey) {
 +
                            this.catLink.title = this.currentKey;
 +
                        }
 +
                        editors[editors.length] = this;
 +
                    }
 +
                    CategoryEditor.prototype.makeLinkSpan = function () {
 +
                        this.normalLinks = make("span");
 +
                        var lk = null;
 +
                        if (this.originalCategory && this.originalCategory.length) {
 +
                            lk = make("a");
 +
                            lk.href = "#catlinks";
 +
                            lk.onclick = this.remove.bind(this);
 +
                            lk.appendChild(make(HC.links.remove, true));
 +
                            lk.title = HC.tooltips.remove;
 +
                            this.normalLinks.appendChild(make(" ", true));
 +
                            this.normalLinks.appendChild(lk);
 +
                        }
 +
                        if (!HC.template_categories[this.originalCategory]) {
 +
                            lk = make("a");
 +
                            lk.href = "#catlinks";
 +
                            lk.onclick = this.open.bind(this);
 +
                            lk.appendChild(make(HC.links.change, true));
 +
                            lk.title = HC.tooltips.change;
 +
                            this.normalLinks.appendChild(make(" ", true));
 +
                            this.normalLinks.appendChild(lk);
 +
                            if (!noSuggestions && HC.use_up_down) {
 +
                                this.upDownLinks = make("span");
 +
                                lk = make("a");
 +
                                lk.href = "#catlinks";
 +
                                lk.onclick = this.down.bind(this);
 +
                                lk.appendChild(make(HC.links.down, true));
 +
                                lk.title = HC.tooltips.down;
 +
                                this.upDownLinks.appendChild(make(" ", true));
 +
                                this.upDownLinks.appendChild(lk);
 +
                                lk = make("a");
 +
                                lk.href = "#catlinks";
 +
                                lk.onclick = this.up.bind(this);
 +
                                lk.appendChild(make(HC.links.up, true));
 +
                                lk.title = HC.tooltips.up;
 +
                                this.upDownLinks.appendChild(make(" ", true));
 +
                                this.upDownLinks.appendChild(lk);
 +
                                this.normalLinks.appendChild(this.upDownLinks);
 +
                            }
 +
                        }
 +
                        this.linkSpan = make("span");
 +
                        this.linkSpan.className = "noprint nopopups hotcatlink";
 +
                        this.linkSpan.appendChild(this.normalLinks);
 +
                        this.undelLink = make("span");
 +
                        this.undelLink.className = "nopopups hotcatlink";
 +
                        this.undelLink.style.display = "none";
 +
                        lk = make("a");
 +
                        lk.href = "#catlinks";
 +
                        lk.onclick = this.restore.bind(this);
 +
                        lk.appendChild(make(HC.links.restore, true));
 +
                        lk.title = HC.tooltips.restore;
 +
                        this.undelLink.appendChild(make(" ", true));
 +
                        this.undelLink.appendChild(lk);
 +
                        this.linkSpan.appendChild(this.undelLink);
 +
                    };
 +
                    CategoryEditor.prototype.invokeSuggestions = function (dont_autocomplete) {
 +
                        if (this.engine && suggestionConfigs[this.engine] && suggestionConfigs[this.engine].temp && !dont_autocomplete) {
 +
                            this.engine = HC.suggestions;
 +
                        }
 +
                        this.state = CategoryEditor.CHANGE_PENDING;
 +
                        var self = this;
 +
                        window.setTimeout(function () {
 +
                            self.textchange(dont_autocomplete);
 +
                        }, HC.suggest_delay);
 +
                    };
 +
                    CategoryEditor.prototype.makeForm = function () {
 +
                        var form = make("form");
 +
                        form.method = "POST";
 +
                        form.onsubmit = this.accept.bind(this);
 +
                        this.form = form;
 +
                        var self = this;
 +
                        var text = make("input");
 +
                        text.type = "text";
 +
                        text.size = HC.editbox_width;
 +
                        if (!noSuggestions) {
 +
                            text.onkeyup = function (evt) {
 +
                                var key = evt.keyCode || 0;
 +
                                if (self.ime && self.lastKey === IME && !self.usesComposition && (key === TAB || key === RET || key === ESC || key === SPACE)) {
 +
                                    self.ime = false;
 +
                                }
 +
                                if (self.ime) {
 +
                                    return true;
 +
                                }
 +
                                if (key === UP || key === DOWN || key === PGUP || key === PGDOWN) {
 +
                                    if (self.keyCount === 0) {
 +
                                        return self.processKey(evt);
 +
                                    }
 +
                                }
 +
                                else {
 +
                                    if (key === ESC && self.lastKey !== IME) {
 +
                                        if (!self.resetKeySelection()) {
 +
                                            self.cancel();
 +
                                            return;
 +
                                        }
 +
                                    }
 +
                                    self.invokeSuggestions(key === BS || key === DEL || key === ESC);
 +
                                }
 +
                                return true;
 +
                            };
 +
                            text.onkeydown = function (evt) {
 +
                                var key = evt.keyCode || 0;
 +
                                self.lastKey = key;
 +
                                self.keyCount = 0;
 +
                                if (!self.ime && key === IME && !self.usesComposition) {
 +
                                    self.ime = true;
 +
                                }
 +
                                else if (self.ime && key !== IME && !(key >= 16 && key <= 20 || key >= 91 && key <= 93 || key === 144)) {
 +
                                    self.ime = false;
 +
                                }
 +
                                if (self.ime) {
 +
                                    return true;
 +
                                }
 +
                                if (key === RET) {
 +
                                    return self.accept(evt);
 +
                                }
 +
                                return key === ESC ? evtKill(evt) : true;
 +
                            };
 +
                            text.onkeypress = function (evt) {
 +
                                self.keyCount++;
 +
                                return self.processKey(evt);
 +
                            };
 +
                            $(text).on("focus", function () {
 +
                                makeActive(self);
 +
                            });
 +
                            $(text).on(text.onbeforedeactivate !== undefined && text.createTextRange ? "beforedeactivate" : "blur", this.saveView.bind(this));
 +
                            try {
 +
                                $(text).on("compositionstart", function () {
 +
                                    self.lastKey = IME;
 +
                                    self.usesComposition = true;
 +
                                    self.ime = true;
 +
                                });
 +
                                $(text).on("compositionend", function () {
 +
                                    self.lastKey = IME;
 +
                                    self.usesComposition = true;
 +
                                    self.ime = false;
 +
                                });
 +
                                $(text).on("textInput", function () {
 +
                                    self.ime = false;
 +
                                    self.invokeSuggestions(false);
 +
                                });
 +
                            }
 +
                            catch (_a) { }
 +
                            $(text).on("blur", function () {
 +
                                self.usesComposition = false;
 +
                                self.ime = false;
 +
                            });
 +
                        }
 +
                        this.text = text;
 +
                        this.icon = make("img");
 +
                        var list = null;
 +
                        if (!noSuggestions) {
 +
                            list = make("select");
 +
                            list.onclick = function () {
 +
                                if (self.highlightSuggestion(0)) {
 +
                                    self.textchange(false, true);
 +
                                }
 +
                            };
 +
                            list.ondblclick = function (e) {
 +
                                if (self.highlightSuggestion(0)) {
 +
                                    self.accept(e);
 +
                                }
 +
                            };
 +
                            list.onchange = function () {
 +
                                self.highlightSuggestion(0);
 +
                                self.text.focus();
 +
                            };
 +
                            list.onkeyup = function (evt) {
 +
                                if (evt.keyCode === ESC) {
 +
                                    self.resetKeySelection();
 +
                                    self.text.focus();
 +
                                    window.setTimeout(function () {
 +
                                        self.textchange(true);
 +
                                    }, HC.suggest_delay);
 +
                                }
 +
                                else if (evt.keyCode === RET) {
 +
                                    self.accept(evt);
 +
                                }
 +
                            };
 +
                            if (!HC.fixed_search) {
 +
                                var engineSelector = make("select");
 +
                                for (var key in suggestionConfigs) {
 +
                                    if (suggestionConfigs[key].show) {
 +
                                        var opt = make("option");
 +
                                        opt.value = key;
 +
                                        if (key === this.engine) {
 +
                                            opt.selected = true;
 +
                                        }
 +
                                        opt.appendChild(make(suggestionConfigs[key].name, true));
 +
                                        engineSelector.appendChild(opt);
 +
                                    }
 +
                                }
 +
                                engineSelector.onchange = function () {
 +
                                    self.engine = self.engineSelector.options[self.engineSelector.selectedIndex].value;
 +
                                    self.text.focus();
 +
                                    self.textchange(true, true);
 +
                                };
 +
                                this.engineSelector = engineSelector;
 +
                            }
 +
                        }
 +
                        this.list = list;
 +
                        function button_label(id, defaultText) {
 +
                            var label = null;
 +
                            if (onUpload && window.UFUI !== undefined && window.UIElements !== undefined && window.UFUI.getLabel instanceof Function) {
 +
                                try {
 +
                                    label = window.UFUI.getLabel(id, true);
 +
                                    while (label && label.nodeType !== 3) {
 +
                                        label = label.firstChild;
 +
                                    }
 +
                                }
 +
                                catch (ex) {
 +
                                    label = null;
 +
                                }
 +
                            }
 +
                            if (!label || !label.data) {
 +
                                return defaultText;
 +
                            }
 +
                            return label.data;
 +
                        }
 +
                        var OK = make("input");
 +
                        OK.type = "button";
 +
                        OK.value = button_label("wpOkUploadLbl", HC.messages.ok);
 +
                        OK.onclick = this.accept.bind(this);
 +
                        this.ok = OK;
 +
                        var cancel = make("input");
 +
                        cancel.type = "button";
 +
                        cancel.value = button_label("wpCancelUploadLbl", HC.messages.cancel);
 +
                        cancel.onclick = this.cancel.bind(this);
 +
                        this.cancelButton = cancel;
 +
                        var span = make("span");
 +
                        span.className = "hotcatinput";
 +
                        span.style.position = "relative";
 +
                        span.appendChild(text);
 +
                        span.appendChild(make(" ", true));
 +
                        span.style.whiteSpace = "nowrap";
 +
                        if (list) {
 +
                            span.appendChild(list);
 +
                        }
 +
                        if (this.engineSelector) {
 +
                            span.appendChild(this.engineSelector);
 +
                        }
 +
                        if (!noSuggestions) {
 +
                            span.appendChild(this.icon);
 +
                        }
 +
                        span.appendChild(OK);
 +
                        span.appendChild(cancel);
 +
                        form.appendChild(span);
 +
                        form.style.display = "none";
 +
                        this.span.appendChild(form);
 +
                    };
 +
                    CategoryEditor.prototype.display = function (evt) {
 +
                        if (this.isAddCategory && !onUpload) {
 +
                            new CategoryEditor(this.line, null, this.span, true);
 +
                        }
 +
                        if (!commitButton && !onUpload) {
 +
                            for (var i = 0; i < editors.length; i++) {
 +
                                if (editors[i].state !== CategoryEditor.UNCHANGED) {
 +
                                    setMultiInput();
 +
                                    break;
 +
                                }
 +
                            }
 +
                        }
 +
                        if (!this.form) {
 +
                            this.makeForm();
 +
                        }
 +
                        if (this.list) {
 +
                            this.list.style.display = "none";
 +
                        }
 +
                        if (this.engineSelector) {
 +
                            this.engineSelector.style.display = "none";
 +
                        }
 +
                        this.currentCategory = this.lastSavedCategory;
 +
                        this.currentExists = this.lastSavedExists;
 +
                        this.currentHidden = this.lastSavedHidden;
 +
                        this.currentKey = this.lastSavedKey;
 +
                        this.icon.src = this.currentExists ? HC.existsYes : HC.existsNo;
 +
                        this.text.value = this.currentCategory + (this.currentKey !== null ? "|".concat(this.currentKey) : "");
 +
                        this.originalState = this.state;
 +
                        this.lastInput = this.currentCategory;
 +
                        this.inputExists = this.currentExists;
 +
                        this.state = this.state === CategoryEditor.UNCHANGED ? CategoryEditor.OPEN : CategoryEditor.CHANGE_PENDING;
 +
                        this.lastSelection = {
 +
                            start: this.currentCategory.length,
 +
                            end: this.currentCategory.length
 +
                        };
 +
                        this.showsList = false;
 +
                        if (this.catLink) {
 +
                            this.catLink.style.display = "none";
 +
                        }
 +
                        this.linkSpan.style.display = "none";
 +
                        this.form.style.display = "inline";
 +
                        this.ok.disabled = false;
 +
                        var result = evtKill(evt);
 +
                        this.text.focus();
 +
                        this.text.readOnly = false;
 +
                        checkMultiInput();
 +
                        return result;
 +
                    };
 +
                    CategoryEditor.prototype.show = function (evt, engine, readOnly) {
 +
                        var result = this.display(evt);
 +
                        var v = this.lastSavedCategory;
 +
                        if (!v.length) {
 +
                            return result;
 +
                        }
 +
                        this.text.readOnly = !!readOnly;
 +
                        this.engine = engine;
 +
                        this.textchange(false, true);
 +
                        forceRedraw();
 +
                        return result;
 +
                    };
 +
                    CategoryEditor.prototype.open = function (evt) {
 +
                        return this.show(evt, this.engine && suggestionConfigs[this.engine].temp ? HC.suggestions : this.engine);
 +
                    };
 +
                    CategoryEditor.prototype.down = function (evt) {
 +
                        return this.show(evt, "subcat", true);
 +
                    };
 +
                    CategoryEditor.prototype.up = function (evt) {
 +
                        return this.show(evt, "parentcat");
 +
                    };
 +
                    CategoryEditor.prototype.cancel = function () {
 +
                        if (this.isAddCategory && !onUpload) {
 +
                            this.removeEditor();
 +
                            return;
 +
                        }
 +
                        this.inactivate();
 +
                        this.form.style.display = "none";
 +
                        if (this.catLink) {
 +
                            this.catLink.style.display = "";
 +
                        }
 +
                        this.linkSpan.style.display = "";
 +
                        this.state = this.originalState;
 +
                        this.currentCategory = this.lastSavedCategory;
 +
                        this.currentKey = this.lastSavedKey;
 +
                        this.currentExists = this.lastSavedExists;
 +
                        this.currentHidden = this.lastSavedHidden;
 +
                        if (this.catLink) {
 +
                            if (this.currentKey && this.currentKey.length) {
 +
                                this.catLink.title = this.currentKey;
 +
                            }
 +
                            else {
 +
                                this.catLink.title = "";
 +
                            }
 +
                        }
 +
                        if (this.state === CategoryEditor.UNCHANGED) {
 +
                            if (this.catLink) {
 +
                                this.catLink.style.backgroundColor = "transparent";
 +
                            }
 +
                        }
 +
                        else {
 +
                            if (!onUpload) {
 +
                                try {
 +
                                    this.catLink.style.backgroundColor = HC.bg_changed;
 +
                                }
 +
                                catch (_a) { }
 +
                            }
 +
                        }
 +
                        checkMultiInput();
 +
                        forceRedraw();
 +
                    };
 +
                    CategoryEditor.prototype.removeEditor = function () {
 +
                        if (!newDOM) {
 +
                            var next = this.span.nextSibling;
 +
                            if (next) {
 +
                                next.parentNode.removeChild(next);
 +
                            }
 +
                        }
 +
                        if (this.span && this.span.parentNode) {
 +
                            this.span.parentNode.removeChild(this.span);
 +
                        }
 +
                        for (var i = 0; i < editors.length; i++) {
 +
                            if (editors[i] === this) {
 +
                                editors.splice(i, 1);
 +
                                break;
 +
                            }
 +
                        }
 +
                        checkMultiInput();
 +
                    };
 +
                    CategoryEditor.prototype.rollback = function (evt) {
 +
                        this.undoLink.parentNode.removeChild(this.undoLink);
 +
                        this.undoLink = null;
 +
                        this.currentCategory = this.originalCategory;
 +
                        this.currentKey = this.originalKey;
 +
                        this.currentExists = this.originalExists;
 +
                        this.currentHidden = this.originalHidden;
 +
                        this.lastSavedCategory = this.originalCategory;
 +
                        this.lastSavedKey = this.originalKey;
 +
                        this.lastSavedExists = this.originalExists;
 +
                        this.lastSavedHidden = this.originalHidden;
 +
                        this.state = CategoryEditor.UNCHANGED;
 +
                        if (!this.currentCategory || !this.currentCategory.length) {
 +
                            this.removeEditor();
 +
                        }
 +
                        else {
 +
                            this.catLink.removeChild(this.catLink.firstChild);
 +
                            this.catLink.appendChild(make(this.currentCategory, true));
 +
                            this.catLink.href = wikiPagePath("".concat(HC.category_canonical, ":").concat(this.currentCategory));
 +
                            this.catLink.title = this.currentKey || "";
 +
                            this.catLink.className = this.currentExists ? "" : "new";
 +
                            this.catLink.style.backgroundColor = "transparent";
 +
                            if (this.upDownLinks) {
 +
                                this.upDownLinks.style.display = this.currentExists ? "" : "none";
 +
                            }
 +
                            checkMultiInput();
 +
                        }
 +
                        return evtKill(evt);
 +
                    };
 +
                    CategoryEditor.prototype.inactivate = function () {
 +
                        if (this.list) {
 +
                            this.list.style.display = "none";
 +
                        }
 +
                        if (this.engineSelector) {
 +
                            this.engineSelector.style.display = "none";
 +
                        }
 +
                        this.is_active = false;
 +
                    };
 +
                    CategoryEditor.prototype.acceptCheck = function (dontCheck) {
 +
                        this.sanitizeInput();
 +
                        var value = this.text.value.split("|");
 +
                        var key = null;
 +
                        if (value.length > 1) {
 +
                            key = value[1];
 +
                        }
 +
                        var v = value[0].replace(/_/g, " ").replace(/^\s+|\s+$/g, "");
 +
                        if (HC.capitalizePageNames) {
 +
                            v = capitalize(v);
 +
                        }
 +
                        this.lastInput = v;
 +
                        v = replaceShortcuts(v, HC.shortcuts);
 +
                        if (!v.length) {
 +
                            this.cancel();
 +
                            return false;
 +
                        }
 +
                        if (!dontCheck && (conf.wgNamespaceNumber === 14 && v === conf.wgTitle || HC.blacklist && HC.blacklist.test(v))) {
 +
                            this.cancel();
 +
                            return false;
 +
                        }
 +
                        this.currentCategory = v;
 +
                        this.currentKey = key;
 +
                        this.currentExists = this.inputExists;
 +
                        return true;
 +
                    };
 +
                    CategoryEditor.prototype.accept = function (evt) {
 +
                        this.noCommit = (evtKeys(evt) & 1) !== 0;
 +
                        var result = evtKill(evt);
 +
                        if (this.acceptCheck()) {
 +
                            var toResolve = [this];
 +
                            var original_1 = this.currentCategory;
 +
                            resolveMulti(toResolve, function (resolved) {
 +
                                if (resolved[0].dab) {
 +
                                    showDab(resolved[0]);
 +
                                }
 +
                                else {
 +
                                    if (resolved[0].acceptCheck(true)) {
 +
                                        resolved[0].commit(resolved[0].currentCategory !== original_1 ? HC.messages.cat_resolved.replace(/\$1/g, original_1) : null);
 +
                                    }
 +
                                }
 +
                            });
 +
                        }
 +
                        return result;
 +
                    };
 +
                    CategoryEditor.prototype.close = function () {
 +
                        if (!this.catLink) {
 +
                            this.catLink = make("a");
 +
                            this.catLink.appendChild(make("foo", true));
 +
                            this.catLink.style.display = "none";
 +
                            this.span.insertBefore(this.catLink, this.span.firstChild.nextSibling);
 +
                        }
 +
                        this.catLink.removeChild(this.catLink.firstChild);
 +
                        this.catLink.appendChild(make(this.currentCategory, true));
 +
                        this.catLink.href = wikiPagePath("".concat(HC.category_canonical, ":").concat(this.currentCategory));
 +
                        this.catLink.className = this.currentExists ? "" : "new";
 +
                        this.lastSavedCategory = this.currentCategory;
 +
                        this.lastSavedKey = this.currentKey;
 +
                        this.lastSavedExists = this.currentExists;
 +
                        this.lastSavedHidden = this.currentHidden;
 +
                        this.inactivate();
 +
                        this.form.style.display = "none";
 +
                        this.catLink.title = this.currentKey || "";
 +
                        this.catLink.style.display = "";
 +
                        if (this.isAddCategory) {
 +
                            if (onUpload) {
 +
                                new CategoryEditor(this.line, null, this.span, true);
 +
                            }
 +
                            this.isAddCategory = false;
 +
                            this.linkSpan.parentNode.removeChild(this.linkSpan);
 +
                            this.makeLinkSpan();
 +
                            this.span.appendChild(this.linkSpan);
 +
                        }
 +
                        if (!this.undoLink) {
 +
                            var span = make("span");
 +
                            var lk = make("a");
 +
                            lk.href = "#catlinks";
 +
                            lk.onclick = this.rollback.bind(this);
 +
                            lk.appendChild(make(HC.links.undo, true));
 +
                            lk.title = HC.tooltips.undo;
 +
                            span.appendChild(make(" ", true));
 +
                            span.appendChild(lk);
 +
                            this.normalLinks.appendChild(span);
 +
                            this.undoLink = span;
 +
                            if (!onUpload) {
 +
                                try {
 +
                                    this.catLink.style.backgroundColor = HC.bg_changed;
 +
                                }
 +
                                catch (_a) { }
 +
                            }
 +
                        }
 +
                        if (this.upDownLinks) {
 +
                            this.upDownLinks.style.display = this.lastSavedExists ? "" : "none";
 +
                        }
 +
                        this.linkSpan.style.display = "";
 +
                        this.state = CategoryEditor.CHANGED;
 +
                        checkMultiInput();
 +
                        forceRedraw();
 +
                    };
 +
                    CategoryEditor.prototype.commit = function () {
 +
                        if (this.currentCategory === this.originalCategory && (this.currentKey === this.originalKey || this.currentKey === null && !this.originalKey.length) || conf.wgNamespaceNumber === 14 && this.currentCategory === conf.wgTitle || HC.blacklist && HC.blacklist.test(this.currentCategory)) {
 +
                            this.cancel();
 +
                            return;
 +
                        }
 +
                        this.close();
 +
                        if (!commitButton && !onUpload) {
 +
                            var self_1 = this;
 +
                            initiateEdit(function (failure) {
 +
                                performChanges(failure, self_1);
 +
                            }, function (msg) {
 +
                                oouiDialog.alert(oouiDialog.sanitize(msg), {
 +
                                    title: "HotCat 小工具"
 +
                                });
 +
                            });
 +
                        }
 +
                    };
 +
                    CategoryEditor.prototype.remove = function (evt) {
 +
                        this.doRemove(evtKeys(evt) & 1);
 +
                        return evtKill(evt);
 +
                    };
 +
                    CategoryEditor.prototype.doRemove = function (noCommit) {
 +
                        if (this.isAddCategory) {
 +
                            this.cancel();
 +
                            return;
 +
                        }
 +
                        if (!commitButton && !onUpload) {
 +
                            for (var i = 0; i < editors.length; i++) {
 +
                                if (editors[i].state !== CategoryEditor.UNCHANGED) {
 +
                                    setMultiInput();
 +
                                    break;
 +
                                }
 +
                            }
 +
                        }
 +
                        if (commitButton) {
 +
                            this.catLink.title = "";
 +
                            this.catLink.style.cssText += "; text-decoration : line-through !important;";
 +
                            try {
 +
                                this.catLink.style.backgroundColor = HC.bg_changed;
 +
                            }
 +
                            catch (_a) { }
 +
                            this.originalState = this.state;
 +
                            this.state = CategoryEditor.DELETED;
 +
                            this.normalLinks.style.display = "none";
 +
                            this.undelLink.style.display = "";
 +
                            checkMultiInput();
 +
                        }
 +
                        else {
 +
                            if (onUpload) {
 +
                                this.removeEditor();
 +
                            }
 +
                            else {
 +
                                this.originalState = this.state;
 +
                                this.state = CategoryEditor.DELETED;
 +
                                this.noCommit = noCommit || HC.del_needs_diff;
 +
                                var self_2 = this;
 +
                                initiateEdit(function (failure) {
 +
                                    performChanges(failure, self_2);
 +
                                }, function (msg) {
 +
                                    self_2.state = self_2.originalState;
 +
                                    oouiDialog.alert(oouiDialog.sanitize(msg), {
 +
                                        title: "HotCat 小工具"
 +
                                    });
 +
                                });
 +
                            }
 +
                        }
 +
                    };
 +
                    CategoryEditor.prototype.restore = function (evt) {
 +
                        this.catLink.title = this.currentKey || "";
 +
                        this.catLink.style.textDecoration = "";
 +
                        this.state = this.originalState;
 +
                        if (this.state === CategoryEditor.UNCHANGED) {
 +
                            this.catLink.style.backgroundColor = "transparent";
 +
                        }
 +
                        else {
 +
                            try {
 +
                                this.catLink.style.backgroundColor = HC.bg_changed;
 +
                            }
 +
                            catch (_a) { }
 +
                        }
 +
                        this.normalLinks.style.display = "";
 +
                        this.undelLink.style.display = "none";
 +
                        checkMultiInput();
 +
                        return evtKill(evt);
 +
                    };
 +
                    CategoryEditor.prototype.selectEngine = function (engineName) {
 +
                        if (!this.engineSelector) {
 +
                            return;
 +
                        }
 +
                        for (var i = 0; i < this.engineSelector.options.length; i++) {
 +
                            this.engineSelector.options[i].selected = this.engineSelector.options[i].value === engineName;
 +
                        }
 +
                    };
 +
                    CategoryEditor.prototype.sanitizeInput = function () {
 +
                        var v = this.text.value || "";
 +
                        v = v.replace(/^(\s|_)+/, "");
 +
                        var re = new RegExp("^(".concat(HC.category_regexp, "):"));
 +
                        if (re.test(v)) {
 +
                            v = v.substring(v.indexOf(":") + 1).replace(/^(\s|_)+/, "");
 +
                        }
 +
                        v = v.replace(/\u200E$/, "");
 +
                        if (HC.capitalizePageNames) {
 +
                            v = capitalize(v);
 +
                        }
 +
                        if (this.text.value !== null && this.text.value !== v) {
 +
                            this.text.value = v;
 +
                        }
 +
                    };
 +
                    CategoryEditor.prototype.makeCall = function (url, callbackObj, engine, queryKey, cleanKey) {
 +
                        var _this = this;
 +
                        var cb = callbackObj;
 +
                        var e = engine, v = queryKey, z = cleanKey;
 +
                        $.ajax({
 +
                            url: url,
 +
                            method: "GET",
 +
                            dataType: "json",
 +
                            success: function (json) {
 +
                                var titles = e.handler(json, z);
 +
                                if (titles && titles.length) {
 +
                                    if (cb.allTitles === null) {
 +
                                        cb.allTitles = titles;
 +
                                    }
 +
                                    else {
 +
                                        cb.allTitles = cb.allTitles.concat(titles);
 +
                                    }
 +
                                    if (titles.exists) {
 +
                                        cb.exists = true;
 +
                                    }
 +
                                    if (titles.normalized) {
 +
                                        cb.normalized = titles.normalized;
 +
                                    }
 +
                                }
 +
                            },
 +
                            error: function (req) {
 +
                                if (!req) {
 +
                                    noSuggestions = true;
 +
                                }
 +
                                cb.dontCache = true;
 +
                            },
 +
                            complete: function () {
 +
                                cb.callsMade++;
 +
                                if (cb.callsMade === cb.nofCalls) {
 +
                                    if (cb.exists) {
 +
                                        cb.allTitles.exists = true;
 +
                                    }
 +
                                    if (cb.normalized) {
 +
                                        cb.allTitles.normalized = cb.normalized;
 +
                                    }
 +
                                    if (!cb.dontCache && !suggestionConfigs[cb.engineName].cache[z]) {
 +
                                        suggestionConfigs[cb.engineName].cache[z] = cb.allTitles;
 +
                                    }
 +
                                    _this.text.readOnly = false;
 +
                                    if (!cb.cancelled) {
 +
                                        _this.showSuggestions(cb.allTitles, cb.noCompletion, v, cb.engineName);
 +
                                    }
 +
                                    if (cb === _this.callbackObj) {
 +
                                        _this.callbackObj = null;
 +
                                    }
 +
                                    cb = undefined;
 +
                                }
 +
                            }
 +
                        });
 +
                    };
 +
                    CategoryEditor.prototype.textchange = function (_dont_autocomplete, force) {
 +
                        makeActive(this);
 +
                        this.sanitizeInput();
 +
                        var v = this.text.value;
 +
                        var pipe = v.indexOf("|");
 +
                        if (pipe >= 0) {
 +
                            this.currentKey = v.substring(pipe + 1);
 +
                            v = v.substring(0, pipe);
 +
                        }
 +
                        else {
 +
                            this.currentKey = null;
 +
                        }
 +
                        if (this.lastInput === v && !force) {
 +
                            return;
 +
                        }
 +
                        if (this.lastInput !== v) {
 +
                            checkMultiInput();
 +
                        }
 +
                        this.lastInput = v;
 +
                        this.lastRealInput = v;
 +
                        this.ok.disabled = v.length && HC.blacklist && HC.blacklist.test(v);
 +
                        if (noSuggestions) {
 +
                            if (this.list) {
 +
                                this.list.style.display = "none";
 +
                            }
 +
                            if (this.engineSelector) {
 +
                                this.engineSelector.style.display = "none";
 +
                            }
 +
                            if (this.icon) {
 +
                                this.icon.style.display = "none";
 +
                            }
 +
                            return;
 +
                        }
 +
                        if (!v.length) {
 +
                            this.showSuggestions([]);
 +
                            return;
 +
                        }
 +
                        var cleanKey = v.replace(/[\u200E\u200F\u202A-\u202E]/g, "").replace(wikiTextBlankRE, " ");
 +
                        cleanKey = replaceShortcuts(cleanKey, HC.shortcuts);
 +
                        cleanKey = cleanKey.replace(/^\s+|\s+$/g, "");
 +
                        if (!cleanKey.length) {
 +
                            this.showSuggestions([]);
 +
                            return;
 +
                        }
 +
                        if (this.callbackObj) {
 +
                            this.callbackObj.cancelled = true;
 +
                        }
 +
                        var engineName = suggestionConfigs[this.engine] ? this.engine : "combined";
 +
                        var dont_autocomplete = _dont_autocomplete || suggestionConfigs[engineName].noCompletion;
 +
                        if (suggestionConfigs[engineName].cache[cleanKey]) {
 +
                            this.showSuggestions(suggestionConfigs[engineName].cache[cleanKey], dont_autocomplete, v, engineName);
 +
                            return;
 +
                        }
 +
                        var engines = suggestionConfigs[engineName].engines;
 +
                        this.callbackObj = {
 +
                            allTitles: null,
 +
                            callsMade: 0,
 +
                            nofCalls: engines.length,
 +
                            noCompletion: dont_autocomplete,
 +
                            engineName: engineName
 +
                        };
 +
                        this.makeCalls(engines, this.callbackObj, v, cleanKey);
 +
                    };
 +
                    CategoryEditor.prototype.makeCalls = function (engines, cb, v, cleanKey) {
 +
                        for (var j = 0; j < engines.length; j++) {
 +
                            var engine = suggestionEngines[engines[j]];
 +
                            var url = "".concat(conf.wgServer).concat(conf.wgScriptPath).concat(engine.uri.replace(/\$1/g, encodeURIComponent(cleanKey)));
 +
                            this.makeCall(url, cb, engine, v, cleanKey);
 +
                        }
 +
                    };
 +
                    CategoryEditor.prototype.showSuggestions = function (titles, dontAutocomplete, queryKey, engineName) {
 +
                        this.text.readOnly = false;
 +
                        this.dab = null;
 +
                        this.showsList = false;
 +
                        if (!this.list) {
 +
                            return;
 +
                        }
 +
                        if (noSuggestions) {
 +
                            if (this.list) {
 +
                                this.list.style.display = "none";
 +
                            }
 +
                            if (this.engineSelector) {
 +
                                this.engineSelector.style.display = "none";
 +
                            }
 +
                            if (this.icon) {
 +
                                this.icon.style.display = "none";
 +
                            }
 +
                            this.inputExists = true;
 +
                            return;
 +
                        }
 +
                        this.engineName = engineName;
 +
                        if (engineName) {
 +
                            if (!this.engineSelector) {
 +
                                this.engineName = null;
 +
                            }
 +
                        }
 +
                        else {
 +
                            if (this.engineSelector) {
 +
                                this.engineSelector.style.display = "none";
 +
                            }
 +
                        }
 +
                        if (queryKey) {
 +
                            if (this.lastInput.indexOf(queryKey)) {
 +
                                return;
 +
                            }
 +
                            if (this.lastQuery && this.lastInput.indexOf(this.lastQuery) === 0 && this.lastQuery.length > queryKey.length) {
 +
                                return;
 +
                            }
 +
                        }
 +
                        this.lastQuery = queryKey;
 +
                        var v = this.text.value.split("|");
 +
                        var key = v.length > 1 ? "|".concat(v[1]) : "";
 +
                        v = HC.capitalizePageNames ? capitalize(v[0]) : v[0];
 +
                        var vNormalized = v;
 +
                        var knownToExist = titles && titles.exists;
 +
                        var i;
 +
                        if (titles) {
 +
                            if (titles.normalized && v.indexOf(queryKey) === 0) {
 +
                                vNormalized = titles.normalized + v.substring(queryKey.length);
 +
                            }
 +
                            var vLow_1 = vNormalized.toLowerCase();
 +
                            if (HC.blacklist) {
 +
                                for (i = 0; i < titles.length; i++) {
 +
                                    if (HC.blacklist.test(titles[i])) {
 +
                                        titles.splice(i, 1);
 +
                                        i--;
 +
                                    }
 +
                                }
 +
                            }
 +
                            titles.sort(function (a, b) {
 +
                                if (a === b) {
 +
                                    return 0;
 +
                                }
 +
                                if (a.indexOf(b) === 0) {
 +
                                    return 1;
 +
                                }
 +
                                if (b.indexOf(a) === 0) {
 +
                                    return -1;
 +
                                }
 +
                                var prefixMatchA = a.indexOf(vNormalized) === 0 ? 1 : 0;
 +
                                var prefixMatchB = b.indexOf(vNormalized) === 0 ? 1 : 0;
 +
                                if (prefixMatchA !== prefixMatchB) {
 +
                                    return prefixMatchB - prefixMatchA;
 +
                                }
 +
                                var aLow = a.toLowerCase(), bLow = b.toLowerCase();
 +
                                prefixMatchA = aLow.indexOf(vLow_1) === 0 ? 1 : 0;
 +
                                prefixMatchB = bLow.indexOf(vLow_1) === 0 ? 1 : 0;
 +
                                if (prefixMatchA !== prefixMatchB) {
 +
                                    return prefixMatchB - prefixMatchA;
 +
                                }
 +
                                if (a < b) {
 +
                                    return -1;
 +
                                }
 +
                                if (b < a) {
 +
                                    return 1;
 +
                                }
 +
                                return 0;
 +
                            });
 +
                            for (i = 0; i < titles.length; i++) {
 +
                                if (i + 1 < titles.length && titles[i] === titles[i + 1] || conf.wgNamespaceNumber === 14 && titles[i] === conf.wgTitle) {
 +
                                    titles.splice(i, 1);
 +
                                    i--;
 +
                                }
 +
                            }
 +
                        }
 +
                        if (!titles || !titles.length) {
 +
                            if (this.list) {
 +
                                this.list.style.display = "none";
 +
                            }
 +
                            if (this.engineSelector) {
 +
                                this.engineSelector.style.display = "none";
 +
                            }
 +
                            if (engineName && suggestionConfigs[engineName] && !suggestionConfigs[engineName].temp) {
 +
                                if (this.icon) {
 +
                                    this.icon.src = HC.existsNo;
 +
                                }
 +
                                this.inputExists = false;
 +
                            }
 +
                            return;
 +
                        }
 +
                        var firstTitle = titles[0];
 +
                        var completed = this.autoComplete(firstTitle, v, vNormalized, key, dontAutocomplete);
 +
                        var existing = completed || knownToExist || firstTitle === replaceShortcuts(v, HC.shortcuts);
 +
                        if (engineName && suggestionConfigs[engineName] && !suggestionConfigs[engineName].temp) {
 +
                            this.icon.src = existing ? HC.existsYes : HC.existsNo;
 +
                            this.inputExists = existing;
 +
                        }
 +
                        if (completed) {
 +
                            this.lastInput = firstTitle;
 +
                            if (titles.length === 1) {
 +
                                this.list.style.display = "none";
 +
                                if (this.engineSelector) {
 +
                                    this.engineSelector.style.display = "none";
 +
                                }
 +
                                return;
 +
                            }
 +
                        }
 +
                        while (this.list.firstChild) {
 +
                            this.list.removeChild(this.list.firstChild);
 +
                        }
 +
                        for (i = 0; i < titles.length; i++) {
 +
                            var opt = make("option");
 +
                            opt.appendChild(make(titles[i], true));
 +
                            opt.selected = completed && i === 0;
 +
                            this.list.appendChild(opt);
 +
                        }
 +
                        this.displayList();
 +
                    };
 +
                    CategoryEditor.prototype.displayList = function () {
 +
                        this.showsList = true;
 +
                        if (!this.is_active) {
 +
                            this.list.style.display = "none";
 +
                            if (this.engineSelector) {
 +
                                this.engineSelector.style.display = "none";
 +
                            }
 +
                            return;
 +
                        }
 +
                        var nofItems = this.list.options.length > HC.listSize ? HC.listSize : this.list.options.length;
 +
                        if (nofItems <= 1) {
 +
                            nofItems = 2;
 +
                        }
 +
                        this.list.size = nofItems;
 +
                        this.list.style.align = is_rtl ? "right" : "left";
 +
                        this.list.style.zIndex = 5;
 +
                        this.list.style.position = "absolute";
 +
                        var anchor = is_rtl ? "right" : "left";
 +
                        var listh = 0;
 +
                        if (this.list.style.display === "none") {
 +
                            this.list.style.top = "".concat(this.text.offsetTop, "px");
 +
                            this.list.style[anchor] = "-10000px";
 +
                            this.list.style.display = "";
 +
                            listh = this.list.offsetHeight;
 +
                            this.list.style.display = "none";
 +
                        }
 +
                        else {
 +
                            listh = this.list.offsetHeight;
 +
                        }
 +
                        var maxListHeight = listh;
 +
                        if (nofItems < HC.listSize) {
 +
                            maxListHeight = listh / nofItems * HC.listSize;
 +
                        }
 +
                        function viewport(what) {
 +
                            if (is_webkit && !document.evaluate) {
 +
                                return window["inner".concat(what)];
 +
                            }
 +
                            var s = "client".concat(what);
 +
                            if (window.opera) {
 +
                                return document.body[s];
 +
                            }
 +
                            return (document.documentElement ? document.documentElement[s] : 0) || document.body[s] || 0;
 +
                        }
 +
                        function scroll_offset(what) {
 +
                            var s = "scroll".concat(what);
 +
                            var result = (document.documentElement ? document.documentElement[s] : 0) || document.body[s] || 0;
 +
                            if (is_rtl && what === "Left") {
 +
                                if (result < 0) {
 +
                                    result = -result;
 +
                                }
 +
                                if (!is_webkit) {
 +
                                    result = scroll_offset("Width") - viewport("Width") - result;
 +
                                }
 +
                            }
 +
                            return result;
 +
                        }
 +
                        function position(_node) {
 +
                            var node = _node;
 +
                            if (node.getBoundingClientRect) {
 +
                                var box = node.getBoundingClientRect();
 +
                                return {
 +
                                    x: Math.round(box.left + scroll_offset("Left")),
 +
                                    y: Math.round(box.top + scroll_offset("Top"))
 +
                                };
 +
                            }
 +
                            var t = 0, l = 0;
 +
                            do {
 +
                                t += node.offsetTop || 0;
 +
                                l += node.offsetLeft || 0;
 +
                                node = node.offsetParent;
 +
                            } while (node);
 +
                            return {
 +
                                x: l,
 +
                                y: t
 +
                            };
 +
                        }
 +
                        var textPos = position(this.text), nl = 0, textBoxWidth = this.text.offsetWidth || this.text.clientWidth;
 +
                        var nt = 0, offset = 0;
 +
                        if (this.engineName) {
 +
                            this.engineSelector.style.zIndex = 5;
 +
                            this.engineSelector.style.position = "absolute";
 +
                            this.engineSelector.style.width = "".concat(textBoxWidth, "px");
 +
                            if (this.engineSelector.style.display === "none") {
 +
                                this.engineSelector.style[anchor] = "-10000px";
 +
                                this.engineSelector.style.top = "0";
 +
                                this.engineSelector.style.display = "";
 +
                                offset = this.engineSelector.offsetHeight;
 +
                                this.engineSelector.style.display = "none";
 +
                            }
 +
                            else {
 +
                                offset = this.engineSelector.offsetHeight;
 +
                            }
 +
                            this.engineSelector.style[anchor] = "".concat(nl, "px");
 +
                        }
 +
                        if (textPos.y < maxListHeight + offset + 1) {
 +
                            nt = this.text.offsetHeight + offset + 1;
 +
                            if (this.engineName) {
 +
                                this.engineSelector.style.top = "".concat(this.text.offsetHeight, "px");
 +
                            }
 +
                        }
 +
                        else {
 +
                            nt = -listh - offset - 1;
 +
                            if (this.engineName) {
 +
                                this.engineSelector.style.top = "".concat(-(offset + 1), "px");
 +
                            }
 +
                        }
 +
                        this.list.style.top = "".concat(nt, "px");
 +
                        this.list.style.width = "";
 +
                        this.list.style[anchor] = "".concat(nl, "px");
 +
                        if (this.engineName) {
 +
                            this.selectEngine(this.engineName);
 +
                            this.engineSelector.style.display = "";
 +
                        }
 +
                        this.list.style.display = "block";
 +
                        if (this.list.offsetWidth < textBoxWidth) {
 +
                            this.list.style.width = "".concat(textBoxWidth, "px");
 +
                            return;
 +
                        }
 +
                        var scroll = scroll_offset("Left");
 +
                        var view_w = viewport("Width");
 +
                        var w = this.list.offsetWidth;
 +
                        var l_pos = position(this.list);
 +
                        var left = l_pos.x;
 +
                        var right = left + w;
 +
                        if (left < scroll || right > scroll + view_w) {
 +
                            if (w > view_w) {
 +
                                w = view_w;
 +
                                this.list.style.width = "".concat(w, "px");
 +
                                if (is_rtl) {
 +
                                    left = right - w;
 +
                                }
 +
                                else {
 +
                                    right = left + w;
 +
                                }
 +
                            }
 +
                            var relative_offset = 0;
 +
                            if (left < scroll) {
 +
                                relative_offset = scroll - left;
 +
                            }
 +
                            else if (right > scroll + view_w) {
 +
                                relative_offset = -(right - scroll - view_w);
 +
                            }
 +
                            if (is_rtl) {
 +
                                relative_offset = -relative_offset;
 +
                            }
 +
                            if (relative_offset) {
 +
                                this.list.style[anchor] = "".concat(nl + relative_offset, "px");
 +
                            }
 +
                        }
 +
                    };
 +
                    CategoryEditor.prototype.autoComplete = function (newVal, _actVal, normalizedActVal, key, dontModify) {
 +
                        var actVal = _actVal;
 +
                        if (newVal === actVal) {
 +
                            return true;
 +
                        }
 +
                        if (dontModify || this.ime || !this.canSelect()) {
 +
                            return false;
 +
                        }
 +
                        if (newVal.indexOf(actVal)) {
 +
                            if (normalizedActVal && newVal.indexOf(normalizedActVal) === 0) {
 +
                                if (this.lastRealInput === actVal) {
 +
                                    this.lastRealInput = normalizedActVal;
 +
                                }
 +
                                actVal = normalizedActVal;
 +
                            }
 +
                            else {
 +
                                return false;
 +
                            }
 +
                        }
 +
                        this.text.focus();
 +
                        this.text.value = newVal + key;
 +
                        this.setSelection(actVal.length, newVal.length);
 +
                        return true;
 +
                    };
 +
                    CategoryEditor.prototype.canSelect = function () {
 +
                        return this.text.setSelectionRange || this.text.createTextRange || this.text.selectionStart !== undefined && this.text.selectionEnd !== undefined;
 +
                    };
 +
                    CategoryEditor.prototype.setSelection = function (from, to) {
 +
                        if (!this.text.value) {
 +
                            return;
 +
                        }
 +
                        if (this.text.setSelectionRange) {
 +
                            this.text.setSelectionRange(from, to);
 +
                        }
 +
                        else if (this.text.selectionStart !== undefined) {
 +
                            if (from > this.text.selectionStart) {
 +
                                this.text.selectionEnd = to;
 +
                                this.text.selectionStart = from;
 +
                            }
 +
                            else {
 +
                                this.text.selectionStart = from;
 +
                                this.text.selectionEnd = to;
 +
                            }
 +
                        }
 +
                        else if (this.text.createTextRange) {
 +
                            var new_selection = this.text.createTextRange();
 +
                            new_selection.move("character", from);
 +
                            new_selection.moveEnd("character", to - from);
 +
                            new_selection.select();
 +
                        }
 +
                    };
 +
                    CategoryEditor.prototype.getSelection = function () {
 +
                        var from = 0, to = 0;
 +
                        if (!this.text.value) {
 +
                            return {
 +
                                start: from,
 +
                                end: to
 +
                            };
 +
                        }
 +
                        if (this.text.selectionStart !== undefined) {
 +
                            from = this.text.selectionStart;
 +
                            to = this.text.selectionEnd;
 +
                        }
 +
                        else if (document.selection && document.selection.createRange) {
 +
                            var rng = document.selection.createRange().duplicate();
 +
                            if (rng.parentElement() === this.text) {
 +
                                try {
 +
                                    var textRng = this.text.createTextRange();
 +
                                    textRng.move("character", 0);
 +
                                    textRng.setEndPoint("EndToEnd", rng);
 +
                                    to = textRng.text.length;
 +
                                    textRng.setEndPoint("EndToStart", rng);
 +
                                    from = textRng.text.length;
 +
                                }
 +
                                catch (notFocused) {
 +
                                    from = this.text.value.length;
 +
                                    to = from;
 +
                                }
 +
                            }
 +
                        }
 +
                        return {
 +
                            start: from,
 +
                            end: to
 +
                        };
 +
                    };
 +
                    CategoryEditor.prototype.saveView = function () {
 +
                        this.lastSelection = this.getSelection();
 +
                    };
 +
                    CategoryEditor.prototype.processKey = function (evt) {
 +
                        var dir = 0;
 +
                        switch (this.lastKey) {
 +
                            case UP:
 +
                                dir = -1;
 +
                                break;
 +
                            case DOWN:
 +
                                dir = 1;
 +
                                break;
 +
                            case PGUP:
 +
                                dir = -HC.listSize;
 +
                                break;
 +
                            case PGDOWN:
 +
                                dir = HC.listSize;
 +
                                break;
 +
                            case ESC:
 +
                                return evtKill(evt);
 +
                        }
 +
                        if (dir) {
 +
                            if (this.list.style.display !== "none") {
 +
                                this.highlightSuggestion(dir);
 +
                                return evtKill(evt);
 +
                            }
 +
                            else if (this.keyCount <= 1 && (!this.callbackObj || this.callbackObj.callsMade === this.callbackObj.nofCalls)) {
 +
                                this.textchange();
 +
                            }
 +
                        }
 +
                        return true;
 +
                    };
 +
                    CategoryEditor.prototype.highlightSuggestion = function (dir) {
 +
                        if (noSuggestions || !this.list || this.list.style.display === "none") {
 +
                            return false;
 +
                        }
 +
                        var curr = this.list.selectedIndex;
 +
                        var tgt = -1;
 +
                        if (dir === 0) {
 +
                            if (curr < 0 || curr >= this.list.options.length) {
 +
                                return false;
 +
                            }
 +
                            tgt = curr;
 +
                        }
 +
                        else {
 +
                            tgt = curr < 0 ? 0 : curr + dir;
 +
                            tgt = tgt < 0 ? 0 : tgt;
 +
                            if (tgt >= this.list.options.length) {
 +
                                tgt = this.list.options.length - 1;
 +
                            }
 +
                        }
 +
                        if (tgt !== curr || dir === 0) {
 +
                            if (curr >= 0 && curr < this.list.options.length && dir !== 0) {
 +
                                this.list.options[curr].selected = false;
 +
                            }
 +
                            this.list.options[tgt].selected = true;
 +
                            var v = this.text.value.split("|");
 +
                            var key = v.length > 1 ? "|".concat(v[1]) : "";
 +
                            var completed = this.autoComplete(this.list.options[tgt].text, this.lastRealInput, null, key, false);
 +
                            if (!completed || this.list.options[tgt].text === this.lastRealInput) {
 +
                                this.text.value = this.list.options[tgt].text + key;
 +
                                if (this.canSelect()) {
 +
                                    this.setSelection(this.list.options[tgt].text.length, this.list.options[tgt].text.length);
 +
                                }
 +
                            }
 +
                            this.lastInput = this.list.options[tgt].text;
 +
                            this.inputExists = true;
 +
                            if (this.icon) {
 +
                                this.icon.src = HC.existsYes;
 +
                            }
 +
                            this.state = CategoryEditor.CHANGE_PENDING;
 +
                        }
 +
                        return true;
 +
                    };
 +
                    CategoryEditor.prototype.resetKeySelection = function () {
 +
                        if (noSuggestions || !this.list || this.list.style.display === "none") {
 +
                            return false;
 +
                        }
 +
                        var curr = this.list.selectedIndex;
 +
                        if (curr >= 0 && curr < this.list.options.length) {
 +
                            this.list.options[curr].selected = false;
 +
                            var v = this.text.value.split("|");
 +
                            var key = v.length > 1 ? "|".concat(v[1]) : "";
 +
                            var result = v[0] !== this.lastInput;
 +
                            if (v[0] !== this.lastRealInput) {
 +
                                this.text.value = this.lastRealInput + key;
 +
                                result = true;
 +
                            }
 +
                            this.lastInput = this.lastRealInput;
 +
                            return result;
 +
                        }
 +
                        return false;
 +
                    };
 +
                    CategoryEditor.UNCHANGED = 0;
 +
                    CategoryEditor.OPEN = 1;
 +
                    CategoryEditor.CHANGE_PENDING = 2;
 +
                    CategoryEditor.CHANGED = 3;
 +
                    CategoryEditor.DELETED = 4;
 +
                    return CategoryEditor;
 +
                }());
 +
                saveInProgress = false;
 +
                suggestionEngines = {
 +
                    opensearch: {
 +
                        uri: "/api.php?format=json&action=opensearch&namespace=14&limit=30&search=Category:$1",
 +
                        handler: function (queryResult, queryKey) {
 +
                            if (queryResult && queryResult.length >= 2) {
 +
                                var key = queryResult[0].substring(queryResult[0].indexOf(":") + 1);
 +
                                var titles = queryResult[1];
 +
                                var exists = false;
 +
                                if (!cat_prefix) {
 +
                                    cat_prefix = new RegExp("^(".concat(HC.category_regexp, "):"));
 +
                                }
 +
                                for (var i = 0; i < titles.length; i++) {
 +
                                    cat_prefix.lastIndex = 0;
 +
                                    var m = cat_prefix.exec(titles[i]);
 +
                                    if (m && m.length > 1) {
 +
                                        titles[i] = titles[i].substring(titles[i].indexOf(":") + 1);
 +
                                        if (key === titles[i]) {
 +
                                            exists = true;
 +
                                        }
 +
                                    }
 +
                                    else {
 +
                                        titles.splice(i, 1);
 +
                                        i--;
 +
                                    }
 +
                                }
 +
                                titles.exists = exists;
 +
                                if (queryKey !== key) {
 +
                                    titles.normalized = key;
 +
                                }
 +
                                return titles;
 +
                            }
 +
                            return null;
 +
                        }
 +
                    },
 +
                    internalsearch: {
 +
                        uri: "/api.php?format=json&action=query&list=allpages&apnamespace=14&aplimit=30&apfrom=$1&apprefix=$1",
 +
                        handler: function (queryResult) {
 +
                            if (queryResult && queryResult.query && queryResult.query.allpages) {
 +
                                var titles = queryResult.query.allpages;
 +
                                for (var i = 0; i < titles.length; i++) {
 +
                                    titles[i] = titles[i].title.substring(titles[i].title.indexOf(":") + 1);
 +
                                }
 +
                                return titles;
 +
                            }
 +
                            return null;
 +
                        }
 +
                    },
 +
                    exists: {
 +
                        uri: "/api.php?format=json&action=query&prop=info&titles=Category:$1",
 +
                        handler: function (queryResult, queryKey) {
 +
                            if (queryResult && queryResult.query && queryResult.query.pages && !queryResult.query.pages[-1]) {
 +
                                for (var p in queryResult.query.pages) {
 +
                                    var title_1 = queryResult.query.pages[p].title;
 +
                                    title_1 = title_1.substring(title_1.indexOf(":") + 1);
 +
                                    var titles = [title_1];
 +
                                    titles.exists = true;
 +
                                    if (queryKey !== title_1) {
 +
                                        titles.normalized = title_1;
 +
                                    }
 +
                                    return titles;
 +
                                }
 +
                            }
 +
                            return null;
 +
                        }
 +
                    },
 +
                    subcategories: {
 +
                        uri: "/api.php?format=json&action=query&list=categorymembers&cmtype=subcat&cmlimit=max&cmtitle=Category:$1",
 +
                        handler: function (queryResult) {
 +
                            if (queryResult && queryResult.query && queryResult.query.categorymembers) {
 +
                                var titles = queryResult.query.categorymembers;
 +
                                for (var i = 0; i < titles.length; i++) {
 +
                                    titles[i] = titles[i].title.substring(titles[i].title.indexOf(":") + 1);
 +
                                }
 +
                                return titles;
 +
                            }
 +
                            return null;
 +
                        }
 +
                    },
 +
                    parentcategories: {
 +
                        uri: "/api.php?format=json&action=query&prop=categories&titles=Category:$1&cllimit=max",
 +
                        handler: function (queryResult) {
 +
                            if (queryResult && queryResult.query && queryResult.query.pages) {
 +
                                for (var p in queryResult.query.pages) {
 +
                                    if (queryResult.query.pages[p].categories) {
 +
                                        var titles = queryResult.query.pages[p].categories;
 +
                                        for (var i = 0; i < titles.length; i++) {
 +
                                            titles[i] = titles[i].title.substring(titles[i].title.indexOf(":") + 1);
 +
                                        }
 +
                                        return titles;
 +
                                    }
 +
                                }
 +
                            }
 +
                            return null;
 +
                        }
 +
                    }
 +
                };
 +
                suggestionConfigs = {
 +
                    searchindex: {
 +
                        name: "Search index",
 +
                        engines: ["opensearch"],
 +
                        cache: {},
 +
                        show: true,
 +
                        temp: false,
 +
                        noCompletion: false
 +
                    },
 +
                    pagelist: {
 +
                        name: "Page list",
 +
                        engines: ["internalsearch", "exists"],
 +
                        cache: {},
 +
                        show: true,
 +
                        temp: false,
 +
                        noCompletion: false
 +
                    },
 +
                    combined: {
 +
                        name: "Combined search",
 +
                        engines: ["opensearch", "internalsearch"],
 +
                        cache: {},
 +
                        show: true,
 +
                        temp: false,
 +
                        noCompletion: false
 +
                    },
 +
                    subcat: {
 +
                        name: "Subcategories",
 +
                        engines: ["subcategories"],
 +
                        cache: {},
 +
                        show: true,
 +
                        temp: true,
 +
                        noCompletion: true
 +
                    },
 +
                    parentcat: {
 +
                        name: "Parent categories",
 +
                        engines: ["parentcategories"],
 +
                        cache: {},
 +
                        show: true,
 +
                        temp: true,
 +
                        noCompletion: true
 +
                    }
 +
                };
 +
                dummyElement = make(" ", true);
 +
                BS = 8, TAB = 9, RET = 13, ESC = 27, SPACE = 32, PGUP = 33, PGDOWN = 34, UP = 38, DOWN = 40, DEL = 46, IME = 229;
 +
                cleanedText = null;
 +
                initialized = false;
 +
                setupTimeout = null;
 +
                window.hotcat_get_state = function () {
 +
                    return getState();
 +
                };
 +
                window.hotcat_set_state = function (state) {
 +
                    return setState(state);
 +
                };
 +
                window.hotcat_close_form = function () {
 +
                    closeForm();
 +
                };
 +
                HC.runWhenReady = function (callback) {
 +
                    mw.hook("hotcat.ready").add(callback);
 +
                };
 +
                mw.config.set("disableAJAXCategories", true);
 +
                if (conf.wgCanonicalSpecialPageName !== "Upload") {
 +
                    mw.hook("postEdit").add(function () {
 +
                        catLine = null;
 +
                        editors = [];
 +
                        initialized = false;
 +
                        HC.started = false;
 +
                        run();
 +
                    });
 +
                }
 +
                run();
 +
                return [2];
 
         }
 
         }
        mw.loader.using('user', startHotCat, startHotCat);
+
    });
    } else {
+
}); })();
        jQuery(document).ready(run);
+
 
    }
+
/* </pre> */
})();
 
/* jshint ignore:end */
 
//</nowiki>
 

2022年9月6日 (火) 02:54時点における最新版

/* <pre> */
/**
 * -------------------------------------------------------------------------
 * !!! DON'T MODIFY THIS PAGE MANUALLY, YOUR CHANGES WILL BE OVERWRITTEN !!!
 * -------------------------------------------------------------------------
 */
var _addText = '{{GHIACode|page=GHIA:MoegirlPediaInterfaceCodes/blob/master/src/gadgets/HotCat/MediaWiki:Gadget-HotCat.js|user=[[U:AnnAngela]]|longId=4d899c79e616aad7593a9b843114e8d331af873f|shortId=4d899c7|message=fix(Gadget-HotCat): Fix unreachable condition}}';

"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    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) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __generator = (this && this.__generator) || function (thisArg, body) {
    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
    function verb(n) { return function (v) { return step([n, v]); }; }
    function step(op) {
        if (f) throw new TypeError("Generator is already executing.");
        while (_) try {
            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
            if (y = 0, t) op = [op[0] & 2, t.value];
            switch (op[0]) {
                case 0: case 1: t = op; break;
                case 4: _.label++; return { value: op[1], done: false };
                case 5: _.label++; y = op[1]; op = [0]; continue;
                case 7: op = _.ops.pop(); _.trys.pop(); continue;
                default:
                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
                    if (t[2]) _.ops.pop();
                    _.trys.pop(); continue;
            }
            op = body.call(thisArg, _);
        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
    }
};
var __read = (this && this.__read) || function (o, n) {
    var m = typeof Symbol === "function" && o[Symbol.iterator];
    if (!m) return o;
    var i = m.call(o), r, ar = [], e;
    try {
        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
    }
    catch (error) { e = { error: error }; }
    finally {
        try {
            if (r && !r.done && (m = i["return"])) m.call(i);
        }
        finally { if (e) throw e.error; }
    }
    return ar;
};
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
        if (ar || !(i in from)) {
            if (!ar) ar = Array.prototype.slice.call(from, 0, i);
            ar[i] = from[i];
        }
    }
    return to.concat(ar || Array.prototype.slice.call(from));
};
window.hotcat_translations_from_commons = false;
(function () { return __awaiter(void 0, void 0, void 0, function () {
    function autoLocalize(namespaceNumber, _fallback) {
        var fallback = _fallback;
        function createRegexpStr(name) {
            if (!name || !name.length) {
                return "";
            }
            var regex_name = "";
            for (var i = 0; i < name.length; i++) {
                var initial = name.charAt(i), ll = initial.toLowerCase(), ul = initial.toUpperCase();
                if (ll === ul) {
                    regex_name += initial;
                }
                else {
                    regex_name += "[".concat(ll).concat(ul, "]");
                }
            }
            return regex_name.replace(/([\\^$.?*+()])/g, "\\$1").replace(wikiTextBlankRE, wikiTextBlank);
        }
        fallback = fallback.toLowerCase();
        var canonical = formattedNamespaces["".concat(namespaceNumber)].toLowerCase();
        var regexp = createRegexpStr(canonical);
        if (fallback && canonical !== fallback) {
            regexp += "|".concat(createRegexpStr(fallback));
        }
        if (namespaceIds) {
            for (var cat_name in namespaceIds) {
                if (typeof cat_name === "string" && cat_name.toLowerCase() !== canonical && cat_name.toLowerCase() !== fallback && namespaceIds[cat_name] === namespaceNumber) {
                    regexp += "|".concat(createRegexpStr(cat_name));
                }
            }
        }
        return regexp;
    }
    function make(arg, literal) {
        if (!arg) {
            return null;
        }
        return literal ? document.createTextNode(arg) : document.createElement(arg);
    }
    function param(name, _uri) {
        var uri = _uri || document.location.href;
        var re = new RegExp("[&?]".concat(name, "=([^&#]*)"));
        var m = re.exec(uri);
        if (m && m.length > 1) {
            return decodeURIComponent(m[1]);
        }
        return null;
    }
    function title(href) {
        if (!href) {
            return null;
        }
        var script = "".concat(conf.wgScript, "?");
        if (href.indexOf(script) === 0 || href.indexOf("".concat(conf.wgServer).concat(script)) === 0 || conf.wgServer.substring(0, 2) === "//" && href.indexOf("".concat(document.location.protocol).concat(conf.wgServer).concat(script)) === 0) {
            return param("title", href);
        }
        var prefix = conf.wgArticlePath.replace("$1", "");
        if (href.indexOf(prefix)) {
            prefix = "".concat(conf.wgServer).concat(prefix);
        }
        if (href.indexOf(prefix) && prefix.substring(0, 2) === "//") {
            prefix = document.location.protocol + prefix;
        }
        if (href.indexOf(prefix) === 0) {
            return decodeURIComponent(href.substring(prefix.length));
        }
        return null;
    }
    function hasClass(elem, name) {
        return " ".concat(elem.className, " ").indexOf(" ".concat(name, " ")) >= 0;
    }
    function capitalize(str) {
        if (!str || !str.length) {
            return str;
        }
        return str.substr(0, 1).toUpperCase() + str.substr(1);
    }
    function wikiPagePath(pageName) {
        return conf.wgArticlePath.replace("$1", encodeURIComponent(pageName).replace(/%3A/g, ":").replace(/%2F/g, "/"));
    }
    function escapeRE(str) {
        return str.replace(/([\\^$.?*+()[\]])/g, "\\$1");
    }
    function substituteFactory(_options) {
        var options = _options || {};
        var lead = options.indicator || "$";
        var indicator = escapeRE(lead);
        var lbrace = escapeRE(options.lbrace || "{");
        var rbrace = escapeRE(options.rbrace || "}");
        var re = new RegExp("(?:".concat(indicator, "(").concat(indicator, "))|(?:").concat(indicator, "(\\d+))|(?:").concat(indicator, "(?:").concat(lbrace, "([^").concat(lbrace).concat(rbrace, "]+)").concat(rbrace, "))|(?:").concat(indicator, "(?!(?:[").concat(indicator).concat(lbrace, "]|\\d))(\\S+?)\\b)"), "g");
        return function (str, map) {
            if (!map) {
                return str;
            }
            return str.replace(re, function (match, prefix, idx, key, alpha) {
                if (prefix === lead) {
                    return lead;
                }
                var k = alpha || key || idx;
                var replacement = typeof map[k] === "function" ? map[k](match, k) : map[k];
                return typeof replacement === "string" ? replacement : replacement || match;
            });
        };
    }
    function replaceByBlanks(match) {
        return match.replace(/(\s|\S)/g, " ");
    }
    function find_category(wikitext, category, once) {
        var cat_regex = null;
        if (HC.template_categories[category]) {
            cat_regex = new RegExp("\\{\\{".concat(wikiTextBlankOrBidi, "(").concat(HC.template_regexp, "(?=").concat(wikiTextBlankOrBidi, ":))?").concat(wikiTextBlankOrBidi, "(?:").concat(HC.template_categories[category], ")").concat(wikiTextBlankOrBidi, "(\\|.*?)?\\}\\}"), "g");
        }
        else {
            var cat_name = escapeRE(category);
            var initial = cat_name.substr(0, 1);
            cat_regex = new RegExp("\\[\\[".concat(wikiTextBlankOrBidi, "(").concat(HC.category_regexp, ")").concat(wikiTextBlankOrBidi, ":").concat(wikiTextBlankOrBidi).concat(initial === "\\" || !HC.capitalizePageNames ? initial : "[".concat(initial.toUpperCase()).concat(initial.toLowerCase(), "]")).concat(cat_name.substring(1).replace(wikiTextBlankRE, wikiTextBlank)).concat(wikiTextBlankOrBidi, "(\\|.*?)?\\]\\]"), "g");
        }
        if (once) {
            return cat_regex.exec(wikitext);
        }
        var copiedtext = wikitext.replace(/<!--(\s|\S)*?-->/g, replaceByBlanks).replace(/<nowiki>(\s|\S)*?<\/nowiki>/g, replaceByBlanks);
        var result = [];
        var curr_match = null;
        while ((curr_match = cat_regex.exec(copiedtext)) !== null) {
            result.push({
                match: curr_match
            });
        }
        result.re = cat_regex;
        return result;
    }
    function change_category(_wikitext, toRemove, toAdd, _key, is_hidden) {
        var key = _key;
        var wikitext = _wikitext;
        function find_insertionpoint(wikitext) {
            var copiedtext = wikitext.replace(/<!--(\s|\S)*?-->/g, replaceByBlanks).replace(/<nowiki>(\s|\S)*?<\/nowiki>/g, replaceByBlanks);
            var index = -1;
            findCatsRE.lastIndex = 0;
            while (findCatsRE.exec(copiedtext) !== null) {
                index = findCatsRE.lastIndex;
            }
            if (index < 0) {
                var match = null;
                if (!interlanguageRE) {
                    match = /((^|\n\r?)(\[\[\s*(([a-z]{2,3}(-[a-z]+)*)|simple|tokipona)\s*:[^\]]+\]\]\s*))+$/.exec(copiedtext);
                }
                else {
                    match = interlanguageRE.exec(copiedtext);
                }
                if (match) {
                    index = match.index;
                }
                return {
                    idx: index,
                    onCat: false
                };
            }
            return {
                idx: index,
                onCat: index >= 0
            };
        }
        var summary = [], nameSpace = HC.category_canonical, keyChange = toRemove && toAdd && toRemove === toAdd && toAdd.length;
        var cat_point = -1, matches;
        if (key) {
            key = "|".concat(key);
        }
        if (toRemove && toRemove.length) {
            matches = find_category(wikitext, toRemove);
            if (!matches || !matches.length) {
                return {
                    text: wikitext,
                    summary: summary,
                    error: HC.messages.cat_notFound.replace(/\$1/g, toRemove)
                };
            }
            var before = wikitext.substring(0, matches[0].match.index), after = wikitext.substring(matches[0].match.index + matches[0].match[0].length);
            if (matches.length > 1) {
                matches.re.lastIndex = 0;
                after = after.replace(matches.re, "");
            }
            if (toAdd) {
                if (key === null) {
                    key = matches[0].match[2];
                }
            }
            var i = before.length - 1;
            while (i >= 0 && before.charAt(i) !== "\n" && before.substr(i, 1).search(/\s/) >= 0) {
                i--;
            }
            var j = 0;
            while (j < after.length && after.charAt(j) !== "\n" && after.substr(j, 1).search(/\s/) >= 0) {
                j++;
            }
            if (i >= 0 && before.charAt(i) === "\n" && (!after.length || j < after.length && after.charAt(j) === "\n")) {
                i--;
            }
            if (i >= 0) {
                before = before.substring(0, i + 1);
            }
            else {
                before = "";
            }
            if (j < after.length) {
                after = after.substring(j);
            }
            else {
                after = "";
            }
            if (before.length && before.substring(before.length - 1).search(/\S/) >= 0 && after.length && after.substr(0, 1).search(/\S/) >= 0) {
                before += " ";
            }
            cat_point = before.length;
            if (cat_point === 0 && after.length && after.substr(0, 1) === "\n") {
                after = after.substr(1);
            }
            wikitext = before + after;
            if (!keyChange) {
                if (HC.template_categories[toRemove]) {
                    summary.push(HC.messages.template_removed.replace(/\$1/g, toRemove));
                }
                else {
                    summary.push(HC.messages.cat_removed.replace(/\$1/g, toRemove));
                }
            }
        }
        if (toAdd && toAdd.length) {
            matches = find_category(wikitext, toAdd);
            if (matches && matches.length) {
                return {
                    text: wikitext,
                    summary: summary,
                    error: HC.messages.cat_exists.replace(/\$1/g, toAdd)
                };
            }
            var onCat = false;
            if (cat_point < 0) {
                var point = find_insertionpoint(wikitext);
                cat_point = point.idx;
                onCat = point.onCat;
            }
            else {
                onCat = true;
            }
            var newcatstring = "[[".concat(nameSpace, ":").concat(toAdd).concat(key || "", "]]");
            if (cat_point >= 0) {
                var suffix = wikitext.substring(cat_point);
                wikitext = wikitext.substring(0, cat_point) + (cat_point > 0 ? "\n" : "") + newcatstring + (!onCat ? "\n" : "");
                if (suffix.length && suffix.substr(0, 1) !== "\n") {
                    wikitext += "\n".concat(suffix);
                }
                else {
                    wikitext += suffix;
                }
            }
            else {
                if (wikitext.length && wikitext.substr(wikitext.length - 1, 1) !== "\n") {
                    wikitext += "\n";
                }
                wikitext += (wikitext.length ? "\n" : "") + newcatstring;
            }
            if (keyChange) {
                var k = key || "";
                if (k.length) {
                    k = k.substr(1);
                }
                summary.push(substitute(HC.messages.cat_keychange, [null, toAdd, k]));
            }
            else {
                summary.push(HC.messages.cat_added.replace(/\$1/g, toAdd));
            }
            if (HC.uncat_regexp && !is_hidden) {
                var txt = wikitext.replace(HC.uncat_regexp, "");
                if (txt.length !== wikitext.length) {
                    wikitext = txt;
                    summary.push(HC.messages.uncat_removed);
                }
            }
        }
        return {
            text: wikitext,
            summary: summary,
            error: null
        };
    }
    function evtKeys(e) {
        var code = 0;
        if (e.ctrlKey) {
            if (e.ctrlKey || e.metaKey) {
                code |= 1;
            }
            if (e.shiftKey) {
                code |= 2;
            }
        }
        return code;
    }
    function evtKill(e) {
        if (e.preventDefault) {
            e.preventDefault();
            e.stopPropagation();
        }
        else {
            e.cancelBubble = true;
        }
        return false;
    }
    function setPage(json) {
        var startTime = null;
        if (json && json.query) {
            if (json.query.pages) {
                var page = json.query.pages[!conf.wgArticleId ? "-1" : "".concat(conf.wgArticleId)];
                if (page) {
                    if (page.revisions && page.revisions.length) {
                        pageText = page.revisions[0]["*"];
                        if (page.revisions[0].timestamp) {
                            pageTime = page.revisions[0].timestamp.replace(/\D/g, "");
                        }
                        if (page.revisions[0].revid) {
                            pageTextRevId = page.revisions[0].revid;
                        }
                        if (page.revisions.length > 1) {
                            conflictingUser = page.revisions[1].user;
                        }
                    }
                    if (page.lastrevid) {
                        lastRevId = page.lastrevid;
                    }
                    if (page.starttimestamp) {
                        startTime = page.starttimestamp.replace(/\D/g, "");
                    }
                    pageWatched = typeof page.watched === "string";
                    if (json.query.tokens) {
                        editToken = json.query.tokens.csrftoken;
                    }
                    if (page.langlinks && (!json["query-continue"] || !json["query-continue"].langlinks)) {
                        var re = "";
                        for (var i = 0; i < page.langlinks.length; i++) {
                            re += (i > 0 ? "|" : "") + page.langlinks[i].lang.replace(/([\\^$.?*+()])/g, "\\$1");
                        }
                        if (re.length) {
                            interlanguageRE = new RegExp("((^|\\n\\r?)(\\[\\[\\s*(".concat(re, ")\\s*:[^\\]]+\\]\\]\\s*))+$"));
                        }
                    }
                }
            }
            if (json.query.general) {
                if (json.query.general.time && !startTime) {
                    startTime = json.query.general.time.replace(/\D/g, "");
                }
                if (HC.capitalizePageNames === null) {
                    HC.capitalizePageNames = json.query.general["case"] === "first-letter";
                }
            }
            serverTime = startTime;
            if (json.query.userinfo && json.query.userinfo.options) {
                watchCreate = !HC.dont_add_to_watchlist && json.query.userinfo.options.watchcreations === "1";
                watchEdit = !HC.dont_add_to_watchlist && json.query.userinfo.options.watchdefault === "1";
                minorEdits = json.query.userinfo.options.minordefault === 1;
                if (minorEdits) {
                    HC.single_minor = true;
                }
            }
        }
    }
    function initiateEdit(doEdit, failure) {
        return __awaiter(this, void 0, void 0, function () {
            function fail() {
                var args = [];
                for (var _i = 0; _i < arguments.length; _i++) {
                    args[_i] = arguments[_i];
                }
                saveInProgress = false;
                if (commitButton) {
                    commitButton.disabled = oldButtonState;
                }
                failure.apply(void 0, __spreadArray([], __read(args), false));
            }
            var oldButtonState, json, req_1;
            return __generator(this, function (_a) {
                switch (_a.label) {
                    case 0:
                        if (saveInProgress) {
                            return [2];
                        }
                        saveInProgress = true;
                        if (commitButton) {
                            oldButtonState = commitButton.disabled;
                            commitButton.disabled = true;
                        }
                        _a.label = 1;
                    case 1:
                        _a.trys.push([1, 3, , 4]);
                        return [4, $.getJSON("".concat(conf.wgServer).concat(conf.wgScriptPath, "/api.php?format=json&action=query&rawcontinue=&titles=").concat(encodeURIComponent(conf.wgPageName), "&prop=info%7Crevisions%7Clanglinks&inprop=watched&rvprop=content%7Ctimestamp%7Cids%7Cuser&lllimit=500&rvlimit=2&rvdir=newer&rvstartid=").concat(conf.wgCurRevisionId, "&meta=siteinfo%7Cuserinfo%7Ctokens&type=csrf&uiprop=options"))];
                    case 2:
                        json = _a.sent();
                        setPage(json);
                        doEdit(fail);
                        return [3, 4];
                    case 3:
                        req_1 = _a.sent();
                        fail("".concat(req_1.status, " ").concat(req_1.statusText));
                        return [3, 4];
                    case 4: return [2];
                }
            });
        });
    }
    function multiChangeMsg(count) {
        var msg = HC.messages.multi_change;
        if (typeof msg !== "string" && msg.length) {
            if (mw.language && mw.language.convertPlural) {
                msg = mw.language.convertPlural(count, msg);
            }
            else {
                msg = msg[msg.length - 1];
            }
        }
        return substitute(msg, [null, "".concat(count)]);
    }
    function currentTimestamp() {
        var now = new Date();
        var ts = "".concat(now.getUTCFullYear());
        function two(s) {
            return s.substr(s.length - 2);
        }
        ts += two("0".concat(now.getUTCMonth() + 1)) + two("0".concat(now.getUTCDate())) + two("00".concat(now.getUTCHours())) + two("00".concat(now.getUTCMinutes())) + two("00".concat(now.getUTCSeconds()));
        return ts;
    }
    function performChanges(failure, singleEditor) {
        if (pageText === null) {
            failure(HC.messages.multi_error);
            return;
        }
        if (HC.messages.cat_keychange.indexOf("$2") < 0) {
            HC.messages.cat_keychange += '"$2"';
        }
        if (!HC.messages.short_catchange) {
            HC.messages.short_catchange = "[[".concat(HC.category_canonical, ":$1]]");
        }
        var action;
        var selfEditConflict = (lastRevId !== null && lastRevId !== conf.wgCurRevisionId || pageTextRevId !== null && pageTextRevId !== conf.wgCurRevisionId) && conflictingUser && conflictingUser === conf.wgUserName;
        if (singleEditor && !singleEditor.noCommit && !HC.no_autocommit && editToken && !selfEditConflict) {
            commitForm.wpEditToken.value = editToken;
            action = commitForm.wpDiff;
            if (action) {
                action.name = action.value = "wpSave";
                commitForm.wpChangeTags.value += ",".concat(HC.automationChangeTag);
            }
        }
        else {
            action = commitForm.wpSave;
            if (action) {
                action.name = action.value = "wpDiff";
            }
        }
        var result = {
            text: pageText
        };
        var changed = [], added = [], deleted = [], toEdit = singleEditor ? [singleEditor] : editors;
        var changes = 0, error = null, edit, i;
        for (i = 0; i < toEdit.length; i++) {
            edit = toEdit[i];
            if (edit.state === CategoryEditor.CHANGED) {
                result = change_category(result.text, edit.originalCategory, edit.currentCategory, edit.currentKey, edit.currentHidden);
                if (!result.error) {
                    changes++;
                    if (!edit.originalCategory || !edit.originalCategory.length) {
                        added.push(edit.currentCategory);
                    }
                    else {
                        changed.push({
                            from: edit.originalCategory,
                            to: edit.currentCategory
                        });
                    }
                }
                else if (error === null) {
                    error = result.error;
                }
            }
            else if (edit.state === CategoryEditor.DELETED && edit.originalCategory && edit.originalCategory.length) {
                result = change_category(result.text, edit.originalCategory, null, null, false);
                if (!result.error) {
                    changes++;
                    deleted.push(edit.originalCategory);
                }
                else if (error === null) {
                    error = result.error;
                }
            }
        }
        if (error !== null) {
            action = commitForm.wpSave;
            if (action) {
                action.name = action.value = "wpDiff";
            }
        }
        commitForm.wpMinoredit.checked = minorEdits;
        commitForm.wpWatchthis.checked = !conf.wgArticleId && watchCreate || watchEdit || pageWatched;
        if (conf.wgArticleId || !!singleEditor) {
            if (action && action.value === "wpSave") {
                if (HC.changeTag) {
                    commitForm.wpChangeTags.value = "".concat(HC.changeTag, ",").concat(HC.automationChangeTag);
                    HC.messages.using = "";
                    HC.messages.prefix = "";
                }
            }
            else {
                commitForm.wpAutoSummary.value = HC.changeTag;
            }
            if (changes === 1) {
                if (result.summary && result.summary.length) {
                    commitForm.wpSummary.value = HC.messages.prefix + result.summary.join(HC.messages.separator) + HC.messages.using;
                }
                commitForm.wpMinoredit.checked = HC.single_minor || minorEdits;
            }
            else if (changes) {
                var summary = [];
                var shortSummary = [];
                for (i = 0; i < deleted.length; i++) {
                    summary.push("-".concat(substitute(HC.messages.short_catchange, [null, deleted[i]])));
                }
                if (deleted.length === 1) {
                    shortSummary.push("-".concat(substitute(HC.messages.short_catchange, [null, deleted[0]])));
                }
                else if (deleted.length) {
                    shortSummary.push("- ".concat(multiChangeMsg(deleted.length)));
                }
                for (i = 0; i < added.length; i++) {
                    summary.push("+".concat(substitute(HC.messages.short_catchange, [null, added[i]])));
                }
                if (added.length === 1) {
                    shortSummary.push("+".concat(substitute(HC.messages.short_catchange, [null, added[0]])));
                }
                else if (added.length) {
                    shortSummary.push("+ ".concat(multiChangeMsg(added.length)));
                }
                var arrow = is_rtl ? "←" : "→";
                for (i = 0; i < changed.length; i++) {
                    if (changed[i].from !== changed[i].to) {
                        summary.push("\u00B1".concat(substitute(HC.messages.short_catchange, [null, changed[i].from])).concat(arrow).concat(substitute(HC.messages.short_catchange, [null, changed[i].to])));
                    }
                    else {
                        summary.push("\u00B1".concat(substitute(HC.messages.short_catchange, [null, changed[i].from])));
                    }
                }
                if (changed.length === 1) {
                    if (changed[0].from !== changed[0].to) {
                        shortSummary.push("\u00B1".concat(substitute(HC.messages.short_catchange, [null, changed[0].from])).concat(arrow).concat(substitute(HC.messages.short_catchange, [null, changed[0].to])));
                    }
                    else {
                        shortSummary.push("\u00B1".concat(substitute(HC.messages.short_catchange, [null, changed[0].from])));
                    }
                }
                else if (changed.length) {
                    shortSummary.push("\u00B1 ".concat(multiChangeMsg(changed.length)));
                }
                if (summary.length) {
                    summary = summary.join(HC.messages.separator);
                    if (summary.length > 200 - HC.messages.prefix.length - HC.messages.using.length) {
                        summary = shortSummary.join(HC.messages.separator);
                    }
                    commitForm.wpSummary.value = HC.messages.prefix + summary + HC.messages.using;
                }
            }
        }
        commitForm.wpTextbox1.value = result.text;
        commitForm.wpStarttime.value = serverTime || currentTimestamp();
        commitForm.wpEdittime.value = pageTime || commitForm.wpStarttime.value;
        if (selfEditConflict) {
            commitForm.oldid.value = "".concat(pageTextRevId || conf.wgCurRevisionId);
        }
        commitForm.hcCommit.click();
    }
    function resolveOne(page, toResolve) {
        var cats = page.categories, lks = page.links, is_hidden = page.categoryinfo && typeof page.categoryinfo.hidden === "string", is_missing = typeof page.missing === "string";
        var is_dab = false, is_redir = typeof page.redirect === "string", i;
        for (i = 0; i < toResolve.length; i++) {
            if (i && toResolve[i].dabInputCleaned !== page.title.substring(page.title.indexOf(":") + 1)) {
                continue;
            }
            toResolve[i].currentHidden = is_hidden;
            toResolve[i].inputExists = !is_missing;
            toResolve[i].icon.src = is_missing ? HC.existsNo : HC.existsYes;
        }
        if (is_missing) {
            return;
        }
        if (!is_redir && cats && (HC.disambig_category || HC.redir_category)) {
            for (var c = 0; c < cats.length; c++) {
                var cat = cats[c].title;
                if (cat) {
                    cat = cat.substring(cat.indexOf(":") + 1).replace(/_/g, " ");
                    if (cat === HC.disambig_category) {
                        is_dab = true;
                        break;
                    }
                    else if (cat === HC.redir_category) {
                        is_redir = true;
                        break;
                    }
                }
            }
        }
        if (!is_redir && !is_dab) {
            return;
        }
        if (!lks || !lks.length) {
            return;
        }
        var titles = [];
        for (i = 0; i < lks.length; i++) {
            if (lks[i].ns === 14 && lks[i].title && lks[i].title.length) {
                var match = lks[i].title;
                match = match.substring(match.indexOf(":") + 1);
                if (!HC.blacklist || !HC.blacklist.test(match)) {
                    titles.push(match);
                }
            }
        }
        if (!titles.length) {
            return;
        }
        for (i = 0; i < toResolve.length; i++) {
            if (i && toResolve[i].dabInputCleaned !== page.title.substring(page.title.indexOf(":") + 1)) {
                continue;
            }
            toResolve[i].inputExists = true;
            toResolve[i].icon.src = HC.existsYes;
            if (titles.length > 1) {
                toResolve[i].dab = titles;
            }
            else {
                toResolve[i].text.value = titles[0] + (toResolve[i].currentKey !== null ? "|".concat(toResolve[i].currentKey) : "");
            }
        }
    }
    function resolveRedirects(toResolve, params) {
        if (!params || !params.query || !params.query.pages) {
            return;
        }
        for (var p in params.query.pages) {
            resolveOne(params.query.pages[p], toResolve);
        }
    }
    function resolveMulti(toResolve, callback) {
        return __awaiter(this, void 0, void 0, function () {
            var i, args, v, json, req_2;
            return __generator(this, function (_a) {
                switch (_a.label) {
                    case 0:
                        for (i = 0; i < toResolve.length; i++) {
                            toResolve[i].dab = null;
                            toResolve[i].dabInput = toResolve[i].lastInput;
                        }
                        if (noSuggestions) {
                            callback(toResolve);
                            return [2];
                        }
                        args = "action=query&prop=info%7Clinks%7Ccategories%7Ccategoryinfo&plnamespace=14&pllimit=".concat(toResolve.length * 10, "&cllimit=").concat(toResolve.length * 10, "&format=json&titles=");
                        for (i = 0; i < toResolve.length; i++) {
                            v = toResolve[i].dabInput;
                            v = replaceShortcuts(v, HC.shortcuts);
                            toResolve[i].dabInputCleaned = v;
                            args += encodeURIComponent("Category:".concat(v));
                            if (i + 1 < toResolve.length) {
                                args += "%7C";
                            }
                        }
                        _a.label = 1;
                    case 1:
                        _a.trys.push([1, 3, , 4]);
                        return [4, $.getJSON("".concat(conf.wgServer).concat(conf.wgScriptPath, "/api.php?").concat(args))];
                    case 2:
                        json = _a.sent();
                        resolveRedirects(toResolve, json);
                        callback(toResolve);
                        return [3, 4];
                    case 3:
                        req_2 = _a.sent();
                        if (!req_2) {
                            noSuggestions = true;
                        }
                        callback(toResolve);
                        return [3, 4];
                    case 4: return [2];
                }
            });
        });
    }
    function makeActive(which) {
        if (which.is_active) {
            return;
        }
        for (var i = 0; i < editors.length; i++) {
            if (editors[i] !== which) {
                editors[i].inactivate();
            }
        }
        which.is_active = true;
        if (which.dab) {
            showDab(which);
        }
        else {
            var expectedInput = which.lastRealInput || which.lastInput || "";
            var actualValue = which.text.value || "";
            if (!expectedInput.length && actualValue.length || expectedInput.length && actualValue.indexOf(expectedInput)) {
                which.showsList = false;
                var v = actualValue.split("|");
                which.lastRealInput = which.lastInput = v[0];
                if (v.length > 1) {
                    which.currentKey = v[1];
                }
                if (which.lastSelection) {
                    which.lastSelection = {
                        start: v[0].length,
                        end: v[0].length
                    };
                }
            }
            if (which.showsList) {
                which.displayList();
            }
            if (which.lastSelection) {
                if (is_webkit) {
                    window.setTimeout(function () {
                        which.setSelection(which.lastSelection.start, which.lastSelection.end);
                    }, 1);
                }
                else {
                    which.setSelection(which.lastSelection.start, which.lastSelection.end);
                }
            }
        }
    }
    function showDab(which) {
        if (!which.is_active) {
            makeActive(which);
        }
        else {
            which.showSuggestions(which.dab, false, null, null);
            which.dab = null;
        }
    }
    function multiSubmit() {
        var toResolve = [];
        for (var i = 0; i < editors.length; i++) {
            if (editors[i].state === CategoryEditor.CHANGE_PENDING || editors[i].state === CategoryEditor.OPEN) {
                toResolve.push(editors[i]);
            }
        }
        if (!toResolve.length) {
            initiateEdit(function (failure) {
                performChanges(failure);
            }, function (msg) {
                oouiDialog.alert(oouiDialog.sanitize(msg), {
                    title: "HotCat 小工具"
                });
            });
            return;
        }
        resolveMulti(toResolve, function (resolved) {
            var firstDab = null;
            var dontChange = false;
            for (var i = 0; i < resolved.length; i++) {
                if (resolved[i].lastInput !== resolved[i].dabInput) {
                    dontChange = true;
                }
                else {
                    if (resolved[i].dab) {
                        if (!firstDab) {
                            firstDab = resolved[i];
                        }
                    }
                    else {
                        if (resolved[i].acceptCheck(true)) {
                            resolved[i].commit();
                        }
                    }
                }
            }
            if (firstDab) {
                showDab(firstDab);
            }
            else if (!dontChange) {
                initiateEdit(function (failure) {
                    performChanges(failure);
                }, function (msg) {
                    oouiDialog.alert(oouiDialog.sanitize(msg), {
                        title: "HotCat 小工具"
                    });
                });
            }
        });
    }
    function setMultiInput() {
        if (commitButton || onUpload) {
            return;
        }
        commitButton = make("input");
        commitButton.type = "button";
        commitButton.value = HC.messages.commit;
        commitButton.onclick = multiSubmit;
        if (multiSpan) {
            multiSpan.parentNode.replaceChild(commitButton, multiSpan);
        }
        else {
            catLine.appendChild(commitButton);
        }
    }
    function checkMultiInput() {
        if (!commitButton) {
            return;
        }
        var hasChanges = false;
        for (var i = 0; i < editors.length; i++) {
            if (editors[i].state !== CategoryEditor.UNCHANGED) {
                hasChanges = true;
                break;
            }
        }
        commitButton.disabled = !hasChanges;
    }
    function forceRedraw() {
        if (dummyElement.parentNode) {
            document.body.removeChild(dummyElement);
        }
        else {
            document.body.appendChild(dummyElement);
        }
    }
    function initialize() {
        var config = window.JSconfig !== undefined && window.JSconfig.keys ? window.JSconfig.keys : {};
        HC.dont_add_to_watchlist = window.hotcat_dont_add_to_watchlist !== undefined ? !!window.hotcat_dont_add_to_watchlist : config.HotCatDontAddToWatchlist !== undefined ? config.HotCatDontAddToWatchlist : HC.dont_add_to_watchlist;
        HC.no_autocommit = window.hotcat_no_autocommit !== undefined ? !!window.hotcat_no_autocommit : config.HotCatNoAutoCommit !== undefined ? config.HotCatNoAutoCommit : conf.wgNamespaceNumber % 2 ? true : HC.no_autocommit;
        HC.del_needs_diff = window.hotcat_del_needs_diff !== undefined ? !!window.hotcat_del_needs_diff : config.HotCatDelNeedsDiff !== undefined ? config.HotCatDelNeedsDiff : HC.del_needs_diff;
        HC.suggest_delay = window.hotcat_suggestion_delay || config.HotCatSuggestionDelay || HC.suggest_delay;
        HC.editbox_width = window.hotcat_editbox_width || config.HotCatEditBoxWidth || HC.editbox_width;
        HC.suggestions = window.hotcat_suggestions || config.HotCatSuggestions || HC.suggestions;
        if (typeof HC.suggestions !== "string" || !suggestionConfigs[HC.suggestions]) {
            HC.suggestions = "combined";
        }
        HC.fixed_search = window.hotcat_suggestions_fixed !== undefined ? !!window.hotcat_suggestions_fixed : config.HotCatFixedSuggestions !== undefined ? config.HotCatFixedSuggestions : HC.fixed_search;
        HC.single_minor = window.hotcat_single_changes_are_minor !== undefined ? !!window.hotcat_single_changes_are_minor : config.HotCatMinorSingleChanges !== undefined ? config.HotCatMinorSingleChanges : HC.single_minor;
        HC.bg_changed = window.hotcat_changed_background || config.HotCatChangedBackground || HC.bg_changed;
        HC.use_up_down = window.hotcat_use_category_links !== undefined ? !!window.hotcat_use_category_links : config.HotCatUseCategoryLinks !== undefined ? config.HotCatUseCategoryLinks : HC.use_up_down;
        HC.listSize = window.hotcat_list_size || config.HotCatListSize || HC.listSize;
        if (conf.wgDBname !== "commonswiki") {
            HC.changeTag = config.HotCatChangeTag || "";
        }
        if (HC.changeTag) {
            var eForm_1 = document.editform, catRegExp_1 = new RegExp("^\\[\\[(".concat(HC.category_regexp, "):"));
            var oldTxt_1;
            var isMinorChange_1 = function () {
                var newTxt = eForm_1.wpTextbox1;
                if (!newTxt) {
                    return;
                }
                newTxt = newTxt.value;
                var oldLines = oldTxt_1.match(/^.*$/gm), newLines = newTxt.match(/^.*$/gm);
                var cArr;
                var except = function (aArr, bArr) {
                    var result = [];
                    var lArr, sArr;
                    if (aArr.length < bArr.length) {
                        lArr = bArr;
                        sArr = aArr;
                    }
                    else {
                        lArr = aArr;
                        sArr = bArr;
                    }
                    for (var i = 0; i < lArr.length; i++) {
                        var item = lArr[i];
                        var ind = $.inArray(item, sArr);
                        if (ind === -1) {
                            result.push(item);
                        }
                        else {
                            sArr.splice(ind, 1);
                        }
                    }
                    return result.concat(sArr);
                };
                cArr = except(oldLines, newLines);
                if (cArr.length) {
                    cArr = $.grep(cArr, function (_c) {
                        var c = $.trim(_c);
                        return c && !catRegExp_1.test(c);
                    });
                }
                if (!cArr.length) {
                    oldTxt_1 = newTxt;
                    return true;
                }
            };
            if (conf.wgAction === "submit" && conf.wgArticleId && eForm_1 && eForm_1.wpSummary && document.getElementById("wikiDiff")) {
                var sum_1 = eForm_1.wpSummary, sumA = eForm_1.wpAutoSummary;
                if (sum_1.value && sumA.value === HC.changeTag) {
                    sumA.value = sumA.value.replace(HC.changeTag, "d41d8cd98f00b204e9800998ecf8427e");
                    var $ct_1 = $('<input type="hidden" name="wpChangeTags">').val(HC.changeTag);
                    $(eForm_1).append($ct_1);
                    oldTxt_1 = eForm_1.wpTextbox1.value;
                    $("#wpSave").one("click", function () {
                        if ($ct_1.val()) {
                            sum_1.value = sum_1.value.replace(HC.messages.using || HC.messages.prefix, "");
                        }
                    });
                    var removeChangeTag_1 = function () {
                        $(eForm_1.wpTextbox1).add(sum_1).one("input", function () {
                            window.setTimeout(function () {
                                if (!isMinorChange_1()) {
                                    $ct_1.val("");
                                }
                                else {
                                    removeChangeTag_1();
                                }
                            }, 500);
                        });
                    };
                    removeChangeTag_1();
                }
            }
        }
        HC.listSize = parseInt(HC.listSize, 10);
        if (isNaN(HC.listSize) || HC.listSize < 5) {
            HC.listSize = 5;
        }
        HC.listSize = Math.min(HC.listSize, 30);
        if (HC.engine_names) {
            for (var key in HC.engine_names) {
                if (suggestionConfigs[key] && HC.engine_names[key]) {
                    suggestionConfigs[key].name = HC.engine_names[key];
                }
            }
        }
        is_rtl = hasClass(document.body, "rtl");
        if (!is_rtl) {
            if (document.defaultView && document.defaultView.getComputedStyle) {
                is_rtl = document.defaultView.getComputedStyle(document.body, null).getPropertyValue("direction");
            }
            else if (document.body.currentStyle) {
                is_rtl = document.body.currentStyle.direction;
            }
            else {
                is_rtl = document.body.style.direction;
            }
            is_rtl = is_rtl === "rtl";
        }
    }
    function can_edit() {
        var container = null;
        switch (mw.config.get("skin")) {
            case "cologneblue": {
                container = document.getElementById("quickbar");
            }
            case "standard":
            case "nostalgia": {
                if (!container) {
                    container = document.getElementById("topbar");
                }
                var lks = container.getElementsByTagName("a");
                for (var i = 0; i < lks.length; i++) {
                    if (param("title", lks[i].href) === conf.wgPageName && param("action", lks[i].href) === "edit") {
                        return true;
                    }
                }
                return false;
            }
            default:
                return document.getElementById("ca-edit") !== null;
        }
    }
    function closeForm() {
        for (var i = 0; i < editors.length; i++) {
            var edit = editors[i];
            if (edit.state === CategoryEditor.OPEN) {
                edit.cancel();
            }
            else if (edit.state === CategoryEditor.CHANGE_PENDING) {
                edit.sanitizeInput();
                var value = edit.text.value.split("|");
                var key = null;
                if (value.length > 1) {
                    key = value[1];
                }
                var v = value[0].replace(/_/g, " ").replace(/^\s+|\s+$/g, "");
                if (!v.length) {
                    edit.cancel();
                }
                else {
                    edit.currentCategory = v;
                    edit.currentKey = key;
                    edit.currentExists = this.inputExists;
                    edit.close();
                }
            }
        }
    }
    function setup_upload() {
        onUpload = true;
        var ip = document.getElementById("mw-htmlform-description") || document.getElementById("wpDestFile");
        if (!ip) {
            ip = document.getElementById("wpDestFile");
            while (ip && ip.nodeName.toLowerCase() !== "table") {
                ip = ip.parentNode;
            }
        }
        if (!ip) {
            return;
        }
        var reupload = document.getElementById("wpForReUpload");
        var destFile = document.getElementById("wpDestFile");
        if (reupload && !!reupload.value || destFile && (destFile.disabled || destFile.readOnly)) {
            return;
        }
        var labelCell = make("td");
        var lineCell = make("td");
        catLine = make("div");
        catLine.className = "catlinks";
        catLine.id = "catlinks";
        catLine.style.textAlign = is_rtl ? "right" : "left";
        catLine.style.margin = "0";
        catLine.style.border = "none";
        lineCell.appendChild(catLine);
        var label = null;
        if (window.UFUI && window.UIElements && window.UFUI.getLabel instanceof Function) {
            try {
                label = window.UFUI.getLabel("wpCategoriesUploadLbl");
            }
            catch (ex) {
                label = null;
            }
        }
        if (!label) {
            labelCell.id = "hotcatLabel";
            labelCell.appendChild(make(HC.categories, true));
        }
        else {
            labelCell.id = "hotcatLabelTranslated";
            labelCell.appendChild(label);
        }
        labelCell.className = "mw-label";
        labelCell.style.textAlign = "right";
        labelCell.style.verticalAlign = "middle";
        var form = document.getElementById("upload") || document.getElementById("mw-upload-form");
        if (form) {
            var newRow = ip.insertRow(-1);
            newRow.appendChild(labelCell);
            newRow.appendChild(lineCell);
            form.onsubmit = function (oldSubmit) {
                return function () {
                    var args = [];
                    for (var _i = 0; _i < arguments.length; _i++) {
                        args[_i] = arguments[_i];
                    }
                    var do_submit = true;
                    if (oldSubmit) {
                        if (typeof oldSubmit === "string") {
                            do_submit = eval(oldSubmit);
                        }
                        else if (oldSubmit instanceof Function) {
                            do_submit = oldSubmit.bind(form).apply(void 0, __spreadArray([], __read(args), false));
                        }
                    }
                    if (!do_submit) {
                        return false;
                    }
                    closeForm();
                    var eb = document.getElementById("wpUploadDescription") || document.getElementById("wpDesc");
                    var addedOne = false;
                    for (var i = 0; i < editors.length; i++) {
                        var t = editors[i].currentCategory;
                        if (!t) {
                            continue;
                        }
                        var key = editors[i].currentKey;
                        var new_cat = "[[".concat(HC.category_canonical, ":").concat(t).concat(key ? "|".concat(key) : "", "]]");
                        var cleanedText_1 = eb.value.replace(/<!--(\s|\S)*?-->/g, "").replace(/<nowiki>(\s|\S)*?<\/nowiki>/g, "");
                        if (!find_category(cleanedText_1, t, true)) {
                            eb.value += "\n".concat(new_cat);
                            addedOne = true;
                        }
                    }
                    if (addedOne) {
                        eb.value = eb.value.replace(/\{\{subst:unc\}\}/g, "");
                    }
                    return true;
                };
            }(form.onsubmit);
        }
    }
    function getTitle(span) {
        if (span.firstChild.nodeType !== Node.ELEMENT_NODE) {
            return null;
        }
        var catTitle = title(span.firstChild.getAttribute("href"));
        if (!catTitle) {
            return null;
        }
        catTitle = catTitle.substr(catTitle.indexOf(":") + 1).replace(/_/g, " ");
        if (HC.blacklist && HC.blacklist.test(catTitle)) {
            return null;
        }
        return catTitle;
    }
    function isOnPage(span) {
        var catTitle = getTitle(span);
        var result = {
            title: catTitle,
            match: ["", "", ""]
        };
        if (pageText === null) {
            return result;
        }
        if (cleanedText === null) {
            cleanedText = pageText.replace(/<!--(\s|\S)*?-->/g, "").replace(/<nowiki>(\s|\S)*?<\/nowiki>/g, "");
        }
        result.match = find_category(cleanedText, catTitle, true);
        return result;
    }
    function findByClass(scope, tag, className) {
        var result = $(scope).find("".concat(tag, ".").concat(className));
        return result && result.length ? result[0] : null;
    }
    function list_categorys() {
        if (pageText === null) {
            return [];
        }
        if (cleanedText === null) {
            cleanedText = pageText.replace(/<!--(\s|\S)*?-->/g, "").replace(/<nowiki>(\s|\S)*?<\/nowiki>/g, "");
        }
        var cat_regex = new RegExp("\\[\\[".concat(wikiTextBlankOrBidi, "(").concat(HC.category_regexp, ")").concat(wikiTextBlankOrBidi, ":").concat(wikiTextBlankOrBidi, "([^\\[\\]]+?)").concat(wikiTextBlankOrBidi, "(\\|.*?)?\\]\\]"), "g");
        var result = [];
        var curr_match = null;
        while ((curr_match = cat_regex.exec(cleanedText)) !== null) {
            result.push({
                match: curr_match
            });
        }
        result.re = cat_regex;
        return result;
    }
    function setup(additionalWork) {
        if (initialized) {
            return;
        }
        initialized = true;
        if (setupTimeout) {
            window.clearTimeout(setupTimeout);
            setupTimeout = null;
        }
        catLine = catLine || document.getElementById("mw-normal-catlinks");
        var hiddenCats = document.getElementById("mw-hidden-catlinks");
        if (!catLine) {
            var footer = null;
            if (!hiddenCats) {
                footer = findByClass(document, "div", "printfooter");
                if (!footer) {
                    return;
                }
            }
            catLine = make("div");
            catLine.id = "mw-normal-catlinks";
            catLine.style.textAlign = is_rtl ? "right" : "left";
            var label = make("a");
            label.href = conf.wgArticlePath.replace("$1", "Special:Categories");
            label.title = HC.categories;
            label.appendChild(make(HC.categories, true));
            catLine.appendChild(label);
            catLine.appendChild(make(":", true));
            var container = hiddenCats ? hiddenCats.parentNode : document.getElementById("catlinks");
            if (!container) {
                container = make("div");
                container.id = "catlinks";
                footer.parentNode.insertBefore(container, footer.nextSibling);
            }
            container.className = "catlinks noprint";
            container.style.display = "";
            if (!hiddenCats) {
                container.appendChild(catLine);
            }
            else {
                container.insertBefore(catLine, hiddenCats);
            }
        }
        if (is_rtl) {
            catLine.dir = "rtl";
        }
        var chkCats = [], inpIndex = {};
        function createEditors(_line, is_hidden, has_hidden) {
            var line = _line;
            var i;
            var cats = line.getElementsByTagName("li");
            if (cats.length) {
                newDOM = true;
                line = cats[0].parentNode;
            }
            else {
                cats = line.getElementsByTagName("span");
            }
            var copyCats = Array.from({
                length: cats.length
            });
            var idxCopys = {};
            var sTitle = null;
            for (i = 0; i < cats.length; i++) {
                copyCats[i] = cats[i];
                sTitle = getTitle(copyCats[i]);
                if (sTitle) {
                    idxCopys[sTitle] = i;
                }
            }
            var inpageCats = list_categorys();
            for (i = 0; i < inpageCats.length; i++) {
                var normalized = inpageCats[i].match[2].replace(wikiTextBlankRE, " ");
                if (HC.capitalizePageNames) {
                    normalized = normalized.substr(0, 1).toUpperCase() + normalized.substr(1);
                }
                if (normalized in idxCopys && line) {
                    new CategoryEditor(line, copyCats[idxCopys[normalized]], inpageCats[i].match[2], inpageCats[i].match[3], is_hidden);
                    if (is_hidden && normalized in inpIndex) {
                        chkCats.splice(chkCats.indexOf("".concat(HC.category_canonical, ":").concat(normalized)), 1);
                        delete inpIndex[normalized];
                    }
                }
                else if (!is_hidden && line) {
                    chkCats.push("".concat(HC.category_canonical, ":").concat(normalized));
                    inpIndex[normalized] = i;
                }
            }
            if (chkCats.length && (!is_hidden && !has_hidden || is_hidden)) {
                var arg_titles_1 = chkCats.join("|");
                $.getJSON("".concat(conf.wgServer).concat(conf.wgScriptPath, "/api.php?action=query&format=json&titles=").concat(encodeURIComponent(arg_titles_1), "&redirects=1&converttitles=1"), function (json) {
                    var converted = json.query.converted;
                    if (!converted || converted.length < chkCats.length) {
                        console.log(arg_titles_1);
                    }
                    if (!converted) {
                        converted = [];
                    }
                    for (i = 0; i < converted.length; i++) {
                        var sTitle_1 = converted[i].to.replace("".concat(HC.category_canonical, ":"), "");
                        var sOrginal = inpIndex[converted[i].from.replace("".concat(HC.category_canonical, ":"), "")];
                        if (sTitle_1 in idxCopys && line) {
                            new CategoryEditor(line, copyCats[idxCopys[sTitle_1]], [inpageCats[sOrginal].match[2], sTitle_1], inpageCats[sOrginal].match[3], is_hidden);
                        }
                        else {
                            console.log(sTitle_1);
                        }
                    }
                });
            }
            return copyCats.length ? copyCats[copyCats.length - 1] : null;
        }
        var lastSpan = createEditors(catLine, false, !!hiddenCats);
        new CategoryEditor(newDOM ? catLine.getElementsByTagName("ul")[0] : catLine, null, null, lastSpan !== null, false);
        if (!onUpload) {
            if (pageText !== null && hiddenCats) {
                if (is_rtl) {
                    hiddenCats.dir = "rtl";
                }
                createEditors(hiddenCats, true, true);
            }
            var enableMulti = make("span");
            enableMulti.className = "noprint";
            if (is_rtl) {
                enableMulti.dir = "rtl";
            }
            catLine.insertBefore(enableMulti, catLine.firstChild.nextSibling);
            enableMulti.appendChild(make(" ", true));
            multiSpan = make("span");
            enableMulti.appendChild(multiSpan);
            multiSpan.innerHTML = "(<a>".concat(HC.addmulti, "</a>)");
            var lk = multiSpan.getElementsByTagName("a")[0];
            lk.onclick = function (evt) {
                setMultiInput();
                checkMultiInput();
                return evtKill(evt);
            };
            lk.title = HC.multi_tooltip;
            lk.style.cursor = "pointer";
        }
        cleanedText = null;
        if (additionalWork instanceof Function) {
            additionalWork();
        }
        mw.hook("hotcat.ready").fire();
        $("body").trigger("hotcatSetupCompleted");
    }
    function createCommitForm() {
        if (commitForm) {
            return;
        }
        var formContainer = make("div");
        formContainer.style.display = "none";
        document.body.appendChild(formContainer);
        formContainer.innerHTML = "<form id=\"hotcatCommitForm\" method=\"post\" enctype=\"multipart/form-data\" action=\"".concat(conf.wgScript, "?title=").concat(encodeURIComponent(conf.wgPageName), "&action=submit\"><input type=\"hidden\" name=\"wpTextbox1\"><input type=\"hidden\" name=\"model\" value=\"").concat(conf.wgPageContentModel, "\"><input type=\"hidden\" name=\"format\" value=\"text/x-wiki\"><input type=\"hidden\" name=\"wpSummary\" value=\"\"><input type=\"checkbox\" name=\"wpMinoredit\" value=\"1\"><input type=\"checkbox\" name=\"wpWatchthis\" value=\"1\"><input type=\"hidden\" name=\"wpAutoSummary\" value=\"d41d8cd98f00b204e9800998ecf8427e\"><input type=\"hidden\" name=\"wpEdittime\"><input type=\"hidden\" name=\"wpStarttime\"><input type=\"hidden\" name=\"wpDiff\" value=\"wpDiff\"><input type=\"hidden\" name=\"oldid\" value=\"0\"><input type=\"submit\" name=\"hcCommit\" value=\"hcCommit\"><input type=\"hidden\" name=\"wpEditToken\"><input type=\"hidden\" name=\"wpUltimateParam\" value=\"1\"><input type=\"hidden\" name=\"wpChangeTags\"><input type=\"hidden\" value=\"\u2133\uD835\uDCB2\u2665\uD835\uDCCA\uD835\uDCC3\uD835\uDCBE\uD835\uDCB8\u2134\uD835\uDCB9\u212F\" name=\"wpUnicodeCheck\"></form>");
        commitForm = document.getElementById("hotcatCommitForm");
    }
    function getPage() {
        if (!conf.wgArticleId) {
            if (conf.wgNamespaceNumber === 2) {
                return;
            }
            pageText = "";
            pageTime = null;
            setup(createCommitForm);
        }
        else {
            var url = "".concat(conf.wgServer).concat(conf.wgScriptPath, "/api.php?format=json&callback=HotCat.start&action=query&rawcontinue=&titles=").concat(encodeURIComponent(conf.wgPageName), "&prop=info%7Crevisions&rvprop=content%7Ctimestamp%7Cids&meta=siteinfo&rvlimit=1&rvstartid=").concat(conf.wgCurRevisionId);
            var s = make("script");
            s.src = url;
            HC.start = function (json) {
                setPage(json);
                setup(createCommitForm);
            };
            document.getElementsByTagName("head")[0].appendChild(s);
            setupTimeout = window.setTimeout(function () {
                setup(createCommitForm);
            }, 4e3);
        }
    }
    function setState(state) {
        var cats = state.split("\n");
        if (!cats.length) {
            return null;
        }
        if (initialized && editors.length === 1 && editors[0].isAddCategory) {
            var newSpans = [];
            var before = editors.length === 1 ? editors[0].span : null;
            var i = void 0;
            for (i = 0; i < cats.length; i++) {
                if (!cats[i].length) {
                    continue;
                }
                var cat = cats[i].split("|");
                var key = cat.length > 1 ? cat[1] : null;
                cat = cat[0];
                var lk = make("a");
                lk.href = wikiPagePath("".concat(HC.category_canonical, ":").concat(cat));
                lk.appendChild(make(cat, true));
                lk.title = cat;
                var span = make("span");
                span.appendChild(lk);
                if (!i) {
                    catLine.insertBefore(make(" ", true), before);
                }
                catLine.insertBefore(span, before);
                if (before && i + 1 < cats.length) {
                    parent.insertBefore(make(" | ", true), before);
                }
                newSpans.push({
                    element: span,
                    title: cat,
                    key: key
                });
            }
            if (before) {
                before.parentNode.insertBefore(make(" | ", true), before);
            }
            for (i = 0; i < newSpans.length; i++) {
                new CategoryEditor(catLine, newSpans[i].element, newSpans[i].title, newSpans[i].key);
            }
        }
        return null;
    }
    function getState() {
        var result = null;
        for (var i = 0; i < editors.length; i++) {
            var text = editors[i].currentCategory;
            var key = editors[i].currentKey;
            if (text && text.length) {
                if (key !== null) {
                    text += "|".concat(key);
                }
                if (result === null) {
                    result = text;
                }
                else {
                    result += "\n".concat(text);
                }
            }
        }
        return result;
    }
    function really_run() {
        initialize();
        if (!HC.upload_disabled && conf.wgNamespaceNumber === -1 && conf.wgCanonicalSpecialPageName === "Upload" && conf.wgUserName) {
            setup_upload();
            setup(function () {
                if (window.UploadForm && window.UploadForm.previous_hotcat_state) {
                    window.UploadForm.previous_hotcat_state = setState(window.UploadForm.previous_hotcat_state);
                }
            });
        }
        else {
            if (!conf.wgIsArticle || conf.wgAction !== "view" || param("diff") !== null || param("oldid") !== null || !can_edit() || HC.disable()) {
                return;
            }
            getPage();
        }
    }
    function run() {
        if (HC.started) {
            return;
        }
        HC.started = true;
        loadTrigger.register(really_run);
    }
    var conf, HC, ua, is_webkit, cat_prefix, noSuggestions, LoadTrigger, loadTrigger, userRights, autopatrol, local, wikiTextBlank, wikiTextBlankRE, wikiTextBlankOrBidi, formattedNamespaces, namespaceIds, substitute, replaceShortcuts, findCatsRE, interlanguageRE, catLine, onUpload, editors, commitButton, commitForm, multiSpan, pageText, pageTime, pageWatched, watchCreate, watchEdit, minorEdits, editToken, is_rtl, serverTime, lastRevId, pageTextRevId, conflictingUser, newDOM, CategoryEditor, saveInProgress, suggestionEngines, suggestionConfigs, dummyElement, BS, TAB, RET, ESC, SPACE, PGUP, PGDOWN, UP, DOWN, DEL, IME, cleanedText, initialized, setupTimeout;
    return __generator(this, function (_a) {
        switch (_a.label) {
            case 0: return [4, $.ready];
            case 1:
                _a.sent();
                conf = new Proxy({}, {
                    get: function (_, name) {
                        if (name === "wgServer") {
                            return "https://".concat(location.hostname);
                        }
                        return mw.config.get(name);
                    }
                });
                if (window.HotCat && !window.HotCat.nodeName || conf.wgAction === "edit") {
                    return [2];
                }
                HC = window.HotCat = {
                    messages: {
                        cat_removed: "removed [[Category:$1]]",
                        template_removed: "removed {{[[Category:$1]]}}",
                        cat_added: "added [[Category:$1]]",
                        cat_keychange: 'new key for [[Category:$1]]: "$2"',
                        cat_notFound: 'Category "$1" not found',
                        cat_exists: 'Category "$1" already exists; not added.',
                        cat_resolved: " (redirect [[Category:$1]] resolved)",
                        uncat_removed: "removed {{uncategorized}}",
                        separator: "; ",
                        prefix: "",
                        using: " using [[Help:Gadget-HotCat|HotCat]]",
                        multi_change: "$1 categories",
                        commit: "Save",
                        ok: "OK",
                        cancel: "Cancel",
                        multi_error: "Could not retrieve the page text from the server. Therefore, your category changes cannot be saved. We apologize for the inconvenience.",
                        short_catchange: null
                    },
                    categories: "Categories",
                    disambig_category: "Disambiguation",
                    redir_category: "Category redirects",
                    links: {
                        change: "(±)",
                        remove: "(−)",
                        add: "(+)",
                        restore: "(×)",
                        undo: "(×)",
                        down: "(↓)",
                        up: "(↑)"
                    },
                    changeTag: "HotCat",
                    automationChangeTag: "Automation tool",
                    tooltips: {
                        change: "Modify",
                        remove: "Remove",
                        add: "Add a new category",
                        restore: "Undo changes",
                        undo: "Undo changes",
                        down: "Open for modifying and display subcategories",
                        up: "Open for modifying and display parent categories"
                    },
                    addmulti: "<span>+<sup>+</sup></span>",
                    multi_tooltip: "Modify several categories",
                    disable: function () {
                        var ns = conf.wgNamespaceNumber;
                        var nsIds = conf.wgNamespaceIds;
                        return ns < 0 || ns === 10 || ns === 828 || ns === 8 || ns === 6 && !conf.wgArticleId || ns === 2 && /\.(js|css)$/.test(conf.wgTitle) || nsIds && (ns === nsIds.creator || ns === nsIds.timedtext || ns === nsIds.institution);
                    },
                    uncat_regexp: /\{\{\s*[Uu]ncategorized\s*[^}]*\}\}\s*(<!--.*?-->\s*)?/g,
                    existsYes: "//upload.wikimedia.org/wikipedia/commons/thumb/b/be/P_yes.svg/20px-P_yes.svg.png",
                    existsNo: "//upload.wikimedia.org/wikipedia/commons/thumb/4/42/P_no.svg/20px-P_no.svg.png",
                    template_categories: {},
                    engine_names: {
                        searchindex: "Search index",
                        pagelist: "Page list",
                        combined: "Combined search",
                        subcat: "Subcategories",
                        parentcat: "Parent categories"
                    },
                    capitalizePageNames: null,
                    upload_disabled: false,
                    blacklist: null,
                    bg_changed: "#FCA",
                    no_autocommit: false,
                    del_needs_diff: false,
                    suggest_delay: 100,
                    editbox_width: 40,
                    suggestions: "combined",
                    fixed_search: false,
                    use_up_down: true,
                    listSize: 5,
                    single_minor: true,
                    dont_add_to_watchlist: false,
                    shortcuts: null,
                    addShortcuts: function (map) {
                        if (!map) {
                            return;
                        }
                        window.HotCat.shortcuts = window.HotCat.shortcuts || {};
                        for (var k in map) {
                            if (!Object.prototype.hasOwnProperty.bind(map)(k) || typeof k !== "string") {
                                continue;
                            }
                            var v = map[k];
                            if (typeof v !== "string") {
                                continue;
                            }
                            k = k.replace(/^\s+|\s+$/g, "");
                            v = v.replace(/^\s+|\s+$/g, "");
                            if (!k.length || !v.length) {
                                continue;
                            }
                            window.HotCat.shortcuts[k] = v;
                        }
                    }
                };
                ua = navigator.userAgent.toLowerCase();
                is_webkit = /applewebkit\/\d+/.test(ua) && ua.indexOf("spoofer") < 0;
                cat_prefix = null;
                noSuggestions = false;
                LoadTrigger = (function () {
                    function LoadTrigger(needed) {
                        this.queue = [];
                        this.needed = needed;
                    }
                    LoadTrigger.prototype.register = function (callback) {
                        if (this.needed <= 0) {
                            callback();
                        }
                        else {
                            this.queue.push(callback);
                        }
                    };
                    LoadTrigger.prototype.loaded = function () {
                        this.needed--;
                        if (this.needed === 0) {
                            for (var i = 0; i < this.queue.length; i++) {
                                this.queue[i]();
                            }
                            this.queue = [];
                        }
                    };
                    return LoadTrigger;
                }());
                loadTrigger = new LoadTrigger(2);
                return [4, mw.loader.using(["mediawiki.user"])];
            case 2:
                _a.sent();
                return [4, mw.user.getRights()];
            case 3:
                userRights = _a.sent();
                autopatrol = userRights.includes("autopatrol");
                window.hotcat_no_autocommit = !autopatrol;
                window.hotcat_del_needs_diff = !autopatrol;
                loadTrigger.loaded();
                if (conf.wgUserLanguage !== "en") {
                    local = {
                        messages: {
                            cat_removed: "移除[[分类:$1]]",
                            template_removed: "移除{{[[分类:$1]]}}",
                            cat_added: "添加[[分类:$1]]",
                            cat_keychange: "为[[分类:$1]]设定新索引:“$2”",
                            cat_notFound: "分类“$1”未找到",
                            cat_exists: "分类“$1”已存在,不执行添加操作",
                            cat_resolved: "(已处理[[分类:$1]]的重定向)",
                            uncat_removed: "",
                            separator: "; ",
                            prefix: "",
                            using: "——[[Help:HotCat小工具|HotCat]]",
                            multi_change: "$1个分类",
                            commit: "保存",
                            ok: "确定",
                            cancel: "取消",
                            multi_error: "无法连接到萌百服务器,因此您的分类更改无法保存,由此引发的不便我们深表歉意。",
                            short_catchange: null
                        },
                        categories: "分类",
                        redir_category: "分类重定向",
                        tooltips: {
                            change: "修改",
                            remove: "移除",
                            add: "新增一个分类",
                            restore: "回退更改",
                            undo: "回退更改",
                            down: "打开以便修改并显示子分类",
                            up: "打开以便修改并显示父分类"
                        },
                        multi_tooltip: "修改多个分类",
                        engine_names: {
                            searchindex: "搜索索引",
                            pagelist: "页面列表",
                            combined: "合并搜索",
                            subcat: "子分类",
                            parentcat: "父分类"
                        },
                        disambig_category: "消歧义页",
                        blacklist: /(?:不可|已)索引页面|(?:调用重复模板参数|有(?:过多高开销解析器函数调用|忽略显示标题|模板循环|脚本错误|投票|参考文献错误)|含有(?:略过模板参数|受损文件链接)|展开模板后长度超过上限|扩展深度超出限制|使用无效自封闭HTML标签|受到保护无法编辑|即将删除)的页面|有错误的Scribunto模块|隐藏分类|页面的节点数超出限制|需要帮助/i,
                        no_autocommit: !autopatrol,
                        del_needs_diff: !autopatrol,
                        existsYes: "".concat(mw.config.get("wgServer").replace("zh.moegirl", "img.moegirl"), "/common/thumb/b/be/P_yes.svg/20px-P_yes.svg.png"),
                        existsNo: "".concat(mw.config.get("wgServer").replace("zh.moegirl", "img.moegirl"), "/common/thumb/4/42/P_no.svg/20px-P_no.svg.png"),
                        disable: function () {
                            var ns = mw.config.get("wgNamespaceNumber");
                            var nsIds = mw.config.get("wgNamespaceIds");
                            return ns < 0 || ns === nsIds.template || ns === nsIds.module || ns === nsIds.mediawiki || ns === nsIds.file && !mw.config.get("wgArticleId") || ns === nsIds.creator || ns === nsIds.timedtext || ns === nsIds.institution || mw.config.get("wgPageContentModel") !== "wikitext";
                        }
                    };
                    $.extend(HC, local, true);
                }
                loadTrigger.loaded();
                wikiTextBlank = "[\\t _\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]+";
                wikiTextBlankRE = new RegExp(wikiTextBlank, "g");
                wikiTextBlankOrBidi = "[\\t _\\xA0\\u1680\\u180E\\u2000-\\u200B\\u200E\\u200F\\u2028-\\u202F\\u205F\\u3000]*";
                formattedNamespaces = conf.wgFormattedNamespaces;
                namespaceIds = conf.wgNamespaceIds;
                HC.category_canonical = formattedNamespaces["14"];
                HC.category_regexp = autoLocalize(14, "category");
                if (formattedNamespaces["10"]) {
                    HC.template_regexp = autoLocalize(10, "template");
                }
                substitute = substituteFactory();
                replaceShortcuts = function () {
                    var replaceHash = substituteFactory({
                        indicator: "#",
                        lbrace: "[",
                        rbrace: "]"
                    });
                    return function (str, map) {
                        var s = replaceHash(str, map);
                        return HC.capitalizePageNames ? capitalize(s) : s;
                    };
                }();
                findCatsRE = new RegExp("\\[\\[".concat(wikiTextBlankOrBidi, "(?:").concat(HC.category_regexp, ")").concat(wikiTextBlankOrBidi, ":[^\\]]+\\]\\]"), "g");
                interlanguageRE = null;
                catLine = null, onUpload = false, editors = [], commitButton = null, commitForm = null, multiSpan = null, pageText = null, pageTime = null, pageWatched = false, watchCreate = false, watchEdit = false, minorEdits = false, editToken = null, is_rtl = false, serverTime = null, lastRevId = null, pageTextRevId = null, conflictingUser = null, newDOM = false;
                CategoryEditor = (function () {
                    function CategoryEditor(line, _span, _after, key, is_hidden) {
                        this.callbackObj = null;
                        var span = _span;
                        var after = _after;
                        if (!span) {
                            this.isAddCategory = true;
                            this.originalCategory = "";
                            this.originalKey = null;
                            this.originalExists = false;
                            if (!newDOM) {
                                span = make("span");
                                span.className = "noprint";
                                if (key) {
                                    span.appendChild(make(" | ", true));
                                    if (after) {
                                        after.parentNode.insertBefore(span, after.nextSibling);
                                        after = after.nextSibling;
                                    }
                                    else {
                                        line.appendChild(span);
                                    }
                                }
                                else if (line.firstChild) {
                                    span.appendChild(make(" ", true));
                                    line.appendChild(span);
                                }
                            }
                            this.linkSpan = make("span");
                            this.linkSpan.className = "noprint nopopups hotcatlink";
                            var lk = make("a");
                            lk.href = "#catlinks";
                            lk.onclick = this.open.bind(this);
                            lk.appendChild(make(HC.links.add, true));
                            lk.title = HC.tooltips.add;
                            this.linkSpan.appendChild(lk);
                            span = make(newDOM ? "li" : "span");
                            span.className = "noprint";
                            if (is_rtl) {
                                span.dir = "rtl";
                            }
                            span.appendChild(this.linkSpan);
                            if (after) {
                                after.parentNode.insertBefore(span, after.nextSibling);
                            }
                            else {
                                line.appendChild(span);
                            }
                            this.normalLinks = null;
                            this.undelLink = null;
                            this.catLink = null;
                        }
                        else {
                            if (is_rtl) {
                                span.dir = "rtl";
                            }
                            this.isAddCategory = false;
                            this.catLink = span.firstChild;
                            this.originalCategory = Array.isArray(after) ? after[0] : after;
                            this.originalKey = key && key.length > 1 ? key.substr(1) : null;
                            this.originalExists = !hasClass(this.catLink, "new");
                            this.makeLinkSpan();
                            if (!this.originalExists && this.upDownLinks) {
                                this.upDownLinks.style.display = "none";
                            }
                            span.appendChild(this.linkSpan);
                        }
                        this.originalHidden = is_hidden;
                        this.line = line;
                        this.engine = HC.suggestions;
                        this.span = span;
                        this.currentCategory = !this.isAddCategory && Array.isArray(after) ? after[1] : this.originalCategory;
                        this.currentExists = this.originalExists;
                        this.currentHidden = this.originalHidden;
                        this.currentKey = this.originalKey;
                        this.state = CategoryEditor.UNCHANGED;
                        this.lastSavedState = CategoryEditor.UNCHANGED;
                        this.lastSavedCategory = this.currentCategory;
                        this.lastSavedKey = this.originalKey;
                        this.lastSavedExists = this.originalExists;
                        this.lastSavedHidden = this.originalHidden;
                        if (this.catLink && this.currentKey) {
                            this.catLink.title = this.currentKey;
                        }
                        editors[editors.length] = this;
                    }
                    CategoryEditor.prototype.makeLinkSpan = function () {
                        this.normalLinks = make("span");
                        var lk = null;
                        if (this.originalCategory && this.originalCategory.length) {
                            lk = make("a");
                            lk.href = "#catlinks";
                            lk.onclick = this.remove.bind(this);
                            lk.appendChild(make(HC.links.remove, true));
                            lk.title = HC.tooltips.remove;
                            this.normalLinks.appendChild(make(" ", true));
                            this.normalLinks.appendChild(lk);
                        }
                        if (!HC.template_categories[this.originalCategory]) {
                            lk = make("a");
                            lk.href = "#catlinks";
                            lk.onclick = this.open.bind(this);
                            lk.appendChild(make(HC.links.change, true));
                            lk.title = HC.tooltips.change;
                            this.normalLinks.appendChild(make(" ", true));
                            this.normalLinks.appendChild(lk);
                            if (!noSuggestions && HC.use_up_down) {
                                this.upDownLinks = make("span");
                                lk = make("a");
                                lk.href = "#catlinks";
                                lk.onclick = this.down.bind(this);
                                lk.appendChild(make(HC.links.down, true));
                                lk.title = HC.tooltips.down;
                                this.upDownLinks.appendChild(make(" ", true));
                                this.upDownLinks.appendChild(lk);
                                lk = make("a");
                                lk.href = "#catlinks";
                                lk.onclick = this.up.bind(this);
                                lk.appendChild(make(HC.links.up, true));
                                lk.title = HC.tooltips.up;
                                this.upDownLinks.appendChild(make(" ", true));
                                this.upDownLinks.appendChild(lk);
                                this.normalLinks.appendChild(this.upDownLinks);
                            }
                        }
                        this.linkSpan = make("span");
                        this.linkSpan.className = "noprint nopopups hotcatlink";
                        this.linkSpan.appendChild(this.normalLinks);
                        this.undelLink = make("span");
                        this.undelLink.className = "nopopups hotcatlink";
                        this.undelLink.style.display = "none";
                        lk = make("a");
                        lk.href = "#catlinks";
                        lk.onclick = this.restore.bind(this);
                        lk.appendChild(make(HC.links.restore, true));
                        lk.title = HC.tooltips.restore;
                        this.undelLink.appendChild(make(" ", true));
                        this.undelLink.appendChild(lk);
                        this.linkSpan.appendChild(this.undelLink);
                    };
                    CategoryEditor.prototype.invokeSuggestions = function (dont_autocomplete) {
                        if (this.engine && suggestionConfigs[this.engine] && suggestionConfigs[this.engine].temp && !dont_autocomplete) {
                            this.engine = HC.suggestions;
                        }
                        this.state = CategoryEditor.CHANGE_PENDING;
                        var self = this;
                        window.setTimeout(function () {
                            self.textchange(dont_autocomplete);
                        }, HC.suggest_delay);
                    };
                    CategoryEditor.prototype.makeForm = function () {
                        var form = make("form");
                        form.method = "POST";
                        form.onsubmit = this.accept.bind(this);
                        this.form = form;
                        var self = this;
                        var text = make("input");
                        text.type = "text";
                        text.size = HC.editbox_width;
                        if (!noSuggestions) {
                            text.onkeyup = function (evt) {
                                var key = evt.keyCode || 0;
                                if (self.ime && self.lastKey === IME && !self.usesComposition && (key === TAB || key === RET || key === ESC || key === SPACE)) {
                                    self.ime = false;
                                }
                                if (self.ime) {
                                    return true;
                                }
                                if (key === UP || key === DOWN || key === PGUP || key === PGDOWN) {
                                    if (self.keyCount === 0) {
                                        return self.processKey(evt);
                                    }
                                }
                                else {
                                    if (key === ESC && self.lastKey !== IME) {
                                        if (!self.resetKeySelection()) {
                                            self.cancel();
                                            return;
                                        }
                                    }
                                    self.invokeSuggestions(key === BS || key === DEL || key === ESC);
                                }
                                return true;
                            };
                            text.onkeydown = function (evt) {
                                var key = evt.keyCode || 0;
                                self.lastKey = key;
                                self.keyCount = 0;
                                if (!self.ime && key === IME && !self.usesComposition) {
                                    self.ime = true;
                                }
                                else if (self.ime && key !== IME && !(key >= 16 && key <= 20 || key >= 91 && key <= 93 || key === 144)) {
                                    self.ime = false;
                                }
                                if (self.ime) {
                                    return true;
                                }
                                if (key === RET) {
                                    return self.accept(evt);
                                }
                                return key === ESC ? evtKill(evt) : true;
                            };
                            text.onkeypress = function (evt) {
                                self.keyCount++;
                                return self.processKey(evt);
                            };
                            $(text).on("focus", function () {
                                makeActive(self);
                            });
                            $(text).on(text.onbeforedeactivate !== undefined && text.createTextRange ? "beforedeactivate" : "blur", this.saveView.bind(this));
                            try {
                                $(text).on("compositionstart", function () {
                                    self.lastKey = IME;
                                    self.usesComposition = true;
                                    self.ime = true;
                                });
                                $(text).on("compositionend", function () {
                                    self.lastKey = IME;
                                    self.usesComposition = true;
                                    self.ime = false;
                                });
                                $(text).on("textInput", function () {
                                    self.ime = false;
                                    self.invokeSuggestions(false);
                                });
                            }
                            catch (_a) { }
                            $(text).on("blur", function () {
                                self.usesComposition = false;
                                self.ime = false;
                            });
                        }
                        this.text = text;
                        this.icon = make("img");
                        var list = null;
                        if (!noSuggestions) {
                            list = make("select");
                            list.onclick = function () {
                                if (self.highlightSuggestion(0)) {
                                    self.textchange(false, true);
                                }
                            };
                            list.ondblclick = function (e) {
                                if (self.highlightSuggestion(0)) {
                                    self.accept(e);
                                }
                            };
                            list.onchange = function () {
                                self.highlightSuggestion(0);
                                self.text.focus();
                            };
                            list.onkeyup = function (evt) {
                                if (evt.keyCode === ESC) {
                                    self.resetKeySelection();
                                    self.text.focus();
                                    window.setTimeout(function () {
                                        self.textchange(true);
                                    }, HC.suggest_delay);
                                }
                                else if (evt.keyCode === RET) {
                                    self.accept(evt);
                                }
                            };
                            if (!HC.fixed_search) {
                                var engineSelector = make("select");
                                for (var key in suggestionConfigs) {
                                    if (suggestionConfigs[key].show) {
                                        var opt = make("option");
                                        opt.value = key;
                                        if (key === this.engine) {
                                            opt.selected = true;
                                        }
                                        opt.appendChild(make(suggestionConfigs[key].name, true));
                                        engineSelector.appendChild(opt);
                                    }
                                }
                                engineSelector.onchange = function () {
                                    self.engine = self.engineSelector.options[self.engineSelector.selectedIndex].value;
                                    self.text.focus();
                                    self.textchange(true, true);
                                };
                                this.engineSelector = engineSelector;
                            }
                        }
                        this.list = list;
                        function button_label(id, defaultText) {
                            var label = null;
                            if (onUpload && window.UFUI !== undefined && window.UIElements !== undefined && window.UFUI.getLabel instanceof Function) {
                                try {
                                    label = window.UFUI.getLabel(id, true);
                                    while (label && label.nodeType !== 3) {
                                        label = label.firstChild;
                                    }
                                }
                                catch (ex) {
                                    label = null;
                                }
                            }
                            if (!label || !label.data) {
                                return defaultText;
                            }
                            return label.data;
                        }
                        var OK = make("input");
                        OK.type = "button";
                        OK.value = button_label("wpOkUploadLbl", HC.messages.ok);
                        OK.onclick = this.accept.bind(this);
                        this.ok = OK;
                        var cancel = make("input");
                        cancel.type = "button";
                        cancel.value = button_label("wpCancelUploadLbl", HC.messages.cancel);
                        cancel.onclick = this.cancel.bind(this);
                        this.cancelButton = cancel;
                        var span = make("span");
                        span.className = "hotcatinput";
                        span.style.position = "relative";
                        span.appendChild(text);
                        span.appendChild(make(" ", true));
                        span.style.whiteSpace = "nowrap";
                        if (list) {
                            span.appendChild(list);
                        }
                        if (this.engineSelector) {
                            span.appendChild(this.engineSelector);
                        }
                        if (!noSuggestions) {
                            span.appendChild(this.icon);
                        }
                        span.appendChild(OK);
                        span.appendChild(cancel);
                        form.appendChild(span);
                        form.style.display = "none";
                        this.span.appendChild(form);
                    };
                    CategoryEditor.prototype.display = function (evt) {
                        if (this.isAddCategory && !onUpload) {
                            new CategoryEditor(this.line, null, this.span, true);
                        }
                        if (!commitButton && !onUpload) {
                            for (var i = 0; i < editors.length; i++) {
                                if (editors[i].state !== CategoryEditor.UNCHANGED) {
                                    setMultiInput();
                                    break;
                                }
                            }
                        }
                        if (!this.form) {
                            this.makeForm();
                        }
                        if (this.list) {
                            this.list.style.display = "none";
                        }
                        if (this.engineSelector) {
                            this.engineSelector.style.display = "none";
                        }
                        this.currentCategory = this.lastSavedCategory;
                        this.currentExists = this.lastSavedExists;
                        this.currentHidden = this.lastSavedHidden;
                        this.currentKey = this.lastSavedKey;
                        this.icon.src = this.currentExists ? HC.existsYes : HC.existsNo;
                        this.text.value = this.currentCategory + (this.currentKey !== null ? "|".concat(this.currentKey) : "");
                        this.originalState = this.state;
                        this.lastInput = this.currentCategory;
                        this.inputExists = this.currentExists;
                        this.state = this.state === CategoryEditor.UNCHANGED ? CategoryEditor.OPEN : CategoryEditor.CHANGE_PENDING;
                        this.lastSelection = {
                            start: this.currentCategory.length,
                            end: this.currentCategory.length
                        };
                        this.showsList = false;
                        if (this.catLink) {
                            this.catLink.style.display = "none";
                        }
                        this.linkSpan.style.display = "none";
                        this.form.style.display = "inline";
                        this.ok.disabled = false;
                        var result = evtKill(evt);
                        this.text.focus();
                        this.text.readOnly = false;
                        checkMultiInput();
                        return result;
                    };
                    CategoryEditor.prototype.show = function (evt, engine, readOnly) {
                        var result = this.display(evt);
                        var v = this.lastSavedCategory;
                        if (!v.length) {
                            return result;
                        }
                        this.text.readOnly = !!readOnly;
                        this.engine = engine;
                        this.textchange(false, true);
                        forceRedraw();
                        return result;
                    };
                    CategoryEditor.prototype.open = function (evt) {
                        return this.show(evt, this.engine && suggestionConfigs[this.engine].temp ? HC.suggestions : this.engine);
                    };
                    CategoryEditor.prototype.down = function (evt) {
                        return this.show(evt, "subcat", true);
                    };
                    CategoryEditor.prototype.up = function (evt) {
                        return this.show(evt, "parentcat");
                    };
                    CategoryEditor.prototype.cancel = function () {
                        if (this.isAddCategory && !onUpload) {
                            this.removeEditor();
                            return;
                        }
                        this.inactivate();
                        this.form.style.display = "none";
                        if (this.catLink) {
                            this.catLink.style.display = "";
                        }
                        this.linkSpan.style.display = "";
                        this.state = this.originalState;
                        this.currentCategory = this.lastSavedCategory;
                        this.currentKey = this.lastSavedKey;
                        this.currentExists = this.lastSavedExists;
                        this.currentHidden = this.lastSavedHidden;
                        if (this.catLink) {
                            if (this.currentKey && this.currentKey.length) {
                                this.catLink.title = this.currentKey;
                            }
                            else {
                                this.catLink.title = "";
                            }
                        }
                        if (this.state === CategoryEditor.UNCHANGED) {
                            if (this.catLink) {
                                this.catLink.style.backgroundColor = "transparent";
                            }
                        }
                        else {
                            if (!onUpload) {
                                try {
                                    this.catLink.style.backgroundColor = HC.bg_changed;
                                }
                                catch (_a) { }
                            }
                        }
                        checkMultiInput();
                        forceRedraw();
                    };
                    CategoryEditor.prototype.removeEditor = function () {
                        if (!newDOM) {
                            var next = this.span.nextSibling;
                            if (next) {
                                next.parentNode.removeChild(next);
                            }
                        }
                        if (this.span && this.span.parentNode) {
                            this.span.parentNode.removeChild(this.span);
                        }
                        for (var i = 0; i < editors.length; i++) {
                            if (editors[i] === this) {
                                editors.splice(i, 1);
                                break;
                            }
                        }
                        checkMultiInput();
                    };
                    CategoryEditor.prototype.rollback = function (evt) {
                        this.undoLink.parentNode.removeChild(this.undoLink);
                        this.undoLink = null;
                        this.currentCategory = this.originalCategory;
                        this.currentKey = this.originalKey;
                        this.currentExists = this.originalExists;
                        this.currentHidden = this.originalHidden;
                        this.lastSavedCategory = this.originalCategory;
                        this.lastSavedKey = this.originalKey;
                        this.lastSavedExists = this.originalExists;
                        this.lastSavedHidden = this.originalHidden;
                        this.state = CategoryEditor.UNCHANGED;
                        if (!this.currentCategory || !this.currentCategory.length) {
                            this.removeEditor();
                        }
                        else {
                            this.catLink.removeChild(this.catLink.firstChild);
                            this.catLink.appendChild(make(this.currentCategory, true));
                            this.catLink.href = wikiPagePath("".concat(HC.category_canonical, ":").concat(this.currentCategory));
                            this.catLink.title = this.currentKey || "";
                            this.catLink.className = this.currentExists ? "" : "new";
                            this.catLink.style.backgroundColor = "transparent";
                            if (this.upDownLinks) {
                                this.upDownLinks.style.display = this.currentExists ? "" : "none";
                            }
                            checkMultiInput();
                        }
                        return evtKill(evt);
                    };
                    CategoryEditor.prototype.inactivate = function () {
                        if (this.list) {
                            this.list.style.display = "none";
                        }
                        if (this.engineSelector) {
                            this.engineSelector.style.display = "none";
                        }
                        this.is_active = false;
                    };
                    CategoryEditor.prototype.acceptCheck = function (dontCheck) {
                        this.sanitizeInput();
                        var value = this.text.value.split("|");
                        var key = null;
                        if (value.length > 1) {
                            key = value[1];
                        }
                        var v = value[0].replace(/_/g, " ").replace(/^\s+|\s+$/g, "");
                        if (HC.capitalizePageNames) {
                            v = capitalize(v);
                        }
                        this.lastInput = v;
                        v = replaceShortcuts(v, HC.shortcuts);
                        if (!v.length) {
                            this.cancel();
                            return false;
                        }
                        if (!dontCheck && (conf.wgNamespaceNumber === 14 && v === conf.wgTitle || HC.blacklist && HC.blacklist.test(v))) {
                            this.cancel();
                            return false;
                        }
                        this.currentCategory = v;
                        this.currentKey = key;
                        this.currentExists = this.inputExists;
                        return true;
                    };
                    CategoryEditor.prototype.accept = function (evt) {
                        this.noCommit = (evtKeys(evt) & 1) !== 0;
                        var result = evtKill(evt);
                        if (this.acceptCheck()) {
                            var toResolve = [this];
                            var original_1 = this.currentCategory;
                            resolveMulti(toResolve, function (resolved) {
                                if (resolved[0].dab) {
                                    showDab(resolved[0]);
                                }
                                else {
                                    if (resolved[0].acceptCheck(true)) {
                                        resolved[0].commit(resolved[0].currentCategory !== original_1 ? HC.messages.cat_resolved.replace(/\$1/g, original_1) : null);
                                    }
                                }
                            });
                        }
                        return result;
                    };
                    CategoryEditor.prototype.close = function () {
                        if (!this.catLink) {
                            this.catLink = make("a");
                            this.catLink.appendChild(make("foo", true));
                            this.catLink.style.display = "none";
                            this.span.insertBefore(this.catLink, this.span.firstChild.nextSibling);
                        }
                        this.catLink.removeChild(this.catLink.firstChild);
                        this.catLink.appendChild(make(this.currentCategory, true));
                        this.catLink.href = wikiPagePath("".concat(HC.category_canonical, ":").concat(this.currentCategory));
                        this.catLink.className = this.currentExists ? "" : "new";
                        this.lastSavedCategory = this.currentCategory;
                        this.lastSavedKey = this.currentKey;
                        this.lastSavedExists = this.currentExists;
                        this.lastSavedHidden = this.currentHidden;
                        this.inactivate();
                        this.form.style.display = "none";
                        this.catLink.title = this.currentKey || "";
                        this.catLink.style.display = "";
                        if (this.isAddCategory) {
                            if (onUpload) {
                                new CategoryEditor(this.line, null, this.span, true);
                            }
                            this.isAddCategory = false;
                            this.linkSpan.parentNode.removeChild(this.linkSpan);
                            this.makeLinkSpan();
                            this.span.appendChild(this.linkSpan);
                        }
                        if (!this.undoLink) {
                            var span = make("span");
                            var lk = make("a");
                            lk.href = "#catlinks";
                            lk.onclick = this.rollback.bind(this);
                            lk.appendChild(make(HC.links.undo, true));
                            lk.title = HC.tooltips.undo;
                            span.appendChild(make(" ", true));
                            span.appendChild(lk);
                            this.normalLinks.appendChild(span);
                            this.undoLink = span;
                            if (!onUpload) {
                                try {
                                    this.catLink.style.backgroundColor = HC.bg_changed;
                                }
                                catch (_a) { }
                            }
                        }
                        if (this.upDownLinks) {
                            this.upDownLinks.style.display = this.lastSavedExists ? "" : "none";
                        }
                        this.linkSpan.style.display = "";
                        this.state = CategoryEditor.CHANGED;
                        checkMultiInput();
                        forceRedraw();
                    };
                    CategoryEditor.prototype.commit = function () {
                        if (this.currentCategory === this.originalCategory && (this.currentKey === this.originalKey || this.currentKey === null && !this.originalKey.length) || conf.wgNamespaceNumber === 14 && this.currentCategory === conf.wgTitle || HC.blacklist && HC.blacklist.test(this.currentCategory)) {
                            this.cancel();
                            return;
                        }
                        this.close();
                        if (!commitButton && !onUpload) {
                            var self_1 = this;
                            initiateEdit(function (failure) {
                                performChanges(failure, self_1);
                            }, function (msg) {
                                oouiDialog.alert(oouiDialog.sanitize(msg), {
                                    title: "HotCat 小工具"
                                });
                            });
                        }
                    };
                    CategoryEditor.prototype.remove = function (evt) {
                        this.doRemove(evtKeys(evt) & 1);
                        return evtKill(evt);
                    };
                    CategoryEditor.prototype.doRemove = function (noCommit) {
                        if (this.isAddCategory) {
                            this.cancel();
                            return;
                        }
                        if (!commitButton && !onUpload) {
                            for (var i = 0; i < editors.length; i++) {
                                if (editors[i].state !== CategoryEditor.UNCHANGED) {
                                    setMultiInput();
                                    break;
                                }
                            }
                        }
                        if (commitButton) {
                            this.catLink.title = "";
                            this.catLink.style.cssText += "; text-decoration : line-through !important;";
                            try {
                                this.catLink.style.backgroundColor = HC.bg_changed;
                            }
                            catch (_a) { }
                            this.originalState = this.state;
                            this.state = CategoryEditor.DELETED;
                            this.normalLinks.style.display = "none";
                            this.undelLink.style.display = "";
                            checkMultiInput();
                        }
                        else {
                            if (onUpload) {
                                this.removeEditor();
                            }
                            else {
                                this.originalState = this.state;
                                this.state = CategoryEditor.DELETED;
                                this.noCommit = noCommit || HC.del_needs_diff;
                                var self_2 = this;
                                initiateEdit(function (failure) {
                                    performChanges(failure, self_2);
                                }, function (msg) {
                                    self_2.state = self_2.originalState;
                                    oouiDialog.alert(oouiDialog.sanitize(msg), {
                                        title: "HotCat 小工具"
                                    });
                                });
                            }
                        }
                    };
                    CategoryEditor.prototype.restore = function (evt) {
                        this.catLink.title = this.currentKey || "";
                        this.catLink.style.textDecoration = "";
                        this.state = this.originalState;
                        if (this.state === CategoryEditor.UNCHANGED) {
                            this.catLink.style.backgroundColor = "transparent";
                        }
                        else {
                            try {
                                this.catLink.style.backgroundColor = HC.bg_changed;
                            }
                            catch (_a) { }
                        }
                        this.normalLinks.style.display = "";
                        this.undelLink.style.display = "none";
                        checkMultiInput();
                        return evtKill(evt);
                    };
                    CategoryEditor.prototype.selectEngine = function (engineName) {
                        if (!this.engineSelector) {
                            return;
                        }
                        for (var i = 0; i < this.engineSelector.options.length; i++) {
                            this.engineSelector.options[i].selected = this.engineSelector.options[i].value === engineName;
                        }
                    };
                    CategoryEditor.prototype.sanitizeInput = function () {
                        var v = this.text.value || "";
                        v = v.replace(/^(\s|_)+/, "");
                        var re = new RegExp("^(".concat(HC.category_regexp, "):"));
                        if (re.test(v)) {
                            v = v.substring(v.indexOf(":") + 1).replace(/^(\s|_)+/, "");
                        }
                        v = v.replace(/\u200E$/, "");
                        if (HC.capitalizePageNames) {
                            v = capitalize(v);
                        }
                        if (this.text.value !== null && this.text.value !== v) {
                            this.text.value = v;
                        }
                    };
                    CategoryEditor.prototype.makeCall = function (url, callbackObj, engine, queryKey, cleanKey) {
                        var _this = this;
                        var cb = callbackObj;
                        var e = engine, v = queryKey, z = cleanKey;
                        $.ajax({
                            url: url,
                            method: "GET",
                            dataType: "json",
                            success: function (json) {
                                var titles = e.handler(json, z);
                                if (titles && titles.length) {
                                    if (cb.allTitles === null) {
                                        cb.allTitles = titles;
                                    }
                                    else {
                                        cb.allTitles = cb.allTitles.concat(titles);
                                    }
                                    if (titles.exists) {
                                        cb.exists = true;
                                    }
                                    if (titles.normalized) {
                                        cb.normalized = titles.normalized;
                                    }
                                }
                            },
                            error: function (req) {
                                if (!req) {
                                    noSuggestions = true;
                                }
                                cb.dontCache = true;
                            },
                            complete: function () {
                                cb.callsMade++;
                                if (cb.callsMade === cb.nofCalls) {
                                    if (cb.exists) {
                                        cb.allTitles.exists = true;
                                    }
                                    if (cb.normalized) {
                                        cb.allTitles.normalized = cb.normalized;
                                    }
                                    if (!cb.dontCache && !suggestionConfigs[cb.engineName].cache[z]) {
                                        suggestionConfigs[cb.engineName].cache[z] = cb.allTitles;
                                    }
                                    _this.text.readOnly = false;
                                    if (!cb.cancelled) {
                                        _this.showSuggestions(cb.allTitles, cb.noCompletion, v, cb.engineName);
                                    }
                                    if (cb === _this.callbackObj) {
                                        _this.callbackObj = null;
                                    }
                                    cb = undefined;
                                }
                            }
                        });
                    };
                    CategoryEditor.prototype.textchange = function (_dont_autocomplete, force) {
                        makeActive(this);
                        this.sanitizeInput();
                        var v = this.text.value;
                        var pipe = v.indexOf("|");
                        if (pipe >= 0) {
                            this.currentKey = v.substring(pipe + 1);
                            v = v.substring(0, pipe);
                        }
                        else {
                            this.currentKey = null;
                        }
                        if (this.lastInput === v && !force) {
                            return;
                        }
                        if (this.lastInput !== v) {
                            checkMultiInput();
                        }
                        this.lastInput = v;
                        this.lastRealInput = v;
                        this.ok.disabled = v.length && HC.blacklist && HC.blacklist.test(v);
                        if (noSuggestions) {
                            if (this.list) {
                                this.list.style.display = "none";
                            }
                            if (this.engineSelector) {
                                this.engineSelector.style.display = "none";
                            }
                            if (this.icon) {
                                this.icon.style.display = "none";
                            }
                            return;
                        }
                        if (!v.length) {
                            this.showSuggestions([]);
                            return;
                        }
                        var cleanKey = v.replace(/[\u200E\u200F\u202A-\u202E]/g, "").replace(wikiTextBlankRE, " ");
                        cleanKey = replaceShortcuts(cleanKey, HC.shortcuts);
                        cleanKey = cleanKey.replace(/^\s+|\s+$/g, "");
                        if (!cleanKey.length) {
                            this.showSuggestions([]);
                            return;
                        }
                        if (this.callbackObj) {
                            this.callbackObj.cancelled = true;
                        }
                        var engineName = suggestionConfigs[this.engine] ? this.engine : "combined";
                        var dont_autocomplete = _dont_autocomplete || suggestionConfigs[engineName].noCompletion;
                        if (suggestionConfigs[engineName].cache[cleanKey]) {
                            this.showSuggestions(suggestionConfigs[engineName].cache[cleanKey], dont_autocomplete, v, engineName);
                            return;
                        }
                        var engines = suggestionConfigs[engineName].engines;
                        this.callbackObj = {
                            allTitles: null,
                            callsMade: 0,
                            nofCalls: engines.length,
                            noCompletion: dont_autocomplete,
                            engineName: engineName
                        };
                        this.makeCalls(engines, this.callbackObj, v, cleanKey);
                    };
                    CategoryEditor.prototype.makeCalls = function (engines, cb, v, cleanKey) {
                        for (var j = 0; j < engines.length; j++) {
                            var engine = suggestionEngines[engines[j]];
                            var url = "".concat(conf.wgServer).concat(conf.wgScriptPath).concat(engine.uri.replace(/\$1/g, encodeURIComponent(cleanKey)));
                            this.makeCall(url, cb, engine, v, cleanKey);
                        }
                    };
                    CategoryEditor.prototype.showSuggestions = function (titles, dontAutocomplete, queryKey, engineName) {
                        this.text.readOnly = false;
                        this.dab = null;
                        this.showsList = false;
                        if (!this.list) {
                            return;
                        }
                        if (noSuggestions) {
                            if (this.list) {
                                this.list.style.display = "none";
                            }
                            if (this.engineSelector) {
                                this.engineSelector.style.display = "none";
                            }
                            if (this.icon) {
                                this.icon.style.display = "none";
                            }
                            this.inputExists = true;
                            return;
                        }
                        this.engineName = engineName;
                        if (engineName) {
                            if (!this.engineSelector) {
                                this.engineName = null;
                            }
                        }
                        else {
                            if (this.engineSelector) {
                                this.engineSelector.style.display = "none";
                            }
                        }
                        if (queryKey) {
                            if (this.lastInput.indexOf(queryKey)) {
                                return;
                            }
                            if (this.lastQuery && this.lastInput.indexOf(this.lastQuery) === 0 && this.lastQuery.length > queryKey.length) {
                                return;
                            }
                        }
                        this.lastQuery = queryKey;
                        var v = this.text.value.split("|");
                        var key = v.length > 1 ? "|".concat(v[1]) : "";
                        v = HC.capitalizePageNames ? capitalize(v[0]) : v[0];
                        var vNormalized = v;
                        var knownToExist = titles && titles.exists;
                        var i;
                        if (titles) {
                            if (titles.normalized && v.indexOf(queryKey) === 0) {
                                vNormalized = titles.normalized + v.substring(queryKey.length);
                            }
                            var vLow_1 = vNormalized.toLowerCase();
                            if (HC.blacklist) {
                                for (i = 0; i < titles.length; i++) {
                                    if (HC.blacklist.test(titles[i])) {
                                        titles.splice(i, 1);
                                        i--;
                                    }
                                }
                            }
                            titles.sort(function (a, b) {
                                if (a === b) {
                                    return 0;
                                }
                                if (a.indexOf(b) === 0) {
                                    return 1;
                                }
                                if (b.indexOf(a) === 0) {
                                    return -1;
                                }
                                var prefixMatchA = a.indexOf(vNormalized) === 0 ? 1 : 0;
                                var prefixMatchB = b.indexOf(vNormalized) === 0 ? 1 : 0;
                                if (prefixMatchA !== prefixMatchB) {
                                    return prefixMatchB - prefixMatchA;
                                }
                                var aLow = a.toLowerCase(), bLow = b.toLowerCase();
                                prefixMatchA = aLow.indexOf(vLow_1) === 0 ? 1 : 0;
                                prefixMatchB = bLow.indexOf(vLow_1) === 0 ? 1 : 0;
                                if (prefixMatchA !== prefixMatchB) {
                                    return prefixMatchB - prefixMatchA;
                                }
                                if (a < b) {
                                    return -1;
                                }
                                if (b < a) {
                                    return 1;
                                }
                                return 0;
                            });
                            for (i = 0; i < titles.length; i++) {
                                if (i + 1 < titles.length && titles[i] === titles[i + 1] || conf.wgNamespaceNumber === 14 && titles[i] === conf.wgTitle) {
                                    titles.splice(i, 1);
                                    i--;
                                }
                            }
                        }
                        if (!titles || !titles.length) {
                            if (this.list) {
                                this.list.style.display = "none";
                            }
                            if (this.engineSelector) {
                                this.engineSelector.style.display = "none";
                            }
                            if (engineName && suggestionConfigs[engineName] && !suggestionConfigs[engineName].temp) {
                                if (this.icon) {
                                    this.icon.src = HC.existsNo;
                                }
                                this.inputExists = false;
                            }
                            return;
                        }
                        var firstTitle = titles[0];
                        var completed = this.autoComplete(firstTitle, v, vNormalized, key, dontAutocomplete);
                        var existing = completed || knownToExist || firstTitle === replaceShortcuts(v, HC.shortcuts);
                        if (engineName && suggestionConfigs[engineName] && !suggestionConfigs[engineName].temp) {
                            this.icon.src = existing ? HC.existsYes : HC.existsNo;
                            this.inputExists = existing;
                        }
                        if (completed) {
                            this.lastInput = firstTitle;
                            if (titles.length === 1) {
                                this.list.style.display = "none";
                                if (this.engineSelector) {
                                    this.engineSelector.style.display = "none";
                                }
                                return;
                            }
                        }
                        while (this.list.firstChild) {
                            this.list.removeChild(this.list.firstChild);
                        }
                        for (i = 0; i < titles.length; i++) {
                            var opt = make("option");
                            opt.appendChild(make(titles[i], true));
                            opt.selected = completed && i === 0;
                            this.list.appendChild(opt);
                        }
                        this.displayList();
                    };
                    CategoryEditor.prototype.displayList = function () {
                        this.showsList = true;
                        if (!this.is_active) {
                            this.list.style.display = "none";
                            if (this.engineSelector) {
                                this.engineSelector.style.display = "none";
                            }
                            return;
                        }
                        var nofItems = this.list.options.length > HC.listSize ? HC.listSize : this.list.options.length;
                        if (nofItems <= 1) {
                            nofItems = 2;
                        }
                        this.list.size = nofItems;
                        this.list.style.align = is_rtl ? "right" : "left";
                        this.list.style.zIndex = 5;
                        this.list.style.position = "absolute";
                        var anchor = is_rtl ? "right" : "left";
                        var listh = 0;
                        if (this.list.style.display === "none") {
                            this.list.style.top = "".concat(this.text.offsetTop, "px");
                            this.list.style[anchor] = "-10000px";
                            this.list.style.display = "";
                            listh = this.list.offsetHeight;
                            this.list.style.display = "none";
                        }
                        else {
                            listh = this.list.offsetHeight;
                        }
                        var maxListHeight = listh;
                        if (nofItems < HC.listSize) {
                            maxListHeight = listh / nofItems * HC.listSize;
                        }
                        function viewport(what) {
                            if (is_webkit && !document.evaluate) {
                                return window["inner".concat(what)];
                            }
                            var s = "client".concat(what);
                            if (window.opera) {
                                return document.body[s];
                            }
                            return (document.documentElement ? document.documentElement[s] : 0) || document.body[s] || 0;
                        }
                        function scroll_offset(what) {
                            var s = "scroll".concat(what);
                            var result = (document.documentElement ? document.documentElement[s] : 0) || document.body[s] || 0;
                            if (is_rtl && what === "Left") {
                                if (result < 0) {
                                    result = -result;
                                }
                                if (!is_webkit) {
                                    result = scroll_offset("Width") - viewport("Width") - result;
                                }
                            }
                            return result;
                        }
                        function position(_node) {
                            var node = _node;
                            if (node.getBoundingClientRect) {
                                var box = node.getBoundingClientRect();
                                return {
                                    x: Math.round(box.left + scroll_offset("Left")),
                                    y: Math.round(box.top + scroll_offset("Top"))
                                };
                            }
                            var t = 0, l = 0;
                            do {
                                t += node.offsetTop || 0;
                                l += node.offsetLeft || 0;
                                node = node.offsetParent;
                            } while (node);
                            return {
                                x: l,
                                y: t
                            };
                        }
                        var textPos = position(this.text), nl = 0, textBoxWidth = this.text.offsetWidth || this.text.clientWidth;
                        var nt = 0, offset = 0;
                        if (this.engineName) {
                            this.engineSelector.style.zIndex = 5;
                            this.engineSelector.style.position = "absolute";
                            this.engineSelector.style.width = "".concat(textBoxWidth, "px");
                            if (this.engineSelector.style.display === "none") {
                                this.engineSelector.style[anchor] = "-10000px";
                                this.engineSelector.style.top = "0";
                                this.engineSelector.style.display = "";
                                offset = this.engineSelector.offsetHeight;
                                this.engineSelector.style.display = "none";
                            }
                            else {
                                offset = this.engineSelector.offsetHeight;
                            }
                            this.engineSelector.style[anchor] = "".concat(nl, "px");
                        }
                        if (textPos.y < maxListHeight + offset + 1) {
                            nt = this.text.offsetHeight + offset + 1;
                            if (this.engineName) {
                                this.engineSelector.style.top = "".concat(this.text.offsetHeight, "px");
                            }
                        }
                        else {
                            nt = -listh - offset - 1;
                            if (this.engineName) {
                                this.engineSelector.style.top = "".concat(-(offset + 1), "px");
                            }
                        }
                        this.list.style.top = "".concat(nt, "px");
                        this.list.style.width = "";
                        this.list.style[anchor] = "".concat(nl, "px");
                        if (this.engineName) {
                            this.selectEngine(this.engineName);
                            this.engineSelector.style.display = "";
                        }
                        this.list.style.display = "block";
                        if (this.list.offsetWidth < textBoxWidth) {
                            this.list.style.width = "".concat(textBoxWidth, "px");
                            return;
                        }
                        var scroll = scroll_offset("Left");
                        var view_w = viewport("Width");
                        var w = this.list.offsetWidth;
                        var l_pos = position(this.list);
                        var left = l_pos.x;
                        var right = left + w;
                        if (left < scroll || right > scroll + view_w) {
                            if (w > view_w) {
                                w = view_w;
                                this.list.style.width = "".concat(w, "px");
                                if (is_rtl) {
                                    left = right - w;
                                }
                                else {
                                    right = left + w;
                                }
                            }
                            var relative_offset = 0;
                            if (left < scroll) {
                                relative_offset = scroll - left;
                            }
                            else if (right > scroll + view_w) {
                                relative_offset = -(right - scroll - view_w);
                            }
                            if (is_rtl) {
                                relative_offset = -relative_offset;
                            }
                            if (relative_offset) {
                                this.list.style[anchor] = "".concat(nl + relative_offset, "px");
                            }
                        }
                    };
                    CategoryEditor.prototype.autoComplete = function (newVal, _actVal, normalizedActVal, key, dontModify) {
                        var actVal = _actVal;
                        if (newVal === actVal) {
                            return true;
                        }
                        if (dontModify || this.ime || !this.canSelect()) {
                            return false;
                        }
                        if (newVal.indexOf(actVal)) {
                            if (normalizedActVal && newVal.indexOf(normalizedActVal) === 0) {
                                if (this.lastRealInput === actVal) {
                                    this.lastRealInput = normalizedActVal;
                                }
                                actVal = normalizedActVal;
                            }
                            else {
                                return false;
                            }
                        }
                        this.text.focus();
                        this.text.value = newVal + key;
                        this.setSelection(actVal.length, newVal.length);
                        return true;
                    };
                    CategoryEditor.prototype.canSelect = function () {
                        return this.text.setSelectionRange || this.text.createTextRange || this.text.selectionStart !== undefined && this.text.selectionEnd !== undefined;
                    };
                    CategoryEditor.prototype.setSelection = function (from, to) {
                        if (!this.text.value) {
                            return;
                        }
                        if (this.text.setSelectionRange) {
                            this.text.setSelectionRange(from, to);
                        }
                        else if (this.text.selectionStart !== undefined) {
                            if (from > this.text.selectionStart) {
                                this.text.selectionEnd = to;
                                this.text.selectionStart = from;
                            }
                            else {
                                this.text.selectionStart = from;
                                this.text.selectionEnd = to;
                            }
                        }
                        else if (this.text.createTextRange) {
                            var new_selection = this.text.createTextRange();
                            new_selection.move("character", from);
                            new_selection.moveEnd("character", to - from);
                            new_selection.select();
                        }
                    };
                    CategoryEditor.prototype.getSelection = function () {
                        var from = 0, to = 0;
                        if (!this.text.value) {
                            return {
                                start: from,
                                end: to
                            };
                        }
                        if (this.text.selectionStart !== undefined) {
                            from = this.text.selectionStart;
                            to = this.text.selectionEnd;
                        }
                        else if (document.selection && document.selection.createRange) {
                            var rng = document.selection.createRange().duplicate();
                            if (rng.parentElement() === this.text) {
                                try {
                                    var textRng = this.text.createTextRange();
                                    textRng.move("character", 0);
                                    textRng.setEndPoint("EndToEnd", rng);
                                    to = textRng.text.length;
                                    textRng.setEndPoint("EndToStart", rng);
                                    from = textRng.text.length;
                                }
                                catch (notFocused) {
                                    from = this.text.value.length;
                                    to = from;
                                }
                            }
                        }
                        return {
                            start: from,
                            end: to
                        };
                    };
                    CategoryEditor.prototype.saveView = function () {
                        this.lastSelection = this.getSelection();
                    };
                    CategoryEditor.prototype.processKey = function (evt) {
                        var dir = 0;
                        switch (this.lastKey) {
                            case UP:
                                dir = -1;
                                break;
                            case DOWN:
                                dir = 1;
                                break;
                            case PGUP:
                                dir = -HC.listSize;
                                break;
                            case PGDOWN:
                                dir = HC.listSize;
                                break;
                            case ESC:
                                return evtKill(evt);
                        }
                        if (dir) {
                            if (this.list.style.display !== "none") {
                                this.highlightSuggestion(dir);
                                return evtKill(evt);
                            }
                            else if (this.keyCount <= 1 && (!this.callbackObj || this.callbackObj.callsMade === this.callbackObj.nofCalls)) {
                                this.textchange();
                            }
                        }
                        return true;
                    };
                    CategoryEditor.prototype.highlightSuggestion = function (dir) {
                        if (noSuggestions || !this.list || this.list.style.display === "none") {
                            return false;
                        }
                        var curr = this.list.selectedIndex;
                        var tgt = -1;
                        if (dir === 0) {
                            if (curr < 0 || curr >= this.list.options.length) {
                                return false;
                            }
                            tgt = curr;
                        }
                        else {
                            tgt = curr < 0 ? 0 : curr + dir;
                            tgt = tgt < 0 ? 0 : tgt;
                            if (tgt >= this.list.options.length) {
                                tgt = this.list.options.length - 1;
                            }
                        }
                        if (tgt !== curr || dir === 0) {
                            if (curr >= 0 && curr < this.list.options.length && dir !== 0) {
                                this.list.options[curr].selected = false;
                            }
                            this.list.options[tgt].selected = true;
                            var v = this.text.value.split("|");
                            var key = v.length > 1 ? "|".concat(v[1]) : "";
                            var completed = this.autoComplete(this.list.options[tgt].text, this.lastRealInput, null, key, false);
                            if (!completed || this.list.options[tgt].text === this.lastRealInput) {
                                this.text.value = this.list.options[tgt].text + key;
                                if (this.canSelect()) {
                                    this.setSelection(this.list.options[tgt].text.length, this.list.options[tgt].text.length);
                                }
                            }
                            this.lastInput = this.list.options[tgt].text;
                            this.inputExists = true;
                            if (this.icon) {
                                this.icon.src = HC.existsYes;
                            }
                            this.state = CategoryEditor.CHANGE_PENDING;
                        }
                        return true;
                    };
                    CategoryEditor.prototype.resetKeySelection = function () {
                        if (noSuggestions || !this.list || this.list.style.display === "none") {
                            return false;
                        }
                        var curr = this.list.selectedIndex;
                        if (curr >= 0 && curr < this.list.options.length) {
                            this.list.options[curr].selected = false;
                            var v = this.text.value.split("|");
                            var key = v.length > 1 ? "|".concat(v[1]) : "";
                            var result = v[0] !== this.lastInput;
                            if (v[0] !== this.lastRealInput) {
                                this.text.value = this.lastRealInput + key;
                                result = true;
                            }
                            this.lastInput = this.lastRealInput;
                            return result;
                        }
                        return false;
                    };
                    CategoryEditor.UNCHANGED = 0;
                    CategoryEditor.OPEN = 1;
                    CategoryEditor.CHANGE_PENDING = 2;
                    CategoryEditor.CHANGED = 3;
                    CategoryEditor.DELETED = 4;
                    return CategoryEditor;
                }());
                saveInProgress = false;
                suggestionEngines = {
                    opensearch: {
                        uri: "/api.php?format=json&action=opensearch&namespace=14&limit=30&search=Category:$1",
                        handler: function (queryResult, queryKey) {
                            if (queryResult && queryResult.length >= 2) {
                                var key = queryResult[0].substring(queryResult[0].indexOf(":") + 1);
                                var titles = queryResult[1];
                                var exists = false;
                                if (!cat_prefix) {
                                    cat_prefix = new RegExp("^(".concat(HC.category_regexp, "):"));
                                }
                                for (var i = 0; i < titles.length; i++) {
                                    cat_prefix.lastIndex = 0;
                                    var m = cat_prefix.exec(titles[i]);
                                    if (m && m.length > 1) {
                                        titles[i] = titles[i].substring(titles[i].indexOf(":") + 1);
                                        if (key === titles[i]) {
                                            exists = true;
                                        }
                                    }
                                    else {
                                        titles.splice(i, 1);
                                        i--;
                                    }
                                }
                                titles.exists = exists;
                                if (queryKey !== key) {
                                    titles.normalized = key;
                                }
                                return titles;
                            }
                            return null;
                        }
                    },
                    internalsearch: {
                        uri: "/api.php?format=json&action=query&list=allpages&apnamespace=14&aplimit=30&apfrom=$1&apprefix=$1",
                        handler: function (queryResult) {
                            if (queryResult && queryResult.query && queryResult.query.allpages) {
                                var titles = queryResult.query.allpages;
                                for (var i = 0; i < titles.length; i++) {
                                    titles[i] = titles[i].title.substring(titles[i].title.indexOf(":") + 1);
                                }
                                return titles;
                            }
                            return null;
                        }
                    },
                    exists: {
                        uri: "/api.php?format=json&action=query&prop=info&titles=Category:$1",
                        handler: function (queryResult, queryKey) {
                            if (queryResult && queryResult.query && queryResult.query.pages && !queryResult.query.pages[-1]) {
                                for (var p in queryResult.query.pages) {
                                    var title_1 = queryResult.query.pages[p].title;
                                    title_1 = title_1.substring(title_1.indexOf(":") + 1);
                                    var titles = [title_1];
                                    titles.exists = true;
                                    if (queryKey !== title_1) {
                                        titles.normalized = title_1;
                                    }
                                    return titles;
                                }
                            }
                            return null;
                        }
                    },
                    subcategories: {
                        uri: "/api.php?format=json&action=query&list=categorymembers&cmtype=subcat&cmlimit=max&cmtitle=Category:$1",
                        handler: function (queryResult) {
                            if (queryResult && queryResult.query && queryResult.query.categorymembers) {
                                var titles = queryResult.query.categorymembers;
                                for (var i = 0; i < titles.length; i++) {
                                    titles[i] = titles[i].title.substring(titles[i].title.indexOf(":") + 1);
                                }
                                return titles;
                            }
                            return null;
                        }
                    },
                    parentcategories: {
                        uri: "/api.php?format=json&action=query&prop=categories&titles=Category:$1&cllimit=max",
                        handler: function (queryResult) {
                            if (queryResult && queryResult.query && queryResult.query.pages) {
                                for (var p in queryResult.query.pages) {
                                    if (queryResult.query.pages[p].categories) {
                                        var titles = queryResult.query.pages[p].categories;
                                        for (var i = 0; i < titles.length; i++) {
                                            titles[i] = titles[i].title.substring(titles[i].title.indexOf(":") + 1);
                                        }
                                        return titles;
                                    }
                                }
                            }
                            return null;
                        }
                    }
                };
                suggestionConfigs = {
                    searchindex: {
                        name: "Search index",
                        engines: ["opensearch"],
                        cache: {},
                        show: true,
                        temp: false,
                        noCompletion: false
                    },
                    pagelist: {
                        name: "Page list",
                        engines: ["internalsearch", "exists"],
                        cache: {},
                        show: true,
                        temp: false,
                        noCompletion: false
                    },
                    combined: {
                        name: "Combined search",
                        engines: ["opensearch", "internalsearch"],
                        cache: {},
                        show: true,
                        temp: false,
                        noCompletion: false
                    },
                    subcat: {
                        name: "Subcategories",
                        engines: ["subcategories"],
                        cache: {},
                        show: true,
                        temp: true,
                        noCompletion: true
                    },
                    parentcat: {
                        name: "Parent categories",
                        engines: ["parentcategories"],
                        cache: {},
                        show: true,
                        temp: true,
                        noCompletion: true
                    }
                };
                dummyElement = make(" ", true);
                BS = 8, TAB = 9, RET = 13, ESC = 27, SPACE = 32, PGUP = 33, PGDOWN = 34, UP = 38, DOWN = 40, DEL = 46, IME = 229;
                cleanedText = null;
                initialized = false;
                setupTimeout = null;
                window.hotcat_get_state = function () {
                    return getState();
                };
                window.hotcat_set_state = function (state) {
                    return setState(state);
                };
                window.hotcat_close_form = function () {
                    closeForm();
                };
                HC.runWhenReady = function (callback) {
                    mw.hook("hotcat.ready").add(callback);
                };
                mw.config.set("disableAJAXCategories", true);
                if (conf.wgCanonicalSpecialPageName !== "Upload") {
                    mw.hook("postEdit").add(function () {
                        catLine = null;
                        editors = [];
                        initialized = false;
                        HC.started = false;
                        run();
                    });
                }
                run();
                return [2];
        }
    });
}); })();

/* </pre> */