Jump to content

Module:Infobox road/length: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Fix too small font per MOS:FONTSIZE. rm duplicate "font-size 90%" applied to text that is already at 90%.
take sandbox live
Line 1: Line 1:
local p = {}
local p = {}


local math = require "Module:Math"
local concat = table.concat
local insert = table.insert
local format = mw.ustring.format
local frame = mw.getCurrentFrame()


local function getLengths(args, num)
function p._length(num, args)
local km = args["length_km" .. num] or ''
local precision = math._precision
local round = math._round
local format = math._precision_format
local lengths = {}
local km = args["length_km" .. num] or ''
local mi = args["length_mi" .. num] or ''
local mi = args["length_mi" .. num] or ''
local prec = tonumber(args["length_round" .. num])
if '' == km then
local n = tonumber(mi)
prec = prec or precision(mi)
if n then
lengths.km = format(tostring(n * 1.609344), tostring(prec))
else
lengths.km = '0'
end
else
prec = prec or precision(km)
lengths.km = format(km, tostring(prec))
lengths.orig = "km"
lengths.comp = "mi"
end
if '' == mi then
local n = tonumber(km)
prec = prec or precision(km)
if n then
lengths.mi = format(tostring(n / 1.609344), tostring(prec))
else
lengths.mi = '0'
end
else
prec = prec or precision(mi)
lengths.mi = format(mi, tostring(prec))
lengths.orig = "mi"
lengths.comp = "km"
end
return lengths
end

function p._length(num, args)
local ref = args["length_ref" .. num] or ''
local ref = args["length_ref" .. num] or ''
local notes = args["length_notes" .. num] or ''
local notes = args["length_notes" .. num] or ''

local lengths = getLengths(args, num)
local first, second, unit, unit2
if mi ~= '0' and km == '' then
local first, second
if lengths.orig == "mi" then
first = mi
first = lengths.mi
second = km
second = lengths.km
unit = "mi"
unit2 = "km"
else
else
first = lengths.km
first = km
second = lengths.mi
second = mi
unit = "km"
unit2 = "mi"
end
end

if first == '0' and second == '0' then
return
if mi == '' and km == '' then
end
return nil
elseif notes ~= '' then
local text = {first, " ", lengths.orig, ref, " (", second, " ", lengths.comp, ")", }
return frame:expandTemplate{ title = 'cvt', args = { first, unit, unit2, disp = "x", ref .. "&nbsp;("}} .. ")<div>" .. notes .. "</div>"
if notes ~= '' then
else
table.insert(text, "<div>" .. notes .. "</div>")
return frame:expandTemplate{ title = 'cvt', args = { first, unit, unit2, disp = "x", ref .. "&nbsp;("}} .. ")"
end
end
return table.concat(text)
end
end


function p.length(frame)
function p.length(frame)

Revision as of 20:25, 20 August 2021

local p = {}

local concat = table.concat
local insert = table.insert
local format = mw.ustring.format
local frame = mw.getCurrentFrame()

function p._length(num, args)
	local km = args["length_km" .. num] or ''
    local mi = args["length_mi" .. num] or ''
    local ref = args["length_ref" .. num] or ''
    local notes = args["length_notes" .. num] or ''

    local first, second, unit, unit2
    if mi ~= '0' and km == '' then
        first = mi
        second = km
        unit = "mi"
        unit2 = "km"
    else
        first = km
        second = mi
        unit = "km"
        unit2 = "mi"
    end

    if mi == '' and km == '' then
        return nil
    elseif notes ~= '' then
		return frame:expandTemplate{ title = 'cvt', args = { first, unit, unit2, disp = "x", ref .. "&nbsp;("}} .. ")<div>" .. notes .. "</div>"
	else
    	return frame:expandTemplate{ title = 'cvt', args = { first, unit, unit2, disp = "x", ref .. "&nbsp;("}} .. ")"
    end
end
    

function p.length(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 num = config.num or ''
    return p._length(num, args)
end

return p