<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Module%3AShortcut%2Fsandbox</id>
	<title>Module:Shortcut/sandbox - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Module%3AShortcut%2Fsandbox"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Module:Shortcut/sandbox&amp;action=history"/>
	<updated>2026-06-28T21:49:07Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=Module:Shortcut/sandbox&amp;diff=3237981&amp;oldid=prev</id>
		<title>imported&gt;SunAfterRain 来自 2020年10月17日 (六) 10:40</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Module:Shortcut/sandbox&amp;diff=3237981&amp;oldid=prev"/>
		<updated>2020-10-17T10:40:51Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Load required modules&lt;br /&gt;
local checkType = require(&amp;#039;libraryUtil&amp;#039;).checkType&lt;br /&gt;
local yesno = require(&amp;#039;Module:Yesno&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local parse = {}&lt;br /&gt;
parse.__index = parse&lt;br /&gt;
&lt;br /&gt;
function parse.new(config)&lt;br /&gt;
	local obj = {}&lt;br /&gt;
	obj.data = mw.loadData(config.data or &amp;#039;Module:Shortcut/config&amp;#039;)&lt;br /&gt;
	obj.styles = config.styles or &amp;#039;Template:Shortcut/styles.css&amp;#039;&lt;br /&gt;
	obj.frame = mw.getCurrentFrame()&lt;br /&gt;
	obj.template = config.istemplate or false&lt;br /&gt;
	setmetatable(obj, parse)&lt;br /&gt;
	return obj&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- shortcut 的繁簡轉換&lt;br /&gt;
function parse.getshortname(self)&lt;br /&gt;
	return self.frame:expandTemplate{&lt;br /&gt;
		title = &amp;quot;Lan&amp;quot;,&lt;br /&gt;
		args = {&lt;br /&gt;
			[&amp;quot;zh-hans&amp;quot;] = &amp;quot;快捷方式&amp;quot;,&lt;br /&gt;
			[&amp;quot;zh-hant&amp;quot;] = &amp;quot;捷徑&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function parse.message(self, msg, ...)&lt;br /&gt;
	return mw.message.newRawMessage(msg, ...):plain()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- 生成錯誤訊息&lt;br /&gt;
function parse.errormsg(self, msg)&lt;br /&gt;
	return require(&amp;#039;Module:Error&amp;#039;).error{[1] = &amp;#039;[[Module:Shortcut]]錯誤：&amp;#039; .. msg}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- 主要段&lt;br /&gt;
function parse.box(self, shortcuts, args, ismobox, istemplate, extcfg)&lt;br /&gt;
	checkType(&amp;#039;_main&amp;#039;, 1, shortcuts, &amp;#039;table&amp;#039;)&lt;br /&gt;
	checkType(&amp;#039;_main&amp;#039;, 2, args, &amp;#039;table&amp;#039;, true)&lt;br /&gt;
	frame = mw.getCurrentFrame()&lt;br /&gt;
	if args then else&lt;br /&gt;
		return errormsg(&amp;#039;args丟失&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local function cfg (msg)&lt;br /&gt;
		local cfg = {}&lt;br /&gt;
		-- 外部值&lt;br /&gt;
		for k,v in ipairs(extcfg) do&lt;br /&gt;
			cfg[k] = v&lt;br /&gt;
		end&lt;br /&gt;
		-- 外部值缺失時由本地值補（無外部值時也是調用本地值）&lt;br /&gt;
		if cfg[msg] then else&lt;br /&gt;
			for k,v in ipairs(localcfg) do&lt;br /&gt;
				cfg[k] = v&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return cfg[msg]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
	-- 測試捷徑是否有效&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		if type(shortcut) ~= &amp;#039;string&amp;#039; or #shortcut &amp;lt; 1 then&lt;br /&gt;
			error(message(cfg[&amp;#039;invalid-shortcut-error&amp;#039;], i), 2)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- 生成捷徑列表&lt;br /&gt;
	local listItems = {}&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		if istemplate then&lt;br /&gt;
			-- 模板專用&lt;br /&gt;
			local subst = &amp;#039;&amp;#039;&lt;br /&gt;
			if args.subst then&lt;br /&gt;
				subst = &amp;#039;[[Help:替换引用|subst]]:&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			listItems[i] = &amp;#039;&amp;amp;#123;&amp;amp;#123;&amp;#039;.. subst .. frame:expandTemplate{&lt;br /&gt;
				title = &amp;#039;Template_shortcut/link&amp;#039;,&lt;br /&gt;
				args = {shortcut}&lt;br /&gt;
			}..&amp;#039;&amp;amp;#125;&amp;amp;#125;&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			-- 一般&lt;br /&gt;
			listItems[i] = frame:expandTemplate{&lt;br /&gt;
				title = &amp;#039;No redirect&amp;#039;,&lt;br /&gt;
				args = {shortcut}&lt;br /&gt;
			}&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(listItems, (args.msg or &amp;#039;&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
	-- 測試捷徑、參數msg是否存在&lt;br /&gt;
	if #listItems &amp;lt; 1 then&lt;br /&gt;
		local msg = errormsg(cfg[&amp;#039;no-content-error&amp;#039;])&lt;br /&gt;
		if yesno(args.category,1) then&lt;br /&gt;
			msg = msg .. makeCategoryLink(cfg[&amp;#039;no-content-error-category&amp;#039;])&lt;br /&gt;
		end&lt;br /&gt;
		return msg&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
	root:wikitext(frame:extensionTag{ name = &amp;#039;templatestyles&amp;#039;, args = { src = &amp;#039;Shortcut/styles.css&amp;#039;} })&lt;br /&gt;
	-- Anchors&lt;br /&gt;
	local anchorDiv = root:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;shortcut-anchordiv&amp;#039;)&lt;br /&gt;
	for i, shortcut in ipairs(shortcuts) do&lt;br /&gt;
		local anchor = mw.uri.anchorEncode(shortcut)&lt;br /&gt;
		if istemplate then&lt;br /&gt;
			anchorDiv:tag(&amp;#039;span&amp;#039;):attr(&amp;#039;id&amp;#039;, &amp;#039;Template:&amp;#039; .. anchor)&lt;br /&gt;
		else&lt;br /&gt;
			anchorDiv:tag(&amp;#039;span&amp;#039;):attr(&amp;#039;id&amp;#039;, anchor)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- 捷徑頂部&lt;br /&gt;
	local shortcutHeading&lt;br /&gt;
	do&lt;br /&gt;
		local nShortcuts = #shortcuts&lt;br /&gt;
		if nShortcuts &amp;gt; 0 then&lt;br /&gt;
			shortcutHeading = message(cfg[&amp;#039;shortlink&amp;#039;], nShortcuts)&lt;br /&gt;
			shortcutHeading = frame:preprocess(shortcutHeading)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	--檢測是否是方針（參數policy）&lt;br /&gt;
	if yesno(args.policy) then&lt;br /&gt;
	    shortcutHeading = cfg[&amp;#039;shortlink_policy&amp;#039;]&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- 生成邊框&lt;br /&gt;
	local shortcutList = &amp;#039;&amp;#039;&lt;br /&gt;
	if ismobox == 1 then&lt;br /&gt;
		-- ombox&lt;br /&gt;
		shortcutList = root&lt;br /&gt;
			:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;shortcutbox-ombox plainlist noprint&amp;#039;)&lt;br /&gt;
				:attr(&amp;#039;role&amp;#039;, &amp;#039;note&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		-- 一般&lt;br /&gt;
		shortcutList = root&lt;br /&gt;
			:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;shortcutbox plainlist noprint&amp;#039;)&lt;br /&gt;
				:attr(&amp;#039;role&amp;#039;, &amp;#039;note&amp;#039;)&lt;br /&gt;
		if args.float == &amp;#039;left&amp;#039; then&lt;br /&gt;
			-- 靠左&lt;br /&gt;
			shortcutList:addClass(&amp;#039;shortcutbox-left&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if shortcutHeading then&lt;br /&gt;
		shortcutList&lt;br /&gt;
			:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;shortcutlist&amp;#039;)&lt;br /&gt;
				:wikitext(shortcutHeading)&lt;br /&gt;
	end&lt;br /&gt;
	local list = shortcutList:tag(&amp;#039;ul&amp;#039;)&lt;br /&gt;
	for i, item in ipairs(listItems) do&lt;br /&gt;
		list:tag(&amp;#039;li&amp;#039;):wikitext(item)&lt;br /&gt;
	end&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function compressArray(t)&lt;br /&gt;
	local nums, ret = {}, {}&lt;br /&gt;
	for k in pairs(t) do&lt;br /&gt;
		nums[#nums + 1] = k&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(nums)&lt;br /&gt;
	for i, num in ipairs(nums) do&lt;br /&gt;
		ret[i] = t[num]&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
    &lt;br /&gt;
	-- Separate shortcuts from options&lt;br /&gt;
	local shortcuts, options = {}, {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		if type(k) == &amp;#039;number&amp;#039; then&lt;br /&gt;
			shortcuts[k] = v&lt;br /&gt;
		else&lt;br /&gt;
			options[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	ismobox = frame.args[&amp;#039;isombox&amp;#039;] and 1 or 0&lt;br /&gt;
	istemplate = frame.args[&amp;#039;istemplate&amp;#039;] and 1 or 0&lt;br /&gt;
	&lt;br /&gt;
	shortcuts = compressArray(shortcuts)&lt;br /&gt;
&lt;br /&gt;
	return p._main(shortcuts, options, ismobox, istemplate)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.shortcut(frame)&lt;br /&gt;
	local args = require(&amp;#039;Module:Arguments&amp;#039;).getArgs(frame, {&lt;br /&gt;
		wrappers = &amp;#039;Template:Shortcut&amp;#039;&lt;br /&gt;
	})&lt;br /&gt;
&lt;br /&gt;
	-- Separate shortcuts from options&lt;br /&gt;
	local shortcuts, options = {}, {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		if type(k) == &amp;#039;number&amp;#039; then&lt;br /&gt;
			shortcuts[k] = v&lt;br /&gt;
		else&lt;br /&gt;
			options[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	options.isombox = 0&lt;br /&gt;
	options.istemplate = 0&lt;br /&gt;
	&lt;br /&gt;
	shortcuts = compressArray(shortcuts)&lt;br /&gt;
&lt;br /&gt;
	return p._main(shortcuts, options, 0, 0)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;SunAfterRain</name></author>
	</entry>
</feed>