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

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import Vue from 'vue';
  2. import ContextPopup from '../components/ContextPopup.vue';
  3. import {parseIssueHref} from '../utils.js';
  4. export default function initContextPopups() {
  5. const refIssues = $('.ref-issue');
  6. if (!refIssues.length) return;
  7. refIssues.each(function () {
  8. if ($(this).hasClass('ref-external-issue')) {
  9. return;
  10. }
  11. const {owner, repo, index} = parseIssueHref($(this).attr('href'));
  12. if (!owner) return;
  13. const el = document.createElement('div');
  14. el.className = 'ui custom popup hidden';
  15. el.innerHTML = '<div></div>';
  16. this.parentNode.insertBefore(el, this.nextSibling);
  17. const View = Vue.extend({
  18. render: (createElement) => createElement(ContextPopup),
  19. });
  20. const view = new View();
  21. try {
  22. view.$mount(el.firstChild);
  23. } catch (err) {
  24. console.error(err);
  25. el.textContent = 'ContextPopup failed to load';
  26. }
  27. $(this).popup({
  28. variation: 'wide',
  29. delay: {
  30. show: 250
  31. },
  32. onShow: () => {
  33. view.$emit('load-context-popup', {owner, repo, index}, () => {
  34. $(this).popup('reposition');
  35. });
  36. },
  37. popup: $(el),
  38. });
  39. });
  40. }