Modul:NeoWiki
Erscheinungsbild
Die Dokumentation für dieses Modul kann unter Modul:NeoWiki/Doku erstellt werden
-- Durchlauf 1: Einzelabfragen; SMW-Test ausschließlich mit Klassenzuordnung.
local api = require('Modul:NeoWiki/API')
local p = {}
local function trim(value)
if value == nil then return nil end
value = mw.text.trim(tostring(value))
return value ~= '' and value or nil
end
local function options(frame)
local a = frame.args
local origin = trim(a.herkunft) or 'alle'
local origins = { alle = 'all', eigene = 'own', abgerufen = 'external' }
if not origins[origin] then error('NeoWiki: Unbekannte Herkunft.', 0) end
return { field = trim(a[1]) or trim(a.feld), page = trim(a.seite),
subject = trim(a.subjekt), language = trim(a.sprache), origin = origins[origin] }
end
local function literal(value)
return mw.text.nowiki(tostring(value))
end
function p.werte(frame)
local o = options(frame)
if not o.field then error('NeoWiki: Feldname fehlt.', 0) end
local result, values, seen = api.collect(o), {}, {}
for _, field in ipairs(result.fields) do
for _, value in ipairs(field.values) do
if not seen[value.value] then
seen[value.value] = true
values[#values + 1] = literal(value.value)
end
end
end
return table.concat(values, frame.args.trenner or ', ')
end
function p.wert(frame)
local o = options(frame)
if not o.field then error('NeoWiki: Feldname fehlt.', 0) end
local result = api.collect(o)
local index = tonumber(frame.args.index or '1')
if not index or index < 1 or index ~= math.floor(index) then
error('NeoWiki: Index muss eine positive ganze Zahl sein.', 0)
end
local unique, seen = {}, {}
for _, field in ipairs(result.fields) do
for _, value in ipairs(field.values) do
if not seen[value.value] then
seen[value.value] = true
unique[#unique + 1] = value.value
end
end
end
return unique[index] and literal(unique[index]) or ''
end
function p.label(frame)
local o = options(frame)
if not o.field then error('NeoWiki: Feldname fehlt.', 0) end
-- Label-Abfrage benötigt keinen externen Wertabruf.
o.origin = 'own'
local result = api.collect(o)
return result.fields[1] and literal(result.fields[1].name) or ''
end
function p.annotieren(frame)
-- Absichtlich immer Hauptsubjekt der aktuellen Seite, keine fremden Seiten.
-- Zuerst alle Daten sammeln und prüfen; erst danach SMW aufrufen.
local result = api.collect({ field = 'Klassenzuordnung', origin = 'external' })
local rows = {}
for _, field in ipairs(result.fields) do
if field.name:find('::', 1, true) or field.name:find('[=|%[%]{}<>\r\n]') then
error('NeoWiki: Unzulässiger SMW-Eigenschaftsname.', 0)
end
local seen = {}
for _, value in ipairs(field.values) do
if not seen[value.value] then
seen[value.value] = true
rows[#rows + 1] = field.name .. '=' .. literal(value.value)
end
end
end
local output = {}
for _, row in ipairs(rows) do
output[#output + 1] = frame:callParserFunction{
name = '#set', args = { row }
} or ''
end
return table.concat(output)
end
return p