Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
(105 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
local buch = {} | local buch = {} | ||
local getArgs = require('Module:Arguments').getArgs | |||
local helper = require("Modul:Publikation/Helper") | |||
local related = require("Modul:Publikation/Related") | |||
- | -- Funktion zur Generierung von Kategorien | ||
local function | local function addCategories(args) | ||
if | local categories = "" | ||
-- Kategorie "Bücher" | |||
categories = categories .. "[[Kategorie:Bücher]]\n" | |||
-- Kategorie "Alle Publikationen" | |||
categories = categories .. "[[Kategorie:Alle Publikationen]]\n" | |||
-- Kategorie für Genre | |||
if args["Genre"] and args["Genre"] ~= "" then | |||
for genre in mw.text.gsplit(args["Genre"], ",") do | |||
genre = mw.text.trim(genre) | |||
categories = categories .. "[[Category:" .. genre .. "]]\n" | |||
end | |||
end | |||
-- Kategorie für Sprache | |||
if args["Sprache"] and args["Sprache"] ~= "" then | |||
categories = categories .. "[[Category:" .. args["Sprache"] .. "|" .. args["Sprache"] .. "]]\n" | |||
end | end | ||
-- Kategorie für Verlag | |||
if args["Verlag"] and args["Verlag"] ~= "" then | |||
categories = categories .. "[[Category:" .. args["Verlag"] .. "|" .. args["Verlag"] .. "]]\n" | |||
end | |||
-- Kategorie für Serie | |||
if args["Hat Serie"] and args["Hat Serie"] ~= "" then | |||
categories = categories .. "[[Category:Serie:" .. args["Hat Serie"] .. "|" .. args["Hat Serie"] .. "]]\n" | |||
end | |||
if | -- Kategorie für Autor(en) | ||
for | if args["Autor"] and args["Autor"] ~= "" then | ||
for author in mw.text.gsplit(args["Autor"], ",") do | |||
author = mw.text.trim(author) | |||
categories = categories .. "[[Category:Autor:" .. author .. "|" .. author .. "]]\n" | |||
end | end | ||
end | end | ||
return | -- Kategorie für Standort | ||
if args["Standort"] and args["Standort"] ~= "" then | |||
categories = categories .. "[[Category:Standort:" .. args["Standort"] .. "|" .. args["Standort"] .. "]]\n" | |||
end | |||
return categories | |||
end | end | ||
-- | function buch.render(frame) | ||
local args = getArgs(frame) -- Argumente aus dem Frame extrahieren | |||
local output = '<table class="publikation buch">' | local output = "" -- Initialisierung von output | ||
-- Setze den DISPLAYTITLE basierend auf dem Titel des Buches | |||
if args["Titel"] then | |||
helper.setDisplayTitle({title = args["Titel"]}) | |||
end | |||
-- Setze das semantische Attribut "Hat Serie", falls es definiert ist | |||
if args["Hat Serie"] and args["Hat Serie"] ~= "" then | |||
helper.setProperty({ args = { ["Hat Serie"] = args["Hat Serie"] } }) | |||
end | |||
-- Setze die Inhaltszusammenfassung als semantischen Wert | |||
if args["Inhaltszusammenfassung"] and args["Inhaltszusammenfassung"] ~= "" then | |||
local rawSummary = mw.text.unstripNoWiki(args["Inhaltszusammenfassung"]):gsub("<.->", ""):gsub("%[%[.-%]%]", ""):gsub("%{.-%}", "") -- Entferne HTML-Tags und MediaWiki-Markierungen, bewahre geschützte Bereiche wie <nowiki> | |||
local truncatedSummary = mw.ustring.sub(rawSummary, 1, 80) -- Begrenze auf 80 Zeichen | |||
helper.setProperty({ args = { ["Inhaltszusammenfassung"] = truncatedSummary } }) -- Setze den semantischen Wert | |||
mw.ext.seo.set{description = truncatedSummary} -- Setze die Beschreibung | |||
end | |||
-- OpenGraph-Bild für SEO | |||
local coverImage = args["Coverbild"] or "DefaultBuchCover.webp" | |||
mw.ext.seo.set{["og:image"] = mw.uri.fullUrl("File:Library:Cover:" .. coverImage)} | |||
-- Seitentitel für SEO | |||
if args["Titel"] then | |||
mw.ext.seo.set{title = args["Titel"], title_mode = "replace"} | |||
end | |||
-- Erstelle die Ausgabe | |||
output = output .. '<table class="publikation buch table">' | |||
-- Coverbild | |||
output = output .. '<tr><td colspan="2" style="text-align: center;">' .. helper.getCoverImage({cover = args["Coverbild"], defaultCover = "DefaultBuchCover.webp"}) .. '</td></tr>' | |||
-- Titel | -- Titel | ||
output = output .. '<tr><td><strong>Titel</strong></td><td>[[Hat Titel::' .. (args["Titel"] or "Unbekannt") .. ']]</td></tr>' | |||
output = output .. '<tr><td><strong>Titel</strong></td><td>[[ | |||
-- Original Titel | |||
if args["Original Titel"] and args["Original Titel"] ~= "" then | |||
output = output .. '<tr><td><strong>Original Titel</strong></td><td>[[Original Titel::' .. args["Original Titel"] .. ']]</td></tr>' | |||
end | |||
-- | -- Autoren mit separater semantischer Speicherung und Links | ||
if args["Autor"] then | |||
output = output .. '<tr><td><strong>Autor(en)</strong></td><td>' | |||
for author in mw.text.gsplit(args["Autor"], ",") do | |||
author = mw.text.trim(author) | |||
local authorPage = "Library:Autor:" .. author:gsub(" ", "_") | |||
helper.setProperty({ args = { ["Hat Autor"] = author } }) -- Semantischen Wert setzen | |||
output = output .. '[[' .. authorPage .. '|' .. author .. ']], ' -- Link erstellen | |||
end | |||
output = output:sub(1, -3) .. '</td></tr>' -- Entfernt das letzte Komma | |||
end | |||
-- Verlag | |||
if args["Verlag"] then | |||
output = output .. '<tr><td><strong>Verlag</strong></td><td>[[Verlag::' .. args["Verlag"] .. ']]</td></tr>' | |||
end | |||
-- Band und Serie | |||
if args["Band"] then | |||
local seriesID = args["SerienID"] | |||
local bandText = args["Band"] | |||
helper.setProperty({ args = { ["Band"] = args["Band"] } }) -- Semantischen Wert setzen | |||
if seriesID then | |||
local seriesPageTitle = helper.getSeriesPageTitle({ args = { SerienID = seriesID } }) | |||
local completeVolumes = "Keine Ergebnisse gefunden." | |||
if seriesPageTitle ~= "Keine Ergebnisse gefunden." then | |||
completeVolumes = helper.getCompleteVolumesByTitle({ args = { seriesPageTitle, "Complete volumes" } }) | |||
end | |||
bandText = bandText .. " von " .. (completeVolumes or "?") .. ' ([[' .. mw.uri.anchorEncode(seriesPageTitle) .. '|' .. (args["Hat Serie"] or "Serie") .. "]])" | |||
end | |||
output = output .. '<tr><td><strong>Band</strong></td><td>' .. bandText .. '</td></tr>' | |||
end | |||
-- Erscheinungsjahr | |||
if args["Erscheinungsjahr"] then | |||
output = output .. '<tr><td><strong>Erscheinungsjahr</strong></td><td>[[Erscheinungsjahr::' .. args["Erscheinungsjahr"] .. ']]</td></tr>' | |||
end | |||
-- ISBN | |||
if args["ISBN-10"] or args["ISBN-13"] then | |||
local isbn10 = helper.getIsbnLink({ isbn = args["ISBN-10"], version = "ISBN-10" }) | |||
local isbn13 = helper.getIsbnLink({ isbn = args["ISBN-13"], version = "ISBN-13" }) | |||
output = output .. '<tr><td><strong>ISBN</strong></td><td>' .. isbn10 .. (isbn10 ~= "" and isbn13 ~= "" and " / " or "") .. isbn13 .. '</td></tr>' | |||
end | |||
-- Sprache | |||
if args["Sprache"] then | |||
output = output .. '<tr><td><strong>Sprache</strong></td><td>[[Sprache::' .. args["Sprache"] .. ']]</td></tr>' | |||
end | |||
-- Standort | |||
if args["Standort"] then | |||
output = output .. '<tr><td><strong>Standort</strong></td><td>[[Standort::' .. args["Standort"] .. ']]</td></tr>' | |||
end | |||
-- Umfang (Seitenanzahl) | |||
if args["Umfang"] then | |||
output = output .. '<tr><td><strong>Umfang</strong></td><td>[[Umfang::' .. args["Umfang"] .. ']] Seiten</td></tr>' | |||
end | |||
-- Preis | |||
if args["Preis"] then | |||
output = output .. '<tr><td><strong>Preis</strong></td><td>[[Preis::' .. args["Preis"] .. ']]</td></tr>' | |||
end | |||
-- Genre (Mehrfachwerte als Liste) | |||
if args["Genre"] and args["Genre"] ~= "" then | |||
output = output .. '<tr><td><strong>Genre</strong></td><td>' | |||
for genre in mw.text.gsplit(args["Genre"], ",") do | |||
genre = mw.text.trim(genre) -- Entfernt führende/trailing Whitespaces | |||
output = output .. '[[Genre::' .. genre .. ']], ' | |||
end | |||
output = output:sub(1, -3) .. '</td></tr>' -- Entfernt das letzte Komma | |||
end | |||
-- Inhaltszusammenfassung | |||
if args["Inhaltszusammenfassung"] then | |||
output = output .. '<tr><td><strong>Inhaltszusammenfassung</strong></td><td>' .. args["Inhaltszusammenfassung"] .. '</td></tr>' | |||
end | |||
output = output .. '</table>' | |||
-- Weitere Bücher in der Serie (unterhalb der Tabelle) | |||
if args["Hat Serie"] then | if args["Hat Serie"] then | ||
local | local relatedBooks = related.buchRelated({ | ||
output = output .. '< | series = args["Hat Serie"], | ||
limit = 5 | |||
}) | |||
output = output .. '<div class="related-books">' .. | |||
'<h2>Weitere Bücher in der Serie:</h2>' .. | |||
(relatedBooks or "<p>Keine weiteren Bände verfügbar.</p>") .. | |||
'</div>' | |||
end | end | ||
output = output .. | -- Kategorien hinzufügen | ||
output = output .. addCategories(args) | |||
return output | return output | ||
end | end | ||
return buch | return buch |
Aktuelle Version vom 24. November 2024, 15:18 Uhr
Die Dokumentation für dieses Modul kann unter Modul:Publikation/Buch/Doku erstellt werden
local buch = {}
local getArgs = require('Module:Arguments').getArgs
local helper = require("Modul:Publikation/Helper")
local related = require("Modul:Publikation/Related")
-- Funktion zur Generierung von Kategorien
local function addCategories(args)
local categories = ""
-- Kategorie "Bücher"
categories = categories .. "[[Kategorie:Bücher]]\n"
-- Kategorie "Alle Publikationen"
categories = categories .. "[[Kategorie:Alle Publikationen]]\n"
-- Kategorie für Genre
if args["Genre"] and args["Genre"] ~= "" then
for genre in mw.text.gsplit(args["Genre"], ",") do
genre = mw.text.trim(genre)
categories = categories .. "[[Category:" .. genre .. "]]\n"
end
end
-- Kategorie für Sprache
if args["Sprache"] and args["Sprache"] ~= "" then
categories = categories .. "[[Category:" .. args["Sprache"] .. "|" .. args["Sprache"] .. "]]\n"
end
-- Kategorie für Verlag
if args["Verlag"] and args["Verlag"] ~= "" then
categories = categories .. "[[Category:" .. args["Verlag"] .. "|" .. args["Verlag"] .. "]]\n"
end
-- Kategorie für Serie
if args["Hat Serie"] and args["Hat Serie"] ~= "" then
categories = categories .. "[[Category:Serie:" .. args["Hat Serie"] .. "|" .. args["Hat Serie"] .. "]]\n"
end
-- Kategorie für Autor(en)
if args["Autor"] and args["Autor"] ~= "" then
for author in mw.text.gsplit(args["Autor"], ",") do
author = mw.text.trim(author)
categories = categories .. "[[Category:Autor:" .. author .. "|" .. author .. "]]\n"
end
end
-- Kategorie für Standort
if args["Standort"] and args["Standort"] ~= "" then
categories = categories .. "[[Category:Standort:" .. args["Standort"] .. "|" .. args["Standort"] .. "]]\n"
end
return categories
end
function buch.render(frame)
local args = getArgs(frame) -- Argumente aus dem Frame extrahieren
local output = "" -- Initialisierung von output
-- Setze den DISPLAYTITLE basierend auf dem Titel des Buches
if args["Titel"] then
helper.setDisplayTitle({title = args["Titel"]})
end
-- Setze das semantische Attribut "Hat Serie", falls es definiert ist
if args["Hat Serie"] and args["Hat Serie"] ~= "" then
helper.setProperty({ args = { ["Hat Serie"] = args["Hat Serie"] } })
end
-- Setze die Inhaltszusammenfassung als semantischen Wert
if args["Inhaltszusammenfassung"] and args["Inhaltszusammenfassung"] ~= "" then
local rawSummary = mw.text.unstripNoWiki(args["Inhaltszusammenfassung"]):gsub("<.->", ""):gsub("%[%[.-%]%]", ""):gsub("%{.-%}", "") -- Entferne HTML-Tags und MediaWiki-Markierungen, bewahre geschützte Bereiche wie <nowiki>
local truncatedSummary = mw.ustring.sub(rawSummary, 1, 80) -- Begrenze auf 80 Zeichen
helper.setProperty({ args = { ["Inhaltszusammenfassung"] = truncatedSummary } }) -- Setze den semantischen Wert
mw.ext.seo.set{description = truncatedSummary} -- Setze die Beschreibung
end
-- OpenGraph-Bild für SEO
local coverImage = args["Coverbild"] or "DefaultBuchCover.webp"
mw.ext.seo.set{["og:image"] = mw.uri.fullUrl("File:Library:Cover:" .. coverImage)}
-- Seitentitel für SEO
if args["Titel"] then
mw.ext.seo.set{title = args["Titel"], title_mode = "replace"}
end
-- Erstelle die Ausgabe
output = output .. '<table class="publikation buch table">'
-- Coverbild
output = output .. '<tr><td colspan="2" style="text-align: center;">' .. helper.getCoverImage({cover = args["Coverbild"], defaultCover = "DefaultBuchCover.webp"}) .. '</td></tr>'
-- Titel
output = output .. '<tr><td><strong>Titel</strong></td><td>[[Hat Titel::' .. (args["Titel"] or "Unbekannt") .. ']]</td></tr>'
-- Original Titel
if args["Original Titel"] and args["Original Titel"] ~= "" then
output = output .. '<tr><td><strong>Original Titel</strong></td><td>[[Original Titel::' .. args["Original Titel"] .. ']]</td></tr>'
end
-- Autoren mit separater semantischer Speicherung und Links
if args["Autor"] then
output = output .. '<tr><td><strong>Autor(en)</strong></td><td>'
for author in mw.text.gsplit(args["Autor"], ",") do
author = mw.text.trim(author)
local authorPage = "Library:Autor:" .. author:gsub(" ", "_")
helper.setProperty({ args = { ["Hat Autor"] = author } }) -- Semantischen Wert setzen
output = output .. '[[' .. authorPage .. '|' .. author .. ']], ' -- Link erstellen
end
output = output:sub(1, -3) .. '</td></tr>' -- Entfernt das letzte Komma
end
-- Verlag
if args["Verlag"] then
output = output .. '<tr><td><strong>Verlag</strong></td><td>[[Verlag::' .. args["Verlag"] .. ']]</td></tr>'
end
-- Band und Serie
if args["Band"] then
local seriesID = args["SerienID"]
local bandText = args["Band"]
helper.setProperty({ args = { ["Band"] = args["Band"] } }) -- Semantischen Wert setzen
if seriesID then
local seriesPageTitle = helper.getSeriesPageTitle({ args = { SerienID = seriesID } })
local completeVolumes = "Keine Ergebnisse gefunden."
if seriesPageTitle ~= "Keine Ergebnisse gefunden." then
completeVolumes = helper.getCompleteVolumesByTitle({ args = { seriesPageTitle, "Complete volumes" } })
end
bandText = bandText .. " von " .. (completeVolumes or "?") .. ' ([[' .. mw.uri.anchorEncode(seriesPageTitle) .. '|' .. (args["Hat Serie"] or "Serie") .. "]])"
end
output = output .. '<tr><td><strong>Band</strong></td><td>' .. bandText .. '</td></tr>'
end
-- Erscheinungsjahr
if args["Erscheinungsjahr"] then
output = output .. '<tr><td><strong>Erscheinungsjahr</strong></td><td>[[Erscheinungsjahr::' .. args["Erscheinungsjahr"] .. ']]</td></tr>'
end
-- ISBN
if args["ISBN-10"] or args["ISBN-13"] then
local isbn10 = helper.getIsbnLink({ isbn = args["ISBN-10"], version = "ISBN-10" })
local isbn13 = helper.getIsbnLink({ isbn = args["ISBN-13"], version = "ISBN-13" })
output = output .. '<tr><td><strong>ISBN</strong></td><td>' .. isbn10 .. (isbn10 ~= "" and isbn13 ~= "" and " / " or "") .. isbn13 .. '</td></tr>'
end
-- Sprache
if args["Sprache"] then
output = output .. '<tr><td><strong>Sprache</strong></td><td>[[Sprache::' .. args["Sprache"] .. ']]</td></tr>'
end
-- Standort
if args["Standort"] then
output = output .. '<tr><td><strong>Standort</strong></td><td>[[Standort::' .. args["Standort"] .. ']]</td></tr>'
end
-- Umfang (Seitenanzahl)
if args["Umfang"] then
output = output .. '<tr><td><strong>Umfang</strong></td><td>[[Umfang::' .. args["Umfang"] .. ']] Seiten</td></tr>'
end
-- Preis
if args["Preis"] then
output = output .. '<tr><td><strong>Preis</strong></td><td>[[Preis::' .. args["Preis"] .. ']]</td></tr>'
end
-- Genre (Mehrfachwerte als Liste)
if args["Genre"] and args["Genre"] ~= "" then
output = output .. '<tr><td><strong>Genre</strong></td><td>'
for genre in mw.text.gsplit(args["Genre"], ",") do
genre = mw.text.trim(genre) -- Entfernt führende/trailing Whitespaces
output = output .. '[[Genre::' .. genre .. ']], '
end
output = output:sub(1, -3) .. '</td></tr>' -- Entfernt das letzte Komma
end
-- Inhaltszusammenfassung
if args["Inhaltszusammenfassung"] then
output = output .. '<tr><td><strong>Inhaltszusammenfassung</strong></td><td>' .. args["Inhaltszusammenfassung"] .. '</td></tr>'
end
output = output .. '</table>'
-- Weitere Bücher in der Serie (unterhalb der Tabelle)
if args["Hat Serie"] then
local relatedBooks = related.buchRelated({
series = args["Hat Serie"],
limit = 5
})
output = output .. '<div class="related-books">' ..
'<h2>Weitere Bücher in der Serie:</h2>' ..
(relatedBooks or "<p>Keine weiteren Bände verfügbar.</p>") ..
'</div>'
end
-- Kategorien hinzufügen
output = output .. addCategories(args)
return output
end
return buch