MediaWiki:Common.js

Материал из Игра-Говно точка com

(Различия между версиями)
Перейти к: навигация, поиск
м (Новая страница: «- Any JavaScript here will be loaded for all users on every page load.: // If the page name (wgPageName) contains "MediaWiki" and we're in normal view // mode, a…»)
м
 
(6 промежуточных версий не показаны.)
Строка 1: Строка 1:
-
/* Any JavaScript here will be loaded for all users on every page load. */
+
//Collapsiblе: [[ВП:СБ]]
-
 
+
-
// If the page name (wgPageName) contains "MediaWiki" and we're in normal view
+
var NavigationBarShowDefault = 2
-
// mode, add "mainpage" class to the body element
+
var NavigationBarHide = '[скрыть]'
-
if ( /^MediaWiki(\/.+)?$/.test( wgPageName ) && wgAction == 'view' ) {
+
var NavigationBarShow = '[показать]'
-
$(function() {
+
-
document.body.className += ' mainpage';
+
var hasClass = (function (){
-
});
+
var reCache = {}
 +
return function (element, className){
 +
  return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className)
 +
  }
 +
})()
 +
 +
function collapsibleTables(){
 +
var Table, HRow,  HCell, btn, a, tblIdx = 0, colTables = []
 +
var allTables = document.getElementsByTagName('table')
 +
for (var i=0; Table = allTables[i]; i++){
 +
  if (!hasClass(Table, 'collapsible')) continue
 +
  if (!(HRow=Table.rows[0])) continue
 +
  if (!(HCell=HRow.getElementsByTagName('th')[0])) continue
 +
  Table.id = 'collapsibleTable' + tblIdx
 +
  btn = document.createElement('span')
 +
  btn.style.cssText = 'float:right; font-weight:normal; font-size:smaller'
 +
  a = document.createElement('a')
 +
  a.id = 'collapseButton' + tblIdx
 +
  a.href = 'javascript:collapseTable(' + tblIdx + ');'
 +
  a.style.color = HCell.style.color
 +
  a.appendChild(document.createTextNode(NavigationBarHide))
 +
  btn.appendChild(a)
 +
  HCell.insertBefore(btn, HCell.childNodes[0])
 +
  colTables[tblIdx++] = Table
 +
}
 +
for (var i=0; i < tblIdx; i++)
 +
  if ((tblIdx > NavigationBarShowDefault && hasClass(colTables[i], 'autocollapse')) || hasClass(colTables[i], 'collapsed'))
 +
    collapseTable(i)
}
}
-
 
+
-
// switches for scripts
+
function collapseTable (idx){
-
// TODO: migrate to JSConfig
+
var Table = document.getElementById('collapsibleTable' + idx)
-
// var load_extratabs = true;
+
var btn = document.getElementById('collapseButton' + idx)
-
var load_edittools = true;
+
if (!Table || !btn) return false
-
 
+
var Rows = Table.rows
-
// extra drop down menu on editing for adding special characters
+
var isShown = (btn.firstChild.data == NavigationBarHide)
-
importScript( 'MediaWiki:Edittools.js' );
+
btn.firstChild.data = isShown ?  NavigationBarShow : NavigationBarHide
-
 
+
var disp = isShown ? 'none' : Rows[0].style.display
-
// Editpage scripts
+
for (var i=1; i < Rows.length; i++)
-
if( wgAction == 'edit' || wgAction == 'submit' ) {
+
    Rows[i].style.display = disp
-
importScript( 'MediaWiki:Editpage.js' );
+
}
}
-
 
+
   
