Modulo:Box interwiki/Man generico per template derivati

Da Wikinotizie, le notizie a contenuto aperto

Inserito nel man dei template basati su Modulo:Box interwiki, fornisce un manuale base con esempi.

Nella pagina del manuale, inserisce automaticamente la Categoria:Manuali dei template.

Esempi[modifica]

Nel caso più semplice, basta inserire nel man del template la riga :

{{ #invoke: Modulo:Box interwiki/Man generico per template derivati | getMan }}

Se il nome del progetto non corrisponde a quello del template :

{{ #invoke: Modulo:Box interwiki/Man generico per template derivati 
| getMan 
| nome-progetto = nome del progetto
}}

Per i template che, come {{Commons}}, collegano progetti privi di versioni linguistiche :

{{ #invoke: Modulo:Box interwiki/Man generico per template derivati 
| getMan 
| nome-progetto = nome del progetto
| tipo = Commons
}}

Righe per test nella Console di debug[modifica]

= p.getMan(
    mw.getCurrentFrame()
    :newChild{ args = {
        template = 'Wikipedia' 
    } }
)


= p.getMan(
    mw.getCurrentFrame()
    :newChild{ args = { 
        template = 'MetaWikimedia',
        progetto = 'Meta-Wiki',
        tipo     = 'Commons' 
    } }
)

Poiché sarebbe oneroso implementare nel modulo anche la simulazione del recupero del nome del template da quello della pagina, in console di debug il nome del template va indicato esplicitamente. Da ciò deriva anche l'impossibilità di testare la produzione della Categoria:Manuali dei template nelle pagine dei manuali dei template.


--[[

Fornisce un manuale base
per i template basati su Modulo:Box interwiki.

]]

local p = {}

local curFrame, template, project, type

local function incipit()

    --[[

    Per modificare il testo dell'introduzione,
    non è necessario conoscere il linguaggio.

    Basta modificare il testo tra  [=[  e  ]=]
    come se fosse su una qualsiasi pagina editabile.

    Con la sola differenza che ogni occorrenza di
    _progetto_
    verrà sostituita con il nome del progetto
    e ogni occorrenza di
    _template_
    verrà sostituita con il nome del template.

    ]]

    return curFrame:preprocess(
    mw.ustring.gsub(
    mw.ustring.gsub(
    [=[
Questo template consente l'inserimento di un box con uno o più link verso pagine di [[w:_progetto_|_progetto_]].

Le pagine che includono questo template vengono automaticamente inserite in una categoria di servizio :
* [[:Categoria:Articoli con box interwiki verso _progetto_]]
: per gli articoli, ovvero le pagine del namespace principale.
* [[:Categoria:Pagine con box interwiki verso _progetto_]]
: per le pagine degli altri namespace. 

Il template è basato sul [[modulo:Box interwiki]].

<h2>Esempi</h2>
]=],
    '_template_', template ),
    '_progetto_', project )
    )

end
local function example( title, descr, args, splitFirst, splitEach )

    --[[

    splitFirst indica quanti parametri posizionali iniziali vanno nella stessa riga,
    nell'esempio di codice del template.

    Per i successivi, splitEach indica ogni quanti parametri andare a capo.

    In assenza di indicazioni, i parametri vengono mostrati su una sola riga.

    ]]

    splitFirst = splitFirst or 0

    local namedParamters = false

    local text = (
    title
    and '\n<h3>' .. title .. '</h3>\n'
    .. '<div style="clear: both;"></div>\n'
    or '\n'
    )
    .. curFrame:expandTemplate{
        title = template,
        args = args
    }
    .. '<code>{{ ' .. template

    for parameter, value in pairs( args ) do
        if parameter ~= tonumber( parameter)
        then
            namedParamters = true
            text = text
            .. '<br />'
            .. '| ' .. parameter .. ' = ' .. value
        end
    end

    local brOrSp =
    ( splitFirst > 0 or splitEach or namedParamters )
    and '<br />'
    or ' '

    text = text
    .. brOrSp

    for pos, parameter in ipairs( args ) do
        text = text
        .. (
        (
        ( splitFirst > 0 and pos == splitFirst + 1 )
        or
        (
        splitEach
        and pos > 1
        and pos > splitFirst
        and pos % splitEach == ( splitFirst + 1 ) % splitEach
        )
        )
        and '<br />| '
        or ' | '
        )
        .. parameter
    end

    return text
    .. brOrSp
    .. '}}</code>\n'
    .. (
    descr
    and '\n' .. curFrame:preprocess( descr ) .. '\n'
    or ''
    )
    .. '<div style="margin-bottom: 2em; clear: both;"></div>'

end
local function examplesByType()

    if type == 'Wikipedia'
    then return
        example(
        'Una pagina con un testo sostitutivo per il link',
        [[
Tramite il parametro <code style="white-space: nowrap;">etichetta-pagina</code>
si può impostare un testo per il wikilink diverso da quello del titolo della pagina.]],
        { 'titolo pagina', [ 'etichetta-pagina' ] = 'alt pagina' }
        )
        .. example(
        'Una pagina su un\'altra versione linguistica del progetto',
        [[
Il secondo parametro è opzionale
e indica, tramite il codice della lingua, la versione linguistica del progetto.]],
        { 'titolo pagina', 'en' }
        )
        .. example(
        'Più pagine',
        'I parametri dal terzo in poi indicano ulteriori pagine da linkare.',
        { 'pagina 1', 'fr', 'pagina 2', 'pagina 3', 'pagina 4' },
        2
        )
        .. example(
        'Più pagine con eventuale testo sostitutivo per il link',
        [[
Impostando il parametro <code style="white-space: nowrap;">multi-pagina-come</code>
al valore <code style="white-space: nowrap;">pagina-etichetta</code>,
è possibile indicare un testo alternativo anche per le pagine successive alla prima.]],
        { 'pagina 1', '', 'pagina 2', '', 'pagina 3', 'alt pagina 3',
            [ 'multi-pagina-come' ] = 'pagina-etichetta',
            [ 'etichetta-pagina'  ] = 'alt pagina 1'
        },
        2, 2
        )
    else if type == 'Commons'
        then return
            example(
            'Una pagina con un testo sostitutivo per il link',
            [[
Il secondo parametro è opzionale
e indica un testo per il wikilink diverso da quello del titolo della pagina.]],
            { 'Category:nome categoria', 'nome categoria' }
            )
            .. example(
            'Più pagine con eventuale testo sostitutivo per il link',
            [[I parametri dispari dal terzo in poi indicano ulteriori pagine da linkare,
quelli pari impostano il testo alternativo per il link
alla pagina indicata dal parametro immediatamente precedente.

Se un parametro pari viene lasciato vuoto,
il testo del link corrisponderà al titolo della pagina.]],
            { 'pagina 1', 'alt pagina 1', 'pagina 2', '', 'pagina 3', 'alt pagina 3' },
            2, 2
            )
            .. example(
            'Più pagine senza testo sostitutivo per il link',
            [[Se non serve un testo alternativo per i link,
impostando il parametro <code style="white-space: nowrap;">multi-pagina-come</code>
al valore <code>pagine</code>,
ogni parametro dal terzo in poi indicherà un'ulteriore pagina da linkare.]],
            { 'pagina 1', '', 'pagina 2', 'pagina 3', 'pagina 4',
                [ 'multi-pagina-come' ] = 'pagine',  },
            2
            )
        end
    end

end

function p.getMan( frame )

    local pageTitle = mw.title.getCurrentTitle()

    curFrame = frame

    template =
    frame.args.template   -- per test
    or pageTitle.baseText -- effettivo

    project = frame.args.progetto or template
    type    = frame.args.tipo     or 'Wikipedia'

    local category =
    pageTitle.subpageText == 'man'
    and '\n[[Categoria:Manuali dei template]]'
    or ''

    return incipit()
    .. example(
    'Una pagina',                                       -- titolo dell'esempio
    'Il primo parametro deve essere sempre indicato.',  -- descrizione
    { 'titolo pagina' }                                 -- parametri del template
    )
    .. examplesByType()
    .. category

end

return p