vue-editify 0.0.47 → 0.0.49
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.
- package/examples/App.vue +6 -17
- package/lib/editify.es.js +402 -291
- package/lib/editify.umd.js +1 -1
- package/lib/style.css +1 -1
- package/package.json +2 -2
- package/src/Editify.vue +148 -69
- package/src/components/bussiness/Menu.vue +80 -17
- package/src/components/bussiness/Toolbar.vue +31 -31
- package/src/core/index.js +12 -2
- package/src/icon/iconfont.css +4 -0
- package/src/icon/iconfont.ttf +0 -0
- package/src/icon/iconfont.woff +0 -0
- package/src/index.js +1 -1
- package/src/locale/en_US.js +2 -1
- package/src/locale/zh_CN.js +2 -1
package/src/Editify.vue
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
<template>
|
2
|
-
<div class="editify">
|
2
|
+
<div class="editify" :class="{ fullheight: height === true && !isFullScreen, fullscreen: isFullScreen }">
|
3
3
|
<!-- 菜单区域 -->
|
4
4
|
<Menu v-if="menuConfig.use" :config="menuConfig" :disabled="disabled || !canUseMenu" :color="color" ref="menu"></Menu>
|
5
5
|
<!-- 编辑层,与编辑区域宽高相同必须适配 -->
|
6
|
-
<div ref="body" class="editify-body" :class="{ border:
|
6
|
+
<div ref="body" class="editify-body" :class="{ border: showBorder, menu_inner: menuConfig.use && menuConfig.mode == 'inner' }" :data-editify-uid="uid">
|
7
7
|
<!-- 编辑器 -->
|
8
8
|
<div ref="content" class="editify-content" :class="{ placeholder: showPlaceholder, disabled: disabled }" :style="contentStyle" @keydown="handleEditorKeydown" @click="handleEditorClick" @compositionstart="isInputChinese = true" @compositionend="isInputChinese = false" :data-editify-placeholder="placeholder"></div>
|
9
9
|
<!-- 代码视图 -->
|
@@ -12,7 +12,7 @@
|
|
12
12
|
<Toolbar ref="toolbar" v-model="toolbarOptions.show" :node="toolbarOptions.node" :type="toolbarOptions.type" :config="toolbarConfig"></Toolbar>
|
13
13
|
</div>
|
14
14
|
<!-- 编辑器尾部 -->
|
15
|
-
<div v-if="showWordLength" class="editify-footer">
|
15
|
+
<div v-if="showWordLength" class="editify-footer" :class="{ fullscreen: isFullScreen && !isSourceView }" ref="footer">
|
16
16
|
<!-- 字数统计 -->
|
17
17
|
<div class="editify-footer-words">{{ $editTrans('totalWordCount') }}{{ textValue.length }}</div>
|
18
18
|
</div>
|
@@ -45,6 +45,8 @@ export default {
|
|
45
45
|
isModelChange: false,
|
46
46
|
//是否代码视图
|
47
47
|
isSourceView: false,
|
48
|
+
//是否全屏
|
49
|
+
isFullScreen: false,
|
48
50
|
//是否正在输入中文
|
49
51
|
isInputChinese: false,
|
50
52
|
//表格列宽拖拽记录数据
|
@@ -64,7 +66,9 @@ export default {
|
|
64
66
|
//rangeUpdate更新延时器
|
65
67
|
updateTimer: null,
|
66
68
|
//菜单栏是否可以使用标识
|
67
|
-
canUseMenu: false
|
69
|
+
canUseMenu: false,
|
70
|
+
//手动设定的编辑器编辑区域高度
|
71
|
+
contentHeight: 0
|
68
72
|
}
|
69
73
|
},
|
70
74
|
computed: {
|
@@ -91,8 +95,21 @@ export default {
|
|
91
95
|
}
|
92
96
|
return false
|
93
97
|
},
|
98
|
+
//是否显示边框
|
99
|
+
showBorder() {
|
100
|
+
//全屏模式下不显示边框
|
101
|
+
if (this.isFullScreen) {
|
102
|
+
return false
|
103
|
+
}
|
104
|
+
return this.border
|
105
|
+
},
|
94
106
|
//编辑器样式设置
|
95
107
|
contentStyle() {
|
108
|
+
if (this.height === true || this.isFullScreen) {
|
109
|
+
return {
|
110
|
+
height: this.contentHeight + 'px'
|
111
|
+
}
|
112
|
+
}
|
96
113
|
return this.autoheight ? { minHeight: this.height } : { height: this.height }
|
97
114
|
},
|
98
115
|
//最终生效的工具栏配置
|
@@ -133,6 +150,21 @@ export default {
|
|
133
150
|
this.handleToolbar()
|
134
151
|
}
|
135
152
|
}
|
153
|
+
},
|
154
|
+
//全屏切换
|
155
|
+
isFullScreen() {
|
156
|
+
this.$nextTick(() => {
|
157
|
+
this.setContentHeight()
|
158
|
+
})
|
159
|
+
},
|
160
|
+
//监听height为true
|
161
|
+
height: {
|
162
|
+
immediate: true,
|
163
|
+
handler: function () {
|
164
|
+
this.$nextTick(() => {
|
165
|
+
this.setContentHeight()
|
166
|
+
})
|
167
|
+
}
|
136
168
|
}
|
137
169
|
},
|
138
170
|
mounted() {
|
@@ -149,7 +181,10 @@ export default {
|
|
149
181
|
//鼠标点击箭头
|
150
182
|
Dap.event.on(document.documentElement, `click.editify_${this.uid}`, this.documentClick)
|
151
183
|
//监听窗口改变
|
152
|
-
Dap.event.on(window, `resize.editify_${this.uid}`,
|
184
|
+
Dap.event.on(window, `resize.editify_${this.uid}`, () => {
|
185
|
+
this.setVideoHeight()
|
186
|
+
this.setContentHeight()
|
187
|
+
})
|
153
188
|
},
|
154
189
|
methods: {
|
155
190
|
//初始创建编辑器
|
@@ -236,13 +271,13 @@ export default {
|
|
236
271
|
removeScroll(this.$refs.content)
|
237
272
|
},
|
238
273
|
//工具条显示判断
|
239
|
-
handleToolbar() {
|
274
|
+
handleToolbar(useCache = false) {
|
240
275
|
if (this.disabled || this.isSourceView) {
|
241
276
|
return
|
242
277
|
}
|
243
278
|
this.hideToolbar()
|
244
279
|
this.$nextTick(() => {
|
245
|
-
const table = this.getCurrentParsedomElement('table',
|
280
|
+
const table = this.getCurrentParsedomElement('table', useCache)
|
246
281
|
const pre = this.getCurrentParsedomElement('pre', true)
|
247
282
|
const link = this.getCurrentParsedomElement('a', true)
|
248
283
|
const image = this.getCurrentParsedomElement('img', true)
|
@@ -288,7 +323,7 @@ export default {
|
|
288
323
|
this.toolbarOptions.show = true
|
289
324
|
}
|
290
325
|
} else {
|
291
|
-
const result = this.editor.getElementsByRange(true
|
326
|
+
const result = this.editor.getElementsByRange(true).flatIncludes.filter(item => {
|
292
327
|
return item.element.isText()
|
293
328
|
})
|
294
329
|
if (result.length && !this.hasTable(true) && !this.hasPreStyle(true) && !this.hasLink(true) && !this.hasImage(true) && !this.hasVideo(true)) {
|
@@ -472,7 +507,7 @@ export default {
|
|
472
507
|
if (this.disabled) {
|
473
508
|
return
|
474
509
|
}
|
475
|
-
if (this.border && this.color) {
|
510
|
+
if (this.border && this.color && !this.isFullScreen) {
|
476
511
|
//恢复编辑区域边框颜色
|
477
512
|
this.$refs.body.style.borderColor = ''
|
478
513
|
//恢复编辑区域阴影颜色
|
@@ -490,7 +525,7 @@ export default {
|
|
490
525
|
if (this.disabled) {
|
491
526
|
return
|
492
527
|
}
|
493
|
-
if (this.border && this.color) {
|
528
|
+
if (this.border && this.color && !this.isFullScreen) {
|
494
529
|
//编辑区域边框颜色
|
495
530
|
this.$refs.body.style.borderColor = this.color
|
496
531
|
//转换颜色值
|
@@ -576,7 +611,7 @@ export default {
|
|
576
611
|
this.$emit('insertparagraph', this.value)
|
577
612
|
},
|
578
613
|
//编辑器焦点更新
|
579
|
-
handleRangeUpdate(
|
614
|
+
handleRangeUpdate() {
|
580
615
|
if (this.disabled) {
|
581
616
|
return
|
582
617
|
}
|
@@ -584,21 +619,21 @@ export default {
|
|
584
619
|
clearTimeout(this.updateTimer)
|
585
620
|
}
|
586
621
|
this.updateTimer = setTimeout(() => {
|
587
|
-
|
622
|
+
//如果使用工具条或者菜单栏
|
588
623
|
if (this.toolbarConfig.use || this.menuConfig.use) {
|
589
|
-
|
590
|
-
this.editor.getElementsByRange(
|
591
|
-
|
592
|
-
|
593
|
-
|
594
|
-
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
|
624
|
+
//先获取选区内的元素设置内部缓存
|
625
|
+
this.editor.getElementsByRange()
|
626
|
+
//如果使用工具条
|
627
|
+
if (this.toolbarConfig.use) {
|
628
|
+
this.handleToolbar(true)
|
629
|
+
}
|
630
|
+
//如果使用菜单栏
|
631
|
+
if (this.menuConfig.use) {
|
632
|
+
this.$refs.menu.handleRangeUpdate(true)
|
633
|
+
}
|
599
634
|
}
|
600
635
|
}, 200)
|
601
|
-
this.$emit('rangeupdate', this.value
|
636
|
+
this.$emit('rangeupdate', this.value)
|
602
637
|
},
|
603
638
|
//编辑器复制
|
604
639
|
handleCopy(text, html) {
|
@@ -613,7 +648,7 @@ export default {
|
|
613
648
|
this.$emit('paste-text', data)
|
614
649
|
},
|
615
650
|
//编辑器粘贴html
|
616
|
-
handlePasteHtml(elements
|
651
|
+
handlePasteHtml(elements) {
|
617
652
|
const keepStyles = Object.assign(pasteKeepData.styles, this.pasteKeepStyles || {})
|
618
653
|
const keepMarks = Object.assign(pasteKeepData.marks, this.pasteKeepMarks || {})
|
619
654
|
//粘贴html时过滤元素的样式和属性
|
@@ -677,6 +712,23 @@ export default {
|
|
677
712
|
video.style.height = video.offsetWidth / this.videoRatio + 'px'
|
678
713
|
})
|
679
714
|
},
|
715
|
+
//设置编辑器主体高度
|
716
|
+
setContentHeight() {
|
717
|
+
if (this.height === true || this.isFullScreen) {
|
718
|
+
let height = this.$el.offsetHeight
|
719
|
+
if (this.menuConfig.use) {
|
720
|
+
height -= this.$refs.menu.$el.offsetHeight
|
721
|
+
}
|
722
|
+
if (this.showWordLength) {
|
723
|
+
height -= this.$refs.footer.offsetHeight
|
724
|
+
}
|
725
|
+
if (this.$refs.menu.menuMode == 'default') {
|
726
|
+
height -= 10
|
727
|
+
}
|
728
|
+
//这里减去2px是因为body设了padding:1px
|
729
|
+
this.contentHeight = height - 2
|
730
|
+
}
|
731
|
+
},
|
680
732
|
|
681
733
|
//api:光标设置到文档底部
|
682
734
|
collapseToEnd() {
|
@@ -727,7 +779,7 @@ export default {
|
|
727
779
|
if (this.editor.range.anchor.element.isEqual(this.editor.range.focus.element)) {
|
728
780
|
return this.getParsedomElementByElement(this.editor.range.anchor.element, parsedom)
|
729
781
|
}
|
730
|
-
const arr = this.editor.getElementsByRange(
|
782
|
+
const arr = this.editor.getElementsByRange(useCache).includes.map(item => {
|
731
783
|
return this.getParsedomElementByElement(item.element, parsedom)
|
732
784
|
})
|
733
785
|
let hasNull = arr.some(el => {
|
@@ -814,7 +866,7 @@ export default {
|
|
814
866
|
//设置标题
|
815
867
|
block.parsedom = parsedom
|
816
868
|
} else {
|
817
|
-
const result = this.editor.getElementsByRange(
|
869
|
+
const result = this.editor.getElementsByRange(useCache).includes
|
818
870
|
result.forEach(el => {
|
819
871
|
if (el.element.isBlock()) {
|
820
872
|
blockToParagraph(el.element)
|
@@ -853,7 +905,7 @@ export default {
|
|
853
905
|
//起点和终点不在一起
|
854
906
|
else {
|
855
907
|
let blocks = []
|
856
|
-
const result = this.editor.getElementsByRange(
|
908
|
+
const result = this.editor.getElementsByRange(useCache).includes
|
857
909
|
result.forEach(item => {
|
858
910
|
const block = item.element.getBlock()
|
859
911
|
const exist = blocks.some(el => block.isEqual(el))
|
@@ -897,7 +949,7 @@ export default {
|
|
897
949
|
//起点和终点不在一起
|
898
950
|
else {
|
899
951
|
let blocks = []
|
900
|
-
const result = this.editor.getElementsByRange(
|
952
|
+
const result = this.editor.getElementsByRange(useCache).includes
|
901
953
|
result.forEach(item => {
|
902
954
|
const block = item.element.getBlock()
|
903
955
|
const exist = blocks.some(el => block.isEqual(el))
|
@@ -930,11 +982,11 @@ export default {
|
|
930
982
|
}
|
931
983
|
const active = this.queryTextStyle(name, value, useCache)
|
932
984
|
if (active) {
|
933
|
-
this.editor.removeTextStyle([name],
|
985
|
+
this.editor.removeTextStyle([name], true)
|
934
986
|
} else {
|
935
987
|
let styles = {}
|
936
988
|
styles[name] = value
|
937
|
-
this.editor.setTextStyle(styles,
|
989
|
+
this.editor.setTextStyle(styles, true)
|
938
990
|
}
|
939
991
|
if (isRender) {
|
940
992
|
this.editor.formatElementStack()
|
@@ -956,11 +1008,11 @@ export default {
|
|
956
1008
|
}
|
957
1009
|
const active = this.queryTextMark(name, value, useCache)
|
958
1010
|
if (active) {
|
959
|
-
this.editor.removeTextMark([name],
|
1011
|
+
this.editor.removeTextMark([name], true)
|
960
1012
|
} else {
|
961
1013
|
let marks = {}
|
962
1014
|
marks[name] = value
|
963
|
-
this.editor.setTextMark(marks,
|
1015
|
+
this.editor.setTextMark(marks, true)
|
964
1016
|
}
|
965
1017
|
if (isRender) {
|
966
1018
|
this.editor.formatElementStack()
|
@@ -981,7 +1033,8 @@ export default {
|
|
981
1033
|
return
|
982
1034
|
}
|
983
1035
|
this.editor.removeTextStyle(null, useCache)
|
984
|
-
|
1036
|
+
//这里不能使用缓存,因为removeTextStyle会更新光标位置
|
1037
|
+
this.editor.removeTextMark(null)
|
985
1038
|
if (isRender) {
|
986
1039
|
this.editor.formatElementStack()
|
987
1040
|
this.editor.domRender()
|
@@ -1017,7 +1070,7 @@ export default {
|
|
1017
1070
|
}
|
1018
1071
|
}
|
1019
1072
|
} else {
|
1020
|
-
const result = this.editor.getElementsByRange(
|
1073
|
+
const result = this.editor.getElementsByRange(useCache).includes
|
1021
1074
|
result.forEach(el => {
|
1022
1075
|
if (el.element.isBlock() || el.element.isInblock()) {
|
1023
1076
|
if (el.element.hasStyles()) {
|
@@ -1106,7 +1159,7 @@ export default {
|
|
1106
1159
|
//起点和终点不在一起
|
1107
1160
|
else {
|
1108
1161
|
let blocks = []
|
1109
|
-
const result = this.editor.getElementsByRange(
|
1162
|
+
const result = this.editor.getElementsByRange(useCache).includes
|
1110
1163
|
result.forEach(item => {
|
1111
1164
|
const block = item.element.getBlock()
|
1112
1165
|
const exist = blocks.some(el => block.isEqual(el))
|
@@ -1157,7 +1210,7 @@ export default {
|
|
1157
1210
|
}
|
1158
1211
|
}
|
1159
1212
|
} else {
|
1160
|
-
const result = this.editor.getElementsByRange(
|
1213
|
+
const result = this.editor.getElementsByRange(useCache).includes
|
1161
1214
|
result.forEach(el => {
|
1162
1215
|
if (el.element.isBlock() || el.element.isInblock()) {
|
1163
1216
|
if (el.element.hasStyles()) {
|
@@ -1232,7 +1285,7 @@ export default {
|
|
1232
1285
|
fn(block)
|
1233
1286
|
}
|
1234
1287
|
} else {
|
1235
|
-
const result = this.editor.getElementsByRange(
|
1288
|
+
const result = this.editor.getElementsByRange(useCache).includes
|
1236
1289
|
result.forEach(item => {
|
1237
1290
|
const block = item.element.getBlock()
|
1238
1291
|
const inblock = item.element.getInblock()
|
@@ -1277,7 +1330,7 @@ export default {
|
|
1277
1330
|
fn(block)
|
1278
1331
|
}
|
1279
1332
|
} else {
|
1280
|
-
const result = this.editor.getElementsByRange(
|
1333
|
+
const result = this.editor.getElementsByRange(useCache).includes
|
1281
1334
|
result.forEach(item => {
|
1282
1335
|
const block = item.element.getBlock()
|
1283
1336
|
const inblock = item.element.getInblock()
|
@@ -1295,7 +1348,7 @@ export default {
|
|
1295
1348
|
}
|
1296
1349
|
},
|
1297
1350
|
//api:插入图片
|
1298
|
-
insertImage(url, isRender = true) {
|
1351
|
+
insertImage(url, isRender = true, useCache = false) {
|
1299
1352
|
if (this.disabled) {
|
1300
1353
|
return
|
1301
1354
|
}
|
@@ -1314,7 +1367,7 @@ export default {
|
|
1314
1367
|
null,
|
1315
1368
|
null
|
1316
1369
|
)
|
1317
|
-
this.editor.insertElement(image)
|
1370
|
+
this.editor.insertElement(image, true, useCache)
|
1318
1371
|
if (isRender) {
|
1319
1372
|
this.editor.formatElementStack()
|
1320
1373
|
this.editor.domRender()
|
@@ -1322,7 +1375,7 @@ export default {
|
|
1322
1375
|
}
|
1323
1376
|
},
|
1324
1377
|
//api:插入视频
|
1325
|
-
insertVideo(url, isRender = true) {
|
1378
|
+
insertVideo(url, isRender = true, useCache = false) {
|
1326
1379
|
if (this.disabled) {
|
1327
1380
|
return
|
1328
1381
|
}
|
@@ -1341,7 +1394,7 @@ export default {
|
|
1341
1394
|
null,
|
1342
1395
|
null
|
1343
1396
|
)
|
1344
|
-
this.editor.insertElement(video)
|
1397
|
+
this.editor.insertElement(video, true, useCache)
|
1345
1398
|
const leftSpace = AlexElement.getSpaceElement()
|
1346
1399
|
const rightSpace = AlexElement.getSpaceElement()
|
1347
1400
|
this.editor.addElementAfter(rightSpace, video)
|
@@ -1362,7 +1415,7 @@ export default {
|
|
1362
1415
|
if (this.editor.range.anchor.isEqual(this.editor.range.focus)) {
|
1363
1416
|
return this.editor.range.anchor.element.isPreStyle()
|
1364
1417
|
}
|
1365
|
-
const result = this.editor.getElementsByRange(
|
1418
|
+
const result = this.editor.getElementsByRange(useCache).includes
|
1366
1419
|
return result.some(item => {
|
1367
1420
|
return item.element.isPreStyle()
|
1368
1421
|
})
|
@@ -1376,7 +1429,7 @@ export default {
|
|
1376
1429
|
const block = this.editor.range.anchor.element.getBlock()
|
1377
1430
|
return block.parsedom == 'blockquote'
|
1378
1431
|
}
|
1379
|
-
const result = this.editor.getElementsByRange(
|
1432
|
+
const result = this.editor.getElementsByRange(useCache).includes
|
1380
1433
|
return result.some(item => {
|
1381
1434
|
if (item.element.isBlock()) {
|
1382
1435
|
return item.element.parsedom == 'blockquote'
|
@@ -1395,7 +1448,7 @@ export default {
|
|
1395
1448
|
const block = this.editor.range.anchor.element.getBlock()
|
1396
1449
|
return blockIsList(block, ordered)
|
1397
1450
|
}
|
1398
|
-
const result = this.editor.getElementsByRange(
|
1451
|
+
const result = this.editor.getElementsByRange(useCache).includes
|
1399
1452
|
return result.some(item => {
|
1400
1453
|
if (item.element.isBlock()) {
|
1401
1454
|
return blockIsList(item.element, ordered)
|
@@ -1413,7 +1466,7 @@ export default {
|
|
1413
1466
|
if (this.editor.range.anchor.isEqual(this.editor.range.focus)) {
|
1414
1467
|
return !!this.getParsedomElementByElement(this.editor.range.anchor.element, 'a')
|
1415
1468
|
}
|
1416
|
-
const result = this.editor.getElementsByRange(
|
1469
|
+
const result = this.editor.getElementsByRange(useCache).flatIncludes.filter(item => {
|
1417
1470
|
return item.element.isText()
|
1418
1471
|
})
|
1419
1472
|
return result.some(item => {
|
@@ -1429,7 +1482,7 @@ export default {
|
|
1429
1482
|
const block = this.editor.range.anchor.element.getBlock()
|
1430
1483
|
return block.parsedom == 'table'
|
1431
1484
|
}
|
1432
|
-
const result = this.editor.getElementsByRange(
|
1485
|
+
const result = this.editor.getElementsByRange(useCache).includes
|
1433
1486
|
return result.some(item => {
|
1434
1487
|
if (item.element.isBlock()) {
|
1435
1488
|
return item.element.parsedom == 'table'
|
@@ -1448,7 +1501,7 @@ export default {
|
|
1448
1501
|
const block = this.editor.range.anchor.element.getBlock()
|
1449
1502
|
return blockIsTask(block)
|
1450
1503
|
}
|
1451
|
-
const result = this.editor.getElementsByRange(
|
1504
|
+
const result = this.editor.getElementsByRange(useCache).includes
|
1452
1505
|
return result.some(item => {
|
1453
1506
|
if (item.element.isBlock()) {
|
1454
1507
|
return blockIsTask(item.element)
|
@@ -1466,7 +1519,7 @@ export default {
|
|
1466
1519
|
if (this.editor.range.anchor.isEqual(this.editor.range.focus)) {
|
1467
1520
|
return this.editor.range.anchor.element.isClosed() && this.editor.range.anchor.element.parsedom == 'img'
|
1468
1521
|
}
|
1469
|
-
const result = this.editor.getElementsByRange(
|
1522
|
+
const result = this.editor.getElementsByRange(useCache).flatIncludes
|
1470
1523
|
return result.some(item => {
|
1471
1524
|
return item.element.isClosed() && item.element.parsedom == 'img'
|
1472
1525
|
})
|
@@ -1479,7 +1532,7 @@ export default {
|
|
1479
1532
|
if (this.editor.range.anchor.isEqual(this.editor.range.focus)) {
|
1480
1533
|
return this.editor.range.anchor.element.isClosed() && this.editor.range.anchor.element.parsedom == 'video'
|
1481
1534
|
}
|
1482
|
-
const result = this.editor.getElementsByRange(
|
1535
|
+
const result = this.editor.getElementsByRange(useCache).flatIncludes
|
1483
1536
|
return result.some(item => {
|
1484
1537
|
return item.element.isClosed() && item.element.parsedom == 'video'
|
1485
1538
|
})
|
@@ -1493,7 +1546,7 @@ export default {
|
|
1493
1546
|
const block = this.editor.range.anchor.element.getBlock()
|
1494
1547
|
return block.parsedom == 'blockquote'
|
1495
1548
|
}
|
1496
|
-
const result = this.editor.getElementsByRange(
|
1549
|
+
const result = this.editor.getElementsByRange(useCache).includes
|
1497
1550
|
return result.every(item => {
|
1498
1551
|
if (item.element.isBlock()) {
|
1499
1552
|
return item.element.parsedom == 'blockquote'
|
@@ -1512,7 +1565,7 @@ export default {
|
|
1512
1565
|
const block = this.editor.range.anchor.element.getBlock()
|
1513
1566
|
return blockIsList(block, ordered)
|
1514
1567
|
}
|
1515
|
-
const result = this.editor.getElementsByRange(
|
1568
|
+
const result = this.editor.getElementsByRange(useCache).includes
|
1516
1569
|
return result.every(item => {
|
1517
1570
|
if (item.element.isBlock()) {
|
1518
1571
|
return blockIsList(item.element, ordered)
|
@@ -1531,7 +1584,7 @@ export default {
|
|
1531
1584
|
const block = this.editor.range.anchor.element.getBlock()
|
1532
1585
|
return blockIsTask(block)
|
1533
1586
|
}
|
1534
|
-
const result = this.editor.getElementsByRange(
|
1587
|
+
const result = this.editor.getElementsByRange(useCache).includes
|
1535
1588
|
return result.every(item => {
|
1536
1589
|
if (item.element.isBlock()) {
|
1537
1590
|
return blockIsTask(item.element)
|
@@ -1542,7 +1595,7 @@ export default {
|
|
1542
1595
|
})
|
1543
1596
|
},
|
1544
1597
|
//api:创建一个空的表格
|
1545
|
-
insertTable(rowLength, colLength, isRender = true) {
|
1598
|
+
insertTable(rowLength, colLength, isRender = true, useCache = false) {
|
1546
1599
|
if (this.disabled) {
|
1547
1600
|
return
|
1548
1601
|
}
|
@@ -1562,7 +1615,7 @@ export default {
|
|
1562
1615
|
}
|
1563
1616
|
this.editor.addElementTo(row, tbody)
|
1564
1617
|
}
|
1565
|
-
this.editor.insertElement(table)
|
1618
|
+
this.editor.insertElement(table, true, useCache)
|
1566
1619
|
//在表格后创建一个段落
|
1567
1620
|
const paragraph = new AlexElement('block', AlexElement.BLOCK_NODE, null, null, null)
|
1568
1621
|
const breakEl = new AlexElement('closed', 'br', null, null, null)
|
@@ -1615,10 +1668,10 @@ export default {
|
|
1615
1668
|
}
|
1616
1669
|
//起点和终点不在一起
|
1617
1670
|
else {
|
1618
|
-
let result = this.editor.getElementsByRange(true
|
1671
|
+
let result = this.editor.getElementsByRange(true).includes
|
1619
1672
|
this.editor.range.anchor.moveToStart(result[0].element.getBlock())
|
1620
1673
|
this.editor.range.focus.moveToEnd(result[result.length - 1].element.getBlock())
|
1621
|
-
const res = this.editor.getElementsByRange(true
|
1674
|
+
const res = this.editor.getElementsByRange(true).flatIncludes.filter(el => el.element.isText())
|
1622
1675
|
const obj = {}
|
1623
1676
|
res.forEach(el => {
|
1624
1677
|
if (obj[el.element.getBlock().key]) {
|
@@ -1660,14 +1713,14 @@ export default {
|
|
1660
1713
|
}
|
1661
1714
|
},
|
1662
1715
|
//api:插入文本
|
1663
|
-
insertText(text, isRender = true) {
|
1716
|
+
insertText(text, isRender = true, useCache = false) {
|
1664
1717
|
if (this.disabled) {
|
1665
1718
|
return
|
1666
1719
|
}
|
1667
1720
|
if (!this.editor.range) {
|
1668
1721
|
return
|
1669
1722
|
}
|
1670
|
-
this.editor.insertText(text)
|
1723
|
+
this.editor.insertText(text, useCache)
|
1671
1724
|
if (isRender) {
|
1672
1725
|
this.editor.formatElementStack()
|
1673
1726
|
this.editor.domRender()
|
@@ -1675,7 +1728,7 @@ export default {
|
|
1675
1728
|
}
|
1676
1729
|
},
|
1677
1730
|
//api:插入html
|
1678
|
-
insertHtml(html, isRender = true) {
|
1731
|
+
insertHtml(html, isRender = true, useCache = false) {
|
1679
1732
|
if (this.disabled) {
|
1680
1733
|
return
|
1681
1734
|
}
|
@@ -1684,7 +1737,7 @@ export default {
|
|
1684
1737
|
}
|
1685
1738
|
const elements = this.editor.parseHtml(html)
|
1686
1739
|
for (let i = 0; i < elements.length; i++) {
|
1687
|
-
this.editor.insertElement(elements[i], false)
|
1740
|
+
this.editor.insertElement(elements[i], false, i == 0 ? useCache : false)
|
1688
1741
|
}
|
1689
1742
|
if (isRender) {
|
1690
1743
|
this.editor.formatElementStack()
|
@@ -1723,6 +1776,23 @@ export default {
|
|
1723
1776
|
-webkit-tap-highlight-color: transparent;
|
1724
1777
|
outline: none;
|
1725
1778
|
}
|
1779
|
+
|
1780
|
+
&.fullheight {
|
1781
|
+
height: 100%;
|
1782
|
+
}
|
1783
|
+
|
1784
|
+
&.fullscreen {
|
1785
|
+
position: fixed;
|
1786
|
+
z-index: 1000;
|
1787
|
+
left: 0;
|
1788
|
+
top: 0;
|
1789
|
+
width: 100vw;
|
1790
|
+
height: 100vh;
|
1791
|
+
|
1792
|
+
.editify-body {
|
1793
|
+
border-radius: 0;
|
1794
|
+
}
|
1795
|
+
}
|
1726
1796
|
}
|
1727
1797
|
|
1728
1798
|
.editify-body {
|
@@ -1731,22 +1801,24 @@ export default {
|
|
1731
1801
|
position: relative;
|
1732
1802
|
background-color: @background;
|
1733
1803
|
padding: 1px;
|
1804
|
+
border-radius: 4px;
|
1734
1805
|
|
1735
1806
|
&.border {
|
1736
1807
|
border: 1px solid @border-color;
|
1737
|
-
border-radius: 4px;
|
1738
1808
|
transition: all 500ms;
|
1739
1809
|
|
1740
1810
|
&.menu_inner {
|
1741
|
-
border-radius: 0 0 4px 4px;
|
1742
1811
|
border-top: none;
|
1743
|
-
|
1812
|
+
border-radius: 0 0 4px 4px;
|
1813
|
+
}
|
1814
|
+
}
|
1744
1815
|
|
1745
|
-
|
1746
|
-
|
1747
|
-
|
1748
|
-
|
1749
|
-
|
1816
|
+
&.menu_inner {
|
1817
|
+
padding-top: 21px;
|
1818
|
+
|
1819
|
+
.editify-source {
|
1820
|
+
top: 21px;
|
1821
|
+
height: calc(100% - 21px);
|
1750
1822
|
}
|
1751
1823
|
}
|
1752
1824
|
|
@@ -1779,6 +1851,8 @@ export default {
|
|
1779
1851
|
line-height: inherit;
|
1780
1852
|
padding: 6px 10px;
|
1781
1853
|
cursor: text;
|
1854
|
+
touch-action: none;
|
1855
|
+
user-select: none;
|
1782
1856
|
}
|
1783
1857
|
|
1784
1858
|
//段落样式和标题
|
@@ -2072,5 +2146,10 @@ export default {
|
|
2072
2146
|
color: @font-color-light;
|
2073
2147
|
line-height: 1;
|
2074
2148
|
}
|
2149
|
+
|
2150
|
+
//全屏模式下并且不是代码视图下,显示一个上边框
|
2151
|
+
&.fullscreen {
|
2152
|
+
border-top: 1px solid @border-color;
|
2153
|
+
}
|
2075
2154
|
}
|
2076
2155
|
</style>
|