|
@@ -1,6 +1,6 @@
|
|
import $ from './util/dom-core.js';
|
|
import $ from './util/dom-core.js';
|
|
import { gennerOneLine } from './util/lineUtil.js';
|
|
import { gennerOneLine } from './util/lineUtil.js';
|
|
-import { getPasteImgs } from './util/paste-handle.js';
|
|
|
|
|
|
+import { getPasteText, getPasteHtml, getPasteImgs } from './util/paste-handle.js';
|
|
import imgUtl from './util/imageUtil.js'
|
|
import imgUtl from './util/imageUtil.js'
|
|
import Jquery from 'jquery';
|
|
import Jquery from 'jquery';
|
|
import yzPage from './yzPage.js';
|
|
import yzPage from './yzPage.js';
|
|
@@ -234,11 +234,44 @@ yzPageManager.prototype = {
|
|
this._writtingHandleEvent();
|
|
this._writtingHandleEvent();
|
|
|
|
|
|
this._imgHandle();
|
|
this._imgHandle();
|
|
|
|
+ this._purseTextHandle();
|
|
this._scrollEvent();
|
|
this._scrollEvent();
|
|
this._resizeEvent();
|
|
this._resizeEvent();
|
|
this._dragEvent();
|
|
this._dragEvent();
|
|
},
|
|
},
|
|
/**
|
|
/**
|
|
|
|
+ * function 文本框事件处理
|
|
|
|
+ */
|
|
|
|
+ _purseTextHandle: function () {
|
|
|
|
+ const $textElem = this.$el;
|
|
|
|
+ // 为图片增加 selected 样式
|
|
|
|
+ let $delete = $('<div class="js-lsiten-text-delete">删除</div>');
|
|
|
|
+ Jquery($textElem[0]).on('focus', '.js-pure-text', function (e) {
|
|
|
|
+ let ele = e.currentTarget;
|
|
|
|
+ let $text = Jquery(ele);
|
|
|
|
+ if (!$text.find('.js-lsiten-text-delete') || !$text.find('.js-lsiten-text-delete').length) {
|
|
|
|
+ $delete = $('<div class="js-lsiten-text-delete">删除</div>');
|
|
|
|
+ $delete.css('position', 'absolute').css('display', 'inline-block').css('right', '-10px').css('z-index', '999').css('width', 'auto').css('top', '-25px').css('cursor', 'pointer');
|
|
|
|
+ $text.css('border', '1px dashed #efefef').css('border-radius', '3px');
|
|
|
|
+ $text.append($delete);
|
|
|
|
+ $delete.on('click', function (event) {
|
|
|
|
+ $text.remove();
|
|
|
|
+ Jquery($textElem[0]).trigger('removeContent');
|
|
|
|
+ event.stopPropagation();
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ // 去掉 selected 样式
|
|
|
|
+ Jquery($textElem[0]).on('click', e => {
|
|
|
|
+ let ele = e.target;
|
|
|
|
+ let pureText = getParentNodeByClass(ele, 'js-pure-text');
|
|
|
|
+ if (!pureText) {
|
|
|
|
+ $textElem.find('.js-pure-text').css('border', 'none').css('border-radius', '0');
|
|
|
|
+ $delete.remove();
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ },
|
|
|
|
+ /**
|
|
* function 框相关事件
|
|
* function 框相关事件
|
|
*/
|
|
*/
|
|
_borderEvent: function () {
|
|
_borderEvent: function () {
|
|
@@ -329,11 +362,12 @@ yzPageManager.prototype = {
|
|
if (pageIndex > -1) {
|
|
if (pageIndex > -1) {
|
|
let currentPage = this.pages[pageIndex];
|
|
let currentPage = this.pages[pageIndex];
|
|
if (currentPage) {
|
|
if (currentPage) {
|
|
- let $paragraph = $('<div class="js-paragraph-view"></div>');
|
|
|
|
|
|
+ let $paragraph = $('<div class="js-paragraph-view js-pure-text"></div>');
|
|
$paragraph.append(gennerOneLine());
|
|
$paragraph.append(gennerOneLine());
|
|
$paragraph.css('margin', 0)
|
|
$paragraph.css('margin', 0)
|
|
.css('padding', '0 25px')
|
|
.css('padding', '0 25px')
|
|
.css('outline', 'none')
|
|
.css('outline', 'none')
|
|
|
|
+ .css('position', 'relative')
|
|
.css('box-sizing', 'border-box')
|
|
.css('box-sizing', 'border-box')
|
|
.css('white-space', 'pre-wrap')
|
|
.css('white-space', 'pre-wrap')
|
|
.css('line-height', '1.75')
|
|
.css('line-height', '1.75')
|
|
@@ -1171,6 +1205,10 @@ yzPageManager.prototype = {
|
|
})
|
|
})
|
|
// 粘贴图片、文本的事件,每次只能执行一个
|
|
// 粘贴图片、文本的事件,每次只能执行一个
|
|
// 判断该次粘贴事件是否可以执行
|
|
// 判断该次粘贴事件是否可以执行
|
|
|
|
+ const config = editor.config;
|
|
|
|
+ const pasteFilterStyle = config.pasteFilterStyle;
|
|
|
|
+ const pasteTextHandle = config.pasteTextHandle;
|
|
|
|
+ const ignoreImg = config.pasteIgnoreImg;
|
|
let pasteTime = 0
|
|
let pasteTime = 0
|
|
function canDo() {
|
|
function canDo() {
|
|
var now = Date.now()
|
|
var now = Date.now()
|
|
@@ -1182,6 +1220,57 @@ yzPageManager.prototype = {
|
|
pasteTime = now
|
|
pasteTime = now
|
|
return flag
|
|
return flag
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ function resetTime() {
|
|
|
|
+ pasteTime = 0
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 粘贴文字
|
|
|
|
+ $textElem.on('paste', e => {
|
|
|
|
+ if (UA.isIE()) {
|
|
|
|
+ return
|
|
|
|
+ } else {
|
|
|
|
+ // 阻止默认行为,使用 execCommand 的粘贴命令
|
|
|
|
+ e.preventDefault()
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 粘贴图片和文本,只能同时使用一个
|
|
|
|
+ if (!canDo()) {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 获取粘贴的文字
|
|
|
|
+ let pasteHtml = getPasteHtml(e, pasteFilterStyle, ignoreImg)
|
|
|
|
+ let pasteText = getPasteText(e)
|
|
|
|
+ pasteText = pasteText.replace(/\n/gm, '<br>')
|
|
|
|
+
|
|
|
|
+ const $selectionElem = editor.selection.getSelectionContainerElem()
|
|
|
|
+ if (!$selectionElem) {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ if (!pasteHtml) {
|
|
|
|
+ // 没有内容,可继续执行下面的图片粘贴
|
|
|
|
+ resetTime()
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ try {
|
|
|
|
+ // firefox 中,获取的 pasteHtml 可能是没有 <ul> 包裹的 <li>
|
|
|
|
+ // 因此执行 insertHTML 会报错
|
|
|
|
+ if (pasteTextHandle && isFunction(pasteTextHandle)) {
|
|
|
|
+ // 用户自定义过滤处理粘贴内容
|
|
|
|
+ pasteHtml = '' + (pasteTextHandle(pasteHtml) || '')
|
|
|
|
+ }
|
|
|
|
+ editor.cmd.do('insertHTML', pasteHtml)
|
|
|
|
+ } catch (ex) {
|
|
|
|
+ // 此时使用 pasteText 来兼容一下
|
|
|
|
+ if (pasteTextHandle && isFunction(pasteTextHandle)) {
|
|
|
|
+ // 用户自定义过滤处理粘贴内容
|
|
|
|
+ pasteText = '' + (pasteTextHandle(pasteText) || '')
|
|
|
|
+ }
|
|
|
|
+ editor.cmd.do('insertHTML', `<p>${pasteText}</p>`)
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+
|
|
// 粘贴图片
|
|
// 粘贴图片
|
|
$textElem.on('paste', e => {
|
|
$textElem.on('paste', e => {
|
|
if (UA.isIE()) {
|
|
if (UA.isIE()) {
|
|
@@ -1210,6 +1299,8 @@ yzPageManager.prototype = {
|
|
// 上传图片
|
|
// 上传图片
|
|
_this._uploadFiles(pasteFiles);
|
|
_this._uploadFiles(pasteFiles);
|
|
})
|
|
})
|
|
|
|
+
|
|
|
|
+
|
|
},
|
|
},
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -1517,8 +1608,14 @@ yzPageManager.prototype = {
|
|
let $drag = _this._$drageDiv;
|
|
let $drag = _this._$drageDiv;
|
|
let borderSize = $drag.getSizeData();
|
|
let borderSize = $drag.getSizeData();
|
|
if (templatePosition.type === 5) {
|
|
if (templatePosition.type === 5) {
|
|
|
|
+ // debugger;
|
|
let imageLeft = parseInt(borderSize.left - borderBoxSize.left);
|
|
let imageLeft = parseInt(borderSize.left - borderBoxSize.left);
|
|
let imageTop = parseInt(borderSize.top - borderBoxSize.top);
|
|
let imageTop = parseInt(borderSize.top - borderBoxSize.top);
|
|
|
|
+ imageLeft = (imageLeft + borderImgBoxSize.width + 4) > borderBoxSize.width ? (borderBoxSize.width - borderImgBoxSize.width -4) : imageLeft;
|
|
|
|
+ imageTop = (imageTop + borderImgBoxSize.height + 4) > borderBoxSize.height ? (borderBoxSize.height - borderImgBoxSize.height -4) : imageTop;
|
|
|
|
+
|
|
|
|
+ imageLeft < 0 && (imageLeft = 0);
|
|
|
|
+ imageTop < 0 && (imageTop = 0);
|
|
$img.css('left', imageLeft + 'px').css('top', imageTop + 'px');
|
|
$img.css('left', imageLeft + 'px').css('top', imageTop + 'px');
|
|
} else {
|
|
} else {
|
|
let width = parseInt(borderSize.width) - 6;
|
|
let width = parseInt(borderSize.width) - 6;
|
|
@@ -1535,8 +1632,10 @@ yzPageManager.prototype = {
|
|
let position = $img.getSizeData();
|
|
let position = $img.getSizeData();
|
|
$drag.css('left', (position.x - 3) + 'px')
|
|
$drag.css('left', (position.x - 3) + 'px')
|
|
.css('top', (position.y - 3) + 'px');
|
|
.css('top', (position.y - 3) + 'px');
|
|
|
|
+ let $handleImg = _this._$handleImg;
|
|
_this._$handleImg = null;
|
|
_this._$handleImg = null;
|
|
_this._$drageDiv.hide();
|
|
_this._$drageDiv.hide();
|
|
|
|
+ $handleImg[0].click();
|
|
}
|
|
}
|
|
|
|
|
|
templatePosition = {
|
|
templatePosition = {
|
|
@@ -1599,6 +1698,7 @@ yzPageManager.prototype = {
|
|
} else {
|
|
} else {
|
|
selection.setEmptyRange();
|
|
selection.setEmptyRange();
|
|
}
|
|
}
|
|
|
|
+ this.editor.menus.changeActive();
|
|
},
|
|
},
|
|
/**
|
|
/**
|
|
* function 拖拽事件
|
|
* function 拖拽事件
|