From 789bab5e5d712af889577ed141387c02a049f21f Mon Sep 17 00:00:00 2001 From: wbfsa Date: Thu, 24 Sep 2020 08:11:51 +0800 Subject: [PATCH] fix(fix wrap bug): alt + enter twice bug --- src/controllers/inlineString.js | 52 ++++++++++++++++++++++++++++----- src/controllers/keyboard.js | 4 ++- src/global/cursorPos.js | 35 +++++++++++++++++----- src/global/formula.js | 6 ++-- src/global/getRowlen.js | 4 +-- 5 files changed, 81 insertions(+), 20 deletions(-) diff --git a/src/controllers/inlineString.js b/src/controllers/inlineString.js index 73b965d..d989f26 100644 --- a/src/controllers/inlineString.js +++ b/src/controllers/inlineString.js @@ -202,7 +202,7 @@ export function updateInlineStringFormat(cell, attr, value, $input){ } } -export function enterKeyControll(){ +export function enterKeyControll(cell){ var w = window.getSelection(); if(w.type=="None"){ @@ -228,7 +228,12 @@ export function enterKeyControll(){ if($textEditor.length>0){ let startSpan = startContainer.parentNode; - let startSpanIndex = $textEditor.find("span").index(startSpan); + if(startContainer.id=="luckysheet-rich-text-editor"){ + startSpan = $(startContainer).find("span"); + startSpan = startSpan.get(startSpan.length-1); + startOffset = startSpan.innerHTML.length; + } + // let startSpanIndex = $textEditor.find("span").index(startSpan); if(range.collapsed===false){ range.deleteContents(); } @@ -240,15 +245,48 @@ export function enterKeyControll(){ sleft = startContent.substring(s1, s2); sright = startContent.substring(s2, startContent.length); - let cont = "" + sleft + "\n" + sright + ""; - let spanIndex; + + let spanIndex,cont; if(startContainer.parentNode.tagName=="SPAN"){ - spanIndex = $textEditor.find("span").index(startSpan); + let textSpan = $textEditor.find("span"); + spanIndex = textSpan.index(startSpan); + if((spanIndex==textSpan.length-1) && sright==""){ + let txt = textSpan[spanIndex].innerHTML; + if(txt.substr(txt.length-1, 1)=="\n"){ + cont = "" + sleft + "\n" + ""; + } + else{ + cont = "" + sleft + "\n\n" + ""; + } + + } + else{ + cont = "" + sleft + "\n" + sright + ""; + } + $(startSpan).replaceWith(cont); } else{ - spanIndex = 0; - $(startSpan).html(cont); + + let cssText = getFontStyleByCell(cell); + if(sright==""){ + cont = "" + sleft + "\n\n" + ""; + } + else{ + cont = "" + sleft + "\n" + sright + ""; + } + + if(startContainer.id=="luckysheet-rich-text-editor"){ + $(startSpan).replaceWith(cont); + let textSpan = $textEditor.find("span"); + spanIndex = textSpan.length-1; + startOffset = textSpan.get(spanIndex).innerHTML.length-1; + } + else{ + $(startSpan).html(cont); + spanIndex = 0; + } + } selectTextContentCollapse($textEditor.find("span").get(spanIndex), startOffset+1); diff --git a/src/controllers/keyboard.js b/src/controllers/keyboard.js index 5356c00..c000684 100644 --- a/src/controllers/keyboard.js +++ b/src/controllers/keyboard.js @@ -307,7 +307,9 @@ export function keyboardInitial(){ let $inputbox = $("#luckysheet-input-box"); if((altKey || event.metaKey) && kcode == keycode.ENTER && parseInt($inputbox.css("top")) > 0){ - enterKeyControll(); + let last = Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1]; + let row_index = last["row_focus"], col_index = last["column_focus"]; + enterKeyControll(Store.flowdata[row_index][col_index]); event.preventDefault(); } else if (kcode == keycode.ENTER && parseInt($inputbox.css("top")) > 0) { diff --git a/src/global/cursorPos.js b/src/global/cursorPos.js index c01209e..29fd6a7 100644 --- a/src/global/cursorPos.js +++ b/src/global/cursorPos.js @@ -64,8 +64,10 @@ function selectTextDom(ele){ if (window.getSelection) { let range = document.createRange(); range.selectNodeContents(ele); - window.getSelection().removeAllRanges(); - window.getSelection().addRange(range); + if(range.startContainer && isInPage(range.startContainer)){ + window.getSelection().removeAllRanges(); + window.getSelection().addRange(range); + } } else if (document.selection) { let range = document.body.createTextRange(); @@ -80,8 +82,10 @@ function selectTextContent(ele){ var content=ele.firstChild; range.setStart(content,0); range.setEnd(content,content.length); - window.getSelection().removeAllRanges(); - window.getSelection().addRange(range); + if(range.startContainer && isInPage(range.startContainer)){ + window.getSelection().removeAllRanges(); + window.getSelection().addRange(range); + } } else if (document.selection) { let range = document.body.createTextRange(); @@ -96,8 +100,10 @@ function selectTextContentCross(sEle, eEle){ var sContent=sEle.firstChild, eContent=eEle.firstChild; range.setStart(sContent,0); range.setEnd(eContent,eContent.length); - window.getSelection().removeAllRanges(); - window.getSelection().addRange(range); + if(range.startContainer && isInPage(range.startContainer)){ + window.getSelection().removeAllRanges(); + window.getSelection().addRange(range); + } } } @@ -105,13 +111,26 @@ function selectTextContentCollapse(sEle, index){ if (window.getSelection) { let range = document.createRange(); var sContent=sEle.firstChild; + if(index>sContent.length){ + index=sContent.length; + } + else if(index<0){ + index = 0; + } range.setStart(sContent,index); range.collapse(true); - window.getSelection().removeAllRanges(); - window.getSelection().addRange(range); + if(range.startContainer && isInPage(range.startContainer)){ + window.getSelection().removeAllRanges(); + window.getSelection().addRange(range); + } + } } +function isInPage(node) { + return (node === document.body) ? false : document.body.contains(node); +} + export { luckysheetRangeLast, getCursortPosition, diff --git a/src/global/formula.js b/src/global/formula.js index ae18fba..ca3deea 100644 --- a/src/global/formula.js +++ b/src/global/formula.js @@ -888,14 +888,16 @@ const luckysheetformula = { let $cell = _this.getrangeseleciton(); _this.searchFunctionCell = $cell; + + if ($cell == null || $editer == null) { return; } - + let inputContent = $editer.text(); let searchtxt = $cell.text().toUpperCase(); let reg = /^[a-zA-Z]|[a-zA-Z_]+$/; - if (!reg.test(searchtxt)) { + if (!reg.test(searchtxt) || inputContent.substr(0, 1)!="=") { return; } diff --git a/src/global/getRowlen.js b/src/global/getRowlen.js index 82aee2c..3dcb276 100644 --- a/src/global/getRowlen.js +++ b/src/global/getRowlen.js @@ -338,7 +338,7 @@ function getCellTextInfo(cell , ctx, option){ for(let x=0;x