Module:Transclusion count: Difference between revisions
		
		
		
		Jump to navigation
		Jump to search
		
Content added Content deleted
imported>Rox m (1 revision imported)  | 
				m (1 revision imported)  | 
				||
| (13 intermediate revisions by 8 users not shown) | |||
| Line 1: | Line 1: | ||
local p = {}  | 
  local p = {}  | 
||
| − | function p.  | 
  + | function p._fetch(args)  | 
	local template = nil  | 
  	local template = nil  | 
||
	local return_value = nil  | 
  	local return_value = nil  | 
||
| − | 	-- Use demo parameter if it exists,   | 
  + | 	-- Use demo parameter if it exists, otherwise use current template name  | 
	local namespace = mw.title.getCurrentTitle().namespace  | 
  	local namespace = mw.title.getCurrentTitle().namespace  | 
||
| − | 	if   | 
  + | 	if args["demo"] and args["demo"] ~= "" then  | 
| − | 		template =   | 
  + | 		template = mw.ustring.gsub(args["demo"],"^[Tt]emplate:","")  | 
	elseif namespace == 10 then -- Template namespace  | 
  	elseif namespace == 10 then -- Template namespace  | 
||
		template = mw.title.getCurrentTitle().text  | 
  		template = mw.title.getCurrentTitle().text  | 
||
| Line 20: | Line 20: | ||
		if namespace == 10 or namespace == 828 then  | 
  		if namespace == 10 or namespace == 828 then  | 
||
			template =  mw.ustring.gsub(template, "/doc$", "") -- strip /doc from end  | 
  			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 index = mw.ustring.sub(mw.title.new(template).text,1,1)  | 
||
| − | 			local status, data = pcall(function ()  | 
  + | 			local status, data = pcall(function ()  | 
| − | 				return(mw.loadData('Module:Transclusion_count/data/' .. (mw.ustring.find(index, "%a") and index or "other")))  | 
  + | 				return(mw.loadData('Module:Transclusion_count/data/' .. (mw.ustring.find(index, "%a") and index or "other")))  | 
			end)  | 
  			end)  | 
||
			if status then  | 
  			if status then  | 
||
| Line 31: | Line 32: | ||
	-- If database value doesn't exist, use value passed to template  | 
  	-- If database value doesn't exist, use value passed to template  | 
||
| − | 	if return_value == nil and   | 
  + | 	if return_value == nil and args[1] ~= nil then  | 
| − | 		local arg1=mw.ustring.match(  | 
  + | 		local arg1=mw.ustring.match(args[1], '[%d,]+')  | 
		if arg1 and arg1 ~= '' then  | 
  		if arg1 and arg1 ~= '' then  | 
||
| − | 			return_value = tonumber(  | 
  + | 			return_value = tonumber(mw.getCurrentFrame():callParserFunction('formatnum', arg1, 'R'))  | 
		end  | 
  		end  | 
||
	end  | 
  	end  | 
||
	return return_value	  | 
  	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  | 
  end  | 
||
Latest revision as of 02:42, 2 November 2025
Documentation for this module may be created at Module:Transclusion count/doc
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