Info Istruzioni per l'uso
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:Interprogetto/man (modifica · cronologia)
Sandbox: Modulo:Interprogetto/sandbox (modifica · cronologia) · Sottopagine: lista · Test: Modulo:Interprogetto/test (modifica · cronologia · esegui)

Modulo Lua per svolgere le funzioni di {{Interprogetto}}.

Ha una sottopagina di configurazione: Modulo:Interprogetto/Configurazione.

Errore Lua in package.lua alla linea 80: module 'Module:HtmlBuilder' not found.


--Modulo per implementare le funzionalità di template:Interprogetto
--TODO gestione speciale per notizia
local p = {} -- per l'esportazione delle funzioni del modulo

local HtmlBuilder = require('Module:HtmlBuilder') -- richiesto per la costruzione del markup html

local progetti={} -- variabile che contiene gli argomenti passati al template
local etichetta -- etichetta da usare per i collegamenti
local root -- radice del markup html
local log= '' -- per debug

-- Valori di default dei parametri
--  priorità, un numero intero (più basso è prima compare il link al progetto)
--  prefisso_progetto, prefisso del progetto
--  nome_progetto, nome visualizzato del progetto
--  lingua del progetto, un valore booleano falso o il codice della lingua da collegare
--  logo del progetto
--  dimensioni del logo
--  etichetta standard per il contenuto ('opere originali', 'testi o manuali', ecc..)
--  testo standard che identifica il contenuto ('opere originali', 'ricette', ecc..)


local default_parameter ={
    wikisource =     {1, 's:', 'Wikisource', false, 'Wikisource-logo.svg', '18px', 'opere originali ', 'di o su'},
    testo =          {2, 's:', 'Testo completo', false, 'Wikisource-logo.svg', '18px', 'opere originali ', 'di o su'}, -- da verificare parametri
    wikiquote =      {3, 'q:', 'Wikiquote', false, 'Wikiquote-logo.svg', '18px',  'citazioni', 'di o su' },
    wikibooks =      {4, 'wikibooks:', 'Wikibooks', false, 'Wikibooks-logo.svg', '22px', 'testi o manuali', 'su' },
    ricetta =        {5, 'b:Libro di cucina/Ricette/', 'Ricetta<br />(Wikibooks)', false, 'Wikibooks-logo.svg', '22px', 'ricette', 'relative a questo argomento' }, --TODO rivedere
    wiktionary =     {6, 'wiktionary:', 'Wikizionario', false, 'Wiktionary small.svg', '18px', 'il lemma di dizionario', '«'}, --TODO chiusura
    v =              {7, 'v:', 'Wikiversità', false, 'Wikiversity-logo-It.svg', '18px', 'informazioni', 'su'},
    wikinews =       {8, 'wikinews:', 'Wikinotizie', false, 'Wikinews-logo.svg', '25px', 'notizie di attualità', 'su'},
    commons =        {9, 'commons:', 'Commons', 'it'},
    meta =           {11, 'meta:', 'Meta-Wiki', 'it'},
    wikispecies =    {12, 'wikispecies:', 'Wikispecies', 'it'},
    incubator =      {13, 'incubator:', 'Incubator', 'it'},
    voy =            {14, 'voy:', 'Wikivoyage', false, 'Wikivoyage-logo.svg', '18px', 'Wikivoyage', 'informazioni turistiche', 'su'}
}

-- nota oldwikisource rimosso, stando a http://toolserver.org/~kolossos/templatetiger/template-parameter.php?template=interprogetto&lang=itwiki non usato
-- il primo parametro è la priorità di comparsa dell'alias rispetto ad altri alias dello stesso
local alias = {
    s = {1, 'wikisource'},
    q = {1, 'wikiquote'},
    b = {1, 'wikibooks'},
    wikt = {1, 'wiktionary'},
    m = {1, 'meta'},
    n = {1, 'wikinotizie'}
}

--TODO collegamenti che usano Interprogetto/CollegamentoUseLang

local function sort_by_priority(t1, t2)
    -- per ordinare una tabella in base al valore del primo elemento della tabella
    if t1[1] < t2[1] then
        return true
    end
