Helpo:Lua/Koderoj
| |||
Kategorioj | |||
---|---|---|---|
Ŝablonoj | |||
| |||
Vidu ankaŭ | |||
Komentoj | |||
|
|||
Ĉi tie povas esti montrataj ofte uzeblaj koderoj.
Dependeco de la nomspaco
[redakti | redakti fonton]Por atingi, ke certaj aferoj nur okazu en specifa nomspaco, eblas uzi la jenan kodon:
currentTitle = mw.title.getCurrentTitle()
local ns = currentTitle.namespace
if ns == 0 then text = "Tio estas artikolo."
end
Tie anstataŭ la variablo text kun valoro povas esti metata la kodo, kiu nur efiku en la artikola nomspaco. Analogie funkcias la afero ĉe aliaj nomspacoj. Uza ekzemplo por tia kodo troviĝas en {{Coordinates2/provejo}}.
Simile eblas aranĝi zorgigan kategorion, kiu poste estas eĉ uzebla en pli ol unu funkcio:
local kategorio = ""
currentTitle = mw.title.getCurrentTitle()
local ns = currentTitle.namespace
if ns == 0 then kategorio = "[[Kategorio:Artikoloj pri katoj]]"
end
Analizo ĉu estas decimala nombro kun du postkomaj resp. postpunktaj ciferoj
[redakti | redakti fonton]Simila kodo kiel la sekva jam troviĝas en {{Coordinates2}} en la tiea funkcio p.coordinates.
local cMin = mw.ustring.char(8722) -- Unicode-Minus
local scan = "^[%s]*([%-" .. cMin .. "]?)[0-9]+([,%.])[0-9][0-9][%s]*$"
local sign, sep = mw.ustring.match(s, scan)
if sep then
if sep == "," then
s = mw.ustring.gsub(s, ",", ".", 1)
end
if sign == cMin then
s = mw.ustring.gsub(s, cMin, "-", 1)
end
-- s ist jetzt im maschinenlesbaren Format
n = tonumber(s)
end
Nur la jena kodo
n = tonumber(s)
estis ŝanĝita al
type = type .. '(' .. s .. ')'
Anstataŭaĵo de {{ucfirst:
[redakti | redakti fonton]En Lua-modulo necesas anstataŭigi {{ucfirst:
per Lua-kodo. Unu ebleco estas:[1]
mw.ustring.upper(mw.ustring.sub(str, 1, 1)) .. mw.ustring.sub(str, 2)
Alia ebleco estas:[1]
mw.language.getContentLanguage():ucfirst(str)
mw.html library
[redakti | redakti fonton]Jen kodero el la angla vikipedio:[2]
local root = mw.html.create('table')
root
:tag('tr')
:tag('td')
:css('color', args.color or false)
:wikitext('some text')
return tostring(root)
Jen unuĉela tabelo en helpa funkcio de modulo:[3]
function subtitle(text)
-- This function builds subtitles in the box
local sub_title = mw.html.create('table')
:css('text-align','center')
:css('width','100%')
:css('margin','0 auto')
local row = sub_title:tag('tr')
local sub_title_cell = row:tag('th')
:css('background-color','#EEFFCC')
:css('border','1px dotted #FFCC99')
:css('padding','0.3em')
:wikitext(text)
:done()
return tostring(sub_title)
end
Parametroj kiel Lua-variabloj
[redakti | redakti fonton]Eblas uzi parametrojn el ŝablono en Lua.[4]
local pframe = frame:getParent()
local config = frame.args -- arguments from the template definition
local args = pframe.args -- arguments from the page calling the template
Iomete alia funkcianta varianto troviĝas en {{Datoj}}, nome[5]:
local args = frame.args
local pargs = frame:getParent().args
local t = args[1] or pargs[1] or "" -- tago
local m = args[2] or pargs[2] or "" -- monato
local j = args[3] or pargs[3] or "" -- jaro
Per la helpa modulo {{Arguments}} eblas aranĝi tion en pli kompleksaj moduloj.[6]
-- This function builds the babel box used by the {{babel}} template.
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
--local args = getArgs(frame, {wrappers = 'Template:Babel'})
local args = getArgs(frame, {wrappers = 'Ŝablono:Nomo de la ŝablono'})
Funkcianta ekzemplo troviĝas en la modulo {{biografio/provejo}} kaj la ŝablono {{Informkesto biografio/provejo}}.
Elvoko de modula funkcio el alia modulo
[redakti | redakti fonton]Eĉ eblas voki modulan funkcion kun (frame)
el alia modulo laŭ la jena skemo, difinante tabelforman argumentoliston:
local p = {}
local w = require( "Module:Uzanto:Doesle/Wikidata" )
function p.getWikidata()
return w.areoKMHA({ args = { id = "Q636120" } })
end
function p.getWikidata2()
return w.claim({ args = { "P2046", id = "Q636120" } })
end
return p
La testa uzo tiam aspektas jene:
{{#invoke:Uzanto:Doesle/Testmodulo|getWikidata}} {{#invoke:Uzanto:Doesle/Testmodulo|getWikidata2}}
- Ununura funkcio
Eĉ eblas elvoki ununuran funkcion el alia modulo laŭ la jena skemo:[7][8]
-- enplekto de la alia modulo, kun la nomo de la uzata funkcio
local prenubildon = require ("Modulo:Portalo").image
local p = {}
-- elvoko de la funkcio
-- por landaj flagoj kun sekva teksto
local function flago(nomo)
if nomo == "" or nomo == nil then
return
end
local n = prenubildon{nomo} -- ne estu ronda krampo, ĉar estas importita funkcio
if n ~= "Portal-puzzle.svg" and n ~= nil then
n = "[[Dosiero:" .. n .. "|18px]] " .. nomo
return n
else
return nomo
end
end
return p
Iom truka transdono de parametroj
[redakti | redakti fonton]Eĉ eblas iomete truke transdoni parametrojn, kies nomoj estas iel kunmetataj el aliaj parametroj.[9]
local a = args["" .. k] or "" -- nenomita parametro
local b = args["" .. v["parametro"] .. k] or "" -- nomita parametro
Ĉe tio k
devas veni el io tia:[9]
for k, v in (pairs) do
end
Finfine klaras, ke la sekva varianto funkcias, se p estas difinata jene:
local p = v["parametro"]
local x = args["" .. p .. k] or ""
Analizo ĉu io enhavas jam ligilon
[redakti | redakti fonton]Analizas signoĉenon, ĉu ĝi enhavas ligilon:[10]
s = v:match( "%[%[[^|%]]*| *([^%]]+) *%]%]" )
if not s then
s = v:match( "%[%[%s*([^%]]+)%s*%]%]" )
end
if not s then
s = v
end
- Die erste Klammer heißt übersetzt: Setze s, wenn etwas gefunden wird, das
- "[["
- + allerlei, das weder | noch ] ist
- + Pipe
- + potentielle Leerzeichen
- + MERKEN→s: allerlei, das keine ] ist
- + potentielle Leerzeichen
- + "]]"
Rekte en la funkcio:
local s
for k,v in pairs(strings) do
s = v:match( "%[%[[^|%]]*| *([^%]]+) *%]%]" )
if not s then
s = v:match( "%[%[%s*([^%]]+)%s*%]%]" )
end
if not s then
s = v
end
output[k] = '[[Kategorio:' .. cat .. ' ' .. mw.text.trim(s)
if key and key ~= "" then
output[k] = output[k] .. '|' .. key
end
output[k] = output[k] .. ']]'
end
En aparta funkcio:
local function f(v, cat, key)
local s
s = v:match( "%[%[[^|%]]*| *([^%]]+) *%]%]" )
if not s then
s = v:match( "%[%[%s*([^%]]+)%s*%]%]" )
end
if not s then
s = v
end
s = '[[Kategorio:' .. cat .. ' ' .. mw.text.trim(s)
if key and key ~= "" then
s = s .. '|' .. key
end
return s .. ']]'
end
for k,v in pairs(strings) do
output[k] = f(v, cat, key)
end
Iteracio tra "tabelo", kiu estas en submodulo
[redakti | redakti fonton]Eĉ eblas iteracii tra "tabelo", kiu ne estas en la sama modulo, sed en enplektita submodulo. Jen ekzemplo:[11]
local submodulo = args['submodulo'] or "geokesto"
local variabloj = 'Modulo:Geografiaĵoj/' .. submodulo
local parametroj = mw.loadData(variabloj)
local listo = parametroj.linioj
if type(listo) == "table" then
-- testo
local s
local par, t, pk, pk2, a1, a2, pri, pri2
for k, v in pairs(listo) do
-- s = type(k)
-- if s == "string" then
-- return k
-- elseif s == "table" then
-- return k
-- elseif s == "number" then
if type(v) == "table" then
par = v["parametro"]
t = v["tipo"]
pri = v["priskribo"]
pri2 = v["priskribo2"]
pk = v["pKodo"]
pk2 = v["pKodo2"]
a1 = v["aldono1"]
a2 = v["aldono2"]
-- voki la parametron el args
par = tostring(par)
-- local param = args[par] or ""
local param = argumentoj (args, par)
-- pliaj kodo
end -- fino de "for"
end -- fino de "if"
Analizo de "qualifier" de Vikidatuma ero
[redakti | redakti fonton]Eĉ eblas analizi, ĉu "qualifier" de Vikidatuma ero ekzistas kaj poste konvene trakti tion.[12]
-- mallonga versio
v = bildo[1].qualifiers and bildo[1].qualifiers["P2096"] or nil
-- pli legebla kaj pli kompleta versio
if bildo[1] and bildo[1].qualifiers then
v = bildo[1].qualifiers["P2096"]
end
Fontoteksto
[redakti | redakti fonton]Se oni volas montri la kompletan fontoteksto de modulo, tio eblas jene:[13]
{{#tag:syntaxhighlight | {{Modulo:Saluton}} | lang=lua}}
kio redonas:
local p = {}
function p.hello(frame)
local name = frame.args[1]
if not name then name = 'mondo' end
return 'Saluton, ' .. name .. '! Tio estas Lua!'
end
return p
Referencoj
[redakti | redakti fonton]- ↑ 1,0 1,1 Jen arkivo pri "ucfirst"
- ↑ Jen arkivo pri "mw.html library"
- ↑ Modulo:Babel
- ↑ Jen arkivo pri "parametroj kiel Lua-variabloj"
- ↑ Laŭ la funkcio
p.board
en en:Module:Chessboard - ↑ de:Modul:Vorlage:Babel
- ↑ La kompleta modulo estas {{Geografiaĵoj/provejo2}}.
- ↑ Laŭ ideo en la angla modulo en:Module:Portal bar.
- ↑ 9,0 9,1 Tlustulimu testis tion sur Modulo:Uzanto:Tlustulimu/Testmodulo en la funkcio "p.informkesto2". La rezulto videblas sur Vikipedio:Lua/Moduloj/Geografiaĵoj/testoj.
- ↑ El la uzantopaĝo Uzanto:Tlustulimu/lua
- ↑ Bone funkcianta varianto estas en la modulo {{Geografiaĵoj/provejo2}}.
- ↑ Diskuto en la franca vikipedio france
- ↑ Laũ la germana helpopaĝo pri sintaksa markigo