产品一张表luckysheet前端代码库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

1874 lines
81 KiB

import { getSheetIndex } from '../methods/get';
import { luckysheet_searcharray } from './sheetSearch';
import { selectHightlightShow } from './select';
import { createFilterOptions } from './filter';
import server from './server';
import menuButton from './menuButton';
import luckysheetPostil from './postil';
import luckysheetDropCell from './dropCell';
import { rowLocationByIndex, colLocationByIndex } from '../global/location';
import Store from '../store';
import locale from '../locale/locale';
import { luckysheetrefreshgrid } from '../global/refresh';
const luckysheetFreezen = {
freezenHorizontalHTML: '<div id="luckysheet-freezebar-horizontal" class="luckysheet-freezebar" tabindex="0"><div class="luckysheet-freezebar-handle luckysheet-freezebar-horizontal-handle" ><div class="luckysheet-freezebar-handle-bar luckysheet-freezebar-horizontal-handle-title" ></div><div class="luckysheet-freezebar-handle-bar luckysheet-freezebar-horizontal-handle-bar" ></div></div><div class="luckysheet-freezebar-drop luckysheet-freezebar-horizontal-drop" ><div class="luckysheet-freezebar-drop-bar luckysheet-freezebar-horizontal-drop-title" ></div><div class="luckysheet-freezebar-drop-bar luckysheet-freezebar-horizontal-drop-bar" >&nbsp;</div></div></div>',
freezenVerticalHTML: '<div id="luckysheet-freezebar-vertical" class="luckysheet-freezebar" tabindex="0"><div class="luckysheet-freezebar-handle luckysheet-freezebar-vertical-handle" ><div class="luckysheet-freezebar-handle-bar luckysheet-freezebar-vertical-handle-title" ></div><div class="luckysheet-freezebar-handle-bar luckysheet-freezebar-vertical-handle-bar" ></div></div><div class="luckysheet-freezebar-drop luckysheet-freezebar-vertical-drop" ><div class="luckysheet-freezebar-drop-bar luckysheet-freezebar-vertical-drop-title" ></div><div class="luckysheet-freezebar-drop-bar luckysheet-freezebar-vertical-drop-bar" >&nbsp;</div></div></div>',
initialHorizontal: true,
initialVertical: true,
horizontalmovestate: false,
horizontalmoveposition: null,
verticalmovestate: false,
verticalmoveposition: null,
windowHeight: null,
windowWidth: null,
freezenhorizontaldata: null,
freezenverticaldata: null,
// 定义冻结首行、首列是实际的第一行第一列还是当前视图的第一行第一列
// excel 为视图的第一行第一列,但此处实现有问题,如滚动到15行冻结首行,当前冻结了15行,保存再进去实际冻结了第一行
// 冻结真实的第一行、第一列更符合直觉
freezenRealFirstRowColumn: true,
cutVolumn: function (arr, cutindex) {
if(cutindex <= 0){
return arr;
}
let pre = arr.slice(0, cutindex);
let premax = pre[pre.length - 1];
let ret = arr.slice(cutindex);
// for (let i = 0; i < ret.length; i++) {
// ret[i] -= premax;
// }
return ret;
},
cancelFreezenVertical: function (sheetIndex) {
let _this = this;
const _locale = locale();
const locale_freezen = _locale.freezen;
$("#luckysheet-freezen-btn-vertical").html('<i class="fa fa-indent"></i> '+locale_freezen.freezenColumn);
_this.freezenverticaldata = null;
let isvertical = $("#luckysheet-freezebar-vertical").is(":visible");
$("#luckysheet-freezebar-vertical").hide();
if (sheetIndex == null) {
sheetIndex = Store.currentSheetIndex;
}
let currentSheet = Store.luckysheetfile[getSheetIndex(sheetIndex)];
if (currentSheet.freezen != null) {
currentSheet.freezen.vertical = null;
}
if(currentSheet.frozen != null && isvertical){
server.saveParam("all", sheetIndex, currentSheet.frozen, { "k": "frozen" });
}
},
createFreezenVertical: function (freezenverticaldata, left) {
let _this = this;
if (_this.initialVertical) {
_this.initialVertical = false;
$("#luckysheet-grid-window-1").append(_this.freezenVerticalHTML);
$("#luckysheet-freezebar-vertical").find(".luckysheet-freezebar-vertical-drop").hover(function () {
$(this).parent().addClass("luckysheet-freezebar-hover");
}, function () {
$(this).parent().removeClass("luckysheet-freezebar-hover");
});
$("#luckysheet-freezebar-vertical").find(".luckysheet-freezebar-vertical-drop").mousedown(function () {
_this.verticalmovestate = true;
_this.verticalmoveposition = $(this).position().left;
_this.windowWidth = $("#luckysheet-grid-window-1").width();
$(this).parent().addClass("luckysheet-freezebar-active");
$("#luckysheet-freezebar-vertical").find(".luckysheet-freezebar-vertical-handle").css("cursor", "-webkit-grabbing");
});
let gridheight = $("#luckysheet-grid-window-1").height();
$("#luckysheet-freezebar-vertical").find(".luckysheet-freezebar-vertical-handle").css({
"height": gridheight - 10,
"width": "4px",
"cursor": "-webkit-grab",
"top": "0px"
}).end().find(".luckysheet-freezebar-vertical-drop").css({
"height": gridheight - 10,
"width": "4px",
"top": "0px",
"cursor": "-webkit-grab"
});
}
if (freezenverticaldata == null) {
if (_this.freezenRealFirstRowColumn) {
let dataset_col_st = 0;
left = Store.visibledatacolumn[dataset_col_st] - 2 + Store.rowHeaderWidth;
freezenverticaldata = [
Store.visibledatacolumn[dataset_col_st],
dataset_col_st + 1,
0,
_this.cutVolumn(Store.visibledatacolumn, dataset_col_st + 1),
left
];
} else {
let scrollLeft = $("#luckysheet-cell-main").scrollLeft();
let dataset_col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft);
if (dataset_col_st == -1) {
dataset_col_st = 0;
}
left = Store.visibledatacolumn[dataset_col_st] - 2 - scrollLeft + Store.rowHeaderWidth;
freezenverticaldata = [
Store.visibledatacolumn[dataset_col_st],
dataset_col_st + 1,
scrollLeft,
_this.cutVolumn(Store.visibledatacolumn, dataset_col_st + 1),
left
];
}
_this.saveFreezen(null, null, freezenverticaldata, left);
}
_this.freezenverticaldata = freezenverticaldata;
// $("#luckysheet-freezen-btn-horizontal").html('<i class="luckysheet-icon-img-container iconfont luckysheet-iconfont-dongjie1"></i> '+locale().freezen.freezenCancel);
// 解决freeze 不垂直居中的问题
const freezeHTML = `
<div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
style="user-select: none;">
<div class="luckysheet-toolbar-button-inner-box luckysheet-inline-block"
style="user-select: none;">
<div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
<div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-function iconfont luckysheet-iconfont-dongjie1"
style="user-select: none;">
</div>
</div>
<div class="luckysheet-toolbar-menu-button-caption luckysheet-inline-block"
style="user-select: none;">
${locale().freezen.freezenCancel}
</div>
</div>
</div>
`
$("#luckysheet-freezen-btn-horizontal").html(freezeHTML);
$("#luckysheet-freezebar-vertical").show().find(".luckysheet-freezebar-vertical-handle").css({ "left": left }).end().find(".luckysheet-freezebar-vertical-drop").css({ "left": left });
},
saveFreezen: function (freezenhorizontaldata, top, freezenverticaldata, left) {
let currentSheet = Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)];
if (currentSheet.freezen == null) {
currentSheet.freezen = {};
}
if (freezenhorizontaldata != null) {
if (currentSheet.freezen.horizontal == null) {
currentSheet.freezen.horizontal = {};
}
currentSheet.freezen.horizontal.freezenhorizontaldata = freezenhorizontaldata;
currentSheet.freezen.horizontal.top = top;
}
if (freezenverticaldata != null) {
if (currentSheet.freezen.vertical == null) {
currentSheet.freezen.vertical = {};
}
currentSheet.freezen.vertical.freezenverticaldata = freezenverticaldata;
currentSheet.freezen.vertical.left = left;
}
// if(currentSheet.freezen != null){
// server.saveParam("all", Store.currentSheetIndex, currentSheet.freezen, { "k": "freezen" });
// }
// use new property frozen
if(currentSheet.frozen != null){
server.saveParam("all", Store.currentSheetIndex, currentSheet.frozen, { "k": "frozen" });
}
},
initialFreezen: function (sheetIndex) {
let _this = this;
// when init ,we get frozen, but here, we need freezen,so tranform it
_this.frozenTofreezen();
let currentSheet = Store.luckysheetfile[getSheetIndex(sheetIndex)];
if (currentSheet.freezen != null && currentSheet.freezen.horizontal != null && currentSheet.freezen.horizontal.freezenhorizontaldata != null) {
_this.createFreezenHorizontal(currentSheet.freezen.horizontal.freezenhorizontaldata, currentSheet.freezen.horizontal.top);
}
else {
_this.cancelFreezenHorizontal(sheetIndex);
}
if (currentSheet.freezen != null && currentSheet.freezen.vertical != null && currentSheet.freezen.vertical.freezenverticaldata != null) {
_this.createFreezenVertical(currentSheet.freezen.vertical.freezenverticaldata, currentSheet.freezen.vertical.left);
}
else {
_this.cancelFreezenVertical(sheetIndex);
}
_this.createAssistCanvas();
},
changeFreezenIndex: function (originindex, type) {
let _this = this;
if (type == "v" && _this.freezenverticaldata != null) {
let freezen_colindex = _this.freezenverticaldata[1];
let offset = luckysheet_searcharray(Store.visibledatacolumn, $("#luckysheet-cell-main").scrollLeft());
if (originindex - offset < freezen_colindex) {
originindex = originindex - offset;
}
}
else if (type == "h" && _this.freezenhorizontaldata != null) {
let freezen_rowindex = _this.freezenhorizontaldata[1];
let offset = luckysheet_searcharray(Store.visibledatarow, $("#luckysheet-cell-main").scrollTop());
if (originindex - offset < freezen_rowindex) {
originindex = originindex - offset;
}
}
return originindex;
},
scrollFreezen: function () {
let _this = this;
let row;
let row_focus = Store.luckysheet_select_save[0]["row_focus"];
if(row_focus == Store.luckysheet_select_save[0]["row"][0]){
row = Store.luckysheet_select_save[0]["row"][1];
}
else if(row_focus == Store.luckysheet_select_save[0]["row"][1]){
row = Store.luckysheet_select_save[0]["row"][0];
}
let column;
let column_focus = Store.luckysheet_select_save[0]["column_focus"];
if(column_focus == Store.luckysheet_select_save[0]["column"][0]){
column = Store.luckysheet_select_save[0]["column"][1];
}
else if(column_focus == Store.luckysheet_select_save[0]["column"][1]){
column = Store.luckysheet_select_save[0]["column"][0];
}
if (_this.freezenverticaldata != null) {
let freezen_colindex = _this.freezenverticaldata[1];
let offset = luckysheet_searcharray(_this.freezenverticaldata[3], $("#luckysheet-cell-main").scrollLeft());
let top = _this.freezenverticaldata[4];
freezen_colindex += offset;
if(column>=Store.visibledatacolumn.length){
column = Store.visibledatacolumn.length - 1;
}
if(freezen_colindex>=Store.visibledatacolumn.length){
freezen_colindex = Store.visibledatacolumn.length - 1;
}
let column_px = Store.visibledatacolumn[column], freezen_px = Store.visibledatacolumn[freezen_colindex];
if (column_px <= freezen_px+top) {
setTimeout(function () { $("#luckysheet-scrollbar-x").scrollLeft(0); }, 100);
}
}
if (_this.freezenhorizontaldata != null) {
let freezen_rowindex = _this.freezenhorizontaldata[1];
let offset = luckysheet_searcharray(_this.freezenhorizontaldata[3], $("#luckysheet-cell-main").scrollTop());
let left = _this.freezenhorizontaldata[4];
freezen_rowindex += offset;
if(row>=Store.visibledatarow.length){
row = Store.visibledatarow.length - 1;
}
if(freezen_rowindex>=Store.visibledatarow.length){
freezen_rowindex = Store.visibledatarow.length - 1;
}
let row_px = Store.visibledatarow[row], freezen_px = Store.visibledatarow[freezen_rowindex];
if (row_px <= freezen_px+left) {
setTimeout(function () {$("#luckysheet-scrollbar-y").scrollTop(0);}, 100);
}
}
},
cancelFreezenHorizontal: function (sheetIndex) {
let _this = this;
// $("#luckysheet-freezen-btn-horizontal").html('<i class="luckysheet-icon-img-container iconfont luckysheet-iconfont-dongjie1"></i> '+locale().freezen.default);
// 解决freeze 不垂直居中的问题
const freezeHTML = `
<div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
style="user-select: none;">
<div class="luckysheet-toolbar-button-inner-box luckysheet-inline-block"
style="user-select: none;">
<div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
<div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-function iconfont luckysheet-iconfont-dongjie1"
style="user-select: none;">
</div>
</div>
<div class="luckysheet-toolbar-menu-button-caption luckysheet-inline-block"
style="user-select: none;">
${locale().freezen.default}
</div>
</div>
</div>
`
$("#luckysheet-freezen-btn-horizontal").html(freezeHTML);
_this.freezenhorizontaldata = null;
let ishorizontal = $("#luckysheet-freezebar-horizontal").is(":visible");
$("#luckysheet-freezebar-horizontal").hide();
if (sheetIndex == null) {
sheetIndex = Store.currentSheetIndex;
}
let currentSheet = Store.luckysheetfile[getSheetIndex(sheetIndex)];
if (currentSheet.freezen != null) {
currentSheet.freezen.horizontal = null;
}
if(currentSheet.frozen != null && ishorizontal){
server.saveParam("all", sheetIndex, currentSheet.frozen, { "k": "frozen" });
}
},
createFreezenHorizontal: function (freezenhorizontaldata, top) {
let _this = this;
if (_this.initialHorizontal) {
_this.initialHorizontal = false;
$("#luckysheet-grid-window-1").append(_this.freezenHorizontalHTML);
$("#luckysheet-freezebar-horizontal").find(".luckysheet-freezebar-horizontal-drop").hover(function () {
$(this).parent().addClass("luckysheet-freezebar-hover");
}, function () {
$(this).parent().removeClass("luckysheet-freezebar-hover");
});
$("#luckysheet-freezebar-horizontal").find(".luckysheet-freezebar-horizontal-drop").mousedown(function () {
_this.horizontalmovestate = true;
_this.horizontalmoveposition = $(this).position().top;
_this.windowHeight = $("#luckysheet-grid-window-1").height();
$(this).parent().addClass("luckysheet-freezebar-active");
$("#luckysheet-freezebar-horizontal").find(".luckysheet-freezebar-horizontal-handle").css("cursor", "-webkit-grabbing");
});
let gridwidth = $("#luckysheet-grid-window-1").width();
$("#luckysheet-freezebar-horizontal").find(".luckysheet-freezebar-horizontal-handle").css({
"width": gridwidth - 10,
"height": "4px",
"cursor": "-webkit-grab",
"left": "0px"
}).end().find(".luckysheet-freezebar-horizontal-drop").css({
"width": gridwidth - 10,
"height": "4px",
"left": "0px",
"cursor": "-webkit-grab"
});
}
if (freezenhorizontaldata == null) {
let dataset_row_st;
if (_this.freezenRealFirstRowColumn) {
dataset_row_st = 0;
top = Store.visibledatarow[dataset_row_st] - 2 + Store.columnHeaderHeight;
freezenhorizontaldata = [
Store.visibledatarow[dataset_row_st],
dataset_row_st + 1,
0,
_this.cutVolumn(Store.visibledatarow, dataset_row_st + 1),
top
];
_this.saveFreezen(freezenhorizontaldata, top, null, null);
// todo: 没有下面代码 如果有滚动,冻结之后首行的行号仍显示的之前滚动的行号
// todo: 不 setTimeout 这里直接刷新的话,冻结的首行显示有问题,没有列的分割线
setTimeout(() => {
luckysheetFreezen.createAssistCanvas();
luckysheetrefreshgrid();
});
} else {
let scrollTop = $("#luckysheet-cell-main").scrollTop();
dataset_row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop);
if (dataset_row_st == -1) {
dataset_row_st = 0;
}
top = Store.visibledatarow[dataset_row_st] - 2 - scrollTop + Store.columnHeaderHeight;
freezenhorizontaldata = [
Store.visibledatarow[dataset_row_st],
dataset_row_st + 1,
scrollTop,
_this.cutVolumn(Store.visibledatarow, dataset_row_st + 1),
top
];
_this.saveFreezen(freezenhorizontaldata, top, null, null);
}
}
_this.freezenhorizontaldata = freezenhorizontaldata;
// $("#luckysheet-freezen-btn-horizontal").html('<i class="fa fa-list-alt"></i> '+locale().freezen.freezenCancel);
// $("#luckysheet-freezen-btn-horizontal").html('<i class="luckysheet-icon-img-container iconfont luckysheet-iconfont-dongjie1"></i> '+locale().freezen.freezenCancel);
const freezeHTML = `
<div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
style="user-select: none;">
<div class="luckysheet-toolbar-button-inner-box luckysheet-inline-block"
style="user-select: none;">
<div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
<div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-function iconfont luckysheet-iconfont-dongjie1"
style="user-select: none;">
</div>
</div>
<div class="luckysheet-toolbar-menu-button-caption luckysheet-inline-block"
style="user-select: none;">
${locale().freezen.freezenCancel}
</div>
</div>
</div>
`
$("#luckysheet-freezen-btn-horizontal").html(freezeHTML);
$("#luckysheet-freezebar-horizontal").show().find(".luckysheet-freezebar-horizontal-handle").css({ "top": top }).end().find(".luckysheet-freezebar-horizontal-drop").css({ "top": top });
},
createAssistCanvas: function(){
let _this = this;
_this.removeAssistCanvas();
if (_this.freezenverticaldata != null || _this.freezenhorizontaldata != null) {
let freezen_horizon_px, freezen_horizon_ed, freezen_horizon_scrollTop;
let freezen_vertical_px, freezen_vertical_ed, freezen_vertical_scrollTop;
let drawWidth = Store.luckysheetTableContentHW[0],
drawHeight = Store.luckysheetTableContentHW[1];
//双向freezen
if (_this.freezenverticaldata != null && _this.freezenhorizontaldata != null) {
freezen_horizon_px = _this.freezenhorizontaldata[0];
freezen_horizon_ed = _this.freezenhorizontaldata[1];
freezen_horizon_scrollTop = _this.freezenhorizontaldata[2];
freezen_vertical_px = _this.freezenverticaldata[0];
freezen_vertical_ed = _this.freezenverticaldata[1];
freezen_vertical_scrollTop = _this.freezenverticaldata[2];
//3
_this.createCanvas("freezen_3", freezen_vertical_px - freezen_vertical_scrollTop, freezen_horizon_px - freezen_horizon_scrollTop + 1, Store.rowHeaderWidth - 1, Store.columnHeaderHeight - 1);
//4
_this.createCanvas("freezen_4", drawWidth - freezen_vertical_px + freezen_vertical_scrollTop, freezen_horizon_px - freezen_horizon_scrollTop + 1, freezen_vertical_px - freezen_vertical_scrollTop + Store.rowHeaderWidth - 1, Store.columnHeaderHeight - 1);
//7
_this.createCanvas("freezen_7", freezen_vertical_px - freezen_vertical_scrollTop, drawHeight - freezen_horizon_px + freezen_horizon_scrollTop - Store.columnHeaderHeight, Store.rowHeaderWidth - 1, freezen_horizon_px - freezen_horizon_scrollTop + Store.columnHeaderHeight - 1);
}
//水平freezen
else if (_this.freezenhorizontaldata != null) {
freezen_horizon_px = _this.freezenhorizontaldata[0];
freezen_horizon_ed = _this.freezenhorizontaldata[1];
freezen_horizon_scrollTop = _this.freezenhorizontaldata[2];
_this.createCanvas("freezen_h", drawWidth, freezen_horizon_px - freezen_horizon_scrollTop + 1, Store.rowHeaderWidth - 1, Store.columnHeaderHeight - 1);
}
//垂直freezen
else if (_this.freezenverticaldata != null) {
freezen_vertical_px = _this.freezenverticaldata[0];
freezen_vertical_ed = _this.freezenverticaldata[1];
freezen_vertical_scrollTop = _this.freezenverticaldata[2];
_this.createCanvas("freezen_v", freezen_vertical_px - freezen_vertical_scrollTop, drawHeight, Store.rowHeaderWidth - 1, Store.columnHeaderHeight - 1);
}
_this.scrollAdapt();
}
},
createCanvas: function(id, width, height, left, top){
let c = $("<canvas/>").appendTo("#luckysheet-grid-window-1").attr({
"id": id,
"width": Math.ceil(width * Store.devicePixelRatio),
"height": Math.ceil(height * Store.devicePixelRatio)
}).css({
"user-select": "none",
"postion": "absolute",
"left": left,
"top": top,
"width": width,
"height": height,
"z-index": 10,
"pointer-events": "none"
});
},
removeAssistCanvas: function(){
$("#luckysheet-grid-window-1 > canvas").not($("#luckysheetTableContent")).remove();
$("#luckysheet-cell-selected").css("z-index", 15);
},
scrollAdapt: function(){
let _this = this;
//有冻结时 选区框 滚动适应
if(Store.luckysheet_select_save != null && Store.luckysheet_select_save.length > 0){
_this.scrollAdaptOfselect();
}
//有冻结时 图表框 滚动适应
if($("#luckysheet-cell-main .luckysheet-data-visualization-chart").length > 0){
// 当前sheet有图表才需要滚动适应
const chart = Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)]["chart"];
if(chart != null && chart.length > 0){
_this.scrollAdaptOfchart();
}
}
//有冻结时 批注框 滚动适应
if($("#luckysheet-postil-showBoxs .luckysheet-postil-show").length > 0){
_this.scrollAdaptOfpostil();
}
//有冻结时 下拉选区图标 滚动适应
if($("#luckysheet-dropCell-icon").length > 0){
_this.scrollAdaptOfdpicon();
}
//有冻结时 筛选下拉按钮 滚动适应
if($("#luckysheet-filter-options-sheet"+ Store.currentSheetIndex +" .luckysheet-filter-options").length > 0){
_this.scrollAdaptOffilteroptions();
}
},
scrollAdaptOfselect: function(){
let _this = this;
if($("#luckysheet-row-count-show").is(":visible")){
$("#luckysheet-row-count-show").hide();
}
if($("#luckysheet-column-count-show").is(":visible")){
$("#luckysheet-column-count-show").hide();
}
$("#luckysheet-rows-h-selected").empty();
$("#luckysheet-cols-h-selected").empty();
let scrollTop = $("#luckysheet-cell-main").scrollTop();
let scrollLeft = $("#luckysheet-cell-main").scrollLeft();
if (_this.freezenhorizontaldata != null && _this.freezenverticaldata != null) {
let freezenTop = _this.freezenhorizontaldata[0];
let freezen_rowindex = _this.freezenhorizontaldata[1];
let offTop = scrollTop - _this.freezenhorizontaldata[2];
let freezenLeft = _this.freezenverticaldata[0];
let freezen_colindex = _this.freezenverticaldata[1];
let offLeft = scrollLeft - _this.freezenverticaldata[2];
for(let s = 0; s < Store.luckysheet_select_save.length; s++){
let obj = $.extend(true, {}, Store.luckysheet_select_save[s]);
let r1 = obj.row[0],
r2 = obj.row[1];
let row = Store.visibledatarow[r2],
row_pre = r1 - 1 == -1 ? 0 : Store.visibledatarow[r1 - 1];
let top_move = row_pre;
let height_move = row - row_pre - 1;
let rangeshow = true;
if(r1 >= freezen_rowindex){//原选区在冻结区外
if(top_move + height_move < freezenTop + offTop){
rangeshow = false;
}
else if(top_move < freezenTop + offTop){
$("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
"top": freezenTop + offTop,
"height": height_move - (freezenTop + offTop - top_move)
});
}
else{
$("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
"top": top_move,
"height": height_move
});
}
}
else if(r2 >= freezen_rowindex){//原选区有一部分在冻结区内
if(top_move + height_move < freezenTop + offTop){
$("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
"top": top_move + offTop,
"height": freezenTop - top_move
});
}
else{
$("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
"top": top_move + offTop,
"height": height_move - offTop
});
}
}
else{//原选区在冻结区内
$("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css("top", top_move + offTop);
}
let c1 = obj.column[0],
c2 = obj.column[1];
let col = Store.visibledatacolumn[c2],
col_pre = c1 - 1 == -1 ? 0 : Store.visibledatacolumn[c1 - 1];
let left_move = col_pre;
let width_move = col - col_pre - 1;
if(c1 >= freezen_colindex){//原选区在冻结区外
if(left_move + width_move < freezenLeft + offLeft){
rangeshow = false;
}
else if(left_move < freezenLeft + offLeft){
$("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
"left": freezenLeft + offLeft,
"width": width_move - (freezenLeft + offLeft - left_move)
});
}
else{
$("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
"left": left_move,
"width": width_move
});
}
}
else if(c2 >= freezen_colindex){//原选区有一部分在冻结区内
if(left_move + width_move < freezenLeft + offLeft){
$("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
"left": left_move + offLeft,
"width": freezenLeft - left_move
});
}
else{
$("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
"left": left_move + offLeft,
"width": width_move - offLeft
});
}
}
else{//原选区在冻结区内
$("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css("left", left_move + offLeft);
}
if(!rangeshow){
$("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).hide();
}
if(s == Store.luckysheet_select_save.length - 1){
let rf = obj.row_focus == null ? r1 : obj.row_focus;
let cf = obj.column_focus == null ? c1 : obj.column_focus;
let row_f = Store.visibledatarow[rf],
row_pre_f = rf - 1 == -1 ? 0 : Store.visibledatarow[rf - 1];
let col_f = Store.visibledatacolumn[cf],
col_pre_f = cf - 1 == -1 ? 0 : Store.visibledatacolumn[cf - 1];
let margeset = menuButton.mergeborer(Store.flowdata, rf, cf);
if(!!margeset){
row_f = margeset.row[1];
row_pre_f = margeset.row[0];
col_f = margeset.column[1];
col_pre_f = margeset.column[0];
}
let top = row_pre_f;
let height = row_f - row_pre_f - 1;
let left = col_pre_f;
let width = col_f - col_pre_f - 1;
let focuscell = true;
if(top >= freezenTop){
if(top + height < freezenTop + offTop){
focuscell = false;
}
else if(top < freezenTop + offTop){
$("#luckysheet-cell-selected-focus").show().css({
"top": freezenTop + offTop,
"height": height - (freezenTop + offTop - top)
})
}
else{
$("#luckysheet-cell-selected-focus").show().css({
"top": top,
"height": height
});
}
}
else if(top + height >= freezenTop){
if(top + height < freezenTop + offTop){
$("#luckysheet-cell-selected-focus").show().css({
"top": top + offTop,
"height": freezenTop - top
})
}
else{
$("#luckysheet-cell-selected-focus").show().css({
"top": top + offTop,
"height": height - offTop
})
}
}
else{
$("#luckysheet-cell-selected-focus").show().css("top", top + offTop);
}
if(left >= freezenLeft){
if(left + width < freezenLeft + offLeft){
focuscell = false;
}
else if(left < freezenLeft + offLeft){
$("#luckysheet-cell-selected-focus").show().css({
"left": freezenLeft + offLeft,
"width": width - (freezenLeft + offLeft - left)
})
}
else{
$("#luckysheet-cell-selected-focus").show().css({
"left": left,
"width": width
});
}
}
else if(left + width >= freezenLeft){
if(left + width < freezenLeft + offLeft){
$("#luckysheet-cell-selected-focus").show().css({
"left": left + offLeft,
"width": freezenLeft - left
})
}
else{
$("#luckysheet-cell-selected-focus").show().css({
"left": left + offLeft,
"width": width - offLeft
})
}
}
else{
$("#luckysheet-cell-selected-focus").show().css("left", left + offLeft);
}
if(!focuscell){
$("#luckysheet-cell-selected-focus").hide();
}
}
}
}
else if (_this.freezenhorizontaldata != null) {
let freezenTop = _this.freezenhorizontaldata[0];
let freezen_rowindex = _this.freezenhorizontaldata[1];
let offTop = scrollTop - _this.freezenhorizontaldata[2];
for(let s = 0; s < Store.luckysheet_select_save.length; s++){
let obj = $.extend(true, {}, Store.luckysheet_select_save[s]);
let r1 = obj.row[0],
r2 = obj.row[1];
let row = Store.visibledatarow[r2],
row_pre = r1 - 1 == -1 ? 0 : Store.visibledatarow[r1 - 1];
let top_move = row_pre;
let height_move = row - row_pre - 1;
if(r1 >= freezen_rowindex){//原选区在冻结区外
if(top_move + height_move < freezenTop + offTop){
$("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).hide();
}
else if(top_move < freezenTop + offTop){
$("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
"top": freezenTop + offTop,
"height": height_move - (freezenTop + offTop - top_move)
});
}
else{
$("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
"top": top_move,
"height": height_move
});
}
}
else if(r2 >= freezen_rowindex){//原选区有一部分在冻结区内
if(top_move + height_move < freezenTop + offTop){
$("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
"top": top_move + offTop,
"height": freezenTop - top_move
});
}
else{
$("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
"top": top_move + offTop,
"height": height_move - offTop
});
}
}
else{//原选区在冻结区内
$("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css("top", top_move + offTop);
}
if(s == Store.luckysheet_select_save.length - 1){
let rf = obj.row_focus == null ? r1 : obj.row_focus;
let cf = obj.column_focus == null ? obj.column[0] : obj.column_focus;
let row_f = Store.visibledatarow[rf],
row_pre_f = rf - 1 == -1 ? 0 : Store.visibledatarow[rf - 1];
let margeset = menuButton.mergeborer(Store.flowdata, rf, cf);
if(!!margeset){
row_f = margeset.row[1];
row_pre_f = margeset.row[0];
}
let top = row_pre_f;
let height = row_f - row_pre_f - 1;
if(top >= freezenTop){
if(top + height < freezenTop + offTop){
$("#luckysheet-cell-selected-focus").hide();
}
else if(top < freezenTop + offTop){
$("#luckysheet-cell-selected-focus").show().css({
"top": freezenTop + offTop,
"height": height - (freezenTop + offTop - top)
})
}
else{
$("#luckysheet-cell-selected-focus").show().css({
"top": top,
"height": height
});
}
}
else if(top + height >= freezenTop){
if(top + height < freezenTop + offTop){
$("#luckysheet-cell-selected-focus").show().css({
"top": top + offTop,
"height": freezenTop - top
})
}
else{
$("#luckysheet-cell-selected-focus").show().css({
"top": top + offTop,
"height": height - offTop
})
}
}
else{
$("#luckysheet-cell-selected-focus").show().css("top", top + offTop);
}
}
}
}
else if (_this.freezenverticaldata != null) {
let freezenLeft = _this.freezenverticaldata[0];
let freezen_colindex = _this.freezenverticaldata[1];
let offLeft = scrollLeft - _this.freezenverticaldata[2];
for(let s = 0; s < Store.luckysheet_select_save.length; s++){
let obj = $.extend(true, {}, Store.luckysheet_select_save[s]);
let c1 = obj.column[0],
c2 = obj.column[1];
let col = Store.visibledatacolumn[c2],
col_pre = c1 - 1 == -1 ? 0 : Store.visibledatacolumn[c1 - 1];
let left_move = col_pre;
let width_move = col - col_pre - 1;
if(c1 >= freezen_colindex){//原选区在冻结区外
if(left_move + width_move < freezenLeft + offLeft){
$("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).hide();
}
else if(left_move < freezenLeft + offLeft){
$("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
"left": freezenLeft + offLeft,
"width": width_move - (freezenLeft + offLeft - left_move)
});
}
else{
$("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
"left": left_move,
"width": width_move
});
}
}
else if(c2 >= freezen_colindex){//原选区有一部分在冻结区内
if(left_move + width_move < freezenLeft + offLeft){
$("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
"left": left_move + offLeft,
"width": freezenLeft - left_move
});
}
else{
$("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
"left": left_move + offLeft,
"width": width_move - offLeft
});
}
}
else{//原选区在冻结区内
$("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css("left", left_move + offLeft);
}
if(s == Store.luckysheet_select_save.length - 1){
let rf = obj.row_focus == null ? obj.row[0] : obj.row_focus;
let cf = obj.column_focus == null ? c1 : obj.column_focus;
let col_f = Store.visibledatacolumn[cf],
col_pre_f = cf - 1 == -1 ? 0 : Store.visibledatacolumn[cf - 1];
let margeset = menuButton.mergeborer(Store.flowdata, rf, cf);
if(!!margeset){
col_f = margeset.column[1];
col_pre_f = margeset.column[0];
}
let left = col_pre_f;
let width = col_f - col_pre_f - 1;
if(left >= freezenLeft){
if(left + width < freezenLeft + offLeft){
$("#luckysheet-cell-selected-focus").hide();
}
else if(left < freezenLeft + offLeft){
$("#luckysheet-cell-selected-focus").show().css({
"left": freezenLeft + offLeft,
"width": width - (freezenLeft + offLeft - left)
})
}
else{
$("#luckysheet-cell-selected-focus").show().css({
"left": left,
"width": width
});
}
}
else if(left + width >= freezenLeft){
if(left + width < freezenLeft + offLeft){
$("#luckysheet-cell-selected-focus").show().css({
"left": left + offLeft,
"width": freezenLeft - left
})
}
else{
$("#luckysheet-cell-selected-focus").show().css({
"left": left + offLeft,
"width": width - offLeft
})
}
}
else{
$("#luckysheet-cell-selected-focus").show().css("left", left + offLeft);
}
}
}
}
else{
selectHightlightShow();
}
},
scrollAdaptOfchart: function(){
let _this = this;
let scrollTop = $("#luckysheet-cell-main").scrollTop();
let scrollLeft = $("#luckysheet-cell-main").scrollLeft();
if(_this.freezenhorizontaldata != null && _this.freezenverticaldata != null){
let freezenTop = _this.freezenhorizontaldata[0] - _this.freezenhorizontaldata[2];
let freezenLeft = _this.freezenverticaldata[0] - _this.freezenverticaldata[2];
$("#luckysheet-cell-main .luckysheet-data-visualization-chart").each(function(i, e){
let x = $(e).position();
let width = $(e).width();
let height = $(e).height();
let $canvas_width = $(e).find("canvas").width();
let $canvas_height = $(e).find("canvas").height();
let height_diff = $canvas_height - height;
let width_diff = $canvas_width - width;
if((x.top - height_diff) < freezenTop){
let size = freezenTop - (x.top - height_diff);
if(size > ($canvas_height + 40 + 2)){
$(e).css("visibility", "hidden");
}
else{
$(e).css({
"top": freezenTop + scrollTop,
"height": $canvas_height - size,
"visibility": "visible"
});
$(e).find("canvas").css("top", - size);
}
}
else{
$(e).css({
"top": x.top - height_diff + scrollTop,
"height": $canvas_height,
"visibility": "visible"
});
$(e).find("canvas").css("top", 0);
}
if((x.left - width_diff) < freezenLeft){
let size = freezenLeft - (x.left - width_diff);
if(size > ($canvas_width + 20 + 2)){
$(e).css("visibility", "hidden");
}
else{
$(e).css({
"left": freezenLeft + scrollLeft,
"width": $canvas_width - size,
"visibility": "visible"
});
$(e).find("canvas").css("left", - size);
}
}
else{
$(e).css({
"left": x.left - width_diff + scrollLeft,
"width": $canvas_width,
"visibility": "visible"
});
$(e).find("canvas").css("left", 0);
}
})
}
else if(_this.freezenhorizontaldata != null){
let freezenTop = _this.freezenhorizontaldata[0] - _this.freezenhorizontaldata[2];
$("#luckysheet-cell-main .luckysheet-data-visualization-chart").each(function(i, e){
let x = $(e).position();
let height = $(e).height();
let $canvas_height = $(e).find("canvas").height();
let height_diff = $canvas_height - height;
if((x.top - height_diff) < freezenTop){
let size = freezenTop - (x.top - height_diff);
if(size > ($canvas_height + 40 + 2)){
$(e).css("visibility", "hidden");
}
else{
$(e).css({
"top": freezenTop + scrollTop,
"height": $canvas_height - size,
"visibility": "visible"
});
$(e).find("canvas").css("top", - size);
}
}
else{
$(e).css({
"top": x.top - height_diff + scrollTop,
"height": $canvas_height,
"visibility": "visible"
});
$(e).find("canvas").css("top", 0);
}
})
}
else if(_this.freezenverticaldata != null){
let freezenLeft = _this.freezenverticaldata[0] - _this.freezenverticaldata[2];
$("#luckysheet-cell-main .luckysheet-data-visualization-chart").each(function(i, e){
let x = $(e).position();
let width = $(e).width();
let $canvas_width = $(e).find("canvas").width();
let width_diff = $canvas_width - width;
if((x.left - width_diff) < freezenLeft){
let size = freezenLeft - (x.left - width_diff);
if(size > ($canvas_width + 20 + 2)){
$(e).css("visibility", "hidden");
}
else{
$(e).css({
"left": freezenLeft + scrollLeft,
"width": $canvas_width - size,
"visibility": "visible"
});
$(e).find("canvas").css("left", - size);
}
}
else{
$(e).css({
"left": x.left - width_diff + scrollLeft,
"width": $canvas_width,
"visibility": "visible"
});
$(e).find("canvas").css("left", 0);
}
})
}
else{
$("#luckysheet-cell-main .luckysheet-data-visualization-chart").each(function(i, e){
let x = $(e).position();
let width = $(e).width();
let height = $(e).height();
let $canvas_width = $(e).find("canvas").width();
let $canvas_height = $(e).find("canvas").height();
let height_diff = $canvas_height - height;
let width_diff = $canvas_width - width;
$(e).css({
"top": x.top - height_diff + scrollTop,
"height": $canvas_height,
"left": x.left - width_diff + scrollLeft,
"width": $canvas_width,
"visibility": "visible"
});
$(e).find("canvas").css({
"top": 0,
"left": 0
});
})
}
},
scrollAdaptOfpostil: function(){
let _this = this;
let scrollTop = $("#luckysheet-cell-main").scrollTop();
let scrollLeft = $("#luckysheet-cell-main").scrollLeft();
if(_this.freezenhorizontaldata != null && _this.freezenverticaldata != null){
let freezenTop = _this.freezenhorizontaldata[0];
let freezenLeft = _this.freezenverticaldata[0];
let offTop = scrollTop - _this.freezenhorizontaldata[2];
let offLeft = scrollLeft - _this.freezenverticaldata[2];
$("#luckysheet-postil-showBoxs .luckysheet-postil-show").each(function(i, e){
let id = $(e).attr("id");
let r = id.split("luckysheet-postil-show_")[1].split("_")[0];
let c = id.split("luckysheet-postil-show_")[1].split("_")[1];
let postil = Store.flowdata[r][c].ps;
let row = Store.visibledatarow[r],
row_pre = r - 1 == -1 ? 0 : Store.visibledatarow[r - 1];
let col = Store.visibledatacolumn[c],
col_pre = c - 1 == -1 ? 0 : Store.visibledatacolumn[c - 1];
let margeset = menuButton.mergeborer(Store.flowdata, r, c);
if(!!margeset){
row = margeset.row[1];
row_pre = margeset.row[0];
col = margeset.column[1];
col_pre = margeset.column[0];
}
let toX = col;
let toY = row_pre;
let postil_left = postil["left"] == null ? toX + 18 : postil["left"];
let postil_top = postil["top"] == null ? toY - 18 : postil["top"];
let postil_width = postil["width"] == null ? luckysheetPostil.defaultWidth : postil["width"];
let postil_height = postil["height"] == null ? luckysheetPostil.defaultHeight : postil["height"];
if(postil_top < 0){
postil_top = 2;
}
let size = luckysheetPostil.getArrowCanvasSize(postil_left, postil_top, toX, toY);
let show = true;
let show2 = true;
if(r >= _this.freezenhorizontaldata[1]){
if(postil_top + postil_height < freezenTop){
$(e).show().find(".luckysheet-postil-show-main").css("top", postil_top + offTop);
$(e).show().find(".arrowCanvas").css("top", size[1] + offTop);
}
else{
if(postil_top < freezenTop + offTop){
if(postil_top + postil_height <= freezenTop + offTop){
show = false;
}
else{
$(e).show().find(".luckysheet-postil-show-main").css({ "top": freezenTop + offTop, "height": postil_height - (freezenTop + offTop - postil_top) });
$(e).show().find(".formulaInputFocus").css("margin-top", -(freezenTop + offTop - postil_top));
$(e).show().find(".arrowCanvas").hide();
show2 = false;
}
}
else{
$(e).show().find(".luckysheet-postil-show-main").css({
"top": postil_top,
"height": postil_height
});
$(e).show().find(".formulaInputFocus").css("margin-top", 0);
$(e).show().find(".arrowCanvas").css("top", size[1]);
// luckysheetPostil.buildPs(r, c, postil);
}
}
}
else{
$(e).show().find(".luckysheet-postil-show-main").css("top", postil_top + offTop);
$(e).show().find(".arrowCanvas").css("top", size[1] + offTop);
}
if(c >= _this.freezenverticaldata[1]){
if(postil_left + postil_width < freezenLeft){
$(e).show().find(".luckysheet-postil-show-main").css("left", postil_left + offLeft);
$(e).show().find(".arrowCanvas").css("left", size[0] + offLeft);
}
else{
if(postil_left < freezenLeft + offLeft){
if(postil_left + postil_width <= freezenLeft + offLeft){
show = false;
}
else{
$(e).show().find(".luckysheet-postil-show-main").css({ "left": freezenLeft + offLeft, "width": postil_width - (freezenLeft + offLeft - postil_left) });
$(e).show().find(".formulaInputFocus").css("margin-left", -(freezenLeft + offLeft - postil_left));
$(e).show().find(".arrowCanvas").hide();
show2 = false;
}
}
else{
$(e).show().find(".luckysheet-postil-show-main").css({
"left": postil_left,
"width": postil_width
});
$(e).show().find(".formulaInputFocus").css("margin-left", 0);
$(e).show().find(".arrowCanvas").css("left", size[0]);
// luckysheetPostil.buildPs(r, c, postil);
}
}
}
else{
$(e).show().find(".luckysheet-postil-show-main").css("left", postil_left + offLeft);
$(e).show().find(".arrowCanvas").css("left", size[0] + offLeft);
}
if(!show){
$(e).hide();
}
if(show && show2){
$(e).show().find(".arrowCanvas").show();
}
})
}
else if(_this.freezenhorizontaldata != null){
let freezenTop = _this.freezenhorizontaldata[0];
let offTop = scrollTop - _this.freezenhorizontaldata[2];
$("#luckysheet-postil-showBoxs .luckysheet-postil-show").each(function(i, e){
let id = $(e).attr("id");
let r = id.split("luckysheet-postil-show_")[1].split("_")[0];
let c = id.split("luckysheet-postil-show_")[1].split("_")[1];
let postil = Store.flowdata[r][c].ps;
let row = Store.visibledatarow[r],
row_pre = r - 1 == -1 ? 0 : Store.visibledatarow[r - 1];
let col = Store.visibledatacolumn[c],
col_pre = c - 1 == -1 ? 0 : Store.visibledatacolumn[c - 1];
let margeset = menuButton.mergeborer(Store.flowdata, r, c);
if(!!margeset){
row = margeset.row[1];
row_pre = margeset.row[0];
col = margeset.column[1];
col_pre = margeset.column[0];
}
let toX = col;
let toY = row_pre;
let postil_left = postil["left"] == null ? toX + 18 : postil["left"];
let postil_top = postil["top"] == null ? toY - 18 : postil["top"];
let postil_width = postil["width"] == null ? luckysheetPostil.defaultWidth : postil["width"];
let postil_height = postil["height"] == null ? luckysheetPostil.defaultHeight : postil["height"];
if(postil_top < 0){
postil_top = 2;
}
let size = luckysheetPostil.getArrowCanvasSize(postil_left, postil_top, toX, toY);
if(r >= _this.freezenhorizontaldata[1]){
if(postil_top + postil_height < freezenTop){
$(e).show().find(".luckysheet-postil-show-main").css("top", postil_top + offTop);
$(e).show().find(".arrowCanvas").css("top", size[1] + offTop);
}
else{
if(postil_top < freezenTop + offTop){
if(postil_top + postil_height <= freezenTop + offTop){
$(e).hide();
}
else{
$(e).show().find(".luckysheet-postil-show-main").css({ "top": freezenTop + offTop, "height": postil_height - (freezenTop + offTop - postil_top) });
$(e).show().find(".formulaInputFocus").css("margin-top", -(freezenTop + offTop - postil_top));
$(e).show().find(".arrowCanvas").hide();
}
}
else{
luckysheetPostil.buildPs(r, c, postil);
}
}
}
else{
$(e).show().find(".luckysheet-postil-show-main").css("top", postil_top + offTop);
$(e).show().find(".arrowCanvas").css("top", size[1] + offTop);
}
})
}
else if(_this.freezenverticaldata != null){
let freezenLeft = _this.freezenverticaldata[0];
let offLeft = scrollLeft - _this.freezenverticaldata[2];
$("#luckysheet-postil-showBoxs .luckysheet-postil-show").each(function(i, e){
let id = $(e).attr("id");
let r = id.split("luckysheet-postil-show_")[1].split("_")[0];
let c = id.split("luckysheet-postil-show_")[1].split("_")[1];
let postil = Store.flowdata[r][c].ps;
let row = Store.visibledatarow[r],
row_pre = r - 1 == -1 ? 0 : Store.visibledatarow[r - 1];
let col = Store.visibledatacolumn[c],
col_pre = c - 1 == -1 ? 0 : Store.visibledatacolumn[c - 1];
let margeset = menuButton.mergeborer(Store.flowdata, r, c);
if(!!margeset){
row = margeset.row[1];
row_pre = margeset.row[0];
col = margeset.column[1];
col_pre = margeset.column[0];
}
let toX = col;
let toY = row_pre;
let postil_left = postil["left"] == null ? toX + 18 : postil["left"];
let postil_top = postil["top"] == null ? toY - 18 : postil["top"];
let postil_width = postil["width"] == null ? luckysheetPostil.defaultWidth : postil["width"];
let postil_height = postil["height"] == null ? luckysheetPostil.defaultHeight : postil["height"];
if(postil_top < 0){
postil_top = 2;
}
let size = luckysheetPostil.getArrowCanvasSize(postil_left, postil_top, toX, toY);
if(c >= _this.freezenverticaldata[1]){
if(postil_left + postil_width < freezenLeft){
$(e).show().find(".luckysheet-postil-show-main").css("left", postil_left + offLeft);
$(e).show().find(".arrowCanvas").css("left", size[0] + offLeft);
}
else{
if(postil_left < freezenLeft + offLeft){
if(postil_left + postil_width <= freezenLeft + offLeft){
$(e).hide();
}
else{
$(e).show().find(".luckysheet-postil-show-main").css({ "left": freezenLeft + offLeft, "width": postil_width - (freezenLeft + offLeft - postil_left) });
$(e).show().find(".formulaInputFocus").css("margin-left", -(freezenLeft + offLeft - postil_left));
$(e).show().find(".arrowCanvas").hide();
}
}
else{
luckysheetPostil.buildPs(r, c, postil);
}
}
}
else{
$(e).show().find(".luckysheet-postil-show-main").css("left", postil_left + offLeft);
$(e).show().find(".arrowCanvas").css("left", size[0] + offLeft);
}
})
}
else{
$("#luckysheet-postil-showBoxs .luckysheet-postil-show").each(function(i, e){
let id = $(e).attr("id");
let r = id.split("luckysheet-postil-show_")[1].split("_")[0];
let c = id.split("luckysheet-postil-show_")[1].split("_")[1];
let postil = Store.flowdata[r][c].ps;
luckysheetPostil.buildPs(r, c, postil);
})
}
},
scrollAdaptOfdpicon: function(){
let _this = this;
let copy_r = luckysheetDropCell.copyRange["row"][1],
copy_c = luckysheetDropCell.copyRange["column"][1];
let apply_r = luckysheetDropCell.applyRange["row"][1],
apply_c = luckysheetDropCell.applyRange["column"][1];
let row_index, col_index;
if(apply_r >= copy_r && apply_c >= copy_c){
row_index = apply_r;
col_index = apply_c;
}
else{
row_index = copy_r;
col_index = copy_c;
}
if(_this.freezenhorizontaldata != null && _this.freezenverticaldata != null){
let freezen_rowindex = _this.freezenhorizontaldata[1];
let offsetRow = luckysheet_searcharray(_this.freezenhorizontaldata[3], $("#luckysheet-cell-main").scrollTop() - _this.freezenhorizontaldata[2]);
let freezen_colindex = _this.freezenverticaldata[1];
let offsetColumn = luckysheet_searcharray(_this.freezenverticaldata[3], $("#luckysheet-cell-main").scrollLeft() - _this.freezenverticaldata[2]);
if(row_index >= freezen_rowindex && col_index >= freezen_colindex){
if(row_index < (freezen_rowindex + offsetRow - 1) || col_index < (freezen_colindex + offsetColumn - 1)){
$("#luckysheet-dropCell-icon").hide();
}
else{
$("#luckysheet-dropCell-icon").show();
}
}
else if(row_index >= freezen_rowindex){
if(row_index < (freezen_rowindex + offsetRow - 1)){
$("#luckysheet-dropCell-icon").hide();
}
else{
let col = colLocationByIndex(col_index + offsetColumn)[1];
$("#luckysheet-dropCell-icon").show().css("left", col);
}
}
else if(col_index >= freezen_colindex){
if(col_index < (freezen_colindex + offsetColumn - 1)){
$("#luckysheet-dropCell-icon").hide();
}
else{
let row = rowLocationByIndex(row_index + offsetRow)[1];
$("#luckysheet-dropCell-icon").show().css("top", row);
}
}
else{
let row = rowLocationByIndex(row_index + offsetRow)[1],
col = colLocationByIndex(col_index + offsetColumn)[1];
$("#luckysheet-dropCell-icon").show().css({ "left": col, "top": row });
}
}
else if(_this.freezenhorizontaldata != null){
let freezen_rowindex = _this.freezenhorizontaldata[1];
let offsetRow = luckysheet_searcharray(_this.freezenhorizontaldata[3], $("#luckysheet-cell-main").scrollTop() - _this.freezenhorizontaldata[2]);
if(row_index >= freezen_rowindex){
if(row_index < (freezen_rowindex + offsetRow - 1)){
$("#luckysheet-dropCell-icon").hide();
}
else{
$("#luckysheet-dropCell-icon").show();
}
}
else{
let row = rowLocationByIndex(row_index + offsetRow)[1];
$("#luckysheet-dropCell-icon").show().css("top", row);
}
}
else if(_this.freezenverticaldata != null){
let freezen_colindex = _this.freezenverticaldata[1];
let offsetColumn = luckysheet_searcharray(_this.freezenverticaldata[3], $("#luckysheet-cell-main").scrollLeft() - _this.freezenverticaldata[2]);
if(col_index >= freezen_colindex){
if(col_index < (freezen_colindex + offsetColumn - 1)){
$("#luckysheet-dropCell-icon").hide();
}
else{
$("#luckysheet-dropCell-icon").show();
}
}
else{
let col = colLocationByIndex(col_index + offsetColumn)[1];
$("#luckysheet-dropCell-icon").show().css("left", col);
}
}
else{
let row = rowLocationByIndex(row_index)[1],
col = colLocationByIndex(col_index)[1];
$("#luckysheet-dropCell-icon").show().css({ "left": col, "top": row });
}
},
scrollAdaptOffilteroptions: function(){
let _this = this;
if(_this.freezenhorizontaldata != null && _this.freezenverticaldata != null){
let freezen_rowindex = _this.freezenhorizontaldata[1];
let freezen_top = _this.freezenhorizontaldata[0] + $("#luckysheet-cell-main").scrollTop();
let freezen_colindex = _this.freezenverticaldata[1];
let offsetColumn = luckysheet_searcharray(_this.freezenverticaldata[3], $("#luckysheet-cell-main").scrollLeft() - _this.freezenverticaldata[2]);
$("#luckysheet-filter-options-sheet"+ Store.currentSheetIndex +" .luckysheet-filter-options").each(function(i, e){
let row_index = $(e).data("str");
let top = row_index - 1 == -1 ? 0 : Store.visibledatarow[row_index - 1];
let col_index = $(e).data("cindex");
if(row_index >= freezen_rowindex && col_index >= freezen_colindex){
if(top < freezen_top || col_index < (freezen_colindex + offsetColumn)){
$(e).hide();
}
else{
$(e).show();
}
}
else if(row_index >= freezen_rowindex){
if(top < freezen_top){
$(e).hide();
}
else{
let left = Store.visibledatacolumn[col_index + offsetColumn] - 20;
$(e).show().css("left", left);
}
}
else if(col_index >= freezen_colindex){
if(col_index < (freezen_colindex + offsetColumn)){
$(e).hide();
}
else{
$(e).show().css("top", top + $("#luckysheet-cell-main").scrollTop());
}
}
else{
let left = Store.visibledatacolumn[col_index + offsetColumn] - 20;
$(e).show().css({ "left": left, "top": top + $("#luckysheet-cell-main").scrollTop() });
}
});
}
else if(_this.freezenhorizontaldata != null){
let freezen_rowindex = _this.freezenhorizontaldata[1];
let freezen_top = _this.freezenhorizontaldata[0] + $("#luckysheet-cell-main").scrollTop();
$("#luckysheet-filter-options-sheet"+ Store.currentSheetIndex +" .luckysheet-filter-options").each(function(i, e){
let row_index = $(e).data("str");
let top = row_index - 1 == -1 ? 0 : Store.visibledatarow[row_index - 1];
if(row_index >= freezen_rowindex){
if(top < freezen_top){
$(e).hide();
}
else{
$(e).show();
}
}
else{
$(e).show().css("top", top + $("#luckysheet-cell-main").scrollTop());
}
});
}
else if(_this.freezenverticaldata != null){
let freezen_colindex = _this.freezenverticaldata[1];
let offsetColumn = luckysheet_searcharray(_this.freezenverticaldata[3], $("#luckysheet-cell-main").scrollLeft() - _this.freezenverticaldata[2]);
$("#luckysheet-filter-options-sheet"+ Store.currentSheetIndex +" .luckysheet-filter-options").each(function(i, e){
let col_index = $(e).data("cindex");
if(col_index >= freezen_colindex){
if(col_index < (freezen_colindex + offsetColumn)){
$(e).hide();
}
else{
$(e).show();
}
}
else{
let left = Store.visibledatacolumn[col_index + offsetColumn] - 20;
$(e).show().css("left", left);
}
});
}
else{
$("#luckysheet-filter-options-sheet"+ Store.currentSheetIndex).empty();
createFilterOptions(Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)].filter_select);
}
},
/**
*
* @param {string} operate "freezenRow"/ "freezenColumn"......
* @param {Number | String} order 工作表索引;默认值为当前工作表索引
* @param {Object} focus 冻结选区时的focus单元格行列值构成的对象;格式为{ row_focus:0, column_focus:0 }
*/
saveFrozen: function(operate, order, focus = {}) {
if (order == null) {
order = getSheetIndex(Store.currentSheetIndex)
}
// New configuration attribute of sheet: frozen, which stores more semantic configuration for initialization and transmission to the backend. freezenhorizontaldata is still used as local data
const select_save = Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1];
const row_focus = select_save["row_focus"] == null ? select_save["row"][0] : select_save["row_focus"];
const column_focus = select_save["column_focus"] == null ? select_save["column"][0] : select_save["column_focus"];
const range = {
row_focus: focus.row_focus || row_focus,
column_focus: focus.column_focus || column_focus
}
const frozen = {
"freezenRow": {
type: 'row'
},
"freezenColumn": {
type: 'column'
},
"freezenRC": {
type: 'both'
},
"freezenRowRange": {
type: 'rangeRow',
range: range
},
"freezenColumnRange": {
type: 'rangeColumn',
range: range
},
"freezenRCRange": {
type: 'rangeBoth',
range: range
},
"freezenCancel": {
type: 'cancel'
}
}
// store frozen
Store.luckysheetfile[order]["frozen"] = frozen[operate];
},
frozenTofreezen: function() {
// get frozen type
let file = Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)];
const frozen = file["frozen"];
if(frozen == null){
return;
}
let freezen = null;
// transform to freezen
if(frozen.type === 'row'){
let scrollTop = 0;
let row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop);
if(row_st == -1){
row_st = 0;
}
let top = Store.visibledatarow[row_st] - 2 - scrollTop + Store.columnHeaderHeight;
let freezenhorizontaldata = [Store.visibledatarow[row_st], row_st + 1, scrollTop, luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), top];
freezen = {
horizontal:{
freezenhorizontaldata: freezenhorizontaldata,
top: top
}
}
}
else if(frozen.type === 'column'){
let scrollLeft = 0;
let col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft);
if(col_st == -1){
col_st = 0;
}
let left = Store.visibledatacolumn[col_st] - 2 - scrollLeft + Store.rowHeaderWidth;
let freezenverticaldata = [Store.visibledatacolumn[col_st], col_st + 1, scrollLeft, luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), left];
freezen = {
vertical:{
freezenverticaldata: freezenverticaldata,
left: left
}
}
}
else if(frozen.type === 'both'){
let scrollTop = 0;
let row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop);
if(row_st == -1){
row_st = 0;
}
let top = Store.visibledatarow[row_st] - 2 - scrollTop + Store.columnHeaderHeight;
let freezenhorizontaldata = [Store.visibledatarow[row_st], row_st + 1, scrollTop, luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), top];
let scrollLeft = 0;
let col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft);
if(col_st == -1){
col_st = 0;
}
let left = Store.visibledatacolumn[col_st] - 2 - scrollLeft + Store.rowHeaderWidth;
let freezenverticaldata = [Store.visibledatacolumn[col_st], col_st + 1, scrollLeft, luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), left];
freezen = {
horizontal:{
freezenhorizontaldata: freezenhorizontaldata,
top: top
},
vertical:{
freezenverticaldata: freezenverticaldata,
left: left
}
}
}
else if(frozen.type === 'rangeRow'){
let scrollTop = 0;
let row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop);
let row_focus = frozen.range["row_focus"];
if(row_focus > row_st){
row_st = row_focus;
}
if(row_st == -1){
row_st = 0;
}
let top = Store.visibledatarow[row_st] - 2 - scrollTop + Store.columnHeaderHeight;
let freezenhorizontaldata = [Store.visibledatarow[row_st], row_st + 1, scrollTop, luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), top];
freezen = {
horizontal:{
freezenhorizontaldata: freezenhorizontaldata,
top: top
}
}
}
else if(frozen.type === 'rangeColumn'){
let scrollLeft = 0;
let col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft);
let column_focus = frozen.range["column_focus"];
if(column_focus > col_st){
col_st = column_focus;
}
if(col_st == -1){
col_st = 0;
}
let left = Store.visibledatacolumn[col_st] - 2 - scrollLeft + Store.rowHeaderWidth;
let freezenverticaldata = [Store.visibledatacolumn[col_st], col_st + 1, scrollLeft, luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), left];
freezen = {
vertical:{
freezenverticaldata: freezenverticaldata,
left: left
}
}
}
else if(frozen.type === 'rangeBoth'){
let scrollTop = 0;
let row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop);
let row_focus = frozen.range["row_focus"];
if(row_focus > row_st){
row_st = row_focus;
}
if(row_st == -1){
row_st = 0;
}
let top = Store.visibledatarow[row_st] - 2 - scrollTop + Store.columnHeaderHeight;
let freezenhorizontaldata = [Store.visibledatarow[row_st], row_st + 1, scrollTop, luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), top];
let scrollLeft = 0;
let col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft);
let column_focus = frozen.range["column_focus"];
if(column_focus > col_st){
col_st = column_focus;
}
if(col_st == -1){
col_st = 0;
}
let left = Store.visibledatacolumn[col_st] - 2 - scrollLeft + Store.rowHeaderWidth;
let freezenverticaldata = [Store.visibledatacolumn[col_st], col_st + 1, scrollLeft, luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), left];
freezen = {
horizontal:{
freezenhorizontaldata: freezenhorizontaldata,
top: top
},
vertical:{
freezenverticaldata: freezenverticaldata,
left: left
}
}
}
else if(frozen.type === 'cancel'){
freezen = {
horizontal: null,
vertical: null
}
}
file["freezen"] = freezen;
}
}
export default luckysheetFreezen;