Module:Sandbox/Ahecht/interwiki

local p = {}

function p._current out = {} for k, v in pairs(mw.site.interwikiMap("local")) do		if v.isCurrentWiki then table.insert(out, k)		end end return out end

function p._map(isLocal) isLocal = isLocal and "local" or nil out = {} for k, v in pairs(mw.site.interwikiMap(isLocal)) do		table.insert(out, k)	end return out end

function p._isCurrentIW(title) for _, v in ipairs(p._current) do pattern = "^:?" .. v .. ":"		if mw.ustring.match(title, pattern) then return true end end return false end

function p._isValidIW(title, isLocal) for _, v in ipairs(p._map(isLocal)) do pattern = "^:?" .. v .. ":"		if mw.ustring.match(title, pattern) then return true end end return false end

local function current(args) return table.concat(p._current, (args.sep or ", ")) end

local function map(args) return table.concat(p._map(args["local"]), (args.sep or ", ")) end

local function isCurrentIW(args) return p._isCurrentIW((args[1] or "")) end

local function ifCurrentIW(args) if p._isCurrentIW((args[1] or "")) then return args[2] or "" else return args[3] or "" end end

local function isValidIW(args) return p._isValidIW((args[1] or ""), args["local"]) end

local function ifValidIW(args) if p._isValidIW((args[1] or ""), args["local"]) then return args[2] or "" else return args[3] or "" end end

local function makeWrapper(func) return function (frame) -- If called via #invoke, use the args passed into the invoking template. -- Otherwise, for testing purposes, assume args are being passed directly in. local origArgs if frame == mw.getCurrentFrame then origArgs = frame:getParent.args for k, v in pairs(frame.args) do               origArgs = frame.args break end else origArgs = frame end -- Strip whitespace, and treat blank arguments as nil. -- 'sep' has different behaviour depending on whether -- it is blank or nil, so keep it as it is. -- isLocal needs to be converted from a string to a bool. local args = {} for k, v in pairs(origArgs) do           v = mw.text.trim(v) if v ~= '' or k == 'sep' then if k == 'local' then t = {["true"]=true,["false"]=false} args[k] = (t[v] or v==true) else args[k] = v               end end end return func(args) end end

return { current = makeWrapper(current), map = makeWrapper(map), isCurrentIW = makeWrapper(isCurrentIW), ifCurrentIW = makeWrapper(ifCurrentIW), isValidIW = makeWrapper(isValidIW), ifValidIW = makeWrapper(ifValidIW) }