vue-editify 0.2.17 → 0.2.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 (85) hide show
  1. package/examples/App.vue +4 -12
  2. package/lib/components/colors/colors.vue.d.ts +9 -0
  3. package/lib/components/colors/props.d.ts +4 -0
  4. package/lib/components/tooltip/tooltip.vue.d.ts +1 -1
  5. package/lib/core/function.d.ts +112 -64
  6. package/lib/core/rule.d.ts +23 -17
  7. package/lib/core/shortcut.d.ts +36 -0
  8. package/lib/core/tool.d.ts +12 -16
  9. package/lib/editify/editify.vue.d.ts +162 -15
  10. package/lib/editify/props.d.ts +1 -5
  11. package/lib/editify/toolbar/props.d.ts +1 -1
  12. package/lib/editify/toolbar/toolbar.vue.d.ts +3 -3
  13. package/lib/editify.es.js +13660 -12954
  14. package/lib/editify.umd.js +2 -2
  15. package/lib/feature/align.d.ts +0 -14
  16. package/lib/feature/heading.d.ts +0 -14
  17. package/lib/feature/lineHeight.d.ts +0 -14
  18. package/lib/feature/orderList.d.ts +1 -3
  19. package/lib/feature/task.d.ts +0 -14
  20. package/lib/feature/unorderList.d.ts +1 -3
  21. package/lib/index.d.ts +164 -17
  22. package/package.json +2 -2
  23. package/src/components/button/button.vue +3 -3
  24. package/src/components/checkbox/checkbox.vue +1 -1
  25. package/src/components/colors/colors.vue +4 -4
  26. package/src/components/colors/props.ts +6 -1
  27. package/src/components/insertAttachment/insertAttachment.vue +1 -1
  28. package/src/components/insertImage/insertImage.vue +1 -1
  29. package/src/components/insertLink/insertLink.vue +1 -1
  30. package/src/components/insertVideo/insertVideo.vue +1 -1
  31. package/src/components/layer/layer.vue +9 -3
  32. package/src/components/tooltip/tooltip.vue +1 -1
  33. package/src/components/updateLink/updateLink.vue +1 -1
  34. package/src/core/function.ts +873 -491
  35. package/src/core/rule.ts +86 -368
  36. package/src/core/shortcut.ts +386 -0
  37. package/src/core/tool.ts +111 -159
  38. package/src/css/var.less +0 -10
  39. package/src/editify/editify.less +85 -39
  40. package/src/editify/editify.vue +204 -88
  41. package/src/editify/menu/menu.vue +2 -3
  42. package/src/editify/props.ts +1 -6
  43. package/src/editify/toolbar/props.ts +2 -2
  44. package/src/editify/toolbar/toolbar.vue +12 -12
  45. package/src/feature/align.ts +2 -62
  46. package/src/feature/attachment.ts +14 -27
  47. package/src/feature/backColor.ts +2 -1
  48. package/src/feature/bold.ts +1 -1
  49. package/src/feature/code.ts +1 -1
  50. package/src/feature/codeBlock.ts +3 -3
  51. package/src/feature/fontFamily.ts +1 -1
  52. package/src/feature/fontSize.ts +1 -1
  53. package/src/feature/foreColor.ts +2 -1
  54. package/src/feature/formatClear.ts +1 -1
  55. package/src/feature/fullScreen.ts +1 -1
  56. package/src/feature/heading.ts +5 -76
  57. package/src/feature/image.ts +1 -1
  58. package/src/feature/indent.ts +1 -1
  59. package/src/feature/infoBlock.ts +6 -37
  60. package/src/feature/italic.ts +1 -1
  61. package/src/feature/lineHeight.ts +2 -78
  62. package/src/feature/link.ts +1 -1
  63. package/src/feature/mathformula.ts +4 -51
  64. package/src/feature/orderList.ts +168 -37
  65. package/src/feature/quote.ts +3 -3
  66. package/src/feature/redo.ts +1 -1
  67. package/src/feature/separator.ts +1 -1
  68. package/src/feature/sourceView.ts +1 -1
  69. package/src/feature/strikethrough.ts +1 -1
  70. package/src/feature/sub.ts +1 -1
  71. package/src/feature/super.ts +1 -1
  72. package/src/feature/table.ts +3 -3
  73. package/src/feature/task.ts +4 -58
  74. package/src/feature/underline.ts +1 -1
  75. package/src/feature/undo.ts +1 -1
  76. package/src/feature/unorderList.ts +108 -37
  77. package/src/feature/video.ts +1 -1
  78. package/src/icon/iconfont.css +39 -3
  79. package/src/icon/iconfont.ttf +0 -0
  80. package/src/icon/iconfont.woff +0 -0
  81. package/src/index.ts +13 -11
  82. package/src/locale/en_US.ts +109 -110
  83. package/src/locale/zh_CN.ts +11 -12
  84. package/lib/feature/panel.d.ts +0 -18
  85. package/src/feature/panel.ts +0 -107
