FANDOM


--Modulo per implementare le funzionalità di template:Interprogetto
local p = {} -- per l'esportazione delle funzioni del modulo
 
local progetti={} -- dati da usare per la costruzione delle righe dell'elenco di link ai progetti
local root -- radice del markup html
local debug= {} -- per debug
 
local function dump(t, ...)
    local args = {...}
    for _, s in ipairs(args) do
        table.insert(t, s)
    end
end
 
local function add_space(s)
    --ritorna uno spazio se l'ultimo carattere non è un accento
    if mw.ustring.sub(s, -1) == "'" then
        return ''
    else
        return ' '
    end
end
 
local function is_defined(s)
    -- ritorna la stringa se è definita e diversa da stringa nulla, altrimenti nil
    if s and s ~= '' then return s end
    return nil
end
 
local function Link(intext, pos, in_stampa)
    -- Restituisce il link nel caso normale di collegamento (progetto senza interfaccia in lingua)
    -- intext vero se è richiesto il link del testo principale, falso per la barra sinistra
    local p=progetti
    local text=''
    if intext then
        if in_stampa then
            text = table.concat({'* [[File:', p.icona[pos], '|',  p.dimensione_icona[pos], "]] ",
                            p.messaggio_stampa[pos], "'''", p.base_url[pos],
                           tostring(mw.uri.localUrl( p.collegamento[pos] )), "'''" })
        else
            text = table.concat({'* [[File:', p.icona[pos], '|link=', p.prefix[pos], '|',
                            p.dimensione_icona[pos],'|Collabora a ', p.nome_progetto[pos],
                            "]]", ' ', "'''[[", p.prefix[pos], '|', p.nome_progetto[pos],
                            "]]''' contiene ", p.oggetto[pos], ' ', p.lingua[pos],
                            p.preposizione[pos], add_space(p.preposizione[pos]), p.testo_prima[pos],
                            "'''[[",  p.prefix[pos], p.collegamento[pos], '|',
                            p.etichetta[pos], "]]'''", p.testo_dopo[pos] })
        end
    else
        text = table.concat({'[[', p.prefix[pos], p.collegamento[pos], '|', p.nome_leftbar[pos] or p.nome_progetto[pos], ']]'})
    end
    return text
end
 
local function LinkRicette(intext, pos, in_stampa)
    -- Restituisce il link per le ricette su wikibook
    -- intext vero se è richiesto il link del testo principale, falso per la barra sinistra
    local p=progetti
    local text=''
    if intext then
        if in_stampa then
            text = table.concat({'* [[File:', p.icona[pos], '|',  p.dimensione_icona[pos], "]] ",
                            p.messaggio_stampa[pos], "'''", p.base_url[pos],
                           tostring(mw.uri.localUrl( p.prefix[pos] .. p.collegamento[pos] )), "'''" })
        else
            text = table.concat({'* [[File:', p.icona[pos], '|link=', p.prefix[pos], '|', p.dimensione_icona[pos],
                            '|Collabora a ', p.nome_progetto[pos],
                            "]] Il ''[[b:Libro di cucina|Libro di cucina]]'' di '''[[b:|Wikibooks]]''' contiene [[",  p.prefix[pos],
                            p.collegamento[pos], "|ricette]]", " relative a questo argomento." })
        end
    else
        text = table.concat({'[[', p.prefix[pos], p.collegamento[pos], '|', p.nome_leftbar[pos] or p.nome_progetto[pos], ']]'})
    end
    return text
