User:PerfektesChaos/js/jsonDebug/r.js

/// User:PerfektesChaos/js/jsonDebug/r.js /// 2018-08-24 PerfektesChaos@de.wikipedia /// Fingerprint:#0#1A19FAF0# /// @license GPL [//www.mediawiki.org/w/COPYING](+GFDL,LGPL,CC-BY-SA) /// (function(mw,$){ "use strict"; var Version=1.2,Signature="jsonDebug",JSOND={site:"w:en",store:"User:PerfektesChaos/js/"+Signature,sel:"json-code-lint",src:"div,pre",using:null},REPOS={requests:false},UI={bad:{"background-color":"#F0F080","border":"#FF0000 1px solid", "color":"#FF0000","font-family":"monospace", "font-size":"80%","font-weight":"normal", "padding":"0.3em"},code:{"margin-top":"1em", "max-width":"95%","width":"95%"},css:{"background-color":"#D0D0D0","border":"#808080 1px solid", "clear":"both","margin-bottom":"1rem", "max-width":"95%","padding":"1em"},normal:10,$button:false},VALID={jsonlint:false,reLineNum:"line ([0-9]+)"},ZEBRA={codemirror:false}; JSOND.feed=function(ask){ var s; if(typeof ask==="string"){ s=ask.trim; if(s){ JSOND.source=s; if(JSOND.using){ mw.loader.using(JSOND.using,JSOND.feeder); }else{ JSOND.feeder;}}} }; JSOND.feeder=function{ $(JSOND.feeding); }; JSOND.feeding=function{ VALID.fire(JSOND.source); JSOND.flip; }; JSOND.fire=function{ JSOND.support=Signature+"-button"; mw.hook("wikipage.content").add(JSOND.fresh); }; JSOND.fired=function(event){ var $button,$json; event.stopPropagation; JSOND.flip; JSOND.source=false; if(JSOND.large){ if(UI.live){ JSOND.source=UI.$source.val; }else{ JSOND.source=UI.$source.text;} }else{ $button=$(event.target); $json=$button.next; $button.attr({disabled:true}); if($json.hasClass(JSOND.sel)&&$json.filter(JSOND.src)){ JSOND.source=$json.text;}} if(JSOND.source){ JSOND.source=JSOND.source.trim; VALID.fire(JSOND.source);} }; JSOND.first=function{ var env,pub,rls; JSOND.signature="ext.gadget."+Signature; if(mw.loader.getState(JSOND.signature)!=="ready"){ env=mw.config.get(["wgAction","wgPageContentModel"]); rls={}; rls[JSOND.signature]="ready"; mw.loader.state(rls); JSOND.large=(env.wgPageContentModel.toLowerCase.indexOf("json")>=0); switch(env.wgAction){ case "view": case "edit": case "submit": case "parsermigration-edit": if(JSOND.using){ mw.loader.using(JSOND.using,JSOND.fire); }else{ JSOND.fire;} break;} pub={doc:""+JSOND.site+":"+JSOND.store+"",feed:JSOND.feed,type:Signature,vsn:Version}; mw.hook(Signature+".ready").fire(pub);} }; JSOND.flip=function{ UI.$area.find("."+JSOND.support).attr({disabled:false}); }; JSOND.fresh=function($area){ var $e; UI.$area=$area; if(JSOND.large){ $e=UI.$area.find("#wpTextbox1"); UI.live=$e.length; if(UI.live){ UI.$source=$e; }else{ UI.$source=false; $e=UI.$area.children; if($e.length===1){ $e=$e.children; if($e.length===1&&$e.hasClass("mw-highlight")){ $e=$e.children; if($e.length===1&&!$e.children.length&&$e.filter("pre").length){ UI.$source=$e;}}}} if(UI.$source&&!JSOND.$button){ UI.$button=JSOND.furnish(0,$area.get(0)); }else if(JSOND.$button){ JSOND.$button.remove; JSOND.$button=false;} }else{ UI.$area.find("."+JSOND.support).remove; UI.$area.find("."+JSOND.sel).filter(JSOND.src).each(JSOND.furnish);} }; JSOND.furnish=function(at,area){ var $r=$(" ").addClass(JSOND.support).click(JSOND.fired).css({"margin-left":"0.5em", "margin-right":"0.5em"}).text(Signature); $(area).before($r); return $r; }; 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; }; UI.factory=function{ var ltr=($("html").attr("dir")!=="rtl"),$head=$(" "),$e; UI.$wrapper=$(" ").addClass(UI.signature); UI.$wrapper.css({"clear":"both","font-size":"1rem", "font-style":"normal","font-weight":"normal", "max-width":"100%","width":"100%"}); if(typeof UI.css==="object"&&UI.css){ UI.$wrapper.css(UI.css);} if(typeof JSOND.store==="string"&&JSOND.store){ $e=$("").attr({href:REPOS.foundation(JSOND.site,JSOND.store),target:Signature,title:"Tool info / doc"}); }else{ $e=$(" ");} $e.css({"font-family":"monospace","font-size":"1.6em", "font-weight":"bold"}).text(Signature); $head.append($e); $e=$(" ").css({"font-size":"smaller","margin-left":"2em", "margin-right":"2em"}).text(Version+""); $head.append($e).css({"float":(ltr?"left":"right")}); UI.$wrapper.append($head); $e=$(" ").click(UI.flip).css({"color":"#FF0000", "float":(ltr?"right": "left"),"font-weight":"bold", "padding":"0.2em"}).text("X"); UI.$wrapper.append($e); UI.$area.prepend(UI.$wrapper); $e=$(" ").css({"clear":"both"}); UI.$wrapper.append($e); UI.$warn=$(" ").addClass(Signature+"-warn").css({"clear":"both", "overflow":"auto"}).hide; if(typeof UI.bad==="object"&&UI.bad){ UI.$warn.css(UI.bad);} UI.$wrapper.append(UI.$warn); UI.$code=$(" ").addClass(Signature+"-code").attr({disabled:true}).css({"overflow":"auto"}) .hide; if(typeof UI.code==="object"&&UI.code){ UI.$code.css(UI.code);} UI.$wrapper.append(UI.$code); }; UI.fire=function(apply,alert){ var got,k,n; UI.signature=Signature+"-wrapper"; UI.$wrapper=UI.$area.find("."+UI.signature); if(!UI.$wrapper.length){ UI.factory;} if(!apply||!alert){ UI.$warn.hide; if(!apply){ UI.$code.hide;}} UI.$area.scrollTop(0); UI.$wrapper.show; if(apply){ if(alert){ UI.$warn.show.text(alert); if(typeof VALID.reLineNum==="string"){ VALID.reLineNum=new RegExp(VALID.reLineNum);} if(typeof VALID.reLineNum==="object"){ got=alert.match(VALID.reLineNum); if(got){ k=parseInt(got[1],10); if(k>1){ k--;}}}} n=apply.split("\n").length; if(n>UI.normal){ n=UI.normal;} UI.$code.attr("rows",n).show.val(apply); ZEBRA.fire(apply,k);} }; UI.flip=function{ UI.$wrapper.hide; JSOND.flip; }; VALID.fiat=function{ VALID.scream=false; try{ VALID.jsonlint.parse(VALID.source); }catch(e){ VALID.scream=e.message;} UI.fire(VALID.source,VALID.scream); }; VALID.fire=function(apply){ UI.fire; ZEBRA.first; VALID.source=apply; if(VALID.jsonlint){ VALID.fiat; }else if(VALID.jsonlint===false){ VALID.jsonlint=null; REPOS.fire(JSOND.site,JSOND.store+"/jsonlint.js",false,{action:"raw",ctype:"text/javascript",bcache:1,maxage:604800}); mw.hook(Signature+".jsonlint").add(VALID.furnish);} }; VALID.furnish=function(application){ if(application&&typeof application==="object"&&typeof application.parse==="function"){ VALID.jsonlint=application; VALID.fiat;} }; ZEBRA.config={autofocus:true,gutters:["CodeMirror-linenumbers"],lineNumbers:true,mode:"javascript",readOnly:true,tabSize:2,theme:Signature}; ZEBRA.fiat=function(apply){ if(typeof apply==="object"&&apply&&typeof apply.mode==="function"){ ZEBRA.codemirror.defineMode("javascript",apply.mode);} if(ZEBRA.editor){ ZEBRA.editor.toTextArea;} ZEBRA.editor=ZEBRA.codemirror.fromTextArea(UI.$code.get(0),ZEBRA.config); ZEBRA.editor.setSize(null,UI.$code.height); ZEBRA.editor.setValue(ZEBRA.source); if(ZEBRA.invalid){ ZEBRA.focus(ZEBRA.invalid);} }; ZEBRA.fire=function(apply,at){ ZEBRA.source=apply; ZEBRA.invalid=at||false; if(ZEBRA.codemirror){ ZEBRA.fiat; }else{ mw.loader.using(["ext.CodeMirror"],ZEBRA.furnish);} }; ZEBRA.first=function{ if(ZEBRA.codemirror===false){ ZEBRA.codemirror=null; mw.loader.load(["ext.CodeMirror"]); REPOS.fire(JSOND.site,JSOND.store+".css",false,{action:"raw",ctype:"text/css",bcache:1,maxage:604800}); REPOS.fire(JSOND.site,JSOND.store+"/codemirrorJavascript.js",false,{action:"raw",ctype:"text/javascript",bcache:1,maxage:604800});} }; ZEBRA.focus=function(at){ ZEBRA.editor.addLineClass(at,"background",Signature+"-line-error"); ZEBRA.editor.setCursor(at); }; ZEBRA.furnish=function{ if(!ZEBRA.codemirror&&typeof window.CodeMirror!=="undefined"&&window.CodeMirror){ ZEBRA.codemirror=window.CodeMirror; ZEBRA.editor=false;} if(ZEBRA.codemirror){ mw.hook(Signature+".cm-mode-js").add(ZEBRA.fiat);} }; JSOND.first; }(window.mediaWiki,window.jQuery)); /// EOF jsonDebug/r.js