Difference between revisions of "Module:Items"

From Nookipedia, the Animal Crossing wiki
(New split function, courtesy Cuyler)
m (adding RV type)
 
(18 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
local p = {}
 
local p = {}
 +
 +
local availabilityT = require("Module:Availability")
  
 
function insert(str1, str2, pos)
 
function insert(str1, str2, pos)
 
     return str1:sub(1,pos)..str2..str1:sub(pos+1)
 
     return str1:sub(1,pos)..str2..str1:sub(pos+1)
 +
end
 +
 +
 +
function isEmpty(s)
 +
return s == nil or s == ''
 
end
 
end
  
Line 50: Line 57:
 
     for k, avail in ipairs(availabilityTable) do
 
     for k, avail in ipairs(availabilityTable) do
 
         if avail:match("%((.-)%)") then
 
         if avail:match("%((.-)%)") then
         availabilityText = avail:match("(.+)%(")
+
         availabilityText = avail:match("(.+)%("):gsub("^%s*(.-)%s*$", "%1")
             availability = frame:expandTemplate{ title = "Availability", args = { availabilityText, note = avail:match("%((.-)%)") } }
+
             availability = availabilityT.outputAvailability(availabilityText,"","","",avail:match("%((.-)%)"))
 +
        else
 +
        availabilityText = avail:gsub("^%s*(.-)%s*$", "%1")
 +
            availability = availabilityT.outputAvailability(availabilityText)
 +
        end
 +
        availabilityList = availabilityList .. string.gsub(availability, "\s+$", "")
 +
    end
 +
 
 +
local root = mw.html.create()
 +
root:wikitext(availabilityList)
 +
 +
return root
 +
end
 +
 
 +
function p.outputAvailabilitiesFromListWithoutNotes (frame)
 +
    local data = frame.args[1]
 +
    local availabilityTable = split( data, "," )
 +
    local availability = ""
 +
    local availabilityList = ""
 +
    local mainAvailability = ""
 +
    local availabilityText = ""
 +
    local availabilityOutput = ""
 +
    for k, avail in ipairs(availabilityTable) do
 +
        if avail:match("%((.-)%)") then
 +
        availabilityText = avail:match("(.+)%("):gsub("^%s*(.-)%s*$", "%1")
 +
            availability = availabilityT.outputAvailability(availabilityText)
 
         else
 
         else
         availabilityText = avail
+
         availabilityText = avail:gsub("^%s*(.-)%s*$", "%1")
            availability = frame:expandTemplate{ title = "Availability", args = { availabilityText } }
+
            availability = availabilityT.outputAvailability(availabilityText)
 
         end
 
         end
          
+
         availabilityList = availabilityList .. string.gsub(availability, "\s+$", "")
         availabilityList = availabilityList .. availability
+
    end
 +
 
 +
local root = mw.html.create()
 +
root:wikitext(availabilityList)
 +
 +
return root
 +
end
 +
 
 +
function p.outputAvailabilitiesCategoriesFromList (frame)
 +
    local data = frame.args[1]
 +
    local availabilityTable = split( data, "," )
 +
    local availability = ""
 +
    local availabilityList = ""
 +
    local mainAvailability = ""
 +
    local availabilityText = ""
 +
    local availabilityOutput = ""
 +
    for k, avail in ipairs(availabilityTable) do
 +
        if avail:match("%((.-)%)") then
 +
        availabilityText = avail:match("(.+)%("):gsub("^%s*(.-)%s*$", "%1")
 +
        if availabilityText == "Unobtainable" then
 +
        availability = '[[Category:Unobtainable items]]'
 +
        if frame.args['game'] == "DnM" then
 +
        availability = availablity .. ' [[Category:Unobtainable items in Doubutsu no Mori]]'
 +
        elseif frame.args['game'] == "DnM+" then
 +
        availability = availablity .. ' [[Category:Unobtainable items in Doubutsu no Mori+]]'
 +
        elseif frame.args['game'] == "PG" then
 +
        availability = availablity .. ' [[Category:Unobtainable items in Animal Crossing]]'
 +
        elseif frame.args['game'] == "DnMe+" then
 +
        availability = availablity .. ' [[Category:Unobtainable items in Doubutsu no Mori e+]]'
 +
        elseif frame.args['game'] == "WW" then
 +
        availability = availablity .. ' [[Category:Unobtainable items in Wild World]]'
 +
        elseif frame.args['game'] == "CF" then
 +
        availability = availablity .. ' [[Category:Unobtainable items in City Folk]]'
 +
        elseif frame.args['game'] == "NL" then
 +
        availability = availablity .. ' [[Category:Unobtainable items in New Leaf]]'
 +
        elseif frame.args['game'] == "HHD" then
 +
        availability = availablity .. ' [[Category:Unobtainable items in Happy Home Designer]]'
 +
        elseif frame.args['game'] == "PC" then
 +
        availability = availablity .. ' [[Category:Unobtainable items in Pocket Camp]]'
 +
        elseif frame.args['game'] == "NH" then
 +
        availability = availablity .. ' [[Category:Unobtainable items in New Horizons]]'
 +
        end
 +
        else
 +
            availability = '[[Category:Acquired from ' .. availabilityText .. ']]'
 +
            end
 +
        else
 +
        availabilityText = avail:gsub("^%s*(.-)%s*$", "%1")
 +
            if availabilityText == "Unobtainable" then
 +
        availability = '[[Category:Unobtainable items]]'
 +
        if frame.args['game'] == "DnM" then
 +
        availability = availablity .. ' [[Category:Unobtainable items in Doubutsu no Mori]]'
 +
        elseif frame.args['game'] == "DnM+" then
 +
        availability = availablity .. ' [[Category:Unobtainable items in Doubutsu no Mori+]]'
 +
        elseif frame.args['game'] == "PG" then
 +
        availability = availablity .. ' [[Category:Unobtainable items in Animal Crossing]]'
 +
        elseif frame.args['game'] == "DnMe+" then
 +
        availability = availablity .. ' [[Category:Unobtainable items in Doubutsu no Mori e+]]'
 +
        elseif frame.args['game'] == "WW" then
 +
        availability = availablity .. ' [[Category:Unobtainable items in Wild World]]'
 +
        elseif frame.args['game'] == "CF" then
 +
        availability = availablity .. ' [[Category:Unobtainable items in City Folk]]'
 +
        elseif frame.args['game'] == "NL" then
 +
        availability = availablity .. ' [[Category:Unobtainable items in New Leaf]]'
 +
        elseif frame.args['game'] == "HHD" then
 +
        availability = availablity .. ' [[Category:Unobtainable items in Happy Home Designer]]'
 +
        elseif frame.args['game'] == "PC" then
 +
        availability = availablity .. ' [[Category:Unobtainable items in Pocket Camp]]'
 +
        elseif frame.args['game'] == "NH" then
 +
        availability = availablity .. ' [[Category:Unobtainable items in New Horizons]]'
 +
        end
 +
        else
 +
        if frame.args['type'] == "RV" then
 +
            availability = '[[Category:Acquired from ' .. availabilityText .. '\'s RV]]'
 +
            else
 +
            availability = '[[Category:Acquired from ' .. availabilityText .. ']]'
 +
            end
 +
            end
 +
        end
 +
         availabilityList = availabilityList .. string.gsub(availability, "\s+$", "")
 
     end
 
     end
  
Line 73: Line 183:
 
     local mainVillager = ""
 
     local mainVillager = ""
 
     local villagerOutput = ""
 
     local villagerOutput = ""
    local argument = "Villager"
 
 
     for k, villa in ipairs(villagerTable) do
 
     for k, villa in ipairs(villagerTable) do
         villager = frame:expandTemplate{ title = "Availability", args = { argument, villa } }
+
         villager = availabilityT.outputAvailability("Villager", villa:gsub("^%s*(.-)%s*$", "%1"))
         villagerList = villagerList .. villager
+
         villagerList = villagerList .. string.gsub(villager, "\s+$", "")
 
     end
 
     end
  
 
local root = mw.html.create()
 
local root = mw.html.create()
 
root:wikitext(villagerList)
 
root:wikitext(villagerList)
 
 
return root
 
return root
 
end
 
end
Line 92: Line 200:
 
     local mainRV = ""
 
     local mainRV = ""
 
     local rvOutput = ""
 
     local rvOutput = ""
    local argument = "RV"
 
 
     for k, villa in ipairs(rvTable) do
 
     for k, villa in ipairs(rvTable) do
         rv = frame:expandTemplate{ title = "Availability", args = { argument, villa } }
+
         rv = availabilityT.outputAvailability("RV", villa:gsub("^%s*(.-)%s*$", "%1"))
 
         rvList = rvList .. string.gsub(rv, "\s+$", "");
 
         rvList = rvList .. string.gsub(rv, "\s+$", "");
 
     end
 
     end
Line 100: Line 207:
 
local root = mw.html.create()
 
local root = mw.html.create()
 
root:wikitext(rvList)
 
root:wikitext(rvList)
 
 
return root
 
return root
 +
end
 +
 +
function p.outputHousemates  (frame)
 +
    local data = frame.args[1]
 +
    local housemateTable = split( data, "," )
 +
    local housemate = ""
 +
    local housemateList = ""
 +
    local mainHousemate = ""
 +
    local housemateOutput = ""
 +
    for k, mate in ipairs(housemateTable) do
 +
    if k == #housemateTable and k-1 ~= 0 then
 +
housemateList = housemateList .. 'and '
 +
end
 +
        housemate = "[[" .. mate:gsub("^%s*(.-)%s*$", "%1") .. "]]"
 +
        housemateList = housemateList .. string.gsub(housemate, "\s+$", "")
 +
        if k == #housemateTable then
 +
        housemateList = housemateList .. ''
 +
        elseif k-1 == 0 and k+1 == #housemateTable then
 +
        housemateList = housemateList .. ' '
 +
        else
 +
        housemateList = housemateList .. ', '
 +
        end
 +
    end
 +
 +
local root = mw.html.create()
 +
root:wikitext(housemateList)
 +
return root
 +
end
 +
 +
function p.outputStickersFighters (frame)
 +
    local data = frame.args[1]
 +
    local stickersTable = split( data, "," )
 +
    local fighters = ""
 +
    local fightersList = ""
 +
    local mainFighters = ""
 +
    local fightersOutput = ""
 +
    for k, mate in ipairs(stickersTable) do
 +
    if mate:gsub("^%s*(.-)%s*$", "%1") == "All fighters" then
 +
    fightersList = fightersList .. "All fighters"
 +
    else
 +
    if k == #stickersTable and k-1 ~= 0 then
 +
fightersList = fightersList .. 'and '
 +
end
 +
        fighters = "[[smashwiki:" .. mate:gsub("^%s*(.-)%s*$", "%1") .. " (SSBB)|" .. mate:gsub("^%s*(.-)%s*$", "%1") .. "]]"
 +
        fightersList = fightersList .. string.gsub(fighters, "\s+$", "")
 +
        if k == #stickersTable then
 +
        fightersList = fightersList .. ''
 +
        elseif k-1 == 0 and k+1 == #stickersTable then
 +
        fightersList = fightersList .. ' '
 +
        else
 +
        fightersList = fightersList .. ', '
 +
        end
 +
end
 +
    end
 +
 +
local root = mw.html.create()
 +
root:wikitext(fightersList)
 +
return root
 +
end
 +
 +
function fighterFormat(fighter)
 +
if fighter == 'Villager' then
 +
return '[[Villager (Super Smash Bros. series)|Villager]]'
 +
elseif fighter == 'Isabelle' then
 +
return '[[Isabelle]]'
 +
else
 +
return '[[smashwiki:' .. fighter .. ' (SSBU)|' .. fighter .. ']]'
 +
end
 +
end
 +
 +
function p.outputEnemies(frame)
 +
    local data = mw.text.jsonDecode(mw.text.decode(frame.args['1']))
 +
    local enemy = ""
 +
    for k, e in pairs(data) do
 +
    enemy = enemy .. "<li style=\"list-style-position: inside; padding-left: 5px\">"
 +
    if not isEmpty(e['fighter-condition']) then
 +
        enemy = enemy .. e['fighter-condition'] .. " "
 +
    end
 +
    if not isEmpty(e['fighter-variant']) then
 +
        enemy = enemy .. e['fighter-variant'] .. " "
 +
    end
 +
    enemy = enemy .. fighterFormat(e['fighter']) .. "</li>"
 +
    end
 +
    return enemy
 +
end
 +
 +
function p.outputRules(frame)
 +
    local data = mw.text.jsonDecode(mw.text.decode(frame.args['1']))
 +
    local rules = ""
 +
    for k, r in pairs(data) do
 +
    rules = rules .. "<li style=\"list-style-position: inside; padding-left: 5px\">"  .. r['rule'] .. "</li>"
 +
    end
 +
    return rules
 +
end
 +
 +
function p.outputConditions(frame)
 +
    local data = mw.text.jsonDecode(mw.text.decode(frame.args['1']))
 +
    local conditions = ""
 +
    for k, r in pairs(data) do
 +
    conditions = conditions .. "<li style=\"list-style-position: inside; padding-left: 5px\">"  .. r['condition'] .. "</li>"
 +
    end
 +
    return conditions
 
end
 
end
  
 
return p
 
return p

Latest revision as of 13:24, December 6, 2022

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

local p = {}

local availabilityT = require("Module:Availability")

function insert(str1, str2, pos)
    return str1:sub(1,pos)..str2..str1:sub(pos+1)
end


function isEmpty(s)
	return s == nil or s == ''
end

function split(str, pattern)
    local out = {}

    for m in string.gmatch(str, "[^" .. pattern .. "]+") do
      table.insert(out, m)
    end

    return out
end

function p.italicizeGameInTitle(frame)
	local title = frame.args[1]
    local openParenthIndex = string.len(title) - (title:reverse()):find("%(")
    local closeParenthIndex = string.len(title) -  (title:reverse()):find("%)")

    local newTitle = title
    newTitle = insert(newTitle, "''", openParenthIndex + 1)
    newTitle = insert(newTitle, "''", closeParenthIndex + 2)

    local root = mw.html.create()
	root:wikitext(newTitle)
	return newTitle
end

function p.outputSortedFurniture (frame)
    local game = frame.args[2]
    local data = mw.text.jsonDecode(frame.args[1])
    table.sort(data, function(k1, k2) return string.len(k1.name) < string.len(k2.name) end)
    local furnitureOutput = ""
    for k, v in ipairs(data) do
        furnitureOutput = furnitureOutput .. frame:expandTemplate{ title = "HouseItem", args = { item = v['name'], count = v['count'], img = v['img'], note = v['note'], game = game } }
    end
    return furnitureOutput
end

function p.outputAvailabilitiesFromList (frame)
    local data = frame.args[1]
    local availabilityTable = split( data, "," )
    local availability = ""
    local availabilityList = ""
    local mainAvailability = ""
    local availabilityText = ""
    local availabilityOutput = ""
    for k, avail in ipairs(availabilityTable) do
        if avail:match("%((.-)%)") then
        	availabilityText = avail:match("(.+)%("):gsub("^%s*(.-)%s*$", "%1")
            availability = availabilityT.outputAvailability(availabilityText,"","","",avail:match("%((.-)%)"))
        else
        	availabilityText = avail:gsub("^%s*(.-)%s*$", "%1")
            availability = availabilityT.outputAvailability(availabilityText)
        end
        availabilityList = availabilityList .. string.gsub(availability, "\s+$", "")
    end

	local root = mw.html.create()
	root:wikitext(availabilityList)
	
	return root
end

function p.outputAvailabilitiesFromListWithoutNotes (frame)
    local data = frame.args[1]
    local availabilityTable = split( data, "," )
    local availability = ""
    local availabilityList = ""
    local mainAvailability = ""
    local availabilityText = ""
    local availabilityOutput = ""
    for k, avail in ipairs(availabilityTable) do
        if avail:match("%((.-)%)") then
        	availabilityText = avail:match("(.+)%("):gsub("^%s*(.-)%s*$", "%1")
            availability = availabilityT.outputAvailability(availabilityText)
        else
        	availabilityText = avail:gsub("^%s*(.-)%s*$", "%1")
            availability = availabilityT.outputAvailability(availabilityText)
        end
        availabilityList = availabilityList .. string.gsub(availability, "\s+$", "")
    end

	local root = mw.html.create()
	root:wikitext(availabilityList)
	
	return root
end

function p.outputAvailabilitiesCategoriesFromList (frame)
    local data = frame.args[1]
    local availabilityTable = split( data, "," )
    local availability = ""
    local availabilityList = ""
    local mainAvailability = ""
    local availabilityText = ""
    local availabilityOutput = ""
    for k, avail in ipairs(availabilityTable) do
        if avail:match("%((.-)%)") then
        	availabilityText = avail:match("(.+)%("):gsub("^%s*(.-)%s*$", "%1")
        	if availabilityText == "Unobtainable" then
        		availability = '[[Category:Unobtainable items]]'
        		if frame.args['game'] == "DnM" then
        			availability = availablity .. ' [[Category:Unobtainable items in Doubutsu no Mori]]'
        		elseif frame.args['game'] == "DnM+" then
        			availability = availablity .. ' [[Category:Unobtainable items in Doubutsu no Mori+]]'
        		elseif frame.args['game'] == "PG" then
        			availability = availablity .. ' [[Category:Unobtainable items in Animal Crossing]]'
        		elseif frame.args['game'] == "DnMe+" then
        			availability = availablity .. ' [[Category:Unobtainable items in Doubutsu no Mori e+]]'
        		elseif frame.args['game'] == "WW" then
        			availability = availablity .. ' [[Category:Unobtainable items in Wild World]]'
        		elseif frame.args['game'] == "CF" then
        			availability = availablity .. ' [[Category:Unobtainable items in City Folk]]'
        		elseif frame.args['game'] == "NL" then
        			availability = availablity .. ' [[Category:Unobtainable items in New Leaf]]'
        		elseif frame.args['game'] == "HHD" then
        			availability = availablity .. ' [[Category:Unobtainable items in Happy Home Designer]]'
        		elseif frame.args['game'] == "PC" then
        			availability = availablity .. ' [[Category:Unobtainable items in Pocket Camp]]'
        		elseif frame.args['game'] == "NH" then
        			availability = availablity .. ' [[Category:Unobtainable items in New Horizons]]'
        		end
        	else
            	availability = '[[Category:Acquired from ' .. availabilityText .. ']]'
            end
        else
        	availabilityText = avail:gsub("^%s*(.-)%s*$", "%1")
            if availabilityText == "Unobtainable" then
        		availability = '[[Category:Unobtainable items]]'
        		if frame.args['game'] == "DnM" then
        			availability = availablity .. ' [[Category:Unobtainable items in Doubutsu no Mori]]'
        		elseif frame.args['game'] == "DnM+" then
        			availability = availablity .. ' [[Category:Unobtainable items in Doubutsu no Mori+]]'
        		elseif frame.args['game'] == "PG" then
        			availability = availablity .. ' [[Category:Unobtainable items in Animal Crossing]]'
        		elseif frame.args['game'] == "DnMe+" then
        			availability = availablity .. ' [[Category:Unobtainable items in Doubutsu no Mori e+]]'
        		elseif frame.args['game'] == "WW" then
        			availability = availablity .. ' [[Category:Unobtainable items in Wild World]]'
        		elseif frame.args['game'] == "CF" then
        			availability = availablity .. ' [[Category:Unobtainable items in City Folk]]'
        		elseif frame.args['game'] == "NL" then
        			availability = availablity .. ' [[Category:Unobtainable items in New Leaf]]'
        		elseif frame.args['game'] == "HHD" then
        			availability = availablity .. ' [[Category:Unobtainable items in Happy Home Designer]]'
        		elseif frame.args['game'] == "PC" then
        			availability = availablity .. ' [[Category:Unobtainable items in Pocket Camp]]'
        		elseif frame.args['game'] == "NH" then
        			availability = availablity .. ' [[Category:Unobtainable items in New Horizons]]'
        		end
        	else
        		if frame.args['type'] == "RV" then
            		availability = '[[Category:Acquired from ' .. availabilityText .. '\'s RV]]'
            	else
            		availability = '[[Category:Acquired from ' .. availabilityText .. ']]'
            	end
            end
        end
        availabilityList = availabilityList .. string.gsub(availability, "\s+$", "")
    end

	local root = mw.html.create()
	root:wikitext(availabilityList)
	
	return root
end

function p.outputVillagerFromList (frame)
    local data = frame.args[1]
    local villagerTable = split( data, "," )
    local villager = ""
    local villagerList = ""
    local mainVillager = ""
    local villagerOutput = ""
    for k, villa in ipairs(villagerTable) do
        villager = availabilityT.outputAvailability("Villager", villa:gsub("^%s*(.-)%s*$", "%1"))
        villagerList = villagerList .. string.gsub(villager, "\s+$", "")
    end

	local root = mw.html.create()
	root:wikitext(villagerList)
	return root
end

function p.outputRVAvailabilitiesFromList (frame)
    local data = frame.args[1]
    local rvTable = split( data, "," )
    local rv = ""
    local rvList = ""
    local mainRV = ""
    local rvOutput = ""
    for k, villa in ipairs(rvTable) do
        rv = availabilityT.outputAvailability("RV", villa:gsub("^%s*(.-)%s*$", "%1"))
        rvList = rvList .. string.gsub(rv, "\s+$", "");
    end

	local root = mw.html.create()
	root:wikitext(rvList)
	return root
end

function p.outputHousemates  (frame)
    local data = frame.args[1]
    local housemateTable = split( data, "," )
    local housemate = ""
    local housemateList = ""
    local mainHousemate = ""
    local housemateOutput = ""
    for k, mate in ipairs(housemateTable) do
    	if k == #housemateTable and k-1 ~= 0 then
			housemateList = housemateList .. 'and '
		end
        housemate = "[[" .. mate:gsub("^%s*(.-)%s*$", "%1") .. "]]"
        housemateList = housemateList .. string.gsub(housemate, "\s+$", "")
        if k == #housemateTable then
        	housemateList = housemateList .. ''
        elseif k-1 == 0 and k+1 == #housemateTable then
        	housemateList = housemateList .. ' '
        else
        	housemateList = housemateList .. ', '
        end
    end

	local root = mw.html.create()
	root:wikitext(housemateList)
	return root
end

function p.outputStickersFighters (frame)
    local data = frame.args[1]
    local stickersTable = split( data, "," )
    local fighters = ""
    local fightersList = ""
    local mainFighters = ""
    local fightersOutput = ""
    for k, mate in ipairs(stickersTable) do
    	if mate:gsub("^%s*(.-)%s*$", "%1") == "All fighters" then
    		fightersList = fightersList .. "All fighters"
    	else
	    	if k == #stickersTable and k-1 ~= 0 then
				fightersList = fightersList .. 'and '
			end
	        fighters = "[[smashwiki:" .. mate:gsub("^%s*(.-)%s*$", "%1") .. " (SSBB)|" .. mate:gsub("^%s*(.-)%s*$", "%1") .. "]]"
	        fightersList = fightersList .. string.gsub(fighters, "\s+$", "")
	        if k == #stickersTable then
	        	fightersList = fightersList .. ''
	        elseif k-1 == 0 and k+1 == #stickersTable then
	        	fightersList = fightersList .. ' '
	        else
	        	fightersList = fightersList .. ', '
	        end
		end
    end

	local root = mw.html.create()
	root:wikitext(fightersList)
	return root
end

function fighterFormat(fighter)
	if fighter == 'Villager' then
		return '[[Villager (Super Smash Bros. series)|Villager]]'
	elseif fighter == 'Isabelle' then
		return '[[Isabelle]]'
	else
		return '[[smashwiki:' .. fighter .. ' (SSBU)|' .. fighter .. ']]'	
	end
end

function p.outputEnemies(frame)
    local data = mw.text.jsonDecode(mw.text.decode(frame.args['1']))
    local enemy = ""
    for k, e in pairs(data) do
    	enemy = enemy .. "<li style=\"list-style-position: inside; padding-left: 5px\">"
    	if not isEmpty(e['fighter-condition']) then
        	enemy = enemy .. e['fighter-condition'] .. " "
    	end
    	if not isEmpty(e['fighter-variant']) then
        	enemy = enemy .. e['fighter-variant'] .. " "
    	end
    	enemy = enemy .. fighterFormat(e['fighter']) .. "</li>"
    end
    return enemy
end

function p.outputRules(frame)
    local data = mw.text.jsonDecode(mw.text.decode(frame.args['1']))
    local rules = ""
    for k, r in pairs(data) do
    	rules = rules .. "<li style=\"list-style-position: inside; padding-left: 5px\">"  .. r['rule'] .. "</li>"
    end
    return rules
end

function p.outputConditions(frame)
    local data = mw.text.jsonDecode(mw.text.decode(frame.args['1']))
    local conditions = ""
    for k, r in pairs(data) do
    	conditions = conditions .. "<li style=\"list-style-position: inside; padding-left: 5px\">"  .. r['condition'] .. "</li>"
    end
    return conditions
end

return p