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