vue-editify 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
package/src/core/tool.js CHANGED
@@ -1,1051 +1,1056 @@
1
- import { common as DapCommon, string as DapString, color as DapColor } from 'dap-util'
2
- import { languages } from '../hljs'
3
-
4
- //粘贴html时保留的数据
5
- export const pasteKeepData = {
6
- //粘贴html时元素保留的样式(全部元素)
7
- marks: {
8
- 'data-editify-list': ['div'],
9
- 'data-editify-value': ['div'],
10
- 'data-editify-code': ['span'],
11
- 'data-editify-task': ['div'],
12
- contenteditable: '*',
13
- src: ['img', 'video'],
14
- autoplay: ['video'],
15
- loop: ['video'],
16
- muted: ['video'],
17
- href: ['a'],
18
- target: ['a'],
19
- alt: ['img'],
20
- controls: ['video'],
21
- name: '*',
22
- disabled: '*',
23
- colspan: ['td']
24
- },
25
- //粘贴html时非文本元素保留的样式
26
- styles: {
27
- 'text-indent': '*',
28
- 'text-align': '*'
29
- }
30
- }
31
-
32
- //编辑器props属性
33
- export const editorProps = {
34
- //编辑器内容
35
- modelValue: {
36
- type: String,
37
- default: '<p><br></p>'
38
- },
39
- //占位符
40
- placeholder: {
41
- type: String,
42
- default: ''
43
- },
44
- //是否自动获取焦点
45
- autofocus: {
46
- type: Boolean,
47
- default: false
48
- },
49
- //是否禁用编辑器
50
- disabled: {
51
- type: Boolean,
52
- default: false
53
- },
54
- //是否允许复制
55
- allowCopy: {
56
- type: Boolean,
57
- default: true
58
- },
59
- //是否允许粘贴
60
- allowPaste: {
61
- type: Boolean,
62
- default: true
63
- },
64
- //是否允许剪切
65
- allowCut: {
66
- type: Boolean,
67
- default: true
68
- },
69
- //是否允许粘贴html
70
- allowPasteHtml: {
71
- type: Boolean,
72
- default: false
73
- },
74
- //是否显示边框
75
- border: {
76
- type: Boolean,
77
- default: false
78
- },
79
- //主题色
80
- color: {
81
- type: String,
82
- default: '#03a8f3',
83
- validator(value) {
84
- return DapCommon.matchingText(value, 'hex')
85
- }
86
- },
87
- //视频宽高比
88
- videoRatio: {
89
- type: Number,
90
- default: 16 / 9
91
- },
92
- //工具条按钮设置
93
- toolbar: {
94
- type: Object,
95
- default: null
96
- },
97
- //是否显示字数统计
98
- showWordLength: {
99
- type: Boolean,
100
- default: false
101
- },
102
- //自定义粘贴图片
103
- customImagePaste: {
104
- type: Function,
105
- default: null
106
- },
107
- //自定义粘贴视频
108
- customVideoPaste: {
109
- type: Function,
110
- default: null
111
- },
112
- //菜单栏配置
113
- menu: {
114
- type: Object,
115
- default: null
116
- },
117
- //粘贴html时额外保留的标记(全部元素生效)
118
- pasteKeepMarks: {
119
- type: Object,
120
- default: null
121
- },
122
- //粘贴html时额外保留的样式(仅在非文本元素生效)
123
- pasteKeepStyles: {
124
- type: Object,
125
- default: null
126
- },
127
- //自定义node转元素时的处理
128
- customParseNode: {
129
- type: Function,
130
- default: null
131
- },
132
- //自定义额外的渲染规范
133
- renderRules: {
134
- type: Array,
135
- default: function () {
136
- return []
137
- }
138
- }
139
- }
140
-
141
- //对象平替值方法
142
- export const mergeObject = function (o1, o2) {
143
- if (!DapCommon.isObject(o1) && DapCommon.isObject(o2)) {
144
- return null
145
- }
146
- for (let key in o2) {
147
- //如果o1o2的相同属性都是对象并且不是数组,则继续merge
148
- if (DapCommon.isObject(o2[key]) && !Array.isArray(o2[key]) && DapCommon.isObject(o1[key]) && !Array.isArray(o1[key])) {
149
- o1[key] = mergeObject(o1[key], o2[key])
150
- }
151
- //否则直接将o2的值给o1
152
- else {
153
- o1[key] = o2[key]
154
- }
155
- }
156
- return o1
157
- }
158
-
159
- //判断对象是否含有某个属性或者属性值是否一致
160
- export const queryHasValue = function (obj, name, value) {
161
- //如果value不存在则判断是否拥有属性name
162
- if (value == null || value == undefined) {
163
- return obj.hasOwnProperty(name)
164
- }
165
- //固有的值
166
- let ownValue = obj[name]
167
- //如果ownValue不存在则直接返回false
168
- if (ownValue == null || ownValue == undefined) {
169
- return false
170
- }
171
- //如果value是字符串,则先将值转为小写
172
- if (typeof value == 'string') {
173
- value = value.toLocaleLowerCase()
174
- }
175
- //如果ownValue是字符串,则先将值转为小写
176
- if (typeof ownValue == 'string') {
177
- ownValue = ownValue.toLocaleLowerCase()
178
- }
179
- //如果value是rgb或者rgba格式,则去除空格
180
- if (typeof value == 'string' && value && (DapCommon.matchingText(value, 'rgb') || DapCommon.matchingText(value, 'rgba'))) {
181
- value = DapString.trim(value, true)
182
- }
183
- //如果ownValue是rgb或者rgba格式,则去除空格
184
- if (typeof ownValue == 'string' && ownValue && (DapCommon.matchingText(ownValue, 'rgb') || DapCommon.matchingText(ownValue, 'rgba'))) {
185
- ownValue = DapString.trim(ownValue, true)
186
- }
187
- //如果是十六进制值,转为rgb值
188
- if (typeof value == 'string' && value && DapCommon.matchingText(value, 'hex')) {
189
- const arr = DapColor.hex2rgb(value)
190
- value = `rgb(${arr[0]},${arr[1]},${arr[2]})`
191
- }
192
- //如果是十六进制值,转为rgb值
193
- if (typeof ownValue == 'string' && ownValue && DapCommon.matchingText(ownValue, 'hex')) {
194
- const arr = DapColor.hex2rgb(ownValue)
195
- ownValue = `rgb(${arr[0]},${arr[1]},${arr[2]})`
196
- }
197
- return ownValue == value
198
- }
199
-
200
- //深拷贝函数
201
- export const cloneData = function (data) {
202
- if (DapCommon.isObject(data) || Array.isArray(data)) {
203
- return JSON.parse(JSON.stringify(data))
204
- }
205
- return data
206
- }
207
-
208
- //根据行元素获取colgroup的col数量
209
- export const getColNumbers = function (row) {
210
- const children = row?.children || []
211
- let num = 0
212
- children.forEach(td => {
213
- if (td.hasMarks() && td.marks.hasOwnProperty('colspan')) {
214
- const span = Number(td.marks.colspan)
215
- if (!isNaN(span)) {
216
- num += span
217
- }
218
- } else {
219
- num += 1
220
- }
221
- })
222
- return num
223
- }
224
-
225
- //获取菜单按钮列表数据配置
226
- export const getButtonOptionsConfig = function (editTrans) {
227
- return {
228
- //标题配置
229
- heading: [
230
- {
231
- label: editTrans('text'),
232
- value: 'p'
233
- },
234
- {
235
- label: editTrans('h1'),
236
- value: 'h1',
237
- style: {
238
- fontSize: '26px',
239
- fontWeight: 'bold'
240
- }
241
- },
242
- {
243
- label: editTrans('h2'),
244
- value: 'h2',
245
- style: {
246
- fontSize: '24px',
247
- fontWeight: 'bold'
248
- }
249
- },
250
- {
251
- label: editTrans('h3'),
252
- value: 'h3',
253
- style: {
254
- fontSize: '22px',
255
- fontWeight: 'bold'
256
- }
257
- },
258
- {
259
- label: editTrans('h4'),
260
- value: 'h4',
261
- style: {
262
- fontSize: '20px',
263
- fontWeight: 'bold'
264
- }
265
- },
266
- {
267
- label: editTrans('h5'),
268
- value: 'h5',
269
- style: {
270
- fontSize: '18px',
271
- fontWeight: 'bold'
272
- }
273
- },
274
- {
275
- label: editTrans('h6'),
276
- value: 'h6',
277
- style: {
278
- fontSize: '16px',
279
- fontWeight: 'bold'
280
- }
281
- }
282
- ],
283
- //缩进配置
284
- indent: [
285
- {
286
- label: editTrans('indentIncrease'),
287
- value: 'indent-increase',
288
- icon: 'indent-increase'
289
- },
290
- {
291
- label: editTrans('indentDecrease'),
292
- value: 'indent-decrease',
293
- icon: 'indent-decrease'
294
- }
295
- ],
296
- //对齐方式
297
- align: [
298
- {
299
- label: editTrans('alignLeft'),
300
- value: 'left',
301
- icon: 'align-left'
302
- },
303
- {
304
- label: editTrans('alignRight'),
305
- value: 'right',
306
- icon: 'align-right'
307
- },
308
- {
309
- label: editTrans('alignCenter'),
310
- value: 'center',
311
- icon: 'align-center'
312
- },
313
- {
314
- label: editTrans('alignJustify'),
315
- value: 'justify',
316
- icon: 'align-justify'
317
- }
318
- ],
319
- //字号配置
320
- fontSize: [
321
- {
322
- label: editTrans('defaultSize'),
323
- value: ''
324
- },
325
- {
326
- label: '12px',
327
- value: '12px'
328
- },
329
- {
330
- label: '14px',
331
- value: '14px'
332
- },
333
- {
334
- label: '16px',
335
- value: '16px'
336
- },
337
- {
338
- label: '18px',
339
- value: '18px'
340
- },
341
- {
342
- label: '20px',
343
- value: '20px'
344
- },
345
- {
346
- label: '24px',
347
- value: '24px'
348
- },
349
- {
350
- label: '28px',
351
- value: '28px'
352
- },
353
- {
354
- label: '32px',
355
- value: '32px'
356
- },
357
- {
358
- label: '36px',
359
- value: '36px'
360
- },
361
- {
362
- label: '40px',
363
- value: '40px'
364
- }
365
- ],
366
- //字体配置
367
- fontFamily: [
368
- {
369
- label: editTrans('defaultFontFamily'),
370
- value: ''
371
- },
372
- {
373
- label: '黑体',
374
- value: '黑体,黑体-简'
375
- },
376
- {
377
- label: '华文仿宋',
378
- value: '华文仿宋'
379
- },
380
- {
381
- label: '楷体',
382
- value: '楷体,楷体-简'
383
- },
384
- {
385
- label: '华文楷体',
386
- value: '华文楷体'
387
- },
388
- {
389
- label: '宋体',
390
- value: '宋体,宋体-简'
391
- },
392
- {
393
- label: 'Arial',
394
- value: 'Arial'
395
- },
396
- {
397
- label: 'Consolas',
398
- value: 'Consolas,monospace'
399
- }
400
- ],
401
- //行高配置
402
- lineHeight: [
403
- {
404
- label: editTrans('defaultLineHeight'),
405
- value: ''
406
- },
407
- 1,
408
- 1.15,
409
- 1.5,
410
- 2,
411
- 2.5,
412
- 3
413
- ],
414
- //前景色配置
415
- foreColor: ['#000000', '#505050', '#808080', '#BBBBBB', '#CCCCCC', '#EEEEEE', '#F7F7F7', '#FFFFFF', '#EC1A0A', '#FF9900', '#FFFF00', '#07C160', '#00FFFF', '#0B73DE', '#9C00FF', '#FF00FF', '#F7C6CE', '#FFE7CE', '#FFEFC6', '#D6EFD6', '#CEDEE7', '#CEE7F7', '#D6D6E7', '#E7D6DE', '#E79C9C', '#FFC69C', '#FFE79C', '#B5D6A5', '#A5C6CE', '#9CC6EF', '#B5A5D6', '#D6A5BD', '#e45649', '#F7AD6B', '#FFD663', '#94BD7B', '#73A5AD', '#6BADDE', '#8C7BC6', '#C67BA5', '#CE0000', '#E79439', '#EFC631', '#50a14f', '#4A7B8C', '#03A8F3', '#634AA5', '#A54A7B', '#9C0000', '#B56308', '#BD9400', '#397B21', '#104A5A', '#085294', '#311873', '#731842', '#630000', '#7B3900', '#986801', '#295218', '#083139', '#003163', '#21104A', '#4A1031'],
416
- //背景色配置
417
- backColor: ['#000000', '#505050', '#808080', '#BBBBBB', '#CCCCCC', '#EEEEEE', '#F7F7F7', '#FFFFFF', '#EC1A0A', '#FF9900', '#FFFF00', '#07C160', '#00FFFF', '#0B73DE', '#9C00FF', '#FF00FF', '#F7C6CE', '#FFE7CE', '#FFEFC6', '#D6EFD6', '#CEDEE7', '#CEE7F7', '#D6D6E7', '#E7D6DE', '#E79C9C', '#FFC69C', '#FFE79C', '#B5D6A5', '#A5C6CE', '#9CC6EF', '#B5A5D6', '#D6A5BD', '#e45649', '#F7AD6B', '#FFD663', '#94BD7B', '#73A5AD', '#6BADDE', '#8C7BC6', '#C67BA5', '#CE0000', '#E79439', '#EFC631', '#50a14f', '#4A7B8C', '#03A8F3', '#634AA5', '#A54A7B', '#9C0000', '#B56308', '#BD9400', '#397B21', '#104A5A', '#085294', '#311873', '#731842', '#630000', '#7B3900', '#986801', '#295218', '#083139', '#003163', '#21104A', '#4A1031']
418
- }
419
- }
420
-
421
- //工具条全量配置
422
- export const getToolbarConfig = function (editTrans, editLocale) {
423
- return {
424
- //是否使用工具条
425
- use: true,
426
- // 工具条的样式设置
427
- style: null,
428
- // 是否使用工具提示
429
- tooltip: true,
430
- // 代码块工具条配置
431
- codeBlock: {
432
- //语言列表
433
- languages: {
434
- //是否显示此工具
435
- show: true,
436
- //列表配置
437
- options: [
438
- {
439
- label: editTrans('autoRecognize'),
440
- value: ''
441
- },
442
- ...languages
443
- ],
444
- //浮层宽度
445
- width: 120,
446
- //浮层最大高度
447
- maxHeight: 180,
448
- //左侧边框是否显示
449
- leftBorder: true,
450
- //右侧边框是否显示
451
- rightBorder: false
452
- }
453
- },
454
- //文本工具条配置
455
- text: {
456
- //标题
457
- heading: {
458
- //是否显示此工具
459
- show: true,
460
- //列表配置
461
- options: getButtonOptionsConfig(editTrans, editLocale).heading,
462
- //按钮默认显示的值
463
- defaultValue: 'p',
464
- //浮层宽度
465
- width: editLocale == 'en_US' ? 150 : 130,
466
- //浮层最大高度
467
- maxHeight: '',
468
- //左侧边框是否显示
469
- leftBorder: false,
470
- //右侧边框是否显示
471
- rightBorder: true
472
- },
473
- //对齐方式
474
- align: {
475
- //是否显示此工具
476
- show: false,
477
- //列表配置
478
- options: getButtonOptionsConfig(editTrans, editLocale).align,
479
- //浮层宽度
480
- width: editLocale == 'zh_CN' ? 110 : 130,
481
- //浮层最大高度
482
- maxHeight: '',
483
- //左侧边框是否显示
484
- leftBorder: false,
485
- //右侧边框是否显示
486
- rightBorder: false
487
- },
488
- //有序列表
489
- orderList: {
490
- //是否显示此工具
491
- show: false,
492
- //左侧边框是否显示
493
- leftBorder: false,
494
- //右侧边框是否显示
495
- rightBorder: false
496
- },
497
- //无序列表
498
- unorderList: {
499
- //是否显示此工具
500
- show: false,
501
- //左侧边框是否显示
502
- leftBorder: false,
503
- //右侧边框是否显示
504
- rightBorder: false
505
- },
506
- //任务列表
507
- task: {
508
- //是否显示此工具
509
- show: false,
510
- //左侧边框是否显示
511
- leftBorder: false,
512
- //右侧边框是否显示
513
- rightBorder: false
514
- },
515
- //粗体
516
- bold: {
517
- //是否显示此工具
518
- show: true,
519
- //左侧边框是否显示
520
- leftBorder: false,
521
- //右侧边框是否显示
522
- rightBorder: false
523
- },
524
- //斜体
525
- italic: {
526
- //是否显示此工具
527
- show: true,
528
- //左侧边框是否显示
529
- leftBorder: false,
530
- //右侧边框是否显示
531
- rightBorder: false
532
- },
533
- //删除线
534
- strikethrough: {
535
- //是否显示此工具
536
- show: true,
537
- //左侧边框是否显示
538
- leftBorder: false,
539
- //右侧边框是否显示
540
- rightBorder: false
541
- },
542
- //下划线
543
- underline: {
544
- //是否显示此工具
545
- show: true,
546
- //左侧边框是否显示
547
- leftBorder: false,
548
- //右侧边框是否显示
549
- rightBorder: false
550
- },
551
- //行内代码
552
- code: {
553
- //是否显示此工具
554
- show: true,
555
- //左侧边框是否显示
556
- leftBorder: false,
557
- //右侧边框是否显示
558
- rightBorder: false
559
- },
560
- //上标
561
- super: {
562
- //是否显示此工具
563
- show: false,
564
- //左侧边框是否显示
565
- leftBorder: false,
566
- //右侧边框是否显示
567
- rightBorder: false
568
- },
569
- //下标
570
- sub: {
571
- //是否显示此工具
572
- show: false,
573
- //左侧边框是否显示
574
- leftBorder: false,
575
- //右侧边框是否显示
576
- rightBorder: false
577
- },
578
- //字号
579
- fontSize: {
580
- //是否显示此工具
581
- show: true,
582
- //列表配置
583
- options: getButtonOptionsConfig(editTrans, editLocale).fontSize,
584
- //按钮默认显示的值
585
- defaultValue: '',
586
- //浮层宽度
587
- width: 100,
588
- //浮层最大高度
589
- maxHeight: 200,
590
- //左侧边框是否显示
591
- leftBorder: true,
592
- //右侧边框是否显示
593
- rightBorder: false
594
- },
595
- //字体
596
- fontFamily: {
597
- //是否显示此工具
598
- show: false,
599
- //列表配置
600
- options: getButtonOptionsConfig(editTrans, editLocale).fontFamily,
601
- //按钮默认显示的值
602
- defaultValue: '',
603
- //浮层宽度
604
- width: 100,
605
- //浮层最大高度
606
- maxHeight: 200,
607
- //左侧边框是否显示
608
- leftBorder: false,
609
- //右侧边框是否显示
610
- rightBorder: false
611
- },
612
- //行高
613
- lineHeight: {
614
- //是否显示此工具
615
- show: false,
616
- //列表配置
617
- options: getButtonOptionsConfig(editTrans, editLocale).lineHeight,
618
- //按钮默认显示的值
619
- defaultValue: '',
620
- //浮层宽度
621
- width: 90,
622
- //浮层最大高度
623
- maxHeight: '',
624
- //左侧边框是否显示
625
- leftBorder: false,
626
- //右侧边框是否显示
627
- rightBorder: false
628
- },
629
- //前景色
630
- foreColor: {
631
- //是否显示此工具
632
- show: true,
633
- //列表配置
634
- options: getButtonOptionsConfig(editTrans, editLocale).foreColor,
635
- //左侧边框是否显示
636
- leftBorder: false,
637
- //右侧边框是否显示
638
- rightBorder: false
639
- },
640
- //背景色
641
- backColor: {
642
- //是否显示此工具
643
- show: true,
644
- //列表配置
645
- options: getButtonOptionsConfig(editTrans, editLocale).backColor,
646
- //左侧边框是否显示
647
- leftBorder: false,
648
- //右侧边框是否显示
649
- rightBorder: false
650
- },
651
- //清除格式
652
- formatClear: {
653
- //是否显示此工具
654
- show: true,
655
- //左侧边框是否显示
656
- leftBorder: true,
657
- //右侧边框是否显示
658
- rightBorder: false
659
- }
660
- },
661
- //(只对文本工具条中的按钮生效)添加额外的按钮禁用判定,回调参数为name,this指向组件实例
662
- extraDisabled: null
663
- }
664
- }
665
-
666
- //菜单栏全量配置
667
- export const getMenuConfig = function (editTrans, editLocale) {
668
- return {
669
- //是否使用菜单栏
670
- use: true,
671
- //是否使用工具提示
672
- tooltip: true,
673
- //菜单栏显示模式,支持default/inner/fixed
674
- mode: 'default',
675
- //添加额外的按钮禁用判定,回调参数为name,this指向组件实例
676
- extraDisabled: null,
677
- //菜单栏的样式自定义
678
- style: null,
679
- //菜单排序
680
- sequence: {
681
- undo: 0,
682
- redo: 1,
683
- heading: 2,
684
- indent: 3,
685
- quote: 4,
686
- align: 5,
687
- orderList: 6,
688
- unorderList: 7,
689
- task: 8,
690
- bold: 9,
691
- underline: 10,
692
- italic: 11,
693
- strikethrough: 12,
694
- code: 13,
695
- super: 14,
696
- sub: 15,
697
- formatClear: 16,
698
- fontSize: 17,
699
- fontFamily: 18,
700
- lineHeight: 19,
701
- foreColor: 20,
702
- backColor: 21,
703
- link: 22,
704
- image: 23,
705
- video: 24,
706
- table: 25,
707
- codeBlock: 26,
708
- sourceView: 27,
709
- fullScreen: 28
710
- },
711
- //撤销按钮配置
712
- undo: {
713
- //是否显示此按钮
714
- show: true,
715
- //左侧边框是否显示
716
- leftBorder: false,
717
- //右侧边框是否显示
718
- rightBorder: false
719
- },
720
- //重做按钮配置
721
- redo: {
722
- //是否显示此按钮
723
- show: true,
724
- //左侧边框是否显示
725
- leftBorder: false,
726
- //右侧边框是否显示
727
- rightBorder: false
728
- },
729
- //标题
730
- heading: {
731
- //是否显示此按钮
732
- show: true,
733
- //列表配置
734
- options: getButtonOptionsConfig(editTrans, editLocale).heading,
735
- //按钮默认显示的值
736
- defaultValue: 'p',
737
- //浮层宽度
738
- width: editLocale == 'en_US' ? 150 : 130,
739
- //浮层最大高度
740
- maxHeight: '',
741
- //左侧边框是否显示
742
- leftBorder: true,
743
- //右侧边框是否显示
744
- rightBorder: false
745
- },
746
- //缩进
747
- indent: {
748
- //是否显示此工具
749
- show: true,
750
- //列表配置
751
- options: getButtonOptionsConfig(editTrans, editLocale).indent,
752
- //浮层宽度
753
- width: editLocale == 'en_US' ? 150 : 110,
754
- //浮层最大高度
755
- maxHeight: '',
756
- //左侧边框是否显示
757
- leftBorder: false,
758
- //右侧边框是否显示
759
- rightBorder: false
760
- },
761
- //引用按钮配置
762
- quote: {
763
- //是否显示此按钮
764
- show: true,
765
- //左侧边框是否显示
766
- leftBorder: false,
767
- //右侧边框是否显示
768
- rightBorder: false
769
- },
770
- //对齐方式
771
- align: {
772
- //是否显示此工具
773
- show: true,
774
- //列表配置
775
- options: getButtonOptionsConfig(editTrans, editLocale).align,
776
- //浮层宽度
777
- width: editLocale == 'zh_CN' ? 110 : 130,
778
- //浮层最大高度
779
- maxHeight: '',
780
- //左侧边框是否显示
781
- leftBorder: true,
782
- //右侧边框是否显示
783
- rightBorder: false
784
- },
785
- //有序列表按钮配置
786
- orderList: {
787
- //是否显示此按钮
788
- show: true,
789
- //左侧边框是否显示
790
- leftBorder: false,
791
- //右侧边框是否显示
792
- rightBorder: false
793
- },
794
- //无序列表按钮配置
795
- unorderList: {
796
- //是否显示此按钮
797
- show: true,
798
- //左侧边框是否显示
799
- leftBorder: false,
800
- //右侧边框是否显示
801
- rightBorder: false
802
- },
803
- //任务列表按钮配置
804
- task: {
805
- //是否显示此按钮
806
- show: true,
807
- //左侧边框是否显示
808
- leftBorder: false,
809
- //右侧边框是否显示
810
- rightBorder: false
811
- },
812
- //粗体按钮配置
813
- bold: {
814
- //是否显示此按钮
815
- show: true,
816
- //左侧边框是否显示
817
- leftBorder: true,
818
- //右侧边框是否显示
819
- rightBorder: false
820
- },
821
- //下划线按钮配置
822
- underline: {
823
- //是否显示此按钮
824
- show: true,
825
- //左侧边框是否显示
826
- leftBorder: false,
827
- //右侧边框是否显示
828
- rightBorder: false
829
- },
830
- //斜体按钮配置
831
- italic: {
832
- //是否显示此按钮
833
- show: true,
834
- //左侧边框是否显示
835
- leftBorder: false,
836
- //右侧边框是否显示
837
- rightBorder: false
838
- },
839
- //删除线按钮配置
840
- strikethrough: {
841
- //是否显示此按钮
842
- show: true,
843
- //左侧边框是否显示
844
- leftBorder: false,
845
- //右侧边框是否显示
846
- rightBorder: false
847
- },
848
- //行内代码按钮配置
849
- code: {
850
- //是否显示此按钮
851
- show: true,
852
- //左侧边框是否显示
853
- leftBorder: false,
854
- //右侧边框是否显示
855
- rightBorder: false
856
- },
857
- //上标
858
- super: {
859
- //是否显示此工具
860
- show: true,
861
- //左侧边框是否显示
862
- leftBorder: false,
863
- //右侧边框是否显示
864
- rightBorder: false
865
- },
866
- //下标
867
- sub: {
868
- //是否显示此工具
869
- show: true,
870
- //左侧边框是否显示
871
- leftBorder: false,
872
- //右侧边框是否显示
873
- rightBorder: false
874
- },
875
- //清除格式
876
- formatClear: {
877
- //是否显示此工具
878
- show: true,
879
- //左侧边框是否显示
880
- leftBorder: false,
881
- //右侧边框是否显示
882
- rightBorder: false
883
- },
884
- //字号
885
- fontSize: {
886
- //是否显示此工具
887
- show: true,
888
- //列表配置
889
- options: getButtonOptionsConfig(editTrans, editLocale).fontSize,
890
- //按钮默认显示的值
891
- defaultValue: '',
892
- //浮层宽度
893
- width: 100,
894
- //浮层最大高度
895
- maxHeight: 200,
896
- //左侧边框是否显示
897
- leftBorder: true,
898
- //右侧边框是否显示
899
- rightBorder: false
900
- },
901
- //字体
902
- fontFamily: {
903
- //是否显示此工具
904
- show: true,
905
- //列表配置
906
- options: getButtonOptionsConfig(editTrans, editLocale).fontFamily,
907
- //按钮默认显示的值
908
- defaultValue: '',
909
- //浮层宽度
910
- width: 100,
911
- //浮层最大高度
912
- maxHeight: 200,
913
- //左侧边框是否显示
914
- leftBorder: false,
915
- //右侧边框是否显示
916
- rightBorder: false
917
- },
918
- //行高
919
- lineHeight: {
920
- //是否显示此工具
921
- show: true,
922
- //列表配置
923
- options: getButtonOptionsConfig(editTrans, editLocale).lineHeight,
924
- //按钮默认显示的值
925
- defaultValue: '',
926
- //浮层宽度
927
- width: 90,
928
- //浮层最大高度
929
- maxHeight: '',
930
- //左侧边框是否显示
931
- leftBorder: false,
932
- //右侧边框是否显示
933
- rightBorder: false
934
- },
935
- //前景色
936
- foreColor: {
937
- //是否显示此工具
938
- show: true,
939
- //列表配置
940
- options: getButtonOptionsConfig(editTrans, editLocale).foreColor,
941
- //左侧边框是否显示
942
- leftBorder: true,
943
- //右侧边框是否显示
944
- rightBorder: false
945
- },
946
- //背景色
947
- backColor: {
948
- //是否显示此工具
949
- show: true,
950
- //列表配置
951
- options: getButtonOptionsConfig(editTrans, editLocale).backColor,
952
- //左侧边框是否显示
953
- leftBorder: false,
954
- //右侧边框是否显示
955
- rightBorder: false
956
- },
957
- //链接
958
- link: {
959
- //是否显示此工具
960
- show: true,
961
- //左侧边框是否显示
962
- leftBorder: true,
963
- //右侧边框是否显示
964
- rightBorder: false
965
- },
966
- //图片
967
- image: {
968
- //是否显示此工具
969
- show: true,
970
- //左侧边框是否显示
971
- leftBorder: false,
972
- //右侧边框是否显示
973
- rightBorder: false,
974
- //图片支持上传的类型,不区分大小写
975
- accept: ['jpg', 'png', 'jpeg', 'webp', 'jfif', 'ico', 'gif', 'svg', 'psd'],
976
- //是否多选图片
977
- multiple: false,
978
- //单张图片的最大值,单位kb
979
- maxSize: null,
980
- //单张图片的最小值,单位kb
981
- minSize: null,
982
- //自定义上传图片
983
- customUpload: null,
984
- //异常处理函数
985
- handleError: null
986
- },
987
- //视频
988
- video: {
989
- //是否显示此工具
990
- show: true,
991
- //左侧边框是否显示
992
- leftBorder: false,
993
- //右侧边框是否显示
994
- rightBorder: false,
995
- //视频支持上传的类型,不区分大小写
996
- accept: ['mp4', 'avi', 'mpg', 'wmv', 'mov', 'rm', 'swf', 'flv'],
997
- //是否多选视频
998
- multiple: false,
999
- //单个视频的的最大值,单位kb
1000
- maxSize: null,
1001
- //单个视频的最小值,单位kb
1002
- minSize: null,
1003
- //自定义上传视频
1004
- customUpload: null,
1005
- //异常处理函数
1006
- handleError: null
1007
- },
1008
- //表格
1009
- table: {
1010
- //是否显示此工具
1011
- show: true,
1012
- //左侧边框是否显示
1013
- leftBorder: false,
1014
- //右侧边框是否显示
1015
- rightBorder: false,
1016
- //创建时表格的最大行数
1017
- maxRows: 10,
1018
- //创建时表格的最大列数
1019
- maxColumns: 10
1020
- },
1021
- //代码块
1022
- codeBlock: {
1023
- //是否显示此工具
1024
- show: true,
1025
- //左侧边框是否显示
1026
- leftBorder: false,
1027
- //右侧边框是否显示
1028
- rightBorder: false
1029
- },
1030
- //代码视图
1031
- sourceView: {
1032
- //是否显示此工具
1033
- show: false,
1034
- //左侧边框是否显示
1035
- leftBorder: false,
1036
- //右侧边框是否显示
1037
- rightBorder: false
1038
- },
1039
- //全屏
1040
- fullScreen: {
1041
- //是否显示此工具
1042
- show: false,
1043
- //左侧边框是否显示
1044
- leftBorder: false,
1045
- //右侧边框是否显示
1046
- rightBorder: false
1047
- },
1048
- //拓展菜单,每个key表示拓展菜单的唯一名称,value是对象,包含type/title/rightBorder/leftBorder/disabled/active/width/maxHeight/options/value/hideScroll/onLayerShow/onLayerShown/onLayerHidden/onOperate/default/layer/option属性
1049
- extends: {}
1050
- }
1051
- }
1
+ import { common as DapCommon, string as DapString, color as DapColor } from 'dap-util'
2
+ import { languages } from '../hljs'
3
+
4
+ //粘贴html时保留的数据
5
+ export const pasteKeepData = {
6
+ //粘贴html时元素保留的样式(全部元素)
7
+ marks: {
8
+ 'data-editify-list': ['div'],
9
+ 'data-editify-value': ['div'],
10
+ 'data-editify-code': ['span'],
11
+ 'data-editify-task': ['div'],
12
+ contenteditable: '*',
13
+ src: ['img', 'video'],
14
+ autoplay: ['video'],
15
+ loop: ['video'],
16
+ muted: ['video'],
17
+ href: ['a'],
18
+ target: ['a'],
19
+ alt: ['img'],
20
+ controls: ['video'],
21
+ name: '*',
22
+ disabled: '*',
23
+ colspan: ['td']
24
+ },
25
+ //粘贴html时非文本元素保留的样式
26
+ styles: {
27
+ 'text-indent': '*',
28
+ 'text-align': '*'
29
+ }
30
+ }
31
+
32
+ //编辑器props属性
33
+ export const editorProps = {
34
+ //编辑器内容
35
+ modelValue: {
36
+ type: String,
37
+ default: '<p><br></p>'
38
+ },
39
+ //占位符
40
+ placeholder: {
41
+ type: String,
42
+ default: ''
43
+ },
44
+ //是否自动获取焦点
45
+ autofocus: {
46
+ type: Boolean,
47
+ default: false
48
+ },
49
+ //是否禁用编辑器
50
+ disabled: {
51
+ type: Boolean,
52
+ default: false
53
+ },
54
+ //是否允许复制
55
+ allowCopy: {
56
+ type: Boolean,
57
+ default: true
58
+ },
59
+ //是否允许粘贴
60
+ allowPaste: {
61
+ type: Boolean,
62
+ default: true
63
+ },
64
+ //是否允许剪切
65
+ allowCut: {
66
+ type: Boolean,
67
+ default: true
68
+ },
69
+ //是否允许粘贴html
70
+ allowPasteHtml: {
71
+ type: Boolean,
72
+ default: false
73
+ },
74
+ //是否显示边框
75
+ border: {
76
+ type: Boolean,
77
+ default: false
78
+ },
79
+ //主题色
80
+ color: {
81
+ type: String,
82
+ default: '#03a8f3',
83
+ validator(value) {
84
+ return DapCommon.matchingText(value, 'hex')
85
+ }
86
+ },
87
+ //视频宽高比
88
+ videoRatio: {
89
+ type: Number,
90
+ default: 16 / 9
91
+ },
92
+ //工具条按钮设置
93
+ toolbar: {
94
+ type: Object,
95
+ default: null
96
+ },
97
+ //是否显示字数统计
98
+ showWordLength: {
99
+ type: Boolean,
100
+ default: false
101
+ },
102
+ //自定义粘贴图片
103
+ customImagePaste: {
104
+ type: Function,
105
+ default: null
106
+ },
107
+ //自定义粘贴视频
108
+ customVideoPaste: {
109
+ type: Function,
110
+ default: null
111
+ },
112
+ //菜单栏配置
113
+ menu: {
114
+ type: Object,
115
+ default: null
116
+ },
117
+ //粘贴html时额外保留的标记(全部元素生效)
118
+ pasteKeepMarks: {
119
+ type: Object,
120
+ default: null
121
+ },
122
+ //粘贴html时额外保留的样式(仅在非文本元素生效)
123
+ pasteKeepStyles: {
124
+ type: Object,
125
+ default: null
126
+ },
127
+ //自定义node转元素时的处理
128
+ customParseNode: {
129
+ type: Function,
130
+ default: null
131
+ },
132
+ //自定义额外的渲染规范
133
+ renderRules: {
134
+ type: Array,
135
+ default: function () {
136
+ return []
137
+ }
138
+ },
139
+ //自适应高度
140
+ autoheight: {
141
+ type: Boolean,
142
+ default: false
143
+ }
144
+ }
145
+
146
+ //对象平替值方法
147
+ export const mergeObject = function (o1, o2) {
148
+ if (!DapCommon.isObject(o1) && DapCommon.isObject(o2)) {
149
+ return null
150
+ }
151
+ for (let key in o2) {
152
+ //如果o1和o2的相同属性都是对象并且不是数组,则继续merge
153
+ if (DapCommon.isObject(o2[key]) && !Array.isArray(o2[key]) && DapCommon.isObject(o1[key]) && !Array.isArray(o1[key])) {
154
+ o1[key] = mergeObject(o1[key], o2[key])
155
+ }
156
+ //否则直接将o2的值给o1
157
+ else {
158
+ o1[key] = o2[key]
159
+ }
160
+ }
161
+ return o1
162
+ }
163
+
164
+ //判断对象是否含有某个属性或者属性值是否一致
165
+ export const queryHasValue = function (obj, name, value) {
166
+ //如果value不存在则判断是否拥有属性name
167
+ if (value == null || value == undefined) {
168
+ return obj.hasOwnProperty(name)
169
+ }
170
+ //固有的值
171
+ let ownValue = obj[name]
172
+ //如果ownValue不存在则直接返回false
173
+ if (ownValue == null || ownValue == undefined) {
174
+ return false
175
+ }
176
+ //如果value是字符串,则先将值转为小写
177
+ if (typeof value == 'string') {
178
+ value = value.toLocaleLowerCase()
179
+ }
180
+ //如果ownValue是字符串,则先将值转为小写
181
+ if (typeof ownValue == 'string') {
182
+ ownValue = ownValue.toLocaleLowerCase()
183
+ }
184
+ //如果value是rgb或者rgba格式,则去除空格
185
+ if (typeof value == 'string' && value && (DapCommon.matchingText(value, 'rgb') || DapCommon.matchingText(value, 'rgba'))) {
186
+ value = DapString.trim(value, true)
187
+ }
188
+ //如果ownValue是rgb或者rgba格式,则去除空格
189
+ if (typeof ownValue == 'string' && ownValue && (DapCommon.matchingText(ownValue, 'rgb') || DapCommon.matchingText(ownValue, 'rgba'))) {
190
+ ownValue = DapString.trim(ownValue, true)
191
+ }
192
+ //如果是十六进制值,转为rgb值
193
+ if (typeof value == 'string' && value && DapCommon.matchingText(value, 'hex')) {
194
+ const arr = DapColor.hex2rgb(value)
195
+ value = `rgb(${arr[0]},${arr[1]},${arr[2]})`
196
+ }
197
+ //如果是十六进制值,转为rgb值
198
+ if (typeof ownValue == 'string' && ownValue && DapCommon.matchingText(ownValue, 'hex')) {
199
+ const arr = DapColor.hex2rgb(ownValue)
200
+ ownValue = `rgb(${arr[0]},${arr[1]},${arr[2]})`
201
+ }
202
+ return ownValue == value
203
+ }
204
+
205
+ //深拷贝函数
206
+ export const cloneData = function (data) {
207
+ if (DapCommon.isObject(data) || Array.isArray(data)) {
208
+ return JSON.parse(JSON.stringify(data))
209
+ }
210
+ return data
211
+ }
212
+
213
+ //根据行元素获取colgroup的col数量
214
+ export const getColNumbers = function (row) {
215
+ const children = row?.children || []
216
+ let num = 0
217
+ children.forEach(td => {
218
+ if (td.hasMarks() && td.marks.hasOwnProperty('colspan')) {
219
+ const span = Number(td.marks.colspan)
220
+ if (!isNaN(span)) {
221
+ num += span
222
+ }
223
+ } else {
224
+ num += 1
225
+ }
226
+ })
227
+ return num
228
+ }
229
+
230
+ //获取菜单按钮列表数据配置
231
+ export const getButtonOptionsConfig = function (editTrans) {
232
+ return {
233
+ //标题配置
234
+ heading: [
235
+ {
236
+ label: editTrans('text'),
237
+ value: 'p'
238
+ },
239
+ {
240
+ label: editTrans('h1'),
241
+ value: 'h1',
242
+ style: {
243
+ fontSize: '26px',
244
+ fontWeight: 'bold'
245
+ }
246
+ },
247
+ {
248
+ label: editTrans('h2'),
249
+ value: 'h2',
250
+ style: {
251
+ fontSize: '24px',
252
+ fontWeight: 'bold'
253
+ }
254
+ },
255
+ {
256
+ label: editTrans('h3'),
257
+ value: 'h3',
258
+ style: {
259
+ fontSize: '22px',
260
+ fontWeight: 'bold'
261
+ }
262
+ },
263
+ {
264
+ label: editTrans('h4'),
265
+ value: 'h4',
266
+ style: {
267
+ fontSize: '20px',
268
+ fontWeight: 'bold'
269
+ }
270
+ },
271
+ {
272
+ label: editTrans('h5'),
273
+ value: 'h5',
274
+ style: {
275
+ fontSize: '18px',
276
+ fontWeight: 'bold'
277
+ }
278
+ },
279
+ {
280
+ label: editTrans('h6'),
281
+ value: 'h6',
282
+ style: {
283
+ fontSize: '16px',
284
+ fontWeight: 'bold'
285
+ }
286
+ }
287
+ ],
288
+ //缩进配置
289
+ indent: [
290
+ {
291
+ label: editTrans('indentIncrease'),
292
+ value: 'indent-increase',
293
+ icon: 'indent-increase'
294
+ },
295
+ {
296
+ label: editTrans('indentDecrease'),
297
+ value: 'indent-decrease',
298
+ icon: 'indent-decrease'
299
+ }
300
+ ],
301
+ //对齐方式
302
+ align: [
303
+ {
304
+ label: editTrans('alignLeft'),
305
+ value: 'left',
306
+ icon: 'align-left'
307
+ },
308
+ {
309
+ label: editTrans('alignRight'),
310
+ value: 'right',
311
+ icon: 'align-right'
312
+ },
313
+ {
314
+ label: editTrans('alignCenter'),
315
+ value: 'center',
316
+ icon: 'align-center'
317
+ },
318
+ {
319
+ label: editTrans('alignJustify'),
320
+ value: 'justify',
321
+ icon: 'align-justify'
322
+ }
323
+ ],
324
+ //字号配置
325
+ fontSize: [
326
+ {
327
+ label: editTrans('defaultSize'),
328
+ value: ''
329
+ },
330
+ {
331
+ label: '12px',
332
+ value: '12px'
333
+ },
334
+ {
335
+ label: '14px',
336
+ value: '14px'
337
+ },
338
+ {
339
+ label: '16px',
340
+ value: '16px'
341
+ },
342
+ {
343
+ label: '18px',
344
+ value: '18px'
345
+ },
346
+ {
347
+ label: '20px',
348
+ value: '20px'
349
+ },
350
+ {
351
+ label: '24px',
352
+ value: '24px'
353
+ },
354
+ {
355
+ label: '28px',
356
+ value: '28px'
357
+ },
358
+ {
359
+ label: '32px',
360
+ value: '32px'
361
+ },
362
+ {
363
+ label: '36px',
364
+ value: '36px'
365
+ },
366
+ {
367
+ label: '40px',
368
+ value: '40px'
369
+ }
370
+ ],
371
+ //字体配置
372
+ fontFamily: [
373
+ {
374
+ label: editTrans('defaultFontFamily'),
375
+ value: ''
376
+ },
377
+ {
378
+ label: '黑体',
379
+ value: '黑体,黑体-简'
380
+ },
381
+ {
382
+ label: '华文仿宋',
383
+ value: '华文仿宋'
384
+ },
385
+ {
386
+ label: '楷体',
387
+ value: '楷体,楷体-简'
388
+ },
389
+ {
390
+ label: '华文楷体',
391
+ value: '华文楷体'
392
+ },
393
+ {
394
+ label: '宋体',
395
+ value: '宋体,宋体-简'
396
+ },
397
+ {
398
+ label: 'Arial',
399
+ value: 'Arial'
400
+ },
401
+ {
402
+ label: 'Consolas',
403
+ value: 'Consolas,monospace'
404
+ }
405
+ ],
406
+ //行高配置
407
+ lineHeight: [
408
+ {
409
+ label: editTrans('defaultLineHeight'),
410
+ value: ''
411
+ },
412
+ 1,
413
+ 1.15,
414
+ 1.5,
415
+ 2,
416
+ 2.5,
417
+ 3
418
+ ],
419
+ //前景色配置
420
+ foreColor: ['#000000', '#505050', '#808080', '#BBBBBB', '#CCCCCC', '#EEEEEE', '#F7F7F7', '#FFFFFF', '#EC1A0A', '#FF9900', '#FFFF00', '#07C160', '#00FFFF', '#0B73DE', '#9C00FF', '#FF00FF', '#F7C6CE', '#FFE7CE', '#FFEFC6', '#D6EFD6', '#CEDEE7', '#CEE7F7', '#D6D6E7', '#E7D6DE', '#E79C9C', '#FFC69C', '#FFE79C', '#B5D6A5', '#A5C6CE', '#9CC6EF', '#B5A5D6', '#D6A5BD', '#e45649', '#F7AD6B', '#FFD663', '#94BD7B', '#73A5AD', '#6BADDE', '#8C7BC6', '#C67BA5', '#CE0000', '#E79439', '#EFC631', '#50a14f', '#4A7B8C', '#03A8F3', '#634AA5', '#A54A7B', '#9C0000', '#B56308', '#BD9400', '#397B21', '#104A5A', '#085294', '#311873', '#731842', '#630000', '#7B3900', '#986801', '#295218', '#083139', '#003163', '#21104A', '#4A1031'],
421
+ //背景色配置
422
+ backColor: ['#000000', '#505050', '#808080', '#BBBBBB', '#CCCCCC', '#EEEEEE', '#F7F7F7', '#FFFFFF', '#EC1A0A', '#FF9900', '#FFFF00', '#07C160', '#00FFFF', '#0B73DE', '#9C00FF', '#FF00FF', '#F7C6CE', '#FFE7CE', '#FFEFC6', '#D6EFD6', '#CEDEE7', '#CEE7F7', '#D6D6E7', '#E7D6DE', '#E79C9C', '#FFC69C', '#FFE79C', '#B5D6A5', '#A5C6CE', '#9CC6EF', '#B5A5D6', '#D6A5BD', '#e45649', '#F7AD6B', '#FFD663', '#94BD7B', '#73A5AD', '#6BADDE', '#8C7BC6', '#C67BA5', '#CE0000', '#E79439', '#EFC631', '#50a14f', '#4A7B8C', '#03A8F3', '#634AA5', '#A54A7B', '#9C0000', '#B56308', '#BD9400', '#397B21', '#104A5A', '#085294', '#311873', '#731842', '#630000', '#7B3900', '#986801', '#295218', '#083139', '#003163', '#21104A', '#4A1031']
423
+ }
424
+ }
425
+
426
+ //工具条全量配置
427
+ export const getToolbarConfig = function (editTrans, editLocale) {
428
+ return {
429
+ //是否使用工具条
430
+ use: true,
431
+ // 工具条的样式设置
432
+ style: null,
433
+ // 是否使用工具提示
434
+ tooltip: true,
435
+ // 代码块工具条配置
436
+ codeBlock: {
437
+ //语言列表
438
+ languages: {
439
+ //是否显示此工具
440
+ show: true,
441
+ //列表配置
442
+ options: [
443
+ {
444
+ label: editTrans('autoRecognize'),
445
+ value: ''
446
+ },
447
+ ...languages
448
+ ],
449
+ //浮层宽度
450
+ width: 120,
451
+ //浮层最大高度
452
+ maxHeight: 180,
453
+ //左侧边框是否显示
454
+ leftBorder: true,
455
+ //右侧边框是否显示
456
+ rightBorder: false
457
+ }
458
+ },
459
+ //文本工具条配置
460
+ text: {
461
+ //标题
462
+ heading: {
463
+ //是否显示此工具
464
+ show: true,
465
+ //列表配置
466
+ options: getButtonOptionsConfig(editTrans, editLocale).heading,
467
+ //按钮默认显示的值
468
+ defaultValue: 'p',
469
+ //浮层宽度
470
+ width: editLocale == 'en_US' ? 150 : 130,
471
+ //浮层最大高度
472
+ maxHeight: '',
473
+ //左侧边框是否显示
474
+ leftBorder: false,
475
+ //右侧边框是否显示
476
+ rightBorder: true
477
+ },
478
+ //对齐方式
479
+ align: {
480
+ //是否显示此工具
481
+ show: false,
482
+ //列表配置
483
+ options: getButtonOptionsConfig(editTrans, editLocale).align,
484
+ //浮层宽度
485
+ width: editLocale == 'zh_CN' ? 110 : 130,
486
+ //浮层最大高度
487
+ maxHeight: '',
488
+ //左侧边框是否显示
489
+ leftBorder: false,
490
+ //右侧边框是否显示
491
+ rightBorder: false
492
+ },
493
+ //有序列表
494
+ orderList: {
495
+ //是否显示此工具
496
+ show: false,
497
+ //左侧边框是否显示
498
+ leftBorder: false,
499
+ //右侧边框是否显示
500
+ rightBorder: false
501
+ },
502
+ //无序列表
503
+ unorderList: {
504
+ //是否显示此工具
505
+ show: false,
506
+ //左侧边框是否显示
507
+ leftBorder: false,
508
+ //右侧边框是否显示
509
+ rightBorder: false
510
+ },
511
+ //任务列表
512
+ task: {
513
+ //是否显示此工具
514
+ show: false,
515
+ //左侧边框是否显示
516
+ leftBorder: false,
517
+ //右侧边框是否显示
518
+ rightBorder: false
519
+ },
520
+ //粗体
521
+ bold: {
522
+ //是否显示此工具
523
+ show: true,
524
+ //左侧边框是否显示
525
+ leftBorder: false,
526
+ //右侧边框是否显示
527
+ rightBorder: false
528
+ },
529
+ //斜体
530
+ italic: {
531
+ //是否显示此工具
532
+ show: true,
533
+ //左侧边框是否显示
534
+ leftBorder: false,
535
+ //右侧边框是否显示
536
+ rightBorder: false
537
+ },
538
+ //删除线
539
+ strikethrough: {
540
+ //是否显示此工具
541
+ show: true,
542
+ //左侧边框是否显示
543
+ leftBorder: false,
544
+ //右侧边框是否显示
545
+ rightBorder: false
546
+ },
547
+ //下划线
548
+ underline: {
549
+ //是否显示此工具
550
+ show: true,
551
+ //左侧边框是否显示
552
+ leftBorder: false,
553
+ //右侧边框是否显示
554
+ rightBorder: false
555
+ },
556
+ //行内代码
557
+ code: {
558
+ //是否显示此工具
559
+ show: true,
560
+ //左侧边框是否显示
561
+ leftBorder: false,
562
+ //右侧边框是否显示
563
+ rightBorder: false
564
+ },
565
+ //上标
566
+ super: {
567
+ //是否显示此工具
568
+ show: false,
569
+ //左侧边框是否显示
570
+ leftBorder: false,
571
+ //右侧边框是否显示
572
+ rightBorder: false
573
+ },
574
+ //下标
575
+ sub: {
576
+ //是否显示此工具
577
+ show: false,
578
+ //左侧边框是否显示
579
+ leftBorder: false,
580
+ //右侧边框是否显示
581
+ rightBorder: false
582
+ },
583
+ //字号
584
+ fontSize: {
585
+ //是否显示此工具
586
+ show: true,
587
+ //列表配置
588
+ options: getButtonOptionsConfig(editTrans, editLocale).fontSize,
589
+ //按钮默认显示的值
590
+ defaultValue: '',
591
+ //浮层宽度
592
+ width: 100,
593
+ //浮层最大高度
594
+ maxHeight: 200,
595
+ //左侧边框是否显示
596
+ leftBorder: true,
597
+ //右侧边框是否显示
598
+ rightBorder: false
599
+ },
600
+ //字体
601
+ fontFamily: {
602
+ //是否显示此工具
603
+ show: false,
604
+ //列表配置
605
+ options: getButtonOptionsConfig(editTrans, editLocale).fontFamily,
606
+ //按钮默认显示的值
607
+ defaultValue: '',
608
+ //浮层宽度
609
+ width: 100,
610
+ //浮层最大高度
611
+ maxHeight: 200,
612
+ //左侧边框是否显示
613
+ leftBorder: false,
614
+ //右侧边框是否显示
615
+ rightBorder: false
616
+ },
617
+ //行高
618
+ lineHeight: {
619
+ //是否显示此工具
620
+ show: false,
621
+ //列表配置
622
+ options: getButtonOptionsConfig(editTrans, editLocale).lineHeight,
623
+ //按钮默认显示的值
624
+ defaultValue: '',
625
+ //浮层宽度
626
+ width: 90,
627
+ //浮层最大高度
628
+ maxHeight: '',
629
+ //左侧边框是否显示
630
+ leftBorder: false,
631
+ //右侧边框是否显示
632
+ rightBorder: false
633
+ },
634
+ //前景色
635
+ foreColor: {
636
+ //是否显示此工具
637
+ show: true,
638
+ //列表配置
639
+ options: getButtonOptionsConfig(editTrans, editLocale).foreColor,
640
+ //左侧边框是否显示
641
+ leftBorder: false,
642
+ //右侧边框是否显示
643
+ rightBorder: false
644
+ },
645
+ //背景色
646
+ backColor: {
647
+ //是否显示此工具
648
+ show: true,
649
+ //列表配置
650
+ options: getButtonOptionsConfig(editTrans, editLocale).backColor,
651
+ //左侧边框是否显示
652
+ leftBorder: false,
653
+ //右侧边框是否显示
654
+ rightBorder: false
655
+ },
656
+ //清除格式
657
+ formatClear: {
658
+ //是否显示此工具
659
+ show: true,
660
+ //左侧边框是否显示
661
+ leftBorder: true,
662
+ //右侧边框是否显示
663
+ rightBorder: false
664
+ }
665
+ },
666
+ //(只对文本工具条中的按钮生效)添加额外的按钮禁用判定,回调参数为name,this指向组件实例
667
+ extraDisabled: null
668
+ }
669
+ }
670
+
671
+ //菜单栏全量配置
672
+ export const getMenuConfig = function (editTrans, editLocale) {
673
+ return {
674
+ //是否使用菜单栏
675
+ use: true,
676
+ //是否使用工具提示
677
+ tooltip: true,
678
+ //菜单栏显示模式,支持default/inner/fixed
679
+ mode: 'default',
680
+ //添加额外的按钮禁用判定,回调参数为name,this指向组件实例
681
+ extraDisabled: null,
682
+ //菜单栏的样式自定义
683
+ style: null,
684
+ //菜单排序
685
+ sequence: {
686
+ undo: 0,
687
+ redo: 1,
688
+ heading: 2,
689
+ indent: 3,
690
+ quote: 4,
691
+ align: 5,
692
+ orderList: 6,
693
+ unorderList: 7,
694
+ task: 8,
695
+ bold: 9,
696
+ underline: 10,
697
+ italic: 11,
698
+ strikethrough: 12,
699
+ code: 13,
700
+ super: 14,
701
+ sub: 15,
702
+ formatClear: 16,
703
+ fontSize: 17,
704
+ fontFamily: 18,
705
+ lineHeight: 19,
706
+ foreColor: 20,
707
+ backColor: 21,
708
+ link: 22,
709
+ image: 23,
710
+ video: 24,
711
+ table: 25,
712
+ codeBlock: 26,
713
+ sourceView: 27,
714
+ fullScreen: 28
715
+ },
716
+ //撤销按钮配置
717
+ undo: {
718
+ //是否显示此按钮
719
+ show: true,
720
+ //左侧边框是否显示
721
+ leftBorder: false,
722
+ //右侧边框是否显示
723
+ rightBorder: false
724
+ },
725
+ //重做按钮配置
726
+ redo: {
727
+ //是否显示此按钮
728
+ show: true,
729
+ //左侧边框是否显示
730
+ leftBorder: false,
731
+ //右侧边框是否显示
732
+ rightBorder: false
733
+ },
734
+ //标题
735
+ heading: {
736
+ //是否显示此按钮
737
+ show: true,
738
+ //列表配置
739
+ options: getButtonOptionsConfig(editTrans, editLocale).heading,
740
+ //按钮默认显示的值
741
+ defaultValue: 'p',
742
+ //浮层宽度
743
+ width: editLocale == 'en_US' ? 150 : 130,
744
+ //浮层最大高度
745
+ maxHeight: '',
746
+ //左侧边框是否显示
747
+ leftBorder: true,
748
+ //右侧边框是否显示
749
+ rightBorder: false
750
+ },
751
+ //缩进
752
+ indent: {
753
+ //是否显示此工具
754
+ show: true,
755
+ //列表配置
756
+ options: getButtonOptionsConfig(editTrans, editLocale).indent,
757
+ //浮层宽度
758
+ width: editLocale == 'en_US' ? 150 : 110,
759
+ //浮层最大高度
760
+ maxHeight: '',
761
+ //左侧边框是否显示
762
+ leftBorder: false,
763
+ //右侧边框是否显示
764
+ rightBorder: false
765
+ },
766
+ //引用按钮配置
767
+ quote: {
768
+ //是否显示此按钮
769
+ show: true,
770
+ //左侧边框是否显示
771
+ leftBorder: false,
772
+ //右侧边框是否显示
773
+ rightBorder: false
774
+ },
775
+ //对齐方式
776
+ align: {
777
+ //是否显示此工具
778
+ show: true,
779
+ //列表配置
780
+ options: getButtonOptionsConfig(editTrans, editLocale).align,
781
+ //浮层宽度
782
+ width: editLocale == 'zh_CN' ? 110 : 130,
783
+ //浮层最大高度
784
+ maxHeight: '',
785
+ //左侧边框是否显示
786
+ leftBorder: true,
787
+ //右侧边框是否显示
788
+ rightBorder: false
789
+ },
790
+ //有序列表按钮配置
791
+ orderList: {
792
+ //是否显示此按钮
793
+ show: true,
794
+ //左侧边框是否显示
795
+ leftBorder: false,
796
+ //右侧边框是否显示
797
+ rightBorder: false
798
+ },
799
+ //无序列表按钮配置
800
+ unorderList: {
801
+ //是否显示此按钮
802
+ show: true,
803
+ //左侧边框是否显示
804
+ leftBorder: false,
805
+ //右侧边框是否显示
806
+ rightBorder: false
807
+ },
808
+ //任务列表按钮配置
809
+ task: {
810
+ //是否显示此按钮
811
+ show: true,
812
+ //左侧边框是否显示
813
+ leftBorder: false,
814
+ //右侧边框是否显示
815
+ rightBorder: false
816
+ },
817
+ //粗体按钮配置
818
+ bold: {
819
+ //是否显示此按钮
820
+ show: true,
821
+ //左侧边框是否显示
822
+ leftBorder: true,
823
+ //右侧边框是否显示
824
+ rightBorder: false
825
+ },
826
+ //下划线按钮配置
827
+ underline: {
828
+ //是否显示此按钮
829
+ show: true,
830
+ //左侧边框是否显示
831
+ leftBorder: false,
832
+ //右侧边框是否显示
833
+ rightBorder: false
834
+ },
835
+ //斜体按钮配置
836
+ italic: {
837
+ //是否显示此按钮
838
+ show: true,
839
+ //左侧边框是否显示
840
+ leftBorder: false,
841
+ //右侧边框是否显示
842
+ rightBorder: false
843
+ },
844
+ //删除线按钮配置
845
+ strikethrough: {
846
+ //是否显示此按钮
847
+ show: true,
848
+ //左侧边框是否显示
849
+ leftBorder: false,
850
+ //右侧边框是否显示
851
+ rightBorder: false
852
+ },
853
+ //行内代码按钮配置
854
+ code: {
855
+ //是否显示此按钮
856
+ show: true,
857
+ //左侧边框是否显示
858
+ leftBorder: false,
859
+ //右侧边框是否显示
860
+ rightBorder: false
861
+ },
862
+ //上标
863
+ super: {
864
+ //是否显示此工具
865
+ show: true,
866
+ //左侧边框是否显示
867
+ leftBorder: false,
868
+ //右侧边框是否显示
869
+ rightBorder: false
870
+ },
871
+ //下标
872
+ sub: {
873
+ //是否显示此工具
874
+ show: true,
875
+ //左侧边框是否显示
876
+ leftBorder: false,
877
+ //右侧边框是否显示
878
+ rightBorder: false
879
+ },
880
+ //清除格式
881
+ formatClear: {
882
+ //是否显示此工具
883
+ show: true,
884
+ //左侧边框是否显示
885
+ leftBorder: false,
886
+ //右侧边框是否显示
887
+ rightBorder: false
888
+ },
889
+ //字号
890
+ fontSize: {
891
+ //是否显示此工具
892
+ show: true,
893
+ //列表配置
894
+ options: getButtonOptionsConfig(editTrans, editLocale).fontSize,
895
+ //按钮默认显示的值
896
+ defaultValue: '',
897
+ //浮层宽度
898
+ width: 100,
899
+ //浮层最大高度
900
+ maxHeight: 200,
901
+ //左侧边框是否显示
902
+ leftBorder: true,
903
+ //右侧边框是否显示
904
+ rightBorder: false
905
+ },
906
+ //字体
907
+ fontFamily: {
908
+ //是否显示此工具
909
+ show: true,
910
+ //列表配置
911
+ options: getButtonOptionsConfig(editTrans, editLocale).fontFamily,
912
+ //按钮默认显示的值
913
+ defaultValue: '',
914
+ //浮层宽度
915
+ width: 100,
916
+ //浮层最大高度
917
+ maxHeight: 200,
918
+ //左侧边框是否显示
919
+ leftBorder: false,
920
+ //右侧边框是否显示
921
+ rightBorder: false
922
+ },
923
+ //行高
924
+ lineHeight: {
925
+ //是否显示此工具
926
+ show: true,
927
+ //列表配置
928
+ options: getButtonOptionsConfig(editTrans, editLocale).lineHeight,
929
+ //按钮默认显示的值
930
+ defaultValue: '',
931
+ //浮层宽度
932
+ width: 90,
933
+ //浮层最大高度
934
+ maxHeight: '',
935
+ //左侧边框是否显示
936
+ leftBorder: false,
937
+ //右侧边框是否显示
938
+ rightBorder: false
939
+ },
940
+ //前景色
941
+ foreColor: {
942
+ //是否显示此工具
943
+ show: true,
944
+ //列表配置
945
+ options: getButtonOptionsConfig(editTrans, editLocale).foreColor,
946
+ //左侧边框是否显示
947
+ leftBorder: true,
948
+ //右侧边框是否显示
949
+ rightBorder: false
950
+ },
951
+ //背景色
952
+ backColor: {
953
+ //是否显示此工具
954
+ show: true,
955
+ //列表配置
956
+ options: getButtonOptionsConfig(editTrans, editLocale).backColor,
957
+ //左侧边框是否显示
958
+ leftBorder: false,
959
+ //右侧边框是否显示
960
+ rightBorder: false
961
+ },
962
+ //链接
963
+ link: {
964
+ //是否显示此工具
965
+ show: true,
966
+ //左侧边框是否显示
967
+ leftBorder: true,
968
+ //右侧边框是否显示
969
+ rightBorder: false
970
+ },
971
+ //图片
972
+ image: {
973
+ //是否显示此工具
974
+ show: true,
975
+ //左侧边框是否显示
976
+ leftBorder: false,
977
+ //右侧边框是否显示
978
+ rightBorder: false,
979
+ //图片支持上传的类型,不区分大小写
980
+ accept: ['jpg', 'png', 'jpeg', 'webp', 'jfif', 'ico', 'gif', 'svg', 'psd'],
981
+ //是否多选图片
982
+ multiple: false,
983
+ //单张图片的最大值,单位kb
984
+ maxSize: null,
985
+ //单张图片的最小值,单位kb
986
+ minSize: null,
987
+ //自定义上传图片
988
+ customUpload: null,
989
+ //异常处理函数
990
+ handleError: null
991
+ },
992
+ //视频
993
+ video: {
994
+ //是否显示此工具
995
+ show: true,
996
+ //左侧边框是否显示
997
+ leftBorder: false,
998
+ //右侧边框是否显示
999
+ rightBorder: false,
1000
+ //视频支持上传的类型,不区分大小写
1001
+ accept: ['mp4', 'avi', 'mpg', 'wmv', 'mov', 'rm', 'swf', 'flv'],
1002
+ //是否多选视频
1003
+ multiple: false,
1004
+ //单个视频的的最大值,单位kb
1005
+ maxSize: null,
1006
+ //单个视频的最小值,单位kb
1007
+ minSize: null,
1008
+ //自定义上传视频
1009
+ customUpload: null,
1010
+ //异常处理函数
1011
+ handleError: null
1012
+ },
1013
+ //表格
1014
+ table: {
1015
+ //是否显示此工具
1016
+ show: true,
1017
+ //左侧边框是否显示
1018
+ leftBorder: false,
1019
+ //右侧边框是否显示
1020
+ rightBorder: false,
1021
+ //创建时表格的最大行数
1022
+ maxRows: 10,
1023
+ //创建时表格的最大列数
1024
+ maxColumns: 10
1025
+ },
1026
+ //代码块
1027
+ codeBlock: {
1028
+ //是否显示此工具
1029
+ show: true,
1030
+ //左侧边框是否显示
1031
+ leftBorder: false,
1032
+ //右侧边框是否显示
1033
+ rightBorder: false
1034
+ },
1035
+ //代码视图
1036
+ sourceView: {
1037
+ //是否显示此工具
1038
+ show: false,
1039
+ //左侧边框是否显示
1040
+ leftBorder: false,
1041
+ //右侧边框是否显示
1042
+ rightBorder: false
1043
+ },
1044
+ //全屏
1045
+ fullScreen: {
1046
+ //是否显示此工具
1047
+ show: false,
1048
+ //左侧边框是否显示
1049
+ leftBorder: false,
1050
+ //右侧边框是否显示
1051
+ rightBorder: false
1052
+ },
1053
+ //拓展菜单,每个key表示拓展菜单的唯一名称,value是对象,包含type/title/rightBorder/leftBorder/disabled/active/width/maxHeight/options/value/hideScroll/onLayerShow/onLayerShown/onLayerHidden/onOperate/default/layer/option属性
1054
+ extends: {}
1055
+ }
1056
+ }