Files
lilishop-ui/im/src/utils/editor.js
2022-12-28 10:08:51 +08:00

181 lines
3.8 KiB
JavaScript

/**
* 遍历对象
*
* @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, '&lt;')
.replace(/>/gm, '&gt;')
.replace(/"/gm, '&quot;')
.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
}