Jump to content

User:Lady Aleena/bracketmatch.js

From Wikipedia, the free encyclopedia
This is the current revision of this page, as edited by Amorymeltzer (talk | contribs) at 15:50, 7 February 2021 (Remove legacy globals per phab:T72470 (via WP:JWB)). The present address (URL) is a permanent link to this version.
(diff) ← Previous revision | Latest revision (diff) | Newer revision → (diff)
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
// Modified from [[User:ais523/bracketmatch.js]] - Colour matching brackets in a copy of the edit box.
// for [[User:Lady_Aleena]]
// and then copied from [[User:Lady Aleena/bracketmatch.js]]
 
$(function(){
  if(mw.config.get('wgAction').toLowerCase() != "edit") return;
  var p = document.getElementById('permissions-errors') ?
    document.getElementById('viewsourcetext') :
    document.getElementById('wikiPreview')
  if(p) {
    div = document.createElement('div');
    div.setAttribute('id','bm_parseres');
    p.parentNode.insertBefore(div,p.nextSibling);
  }
  var b = document.getElementById('wpSave')
  if(b) {
    input = document.createElement('input');
    input.setAttribute('style','color:#006');
    input.setAttribute('type','button');
    input.setAttribute('value','Parse');
    input.addEventListener('click',bm_parsebrackets,false);
    b.parentNode.insertBefore(input,b);
  }
});
 
function bm_parsebrackets()
{
  var t=document.getElementById('wpTextbox1').value;
  var a=sajax_init_object();
  var p='action=expandtemplates&generatexml=1&format=json&callback=bm_callback&text='+encodeURIComponent(t);
  a.open('POST', mw.config.get('wgServer')+mw.config.get('wgScriptPath')+'/api.php');
  a.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  a.setRequestHeader("Content-length", p.length);
  a.setRequestHeader("Connection", "close");
  a.onreadystatechange=function(){bm_apirespond(a)};
  a.send(p);
}
 
function bm_apirespond(a)
{
  try
  {
    if(a.readyState==4)
      eval(a.responseText);
  }
  catch(e)
  {
    document.getElementById('bm_parseres').innerHTML=
      "Could not parse due to a server error. ";
  }
}
 
var colang;
 
function bm_hexdigit(n)
{
  var i=Math.floor(n);
  if(i<10) return i+'';
  if(i==10) return 'A';
  if(i==11) return 'B';
  if(i==12) return 'C';
  if(i==13) return 'D';
  if(i==14) return 'E';
  if(i==15) return 'F';
}
 
function bm_tohex(n)
{
  var i=Math.floor(n);
  return bm_hexdigit(i/16)+bm_hexdigit(i%16);
}
 
function bm_gencol(ang)
{
  var r=Math.sin(ang)+1;
  var g=Math.sin(ang+3.14159*2/3)+1;
  var b=Math.sin(ang-3.14159*2/3)+1;
  return bm_tohex(r*127.5)+bm_tohex(g*127.5)+bm_tohex(b*127.5);
}
 
function bm_callback(o)
{
  var subs={"tplarg":"{{{",
            "/tplarg":"}}}",
            "template":"{{",
            "/template":"}}",
            "part":"|",
            "ext":"&"+"lt;",
            "/attr":"&"+"gt;",
            "attr/":"&"+"gt;"};
  var h=o.parsetree["*"].split("<");
  var i=h.length;
  var r;
  var n;
  var sp=0;
  var st=new Array();
  var col;
  colang=0;
  while(--i)
  {
    col="";
    n=1;
    h[i]=h[i].split(">");
    h[i][0]=h[i][0].split(" ");
    r=subs[h[i][0][0]];
    if(r==undefined) r="";
    if(r=='}}}'||r=='}}')
    {
      st[sp]=bm_gencol(colang);
      col=st[sp];
      sp++;
      colang+=2.4; //golden angle in radians, approx
    }
    else if(r=='{{{'||r=='{{')
    {
      sp--;
      col=st[sp];
      n=2;
    }
    if(col!="")
      r="<font color='#"+col+"' id='bm_f"+col+n+"' onclick='bm_highlight(\""+col+"\",\"black\")'>"+r+"</font>";
    h[i][0]=r;
    h[i]=h[i].join("");
  }
  document.getElementById('bm_parseres').innerHTML=
    "<div style='border:1px solid blue'><tt>"+h.join("").split("\n").join("<br />")+
    "</tt></div><div></div>";
}
 
function bm_highlight(x,c)
{
  document.getElementById('bm_f'+x+'1').style.backgroundColor=c;
  document.getElementById('bm_f'+x+'2').style.backgroundColor=c;
  if(c=="black")
    window.setTimeout("bm_highlight('"+x+"','transparent')",3000);
}