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