Mal:Filtergruppe/dok/teknisk

Fra Wikipedia, den frie encyklopedi

Mal:Filtergruppe er et hjelpemiddel for å skaffe bedre oversikt i tabeller. Dette gjøres ved at utvalgte rader kan vises eller skjules etter behov. Visningen styres ved hjelp av markeringsbokser som blir definert foran tabellen ved hjelp av denne malen.

Moduler[rediger kilde]

Malen består av følgende elementer:

  • Mal:Filtergruppe - definerer et sett checkbokser som usynlig tabellrad. Malen kan legges inn én eller flere ganger etter hverandre foran tabellen der visningen skal styres.
  • Skriptet createFilterButtons() - legger inn en tabell over checkboksene, blir utført når siden lastes.
  • Skriptet checkFilterCheckbox(tableIndex, cClass) - oppdaterer den viste tabellen, blir utført ved klikk i en checkboks.

Malen var opprinnelig skrevet som en undermal for Mal:JBS-tabell/medVisSkjul, spesielt for linjekart, for å kunne benytte Mal:Filtergruppe for alle slags tabeller ble derfor hjelpemalen Mal:Filtergrupper innført, dette er en redusert versjon av Mal:JBS-tabell/medVisSkjul, hvor all kode som har med linjekart å gjøre er fjernet. Sammen med tabellradene danner den en fullstendig tabell.

Rader som skal vises eller skjules i en tabell markeres med en klasse med prefiks "filterShow", denne er avhengig av hvilke checkbokser som er definert i Mal:Filtergruppe.

Maler[rediger kilde]

Mal:Filtergruppe definerer et sett checkbokser som en tabellrad. Den kan legges inn én eller flere ganger. Hver rad er markert med class="filterGroup" for identifisering, og kan dessuten markeres med klassene

  • class="filterAll" - dersom ingen av checkboksene er markert har det samme virkning som om alle er markert
  • class="filterRadio" - bare én av checkboksene i raden kan være markert

En rad inneholder cellene

  • Starttekst - en fritt valgt tekst

og per checkboks et trippel av tre celler

  • Visningskode - en bokstav i UC
  • Knappetekst - en tekst som kan velges fritt
  • Startstatus - markering eller ikke ved første visning av checkboksen

Radene er omsluttet av en tabell med class="filterGroups", og kan stamme fra Mal:Filtergrupper eller fra Mal:JBS-tabell/medVisSkjul. Klassens hensikt er også her identifisering av tabellen.

Eksempel[rediger kilde]

Malen

{{filtergruppe|tekst0=Vis
|vis1=T|tekst1=T-bane,|start1=ja
|vis2=O|tekst2=trikk,
|vis3=J|tekst3=jernbane 
}}

genererer følgende tabell

<tr class="filterGroup">
<td class="hide" title="t0">Vis</td>
<td class="hide">T</td>
<td class="hide">T-bane,</td>
<td class="hide">ja</td>
<td class="hide">O</td>
<td class="hide">trikk,</td>
<td class="hide"></td>
<td class="hide">J</td>
<td class="hide">jernbane</td>
<td class="hide"></td>
</tr>

Initialiseringsskript[rediger kilde]

Skriptet createFilterButtons() parser tabellen som har blitt lagt inn av Mal:Filtergruppe, og genererer checkboksene med lenker til klikkbehandlingsrutinen, denne får som parametre en referanse til visningstabellen (0 dersom siden bare inneholder én slik tabell) og den visningskoden som har blitt klikket slik den er fastlagt i malen. Checkboksene blir lagt i en ny celle foran den første cellen i raden. Resten av raden er ikke nødvendig lenger, men har blitt stående for lettere debugging. Også klassene class="FGchecks" og class="FGbutton" har kun funksjon som debughjelp.

Eksempel[rediger kilde]

Tabellen ovenfor blir modifisert slik:

<tr class="filterGroup">
<td class="FGchecks">
  <span class="FGbutton">
    Vis [
    <a id="filterCheck0T" title="T-bane," href='javascript:checkFilterCheckbox(0, "T" );'>X</a>
    ] T-bane,
  </span>
  <span class="FGbutton">
     [
  <a id="filterCheck0O" title="trikk," href='javascript:checkFilterCheckbox(0, "O" );'>_</a>
    ] trikk,
  </span>
  <span class="FGbutton">
     [<a id="filterCheck0J" title="jernbane" href='javascript:checkFilterCheckbox(0, "J" );'>_</a>
    ] jernbane
  </span>
</td>
<td class="hide" title="t0">Vis</td>
<td class="hide">T</td>
<td class="hide">T-bane,</td>
<td class="hide">ja</td>
<td class="hide">O</td>
<td class="hide">trikk,</td>
<td class="hide"></td>
<td class="hide">J</td>
<td class="hide">jernbane</td>
<td class="hide"></td>
</tr>

Oppdateringsskript[rediger kilde]

Skriptet checkFilterCheckbox parser den første tabellen på den aktuelle siden som ligger etter malen selv. Dersom en rad blir funnet som har en class med prefiks "filterShow" blir resten av class-stringen interpretert som visningsmerker, disse sammenliknes med chackboksens status. Avhengig av visningsmerker og status blir så class="hide" lagt inn i eller fjernet fra raden. Prefikset "filterShow" har selv ingen betydning, det har hovedsaklig som formål å markere visningsmerkene, og det forhindrer dessuten konflikter med CSS.

Visningskodene for en rad blir interpretert etter følgende regler:

  • Kodene leses en etter en fra venstre mot høyre
  • En kode i UC er true dersom den tilsvarende checkboksen er markert
  • En kode i LC er true dersom den tilsvarende checkboksen ikke er markert
  • Koder som står ved siden av hverandre betraktes som et logisk AND-uttrykk og danner en kodegruppe
  • Koder eller kodegrupper kan skilles med et minustegn (-) dette betraktes som et logisk OR
  • Parenteser er ikke implementert.

Kombinasjon av visningsmerker[rediger kilde]

Dersom kodene A og B er definert foran tabellen er følgende kombinasjoner for <visningsmerke> virksomme:

  • A - vis raden hvis A er markert
  • B - vis raden hvis B er markert
  • AB - vis raden hvis både A og B er markert
  • A-B - vis raden hvis enten A eller B er markert
  • Ab - vis raden hvis A er markert, men ikke B
  • A-b - vis raden hvis enten A er markert, eller B ikke er markert
  • aB - vis raden hvis A ikke er markert og B er markert
  • a-B - vis raden hvis enten A ikke er markert, eller B er markert
  • ab - vis raden hvis verken A eller B er markert
  • a-b - vis raden hvis enten A eller B ikke er markert

En liten bokstav har her betydningen «ikke», dvs «a» betyr «ikke A». Kodenes rekkefølge har ingen betydning.

Fordi parenteser er ikke implementert må derfor kodene gjentas hvis nødvendig dersom 3 eller flere forskjellige koder brukes. Fra eksempelet lenger opp:

  • TJ-OJ - vis raden hvis J er markert, og samtidig T eller O er markert