Module:Transclusion count: Difference between revisions

From escforumwiki
Jump to navigation Jump to search
en>Ahecht
 
en>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-trandscluded 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