Module:Jcon
MyWikiBiz, Author Your Legacy — Monday January 13, 2025
Jump to navigationJump to searchImplements {{Jcon}}. Add data to Module:Jcon/data.
local p = {} local getArgs = require("Module:Arguments").getArgs local data = mw.loadData('Module:Jcon/data') local miscTable = data.miscTable local typeTable = data.typeTable local divisionTable = data.divisionTable local pictureTable = data.pictureTable --[[ R E T U R N P I C T U R E Return the picture of text ]]-- local function returnPicture(frame,Type,args,division) if not pictureTable[division] then -- Return nothing if region doen't have pictures return "" end local export = pictureTable[division][1]..args[2]..pictureTable[division][2] or "" -- Set picture if args[2]:upper() == "407ETR" and division == "Highway" then -- Picture exceptions export = "Highway407crest.png" elseif args[2]:upper() == "QEW" and division == "Highway" and args["shield"] == "yes" then export = "Ontario QEW.svg" elseif args[2]:upper() == "QEW" and division == "Highway" and not args["shield"] then export = "Ontario QEW crown.svg" elseif args["shield"] == "yes" and division == "Highway" then routenumber = string.gsub(args[2],"%D","") if tonumber(routenumber) == nil then return "" -- Return nothing if there's no route number elseif tonumber(routenumber) >= 500 and division == "Highway" then -- If highway is secondary export = "Ontario Highway "..args[2]..".svg" else export = "Ontario "..args[2]..".svg" end else routenumber = string.gsub(args[2],"%D","") if tonumber(routenumber) == nil then return "" -- Return nothing if there's no route number elseif tonumber(routenumber) >= 500 and division == "Highway" then -- If highway is secondary export = "Ontario Highway "..args[2]..".svg" end end if export == "" or nil then return "" end -- Return nothing if export is nothing if frame:callParserFunction('#ifexist', 'Media:' .. export, '1') ~= '' then -- Set picture sizes if args["size"] then return table.concat({"[[File:",export,"|alt=|link=|",args["size"],"]]"}) elseif args[2]:upper() == "407ETR" then return table.concat({"[[File:",export,"|alt=|link=|24px]]"}) elseif division == "Kawartha Lakes" then return table.concat({"[[File:",export,"|alt=|link=|21px]]"}) elseif args["shield"] == "yes" and division == "Highway" then return table.concat({"[[File:",export,"|alt=|link=|x25px]]"}) elseif division == "Toll" then return table.concat({"[[File:",export,"|alt=|link=|x30px]]"}) else return table.concat({"[[File:",export,"|alt=|link=|x20px]]"}) end else return "" -- Retrun nothing if the picture doesn't exist end end --[[ R E T U R N T E X T Returns the text/link ]]-- local function returnText(frame,Type,args,division,showred) local export; -- Link local display; -- Display (if different from link) if args[2]:upper() == "407ETR" then -- Exception export = "Ontario Highway".." ".."407" display = "407".." ".."ETR" elseif args[2]:upper() == "QEW" then -- Exception export = "Queen Elizabeth Way" elseif Type == "Highway" or Type == "Toll" then -- Highways export = "Ontario Highway".." "..args[2] display = "Highway".." "..args[2] elseif division == "Kawartha Lakes" then export ="Kawartha Lakes" .." ".."Road".." "..args[2] display = Type.." ".."Road".." "..args[2] elseif Type == "County Highway" or Type == "Regional Highway" or Type == "County Line" then export = division.." "..args[2] display = Type.." "..args[2] else export = division.." "..Type.." ".."Road".." "..args[2] display = Type.." ".."Road".." "..args[2] end if (frame:callParserFunction('#ifexist',export, '1') ~= '' or showred) and not args["nolink"] then if display then export = "[["..export.."|"..display.."]]" -- Show display else export = "[["..export.."]]" -- Show export end return export elseif display then return display else return export end end --[[ R E T U R N P L A C E Add name/link for a city/town ]]-- local function returnPlace(frame,export,place,after,showred) local preExport if frame:callParserFunction('#ifexist',place..", Ontario", '1') ~= '' or showred then preExport = "[["..place..", Ontario|"..place.."]]" else preExport = place end if after == true then return export..", "..preExport else return export.." – "..preExport end end --[[ P . J C O N Return final picture(s)/text(s) ]]-- function p.jcon (frame) local args = getArgs(frame) args[1] = args[1] or "" -- Unnil args[1] local Remove = {"regional","region","county","country", "municipality of","city of","^ "," $"} -- Stuff to remove from lowercase input for _,v in ipairs(Remove) do args[1] = mw.ustring.gsub(args[1]:lower(),v,'') end args[2] = args[2] or "" local division = divisionTable[args[1]:lower()] or args[1] local Type = typeTable[division] local export = "" if miscTable[args[1]:lower()] or miscTable[args[2]:lower()] then return miscTable[args[1]:lower()] or miscTable[args[2]:lower()] end if not typeTable[division] then -- Region not in typeTable return "​" end if args[2] == "" then -- Need args[2] after this point return "​" end if args["ot"] then -- If output should only be text args["nosh"] = "yes" args["nolink"] = "yes" end args["2A"] = args[2] -- road1 is args[2] if args["con"] then args["2B"] = args["con"] end -- road 2 is args["con"] if args["con2"] then args["2C"] = args["con2"] end -- road 3 is args["con2"] -- [[ G E T P I C T U R E ]] -- if not args["nosh"] then -- If allowed to add shield args[2] = args["2A"] -- Set args[2] to road 1 picture = returnPicture(frame,Type,args,division) -- Return picture of road 1 if args["con"] then args[2] = args["2B"] -- Set args[2] to road 2 picture = picture.." "..returnPicture(frame,Type,args,division) -- Return picture of road 2 end if args["con2"] then args[2] = args["2C"] -- Set args[2] to road 3 picture = picture.." "..returnPicture(frame,Type,args,division) -- Return picture of road 3 end if args["tch"] then picture = picture.." ".."[[File:TCH-blank.svg|x20px]]" -- Return picture of tch end if picture ~= "" and not args["pic aft"] then -- If a picture was returned and picture goes first picture = picture.." " -- Add a space end end -- [[ A D D P I C T U R E ]] (If it goes before) -- if not args["pic aft"] and picture then -- If picure goes first export = picture end -- [[ A D D T E X T ]] -- if not args["notext"] then -- If allowed to show text args[2] = args["2A"] export = export..returnText(frame,Type,args,division,args['showred']) if args["con"] then args[2] = args["2B"] export = export.." ".."/".." "..returnText(frame,Type,args,division,args['showred']) end if args["con2"] then args[2] = args["2C"] export = export.." ".."/".." "..returnText(frame,Type,args,division,args['showred']) end if args["tch"] then export = export.." ".."/".." ".."[[Trans-Canada Highway|TCH]]" end end if args["dir"] then -- Direction export = export.." "..args["dir"] if args["condir"] then export=export.."/"..args["condir"] end end if args[3] then -- Name (argument 3) export = export.." ("..args[3]..")" end if args["city"] then -- City 1 export = returnPlace(frame,export,args["city"],false,args['showred']) elseif args["town"] then -- Or town 1 export = returnPlace(frame,export,args["town"],false,args['showred']) end if args["city2"] then -- City 1 export = returnPlace(frame,export,args["city2"],true,args['showred']) elseif args["town2"] then -- Or town 1 export = returnPlace(frame,export,args["town2"],true,args['showred']) end -- [[ A D D P I C T U R E ]] (If it goes after) -- if args["pic aft"] and picture then export = export.." "..picture end return export end --[[ P . S U P P O R T E D Return all supported "regions" in a list format ]]-- function p.supported (frame) local export = "'''Note: All inputs are converted to lowercase'''<br /><u>'''Supported 'Regions':'''</u>" -- Add header local supportedTable = {} -- Used to store all regional tables local index = {} -- Used to sort alphabetically for correct,_ in pairs(typeTable) do -- Create tables for each region supportedTable[correct] = {correct} end for improper,proper in pairs(divisionTable) do -- Add improper to regional tables if supportedTable[proper] then table.insert(supportedTable[proper],improper) else mw.log(proper.." doesn't have a type specified") -- Log regions that do not have a type supportedTable[proper] = {proper,improper} -- Create table end end for correct,_ in pairs(supportedTable) do -- Add keys to sortable index table.insert(index,correct) end table.sort(index) -- Sort index for _,correct in ipairs(index) do -- Go over each proper region for _,name in ipairs(supportedTable[correct]) do -- Go over each region name table.sort(supportedTable[correct]) if name == correct then -- Add to list if proper name export = export.."<br />• "..name else -- Add to list if improper name export = export.."<br />".." ".."• "..name end end end export = export.."<br /><u>'''Supported MTO signs:'''</u>" -- Add MTO header for k,v in pairs(miscTable) do -- Add MTO signs export = export.."<br />• "..k end return export -- Return list end --[[ Return Output End of module ]]-- return p;