Module:Index
Documentatie voor deze module kan aangemaakt worden op de volgende pagina: Module:Index/doc
require( 'strict' )
local p = {}
local getArgs = require('Module:Arguments').getArgs
local function rangtelwoord(getal)
local rangtelwoorden = {
'eerste', 'tweede', 'derde', 'vierde', 'vijfde',
'zesde', 'zevende', 'achtste', 'negende'
}
local woord = rangtelwoorden[getal]
if not woord then
woord = tostring(getal) .. 'e'
end
return woord
end
local function rij(id, th, td)
return mw.html.create('tr')
:attr('id', id)
:tag('th')
:attr('scope', 'row')
:node(th)
:done()
:tag('td')
:wikitext(td)
:allDone()
end
local function voegLokaleDataToe(elementen, args)
local zoek_elementen = {
'Titel',
'Deel',
'Ondertitel',
'Auteur',
'Vertaler',
'Redacteur',
'Illustrator',
'Uitgave',
'Jaar',
'Uitgever',
'Plaats',
{'Bron', function()
if args.Bron then
local titel = mw.title.getCurrentTitle()
local brontitel = mw.title.makeTitle('Bestand', titel.text)
if brontitel.file.exists then
return '[[:' .. brontitel.prefixedText .. '|' .. args.Bron .. ']]'
else
return args.Bron
end
end
end},
{'Voortgang', function()
if args.Voortgang then
local voortgangsberichten = {
T = "[[Categorie:Wikisource:Gecontroleerd]][[:Categorie:Wikisource:Gecontroleerd|Klaar — Alle pagina's van het werk zijn gecontroleerd]]",
V = "[[Categorie:Wikisource:Proefgelezen]][[:Categorie:Wikisource:Proefgelezen|Proefgelezen — Alle pagina's van het werk zijn proefgelezen, maar nog niet gecontroleerd]]",
C = "[[Categorie:Wikisource:Niet proefgelezen]][[:Categorie:Wikisource:Niet proefgelezen|Moet nog proefgelezen worden]]",
MS = "[[Categorie:Wikisource:Samenvoegen en opsplitsen]][[:Categorie:Wikisource:Samenvoegen en opsplitsen|Samenvoegen en opsplitsen]]",
OCR = "[[Categorie:Wikisource:OCR-laag nodig]][[:Categorie:Wikisource:OCR-laag nodig|OCR-laag nodig]]",
L = "[[Categorie:Wikisource:Incorrect bestand]][[:Categorie:Wikisource:Incorrect bestand|<span class=error>Bestand moet worden gerapareerd voordat begonnen wordt met proeflezen</span>]]",
X = "[[Categorie:Wikisource:Bestand nakijken]][[:Categorie:Wikisource:Bestand nakijken|<span class=error>Maak een paginalijst aan voor het bestand voordat begonnen wordt met proeflezen (om te controleren of het bestand correct is)</span>]]"
}
return voortgangsberichten[args.Voortgang] or "[[Categorie:Wikisource:Onbekende status]][[:Categorie:Wikisource:Onbekende status|Onbekende status]]"
end
end},
'Delen',
}
for k, v in ipairs(zoek_elementen) do
if type(v) == 'table' then
elementen[v[1]] = v[2]()
elementen.aliases[k] = v[1]
else
-- Standaardfunctionaliteit
if args[v] then
elementen[v] = args[v]
end
elementen.aliases[k] = v
end
end
if not elementen.lengte or elementen.lengte < #zoek_elementen then
elementen.lengte = #zoek_elementen
end
end
local function zoekWikidataId(args)
local wikidata_id = nil
if args.wikidata and #args.wikidata > 0 then -- als er een wikidata id is
wikidata_id = args.wikidata
elseif args.Titel then -- anders proberen we of de titelpagina een wikidata heeft
string.gsub(args.Titel, '^%[%[([^]|]*).*$', function(paginatitel)
wikidata_id = mw.wikibase.getEntityIdForTitle(paginatitel)
end)
end
return wikidata_id
end
local function voegWikidataToe(elementen, wikidata_id)
local vraagWikidata = require('Module:Wikidata Boek').vraagWikidata
local data = vraagWikidata(wikidata_id)
if not elementen.Titel and data.titel.titel then
elementen.Titel = data.titel.titel
end
if not elementen.Ondertitel and data.titel.ondertitel then
elementen.Ondertitel = data.titel.ondertitel
end
if not elementen.Auteur and #data.auteurs > 0 then
elementen.Auteur = table.concat(data.auteurs, ', ')
end
if not elementen.Vertaler and #data.vertalers > 0 then
elementen.Vertaler = table.concat(data.vertalers, ', ')
end
if not elementen.Uitgave and data.drukInfo.druk then
if data.drukInfo.druk.schrijfwijze then
elementen.Uitgave = data.drukInfo.druk.schrijfwijze
else
local druknummer = tonumber(data.drukInfo.druk.nummer)
if druknummer then
local telwoord = rangtelwoord(druknummer)
local telwoord = string.gsub(telwoord, '^%l', string.upper) -- eerste letter hoofdletter
elementen.Uitgave = telwoord .. ' druk'
else
elementen.Uitgave = data.drukInfo.druk.nummer
end
end
end
if not elementen.Plaats and data.drukInfo.plaats then
elementen.Plaats = data.drukInfo.plaats
end
if not elementen.Uitgever and data.drukInfo.uitgever then
elementen.Uitgever = data.drukInfo.uitgever
end
if not elementen.Jaar and data.drukInfo.jaar then
elementen.Jaar = data.drukInfo.jaar
end
return elementen
end
function p.tekenInformatieWerk(frame)
local args = getArgs(frame)
local elementen = {}
local aliases = {}
setmetatable(elementen, {__index = function(t, k) if k == 'aliases' then return aliases else return rawget(t, aliases[k]) end end})
voegLokaleDataToe(elementen, args)
local wikidata_id = zoekWikidataId(args)
if wikidata_id then -- als wikidata gevonden
elementen = voegWikidataToe(elementen, wikidata_id)
end
local tabel = mw.html.create('table')
:attr('id', 'ws-index-informatie-werk')
for i = 1, elementen.lengte do
if elementen[i] then
local veld = elementen.aliases[i]
local tekst = elementen[i]
tabel:node(rij('ws-index-' .. string.lower(veld), veld, tekst))
end
end
return tabel
end
return p