prosemirror-transform 1.3.4 → 1.4.0
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/CHANGELOG.md +6 -0
- package/dist/index.es.js +13 -5
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +13 -5
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/map.js +2 -0
- package/src/replace.js +11 -5
package/CHANGELOG.md
CHANGED
package/dist/index.es.js
CHANGED
|
@@ -142,6 +142,8 @@ StepMap.offset = function offset (n) {
|
|
|
142
142
|
return n == 0 ? StepMap.empty : new StepMap(n < 0 ? [0, -n, 0] : [0, 0, n])
|
|
143
143
|
};
|
|
144
144
|
|
|
145
|
+
// :: StepMap
|
|
146
|
+
// A StepMap that contains no changed ranges.
|
|
145
147
|
StepMap.empty = new StepMap([]);
|
|
146
148
|
|
|
147
149
|
// :: class extends Mappable
|
|
@@ -1536,6 +1538,10 @@ function invalidMarks(type, fragment, start) {
|
|
|
1536
1538
|
return false
|
|
1537
1539
|
}
|
|
1538
1540
|
|
|
1541
|
+
function definesContent(type) {
|
|
1542
|
+
return type.spec.defining || type.spec.definingForContent
|
|
1543
|
+
}
|
|
1544
|
+
|
|
1539
1545
|
// :: (number, number, Slice) → this
|
|
1540
1546
|
// Replace a range of the document with a given slice, using `from`,
|
|
1541
1547
|
// `to`, and the slice's [`openStart`](#model.Slice.openStart) property
|
|
@@ -1543,9 +1549,9 @@ function invalidMarks(type, fragment, start) {
|
|
|
1543
1549
|
// grow the replaced area or close open nodes in the slice in order to
|
|
1544
1550
|
// get a fit that is more in line with WYSIWYG expectations, by
|
|
1545
1551
|
// dropping fully covered parent nodes of the replaced region when
|
|
1546
|
-
// they are marked [non-defining](#model.NodeSpec.
|
|
1552
|
+
// they are marked [non-defining as context](#model.NodeSpec.definingAsContext), or
|
|
1547
1553
|
// including an open parent node from the slice that _is_ marked as
|
|
1548
|
-
// [defining](#model.NodeSpec.
|
|
1554
|
+
// [defining its content](#model.NodeSpec.definingForContent).
|
|
1549
1555
|
//
|
|
1550
1556
|
// This is the method, for example, to handle paste. The similar
|
|
1551
1557
|
// [`replace`](#transform.Transform.replace) method is a more
|
|
@@ -1572,7 +1578,7 @@ Transform.prototype.replaceRange = function(from, to, slice) {
|
|
|
1572
1578
|
// cross a defining node.
|
|
1573
1579
|
for (var d = $from.depth, pos = $from.pos - 1; d > 0; d--, pos--) {
|
|
1574
1580
|
var spec = $from.node(d).type.spec;
|
|
1575
|
-
if (spec.defining || spec.isolating) { break }
|
|
1581
|
+
if (spec.defining || spec.definingAsContext || spec.isolating) { break }
|
|
1576
1582
|
if (targetDepths.indexOf(d) > -1) { preferredTarget = d; }
|
|
1577
1583
|
else if ($from.before(d) == pos) { targetDepths.splice(1, 0, -d); }
|
|
1578
1584
|
}
|
|
@@ -1589,10 +1595,12 @@ Transform.prototype.replaceRange = function(from, to, slice) {
|
|
|
1589
1595
|
}
|
|
1590
1596
|
// Back up if the node directly above openStart, or the node above
|
|
1591
1597
|
// that separated only by a non-defining textblock node, is defining.
|
|
1592
|
-
if (preferredDepth > 0 && leftNodes[preferredDepth - 1].type
|
|
1598
|
+
if (preferredDepth > 0 && definesContent(leftNodes[preferredDepth - 1].type) &&
|
|
1593
1599
|
$from.node(preferredTargetIndex).type != leftNodes[preferredDepth - 1].type)
|
|
1594
1600
|
{ preferredDepth -= 1; }
|
|
1595
|
-
else if (preferredDepth >= 2 &&
|
|
1601
|
+
else if (preferredDepth >= 2 &&
|
|
1602
|
+
leftNodes[preferredDepth - 1].isTextblock &&
|
|
1603
|
+
definesContent(leftNodes[preferredDepth - 2].type) &&
|
|
1596
1604
|
$from.node(preferredTargetIndex).type != leftNodes[preferredDepth - 2].type)
|
|
1597
1605
|
{ preferredDepth -= 2; }
|
|
1598
1606
|
|