end

local function default_value(value, default_value)
    -- ritorna default_value se il valore è nil o stringa vuota
    if value and value ~= '' then return value end
    return default_value
end

local function RenderLeftBar()
    -- Crea la barra di sinistra con i link interprogetto
    -- TODO if args.notizia then return end
    -- costruisce le righe per la barra di sinistra
    local leftbar = HtmlBuilder.create()
    for k, progetto in pairs(progetti) do
        priority, prefix, nome_progetto, lang = unpack(progetto)
        if lang then
            leftbar.wikitext(table.concat({'* [',
                                           tostring(mw.uri.fullUrl(prefix .. etichetta, {uselang=lang})),
                                           ' ', nome_progetto, ']'}))
        else
            leftbar.wikitext(table.concat({'* [[', prefix, etichetta, '|', nome_progetto, ']]'}))
        end
        leftbar.newline()
    end
    --  Apertura del tag div id="interProject" (vedi [[Mediawiki:Monobook.js]] o [[Mediawiki:Vector.js]])
    root
        .tag('div')
            .attr('id', 'interProject')
            .cssText('display: none; clear: both; border-top: 2px dotted #AAAAAA; margin-top: 2em')
            .tag('div')
                .attr('title', 'Collegamenti verso gli altri progetti Wikimedia')
                .node(leftbar)

end

local function RenderLinkInText()
    -- produce il codice html per l'elenco puntato
    for k, progetto in pairs(progetti) do
        priority, prefix, nome_progetto, lang, icona, dimensione_icona, opere, preposizione = unpack(progetto)
        root.newline()
        if lang then
            text_box = 'TODO'
        else
            root.wikitext(table.concat({'* [[File:', icona, '|link=', prefix, '|', dimensione_icona,'|Collabora a ', nome_progetto,
                                        "]] '''[[", prefix, nome_progetto, '|', nome_progetto, "]]''' contiene ", opere, "'''[[", 
                                        prefix, etichetta, '|', etichetta, "]]'''" }))
        end
    end
    root.newline()
end

function p.interprogetto(frame)
    local origArgs
    -- Se chiamata mediante  #invoke, usa gli argomenti passati al template invocante.
    -- Altrimenti a scopo di test assume che gli argomenti siano passati direttamente
    if frame == mw.getCurrentFrame() then
        origArgs = frame:getParent().args
    else
        origArgs = frame
    end

    -- Carico i parametri
    etichetta = default_value(origArgs.etichetta, mw.title.getCurrentTitle().text)
    local etichetta = default_value(origArgs.etichetta, nil)
    local  preposizione = default_value(origArgs.preposizione, nil)
    local oggetto = default_value(origArgs.oggetto, nil)

    for k, v in pairs(origArgs) do
        -- controlla se è un parametro posizionale e in questo caso la memorizza come
        -- chiave con valore pari al nome della pagina corrente
        local progetto = {}
        if tonumber(k) then
            k = v
            v = etichetta
        end
        local subpriority = 0
        orig_key = k
        if alias[k] then
            subpriority, k = unpack(alias[k])
        end
        if default_parameter[k] then
            table.insert(progetto, default_parameter[k][1] + subpriority / 10)
            table.insert(progetto, default_parameter[k][2]) --prefix
            table.insert(progetto, default_parameter[k][3]) --nome progetto
            table.insert(progetto, default_parameter[k][4]) -- codice lingua
            table.insert(progetto, default_parameter[k][5]) -- logo
            table.insert(progetto, default_parameter[k][6]) -- dimensioni logo
            table.insert(progetto, default_value(origArgs[orig_key .. '_oggetto'], oggetto) or default_parameter[k][7])
            table.insert(progetto, default_value(origArgs[orig_key .. '_preposizione'] or default_parameter[k][7]))
            table.insert(progetto, default_value(origArgs[orig_key .. 'lingua'] or nil))
            table.insert(progetti, progetto)
        end
    end
    table.sort(progetti, sort_by_priority)
    root = HtmlBuilder.create()
    RenderLeftBar()
    if not origArgs.nolink then
        RenderLinkInText()
    end
    return  tostring(root)
end

return p