You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

contextpopup.js 1.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  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. export function initContextPopups() {
  6. const refIssues = document.querySelectorAll('.ref-issue');
  7. attachRefIssueContextPopup(refIssues);
  8. }
  9. export function attachRefIssueContextPopup(refIssues) {
  10. for (const refIssue of refIssues) {
  11. if (refIssue.classList.contains('ref-external-issue')) {
  12. return;
  13. }
  14. const {owner, repo, index} = parseIssueHref(refIssue.getAttribute('href'));
  15. if (!owner) return;
  16. const el = document.createElement('div');
  17. refIssue.parentNode.insertBefore(el, refIssue.nextSibling);
  18. const view = createApp(ContextPopup);
  19. try {
  20. view.mount(el);
  21. } catch (err) {
  22. console.error(err);
  23. el.textContent = 'ContextPopup failed to load';
  24. }
  25. createTippy(refIssue, {
  26. content: el,
  27. placement: 'top-start',
  28. interactive: true,
  29. role: 'dialog',
  30. interactiveBorder: 5,
  31. onShow: () => {
  32. el.firstChild.dispatchEvent(new CustomEvent('ce-load-context-popup', {detail: {owner, repo, index}}));
  33. },
  34. });
  35. }
  36. }