vue-editify 0.1.27 → 0.1.29
Sign up to get free protection for your applications and to get access to all the features.
- package/lib/core/function.d.ts +265 -0
- package/lib/core/rule.d.ts +32 -0
- package/lib/core/tool.d.ts +50 -1
- package/lib/editify.es.js +129 -65
- package/lib/editify.umd.js +1 -1
- package/lib/hljs/index.d.ts +9 -0
- package/lib/index.d.ts +1 -1
- package/lib/locale/index.d.ts +5 -0
- package/lib/plugins/attachment/index.d.ts +19 -0
- package/lib/style.css +1 -1
- package/package.json +2 -2
- package/src/components/menu/menu.vue +45 -9
- package/src/core/function.ts +265 -42
- package/src/core/rule.ts +40 -7
- package/src/core/tool.ts +51 -9
- package/src/editify/editify.less +2 -1
- package/src/editify/editify.vue +3 -11
- package/src/hljs/index.ts +9 -2
- package/src/index.ts +1 -1
- package/src/locale/index.ts +5 -2
- package/src/plugins/attachment/index.ts +101 -57
- package/vite.config.ts.timestamp-1714200628309-967ea10c27215.mjs +0 -48
package/lib/editify.es.js
CHANGED
@@ -2622,7 +2622,23 @@ const mergeWithParentElement = function(element2) {
|
|
2622
2622
|
};
|
2623
2623
|
const mergeWithSpaceTextElement = function(element2) {
|
2624
2624
|
if (element2.isText()) {
|
2625
|
-
|
2625
|
+
let val = element2.textContent;
|
2626
|
+
let i = 0;
|
2627
|
+
while (i < val.length) {
|
2628
|
+
const chart = val.charAt(i);
|
2629
|
+
if (isSpaceText(chart) && i > 0 && isSpaceText(val.charAt(i - 1))) {
|
2630
|
+
if (this.range && this.range.anchor.element.isEqual(element2) && this.range.anchor.offset >= i + 1) {
|
2631
|
+
this.range.anchor.offset -= 1;
|
2632
|
+
}
|
2633
|
+
if (this.range && this.range.focus.element.isEqual(element2) && this.range.focus.offset >= i + 1) {
|
2634
|
+
this.range.focus.offset -= 1;
|
2635
|
+
}
|
2636
|
+
val = string$1.delete(val, i, 1);
|
2637
|
+
} else {
|
2638
|
+
i++;
|
2639
|
+
}
|
2640
|
+
}
|
2641
|
+
element2.textContent = val;
|
2626
2642
|
}
|
2627
2643
|
};
|
2628
2644
|
const { Mac } = platform.os();
|
@@ -4496,7 +4512,7 @@ class AlexEditor {
|
|
4496
4512
|
event$1.off(this.$el, "beforeinput.alex_editor compositionstart.alex_editor compositionupdate.alex_editor compositionend.alex_editor keydown.alex_editor cut.alex_editor paste.alex_editor copy.alex_editor dragstart.alex_editor drop.alex_editor focus.alex_editor blur.alex_editor");
|
4497
4513
|
}
|
4498
4514
|
}
|
4499
|
-
const version$2 = "1.3.
|
4515
|
+
const version$2 = "1.3.33";
|
4500
4516
|
console.log(`%c alex-editor %c v${version$2} `, "padding: 2px 1px; border-radius: 3px 0 0 3px; color: #fff; background: #606060; font-weight: bold;", "padding: 2px 1px; border-radius: 0 3px 3px 0; color: #fff; background: #42c02e; font-weight: bold;");
|
4501
4517
|
const number = {
|
4502
4518
|
/**
|
@@ -23379,6 +23395,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
23379
23395
|
props: MenuProps,
|
23380
23396
|
setup(__props, { expose: __expose }) {
|
23381
23397
|
const props = __props;
|
23398
|
+
const $editTrans = inject("$editTrans");
|
23382
23399
|
const editify = inject("editify");
|
23383
23400
|
const isSourceView = inject("isSourceView");
|
23384
23401
|
const isFullScreen = inject("isFullScreen");
|
@@ -23386,7 +23403,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
23386
23403
|
const editor = inject("editor");
|
23387
23404
|
const dataRangeCaches = inject("dataRangeCaches");
|
23388
23405
|
const showBorder = inject("showBorder");
|
23389
|
-
const
|
23406
|
+
const pluginResultList = inject("pluginResultList");
|
23390
23407
|
const undoConfig = ref({
|
23391
23408
|
show: props.config.undo.show,
|
23392
23409
|
leftBorder: props.config.undo.leftBorder,
|
@@ -23659,8 +23676,15 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
23659
23676
|
return editify.props.disabled || !canUseMenu.value;
|
23660
23677
|
});
|
23661
23678
|
const menuNames = computed(() => {
|
23662
|
-
|
23663
|
-
|
23679
|
+
let pluginSequence = {};
|
23680
|
+
pluginResultList.value.forEach((pluginResult) => {
|
23681
|
+
if (pluginResult.menu) {
|
23682
|
+
pluginSequence[pluginResult.name] = pluginResult.menu.sequence;
|
23683
|
+
}
|
23684
|
+
});
|
23685
|
+
pluginSequence = mergeObject(pluginSequence, props.config.sequence);
|
23686
|
+
return Object.keys(pluginSequence).sort((a, b) => {
|
23687
|
+
if (pluginSequence[a] > pluginSequence[b]) {
|
23664
23688
|
return 1;
|
23665
23689
|
}
|
23666
23690
|
return -1;
|
@@ -23688,6 +23712,15 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
23688
23712
|
}
|
23689
23713
|
return showBorder.value;
|
23690
23714
|
});
|
23715
|
+
const menuExtends = computed(() => {
|
23716
|
+
let pluginExtends = {};
|
23717
|
+
pluginResultList.value.forEach((pluginResult) => {
|
23718
|
+
if (pluginResult.menu) {
|
23719
|
+
pluginExtends[pluginResult.name] = pluginResult.menu.extend;
|
23720
|
+
}
|
23721
|
+
});
|
23722
|
+
return mergeObject(pluginExtends, props.config.extends);
|
23723
|
+
});
|
23691
23724
|
const handleOperate = (name, val) => {
|
23692
23725
|
if (disabled.value) {
|
23693
23726
|
return;
|
@@ -23910,10 +23943,21 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
23910
23943
|
const value_isRangeInUnorderList = isRangeInList(editor.value, dataRangeCaches.value, false);
|
23911
23944
|
const value_isRangeInTask = isRangeInTask(editor.value, dataRangeCaches.value);
|
23912
23945
|
const extraDisabled = (name) => {
|
23946
|
+
let pluginDisabled = false;
|
23947
|
+
let length = pluginResultList.value.length;
|
23948
|
+
for (let i = 0; i < length; i++) {
|
23949
|
+
const pluginResult = pluginResultList.value[i];
|
23950
|
+
if (pluginResult.menu && typeof pluginResult.menu.extraDisabled == "function") {
|
23951
|
+
pluginDisabled = pluginResult.menu.extraDisabled(name);
|
23952
|
+
if (pluginDisabled) {
|
23953
|
+
break;
|
23954
|
+
}
|
23955
|
+
}
|
23956
|
+
}
|
23913
23957
|
if (typeof props.config.extraDisabled == "function") {
|
23914
|
-
return props.config.extraDisabled(name) || false;
|
23958
|
+
return props.config.extraDisabled(name) || pluginDisabled || false;
|
23915
23959
|
}
|
23916
|
-
return false;
|
23960
|
+
return pluginDisabled || false;
|
23917
23961
|
};
|
23918
23962
|
undoConfig.value.disabled = !editor.value.history.get(-1) || extraDisabled("undo");
|
23919
23963
|
redoConfig.value.disabled = !editor.value.history.get(1) || extraDisabled("redo");
|
@@ -24614,8 +24658,8 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
24614
24658
|
() => h(Icon, { value: "full-screen" })
|
24615
24659
|
);
|
24616
24660
|
}
|
24617
|
-
if (common.isObject(
|
24618
|
-
const configuration =
|
24661
|
+
if (common.isObject(menuExtends.value)) {
|
24662
|
+
const configuration = menuExtends.value[itemProps.name];
|
24619
24663
|
if (configuration) {
|
24620
24664
|
return h(
|
24621
24665
|
Button,
|
@@ -24714,7 +24758,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
24714
24758
|
};
|
24715
24759
|
}
|
24716
24760
|
});
|
24717
|
-
const Menu = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-
|
24761
|
+
const Menu = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-b3e98aec"]]);
|
24718
24762
|
const EditifyProps = {
|
24719
24763
|
//国际化语言类型
|
24720
24764
|
locale: {
|
@@ -25068,7 +25112,6 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
25068
25112
|
const props = __props;
|
25069
25113
|
const emits = __emit;
|
25070
25114
|
const $editTrans = trans(props.locale || "zh_CN");
|
25071
|
-
provide("$editTrans", $editTrans);
|
25072
25115
|
const isModelChange = ref(false);
|
25073
25116
|
const isInputChinese = ref(false);
|
25074
25117
|
const rangeUpdateTimer = ref(null);
|
@@ -25137,12 +25180,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
25137
25180
|
return pluginResultList2;
|
25138
25181
|
});
|
25139
25182
|
const menuConfig = computed(() => {
|
25140
|
-
|
25141
|
-
pluginResultList.value.forEach((pluginResult) => {
|
25142
|
-
menu = mergeObject(menu, pluginResult.menu || {});
|
25143
|
-
});
|
25144
|
-
menu = mergeObject(menu, props.menu || {});
|
25145
|
-
return mergeObject(getMenuConfig($editTrans, props.locale), menu);
|
25183
|
+
return mergeObject(getMenuConfig($editTrans, props.locale), props.menu || {});
|
25146
25184
|
});
|
25147
25185
|
const internalModify = (val) => {
|
25148
25186
|
isModelChange.value = true;
|
@@ -25732,6 +25770,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
25732
25770
|
event.off(window, `resize.editify_${instance.uid}`);
|
25733
25771
|
editor.value.destroy();
|
25734
25772
|
});
|
25773
|
+
provide("$editTrans", $editTrans);
|
25735
25774
|
provide("editify", instance);
|
25736
25775
|
provide("isSourceView", isSourceView);
|
25737
25776
|
provide("isFullScreen", isFullScreen);
|
@@ -25739,6 +25778,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
25739
25778
|
provide("editor", editor);
|
25740
25779
|
provide("dataRangeCaches", dataRangeCaches);
|
25741
25780
|
provide("showBorder", showBorder);
|
25781
|
+
provide("pluginResultList", pluginResultList);
|
25742
25782
|
__expose({
|
25743
25783
|
editor,
|
25744
25784
|
isSourceView,
|
@@ -25808,7 +25848,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
25808
25848
|
};
|
25809
25849
|
}
|
25810
25850
|
});
|
25811
|
-
const Editify = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-
|
25851
|
+
const Editify = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-306d3e9a"]]);
|
25812
25852
|
const InsertAttachmentProps = {
|
25813
25853
|
//主题色
|
25814
25854
|
color: {
|
@@ -26053,62 +26093,86 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
26053
26093
|
}
|
26054
26094
|
});
|
26055
26095
|
const InsertAttachment = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-f995f4bd"]]);
|
26096
|
+
const isAttachment = (element2) => {
|
26097
|
+
if (element2.isEmpty()) {
|
26098
|
+
return false;
|
26099
|
+
}
|
26100
|
+
return element2.parsedom == "span" && element2.type == "closed" && element2.hasMarks() && element2.marks["data-attachment"];
|
26101
|
+
};
|
26102
|
+
const hasAttachmentInRange = (editor, dataRangeCaches) => {
|
26103
|
+
if (!editor.range) {
|
26104
|
+
return false;
|
26105
|
+
}
|
26106
|
+
if (editor.range.anchor.isEqual(editor.range.focus)) {
|
26107
|
+
return isAttachment(editor.range.anchor.element);
|
26108
|
+
}
|
26109
|
+
return dataRangeCaches.flatList.some((item) => {
|
26110
|
+
return isAttachment(item.element);
|
26111
|
+
});
|
26112
|
+
};
|
26056
26113
|
const attachment = (options) => {
|
26057
26114
|
if (!common.isObject(options)) {
|
26058
26115
|
options = {};
|
26059
26116
|
}
|
26060
26117
|
const plugin = (editifyInstance, color2, editTrans) => {
|
26118
|
+
let isDisabled = false;
|
26119
|
+
if (editifyInstance.exposed.editor.value) {
|
26120
|
+
isDisabled = hasPreInRange(editifyInstance.exposed.editor.value, editifyInstance.exposed.dataRangeCaches.value) || hasLinkInRange(editifyInstance.exposed.editor.value, editifyInstance.exposed.dataRangeCaches.value) || hasQuoteInRange(editifyInstance.exposed.editor.value, editifyInstance.exposed.dataRangeCaches.value);
|
26121
|
+
}
|
26061
26122
|
return {
|
26123
|
+
name: "attachment",
|
26062
26124
|
//附件菜单项配置
|
26063
26125
|
menu: {
|
26064
|
-
sequence:
|
26065
|
-
|
26126
|
+
sequence: options.sequence || 100,
|
26127
|
+
extraDisabled: (name) => {
|
26128
|
+
if (name == "link" || name == "quote") {
|
26129
|
+
return hasAttachmentInRange(editifyInstance.exposed.editor.value, editifyInstance.exposed.dataRangeCaches.value);
|
26130
|
+
}
|
26131
|
+
return false;
|
26066
26132
|
},
|
26067
|
-
|
26068
|
-
|
26069
|
-
|
26070
|
-
|
26071
|
-
|
26072
|
-
|
26073
|
-
|
26074
|
-
|
26075
|
-
|
26076
|
-
|
26077
|
-
|
26078
|
-
|
26079
|
-
|
26080
|
-
|
26081
|
-
|
26082
|
-
|
26083
|
-
|
26084
|
-
|
26085
|
-
|
26086
|
-
|
26087
|
-
|
26088
|
-
|
26089
|
-
|
26090
|
-
|
26091
|
-
|
26092
|
-
|
26093
|
-
|
26094
|
-
|
26095
|
-
|
26096
|
-
|
26097
|
-
|
26098
|
-
|
26099
|
-
|
26100
|
-
|
26101
|
-
|
26102
|
-
|
26103
|
-
|
26104
|
-
|
26105
|
-
|
26106
|
-
editor.rangeRender();
|
26107
|
-
}
|
26108
|
-
btnInstance.show = false;
|
26133
|
+
extend: {
|
26134
|
+
type: "select",
|
26135
|
+
title: options.title || editTrans("insertAttachment"),
|
26136
|
+
leftBorder: options.leftBorder,
|
26137
|
+
rightBorder: options.rightBorder,
|
26138
|
+
hideScroll: true,
|
26139
|
+
disabled: isDisabled,
|
26140
|
+
default: () => h(Icon, { value: "attachment" }),
|
26141
|
+
layer: (_name, btnInstance) => h(InsertAttachment, {
|
26142
|
+
color: color2,
|
26143
|
+
accept: options.accept,
|
26144
|
+
allowedFileType: options.allowedFileType || [],
|
26145
|
+
multiple: !!options.multiple,
|
26146
|
+
maxSize: options.maxSize,
|
26147
|
+
minSize: options.minSize,
|
26148
|
+
customUpload: options.customUpload,
|
26149
|
+
handleError: options.handleError,
|
26150
|
+
onChange: () => {
|
26151
|
+
btnInstance.$refs.layerRef.setPosition();
|
26152
|
+
},
|
26153
|
+
onInsert: (name, url) => {
|
26154
|
+
if (url) {
|
26155
|
+
const marks = {
|
26156
|
+
"data-attachment": url,
|
26157
|
+
"data-attachment-name": name || editTrans("attachmentDefaultName"),
|
26158
|
+
contenteditable: "false"
|
26159
|
+
};
|
26160
|
+
const attachmentElement = new AlexElement("closed", "span", marks, null, null);
|
26161
|
+
const editor = editifyInstance.exposed.editor.value;
|
26162
|
+
editor.insertElement(attachmentElement);
|
26163
|
+
const beforeText = AlexElement.getSpaceElement();
|
26164
|
+
const afterText = AlexElement.getSpaceElement();
|
26165
|
+
editor.addElementAfter(afterText, attachmentElement);
|
26166
|
+
editor.addElementBefore(beforeText, attachmentElement);
|
26167
|
+
editor.range.anchor.moveToStart(afterText);
|
26168
|
+
editor.range.focus.moveToStart(afterText);
|
26169
|
+
editor.formatElementStack();
|
26170
|
+
editor.domRender();
|
26171
|
+
editor.rangeRender();
|
26109
26172
|
}
|
26110
|
-
|
26111
|
-
|
26173
|
+
btnInstance.show = false;
|
26174
|
+
}
|
26175
|
+
})
|
26112
26176
|
}
|
26113
26177
|
},
|
26114
26178
|
//找到附件元素点击下载
|
@@ -26168,7 +26232,7 @@ const attachment = (options) => {
|
|
26168
26232
|
const install = (app) => {
|
26169
26233
|
app.component(Editify.name, Editify);
|
26170
26234
|
};
|
26171
|
-
const version = "0.1.
|
26235
|
+
const version = "0.1.29";
|
26172
26236
|
console.log(`%c vue-editify %c v${version} `, "padding: 2px 1px; border-radius: 3px 0 0 3px; color: #fff; background: #606060; font-weight: bold;", "padding: 2px 1px; border-radius: 0 3px 3px 0; color: #fff; background: #42c02e; font-weight: bold;");
|
26173
26237
|
export {
|
26174
26238
|
AlexElement,
|