You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
forgejo/web_src/js/features
wxiaoguang 9be90a5875
Use a general approach to show tooltip, fix temporary tooltip bug (#23574)
## TLDR

* Improve performance: lazy creating the tippy instances.
* Transparently support all "tooltip" elements, no need to call
`initTooltip` again and again.
* Fix a temporary tooltip re-entrance bug, which causes showing temp
content forever.
* Upgrade vue3-calendar-heatmap to 2.0.2 with lazy tippy init
(initHeatmap time decreases from 100ms to 50ms)

## Details

### The performance

Creating a lot of tippy tooltip instances is expensive. This PR doesn't
create all tippy tooltip instances, instead, it only adds "mouseover"
event listener to necessary elements, and then switches to the tippy
tooltip

### The general approach for all tooltips

Before, dynamically generated tooltips need to be called with
`initTooltip`.

After, use MutationObserver to:

* Attach the event listeners to newly created tooltip elements, work for
Vue (easier than before)
* Catch changed attributes and update the tooltip content (better than
before)

It does help a lot, eg:

1a4efa0ee9/web_src/js/components/PullRequestMergeForm.vue (L33-L36)

### Temporary tooltip re-entrance bug

To reproduce, on try.gitea.io, click the "copy clone url" quickly, then
the tooltip will be "Copied!" forever.

After this PR, with the help of `attachTippyTooltip`, the tooltip
content could be reset to the default correctly.

### Other changes

* `data-tooltip-content` is preferred from now on, the old
`data-content` may cause conflicts with other modules.
* `data-placement` was only used for tooltip, so it's renamed to
`data-tooltip-placement`, and removed from `createTippy`.
1 year ago
..
admin Convert `<div class="button">` to `<button class="button">` (#23337) 1 year ago
comp Scoped labels: set aria-disabled on muted Exclusive option for a11y (#23306) 1 year ago
captcha.js Add new captcha: cloudflare turnstile (#22369) 2 years ago
citation.js Fix switched citation format (#23250) 1 year ago
clipboard.js Use link in UI which returned a relative url but not html_url which contains an absolute url (#21986) 2 years ago
codeeditor.js Quick fixes monaco-editor error: "vs.editor.nullLanguage" (#21734) 2 years ago
colorpicker.js JS refactors (#22227) 2 years ago
common-global.js Use a general approach to show tooltip, fix temporary tooltip bug (#23574) 1 year ago
common-issue.js Convert `<div class="button">` to `<button class="button">` (#23337) 1 year ago
common-organization.js Refactor hiding-methods, remove jQuery show/hide, remove `.hide` class, remove inline style=display:none (#22950) 1 year ago
contextpopup.js Use a general approach to show tooltip, fix temporary tooltip bug (#23574) 1 year ago
copycontent.js JS refactors (#22227) 2 years ago
dropzone.js JS refactors (#22227) 2 years ago
emoji.js JS refactors (#22227) 2 years ago
eventsource.sharedworker.js Fix the JS error "EventSource is not defined" caused by some non-standard browsers (#20584) 2 years ago
file-fold.js JS refactors (#22227) 2 years ago
formatting.js JS refactors (#22227) 2 years ago
heatmap.js JS refactors (#22227) 2 years ago
imagediff.js Fix various ImageDiff/SVG bugs (#23312) 1 year ago
install.js Fix various bugs for "install" page (#23194) 1 year ago
notification.js Move helpers to be prefixed with `gt-` (#22879) 1 year ago
org-team.js Refactor hiding-methods, remove jQuery show/hide, remove `.hide` class, remove inline style=display:none (#22950) 1 year ago
pull-view-file.js Replace unstyled meter with progress (#19968) 2 years ago
repo-branch.js Add apply-patch, basic revert and cherry-pick functionality (#17902) 3 years ago
repo-code.js Fix links for the menus in the view file page (#22795) 2 years ago
repo-code.test.js Ignore line anchor links with leading zeroes (#21728) 2 years ago
repo-commit.js Fix hidden commit status on multiple checks (#22889) 1 year ago
repo-common.js Refactor hiding-methods, remove jQuery show/hide, remove `.hide` class, remove inline style=display:none (#22950) 1 year ago
repo-diff-filetree.js JS refactors (#22227) 2 years ago
repo-diff.js Use a general approach to show tooltip, fix temporary tooltip bug (#23574) 1 year ago
repo-editor.js Support paste treepath when creating a new file or updating the file name (#23209) 1 year ago
repo-findfile.js Refactor branch/tag selector to Vue SFC (#23421) 1 year ago
repo-findfile.test.js Refactor branch/tag selector to Vue SFC (#23421) 1 year ago
repo-graph.js Refactor hiding-methods, remove jQuery show/hide, remove `.hide` class, remove inline style=display:none (#22950) 1 year ago
repo-home.js Refactor hiding-methods, remove jQuery show/hide, remove `.hide` class, remove inline style=display:none (#22950) 1 year ago
repo-issue-content.js Refactor hiding-methods, remove jQuery show/hide, remove `.hide` class, remove inline style=display:none (#22950) 1 year ago
repo-issue-pr-form.js JS refactors (#22227) 2 years ago
repo-issue.js Use a general approach to show tooltip, fix temporary tooltip bug (#23574) 1 year ago
repo-legacy.js Fix aria.js bugs: incorrect role element problem, mobile focus problem, tippy problem (#23450) 1 year ago
repo-migrate.js Refactor hiding-methods, remove jQuery show/hide, remove `.hide` class, remove inline style=display:none (#22950) 1 year ago
repo-migration.js Refactor hiding-methods, remove jQuery show/hide, remove `.hide` class, remove inline style=display:none (#22950) 1 year ago
repo-projects.js Sync the class change of Edit Column Button to JS code (#23400) 1 year ago
repo-release.js Hide target selector if tag exists when creating new release (#23171) 1 year ago
repo-settings.js Remove customized (unmaintained) dropdown, improve aria a11y for dropdown (#19861) 2 years ago
repo-template.js Refactor hiding-methods, remove jQuery show/hide, remove `.hide` class, remove inline style=display:none (#22950) 1 year ago
repo-unicode-escape.js Refactor hiding-methods, remove jQuery show/hide, remove `.hide` class, remove inline style=display:none (#22950) 1 year ago
repo-wiki.js Enable spellcheck for EasyMDE, use contenteditable mode (#19776) 2 years ago
serviceworker.js JS refactors (#22227) 2 years ago
sshkey-helper.js Use explicit jQuery import, remove unused eslint globals (#18435) 3 years ago
stopwatch.js Move helpers to be prefixed with `gt-` (#22879) 1 year ago
tablesort.js JS refactors (#22227) 2 years ago
tribute.js JS refactors (#22227) 2 years ago
user-auth-webauthn.js Refactor hiding-methods, remove jQuery show/hide, remove `.hide` class, remove inline style=display:none (#22950) 1 year ago
user-auth.js Refactor hiding-methods, remove jQuery show/hide, remove `.hide` class, remove inline style=display:none (#22950) 1 year ago
user-settings.js Refactor hiding-methods, remove jQuery show/hide, remove `.hide` class, remove inline style=display:none (#22950) 1 year ago