diff --git a/README-zh.md b/README-zh.md index 4814428..2c5fe4d 100644 --- a/README-zh.md +++ b/README-zh.md @@ -1,10 +1,10 @@ # Luckysheet 简体中文 | [English](./README.md) -## Introduction - 介绍 +## 介绍 Luckysheet ,一款纯前端类似excel的在线表格,功能强大、配置简单、完全开源。 -## Features - 特性 +## 特性 1. Luckysheet支持表格设置包括冻结行列、合并单元格、筛选、排序、查询、条件格式、批注 2. 支持数据分析功能包括透视表、图表、分列、矩阵操作、内置385个计算函数 3. 支持一键截图、复制为json数据、共享编辑、excel与Luckysheet之间数据的复制粘贴 @@ -15,28 +15,32 @@ Luckysheet ,一款纯前端类似excel的在线表格,功能强大、配置 ![演示](https://minio.cnbabylon.com/public/luckysheet/LuckysheetDemo.gif) -## Plan - 计划 -- 模块化(进行中) -- excel导入/导出 -- 表单 +## 计划 +- 完善图表插件 - 插入图片 +- 数据验证(复选框、下拉列表) +- 打印 +- 单元格分段样式 +- 树形菜单 +- 表格功能:筛选,切片 +- excel导入/导出 - 更多... -## Documentation - 文档 +## 文档 [在线demo](https://mengshukeji.github.io/LuckysheetDemo/) [在线文档](https://mengshukeji.github.io/LuckysheetDocs/) -## Requirements - 环境 +## 环境 [Node.js](https://nodejs.org/en/) Version >= 6 -## Installation - 安装 +## 安装 ``` npm install npm install gulp -g ``` -## Development - 开发 +## 开发 开发 ``` npm run dev @@ -49,7 +53,7 @@ npm run build Luckysheet的核心代码为luckysheet-core.js和luckysheet-function.js,开发者看源码只需要看这两个文件即可,接下来会讨论进行模块化方案,完善这个插件. -## Usage - 用法 +## 用法 #### 第一步 `npm run build`后`dist`文件夹下的所有文件复制到项目目录 @@ -82,10 +86,10 @@ Luckysheet的核心代码为luckysheet-core.js和luckysheet-function.js,开发 ``` -## Contact - 联系 +## 联系 mengshu@office2.cn -## communication - 交流 +## 交流 - 添加小编微信,拉你进Luckysheet开发者交流微信群,备注:加群 @@ -97,11 +101,11 @@ mengshu@office2.cn 微信群 -## Authors and acknowledgment - 贡献者和感谢 -- Bug Pan ([@wpxp123456](https://github.com/wpxp123456)) -- Dushusir ([@Dushusir](https://github.com/Dushusir)) +## 贡献者和感谢 +- [@wpxp123456](https://github.com/wpxp123456) +- [@Dushusir](https://github.com/Dushusir) -## License - 版权信息 +## 版权信息 [MIT](http://opensource.org/licenses/MIT) Copyright (c) 2020-present, mengshukeji diff --git a/README.md b/README.md index 0745dd9..383c666 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ # Luckysheet +[![Join the chat at https://gitter.im/mengshukeji/Luckysheet](https://badges.gitter.im/mengshukeji/Luckysheet.svg)](https://gitter.im/mengshukeji/Luckysheet?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) + English| [简体中文](./README-zh.md) ## Introduction @@ -17,10 +19,14 @@ Luckysheet is an online spreadsheet like excel that is powerful, simple to confi ![Demo](https://minio.cnbabylon.com/public/luckysheet/LuckysheetDemo.gif) ## Plan -- modularization (in progress) -- Excel import/export -- Form +- Improve chart plugin - Insert picture +- Data validation (checkbox, drop-down list) +- Print +- Cell segmentation style +- Tree menu +- Table function: filter, slice +- Excel import/export - More... ## Documentation @@ -88,11 +94,11 @@ mengshu@office2.cn ## communication -coming soon! +- [Gitter](https://gitter.im/mengshukeji/Luckysheet) ## Authors and acknowledgment -- Bug Pan ([@wpxp123456](https://github.com/wpxp123456)) -- Dushusir ([@Dushusir](https://github.com/Dushusir)) +- [@wpxp123456](https://github.com/wpxp123456) +- [@Dushusir](https://github.com/Dushusir) ## License [MIT](http://opensource.org/licenses/MIT) diff --git a/src/config.js b/src/config.js index 4847416..045b137 100644 --- a/src/config.js +++ b/src/config.js @@ -22,7 +22,7 @@ export default { config: {}, //表格行高、列宽、合并单元格、公式等设置 fullscreenmode: true, //是否全屏模式,非全屏模式下,标记框不会强制选中。 devicePixelRatio: window.devicePixelRatio, //设备比例,比例越大表格分标率越高 - allowEdit: false, //是否允许前台编辑 + allowEdit: true, //是否允许前台编辑 loadUrl: "", // 配置loadUrl的地址,luckysheet会通过ajax请求表格数据,默认载入status为1的sheet数据中的所有data,其余的sheet载入除data字段外的所有字段 loadSheetUrl: "", //配置loadSheetUrl的地址,参数为gridKey(表格主键) 和 index(sheet主键合集,格式为[1,2,3]),返回的数据为sheet的data字段数据集合 gridKey: "", // 表格唯一标识符 diff --git a/src/controllers/alternateformat.js b/src/controllers/alternateformat.js index 86514aa..25a6adf 100644 --- a/src/controllers/alternateformat.js +++ b/src/controllers/alternateformat.js @@ -264,7 +264,7 @@ const alternateformat = { let _this = this; $("#luckysheet-modal-dialog-slider-alternateformat").remove(); - $("body").append(luckysheetAlternateformatHtml); + $("body").append(luckysheetAlternateformatHtml()); luckysheetsizeauto(); //关闭 diff --git a/src/controllers/conditionformat.js b/src/controllers/conditionformat.js index 772cad5..29ae399 100644 --- a/src/controllers/conditionformat.js +++ b/src/controllers/conditionformat.js @@ -2064,6 +2064,9 @@ const conditionformat = { $("#luckysheet-editorConditionRule-dialog #isPercent").attr("checked", "checked"); } } + + $("#luckysheet-editorConditionRule-dialog #textcolorshow").spectrum("set", ruleFormat.textColor); + $("#luckysheet-editorConditionRule-dialog #cellcolorshow").spectrum("set", ruleFormat.cellColor); } }, infoDialog: function(title, content){ @@ -3333,8 +3336,9 @@ const conditionformat = { dSmall = genarate(conditionValue0)[2]; } else{ - dBig = genarate(conditionValue0.toString().split("-")[1])[2]; - dSmall = genarate(conditionValue0.toString().split("-")[0])[2]; + let str = conditionValue0.toString().split("-"); + dBig = genarate(str[1].trim())[2]; + dSmall = genarate(str[0].trim())[2]; } //循环应用范围计算 for(let r = cellrange[s].row[0]; r <= cellrange[s].row[1]; r++){ diff --git a/src/controllers/constant.js b/src/controllers/constant.js index eeceea6..34ce534 100644 --- a/src/controllers/constant.js +++ b/src/controllers/constant.js @@ -1,4 +1,4 @@ -import locale from '../locale/locale' +import locale from '../locale/locale'; //dom variable const gridHTML = '
' + @@ -455,58 +455,67 @@ const pivottableconfigHTML = '
数据透视表
编辑范围
选择需要添加到数据透视表的字段 清除
筛选
数值
'; -const luckysheetAlternateformatHtml = '
'+ + + +function luckysheetAlternateformatHtml(){ + const _locale = locale() + const alternatingColors =_locale.alternatingColors; + const toolbar = _locale.toolbar; + + + return '
'+ '
'+ - '交替颜色'+ - ''+ + ''+ toolbar.alternatingColors +''+ + ''+ ''+ ''+ '
'+ '
'+ - '
应用范围
'+ + '
'+ alternatingColors.applyRange +'
'+ '
'+ - ''+ + ''+ ''+ '
'+ '
'+ '
'+ ''+ - ''+ + ''+ '
'+ '
'+ ''+ - ''+ + ''+ '
'+ '
'+ - '
格式样式
'+ + '
'+alternatingColors.textTitle+'
'+ '
'+ - '
自定义
'+ + '
'+alternatingColors.custom+'
'+ '
'+ '
'+ '
'+ - '
页眉
'+ - '
'+ - '
'+ + '
'+ alternatingColors.header +'
'+ + '
'+ + '
'+ '
'+ '
'+ - '
颜色1
'+ - '
'+ - '
'+ + '
'+ alternatingColors.colorShow +'1
'+ + '
'+ + '
'+ '
'+ '
'+ - '
颜色2
'+ - '
'+ - '
'+ + '
'+ alternatingColors.colorShow +'2
'+ + '
'+ + '
'+ '
'+ ''+ '
'+ - ''+ + ''+ '
'+ '
'; + } const luckysheetchartpointconfigHTML = '
选择维度
排序
全选 - 清除 - 反选可以直接框选数据点
数据点设置
图形颜色
图形大小
图形形状
边框粗细
边框样式
边框颜色
文字标签
数值比例
小数位数
标签格式
数据名称
标签位置
'; const luckysheetToolHTML = ''; @@ -514,6 +523,7 @@ const luckysheetToolHTML = '
- 微软雅黑 + ${fontarray[0]}
@@ -1186,7 +1196,7 @@ const keycode = { }; const luckysheetdefaultstyle = { - font: 'normal '+ Math.ceil(10 * window.devicePixelRatio) +'pt 微软雅黑, "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Heiti SC", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif', + font: 'normal '+ Math.ceil(10 * window.devicePixelRatio) +'pt "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Heiti SC", "WenQuanYi Micro Hei", sans-serif', fillStyle: "#000000", textBaseline: "middle", strokeStyle: "#dfdfdf", @@ -1197,7 +1207,7 @@ const luckysheetdefaultstyle = { const luckysheet_CFiconsImg = new Image(); luckysheet_CFiconsImg.src = "data:image/png;base64,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"; - + export { gridHTML, diff --git a/src/controllers/filter.js b/src/controllers/filter.js index 862ab8d..e667cf5 100644 --- a/src/controllers/filter.js +++ b/src/controllers/filter.js @@ -193,14 +193,14 @@ function createFilterOptions(luckysheet_filter_save, filterObj) { $("#luckysheet-filter-selected-sheet" + Store.currentSheetIndex).remove(); $("#luckysheet-filter-options-sheet" + Store.currentSheetIndex).remove(); - if(Store.luckysheet_filter_save == null || JSON.stringify(Store.luckysheet_filter_save) == "{}"){ + if(luckysheet_filter_save == null || JSON.stringify(luckysheet_filter_save) == "{}"){ return; } - let r1 = Store.luckysheet_filter_save.row[0], - r2 = Store.luckysheet_filter_save.row[1]; - let c1 = Store.luckysheet_filter_save.column[0], - c2 = Store.luckysheet_filter_save.column[1]; + let r1 = luckysheet_filter_save.row[0], + r2 = luckysheet_filter_save.row[1]; + let c1 = luckysheet_filter_save.column[0], + c2 = luckysheet_filter_save.column[1]; let row = Store.visibledatarow[r2], row_pre = r1 - 1 == -1 ? 0 : Store.visibledatarow[r1 - 1]; @@ -254,13 +254,13 @@ function createFilterOptions(luckysheet_filter_save, filterObj) { $("#luckysheet-rightclick-menu").hide(); $("#luckysheet-filter-menu, #luckysheet-filter-submenu").hide(); - if ($("#luckysheet-cell-main").scrollTop() > Store.luckysheet_filter_save["top_move"]) { - $("#luckysheet-scrollbar-y").scrollTop(Store.luckysheet_filter_save["top_move"]); + if ($("#luckysheet-cell-main").scrollTop() > luckysheet_filter_save["top_move"]) { + $("#luckysheet-scrollbar-y").scrollTop(luckysheet_filter_save["top_move"]); } let file = Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)]; - file.filter_select = Store.luckysheet_filter_save; + file.filter_select = luckysheet_filter_save; } export { diff --git a/src/controllers/handler.js b/src/controllers/handler.js index 4d15c7f..d40e739 100644 --- a/src/controllers/handler.js +++ b/src/controllers/handler.js @@ -185,215 +185,6 @@ export default function luckysheetHandler() { } }); - // //禁止前台编辑 - // if(!Store.allowEdit){ - // return; - // } - - //选区拖动替换 - $("#luckysheet-cell-main div.luckysheet-cs-draghandle").mousedown(function (event) { - if(isEditMode()){//此模式下禁用选区拖动 - return; - } - - $("#luckysheet-cell-selected").find(".luckysheet-cs-fillhandle") - .css("cursor","move") - .end() - .find(".luckysheet-cs-draghandle") - .css("cursor","move"); - $("#luckysheet-cell-main, #luckysheetTableContent, #luckysheet-sheettable_0").css("cursor","move"); - - Store.luckysheet_cell_selected_move = true; - Store.luckysheet_scroll_status = true; - - let mouse = mouseposition(event.pageX, event.pageY); - let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft(); - let y = mouse[1] + $("#luckysheet-cell-main").scrollTop(); - - let row_location = rowLocation(y), - row_pre = row_location[0], - row = row_location[1], - row_index = row_location[2]; - let col_location = colLocation(x), - col_pre = col_location[0], - col = col_location[1], - col_index = col_location[2]; - - Store.luckysheet_cell_selected_move_index = [row_index, col_index]; - - $("#luckysheet-cell-selected-move").css({ - "left": col_pre, - "width": col - col_pre - 1, - "top": row_pre, - "height": row - row_pre - 1, - "display": "block" - }); - - event.stopPropagation(); - }); - - //选区下拉 - $("#luckysheet-cell-main div.luckysheet-cs-fillhandle").mousedown(function (event) { - if(isEditMode()){//此模式下禁用选区下拉 - return; - } - - $("#luckysheet-cell-selected").find(".luckysheet-cs-fillhandle") - .css("cursor","crosshair") - .end() - .find(".luckysheet-cs-draghandle") - .css("cursor","crosshair"); - $("#luckysheet-cell-main, #luckysheetTableContent, #luckysheet-sheettable_0").css("cursor","crosshair"); - - Store.luckysheet_cell_selected_extend_time = setTimeout(function () { - Store.luckysheet_cell_selected_extend = true; - Store.luckysheet_scroll_status = true; - - let mouse = mouseposition(event.pageX, event.pageY); - let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft() - 5; - let y = mouse[1] + $("#luckysheet-cell-main").scrollTop() - 5; - - let row_location = rowLocation(y), - row_pre = row_location[0], - row = row_location[1], - row_index = row_location[2]; - let col_location = colLocation(x), - col_pre = col_location[0], - col = col_location[1], - col_index = col_location[2]; - - Store.luckysheet_cell_selected_extend_index = [row_index, col_index]; - - $("#luckysheet-cell-selected-extend").css({ - "left": col_pre, - "width": col - col_pre - 1, - "top": row_pre, - "height": row - row_pre - 1, - "display": "block" - }); - }, 100); - - event.stopPropagation(); - }).click(function () { - clearTimeout(Store.luckysheet_cell_selected_extend_time); - event.stopPropagation(); - }).dblclick(function () { - let last = Store.luckysheet_select_save[0]; - - let r0 = last.row[0], - r1 = last.row[1], - c0 = last.column[0], - c1 = last.column[1]; - - if(pivotTable.isPivotRange(r0, c0)){ - return; - } - - let dropCellState = false; - let step = 0; - - for(let r = r1 + 1; r < Store.flowdata.length; r++){ - if(c0 - 1 >= 0 && c1 + 1 < Store.flowdata[0].length){ - let cell1 = Store.flowdata[r][c0 - 1]; - let cell2 = Store.flowdata[r][c1 + 1]; - - if(r == r1 + 1){ - if((cell1 == null || isRealNull(cell1.v)) && (cell2 == null || isRealNull(cell2.v))){ - dropCellState = false; - break; - } - else{ - dropCellState = true; - step++; - } - } - else{ - if((cell1 == null || isRealNull(cell1.v)) && (cell2 == null || isRealNull(cell2.v))){ - break; - } - - step++; - } - } - else if(c0 - 1 >= 0){ - let cell = Store.flowdata[r][c0 - 1]; - - if(r == r1 + 1){ - if(cell == null || isRealNull(cell.v)){ - dropCellState = false; - break; - } - else{ - dropCellState = true; - step++; - } - } - else{ - if(cell == null || isRealNull(cell.v)){ - break; - } - - step++; - } - } - else if(c1 + 1 < Store.flowdata[0].length){ - let cell = Store.flowdata[r][c1 + 1]; - - if(r == r1 + 1){ - if(cell == null || isRealNull(cell.v)){ - dropCellState = false; - break; - } - else{ - dropCellState = true; - step++; - } - } - else{ - if(cell == null || isRealNull(cell.v)){ - break; - } - - step++; - } - } - } - - if(!dropCellState || step == 0){ - event.stopPropagation(); - return; - } - - //复制范围 - luckysheetDropCell.copyRange = { "row": [r0, r1], "column": [c0, c1] }; - - //applyType - let typeItemHide = luckysheetDropCell.typeItemHide(); - - if(!typeItemHide[0] && !typeItemHide[1] && !typeItemHide[2] && !typeItemHide[3] && !typeItemHide[4] && !typeItemHide[5] && !typeItemHide[6]){ - luckysheetDropCell.applyType = "0"; - } - else{ - luckysheetDropCell.applyType = "1"; - } - - luckysheetDropCell.applyRange = { "row": [r1 + 1, r1 + step], "column": [c0, c1] }; - luckysheetDropCell.direction = "down"; - - Store.luckysheet_select_save = [{ "row": [r0, r1 + step], "column": [c0, c1] }]; - - luckysheetDropCell.update(); - luckysheetDropCell.createIcon(); - - $("#luckysheet-cell-selected-move").hide(); - - $("#luckysheet-sheettable").css("cursor", "default"); - clearTimeout(Store.countfuncTimeout); - Store.countfuncTimeout = setTimeout(function () { countfunc() }, 500); - - event.stopPropagation(); - }); - //表格mousedown $("#luckysheet-cell-main, #luckysheetTableContent").mousedown(function (event) { $("#luckysheet-cell-selected").find(".luckysheet-cs-fillhandle") @@ -1071,6 +862,11 @@ export default function luckysheetHandler() { }).mouseup(function (event) { if (event.which == "3") { + //禁止前台编辑(只可 框选单元格、滚动查看表格) + if(!Store.allowEdit){ + return; + } + if(isEditMode()){ //非编辑模式下禁止右键功能框 return; } @@ -1179,6 +975,11 @@ export default function luckysheetHandler() { showrightclickmenu($("#luckysheet-rightclick-menu"), x, y); } }).dblclick(function (event) { + //禁止前台编辑(只可 框选单元格、滚动查看表格) + if(!Store.allowEdit){ + return; + } + if(parseInt($("#luckysheet-input-box").css("top")) > 0){ return; } @@ -1283,2874 +1084,3141 @@ export default function luckysheetHandler() { } }); - // - $("#luckysheet-bottom-add-row, #luckysheet-bottom-add-row-input, #luckysheet-bottom-return-top").on("mousedown dblclick mouseup",function(e){ - e.stopPropagation(); - }); - - //底部添加行按钮 - $("#luckysheet-bottom-add-row").on("click", function(e) { - $("#luckysheet-rightclick-menu").hide(); - $("#" + Store.container).attr("tabindex", 0).focus(); + //表格mousemove + $(document).mousemove(function (event) { + luckysheetPostil.overshow(event); //有批注显示 - let $t = $(this), value = $("#luckysheet-bottom-add-row-input").val(); + clearInterval(Store.jfautoscrollTimeout); - if(value == ""){ - value = 100; - } - - if (isNaN(parseInt(value))) { - if(isEditMode()){ - alert("请输入数字"); + if(formula.functionResizeStatus){ + let y = event.pageY; + let movepx = y - formula.functionResizeData.y; + let mpx = formula.functionResizeData.calculatebarHeight + movepx; + let winh = Math.round($(window).height()/2); + + if(mpx <= 28){ + if(mpx <= 20){ + return; + } + mpx = 28; } - else{ - tooltip.info("增加错误", "请输入数字"); + else if(mpx >= winh){ + if(mpx >= winh + 8){ + return; + } + mpx = winh; } - return; - } - value = parseInt(value); - if (value < 1 || value > 100) { - if(isEditMode()){ - alert("增加范围限制在1-100"); - } - else{ - tooltip.info("增加错误", "增加范围限制在1-100"); - } - return; + Store.calculatebarHeight = mpx; + $("#luckysheet-wa-calculate").css("height", Store.calculatebarHeight - 2); + $("#luckysheet-wa-calculate-size").css({"background":"#5e5e5e", "cursor":"ns-resize"}); + + clearTimeout(formula.functionResizeTimeout); + formula.functionResizeTimeout = setTimeout(function(){ + luckysheetsizeauto(); + }, 15); } + else if (!!luckysheetFreezen.horizontalmovestate) { + let mouse = mouseposition(event.pageX, event.pageY); + let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); + let scrollTop = $("#luckysheet-cell-main").scrollTop(); + let x = mouse[0] + scrollLeft; + let y = mouse[1] + scrollTop; - luckysheetextendtable("row", Store.flowdata.length - 1, value); - }); + let row_location = rowLocation(y), + row = row_location[1], + row_pre = row_location[0], + row_index = row_location[2]; + let top = mouse[1] + Store.columeHeaderHeight; - $("#luckysheet-bottom-return-top").on("click", function(e) { - $("#luckysheet-scrollbar-y").scrollTop(0); - }); + if (top < Store.columeHeaderHeight) { + top = Store.columeHeaderHeight; + } - //单元格编辑输入 - let luckysheet_shiftkeydown = false; + if (top > luckysheetFreezen.windowHeight - 4) { + top = luckysheetFreezen.windowHeight - 4; + } - $("#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; - } + $("#luckysheet-freezebar-horizontal").find(".luckysheet-freezebar-horizontal-handle").css({ "top": top }); - 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 (top + scrollTop - Store.columeHeaderHeight >= row_pre + (row - row_pre) / 2) { + top = row - 2 - scrollTop + Store.columeHeaderHeight; + luckysheetFreezen.freezenhorizontaldata = [row, row_index + 1, scrollTop, luckysheetFreezen.cutVolumn(Store.visibledatarow, row_index + 1), top]; + } + else { + top = row_pre - 2 - scrollTop + Store.columeHeaderHeight; + luckysheetFreezen.freezenhorizontaldata = [row_pre, row_index, scrollTop, luckysheetFreezen.cutVolumn(Store.visibledatarow, row_index), top]; + } - 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(); + $("#luckysheet-freezebar-horizontal").find(".luckysheet-freezebar-horizontal-drop").css({ "top": top }); + luckysheetFreezen.saveFreezen(luckysheetFreezen.freezenhorizontaldata, top, null, null); + } + else if (!!luckysheetFreezen.verticalmovestate) { + let mouse = mouseposition(event.pageX, event.pageY); + let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); + let scrollTop = $("#luckysheet-cell-main").scrollTop(); + let x = mouse[0] + scrollLeft; + let y = mouse[1] + scrollTop; - let scrollLeft = $("#luckysheet-cell-main").scrollLeft(), - scrollTop = $("#luckysheet-cell-main").scrollTop(); - let winH = $("#luckysheet-cell-main").height(), - winW = $("#luckysheet-cell-main").width(); + let col_location = colLocation(x), + col = col_location[1], + col_pre = col_location[0], + col_index = col_location[2]; - 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]; + let left = mouse[0] + Store.rowHeaderWidth; - 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 (left < Store.rowHeaderWidth) { + left = Store.rowHeaderWidth; + } - 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); - } - } - } + if (left > luckysheetFreezen.windowWidth - 4) { + left = luckysheetFreezen.windowWidth - 4; } - - 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")); + + $("#luckysheet-freezebar-vertical").find(".luckysheet-freezebar-vertical-handle").css({ "left": left }); + + if (left + scrollLeft - Store.rowHeaderWidth >= col_pre + (col - col_pre) / 2) { + left = col - 2 - scrollLeft + Store.rowHeaderWidth; + luckysheetFreezen.freezenverticaldata = [col, col_index + 1, scrollLeft, luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_index + 1), left]; } 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"); + left = col_pre - 2 - scrollLeft + Store.rowHeaderWidth; + luckysheetFreezen.freezenverticaldata = [col_pre, col_index, scrollLeft, luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_index), left]; } - //若有参数弹出框,隐藏 - 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(); + $("#luckysheet-freezebar-vertical").find(".luckysheet-freezebar-vertical-drop").css({ "left": left }); + luckysheetFreezen.saveFreezen(null, null, luckysheetFreezen.freezenverticaldata, left); + luckysheetsizeauto();//调节选区时下部单元格溢出 } - else if (kcode == keycode.TAB) { - if (parseInt($inputbox.css("top")) > 0) { - return; - } - - luckysheetMoveHighlightCell("right", 1, "rangeOfSelect"); - event.preventDefault(); + else if (!!pivotTable && pivotTable.movestate) { + let x = event.pageX, y = event.pageY; + $("#luckysheet-modal-dialog-slider-pivot-move").css({ + "left": x - pivotTable.movesave.width / 2, + "top": y - pivotTable.movesave.height + }); } - else if(kcode == keycode.F2){ - if (parseInt($inputbox.css("top")) > 0) { + else if (Store.luckysheet_sheet_move_status) { + let scrollLeft = $("#luckysheet-sheet-container-c").scrollLeft(); + let x = event.pageX + scrollLeft; + + if (Math.abs(event.pageX - Store.luckysheet_sheet_move_data.pageX) < 3) { return; } - let last = Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1]; + let winW = $("#luckysheet-sheet-container").width(); + let left = x - Store.luckysheet_sheet_move_data.curleft - $("#luckysheet-sheet-container").offset().left; + Store.luckysheet_sheet_move_data.activeobject.css({ "left": left }); - 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 row_index = luckysheet_searcharray(Store.luckysheet_sheet_move_data.widthlist, left + Store.luckysheet_sheet_move_data.curleft); + Store.luckysheet_sheet_move_data.cursorobject.css({ "cursor": "move" }); - 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; + if (left - scrollLeft <= 6) { + $("#luckysheet-sheets-leftscroll").click(); } - 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]; + if (left - scrollLeft >= winW - 40) { + $("#luckysheet-sheets-rightscroll").click(); + } - 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]; + if (row_index != Store.luckysheet_sheet_move_data.curindex) { + if (row_index == -1 && left > 0) { + row_index = Store.luckysheet_sheet_move_data.widthlist.length - 1; + $("#luckysheet-sheets-item-clone").insertAfter($("#luckysheet-sheet-area div.luckysheet-sheets-item:visible").eq(row_index)); + } + else if (row_index == -1 && left <= 0) { + $("#luckysheet-sheets-item-clone").insertBefore($("#luckysheet-sheet-area div.luckysheet-sheets-item:visible").eq(0)); + } + else { + $("#luckysheet-sheets-item-clone").insertAfter($("#luckysheet-sheet-area div.luckysheet-sheets-item:visible").eq(row_index)); } - 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; + 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())); } - - //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 { + Store.luckysheet_sheet_move_data.widthlist.push(parseInt($(this).outerWidth()) + Store.luckysheet_sheet_move_data.widthlist[i - 1]); } - 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; - } + Store.luckysheet_sheet_move_data.curindex = $("#luckysheet-sheet-area div.luckysheet-sheets-item:visible").index($("#luckysheet-sheets-item-clone")); + } + } + else if (Store.luckysheet_model_move_state) { + let scrollTop = $(document).scrollTop(), scrollLeft = $(document).scrollLeft(); + let y = event.pageY + scrollTop, x = event.pageX + scrollLeft; + let winH = $(window).height(), winW = $(window).width(); + let myh = Store.luckysheet_model_move_obj.height(), + myw = Store.luckysheet_model_move_obj.width(); + let top = y - Store.luckysheet_model_xy[1], + left = x - Store.luckysheet_model_xy[0]; - 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; - } + if (top < 0) { + top = 0; + } - 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 (top + myh + 62 > winH) { + top = winH - myh - 62; + } - //复制范围内包含部分合并单元格,提示 - if(Store.config["merge"] != null){ - let has_PartMC = false; + if (left < 0) { + left = 0; + } - 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]; + if (left + myw + 86 > winW) { + left = winW - myw - 86; + } - has_PartMC = hasPartMC(Store.config, r1, r2, c1, c2); + Store.luckysheet_model_move_obj.css({ "top": top, "left": left }); + event.preventDefault(); + } + else if (!!Store.luckysheet_scroll_status || !!Store.luckysheet_select_status || !!Store.luckysheet_rows_selected_status || !!Store.luckysheet_cols_selected_status || !!Store.luckysheet_cell_selected_move || !!Store.luckysheet_cell_selected_extend || !!Store.luckysheet_cols_change_size || !!Store.luckysheet_rows_change_size || !!formula.rangeResize || !!formula.rangeMove) { + if (Store.luckysheet_select_status) { + clearTimeout(Store.countfuncTimeout); + Store.countfuncTimeout = setTimeout(function () { countfunc() }, 500); + } + + Store.jfautoscrollTimeout = setInterval(function () { + if (Store.luckysheet_scroll_status && !Store.luckysheet_cols_change_size && !Store.luckysheet_rows_change_size) { + let mouse = mouseposition(event.pageX, event.pageY); + let left = $("#luckysheet-scrollbar-x").scrollLeft(), + top = $("#luckysheet-scrollbar-y").scrollTop(); + let x = mouse[0]; + let y = mouse[1]; + let winH = $("#luckysheet-cell-main").height() - 20, + winW = $("#luckysheet-cell-main").width() - 60; - if(has_PartMC){ - break; - } + if (y < 0 || y > winH) { + let stop; + if (y < 0) { + stop = top + y/2; + } + else { + stop = top + (y - winH)/2; } + $("#luckysheet-scrollbar-y").scrollTop(stop); + } - if(has_PartMC){ - if(isEditMode()){ - alert("无法对部分合并单元格执行此操作"); - } - else{ - tooltip.info("无法对部分合并单元格执行此操作", ""); - } - return; + if (x < 0 || x > winW) { + let sleft; + if (x < 0) { + sleft = left + x/2; + } + else { + sleft = left + (x - winW)/2; } + $("#luckysheet-scrollbar-x").scrollLeft(sleft); } + } + if (Store.luckysheet_select_status) { + let mouse = mouseposition(event.pageX, event.pageY); + let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft(); + let y = mouse[1] + $("#luckysheet-cell-main").scrollTop(); - //多重选区 有条件格式时 提示 - 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 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 cf_compute = conditionformat.getComputeMap(); + let last = $.extend(true, {}, Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1]); - 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]; + let top = 0, height = 0, rowseleted = []; + if (last.top > row_pre) { + top = row_pre; + height = last.top + last.height - row_pre; - 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(last.row[1] > last.row_focus){ + last.row[1] = last.row_focus; } - if(hasCF){ - if(isEditMode()){ - alert("无法对多重选择区域执行此操作"); - } - else{ - tooltip.info("无法对多重选择区域执行此操作", ""); - } - return; - } + rowseleted = [row_index, last.row[1]]; + } + else if (last.top == row_pre) { + top = row_pre; + height = last.top + last.height - row_pre; + rowseleted = [row_index, last.row[0]]; } + else { + top = last.top; + height = row - last.top - 1; - //多重选区 行不一样且列不一样时 提示 - 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(last.row[0] < last.row_focus){ + last.row[0] = last.row_focus; } - if((!isSameRow && !isSameCol) || selectIsOverlap()){ - if(isEditMode()){ - alert("无法对多重选择区域执行此操作"); - } - else{ - tooltip.info("无法对多重选择区域执行此操作", ""); - } - return; - } + rowseleted = [last.row[0], row_index]; } - selection.copy(event); - - Store.luckysheet_paste_iscut = false; - luckysheetactiveCell(); - - event.stopPropagation(); - return; - } - else if (kcode == 70) {//Ctrl + F 查找 - searchReplace.createDialog(0); - searchReplace.init(); + let left = 0, width = 0, columnseleted = []; + if (last.left > col_pre) { + left = col_pre; + width = last.left + last.width - col_pre; - $("#luckysheet-search-replace #searchInput input").focus(); - } - else if (kcode == 72) {//Ctrl + H 替换 - searchReplace.createDialog(1); - searchReplace.init(); + if(last.column[1] > last.column_focus){ + last.column[1] = last.column_focus; + } - $("#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; + columnseleted = [col_index, last.column[1]]; } - - if($(event.target).hasClass("formulaInputFocus")){ - return; + else if (last.left == col_pre) { + left = col_pre; + width = last.left + last.width - col_pre; + columnseleted = [col_index, last.column[0]]; } + else { + left = last.left; + width = col - last.left - 1; - if(Store.luckysheet_select_save.length > 1){ - if(isEditMode()){ - alert("无法在此处粘贴此内容,请选择粘贴区域的一个单元格,然后再次尝试粘贴"); - } - else{ - tooltip.info("无法在此处粘贴此内容,请选择粘贴区域的一个单元格,然后再次尝试粘贴", ""); + if(last.column[0] < last.column_focus){ + last.column[0] = last.column_focus; } - return; - } - - selection.isPasteAction = true; - luckysheetactiveCell(); - event.stopPropagation(); - return; - } - else if (kcode == 88) {//Ctrl + X 剪切 - //复制时存在格式刷状态,取消格式刷 - if(menuButton.luckysheetPaintModelOn){ - menuButton.cancelPaintModel(); + columnseleted = [last.column[0], col_index]; } - if(Store.luckysheet_select_save.length == 0){ - return; + let changeparam = menuButton.mergeMoveMain(columnseleted, rowseleted, last, top, height, left, width); + if(changeparam != null){ + columnseleted = changeparam[0]; + rowseleted= changeparam[1]; + top = changeparam[2]; + height = changeparam[3]; + left = changeparam[4]; + width = changeparam[5]; } - //复制范围内包含部分合并单元格,提示 - if(Store.config["merge"] != null){ - let has_PartMC = false; + last["row"] = rowseleted; + last["column"] = columnseleted; - 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]; + last["left_move"] = left; + last["width_move"] = width; + last["top_move"] = top; + last["height_move"] = height; - has_PartMC = hasPartMC(Store.config, r1, r2, c1, c2); + Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1] = last; - if(has_PartMC){ - break; - } - } + selectHightlightShow(); + + luckysheetFreezen.scrollFreezen(); - if(has_PartMC){ - if(luckysheetConfigsetting.editMode){ - alert("无法对合并单元格执行此操作"); - } - else{ - tooltip.info("无法对合并单元格执行此操作", ""); - } - return; - } + $("#luckysheet-helpbox-cell").text(getRangetxt(Store.currentSheetIndex, Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1])); + + //交替颜色选择范围 + if($("#luckysheet-alternateformat-rangeDialog").is(":visible")){ + $("#luckysheet-alternateformat-rangeDialog input").val(getRangetxt(Store.currentSheetIndex, Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1])); } - //多重选区时 提示 - if(Store.luckysheet_select_save.length > 1){ - if(isEditMode()){ - alert("不能对多重选择区域执行此操作,请选择单个区域,然后再试"); - } - else{ - tooltip.info("不能对多重选择区域执行此操作,请选择单个区域,然后再试", ""); - } - return; + if (pivotTable.luckysheet_pivotTable_select_state) { + $("#luckysheet-pivotTable-range-selection-input").val(Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)].name + "!" + chatatABC(Store.luckysheet_select_save[0]["column"][0]) + (Store.luckysheet_select_save[0]["row"][0] + 1) + ":" + chatatABC(Store.luckysheet_select_save[0]["column"][1]) + (Store.luckysheet_select_save[0]["row"][1] + 1)); } + } + else if(conditionformat.selectStatus){ + let mouse = mouseposition(event.pageX, event.pageY); + let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft(); + let y = mouse[1] + $("#luckysheet-cell-main").scrollTop(); - selection.copy(event); + 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]; - 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; - } + let last = conditionformat.selectRange[conditionformat.selectRange.length - 1]; - 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; - } + let top = 0, height = 0, rowseleted = []; + if (last.top > row_pre) { + top = row_pre; + height = last.top + last.height - row_pre; - 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; - } + if(last.row[1] > last.row_focus){ + last.row[1] = last.row_focus; + } - 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; + rowseleted = [row_index, last.row[1]]; + } + else if (last.top == row_pre) { + top = row_pre; + height = last.top + last.height - row_pre; + rowseleted = [row_index, last.row[0]]; } + else { + top = last.top; + height = row - last.top - 1; - luckysheetMoveHighlightCell2("right", "rangeOfSelect"); - } - else if (String.fromCharCode(kcode).toLocaleUpperCase() == "A") {//Ctrl + A 全选 - $("#luckysheet-left-top").trigger("mousedown"); - $(document).trigger("mouseup"); - } + if(last.row[0] < last.row_focus){ + last.row[0] = last.row_focus; + } - 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; - } + rowseleted = [last.row[0], row_index]; + } - if (!luckysheet_shiftkeydown) { - Store.luckysheet_shiftpositon = $.extend(true, {}, Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1]); - Store.luckysheet_shiftkeydown = true; - } + let left = 0, width = 0, columnseleted = []; + if (last.left > col_pre) { + left = col_pre; + width = last.left + last.width - col_pre; - //shift + 方向键 调整选区 - if (kcode == keycode.UP) { - if($("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")){ - return; - } + if(last.column[1] > last.column_focus){ + last.column[1] = last.column_focus; + } - luckysheetMoveHighlightRange("down", -1, "rangeOfSelect"); - } - else if (kcode == keycode.DOWN) { - if($("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")){ - return; + columnseleted = [col_index, last.column[1]]; + } + else if (last.left == col_pre) { + left = col_pre; + width = last.left + last.width - col_pre; + columnseleted = [col_index, last.column[0]]; } + else { + left = last.left; + width = col - last.left - 1; - luckysheetMoveHighlightRange("down", 1, "rangeOfSelect"); - } - else if (kcode == keycode.LEFT) { - if($("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")){ - return; + if(last.column[0] < last.column_focus){ + last.column[0] = last.column_focus; + } + + columnseleted = [last.column[0], col_index]; } - luckysheetMoveHighlightRange("right", -1, "rangeOfSelect"); - } - else if (kcode == keycode.RIGHT) { - if($("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")){ - return; + let changeparam = menuButton.mergeMoveMain(columnseleted, rowseleted, last, top, height, left, width); + if(changeparam != null){ + columnseleted = changeparam[0]; + rowseleted= changeparam[1]; + top = changeparam[2]; + height = changeparam[3]; + left = changeparam[4]; + width = changeparam[5]; } - - 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(); - } + last["row"] = rowseleted; + last["column"] = columnseleted; - selectHightlightShow(); - } - else if (kcode == keycode.DELETE) { - $("#luckysheet-delete-text").click(); + last["left_move"] = left; + last["width_move"] = width; + last["top_move"] = top; + last["height_move"] = height; - 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; - } + conditionformat.selectRange[conditionformat.selectRange.length - 1] = last; - 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; - } + selectionCopyShow(conditionformat.selectRange); - 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; + let range = conditionformat.getTxtByRange(conditionformat.selectRange); + $("#luckysheet-multiRange-dialog input").val(range); } - - 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; + else if (formula.rangestart) { + formula.rangedrag(event); } + else if (formula.rangedrag_row_start) { + formula.rangedrag_row(event); + } + else if (formula.rangedrag_column_start) { + formula.rangedrag_column(event); + } + else if (Store.luckysheet_rows_selected_status) { + let mouse = mouseposition(event.pageX, event.pageY); + let y = mouse[1] + $("#luckysheet-rows-h").scrollTop(); + if (y < 0) { + return false; + } - 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_location = rowLocation(y), + row = row_location[1], + row_pre = row_location[0], + row_index = row_location[2]; + let col_index = Store.visibledatacolumn.length - 1, + col = Store.visibledatacolumn[col_index], + col_pre = 0; - 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]; - } + let last = $.extend(true, {}, Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1]); - luckysheetupdateCell(row, row_pre, row_index, col, col_pre, col_index, Store.flowdata, true); - if(kcode == 8){ - $("#luckysheet-rich-text-editor").html("
"); - } - formula.functionInputHanddler($("#luckysheet-functionbox-cell"), $("#luckysheet-rich-text-editor"), kcode); - } - } - } - - luckysheetactiveCell(); + let top = 0, height = 0, rowseleted = []; + if (last.top > row_pre) { + top = row_pre; + height = last.top + last.height - row_pre; - event.stopPropagation(); - }); + if(last.row[1] > last.row_focus){ + last.row[1] = last.row_focus; + } - //右键菜单 复制按钮 - $("#luckysheet-copy-btn, #luckysheet-cols-copy-btn, #luckysheet-paste-btn-title").click(function (event) { - $(this).parent().hide(); + rowseleted = [row_index, last.row[1]]; + } + else if (last.top == row_pre) { + top = row_pre; + height = last.top + last.height - row_pre; + rowseleted = [row_index, last.row[0]]; + } + else { + top = last.top; + height = row - last.top - 1; - //复制范围内包含部分合并单元格,提示 - if(Store.config["merge"] != null){ - let has_PartMC = false; + if(last.row[0] < last.row_focus){ + last.row[0] = last.row_focus; + } - 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]; + rowseleted = [last.row[0], row_index]; + } - has_PartMC = hasPartMC(Store.config, r1, r2, c1, c2); + last["row"] = rowseleted; - if(has_PartMC){ - break; - } - } + last["top_move"] = top; + last["height_move"] = height; - if(has_PartMC){ - if(isEditMode()){ - alert("无法对部分合并单元格执行此操作"); - } - else{ - tooltip.info("无法对部分合并单元格执行此操作", ""); + Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1] = last; + + selectHightlightShow(); + + clearTimeout(Store.countfuncTimeout); + Store.countfuncTimeout = setTimeout(function () { countfunc() }, 500); } - return; - } - } + else if (Store.luckysheet_cols_selected_status) { + let mouse = mouseposition(event.pageX, event.pageY); + let x = mouse[0] + $("#luckysheet-cols-h-c").scrollLeft(); + if (x < 0) { + return false; + } - //多重选区 有条件格式时 提示 - 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 row_index = Store.visibledatarow.length - 1, + row = Store.visibledatarow[row_index], + row_pre = 0; + let col_location = colLocation(x), + col = col_location[1], + col_pre = col_location[0], + col_index = col_location[2]; - let cf_compute = conditionformat.getComputeMap(); + let last = $.extend(true, {}, Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1]); - 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]; + let left = 0, width = 0, columnseleted = []; + if (last.left > col_pre) { + left = col_pre; + width = last.left + last.width - col_pre; - 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(last.column[1] > last.column_focus){ + last.column[1] = last.column_focus; } + + columnseleted = [col_index, last.column[1]]; } - } - } + else if (last.left == col_pre) { + left = col_pre; + width = last.left + last.width - col_pre; + columnseleted = [col_index, last.column[0]]; + } + else { + left = last.left; + width = col - last.left - 1; - if(hasCF){ - if(isEditMode()){ - alert("无法对多重选择区域执行此操作"); - } - else{ - tooltip.info("无法对多重选择区域执行此操作", ""); - } - return; - } - } + if(last.column[0] < last.column_focus){ + last.column[0] = last.column_focus; + } - //多重选区 行不一样且列不一样时 提示 - if(Store.luckysheet_select_save.length > 1){ - let isSameRow = true, - str_r = Store.luckysheet_select_save[0].row[0], - end_r = Store.luckysheet_select_save[0].row[1]; - let isSameCol = true, - str_c = Store.luckysheet_select_save[0].column[0], - end_c = Store.luckysheet_select_save[0].column[1]; - - for(let s = 1; s < Store.luckysheet_select_save.length; s++){ - if(Store.luckysheet_select_save[s].row[0] != str_r || Store.luckysheet_select_save[s].row[1] != end_r){ - isSameRow = false; - } - if(Store.luckysheet_select_save[s].column[0] != str_c || Store.luckysheet_select_save[s].column[1] != end_c){ - isSameCol = false; - } - } + columnseleted = [last.column[0], col_index]; + } - if((!isSameRow && !isSameCol) || selectIsOverlap()){ - if(isEditMode()){ - alert("无法对多重选择区域执行此操作"); - } - else{ - tooltip.info("无法对多重选择区域执行此操作", ""); - } - return; - } - } - - selection.copy(event); - }); + last["column"] = columnseleted; - //右键菜单 粘贴按钮 - $("#luckysheet-copy-paste, #luckysheet-cols-paste-btn, #luckysheet-paste-btn-title").click(function (event) { - selection.paste(event, "btn"); - $(this).parent().hide(); - }); + last["left_move"] = left; + last["width_move"] = width; - //菜单栏 图表按钮 - $("#luckysheet-chart-btn-title").click(function () { - $("#luckysheetdatavisual").click(); - getdatabyselection() - let render = Store.createChart($('.luckysheet-grid-container')[0]) - render.style.width = '400px' - render.style.height = '250px' - render.style.position = 'absolute' - render.style.background = '#fff' - render.style.zIndex = Store.zIndex - Store.zIndex++ - let chartSetting = document.getElementsByClassName('chartSetting')[0] - chartSetting.style.display = 'block' + Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1] = last; + selectHightlightShow(); + + clearTimeout(Store.countfuncTimeout); + Store.countfuncTimeout = setTimeout(function () { countfunc() }, 500); + } + else if (Store.luckysheet_cell_selected_move) { + let mouse = mouseposition(event.pageX, event.pageY); - // let luckysheetGridContainer = document.getElementsByClassName('luckysheet-grid-container')[0] - // luckysheetGridContainer.onclick = function (e){ - // console.dir(e.path) - // if(e.path.some(item => item.includes())){ + let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); + let scrollTop = $("#luckysheet-cell-main").scrollTop(); - // } - // } - // render.onClick = function(){ + let x = mouse[0] + scrollLeft; + let y = mouse[1] + scrollTop; - // } - - // render.oncontextmenu = function(e){ - // let em = e || event - // em.preventDefault() + let winH = $(window).height() + scrollTop - Store.sheetBarHeight - Store.statisticBarHeight, + winW = $(window).width() + scrollLeft; - // let dom = document.createElement('div') - // dom.addClass('chartMenu') - // dom.innerHtml = '
  • 删除
' - // dom.style.position = 'absolute' - // console.dir(em) - // } - }); + 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]; - //菜单栏 数据透视表 - $("#luckysheet-pivot-btn-title").click(function (e) { - pivotTable.createPivotTable(e); - }); + let row_index_original = Store.luckysheet_cell_selected_move_index[0], + col_index_original = Store.luckysheet_cell_selected_move_index[1]; - //菜单栏 截图按钮 - $("#luckysheet-chart-btn-screenshot").click(function () { - if(Store.luckysheet_select_save.length == 0){ - if(isEditMode()){ - alert("请框选需要截图的范围"); - } - else{ - tooltip.info("提示!", "请框选需要截图的范围"); - } - return; - } + let row_s = Store.luckysheet_select_save[0]["row"][0] - row_index_original + row_index, + row_e = Store.luckysheet_select_save[0]["row"][1] - row_index_original + row_index; - if(Store.luckysheet_select_save.length > 1){ - if(isEditMode()){ - alert("无法对多重选择区域执行此操作"); - } - else{ - tooltip.info("提示!", "无法对多重选择区域执行此操作"); - } + let col_s = Store.luckysheet_select_save[0]["column"][0] - col_index_original + col_index, + col_e = Store.luckysheet_select_save[0]["column"][1] - col_index_original + col_index; - return; - } + if (row_s < 0 || y < 0) { + row_s = 0; + row_e = Store.luckysheet_select_save[0]["row"][1] - Store.luckysheet_select_save[0]["row"][0]; + } - //复制范围内包含部分合并单元格,提示 - if(Store.config["merge"] != null){ - let has_PartMC = false; + if (col_s < 0 || x < 0) { + col_s = 0; + col_e = Store.luckysheet_select_save[0]["column"][1] - Store.luckysheet_select_save[0]["column"][0]; + } - 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]; + if (row_e >= Store.visibledatarow[Store.visibledatarow.length - 1] || y > winH) { + row_s = Store.visibledatarow.length - 1 - Store.luckysheet_select_save[0]["row"][1] + Store.luckysheet_select_save[0]["row"][0]; + row_e = Store.visibledatarow.length - 1; + } - has_PartMC = hasPartMC(Store.config, r1, r2, c1, c2); + if (col_e >= Store.visibledatacolumn[Store.visibledatacolumn.length - 1] || x > winW) { + col_s = Store.visibledatacolumn.length - 1 - Store.luckysheet_select_save[0]["column"][1] + Store.luckysheet_select_save[0]["column"][0]; + col_e = Store.visibledatacolumn.length - 1; + } - if(has_PartMC){ - break; - } - } + col_pre = col_s - 1 == -1 ? 0 : Store.visibledatacolumn[col_s - 1]; + col = Store.visibledatacolumn[col_e]; + row_pre = row_s - 1 == -1 ? 0 : Store.visibledatarow[row_s - 1]; + row = Store.visibledatarow[row_e]; - if(has_PartMC){ - if(isEditMode()){ - alert("无法对合并单元格执行此操作"); - } - else{ - tooltip.info("提示!", "无法对合并单元格执行此操作"); + $("#luckysheet-cell-selected-move").css({ + "left": col_pre, + "width": col - col_pre - 2, + "top": row_pre, + "height": row - row_pre - 2, + "display": "block" + }); } - return; - } - } - - let st_r = Store.luckysheet_select_save[0].row[0], - ed_r = Store.luckysheet_select_save[0].row[1]; - let st_c = Store.luckysheet_select_save[0].column[0], - ed_c = Store.luckysheet_select_save[0].column[1]; - - let shotData = datagridgrowth([], ed_r + 1, ed_c + 1); - - for(let r = st_r; r <= ed_r; r++){ - for(let c = st_c; c <= ed_c; c++){ - shotData[r][c] = Store.flowdata[r][c]; - } - } - - let scrollHeight, rh_height; - if(st_r - 1 < 0){ - scrollHeight = 0; - rh_height = Store.visibledatarow[ed_r]; - } - else{ - scrollHeight = Store.visibledatarow[st_r - 1]; - rh_height = Store.visibledatarow[ed_r] - Store.visibledatarow[st_r - 1]; - } + else if (Store.luckysheet_cell_selected_extend) { + let mouse = mouseposition(event.pageX, event.pageY); + let scrollLeft = $("#luckysheet-cell-main").scrollLeft() - 5; + let scrollTop = $("#luckysheet-cell-main").scrollTop() - 5; - let scrollWidth, ch_width; - if(st_c - 1 < 0){ - scrollWidth = 0; - ch_width = Store.visibledatacolumn[ed_c]; - } - else{ - scrollWidth = Store.visibledatacolumn[st_c - 1]; - ch_width = Store.visibledatacolumn[ed_c] - Store.visibledatacolumn[st_c - 1]; - } + let x = mouse[0] + scrollLeft; + let y = mouse[1] + scrollTop; - let newCanvas = $("").attr({ - width: Math.ceil(ch_width * devicePixelRatio), - height: Math.ceil(rh_height * devicePixelRatio) - }).css({ width: ch_width, height: rh_height }); + let winH = $(window).height() + scrollTop - Store.sheetBarHeight - Store.statisticBarHeight, + winW = $(window).width() + scrollLeft; - let d = Store.flowdata; - Store.flowdata = shotData; + 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]; - luckysheetDrawMain(scrollWidth, scrollHeight, ch_width, rh_height, 1, 1, null, null, newCanvas); + let row_index_original = Store.luckysheet_cell_selected_extend_index[0], + col_index_original = Store.luckysheet_cell_selected_extend_index[1]; - Store.flowdata = d; - editor.webWorkerFlowDataCache(Store.flowdata);//worker存数据 + let row_s = Store.luckysheet_select_save[0]["row"][0], + row_e = Store.luckysheet_select_save[0]["row"][1]; + let col_s = Store.luckysheet_select_save[0]["column"][0], + col_e = Store.luckysheet_select_save[0]["column"][1]; - let image = new Image(); - let url = newCanvas.get(0).toDataURL("image/png"); - image.src = url; + if (row_s < 0 || y < 0) { + row_s = 0; + row_e = Store.luckysheet_select_save[0]["row"][1] - Store.luckysheet_select_save[0]["row"][0]; + } - if(ch_width > rh_height){ - image.style.width = "100%"; - } - else{ - image.style.height = "100%"; - } + if (col_s < 0 || x < 0) { + col_s = 0; + col_e = Store.luckysheet_select_save[0]["column"][1] - Store.luckysheet_select_save[0]["column"][0]; + } - let maxHeight = $(window).height() - 200; - tooltip.screenshot("截取成功!", '
', url); - $("#luckysheet-confirm-screenshot-save").append(image); - newCanvas.remove(); - }); + if (row_e >= Store.visibledatarow[Store.visibledatarow.length - 1] || y > winH) { + row_s = Store.visibledatarow.length - 1 - Store.luckysheet_select_save[0]["row"][1] + Store.luckysheet_select_save[0]["row"][0]; + row_e = Store.visibledatarow.length - 1; + } - //截图下载 - $(document).on("click", "a.download", function(){ - let dataURI = $("#luckysheet-confirm-screenshot-save img").attr("src"); + if (col_e >= Store.visibledatacolumn[Store.visibledatacolumn.length - 1] || x > winW) { + col_s = Store.visibledatacolumn.length - 1 - Store.luckysheet_select_save[0]["column"][1] + Store.luckysheet_select_save[0]["column"][0]; + col_e = Store.visibledatacolumn.length - 1; + } - let binStr = atob(dataURI.split(",")[1]), - len = binStr.length, - arr = new Uint8Array(len); + let top = Store.luckysheet_select_save[0].top_move, + height = Store.luckysheet_select_save[0].height_move; + let left = Store.luckysheet_select_save[0].left_move, + width = Store.luckysheet_select_save[0].width_move; - for(let i = 0; i < len; i++){ - arr[i] = binStr.charCodeAt(i); - } + if (Math.abs(row_index_original - row_index) > Math.abs(col_index_original - col_index)) { + if (!(row_index >= row_s && row_index <= row_e)) { + if (Store.luckysheet_select_save[0].top_move >= row_pre) { + top = row_pre; + height = Store.luckysheet_select_save[0].top_move + Store.luckysheet_select_save[0].height_move - row_pre; + } + else { + top = Store.luckysheet_select_save[0].top_move; + height = row - Store.luckysheet_select_save[0].top_move - 1; + } + } + } + else { + if (!(col_index >= col_s && col_index <= col_e)) { + if (Store.luckysheet_select_save[0].left_move >= col_pre) { + left = col_pre; + width = Store.luckysheet_select_save[0].left_move + Store.luckysheet_select_save[0].width_move - col_pre; + } + else { + left = Store.luckysheet_select_save[0].left_move; + width = col - Store.luckysheet_select_save[0].left_move - 1; + } + } + } - let blob = new Blob([arr]); + $("#luckysheet-cell-selected-extend").css({ + "left": left, + "width": width, + "top": top, + "height": height, + "display": "block" + }); + } + else if (Store.luckysheet_cols_change_size) { + let mouse = mouseposition(event.pageX, event.pageY); + let scrollLeft = $("#luckysheet-cols-h-c").scrollLeft(); + let x = mouse[0] + scrollLeft; + let winW = $(window).width(); - let element = document.createElement('a'); - element.setAttribute('href', URL.createObjectURL(blob)); - element.setAttribute('download', '截图.png'); + let row_index = Store.visibledatarow.length - 1, + row = Store.visibledatarow[row_index], + row_pre = 0; + let col_location = colLocation(x), + col = col_location[1], + col_pre = col_location[0], + col_index = col_location[2]; + + if ((x + 3) - Store.luckysheet_cols_change_size_start[0] > 30 && x < winW + scrollLeft - 100) { + $("#luckysheet-change-size-line").css({ "left": x }); + $("#luckysheet-cols-change-size").css({ "left": x - 2 }); + } + } + else if (Store.luckysheet_rows_change_size) { + let mouse = mouseposition(event.pageX, event.pageY); + let scrollTop = $("#luckysheet-rows-h").scrollTop(); + let y = mouse[1] + scrollTop; + let winH = $(window).height(); - element.style.display = 'none'; - document.body.appendChild(element); + let row_location = rowLocation(y), + row = row_location[1], + row_pre = row_location[0], + row_index = row_location[2]; + + if ((y + 3) - Store.luckysheet_rows_change_size_start[0] > 19 && y < winH + scrollTop - 200) { + $("#luckysheet-change-size-line").css({ "top": y }); + $("#luckysheet-rows-change-size").css({ "top": y }); + } + } + else if (luckysheetPostil.move){ + let mouse = mouseposition(event.pageX, event.pageY); + let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft(); + let y = mouse[1] + $("#luckysheet-cell-main").scrollTop(); - element.click(); + let myh = luckysheetPostil.currentObj.outerHeight(), + myw = luckysheetPostil.currentObj.outerWidth(); + + let top = y - luckysheetPostil.moveXY[1], + left = x - luckysheetPostil.moveXY[0]; - let clickHandler; - element.addEventListener('click', clickHandler = function(){ - requestAnimationFrame(function(){ - URL.revokeObjectURL(element.href); - }); + if (top < 0) { + top = 0; + } - element.removeAttribute('href'); - element.removeEventListener('click', clickHandler); - }) + if (top + myh + 42 + 6 > luckysheetPostil.currentWinH) { + top = luckysheetPostil.currentWinH - myh - 42 - 6; + } - document.body.removeChild(element); - }) - - //菜单栏 分列按钮 - $("#luckysheet-splitColumn-btn-title").click(function(){ - if(Store.luckysheet_select_save == null || Store.luckysheet_select_save.length == 0){ - return; - } + if (left < 0) { + left = 0; + } - if(Store.luckysheet_select_save.length > 1){ - tooltip.info("不能对多重选择区域执行此操作,请选择单个区域,然后再试", ""); - return; - } + if (left + myw + 22 + 36 > luckysheetPostil.currentWinW) { + left = luckysheetPostil.currentWinW - myw - 22 - 36; + } - if(Store.luckysheet_select_save[0].column[0] != Store.luckysheet_select_save[0].column[1]){ - tooltip.info("一次只能转换一列数据,选定区域可以有多行,但不能有多列,请在选定单列区域以后再试", ""); - return; - } + luckysheetPostil.currentObj.css({ "left": left, "top": top }); + } + else if (!!luckysheetPostil.resize){ + let mouse = mouseposition(event.pageX, event.pageY); + let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft(); + let y = mouse[1] + $("#luckysheet-cell-main").scrollTop(); - splitColumn.createDialog(); - splitColumn.init(); - }); + if (x < 0 || y < 0) { + return false; + } - //冻结行列 - $("#luckysheet-freezen-btn-horizontal").click(function () { - if($.trim($(this).text())=="取消冻结"){ - if (luckysheetFreezen.freezenverticaldata != null) { - luckysheetFreezen.cancelFreezenVertical(); - luckysheetFreezen.createAssistCanvas(); - luckysheetrefreshgrid(); - } + let resizeXY = luckysheetPostil.resizeXY; - if (luckysheetFreezen.freezenhorizontaldata != null) { - luckysheetFreezen.cancelFreezenHorizontal(); - luckysheetFreezen.createAssistCanvas(); - luckysheetrefreshgrid(); - } + let topchange = y - resizeXY[1], + leftchange = x - resizeXY[0]; + + let top = resizeXY[5], + height = resizeXY[3], + left = resizeXY[4], + width = resizeXY[2]; - luckysheetFreezen.scrollAdapt(); - } - else{ - if (luckysheetFreezen.freezenverticaldata != null) { - luckysheetFreezen.cancelFreezenVertical(); - luckysheetFreezen.createAssistCanvas(); - luckysheetrefreshgrid(); - } + let resize = luckysheetPostil.resize; - if (luckysheetFreezen.freezenhorizontaldata == null) { - luckysheetFreezen.createFreezenHorizontal(); - luckysheetFreezen.createAssistCanvas(); - } - } - }); + if(resize == "lm" || resize == "lt" || resize == "lb"){ + left = x; + width = resizeXY[2] - leftchange; - $("#luckysheet-freezen-btn-vertical").click(function () { - if (luckysheetFreezen.freezenverticaldata != null) { - luckysheetFreezen.cancelFreezenVertical(); - luckysheetrefreshgrid(); - } - else { - luckysheetFreezen.createFreezenVertical(); - } - luckysheetFreezen.createAssistCanvas(); - }); + if(left > resizeXY[2] + resizeXY[4] - 60){ + left = resizeXY[2] + resizeXY[4] - 60; + width = resizeXY[2] - (resizeXY[2] + resizeXY[4] - 60 - resizeXY[0]); + } + else if(left <= 0){ + left = 0; + width = resizeXY[2] + resizeXY[0]; + } + } - //右键菜单 菜单项hover - let submenuhide = null, rightclickmenu = null; - $(".luckysheet-cols-menu .luckysheet-cols-submenu").hover( - function () { - let $t = $(this), attrid = $t.attr("id"), $attr = $("#" + attrid + "_sub"), $con = $t.parent(); - let winW = $(window).width(), winH = $(window).height(); - let menuW = $con.width(), attrH = $attr.height() + 25, attrW = $attr.width() + 5; - let offset = $t.offset(); - let top = offset.top, left = offset.left + menuW; + if(resize == "rm" || resize == "rt" || resize == "rb"){ + width = resizeXY[2] + leftchange; - if (left + attrW > winW) { - left = offset.left - attrW; - } + if(width < 60){ + width = 60; + } + else if(width >= luckysheetPostil.currentWinW - resizeXY[4] - 22 - 36){ + width = luckysheetPostil.currentWinW - resizeXY[4] - 22 - 36; + } + } - if (top + attrH > winH) { - top = winH - attrH; - } + if(resize == "mt" || resize == "lt" || resize == "rt"){ + top = y; + height = resizeXY[3] - topchange; - $attr.css({ "top": top, "left": left }).show(); - rightclickmenu = $t; - }, - function () { - let $t = $(this), attrid = $t.attr("id"), $attr = $("#" + attrid + "_sub"); - submenuhide = setTimeout(function () { $attr.hide(); }, 200); - } - ); + if(top > resizeXY[3] + resizeXY[5] - 60){ + top = resizeXY[3] + resizeXY[5] - 60; + height = resizeXY[3] - (resizeXY[3] + resizeXY[5] - 60 - resizeXY[1]); + } + else if(top <= 0){ + top = 0; + height = resizeXY[3] + resizeXY[1]; + } + } - $(".luckysheet-rightgclick-menu-sub").hover( - function () { - rightclickmenu.addClass("luckysheet-cols-menuitem-hover"); - clearTimeout(submenuhide); - }, - function () { - rightclickmenu.removeClass("luckysheet-cols-menuitem-hover"); - $(this).hide(); - } - ); + if(resize == "mb" || resize == "lb" || resize == "rb"){ + height = resizeXY[3] + topchange; - $(".luckysheet-grid-container, #luckysheet-rightclick-menu").on("contextmenu", function (e) { - e.preventDefault(); - }); + if(height < 60){ + height = 60; + } + else if(height >= luckysheetPostil.currentWinH - resizeXY[5] - 42 - 6){ + height = luckysheetPostil.currentWinH - resizeXY[5] - 42 - 6; + } + } - $("#luckysheet-rightclick-menu input").on("keydown", function (e) { - e.stopPropagation(); + luckysheetPostil.currentObj.css({ "width": width, "height": height, "left": left, "top": top }); + } + else if (!!formula.rangeResize) { + formula.rangeResizeDraging(event, formula.rangeResizeObj, formula.rangeResizexy, formula.rangeResize, formula.rangeResizeWinW, formula.rangeResizeWinH, Store.ch_width, Store.rh_height); + } + else if (!!formula.rangeMove) { + formula.rangeMoveDraging(event, formula.rangeMovexy, formula.rangeMoveObj.data("range"), formula.rangeMoveObj, Store.sheetBarHeight, Store.statisticBarHeight); + } + }, 1); + } }); + + //表格mouseup + $(document).mouseup(function (event) { + //数据窗格主体 + if (Store.luckysheet_select_status) { + clearTimeout(Store.countfuncTimeout); + Store.countfuncTimeout = setTimeout(function(){ + countfunc(); + }, 0); - $("#luckysheet-modal-dialog-mask").on("click dbclick mousedown mousemove mouseup", function (e) { - e.stopPropagation(); - e.preventDefault(); - }); + //格式刷 + if(menuButton.luckysheetPaintModelOn){ + selection.pasteHandlerOfPaintModel(Store.luckysheet_copy_save); - let copychange = function () { - if (document.hidden || document.webkitHidden || document.msHidden) { - Store.iscopyself = false; + if(menuButton.luckysheetPaintSingle){ + //单次 格式刷 + menuButton.cancelPaintModel(); + } + } } - } - $(document).on("visibilitychange webkitvisibilitychange msvisibilitychange", copychange).mouseleave(function () { - Store.iscopyself = false; - }).mousedown(function (event) { - //有批注在编辑时 - luckysheetPostil.removeActivePs(); + Store.luckysheet_select_status = false; + clearTimeout(Store.jfautoscrollTimeout); + Store.luckysheet_scroll_status = false; - if (!$(event.target).hasClass("luckysheet-mousedown-cancel") && $(event.target).filter("[class*='sp-palette']").length == 0 && $(event.target).filter("[class*='sp-thumb']").length == 0 && $(event.target).filter("[class*='sp-']").length == 0) { - $("#luckysheet-rightclick-menu").hide(); - $("#luckysheet-cols-h-hover").hide(); - $("#luckysheet-cols-menu-btn").hide(); - $("#luckysheet-rightclick-menu").hide(); - $("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu, #luckysheet-user-menu").hide(); - $("body > .luckysheet-filter-menu, body > .luckysheet-filter-submenu, body > .luckysheet-cols-menu").hide(); - //$("body > luckysheet-menuButton").hide(); - Store.luckysheet_cols_menu_status = false; - } + $("#luckysheet-cell-selected").find(".luckysheet-cs-fillhandle").css("cursor","crosshair").end().find(".luckysheet-cs-draghandle").css("cursor","move"); + $("#luckysheet-cell-main, #luckysheetTableContent, #luckysheet-sheettable_0").css("cursor","default"); - //点击功能栏时 如果是单元格编辑模式 则退出编辑模式 - if($(event.target).closest("#luckysheet-wa-editor").length > 0 && parseInt($("#luckysheet-input-box").css("top")) > 0){ - formula.updatecell(Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[1]); - luckysheetMoveHighlightCell("down", 0, "rangeOfSelect"); - } - }); + //行标题窗格主体 + Store.luckysheet_rows_selected_status = false; - //单元格编辑 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; - } + //列标题窗格主体 + Store.luckysheet_cols_selected_status = false; - let ctrlKey = event.ctrlKey; - let altKey = event.altKey; - let shiftKey = event.shiftKey; - let kcode = event.keyCode; + Store.luckysheet_model_move_state = false; - let $inputbox = $("#luckysheet-input-box"); - if (kcode == keycode.ESC && parseInt($("#luckysheet-input-box").css("top")) > 0) { - formula.dontupdate(); - luckysheetMoveHighlightCell("down", 0, "rangeOfSelect"); - event.preventDefault(); + if(formula.functionResizeStatus){ + formula.functionResizeStatus = false; + $("#luckysheet-wa-calculate-size").removeAttr("style"); } - 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(); + + if (!!luckysheetFreezen.horizontalmovestate) { + luckysheetFreezen.horizontalmovestate = false; + $("#luckysheet-freezebar-horizontal").removeClass("luckysheet-freezebar-active"); + $("#luckysheet-freezebar-horizontal").find(".luckysheet-freezebar-horizontal-handle").css("cursor", "-webkit-grab"); + if (luckysheetFreezen.freezenhorizontaldata[4] <= Store.columeHeaderHeight) { + luckysheetFreezen.cancelFreezenHorizontal(); } + luckysheetFreezen.createAssistCanvas(); + luckysheetrefreshgrid(); } - 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); + if (!!luckysheetFreezen.verticalmovestate) { + luckysheetFreezen.verticalmovestate = false; + $("#luckysheet-freezebar-vertical").removeClass("luckysheet-freezebar-active"); + $("#luckysheet-freezebar-vertical").find(".luckysheet-freezebar-vertical-handle").css("cursor", "-webkit-grab"); + if (luckysheetFreezen.freezenverticaldata[4] <= Store.rowHeaderWidth) { + luckysheetFreezen.cancelFreezenVertical(); + } + luckysheetFreezen.createAssistCanvas(); + luckysheetrefreshgrid(); } - 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); + + if (!!pivotTable && pivotTable.movestate) { + $("#luckysheet-modal-dialog-slider-pivot-move").remove(); + pivotTable.movestate = false; + $("#luckysheet-modal-dialog-pivotTable-list, #luckysheet-modal-dialog-config-filter, #luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column, #luckysheet-modal-dialog-config-value").css("cursor", "default"); + + if (pivotTable.movesave.containerid != "luckysheet-modal-dialog-pivotTable-list") { + let $cur = $(event.target).closest(".luckysheet-modal-dialog-slider-config-list"); + if ($cur.length == 0) { + if (pivotTable.movesave.containerid == "luckysheet-modal-dialog-config-value") { + pivotTable.resetOrderby(pivotTable.movesave.obj); + } + + pivotTable.movesave.obj.remove(); + pivotTable.showvaluecolrow(); + + $("#luckysheet-modal-dialog-pivotTable-list").find(".luckysheet-modal-dialog-slider-list-item").each(function () { + $(this).find(".luckysheet-slider-list-item-selected").find("i").remove(); + }); + + $("#luckysheet-modal-dialog-config-filter, #luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column, #luckysheet-modal-dialog-config-value").find(".luckysheet-modal-dialog-slider-config-item").each(function () { + let index = $(this).data("index"); + + $("#luckysheet-modal-dialog-pivotTable-list").find(".luckysheet-modal-dialog-slider-list-item").each(function () { + let $seleted = $(this).find(".luckysheet-slider-list-item-selected"); + if ($(this).data("index") == index && $seleted.find("i").length == 0) { + $seleted.append(''); + } + }); + + }); + + pivotTable.refreshPivotTable(); + } + } } - }).keyup(function (e) { - let kcode = e.keyCode; - - if (!e.shiftKey && kcode == 16) { - Store.luckysheet_shiftkeydown = false; - Store.luckysheet_shiftpositon = null; + + if (Store.luckysheet_sheet_move_status) { + Store.luckysheet_sheet_move_status = false; + Store.luckysheet_sheet_move_data.activeobject.insertBefore($("#luckysheet-sheets-item-clone")); + Store.luckysheet_sheet_move_data.activeobject.removeAttr("style"); + $("#luckysheet-sheets-item-clone").remove(); + Store.luckysheet_sheet_move_data.cursorobject.css({ "cursor": "pointer" }); + Store.luckysheet_sheet_move_data = {}; + sheetmanage.reOrderAllSheet(); } - //输入框中文输入后 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); + if (!!formula.rangeResize) { + formula.rangeResizeDragged(event, formula.rangeResizeObj, formula.rangeResize, formula.rangeResizexy, formula.rangeResizeWinW, formula.rangeResizeWinH); } - e.preventDefault(); - }); + //批注框 移动 + if (luckysheetPostil.move) { + luckysheetPostil.move = 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(); - } + let ps_id = luckysheetPostil.currentObj.closest(".luckysheet-postil-show").attr("id"); - $("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item").removeClass("luckysheet-formula-search-item-active"); - $up.addClass("luckysheet-formula-search-item-active"); + let ps_r = ps_id.split("luckysheet-postil-show_")[1].split("_")[0]; + let ps_c = ps_id.split("luckysheet-postil-show_")[1].split("_")[1]; - 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; - } + let d = editor.deepCopyFlowData(Store.flowdata); + let rc = []; - 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; - } + d[ps_r][ps_c].ps.left = luckysheetPostil.currentObj.position().left; + d[ps_r][ps_c].ps.top = luckysheetPostil.currentObj.position().top; + d[ps_r][ps_c].ps.value = luckysheetPostil.currentObj.find(".formulaInputFocus").text(); - luckysheetMoveHighlightCell(dir_n, step, "rangeOfFormula"); - } + rc.push(ps_r + "_" + ps_c); + + luckysheetPostil.ref(d, rc); + + $("#" + ps_id).remove(); + + if(d[ps_r][ps_c].ps.isshow){ + luckysheetPostil.buildPs(ps_r, ps_c, d[ps_r][ps_c].ps); + $("#" + ps_id).addClass("luckysheet-postil-show-active"); + $("#" + ps_id).find(".luckysheet-postil-dialog-resize").show(); } - 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); + else{ + luckysheetPostil.editPs(ps_r, ps_c); + } + } - if(range == null){ - range = formula.getcellrange($("#luckysheet-input-box-index").text()); - } + //批注框 改变大小 + if (!!luckysheetPostil.resize) { + luckysheetPostil.resize = null; - let r1 = range["row"][0], r2 = range["row"][1]; - let c1 = range["column"][0], c2 = range["column"][1]; + let ps_id = luckysheetPostil.currentObj.closest(".luckysheet-postil-show").attr("id"); - 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]; + let ps_r = ps_id.split("luckysheet-postil-show_")[1].split("_")[0]; + let ps_c = ps_id.split("luckysheet-postil-show_")[1].split("_")[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 - }; + let d = editor.deepCopyFlowData(Store.flowdata); + let rc = []; - formula.rangeSetValue({ "row": [r1, r2], "column": [c1, c2] }); + d[ps_r][ps_c].ps.left = luckysheetPostil.currentObj.position().left; + d[ps_r][ps_c].ps.top = luckysheetPostil.currentObj.position().top; + d[ps_r][ps_c].ps.width = luckysheetPostil.currentObj.outerWidth(); + d[ps_r][ps_c].ps.height = luckysheetPostil.currentObj.outerHeight(); + d[ps_r][ps_c].ps.value = luckysheetPostil.currentObj.find(".formulaInputFocus").text(); - 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; + rc.push(ps_r + "_" + ps_c); - let dir_n = dir, step = 1; - if(dir == 'up'){ - dir_n = 'down'; - step = -1; - } - if(dir == 'left'){ - dir_n = 'right'; - step = -1; - } + luckysheetPostil.ref(d, rc); - if(anchor.parent().is("span") && anchor.parent().next().length == 0 && anchorOffset > 0){ - formula.updatecell(Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[1]); - luckysheetMoveHighlightCell(dir_n, step, "rangeOfSelect"); - } - else if(anchor.is("#luckysheet-rich-text-editor") && anchor.context.childElementCount == anchorOffset){ - formula.updatecell(Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[1]); - luckysheetMoveHighlightCell(dir_n, step, "rangeOfSelect"); - } - else if(anchor.parent().is("#luckysheet-rich-text-editor") && anchor.context.length == anchorOffset){ - formula.updatecell(Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[1]); - luckysheetMoveHighlightCell(dir_n, step, "rangeOfSelect"); - } - } + $("#" + ps_id).remove(); - event.preventDefault(); + if(d[ps_r][ps_c].ps.isshow){ + luckysheetPostil.buildPs(ps_r, ps_c, d[ps_r][ps_c].ps); + $("#" + ps_id).addClass("luckysheet-postil-show-active"); + $("#" + ps_id).find(".luckysheet-postil-dialog-resize").show(); + } + else{ + luckysheetPostil.editPs(ps_r, ps_c); + } } - } - //表格mousemove - $(document).mousemove(function (event) { - luckysheetPostil.overshow(event); //有批注显示 + //改变行高 + if (Store.luckysheet_rows_change_size) { + Store.luckysheet_rows_change_size = false; - clearInterval(Store.jfautoscrollTimeout); - - if(formula.functionResizeStatus){ - let y = event.pageY; - let movepx = y - formula.functionResizeData.y; - let mpx = formula.functionResizeData.calculatebarHeight + movepx; - let winh = Math.round($(window).height()/2); - - if(mpx <= 28){ - if(mpx <= 20){ - return; - } - mpx = 28; - } - else if(mpx >= winh){ - if(mpx >= winh + 8){ - return; - } - mpx = winh; - } + $("#luckysheet-change-size-line").hide(); + $("#luckysheet-rows-change-size").css("opacity", 0); + $("#luckysheet-sheettable, #luckysheet-rows-h, #luckysheet-rows-h canvas").css("cursor", "default"); - Store.calculatebarHeight = mpx; - $("#luckysheet-wa-calculate").css("height", Store.calculatebarHeight - 2); - $("#luckysheet-wa-calculate-size").css({"background":"#5e5e5e", "cursor":"ns-resize"}); - - clearTimeout(formula.functionResizeTimeout); - formula.functionResizeTimeout = setTimeout(function(){ - luckysheetsizeauto(); - }, 15); - } - else if (!!luckysheetFreezen.horizontalmovestate) { let mouse = mouseposition(event.pageX, event.pageY); - let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); - let scrollTop = $("#luckysheet-cell-main").scrollTop(); - let x = mouse[0] + scrollLeft; + let scrollTop = $("#luckysheet-rows-h").scrollTop(); let y = mouse[1] + scrollTop; + let winH = $(window).height(); let row_location = rowLocation(y), row = row_location[1], row_pre = row_location[0], row_index = row_location[2]; - let top = mouse[1] + Store.columeHeaderHeight; + + let size = (y + 3) - Store.luckysheet_rows_change_size_start[0]; - if (top < Store.columeHeaderHeight) { - top = Store.columeHeaderHeight; + if ((y + 3) - Store.luckysheet_rows_change_size_start[0] < 19) { + size = 19; } - if (top > luckysheetFreezen.windowHeight - 4) { - top = luckysheetFreezen.windowHeight - 4; + if (y >= winH - 200 + scrollTop) { + size = winW - 200 - Store.luckysheet_rows_change_size_start[0] + scrollTop; } - $("#luckysheet-freezebar-horizontal").find(".luckysheet-freezebar-horizontal-handle").css({ "top": top }); - - if (top + scrollTop - Store.columeHeaderHeight >= row_pre + (row - row_pre) / 2) { - top = row - 2 - scrollTop + Store.columeHeaderHeight; - luckysheetFreezen.freezenhorizontaldata = [row, row_index + 1, scrollTop, luckysheetFreezen.cutVolumn(Store.visibledatarow, row_index + 1), top]; + let cfg = $.extend(true, {}, Store.config); + if (cfg["rowlen"] == null) { + cfg["rowlen"] = {}; } - else { - top = row_pre - 2 - scrollTop + Store.columeHeaderHeight; - luckysheetFreezen.freezenhorizontaldata = [row_pre, row_index, scrollTop, luckysheetFreezen.cutVolumn(Store.visibledatarow, row_index), top]; + + cfg["rowlen"][Store.luckysheet_rows_change_size_start[1]] = Math.ceil(size); + + if (Store.clearjfundo) { + Store.jfundo = []; + + Store.jfredo.push({ + "type": "resize", + "ctrlType": "resizeR", + "config": $.extend(true, {}, Store.config), + "curconfig": $.extend(true, {}, cfg), + "sheetIndex": Store.currentSheetIndex + }); } - $("#luckysheet-freezebar-horizontal").find(".luckysheet-freezebar-horizontal-drop").css({ "top": top }); - luckysheetFreezen.saveFreezen(luckysheetFreezen.freezenhorizontaldata, top, null, null); + //config + Store.config = cfg; + Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)].config = Store.config; + + server.saveParam("cg", Store.currentSheetIndex, cfg["rowlen"], { "k": "rowlen" }); + + jfrefreshgrid_rhcw(Store.flowdata.length, null); } - else if (!!luckysheetFreezen.verticalmovestate) { + + //改变列宽 + if (Store.luckysheet_cols_change_size) { + Store.luckysheet_cols_change_size = false; + + $("#luckysheet-change-size-line").hide(); + $("#luckysheet-cols-change-size").css("opacity", 0); + $("#luckysheet-sheettable, #luckysheet-cols-h-c, .luckysheet-cols-h-cells, .luckysheet-cols-h-cells canvas").css("cursor", "default"); + let mouse = mouseposition(event.pageX, event.pageY); - let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); - let scrollTop = $("#luckysheet-cell-main").scrollTop(); + let scrollLeft = $("#luckysheet-cols-h-c").scrollLeft(); let x = mouse[0] + scrollLeft; - let y = mouse[1] + scrollTop; + let winW = $(window).width(); + let row_index = Store.visibledatarow.length - 1, + row = Store.visibledatarow[row_index], + row_pre = 0; let col_location = colLocation(x), col = col_location[1], col_pre = col_location[0], col_index = col_location[2]; + + let size = (x + 3) - Store.luckysheet_cols_change_size_start[0]; - let left = mouse[0] + Store.rowHeaderWidth; - - if (left < Store.rowHeaderWidth) { - left = Store.rowHeaderWidth; - } - - if (left > luckysheetFreezen.windowWidth - 4) { - left = luckysheetFreezen.windowWidth - 4; + let firstcolumlen = Store.defaultcollen; + if (Store.config["columlen"] != null && Store.config["columlen"][Store.luckysheet_cols_change_size_start[1]] != null) { + firstcolumlen = Store.config["columlen"][Store.luckysheet_cols_change_size_start[1]]; } - $("#luckysheet-freezebar-vertical").find(".luckysheet-freezebar-vertical-handle").css({ "left": left }); - - if (left + scrollLeft - Store.rowHeaderWidth >= col_pre + (col - col_pre) / 2) { - left = col - 2 - scrollLeft + Store.rowHeaderWidth; - luckysheetFreezen.freezenverticaldata = [col, col_index + 1, scrollLeft, luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_index + 1), left]; + if (Math.abs(size - firstcolumlen) < 3) { + return; } - else { - left = col_pre - 2 - scrollLeft + Store.rowHeaderWidth; - luckysheetFreezen.freezenverticaldata = [col_pre, col_index, scrollLeft, luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_index), left]; + + if ((x + 3) - Store.luckysheet_cols_change_size_start[0] < 30) { + size = 30; } - $("#luckysheet-freezebar-vertical").find(".luckysheet-freezebar-vertical-drop").css({ "left": left }); - luckysheetFreezen.saveFreezen(null, null, luckysheetFreezen.freezenverticaldata, left); - luckysheetsizeauto();//调节选区时下部单元格溢出 - } - else if (!!pivotTable && pivotTable.movestate) { - let x = event.pageX, y = event.pageY; - $("#luckysheet-modal-dialog-slider-pivot-move").css({ - "left": x - pivotTable.movesave.width / 2, - "top": y - pivotTable.movesave.height - }); - } - else if (Store.luckysheet_sheet_move_status) { - let scrollLeft = $("#luckysheet-sheet-container-c").scrollLeft(); - let x = event.pageX + scrollLeft; + if (x >= winW - 100 + scrollLeft) { + size = winW - 100 - Store.luckysheet_cols_change_size_start[0] + scrollLeft; + } - if (Math.abs(event.pageX - Store.luckysheet_sheet_move_data.pageX) < 3) { - return; + let cfg = $.extend(true, {}, Store.config); + if (cfg["columlen"] == null) { + cfg["columlen"] = {}; } - let winW = $("#luckysheet-sheet-container").width(); - let left = x - Store.luckysheet_sheet_move_data.curleft - $("#luckysheet-sheet-container").offset().left; - Store.luckysheet_sheet_move_data.activeobject.css({ "left": left }); + cfg["columlen"][Store.luckysheet_cols_change_size_start[1]] = Math.ceil(size); - let row_index = luckysheet_searcharray(Store.luckysheet_sheet_move_data.widthlist, left + Store.luckysheet_sheet_move_data.curleft); - Store.luckysheet_sheet_move_data.cursorobject.css({ "cursor": "move" }); + if (Store.clearjfundo) { + Store.jfundo = []; - if (left - scrollLeft <= 6) { - $("#luckysheet-sheets-leftscroll").click(); + Store.jfredo.push({ + "type": "resize", + "ctrlType": "resizeC", + "config": $.extend(true, {}, Store.config), + "curconfig": $.extend(true, {}, cfg), + "sheetIndex": Store.currentSheetIndex + }); } - if (left - scrollLeft >= winW - 40) { - $("#luckysheet-sheets-rightscroll").click(); - } + //config + Store.config = cfg; + Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)].config = Store.config; - if (row_index != Store.luckysheet_sheet_move_data.curindex) { - if (row_index == -1 && left > 0) { - row_index = Store.luckysheet_sheet_move_data.widthlist.length - 1; - $("#luckysheet-sheets-item-clone").insertAfter($("#luckysheet-sheet-area div.luckysheet-sheets-item:visible").eq(row_index)); - } - else if (row_index == -1 && left <= 0) { - $("#luckysheet-sheets-item-clone").insertBefore($("#luckysheet-sheet-area div.luckysheet-sheets-item:visible").eq(0)); - } - else { - $("#luckysheet-sheets-item-clone").insertAfter($("#luckysheet-sheet-area div.luckysheet-sheets-item:visible").eq(row_index)); - } + server.saveParam("cg", Store.currentSheetIndex, cfg["columlen"], { "k": "columlen" }); - 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]); - } - }); + jfrefreshgrid_rhcw(null, Store.flowdata[0].length); - Store.luckysheet_sheet_move_data.curindex = $("#luckysheet-sheet-area div.luckysheet-sheets-item:visible").index($("#luckysheet-sheets-item-clone")); - } + setTimeout(function () { + luckysheetrefreshgrid(); + }, 1); } - else if (Store.luckysheet_model_move_state) { - let scrollTop = $(document).scrollTop(), scrollLeft = $(document).scrollLeft(); - let y = event.pageY + scrollTop, x = event.pageX + scrollLeft; - let winH = $(window).height(), winW = $(window).width(); - let myh = Store.luckysheet_model_move_obj.height(), - myw = Store.luckysheet_model_move_obj.width(); - let top = y - Store.luckysheet_model_xy[1], - left = x - Store.luckysheet_model_xy[0]; - if (top < 0) { - top = 0; + if (formula.rangeMove) { + formula.rangeMoveDragged(formula.rangeMoveObj); + } + + //改变选择框的位置并替换目标单元格 + if (Store.luckysheet_cell_selected_move) { + $("#luckysheet-cell-selected-move").hide(); + + Store.luckysheet_cell_selected_move = false; + let mouse = mouseposition(event.pageX, event.pageY); + + let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); + let scrollTop = $("#luckysheet-cell-main").scrollTop(); + + let x = mouse[0] + scrollLeft; + let y = mouse[1] + scrollTop; + + let winH = $(window).height() + scrollTop - Store.sheetBarHeight - Store.statisticBarHeight, + winW = $(window).width() + scrollLeft; + + let row_index = rowLocation(y)[2]; + let col_index = colLocation(x)[2]; + + let row_index_original = Store.luckysheet_cell_selected_move_index[0], + col_index_original = Store.luckysheet_cell_selected_move_index[1]; + + if(row_index == row_index_original && col_index == col_index_original){ + return; } - if (top + myh + 62 > winH) { - top = winH - myh - 62; + let d = editor.deepCopyFlowData(Store.flowdata); + let last = Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1]; + + let data = getdatabyselection(last); + + let cfg = $.extend(true, {}, Store.config); + if(cfg["merge"] == null){ + cfg["merge"] = {}; + } + if(cfg["rowlen"] == null){ + cfg["rowlen"] = {}; } - if (left < 0) { - left = 0; + //选区包含部分单元格 + if(hasPartMC(cfg, last["row"][0], last["row"][1], last["column"][0], last["column"][1])){ + if(isEditMode()){ + alert("无法对合并单元格执行此操作"); + } + else{ + tooltip.info('提示',"无法对合并单元格执行此操作"); + } + return; } - if (left + myw + 86 > winW) { - left = winW - myw - 86; + let row_s = last["row"][0] - row_index_original + row_index, + row_e = last["row"][1] - row_index_original + row_index; + let col_s = last["column"][0] - col_index_original + col_index, + col_e = last["column"][1] - col_index_original + col_index; + + if (row_s < 0 || y < 0) { + row_s = 0; + row_e = last["row"][1] - last["row"][0]; } - Store.luckysheet_model_move_obj.css({ "top": top, "left": left }); - event.preventDefault(); - } - else if (!!Store.luckysheet_scroll_status || !!Store.luckysheet_select_status || !!Store.luckysheet_rows_selected_status || !!Store.luckysheet_cols_selected_status || !!Store.luckysheet_cell_selected_move || !!Store.luckysheet_cell_selected_extend || !!Store.luckysheet_cols_change_size || !!Store.luckysheet_rows_change_size || !!formula.rangeResize || !!formula.rangeMove) { - if (Store.luckysheet_select_status) { - clearTimeout(Store.countfuncTimeout); - Store.countfuncTimeout = setTimeout(function () { countfunc() }, 500); + if (col_s < 0 || x < 0) { + col_s = 0; + col_e = last["column"][1] - last["column"][0]; } - - Store.jfautoscrollTimeout = setInterval(function () { - if (Store.luckysheet_scroll_status && !Store.luckysheet_cols_change_size && !Store.luckysheet_rows_change_size) { - let mouse = mouseposition(event.pageX, event.pageY); - let left = $("#luckysheet-scrollbar-x").scrollLeft(), - top = $("#luckysheet-scrollbar-y").scrollTop(); - let x = mouse[0]; - let y = mouse[1]; - let winH = $("#luckysheet-cell-main").height() - 20, - winW = $("#luckysheet-cell-main").width() - 60; - if (y < 0 || y > winH) { - let stop; - if (y < 0) { - stop = top + y/2; - } - else { - stop = top + (y - winH)/2; - } - $("#luckysheet-scrollbar-y").scrollTop(stop); - } + if (row_e >= Store.visibledatarow[Store.visibledatarow.length - 1] || y > winH) { + row_s = Store.visibledatarow.length - 1 - last["row"][1] + last["row"][0]; + row_e = Store.visibledatarow.length - 1; + } - if (x < 0 || x > winW) { - let sleft; - if (x < 0) { - sleft = left + x/2; - } - else { - sleft = left + (x - winW)/2; - } - $("#luckysheet-scrollbar-x").scrollLeft(sleft); - } + if (col_e >= Store.visibledatacolumn[Store.visibledatacolumn.length - 1] || x > winW) { + col_s = Store.visibledatacolumn.length - 1 - last["column"][1] + last["column"][0]; + col_e = Store.visibledatacolumn.length - 1; + } + + //替换的位置包含部分单元格 + if(hasPartMC(cfg, row_s, row_e, col_s, col_e)){ + if(isEditMode()){ + alert("无法对合并单元格执行此操作"); } - if (Store.luckysheet_select_status) { - let mouse = mouseposition(event.pageX, event.pageY); - let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft(); - let y = mouse[1] + $("#luckysheet-cell-main").scrollTop(); + else{ + tooltip.info('提示',"无法对合并单元格执行此操作"); + } + return; + } - 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 borderInfoCompute = getBorderInfoCompute(Store.currentSheetIndex); - let last = $.extend(true, {}, Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1]); + //删除原本位置的数据 + let RowlChange = null; + for (let r = last["row"][0]; r <= last["row"][1]; r++) { + if(r in cfg["rowlen"]){ + RowlChange = true; + } - let top = 0, height = 0, rowseleted = []; - if (last.top > row_pre) { - top = row_pre; - height = last.top + last.height - row_pre; + for (let c = last["column"][0]; c <= last["column"][1]; c++) { + let cell = d[r][c]; - if(last.row[1] > last.row_focus){ - last.row[1] = last.row_focus; + if(getObjType(cell) == "object" && ("mc" in cell)){ + if((cell["mc"].r + "_" + cell["mc"].c) in cfg["merge"]){ + delete cfg["merge"][cell["mc"].r + "_" + cell["mc"].c]; } - - rowseleted = [row_index, last.row[1]]; - } - else if (last.top == row_pre) { - top = row_pre; - height = last.top + last.height - row_pre; - rowseleted = [row_index, last.row[0]]; } - else { - top = last.top; - height = row - last.top - 1; - if(last.row[0] < last.row_focus){ - last.row[0] = last.row_focus; - } + d[r][c] = null; + } + } - rowseleted = [last.row[0], row_index]; - } + //边框 + if(cfg["borderInfo"] && cfg["borderInfo"].length > 0){ + let borderInfo = []; - let left = 0, width = 0, columnseleted = []; - if (last.left > col_pre) { - left = col_pre; - width = last.left + last.width - col_pre; + for(let i = 0; i < cfg["borderInfo"].length; i++){ + let bd_rangeType = cfg["borderInfo"][i].rangeType; - if(last.column[1] > last.column_focus){ - last.column[1] = last.column_focus; + if(bd_rangeType == "range"){ + let bd_range = cfg["borderInfo"][i].range; + let bd_emptyRange = []; + + for(let j = 0; j < bd_range.length; j++){ + bd_emptyRange = bd_emptyRange.concat(conditionformat.CFSplitRange(bd_range[j], {"row": last["row"], "column": last["column"]}, {"row": [row_s, row_e], "column": [col_s, col_e]}, "restPart")); } - columnseleted = [col_index, last.column[1]]; + cfg["borderInfo"][i].range = bd_emptyRange; + + borderInfo.push(cfg["borderInfo"][i]); } - else if (last.left == col_pre) { - left = col_pre; - width = last.left + last.width - col_pre; - columnseleted = [col_index, last.column[0]]; + else if(bd_rangeType == "cell"){ + let bd_r = cfg["borderInfo"][i].value.row_index; + let bd_c = cfg["borderInfo"][i].value.col_index; + + if(!(bd_r >= last["row"][0] && bd_r <= last["row"][1] && bd_c >= last["column"][0] && bd_c <= last["column"][1])){ + borderInfo.push(cfg["borderInfo"][i]); + } } - else { - left = last.left; - width = col - last.left - 1; + } - if(last.column[0] < last.column_focus){ - last.column[0] = last.column_focus; + cfg["borderInfo"] = borderInfo; + } + + //替换位置数据更新 + let offsetMC = {}; + for (let r = 0; r < data.length; r++) { + for (let c = 0; c < data[0].length; c++) { + if(borderInfoCompute[(r + last["row"][0]) + "_" + (c + last["column"][0])]){ + let bd_obj = { + "rangeType": "cell", + "value": { + "row_index": r + row_s, + "col_index": c + col_s, + "l": borderInfoCompute[(r + last["row"][0]) + "_" + (c + last["column"][0])].l, + "r": borderInfoCompute[(r + last["row"][0]) + "_" + (c + last["column"][0])].r, + "t": borderInfoCompute[(r + last["row"][0]) + "_" + (c + last["column"][0])].t, + "b": borderInfoCompute[(r + last["row"][0]) + "_" + (c + last["column"][0])].b + } } - columnseleted = [last.column[0], col_index]; + if(cfg["borderInfo"] == null){ + cfg["borderInfo"] = []; + } + + cfg["borderInfo"].push(bd_obj); } - let changeparam = menuButton.mergeMoveMain(columnseleted, rowseleted, last, top, height, left, width); - if(changeparam != null){ - columnseleted = changeparam[0]; - rowseleted= changeparam[1]; - top = changeparam[2]; - height = changeparam[3]; - left = changeparam[4]; - width = changeparam[5]; + let value = ""; + if (data[r] != null && data[r][c] != null) { + value = data[r][c]; } - last["row"] = rowseleted; - last["column"] = columnseleted; + if(getObjType(value) == "object" && ("mc" in value)){ + let mc = $.extend(true, {}, value["mc"]); + if("rs" in value["mc"]){ + offsetMC[mc.r + "_" + mc.c] = [r + row_s, c + col_s]; - last["left_move"] = left; - last["width_move"] = width; - last["top_move"] = top; - last["height_move"] = height; + value["mc"].r = r + row_s; + value["mc"].c = c + col_s; - Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1] = last; - - selectHightlightShow(); - - luckysheetFreezen.scrollFreezen(); - - $("#luckysheet-helpbox-cell").text(getRangetxt(Store.currentSheetIndex, Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1])); - - //交替颜色选择范围 - if($("#luckysheet-alternateformat-rangeDialog").is(":visible")){ - $("#luckysheet-alternateformat-rangeDialog input").val(getRangetxt(Store.currentSheetIndex, Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1])); + cfg["merge"][(r + row_s) + "_" + (c + col_s)] = value["mc"]; + } + else{ + value["mc"].r = offsetMC[mc.r + "_" + mc.c][0]; + value["mc"].c = offsetMC[mc.r + "_" + mc.c][1]; + } } + d[r + row_s][c + col_s] = value; + } + } - if (pivotTable.luckysheet_pivotTable_select_state) { - $("#luckysheet-pivotTable-range-selection-input").val(Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)].name + "!" + chatatABC(Store.luckysheet_select_save[0]["column"][0]) + (Store.luckysheet_select_save[0]["row"][0] + 1) + ":" + chatatABC(Store.luckysheet_select_save[0]["column"][1]) + (Store.luckysheet_select_save[0]["row"][1] + 1)); + if(RowlChange){ + cfg = rowlenByRange(d, last["row"][0], last["row"][1], cfg); + cfg = rowlenByRange(d, row_s, row_e, cfg); + } + + //条件格式 + let cdformat = $.extend(true, [], Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)]["luckysheet_conditionformat_save"]); + if(cdformat != null && cdformat.length > 0){ + for(let i = 0; i < cdformat.length; i++){ + let cdformat_cellrange = cdformat[i].cellrange; + let emptyRange = []; + for(let j = 0; j < cdformat_cellrange.length; j++){ + let range = conditionformat.CFSplitRange(cdformat_cellrange[j], {"row": last["row"], "column": last["column"]}, {"row": [row_s, row_e], "column": [col_s, col_e]}, "allPart"); + emptyRange = emptyRange.concat(range); } + cdformat[i].cellrange = emptyRange; } - else if(conditionformat.selectStatus){ - let mouse = mouseposition(event.pageX, event.pageY); - let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft(); - let y = mouse[1] + $("#luckysheet-cell-main").scrollTop(); + } - 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 rf; + if(Store.luckysheet_select_save[0].row_focus == Store.luckysheet_select_save[0].row[0]){ + rf = row_s; + } + else{ + rf = row_e; + } - let last = conditionformat.selectRange[conditionformat.selectRange.length - 1]; + let cf; + if(Store.luckysheet_select_save[0].column_focus == Store.luckysheet_select_save[0].column[0]){ + cf = col_s; + } + else{ + cf = col_e; + } - let top = 0, height = 0, rowseleted = []; - if (last.top > row_pre) { - top = row_pre; - height = last.top + last.height - row_pre; + let range = []; + range.push({ "row": last["row"], "column": last["column"] }); + range.push({ "row": [row_s, row_e], "column": [col_s, col_e] }); - if(last.row[1] > last.row_focus){ - last.row[1] = last.row_focus; - } + last["row"] = [row_s, row_e]; + last["column"] = [col_s, col_e]; + last["row_focus"] = rf; + last["column_focus"] = cf; - rowseleted = [row_index, last.row[1]]; - } - else if (last.top == row_pre) { - top = row_pre; - height = last.top + last.height - row_pre; - rowseleted = [row_index, last.row[0]]; - } - else { - top = last.top; - height = row - last.top - 1; + jfrefreshgrid(d, range, cfg, cdformat, RowlChange); - if(last.row[0] < last.row_focus){ - last.row[0] = last.row_focus; - } + selectHightlightShow(); - rowseleted = [last.row[0], row_index]; - } + $("#luckysheet-sheettable").css("cursor", "default"); + clearTimeout(Store.countfuncTimeout); + Store.countfuncTimeout = setTimeout(function () { countfunc() }, 500); + } - let left = 0, width = 0, columnseleted = []; - if (last.left > col_pre) { - left = col_pre; - width = last.left + last.width - col_pre; + //选区下拉 + if (Store.luckysheet_cell_selected_extend) { + Store.luckysheet_cell_selected_extend = false; + $("#luckysheet-cell-selected-extend").hide(); - if(last.column[1] > last.column_focus){ - last.column[1] = last.column_focus; - } + let mouse = mouseposition(event.pageX, event.pageY); + let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); + let scrollTop = $("#luckysheet-cell-main").scrollTop(); - columnseleted = [col_index, last.column[1]]; - } - else if (last.left == col_pre) { - left = col_pre; - width = last.left + last.width - col_pre; - columnseleted = [col_index, last.column[0]]; - } - else { - left = last.left; - width = col - last.left - 1; + let x = mouse[0] + scrollLeft - 5; + let y = mouse[1] + scrollTop - 5; - if(last.column[0] < last.column_focus){ - last.column[0] = last.column_focus; - } + let winH = $(window).height() + scrollTop - Store.sheetBarHeight - Store.statisticBarHeight, + winW = $(window).width() + scrollLeft; - columnseleted = [last.column[0], col_index]; - } + 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 changeparam = menuButton.mergeMoveMain(columnseleted, rowseleted, last, top, height, left, width); - if(changeparam != null){ - columnseleted = changeparam[0]; - rowseleted= changeparam[1]; - top = changeparam[2]; - height = changeparam[3]; - left = changeparam[4]; - width = changeparam[5]; - } + let row_index_original = Store.luckysheet_cell_selected_extend_index[0], + col_index_original = Store.luckysheet_cell_selected_extend_index[1]; - last["row"] = rowseleted; - last["column"] = columnseleted; + let last = Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1]; + let row_s = last["row"][0], row_e = last["row"][1]; + let col_s = last["column"][0], col_e = last["column"][1]; - last["left_move"] = left; - last["width_move"] = width; - last["top_move"] = top; - last["height_move"] = height; + if (row_s < 0 || y < 0) { + row_s = 0; + row_e = last["row"][1] - last["row"][0]; + } - conditionformat.selectRange[conditionformat.selectRange.length - 1] = last; + if (col_s < 0 || x < 0) { + col_s = 0; + col_e = last["column"][1] - last["column"][0]; + } - selectionCopyShow(conditionformat.selectRange); + if (row_e >= Store.visibledatarow[Store.visibledatarow.length - 1] || y > winH) { + row_s = Store.visibledatarow.length - 1 - last["row"][1] + last["row"][0]; + row_e = Store.visibledatarow.length - 1; + } - let range = conditionformat.getTxtByRange(conditionformat.selectRange); - $("#luckysheet-multiRange-dialog input").val(range); - } - else if (formula.rangestart) { - formula.rangedrag(event); - } - else if (formula.rangedrag_row_start) { - formula.rangedrag_row(event); - } - else if (formula.rangedrag_column_start) { - formula.rangedrag_column(event); - } - else if (Store.luckysheet_rows_selected_status) { - let mouse = mouseposition(event.pageX, event.pageY); - let y = mouse[1] + $("#luckysheet-rows-h").scrollTop(); - if (y < 0) { - return false; - } + if (col_e >= Store.visibledatacolumn[Store.visibledatacolumn.length - 1] || x > winW) { + col_s = Store.visibledatacolumn.length - 1 - last["column"][1] + last["column"][0]; + col_e = Store.visibledatacolumn.length - 1; + } - let row_location = rowLocation(y), - row = row_location[1], - row_pre = row_location[0], - row_index = row_location[2]; - let col_index = Store.visibledatacolumn.length - 1, - col = Store.visibledatacolumn[col_index], - col_pre = 0; + //复制范围 + luckysheetDropCell.copyRange = {"row": $.extend(true, [], last["row"]), "column": $.extend(true, [], last["column"])}; + //applyType + let typeItemHide = luckysheetDropCell.typeItemHide(); + + if(!typeItemHide[0] && !typeItemHide[1] && !typeItemHide[2] && !typeItemHide[3] && !typeItemHide[4] && !typeItemHide[5] && !typeItemHide[6]){ + luckysheetDropCell.applyType = "0"; + } + else{ + luckysheetDropCell.applyType = "1"; + } - let last = $.extend(true, {}, Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1]); + if (Math.abs(row_index_original - row_index) > Math.abs(col_index_original - col_index)) { + if (!(row_index >= row_s && row_index <= row_e)) { + if (Store.luckysheet_select_save[0].top_move >= row_pre) {//当往上拖拽时 + luckysheetDropCell.applyRange = {"row": [row_index, last["row"][0] - 1], "column": last["column"]}; + luckysheetDropCell.direction = "up"; - let top = 0, height = 0, rowseleted = []; - if (last.top > row_pre) { - top = row_pre; - height = last.top + last.height - row_pre; + row_s -= last["row"][0] - row_index; - if(last.row[1] > last.row_focus){ - last.row[1] = last.row_focus; + //是否有数据透视表范围 + if(pivotTable.isPivotRange(row_s, col_e)){ + tooltip.info("无法对所选单元格进行此更改,因为它会影响数据透视表!",""); + return; } - - rowseleted = [row_index, last.row[1]]; - } - else if (last.top == row_pre) { - top = row_pre; - height = last.top + last.height - row_pre; - rowseleted = [row_index, last.row[0]]; } - else { - top = last.top; - height = row - last.top - 1; + else {//当往下拖拽时 + luckysheetDropCell.applyRange = {"row": [last["row"][1] + 1, row_index], "column": last["column"]}; + luckysheetDropCell.direction = "down"; - if(last.row[0] < last.row_focus){ - last.row[0] = last.row_focus; - } + row_e += row_index - last["row"][1]; - rowseleted = [last.row[0], row_index]; + //是否有数据透视表范围 + if(pivotTable.isPivotRange(row_e, col_e)){ + tooltip.info("无法对所选单元格进行此更改,因为它会影响数据透视表!",""); + return; + } } + } + else{ + return; + } + } + else { + if (!(col_index >= col_s && col_index <= col_e)) { + if (Store.luckysheet_select_save[0].left_move >= col_pre) {//当往左拖拽时 + luckysheetDropCell.applyRange = {"row": last["row"], "column": [col_index, last["column"][0] - 1]}; + luckysheetDropCell.direction = "left"; - last["row"] = rowseleted; - - last["top_move"] = top; - last["height_move"] = height; - - Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1] = last; + col_s -= last["column"][0] - col_index; - selectHightlightShow(); - - clearTimeout(Store.countfuncTimeout); - Store.countfuncTimeout = setTimeout(function () { countfunc() }, 500); - } - else if (Store.luckysheet_cols_selected_status) { - let mouse = mouseposition(event.pageX, event.pageY); - let x = mouse[0] + $("#luckysheet-cols-h-c").scrollLeft(); - if (x < 0) { - return false; + //是否有数据透视表范围 + if(pivotTable.isPivotRange(row_e, col_s)){ + tooltip.info("无法对所选单元格进行此更改,因为它会影响数据透视表!",""); + return; + } } + else {//当往右拖拽时 + luckysheetDropCell.applyRange = {"row": last["row"], "column": [last["column"][1] + 1, col_index]}; + luckysheetDropCell.direction = "right"; - let row_index = Store.visibledatarow.length - 1, - row = Store.visibledatarow[row_index], - row_pre = 0; - let col_location = colLocation(x), - col = col_location[1], - col_pre = col_location[0], - col_index = col_location[2]; + col_e += col_index - last["column"][1]; - let last = $.extend(true, {}, Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1]); + //是否有数据透视表范围 + if(pivotTable.isPivotRange(row_e, col_e)){ + tooltip.info("无法对所选单元格进行此更改,因为它会影响数据透视表!",""); + return; + } + } + } + else{ + return; + } + } - let left = 0, width = 0, columnseleted = []; - if (last.left > col_pre) { - left = col_pre; - width = last.left + last.width - col_pre; + if(Store.config["merge"] != null){ + let hasMc = false; - if(last.column[1] > last.column_focus){ - last.column[1] = last.column_focus; + for(let r = last["row"][0]; r <= last["row"][1]; r++){ + for(let c = last["column"][0]; c <= last["column"][1]; c++){ + let cell = Store.flowdata[r][c]; + + if(cell != null && cell.mc != null){ + hasMc = true; + break; } + } + } - columnseleted = [col_index, last.column[1]]; + if(hasMc){ + if(isEditMode()){ + alert("无法对合并单元格执行此操作"); } - else if (last.left == col_pre) { - left = col_pre; - width = last.left + last.width - col_pre; - columnseleted = [col_index, last.column[0]]; + else{ + tooltip.info("无法对合并单元格执行此操作", ""); } - else { - left = last.left; - width = col - last.left - 1; - - if(last.column[0] < last.column_focus){ - last.column[0] = last.column_focus; - } - columnseleted = [last.column[0], col_index]; - } + return; + } - last["column"] = columnseleted; + for(let r = row_s; r <= row_e; r++){ + for(let c = col_s; c <= col_e; c++){ + let cell = Store.flowdata[r][c]; - last["left_move"] = left; - last["width_move"] = width; + if(cell != null && cell.mc != null){ + hasMc = true; + break; + } + } + } - Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1] = last; + if(hasMc){ + if(isEditMode()){ + alert("无法对合并单元格执行此操作"); + } + else{ + tooltip.info("无法对合并单元格执行此操作", ""); + } - selectHightlightShow(); - - clearTimeout(Store.countfuncTimeout); - Store.countfuncTimeout = setTimeout(function () { countfunc() }, 500); + return; } - else if (Store.luckysheet_cell_selected_move) { - let mouse = mouseposition(event.pageX, event.pageY); + } - let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); - let scrollTop = $("#luckysheet-cell-main").scrollTop(); + last["row"] = [row_s, row_e]; + last["column"] = [col_s, col_e]; - let x = mouse[0] + scrollLeft; - let y = mouse[1] + scrollTop; + luckysheetDropCell.update(); + luckysheetDropCell.createIcon(); - let winH = $(window).height() + scrollTop - Store.sheetBarHeight - Store.statisticBarHeight, - winW = $(window).width() + scrollLeft; + $("#luckysheet-cell-selected-move").hide(); - 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]; + $("#luckysheet-sheettable").css("cursor", "default"); + clearTimeout(Store.countfuncTimeout); + Store.countfuncTimeout = setTimeout(function () { countfunc() }, 500); + } + }); - let row_index_original = Store.luckysheet_cell_selected_move_index[0], - col_index_original = Store.luckysheet_cell_selected_move_index[1]; + //禁止浏览器 右键默认菜单 + $(".luckysheet-grid-container, #luckysheet-rightclick-menu").on("contextmenu", function (e) { + e.preventDefault(); + }); - let row_s = Store.luckysheet_select_save[0]["row"][0] - row_index_original + row_index, - row_e = Store.luckysheet_select_save[0]["row"][1] - row_index_original + row_index; + //禁止前台编辑(只可 框选单元格、滚动查看表格) + if(!Store.allowEdit){ + return; + } - let col_s = Store.luckysheet_select_save[0]["column"][0] - col_index_original + col_index, - col_e = Store.luckysheet_select_save[0]["column"][1] - col_index_original + col_index; + //选区拖动替换 + $("#luckysheet-cell-main div.luckysheet-cs-draghandle").mousedown(function (event) { + if(isEditMode()){//此模式下禁用选区拖动 + return; + } - if (row_s < 0 || y < 0) { - row_s = 0; - row_e = Store.luckysheet_select_save[0]["row"][1] - Store.luckysheet_select_save[0]["row"][0]; - } + $("#luckysheet-cell-selected").find(".luckysheet-cs-fillhandle") + .css("cursor","move") + .end() + .find(".luckysheet-cs-draghandle") + .css("cursor","move"); + $("#luckysheet-cell-main, #luckysheetTableContent, #luckysheet-sheettable_0").css("cursor","move"); - if (col_s < 0 || x < 0) { - col_s = 0; - col_e = Store.luckysheet_select_save[0]["column"][1] - Store.luckysheet_select_save[0]["column"][0]; - } + Store.luckysheet_cell_selected_move = true; + Store.luckysheet_scroll_status = true; - if (row_e >= Store.visibledatarow[Store.visibledatarow.length - 1] || y > winH) { - row_s = Store.visibledatarow.length - 1 - Store.luckysheet_select_save[0]["row"][1] + Store.luckysheet_select_save[0]["row"][0]; - row_e = Store.visibledatarow.length - 1; - } + let mouse = mouseposition(event.pageX, event.pageY); + let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft(); + let y = mouse[1] + $("#luckysheet-cell-main").scrollTop(); - if (col_e >= Store.visibledatacolumn[Store.visibledatacolumn.length - 1] || x > winW) { - col_s = Store.visibledatacolumn.length - 1 - Store.luckysheet_select_save[0]["column"][1] + Store.luckysheet_select_save[0]["column"][0]; - col_e = Store.visibledatacolumn.length - 1; - } + let row_location = rowLocation(y), + row_pre = row_location[0], + row = row_location[1], + row_index = row_location[2]; + let col_location = colLocation(x), + col_pre = col_location[0], + col = col_location[1], + col_index = col_location[2]; - col_pre = col_s - 1 == -1 ? 0 : Store.visibledatacolumn[col_s - 1]; - col = Store.visibledatacolumn[col_e]; - row_pre = row_s - 1 == -1 ? 0 : Store.visibledatarow[row_s - 1]; - row = Store.visibledatarow[row_e]; + Store.luckysheet_cell_selected_move_index = [row_index, col_index]; - $("#luckysheet-cell-selected-move").css({ - "left": col_pre, - "width": col - col_pre - 2, - "top": row_pre, - "height": row - row_pre - 2, - "display": "block" - }); - } - else if (Store.luckysheet_cell_selected_extend) { - let mouse = mouseposition(event.pageX, event.pageY); - let scrollLeft = $("#luckysheet-cell-main").scrollLeft() - 5; - let scrollTop = $("#luckysheet-cell-main").scrollTop() - 5; + $("#luckysheet-cell-selected-move").css({ + "left": col_pre, + "width": col - col_pre - 1, + "top": row_pre, + "height": row - row_pre - 1, + "display": "block" + }); - let x = mouse[0] + scrollLeft; - let y = mouse[1] + scrollTop; + event.stopPropagation(); + }); - let winH = $(window).height() + scrollTop - Store.sheetBarHeight - Store.statisticBarHeight, - winW = $(window).width() + scrollLeft; + //选区下拉 + $("#luckysheet-cell-main div.luckysheet-cs-fillhandle").mousedown(function (event) { + if(isEditMode()){//此模式下禁用选区下拉 + return; + } - 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]; + $("#luckysheet-cell-selected").find(".luckysheet-cs-fillhandle") + .css("cursor","crosshair") + .end() + .find(".luckysheet-cs-draghandle") + .css("cursor","crosshair"); + $("#luckysheet-cell-main, #luckysheetTableContent, #luckysheet-sheettable_0").css("cursor","crosshair"); - let row_index_original = Store.luckysheet_cell_selected_extend_index[0], - col_index_original = Store.luckysheet_cell_selected_extend_index[1]; + Store.luckysheet_cell_selected_extend_time = setTimeout(function () { + Store.luckysheet_cell_selected_extend = true; + Store.luckysheet_scroll_status = true; - let row_s = Store.luckysheet_select_save[0]["row"][0], - row_e = Store.luckysheet_select_save[0]["row"][1]; - let col_s = Store.luckysheet_select_save[0]["column"][0], - col_e = Store.luckysheet_select_save[0]["column"][1]; + let mouse = mouseposition(event.pageX, event.pageY); + let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft() - 5; + let y = mouse[1] + $("#luckysheet-cell-main").scrollTop() - 5; - if (row_s < 0 || y < 0) { - row_s = 0; - row_e = Store.luckysheet_select_save[0]["row"][1] - Store.luckysheet_select_save[0]["row"][0]; - } + let row_location = rowLocation(y), + row_pre = row_location[0], + row = row_location[1], + row_index = row_location[2]; + let col_location = colLocation(x), + col_pre = col_location[0], + col = col_location[1], + col_index = col_location[2]; - if (col_s < 0 || x < 0) { - col_s = 0; - col_e = Store.luckysheet_select_save[0]["column"][1] - Store.luckysheet_select_save[0]["column"][0]; - } + Store.luckysheet_cell_selected_extend_index = [row_index, col_index]; - if (row_e >= Store.visibledatarow[Store.visibledatarow.length - 1] || y > winH) { - row_s = Store.visibledatarow.length - 1 - Store.luckysheet_select_save[0]["row"][1] + Store.luckysheet_select_save[0]["row"][0]; - row_e = Store.visibledatarow.length - 1; - } + $("#luckysheet-cell-selected-extend").css({ + "left": col_pre, + "width": col - col_pre - 1, + "top": row_pre, + "height": row - row_pre - 1, + "display": "block" + }); + }, 100); - if (col_e >= Store.visibledatacolumn[Store.visibledatacolumn.length - 1] || x > winW) { - col_s = Store.visibledatacolumn.length - 1 - Store.luckysheet_select_save[0]["column"][1] + Store.luckysheet_select_save[0]["column"][0]; - col_e = Store.visibledatacolumn.length - 1; + event.stopPropagation(); + }).click(function () { + clearTimeout(Store.luckysheet_cell_selected_extend_time); + event.stopPropagation(); + }).dblclick(function () { + let last = Store.luckysheet_select_save[0]; + + let r0 = last.row[0], + r1 = last.row[1], + c0 = last.column[0], + c1 = last.column[1]; + + if(pivotTable.isPivotRange(r0, c0)){ + return; + } + + let dropCellState = false; + let step = 0; + + for(let r = r1 + 1; r < Store.flowdata.length; r++){ + if(c0 - 1 >= 0 && c1 + 1 < Store.flowdata[0].length){ + let cell1 = Store.flowdata[r][c0 - 1]; + let cell2 = Store.flowdata[r][c1 + 1]; + + if(r == r1 + 1){ + if((cell1 == null || isRealNull(cell1.v)) && (cell2 == null || isRealNull(cell2.v))){ + dropCellState = false; + break; + } + else{ + dropCellState = true; + step++; + } + } + else{ + if((cell1 == null || isRealNull(cell1.v)) && (cell2 == null || isRealNull(cell2.v))){ + break; } - let top = Store.luckysheet_select_save[0].top_move, - height = Store.luckysheet_select_save[0].height_move; - let left = Store.luckysheet_select_save[0].left_move, - width = Store.luckysheet_select_save[0].width_move; + step++; + } + } + else if(c0 - 1 >= 0){ + let cell = Store.flowdata[r][c0 - 1]; - if (Math.abs(row_index_original - row_index) > Math.abs(col_index_original - col_index)) { - if (!(row_index >= row_s && row_index <= row_e)) { - if (Store.luckysheet_select_save[0].top_move >= row_pre) { - top = row_pre; - height = Store.luckysheet_select_save[0].top_move + Store.luckysheet_select_save[0].height_move - row_pre; - } - else { - top = Store.luckysheet_select_save[0].top_move; - height = row - Store.luckysheet_select_save[0].top_move - 1; - } - } + if(r == r1 + 1){ + if(cell == null || isRealNull(cell.v)){ + dropCellState = false; + break; } - else { - if (!(col_index >= col_s && col_index <= col_e)) { - if (Store.luckysheet_select_save[0].left_move >= col_pre) { - left = col_pre; - width = Store.luckysheet_select_save[0].left_move + Store.luckysheet_select_save[0].width_move - col_pre; - } - else { - left = Store.luckysheet_select_save[0].left_move; - width = col - Store.luckysheet_select_save[0].left_move - 1; - } - } + else{ + dropCellState = true; + step++; + } + } + else{ + if(cell == null || isRealNull(cell.v)){ + break; } - $("#luckysheet-cell-selected-extend").css({ - "left": left, - "width": width, - "top": top, - "height": height, - "display": "block" - }); + step++; } - else if (Store.luckysheet_cols_change_size) { - let mouse = mouseposition(event.pageX, event.pageY); - let scrollLeft = $("#luckysheet-cols-h-c").scrollLeft(); - let x = mouse[0] + scrollLeft; - let winW = $(window).width(); + } + else if(c1 + 1 < Store.flowdata[0].length){ + let cell = Store.flowdata[r][c1 + 1]; - let row_index = Store.visibledatarow.length - 1, - row = Store.visibledatarow[row_index], - row_pre = 0; - let col_location = colLocation(x), - col = col_location[1], - col_pre = col_location[0], - col_index = col_location[2]; - - if ((x + 3) - Store.luckysheet_cols_change_size_start[0] > 30 && x < winW + scrollLeft - 100) { - $("#luckysheet-change-size-line").css({ "left": x }); - $("#luckysheet-cols-change-size").css({ "left": x - 2 }); + if(r == r1 + 1){ + if(cell == null || isRealNull(cell.v)){ + dropCellState = false; + break; + } + else{ + dropCellState = true; + step++; } } - else if (Store.luckysheet_rows_change_size) { - let mouse = mouseposition(event.pageX, event.pageY); - let scrollTop = $("#luckysheet-rows-h").scrollTop(); - let y = mouse[1] + scrollTop; - let winH = $(window).height(); + else{ + if(cell == null || isRealNull(cell.v)){ + break; + } - let row_location = rowLocation(y), - row = row_location[1], - row_pre = row_location[0], - row_index = row_location[2]; - - if ((y + 3) - Store.luckysheet_rows_change_size_start[0] > 19 && y < winH + scrollTop - 200) { - $("#luckysheet-change-size-line").css({ "top": y }); - $("#luckysheet-rows-change-size").css({ "top": y }); + step++; + } + } + } + + if(!dropCellState || step == 0){ + event.stopPropagation(); + return; + } + + //复制范围 + luckysheetDropCell.copyRange = { "row": [r0, r1], "column": [c0, c1] }; + + //applyType + let typeItemHide = luckysheetDropCell.typeItemHide(); + + if(!typeItemHide[0] && !typeItemHide[1] && !typeItemHide[2] && !typeItemHide[3] && !typeItemHide[4] && !typeItemHide[5] && !typeItemHide[6]){ + luckysheetDropCell.applyType = "0"; + } + else{ + luckysheetDropCell.applyType = "1"; + } + + luckysheetDropCell.applyRange = { "row": [r1 + 1, r1 + step], "column": [c0, c1] }; + luckysheetDropCell.direction = "down"; + + Store.luckysheet_select_save = [{ "row": [r0, r1 + step], "column": [c0, c1] }]; + + luckysheetDropCell.update(); + luckysheetDropCell.createIcon(); + + $("#luckysheet-cell-selected-move").hide(); + + $("#luckysheet-sheettable").css("cursor", "default"); + clearTimeout(Store.countfuncTimeout); + Store.countfuncTimeout = setTimeout(function () { countfunc() }, 500); + + event.stopPropagation(); + }); + + // + $("#luckysheet-bottom-add-row, #luckysheet-bottom-add-row-input, #luckysheet-bottom-return-top").on("mousedown dblclick mouseup",function(e){ + e.stopPropagation(); + }); + + //底部添加行按钮 + $("#luckysheet-bottom-add-row").on("click", function(e) { + $("#luckysheet-rightclick-menu").hide(); + $("#" + Store.container).attr("tabindex", 0).focus(); + + let $t = $(this), value = $("#luckysheet-bottom-add-row-input").val(); + + if(value == ""){ + value = 100; + } + + if (isNaN(parseInt(value))) { + if(isEditMode()){ + alert("请输入数字"); + } + else{ + tooltip.info("增加错误", "请输入数字"); + } + return; + } + + value = parseInt(value); + if (value < 1 || value > 100) { + if(isEditMode()){ + alert("增加范围限制在1-100"); + } + else{ + tooltip.info("增加错误", "增加范围限制在1-100"); + } + return; + } + + luckysheetextendtable("row", Store.flowdata.length - 1, value); + }); + + $("#luckysheet-bottom-return-top").on("click", function(e) { + $("#luckysheet-scrollbar-y").scrollTop(0); + }); + + //单元格编辑输入 + let luckysheet_shiftkeydown = false; + + $("#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); + } } } - else if (luckysheetPostil.move){ - let mouse = mouseposition(event.pageX, event.pageY); - let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft(); - let y = mouse[1] + $("#luckysheet-cell-main").scrollTop(); + } + + 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; + } - let myh = luckysheetPostil.currentObj.outerHeight(), - myw = luckysheetPostil.currentObj.outerWidth(); - - let top = y - luckysheetPostil.moveXY[1], - left = x - luckysheetPostil.moveXY[0]; + //Ctrl + shift + 方向键 调整选区 + if (kcode == keycode.UP) { + if (parseInt($inputbox.css("top")) > 0 || $("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")) { + return; + } - if (top < 0) { - top = 0; + 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; + } - if (top + myh + 42 + 6 > luckysheetPostil.currentWinH) { - top = luckysheetPostil.currentWinH - myh - 42 - 6; + 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; + } - if (left < 0) { - left = 0; + 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; + } - if (left + myw + 22 + 36 > luckysheetPostil.currentWinW) { - left = luckysheetPostil.currentWinW - myw - 22 - 36; + luckysheetMoveHighlightRange2("right", "rangeOfSelect"); } - - luckysheetPostil.currentObj.css({ "left": left, "top": top }); } - else if (!!luckysheetPostil.resize){ - let mouse = mouseposition(event.pageX, event.pageY); - let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft(); - let y = mouse[1] + $("#luckysheet-cell-main").scrollTop(); - - if (x < 0 || y < 0) { - return false; + else if (kcode == 66) {//Ctrl + B 加粗 + $("#luckysheet-icon-bold").click(); + } + else if (kcode == 67) {//Ctrl + C 复制 + //复制时存在格式刷状态,取消格式刷 + if(menuButton.luckysheetPaintModelOn){ + menuButton.cancelPaintModel(); } - - let resizeXY = luckysheetPostil.resizeXY; - - let topchange = y - resizeXY[1], - leftchange = x - resizeXY[0]; - let top = resizeXY[5], - height = resizeXY[3], - left = resizeXY[4], - width = resizeXY[2]; + if(Store.luckysheet_select_save.length == 0){ + return; + } - let resize = luckysheetPostil.resize; + //复制范围内包含部分合并单元格,提示 + if(Store.config["merge"] != null){ + let has_PartMC = false; - if(resize == "lm" || resize == "lt" || resize == "lb"){ - left = x; - width = resizeXY[2] - leftchange; + 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]; - if(left > resizeXY[2] + resizeXY[4] - 60){ - left = resizeXY[2] + resizeXY[4] - 60; - width = resizeXY[2] - (resizeXY[2] + resizeXY[4] - 60 - resizeXY[0]); + has_PartMC = hasPartMC(Store.config, r1, r2, c1, c2); + + if(has_PartMC){ + break; + } } - else if(left <= 0){ - left = 0; - width = resizeXY[2] + resizeXY[0]; + + if(has_PartMC){ + if(isEditMode()){ + alert("无法对部分合并单元格执行此操作"); + } + else{ + tooltip.info("无法对部分合并单元格执行此操作", ""); + } + return; } } - if(resize == "rm" || resize == "rt" || resize == "rb"){ - width = resizeXY[2] + leftchange; + //多重选区 有条件格式时 提示 + 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; - if(width < 60){ - width = 60; - } - else if(width >= luckysheetPostil.currentWinW - resizeXY[4] - 22 - 36){ - width = luckysheetPostil.currentWinW - resizeXY[4] - 22 - 36; - } - } + let cf_compute = conditionformat.getComputeMap(); - if(resize == "mt" || resize == "lt" || resize == "rt"){ - top = y; - height = resizeXY[3] - topchange; + 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]; - if(top > resizeXY[3] + resizeXY[5] - 60){ - top = resizeXY[3] + resizeXY[5] - 60; - height = resizeXY[3] - (resizeXY[3] + resizeXY[5] - 60 - resizeXY[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; + } + } + } } - else if(top <= 0){ - top = 0; - height = resizeXY[3] + resizeXY[1]; + + if(hasCF){ + if(isEditMode()){ + alert("无法对多重选择区域执行此操作"); + } + else{ + tooltip.info("无法对多重选择区域执行此操作", ""); + } + return; } } - if(resize == "mb" || resize == "lb" || resize == "rb"){ - height = resizeXY[3] + topchange; - - if(height < 60){ - height = 60; - } - else if(height >= luckysheetPostil.currentWinH - resizeXY[5] - 42 - 6){ - height = luckysheetPostil.currentWinH - resizeXY[5] - 42 - 6; + //多重选区 行不一样且列不一样时 提示 + 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("无法对多重选择区域执行此操作"); + } + else{ + tooltip.info("无法对多重选择区域执行此操作", ""); + } + return; + } } - luckysheetPostil.currentObj.css({ "width": width, "height": height, "left": left, "top": top }); - } - else if (!!formula.rangeResize) { - formula.rangeResizeDraging(event, formula.rangeResizeObj, formula.rangeResizexy, formula.rangeResize, formula.rangeResizeWinW, formula.rangeResizeWinH, Store.ch_width, Store.rh_height); - } - else if (!!formula.rangeMove) { - formula.rangeMoveDraging(event, formula.rangeMovexy, formula.rangeMoveObj.data("range"), formula.rangeMoveObj, Store.sheetBarHeight, Store.statisticBarHeight); - } - }, 1); - } - }); - - //表格mouseup - $(document).mouseup(function (event) { - //数据窗格主体 - if (Store.luckysheet_select_status) { - clearTimeout(Store.countfuncTimeout); - Store.countfuncTimeout = setTimeout(function(){ - countfunc(); - }, 0); + selection.copy(event); - //格式刷 - if(menuButton.luckysheetPaintModelOn){ - selection.pasteHandlerOfPaintModel(Store.luckysheet_copy_save); + Store.luckysheet_paste_iscut = false; + luckysheetactiveCell(); - if(menuButton.luckysheetPaintSingle){ - //单次 格式刷 - menuButton.cancelPaintModel(); + event.stopPropagation(); + return; } - } - } - - Store.luckysheet_select_status = false; - clearTimeout(Store.jfautoscrollTimeout); - Store.luckysheet_scroll_status = false; - - $("#luckysheet-cell-selected").find(".luckysheet-cs-fillhandle").css("cursor","crosshair").end().find(".luckysheet-cs-draghandle").css("cursor","move"); - $("#luckysheet-cell-main, #luckysheetTableContent, #luckysheet-sheettable_0").css("cursor","default"); - - //行标题窗格主体 - Store.luckysheet_rows_selected_status = false; - - //列标题窗格主体 - Store.luckysheet_cols_selected_status = false; - - Store.luckysheet_model_move_state = false; - - if(formula.functionResizeStatus){ - formula.functionResizeStatus = false; - $("#luckysheet-wa-calculate-size").removeAttr("style"); - } - - if (!!luckysheetFreezen.horizontalmovestate) { - luckysheetFreezen.horizontalmovestate = false; - $("#luckysheet-freezebar-horizontal").removeClass("luckysheet-freezebar-active"); - $("#luckysheet-freezebar-horizontal").find(".luckysheet-freezebar-horizontal-handle").css("cursor", "-webkit-grab"); - if (luckysheetFreezen.freezenhorizontaldata[4] <= Store.columeHeaderHeight) { - luckysheetFreezen.cancelFreezenHorizontal(); - } - luckysheetFreezen.createAssistCanvas(); - luckysheetrefreshgrid(); - } - - if (!!luckysheetFreezen.verticalmovestate) { - luckysheetFreezen.verticalmovestate = false; - $("#luckysheet-freezebar-vertical").removeClass("luckysheet-freezebar-active"); - $("#luckysheet-freezebar-vertical").find(".luckysheet-freezebar-vertical-handle").css("cursor", "-webkit-grab"); - if (luckysheetFreezen.freezenverticaldata[4] <= Store.rowHeaderWidth) { - luckysheetFreezen.cancelFreezenVertical(); - } - luckysheetFreezen.createAssistCanvas(); - luckysheetrefreshgrid(); - } + else if (kcode == 70) {//Ctrl + F 查找 + searchReplace.createDialog(0); + searchReplace.init(); - if (!!pivotTable && pivotTable.movestate) { - $("#luckysheet-modal-dialog-slider-pivot-move").remove(); - pivotTable.movestate = false; - $("#luckysheet-modal-dialog-pivotTable-list, #luckysheet-modal-dialog-config-filter, #luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column, #luckysheet-modal-dialog-config-value").css("cursor", "default"); - - if (pivotTable.movesave.containerid != "luckysheet-modal-dialog-pivotTable-list") { - let $cur = $(event.target).closest(".luckysheet-modal-dialog-slider-config-list"); - if ($cur.length == 0) { - if (pivotTable.movesave.containerid == "luckysheet-modal-dialog-config-value") { - pivotTable.resetOrderby(pivotTable.movesave.obj); - } + $("#luckysheet-search-replace #searchInput input").focus(); + } + else if (kcode == 72) {//Ctrl + H 替换 + searchReplace.createDialog(1); + searchReplace.init(); - pivotTable.movesave.obj.remove(); - pivotTable.showvaluecolrow(); - - $("#luckysheet-modal-dialog-pivotTable-list").find(".luckysheet-modal-dialog-slider-list-item").each(function () { - $(this).find(".luckysheet-slider-list-item-selected").find("i").remove(); - }); + $("#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; + } - $("#luckysheet-modal-dialog-config-filter, #luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column, #luckysheet-modal-dialog-config-value").find(".luckysheet-modal-dialog-slider-config-item").each(function () { - let index = $(this).data("index"); + if($(event.target).hasClass("formulaInputFocus")){ + return; + } - $("#luckysheet-modal-dialog-pivotTable-list").find(".luckysheet-modal-dialog-slider-list-item").each(function () { - let $seleted = $(this).find(".luckysheet-slider-list-item-selected"); - if ($(this).data("index") == index && $seleted.find("i").length == 0) { - $seleted.append(''); - } - }); + if(Store.luckysheet_select_save.length > 1){ + if(isEditMode()){ + alert("无法在此处粘贴此内容,请选择粘贴区域的一个单元格,然后再次尝试粘贴"); + } + else{ + tooltip.info("无法在此处粘贴此内容,请选择粘贴区域的一个单元格,然后再次尝试粘贴", ""); + } + return; + } - }); + selection.isPasteAction = true; + luckysheetactiveCell(); - pivotTable.refreshPivotTable(); + event.stopPropagation(); + return; } - } - } + else if (kcode == 88) {//Ctrl + X 剪切 + //复制时存在格式刷状态,取消格式刷 + if(menuButton.luckysheetPaintModelOn){ + menuButton.cancelPaintModel(); + } - if (Store.luckysheet_sheet_move_status) { - Store.luckysheet_sheet_move_status = false; - Store.luckysheet_sheet_move_data.activeobject.insertBefore($("#luckysheet-sheets-item-clone")); - Store.luckysheet_sheet_move_data.activeobject.removeAttr("style"); - $("#luckysheet-sheets-item-clone").remove(); - Store.luckysheet_sheet_move_data.cursorobject.css({ "cursor": "pointer" }); - Store.luckysheet_sheet_move_data = {}; - sheetmanage.reOrderAllSheet(); - } + if(Store.luckysheet_select_save.length == 0){ + return; + } - if (!!formula.rangeResize) { - formula.rangeResizeDragged(event, formula.rangeResizeObj, formula.rangeResize, formula.rangeResizexy, formula.rangeResizeWinW, formula.rangeResizeWinH); - } + //复制范围内包含部分合并单元格,提示 + if(Store.config["merge"] != null){ + let has_PartMC = false; - //批注框 移动 - if (luckysheetPostil.move) { - luckysheetPostil.move = 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]; - let ps_id = luckysheetPostil.currentObj.closest(".luckysheet-postil-show").attr("id"); + has_PartMC = hasPartMC(Store.config, r1, r2, c1, c2); - let ps_r = ps_id.split("luckysheet-postil-show_")[1].split("_")[0]; - let ps_c = ps_id.split("luckysheet-postil-show_")[1].split("_")[1]; + if(has_PartMC){ + break; + } + } - let d = editor.deepCopyFlowData(Store.flowdata); - let rc = []; + if(has_PartMC){ + if(luckysheetConfigsetting.editMode){ + alert("无法对合并单元格执行此操作"); + } + else{ + tooltip.info("无法对合并单元格执行此操作", ""); + } + return; + } + } - d[ps_r][ps_c].ps.left = luckysheetPostil.currentObj.position().left; - d[ps_r][ps_c].ps.top = luckysheetPostil.currentObj.position().top; - d[ps_r][ps_c].ps.value = luckysheetPostil.currentObj.find(".formulaInputFocus").text(); + //多重选区时 提示 + if(Store.luckysheet_select_save.length > 1){ + if(isEditMode()){ + alert("不能对多重选择区域执行此操作,请选择单个区域,然后再试"); + } + else{ + tooltip.info("不能对多重选择区域执行此操作,请选择单个区域,然后再试", ""); + } + return; + } - rc.push(ps_r + "_" + ps_c); + selection.copy(event); - luckysheetPostil.ref(d, rc); + 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; + } - $("#" + ps_id).remove(); + 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; + } - if(d[ps_r][ps_c].ps.isshow){ - luckysheetPostil.buildPs(ps_r, ps_c, d[ps_r][ps_c].ps); - $("#" + ps_id).addClass("luckysheet-postil-show-active"); - $("#" + ps_id).find(".luckysheet-postil-dialog-resize").show(); - } - else{ - luckysheetPostil.editPs(ps_r, ps_c); - } - } + 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; + } - //批注框 改变大小 - if (!!luckysheetPostil.resize) { - luckysheetPostil.resize = null; + 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; + } - let ps_id = luckysheetPostil.currentObj.closest(".luckysheet-postil-show").attr("id"); + luckysheetMoveHighlightCell2("right", "rangeOfSelect"); + } + else if (String.fromCharCode(kcode).toLocaleUpperCase() == "A") {//Ctrl + A 全选 + $("#luckysheet-left-top").trigger("mousedown"); + $(document).trigger("mouseup"); + } - let ps_r = ps_id.split("luckysheet-postil-show_")[1].split("_")[0]; - let ps_c = ps_id.split("luckysheet-postil-show_")[1].split("_")[1]; + 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; + } - let d = editor.deepCopyFlowData(Store.flowdata); - let rc = []; + if (!luckysheet_shiftkeydown) { + Store.luckysheet_shiftpositon = $.extend(true, {}, Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1]); + Store.luckysheet_shiftkeydown = true; + } - d[ps_r][ps_c].ps.left = luckysheetPostil.currentObj.position().left; - d[ps_r][ps_c].ps.top = luckysheetPostil.currentObj.position().top; - d[ps_r][ps_c].ps.width = luckysheetPostil.currentObj.outerWidth(); - d[ps_r][ps_c].ps.height = luckysheetPostil.currentObj.outerHeight(); - d[ps_r][ps_c].ps.value = luckysheetPostil.currentObj.find(".formulaInputFocus").text(); + //shift + 方向键 调整选区 + if (kcode == keycode.UP) { + if($("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")){ + return; + } - rc.push(ps_r + "_" + ps_c); + luckysheetMoveHighlightRange("down", -1, "rangeOfSelect"); + } + else if (kcode == keycode.DOWN) { + if($("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")){ + return; + } - luckysheetPostil.ref(d, rc); + luckysheetMoveHighlightRange("down", 1, "rangeOfSelect"); + } + else if (kcode == keycode.LEFT) { + if($("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")){ + return; + } - $("#" + ps_id).remove(); + 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(); + } - if(d[ps_r][ps_c].ps.isshow){ - luckysheetPostil.buildPs(ps_r, ps_c, d[ps_r][ps_c].ps); - $("#" + ps_id).addClass("luckysheet-postil-show-active"); - $("#" + ps_id).find(".luckysheet-postil-dialog-resize").show(); - } - else{ - luckysheetPostil.editPs(ps_r, ps_c); + event.preventDefault(); } - } + else if (kcode == keycode.ESC) { + if(menuButton.luckysheetPaintModelOn){ + menuButton.cancelPaintModel(); + } + else{ + cleargridelement(event); + event.preventDefault(); + } - //改变行高 - if (Store.luckysheet_rows_change_size) { - Store.luckysheet_rows_change_size = false; + selectHightlightShow(); + } + else if (kcode == keycode.DELETE) { + $("#luckysheet-delete-text").click(); - $("#luckysheet-change-size-line").hide(); - $("#luckysheet-rows-change-size").css("opacity", 0); - $("#luckysheet-sheettable, #luckysheet-rows-h, #luckysheet-rows-h canvas").css("cursor", "default"); + 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; + } - let mouse = mouseposition(event.pageX, event.pageY); - let scrollTop = $("#luckysheet-rows-h").scrollTop(); - let y = mouse[1] + scrollTop; - let winH = $(window).height(); + 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; + } - let row_location = rowLocation(y), - row = row_location[1], - row_pre = row_location[0], - row_index = row_location[2]; - - let size = (y + 3) - Store.luckysheet_rows_change_size_start[0]; + 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; + } - if ((y + 3) - Store.luckysheet_rows_change_size_start[0] < 19) { - size = 19; + 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; + } - if (y >= winH - 200 + scrollTop) { - size = winW - 200 - Store.luckysheet_rows_change_size_start[0] + scrollTop; + 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 cfg = $.extend(true, {}, Store.config); - if (cfg["rowlen"] == null) { - cfg["rowlen"] = {}; + 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("
"); + } + formula.functionInputHanddler($("#luckysheet-functionbox-cell"), $("#luckysheet-rich-text-editor"), kcode); + } } + } + + luckysheetactiveCell(); - cfg["rowlen"][Store.luckysheet_rows_change_size_start[1]] = Math.ceil(size); + event.stopPropagation(); + }); - if (Store.clearjfundo) { - Store.jfundo = []; + //右键菜单 复制按钮 + $("#luckysheet-copy-btn, #luckysheet-cols-copy-btn, #luckysheet-paste-btn-title").click(function (event) { + $(this).parent().hide(); - Store.jfredo.push({ - "type": "resize", - "ctrlType": "resizeR", - "config": $.extend(true, {}, Store.config), - "curconfig": $.extend(true, {}, cfg), - "sheetIndex": Store.currentSheetIndex - }); - } + //复制范围内包含部分合并单元格,提示 + if(Store.config["merge"] != null){ + let has_PartMC = false; - //config - Store.config = cfg; - Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)].config = Store.config; + 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]; - server.saveParam("cg", Store.currentSheetIndex, cfg["rowlen"], { "k": "rowlen" }); + has_PartMC = hasPartMC(Store.config, r1, r2, c1, c2); - jfrefreshgrid_rhcw(Store.flowdata.length, null); + if(has_PartMC){ + break; + } + } + + if(has_PartMC){ + if(isEditMode()){ + alert("无法对部分合并单元格执行此操作"); + } + else{ + tooltip.info("无法对部分合并单元格执行此操作", ""); + } + return; + } } - //改变列宽 - if (Store.luckysheet_cols_change_size) { - Store.luckysheet_cols_change_size = false; - - $("#luckysheet-change-size-line").hide(); - $("#luckysheet-cols-change-size").css("opacity", 0); - $("#luckysheet-sheettable, #luckysheet-cols-h-c, .luckysheet-cols-h-cells, .luckysheet-cols-h-cells canvas").css("cursor", "default"); + //多重选区 有条件格式时 提示 + 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 mouse = mouseposition(event.pageX, event.pageY); - let scrollLeft = $("#luckysheet-cols-h-c").scrollLeft(); - let x = mouse[0] + scrollLeft; - let winW = $(window).width(); + let cf_compute = conditionformat.getComputeMap(); - let row_index = Store.visibledatarow.length - 1, - row = Store.visibledatarow[row_index], - row_pre = 0; - let col_location = colLocation(x), - col = col_location[1], - col_pre = col_location[0], - col_index = col_location[2]; - - let size = (x + 3) - Store.luckysheet_cols_change_size_start[0]; + 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]; - let firstcolumlen = Store.defaultcollen; - if (Store.config["columlen"] != null && Store.config["columlen"][Store.luckysheet_cols_change_size_start[1]] != null) { - firstcolumlen = Store.config["columlen"][Store.luckysheet_cols_change_size_start[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 (Math.abs(size - firstcolumlen) < 3) { + if(hasCF){ + if(isEditMode()){ + alert("无法对多重选择区域执行此操作"); + } + else{ + tooltip.info("无法对多重选择区域执行此操作", ""); + } return; } - - if ((x + 3) - Store.luckysheet_cols_change_size_start[0] < 30) { - size = 30; - } - - if (x >= winW - 100 + scrollLeft) { - size = winW - 100 - Store.luckysheet_cols_change_size_start[0] + scrollLeft; - } + } - let cfg = $.extend(true, {}, Store.config); - if (cfg["columlen"] == null) { - cfg["columlen"] = {}; + //多重选区 行不一样且列不一样时 提示 + if(Store.luckysheet_select_save.length > 1){ + let isSameRow = true, + str_r = Store.luckysheet_select_save[0].row[0], + end_r = Store.luckysheet_select_save[0].row[1]; + let isSameCol = true, + str_c = Store.luckysheet_select_save[0].column[0], + end_c = Store.luckysheet_select_save[0].column[1]; + + for(let s = 1; s < Store.luckysheet_select_save.length; s++){ + if(Store.luckysheet_select_save[s].row[0] != str_r || Store.luckysheet_select_save[s].row[1] != end_r){ + isSameRow = false; + } + if(Store.luckysheet_select_save[s].column[0] != str_c || Store.luckysheet_select_save[s].column[1] != end_c){ + isSameCol = false; + } } - cfg["columlen"][Store.luckysheet_cols_change_size_start[1]] = Math.ceil(size); - - if (Store.clearjfundo) { - Store.jfundo = []; - - Store.jfredo.push({ - "type": "resize", - "ctrlType": "resizeC", - "config": $.extend(true, {}, Store.config), - "curconfig": $.extend(true, {}, cfg), - "sheetIndex": Store.currentSheetIndex - }); - } + if((!isSameRow && !isSameCol) || selectIsOverlap()){ + if(isEditMode()){ + alert("无法对多重选择区域执行此操作"); + } + else{ + tooltip.info("无法对多重选择区域执行此操作", ""); + } + return; + } + } + + selection.copy(event); + }); - //config - Store.config = cfg; - Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)].config = Store.config; + //右键菜单 粘贴按钮 + $("#luckysheet-copy-paste, #luckysheet-cols-paste-btn, #luckysheet-paste-btn-title").click(function (event) { + selection.paste(event, "btn"); + $(this).parent().hide(); + }); - server.saveParam("cg", Store.currentSheetIndex, cfg["columlen"], { "k": "columlen" }); + //菜单栏 图表按钮 + $("#luckysheet-chart-btn-title").click(function () { + $("#luckysheetdatavisual").click(); + $("#luckysheetdatavisual").click(); + getdatabyselection() + let render = Store.createChart($('.luckysheet-grid-container')[0]) + render.style.width = '400px' + render.style.height = '250px' + render.style.position = 'absolute' + render.style.background = '#fff' + render.style.zIndex = Store.zIndex + Store.zIndex++ + let chartSetting = document.getElementsByClassName('chartSetting')[0] + chartSetting.style.display = 'block' - jfrefreshgrid_rhcw(null, Store.flowdata[0].length); - setTimeout(function () { - luckysheetrefreshgrid(); - }, 1); - } + // let luckysheetGridContainer = document.getElementsByClassName('luckysheet-grid-container')[0] + // luckysheetGridContainer.onclick = function (e){ + // console.dir(e.path) + // if(e.path.some(item => item.includes())){ - if (formula.rangeMove) { - formula.rangeMoveDragged(formula.rangeMoveObj); - } + // } + // } + // render.onClick = function(){ - //改变选择框的位置并替换目标单元格 - if (Store.luckysheet_cell_selected_move) { - $("#luckysheet-cell-selected-move").hide(); + // } + + // render.oncontextmenu = function(e){ + // let em = e || event + // em.preventDefault() - Store.luckysheet_cell_selected_move = false; - let mouse = mouseposition(event.pageX, event.pageY); + // let dom = document.createElement('div') + // dom.addClass('chartMenu') + // dom.innerHtml = '
  • 删除
' + // dom.style.position = 'absolute' + // console.dir(em) + // } + }); - let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); - let scrollTop = $("#luckysheet-cell-main").scrollTop(); + //菜单栏 数据透视表 + $("#luckysheet-pivot-btn-title").click(function (e) { + pivotTable.createPivotTable(e); + }); - let x = mouse[0] + scrollLeft; - let y = mouse[1] + scrollTop; + //菜单栏 截图按钮 + $("#luckysheet-chart-btn-screenshot").click(function () { + if(Store.luckysheet_select_save.length == 0){ + if(isEditMode()){ + alert("请框选需要截图的范围"); + } + else{ + tooltip.info("提示!", "请框选需要截图的范围"); + } + return; + } - let winH = $(window).height() + scrollTop - Store.sheetBarHeight - Store.statisticBarHeight, - winW = $(window).width() + scrollLeft; + if(Store.luckysheet_select_save.length > 1){ + if(isEditMode()){ + alert("无法对多重选择区域执行此操作"); + } + else{ + tooltip.info("提示!", "无法对多重选择区域执行此操作"); + } - let row_index = rowLocation(y)[2]; - let col_index = colLocation(x)[2]; + return; + } - let row_index_original = Store.luckysheet_cell_selected_move_index[0], - col_index_original = Store.luckysheet_cell_selected_move_index[1]; + //复制范围内包含部分合并单元格,提示 + if(Store.config["merge"] != null){ + let has_PartMC = false; - if(row_index == row_index_original && col_index == col_index_original){ - return; - } + 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]; - let d = editor.deepCopyFlowData(Store.flowdata); - let last = Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1]; - - let data = getdatabyselection(last); + has_PartMC = hasPartMC(Store.config, r1, r2, c1, c2); - let cfg = $.extend(true, {}, Store.config); - if(cfg["merge"] == null){ - cfg["merge"] = {}; - } - if(cfg["rowlen"] == null){ - cfg["rowlen"] = {}; + if(has_PartMC){ + break; + } } - //选区包含部分单元格 - if(hasPartMC(cfg, last["row"][0], last["row"][1], last["column"][0], last["column"][1])){ + if(has_PartMC){ if(isEditMode()){ alert("无法对合并单元格执行此操作"); } else{ - tooltip.info('提示',"无法对合并单元格执行此操作"); + tooltip.info("提示!", "无法对合并单元格执行此操作"); } - return; + return; } + } - let row_s = last["row"][0] - row_index_original + row_index, - row_e = last["row"][1] - row_index_original + row_index; - let col_s = last["column"][0] - col_index_original + col_index, - col_e = last["column"][1] - col_index_original + col_index; - - if (row_s < 0 || y < 0) { - row_s = 0; - row_e = last["row"][1] - last["row"][0]; - } + let st_r = Store.luckysheet_select_save[0].row[0], + ed_r = Store.luckysheet_select_save[0].row[1]; + let st_c = Store.luckysheet_select_save[0].column[0], + ed_c = Store.luckysheet_select_save[0].column[1]; - if (col_s < 0 || x < 0) { - col_s = 0; - col_e = last["column"][1] - last["column"][0]; - } + let shotData = datagridgrowth([], ed_r + 1, ed_c + 1); - if (row_e >= Store.visibledatarow[Store.visibledatarow.length - 1] || y > winH) { - row_s = Store.visibledatarow.length - 1 - last["row"][1] + last["row"][0]; - row_e = Store.visibledatarow.length - 1; + for(let r = st_r; r <= ed_r; r++){ + for(let c = st_c; c <= ed_c; c++){ + shotData[r][c] = Store.flowdata[r][c]; } + } - if (col_e >= Store.visibledatacolumn[Store.visibledatacolumn.length - 1] || x > winW) { - col_s = Store.visibledatacolumn.length - 1 - last["column"][1] + last["column"][0]; - col_e = Store.visibledatacolumn.length - 1; - } + let scrollHeight, rh_height; + if(st_r - 1 < 0){ + scrollHeight = 0; + rh_height = Store.visibledatarow[ed_r]; + } + else{ + scrollHeight = Store.visibledatarow[st_r - 1]; + rh_height = Store.visibledatarow[ed_r] - Store.visibledatarow[st_r - 1]; + } - //替换的位置包含部分单元格 - if(hasPartMC(cfg, row_s, row_e, col_s, col_e)){ - if(isEditMode()){ - alert("无法对合并单元格执行此操作"); - } - else{ - tooltip.info('提示',"无法对合并单元格执行此操作"); - } - return; - } + let scrollWidth, ch_width; + if(st_c - 1 < 0){ + scrollWidth = 0; + ch_width = Store.visibledatacolumn[ed_c]; + } + else{ + scrollWidth = Store.visibledatacolumn[st_c - 1]; + ch_width = Store.visibledatacolumn[ed_c] - Store.visibledatacolumn[st_c - 1]; + } - let borderInfoCompute = getBorderInfoCompute(Store.currentSheetIndex); + let newCanvas = $("").attr({ + width: Math.ceil(ch_width * devicePixelRatio), + height: Math.ceil(rh_height * devicePixelRatio) + }).css({ width: ch_width, height: rh_height }); - //删除原本位置的数据 - let RowlChange = null; - for (let r = last["row"][0]; r <= last["row"][1]; r++) { - if(r in cfg["rowlen"]){ - RowlChange = true; - } + let d = Store.flowdata; + Store.flowdata = shotData; - for (let c = last["column"][0]; c <= last["column"][1]; c++) { - let cell = d[r][c]; + luckysheetDrawMain(scrollWidth, scrollHeight, ch_width, rh_height, 1, 1, null, null, newCanvas); - if(getObjType(cell) == "object" && ("mc" in cell)){ - if((cell["mc"].r + "_" + cell["mc"].c) in cfg["merge"]){ - delete cfg["merge"][cell["mc"].r + "_" + cell["mc"].c]; - } - } + Store.flowdata = d; + editor.webWorkerFlowDataCache(Store.flowdata);//worker存数据 - d[r][c] = null; - } - } + let image = new Image(); + let url = newCanvas.get(0).toDataURL("image/png"); + image.src = url; - //边框 - if(cfg["borderInfo"] && cfg["borderInfo"].length > 0){ - let borderInfo = []; + if(ch_width > rh_height){ + image.style.width = "100%"; + } + else{ + image.style.height = "100%"; + } - for(let i = 0; i < cfg["borderInfo"].length; i++){ - let bd_rangeType = cfg["borderInfo"][i].rangeType; + let maxHeight = $(window).height() - 200; + tooltip.screenshot("截取成功!", '
', url); + $("#luckysheet-confirm-screenshot-save").append(image); + newCanvas.remove(); + }); - if(bd_rangeType == "range"){ - let bd_range = cfg["borderInfo"][i].range; - let bd_emptyRange = []; + //截图下载 + $(document).on("click", "a.download", function(){ + let dataURI = $("#luckysheet-confirm-screenshot-save img").attr("src"); - for(let j = 0; j < bd_range.length; j++){ - bd_emptyRange = bd_emptyRange.concat(conditionformat.CFSplitRange(bd_range[j], {"row": last["row"], "column": last["column"]}, {"row": [row_s, row_e], "column": [col_s, col_e]}, "restPart")); - } + let binStr = atob(dataURI.split(",")[1]), + len = binStr.length, + arr = new Uint8Array(len); - cfg["borderInfo"][i].range = bd_emptyRange; + for(let i = 0; i < len; i++){ + arr[i] = binStr.charCodeAt(i); + } - borderInfo.push(cfg["borderInfo"][i]); - } - else if(bd_rangeType == "cell"){ - let bd_r = cfg["borderInfo"][i].value.row_index; - let bd_c = cfg["borderInfo"][i].value.col_index; + let blob = new Blob([arr]); - if(!(bd_r >= last["row"][0] && bd_r <= last["row"][1] && bd_c >= last["column"][0] && bd_c <= last["column"][1])){ - borderInfo.push(cfg["borderInfo"][i]); - } - } - } + let element = document.createElement('a'); + element.setAttribute('href', URL.createObjectURL(blob)); + element.setAttribute('download', '截图.png'); - cfg["borderInfo"] = borderInfo; - } - - //替换位置数据更新 - let offsetMC = {}; - for (let r = 0; r < data.length; r++) { - for (let c = 0; c < data[0].length; c++) { - if(borderInfoCompute[(r + last["row"][0]) + "_" + (c + last["column"][0])]){ - let bd_obj = { - "rangeType": "cell", - "value": { - "row_index": r + row_s, - "col_index": c + col_s, - "l": borderInfoCompute[(r + last["row"][0]) + "_" + (c + last["column"][0])].l, - "r": borderInfoCompute[(r + last["row"][0]) + "_" + (c + last["column"][0])].r, - "t": borderInfoCompute[(r + last["row"][0]) + "_" + (c + last["column"][0])].t, - "b": borderInfoCompute[(r + last["row"][0]) + "_" + (c + last["column"][0])].b - } - } + element.style.display = 'none'; + document.body.appendChild(element); + + element.click(); - if(cfg["borderInfo"] == null){ - cfg["borderInfo"] = []; - } + let clickHandler; + element.addEventListener('click', clickHandler = function(){ + requestAnimationFrame(function(){ + URL.revokeObjectURL(element.href); + }); - cfg["borderInfo"].push(bd_obj); - } + element.removeAttribute('href'); + element.removeEventListener('click', clickHandler); + }) - let value = ""; - if (data[r] != null && data[r][c] != null) { - value = data[r][c]; - } + document.body.removeChild(element); + }) + + //菜单栏 分列按钮 + $("#luckysheet-splitColumn-btn-title").click(function(){ + if(Store.luckysheet_select_save == null || Store.luckysheet_select_save.length == 0){ + return; + } - if(getObjType(value) == "object" && ("mc" in value)){ - let mc = $.extend(true, {}, value["mc"]); - if("rs" in value["mc"]){ - offsetMC[mc.r + "_" + mc.c] = [r + row_s, c + col_s]; + if(Store.luckysheet_select_save.length > 1){ + tooltip.info("不能对多重选择区域执行此操作,请选择单个区域,然后再试", ""); + return; + } - value["mc"].r = r + row_s; - value["mc"].c = c + col_s; + if(Store.luckysheet_select_save[0].column[0] != Store.luckysheet_select_save[0].column[1]){ + tooltip.info("一次只能转换一列数据,选定区域可以有多行,但不能有多列,请在选定单列区域以后再试", ""); + return; + } - cfg["merge"][(r + row_s) + "_" + (c + col_s)] = value["mc"]; - } - else{ - value["mc"].r = offsetMC[mc.r + "_" + mc.c][0]; - value["mc"].c = offsetMC[mc.r + "_" + mc.c][1]; - } - } - d[r + row_s][c + col_s] = value; - } - } + splitColumn.createDialog(); + splitColumn.init(); + }); - if(RowlChange){ - cfg = rowlenByRange(d, last["row"][0], last["row"][1], cfg); - cfg = rowlenByRange(d, row_s, row_e, cfg); + //冻结行列 + $("#luckysheet-freezen-btn-horizontal").click(function () { + if($.trim($(this).text())=="取消冻结"){ + if (luckysheetFreezen.freezenverticaldata != null) { + luckysheetFreezen.cancelFreezenVertical(); + luckysheetFreezen.createAssistCanvas(); + luckysheetrefreshgrid(); } - //条件格式 - let cdformat = $.extend(true, [], Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)]["luckysheet_conditionformat_save"]); - if(cdformat != null && cdformat.length > 0){ - for(let i = 0; i < cdformat.length; i++){ - let cdformat_cellrange = cdformat[i].cellrange; - let emptyRange = []; - for(let j = 0; j < cdformat_cellrange.length; j++){ - let range = conditionformat.CFSplitRange(cdformat_cellrange[j], {"row": last["row"], "column": last["column"]}, {"row": [row_s, row_e], "column": [col_s, col_e]}, "allPart"); - emptyRange = emptyRange.concat(range); - } - cdformat[i].cellrange = emptyRange; - } + if (luckysheetFreezen.freezenhorizontaldata != null) { + luckysheetFreezen.cancelFreezenHorizontal(); + luckysheetFreezen.createAssistCanvas(); + luckysheetrefreshgrid(); } - let rf; - if(Store.luckysheet_select_save[0].row_focus == Store.luckysheet_select_save[0].row[0]){ - rf = row_s; + luckysheetFreezen.scrollAdapt(); + } + else{ + if (luckysheetFreezen.freezenverticaldata != null) { + luckysheetFreezen.cancelFreezenVertical(); + luckysheetFreezen.createAssistCanvas(); + luckysheetrefreshgrid(); } - else{ - rf = row_e; + + if (luckysheetFreezen.freezenhorizontaldata == null) { + luckysheetFreezen.createFreezenHorizontal(); + luckysheetFreezen.createAssistCanvas(); } + } + }); - let cf; - if(Store.luckysheet_select_save[0].column_focus == Store.luckysheet_select_save[0].column[0]){ - cf = col_s; + $("#luckysheet-freezen-btn-vertical").click(function () { + if (luckysheetFreezen.freezenverticaldata != null) { + luckysheetFreezen.cancelFreezenVertical(); + luckysheetrefreshgrid(); + } + else { + luckysheetFreezen.createFreezenVertical(); + } + luckysheetFreezen.createAssistCanvas(); + }); + + //右键菜单 菜单项hover + let submenuhide = null, rightclickmenu = null; + $(".luckysheet-cols-menu .luckysheet-cols-submenu").hover( + function () { + let $t = $(this), attrid = $t.attr("id"), $attr = $("#" + attrid + "_sub"), $con = $t.parent(); + let winW = $(window).width(), winH = $(window).height(); + let menuW = $con.width(), attrH = $attr.height() + 25, attrW = $attr.width() + 5; + let offset = $t.offset(); + let top = offset.top, left = offset.left + menuW; + + if (left + attrW > winW) { + left = offset.left - attrW; } - else{ - cf = col_e; + + if (top + attrH > winH) { + top = winH - attrH; } - let range = []; - range.push({ "row": last["row"], "column": last["column"] }); - range.push({ "row": [row_s, row_e], "column": [col_s, col_e] }); + $attr.css({ "top": top, "left": left }).show(); + rightclickmenu = $t; + }, + function () { + let $t = $(this), attrid = $t.attr("id"), $attr = $("#" + attrid + "_sub"); + submenuhide = setTimeout(function () { $attr.hide(); }, 200); + } + ); - last["row"] = [row_s, row_e]; - last["column"] = [col_s, col_e]; - last["row_focus"] = rf; - last["column_focus"] = cf; + $(".luckysheet-rightgclick-menu-sub").hover( + function () { + rightclickmenu.addClass("luckysheet-cols-menuitem-hover"); + clearTimeout(submenuhide); + }, + function () { + rightclickmenu.removeClass("luckysheet-cols-menuitem-hover"); + $(this).hide(); + } + ); - jfrefreshgrid(d, range, cfg, cdformat, RowlChange); + $("#luckysheet-rightclick-menu input").on("keydown", function (e) { + e.stopPropagation(); + }); - selectHightlightShow(); + $("#luckysheet-modal-dialog-mask").on("click dbclick mousedown mousemove mouseup", function (e) { + e.stopPropagation(); + e.preventDefault(); + }); - $("#luckysheet-sheettable").css("cursor", "default"); - clearTimeout(Store.countfuncTimeout); - Store.countfuncTimeout = setTimeout(function () { countfunc() }, 500); + let copychange = function () { + if (document.hidden || document.webkitHidden || document.msHidden) { + Store.iscopyself = false; } + } - //选区下拉 - if (Store.luckysheet_cell_selected_extend) { - Store.luckysheet_cell_selected_extend = false; - $("#luckysheet-cell-selected-extend").hide(); + $(document).on("visibilitychange webkitvisibilitychange msvisibilitychange", copychange).mouseleave(function () { + Store.iscopyself = false; + }).mousedown(function (event) { + //有批注在编辑时 + luckysheetPostil.removeActivePs(); - let mouse = mouseposition(event.pageX, event.pageY); - let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); - let scrollTop = $("#luckysheet-cell-main").scrollTop(); + if (!$(event.target).hasClass("luckysheet-mousedown-cancel") && $(event.target).filter("[class*='sp-palette']").length == 0 && $(event.target).filter("[class*='sp-thumb']").length == 0 && $(event.target).filter("[class*='sp-']").length == 0) { + $("#luckysheet-rightclick-menu").hide(); + $("#luckysheet-cols-h-hover").hide(); + $("#luckysheet-cols-menu-btn").hide(); + $("#luckysheet-rightclick-menu").hide(); + $("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu, #luckysheet-user-menu").hide(); + $("body > .luckysheet-filter-menu, body > .luckysheet-filter-submenu, body > .luckysheet-cols-menu").hide(); + //$("body > luckysheet-menuButton").hide(); + Store.luckysheet_cols_menu_status = false; + } - let x = mouse[0] + scrollLeft - 5; - let y = mouse[1] + scrollTop - 5; + //点击功能栏时 如果是单元格编辑模式 则退出编辑模式 + if($(event.target).closest("#luckysheet-wa-editor").length > 0 && parseInt($("#luckysheet-input-box").css("top")) > 0){ + formula.updatecell(Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[1]); + luckysheetMoveHighlightCell("down", 0, "rangeOfSelect"); + } + }); - let winH = $(window).height() + scrollTop - Store.sheetBarHeight - Store.statisticBarHeight, - winW = $(window).width() + scrollLeft; + //单元格编辑 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 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 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; + } - let row_index_original = Store.luckysheet_cell_selected_extend_index[0], - col_index_original = Store.luckysheet_cell_selected_extend_index[1]; + //输入框中文输入后 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); + } - let last = Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1]; - let row_s = last["row"][0], row_e = last["row"][1]; - let col_s = last["column"][0], col_e = last["column"][1]; + e.preventDefault(); + }); - if (row_s < 0 || y < 0) { - row_s = 0; - row_e = last["row"][1] - last["row"][0]; + 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(); } - if (col_s < 0 || x < 0) { - col_s = 0; - col_e = last["column"][1] - last["column"][0]; - } + $("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item").removeClass("luckysheet-formula-search-item-active"); + $up.addClass("luckysheet-formula-search-item-active"); - if (row_e >= Store.visibledatarow[Store.visibledatarow.length - 1] || y > winH) { - row_s = Store.visibledatarow.length - 1 - last["row"][1] + last["row"][0]; - row_e = Store.visibledatarow.length - 1; - } + 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; + } - if (col_e >= Store.visibledatacolumn[Store.visibledatacolumn.length - 1] || x > winW) { - col_s = Store.visibledatacolumn.length - 1 - last["column"][1] + last["column"][0]; - col_e = Store.visibledatacolumn.length - 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; + } - //复制范围 - luckysheetDropCell.copyRange = {"row": $.extend(true, [], last["row"]), "column": $.extend(true, [], last["column"])}; - //applyType - let typeItemHide = luckysheetDropCell.typeItemHide(); - - if(!typeItemHide[0] && !typeItemHide[1] && !typeItemHide[2] && !typeItemHide[3] && !typeItemHide[4] && !typeItemHide[5] && !typeItemHide[6]){ - luckysheetDropCell.applyType = "0"; - } - else{ - luckysheetDropCell.applyType = "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 (Math.abs(row_index_original - row_index) > Math.abs(col_index_original - col_index)) { - if (!(row_index >= row_s && row_index <= row_e)) { - if (Store.luckysheet_select_save[0].top_move >= row_pre) {//当往上拖拽时 - luckysheetDropCell.applyRange = {"row": [row_index, last["row"][0] - 1], "column": last["column"]}; - luckysheetDropCell.direction = "up"; + if(range == null){ + range = formula.getcellrange($("#luckysheet-input-box-index").text()); + } - row_s -= last["row"][0] - row_index; + let r1 = range["row"][0], r2 = range["row"][1]; + let c1 = range["column"][0], c2 = range["column"][1]; - //是否有数据透视表范围 - if(pivotTable.isPivotRange(row_s, col_e)){ - tooltip.info("无法对所选单元格进行此更改,因为它会影响数据透视表!",""); - return; - } - } - else {//当往下拖拽时 - luckysheetDropCell.applyRange = {"row": [last["row"][1] + 1, row_index], "column": last["column"]}; - luckysheetDropCell.direction = "down"; + 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]; - row_e += row_index - last["row"][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 + }; - //是否有数据透视表范围 - if(pivotTable.isPivotRange(row_e, col_e)){ - tooltip.info("无法对所选单元格进行此更改,因为它会影响数据透视表!",""); - return; + 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{ - return; + 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 (!(col_index >= col_s && col_index <= col_e)) { - if (Store.luckysheet_select_save[0].left_move >= col_pre) {//当往左拖拽时 - luckysheetDropCell.applyRange = {"row": last["row"], "column": [col_index, last["column"][0] - 1]}; - luckysheetDropCell.direction = "left"; + else if(!ctrlKey && !shiftKey){ + let anchor = $(window.getSelection().anchorNode); + let anchorOffset = window.getSelection().anchorOffset; - col_s -= last["column"][0] - col_index; + 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"); - //是否有数据透视表范围 - if(pivotTable.isPivotRange(row_e, col_s)){ - tooltip.info("无法对所选单元格进行此更改,因为它会影响数据透视表!",""); - return; - } + event.preventDefault(); } - else {//当往右拖拽时 - luckysheetDropCell.applyRange = {"row": last["row"], "column": [last["column"][1] + 1, col_index]}; - luckysheetDropCell.direction = "right"; + else if(anchor.is("#luckysheet-rich-text-editor") && anchor.context.childElementCount == anchorOffset){ + formula.updatecell(Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[1]); + luckysheetMoveHighlightCell("down", -1, "rangeOfSelect"); - col_e += col_index - last["column"][1]; + 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"); - //是否有数据透视表范围 - if(pivotTable.isPivotRange(row_e, col_e)){ - tooltip.info("无法对所选单元格进行此更改,因为它会影响数据透视表!",""); - return; - } + event.preventDefault(); } } - else{ - return; - } - } + 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"); - if(Store.config["merge"] != null){ - let hasMc = false; + 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"); - for(let r = last["row"][0]; r <= last["row"][1]; r++){ - for(let c = last["column"][0]; c <= last["column"][1]; c++){ - let cell = Store.flowdata[r][c]; + 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"); - if(cell != null && cell.mc != null){ - hasMc = true; - break; - } + 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"); - if(hasMc){ - if(isEditMode()){ - alert("无法对合并单元格执行此操作"); + event.preventDefault(); } - else{ - tooltip.info("无法对合并单元格执行此操作", ""); - } - - return; - } + else if(anchor.is("#luckysheet-rich-text-editor") && anchorOffset == 1){ + formula.updatecell(Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[1]); + luckysheetMoveHighlightCell("right", -1, "rangeOfSelect"); - for(let r = row_s; r <= row_e; r++){ - for(let c = col_s; c <= col_e; c++){ - let cell = Store.flowdata[r][c]; + 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"); - if(cell != null && cell.mc != null){ - hasMc = true; - break; - } + 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"); - if(hasMc){ - if(isEditMode()){ - alert("无法对合并单元格执行此操作"); + event.preventDefault(); } - else{ - tooltip.info("无法对合并单元格执行此操作", ""); + 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"); - return; + event.preventDefault(); + } } } - - last["row"] = [row_s, row_e]; - last["column"] = [col_s, col_e]; - - luckysheetDropCell.update(); - luckysheetDropCell.createIcon(); - - $("#luckysheet-cell-selected-move").hide(); - - $("#luckysheet-sheettable").css("cursor", "default"); - clearTimeout(Store.countfuncTimeout); - Store.countfuncTimeout = setTimeout(function () { countfunc() }, 500); } - }); + } //表格左上角点击 全选表格 $("#luckysheet-left-top").mousedown(function (event) { @@ -6684,8 +6752,8 @@ export default function luckysheetHandler() { }); $("#luckysheetsheetconfigmoveleft").click(function () { - if (luckysheetcurrentSheetitem.prevAll(":visible").length > 0) { - luckysheetcurrentSheetitem.insertBefore(luckysheetcurrentSheetitem.prevAll(":visible").eq(0)); + if (luckysheetcurrentSheetitem.preval(":visible").length > 0) { + luckysheetcurrentSheetitem.insertBefore(luckysheetcurrentSheetitem.preval(":visible").eq(0)); sheetmanage.reOrderAllSheet(); } $("#luckysheet-input-box").removeAttr("style"); diff --git a/src/controllers/menuButton.js b/src/controllers/menuButton.js index 4a0b4f0..c6dbd43 100644 --- a/src/controllers/menuButton.js +++ b/src/controllers/menuButton.js @@ -31,12 +31,14 @@ import { getSheetIndex, getRangetxt, getluckysheetfile } from '../methods/get'; import { setluckysheetfile } from '../methods/set'; import { replaceHtml, getObjType, rgbTohex, mouseclickposition, luckysheetfontformat } from '../utils/util'; import Store from '../store'; +import locale from '../locale/locale'; +import { connect } from 'tls'; const menuButton = { "menu": '
${item}
', "item": '
${name} ${example}
', "split": '', - "color": '
重置颜色
${coloritem}
', + "color": '
${resetColor}
${coloritem}
', "coloritem": '
${name}
', "subcolor": '
', "rightclickmenu": null, @@ -380,33 +382,15 @@ const menuButton = { //更多格式 $("#luckysheet-icon-fmt-other").click(function(){ + const _locale = locale(); + const locale_format = _locale.format; + const locale_defaultFmt = _locale.defaultFmt; + let menuButtonId = $(this).attr("id")+"-menuButton"; let $menuButton = $("#" + menuButtonId); if($menuButton.length == 0){ - let itemdata = [ - { "text": "自动", "value": "General", "example": "" }, - { "text": "纯文本", "value": "@", "example": "" }, - { "text": "", "value": "split", "example": "" }, - { "text": "数字", "value": "##0.00", "example": "1000.12" }, - { "text": "百分比", "value": "#0.00%", "example": "12.21%" }, - { "text": "科学计数", "value": "0.00E+00", "example": "1.01E+5" }, - { "text": "", "value": "split", "example": "" }, - { "text": "会计", "value": "¥(0.00)", "example": "¥(1200.09)" }, - //{ "text": "财务", "value": "(#.####)", "example": "(1200.09)" }, - { "text": "万元", "value": "w", "example": "1亿2000万2500" }, - { "text": "货币", "value": "¥0.00", "example": "¥1200.09" }, - //{ "text": "货币整数", "value": "¥####", "example": "¥1200" }, - { "text": "万元2位小数", "value": "w0.00", "example": "2万2500.55" }, - { "text": "", "value": "split", "example": "" }, - { "text": "日期", "value": "yyyy-MM-dd", "example": "2017-11-29" }, - { "text": "时间", "value": "hh:mm AM/PM", "example": "3:00 PM" }, - { "text": "时间24H", "value": "hh:mm", "example": "15:00" }, - { "text": "日期时间", "value": "yyyy-MM-dd hh:mm AM/PM", "example": "2017-11-29 3:00 PM" }, - { "text": "日期时间24H", "value": "yyyy-MM-dd hh:mm", "example": "2017-11-29 15:00" }, - { "text": "", "value": "split", "example": "" }, - { "text": "自定义格式", "value": "fmtOtherSelf", "example": "more" } - ]; + let itemdata = locale_defaultFmt; let itemset = _this.createButtonMenu(itemdata); @@ -414,9 +398,9 @@ const menuButton = { let menu = replaceHtml(_this.menu, {"id": "fmt-other", "item": itemset, "subclass": "", "sub": ""}); let subitemdata = [ - {"text":"更多货币格式...", "value":"morecurrency", "example":""}, - {"text":"更多日期与时间格式...", "value":"moredatetime", "example":""}, - {"text":"更多数字格式...", "value":"moredigit", "example":""} + {"text":locale_format.moreCurrency+"...", "value":"morecurrency", "example":""}, + {"text":locale_format.moreDateTime+"...", "value":"moredatetime", "example":""}, + {"text":locale_format.moreNumber+"...", "value":"moredigit", "example":""} ]; let subitemset = _this.createButtonMenu(subitemdata); let submenu = replaceHtml(_this.menu, {"id": "fmtOtherSelf", "item": subitemset, "subclass": "luckysheet-menuButton-sub"}); @@ -469,30 +453,25 @@ const menuButton = { $("#luckysheet-icon-font-family").click(function(){ let menuButtonId = $(this).attr("id")+"-menuButton"; let $menuButton = $("#"+menuButtonId); - if($menuButton.length == 0){ - let itemdata = [ - { "value": "0", "text": "微软雅黑", "example": "" }, - { "value": "1", "text": "宋体", "example": "" }, - { "value": "2", "text": "黑体", "example": "" }, - { "value": "3", "text": "楷体", "example": "" }, - { "value": "4", "text": "仿宋", "example": "" }, - { "value": "5", "text": "新宋体", "example": "" }, - { "value": "6", "text": "华文新魏", "example": "" }, - { "value": "7", "text": "华文行楷", "example": "" }, - { "value": "8", "text": "华文隶书", "example": "" }, - { "value": "9", "text": "Arial", "example": "" }, - { "value": "10", "text": "Times New Roman", "example": "" }, - { "value": "11", "text": "Tahoma", "example": "" }, - { "value": "12", "text": "Verdana", "example": "" } - ]; + const locale_fontarray = locale().fontarray; + let itemdata = []; + + for(let a=0;a"+fItem+""; + ret.example = ""; + itemdata.push(ret); + } let itemset = _this.createButtonMenu(itemdata); let menu = replaceHtml(_this.menu, {"id": "font-family", "item": itemset, "subclass": "", "sub": ""}); $("body").append(menu); - $menuButton = $("#"+menuButtonId).width(150); + $menuButton = $("#"+menuButtonId).width(200); _this.focus($menuButton); $menuButton.find(".luckysheet-cols-menuitem").click(function(){ @@ -534,14 +513,18 @@ const menuButton = { let $menuButton = $("#"+menuButtonId); if($menuButton.length == 0){ + const _locale = locale(); + const locale_toolbar = _locale.toolbar; + const locale_button = _locale.button; + const locale_alternatingColors = _locale.alternatingColors; let itemdata = [ - {"name":"交替颜色...", "id":"luckysheet-color-alternate", "example":""} + {"name":locale_toolbar.alternatingColors+"...", "id":"luckysheet-color-alternate", "example":""} ]; let itemset = _this.createButtonMenu(itemdata); let subid = "text-color-self"; - let coloritem = replaceHtml(_this.coloritem, {"class": "luckysheet-icon-alternateformat", "name": "交替颜色..."}); - let menu = replaceHtml(_this.color, {"id":menuButtonId, "coloritem": coloritem, "colorself": subid, "sub": ""}); + let coloritem = replaceHtml(_this.coloritem, {"class": "luckysheet-icon-alternateformat", "name": locale_toolbar.alternatingColors+"..."}); + let menu = replaceHtml(_this.color, {"id":menuButtonId, "coloritem": coloritem, "colorself": subid, "sub": "","resetColor":locale_toolbar.resetColor}); $("body").append(menu); $menuButton = $("#" + menuButtonId); @@ -558,14 +541,14 @@ const menuButton = { showSelectionPalette: true, maxPaletteSize: 8, maxSelectionSize: 8, - cancelText: "取消", - chooseText: "确定颜色", - togglePaletteMoreText: "自定义", - togglePaletteLessText: "收起", + cancelText: locale_button.cancel, + chooseText: locale_button.confirm, + togglePaletteMoreText: locale_toolbar.customColor, + togglePaletteLessText: locale_toolbar.collapse, togglePaletteOnly: true, - clearText: "清除颜色选择", + clearText: locale_toolbar.clearText, color:"#000", - noColorSelectedText: "没有颜色被选择", + noColorSelectedText: locale_toolbar.noColorSelectedText, localStorageKey: "spectrum.textcolor" + server.gridKey, palette: [["#000","#444","#666","#999","#ccc","#eee","#f3f3f3","#fff"], ["#f00","#f90","#ff0","#0f0","#0ff","#00f","#90f","#f0f"], @@ -2696,8 +2679,6 @@ const menuButton = { } }); }, - fontarray: ["微软雅黑","宋体","黑体","楷体","仿宋","新宋体","华文新魏","华文行楷","华文隶书","Arial","Times New Roman","Tahoma","Verdana"], - fontjson: {"微软雅黑":0,"microsoft yahei":0,"宋体":1,"simsun":1,"黑体":2,"simhei":2,"楷体":3,"kaiti":3,"仿宋":4,"fangsong":4,"新宋体":5,"nsimsun":5,"华文新魏":6,"stxinwei":6,"华文行楷":7,"stxingkai":7,"华文隶书":8,"stliti":8,"arial":9,"times new roman":10,"tahoma":11,"verdana":12}, getQKBorder: function(width, type, color){ let bordertype = ""; if(width.indexOf("pt") > -1){ @@ -3326,6 +3307,7 @@ const menuButton = { menuButtonFocus: function(d, r, c){ let _this = this; let foucsList = ["bl", "it", "cl", "ff", "ht", "vt", "fs", "tb", "tr"]; + const locale_fontarray = locale().fontarray; for(let i = 0; i < foucsList.length; i++){ let attr = foucsList[i]; @@ -3358,16 +3340,16 @@ const menuButton = { else if(attr == "ff"){ let menuButtonId = "luckysheet-icon-font-family-menuButton"; let $menuButton = $("#" + menuButtonId); - let itemname = "微软雅黑", itemvalue = 0; - + const locale_fontarray = locale().fontarray; + let itemname = locale_fontarray[0], itemvalue = 0; if(foucsStatus != null){ if(isdatatypemulti(foucsStatus)["num"]){ itemvalue = parseInt(foucsStatus); - itemname = _this.fontarray[itemvalue]; + itemname = locale_fontarray[itemvalue]; } else{ itemvalue = _this.fontjson[foucsStatus]; - itemname = _this.fontarray[itemvalue]; + itemname = locale_fontarray[itemvalue]; } } @@ -3540,7 +3522,7 @@ const menuButton = { } } - if(["0", "1", "2"].indexOf(foucsStatus) == -1){ + if(["0", "1", "2"].indexOf(foucsStatus.toString()) == -1){ foucsStatus = "1"; } } @@ -3555,7 +3537,7 @@ const menuButton = { } } - if(["0", "1", "2"].indexOf(foucsStatus) == -1){ + if(["0", "1", "2"].indexOf(foucsStatus.toString()) == -1){ foucsStatus = "2"; } } @@ -3974,7 +3956,9 @@ const menuButton = { }, getTextHeightCache: {}, getTextSize: function(text, font){ - let f = font || '10pt 微软雅黑'; + let fontarray = locale().fontarray; + let f = font || '10pt ' + fontarray[0]; + let _this = this; if (f in _this.getTextHeightCache){ @@ -4364,6 +4348,8 @@ const menuButton = { let cf_compute = conditionformat.getComputeMap(); let checksCF = conditionformat.checksCF(r, c, cf_compute); + const locale_fontarray = locale().fontarray; + let cell = d[r][c]; for(let key in cell){ let value = _this.checkstatus(d, r, c , key); @@ -4404,7 +4390,7 @@ const menuButton = { if(key == "ff" && value != "0"){ let f = value; if(!isNaN(parseInt(value))){ - f = _this.fontarray[parseInt(value)]; + f = locale_fontarray[parseInt(value)]; } style += "font-family: " + f + ";"; } diff --git a/src/controllers/moreFormat.js b/src/controllers/moreFormat.js index 8705a3d..dd8bbe6 100644 --- a/src/controllers/moreFormat.js +++ b/src/controllers/moreFormat.js @@ -5,6 +5,7 @@ import editor from '../global/editor'; import tooltip from '../global/tooltip'; import { isEditMode } from '../global/validate'; import Store from '../store'; +import locale from '../locale/locale'; //更多格式 const luckysheetMoreFormat = { @@ -795,13 +796,275 @@ const luckysheetMoreFormat = { createDialog: function(type){ let _this = this; + const currencyDetail = locale().currencyDetail; + const locale_format = locale().format; + const locale_button = locale().button; + + this.moneyFmtList = [ + {'name': currencyDetail.RMB,'pos': 'before','value': '¥'}, + {'name': currencyDetail.USdollar,'pos': 'before','value': '$'}, + {'name': currencyDetail.EUR,'pos': 'before','value': '€'}, + {'name': currencyDetail.GBP,'pos': 'before','value': '£'}, + {'name': currencyDetail.HK,'pos': 'before','value': '$'}, + {'name': currencyDetail.JPY,'pos': 'before','value': '¥'}, + {'name': currencyDetail.AlbanianLek,'pos': 'before','value': 'Lek'}, + {'name': currencyDetail.AlgerianDinar,'pos': 'before','value': 'din'}, + {'name': currencyDetail.Afghani,'pos': 'after','value': 'Af'}, + {'name': currencyDetail.ArgentinePeso,'pos': 'before','value': '$'}, + {'name': currencyDetail.UnitedArabEmiratesDirham,'pos': 'before','value': 'dh'}, + {'name': currencyDetail.ArubanFlorin,'pos': 'before','value': 'Afl'}, + {'name': currencyDetail.OmaniRial,'pos': 'before','value': 'Rial'}, + {'name': currencyDetail.Azerbaijanimanat,'pos': 'before','value': '?'}, + {'name': currencyDetail.EgyptianPound,'pos': 'before','value': '£'}, + {'name': currencyDetail.EthiopianBirr,'pos': 'before','value': 'Birr'}, + {'name': currencyDetail.AngolaKwanza,'pos': 'before','value': 'Kz'}, + {'name': currencyDetail.AustralianDollar,'pos': 'before','value': '$'}, + {'name': currencyDetail.Patacas,'pos': 'before','value': 'MOP'}, + {'name': currencyDetail.BarbadosDollar,'pos': 'before','value': '$'}, + {'name': currencyDetail.PapuaNewGuineaKina,'pos': 'before','value': 'PGK'}, + {'name': currencyDetail.BahamianDollar,'pos': 'before','value': '$'}, + {'name': currencyDetail.PakistanRupee,'pos': 'before','value': 'Rs'}, + {'name': currencyDetail.ParaguayanGuarani,'pos': 'after','value': 'Gs'}, + {'name': currencyDetail.BahrainiDinar,'pos': 'before','value': 'din'}, + {'name': currencyDetail.PanamanianBalboa,'pos': 'before','value': 'B/'}, + {'name': currencyDetail.Brazilianreal,'pos': 'before','value': 'R$'}, + {'name': currencyDetail.Belarusianruble,'pos': 'after','value': 'р'}, + {'name': currencyDetail.BermudianDollar,'pos': 'before','value': '$'}, + {'name': currencyDetail.BulgarianLev,'pos': 'before','value': 'lev'}, + {'name': currencyDetail.IcelandKrona,'pos': 'before','value': 'kr'}, + {'name': currencyDetail.BosniaHerzegovinaConvertibleMark,'pos': 'before','value': 'KM'}, + {'name': currencyDetail.PolishZloty,'pos': 'after','value': 'z?'}, + {'name': currencyDetail.Boliviano,'pos': 'before','value': 'Bs'}, + {'name': currencyDetail.BelizeDollar,'pos': 'before','value': '$'}, + {'name': currencyDetail.BotswanaPula,'pos': 'before','value': 'P'}, + {'name': currencyDetail.NotDannuzhamu,'pos': 'before','value': 'Nu'}, + {'name': currencyDetail.BurundiFranc,'pos': 'before','value': 'FBu'}, + {'name': currencyDetail.NorthKoreanWon,'pos': 'before','value': '?KP'}, + {'name': currencyDetail.DanishKrone,'pos': 'after','value': 'kr'}, + {'name': currencyDetail.EastCaribbeanDollar,'pos': 'before','value': '$'}, + {'name': currencyDetail.DominicaPeso,'pos': 'before','value': 'RD$'}, + {'name': currencyDetail.RussianRuble,'pos': 'after','value': '?'}, + {'name': currencyDetail.EritreanNakfa,'pos': 'before','value': 'Nfk'}, + {'name': currencyDetail.CFAfranc,'pos': 'before','value': 'CFA'}, + {'name': currencyDetail.PhilippinePeso,'pos': 'before','value': '?'}, + {'name': currencyDetail.FijiDollar,'pos': 'before','value': '$'}, + {'name': currencyDetail.CapeVerdeEscudo,'pos': 'before','value': 'CVE'}, + {'name': currencyDetail.FalklandIslandsPound,'pos': 'before','value': '£'}, + {'name': currencyDetail.GambianDalasi,'pos': 'before','value': 'GMD'}, + {'name': currencyDetail.Congolesefranc,'pos': 'before','value': 'FrCD'}, + {'name': currencyDetail.ColombianPeso,'pos': 'before','value': '$'}, + {'name': currencyDetail.CostaRicanColon,'pos': 'before','value': '?'}, + {'name': currencyDetail.CubanPeso,'pos': 'before','value': '$'}, + {'name': currencyDetail.Cubanconvertiblepeso,'pos': 'before','value': '$'}, + {'name': currencyDetail.GuyanaDollar,'pos': 'before','value': '$'}, + {'name': currencyDetail.KazakhstanTenge,'pos': 'before','value': '?'}, + {'name': currencyDetail.Haitiangourde,'pos': 'before','value': 'HTG'}, + {'name': currencyDetail.won,'pos': 'before','value': '?'}, + {'name': currencyDetail.NetherlandsAntillesGuilder,'pos': 'before','value': 'NAf.'}, + {'name': currencyDetail.Honduraslempiras,'pos': 'before','value': 'L'}, + {'name': currencyDetail.DjiboutiFranc,'pos': 'before','value': 'Fdj'}, + {'name': currencyDetail.KyrgyzstanSom,'pos': 'before','value': 'KGS'}, + {'name': currencyDetail.GuineaFranc,'pos': 'before','value': 'FG'}, + {'name': currencyDetail.CanadianDollar,'pos': 'before','value': '$'}, + {'name': currencyDetail.GhanaianCedi,'pos': 'before','value': 'GHS'}, + {'name': currencyDetail.Cambodianriel,'pos': 'before','value': 'Riel'}, + {'name': currencyDetail.CzechKoruna,'pos': 'after','value': 'K?'}, + {'name': currencyDetail.ZimbabweDollar,'pos': 'before','value': '$'}, + {'name': currencyDetail.QatariRiyal,'pos': 'before','value': 'Rial'}, + {'name': currencyDetail.CaymanIslandsDollar,'pos': 'before','value': '$'}, + {'name': currencyDetail.Comorianfranc,'pos': 'before','value': 'CF'}, + {'name': currencyDetail.KuwaitiDinar,'pos': 'before','value': 'din'}, + {'name': currencyDetail.CroatianKuna,'pos': 'before','value': 'kn'}, + {'name': currencyDetail.KenyanShilling,'pos': 'before','value': 'Ksh'}, + {'name': currencyDetail.LesothoLoti,'pos': 'before','value': 'LSL'}, + {'name': currencyDetail.LaoKip,'pos': 'before','value': '?'}, + {'name': currencyDetail.LebanesePound,'pos': 'before','value': 'L£'}, + {'name': currencyDetail.Lithuanianlitas,'pos': 'before','value': 'Lt'}, + {'name': currencyDetail.LibyanDinar,'pos': 'before','value': 'din'}, + {'name': currencyDetail.LiberianDollar,'pos': 'before','value': '$'}, + {'name': currencyDetail.RwandaFranc,'pos': 'before','value': 'RF'}, + {'name': currencyDetail.RomanianLeu,'pos': 'before','value': 'RON'}, + {'name': currencyDetail.MalagasyAriary,'pos': 'before','value': 'Ar'}, + {'name': currencyDetail.MaldivianRufiyaa,'pos': 'before','value': 'Rf'}, + {'name': currencyDetail.MalawiKwacha,'pos': 'before','value': 'MWK'}, + {'name': currencyDetail.MalaysianRinggit,'pos': 'before','value': 'RM'}, + {'name': currencyDetail.MacedoniawearingDinar,'pos': 'before','value': 'din'}, + {'name': currencyDetail.MauritiusRupee,'pos': 'before','value': 'MURs'}, + {'name': currencyDetail.MauritanianOuguiya,'pos': 'before','value': 'MRO'}, + {'name': currencyDetail.MongolianTugrik,'pos': 'before','value': '?'}, + {'name': currencyDetail.BangladeshiTaka,'pos': 'before','value': '?'}, + {'name': currencyDetail.PeruvianNuevoSol,'pos': 'before','value': 'S/'}, + {'name': currencyDetail.MyanmarKyat,'pos': 'before','value': 'K'}, + {'name': currencyDetail.MoldovanLeu,'pos': 'before','value': 'MDL'}, + {'name': currencyDetail.MoroccanDirham,'pos': 'before','value': 'dh'}, + {'name': currencyDetail.MozambiqueMetical,'pos': 'before','value': 'MTn'}, + {'name': currencyDetail.MexicanPeso,'pos': 'before','value': '$'}, + {'name': currencyDetail.NamibianDollar,'pos': 'before','value': '$'}, + {'name': currencyDetail.SouthAfricanRand,'pos': 'before','value': 'R'}, + {'name': currencyDetail.SouthSudanesePound,'pos': 'before','value': '£'}, + {'name': currencyDetail.NicaraguaCordoba,'pos': 'before','value': 'C$'}, + {'name': currencyDetail.NepaleseRupee,'pos': 'before','value': 'Rs'}, + {'name': currencyDetail.NigerianNaira,'pos': 'before','value': '?'}, + {'name': currencyDetail.NorwegianKrone,'pos': 'after','value': 'kr'}, + {'name': currencyDetail.GeorgianLari,'pos': 'before','value': 'GEL'}, + {'name': currencyDetail.RenminbiOffshore,'pos': 'before','value': '¥'}, + {'name': currencyDetail.SwedishKrona,'pos': 'after','value': 'kr'}, + {'name': currencyDetail.SwissFranc,'pos': 'before','value': 'CHF'}, + {'name': currencyDetail.SerbianDinar,'pos': 'before','value': 'din'}, + {'name': currencyDetail.SierraLeone,'pos': 'before','value': 'SLL'}, + {'name': currencyDetail.SeychellesRupee,'pos': 'before','value': 'SCR'}, + {'name': currencyDetail.SaudiRiyal,'pos': 'before','value': 'Rial'}, + {'name': currencyDetail.SaoTomeDobra,'pos': 'before','value': 'Db'}, + {'name': currencyDetail.SaintHelenapound,'pos': 'before','value': '£'}, + {'name': currencyDetail.SriLankaRupee,'pos': 'before','value': 'Rs'}, + {'name': currencyDetail.SwazilandLilangeni,'pos': 'before','value': 'SZL'}, + {'name': currencyDetail.SudanesePound,'pos': 'before','value': 'SDG'}, + {'name': currencyDetail.Surinamesedollar,'pos': 'before','value': '$'}, + {'name': currencyDetail.SolomonIslandsDollar,'pos': 'before','value': '$'}, + {'name': currencyDetail.SomaliShilling,'pos': 'before','value': 'SOS'}, + {'name': currencyDetail.TajikistanSomoni,'pos': 'before','value': 'Som'}, + {'name': currencyDetail.PacificFranc,'pos': 'after','value': 'FCFP'}, + {'name': currencyDetail.ThaiBaht,'pos': 'before','value': '?'}, + {'name': currencyDetail.TanzanianShilling,'pos': 'before','value': 'TSh'}, + {'name': currencyDetail.TonganPaanga,'pos': 'before','value': 'T$'}, + {'name': currencyDetail.TrinidadandTobagoDollar,'pos': 'before','value': '$'}, + {'name': currencyDetail.TunisianDinar,'pos': 'before','value': 'din'}, + {'name': currencyDetail.TurkishLira,'pos': 'before','value': '?'}, + {'name': currencyDetail.VanuatuVatu,'pos': 'before','value': 'VUV'}, + {'name': currencyDetail.GuatemalanQuetzal,'pos': 'before','value': 'Q'}, + {'name': currencyDetail.CommissionBolivar,'pos': 'before','value': 'Bs'}, + {'name': currencyDetail.BruneiDollar,'pos': 'before','value': '$'}, + {'name': currencyDetail.UgandanShilling,'pos': 'before','value': 'UGX'}, + {'name': currencyDetail.UkrainianHryvnia,'pos': 'before','value': 'грн.'}, + {'name': currencyDetail.UruguayanPeso,'pos': 'before','value': '$'}, + {'name': currencyDetail.Uzbekistansom,'pos': 'before','value': 'so?m'}, + {'name': currencyDetail.WesternSamoaTala,'pos': 'before','value': 'WST'}, + {'name': currencyDetail.SingaporeDollar,'pos': 'before','value': '$'}, + {'name': currencyDetail.NT,'pos': 'before','value': 'NT$'}, + {'name': currencyDetail.NewZealandDollar,'pos': 'before','value': '$'}, + {'name': currencyDetail.HungarianForint,'pos': 'before','value': 'Ft'}, + {'name': currencyDetail.SyrianPound,'pos': 'before','value': '£'}, + {'name': currencyDetail.JamaicanDollar,'pos': 'before','value': '$'}, + {'name': currencyDetail.ArmenianDram,'pos': 'before','value': 'Dram'}, + {'name': currencyDetail.YemeniRial,'pos': 'before','value': 'Rial'}, + {'name': currencyDetail.IraqiDinar,'pos': 'before','value': 'din'}, + {'name': currencyDetail.IranianRial,'pos': 'before','value': 'Rial'}, + {'name': currencyDetail.NewIsraeliShekel,'pos': 'before','value': '?'}, + {'name': currencyDetail.IndianRupee,'pos': 'before','value': '?'}, + {'name': currencyDetail.IndonesianRupiah,'pos': 'before','value': 'Rp'}, + {'name': currencyDetail.JordanianDinar,'pos': 'before','value': 'din'}, + {'name': currencyDetail.VND,'pos': 'after','value': '?'}, + {'name': currencyDetail.ZambianKwacha,'pos': 'before','value': 'ZMW'}, + {'name': currencyDetail.GibraltarPound,'pos': 'before','value': '£'}, + {'name': currencyDetail.ChileanPeso,'pos': 'before','value': '$'}, + {'name': currencyDetail.CFAFrancBEAC,'pos': 'before','value': 'FCFA'} + ]; + + this.dateFmtList = locale().dateFmtList; + + this.numFmtList = [ + { + "name": "1235", + "value": "0" + }, + { + "name": "1234.56", + "value": "0.00" + }, + { + "name": "1,235", + "value": "#,##0" + }, + { + "name": "1,234.56", + "value": "#,##0.00" + }, + { + "name": "1,235", + "value": "#,##0_);(#,##0)" + }, + { + "name": "1,235", + "value": "#,##0_);[Red](#,##0)" + }, + { + "name": "1,234.56", + "value": "#,##0.00_);(#,##0.00)" + }, + { + "name": "1,234.56", + "value": "#,##0.00_);[Red](#,##0.00)" + }, + { + "name": "$1,235", + "value": "$#,##0_);($#,##0)" + }, + { + "name": "$1,235", + "value": "$#,##0_);[Red]($#,##0)" + }, + { + "name": "$1,234.56", + "value": "$#,##0.00_);($#,##0.00)" + }, + { + "name": "$1,234.56", + "value": "$#,##0.00_);[Red]($#,##0.00)" + }, + { + "name": "1234.56", + "value": "@" + }, + { + "name": "123456%", + "value": "0%" + }, + { + "name": "123456.00%", + "value": "0.00%" + }, + { + "name": "1.23E+03", + "value": "0.00E+00" + }, + { + "name": "1.2E+3", + "value": "##0.0E+0" + }, + { + "name": "1234 5/9", + "value": "# ?/?" + }, + { + "name": "1234 14/25", + "value": "# ??/??" + }, + { + "name": "$ 1,235", + "value": '_($* #,##0_);_(...($* "-"_);_(@_)' + }, + { + "name": "1,235", + "value": '_(* #,##0_);_(*..._(* "-"_);_(@_)' + }, + { + "name": "$ 1,234.56", + // "value": '_($* #,##0.00_)...* "-"??_);_(@_)' + "value": '_($* #,##0.00_);_(...($* "-"_);_(@_)' + }, + { + "name": "1,234.56", + "value": '_(* #,##0.00_);...* "-"??_);_(@_)' + }, + ] + $("#luckysheet-modal-dialog-mask").show(); $("#luckysheet-moreFormat-dialog").remove(); let title = "", content = ''; if(type == "morecurrency"){ //货币 - title = "货币格式"; + title = locale_format.titleCurrency; let listHtml = ''; @@ -819,14 +1082,14 @@ const luckysheetMoreFormat = { content = '
'+ '
'+ - ''+ + ''+ ''+ '
'+ '
'+ listHtml +'
'+ '
'; } else if(type == "moredatetime"){ //日期时间 - title = "日期与时间格式"; + title = locale_format.titleDateTime; let listHtml = ''; @@ -845,7 +1108,7 @@ const luckysheetMoreFormat = { '
'; } else if(type == "moredigit"){ //数字 - title = "数字格式"; + title = locale_format.titleNumber; let listHtml = ''; @@ -869,7 +1132,7 @@ const luckysheetMoreFormat = { "addclass": "luckysheet-moreFormat-dialog", "title": title, "content": content, - "botton": '', + "botton": '', "style": "z-index:100003" })); let $t = $("#luckysheet-moreFormat-dialog").find(".luckysheet-modal-dialog-content").css("min-width", 400).end(), diff --git a/src/controllers/selection.js b/src/controllers/selection.js index c9b76b2..ecef695 100644 --- a/src/controllers/selection.js +++ b/src/controllers/selection.js @@ -590,7 +590,7 @@ const selection = { } } - if (getObjType(data) == "object") { + if (typeof data == "object") { if (data.length == 0) { return; }; let cfg = $.extend(true, {}, Store.config); @@ -1679,7 +1679,7 @@ const selection = { }, matchcopy: function (data1, data2) { let data1cache = [], data2cache = [], data1len, data2len; - if (getObjType(data1) == "object") { + if (typeof data1 == "object") { data1cache = data1; } else { @@ -1691,7 +1691,7 @@ const selection = { data1len = data1cache.length; - if (getObjType(data2) == "object") { + if (typeof data2 == "object") { data2cache = data2; } else { diff --git a/src/controllers/sheetmanage.js b/src/controllers/sheetmanage.js index be96af3..f928cc3 100644 --- a/src/controllers/sheetmanage.js +++ b/src/controllers/sheetmanage.js @@ -228,7 +228,7 @@ const sheetmanage = { indicator = indicator.eq(0).data("index"); } else { - indicator = luckysheetcurrentSheetitem.prevAll(":visible").eq(0).data("index"); + indicator = luckysheetcurrentSheetitem.preval(":visible").eq(0).data("index"); } $("#luckysheet-sheets-item" + indicator).addClass("luckysheet-sheets-item-active"); diff --git a/src/core.js b/src/core.js index db3bacd..2f4613a 100644 --- a/src/core.js +++ b/src/core.js @@ -8,9 +8,17 @@ import sheetmanage from './controllers/sheetmanage'; import luckysheetsizeauto from './controllers/resize'; import luckysheetHandler from './controllers/handler'; import {initPlugins} from './controllers/expendPlugins'; +import { + getluckysheetfile, + getluckysheet_select_save, + getconfig, + getvisibledatarow, + getvisibledatacolumn +} from './methods/get'; let luckysheet = {}; +//创建luckysheet表格 luckysheet.create = function (setting) { let extendsetting = common_extend(defaultSetting, setting); @@ -101,6 +109,21 @@ luckysheet.create = function (setting) { } } +//获取所有表格数据 +luckysheet.getluckysheetfile = getluckysheetfile; + +//获取当前表格 选区 +luckysheet.getluckysheet_select_save = getluckysheet_select_save; + +//获取当前表格 config配置 +luckysheet.getconfig = getconfig; + +//获取当前表格 行高数据 +luckysheet.getvisibledatarow = getvisibledatarow; + +//获取当前表格 列宽数据 +luckysheet.getvisibledatacolumn = getvisibledatacolumn; + export { luckysheet } \ No newline at end of file diff --git a/src/demoData/sheetComment.js b/src/demoData/sheetComment.js index f641700..f17c584 100644 --- a/src/demoData/sheetComment.js +++ b/src/demoData/sheetComment.js @@ -6,7 +6,7 @@ const sheetComment = { "2": 102 } }, - "index": "4", + "index": "5", "chart": [{ "sheetIndex": "0", "dataSheetIndex": "0", @@ -20,7 +20,7 @@ const sheetComment = { "myTop": "11" }], "status": "0", - "order": "4", + "order": "5", "column": 18, "row": 36, "celldata": [{ diff --git a/src/demoData/sheetFormula.js b/src/demoData/sheetFormula.js index b896b7e..804e48c 100644 --- a/src/demoData/sheetFormula.js +++ b/src/demoData/sheetFormula.js @@ -6928,6 +6928,288 @@ const sheetFormula = { "c": 10, "v": {} }], + "calcChain":[ + { + "r": 6, + "c": 3, + "index": 1, + "func": [ + true, + 23.75, + "=AVERAGE(D3:D6)" + ], + "color": "w", + "parent": null, + "chidren": {}, + "times": 0 + }, + { + "r": 7, + "c": 3, + "index": 1, + "func": [ + true, + 30, + "=MAX(D3:D6)" + ], + "color": "w", + "parent": null, + "chidren": {}, + "times": 0 + }, + { + "r": 8, + "c": 3, + "index": 1, + "func": [ + true, + 17, + "=MIN(D3:D6)" + ], + "color": "w", + "parent": null, + "chidren": {}, + "times": 0 + }, + { + "r": 5, + "c": 9, + "index": 1, + "func": [ + true, + "J2", + "=INDIRECT(\"I2\")" + ], + "color": "w", + "parent": null, + "chidren": {}, + "times": 0 + }, + { + "r": 6, + "c": 9, + "index": 1, + "func": [ + true, + 1, + "=INDIRECT(I2)" + ], + "color": "w", + "parent": null, + "chidren": {}, + "times": 0 + }, + { + "r": 7, + "c": 9, + "index": 1, + "func": [ + true, + "I", + "=INDIRECT(\"I\"&(1+2))" + ], + "color": "w", + "parent": null, + "chidren": {}, + "times": 0 + }, + { + "r": 8, + "c": 9, + "index": 1, + "func": [ + true, + 1, + "=INDIRECT(I4&J3)" + ], + "color": "w", + "parent": null, + "chidren": {}, + "times": 0 + }, + { + "r": 9, + "c": 9, + "index": 1, + "func": [ + true, + "#REF!", + "=INDIRECT(\"Formula!\"&I2)" + ], + "color": "w", + "parent": null, + "chidren": {}, + "times": 0 + }, + { + "r": 10, + "c": 9, + "index": 1, + "func": [ + true, + "#REF!", + "=INDIRECT(\"Formula!I2\")" + ], + "color": "w", + "parent": null, + "chidren": {}, + "times": 0 + }, + { + "r": 14, + "c": 7, + "index": 1, + "func": [ + true, + 207, + "=SUBTOTAL(9,OFFSET($D$15,ROW($D$15:$D$18)-ROW($D$15),1,3))" + ], + "color": "w", + "parent": null, + "chidren": {}, + "times": 0 + }, + { + "r": 15, + "c": 7, + "index": 1, + "func": [ + true, + 182, + "=SUBTOTAL(9,OFFSET(E15,ROW(E15:E18)-ROW(E15),1,3))" + ], + "color": "w", + "parent": null, + "chidren": {}, + "times": 0 + }, + { + "r": 16, + "c": 7, + "index": 1, + "func": [ + true, + 152, + "=SUBTOTAL(9,OFFSET(F15,ROW(F15:F18)-ROW(F15),1,3))" + ], + "color": "w", + "parent": null, + "chidren": {}, + "times": 0 + }, + { + "r": 17, + "c": 7, + "index": 1, + "func": [ + true, + 541, + "=SUBTOTAL(9,OFFSET(G15,ROW(G15:G18)-ROW(G15),1,3))" + ], + "color": "w", + "parent": null, + "chidren": {}, + "times": 0 + }, + { + "r": 22, + "c": 8, + "index": 1, + "func": [ + true, + "#NAME?", + "=INDEX(D21:D25,MATCH(TRUE,ISNA(MATCH(D21:D25,C21:C27,0)),0))" + ], + "color": "w", + "parent": null, + "chidren": {}, + "times": 0 + }, + { + "r": 23, + "c": 8, + "index": 1, + "func": [ + true, + "#NAME?", + "=INDEX(D21:D25,MATCH(TRUE,ISNA(MATCH(D21:D25,C21:C27,0)),0))" + ], + "color": "w", + "parent": null, + "chidren": {}, + "times": 0 + }, + { + "r": 38, + "c": 6, + "index": 1, + "func": [ + true, + 1, + "=SUM(IF((C31:C39=\"Fax\")+(D31:D39=\"Jones\")<>2,1,0))" + ], + "color": "w", + "parent": null, + "chidren": {}, + "times": 0 + }, + { + "r": 30, + "c": 6, + "index": 1, + "func": [ + true, + "#NAME?", + "=SUM((C31:C39=\"Fax\")*(D31:D39=\"Brown\")*(E31:E39))" + ], + "color": "w", + "parent": null, + "chidren": {}, + "times": 0 + }, + { + "r": 32, + "c": 6, + "index": 1, + "func": [ + true, + "#NAME?", + "=SUM((C31:C39=\"Fax\")*(D31:D39=\"Brown\"))" + ], + "color": "w", + "parent": null, + "chidren": {}, + "times": 0 + }, + { + "r": 34, + "c": 6, + "index": 1, + "func": [ + true, + 1, + "=SUM(IF((C31:C39=\"Fax\")+(D31:D39=\"Jones\"),1,0))" + ], + "color": "w", + "parent": null, + "chidren": {}, + "times": 0 + }, + { + "r": 36, + "c": 6, + "index": 1, + "func": [ + true, + 1, + "=SUM(IF(MOD((C31:C39=\"Fax\")+(D31:D39=\"Jones\"),2),1,0))" + ], + "color": "w", + "parent": null, + "chidren": {}, + "times": 0 + } + ], "visibledatarow": [], "visibledatacolumn": [], "rowsplit": [], diff --git a/src/demoData/sheetPivotTable.js b/src/demoData/sheetPivotTable.js index ca25551..ef0946d 100644 --- a/src/demoData/sheetPivotTable.js +++ b/src/demoData/sheetPivotTable.js @@ -2,7 +2,7 @@ const sheetPivotTable = { "name": "PivotTable", "color": "", "config": {}, - "index": "6", + "index": "7", "chart": [{ "sheetIndex": "0", "dataSheetIndex": "0", @@ -16,7 +16,7 @@ const sheetPivotTable = { "myTop": "11" }], "status": "0", - "order": "6", + "order": "7", "column": 18, "row": 36, "celldata": [{ diff --git a/src/demoData/sheetPivotTableData.js b/src/demoData/sheetPivotTableData.js index f6adef7..d3fb2ba 100644 --- a/src/demoData/sheetPivotTableData.js +++ b/src/demoData/sheetPivotTableData.js @@ -4,7 +4,7 @@ const sheetPivotTableData = { "config": { "merge": {} }, - "index": "5", + "index": "6", "chart": [{ "sheetIndex": "0", "dataSheetIndex": "0", @@ -18,7 +18,7 @@ const sheetPivotTableData = { "myTop": "11" }], "status": "0", - "order": "5", + "order": "6", "hide": 1, "column": 18, "row": 36, diff --git a/src/demoData/sheetSparkline.js b/src/demoData/sheetSparkline.js new file mode 100644 index 0000000..48afea6 --- /dev/null +++ b/src/demoData/sheetSparkline.js @@ -0,0 +1,790 @@ +const sheetSparkline = { + "name": "Sparkline", + "color": "", + "config": { + "merge": { + "1_2": { + "r": 1, + "c": 2, + "rs": 1, + "cs": 2 + }, + "1_4": { + "r": 1, + "c": 4, + "rs": 1, + "cs": 2 + }, + "0_0": { + "r": 0, + "c": 0, + "rs": 1, + "cs": 6 + }, + "2_2": { + "r": 2, + "c": 2, + "rs": 3, + "cs": 2 + }, + "2_4": { + "r": 2, + "c": 4, + "rs": 3, + "cs": 2 + } + }, + "rowlen": { + "0": 25 + }, + "columlen": { + "0": 101 + } + }, + "index": "4", + "chart": [ + { + "sheetIndex": "0", + "dataSheetIndex": "0", + "chartType": "column", + "row": "[1,3]", + "column": "[3,3]", + "chartStyle": "default", + "myWidth": "480", + "myHeight": "288", + "myLeft": "67", + "myTop": "11" + } + ], + "status": "0", + "order": "4", + "column": 18, + "row": 36, + "celldata": [ + { + "r": 0, + "c": 0, + "v": { + "v": "The company revenue in 2014", + "ct": { + "fa": "General", + "t": "g" + }, + "m": "The company revenue in 2014", + "mc": { + "r": 0, + "c": 0, + "rs": 1, + "cs": 6 + }, + "fs": "14", + "ht": "0", + "vt": "0" + } + }, + { + "r": 0, + "c": 1, + "v": { + "mc": { + "r": 0, + "c": 0 + }, + "fs": "14", + "ht": "0", + "vt": "0" + } + }, + { + "r": 0, + "c": 2, + "v": { + "mc": { + "r": 0, + "c": 0 + }, + "fs": "14", + "ht": "0", + "vt": "0" + } + }, + { + "r": 0, + "c": 3, + "v": { + "mc": { + "r": 0, + "c": 0 + }, + "fs": "14", + "ht": "0", + "vt": "0" + } + }, + { + "r": 0, + "c": 4, + "v": { + "mc": { + "r": 0, + "c": 0 + }, + "fs": "14", + "ht": "0", + "vt": "0" + } + }, + { + "r": 0, + "c": 5, + "v": { + "mc": { + "r": 0, + "c": 0 + }, + "fs": "14", + "ht": "0", + "vt": "0" + } + }, + { + "r": 1, + "c": 0, + "v": { + "m": "Month", + "ct": { + "fa": "General", + "t": "g" + }, + "v": "Month", + "bg": "#f1c232", + "fc": "#ffffff", + "ht": "0", + "vt": "0" + } + }, + { + "r": 1, + "c": 1, + "v": { + "m": "Revenue", + "ct": { + "fa": "General", + "t": "g" + }, + "v": "Revenue", + "bg": "#f1c232", + "fc": "#ffffff", + "ht": "0", + "vt": "0" + } + }, + { + "r": 1, + "c": 2, + "v": { + "m": "Diagram 1", + "ct": { + "fa": "General", + "t": "g" + }, + "v": "Diagram 1", + "mc": { + "r": 1, + "c": 2, + "rs": 1, + "cs": 2 + }, + "bg": "#f1c232", + "fc": "#ffffff", + "ht": "0", + "vt": "0" + } + }, + { + "r": 1, + "c": 3, + "v": { + "mc": { + "r": 1, + "c": 2 + }, + "bg": "#f1c232", + "fc": "#ffffff", + "ht": "0", + "vt": "0" + } + }, + { + "r": 1, + "c": 4, + "v": { + "m": "Diagram 2", + "ct": { + "fa": "General", + "t": "g" + }, + "v": "Diagram 2", + "mc": { + "r": 1, + "c": 4, + "rs": 1, + "cs": 2 + }, + "bg": "#f1c232", + "fc": "#ffffff", + "ht": "0", + "vt": "0" + } + }, + { + "r": 1, + "c": 5, + "v": { + "mc": { + "r": 1, + "c": 4 + }, + "bg": "#f1c232", + "fc": "#ffffff", + "ht": "0", + "vt": "0" + } + }, + { + "r": 2, + "c": 0, + "v": { + "m": "2014-02-01", + "ct": { + "fa": "yyyy-MM-dd", + "t": "d" + }, + "v": 41671 + } + }, + { + "r": 2, + "c": 1, + "v": { + "v": 30, + "ct": { + "fa": "General", + "t": "n" + }, + "m": "30", + "ht": "0", + "vt": "0" + } + }, + { + "r": 2, + "c": 2, + "v": { + "mc": { + "r": 2, + "c": 2, + "rs": 3, + "cs": 2 + }, + "f": "=LINESPLINES(B3:B5,'pink',4,'avg','yellow','red','green',3)", + "spl": { + "shapes": { + "0": { + "id": 0, + "type": "Shape", + "args": [ + 0, + [ + [ + 0, + 20 + ], + [ + 0, + 20 + ], + [ + 72, + 51 + ], + [ + 144, + 3 + ] + ], + "pink", + null, + 4 + ] + }, + "1": { + "id": 1, + "type": "Rect", + "args": [ + 1, + 0, + null, + 144, + null, + null, + "yellow" + ] + }, + "2": { + "id": 2, + "type": "Circle", + "args": [ + 2, + 72, + 51, + 3, + null, + "green", + null + ] + }, + "3": { + "id": 3, + "type": "Circle", + "args": [ + 3, + 144, + 3, + 3, + null, + "red", + null + ] + } + }, + "shapeseq": [ + 0, + 1, + 2, + 3 + ], + "offsetX": 0, + "offsetY": 5, + "pixelWidth": 147, + "pixelHeight": 55 + } + } + }, + { + "r": 2, + "c": 3, + "v": { + "mc": { + "r": 2, + "c": 2 + } + } + }, + { + "r": 2, + "c": 4, + "v": { + "mc": { + "r": 2, + "c": 4, + "rs": 3, + "cs": 2 + }, + "f": "=COLUMNSPLINES(B3:B5,35,'red','green','auto','brown')", + "spl": { + "shapes": { + "0": { + "id": 0, + "type": "Rect", + "args": [ + 0, + 98, + 1, + 13, + 28, + "red", + "red" + ] + }, + "1": { + "id": 1, + "type": "Rect", + "args": [ + 1, + 49, + 30, + 13, + 20, + "green", + "green" + ] + }, + "2": { + "id": 2, + "type": "Rect", + "args": [ + 2, + 0, + 20, + 13, + 9, + "brown", + "brown" + ] + } + }, + "shapeseq": [ + 0, + 1, + 2 + ], + "offsetX": 0, + "offsetY": 0, + "pixelWidth": 147, + "pixelHeight": 60 + } + } + }, + { + "r": 2, + "c": 5, + "v": { + "mc": { + "r": 2, + "c": 4 + } + } + }, + { + "r": 3, + "c": 0, + "v": { + "m": "2014-03-01", + "ct": { + "fa": "yyyy-MM-dd", + "t": "d" + }, + "v": 41699 + } + }, + { + "r": 3, + "c": 1, + "v": { + "v": -60, + "ct": { + "fa": "General", + "t": "n" + }, + "m": "-60", + "ht": "0", + "vt": "0" + } + }, + { + "r": 3, + "c": 2, + "v": { + "mc": { + "r": 2, + "c": 2 + } + } + }, + { + "r": 3, + "c": 3, + "v": { + "mc": { + "r": 2, + "c": 2 + } + } + }, + { + "r": 3, + "c": 4, + "v": { + "mc": { + "r": 2, + "c": 4 + } + } + }, + { + "r": 3, + "c": 5, + "v": { + "mc": { + "r": 2, + "c": 4 + } + } + }, + { + "r": 4, + "c": 0, + "v": { + "m": "2014-04-01", + "ct": { + "fa": "yyyy-MM-dd", + "t": "d" + }, + "v": 41730 + } + }, + { + "r": 4, + "c": 1, + "v": { + "v": 80, + "ct": { + "fa": "General", + "t": "n" + }, + "m": "80", + "ht": "0", + "vt": "0" + } + }, + { + "r": 4, + "c": 2, + "v": { + "mc": { + "r": 2, + "c": 2 + } + } + }, + { + "r": 4, + "c": 3, + "v": { + "mc": { + "r": 2, + "c": 2 + } + } + }, + { + "r": 4, + "c": 4, + "v": { + "mc": { + "r": 2, + "c": 4 + } + } + }, + { + "r": 4, + "c": 5, + "v": { + "mc": { + "r": 2, + "c": 4 + } + } + } + ], + "visibledatarow": [ + 26, + 46, + 66, + 86, + 106, + 126, + 146, + 166, + 186, + 206, + 226, + 246, + 266, + 286, + 306, + 326, + 346, + 366, + 386, + 406, + 426, + 446, + 466, + 486, + 506, + 526, + 546, + 566, + 586, + 606, + 626, + 646, + 666, + 686, + 706, + 726, + 746, + 766, + 786, + 806, + 826, + 846, + 866, + 886, + 906, + 926, + 946, + 966, + 986, + 1006, + 1026, + 1046, + 1066, + 1086, + 1106, + 1126, + 1146, + 1166, + 1186, + 1206, + 1226, + 1246, + 1266, + 1286, + 1306, + 1326, + 1346, + 1366, + 1386, + 1406, + 1426, + 1446, + 1466, + 1486, + 1506, + 1526, + 1546, + 1566, + 1586, + 1606, + 1626, + 1646, + 1666, + 1686 + ], + "visibledatacolumn": [ + 102, + 176, + 250, + 324, + 398, + 472, + 546, + 620, + 694, + 768, + 842, + 916, + 990, + 1064, + 1138, + 1212, + 1286, + 1360, + 1434, + 1508, + 1582, + 1656, + 1730, + 1804, + 1878, + 1952, + 2026, + 2100, + 2174, + 2248, + 2322, + 2396, + 2470, + 2544, + 2618, + 2692, + 2766, + 2840, + 2914, + 2988, + 3062, + 3136, + 3210, + 3284, + 3358, + 3432, + 3506, + 3580, + 3654, + 3728, + 3802, + 3876, + 3950, + 4024, + 4098, + 4172, + 4246, + 4320, + 4394, + 4468 + ], + "rowsplit": [], + "ch_width": 4748, + "rh_height": 1790, + "luckysheet_select_save": [ + { + "row": [ + 0, + 0 + ], + "column": [ + 0, + 0 + ] + } + ], + "luckysheet_selection_range": [], + "scrollLeft": 0, + "scrollTop": 0, + "calcChain": [ + { + "r": 2, + "c": 2, + "index": "4", + "func": [ + true, + "", + "=LINESPLINES(B3:B5,'pink',4,'avg','yellow','red','green',3)" + ], + "color": "w", + "parent": null, + "chidren": {}, + "times": 0 + }, + { + "r": 2, + "c": 4, + "index": "4", + "func": [ + true, + "", + "=COLUMNSPLINES(B3:B5,35,'red','green','auto','brown')" + ], + "color": "w", + "parent": null, + "chidren": {}, + "times": 0 + } + ] +} + +export default sheetSparkline; \ No newline at end of file diff --git a/src/function/functionImplementation.js b/src/function/functionImplementation.js index a5fb3a2..f9e540a 100644 --- a/src/function/functionImplementation.js +++ b/src/function/functionImplementation.js @@ -10301,11 +10301,9 @@ const functionImplementation = { //计算 if(A1){ - var reg = /^(([a-zA-Z]+)|([$][a-zA-Z]+))(([0-9]+)|([$][0-9]+))$/g; - - if(reg.test(ref_text)){ - var row = parseInt(ref_text.replace(/[^0-9]/g, "")) - 1; - var col = ABCatNum(ref_text.replace(/[^A-Za-z]/g, "")); + if(formula.iscelldata(ref_text)){ + let cellrange = formula.getcellrange(ref_text); + let row = cellrange.row[0], col = cellrange.column[0]; if(row < 0 || row >= Store.flowdata.length || col < 0 || col >= Store.flowdata[0].length){ return formula.error.r; @@ -10322,11 +10320,9 @@ const functionImplementation = { } } else{ - var reg = /^[R][0-9]+[C][0-9]+$/g; - - if(reg.test(ref_text)){ - var row = parseInt(ref_text.split("R")[1].split("C")[0]); - var col = parseInt(ref_text.split("R")[1].split("C")[1]); + if(formula.iscelldata(ref_text)){ + let cellrange = formula.getcellrange(ref_text); + let row = cellrange.row[0], col = cellrange.column[0]; if(row < 0 || row >= Store.flowdata.length || col < 0 || col >= Store.flowdata[0].length){ return formula.error.r; diff --git a/src/global/draw.js b/src/global/draw.js index 50e3bcd..feb0bdc 100644 --- a/src/global/draw.js +++ b/src/global/draw.js @@ -833,7 +833,7 @@ function luckysheetDrawMain(scrollWidth, scrollHeight, drawWidth, drawHeight, of //水平对齐方式是 居中或居右对齐 且单元格宽度小于文字宽度 (用离屏canvas渲染) let canvasName, cellsize; - if(browser.BrowserType() != "Safari" && (canvasType == "offline" || ((horizonAlign == "0" || horizonAlign == "2") && (end_c - start_c) < textW) || ((verticalAlign == "0" || verticalAlign == "2") && (end_r - start_r) < textH))){ + if(browser.BrowserType() != "Safari" && (canvasType == "offline" || ((horizonAlign == "0" || horizonAlign == "2") && (end_c - start_c) < textW) || ((end_r - start_r) < textH))){ canvasName = offlinecanvas; canvasName.font = fontset; diff --git a/src/index.html b/src/index.html index dfa074d..6836581 100644 --- a/src/index.html +++ b/src/index.html @@ -27,13 +27,14 @@ import sheetComment from './demoData/sheetComment.js' import sheetPivotTableData from './demoData/sheetPivotTableData.js' import sheetPivotTable from './demoData/sheetPivotTable.js' + import sheetSparkline from './demoData/sheetSparkline.js' $(function () { luckysheet.create({ container: 'luckysheet', - lang: 'zh', + lang: 'en', plugins: ['chart'], - data: [sheetCell,sheetFormula,sheetConditionFormat,sheetTable,sheetComment,sheetPivotTableData,sheetPivotTable] + data: [sheetCell,sheetFormula,sheetConditionFormat,sheetTable,sheetSparkline,sheetComment,sheetPivotTableData,sheetPivotTable] }) }) diff --git a/src/index.js b/src/index.js index 252759c..4da8f11 100644 --- a/src/index.js +++ b/src/index.js @@ -1,7 +1,8 @@ import './utils/math' import { luckysheet } from './core' import __firefox from './utils/polyfill' - +// Prevent gulp warning: 'Use of eval is strongly discouraged, as it poses security risks and may cause issues with minification' +// window.evall = window.eval; // polyfill event in firefox if(window.addEventListener && (navigator.userAgent.indexOf("Firefox") > 0)){ __firefox(); diff --git a/src/locale/en.js b/src/locale/en.js index 402a8dd..66ea980 100644 --- a/src/locale/en.js +++ b/src/locale/en.js @@ -45,12 +45,24 @@ export default { chart: 'Chart', screenshot: 'Screenshot', splitColumn: 'Split column', + + clearText:"Clear color", + noColorSelectedText:"No color is selected", }, alternatingColors:{ applyRange: 'Apply to range', selectRange: 'Select a data range', header: 'Header', footer: 'Footer', + + errorInfo:"Cannot perform this operation on multiple selection areas, please select a single area and try again", + textTitle:"Format style", + custom:"CUSTOM", + close:"close", + selectionTextColor:"Click to select text color", + selectionCellColor:"Click to select cell color", + removeColor:"Remove alternating colors", + colorShow:"color", }, button: { confirm: 'OK', @@ -61,30 +73,245 @@ export default { paintFormatEnd: 'ESC key to exit', }, format:{ - auto: 'Automatic', - text: 'Plain text', - number: 'Number', - percent: 'Percent', - scientific: 'Scientific', - accounting: 'Accounting', - tenThousand: 'Ten thousand', - currency: 'Currency', - tenThousandDecimal: 'Ten thousand (2 decimal places)', - date: 'Date', - time: 'Time', - time24H: 'Time 24H', - dateTime: 'Date time', - dateTime24H: 'Date time 24 H', - customFormats: 'Custom formats', moreCurrency: 'More currency formats', moreDateTime: 'More date and time formats', moreNumber: 'More number formats', + + titleCurrency: 'Currency formats', + decimalPlaces: 'Decimal places', + titleDateTime: 'Date and time formats', + titleNumber: 'Number formats' }, info:{ detailUpdate: 'New opened', detailSave: 'Local cache restored', row: 'row', column: 'column' - } + }, + currencyDetail:{ + RMB:'RMB', + USdollar:'US dollar', + EUR:'EUR', + GBP:'GBP', + HK:'HK', + JPY:'JPY', + AlbanianLek:'Albanian Lek', + AlgerianDinar:'Algerian Dinar', + Afghani:'Afghani', + ArgentinePeso:'Argentine Peso', + UnitedArabEmiratesDirham:'United Arab Emirates Dirham', + ArubanFlorin:'Aruban Florin', + OmaniRial:'Omani Rial', + Azerbaijanimanat:'Azerbaijani manat', + EgyptianPound:'Egyptian Pound', + EthiopianBirr:'Ethiopian Birr', + AngolaKwanza:'Angola Kwanza', + AustralianDollar:'Australian Dollar', + Patacas:'Patacas', + BarbadosDollar:'Barbados Dollar', + PapuaNewGuineaKina:'Papua New Guinea Kina', + BahamianDollar:'Bahamian Dollar', + PakistanRupee:'Pakistan Rupee', + ParaguayanGuarani:'Paraguayan Guarani', + BahrainiDinar:'Bahraini Dinar', + PanamanianBalboa:'Panamanian Balboa', + Brazilianreal:'Brazilian real', + Belarusianruble:'Belarusian ruble', + BermudianDollar:'Bermudian Dollar', + BulgarianLev:'Bulgarian Lev', + IcelandKrona:'Iceland Krona', + BosniaHerzegovinaConvertibleMark:'Bosnia-Herzegovina Convertible Mark', + PolishZloty:'Polish Zloty', + Boliviano:'Boliviano', + BelizeDollar:'Belize Dollar', + BotswanaPula:'Botswana Pula', + NotDannuzhamu:'Not Dannuzhamu', + BurundiFranc:'Burundi Franc', + NorthKoreanWon:'North Korean Won', + DanishKrone:'Danish Krone', + EastCaribbeanDollar:'East Caribbean Dollar', + DominicaPeso:'Dominica Peso', + RussianRuble:'Russian Ruble', + EritreanNakfa:'Eritrean Nakfa', + CFAfranc:'CFA franc', + PhilippinePeso:'Philippine Peso', + FijiDollar:'Fiji Dollar', + CapeVerdeEscudo:'Cape Verde Escudo', + FalklandIslandsPound:'Falkland Islands Pound', + GambianDalasi:'Gambian Dalasi', + Congolesefranc:'Congolese franc', + ColombianPeso:'Colombian Peso', + CostaRicanColon:'Costa Rican Colon', + CubanPeso:'Cuban Peso', + Cubanconvertiblepeso:'Cuban convertible peso', + GuyanaDollar:'Guyana Dollar', + KazakhstanTenge:'Kazakhstan Tenge', + Haitiangourde:'Haitian gourde', + won:'won', + NetherlandsAntillesGuilder:'Netherlands Antilles Guilder', + Honduraslempiras:'Honduras lempiras', + DjiboutiFranc:'Djibouti Franc', + KyrgyzstanSom:'Kyrgyzstan Som', + GuineaFranc:'Guinea Franc', + CanadianDollar:'Canadian Dollar', + GhanaianCedi:'Ghanaian Cedi', + Cambodianriel:'Cambodian riel', + CzechKoruna:'Czech Koruna', + ZimbabweDollar:'Zimbabwe Dollar', + QatariRiyal:'Qatari Riyal', + CaymanIslandsDollar:'Cayman Islands Dollar', + Comorianfranc:'Comorian franc', + KuwaitiDinar:'Kuwaiti Dinar', + CroatianKuna:'Croatian Kuna', + KenyanShilling:'Kenyan Shilling', + LesothoLoti:'Lesotho Loti', + LaoKip:'Lao Kip', + LebanesePound:'Lebanese Pound', + Lithuanianlitas:'Lithuanian litas', + LibyanDinar:'Libyan Dinar', + LiberianDollar:'Liberian Dollar', + RwandaFranc:'Rwanda Franc', + RomanianLeu:'Romanian Leu', + MalagasyAriary:'Malagasy Ariary', + MaldivianRufiyaa:'Maldivian Rufiyaa', + MalawiKwacha:'Malawi Kwacha', + MalaysianRinggit:'Malaysian Ringgit', + MacedoniawearingDinar:'Macedonia wearing Dinar', + MauritiusRupee:'Mauritius Rupee', + MauritanianOuguiya:'Mauritanian Ouguiya', + MongolianTugrik:'Mongolian Tugrik', + BangladeshiTaka:'Bangladeshi Taka', + PeruvianNuevoSol:'Peruvian Nuevo Sol', + MyanmarKyat:'Myanmar Kyat', + MoldovanLeu:'Moldovan Leu', + MoroccanDirham:'Moroccan Dirham', + MozambiqueMetical:'Mozambique Metical', + MexicanPeso:'Mexican Peso', + NamibianDollar:'Namibian Dollar', + SouthAfricanRand:'South African Rand', + SouthSudanesePound:'South Sudanese Pound', + NicaraguaCordoba:'Nicaragua Cordoba', + NepaleseRupee:'Nepalese Rupee', + NigerianNaira:'Nigerian Naira', + NorwegianKrone:'Norwegian Krone', + GeorgianLari:'Georgian Lari', + RMBOffshore:'RMB (Offshore)', + SwedishKrona:'Swedish Krona', + SwissFranc:'Swiss Franc', + SerbianDinar:'Serbian Dinar', + SierraLeone:'Sierra Leone', + SeychellesRupee:'Seychelles Rupee', + SaudiRiyal:'Saudi Riyal', + SaoTomeDobra:'Sao Tome Dobra', + SaintHelenapound:'Saint Helena pound', + SriLankaRupee:'Sri Lanka Rupee', + SwazilandLilangeni:'Swaziland Lilangeni', + SudanesePound:'Sudanese Pound', + Surinamesedollar:'Surinamese dollar', + SolomonIslandsDollar:'Solomon Islands Dollar', + SomaliShilling:'Somali Shilling', + TajikistanSomoni:'Tajikistan Somoni', + PacificFranc:'Pacific Franc', + ThaiBaht:'Thai Baht', + TanzanianShilling:'Tanzanian Shilling', + TonganPaanga:"Tongan Pa'anga", + TrinidadandTobagoDollar:'Trinidad and Tobago Dollar', + TunisianDinar:'Tunisian Dinar', + TurkishLira:'Turkish Lira', + VanuatuVatu:'Vanuatu Vatu', + GuatemalanQuetzal:'Guatemalan Quetzal', + CommissionBolivar:'Commission Bolivar', + BruneiDollar:'Brunei Dollar', + UgandanShilling:'Ugandan Shilling', + UkrainianHryvnia:'Ukrainian Hryvnia', + UruguayanPeso:'Uruguayan Peso', + Uzbekistansom:'Uzbekistan som', + WesternSamoaTala:'Western Samoa Tala', + SingaporeDollar:'Singapore Dollar', + NT:'NT', + NewZealandDollar:'New Zealand Dollar', + HungarianForint:'Hungarian Forint', + SyrianPound:'Syrian Pound', + JamaicanDollar:'Jamaican Dollar', + ArmenianDram:'Armenian Dram', + YemeniRial:'Yemeni Rial', + IraqiDinar:'Iraqi Dinar', + IranianRial:'Iranian Rial', + NewIsraeliShekel:'New Israeli Shekel', + IndianRupee:'Indian Rupee', + IndonesianRupiah:'Indonesian Rupiah', + JordanianDinar:'Jordanian Dinar', + VND:'VND', + ZambianKwacha:'Zambian Kwacha', + GibraltarPound:'Gibraltar Pound', + ChileanPeso:'Chilean Peso', + CFAFrancBEAC:'CFA Franc BEAC' + }, + defaultFmt:[ + { "text": 'Automatic', "value": "General", "example": "" }, + { "text": 'Plain text', "value": "@", "example": "" }, + { "text": "", "value": "split", "example": "" }, + { "text": 'Number', "value": "##0.00", "example": "1000.12" }, + { "text": 'Percent', "value": "#0.00%", "example": "12.21%" }, + { "text": 'Scientific', "value": "0.00E+00", "example": "1.01E+5" }, + { "text": "", "value": "split", "example": "" }, + { "text": 'Accounting', "value": "¥(0.00)", "example": "¥(1200.09)" }, + { "text": 'Currency', "value": "¥0.00", "example": "¥1200.09" }, + { "text": "", "value": "split", "example": "" }, + { "text": 'Date', "value": "yyyy-MM-dd", "example": "2017-11-29" }, + { "text": 'Time', "value": "hh:mm AM/PM", "example": "3:00 PM" }, + { "text": 'Time 24H', "value": "hh:mm", "example": "15:00" }, + { "text": 'Date time', "value": "yyyy-MM-dd hh:mm AM/PM", "example": "2017-11-29 3:00 PM" }, + { "text": 'Date time 24 H', "value": "yyyy-MM-dd hh:mm", "example": "2017-11-29 15:00" }, + { "text": "", "value": "split", "example": "" }, + { "text": 'Custom formats', "value": "fmtOtherSelf", "example": "more" } + ], + dateFmtList:[ + { + "name": "1930-08-05", + "value": "yyyy-MM-dd" + }, + { + "name": "1930/8/5", + "value": "yyyy/MM/dd" + }, + { + "name": "08-05", + "value": "MM-dd" + }, + { + "name": "8-5", + "value": "M-d" + }, + { + "name": "13:30:30", + "value": "h:mm:ss" + }, + { + "name": "13:30", + "value": "h:mm" + }, + { + "name": "PM 01:30", + "value": 'AM/PM hh:mm' + }, + { + "name": "PM 1:30", + "value": 'AM/PM h:mm' + }, + { + "name": "PM 1:30:30", + "value": 'AM/PM h:mm:ss' + }, + { + "name": "08-05 PM 01:30", + "value": "MM-dd AM/PM hh:mm" + } + ], + fontFamily:{ + MicrosoftYaHei:"YaHei", + }, + fontarray: ["Times New Roman","Arial","Tahoma","Verdana"], + fontjson: {"arial":1,"times new roman":0,"tahoma":2,"verdana":3} }; \ No newline at end of file diff --git a/src/locale/zh.js b/src/locale/zh.js index 392e524..da3e9aa 100644 --- a/src/locale/zh.js +++ b/src/locale/zh.js @@ -44,12 +44,26 @@ export default { chart: '图表', screenshot: '截图', splitColumn: '分列', + + clearText:"清除颜色选择", + noColorSelectedText:"没有颜色被选择", + + }, alternatingColors:{ applyRange: '应用范围', selectRange: '选择应用范围', header: '页眉', footer: '页脚', + + errorInfo:"不能对多重选择区域执行此操作,请选择单个区域,然后再试", + textTitle:"格式样式", + custom:"自定义", + close:"关闭", + selectionTextColor:"点击选择文本颜色", + selectionCellColor:"点击选择单元格颜色", + removeColor:"移除交替颜色", + colorShow:"颜色", }, button: { confirm: '确定', @@ -60,29 +74,265 @@ export default { paintFormatEnd: 'ESC键退出', }, format: { - auto: '自动', - text: '纯文本', - number: '数字', - percent: '百分比', - scientific: '科学计数', - accounting: '会计', - tenThousand: '万元', - currency: '货币', - tenThousandDecimal: '万元2位小数', - date: '日期', - time: '时间', - time24H: '时间24H', - dateTime: '日期时间', - dateTime24H: '日期时间24H', - customFormats: '自定义格式', moreCurrency: '更多货币格式', moreDateTime: '更多日期与时间格式', - moreNumber: '更多数字格式' + moreNumber: '更多数字格式', + + titleCurrency: '货币格式', + decimalPlaces: '小数位数', + titleDateTime: '日期与时间格式', + titleNumber: '数字格式' }, info: { detailUpdate: '新打开', detailSave: '已恢复本地缓存', row: '行', column: '列' - } + }, + currencyDetail:{ + RMB:'人民币', + USdollar:'美元', + EUR:'欧元', + GBP:'英镑', + HK:'港元', + JPY:'日元', + AlbanianLek:'阿尔巴尼亚列克', + AlgerianDinar:'阿尔及利亚第纳尔', + Afghani:'阿富汗尼', + ArgentinePeso:'阿根廷比索', + UnitedArabEmiratesDirham:'阿拉伯联合酋长国迪拉姆', + ArubanFlorin:'阿鲁巴弗罗林', + OmaniRial:'阿曼里亚尔', + Azerbaijanimanat:'阿塞拜疆马纳特', + EgyptianPound:'埃及镑', + EthiopianBirr:'埃塞俄比亚比尔', + AngolaKwanza:'安哥拉宽扎', + AustralianDollar:'澳大利亚元', + Patacas:'澳门元', + BarbadosDollar:'巴巴多斯元', + PapuaNewGuineaKina:'巴布亚新几内亚基那', + BahamianDollar:'巴哈马元', + PakistanRupee:'巴基斯坦卢比', + ParaguayanGuarani:'巴拉圭瓜拉尼', + BahrainiDinar:'巴林第纳尔', + PanamanianBalboa:'巴拿马巴波亚', + Brazilianreal:'巴西里亚伊', + Belarusianruble:'白俄罗斯卢布', + BermudianDollar:'百慕大元', + BulgarianLev:'保加利亚列弗', + IcelandKrona:'冰岛克朗', + BosniaHerzegovinaConvertibleMark:'波黑可兑换马克', + PolishZloty:'波兰兹罗提', + Boliviano:'玻利维亚诺', + BelizeDollar:'伯利兹元', + BotswanaPula:'博茨瓦纳普拉', + NotDannuzhamu:'不丹努扎姆', + BurundiFranc:'布隆迪法郎', + NorthKoreanWon:'朝鲜圆', + DanishKrone:'丹麦克朗', + EastCaribbeanDollar:'东加勒比元', + DominicaPeso:'多米尼加比索', + RussianRuble:'俄国卢布', + EritreanNakfa:'厄立特里亚纳克法', + CFAfranc:'非洲金融共同体法郎', + PhilippinePeso:'菲律宾比索', + FijiDollar:'斐济元', + CapeVerdeEscudo:'佛得角埃斯库多', + FalklandIslandsPound:'福克兰群岛镑', + GambianDalasi:'冈比亚达拉西', + Congolesefranc:'刚果法郎', + ColombianPeso:'哥伦比亚比索', + CostaRicanColon:'哥斯达黎加科朗', + CubanPeso:'古巴比索', + Cubanconvertiblepeso:'古巴可兑换比索', + GuyanaDollar:'圭亚那元', + KazakhstanTenge:'哈萨克斯坦坚戈', + Haitiangourde:'海地古德', + won:'韩元', + NetherlandsAntillesGuilder:'荷属安的列斯盾', + Honduraslempiras:'洪都拉斯拉伦皮拉', + DjiboutiFranc:'吉布提法郎', + KyrgyzstanSom:'吉尔吉斯斯坦索姆', + GuineaFranc:'几内亚法郎', + CanadianDollar:'加拿大元', + GhanaianCedi:'加纳塞地', + Cambodianriel:'柬埔寨瑞尔', + CzechKoruna:'捷克克朗', + ZimbabweDollar:'津巴布韦元', + QatariRiyal:'卡塔尔里亚尔', + CaymanIslandsDollar:'开曼群岛元', + Comorianfranc:'科摩罗法郎', + KuwaitiDinar:'科威特第纳尔', + CroatianKuna:'克罗地亚库纳', + KenyanShilling:'肯尼亚先令', + LesothoLoti:'莱索托洛蒂', + LaoKip:'老挝基普', + LebanesePound:'黎巴嫩镑', + Lithuanianlitas:'立陶宛立特', + LibyanDinar:'利比亚第纳尔', + LiberianDollar:'利比亚元', + RwandaFranc:'卢旺达法郎', + RomanianLeu:'罗马尼亚列伊', + MalagasyAriary:'马达加斯加阿里亚里', + MaldivianRufiyaa:'马尔代夫拉菲亚', + MalawiKwacha:'马拉维克瓦查', + MalaysianRinggit:'马来西亚林吉特', + MacedoniawearingDinar:'马其顿戴第纳尔', + MauritiusRupee:'毛里求斯卢比', + MauritanianOuguiya:'毛里塔尼亚乌吉亚', + MongolianTugrik:'蒙古图格里克', + BangladeshiTaka:'孟加拉塔卡', + PeruvianNuevoSol:'秘鲁新索尔', + MyanmarKyat:'缅甸开亚特', + MoldovanLeu:'摩尔多瓦列伊', + MoroccanDirham:'摩洛哥迪拉姆', + MozambiqueMetical:'莫桑比克梅蒂卡尔', + MexicanPeso:'墨西哥比索', + NamibianDollar:'纳米比亚元', + SouthAfricanRand:'南非兰特', + SouthSudanesePound:'南苏丹镑', + NicaraguaCordoba:'尼加拉瓜科多巴', + NepaleseRupee:'尼泊尔卢比', + NigerianNaira:'尼日利亚奈拉', + NorwegianKrone:'挪威克朗', + GeorgianLari:'乔治亚拉瑞', + RMBOffshore:'人民币(离岸)', + SwedishKrona:'瑞典克朗', + SwissFranc:'瑞士法郎', + SerbianDinar:'塞尔维亚第纳尔', + SierraLeone:'塞拉利昂利昂', + SeychellesRupee:'塞舌尔卢比', + SaudiRiyal:'沙特里亚尔', + SaoTomeDobra:'圣多美多布拉', + SaintHelenapound:'圣赫勒拿群岛磅', + SriLankaRupee:'斯里兰卡卢比', + SwazilandLilangeni:'斯威士兰里兰吉尼', + SudanesePound:'苏丹镑', + Surinamesedollar:'苏里南元', + SolomonIslandsDollar:'所罗门群岛元', + SomaliShilling:'索马里先令', + TajikistanSomoni:'塔吉克斯坦索莫尼', + PacificFranc:'太平洋法郎', + ThaiBaht:'泰国铢', + TanzanianShilling:'坦桑尼亚先令', + TonganPaanga:'汤加潘加', + TrinidadandTobagoDollar:'特立尼达和多巴哥元', + TunisianDinar:'突尼斯第纳尔', + TurkishLira:'土耳其里拉', + VanuatuVatu:'瓦努阿图瓦图', + GuatemalanQuetzal:'危地马拉格查尔', + CommissionBolivar:'委内瑞拉博利瓦', + BruneiDollar:'文莱元', + UgandanShilling:'乌干达先令', + UkrainianHryvnia:'乌克兰格里夫尼亚', + UruguayanPeso:'乌拉圭比索', + Uzbekistansom:'乌兹别克斯坦苏姆', + WesternSamoaTala:'西萨摩亚塔拉', + SingaporeDollar:'新加坡元', + NT:'新台币', + NewZealandDollar:'新西兰元', + HungarianForint:'匈牙利福林', + SyrianPound:'叙利亚镑', + JamaicanDollar:'牙买加元', + ArmenianDram:'亚美尼亚德拉姆', + YemeniRial:'也门里亚尔', + IraqiDinar:'伊拉克第纳尔', + IranianRial:'伊朗里亚尔', + NewIsraeliShekel:'以色列新谢克尔', + IndianRupee:'印度卢比', + IndonesianRupiah:'印度尼西亚卢比', + JordanianDinar:'约旦第纳尔', + VND:'越南盾', + ZambianKwacha:'赞比亚克瓦查', + GibraltarPound:'直布罗陀镑', + ChileanPeso:'智利比索', + CFAFrancBEAC:'中非金融合作法郎', + }, + defaultFmt:[ + { "text": '自动', "value": "General", "example": "" }, + { "text": '纯文本', "value": "@", "example": "" }, + { "text": "", "value": "split", "example": "" }, + { "text": '数字', "value": "##0.00", "example": "1000.12" }, + { "text": '百分比', "value": "#0.00%", "example": "12.21%" }, + { "text": '科学计数', "value": "0.00E+00", "example": "1.01E+5" }, + { "text": "", "value": "split", "example": "" }, + { "text": '会计', "value": "¥(0.00)", "example": "¥(1200.09)" }, + //{ "text": "财务", "value": "(#.####)", "example": "(1200.09)" }, + { "text": '万元', "value": "w", "example": "1亿2000万2500" }, + { "text": '货币', "value": "¥0.00", "example": "¥1200.09" }, + //{ "text": "货币整数", "value": "¥####", "example": "¥1200" }, + { "text": '万元2位小数', "value": "w0.00", "example": "2万2500.55" }, + { "text": "", "value": "split", "example": "" }, + { "text": '日期', "value": "yyyy-MM-dd", "example": "2017-11-29" }, + { "text": '时间', "value": "hh:mm AM/PM", "example": "3:00 PM" }, + { "text": '时间24H', "value": "hh:mm", "example": "15:00" }, + { "text": '日期时间', "value": "yyyy-MM-dd hh:mm AM/PM", "example": "2017-11-29 3:00 PM" }, + { "text": '日期时间24H', "value": "yyyy-MM-dd hh:mm", "example": "2017-11-29 15:00" }, + { "text": "", "value": "split", "example": "" }, + { "text": '自定义格式', "value": "fmtOtherSelf", "example": "more" } + ], + dateFmtList:[ + { + "name": "1930-08-05", + "value": "yyyy-MM-dd" + }, + { + "name": "1930/8/5", + "value": "yyyy/MM/dd" + }, + { + "name": "1930年8月5日", + "value": 'yyyy"年"M"月"d"日"' + }, + { + "name": "08-05", + "value": "MM-dd" + }, + { + "name": "8-5", + "value": "M-d" + }, + { + "name": "8月5日", + "value": 'M"月"d"日"' + }, + { + "name": "13:30:30", + "value": "h:mm:ss" + }, + { + "name": "13:30", + "value": "h:mm" + }, + { + "name": "下午01:30", + "value": 'AM/PM hh:mm' + }, + { + "name": "下午1:30", + "value": 'AM/PM h:mm' + }, + { + "name": "下午1:30:30", + "value": 'AM/PM h:mm:ss' + }, + { + "name": "08-05 下午01:30", + "value": "MM-dd AM/PM hh:mm" + }, + // { + // "name": "1930年8月5日星期二", + // "value": '' + // }, + // { + // "name": "1930年8月5日星期二 下午1:30:30", + // "value": '' + // }, + ], + fontFamily:{ + MicrosoftYaHei:"Microsoft YaHei", + }, + fontarray: ["微软雅黑","宋体","黑体","楷体","仿宋","新宋体","华文新魏","华文行楷","华文隶书","Arial","Times New Roman","Tahoma","Verdana"], + fontjson: {"微软雅黑":0,"microsoft yahei":0,"宋体":1,"simsun":1,"黑体":2,"simhei":2,"楷体":3,"kaiti":3,"仿宋":4,"fangsong":4,"新宋体":5,"nsimsun":5,"华文新魏":6,"stxinwei":6,"华文行楷":7,"stxingkai":7,"华文隶书":8,"stliti":8,"arial":9,"times new roman":10,"tahoma":11,"verdana":12} + }; diff --git a/src/plugins/js/jquery-ui.min.js b/src/plugins/js/jquery-ui.min.js index 8c459fd..2b81c5b 100644 --- a/src/plugins/js/jquery-ui.min.js +++ b/src/plugins/js/jquery-ui.min.js @@ -1 +1 @@ -!function(){var t;t=function(M){M.ui=M.ui||{};M.ui.version="1.12.1";var n,i=0,l=Array.prototype.slice;M.cleanData=(n=M.cleanData,function(t){var e,i,s;for(s=0;null!=(i=t[s]);s++)try{(e=M._data(i,"events"))&&e.remove&&M(i).triggerHandler("remove")}catch(t){}n(t)}),M.widget=function(t,i,e){var s,n,o,a={},l=t.split(".")[0],h=l+"-"+(t=t.split(".")[1]);return e||(e=i,i=M.Widget),M.isArray(e)&&(e=M.extend.apply(null,[{}].concat(e))),M.expr[":"][h.toLowerCase()]=function(t){return!!M.data(t,h)},M[l]=M[l]||{},s=M[l][t],n=M[l][t]=function(t,e){if(!this._createWidget)return new n(t,e);arguments.length&&this._createWidget(t,e)},M.extend(n,s,{version:e.version,_proto:M.extend({},e),_childConstructors:[]}),(o=new i).options=M.widget.extend({},o.options),M.each(e,function(e,o){M.isFunction(o)?a[e]=function(){function s(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var t,e=this._super,i=this._superApply;return this._super=s,this._superApply=n,t=o.apply(this,arguments),this._super=e,this._superApply=i,t}}():a[e]=o}),n.prototype=M.widget.extend(o,{widgetEventPrefix:s&&o.widgetEventPrefix||t},a,{constructor:n,namespace:l,widgetName:t,widgetFullName:h}),s?(M.each(s._childConstructors,function(t,e){var i=e.prototype;M.widget(i.namespace+"."+i.widgetName,n,e._proto)}),delete s._childConstructors):i._childConstructors.push(n),M.widget.bridge(t,n),n},M.widget.extend=function(t){for(var e,i,s=l.call(arguments,1),n=0,o=s.length;n",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=M(e||this.defaultElement||this)[0],this.element=M(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=M(),this.hoverable=M(),this.focusable=M(),this.classesElementLookup={},e!==this&&(M.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=M(e.style?e.ownerDocument:e.document||e),this.window=M(this.document[0].defaultView||this.document[0].parentWindow)),this.options=M.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:M.noop,_create:M.noop,_init:M.noop,destroy:function(){var i=this;this._destroy(),M.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:M.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return M.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=M.widget.extend({},this.options[t]),n=0;n
"),s=i.children()[0];return M("body").append(i),t=s.offsetWidth,i.css("overflow","scroll"),t===(e=s.offsetWidth)&&(e=i[0].clientWidth),i.remove(),n=t-e},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),s="scroll"===e||"auto"===e&&t.widthC(x(s),x(n))?o.important="horizontal":o.important="vertical",c.using.call(this,t,o)}),a.offset(M.extend(u,{using:t}))})},M.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,o=s.width,a=t.left-e.collisionPosition.marginLeft,l=n-a,h=a+e.collisionWidth-o-n;e.collisionWidth>o?0o?0?@[\]^`{|}~])/g,function(t){return t.replace(e,"\\$1")}),M.fn.labels=function(){var t,e,i,s,n;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(s=this.eq(0).parents("label"),(i=this.attr("id"))&&(n=(t=this.eq(0).parents().last()).add(t.length?t.siblings():this.siblings()),e="label[for='"+M.ui.escapeSelector(i)+"']",s=s.add(n.find(e).addBack(e))),this.pushStack(s))},M.fn.extend({uniqueId:(t=0,function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&M(this).removeAttr("id")})}});var e,t,o=/ui-corner-([a-z]){2,6}/g;M.widget("ui.controlgroup",{version:"1.12.1",defaultElement:"
",options:{direction:"horizontal",disabled:null,onlyVisible:!0,items:{button:"input[type=button], input[type=submit], input[type=reset], button, a",controlgroupLabel:".ui-controlgroup-label",checkboxradio:"input[type='checkbox'], input[type='radio']",selectmenu:"select",spinner:".ui-spinner-input"}},_create:function(){this._enhance()},_enhance:function(){this.element.attr("role","toolbar"),this.refresh()},_destroy:function(){this._callChildMethod("destroy"),this.childWidgets.removeData("ui-controlgroup-data"),this.element.removeAttr("role"),this.options.items.controlgroupLabel&&this.element.find(this.options.items.controlgroupLabel).find(".ui-controlgroup-label-contents").contents().unwrap()},_initWidgets:function(){var a=this,l=[];M.each(this.options.items,function(n,t){var e,o={};if(t)return"controlgroupLabel"===n?((e=a.element.find(t)).each(function(){var t=M(this);t.children(".ui-controlgroup-label-contents").length||t.contents().wrapAll("")}),a._addClass(e,null,"ui-widget ui-widget-content ui-state-default"),void(l=l.concat(e.get()))):void(M.fn[n]&&(o=a["_"+n+"Options"]?a["_"+n+"Options"]("middle"):{classes:{}},a.element.find(t).each(function(){var t=M(this),e=t[n]("instance"),i=M.widget.extend({},o);if("button"!==n||!t.parent(".ui-spinner").length){e||(e=t[n]()[n]("instance")),e&&(i.classes=a._resolveClassesValues(i.classes,e)),t[n](i);var s=t[n]("widget");M.data(s[0],"ui-controlgroup-data",e||t[n]("instance")),l.push(s[0])}})))}),this.childWidgets=M(M.unique(l)),this._addClass(this.childWidgets,"ui-controlgroup-item")},_callChildMethod:function(e){this.childWidgets.each(function(){var t=M(this).data("ui-controlgroup-data");t&&t[e]&&t[e]()})},_updateCornerClass:function(t,e){var i=this._buildSimpleOptions(e,"label").classes.label;this._removeClass(t,null,"ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all"),this._addClass(t,null,i)},_buildSimpleOptions:function(t,e){var i="vertical"===this.options.direction,s={classes:{}};return s.classes[e]={middle:"",first:"ui-corner-"+(i?"top":"left"),last:"ui-corner-"+(i?"bottom":"right"),only:"ui-corner-all"}[t],s},_spinnerOptions:function(t){var e=this._buildSimpleOptions(t,"ui-spinner");return e.classes["ui-spinner-up"]="",e.classes["ui-spinner-down"]="",e},_buttonOptions:function(t){return this._buildSimpleOptions(t,"ui-button")},_checkboxradioOptions:function(t){return this._buildSimpleOptions(t,"ui-checkboxradio-label")},_selectmenuOptions:function(t){var e="vertical"===this.options.direction;return{width:!!e&&"auto",classes:{middle:{"ui-selectmenu-button-open":"","ui-selectmenu-button-closed":""},first:{"ui-selectmenu-button-open":"ui-corner-"+(e?"top":"tl"),"ui-selectmenu-button-closed":"ui-corner-"+(e?"top":"left")},last:{"ui-selectmenu-button-open":e?"":"ui-corner-tr","ui-selectmenu-button-closed":"ui-corner-"+(e?"bottom":"right")},only:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"}}[t]}},_resolveClassesValues:function(i,s){var n={};return M.each(i,function(t){var e=s.options.classes[t]||"";e=M.trim(e.replace(o,"")),n[t]=(e+" "+i[t]).replace(/\s+/g," ")}),n},_setOption:function(t,e){"direction"===t&&this._removeClass("ui-controlgroup-"+this.options.direction),this._super(t,e),"disabled"!==t?this.refresh():this._callChildMethod(e?"disable":"enable")},refresh:function(){var n,o=this;this._addClass("ui-controlgroup ui-controlgroup-"+this.options.direction),"horizontal"===this.options.direction&&this._addClass(null,"ui-helper-clearfix"),this._initWidgets(),n=this.childWidgets,this.options.onlyVisible&&(n=n.filter(":visible")),n.length&&(M.each(["first","last"],function(t,e){var i=n[e]().data("ui-controlgroup-data");if(i&&o["_"+i.widgetName+"Options"]){var s=o["_"+i.widgetName+"Options"](1===n.length?"only":e);s.classes=o._resolveClassesValues(s.classes,i),i.element[i.widgetName](s)}else o._updateCornerClass(n[e](),e)}),this._callChildMethod("refresh"))}});M.widget("ui.checkboxradio",[M.ui.formResetMixin,{version:"1.12.1",options:{disabled:null,label:null,icon:!0,classes:{"ui-checkboxradio-label":"ui-corner-all","ui-checkboxradio-icon":"ui-corner-all"}},_getCreateOptions:function(){var t,e,i=this,s=this._super()||{};return this._readType(),e=this.element.labels(),this.label=M(e[e.length-1]),this.label.length||M.error("No label found for checkboxradio widget"),this.originalLabel="",this.label.contents().not(this.element[0]).each(function(){i.originalLabel+=3===this.nodeType?M(this).text():this.outerHTML}),this.originalLabel&&(s.label=this.originalLabel),null!=(t=this.element[0].disabled)&&(s.disabled=t),s},_create:function(){var t=this.element[0].checked;this._bindFormResetHandler(),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled),this._setOption("disabled",this.options.disabled),this._addClass("ui-checkboxradio","ui-helper-hidden-accessible"),this._addClass(this.label,"ui-checkboxradio-label","ui-button ui-widget"),"radio"===this.type&&this._addClass(this.label,"ui-checkboxradio-radio-label"),this.options.label&&this.options.label!==this.originalLabel?this._updateLabel():this.originalLabel&&(this.options.label=this.originalLabel),this._enhance(),t&&(this._addClass(this.label,"ui-checkboxradio-checked","ui-state-active"),this.icon&&this._addClass(this.icon,null,"ui-state-hover")),this._on({change:"_toggleClasses",focus:function(){this._addClass(this.label,null,"ui-state-focus ui-visual-focus")},blur:function(){this._removeClass(this.label,null,"ui-state-focus ui-visual-focus")}})},_readType:function(){var t=this.element[0].nodeName.toLowerCase();this.type=this.element[0].type,"input"===t&&/radio|checkbox/.test(this.type)||M.error("Can't create checkboxradio on element.nodeName="+t+" and element.type="+this.type)},_enhance:function(){this._updateIcon(this.element[0].checked)},widget:function(){return this.label},_getRadioGroup:function(){var t=this.element[0].name,e="input[name='"+M.ui.escapeSelector(t)+"']";return t?(this.form.length?M(this.form[0].elements).filter(e):M(e).filter(function(){return 0===M(this).form().length})).not(this.element):M([])},_toggleClasses:function(){var t=this.element[0].checked;this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),this.options.icon&&"checkbox"===this.type&&this._toggleClass(this.icon,null,"ui-icon-check ui-state-checked",t)._toggleClass(this.icon,null,"ui-icon-blank",!t),"radio"===this.type&&this._getRadioGroup().each(function(){var t=M(this).checkboxradio("instance");t&&t._removeClass(t.label,"ui-checkboxradio-checked","ui-state-active")})},_destroy:function(){this._unbindFormResetHandler(),this.icon&&(this.icon.remove(),this.iconSpace.remove())},_setOption:function(t,e){if("label"!==t||e){if(this._super(t,e),"disabled"===t)return this._toggleClass(this.label,null,"ui-state-disabled",e),void(this.element[0].disabled=e);this.refresh()}},_updateIcon:function(t){var e="ui-icon ui-icon-background ";this.options.icon?(this.icon||(this.icon=M(""),this.iconSpace=M(" "),this._addClass(this.iconSpace,"ui-checkboxradio-icon-space")),"checkbox"===this.type?(e+=t?"ui-icon-check ui-state-checked":"ui-icon-blank",this._removeClass(this.icon,null,t?"ui-icon-blank":"ui-icon-check")):e+="ui-icon-blank",this._addClass(this.icon,"ui-checkboxradio-icon",e),t||this._removeClass(this.icon,null,"ui-icon-check ui-state-checked"),this.icon.prependTo(this.label).after(this.iconSpace)):void 0!==this.icon&&(this.icon.remove(),this.iconSpace.remove(),delete this.icon)},_updateLabel:function(){var t=this.label.contents().not(this.element[0]);this.icon&&(t=t.not(this.icon[0])),this.iconSpace&&(t=t.not(this.iconSpace[0])),t.remove(),this.label.append(this.options.label)},refresh:function(){var t=this.element[0].checked,e=this.element[0].disabled;this._updateIcon(t),this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),null!==this.options.label&&this._updateLabel(),e!==this.options.disabled&&this._setOptions({disabled:e})}}]);var s;M.ui.checkboxradio;M.widget("ui.button",{version:"1.12.1",defaultElement:"
"),s=i.children()[0];return M("body").append(i),t=s.offsetWidth,i.css("overflow","scroll"),t===(e=s.offsetWidth)&&(e=i[0].clientWidth),i.remove(),n=t-e},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),s="scroll"===e||"auto"===e&&t.widthC(x(s),x(n))?o.important="horizontal":o.important="vertical",c.using.call(this,t,o)}),a.offset(M.extend(u,{using:t}))})},M.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,o=s.width,a=t.left-e.collisionPosition.marginLeft,l=n-a,h=a+e.collisionWidth-o-n;e.collisionWidth>o?0o?0?@[\]^`{|}~])/g,function(t){return t.replace(e,"\\$1")}),M.fn.labels=function(){var t,e,i,s,n;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(s=this.eq(0).parents("label"),(i=this.attr("id"))&&(n=(t=this.eq(0).parents().last()).add(t.length?t.siblings():this.siblings()),e="label[for='"+M.ui.escapeSelector(i)+"']",s=s.add(n.find(e).addBack(e))),this.pushStack(s))},M.fn.extend({uniqueId:(t=0,function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&M(this).removeAttr("id")})}});var e,t,o=/ui-corner-([a-z]){2,6}/g;M.widget("ui.controlgroup",{version:"1.12.1",defaultElement:"
",options:{direction:"horizontal",disabled:null,onlyVisible:!0,items:{button:"input[type=button], input[type=submit], input[type=reset], button, a",controlgroupLabel:".ui-controlgroup-label",checkboxradio:"input[type='checkbox'], input[type='radio']",selectmenu:"select",spinner:".ui-spinner-input"}},_create:function(){this._enhance()},_enhance:function(){this.element.attr("role","toolbar"),this.refresh()},_destroy:function(){this._callChildMethod("destroy"),this.childWidgets.removeData("ui-controlgroup-data"),this.element.removeAttr("role"),this.options.items.controlgroupLabel&&this.element.find(this.options.items.controlgroupLabel).find(".ui-controlgroup-label-contents").contents().unwrap()},_initWidgets:function(){var a=this,l=[];M.each(this.options.items,function(n,t){var e,o={};if(t)return"controlgroupLabel"===n?((e=a.element.find(t)).each(function(){var t=M(this);t.children(".ui-controlgroup-label-contents").length||t.contents().wrapAll("")}),a._addClass(e,null,"ui-widget ui-widget-content ui-state-default"),void(l=l.concat(e.get()))):void(M.fn[n]&&(o=a["_"+n+"Options"]?a["_"+n+"Options"]("middle"):{classes:{}},a.element.find(t).each(function(){var t=M(this),e=t[n]("instance"),i=M.widget.extend({},o);if("button"!==n||!t.parent(".ui-spinner").length){e||(e=t[n]()[n]("instance")),e&&(i.classes=a._resolveClassesValues(i.classes,e)),t[n](i);var s=t[n]("widget");M.data(s[0],"ui-controlgroup-data",e||t[n]("instance")),l.push(s[0])}})))}),this.childWidgets=M(M.unique(l)),this._addClass(this.childWidgets,"ui-controlgroup-item")},_callChildMethod:function(e){this.childWidgets.each(function(){var t=M(this).data("ui-controlgroup-data");t&&t[e]&&t[e]()})},_updateCornerClass:function(t,e){var i=this._buildSimpleOptions(e,"label").classes.label;this._removeClass(t,null,"ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all"),this._addClass(t,null,i)},_buildSimpleOptions:function(t,e){var i="vertical"===this.options.direction,s={classes:{}};return s.classes[e]={middle:"",first:"ui-corner-"+(i?"top":"left"),last:"ui-corner-"+(i?"bottom":"right"),only:"ui-corner-all"}[t],s},_spinnerOptions:function(t){var e=this._buildSimpleOptions(t,"ui-spinner");return e.classes["ui-spinner-up"]="",e.classes["ui-spinner-down"]="",e},_buttonOptions:function(t){return this._buildSimpleOptions(t,"ui-button")},_checkboxradioOptions:function(t){return this._buildSimpleOptions(t,"ui-checkboxradio-label")},_selectmenuOptions:function(t){var e="vertical"===this.options.direction;return{width:!!e&&"auto",classes:{middle:{"ui-selectmenu-button-open":"","ui-selectmenu-button-closed":""},first:{"ui-selectmenu-button-open":"ui-corner-"+(e?"top":"tl"),"ui-selectmenu-button-closed":"ui-corner-"+(e?"top":"left")},last:{"ui-selectmenu-button-open":e?"":"ui-corner-tr","ui-selectmenu-button-closed":"ui-corner-"+(e?"bottom":"right")},only:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"}}[t]}},_resolveClassesValues:function(i,s){var n={};return M.each(i,function(t){var e=s.options.classes[t]||"";e=M.trim(e.replace(o,"")),n[t]=(e+" "+i[t]).replace(/\s+/g," ")}),n},_setOption:function(t,e){"direction"===t&&this._removeClass("ui-controlgroup-"+this.options.direction),this._super(t,e),"disabled"!==t?this.refresh():this._callChildMethod(e?"disable":"enable")},refresh:function(){var n,o=this;this._addClass("ui-controlgroup ui-controlgroup-"+this.options.direction),"horizontal"===this.options.direction&&this._addClass(null,"ui-helper-clearfix"),this._initWidgets(),n=this.childWidgets,this.options.onlyVisible&&(n=n.filter(":visible")),n.length&&(M.each(["first","last"],function(t,e){var i=n[e]().data("ui-controlgroup-data");if(i&&o["_"+i.widgetName+"Options"]){var s=o["_"+i.widgetName+"Options"](1===n.length?"only":e);s.classes=o._resolveClassesValues(s.classes,i),i.element[i.widgetName](s)}else o._updateCornerClass(n[e](),e)}),this._callChildMethod("refresh"))}});M.widget("ui.checkboxradio",[M.ui.formResetMixin,{version:"1.12.1",options:{disabled:null,label:null,icon:!0,classes:{"ui-checkboxradio-label":"ui-corner-all","ui-checkboxradio-icon":"ui-corner-all"}},_getCreateOptions:function(){var t,e,i=this,s=this._super()||{};return this._readType(),e=this.element.labels(),this.label=M(e[e.length-1]),this.label.length||M.error("No label found for checkboxradio widget"),this.originalLabel="",this.label.contents().not(this.element[0]).each(function(){i.originalLabel+=3===this.nodeType?M(this).text():this.outerHTML}),this.originalLabel&&(s.label=this.originalLabel),null!=(t=this.element[0].disabled)&&(s.disabled=t),s},_create:function(){var t=this.element[0].checked;this._bindFormResetHandler(),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled),this._setOption("disabled",this.options.disabled),this._addClass("ui-checkboxradio","ui-helper-hidden-accessible"),this._addClass(this.label,"ui-checkboxradio-label","ui-button ui-widget"),"radio"===this.type&&this._addClass(this.label,"ui-checkboxradio-radio-label"),this.options.label&&this.options.label!==this.originalLabel?this._updateLabel():this.originalLabel&&(this.options.label=this.originalLabel),this._enhance(),t&&(this._addClass(this.label,"ui-checkboxradio-checked","ui-state-active"),this.icon&&this._addClass(this.icon,null,"ui-state-hover")),this._on({change:"_toggleClasses",focus:function(){this._addClass(this.label,null,"ui-state-focus ui-visual-focus")},blur:function(){this._removeClass(this.label,null,"ui-state-focus ui-visual-focus")}})},_readType:function(){var t=this.element[0].nodeName.toLowerCase();this.type=this.element[0].type,"input"===t&&/radio|checkbox/.test(this.type)||M.error("Can't create checkboxradio on element.nodeName="+t+" and element.type="+this.type)},_enhance:function(){this._updateIcon(this.element[0].checked)},widget:function(){return this.label},_getRadioGroup:function(){var t=this.element[0].name,e="input[name='"+M.ui.escapeSelector(t)+"']";return t?(this.form.length?M(this.form[0].elements).filter(e):M(e).filter(function(){return 0===M(this).form().length})).not(this.element):M([])},_toggleClasses:function(){var t=this.element[0].checked;this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),this.options.icon&&"checkbox"===this.type&&this._toggleClass(this.icon,null,"ui-icon-check ui-state-checked",t)._toggleClass(this.icon,null,"ui-icon-blank",!t),"radio"===this.type&&this._getRadioGroup().each(function(){var t=M(this).checkboxradio("instance");t&&t._removeClass(t.label,"ui-checkboxradio-checked","ui-state-active")})},_destroy:function(){this._unbindFormResetHandler(),this.icon&&(this.icon.remove(),this.iconSpace.remove())},_setOption:function(t,e){if("label"!==t||e){if(this._super(t,e),"disabled"===t)return this._toggleClass(this.label,null,"ui-state-disabled",e),void(this.element[0].disabled=e);this.refresh()}},_updateIcon:function(t){var e="ui-icon ui-icon-background ";this.options.icon?(this.icon||(this.icon=M(""),this.iconSpace=M(" "),this._addClass(this.iconSpace,"ui-checkboxradio-icon-space")),"checkbox"===this.type?(e+=t?"ui-icon-check ui-state-checked":"ui-icon-blank",this._removeClass(this.icon,null,t?"ui-icon-blank":"ui-icon-check")):e+="ui-icon-blank",this._addClass(this.icon,"ui-checkboxradio-icon",e),t||this._removeClass(this.icon,null,"ui-icon-check ui-state-checked"),this.icon.prependTo(this.label).after(this.iconSpace)):void 0!==this.icon&&(this.icon.remove(),this.iconSpace.remove(),delete this.icon)},_updateLabel:function(){var t=this.label.contents().not(this.element[0]);this.icon&&(t=t.not(this.icon[0])),this.iconSpace&&(t=t.not(this.iconSpace[0])),t.remove(),this.label.append(this.options.label)},refresh:function(){var t=this.element[0].checked,e=this.element[0].disabled;this._updateIcon(t),this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),null!==this.options.label&&this._updateLabel(),e!==this.options.disabled&&this._setOptions({disabled:e})}}]);var s;M.ui.checkboxradio;M.widget("ui.button",{version:"1.12.1",defaultElement:"