Zum Inhalt springen

Modul:MagicWords

Aus Wikonia


Modul:MagicWords – Automatische Einbindung von Magic Words[Quelltext bearbeiten]

Dieses Modul dient der standardisierten, automatischen Einbindung von MediaWiki Magic Words und Variablen in Artikeln. Es ermöglicht eine zentrale Wartung der Definitionen und markiert automatisch als veraltet definierte Einträge mit einer Wartungskategorie.

Datengrundlage[Quelltext bearbeiten]

Alle Magic Words, Common Names und ihr Unterstützungsstatus sind in der ausgelagerten Tabelle Modul:MagicWords/Data definiert. Die Daten werden über mw.loadData geladen und sind somit hochgradig gecacht.

Verfügbare Funktionen[Quelltext bearbeiten]

Das Modul bietet zwei Funktionen, die über {{#invoke:MagicWords|Funktionsname}} aufgerufen werden:

Funktion Zweck Input Output
getLookupValues Gibt die reinen Daten aus der Lookup-Tabelle als String aus (zur Validierung oder Dokumentation). Komma-separierte Liste der Common Names. Zeilenweise formatierte Strings.
renderMagicWords Rendert die tatsächlichen Magic Words für die Artikeleinbindung. Komma-separierte Liste der Common Names. Zeilenweise Wikitext-Ausgabe.
Inklusive Wartungskategorie für veraltete Einträge.


1. Funktion: getLookupValues (Datenabfrage)[Quelltext bearbeiten]

Diese Funktion zeigt die in der Datentabelle hinterlegten Werte an.

Syntax[Quelltext bearbeiten]

{{#invoke:MagicWords|getLookupValues|Common Name 1, Common Name 2, ...}}

Beispiel [Wikitext][Quelltext bearbeiten]

{{#invoke:MagicWords|getLookupValues|Jahr, Seitenname, AnzahlViews}}

Beispiel (Resultat [Lua])[Quelltext bearbeiten]

Common Name: Jahr, Magic Word: {{CURRENTYEAR}}, Supported: true
Common Name: Seitenname, Magic Word: {{PAGENAME}}, Supported: true
Common Name: AnzahlViews, Magic Word: {{NUMBEROFVIEWS}}, Supported: false


2. Funktion: renderMagicWords (Artikeleinbindung)[Quelltext bearbeiten]

Rendert die tatsächlichen Magic Words. Die Ausgabe erfolgt zeilenweise, da dies für Verhaltensschalter (__NOTOC__) oft notwendig ist.

Wartungslogik[Quelltext bearbeiten]

Wenn ein Magic Word in der Datentabelle den Status false (nicht unterstützt/veraltet) hat, wird die Wartungskategorie Kategorie:Veraltete MagicWords-Definition automatisch in den Artikel eingebunden.

Syntax[Quelltext bearbeiten]

{{#invoke:MagicWords|renderMagicWords|Common Name 1, Common Name 2, ...}}

Beispiel (Wikitext)[Quelltext bearbeiten]

{{#invoke:MagicWords|renderMagicWords|AnzahlViews, Nicht_Indexieren, Tag1Stellig}}

Beispiel (Resultat im Artikel)[Quelltext bearbeiten]

{{NUMBEROFVIEWS}}
[[Kategorie:Veraltete MagicWords-Definition]]
__NOINDEX__
{{CURRENTDAY}}


3. Datenstruktur (Modul:MagicWords/Data)[Quelltext bearbeiten]

Die folgende Tabelle zeigt einen Auszug der im Datenmodul hinterlegten Common Names und Magic Words. Der Status Supported (true/false) steuert die Wartungskategorie.

Common Name Magic Word / Variable Supported Kategorie
1. Verhaltensschalter
Kein_Inhaltsverzeichnis __NOTOC__ true Steuerung
Nicht_Indexieren __NOINDEX__ true Indexierung
Keine_Titelkonvertierung __NOTITLECONVERT__ false Sprachkonvertierung (Veraltet)
Archiv __ARCHIVEDTALK__ false Diskussionsseitenarchive (benötigt DiscussionTools)
2. Variablen
Jahr {{CURRENTYEAR}} true Zeit/Datum
Monatsname {{CURRENTMONTHNAME}} true Zeit/Datum
Seitenname {{PAGENAME}} true Seiteninformation
AnzahlViews {{NUMBEROFVIEWS}} false Statistik (Mit Mediawiki 1.25 deaktiviert)
SiteName {{SITENAME}} true Site-Information
3. Parserfunktionen
DefaultSortierSchlüssel {{DEFAULTSORT:}} true Formatierung
Bedingter_Ausdruck {{#ifexpr:}} true ParserFunctions

… für die vollständige Liste → Siehe: Modul:MagicWords/Data .


-- Modul:MagicWords
-- Dient der sicheren Einbindung von MediaWiki-Magic-Words anhand eines Namensmappings.
-- Unterstützt Komma-separierte Eingabe und gibt alle Magic Words zeilenweise zurück.

local p = {}

-- Lade die Daten aus der /Data-Unterseite
local ok, data = pcall(mw.loadData, 'Modul:MagicWords/Data')
local magic_words_data = ok and data or {}

local MAINTENANCE_CATEGORY = "[[Kategorie:Veraltete MagicWords-Definition]]"

-- Hilfsfunktion zum Verarbeiten der Eingabeliste
local function processInput(args_string)
    local args = args_string or ""
    -- Zerlege den String in eine Tabelle und entferne Leerzeichen
    local names = mw.text.split(args, ',')
    local trimmed_names = {}
    for _, name in ipairs(names) do
        local trimmed = mw.text.trim(name)
        if trimmed ~= "" then
            table.insert(trimmed_names, trimmed)
        end
    end
    return trimmed_names
end

---
-- Gibt nur die Listenwerte aus der Lookup-Tabelle zurück.
-- Die Ausgabe erfolgt zeilenweise.
---
function p.getLookupValues(frame)
    local input = frame.args[1] or frame:getParent().args[1]
    local common_names = processInput(input)
    local result = {}

    for _, name in ipairs(common_names) do
        local entry = magic_words_data[name]
        
        if entry then
            local magic_word, supported = unpack(entry)
            table.insert(result, string.format("Common Name: %s, Magic Word: %s, Supported: %s", 
                name, magic_word, tostring(supported)))
        else
             -- Für nicht gefundene Namen
             table.insert(result, "")
        end
    end
    
    -- Ausgabe muss zeilenweise erfolgen (\n)
    return table.concat(result, "\n")
end

---
-- Rendert den Inhalt für die Artikeleinbindung.
-- Fügt bei 'supported = false' die Wartungskategorie hinzu.
-- Die Ausgabe erfolgt zeilenweise.
---
function p.renderMagicWords(frame)
    local input = frame.args[1] or frame:getParent().args[1]
    local common_names = processInput(input)
    local output = {}

    for _, name in ipairs(common_names) do
        local entry = magic_words_data[name]
        
        if entry then
            local magic_word, supported = unpack(entry)
            
            -- Füge das Magic Word hinzu
            table.insert(output, magic_word)
            
            -- Prüfe, ob das Wort nicht unterstützt wird (veraltet)
            if not supported then
                table.insert(output, MAINTENANCE_CATEGORY) 
            end
        else
             -- Für unbekannte Namen (optional eine versteckte Meldung oder Kategorie)
             table.insert(output, "")
        end
    end
    
    -- Ausgabe soll zeilenweise erfolgen (\n)
    return table.concat(output, "\n") .. "\n"
end

function p.splitList(args)
    return processInput(args)
end

return p