Module:Transclusion count: Difference between revisions
From the Croc Wiki, the Croc encyclopedia
Jump to navigationJump to search
Content added Content deleted
(Split main into num and risk) |
m (1 revision imported from wikipedia:Module:Transclusion_count) |
||
(17 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
local p = {} |
local p = {} |
||
function p.fetch(frame) |
|||
local template = |
local template = nil |
||
⚫ | |||
-- Use demo parameter if it exists, otherswise use current template name |
|||
local namespace = mw.title.getCurrentTitle().namespace |
|||
if frame.args["demo"] and frame.args["demo"] ~= "" then |
if frame.args["demo"] and frame.args["demo"] ~= "" then |
||
template = mw.ustring.gsub(frame.args["demo"], |
template = mw.ustring.gsub(frame.args["demo"],"^[Tt]emplate:","") |
||
elseif namespace == 10 then -- Template namespace |
|||
template = mw.title.getCurrentTitle().text |
|||
elseif namespace == 828 then -- Module namespace |
|||
template = (mw.site.namespaces[828].name .. ":" .. mw.title.getCurrentTitle().text) |
|||
⚫ | |||
-- If in template or module namespace, look up count in /data |
|||
⚫ | |||
namespace = mw.title.new(template, "Template").namespace |
|||
if namespace == 10 or namespace == 828 then |
|||
template = mw.ustring.gsub(template, "/doc$", "") -- strip /doc from end |
|||
template = mw.ustring.gsub(template, "/sandbox$", "") -- strip /sandbox from end |
|||
⚫ | |||
local status, data = pcall(function () |
|||
⚫ | |||
⚫ | |||
if status then |
|||
⚫ | |||
⚫ | |||
end |
|||
end |
end |
||
⚫ | |||
⚫ | |||
-- If database value doesn't exist, use value passed to template |
-- If database value doesn't exist, use value passed to template |
||
return_value = |
if return_value == nil and frame.args[1] ~= nil then |
||
⚫ | |||
local arg1=mw.ustring.match(frame.args[1], '[%d,]+') |
local arg1=mw.ustring.match(frame.args[1], '[%d,]+') |
||
if arg1 and arg1 ~= '' then |
|||
⚫ | |||
return_value = tonumber(frame:callParserFunction('formatnum', arg1, 'R')) |
|||
end |
|||
end |
end |
||
Line 20: | Line 42: | ||
end |
end |
||
-- Tabulate this data for [[Wikipedia:Database reports/Templates transcluded on the most pages]] |
|||
function p.num(frame) |
|||
function p.tabulate(frame) |
|||
⚫ | |||
for i = 65, 91 do |
|||
-- Build output string |
|||
local data = mw.loadData('Module:Transclusion count/data/' .. ((i == 91) and 'other' or string.char(i))) |
|||
⚫ | |||
for name, count in pairs(data) do |
|||
table.insert(list, {mw.title.new(name, "Template").fullText, count}) |
|||
if frame.args[1] == "risk" then |
|||
return_value = "a very large number of" |
|||
else |
|||
return_value = "many" |
|||
end |
end |
||
else |
|||
-- Use 2 sigfigs for smaller numbers and 3 for larger ones |
|||
⚫ | |||
if count >= 100000 then |
|||
sigfig = 3 |
|||
⚫ | |||
-- Prepare to round to appropriate number of sigfigs |
|||
local f = math.floor(math.log10(count)) - sigfig + 1 |
|||
-- Round and insert "apprxomimately" or "+" when appropriate |
|||
if frame.args[2] == "yes" then |
|||
-- Round down |
|||
return_value = mw.getContentLanguage():formatNum(math.floor( (count / 10^(f)) ) * (10^(f))) .. "+" |
|||
else |
|||
-- Round to nearest |
|||
return_value = "approximately " .. mw.getContentLanguage():formatNum(math.floor( (count / 10^(f)) + 0.5) * (10^(f))) |
|||
⚫ | |||
-- Insert percent of pages |
|||
if frame.args["all-pages"] and frame.args["all-pages"] ~= "" then |
|||
local percent = math.floor( ( (count/frame:callParserFunction('NUMBEROFPAGES', 'R') ) * 100) + 0.5) |
|||
return_value = return_value .. " pages, which is ≈" .. percent .. "% of all" |
|||
⚫ | |||
end |
end |
||
table.sort(list, function(a, b) |
|||
return (a[2] == b[2]) and (a[1] < b[1]) or (a[2] > b[2]) |
|||
return return_value |
|||
end |
end) |
||
local lang = mw.getContentLanguage(); |
|||
for i = 1, #list do |
|||
function p.risk(frame) |
|||
list[i] = ('|-\n| %d || [[%s]] || %s\n'):format(i, list[i][1]:gsub('_', ' '), lang:formatNum(list[i][2])) |
|||
local return_value = "" |
|||
if frame.args[1] == "risk" then |
|||
return_value = "risk" |
|||
else |
|||
local count = _fetch(frame) |
|||
if count and count >= 100000 then return_value = "risk" end |
|||
end |
end |
||
return |
return table.concat(list) |
||
end |
end |
||
Latest revision as of 17:58, August 8, 2023
This module is rated as beta, and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected. |
Fetches usage data for highly-transcluded templates. Uses bot-updated values from subpages of Module:Transclusion_count/data/ when available.
Usage
{{#invoke:Transclusion count|fetch|number of transclusions|use + notation|all-pages=|demo=}}
number of transclusions
: is a static number of times the template has been transcluded, to use when values cannot be read from the database. This value will be ignored if transclusion data is available for the current page.demo=Template_name
: will use the transclusion count for the template at Template:Template_name instead of detecting what template it is being used on. Capitalization must exactly match the value used in Special:PrefixIndex/Module:Transclusion_count/data/.
{{#invoke:Transclusion count|tabulate}}
- Used to generate Wikipedia:Database reports/Templates transcluded on the most pages.
local p = {}
function p.fetch(frame)
local template = nil
local return_value = nil
-- Use demo parameter if it exists, otherswise use current template name
local namespace = mw.title.getCurrentTitle().namespace
if frame.args["demo"] and frame.args["demo"] ~= "" then
template = mw.ustring.gsub(frame.args["demo"],"^[Tt]emplate:","")
elseif namespace == 10 then -- Template namespace
template = mw.title.getCurrentTitle().text
elseif namespace == 828 then -- Module namespace
template = (mw.site.namespaces[828].name .. ":" .. mw.title.getCurrentTitle().text)
end
-- If in template or module namespace, look up count in /data
if template ~= nil then
namespace = mw.title.new(template, "Template").namespace
if namespace == 10 or namespace == 828 then
template = mw.ustring.gsub(template, "/doc$", "") -- strip /doc from end
template = mw.ustring.gsub(template, "/sandbox$", "") -- strip /sandbox from end
local index = mw.ustring.sub(mw.title.new(template).text,1,1)
local status, data = pcall(function ()
return(mw.loadData('Module:Transclusion_count/data/' .. (mw.ustring.find(index, "%a") and index or "other")))
end)
if status then
return_value = tonumber(data[mw.ustring.gsub(template, " ", "_")])
end
end
end
-- If database value doesn't exist, use value passed to template
if return_value == nil and frame.args[1] ~= nil then
local arg1=mw.ustring.match(frame.args[1], '[%d,]+')
if arg1 and arg1 ~= '' then
return_value = tonumber(frame:callParserFunction('formatnum', arg1, 'R'))
end
end
return return_value
end
-- Tabulate this data for [[Wikipedia:Database reports/Templates transcluded on the most pages]]
function p.tabulate(frame)
local list = {}
for i = 65, 91 do
local data = mw.loadData('Module:Transclusion count/data/' .. ((i == 91) and 'other' or string.char(i)))
for name, count in pairs(data) do
table.insert(list, {mw.title.new(name, "Template").fullText, count})
end
end
table.sort(list, function(a, b)
return (a[2] == b[2]) and (a[1] < b[1]) or (a[2] > b[2])
end)
local lang = mw.getContentLanguage();
for i = 1, #list do
list[i] = ('|-\n| %d || [[%s]] || %s\n'):format(i, list[i][1]:gsub('_', ' '), lang:formatNum(list[i][2]))
end
return table.concat(list)
end
return p