Vorlagenprogrammierung Diskussionen Lua Unterseiten
Modul Deutsch

Modul: Dokumentation

Diese Seite enthält Code in der Programmiersprache Lua. Einbindungszahl Cirrus


--[==[
Generiere Liste für [[Wikipedia:Technik/Skin/Gadgets/!Alle Gadgets]]
]==]
local SkinGadgets = { seek    = "^/Skin/Gadgets/([^!].+)$",
                      slipped = "FEHLT @@@@@@@@@@@@@@@ FEHLT",
                      stack   = "Modul:PageTree/WP:Technik/bot",
                      start   = "Technik/Skin/Gadgets",
                      sub     = "Unterseite von" }



local function fill( all, add, frame )
    local s   = string.format( "%s/%s", SkinGadgets.start, add )
    local got = mw.title.makeTitle( 4, s )
    if got.exists then
        local dd  = mw.html.create( "dd" )
        local dt  = mw.html.create( "dt" )
        got = mw.message.new( "Gadget-" .. add )
        dt:wikitext( string.format( "[[../%s/]]", add ) )
        if got:exists() then
            s = got:plain()
            dd:wikitext( frame:preprocess( s ) )
        elseif add:find( "/", 1, true ) then
            s = add:match( "^([^/]+)/" )
            dd:wikitext( string.format( "''%s [[../%s/]]''",
                                        SkinGadgets.sub, s ) )
        else
            dd:addClass( "error" )
              :wikitext( SkinGadgets.slipped )
        end
        all:node( dt )
           :newline()
           :node( dd )
           :newline()
    end
end -- fill()



local function first( a1, a2 )                
    return mw.ustring.lower( a1 ) < mw.ustring.lower( a2 )
end -- first()



local function f( frame )
    local lucky, pages = pcall( mw.loadData, SkinGadgets.stack )
    local r, scream
    if type( pages ) == "table" then
        pages = pages.pages
        if type( pages ) == "table" then
            local gadgets = { }
            local s
            for k, v in pairs( pages ) do
                e = pages[ i ]
                if type( v ) == "string" then
                    s =  mw.ustring.match( v, SkinGadgets.seek )
                    if s then
                        table.insert( gadgets, s )
                    end
                end
            end -- for i
            if #gadgets > 0 then
                table.sort( gadgets, first )
                r = mw.html.create( "dl" )
                for i = 1, #gadgets do
                    fill( r, gadgets[ i ], frame )
                end -- for i
            else
                scream = "Komponente 'pages' leer"
            end
        else
            scream = "Komponente 'pages' fehlt in "
            scream = scream .. SkinGadgets.stack
        end
    else
        scream = pages
    end
    if scream then
        r = mw.html.create( "div" )
        r:addClass( "error" )
         :wikitext( scream )
    end
    return tostring( r )
end -- f()



-- Export
local p = { }
p.f = function ( frame )
    return f( frame )
end -- p.f

return p