Difference between revisions of "Module:Transclusion count"

From blackwiki
Jump to navigation Jump to search
test>Ahecht
(sync from sandbox)
test>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.&#x20;",
 
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
  
 
return p
 
return p

Revision as of 18:16, 11 November 2019

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/.



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