code.gitea.io/gitea@v1.22.3/web_src/js/features/contextpopup.js (about) 1 import {createApp} from 'vue'; 2 import ContextPopup from '../components/ContextPopup.vue'; 3 import {parseIssueHref} from '../utils.js'; 4 import {createTippy} from '../modules/tippy.js'; 5 6 export function initContextPopups() { 7 const refIssues = document.querySelectorAll('.ref-issue'); 8 attachRefIssueContextPopup(refIssues); 9 } 10 11 export function attachRefIssueContextPopup(refIssues) { 12 for (const refIssue of refIssues) { 13 if (refIssue.classList.contains('ref-external-issue')) { 14 return; 15 } 16 17 const {owner, repo, index} = parseIssueHref(refIssue.getAttribute('href')); 18 if (!owner) return; 19 20 const el = document.createElement('div'); 21 el.classList.add('tw-p-3'); 22 refIssue.parentNode.insertBefore(el, refIssue.nextSibling); 23 24 const view = createApp(ContextPopup); 25 26 try { 27 view.mount(el); 28 } catch (err) { 29 console.error(err); 30 el.textContent = 'ContextPopup failed to load'; 31 } 32 33 createTippy(refIssue, { 34 theme: 'default', 35 content: el, 36 placement: 'top-start', 37 interactive: true, 38 role: 'dialog', 39 interactiveBorder: 5, 40 onShow: () => { 41 el.firstChild.dispatchEvent(new CustomEvent('ce-load-context-popup', {detail: {owner, repo, index}})); 42 }, 43 }); 44 } 45 }