vue-editify 0.1.17 → 0.1.18

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/examples/App.vue CHANGED
@@ -1,11 +1,11 @@
1
1
  <template>
2
2
  <div style="padding: 80px 10px 10px 10px; height: 100%; box-sizing: border-box">
3
- <Editify ref="editify" border v-model="val" :menu="menuConfig" style="height: 100%" placeholder="Please Enter Text..." locale="zh_CN" allowPasteHtml :custom-image-paste="customImagePaste"></Editify>
3
+ <Editify ref="editify" border v-model="val" :menu="menuConfig" style="height: 100%" placeholder="Please Enter Text..." locale="zh_CN" allowPasteHtml :customHtmlPaste="customHtmlPaste"></Editify>
4
4
  </div>
5
5
  </template>
6
6
  <script setup lang="ts">
7
7
  import { ref } from 'vue'
8
- import { Editify, insertImage, insertVideo } from '../src/index'
8
+ import { AlexElement, Editify, insertImage, insertVideo } from '../src/index'
9
9
  import { MenuConfigType } from '../src/index'
10
10
  const val = ref<string>('<p><br></p>')
11
11
  const editify = ref<InstanceType<typeof Editify> | null>(null)
@@ -22,9 +22,17 @@ const menuConfig = ref<MenuConfigType>({
22
22
  show: true
23
23
  }
24
24
  })
