Module:WikiProject metrics
| This module is rated as ready for general use. It has reached a mature state, is considered relatively stable and bug-free, and may be used wherever appropriate. It can be mentioned on help pages and other Wikipedia resources as an option for new users. To minimise server load and avoid disruptive output, improvements should be developed through sandbox testing rather than repeated trial-and-error editing. |
This module contains assorted tools for building WikiProject X metrics pages.
Usage
{{#invoke:WikiProject metrics|list|start month}}
Generates a list of months and the number of pages created in each month, starting with the given month
{{#invoke:WikiProject metrics|recent}}
Transcludes the current month's article list; if the month has just started, it may show last month's as well
{{#invoke:WikiProject metrics|chart|start month}}
Generates a line chart showing article creations over time, starting with the given month
local p = {}
local Date = require("Module:Date")._Date
local lang = mw.language.new(mw.language.getContentLanguage().code)
local function getMonths(start)
local month = Date("1 " .. start)
local current = Date("currentdate")
current = Date(current.year, current.month, 1)
if month > current then
return {}
end
local months = {month}
while month < current do
month = month + "1 month"
table.insert(months, month)
end
return months
end
function p.list(frame)
local baseTitle = frame:getParent():getTitle()
local startMonth = frame.args[1]
local months = getMonths(startMonth)
local list = {}
for i, month in pairs(months) do
if i == 1 or month:text("%B") == "January" then
local tag = '<span style="font-size: 120%%;">%s</span>'
table.insert(list, string.format(tag, month:text("%Y")))
end
local line = "* [[%s|%s]]: %s"
local title = baseTitle .. "/" .. month:text("%B %Y")
if mw.title.new(title).exists then
local count = frame:preprocess("{{#lst:" .. title .. "|count}}")
count = lang:formatNum(tonumber(count))
local item = string.format(line, title, month:text("%b"), count)
table.insert(list, item)
end
end
return table.concat(list, "\n")
end
local function getList(frame, baseTitle, month, cols)
local title = baseTitle .. "/" .. month:text("%B %Y")
if not mw.title.new(title).exists then
return ""
end
local list = frame:preprocess("{{#lst:" .. title .. "|list}}")
local output = string.format("== %s ==\n", month:text("%B %Y"))
output = output .. frame:expandTemplate{ title = "Hatnote", args = {
"[[" .. title .. "]] (" ..
frame:expandTemplate{ title = "Edit", args = { title } } ..
")"
} }
if cols ~= nil then
local div = '\n<div style="column-width: %s;">'
output = output .. string.format(div, cols, cols, cols)
end
output = output .. "\n" .. list
if cols ~= nil then
output = output .. "\n</div>"
end
return output
end
function p.recent(frame)
local baseTitle = frame:getParent():getTitle()
local cols = frame.args[1]
local now = Date("currentdate")
local output = getList(frame, baseTitle, now, cols)
if now.day < 10 then
local older = getList(frame, baseTitle, now - "1 month", cols)
output = output .. "\n" .. older
end
return output
end
function p.chart(frame)
local baseTitle = frame:getParent():getTitle()
local startMonth = frame.args[1]
local now = Date("currentdate")
local currentMonth = Date(now.year, now.month, 1)
local months = getMonths(startMonth)
local xdata = {}
local y1data = {}
local y2data = {}
for i, month in pairs(months) do
local title = baseTitle .. "/" .. month:text("%B %Y")
if mw.title.new(title).exists then
local count = frame:preprocess("{{#lst:" .. title .. "|count}}")
mw.logObject(count)
table.insert(xdata, month:text("%Y-%m-%d"))
table.insert(y1data, count)
if month ~= currentMonth then
table.insert(y2data, count)
end
end
end
local chart = frame:expandTemplate{ title = "Graph:Chart", args = {
width = "600",
height = "200",
type = "line",
xAxisTitle = "Month",
yAxisTitle = "Number of articles created",
xType = "date",
yAxisMin = "0",
colors = "#501f77b4,#1f77b4",
x = table.concat(xdata, ","),
y1 = table.concat(y1data, ","),
y2 = table.concat(y2data, ",")
}}
local div = '<div style="text-align: center; margin: auto;">%s</div>'
return string.format(div, chart)
end
return p
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.