Modulo:Interprogetto

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
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 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
-- logo del progetto
-- dimensioni del logo
-- testo di invito a collaborare
-- testo standard ' contiene '
-- testo standard che identifica il contenuto ('opere originali', 'ricette', ecc..)
local default_parameter ={
wikisource = {1, 's:', 'Wikisource', false, 'Wikisource-logo.svg', '18px', 'Collabora a Wikisource', ' contiene ', 'opere originali ', 'di o su'},
testo = {2, 's:', 'Testo completo', false, 'Wikisource-logo.svg', '18px', 'Collabora a Wikisource', ' contiene ', 'opere originali ', 'di o su'}, -- da verificare parametri
wikiquote = {3, 'q:', 'Wikiquote', false },
wikibooks = {4, 'wikibooks:', 'Wikibooks', false },
ricetta = {5, 'b:Libro di cucina/Ricette/', 'Ricetta<br />(Wikibooks)', false },
wiktionary = {6, 'wiktionary:', 'Wikizionario', false},
v = {7, 'v:', 'Wikiversità', false},
wikinews = {8, 'wikinews:', 'Wikinotizie', false},
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}
}
-- 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)
if t1[1] < t2[1] then
return true
end
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, nome_voce, prefix, nome_progetto, lang = unpack(progetto)
if lang then
leftbar.wikitext('* [' .. tostring(mw.uri.fullUrl(prefix .. nome_voce, {uselang=lang})) .. ' ' .. nome_progetto .. ']')
else
leftbar.wikitext('* [[' .. prefix .. nome_voce .. '|' .. 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()
if args.nolink then return end
end
local function _interprogetto()
--radice del markup ritornato
root = HtmlBuilder.create()
RenderLeftBar()
--RenderLinkInText()
return tostring(root)
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
current_page = mw.title.getCurrentTitle().text
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 = current_page
end
local supriority = 0
if alias[k] then
subpriority, k = unpack(alias[k])
end
if default_parameter[k] then
table.insert(progetto, default_parameter[k][1] + supriority / 10)
table.insert(progetto, v)
table.insert(progetto, default_parameter[k][2]) --prefix
table.insert(progetto, default_parameter[k][3]) --nome progetto
table.insert(progetto, default_parameter[k][4])
table.insert(progetti, progetto)
end
end
table.sort(progetti, sort_by_priority)
return _interprogetto()
end
return p