工具函数
=======

editorBlur.js
-----------
> vue组件控制编辑器失焦的mixin，提供一个执行传入自定义组件的名为editorBlur函数的方法

因为编辑器整个容器是可编辑的（contenteditable），所以如果想让渲染在编辑器里的自定义组件的交互不触发软键盘的弹出，可以使用该方法。

```
<template>
    <div @click="customMethod">test</div>
</template>
<script>
    import { editorBlurMixin }  from '@Util/editorBlur.js'
    export default {
        mixins: [ editorBlurMixin ]
        methods: {
            customMethod() {
                this.editorBlurHof(() => {
                    // 想要处理的真正的逻辑
                })()
            }
        }
    }
</script>
```

uploadMethod.js
-----------

> 附件上传的方法

| 方法名 | 功能描述 | 调用系统 | 备注 |
| --- | --- | --- | --- |
| uploadImage | 上传图片  | avatar | 在m.hadf.com和station.haodf.com域名下都可以正常调用，接受两个参数file和userId， 其中file参数可以是图片二进制数据也可以是base64链接 |
| uploadAudio  | 上传音频  | avatar | 在m.hadf.com和station.haodf.com域名下都可以正常调用，接受两个参数file和userId |
| getSignature | 获取视频上传签名方法  | nmedia | |
| uploadScuccessVideo  | 创建视频记录  | nmedia | |
| uploadVideo  | 上传视频方法  | 腾讯sdk | |
| saveOrUpdateDraft  | 上传编辑器内容  | 可配置 | 接受两个参数data和uploadUrl, 将编辑器内容持久化 |


resetScrollPos.js
------------

> 编辑在聚焦；插入文字、空行；插入附件之后，光标位置矫正函数

window上注册了一个名为focusScrollReset的方法供客户端调用，客户端可以在调用该方法时，将键盘高度以及自定义工具栏的高度传递给编辑器。
备注：滚动位置矫正主要依赖于window.visualViewport属性，当宿主环境的该属性可用时，不需要要键盘高度和自定义工具栏高度即可准确定位


index.js
-----------

> 其他一些工具函数

| 方法名 | 功能描述  | 备注 |
| --- | --- | --- |
| getUniqueKey | 生成唯一键值 | 当需要在前端生成唯一标识时使用 |
| assemblyData  | 组装待提交服务端数据 | [详细](#user-content--assemblydata) |
| parseData | 解析服务端拉取回来的数据为delta | [详细](#user-content--parsedata) |
| checkUrlIsBase64 | 检查图片链接是否为base64 | [详细](#user-content--checkurlisbase64) |
| convertBase64UrlToBlob | 将base64格式的图片链接转为二进制文件 | [详细](#user-content--convertbase64urltoblob) |
| checkEmbedType | 判断附件类型的工厂函数 | [详细](#user-content--checkembedtype) |
| checkIsImageType | 判断图片类型 | [详细](#user-content--checkisimagetype) |
| checkIsAudioType | 判断音频类型 | [详细](#user-content--checkisaudiotype) |
| checkIsVideoType | 判断视频类型 | [详细](#user-content--checkisvideotype) |
| checkEmbedSizeExceed | 判断附件体积是否超出的工厂函数 | [详细](#user-content--checkembedsizeexceed) |
| checkMBSizeExceed | 判断附件体积是否超出（单位MB | [详细](#user-content--checkmbsizeexceed) |
| insertEmbed | 插入附件 | [详细](#user-content--insertembed) |
| injectPropsFromQuillToComp | 向自定义组件内部注入需要调用编辑器实例上方法的一系列函数 | [详细](#user-content--injectpropsfromquilltocomp) |
| injectPropsFromBlotToComp | 向自定义组件内部注入需要调用blot节点或node节点上方法的一系列函数 | [详细](#user-content--injectpropsfromblottocomp) |
| camelCaseDataset | domNode的dataset数据集转换为驼峰格式 | 返回需要转换字段的map |
| getDeltaFromDomNode | 从domNode上取delta数据 | 1.blot节点取值时调用；2.客户端激活时从服务端渲染模板上取值时调用 |
| fixedEditorPasteScroll | 修复quill在复制文字之后，光标位置不正确 |  [详细](#user-content--fixededitorpastescroll) |
| throwEditorError | 在需要将编辑器内部的一些错误暴露给使用者时调用 | [详细](#user-content--throweditorerror) |

<h4 id="assemblyData">
 assemblyData
</h4>
-------


<h4 id="parseData">
 parseData
</h4>
-------


<h4 id="checkUrlIsBase64">
 checkUrlIsBase64
</h4>
-------


<h4 id="convertBase64UrlToBlob">
 convertBase64UrlToBlob
</h4>
-------

<h4 id="checkEmbedType">
 checkEmbedType
</h4>
-------

<h4 id="checkIsImageType">
 checkIsImageType
</h4>
-------

<h4 id="checkIsAudioType">
 checkIsAudioType
</h4>
-------

<h4 id="checkIsVideoType">
 checkIsVideoType
</h4>
-------

<h4 id="checkEmbedSizeExceed">
 checkEmbedSizeExceed
</h4>
-------

<h4 id="checkMBSizeExceed">
 checkMBSizeExceed
</h4>
-------

<h4 id="insertEmbed">
 insertEmbed
</h4>
-------

<h4 id="injectPropsFromQuillToComp">
 injectPropsFromQuillToComp
</h4>
-------

<h4 id="injectPropsFromBlotToComp">
 injectPropsFromBlotToComp
</h4>
-------

<h4 id="fixedEditorPasteScroll">
 fixedEditorPasteScroll
</h4>
-------



<h4 id="throwEditorError">
 throwEditorError
</h4>
-------
> 抛错给使用方

该方法也被注入到了自定义组件内部，可以通过throwComError调用。只需在vue组件的props上声明即可

```
// customVueComponent.vue
<script>
    export default {
        props: {
            throwComError: Function
        },
        methods: {
            customMethods() {
                try {

                } catch (err) {
                    throwComError(err)
                }
            }
        }
    }
</script>

// editor.js

import HdfEditor from '@hb/hb-editor'

const eidtor = new HdfEditor();
editor.on('error', function(err) {
    // 监听编辑器内部抛出的错误
})
```










