init repo
This commit is contained in:
466
OfficeWeb/sdk/Common/editorscommon.js
Normal file
466
OfficeWeb/sdk/Common/editorscommon.js
Normal file
@@ -0,0 +1,466 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2014
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
var g_sMainServiceLocalUrl = "/CanvasService.ashx";
|
||||
var g_sResourceServiceLocalUrl = "/ResourceService.ashx?path=";
|
||||
var g_sUploadServiceLocalUrl = "/UploadService.ashx";
|
||||
var g_sSpellCheckServiceLocalUrl = "/SpellChecker.ashx";
|
||||
var g_sTrackingServiceLocalUrl = "/TrackingService.ashx";
|
||||
var g_nMaxJsonLength = 2097152;
|
||||
var g_nMaxJsonLengthChecked = g_nMaxJsonLength / 1000;
|
||||
function fSortAscending(a, b) {
|
||||
return a - b;
|
||||
}
|
||||
function fSortDescending(a, b) {
|
||||
return b - a;
|
||||
}
|
||||
var c_oEditorId = {
|
||||
Word: 0,
|
||||
Speadsheet: 1,
|
||||
Presentation: 2
|
||||
};
|
||||
var PostMessageType = {
|
||||
UploadImage: 0,
|
||||
ExtensionExist: 1
|
||||
};
|
||||
var c_oAscServerError = {
|
||||
NoError: 0,
|
||||
Unknown: -1,
|
||||
ReadRequestStream: -3,
|
||||
TaskQueue: -20,
|
||||
TaskResult: -40,
|
||||
Storage: -60,
|
||||
StorageFileNoFound: -61,
|
||||
StorageRead: -62,
|
||||
StorageWrite: -63,
|
||||
StorageRemoveDir: -64,
|
||||
StorageCreateDir: -65,
|
||||
StorageGetInfo: -66,
|
||||
Convert: -80,
|
||||
ConvertDownload: -81,
|
||||
ConvertUnknownFormat: -82,
|
||||
ConvertTimeout: -83,
|
||||
ConvertReadFile: -84,
|
||||
ConvertMS_OFFCRYPTO: -85,
|
||||
Upload: -100,
|
||||
UploadContentLength: -101,
|
||||
UploadExtension: -102,
|
||||
UploadCountFiles: -103,
|
||||
VKey: -120,
|
||||
VKeyEncrypt: -121,
|
||||
VKeyKeyExpire: -122,
|
||||
VKeyUserCountExceed: -123
|
||||
};
|
||||
var c_oAscImageUploadProp = {
|
||||
MaxFileSize: 25000000,
|
||||
SupportedFormats: ["jpg", "jpeg", "jpe", "png", "gif", "bmp"]
|
||||
};
|
||||
function ValidateUploadImage(files) {
|
||||
var nRes = c_oAscServerError.NoError;
|
||||
if (1 === files.length) {
|
||||
var file = files[0];
|
||||
var sName = file.fileName || file.name;
|
||||
if (sName) {
|
||||
var bSupported = false;
|
||||
var nIndex = sName.lastIndexOf(".");
|
||||
if (-1 != nIndex) {
|
||||
var ext = sName.substring(nIndex + 1).toLowerCase();
|
||||
for (var i = 0, length = c_oAscImageUploadProp.SupportedFormats.length; i < length; i++) {
|
||||
if (c_oAscImageUploadProp.SupportedFormats[i] == ext) {
|
||||
bSupported = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (false == bSupported) {
|
||||
nRes = c_oAscServerError.UploadExtension;
|
||||
}
|
||||
}
|
||||
if (c_oAscError.ID.No == nRes) {
|
||||
var nSize = file.fileSize || file.size;
|
||||
if (nSize && c_oAscImageUploadProp.MaxFileSize < nSize) {
|
||||
nRes = c_oAscServerError.UploadContentLength;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
nRes = c_oAscServerError.UploadCountFiles;
|
||||
}
|
||||
return nRes;
|
||||
}
|
||||
function CanDropFiles(event) {
|
||||
var bRes = false;
|
||||
if (event.dataTransfer.types) {
|
||||
for (var i = 0, length = event.dataTransfer.types.length; i < length; ++i) {
|
||||
var type = event.dataTransfer.types[i];
|
||||
if (type == "Files") {
|
||||
if (event.dataTransfer.items) {
|
||||
var item = event.dataTransfer.items[0];
|
||||
for (var j = 0, length2 = c_oAscImageUploadProp.SupportedFormats.length; j < length2; j++) {
|
||||
if (item.type && -1 != item.type.indexOf(c_oAscImageUploadProp.SupportedFormats[j])) {
|
||||
bRes = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
bRes = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return bRes;
|
||||
}
|
||||
function GetUploadIFrame() {
|
||||
var sIFrameName = "apiImageUpload";
|
||||
var oImageUploader = document.getElementById(sIFrameName);
|
||||
if (!oImageUploader) {
|
||||
var frame = document.createElement("iframe");
|
||||
frame.name = sIFrameName;
|
||||
frame.id = sIFrameName;
|
||||
frame.setAttribute("style", "position:absolute;left:-2px;top:-2px;width:1px;height:1px;z-index:-1000;");
|
||||
document.body.appendChild(frame);
|
||||
}
|
||||
return window.frames[sIFrameName];
|
||||
}
|
||||
var rx_operators = new RegExp("^ *[-+*/^&%<=>:] *"),
|
||||
rx_LG = new RegExp("^ *[<=>]+ *"),
|
||||
rx_Lt = new RegExp("^ *< *"),
|
||||
rx_Le = new RegExp("^ *<= *"),
|
||||
rx_Gt = new RegExp("^ *> *"),
|
||||
rx_Ge = new RegExp("^ *>= *"),
|
||||
rx_Ne = new RegExp("^ *<> *"),
|
||||
rg = new RegExp("^([\\w\\d.]+ *)[-+*/^&%<=>:;\\(\\)]"),
|
||||
rgRange = new RegExp("^\\$?[A-Za-z]+\\$?\\d+:\\$?[A-Za-z]+\\$?\\d+"),
|
||||
rgCols = new RegExp("^\\$?[A-Za-z]+:\\$?[A-Za-z]+"),
|
||||
rgRows = new RegExp("^\\$?\\d+:\\$?\\d+"),
|
||||
rx_ref = new RegExp("^ *(\\$?[A-Za-z]{1,3}\\$?(\\d{1,7}))([-+*/^&%<=>: ;),]|$)"),
|
||||
rx_refAll = new RegExp("^(\\$?[A-Za-z]+\\$?(\\d+))([-+*/^&%<=>: ;),]|$)"),
|
||||
rx_ref3D_non_quoted = new XRegExp("^(?<name_from>[\\p{L}\\d.]+)(:(?<name_to>[\\p{L}\\d.]+))?!"),
|
||||
rx_ref3D_quoted = new XRegExp("^'(?<name_from>(?:''|[^\\[\\]'\\/*?:])*)(?::(?<name_to>(?:''|[^\\[\\]'\\/*?:])*))?'!"),
|
||||
rx_ref3D = new RegExp("^\\D*[\\D\\d]*\\!"),
|
||||
rx_before_operators = new RegExp("^ *[,()]"),
|
||||
rx_space = new RegExp(" "),
|
||||
rx_number = new RegExp("^[+-]?\\d*(\\d|\\.)\\d*([eE][+-]?\\d+)?"),
|
||||
rx_LeftParentheses = new RegExp("^ *\\( *"),
|
||||
rx_RightParentheses = new RegExp("^ *\\)"),
|
||||
rx_Comma = new RegExp("^ *[,;] *"),
|
||||
rx_error = new RegExp("^(#NULL!|#DIV\\/0!|#VALUE!|#REF!|#NAME\\?|#NUM!|#UNSUPPORTED_FUNCTION!|#N\\/A|#GETTING_DATA)"),
|
||||
rx_bool = new RegExp("^(TRUE|FALSE|true|false)([-+*/^&%<=>: ;),]|$)"),
|
||||
rx_string = new RegExp('^"((""|[^"])*)"'),
|
||||
rx_name = new XRegExp("^(?<name>\\w[\\w\\d.]*)([-+*/^&%<=>: ;),]|$)"),
|
||||
rx_test_ws_name = new XRegExp("^[\\]_\\[\\p{L}\\d.]*$"),
|
||||
rx_LeftBrace = new RegExp("^ *\\{ *"),
|
||||
rx_RightBrace = new RegExp("^ *\\}"),
|
||||
rx_array = new RegExp('^\\{(([+-]?\\d*(\\d|\\.)\\d*([eE][+-]?\\d+)?)?("((""|[^"])*)")?(#NULL!|#DIV\\/0!|#VALUE!|#REF!|#NAME\\?|#NUM!|#UNSUPPORTED_FUNCTION!|#N\\A|#GETTING_DATA|FALSE|TRUE|true|false)?[,;]?)*\\}');
|
||||
function parserHelper() {}
|
||||
parserHelper.prototype = {
|
||||
_reset: function () {
|
||||
delete this.operand_str;
|
||||
delete this.pCurrPos;
|
||||
},
|
||||
isOperator: function (formula, start_pos) {
|
||||
if (this instanceof parserHelper) {
|
||||
this._reset();
|
||||
}
|
||||
var str = formula.substring(start_pos);
|
||||
var match = str.match(rx_operators);
|
||||
if (match == null || match == undefined) {
|
||||
return false;
|
||||
} else {
|
||||
var mt = str.match(rx_LG);
|
||||
if (mt) {
|
||||
match = mt;
|
||||
}
|
||||
this.operand_str = match[0].replace(/\s/g, "", "");
|
||||
this.pCurrPos += match[0].length;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
isFunc: function (formula, start_pos) {
|
||||
if (this instanceof parserHelper) {
|
||||
this._reset();
|
||||
}
|
||||
var frml = formula.substring(start_pos);
|
||||
var match = (frml).match(rg);
|
||||
if (match != null && match != undefined) {
|
||||
if (match.length == 2) {
|
||||
this.pCurrPos += match[1].length;
|
||||
this.operand_str = match[1];
|
||||
return true;
|
||||
}
|
||||
}
|
||||
this.operand_str = null;
|
||||
return false;
|
||||
},
|
||||
isArea: function (formula, start_pos) {
|
||||
if (this instanceof parserHelper) {
|
||||
this._reset();
|
||||
}
|
||||
var subSTR = formula.substring(start_pos);
|
||||
var match = subSTR.match(rgRange) || subSTR.match(rgCols) || subSTR.match(rgRows);
|
||||
if (match != null || match != undefined) {
|
||||
this.pCurrPos += match[0].length;
|
||||
this.operand_str = match[0];
|
||||
return true;
|
||||
}
|
||||
this.operand_str = null;
|
||||
return false;
|
||||
},
|
||||
isRef: function (formula, start_pos, allRef) {
|
||||
if (this instanceof parserHelper) {
|
||||
this._reset();
|
||||
}
|
||||
var match = (formula.substring(start_pos)).match(rx_ref);
|
||||
if (match != null || match != undefined) {
|
||||
if (match.length >= 3 && g_oCellAddressUtils.colstrToColnum(match[1].substr(0, (match[1].length - match[2].length))) <= g_oCellAddressUtils.colstrToColnum("XFD") && parseInt(match[2]) <= 1048576) {
|
||||
this.pCurrPos += match[0].indexOf(" ") > -1 ? match[0].length - 1 : match[1].length;
|
||||
this.operand_str = match[1];
|
||||
return true;
|
||||
} else {
|
||||
if (allRef) {
|
||||
match = (formula.substring(start_pos)).match(rx_refAll);
|
||||
if ((match != null || match != undefined) && match.length >= 3) {
|
||||
this.pCurrPos += match[1].length;
|
||||
this.operand_str = match[1];
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
this.operand_str = null;
|
||||
return false;
|
||||
},
|
||||
is3DRef: function (formula, start_pos) {
|
||||
if (this instanceof parserHelper) {
|
||||
this._reset();
|
||||
}
|
||||
var subSTR = formula.substring(start_pos);
|
||||
var match = rx_ref3D_quoted.xexec(subSTR) || rx_ref3D_non_quoted.xexec(subSTR);
|
||||
if (match != null || match != undefined) {
|
||||
this.pCurrPos += match[0].length;
|
||||
this.operand_str = match[1];
|
||||
return [true, match["name_from"] ? match["name_from"].replace(/''/g, "'") : null, match["name_to"] ? match["name_to"].replace(/''/g, "'") : null];
|
||||
}
|
||||
this.operand_str = null;
|
||||
return [false, null, null];
|
||||
},
|
||||
isNextPtg: function (formula, start_pos) {
|
||||
if (this instanceof parserHelper) {
|
||||
this._reset();
|
||||
}
|
||||
var subSTR = formula.substring(start_pos);
|
||||
return ((subSTR.match(rx_before_operators) != null || subSTR.match(rx_before_operators) != undefined) && (subSTR.match(rx_space) != null || subSTR.match(rx_space) != undefined));
|
||||
},
|
||||
isNumber: function (formula, start_pos) {
|
||||
if (this instanceof parserHelper) {
|
||||
this._reset();
|
||||
}
|
||||
var match = (formula.substring(start_pos)).match(rx_number);
|
||||
if (match == null || match == undefined) {
|
||||
return false;
|
||||
} else {
|
||||
this.operand_str = match[0];
|
||||
this.pCurrPos += match[0].length;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
isLeftParentheses: function (formula, start_pos) {
|
||||
if (this instanceof parserHelper) {
|
||||
this._reset();
|
||||
}
|
||||
var match = (formula.substring(start_pos)).match(rx_LeftParentheses);
|
||||
if (match == null || match == undefined) {
|
||||
return false;
|
||||
} else {
|
||||
this.operand_str = match[0].replace(/\s/, "");
|
||||
this.pCurrPos += match[0].length;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
isRightParentheses: function (formula, start_pos) {
|
||||
if (this instanceof parserHelper) {
|
||||
this._reset();
|
||||
}
|
||||
var match = (formula.substring(start_pos)).match(rx_RightParentheses);
|
||||
if (match == null || match == undefined) {
|
||||
return false;
|
||||
} else {
|
||||
this.operand_str = match[0].replace(/\s/, "");
|
||||
this.pCurrPos += match[0].length;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
isComma: function (formula, start_pos) {
|
||||
if (this instanceof parserHelper) {
|
||||
this._reset();
|
||||
}
|
||||
var match = (formula.substring(start_pos)).match(rx_Comma);
|
||||
if (match == null || match == undefined) {
|
||||
return false;
|
||||
} else {
|
||||
this.operand_str = match[0];
|
||||
this.pCurrPos += match[0].length;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
isError: function (formula, start_pos) {
|
||||
if (this instanceof parserHelper) {
|
||||
this._reset();
|
||||
}
|
||||
var match = (formula.substring(start_pos)).match(rx_error);
|
||||
if (match == null || match == undefined) {
|
||||
return false;
|
||||
} else {
|
||||
this.operand_str = match[0];
|
||||
this.pCurrPos += match[0].length;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
isBoolean: function (formula, start_pos) {
|
||||
if (this instanceof parserHelper) {
|
||||
this._reset();
|
||||
}
|
||||
var match = (formula.substring(start_pos)).match(rx_bool);
|
||||
if (match == null || match == undefined) {
|
||||
return false;
|
||||
} else {
|
||||
this.operand_str = match[1];
|
||||
this.pCurrPos += match[1].length;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
isString: function (formula, start_pos) {
|
||||
if (this instanceof parserHelper) {
|
||||
this._reset();
|
||||
}
|
||||
var match = (formula.substring(start_pos)).match(rx_string);
|
||||
if (match != null || match != undefined) {
|
||||
this.operand_str = match[1].replace('""', '"');
|
||||
this.pCurrPos += match[0].length;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
isName: function (formula, start_pos, wb) {
|
||||
if (this instanceof parserHelper) {
|
||||
this._reset();
|
||||
}
|
||||
var subSTR = formula.substring(start_pos);
|
||||
var match = rx_name.xexec(subSTR);
|
||||
if (match != null || match != undefined) {
|
||||
var name = match["name"];
|
||||
if (name && name.length != 0 && wb.DefinedNames && wb.isDefinedNamesExists(name)) {
|
||||
this.pCurrPos += name.length;
|
||||
this.operand_str = name;
|
||||
return [true, name];
|
||||
}
|
||||
}
|
||||
return [false];
|
||||
},
|
||||
isArray: function (formula, start_pos, wb) {
|
||||
if (this instanceof parserHelper) {
|
||||
this._reset();
|
||||
}
|
||||
var subSTR = formula.substring(start_pos);
|
||||
var match = (formula.substring(start_pos)).match(rx_array);
|
||||
if (match != null || match != undefined) {
|
||||
this.operand_str = match[0].substring(1, match[0].length - 1);
|
||||
this.pCurrPos += match[0].length;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
isLeftBrace: function (formula, start_pos) {
|
||||
if (this instanceof parserHelper) {
|
||||
this._reset();
|
||||
}
|
||||
var match = (formula.substring(start_pos)).match(rx_LeftBrace);
|
||||
if (match == null || match == undefined) {
|
||||
return false;
|
||||
} else {
|
||||
this.operand_str = match[0].replace(/\s/, "");
|
||||
this.pCurrPos += match[0].length;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
isRightBrace: function (formula, start_pos) {
|
||||
if (this instanceof parserHelper) {
|
||||
this._reset();
|
||||
}
|
||||
var match = (formula.substring(start_pos)).match(rx_RightBrace);
|
||||
if (match == null || match == undefined) {
|
||||
return false;
|
||||
} else {
|
||||
this.operand_str = match[0].replace(/\s/, "");
|
||||
this.pCurrPos += match[0].length;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
parse3DRef: function (formula) {
|
||||
var is3DRefResult = this.is3DRef(formula, 0);
|
||||
if (is3DRefResult && true === is3DRefResult[0]) {
|
||||
var sheetName = is3DRefResult[1];
|
||||
var indexStartRange = formula.indexOf("!") + 1;
|
||||
if (this.isArea(formula, indexStartRange)) {
|
||||
if (this.operand_str.length == formula.substring(indexStartRange).length) {
|
||||
return {
|
||||
sheet: sheetName,
|
||||
range: this.operand_str
|
||||
};
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
if (this.isRef(formula, indexStartRange)) {
|
||||
if (this.operand_str.length == formula.substring(indexStartRange).length) {
|
||||
return {
|
||||
sheet: sheetName,
|
||||
range: this.operand_str
|
||||
};
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
};
|
||||
var parserHelp = new parserHelper();
|
||||
Reference in New Issue
Block a user