Modul:Vorlage:Dokumentation

    Aus mxlinuxusers.de

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

    --[=[ 2019-05-17
    {{Dokumentation}}
    ]=]
    
    
    
    local Current = mw.title.getCurrentTitle()
    
    
    
    local function fake( frame, access )
        local s = string.format( "[%s/%s %s]",
                                 "https://de.wikipedia.org/wiki",
                                 mw.uri.encode( access, "WIKI" ),
                                 "Doku in der echten deWP" )
        local e = mw.html.create( "div" )
        e:css( "border",  "#A000A0 2px solid" )
         :css( "padding", "1em" )
         :wikitext( "[[Datei:Redirectltr.png|#REDIRECT|link=]]" )
         :node( mw.html.create( "span" )
                       :addClass( "redirectText" )
                       :wikitext( s ) )
        return tostring( e )
    end -- fake()
    
    
    
    local function fatal( amend )
        local s = "Wikipedia:Vorlagenfehler/Vorlage:Dokumentation"
        if amend then
            s = string.format( "%s/%s", s, amend )
        end
        return string.format( "[[Kategorie:%s]]", s )
    end -- fatal()
    
    
    
    local function findeSchalter( area )
        local i = area:find( "__", 1, true )
        local r
        if i then
            r = area:find( "__TOC__", i, true )   or
                area:find( "__NOTOC__", i, true )   or
                area:find( "__INHALTSVERZEICHNIS__", i, true )   or
                area:find( "__KEIN_INHALTSVERZEICHNIS__", i, true )   or
                area:find( "__KEININHALTSVERZEICHNIS__", i, true )
        end
        return r
    end -- findeSchalter()
    
    
    
    local function findeTemplateDataTOC( area )
        local i = area:find( "emplateData", 3, true )
        local r
        if i then
            if area:find( "TOC",  i + 11,  true ) then
                local k
                if i > 100 then
                    i = i - 100
                else
                    i = 1
                end
                i, k = area:find( "%{%{%s*[tT]emplateData%s*|", i )
                if i then
                    r = area:find( "|%s*TOC%s*=%s*1%s*[|}]",  k - 1 )
                end
            end
        end
        return r
    end -- findeTemplateDataTOC()
    
    
    
    local function furnish( area, frame )
        local i = area:find( "==", 1, true )
        local r
        if i then
            local seek = "==[^\n]+==\n"
            local init, k, n
            if i == 1 then
                i, k = area:find( seek, 1 )
                if i == 1 then
                    n = 1
                end
            end
            seek = "\n" .. seek
            if i and not n then
                i, k = area:find( seek,  i - 1 )
            end
            if i then
                n = 1
                init = i
                i, k = area:find( seek,  k - 1 )
                if i then
                    n = 2
                end
            end
            if n == 1 then
                r = "__NOTOC__\n" .. area
            elseif n == 2 then
                local src    = "TOC nonum/styles.css"
                local toc    = mw.html.create( "div" )
                                      :newline()
                                      :addClass( "nonumtoc" )
                                      :wikitext( "__TOC__" )
                                      :newline()
                local styles = frame:extensionTag( "templatestyles",
                                                   nil,
                                                   { src = src } )
                toc = styles .. tostring( toc )
                if init == 1 then
                    r = toc .. area
                else
                    r = string.format( "%s%s%s",
                                       area:sub( 1,  init - 1 ),
                                       toc,
                                       area:sub( init ) )
                end
            end
        end
        return r or area
    end -- furnish()
    
    
    
    local function f( frame )
        local bottom  = { }
        local doku    = mw.title.makeTitle( Current.namespace,
                                            Current.text .. "/Doku" )
        local sub     = Current.prefixedText .. "/Doku"
        local r
        if doku.exists then
            r = frame:expandTemplate{ title = sub }
            if not findeSchalter( r ) then
                if not findeTemplateDataTOC( r ) then
                    r = furnish( r, frame )
                end
            end
            bottom.lonely = "1"
        else
            local create = { action  = "edit",
                             preload = "Vorlage:Dokumentation/preload-doku",
                             summary = "Neu angelegt",
                             redlink = "1" }
            local path   = { sub,  mw.uri.buildQueryString( create ) }
            local setup  = frame:callParserFunction( "fullurl", path )
            local button = { Typ      = "progressive",
                             ["Groß"] = "1",
                             Link     = setup,
                             Text     = "Neue Doku-Unterseite anlegen" }
            r = frame:expandTemplate{ title = "MediaWiki-Button",
                                      args  = button }
            if mw.site.server:match( "%.beta%.wmflabs%.org$" ) then
                r = r .. fake( frame, sub )
            elseif Current.namespace == 10 then
                r = string.format( "%s[[Kategorie:%s]]",
                                   r,
                                   "Vorlage:nicht dokumentiert" )
            end
        end
        r = r .. frame:expandTemplate{ title = "Dokumentation/footer",
                                       args  = bottom }
        return r
    end -- f()
    
    
    
    local p = {}
    
    function p.hastemplate( frame )
        r = Current.text:gsub( "/Doku$", "" )
                        :gsub( " ", "_" )
                        :gsub( "\"", "%%26%%2334;" )
        if Current.namespace ~= 10 then
            r = string.format( "%s:%s",
                               mw.site.namespaces[ Current.namespace ].name,
                               r )
        end
        return string.format( "hastemplate:%s+", r )
    end -- p.hastemplate()
    
    
    
    function p.f( frame )
        local lucky, r = pcall( f, frame )
        if not lucky then
            local e = mw.html.create( "span" )
                             :attr( "class", "error" )
                             :wikitext( r )
            r = tostring( e ) .. fatal( "Intern" )
        end
        return r
    end -- p.f()
    
    return p