![]() | Please do not delete this module or its doc page. |
Parameters
(floor#)
- Sets the name of a floor
(floor#)_(part#)_(param)
- Sets a parameter for a row of a floor where (param)
is:
name
- The name of the row, e.g. "Westbound track"desc
- The description for the row- Services
dir
- The direction of the service(s) for the track (right
orleft
)service
- The service running on the trackservice(service#)
- Additional services running on the trackdest
- The destination for the servicedest(service#)
- Destinations for the additional servicesnote
- Note about the servicesnote(service#)
- Notes about the additional services
- Platform
platform
- The type of platformaccessible
- Set if the platform isaccessible
note
- Note about the platform
-- Sandbox, do not delete
require('strict')
local p = {}
-- Parameters that can be numbered
local numeredParams = {
service = true,
dest = true,
note = true
}
-- Labels for platform types
local platformLabels = {
island = 'Island platform',
top = 'Side platform',
bottom = 'Side platform'
}
-- Generate the HTML to display a service
local function displayService(service, dest, note, dir)
if not service then return '' end
return '<div class="service">' ..
'<div class="' .. (dir ~= 'left' and 'hidden' or '') .. '">←</div>' ..
'<div>' .. service .. (dest and ' toward ' .. dest or '') .. (note and ' ' .. note or '') .. '</div>' ..
(dir == 'right' and '<div>→</div>' or '') ..
'</div>'
end
-- Generate the HTML to display a track (one or more services)
local function displayTrack(floorPart)
if not floorPart.service then
return ''
end
floorPart.dest = floorPart.dest or {}
floorPart.note = floorPart.note or {}
local out = ''
for i = 1, floorPart.service.max do
out = out .. displayService(floorPart.service[i], floorPart.dest[i], floorPart.note[i], floorPart.dir)
end
return out
end
-- Generate the HTML to generate a "row" of the floor
local function displayFloorPart(floorPart, floorNum, partNum)
local out = ''
if floorPart.name then
return '<div class="track"><div>' .. floorPart.name .. '</div></div>' ..
'<div class="track"><div class="desc"><div>' .. (floorPart.desc or '') .. '</div>' .. displayTrack(floorPart) .. '</div></div>'
end
if floorPart.platform then
if not platformLabels[floorPart.platform] then
return '<div class="part-error">Invalid platform type!</div>'
end
return '<div class="platform ' .. floorPart.platform .. '">' ..
platformLabels[floorPart.platform] ..
(floorPart.accessible and ' ' .. mw.getCurrentFrame():expandTemplate{ title = 'access icon' } or '') ..
(floorPart.note and ', ' .. floorPart.note or '') ..
'</div>'
end
local prefix = floorNum .. '_' .. partNum .. '_'
return '<div class="part-error">Invalid floor part! Must have either <code>' .. prefix .. 'name</code> or <code>' .. prefix .. 'platform</code></div>.'
end
-- Generate the HTML to display a floor
local function displayFloor(stationFloor, num, last)
local out = '<div class="floor' .. (last and ' last' or '') .. '" style="grid-row: span ' .. stationFloor.count .. ';">' .. stationFloor.letter .. '</div>'
for i = 1, stationFloor.max do
out = out .. displayFloorPart(stationFloor[i], num, i)
end
return out
end
-- Create a table that can hold numbered arguments
local function createArgTable(tbl)
tbl = tbl or {}
tbl.max = 0
tbl.count = 0
return tbl
end
-- Add an argument number to a table of numbered arguments
local function addArg(tbl, num, value)
if num > tbl.max then
tbl.max = num
end
if not tbl[num] then
tbl[num] = value
tbl.count = tbl.count + 1
end
end
-- Process an argument with the format level_part_param[paramNum]
local function processArg(out, level, part, param, paramNum, value)
level = tonumber(level)
part = tonumber(part)
paramNum = paramNum and tonumber(paramNum) or 1
addArg(out, level, createArgTable())
addArg(out[level], part, {})
if numeredParams[param] then
if not out[level][part][param] then
out[level][part][param] = createArgTable()
end
addArg(out[level][part][param], paramNum, value)
else
out[level][part][param] = value
end
end
-- Process the argument table
local function processArgs(args)
local out = createArgTable()
for i, v in pairs(args) do
if type(i) == 'number' then
addArg(out, i, createArgTable({ letter = v }))
else
local level, part, param, paramNum = i:match('(%d+)_(%d+)_([^%d]+)(%d*)')
if level and part and param then
processArg(out, level, part, param, paramNum, v)
end
end
end
return out
end
-- Main function, called by wikitext
function p.main(frame)
local sortedArgs = processArgs(frame.args)
local out = frame:extensionTag{
name = 'templatestyles',
args = { src = 'User:BrandonXLF/styles.css' }
}
out = out .. '<div class="station-layout">'
for i = 1, sortedArgs.max do
out = out .. displayFloor(sortedArgs[i], i, i == sortedArgs.max)
end
return out .. '</div>'
end
function p.test(frame)
local modules = {
"Module:Road data/strings/USA",
"Module:Road data/strings/CAN/ON",
"Module:Road data/strings/USA/TX",
"Module:Road data/strings/USA/NJ",
"Module:Road data/strings/USA/NY",
"Module:Road data/strings/USA/WA",
"Module:Road data/strings/USA/AR",
"Module:Road data/strings/USA/AS",
"Module:Road data/strings/GBR",
"Module:Road data/strings/MEX",
"Module:Road data/strings/HKG",
"Module:Road data/strings/USA/GA",
"Module:Road data/strings/USA/IA",
"Module:Road data/strings/USA/MI",
"Module:Road data/strings/USA/MN",
"Module:Road data/strings/USA/AZ",
"Module:Road data/strings/USA/KY",
"Module:Road data/strings/USA/NH",
"Module:Road data/strings/USA/SC",
"Module:Road data/strings/USA/TN",
"Module:Road data/strings/USA/NC",
"Module:Road data/strings/USA/PA",
"Module:Road data/strings/USA/VA",
"Module:Road data/strings/USA/FL",
"Module:Road data/strings/USA/IL",
"Module:Road data/strings/USA/AL",
"Module:Road data/strings/USA/LA",
"Module:Road data/strings/USA/NV",
"Module:Road data/strings/USA/MS",
"Module:Road data/strings/USA/IN",
"Module:Road data/strings/USA/OH",
"Module:Road data/strings/USA/AK",
"Module:Road data/strings/AUS",
"Module:Road data/strings/USA/OR",
"Module:Road data/strings/USA/DE",
"Module:Road data/strings/CHN",
"Module:Road data/strings/USA/RI",
"Module:Road data/strings/JPN",
"Module:Road data/strings/USA/CO",
"Module:Road data/strings/USA/WI",
"Module:Road data/strings/USA/CT",
"Module:Road data/strings/USA/WY",
"Module:Road data/strings/USA/VT",
"Module:Road data/strings/CAN/SK",
"Module:Road data/strings/USA/ME",
"Module:Road data/strings/USA/CA",
"Module:Road data/strings/USA/MO",
"Module:Road data/strings/USA/KS",
"Module:Road data/strings/USA/WV",
"Module:Road data/strings/USA/HI",
"Module:Road data/strings/USA/VI",
"Module:Road data/strings/USA/GU",
"Module:Road data/strings/USA/PR",
"Module:Road data/strings/EUR",
"Module:Road data/strings/USA/MA",
"Module:Road data/strings/USA/NM",
"Module:Road data/strings/USA/MT",
"Module:Road data/strings/USA/ND",
"Module:Road data/strings/IND",
"Module:Road data/strings/USA/SD",
"Module:Road data/strings/CAN/NS",
"Module:Road data/strings/USA/ID",
"Module:Road data/strings/USA/NE",
"Module:Road data/strings/USA/UT",
"Module:Road data/strings/USA/MD",
"Module:Road data/strings/USA/OK",
"Module:Road data/strings/CAN/QC",
"Module:Road data/strings/ESP",
"Module:Road data/strings/PHL",
"Module:Road data/strings/AUT",
"Module:Road data/strings/BRA",
"Module:Road data/strings/NZL",
"Module:Road data/strings/HRV",
"Module:Road data/strings/BEL",
"Module:Road data/strings/FRA",
"Module:Road data/strings/GHA",
"Module:Road data/strings/CAN/NB",
"Module:Road data/strings/TWN",
"Module:Road data/strings/NLD",
"Module:Road data/strings/ZAF",
"Module:Road data/strings/IRL",
"Module:Road data/strings/ASIA",
"Module:Road data/strings/RUS",
"Module:Road data/strings/CAN/MB",
"Module:Road data/strings/CAN/NL",
"Module:Road data/strings/JOR",
"Module:Road data/strings/NOR",
"Module:Road data/strings/USA/DC",
"Module:Road data/strings/DEU",
"Module:Road data/strings/USA/MP",
"Module:Road data/strings/PER",
"Module:Road data/strings/LVA",
"Module:Road data/strings/TUR",
"Module:Road data/strings/PRT",
"Module:Road data/strings/DNK",
"Module:Road data/strings/GEO",
"Module:Road data/strings/LKA",
"Module:Road data/strings/MNE",
"Module:Road data/strings/CAN/YT",
"Module:Road data/strings/HUN",
"Module:Road data/strings/CRI",
"Module:Road data/strings/UZB",
"Module:Road data/strings/SVK",
"Module:Road data/strings/URY",
"Module:Road data/strings/ROU",
"Module:Road data/strings/BWA",
"Module:Road data/strings/ITA",
"Module:Road data/strings/ISL",
"Module:Road data/strings/ARE",
"Module:Road data/strings/LUX",
"Module:Road data/strings/BEN",
"Module:Road data/strings/DJI",
"Module:Road data/strings/COL",
"Module:Road data/strings/CZE",
"Module:Road data/strings/POL",
"Module:Road data/strings/NPL",
-- "Module:Road data/strings/USA/regional/NER",
"Module:Road data/strings/UKR",
"Module:Road data/strings/KAZ",
"Module:Road data/strings/BLR",
"Module:Road data/strings/BOL",
"Module:Road data/strings/LAO",
"Module:Road data/strings/LTU",
"Module:Road data/strings/SWE",
"Module:Road data/strings/ALB",
"Module:Road data/strings/BGD",
"Module:Road data/strings/GRC",
"Module:Road data/strings/AZE",
"Module:Road data/strings/EST",
"Module:Road data/strings/KGZ",
"Module:Road data/strings/KOR",
"Module:Road data/strings/VNM",
"Module:Road data/strings/LSO",
"Module:Road data/strings/ECU",
"Module:Road data/strings/ZMB",
"Module:Road data/strings/CYP",
"Module:Road data/strings/BIH",
"Module:Road data/strings/CAN/PE",
"Module:Road data/strings/VEN",
"Module:Road data/strings/MDA",
"Module:Road data/strings/CAN/AB",
"Module:Road data/strings/BGR",
"Module:Road data/strings/NIC",
"Module:Road data/strings/SVN",
"Module:Road data/strings/SRB",
"Module:Road data/strings/CAN/NT",
"Module:Road data/strings/IRN",
"Module:Road data/strings/CAN",
"Module:Road data/strings/ARM",
"Module:Road data/strings/ISR",
"Module:Road data/strings/OMN",
"Module:Road data/strings/IDN",
"Module:Road data/strings/CHE",
"Module:Road data/strings/CHL",
"Module:Road data/strings/CAN/BC",
"Module:Road data/strings/AND",
"Module:Road data/strings/FIN",
"Module:Road data/strings/MKD",
"Module:Road data/strings/ARG",
"Module:Road data/strings/IRQ",
"Module:Road data/strings/NAM",
"Module:Road data/strings/THA",
"Module:Road data/strings/UNK",
"Module:Road data/strings/KOS",
"Module:Road data/strings/IMN",
"Module:Road data/strings/SCT",
-- "Module:Road data/strings/USA/regional/Tour",
"Module:Road data/strings/CPV",
"Module:Road data/strings/ALA",
"Module:Road data/strings/ENG",
"Module:Road data/strings/GUF",
"Module:Road data/strings/PAK",
"Module:Road data/strings/GLP",
-- "Module:Road data/strings/USA/regional/Trails",
"Module:Road data/strings/CUB",
"Module:Road data/strings/MTQ",
"Module:Road data/strings/SAD",
"Module:Road data/strings/JAM",
"Module:Road data/strings/WLS",
-- "Module:Road data/strings/USA/regional/GRR",
"Module:Road data/strings/PRY",
"Module:Road data/strings/JEY",
"Module:Road data/strings/LIE",
"Module:Road data/strings/DOM",
"Module:Road data/strings/KEN",
"Module:Road data/strings/TAH",
"Module:Road data/strings/NIR",
"Module:Road data/strings/GGY",
"Module:Road data/strings/DZA",
"Module:Road data/strings/BLZ",
"Module:Road data/strings/MMR",
"Module:Road data/strings/GIB",
"Module:Road data/strings/BRN",
"Module:Road data/strings/REU",
"Module:Road data/strings/AFR",
"Module:Road data/strings/MYS",
"Module:Road data/strings/AFG",
"Module:Road data/strings/KAM",
"Module:Road data/strings/NGA",
"Module:Road data/strings/PRI",
"Module:Road data/strings/MWI",
"Module:Road data/strings/AFRICA",
"Module:Road data/strings/CAF",
"Module:Road data/strings/TZA",
"Module:Road data/strings/PK"
}
local out = ''
for i, module in ipairs(modules) do
local exports = require(module)
local parts = mw.text.split(module)
for type, v in ipairs(exports) do
out = out .. frame:expandTemplate{ title = 'Jct', args = {
type,
'1',
country = parts[3],
state = parts[4] or ''
} }
end
end
return out
end
return p