-
/* End of extra pages */
+
function collapsibleDivs(){
-
 
+
  var navIdx = 0, colNavs = [], i, NavFrame
-
/* Test if an element has a certain class **************************************
+
  var divs = document.getElementById('content').getElementsByTagName('div')
-
  *
+
for (i=0; NavFrame = divs[i]; i++) {
-
* From English Wikipedia, 2008-09-15
+
  if (!hasClass(NavFrame, 'NavFrame')) continue
-
  *
+
  NavFrame.id = 'NavFrame' + navIdx
-
* Description: Uses regular expressions and caching for better performance.
+
  var a = document.createElement('a')
-
* Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]]
+
  a.className = 'NavToggle'
-
  */
+
  a.id = 'NavToggle' + navIdx
-
var hasClass = (function() {
+
  a.href = 'javascript:collapseDiv(' + navIdx + ');'
-
var reCache = {};
+
  a.appendChild(document.createTextNode(NavigationBarHide))
-
return function( element, className ) {
+
  for (var j=0; j < NavFrame.childNodes.length; j++)
-
return ( reCache[className] ? reCache[className] : ( reCache[className] = new RegExp( "(?:\\s|^)" + className + "(?:\\s|$)" ) ) ).test( element.className );
+
    if (hasClass(NavFrame.childNodes[j], 'NavHead'))
-
};
+
      NavFrame.childNodes[j].appendChild(a)
-
})();
+
  colNavs[navIdx++] = NavFrame
-
 
+
}
-
mw.loader.load( 'http://www.mediawiki.org/w/index.php?title=MediaWiki:JQuery-makeCollapsible.js&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400' );
+
for (i=0; i < navIdx; i++)
-
 
+
  if ((navIdx > NavigationBarShowDefault && !hasClass(colNavs[i], 'expanded')) || hasClass(colNavs[i], 'collapsed'))
-
/** Collapsible tables *********************************************************
+
    collapseDiv(i)
-
*
+
-
* From English Wikipedia, 2008-09-15
+
-
* @deprecated: Do not use this in new constructions, use class="mw-collapsible" instead
+
-
*
+
-
*  Description: Allows tables to be collapsed, showing only the header.
+
-
*              See [[Wikipedia:NavFrame]].
+
-
*  Maintainers: [[User:R. Koot]]
+
-
*/
+
-
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(){
+
function collapseDiv(idx) {
-
var tableIndex = 0;
+
var div = document.getElementById('NavFrame' + idx)
-
var NavigationBoxes = new Object();
+
var btn = document.getElementById('NavToggle' + idx)
-
var Tables = document.getElementsByTagName( 'table' );
+
if (!div || !btn) return false
-
 
+
var isShown = (btn.firstChild.data == NavigationBarHide)
-
for ( var i = 0; i < Tables.length; i++ ) {
+
btn.firstChild.data = isShown ? NavigationBarShow : NavigationBarHide
-
if ( hasClass( Tables[i], 'collapsible' ) ) {
+
var disp = isShown ? 'none' : 'block'
-
/* only add button and increment count if there is a header row to work with */
+
for (var child = div.firstChildchild != null; child = child.nextSibling)
-
var HeaderRow = Tables[i].getElementsByTagName( 'tr' )[0];
+
  if (hasClass(child, 'NavPic') || hasClass(child, 'NavContent'))
-
if( !HeaderRow ) {
+
      child.style.display = disp
-
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.style.styleFloat = 'right';
+
-
Button.style.cssFloat = 'right';
+
-
Button.style.fontWeight = 'normal';
+
-
Button.style.textAlign = 'right';
+
-
Button.style.width = '6em';
+
-
 
+
-
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++;
+
-
}
+
-
    }
+
-
 
+
-
for ( var i = 0i < tableIndex; i++ ) {
+
-
if ( hasClass( NavigationBoxes[i], 'collapsed' ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], 'autocollapse' ) ) ) {
+
-
collapseTable( i );
+
-
}
+
-
}
+
}
}
-
 
-
addOnloadHook( createCollapseButtons );
 
-
 
-
/** Dynamic Navigation Bars (experimental) *************************************
 
-
*
 
-
* From English Wikipedia, 2008-09-15
 
-
*
 
-
*  Description: See [[Wikipedia:NavFrame]].
 
-
*  Maintainers: UNMAINTAINED
 
-
*/
 
-
 
-
// set up the words in your language
 
-
var NavigationBarHide = '[' + collapseCaption + ']';
 
-
var NavigationBarShow = '[' + expandCaption + ']';
 
-
 
-
// 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 );
 
