Jump to content
Wikipedia The Free Encyclopedia

User:Datumizer/monobook.js

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Datumizer (talk | contribs) at 19:58, 2 September 2008. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision .Revision as of 19:58, 2 September 2008 by Datumizer (talk | contribs)
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump.
This code will be executed when previewing this page.
The accompanying .css page for this skin is at User:Datumizer/monobook.css.
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.
 alert(24)

 // MediaWiki JavaScript support functions

 varclientPC=navigator.userAgent.toLowerCase();// Get client info
 varis_gecko=/gecko/.test(clientPC)&&
 !/khtml|spoofer|netscape\/7\.0/.test(clientPC);
 varwebkit_match=clientPC.match(/applewebkit\/(\d+)/);
 if(webkit_match){
 varis_safari=clientPC.indexOf('applewebkit')!=-1&&
 clientPC.indexOf('spoofer')==-1;
 varis_safari_win=is_safari&&clientPC.indexOf('windows')!=-1;
 varwebkit_version=parseInt(webkit_match[1]);
 }
 varis_khtml=navigator.vendor=='KDE'||
 (document.childNodes&&!document.all&&!navigator.taintEnabled);
 // For accesskeys; note that FF3+ is included here!
 varis_ff2=/firefox\/[2-9]|minefield\/3/.test(clientPC);
 // These aren't used here, but some custom scripts rely on them
 varis_ff2_win=is_ff2&&clientPC.indexOf('windows')!=-1;
 varis_ff2_x11=is_ff2&&clientPC.indexOf('x11')!=-1;
 if(clientPC.indexOf('opera')!=-1){
 varis_opera=true;
 varis_opera_preseven=window.opera&&!document.childNodes;
 varis_opera_seven=window.opera&&document.childNodes;
 varis_opera_95=/opera\/(9.[5-9]|[1-9][0-9])/.test(clientPC);
 }

 // Global external objects used by this script.
 /*extern ta, stylepath, skin */

 // add any onload functions in this hook (please don't hard-code any events in the xhtml source)
 vardoneOnloadHook;

 if(!window.onloadFuncts){
 varonloadFuncts=[];
 }

 functionaddOnloadHook(hookFunct){
 // Allows add-on scripts to add onload functions
 if(!doneOnloadHook){
 onloadFuncts[onloadFuncts.length]=hookFunct;
 }else{
 hookFunct();// bug in MSIE script loading
 }
 }

 functionhookEvent(hookName,hookFunct){
 if(window.addEventListener){
 window.addEventListener(hookName,hookFunct,false);
 }elseif(window.attachEvent){
 window.attachEvent("on"+hookName,hookFunct);
 }
 }

 functionimportScript(page){
 returnimportScriptURI(wgScript+'?action=raw&ctype=text/javascript&title='+encodeURIComponent(page.replace(/ /g,'_')));
 }

 varloadedScripts={};// included-scripts tracker
 functionimportScriptURI(url){
 if(loadedScripts[url]){
 returnnull;
 }
 loadedScripts[url]=true;
 vars=document.createElement('script');
 s.setAttribute('src',url);
 s.setAttribute('type','text/javascript');
 document.getElementsByTagName('head')[0].appendChild(s);
 returns;
 }

 functionimportStylesheet(page){
 returnimportStylesheetURI(wgScript+'?action=raw&ctype=text/css&title='+encodeURIComponent(page.replace(/ /g,'_')));
 }

 functionimportStylesheetURI(url){
 returndocument.createStyleSheet?document.createStyleSheet(url):appendCSS('@import "'+url+'";');
 }

 functionappendCSS(text){
 vars=document.createElement('style');
 s.type='text/css';
 s.rel='stylesheet';
 if(s.styleSheet)s.styleSheet.cssText=text//IE
 elses.appendChild(document.createTextNode(text+''))//Safari sometimes borks on null
 document.getElementsByTagName('head')[0].appendChild(s);
 returns;
 }

 // special stylesheet links
 if(typeofstylepath!='undefined'&&typeofskin!='undefined'){
 if(is_opera_preseven){
 importStylesheetURI(stylepath+'/'+skin+'/Opera6Fixes.css');
 }elseif(is_opera_seven&&!is_opera_95){
 importStylesheetURI(stylepath+'/'+skin+'/Opera7Fixes.css');
 }elseif(is_khtml){
 importStylesheetURI(stylepath+'/'+skin+'/KHTMLFixes.css');
 }
 }

 if(wgBreakFrames){
 // Un-trap us from framesets
 if(window.top!=window){
 window.top.location=window.location;
 }
 }

 // for enhanced RecentChanges
 functiontoggleVisibility(_levelId,_otherId,_linkId){
 varthisLevel=document.getElementById(_levelId);
 varotherLevel=document.getElementById(_otherId);
 varlinkLevel=document.getElementById(_linkId);
 if(thisLevel.style.display=='none'){
 thisLevel.style.display='block';
 otherLevel.style.display='none';
 linkLevel.style.display='inline';
 }else{
 thisLevel.style.display='none';
 otherLevel.style.display='inline';
 linkLevel.style.display='none';
 }
 }

 functionshowTocToggle(){
 if(document.createTextNode){
 // Uses DOM calls to avoid document.write + XHTML issues

 varlinkHolder=document.getElementById('toctitle');
 if(!linkHolder){
 return;
 }

 varouterSpan=document.createElement('span');
 outerSpan.className='toctoggle';

 vartoggleLink=document.createElement('a');
 toggleLink.id='togglelink';
 toggleLink.className='internal';
 toggleLink.href='javascript:toggleToc()';
 toggleLink.appendChild(document.createTextNode(tocHideText));

 outerSpan.appendChild(document.createTextNode('['));
 outerSpan.appendChild(toggleLink);
 outerSpan.appendChild(document.createTextNode(']'));

 linkHolder.appendChild(document.createTextNode(' '));
 linkHolder.appendChild(outerSpan);

 varcookiePos=document.cookie.indexOf("hidetoc=");
 if(cookiePos>-1&&document.cookie.charAt(cookiePos+8)==1){
 toggleToc();
 }
 }
 }

 functionchangeText(el,newText){
 // Safari work around
 if(el.innerText){
 el.innerText=newText;
 }elseif(el.firstChild&&el.firstChild.nodeValue){
 el.firstChild.nodeValue=newText;
 }
 }

 functiontoggleToc(){
 vartoc=document.getElementById('toc').getElementsByTagName('ul')[0];
 vartoggleLink=document.getElementById('togglelink');

 if(toc&&toggleLink&&toc.style.display=='none'){
 changeText(toggleLink,tocHideText);
 toc.style.display='block';
 document.cookie="hidetoc=0";
 }else{
 changeText(toggleLink,tocShowText);
 toc.style.display='none';
 document.cookie="hidetoc=1";
 }
 }

 varmwEditButtons=[];
 varmwCustomEditButtons=[];// eg to add in MediaWiki:Common.js

 functionescapeQuotes(text){
 varre=newRegExp("'","g");
 text=text.replace(re,"\\'");
 re=newRegExp("\\n","g");
 text=text.replace(re,"\\n");
 returnescapeQuotesHTML(text);
 }

 functionescapeQuotesHTML(text){
 varre=newRegExp('&',"g");
 text=text.replace(re,"&");
 re=newRegExp('"',"g");
 text=text.replace(re,""");
 re=newRegExp('<',"g");
 text=text.replace(re,"&lt;");
 re=newRegExp('>',"g");
 text=text.replace(re,"&gt;");
 returntext;
 }


 /**
  * Set the accesskey prefix based on browser detection.
  */
 vartooltipAccessKeyPrefix='alt-';
 if(is_opera){
 tooltipAccessKeyPrefix='shift-esc-';
 }elseif(!is_safari_win&&is_safari&&webkit_version>526){
 tooltipAccessKeyPrefix='ctrl-alt-';
 }elseif(!is_safari_win&&(is_safari
 ||clientPC.indexOf('mac')!=-1
 ||clientPC.indexOf('konqueror')!=-1)){
 tooltipAccessKeyPrefix='ctrl-';
 }elseif(is_ff2){
 tooltipAccessKeyPrefix='alt-shift-';
 }
 vartooltipAccessKeyRegexp=/\[(ctrl-)?(alt-)?(shift-)?(esc-)?(.)\]$/;

 /**
  * Add the appropriate prefix to the accesskey shown in the tooltip.
  * If the nodeList parameter is given, only those nodes are updated;
  * otherwise, all the nodes that will probably have accesskeys by
  * default are updated.
  *
  * @param Array nodeList -- list of elements to update
  */
 functionupdateTooltipAccessKeys(nodeList){
 if(!nodeList){
 // skins without a "column-one" element don't seem to have links with accesskeys either
 varcolumnOne=document.getElementById("column-one");
 if(columnOne)
 updateTooltipAccessKeys(columnOne.getElementsByTagName("a"));
 // these are rare enough that no such optimization is needed
 updateTooltipAccessKeys(document.getElementsByTagName("input"));
 updateTooltipAccessKeys(document.getElementsByTagName("label"));
 return;
 }

 for(vari=0;i<nodeList.length;i++){
 varelement=nodeList[i];
 vartip=element.getAttribute("title");
 if(tip&&tooltipAccessKeyRegexp.exec(tip)){
 tip=tip.replace(tooltipAccessKeyRegexp,
 "["+tooltipAccessKeyPrefix+"5ドル]");
 element.setAttribute("title",tip);
 }
 }
 }

 /**
  * Add a link to one of the portlet menus on the page, including:
  *
  * p-cactions: Content actions (shown as tabs above the main content in Monobook)
  * p-personal: Personal tools (shown at the top right of the page in Monobook)
  * p-navigation: Navigation
  * p-tb: Toolbox
  *
  * This function exists for the convenience of custom JS authors. All
  * but the first three parameters are optional, though providing at
  * least an id and a tooltip is recommended.
  *
  * By default the new link will be added to the end of the list. To
  * add the link before a given existing item, pass the DOM node of
  * that item (easily obtained with document.getElementById()) as the
  * nextnode parameter; to add the link _after_ an existing item, pass
  * the node's nextSibling instead.
  *
  * @param String portlet -- id of the target portlet ("p-cactions", "p-personal", "p-navigation" or "p-tb")
  * @param String href -- link URL
  * @param String text -- link text (will be automatically lowercased by CSS for p-cactions in Monobook)
  * @param String id -- id of the new item, should be unique and preferably have the appropriate prefix ("ca-", "pt-", "n-" or "t-")
  * @param String tooltip -- text to show when hovering over the link, without accesskey suffix
  * @param String accesskey -- accesskey to activate this link (one character, try to avoid conflicts)
  * @param Node nextnode -- the DOM node before which the new item should be added, should be another item in the same list
  *
  * @return Node -- the DOM node of the new item (an LI element) or null
  */
 functionaddPortletLink(portlet,href,text,id,tooltip,accesskey,nextnode){
 varnode=document.getElementById(portlet);
 if(!node)returnnull;
 node=node.getElementsByTagName("ul")[0];
 if(!node)returnnull;

 varlink=document.createElement("a");
 link.appendChild(document.createTextNode(text));
 link.href=href;

 varitem=document.createElement("li");
 item.appendChild(link);
 if(id)item.id=id;

 if(accesskey){
 link.setAttribute("accesskey",accesskey);
 tooltip+=" ["+accesskey+"]";
 }
 if(tooltip){
 link.setAttribute("title",tooltip);
 }
 if(accesskey&&tooltip){
 updateTooltipAccessKeys(newArray(link));
 }

 if(nextnode&&nextnode.parentNode==node)
 node.insertBefore(item,nextnode);
 else
 node.appendChild(item);// IE compatibility (?)

 returnitem;
 }


 /**
  * Set up accesskeys/tooltips from the deprecated ta array. If doId
  * is specified, only set up for that id. Note that this function is
  * deprecated and will not be supported indefinitely -- use
  * updateTooltipAccessKey() instead.
  *
  * @param mixed doId string or null
  */
 functionakeytt(doId){
 // A lot of user scripts (and some of the code below) break if
 // ta isn't defined, so we make sure it is. Explictly using
 // window.ta avoids a "ta is not defined" error.
 if(!window.ta)window.ta=newArray;

 // Make a local, possibly restricted, copy to avoid clobbering
 // the original.
 varta;
 if(doId){
 ta=[doId];
 }else{
 ta=window.ta;
 }

 // Now deal with evil deprecated ta
 varwatchCheckboxExists=document.getElementById('wpWatchthis')?true:false;
 for(varidinta){
 varn=document.getElementById(id);
 if(n){
 vara=null;
 varak='';
 // Are we putting accesskey in it
 if(ta[id][0].length>0){
 // Is this object a object? If not assume it's the next child.

 if(n.nodeName.toLowerCase()=="a"){
 a=n;
 }else{
 a=n.childNodes[0];
 }
 // Don't add an accesskey for the watch tab if the watch
 // checkbox is also available.
 if(a&&((id!='ca-watch'&&id!='ca-unwatch')||!watchCheckboxExists)){
 a.accessKey=ta[id][0];
 ak=' ['+tooltipAccessKeyPrefix+ta[id][0]+']';
 }
 }else{
 // We don't care what type the object is when assigning tooltip
 a=n;
 ak='';
 }

 if(a){
 a.title=ta[id][1]+ak;
 }
 }
 }
 }

 varcheckboxes;
 varlastCheckbox;

 functionsetupCheckboxShiftClick(){
 checkboxes=[];
 lastCheckbox=null;
 varinputs=document.getElementsByTagName('input');
 addCheckboxClickHandlers(inputs);
 }

 functionaddCheckboxClickHandlers(inputs,start){
 if(!start)start=0;

 varfinish=start+250;
 if(finish>inputs.length)
 finish=inputs.length;

 for(vari=start;i<finish;i++){
 varcb=inputs[i];
 if(!cb.type||cb.type.toLowerCase()!='checkbox')
 continue;
 varend=checkboxes.length;
 checkboxes[end]=cb;
 cb.index=end;
 cb.onclick=checkboxClickHandler;
 }

 if(finish<inputs.length){
 setTimeout(function(){
 addCheckboxClickHandlers(inputs,finish);
 },200);
 }
 }

 functioncheckboxClickHandler(e){
 if(typeofe=='undefined'){
 e=window.event;
 }
 if(!e.shiftKey||lastCheckbox===null){
 lastCheckbox=this.index;
 returntrue;
 }
 varendState=this.checked;
 varstart,finish;
 if(this.index<lastCheckbox){
 start=this.index+1;
 finish=lastCheckbox;
 }else{
 start=lastCheckbox;
 finish=this.index-1;
 }
 for(vari=start;i<=finish;++i){
 checkboxes[i].checked=endState;
 }
 lastCheckbox=this.index;
 returntrue;
 }

 functiontoggle_element_activation(ida,idb){
 if(!document.getElementById){
 return;
 }
 document.getElementById(ida).disabled=true;
 document.getElementById(idb).disabled=false;
 }

 functiontoggle_element_check(ida,idb){
 if(!document.getElementById){
 return;
 }
 document.getElementById(ida).checked=true;
 document.getElementById(idb).checked=false;
 }

 /*
 	Written by Jonathan Snook, http://www.snook.ca/jonathan
 	Add-ons by Robert Nyman, http://www.robertnyman.com
 	Author says "The credit comment is all it takes, no license. Go crazy with it!:-)"
 	From http://www.robertnyman.com/2005/11/07/the-ultimate-getelementsbyclassname/
 */
 functiongetElementsByClassName(oElm,strTagName,oClassNames){
 vararrElements=(strTagName=="*"&&oElm.all)?oElm.all:oElm.getElementsByTagName(strTagName);
 vararrReturnElements=newArray();
 vararrRegExpClassNames=newArray();
 if(typeofoClassNames=="object"){
 for(vari=0;i<oClassNames.length;i++){
 arrRegExpClassNames[arrRegExpClassNames.length]=
 newRegExp("(^|\\s)"+oClassNames[i].replace(/\-/g,"\\-")+"(\\s|$)");
 }
 }
 else{
 arrRegExpClassNames[arrRegExpClassNames.length]=
 newRegExp("(^|\\s)"+oClassNames.replace(/\-/g,"\\-")+"(\\s|$)");
 }
 varoElement;
 varbMatchesAll;
 for(varj=0;j<arrElements.length;j++){
 oElement=arrElements[j];
 bMatchesAll=true;
 for(vark=0;k<arrRegExpClassNames.length;k++){
 if(!arrRegExpClassNames[k].test(oElement.className)){
 bMatchesAll=false;
 break;
 }
 }
 if(bMatchesAll){
 arrReturnElements[arrReturnElements.length]=oElement;
 }
 }
 return(arrReturnElements)
 }

 functionredirectToFragment(fragment){
 varmatch=navigator.userAgent.match(/AppleWebKit\/(\d+)/);
 if(match){
 varwebKitVersion=parseInt(match[1]);
 if(webKitVersion<420){
 // Released Safari w/ WebKit 418.9.1 messes up horribly
 // Nightlies of 420+ are ok
 return;
 }
 }
 if(is_gecko){
 // Mozilla needs to wait until after load, otherwise the window doesn't scroll
 addOnloadHook(function(){
 if(window.location.hash=="")
 window.location.hash=fragment;
 });
 }else{
 if(window.location.hash=="")
 window.location.hash=fragment;
 }
 }

 /*
  * Table sorting script based on one (c) 1997-2006 Stuart Langridge and Joost
  * de Valk:
  * http://www.joostdevalk.nl/code/sortable-table/
  * http://www.kryogenix.org/code/browser/sorttable/
  *
  * @todo don't break on colspans/rowspans (bug 8028)
  * @todo language-specific digit grouping/decimals (bug 8063)
  * @todo support all accepted date formats (bug 8226)
  */

 varts_image_path=stylepath+"/common/images/";
 varts_image_up="sort_up.gif";
 varts_image_down="sort_down.gif";
 varts_image_none="sort_none.gif";
 varts_europeandate=wgContentLanguage!="en";// The non-American-inclined can change to "true"
 varts_alternate_row_colors=true;
 varSORT_COLUMN_INDEX;

 functionsortables_init(){
 varidnum=0;
 // Find all tables with class sortable and make them sortable
 vartables=getElementsByClassName(document,"table","sortable");
 for(varti=0;ti<tables.length;ti++){
 if(!tables[ti].id){
 tables[ti].setAttribute('id','sortable_table_id_'+idnum);
 ++idnum;
 }
 ts_makeSortable(tables[ti]);
 }
 }

 functionts_makeSortable(table){
 varfirstRow;
 if(table.rows&&table.rows.length>0){
 if(table.tHead&&table.tHead.rows.length>0){
 firstRow=table.tHead.rows[table.tHead.rows.length-1];
 }else{
 firstRow=table.rows[0];
 }
 }
 if(!firstRow)return;

 // We have a first row: assume it's the header, and make its contents clickable links
 for(vari=0;i<firstRow.cells.length;i++){
 varcell=firstRow.cells[i];
 if((" "+cell.className+" ").indexOf(" unsortable ")==-1){
 cell.innerHTML+='&nbsp;&nbsp;<a href="#" class="sortheader" onclick="ts_resortTable(this);return false;"><span class="sortarrow"><img src="'+ts_image_path+ts_image_none+'" alt="&darr;"/></span></a>';
 }
 }
 if(ts_alternate_row_colors){
 ts_alternate(table);
 }
 }

 functionts_getInnerText(el){
 if(typeofel=="string")returnel;
 if(typeofel=="undefined"){returnel};
 if(el.textContent)returnel.textContent;// not needed but it is faster
 if(el.innerText)returnel.innerText;// IE doesn't have textContent
 varstr="";

 varcs=el.childNodes;
 varl=cs.length;
 for(vari=0;i<l;i++){
 switch(cs[i].nodeType){
 case1://ELEMENT_NODE
 str+=ts_getInnerText(cs[i]);
 break;
 case3://TEXT_NODE
 str+=cs[i].nodeValue;
 break;
 }
 }
 returnstr;
 }

 varcount=0
 functionts_resortTable(lnk){
 count=0
 // get the span
 varspan=lnk.getElementsByTagName('span')[0];

 vartd=lnk.parentNode;
 vartr=td.parentNode;
 varcolumn=td.cellIndex;

 vartable=tr.parentNode;
 while(table&&!(table.tagName&&table.tagName.toLowerCase()=='table'))
 table=table.parentNode;
 if(!table)return;

 // Work out a type for the column
 if(table.rows.length<=1)return;

 // Skip the first row if that's where the headings are
 varrowStart=(table.tHead&&table.tHead.rows.length>0?0:1);

 varitm="";
 for(vari=rowStart;i<table.rows.length;i++){
 if(table.rows[i].cells.length>column){
 itm=ts_getInnerText(table.rows[i].cells[column]);
 itm=itm.replace(/^[\s\xa0]+/,"").replace(/[\s\xa0]+$/,"");
 if(itm!="")break;
 }
 }

 // determine which sorting function to use
 // matches: D(D)-M(M)-YY(YY) or M(M)-D(D)-YY(YY)
 if(itm.match(/^\d{1,2}\/\d{1,2}\/(\d{2}|\d{4})$/))
 varsortfn=ts_sort_date_short;
 elseif(itm.match(/^\d{1,2}\.\d{1,2}\.(\d{2}|\d{4})$/))
 varsortfn=ts_sort_date_short;
 elseif(itm.match(/^\d{1,2}\-\d{1,2}\-(\d{2}|\d{4})$/))
 varsortfn=ts_sort_date_short;
 elseif(itm.match(/^\d{1,2}\s\d{1,2}\s(\d{2}|\d{4})$/))
 varsortfn=ts_sort_date_short;
 // matches: D(D)-MONTHABV-YY(YY) or MONTHABV-D(D)-YY(YY) or MONTHABV D(D), YY(YY)
 elseif(itm.match(/^([^\d\/\.\-\s]+\/\d{1,2}|\d{1,2}\/[^\d\/\.\-\s]+),?\/(\d{2}|\d{4})$/))
 varsortfn=ts_sort_date_long;
 elseif(itm.match(/^([^\d\/\.\-\s]+\.\d{1,2}|\d{1,2}\.[^\d\/\.\-\s]+),?\.(\d{2}|\d{4})$/))
 varsortfn=ts_sort_date_long;
 elseif(itm.match(/^([^\d\/\.\-\s]+\-\d{1,2}|\d{1,2}\-[^\d\/\.\-\s]+),?\-(\d{2}|\d{4})$/))
 varsortfn=ts_sort_date_long;
 elseif(itm.match(/^([^\d\/\.\-\s]+\s\d{1,2}|\d{1,2}\s[^\d\/\.\-\s]+),?\s(\d{2}|\d{4})$/))
 varsortfn=ts_sort_date_long;
 // pound dollar euro
 elseif(itm.match(/^[\u00a3$\u20ac]/))
 varsortfn=ts_sort_currency;
 // matches: nn.nnn or nn,nnn or nn.nnn% or nn,nnn% or nn.nnn,nnn% or nn,nnn.nnn%
 elseif(itm.match(/^[\d.,]+\%?$/))
 varsortfn=ts_sort_numeric;
 else
 varsortfn=ts_sort_caseinsensitive;

 varreverse=(span.getAttribute("sortdir")=='down');

 varnewRows=newArray();
 for(varj=rowStart;j<table.rows.length;j++){
 varrow=table.rows[j];
 varkeyText=ts_getInnerText(row.cells[column]);
 varoldIndex=(reverse?-j:j);

 newRows[newRows.length]=newArray(row,keyText,oldIndex);
 }

 newRows.sort(sortfn);

 vararrowHTML;
 if(reverse){
 arrowHTML='<img src="'+ts_image_path+ts_image_down+'" alt="&darr;"/>';
 newRows.reverse();
 span.setAttribute('sortdir','up');
 }else{
 arrowHTML='<img src="'+ts_image_path+ts_image_up+'" alt="&uarr;"/>';
 span.setAttribute('sortdir','down');
 }

 // We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones
 // don't do sortbottom rows
 for(vari=0;i<newRows.length;i++){
 if((" "+newRows[i][0].className+" ").indexOf(" sortbottom ")==-1)
 table.tBodies[0].appendChild(newRows[i][0]);
 }
 // do sortbottom rows only
 for(vari=0;i<newRows.length;i++){
 if((" "+newRows[i][0].className+" ").indexOf(" sortbottom ")!=-1)
 table.tBodies[0].appendChild(newRows[i][0]);
 }

 // Delete any other arrows there may be showing
 varspans=getElementsByClassName(tr,"span","sortarrow");
 for(vari=0;i<spans.length;i++){
 spans[i].innerHTML='<img src="'+ts_image_path+ts_image_none+'" alt="&darr;"/>';
 }
 span.innerHTML=arrowHTML;

 ts_alternate(table);
 alert(count)
 }

 functionts_dateToSortKey_short(date){
 // matches: D(D)-M(M)-YY(YY) or M(M)-D(D)-YY(YY)
 // y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX
 if(!date)return0;
 date=date.replace(/[\s\/\.]/g,'-');
 vardateParts=date.split('-');
 switch(dateParts.length){
 case(3):
 varyearLen=dateParts[2].toString().length;
 varfrst=parseInt(dateParts[0]);
 varscnd=parseInt(dateParts[1]);
 varyear=parseInt(dateParts[2]);
 if(yearLen==2)
 year+=year<50?2000:1900;
 if(frst<10)frst="0"+frst;
 if(scnd<10)scnd="0"+scnd;
 if(ts_europeandate)
 return"".concat(year,scnd,frst);
 else
 return"".concat(year,frst,scnd);
 break;
 case(2):
 varyearLen=dateParts[1].toString().length;
 varfrst=parseInt(dateParts[0]);
 varyear=parseInt(dateParts[1]);
 if(yearLen==2)
 year+=year<50?2000:1900;
 if(frst<10)frst="0"+frst;
 if(ts_europeandate)
 return"".concat(year,"00",frst);
 else
 return"".concat(year,frst,"00");
 break;
 case(1):
 varyearLen=dateParts[0].toString().length;
 varyear=parseInt(dateParts[0]);
 if(yearLen==2)
 year+=year<50?2000:1900;
 return"".concat(year,"00","00");
 break;
 }
 }

 functionts_dateToSortKey_long(date){
 // matches: D(D)-MONTHABV-YY(YY) or MONTHABV-D(D)-YY(YY) or MONTHABV D(D), YY(YY)
 // the following is valid only for the English language, and should ideally be set as a global variable in "common.js"
 varmonthStr="janfebmaraprmayjunjulaugsepoctnovdec";
 varmonthLen=3;
 varmonthNam=date.match(/[^\d\s\/\.\-]+/)[0].substr(0,monthLen).toLowerCase();
 varmonthNum=monthStr.indexOf(monthNam)/monthLen+1;
 date=date.replace(/,/g,'').replace(/[^\d\s\/\.\-]+/,monthNum);
 returnts_dateToSortKey_short(date);
 }

 functionts_parseFloat(num){
 if(!num)return0;
 num=parseFloat(num.replace(/,/g,""));
 return(isNaN(num)?0:num);
 }

 functionts_sort_date_short(a,b){
 count++
 varaa=ts_dateToSortKey_short(a[1]);
 varbb=ts_dateToSortKey_short(b[1]);
 return(aa<bb?-1:aa>bb?1:a[2]-b[2]);
 }

 functionts_sort_date_long(a,b){
 count++
 varaa=ts_dateToSortKey_long(a[1]);
 varbb=ts_dateToSortKey_long(b[1]);
 return(aa<bb?-1:aa>bb?1:a[2]-b[2]);
 }

 functionts_sort_currency(a,b){
 count++
 varaa=ts_parseFloat(a[1].replace(/[^0-9.]/g,''));
 varbb=ts_parseFloat(b[1].replace(/[^0-9.]/g,''));
 return(aa!=bb?aa-bb:a[2]-b[2]);
 }

 functionts_sort_numeric(a,b){
 count++
 varaa=ts_parseFloat(a[1]);
 varbb=ts_parseFloat(b[1]);
 return(aa!=bb?aa-bb:a[2]-b[2]);
 }

 functionts_sort_caseinsensitive(a,b){
 count++
 varaa=a[1].toLowerCase();
 varbb=b[1].toLowerCase();
 return(aa<bb?-1:aa>bb?1:a[2]-b[2]);
 }

 functionts_sort_default(a,b){
 return(a[1]<b[1]?-1:a[1]>b[1]?1:a[2]-b[2]);
 }

 functionts_alternate(table){
 // Take object table and get all it's tbodies.
 vartableBodies=table.getElementsByTagName("tbody");
 // Loop through these tbodies
 for(vari=0;i<tableBodies.length;i++){
 // Take the tbody, and get all it's rows
 vartableRows=tableBodies[i].getElementsByTagName("tr");
 // Loop through these rows
 // Start at 1 because we want to leave the heading row untouched
 for(varj=0;j<tableRows.length;j++){
 // Check if j is even, and apply classes for both possible results
 varoldClasses=tableRows[j].className.split(" ");
 varnewClassName="";
 for(vark=0;k<oldClasses.length;k++){
 if(oldClasses[k]!=""&&oldClasses[k]!="even"&&oldClasses[k]!="odd")
 newClassName+=oldClasses[k]+" ";
 }
 tableRows[j].className=newClassName+(j%2==0?"even":"odd");
 }
 }
 }

 /*
  * End of table sorting code
  */


 /**
  * Add a cute little box at the top of the screen to inform the user of
  * something, replacing any preexisting message.
  *
  * @param String -or- Dom Object message HTML to be put inside the right div
  * @param String className Used in adding a class; should be different for each
  * call to allow CSS/JS to hide different boxes. null = no class used.
  * @return Boolean True on success, false on failure
  */
 functionjsMsg(message,className){
 if(!document.getElementById){
 returnfalse;
 }
 // We special-case skin structures provided by the software. Skins that
 // choose to abandon or significantly modify our formatting can just define
 // an mw-js-message div to start with.
 varmessageDiv=document.getElementById('mw-js-message');
 if(!messageDiv){
 messageDiv=document.createElement('div');
 if(document.getElementById('column-content')
 &&document.getElementById('content')){
 // MonoBook, presumably
 document.getElementById('content').insertBefore(
 messageDiv,
 document.getElementById('content').firstChild
 );
 }elseif(document.getElementById('content')
 &&document.getElementById('article')){
 // Non-Monobook but still recognizable (old-style)
 document.getElementById('article').insertBefore(
 messageDiv,
 document.getElementById('article').firstChild
 );
 }else{
 returnfalse;
 }
 }

 messageDiv.setAttribute('id','mw-js-message');
 if(className){
 messageDiv.setAttribute('class','mw-js-message-'+className);
 }

 if(typeofmessage==='object'){
 while(messageDiv.hasChildNodes())// Remove old content
 messageDiv.removeChild(messageDiv.firstChild);
 messageDiv.appendChild(message);// Append new content
 }
 else{
 messageDiv.innerHTML=message;
 }
 returntrue;
 }

 /**
  * Inject a cute little progress spinner after the specified element
  *
  * @param element Element to inject after
  * @param id Identifier string (for use with removeSpinner(), below)
  */
 functioninjectSpinner(element,id){
 varspinner=document.createElement("img");
 spinner.id="mw-spinner-"+id;
 spinner.src=stylepath+"/common/images/spinner.gif";
 spinner.alt=spinner.title="...";
 if(element.nextSibling){
 element.parentNode.insertBefore(spinner,element.nextSibling);
 }else{
 element.parentNode.appendChild(spinner);
 }
 }

 /**
  * Remove a progress spinner added with injectSpinner()
  *
  * @param id Identifier string
  */
 functionremoveSpinner(id){
 varspinner=document.getElementById("mw-spinner-"+id);
 if(spinner){
 spinner.parentNode.removeChild(spinner);
 }
 }

 functionrunOnloadHook(){
 // don't run anything below this for non-dom browsers
 if(doneOnloadHook||!(document.getElementById&&document.getElementsByTagName)){
 return;
 }

 // set this before running any hooks, since any errors below
 // might cause the function to terminate prematurely
 doneOnloadHook=true;

 updateTooltipAccessKeys(null);
 akeytt(null);
 setupCheckboxShiftClick();
 sortables_init();

 // Run any added-on functions
 for(vari=0;i<onloadFuncts.length;i++){
 onloadFuncts[i]();
 }
 }

 /**
  * Add an event handler to an element
  *
  * @param Element element Element to add handler to
  * @param String attach Event to attach to
  * @param callable handler Event handler callback
  */
 functionaddHandler(element,attach,handler){
 if(window.addEventListener){
 element.addEventListener(attach,handler,false);
 }elseif(window.attachEvent){
 element.attachEvent('on'+attach,handler);
 }
 }

 /**
  * Add a click event handler to an element
  *
  * @param Element element Element to add handler to
  * @param callable handler Event handler callback
  */
 functionaddClickHandler(element,handler){
 addHandler(element,'click',handler);
 }
 //note: all skins should call runOnloadHook() at the end of html output,
 // so the below should be redundant. It's there just in case.
 hookEvent("load",runOnloadHook);

AltStyle によって変換されたページ (->オリジナル) /