• 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"

From Kancolle Wiki
Jump to navigation Jump to search
m
Line 56: Line 56:
  
 
function Utils.getContext(frame)
 
function Utils.getContext(frame)
     local parentFrame = frame:getParent()
+
     local frame1 = frame:getParent()
     return { pagename = parentFrame:getTitle(), args = getArgs{ frame = parentFrame } }
+
     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
 
end
  

Revision as of 09:32, 15 August 2016

Documentation for this module may be created at Module:Core/doc

local Utils = {}

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

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

local getArgs = require("Module:GetArgs")

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

function Utils.test_context(frame)
    local context = Utils.getContext(frame)
    return "arg = " .. (context.args.arg or "?") .. " @ " .. (context.pagename or "?")
end

return Utils