Modul:ListeBasistyp: Unterschied zwischen den Versionen

Aus Splitterwiki
Zur Navigation springen Zur Suche springen
 
(62 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
 
--[[
 
--[[
Lua Alternative für Vorlage:Liste Basistyp (in der Hoffnung auf bessere Performance)
+
Lua Alternative für Vorlage:Liste Basistyp - bessere Performance in allen Bereichen
 
erwartet ein basistyp als argument und stellt zugehörigen Seiten da.
 
erwartet ein basistyp als argument und stellt zugehörigen Seiten da.
 
]]--
 
]]--
Zeile 8: Zeile 8:
 
function p.Liste( frame )
 
function p.Liste( frame )
 
local returnString = ""
 
local returnString = ""
local Basistyp = frame.args['Basistyp']
+
local Basistyp = frame.args[1]
 
-- test ob Basistyp leer ist wenn ja, beende hier
 
-- test ob Basistyp leer ist wenn ja, beende hier
 
if Basistyp == nil then return nil end
 
if Basistyp == nil then return nil end
 
-- Todo: test ob argument tatsächlich ein basistyp ist wenn nicht beende hier
 
-- 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>Last</th><th>Verfügbarkeit</th><th>Komplexität</th><th>Quellen</th></tr>'
 +
 +
local i = 1
 +
if queryResult ~= nil then
 +
while i <= table.getn(queryResult)
 +
do
 +
local basistypArtikelinfo = mw.smw.ask('[[' .. queryResult[i][1] ..']]|?Artikelinfo|?Profilbild|?Last|?Preis|?Komplexität|?Verfügbarkeit|?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
 +
returnString = returnString .. '<td>'
 +
--Preis
 +
if basistypArtikelinfo[1]['Preis'] ~= nil
 +
then
 +
returnString = returnString .. basistypArtikelinfo[1]['Preis'] ..'</td>'
 +
end
 +
--Last
 +
returnString = returnString .. '<td>'
 +
if basistypArtikelinfo[1]['Last'] ~= nil
 +
then
 +
returnString = returnString .. basistypArtikelinfo[1]['Last'] ..'</td>'
 +
end
 +
--Verfügbarkeit
 +
returnString = returnString .. '<td>'
 +
if basistypArtikelinfo[1]['Verfügbarkeit'] ~= nil
 +
then
 +
returnString = returnString .. basistypArtikelinfo[1]['Verfügbarkeit'] ..'</td>'
 +
end
 +
--Komplexität
 +
returnString = returnString .. '<td>'
 +
if basistypArtikelinfo[1]['Komplexität'] ~= nil
 +
then
 +
returnString = returnString .. basistypArtikelinfo[1]['Komplexität'] ..'</td>'
 +
end
 +
--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
 +
end
 +
-- Ausbildung benutzt zwei Vorlagen.. Liste.Ausbildung wird nicht gefunden
 +
if Basistyp == "Ausbildung"
 +
then
 +
returnString = returnString .. mw.getCurrentFrame():expandTemplate{title ="Vorlage:Ausbildung.Listen"}
 +
return returnString -- kaputte tabelle vermeiden, funktion hier beenden
 +
end
 
-- Semantische Abfrage nach Seiten mit diesen Basistyp
 
-- Semantische Abfrage nach Seiten mit diesen Basistyp
 
local queryResult =  mw.smw.ask('[[Basistyp::'..Basistyp .. ']]|?=#|limit=1999') --link=none funktioniert nicht über api abfrage daher ?=#
 
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 = 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
 
-- loop über query result und erstelle tabelle
 
local i = 1
 
local i = 1
 
while i <= table.getn(queryResult)
 
while i <= table.getn(queryResult)
 
do
 
do
local basistypArtikelinfo = mw.smw.ask('[[' .. queryResult[i][1] ..']]|?Artikelinfo|?Profilbild|mainlabel=-')
+
local basistypArtikelinfo = mw.smw.ask('[[' .. queryResult[i][1] ..']]|?Artikelinfo|?Profilbild|?GehörtZu|?Publikation|mainlabel=-')
-- um fehler zu vermeiden auf nil prüfen
+
-- um fehler zu vermeiden,jeweils auf nil prüfen
 +
-- Artikelinfo
 
if basistypArtikelinfo[1]['Artikelinfo'] ~= nil
 
if basistypArtikelinfo[1]['Artikelinfo'] ~= nil
 
then
 
then
returnString = returnString ..basistypArtikelinfo[1]['Artikelinfo']
+
returnString = returnString .. '<tr>' -- neue tabellen reihe
 +
returnString = returnString ..'<td>[[' .. queryResult[i][1] .. ']] (' .. basistypArtikelinfo[1]['Artikelinfo'] ..')</td>'
 
end
 
end
 +
-- Bild und GehoertZu
 +
returnString = returnString .. '<td>'
 +
--Bild
 
if basistypArtikelinfo[1]['Profilbild'] ~= nil
 
if basistypArtikelinfo[1]['Profilbild'] ~= nil
 
then
 
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 .. '<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>'
 
returnString = returnString ..'[[Datei:'..basistypArtikelinfo[1]['Profilbild'] .. '|90x90px|verweis='.. queryResult[i][1] ..']]</div>'
 
end
 
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
 
i = i + 1
 
 
end
 
end
 
+
--tabelle schließen
 +
returnString = returnString .. '</table>'
 
     return returnString
 
     return returnString
 
end
 
end
  
 
return p
 
return p

Aktuelle Version vom 4. März 2024, 00:18 Uhr

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>Last</th><th>Verfügbarkeit</th><th>Komplexität</th><th>Quellen</th></tr>'

		local i = 1
		if queryResult ~= nil then
			while i <= table.getn(queryResult)
				do
				local basistypArtikelinfo = mw.smw.ask('[[' .. queryResult[i][1] ..']]|?Artikelinfo|?Profilbild|?Last|?Preis|?Komplexität|?Verfügbarkeit|?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
				returnString = returnString .. '<td>'
				--Preis
				if basistypArtikelinfo[1]['Preis'] ~= nil
					then
						returnString = returnString .. basistypArtikelinfo[1]['Preis'] ..'</td>'
					end
				--Last
				returnString = returnString .. '<td>'
				if basistypArtikelinfo[1]['Last'] ~= nil
					then
						returnString = returnString .. basistypArtikelinfo[1]['Last'] ..'</td>'
					end
				--Verfügbarkeit
				returnString = returnString .. '<td>'
				if basistypArtikelinfo[1]['Verfügbarkeit'] ~= nil
					then
						returnString = returnString .. basistypArtikelinfo[1]['Verfügbarkeit'] ..'</td>'
					end
				--Komplexität
				returnString = returnString .. '<td>'
				if basistypArtikelinfo[1]['Komplexität'] ~= nil
					then
						returnString = returnString .. basistypArtikelinfo[1]['Komplexität'] ..'</td>'
					end
				--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
		end
	-- Ausbildung benutzt zwei Vorlagen.. Liste.Ausbildung wird nicht gefunden
	if Basistyp == "Ausbildung"
		then
			returnString = returnString .. mw.getCurrentFrame():expandTemplate{title ="Vorlage:Ausbildung.Listen"} 
			return returnString -- kaputte tabelle vermeiden, funktion hier beenden
		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 = 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