mirror of
https://github.com/penpot/penpot.git
synced 2025-12-11 22:14:05 +01:00
🐛 Fix select all deletion error on Firefox
This commit is contained in:
26
frontend/text-editor/src/editor/content/dom/Editor.js
Normal file
26
frontend/text-editor/src/editor/content/dom/Editor.js
Normal 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;
|
||||||
|
}
|
||||||
@@ -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");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user