[checked revision] | [checked revision] |
((via Mediawiker ST3)) |
([ST]) |
||
(41 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
local util_args = require ('Module:ArgsUtil') |
local util_args = require ('Module:ArgsUtil') |
||
+ | local binser = require('binser') |
||
+ | local BINSER_MARKER = '"' -- an arbitrary character to make leading/trailing spaces safe |
||
+ | local VariablesLua = mw.ext.VariablesLua |
||
local p = {} |
local p = {} |
||
− | function p.getVar(var |
+ | function p.getVar(var) |
+ | local val = VariablesLua.var(var) |
||
⚫ | |||
− | f = mw.getCurrentFrame() |
||
⚫ | |||
− | local val = f:callParserFunction('#var', var) |
||
if val == '' then |
if val == '' then |
||
return nil |
return nil |
||
end |
end |
||
− | return |
+ | return val |
end |
end |
||
− | function p. |
+ | function p.getBool(var) |
+ | local val = p.getVar(var) |
||
⚫ | |||
+ | return util_args.castAsBool(val) |
||
− | f = mw.getCurrentFrame() |
||
+ | end |
||
+ | |||
+ | function p.setBool(var, val) |
||
+ | if type(val) == 'string' then |
||
+ | val = util_args.castAsBool(val) |
||
⚫ | |||
⚫ | |||
+ | p.setVar(var, 'Yes') |
||
⚫ | |||
end |
end |
||
+ | p.setVar(var, 'No') |
||
− | f:callParserFunction('#vardefine:' .. var, val) |
||
⚫ | |||
end |
end |
||
− | function p. |
+ | function p.setVar(var, val) |
+ | VariablesLua.vardefine(var, val) |
||
⚫ | |||
+ | end |
||
+ | |||
+ | function p.setVarOnlyIf(var, val) |
||
if not val then return end |
if not val then return end |
||
+ | p.setVar(var, val) |
||
⚫ | |||
+ | end |
||
− | f = mw.getCurrentFrame() |
||
+ | |||
+ | function p.getGlobalIndex(name) |
||
⚫ | |||
⚫ | |||
+ | end |
||
+ | |||
+ | function p.setGlobalIndex(name) |
||
+ | local n = p.getGlobalIndex(name) + 1 |
||
⚫ | |||
⚫ | |||
+ | end |
||
+ | |||
+ | function p.resetGlobalIndex(name, val) |
||
+ | val = val or 0 |
||
+ | p.setVar('luaGlobalIndex' .. name, val) |
||
+ | return val |
||
+ | end |
||
+ | |||
+ | function p.appendToList(name, val, sep) |
||
+ | -- this is just for helping to debug and shouldn't actually be used ever probably |
||
+ | sep = sep or ', ' |
||
+ | local old_val = p.getVar(name) or '' |
||
+ | p.setVar(name, old_val .. sep .. val) |
||
+ | end |
||
+ | |||
+ | function p.log(val) |
||
+ | if type(val) == 'table' then |
||
+ | p.logObject(val) |
||
+ | return |
||
end |
end |
||
+ | if val == nil then |
||
− | f:callParserFunction('#vardefine:' .. var, val) |
||
+ | val = 'NIL VALUE' |
||
⚫ | |||
+ | end |
||
+ | p.appendToList('log', tostring(val)) |
||
end |
end |
||
− | function p. |
+ | function p.logObject(val) |
− | + | local tbl = {} |
|
+ | for k, v in pairs(val) do |
||
− | f = mw.getCurrentFrame() |
||
+ | tbl[#tbl+1] = k .. ': ' .. (tostring(v) or 'NIL WHEN STRING') |
||
end |
end |
||
+ | p.appendToList('log', table.concat(tbl,', ')) |
||
⚫ | |||
⚫ | |||
end |
end |
||
− | function p. |
+ | function p.clearAll(tbl) |
+ | for _, v in ipairs(tbl) do |
||
⚫ | |||
+ | p.setVar(v, '') |
||
− | f = mw.getCurrentFrame() |
||
end |
end |
||
− | local n = (tonumber(f:callParserFunction('#var','luaGlobalIndex' .. name) or 0) or 0) + 1 |
||
⚫ | |||
⚫ | |||
end |
end |
||
− | function p. |
+ | function p.setTypedVar(var, val) |
+ | local val_to_store = binser.serialize(val) |
||
− | if not f then |
||
+ | p.setVar(var, val_to_store) |
||
− | f = mw.getCurrentFrame() |
||
+ | end |
||
+ | |||
+ | function p.getTypedVar(var) |
||
+ | local val = p.getVar(var) |
||
⚫ | |||
+ | return nil |
||
end |
end |
||
+ | return binser.deserialize(val)[1] |
||
− | return tonumber(f:callParserFunction('#var','luaGlobalIndex' .. name) or 0) or 0 |
||
+ | end |
||
+ | |||
+ | function p.setObject(var, val) |
||
+ | local val_to_store = ('%s%s%s'):format( |
||
+ | BINSER_MARKER, binser.serialize(val), BINSER_MARKER |
||
+ | ) |
||
+ | p.setVar(var, val_to_store) |
||
+ | end |
||
+ | |||
+ | function p.getObject(var) |
||
+ | local val = p.getVar(var) |
||
⚫ | |||
+ | return nil |
||
+ | end |
||
+ | -- strip out the BINSER_MARKERs |
||
+ | val = val:sub(2, -2) |
||
+ | return binser.deserialize(val)[1] |
||
end |
end |
||
Revision as of 16:45, 9 June 2022
Edit the documentation or categories for this module.
local util_args = require ('Module:ArgsUtil')
local binser = require('binser')
local BINSER_MARKER = '"' -- an arbitrary character to make leading/trailing spaces safe
local VariablesLua = mw.ext.VariablesLua
local p = {}
function p.getVar(var)
local val = VariablesLua.var(var)
if val == '' then
return nil
end
return val
end
function p.getBool(var)
local val = p.getVar(var)
return util_args.castAsBool(val)
end
function p.setBool(var, val)
if type(val) == 'string' then
val = util_args.castAsBool(val)
end
if val then
p.setVar(var, 'Yes')
return
end
p.setVar(var, 'No')
end
function p.setVar(var, val)
VariablesLua.vardefine(var, val)
return val
end
function p.setVarOnlyIf(var, val)
if not val then return end
p.setVar(var, val)
end
function p.getGlobalIndex(name)
local val = p.getVar('luaGlobalIndex' .. name)
return tonumber(val) or 0
end
function p.setGlobalIndex(name)
local n = p.getGlobalIndex(name) + 1
p.setVar('luaGlobalIndex' .. name, n)
return n
end
function p.resetGlobalIndex(name, val)
val = val or 0
p.setVar('luaGlobalIndex' .. name, val)
return val
end
function p.appendToList(name, val, sep)
-- this is just for helping to debug and shouldn't actually be used ever probably
sep = sep or ', '
local old_val = p.getVar(name) or ''
p.setVar(name, old_val .. sep .. val)
end
function p.log(val)
if type(val) == 'table' then
p.logObject(val)
return
end
if val == nil then
val = 'NIL VALUE'
end
p.appendToList('log', tostring(val))
end
function p.logObject(val)
local tbl = {}
for k, v in pairs(val) do
tbl[#tbl+1] = k .. ': ' .. (tostring(v) or 'NIL WHEN STRING')
end
p.appendToList('log', table.concat(tbl,', '))
end
function p.clearAll(tbl)
for _, v in ipairs(tbl) do
p.setVar(v, '')
end
end
function p.setTypedVar(var, val)
local val_to_store = binser.serialize(val)
p.setVar(var, val_to_store)
end
function p.getTypedVar(var)
local val = p.getVar(var)
if not val then
return nil
end
return binser.deserialize(val)[1]
end
function p.setObject(var, val)
local val_to_store = ('%s%s%s'):format(
BINSER_MARKER, binser.serialize(val), BINSER_MARKER
)
p.setVar(var, val_to_store)
end
function p.getObject(var)
local val = p.getVar(var)
if not val then
return nil
end
-- strip out the BINSER_MARKERs
val = val:sub(2, -2)
return binser.deserialize(val)[1]
end
return p