跳转到内容
打开/关闭菜单
  • 5 条目
  • 3 文件
  • 13 用户
  • 619 编辑
久远澪Wiki
打开/关闭外观设置菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

Module:按钮

来自久远澪Wiki
DoubleCircle留言 | 贡献2026年8月25日 (二) 18:28的版本 ("按钮模板改用 Lua 模块生成链接,修复 <a> 标签不被解析导致的 href 外链化问题")
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

此模块的文档可以在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', mw.util.getUrl(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