Jump to content

Module:Jctbtm/sandbox

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Happy5214 (talk | contribs) at 09:29, 14 August 2013 (Create sandbox version of Module:Jctbtm). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
(diff) ← Previous revision | Latest revision (diff) | Newer revision → (diff)
local p = {}

local colors = {trans = "#dff9f9", concur = "#ddffdd", closed = "#d3d3d3", incomplete = "#ffdddd",
                unbuilt = "#ffdead", hov = "#ffff99", toll = "#dcdcfe", etc = "#dcdcfe"}

local descriptions = {trans = "[[Route number|Route]] transition", concur = "[[Concurrency (road)|Concurrency]] terminus",
                      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.
    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 insert = table.insert
    local format = mw.ustring.format
    local legend = {'<div class="hlist" style="margin-left: 1.6em; text-align: center; font-size:90%;">'}
    for k,v in ipairs(key) do
        if colors[v] 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]))
        end
    end
    insert(legend, "</div>")
    return table.concat(legend, "\n")
end

function p.jctbtm(frame)
    local pframe = frame:getParent()
    local config = frame.args -- the arguments passed BY the template, in the wikitext of the template itself
    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

return p