Module:TestModule: Difference between revisions

From Against the Storm Official Wiki
m (Testing)
m (Testing)
Line 1: Line 1:
--- @module BuildingLink
--- @module BuildingLink
local BuildingLink = {}
local TestModule = {}




Line 75: Line 75:
--- @param frame table the template's context, with arguments
--- @param frame table the template's context, with arguments
--- @return string wiki markup
--- @return string wiki markup
function BuildingLink.main(frame)
function TestModule.main(frame)


local name = frame.args.name
local name = frame.args.name
Line 114: Line 114:
framegetParentargs = frame:getParent().args
framegetParentargs = frame:getParent().args


local ret = "frame.args = {\n\n" ..
local ret = "frame.args = {<br>"
"--name = `" .. frameargs.name or "nil" .. "`\n\n" ..
 
"--size = `" .. frameargs.size or "nil" .. "`\n\n" ..
for k, v in pairs(frameargs) do
"--display `= " .. frameargs.display or "nil" .. "`\n\n" ..
ret = ret .. "--[" .. k .. "] = " .. v .. ",<br>"
"}\n\n" ..
end
"frame:getParent().args = {\n\n" ..
 
"__1 = `" .. framegetParentargs[1] or "nil" .. "`\n\n" ..
ret = ret .. "}<br><br>frame:getParent().args = {<br>"
"--2 = `" .. framegetParentargs[2] or "nil" .. "`\n\n" ..
 
"--3 = `" .. framegetParentargs[3] or "nil" .. "`\n\n" ..
for k, v in pairs(framegetParentargs) do
"}"
ret = ret .. "--[" .. k .. "] = " .. v .. ",<br>"
end
 
ret = ret .. "}"


return ret
return ret
--return frame:expandTemplate{
-- title = VIEW_TEMPLATE,
-- args = viewParameters,
--}
end
end


--endregion
--endregion


return BuildingLink
return TestModule

Revision as of 23:35, 17 October 2024

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

--- @module BuildingLink
local TestModule = {}



--region Dependencies

-- This module lazily loads dependencies, since they're expensive but only one is needed, we just don't know which in advance.
local WorkshopsData
local InstitutionsData
local FarmsData
local CampsData
local CollectorsData

local VIEW_TEMPLATE = "Building_link/view"

--endregion



--region Private constants

--endregion



--region Private methods

local function tryData(name, buildingInterface)

	local buildingID = buildingInterface.getID(name)

	return buildingInterface.getIcon(buildingID)
end



local function validateBuildingName(name)

	-- Lazy-load of external data, since it's expensive. Start with the most likely so that most pages load as fast as possible.
	WorkshopsData = require("Module:WorkshopsData")
	local validatedIcon = tryData(name, WorkshopsData)
	if not validatedIcon then
		InstitutionsData = require("Module:InstitutionsData")
		validatedIcon = tryData(name, InstitutionsData)
		if not validatedIcon then
			FarmsData = require("Module:FarmsData")
			validatedIcon = tryData(name, FarmsData)
			if not validatedIcon then
				CollectorsData = require("Module:CollectorsData")
				validatedIcon = tryData(name, CollectorsData)
				if not validatedIcon then
					CampsData = require("Module:CampsData")
					validatedIcon = tryData(name, CampsData)
					if not validatedIcon then
						error("No building found with name: " .. name .. ". Please see the template documentation for how to use the parameters")
					end
				end
			end
		end
	end

	return validatedIcon
end

--endregion



--region Public methods

---main
--- Extracts parameters, validates the building by getting its icon, and then sends the data to the view template for rendering.
---
--- @param frame table the template's context, with arguments
--- @return string wiki markup
function TestModule.main(frame)

	local name = frame.args.name
	local iconSize = frame.args.size
	local needsPlural = frame.args.plural
	local display = frame.args.display

	---- If the iconSize was not specified, but plural was "s", then these will match. We need to unset the iconSize to be default.
	--if iconSize == needsPlural and (needsPlural == "s" or needsPlural == "es") then
	--	iconSize = nil
	--end
	--
	---- It is valid by now; the above method already threw an error if not.
	--validatedIcon = validateBuildingName(name)
	--
	---- The only valid value for mustBePlural is "s," so then make on check to see if name ends in a way that we need to add "es" at the end instead of just "s". For names that end in "y", we swap out the last character for "ies" instead. (This will require one-time setup for redirect pages.)
	--if needsPlural == "s" or needsPlural == "es" then
	--	if string.match(name, "y$") then
	--		name = string.sub(name, 1, -2) .. "ies"
	--		needsPlural = nil -- unset, since it's incorporated into the name
	--	else
	--		local needsSyllable = string.match(name, "[sxz]$") or string.match(name, "sh$") or string.match(name, "ch$")
	--		needsPlural = needsSyllable and "es" or "s"
	--	end
	--else
	--	needsPlural = nil
	--end
	--
	--viewParameters = {
	--	["name"] = name,
	--	["plural"] = needsPlural,
	--	["iconfilename"] = validatedIcon,
	--	["iconsize"] = iconSize,
	--	["display"] = display,
	--}

	local frameargs = frame.args
	framegetParentargs = frame:getParent().args

	local ret = "frame.args = {<br>"

	for k, v in pairs(frameargs) do
		ret = ret .. "--[" .. k .. "] = " .. v .. ",<br>"
	end

	ret = ret .. "}<br><br>frame:getParent().args = {<br>"

	for k, v in pairs(framegetParentargs) do
		ret = ret .. "--[" .. k .. "] = " .. v .. ",<br>"
	end

	ret = ret .. "}"

	return ret
end

--endregion

return TestModule