Module:Tt: Difference between revisions

m Protected "Module:Tt" ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite))
Kuhlau (talk | contribs)
No edit summary
(One intermediate revision by the same user not shown)
Line 5: Line 5:
local args = require('Module:Arguments').getArgs(frame, {
local args = require('Module:Arguments').getArgs(frame, {
parentFirst = true,
parentFirst = true,
wrappers = { 'Template:Tt' }
wrappers = { 'Template:Tt', 'Template:Tt/Draft' }
})
})
args[1] = args[1] or '<i>Missing text</i>'
args[1] = args[1] or '<i>Missing text</i>'
Line 14: Line 14:
end
end
     return p._main(args)
     return p._main(args, nil, frame)
end
end


function p._main(args, options)
function p._main(args, options, frame)
local text = args[1]
local text = args[1]
local tooltip = mw.text.decode(args[2], true)
local tooltip = mw.text.decode(args[2], true) or nil
local header = lib.isNotEmpty(args.header) and mw.text.decode(args.header, true) or nil
local class = lib.isNotEmpty(args.class) and args.class .. ' custom-tt-wrapper toggle-tooltip' or 'custom-tt-wrapper toggle-tooltip'
local out = mw.html.create()
local out = mw.html.create()
Line 26: Line 28:
local link = tostring(args.link)
local link = tostring(args.link)
args.link = nil
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 base = tostring(p._main(args, {notoggle = true}, frame)) -- tt on label for hover as otherwise the <a> default title takes priority
local linkTo = '[[' .. lib.ternary(link == '1', text, link) .. '|' .. base .. ']]'
local linkTo = '[[' .. lib.ternary(link == '1', text, link) .. '|' .. base .. ']]'
return p._main({ linkTo, args[2] }, {nohover = true}) -- external tt for collapsible for the separated clickable
return p._main({ linkTo, args[2], header = args.header, class = args.class }, {nohover = true}, frame) -- external tt for collapsible for the separated clickable
end
end
-- Build hover tooltip
-- preprocess tooltip text
local hover = out:tag('span')
if lib.isNotEmpty(tooltip) then
hover
tooltip = frame:preprocess(tooltip)
:addClass('text-tooltip hover-tooltip')
end
:wikitext(text)
-- Optional hover text but plain text must be there for gadget
if not options or not options.nohover then hover:attr('title', tooltip) end
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(class)
-- 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
toggle:addClass(' mw-collapsible mw-made-collapsible mw-collapsed giw-collapsible')
toggle:addClass(' mw-collapsible mw-made-collapsible mw-collapsed hnaw-collapsible')
-- move tooltip to detached icon when text is clickable
-- move tooltip to detached icon when text is clickable
if lib.isNotEmpty(args.link) or (text:find('%[%[') and text:find('%]%]')) then
if lib.isNotEmpty(args.link) or (text:find('%[%[') and text:find('%]%]')) then
Line 58: Line 56:
: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 mobileonly')
:css{ display = 'none' }
if header then
:wikitext(tooltip)
collapsibleContent
:done()
:tag('span')
:addClass('tt-header')
:wikitext(header)
:done()
end
collapsibleContent:wikitext(tooltip)
collapsibleContent:done()
else
else
toggle:wikitext(text)
toggle:wikitext(text)
Line 76: Line 80:
local full = tx
local full = tx
local result = tx
local result = tx
for tooltip, display in string.gmatch(full, '<span[^>]+title="([^>]-)">(.-)</span>') do
for display in string.gmatch(full,
local escTooltip = tooltip:gsub("([^%w])", "%%%1")
'<span[^>]*class="[^"]*custom%-tt%-wrapper[^"]*"[^>]*>' ..
'<span[^>]*class="[^"]*mw%-collapsible%-toggle[^"]*"[^>]*>(.-)</span>' ..
'<span[^>]*class="[^"]*mw%-collapsible%-content[^"]*"[^>]*>.-</span></span>'
) do
local escDisplay = display:gsub("([^%w])", "%%%1")
local escDisplay = display:gsub("([^%w])", "%%%1")
search_str = '<span[^>]+title="' .. escTooltip .. '">(' .. escDisplay .. ')</span><span[^>]+><span[^>]+>' .. escDisplay .. '</span><span[^>]+>' .. escTooltip .. '</span></span>'
local search_str =
'<span[^>]*class="[^"]*custom%-tt%-wrapper[^"]*"[^>]*>' ..
'<span[^>]*class="[^"]*mw%-collapsible%-toggle[^"]*"[^>]*>' .. escDisplay .. '</span>' ..
'<span[^>]*class="[^"]*mw%-collapsible%-content[^"]*"[^>]*>.-</span></span>'
result = result:gsub(search_str, display)
result = result:gsub(search_str, display)
end
end