slate-react 0.98.0 → 0.98.1-2023631115050

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.es.js CHANGED
@@ -896,17 +896,57 @@ var ReactEditor = {
896
896
  focusNode = domRange.focusNode; // Focus node works fine
897
897
 
898
898
  var firstRange = domRange.getRangeAt(0);
899
- var lastRange = domRange.getRangeAt(domRange.rangeCount - 1); // Right to left
899
+ var lastRange = domRange.getRangeAt(domRange.rangeCount - 1); // Here we are in the contenteditable mode of a table in firefox
900
900
 
901
- if (firstRange.startContainer === focusNode) {
902
- anchorNode = lastRange.endContainer;
903
- anchorOffset = lastRange.endOffset;
904
- focusOffset = firstRange.startOffset;
901
+ if (focusNode instanceof HTMLTableRowElement && firstRange.startContainer instanceof HTMLTableRowElement && lastRange.startContainer instanceof HTMLTableRowElement) {
902
+ // HTMLElement, becouse Element is a slate element
903
+ function getLastChildren(element) {
904
+ if (element.childElementCount > 0) {
905
+ return getLastChildren(element.children[0]);
906
+ } else {
907
+ return element;
908
+ }
909
+ }
910
+
911
+ var firstNodeRow = firstRange.startContainer;
912
+ var lastNodeRow = lastRange.startContainer; // This should never fail as "The HTMLElement interface represents any HTML element."
913
+
914
+ var firstNode = getLastChildren(firstNodeRow.children[firstRange.startOffset]);
915
+ var lastNode = getLastChildren(lastNodeRow.children[lastRange.startOffset]); // Zero, as we allways take the right one as the anchor point
916
+
917
+ focusOffset = 0;
918
+
919
+ if (lastNode.childNodes.length > 0) {
920
+ anchorNode = lastNode.childNodes[0];
921
+ } else {
922
+ anchorNode = lastNode;
923
+ }
924
+
925
+ if (firstNode.childNodes.length > 0) {
926
+ focusNode = firstNode.childNodes[0];
927
+ } else {
928
+ focusNode = firstNode;
929
+ }
930
+
931
+ if (lastNode instanceof HTMLElement) {
932
+ anchorOffset = lastNode.innerHTML.length;
933
+ } else {
934
+ // Fallback option
935
+ anchorOffset = 0;
936
+ }
905
937
  } else {
906
- // Left to right
907
- anchorNode = firstRange.startContainer;
908
- anchorOffset = firstRange.endOffset;
909
- focusOffset = lastRange.startOffset;
938
+ // This is the read only mode of a firefox table
939
+ // Right to left
940
+ if (firstRange.startContainer === focusNode) {
941
+ anchorNode = lastRange.endContainer;
942
+ anchorOffset = lastRange.endOffset;
943
+ focusOffset = firstRange.startOffset;
944
+ } else {
945
+ // Left to right
946
+ anchorNode = firstRange.startContainer;
947
+ anchorOffset = firstRange.endOffset;
948
+ focusOffset = lastRange.startOffset;
949
+ }
910
950
  }
911
951
  } else {
912
952
  anchorNode = domRange.anchorNode;