-
for( var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
 
-
if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
 
-
if( NavChild.style.display == 'none' ) {
 
-
NavToggleText = document.createTextNode( NavigationBarShow );
 
-
break;
 
-
}
 
-
}
 
-
}
 
-
 
-
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 );
 
-
}
 
-
}
 
-
}
 
-
addOnloadHook( createNavigationBarToggleButton );
 

Текущая версия на 03:16, 2 апреля 2011

//Collapsiblе: [[ВП:СБ]]
 
var NavigationBarShowDefault = 2
var NavigationBarHide = '[скрыть]'
var NavigationBarShow = '[показать]'
 
var hasClass = (function (){
 var reCache = {}
 return function (element, className){
   return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className)
  }
})()
 
function collapsibleTables(){
 var Table, HRow,  HCell, btn, a, tblIdx = 0, colTables = []
 var allTables = document.getElementsByTagName('table')
 for (var i=0; Table = allTables[i]; i++){
   if (!hasClass(Table, 'collapsible')) continue
   if (!(HRow=Table.rows[0])) continue
   if (!(HCell=HRow.getElementsByTagName('th')[0])) continue
   Table.id = 'collapsibleTable' + tblIdx
   btn = document.createElement('span')
   btn.style.cssText = 'float:right; font-weight:normal; font-size:smaller'
   a = document.createElement('a')
   a.id = 'collapseButton' + tblIdx
   a.href = 'javascript:collapseTable(' + tblIdx + ');'
   a.style.color = HCell.style.color
   a.appendChild(document.createTextNode(NavigationBarHide))
   btn.appendChild(a)
   HCell.insertBefore(btn, HCell.childNodes[0])
   colTables[tblIdx++] = Table
 }
 for (var i=0; i < tblIdx; i++)
   if ((tblIdx > NavigationBarShowDefault && hasClass(colTables[i], 'autocollapse')) || hasClass(colTables[i], 'collapsed'))
     collapseTable(i)
}
 
function collapseTable (idx){
 var Table = document.getElementById('collapsibleTable' + idx)
 var btn = document.getElementById('collapseButton' + idx)
 if (!Table || !btn) return false
 var Rows = Table.rows
 var isShown = (btn.firstChild.data == NavigationBarHide)
 btn.firstChild.data = isShown ?  NavigationBarShow : NavigationBarHide
 var disp = isShown ? 'none' : Rows[0].style.display
 for (var i=1; i < Rows.length; i++)
    Rows[i].style.display = disp
}
 
function collapsibleDivs(){
 var navIdx = 0, colNavs = [], i, NavFrame
 var divs = document.getElementById('content').getElementsByTagName('div')
 for (i=0; NavFrame = divs[i]; i++) {
   if (!hasClass(NavFrame, 'NavFrame')) continue
   NavFrame.id = 'NavFrame' + navIdx
   var a = document.createElement('a')
   a.className = 'NavToggle'
   a.id = 'NavToggle' + navIdx
   a.href = 'javascript:collapseDiv(' + navIdx + ');'
   a.appendChild(document.createTextNode(NavigationBarHide))
   for (var j=0; j < NavFrame.childNodes.length; j++)
     if (hasClass(NavFrame.childNodes[j], 'NavHead'))
       NavFrame.childNodes[j].appendChild(a)
   colNavs[navIdx++] = NavFrame
 }
 for (i=0; i < navIdx; i++)
  if ((navIdx > NavigationBarShowDefault && !hasClass(colNavs[i], 'expanded')) || hasClass(colNavs[i], 'collapsed'))
     collapseDiv(i)
}
 
function collapseDiv(idx) {
 var div = document.getElementById('NavFrame' + idx)
 var btn = document.getElementById('NavToggle' + idx)
 if (!div || !btn) return false
 var isShown = (btn.firstChild.data == NavigationBarHide)
 btn.firstChild.data = isShown ? NavigationBarShow : NavigationBarHide
 var disp = isShown ? 'none' : 'block'
 for (var child = div.firstChild;  child != null;  child = child.nextSibling)
   if (hasClass(child, 'NavPic') || hasClass(child, 'NavContent'))
      child.style.display = disp
}
Личные инструменты