MediaWiki:Common.js

Origem: Wikilivros, livros abertos por um mundo aberto.

Nota: Após gravar, terá de limpar a cache do seu navegador para ver as alterações. Mozilla / Firefox / Safari: pressione Shift enquanto clica em Recarregar, ou pressione Ctrl-F5 ou Ctrl-R (Command-R num Macintosh); Konqueror:: clique no botão Recarregar ou pressione F5; Opera: limpe a cache em Ferramentas → Preferências (Tools → Preferences); Internet Explorer: pressione Ctrl enquanto clica em Recarregar ou pressione Ctrl-F5.

//<source lang="javascript">
 
/* Qualquer código JavaScript presente aqui será carregado para todos os colaboradores do Wikilivros */
 
/* Importa mais scripts específicos se for necessário */ 
if (wgAction == "edit" || wgAction == "submit" || wgPageName == "Especial:Carregar_imagem") //scripts para as páginas de edição
{
    importScript("MediaWiki:Common.js/edit.js")
}
 
 
 
/** Variável global para uso em scripts que lidam com o nome dos livros **
 *      Origem: [[b:en:MediaWiki:Gadget-predef.js]]
 * Mantido por: [[User:Heldergeovane]] (e o original, por [[b:en:User:Whiteknight]])
 *     Exemplo: 'A:B:C:D/E:F:G:H/I:J:K:L' -> 'A:B:C:D' -> 'A:B'
 *        Nota: Duplique quaisquer alterações neste código na página [[MediaWiki:Gadget-Common.js]], usada pelos Gadgets.
 */
 
var wgBookName = wgPageName.split("/", 1)[0] || wgPageName;
wgBookName = wgBookName.split(':', 2).join(":");
 
 
 
/** Transforma determinadas páginas em páginas de discussão **
  *    Origem: [[fr:w:MediaWiki:Common.js]]
  * Descrição: Transforma páginas comuns em páginas de discussão, para permitir coloração baseada na indentação
  *   Autores: ver [[fr:w:MediaWiki:Common.js]]
  */
 
function TransformeEmPaginaDeDiscussao() {
  if(document.getElementById('PaginaDeDiscussao'))
    document.body.className = 'ns-talk';
}
addOnloadHook(TransformeEmPaginaDeDiscussao);
 
 
 
/** Correlatos **
 *  Descrição: Correlatos no menu lateral. Código copiado do de:wikt
 */
// InterProjekt-Links (vgl. [[MediaZilla:708]])
document.write('<style type="text/css">#interProject {display: none; speak: none;} #p-tb .pBody {padding-right: 0;}<\/style>');
function iProject() {
    if (document.getElementById("interProject")) {
        var iProject = document.getElementById("interProject").innerHTML;
        var interProject = document.createElement("div");
        interProject.style.marginTop = "0.7em";
        interProject.innerHTML = '<h5>Correlatos<\/h5><div class="pBody">'+iProject+'<\/div>';
        document.getElementById("p-tb").appendChild(interProject);
    }
}
hookEvent("load", iProject);
 
 
 
/** Wiki Mini Atlas **
 *  Descrição: Mini atlas para módulos com geocoodernadas. Ver [[meta:WikiMiniAtlas]]
 *      Autor: [[en:User:Dschwen]]
 */
var wma_settings = {
    height : 300,
    width : 500
}
if (wgServer == "https://secure.wikimedia.org") {
  var metaBase = "https://secure.wikimedia.org/wikipedia/meta";
} else {
  var metaBase = "http://meta.wikimedia.org";
}
importScriptURI(metaBase+"/w/index.php?title=MediaWiki:Wikiminiatlas.js&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400")
 
 
 
/* Scripts específicos para o Internet Explorer */
 