end
 
 
local function LinkWithLanguage(intext, pos, in_stampa)
    -- Restituisce il link verso progetti con interfaccia in lingua (seleziona automaticamente quella italiana)
    -- intext vero se è richiesto il link del testo principale, falso per la barra sinistra
    local p=progetti
    local text=''
    if intext then
        if in_stampa then
            text = table.concat({'* [[File:', p.icona[pos], '|',  p.dimensione_icona[pos], "]] ",
                            p.messaggio_stampa[pos], "'''", p.base_url[pos],
                            tostring(mw.uri.localUrl( p.collegamento[pos] )), "'''" })
        else
            main_page_link=tostring(mw.uri.fullUrl(p.prefix[pos] , {uselang='it'}))
            text = table.concat({'* [[File:', p.icona[pos], '|link=', main_page_link, '|',
                             p.dimensione_icona[pos], '|Collabora a ', p.nome_progetto[pos],
                            "]]", ' ',  "'''<span class=\"plainlinks\">[",
                            main_page_link, ' ', p.nome_progetto[pos], "]</span>''' contiene ",
                            p.oggetto[pos], ' ', p.preposizione[pos], add_space(p.preposizione[pos]),
                            p.testo_prima[pos], "'''<span class=\"plainlinks\">[",
                            tostring(mw.uri.fullUrl(p.prefix[pos] .. p.collegamento[pos], {uselang='it'})), ' ',
                            p.etichetta[pos], "]</span>'''", p.testo_dopo[pos] })
        end
    else
        text = table.concat({'<span class=\"plainlinks\" title=\"', p.etichetta[pos], '\">[',
                        tostring(mw.uri.fullUrl(p.prefix[pos] .. p.collegamento[pos], {uselang='it'})),
                            ' ', p.nome_leftbar[pos] or p.nome_progetto[pos], ']</span>'})
    end
    return text
end
 
local function LinkIncubator(intext, pos, in_stampa)
    -- Restituisce il link verso progetti per incubator
    local p=progetti
    local text=''
    local prefix = {
        wikipedia = 'Wp',
        wiktionary = 'Wt',
        wikizionario= 'Wt',
        wikibooks= 'Wb',
        wikinews= 'Wn',
        wikinotizie= 'Wn',
        wikiquote= 'Wq',
    }
 
    local oggetto = p.oggetto[pos]
    if not prefix[oggetto] then oggetto='wikipedia' end
    local collegamento = tostring(mw.uri.fullUrl(table.concat({'incubator:', prefix[oggetto],
                                        '/', p.collegamento[pos]}), {uselang='it'}))
    if intext then
        if in_stampa then
            text = table.concat({'* [[File:', p.icona[pos], '|',  p.dimensione_icona[pos], "]] ",
                            p.messaggio_stampa[pos], "'''", collegamento, "'''" })
        else
            local main_page_incubator=tostring(mw.uri.fullUrl(':incubator:Main_Page/it', {uselang='it'}))
            local main_page_progetto = ''
            if oggetto == 'wikipedia' then
                main_page_progetto = '[[Wikipedia]]'
            else
                main_page_progetto = table.concat({'[[', oggetto, ':|', oggetto:gsub("^%l", string.upper), ']]'})
            end
 
            text = table.concat({'* [[File:', p.icona[pos], '|link=', main_page_incubator, '|',
                                 p.dimensione_icona[pos], "|Collabora a Incubator]] '''<span class=\"plainlinks\">[",
                                main_page_incubator, " Incubator]</span>''' contiene un test su ",
                                main_page_progetto, ' ',
                                p.preposizione[pos], add_space(p.preposizione[pos]),
                                '<span class="plainlinks">[', collegamento, ' ', p.etichetta[pos], ']</span>' })
        end
    else
        text = table.concat({'<span class=\"plainlinks\" title=\"', p.etichetta[pos], '\">[',
                        collegamento, ' Incubator]<span>'})
    end
    return text
end
 
function Link_vuoto(intext, pos)
    -- per il parametro notizia, non dovrebbe mai essere chiamato, ma giusto in caso restituisce
    -- una stringa vuota
    return ''
end
 
