Modul:ListeBasistyp
Version vom 28. Dezember 2021, 18:43 Uhr von Stewie (Diskussion | Beiträge)
Die Dokumentation für dieses Modul kann unter Modul:ListeBasistyp/Doku erstellt werden
--[[
Lua Alternative für Vorlage:Liste Basistyp - bessere Performance in allen Bereichen
erwartet ein basistyp als argument und stellt zugehörigen Seiten da.
]]--
local p = {} --local p = {} -- p steht für Paket (engl. package)
function p.Liste( frame )
local returnString = ""
local Basistyp = frame.args[1]
-- test ob Basistyp leer ist wenn ja, beende hier
if Basistyp == nil then return nil end
-- Todo: test ob argument tatsächlich ein basistyp ist wenn nicht beende hier
-- Todo (wichtiger): Hauptkategorien darstellen
--eigene Darstellung für Ausrüstungskategorien...
if Basistyp == 'Ausrüstungskategorie'
then
local ntitle = mw.title.getCurrentTitle().text
local queryResult = mw.smw.ask('[[Ausrüstungskategorie::'..ntitle..'|?=#|limit=1999')
returnString = '<table class="wikitable sortable oben" ><tr><th>Ausrüstung</th><th>Preis</th><th>Quellen</th></tr>'
local i = 1
while i <= table.getn(queryResult)
do
local basistypArtikelinfo = mw.smw.ask('[[' .. queryResult[i][1] ..']]|?Artikelinfo|?Profilbild|?Preis|?Publikation|mainlabel=-')
-- Artikelinfo
if basistypArtikelinfo[1]['Artikelinfo'] ~= nil
then
returnString = returnString .. '<tr>' -- neue tabellen reihe
returnString = returnString ..'<td>[[' .. queryResult[i][1] .. ']] (' .. basistypArtikelinfo[1]['Artikelinfo'] ..')</td>'
end
-- Bild
if basistypArtikelinfo[1]['Profilbild'] ~= nil
then
-- Vorlage:Vorschaubild.Kreis ggf. als eigene Funktion auslagern wenn öfter notwendig
returnString = returnString .. '<div style="width: 64px; height: 64px; border-radius: 64px; -webkit-border-radius: 640px; -moz-border-radius: 64px; overflow:hidden; float:right; background:lightgray; ">'
returnString = returnString ..'[[Datei:'..basistypArtikelinfo[1]['Profilbild'] .. '|90x90px|verweis='.. queryResult[i][1] ..']]</div>'
end
i = i +1
end
--tabelle schließen
returnString = returnString .. '</table>'
return returnString
end
-- Semantische Abfrage nach Seiten mit diesen Basistyp
local queryResult = mw.smw.ask('[[Basistyp::'..Basistyp .. ']]|?=#|limit=1999') --link=none funktioniert nicht über api abfrage daher ?=#
if queryResult == nil then return nil end -- Wenn query nicht funktionert abbruch: TODO funktionierender alternativer query
-- tabellen kopf
returnString = '<table class="wikitable sortable oben" ><tr><th>' .. Basistyp ..'</th><th>Gehört zu...</th><th>Quellen</th></tr>'
-- loop über query result und erstelle tabelle
local i = 1
while i <= table.getn(queryResult)
do
local basistypArtikelinfo = mw.smw.ask('[[' .. queryResult[i][1] ..']]|?Artikelinfo|?Profilbild|?GehörtZu|?Publikation|mainlabel=-')
-- um fehler zu vermeiden,jeweils auf nil prüfen
-- Artikelinfo
if basistypArtikelinfo[1]['Artikelinfo'] ~= nil
then
returnString = returnString .. '<tr>' -- neue tabellen reihe
returnString = returnString ..'<td>[[' .. queryResult[i][1] .. ']] (' .. basistypArtikelinfo[1]['Artikelinfo'] ..')</td>'
end
-- Bild und GehoertZu
returnString = returnString .. '<td>'
--Bild
if basistypArtikelinfo[1]['Profilbild'] ~= nil
then
-- Vorlage:Vorschaubild.Kreis ggf. als eigene Funktion auslagern wenn öfter notwendig
returnString = returnString .. '<div style="width: 64px; height: 64px; border-radius: 64px; -webkit-border-radius: 640px; -moz-border-radius: 64px; overflow:hidden; float:right; background:lightgray; ">'
returnString = returnString ..'[[Datei:'..basistypArtikelinfo[1]['Profilbild'] .. '|90x90px|verweis='.. queryResult[i][1] ..']]</div>'
end
--GehoertZu
if basistypArtikelinfo[1]['GehörtZu'] ~= nil
then
--Wenn table loop über die GehörtZu angaben
if (type(basistypArtikelinfo[1]['GehörtZu']) == "table")
then
n = 1
while n <= table.getn(basistypArtikelinfo[1]['GehörtZu'])
do
returnString = returnString .. basistypArtikelinfo[1]['GehörtZu'][n]
if n < table.getn(basistypArtikelinfo[1]['GehörtZu'])
then
returnString = returnString ..", "
end
n = n + 1
end
else -- nur ein GehoertZu und damit keine tabelle sondern ein string
returnString = returnString .. basistypArtikelinfo[1]['GehörtZu']
end
end
returnString = returnString .. '</td>'
--Quellen
returnString = returnString .. '<td>'
if basistypArtikelinfo[1]['Publikation'] ~= nil
then
if (type(basistypArtikelinfo[1]['Publikation']) == "table")
then
n = 1
while n <= table.getn(basistypArtikelinfo[1]['Publikation'])
do
returnString = returnString .. basistypArtikelinfo[1]['Publikation'][n]
if n < table.getn(basistypArtikelinfo[1]['Publikation'])
then
returnString = returnString ..", "
end
n = n + 1
end
else
returnString = returnString .. basistypArtikelinfo[1]['Publikation']
end
end
returnString = returnString .. '</td>'
i = i + 1
end
--tabelle schließen
returnString = returnString .. '</table>'
return returnString
end
return p