Mòdul:LoadData
Aparença
Documentació del mòdul [ mostra ] [ modifica el codi ] [ mostra l'historial ] [ refresca ]
A continuació es mostra la documentació transclosa de la subpàgina /ús. [salta a la caixa de codi]
Una versió més complexa de Mòdul:Data amb més opcions i la possibilitat de seleccionar índexs amb un operador de desigualtat.
Ús
[modifica]{{#invoke:{{BASEPAGENAME}}|Nom del mòdul|index1|2 lteq=index2 limit|...|}}
- El paràmetre zero és el nom del mòdul de dades que cal llegir, sense Mòdul:, p.
Exemple/dades
- Els paràmetres següents, per a un índex N que comença per un, s'anomenen
|N=
per a l'índex exacte que necessiteu, forçat a numerar si és possible,|N lteq=
per seleccionar l'índex numèric més alt menor o igual que l'argument, o|N gteq=
per al contrari. |template=
és una cadena d'estil printf per interpolar els valors resultants, p.<b>%s</b>
.|preprocess=
és com|template=
excepte que s'executaframe:preprocess
; això fa que p. ex. les transclusions de plantilla funcionin.|if nil=
és la cadena a retornar si el resultat és nul. El valor per defecte és nul, que surt com a cadena buida.
local p = {}
-- Finds the next key key <= or >= the given i.
-- operator is ±1
local function findItemRange(data, i, operator)
local bestIndex = nil
i = i * operator
for k, v in pairs(data) do
local kop = type(k) == 'number' and k * operator
if kop and kop <= i and (bestIndex == nil or kop > bestIndex * operator) then
bestIndex = k
end
end
if bestIndex then return data[bestIndex] else return nil end
end
local function load(datamodule, frame)
local args = frame.args
local data = mw.loadData(datamodule)
for i = 1, 20 do
if args[i] then data = data[tonumber(args[i]) or args[i]]
elseif args[i .. ' lteq'] then
data = findItemRange(data, tonumber(args[i .. ' lteq']), 1)
elseif args[i .. ' gteq'] then
data = findItemRange(data, tonumber(args[i .. ' gteq']), -1)
else break end
end
if data == nil then
return args['if_nil'] -- not a required argument, OK to return nil here.
end
if type(data) == 'table' then
-- Put the table into another table because the return value of loadData
-- is a "fake" table that only has certain metamethods.
local realdata = {}
for k, v in pairs(data) do
realdata[k] = v
end
data = realdata
else
data = { data }
end
if args['template'] then
return mw.text.unstripNoWiki(args['template']):format(unpack(data))
elseif args['preprocess'] then
return frame:preprocess(mw.text.unstripNoWiki(args['preprocess']):format(unpack(data)))
else
return table.concat(data)
end
end
return setmetatable({}, {
__index = function(t, k)
return function(frame)
return load('Module:' .. k, frame)
end
end
})