import selection from './selection';
import { 
    getObjType,
    chatatABC,
    numFormat,
    luckysheetContainerFocus,
} from '../utils/util';
import { hasPartMC, isEditMode } from '../global/validate';
import { getdatabyselection, getcellvalue } from '../global/getdata';
import tooltip from '../global/tooltip';
import editor from '../global/editor';
import locale from '../locale/locale';
import Store from '../store';

export function initialMatrixOperation(){
    const locale_drag = locale().drag;

    //右键功能键
    //复制为json格式字符串,首行为标题
    $("#luckysheet-copy-json-head").click(function (event) {
        $("body .luckysheet-cols-menu").hide();
        luckysheetContainerFocus();

        if(Store.luckysheet_select_save.length > 1){
            if(isEditMode()){
                alert(locale_drag.noMulti);
            }
            else{
                tooltip.info(locale_drag.noMulti, "");   
            }
            return;
        }

        //复制范围内包含部分合并单元格,提示
        if(Store.config["merge"] != null){
            let has_PartMC = false;

            for(let s = 0; s < Store.luckysheet_select_save.length; s++){
                let r1 = Store.luckysheet_select_save[s].row[0], 
                    r2 = Store.luckysheet_select_save[s].row[1];
                let c1 = Store.luckysheet_select_save[s].column[0], 
                    c2 = Store.luckysheet_select_save[s].column[1];

                has_PartMC = hasPartMC(Store.config, r1, r2, c1, c2);

                if(has_PartMC){
                    break;
                }
            }

            if(has_PartMC){
                if(isEditMode()){
                    alert(locale_drag.noPartMerge);
                }
                else{
                    tooltip.info(locale_drag.noPartMerge, ""); 
                }
                return;    
            }
        }

        let getdata = getdatabyselection(Store.luckysheet_select_save[0]);
        let arr = [];
        if (getdata.length == 0) {
            return;
        }

        if (getdata.length == 1) {
            let obj = {};
            for (let i = 0; i < getdata[0].length; i++) {
                obj[getcellvalue(0, i, getdata)] = "";
            }
            arr.push(obj);
        }
        else {
            for (let r = 1; r < getdata.length; r++) {
                let obj = {};
                for (let c = 0; c < getdata[0].length; c++) {
                    if(getcellvalue(0, c, getdata) == undefined){
                        obj[""] = getcellvalue(r, c, getdata);
                    }else{
                        obj[getcellvalue(0, c, getdata)] = getcellvalue(r, c, getdata);
                    }
                }
                arr.push(obj);
            }
        }

        selection.copybyformat(event, JSON.stringify(arr));
    });

    //复制为json格式字符串,无标题,采用ABCD作为标题
    $("#luckysheet-copy-json-nohead").click(function (event) {
        $("body .luckysheet-cols-menu").hide();
        luckysheetContainerFocus();


        if(Store.luckysheet_select_save.length > 1){
            if(isEditMode()){
                alert(locale_drag.noMulti);
            }
            else{
                tooltip.info(locale_drag.noMulti, "");
            }
            return;
        }

        //复制范围内包含部分合并单元格,提示
        if(Store.config["merge"] != null){
            let has_PartMC = false;

            for(let s = 0; s < Store.luckysheet_select_save.length; s++){
                let r1 = Store.luckysheet_select_save[s].row[0], 
                    r2 = Store.luckysheet_select_save[s].row[1];
                let c1 = Store.luckysheet_select_save[s].column[0], 
                    c2 = Store.luckysheet_select_save[s].column[1];

                has_PartMC = hasPartMC(Store.config, r1, r2, c1, c2);

                if(has_PartMC){
                    break;
                }
            }

            if(has_PartMC){
                if(isEditMode()){
                    alert(locale_drag.noPartMerge);
                }
                else{
                    tooltip.info(locale_drag.noPartMerge, ""); 
                }
                return;    
            }
        }

        let getdata = getdatabyselection(Store.luckysheet_select_save[0]);
        let arr = [];
        if (getdata.length == 0) {
            return;
        }
        let st = Store.luckysheet_select_save[0]["column"][0];
        for (let r = 0; r < getdata.length; r++) {
            let obj = {};
            for (let c = 0; c < getdata[0].length; c++) {
                obj[chatatABC(c + st)] = getcellvalue(r, c, getdata);
            }
            arr.push(obj);
        }

        selection.copybyformat(event, JSON.stringify(arr));
    });

    //复制为一维数组
    $("#luckysheet-copy-array1").click(function (event) {
        $("body .luckysheet-cols-menu").hide();
        luckysheetContainerFocus();

        if(Store.luckysheet_select_save.length > 1){
            if(isEditMode()){
                alert(locale_drag.noMulti);
            }
            else{
                tooltip.info(locale_drag.noMulti, "");
            }
            return;
        }

        //复制范围内包含部分合并单元格,提示
        if(Store.config["merge"] != null){
            let has_PartMC = false;

            for(let s = 0; s < Store.luckysheet_select_save.length; s++){
                let r1 = Store.luckysheet_select_save[s].row[0], 
                    r2 = Store.luckysheet_select_save[s].row[1];
                let c1 = Store.luckysheet_select_save[s].column[0], 
                    c2 = Store.luckysheet_select_save[s].column[1];

                has_PartMC = hasPartMC(Store.config, r1, r2, c1, c2);

                if(has_PartMC){
                    break;
                }
            }

            if(has_PartMC){
                if(isEditMode()){
                    alert(locale_drag.noPartMerge);
                }
                else{
                    tooltip.info(locale_drag.noPartMerge, ""); 
                }
                return;    
            }
        }

        let getdata = getdatabyselection(Store.luckysheet_select_save[0]);
        let arr = [];
        if (getdata.length == 0) {
            return;
        }
        for (let r = 0; r < getdata.length; r++) {
            for (let c = 0; c < getdata[0].length; c++) {
                arr.push(getcellvalue(r, c, getdata));
            }
        }

        selection.copybyformat(event, JSON.stringify(arr));
    });

    //复制为二维数组
    $("#luckysheet-copy-array2").click(function (event) {
        $("body .luckysheet-cols-menu").hide();
        luckysheetContainerFocus();


        if(Store.luckysheet_select_save.length > 1){
            if(isEditMode()){
                alert(locale_drag.noMulti);
            }
            else{
                tooltip.info(locale_drag.noMulti, "");
            }
            return;
        }

        //复制范围内包含部分合并单元格,提示
        if(Store.config["merge"] != null){
            let has_PartMC = false;

            for(let s = 0; s < Store.luckysheet_select_save.length; s++){
                let r1 = Store.luckysheet_select_save[s].row[0], 
                    r2 = Store.luckysheet_select_save[s].row[1];
                let c1 = Store.luckysheet_select_save[s].column[0], 
                    c2 = Store.luckysheet_select_save[s].column[1];

                has_PartMC = hasPartMC(Store.config, r1, r2, c1, c2);

                if(has_PartMC){
                    break;
                }
            }

            if(has_PartMC){
                if(isEditMode()){
                    alert(locale_drag.noPartMerge);
                }
                else{
                    tooltip.info(locale_drag.noPartMerge, ""); 
                }
                return;    
            }
        }

        let getdata = getdatabyselection(Store.luckysheet_select_save[0]);
        let arr = [];
        if (getdata.length == 0) {
            return;
        }
        for (let r = 0; r < getdata.length; r++) {
            let a = [];
            for (let c = 0; c < getdata[0].length; c++) {
                a.push(getcellvalue(r, c, getdata));
            }
            arr.push(a);
        }

        selection.copybyformat(event, JSON.stringify(arr));
    });

    //复制为多维数组
    $("#luckysheet-copy-arraymore-confirm").click(function (event) {

        // Click input element, don't comfirm 
        if(event.target.nodeName === 'INPUT'){
            return;
        }

        $("body .luckysheet-cols-menu").hide();

        if(Store.luckysheet_select_save.length > 1){
            if(isEditMode()){
                alert(locale_drag.noMulti);
            }
            else{
                tooltip.info(locale_drag.noMulti, "");
            }
            return;
        }

        //复制范围内包含部分合并单元格,提示
        if(Store.config["merge"] != null){
            let has_PartMC = false;

            for(let s = 0; s < Store.luckysheet_select_save.length; s++){
                let r1 = Store.luckysheet_select_save[s].row[0], 
                    r2 = Store.luckysheet_select_save[s].row[1];
                let c1 = Store.luckysheet_select_save[s].column[0], 
                    c2 = Store.luckysheet_select_save[s].column[1];

                has_PartMC = hasPartMC(Store.config, r1, r2, c1, c2);

                if(has_PartMC){
                    break;
                }
            }

            if(has_PartMC){
                if(isEditMode()){
                    alert(locale_drag.noPartMerge);
                }
                else{
                    tooltip.info(locale_drag.noPartMerge, ""); 
                }
                return;    
            }
        }

        let getdata = getdatabyselection(Store.luckysheet_select_save[0]);
        let arr = [];
        if (getdata.length == 0) {
            return;
        }

        for (let r = 0; r < getdata.length; r++) {
            for (let c = 0; c < getdata[0].length; c++) {
                arr.push(getdata[r][c]);
            }
        }

        let row = $("#luckysheet-copy-arraymore-row").val(), col = $("#luckysheet-copy-arraymore-col").val();

        if (row == "" && col == "") {
            selection.copybyformat(event, JSON.stringify(arr));
            $("body .luckysheet-cols-menu").hide();
            return;
        }

        if (row == "") {
            row = 1;
        }
        else {
            row = parseInt(row);
            if (row == null) {
                row = 1;
            }
        }

        if (col == "") {
            col = 1;
        }
        else {
            col = parseInt(col);
            if (col == null) {
                col = 1;
            }
        }

        if(row.toString() == "NaN" || col.toString() == "NaN"){
            if(isEditMode()){
                alert(locale_drag.inputCorrect);
            }
            else{
                tooltip.info(locale_drag.inputCorrect, "");
            }
            return;
        }

        if(row < 1 || col < 1){
            if(isEditMode()){
                alert(locale_drag.notLessOne);
            }
            else{
                tooltip.info(locale_drag.notLessOne, "");
            }
            return;
        }

        let arrlen = arr.length, i = 0, ret = [];
        for (let r = 0; r < row; r++) {
            let a = [];
            for (let c = 0; c < col; c++) {
                a.push(arr[i++]);
                if (i >= arrlen) {
                    selection.copybyformat(event, JSON.stringify(ret));
                    $("body .luckysheet-cols-menu").hide();
                    return;
                }
            }
            ret.push(a);
        }

        selection.copybyformat(event, JSON.stringify(ret));
    });

    //复制为对角线
    $("#luckysheet-copy-diagonal").click(function (event) {
        $("body .luckysheet-cols-menu").hide();
        luckysheetContainerFocus();

        if(Store.luckysheet_select_save.length > 1){
            if(isEditMode()){
                alert(locale_drag.noMulti);
            }
            else{
                tooltip.info(locale_drag.noMulti, "");
            }
            return;
        }

        //复制范围内包含部分合并单元格,提示
        if(Store.config["merge"] != null){
            let has_PartMC = false;

            for(let s = 0; s < Store.luckysheet_select_save.length; s++){
                let r1 = Store.luckysheet_select_save[s].row[0], 
                    r2 = Store.luckysheet_select_save[s].row[1];
                let c1 = Store.luckysheet_select_save[s].column[0], 
                    c2 = Store.luckysheet_select_save[s].column[1];

                has_PartMC = hasPartMC(Store.config, r1, r2, c1, c2);

                if(has_PartMC){
                    break;
                }
            }

            if(has_PartMC){
                if(isEditMode()){
                    alert(locale_drag.noPartMerge);
                }
                else{
                    tooltip.info(locale_drag.noPartMerge, ""); 
                }
                return;    
            }
        }

        let getdata = getdatabyselection(Store.luckysheet_select_save[0]);
        let arr = [];
        if (getdata.length == 0) {
            return;
        }

        let clen = getdata[0].length;
        for (let r = 0; r < getdata.length; r++) {
            if (r >= clen) {
                break;
            }
            arr.push(getdata[r][r]);
        }

        selection.copybyformat(event, JSON.stringify(arr));
    });

    //复制为反对角线
    $("#luckysheet-copy-antidiagonal").click(function (event) {
        $("body .luckysheet-cols-menu").hide();
        luckysheetContainerFocus();


        if(Store.luckysheet_select_save.length > 1){
            if(isEditMode()){
                alert(locale_drag.noMulti);
            }
            else{
                tooltip.info(locale_drag.noMulti, "");
            }
            return;
        }

        //复制范围内包含部分合并单元格,提示
        if(Store.config["merge"] != null){
            let has_PartMC = false;

            for(let s = 0; s < Store.luckysheet_select_save.length; s++){
                let r1 = Store.luckysheet_select_save[s].row[0], 
                    r2 = Store.luckysheet_select_save[s].row[1];
                let c1 = Store.luckysheet_select_save[s].column[0], 
                    c2 = Store.luckysheet_select_save[s].column[1];

                has_PartMC = hasPartMC(Store.config, r1, r2, c1, c2);

                if(has_PartMC){
                    break;
                }
            }

            if(has_PartMC){
                if(isEditMode()){
                    alert(locale_drag.noPartMerge);
                }
                else{
                    tooltip.info(locale_drag.noPartMerge, ""); 
                }
                return;    
            }
        }

        let getdata = getdatabyselection(Store.luckysheet_select_save[0]);
        let arr = [];
        if (getdata.length == 0) {
            return;
        }

        let clen = getdata[0].length;
        for (let r = 0; r < getdata.length; r++) {
            if (r >= clen) {
                break;
            }
            arr.push(getdata[r][clen - r - 1]);
        }

        selection.copybyformat(event, JSON.stringify(arr));
    });

    //复制为对角偏移n列
    $("#luckysheet-copy-diagonaloffset").click(function (event) {

        // Click input element, don't comfirm 
        if(event.target.nodeName === 'INPUT'){
            return;
        }
        
        $("body .luckysheet-cols-menu").hide();
        luckysheetContainerFocus();

        if(Store.luckysheet_select_save.length > 1){
            if(isEditMode()){
                alert(locale_drag.noMulti);
            }
            else{
                tooltip.info(locale_drag.noMulti, "");
            }
            return;
        }

        //复制范围内包含部分合并单元格,提示
        if(Store.config["merge"] != null){
            let has_PartMC = false;

            for(let s = 0; s < Store.luckysheet_select_save.length; s++){
                let r1 = Store.luckysheet_select_save[s].row[0], 
                    r2 = Store.luckysheet_select_save[s].row[1];
                let c1 = Store.luckysheet_select_save[s].column[0], 
                    c2 = Store.luckysheet_select_save[s].column[1];

                has_PartMC = hasPartMC(Store.config, r1, r2, c1, c2);

                if(has_PartMC){
                    break;
                }
            }

            if(has_PartMC){
                if(isEditMode()){
                    alert(locale_drag.noPartMerge);
                }
                else{
                    tooltip.info(locale_drag.noPartMerge, ""); 
                }
                return;    
            }
        }

        let getdata = getdatabyselection(Store.luckysheet_select_save[0]);
        let arr = [];
        if (getdata.length == 0) {
            return;
        }

        let clen = getdata[0].length, 
            offset = parseInt($("#luckysheet-copy-diagonaloffset-value").val());

        if(offset.toString() == "NaN"){
            if(isEditMode()){
                alert(locale_drag.inputCorrect);
            }
            else{
                tooltip.info(locale_drag.inputCorrect, "");
            }
            return;
        }

        if(offset < 0){
            if(isEditMode()){
                alert(locale_drag.offsetColumnLessZero);
            }
            else{
                tooltip.info(locale_drag.offsetColumnLessZero, "");
            }
            return;
        }

        if (offset == null) {
            offset = 1;
        }

        for (let r = 0; r < getdata.length; r++) {
            if (r + offset >= clen) {
                break;
            }
            arr.push(getdata[r][r + offset]);
        }

        selection.copybyformat(event, JSON.stringify(arr));
    });

    //复制为布尔值
    $("#luckysheet-copy-boolvalue").click(function (event) {
        $("body .luckysheet-cols-menu").hide();
        luckysheetContainerFocus();


        if(Store.luckysheet_select_save.length > 1){
            if(isEditMode()){
                alert(locale_drag.noMulti);
            }
            else{
                tooltip.info(locale_drag.noMulti, "");
            }
            return;
        }

        //复制范围内包含部分合并单元格,提示
        if(Store.config["merge"] != null){
            let has_PartMC = false;

            for(let s = 0; s < Store.luckysheet_select_save.length; s++){
                let r1 = Store.luckysheet_select_save[s].row[0], 
                    r2 = Store.luckysheet_select_save[s].row[1];
                let c1 = Store.luckysheet_select_save[s].column[0], 
                    c2 = Store.luckysheet_select_save[s].column[1];

                has_PartMC = hasPartMC(Store.config, r1, r2, c1, c2);

                if(has_PartMC){
                    break;
                }
            }

            if(has_PartMC){
                if(isEditMode()){
                    alert(locale_drag.noPartMerge);
                }
                else{
                    tooltip.info(locale_drag.noPartMerge, ""); 
                }
                return;    
            }
        }

        let getdata = getdatabyselection(Store.luckysheet_select_save[0]);
        let arr = [];
        if (getdata.length == 0) {
            return;
        }
        for (let r = 0; r < getdata.length; r++) {
            let a = [];
            for (let c = 0; c < getdata[0].length; c++) {
                let bool = false;

                let v;
                if(getObjType(getdata[r][c]) == "object"){
                    v = getdata[r][c].v;
                }
                else{
                    v = getdata[r][c];
                }

                if (v == null || v == "") {
                    bool = false;
                }
                else {
                    v = parseInt(v);
                    if (v == null || v > 0) {
                        bool = true;
                    }
                    else {
                        bool = false;
                    }
                }
                a.push(bool);
            }
            arr.push(a);
        }

        selection.copybyformat(event, JSON.stringify(arr));
    });

    //矩阵操作选区 翻转 上下
    $("#luckysheet-matrix-turn-up").click(function (event) {
        $("body .luckysheet-cols-menu").hide();
        luckysheetContainerFocus();

        if(Store.luckysheet_select_save.length > 1){
            if(isEditMode()){
                alert(locale_drag.noMulti);
            }
            else{
                tooltip.info(locale_drag.noMulti, "");
            }
            return;
        }

        let getdata = getdatabyselection(Store.luckysheet_select_save[0]);
        if (getdata.length == 0) {
            return;
        }

        let arr = [];
        for (let r = getdata.length - 1; r >= 0; r--) {
            let a = [];
            for (let c = 0; c < getdata[0].length; c++) {
                let value = "";
                if (getdata[r] != null && getdata[r][c] != null) {
                    value = getdata[r][c];
                }
                a.push(value);
            }
            arr.push(a);
        }

        editor.controlHandler(arr);
    });

    //矩阵操作选区 翻转 左右
    $("#luckysheet-matrix-turn-left").click(function (event) {
        $("body .luckysheet-cols-menu").hide();
        luckysheetContainerFocus();

        if(Store.luckysheet_select_save.length > 1){
            if(isEditMode()){
                alert(locale_drag.noMulti);
            }
            else{
                tooltip.info(locale_drag.noMulti, "");
            }
            return;
        }

        let getdata = getdatabyselection(Store.luckysheet_select_save[0]);
        if (getdata.length == 0) {
            return;
        }

        let arr = [];
        for (let r = 0; r < getdata.length; r++) {
            let a = [];
            for (let c = getdata[0].length - 1; c >= 0; c--) {
                let value = "";
                if (getdata[r] != null && getdata[r][c] != null) {
                    value = getdata[r][c];
                }
                a.push(value);
            }
            arr.push(a);
        }

        editor.controlHandler(arr);
    });

    //矩阵操作选区 翻转 顺时针
    $("#luckysheet-matrix-turn-cw").click(function (event) {
        $("body .luckysheet-cols-menu").hide();
        luckysheetContainerFocus();

        if(Store.luckysheet_select_save.length > 1){
            if(isEditMode()){
                alert(locale_drag.noMulti);
            }
            else{
                tooltip.info(locale_drag.noMulti, "");
            }
            return;
        }

        let getdata = getdatabyselection(Store.luckysheet_select_save[0]);
        if (getdata.length == 0) {
            return;
        }

        let arr = [];
        for (let c = 0; c < getdata[0].length; c++) {
            let a = [];
            for (let r = getdata.length - 1; r >= 0; r--) {
                let value = "";
                if (getdata[r] != null && getdata[r][c] != null) {
                    value = getdata[r][c];
                }
                a.push(value);
            }
            arr.push(a);
        }

        editor.controlHandlerD(arr);
    });

    //矩阵操作选区 翻转 逆时针
    $("#luckysheet-matrix-turn-anticw").click(function (event) {
        $("body .luckysheet-cols-menu").hide();
        luckysheetContainerFocus();

        if(Store.luckysheet_select_save.length > 1){
            if(isEditMode()){
                alert(locale_drag.noMulti);
            }
            else{
                tooltip.info(locale_drag.noMulti, "");
            }
            return;
        }

        let getdata = getdatabyselection(Store.luckysheet_select_save[0]);
        if (getdata.length == 0) {
            return;
        }
        
        let arr = [];
        for (let c = getdata[0].length - 1; c >= 0; c--) {
            let a = [];
            for (let r = 0; r < getdata.length; r++) {
                let value = "";
                if (getdata[r] != null && getdata[r][c] != null) {
                    value = getdata[r][c];
                }
                a.push(value);
            }
            arr.push(a);
        }

        editor.controlHandlerD(arr);
    });

    //矩阵操作选区 转置
    $("#luckysheet-matrix-turn-trans").click(function (event) {
        $("body .luckysheet-cols-menu").hide();
        luckysheetContainerFocus();

        if(Store.luckysheet_select_save.length > 1){
            if(isEditMode()){
                alert(locale_drag.noMulti);
            }
            else{
                tooltip.info(locale_drag.noMulti, "");
            }
            return;
        }

        let getdata = getdatabyselection(Store.luckysheet_select_save[0]);
        if (getdata.length == 0) {
            return;
        }

        let arr = [];
        for (let c = 0; c < getdata[0].length; c++) {
            let a = [];
            for (let r = 0; r < getdata.length; r++) {
                let value = "";
                if (getdata[r] != null && getdata[r][c] != null) {
                    value = getdata[r][c];
                }
                a.push(value);
            }
            arr.push(a);
        }

        editor.controlHandlerD(arr);
    });

    let jfnqrt = function (x, p) {
        if (x == 0)
            return 0;
        let x0, x1;
        x0 = x;
        x1 = ((p - 1) * x0 / p) + (x / (Math.pow(x0, p - 1) * p));//利用迭代法求解
        while (Math.abs(x1 - x0) > 0.000001) {
            x0 = x1;
            x1 = ((p - 1) * x0 / p) + (x / (Math.pow(x0, p - 1) * p));
        }
        return x1;
    }

    //矩阵操作选区 矩阵计算
    $("#luckysheet-matrix-cal-confirm").click(function (event) {

        // Click input element, don't comfirm 
        if(event.target.nodeName === 'INPUT' || event.target.nodeName === 'SELECT'){
            return;
        }

        $("body .luckysheet-cols-menu").hide();
        luckysheetContainerFocus();

        if(Store.luckysheet_select_save.length > 1){
            if(isEditMode()){
                alert(locale_drag.noMulti);
            }
            else{
                tooltip.info(locale_drag.noMulti, "");
            }
            return;
        }

        let getdata = getdatabyselection(Store.luckysheet_select_save[0]);
        if (getdata.length == 0) {
            return;
        }

        let caltype = $("#luckysheet-matrix-cal-type").val(), 
            calvalue = parseInt($("#luckysheet-matrix-cal-value").val());

        if(calvalue.toString() == "NaN"){
            if(isEditMode()){
                alert(locale_drag.inputCorrect);
            }
            else{
                tooltip.info(locale_drag.inputCorrect, "");
            }
            return;
        }

        if (calvalue == null) {
            calvalue = 2;
        }

        let arr = [];

        for (let r = 0; r < getdata.length; r++) {
            let a = [];

            for (let c = 0; c < getdata[0].length; c++) {
                let value = "";
                if (getdata[r] != null && getdata[r][c] != null) {
                    value = getdata[r][c];
                    if (parseInt(value) != null && getdata[r][c].ct != undefined && getdata[r][c].ct.t == "n") {
                        if (caltype == "minus") {
                            value.v = value.v - calvalue;
                        }
                        else if (caltype == "multiply") {
                            value.v = value.v * calvalue;
                        }
                        else if (caltype == "divided") {
                            value.v = numFormat(value.v / calvalue, 4);
                        }
                        else if (caltype == "power") {
                            value.v = Math.pow(value.v, calvalue);
                        }
                        else if (caltype == "root") {
                            if (calvalue == 2) {
                                value.v = numFormat(Math.sqrt(value.v), 4);
                            }
                            else if (calvalue == 3 && Math.cbrt) {
                                value.v = numFormat(Math.cbrt(value.v), 4);
                            }
                            else {
                                value.v = numFormat(jfnqrt(value.v, calvalue), 4);
                            }
                        }
                        else if (caltype == "log") {
                            value.v = numFormat(Math.log(value.v) * 10000 / Math.log(Math.abs(calvalue)), 4);
                        }
                        else {
                            value.v = value.v + calvalue;
                        }

                        if(value.v == null){
                            value.m = "";
                        }
                        else{
                            value.m = value.v.toString();
                        }
                    }
                }
                a.push(value);
            }
            arr.push(a);
        }

        editor.controlHandler(arr);
    });

    //矩阵操作选区 删除两端0值 按行
    $("#luckysheet-matrix-delezero-row").click(function (event) {
        $("body .luckysheet-cols-menu").hide();
        luckysheetContainerFocus();

        if(Store.luckysheet_select_save.length > 1){
            if(isEditMode()){
                alert(locale_drag.noMulti);
            }
            else{
                tooltip.info(locale_drag.noMulti, "");
            }
            return;
        }

        let getdata = getdatabyselection(Store.luckysheet_select_save[0]);
        if (getdata.length == 0) {
            return;
        }
        
        let arr = [];
        let getdatalen = getdata[0].length;
        for (let r = 0; r < getdata.length; r++) {
            let a = [], stdel = true, eddel = true;
            for (let c = 0; c < getdatalen; c++) {
                let value = "";
                if (getdata[r] != null && getdata[r][c] != null) {
                    value = getdata[r][c];
                    if ((value.v == "0" || value.v == 0) && stdel) {
                        continue;
                    }
                    else {
                        stdel = false;
                    }
                }
                a.push(value);
            }

            let a1 = [];
            if (a.length == getdatalen) {
                a1 = a;
            }
            else {
                for (let c = a.length - 1; c >= 0; c--) {
                    let value = "";
                    if (a[c] != null) {
                        value = a[c];
                        if ((value.v == "0" || value.v == 0) && eddel) {
                            continue;
                        }
                        else {
                            eddel = false;
                        }
                    }
                    a1.unshift(value);
                }

                let l = getdatalen - a1.length;
                for (let c1 = 0; c1 < l; c1++) {
                    a1.push("");
                }
            }
            arr.push(a1);
        }

        editor.controlHandler(arr);
    });

    //矩阵操作选区 删除两端0值 按列
    $("#luckysheet-matrix-delezero-column").click(function (event) {
        $("body .luckysheet-cols-menu").hide();
        luckysheetContainerFocus();

        if(Store.luckysheet_select_save.length > 1){
            if(isEditMode()){
                alert(locale_drag.noMulti);
            }
            else{
                tooltip.info(locale_drag.noMulti, "");
            }
            return;
        }

        let getdata = getdatabyselection(Store.luckysheet_select_save[0]);
        if (getdata.length == 0) {
            return;
        }

        let arr = [];
        let getdatalen = getdata.length, collen = getdata[0].length;
        for (let c = 0; c < collen; c++) {
            let a = [], stdel = true, eddel = true;
            for (let r = 0; r < getdatalen; r++) {
                let value = "";
                if (getdata[r] != null && getdata[r][c] != null) {
                    value = getdata[r][c];
                    if ((value.v == "0" || value.v == 0) && stdel) {
                        continue;
                    }
                    else {
                        stdel = false;
                    }
                }
                a.push(value);
            }

            let a1 = [];
            if (a.length == getdatalen) {
                a1 = a;
            }
            else {
                for (let r = a.length - 1; r >= 0; r--) {
                    let value = "";
                    if (a[r] != null) {
                        value = a[r];
                        if ((value.v == "0" || value.v == 0) && eddel) {
                            continue;
                        }
                        else {
                            eddel = false;
                        }
                    }
                    a1.unshift(value);
                }

                let l = getdatalen - a1.length;
                for (let r1 = 0; r1 < l; r1++) {
                    a1.push("");
                }
            }
            arr.push(a1);
        }

        let arr1 = [];
        for (let c = 0; c < arr[0].length; c++) {
            let a = [];
            for (let r = 0; r < arr.length; r++) {
                let value = "";
                if (arr[r] != null && arr[r][c] != null) {
                    value = arr[r][c];
                }
                a.push(value);
            }
            arr1.push(a);
        }

        editor.controlHandler(arr1);
    });

    //矩阵操作选区 删除重复值 按行
    $("#luckysheet-matrix-delerpt-row").click(function (event) {
        $("body .luckysheet-cols-menu").hide();
        luckysheetContainerFocus();

        if(Store.luckysheet_select_save.length > 1){
            if(isEditMode()){
                alert(locale_drag.noMulti);
            }
            else{
                tooltip.info(locale_drag.noMulti, "");
            }
            return;
        }

        let getdata = getdatabyselection(Store.luckysheet_select_save[0]);
        if (getdata.length == 0) {
            return;
        }

        let arr = [];
        let getdatalen = getdata[0].length;
        for (let r = 0; r < getdata.length; r++) {
            let a = [], repeat = {};

            for (let c = 0; c < getdatalen; c++) {
                let value = null;
                if (getdata[r] != null && getdata[r][c] != null) {
                    value = getdata[r][c];

                    if(value.v in repeat){
                        repeat[value.v].push(value);
                    }
                    else{
                        repeat[value.v] = [];
                        repeat[value.v].push(value);
                    }
                }
            }

            for (let c = 0; c < getdatalen; c++) {
                let value = null;
                if (getdata[r] != null && getdata[r][c] != null) {
                    value = getdata[r][c];

                    if(repeat[value.v].length == 1){
                        a.push(value);
                    }
                }
            }

            let l = getdatalen - a.length;
            for (let c1 = 0; c1 < l; c1++) {
                a.push(null);
            }
            arr.push(a);
        }

        editor.controlHandler(arr);
    });

    //矩阵操作选区 删除重复值 按列
    $("#luckysheet-matrix-delerpt-column").click(function (event) {
        $("body .luckysheet-cols-menu").hide();
        luckysheetContainerFocus();

        if(Store.luckysheet_select_save.length > 1){
            if(isEditMode()){
                alert(locale_drag.noMulti);
            }
            else{
                tooltip.info(locale_drag.noMulti, "");
            }
            return;
        }

        let getdata = getdatabyselection(Store.luckysheet_select_save[0]);
        if (getdata.length == 0) {
            return;
        }

        let arr = [];
        let getdatalen = getdata.length, collen = getdata[0].length;
        for (let c = 0; c < collen; c++) {
            let a = [], repeat = {};

            for (let r = 0; r < getdatalen; r++) {
                let value = null;
                if (getdata[r] != null && getdata[r][c] != null) {
                    value = getdata[r][c];

                    if(value.v in repeat){
                        repeat[value.v].push(value);
                    }
                    else{
                        repeat[value.v] = [];
                        repeat[value.v].push(value);
                    }
                }
            }

            for (let r = 0; r < getdatalen; r++) {
                let value = null;
                if (getdata[r] != null && getdata[r][c] != null) {
                    value = getdata[r][c];

                    if(repeat[value.v].length == 1){
                        a.push(value);
                    }
                }
            }

            a1 = a;
            let l = getdatalen - a1.length;
            for (let r1 = 0; r1 < l; r1++) {
                a1.push(null);
            }
            arr.push(a1);
        }

        let arr1 = [];
        for (let c = 0; c < arr[0].length; c++) {
            let a = [];
            for (let r = 0; r < arr.length; r++) {
                let value = null;
                if (arr[r] != null && arr[r][c] != null) {
                    value = arr[r][c];
                }
                a.push(value);
            }
            arr1.push(a);
        }

        editor.controlHandler(arr1);
    });
}