vue-editify 0.2.18 → 0.2.20

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. package/examples/App.vue +3 -287
  2. package/lib/components/tooltip/tooltip.vue.d.ts +1 -1
  3. package/lib/core/function.d.ts +1 -28
  4. package/lib/core/shortcut.d.ts +36 -0
  5. package/lib/core/tool.d.ts +11 -3
  6. package/lib/editify/editify.vue.d.ts +152 -14
  7. package/lib/editify/props.d.ts +0 -4
  8. package/lib/editify/toolbar/toolbar.vue.d.ts +1 -1
  9. package/lib/editify.es.js +3534 -2669
  10. package/lib/editify.umd.js +2 -2
  11. package/lib/index.d.ts +154 -16
  12. package/package.json +2 -2
  13. package/src/core/function.ts +1 -105
  14. package/src/core/rule.ts +2 -2
  15. package/src/core/shortcut.ts +386 -0
  16. package/src/core/tool.ts +107 -49
  17. package/src/css/var.less +0 -10
  18. package/src/editify/editify.less +1 -29
  19. package/src/editify/editify.vue +89 -25
  20. package/src/editify/menu/menu.vue +2 -3
  21. package/src/editify/props.ts +0 -5
  22. package/src/feature/align.ts +1 -1
  23. package/src/feature/attachment.ts +1 -1
  24. package/src/feature/backColor.ts +1 -1
  25. package/src/feature/bold.ts +1 -1
  26. package/src/feature/code.ts +1 -1
  27. package/src/feature/codeBlock.ts +3 -3
  28. package/src/feature/fontFamily.ts +1 -1
  29. package/src/feature/fontSize.ts +1 -1
  30. package/src/feature/foreColor.ts +1 -1
  31. package/src/feature/formatClear.ts +1 -1
  32. package/src/feature/fullScreen.ts +1 -1
  33. package/src/feature/heading.ts +3 -3
  34. package/src/feature/image.ts +1 -1
  35. package/src/feature/indent.ts +1 -1
  36. package/src/feature/infoBlock.ts +3 -3
  37. package/src/feature/italic.ts +1 -1
  38. package/src/feature/lineHeight.ts +1 -1
  39. package/src/feature/link.ts +1 -1
  40. package/src/feature/mathformula.ts +1 -1
  41. package/src/feature/orderList.ts +3 -3
  42. package/src/feature/quote.ts +3 -3
  43. package/src/feature/redo.ts +1 -1
  44. package/src/feature/separator.ts +1 -1
  45. package/src/feature/sourceView.ts +1 -1
  46. package/src/feature/strikethrough.ts +1 -1
  47. package/src/feature/sub.ts +1 -1
  48. package/src/feature/super.ts +1 -1
  49. package/src/feature/table.ts +3 -3
  50. package/src/feature/task.ts +3 -3
  51. package/src/feature/underline.ts +1 -1
  52. package/src/feature/undo.ts +1 -1
  53. package/src/feature/unorderList.ts +3 -3
  54. package/src/feature/video.ts +1 -1
  55. package/src/icon/iconfont.css +4 -8
  56. package/src/icon/iconfont.ttf +0 -0
  57. package/src/icon/iconfont.woff +0 -0
  58. package/src/index.ts +2 -6
  59. package/src/locale/en_US.ts +0 -3
  60. package/src/locale/zh_CN.ts +0 -3
  61. package/lib/feature/panel.d.ts +0 -18
  62. package/src/feature/panel.ts +0 -62
