Module:Item: Difference between revisions
Jump to navigation
Jump to search
en>Petr Matas (each: separator is now in parameter 1) |
en>Petr Matas (+ component) |
||
Line 24: | Line 24: | ||
end | end | ||
return result | return result | ||
end | |||
function p.component(frame) | |||
return unpack(frame.args[1])[frame.args[2]] | |||
end | end | ||
Revision as of 02:26, 14 December 2015
Documentation for this module may be created at Module:Item/doc
local p = {} local function escape(str) return str:gsub("[|\\]", function (c) return string.format("\\%03d", c:byte()) end) end local function unescape(str) return str:gsub("\\(%d%d%d)", function (d) return string.char(d) end) end function p.pack(frame) local parent = frame:getParent() local result = '' for key, value in pairs(parent.args) do result = result .. "|" .. escape(tostring(key)) .. "|" .. escape(value) end return result .. "|"; end local function unpack(str) local result = { } for key, value in str:gfind("|([^|]*)|([^|]*)") do result[unescape(key)] = unescape(value) end return result end function p.component(frame) return unpack(frame.args[1])[frame.args[2]] end local function getItems(frame) return frame:getParent().args end local function getTemplate(frame) return frame.args.template end function p.each(frame) local items = getItems(frame) local separator = frame.args[1] or "" local template = getTemplate(frame) local result = "" for i, item in ipairs(items) do result = result .. frame:expandTemplate{ title = template, args = unpack(item) } if items[i + 1] then result = result .. separator end end return result end function p.gather(frame) local items = getItems(frame) local template = getTemplate(frame) local parameter = frame.args.parameter or "1" local args = { } for i, item in ipairs(items) do args[i] = unpack(item)[parameter] end return frame:expandTemplate{ title = template, args = args } end return p