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