Module:High-use#L-43

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----\nPreview message: Transclusion count updated automatically (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 /sandbox or /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 '.
Changes to it can cause immediate changes to the Wikipedia user interface.' or '.'

if infoArg then

info = info .. "
" .. infoArg

end

sandbox_text = info .. '
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 ('.
' .. 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 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"

local type_param = "style"

local epilogue = ''

if args['system'] and args['system'] ~= '' then

image = "File:Ambox important.svg"

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"

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