import {getFontStyleByCell, textTrim} from "../global/getdata";
import {selectTextContent,selectTextContentCross,selectTextContentCollapse} from '../global/cursorPos';
import locale from '../locale/locale';
import Store from '../store';
export const inlineStyleAffectAttribute = {"bl":1, "it":1 , "ff":1, "cl":1, "un":1,"fs":1,"fc":1};
export const inlineStyleAffectCssName = {"font-weight":1, "font-style":1 , "font-family":1, "text-decoration":1, "border-bottom":1,"font-size":1,"color":1};
export function isInlineStringCell(cell){
let isIs = cell && cell.ct!=null && cell.ct.t=="inlineStr" && cell.ct.s!=null && cell.ct.s.length>0;
return isIs;
}
export function isInlineStringCT(ct){
let isIs = ct!=null && ct.t=="inlineStr" && ct.s!=null && ct.s.length>0;
return isIs;
}
export function updateInlineStringFormat(cell, attr, value, $input){
// let s = Store.inlineStringEditCache;
var w = window.getSelection();
var range;
if(w.type=="None"){
range = Store.inlineStringEditRange;
}
else{
range = w.getRangeAt(0);
}
// if(isInlineStringCell(cell)){
// if(Store.inlineStringEditCache==null){
// Store.inlineStringEditCache = JSON.parse(JSON.stringify(cell.ct.s));
// }
// }
// else{
// Store.inlineStringEditCache = [{
// v:cell.v
// }];
// }
let cac = range.commonAncestorContainer;
let $textEditor;
if(cac.id=="luckysheet-rich-text-editor"){
$textEditor = $(cac);
}
else{
$textEditor = $(cac).closest("#luckysheet-rich-text-editor");
}
let $functionbox = $(cac).closest("#luckysheet-functionbox-cell");
if($textEditor.length==0 && $functionbox.length==0 && Store.inlineStringEditRange!=null){
range = Store.inlineStringEditRange;
cac = range.commonAncestorContainer;
if(cac.id=="luckysheet-rich-text-editor"){
$textEditor = $(cac);
}
else{
$textEditor = $(cac).closest("#luckysheet-rich-text-editor");
}
$functionbox = $(cac).closest("#luckysheet-functionbox-cell");
}
if(range.collapsed===true){
return;
}
let endContainer = range.endContainer, startContainer = range.startContainer;
let endOffset = range.endOffset, startOffset = range.startOffset;
if($textEditor.length>0){
if(startContainer===endContainer){
let span = startContainer.parentNode, spanIndex, inherit=false;
let content = span.innerHTML;
let fullContent = $textEditor.html();
if(fullContent.substr(0,5) != "" + left + "";
}
if(mid!=""){
// let styleObj = {};
// styleObj[attr] = value;
// let s = getFontStyleByCell(styleObj, undefined, undefined, false);
// let ukey = textTrim(s.substr(0, s.indexOf(':')));
// let uvalue = textTrim(s.substr(s.indexOf(':')+1));
// uvalue = uvalue.substr(0, uvalue.length-1);
// let cssText = span.style.cssText;
// cssText = removeClassWidthCss(cssText, attr);
let cssText = getCssText(span.style.cssText, attr, value);
if(inherit){
let box = $(span).closest("#luckysheet-input-box").get(0);
if(box!=null){
cssText = extendCssText(box.style.cssText, cssText);
}
}
cont += "" + mid + "";
}
if(right!=""){
let cssText = span.style.cssText;
if(inherit){
let box = $(span).closest("#luckysheet-input-box").get(0);
if(box!=null){
cssText = extendCssText(box.style.cssText, cssText);
}
}
cont += "" + right + "";
}
if(startContainer.parentNode.tagName=="SPAN"){
spanIndex = $textEditor.find("span").index(span);
$(span).replaceWith(cont);
}
else{
spanIndex = 0;
$(span).html(cont);
}
let seletedNodeIndex = 0;
if(s1==s2){
seletedNodeIndex = spanIndex;
}
else{
seletedNodeIndex = spanIndex+1;
}
selectTextContent($textEditor.find("span").get(seletedNodeIndex));
}
else{
if(startContainer.parentNode.tagName=="SPAN" && endContainer.parentNode.tagName=="SPAN"){
let startSpan = startContainer.parentNode, startSpanIndex;
let endSpan = endContainer.parentNode, endSpanIndex;
startSpanIndex = $textEditor.find("span").index(startSpan);
endSpanIndex = $textEditor.find("span").index(endSpan);
let startContent = startSpan.innerHTML, endContent = endSpan.innerHTML;
let sleft="" , sright="", eleft="" , eright="";
let s1=0, s2=startOffset, s3 = endOffset, s4=endContent.length;
sleft = startContent.substring(s1, s2);
sright = startContent.substring(s2, startContent.length);
eleft = endContent.substring(0, s3);
eright = endContent.substring(s3, s4);
let spans = $textEditor.find("span");
let replaceSpans = spans.slice(startSpanIndex, endSpanIndex+1);
let cont = "";
for(let i=0;i" + content + "";
}
if(sleft!=""){
cont += "" + sleft + "";
}
if(sright!=""){
let cssText = getCssText(startSpan.style.cssText, attr, value);
cont += "" + sright + "";
}
if(startSpanIndex" + content + "";
}
}
if(eleft!=""){
let cssText = getCssText(endSpan.style.cssText, attr, value);
cont += "" + eleft + "";
}
if(eright!=""){
cont += "" + eright + "";
}
for(let i=endSpanIndex+1;i" + content + "";
}
$textEditor.html(cont);
// console.log(replaceSpans, cont);
// replaceSpans.replaceWith(cont);
let startSeletedNodeIndex, endSeletedNodeIndex;
if(s1==s2){
startSeletedNodeIndex = startSpanIndex;
endSeletedNodeIndex = endSpanIndex;
}
else{
startSeletedNodeIndex = startSpanIndex+1;
endSeletedNodeIndex = endSpanIndex+1;
}
spans = $textEditor.find("span");
selectTextContentCross(spans.get(startSeletedNodeIndex), spans.get(endSeletedNodeIndex));
}
}
}
else if($functionbox.length>0){
}
}
export function enterKeyControll(cell){
var w = window.getSelection();
if(w.type=="None"){
return
}
var range = w.getRangeAt(0);
let cac = range.commonAncestorContainer;
let $textEditor;
if(cac.id=="luckysheet-rich-text-editor"){
$textEditor = $(cac);
}
else{
$textEditor = $(cac).closest("#luckysheet-rich-text-editor");
}
let $functionbox = $(cac).closest("#luckysheet-functionbox-cell");
// if(range.collapsed===true){
// return;
// }
let endContainer = range.endContainer, startContainer = range.startContainer;
let endOffset = range.endOffset, startOffset = range.startOffset;
if($textEditor.length>0){
let startSpan = startContainer.parentNode;
if(startContainer.id=="luckysheet-rich-text-editor"){
startSpan = $(startContainer).find("span");
if(startSpan.length==0){
// 在末尾换行操作会导致数据丢失(覆盖)
startContainer.innerHTML = `${startContainer.innerText}`;
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();
}
// 如果拷贝的内容为:pc&web ,那么innerHTML得到的值为:pc&web ,执行换行操作存在问题
// let startContent = startSpan.innerHTML;
let startContent = startSpan.innerText;
let sleft="" , sright="";
let s1=0, s2=startOffset;
sleft = startContent.substring(s1, s2);
sright = startContent.substring(s2, startContent.length);
let spanIndex,cont;
if(startContainer.parentNode.tagName=="SPAN"){
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{
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);
}
else if($functionbox.length>0){
}
}
export function updateInlineStringFormatOutside(cell, key, value){
if(cell.ct==null){
return;
}
let s = cell.ct.s;
if(s==null){
return;
}
for(let i=0;i {
s = s.toLowerCase();
let key = textTrim(s.substr(0, s.indexOf(':')));
let value = textTrim(s.substr(s.indexOf(':') + 1));
if(key=="font-weight"){
if(value=="bold"){
styleList["bl"] = 1;
}
else{
styleList["bl"] = 0;
}
}
if(key=="font-style"){
if(value=="italic"){
styleList["it"] = 1;
}
else{
styleList["it"] = 0;
}
}
if(key=="font-family"){
let ff = locale_fontjson[value];
if(ff==null){
styleList["ff"] = value;
}
else{
styleList["ff"] = ff;
}
}
if(key=="font-size"){
styleList["fs"] = parseInt(value);
}
if(key=="color"){
styleList["fc"] = value;
}
if(key=="text-decoration"){
styleList["cl"] = 1;
}
if(key=="border-bottom"){
styleList["un"] = 1;
}
if(key=="lucky-strike"){
styleList["cl"] = value;
}
if(key=="lucky-underline"){
styleList["un"] = value;
}
});
return styleList;
}
const luckyToCssName = {
"bl":"font-weight",
"it":"font-style",
"ff":"font-family",
"fs":"font-size",
"fc":"color",
"cl":"text-decoration",
"un":"border-bottom",
}
function getClassWithcss(cssText, ukey){
let cssTextArray = cssText.split(";");
if(ukey==null || ukey.length==0){
return cssText;
}
if(cssText.indexOf(ukey)>-1){
for(let i=0;i-1){
for(let i=0;i0){
newCss += key + ":" + value + ";";
}
}
}
else if(ukey.length>0){
cssText += ukey + ":" + uvalue + ";";
newCss = cssText;
}
return newCss;
}
function removeClassWidthCss(cssText, ukey){
let cssTextArray = cssText.split(";");
let newCss = "";
let oUkey = ukey;
if(ukey==null || ukey.length==0){
return cssText;
}
if(ukey in luckyToCssName){
ukey = luckyToCssName[ukey];
}
if(cssText.indexOf(ukey)>-1){
for(let i=0;i0){
newCss += key + ":" + value + ";";
}
}
}
else{
newCss = cssText;
}
return newCss;
}
function getCssText(cssText, attr, value){
let styleObj = {};
styleObj[attr] = value;
if(attr=="un"){
let fontColor = getClassWithcss(cssText,"color");
if(fontColor==""){
fontColor = "#000000";
}
let fs = getClassWithcss(cssText,"font-size");
if(fs==""){
fs = 11;
}
fs = parseInt(fs);
styleObj["_fontSize"] = fs;
styleObj["_color"] = fontColor;
}
let s = getFontStyleByCell(styleObj, undefined, undefined, false);
let ukey = textTrim(s.substr(0, s.indexOf(':')));
let uvalue = textTrim(s.substr(s.indexOf(':')+1));
uvalue = uvalue.substr(0, uvalue.length-1);
// let cssText = span.style.cssText;
cssText = removeClassWidthCss(cssText, attr);
cssText = upsetClassWithCss(cssText, ukey, uvalue);
return cssText;
}
function extendCssText(origin, cover, isLimit=true){
let originArray = origin.split(";");
let coverArray = cover.split(";");
let newCss = "";
let addKeyList = {};
for(let i=0;i