Jump to content

Module:Infobox road/length/sandbox: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
shorten
sync
Line 6: Line 6:
local frame = mw.getCurrentFrame()
local frame = mw.getCurrentFrame()


function p._length(desc, num, args)
function p._length(num, args)
local desc = desc
local km = args["length_km" .. num] or ''
local km = args[desc .."_km" .. num] or ''
local mi = args["length_mi" .. num] or ''
local mi = args[desc .."_mi" .. num] or ''
local nmi = args["length_nmi" .. num] or ''
local ref = args[desc .."_ref" .. num] or ''
local ref = args["length_ref" .. num] or ''
local notes = args[desc .."_notes" .. num] or ''
local notes = args["length_notes" .. num] or ''


if '' == mi and '' == km and '' == nmi then
local first, second, unit, unit2
return nil -- none of these set, abandon
if mi ~= '0' and km == '' then
end
first = mi

second = km
unit = "mi"
local first, unit, unit2, unit3
unit2 = "km"
-- if nmi ~= '0' and mi == '' and km == '' then
if tonumber (nmi) then
unit3 = "m"
first = nmi
else
unit = "nmi"
first = km
unit2 = "km mi"
second = mi
unit = "km"
unit3 = "km mi"
unit2 = "mi"
-- elseif mi ~= '0' and km == '' then
elseif tonumber (mi) then
unit3 = "mi ft"
first = mi
unit = "mi"
unit2 = "km"
unit3 = "m"
-- elseif km ~= '0' and mi == '' then
elseif tonumber (km) then
first = km
unit = "km"
unit2 = "mi"
unit3 = "mi ft"
else
return nil -- something other than numbers so abandon
end
end


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

function p.length(frame)
function p.length(frame)
local pframe = frame:getParent()
local pframe = frame:getParent()
Line 47: Line 64:
local num = config.num or ''
local num = config.num or ''
return p._length(num, args)
local desc = config.desc or "length"
return p._length(desc, num, args)
end
end



Revision as of 06:32, 25 November 2022

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 nmi = args["length_nmi" .. num] or ''
    local ref = args["length_ref" .. num] or ''
    local notes = args["length_notes" .. num] or ''

	if '' == mi and '' == km and '' == nmi then
	    return nil																-- none of these set, abandon
	end

    local first, unit, unit2, unit3
--    if nmi ~= '0' and mi == '' and km == '' then
	if tonumber (nmi) then
		first = nmi
		unit = "nmi"
		unit2 = "km mi"
		unit3 = "km mi"
--    elseif mi ~= '0' and km == '' then
	elseif tonumber (mi) then
		first = mi
		unit = "mi"
		unit2 = "km"
		unit3 = "m"
--    elseif km ~= '0' and mi == '' then
	elseif tonumber (km) then
		first = km
		unit = "km"
		unit2 = "mi"
		unit3 = "mi ft"
	else
		return nil																-- something other than numbers so abandon
    end

	if not first then
		return nil
	end
--    if mi == '' and km == '' and nmi == '' then
--        return nil
--    elseif notes ~= '' and first < '1' then
	if notes ~= '' and first < '1' then
    	return frame:expandTemplate{ title = 'cvt', args = { first, unit, unit3, disp = "x", ref .. "&nbsp;("}} .. ")<div>" .. notes .. "</div>"
    elseif notes == '' and first < '1' then
    	return frame:expandTemplate{ title = 'cvt', args = { first, unit, unit3, disp = "x", ref .. "&nbsp;("}} .. ")"
    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