User:PerfektesChaos/js/lintHint/r.js: Difference between revisions

Content deleted Content added
4.1
4.8
Line 1:
/// User:PerfektesChaos/js/lintHint/r.js
/// 20192021-0412-2723 PerfektesChaos@de.wikipedia
/// Fingerprint:#0#71B8CDDF1AA590F3#
/// License: CC-by-sa/4.0
///<nowiki>
(function(mw,$){
"use strict";
var Version=4.18,Signature="lintHint",HINT={cmodels:{"wikitext":true,
"proofread-index":true,
"proofread-page":true},doc:"en:User:PerfektesChaos/js/"+Signature,errors:["bogus-image-options","deletable-table-tag","fostered","html5-misnesting","ignored-table-attr","inline-media-caption","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","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,selMain:"[role='main']",source: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:"A0A0A0",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},LINTER={live:false},PREGO={app:false,live:false,maxage:604813,pars:[["last","boolean"],["later","boolean"],["launch","boolean"],["lazy","boolean"],["spaces","string"]],signature:"preferencesGadgetOptions",site:"w:en",store:"User:PerfektesChaos/js/",sub:"/r.js"},REPOS={},TMPLXPAND={live:false},UPDATE={},WIKED={};
using:["mediawiki.api","mediawiki.storage","mediawiki.util","user.options"],$body:false,$page:false,$textarea: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:"A0A0A0",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={listen:false,live:false,source:false,$source:false},GUIDER={last:false,live:false,reTrim:false,using:["jquery.textSelection","mediawiki.ui.button","mediawiki.ui.input"],$pagename:false},LINTER={live:false},PREGO={app:false,live:false,maxage:604813,pars:[["last","boolean"],["later","boolean"],["launch","boolean"],["lazy","boolean"],["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.",
Line 89 ⟶ 88:
BOX.flat();}}}
function first(){
var i,later,listen,live,re,rls,s;
HINT.signature="ext.gadget."+Signature;
if(mw.loader.getState(HINT.signature)!=="ready"){
Line 95 ⟶ 94:
rls[HINT.signature]="ready";
mw.loader.state(rls);
HINT.selector=Signature.toLowerCase();
switch(mw.config.get("wgAction")){
case "view":
Line 150:
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=HINT.selTextbox;}}
}else{
live=true;}}
Line 156 ⟶ 161:
case "edit":
case "submit":
case "parsermigration-edit":
EDIT.live=true;
HINT.nsn=mw.config.get("wgNamespaceNumber");
Line 174 ⟶ 178:
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);}}
Line 237 ⟶ 244:
};
API.full=function(access,actual){
var idRev=actual,subject=access /*,f*/;
HINT.launched=true;
if(typeof subject==="string"){
Line 250 ⟶ 257:
if(typeof API.page!=="object"){
API.first();
API.page={/*beforeSend:f,*/
dataType:"json"
};
Line 272 ⟶ 279:
var $a,$e;
if(HINT.live){
HINTBOX.$page=first($area);
if(BOX.$box){
if(BOX.$failure){
Line 289 ⟶ 296:
"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:SignatureHINT.selector,role:"alert"}).css({"background-color":"#"+BOX.bgc,
"border-color":"#"+BOX.boc,
"border-style":"solid",
Line 295 ⟶ 302:
"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);
Line 308 ⟶ 318:
}else{
BOX.flat();}
BOX.firing(Version,false);
};
BOX.fault=function($area){
Line 322 ⟶ 333:
BOX.$box.append(BOX.$failure);}
BOX.$failure.text(API.scream).show();}
if(GUIDER.$pagenamefine(false){;
GUIDER.$pagename.hide();}
};
BOX.feed=function(){
Line 330 ⟶ 340:
API.full();
}else{
API.errors=true;
mw.hook("wikipage.content").add(BOX.flip);}
};
Line 335 ⟶ 346:
var i,req,$th,$thead,$tr;
BOX.factory($area);
if(BOX.$collapsed&&!HINT.$widget){
BOX.$collapsed.hide();}
if(BOX.$null){
BOX.$null.hide();}
if(BOX.$box){
if(BOX.$table){
Line 372 ⟶ 381:
$thead.append($tr);
BOX.$tbody=$("<tbody>");
BOX.$table.addClass("wikitable "+HINT.selector+"-table").attr({id:SignatureHINT.selector+"-table"})
.append($thead,BOX.$tbody).css({"clear":"both"});,
"overflow":"scroll"});
if(HINT.errors.length>1||HINT.nsn<0){
BOX.$table.addClass("sortable");}
Line 383 ⟶ 393:
API.Api=new mw.Api();}
API.Api.loadMessagesIfMissing(req).done(BOX.filler).fail(API.fault);}
GUIDER.fine(false);}
if(BOX.$pagename){
GUIDER.from(BOX.$pagename);}}
};
BOX.filler=function(){
Line 401 ⟶ 410:
if(s){
$tr=$("<tr>");
$tr.addClass(HINT.selector+"-"+e.type);
$td=$("<td>");
$e=$("<a>");
$td.css({"background-color":"#"+BOX.bgcErr});
$e.attr({href:"/wiki/Special:LintErrors/"+e.type,target:Signature+"SP",title:"Special:LintErrors/"+e.type})
$td.text(s);
.text(s);
$td.append($e).css({"background-color":"#"+BOX.bgcErr});
$tr.append($td);
$td=$("<td>");
Line 424 ⟶ 436:
}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(par.items[k]s);
$td.append($e);}}}
$tr.append($td);
Line 457 ⟶ 474:
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){
Line 465 ⟶ 524:
};
BOX.flat=function($area,alive){
ifBOX.first($area&&!HINT.$page){;
HINT.$page=$area;}
if(BOX.$box){
BOX.$box.hide();}
if(API.errors){
if(BOX.$collapsed&&!alive&&!EDIT.live){
BOX.$collapsed.hidefiring("?");}
}else{
BOX.fine();}
if(EDIT.live){
if(!alive){
BOX.flip();}
}else if(!API.errors&&!API.scream&&HINT.live&&GUIDER.live){
if(API.single&&GUIDER.$pagenamefine(true){;}
if(BOX.$null){
BOX.$null.hide();}
GUIDER.from(GUIDER.$pagename);
}else if(BOX.$null){
if(HINT.lazy){
BOX.$null.hide();
}else{
BOX.$null.show();}
}else if(!HINT.lazy&&HINT.launched&&HINT.$page){
face();
BOX.$null=$("<div>");
BOX.$null.attr({id:Signature+"-null"}).css({"background-color":"#"+BOX.bgcOk,
"clear":"both",
"color":"#"+BOX.fgc,
"float":(HINT.ltr?"right":"left"),
"font-size":"smaller",
"padding":"3px"}).text(Signature);
if(!GUIDER.live){
BOX.$null.attr({title:Signature+"@PerfektesChaos "+Version});}
BOX.focus(BOX.$null);}
}else if(BOX.$null){
BOX.$null.hide();}
};
BOX.flip=function($area){
ifBOX.first($area&&!HINT.$page){;
HINT.$page=$area;}
face();
BOX.flat($area,true);
if(!GUIDER.live){
if(BOX.$collapsed){
BOX.$collapsed.attr({disabled:false}).show();
}else{
BOX.$collapsed=$("<buttondiv>");
BOX.$collapsed.addClass(HINT.selector+"-collapsed").attr({id:SignatureHINT.selector+"-collapsed",role:"button"}).click(BOX.full).css({/*"clear":(HINT.ltr?"right":
"left"),*/
"displaypadding-left":"block2px",
"padding-right":"2px",
"float":(HINT.ltr?"right":
"padding-top":"2px",
"left"),
"pointer-events":"all"}).text(Signature);
"margin-bottom":"3px",
BOX.focus(BOX.$collapsed,true,true);}
"padding":"2px"}).text(Signature);
BOX.firing(Version,true);
if(!GUIDER.live){
BOX.$collapsed.attrcss({title"background-color":Version"#"+BOX.bgc});}
BOX.focus(BOX.$collapsed);}
BOX.$collapsed.css({"background-color":"#"+BOX.bgc,
"color":"#"+BOX.fgc});
if(EDIT.live&&!API.errors){
EDIT.fine();}
Line 525 ⟶ 560:
GUIDER.$pagename.hide();}
};
BOX.focus=function($apply,another,around){
var learn=(!BOX.$top),light,s,$e;
$apply.addClass("noprint");
if(learn){
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:SignatureHINT.selector+"-top"})
.css({"clear":"both",
"width":"100%"});
$e=$("<div>");
$e.css({"clear":"both"});
HINT.$pagemain.prependbefore(BOX.$top,$e);}
learn=true;}
$apply.addClass("noprint");
if(around){
BOX.$top.prepend($apply);
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;}
Line 546 ⟶ 613:
if(EDIT.live){
API.errors=false;
}else if(HINT.$widget){
BOX.$collapsed.hidefiring("?");}
if(API.errors){
BOX.$box.show();
}else{
BOX.$box.hide();}}
BOX.firing("...",false,"progress");
if(!API.errors){
BOX.$collapsed.attraddClass({disabled:true})HINT.css({selector+"background-colorprogress":"#"+BOX.bgcRun,);
"color":"#"+BOX.fgcRun});}
if(!GUIDER.live){
if(!API.single){
Line 564 ⟶ 630:
}else{
HINT.launch=true;
API.full(API.single,idRev);}
BOX.firing("?",false,"progress");}
}else{
}else if(HINT.$widget){
BOX.$collapsed.hide();}
BOX.firing("?",false,"progress");}
};
BOX.future=function(application){
Line 579 ⟶ 646:
"padding":"0.4em"}).html(PREGO.app.translation(HINT.texts.other));
BOX.$other=$("<div>");
BOX.$other.attraddClass({id:SignatureHINT.selector+"-future"}).cssattr({"clear"id:HINT.selector+"both-future",})
.css({"clear":"both",
"padding-bottom":"1em",
"padding-top":"1em"}).append($e);
Line 599 ⟶ 667:
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.selectorlayer){
EDIT.selector=EDIT.selTextbox;
}else if(!EDIT.selector){
switch(HINT.source){
case "wikitext":
Line 610 ⟶ 692:
break;}}
if(EDIT.selector){
if(EDIT.layer){
EDIT.$source=HINT.$page.find(EDIT.selector);
$div=HINT.$main;
if(!EDIT.$source.length){
}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;
};
Line 623 ⟶ 715:
if(EDIT.$source){
EDIT.listen=true;
EDIT.$source.focusin(EDIT.focus);}
BOX.fine();
BOX.$collapsed.css({"background-color":"#"+BOX.bgcOk});}
};
EDIT.fire=function(){
Line 636 ⟶ 728:
if(source){
EDIT.listen=false;
API.fire(source);}
}else{
BOX.$collapsed.hide();}
};
EDIT.focus=function(){
if(EDIT.listen){
BOX.firing(Version,true);
BOX.$collapsed.css({"background-color":"#"+BOX.bgc});
EDIT.listen=false;}
Line 684 ⟶ 775:
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){
Line 691 ⟶ 810:
$e.css({"clear":"both",
"margin-top":"8em"}).html(PREGO.app.translation(HINT.texts.howTo));
HINT.$pagecontent.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());
Line 704 ⟶ 823:
API.fire(s);
HINT.launched=true;}
GUIDER.$startText.css({"cursor":"progress"});
};
GUIDER.fired=function(){
Line 724 ⟶ 844:
if(BOX.$box){
BOX.$box.hide();}
GUIDER.fine(false);
if(BOX.$collapsed){
BOX.$collapsed.hide();}
if(BOX.$null){
BOX.$null.hide();}
if(GUIDER.$pagename){
GUIDER.$pagename.hide();}
};
GUIDER.foreign=function(){
Line 741 ⟶ 856:
};
GUIDER.form=function(){
var submit=mw.message("go").text(),$b=$("<span>"),$div=$("<div>"),$x=$("<span>"),$b;
$x.css({"color":"#FF0000",
"font-weight":"bolder"}).text("X");
GUIDER.$bstartText=$("<span>");
GUIDER.$startText.addClass("mw-ui-button mw-ui-progressive").click(GUIDER.fire).css({"color":"#FFFFFF"})
.text(submit);
GUIDER.$formText.append(GUIDER.$bstartText);
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"})
Line 758 ⟶ 880:
.click(GUIDER.flat).click(GUIDER.filled).css({"float":(HINT.ltr?"right":"left")});
GUIDER.$formPage.append($b);
GUIDER.$bstartPage=$("<span>");
GUIDER.$bstartPage.addClass("mw-ui-button mw-ui-progressive").click(GUIDER.find).css({"color":"#FFFFFF"})
.text(submit);
GUIDER.$formPage.append(GUIDER.$bstartPage);
mw.hook(PREGO.signature+".ready").add(GUIDER.finish);
};
GUIDER.from=function($at){
var $e;
if(API.single){
$e=$at.children();
if(!$e.length){
$e=$("<a>");
$e.attr({target:"_blank"});
$at.append($e);}
$e.attr({href:mw.util.getUrl(API.single)}).text(API.single);
$at.show();
}else{
$at.hide();}
};
GUIDER.furnish=function($area){
Line 783 ⟶ 892:
$e.text(Signature);
$v.prepend($e);
HINT.$pagecontent=$area;
HINT.$pagecontent.empty();
face();
$v=HINT.$body.find("#firstHeading,#section_0");
Line 800 ⟶ 909:
GUIDER.$desc.css({"font-size":"111%"}).text(" ");
$v.append($v,GUIDER.$desc);
HINT.$pagecontent.append($v);
GUIDER.$formText=$("<form>");
GUIDER.$textarea=$("<textarea>");
GUIDER.$textarea.addClass("mw-ui-input").attr({name:"wikitext"})
.css({"marginbackground-topcolor":"2emtransparent",
"margin-top":"2em",
"max-width":"100%",
"width":"100%"});
Line 823 ⟶ 933:
"max-width":"auto"}).keyup(GUIDER.figure).mouseup(GUIDER.figure);
GUIDER.$formPage.append(GUIDER.$rev);
HINT.$pagecontent.append(GUIDER.$formText,GUIDER.$formPage);
GUIDER.$pagename=$("<div>");
GUIDER.$pagename.attraddClass({id:Signature[HINT.selector+"-pagename"},HINT.selector+"-fine"]).cssattr({id:HINT.selector+"background-colorpagename":"#"+BOX.bgcOk,})
.css({"background-color":"#"+BOX.bgcOk,
"float":(HINT.ltr?"left":"right"),
"margin-bottom":"1em",
"padding":"4px"}).hide();,
"pointer-events":"all"}).hide();
HINT.$page.prepend(GUIDER.$pagename);
HINT.$content.before(GUIDER.$pagename);
HINT.$textarea=GUIDER.$textarea;
mw.loader.using(HINT.using,GUIDER.foreign);