vue-editify 0.1.25 → 0.1.26

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.
@@ -128,7 +128,6 @@ declare const _default: import('vue').DefineComponent<{
128
128
  customFilePaste: ((file: File) => void | Promise<void>) | null;
129
129
  customMerge: ((mergeElement: AlexElement, targetElement: AlexElement) => void | Promise<void>) | null;
130
130
  customParseNode: ((el: AlexElement) => AlexElement) | null;
131
- useClipboard: boolean;
132
131
  history: {
133
132
  records: {
134
133
  stack: {
@@ -419,14 +418,6 @@ declare const _default: import('vue').DefineComponent<{
419
418
  __innerSelectionChange: boolean;
420
419
  __chineseInputTimer: any;
421
420
  initRange: () => void;
422
- copy: (isCut?: boolean | undefined) => Promise<{
423
- text: string;
424
- html: string;
425
- } | undefined>;
426
- cut: () => Promise<{
427
- text: string;
428
- html: string;
429
- } | undefined>;
430
421
  delete: () => void;
431
422
  insertText: (data: string) => void;
432
423
  insertParagraph: () => void;
package/lib/editify.es.js CHANGED
@@ -1494,17 +1494,6 @@ const isContains = function(parentNode, childNode) {
1494
1494
  }
1495
1495
  return element$1.isContains(parentNode, childNode);
1496
1496
  };
1497
- const canUseClipboard = function() {
1498
- if (!window.ClipboardItem) {
1499
- console.warn("window.ClipboardItem must be obtained in a secure environment, such as localhost, 127.0.0.1, or https, so the editor's copy, paste, and cut functions cannot be used");
1500
- return false;
1501
- }
1502
- if (!navigator.clipboard) {
1503
- console.warn("navigator.clipboard must be obtained in a secure environment, such as localhost, 127.0.0.1, or https, so the editor's copy, paste, and cut functions cannot be used");
1504
- return false;
1505
- }
1506
- return true;
1507
- };
1508
1497
  const initEditorNode = function(node) {
1509
1498
  if (typeof node == "string" && node) {
1510
1499
  node = document.body.querySelector(node);
@@ -2649,6 +2638,98 @@ const isRedo = function(e) {
2649
2638
  }
2650
2639
  return e.key == "z" && e.ctrlKey && !e.metaKey && !e.shiftKey && !e.altKey;
2651
2640
  };
2641
+ const setClipboardData = function(data2, result) {
2642
+ let html = "";
2643
+ let text = "";
2644
+ result.forEach((item) => {
2645
+ const newEl = item.element.clone();
2646
+ if (item.offset) {
2647
+ newEl.textContent = newEl.textContent.substring(item.offset[0], item.offset[1]);
2648
+ }
2649
+ newEl.__render();
2650
+ html += newEl.elm.outerHTML;
2651
+ text += newEl.elm.innerText;
2652
+ });
2653
+ data2.setData("text/plain", text);
2654
+ data2.setData("text/html", html);
2655
+ return { html, text };
2656
+ };
2657
+ const doPaste = async function(html, text, files) {
2658
+ if (html) {
2659
+ if (this.allowPasteHtml) {
2660
+ const elements = this.parseHtml(html).filter((el) => {
2661
+ return !el.isEmpty();
2662
+ });
2663
+ if (typeof this.customHtmlPaste == "function") {
2664
+ await this.customHtmlPaste.apply(this, [elements, html]);
2665
+ } else {
2666
+ for (let i = 0; i < elements.length; i++) {
2667
+ this.insertElement(elements[i], false);
2668
+ }
2669
+ this.emit("pasteHtml", elements, html);
2670
+ }
2671
+ } else if (text) {
2672
+ if (typeof this.customTextPaste == "function") {
2673
+ await this.customTextPaste.apply(this, [text]);
2674
+ } else {
2675
+ this.insertText(text);
2676
+ this.emit("pasteText", text);
2677
+ }
2678
+ }
2679
+ } else {
2680
+ if (text) {
2681
+ if (typeof this.customTextPaste == "function") {
2682
+ await this.customTextPaste.apply(this, [text]);
2683
+ } else {
2684
+ this.insertText(text);
2685
+ this.emit("pasteText", text);
2686
+ }
2687
+ } else {
2688
+ let length = files.length;
2689
+ for (let i = 0; i < length; i++) {
2690
+ if (files[i].type.startsWith("image/")) {
2691
+ if (typeof this.customImagePaste == "function") {
2692
+ await this.customImagePaste.apply(this, [files[i]]);
2693
+ } else {
2694
+ const url = await file$1.dataFileToBase64(files[i]);
2695
+ const image = new AlexElement(
2696
+ "closed",
2697
+ "img",
2698
+ {
2699
+ src: url
2700
+ },
2701
+ null,
2702
+ null
2703
+ );
2704
+ this.insertElement(image);
2705
+ this.emit("pasteImage", url);
2706
+ }
2707
+ } else if (files[i].type.startsWith("video/")) {
2708
+ if (typeof this.customVideoPaste == "function") {
2709
+ await this.customVideoPaste.apply(this, [files[i]]);
2710
+ } else {
2711
+ const url = await file$1.dataFileToBase64(files[i]);
2712
+ const video = new AlexElement(
2713
+ "closed",
2714
+ "video",
2715
+ {
2716
+ src: url
2717
+ },
2718
+ null,
2719
+ null
2720
+ );
2721
+ this.insertElement(video);
2722
+ this.emit("pasteVideo", url);
2723
+ }
2724
+ } else {
2725
+ if (typeof this.customFilePaste == "function") {
2726
+ await this.customFilePaste.apply(this, [files[i]]);
2727
+ }
2728
+ }
2729
+ }
2730
+ }
2731
+ }
2732
+ };
2652
2733
  const checkStack = function() {
2653
2734
  const elements = AlexElement.flatElements(this.stack).filter((el) => {
2654
2735
  return !el.isEmpty() && !AlexElement.VOID_NODES.includes(el.parsedom);
@@ -2939,91 +3020,38 @@ const handleKeydown = function(e) {
2939
3020
  };
2940
3021
  const handleCopy = async function(e) {
2941
3022
  e.preventDefault();
2942
- await this.copy();
3023
+ if (!this.range) {
3024
+ return;
3025
+ }
3026
+ if (!this.allowCopy) {
3027
+ return;
3028
+ }
3029
+ const event2 = e;
3030
+ const result = this.getElementsByRange().list;
3031
+ if (event2.clipboardData && result.length) {
3032
+ const { text, html } = setClipboardData.apply(this, [event2.clipboardData, result]);
3033
+ this.emit("copy", text, html);
3034
+ }
2943
3035
  };
2944
3036
  const handleCut = async function(e) {
2945
3037
  e.preventDefault();
2946
- const result = await this.cut();
2947
- if (result && !this.disabled) {
2948
- this.formatElementStack();
2949
- this.domRender();
2950
- this.rangeRender();
3038
+ if (!this.range) {
3039
+ return;
2951
3040
  }
2952
- };
2953
- const doPaste = async function(html, text, files) {
2954
- if (html) {
2955
- if (this.allowPasteHtml) {
2956
- const elements = this.parseHtml(html).filter((el) => {
2957
- return !el.isEmpty();
2958
- });
2959
- if (typeof this.customHtmlPaste == "function") {
2960
- await this.customHtmlPaste.apply(this, [elements, html]);
2961
- } else {
2962
- for (let i = 0; i < elements.length; i++) {
2963
- this.insertElement(elements[i], false);
2964
- }
2965
- this.emit("pasteHtml", elements, html);
2966
- }
2967
- } else if (text) {
2968
- if (typeof this.customTextPaste == "function") {
2969
- await this.customTextPaste.apply(this, [text]);
2970
- } else {
2971
- this.insertText(text);
2972
- this.emit("pasteText", text);
2973
- }
2974
- }
2975
- } else {
2976
- if (text) {
2977
- if (typeof this.customTextPaste == "function") {
2978
- await this.customTextPaste.apply(this, [text]);
2979
- } else {
2980
- this.insertText(text);
2981
- this.emit("pasteText", text);
2982
- }
2983
- } else {
2984
- let length = files.length;
2985
- for (let i = 0; i < length; i++) {
2986
- if (files[i].type.startsWith("image/")) {
2987
- if (typeof this.customImagePaste == "function") {
2988
- await this.customImagePaste.apply(this, [files[i]]);
2989
- } else {
2990
- const url = await file$1.dataFileToBase64(files[i]);
2991
- const image = new AlexElement(
2992
- "closed",
2993
- "img",
2994
- {
2995
- src: url
2996
- },
2997
- null,
2998
- null
2999
- );
3000
- this.insertElement(image);
3001
- this.emit("pasteImage", url);
3002
- }
3003
- } else if (files[i].type.startsWith("video/")) {
3004
- if (typeof this.customVideoPaste == "function") {
3005
- await this.customVideoPaste.apply(this, [files[i]]);
3006
- } else {
3007
- const url = await file$1.dataFileToBase64(files[i]);
3008
- const video = new AlexElement(
3009
- "closed",
3010
- "video",
3011
- {
3012
- src: url
3013
- },
3014
- null,
3015
- null
3016
- );
3017
- this.insertElement(video);
3018
- this.emit("pasteVideo", url);
3019
- }
3020
- } else {
3021
- if (typeof this.customFilePaste == "function") {
3022
- await this.customFilePaste.apply(this, [files[i]]);
3023
- }
3024
- }
3025
- }
3041
+ if (!this.allowCut) {
3042
+ return;
3043
+ }
3044
+ const event2 = e;
3045
+ const result = this.getElementsByRange().list;
3046
+ if (event2.clipboardData && result.length) {
3047
+ const { text, html } = setClipboardData.apply(this, [event2.clipboardData, result]);
3048
+ if (!this.disabled) {
3049
+ this.delete();
3050
+ this.formatElementStack();
3051
+ this.domRender();
3052
+ this.rangeRender();
3026
3053
  }
3054
+ this.emit("cut", text, html);
3027
3055
  }
3028
3056
  };
3029
3057
  const handlePaste = async function(e) {
@@ -3101,7 +3129,6 @@ class AlexEditor {
3101
3129
  __publicField(this, "customFilePaste");
3102
3130
  __publicField(this, "customMerge");
3103
3131
  __publicField(this, "customParseNode");
3104
- __publicField(this, "useClipboard", canUseClipboard());
3105
3132
  __publicField(this, "history", new AlexHistory());
3106
3133
  __publicField(this, "stack");
3107
3134
  __publicField(this, "range", null);
@@ -3153,67 +3180,6 @@ class AlexEditor {
3153
3180
  const focus = new AlexPoint(firstElement, 0);
3154
3181
  this.range = new AlexRange(anchor, focus);
3155
3182
  }
3156
- /**
3157
- * 根据光标执行复制操作
3158
- * isCut表示是否在执行剪切操作,默认为false,这个参数仅在内部使用
3159
- */
3160
- async copy(isCut = false) {
3161
- if (!this.useClipboard) {
3162
- return;
3163
- }
3164
- if (!this.range) {
3165
- return;
3166
- }
3167
- if (!this.allowCopy) {
3168
- return;
3169
- }
3170
- let result = this.getElementsByRange().list;
3171
- if (result.length == 0) {
3172
- return;
3173
- }
3174
- let html = "";
3175
- let text = "";
3176
- result.forEach((item) => {
3177
- const newEl = item.element.clone();
3178
- if (item.offset) {
3179
- newEl.textContent = newEl.textContent.substring(item.offset[0], item.offset[1]);
3180
- }
3181
- newEl.__render();
3182
- html += newEl.elm.outerHTML;
3183
- text += newEl.elm.innerText;
3184
- });
3185
- const clipboardItem = new window.ClipboardItem({
3186
- "text/html": new Blob([html], { type: "text/html" }),
3187
- "text/plain": new Blob([text], { type: "text/plain" })
3188
- });
3189
- await navigator.clipboard.write([clipboardItem]);
3190
- if (!isCut) {
3191
- this.emit("copy", text, html);
3192
- }
3193
- return { text, html };
3194
- }
3195
- /**
3196
- * 根据光标进行剪切操作
3197
- */
3198
- async cut() {
3199
- if (!this.useClipboard) {
3200
- return;
3201
- }
3202
- if (!this.range) {
3203
- return;
3204
- }
3205
- if (!this.allowCut) {
3206
- return;
3207
- }
3208
- const result = await this.copy(true);
3209
- if (result) {
3210
- if (!this.disabled) {
3211
- this.delete();
3212
- }
3213
- this.emit("cut", result.text, result.html);
3214
- }
3215
- return result;
3216
- }
3217
3183
  /**
3218
3184
  * 根据光标进行删除操作
3219
3185
  */
@@ -26177,7 +26143,7 @@ const attachment = (options) => {
26177
26143
  const install = (app) => {
26178
26144
  app.component(Editify.name, Editify);
26179
26145
  };
26180
- const version = "0.1.25";
26146
+ const version = "0.1.26";
26181
26147
  export {
26182
26148
  AlexElement,
26183
26149
  Editify,