@@ -1,16 +1,20 @@
1
1
  <template>
2
2
  <Layer v-model="show" ref="layerRef" :node="node" :scroll-node="scrollNode" border placement="bottom-start" :useRange="type == 'text'" :z-index="zIndex" :inside-elements="insideElements">
3
3
  <div class="editify-toolbar" :style="config.style">
4
- <!-- 链接工具条 -->
5
- <linkToolbar v-if="type == 'link'" :color="color" />
6
4
  <!-- 图片工具条 -->
7
- <ImageToolbar v-else-if="type == 'image'" @reset-toolbar="layerRef!.setPosition()" :tooltip="config.tooltip!" :color="color" :z-index="zIndex + 1" />
5
+ <ImageToolbar v-if="type == 'image'" @reset-toolbar="layerRef!.setPosition()" :tooltip="config.tooltip!" :color="color" :z-index="zIndex + 1" />
8
6
  <!-- 视频工具条 -->
9
7
  <VideoToolbar v-else-if="type == 'video'" @reset-toolbar="layerRef!.setPosition()" :tooltip="config.tooltip!" :color="color" :z-index="zIndex + 1" />
10
- <!-- 表格工具条 -->
11
- <TableToolbar v-else-if="type == 'table'" @reset-toolbar="layerRef!.setPosition()" :tooltip="config.tooltip!" :color="color" :z-index="zIndex + 1" />
12
8
  <!-- 代码块工具条 -->
13
9
  <CodeBlockToolbar v-else-if="type == 'codeBlock'" ref="codeBlockToolbarRef" :language="config.codeBlock!.languages!" :tooltip="config.tooltip!" :color="color" :z-index="zIndex + 1" />
10
+ <!-- 链接工具条 -->
11
+ <linkToolbar v-else-if="type == 'link'" :color="color" />
12
+ <!-- 表格工具条 -->
13
+ <TableToolbar v-else-if="type == 'table'" @reset-toolbar="layerRef!.setPosition()" :tooltip="config.tooltip!" :color="color" :z-index="zIndex + 1" />
14
+ <!-- 有序列表工具条 -->
15
+ <OrderListToolbar v-else-if="type == 'orderList'" :tooltip="config.tooltip!" :color="color" :z-index="zIndex + 1" />
16
+ <!-- 无序列表工具条 -->
17
+ <UnorderListToolbar v-else-if="type == 'unorderList'" :tooltip="config.tooltip!" :color="color" :z-index="zIndex + 1" />
14
18
  <!-- 文本工具条 -->
15
19
  <template v-else-if="type == 'text'">
16
20
  <component v-for="(btn, index) in textToolbarBtns" :ref="el => (textToolbarBtnRefs[index] = (el as BtnComponentPublicInstance))" :is="btn" :color="color" :z-index="zIndex + 1" :config="textButtonConfig(btn.name)" :tooltip="config.tooltip!" />
@@ -28,11 +32,8 @@ import { ImageToolbar } from '@/feature/image'
28
32
  import { VideoToolbar } from '@/feature/video'
29
33
  import { TableToolbar } from '@/feature/table'
30
34
  import { CodeBlockToolbar } from '@/feature/codeBlock'
31
- import { HeadingToolbarButton } from '@/feature/heading'
32
- import { AlignToolbarButton } from '@/feature/align'
33
- import { OrderListToolbarButton } from '@/feature/orderList'
34
- import { UnorderListToolbarButton } from '@/feature/unorderList'
35
- import { TaskToolbarButton } from '@/feature/task'
35
+ import { OrderListToolbar } from '@/feature/orderList'
36
+ import { UnorderListToolbar } from '@/feature/unorderList'
36
37
  import { BoldToolbarButton } from '@/feature/bold'
37
38
  import { ItalicToolbarButton } from '@/feature/italic'
38
39
  import { StrikethroughToolbarButton } from '@/feature/strikethrough'
@@ -42,7 +43,6 @@ import { SuperToolbarButton } from '@/feature/super'
42
43
  import { SubToolbarButton } from '@/feature/sub'
43
44
  import { FontSizeToolbarButton } from '@/feature/fontSize'
44
45
  import { FontFamilyToolbarButton } from '@/feature/fontFamily'
45
- import { LineHeightToolbarButton } from '@/feature/lineHeight'
46
46
  import { ForeColorToolbarButton } from '@/feature/foreColor'
47
47
  import { BackColorToolbarButton } from '@/feature/backColor'
48
48
  import { FormatClearToolbarButton } from '@/feature/formatClear'
