Module:Transclusion count: Difference between revisions

From NvWiki
Jump to navigation Jump to search
Module call: new section
 
Add protection level for top 400 rows
Line 1: Line 1:
{{central|text=all letter subpages of this module redirects here.}}
local p = {}
== Question regarding deleted templates ==


{{ping|Ahecht}} does Ahechtbot check if the template/modules in the list still exists and if not remove them from the list? --[[User:Gonnym|Gonnym]] ([[User talk:Gonnym|talk]]) 15:18, 11 January 2020 (UTC)
function p._fetch(args)
:{{ping|Gonnym}} Yes, it will remove any that fall below 2,000 transclusions or no longer exist. --[[User:Ahecht|Ahecht]] ([[User talk:Ahecht|<span style="color:#FFF;background:#04A;display:inline-block;padding:1px;vertical-align:-.3em;font:bold 50%/1 sans-serif;text-align:center">TALK<br />PAGE</span>]]) 16:07, 12 January 2020 (UTC)
local template = nil
local return_value = nil


== Module call ==
-- Use demo parameter if it exists, otherwise use current template name
local namespace = mw.title.getCurrentTitle().namespace
if args["demo"] and args["demo"] ~= "" then
template = mw.ustring.gsub(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


Can we make a function which can be called from another module please? &mdash;&nbsp;Martin <small>([[User:MSGJ|MSGJ]]&nbsp;·&nbsp;[[User talk:MSGJ|talk]])</small> 12:25, 20 November 2024 (UTC)
-- 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 args[1] ~= nil then
local arg1=mw.ustring.match(args[1], '[%d,]+')
if arg1 and arg1 ~= '' then
return_value = tonumber(mw.getCurrentFrame():callParserFunction('formatnum', arg1, 'R'))
end
end
return return_value
end
 
function p.fetch(frame)
return p._fetch(frame.args)
end
 
-- Tabulate this data for [[Wikipedia:Database reports/Templates transcluded on the most pages]]
function p.tabulate()
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
local title = mw.title.new(name, "Template")
table.insert(list, {title, 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
local protLevel = ""
local title = list[i][1]
if i < 400 then
-- Stop at 400 to avoid breaching the expensive parser function call limit
protLevel = title.protectionLevels.edit[1] or "(unprotected)"
end
list[i] = ('|-\n| %d || [[%s]] || %s || %s \n'):format(i, title.fullText:gsub('_', ' '), lang:formatNum(list[i][2]), protLevel)
end
return table.concat(list)
end
 
return p

Revision as of 22:36, 11 August 2025

Template:Module rating

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}}

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(args)
	local template = nil
	local return_value = nil

	-- Use demo parameter if it exists, otherwise use current template name
	local namespace = mw.title.getCurrentTitle().namespace
	if args["demo"] and args["demo"] ~= "" then
		template = mw.ustring.gsub(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 args[1] ~= nil then
		local arg1=mw.ustring.match(args[1], '[%d,]+')
		if arg1 and arg1 ~= '' then
			return_value = tonumber(mw.getCurrentFrame():callParserFunction('formatnum', arg1, 'R'))
		end
	end
	
	return return_value	
end

function p.fetch(frame)
	return p._fetch(frame.args)
end

-- Tabulate this data for [[Wikipedia:Database reports/Templates transcluded on the most pages]]
function p.tabulate()
	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
			local title = mw.title.new(name, "Template")
			table.insert(list, {title, 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
		local protLevel = ""
		local title = list[i][1]
		if i < 400 then
			-- Stop at 400 to avoid breaching the expensive parser function call limit
			protLevel = title.protectionLevels.edit[1] or "(unprotected)"
		end
		list[i] = ('|-\n| %d || [[%s]] || %s || %s \n'):format(i, title.fullText:gsub('_', ' '), lang:formatNum(list[i][2]), protLevel)
	end
	return table.concat(list)
end

return p