Jump to content

User:Zocky/SearchBox.js

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Zocky (talk | contribs) at 23:52, 2 May 2006. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
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.
//<pre><nowiki>
var sr$t;
var sr$f;
var sr$s;
var sr$r;


function srBack()
{
  if (!sr$s.value) {sr$t.focus(); return }
  var sel;
  sr$t.focus();
  if (!sr$f.srRegexp.checked) {
    if (!sr$f.srCase.checked) {

        sel=sr$t.value.toUpperCase().lastIndexOf
           (sr$s.value.toUpperCase(),sr$t.selectionStart-1);
        if (sel==-1) sel=sr$t.value.toUpperCase().lastIndexOf
           (sr$s.value.toUpperCase());

    } else {
        sel=sr$t.value.lastIndexOf(sr$s.value,sr$t.selectionStart-1);
        if (sel==-1) sel=sr$t.value.lastIndexOf(sr$s.value);
    }

    if (sel>-1)
    { 
      sr$t.selectionStart=sel;
      sr$t.selectionEnd=sel+sr$s.value.length;
    }
    else sr$t.selectionEnd=sr$t.selectionStart;
  }
  srSync();
}

function srNext()
{
  if (!sr$s.value) {sr$t.focus(); return }
  var sel;
  if (!sr$f.srRegexp.checked) {
    if (!sr$f.srCase.checked) {

        sel=sr$t.value.toUpperCase().indexOf
           (sr$s.value.toUpperCase(),sr$t.selectionEnd);
        if (sel==-1) sel=sr$t.value.toUpperCase().indexOf
           (sr$s.value.toUpperCase());

    } else {
        sel=sr$t.value.indexOf(sr$s.value,sr$t.selectionEnd);
        if (sel==-1) sel=sr$t.value.indexOf(sr$s.value);
    }
    if (sel>-1)
    { 
      sr$t.selectionStart=sel;
      sr$t.selectionEnd=sel+sr$s.value.length;
    }
    else sr$t.selectionStart=sr$t.selectionEnd;
  }
  srSync();
}

function srReplace()
{
  if (!sr$s.value) {sr$t.focus(); return }

  var sels=sr$t.selectionStart;
  var sele=sr$t.selectionEnd;
  var found=sr$t.value.substring(sels,sele);

  if (!sr$f.srRegexp.checked) {
    if (found==sr$s.value || 
        !sr$f.srCase.checked &&
        found.toUpperCase()==sr$s.value.toUpperCase()
       )
    { 
      sr$t.value= sr$t.value.substring(0,sels)
                + sr$r.value
                + sr$t.value.substring(sele);
      sr$t.selectionStart=sels;
      sr$t.selectionEnd=sels+sr$r.value.length;
    }
  }
  srSync();
}

function srReplaceAll()
{
  if (!sr$s.value) {sr$t.focus(); return }

  var sels=sr$t.selectionStart;
  var sele=sr$t.selectionEnd;
  var selr=sr$t.length-sele;

  var reps;

  if (sr$f.srRegexp.checked) {
    var searchString = sr$s.value;
    var replaceString = sr$s.value;
  } else {
    searchString=sr$s.value.replace(/([\[\]\{\}\|\.\*\?\(\)\$\^\\])/g,'\\$1');
    replaceString=sr$r.value.replace(/([\$\\])/g,'\\$1');
  }

  if (sele>sels)
    reps=sr$t.value.substring(sels,sele);
  else
    reps=sr$t.value;
 
  if (sr$f.srCase.checked)
    var re=new RegExp(searchString,"g");
  else
    var re=new RegExp(searchString,"gi");

  reps=reps.replace(re,replaceString);

  if (sele>sels)
    sr$t.value = sr$t.value.substring(0,sels) + reps + sr$t.value.substring(sele);
  else
    sr$t.value = reps;

  sr$t.selectionStart=sels;
  sr$t.selectionEnd=sele>sels ? sr$t.length-selr : sels;
  sr$t.focus();
}

function srSync()
{
    var i;
    var allLines=0;
    var lineNo=0;
    var w=sr$t.cols-5;

    var dummy=sr$t.value.split("\n");
    for (i=0;i<dummy.length;i++){allLines+=Math.ceil(dummy[i].length/w)}

    var dummy=sr$t.value.substring(0,sr$t.selectionStart).split("\n");
    for (i=0;i<dummy.length;i++){lineNo+=Math.ceil(dummy[i].length/w)}

//    alert (w+" "+lineNo+"/"+allLines);

    sr$t.scrollTop=sr$t.scrollHeight*(lineNo-10)/allLines;
    sr$t.focus();
}


function srInit()
{

  if(document.getElementById('wpTextbox1')) {

var srBoxCode ='<form name="srForm"><table id="srBox" cellpadding="0" cellspacing="2">'
           +'<tr><td valign="bottom"><small>search for:</small><br/><input type="text" name="srSearch" '
           +'onkeypress="event.which == 13 && srNext()"; value=""/></td>'
           +'<td valign="bottom"><small>replace with:</small><br/><input type="text" name="srReplace" '
           +'onkeypress="event.which == 13 && srNext()"; value=""/></td>'
           +'<td valign="top"><input type="checkbox" name="srCase" onclick="sr$t.focus()";/><small>match case</small>'
           +'<input type="hidden" name="srRegexp"/><br/>'
           +'<a href="javascript:srBack()" onmouseover="sr$t.focus()">&lt;</a>&nbsp;'
           +'<a href="javascript:srNext()" onmouseover="sr$t.focus()">find&nbsp;&nbsp;&gt;</a>&nbsp;&nbsp;&nbsp;'
           +'<a href="javascript:srReplace();srBack()" onmouseover="sr$t.focus()">&lt;</a>&nbsp;'
           +'<a href="javascript:srReplace()" onmouseover="sr$t.focus()">replace</a>&nbsp;'
           +'<a href="javascript:srReplace();srNext()" onmouseover="sr$t.focus()">&gt;</a>&nbsp;&nbsp;&nbsp;'
           +'<a href="javascript:srReplaceAll()" onmouseover="sr$t.focus()">replace&nbsp;all</a>'
           +'</td></tr></table></form>'

    var sr=document.createElement('div');

    sr.innerHTML=srBoxCode;
    var ep=document.getElementById('toolbar');
    if (!ep) ep= document.getElementById('editform');
    ep.parentNode.insertBefore(sr,ep);

    sr$t=document.editform.wpTextbox1;
    sr$f=document.srForm;
    sr$s=document.srForm.srSearch;
    sr$r=document.srForm.srReplace;
  }
}


document.write('<link rel="stylesheet" type="text/css" href="'  
             + 'http://en.wikipedia.org/w/index.php?title=User:Zocky/SearchBox.css'
             + '&action=raw&ctype=text/css&dontcountme=s">');

addLoadEvent(srInit);
//</nowiki></pre>