Zum Inhalt springen

Modul:NeoWiki

aus AufEinWort, der freien Forschung
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 1. November 2026 um 19:37 Uhr durch Nikolaos (Diskussion | Beiträge) (AZ: Die Seite wurde neu angelegt: -- 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 ori…). Sie kann sich erheblich von der aktuellen Version unterscheiden.
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

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