if (navigator.appName == "Microsoft Internet Explorer")
{
    /**
     *  Descrição: Corrige bug na barra de rolagem do IE
     *  Mantido por: [[User:Tom-]]?
     */
    var oldWidth;
    var docEl = document.documentElement;
 
    function fixIEScroll()
    {
        if (!oldWidth || docEl.clientWidth > oldWidth)
        doFixIEScroll();
        else
        setTimeout(doFixIEScroll, 1);
 
        oldWidth = docEl.clientWidth;
    }
 
    function doFixIEScroll() {
        docEl.style.overflowX = (docEl.scrollWidth - docEl.clientWidth < 4) ? "hidden" : "";
    }
 
    document.attachEvent("onreadystatechange", fixIEScroll);
    document.attachEvent("onresize", fixIEScroll);
 
    //Importa os scripts específicos para o Internet Explorer 6
    if (navigator.appVersion.substr(22, 1) == "6") {
        importScript("MediaWiki:Common.js/IE60Fixes.js")
    }
}
 
 
 
/** Tabelas e divs expansíveis **
 *    Origem: [[ru:w:MediaWiki:Common.js]] (ver também [[w:en:MediaWiki:Common.js]])
 *     Ajuda: [[w:en:Wikipedia:Collapsible_tables]]
 * Descrição: Permite que tabelas e divs sejam recolhidos/expandidos
 *   Autores: [[w:en:User:R. Koot]], [[w:ru:User:Alex Smotrov]]
 */
 
var NavigationBarShowDefault = 2
var NavigationBarHide = '[Esconder]'
var NavigationBarShow = '[Expandir]'
 
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
}
 
// Explicações expansíveis (baseado no código dos divs expansíveis em [[ru:w:MediaWiki:Common.js]], de [[w:ru:User:Alex Smotrov]])
 
var OcultaExplic = '(oculte a explicação)'
var MostraExplic = '(justifique)'
var Dica = 'Clique na ligação para mostrar ou ocultar os detalhes'
 
function criaLinksExplic(){
 var indEx = 0, colSpans = [], i, Ex
 var spans = document.getElementById('content').getElementsByTagName('span')
 for (i=0; Ex = spans[i]; i++) {
   if (!hasClass(Ex, 'Explic')) continue
   Ex.className += ' ExplicJS'
   Ex.id = 'Explic' + indEx
   var LinkM, LinkO
   for (var j=0; j < Ex.childNodes.length; j++)
     if (hasClass(Ex.childNodes[j], 'ExplicLinkOculto')){
       LinkM = Ex.childNodes[j].childNodes[0]
       LinkM.className = 'ExplicLink'
       LinkM.id = 'ExplicLink' + indEx + 'M'
       LinkM.href = 'javascript:clickExplic(' + indEx + ');'
       LinkO = Ex.childNodes[j].childNodes[1]
       LinkO.className = 'ExplicLink'
       LinkO.id = 'ExplicLink' + indEx + 'O'
       LinkO.href = 'javascript:clickExplic(' + indEx + ');'
       break
     }
   if (!LinkM || !LinkO) continue   
   for (var j=0; j < Ex.childNodes.length; j++)
     if (hasClass(Ex.childNodes[j], 'ExplicFato')){
       Ex.childNodes[j].appendChild( (hasClass(Ex, 'ExplicExpandida'))? LinkO : LinkM)
       Ex.childNodes[j].title = Dica
     }
   colSpans[indEx++] = Ex
 }
}
 
function clickExplic(idx) {
 var span = document.getElementById('Explic' + idx)
 var btM = document.getElementById('ExplicLink' + idx + 'M')
 var btO = document.getElementById('ExplicLink' + idx + 'O')
 if (!btM || !btO) return false
 var btMpai = btM.parentNode
 var btOpai = btO.parentNode
 if (!btMpai || !btOpai) return false 
 var Exibindo = (hasClass(span, 'ExplicExpandida'))
 btMpai.appendChild(btO)
 btOpai.appendChild(btM)
 if (Exibindo)
   span.className = span.className.replace(' ExplicExpandida','')
 else
   span.className += ' ExplicExpandida'
}
 
addOnloadHook(criaLinksExplic);
addOnloadHook(collapsibleTables);
addOnloadHook(collapsibleDivs);
 
 
 
