Module:Interprovincial highway

require('strict')

local p = {}
local parser = require('Module:Road data/parser').parser
local getArgs = require('Module:Arguments').getArgs
local data = mw.loadData('Module:Interprovincial highway/data')

-- Generate a link to a route
local function makeRoute(route, routeType, routeLoc, currProvince)
	local out = ''
	
	local parserArgs = {
		route = route,
		type = routeType,
		province = routeLoc
	}
	
	local shield = parser(parserArgs, 'shieldmain') or parser(parserArgs, 'shield') or ''
	local label = (routeLoc ~= currProvince and (routeLoc .. ' ') or '')
		.. (parser(parserArgs, 'name') or parser(parserArgs, 'abbr') or '')
	local link = parser(parserArgs, 'link')
	local alt = label .. ' marker'
	
	if type(shield) == 'table' then
		shield = shield[1]
	end
	
	if shield and shield ~= '' then
		out = out ..  string.format('[[File:%s|15px|alt=%s]]', shield, alt) .. ' '
	end
	
	if not link or link == '' then
		out = out  .. label
	else
		out = out  .. string.format('[[%s|%s]]', link, label)
	end
	
	if out ~= '' then
		out = "'''" .. out .. "'''"
	end
	
	return out
end

-- Generate the content for a prev/next navigation table cell
local function makeNav(prefix, label, currProvince, args)
	local out = ''
	
	local index = 1
	local paramPrefix = prefix 
	
	while args[paramPrefix] and args[paramPrefix] ~= '' do
		local route = args[paramPrefix]
		local routeType = args[paramPrefix .. '_type']
		local routeLoc = args[paramPrefix .. '_province']
		
		if index ~= 1 then
			out = out .. '<hr>'
		end
		
		out = out .. makeRoute(route, routeType, routeLoc, currProvince)
		
		index = index + 1
		paramPrefix = prefix .. index
	end
	
	if out == '' then
		out = "'''Terminus'''"
	end
	
	return label .. ' ' .. (index - 1 > 1 and 'routes' or 'route') .. '<br>' .. out
end

-- Generate the name for a highway type
local function getName(type)
	return data.types[type] or require('Module:Error').error{'Unknown name'}
end

-- Generate highway rows (headers and content cells)
function p.rows(frame)
	local args = getArgs(frame)
	local out = ''

	local current = makeRoute(
		args.curr,
		args.curr_type,
		args.curr_province,
		args.curr_province or args.province
	)
	
	local index = 1
	local paramPrefix = ''
	
	repeat
		out = out .. '|-\n'
		out = out .. '! colspan=3 | ' .. getName(args[paramPrefix .. 'name']) .. '\n'
		out = out .. '|- style="text-align: center;"' .. '\n'
		out = out .. '| style="width: 30%;" | ' .. makeNav(paramPrefix .. 'prev', 'Previous', args.curr_province, args) .. '\n'
		out = out .. '| style="width: 30%;" | ' .. current .. '\n'
		out = out .. '| style="width: 30%;" | ' .. makeNav(paramPrefix .. 'next', 'Next', args.curr_province, args) .. '\n'
		
		index = index + 1
		paramPrefix = 'hwy' .. index .. '_'
	until (not args[paramPrefix .. 'name']) or args[paramPrefix .. 'name'] == ''
	
	return out
end

-- Show the supported types in a table
function p.supported(frame)
	local data = mw.loadData('Module:Interprovincial highway/data')
	local post = 'Types retrieved from [[Module:Interprovincial highway/data]] ('
		.. frame:expandTemplate{ title = 'edit', args = { 'Module:Interprovincial highway/data' } } .. ').'

	local tableEl = mw.html.create('table'):addClass('wikitable')
	
	local headerRow = tableEl:tag('tr')
	headerRow:tag('th'):wikitext('Value')
	headerRow:tag('th'):wikitext('Title')

	for name, title in pairs(data.types) do
		local row = tableEl:tag('tr')
		row:tag('td'):tag('code'):wikitext(name)
		row:tag('td'):wikitext("'''" .. title .. "'''")
	end

	return tostring(tableEl) .. post
end

return p

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.