Die Dokumentation für dieses Modul kann unter Modul:Rätsel Infobox/Doku erstellt werden

--<pre>
local p = {}
local pgN = mw.title.getCurrentTitle().text
local infobox, pData
local categories = {}
local rData = mw.loadData('Modul:RätselDaten')

local flagJP = "[[Datei:JP.svg|15px|link=]] "
local flagUS = "[[Datei:US.svg|15px|link=]] "
local flagEU = "[[Datei:EU.svg|15px|link=]] "

local function getCleanName(pageName) return pageName:match("[^%(]+") end
--local function tt(p1, p2) return "<tt class=\"explain\" title=\"" .. p1 .. "\">" .. p2 .. "</tt>" end
local function tt(p1, p2) return p2 .. "<br />" .. p1 end
local function SpielID() return rData[pgN].spiel end
local function NummerID() return rData[pgN].nr end
local function getTitle() return mw.loadData("Modul:RätselTitel")[pgN] end
local function isEmpty(arg) return not arg or arg == '' end
local function addCategory(cat)
	categories[#categories+1] = "[[Kategorie:" .. cat .. "]]"
	return "[[Kategorie:" .. cat .. "]]"
end

local function getPuzzle()
    local nr = NummerID()
    local game = SpielID()

    if nr == "???" then
        -- Hidden Door
        local hd = {["2"] = 154, ["3"] = 169}
        nr = hd[game]
    end
    pData = mw.loadData("Modul:RätselDaten/" .. game)
    return pData[tonumber(nr)]
end

local getGame = {
    ["1"] = {anz = 135, anzW = "W27", anzWJP = "W52", titel = "Professor Layton und das geheimnisvolle Dorf|Das geheimnisvolle Dorf", kuerzel = "Layton 1"},
    ["2"] = {anz = 153, anzW = "W33", anzWJP = "W52", titel = "Professor Layton und die Schatulle der Pandora|Die Schatulle der Pandora", kuerzel = "Layton 2"},
    ["3"] = {anz = 168, anzW = "W35", anzWJP = "W52", titel = "Professor Layton und die verlorene Zukunft|Die verlorene Zukunft", kuerzel = "Layton 3"},
    ["4"] = {anz = 170, anzW = "W34", anzWJP = "W52", titel = "Professor Layton und der Ruf des Phantoms|Der Ruf des Phantoms", kuerzel = "Layton 4"},
    ["5"] = {anz = 150, titel = "Professor Layton und die Maske der Wunder|Die Maske der Wunder", kuerzel = "Layton 5"},
    ["6"] = {anz = 165, titel = "Professor Layton und das Vermächtnis von Aslant|Das Vermächtnis von Aslant", kuerzel = "Layton 6"},
    ["VS"] = {anz = 82, titel = "Professor Layton vs. Phoenix Wright: Ace Attorney|Layton vs. Wright", kuerzel = "Layton vs. Wright"},
    ["MJ"] = {anz = 170, titel = "Layton’s Mystery Journey: Katrielle und die Verschwörung der Millionäre|Layton’s Mystery Journey", kuerzel = "Layton’s Mystery Journey"}
}

function p.istRaetsel() if isEmpty(rData[pgN]) then return '' else return true end end
function p.Bild() return "[[Datei:PL" .. SpielID() .. "-" .. NummerID() .. ".png|link=]]" end
function p.Name() return getCleanName(pgN) end

function p.Anz() return getGame[SpielID()].anz end
function p.AnzW() return getGame[SpielID()].anzW end
function p.NummerID() return rData[pgN].nr end
function p.SpielID() return rData[pgN].spiel end
function p.NrJP() return rData[pgN].nrJP end
function p.Spiel() return getGame[SpielID()].titel end
function p.Kapitel() return rData[pgN].kapitel end

function p.Ort()
    if not isEmpty(rData[pgN].ort) then
        return "[[" .. rData[pgN].ort .. "]]" .. addCategory("Ort:" .. rData[pgN].ort)
    end
end

function p.Loeser()
    if isEmpty(rData[pgN].loeser) then
        if isEmpty(rData[pgN].nrJP) or isEmpty(rData[pgN].nrUS) then
            return addCategory("Löser fehlt")
        end
    else
        return "[[" .. rData[pgN].loeser .. "]]" .. addCategory("Gelöste Rätsel von " .. rData[pgN].loeser)
    end
end

function p.Vorschau(frame)
    local name = frame.args[1]
    local puzzle = getPuzzle()
    local aNum = tonumber(NummerID())
    local pPrev, pNext
    if aNum then
        pPrev = pData[aNum-1]
        pNext = pData[aNum+1]
        if not pPrev or tonumber(pPrev.nr) ~= aNum-1 then pPrev = nil end
        if not pNext or tonumber(pNext.nr) ~= aNum+1 then pNext = nil end
    end
    if name == "l" and pPrev then
        return "← '''[[" .. pPrev.name .. "|" .. (getCleanName(pPrev.name) or '?') .. "]]'''"
    elseif name == "r" and pNext then
        return "'''[[" .. pNext.name .. "|" .. (getCleanName(pNext.name) or '?') .. "]]''' →"
    end
end

function p.Pikarat()
    local s
    if rData[pgN].pikaratJP then
        s = rData[pgN].pikarat .. "<br />" .. rData[pgN].pikaratJP .. "<sup>JP</sup>"
    else
        if rData[pgN].pikarat then
            s = rData[pgN].pikarat
        end
    end
    if rData[pgN].pikarat then
        return s .. addCategory(rData[pgN].pikarat .. " Pikarat")
    end
end

function p.Typ()
    if not isEmpty(rData[pgN].typ) then
        local cat1 = addCategory("Typ:" .. rData[pgN].typ)
        if not isEmpty(rData[pgN].typ2) then
            local cat2 = cat1 .. addCategory("Typ:" .. rData[pgN].typ2)
            return "[[:Kategorie:Typ:" .. rData[pgN].typ .. '|' .. rData[pgN].typ .."]]/[[:Kategorie:Typ:" .. rData[pgN].typ2 .. '|' .. rData[pgN].typ2 .. "]]" .. cat2
        else
            return "[[:Kategorie:Typ:" .. rData[pgN].typ .. '|' .. rData[pgN].typ .. "]]" .. cat1
        end
    end
end

function p.Person()
	local s = "Gestellte Rätsel von "
    if not isEmpty(rData[pgN].person) then
        local cat1 = addCategory(s .. rData[pgN].person)
        if not isEmpty(rData[pgN].person2) then
            local cat2 = cat1 .. addCategory(s .. rData[pgN].person2)
            return "[[" .. rData[pgN].person .. "]] und [[" .. rData[pgN].person2 .. "]]" .. cat2
        else
            return "[[" .. rData[pgN].person .. "]]" .. cat1
        end
    end
end

function p.Belohnung() 
    if not isEmpty(rData[pgN].belohnung) then return rData[pgN].belohnung
    else return "Für dieses Rätsel gibt es keine Belohnung" end
end

function p.Handlung() 
	local s = "Wichtiges Rätsel für das Voranschreiten"
    if rData[pgN].handlung then 
    	return s .. " des Spiels" .. addCategory(s .. " von " .. getGame[SpielID()].kuerzel)
    end
end 

function p.NrW(frame)
    local code = frame.args[1]
    
    if code == "EU" then
        if isEmpty(rData[pgN].region) then
            return flagEU .. rData[pgN].nr .. "/" .. getGame[SpielID()].anzW .. "<br />"
        else
            return nil
        end
    elseif code == "JP" and not isEmpty(rData[pgN].nrJP) then
        return flagJP .. rData[pgN].nrJP .. "/" .. getGame[SpielID()].anzWJP .. "<br />"
    elseif code == "US" and not isEmpty(rData[pgN].nrUS) then
        return flagUS .. rData[pgN].nrUS .. "/W27"
    end
end

function p.Datum(frame) 
    local lang = frame.args[1]
    if lang == "JP" then 
        if not isEmpty(rData[pgN].datumJP) then return rData[pgN].datumJP end
    elseif lang == "US" then
        if not isEmpty(rData[pgN].datumUS) then return rData[pgN].datumUS end
    else return rData[pgN].datum end
end

function p.Titel(frame)
	local unbekannt = "''Unbekannt''"
    local code = frame.args[1]
    
    -- Abbrechen, wenn internationales Wöchentliches Rätsel, außer für Japanisch und deutsche Übersetzung
    if not isEmpty(rData[pgN].region) and not code == "DE" and not (rData[pgN].region == "Jp-US" and code == "JP") then return "" end
    
    local a = frame:getParent().args
    local title
    
    local hilf = {
        ["DE"] = {A = "Übersetzung fehlt", B = getTitle().De},
        ["EN"] = {A = "Englischer Titel fehlt", B = getTitle().En},
        ["US"] = {B = getTitle().Us},
        ["UK"] = {B = getTitle().Uk},
        ["IT"] = {A = "Italienischer Titel fehlt", B = getTitle().It},
        ["FR"] = {A = "Französischer Titel fehlt", B = getTitle().Fr},
        ["SP"] = {A = "Spanischer Titel fehlt", B = getTitle().Sp},
        ["KR"] = {A = "Koreanischer Titel fehlt", B = getTitle().Kr},
        --["NL"] = {B = "Niederländischer Titel fehlt", getTitle().Nl},
    }

    if code == "JP" then 
        if not isEmpty(getTitle().Romaji) then
            title = tt(getTitle().Romaji, getTitle().Jp)
        else
            title = getTitle().Jp end
    elseif code == "KR" then
        if not isEmpty(getTitle().Romaja) then
            title = tt(getTitle().Romaja, getTitle().Kr)
        else
            title = getTitle().Kr end
    elseif code == "NL" then
        if isEmpty(getTitle().Nl) and SpielID() ~= "1" then
            title = unbekannt
        elseif SpielID() ~= "1" then 
            title = getTitle().Nl
        end
    else
        if isEmpty(hilf[code].B) then
            if code == "SP" or code == "IT" or code == "FR" then
                title = unbekannt .. addCategory(hilf[code].A)
            end
        else
            title = hilf[code].B
        end
    end
    return title
end

function p.Region()
	local s = "Rätsel aus der"
	local jp = s .. " japanischen Version"
	local us = s .. " amerikanischen Version"
	
    if not isEmpty(rData[pgN].region) then
        if rData[pgN].region == "Jp" then
            return flagJP .. "Japan" .. addCategory(jp)
        elseif rData[pgN].region == "US" then
            return flagUS .. "Nordamerika" .. addCategory(us)
        elseif rData[pgN].region == "Jp-US" then
            return flagJP .. flagUS .. "Japan und Nordamerika" .. addCategory(jp) .. addCategory(us)
        end
    else
        return addCategory("Region fehlt")
    end
end

return p
--</pre>
Nutzung von Community-Inhalten gemäß CC-BY-SA, sofern nicht anders angegeben.