25
- const customImagePaste = url => {
26
- console.log(url)
27
- insertImage(editify.value!.editor!, url)
25
+ const customHtmlPaste = function (elements) {
26
+ for (let i = 0; i < elements.length; i++) {
27
+ if (elements[i].hasMarks()) {
28
+ elements[i].marks['data-paste'] = 'true'
29
+ } else {
30
+ elements[i].marks = {
31
+ 'data-paste': 'true'
32
+ }
33
+ }
34
+ editify.value!.editor!.insertElement(elements[i], false)
35
+ }
28
36
  }
29
37
  </script>
30
38
  <style lang="less">
@@ -59,16 +59,24 @@ declare const _default: import('vue').DefineComponent<{
59
59
  type: BooleanConstructor;
60
60
  default: boolean;
61
61
  };
62
+ customTextPaste: {
63
+ type: import("vue").PropType<(data: string) => void | Promise<void>>;
64
+ default: null;
65
+ };
66
+ customHtmlPaste: {
67
+ type: import("vue").PropType<(elements: AlexElement[]) => void | Promise<void>>;
68
+ default: null;
69
+ };
62
70
  customImagePaste: {
63
- type: import("vue").PropType<(url: string) => void | Promise<void>>;
71
+ type: import("vue").PropType<(file: File) => void | Promise<void>>;
64
72
  default: null;
65
73
  };
66
74
  customVideoPaste: {
67
- type: import("vue").PropType<(url: string) => void | Promise<void>>;
75
+ type: import("vue").PropType<(file: File) => void | Promise<void>>;
68
76
  default: null;
69
77
  };
70
78
  customFilePaste: {
71
- type: import("vue").PropType<(url: string) => void | Promise<void>>;
79
+ type: import("vue").PropType<(file: File) => void | Promise<void>>;
72
80
  default: null;
73
81
  };
74
82
  menu: {
@@ -111,9 +119,9 @@ declare const _default: import('vue').DefineComponent<{
111
119
  allowPasteHtml: boolean;
112
120
  customTextPaste: ((text: string) => void | Promise<void>) | null;
113
121
  customHtmlPaste: ((AlexElements: AlexElement[], html: string) => void | Promise<void>) | null;
114
- customImagePaste: ((url: string) => void | Promise<void>) | null;
115
- customVideoPaste: ((url: string) => void | Promise<void>) | null;
116
- customFilePaste: ((url: string) => void | Promise<void>) | null;
122
+ customImagePaste: ((file: File) => void | Promise<void>) | null;
123
+ customVideoPaste: ((file: File) => void | Promise<void>) | null;
124
+ customFilePaste: ((file: File) => void | Promise<void>) | null;
117
125
  customMerge: ((mergeElement: AlexElement, targetElement: AlexElement) => void | Promise<void>) | null;
118
126
  customParseNode: ((el: AlexElement) => AlexElement) | null;
119
127
  useClipboard: boolean;
@@ -607,16 +615,24 @@ declare const _default: import('vue').DefineComponent<{
607
615
  type: BooleanConstructor;
608
616
  default: boolean;
609
617
  };
618
+ customTextPaste: {
619
+ type: import("vue").PropType<(data: string) => void | Promise<void>>;
620
+ default: null;
621
+ };
622
+ customHtmlPaste: {
623
+ type: import("vue").PropType<(elements: AlexElement[]) => void | Promise<void>>;
624
+ default: null;
625
+ };
610
626
  customImagePaste: {
611
- type: import("vue").PropType<(url: string) => void | Promise<void>>;
627
+ type: import("vue").PropType<(file: File) => void | Promise<void>>;
612
628
  default: null;
613
629
  };
614
630
  customVideoPaste: {
615
- type: import("vue").PropType<(url: string) => void | Promise<void>>;
631
+ type: import("vue").PropType<(file: File) => void | Promise<void>>;
616
632
  default: null;
617
633
  };
618
634
  customFilePaste: {
619
- type: import("vue").PropType<(url: string) => void | Promise<void>>;
635
+ type: import("vue").PropType<(file: File) => void | Promise<void>>;
620
636
  default: null;
621
637
  };
622
638
  menu: {
@@ -673,9 +689,11 @@ declare const _default: import('vue').DefineComponent<{
673
689
  allowPasteHtml: boolean;
674
690
  videoRatio: number;
675
691
  showWordLength: boolean;
676
- customImagePaste: (url: string) => void | Promise<void>;
677
- customVideoPaste: (url: string) => void | Promise<void>;
678
- customFilePaste: (url: string) => void | Promise<void>;
692
+ customTextPaste: (data: string) => void | Promise<void>;
693
+ customHtmlPaste: (elements: AlexElement[]) => void | Promise<void>;
694
+ customImagePaste: (file: File) => void | Promise<void>;
695
+ customVideoPaste: (file: File) => void | Promise<void>;
696
+ customFilePaste: (file: File) => void | Promise<void>;
679
697
  pasteKeepMarks: ObjectType;
680
698
  pasteKeepStyles: ObjectType;
681
699
  customParseNode: (el: AlexElement) => AlexElement;
@@ -70,16 +70,24 @@ export declare const EditifyProps: {
70
70
  type: BooleanConstructor;
71
71
  default: boolean;
72
72
  };
73
+ customTextPaste: {
74
+ type: PropType<(data: string) => void | Promise<void>>;
75
+ default: null;
76
+ };
77
+ customHtmlPaste: {
78
+ type: PropType<(elements: AlexElement[]) => void | Promise<void>>;
79
+ default: null;
80
+ };
73
81
  customImagePaste: {
74
- type: PropType<(url: string) => void | Promise<void>>;
82
+ type: PropType<(file: File) => void | Promise<void>>;
75
83
  default: null;
76
84
  };
77
85
  customVideoPaste: {
78
- type: PropType<(url: string) => void | Promise<void>>;
86
+ type: PropType<(file: File) => void | Promise<void>>;
79
87
  default: null;
80
88
  };
81
89
  customFilePaste: {
82
- type: PropType<(url: string) => void | Promise<void>>;
90
+ type: PropType<(file: File) => void | Promise<void>>;
83
91
  default: null;
84
92
  };
85
93
  menu: {
package/lib/editify.es.js CHANGED
@@ -2978,11 +2978,11 @@ const doPaste = async function(html, text, files) {
2978
2978
  } else {
2979
2979
  let length = files.length;
2980
2980
  for (let i = 0; i < length; i++) {
2981
- const url = await file$1.dataFileToBase64(files[i]);
2982
2981
  if (files[i].type.startsWith("image/")) {
2983
2982
  if (typeof this.customImagePaste == "function") {
2984
- await this.customImagePaste.apply(this, [url]);
2983
+ await this.customImagePaste.apply(this, [files[i]]);
2985
2984
  } else {
2985
+ const url = await file$1.dataFileToBase64(files[i]);
2986
2986
  const image = new AlexElement(
2987
2987
  "closed",
2988
2988
  "img",
@@ -2997,8 +2997,9 @@ const doPaste = async function(html, text, files) {
2997
2997
  }
2998
2998
  } else if (files[i].type.startsWith("video/")) {
2999
2999
  if (typeof this.customVideoPaste == "function") {
3000
- await this.customVideoPaste.apply(this, [url]);
3000
+ await this.customVideoPaste.apply(this, [files[i]]);
3001
3001
  } else {
3002
+ const url = await file$1.dataFileToBase64(files[i]);
3002
3003
  const video = new AlexElement(
3003
3004
  "closed",
3004
3005
  "video",
@@ -3013,7 +3014,7 @@ const doPaste = async function(html, text, files) {
3013
3014
  }
3014
3015
  } else {
3015
3016
  if (typeof this.customFilePaste == "function") {
3016
- await this.customFilePaste.apply(this, [url]);
3017
+ await this.customFilePaste.apply(this, [files[i]]);
3017
3018
  }
3018
3019
  }
3019
3020
  }
@@ -24789,6 +24790,16 @@ const EditifyProps = {
24789
24790
  type: Boolean,
24790
24791
  default: false
24791
24792
  },
24793
+ //自定义粘贴纯文字
24794
+ customTextPaste: {
24795
+ type: Function,
24796
+ default: null
24797
+ },
24798
+ //自定义粘贴html
24799
+ customHtmlPaste: {
24800
+ type: Function,
24801
+ default: null
24802
+ },
24792
24803
  //自定义粘贴图片
24793
24804
  customImagePaste: {
24794
24805
  type: Function,
@@ -25227,9 +25238,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
25227
25238
  allowPaste: props.allowPaste,
25228
25239
  allowCut: props.allowCut,
25229
25240
  allowPasteHtml: props.allowPasteHtml,
25241
+ customTextPaste: props.customTextPaste,
25230
25242
  customImagePaste: props.customImagePaste,
25231
25243
  customVideoPaste: props.customVideoPaste,
25232
25244
  customFilePaste: props.customFilePaste,
25245
+ customHtmlPaste: handleCustomHtmlPaste,
25233
25246
  customMerge: handleCustomMerge,
25234
25247
  customParseNode: handleCustomParseNode
25235
25248
  });
@@ -25239,7 +25252,6 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
25239
25252
  editor.value.on("blur", handleEditorBlur);
25240
25253
  editor.value.on("insertParagraph", handleInsertParagraph);
25241
25254
  editor.value.on("rangeUpdate", handleRangeUpdate);
25242
- editor.value.on("pasteHtml", handlePasteHtml);
25243
25255
  editor.value.on("deleteInStart", handleDeleteInStart);
25244
25256
  editor.value.on("deleteComplete", handleDeleteComplete);
25245
25257
  editor.value.on("afterRender", handleAfterRender);
@@ -25359,6 +25371,37 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
25359
25371
  }
25360
25372
  }
25361
25373
  };
25374
+ const handleCustomHtmlPaste = async (elements) => {
25375
+ const keepStyles = Object.assign(pasteKeepData.styles, props.pasteKeepStyles || {});
25376
+ const keepMarks = Object.assign(pasteKeepData.marks, props.pasteKeepMarks || {});
25377
+ AlexElement.flatElements(elements).forEach((el) => {
25378
+ let marks = {};
25379
+ let styles = {};
25380
+ if (el.hasMarks()) {
25381
+ for (let key in keepMarks) {
25382
+ if (el.marks.hasOwnProperty(key) && (Array.isArray(keepMarks[key]) && keepMarks[key].includes(el.parsedom) || keepMarks[key] == "*")) {
25383
+ marks[key] = el.marks[key];
25384
+ }
25385
+ }
25386
+ el.marks = marks;
25387
+ }
25388
+ if (el.hasStyles() && !el.isText()) {
25389
+ for (let key in keepStyles) {
25390
+ if (el.styles.hasOwnProperty(key) && (Array.isArray(keepStyles[key]) && keepStyles[key].includes(el.parsedom) || keepStyles[key] == "*")) {
25391
+ styles[key] = el.styles[key];
25392
+ }
25393
+ }
25394
+ el.styles = styles;
25395
+ }
25396
+ });
25397
+ if (typeof props.customHtmlPaste == "function") {
25398
+ await props.customHtmlPaste.apply(this, [elements]);
25399
+ } else {
25400
+ for (let i = 0; i < elements.length; i++) {
25401
+ editor.value.insertElement(elements[i], false);
25402
+ }
25403
+ }
25404
+ };
25362
25405
  const handleCustomMerge = (ele, preEle) => {
25363
25406
  const uneditable = preEle.getUneditableElement();
25364
25407
  if (uneditable) {
@@ -25498,30 +25541,6 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
25498
25541
  }, 200);
25499
25542
  emits("rangeupdate");
25500
25543
  };
25501
- const handlePasteHtml = (elements) => {
25502
- const keepStyles = Object.assign(pasteKeepData.styles, props.pasteKeepStyles || {});
25503
- const keepMarks = Object.assign(pasteKeepData.marks, props.pasteKeepMarks || {});
25504
- AlexElement.flatElements(elements).forEach((el) => {
25505
- let marks = {};
25506
- let styles = {};
25507
- if (el.hasMarks()) {
25508
- for (let key in keepMarks) {
25509
- if (el.marks.hasOwnProperty(key) && (Array.isArray(keepMarks[key]) && keepMarks[key].includes(el.parsedom) || keepMarks[key] == "*")) {
25510
- marks[key] = el.marks[key];
25511
- }
25512
- }
25513
- el.marks = marks;
25514
- }
25515
- if (el.hasStyles() && !el.isText()) {
25516
- for (let key in keepStyles) {
25517
- if (el.styles.hasOwnProperty(key) && (Array.isArray(keepStyles[key]) && keepStyles[key].includes(el.parsedom) || keepStyles[key] == "*")) {
25518
- styles[key] = el.styles[key];
25519
- }
25520
- }
25521
- el.styles = styles;
25522
- }
25523
- });
25524
- };
25525
25544
  const handleDeleteInStart = (element2) => {
25526
25545
  if (element2.isBlock()) {
25527
25546
  elementToParagraph(element2);
@@ -25719,8 +25738,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
25719
25738
  };
25720
25739
  }
25721
25740
  });
25722
- const Editify = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-fed58116"]]);
25723
- const version = "0.1.17";
25741
+ const Editify = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-c0db2307"]]);
25742
+ const version = "0.1.18";
25724
25743
  const install = (app) => {
25725
25744
  app.component(Editify.name, Editify);
25726
25745
  };