Module:Tt/Draft: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
adding in optional headers to support extra effect (so they can be individually styled) and changing "title"-style hovertext to css. my god this cleanTT is kind of terrible |
||
| Line 38: | Line 38: | ||
:wikitext(text) | :wikitext(text) | ||
-- Optional hover text but plain text must be there for gadget | -- Optional hover text but plain text must be there for gadget | ||
if not options or not options.nohover then hover: | -- Now uses a css box, not a title | ||
if not options or not options.nohover then | |||
local content = hover:tag('span'):addClass('tt-content') | |||
if header then | |||
content:tag('span'):addClass('tt-header'):wikitext(header) | |||
:done() | |||
end | |||
content:wikitext(tooltip) | |||
content:done() | |||
end | |||
hover:allDone() | hover:allDone() | ||
-- Build toggle tooltip | -- Build toggle tooltip | ||
local toggle = out:tag('span'):addClass('custom-tt-wrapper mobile-only toggle-tooltip') | local toggle = out:tag('span'):addClass('custom-tt-wrapper mobile-only toggle-tooltip') | ||
-- Optional toggleable text but plain text must be there for gadget | -- Optional toggleable text but plain text must be there for gadget | ||
if not options or not options.notoggle then | if not options or not options.notoggle then | ||
| Line 59: | Line 68: | ||
:wikitext(text) | :wikitext(text) | ||
:done() | :done() | ||
toggle | local collapsibleContent = toggle | ||
:tag('span') | :tag('span') | ||
:addClass('mw-collapsible-content custom-tt') | :addClass('mw-collapsible-content custom-tt') | ||
| Line 65: | Line 74: | ||
:wikitext(tooltip) | :wikitext(tooltip) | ||
:done() | :done() | ||
if header then | |||
collapsibleContent | |||
:tag('span') | |||
:addClass('tt-header') | |||
:wikitext(header) | |||
:done() | |||
end | |||
collapsibleContent:wikitext(tooltip) | |||
collapsibleContent:done() | |||
else | else | ||
toggle:wikitext(text) | toggle:wikitext(text) | ||
| Line 77: | Line 95: | ||
local full = tx | local full = tx | ||
local result = tx | local result = tx | ||
for tooltip, display in string.gmatch(full, '<span[^>]+title="([^>]-)">(.-)</span>') do | for tooltip, display in string.gmatch(full, '<span[^>]+title="([^>]-)">(.-)</span>') do | ||
local escTooltip = tooltip:gsub("([^%w])", "%%%1") | local escTooltip = tooltip:gsub("([^%w])", "%%%1") | ||
Revision as of 12:36, 15 July 2026
Documentation for this module may be created at Module:Tt/Draft/doc
local p = {}
local lib = require('Module:Feature')
function p.main(frame)
local args = require('Module:Arguments').getArgs(frame, {
parentFirst = true,
wrappers = { 'Template:Tt', 'Template:Tt/Draft' }
})
args[1] = args[1] or '<i>Missing text</i>'
-- Return plain text if no tooltip given
if lib.isEmpty(args[2]) then
return args[1]
end
return p._main(args)
end
function p._main(args, options)
local text = args[1]
local tooltip = mw.text.decode(args[2], true)
local header = lib.isNotEmpty(args.header) and mw.text.decode(args.header, true) or nil
local out = mw.html.create()
--check for link format
if lib.isNotEmpty(args.link) then
local link = tostring(args.link)
args.link = nil
local base = tostring(p._main(args, {notoggle = true})) -- tt on label for hover as otherwise the <a> default title takes priority
local linkTo = '[[' .. lib.ternary(link == '1', text, link) .. '|' .. base .. ']]'
return p._main({ linkTo, args[2], header = args.header }, {nohover = true}) -- external tt for collapsible for the separated clickable
end
-- Build hover tooltip
local hover = out:tag('span')
hover
:addClass('text-tooltip hover-tooltip')
:wikitext(text)
-- Optional hover text but plain text must be there for gadget
-- Now uses a css box, not a title
if not options or not options.nohover then
local content = hover:tag('span'):addClass('tt-content')
if header then
content:tag('span'):addClass('tt-header'):wikitext(header)
:done()
end
content:wikitext(tooltip)
content:done()
end
hover:allDone()
-- Build toggle tooltip
local toggle = out:tag('span'):addClass('custom-tt-wrapper mobile-only toggle-tooltip')
-- Optional toggleable text but plain text must be there for gadget
if not options or not options.notoggle then
toggle:addClass(' mw-collapsible mw-made-collapsible mw-collapsed hnaw-collapsible')
-- move tooltip to detached icon when text is clickable
if lib.isNotEmpty(args.link) or (text:find('%[%[') and text:find('%]%]')) then
toggle:wikitext(text, ' ')
-- infoicon with semi-hidden text for screen readers
text = '<span class="screen-reader-text">Tooltip for ' .. text:gsub('%[%[?[^|%]]+|', ''):gsub('%[', ''):gsub('%]', '') .. '</span>ⓘ'
end
toggle
:tag('span')
:addClass('mw-collapsible-toggle mw-collapsible-toggle-default mw-collapsible-toggle-collapsed custom-tt toggle-tooltip')
:wikitext(text)
:done()
local collapsibleContent = toggle
:tag('span')
:addClass('mw-collapsible-content custom-tt')
:css{ display = 'none' }
:wikitext(tooltip)
:done()
if header then
collapsibleContent
:tag('span')
:addClass('tt-header')
:wikitext(header)
:done()
end
collapsibleContent:wikitext(tooltip)
collapsibleContent:done()
else
toggle:wikitext(text)
end
toggle:allDone()
return out
end
--for modules that need the plain text input
function p.CleanTT(tx)
local full = tx
local result = tx
for tooltip, display in string.gmatch(full, '<span[^>]+title="([^>]-)">(.-)</span>') do
local escTooltip = tooltip:gsub("([^%w])", "%%%1")
local escDisplay = display:gsub("([^%w])", "%%%1")
search_str = '<span[^>]+title="' .. escTooltip .. '">(' .. escDisplay .. ')</span><span[^>]+><span[^>]+>' .. escDisplay .. '</span><span[^>]+>' .. escTooltip .. '</span></span>'
result = result:gsub(search_str, display)
end
return result
end
return p