prosemirror-view 1.33.10 → 1.33.11

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 CHANGED
@@ -1,3 +1,11 @@
1
+ ## 1.33.11 (2024-08-19)
2
+
3
+ ### Bug fixes
4
+
5
+ Delete the selection on composition start when on a mark boundary to force Chrome to apply the correct style to the composition.
6
+
7
+ When the browser starts a composition and the selection spans across blocks, start by clearing it to make sure the composed text node lands in a valid position.
8
+
1
9
  ## 1.33.10 (2024-08-13)
2
10
 
3
11
  ### Bug fixes
package/dist/index.cjs CHANGED
@@ -2219,13 +2219,7 @@ function selectCursorWrapper(view) {
2219
2219
  var node = view.cursorWrapper.dom,
2220
2220
  img = node.nodeName == "IMG";
2221
2221
  if (img) range.setStart(node.parentNode, domIndex(node) + 1);else range.setStart(node, 0);
2222
- var sel = view.state.selection;
2223
- if (sel.empty) {
2224
- range.collapse(true);
2225
- } else {
2226
- var end = view.domAtPos(sel.to);
2227
- range.setEnd(end.node, end.offset);
2228
- }
2222
+ range.collapse(true);
2229
2223
  domSel.removeAllRanges();
2230
2224
  domSel.addRange(range);
2231
2225
  if (!img && !view.state.selection.visible && ie && ie_version <= 11) {
@@ -3205,7 +3199,7 @@ editHandlers.compositionstart = editHandlers.compositionupdate = function (view)
3205
3199
  endComposition(view, true);
3206
3200
  view.markCursor = null;
3207
3201
  } else {
3208
- endComposition(view);
3202
+ endComposition(view, !state.selection.empty);
3209
3203
  if (gecko && state.selection.empty && $pos.parentOffset && !$pos.textOffset && $pos.nodeBefore.marks.length) {
3210
3204
  var sel = view.domSelectionRange();
3211
3205
  for (var node = sel.focusNode, offset = sel.focusOffset; node && node.nodeType == 1 && offset != 0;) {
@@ -3276,13 +3270,13 @@ function timestampFromCustomEvent() {
3276
3270
  return event.timeStamp;
3277
3271
  }
3278
3272
  function endComposition(view) {
3279
- var forceUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
3273
+ var restarting = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
3280
3274
  if (android && view.domObserver.flushingSoon >= 0) return;
3281
3275
  view.domObserver.forceFlush();
3282
3276
  clearComposition(view);
3283
- if (forceUpdate || view.docView && view.docView.dirty) {
3277
+ if (restarting || view.docView && view.docView.dirty) {
3284
3278
  var sel = selectionFromDOM(view);
3285
- if (sel && !sel.eq(view.state.selection)) view.dispatch(view.state.tr.setSelection(sel));else view.updateState(view.state);
3279
+ if (sel && !sel.eq(view.state.selection)) view.dispatch(view.state.tr.setSelection(sel));else if ((view.markCursor || restarting) && !view.state.selection.empty) view.dispatch(view.state.tr.deleteSelection());else view.updateState(view.state);
3286
3280
  return true;
3287
3281
  }
3288
3282
  return false;
package/dist/index.js CHANGED
@@ -2290,14 +2290,7 @@ function selectCursorWrapper(view) {
2290
2290
  range.setStart(node.parentNode, domIndex(node) + 1);
2291
2291
  else
2292
2292
  range.setStart(node, 0);
2293
- let sel = view.state.selection;
2294
- if (sel.empty) {
2295
- range.collapse(true);
2296
- }
2297
- else {
2298
- let end = view.domAtPos(sel.to);
2299
- range.setEnd(end.node, end.offset);
2300
- }
2293
+ range.collapse(true);
2301
2294
  domSel.removeAllRanges();
2302
2295
  domSel.addRange(range);
2303
2296
  // Kludge to kill 'control selection' in IE11 when selecting an
@@ -3419,7 +3412,7 @@ editHandlers.compositionstart = editHandlers.compositionupdate = view => {
3419
3412
  view.markCursor = null;
3420
3413
  }
3421
3414
  else {
3422
- endComposition(view);
3415
+ endComposition(view, !state.selection.empty);
3423
3416
  // In firefox, if the cursor is after but outside a marked node,
3424
3417
  // the inserted text won't inherit the marks. So this moves it
3425
3418
  // inside if necessary.
@@ -3500,15 +3493,17 @@ function timestampFromCustomEvent() {
3500
3493
  /**
3501
3494
  @internal
3502
3495
  */
3503
- function endComposition(view, forceUpdate = false) {
3496
+ function endComposition(view, restarting = false) {
3504
3497
  if (android && view.domObserver.flushingSoon >= 0)
3505
3498
  return;
3506
3499
  view.domObserver.forceFlush();
3507
3500
  clearComposition(view);
3508
- if (forceUpdate || view.docView && view.docView.dirty) {
3501
+ if (restarting || view.docView && view.docView.dirty) {
3509
3502
  let sel = selectionFromDOM(view);
3510
3503
  if (sel && !sel.eq(view.state.selection))
3511
3504
  view.dispatch(view.state.tr.setSelection(sel));
3505
+ else if ((view.markCursor || restarting) && !view.state.selection.empty)
3506
+ view.dispatch(view.state.tr.deleteSelection());
3512
3507
  else
3513
3508
  view.updateState(view.state);
3514
3509
  return true;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prosemirror-view",
3
- "version": "1.33.10",
3
+ "version": "1.33.11",
4
4
  "description": "ProseMirror's view component",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",
package/src/input.ts CHANGED
@@ -463,7 +463,7 @@ editHandlers.compositionstart = editHandlers.compositionupdate = view => {
463
463
  endComposition(view, true)
464
464
  view.markCursor = null
465
465
  } else {
466
- endComposition(view)
466
+ endComposition(view, !state.selection.empty)
467
467
  // In firefox, if the cursor is after but outside a marked node,
468
468
  // the inserted text won't inherit the marks. So this moves it
469
469
  // inside if necessary.
@@ -539,13 +539,14 @@ function timestampFromCustomEvent() {
539
539
  }
540
540
 
541
541
  /// @internal
542
- export function endComposition(view: EditorView, forceUpdate = false) {
542
+ export function endComposition(view: EditorView, restarting = false) {
543
543
  if (browser.android && view.domObserver.flushingSoon >= 0) return
544
544
  view.domObserver.forceFlush()
545
545
  clearComposition(view)
546
- if (forceUpdate || view.docView && view.docView.dirty) {
546
+ if (restarting || view.docView && view.docView.dirty) {
547
547
  let sel = selectionFromDOM(view)
548
548
  if (sel && !sel.eq(view.state.selection)) view.dispatch(view.state.tr.setSelection(sel))
549
+ else if ((view.markCursor || restarting) && !view.state.selection.empty) view.dispatch(view.state.tr.deleteSelection())
549
550
  else view.updateState(view.state)
550
551
  return true
551
552
  }
package/src/selection.ts CHANGED
@@ -140,13 +140,7 @@ function selectCursorWrapper(view: EditorView) {
140
140
  let node = view.cursorWrapper!.dom, img = node.nodeName == "IMG"
141
141
  if (img) range.setStart(node.parentNode!, domIndex(node) + 1)
142
142
  else range.setStart(node, 0)
143
- let sel = view.state.selection
144
- if (sel.empty) {
145
- range.collapse(true)
146
- } else {
147
- let end = view.domAtPos(sel.to)
148
- range.setEnd(end.node, end.offset)
149
- }
143
+ range.collapse(true)
150
144
  domSel.removeAllRanges()
151
145
  domSel.addRange(range)
152
146
  // Kludge to kill 'control selection' in IE11 when selecting an