MediaWiki:Visskjul.js

   

Fra Villmark

(Forskjeller mellom versjoner)
Gå til: navigasjon, søk
Admin (Diskusjon | bidrag)
(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
// ============================================================
Personlige verktøy