@nerd-bible/wordgard 0.6.2-beta11 → 0.6.2-beta12

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/dist/editor.d.ts CHANGED
@@ -731,7 +731,7 @@ declare class Wordgard {
731
731
  Facet that allows you to register handlers to override paste
732
732
  behavior.
733
733
  */
734
- static pasteHandler: GardState.Facet<(wg: Wordgard, event: InputEvent | null, slice: wordgard_doc.Slice, html: string, text: string) => boolean, readonly ((wg: Wordgard, event: InputEvent | null, slice: wordgard_doc.Slice, html: string, text: string) => boolean)[]>;
734
+ static pasteHandler: GardState.Facet<(wg: Wordgard, event: ClipboardEvent, slice: wordgard_doc.Slice, html: string, text: string) => boolean, readonly ((wg: Wordgard, event: ClipboardEvent, slice: wordgard_doc.Slice, html: string, text: string) => boolean)[]>;
735
735
  /**
736
736
  Perform a paste with the given content. This will run {@link
737
737
  Wordgard.pasteHandler paste handlers} and, if none handles the
package/dist/editor.js CHANGED
@@ -952,17 +952,6 @@ function getSelection(root) {
952
952
  }
953
953
  return target.getSelection();
954
954
  }
955
- function getSelectionRange(root) {
956
- let sel = getSelection(root);
957
- if (!sel)
958
- return null;
959
- if (browser.safari && root.nodeType == 11) {
960
- let range = sel.getComposedRanges(root)[0];
961
- if (range)
962
- return range;
963
- }
964
- return new StaticRange(sel.getRangeAt(0));
965
- }
966
955
  function hasSelection(dom, selection) {
967
956
  if (!selection.focusNode)
968
957
  return false;
@@ -3905,6 +3894,8 @@ class InputState {
3905
3894
  this.lastKeyCode = event.keyCode;
3906
3895
  this.lastKeyTime = Date.now();
3907
3896
  this.shiftKey = event.keyCode == 16 || event.shiftKey;
3897
+ if (this.composing && event.isComposing === false)
3898
+ compositionEnd(this.wg);
3908
3899
  return false;
3909
3900
  }
3910
3901
  ignoreDuringComposition(event) {
@@ -3969,6 +3960,8 @@ class InputState {
3969
3960
  return this.domMapping.mapPos(this.getDOMPos(node, offset), assoc);
3970
3961
  }
3971
3962
  beforeInput(event, data) {
3963
+ if (this.composing && event.isComposing === false)
3964
+ compositionEnd(this.wg);
3972
3965
  let type = event.inputType, range;
3973
3966
  let { wg } = this, sel = wg.state.selection;
3974
3967
  if (data.domRange) {
@@ -3998,14 +3991,8 @@ class InputState {
3998
3991
  Command.dispatch(wg, insertText, { from, to, insert, userEvent: "input.type" });
3999
3992
  }
4000
3993
  else if (type == "insertFromPaste") {
4001
- let isSel = this.unflushedSelection;
4002
- if (!isSel) {
4003
- let r = data.domRange.range, domSel = getSelectionRange(wg.root);
4004
- isSel = !!domSel && isEquivalentPosition(r.startContainer, r.startOffset, domSel.startContainer, domSel.startOffset) &&
4005
- isEquivalentPosition(r.endContainer, r.endOffset, domSel.endContainer, domSel.endOffset);
4006
- }
4007
3994
  let transfer = event.dataTransfer;
4008
- doPaste(wg, getHTML(transfer), getText(transfer), isSel ? null : range, event);
3995
+ doPaste(wg, getHTML(transfer), getText(transfer), this.unflushedSelection ? wg.state.selection : range, null);
4009
3996
  }
4010
3997
  else if ((type == "insertReplacementText" || type == "insertFromYank")) {
4011
3998
  let transfer = event.dataTransfer;
@@ -4110,6 +4097,8 @@ class InputState {
4110
4097
  }
4111
4098
  clearComposition() {
4112
4099
  let comp = this.composing;
4100
+ if (!comp)
4101
+ return false;
4113
4102
  this.composing = null;
4114
4103
  this.compositionPendingKey = true;
4115
4104
  this.compositionEndedAt = Date.now();
@@ -4196,8 +4185,15 @@ function computeHandlers(state) {
4196
4185
  function doPaste(wg, html, text, targetRange, event) {
4197
4186
  let { from, to } = targetRange || wg.state.selection.replacementRange;
4198
4187
  let slice = readClipboard(wg.state, html, text, wg.state.doc.resolve(from), wg.inputState.shiftKey);
4199
- if (!targetRange && wg.state.facet(pasteHandler).some(h => h(wg, event, slice || Slice.empty, text, html)))
4200
- return;
4188
+ if (!targetRange) {
4189
+ if (!event) {
4190
+ event = new ClipboardEvent("paste", { clipboardData: new DataTransfer });
4191
+ event.clipboardData.setData("text/html", html);
4192
+ event.clipboardData.setData("text/plain", text);
4193
+ }
4194
+ if (wg.state.facet(pasteHandler).some(h => h(wg, event, slice || Slice.empty, text, html)))
4195
+ return;
4196
+ }
4201
4197
  if (slice) {
4202
4198
  wg.dispatch({
4203
4199
  changes: { correct: { from, to, insert: slice, fit: true }, local: true },
@@ -4548,6 +4544,13 @@ const baseHandlers = {
4548
4544
  },
4549
4545
  copy,
4550
4546
  cut: copy,
4547
+ paste(wg, event) {
4548
+ let data = event.clipboardData;
4549
+ if (!data)
4550
+ return false;
4551
+ doPaste(wg, getHTML(data), getText(data), null, event);
4552
+ return true;
4553
+ },
4551
4554
  drop(wg, event) {
4552
4555
  let data = event.dataTransfer;
4553
4556
  if (!data || wg.state.readOnly)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nerd-bible/wordgard",
3
- "version": "0.6.2-beta11",
3
+ "version": "0.6.2-beta12",
4
4
  "description": "Semantic rich text editor system",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",