/* * (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("^(?[\\p{L}\\d.]+)(:(?[\\p{L}\\d.]+))?!"), rx_ref3D_quoted = new XRegExp("^'(?(?:''|[^\\[\\]'\\/*?:])*)(?::(?(?:''|[^\\[\\]'\\/*?:])*))?'!"), 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("^(?\\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();