Module:Tt: Difference between revisions
Appearance
ReisuDesign (talk | contribs) No edit summary |
ReisuDesign (talk | contribs) No edit summary |
||
| Line 4: | Line 4: | ||
local args = require('Module:Arguments').getArgs(frame, { | local args = require('Module:Arguments').getArgs(frame, { | ||
parentFirst = true, | parentFirst = true, | ||
wrappers = { 'Template:Tt' } | wrappers = {'Template:Tt'} | ||
}) | }) | ||
| Line 11: | Line 11: | ||
if args.clean then | if args.clean then | ||
return p.CleanTT(args[1]) | return p.CleanTT(args[1]) | ||
end | |||
if not args[2] or mw.text.trim(args[2]) == '' then | |||
return args[1] | return args[1] | ||
end | end | ||
return p._main(args) | |||
end | end | ||
| Line 22: | Line 24: | ||
local tooltip = mw.text.decode(args[2], true) | local tooltip = mw.text.decode(args[2], true) | ||
local out = mw.html.create() | local out = mw.html.create('span') | ||
:addClass('custom-tt-wrapper') | |||
:addClass(args.class or '') | |||
local visibleText = text | |||
local | local cleanText = text | ||
-- | -- Handle explicit link parameter | ||
if args.link and mw.text.trim(tostring(args.link)) ~= '' then | if args.link and mw.text.trim(tostring(args.link)) ~= '' then | ||
local link = tostring(args.link) | local link = tostring(args.link) | ||
visibleText = '[[' .. | |||
(link == '1' and text or link) .. | |||
link == '1' and text or link | '|' .. | ||
'|' | text .. | ||
text | ']]' | ||
']]' | |||
cleanText = text | |||
-- Handle text that is already an internal link | |||
-- | |||
elseif text:find('%[%[') and text:find('%]%]') then | elseif text:find('%[%[') and text:find('%]%]') then | ||
visibleText = text | |||
cleanText = text | |||
:gsub('%[%[[^%]|]+|', '') | :gsub('%[%[[^%]|]+|', '') | ||
:gsub('%[%[', '') | :gsub('%[%[', '') | ||
:gsub('%]%]', '') | :gsub('%]%]', '') | ||
end | end | ||
-- Visible text | |||
out:wikitext(visibleText) | |||
-- Tooltip | -- 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 | -- Tooltip | ||
out:tag('span') | |||
:addClass('custom-tt-content') | |||
:wikitext(tooltip) | |||
return out | return out | ||
end | end | ||
function p.CleanTT(tx) | function p.CleanTT(tx) | ||
return tx:gsub( | |||
' | '<span class="custom%-tt%-wrapper[^>]*>.-</span>', | ||
' | '' | ||
) | ) | ||
end | end | ||
return p | return p | ||
Latest revision as of 22:40, 1 September 2026
| Main | Documentation | Usage |
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