Module:User:Mxn/Archive timeline

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\"",            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