diff --git a/wax-questions-service/src/MultipleDropDownService/plugins/FakeCursorPlugin.js b/wax-questions-service/src/MultipleDropDownService/plugins/FakeCursorPlugin.js index dd51ee312763e546366c118e54eb4e8ef02eb2b4..05b0f57967ed09b97e739a38f73ce24d919c97fa 100644 --- a/wax-questions-service/src/MultipleDropDownService/plugins/FakeCursorPlugin.js +++ b/wax-questions-service/src/MultipleDropDownService/plugins/FakeCursorPlugin.js @@ -12,11 +12,13 @@ export default props => { init: (_, state) => {}, apply(tr, prev, _, newState) { let createDecoration; + if ( newState.selection.from === newState.selection.to && Commands.isInTable(newState) ) { - const widget = document.createElement('fakecursor'); + const widget = document.createElement('span'); + widget.setAttribute('id', 'fake-cursor'); createDecoration = DecorationSet.create(newState.doc, [ Decoration.widget(newState.selection.from, widget, { key: 'fakecursor', @@ -38,22 +40,34 @@ export default props => { handleDOMEvents: { focus: (view, event) => { event.preventDefault(); - const fakeCursor = document.getElementsByTagName('fakecursor'); - if (fakeCursor && fakeCursor[0]) { - for (let i = 0; i < fakeCursor.length; i++) { - fakeCursor[i].style.visibility = 'hidden'; + const fakeCursor = document.getElementById('fake-cursor'); + if (fakeCursor) { + if ( + navigator.userAgent.includes('Firefox') && + view.state.selection.$from.nodeBefore == null + ) { + fakeCursor.style.visibility = 'hidden'; + } else { + fakeCursor.style.display = 'none'; } } }, blur: (view, event) => { event.preventDefault(); if (view && event.relatedTarget === null) { - view.focus(); + setTimeout(() => { + view.focus(); + }); } else { - const fakeCursor = document.getElementsByTagName('fakecursor'); - if (fakeCursor && fakeCursor[0]) { - for (let i = 0; i < fakeCursor.length; i++) { - fakeCursor[i].style.visibility = 'visible'; + const fakeCursor = document.getElementById('fake-cursor'); + if (fakeCursor) { + if ( + navigator.userAgent.includes('Firefox') && + view.state.selection.$from.nodeBefore === null + ) { + fakeCursor.style.visibility = 'visible'; + } else { + fakeCursor.style.display = 'inline'; } } }