「MediaWiki:Gadget-HotCat.js」の版間の差分
星海-interfacebot (トーク | 投稿記録) 細 (跨站同步) (タグ: Bot) |
|||
(2人の利用者による、間の2版が非表示) | |||
1行目: | 1行目: | ||
− | /* | + | /* <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}}'; |
− | / | + | |
− | (function() { | + | "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; | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | if ( | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
− | + | 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 }; | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
− | function | + | }; |
− | + | 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); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | if ( | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
− | + | finally { if (e) throw e.error; } | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
− | function | + | return ar; |
− | + | }; | |
− | if ( | + | 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) { | |
− | function autoLocalize(namespaceNumber, | + | if (!name || !name.length) { |
− | + | return ""; | |
− | function | + | } |
− | if (!name || name.length | ||
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. | + | var initial = name.charAt(i), ll = initial.toLowerCase(), ul = initial.toUpperCase(); |
− | + | if (ll === ul) { | |
− | |||
− | if (ll == ul) { | ||
regex_name += initial; | regex_name += initial; | ||
− | } else { | + | } |
− | regex_name += | + | else { |
+ | regex_name += "[".concat(ll).concat(ul, "]"); | ||
} | } | ||
} | } | ||
− | return regex_name.replace(/([ | + | return regex_name.replace(/([\\^$.?*+()])/g, "\\$1").replace(wikiTextBlankRE, wikiTextBlank); |
} | } | ||
fallback = fallback.toLowerCase(); | fallback = fallback.toLowerCase(); | ||
− | var canonical = formattedNamespaces["" | + | var canonical = formattedNamespaces["".concat(namespaceNumber)].toLowerCase(); |
− | var regexp = | + | var regexp = createRegexpStr(canonical); |
− | if (fallback && canonical != fallback) regexp += | + | 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 == | + | if (typeof cat_name === "string" && cat_name.toLowerCase() !== canonical && cat_name.toLowerCase() !== fallback && namespaceIds[cat_name] === namespaceNumber) { |
− | regexp += | + | regexp += "|".concat(createRegexpStr(cat_name)); |
} | } | ||
} | } | ||
} | } | ||
return regexp; | return regexp; | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
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, | + | function param(name, _uri) { |
− | + | var uri = _uri || document.location.href; | |
− | var re = new RegExp( | + | 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 | + | } |
− | return param( | + | 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; | return null; | ||
} | } | ||
function hasClass(elem, name) { | function hasClass(elem, name) { | ||
− | return ( | + | return " ".concat(elem.className, " ").indexOf(" ".concat(name, " ")) >= 0; |
} | } | ||
function capitalize(str) { | function capitalize(str) { | ||
− | if (!str || str.length | + | 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( | + | return conf.wgArticlePath.replace("$1", encodeURIComponent(pageName).replace(/%3A/g, ":").replace(/%2F/g, "/")); |
} | } | ||
function escapeRE(str) { | function escapeRE(str) { | ||
− | return str.replace(/([ | + | return str.replace(/([\\^$.?*+()[\]])/g, "\\$1"); |
} | } | ||
− | function substituteFactory( | + | function substituteFactory(_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 | + | 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) { | |
− | 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] === | + | var replacement = typeof map[k] === "function" ? map[k](match, k) : map[k]; |
− | return typeof replacement === | + | return typeof replacement === "string" ? replacement : replacement || match; |
}); | }); | ||
}; | }; | ||
} | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
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 ( | + | if (HC.template_categories[category]) { |
− | cat_regex = new RegExp( | + | 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( | + | 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 copiedtext = wikitext.replace(/< | ||
var result = []; | var result = []; | ||
var curr_match = null; | var curr_match = null; | ||
361行目: | 202行目: | ||
return result; | return result; | ||
} | } | ||
− | + | function change_category(_wikitext, toRemove, toAdd, _key, is_hidden) { | |
− | function change_category( | + | var key = _key; |
+ | var wikitext = _wikitext; | ||
function find_insertionpoint(wikitext) { | function find_insertionpoint(wikitext) { | ||
− | var copiedtext = wikitext.replace(/< | + | 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 cat_point = -1, matches; | |
− | var cat_point = -1; | + | if (key) { |
− | if (key) key = | + | key = "|".concat(key); |
− | + | } | |
− | + | if (toRemove && toRemove.length) { | |
− | if (toRemove && toRemove.length | ||
matches = find_category(wikitext, toRemove); | matches = find_category(wikitext, toRemove); | ||
− | if (!matches || matches.length | + | if (!matches || !matches.length) { |
return { | return { | ||
text: wikitext, | text: wikitext, | ||
− | + | summary: summary, | |
− | error: | + | 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 | + | if (toAdd && toAdd.length) { |
matches = find_category(wikitext, toAdd); | matches = find_category(wikitext, toAdd); | ||
− | if (matches && matches.length | + | if (matches && matches.length) { |
return { | return { | ||
text: wikitext, | text: wikitext, | ||
− | + | summary: summary, | |
− | error: | + | 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 += | ||
} | } | ||
− | if (keyChange) { | + | wikitext += (wikitext.length ? "\n" : "") + newcatstring; |
− | + | } | |
− | + | if (keyChange) { | |
− | + | var k = key || ""; | |
− | + | if (k.length) { | |
− | + | k = k.substr(1); | |
} | } | ||
− | if ( | + | 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); | ||
} | } | ||
} | } | ||
487行目: | 352行目: | ||
return { | return { | ||
text: wikitext, | text: wikitext, | ||
− | + | summary: summary, | |
error: null | error: null | ||
}; | }; | ||
} | } | ||
function evtKeys(e) { | function evtKeys(e) { | ||
− | |||
var code = 0; | var code = 0; | ||
− | if ( | + | if (e.ctrlKey) { |
− | if (e.ctrlKey || e.metaKey) code |= 1; | + | if (e.ctrlKey || e.metaKey) { |
− | if (e.shiftKey | + | code |= 1; |
− | + | } | |
− | + | if (e.shiftKey) { | |
− | + | code |= 2; | |
+ | } | ||
} | } | ||
return code; | return code; | ||
} | } | ||
function evtKill(e) { | function evtKill(e) { | ||
− | + | if (e.preventDefault) { | |
− | if ( | ||
e.preventDefault(); | e.preventDefault(); | ||
e.stopPropagation(); | e.stopPropagation(); | ||
− | } else | + | } |
+ | else { | ||
e.cancelBubble = true; | e.cancelBubble = true; | ||
+ | } | ||
return false; | return false; | ||
} | } | ||
− | function | + | function setPage(json) { |
− | if ( | + | 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) { | 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) { | function multiChangeMsg(count) { | ||
− | var msg = | + | var msg = HC.messages.multi_change; |
− | if (typeof msg != | + | if (typeof msg !== "string" && msg.length) { |
− | if ( | + | 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, "" | + | 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( | + | failure(HC.messages.multi_error); |
return; | return; | ||
} | } | ||
− | if ( | + | if (HC.messages.cat_keychange.indexOf("$2") < 0) { |
− | if (! | + | HC.messages.cat_keychange += '"$2"'; |
+ | } | ||
+ | if (!HC.messages.short_catchange) { | ||
+ | HC.messages.short_catchange = "[[".concat(HC.category_canonical, ":$1]]"); | ||
+ | } | ||
var action; | var action; | ||
− | var | + | 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) { | |
− | if (singleEditor && !singleEditor.noCommit && ! | ||
commitForm.wpEditToken.value = editToken; | commitForm.wpEditToken.value = editToken; | ||
action = commitForm.wpDiff; | action = commitForm.wpDiff; | ||
− | if (action) action.name = action.value = | + | 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 = | + | 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; |
− | + | var changes = 0, error = null, edit, i; | |
− | |||
− | |||
− | |||
− | var error = null | ||
− | |||
for (i = 0; i < toEdit.length; i++) { | for (i = 0; i < toEdit.length; i++) { | ||
− | + | edit = toEdit[i]; | |
− | result = change_category(result.text, | + | 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 (! | + | if (!edit.originalCategory || !edit.originalCategory.length) { |
− | added.push( | + | added.push(edit.currentCategory); |
− | } else { | + | } |
+ | else { | ||
changed.push({ | changed.push({ | ||
− | from: | + | from: edit.originalCategory, |
− | to: | + | to: edit.currentCategory |
}); | }); | ||
} | } | ||
− | } else if (error === null) { | + | } |
+ | else if (error === null) { | ||
error = result.error; | error = result.error; | ||
} | } | ||
− | } else if ( | + | } |
− | result = change_category(result.text, | + | 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( | + | 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 = | + | if (action) { |
+ | action.name = action.value = "wpDiff"; | ||
+ | } | ||
} | } | ||
− | |||
commitForm.wpMinoredit.checked = minorEdits; | commitForm.wpMinoredit.checked = minorEdits; | ||
− | commitForm.wpWatchthis.checked = conf.wgArticleId | + | commitForm.wpWatchthis.checked = !conf.wgArticleId && watchCreate || watchEdit || pageWatched; |
− | if (conf.wgArticleId | + | if (conf.wgArticleId || !!singleEditor) { |
− | if (changes == 1) { | + | if (action && action.value === "wpSave") { |
− | if (result.summary && result.summary.length | + | if (HC.changeTag) { |
− | commitForm.wpSummary.value = | + | commitForm.wpChangeTags.value = "".concat(HC.changeTag, ",").concat(HC.automationChangeTag); |
− | commitForm.wpMinoredit.checked = | + | HC.messages.using = ""; |
− | } else if (changes | + | 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( | + | 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++) { | for (i = 0; i < added.length; i++) { | ||
− | summary.push( | + | summary.push("+".concat(substitute(HC.messages.short_catchange, [null, added[i]]))); |
} | } | ||
− | if (added.length == 1) | + | if (added.length === 1) { |
− | shortSummary.push( | + | shortSummary.push("+".concat(substitute(HC.messages.short_catchange, [null, added[0]]))); |
− | else if (added.length | + | } |
− | shortSummary.push( | + | else if (added.length) { |
− | var arrow = is_rtl ? | + | 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( | + | 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( | + | 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( | + | 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( | + | else { |
+ | shortSummary.push("\u00B1".concat(substitute(HC.messages.short_catchange, [null, changed[0].from]))); | ||
} | } | ||
− | |||
− | |||
} | } | ||
− | if (summary.length | + | else if (changed.length) { |
− | summary = summary.join( | + | shortSummary.push("\u00B1 ".concat(multiChangeMsg(changed.length))); |
− | if (summary.length > 200 - | + | } |
− | summary = shortSummary.join( | + | 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 = | + | 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 = "" | + | if (selfEditConflict) { |
+ | commitForm.oldid.value = "".concat(pageTextRevId || conf.wgCurRevisionId); | ||
+ | } | ||
commitForm.hcCommit.click(); | commitForm.hcCommit.click(); | ||
} | } | ||
− | function | + | 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++) { | ||
− | + | if (i && 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 = | + | toResolve[i].icon.src = is_missing ? HC.existsNo : HC.existsYes; |
+ | } | ||
+ | if (is_missing) { | ||
+ | return; | ||
} | } | ||
− | + | if (!is_redir && cats && (HC.disambig_category || HC.redir_category)) { | |
− | if (!is_redir && cats && ( | ||
for (var c = 0; c < cats.length; c++) { | for (var c = 0; c < cats.length; c++) { | ||
− | var cat = cats[c] | + | var cat = cats[c].title; |
if (cat) { | if (cat) { | ||
− | cat = cat.substring(cat.indexOf( | + | cat = cat.substring(cat.indexOf(":") + 1).replace(/_/g, " "); |
− | if (cat == | + | if (cat === HC.disambig_category) { |
is_dab = true; | is_dab = true; | ||
break; | break; | ||
− | } else if (cat == | + | } |
+ | 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 | + | 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] | + | if (lks[i].ns === 14 && lks[i].title && lks[i].title.length) { |
− | var match = lks[i] | + | var match = lks[i].title; |
− | match = match.substring(match.indexOf( | + | match = match.substring(match.indexOf(":") + 1); |
− | if (! | + | if (!HC.blacklist || !HC.blacklist.test(match)) { |
titles.push(match); | titles.push(match); | ||
} | } | ||
} | } | ||
} | } | ||
− | if (titles.length | + | if (!titles.length) { |
return; | return; | ||
} | } | ||
for (i = 0; i < toResolve.length; i++) { | for (i = 0; i < toResolve.length; i++) { | ||
− | if ( | + | 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 = | + | 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 ? | + | 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 | + | 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; | |
− | |||
− | |||
− | |||
− | function | ||
− | if ( | ||
− | |||
− | |||
− | |||
− | |||
} | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
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 | + | 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]; |
− | + | } | |
− | + | if (which.lastSelection) { | |
− | }; | + | which.lastSelection = { |
+ | start: v[0].length, | ||
+ | end: v[0].length | ||
+ | }; | ||
+ | } | ||
+ | } | ||
+ | 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; | ||
} | } | ||
} | } | ||
− | + | 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]; | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | if ( | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
− | + | else { | |
− | + | if (resolved[i].acceptCheck(true)) { | |
− | + | resolved[i].commit(); | |
− | |||
− | if ( | ||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
} | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
} | } | ||
− | + | if (firstDab) { | |
− | + | showDab(firstDab); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
− | + | else if (!dontChange) { | |
− | + | initiateEdit(function (failure) { | |
− | + | performChanges(failure); | |
− | + | }, function (msg) { | |
− | + | oouiDialog.alert(oouiDialog.sanitize(msg), { | |
− | + | title: "HotCat 小工具" | |
− | + | }); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | } | ||
− | |||
− | |||
− | |||
− | |||
}); | }); | ||
} | } | ||
− | return | + | }); |
− | } | + | } |
− | + | 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, "):")); | |
− | if (! | + | 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; | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | var | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
− | + | 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); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | if ( | ||
− | |||
− | |||
− | |||
} | } | ||
− | + | 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]; | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | if ( | ||
− | for (var key in | ||
− | if (suggestionConfigs[key] && | ||
− | suggestionConfigs[key].name = | ||
} | } | ||
} | } | ||
} | } | ||
− | is_rtl = hasClass(document.body, | + | 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( | + | is_rtl = document.defaultView.getComputedStyle(document.body, null).getPropertyValue("direction"); |
− | } else if (document.body.currentStyle) { | + | } |
− | is_rtl = document.body.currentStyle | + | else if (document.body.currentStyle) { |
− | } else { | + | is_rtl = document.body.currentStyle.direction; |
− | is_rtl = document.body.style | + | } |
+ | else { | ||
+ | is_rtl = document.body.style.direction; | ||
} | } | ||
− | is_rtl = | + | is_rtl = is_rtl === "rtl"; |
} | } | ||
} | } | ||
function can_edit() { | function can_edit() { | ||
var container = null; | var container = null; | ||
− | switch (mw.config.get( | + | switch (mw.config.get("skin")) { |
− | case | + | case "cologneblue": { |
− | container = document.getElementById( | + | container = document.getElementById("quickbar"); |
− | case | + | } |
− | case | + | case "standard": |
− | if (!container) container = document.getElementById( | + | case "nostalgia": { |
− | var lks = container.getElementsByTagName( | + | 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( | + | 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( | + | 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() { | function setup_upload() { | ||
onUpload = true; | onUpload = true; | ||
− | var ip = document.getElementById( | + | 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) { | ||
− | + | return; | |
− | |||
} | } | ||
− | + | var reupload = document.getElementById("wpForReUpload"); | |
− | var reupload = document.getElementById( | + | var destFile = document.getElementById("wpDestFile"); |
− | var destFile = document.getElementById( | + | if (reupload && !!reupload.value || destFile && (destFile.disabled || destFile.readOnly)) { |
− | if | ||
return; | return; | ||
− | var labelCell = make( | + | } |
− | var lineCell = make( | + | var labelCell = make("td"); |
− | catLine = make( | + | var lineCell = make("td"); |
− | catLine.className = | + | catLine = make("div"); |
− | catLine.id = | + | catLine.className = "catlinks"; |
− | catLine.style.textAlign = is_rtl ? | + | catLine.id = "catlinks"; |
− | catLine.style.margin = | + | catLine.style.textAlign = is_rtl ? "right" : "left"; |
− | catLine.style.border = | + | catLine.style.margin = "0"; |
+ | catLine.style.border = "none"; | ||
lineCell.appendChild(catLine); | lineCell.appendChild(catLine); | ||
var label = null; | var label = null; | ||
− | if ( | + | if (window.UFUI && window.UIElements && window.UFUI.getLabel instanceof Function) { |
try { | try { | ||
− | label = UFUI.getLabel( | + | label = window.UFUI.getLabel("wpCategoriesUploadLbl"); |
− | } catch (ex) { | + | } |
+ | catch (ex) { | ||
label = null; | label = null; | ||
} | } | ||
} | } | ||
if (!label) { | if (!label) { | ||
− | labelCell.id = | + | labelCell.id = "hotcatLabel"; |
− | labelCell.appendChild(make( | + | labelCell.appendChild(make(HC.categories, true)); |
− | } else { | + | } |
− | labelCell.id = | + | else { |
+ | labelCell.id = "hotcatLabelTranslated"; | ||
labelCell.appendChild(label); | labelCell.appendChild(label); | ||
} | } | ||
− | labelCell.className = | + | labelCell.className = "mw-label"; |
− | labelCell.style.textAlign = | + | labelCell.style.textAlign = "right"; |
− | labelCell.style.verticalAlign = | + | labelCell.style.verticalAlign = "middle"; |
− | var form = document.getElementById( | + | 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 = | + | 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 == | + | if (typeof oldSubmit === "string") { |
do_submit = eval(oldSubmit); | do_submit = eval(oldSubmit); | ||
− | else if ( | + | } |
− | do_submit = oldSubmit.apply( | + | else if (oldSubmit instanceof Function) { |
+ | do_submit = oldSubmit.bind(form).apply(void 0, __spreadArray([], __read(args), false)); | ||
+ | } | ||
+ | } | ||
+ | if (!do_submit) { | ||
+ | return false; | ||
} | } | ||
− | |||
closeForm(); | closeForm(); | ||
− | var eb = document.getElementById( | + | 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 = | + | var new_cat = "[[".concat(HC.category_canonical, ":").concat(t).concat(key ? "|".concat(key) : "", "]]"); |
− | var | + | var cleanedText_1 = eb.value.replace(/<!--(\s|\S)*?-->/g, "").replace(/<nowiki>(\s|\S)*?<\/nowiki>/g, ""); |
− | if (!find_category( | + | if (!find_category(cleanedText_1, t, true)) { |
− | eb.value += | + | eb.value += "\n".concat(new_cat); |
addedOne = true; | addedOne = true; | ||
} | } | ||
2,279行目: | 1,161行目: | ||
return true; | return true; | ||
}; | }; | ||
− | } | + | }(form.onsubmit); |
} | } | ||
} | } | ||
− | var | + | 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 = | + | var catTitle = getTitle(span); |
− | |||
− | |||
− | |||
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(/< | + | 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; | ||
} | } | ||
− | |||
− | |||
function findByClass(scope, tag, className) { | function findByClass(scope, tag, className) { | ||
− | var | + | 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) { | 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( | + | catLine = catLine || document.getElementById("mw-normal-catlinks"); |
− | var hiddenCats = document.getElementById( | + | var hiddenCats = document.getElementById("mw-hidden-catlinks"); |
if (!catLine) { | if (!catLine) { | ||
var footer = null; | var footer = null; | ||
if (!hiddenCats) { | if (!hiddenCats) { | ||
− | footer = findByClass(document, | + | footer = findByClass(document, "div", "printfooter"); |
− | if (!footer) return; | + | if (!footer) { |
+ | return; | ||
+ | } | ||
} | } | ||
− | catLine = make( | + | catLine = make("div"); |
− | catLine.id = | + | catLine.id = "mw-normal-catlinks"; |
− | catLine.style.textAlign = is_rtl ? | + | catLine.style.textAlign = is_rtl ? "right" : "left"; |
− | var label = make( | + | var label = make("a"); |
− | label.href = conf.wgArticlePath.replace( | + | label.href = conf.wgArticlePath.replace("$1", "Special:Categories"); |
− | label.title = | + | label.title = HC.categories; |
− | label.appendChild(make( | + | label.appendChild(make(HC.categories, true)); |
catLine.appendChild(label); | catLine.appendChild(label); | ||
− | catLine.appendChild(make( | + | catLine.appendChild(make(":", true)); |
− | var container = | + | var container = hiddenCats ? hiddenCats.parentNode : document.getElementById("catlinks"); |
if (!container) { | if (!container) { | ||
− | container = make( | + | container = make("div"); |
− | container.id = | + | container.id = "catlinks"; |
footer.parentNode.insertBefore(container, footer.nextSibling); | footer.parentNode.insertBefore(container, footer.nextSibling); | ||
} | } | ||
− | container.className = | + | 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 = | + | if (is_rtl) { |
− | function createEditors( | + | catLine.dir = "rtl"; |
+ | } | ||
+ | var chkCats = [], inpIndex = {}; | ||
+ | function createEditors(_line, is_hidden, has_hidden) { | ||
+ | var line = _line; | ||
var i; | var i; | ||
− | var cats = line.getElementsByTagName( | + | var cats = line.getElementsByTagName("li"); |
− | if (cats.length | + | if (cats.length) { |
newDOM = true; | newDOM = true; | ||
line = cats[0].parentNode; | line = cats[0].parentNode; | ||
− | |||
− | |||
} | } | ||
− | var copyCats = | + | else { |
− | for (i = 0; i < cats.length; i++) copyCats[i] = cats[i]; | + | cats = line.getElementsByTagName("span"); |
− | + | } | |
− | + | var copyCats = Array.from({ | |
− | + | length: cats.length | |
− | if ( | + | }); |
− | + | 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 | + | 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); |
− | + | 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 = | + | 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"; | ||
} | } | ||
− | |||
− | |||
− | |||
catLine.insertBefore(enableMulti, catLine.firstChild.nextSibling); | catLine.insertBefore(enableMulti, catLine.firstChild.nextSibling); | ||
− | enableMulti.appendChild(make( | + | enableMulti.appendChild(make(" ", true)); |
− | multiSpan = make( | + | multiSpan = make("span"); |
enableMulti.appendChild(multiSpan); | enableMulti.appendChild(multiSpan); | ||
− | multiSpan.innerHTML = | + | multiSpan.innerHTML = "(<a>".concat(HC.addmulti, "</a>)"); |
− | var lk = multiSpan.getElementsByTagName( | + | 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 = | + | lk.title = HC.multi_tooltip; |
− | lk.style.cursor = | + | lk.style.cursor = "pointer"; |
} | } | ||
cleanedText = null; | cleanedText = null; | ||
− | if ( | + | if (additionalWork instanceof Function) { |
− | + | additionalWork(); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
+ | mw.hook("hotcat.ready").fire(); | ||
+ | $("body").trigger("hotcatSetupCompleted"); | ||
} | } | ||
function createCommitForm() { | function createCommitForm() { | ||
− | if (commitForm) return; | + | if (commitForm) { |
− | var formContainer = make( | + | return; |
− | formContainer.style.display = | + | } |
+ | var formContainer = make("div"); | ||
+ | formContainer.style.display = "none"; | ||
document.body.appendChild(formContainer); | document.body.appendChild(formContainer); | ||
− | formContainer.innerHTML = | + | 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( | + | commitForm = document.getElementById("hotcatCommitForm"); |
} | } | ||
function getPage() { | function getPage() { | ||
− | if (conf.wgArticleId | + | 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 | + | else { |
− | var s = make( | + | 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 = | + | var s = make("script"); |
− | + | s.src = url; | |
− | + | HC.start = function (json) { | |
setPage(json); | setPage(json); | ||
setup(createCommitForm); | setup(createCommitForm); | ||
}; | }; | ||
− | document.getElementsByTagName( | + | document.getElementsByTagName("head")[0].appendChild(s); |
− | setupTimeout = window.setTimeout(function() { | + | setupTimeout = window.setTimeout(function () { |
setup(createCommitForm); | setup(createCommitForm); | ||
− | }, | + | }, 4e3); |
} | } | ||
} | } | ||
− | function | + | function setState(state) { |
− | + | var cats = state.split("\n"); | |
− | + | if (!cats.length) { | |
− | + | return null; | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
− | + | if (initialized && editors.length === 1 && editors[0].isAddCategory) { | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | 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 | + | 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( | + | var lk = make("a"); |
− | lk.href = wikiPagePath( | + | 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( | + | var span = make("span"); |
span.appendChild(lk); | span.appendChild(lk); | ||
− | if (i | + | if (!i) { |
+ | catLine.insertBefore(make(" ", true), before); | ||
+ | } | ||
catLine.insertBefore(span, before); | catLine.insertBefore(span, before); | ||
− | if (before && i + 1 < cats.length) parent.insertBefore(make( | + | 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 | |
}); | }); | ||
} | } | ||
if (before) { | if (before) { | ||
− | before.parentNode.insertBefore(make( | + | before.parentNode.insertBefore(make(" | ", true), before); |
} | } | ||
− | |||
for (i = 0; i < newSpans.length; i++) { | for (i = 0; i < newSpans.length; i++) { | ||
− | + | new CategoryEditor(catLine, newSpans[i].element, newSpans[i].title, newSpans[i].key); | |
} | } | ||
} | } | ||
return null; | return null; | ||
} | } | ||
− | + | function getState() { | |
− | + | var result = null; | |
− | + | for (var i = 0; i < editors.length; i++) { | |
− | + | var text = editors[i].currentCategory; | |
− | return | + | 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]; | |
− | var | + | } |
− | + | 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> */ | |
− | })(); | ||
− | /* | ||
− |
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> */