From 089bf5d2378b3c4a61d795b2a92bede2c193b771 Mon Sep 17 00:00:00 2001
From: admin <344137771@qq.com>
Date: Tue, 06 Jan 2026 11:22:58 +0800
Subject: [PATCH] 1
---
src/utils/editor.js | 180 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 180 insertions(+), 0 deletions(-)
diff --git a/src/utils/editor.js b/src/utils/editor.js
new file mode 100644
index 0000000..e07d720
--- /dev/null
+++ b/src/utils/editor.js
@@ -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
+}
--
Gitblit v1.9.3