User:Sapphaline/global.js
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/// rollback ///
/**
* Ajax Undo Script
* Refactored to fetch messages in specific languages (Content vs User) and handle API undo directly.
* CSS is loaded externally from Meta-Wiki.
* Fixed: "Functions declared within loops" warning by extracting logic to a helper function.
*/
mw.loader.using(['mediawiki.util', 'mediawiki.api', 'mediawiki.jqueryMsg'], async () => {
// 1. LOAD CSS EXTERNALLY
mw.loader.addStyleTag('#ajax-undo-loading { display: none; vertical-align: text-bottom; height: 1.3em; overflow: hidden; line-height: 1.5em;}#ajax-undo-loading::after { display: inline-table; animation: ajax-undo-loading 0.8s steps(10) infinite; content: "100%\a92%\a85%\a77%\a69%\a61%\a53%\a42%\a34%\a25%"; color: gray; text-align: left; white-space: pre;}#ajax-undo-loading:not(.is-diff) { margin: -0.3em 3px 0;}#ajax-undo-loading.is-diff { height: 1.55em;}#ajax-undo-loading.is-minerva:not(.is-diff) { float: right; margin-top: 0;}#ajax-undo-loading.is-minerva.is-diff { margin: -0.2em 3px;}@keyframes ajax-undo-loading { to { transform: translateY(-15em); }}#ajax-undo-reason { display: none; margin-left: 3px;}#ajax-undo-reason.is-minerva { border: revert; background: revert; padding: revert;}#ajax-undo-reason.is-minerva:not(.is-diff) { float: right; height: 26px;}');
const isDiff = mw.config.get('wgDiffOldId');
if (mw.config.get('wgAction') !== 'history' && !isDiff) return;
const api = new mw.Api();
const isMinerva = mw.config.get('skin') === 'minerva';
const contentLang = mw.config.get('wgContentLanguage');
const userLang = mw.config.get('wgUserLanguage');
const pageName = mw.config.get('wgPageName'); // Cache this outside loop
// 2. FETCH MESSAGES
let msgUndoSummary = "Отмена правки $1 участника(-цы) [[Special:Contributions/$2|$2]] ([[User talk:$2|обс.]])";
let msgReasonPlaceholder = "Insert reason here...";
try {
const undoResult = results[0];
const reasonResult = results[1];
if (undoResult.query && undoResult.query.allmessages) {
undoResult.query.allmessages.forEach(function(msg) {
if (msg.name === 'Undo-summary' && !msg.missing) {
msgUndoSummary = msg['*'];
}
});
}
if (reasonResult.query && reasonResult.query.allmessages) {
reasonResult.query.allmessages.forEach(function(msg) {
if (msg.name === 'Wikibase-summary-generated' && !msg.missing) {
msgReasonPlaceholder = msg['*'];
}
});
}
} catch (e) {
console.warn('AjaxUndo: Failed to load custom messages, using defaults.', e);
}
const STAGES = {
awaitingClick: 0,
awaitingConfirmation: 1,
awaitingReload: 2,
};
/**
* Helper function to process each undo link individually.
* This creates a new scope for every link, preventing loop variable issues.
*/
function processUndoLink(undoSpan) {
const undoLink = undoSpan.querySelector('a');
if (!undoLink || !undoLink.href) {
return;
}
const undoUrl = new URL(undoLink.href);
const span = document.createElement('span');
let stage = STAGES.awaitingClick;
const ajaxUndoLink = document.createElement('a');
ajaxUndoLink.textContent = 'ajax undo';
ajaxUndoLink.href = undoUrl.href;
if (isMinerva && !isDiff) ajaxUndoLink.style.marginLeft = '1em';
const reasonInput = document.createElement('input');
reasonInput.type = 'text';
reasonInput.id = 'ajax-undo-reason';
if (isDiff) reasonInput.classList.add('is-diff');
if (isMinerva) reasonInput.classList.add('is-minerva');
reasonInput.placeholder = msgReasonPlaceholder;
reasonInput.addEventListener('keydown', function(event) {
if (event.key === 'Enter') ajaxUndoLink.click();
});
const loadingSpinner = document.createElement('span');
loadingSpinner.id = 'ajax-undo-loading';
if (isDiff) loadingSpinner.classList.add('is-diff');
if (isMinerva) loadingSpinner.classList.add('is-minerva');
ajaxUndoLink.addEventListener('click', async function(event) {
event.preventDefault();
if (stage === STAGES.awaitingClick) {
stage = STAGES.awaitingConfirmation;
reasonInput.style.display = 'inline';
reasonInput.focus();
ajaxUndoLink.textContent = 'confirm ajax undo';
ajaxUndoLink.click();
} else if (stage === STAGES.awaitingConfirmation) {
stage = STAGES.awaitingReload;
loadingSpinner.style.display = 'inline-block';
ajaxUndoLink.style.color = 'gray';
reasonInput.disabled = true;
if (isMinerva) ajaxUndoLink.append(loadingSpinner);
const undoId = undoUrl.searchParams.get('undo');
const undoAfter = undoUrl.searchParams.get('undoafter');
if (!undoId || !undoAfter) {
mw.notify('Could not find undo parameters in URL!', { type: 'error' });
return;
}
let revisionUser = null;
const container = undoSpan.closest(isDiff ? 'td' : 'li');
if (container) {
const userLinkElem = container.querySelector('.mw-userlink bdi');
if (userLinkElem) {
revisionUser = userLinkElem.textContent;
}
}
if (!revisionUser) {
mw.notify('Could not find revision user!', { type: 'error' });
return;
}
let summaryText = msgUndoSummary
.replace(/\$1/g, undoId)
.replace(/\$2/g, revisionUser);
if (reasonInput.value.trim()) {
summaryText += ': ' + reasonInput.value.trim();
}
try {
await api.postWithToken('csrf', {
action: 'edit',
title: pageName,
undo: undoId,
undoafter: undoAfter,
summary: summaryText,
});
mw.notify('Revision successfully undone, reloading...', { type: 'success' });
window.location.reload();
} catch (error) {
mw.notify('Error undoing revision: ' + error, { type: 'error' });
setTimeout(function() {
window.location.reload();
}, 2000);
}
}
});
// DOM Assembly
if (isDiff) span.append(document.createTextNode('('));
span.append(ajaxUndoLink);
if (!isMinerva) span.append(loadingSpinner);
if (isMinerva && !isDiff) span.prepend(reasonInput);
else span.append(reasonInput);
if (isDiff) span.append(document.createTextNode(')'));
if (isDiff) {
undoSpan.after(span);
undoSpan.after(document.createTextNode(' '));
} else if (isMinerva) {
if (undoSpan.parentElement) undoSpan.parentElement.before(span);
} else {
if (undoSpan.parentElement) undoSpan.parentElement.after(span);
}
}
// 3. MAIN LOGIC LOOP
const undoSpans = document.querySelectorAll('.mw-history-undo, .mw-diff-undo');
for (let i = 0; i < undoSpans.length; i++) {
processUndoLink(undoSpans[i]);
}
});
/// linthint ///
var myLintHints = { };
myLintHints.rooms = "*";
mw.hook( "lintHint.config" ).fire( myLintHints );
/// User:PerfektesChaos/js/lintHint/r.js
/// 2024-07-04 PerfektesChaos@de.wikipedia
/// Fingerprint:#0#11AC22BC#
/// License:CC-by-sa/4.0
///<nowiki>
(function(mw,$){
"use strict";
var Version=5.8,Signature="lintHint",HINT={cmodels:{"wikitext":true,
"proofread-index":true,
"proofread-page":true},doc:"en:User:PerfektesChaos/js/"+Signature,drop:false,errors:["bogus-image-options","deletable-table-tag","fostered","html5-misnesting","ignored-table-attr","inline-media-caption","large-tables","misc-tidy-replacement-issues","misnested-tag","missing-end-tag","missing-start-tag","mixed-content","multi-colon-escape","multiline-html-table-in-list","multiple-unclosed-formatting-tags","night-mode-unaware-background-color","obsolete-tag","pwrap-bug-workaround","self-closed-tag","stripped-tag","tidy-font-bug","tidy-whitespace-bug","unclosed-quotes-in-heading","wikilink-in-extlink"],idRev:0,indicators:".mw-indicators",last:true,later:false,launch:false,launched:false,layer:null,lazy:false,live:false,ltr:true,quiet:["large-tables","night-mode-unaware-background-color"
],selMain:"[role='main']",silent:false,source:false,spaces:false,using:["mediawiki.api","mediawiki.storage","mediawiki.util","user.options"],$body:false,$content:false,$main:false,$textarea:false,$widget:false},API={Api:false,errors:false,scream:false,server:"api/rest_v1/",scanner:"transform/wikitext/to/lint",swift:"page/lint"},BOX={bgc:"FFFF00",bgcErr:"FFE4E1",bgcOk:"ADFF2F",bgcRun:"C0C0C0",boc:"808080",fgc:"000000",fgcRun:"444",swift:false,$box:false,$collapsed:false,$failure:false,$null:false,$other:false,$pagename:false,$swift:false,$tbody:false,$table:false,$top:false},CODMIRROR={cm:false},EDIT={layer:false,listen:false,live:false,selTextbox:"div[role='textbox']",selVEsrc:".ve-init-mw-desktopArticleTarget-uneditableContent",source:false,sourceVE:"&veaction=editsource",$source:false},GUIDER={last:false,live:false,reTrim:false,suitable:String.fromCharCode(0x2714),using:["jquery.textSelection","mediawiki.ui.button","mediawiki.ui.input"],$pagename:false},INFO={},LINTER={live:false},PREGO={app:false,live:false,maxage:604813,pars:[["last","boolean"],["later","boolean"],["launch","boolean"],["lazy","boolean"],["silent","string"],["spaces","string"]],signature:"preferencesGadgetOptions",site:"w:en",store:"User:PerfektesChaos/js/",sub:"/r.js"},REPOS={},TMPLXPAND={live:false},UPDATE={},WIKED={};
HINT.texts={
"desc":{"en":"Show LintErrors analysis live.",
"de":"Zeige LintErrors-Analyse live.",
"it":"Mostra analisi degli errori di Lint in diretta."},
"domain":{"en":"en.wikipedia.org",
"de":"de.wikipedia.org"},
"howTo":{"en":"Fill balanced wikitext into first input area and press adjacent submit button, or enter page name into second input field (might be followed by revision ID).",
"de":"Füge ausgeglichenen Wikitext in das obere Eingabefeld ein, oder einen Seitennamen in das untere (ggf. gefolgt von einer Versionsnummer), und betätige die jeweilige Schaltfläche.",
"it":"Inserisci il wikitesto nella prima area di input e premi il tasto di invio adiacente, oppure scrivi il titolo della pagina nel secondo campo (potrebbe essere seguito dall’ID della revisione)."},
"mark":{"en":"select problem in source text",
"de":"Problem im Quelltext selektieren",
"it":"Seleziona un problema nel testo sorgente"},
"noPage":{"en":"Wikitext page not found",
"de":"Wikitext-Seite nicht gefunden",
"it":"Pagina di wikitesto non trovata"},
"other":{"en":"Future problems detected.",
"de":"Zukünftige Probleme detektiert.",
"it":"Futuri problemi individuati."},
"^suffix":{"en":"– linter error analysis support",
"de":"– Unterstützung der Analyse von Linter-Fehlern",
"it":"– Supporto per l’analisi degli errori di Lint"},
"^^last":{"en":"Analyze previous revisions, too.",
"de":"Analysiere auch frühere Seitenversionen.",
"it":"Analizza anche le revisioni precedenti."},
"^^launch":{"en":"Run analysis automatically in namespaces on visit rather than manually triggered by button.",
"de":"Löse die Analyse automatisch beim Seitenbesuch in den Namensräumen aus, statt sie manuell über den angebotenen Knopf zu starten.",
"it":"Esegui automaticamente l’analisi nei namespace all’accesso, piuttosto che avviandola manualmente tramite bottone."},
"^^lazy":{"en":"Suppress small label if no error detected.",
"de":"Unterdrücke das kleine grüne Feld, falls bei einer Seitendarstellung kein Problem gefunden wurde.",
"it":"Nascondi l’etichetta in assenza di errori rilevati."},
"^^spaces":{"en":"Space separated list of namespace numbers, for automatized analysis or - for none or * for all",
"de":"Namensraum-Nummern für automatische Analyse, durch Leerzeichen getrennt, oder - für keine oder * für alle",
"it":"Lista di namespace, in formato numerico separati da spazi, dove effettuare l’analisi. Usare - per la lista vuota e * per indicarli tutti."},
"^^silent":{"en":"Suppress these error types (space separated list), or - for all shown or * for auto default",
"de":"Unterdrücke diese Fehlertypen (Leerzeichen-getrennte Liste), oder - für alle zeigen oder * für Vorgabe"}
};
function face(){
if(!HINT.$body){
HINT.$body=$("body");
HINT.ltr=($("html").attr("dir")!=="rtl");}}
function fair(action){
if(mw.config.get("skin")!=="minerva"){
if(action){
mw.loader.using(["jquery.tablesorter"],action);
}else{
HINT.using.push("jquery.tablesorter");}}}
function features(apply){
var i,live,s;
if(typeof apply==="object"&&apply){
if(typeof apply.rooms==="object"&&apply.rooms&&typeof apply.rooms.length==="number"){
live=false;
if(HINT.nsn>=0){
for(i=0;i<apply.rooms.length;i++){
if(apply.rooms[i]===HINT.nsn){
live=true;
break;}}}
}else if(typeof apply.rooms==="string"&&apply.rooms==="*"){
live=(HINT.nsn>=0);
}else{
live=false;}
if(typeof apply.later==="boolean"){
HINT.later=apply.later;}
if(typeof apply.launch==="boolean"){
HINT.launch=apply.launch;}
if(typeof apply.lazy==="boolean"){
HINT.lazy=apply.lazy;
if(HINT.lazy){
BOX.flat();}}
if(live&&!HINT.last){
live=false;
if(typeof apply.oldid==="boolean"&&apply.oldid){
live=true;}}
if(live&&!HINT.live){
HINT.live=true;
if(HINT.launch&&!HINT.launched){
mw.loader.using(HINT.using,API.full);
}else{
mw.loader.using(HINT.using,BOX.feed);}
}else if(HINT.live&&!live){
BOX.flat();}
if(typeof apply.quiet==="object"&&apply.quiet&&typeof apply.quiet.length==="number"){
HINT.drop=[];
for(i=0;i<apply.quiet.length;i++){
s=apply.quiet[i];
if(typeof s==="string"){
s=s.trim();
if(s){
HINT.drop.push(s);}}}
if(HINT.drop.length>0){
HINT.silent=HINT.drop.join(" ");
}else{
HINT.silent="-";}}}}
function first(){
var i,later,listen,live,re,rls,s;
HINT.signature="ext.gadget."+Signature;
if(mw.loader.getState(HINT.signature)!=="ready"){
rls={};
rls[HINT.signature]="ready";
mw.loader.state(rls);
HINT.selector=Signature.toLowerCase();
switch(mw.config.get("wgAction")){
case "view":
HINT.nsn=mw.config.get("wgNamespaceNumber");
switch(HINT.nsn){
case-1:
s=mw.config.get("wgCanonicalSpecialPageName");
switch(s){
case "Blankpage":
s=mw.config.get("wgTitle");
i=s.indexOf("/");
if(i>1){
switch(s.substr(i+1)){
case Signature:
GUIDER.first();
listen=true;
break;
case PREGO.signature:
PREGO.live=true;
PREGO.fire();
break;}}
break;
case "ExpandTemplates":
PREGO.fire();
EDIT.live=true;
EDIT.selector="textarea#output";
fair(TMPLXPAND.first);
break;
case "Info":
$(INFO.first);
break;
case "LintErrors":
LINTER.live=true;
PREGO.fire();
fair(LINTER.first);
break;}
break;
case 102:
case 104:
case 106:
case 108:
case 110:
case 112:
s=mw.config.get("wgPageContentModel");
if(typeof HINT.cmodels[s]==="boolean"){
HINT.source=s;}
default:
HINT.idRev=mw.config.get("wgRevisionId");
s=window.location.search;
if(HINT.idRev<=0){
live=false;
}else if(s){
re="\\b(diff|history|printable)=";
re=new RegExp(re);
live=!re.test(s);
if(live){
if(s.indexOf("&oldid=")>0){
if(mw.config.get("wgCurRevisionId")!==HINT.idRev){
HINT.last=false;
HINT.live=false;}
}else if(s.indexOf("&lintid=")>0){
HINT.launch=true;}
if(s.indexOf(EDIT.sourceVE)>0){
later=true;
EDIT.layer=true;
EDIT.live=true;
EDIT.selector=EDIT.selTextbox;}}
}else{
live=true;}}
break;
case "edit":
case "submit":
EDIT.live=true;
HINT.nsn=mw.config.get("wgNamespaceNumber");
HINT.using.push("jquery.textSelection");
live=true;
if(HINT.nsn>=100){
s=mw.config.get("wgPageContentModel");
if(s==="proofread-page"){
HINT.source=s;}}
break;
case "info":
$(INFO.first);
break;}
if(live){
if(!HINT.source){
HINT.source=mw.config.get("wgPageContentModel");
live=(HINT.source==="wikitext");}
listen=live;}
if(listen){
mw.hook(Signature+".config").add(features);}
if(live){
if(later){
mw.loader.using(HINT.using,EDIT.fading);
}else{
fair();
PREGO.fire();}}
HINT.pub={doc:"[["+HINT.doc+"]]",type:Signature,vsn:Version};
mw.hook(Signature+".ready").fire(HINT.pub);}}
API.fault=function(jqXHR,textStatus,errorThrown){
if(textStatus){
switch(typeof textStatus){
case "object":
if(typeof textStatus.textStatus==="string"){
API.scream=textStatus.textStatus;
}else{
API.scream="";}
if(typeof textStatus.exception==="string"&&textStatus.exception){
API.scream=API.scream+" ("+textStatus.exception+")";}
break;
case "string":
API.scream=textStatus;
break;}}
if(errorThrown){
if(API.scream){
API.scream=API.scream+" -- Error: ";}
API.scream=API.scream+errorThrown;}
if(!API.scream){
API.scream="???";}
if(typeof window.console==="object"&&typeof window.console.log==="function"){
window.console.log(Signature+" * "+API.scream);
if(typeof textStatus==="object"&&textStatus&&typeof window.console.dir==="function"){
window.console.dir(textStatus);}}
API.errors=false;
mw.hook("wikipage.content").add(BOX.fault);
};
API.fine=function(arrived){
var e,i,s;
API.scream=false;
API.errors=false;
if(typeof arrived==="object"&&arrived&&typeof arrived.length==="number"&&arrived.length){
if(HINT.quiet){
for(i=0;i<arrived.length;i++){
e=arrived[i];
if($.inArray(e.type,HINT.quiet)<0){
API.errors=API.errors||[];
API.errors.push(e);}}
}else{
API.errors=arrived;}}
s=(API.errors?"fill":"flat");
mw.hook("wikipage.content").add(BOX[s]);
};
API.fire=function(ask){
var local=(typeof ask==="string");
if(typeof API.query!=="object"){
API.query={
dataType:"json"
};
if(local){
API.first();
API.query.type="POST";
API.query.url=API.site+API.server+API.scanner;}}
if(local){
API.query.data={wikitext:ask};}
$.ajax(API.query).done(API.fine).fail(API.fault);
};
API.first=function(){
if(!API.Api){
API.Api=new mw.Api();}
if(typeof API.site!=="string"){
API.site=window.location.protocol+"//"+window.location.hostname+"/";}
};
API.full=function(access,actual){
var idRev=actual,subject=access /*,f*/;
HINT.launched=true;
if(typeof subject==="string"){
subject=subject.trim();
}else{
if(!API.single){
API.single=mw.config.get("wgPageName");}
subject=API.single;
if(!HINT.idRev){
HINT.idRev=mw.config.get("wgRevisionId");}
idRev=HINT.idRev;}
if(typeof API.page!=="object"){
API.first();
API.page={/*beforeSend:f,*/
dataType:"json"
};
API.solver=API.site+API.server+API.swift+"/";}
if(subject.indexOf(" ")>0){
if(typeof API.reSpace!=="object"){
API.reSpace=new RegExp(" +","g");}
subject=subject.replace(API.reSpace,"_");}
API.page.url=API.solver+encodeURIComponent(subject);
if(idRev){
API.page.url=API.page.url+"/"+idRev;}
$.ajax(API.page).done(API.fine).fail(API.fault);
};
BOX.facet=function($activate){
if($activate){
$activate.css({"display":"block",
"float":(HINT.ltr?"right":"left")});
BOX.$box.append($activate);}
};
BOX.factory=function($area){
var $a,$e;
if(HINT.live){
BOX.first($area);
if(BOX.$box){
if(BOX.$failure){
BOX.$failure.hide();}
BOX.$box.show();
}else{
face();
BOX.$box=$("<div>");
$e=$("<div>");
if(HINT.nsn<0){
$a=$("<span>");
}else{
$a=$("<a>");
$a.attr({href:"/wiki/Special:Blankpage/"+Signature,target:Signature});}
$a.css({"font-weight":"bold",
"font-size":"larger"}).text(Signature+"@PerfektesChaos");
$e.append($a).css({"float":(HINT.ltr?"left":"right")});
BOX.$box.append($e).addClass(HINT.selector+"-box").attr({id:HINT.selector,role:"alert"}).css({"background-color":"#"+BOX.bgc,
"border-color":"#"+BOX.boc,
"border-style":"solid",
"border-width":"1px",
"color":"#"+BOX.fgc,
"margin-bottom":"1em",
"padding":"0.5em",
"pointer-events":"all"});
$e=$("<button>");
$e.click(BOX.flip).css({"color":"#FF0000",
"cursor":"pointer",
"display":"block",
"float":(HINT.ltr?"right":"left"),
"font-weight":"bolder",
"pointer-events":"all"}).css("margin-"+(HINT.ltr?"right":"left"),
"6px").text("X");
BOX.$box.append($e);
BOX.focus(BOX.$box);
if(!GUIDER.live){
mw.hook(PREGO.signature+".$button").fire(BOX.facet,Signature);}}
}else{
BOX.flat();}
BOX.firing(Version,false);
};
BOX.fault=function($area){
BOX.flat();
BOX.factory($area);
if(API.scream&&BOX.$box){
if(BOX.$table){
BOX.$table.hide();}
if(!BOX.$failure){
BOX.$failure=$("<div>");
BOX.$failure.css({"clear":"both",
"color":"#FF0000",
"font-weight":"bold"});
BOX.$box.append(BOX.$failure);}
BOX.$failure.text(API.scream).show();}
GUIDER.fine(false);
};
BOX.feed=function(){
UPDATE.fetch();
if(HINT.launch&&!HINT.launched&&!EDIT.live){
API.full();
}else{
API.errors=true;
mw.hook("wikipage.content").add(BOX.flip);}
};
BOX.fill=function($area){
var i,req,$th,$thead,$tr;
BOX.factory($area);
if(BOX.$collapsed&&!HINT.$widget){
BOX.$collapsed.hide();}
if(BOX.$box){
if(BOX.$table){
if(HINT.$textarea){
if(GUIDER.last){
BOX.$swift.hide();
}else{
BOX.$swift.show();}}
BOX.$tbody.empty();
BOX.filler();
}else{
BOX.$table=$("<table>");
$thead=$("<thead>");
if(HINT.nsn<0){
BOX.$pagename=$("<caption>");
BOX.$pagename.css({"font-weight":"normal",
"white-space":"nowrap"});
BOX.$table.append(BOX.$pagename);}
$tr=$("<tr>");
$th=$("<th>");
$th.text("lint");
$tr.append($th);
$th=$("<th>");
$th.text("+");
$tr.append($th);
if(HINT.$textarea){
BOX.$swift=$("<th>");
BOX.$swift.data("sort-type","number").text("⇓");
mw.hook(PREGO.signature+".ready").add(BOX.flag);
if(GUIDER.last){
BOX.$swift.hide();}
$tr.append(BOX.$swift);}
$thead.append($tr);
BOX.$tbody=$("<tbody>");
BOX.$table.addClass("wikitable "+HINT.selector+"-table").attr({id:HINT.selector+"-table"})
.append($thead,BOX.$tbody).css({"clear":"both",
"overflow":"scroll"});
if(HINT.errors.length>1||HINT.nsn<0){
BOX.$table.addClass("sortable");}
BOX.$box.append(BOX.$table);
req=[];
for(i=0;i<HINT.errors.length;i++){
req.push("linter-category-"+HINT.errors[i]);}
if(!API.Api){
API.Api=new mw.Api();}
API.Api.loadMessagesIfMissing(req).done(BOX.filler).fail(API.fault);}
GUIDER.fine(false);}
};
BOX.filler=function(){
var n=0,e,i,k,loc,par,s,$e,$e2,$e3,$td,$tr;
for(i=0;i<API.errors.length;i++){
e=API.errors[i];
s="linter-category-"+e.type;
if(mw.messages.exists(s)){
s=mw.message(s).text();
}else{
UPDATE.feed(e.type);
if(HINT.later){
s=e.type;
}else{
s=false;}}
if(s){
$tr=$("<tr>");
$tr.addClass(HINT.selector+"-"+e.type);
$td=$("<td>");
$e=$("<a>");
$e.attr({href:"/wiki/Special:LintErrors/"+e.type,target:Signature+"SP",title:"Special:LintErrors/"+e.type})
.text(s);
$td.append($e).css({"background-color":"#"+BOX.bgcErr});
$tr.append($td);
$td=$("<td>");
$td.css({"background-color":"#FFFFFF"});
if(typeof e.params==="object"){
par=e.params;
if(typeof par.name==="string"){
$td.text(par.name);
}else if(typeof par.subtype==="string"){
$td.text(par.subtype);
}else if(typeof par.root==="string"&&typeof par.child==="string"){
$e=$("<code>");
$e.text(par.root);
$e2=$("<span>");
$e2.css({"padding-left":"1em",
"padding-right":"1em"}).html(">");
$e3=$("<code>");
$e3.text(par.child);
$td.append($e,$e2,$e3).css({"white-space":"nowrap"});
}else if(typeof par.items==="object"&&typeof par.items.length==="number"){
for(k=0;k<par.items.length;k++){
s=par.items[k];
if(s.length>50){
$e=$("<span>");
}else{
$e=$("<code>");
$e.css({"margin-right":"6px",
"white-space":"nowrap"});}
$e.text(s);
$td.append($e);}}}
$tr.append($td);
if(HINT.$textarea&&!GUIDER.last&&typeof e.dsr==="object"&&e.dsr&&typeof e.dsr[0]==="number"&&typeof e.dsr[1]==="number"){
$td=$("<td>");
$td.click(BOX.find).css({"background-color":"#FFFFFF"}).data("range",e.dsr)
.data("sort-value",i).attr({"data-beg":""+e.dsr[0],
"data-end":""+e.dsr[1],
"data-type":e.type}).text(" ↓ ");
if(typeof BOX.swift==="string"){
$td.attr({title:BOX.swift});}
$tr.append($td);
loc=true;}
BOX.$tbody.append($tr);
n++;}}
if(n){
if(BOX.$other){
BOX.$other.hide();}
if(n>1&&typeof BOX.$table.tablesorter==="function"){
BOX.$table.tablesorter();}
BOX.$table.show();
if(loc){
mw.hook(Signature+".table-range").fire(BOX.$table);}
}else{
BOX.$table.hide();
if(BOX.$other){
BOX.$other.show();
}else{
if(PREGO.app){
BOX.future();
}else{
mw.hook(PREGO.signature+".ready").add(BOX.future);}}}
};
BOX.find=function(event){
var $item=$(event.target),range=$item.data("range");
HINT.$textarea.focus().textSelection("setSelection",{start:range[0],end:range[1]});
};
BOX.fine=function(){
if(BOX.$collapsed&&!API.errors){
BOX.firing("+");
BOX.$collapsed.addClass(HINT.selector+"-fine").css({"background-color":"#"+BOX.bgcOk});}
};
BOX.firing=function(about,active,attach){
var signal;
if(BOX.$collapsed){
if(active){
BOX.$collapsed.click(BOX.full).css({"color":"#"+BOX.fgc});
signal="pointer";
}else{
BOX.$collapsed.css({"background-color":"#"+BOX.bgcRun,
"color":"#"+BOX.fgcRun
}).off("click",BOX.full);
signal="default";}
BOX.$collapsed.attr({"aria-disabled":!active,
"title":about}).css({"cursor":attach||signal})
.removeClass([HINT.selector+"-fine",HINT.selector+"-progress"]).show();}
};
BOX.first=function($area){
var $main,$top;
if($area){
HINT.$content=$area;}
if(!HINT.$main){
$top=$(HINT.selMain);
switch($top.length){
case 0:
if($area){
HINT.$main=HINT.$content;}
break;
case 1:
$main=$top;
break;
default:
$main=$top.eq(0);}
if($main){
HINT.$main=$main.children().eq(0);
if(EDIT.layer&&!$main.find(EDIT.selVEsrc).length){
EDIT.layer=false;
EDIT.live=false;}}}
};
BOX.flag=function(application){
if(application){
PREGO.app=application;}
BOX.swift=PREGO.app.translation(HINT.texts.mark);
BOX.$swift.attr({title:BOX.swift});
};
BOX.flat=function($area,alive){
BOX.first($area);
if(BOX.$box){
BOX.$box.hide();}
if(API.errors){
BOX.firing("?");
}else{
BOX.fine();}
if(EDIT.live){
if(!alive){
BOX.flip();}
}else if(!API.errors&&!API.scream&&HINT.live&&GUIDER.live){
GUIDER.fine(true);}
};
BOX.flip=function($area){
BOX.first($area);
face();
BOX.flat($area,true);
if(!GUIDER.live){
if(BOX.$collapsed){
BOX.$collapsed.show();
}else{
BOX.$collapsed=$("<div>");
BOX.$collapsed.addClass(HINT.selector+"-collapsed").attr({id:HINT.selector+"-collapsed",role:"button"}).css({/*"clear":(HINT.ltr?"right":
"left"),*/
"padding-left":"2px",
"padding-right":"2px",
"padding-top":"2px",
"pointer-events":"all"}).text(Signature);
BOX.focus(BOX.$collapsed,true,true);}
BOX.firing(Version,true);
BOX.$collapsed.css({"background-color":"#"+BOX.bgc});}
if(TMPLXPAND.live&&!EDIT.$source){
EDIT.fetch();}
if(EDIT.live&&!API.errors&&!TMPLXPAND.live){
EDIT.fine();}
if(GUIDER.$pagename){
GUIDER.$pagename.hide();}
};
BOX.focus=function($apply,another,around){
var learn,light,s,$e;
$apply.addClass("noprint");
if(another){
if(HINT.$widget===false){
HINT.$widget=$(HINT.indicators);
switch(HINT.$widget.length){
case 0:
HINT.$widget=null;
break;
case 1:
break;
default:
HINT.$widget=HINT.$widget.eq(0);}
learn=true;}
if(HINT.$widget){
$apply.css({"display":"inline-block",
"line-height":"1.2em",
"margin-left":"3px",
"margin-right":"3px",
"padding":"1px"});
HINT.$widget.append($apply);
light=true;
}else{
$apply.css({"float":(HINT.ltr?"right":"left")});}}
if(!light){
if(!BOX.$top){
BOX.$top=$("<div>");
BOX.$top.addClass("noprint "+HINT.selector+"-top").attr({id:HINT.selector+"-top"})
.css({"clear":"both",
"width":"100%"});
$e=$("<div>");
$e.css({"clear":"both"});
HINT.$main.before(BOX.$top,$e);
learn=true;}
if(around){
s="#E0E0E0 #E0E0E0 #707070 #707070";
}else{
s="transparent";}
$apply.css({"border-color":s,
"border-style":"solid",
"border-width":"2px",
"margin-bottom":"3px"});
BOX.$top.prepend($apply);}
if(learn&&window.document.location.hash){
window.document.location=window.document.location.href;}
};
BOX.full=function(){
var idRev;
if(HINT.live){
if(BOX.$box){
if(EDIT.live){
API.errors=false;
}else if(HINT.$widget){
BOX.firing("?");}
if(API.errors){
BOX.$box.show();
}else{
BOX.$box.hide();}}
BOX.firing("...",false,"progress");
BOX.$collapsed.addClass(HINT.selector+"-progress");
if(!GUIDER.live){
if(!API.single){
API.single=mw.config.get("wgPageName");}
if(HINT.idRev&&HINT.idRev>0){
idRev=HINT.idRev;}}
if(EDIT.live){
EDIT.fire();
}else{
HINT.launch=true;
API.full(API.single,idRev);
BOX.firing("?",false,"progress");}
}else if(HINT.$widget){
BOX.firing("?",false,"progress");}
};
BOX.future=function(application){
var $e;
if(application){
PREGO.app=application;}
if(PREGO.app){
$e=$("<span>");
$e.css({"border-color":"#"+BOX.boc,
"border-style":"solid",
"border-width":"1px",
"padding":"0.4em"}).html(PREGO.app.translation(HINT.texts.other));
BOX.$other=$("<div>");
BOX.$other.addClass(HINT.selector+"-future").attr({id:HINT.selector+"-future"})
.css({"clear":"both",
"padding-bottom":"1em",
"padding-top":"1em"}).append($e);
BOX.$box.append(BOX.$other);}
};
CODMIRROR.fetch=function(){
var r;
if(CODMIRROR.first()){
r=CODMIRROR.cm.doc.getValue();}
return r;
};
CODMIRROR.first=function(){
var r,uo;
if(!CODMIRROR.cm&&typeof window.CodeMirror==="function"&&typeof window.CodeMirror.doc==="object"){
CODMIRROR.cm=window.CodeMirror;}
if(CODMIRROR.cm){
uo=mw.user.options.get("usecodemirror");
if(typeof uo==="number"&&uo>0){
r=CODMIRROR.cm;}}
return r;
};
EDIT.fading=function(){
var dom;
BOX.first();
if(EDIT.layer){
dom=mw.util.addPortletLink("p-tb","#",Signature,HINT.selector+"-portlet",Version);
HINT.$widget=$(dom);
if(dom.nodeName.toLowerCase()!=="li"){
HINT.$widget=HINT.$widget.parent();}
HINT.$widget.empty();}
fair();
PREGO.fire();
};
EDIT.fetch=function(){
var r,$div;
if(!EDIT.$source){
if(EDIT.layer){
EDIT.selector=EDIT.selTextbox;
}else if(!EDIT.selector){
switch(HINT.source){
case "wikitext":
case "proofread-page":
EDIT.selector="#wpTextbox1";
break;}}
if(EDIT.selector){
if(EDIT.layer){
$div=HINT.$main;
}else{
$div=HINT.$content;}
EDIT.$source=$div.find(EDIT.selector);
if(EDIT.$source.length){
if(EDIT.$source.find(":hidden").length){
EDIT.live=false;}
}else{
EDIT.live=false;}
}else{
EDIT.live=false;}}
if(EDIT.live&&EDIT.$source&&EDIT.$source.length){
if(EDIT.layer){
r=EDIT.$source.text();
}else{
HINT.$textarea=EDIT.$source;
r=EDIT.$source.val();}}
return r;
};
EDIT.fine=function(){
if(EDIT.$source){
EDIT.listen=true;
EDIT.$source.focusin(EDIT.focus);}
BOX.fine();
};
EDIT.fire=function(){
var source;
if(!TMPLXPAND.live){
source=CODMIRROR.fetch();
if(!source){
WIKED.fetch();}}
if(!source){
source=EDIT.fetch();}
if(source){
EDIT.listen=false;
API.fire(source);}
};
EDIT.focus=function(){
if(EDIT.listen){
BOX.firing(Version,true);
BOX.$collapsed.css({"background-color":"#"+BOX.bgc});
EDIT.listen=false;}
};
LINTER.fire=function(){
LINTER.live=true;
mw.hook("wikipage.content").add(LINTER.form);
};
LINTER.first=function(){
if(mw.config.get("wgTitle").indexOf("/")>0&&!LINTER.live){
fair(LINTER.fire);}
};
LINTER.form=function($area){
var $table=$area.find(".mw-datatable, .TablePager");
if($table.length){
if(typeof $table.tablesorter==="function"){
$table.tablesorter();}}
};
GUIDER.facet=function($activate){
if($activate){
$activate.css({"float":(HINT.ltr?"right":"left"),
"margin-top":"1em"});
GUIDER.$desc.before($activate);}
};
GUIDER.figure=function(){
var s=GUIDER.$rev.val().trim();
if(!GUIDER.reNaN){
GUIDER.reNaN=new RegExp("[^0-9]","g");}
s=s.replace(GUIDER.reNaN,"");
GUIDER.$rev.val(s);
};
GUIDER.filled=function(){
var s=GUIDER.$input.val().trim();
GUIDER.$rev.attr({disabled:(s?false:true)});
};
GUIDER.find=function(){
var s=GUIDER.$input.val().trim();
GUIDER.$input.val(s);
GUIDER.fired();
GUIDER.last=true;
if(s){
API.single=s;
API.full(s,GUIDER.$rev.val());}
GUIDER.$startPage.css({"cursor":"progress"});
};
GUIDER.fine=function(action){
var lapsus,$e;
if(GUIDER.live){
lapsus=(action!==true);
if((!API.single||lapsus)&&GUIDER.$pagename){
GUIDER.$pagename.hide();}
if(lapsus){
GUIDER.$okay.hide();
GUIDER.$textarea.css({"background-color":"transparent"}).off("focusin",GUIDER.fine);
GUIDER.$input.off("focusin",GUIDER.fine);
}else{
if(API.single){
$e=GUIDER.$pagename.children();
if(!$e.length){
$e=$("<a>");
$e.attr({target:"_blank"});
GUIDER.$pagename.append($e);}
$e.attr({href:mw.util.getUrl(API.single)}).text(API.single);
GUIDER.$pagename.show();
}else{
GUIDER.$okay.show();
GUIDER.$textarea.css({"background-color":
"#"+BOX.bgcOk}).focusin(GUIDER.fine);
GUIDER.$input.focusin(GUIDER.fine);}}
GUIDER.$startText.css({"cursor":"pointer"});
GUIDER.$startPage.css({"cursor":"pointer"});}
};
GUIDER.finish=function(application){
var $e=$("<div>");
PREGO.app=application;
GUIDER.$desc.html(PREGO.app.translation(HINT.texts.desc));
$e.css({"clear":"both",
"margin-top":"8em"}).html(PREGO.app.translation(HINT.texts.howTo));
HINT.$content.append($e);
$e=$("<a>");
$e.attr({href:"https://"+PREGO.app.translation(HINT.texts.domain)+"/wiki/User:PerfektesChaos/js/"+Signature,target:Signature}).text(GUIDER.$doc.text());
GUIDER.$doc.text("").append($e);
};
GUIDER.fire=function(){
var s=GUIDER.$textarea.val();
GUIDER.fired();
GUIDER.last=false;
if(!GUIDER.reTrim.test(s)){
API.single=false;
API.fire(s);
HINT.launched=true;}
GUIDER.$startText.css({"cursor":"progress"});
};
GUIDER.fired=function(){
GUIDER.flat();
if(!GUIDER.reTrim){
GUIDER.reTrim=new RegExp("^\\s*$");}
};
GUIDER.first=function(){
var i;
PREGO.fire();
for(i=0;i<GUIDER.using.length;i++){
HINT.using.push(GUIDER.using[i]);}
fair();
mw.loader.load(HINT.using);
HINT.live=true;
GUIDER.live=true;
mw.hook("wikipage.content").add(GUIDER.furnish);
};
GUIDER.flat=function(){
if(BOX.$box){
BOX.$box.hide();}
GUIDER.fine(false);
};
GUIDER.foreign=function(){
var req=["general-form-reset","go"],i;
if(!API.Api){
API.Api=new mw.Api();}
UPDATE.fetch();
for(i=0;i<HINT.errors.length;i++){
req.push("linter-category-"+HINT.errors[i]);}
API.Api.loadMessagesIfMissing(req).done(GUIDER.form).fail(API.fault);
};
GUIDER.form=function(){
var submit=mw.message("go").text(),$div=$("<div>"),$x=$("<span>"),$b;
$x.css({"color":"#FF0000",
"font-weight":"bolder"}).text("X");
GUIDER.$startText=$("<span>");
GUIDER.$startText.addClass("mw-ui-button mw-ui-progressive").click(GUIDER.fire).css({"color":"#FFFFFF"})
.text(submit);
GUIDER.$formText.append(GUIDER.$startText);
GUIDER.$okay=$("<span>");
GUIDER.$okay.css({"background-color":"#"+BOX.bgcOk,
"margin-left":"1em",
"margin-right":"1em",
"padding":"0.2em 0.5em"}).hide().text(GUIDER.suitable);
GUIDER.$formText.append(GUIDER.$okay);
$b=$("<input>");
$b.addClass("mw-ui-button").append($x).attr({type:"reset"})
.click(GUIDER.flat).css({"display":"block",
"float":(HINT.ltr?"right":"left")});
GUIDER.$formText.append($b);
$div.css({"clear":"both"});
GUIDER.$formPage.append($div);
$b=$("<input>");
$b.addClass("mw-ui-button").append($x.clone()).attr({type:"reset"})
.click(GUIDER.flat).click(GUIDER.filled).css({"float":(HINT.ltr?"right":"left")});
GUIDER.$formPage.append($b);
GUIDER.$startPage=$("<span>");
GUIDER.$startPage.addClass("mw-ui-button mw-ui-progressive").click(GUIDER.find).css({"color":"#FFFFFF"})
.text(submit);
GUIDER.$formPage.append(GUIDER.$startPage);
mw.hook(PREGO.signature+".ready").add(GUIDER.finish);
};
GUIDER.furnish=function($area){
var $v=$("head"),$e=$v.find("title");
$e.remove();
$e=$("<title>");
$e.text(Signature);
$v.prepend($e);
HINT.$content=$area;
HINT.$content.empty();
face();
$v=HINT.$body.find("#firstHeading,#section_0");
if(!$v.length){
$v=$("h1");}
$v.eq(0).text(Signature);
$v=$("<div>");
$v.css({"clear":"both"});
GUIDER.$doc=$("<span>");
GUIDER.$doc.text(Signature+"@PerfektesChaos");
$e=$("<span>");
$e.css({"font-size":"smaller"}).css("margin-"+(HINT.ltr?"left":"right"),"2em").text(Version);
$v.append(GUIDER.$doc,$e);
GUIDER.$desc=$("<div>");
GUIDER.$desc.css({"font-size":"111%"}).text(" ");
$v.append($v,GUIDER.$desc);
HINT.$content.append($v);
GUIDER.$formText=$("<form>");
GUIDER.$textarea=$("<textarea>");
GUIDER.$textarea.addClass("mw-ui-input").attr({name:"wikitext"})
.css({"background-color":"transparent",
"margin-top":"2em",
"max-width":"100%",
"width":"100%"});
GUIDER.$formText.append(GUIDER.$textarea);
GUIDER.$formPage=$("<form>");
GUIDER.$formPage.css({"clear":"both",
"margin-top":"3em"});
GUIDER.$input=$("<input>");
GUIDER.$input.addClass("mw-ui-input").attr({maxlength:255,name:"pagename",size:50,type:"text"}).css({"float":(HINT.ltr?"left":"right"),
"width":"auto",
"max-width":"auto"}).keyup(GUIDER.filled).mouseup(GUIDER.filled);
GUIDER.$formPage.append(GUIDER.$input);
GUIDER.$rev=$("<input>");
GUIDER.$rev.addClass("mw-ui-input").attr({disabled:true,inputmode:"numeric",maxlength:12,name:"revision",placeholder:"oldid",size:8,type:"text"}).css({"display":"inline-block",
"margin-left":"1.5em",
"margin-right":"1.5em",
"width":"auto",
"max-width":"auto"}).keyup(GUIDER.figure).mouseup(GUIDER.figure);
GUIDER.$formPage.append(GUIDER.$rev);
HINT.$content.append(GUIDER.$formText,GUIDER.$formPage);
GUIDER.$pagename=$("<div>");
GUIDER.$pagename.addClass([HINT.selector+"-pagename",HINT.selector+"-fine"]).attr({id:HINT.selector+"-pagename"})
.css({"background-color":"#"+BOX.bgcOk,
"float":(HINT.ltr?"left":"right"),
"margin-bottom":"1em",
"padding":"4px",
"pointer-events":"all"}).hide();
HINT.$content.before(GUIDER.$pagename);
HINT.$textarea=GUIDER.$textarea;
mw.loader.using(HINT.using,GUIDER.foreign);
mw.hook(PREGO.signature+".$button").fire(GUIDER.facet,Signature);
};
INFO.fiat=function(){
var s=mw.config.get("wgRelevantPageName"),$a=$("<a>");
$a.attr({href:mw.util.getUrl("Special:LintErrors",{pagename:s})}).text(INFO.$h.text());
INFO.$h.empty().append($a);
};
INFO.first=function(){
INFO.$h=$("#mw-pageinfo-linter");
if(INFO.$h.length&&!INFO.$h.find("a").length){
mw.loader.using(["mediawiki.util"],INFO.fiat);}
};
PREGO.features=function(applied){
var i,n,s,v,vals;
if(typeof applied==="object"&&applied){
n=PREGO.pars.length;
for(i=0;i<n;i++){
v=PREGO.pars[i];
s=v[0];
if(typeof applied[s]===v[1]){
HINT[s]=applied[s];}}
if(typeof applied.layer==="boolean"){
delete applied.layer;
mw.hook(PREGO.signature+".forward").fire(Signature,applied);}}
if(HINT.spaces){
HINT.spaces=HINT.spaces.trim();}
if(PREGO.live){
if(!HINT.drop){
HINT.silent="*";}
PREGO.form();
}else if(LINTER.live){
LINTER.live=false;
LINTER.first();
}else{
if(HINT.spaces){
if(HINT.spaces==="*"){
HINT.live=true;
}else if(HINT.spaces!=="-"){
vals=HINT.spaces.split(" ");
s=HINT.nsn+"";
for(i=0;i<vals.length;i++){
if(s===vals[i]){
HINT.live=true;
break;}}}
}else if(HINT.nsn===0){
HINT.live=true;}
if(HINT.live&&HINT.nsn>=0){
switch(HINT.silent){
case false:
case "*":
break;
case "-":
HINT.quiet=false;
break;
default:
HINT.quiet=HINT.silent.split(" ");}
mw.loader.using(HINT.using,BOX.feed);}}
};
PREGO.feed=function(){
var sign="ext.gadget."+PREGO.signature,rls;
if(!mw.loader.getState(sign)){
rls={};
rls[sign]="loading";
mw.loader.state(rls);
REPOS.fire(PREGO.site,PREGO.store+PREGO.signature+PREGO.sub,false,{action:"raw",ctype:"text/javascript",bcache:1,maxage:PREGO.maxage});}
};
PREGO.fiat1=function(){
var s=PREGO.$spaces.val(),i,k,got,rooms;
if(s.indexOf("-")>=0){
s="-";
}else if(s.indexOf("*")>=0){
s="*";
}else{
got=s.trim().split(" ");
s="";
if(got.length>0){
if(typeof PREGO.rooms!=="object"){
PREGO.follow=function(a,b){
return(a<b?-1:1);
};
PREGO.reNum=new RegExp("^[0-9]+$");
PREGO.rooms=mw.config.get("wgFormattedNamespaces");}
rooms=[];
for(i=0;i<got.length;i++){
if(PREGO.reNum.test(got[i])){
k=parseInt(got[i],10);
if((k===0||PREGO.rooms[k])&&$.inArray(k,rooms)<0){
rooms.push(k);}}}
if(rooms.length>0){
rooms.sort(PREGO.follow);
s=rooms.join(" ");}}}
PREGO.$spaces.val(s);
};
PREGO.fiat2=function(){
var s=PREGO.$silent.val(),got,i,quiet,single;
if(s.indexOf("*")>=0){
s="*";
}else{
got=s.trim().split(" ");
if(got.length>0){
quiet=[];
if(typeof PREGO.reID!=="object"){
PREGO.reID=new RegExp("^[a-z][a-z-]*[a-z]$");}
for(i=0;i<got.length;i++){
single=got[i];
if(PREGO.reID.test(single)&&$.inArray(single,quiet)<0){
quiet.push(single);
}else if(single==="-"){
quiet=[];
break;}}
if(quiet.length>0){
s=quiet.join(" ");
}else{
s="-";}
}else{
s="*";}}
PREGO.$silent.val(s);
};
PREGO.field1=function($applying){
PREGO.$spaces=$applying;
PREGO.$spaces.change(PREGO.fiat1);
};
PREGO.field2=function($applying){
PREGO.$silent=$applying;
PREGO.$silent.change(PREGO.fiat2);
};
PREGO.fire=function(){
PREGO.feed();
mw.hook(PREGO.signature+".fetch").fire(Signature,PREGO.features);
};
PREGO.form=function(){
var support=".wikipedia.org/wiki/"+HINT.doc.substr(3),docs={"en":"//en"+support,
"de":"//de"+support},
dialog,opts;
opts=[{signature:"spaces",type:"text",show:HINT.texts["^^spaces"],val:(HINT.spaces?HINT.spaces:""),field:PREGO.field1},{signature:"launch",type:"checkbox",show:HINT.texts["^^launch"],val:HINT.launch},{signature:"last",type:"checkbox",show:HINT.texts["^^last"],val:HINT.last},{signature:"lazy",type:"checkbox",show:HINT.texts["^^lazy"],val:HINT.lazy},{signature:"silent",type:"text",show:HINT.texts["^^silent"],val:(HINT.silent?HINT.silent:"*"),field:PREGO.field2}];
dialog={script:Signature,support:docs,suffix:HINT.texts["^suffix"],opts:opts};
mw.hook(PREGO.signature+".form").fire(dialog);
};
REPOS.fire=function(at,access,append,alter){
var source,syntax;
if(typeof REPOS.requests!=="object"){
REPOS.requests={};}
if(typeof REPOS.requests[access]!=="boolean"){
REPOS.requests[access]=true;
if(append){
source=access+append;
}else{
source=access;}
if(at){
source=REPOS.foundation(at,source,alter);
if(typeof alter==="object"&&alter&&typeof alter.ctype==="string"){
syntax=alter.ctype;}
}else{
syntax=alter;}
mw.loader.load(source,syntax);}
};
REPOS.foundation=function(at,access,alter){
var s=access,r=encodeURI(s);
if(typeof alter==="object"&&alter){
r="/w/index.php?title="+r;
if(access.substr(-3)===".js"){
alter.ctype="text/javascript";
}else if(access.substr(-4)===".css"){
alter.ctype="text/css";}
alter.action="raw";
for(s in alter){
r=r+"&"+s+"="+encodeURI(alter[s]);}
}else{
r="/wiki/"+r;}
if(typeof at==="string"&&at){
switch(at){
case "meta":
r="meta.wikimedia.org"+r;
break;
case "mw":
r="www.mediawiki.org"+r;
break;
case "w:en":
r="en.wikipedia.org"+r;
break;
default:
r=window.location.host+r;}
r="https://"+r;}
return r;
};
TMPLXPAND.first=function(){
TMPLXPAND.live=true;
HINT.live=true;
EDIT.live=true;
EDIT.selector="#output";
mw.loader.using(HINT.using,TMPLXPAND.further);
};
TMPLXPAND.further=function(){
mw.hook("wikipage.content").add(BOX.flip);
};
UPDATE.feed=function(apply){
if(typeof UPDATE.o!=="object"){
UPDATE.o={};}
if(typeof UPDATE.o.unknown!=="object"){
UPDATE.o.unknown=[];}
if($.inArray(apply,HINT.errors)<0){
HINT.errors.push(apply);
UPDATE.o.unknown.push(apply);}
UPDATE.flush();
};
UPDATE.fetch=function(){
var storage=mw.storage.get(Signature),i,k,parsed,s,unknown;
if(typeof storage==="string"){
try{
parsed=JSON.parse(storage);
if(typeof parsed==="object"&&parsed){
if(typeof parsed.translations==="object"&&parsed.translations){
UPDATE.o={translations:parsed.translations};}
if(typeof parsed.unknown==="object"&&parsed.unknown&&typeof parsed.unknown.length==="number"&&parsed.unknown.length){
unknown=[];
for(i=0;i<parsed.unknown.length;i++){
s=parsed.unknown[i];
if(typeof s==="string"){
s=s.trim();
if(s){
k=$.inArray(s,HINT.errors);
if(k<0){
HINT.errors.push(s);
unknown.push(s);}}}}
if(unknown.length){
if(typeof UPDATE.o==="object"){
UPDATE.o.unknown=unknown;
}else{
UPDATE.o={unknown:unknown};}}
if(unknown.length!==parsed.unknown.length){
UPDATE.flush();}}}
}catch(e){
}
if(typeof UPDATE.o!=="object"){
UPDATE.flush();}}
};
UPDATE.flush=function(){
var storage;
if(typeof UPDATE.o==="object"){
storage=JSON.stringify(UPDATE.o);}
if(storage){
mw.storage.set(Signature,storage);
}else{
mw.storage.remove(Signature);}
};
WIKED.fetch=function(){
if(!WIKED.wikEd&&(typeof window.wikEd==="function"||(typeof window.wikEd==="object"&&window.wikEd))&&typeof window.wikEd.disabled==="boolean"&&typeof window.wikEd.highlightSyntax==="boolean"&&typeof window.wikEd.turnedOn==="boolean"&&typeof window.wikEd.useWikEd==="boolean"){
WIKED.wikEd=window.wikEd;}
if(WIKED.wikEd&&!WIKED.wikEd.disabled&&WIKED.wikEd.useWikEd&&WIKED.wikEd.turnedOn&&WIKED.wikEd.highlightSyntax){
WIKED.wikEd.UpdateTextarea();}
};
first();
}(window.mediaWiki,window.jQuery));
/// EOF</nowiki>lintHint/r.js
/// automatically convert br-separated entries in selection into unordered lists ///
// add a single button or several buttons from the supplied array
// or else add all buttons specified in the array window.toolbarButtonsToAdd
mediaWiki.libs.addToolbarButtons = window.addToolbarButtons = function (props) {
"use strict";
if ($.inArray(mw.config.get( 'wgAction' ), ['edit', 'submit']) == -1)
return; // not source-editing a page
if (!props || props[0]) {
var arr = props || window.toolbarButtonsToAdd || [];
$.each(arr, function (i, val) {
if (typeof val == 'object' && !val[0])
mediaWiki.libs.addToolbarButtons(val);
});
arr.length = 0;
return;
}
var button = {
id: '',
tooltip: '',
section: 'main',
group: 'insert',
iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAbCAYAAACN1PRVAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAAWdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCA1LjH3g/eTAAAAtGVYSWZJSSoACAAAAAUAGgEFAAEAAABKAAAAGwEFAAEAAABSAAAAKAEDAAEAAAACAAAAMQECAA4AAABaAAAAaYcEAAEAAABoAAAAAAAAAPJ2AQDoAwAA8nYBAOgDAABQYWludC5ORVQgNS4xAAMAAJAHAAQAAAAwMjMwAaADAAEAAAABAAAABaAEAAEAAACSAAAAAAAAAAIAAQACAAQAAABSOTgAAgAHAAQAAAAwMTAwAAAAAB0aWKnOCQVtAAAAdUlEQVRIS+2S4QrAIAiEa+//zluJB3LL7Ec0GH5gop4aUUmS5HNu9Vu41B/h6LKqnunP12v8jKz36uh36QIY4GGj2NOjZnPvhIHzUewhO2o7Vxu2ItvVAF8kii2YNdMIELAwisEwP/0xDW4a/cZoRpIk/6SUB7tXKOWsyIuwAAAAAElFTkSuQmCC'
}
$.extend(button, props || {});
function error(msg) {
if (window.console && console.error)
console.error('addToolbarButtons.js: ' + msg);
}
if (!button.id) {
error('No button id specified.');
return;
}
if ($('#' + button.id)[0]) {
error('An element with id ' + button.id + ' already exists on the page.');
return;
}
if (!props.iconUrl && !props.iconUrlClassic)
button.iconUrlClassic = '//upload.wikimedia.org/wikipedia/commons/e/ec/Button_base.png';
button.before = (typeof button.before == 'string' ? button.before : '');
button.between = (typeof button.between == 'string' ? button.between : '');
button.after = (typeof button.after == 'string' ? button.after : '');
button.inserts = (button.before + button.between + button.after).length > 0;
if (!button.callback && !button.inserts) {
error('Neither a callback function nor characters to insert specified.');
return;
}
// add button to the new, WikiEditor, toolbar
function customizeBetaToolbar() {
var tools = {};
tools[button.id] = {
label: button.tooltip,
type: 'button',
icon: button.iconUrl,
action: {
type: (button.inserts ? 'encapsulate' : 'callback'),
execute: (button.inserts ? void(0) : button.callback),
options: (button.inserts ? {
pre: button.before,
peri: button.between,
post: button.after
} : void(0))
}
};
$('#wpTextbox1').wikiEditor('addToToolbar', {
'section': button.section,
'group': button.group,
'tools': tools
});
var btn = $('.tool-button[rel="' + button.id + '"]').attr('id', button.id);
if (button.inserts && button.callback)
btn.click(button.callback);
}
mw.loader.using( 'user.options', function () {
if ( mw.user.options.get('usebetatoolbar') ) {
mw.loader.using( 'ext.wikiEditor', function () {
$( customizeBetaToolbar );
} );
}
else if (mw.toolbar && mw.toolbar.addButton) {
// add a button to the classic toolbar
var tempButtonId = button.id + (!button.inserts ? 'TempButton' : '');
mw.toolbar.addButton(
(button.iconUrlClassic || button.iconUrl),
button.tooltip,
button.before, button.after, button.between,
tempButtonId,
tempButtonId
);
if (button.inserts) {
button.callback && $('#' + button.id).click(button.callback);
}
else {
var $tempButton = $('#' + tempButtonId);
if ($tempButton[0]) {
// clone the button to remove added event handlers
// if not done the selection in the textarea is collapsed
// before the callback function is called
var newB = $tempButton[0].cloneNode();
newB.id = button.id;
$tempButton.after(newB).remove();
$(newB).click(button.callback);
}
}
}
});
};
mediaWiki.libs.addToolbarButtons.version = 1000;
try { // $() doesn't work after errors from other scripts, so try directly first:
mediaWiki.libs.addToolbarButtons();
}
catch (e) { // error - page still loading
$(mediaWiki.libs.addToolbarButtons);
}
mw.loader.using('jquery.textSelection'); // it's loaded by default, but just in case
var textArea = $('#wpTextbox1');
var myToolbarButton = {
id: 'myButton',
tooltip:'automatically convert br-separated entries into unordered lists',
callback: function myCallback ()
{
var sel1 = textArea.textSelection('getSelection');
var sel2 = "*" + sel1;
sel2 = sel2.replace(/\r/g, ''); // IE before 9 doesn't remove the \r's
// manipulate the text in the sel variable
sel2 = sel2.replace(/(\n|)\<(\/|)br(\/| \/|)\>(\n|)/g, '\n*');
sel2 = sel2.replace(/\{\{\*\}\}( |)/g, '');
// replace the selected text in the textarea with the new text
textArea.textSelection('encapsulateSelection', {pre: sel2, replace: true});
}
};
if (mw.libs.addToolbarButtons)
mw.libs.addToolbarButtons(myToolbarButton);
else {
var tbs = window.toolbarButtonsToAdd = window.toolbarButtonsToAdd || [];
tbs.push(myToolbarButton);
mw.loader.load(addToolbarButtonsUrl);
}