-
-
Notifications
You must be signed in to change notification settings - Fork 3.3k
/
paste-handle.js
91 lines (78 loc) · 2.5 KB
/
paste-handle.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/*
粘贴信息的处理
*/
import $ from './dom-core.js'
import { replaceHtmlSymbol } from './util.js'
import { objForEach } from './util.js'
// 获取粘贴的纯文本
export function getPasteText(e) {
const clipboardData = e.clipboardData || (e.originalEvent && e.originalEvent.clipboardData)
let pasteText
if (clipboardData == null) {
pasteText = window.clipboardData && window.clipboardData.getData('text')
} else {
pasteText = clipboardData.getData('text/plain')
}
return replaceHtmlSymbol(pasteText)
}
// 获取粘贴的html
export function getPasteHtml(e, filterStyle, ignoreImg) {
const clipboardData = e.clipboardData || (e.originalEvent && e.originalEvent.clipboardData)
let pasteText, pasteHtml
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中状态过来的无用字符
const docSplitHtml = pasteHtml.split('</html>')
if (docSplitHtml.length === 2) {
pasteHtml = docSplitHtml[0]
}
// 过滤无用标签
pasteHtml = pasteHtml.replace(/<(meta|script|link).+?>/igm, '')
// 去掉注释
pasteHtml = pasteHtml.replace(/<!--.*?-->/mg, '')
// 过滤 data-xxx 属性
pasteHtml = pasteHtml.replace(/\s?data-.+?=('|").+?('|")/igm, '')
if (ignoreImg) {
// 忽略图片
pasteHtml = pasteHtml.replace(/<img.+?>/igm, '')
}
if (filterStyle) {
// 过滤样式
pasteHtml = pasteHtml.replace(/\s?(class|style)=('|").*?('|")/igm, '')
} else {
// 保留样式
pasteHtml = pasteHtml.replace(/\s?class=('|").*?('|")/igm, '')
}
return pasteHtml
}
// 获取粘贴的图片文件
export function getPasteImgs(e) {
const result = []
const txt = getPasteText(e)
if (txt) {
// 有文字,就忽略图片
return result
}
const clipboardData = e.clipboardData || (e.originalEvent && e.originalEvent.clipboardData) || {}
const items = clipboardData.items
if (!items) {
return result
}
objForEach(items, (key, value) => {
const type = value.type
if (/image/i.test(type)) {
result.push(value.getAsFile())
}
})
return result
}