@@ -62,7 +62,7 @@ type BtnComponentPublicInstance = ComponentPublicInstance & { btnRef: InstanceTy
62
62
  //代码块语言选择按钮实例
63
63
  const codeBlockToolbarRef = ref<BtnComponentPublicInstance | null>(null)
64
64
  //文本工具条按钮数组
65
- const textToolbarBtns = shallowRef([HeadingToolbarButton, AlignToolbarButton, OrderListToolbarButton, UnorderListToolbarButton, TaskToolbarButton, BoldToolbarButton, ItalicToolbarButton, StrikethroughToolbarButton, UnderlineToolbarButton, CodeToolbarButton, SuperToolbarButton, SubToolbarButton, FontSizeToolbarButton, FontFamilyToolbarButton, LineHeightToolbarButton, ForeColorToolbarButton, BackColorToolbarButton, FormatClearToolbarButton])
65
+ const textToolbarBtns = shallowRef([BoldToolbarButton, ItalicToolbarButton, StrikethroughToolbarButton, UnderlineToolbarButton, CodeToolbarButton, SuperToolbarButton, SubToolbarButton, FontSizeToolbarButton, FontFamilyToolbarButton, ForeColorToolbarButton, BackColorToolbarButton, FormatClearToolbarButton])
66
66
  //文本工具条按钮实例
67
67
  const textToolbarBtnRefs = ref<BtnComponentPublicInstance[]>([])
68
68
 
@@ -1,4 +1,4 @@
1
- import { defineComponent, h, inject, PropType, Ref, ref } from 'vue'
1
+ import { defineComponent, h, inject, PropType, Ref } from 'vue'
2
2
  import { AlexElementsRangeType, AlexEditor } from 'alex-editor'
3
3
  import { MenuSelectButtonType } from '@/core/tool'
4
4
  import { hasPreInRange, setAlign } from '@/core/function'
@@ -10,66 +10,6 @@ import { Icon } from '@/components/icon'
10
10
  */
11
11
  const FEATURE_NAME = 'align'
12
12
 
13
- /**
14
- * 工具栏 - 对齐方式
15
- */
16
- export const AlignToolbarButton = defineComponent(
17
- (props, { expose }) => {
18
- const editor = inject<Ref<AlexEditor>>('editor')!
19
- const dataRangeCaches = inject<Ref<AlexElementsRangeType>>('dataRangeCaches')!
20
- const $editTrans = inject<(key: string) => any>('$editTrans')!
21
-
22
- const btnRef = ref<InstanceType<typeof Button> | null>(null)
23
-
24
- expose({
25
- btnRef
26
- })
27
-
28
- return () => {
29
- return props.config.show
30
- ? h(
31
- Button,
32
- {
33
- ref: btnRef,
34
- name: FEATURE_NAME,
35
- type: 'select',
36
- title: $editTrans('align'),
37
- tooltip: props.tooltip,
38
- color: props.color,
39
- zIndex: props.zIndex,
40
- leftBorder: props.config.leftBorder,
41
- rightBorder: props.config.rightBorder,
42
- active: false,
43
- disabled: props.config.disabled,
44
- selectConfig: {
45
- options: props.config.options,
46
- width: props.config.width,
47
- maxHeight: props.config.maxHeight
48
- },
49
- onOperate: (_name: string, val: 'left' | 'right' | 'center' | 'justify') => {
50
- setAlign(editor.value, dataRangeCaches.value, val)
51
- editor.value.domRender()
52
- editor.value.rangeRender()
53
- }
54
- },
55
- {
56
- default: () => h(Icon, { value: 'align-left' })
57
- }
58
- )
59
- : null
60
- }
61
- },
62
- {
63
- name: `_${FEATURE_NAME}`,
64
- props: {
65
- color: String,
66
- zIndex: Number,
67
- config: Object as PropType<MenuSelectButtonType>,
68
- tooltip: Boolean
69
- }
70
- }
71
- )
72
-
73
13
  /**
74
14
  * 菜单栏 - 对齐方式
75
15
  */
@@ -90,7 +30,7 @@ export const AlignMenuButton = defineComponent(
90
30
  color: props.color,
91
31
  zIndex: props.zIndex,
92
32
  type: 'select',
93
- title: $editTrans('align'),
33
+ title: `${$editTrans('align')}${props.config.shortcut?.title ? `【${props.config.shortcut?.title}】` : ''}`,
94
34
  selectConfig: {
95
35
  options: props.config.options,
96
36
  width: props.config.width,
@@ -1,8 +1,8 @@
1
1
  import { defineComponent, h, inject, PropType, ref, Ref } from 'vue'
2
- import { AlexEditor, AlexElement, AlexElementsRangeType } from 'alex-editor'
3
- import { MenuAttachmentButtonType, ObjectType } from '@/core/tool'
2
+ import { AlexEditor, AlexElementsRangeType } from 'alex-editor'
3
+ import { MenuAttachmentButtonType } from '@/core/tool'
4
4
  import { Button } from '@/components/button'
5
- import { hasMathformulaInRange, hasPreInRange } from '@/core/function'
5
+ import { hasMathformulaInRange, hasPreInRange, insertAttachment } from '@/core/function'
6
6
  import { Icon } from '@/components/icon'
7
7
  import { InsertAttachment } from '@/components/insertAttachment'
8
8
 
@@ -35,7 +35,7 @@ export const AttachmentMenuButton = defineComponent(
35
35
  zIndex: props.zIndex,
36
36
  type: 'select',
37
37
  hideScroll: true,
38
- title: $editTrans('insertAttachment'),
38
+ title: `${$editTrans('insertAttachment')}${props.config.shortcut?.title ? `【${props.config.shortcut?.title}】` : ''}`,
39
39
  leftBorder: props.config.leftBorder,
40
40
  rightBorder: props.config.rightBorder,
41
41
  active: false,
@@ -62,30 +62,17 @@ export const AttachmentMenuButton = defineComponent(
62
62
  urls = urls.filter(url => {
63
63
  return !!url
64
64
  })
65
- //如果有地址存在
66
- if (urls.length) {
67
- //遍历地址数组
68
- urls.forEach(url => {
69
- const marks: ObjectType = {
70
- 'data-editify-attachment': url,
71
- 'data-editify-attachment-name': name || $editTrans('attachmentDefaultName')
72
- }
73
- //创建元素
74
- const attachmentElement = AlexElement.create({
75
- type: 'closed',
76
- parsedom: 'span',
77
- marks
78
- })
79
- //插入编辑器
80
- editor.value.insertElement(attachmentElement)
81
- //移动光标到新插入的元素
82
- editor.value.range!.anchor.moveToEnd(attachmentElement)
83
- editor.value.range!.focus.moveToEnd(attachmentElement)
84
- })
85
- //渲染
86
- editor.value.domRender()
87
- editor.value.rangeRender()
65
+ //如果数组为0
66
+ if (urls.length == 0) {
67
+ return
88
68
  }
69
+ //遍历地址数组
70
+ urls.forEach(url => {
71
+ insertAttachment(editor.value, url, name || $editTrans('attachmentDefaultName'))
72
+ })
73
+ //渲染
74
+ editor.value.domRender()
75
+ editor.value.rangeRender()
89
76
  //关闭浮层
90
77
  btnRef.value!.show = false
91
78
  }
@@ -127,7 +127,7 @@ export const BackColorMenuButton = defineComponent(
127
127
  options: props.config.options
128
128
  },
129
129
  hideScroll: true,
130
- title: $editTrans('backColor'),
130
+ title: `${$editTrans('backColor')}${props.config.shortcut?.title ? `【${props.config.shortcut?.title}】` : ''}`,
131
131
  leftBorder: props.config.leftBorder,
132
132
  rightBorder: props.config.rightBorder,
133
133
  active: false,
@@ -139,6 +139,7 @@ export const BackColorMenuButton = defineComponent(
139
139
  return h(Colors, {
140
140
  tooltip: props.tooltip,
141
141
  color: props.color,
142
+ zIndex: props.zIndex + 2,
142
143
  value: selectVal.value,
143
144
  data: options,
144
145
  onChange: (val: string) => {
@@ -97,7 +97,7 @@ export const BoldMenuButton = defineComponent(
97
97
  tooltip: props.tooltip,
98
98
  color: props.color,
99
99
  zIndex: props.zIndex,
100
- title: $editTrans('bold'),
100
+ title: `${$editTrans('bold')}${props.config.shortcut?.title ? `【${props.config.shortcut?.title}】` : ''}`,
101
101
  leftBorder: props.config.leftBorder,
102
102
  rightBorder: props.config.rightBorder,
103
103
  active: active.value,
@@ -97,7 +97,7 @@ export const CodeMenuButton = defineComponent(
97
97
  tooltip: props.tooltip,
98
98
  color: props.color,
99
99
  zIndex: props.zIndex,
100
- title: $editTrans('code'),
100
+ title: `${$editTrans('code')}${props.config.shortcut?.title ? `【${props.config.shortcut?.title}】` : ''}`,
101
101
  leftBorder: props.config.leftBorder,
102
102
  rightBorder: props.config.rightBorder,
103
103
  active: active.value,
@@ -2,7 +2,7 @@ import { computed, defineComponent, h, inject, PropType, ref, Ref } from 'vue'
2
2
  import { AlexEditor, AlexElement, AlexElementsRangeType } from 'alex-editor'
3
3
  import { Button } from '@/components/button'
4
4
  import { Icon } from '@/components/icon'
5
- import { getMatchElementByRange, hasAttachmentInRange, hasImageInRange, hasMathformulaInRange, hasPanelInRange, hasTableInRange, hasVideoInRange, insertCodeBlock } from '@/core/function'
5
+ import { getMatchElementByRange, hasAttachmentInRange, hasImageInRange, hasMathformulaInRange, hasTableInRange, hasVideoInRange, insertCodeBlock } from '@/core/function'
6
6
  import { MenuButtonType, MenuDisplayButtonType } from '@/core/tool'
7
7
 
8
8
  /**
@@ -170,11 +170,11 @@ export const CodeBlockMenuButton = defineComponent(
170
170
  tooltip: props.tooltip,
171
171
  color: props.color,
172
172
  zIndex: props.zIndex,
173
- title: $editTrans('inserCodeBlock'),
173
+ title: `${$editTrans('inserCodeBlock')}${props.config.shortcut?.title ? `【${props.config.shortcut?.title}】` : ''}`,
174
174
  leftBorder: props.config.leftBorder,
175
175
  rightBorder: props.config.rightBorder,
176
176
  active: !!getMatchElementByRange(editor.value, dataRangeCaches.value, { parsedom: 'pre' }),
177
- disabled: props.disabled || isSourceView.value || hasTableInRange(editor.value, dataRangeCaches.value) || hasImageInRange(editor.value, dataRangeCaches.value) || hasVideoInRange(editor.value, dataRangeCaches.value) || hasAttachmentInRange(editor.value, dataRangeCaches.value) || hasMathformulaInRange(editor.value, dataRangeCaches.value) || hasPanelInRange(editor.value, dataRangeCaches.value) || props.config.disabled,
177
+ disabled: props.disabled || isSourceView.value || hasTableInRange(editor.value, dataRangeCaches.value) || hasImageInRange(editor.value, dataRangeCaches.value) || hasVideoInRange(editor.value, dataRangeCaches.value) || hasAttachmentInRange(editor.value, dataRangeCaches.value) || hasMathformulaInRange(editor.value, dataRangeCaches.value) || props.config.disabled,
178
178
  onOperate: () => {
179
179
  insertCodeBlock(editor.value, dataRangeCaches.value)
180
180
  editor.value.domRender()
@@ -109,7 +109,7 @@ export const FontFamilyMenuButton = defineComponent(
109
109
  width: props.config.width,
110
110
  maxHeight: props.config.maxHeight
111
111
  },
112
- title: $editTrans('fontFamily'),
112
+ title: `${$editTrans('fontFamily')}${props.config.shortcut?.title ? `【${props.config.shortcut?.title}】` : ''}`,
113
113
  leftBorder: props.config.leftBorder,
114
114
  rightBorder: props.config.rightBorder,
115
115
  active: false,
@@ -111,7 +111,7 @@ export const FontSizeMenuButton = defineComponent(
111
111
  width: props.config.width,
112
112
  maxHeight: props.config.maxHeight
113
113
  },
114
- title: $editTrans('fontSize'),
114
+ title: `${$editTrans('fontSize')}${props.config.shortcut?.title ? `【${props.config.shortcut?.title}】` : ''}`,
115
115
  leftBorder: props.config.leftBorder,
116
116
  rightBorder: props.config.rightBorder,
117
117
  disabled: props.disabled || isSourceView.value || hasPreInRange(editor.value, dataRangeCaches.value) || props.config.disabled,
@@ -129,7 +129,7 @@ export const ForeColorMenuButton = defineComponent(
129
129
  options: props.config.options
130
130
  },
131
131
  hideScroll: true,
132
- title: $editTrans('foreColor'),
132
+ title: `${$editTrans('foreColor')}${props.config.shortcut?.title ? `【${props.config.shortcut?.title}】` : ''}`,
133
133
  leftBorder: props.config.leftBorder,
134
134
  rightBorder: props.config.rightBorder,
135
135
  disabled: props.disabled || isSourceView.value || hasPreInRange(editor.value, dataRangeCaches.value) || props.config.disabled,
@@ -141,6 +141,7 @@ export const ForeColorMenuButton = defineComponent(
141
141
  return h(Colors, {
142
142
  tooltip: props.tooltip,
143
143
  color: props.color,
144
+ zIndex: props.zIndex + 2,
144
145
  value: selectVal.value,
145
146
  data: options,
146
147
  onChange: (val: string) => {
@@ -84,7 +84,7 @@ export const FormatClearMenuButton = defineComponent(
84
84
  tooltip: props.tooltip,
85
85
  color: props.color,
86
86
  zIndex: props.zIndex,
87
- title: $editTrans('formatClear'),
87
+ title: `${$editTrans('formatClear')}${props.config.shortcut?.title ? `【${props.config.shortcut?.title}】` : ''}`,
88
88
  leftBorder: props.config.leftBorder,
89
89
  rightBorder: props.config.rightBorder,
90
90
  active: false,
@@ -27,7 +27,7 @@ export const FullScreenMenuButton = defineComponent(
27
27
  tooltip: props.tooltip,
28
28
  color: props.color,
29
29
  zIndex: props.zIndex,
30
- title: $editTrans('fullScreen'),
30
+ title: `${$editTrans('fullScreen')}${props.config.shortcut?.title ? `【${props.config.shortcut?.title}】` : ''}`,
31
31
  leftBorder: props.config.leftBorder,
32
32
  rightBorder: props.config.rightBorder,
33
33
  active: isFullScreen.value,
@@ -1,8 +1,8 @@
1
- import { computed, defineComponent, h, inject, PropType, Ref, ref } from 'vue'
1
+ import { computed, defineComponent, h, inject, PropType, Ref } from 'vue'
2
2
  import { AlexElementsRangeType, AlexEditor } from 'alex-editor'
3
3
  import { common as DapCommon } from 'dap-util'
4
4
  import { MenuDisplayButtonType } from '@/core/tool'
5
- import { hasPanelInRange, hasPreInRange, hasTableInRange, setHeading } from '@/core/function'
5
+ import { hasPreInRange, hasTableInRange, setHeading } from '@/core/function'
6
6
  import { Button, ButtonOptionsItemType } from '@/components/button'
7
7
 
8
8
  /**
@@ -10,77 +10,6 @@ import { Button, ButtonOptionsItemType } from '@/components/button'
10
10
  */
11
11
  const FEATURE_NAME = 'heading'
12
12
 
13
- /**
14
- * 工具栏 - 标题
15
- */
16
- export const HeadingToolbarButton = defineComponent(
17
- (props, { expose }) => {
18
- const editor = inject<Ref<AlexEditor>>('editor')!
19
- const dataRangeCaches = inject<Ref<AlexElementsRangeType>>('dataRangeCaches')!
20
- const $editTrans = inject<(key: string) => any>('$editTrans')!
21
-
22
- const btnRef = ref<InstanceType<typeof Button> | null>(null)
23
-
24
- const selectVal = computed<string>(() => {
25
- //显示已设置标题
26
- const findHeadingItem = props.config.options!.find((item: string | number | ButtonOptionsItemType) => {
27
- let val: string | number | ButtonOptionsItemType = item
28
- if (DapCommon.isObject(item)) {
29
- val = (item as ButtonOptionsItemType).value!
30
- }
31
- return dataRangeCaches.value.list.every(el => {
32
- if (el.element.isBlock()) {
33
- return el.element.parsedom == val
34
- }
35
- return el.element.getBlock().parsedom == val
36
- })
37
- })
38
- return findHeadingItem ? (DapCommon.isObject(findHeadingItem) ? ((findHeadingItem as ButtonOptionsItemType).value as string) : (findHeadingItem as string)) : (props.config.defaultValue as string)
39
- })
40
-
41
- expose({
42
- btnRef
43
- })
44
- return () => {
45
- return props.config.show
46
- ? h(Button, {
47
- ref: btnRef,
48
- name: FEATURE_NAME,
49
- type: 'display',
50
- title: $editTrans('heading'),
51
- tooltip: props.tooltip,
52
- color: props.color,
53
- zIndex: props.zIndex,
54
- leftBorder: props.config.leftBorder,
55
- rightBorder: props.config.rightBorder,
56
- active: false,
57
- disabled: props.config.disabled,
58
- displayConfig: {
59
- options: props.config.options,
60
- value: selectVal.value,
61
- width: props.config.width,
62
- maxHeight: props.config.maxHeight
63
- },
64
- onOperate: (_name: string, val: string) => {
65
- setHeading(editor.value, dataRangeCaches.value, $editTrans, val)
66
- editor.value.domRender()
67
- editor.value.rangeRender()
68
- }
69
- })
70
- : null
71
- }
72
- },
73
- {
74
- name: `_${FEATURE_NAME}`,
75
- props: {
76
- color: String,
77
- zIndex: Number,
78
- config: Object as PropType<MenuDisplayButtonType>,
79
- tooltip: Boolean
80
- }
81
- }
82
- )
83
-
84
13
  /**
85
14
  * 菜单栏 - 标题
86
15
  */
@@ -125,13 +54,13 @@ export const HeadingMenuButton = defineComponent(
125
54
  width: props.config.width,
126
55
  maxHeight: props.config.maxHeight
127
56
  },
128
- title: $editTrans('heading'),
57
+ title: `${$editTrans('heading')}${props.config.shortcut?.title ? `【${props.config.shortcut?.title}】` : ''}`,
129
58
  leftBorder: props.config.leftBorder,
130
59
  rightBorder: props.config.rightBorder,
131
60
  active: false,
132
- disabled: props.disabled || isSourceView.value || hasPreInRange(editor.value, dataRangeCaches.value) || hasTableInRange(editor.value, dataRangeCaches.value) || hasPanelInRange(editor.value, dataRangeCaches.value) || props.config.disabled,
61
+ disabled: props.disabled || isSourceView.value || hasPreInRange(editor.value, dataRangeCaches.value) || hasTableInRange(editor.value, dataRangeCaches.value) || props.config.disabled,
133
62
  onOperate: (_name: string, val: string) => {
134
- setHeading(editor.value, dataRangeCaches.value, $editTrans, val)
63
+ setHeading(editor.value, dataRangeCaches.value, val)
135
64
  editor.value.domRender()
136
65
  editor.value.rangeRender()
137
66
  }
@@ -163,7 +163,7 @@ export const ImageMenuButton = defineComponent(
163
163
  zIndex: props.zIndex,
164
164
  type: 'select',
165
165
  hideScroll: true,
166
- title: $editTrans('insertImage'),
166
+ title: `${$editTrans('insertImage')}${props.config.shortcut?.title ? `【${props.config.shortcut?.title}】` : ''}`,
167
167
  leftBorder: props.config.leftBorder,
168
168
  rightBorder: props.config.rightBorder,
169
169
  active: false,
@@ -30,7 +30,7 @@ export const IndentMenuButton = defineComponent(
30
30
  color: props.color,
31
31
  zIndex: props.zIndex,
32
32
  type: 'select',
33
- title: $editTrans('indent'),
33
+ title: `${$editTrans('indent')}${props.config.shortcut?.title ? `【${props.config.shortcut?.title}】` : ''}`,
34
34
  selectConfig: {
35
35
  options: props.config.options,
36
36
  width: props.config.width,
@@ -1,9 +1,9 @@
1
1
  import { defineComponent, h, inject, PropType, Ref } from 'vue'
2
- import { AlexEditor, AlexElement, AlexElementsRangeType } from 'alex-editor'
2
+ import { AlexEditor, AlexElementsRangeType } from 'alex-editor'
3
3
  import { Button } from '@/components/button'
4
4
  import { MenuButtonType } from '@/core/tool'
5
5
  import { Icon } from '@/components/icon'
6
- import { elementToParagraph, hasPanelInRange, hasPreInRange, hasTableInRange, rangeIsInInfoBlock } from '@/core/function'
6
+ import { hasPreInRange, hasTableInRange, insertInfoBlock, rangeIsInInfoBlock } from '@/core/function'
7
7
 
8
8
  /**
9
9
  * feature名称
@@ -29,45 +29,14 @@ export const InfoBlockMenuButton = defineComponent(
29
29
  tooltip: props.tooltip,
30
30
  color: props.color,
31
31
  zIndex: props.zIndex,
32
- title: $editTrans('insertInfoBlock'),
32
+ title: `${$editTrans('insertInfoBlock')}${props.config.shortcut?.title ? `【${props.config.shortcut?.title}】` : ''}`,
33
33
  leftBorder: props.config.leftBorder,
34
34
  rightBorder: props.config.rightBorder,
35
35
  active: rangeIsInInfoBlock(editor.value, dataRangeCaches.value),
36
- disabled: props.disabled || isSourceView.value || hasPanelInRange(editor.value, dataRangeCaches.value) || hasTableInRange(editor.value, dataRangeCaches.value) || hasPreInRange(editor.value, dataRangeCaches.value) || props.config.disabled,
36
+ disabled: props.disabled || isSourceView.value || hasTableInRange(editor.value, dataRangeCaches.value) || hasPreInRange(editor.value, dataRangeCaches.value) || props.config.disabled,
37
37
  onOperate: () => {
38
- //是否都在信息块里
39
- const flag = rangeIsInInfoBlock(editor.value, dataRangeCaches.value)
40
- //起点和终点在一起
41
- if (editor.value.range!.anchor.isEqual(editor.value.range!.focus)) {
42
- const block = editor.value.range!.anchor.element.getBlock()
43
- elementToParagraph(block)
44
- if (!flag) {
45
- block.parsedom = 'div'
46
- block.marks = {
47
- 'data-editify-info': 'true'
48
- }
49
- }
50
- }
51
- //起点和终点不在一起
52
- else {
53
- let blocks: AlexElement[] = []
54
- dataRangeCaches.value.list.forEach(item => {
55
- const block = item.element.getBlock()
56
- const exist = blocks.some(el => block.isEqual(el))
57
- if (!exist) {
58
- blocks.push(block)
59
- }
60
- })
61
- blocks.forEach(block => {
62
- elementToParagraph(block)
63
- if (!flag) {
64
- block.parsedom = 'div'
65
- block.marks = {
66
- 'data-editify-info': 'true'
67
- }
68
- }
69
- })
70
- }
38
+ //插入信息块
39
+ insertInfoBlock(editor.value, dataRangeCaches.value)
71
40
  //渲染
72
41
  editor.value.domRender()
73
42
  editor.value.rangeRender()
@@ -97,7 +97,7 @@ export const ItalicMenuButton = defineComponent(
97
97
  tooltip: props.tooltip,
98
98
  color: props.color,
99
99
  zIndex: props.zIndex,
100
- title: $editTrans('italic'),
100
+ title: `${$editTrans('italic')}${props.config.shortcut?.title ? `【${props.config.shortcut?.title}】` : ''}`,
101
101
  leftBorder: props.config.leftBorder,
102
102
  rightBorder: props.config.rightBorder,
103
103
  disabled: props.disabled || isSourceView.value || hasPreInRange(editor.value, dataRangeCaches.value) || props.config.disabled,
@@ -1,4 +1,4 @@
1
- import { computed, defineComponent, h, inject, PropType, Ref, ref } from 'vue'
1
+ import { computed, defineComponent, h, inject, PropType, Ref } from 'vue'
2
2
  import { AlexElementsRangeType, AlexEditor } from 'alex-editor'
3
3
  import { common as DapCommon } from 'dap-util'
4
4
  import { MenuDisplayButtonType } from '@/core/tool'
@@ -10,82 +10,6 @@ import { Button, ButtonOptionsItemType } from '@/components/button'
10
10
  */
11
11
  const FEATURE_NAME = 'lineHeight'
12
12
 
13
- /**
14
- * 工具栏 - 行高
15
- */
16
- export const LineHeightToolbarButton = defineComponent(
17
- (props, { expose }) => {
18
- const editor = inject<Ref<AlexEditor>>('editor')!
19
- const dataRangeCaches = inject<Ref<AlexElementsRangeType>>('dataRangeCaches')!
20
- const $editTrans = inject<(key: string) => any>('$editTrans')!
21
-
22
- const btnRef = ref<InstanceType<typeof Button> | null>(null)
23
-
24
- const selectVal = computed<string | number>(() => {
25
- const findHeightItem = props.config.options!.find((item: string | number | ButtonOptionsItemType) => {
26
- let val: string | number | ButtonOptionsItemType = item
27
- if (DapCommon.isObject(item)) {
28
- val = (item as ButtonOptionsItemType).value!
29
- }
30
- return dataRangeCaches.value.list.every(el => {
31
- if (el.element.isBlock() || el.element.isInblock()) {
32
- return el.element.hasStyles() && el.element.styles!['line-height'] == val
33
- }
34
- const block = el.element.getBlock()
35
- const inblock = el.element.getInblock()
36
- if (inblock) {
37
- return inblock.hasStyles() && inblock.styles!['line-height'] == val
38
- }
39
- return block.hasStyles() && block.styles!['line-height'] == val
40
- })
41
- })
42
- return findHeightItem ? (DapCommon.isObject(findHeightItem) ? ((findHeightItem as ButtonOptionsItemType).value as string | number) : (findHeightItem as string | number)) : (props.config.defaultValue as string | number)
43
- })
44
-
45
- expose({
46
- btnRef
47
- })
48
-
49
- return () => {
50
- return props.config.show
51
- ? h(Button, {
52
- ref: btnRef,
53
- name: FEATURE_NAME,
54
- type: 'display',
55
- title: $editTrans('lineHeight'),
56
- tooltip: props.tooltip,
57
- color: props.color,
58
- zIndex: props.zIndex,
59
- leftBorder: props.config.leftBorder,
60
- rightBorder: props.config.rightBorder,
61
- active: false,
62
- disabled: props.config.disabled,
63
- displayConfig: {
64
- options: props.config.options,
65
- value: selectVal.value,
66
- width: props.config.width,
67
- maxHeight: props.config.maxHeight
68
- },
69
- onOperate: (_name: string, val: string) => {
70
- setLineHeight(editor.value, dataRangeCaches.value, val)
71
- editor.value.domRender()
72
- editor.value.rangeRender()
73
- }
74
- })
75
- : null
76
- }
77
- },
78
- {
79
- name: `_${FEATURE_NAME}`,
80
- props: {
81
- color: String,
82
- zIndex: Number,
83
- config: Object as PropType<MenuDisplayButtonType>,
84
- tooltip: Boolean
85
- }
86
- }
87
- )
88
-
89
13
  /**
90
14
  * 菜单栏 - 行高
91
15
  */
@@ -136,7 +60,7 @@ export const LineHeightMenuButton = defineComponent(
136
60
  width: props.config.width,
137
61
  maxHeight: props.config.maxHeight
138
62
  },
139
- title: $editTrans('lineHeight'),
63
+ title: `${$editTrans('lineHeight')}${props.config.shortcut?.title ? `【${props.config.shortcut?.title}】` : ''}`,
140
64
  leftBorder: props.config.leftBorder,
141
65
  rightBorder: props.config.rightBorder,
142
66
  disabled: props.disabled || isSourceView.value || hasPreInRange(editor.value, dataRangeCaches.value) || props.config.disabled,
@@ -103,7 +103,7 @@ export const LinkMenuButton = defineComponent(
103
103
  zIndex: props.zIndex,
104
104
  type: 'select',
105
105
  hideScroll: true,
106
- title: $editTrans('insertLink'),
106
+ title: `${$editTrans('insertLink')}${props.config.shortcut?.title ? `【${props.config.shortcut?.title}】` : ''}`,
107
107
  leftBorder: props.config.leftBorder,
108
108
  rightBorder: props.config.rightBorder,
109
109
  active: false,