Module:Sandbox/Nbound/Scribbles

Revision as of 07:15, 21 July 2013 by imported>Nbound
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Documentation for this module may be created at Module:Sandbox/Nbound/Scribbles/doc

local p = {}
 
function p.Shield(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
    
    --store special inputs
    local customsize = args["size"] -- store custom size if specified
    local alt = args["alt"] or "" -- store value of alt
    args["alt"], args["size"] = nil, nil -- destroy before populating tables
    
    -- populate table of highway types
    local htype = {}
    local indexcount = 1
    for i = 1,7,2 do  -- set to grab 4
        if args[i] then
            htype[indexcount] = args[i] -- Get types of highway
            indexcount = indexcount + 1
        end
    end

    -- populate table of allocations (route numbers)
    local alloc = {}
    indexcount = 1
    for i = 2,8,2 do -- set to grab 4
        if args[i] then
            alloc[indexcount] = args[i] -- Get allocations (route numbers)
            indexcount = indexcount + 1
        end
    end
   
    -- set up extension (currently not required)
    local ext = ".svg" -- this shouldnt need to ever change, but its here if needed. (it could also be moved into the table below)
    
    -- set up base types of highways with properties
    local entries = {N  = { filename = "File:AUS national highway ",            description = "National Highway ",   size = "x20px"},
                     AN = { filename = "File:Australian Alphanumeric Route ",   description = "State Route ",        size = "x15px"},
                     NSW= { filename = "File:NSW alphanumeric route ",          description = "Route ",              size = "x20px"},
                     S  = { filename = "File:AUS state route ",                 description = "State Route ",        size = "x20px"},
                     R  = { filename = "File:AUS national route ",              description = "National Route ",     size = "x20px"},
                     Met= { filename = "File:Metroad ",                         description = "Metroad ",            size = "x20px"}};
                 
    -- set up base type aliases (used if highway types share all properites)
    local aliases = {QLD = "AN", SA = "AN", NT = "AN", VIC = "AN", TAS = "AN", -- all use alpha numeric
                     ACT = "NSW"}; --ACT also uses NSW style alphanumeric
    setmetatable(entries, {__index = function(t,k) return rawget(t,aliases[k]); end});
    
    --produce shields
    local count = 1
    local shield = {}
    repeat
        if alt == "on" then
            table.insert(shield, "[[" .. entries[(htype[count])].filename .. alloc[count] .. ext .. "|" .. (customsize or entries[(htype[count])].size) .. "|alt=" .. entries[(htype[count])].description .. alloc[count] .. "]]" or nil)
        else
            table.insert(shield, "[[" .. entries[(htype[count])].filename .. alloc[count] .. ext .. "|" .. (customsize or entries[(htype[count])].size) .. "|link=|alt=]]" or nil)
        end
        count = count + 1
    until count == indexcount -- compare count to number of shields grabbed earlier
    return (shield[1] or "") .. (shield[2] or "") .. (shield[3] or "") .. (shield[4] or "")
end
return p