Module:Tt: Difference between revisions
m Protected "Module:Tt" ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite)) |
implement draft |
||
| 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) | ||
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 | ||
-- | -- preprocess tooltip text | ||
if lib.isNotEmpty(tooltip) then | |||
tooltip = frame:preprocess(tooltip) | |||
: | end | ||
-- Build toggle tooltip | -- Build toggle tooltip | ||
local toggle = out:tag('span'):addClass( | 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 | 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') | ||
: | 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 76: | Line 80: | ||
local full = tx | local full = tx | ||
local result = tx | local result = tx | ||
for | for display in string.gmatch(full, | ||
'<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[^>] | 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 | ||