🐛 Fix select all deletion error on Firefox

This commit is contained in:
Elena Torro
2025-07-09 11:39:16 +02:00
parent 00599f76d0
commit e2b55d814b
3 changed files with 29 additions and 0 deletions

View File

@@ -0,0 +1,26 @@
/**
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* Copyright (c) KALEIDOS INC
*/
import { isElement } from "./Element.js";
export const TAG = "DIV";
export const TYPE = "editor";
export const QUERY = `[data-itype="${TYPE}"]`;
/**
* Returns true if passed node is the editor element.
*
* @param {Node} node
* @returns {boolean}
*/
export function isEditor(node) {
if (!node) return false;
if (!isElement(node, TAG)) return false;
if (node.dataset.itype !== TYPE) return false;
return true;
}

View File

@@ -9,6 +9,7 @@
import { isInline } from "./Inline.js"; import { isInline } from "./Inline.js";
import { isLineBreak } from "./LineBreak.js"; import { isLineBreak } from "./LineBreak.js";
import { isParagraph } from "./Paragraph.js"; import { isParagraph } from "./Paragraph.js";
import { isEditor } from "./Editor.js";
import { isRoot } from "./Root.js"; import { isRoot } from "./Root.js";
/** /**
@@ -60,5 +61,6 @@ export function getClosestTextNode(node) {
if (isInline(node)) return node.firstChild; if (isInline(node)) return node.firstChild;
if (isParagraph(node)) return node.firstChild.firstChild; if (isParagraph(node)) return node.firstChild.firstChild;
if (isRoot(node)) return node.firstChild.firstChild.firstChild; if (isRoot(node)) return node.firstChild.firstChild.firstChild;
if (isEditor(node)) return node.firstChild.firstChild.firstChild.firstChild;
throw new Error("Cannot find a text node"); throw new Error("Cannot find a text node");
} }

View File

@@ -1519,6 +1519,7 @@ export class SelectionController extends EventTarget {
const startNode = getClosestTextNode(this.#range.startContainer); const startNode = getClosestTextNode(this.#range.startContainer);
const endNode = getClosestTextNode(this.#range.endContainer); const endNode = getClosestTextNode(this.#range.endContainer);
const startOffset = this.#range.startOffset; const startOffset = this.#range.startOffset;
const endOffset = this.#range.endOffset; const endOffset = this.#range.endOffset;