vue-editify 0.2.15 → 0.2.17
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 +15 -36
- package/lib/editify/editify.vue.d.ts +0 -1
- package/lib/editify.es.js +17950 -17950
- package/lib/editify.umd.js +2 -2
- package/lib/index.d.ts +163 -164
- package/package.json +2 -2
- package/src/core/rule.ts +12 -22
- package/src/core/tool.ts +3 -3
- package/src/editify/editify.less +2 -0
- package/src/editify/editify.vue +1 -9
- package/src/editify/toolbar/toolbar.less +1 -1
- package/src/feature/align.ts +0 -2
- package/src/feature/attachment.ts +0 -1
- package/src/feature/backColor.ts +0 -2
- package/src/feature/bold.ts +0 -2
- package/src/feature/code.ts +0 -2
- package/src/feature/codeBlock.ts +0 -3
- package/src/feature/fontFamily.ts +0 -2
- package/src/feature/fontSize.ts +0 -2
- package/src/feature/foreColor.ts +0 -2
- package/src/feature/formatClear.ts +0 -2
- package/src/feature/heading.ts +0 -2
- package/src/feature/image.ts +0 -3
- package/src/feature/indent.ts +0 -1
- package/src/feature/infoBlock.ts +0 -1
- package/src/feature/italic.ts +0 -2
- package/src/feature/lineHeight.ts +1 -3
- package/src/feature/link.ts +0 -3
- package/src/feature/mathformula.ts +0 -1
- package/src/feature/orderList.ts +0 -2
- package/src/feature/panel.ts +0 -1
- package/src/feature/quote.ts +0 -1
- package/src/feature/separator.ts +0 -1
- package/src/feature/strikethrough.ts +0 -2
- package/src/feature/sub.ts +0 -2
- package/src/feature/super.ts +0 -2
- package/src/feature/table.ts +0 -13
- package/src/feature/task.ts +0 -2
- package/src/feature/underline.ts +0 -2
- package/src/feature/unorderList.ts +0 -2
- package/src/feature/video.ts +0 -4
- package/src/index.ts +14 -5
package/examples/App.vue
CHANGED
@@ -4,8 +4,8 @@
|
|
4
4
|
</div>
|
5
5
|
</template>
|
6
6
|
<script setup lang="ts">
|
7
|
-
import { h,
|
8
|
-
import {
|
7
|
+
import { h, ref, onErrorCaptured } from 'vue'
|
8
|
+
import { Editify } from '../src'
|
9
9
|
|
10
10
|
onErrorCaptured(err => {
|
11
11
|
console.log(err)
|
@@ -13,7 +13,7 @@ onErrorCaptured(err => {
|
|
13
13
|
|
14
14
|
const editifyRef = ref<InstanceType<typeof Editify> | null>(null)
|
15
15
|
const dark = ref<boolean>(false)
|
16
|
-
const menuConfig = ref
|
16
|
+
const menuConfig = ref({
|
17
17
|
use: true,
|
18
18
|
mode: 'inner',
|
19
19
|
sequence: {
|
@@ -42,7 +42,7 @@ const menuConfig = ref<MenuConfigType>({
|
|
42
42
|
},
|
43
43
|
extends: {
|
44
44
|
dark: {
|
45
|
-
title:
|
45
|
+
title: '深色模式',
|
46
46
|
leftBorder: true,
|
47
47
|
active: dark.value,
|
48
48
|
default: () => h('span', dark.value ? '深色模式' : '浅色模式'),
|
@@ -52,41 +52,20 @@ const menuConfig = ref<MenuConfigType>({
|
|
52
52
|
}
|
53
53
|
}
|
54
54
|
})
|
55
|
-
const toolbarConfig = ref
|
55
|
+
const toolbarConfig = ref({
|
56
56
|
use: true
|
57
57
|
})
|
58
|
-
const val = ref<string>(
|
59
|
-
|
60
|
-
|
61
|
-
</span><span class="editify-hljs-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
</span><span class="editify-hljs-title function_"><span>data</span></span><span>(</span><span>){
|
66
|
-
</span><span class="editify-hljs-keyword"><span>return</span></span><span> {
|
67
|
-
</span><span class="editify-hljs-attr"><span>value</span></span><span>:</span><span class="editify-hljs-string"><span>'<p><br></p>'</span></span><span>
|
58
|
+
const val = ref<string>(
|
59
|
+
`<div data-editify-info="true" style="background-color: rgba(3, 168, 243, 0.15); color: rgb(3, 168, 243);"><span>调用domRender方法会先对编辑器内的元素进行格式化处理,然后会更新编辑器dom内容,渲染到视图上</span></div><p><br></p><p><br></p><h5><span>如何规范化校验(格式化)?</span></h5><p><br></p><h5><span>null</span></h5><div data-editify-list="ul"><span>stack数组元素只能是block元素,同时block元素只会出现在根部,如果某个元素的子元素是block元素,那么该block元素会被转为inline元素或者inblock元素(对于被转为inblock的block元素,其行为值behavior为"block")</span></div><div data-editify-list="ul"><span>inblock与其他元素不能同时存在于子元素数组中,如果某个元素的子元素数组中含有inblock元素,那么其他子元素也必然是inblock元素,否则该inblock元素会被转为inline元素</span></div><div data-editify-list="ul"><span>inblock元素的父元素必然是block元素或者inblock元素</span></div><div data-editify-list="ul"><span>换行符清除规则:换行符与其他元素不能同时存在,并且如果某个元素下存在多个换行符则会被清除为一个换行符</span></div><div data-editify-list="ul"><span>兄弟元素合并策略:相邻的两个文本元素的styles和marks相同则会被合并;相邻的两个行内元素的parsedom、styles和marks相同则会被合并(如果两个元素中有元素的locked属性为true则无法进行合并)</span></div><div data-editify-list="ul"><span>父子元素合并策略:父元素的子元素只有一个,并且该子元素是文本元素,父元素是parsedom==AlexElement.TEXT_NODE的行内元素,则子元素会父元素进行合并;父元素的子元素只有一个,inline元素、inblock元素如果与父元素的parsedom一致,marks和styles也一致,那么会与父元素合并(如果两个元素中有元素的locked属性为true则无法进行合并)</span></div><div data-editify-list="ul"><span>多个连续空白文本字符合并策略:文本元素内的空白文本值如果存在多个连续的情况下,会被合并成一个空白文本值</span></div><div data-editify-list="ul"><span>元素进行规范化处理时,会从stack依次进行遍历处理,当遍历子元素时,也是从第一个子元素开始依次遍历</span></div><p><br></p><blockquote><span>以上是编辑器内部的默认规范化处理规则,当然,编辑器对外提供了让我们自定义额外规则的能力,它便是AlexEditor的属性renderRules</span></blockquote><p><br></p><p><br></p><h5><span>使用renderRules自定义额外的规范化校验规则</span></h5><p><br></p><p><span>renderRules是一个数组,数组中可以定义多个函数,每个函数都会在调用formatElementStack方法时进行调用</span></p><pre data-editify-element="42" data-editify-hljs="javascript"><span class="editify-hljs-comment">//例如将<b>标签转为<span>标签</span><span>
|
60
|
+
</span><span class="editify-hljs-keyword">const</span><span> parseCode = </span><span class="editify-hljs-keyword">function</span><span>(</span><span class="editify-hljs-params">element</span><span>){
|
61
|
+
</span><span class="editify-hljs-keyword">if</span><span> (element.</span><span class="editify-hljs-property">parsedom</span><span> == </span><span class="editify-hljs-string">'b'</span><span>) {
|
62
|
+
element.</span><span class="editify-hljs-property">parsedom</span><span> = </span><span class="editify-hljs-string">'span'</span><span>
|
63
|
+
element.</span><span class="editify-hljs-property">styles</span><span> = {
|
64
|
+
</span><span class="editify-hljs-string">'font-weight'</span><span>:</span><span class="editify-hljs-string">'bold'</span><span>
|
68
65
|
}
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
app.</span><span class="editify-hljs-title function_"><span>use</span></span><span>(editify)
|
73
|
-
app.</span><span class="editify-hljs-title function_"><span>mount</span></span><span>(</span><span class="editify-hljs-string"><span>'#app'</span></span><span>)
|
74
|
-
</span></span><span class="editify-hljs-tag"><span></</span><span class="editify-hljs-name"><span>script</span></span><span>></span></span></pre><p><br></p><p><br></p><h5><span>在 Vue3 的工程化项目中使用</span></h5><p><br></p><pre mvi-editor-element-key="153" data-editify-element="193" data-editify-hljs="javascript"><span class="editify-hljs-comment"><span>//vue-cli或者vite的main.js中</span></span><span>
|
75
|
-
</span><span class="editify-hljs-keyword"><span>import</span></span><span> { createApp } </span><span class="editify-hljs-keyword"><span>from</span></span><span> </span><span class="editify-hljs-string"><span>"vue"</span></span><span>
|
76
|
-
</span><span class="editify-hljs-keyword"><span>import</span></span><span> </span><span class="editify-hljs-title class_"><span>App</span></span><span> </span><span class="editify-hljs-keyword"><span>from</span></span><span> </span><span class="editify-hljs-string"><span>'./App.vue'</span></span><span>
|
77
|
-
</span><span class="editify-hljs-keyword"><span>import</span></span><span> editify,{ version } </span><span class="editify-hljs-keyword"><span>from</span></span><span> </span><span class="editify-hljs-string"><span>"vue-editify"</span></span><span>
|
78
|
-
</span><span class="editify-hljs-variable language_"><span>console</span></span><span>.</span><span class="editify-hljs-title function_"><span>log</span></span><span>(version) </span><span class="editify-hljs-comment"><span>//查看版本号"</span></span><span>
|
79
|
-
</span><span class="editify-hljs-keyword"><span>const</span></span><span> app = </span><span class="editify-hljs-title function_"><span>createApp</span></span><span>(</span><span class="editify-hljs-title class_"><span>App</span></span><span>)
|
80
|
-
app.</span><span class="editify-hljs-title function_"><span>use</span></span><span>(editify)
|
81
|
-
app.</span><span class="editify-hljs-title function_"><span>mount</span></span><span>(</span><span class="editify-hljs-string"><span>"#app"</span></span><span>)</span></pre><pre data-editify-element="294"><span class="editify-hljs-tag"><span><</span><span class="editify-hljs-name"><span>editify</span></span><span> </span><span class="editify-hljs-attr"><span>v-model</span></span><span>=</span><span class="editify-hljs-string"><span>"value"</span></span><span> </span><span class="editify-hljs-attr"><span>placeholder</span></span><span>=</span><span class="editify-hljs-string"><span>"请输入"</span></span><span>></span></span><span class="editify-hljs-tag"><span></</span><span class="editify-hljs-name"><span>editify</span></span><span>></span></span></pre><p><br></p><p><br></p><h5><span>局部注册</span></h5><p><br></p><p><span>vue-editify支持局部注册组件,你可以按照如下方式引入Editify组件再进行注册</span></p><pre data-editify-element="343"><span class="editify-hljs-keyword"><span>import</span></span><span> { </span><span class="editify-hljs-title class_"><span>Editify</span></span><span> } </span><span class="editify-hljs-keyword"><span>from</span></span><span> </span><span class="editify-hljs-string"><span>"vue-editify"</span></span><span>
|
82
|
-
</span><span class="editify-hljs-keyword"><span>export</span></span><span> </span><span class="editify-hljs-keyword"><span>default</span></span><span> {
|
83
|
-
</span><span class="editify-hljs-attr"><span>component</span></span><span>:{
|
84
|
-
</span><span class="editify-hljs-attr"><span>editify</span></span><span>: </span><span class="editify-hljs-title class_"><span>Editify</span></span><span>
|
85
|
-
}
|
86
|
-
}</span></pre><p><br></p><p><br></p><h5><span>读取版本号</span></h5><p><br></p><pre data-editify-element="398" data-editify-hljs="javascript"><span class="editify-hljs-keyword"><span>import</span></span><span> { version } </span><span class="editify-hljs-keyword"><span>from</span></span><span> </span><span class="editify-hljs-string"><span>"vue-editify"</span></span></pre><p><span>如果是浏览器直接引入js和css使用vue-editify的,则按照如下方法获取版本号</span></p><pre data-editify-element="415" data-editify-hljs="javascript"><span class="editify-hljs-keyword"><span>const</span></span><span> version = editify.</span><span class="editify-hljs-property"><span>version</span></span></pre><p><br></p><p><br></p><h5><span>获取AlexElement对象</span></h5><p><br></p><p><span>当你需要进行复杂的操作时,可能需要自行创建元素,则可以引入该对象</span></p><pre data-editify-element="436"><span class="editify-hljs-keyword"><span>import</span></span><span> { </span><span class="editify-hljs-title class_"><span>AlexElement</span></span><span> } </span><span class="editify-hljs-keyword"><span>from</span></span><span> </span><span class="editify-hljs-string"><span>"vue-editify"</span></span></pre><p><span>如果是浏览器直接引入js和css使用vue-editify的,则按照如下方法获取AlexElement对象</span></p><pre data-editify-element="458"><span class="editify-hljs-keyword"><span>const</span></span><span> </span><span class="editify-hljs-title class_"><span>AlexElement</span></span><span> = editify.</span><span class="editify-hljs-property"><span>AlexElement</span></span></pre><p><span>关于AlexElement对象的使用请参考:</span><a href="https://www.ling0523.cn/alex-editor/document/6" data-editify-element="475"><span>《AlexElement元素》</span></a></p><p><br></p><p><br></p><h5><span>进阶使用</span></h5><p><br></p><p><span>如果你想进行更多复杂的操作,vue-editify可能无法满足,但是你可以通过操作alex-editor的相关对象来达到目的</span></p><pre data-editify-element="490"><span class="editify-hljs-comment"><span>//获取AlexElement对象,这样可以构建元素实例</span></span><span>
|
87
|
-
</span><span class="editify-hljs-keyword"><span>import</span></span><span> { </span><span class="editify-hljs-title class_"><span>AlexElement</span></span><span> } </span><span class="editify-hljs-keyword"><span>from</span></span><span> </span><span class="editify-hljs-string"><span>"vue-editify"</span></span></pre><pre data-editify-element="514"><span class="editify-hljs-comment"><span>//获取AlexEditor实例,调用底层方法</span></span><span>
|
88
|
-
</span><span class="editify-hljs-keyword"><span>const</span></span><span> editor = </span><span class="editify-hljs-keyword"><span>this</span></span><span>.$refs.editify.editor</span></pre><pre data-editify-element="530" data-editify-hljs="javascript"><span class="editify-hljs-comment"><span>//通过AlexEditor实例来获取AlexRange实例</span></span><span>
|
89
|
-
</span><span class="editify-hljs-keyword"><span>const</span></span><span> range = </span><span class="editify-hljs-variable language_"><span>this</span></span><span>.</span><span class="editify-hljs-property"><span>$refs</span></span><span>.</span><span class="editify-hljs-property"><span>editify</span></span><span>.</span><span class="editify-hljs-property"><span>editor</span></span><span>?.</span><span class="editify-hljs-property"><span>range</span></span></pre><p><br></p><p><span>通过操作这些底层的对象,你可以实现一些比较自由的操作,但是你可能需要先去了解alex-editor:</span><a href="https://www.ling0523.cn/alex-editor/" data-editify-element="569"><span>alex-editor开发文档</span></a></p>`)
|
66
|
+
}
|
67
|
+
}</span></pre>`
|
68
|
+
)
|
90
69
|
</script>
|
91
70
|
<style lang="less">
|
92
71
|
html,
|
@@ -489,7 +489,6 @@ declare const _default: import('vue').DefineComponent<{
|
|
489
489
|
insertText: (data: string) => void;
|
490
490
|
insertParagraph: () => void;
|
491
491
|
insertElement: (ele: AlexElement, cover?: boolean | undefined) => void;
|
492
|
-
formatElementStack: () => void;
|
493
492
|
domRender: (unPushHistory?: boolean | undefined) => void;
|
494
493
|
rangeRender: () => Promise<void>;
|
495
494
|
parseHtml: (html: string) => AlexElement[];
|