-- default_parameter: contiene i valori di default dei parametri
--   priorità: ordine di priorità in cui visualizzare il link (un numero intero)
--   funzione da richiamare per inserire i link
--   prefisso_progetto: prefisso da usare per i link del progetto
--   nome_progetto: nome del progetto
--   nome_leftbar: nome da usare per il collegamento nella barra di sinistra (falso se coincide con
--                   il nome del progetto, altrimenti una stringa, da usare per esempio per wikiricette)
--   logo del progetto: nome del file che contiene il logo del progetto
--   dimensioni del logo: dimensioni da usare per il logo
--   oggetto standard: per il contenuto ('opere originali', 'testi o manuali', ecc..).
--   preposizione standard: da mettere prima dell'etichetta ('di o su', 'relative a questo argomento', ecc..),
--                          se è false non viene sostituita
--   testo di apertura intorno all'etichetta: stringa vuota o testo da usare immediatamente prima del
--                                            collegamento (usate dal wikizionario per la virgoletta di
--                                              apertura e da wikiricette per non inserire niente)
--   testo di chiusura intorno all'etichetta: stringa vuota o testo di chiusura da usare immediatamente
--                                            dopo il collegamento (usate dal wikizionario per la virgoletta
--                                            di chiusura e da wikiricette per scrivere " relative a questo argomento")
--   lingua originale: lingua di un testo linkato (false se non è possibile impostarla,  true per
--                       i progetti per cui si può impostare.
--                     da usare per i progetti che prevedono l'inserimento di "in xxxxx" tra il nome
--                     del progetto e l'etichetta standard per il tipo di contenuto)
 
local default_parameter ={
    wikisource =     {1, Link, 'wikisource:', 'Wikisource', false, 'Wikisource-logo.svg', '18px', 'una pagina', 'dedicata a', '', '', false, "'''Wikisource''' contiene opere originali in inglese: ", 'http://en.wikisource.org'},
    s =              {2, Link, 's:', 'Wikisource', false, 'Wikisource-logo.svg', '18px', 'una pagina', 'dedicata a', '', '', true, "'''Wikisource''' contiene opere originali: ", "http://it.wikisource.org"},
    s2 =             {3, Link, 's:', 'Wikisource', false, 'Wikisource-logo.svg', '18px', 'una pagina', 'dedicata a', '', '', true, "'''Wikisource''' contiene opere originali: ", "http://it.wikisource.org"},
    testo =          {4, Link, 's:', 'Wikisource', 'Testo completo', 'Wikisource-logo.svg', '18px', 'il testo completo', 'di o su', '', '', true, "'''Wikisource''' contiene opere originali: ", "http://it.wikisource.org"},
    oldwikisource =  {5, Link, 'oldwikisource:', 'Wikisource', false, 'Wikisource-logo.svg', '18px', 'opere originali', 'di o su', '', '', true, "'''Wikisource''' contiene opere originali: ", "http://it.wikisource.org"},
    wikiquote =      {6, Link, 'wikiquote:', 'Wikiquote', false, 'Wikiquote-logo.svg', '18px', 'citazioni', 'di o su', '', '' , false, "'''Wikiquote''' contiene citazioni in inglese: ", "http://en.wikiquote.org"},
    q =              {7, Link, 'q:', 'Wikiquote', false, 'Wikiquote-logo.svg', '18px',  'citazioni', 'di o su', '', '' , true, "'''Wikiquote''' contiene citazioni: ", "http://it.wikiquote.org"},
    q2=              {8, Link, 'q:', 'Wikiquote', false, 'Wikiquote-logo.svg', '18px', 'citazioni', 'di o su', '', '' , true, "'''Wikiquote''' contiene citazioni: ", "http://it.wikiquote.org"},
    wikibooks =      {9, Link, 'wikibooks:', 'Wikibooks', false, 'Wikibooks-logo.svg', '22px', 'testi o manuali', 'su', '', '' , false, "'''Wikibooks''' contiene testi o manuali in inglese: ", "http://en.wikibooks.org"},
    b =              {10, Link, 'b:', 'Wikibooks', false, 'Wikibooks-logo.svg', '22px', 'testi o manuali', 'su', '', '' , false, "'''Wikibooks''' contiene testi o manuali:", "http://it.wikibooks.org"},
    ricetta =        {11, LinkRicette, 'b:Libro di cucina/Ricette/', 'Wikibooks', 'Ricette', 'Wikibooks-logo.svg', '22px', '', '', '', '' , false, "'''Wikibooks''' contiene la ricetta: ", "http://it.wikibooks.org"},
    wiktionary =     {12, Link, 'wiktionary:', 'Wikizionario', false, 'Wiktionary small.svg', '18px', 'il lemma di dizionario', false, '«', '»', false, "'''Wikizionario''' contiene la voce di dizionario in inglese:", "http://en.wiktionary.org"},
    wikt =           {13, Link, 'wikt:', 'Wikizionario', false, 'Wiktionary small.svg', '18px', 'il lemma di dizionario', false, '«', '»', false, "'''Wikizionario''' contiene la voce di dizionario: ","http://it.wiktionary.org" },
    v =              {14, Link, 'v:', 'Wikiversità', false, 'Wikiversity-logo-It.svg', '18px', 'informazioni', 'su', '', '', false, "'''Wikiversità''' contiene informazioni: ", "http://it.wikiversity.org"},
    wikinews =       {15, Link, 'wikinews:', 'Wikinotizie', false, 'Wikinews-logo.svg', '25px', 'notizie di attualità', 'su', '', '', false, "'''Wikinotizie''' contiene notizie di attualità in inglese: ", "http://en.wikinews.org"},
    n =              {16, Link, 'n:', 'Wikinotizie', false, 'Wikinews-logo.svg', '25px', 'notizie di attualità', 'su', '', '', false, "'''Wikinotizie''' contiene notizie di attualità: ", "http://it.wikinews.org"},
    commons =        {17, LinkWithLanguage, 'commons:', 'Commons', false, 'Commons-logo.svg', '18px', 'immagini o altri file', 'su', '', '', false, "'''Wikimedia Commons''' contiene file multimediali: ", "http://commons.wikimedia.org"},
    meta =           {18, LinkWithLanguage, 'meta:', 'Meta-Wiki', false, 'Wikimedia Community Logo.svg', '18px', 'informazioni', 'su', '', '', false, "'''Meta-Wiki''' contiene informazioni: ", "http://meta.wikimedia.org"},
    m =              {19, LinkWithLanguage, 'm:', 'Meta-Wiki', false, 'Wikimedia Community Logo.svg', '18px', 'informazioni', 'su', '', '', false, "'''Meta-Wiki''' contiene informazioni: ", "http://meta.wikimedia.org"},
    wikispecies =    {20, LinkWithLanguage, 'wikispecies:', 'Wikispecies', false, 'WikiSpecies notext.svg', '21px', 'informazioni', 'su', '', '', false, "'''Wikispecies''' contiene informazioni: ", "http://species.wikimedia.org"},
    voy =            {21, Link, 'voy:', 'Wikivoyage', false, 'Wikivoyage-Logo-v3-icon.svg', '18px', 'informazioni turistiche', 'su', '', '', false, "'''Wikivoyage''' contiene informazioni turistiche: ", "http://it.wikiwoyage.org"},
    mw =             {22, LinkWithLanguage, 'mw:', 'Mediawiki', false, 'MediaWiki-notext.svg', '21px', 'informazioni', 'su', '', '', false, "'''Mediawiki''' contiene informazioni: ", "http://www.mediawiki.org"},
    incubator =      {23, LinkIncubator, 'incubator:', 'Incubator', false, 'Incubator-notext.svg', '18px', '[[wikipedia]]', 'in', '', '', false, " '''Wikimedia''' Incubator contiene un test: ", "http://incubator.wikimedia.org"},
    wikidata =       {24, Link, 'wikidata:', 'Wikidata', false, 'Wikidata-logo.svg', '18px', 'dati', 'su', '', '', false, "'''Wikidata''' contiene dati su:", 'https://www.wikidata.org'},
    notizia =        {0,  Link_vuoto, 'n:', 'Wikinotizie', false, 'Wikinews-logo.svg', '25px', '', '', ': ', '', false, "'''Wikinotizie''' contiene notizie di attualità: ", 'http://it.wikinews.org'},
}
 
--tabella link gestiti in automatico se assenti, basandosi su wikidata
--formata da coppie 'nome progetto' (come compare nella tabella sopra) e nome proprietà su wikidata con il link al progetto
local automatic_link = {
    voy = {interwiki='itwikivoyage', category=nil },
    commons= {interwiki='commonswiki', category=nil },
    s= {interwiki='itwikisource', category=nil },
    q= {interwiki='itwikiquote', category=nil },
    n= {interwiki='itwikinews', category=nil }
}
 
local automatic_link_bis = {
    -- Tabella delle corrispondenze tra i "codici progetto" (come compaiono nella tabella sopra).
    -- Evita che wikidata aggiunga il link automatico se esiste già un link a uno di questi progetti
    testo = 's'
}
 
local check_property = {
    commons = 'P373'
}
 
local function sort_by_first(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 RenderLeftBar()
    -- Crea la barra di sinistra con i link interprogetto
    -- costruisce le righe per la barra di sinistra come un elenco puntato
    -- Apertura del tag div id="interProject" (vedi [[Commons:MediaWiki:InterProject.js]] incluso da [[Mediawiki:Common.js]])
 
    local leftbar = mw.html.create('div'):attr('title', 'Collegamenti verso gli altri progetti Wikimedia')
    for i = 1, #progetti.ordine do
        local pos = progetti.ordine[i][2]
        local link =progetti.link[pos]
        leftbar:newline()
        leftbar:wikitext('<li class=\"', progetti.badge_leftbar[pos], '\">')
        leftbar:wikitext(link(false, pos))
        if progetti.nome_leftbar[pos] then
            leftbar:wikitext('<br />(', progetti.nome_progetto[pos], ')')
        end
leftbar:wikitext('</li>')
    end
    root
    :tag('div')
        :attr('id', 'interProject')
        :cssText('display: none; clear: both; border-width: 2px 0; border-style: dotted; border-color: #AAAAAA; margin-top: 2em')
        :tag('p')
            :attr('id', 'sisterProjects')
            :cssText('background-color: #efefef; font-weight: bold; margin: 0 0 -0.2em')
            :tag('span')
                :wikitext('Altri progetti')
                :done()
            :done()
        :node(leftbar)
end
 
local function RenderLinksInText(in_stampa)
    -- Scandisce la tabella progetti e produce il codice html per l'elenco puntato
    for i = 1, #progetti.ordine  do
        local pos = progetti.ordine[i][2]
        root:newline()
        local link=progetti.link[pos]
        root:wikitext(link(true, pos, in_stampa))
    end
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.args
    end
 
    local in_stampa = false
    if frame.args['stampa'] then
        in_stampa = true
    end
 
    -- Carico i parametri
    local current_page = mw.title.getCurrentTitle()
    local current_namespace = current_page.namespace
    local current_pagename = current_page.text
    local current_fullpagename = ''
    -- Per i namespace uso il nome canonico (inglese) per non avere differenze tra progetti:
    -- esempio: Utente/User, Categoria/Category, ma anche Wikiquote/Wikipedia (Project), ecc.
    if current_namespace ~= 0 then
        current_fullpagename = mw.site.namespaces[current_namespace].canonicalName .. ':' .. current_pagename
    else
        current_fullpagename = current_pagename
    end
    local etichetta = origArgs.etichetta
    -- carico i dati da wikidata se esistono
    local entity = nil
    if mw.wikibase then
        entity = mw.wikibase.getEntityObject()
    end
    -- se esiste l'etichetta su wikidata uso questa come etichetta di default dei collegamenti
    local etichetta_lower
    if (etichetta == nil or etichetta == '') then
        if entity and entity.labels and entity.labels.it and entity.labels.it.value ~= '' then
            etichetta = mw.ustring.gsub(entity.labels.it.value, '^Categoria:', '') -- Elimino un eventuale "Categoria:" in fronte del nome
        else
            etichetta = mw.ustring.gsub(current_pagename, ' %(.*%)$', '')   -- Elimino un'eventuale disambigua dal nome
            if current_namespace == 0 then
                etichetta_lower = etichetta:gsub("^%l", string.lower)
            end -- converto l'iniziale dell'etichetta in minuscolo
        end
    end
 
    local preposizione = origArgs.preposizione
    local oggetto = origArgs.oggetto
    -- se preposizione e oggetto non sono definiti cambio il valore di default
 
    if current_namespace == 14 then
        preposizione = preposizione or "sull'argomento"
        oggetto = oggetto or "una categoria"
    end
 
    progetti = {
        ordine = {},
        link     = {},
        prefix   = {},
        nome_progetto = {},
        nome_leftbar = {},
        badge_leftbar = {},
        collegamento = {},
        etichetta = {},
        icona = {},
        dimensione_icona = {},
        oggetto = {},
        preposizione = {},
        testo_prima = {},
        testo_dopo = {},
        lingua = {},
        messaggio_stampa = {},
        base_url = {}
    }
 
    local pos = 0
    local notizia_presente = false
    local incubator_without_value = false
    local add_categories = {}
 
    local is_disambigua = false
 
    -- Check if the page is a disambiguation page
    -- The costant 4167410  is the wikidata item 'Wikimedia disambiguation page': https://www.wikidata.org/wiki/Q4167410
    local istance_of = 'P31'  -- wikidata property "Istance of", https://www.wikidata.org/wiki/Property:P31
    if  entity and entity.claims and entity.claims[istance_of]
        and entity.claims[istance_of][1]
        and entity.claims[istance_of][1].mainsnak
        and entity.claims[istance_of][1].mainsnak.datavalue
        and entity.claims[istance_of][1].mainsnak.datavalue.type == 'wikibase-entityid'
        and entity.claims[istance_of][1].mainsnak.datavalue.value
        and entity.claims[istance_of][1].mainsnak.datavalue.value['entity-type'] == 'item'
        and entity.claims[istance_of][1].mainsnak.datavalue.value['numeric-id'] == 4167410 then
            is_disambigua = true
    end
 
    -- carico tutti i dati in una nuova tabella  e controllo se i valori per i link presenti nella
    -- tabella automatic_link sono definiti, in caso contrario provo a leggere il link da wikidata
    local automatic_found = {}
    for key, _ in pairs(automatic_link) do automatic_found[key] = false end
    local newArgs = {}
    for k, value in pairs(origArgs) do
        -- Disabilito i link a wikidata per le voci (ns0), escludendo la Pagina principale
        if not(k == 'wikidata' or value == 'wikidata')
            or current_namespace ~= 0 or current_pagename == 'Pagina principale' then
                -- Se è disambigua registro solo i valori per i link al wikizionario
                if k == 'wikt' or value == 'wikt' or not(is_disambigua) then
                     newArgs[k] = value
                end
        end
        if automatic_link[k]  then
            automatic_found[k] = true
        elseif automatic_link_bis[k] then
             automatic_found[automatic_link_bis[k]] = true
        elseif (tonumber(k) and automatic_link[mw.text.trim(value)]) then
            automatic_found[mw.text.trim(value)] = true
         elseif tonumber(k) and automatic_link_bis[mw.text.trim(value)] then
             automatic_found[automatic_link_bis[mw.text.trim(value)]] = true
        end
    end
    for key, found in pairs(automatic_found) do
        if not (found) then
            if not (is_disambigua) and entity then
                if entity.sitelinks and entity.sitelinks[automatic_link[key].interwiki] then
                    newArgs[key] = entity.sitelinks[automatic_link[key].interwiki].title
                    if automatic_link[key].category then
                        add_categories[#add_categories+1] = automatic_link[key].category
                    end
                elseif check_property[key] and entity.claims and entity.claims[check_property[key]]
                    and entity.claims[check_property[key]][1]
                    and entity.claims[check_property[key]][1].mainsnak
                    and entity.claims[check_property[key]][1].mainsnak.datavalue
                    and entity.claims[check_property[key]][1].mainsnak.datavalue.type == 'string' then
                        newArgs[key] = 'Category:' .. entity.claims[check_property[key]][1].mainsnak.datavalue.value
                end
            end
        end
    end
    -- Per i link gestiti in automatico da wikidata, verifico i badge per la segnalazione delle voci in vetrina e di qualità
    local badge_link = {}
    if entity and entity.sitelinks then
        for key, _ in pairs(automatic_link) do
            if entity.sitelinks[automatic_link[key].interwiki] and entity.sitelinks[automatic_link[key].interwiki].badges then
                badge_link[key] = ''
                for i = 1, #entity.sitelinks[automatic_link[key].interwiki].badges do
                    if entity.sitelinks[automatic_link[key].interwiki].badges[i] == 'Q17437796' then
                        badge_link[key] = 'badge-Q17437796 badge-featuredarticle ' .. badge_link[key]
                    elseif entity.sitelinks[automatic_link[key].interwiki].badges[i] == 'Q17437798' then
                        badge_link[key] = badge_link[key] .. ' badge-Q17437798 badge-goodarticle'
                    end
                end
            end
        end
    end
    -- Scandisco tutti gli argomenti per costruire una tabella in cui ad ogni riga corrisponde un link
    -- a un altro progetto con le opzioni che sono state settate per quel progetto
    for k, collegamento in pairs(newArgs) do
        -- controlla se è un parametro posizionale e in questo caso usa il suo valore come nome del
        -- progetto a cui puntare, con pagina corrispondente a quella  della pagina corrente
        -- in cui è inserito il template
        if tonumber(k) then
            k = mw.text.trim(collegamento) -- elimino eventuali spazi iniziali e finali
            if k == 'incubator' then
                k = ''
                incubator_without_value = true -- se incubator non è valorizzato loggo l'errore
            else
                if k == 'wikt' or k =='wiktionary' then -- di default il collegamento a wikizionario è in minuscolo
                    collegamento = current_fullpagename:gsub("^%u", string.lower)
                else
                    collegamento = current_fullpagename
                end
            end
        end
        if collegamento == '' then collegamento = current_fullpagename end
        -- se k corrisponde a un progetto inserito in default_parameter aggiungo una riga alla tabella
        -- progetti con i parametri da usare per visualizzare i collegamenti
        if default_parameter[k] then
            pos = pos+1
            progetti.ordine[pos] = {default_parameter[k][1], pos}
            progetti.link[pos] = default_parameter[k][2]
            progetti.prefix[pos] =  default_parameter[k][3]
            progetti.nome_progetto[pos] = default_parameter[k][4]
            progetti.nome_leftbar[pos] = default_parameter[k][5]
            progetti.badge_leftbar[pos] = is_defined(badge_link[k]) or ''
            progetti.collegamento[pos] = collegamento
            progetti.etichetta[pos] =  is_defined(newArgs[k .. '_etichetta']) or (k == 'wikt' and etichetta_lower) or etichetta
            progetti.icona[pos] = default_parameter[k][6]
            progetti.dimensione_icona[pos] = default_parameter[k][7]
            progetti.oggetto[pos]  = newArgs[k .. '_oggetto'] or oggetto or default_parameter[k][8]
            if default_parameter[k][9] then
                progetti.preposizione[pos] = newArgs[k .. '_preposizione'] or preposizione or default_parameter[k][9]
            else
                progetti.preposizione[pos] = ''
            end
            progetti.testo_prima[pos] = default_parameter[k][10]
            progetti.testo_dopo[pos] = default_parameter[k][11]
            if k=='notizia' then
                notizia_presente = true
                if newArgs.data then
                    progetti.testo_dopo[pos] = table.concat({' <small>', newArgs.data, '</small>'})
                end
            end
            if default_parameter[k][12] and newArgs[k ..'_lingua'] then
                progetti.lingua[pos] = table.concat({' in lingua ', newArgs[k ..'_lingua'], ' '})
            else
                progetti.lingua[pos] = ' '
            end
            progetti.messaggio_stampa[pos] = default_parameter[k][13]
            progetti.base_url[pos] = default_parameter[k][14]
        end
    end
    root = mw.html.create('')
    if notizia_presente then -- gestisco il parametro "notizia" a parte
        if #progetti.ordine>1 then
            root:wikitext('<strong class="error">Errore: il parametro "notizia" se presente deve essere unico</strong>[[Categoria:Errori di compilazione del template Interprogetto]]')
        else
            if in_stampa then
                root:wikitext('* [[File:', progetti.icona[1], '|', progetti.dimensione_icona[1],
                           "]] ", progetti.messaggio_stampa[1], "'''", progetti.base_url[1],
                           tostring(mw.uri.localUrl(progetti.collegamento[1] )), "'''" )
            else
                root:wikitext('* [[File:', progetti.icona[1], '|link=', progetti.prefix[1], '|',
                             progetti.dimensione_icona[1],'|Collabora a ', progetti.nome_progetto[1],
                            "]]", " Articolo su '''[[", progetti.prefix[1], progetti.nome_progetto[1], '|',
                            progetti.nome_progetto[1], "]]''': ", "'''[[",  progetti.prefix[1],
                            progetti.collegamento[1], '|', progetti.collegamento[1], "]]'''", progetti.testo_dopo[1] )
            end
        end
    else
        if #progetti.ordine > 0 then
            table.sort(progetti.ordine, sort_by_first)
            if not(in_stampa) then RenderLeftBar() end
            if not(newArgs[1]) or mw.text.trim(newArgs[1])~= 'nolink'  then
                RenderLinksInText(in_stampa)
 
            end
            if #add_categories > 0 then
                for _,category in ipairs(add_categories) do
                    root:wikitext('[[Categoria:' .. category .. ']]')
                end
            end
        end
    end
    if incubator_without_value  then
        root:wikitext('<strong class="error">Errore: il parametro "incubator" deve essere valorizzato</strong>[[Categoria:Errori di compilazione del template Interprogetto]]')
    end
    return  tostring(root)
end
 
return p

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

Inoltre su FANDOM

Wiki casuale