Difference between revisions of "Module:Jctbtm"

From blackwiki
Jump to navigation Jump to search
blackwiki>Rschen7754
m (Changed protection level of Module:Jctbtm: High-risk Lua module ([Edit=Allow only template editors and admins] (indefinite) [Move=Block all non-admin users] (indefinite)))
blackwiki>Happy5214
(Sync with sandbox: Use HTML instead of wikitext for table close; type definitions now in separate module; general fixes and cleanup.)
Line 1: Line 1:
 
local p = {}
 
local p = {}
  
local colors = {trans = "#dff9f9", concur = "#ddffdd", closed = "#d3d3d3", incomplete = "#ffdddd",
+
local types = mw.loadData("Module:Road data/RJL types")
                unbuilt = "#ffdead", hov = "#ffff99", toll = "#dcdcfe", etc = "#dcdcfe"}
+
local HtmlBuilder = require "Module:HtmlBuilder" -- Import module to build HTML code
 +
local getArgs = require('Module:Arguments').getArgs -- Import module function to work with passed arguments
  
local descriptions = {trans = "[[Route number|Route]] transition", concur = "[[Concurrency (road)|Concurrency]] terminus",
+
local row
                      closed = "Closed/former", incomplete = "[[Interchange (road)#Complete and incomplete interchanges|Incomplete access]]",
 
                      unbuilt = "Unopened", hov = "[[HOV|HOV only]]", toll = "Tolled", etc = "[[Electronic toll collection|ETC]]"}
 
  
 
local columns = {  -- Constants for how many columns different list types should have.
 
local columns = {  -- Constants for how many columns different list types should have.
    default = 6,    -- default
+
default = 6,    -- default
    exit = 7,      -- default + exit number
+
exit = 7,      -- default + exit number
    old = 8,        -- default + exit number + old exit number
+
old = 8,        -- default + exit number + old exit number
 
}
 
}
  
 
local function parameterParser(args)
 
local function parameterParser(args)
    local keysParam = args.keys
+
local keysParam = args.keys
    if not(keysParam) then return {} end
+
if not(keysParam) then return {} end
    local keys = mw.text.split(keysParam, ",")
+
local keys = mw.text.split(keysParam, ",")
    table.sort(keys)
+
table.sort(keys)
    return keys
+
return keys
 
end
 
end
  
 
local function createLegend(key)
 
local function createLegend(key)
    local insert = table.insert
+
local format = mw.ustring.format
    local format = mw.ustring.format
+
local legend = row.tag('div').attr('class', "hlist").cssText("margin-left: 1.6em; text-align: center; font-size:90%;").tag('ul')
    local legend = {'<div class="hlist" style="margin-left: 1.6em; text-align: center; font-size:90%;">'}
+
for k,v in ipairs(key) do
    for k,v in ipairs(key) do
+
local type = types[v]
        if colors[v] then
+
if type then
            insert(legend, format('*<span style="border:1px solid #000; background-color:%s; color:%s;">&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp; %s', colors[v], colors[v], descriptions[v]))
+
legend.tag('li').tag('span').css('border', '1px solid #000').css('background-color', type.color).css('color', type.color).wikitext("&nbsp;&nbsp;&nbsp;&nbsp;").done().wikitext("&nbsp; ").wikitext(type.jctbtm)
        end
+
end
    end
+
end
    insert(legend, "</div>")
+
end
    return table.concat(legend, "\n")
+
 
 +
function p._jctbtm(args)
 +
local root = HtmlBuilder.create()
 +
row = root.tag('tr').tag('td')
 +
local cols = args.col or columns[args[1]] or columns.default -- Compute the number of columns, either from an explicit parameter, or by looking at the columns table.
 +
row.attr('colspan', cols).attr('class', "wikitable hlist").css("text-align", "center").css("background-color", "#f2f2f2") -- Define the footer.
 +
 +
local conversion
 +
local conv = args.conv or 'yes'
 +
if conv == 'yes' then
 +
conversion = "1.000&nbsp;mi = 1.609&nbsp;km; 1.000&nbsp;km = 0.621&nbsp;mi<br>"
 +
end
 +
row.wikitext(conversion)
 +
 +
local key = parameterParser(args)
 +
if key[1] then createLegend(key) end
 +
 +
local keyParam = args.key
 +
if keyParam then -- This is a deprecated parameter
 +
local page = mw.title.getCurrentTitle()
 +
local pagename = page.prefixedText
 +
row.wikitext(string.format("[[Category:Jctbtm temporary tracking category|# %s]]", pagename))
 +
end
 +
 +
local notes = args.notes or args.key
 +
row.wikitext(notes) -- If additional notes are provided, display them.
 +
 +
