Module:Sandbox/Md gilbert/ListItem

require('strict')

local p = {}

--[[ This module is intended to be invoked by the ListMaster module. Depending on the style passed to the parent, will parse and display the list item as a table row, subsection, etc.

Possible values that could be used for a members table: name, role, member_since, role, status, etc Possible values that could be used for a tasks table: title, notes, page, owner, created, due, completed, priority, remaining, etc Values can be passed in that aren't displayed, allowing for more robust storage of metadata for each item (ie, any arbitrary value can be passed in that aren't intended to be displayed, but instead facilitate machine-trackable data). --]] function p.printItem(frame) local parent_frame = frame:getParent local style = parent_frame.args.style local display = parent_frame.args.display

local res = "" if style == "table" then res = "|- \n" for col in string.gmatch(display, "[^,]+") do			-- Validate the current field, make sure we have the desired value, -- setting to an empty string if the arg doesn't exist. if frame.args[col] == nil then frame.args[col] = "" end -- Then display, passing to our local functions if the argument -- is one for which we have a specialized display function if p["display_" .. col] ~= nil then res = res .. "| " .. p["display_" .. col]( frame.args[col] ) .. "\n" else res = res .. "| " .. frame.args[col] .. "\n" end end elseif style == "section" then local title = "ListItem" if frame.args.name ~= nil then title = frame.args.name elseif frame.args.title ~= nil then title = frame.args.title end res = "==" .. title .. "==\n" -- Then go through each of the display sections and add to res for col in string.gmatch(display, "[^,]+") do			-- Validate the current field, make sure we have the desired value, -- setting to an empty string if the arg doesn't exist. if frame.args[col] == nil then frame.args[col] = "" end -- Then display each value, passing to our local functions if they exist. if p["display_" .. col] ~= nil then res = res .. "'''" .. p.firstToUpper(col) .. "''': " .. p["display_" .. col]( frame.args[col] ) else res = res .. "'''" .. p.firstToUpper(col) .. "''': " .. frame.args[col] end end end

return res end

function p.display_name(name) return "" .. name .. " • Talk • Contribs" end

function p.firstToUpper(str) return (str:gsub("^%l", string.upper)) end

return p