Browse Source

Merge branch 'master' of https://github.com/mengshukeji/Luckysheet

sthe commit.
master
danny 5 years ago
parent
commit
bbaa3af7a1
  1. 4
      src/controllers/formulaBar.js
  2. 2
      src/controllers/handler.js
  3. 2
      src/controllers/keyboard.js
  4. 8
      src/function/functionImplementation.js
  5. 4
      src/global/draw.js
  6. 16
      src/global/extend.js
  7. 239
      src/global/getRowlen.js

4
src/controllers/formulaBar.js

@ -33,6 +33,10 @@ export function formulaBarInitial(){
let row_index = last["row_focus"], col_index = last["column_focus"]; let row_index = last["row_focus"], col_index = last["column_focus"];
let $input = $("#luckysheet-rich-text-editor"),value = $input.text();
if(value) {
formula.updatecell(row_index, col_index);
}
luckysheetupdateCell(row_index, col_index, Store.flowdata, null, true); luckysheetupdateCell(row_index, col_index, Store.flowdata, null, true);
formula.rangeResizeTo = $("#luckysheet-functionbox-cell"); formula.rangeResizeTo = $("#luckysheet-functionbox-cell");
} }

2
src/controllers/handler.js

@ -4580,7 +4580,7 @@ export default function luckysheetHandler() {
} }
} }
let fs = Math.floor(parseInt($td.css("font-size")) * 72 / dpi_y) + 1; let fs = Math.floor(parseInt($td.css("font-size")) * 72 / 96) + 1;
cell.fs = fs; cell.fs = fs;
let fc = $td.css("color"); let fc = $td.css("color");

2
src/controllers/keyboard.js

