Difference between revisions of "Module:Items"

From Nookipedia, the Animal Crossing wiki
(+outputAvailability (takes in a string of availabilities separated by /, and outputs Availability templates))
(+outputAvailabilityCollapsed)
Line 36: Line 36:
  
 
     return availabilityOutput
 
     return availabilityOutput
 +
end
 +
 +
function p.outputAvailabilityCollapsed (frame)
 +
    local data = frame.args[1]
 +
    local availabilityTable = split( data, "," )
 +
    local availability = ""
 +
    local availabilityList = ""
 +
    local mainAvailability = ""
 +
    local availabilityText = ""
 +
    local availabilityCategory = ""
 +
    for k, avail in ipairs(availabilityTable) do
 +
        if avail:match("%((.-)%)") then
 +
        availabilityText = avail:match("(.+)%(")
 +
            availability = frame:expandTemplate{ title = "Availability", args = { availabilityText, note = avail:match("%((.-)%)") } }
 +
        else
 +
        availabilityText = avail
 +
            availability = frame:expandTemplate{ title = "Availability", args = { availabilityText } }
 +
        end
 +
        if k == 1 then
 +
        availabilityCategory = availabilityText
 +
            mainAvailability = availability
 +
        else
 +
            availabilityList = availabilityList .. availability
 +
        end
 +
    end
 +
    local availabilityOutput = frame:expandTemplate{ title = "Availability Dropdown", args = { mainAvailability, availabilityList } }
 +
local root = mw.html.create()
 +
 +
root:wikitext('[[Category:Acquired from ' .. availabilityCategory .. ']]' .. availabilityOutput)
 +
 +
    return root
 
end
 
end
  
 
return p
 
return p

Revision as of 03:34, June 9, 2021

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

local p = {}

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

    local split_start, split_end = string.find(str, pattern, i)
    while split_start do
        out[#out+1] = string.sub(str, i, split_start - 1)
        i = split_end + 1
        split_start, split_end = string.find(str, pattern, i)
    end
    out[#out+1] = string.sub(str, i)
    
    return out
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.outputAvailability (frame)
    local data = frame.args[1]
    local availabilityTable = split( data, "/" )
    local availabilityOutput = ""
    for k, avail in ipairs(availabilityTable) do
        availabilityOutput = availabilityOutput .. frame:expandTemplate{ title = "Availability", args = { avail } }
    end

    return availabilityOutput
end

function p.outputAvailabilityCollapsed (frame)
    local data = frame.args[1]
    local availabilityTable = split( data, "," )
    local availability = ""
    local availabilityList = ""
    local mainAvailability = ""
    local availabilityText = ""
    local availabilityCategory = ""
    for k, avail in ipairs(availabilityTable) do
        if avail:match("%((.-)%)") then
        	availabilityText = avail:match("(.+)%(")
            availability = frame:expandTemplate{ title = "Availability", args = { availabilityText, note = avail:match("%((.-)%)") } }
        else
        	availabilityText = avail
            availability = frame:expandTemplate{ title = "Availability", args = { availabilityText } }
        end
        if k == 1 then
        	availabilityCategory = availabilityText
            mainAvailability = availability
        else
            availabilityList = availabilityList .. availability
        end
    end
    local availabilityOutput = frame:expandTemplate{ title = "Availability Dropdown", args = { mainAvailability, availabilityList } }
	local root = mw.html.create()

	root:wikitext('[[Category:Acquired from ' .. availabilityCategory .. ']]' .. availabilityOutput)

    return root
end

return p