@@ -0,0 +1,386 @@
1
+ import { platform } from 'dap-util'
2
+ import { hasAttachmentInRange, hasImageInRange, hasMathformulaInRange, hasPreInRange, hasTableInRange, hasVideoInRange, insertCodeBlock, insertInfoBlock, queryTextMark, queryTextStyle, removeTextMark, removeTextStyle, setHeading, setIndentDecrease, setIndentIncrease, setList, setQuote, setTask, setTextMark, setTextStyle } from './function'
3
+ import { ShortcutType } from './tool'
4
+
5
+ const { Mac } = platform.os()
6
+
7
+ export type ShortcutConfigType = {
8
+ heading: ShortcutType
9
+ indent: ShortcutType
10
+ quote: ShortcutType
11
+ separator: ShortcutType
12
+ align: ShortcutType
13
+ orderList: ShortcutType
14
+ unorderList: ShortcutType
15
+ task: ShortcutType
16
+ bold: ShortcutType
17
+ underline: ShortcutType
18
+ italic: ShortcutType
19
+ strikethrough: ShortcutType
20
+ code: ShortcutType
21
+ super: ShortcutType
22
+ sub: ShortcutType
23
+ formatClear: ShortcutType
24
+ fontSize: ShortcutType
25
+ fontFamily: ShortcutType
26
+ lineHeight: ShortcutType
27
+ foreColor: ShortcutType
28
+ backColor: ShortcutType
29
+ link: ShortcutType
30
+ image: ShortcutType
31
+ video: ShortcutType
32
+ table: ShortcutType
33
+ codeBlock: ShortcutType
34
+ sourceView: ShortcutType
35
+ fullScreen: ShortcutType
36
+ attachment: ShortcutType
37
+ mathformula: ShortcutType
38
+ infoBlock: ShortcutType
39
+ }
40
+
41
+ export const config: ShortcutConfigType = {
42
+ heading: {
43
+ title: `${Mac ? 'Command' : 'Ctrl'} + [1-7]`,
44
+ define: event => {
45
+ return {
46
+ h1: event.key.toLocaleLowerCase() == '1' && (Mac ? event.metaKey : event.ctrlKey),
47
+ h2: event.key.toLocaleLowerCase() == '2' && (Mac ? event.metaKey : event.ctrlKey),
48
+ h3: event.key.toLocaleLowerCase() == '3' && (Mac ? event.metaKey : event.ctrlKey),
49
+ h4: event.key.toLocaleLowerCase() == '4' && (Mac ? event.metaKey : event.ctrlKey),
50
+ h5: event.key.toLocaleLowerCase() == '5' && (Mac ? event.metaKey : event.ctrlKey),
51
+ h6: event.key.toLocaleLowerCase() == '6' && (Mac ? event.metaKey : event.ctrlKey),
52
+ p: event.key.toLocaleLowerCase() == '7' && (Mac ? event.metaKey : event.ctrlKey)
53
+ }
54
+ },
55
+ operation: (editor, dataRangeCaches, isSourceView, _isFullScreen, code) => {
56
+ if (isSourceView.value || hasPreInRange(editor, dataRangeCaches) || hasTableInRange(editor, dataRangeCaches)) {
57
+ return
58
+ }
59
+ setHeading(editor, dataRangeCaches, code!)
60
+ editor.domRender()
61
+ editor.rangeRender()
62
+ }
63
+ },
64
+ indent: {
65
+ title: `Tab / Shift + Tab`,
66
+ define: event => {
67
+ return {
68
+ 'indent-increase': event.key.toLocaleLowerCase() == 'tab' && !event.shiftKey && !event.metaKey && !event.ctrlKey && !event.altKey,
69
+ 'indent-decrease': event.key.toLocaleLowerCase() == 'tab' && event.shiftKey && !event.metaKey && !event.ctrlKey && !event.altKey
70
+ }
71
+ },
72
+ operation: (editor, dataRangeCaches, isSourceView, _isFullScreen, code) => {
73
+ if (isSourceView.value || hasPreInRange(editor, dataRangeCaches) || hasTableInRange(editor, dataRangeCaches)) {
74
+ return
75
+ }
76
+ //增加缩进
77
+ if (code == 'indent-increase') {
78
+ setIndentIncrease(editor, dataRangeCaches)
79
+ }
80
+ //减少缩进
81
+ else if (code == 'indent-decrease') {
82
+ setIndentDecrease(editor, dataRangeCaches)
83
+ }
84
+ editor.domRender()
85
+ editor.rangeRender()
86
+ }
87
+ },
88
+ quote: {
89
+ title: `${Mac ? 'Command' : 'Ctrl'} + E`,
90
+ define: event => event.key.toLocaleLowerCase() == 'e' && (Mac ? event.metaKey : event.ctrlKey),
91
+ operation: (editor, dataRangeCaches, isSourceView) => {
92
+ if (isSourceView.value || hasPreInRange(editor, dataRangeCaches) || hasTableInRange(editor, dataRangeCaches)) {
93
+ return
94
+ }
95
+ setQuote(editor, dataRangeCaches)
96
+ editor.domRender()
97
+ editor.rangeRender()
98
+ }
99
+ },
100
+ separator: {
101
+ title: '',
102
+ define: null
103
+ },
104
+ align: {
105
+ title: '',
106
+ define: null
107
+ },
108
+ orderList: {
109
+ title: `${Mac ? 'Command' : 'Ctrl'} + O`,
110
+ define: event => event.key.toLocaleLowerCase() == 'o' && (Mac ? event.metaKey : event.ctrlKey),
111
+ operation: (editor, dataRangeCaches, isSourceView) => {
112
+ if (isSourceView.value || hasPreInRange(editor, dataRangeCaches) || hasTableInRange(editor, dataRangeCaches)) {
113
+ return
114
+ }
115
+ setList(editor, dataRangeCaches, true)
116
+ editor.domRender()
117
+ editor.rangeRender()
118
+ }
119
+ },
120
+ unorderList: {
121
+ title: `${Mac ? 'Command' : 'Ctrl'} + U`,
122
+ define: event => event.key.toLocaleLowerCase() == 'u' && (Mac ? event.metaKey : event.ctrlKey),
123
+ operation: (editor, dataRangeCaches, isSourceView) => {
124
+ if (isSourceView.value || hasPreInRange(editor, dataRangeCaches) || hasTableInRange(editor, dataRangeCaches)) {
125
+ return
126
+ }
127
+ setList(editor, dataRangeCaches, false)
128
+ editor.domRender()
129
+ editor.rangeRender()
130
+ }
131
+ },
132
+ task: {
133
+ title: `${Mac ? 'Command' : 'Ctrl'} + I`,
134
+ define: event => event.key.toLocaleLowerCase() == 'i' && (Mac ? event.metaKey : event.ctrlKey),
135
+ operation: (editor, dataRangeCaches, isSourceView) => {
136
+ if (isSourceView.value || hasPreInRange(editor, dataRangeCaches) || hasTableInRange(editor, dataRangeCaches)) {
137
+ return
138
+ }
139
+ setTask(editor, dataRangeCaches)
140
+ editor.domRender()
141
+ editor.rangeRender()
142
+ }
143
+ },
144
+ bold: {
145
+ title: `${Mac ? 'Command' : 'Ctrl'} + B`,
146
+ define: event => event.key.toLocaleLowerCase() == 'b' && (Mac ? event.metaKey : event.ctrlKey),
147
+ operation: (editor, dataRangeCaches, isSourceView) => {
148
+ if (isSourceView.value || hasPreInRange(editor, dataRangeCaches)) {
149
+ return
150
+ }
151
+ const active = queryTextStyle(editor, dataRangeCaches, 'font-weight', 'bold') || queryTextStyle(editor, dataRangeCaches, 'font-weight', '700')
152
+ if (active) {
153
+ removeTextStyle(editor, dataRangeCaches, ['font-weight'])
154
+ } else {
155
+ setTextStyle(editor, dataRangeCaches, {
156
+ 'font-weight': 'bold'
157
+ })
158
+ }
159
+ editor.domRender()
160
+ editor.rangeRender()
161
+ }
162
+ },
163
+ underline: {
164
+ title: `${Mac ? 'Command' : 'Ctrl'} + G`,
165
+ define: event => event.key.toLocaleLowerCase() == 'g' && (Mac ? event.metaKey : event.ctrlKey),
166
+ operation: (editor, dataRangeCaches, isSourceView) => {
167
+ if (isSourceView.value || hasPreInRange(editor, dataRangeCaches)) {
168
+ return
169
+ }
170
+ const active = queryTextStyle(editor, dataRangeCaches, 'text-decoration', 'underline') || queryTextStyle(editor, dataRangeCaches, 'text-decoration-line', 'underline')
171
+ if (active) {
172
+ removeTextStyle(editor, dataRangeCaches, ['text-decoration', 'text-decoration-line'])
173
+ } else {
174
+ setTextStyle(editor, dataRangeCaches, {
175
+ 'text-decoration': 'underline'
176
+ })
177
+ }
178
+ editor.domRender()
179
+ editor.rangeRender()
180
+ }
181
+ },
182
+ italic: {
183
+ title: `${Mac ? 'Command' : 'Ctrl'} + H`,
184
+ define: event => event.key.toLocaleLowerCase() == 'h' && (Mac ? event.metaKey : event.ctrlKey),
185
+ operation: (editor, dataRangeCaches, isSourceView) => {
186
+ if (isSourceView.value || hasPreInRange(editor, dataRangeCaches)) {
187
+ return
188
+ }
189
+ const active = queryTextStyle(editor, dataRangeCaches, 'font-style', 'italic')
190
+ if (active) {
191
+ removeTextStyle(editor, dataRangeCaches, ['font-style'])
192
+ } else {
193
+ setTextStyle(editor, dataRangeCaches, {
194
+ 'font-style': 'italic'
195
+ })
196
+ }
197
+ editor.domRender()
198
+ editor.rangeRender()
199
+ }
200
+ },
201
+ strikethrough: {
202
+ title: `${Mac ? 'Command' : 'Ctrl'} + J`,
203
+ define: event => {
204
+ return event.key.toLocaleLowerCase() == 'j' && (Mac ? event.metaKey : event.ctrlKey)
205
+ },
206
+ operation: (editor, dataRangeCaches, isSourceView) => {
207
+ if (isSourceView.value || hasPreInRange(editor, dataRangeCaches)) {
208
+ return
209
+ }
210
+ const active = queryTextStyle(editor, dataRangeCaches, 'text-decoration', 'line-through') || queryTextStyle(editor, dataRangeCaches, 'text-decoration-line', 'line-through')
211
+ if (active) {
212
+ removeTextStyle(editor, dataRangeCaches, ['text-decoration', 'text-decoration-line'])
213
+ } else {
214
+ setTextStyle(editor, dataRangeCaches, {
215
+ 'text-decoration': 'line-through'
216
+ })
217
+ }
218
+ editor.domRender()
219
+ editor.rangeRender()
220
+ }
221
+ },
222
+ code: {
223
+ title: `${Mac ? 'Command' : 'Ctrl'} + K`,
224
+ define: event => {
225
+ return event.key.toLocaleLowerCase() == 'k' && (Mac ? event.metaKey : event.ctrlKey)
226
+ },
227
+ operation: (editor, dataRangeCaches, isSourceView) => {
228
+ if (isSourceView.value || hasPreInRange(editor, dataRangeCaches)) {
229
+ return
230
+ }
231
+ const active = queryTextMark(editor, dataRangeCaches, 'data-editify-code')
232
+ if (active) {
233
+ removeTextMark(editor, dataRangeCaches, ['data-editify-code'])
234
+ } else {
235
+ setTextMark(editor, dataRangeCaches, {
236
+ 'data-editify-code': true
237
+ })
238
+ }
239
+ editor.domRender()
240
+ editor.rangeRender()
241
+ }
242
+ },
243
+ super: {
244
+ title: `${Mac ? 'Command' : 'Ctrl'} + L`,
245
+ define: event => {
246
+ return event.key.toLocaleLowerCase() == 'l' && (Mac ? event.metaKey : event.ctrlKey)
247
+ },
248
+ operation: (editor, dataRangeCaches, isSourceView) => {
249
+ if (isSourceView.value || hasPreInRange(editor, dataRangeCaches)) {
250
+ return
251
+ }
252
+ const active = queryTextStyle(editor, dataRangeCaches, 'vertical-align', 'super')
253
+ if (active) {
254
+ removeTextStyle(editor, dataRangeCaches, ['vertical-align'])
255
+ } else {
256
+ setTextStyle(editor, dataRangeCaches, {
257
+ 'vertical-align': 'super'
258
+ })
259
+ }
260
+ editor.domRender()
261
+ editor.rangeRender()
262
+ }
263
+ },
264
+ sub: {
265
+ title: `${Mac ? 'Command' : 'Ctrl'} + M`,
266
+ define: event => {
267
+ return event.key.toLocaleLowerCase() == 'm' && (Mac ? event.metaKey : event.ctrlKey)
268
+ },
269
+ operation: (editor, dataRangeCaches, isSourceView) => {
270
+ if (isSourceView.value || hasPreInRange(editor, dataRangeCaches)) {
271
+ return
272
+ }
273
+ const active = queryTextStyle(editor, dataRangeCaches, 'vertical-align', 'sub')
274
+ if (active) {
275
+ removeTextStyle(editor, dataRangeCaches, ['vertical-align'])
276
+ } else {
277
+ setTextStyle(editor, dataRangeCaches, {
278
+ 'vertical-align': 'sub'
279
+ })
280
+ }
281
+ editor.domRender()
282
+ editor.rangeRender()
283
+ }
284
+ },
285
+ formatClear: {
286
+ title: `${Mac ? 'Command' : 'Ctrl'} + Enter`,
287
+ define: event => {
288
+ return event.key.toLocaleLowerCase() == 'enter' && (Mac ? event.metaKey : event.ctrlKey)
289
+ },
290
+ operation: (editor, dataRangeCaches, isSourceView) => {
291
+ if (isSourceView.value || hasPreInRange(editor, dataRangeCaches)) {
292
+ return
293
+ }
294
+ removeTextStyle(editor, dataRangeCaches)
295
+ removeTextMark(editor, dataRangeCaches)
296
+ editor.domRender()
297
+ editor.rangeRender()
298
+ }
299
+ },
300
+ fontSize: {
301
+ title: '',
302
+ define: null
303
+ },
304
+ fontFamily: {
305
+ title: '',
306
+ define: null
307
+ },
308
+ lineHeight: {
309
+ title: '',
310
+ define: null
311
+ },
312
+ foreColor: {
313
+ title: '',
314
+ define: null
315
+ },
316
+ backColor: {
317
+ title: '',
318
+ define: null
319
+ },
320
+ link: {
321
+ title: '',
322
+ define: null
323
+ },
324
+ image: {
325
+ title: '',
326
+ define: null
327
+ },
328
+ video: {
329
+ title: '',
330
+ define: null
331
+ },
332
+ table: {
333
+ title: '',
334
+ define: null
335
+ },
336
+ codeBlock: {
337
+ title: `${Mac ? 'Command' : 'Ctrl'} + P`,
338
+ define: event => event.key.toLocaleLowerCase() == 'p' && (Mac ? event.metaKey : event.ctrlKey),
339
+ operation: (editor, dataRangeCaches, isSourceView) => {
340
+ if (isSourceView.value || hasTableInRange(editor, dataRangeCaches) || hasImageInRange(editor, dataRangeCaches) || hasVideoInRange(editor, dataRangeCaches) || hasAttachmentInRange(editor, dataRangeCaches) || hasMathformulaInRange(editor, dataRangeCaches)) {
341
+ return
342
+ }
343
+ insertCodeBlock(editor, dataRangeCaches)
344
+ editor.domRender()
345
+ editor.rangeRender()
346
+ }
347
+ },
348
+ sourceView: {
349
+ title: `${Mac ? 'Command' : 'Ctrl'} + 8`,
350
+ define: event => event.key.toLocaleLowerCase() == '8' && (Mac ? event.metaKey : event.ctrlKey),
351
+ operation: (editor, _dataRangeCaches, isSourceView) => {
352
+ isSourceView.value = !isSourceView.value
353
+ if (!isSourceView.value) {
354
+ editor.rangeRender()
355
+ }
356
+ }
357
+ },
358
+ fullScreen: {
359
+ title: `${Mac ? 'Command' : 'Ctrl'} + 9`,
360
+ define: event => event.key.toLocaleLowerCase() == '9' && (Mac ? event.metaKey : event.ctrlKey),
361
+ operation: (editor, _dataRangeCaches, _isSourceView, isFullScreen) => {
362
+ isFullScreen.value = !isFullScreen.value
363
+ editor.rangeRender()
364
+ }
365
+ },
366
+ attachment: {
367
+ title: '',
368
+ define: null
369
+ },
370
+ mathformula: {
371
+ title: '',
372
+ define: null
373
+ },
374
+ infoBlock: {
375
+ title: `${Mac ? 'Command' : 'Ctrl'} + 0`,
376
+ define: event => event.key.toLocaleLowerCase() == '0' && (Mac ? event.metaKey : event.ctrlKey),
377
+ operation: (editor, dataRangeCaches, isSourceView) => {
378
+ if (isSourceView.value || hasTableInRange(editor, dataRangeCaches) || hasPreInRange(editor, dataRangeCaches)) {
379
+ return
380
+ }
381
+ insertInfoBlock(editor, dataRangeCaches)
382
+ editor.domRender()
383
+ editor.rangeRender()
384
+ }
385
+ }
386
+ }