"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); } function handleOld(e) { const utils = require('../../common/utils'); let event = utils.ParseEvent(e); let curEl = utils.GetEventTarget(event); 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 = "
"; //保留的部分 //新增一行 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 = [] let clearSpanList = [] 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) } } if (nextSpanList.length === spanContentItems.length) { spanContent.innerHTML = "
" } //clear for (let i = 0; i < clearSpanList.length; i++) { clearSpanList[i].remove(); } //新增一行 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(); } } } //导出 exports.handle = handle; });