Module:按钮
来自久远澪Wiki
更多操作
此模块的文档可以在Module:按钮/doc创建
-- 按钮模板:生成带图标与文字标签的链接按钮(Template:按钮)
-- 使用 Lua 生成 <a> 标签,避免 MediaWiki 自动把 href 中的裸 URL 外链化。
local p = {}
local function isExternalUrl(url)
if not url then
return false
end
return url:match('^%s*https?://') ~= nil
or url:match('^%s*//') ~= nil
or url:match('^%s*ftp://') ~= nil
end
function p.render(frame)
local args = frame:getParent().args
local link = args['链接'] or ''
local external = args['外部链接'] or ''
local label = args['label'] or args['标签'] or ''
local icon = args['图标'] or ''
local image = args['图片'] or ''
local shape = args['形状'] or '圆角矩形'
local size = args['尺寸'] or '64'
local isExternal = (external ~= '') or isExternalUrl(link)
local html = mw.html.create('a')
html:addClass('wiki-button-anchor')
if isExternal then
html:attr('href', link)
:attr('target', '_blank')
:attr('rel', 'noopener noreferrer')
else
html:attr('href', frame:preprocess('{{fullurl:' .. link .. '}}'))
end
local button = html:tag('span')
button:addClass('wiki-button')
button:addClass('wiki-button-' .. shape)
local iconSpan = button:tag('span'):addClass('wiki-button-icon')
if image ~= '' then
iconSpan:wikitext(string.format('[[File:%s|%spx|link=]]', image, size))
elseif icon ~= '' then
iconSpan:tag('span'):addClass('wiki-button-emoji'):wikitext(icon)
end
button:tag('span'):addClass('wiki-button-label'):wikitext(label)
return tostring(html)
end
return p