请输入您要查询的百科知识:

 

词条 Module:Routelist row/sandbox
释义

local p = {} -- Package to be exported

local lang = mw.getContentLanguage() -- Built-in locale for date formatting

local format = mw.ustring.format -- String formatting function

local insert = table.insert

local concat = table.concat

local roadDataModule = require("Module:Road data")

local util = require("Module:Road data/util")

local shieldScale = 1.25

--[[-

@type status

@field #string row: The start of the row, for this particular type (color)

@field #string established: The string to be output in the "Formed" column.

For future routes, "proposed" is displayed here.

Otherwise, display the year passed in the established parameter.

@field #string removed: The string to be output in the "Removed" column.

In the case of routeStates.former, the year that the route was

decommissioned is output instead.

]]

--[[-

Route statuses.

@list <#status>

]]

local routeStatuses = {

-- current routes

current = {

row = "|-",

removed = "current"

},

-- future routes

future = {

row = '|- style="background-color:#ffdead;" title="Future route"',

established = "proposed",

removed = "—"

},

-- former routes

former = {

row = '|- style="background-color:#d3d3d3;" title="Former route"'

},

-- routes marked as former by override

-- deprecated

formeroverride = {

row = '|- style="background-color:#d3d3d3;" title="Former route"',

removed = "—"

},

-- route with unknown status

unknown = {

row = "|-",

removed = "—"

}

}

--[[-

Return the route status.

@param #string established `established` argument passed to the module

@param #string decommissioned `decommissioned` argument passed to the module

@return #status the status of the route.

]]

local function getRouteStatus(established, decommissioned)

if decommissioned == 'yes' then

-- a former route with no decommission information

return routeStatuses.formeroverride

elseif decommissioned then

-- If the route is decommissioned, then it must be a former route.

return routeStatuses.former

elseif not established then

-- Without the establishment date, there is not enough information

-- to determine the status of the route.

return routeStatuses.unknown

elseif established == 'proposed' then

-- a future route

return routeStatuses.future

else

-- a current route

return routeStatuses.current

end

end

--[[-

A limited replacement for {{dts}}.

Derive the sort key from a given date.

@param #string date

@param #string circa "yes" if `date` is tagged as circa

@return #string true the hidden sort key, along with the year of the original date

@return #boolean false if the sort key cannot be derived

]]

local function dtsYearCore(date)

local year = lang:formatDate('Y', date) -- year for this date

if year == date then -- If the provided date is just the year,

-- tack on January 1 for the sort key to work right.

date = date .. "-01-01"

end

local month = lang:formatDate('m', date) -- month for this date

local day = lang:formatDate('d', date) -- day for this date

-- Create and store the formatted hidden sort key.

-- The year must be five digits, per convention.

local dtsStr = format("%05d-%02d-%02d", year, month, day)

-- Return the hidden sort key and the year for this date.

return {dtsStr, year}

end

local function dtsYear(date, circa)

local success, result = pcall(dtsYearCore, date)

if not success then

result = {

"00001-01-01",

util.err(format('Invalid date "%s".', date))

}

end

-- Generate the HTML code necessary for the hidden sort key.

local dtsStyle = format("style=\\"white-space:nowrap;\\" data-sort-value=\\"%s\\"", result[1])

local year = result[2]

if circa == 'yes' then -- If the date is tagged as circa,

-- add the circa abbreviation to the display. Derived from {{circa}}.

year = "c. " .. year .. ""

end

return dtsStyle, year

end

--- Return formatting and output for a date column.

local function date(text, date, circa, ref)

-- Returns the text if specified, or the dtsYear-formatted date, and an em-dash.

local style, output

if text then

output = text

elseif date then

style, output = dtsYear(date, circa)

else

output = "—"

end

return format("|align=center %s|%s%s", style or "", output, ref)

end

--- Return output for the date columns for a given route.

local function dates(established, decommissioned, routeStatus, args)

local established_ref = args.established_ref or -- Reference for date established

local decommissioned_ref = args.decommissioned_ref or -- Reference for date decommissioned

return format("%s\%s",

date(routeStatus.established, established, args.circa_established, established_ref),

date(routeStatus.removed, decommissioned, args.circa_decommissioned, decommissioned_ref))