local nodes = row.nodes
 +
if #nodes == 0 then
 +
return '</table>'
 +
else
 +
return tostring(root.tag('/table', {unclosed = true}).allDone())
 +
end
 
end
 
end
  
 
function p.jctbtm(frame)
 
function p.jctbtm(frame)
    local pframe = frame:getParent()
+
local args = getArgs(frame)
    local config = frame.args -- the arguments passed BY the template, in the wikitext of the template itself
+
return p._jctbtm(args)
    local args = pframe.args -- the arguments passed TO the template, in the wikitext that transcludes the template
 
   
 
    local cols = args.col or columns[args[1]] or columns.default -- Compute the number of columns, either from an explicit parameter, or by looking at the columns table.
 
    local tabdef = '|-\n|colspan = ' .. cols .. ' class="wikitable hlist" style="text-align: center; background-color:#f2f2f2;"|' -- Define the table.
 
   
 
    local conversion = ''
 
    local conv = args.conv or 'yes'
 
    if conv == 'yes' then
 
        conversion = "1.000&nbsp;mi = 1.609&nbsp;km; 1.000&nbsp;km = 0.621&nbsp;mi<br>"
 
    end
 
   
 
    local text = tabdef .. conversion
 
   
 
    local key = parameterParser(args)
 
    if key[1] then
 
        local legend = createLegend(key)
 
        text = text .. legend
 
    end
 
   
 
    local keyParam = args.key or ''
 
    if keyParam ~= '' then -- This is a deprecated parameter
 
        local page = mw.title.getCurrentTitle()
 
        local pagename = page.prefixedText
 
        text = text .. string.format("[[Category:Jctbtm temporary tracking category|# %s]]", pagename)
 
    end
 
   
 
    local notes = args.notes or args.key or ''
 
    if notes ~= '' then
 
        text = text .. notes -- If additional notes are provided, display them.
 
    end
 
   
 
    if text == tabdef then
 
        return "|}"
 
    else
 
        return text .. "\n|}"
 
    end
 
 
end
 
end
  
 
return p
 
return p

Revision as of 07:13, 13 January 2014

This module implements the {{Jctbtm}} template. Please see the template page for usage instructions.

Usage

{{#invoke:Jctbtm|jctbtm}}

Tracking/maintenance category


local p = {}

local types = mw.loadData("Module:Road data/RJL types")
local HtmlBuilder = require "Module:HtmlBuilder" -- Import module to build HTML code
local getArgs = require('Module:Arguments').getArgs -- Import module function to work with passed arguments

local row

local columns = {   -- Constants for how many columns different list types should have.
	default = 6,    -- default
	exit = 7,       -- default + exit number
	old = 8,        -- default + exit number + old exit number
}

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(key)
	local format = mw.ustring.format
	local legend = row.tag('div').attr('class', "hlist").cssText("margin-left: 1.6em; text-align: center; font-size:90%;").tag('ul')
	for k,v in ipairs(key) do
		local type = types[v]
		if type then
			legend.tag('li').tag('span').css('border', '1px solid #000').css('background-color', type.color).css('color', type.color).wikitext("&nbsp;&nbsp;&nbsp;&nbsp;").done().wikitext("&nbsp; ").wikitext(type.jctbtm)
		end
	end
end

function p._jctbtm(args)
	local root = HtmlBuilder.create()
	row = root.tag('tr').tag('td')
	local cols = args.col or columns[args[1]] or columns.default -- Compute the number of columns, either from an explicit parameter, or by looking at the columns table.
	row.attr('colspan', cols).attr('class', "wikitable hlist").css("text-align", "center").css("background-color", "#f2f2f2") -- Define the footer.
	
	local conversion
	local conv = args.conv or 'yes'
	if conv == 'yes' then
		conversion = "1.000&nbsp;mi = 1.609&nbsp;km; 1.000&nbsp;km = 0.621&nbsp;mi<br>"
	end
	row.wikitext(conversion)
	
	local key = parameterParser(args)
	if key[1] then createLegend(key) end
	
	local keyParam = args.key
	if keyParam then -- This is a deprecated parameter
		local page = mw.title.getCurrentTitle()
		local pagename = page.prefixedText
		row.wikitext(string.format("[[Category:Jctbtm temporary tracking category|# %s]]", pagename))
	end
	
	local notes = args.notes or args.key
	row.wikitext(notes) -- If additional notes are provided, display them.
	
	local nodes = row.nodes
	if #nodes == 0 then
		return '</table>'
	else
		return tostring(root.tag('/table', {unclosed = true}).allDone())
	end
end

function p.jctbtm(frame)
	local args = getArgs(frame)
	return p._jctbtm(args)
end

return p