模块:High-use:修订间差异

来自悠日計画 維基百科 ~ Yuuni Wiki
Comma should not be bolded (via CAE)
 
現時Template:Namespace pagename並非由模組提供,況且模組有一些缺陷...
第1行: 第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
local yesno = require('Module:Yesno')
local nspn = mw.getCurrentFrame():preprocess('{{Namespace pagename}}')
local _separated_entries = require('Module:Separated entries').main


function p.num(frame, count)
function p.num(frame, count)
if count == nil then
if count == nil then count = _fetch(frame) end
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
-- Build output string
第18行: 第12行:
if count == nil then
if count == nil then
if frame.args[1] == "risk" then
if frame.args[1] == "risk" then
return_value = "a very large number of"
return_value = "大量頁面"
else
else
return_value = "many"
return_value = "許多頁面"
end
end
else
else
第35行: 第29行:
if (frame.args[2] == "yes") or (mw.ustring.sub(frame.args[1],-1) == "+") then
if (frame.args[2] == "yes") or (mw.ustring.sub(frame.args[1],-1) == "+") then
-- Round down
-- Round down
return_value = string.format("%s+", mw.getContentLanguage():formatNum(math.floor( (count / 10^(f)) ) * (10^(f))) )
return_value = string.format("%s+個頁面", mw.getContentLanguage():formatNum(math.floor( (count / 10^(f)) ) * (10^(f))) )
else
else
-- Round to nearest
-- Round to nearest
return_value = string.format("approximately %s", mw.getContentLanguage():formatNum(math.floor( (count / 10^(f)) + 0.5) * (10^(f))) )
return_value = string.format("%s個頁面", mw.getContentLanguage():formatNum(math.floor( (count / 10^(f)) + 0.5) * (10^(f))) )
end
end
 
