Moduł:Timecharts

Z Wikipedii, wolnej encyklopedii
 Dokumentacja modułu [zobacz] [edytuj] [historia] [odśwież]

Użycie[edytuj kod]

Stworzone do tłumaczenia składni znanej z {{Populacja w latach}} na zwykły {{Wykres demograficzny}}.

Przykład[edytuj kod]

{{#invoke:Timecharts|populacjaDemogorgon
|
{"rok":1806,"populacja":6378},
{"rok":1900,"populacja":11127},
{"rok":1970,"populacja":23234},
{"rok":2000,"populacja":27931},
{"rok":2010,"populacja":30228}
|width=320
|height=200
|title=Populacja w latach 1806-2010
}}
Populacja w latach 1806-2010

Błędy[edytuj kod]

Błędy należy zgłaszać na stronie Wikipedia:Kawiarenka/Kwestie techniczne.

Zobacz też[edytuj kod]


local p = {}
--[[
	Timeline helper module.

	https://pl.wikipedia.org/w/index.php?title=Modu%C5%82:Timecharts&action=edit

	See also:
	https://pl.wikipedia.org/wiki/Szablon:Populacja_w_latach
	https://pl.wikipedia.org/wiki/Szablon:Wykres_demograficzny
]]
-- Author: [[User:Nux|Maciej Nux]] (pl.wikipedia.org).

--[[
	Przejściówka populacji do Wykres_demograficzny.
]] 
function p.populacjaDemogorgon(frame)
	-- semi-JSON chart data
	local popu_data = frame.args[1]
	if popu_data then
		-- usuń ostatni przecinek obecny w niektórych wywołaniach
		local fixed, c = mw.ustring.gsub(popu_data, ",%s*$", "")
		if c > 0 then
			popu_data = fixed
		end
	end
	local json_data = "[" .. popu_data .. "]"

	-- options
	local options = {
		-- width in [px]
		width = 320,
		-- h
		height = 200,
		-- chart Y-title
		title = "",
	}   
	local args = { "width", "height", "title" }
	for _, key in ipairs(args) do
		if frame.args[key] then
			options[key] = trim(frame.args[key])
		end
	end
	
	local title, args = p.renderBars(json_data, options)
	result = frame:expandTemplate{ title = title, args = args }
	return trim(result)
end

--[[
	Render piechart.
	
	@param json_data JSON string with pie data.
]]
function p.renderBars(json_data, options)
	local graph_data = mw.text.jsonDecode(json_data)

	local title = 'Wykres demograficzny'
    local args = {}
    args["tytuł"] = options.title
    args["szerokość"] = options.width
    args["wysokość"] = options.height
	for i, entry in ipairs(graph_data) do
		args["rok" .. i] = entry["rok"]
		args["pop" .. i] = entry["populacja"]
	end

	return title, args
end

-- round to int
function round(number)
    return math.floor(number + 0.5)
end

-- Language sensitive float.
function formatNum(value)
	local lang = mw.language.getContentLanguage()
	
	-- doesn't do precision :(
	-- local v = lang:formatNum(value)
	
	local v = string.format("%.1f", value)
	if (lang:getCode() == 'pl') then
		v = v:gsub("%.", ",")
	end
	return v
end

--[[
	trim string
	
	note:
	`(s:gsub(...))` returns only a string
	`s:gsub(...)` returns a string and a number
]]
function trim(s)
	return (s:gsub("^%s+", ""):gsub("%s+$", ""))
end

return p