Module:Cenrail: Difference between revisions

From Nguhcraft Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 30: Line 30:
local _, name = find_when(function(i, v)
local _, name = find_when(function(i, v)
return i == code
return i == code
end, data.stations) or ("<ERROR station `" .. code .. "` has no assigned name>")
end, data.stations) or (function () return nil, "<ERROR station `" .. code .. "` has no assigned name>" end)()
local country = ""
local country = ""
if stop.code:sub(1,1) ~= "X" then
if stop.code:sub(1,1) ~= "X" then

Revision as of 17:15, 1 December 2025

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

local _m = {}

local data = mw.loadJsonData "Data:NguhRoutes/network.json"
local countries = require "Module:Places"

local find_when = function (predicate, list)
	for i, v in pairs(list) do
		if predicate(i, v) then
			return i, v
		end
	end
end

_m.line_table = function (frame)
	local linecode = frame.args[1] or frame.args.code or "CE"
	local nether = linecode:sub(1,2) == "N-" 
	local dim = nether and "the_nether" or "overworld"
	local _, line = find_when(function(_, v) return v.code == linecode end, data.lines[dim])
	local out = "{| class=\"wikitable\"\n"
	out = out .. "|+ " .. line.name .. " [" .. line.code .. "]\n"
	out = out .. "|-\n"
	out = out .. "! rowspan = " .. #line.stops .. " style=\"background-color:" .. ( line.color or "#000" ) .. "\" | \n"
	out = out .. "! Stop \n! Code \n! Date opened\n! Usage notes\n"
	out = out .. "|-\n"
	for _, stop in ipairs(line.stops) do
		if type(stop) == "string" then
			out = out .. "| colspan = 4 | '''" .. stop .. "'''\n|-\n"
		else
			local code = ((nether and "N-" or "") .. stop.code)
			local _, name = find_when(function(i, v)
				return i == code
			end, data.stations) or (function () return nil, "<ERROR station `" .. code .. "` has no assigned name>" end)()
			local country = ""
			if stop.code:sub(1,1) ~= "X" then
				country = ", [[" .. (
					countries.get(stop.code:sub(1,2)) or {common_name = "??"}
				).common_name .. "]]"
			end
			local usage_notes = stop.usage_notes or ""
			for _, s in ipairs(data.connections) do
				local self = nether and 2 or 1
				local other = nether and 1 or 2
				if s[self].code == stop.code then
				usage_notes = usage_notes .. (nether and "Cen" or "Lesh") .."rail connection with " .. s[other].code .. "."
				end
			end
			if type(name) == "table" then name = name[1] end
			out = out .. "| " .. name .. country .. "\n"
			out = out .. "| " .. code .. "\n"
			out = out .. "| " .. (stop.date_opened or "") .. "\n"
			out = out .. "| " .. usage_notes  .. "\n"
			out = out .. "|-\n"
		end
	end
	if line.loop then out = out .. "| colspan = 4 | '''LOOPS'''\n|-\n" end
	out = out .. "|}"
	return out
end

return _m