Modul:Quelleninformationen

Aus Splitterwiki
Version vom 16. Mai 2025, 09:39 Uhr von Stewie (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Die Dokumentation für dieses Modul kann unter Modul:Quelleninformationen/Doku erstellt werden

--[[
Lua-Modul zur Darstellung von Quellenangaben eines Artikels
-----------------------------------------------
Dieses Modul fragt alle *Unterobjekte* des aktuellen Artikels ab, die dem Typ „Quellenverzeichnis“ entsprechen.
Diese enthalten strukturierte Informationen wie:
- Publikation (z. B. ein Quellenbuch)
- Seitenzahl(en) innerhalb dieser Publikation

Voraussetzung ist, dass für einen Artikel Unterobjekte vom Typ `Quellenverzeichnis` existieren,
die über `-Hat Unterobjekt::Seitentitel` mit dem Hauptartikel verknüpft sind.

Verwendung: 
  local QuellenModul = require('Modul:Quelleninformationen')
  QuellenModul.getQuellen({ args = { Pagename = "Diamantpfeil" } })

Gibt einen HTML-String mit aufbereiteten Quelleninformationen zurück.
--]]

local p = {} -- p steht für das Lua-"package", in dem alle Funktionen gespeichert werden

function p.getQuellen(frame)
	-- Schritt 1: Hole den Artikelnamen aus dem Frame-Argument
	local arg = frame.args['Pagename']
	if arg == nil then return nil end -- Falls kein Artikeltitel angegeben ist, abbrechen

	local returnString = "" -- Ergebnis-String für Ausgabe

	-- Schritt 2: Finde alle Unterobjekte vom Typ „Quellenverzeichnis“, die zu diesem Artikel gehören
	-- Dazu verwenden wir zwei semantische Bedingungen:
	--   * [[Subobject Type::Quellenverzeichnis]] → nur Quellen-Unterobjekte
	--   * [[-Hat Unterobjekt::Artikelname]] → die zugehörig zum angegebenen Artikel sind
	-- `|?=#|format=array` → liefert nur die Seitennamen als Array, keine weiteren Daten
	local queryResult = mw.smw.ask(
		'[[Subobject Type::Quellenverzeichnis]][[-Hat Unterobjekt::' .. arg .. ']]' ..
		'|?=#|limit=1999|format=array|'
	)

	-- Falls keine Treffer, Rückgabe bleibt leer
	if not queryResult then return nil end

	-- Schritt 3: Für jedes gefundene Unterobjekt Details abfragen
	local i = 1
	while i <= #queryResult do
		local subobjectTitle = queryResult[i][1] -- Name des Unterobjekts (z. B. „Diamantpfeil#Quellenverzeichnis zu X“)

		-- Zweite Abfrage: Holen der Properties des Unterobjekts selbst
		local queryQuelle = mw.smw.ask(
			string.format('[[%s]]|?Quelleninformationen|?Publikation|mainlabel=-', subobjectTitle)
		)

		-- Sicherheit: Nur verarbeiten, wenn tatsächlich etwas zurückkam
		if queryQuelle and queryQuelle[1] then
			-- Ausgabe beginnt mit dem Publikationstitel
			returnString = returnString .. (queryQuelle[1]['Publikation'] or "Unbekannt") .. ":"

			-- Seitenangaben verarbeiten
			local seiten = queryQuelle[1]['Quelleninformationen']
			if not seiten then
				returnString = returnString .. "(ohne Angaben)" -- Wenn keine Seitenzahl vorhanden
			elseif type(seiten) == "table" then
				-- Falls mehrere Seiten (z. B. durch Mehrfachzuweisung)
				returnString = returnString .. " : "
				for _, seite in ipairs(seiten) do
					returnString = returnString .. seite .. ","
				end
			else
				-- Einzelne Seitenzahl
				returnString = returnString .. "&#32;" .. seiten
			end

			returnString = returnString .. "<br>"
		end

		i = i + 1
	end

	return returnString -- HTML-Ausgabe fertig
end

return p