Skip to content

Commit 78f0ca0

Browse files
author
Zaydek Michels-Gualtieri
committed
Added mergeRedundantSpans to useEditor
1 parent 0a894c2 commit 78f0ca0

2 files changed

Lines changed: 24 additions & 12 deletions

File tree

src/Editor/spans.js

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
import formatsEnum from "./formatsEnum"
22

3+
// // TODO
4+
// if (domNode.nodeType === Node.ELEMENT_NODE && domNode.getAttribute("contenteditable") === "false") {
5+
// // No-op
6+
// continue
7+
// }
8+
39
// Reads a span from a DOM node.
410
function readSpan(domNode) {
511
const span = {
@@ -30,12 +36,6 @@ function readSpan(domNode) {
3036
return span
3137
}
3238

33-
// // TODO
34-
// if (domNode.nodeType === Node.ELEMENT_NODE && domNode.getAttribute("contenteditable") === "false") {
35-
// // No-op
36-
// continue
37-
// }
38-
3939
// Returns whether two spans’ formats and props are equal.
4040
function formatsAndPropsAreEqual(spanA, spanB) {
4141
if (spanA.formats.length !== spanB.formats.length) {
@@ -51,17 +51,26 @@ function formatsAndPropsAreEqual(spanA, spanB) {
5151
return true
5252
}
5353

54+
// Merges redundant spans (e.g. fragmented).
55+
export function mergeRedundantSpans(spans) {
56+
for (let x = 0; x < spans.length; x++) {
57+
if (x && formatsAndPropsAreEqual(spans[x - 1], spans[x])) {
58+
spans.splice(x - 1, 2, {
59+
...spans[x - 1],
60+
content: spans[x - 1].content + spans[x].content,
61+
})
62+
continue
63+
}
64+
}
65+
}
66+
5467
// Reads spans from a UUID element.
5568
export function readSpans(uuidElement) {
5669
const spans = []
5770
for (let x = 0; x < uuidElement.childNodes.length; x++) {
58-
const span = readSpan(uuidElement.childNodes[x])
59-
if (x && formatsAndPropsAreEqual(spans[spans.length - 1], span)) {
60-
spans[spans.length - 1].content += span.content
61-
continue
62-
}
63-
spans.push(span)
71+
spans.push(readSpan(uuidElement.childNodes[x]))
6472
}
73+
mergeRedundantSpans(spans)
6574
console.log(spans)
6675
return spans
6776
}

src/Editor/useEditor.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import * as iter from "./iter"
22
import useMethods from "use-methods"
33
import uuidv4 from "uuid/v4"
4+
import { mergeRedundantSpans } from "./spans"
45
import { newCursor } from "./cursors"
56

67
// Reads a synthetic UUID element.
@@ -104,6 +105,8 @@ const methods = state => ({
104105
}
105106
}
106107

108+
mergeRedundantSpans(uuidElement.spans)
109+
107110
state.cursors[0].offset -= decremented
108111
this.collapse()
109112

0 commit comments

Comments
 (0)