summaryrefslogtreecommitdiffstats
path: root/web_src/js/features/contextpopup.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel@debian.org>2024-10-18 20:33:49 +0200
committerDaniel Baumann <daniel@debian.org>2024-10-18 20:33:49 +0200
commitdd136858f1ea40ad3c94191d647487fa4f31926c (patch)
tree58fec94a7b2a12510c9664b21793f1ed560c6518 /web_src/js/features/contextpopup.js
parentInitial commit. (diff)
downloadforgejo-dd136858f1ea40ad3c94191d647487fa4f31926c.tar.xz
forgejo-dd136858f1ea40ad3c94191d647487fa4f31926c.zip
Adding upstream version 9.0.0.upstream/9.0.0upstreamdebian
Signed-off-by: Daniel Baumann <daniel@debian.org>
Diffstat (limited to 'web_src/js/features/contextpopup.js')
-rw-r--r--web_src/js/features/contextpopup.js43
1 files changed, 43 insertions, 0 deletions
diff --git a/web_src/js/features/contextpopup.js b/web_src/js/features/contextpopup.js
new file mode 100644
index 0000000..ce90f3e
--- /dev/null
+++ b/web_src/js/features/contextpopup.js
@@ -0,0 +1,43 @@
+import {createApp} from 'vue';
+import ContextPopup from '../components/ContextPopup.vue';
+import {parseIssueHref} from '../utils.js';
+import {createTippy} from '../modules/tippy.js';
+
+export function initContextPopups() {
+ const refIssues = document.querySelectorAll('.ref-issue');
+ attachRefIssueContextPopup(refIssues);
+}
+
+export function attachRefIssueContextPopup(refIssues) {
+ for (const refIssue of refIssues) {
+ if (refIssue.classList.contains('ref-external-issue')) {
+ return;
+ }
+
+ const {owner, repo, index} = parseIssueHref(refIssue.getAttribute('href'));
+ if (!owner) return;
+
+ const el = document.createElement('div');
+ refIssue.parentNode.insertBefore(el, refIssue.nextSibling);
+
+ const view = createApp(ContextPopup);
+
+ try {
+ view.mount(el);
+ } catch (err) {
+ console.error(err);
+ el.textContent = 'ContextPopup failed to load';
+ }
+
+ createTippy(refIssue, {
+ content: el,
+ placement: 'top-start',
+ interactive: true,
+ role: 'dialog',
+ interactiveBorder: 5,
+ onShow: () => {
+ el.firstChild.dispatchEvent(new CustomEvent('ce-load-context-popup', {detail: {owner, repo, index}}));
+ },
+ });
+ }
+}