MediaWiki:Common.js — различия между версиями — S.T.A.L.K.E.R. Inside Wiki

MediaWiki:Common.js — различия между версиями

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск
м (баг фикс)
м (откат)
 
Строка 253: Строка 253:
 
       // }
 
       // }
 
  }
 
  }
 
/*
 
* Table sorting script  by Joost de Valk, check it out at http://www.joostdevalk.nl/code/sortable-table/.
 
* Based on a script from http://www.kryogenix.org/code/browser/sorttable/.
 
* Distributed under the MIT license: http://www.kryogenix.org/code/browser/licence.html .
 
*
 
* Copyright (c) 1997-2006 Stuart Langridge, Joost de Valk.
 
*
 
* @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)
 
*/
 
 
var ts_image_path = "wiki/skins/common/images/";
 
var ts_image_up = "sort_up.gif";
 
var ts_image_down = "sort_down.gif";
 
var ts_image_none = "sort_none.gif";
 
var ts_europeandate = true; // wgContentLanguage != "en"; // The non-American-inclined can change to "true" Отладочная заглушка
 
var ts_alternate_row_colors = true;
 
var SORT_COLUMN_INDEX;
 
 
function sortables_init() {
 
var idnum = 0;
 
// Find all tables with class sortable and make them sortable
 
var tables = getElementsByClassName(document, "table", "sortable");
 
for (var ti = 0; ti < tables.length ; ti++) {
 
if (!tables[ti].id) {
 
tables[ti].setAttribute('id','sortable_table_id_'+idnum);
 
++idnum;
 
}
 
ts_makeSortable(tables[ti]);
 
}
 
}
 
 
function ts_makeSortable(table) {
 
var firstRow;
 
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 (var i = 0; i < firstRow.cells.length; i++) {
 
var cell = 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);
 
}
 
}
 
 
function ts_getInnerText(el) {
 
if (typeof el == "string") return el;
 
if (typeof el == "undefined") { return el };
 
if (el.innerText) return el.innerText; // Not needed but it is faster
 
var str = "";
 
 
var cs = el.childNodes;
 
var l = cs.length;
 
for (var i = 0; i < l; i++) {
 
switch (cs[i].nodeType) {
 
case 1: //ELEMENT_NODE
 
str += ts_getInnerText(cs[i]);
 
break;
 
case 3: //TEXT_NODE
 
str += cs[i].nodeValue;
 
break;
 
}
 
}
 
return str;
 
}
 
 
function ts_resortTable(lnk) {
 
// get the span
 
var span = lnk.getElementsByTagName('span')[0];
 
 
var td = lnk.parentNode;
 
var tr = td.parentNode;
 
var column = td.cellIndex;
 
 
var table = 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
 
var rowStart = (table.tHead && table.tHead.rows.length > 0 ? 0 : 1);
 
 
var itm = "";
 
for (var i = 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;
 
}
 
}
 
 
sortfn = ts_sort_caseinsensitive;
 
if (itm.match(/^\d\d[\/. -][a-zA-Z]{3}[\/. -]\d\d\d\d$/))
 
sortfn = ts_sort_date;
 
if (itm.match(/^\d\d[\/.-]\d\d[\/.-]\d\d\d\d$/))
 
sortfn = ts_sort_date;
 
if (itm.match(/^\d\d[\/.-]\d\d[\/.-]\d\d$/))
 
sortfn = ts_sort_date;
 
if (itm.match(/^[\u00a3$\u20ac]/)) // pound dollar euro
 
sortfn = ts_sort_currency;
 
if (itm.match(/^[\d.,]+\%?$/))
 
sortfn = ts_sort_numeric;
 
 
var reverse = (span.getAttribute("sortdir") == 'down');
 
 
var newRows = new Array();
 