end

--- Return output for the termini columns for a given route.

local function termini(args)

local beltway = args["beltway"]

if beltway then

-- The given route is a beltway.

-- `beltway` text will span both termini columns.

return "|colspan=2 align=center|" .. beltway

else

local terminus_a = args["terminus_a"] or '—' -- Southern or western terminus

local terminus_b = args["terminus_b"] or '—' -- Northern or eastern terminus

-- Fill in the termini columns

return '|' .. terminus_a .. '||' .. terminus_b

end

end

--- Return output for the length columns for a given route, with the appropriate conversions.

local function length(args)

local mi = args["length_mi"] -- Length in miles

local km = args["length_km"] -- Length in kilometers

-- Convert lengths.

local lengths = util.convertLengths({mi = mi, km = km}, '—')

local lengthRef = args["length_ref"] or

return format("|align=right|%s%s%s||align=right|%s",

lengths[lengths.orig], lengthRef, lengths.error or "", lengths[lengths.comp])

end

--- Generate a "Local names" cell if necessary.

local function localname(args)

local enabled = args[1] or

if enabled == "local" then

local localName = args["local"] or

return "|" .. localName

else

return

end

end

--- Generate a "Notes" cell if necessary.

local function notes(notes)

if notes == 'none' then

return '| ' --create empty cell

elseif notes then

return '|' .. notes --display notes in cell

else

return --create no cell

end

end

--- Derive the sort key from a given route.

local function sortkey(abbr)

-- Split `abbr` into three possibly empty parts, with number in the middle.

local prefix, num, suffix = mw.ustring.match(abbr, "([^0-9]*)(%d*)(.*)")

-- If `abbr` does not contain a number, the entry appears at the bottom.

num = tonumber(num)

num = type(num) == "number" and format("%04d", num) or ""

-- The sort key is `abbr`, but with route number zero-padded to 4 digits

-- and prefix moved to the end.

return mw.text.trim(

mw.ustring.gsub(format("%s%s %s", num, suffix, prefix), " ", " "),

"- ")

end

--- Return output for displaying the shield and link for a given route.

local function route(args)

local shield = roadDataModule.shield(args, shieldScale)

local link, abbr = roadDataModule.link(args)

-- Use the sort key if already specified.

local sortkey = args.sortkey or sortkey(abbr or "")

return format('!scope="row" class="nowrap" data-sort-value="%s"|%s %s',

sortkey, shield, link)

end

--- Derive the anchor from a given route.

local function anchor(routeType, routeNo)

-- Split `routeNo` into three possibly empty parts, with number in the middle.

local prefix, num, suffix = mw.ustring.match(routeNo, "([^0-9]*)(%d*)(.*)")

-- Zero-pad route number to 4 digits if `routeNo` does contain a number.

num = tonumber(num)

num = type(num) == "number" and format("%04d", num) or ""

-- The anchor is the concatenation of `type` and zero-padded `routeNo`.

return format("%s%s%s%s", routeType, prefix, num, suffix)

end

function p._row(args)

local established = args.established

local decommissioned = args.decommissioned

local routeStatus = getRouteStatus(established, decommissioned)

local anchor = args.anchor or anchor(args.type, args.route)

local rowdef = format('%s id="%s"', routeStatus.row, anchor)

local route = route(args)

local length = length(args)

local termini = termini(args)

local localname = localname(args)

local dates = dates(established, decommissioned, routeStatus, args)

local notes = notes(args.notes)

local row = {rowdef, route, length, termini, localname, dates, notes}

return concat(row, '\')

end

function p.row(frame)

-- Import module function to work with passed arguments

local getArgs = require('Module:Arguments').getArgs

local args = getArgs(frame) -- Gather passed arguments into easy-to-use table

return p._row(args);

end

return p

随便看

 

开放百科全书收录14589846条英语、德语、日语等多语种百科知识,基本涵盖了大多数领域的百科知识,是一部内容自由、开放的电子版国际百科全书。

 

Copyright © 2023 OENC.NET All Rights Reserved
京ICP备2021023879号 更新时间:2024/11/12 0:18:43