Modul:MediaWiki:Pageinfo

aus Wikipedia, der freien Enzyklopädie
local Serial = "2019-05-15"
--[=[
    Hilfsfunktionen für MediaWiki:Pageinfo-*

    TEXT-KONFIGURATION
    Für die nachstehenden Definitionen gelten die Platzhalter:
        {{NICK}}    = username
        {{NICK_}}   = username, WIKI-URL-kodiert
        {{NICK%}}   = username, %-URL-kodiert
        {{SLANG}}   = aktuelle GUI-Sprache
        {{SPACE}}   = gegenderter Namensraum-Name
        {{SPACES}}  = gegenderter Namensraum-Name im Plural
        {{STDPATH}} = Pfad zum Standard-Serverskript
        {{TOPIC+}}  = Button für neuen BD-Abschnitt
]=]



local UPage = [====['''[[{{SPACE}}:{{NICK}}#top|{{NICK}}]]''']====]

local UList =
[====[* [[{{SPACE}} Diskussion:{{NICK}}|{{SPACES}}diskussion]] (BD)
<div  style="margin-left:4em">
{{TOPIC+}}
</div>
<div class="plainlinks">
* [[Spezial:Beiträge/{{NICK}}|{{SPACES}}beiträge]]
* Logbücher:
** [[Spezial:Logbuch/{{NICK}}|Aktivitäts-Log]]
** [{{STDPATH}}Spezial:Logbuch/block&page={{SPACE}}:{{NICK_}} Sperr-Log]
** [[Spezial:Präfixindex/{{SPACE}}:{{NICK}}/|BNR-Unterseiten]]
** [[Spezial:Präfixindex/{{SPACE}} Diskussion:{{NICK}}/|BD-Unterseiten]] (für archivierte Diskussionen)
* [https://xtools.wmflabs.org/ec/de.wikipedia/{{NICK_}}?uselang={{SLANG}} Beitragszähler] &nbsp; <small>&#91;[[Wikipedia:Technik/Labs/xtools/ec|Dokumentation]]&#93;</small>
* [https://xtools.wmflabs.org/pages/de.wikipedia/{{NICK_}}/0?uselang={{SLANG}} Neue Artikel] &nbsp; <small>&#91;[[Wikipedia:Technik/Labs/xtools/pages|Dokumentation]]&#93;</small>
* [[Spezial:Dateien/{{NICK}}|Hochgeladene Dateien]]
* [https://tools.wmflabs.org/stimmberechtigung/index.php?user={{NICK}} Stimmberechtigung] &nbsp; <small>&#91;[[Wikipedia:Technik/Labs/Tools/stimmberechtigung|Dokumentation]]&#93;</small>
* [[Special:CentralAuth/{{NICK}}|Globales Konto]] &nbsp; <small>&#91;[[Hilfe:Single-User-Login|Hilfe]]&#93;</small>
* [[luxo:{{NICK}}|Globale Beiträge]] &nbsp; <small>&#91;[[Wikipedia:Technik/Labs/Tools/guc|Dokumentation]]&#93;</small>
* [[Spezial:Benutzerrechte/{{NICK}}|Benutzergruppen/-rechte]] &nbsp; <small>&#91;[[Hilfe:Benutzer|Hilfe]]&#93;</small>
</div>
]====]



local function button( area, apply, frame )
    -- Neuen BD-Abschnitt als Button
    -- Parameter:
    --     area   BNR-Name
    --     apply  Nick
    --     frame
    -- Parameter:    BD-Seitenname
    local r = string.format( "%s %s:%s", area, "Diskussion", apply )
    local p = { Seite = r }
    r = frame:expandTemplate{ title = "Neuer Abschnitt/URL",
                              args  = p }
    p = { Typ  = "progressive",
          Link = r,
          Text = "Neuen BD-Abschnitt anlegen" }
    r = frame:expandTemplate{ title = "MediaWiki-Button",
                              args  = p }
    return r
end -- button()



local function slang()
    -- Aktuelle GUI-Sprache
    local o = mw.message.new( "lang" )
    local r
    if o:exists() then
        r = o:plain()
        if r == "" then
            r = false
        end
    end
    if not r then
       r = mw.language.getContentLanguage():getCode()
    end
    return r
end -- slang()



local function spacy( account, all )
    -- Gegenderter Namensraum-Name
    -- Parameter:
    --     account  Nick
    --     all      true: Plural
    local r = mw.site.namespaces[ 2 ].name
    if r == "Benutzer" then
        local babel = mw.language.getContentLanguage()
        if all then
            r = r .. babel:gender( account, "", "innen", "" )
        else
            r = r .. babel:gender( account, "", "in", "" )
        end
    end
    return r
end -- spacy()



-- Export
local p = { }

p.user = function ( frame )
    -- Benutzer-Abschnitt
    -- Parameter:    Seitentitel, damit auch Nick, oder nix.
    local s = frame.args[ 1 ]
    local r, t
    if s then
        s = mw.text.trim( s )
        if s == "" then
            s = false
        else
            r, t = pcall( mw.title.makeTitle, 2, s )
            if r then
                s = t.rootText
            else
                s = false
            end
        end
    else
        local c = mw.title.getCurrentTitle()
        if c.namespace == 2  or  c.namespace == 3 then
            s = c.rootText
        end
    end
    if s then
        local space = spacy( s )
        local sew   = mw.uri.encode( s, "WIKI" )
        t = mw.title.makeTitle( 2, s )
        r = "== {{SPACE}} ==\n"
        if t.exists then
            r = r .. UPage
        else
            local e =  mw.html.create( "code" )
                              :wikitext( s )
            r = r .. tostring( e )
        end
        r = string.format( "%s\n%s", r, UList )
        r = mw.ustring.gsub( r, "{{NICK}}", s )
        r = mw.ustring.gsub( r, "{{NICK_}}", sew )
        r = mw.ustring.gsub( r, "{{SPACE}}", space )
        if r:find( "{{NICK%}}", 1, true ) then
            r = mw.ustring.gsub( r, "{{NICK%%}}", mw.uri.encode( s ) )
        end
        if r:find( "{{SLANG}}", 1, true ) then
            r = mw.ustring.gsub( r, "{{SLANG}}", slang() )
        end
        if r:find( "{{SPACES}}", 1, true ) then
            r = mw.ustring.gsub( r, "{{SPACES}}", spacy( s, true ) )
        end
        if r:find( "{{STDPATH}}", 1, true ) then
            local std = mw.site.server .. "/w/index.php?title="
            r = mw.ustring.gsub( r, "{{STDPATH}}", std )
        end
        if r:find( "{{TOPIC+}}", 1, true ) then
            local submit = button( space, s, frame )
            r = mw.ustring.gsub( r, "{{TOPIC%+}}", submit )
        end
    else
        local e = mw.html.create( "span" )
                         :attr( "class", "error" )
                         :wikitext( "user::Pageinfo invalid" )
        r = tostring( e )
    end
    return r
end -- p.user()


return p