Difference between revisions of "Module:Jctbtm/sandbox"
Jump to navigation
Jump to search
blackwiki>Jackmcbarn (use mw.html) |
m (19 revisions imported) |
||
| (6 intermediate revisions by 2 users not shown) | |||
| Line 2: | Line 2: | ||
local types = mw.loadData("Module:Road data/RJL types") | local types = mw.loadData("Module:Road data/RJL types") | ||
| − | |||
local row | local row | ||
| − | local | + | local warningTypes = { |
| − | + | col = "C", | |
| − | + | key = "#" | |
| − | |||
} | } | ||
| + | local warnings = {} | ||
| + | |||
| + | --- Compute the number of columns in the junction list table. | ||
| + | local function numColumns(args) | ||
| + | if args.col then | ||
| + | warnings.col = "col parameter is deprecated" | ||
| + | return args.col | ||
| + | end | ||
| + | -- Minimum number of columns: destination and notes | ||
| + | local cols = 2 | ||
| + | if args.altunit then | ||
| + | -- One additional column for alternate unit. | ||
| + | cols = cols + 1 | ||
| + | elseif args.length ~= "off" then | ||
| + | -- Two additional columns for unit and its conversion. | ||
| + | cols = cols + 2 | ||
| + | end | ||
| + | if args[1] == "old" then | ||
| + | -- Two additional columns for old and new exit numbers | ||
| + | cols = cols + 2 | ||
| + | elseif args[1] == "exit" then | ||
| + | -- One additional column for exit number | ||
| + | cols = cols + 1 | ||
| + | end | ||
| + | if args[2] == "name" then | ||
| + | -- One additional column for named interchange | ||
| + | cols = cols + 1 | ||
| + | end | ||
| + | if args.region_col then | ||
| + | -- One additional column for region | ||
| + | cols = cols + 1 | ||
| + | end | ||
| + | if not args.indep_city then | ||
| + | if not args.sub1 then | ||
| + | -- One additional column for first-level subdivision | ||
| + | cols = cols + 1 | ||
| + | end | ||
| + | if not args.sub2 then | ||
| + | -- One additional column for second-level subdivision | ||
| + | cols = cols + 1 | ||
| + | end | ||
| + | end | ||
| + | return cols | ||
| + | end | ||
local function parameterParser(args) | local function parameterParser(args) | ||
local keysParam = args.keys | local keysParam = args.keys | ||
| − | if not | + | if not keysParam then return {} end |
local keys = mw.text.split(keysParam, ",") | local keys = mw.text.split(keysParam, ",") | ||
table.sort(keys) | table.sort(keys) | ||
| Line 20: | Line 62: | ||
end | end | ||
| − | local function createLegend( | + | local function createLegend(keys) |
| − | + | local legend = row:tag("li"):tag("ul") | |
| − | local legend = row:tag( | + | :addClass('hlist') |
| − | for | + | :css("font-size", "90%") |
| + | for _,v in ipairs(keys) do | ||
local type = types[v] | local type = types[v] | ||
if type then | if type then | ||
| − | legend:tag('li'):tag(' | + | local key = legend:tag('li') |
| + | key:tag('div') | ||
| + | :css("display", "inline-block") | ||
| + | :css("vertical-align", "bottom") | ||
| + | :css("width", "20px") | ||
| + | :css("height", "20px") | ||
| + | :css('border', '1px solid #000') | ||
| + | :css('background-color', type.color) | ||
| + | key:wikitext(type.jctbtm) | ||
end | end | ||
end | end | ||
| Line 32: | Line 83: | ||
function p._jctbtm(args) | function p._jctbtm(args) | ||
| + | local cols = numColumns(args) | ||
local root = mw.html.create() | local root = mw.html.create() | ||
| − | row = root:tag(' | + | -- Define the footer row. |
| − | + | row = root:tag('th') | |
| − | + | :attr("scope", "row") | |
| − | + | :attr('colspan', cols) | |
| − | + | :addClass("plainlist") | |
| − | + | :css("text-align", "center") | |
| − | + | :tag("ul") | |
| − | + | ||
| + | if args.length ~= "off" and (args.conv or 'yes') == 'yes' then | ||
| + | local conv = row:tag("li"):tag("ul"):addClass('hlist') | ||
| + | conv:tag("li"):wikitext("1.000 mi = 1.609 km") | ||
| + | conv:tag("li"):wikitext("1.000 km = 0.621 mi") | ||
end | end | ||
| − | + | ||
| − | + | local keys = parameterParser(args) | |
| − | local | + | if #keys > 0 then createLegend(keys) end |
| − | if | + | |
| − | |||
local keyParam = args.key | local keyParam = args.key | ||
if keyParam then -- This is a deprecated parameter | if keyParam then -- This is a deprecated parameter | ||
| + | warnings.key = "key parameter is deprecated" | ||
| + | end | ||
| + | |||
| + | local notes = args.notes or args.key | ||
| + | if notes then | ||
| + | -- Display additional notes if provided. | ||
| + | row:tag("li"):wikitext(notes) | ||
| + | end | ||
| + | |||
| + | -- Prepare warning. | ||
| + | local warningCode | ||
| + | for key,msg in pairs(warnings) do | ||
| + | warningCode = warningCode or warningTypes[key] | ||
| + | end | ||
| + | local warning | ||
| + | if warningCode then | ||
local page = mw.title.getCurrentTitle() | local page = mw.title.getCurrentTitle() | ||
local pagename = page.prefixedText | local pagename = page.prefixedText | ||
| − | + | warning = string.format("[[Category:Jctbtm temporary tracking category|%s %s]]", | |
| + | warningCode, pagename) | ||
| + | else | ||
| + | warning = "" | ||
end | end | ||
| − | + | ||
| − | + | if #row.nodes == 0 then | |
| − | row | + | return '|-\n|}' .. warning |
| − | |||
| − | |||
| − | |||
| − | return '|-\n|}' | ||
| − | |||
| − | |||
end | end | ||
| + | return tostring(root) .. '\n|-\n|}' .. warning | ||
end | end | ||
function p.jctbtm(frame) | function p.jctbtm(frame) | ||
| − | + | return p._jctbtm(require('Module:Arguments').getArgs(frame)) | |
| − | return p._jctbtm( | ||
end | end | ||
return p | return p | ||
Latest revision as of 05:49, 27 September 2020
Documentation for this module may be created at Module:Jctbtm/sandbox/doc
local p = {}
local types = mw.loadData("Module:Road data/RJL types")
local row
local warningTypes = {
col = "C",
key = "#"
}
local warnings = {}
--- Compute the number of columns in the junction list table.
local function numColumns(args)
if args.col then
warnings.col = "col parameter is deprecated"
return args.col
end
-- Minimum number of columns: destination and notes
local cols = 2
if args.altunit then
-- One additional column for alternate unit.
cols = cols + 1
elseif args.length ~= "off" then
-- Two additional columns for unit and its conversion.
cols = cols + 2
end
if args[1] == "old" then
-- Two additional columns for old and new exit numbers
cols = cols + 2
elseif args[1] == "exit" then
-- One additional column for exit number
cols = cols + 1
end
if args[2] == "name" then
-- One additional column for named interchange
cols = cols + 1
end
if args.region_col then
-- One additional column for region
cols = cols + 1
end
if not args.indep_city then
if not args.sub1 then
-- One additional column for first-level subdivision
cols = cols + 1
end
if not args.sub2 then
-- One additional column for second-level subdivision
cols = cols + 1
end
end
return cols
end
local function parameterParser(args)
local keysParam = args.keys
if not keysParam then return {} end
local keys = mw.text.split(keysParam, ",")
table.sort(keys)
return keys
end
local function createLegend(keys)
local legend = row:tag("li"):tag("ul")
:addClass('hlist')
:css("font-size", "90%")
for _,v in ipairs(keys) do
local type = types[v]
if type then
local key = legend:tag('li')
key:tag('div')
:css("display", "inline-block")
:css("vertical-align", "bottom")
:css("width", "20px")
:css("height", "20px")
:css('border', '1px solid #000')
:css('background-color', type.color)
key:wikitext(type.jctbtm)
end
end
end
function p._jctbtm(args)
local cols = numColumns(args)
local root = mw.html.create()
-- Define the footer row.
row = root:tag('th')
:attr("scope", "row")
:attr('colspan', cols)
:addClass("plainlist")
:css("text-align", "center")
:tag("ul")
if args.length ~= "off" and (args.conv or 'yes') == 'yes' then
local conv = row:tag("li"):tag("ul"):addClass('hlist')
conv:tag("li"):wikitext("1.000 mi = 1.609 km")
conv:tag("li"):wikitext("1.000 km = 0.621 mi")
end
local keys = parameterParser(args)
if #keys > 0 then createLegend(keys) end
local keyParam = args.key
if keyParam then -- This is a deprecated parameter
warnings.key = "key parameter is deprecated"
end
local notes = args.notes or args.key
if notes then
-- Display additional notes if provided.
row:tag("li"):wikitext(notes)
end
-- Prepare warning.
local warningCode
for key,msg in pairs(warnings) do
warningCode = warningCode or warningTypes[key]
end
local warning
if warningCode then
local page = mw.title.getCurrentTitle()
local pagename = page.prefixedText
warning = string.format("[[Category:Jctbtm temporary tracking category|%s %s]]",
warningCode, pagename)
else
warning = ""
end
if #row.nodes == 0 then
return '|-\n|}' .. warning
end
return tostring(root) .. '\n|-\n|}' .. warning
end
function p.jctbtm(frame)
return p._jctbtm(require('Module:Arguments').getArgs(frame))
end
return p