vue-editify 0.1.17 → 0.1.19

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.
Files changed (80) hide show
  1. package/README.md +3 -3
  2. package/examples/App.vue +62 -53
  3. package/examples/main.ts +4 -4
  4. package/lib/components/button/button.vue.d.ts +11 -11
  5. package/lib/components/checkbox/checkbox.vue.d.ts +8 -8
  6. package/lib/components/colors/colors.vue.d.ts +4 -4
  7. package/lib/components/icon/icon.vue.d.ts +1 -1
  8. package/lib/components/insertImage/insertImage.vue.d.ts +9 -9
  9. package/lib/components/insertLink/insertLink.vue.d.ts +2 -2
  10. package/lib/components/insertTable/insertTable.vue.d.ts +2 -2
  11. package/lib/components/insertVideo/insertVideo.vue.d.ts +9 -9
  12. package/lib/components/layer/layer.vue.d.ts +9 -9
  13. package/lib/components/menu/menu.vue.d.ts +4 -4
  14. package/lib/components/toolbar/toolbar.vue.d.ts +9 -9
  15. package/lib/components/tooltip/tooltip.vue.d.ts +1 -1
  16. package/lib/components/triangle/triangle.vue.d.ts +4 -4
  17. package/lib/editify/editify.vue.d.ts +88 -70
  18. package/lib/editify/props.d.ts +11 -3
  19. package/lib/editify.es.js +65 -46
  20. package/lib/editify.umd.js +1 -1
  21. package/lib/index.d.ts +1 -1
  22. package/lib/style.css +1 -1
  23. package/package.json +45 -45
  24. package/src/components/button/button.less +145 -145
  25. package/src/components/button/button.vue +197 -197
  26. package/src/components/button/props.ts +95 -95
  27. package/src/components/checkbox/checkbox.less +84 -84
  28. package/src/components/checkbox/checkbox.vue +68 -68
  29. package/src/components/checkbox/props.ts +49 -49
  30. package/src/components/colors/colors.less +75 -75
  31. package/src/components/colors/colors.vue +36 -36
  32. package/src/components/colors/props.ts +29 -29
  33. package/src/components/icon/icon.less +14 -14
  34. package/src/components/icon/icon.vue +12 -12
  35. package/src/components/icon/props.ts +11 -11
  36. package/src/components/insertImage/insertImage.less +135 -135
  37. package/src/components/insertImage/insertImage.vue +146 -146
  38. package/src/components/insertImage/props.ts +43 -43
  39. package/src/components/insertLink/insertLink.less +64 -64
  40. package/src/components/insertLink/insertLink.vue +58 -58
  41. package/src/components/insertLink/props.ts +16 -16
  42. package/src/components/insertTable/insertTable.less +54 -54
  43. package/src/components/insertTable/insertTable.vue +85 -85
  44. package/src/components/insertTable/props.ts +27 -27
  45. package/src/components/insertVideo/insertVideo.less +135 -135
  46. package/src/components/insertVideo/insertVideo.vue +146 -146
  47. package/src/components/insertVideo/props.ts +43 -43
  48. package/src/components/layer/layer.less +49 -49
  49. package/src/components/layer/layer.vue +598 -598
  50. package/src/components/layer/props.ts +71 -71
  51. package/src/components/menu/menu.less +63 -63
  52. package/src/components/menu/menu.vue +1569 -1569
  53. package/src/components/menu/props.ts +17 -17
  54. package/src/components/toolbar/props.ts +35 -35
  55. package/src/components/toolbar/toolbar.less +89 -89
  56. package/src/components/toolbar/toolbar.vue +1101 -1101
  57. package/src/components/tooltip/props.ts +21 -21
  58. package/src/components/tooltip/tooltip.less +23 -23
  59. package/src/components/tooltip/tooltip.vue +37 -37
  60. package/src/components/triangle/props.ts +26 -26
  61. package/src/components/triangle/triangle.less +79 -79
  62. package/src/components/triangle/triangle.vue +65 -65
  63. package/src/core/function.ts +1144 -1144
  64. package/src/core/rule.ts +259 -259
  65. package/src/core/tool.ts +1137 -1137
  66. package/src/css/base.less +30 -30
  67. package/src/css/hljs.less +54 -54
  68. package/src/editify/editify.less +404 -403
  69. package/src/editify/editify.vue +803 -792
  70. package/src/editify/props.ts +156 -146
  71. package/src/hljs/index.ts +197 -197
  72. package/src/icon/iconfont.css +219 -219
  73. package/src/index.ts +32 -32
  74. package/src/locale/en_US.ts +88 -88
  75. package/src/locale/index.ts +12 -12
  76. package/src/locale/zh_CN.ts +88 -88
  77. package/tsconfig.json +27 -27
  78. package/tsconfig.node.json +11 -11
  79. package/vite-env.d.ts +1 -1
  80. package/vite.config.ts +42 -42
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
  }
@@ -20002,7 +20003,7 @@ const _export_sfc = (sfc, props) => {
20002
20003
  }
20003
20004
  return target;
20004
20005
  };
20005
- const Triangle = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["__scopeId", "data-v-e1abc967"]]);
20006
+ const Triangle = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["__scopeId", "data-v-c92dc653"]]);
20006
20007
  const LayerProps = {
20007
20008
  //是否显示
20008
20009
  modelValue: {
@@ -20618,7 +20619,7 @@ const _sfc_main$c = /* @__PURE__ */ defineComponent({
20618
20619
  };
20619
20620
  }
20620
20621
  });
