2024-11-05 22:43:34 +08:00
|
|
|
"use strict";
|
|
|
|
/**
|
|
|
|
* 回车事件
|
|
|
|
*/
|
|
|
|
define(function (require, exports, module) {
|
|
|
|
|
|
|
|
function handle(e) {
|
|
|
|
const utils = require('../../common/utils');
|
|
|
|
let event = utils.ParseEvent(e);
|
|
|
|
let curEl = utils.GetEventTarget(event);
|
2024-11-10 02:30:02 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function handleOld(e) {
|
|
|
|
const utils = require('../../common/utils');
|
|
|
|
let event = utils.ParseEvent(e);
|
|
|
|
let curEl = utils.GetEventTarget(event);
|
2024-11-05 22:43:34 +08:00
|
|
|
|
2024-11-07 00:17:43 +08:00
|
|
|
utils.ProhibitDefaultEvent(event);
|
|
|
|
let select = utils.GetSelection();
|
|
|
|
let selectRange = select.getRangeAt(0);
|
|
|
|
let start = select.anchorOffset;
|
|
|
|
let anchorNode = select.anchorNode;
|
|
|
|
let end = select.focusOffset;
|
|
|
|
let focusNode = select.focusNode;
|
|
|
|
let curP = select.focusNode.parentElement.closest("p");
|
|
|
|
let spanContent = curP.querySelector("span[data-flag='span_content']")
|
|
|
|
let spanContentItems = spanContent.querySelectorAll("span");
|
|
|
|
console.log("Enter event", event, "\ncurEl: ", curEl,
|
|
|
|
"\nstart-end: ", start, end,
|
|
|
|
)
|
|
|
|
console.log(select)
|
|
|
|
console.log(spanContent)
|
|
|
|
console.dir(spanContentItems)
|
|
|
|
if (spanContentItems === null || spanContentItems.length === 0) { //没有子元素 -> 还没有样式
|
|
|
|
let txtLen = spanContent.innerText.trim().length;
|
|
|
|
if (txtLen === 0) {//内容确实为空
|
|
|
|
console.log("直接新增一行即可")
|
|
|
|
ctx.MyRoot().append(document.createElement("p"));
|
|
|
|
} else { // 内容不为空
|
|
|
|
if (select.isCollapsed) { //没有选中选区
|
|
|
|
if (start === txtLen) { //光标在行尾
|
|
|
|
console.log("内容不为空 -> 光标在行尾");
|
|
|
|
//新增一行
|
|
|
|
let newParagraph = document.createElement("p");
|
|
|
|
//内置span
|
|
|
|
let span = document.createElement("span");
|
|
|
|
span.append(document.createElement("br"));
|
|
|
|
span.setAttribute("data-flag", "span_content")
|
|
|
|
newParagraph.append(span);
|
|
|
|
utils.InsertAfter(curP, newParagraph);
|
|
|
|
utils.GetSelection().removeAllRanges();
|
|
|
|
utils.GetSelection().setPosition(newParagraph, 0);
|
|
|
|
newParagraph.focus();
|
|
|
|
} else if (start === 0) { //光标在行首
|
|
|
|
console.log("内容不为空 -> 光标在行首");
|
|
|
|
let spanContentTxt = spanContent.innerText
|
|
|
|
spanContent.innerHTML = "<br />"; //保留的部分
|
|
|
|
//新增一行
|
|
|
|
let newParagraph = document.createElement("p");
|
|
|
|
//内置span
|
|
|
|
let span = document.createElement("span");
|
|
|
|
span.append(spanContentTxt.substring(start, spanContentTxt.length).trim());
|
|
|
|
span.setAttribute("data-flag", "span_content")
|
|
|
|
newParagraph.append(span);
|
|
|
|
utils.InsertAfter(curP, newParagraph);
|
|
|
|
utils.GetSelection().removeAllRanges();
|
|
|
|
utils.GetSelection().setPosition(newParagraph, 0);
|
|
|
|
newParagraph.focus();
|
|
|
|
} else {//光标在中间
|
|
|
|
console.log("内容不为空 -> 光标在列间");
|
|
|
|
let spanContentTxt = spanContent.innerText
|
|
|
|
spanContent.innerText = spanContentTxt.substring(0, start); //保留的部分
|
|
|
|
//新增一行
|
|
|
|
let newParagraph = document.createElement("p");
|
|
|
|
//内置span
|
|
|
|
let span = document.createElement("span");
|
|
|
|
span.append(spanContentTxt.substring(start, spanContentTxt.length).trim());
|
|
|
|
span.setAttribute("data-flag", "span_content")
|
|
|
|
newParagraph.append(span);
|
|
|
|
utils.InsertAfter(curP, newParagraph);
|
|
|
|
utils.GetSelection().removeAllRanges();
|
|
|
|
utils.GetSelection().setPosition(newParagraph, 0);
|
|
|
|
newParagraph.focus();
|
|
|
|
}
|
|
|
|
} else { //有选区
|
|
|
|
let selectRangeTxt = select.getRangeAt(0).extractContents();
|
|
|
|
console.log("选中的内容整体平移到新建的下一行。 选中的内容是: ", selectRangeTxt);
|
|
|
|
console.dir(selectRangeTxt);
|
|
|
|
//新增一行
|
|
|
|
let newParagraph = document.createElement("p");
|
|
|
|
//内置span
|
|
|
|
let span = document.createElement("span");
|
|
|
|
span.append(selectRangeTxt);
|
|
|
|
span.setAttribute("data-flag", "span_content")
|
|
|
|
newParagraph.append(span);
|
|
|
|
utils.InsertAfter(curP, newParagraph);
|
|
|
|
utils.GetSelection().removeAllRanges();
|
|
|
|
utils.GetSelection().setPosition(newParagraph, 0);
|
|
|
|
newParagraph.focus();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else { //有子元素
|
|
|
|
console.log("有子元素,说明添加过样式");
|
|
|
|
console.log(spanContent)
|
|
|
|
console.group(spanContentItems)
|
|
|
|
if (select.isCollapsed) {//没有选区
|
|
|
|
console.log("没有选区")
|
|
|
|
} else { //有选区
|
|
|
|
console.log("有选区 选中的到下一行,未选中的在原来的行")
|
|
|
|
console.log(select)
|
|
|
|
console.log(selectRange)
|
|
|
|
let nextSpanList = []
|
2024-11-07 11:51:10 +08:00
|
|
|
let clearSpanList = []
|
2024-11-07 00:17:43 +08:00
|
|
|
|
2024-11-07 11:51:10 +08:00
|
|
|
|
|
|
|
for (let i = 0; i < spanContent.childNodes.length; i++) {
|
|
|
|
let curSpan = spanContent.childNodes[i];
|
|
|
|
console.log("check: ", curSpan, select.containsNode(curSpan, true))
|
|
|
|
if (select.containsNode(curSpan, true)) {
|
|
|
|
nextSpanList.push(curSpan.cloneNode(true))
|
|
|
|
clearSpanList.push(curSpan)
|
2024-11-07 00:17:43 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-11-07 11:51:10 +08:00
|
|
|
if (nextSpanList.length === spanContentItems.length) {
|
|
|
|
spanContent.innerHTML = "<br/>"
|
|
|
|
}
|
|
|
|
//clear
|
|
|
|
for (let i = 0; i < clearSpanList.length; i++) {
|
|
|
|
clearSpanList[i].remove();
|
2024-11-07 00:17:43 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
//新增一行
|
|
|
|
let newParagraph = document.createElement("p");
|
|
|
|
//内置span
|
|
|
|
let span = document.createElement("span");
|
|
|
|
for (let i = 0; i < nextSpanList.length; i++) {
|
|
|
|
span.append(nextSpanList[i]);
|
|
|
|
}
|
|
|
|
span.setAttribute("data-flag", "span_content")
|
|
|
|
newParagraph.append(span);
|
|
|
|
utils.InsertAfter(curP, newParagraph);
|
|
|
|
utils.GetSelection().removeAllRanges();
|
|
|
|
utils.GetSelection().setPosition(newParagraph, 0);
|
|
|
|
newParagraph.focus();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-11-05 22:43:34 +08:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//导出
|
|
|
|
exports.handle = handle;
|
|
|
|
});
|