Module:High-use: Difference between revisions

From the Croc Wiki, the Croc encyclopedia
Jump to navigationJump to search
Content added Content deleted
(section doesn't exist)
(Copy from sandbox as discussed on talk page)
Line 1: Line 1:
local p = {}
local p = {}


-- _fetch looks at the "demo" argument.
local _fetch = require('Module:Transclusion_count').fetch
local _fetch = require('Module:Transclusion_count').fetch


Line 55: Line 56:


function p.text(frame, count)
function p.text(frame, count)
-- Only show the information about how this template gets updated if someone
local bot_text = "\n\n----\nTransclusion count updated automatically ([[Template:High-use/doc#Technical details|see documentation]])."
-- is actually editing the page and maybe trying to update the count.
if frame.args["nobot"] == "true" then
local bot_text = (frame:preprocess("{{REVISIONID}}") == "") and "\n\n----\n'''Preview message''': Transclusion count updated automatically ([[Template:High-use/doc#Technical details|see documentation]]</small>)." or ''
bot_text = ""
end
if count == nil then count = _fetch(frame) end
if count == nil then count = _fetch(frame) end
local return_value = {}
local title = mw.title.getCurrentTitle()
local title = mw.title.getCurrentTitle()
if title.subpageText == "doc" or title.subpageText == "sandbox" then
if title.subpageText == "doc" or title.subpageText == "sandbox" then
Line 68: Line 66:
end
end
local systemMessages = frame.args['system']
local templatecount = string.format("https://templatecount.toolforge.org/index.php?lang=en&namespace=%s&name=%s",mw.title.getCurrentTitle().namespace,mw.uri.encode(title.text))
if frame.args['system'] == '' then
systemMessages = nil
end
local templateCount = ('on [https://templatecount.toolforge.org/index.php?lang=en&namespace=%s&name=%s %s pages].'):format(
mw.title.getCurrentTitle().namespace, mw.uri.encode(title.text), p.num(frame, count))
local used_on_text = "'''This " .. (mw.title.getCurrentTitle().namespace == 828 and "Lua module" or "template") .. ' is used ';
if systemMessages then
used_on_text = used_on_text .. ' in ' .. systemMessages ..
((count > 2000) and (",''' and " .. templateCount) or (".'''"))
else
used_on_text = used_on_text .. templateCount .. "'''"
end
local used_on_text = string.format("'''This %s is used on [%s %s pages]'''",
(mw.title.getCurrentTitle().namespace == 828 and "Lua module" or "template"),
templatecount,
p.num(frame, count)
)
local sandbox_text = string.format("%s's [[%s/sandbox|/sandbox]] or [[%s/testcases|/testcases]] subpages%s ",
local sandbox_text = ("%s's [[%s/sandbox|/sandbox]] or [[%s/testcases|/testcases]] subpages, or in your own [[%s]]. "):format(
(mw.title.getCurrentTitle().namespace == 828 and "module" or "template"),
(mw.title.getCurrentTitle().namespace == 828 and "module" or "template"),
title.fullText, title.fullText,
title.fullText, title.fullText,
(mw.title.getCurrentTitle().namespace == 828 and "." or ", or in your own [[Wikipedia:User pages#SUB|user subpage]].")
mw.title.getCurrentTitle().namespace == 828 and "Module:Sandbox|module sandbox" or "Wikipedia:User pages#SUB|user subpage"
)
)
if (frame.args[1] == "risk" or (count and count >= 100000) ) then
if (systemMessages or frame.args[1] == "risk" or (count and count >= 100000) ) then
local info = systemMessages and '<br/>Changes to it can cause immediate changes to the Wikipedia user interface.' or ''
local info = ""
if frame.args["info"] and frame.args["info"] ~= "" then
if frame.args["info"] and frame.args["info"] ~= "" then
info = "<br />" .. frame.args["info"]
info = info .. "<br />" .. frame.args["info"]
end
end
sandbox_text = string.format(".%s<br /> To avoid major disruption and server load, any changes should be tested in the %sThe tested changes can be added to this page in a single edit.&#x20;",
sandbox_text = info .. '<br /> To avoid major disruption' ..
(count and count >= 100000 and ' and server load' or '') ..
info, sandbox_text
', any changes should be tested in the ' .. sandbox_text ..
)
'The tested changes can be added to this page in a single edit. '
else
else
sandbox_text = string.format(" and changes may be widely noticed. Test changes in the %s",
sandbox_text = ' and changes may be widely noticed. Test changes in the ' .. sandbox_text
sandbox_text
)
end
end

local discussion_text = "Consider discussing changes "
local discussion_text = systemMessages and 'Please discuss changes ' or 'Consider discussing changes '
if frame.args["2"] and frame.args["2"] ~= "" and frame.args["2"] ~= "yes" then
if frame.args["2"] and frame.args["2"] ~= "" and frame.args["2"] ~= "yes" then
discussion_text = string.format("%sat [[%s]]", discussion_text, frame.args["2"])
discussion_text = string.format("%sat [[%s]]", discussion_text, frame.args["2"])
Line 103: Line 109:
end
end
return table.concat({used_on_text, sandbox_text, discussion_text, " before implementing them.", bot_text})
return used_on_text .. sandbox_text .. discussion_text .. " before implementing them." .. bot_text
end
end


Line 111: Line 117:
local image = "[[File:Ambox warning yellow.svg|40px|alt=Warning|link=]]"
local image = "[[File:Ambox warning yellow.svg|40px|alt=Warning|link=]]"
local type_param = "style"
local type_param = "style"
if (frame.args[1] == "risk" or (count and count >= 100000) ) then
if frame.args['system'] and frame.args['system'] ~= '' then
image = "[[File:Ambox important.svg|40px|alt=Warning|link=]]"
type_param = "content"
elseif (frame.args[1] == "risk" or (count and count >= 100000)) then
image = "[[File:Ambox warning orange.svg|40px|alt=Warning|link=]]"
image = "[[File:Ambox warning orange.svg|40px|alt=Warning|link=]]"
type_param = "content"
type_param = "content"

Revision as of 16:07, April 7, 2021

Documentation for this module may be created at Module:High-use/doc

local p = {}

-- _fetch looks at the "demo" argument.
local _fetch = require('Module:Transclusion_count').fetch

function p.num(frame, count)
	if count == nil then count = _fetch(frame) end
	
	-- 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 significant figures 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 "approximately" or "+" when appropriate
		if (frame.args[2] == "yes") or (mw.ustring.sub(frame.args[1],-1) == "+") then
			-- Round down
			return_value = string.format("%s+", mw.getContentLanguage():formatNum(math.floor( (count / 10^(f)) ) * (10^(f))) )
		else
			-- Round to nearest
			return_value = string.format("approximately&#x20;%s", 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 = string.format("%s&#x20;pages, or roughly %s%% of all", return_value, percent)
		end	
	end
	
	return return_value
end
-- Actions if there is a large (greater than or equal to 100,000) transclusion count
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

function p.text(frame, count)
	-- Only show the information about how this template gets updated if someone
	-- is actually editing the page and maybe trying to update the count.
	local bot_text = (frame:preprocess("{{REVISIONID}}") == "") and "\n\n----\n'''Preview message''': Transclusion count updated automatically ([[Template:High-use/doc#Technical details|see documentation]]</small>)." or ''
	
	if count == nil then count = _fetch(frame) end
	local title = mw.title.getCurrentTitle()
	if title.subpageText == "doc" or title.subpageText == "sandbox" then
		title = title.basePageTitle
	end
	
	local systemMessages = frame.args['system']
	if frame.args['system'] == '' then
		systemMessages = nil
	end
		
	local templateCount = ('on [https://templatecount.toolforge.org/index.php?lang=en&namespace=%s&name=%s %s pages].'):format(
		mw.title.getCurrentTitle().namespace, mw.uri.encode(title.text), p.num(frame, count))
	local used_on_text = "'''This " .. (mw.title.getCurrentTitle().namespace == 828 and "Lua module" or "template") .. ' is used ';
	if systemMessages then
		used_on_text = used_on_text .. ' in ' .. systemMessages ..
			((count > 2000) and (",''' and " .. templateCount) or (".'''"))
	else
		used_on_text = used_on_text .. templateCount .. "'''"
	end
	
	
	local sandbox_text =  ("%s's [[%s/sandbox|/sandbox]] or [[%s/testcases|/testcases]] subpages, or in your own [[%s]]. "):format(
		(mw.title.getCurrentTitle().namespace == 828 and "module" or "template"),
		title.fullText, title.fullText,
		mw.title.getCurrentTitle().namespace == 828 and "Module:Sandbox|module sandbox" or "Wikipedia:User pages#SUB|user subpage"
	)
	
	if (systemMessages or frame.args[1] == "risk" or (count and count >= 100000) ) then
		local info = systemMessages and '<br/>Changes to it can cause immediate changes to the Wikipedia user interface.' or ''
		if frame.args["info"] and frame.args["info"] ~= "" then
			info = info .. "<br />" .. frame.args["info"]
		end
		sandbox_text = info .. '<br /> To avoid major disruption' ..
			(count and count >= 100000 and ' and server load' or '') ..
			', any changes should be tested in the ' .. sandbox_text ..
			'The tested changes can be added to this page in a single edit. '
	else
		sandbox_text = ' and changes may be widely noticed. Test changes in the ' .. sandbox_text
	end

	
	local discussion_text = systemMessages and 'Please discuss changes ' or 'Consider discussing changes '
	if frame.args["2"] and frame.args["2"] ~= "" and frame.args["2"] ~= "yes" then
		discussion_text = string.format("%sat [[%s]]", discussion_text, frame.args["2"])
	else
		discussion_text = string.format("%son the [[%s|talk page]]", discussion_text, title.talkPageTitle.fullText )
	end
	
	return used_on_text .. sandbox_text .. discussion_text .. " before implementing them." .. bot_text
end

function p.main(frame)
	local count = _fetch(frame)
	local return_value = ""
	local image = "[[File:Ambox warning yellow.svg|40px|alt=Warning|link=]]"
	local type_param = "style"
	if frame.args['system'] and frame.args['system'] ~= '' then
		image = "[[File:Ambox important.svg|40px|alt=Warning|link=]]"
		type_param = "content"
	elseif (frame.args[1] == "risk" or (count and count >= 100000)) then
		image = "[[File:Ambox warning orange.svg|40px|alt=Warning|link=]]"
		type_param = "content"
	end
	
	if frame.args["form"] == "editnotice" then
		return_value = frame:expandTemplate{
				title = 'editnotice',
				args = {
						["image"] = image,
						["text"] = p.text(frame, count),
						["expiry"] = (frame.args["expiry"] or "")
				}
		}
	else
		return_value = frame:expandTemplate{
				title = 'ombox',
				args = {
						["type"] = type_param,
						["image"] = image,
						["text"] = p.text(frame, count),
						["expiry"] = (frame.args["expiry"] or "")
				}
		}
	end
	
	return return_value
end

return p