Module:Transclusion count: Difference between revisions
From All Skies Encyclopaedia
imported>Ahecht (sync from sandbox) |
imported>Ahecht (Sync from sandbox. Move functions to Module:High-use) |
||
Line 18: | Line 18: | ||
return return_value |
return return_value |
||
end |
|||
function p.num(frame, count) |
|||
if count == nil then count = p.fetch(frame) end |
|||
-- Build output string |
|||
local return_value = "" |
|||
if count == nil then |
|||
if frame.args[1] == "risk" then |
|||
return_value = "a very large number of" |
|||
else |
|||
return_value = "many" |
|||
end |
|||
else |
|||
-- Use 2 sigfigs for smaller numbers and 3 for larger ones |
|||
local sigfig = 2 |
|||
if count >= 100000 then |
|||
sigfig = 3 |
|||
end |
|||
-- 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") or (mw.ustring.sub(frame.args[1],-1) == "+") 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))) |
|||
end |
|||
-- 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 |
|||
return return_value |
|||
end |
|||
function p.risk(frame) |
|||
local return_value = "" |
|||
if frame.args[1] == "risk" then |
|||
return_value = "risk" |
|||
else |
|||
local count = p.fetch(frame) |
|||
if count and count >= 100000 then return_value = "risk" end |
|||
end |
|||
return return_value |
|||
end |
|||
function p.text(frame) |
|||
local count = p.fetch(frame) |
|||
local title = mw.title.getCurrentTitle() |
|||
if title.subpageText == "doc" or title.subpageText == "sandbox" then |
|||
title = title.basePageTitle |
|||
end |
|||
local templatecount = string.format("https://tools.wmflabs.org/templatecount/index.php?lang=en&namespace=%s&name=%s",mw.title.getCurrentTitle().namespace,mw.uri.encode(title.text)) |
|||
local used_on_text = string.format("'''This %s is used on [%s %s pages]'''", |
|||
(mw.title.getCurrentTitle().namespace == 828 and "Lua module" or "template"), |
|||
templatecount, |
|||
p.num(frame, count) |
|||
) |
|||
local sandbox_text = string.format("%s's [[%s/sandbox|/sandbox]] or [[%s/testcases|/testcases]] subpages%s ", |
|||
(mw.title.getCurrentTitle().namespace == 828 and "module" or "template"), |
|||
title.fullText, title.fullText, |
|||
(mw.title.getCurrentTitle().namespace == 828 and "." or ", or in your own [[Wikipedia:Subpages#How to create user subpages|user subpage]].") |
|||
) |
|||
if (frame.args[1] == "risk" or (count and count >= 100000) ) then |
|||
local info = "" |
|||
if frame.args["info"] and frame.args["info"] ~= "" then |
|||
info = "<br />" .. frame.args["info"] |
|||
end |
|||
sandbox_text = string.format(".%s<br /> To avoid large-scale disruption and unnecessary server load, any changes to it should first be tested in the %sThe tested changes can then be added to this page in a single edit. ", |
|||
info, sandbox_text |
|||
) |
|||
else |
|||
sandbox_text = string.format(", so changes to it will be widely noticed. Please test any changes in the %s", |
|||
sandbox_text |
|||
) |
|||
end |
|||
local discussion_text = "Please consider discussing changes " |
|||
if frame.args["2"] and frame.args["2"] ~= "" and frame.args["2"] ~= "yes" then |
|||
discussion_text = string.format("%sat [[%s]]", discussion_text, frame.args["2"]) |
|||
else |
|||
discussion_text = string.format("%son the [[%s|talk page]]", discussion_text, title.talkPageTitle.fullText ) |
|||
end |
|||
return used_on_text .. sandbox_text .. discussion_text .. " before implementing them." |
|||
end |
end |
||
Revision as of 18:16, 11 November 2019
![]() | 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. |
Lua error in Module:High-use at line 156: attempt to call upvalue '_fetch' (a nil value). 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.
Notices
- The number of transclusion count is generated via subpages of Module:Transclusion count/data when is available and is automatically updated via a bot.
local p = {}
function p.fetch(frame)
local template = mw.ustring.gsub(mw.title.getCurrentTitle().text, "/doc$", "")
if frame.args["demo"] and frame.args["demo"] ~= "" then
template = mw.ustring.gsub(frame.args["demo"], "/doc$", "")
end
local index = mw.ustring.upper(mw.ustring.sub(template,1,1))
local data = mw.loadData('Module:Transclusion_count/data/' .. (mw.ustring.find(index, "%a") and index or "other"))
local return_value = tonumber(data[mw.ustring.gsub(template, " ", "_")])
-- If database value doesn't exist, use value passed to template
if return_value == nil then
local arg1=mw.ustring.match(frame.args[1], '[%d,]+')
return_value = tonumber(frame:callParserFunction('formatnum', arg1, 'R'))
end
return return_value
end
return p