Modulo:Interprogetto
La documentazione per questo modulo può essere creata in Modulo:Interprogetto/man
local c = require('Modulo:Common')
local fmtLink = '* [[%s|%s]]'
local fmtBox = '[[File:%s|link=:%s:|Collabora a %s]] %s'
local contentLang = mw.language.getContentLanguage()
-- elemento su Wikidata
local item = mw.wikibase.getEntityObject()
-- collegamento a Wikipedia in italiano
function wikipedia()
local lang = nil
local fallbackChain = {
{'en', 'enwiki'},
{'fr', 'frwiki'},
{'de', 'dewiki'},
{'es', 'eswiki'},
{'pt', 'ptwiki'},
{'ru', 'ruwiki'},
{'el', 'elwiki'},
{'nl', 'nlwiki'},
{'rm', 'rmwiki'},
{'ca', 'cawiki'},
{'eml', 'emlwiki'},
{'fur', 'furwiki'},
{'lij', 'lijwiki'},
{'lmo', 'lmowiki'},
{'nap', 'napwiki'},
{'pms', 'pmswiki'},
{'roa-tara', 'roa_tarawiki'},
{'sc', 'scwiki'},
{'scn', 'scnwiki'},
{'vec', 'vecwiki'}
}
local sl = c.sitelink('itwiki')
if sl == nil and c.isNSAutore() then
for _, site in pairs(fallbackChain) do
if c.sitelink(site[2]) then
lang = site[1]
sl = c.sitelink(site[2])
break
end
end
end
return {sl, lang}
end
local cachedProj = {}
--la lista dei progetti a cui linkare nel caso generale (escluso Autore)
local projectListGeneral = {
{[{'oldwikisource'}] = {'oldwikisource', 'Wikisource'}},
{[{'w', 'WikiPedia'}] = {'w', 'Wikipedia', 'Wikipedia-logo.svg|18px', "'''Wikipedia''' ha una voce di approfondimento%s su '''[[:w:%s|%s]]'''", wikipedia}},
{[{'q', 'WikiQuote'}] = {'q', 'Wikiquote', 'Wikiquote-logo.svg|18px', "'''Wikiquote''' contiene citazioni%s di o su '''[[:q:%s|%s]]'''", c.wikiquote}},
{[{'n', 'WikiNews'}] = {'n', 'Wikinotizie', 'Wikinews-logo.svg|25px', "'''Wikinotizie''' contiene notizie di attualità%s su '''[[:n:%s|%s]]'''", c.wikinews}},
{[{'voy', 'WikiVoyage'}] = {'voy', 'Wikivoyage', 'Wikivoyage-Logo-v3-icon.svg|18px', "'''Wikivoyage''' contiene informazioni turistiche%s su '''[[:voy:%s|%s]]'''", c.wikivoyage}},
{[{'commons', 'Commons'}] = {'c', 'Commons', 'Commons-logo.svg|18px', "'''Commons''' contiene file multimediali%s su '''[[c:Category:%s|%s]]'''", c.commonscat}},
{[{'b', 'WikiBooks'}] = {'b', 'Wikibooks', 'Wikibooks-logo.svg|22px', "'''Wikibooks''' contiene testi o manuali%s su '''[[:b:%s|%s]]'''", c.wikibooks}},
{[{'wikispecies'}] = {'species', 'Wikispecies', 'WikiSpecies notext.svg|21px', "'''Wikispecies''' contiene informazioni%s su '''[[species:%s|%s]]'''", c.wikispecies}},
{[{'m', 'Meta'}] = {'m', 'Meta-Wiki', 'Wikimedia-logo.svg|18px', "'''Meta-Wiki''' contiene informazioni%s su '''[[m:%s|%s]]'''"}},
{[{'wikt', 'WikTionary'}] = {'wikt', 'Wikizionario', 'Wiktionary small.svg|18px', "'''Wikizionario''' contiene il lemma%s «[[wikt:%s|'''%s''']]»", c.wiktionary}},
{[{'v', 'WikiVersity'}] = {'v', 'Wikiversità', 'Wikiversity-logo.svg|18px', "'''Wikiversità''' contiene lezioni%s su '''[[:v:%s|%s]]'''", c.wikiversity}}
}
--la lista dei progetti a cui linkare nel solo caso del namespace Autore
local projectsListAutore = {
{[{'oldwikisource'}] = {'oldwikisource', 'Wikisource'}},
{[{'wAutore'}] = {'w', 'Wikipedia', 'Wikipedia-logo.svg|18px', "Voce enciclopedica%s su '''[[:w:%s|Wikipedia]]'''", wikipedia}},
{[{'qAutore'}] = {'q', 'Wikiquote', 'Wikiquote-logo.svg|18px', "Citazioni%s su '''[[:q:%s|Wikiquote]]'''", c.wikiquote}},
{[{'nAutore'}] = {'n', 'Wikinotizie', 'Wikinews-logo.svg|18px', "Notizie di attualità%s su '''[[:n:%s|Wikinotizie]]'''", c.wikinews}},
{[{'CommonsAutore'}] = {'c', 'Commons', 'Commons-logo.svg|18px', "Immagini e/o file multimediali%s su '''[[c:%s|Commons]]'''", c.commons}},
{[{'commonsAutoreCat'}] = {'c', 'Commons', 'Commons-logo.svg|18px', "Immagini e/o file multimediali%s su '''[[c:Category:%s|Commons]]'''", c.commonscat}},
{[{'wikispecies'}] = {'species', 'Wikispecies', 'WikiSpecies notext.svg|21px', "'''Wikispecies''' contiene informazioni%s su '''[[species:%s|%s]]'''", c.wikispecies}},
{[{'vAutore'}] = {'v', 'Wikiversità', 'Wikiversity-logo.svg|18px', "È presente una lezione%s su '''[[:v:%s|Wikiversità]]'''", c.wikiversity}}
}
--ritorna la lista dei progetti a seconda del namespace
function getProjectList()
if c.isNSAutore() then return projectsListAutore
else return projectListGeneral end
end
for _, proj in ipairs(getProjectList()) do
for keys, val in pairs(proj) do
for _, key in ipairs(keys) do
cachedProj[key] = true
end
end
end
local function createLink(arg1, arg2)
return string.format(fmtLink, arg1 or '', arg2 or '')
end
local function createBox(val, lang, params)
if lang and mw.language.isKnownLanguageTag(lang) then
params[1] = lang..':'..params[1]
lang = string.format(' in %s', mw.language.fetchLanguageName(lang, contentLang:getCode()))
else
lang = ''
end
return string.format(fmtBox, val[3], val[1], val[2], string.format(val[4], lang, unpack(params)))
end
local p = {}
function p.box(frame)
local oldArgs = frame:getParent().args
local args = {}
local addBoxes = (oldArgs[1] == nil or mw.text.trim(oldArgs[1]) ~= 'nolink')
local label
if oldArgs.etichetta and mw.text.trim(oldArgs.etichetta) ~= '' then
label = oldArgs.etichetta
else
label = mw.title.getCurrentTitle().text
end
for key, val in pairs(oldArgs) do
if val and mw.text.trim(val) ~= '' then
if type(key) == 'number' then
if cachedProj[val] and (oldArgs[val] == nil or mw.text.trim(oldArgs[val]) == '') then
args[val] = {label, oldArgs[val..'_lang']}
end
else
args[key] = {val, oldArgs[key..'_lang']}
end
end
end
local links = {}
local boxes = {}
addedCommons = false
for _, proj in ipairs(getProjectList()) do
for keys, projConfig in pairs(proj) do
for _, key in ipairs(keys) do
local value
if args[key] then
value = args[key]
elseif #projConfig > 4 then
value = projConfig[5]()
end
if value and (type(value) ~= 'table' or #value > 0) then
if type(value) ~= 'table' then
value = {value}
end
if projConfig[1] ~= 'c' or not addedCommons then
table.insert(links, createLink(projConfig[1] .. ':' .. value[1], projConfig[2]))
if addBoxes and #projConfig > 3 then
table.insert(boxes, createBox(projConfig, value[2], {value[1], label}))
end
if projConfig[1] == 'c' then
addedCommons = true;
end
end
break
end
end
end
end
local res = ''
if #links > 0 then
local interProject = mw.html.create('div')
:attr('id', 'interProject')
:css({
['display'] = 'none',
['clear'] = 'both',
['border-top'] = '2px dotted #AAAAAA',
['margin-top'] = '2em'
})
:tag('div')
:attr('title', 'Collegamenti verso gli altri progetti Wikimedia')
:wikitext('\n' .. table.concat(links, '\n') .. '\n')
:allDone()
res = res .. tostring(interProject)
end
if #boxes > 0 then
local boxesContainer = mw.html.create('div')
:addClass('noprint ws-noexport')
:wikitext('\n' .. table.concat(boxes, '\n\n') .. '\n')
:allDone()
res = res .. tostring(boxesContainer)
end
return res
end
return p