20621
- const Layer = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["__scopeId", "data-v-ac221d1e"]]);
20622
+ const Layer = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["__scopeId", "data-v-a390950f"]]);
20622
20623
  const TooltipProps = {
20623
20624
  //提示内容
20624
20625
  content: {
@@ -20694,7 +20695,7 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
20694
20695
  };
20695
20696
  }
20696
20697
  });
20697
- const Tooltip = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-8372de0b"]]);
20698
+ const Tooltip = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-92a30ff2"]]);
20698
20699
  const IconProps = {
20699
20700
  //图标值
20700
20701
  value: {
@@ -20716,7 +20717,7 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
20716
20717
  };
20717
20718
  }
20718
20719
  });
20719
- const Icon = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["__scopeId", "data-v-6e00035b"]]);
20720
+ const Icon = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["__scopeId", "data-v-a639e8dc"]]);
20720
20721
  const ButtonProps = {
20721
20722
  //按钮类型
20722
20723
  type: {
@@ -21028,7 +21029,7 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
21028
21029
  };
21029
21030
  }
21030
21031
  });
21031
- const Button = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["__scopeId", "data-v-b31edeb8"]]);
21032
+ const Button = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["__scopeId", "data-v-73d00a90"]]);
21032
21033
  const CheckboxProps = {
21033
21034
  //是否禁用
21034
21035
  disabled: {
@@ -21157,7 +21158,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
21157
21158
  };
21158
21159
  }
21159
21160
  });
21160
- const Checkbox = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-09512b2d"]]);
21161
+ const Checkbox = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-dae0c4a0"]]);
21161
21162
  const ColorsProps = {
21162
21163
  //颜色数组
21163
21164
  data: {
@@ -21234,7 +21235,7 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
21234
21235
  };
21235
21236
  }
21236
21237
  });
21237
- const Colors = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__scopeId", "data-v-e09149c7"]]);
21238
+ const Colors = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__scopeId", "data-v-8be143e5"]]);
21238
21239
  const ToolbarProps = {
21239
21240
  //是否显示
21240
21241
  modelValue: {
@@ -22764,7 +22765,7 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
22764
22765
  };
22765
22766
  }
22766
22767
  });
22767
- const Toolbar = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-44b03ca9"]]);
22768
+ const Toolbar = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-485ac49d"]]);
22768
22769
  const InsertLinkProps = {
22769
22770
  //主题色
22770
22771
  color: {
@@ -22867,7 +22868,7 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
22867
22868
  };
22868
22869
  }
22869
22870
  });
22870
- const InsertLink = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-f5a2ce93"]]);
22871
+ const InsertLink = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-f5a1fedb"]]);
22871
22872
  const InsertImageProps = {
22872
22873
  //主题色
22873
22874
  color: {
@@ -23065,7 +23066,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
23065
23066
  };
23066
23067
  }
23067
23068
  });
23068
- const InsertImage = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-20eec429"]]);
23069
+ const InsertImage = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-876ab662"]]);
23069
23070
  const InsertVideoProps = {
23070
23071
  //主题色
23071
23072
  color: {
@@ -23263,7 +23264,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
23263
23264
  };
23264
23265
  }
23265
23266
  });
23266
- const InsertVideo = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-d90909eb"]]);
23267
+ const InsertVideo = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-4131f4db"]]);
23267
23268
  const InsertTableProps = {
23268
23269
  //主题色
23269
23270
  color: {
@@ -23281,7 +23282,7 @@ const InsertTableProps = {
23281
23282
  default: 10
23282
23283
  }
23283
23284
  };
23284
- const _withScopeId = (n) => (pushScopeId("data-v-961451b7"), n = n(), popScopeId(), n);
23285
+ const _withScopeId = (n) => (pushScopeId("data-v-49473a7c"), n = n(), popScopeId(), n);
23285
23286
  const _hoisted_1$2 = { class: "editify-table" };
23286
23287
  const _hoisted_2$1 = ["onMouseenter", "onClick"];
23287
23288
  const _hoisted_3$1 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createElementVNode("span", null, null, -1));
@@ -23372,7 +23373,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
23372
23373
  };
23373
23374
  }
23374
23375
  });
23375
- const InsertTable = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-961451b7"]]);
23376
+ const InsertTable = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-49473a7c"]]);
23376
23377
  const MenuProps = {
23377
23378
  //菜单栏配置
23378
23379
  config: {
@@ -24714,7 +24715,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
24714
24715
  };
24715
24716
  }
24716
24717
  });
24717
- const Menu = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-226bbacd"]]);
24718
+ const Menu = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-98216646"]]);
24718
24719
  const EditifyProps = {
24719
24720
  //国际化语言类型
24720
24721
  locale: {
@@ -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);
@@ -25340,7 +25352,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
25340
25352
  const element$12 = editor.value.getElementByKey(key);
25341
25353
  if (isTask(element$12)) {
25342
25354
  const rect = element.getElementBounding(elm);
25343
- if (e.pageX >= Math.abs(rect.left) && e.pageX <= Math.abs(rect.left + 16) && e.pageY >= Math.abs(rect.top + 2) && e.pageY <= Math.abs(rect.top + 18)) {
25355
+ if (e.pageX >= Math.abs(rect.left) && e.pageX <= Math.abs(rect.left + 16) && e.pageY >= Math.abs(rect.top + elm.offsetHeight / 2 - 8) && e.pageY <= Math.abs(rect.top + elm.offsetHeight / 2 + 8)) {
25344
25356
  if (element$12.marks["data-editify-task"] == "checked") {
25345
25357
  element$12.marks["data-editify-task"] = "uncheck";
25346
25358
  } else {
@@ -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-8c5f5909"]]);
25742
+ const version = "0.1.19";
25724
25743
  const install = (app) => {
25725
25744
  app.component(Editify.name, Editify);
25726
25745
  };