Replace fomantic popup module with tippy.js (#20428)
- replace fomantic popup module with tippy.js - fix chaining and add comment - add 100ms delay to tooltips - stopwatch improvments, raise default maxWidth - update web_src/js/features/common-global.js - use type=submit instead of jstokarchuk/v1.18
parent
36f9ee5813
commit
1b2cd4c4e1
@ -1,4 +1,4 @@ |
||||
{{Add .file.Addition .file.Deletion}} |
||||
<span class="diff-stats-bar tooltip mx-3" data-content="{{.root.locale.Tr "repo.diff.stats_desc_file" (Add .file.Addition .file.Deletion) .file.Addition .file.Deletion | Str2html}}" data-variation="wide"> |
||||
<span class="diff-stats-bar tooltip mx-3" data-content="{{.root.locale.Tr "repo.diff.stats_desc_file" (Add .file.Addition .file.Deletion) .file.Addition .file.Deletion | Str2html}}"> |
||||
<div class="diff-stats-add-bar" style="width: {{DiffStatsWidth .file.Addition .file.Deletion}}%"></div> |
||||
</span> |
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,12 +1,56 @@ |
||||
import tippy from 'tippy.js'; |
||||
|
||||
export function createTippy(target, opts) { |
||||
return tippy(target, { |
||||
export function createTippy(target, opts = {}) { |
||||
const instance = tippy(target, { |
||||
appendTo: document.body, |
||||
placement: 'top-start', |
||||
animation: false, |
||||
allowHTML: true, |
||||
maxWidth: 500, // increase over default 350px
|
||||
arrow: `<svg width="16" height="7"><path d="m0 7 8-7 8 7Z" class="tippy-svg-arrow-outer"/><path d="m0 8 8-7 8 7Z" class="tippy-svg-arrow-inner"/></svg>`, |
||||
...(opts?.role && {theme: opts.role}), |
||||
...opts, |
||||
}); |
||||
|
||||
// for popups where content refers to a DOM element, we use the 'hide' class to initially hide
|
||||
// the content, now we can remove it as the content has been removed from the DOM by tippy
|
||||
if (opts.content instanceof Element) { |
||||
opts.content.classList.remove('hide'); |
||||
} |
||||
|
||||
return instance; |
||||
} |
||||
|
||||
export function initTooltip(el, props = {}) { |
||||
const content = el.getAttribute('data-content') || props.content; |
||||
if (!content) return null; |
||||
return createTippy(el, { |
||||
content, |
||||
delay: 100, |
||||
role: 'tooltip', |
||||
...props, |
||||
}); |
||||
} |
||||
|
||||
export function showTemporaryTooltip(target, content) { |
||||
let tippy, oldContent; |
||||
if (target._tippy) { |
||||
tippy = target._tippy; |
||||
oldContent = tippy.props.content; |
||||
} else { |
||||
tippy = initTooltip(target, {content}); |
||||
} |
||||
|
||||
tippy.setContent(content); |
||||
tippy.show(); |
||||
tippy.setProps({ |
||||
onHidden: (tippy) => { |
||||
if (oldContent) { |
||||
tippy.setContent(oldContent); |
||||
} else { |
||||
tippy.destroy(); |
||||
} |
||||
tippy.setProps({onHidden: undefined}); |
||||
}, |
||||
}); |
||||
} |
||||
|
Loading…
Reference in new issue