Modul:Vorlage:PersonZelle

Aus Regiowiki
Zur Navigation springen Zur Suche springen

Die Dokumentation für dieses Modul kann unter Modul:Vorlage:PersonZelle/Doku erstellt werden

local Serial = "2018-01-04"
--[=[
Vorlage:PersonZelle
]=]



local Category = "Wikipedia:Vorlagenfehler/Vorlage:PersonZelle"



local function fetch( access )
    -- Fetch library module
    -- Parameter:
    --     access  -- string, with library name
    -- Returns:
    --     table with library
    -- Throws:
    --     error, module not found
    local lucky, r = pcall( require,  "Module:" .. access )
    if type( r ) == "table" then
        r = r[ access ]()
    else
        error( r )
    end
    return r
end -- fetch()



local function fault( alert, frame )
    -- Format error message
    -- Parameter:
    --     alert  -- string, with complaint
    --     frame  -- object, or nil
    -- Returns string
    local TemplUtl = fetch( "TemplUtl" )
    local staff    = "editoronly"
    local live
    if mw.title.getCurrentTitle().namespace ~= 0 then
        live  = true
        staff = false
    end
    return string.format( " %s [[Category:%s]]",
                          TemplUtl.failure( alert,
                                            live,
                                            staff,
                                            frame ),
                          Category )
end -- fault()



local function fiat( arglist, frame )
    -- Do it.
    -- Parameter:
    --     arglist  -- table, with parameters
    --     frame    -- object, or nil
    -- Returns:
    --     string
    local params = { [ 1 ] = false,
                     [ 2 ] = false,
                     [ 3 ] = false,
                     k     = false,
                     nl    = false,
                     fett  = false }
    local r, s, show, unknown
    for k, v in pairs( arglist ) do
        if type( params[ k ] ) == "boolean" then
            v = mw.text.trim( v )
            if v ~= "" then
                params[ k ] = v
            end
        else
            if unknown then
                unknown = string.format( "%s, %s", unknown, k )
            else
                unknown = k
            end
        end
    end -- for k, v in arglist
    show = params[ 2 ]
    if show then
        local slot = params[ 3 ]
        local sort = show
        local strange
        s = show
        if params.nl == "0" then
            params.nl = false
        end
        if params.fett == "0" then
            params.fett = false
        end
        if params[ 1 ] then
            show = string.format( "%s %s", params[ 1 ], show )
            sort = string.format( "%s, %s", sort, params[ 1 ] )
        end
        if params.k then
            if params.nl then
                strange = "Widerspruch k=... und nl=1"
            elseif slot then
                strange = "Widerspruch k=... und 3=..."
            else
                slot = string.format( "%s (%s)", show, params.k )
            end
            sort = string.format( "%s @%s", sort, params.k )
        end
        if not params.nl then
            if slot then
                show = string.format( "%s|%s", slot, show )
            end
            show = string.format( "[[%s]]", show )
        end
        if params.fett then
            show = tostring( mw.html.create( "span" )
                                    :css( "font-weight", "bold" )
                                    :wikitext( show ) )
        end
        if sort:find( "[^ -~]" ) then
            local Sort = fetch( "Sort" )
            sort = Sort.lex( sort, "latin" )
        end
        if params[ 1 ]  or  sort ~= params[ 2 ] then
            r = string.format( " data-sort-value=\"%s\"| %s",
                               sort, show )
        else
            r = "| " .. show
        end
        if strange then
            r = r .. fault( strange, frame )
        end
    else
        r = "|"
        s = "Pflichtparameter (Familienname) fehlt"
        if params[ 1 ] then
            r = r .. params[ 1 ]
            s = string.format( "%s – %s", s, params[ 1 ] )
        end
        r = r .. fault( s, frame )
    end
    if unknown then
        r = r  ..  fault( "Unbekannter Parametername(n) " .. unknown,
                          frame )
    end
    return r
end -- fiat()



-- Export
local p = { }

function p.test( arglist )
    return fiat( arglist )
end

function p.f( frame )
    local lucky, r = pcall( fiat, frame:getParent().args, frame )
    if not lucky then
        r = fault( r )
    end
    return r
end

return p