Module:User:Mxn/Archive timeline
- This module sandbox lacks a documentation subpage. You may create it.
- Useful links: root page • root page’s subpages • links • transclusions • testcases • user page • user talk page • userspace
This is a private module sandbox of Mxn, for his own experimentation. Items in this module may be added and removed at Mxn's discretion; do not rely on this module's stability.
local p = {}
local function round(value, precision)
local rescale = math.pow(10, precision or 0)
return math.floor(value * rescale + 0.5) / rescale
end
function p.timeline(frame)
local firstYear = tonumber(frame.args.first)
local thisYear = tonumber(os.date("%Y"))
local lastYear = tonumber(frame.args.last or thisYear - 1)
local title = mw.title.getCurrentTitle()
local years = {}
local sizes = {}
local maxSize = 0
for year = firstYear, lastYear do
local subTitle = mw.title.new(mw.ustring.format("%s:%s/%i",
title.nsText, title.baseText, year))
if subTitle.exists then
table.insert(years, year)
local size = round(tonumber(frame:callParserFunction(
"PAGESIZE", subTitle.fullText, "R")) / 1024, 0)
sizes[year] = size
if size > maxSize then maxSize = size end
end
end
-- Main talk page
table.insert(years, lastYear + 1)
local size = round(tonumber(frame:callParserFunction(
"PAGESIZE", title.nsText .. ":" .. title.baseText, "R")) / 1024, 0)
sizes[lastYear + 1] = size
if size > maxSize then maxSize = size end
local barData = {}
for i, year in ipairs(years) do
table.insert(barData, " bar:" .. year)
end
local plotData = {}
for i, year in ipairs(years) do
local bar = mw.ustring.format(" bar:%i from:0 till:%i", year, sizes[year])
if tonumber(title.subpageText) == year or
(year == lastYear + 1 and not title.isSubpage) then
bar = bar .. " color:nhanmanh"
end
table.insert(plotData, bar)
end
local labels = {}
for i, year in ipairs(years) do
local linkText = tostring(year)
local link = title.nsText .. ":" .. title.baseText
if year ~= lastYear + 1 then
link = link .. "/" .. year
elseif lastYear ~= thisYear - 1 then
linkText = linkText .. "+"
end
local label = mw.ustring.format(" bar:%i at:0 text:\"[[%s|%s]]\"",
year, link, linkText)
if tonumber(title.subpageText) == year or
(year == lastYear + 1 and not title.isSubpage) then
label = label .. " fontsize:M"
end
table.insert(labels, label)
end
return frame:expandTemplate{
title = "User:Mxn/Archive timeline",
args = {
MaxPeriod = maxSize,
BarData = table.concat(barData, "\n"),
PlotData = table.concat(plotData, "\n"),
Labels = table.concat(labels, "\n"),
},
}
end
return p