本模块用来在页面侧边显示该页面的快捷方式。
用法
在维基文本中使用
如果要从wiki标记语法引入,本模板应当从某个模板进行调用,通常使用的模板为模板链接:{{shortcut}}。请参考该模板的文件说明。
用于Lua
如果要从Lua使用本模块,首先请读取本模板。
local Shortcut = require('Module:Shortcut')
然后您可以依据下列语法创建快捷方式方块:
Shortcut._main(args, frame, type)
- args 包含了该参数,其中的数组部分是快捷方式的页面。
- frame 框架对象。
- type 显示的捷径的类型,可以是
"ombox"
或nil
。
技术细节
本模块根本没有Module:Shortcut/config,不需要通过单独的模块来配置其内容。
-- This module implements {{shortcut}}.
-- Load required modules
local checkType = require('libraryUtil').checkType
local yesno = require('Module:Yesno')
local tools = require 'Module:TableTools'
local compressArray = tools.compressArray
local function noRedirect(page)
local isRedirect = require 'Module:Redirect'.luaIsRedirect(page)
if isRedirect then
return require 'Module:Fullurl'._fullurl2(page, {redirect='no'}, page)
else
return '[[:' .. page .. ']]'
end
end
local p = {}
function p._main(args, frame, type)
args = args or {}
frame = frame or mw.getCurrentFrame()
local isCategorized = not yesno(args.nocat)
-- 验证快捷方式是否有效。
for i, shortcut in tools.sparseIpairs(args) do
if _G.type(shortcut) ~= 'string' or #shortcut < 1 then
error('无效的快捷方式:“' .. tostring(shortcut) .. '”,请确保该参数必须是字符串且至少一个字符', 2)
end
end
local root = mw.html.create()
root:wikitext(frame:extensionTag{ name = 'templatestyles', args = {
src = type == 'mbox' and 'Template:Mbox/shortcut.css' or 'Shortcut/styles.css'
} })
-- Shortcut heading
local shortcutHeading = '[[Help:快捷方式|快捷方式]]'
if yesno(args.policy) then
shortcutHeading = '[[Help:快捷方式|方针快捷方式]]'
end
-- Shortcut box
local shortcutList = root
:tag('div')
:addClass('module-shortcutboxplain noprint')
:addClass(type == 'Mbox' and 'module-mboxshortcutplain' or nil)
:attr('role', 'note')
if args.float == 'left' then
shortcutList:addClass('module-shortcutboxplain-left')
end
if shortcutHeading then
shortcutList
:tag('div')
:addClass('module-shortcutlist')
:wikitext(shortcutHeading)
end
local list = shortcutList:tag('ul')
for i, shortcut in ipairs(args) do
list:tag('li'):wikitext(noRedirect(shortcut))
end
return tostring(root)
end
function p.main(frame)
local args = require('Module:Arguments').getArgs(frame)
return p._main(tools.shallowClone(args), frame)
end
function p._ombx(args, frame, type)
error '请直接使用_main方法而非_ombox,并将type参数设为 "mbox"'
end
-- @deprecated
function p.ombox(frame)
local args = require('Module:Arguments').getArgs(frame)
return p._main(tools.shallowClone(args), frame, 'mbox')
end
p.mbox = p.ombox
function p._template(args, frame, type)
error '请直接使_main(args, frame, type)而非_template'
end
function p.template(frame)
local args = require('Module:Arguments').getArgs(frame)
return p._main(tools.shallowClone(args), frame, 'template')
end
function p._ombx_template(args, frame, type)
error '请直接使用_main(args, frame, "mbox")而非_ombox_template'
end
-- @deprecated
function p.ombox_template(frame)
local args = require('Module:Arguments').getArgs(frame)
return p._main(args, frame, 'mbox')
end
p.mbox_template = p.ombox_template
return p