Module:Tt: Difference between revisions
ReisuDesign (talk | contribs) Created page with "local p = {} local lib = require('Module:Feature') 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]) -- Return plain text if tooltip return given elseif lib.isEmpty(args[2]) then return args[1] -- Return plain text if no tooltip given else return p._main(args) end end function p._m..." |
ReisuDesign (talk | contribs) No edit summary |
||
| Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
function p.main(frame) | function p.main(frame) | ||
| Line 7: | Line 6: | ||
wrappers = { 'Template:Tt' } | wrappers = { 'Template:Tt' } | ||
}) | }) | ||
args[1] = args[1] or '<i>Missing text</i>' | args[1] = args[1] or '<i>Missing text</i>' | ||
if args.clean then | if args.clean then | ||
return p.CleanTT(args[1]) | return p.CleanTT(args[1]) | ||
elseif | elseif not args[2] or args[2] == '' then | ||
return args[1] | return args[1] | ||
else | else | ||
return p._main(args) | return p._main(args) | ||
| Line 19: | Line 18: | ||
end | end | ||
function p._main(args | function p._main(args) | ||
local text = args[1] | local text = args[1] | ||
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() | ||
local toggle = out:tag('span') | |||
:addClass('custom-tt-wrapper') | |||
local toggle = out:tag('span'):addClass('custom-tt-wrapper | :addClass('giw-collapsible') | ||
:addClass(args.class or '') | |||
-- | |||
if | -- Make the text clickable if a link is provided, | ||
local link = tostring(args.link) | -- or if the text already contains a wiki link. | ||
toggle:wikitext('[[', | if args.link and args.link ~= '' or (text:find('%[%[') and text:find('%]%]')) then | ||
-- | local link = tostring(args.link or '') | ||
if link == '1' then | |||
toggle:wikitext( | |||
'[[', text, ']]' | |||
) | |||
elseif link ~= '' then | |||
toggle:wikitext( | |||
'[[', link, '|', text, ']]' | |||
) | |||
else | |||
toggle:wikitext(text) | |||
end | |||
toggle:wikitext(' ') | |||
-- Use an info icon when the text itself is clickable. | |||
local cleanText = text | |||
:gsub('%[%[?[^|%]]+|', '') | |||
:gsub('%[%[', '') | |||
:gsub('%]%]', '') | |||
text = | |||
'<span class="screen-reader-text">Tooltip for ' | |||
.. cleanText | |||
.. '</span>ⓘ' | |||
end | end | ||
toggle:attr('data-tt-text', text) | toggle:attr('data-tt-text', text) | ||
toggle | |||
-- Tooltip toggle | |||
toggle:tag('span') | |||
:addClass('mw-collapsible-toggle') | |||
:addClass('mw-collapsible-toggle-collapsed') | |||
toggle | :addClass('custom-tt') | ||
:wikitext(text) | |||
:done() | |||
-- Tooltip content | |||
toggle:tag('span') | |||
:addClass('mw-collapsible-content') | |||
:addClass('custom-tt') | |||
:css('display', 'none') | |||
:wikitext(tooltip) | |||
:done() | |||
out:wikitext('‍') | out:wikitext('‍') | ||
return out | return out | ||
end | end | ||
-- | -- Return the visible text without tooltip markup. | ||
function p.CleanTT(tx) | function p.CleanTT(tx) | ||
local clean = tx:gsub('‍<span class="custom%-tt%-wrapper[^>]-data%-tt%-text="(.-)">.-‍', '%1' | local clean = tx:gsub( | ||
'‍<span class="custom%-tt%-wrapper[^>]-data%-tt%-text="(.-)">.-‍', | |||
'%1' | |||
) | |||
return clean | return clean | ||
end | end | ||
return p | return p | ||