MediaWiki:Common.js

De wiki.eliteSoft.com.br
Ir para: navegação, pesquisa
/* Códigos JavaScript aqui colocados serão carregados por todos aqueles que acessarem alguma página deste wiki */

/** 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]]
 */
 
var autoCollapse = 2;
var collapseCaption = 'Ocultar';
var expandCaption = 'Expandir';
 
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 = document.getElementsByTagName( 'table' );
 
        for ( var i = 0; i < Tables.length; i++ ) {
                if ( hasClass( Tables[i], 'collapsible' ) ) {
 
                        /* 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 [[MediaWiki: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++;
                }
        }
 
        for ( var i = 0;  i < tableIndex; i++ ) {
                if ( hasClass( NavigationBoxes[i], 'collapsed' ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], 'autocollapse' ) ) ) {
                        collapseTable( i );
                } else if ( hasClass( NavigationBoxes[i], 'innercollapse' ) ) {
                        var element = NavigationBoxes[i];
                        while ( element = element.parentNode ) {
                                if ( hasClass( element, 'outercollapse' ) ) {
                                        collapseTable( i );
                                        break;
                                }
                        }
                }
        }
}
 
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 );
        };
})();

/* Todo código JavaScript presente aqui será carregado por todos os usuários em cada página carregada. */
/*jslint browser: true, white: true, regexp: true, plusplus: true*/
/*global $, mw, importScript, importStylesheet */
 
//Scripts para páginas e/ou domínios específicos
if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Watchlist' ){
	importScript( 'MediaWiki:Common.js/watchlist.js');
} else if ( mw.config.get( 'wgIsMainPage' ) ) {
	/**
	* Melhorias na página principal
	* Adiciona um link a lista completa de Wikipédias em outras línguas
	*
	* @author: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex Smotrov]]
	* @source: [[en:MediaWiki:Common.js]]
	*/
	$(function () {
		mw.util.addPortletLink( 'p-lang', mw.util.wikiGetlink( 'Wikipédia:Wikipédia em outras línguas' ),
		'Lista completa', 'interwiki-completelist', 'Lista completa de Wikipédias' );
	});
} else if ( $.inArray( mw.config.get( 'wgPageName' ), [ 'Wikipédia:Esplanada/propostas', 'Wikipédia:Esplanada/geral' ] ) !== -1 ) {
	/*
	* Oculta botão editar da [[Wikipédia:Esplanada/propostas]] e da [[Wikipédia:Esplanada/geral]]
	*/
	$(function () {
		var href = mw.util.wikiGetlink( mw.config.get( 'wgPageName' ) ) + '?action=edit&section=new&preload=Template:Esplanada2/Preload';
 
		if ( mw.config.get( 'wgUserLanguage' ) !== 'pt' ) {
		href += '/en';
		}
 
		$( '#ca-addsection a' ).attr( 'href', href );
 
		if ( mw.config.get( 'skin' ) === 'vector' ) {
			// Move o botão "editar" para o menu de ações
			$( '#ca-edit' ).appendTo( '#p-cactions ul' );
		}
	});
}
 
if ( $.client.profile().name === 'msie' ) {
	//scripts específicos para Internet Explorer
	importScript( 'MediaWiki:Common.js/IEFixes.js' );
}
 
/**
* Manter no servidor seguro quem se loga pelo servidor seguro quando muda para outro projeto
* Sem este código, o usuário logado por https quando segue um interwiki, usa http e será deslogado (os logins são independentes).
*/
if ( mw.config.get( 'wgServer' ) === 'https://secure.wikimedia.org' ) {
	importScript( 'MediaWiki:Common.js/secure.js' );
}
 
/** Parâmetros &withCSS= e &withJS= para a URL
* Permite que sejam testados scripts e folhas de estilos do domínio MediaWiki
* sem precisar editar páginas .css ou .js pessoais
*/
 
var extraJS  = mw.util.getParamValue( 'withJS' ),
extraCSS = mw.util.getParamValue( 'withCSS' );
 
if ( extraJS && extraJS.match( /^MediaWiki:[^&<>=%]*\.js$/ ) ) {
	importScript( extraJS );
}
 
if ( extraCSS && extraCSS.match( /^MediaWiki:[^&<>=%]*\.css$/ ) ) {
	importStylesheet( extraCSS );
}
 
/** Correlatos
 * Adiciona links para os projetos correlatos no menu lateral, a partir da [[Predefinição:Correlatos]].
 * TODO: Remover quando o [[bugzilla:708]] for resolvido
 * @author: ???
 */
$(function() {
	var cl, iProjectHTML, iProject, ptb;
	iProjectHTML = document.getElementById( 'interProject' );
 
	if ( iProjectHTML ) {
		iProjectHTML = iProjectHTML.innerHTML;
		iProject = document.createElement( 'div' );
 
		if ( mw.config.get('skin') === 'vector' ) {
			iProject.className = 'portal collapsed';
			cl = 'body';
		} else {
			iProject.className = 'portlet';
			cl = 'pBody';
		}
 
		iProject.innerHTML = '<h5>Correlatos<\/h5><div class="' + cl + '">' + iProjectHTML;
		iProject.setAttribute( 'id', 'p-correlatos' );
		iProject.id = 'p-correlatos';
 
		ptb = document.getElementById( 'p-tb' );
		ptb.parentNode.insertBefore( iProject, ptb.nextSibling );
	}
});