Modul:NeoWikiLink
Das Modul liest Werte aus NeoWiki und gibt sie als gewöhnliche interne Wikilinks aus. Es verändert weder NeoWiki-Daten noch SMW-Annotationen oder die Eingabemaske im Reiter „Daten“.
Aufruf
Ein Feld des Hauptsubjekts der aktuellen Seite:
{{#invoke:NeoWikiLink|link|Urheber}}
Ein bestimmtes Subjekt, unabhängig von dessen Speicherort:
{{#invoke:NeoWikiLink|link|Urheber|subject=sF1Bf9yXAGnAwj1}}
{{#invoke:NeoWikiLink|link|Werkform|subject=sF1Bf9yXAGnAwj1}}
Das Hauptsubjekt einer anderen Seite:
{{#invoke:NeoWikiLink|link|Urheber|seite=Subject:sF1Bf9yXAGnAwj1}}
Parameter
| Parameter | Bedeutung |
|---|---|
| 1 oder feld | Name des NeoWiki-Felds. |
| subject oder subjekt | Optional: Subjekt-ID. Hat Vorrang vor der Seitenangabe. |
| page oder seite | Optional: Seite, deren Hauptsubjekt gelesen wird. Ohne Subjekt- und Seitenangabe gilt die aktuelle Seite. |
| namensraum | Optional: vorangestellter Namensraum, etwa Person oder Werk. Ohne Angabe wird der Feldwert selbst als Seitentitel verwendet. |
| anzeige | Optional: abweichender Linktext; gilt bei mehreren Werten für jeden Link. |
| trenner | Optional: Trennung mehrerer Werte. Vorgabe: Komma und Leerzeichen. |
Alle Werte eines mehrwertigen Felds werden einzeln verlinkt. Auswahlfelder liefern die lesbare Optionsbezeichnung. Fehlende oder leere Werte ergeben keine Ausgabe. Nicht vorhandene Zielseiten ergeben normale rote Links. Kategorie- und Dateiseiten werden verlinkt, ohne Kategorien zu setzen oder Dateien einzubetten. Ungültige oder externe Seitentitel werden mit einer Fehlermeldung zurückgewiesen.
Bei Relationsfeldern wird die von NeoWiki gelieferte Anzeigenbezeichnung als Wikiseitentitel verwendet; dies ist keine Auflösung auf die Speicherseite des verknüpften Subjekts.
Das Modul stellt keine dauerhafte Zuordnung zwischen einer Werkseite und einem separat gespeicherten Subjekt her. Dafür kann die Subjekt-ID im Aufruf angegeben werden.
Beispiel mit Namensraum
{{#invoke:NeoWikiLink|link|Urwerk|subject=sF1Bf9yXAGnAwj1|namensraum=Werk}}
-- Verlinkt NeoWiki-Feldwerte mit normalen Wikiseiten.
-- Aufruf: {{#invoke:NeoWikiLink|link|Urheber|subject=s...}}
-- Ohne subject/seite wird das Hauptsubjekt der aktuellen Seite gelesen.
local p = {}
local function trim(value)
if value == nil then return nil end
local result = mw.text.trim(tostring(value))
if result == '' then return nil end
return result
end
function p.link(frame)
local args = frame.args
local property = trim(args[1]) or trim(args.feld)
if not property then
error('NeoWikiLink: Feldname fehlt.', 0)
end
local nw = require('mw.neowiki')
local options = {}
options.subject = trim(args.subject) or trim(args.subjekt)
options.page = trim(args.page) or trim(args.seite)
local values = nw.getAll(property, options) or {}
local prefix = trim(args.namensraum)
local label = trim(args.anzeige)
local links = {}
for _, value in ipairs(values) do
local text = trim(value)
if text then
local target = prefix and (prefix .. ':' .. text) or text
-- Keine Daten als Wikitext oder externe Links interpretieren.
if target:find('[%[%]{}|<>\n\r]') or target:sub(1, 1) == ':' then
error('NeoWikiLink: Ungültiges Linkziel im Feld ' .. property .. '.', 0)
end
local title = mw.title.new(target)
if not title or title.isExternal then
error('NeoWikiLink: Ungültiger oder externer Seitentitel im Feld ' .. property .. '.', 0)
end
links[#links + 1] = '[[:' .. title.prefixedText .. '|' ..
mw.text.nowiki(label or text) .. ']]'
end
end
return table.concat(links, args.trenner or ', ')
end
return p