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, '&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
+}

--
Gitblit v1.9.3