Module:Zandbak
Documentatie voor deze module kan aangemaakt worden op de volgende pagina: Module:Zandbak/doc
-- Deze pagina is een zandbak om Lua scripten op te testen en oefenen.
local p = {}
local getArgs = require('Module:Arguments').getArgs
local function interpreteerMultilevelInhoud(inhoud_string)
local rootTable = {}
rootTable.root = true
local currentLevel = 1
local currentTable = rootTable
for line in mw.text.gsplit(inhoud_string, "\n", true) do
local asterisks, text = mw.ustring.match(line, "^%s*(%**)%s*([^*].-)%s*$")
if asterisks then
local asterisks = string.len(asterisks)
if asterisks == currentLevel then
-- nothing
elseif asterisks == currentLevel+1 then
-- descend into last element
currentTable = currentTable[#currentTable]
currentLevel = currentLevel + 1
elseif asterisks < currentLevel then
-- go up for each level back
while asterisks < currentLevel do
currentTable = currentTable.parent
currentLevel = currentLevel - 1
end
else
return '<span class=error>Kan niet meer dan één level dieper tegelijk gaan</span>'
end
local newTable = {}
newTable.parent = currentTable
newTable.name = text
if #currentTable > 0 then
newTable.prevElem = currentTable[#currentTable]
currentTable[#currentTable].nextElem = newTable
end
table.insert(currentTable, newTable)
currentTable[newTable.name] = newTable
end
end
return rootTable
end
local function genereerLinkLijst(werk_titel, pagina_tabel)
if not pagina_tabel or pagina_tabel.root then
local tabel = {}
tabel.link_root = werk_titel
return tabel
end
local lijst = genereerLinkLijst(werk_titel, pagina_tabel.parent)
local nieuwe_rij = {}
if pagina_tabel.prevElem then
nieuwe_rij.vorige = '[[' .. lijst.link_root .. '/' .. pagina_tabel.prevElem.name .. '|' .. pagina_tabel.prevElem.name .. ']]'
end
nieuwe_rij.sectie = pagina_tabel.name
nieuwe_rij.sectie = '[[' .. lijst.link_root .. '/' .. pagina_tabel.name .. '|' .. pagina_tabel.name .. ']]'
if pagina_tabel.nextElem then
nieuwe_rij.volgende = '[[' .. lijst.link_root .. '/' .. pagina_tabel.nextElem.name .. '|' .. pagina_tabel.nextElem.name .. ']]'
end
lijst.link_root = lijst.link_root .. '/' .. pagina_tabel.name
table.insert(lijst, nieuwe_rij)
return lijst
end
--[[
Deze functie tekent de tabel onder de koptekst die de links naar vorige en
volgende hoofdstukken bevatten.
lijst: een lijst van tabellen met mogelijke waardes voor vorige, volgende,
sectie
returnt: De gegenereerde mw.html tabel
]]
local function tekenKoptekstNavigatie(lijst)
if not lijst or #lijst == 0 then
-- geen waardes: return niks
return nil
end
local nav_tabel = mw.html.create('table')
:addClass('ws-onder-koptekst-navigatie')
for i, v in ipairs(lijst) do
local nav_rij = nav_tabel:tag('tr')
local vorige_td = nav_rij:tag('td')
:addClass('ws-onder-koptekst-vorige')
if v.vorige then
vorige_td:tag('span')
:wikitext(v.vorige)
-- TODO automatische footer weer doen werken
end
local sectie_td = nav_rij:tag('td')
:addClass('ws-onder-koptekst-sectie')
if v.sectie then
sectie_td:wikitext(v.sectie)
end
local volgende_td = nav_rij:tag('td')
:addClass('ws-onder-koptekst-volgende')
if v.volgende then
volgende_td:tag('span')
:wikitext(v.volgende)
end
end
return nav_tabel
end
function p.decodeerLijst(frame)
local str = [[
* Inleiding
* Brieven van 1899
** Japara, 25 Mei 1899.
** 18 Augustus 1899. (I.)
** 6 November 1899 (I.)
** November 1899 (II.)
* Brieven van 1900
* Brieven van 1901
* Brieven van 1902
* Brieven van 1903
* Brieven van 1904
* Gedachten ontleend aan niet openbaar gemaakte brieven
* Aan onze vrienden (gedicht)
* Nota over het onderwijs
]]
local pagina_titel = 'Door Duisternis Tot Licht/Brieven van 1899/Japara, 25 Mei 1899.'
local inhoud_tabel = interpreteerMultilevelInhoud(str)
local titel_delen = mw.text.split(pagina_titel, '/', true)
local werk_titel = table.remove(titel_delen, 1)
local pagina_tabel = inhoud_tabel
while #titel_delen > 0 do
pagina_tabel = pagina_tabel[titel_delen[1]]
table.remove(titel_delen, 1)
end
--[[
nu hebben we de juiste pagina gevonden, tijd om de tabel met links te
genereren
]]
local link_lijst = genereerLinkLijst(werk_titel, pagina_tabel)
local koptekst_navigatie = tekenKoptekstNavigatie(link_lijst)
return frame:extensionTag{name = 'templatestyles', args = { src = 'Gebruiker:Raketsla/klad/styles.css'}} .. tostring(koptekst_navigatie)
end
return p