Module:Infobox road/length

From Chalo Chatu, Zambia online encyclopedia

local p = {}

local math = require "Module:Math"

local function getLengths(args, num)

   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 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 notes = args["length_notes" .. num] or 
   local lengths = getLengths(args, num)
    
   local first, second
   if lengths.orig == "mi" then
       first = lengths.mi
       second = lengths.km
   else
       first = lengths.km
       second = lengths.mi
   end
   if first == '0' and second == '0' then
       return
   end
   local text = {first, " ", lengths.orig, ref, " (", second, " ", lengths.comp, ")", }
   if notes ~=  then
       table.insert(text, "
" .. notes .. "") end return table.concat(text)

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