MediaWiki:Visskjul.js
Fra Villmark
(Forskjeller mellom versjoner)
Admin (Diskusjon | bidrag)
(Ny side: // ============================================================ // SKJUL // ============================================================ // Dette er en videreutvikling/tilpassing fra [[:d…)
(Ny side: // ============================================================ // SKJUL // ============================================================ // Dette er en videreutvikling/tilpassing fra [[:d…)
Nåværende revisjon fra 22. jul 2009 kl. 23:43
// ============================================================ // SKJUL // ============================================================ // Dette er en videreutvikling/tilpassing fra [[:da:MediaWiki:Monobook.js]] // Følgende funksjoner brukes for å skjule navigasjonsbokser m.m. // Alle <div>-er klassifisert som .skjulRamme får en knapp (.skjulKnapp) // Når denne trykkes vil alt innholdet av .skjulInnhold <div>-er bli skjult/vist // Alt vil i utganspunktet være vist, med mindre: // - Antallet .skjulRamme overskrider en grense satt med 'NavigationBarShowDefault' // - Rammen er også klassifisert .skjult // // I navigasjonsbokser vil det i tilleg dukke opp en .skjulBryter // Denne er usynlig, men gjør det mulig å skjule selv om det er et bilde til høyre i malen // Definerer hva som står på knappene var NavigationBarHide = 'skjul'; var NavigationBarShow = 'vis'; // Setter opp maks antall rammer som vises // overskrides tallet vil alle være skjult var NavigationBarShowDefault = 2; // toggleNavigationBar // ============================================================ // Skjuler, eller viser, innholdet i rammen // Parametre: // indexNavigationBar: nummeret til rammen som skal endres function toggleNavigationBar(indexNavigationBar) { // Finner knapp og ramme var NavToggle = document.getElementById('skjulKnapp' + indexNavigationBar); var NavFrame = document.getElementById('skjulRamme' + indexNavigationBar); if (!NavFrame || !NavToggle) { return false; } // Leter gjennom rammen for å finne ting som skal skjules og endrer knapp if (NavToggle.firstChild.data == NavigationBarHide) { for ( var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) { if (/skjulInnhold/.test(NavChild.className)) NavChild.style.display = 'none'; } // end for NavToggle.firstChild.data = NavigationBarShow; // Leter gjennom rammen for å finne ting som skal vises og endrer knapp } else if (NavToggle.firstChild.data == NavigationBarShow) { for ( var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) { if (/skjulInnhold/.test(NavChild.className)) NavChild.style.display = 'block'; } // end for NavToggle.firstChild.data = NavigationBarHide; } // end if-else // return true; <-- synder, men uten denne så klager firefox på at javascriptkoden ikke er gyldig. } // end function // createNavigationBarToggleButton // ============================================================ // Legger på knapper på alle rammene og skjuler rammer dersom påkrevd function createNavigationBarToggleButton() { var indexNavigationBar = 0; var NavFrame; // Leter gjennom alle <div>-er for( var i=0; NavFrame = document.getElementsByTagName("div")[i]; i++ ) { // Dersom en ramme blir funnet if (/skjulRamme/.test(NavFrame.className)) { indexNavigationBar++; // Gjør klar knappen var NavToggle = document.createElement("a"); NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');'); NavToggle.setAttribute('id', 'skjulKnapp' + indexNavigationBar); var NavToggleText = document.createTextNode(NavigationBarHide); NavToggle.appendChild(NavToggleText); // Gjør klar ramme til knappen var outerSpan = document.createElement('span'); outerSpan.className = 'skjulKnapp'; outerSpan.appendChild(document.createTextNode('[')); outerSpan.appendChild(NavToggle); outerSpan.appendChild(document.createTextNode(']')); // Setter .skjulKnapp som første element i .skjulRamme NavFrame.insertBefore( outerSpan, NavFrame.firstChild ); // Dersom det er en navigasjonsboks if (/NavFrame/.test(NavFrame.className)) { // Gjør klar bryteren var NavToggle2 = document.createElement("a"); NavToggle2.className = 'skjulBryter'; NavToggle2.setAttribute('id', 'skjulBryter' + indexNavigationBar); NavToggle2.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');'); var NavToggleText2 = document.createTextNode('\xA0\xA0\xA0'); NavToggle2.appendChild(NavToggleText2); // Setter .skjulBryter som første element i .skjulRamme .NavFrame NavFrame.insertBefore( NavToggle2, NavFrame.firstChild ); } // end if // Setter identen til rammen NavFrame.setAttribute('id', 'skjulRamme' + indexNavigationBar); } // end if } // end for // Dersom det er flere rammer en default skjules de if (NavigationBarShowDefault < indexNavigationBar) { for( var i=1; i<=indexNavigationBar; i++ ) { toggleNavigationBar(i); } // Hvis ikke, skjules alle merket med .skjult } else { for( var i=1; i<=indexNavigationBar; i++ ) { if (/skjult/.test(document.getElementById('skjulRamme' + i).className)) { toggleNavigationBar(i); } } } // end if } // end function // Legger den sist i rekken over ting som skal gjøres når siden er klar // aOnloadFunctions[aOnloadFunctions.length] = createNavigationBarToggleButton; addOnloadHook( createNavigationBarToggleButton ); // END SKJUL // ============================================================ // ============================================================ // SAMLE // ============================================================ // Dette er en videreutvikling/tilpassing fra [[:da:MediaWiki:Monobook.js]] // Følgende funksjoner brukes for å slå sammen navigasjonsbokser, // slik at de får en felles ramme. // Dette gjøres ved hjelp av klassen NavSamling. // Mer presist benytter den identene satt med createNavigationBarToggleButton() // Deretter utelukker den alle vis/skjul-bokser som ikke er NavFrame // joinFrames // ============================================================ // Mottar en gruppe med NavFrames, fra joinNavigationBars(), og slår dem sammen // Parametre: // nodes: Gruppen av rammer som skal spleises function joinFrames(nodes) { // Lager en div.NavSamling var e = document.createElement("div"); e.className = "NavSamling"; e.setAttribute("id", "NavSamling"); // Legger til kloner av rammen for (i = 0; i < nodes.length; i++) { e.appendChild(nodes[i].cloneNode(true)); } // Legger alt sammen etter siste ramme i gruppa var last_node = nodes[nodes.length-1]; var parent_node = last_node.parentNode; var next_node = last_node.nextSibling; // Fjerner de gamle rammene for (i = 0; i < nodes.length; i++) { parent_node.removeChild(nodes[i]); } // Setter inn klonene parent_node.insertBefore(e, next_node); } // end function // joinNavigationBars // ============================================================ // Går gjennom alle skjulRammer på siden og sender grupper til joinFrames() function joinNavigationBars() { // Lager en matrise som skal fylles med alle .skjulRamme var nodes = new Array(); // En funksjon for å gjøre dette enkelt var e = function(x) { return document.getElementById('skjulRamme' + x); }; // Alle rammer på siden sjekkes for( var i=1, NavFrame = e(i), NextNavFrame = e(i+1); NavFrame; i++, NavFrame = NextNavFrame, NextNavFrame = e(i+1) ) { // Hopp over dersom den er samlet, mangler parentNode eller ikke er NavFrame if (!NavFrame.parentNode || NavFrame.parentNode.className == "NavSamling" || !/NavFrame/.test(NavFrame.className)) { continue; } // end if // Dersom neste ramme er inntil, eller en tom linje fra, og er en NavFrame, // legges den i node-matrisen if ((NavFrame.nextSibling == NextNavFrame || (NavFrame.nextSibling && NavFrame.nextSibling.nodeType == 3 && NavFrame.nextSibling.nextSibling && NavFrame.nextSibling.nextSibling == NextNavFrame ) ) && /NavFrame/.test(NextNavFrame.className)) { // Er matrisen tom legges denne rammen først if (!nodes || nodes.length == 0) nodes = [NavFrame]; // Neste ramme legges bakerst i matrisen nodes.push(NextNavFrame); // Er ikke neste ramme tilfredsstillende sjekkes // om man har mange nok for å slå sammen og tømme matrisen } else if (nodes.length > 1) { joinFrames(nodes); nodes = new Array(); } // end if-else } // end for // Er det flere navigasjonsbokser etter hverandre sendes de til joinFrames() if (nodes.length > 1) { joinFrames(nodes); } } // end function // Legger den sist i rekken over ting som skal gjøres når siden er klar // aOnloadFunctions[aOnloadFunctions.length] = joinNavigationBars; addOnloadHook( joinNavigationBars ); // END SAMLE // ============================================================