Skip to content

Commit 5bdfd0c

Browse files
committed
add createVueRoot helper function
1 parent 02f6afa commit 5bdfd0c

File tree

3 files changed

+31
-10
lines changed

3 files changed

+31
-10
lines changed

web_src/js/features/contextpopup.js

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import {createApp} from 'vue';
21
import ContextPopup from '../components/ContextPopup.vue';
2+
import {createVueRoot} from '../utils/vue.js';
33
import {parseIssueHref} from '../utils.js';
44
import {createTippy} from '../modules/tippy.js';
55
import {GET} from '../modules/fetch.js';
@@ -20,19 +20,13 @@ async function show(e) {
2020
} catch {}
2121
if (!issue) return;
2222

23-
const popup = document.createElement('div');
24-
const view = createApp(ContextPopup, {issue, labelsHtml});
25-
try {
26-
view.mount(popup);
27-
} catch (err) {
28-
console.error(err);
29-
return;
30-
}
23+
const content = createVueRoot(ContextPopup, {issue, labelsHtml});
24+
if (!content) return;
3125

3226
const tippy = createTippy(link, {
3327
theme: 'default',
3428
trigger: 'mouseenter focus',
35-
content: popup,
29+
content,
3630
placement: 'top-start',
3731
interactive: true,
3832
role: 'dialog',

web_src/js/utils/dom.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,3 +297,16 @@ export function replaceTextareaSelection(textarea, text) {
297297
textarea.dispatchEvent(new CustomEvent('change', {bubbles: true, cancelable: true}));
298298
}
299299
}
300+
301+
//
302+
function createVueElement(Component, rootProps) {
303+
const container = document.createElement('div');
304+
const view = createApp(Component, rootProps);
305+
try {
306+
view.mount(container);
307+
return container;
308+
} catch (err) {
309+
console.error(err);
310+
return null;
311+
}
312+
}

web_src/js/utils/vue.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import {createApp} from 'vue';
2+
3+
// create a new vue root and container and mount a component into it
4+
export function createVueRoot(component, rootProps) {
5+
const container = document.createElement('div');
6+
const view = createApp(component, rootProps);
7+
try {
8+
view.mount(container);
9+
return container;
10+
} catch (err) {
11+
console.error(err);
12+
return null;
13+
}
14+
}

0 commit comments

Comments
 (0)