Browse Source

feat(split handler.js to small file): split handler.js file to seven files

master
liuyang 5 years ago
parent
commit
0a62ff0565
  1. 7
      src/controllers/constant.js
  2. 1512
      src/controllers/filter.js
  3. 293
      src/controllers/formulaBar.js
  4. 6242
      src/controllers/handler.js
  5. 917
      src/controllers/keyboard.js
  6. 1241
      src/controllers/matrixOperation.js
  7. 273
      src/controllers/orderBy.js
  8. 2
      src/controllers/pivotTable.js
  9. 1620
      src/controllers/rowColumnOperation.js
  10. 454
      src/controllers/sheetBar.js
  11. 22
      src/core.js
  12. 2
      src/global/refresh.js
  13. 10
      src/locale/en.js
  14. 3
      src/locale/zh.js

7
src/controllers/constant.js

@ -491,8 +491,11 @@ function sheetconfigHTML(){
</div>`;
}
const luckysheetPivotTableHTML = '<div id="luckysheet-modal-dialog-slider-pivot" class="luckysheet-modal-dialog-slider luckysheet-modal-dialog-slider-pivot"> <div class="luckysheet-modal-dialog-slider-title"> <span>数据透视表</span> <span id="luckysheet-modal-dialog-slider-close" title="关闭"><i class="fa fa-times" aria-hidden="true"></i></span> </div> <div class="luckysheet-modal-dialog-slider-content"> <div class="luckysheet-modal-dialog-slider-range"> <div id="luckysheet-dialog-pivotTable-range"></div> <div id="luckysheet-dialog-pivotTable-range-seleted">编辑范围</div> </div> <div class="luckysheet-modal-dialog-slider-list-title"> 选择需要添加到数据透视表的字段 <span title="清除所有已选字段" id="luckysheet-dialog-pivotTable-clearitem">清除</span></div> <div id="luckysheet-modal-dialog-pivotTable-list" class="luckysheet-modal-dialog-slider-list luckysheet-scrollbars"> </div> <div class="luckysheet-modal-dialog-slider-config-c"> <div class="luckysheet-modal-dialog-slider-config luckysheet-modal-dialog-config-filter"> <div> <span><i class="fa fa-filter luckysheet-mousedown-cancel" aria-hidden="true"></i> 筛选</span> </div> <div id="luckysheet-modal-dialog-config-filter" class="luckysheet-modal-dialog-slider-config-list luckysheet-scrollbars"> </div> </div> <div class="luckysheet-modal-dialog-slider-config luckysheet-modal-dialog-config-row"> <div> <span><i class="fa fa-list-alt" aria-hidden="true"></i> 行</span> </div> <div id="luckysheet-modal-dialog-config-row" class="luckysheet-modal-dialog-slider-config-list luckysheet-scrollbars"> </div> </div> <div class="luckysheet-modal-dialog-slider-config luckysheet-modal-dialog-config-column"> <div> <span><i class="fa fa-indent" aria-hidden="true"></i> 列</span> </div> <div id="luckysheet-modal-dialog-config-column" class="luckysheet-modal-dialog-slider-config-list luckysheet-scrollbars"> </div> </div> <div class="luckysheet-modal-dialog-slider-config luckysheet-modal-dialog-config-value"> <div> <span><i class="fa fa-cube" aria-hidden="true"></i> 数值</span> <span style="float: right;margin-right: 10px;display:none;" id="luckysheetpivottablevaluecolrowshow"><label style="padding:0px 5px;margin:0px;font-size:12px;height:15px;line-height:15px;" title="统计字段显示为列" for="luckysheetpivottablevaluecolrow">列</label> <input type="radio" checked="checked" value="1" name="luckysheetpivottablevaluecolrow" id="luckysheetpivottablevaluecolrow" /> <label style="padding:0px 5px;margin:0px;font-size:12px;height:15px;line-height:15px;" title="统计字段显示为行" for="luckysheetpivottablevaluecolrow1">行</label> <input type="radio" value="0" name="luckysheetpivottablevaluecolrow" id="luckysheetpivottablevaluecolrow1" /></span></div> <div id="luckysheet-modal-dialog-config-value" class="luckysheet-modal-dialog-slider-config-list luckysheet-scrollbars"> </div> </div> </div> </div> </div>';
const luckysheetPivotTableHTML = function(){
const _locale = locale();
const locale_pivotTable = _locale.pivotTable;
return '<div id="luckysheet-modal-dialog-slider-pivot" class="luckysheet-modal-dialog-slider luckysheet-modal-dialog-slider-pivot"> <div class="luckysheet-modal-dialog-slider-title"> <span>数据透视表</span> <span id="luckysheet-modal-dialog-slider-close" title="关闭"><i class="fa fa-times" aria-hidden="true"></i></span> </div> <div class="luckysheet-modal-dialog-slider-content"> <div class="luckysheet-modal-dialog-slider-range"> <div id="luckysheet-dialog-pivotTable-range"></div> <div id="luckysheet-dialog-pivotTable-range-seleted">编辑范围</div> </div> <div class="luckysheet-modal-dialog-slider-list-title"> 选择需要添加到数据透视表的字段 <span title="清除所有已选字段" id="luckysheet-dialog-pivotTable-clearitem">清除</span></div> <div id="luckysheet-modal-dialog-pivotTable-list" class="luckysheet-modal-dialog-slider-list luckysheet-scrollbars"> </div> <div class="luckysheet-modal-dialog-slider-config-c"> <div class="luckysheet-modal-dialog-slider-config luckysheet-modal-dialog-config-filter"> <div> <span><i class="fa fa-filter luckysheet-mousedown-cancel" aria-hidden="true"></i> 筛选</span> </div> <div id="luckysheet-modal-dialog-config-filter" class="luckysheet-modal-dialog-slider-config-list luckysheet-scrollbars"> </div> </div> <div class="luckysheet-modal-dialog-slider-config luckysheet-modal-dialog-config-row"> <div> <span><i class="fa fa-list-alt" aria-hidden="true"></i> 行</span> </div> <div id="luckysheet-modal-dialog-config-row" class="luckysheet-modal-dialog-slider-config-list luckysheet-scrollbars"> </div> </div> <div class="luckysheet-modal-dialog-slider-config luckysheet-modal-dialog-config-column"> <div> <span><i class="fa fa-indent" aria-hidden="true"></i> 列</span> </div> <div id="luckysheet-modal-dialog-config-column" class="luckysheet-modal-dialog-slider-config-list luckysheet-scrollbars"> </div> </div> <div class="luckysheet-modal-dialog-slider-config luckysheet-modal-dialog-config-value"> <div> <span><i class="fa fa-cube" aria-hidden="true"></i> 数值</span> <span style="float: right;margin-right: 10px;display:none;" id="luckysheetpivottablevaluecolrowshow"><label style="padding:0px 5px;margin:0px;font-size:12px;height:15px;line-height:15px;" title="统计字段显示为列" for="luckysheetpivottablevaluecolrow">列</label> <input type="radio" checked="checked" value="1" name="luckysheetpivottablevaluecolrow" id="luckysheetpivottablevaluecolrow" /> <label style="padding:0px 5px;margin:0px;font-size:12px;height:15px;line-height:15px;" title="统计字段显示为行" for="luckysheetpivottablevaluecolrow1">行</label> <input type="radio" value="0" name="luckysheetpivottablevaluecolrow" id="luckysheetpivottablevaluecolrow1" /></span></div> <div id="luckysheet-modal-dialog-config-value" class="luckysheet-modal-dialog-slider-config-list luckysheet-scrollbars"> </div> </div> </div> </div> </div>';
}
function filtermenuHTML() {
const _locale = locale();

1512
src/controllers/filter.js

File diff suppressed because it is too large

293
src/controllers/formulaBar.js

@ -0,0 +1,293 @@
import menuButton from './menuButton';
import luckysheetupdateCell from './updateCell';
import { keycode } from './constant';
import {
luckysheetMoveHighlightCell,
} from './sheetMove';
import insertFormula from './insertFormula';
import {
rowLocation,
colLocation,
mouseposition
} from '../global/location';
import { isEditMode } from '../global/validate';
import formula from '../global/formula';
import tooltip from '../global/tooltip';
import locale from '../locale/locale';
import Store from '../store';
export function formulaBarInitial(){
//公式栏处理
const _locale = locale();
const locale_formula= _locale.formula;
$("#luckysheet-functionbox-cell").focus(function () {
if(isEditMode()){//此模式下禁用公式栏
return;
}
if(Store.luckysheet_select_save.length > 0){
let last = Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1];
let row_index = last["row_focus"], col_index = last["column_focus"];
let row = Store.visibledatarow[row_index],
row_pre = row_index - 1 == -1 ? 0 : Store.visibledatarow[row_index - 1];
let col = Store.visibledatacolumn[col_index],
col_pre = col_index - 1 == -1 ? 0 : Store.visibledatacolumn[col_index - 1];
let margeset = menuButton.mergeborer(Store.flowdata, row_index, col_index);
if(!!margeset){
row = margeset.row[1];
row_pre = margeset.row[0];
row_index = margeset.row[2];
col = margeset.column[1];
col_pre = margeset.column[0];
col_index = margeset.column[2];
}
luckysheetupdateCell(row, row_pre, row_index, col, col_pre, col_index, Store.flowdata, null, true);
formula.rangeResizeTo = $("#luckysheet-functionbox-cell");
}
}).keydown(function (event) {
if(isEditMode()){//此模式下禁用公式栏
return;
}
let ctrlKey = event.ctrlKey;
let altKey = event.altKey;
let shiftKey = event.shiftKey;
let kcode = event.keyCode;
let $inputbox = $("#luckysheet-input-box");
if (kcode == keycode.ENTER && parseInt($inputbox.css("top")) > 0) {
if ($("#luckysheet-formula-search-c").is(":visible") && formula.searchFunctionCell != null) {
formula.searchFunctionEnter($("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item-active"));
}
else {
formula.updatecell(Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[1]);
Store.luckysheet_select_save = [{ "row": [Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[0]], "column": [Store.luckysheetCellUpdate[1], Store.luckysheetCellUpdate[1]], "row_focus": Store.luckysheetCellUpdate[0], "column_focus": Store.luckysheetCellUpdate[1] }];
luckysheetMoveHighlightCell("down", 1, "rangeOfSelect");
$("#luckysheet-functionbox-cell").blur();
}
event.preventDefault();
}
else if (kcode == keycode.ESC && parseInt($inputbox.css("top")) > 0) {
formula.dontupdate();
luckysheetMoveHighlightCell("down", 0, "rangeOfSelect");
event.preventDefault();
}
else if (kcode == keycode.F4 && parseInt($inputbox.css("top")) > 0) {
formula.setfreezonFuc(event);
event.preventDefault();
}
else if (kcode == keycode.UP && parseInt($inputbox.css("top")) > 0) {
if ($("#luckysheet-formula-search-c").is(":visible")) {
let $up = $("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item-active").prev();
if ($up.length == 0) {
$up = $("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item").last();
}
$("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item").removeClass("luckysheet-formula-search-item-active");
$up.addClass("luckysheet-formula-search-item-active");
event.preventDefault();
}
}
else if (kcode == keycode.DOWN && parseInt($inputbox.css("top")) > 0) {
if ($("#luckysheet-formula-search-c").is(":visible")) {
let $up = $("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item-active").next();
if ($up.length == 0) {
$up = $("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item").first();
}
$("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item").removeClass("luckysheet-formula-search-item-active");
$up.addClass("luckysheet-formula-search-item-active");
event.preventDefault();
}
}
else if (kcode == keycode.LEFT && parseInt($inputbox.css("top")) > 0) {
formula.rangeHightlightselected($("#luckysheet-functionbox-cell"));
}
else if (kcode == keycode.RIGHT && parseInt($inputbox.css("top")) > 0) {
formula.rangeHightlightselected($("#luckysheet-functionbox-cell"));
}
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)) {
formula.functionInputHanddler($("#luckysheet-rich-text-editor"), $("#luckysheet-functionbox-cell"), kcode);
}
}).click(function () {
if(isEditMode()){//此模式下禁用公式栏
return;
}
formula.rangeHightlightselected($("#luckysheet-functionbox-cell"));
});
//公式栏 取消(X)按钮
$("#luckysheet-wa-functionbox-cancel").click(function () {
if (!$(this).hasClass("luckysheet-wa-calculate-active")) {
return;
}
//若有参数弹出框,隐藏
if($("#luckysheet-search-formula-parm").is(":visible")){
$("#luckysheet-search-formula-parm").hide();
}
//若有参数选取范围弹出框,隐藏
if($("#luckysheet-search-formula-parm-select").is(":visible")){
$("#luckysheet-search-formula-parm-select").hide();
}
formula.dontupdate();
luckysheetMoveHighlightCell("down", 0, "rangeOfSelect");
});
//公式栏 确认()按钮
$("#luckysheet-wa-functionbox-confirm").click(function () {
if (!$(this).hasClass("luckysheet-wa-calculate-active")) {
return;
}
//若有参数弹出框,隐藏
if($("#luckysheet-search-formula-parm").is(":visible")){
$("#luckysheet-search-formula-parm").hide();
}
//若有参数选取范围弹出框,隐藏
if($("#luckysheet-search-formula-parm-select").is(":visible")){
$("#luckysheet-search-formula-parm-select").hide();
}
formula.updatecell(Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[1]);
luckysheetMoveHighlightCell("down", 0, "rangeOfSelect");
});
//公式栏 fx按钮
$("#luckysheet-wa-functionbox-fx").click(function () {
//点击函数查找弹出框
if(Store.luckysheet_select_save.length == 0){
if(isEditMode()){
alert(locale_formula.tipSelectCell);
}
else{
tooltip.info(locale_formula.tipSelectCell,"");
}
return;
}
let last = Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1];
let row_index = last["row_focus"], col_index = last["column_focus"];
let row = Store.visibledatarow[row_index],
row_pre = row_index - 1 == -1 ? 0 : Store.visibledatarow[row_index - 1];
let col = Store.visibledatacolumn[col_index],
col_pre = col_index - 1 == -1 ? 0 : Store.visibledatacolumn[col_index - 1];
luckysheetupdateCell(row, row_pre, row_index, col, col_pre, col_index, Store.flowdata);
let cell = Store.flowdata[row_index][col_index];
if(cell != null && cell.f != null){
//单元格有计算
let functionStr = formula.getfunctionParam(cell.f);
if(functionStr.fn != null){
//有函数公式
insertFormula.formulaParmDialog(functionStr.fn, functionStr.param);
}
else{
//无函数公式
insertFormula.formulaListDialog();
}
}
else{
//单元格无计算
$("#luckysheet-rich-text-editor").html('<span dir="auto" class="luckysheet-formula-text-color">=</span>');
$("#luckysheet-functionbox-cell").html($("#luckysheet-rich-text-editor").html());
insertFormula.formulaListDialog();
}
insertFormula.init();
});
//公式选区操作
$("#luckysheet-formula-functionrange").on("mousedown", ".luckysheet-copy", function (event) {
formula.rangeMove = true;
Store.luckysheet_scroll_status = true;
formula.rangeMoveObj = $(this).parent();
formula.rangeMoveIndex = $(this).parent().attr("rangeindex");
let mouse = mouseposition(event.pageX, event.pageY);
let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft();
let y = mouse[1] + $("#luckysheet-cell-main").scrollTop();
$("#luckysheet-formula-functionrange-highlight-" + formula.rangeMoveIndex).find(".luckysheet-selection-copy-hc").css("opacity", 0.13);
let type = $(this).data("type");
if (type == "top") {
y += 3;
}
else if (type == "right") {
x -= 3;
}
else if (type == "bottom") {
y -= 3;
}
else if (type == "left") {
x += 3;
}
let row_index = rowLocation(y)[2];
let col_index = colLocation(x)[2];
formula.rangeMovexy = [row_index, col_index];
$("#luckysheet-sheettable").css("cursor", "move");
event.stopPropagation();
});
$("#luckysheet-formula-functionrange").on("mousedown", ".luckysheet-highlight", function (e) {
formula.rangeResize = $(this).data("type");//开始状态resize
formula.rangeResizeIndex = $(this).parent().attr("rangeindex");
let mouse = mouseposition(e.pageX, e.pageY),
scrollLeft = $("#luckysheet-cell-main").scrollLeft(),
scrollTop = $("#luckysheet-cell-main").scrollTop();
let x = mouse[0] + scrollLeft;
let y = mouse[1] + scrollTop;
formula.rangeResizeObj = $(this).parent();
$("#luckysheet-formula-functionrange-highlight-" + formula.rangeResizeIndex).find(".luckysheet-selection-copy-hc").css("opacity", 0.13);
if (formula.rangeResize == "lt") {
x += 3;
y += 3;
}
else if (formula.rangeResize == "lb") {
x += 3;
y -= 3;
}
else if (formula.rangeResize == "rt") {
x -= 3;
y += 3;
}
else if (formula.rangeResize == "rb") {
x -= 3;
y -= 3;
}
let row_location = rowLocation(y),
row = row_location[1],
row_pre = row_location[0],
row_index = row_location[2];
let col_location = colLocation(x),
col = col_location[1],
col_pre = col_location[0],
col_index = col_location[2];
let position = formula.rangeResizeObj.position();
formula.rangeResizexy = [
col_pre,
row_pre,
formula.rangeResizeObj.width(),
formula.rangeResizeObj.height(),
position.left + scrollLeft,
position.top + scrollTop, col, row
];
formula.rangeResizeWinH = $("#luckysheet-cell-main")[0].scrollHeight;
formula.rangeResizeWinW = $("#luckysheet-cell-main")[0].scrollWidth;
Store.luckysheet_scroll_status = true;
event.stopPropagation();
});
}

6242
src/controllers/handler.js

File diff suppressed because it is too large

917
src/controllers/keyboard.js

@ -0,0 +1,917 @@
import luckysheetConfigsetting from './luckysheetConfigsetting';
import menuButton from './menuButton';
import conditionformat from './conditionformat';
import server from './server';
import luckysheetupdateCell from './updateCell';
import { keycode } from './constant';
import {
luckysheetMoveHighlightCell,
luckysheetMoveHighlightCell2,
luckysheetMoveHighlightRange,
luckysheetMoveHighlightRange2
} from './sheetMove';
import { selectHightlightShow, selectIsOverlap } from './select';
import selection from './selection';
import searchReplace from './searchReplace';
import controlHistory from './controlHistory';
import {
getByteLen,
luckysheetactiveCell,
} from '../utils/util';
import { getSheetIndex } from '../methods/get';
import { hasPartMC, isEditMode } from '../global/validate';
import formula from '../global/formula';
import cleargridelement from '../global/cleargridelement';
import tooltip from '../global/tooltip';
import locale from '../locale/locale';
import Store from '../store';
let luckysheet_shiftkeydown = false;
function formulaMoveEvent(dir, ctrlKey, shiftKey){
if ($("#luckysheet-formula-search-c").is(":visible")) {
let $up = $("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item-active").next();
if ($up.length == 0) {
$up = $("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item").first();
}
$("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item").removeClass("luckysheet-formula-search-item-active");
$up.addClass("luckysheet-formula-search-item-active");
event.preventDefault();
}
else{
if($("#luckysheet-formula-functionrange-select").is(":visible")){
if(ctrlKey && shiftKey){
luckysheetMoveHighlightRange2(dir, "rangeOfFormula");
}
else if(ctrlKey){
luckysheetMoveHighlightCell2(dir, "rangeOfFormula");
}
else if(shiftKey){
let dir_n = dir, step = 1;
if(dir == 'up'){
dir_n = 'down';
step = -1;
}
if(dir == 'left'){
dir_n = 'right';
step = -1;
}
luckysheetMoveHighlightRange(dir_n, step, "rangeOfFormula");
}
else{
let dir_n = dir, step = 1;
if(dir == 'up'){
dir_n = 'down';
step = -1;
}
if(dir == 'left'){
dir_n = 'right';
step = -1;
}
luckysheetMoveHighlightCell(dir_n, step, "rangeOfFormula");
}
}
else if(formula.israngeseleciton()){
let anchor = $(window.getSelection().anchorNode);
if(anchor.parent().next().text() == null || anchor.parent().next().text() == ""){
let vText = $("#luckysheet-input-box #luckysheet-input-box-index").text();
let range = formula.getcellrange(vText);
if(range == null){
range = formula.getcellrange($("#luckysheet-input-box-index").text());
}
let r1 = range["row"][0], r2 = range["row"][1];
let c1 = range["column"][0], c2 = range["column"][1];
let row = Store.visibledatarow[r2],
row_pre = r1 - 1 == -1 ? 0 : Store.visibledatarow[r1 - 1];
let col = Store.visibledatacolumn[c2],
col_pre = c1 - 1 == -1 ? 0 : Store.visibledatacolumn[c1 - 1];
formula.func_selectedrange = {
"left": col_pre,
"width": col - col_pre - 1,
"top": row_pre,
"height": row - row_pre - 1,
"left_move": col_pre,
"width_move": col - col_pre - 1,
"top_move": row_pre,
"height_move": row - row_pre - 1,
"row": [r1, r2],
"column": [c1, c2],
"row_focus": r1,
"column_focus": c1
};
formula.rangeSetValue({ "row": [r1, r2], "column": [c1, c2] });
formula.rangestart = true;
formula.rangedrag_column_start = false;
formula.rangedrag_row_start = false;
if(ctrlKey && shiftKey){
luckysheetMoveHighlightRange2(dir, "rangeOfFormula");
}
else if(ctrlKey){
luckysheetMoveHighlightCell2(dir, "rangeOfFormula");
}
else if(shiftKey){
let dir_n = dir, step = 1;
if(dir == 'up'){
dir_n = 'down';
step = -1;
}
if(dir == 'left'){
dir_n = 'right';
step = -1;
}
luckysheetMoveHighlightRange(dir_n, step, "rangeOfFormula");
}
else{
let dir_n = dir, step = 1;
if(dir == 'up'){
dir_n = 'down';
step = -1;
}
if(dir == 'left'){
dir_n = 'right';
step = -1;
}
luckysheetMoveHighlightCell(dir_n, step, "rangeOfFormula");
}
}
}
else if(!ctrlKey && !shiftKey){
let anchor = $(window.getSelection().anchorNode);
let anchorOffset = window.getSelection().anchorOffset;
if(dir == 'up'){
if(anchor.parent().is("span") && anchor.parent().next().length == 0 && anchorOffset > 0){
formula.updatecell(Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[1]);
luckysheetMoveHighlightCell("down", -1, "rangeOfSelect");
event.preventDefault();
}
else if(anchor.is("#luckysheet-rich-text-editor") && anchor.context.childElementCount == anchorOffset){
formula.updatecell(Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[1]);
luckysheetMoveHighlightCell("down", -1, "rangeOfSelect");
event.preventDefault();
}
else if(anchor.parent().is("#luckysheet-rich-text-editor") && anchor.context.length == anchorOffset){
formula.updatecell(Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[1]);
luckysheetMoveHighlightCell("down", -1, "rangeOfSelect");
event.preventDefault();
}
}
else if(dir == 'down'){
if(anchor.parent().is("span") && anchor.parent().next().length == 0 && anchorOffset > 0){
formula.updatecell(Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[1]);
luckysheetMoveHighlightCell("down", 1, "rangeOfSelect");
event.preventDefault();
}
else if(anchor.is("#luckysheet-rich-text-editor") && anchor.context.childElementCount == anchorOffset){
formula.updatecell(Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[1]);
luckysheetMoveHighlightCell("down", 1, "rangeOfSelect");
event.preventDefault();
}
else if(anchor.parent().is("#luckysheet-rich-text-editor") && anchor.context.length == anchorOffset){
formula.updatecell(Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[1]);
luckysheetMoveHighlightCell("down", 1, "rangeOfSelect");
event.preventDefault();
}
}
else if(dir == 'left'){
if(anchor.parent().is("span") && anchor.parent().prev().length == 0 && anchorOffset == 0){
formula.updatecell(Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[1]);
luckysheetMoveHighlightCell("right", -1, "rangeOfSelect");
event.preventDefault();
}
else if(anchor.is("#luckysheet-rich-text-editor") && anchorOffset == 1){
formula.updatecell(Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[1]);
luckysheetMoveHighlightCell("right", -1, "rangeOfSelect");
event.preventDefault();
}
else if(anchor.parent().is("#luckysheet-rich-text-editor") && anchorOffset == 0){
formula.updatecell(Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[1]);
luckysheetMoveHighlightCell("right", -1, "rangeOfSelect");
event.preventDefault();
}
}
else if(dir == 'right'){
if(anchor.parent().is("span") && anchor.parent().next().length == 0 && anchorOffset > 0){
formula.updatecell(Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[1]);
luckysheetMoveHighlightCell("right", 1, "rangeOfSelect");
event.preventDefault();
}
else if(anchor.is("#luckysheet-rich-text-editor") && anchor.context.childElementCount == anchorOffset){
formula.updatecell(Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[1]);
luckysheetMoveHighlightCell("right", 1, "rangeOfSelect");
event.preventDefault();
}
else if(anchor.parent().is("#luckysheet-rich-text-editor") && anchor.context.length == anchorOffset){
formula.updatecell(Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[1]);
luckysheetMoveHighlightCell("right", 1, "rangeOfSelect");
event.preventDefault();
}
}
}
}
}
export function keyboardInitial(){
const _locale = locale();
const locale_drag = _locale.drag;
//单元格编辑输入
$("#luckysheet-input-box").click(function () {
formula.rangeHightlightselected($("#luckysheet-rich-text-editor"));
}).add("#" + Store.container).on("keydown", function (event) {
if ($("#luckysheet-modal-dialog-mask").is(":visible") || $(event.target).hasClass("luckysheet-mousedown-cancel") || $(event.target).hasClass("formulaInputFocus")) {
return;
}
let ctrlKey = event.ctrlKey;
let altKey = event.altKey;
let shiftKey = event.shiftKey;
let kcode = event.keyCode;
if ($("#luckysheet-modal-dialog-mask").is(":visible") || $(event.target).hasClass("luckysheet-mousedown-cancel") || $(event.target).hasClass("sp-input") || (parseInt($("#luckysheet-input-box").css("top")) > 0 && $(event.target).closest(".luckysheet-input-box").length > 0 && kcode != keycode.ENTER && kcode != keycode.TAB && kcode != keycode.UP && kcode != keycode.DOWN && kcode != keycode.LEFT && kcode != keycode.RIGHT)) {
let anchor = $(window.getSelection().anchorNode);
if(anchor.parent().is("#luckysheet-helpbox-cell") || anchor.is("#luckysheet-helpbox-cell")){
if(kcode == keycode.ENTER){
let helpboxValue = $("#luckysheet-helpbox-cell").text();
if(formula.iscelldata(helpboxValue)){
let cellrange = formula.getcellrange(helpboxValue);
Store.luckysheet_select_save = [{ "row": cellrange["row"], "column": cellrange["column"], "row_focus": cellrange["row"][0], "column_focus": cellrange["column"][0] }];
selectHightlightShow();
$("#luckysheet-helpbox-cell").blur();
let scrollLeft = $("#luckysheet-cell-main").scrollLeft(),
scrollTop = $("#luckysheet-cell-main").scrollTop();
let winH = $("#luckysheet-cell-main").height(),
winW = $("#luckysheet-cell-main").width();
let row = Store.visibledatarow[cellrange["row"][1]],
row_pre = cellrange["row"][0] - 1 == -1 ? 0 : Store.visibledatarow[cellrange["row"][0] - 1];
let col = Store.visibledatacolumn[cellrange["column"][1]],
col_pre = cellrange["column"][0] - 1 == -1 ? 0 : Store.visibledatacolumn[cellrange["column"][0] - 1];
if (col - scrollLeft - winW + 20 > 0) {
$("#luckysheet-scrollbar-x").scrollLeft(col - winW + 20);
}
else if (col_pre - scrollLeft - 20 < 0) {
$("#luckysheet-scrollbar-x").scrollLeft(col_pre - 20);
}
if (row - scrollTop - winH + 20 > 0) {
$("#luckysheet-scrollbar-y").scrollTop(row - winH + 20);
}
else if (row_pre - scrollTop - 20 < 0) {
$("#luckysheet-scrollbar-y").scrollTop(row_pre - 20);
}
}
}
}
return;
}
let $inputbox = $("#luckysheet-input-box");
if (kcode == keycode.ENTER && parseInt($inputbox.css("top")) > 0) {
if ($("#luckysheet-formula-search-c").is(":visible") && formula.searchFunctionCell != null) {
formula.searchFunctionEnter($("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item-active"));
}
else {
formula.updatecell(Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[1]);
Store.luckysheet_select_save = [{
"row": [Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[0]],
"column": [Store.luckysheetCellUpdate[1], Store.luckysheetCellUpdate[1]],
"row_focus": Store.luckysheetCellUpdate[0],
"column_focus": Store.luckysheetCellUpdate[1]
}];
luckysheetMoveHighlightCell("down", 1, "rangeOfSelect");
}
//若有参数弹出框,隐藏
if($("#luckysheet-search-formula-parm").is(":visible")){
$("#luckysheet-search-formula-parm").hide();
}
//若有参数选取范围弹出框,隐藏
if($("#luckysheet-search-formula-parm-select").is(":visible")){
$("#luckysheet-search-formula-parm-select").hide();
}
event.preventDefault();
}
else if (kcode == keycode.TAB) {
if (parseInt($inputbox.css("top")) > 0) {
return;
}
luckysheetMoveHighlightCell("right", 1, "rangeOfSelect");
event.preventDefault();
}
else if(kcode == keycode.F2){
if (parseInt($inputbox.css("top")) > 0) {
return;
}
let last = Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1];
let row_index = last["row_focus"], col_index = last["column_focus"];
let row = Store.visibledatarow[row_index],
row_pre = row_index - 1 == -1 ? 0 : Store.visibledatarow[row_index - 1];
let col = Store.visibledatacolumn[col_index],
col_pre = col_index - 1 == -1 ? 0 : Store.visibledatacolumn[col_index - 1];
luckysheetupdateCell(row, row_pre, row_index, col, col_pre, col_index, Store.flowdata);
event.preventDefault();
}
else if (kcode == keycode.F4 && parseInt($inputbox.css("top")) > 0) {
formula.setfreezonFuc(event);
event.preventDefault();
}
else if (kcode == keycode.ESC && parseInt($inputbox.css("top")) > 0) {
formula.dontupdate();
luckysheetMoveHighlightCell("down", 0, "rangeOfSelect");
event.preventDefault();
}
else if (kcode == keycode.ENTER) {
if($(event.target).hasClass("formulaInputFocus") || $("#luckysheet-conditionformat-dialog").is(":visible")){
return;
}
else if (String.fromCharCode(kcode) != null && $("#luckysheet-cell-selected").is(":visible")) {
let last = Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1];
let row_index = last["row_focus"], col_index = last["column_focus"];
let row = Store.visibledatarow[row_index],
row_pre = row_index - 1 == -1 ? 0 : Store.visibledatarow[row_index - 1];
let col = Store.visibledatacolumn[col_index],
col_pre = col_index - 1 == -1 ? 0 : Store.visibledatacolumn[col_index - 1];
let margeset = menuButton.mergeborer(Store.flowdata, row_index, col_index);
if(!!margeset){
row = margeset.row[1];
row_pre = margeset.row[0];
row_index = margeset.row[2];
col = margeset.column[1];
col_pre = margeset.column[0];
col_index = margeset.column[2];
}
luckysheetupdateCell(row, row_pre, row_index, col, col_pre, col_index, Store.flowdata);
event.preventDefault();
}
}
else {
if (ctrlKey || event.metaKey) {
if (shiftKey) {
if (!luckysheet_shiftkeydown) {
Store.luckysheet_shiftpositon = $.extend(true, {}, Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1]);
Store.luckysheet_shiftkeydown = true;
}
//Ctrl + shift + 方向键 调整选区
if (kcode == keycode.UP) {
if (parseInt($inputbox.css("top")) > 0 || $("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")) {
return;
}
luckysheetMoveHighlightRange2("up", "rangeOfSelect");
}
else if (kcode == keycode.DOWN) {
if (parseInt($inputbox.css("top")) > 0 || $("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")) {
return;
}
luckysheetMoveHighlightRange2("down", "rangeOfSelect");
}
else if (kcode == keycode.LEFT) {
if (parseInt($inputbox.css("top")) > 0 || $("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")) {
return;
}
luckysheetMoveHighlightRange2("left", "rangeOfSelect");
}
else if (kcode == keycode.RIGHT) {
if (parseInt($inputbox.css("top")) > 0 || $("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")) {
return;
}
luckysheetMoveHighlightRange2("right", "rangeOfSelect");
}
}
else if (kcode == 66) {//Ctrl + B 加粗
$("#luckysheet-icon-bold").click();
}
else if (kcode == 67) {//Ctrl + C 复制
//复制时存在格式刷状态,取消格式刷
if(menuButton.luckysheetPaintModelOn){
menuButton.cancelPaintModel();
}
if(Store.luckysheet_select_save.length == 0){
return;
}
//复制范围内包含部分合并单元格,提示
if(Store.config["merge"] != null){
let has_PartMC = false;
for(let s = 0; s < Store.luckysheet_select_save.length; s++){
let r1 = Store.luckysheet_select_save[s].row[0],
r2 = Store.luckysheet_select_save[s].row[1];
let c1 = Store.luckysheet_select_save[s].column[0],
c2 = Store.luckysheet_select_save[s].column[1];
has_PartMC = hasPartMC(Store.config, r1, r2, c1, c2);
if(has_PartMC){
break;
}
}
if(has_PartMC){
if(isEditMode()){
alert(locale_drag.noMerge);
}
else{
tooltip.info(locale_drag.noMerge, "");
}
return;
}
}
//多重选区 有条件格式时 提示
let cdformat = Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)].luckysheet_conditionformat_save;
if(Store.luckysheet_select_save.length > 1 && cdformat != null && cdformat.length > 0){
let hasCF = false;
let cf_compute = conditionformat.getComputeMap();
label:
for(let s = 0; s < Store.luckysheet_select_save.length; s++){
if(hasCF){
break;
}
let r1 = Store.luckysheet_select_save[s].row[0],
r2 = Store.luckysheet_select_save[s].row[1];
let c1 = Store.luckysheet_select_save[s].column[0],
c2 = Store.luckysheet_select_save[s].column[1];
for(let r = r1; r <= r2; r++){
for(let c = c1; c <= c2; c++){
if(conditionformat.checksCF(r, c, cf_compute) != null){
hasCF = true;
continue label;
}
}
}
}
if(hasCF){
if(isEditMode()){
alert(locale_drag.noMulti);
}
else{
tooltip.info(locale_drag.noMulti, "");
}
return;
}
}
//多重选区 行不一样且列不一样时 提示
if(Store.luckysheet_select_save.length > 1){
let isSameRow = true,
str_r = luckysheet_select_save[0].row[0],
end_r = luckysheet_select_save[0].row[1];
let isSameCol = true,
str_c = luckysheet_select_save[0].column[0],
end_c = luckysheet_select_save[0].column[1];
for(let s = 1; s < luckysheet_select_save.length; s++){
if(luckysheet_select_save[s].row[0] != str_r || luckysheet_select_save[s].row[1] != end_r){
isSameRow = false;
}
if(luckysheet_select_save[s].column[0] != str_c || luckysheet_select_save[s].column[1] != end_c){
isSameCol = false;
}
}
if((!isSameRow && !isSameCol) || selectIsOverlap()){
if(isEditMode()){
alert(locale_drag.noMulti);
}
else{
tooltip.info(locale_drag.noMulti, "");
}
return;
}
}
selection.copy(event);
Store.luckysheet_paste_iscut = false;
luckysheetactiveCell();
event.stopPropagation();
return;
}
else if (kcode == 70) {//Ctrl + F 查找
searchReplace.createDialog(0);
searchReplace.init();
$("#luckysheet-search-replace #searchInput input").focus();
}
else if (kcode == 72) {//Ctrl + H 替换
searchReplace.createDialog(1);
searchReplace.init();
$("#luckysheet-search-replace #searchInput input").focus();
}
else if (kcode == 73) {//Ctrl + I 斜体
$("#luckysheet-icon-italic").click();
}
else if (kcode == 86) {//Ctrl + V 粘贴
if(isEditMode()){//此模式下禁用粘贴
return;
}
if($(event.target).hasClass("formulaInputFocus")){
return;
}
if(Store.luckysheet_select_save.length > 1){
if(isEditMode()){
alert(locale_drag.noPaste);
}
else{
tooltip.info(locale_drag.noPaste, "");
}
return;
}
selection.isPasteAction = true;
luckysheetactiveCell();
event.stopPropagation();
return;
}
else if (kcode == 88) {//Ctrl + X 剪切
//复制时存在格式刷状态,取消格式刷
if(menuButton.luckysheetPaintModelOn){
menuButton.cancelPaintModel();
}
if(Store.luckysheet_select_save.length == 0){
return;
}
//复制范围内包含部分合并单元格,提示
if(Store.config["merge"] != null){
let has_PartMC = false;
for(let s = 0; s < Store.luckysheet_select_save.length; s++){
let r1 = Store.luckysheet_select_save[s].row[0],
r2 = Store.luckysheet_select_save[s].row[1];
let c1 = Store.luckysheet_select_save[s].column[0],
c2 = Store.luckysheet_select_save[s].column[1];
has_PartMC = hasPartMC(Store.config, r1, r2, c1, c2);
if(has_PartMC){
break;
}
}
if(has_PartMC){
if(luckysheetConfigsetting.editMode){
alert(_locale_drag.noMerge);
}
else{
tooltip.info(_locale_drag.noMerge, "");
}
return;
}
}
//多重选区时 提示
if(Store.luckysheet_select_save.length > 1){
if(isEditMode()){
alert(locale_drag.noMulti);
}
else{
tooltip.info(locale_drag.noMulti, "");
}
return;
}
selection.copy(event);
Store.luckysheet_paste_iscut = true;
luckysheetactiveCell();
event.stopPropagation();
return;
}
else if (kcode == 90) {//Ctrl + Z 撤销
controlHistory.redo(event);
luckysheetactiveCell();
event.stopPropagation();
return;
}
else if (kcode == 89) {//Ctrl + Y 重做
controlHistory.undo(event);
luckysheetactiveCell();
event.stopPropagation();
return;
}
else if (kcode == keycode.UP) {//Ctrl + up 调整单元格
if (parseInt($inputbox.css("top")) > 0 || $("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")) {
return;
}
luckysheetMoveHighlightCell2("up", "rangeOfSelect");
}
else if (kcode == keycode.DOWN) {//Ctrl + down 调整单元格
if (parseInt($inputbox.css("top")) > 0 || $("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")) {
return;
}
luckysheetMoveHighlightCell2("down", "rangeOfSelect");
}
else if (kcode == keycode.LEFT) {//Ctrl + top 调整单元格
if (parseInt($inputbox.css("top")) > 0 || $("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")) {
return;
}
luckysheetMoveHighlightCell2("left", "rangeOfSelect");
}
else if (kcode == keycode.RIGHT) {//Ctrl + right 调整单元格
if (parseInt($inputbox.css("top")) > 0 || $("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")) {
return;
}
luckysheetMoveHighlightCell2("right", "rangeOfSelect");
}
else if (String.fromCharCode(kcode).toLocaleUpperCase() == "A") {//Ctrl + A 全选
$("#luckysheet-left-top").trigger("mousedown");
$(document).trigger("mouseup");
}
event.preventDefault();
return;
}
else if (shiftKey && (kcode == keycode.UP || kcode == keycode.DOWN || kcode == keycode.LEFT || kcode == keycode.RIGHT || (altKey && (kcode == 53 || kcode == 101)))) {
if (parseInt($inputbox.css("top")) > 0 || $(event.target).hasClass("formulaInputFocus")) {
return;
}
if (!luckysheet_shiftkeydown) {
Store.luckysheet_shiftpositon = $.extend(true, {}, Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1]);
Store.luckysheet_shiftkeydown = true;
}
//shift + 方向键 调整选区
if (kcode == keycode.UP) {
if($("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")){
return;
}
luckysheetMoveHighlightRange("down", -1, "rangeOfSelect");
}
else if (kcode == keycode.DOWN) {
if($("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")){
return;
}
luckysheetMoveHighlightRange("down", 1, "rangeOfSelect");
}
else if (kcode == keycode.LEFT) {
if($("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")){
return;
}
luckysheetMoveHighlightRange("right", -1, "rangeOfSelect");
}
else if (kcode == keycode.RIGHT) {
if($("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")){
return;
}
luckysheetMoveHighlightRange("right", 1, "rangeOfSelect");
}
else if (altKey && (kcode == 53 || kcode == 101)) {
//Alt + Shift + 5(删除线)
$("#luckysheet-icon-strikethrough").click();
}
event.preventDefault();
}
else if (kcode == keycode.ESC) {
if(menuButton.luckysheetPaintModelOn){
menuButton.cancelPaintModel();
}
else{
cleargridelement(event);
event.preventDefault();
}
selectHightlightShow();
}
else if (kcode == keycode.DELETE) {
$("#luckysheet-delete-text").click();
event.preventDefault();
}
else if (kcode == keycode.UP) {
if (parseInt($inputbox.css("top")) > 0 || $(event.target).hasClass("formulaInputFocus") || $("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")) {
return;
}
luckysheetMoveHighlightCell("down", -1, "rangeOfSelect");
event.preventDefault();
}
else if (kcode == keycode.DOWN) {
if (parseInt($inputbox.css("top")) > 0 || $(event.target).hasClass("formulaInputFocus") || $("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")) {
return;
}
luckysheetMoveHighlightCell("down", 1, "rangeOfSelect");
event.preventDefault();
}
else if (kcode == keycode.LEFT) {
if (parseInt($inputbox.css("top")) > 0 || $(event.target).hasClass("formulaInputFocus") || $("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")) {
return;
}
luckysheetMoveHighlightCell("right", -1, "rangeOfSelect");
event.preventDefault();
}
else if (kcode == keycode.RIGHT) {
if (parseInt($inputbox.css("top")) > 0 || $(event.target).hasClass("formulaInputFocus") || $("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")) {
return;
}
luckysheetMoveHighlightCell("right", 1, "rangeOfSelect");
event.preventDefault();
}
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 || kcode == 0 || (event.ctrlKey && kcode == 86)) {
if (String.fromCharCode(kcode) != null && $("#luckysheet-cell-selected").is(":visible") && (kcode != keycode.CAPSLOCK && kcode != keycode.WIN && kcode != 18)) {
let last = Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1];
let row_index = last["row_focus"], col_index = last["column_focus"];
let row = Store.visibledatarow[row_index],
row_pre = row_index - 1 == -1 ? 0 : Store.visibledatarow[row_index - 1];
let col = Store.visibledatacolumn[col_index],
col_pre = col_index - 1 == -1 ? 0 : Store.visibledatacolumn[col_index - 1];
let margeset = menuButton.mergeborer(Store.flowdata, row_index, col_index);
if(!!margeset){
row = margeset.row[1];
row_pre = margeset.row[0];
row_index = margeset.row[2];
col = margeset.column[1];
col_pre = margeset.column[0];
col_index = margeset.column[2];
}
luckysheetupdateCell(row, row_pre, row_index, col, col_pre, col_index, Store.flowdata, true);
if(kcode == 8){
$("#luckysheet-rich-text-editor").html("<br/>");
}
formula.functionInputHanddler($("#luckysheet-functionbox-cell"), $("#luckysheet-rich-text-editor"), kcode);
}
}
}
luckysheetactiveCell();
event.stopPropagation();
});
//单元格编辑 keydown (公式 上下左右键移动)
$("#" + Store.container).add("#luckysheet-input-box").keydown(function (event) {
if ($("#luckysheet-modal-dialog-mask").is(":visible") || $(event.target).hasClass("luckysheet-mousedown-cancel") || $(event.target).hasClass("formulaInputFocus")) {
return;
}
let ctrlKey = event.ctrlKey;
let altKey = event.altKey;
let shiftKey = event.shiftKey;
let kcode = event.keyCode;
let $inputbox = $("#luckysheet-input-box");
if (kcode == keycode.ESC && parseInt($("#luckysheet-input-box").css("top")) > 0) {
formula.dontupdate();
luckysheetMoveHighlightCell("down", 0, "rangeOfSelect");
event.preventDefault();
}
else if (kcode == keycode.ENTER && parseInt($inputbox.css("top")) > 0) {
if ($("#luckysheet-formula-search-c").is(":visible") && formula.searchFunctionCell != null) {
formula.searchFunctionEnter($("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item-active"));
event.preventDefault();
}
}
else if(kcode == keycode.TAB && parseInt($inputbox.css("top")) > 0){
if ($("#luckysheet-formula-search-c").is(":visible") && formula.searchFunctionCell != null) {
formula.searchFunctionEnter($("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item-active"));
}
else{
formula.updatecell(Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[1]);
luckysheetMoveHighlightCell("right", 1, "rangeOfSelect");
}
event.preventDefault();
}
else if (kcode == keycode.F4 && parseInt($inputbox.css("top")) > 0) {
formula.setfreezonFuc(event);
event.preventDefault();
}
else if (kcode == keycode.UP && parseInt($inputbox.css("top")) > 0) {
formulaMoveEvent("up", ctrlKey, shiftKey);
}
else if (kcode == keycode.DOWN && parseInt($inputbox.css("top")) > 0) {
formulaMoveEvent("down", ctrlKey, shiftKey);
}
else if (kcode == keycode.LEFT && parseInt($inputbox.css("top")) > 0) {
formulaMoveEvent("left", ctrlKey, shiftKey);
}
else if (kcode == keycode.RIGHT && parseInt($inputbox.css("top")) > 0) {
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)) {
formula.functionInputHanddler($("#luckysheet-functionbox-cell"), $("#luckysheet-rich-text-editor"), kcode);
}
}).keyup(function (e) {
let kcode = e.keyCode;
if (!e.shiftKey && kcode == 16) {
Store.luckysheet_shiftkeydown = false;
Store.luckysheet_shiftpositon = null;
}
//输入框中文输入后 shift 和 空格 处理
if(parseInt($("#luckysheet-input-box").css("top")) > 0 && (kcode == 13 || kcode == 16 || kcode == 32)){
formula.functionInputHanddler($("#luckysheet-functionbox-cell"), $("#luckysheet-rich-text-editor"), kcode);
}
e.preventDefault();
});
//top workBook rename
$("#luckysheet_info_detail_input").val(server.title).css("width", getByteLen(server.title) * 10).keydown(function(){
let ctrlKey = event.ctrlKey;
let altKey = event.altKey;
let shiftKey = event.shiftKey;
let kcode = event.keyCode;
let $t = $(this);
if(kcode == keycode.ENTER){
$t.blur().change();
}
}).bind('input propertychange', function() {
let $t = $(this);
let inputlen = getByteLen($t.val())*10;
let updatelen = $("#luckysheet_info_detail_update").outerWidth();
let savelen = $("#luckysheet_info_detail_save").outerWidth();
let userlen = $("#luckysheet_info_detail_user").parent().outerWidth()+60;
let containerlen = $("#" + Store.container).outerWidth();
let otherlen = 100;
let minuslen = containerlen- savelen - updatelen - userlen - otherlen;
if(inputlen > minuslen){
$("#luckysheet_info_detail_input").css("width", minuslen);
}
else{
$("#luckysheet_info_detail_input").css("width", inputlen);
}
}).change(function(){
server.saveParam("na", null, $(this).val());
});
}

1241
src/controllers/matrixOperation.js

File diff suppressed because it is too large

273
src/controllers/orderBy.js

@ -0,0 +1,273 @@
import { modelHTML } from './constant';
import { selectHightlightShow } from './select';
import {
replaceHtml,
chatatABC,
} from '../utils/util';
import { rowlenByRange } from '../global/getRowlen';
import { isEditMode } from '../global/validate';
import cleargridelement from '../global/cleargridelement';
import {
jfrefreshgrid,
} from '../global/refresh';
import { getcellvalue } from '../global/getdata';
import { orderbydata, sortColumnSeletion } from '../global/sort';
import tooltip from '../global/tooltip';
import editor from '../global/editor';
import { isdatatype } from '../global/datecontroll';
import Store from '../store';
import locale from '../locale/locale';
export function orderByInitial(){
const _locale = locale();
//菜单栏 排序按钮
$("#luckysheetorderbyasc, #luckysheetorderbyasc_t").mousedown(function (event) {
cleargridelement(event);
sortColumnSeletion(Store.orderbyindex, true);
selectHightlightShow();
});
$("#luckysheetorderbydesc, #luckysheetorderbydesc_t").click(function (event) {
cleargridelement(event);
sortColumnSeletion(Store.orderbyindex, false);
selectHightlightShow();
});
//排序事件
let luckysheet_sort_initial = true;
$("#luckysheetorderby").click(function () {
$("body .luckysheet-cols-menu").hide();
const locale_sort = _locale.sort;
if(Store.luckysheet_select_save.length > 1){
if(isEditMode()){
alert(locale_sort.noRangeError);
}
else{
tooltip.info(locale_sort.noRangeError, "");
}
return;
}
let last = Store.luckysheet_select_save[0];
let r1 = last["row"][0], r2 = last["row"][1];
let c1 = last["column"][0], c2 = last["column"][1];
if (luckysheet_sort_initial) {
luckysheet_sort_initial = false;
let content = `<div style="overflow: hidden;" class="luckysheet-sort-modal"><div><label><input type="checkbox" id="luckysheet-sort-haveheader"/><span>${locale_sort.hasTitle}</span></label></div><div style="overflow-y:auto;" id="luckysheet-sort-dialog-tablec"><table data-itemcount="0" cellspacing="0"> <tr><td>${locale_sort.hasTitle} <select name="sort_0"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> </select> </td> <td> <div><label><input value="asc" type="radio" checked="checked" name="sort_0"><span>${locale_sort.asc}A-Z</span></label></div> <div><label><input value="desc" type="radio" name="sort_0"><span>${locale_sort.desc}Z-A</span></label></div></td></tr></table></div><div style="background: #e5e5e5;border-top: 1px solid #f5f5f5; height: 1px; width: 100%;margin:2px 0px;margin-bottom:10px;"></div> <div> <span style="font-weight: bold; text-decoration: underline;text-align:center;color: blue;cursor: pointer;" class="luckysheet-sort-dialog-additem">+ ${locale_sort.addOthers}</span> </div> </div>`;
$("body").append(replaceHtml(modelHTML, { "id": "luckysheet-sort-dialog", "addclass": "", "title": _locale.sort.sortTitle, "content": content, "botton": `<button id="luckysheet-sort-modal-confirm" class="btn btn-primary">${locale_sort.confirm}</button><button class="btn btn-default luckysheet-model-close-btn">${locale_sort.close}</button>`}));
$("#luckysheet-sort-dialog .luckysheet-sort-dialog-additem").click(function () {
let last = Store.luckysheet_select_save[0];
let r1 = last["row"][0], r2 = last["row"][1];
let c1 = last["column"][0], c2 = last["column"][1];
let option = "", i = $("#luckysheet-sort-dialog table").data("itemcount") + 1;
let t = $("#luckysheet-sort-haveheader").is(':checked');
for (let c = c1; c <= c2; c++) {
if (t) {
let v = getcellvalue(r1, c, Store.flowdata, "m");
if(v == null){
v = locale_sort.columnOperation + (c - c1 + 1);
}
option += '<option value="' + c + '">' + v + '</option>';
}
else {
option += '<option value="' + c + '">' + chatatABC(c) + '</option>';
}
}
$("#luckysheet-sort-dialog table").append(`
<tr class="luckysheet-sort-dialog-tr">
<td><span class="luckysheet-sort-item-close" onclick="$(this).parent().parent().remove();"><i class="fa fa-times"
aria-hidden="true"></i></span>${locale_sort.secondaryTitle} <select
name="sort_${i}">${option}</select> </td>
<td>
<div><label><input value="asc" type="radio" checked="checked"
name="sort_${i}"><span>${locale_sort.asc}A-Z</span></label></div>
<div><label><input value="desc" type="radio" name="sort_${i}"><span>${locale_sort.desc}Z-A</span></label>
</div>
</td>
</tr>
`);
$("#luckysheet-sort-dialog table").data("itemcount", i);
});
$("#luckysheet-sort-haveheader").change(function () {
let last = Store.luckysheet_select_save[0];
let r1 = last["row"][0], r2 = last["row"][1];
let c1 = last["column"][0], c2 = last["column"][1];
let t = $(this).is(':checked');
let option = "";
for (let c = c1; c <= c2; c++) {
if (t) {
let v = getcellvalue(r1, c, Store.flowdata, "m");
if(v == null){
v = locale_sort.columnOperation + (c - c1 + 1);
}
option += '<option value="' + c + '">' + v + '</option>';
}
else {
option += '<option value="' + c + '">' + chatatABC(c) + '</option>';
}
}
$("#luckysheet-sort-dialog tr select").each(function () {
$(this).html(option);
});
});
//Custom sort
$("#luckysheet-sort-modal-confirm").click(function () {
if(Store.luckysheet_select_save.length > 1){
if(isEditMode()){
alert(locale_sort.noRangeError);
}
else{
tooltip.info(locale_sort.noRangeError, "");
}
return;
}
let d = editor.deepCopyFlowData(Store.flowdata);
let last = Store.luckysheet_select_save[0];
let r1 = last["row"][0], r2 = last["row"][1];
let c1 = last["column"][0], c2 = last["column"][1];
//Data has header row
let t = $("#luckysheet-sort-haveheader").is(':checked');
let str;
if(t){
str = r1 + 1;
}
else{
str = r1;
}
let hasMc = false; //Whether the sort selection has merged cells
let data = [];
for(let r = str; r <= r2; r++){
let data_row = [];
for(let c = c1; c <= c2; c++){
if(d[r][c] != null && d[r][c].mc != null){
hasMc = true;
break;
}
data_row.push(d[r][c]);
}
data.push(data_row);
}
if(hasMc){
if(isEditMode()){
alert(locale_sort.mergeError);
}
else{
tooltip.info(locale_sort.mergeError, "");
}
return;
}
$($("#luckysheet-sort-dialog table tr").toArray().reverse()).each(function () {
let i = $(this).find("select").val(),
asc = $(this).find('input:radio:checked').val();
i -= c1;
if (asc == "asc") {
asc = true;
}
else {
asc = false;
}
data = orderbydata([].concat(data), i, asc);
});
for(let r = str; r <= r2; r++){
for(let c = c1; c <= c2; c++){
d[r][c] = data[r - str][c - c1];
}
}
if(Store.config["rowlen"] != null){
let cfg = $.extend(true, {}, Store.config);
cfg = rowlenByRange(d, str, r2, cfg);
jfrefreshgrid(d, [{ "row": [str, r2], "column": [c1, c2] }], cfg, null, true);
}
else{
jfrefreshgrid(d, [{ "row": [str, r2], "column": [c1, c2] }]);
}
$("#luckysheet-sort-dialog").hide();
$("#luckysheet-modal-dialog-mask").hide();
});
}
let option = "";
for (let c = c1; c <= c2; c++) {
option += '<option value="' + c + '">' + chatatABC(c) + '</option>';
}
$("#luckysheet-sort-dialog select").html(option);
$("#luckysheet-sort-dialog .luckysheet-sort-dialog-tr").remove();
$("#luckysheet-sort-haveheader").prop("checked", false);
$("#luckysheet-sort-dialog input:radio:first").prop("checked", "checked");
$("#luckysheet-sort-dialog .luckysheet-modal-dialog-title-text").html(locale_sort.sortRangeTitle+"<span>" + chatatABC(c1) + (r1 + 1) + "</span>"+ locale_sort.sortRangeTitleTo +"<span>" + chatatABC(c2) + (r2 + 1) + "</span>");
let $t = $("#luckysheet-sort-dialog"), myh = $t.outerHeight(), myw = $t.outerWidth();
let winw = $(window).width(), winh = $(window).height();
let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
$("#luckysheet-sort-dialog-tablec").css("max-height", (winh - myh) / 2);
$("#luckysheet-sort-dialog").css({ "left": (winw + scrollLeft - myw) / 2, "top": (winh + scrollTop - myh) / 2 }).show();
$("#luckysheet-modal-dialog-mask").show();
if (r1 < r2) {
setTimeout(function () {
let flowrowdata1 = Store.flowdata[r1],
flowrowdata2 = Store.flowdata[r1 + 1],
hastitle = false;
for (let i = c1; i <= c2; i++) {
let isdatatype_r1 = isdatatype(flowrowdata1[i]),
isdatatype_r2 = isdatatype(flowrowdata2[i]);
if (isdatatype_r1 != isdatatype_r2) {
hastitle = true;
}
}
if (hastitle) {
$("#luckysheet-sort-haveheader").prop("checked", true).change();
}
}, 10);
}
});
}

2
src/controllers/pivotTable.js

@ -873,7 +873,7 @@ const pivotTable = {
if (_this.initial) {
_this.initial = false;
$("body").append(luckysheetPivotTableHTML);
$("body").append(luckysheetPivotTableHTML());
$("#luckysheet-modal-dialog-slider-close").click(function () {
$("#luckysheet-modal-dialog-slider-pivot").hide();
luckysheetsizeauto();

1620
src/controllers/rowColumnOperation.js

File diff suppressed because it is too large

454
src/controllers/sheetBar.js

@ -0,0 +1,454 @@
import sheetmanage from './sheetmanage';
import server from './server';
import { sheetselectlistitemHTML, sheetselectlistHTML, keycode } from './constant';
import {
replaceHtml,
mouseclickposition,
} from '../utils/util';
import { getSheetIndex } from '../methods/get';
import { isEditMode } from '../global/validate';
import formula from '../global/formula';
import cleargridelement from '../global/cleargridelement';
import tooltip from '../global/tooltip';
import locale from '../locale/locale';
import Store from '../store';
//表格底部名称栏区域 相关事件(增、删、改、隐藏显示、颜色等等)
let isInitialSheetConfig = false, luckysheetcurrentSheetitem = null, jfdbclicklagTimeout = null;
function showsheetconfigmenu() {
if (!isInitialSheetConfig) {
isInitialSheetConfig = true;
const _locale = locale();
let locale_toolbar = _locale.toolbar;
$("#luckysheetsheetconfigcolorur").spectrum({
showPalette: true,
preferredFormat: "hex",
clickoutFiresChange: false,
showInitial: true,
showInput: true,
flat: true,
hideAfterPaletteSelect: false,
showSelectionPalette: true,
maxPaletteSize: 10,
cancelText: _locale.sheetconfig.cancelText,
chooseText: _locale.sheetconfig.chooseText,
togglePaletteMoreText: locale_toolbar.toolMore,
togglePaletteLessText: locale_toolbar.toolLess,
clearText: locale_toolbar.clearText,
noColorSelectedText: locale_toolbar.noColorSelectedText,
palette: [["rgb(0, 0, 0)", "rgb(67, 67, 67)", "rgb(102, 102, 102)", "rgb(204, 204, 204)", "rgb(217, 217, 217)", "rgb(255, 255, 255)"], ["rgb(152, 0, 0)", "rgb(255, 0, 0)", "rgb(255, 153, 0)", "rgb(255, 255, 0)", "rgb(0, 255, 0)", "rgb(0, 255, 255)", "rgb(74, 134, 232)", "rgb(0, 0, 255)", "rgb(153, 0, 255)", "rgb(255, 0, 255)"], ["rgb(230, 184, 175)", "rgb(244, 204, 204)", "rgb(252, 229, 205)", "rgb(255, 242, 204)", "rgb(217, 234, 211)", "rgb(208, 224, 227)", "rgb(201, 218, 248)", "rgb(207, 226, 243)", "rgb(217, 210, 233)", "rgb(234, 209, 220)"], ["rgb(221, 126, 107)", "rgb(234, 153, 153)", "rgb(249, 203, 156)", "rgb(255, 229, 153)", "rgb(182, 215, 168)", "rgb(162, 196, 201)", "rgb(164, 194, 244)", "rgb(159, 197, 232)", "rgb(180, 167, 214)", "rgb(213, 166, 189)"], ["rgb(204, 65, 37)", "rgb(224, 102, 102)", "rgb(246, 178, 107)", "rgb(255, 217, 102)", "rgb(147, 196, 125)", "rgb(118, 165, 175)", "rgb(109, 158, 235)", "rgb(111, 168, 220)", "rgb(142, 124, 195)", "rgb(194, 123, 160)"], ["rgb(166, 28, 0)", "rgb(204, 0, 0)", "rgb(230, 145, 56)", "rgb(241, 194, 50)", "rgb(106, 168, 79)", "rgb(69, 129, 142)", "rgb(60, 120, 216)", "rgb(61, 133, 198)", "rgb(103, 78, 167)", "rgb(166, 77, 121)"], ["rgb(91, 15, 0)", "rgb(102, 0, 0)", "rgb(120, 63, 4)", "rgb(127, 96, 0)", "rgb(39, 78, 19)", "rgb(12, 52, 61)", "rgb(28, 69, 135)", "rgb(7, 55, 99)", "rgb(32, 18, 77)", "rgb(76, 17, 48)"], ["#c1232b", "#27727b", "#fcce10", "#e87c25", "#b5c334", "#fe8463", "#9bca63", "#fad860", "#f3a43b", "#60c0dd", "#d7504b", "#c6e579", "#f4e001", "#f0805a", "#26c0c0", "#c12e34", "#e6b600", "#0098d9", "#2b821d", "#005eaa", "#339ca8", "#cda819", "#32a487", "#3fb1e3", "#6be6c1", "#626c91", "#a0a7e6", "#c4ebad", "#96dee8"]],
change: function (color) {
let $input = $(this);
if (color != null) {
color = color.toHexString();
}
else {
color = "rgb(0, 0, 0)";
}
let oldcolor = null;
if(luckysheetcurrentSheetitem.find(".luckysheet-sheets-item-color").length>0){
oldcolor = luckysheetcurrentSheetitem.find(".luckysheet-sheets-item-color").css("background-color");
}
luckysheetcurrentSheetitem.find(".luckysheet-sheets-item-color").remove();
luckysheetcurrentSheetitem.append('<div class="luckysheet-sheets-item-color" style=" position: absolute; width: 100%; height: 3px; bottom: 0px; left: 0px; background-color: ' + color + ';"></div>');
let index = getSheetIndex(Store.currentSheetIndex);
Store.luckysheetfile[index].color = color;
server.saveParam("all", Store.currentSheetIndex, color, { "k": "color" });
if (Store.clearjfundo) {
let redo = {};
redo["type"] = "sheetColor";
redo["sheetIndex"] = Store.currentSheetIndex;
redo["oldcolor"] = oldcolor;
redo["color"] = color;
Store.jfundo = [];
Store.jfredo.push(redo);
}
}
});
$("#luckysheetsheetconfigcolorreset").click(function () {
let oldcolor = null;
if(luckysheetcurrentSheetitem.find(".luckysheet-sheets-item-color").length>0){
oldcolor = luckysheetcurrentSheetitem.find(".luckysheet-sheets-item-color").css("background-color");
}
luckysheetcurrentSheetitem.find(".luckysheet-sheets-item-color").remove();
let index = getSheetIndex(Store.currentSheetIndex);
Store.luckysheetfile[index].color = null;
server.saveParam("all", Store.currentSheetIndex, null, { "k": "color" } );
if (Store.clearjfundo) {
let redo = {};
redo["type"] = "sheetColor";
redo["sheetIndex"] = Store.currentSheetIndex;
redo["oldcolor"] = oldcolor;
redo["color"] = null;
Store.jfundo = [];
Store.jfredo.push(redo);
}
});
}
let index = getSheetIndex(Store.currentSheetIndex);
if (Store.luckysheetfile[index].color != null && Store.luckysheetfile[index].color.length > 0) {
$("#luckysheetsheetconfigcolorur").spectrum("set", Store.luckysheetfile[index].color);
}
$("#luckysheetsheetconfigcolorur").parent().find("span, div, button, input, a").addClass("luckysheet-mousedown-cancel");
setTimeout(function(){
mouseclickposition($("#luckysheet-rightclick-sheet-menu"), luckysheetcurrentSheetitem.offset().left + luckysheetcurrentSheetitem.width(), luckysheetcurrentSheetitem.offset().top - 18, "leftbottom");
},1);
}
let luckysheetsheetrightclick = function ($t, $cur, e) {
clearTimeout(jfdbclicklagTimeout);
if ($cur.hasClass("luckysheet-sheets-item-name") && $cur.attr("contenteditable") == "true") {
return;
}
if (formula.rangestart || formula.rangedrag_column_start || formula.rangedrag_row_start || formula.israngeseleciton()) {
setTimeout(function () {
formula.setCaretPosition(formula.rangeSetValueTo.get(0), 0, formula.rangeSetValueTo.text().length);
formula.createRangeHightlight();
$("#luckysheet-input-box-index").find(".luckysheet-input-box-index-sheettxt").remove().end().prepend("<span class='luckysheet-input-box-index-sheettxt'>" + sheetmanage.getSheetName(formula.rangetosheet) + "!</span>").show();
$("#luckysheet-input-box-index").css({"left": $("#luckysheet-input-box").css("left"), "top": (parseInt($("#luckysheet-input-box").css("top")) - 20) + "px", "z-index": $("#luckysheet-input-box").css("z-index")});
}, 1);
}
else {
$("#luckysheet-input-box").removeAttr("style");
$("#luckysheet-formula-functionrange .luckysheet-formula-functionrange-highlight").remove();
}
$("#luckysheet-sheet-area div.luckysheet-sheets-item").removeClass("luckysheet-sheets-item-active");
$t.addClass("luckysheet-sheets-item-active");
cleargridelement(e);
sheetmanage.changeSheet($t.data("index"));
$("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide();
if ($cur.hasClass("luckysheet-sheets-item-menu") || $cur.hasClass("fa-sort-desc") || e.which == "3") {
luckysheetcurrentSheetitem = $cur.closest(".luckysheet-sheets-item");
showsheetconfigmenu();
}
}
export function initialSheetBar(){
const _locale = locale();
const locale_sheetconfig = _locale.sheetconfig;
$("#luckysheet-sheet-area").on("mousedown", "div.luckysheet-sheets-item", function (e) {
if(isEditMode()){
// alert("非编辑模式下不允许该操作!");
return;
}
let $t = $(this), $cur = $(e.target), $item = $cur.closest(".luckysheet-sheets-item");
if (e.which == "3") {
luckysheetsheetrightclick($t, $cur, e);
luckysheetcurrentSheetitem = $item;
showsheetconfigmenu();
return;
}
if ($item.hasClass("luckysheet-sheets-item-active") && $item.find(".luckysheet-sheets-item-name").attr("contenteditable") == "false") {
jfdbclicklagTimeout = setTimeout(function () {
Store.luckysheet_sheet_move_status = true;
Store.luckysheet_sheet_move_data = {};
Store.luckysheet_sheet_move_data.widthlist = [];
$("#luckysheet-sheet-area div.luckysheet-sheets-item:visible").each(function (i) {
if (i == 0) {
Store.luckysheet_sheet_move_data.widthlist.push(parseInt($(this).outerWidth()));
}
else {
Store.luckysheet_sheet_move_data.widthlist.push(parseInt($(this).outerWidth()) + Store.luckysheet_sheet_move_data.widthlist[i - 1]);
}
});
Store.luckysheet_sheet_move_data.curindex = $("#luckysheet-sheet-area div.luckysheet-sheets-item").index($item);
let x = e.pageX;
Store.luckysheet_sheet_move_data.curleft = x - $item.offset().left;
Store.luckysheet_sheet_move_data.pageX = x;
Store.luckysheet_sheet_move_data.activeobject = $item;
Store.luckysheet_sheet_move_data.cursorobject = $cur;
let $itemclone = $item.clone().css("visibility", "hidden").attr("id", "luckysheet-sheets-item-clone");
$item.after($itemclone);
$item.css({ "position": "absolute", "opacity": 0.8, "cursor": "move", "transition": "initial", "z-index": 10 });
}, 200);
}
}).on("click", "div.luckysheet-sheets-item", function (e) {
if(isEditMode()){
// alert("非编辑模式下不允许该操作!");
return;
}
let $t = $(this), $cur = $(e.target);
luckysheetsheetrightclick($t, $cur, e);
});
let luckysheetsheetnameeditor = function ($t) {
$t.attr("contenteditable", "true").addClass("luckysheet-mousedown-cancel").data("oldtxt", $t.text());
setTimeout(function () {
if (document.selection) {
let range = document.body.createTextRange();
range.moveToElementText($t.get(0));
range.select();
} else if (window.getSelection) {
let range = document.createRange();
range.selectNodeContents($t.get(0));
window.getSelection().removeAllRanges();
window.getSelection().addRange(range);
}
}, 1);
}
$("#luckysheet-sheet-area").on("dblclick", "span.luckysheet-sheets-item-name", function (e) {
luckysheetsheetnameeditor($(this));
});
$("#luckysheet-sheet-area").on("blur", "span.luckysheet-sheets-item-name", function (e) {
let $t = $(this);
let txt = $t.text(), oldtxt = $t.data("oldtxt");
let index = getSheetIndex(Store.currentSheetIndex);
for (let i = 0; i < Store.luckysheetfile.length; i++) {
if (index != i && Store.luckysheetfile[i].name == txt) {
if(isEditMode()){
alert(locale_sheetconfig.tipNameRepeat);
}
else{
tooltip.info("", locale_sheetconfig.tipNameRepeat);
}
$t.text(oldtxt).attr("contenteditable", "false");
return;
}
}
let winW = $(window).width();
let c_width = 0;
$("#luckysheet-sheet-container-c > div.luckysheet-sheets-item:visible").each(function(){
c_width += $(this).outerWidth();
});
if (c_width >= winW * 0.7) {
$("#luckysheet-sheet-area .luckysheet-sheets-scroll").css("display", "inline-block");
$("#luckysheet-sheet-container .docs-sheet-fade-left").show();
}
Store.luckysheetfile[index].name = txt;
server.saveParam("all", Store.currentSheetIndex, txt, { "k": "name" });
$t.attr("contenteditable", "false").removeClass("luckysheet-mousedown-cancel");
if (Store.clearjfundo) {
let redo = {};
redo["type"] = "sheetName";
redo["sheetIndex"] = Store.currentSheetIndex;
redo["oldtxt"] = oldtxt;
redo["txt"] = txt;
Store.jfundo = [];
Store.jfredo.push(redo);
}
});
$("#luckysheet-sheet-area").on("keydown", "span.luckysheet-sheets-item-name", function (e) {
let kcode = e.keyCode;
let $t = $(this);
if (kcode == keycode.ENTER) {
let index = getSheetIndex(Store.currentSheetIndex);
Store.luckysheetfile[index].name = $t.text();
$t.attr("contenteditable", "false");
}
});
$("#luckysheetsheetconfigrename").click(function () {
luckysheetsheetnameeditor(luckysheetcurrentSheetitem.find("span.luckysheet-sheets-item-name"));
$("#luckysheet-input-box").removeAttr("style");
$("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide();
});
$("#luckysheetsheetconfigshow").click(function () {
$("#luckysheet-sheets-m").click();
$("#luckysheet-input-box").removeAttr("style");
$("#luckysheet-rightclick-sheet-menu").hide();
});
$("#luckysheetsheetconfigmoveleft").click(function () {
if (luckysheetcurrentSheetitem.prevAll(":visible").length > 0) {
luckysheetcurrentSheetitem.insertBefore(luckysheetcurrentSheetitem.prevAll(":visible").eq(0));
sheetmanage.reOrderAllSheet();
}
$("#luckysheet-input-box").removeAttr("style");
$("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide();
});
$("#luckysheetsheetconfigmoveright").click(function () {
if (luckysheetcurrentSheetitem.nextAll(":visible").length > 0) {
luckysheetcurrentSheetitem.insertAfter(luckysheetcurrentSheetitem.nextAll(":visible").eq(0));
sheetmanage.reOrderAllSheet();
}
$("#luckysheet-input-box").removeAttr("style");
$("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide();
});
$("#luckysheetsheetconfigdelete").click(function (e) {
$("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide();
if($("#luckysheet-sheet-container-c .luckysheet-sheets-item:visible").length <= 1){
if(isEditMode()){
alert(locale_sheetconfig.noMoreSheet);
}
else{
tooltip.info(locale_sheetconfig.noMoreSheet, "");
}
return;
}
let index = getSheetIndex(Store.currentSheetIndex);
tooltip.confirm(locale_sheetconfig.confirmDelete+"【" + Store.luckysheetfile[index].name + "】?", "<span style='color:#9e9e9e;font-size:12px;'>"+locale_sheetconfig.redoDelete+"</span>", function () {
sheetmanage.deleteSheet(luckysheetcurrentSheetitem.data("index"));
}, null);
$("#luckysheet-input-box").removeAttr("style");
});
$("#luckysheetsheetconfigcopy").click(function (e) {
sheetmanage.copySheet(luckysheetcurrentSheetitem.data("index"), e);
$("#luckysheet-input-box").removeAttr("style");
$("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide();
});
$("#luckysheetsheetconfighide").click(function () {
if ($("#luckysheet-sheet-area div.luckysheet-sheets-item:visible").length == 1) {
if(isEditMode()){
alert(locale_sheetconfig.noHide);
}
else{
tooltip.info("", locale_sheetconfig.noHide);
}
return;
}
sheetmanage.setSheetHide(luckysheetcurrentSheetitem.data("index"));
$("#luckysheet-input-box").removeAttr("style");
$("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide();
});
$("#luckysheet-sheets-add").click(function (e) {
sheetmanage.addNewSheet(e);
sheetmanage.locationSheet();
$("#luckysheet-input-box").removeAttr("style");
});
let sheetscrollani = null, sheetscrollstart = 0, sheetscrollend = 0, sheetscrollstep = 150;
$("#luckysheet-sheets-leftscroll").click(function () {
let $c = $("#luckysheet-sheet-container-c");
sheetscrollstart = $c.scrollLeft();
sheetscrollend = $c.scrollLeft() - sheetscrollstep;
if (sheetscrollend <= 0) {
$("#luckysheet-sheet-container .docs-sheet-fade-left").hide();
}
$("#luckysheet-sheet-container .docs-sheet-fade-right").show();
clearInterval(sheetscrollani);
sheetscrollani = setInterval(function () {
sheetscrollstart -= 4;
$c.scrollLeft(sheetscrollstart);
if (sheetscrollstart <= sheetscrollend) {
clearInterval(sheetscrollani);
}
}, 1);
});
$("#luckysheet-sheets-rightscroll").click(function () {
let $c = $("#luckysheet-sheet-container-c");
sheetscrollstart = $c.scrollLeft();
sheetscrollend = $c.scrollLeft() + sheetscrollstep;
if (sheetscrollstart > 0) {
$("#luckysheet-sheet-container .docs-sheet-fade-right").hide();
}
$("#luckysheet-sheet-container .docs-sheet-fade-left").show();
clearInterval(sheetscrollani);
sheetscrollani = setInterval(function () {
sheetscrollstart += 4;
$c.scrollLeft(sheetscrollstart);
if (sheetscrollstart >= sheetscrollend) {
clearInterval(sheetscrollani);
}
}, 1);
});
let initialOpenSheet = true;
$("#luckysheet-sheets-m").click(function (e) {
$("#luckysheet-sheet-list").html("");
let item = "";
for (let i = 0; i < Store.luckysheetfile.length; i++) {
let f = Store.luckysheetfile[i], icon = '', style = "";
if (f["status"] == 1) {
icon = '<i class="fa fa-check" aria-hidden="true"></i>';
}
if (f["hide"] == 1) {
icon = '<i class="fa fa-low-vision" aria-hidden="true"></i>';
style += "color:#BBBBBB;";
}
if (f["color"] != null && f["color"].length > 0) {
style += "border-right:4px solid " + f["color"] + ";";
}
item += replaceHtml(sheetselectlistitemHTML, { "index": f["index"], "name": f["name"], "icon": icon, "style": style });
}
if (initialOpenSheet) {
$("#" + Store.container).append(replaceHtml(sheetselectlistHTML, { "item": item }));
$("#luckysheet-sheet-list").on("click", ".luckysheet-cols-menuitem", function (e) {
if(isEditMode()){
// tooltip.info("提示", "图表编辑模式下不允许该操作!");
alert(locale_sheetconfig.chartEditNoOpt);
return;
}
let $item = $(this), index = $item.data("index");
if ($item.data("index") != Store.currentSheetIndex) {
sheetmanage.setSheetShow(index);
sheetmanage.locationSheet();
}
});
initialOpenSheet = false;
}
else {
$("#luckysheet-sheet-list").html(item);
}
let $t = $("#luckysheet-sheet-list");
mouseclickposition($t, $(this).offset().left, $(this).offset().top - 12, "leftbottom");
$("#luckysheet-input-box").removeAttr("style");
});
}

22
src/core.js

@ -7,6 +7,13 @@ import luckysheetConfigsetting from './controllers/luckysheetConfigsetting';
import sheetmanage from './controllers/sheetmanage';
import luckysheetsizeauto from './controllers/resize';
import luckysheetHandler from './controllers/handler';
import {initialFilterHandler} from './controllers/filter';
import {initialMatrixOperation} from './controllers/matrixOperation';
import {initialSheetBar} from './controllers/sheetBar';
import {formulaBarInitial} from './controllers/formulaBar';
import {rowColumnOperationInitial} from './controllers/rowColumnOperation';
import {keyboardInitial} from './controllers/keyboard';
import {orderByInitial} from './controllers/orderBy';
import {initPlugins} from './controllers/expendPlugins';
import {
getluckysheetfile,
@ -99,7 +106,7 @@ luckysheet.create = function (setting) {
if (loadurl == "") {
sheetmanage.initialjfFile(menu, title);
luckysheetsizeauto();
luckysheetHandler();
initialWorkBook();
}
else {
$.post(loadurl, {"gridKey" : server.gridKey}, function (d) {
@ -108,7 +115,7 @@ luckysheet.create = function (setting) {
sheetmanage.initialjfFile(menu, title);
luckysheetsizeauto();
luckysheetHandler();
initialWorkBook();
//需要更新数据给后台时,建立WebSocket连接
if(server.allowUpdate){
@ -118,6 +125,17 @@ luckysheet.create = function (setting) {
}
}
function initialWorkBook(){
luckysheetHandler();//Overall dom initialization
initialFilterHandler();//Filter initialization
initialMatrixOperation();//Right click matrix initialization
initialSheetBar();//bottom sheet bar initialization
formulaBarInitial();//top formula bar initialization
rowColumnOperationInitial();//row and coloumn operate initialization
keyboardInitial();//Keyboard operate initialization
orderByInitial();//menu bar orderby function initialization
}
//获取所有表格数据
luckysheet.getluckysheetfile = getluckysheetfile;

2
src/global/refresh.js

@ -268,7 +268,7 @@ function jfrefreshrange(data, range, cdformat) {
"curdata": data,
"range": range,
"sheetIndex": Store.currentSheetIndex,
"cdformat": $.extend(true, [], luckysheetfile[getSheetIndex(Store.currentSheetIndex)]["luckysheet_conditionformat_save"]),
"cdformat": $.extend(true, [], Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)]["luckysheet_conditionformat_save"]),
"curCdformat": cdformat
});
}

10
src/locale/en.js

@ -645,6 +645,13 @@ export default {
resetColor: 'Reset color',
cancelText: 'Cancel',
chooseText: 'Confirm color',
tipNameRepeat:"The name of the tab page cannot be repeated! Please revise",
noMoreSheet:"The workbook contains at least one visual worksheet. To delete the selected worksheet, please insert a new worksheet or show a hidden worksheet.",
confirmDelete:"Are you sure to delete",
redoDelete:"Can be undo by Ctrl+Z",
noHide:"Can't hide, at least keep one sheet tag",
chartEditNoOpt:"This operation is not allowed in chart editing mode!",
},
conditionformat: {
rule: 'Rule',
@ -798,6 +805,9 @@ export default {
inputCorrect:"Please enter the correct value",
notLessOne:"The number of rows and columns cannot be less than 1",
offsetColumnLessZero:"The offset column cannot be negative!",
},
pivotTable:{
}
};

3
src/locale/zh.js

@ -829,5 +829,8 @@ export default {
inputCorrect:"请输入正确的数值",
notLessOne:"行列数不能小于1",
offsetColumnLessZero:"偏移列不能为负数!",
},
pivotTable:{
}
};

Loading…
Cancel
Save