-- Insert percentage of pages if that is likely to be >= 1% and when |no-percent= not set to yes
-- Insert percent of pages
if count and count > 250000 and not yesno (frame:getParent().args['no-percent']) then
if frame.args["all-pages"] and frame.args["all-pages"] ~= "" then
local percent = math.floor( ( (count/frame:callParserFunction('NUMBEROFPAGES', 'R') ) * 100) + 0.5)
local percent = math.floor( ( (count/frame:callParserFunction('NUMBEROFPAGES', 'R') ) * 100) + 0.5)
if percent >= 1 then
return_value = string.format("%s,佔全部頁面的%s%%", return_value, percent)
return_value = string.format("%s pages, or roughly %s%% of all", return_value, percent)
end
end
end
end
end
第65行: 第57行:


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----\n<small>模板引用數量會自動更新。</small>"
-- 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]])." or ''
bot_text = ""
end
if count == nil then
if count == nil then count = _fetch(frame) end
if yesno(frame.args['fetch']) == false then
local return_value = {}
if (frame.args[1] or '') ~= '' then count = tonumber(frame.args[1]) end
else
local title = mw.title.getCurrentTitle()
count = _fetch(frame)
local isdemo = false
end
if frame.args["demo"] and frame.args["demo"] ~= "" then
isdemo = true
title = mw.title.new(frame.args["demo"], "Template")
end
end
local title = mw.title.getCurrentTitle()
if title.subpageText == "doc" or title.subpageText == "sandbox" or title.subpageText == "testcases" then
if title.subpageText == "doc" or title.subpageText == "sandbox" then
title = title.basePageTitle
title = title.basePageTitle
end
end
local templatecount = string.format("https://templatecount.toolforge.org/index.php?lang=zh&namespace=%s&name=%s", title.namespace,mw.uri.encode(title.text))
local systemMessages = frame.args['system']
local used_on_text = string.format("'''%s被引用於[%s %s]'''",
if frame.args['system'] == '' then
(isdemo and "[["..title.fullText.."]]") or ("此"..nspn),
systemMessages = nil
templatecount,
end
p.num(frame, count)
)
local sandbox_text = _separated_entries({
string.format("[[%s/sandbox|'''沙盒''']]", title.fullText),
string.format("[[%s/testcases|'''測試樣例''']]", title.fullText),
(title.namespace == 828 and "" or "[[Special:Mypage/沙盒|'''您的沙盒''']]"),
separator="、",
conjunction="或"
})
-- This retrieves the project URL automatically to simplify localiation.
local info = ""
local templateCount = ('on [https://linkcount.toolforge.org/index.php?project=%s&page=%s %s pages]'):format(
if frame.args["info"] and frame.args["info"] ~= "" then
mw.title.getCurrentTitle():fullUrl():gsub('//(.-)/.*', '%1'),
info = "<br />" .. frame.args["info"]
mw.uri.encode(title.fullText), 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
end
sandbox_text = string.format("%s<br /><small>為了避免造成大規模的影響,所有對此%s的編輯應先於%s上測試。</small>",
info, nspn, sandbox_text
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"]
local discussion_text = string.format("<br /><small>測試後無誤的版本可以一次性地加入此%s中,但是修改前請務必於", nspn)
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
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("%s'''[[%s]]'''", discussion_text, frame.args["2"])
else
else
discussion_text = string.format("%son the [[%s|talk page]]", discussion_text, title.talkPageTitle.fullText )
discussion_text = string.format("%s[[%s|'''討論頁''']]", discussion_text, title.talkPageTitle.fullText )
end
end
return used_on_text .. sandbox_text .. discussion_text .. " before implementing them." .. bot_text
return table.concat({used_on_text, sandbox_text, discussion_text, "發起討論。</small>", bot_text})
end
end


function p.main(frame)
function p.main(frame)
local count = nil
local count = _fetch(frame)
if yesno(frame.args['fetch']) == false then
local return_value = ""
if (frame.args[1] or '') ~= '' then count = tonumber(frame.args[1]) end
local image = "[[File:Dialog-warning-yellow.svg|64px|alt=Warning|link=]]"
else
count = _fetch(frame)
end
local image = "[[File:Ambox warning yellow.svg|40px|alt=Warning|link=]]"
local type_param = "style"
local type_param = "style"
local epilogue = ''
if (frame.args[1] == "risk" or (count and count >= 100000) ) then
if frame.args['system'] and frame.args['system'] ~= '' then
image = "[[File:Dialog-warning-orange.svg|64px|alt=Warning|link=]]"
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"
type_param = "content"
end
end
if frame.args["form"] == "editnotice" then
if frame.args["form"] == "editnotice" then
return frame:expandTemplate{
return_value = frame:expandTemplate{
title = 'editnotice',
title = 'editnotice',
args = {
args = {
第162行: 第127行:
["expiry"] = (frame.args["expiry"] or "")
["expiry"] = (frame.args["expiry"] or "")
}
}
} .. epilogue
}
else
else
return require('Module:Message box').main('ombox', {
return_value = frame:expandTemplate{
type = type_param,
title = 'ombox',
image = image,
args = {
text = p.text(frame, count),
["type"] = type_param,
expiry = (frame.args["expiry"] or "")
["image"] = image,
}) .. epilogue
["text"] = p.text(frame, count),
["expiry"] = (frame.args["expiry"] or "")
}
}
end
end
return return_value
end
end


return p
return p

2022年6月22日 (三) 11:58的版本

<templatestyles src="Module:Message box/ombox.css"></templatestyles>

<templatestyles src="Module:Message box/ombox.css"></templatestyles>

<templatestyles src="Module:Message box/ombox.css"></templatestyles>

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:



local p = {}

local _fetch = require('Module:Transclusion_count').fetch
local nspn = mw.getCurrentFrame():preprocess('{{Namespace pagename}}')
local _separated_entries = require('Module:Separated entries').main

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 = "大量頁面"
		else
			return_value = "許多頁面"
		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("約%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,佔全部頁面的%s%%", 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----\n<small>模板引用數量會自動更新。</small>"
	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()
	local isdemo = false
	if frame.args["demo"] and frame.args["demo"] ~= "" then
		isdemo = true
		title = mw.title.new(frame.args["demo"], "Template")
	end
	if title.subpageText == "doc" or title.subpageText == "sandbox" or title.subpageText == "testcases" then
		title = title.basePageTitle
	end

	local templatecount = string.format("https://templatecount.toolforge.org/index.php?lang=zh&namespace=%s&name=%s", title.namespace,mw.uri.encode(title.text))
	
	local used_on_text = string.format("'''%s被引用於[%s %s]'''",
			(isdemo and "[["..title.fullText.."]]") or ("此"..nspn),
			templatecount,
			p.num(frame, count)
	)
	
	local sandbox_text = _separated_entries({
		string.format("[[%s/sandbox|'''沙盒''']]", title.fullText),
		string.format("[[%s/testcases|'''測試樣例''']]", title.fullText),
		(title.namespace == 828 and "" or "[[Special:Mypage/沙盒|'''您的沙盒''']]"),
		separator="、",
		conjunction="或"
	})
	
	local info = "" 
	if frame.args["info"] and frame.args["info"] ~= "" then
		info = "<br />" .. frame.args["info"]
	end
	sandbox_text = string.format("。%s<br /><small>為了避免造成大規模的影響,所有對此%s的編輯應先於%s上測試。</small>",
			info, nspn, sandbox_text
	)
	
	local discussion_text = string.format("<br /><small>測試後無誤的版本可以一次性地加入此%s中,但是修改前請務必於", nspn)
	if frame.args["2"] and frame.args["2"] ~= "" and frame.args["2"] ~= "yes" then
		discussion_text = string.format("%s'''[[%s]]'''", discussion_text, frame.args["2"])
	else
		discussion_text = string.format("%s[[%s|'''討論頁''']]", discussion_text, title.talkPageTitle.fullText )
	end
	
	return table.concat({used_on_text, sandbox_text, discussion_text, "發起討論。</small>", bot_text})
end

function p.main(frame)
	local count = _fetch(frame)
	local return_value = ""
	local image = "[[File:Dialog-warning-yellow.svg|64px|alt=Warning|link=]]"
	local type_param = "style"
	if (frame.args[1] == "risk" or (count and count >= 100000) ) then
		image = "[[File:Dialog-warning-orange.svg|64px|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