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>