Module:Tt

Revision as of 22:40, 1 September 2026 by ReisuDesign (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Module documentation

This module implements {{Tt}}.

local p = {}

function p.main(frame)
	local args = require('Module:Arguments').getArgs(frame, {
		parentFirst = true,
		wrappers = {'Template:Tt'}
	})

	args[1] = args[1] or '<i>Missing text</i>'

	if args.clean then
		return p.CleanTT(args[1])
	end

	if not args[2] or mw.text.trim(args[2]) == '' then
		return args[1]
	end

	return p._main(args)
end

function p._main(args)
	local text = args[1]
	local tooltip = mw.text.decode(args[2], true)

	local out = mw.html.create('span')
		:addClass('custom-tt-wrapper')
		:addClass(args.class or '')

	local visibleText = text
	local cleanText = text

	-- Handle explicit link parameter
	if args.link and mw.text.trim(tostring(args.link)) ~= '' then
		local link = tostring(args.link)

		visibleText = '[[' ..
			(link == '1' and text or link) ..
			'|' ..
			text ..
			']]'

		cleanText = text

	-- Handle text that is already an internal link
	elseif text:find('%[%[') and text:find('%]%]') then
		visibleText = text

		cleanText = text
			:gsub('%[%[[^%]|]+|', '')
			:gsub('%[%[', '')
			:gsub('%]%]', '')
	end

	-- Visible text
	out:wikitext(visibleText)

	-- Tooltip trigger
	local trigger = out:tag('span')
		:addClass('custom-tt-trigger')
		:attr('tabindex', '0')
		:attr('role', 'button')
		:attr('aria-label', 'Tooltip for ' .. cleanText)
		:wikitext('ⓘ')

	-- Tooltip
	out:tag('span')
		:addClass('custom-tt-content')
		:wikitext(tooltip)

	return out
end

function p.CleanTT(tx)
	return tx:gsub(
		'<span class="custom%-tt%-wrapper[^>]*>.-</span>',
		''
	)
end

return p