Module:NPO Radio 2 Top 2000
![]() | Deze module gebruikt de volgende sjablonen: |
![]() | Deze module maakt gebruik van de volgende Wikidata-eigenschap:
|
![]() | Deze module maakt gebruik van data afkomstig uit Module:NPO Radio 2 Top 2000/data. |
![]() | Deze module maakt gebruik van TemplateStyles: |
Module:NPO Radio 2 Top 2000
Deze module wordt gebruikt om tabellen aan te maken voor noteringen in de NPO Radio 2 Top 2000, een eindejaarslijst die sinds 1999 jaarlijks een week lang non-stop wordt uitgezonden op radio, televisie en internet.
Input
Argumenten
De module moet worden aangeroepen via het sjabloon {{Tabel NPO Radio 2 Top 2000}}.
Twee verplichte argumenten worden bepaald door het sjabloon: het argument bezig
(ja/nee) en laatste_editie
(jaartal: xxxx). De eerste geeft aan of er op dit moment gewerkt wordt aan het verwerken van nieuwe noteringen, de tweede is het jaartal van de recentste lijst, bij bezig=ja
is dat het jaartal van de nieuwe lijst.
Daarnaast zijn er twee optionele argumenten die meegegeven kunnen worden aan het sjabloon: qid
(Wikidata-ID: Qxxxx of lijst van Wikidata-ID's gescheiden door komma's: Qxxxx,Qxxxx,Qxxxx) en artiesten
(ja/nee). Eerstgenoemde kent twee mogelijkheden: één Wikidata-ID behorend bij een artiest of band met noteringen in de hitlijst óf één of meerdere Wikidata-ID's behorend bij nummers met noteringen in de hitlijst (ongeacht of ze van dezelfde artiest of band zijn). Met het argument artiesten
kan worden aangegeven of achter de titel van het nummer de medeartiesten getoond moeten worden, iets wat alleen bepaald kan worden als een tabel wordt gemaakt voor de noteringen van een of meerdere nummers. In het geval van een tabel van alle nummers met noteringen van een artiest of band, worden medeartiesten standaard getoond, alsmede wanneer het sjabloon op Lijst van Radio 2-Top 2000's wordt aangeroepen (wat niet kan door limitaties in de Wikimedia-software).
Databestand
De daadwerkelijk gebruikte data staat opgeslagen in het databestand: Module:NPO Radio 2 Top 2000/data. Zie die pagina voor uitleg over de structuur van de data en definities van de verschillende kenmerken.
Werking
De module bestaat uit vier functies. De functie main is de enige aan te roepen functie, de lokale functie Top2000table wordt door eerstgenoemde aangeroepen. Daarnaast zijn er de lokale functies get_coartists en get_link. De moduleargumenten hebben in de module een andere naam: bezig=wip
en laatste_editie=last_edition_year
, alsmede een van de sjabloonargumenten: artiesten=show_artists
.
main
De functie main begint met de definitie van de twee verplichte argumenten en het definiëren van enkele strings. Daarna wordt het argument qid
omgezet in een lijst met Wikidata-ID's (al dan niet met de lengte 1) of, als dat argument niet was opgegeven, is de enige Wikidata-ID die van de Wikidata-pagina gekoppeld aan de pagina waarvandaan het sjabloon wordt aangeroepen. Wat vervolgens gebeurt, verschilt per situatie:
- Als de lijst lengte 1 heeft en die ene Wikidata-ID hoort bij een nummer met noteringen in het databestand, dan wordt een tabel gemaakt met de noteringen van dat nummer.
- Als de lijst lengte 1 heeft en die ene Wikidata-ID hoort bij een artiest of band met nummers met noteringen in het databestand, dan wordt een tabel gemaakt met de noteringen van die nummers.
- Als de lijst een lengte langer dan 1 heeft en al die Wikidata-ID's horen bij een nummer met noteringen in het databestand, dan wordt een tabel gemaakt met de noteringen van die nummers.
- Is geen van deze drie opties het geval, dan wordt een gepaste foutmelding geretourneerd. Pagina's met foutmeldingen komen terecht in Categorie:Wikipedia:Foutmelding NPO Radio 2 Top 2000.
Er is in de code eigenlijk nog een vierde optie, dat is het aanroepen van het sjabloon op de pagina Lijst van Radio 2-Top 2000's, waarbij de lijst met Wikidata-ID's leeg zou kunnen blijven. Het idee is dat de tabel dan een tabel maakt met alle nummers erin, maar vanwege limitaties in de Wikimedia-software werkt dit niet.
Top2000table
Deze functie creëert een tabel. Van de functie main krijgt deze functie drie relevante argumenten:
keys
: een lijst met Wikidata-ID's van de nummers die in de tabel komen te staan.data
: een lijst met dataobjecten van die nummers, afkomstig uit het databestand.artist_qid
: de Wikidata-ID van de artiest of band (alleen in het geval van optie 2 hierboven, of in het geval van de niet-werkende optie 4 de string list).
Op basis van dit laatste argument onderscheidt deze functie drie soorten tabellen: een nummertabel (artist_qid
is leeg), een artiestentabel (artist_qid
is een Wikidata-ID) of de volledige lijst (artist_qid
is lijst). Als er maar één nummer is met één notering, wordt geen tabel maar een simpele zin geretourneerd. In het geval van een artiestentabel is het nummer gelinkt, verder hangt de precieze output af van de waarde van wip
in combinatie met het jaartal van die ene notering en een eventueel titelextra
-veld, afkomstig uit het databestand.
Vervolgens wordt een dictionary gemaakt met de jaartallen waarin minstens een van de nummers in de aan te maken tabel een notering had. Daarna wordt het title
-veld in data
uitgebreid met eventuele titelextra en wordt voor ieder nummer de hoogste notering (laagste waarde) opgeslagen in een nieuw veld highest_position
.
Daarop volgt het meest geavanceerde deel van de code, het aanmaken van de tabelinhoud. Jaren waarin geen enkel van de beschouwde nummers een notering had, krijgen ook een kolom, maar worden waar mogelijk gecombineerd met aangrenzende jaren zonder noteringen. Nummers zonder noteringen in bepaalde jaren of in zogenoemde tussenjaren (waarin geen enkel nummer een notering had) krijgen een kruisje (×) als ze toen nog niet uitgebracht waren en een streepje (-) als het nummer al wel bestond. Bij aangrenzende tussenjaren (die dus een kolom delen) wordt hiervoor gekeken naar het laatste jaar in die periode. Er wordt voor gezorgd dat iedere hoogste notering dikgedrukt wordt gemaakt. Als er aan de huidige editie gewerkt wordt (wip=ja
), wordt een kolom met vraagtekens toegevoegd, al dan niet voorafgegaan door een of meerdere tussenjaren. Al wel bekende noteringen uit de laatste editie worden dan al wel ingevuld, bijvoorbeeld die in de top 10 die al een week eerder bekend is dan de rest van de lijst.
Het aanmaken van de tabelinhoud wordt afgesloten met het opsommen van de medeartiesten voor ieder nummer, waarvoor gebruik wordt gemaakt van de functie get_coartists. Ten slotte wordt alle tabelinhoud achter elkaar gezet (titel, medeartiesten en posities met sterretjes, streepjes en vraagtekens) zodat een deel van de daadwerkelijke tabel ontstaat. Als laatste worden noten toegevoegd, waar relevant, die uitleg bevatten over de betekenis van streepjes, kruisjes en vraagtekens. Als er niet direct noteringen waren in de eerste editie (1999), wordt bij de eerste kolom in de tabel (behorend bij het eerste jaar met noteringen) hierover een noot getoond. Ook komt er een noot over het jaar van de laatste update van de tabel, indien er in de tabel geen noteringen zijn in de laatste editie (last_edition_year
) (wat ook het geval kan zijn met wip=ja
op een nummerpagina als geen van de nummers in de nieuwe editie een notering had). Ten slotte wordt de hele tabel in elkaar gezet, inclusief kopcellen, noten en referentielijst en wordt dit als resultaat geretourneerd.
get_coartists
Deze functie somt de medeartiesten van een bepaald nummer op, waarbij deze alleen genoemd worden in het geval van een artiestentabel, de volledige lijst of een nummertabel met artiesten=ja
. Er wordt niet gelinkt bij een nummertabel. In het geval van een artiestentabel wordt de artiest of band in kwestie niet getoond, maar wordt/worden de medeartiest(en) voorafgegaan door "met".
get_link
Als er een link naar een ander artikel aangemaakt moet worden, wordt deze functie gebruikt. Als het maken van de link, wat gebeurt met gegevens uit Wikidata, niet goed lukt, wordt teruggevallen op de label (in een andere taal) en wordt de pagina toegevoegd aan de categorie met foutmeldingen.
--Variabele die alle modulefuncties bevat
local p = {};
local String = require('Module:String')
function p.lied(frame)
--Argumenten die meegegeven worden aan het sjabloon ophalen
t_args = frame:getParent().args
--Parameters die meegegeven worden aan de module (vanuit het sjabloon) ophalen
m_args = frame.args
local noot = frame:expandTemplate{ title = 'Refn', args = {'Een getal geeft de plaats aan, een \'-\' dat het nummer niet genoteerd was en een \'?\' betekent dat de notering nog niet verwerkt is. Een vetgedrukt getal geeft aan dat dit de hoogste notering betreft.', group='noot', name='T2000'} }
local table_start = '{| class="wikitable" style="margin: 0.2em 0 0.2em 0; font-size:85%; text-align:center;"\n! max-width="220" | Nummer met notering(en)<br />in de [[Top 2000 (Nederland)|NPO Radio 2 Top 2000]]' .. noot
local title = '\n|-\n|\'\'' .. t_args.titel .. '\'\''
local table_end = '\n|}\n' .. frame:expandTemplate{ title = 'References', args={'85%', group='noot'} }
local positions_table = mw.text.split(t_args[2], ',')
local positions_table_numbers_only = {}
for k,v in pairs(positions_table) do
if v ~= '-' then
table.insert(positions_table_numbers_only, v)
end
end
local years = ''
local positions = ''
local highest_position = math.min(unpack(positions_table_numbers_only))
local current_year = t_args.start
for i = 1, #positions_table do
years = years .. '!!\'' .. mw.ustring.sub(current_year, 3, 4)
local current_position = positions_table[i]
if tonumber(current_position) == highest_position then
current_position = '\'\'\'' .. current_position .. '\'\'\''
end
positions = positions .. '||' .. current_position
current_year = current_year + 1
end
return table_start .. years .. title .. positions .. table_end
end
-- wordt nog niet gebruikt
function p.artiest(frame)
--Argumenten die meegegeven worden aan het sjabloon ophalen
t_args = frame:getParent().args
--Parameters die meegegeven worden aan de module (vanuit het sjabloon) ophalen
m_args = frame.args
return 'Functie artiest aangeroepen'
end
return p