for (var j = rowStart; j < table.rows.length; j++) {
 
var row = table.rows[j];
 
var keyText = ts_getInnerText(row.cells[column]);
 
var oldIndex = (reverse ? -j : j);
 
 
newRows[newRows.length] = new Array(row, keyText, oldIndex);
 
}
 
 
newRows.sort(sortfn);
 
 
var arrowHTML;
 
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 (var i = 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 (var i = 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
 
var spans = getElementsByClassName(tr, "span", "sortarrow");
 
for (var i = 0; i < spans.length; i++) {
 
spans[i].innerHTML = '<img src="'+ ts_image_path + ts_image_none + '" alt="&darr;"/>';
 
}
 
span.innerHTML = arrowHTML;
 
 
ts_alternate(table);
 
}
 
 
function ts_dateToSortKey(date) {
 
// y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX
 
if (date.length == 11) {
 
switch (date.substr(3,3).toLowerCase()) {
 
case "jan": var month = "01"; break;
 
case "feb": var month = "02"; break;
 
case "mar": var month = "03"; break;
 
case "apr": var month = "04"; break;
 
case "may": var month = "05"; break;
 
case "jun": var month = "06"; break;
 
case "jul": var month = "07"; break;
 
case "aug": var month = "08"; break;
 
case "sep": var month = "09"; break;
 
case "oct": var month = "10"; break;
 
case "nov": var month = "11"; break;
 
case "dec": var month = "12"; break;
 
// default: var month = "00";
 
}
 
return date.substr(7,4)+month+date.substr(0,2);
 
} else if (date.length == 10) {
 
if (ts_europeandate == false) {
 
return date.substr(6,4)+date.substr(0,2)+date.substr(3,2);
 
} else {
 
return date.substr(6,4)+date.substr(3,2)+date.substr(0,2);
 
}
 
} else if (date.length == 8) {
 
yr = date.substr(6,2);
 
if (parseInt(yr) < 50) {
 
yr = '20'+yr;
 
} else {
 
yr = '19'+yr;
 
}
 
if (ts_europeandate == true) {
 
return yr+date.substr(3,2)+date.substr(0,2);
 
} else {
 
return yr+date.substr(0,2)+date.substr(3,2);
 
}
 
}
 
return "00000000";
 
}
 
 
function ts_parseFloat(num) {
 
if (!num) return 0;
 
num = parseFloat(num.replace(/,/, ""));
 
return (isNaN(num) ? 0 : num);
 
}
 
 
function ts_sort_date(a,b) {
 
var aa = ts_dateToSortKey(a[1]);
 
var bb = ts_dateToSortKey(b[1]);
 
return (aa < bb ? -1 : aa > bb ? 1 : a[2] - b[2]);
 
}
 
 
function ts_sort_currency(a,b) {
 
var aa = ts_parseFloat(a[1].replace(/[^0-9.]/g,''));
 
var bb = ts_parseFloat(b[1].replace(/[^0-9.]/g,''));
 
return (aa != bb ? aa - bb : a[2] - b[2]);
 
}
 
 
function ts_sort_numeric(a,b) {
 
var aa = ts_parseFloat(a[1]);
 
var bb = ts_parseFloat(b[1]);
 
return (aa != bb ? aa - bb : a[2] - b[2]);
 
}
 
 
function ts_sort_caseinsensitive(a,b) {
 
var aa = a[1].toLowerCase();
 
var bb = b[1].toLowerCase();
 
return (aa < bb ? -1 : aa > bb ? 1 : a[2] - b[2]);
 
}
 
 
function ts_sort_default(a,b) {
 
return (a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : a[2] - b[2]);
 
}
 
 
function ts_alternate(table) {
 
// Take object table and get all it's tbodies.
 
var tableBodies = table.getElementsByTagName("tbody");
 
// Loop through these tbodies
 
for (var i = 0; i < tableBodies.length; i++) {
 
// Take the tbody, and get all it's rows
 
var tableRows = tableBodies[i].getElementsByTagName("tr");
 
// Loop through these rows
 
// Start at 1 because we want to leave the heading row untouched
 
for (var j = 0; j < tableRows.length; j++) {
 
// Check if j is even, and apply classes for both possible results
 
var oldClasses = tableRows[j].className.split(" ");
 
var newClassName = "";
 
for (var k = 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");
 
}
 
}
 
}
 
 
addOnloadHook(sortables_init);
 
/*
 
*************************************** Конец кода сортировки таблиц ****************************************
 
*/
 
  
  
 
/* </code> */
 
/* </code> */

Текущая версия на 15:29, 3 июня 2007

//Скрипт выполняющийся на каждой странице, доступен для изменения только сисопам. Если вы хотите внести изменения, пишите на странице обсуждения, либо на e-mail [[S.T.A.L.K.E.R._Inside_Wiki:Администраторы|тех. админа]].
/* <code javascript> */

function addLoadEvent( f ) { addOnloadHook( f ); }


 /******************************* Import module *************************************************************
  *
  *  Description: Includes a raw wiki page as javascript or CSS, 
  *               used for including user made modules.
  */
 
 function importScript(page, lang) {
     var url = wgScriptPath + '/index.php?title='
                            + encodeURIComponent(page.replace(' ','_'))
                            + '&action=raw&ctype=text/javascript&dontcountme=s';
     /*if (lang)*/ url = 'http://' + /*lang +*/ 'stalkerin.gameru.net/wiki' + url;
     var s = document.createElement('script');
     s.src = url;
     s.type='text/javascript';
     document.getElementsByTagName('head')[0].appendChild(s);
 }


 /********************************* Tooltips and access keys ***************************************************
*/
 ta = new Object();
 ta["t-print"] = new Array("","Версия без кнопок, пригодная для распечатки");
 ta["t-permalink"]           = new Array("","Ссылка на текущую версию этой статьи");

/********************************* hasClass from en-wiki ******************************************************
*/

 var hasClass = (function () {
     var reCache = {};
     return function (element, className) {
         return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
     };
 })();



 /*************************************** Collapsible tables *********************************************************
  *
  *  Description: Allows tables to be collapsed, showing only the header. See
  *               [[Wikipedia:NavFrame]].
  *  Maintainers: [[User:R. Koot]]
  */
 
 var autoCollapse = 2;
 var collapseCaption = "скрыть";
 var expandCaption = "показать";
 
 function collapseTable( tableIndex )
 {
     var Button = document.getElementById( "collapseButton" + tableIndex );
     var Table = document.getElementById( "collapsibleTable" + tableIndex );
 
     if ( !Table || !Button ) {
         return false;
     }
 
     var Rows = Table.getElementsByTagName( "tr" ); 
 
     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 = document.getElementsByTagName( "table" );
 
     for ( var i = 0; i < Tables.length; i++ ) {
         if ( hasClass( Tables[i], "collapsible" ) ) {
             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.style.styleFloat = "right";
             Button.style.cssFloat = "right";
             Button.style.fontWeight = "normal";
             Button.style.textAlign = "right";
             Button.style.width = "6em";
 
             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( "]" ) );
 
             var Header = Tables[i].getElementsByTagName( "tr" )[0].getElementsByTagName( "th" )[0];
             /* only add button and increment count if there is a header row to work with */
             if (Header) {
                 Header.insertBefore( Button, Header.childNodes[0] );
                 tableIndex++;
             }
         }
     }
 
     for ( var i = 0;  i < tableIndex; i++ ) {
         if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], "autocollapse" ) ) ) {
             collapseTable( i );
         }
     }
 }
 
 addOnloadHook( createCollapseButtons );

 /** Dynamic Navigation Bars (experimental) *************************************
  *
  *  Description: See [[Wikipedia:NavFrame]].
  *  Maintainers: UNMAINTAINED
  */
 
  // set up the words in your language
  var NavigationBarHide = '[' + collapseCaption + ']';
  var NavigationBarShow = '[' + expandCaption + ']';
  
  // set up max count of Navigation Bars on page,
  // if there are more, all will be hidden
  // NavigationBarShowDefault = 0; // all bars will be hidden
  // NavigationBarShowDefault = 1; // on pages with more than 1 bar all bars will be hidden
  var NavigationBarShowDefault = autoCollapse;
  
  
  // shows and hides content and picture (if available) of navigation bars
  // Parameters:
  //     indexNavigationBar: the index of navigation bar to be toggled
  function toggleNavigationBar(indexNavigationBar)
  {
     var NavToggle = document.getElementById("NavToggle" + indexNavigationBar);
     var NavFrame = document.getElementById("NavFrame" + indexNavigationBar);
  
     if (!NavFrame || !NavToggle) {
         return false;
     }
  
     // if shown now
     if (NavToggle.firstChild.data == NavigationBarHide) {
         for (
                 var NavChild = NavFrame.firstChild;
                 NavChild != null;
                 NavChild = NavChild.nextSibling
             ) {
             if ( hasClass( NavChild, 'NavPic' ) ) {
                 NavChild.style.display = 'none';
             }
             if ( hasClass( NavChild, 'NavContent') ) {
                 NavChild.style.display = 'none';
             }
         }
     NavToggle.firstChild.data = NavigationBarShow;
  
     // if hidden now
     } else if (NavToggle.firstChild.data == NavigationBarShow) {
         for (
                 var NavChild = NavFrame.firstChild;
                 NavChild != null;
                 NavChild = NavChild.nextSibling
             ) {
             if (hasClass(NavChild, 'NavPic')) {
                 NavChild.style.display = 'block';
             }
             if (hasClass(NavChild, 'NavContent')) {
                 NavChild.style.display = 'block';
             }
         }
     NavToggle.firstChild.data = NavigationBarHide;
     }
  }
  
  // adds show/hide-button to navigation bars
  function createNavigationBarToggleButton()
  {
     var indexNavigationBar = 0;
     // iterate over all < div >-elements 
     var divs = document.getElementsByTagName("div");
     for(
             var i=0; 
             NavFrame = divs[i]; 
             i++
         ) {
         // if found a navigation bar
         if (hasClass(NavFrame, "NavFrame")) {
  
             indexNavigationBar++;
             var NavToggle = document.createElement("a");
             NavToggle.className = 'NavToggle';
             NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
             NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');
             
             var NavToggleText = document.createTextNode(NavigationBarHide);
             NavToggle.appendChild(NavToggleText);
             // Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked)
             for(
               var j=0; 
               j < NavFrame.childNodes.length; 
               j++
             ) {
               if (hasClass(NavFrame.childNodes[j], "NavHead")) {
                 NavFrame.childNodes[j].appendChild(NavToggle);
               }
             }
             NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
         }
     }
     // if more Navigation Bars found than Default: hide all
     if (NavigationBarShowDefault < indexNavigationBar) {
         for(
                 var i=1; 
                 i<=indexNavigationBar; 
                 i++
         ) {
             toggleNavigationBar(i);
         }
     }
   
  }
  
  addOnloadHook( createNavigationBarToggleButton );




 /************************************ Другое   *****************************************
 */
 window.przyciskiOpisDone = false;
 var auto_comment = 0;

 /************************ подгрузка файла со скриптами для редактирования  *****************************************
 */
 if (document.URL.indexOf("action=edit") > 0 || document.URL.indexOf("action=submit") > 0)
 {
       // if (wgCanonicalNamespace != "Special")
       // {
                document.write('<script type="text/javascript" src="/wiki/index.php?title=MediaWiki:Onlyifediting.js&action=raw&ctype=text/javascript&dontcountme=s"></script>');
       // }
 }


/* </code> */
Другие места
LANGUAGE