Anonymous
    ×
    Create a new article
    Write your page title here:
    We currently have 187 articles on Edge of Twilight Wiki. Type your article name above or click on one of the titles below and start writing!



    Edge of Twilight Wiki
    Revision as of 13:06, 8 September 2025 by User (talk | contribs) (1 revision imported)
    (diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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

    local p = {}
    local getArgs = require('Module:Arguments').getArgs
    
    -- _fetch looks at the "demo" argument.
    local _fetch = require('Module:Transclusion_count')._fetch
    local yesno = require('Module:Yesno')
    
    function p._num(args, count, no_percent)
    	if count == nil then
    		if yesno(args['fetch']) == false then
    			if (args[1] or '') ~= '' then count = tonumber(args[1]) end
    		else
    			count = _fetch(args)
    		end
    	end
    	
    	-- Build output string
    	local return_value = ""
    	if count == nil then
    		if args[1] == "risk" then
    			return "a very large number of"
    		else
    			return "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 (args[2] == "yes") or (type(args[1]) == 'string' and (mw.ustring.sub(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 %s", mw.getContentLanguage():formatNum(math.floor( (count / 10^(f)) + 0.5) * (10^(f))) )
    		end
    
    		-- Insert percentage of pages if that is likely to be >= 1% and when |no-percent= not set to yes
    		no_percent = no_percent or args['no-percent']
    		if count and count > 250000 and not yesno (no_percent) then
    			local numpages = mw.getCurrentFrame():callParserFunction('NUMBEROFPAGES', 'R')
    			local percent = math.floor( ( ( count/numpages ) * 100) + 0.5)
    			if percent >= 1 then
    				return_value = string.format("%s pages, or roughly %s%% of all", return_value, percent)
    			end
    		end	
    	end
    	
    	return return_value
    end
    
    function p.num(frame, count)
    	return p._num(getArgs(frame), count)
    end
    
    -- Actions if there is a large (greater than or equal to 100,000) transclusion count
    function p._risk(args)
    	if args[1] == "risk" then
    		return "risk"
    	else
    		local count = _fetch(args)
    		if count and count >= 100000 then
    			return "risk"
    		end
    	end
    	return ""
    end
    
    function p.risk(frame)
    	return p._risk(getArgs(frame))
    end
    
    function p._text(args, 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 = (mw.getCurrentFrame():preprocess("{{REVISIONID}}") == "") and "\n\n----\n'''Preview message''': Transclusion count updated automatically ([[Template:High-use/doc#Technical details|see documentation]])." or ''
    	
    	if count == nil then
    		if yesno(args['fetch']) == false then
    			if (args[1] or '') ~= '' then count = tonumber(args[1]) end
    		else
    			count = _fetch(args)
    		end
    	end
    	local title = mw.title.getCurrentTitle()
    	if ( (args.demo or '' ~= '') and mw.title.new(args.demo, 10) ) then
    		title = mw.title.new(args.demo, 10)
    	end
    
    	if title.subpageText == "doc" or title.subpageText == "sandbox" then
    		title = title.basePageTitle
    	end
    	
    	local systemMessages = (args['system'] or '') ~= ''
    	
    	-- This retrieves the project URL automatically to simplify localization.
    	local templateCount = ('on [https://linkcount.toolforge.org/?project=%s&page=%s#transclusions %s pages]'):format(
    		title:fullUrl():gsub('//(.-)/.*', '%1'),
    		mw.uri.encode(title.fullText), p._num(args, count))
    	local used_on_text = "'''This " .. (title.namespace == 828 and "Lua module" or "template") .. ' is used ';
    	if systemMessages then
    		used_on_text = used_on_text .. args['system'] ..
    			((count and 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(
    		(title.namespace == 828 and "module" or "template"),
    		title.fullText, title.fullText,
    		title.namespace == 828 and "Module:Sandbox|module sandbox" or "Wikipedia:User pages#SUB|user subpage"
    	)
    	
    	local infoArg = args["info"] ~= "" and args["info"]
    	if (systemMessages or 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 infoArg then
    			info = info .. "<br />" .. infoArg
    		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 = (infoArg and ('.<br />' .. infoArg .. ' C') or ' and c') ..
    			'hanges may be widely noticed. Test changes in the ' .. sandbox_text
    	end
    
    	
    	local discussion_text = systemMessages and 'Please discuss changes ' or 'Consider discussing changes '
    	if args["2"] and args["2"] ~= "" and args["2"] ~= "yes" then
    		discussion_text = string.format("%sat [[%s]]", discussion_text, 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.text(frame, count)
    	return p._text(getArgs(frame), count)
    end
    
    function p._main(args, nocat)
    	local count = nil
    	if yesno(args['fetch']) == false then
    		if (args[1] or '') ~= '' then count = tonumber(args[1]) end
    	else
    		count = _fetch(args)
    	end
    	local image = "[[File:Ambox warning yellow.svg|40px|alt=Warning|link=]]"
    	local type_param = "style"
    	local epilogue = ''
    	if args['system'] and args['system'] ~= '' then
    		image = "[[File:Ambox important.svg|40px|alt=Warning|link=]]"
    		type_param = "content"
    		nocat = nocat or args['nocat']
    		local categorise = (nocat == '' or not yesno(nocat))
    		if categorise and not mw.title.getCurrentTitle().isRedirect then
    			epilogue = mw.getCurrentFrame():preprocess('{{Sandbox other||{{#switch:{{#invoke:Effective protection level|{{#switch:{{NAMESPACE}}|File=upload|#default=edit}}|{{FULLPAGENAME}}}}|sysop|templateeditor|interfaceadmin=|#default=[[Category:Pages used in system messages needing protection]]}}}}')
    		end
    	elseif (args[1] == "risk" or (count and count >= 100000)) then
    		image = "[[File:Ambox warning orange.svg|40px|alt=Warning|link=]]"
    		type_param = "content"
    	end
    	
    	if args["form"] == "editnotice" then
    		return mw.getCurrentFrame():expandTemplate{
    				title = 'editnotice',
    				args = {
    						["image"] = image,
    						["text"] = p._text(args, count),
    						["expiry"] = (args["expiry"] or "")
    				}
    		} .. epilogue
    	else
    		return require('Module:Message box').main('ombox', {
    			type = type_param,
    			image = image,
    			text = p._text(args, count),
    			expiry = (args["expiry"] or "")
    		}) .. epilogue
    	end
    end
    
    function p.main(frame)
    	return p._main(getArgs(frame))
    end
    return p