Difference between revisions of "Module:High-use"
Jump to navigation
Jump to search
Module:Check_for_clobbered_parameters>Ahecht (Use Module:High-use) |
Module:Check_for_clobbered_parameters>Elli (this is passed as a string, so...) |
||
Line 1: | Line 1: | ||
− | { | + | local p = {} |
− | {{ | + | |
− | + | 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 %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 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) | ||
+ | local bot_text = "\n\n----\nTransclusion count updated automatically ([[Template:High-use/doc#Technical details|see documentation]])." | ||
+ | if frame.args["nobot"] == "true" then | ||
+ | bot_text = "" | ||
+ | end | ||
+ | |||
+ | if count == nil then count = _fetch(frame) end | ||
+ | local return_value = {} | ||
+ | |||
+ | local title = mw.title.getCurrentTitle() | ||
+ | if title.subpageText == "doc" or title.subpageText == "sandbox" then | ||
+ | title = title.basePageTitle | ||
+ | end | ||
+ | |||
+ | 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)) | ||
+ | |||
+ | 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 ", | ||
+ | (mw.title.getCurrentTitle().namespace == 828 and "module" or "template"), | ||
+ | title.fullText, title.fullText, | ||
+ | (mw.title.getCurrentTitle().namespace == 828 and "." or ", or in your own [[Wikipedia:Subpages#How to create user subpages|user subpage]].") | ||
+ | ) | ||
+ | |||
+ | if (frame.args[1] == "risk" or (count and count >= 100000) ) then | ||
+ | local info = "" | ||
+ | if frame.args["info"] and frame.args["info"] ~= "" then | ||
+ | info = "<br />" .. frame.args["info"] | ||
+ | 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. ", | ||
+ | info, sandbox_text | ||
+ | ) | ||
+ | else | ||
+ | sandbox_text = string.format(" and changes may be widely noticed. Test changes in the %s", | ||
+ | sandbox_text | ||
+ | ) | ||
+ | end | ||
+ | |||
+ | local discussion_text = "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 table.concat({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[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 |
Revision as of 15:51, 23 January 2021
Lua error: Internal error: The interpreter exited with status 127. Lua error: Internal error: The interpreter exited with status 127. Lua error: Internal error: The interpreter exited with status 127.
Implements {{High-use}}. Uses bot-updated values from subpages of Module:Transclusion_count/data/ when available.
Usage
{{#invoke:Lua error: Internal error: The interpreter exited with status 127.}}
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.|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}}.
The following are drop-in replacements for {{High-use/num}}, {{High-use/text}}, and {{High-use/risk}}, and take the same parameters:
{{#invoke:Lua error: Internal error: The interpreter exited with status 127.}}
{{#invoke:Lua error: Internal error: The interpreter exited with status 127.}}
{{#invoke:Lua error: Internal error: The interpreter exited with status 127.}}
Script error: Lua error: Internal error: The interpreter exited with status 127.
local p = {} 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 %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 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) local bot_text = "\n\n----\nTransclusion count updated automatically ([[Template:High-use/doc#Technical details|see documentation]])." if frame.args["nobot"] == "true" then bot_text = "" end if count == nil then count = _fetch(frame) end local return_value = {} local title = mw.title.getCurrentTitle() if title.subpageText == "doc" or title.subpageText == "sandbox" then title = title.basePageTitle end 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)) 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 ", (mw.title.getCurrentTitle().namespace == 828 and "module" or "template"), title.fullText, title.fullText, (mw.title.getCurrentTitle().namespace == 828 and "." or ", or in your own [[Wikipedia:Subpages#How to create user subpages|user subpage]].") ) if (frame.args[1] == "risk" or (count and count >= 100000) ) then local info = "" if frame.args["info"] and frame.args["info"] ~= "" then info = "<br />" .. frame.args["info"] 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. ", info, sandbox_text ) else sandbox_text = string.format(" and changes may be widely noticed. Test changes in the %s", sandbox_text ) end local discussion_text = "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 table.concat({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[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