mirror of
https://gitee.com/beijing_hongye_huicheng/lilishop-ui.git
synced 2025-12-21 02:15:54 +08:00
IM
This commit is contained in:
180
im/src/utils/editor.js
Normal file
180
im/src/utils/editor.js
Normal file
@@ -0,0 +1,180 @@
|
||||
/**
|
||||
* 遍历对象
|
||||
*
|
||||
* @param {Object} obj
|
||||
* @param {Object} fn
|
||||
*/
|
||||
export function objForEach(obj, fn) {
|
||||
let key = void 0,
|
||||
result = void 0
|
||||
for (key in obj) {
|
||||
if (obj.hasOwnProperty(key)) {
|
||||
result = fn.call(obj, key, obj[key])
|
||||
if (result === false) {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 遍历类数组
|
||||
*
|
||||
* @param {Object} fakeArr
|
||||
* @param {Object} fn
|
||||
*/
|
||||
export function arrForEach(fakeArr, fn) {
|
||||
let i = void 0,
|
||||
item = void 0,
|
||||
result = void 0
|
||||
let length = fakeArr.length || 0
|
||||
for (i = 0; i < length; i++) {
|
||||
item = fakeArr[i]
|
||||
result = fn.call(fakeArr, item, i)
|
||||
if (result === false) {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 替换 html 特殊字符
|
||||
*
|
||||
* @param {Object} html
|
||||
*/
|
||||
export function replaceHtmlSymbol(html) {
|
||||
if (html == null) {
|
||||
return ''
|
||||
}
|
||||
return html
|
||||
.replace(/</gm, '<')
|
||||
.replace(/>/gm, '>')
|
||||
.replace(/"/gm, '"')
|
||||
.replace(/(\r\n|\r|\n)/g, '<br/>')
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取粘贴的纯文本
|
||||
*
|
||||
* @param {Object} e
|
||||
*/
|
||||
export function getPasteText(e) {
|
||||
let clipboardData =
|
||||
e.clipboardData || (e.originalEvent && e.originalEvent.clipboardData)
|
||||
let pasteText = void 0
|
||||
if (clipboardData == null) {
|
||||
pasteText = window.clipboardData && window.clipboardData.getData('text')
|
||||
} else {
|
||||
pasteText = clipboardData.getData('text/plain')
|
||||
}
|
||||
|
||||
return replaceHtmlSymbol(pasteText)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取粘贴的html
|
||||
*
|
||||
* @param {Object} e
|
||||
* @param {Object} filterStyle
|
||||
* @param {Object} ignoreImg
|
||||
*/
|
||||
export function getPasteHtml(e, filterStyle, ignoreImg) {
|
||||
let clipboardData =
|
||||
e.clipboardData || (e.originalEvent && e.originalEvent.clipboardData)
|
||||
let pasteText = void 0,
|
||||
pasteHtml = void 0
|
||||
if (clipboardData == null) {
|
||||
pasteText = window.clipboardData && window.clipboardData.getData('text')
|
||||
} else {
|
||||
pasteText = clipboardData.getData('text/plain')
|
||||
pasteHtml = clipboardData.getData('text/html')
|
||||
}
|
||||
if (!pasteHtml && pasteText) {
|
||||
pasteHtml = '<p>' + replaceHtmlSymbol(pasteText) + '</p>'
|
||||
}
|
||||
if (!pasteHtml) {
|
||||
return
|
||||
}
|
||||
|
||||
// 过滤word中状态过来的无用字符
|
||||
let docSplitHtml = pasteHtml.split('</html>')
|
||||
if (docSplitHtml.length === 2) {
|
||||
pasteHtml = docSplitHtml[0]
|
||||
}
|
||||
|
||||
// 过滤无用标签
|
||||
pasteHtml = pasteHtml.replace(/<(meta|script|link).+?>/gim, '')
|
||||
// 去掉注释
|
||||
pasteHtml = pasteHtml.replace(/<!--.*?-->/gm, '')
|
||||
// 过滤 data-xxx 属性
|
||||
pasteHtml = pasteHtml.replace(/\s?data-.+?=('|").+?('|")/gim, '')
|
||||
|
||||
if (ignoreImg) {
|
||||
// 忽略图片
|
||||
pasteHtml = pasteHtml.replace(/<img.+?>/gim, '')
|
||||
}
|
||||
|
||||
if (filterStyle) {
|
||||
// 过滤样式
|
||||
pasteHtml = pasteHtml.replace(/\s?(class|style)=('|").*?('|")/gim, '')
|
||||
} else {
|
||||
// 保留样式
|
||||
pasteHtml = pasteHtml.replace(/\s?class=('|").*?('|")/gim, '')
|
||||
}
|
||||
|
||||
return pasteHtml
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取粘贴的图片文件
|
||||
*
|
||||
* @param {Object} e
|
||||
*/
|
||||
export function getPasteImgs(e) {
|
||||
let result = []
|
||||
let txt = getPasteText(e)
|
||||
if (txt) {
|
||||
// 有文字,就忽略图片
|
||||
return result
|
||||
}
|
||||
|
||||
let clipboardData =
|
||||
e.clipboardData || (e.originalEvent && e.originalEvent.clipboardData) || {}
|
||||
let items = clipboardData.items
|
||||
if (!items) {
|
||||
return result
|
||||
}
|
||||
|
||||
objForEach(items, function(key, value) {
|
||||
let type = value.type
|
||||
if (/image/i.test(type)) {
|
||||
result.push(value.getAsFile())
|
||||
}
|
||||
})
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取拖拽的图片
|
||||
*
|
||||
* @param {Object} e
|
||||
*/
|
||||
export function getDragPasteImg(e) {
|
||||
let result = []
|
||||
let dataTransfer =
|
||||
e.dataTransfer || (e.originalEvent && e.originalEvent.dataTransfer) || {}
|
||||
let items = dataTransfer.items
|
||||
if (!items) {
|
||||
return result
|
||||
}
|
||||
|
||||
objForEach(items, function(key, value) {
|
||||
let type = value.type
|
||||
if (/image/i.test(type)) {
|
||||
result.push(value.getAsFile())
|
||||
}
|
||||
})
|
||||
|
||||
return result
|
||||
}
|
||||
Reference in New Issue
Block a user