@ -834,7 +834,7 @@ export function keyboardInitial(){
else if (kcode == keycode.RIGHT && parseInt($inputbox.css("top")) > 0) { else if (kcode == keycode.RIGHT && parseInt($inputbox.css("top")) > 0) {
formulaMoveEvent("right", ctrlKey, shiftKey); formulaMoveEvent("right", ctrlKey, shiftKey);
} }
else if (!((kcode >= 112 && kcode <= 123) || kcode <= 46 || kcode == 144 || kcode == 108 || event.ctrlKey || event.altKey || (event.shiftKey && (kcode == 37 || kcode == 38 || kcode == 39 || kcode == 40))) || kcode == 8 || kcode == 32 || kcode == 46 || (event.ctrlKey && kcode == 86)) { else if (!((kcode >= 112 && kcode <= 123) || kcode <= 46 || kcode == 144 || kcode == 108 || event.ctrlKey || event.altKey || (event.shiftKey && (kcode == 37 || kcode == 38 || kcode == 39 || kcode == 40 || kcode == keycode.WIN || kcode == keycode.WIN_R || kcode == keycode.MENU))) || kcode == 8 || kcode == 32 || kcode == 46 || (event.ctrlKey && kcode == 86)) {
formula.functionInputHanddler($("#luckysheet-functionbox-cell"), $("#luckysheet-rich-text-editor"), kcode); formula.functionInputHanddler($("#luckysheet-functionbox-cell"), $("#luckysheet-rich-text-editor"), kcode);
setCenterInputPosition(Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[1], Store.flowdata); setCenterInputPosition(Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[1], Store.flowdata);
} }

8
src/function/functionImplementation.js

@ -483,7 +483,7 @@ const functionImplementation = {
try { try {
//身份证号 //身份证号
var UUserCard = func_methods.getFirstValue(arguments[0]); var UUserCard = func_methods.getFirstValue(arguments[0]).toString();
if(valueIsError(UUserCard)){ if(valueIsError(UUserCard)){
return UUserCard; return UUserCard;
} }
@ -523,7 +523,7 @@ const functionImplementation = {
try { try {
//身份证号 //身份证号
var UUserCard = func_methods.getFirstValue(arguments[0]); var UUserCard = func_methods.getFirstValue(arguments[0]).toString();
if(valueIsError(UUserCard)){ if(valueIsError(UUserCard)){
return UUserCard; return UUserCard;
} }
@ -595,7 +595,7 @@ const functionImplementation = {
try { try {
//身份证号 //身份证号
var UUserCard = func_methods.getFirstValue(arguments[0]); var UUserCard = func_methods.getFirstValue(arguments[0]).toString();
if(valueIsError(UUserCard)){ if(valueIsError(UUserCard)){
return UUserCard; return UUserCard;
} }
@ -637,7 +637,7 @@ const functionImplementation = {
try { try {
//身份证号 //身份证号
var UUserCard = func_methods.getFirstValue(arguments[0]); var UUserCard = func_methods.getFirstValue(arguments[0]).toString();
if(valueIsError(UUserCard)){ if(valueIsError(UUserCard)){
return UUserCard; return UUserCard;
} }

4
src/global/draw.js

@ -1178,7 +1178,7 @@ let nullCellRender = function(r, c, start_r, start_c, end_r, end_c,luckysheetTab
} }
let cellRender = function(r, c, start_r, start_c, end_r, end_c, value, luckysheetTableContent,af_compute, cf_compute,offsetLeft,offsetTop,dynamicArray_compute,cellOverflowMap, dataset_col_st, dataset_col_ed,scrollHeight,scrollWidth,bodrder05,isMerge){ let cellRender1 = function(r, c, start_r, start_c, end_r, end_c, value, luckysheetTableContent,af_compute, cf_compute,offsetLeft,offsetTop,dynamicArray_compute,cellOverflowMap, dataset_col_st, dataset_col_ed,scrollHeight,scrollWidth,bodrder05,isMerge){
let cell = Store.flowdata[r][c]; let cell = Store.flowdata[r][c];
let cellWidth = end_c - start_c - 2; let cellWidth = end_c - start_c - 2;
@ -1600,7 +1600,7 @@ let cellRender = function(r, c, start_r, start_c, end_r, end_c, value, luckyshee
} }
//非空白单元格渲染 //非空白单元格渲染
let cellRender1 = function(r, c, start_r, start_c, end_r, end_c, value, luckysheetTableContent,af_compute, cf_compute,offsetLeft,offsetTop,dynamicArray_compute,cellOverflowMap, dataset_col_st, dataset_col_ed,scrollHeight,scrollWidth,bodrder05,isMerge){ let cellRender = function(r, c, start_r, start_c, end_r, end_c, value, luckysheetTableContent,af_compute, cf_compute,offsetLeft,offsetTop,dynamicArray_compute,cellOverflowMap, dataset_col_st, dataset_col_ed,scrollHeight,scrollWidth,bodrder05,isMerge){
let cell = Store.flowdata[r][c]; let cell = Store.flowdata[r][c];
let cellWidth = end_c - start_c - 2; let cellWidth = end_c - start_c - 2;

16
src/global/extend.js

@ -105,8 +105,6 @@ function luckysheetextendtable(type, index, value, direction, order) {
d[calc_r][calc_c].f = functionStr; d[calc_r][calc_c].f = functionStr;
} }
// calc.func[2] = functionStr;
if(direction == "lefttop"){ if(direction == "lefttop"){
if(calc_r >= index){ if(calc_r >= index){
calc.r += value; calc.r += value;
@ -127,8 +125,6 @@ function luckysheetextendtable(type, index, value, direction, order) {
d[calc_r][calc_c].f = functionStr; d[calc_r][calc_c].f = functionStr;
} }
// calc.func[2] = functionStr;
if(direction == "lefttop"){ if(direction == "lefttop"){
if(calc_c >= index){ if(calc_c >= index){
calc.c += value; calc.c += value;
@ -900,8 +896,6 @@ function luckysheetdeletetable(type, st, ed, order) {
d[calc_r][calc_c].f = functionStr; d[calc_r][calc_c].f = functionStr;
} }
// calc.func[2] = functionStr;
if(calc_r > ed){ if(calc_r > ed){
calc.r = calc_r - slen; calc.r = calc_r - slen;
} }
@ -917,8 +911,6 @@ function luckysheetdeletetable(type, st, ed, order) {
d[calc_r][calc_c].f = functionStr; d[calc_r][calc_c].f = functionStr;
} }
// calc.func[2] = functionStr;
if(calc_c > ed){ if(calc_c > ed){
calc.c = calc_c - slen; calc.c = calc_c - slen;
} }
@ -1545,20 +1537,20 @@ function luckysheetDeleteCell(type, str, edr, stc, edc, order) {
let calc = $.extend(true, {}, calcChain[i]); let calc = $.extend(true, {}, calcChain[i]);
let calc_r = calc.r, calc_c = calc.c, calc_i = calc.index, calc_funcStr = getcellFormula(calc_r, calc_c, calc_i); let calc_r = calc.r, calc_c = calc.c, calc_i = calc.index, calc_funcStr = getcellFormula(calc_r, calc_c, calc_i);
if((calc_r < str || calc_r > edr) && (calc_c < stc || calc_c > edc)){ if(calc_r < str || calc_r > edr || calc_c < stc || calc_c > edc){
let functionStr; let functionStr;
if(type == 'moveLeft'){ if(type == 'moveLeft'){
functionStr = "=" + formula.functionStrChange(calc_funcStr, "del", "col", null, stc, clen); functionStr = "=" + formula.functionStrChange(calc_funcStr, "del", "col", null, stc, clen);
if(calc_c > edc){ if(calc_c > edc && calc_r >= str && calc_r <= edr){
calc.c = calc_c - clen; calc.c = calc_c - clen;
} }
} }
else if(type == 'moveUp'){ else if(type == 'moveUp'){
functionStr = "=" + formula.functionStrChange(calc_funcStr, "del", "row", null, str, rlen); functionStr = "=" + formula.functionStrChange(calc_funcStr, "del", "row", null, str, rlen);
if(calc_r > edr){ if(calc_r > edr && calc_c >= stc && calc_c <= edc){
calc.r = calc_r - rlen; calc.r = calc_r - rlen;
} }
} }
@ -1567,8 +1559,6 @@ function luckysheetDeleteCell(type, str, edr, stc, edc, order) {
d[calc_r][calc_c].f = functionStr; d[calc_r][calc_c].f = functionStr;
} }
// calc.func[2] = functionStr;
newCalcChain.push(calc); newCalcChain.push(calc);
} }
} }

239
src/global/getRowlen.js

@ -416,121 +416,232 @@ function getCellTextInfo(cell , ctx, option){
textContent.rotate = rt; textContent.rotate = rt;
rt = Math.abs(rt); rt = Math.abs(rt);
let anchor = 0; let anchor = 0, preHeight = 0, preWidth=0, preStr, preTextHeight, preTextWidth;
for(let i = 1; i <= value.length; i++){ for(let i = 1; i <= value.length; i++){
let str = value.substr(anchor, i); let str = value.substring(anchor, i);
let measureText = getMeasureText(str, ctx); let measureText = getMeasureText(str, ctx);
let textW = measureText.width; let textWidth = measureText.width;
let textH = measureText.actualBoundingBoxAscent+measureText.actualBoundingBoxDescent; let textHeight = measureText.actualBoundingBoxAscent+measureText.actualBoundingBoxDescent;
// textW_all += textW;
let width = textWidth * Math.cos(rt*Math.PI/180) + textHeight * Math.sin(rt*Math.PI/180);//consider text box wdith and line height
if(rt!=0){ let height = textWidth * Math.sin(rt*Math.PI/180) + textHeight * Math.cos(rt*Math.PI/180);//consider text box wdith and line height
text_all_cache += textH;
if(text_all_cache>cellHeight && text_all_split[splitIndex]!=null){
text_all_splitLen.push(text_all_cache-textH);
text_all_cache = textH;
splitIndex +=1;
anchor = i; // textW_all += textW;
if(i== value.length){ if(text_all_split[splitIndex]==null){
textH_all_ColumnHeight.push(textH_all_cache); text_all_split[splitIndex]= [];
} }
if(textH_all_Column[colIndex]==null){ if(rt!=0){//rotate
text_all_split[colIndex]= []; if((height+space_height)>cellHeight){
} anchor = i-1;
text_all_split[splitIndex].push({ text_all_split[splitIndex].push({
content:vArr[i], content:preStr,
style:fontset, style:fontset,
width:textW, width:preWidth,
height:textH, height:preHeight,
left:0, left:0,
top:0, top:0,
colIndex:colIndex, splitIndex:splitIndex,
textHeight:preTextHeight,
textWidth:preTextWidth,
asc:measureText.actualBoundingBoxAscent,
desc:measureText.actualBoundingBoxDescent
}); });
splitIndex +=1;
} }
} else if(i== value.length){
else{
text_all_split[splitIndex].push({
content:str,
style:fontset,
width:width,
height:height,
left:0,
top:0,
splitIndex:splitIndex,
textHeight:textHeight,
textWidth:textWidth,
asc:measureText.actualBoundingBoxAscent,
desc:measureText.actualBoundingBoxDescent
});
}
} }
else{//plain
if((width+space_width)>cellWidth){
anchor = i-1;
if(i== vArr.length-1){ text_all_split[splitIndex].push({
textH_all_ColumnHeight.push(textH_all_cache); content:preStr,
} style:fontset,
width:preWidth,
height:preHeight,
left:0,
top:0,
splitIndex:splitIndex,
asc:measureText.actualBoundingBoxAscent,
desc:measureText.actualBoundingBoxDescent
});
if(textH_all_Column[colIndex]==null){ splitIndex +=1;
text_all_split[colIndex]= [];
} }
else if(i== value.length){
text_all_split[splitIndex].push({ text_all_split[splitIndex].push({
content:vArr[i], content:str,
style:fontset, style:fontset,
width:textW, width:width,
height:textH, height:height,
left:0, left:0,
top:0, top:0,
colIndex:colIndex, splitIndex:splitIndex,
asc:measureText.actualBoundingBoxAscent,
desc:measureText.actualBoundingBoxDescent
}); });
}
}
preWidth = width;
preHeight = height;
preStr = str;
preTextHeight = textHeight;
preTextWidth = textWidth;
} }
let textH_all_ColumWidth = []; let split_all_size = [];
for(let i = 0; i < textH_all_ColumnHeight.length; i++){ console.log(splitIndex, text_all_split);
let columnHeight = textH_all_ColumnHeight[i]; let splitLen = Object.keys(text_all_split).length;
let col = textH_all_Column[i], colMaxW=0; for(let i = 0; i < splitLen; i++){
for(let c=0;c<col.length;c++){ let splitLists = text_all_split[i];
let word = col[c]; if(splitLists==null){
colMaxW = Math.max(colMaxW, word.width); continue;
}
let sWidth = 0, sHeight=0, textHeight=0;
for(let s=0;s<splitLists.length;s++){
let sp = splitLists[s];
if(rt!=0){//rotate
sWidth += sp.width;
sHeight += sp.height;
textHeight = Math.max(textHeight, sp.textHeight);
}
else{//plain
sWidth += sp.width;
sHeight = Math.max(sHeight, sp.height-(supportBoundBox?sp.desc:0));
} }
textH_all_ColumWidth.push(colMaxW);
textW_all += colMaxW;
textH_all = Math.max(textH_all, columnHeight);
} }
let cumColumnWidth = 0; if(rt!=0){//rotate
for(let i = 0; i < textH_all_ColumnHeight.length; i++){ textW_all += textHeight/Math.sin(rt);
let columnHeight = textH_all_ColumnHeight[i]; if(i==splitIndex){
let columnWidth = textH_all_ColumWidth[i]; textW_all += sWidth;
}
else{
textW_all += space_width;
}
textH_all = Math.max(textH_all, sHeight);
}
else{//plain
sHeight+=sHeight/1.5;
textW_all=Math.max(textW_all, sWidth);
textH_all+=sHeight;
}
let col = textH_all_Column[i];
let cumWordHeight = 0;
for(let c=0;c<col.length;c++){
let word = col[c];
let left = space_width + cumColumnWidth; split_all_size.push({
width:sWidth,
height:sHeight
});
}
// let cumColumnWidth = 0;
let cumWordHeight = 0,cumColumnWidth = 0;
for(let i = 0; i < splitLen; i++){
let splitLists = text_all_split[i];
if(splitLists==null){
continue;
}
let size = split_all_size[i];
if(rt!=0){//rotate
}
else{
cumColumnWidth = 0;
}
for(let c=0;c<splitLists.length;c++){
let wordGroup = splitLists[c];
let left, top;
if(rt!=0){//rotate
left = space_width + wordGroup.textHeight * Math.sin(rt*Math.PI/180)*isRotateDown; //默认为1,左对齐
if(horizonAlign == "0"){ //居中对齐
left = cellWidth / 2 - ( wordGroup.width / 2) + wordGroup.textHeight * Math.sin(rt*Math.PI/180)*isRotateDown;
}
else if(horizonAlign == "2"){ //右对齐
left = (cellWidth - space_width) - wordGroup.width + wordGroup.textHeight * Math.sin(rt*Math.PI/180)*isRotateDown;
}
top = (cellHeight - space_height) - wordGroup.height + wordGroup.textWidth * Math.sin(rt*Math.PI/180)*isRotateUp; //默认为2,下对齐
if(verticalAlign == "0"){ //居中对齐
top = cellHeight / 2 - ( wordGroup.height / 2) + wordGroup.textWidth * Math.sin(rt*Math.PI/180)*isRotateUp;
}
else if(verticalAlign == "1"){ //上对齐
top = space_height + wordGroup.textWidth * Math.sin(rt*Math.PI/180)*isRotateUp;
}
// left+=10;
// top=top+30;
if(c==0){
textContent.textLeftAll = left;
textContent.textTopAll = top;
}
console.log("plainWrap" ,left , top);
}
else{//plain
left = space_width + cumColumnWidth;
if(horizonAlign == "0"){ if(horizonAlign == "0"){
left = cellWidth / 2 + cumColumnWidth - textW_all/2 + space_width*textH_all_ColumnHeight.length; //+ space_width*textH_all_ColumnHeight.length
left = cellWidth / 2 + cumColumnWidth - size.width/2;
} }
else if(horizonAlign == "2"){ else if(horizonAlign == "2"){
left = cellWidth + cumColumnWidth - textW_all + space_width; left = cellWidth + cumColumnWidth - size.width;
} }
let top = (cellHeight - space_height) + cumWordHeight - columnHeight; top = (cellHeight - space_height) + cumWordHeight - textH_all - (supportBoundBox?wordGroup.desc:0) + wordGroup.height*2/1.5;
if(verticalAlign == "0"){ if(verticalAlign == "0"){
top = cellHeight / 2 + cumWordHeight - columnHeight/2; top = cellHeight / 2 + cumWordHeight - textH_all/2 + wordGroup.asc/2 + wordGroup.height*2/3;
} }
else if(verticalAlign == "1"){ else if(verticalAlign == "1"){
top = space_height + cumWordHeight; top = space_height + cumWordHeight+ wordGroup.asc;
} }
cumWordHeight += word.height; cumColumnWidth += wordGroup.width;
}
word.left = left;
word.top = top;
textContent.values.push(word); wordGroup.left = left;
wordGroup.top = top;
textContent.values.push(wordGroup);
} }
cumColumnWidth+=columnWidth; if(rt!=0){//rotate
} }
else{
cumWordHeight += size.height;
}
// cumColumnWidth+=columnWidth;
textContent.type = "verticalWrap"; }
textContent.type = "plainWrap";
textContent.textWidthAll = textW_all; textContent.textWidthAll = textW_all;
textContent.textHeightAll = textH_all; textContent.textHeightAll = textH_all;
} }
@ -582,6 +693,8 @@ function getCellTextInfo(cell , ctx, option){
textContent.textLeftAll = left; textContent.textLeftAll = left;
textContent.textTopAll = top; textContent.textTopAll = top;
console.log("plain",left,top);
} }
} }

Loading…
Cancel
Save