Difference between revisions of "Module:High-use"

From "PTTLink Wiki"
Jump to navigation Jump to search
Mediawiki>Trappist the monk
m (1 revision imported)
Line 1: Line 1:
local p = {}
+
{{#invoke:High-use|main|1={{{1|}}}|2={{{2|}}}|all-pages={{{all-pages|}}}|info={{{info|}}}|demo={{{demo|}}}|form={{{form|}}}|expiry={{{expiry|}}}|system={{{system|}}}}}<noinclude>
 
+
{{Documentation}}
-- _fetch looks at the "demo" argument.
+
<!-- Add categories to the /doc subpage; interwiki links go to Wikidata, thank you! -->
local _fetch = require('Module:Transclusion_count').fetch
+
</noinclude>
local yesno = require('Module:Yesno')
 
 
 
function p.num(frame, count)
 
if count == nil then
 
if yesno(frame.args['fetch']) == false then
 
if (frame.args[1] or '') ~= '' then count = tonumber(frame.args[1]) end
 
else
 
count = _fetch(frame)
 
end
 
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 percentage of pages if that is likely to be >= 1% and when |no-percent= not set to yes
 
if count and count > 250000 and not yesno (frame:getParent().args['no-percent']) then
 
local percent = math.floor( ( (count/frame:callParserFunction('NUMBEROFPAGES', 'R') ) * 100) + 0.5)
 
if percent >= 1 then
 
return_value = string.format("%s&#x20;pages, or roughly %s%% of all", return_value, percent)
 
end
 
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]])." or ''
 
 
if count == nil then
 
if yesno(frame.args['fetch']) == false then
 
if (frame.args[1] or '') ~= '' then count = tonumber(frame.args[1]) end
 
else
 
count = _fetch(frame)
 
end
 
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 .. systemMessages ..
 
((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(
 
(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"
 
)
 
 
local infoArg = frame.args["info"] ~= "" and frame.args["info"]
 
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 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 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 = nil
 
if yesno(frame.args['fetch']) == false then
 
if (frame.args[1] or '') ~= '' then count = tonumber(frame.args[1]) end
 
else
 
count = _fetch(frame)
 
end
 
local image = "[[File:Ambox warning yellow.svg|40px|alt=Warning|link=]]"
 
local type_param = "style"
 
local epilogue = ''
 
if frame.args['system'] and frame.args['system'] ~= '' then
 
image = "[[File:Ambox important.svg|40px|alt=Warning|link=]]"
 
type_param = "content"
 
local nocat = frame:getParent().args['nocat'] or frame.args['nocat']
 
local categorise = (nocat == '' or not yesno(nocat))
 
if categorise then
 
epilogue = frame: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 (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 frame:expandTemplate{
 
title = 'editnotice',
 
args = {
 
["image"] = image,
 
["text"] = p.text(frame, count),
 
["expiry"] = (frame.args["expiry"] or "")
 
}
 
} .. epilogue
 
else
 
return require('Module:Message box').main('ombox', {
 
type = type_param,
 
image = image,
 
text = p.text(frame, count),
 
expiry = (frame.args["expiry"] or "")
 
}) .. epilogue
 
end
 
end
 
 
 
return p
 

Revision as of 23:10, 5 September 2021

Lua error at line 1: unexpected symbol near '{'.

Module documentationview · edit · history · purge ]
This documentation is transcluded from Module:High-use/doc.

Lua error at line 1: unexpected symbol near '{'.

Implements {{High-use}}. Uses bot-updated values from subpages of Module:Transclusion_count/data/ when available.

Usage

{{#invoke:High-use|main|1=number of transclusions|2=discussion page, or use + notation|all-pages=|info=|demo=|form=|expiry=}}

  • number of transclusions: The first parameter is either a static number of times the template has been transcluded, or the word "risk" (without quotes) to display "a very large number of" instead of the actual value. This value will be ignored if transclusion data is available for the current page.
  • discussion page, or use + notation: The second parameter is overloaded. It will cause the number of transclusions to display as "#,###+" instead of "approximately #,###" when set equal to "yes" (without quotes). When used in this manner, values will be rounded down, instead of rounded to the nearest number with the appropriate number of significant figures. When set to any other non-blank value, it will replace the link to the template's talk page to the value of the parameter (for example, 2=WP:VPT will insert a link to WP:VPT),
  • |all-pages=yes: Will also output what percentage of all pages use the template. This should only be used for very highly transcluded templates, and the percentage will only display if its greater than 1%.
  • |info=extra information: When set to non-blank, will insert extra information into the template text if the template has more than 10,000 transclusions or parameter 1 is set to "risk".
  • |demo=Template_name: Will use the transclusion count for the template at Template:Template_name instead of detecting what template it is being used on. Capitalization must exactly match the value used in Special:PrefixIndex/Module:Transclusion_count/data/.
  • |form=: When set to "editnotice", will display the message using {{editnotice}} instead of {{ombox}}.
  • |expiry=: Sets the |expiry= parameter for {{editnotice}}.
  • |system=in system messages: if set, this module looks like {{Used in system}}. Use that template directly as it performs some checks.
  • |fetch=: if set to false, the module will not attempt to fetch transclusion counts using Module:Transclusion count

The following are drop-in replacements for {{High-use/num}}, {{High-use/text}}, and {{High-use/risk}}, and take the same parameters: