Jump to content

Module:Transclusion count/sandbox: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
check if passed arg is numeric (attempt at fixing bug on talk)
account for null arg1 values, for whatever reason
Line 30: Line 30:
local arg1=mw.ustring.match(frame.args[1], '[%d,]+')
local arg1=mw.ustring.match(frame.args[1], '[%d,]+')
if arg1 ~= nil then
-- check if a number-comma string only (with commas stripped) is wholly made up of digits
-- check if a number-comma string only (with commas stripped) is wholly made up of digits
-- if not, return nil, for caller to parse their own default
-- if not, return nil, for caller to parse their own default
local arg1check = string.gsub(arg1, ',', '')
arg1check = tonumber(arg1check)
local arg1check = string.gsub(arg1, ',', '')
if arg1check ~= nil then
arg1check = tonumber(arg1check)
if arg1check ~= nil then
return_value = tonumber(frame:callParserFunction('formatnum', arg1, 'R'))
return_value = tonumber(frame:callParserFunction('formatnum', arg1, 'R'))
end
end
end
end
end

Revision as of 21:19, 29 September 2020

local p = {}

function p.fetch(frame)
	local template = nil
	local return_value = nil

	-- Use demo parameter if it exists, otherswise use current template name
	local namespace = mw.title.getCurrentTitle().namespace
	if frame.args["demo"] and frame.args["demo"] ~= "" then
		template = frame.args["demo"]
	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
			local index = mw.ustring.sub(mw.title.new(template).text,1,1)
			local data = mw.loadData('Module:Transclusion_count/data/' .. (mw.ustring.find(index, "%a") and index or "other"))
			return_value = tonumber(data[mw.ustring.gsub(template, " ", "_")])
		end
	end
	
	-- If database value doesn't exist, use value passed to template
	if return_value == nil and frame.args[1] ~= nil then
		local arg1=mw.ustring.match(frame.args[1], '[%d,]+')
		
		if arg1 ~= nil then
			-- check if a number-comma string only (with commas stripped) is wholly made up of digits
			-- if not, return nil, for caller to parse their own default
			local arg1check = string.gsub(arg1, ',', '')
			arg1check = tonumber(arg1check)
			if arg1check ~= nil then
				return_value = tonumber(frame:callParserFunction('formatnum', arg1, 'R'))
			end
		end
	end
	
	return return_value	
end

return p