From 87091b6f3adf359deb51a7e7f9a85513ed8150d0 Mon Sep 17 00:00:00 2001 From: chris <kokosias@yahoo.gr> Date: Tue, 21 Nov 2023 06:52:44 +0200 Subject: [PATCH] fix fake cursor multiple dropdowns --- .../plugins/FakeCursorPlugin.js | 34 +++++++++++++------ 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/wax-questions-service/src/MultipleDropDownService/plugins/FakeCursorPlugin.js b/wax-questions-service/src/MultipleDropDownService/plugins/FakeCursorPlugin.js index dd51ee312..05b0f5796 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'; } } } -- GitLab