Wikipedia:Landsbybrønden/Skabeloner, sammenklapping og join, i Safari

Skabeloner, sammenklapping og join, i Safari redigér

Håper dette er riktig sted å ta dette opp.

Jeg er aktiv på norsk Wikipedia, hvor jeg for tiden har jobbet litt med JavaScript. Holder for øyeblikket på å lage en variant av sammenklappelige lister og joinNavigationBars, basert på deres og :de sin. Underveis oppdaget vi en feil når den brukes i nettleseren Safari. Skabeloner som er samlet lar seg ikke sammenklappe. Etter litt arbeid fant jeg løsningen, blant annet basert på denne artikkelen. Jeg tenkte at dere også kunne være interessert.

Årsak er at når skriptet kloner, limer inn klonene og så sletter orginalene av navigasjonsboksene, forekommer det et lite øyeblikk to versjoner av alle malenes ID-er på siden. Dette forkludrer DOM-en hos Safari. Løsningen er enkelt og greit å klone, så slette og til slutt lime inn klonen. Dette gjøres ved å bytte disse linjer:

   // insert this before next element of last navframe:
   var last_node = nodes[nodes.length-1];
   var parent_node = last_node.parentNode;
   parent_node.insertBefore(e, last_node.nextSibling);
   // remove old nodes
   for (i = 0; i < nodes.length; i++) {
     parent_node.removeChild(nodes[i]);
   }
 }

…mot:

   // insert this before next element of last navframe:
   var parent_node = nodes[nodes.length-1].parentNode;
   // remove old nodes
   for (i = 0; i < nodes.length; i++) {
     parent_node.removeChild(nodes[i]);
   }
   // inserts clones
   parent_node.appendChild(e);
}

…i MediaWiki:Monobook.js. Håper dette har vært til hjelp. Wintermute 1. jun 2006 kl. 21:15 (CEST)

Jeg kommenterer lige på din brugerside på no. Generelt ser det fornuftigt ud – jeg skal bare lige være helt sikker på detaljerne. :) --Morten Barklund [ disk / bidrag ] 2. jun 2006 kl. 10:07 (CEST)
Takk for observasjonen. For at det skal bli riktig må man i stedet sette inn:
    // insert this before next element of last navframe:
    var last_node = nodes[nodes.length-1];
    var parent_node = last_node.parentNode;
    var next_node = last_node.nextSibling;

    // remove old nodes
    for (i = 0; i < nodes.length; i++) {
        parent_node.removeChild(nodes[i]);
    }

     // inserts clones
     parent_node.insertBefore(e, next_node);
}

Wintermute 2. jun 2006 kl. 15:54 (CEST)

Så ser det ud til at virke korrekt og er nu implementeret :) --Morten Barklund [ disk / bidrag ] 6. jun 2006 kl. 08:29 (CEST)