Hopp til innhold

Bruker:Wintermute/samle.js

Fra Wikipedia, den frie encyklopedi

Merk: Etter publisering vil det kanskje være nødvendig å slette mellomlageret i nettleseren din for å se endringene.

  • Firefox / Safari: Hold Shift mens du klikker på Oppdater, eller trykk enten Ctrl+F5 eller Ctrl+R (⌘+R på Mac)
  • Google Chrome: Trykk Ctrl+Shift+R (⌘+Shift+R på Mac)
  • Edge: Hold Ctrl mens du trykker på Oppdater eller trykk Ctrl+F5
// ============================================================
// 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("class", "NavSamling");
    e.setAttribute("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.className.search('NavFrame') == -1) {
            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
addLoadEvent(joinNavigationBars);

// END SAMLE
// ============================================================