Module:Jcon/documentation
Appearance
This module depends on the following other modules: |
This module is used by Template:Jcon/doc.
require('strict')
local p = {}
local data = mw.loadData('Module:Jcon/data')
local roadData = require('Module:Road data/strings/CAN/ON')
local parser = require('Module:Road data/parser').parser
local TableTools = require('Module:TableTools')
-- Generates a list of supported regions
function p.supported(frame)
local reverseAliases = {}
local entries = {}
local pre = 'Note: All inputs are converted to lowercase by the template and "Region of", "County Road", etc. are striped from the input.'
local post = 'Table produced by [[Module:Jcon/documentation]] with data from [[Module:Road data/strings/CAN/ON]] ('
.. frame:expandTemplate{ title = 'edit', args = { 'Module:Road data/strings/CAN/ON' } } .. ').'
local tableEl = mw.html.create('table'):addClass('wikitable') -- Create output table element
local headerRow = tableEl:tag('tr')
headerRow:tag('th'):wikitext('Type')
headerRow:tag('th'):wikitext('Route name')
for name, info in pairs(roadData) do
if info.alias then
roadData[name] = mw.loadData('Module:Road data/strings/' .. info.alias.module)[info.alias.type]
end
end
local keys = TableTools.keysToList(roadData, function (a, b)
return string.lower(a) < string.lower(b)
end)
local valueToGroup = {}
local groups = {}
for _, name in ipairs(keys) do
if string.sub(name, 1, 1) ~= ' ' then
local info = roadData[name]
if valueToGroup[info] then
table.insert(groups[valueToGroup[info]], name)
else
table.insert(groups, { name })
valueToGroup[info] = #groups
end
end
end
for name, group in ipairs(groups) do
local info = roadData[group[1]]
local typeOut = ''
for _, type in ipairs(group) do
typeOut = typeOut .. '<code>' .. type .. '</code><br>'
end
local row = tableEl:tag('tr')
row:tag('td'):wikitext(typeOut)
row:tag('td'):wikitext(
'<code>' .. (type(info.name) == 'table'
and (info.name.default or info.name[0] or info.name.below or '??')
or info.name) .. '</code>'
)
end
for sign, fileName in pairs(data._signs) do
local row = tableEl:tag('tr')
row:tag('td'):wikitext(sign)
row:tag('td'):wikitext('[[File:' .. fileName .. '|20px]]')
end
return pre .. tostring(tableEl) .. post
end
return p