vue-editify 0.1.19 → 0.1.21

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. package/README.md +3 -3
  2. package/examples/App.vue +102 -62
  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/core/tool.d.ts +35 -35
  18. package/lib/editify/editify.vue.d.ts +68 -68
  19. package/lib/editify.es.js +57 -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 +1150 -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 +405 -404
  69. package/src/editify/editify.vue +810 -803
  70. package/src/editify/props.ts +156 -156
  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 { VNode } 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?: () => VNode
81
+ layer?: () => VNode
82
+ option?: () => VNode
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 | undefined
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
+ }