- Welcome to the Kancolle Wiki!
- If you have any questions regarding site content, account registration, etc., please visit the KanColle Wiki Discord
Difference between revisions of "Module:Core"
Jump to navigation
Jump to search
Line 2: | Line 2: | ||
local Utils = {} | local Utils = {} | ||
− | + | -- * Collection functions. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
function Utils.find(tbl, v_, k_) | function Utils.find(tbl, v_, k_) | ||
Line 52: | Line 42: | ||
end | end | ||
end | end | ||
+ | |||
+ | -- * Calling arbitrary Lua functions using #invoke. | ||
+ | |||
+ | -- Used to call Formatting:tooltip in Template:Tooltip, mainly because Lua code properly escapes characters, | ||
+ | -- so that span's title attribute always works. | ||
+ | function Utils.method(frame) | ||
+ | local m = require("Module:" .. frame.args[1]) | ||
+ | local f = frame.args[2] | ||
+ | local args = {} | ||
+ | for k, v in ipairs(frame.args) do | ||
+ | if type(k) == "number" and k >= 3 and type(v) == "string" then | ||
+ | table.insert(args, v) | ||
+ | end | ||
+ | end | ||
+ | return m[f](m, unpack(args)) | ||
+ | end | ||
+ | |||
+ | -- * Frame functions. | ||
local getArgs = require("Module:GetArgs") | local getArgs = require("Module:GetArgs") | ||
+ | -- Unused. | ||
function Utils.getContext(frame) | function Utils.getContext(frame) | ||
local frame1 = frame:getParent() | local frame1 = frame:getParent() | ||
Line 69: | Line 78: | ||
end | end | ||
− | function Utils. | + | -- getParent -> getArgs |
− | local | + | function Utils.getParentArgs(frame) |
− | return " | + | local frame1 = frame:getParent() |
+ | if frame1 then | ||
+ | return getArgs{ frame = frame1 } | ||
+ | else | ||
+ | return nil | ||
+ | end | ||
+ | end | ||
+ | |||
+ | -- getArgs + getParent -> getArgs, "implicit" args can be defined in the template (e.g. pagename={{PAGENAME}}) | ||
+ | -- "explicit" args are user defined. | ||
+ | function Utils.getTemplateArgs(frame) | ||
+ | local frame1 = frame:getParent() | ||
+ | if frame1 then | ||
+ | return { implicit = getArgs{ frame = frame }, explicit = getArgs{ frame = frame1 } } | ||
+ | else | ||
+ | return { implicit = getArgs{ frame = frame }, explicit = {} } | ||
+ | end | ||
end | end | ||
return Utils | return Utils |
Revision as of 10:10, 15 August 2016
Documentation for this module may be created at Module:Core/doc
local Utils = {}
-- * Collection functions.
function Utils.find(tbl, v_, k_)
for _, v in pairs(tbl) do
if k_ and v[k_] == v_ or not k_ and v == v_ then
return true
end
end
return false
end
function Utils.map(tbl, fn)
local result = {}
for _, v in pairs(tbl) do
table.insert(result, fn(v))
end
return result
end
function Utils.filter(tbl, pred)
local result = {}
for _, v in pairs(tbl) do
if pred(v) then
table.insert(result, v)
end
end
return result
end
function Utils.ifirst(tbl)
for k, v in ipairs(tbl) do
return k, v
end
end
function Utils.first(tbl)
for k, v in pairs(tbl) do
return k, v
end
end
-- * Calling arbitrary Lua functions using #invoke.
-- Used to call Formatting:tooltip in Template:Tooltip, mainly because Lua code properly escapes characters,
-- so that span's title attribute always works.
function Utils.method(frame)
local m = require("Module:" .. frame.args[1])
local f = frame.args[2]
local args = {}
for k, v in ipairs(frame.args) do
if type(k) == "number" and k >= 3 and type(v) == "string" then
table.insert(args, v)
end
end
return m[f](m, unpack(args))
end
-- * Frame functions.
local getArgs = require("Module:GetArgs")
-- Unused.
function Utils.getContext(frame)
local frame1 = frame:getParent()
if frame1 then
local frame2 = frame1:getParent()
if frame2 then
return { pagename = frame2:getTitle(), args = getArgs{ frame = frame2 } }
else
return { pagename = frame1:getTitle(), args = getArgs{ frame = frame1 } }
end
else
return { pagename = frame:getTitle(), args = getArgs{ frame = frame } }
end
end
-- getParent -> getArgs
function Utils.getParentArgs(frame)
local frame1 = frame:getParent()
if frame1 then
return getArgs{ frame = frame1 }
else
return nil
end
end
-- getArgs + getParent -> getArgs, "implicit" args can be defined in the template (e.g. pagename={{PAGENAME}})
-- "explicit" args are user defined.
function Utils.getTemplateArgs(frame)
local frame1 = frame:getParent()
if frame1 then
return { implicit = getArgs{ frame = frame }, explicit = getArgs{ frame = frame1 } }
else
return { implicit = getArgs{ frame = frame }, explicit = {} }
end
end
return Utils