mirror of
https://github.com/penpot/penpot.git
synced 2025-12-12 06:24:17 +01:00
Merge pull request #6880 from penpot/elenatorro-fix-editor-crash-on-deleting-entire-selection-firefox
🐛 Handle empty paragraph on entire selected text deletion
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 { isLineBreak } from "./LineBreak.js";
|
||||
import { isParagraph } from "./Paragraph.js";
|
||||
import { isEditor } from "./Editor.js";
|
||||
import { isRoot } from "./Root.js";
|
||||
|
||||
/**
|
||||
@@ -60,5 +61,6 @@ export function getClosestTextNode(node) {
|
||||
if (isInline(node)) return node.firstChild;
|
||||
if (isParagraph(node)) return node.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");
|
||||
}
|
||||
|
||||
@@ -1524,6 +1524,7 @@ export class SelectionController extends EventTarget {
|
||||
|
||||
const startNode = getClosestTextNode(this.#range.startContainer);
|
||||
const endNode = getClosestTextNode(this.#range.endContainer);
|
||||
|
||||
const startOffset = this.#range.startOffset;
|
||||
const endOffset = this.#range.endOffset;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user