/** Adiciona ou remove um evento a um objeto específico **
 * Cross-browser event attachment (John Resig)
 * http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html
 *
 * obj  : Objeto DOM ao qual o evento será adicionado
 * type : String, tipo de evento ("click", "mouseover", "submit", etc.)
 * fn   : Função a ser chamada quando o evento é disparado (a palavra-chave ''this''
 *        aponta para o ''obj'' dentro de ''fn'' quando o evento é disparado)
 *
 * Mantido localmente por: [[User:Heldergeovane]]
 */
function addEvent( obj, type, fn )
{
    if (obj.addEventListener)
    obj.addEventListener( type, fn, false );
    else if (obj.attachEvent)
    {
        obj["e"+type+fn] = fn;
        obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
        obj.attachEvent( "on"+type, obj[type+fn] );
    }
}
function removeEvent( obj, type, fn )
{
    if (obj.removeEventListener)
    obj.removeEventListener( type, fn, false );
    else if (obj.detachEvent)
    {
        obj.detachEvent( "on"+type, obj[type+fn] );
        obj[type+fn] = null;
        obj["e"+type+fn] = null;
    }
}
 
 
 
/** Buscas dentro de um livro **
 * Origem        : [[b:en:MediaWiki:Common.js/BookSearch.js]], que era baseado em [[b:pl:???]]
 * Mantido por   : [[b:pl:User:Piotr]] (no Wikilivros polonês)
 * Modificado por: [[b:en:User:darklama]]
 * Traduzido &
 *  adaptado por : [[b:pt:User:Heldergeovane]]
 */
 
function insereBuscaNosLivros() {
 var Livro = wgBookName.replace(/_/g,' ');
 var txt = "Neste livro";
 var chk = document.createElement('input');
 var lbl = document.createElement('label');
 
 chk.setAttribute('id', 'mw-neste-livro');
 chk.setAttribute('type', 'checkbox');
 
 lbl.htmlFor = 'mw-neste-livro';
 lbl.appendChild(document.createTextNode(txt));
 
 var searchForm = document.getElementById('searchform');
 
 searchForm.appendChild(chk);//ou searchBody?
 searchForm.appendChild(lbl);
 
 var botao = document.getElementById('mw-searchButton');
 var dica1 = botao.title; //botao.title = 'Procurar por páginas contendo este texto'
 
 var campo = document.getElementById('searchInput');
 var dica2 = "Procurar por páginas do wikilivro '" + Livro + "' contendo este texto";
 
 chk.onclick = function() {
   if ( chk.checked ) {
     botao.setAttribute( "title", dica2 );
   } else {
     botao.setAttribute( "title", dica1 );
   }
 }
 searchForm.onsubmit = function() {
   if ( chk.checked ) {
     campo.value = campo.value + " prefix:" + Livro;
   }
 }
 //return botao;
 
}
 
 
 
//Trecho adaptado de [[b:en:MediaWiki:Common.js/ExtraTools.js]] e [[b:en:MediaWiki:Gadget-RemoveImageTools.js]]
if(typeof gadget_busca_nos_livros_desabilitado == 'undefined') gadget_busca_nos_livros_desabilitado = 0;
if(wgNamespaceNumber == 0 && wgPageName != "Página_principal" && gadget_busca_nos_livros_desabilitado != 1) addOnloadHook(insereBuscaNosLivros);
 
 
 
/** Script para formatação dos livros **
 * Mantido por [[User:Heldergeovane]] (e no wikilivros em inglês, por [[User:Whiteknight]])
 * Carrega folhas de estilo e scripts específicos para cada livro. É possível desabilitar através das preferências.
 * Entre em contato com um administrador para adicionar ou atualizar os scripts e folhas de estilo de um livro.
 */
 
if(typeof gadget_gadgets_de_livros_desabilitado == 'undefined') gadget_gadgets_de_livros_desabilitado = 0;
if ("MediaWiki" != wgCanonicalNamespace && "User" != wgCanonicalNamespace && 1 != gadget_gadgets_de_livros_desabilitado) {
  importStylesheet("MediaWiki:Livros/" + wgBookName + ".css");
  importScript("MediaWiki:Livros/" + wgBookName + ".js");
}
 
 
//</source>