MediaWiki:Common.js: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Psuchy (Diskussion | Beiträge) (http://www.mediawiki.org/wiki/Manual_talk:Collapsible_tables) |
|||
(3 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 68: | Zeile 68: | ||
"tagClose": "</ref>", | "tagClose": "</ref>", | ||
"sampleText": "Text"}; | "sampleText": "Text"}; | ||
+ | |||
+ | /**************************************************/ | ||
+ | |||
+ | |||
+ | |||
+ | // Search box for Mediawiki | ||
+ | // (c) 2006 [[User:Zocky]], released under GPL | ||
+ | //<pre><nowiki> | ||
+ | |||
+ | importStylesheetURI('http://en.wikipedia.org/w/index.php?title=User:Zocky/SearchBox.css&action=raw&ctype=text/css'); | ||
+ | |||
+ | var sr$t; | ||
+ | var sr$f; | ||
+ | var sr$s; | ||
+ | var sr$r; | ||
+ | var sr$w; | ||
+ | var sr$i; | ||
+ | var sr$re; | ||
+ | var sr$mc; | ||
+ | |||
+ | function $e(id) {return document.getElementById(id)} | ||
+ | |||
+ | function srBack() | ||
+ | { | ||
+ | if (sr$s.value=='') {sr$t.focus(); return } | ||
+ | |||
+ | if (sr$re.checked) { | ||
+ | var searchString = sr$s.value; | ||
+ | } else { | ||
+ | searchString=sr$s.value.replace(/([\[\]\{\}\|\.\*\?\(\)\$\^\\])/g,'\\$1'); | ||
+ | } | ||
+ | |||
+ | searchString="("+searchString+")(?![\\s\\S]*"+searchString+")"; | ||
+ | if (sr$mc.checked) | ||
+ | var re=new RegExp(searchString); | ||
+ | else | ||
+ | var re=new RegExp(searchString,"i"); | ||
+ | |||
+ | var res = re.exec (sr$t.value.substring(0,sr$t.selectionStart)); | ||
+ | if (!res) { | ||
+ | var res = re.exec (sr$t.value) | ||
+ | } | ||
+ | |||
+ | if (res) | ||
+ | { | ||
+ | sr$t.selectionStart=res.index; | ||
+ | sr$t.selectionEnd=res.index+res[1].length; | ||
+ | } | ||
+ | else sr$t.selectionStart=sr$t.selectionEnd; | ||
+ | |||
+ | srSync(); | ||
+ | } | ||
+ | |||
+ | function srNext() | ||
+ | { | ||
+ | if (sr$s.value=='') {sr$t.focus(); return } | ||
+ | |||
+ | if (sr$re.checked) { | ||
+ | var searchString = sr$s.value; | ||
+ | } else { | ||
+ | searchString=sr$s.value.replace(/([\[\]\{\}\|\.\*\?\(\)\$\^\\])/g,'\\$1'); | ||
+ | } | ||
+ | |||
+ | if (sr$mc.checked) | ||
+ | var re=new RegExp(searchString,"g"); | ||
+ | else | ||
+ | var re=new RegExp(searchString,"gi"); | ||
+ | |||
+ | re.lastIndex=sr$t.selectionEnd; | ||
+ | var res = re.exec (sr$t.value) | ||
+ | if (!res) { | ||
+ | re.lastIndex=0; | ||
+ | var res = re.exec (sr$t.value) | ||
+ | } | ||
+ | |||
+ | if (res) | ||
+ | { | ||
+ | sr$t.selectionStart=res.index; | ||
+ | sr$t.selectionEnd=res.index+res[0].length; | ||
+ | } | ||
+ | else sr$t.selectionStart=sr$t.selectionEnd; | ||
+ | srSync(); | ||
+ | } | ||
+ | |||
+ | function srReplace() | ||
+ | { | ||
+ | |||
+ | var sels=sr$t.selectionStart; | ||
+ | var sele=sr$t.selectionEnd; | ||
+ | var selr=sr$t.value.length-sele; | ||
+ | |||
+ | if (sr$s.value=='' || sels==sele) {sr$t.focus(); return } | ||
+ | |||
+ | if (sr$re.checked) { | ||
+ | var searchString = sr$s.value; | ||
+ | var replaceString = sr$r.value; | ||
+ | |||
+ | } else { | ||
+ | searchString=sr$s.value.replace(/([\[\]\{\}\|\.\*\?\(\)\$\^\\])/g,'\\$1'); | ||
+ | replaceString=sr$r.value.replace(/([\$\\])/g,'\\$1'); | ||
+ | } | ||
+ | |||
+ | if (sr$mc.checked) | ||
+ | var re=new RegExp(searchString,"g"); | ||
+ | else | ||
+ | var re=new RegExp(searchString,"gi"); | ||
+ | |||
+ | re.lastIndex=sels; | ||
+ | var res = re.exec (sr$t.value); | ||
+ | var $$=0; | ||
+ | if (res && res.index==sels && res[0].length==sele-sels) | ||
+ | { | ||
+ | if (sr$re.checked) { | ||
+ | replaceString=replaceString.replace(/\\\\/g,'&backslash;'); | ||
+ | var replaceBits=(" "+replaceString).split(/(?=\$\d)/); | ||
+ | replaceString=replaceBits[0].substring(1); | ||
+ | for (var i=1; i<replaceBits.length; i++) | ||
+ | { | ||
+ | $$=replaceBits[i][1]-'0'; | ||
+ | if ($$<res.length) | ||
+ | replaceString += res[$$] + replaceBits[i].substring(2) | ||
+ | else | ||
+ | replaceString += replaceBits[i]; | ||
+ | } | ||
+ | replaceString=replaceString.replace (/\\n/,"\n").replace (/&backslash;/g,"\\").replace | ||
+ | (/$/g,"\$") | ||
+ | |||
+ | } | ||
+ | sr$t.value= sr$t.value.substring(0,sels) + replaceString + sr$t.value.substring(sele); | ||
+ | } | ||
+ | |||
+ | sr$t.selectionStart=sels; | ||
+ | sr$t.selectionEnd=sr$t.value.length-selr; | ||
+ | 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.value.length-sele; | ||
+ | |||
+ | var reps; | ||
+ | |||
+ | if (sr$re.checked) { | ||
+ | var searchString = sr$s.value; | ||
+ | var replaceString = sr$r.value.replace(/\\\\/,'&backslash;').replace(/\\n/,'\n').replace(/&backslash;/,"\\"); | ||
+ | } 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$mc.checked) | ||
+ | var re=new RegExp(searchString,"g"); | ||
+ | else | ||
+ | var re=new RegExp(searchString,"gi"); | ||
+ | |||
+ | var replaceCounter=0; | ||
+ | |||
+ | var replaceFunc=function(){replaceCounter++;return replaceString}; | ||
+ | |||
+ | reps=reps.replace(re,replaceFunc); | ||
+ | |||
+ | 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.value.length-selr : sels; | ||
+ | window.status = replaceCounter+" ocurrences of " + searchString + " replaced."; | ||
+ | srSync(); | ||
+ | } | ||
+ | |||
+ | function srToggleCase() | ||
+ | { | ||
+ | var sels=sr$t.selectionStart; | ||
+ | var sele=sr$t.selectionEnd; | ||
+ | var selr=sr$t.value.length-sele; | ||
+ | var selt=sr$t.value.substring(sels,sele); | ||
+ | |||
+ | if (sele>sels) | ||
+ | { | ||
+ | if (selt==selt.toUpperCase()) | ||
+ | selt=selt.toLowerCase() | ||
+ | else if (selt==selt.toLowerCase() && sele-sels>1) | ||
+ | selt=selt.substring(0,1).toUpperCase()+selt.substring(1).toLowerCase() | ||
+ | else | ||
+ | selt=selt.toUpperCase(); | ||
+ | |||
+ | sr$t.value = sr$t.value.substring(0,sels) + selt + sr$t.value.substring(sele); | ||
+ | sr$t.selectionStart=sels; | ||
+ | sr$t.selectionEnd=sele>sels ? sr$t.value.length-selr : sels; | ||
+ | } | ||
+ | srSync(); | ||
+ | } | ||
+ | |||
+ | |||
+ | 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($e('wpTextbox1')) { | ||
+ | |||
+ | var srBoxCode ='<div id="srForm"><table id="srBox" cellpadding="0" cellspacing="2"><tr>' | ||
+ | +'<td></td>' | ||
+ | +'<td valign="middle">' | ||
+ | +'<input type="checkbox" id="srCase" onclick="sr$t.focus()" tabindex="10"/><small><span style="color:#000000;">match case</span</small> ' | ||
+ | +'<input type="checkbox" id="srRegexp" onclick="sr$t.focus()" tabindex="11"/><small><span style="color:#000000;">use regexp</span></small> ' | ||
+ | +'<a href="javascript:srBack()" onmouseover="sr$t.focus()" title="find previous match [alt-2]" accesskey="2"><</a> ' | ||
+ | +'<a href="javascript:srNext()" onmouseover="sr$t.focus()" title="find next match [alt-3]" accesskey="3">find ></a> ' | ||
+ | +'<a href="javascript:srReplace();srBack()" onmouseover="sr$t.focus()" title="replace and find previous match [alt-4]" accesskey="4"><</a> ' | ||
+ | +'<a href="javascript:srReplace()" onmouseover="sr$t.focus()" title="replace this match">replace</a> ' | ||
+ | +'<a href="javascript:srReplace();srNext()" onmouseover="sr$t.focus()" title="replace and find next match [alt-5]" accesskey="5">></a> ' | ||
+ | +'<a href="javascript:srReplaceall()" onmouseover="sr$t.focus()" title="replace all matches [alt-7]" accesskey="7">replace all</a> ' | ||
+ | +'</td>' | ||
+ | +'</tr><tr>' | ||
+ | +'<td valign="bottom"><small><span style="color:#000000;">search for:</span></small></td>' | ||
+ | +'<td valign="bottom"><input type="text" id="srSearch" accesskey="F" tabindex="8" onkeypress="event.which == 13 && srNext()"; value=""/></td>' | ||
+ | +'</tr><tr>' | ||
+ | +'<td valign="bottom"><small><span style="color:#000000;">replace with:</span></small></td>' | ||
+ | +'<td valign="bottom"><input type="text" id="srReplace" accesskey="G" tabindex="9" onkeypress="event.which == 13 && srNext()"; value=""/></td>' | ||
+ | +'</tr></table></div>' | ||
+ | |||
+ | var ep=$e('searchInput'); | ||
+ | if (ep) ep.accessKey='none'; | ||
+ | |||
+ | sr$t=document.editform.wpTextbox1; | ||
+ | sr$w=sr$t.style.width; | ||
+ | |||
+ | var sr=document.createElement('div'); | ||
+ | sr.innerHTML=srBoxCode; | ||
+ | |||
+ | var im=document.createElement('span'); | ||
+ | im.innerHTML='<a id="SearchIcon" href="javascript:srShowHide()"><img style="cursor: pointer;" title="Search/Replace" alt="Search/Replace" src="http://upload.wikimedia.org/wikipedia/en/1/12/Button_find.png" border="0" height="22" width="23"></a><a href="javascript:srToggleCase()"><img style="cursor: pointer;" title="Toggle case" alt="Toggle case" src="http://upload.wikimedia.org/wikipedia/en/1/12/Button_case.png" border="0" height="22" width="23"></a>'; | ||
+ | |||
+ | var ep=$e('toolbar'); | ||
+ | if (ep) | ||
+ | { | ||
+ | ep.appendChild(im) | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | var ep=$e('editform'); | ||
+ | ep.parentNode.insertBefore(im,ep); | ||
+ | } | ||
+ | |||
+ | sr$i=$e('SearchIcon'); | ||
+ | sr$i.accessKey="F"; | ||
+ | sr.firstChild.style.display='none'; | ||
+ | |||
+ | |||
+ | var ep=$e('editform'); | ||
+ | ep.parentNode.insertBefore(sr,ep); | ||
+ | |||
+ | sr$f=$e('srForm'); | ||
+ | sr$s=$e('srSearch'); | ||
+ | sr$r=$e('srReplace'); | ||
+ | sr$re=$e('srRegexp'); | ||
+ | sr$mc=$e('srCase'); | ||
+ | |||
+ | } | ||
+ | } | ||
+ | |||
+ | function srShowHide() | ||
+ | { | ||
+ | if (sr$f.style.display=='none') | ||
+ | { | ||
+ | sr$f.style.display='block'; | ||
+ | sr$i.accessKey="none"; | ||
+ | sr$t.style.width='auto'; | ||
+ | sr$s.focus(); | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | sr$f.style.display='none'; | ||
+ | sr$t.style.width=sr$w; | ||
+ | sr$i.accessKey="F"; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | addOnloadHook(srInit); | ||
+ | //</nowiki></pre> | ||
+ | |||
+ | /** Collapsible tables ********************************************************* | ||
+ | * | ||
+ | * Description: Allows tables to be collapsed, showing only the header. See | ||
+ | * http://www.mediawiki.org/wiki/Manual:Collapsible_tables. | ||
+ | * Maintainers: [[en:User:R. Koot]] | ||
+ | * | ||
+ | * aus: http://www.mediawiki.org/wiki/Manual:Collapsible_tables | ||
+ | */ | ||
+ | |||
+ | var autoCollapse = 2; | ||
+ | var collapseCaption = 'hide'; | ||
+ | var expandCaption = 'show'; | ||
+ | |||
+ | function collapseTable( tableIndex ) { | ||
+ | var Button = document.getElementById( 'collapseButton' + tableIndex ); | ||
+ | var Table = document.getElementById( 'collapsibleTable' + tableIndex ); | ||
+ | |||
+ | if ( !Table || !Button ) { | ||
+ | return false; | ||
+ | } | ||
+ | |||
+ | var Rows = Table.rows; | ||
+ | |||
+ | if ( Button.firstChild.data == collapseCaption ) { | ||
+ | for ( var i = 1; i < Rows.length; i++ ) { | ||
+ | Rows[i].style.display = 'none'; | ||
+ | } | ||
+ | Button.firstChild.data = expandCaption; | ||
+ | } else { | ||
+ | for ( var i = 1; i < Rows.length; i++ ) { | ||
+ | Rows[i].style.display = Rows[0].style.display; | ||
+ | } | ||
+ | Button.firstChild.data = collapseCaption; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | function createCollapseButtons() | ||
+ | { | ||
+ | var tableIndex = 0; | ||
+ | var NavigationBoxes = new Object(); | ||
+ | var Tables = getElementsByClassName(document, "table", "collapsible"); | ||
+ | |||
+ | for ( var i = 0; i < Tables.length; i++ ) { | ||
+ | /* only add button and increment count if there is a header row to work with */ | ||
+ | var HeaderRow = Tables[i].getElementsByTagName( "tr" )[0]; | ||
+ | if (!HeaderRow) continue; | ||
+ | var Header = HeaderRow.getElementsByTagName( "th" )[0]; | ||
+ | if (!Header) continue; | ||
+ | |||
+ | NavigationBoxes[ tableIndex ] = Tables[i]; | ||
+ | Tables[i].setAttribute( "id", "collapsibleTable" + tableIndex ); | ||
+ | |||
+ | var Button = document.createElement( "span" ); | ||
+ | var ButtonLink = document.createElement( "a" ); | ||
+ | var ButtonText = document.createTextNode( collapseCaption ); | ||
+ | |||
+ | Button.className = "collapseButton"; //Styles are declared in Common.css | ||
+ | |||
+ | ButtonLink.style.color = Header.style.color; | ||
+ | ButtonLink.setAttribute( "id", "collapseButton" + tableIndex ); | ||
+ | ButtonLink.setAttribute( "href", "javascript:collapseTable(" + tableIndex + ");" ); | ||
+ | ButtonLink.appendChild( ButtonText ); | ||
+ | |||
+ | Button.appendChild( document.createTextNode( "[" ) ); | ||
+ | Button.appendChild( ButtonLink ); | ||
+ | Button.appendChild( document.createTextNode( "]" ) ); | ||
+ | |||
+ | Header.insertBefore( Button, Header.childNodes[0] ); | ||
+ | tableIndex++; | ||
+ | } | ||
+ | |||
+ | var Tables = getElementsByClassName(document, "table", "collapsed"); | ||
+ | for ( var i = 0; i < Tables.length; i++ ) { | ||
+ | collapseTable( i ); | ||
+ | } | ||
+ | |||
+ | var Tables = getElementsByClassName(document, "table", "autocollapse"); | ||
+ | for ( var i = 0; i < Tables.length; i++ ) { | ||
+ | if ( i >= autoCollapse ) { | ||
+ | collapseTable( i ); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | addOnloadHook( createCollapseButtons ); | ||
+ | |||
+ | /** Test if an element has a certain class ************************************** | ||
+ | * | ||
+ | * Description: Uses regular expressions and caching for better performance. | ||
+ | * Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]] | ||
+ | */ | ||
+ | |||
+ | var hasClass = ( function() { | ||
+ | var reCache = {}; | ||
+ | return function( element, className ) { | ||
+ | return ( reCache[className] ? reCache[className] : ( reCache[className] = new RegExp( "(?:\\s|^)" + className + "(?:\\s|$)" ) ) ).test( element.className ); | ||
+ | }; | ||
+ | })(); |
Aktuelle Version vom 14. November 2010, 20:17 Uhr
//////////////////////////
//—‚ ‘„ “ōŌūŪ­
//////////////////////////
mwCustomEditButtons[mwCustomEditButtons.length] =
{"imageFile": "/rel_jap/w/skins/common/images/no.gif",
"speedTip": "",
"tagOpen": "",
"tagClose": "",
"sampleText": ""};
mwCustomEditButtons[mwCustomEditButtons.length] =
{"imageFile": "/rel_jap/w/skins/common/images/ndash.jpg",
"speedTip": "kurzer Bindestrich (n–dash)",
"tagOpen": "–",
"tagClose": "",
"sampleText": ""};
mwCustomEditButtons[mwCustomEditButtons.length] =
{"imageFile": "/rel_jap/w/skins/common/images/mdash.jpg",
"speedTip": "Text zwischen langen Bindestrichen (m—dash)",
"tagOpen": "— ",
"tagClose": " — ",
"sampleText": "Text"};
mwCustomEditButtons[mwCustomEditButtons.length] =
{"imageFile": "/rel_jap/w/skins/common/images/hyphens1_dt.jpg",
"speedTip": "dt. Anführungszeichen einfach",
"tagOpen": "‚",
"tagClose": "‘",
"sampleText": ""};
mwCustomEditButtons[mwCustomEditButtons.length] =
{"imageFile": "/rel_jap/w/skins/common/images/hyphens2_dt.jpg",
"speedTip": "dt. Anführungszeichen doppelt",
"tagOpen": "„",
"tagClose": "“",
"sampleText": ""};
mwCustomEditButtons[mwCustomEditButtons.length] =
{"imageFile": "/rel_jap/w/skins/common/images/oo.jpg",
"speedTip": "langes o, klein",
"tagOpen": "ō",
"tagClose": "",
"sampleText": ""};
mwCustomEditButtons[mwCustomEditButtons.length] =
{"imageFile": "/rel_jap/w/skins/common/images/oo_gr.jpg",
"speedTip": "langes O, gross",
"tagOpen": "Ō",
"tagClose": "",
"sampleText": ""};
mwCustomEditButtons[mwCustomEditButtons.length] =
{"imageFile": "/rel_jap/w/skins/common/images/uu.jpg",
"speedTip": "langes u, klein",
"tagOpen": "ū",
"tagClose": "",
"sampleText": ""};
mwCustomEditButtons[mwCustomEditButtons.length] =
{"imageFile": "/rel_jap/w/skins/common/images/uu_gr.jpg",
"speedTip": "langes U, gross",
"tagOpen": "Ū",
"tagClose": "",
"sampleText": ""};
mwCustomEditButtons[mwCustomEditButtons.length] =
{"imageFile": "/rel_jap/w/skins/common/images/nbsp.jpg",
"speedTip": "festes Leerzeichen (no breaking space)",
"tagOpen": " ",
"tagClose": "",
"sampleText": ""};
mwCustomEditButtons[mwCustomEditButtons.length] =
{"imageFile": "/rel_jap/w/skins/common/images/ref.jpg",
"speedTip": "Fussnoten",
"tagOpen": "<ref>",
"tagClose": "</ref>",
"sampleText": "Text"};
/**************************************************/
// Search box for Mediawiki
// (c) 2006 [[User:Zocky]], released under GPL
//<pre><nowiki>
importStylesheetURI('http://en.wikipedia.org/w/index.php?title=User:Zocky/SearchBox.css&action=raw&ctype=text/css');
var sr$t;
var sr$f;
var sr$s;
var sr$r;
var sr$w;
var sr$i;
var sr$re;
var sr$mc;
function $e(id) {return document.getElementById(id)}
function srBack()
{
if (sr$s.value=='') {sr$t.focus(); return }
if (sr$re.checked) {
var searchString = sr$s.value;
} else {
searchString=sr$s.value.replace(/([\[\]\{\}\|\.\*\?\(\)\$\^\\])/g,'\\$1');
}
searchString="("+searchString+")(?![\\s\\S]*"+searchString+")";
if (sr$mc.checked)
var re=new RegExp(searchString);
else
var re=new RegExp(searchString,"i");
var res = re.exec (sr$t.value.substring(0,sr$t.selectionStart));
if (!res) {
var res = re.exec (sr$t.value)
}
if (res)
{
sr$t.selectionStart=res.index;
sr$t.selectionEnd=res.index+res[1].length;
}
else sr$t.selectionStart=sr$t.selectionEnd;
srSync();
}
function srNext()
{
if (sr$s.value=='') {sr$t.focus(); return }
if (sr$re.checked) {
var searchString = sr$s.value;
} else {
searchString=sr$s.value.replace(/([\[\]\{\}\|\.\*\?\(\)\$\^\\])/g,'\\$1');
}
if (sr$mc.checked)
var re=new RegExp(searchString,"g");
else
var re=new RegExp(searchString,"gi");
re.lastIndex=sr$t.selectionEnd;
var res = re.exec (sr$t.value)
if (!res) {
re.lastIndex=0;
var res = re.exec (sr$t.value)
}
if (res)
{
sr$t.selectionStart=res.index;
sr$t.selectionEnd=res.index+res[0].length;
}
else sr$t.selectionStart=sr$t.selectionEnd;
srSync();
}
function srReplace()
{
var sels=sr$t.selectionStart;
var sele=sr$t.selectionEnd;
var selr=sr$t.value.length-sele;
if (sr$s.value=='' || sels==sele) {sr$t.focus(); return }
if (sr$re.checked) {
var searchString = sr$s.value;
var replaceString = sr$r.value;
} else {
searchString=sr$s.value.replace(/([\[\]\{\}\|\.\*\?\(\)\$\^\\])/g,'\\$1');
replaceString=sr$r.value.replace(/([\$\\])/g,'\\$1');
}
if (sr$mc.checked)
var re=new RegExp(searchString,"g");
else
var re=new RegExp(searchString,"gi");
re.lastIndex=sels;
var res = re.exec (sr$t.value);
var $$=0;
if (res && res.index==sels && res[0].length==sele-sels)
{
if (sr$re.checked) {
replaceString=replaceString.replace(/\\\\/g,'&backslash;');
var replaceBits=(" "+replaceString).split(/(?=\$\d)/);
replaceString=replaceBits[0].substring(1);
for (var i=1; i<replaceBits.length; i++)
{
$$=replaceBits[i][1]-'0';
if ($$<res.length)
replaceString += res[$$] + replaceBits[i].substring(2)
else
replaceString += replaceBits[i];
}
replaceString=replaceString.replace (/\\n/,"\n").replace (/&backslash;/g,"\\").replace
(/$/g,"\$")
}
sr$t.value= sr$t.value.substring(0,sels) + replaceString + sr$t.value.substring(sele);
}
sr$t.selectionStart=sels;
sr$t.selectionEnd=sr$t.value.length-selr;
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.value.length-sele;
var reps;
if (sr$re.checked) {
var searchString = sr$s.value;
var replaceString = sr$r.value.replace(/\\\\/,'&backslash;').replace(/\\n/,'\n').replace(/&backslash;/,"\\");
} 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$mc.checked)
var re=new RegExp(searchString,"g");
else
var re=new RegExp(searchString,"gi");
var replaceCounter=0;
var replaceFunc=function(){replaceCounter++;return replaceString};
reps=reps.replace(re,replaceFunc);
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.value.length-selr : sels;
window.status = replaceCounter+" ocurrences of " + searchString + " replaced.";
srSync();
}
function srToggleCase()
{
var sels=sr$t.selectionStart;
var sele=sr$t.selectionEnd;
var selr=sr$t.value.length-sele;
var selt=sr$t.value.substring(sels,sele);
if (sele>sels)
{
if (selt==selt.toUpperCase())
selt=selt.toLowerCase()
else if (selt==selt.toLowerCase() && sele-sels>1)
selt=selt.substring(0,1).toUpperCase()+selt.substring(1).toLowerCase()
else
selt=selt.toUpperCase();
sr$t.value = sr$t.value.substring(0,sels) + selt + sr$t.value.substring(sele);
sr$t.selectionStart=sels;
sr$t.selectionEnd=sele>sels ? sr$t.value.length-selr : sels;
}
srSync();
}
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($e('wpTextbox1')) {
var srBoxCode ='<div id="srForm"><table id="srBox" cellpadding="0" cellspacing="2"><tr>'
+'<td></td>'
+'<td valign="middle">'
+'<input type="checkbox" id="srCase" onclick="sr$t.focus()" tabindex="10"/><small><span style="color:#000000;">match case</span</small> '
+'<input type="checkbox" id="srRegexp" onclick="sr$t.focus()" tabindex="11"/><small><span style="color:#000000;">use regexp</span></small> '
+'<a href="javascript:srBack()" onmouseover="sr$t.focus()" title="find previous match [alt-2]" accesskey="2"><</a> '
+'<a href="javascript:srNext()" onmouseover="sr$t.focus()" title="find next match [alt-3]" accesskey="3">find ></a> '
+'<a href="javascript:srReplace();srBack()" onmouseover="sr$t.focus()" title="replace and find previous match [alt-4]" accesskey="4"><</a> '
+'<a href="javascript:srReplace()" onmouseover="sr$t.focus()" title="replace this match">replace</a> '
+'<a href="javascript:srReplace();srNext()" onmouseover="sr$t.focus()" title="replace and find next match [alt-5]" accesskey="5">></a> '
+'<a href="javascript:srReplaceall()" onmouseover="sr$t.focus()" title="replace all matches [alt-7]" accesskey="7">replace all</a> '
+'</td>'
+'</tr><tr>'
+'<td valign="bottom"><small><span style="color:#000000;">search for:</span></small></td>'
+'<td valign="bottom"><input type="text" id="srSearch" accesskey="F" tabindex="8" onkeypress="event.which == 13 && srNext()"; value=""/></td>'
+'</tr><tr>'
+'<td valign="bottom"><small><span style="color:#000000;">replace with:</span></small></td>'
+'<td valign="bottom"><input type="text" id="srReplace" accesskey="G" tabindex="9" onkeypress="event.which == 13 && srNext()"; value=""/></td>'
+'</tr></table></div>'
var ep=$e('searchInput');
if (ep) ep.accessKey='none';
sr$t=document.editform.wpTextbox1;
sr$w=sr$t.style.width;
var sr=document.createElement('div');
sr.innerHTML=srBoxCode;
var im=document.createElement('span');
im.innerHTML='<a id="SearchIcon" href="javascript:srShowHide()"><img style="cursor: pointer;" title="Search/Replace" alt="Search/Replace" src="http://upload.wikimedia.org/wikipedia/en/1/12/Button_find.png" border="0" height="22" width="23"></a><a href="javascript:srToggleCase()"><img style="cursor: pointer;" title="Toggle case" alt="Toggle case" src="http://upload.wikimedia.org/wikipedia/en/1/12/Button_case.png" border="0" height="22" width="23"></a>';
var ep=$e('toolbar');
if (ep)
{
ep.appendChild(im)
}
else
{
var ep=$e('editform');
ep.parentNode.insertBefore(im,ep);
}
sr$i=$e('SearchIcon');
sr$i.accessKey="F";
sr.firstChild.style.display='none';
var ep=$e('editform');
ep.parentNode.insertBefore(sr,ep);
sr$f=$e('srForm');
sr$s=$e('srSearch');
sr$r=$e('srReplace');
sr$re=$e('srRegexp');
sr$mc=$e('srCase');
}
}
function srShowHide()
{
if (sr$f.style.display=='none')
{
sr$f.style.display='block';
sr$i.accessKey="none";
sr$t.style.width='auto';
sr$s.focus();
}
else
{
sr$f.style.display='none';
sr$t.style.width=sr$w;
sr$i.accessKey="F";
}
}
addOnloadHook(srInit);
//</nowiki></pre>
/** Collapsible tables *********************************************************
*
* Description: Allows tables to be collapsed, showing only the header. See
* http://www.mediawiki.org/wiki/Manual:Collapsible_tables.
* Maintainers: [[en:User:R. Koot]]
*
* aus: http://www.mediawiki.org/wiki/Manual:Collapsible_tables
*/
var autoCollapse = 2;
var collapseCaption = 'hide';
var expandCaption = 'show';
function collapseTable( tableIndex ) {
var Button = document.getElementById( 'collapseButton' + tableIndex );
var Table = document.getElementById( 'collapsibleTable' + tableIndex );
if ( !Table || !Button ) {
return false;
}
var Rows = Table.rows;
if ( Button.firstChild.data == collapseCaption ) {
for ( var i = 1; i < Rows.length; i++ ) {
Rows[i].style.display = 'none';
}
Button.firstChild.data = expandCaption;
} else {
for ( var i = 1; i < Rows.length; i++ ) {
Rows[i].style.display = Rows[0].style.display;
}
Button.firstChild.data = collapseCaption;
}
}
function createCollapseButtons()
{
var tableIndex = 0;
var NavigationBoxes = new Object();
var Tables = getElementsByClassName(document, "table", "collapsible");
for ( var i = 0; i < Tables.length; i++ ) {
/* only add button and increment count if there is a header row to work with */
var HeaderRow = Tables[i].getElementsByTagName( "tr" )[0];
if (!HeaderRow) continue;
var Header = HeaderRow.getElementsByTagName( "th" )[0];
if (!Header) continue;
NavigationBoxes[ tableIndex ] = Tables[i];
Tables[i].setAttribute( "id", "collapsibleTable" + tableIndex );
var Button = document.createElement( "span" );
var ButtonLink = document.createElement( "a" );
var ButtonText = document.createTextNode( collapseCaption );
Button.className = "collapseButton"; //Styles are declared in Common.css
ButtonLink.style.color = Header.style.color;
ButtonLink.setAttribute( "id", "collapseButton" + tableIndex );
ButtonLink.setAttribute( "href", "javascript:collapseTable(" + tableIndex + ");" );
ButtonLink.appendChild( ButtonText );
Button.appendChild( document.createTextNode( "[" ) );
Button.appendChild( ButtonLink );
Button.appendChild( document.createTextNode( "]" ) );
Header.insertBefore( Button, Header.childNodes[0] );
tableIndex++;
}
var Tables = getElementsByClassName(document, "table", "collapsed");
for ( var i = 0; i < Tables.length; i++ ) {
collapseTable( i );
}
var Tables = getElementsByClassName(document, "table", "autocollapse");
for ( var i = 0; i < Tables.length; i++ ) {
if ( i >= autoCollapse ) {
collapseTable( i );
}
}
}
addOnloadHook( createCollapseButtons );
/** Test if an element has a certain class **************************************
*
* Description: Uses regular expressions and caching for better performance.
* Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]]
*/
var hasClass = ( function() {
var reCache = {};
return function( element, className ) {
return ( reCache[className] ? reCache[className] : ( reCache[className] = new RegExp( "(?:\\s|^)" + className + "(?:\\s|$)" ) ) ).test( element.className );
};
})();