@fiduswriter/editor 0.1.40 → 0.1.41

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.
@@ -1 +1 @@
1
- {"version":3,"file":"jump_hidden_nodes.d.ts","sourceRoot":"","sources":["../../src/state_plugins/jump_hidden_nodes.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAA2B,MAAM,mBAAmB,CAAA;AAmBlE,eAAO,MAAM,qBAAqB,GAAI,UAAU;IAAC,MAAM,EAAE,OAAO,CAAA;CAAC,gBAwE3D,CAAA"}
1
+ {"version":3,"file":"jump_hidden_nodes.d.ts","sourceRoot":"","sources":["../../src/state_plugins/jump_hidden_nodes.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAA2B,MAAM,mBAAmB,CAAA;AAmBlE,eAAO,MAAM,qBAAqB,GAAI,UAAU;IAAC,MAAM,EAAE,OAAO,CAAA;CAAC,gBA2E3D,CAAA"}
@@ -41,36 +41,35 @@ export const jumpHiddenNodesPlugin = (_options) => new Plugin({
41
41
  : new GapCursor($pos);
42
42
  return state.tr.setSelection(selection);
43
43
  }
44
- // Also handle the case where the cursor is at the start of a visible
45
- // node whose previous sibling is hidden (e.g. body after abstract
46
- // was unhidden). Move the cursor to the previous non-hidden node.
44
+ // Handle boundary crossing: cursor is at the start of a visible
45
+ // doc-level part whose preceding sibling is hidden. Use
46
+ // childBefore to check whether the previous doc child is hidden.
47
47
  if (selectionSet &&
48
48
  !posHidden(state.selection.$from) &&
49
- state.selection.$from.pos > 0) {
50
- // Check if the position immediately before is in a hidden node
51
- const beforePos = state.selection.$from.pos - 1;
52
- if (beforePos > 0) {
53
- const beforeResolved = state.doc.resolve(beforePos);
54
- if (posHidden(beforeResolved)) {
55
- // Move backward to find a non-hidden position
56
- const dir = -1;
57
- let newPos = state.selection.from, hidden = true, validTextSelection = false, validGapCursor = false;
58
- let new$pos = state.selection.$from;
59
- while (hidden || (!validGapCursor && !validTextSelection)) {
60
- newPos += dir;
61
- if (newPos === 0) {
62
- return;
63
- }
64
- new$pos = state.doc.resolve(newPos);
65
- validTextSelection = new$pos.parent.inlineContent;
66
- validGapCursor = GapCursor.valid(new$pos);
67
- hidden = posHidden(new$pos);
49
+ state.selection.$from.depth >= 2) {
50
+ const $pos = state.selection.$from;
51
+ const prevChild = state.doc.childBefore($pos.pos);
52
+ if (prevChild &&
53
+ prevChild.node &&
54
+ prevChild.node.attrs.hidden) {
55
+ const dir = -1;
56
+ let newPos = state.selection.from, hidden = true, validTextSelection = false, validGapCursor = false;
57
+ let new$pos = state.selection.$from;
58
+ while (hidden ||
59
+ (!validGapCursor && !validTextSelection)) {
60
+ newPos += dir;
61
+ if (newPos === 0) {
62
+ return;
68
63
  }
69
- const selection = validTextSelection
70
- ? new TextSelection(new$pos)
71
- : new GapCursor(new$pos);
72
- return state.tr.setSelection(selection);
64
+ new$pos = state.doc.resolve(newPos);
65
+ validTextSelection = new$pos.parent.inlineContent;
66
+ validGapCursor = GapCursor.valid(new$pos);
67
+ hidden = posHidden(new$pos);
73
68
  }
69
+ const selection = validTextSelection
70
+ ? new TextSelection(new$pos)
71
+ : new GapCursor(new$pos);
72
+ return state.tr.setSelection(selection);
74
73
  }
75
74
  }
76
75
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"jump_hidden_nodes.js","sourceRoot":"","sources":["../../src/state_plugins/jump_hidden_nodes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jump_hidden_nodes.js","sourceRoot":"","sources":["../../src/state_plugins/jump_hidden_nodes.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiduswriter/editor",
3
- "version": "0.1.40",
3
+ "version": "0.1.41",
4
4
  "description": "Fidus Writer browser editor",
5
5
  "repository": {
6
6
  "type": "git",
@@ -51,41 +51,44 @@ export const jumpHiddenNodesPlugin = (_options: {editor: unknown}) =>
51
51
  : new GapCursor($pos)
52
52
  return state.tr.setSelection(selection)
53
53
  }
54
- // Also handle the case where the cursor is at the start of a visible
55
- // node whose previous sibling is hidden (e.g. body after abstract
56
- // was unhidden). Move the cursor to the previous non-hidden node.
54
+ // Handle boundary crossing: cursor is at the start of a visible
55
+ // doc-level part whose preceding sibling is hidden. Use
56
+ // childBefore to check whether the previous doc child is hidden.
57
57
  if (
58
58
  selectionSet &&
59
59
  !posHidden(state.selection.$from) &&
60
- state.selection.$from.pos > 0
60
+ state.selection.$from.depth >= 2
61
61
  ) {
62
- // Check if the position immediately before is in a hidden node
63
- const beforePos = state.selection.$from.pos - 1
64
- if (beforePos > 0) {
65
- const beforeResolved = state.doc.resolve(beforePos)
66
- if (posHidden(beforeResolved)) {
67
- // Move backward to find a non-hidden position
68
- const dir = -1
69
- let newPos = state.selection.from,
70
- hidden = true,
71
- validTextSelection = false,
72
- validGapCursor = false
73
- let new$pos: ResolvedPos = state.selection.$from
74
- while (hidden || (!validGapCursor && !validTextSelection)) {
75
- newPos += dir
76
- if (newPos === 0) {
77
- return
78
- }
79
- new$pos = state.doc.resolve(newPos)
80
- validTextSelection = new$pos.parent.inlineContent
81
- validGapCursor = (GapCursor as any).valid(new$pos)
82
- hidden = posHidden(new$pos)
62
+ const $pos = state.selection.$from
63
+ const prevChild = state.doc.childBefore($pos.pos)
64
+ if (
65
+ prevChild &&
66
+ prevChild.node &&
67
+ prevChild.node.attrs.hidden
68
+ ) {
69
+ const dir = -1
70
+ let newPos = state.selection.from,
71
+ hidden = true,
72
+ validTextSelection = false,
73
+ validGapCursor = false
74
+ let new$pos: ResolvedPos = state.selection.$from
75
+ while (
76
+ hidden ||
77
+ (!validGapCursor && !validTextSelection)
78
+ ) {
79
+ newPos += dir
80
+ if (newPos === 0) {
81
+ return
83
82
  }
84
- const selection = validTextSelection
85
- ? new TextSelection(new$pos)
86
- : new GapCursor(new$pos)
87
- return state.tr.setSelection(selection)
83
+ new$pos = state.doc.resolve(newPos)
84
+ validTextSelection = new$pos.parent.inlineContent
85
+ validGapCursor = (GapCursor as any).valid(new$pos)
86
+ hidden = posHidden(new$pos)
88
87
  }
88
+ const selection = validTextSelection
89
+ ? new TextSelection(new$pos)
90
+ : new GapCursor(new$pos)
91
+ return state.tr.setSelection(selection)
89
92
  }
90
93
  }
91
94
  return undefined