Skip to content

Commit da7c48f

Browse files
ryan6416fregante
andauthored
Add support for Monaco Editor (#239)
Co-authored-by: Federico Brigante <[email protected]>
1 parent 0f36b25 commit da7c48f

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

source/ghost-text.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,12 @@ class AdvancedTextWrapper {
7070
}
7171

7272
function wrapField(field) {
73+
const monaco = field.closest('.monaco-editor');
74+
if (monaco) {
75+
const visualElement = monaco.querySelector('.monaco-editor-background');
76+
return new AdvancedTextWrapper(monaco, visualElement);
77+
}
78+
7379
if (field.classList.contains('ace_text-input')) {
7480
const ace = field.parentNode;
7581
const visualElement = ace.querySelector('.ace_scroller');

source/unsafe-messenger.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ export default function unsafeMessenger() {
99
function listener({target}) {
1010
if (target.CodeMirror) {
1111
codeMirror(target);
12+
} else if (target.classList.contains('monaco-editor')) {
13+
monacoEditor(target);
1214
} else {
1315
ace(target);
1416
}
@@ -73,6 +75,24 @@ export default function unsafeMessenger() {
7375
editor.blur();
7476
});
7577
}
78+
79+
function monacoEditor(target) {
80+
const editor = globalThis.monaco.editor.getModel(target.dataset.uri);
81+
sendBack(target, editor.getValue());
82+
83+
editor.onDidChangeContent(throttle(50, event => {
84+
if (!event.isFlush) { // Flush === setValue
85+
sendBack(target, editor.getValue());
86+
}
87+
}));
88+
89+
target.addEventListener('gt:transfer', () => {
90+
editor.setValue(target.getAttribute('gt-value'));
91+
});
92+
target.addEventListener('gt:blur', () => {
93+
target.ownerDocument.activeElement.blur();
94+
});
95+
}
7696
}
7797

7898
// eslint-disable-next-line no-unused-expressions

0 commit comments

Comments
 (0)