Difference between revisions of "Module:Transclusion count"

From blackwiki
Jump to navigation Jump to search
test>Ahecht
 
test>Ahecht
(Split main into num and risk)
Line 1: Line 1:
 
local p = {}
 
local p = {}
  
function p.main(frame)
+
local function _fetch(frame)
-- Fetch from database
 
 
local template = mw.ustring.gsub(mw.title.getCurrentTitle().text, "/doc$", "")
 
local template = mw.ustring.gsub(mw.title.getCurrentTitle().text, "/doc$", "")
 
if frame.args["demo"] and frame.args["demo"] ~= "" then
 
if frame.args["demo"] and frame.args["demo"] ~= "" then
Line 11: Line 10:
 
 
 
-- If database value doesn't exist, use value passed to template
 
-- If database value doesn't exist, use value passed to template
arg1 = tonumber(data[mw.ustring.gsub(template, " ", "_")]) or tonumber(frame.args[1]) or nil
+
return_value = tonumber(data[mw.ustring.gsub(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
 +
 
 +
function p.num(frame)
 +
count = _fetch(frame)
 
 
 
-- Build output string
 
-- Build output string
 
local return_value = ""
 
local return_value = ""
if arg1 == nil then
+
if count == nil then
 
if frame.args[1] == "risk" then
 
if frame.args[1] == "risk" then
 
return_value = "a very large number of"
 
return_value = "a very large number of"
Line 24: Line 34:
 
-- Use 2 sigfigs for smaller numbers and 3 for larger ones
 
-- Use 2 sigfigs for smaller numbers and 3 for larger ones
 
local sigfig = 2
 
local sigfig = 2
if arg1 >= 100000 then
+
if count >= 100000 then
 
sigfig = 3
 
sigfig = 3
 
end
 
end
 
 
 
-- Prepare to round to appropriate number of sigfigs
 
-- Prepare to round to appropriate number of sigfigs
local f = math.floor(math.log10(arg1)) - sigfig + 1
+
local f = math.floor(math.log10(count)) - sigfig + 1
 
 
 
-- Round and insert "apprxomimately" or "+" when appropriate
 
-- Round and insert "apprxomimately" or "+" when appropriate
 
if frame.args[2] == "yes" then
 
if frame.args[2] == "yes" then
 
-- Round down
 
-- Round down
return_value = mw.getContentLanguage():formatNum(math.floor( (arg1 / 10^(f)) ) * (10^(f))) .. "+"
+
return_value = mw.getContentLanguage():formatNum(math.floor( (count / 10^(f)) ) * (10^(f))) .. "+"
 
else
 
else
 
-- Round to nearest
 
-- Round to nearest
return_value = "approximately " .. mw.getContentLanguage():formatNum(math.floor( (arg1 / 10^(f)) + 0.5) * (10^(f)))
+
return_value = "approximately " .. mw.getContentLanguage():formatNum(math.floor( (count / 10^(f)) + 0.5) * (10^(f)))
 
end
 
end
 
 
 
-- Insert percent of pages
 
-- Insert percent of pages
 
if frame.args["all-pages"] and frame.args["all-pages"] ~= "" then
 
if frame.args["all-pages"] and frame.args["all-pages"] ~= "" then
local percent = math.floor( ( (arg1/frame:callParserFunction('NUMBEROFPAGES', 'R') ) * 100) + 0.5)
+
local percent = math.floor( ( (count/frame:callParserFunction('NUMBEROFPAGES', 'R') ) * 100) + 0.5)
 
return_value = return_value .. " pages, which is ≈" .. percent .. "% of all"
 
return_value = return_value .. " pages, which is ≈" .. percent .. "% of all"
 
end
 
end
 
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 = _fetch(frame)
 +
if count and count >= 100000 then return_value = "risk" end
 +
end
 
return return_value
 
return return_value
 
end
 
end
  
 
return p
 
return p

Revision as of 15:43, 16 September 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 = {}

local function _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"))
	
	-- If database value doesn't exist, use value passed to template
	return_value = tonumber(data[mw.ustring.gsub(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

function p.num(frame)
	count = _fetch(frame)
	
	-- 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" 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 = _fetch(frame)
		if count and count >= 100000 then return_value = "risk" end
	end
	return return_value
end

return p