/* * (c) Copyright Ascensio System SIA 2010-2024 * * 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 20A-6 Ernesta Birznieka-Upish * street, Riga, Latvia, EU, LV-1050. * * 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 * */ "use strict"; (/** * @param {Window} window * @param {undefined} undefined */ function (window, undefined) { // Import var AscBrowser = AscCommon.AscBrowser; var locktype_None = AscCommon.c_oAscLockTypes.kLockTypeNone; var locktype_Mine = AscCommon.c_oAscLockTypes.kLockTypeMine; var locktype_Other = AscCommon.c_oAscLockTypes.kLockTypeOther; var locktype_Other2 = AscCommon.c_oAscLockTypes.kLockTypeOther2; var locktype_Other3 = AscCommon.c_oAscLockTypes.kLockTypeOther3; var contentchanges_Add = AscCommon.contentchanges_Add; var CColor = AscCommon.CColor; var g_oCellAddressUtils = AscCommon.g_oCellAddressUtils; var c_oAscFileType = Asc.c_oAscFileType; var languages = window['Asc'].g_oLcidIdToNameMap; var availableIdeographLanguages = window['Asc'].availableIdeographLanguages; var availableBidiLanguages = window['Asc'].availableBidiLanguages; const fontslot_ASCII = 0x01; let scriptDirectory = ""; if (document.currentScript) { scriptDirectory = document.currentScript.src; scriptDirectory = scriptDirectory.substring(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/") + 1); } Number.isInteger = Number.isInteger || function(value) { return typeof value === 'number' && Number.isFinite(value) && !(value % 1); }; Number.isFinite = Number.isFinite || function(value) { return typeof value === 'number' && isFinite(value); }; RegExp.escape = function ( text ) { return text.replace( /[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&" ); }; Math.sinh = function ( arg ) { return (this.pow( this.E, arg ) - this.pow( this.E, -arg )) / 2; }; Math.cosh = function ( arg ) { return (this.pow( this.E, arg ) + this.pow( this.E, -arg )) / 2; }; Math.tanh = Math.tanh || function(x) { if (x === Infinity) { return 1; } else if (x === -Infinity) { return -1; } else { var y = Math.exp(2 * x); if (y === Infinity) { return 1; } else if (y === -Infinity) { return -1; } return (y - 1) / (y + 1); } }; Math.asinh = function ( arg ) { return this.log( arg + this.sqrt( arg * arg + 1 ) ); }; Math.acosh = function ( arg ) { return this.log( arg + this.sqrt( arg + 1 ) * this.sqrt( arg - 1 ) ); }; Math.atanh = function ( arg ) { return 0.5 * this.log( (1 + arg) / (1 - arg) ); }; Math.fact = function ( n ) { var res = 1; n = this.floor( n ); if ( n < 0 ) { return NaN; } else if (n > 170) { return Infinity; } while ( n !== 0 ) { res *= n--; } return res; }; Math.doubleFact = function ( n ) { var res = 1; n = this.floor( n ); if ( n < 0 ) { return NaN; } else if (n > 170) { return Infinity; } // n = Math.floor((n+1)/2); while ( n > 0 ) { res *= n; n -= 2; } return res; }; Math.factor = function ( n ) { var res = 1; n = this.floor( n ); while ( n !== 0 ) { res = res * n--; } return res; }; Math.ln = Math.log; Math.log10 = function ( x ) { return this.log( x ) / this.log( 10 ); }; Math.log1p = Math.log1p || function(x) { return Math.log(1 + x); }; Math.expm1 = Math.expm1 || function(x) { return Math.exp(x) - 1; }; Math.binomCoeff = function ( n, k ) { return this.fact( n ) / (this.fact( k ) * this.fact( n - k )); }; Math.permut = function ( n, k ) { return this.floor( this.fact( n ) / this.fact( n - k ) + 0.5 ); }; Math.approxEqual = function ( a, b ) { if ( a === b ) { return true; } return this.abs( a - b ) < 1e-15; }; if (typeof Math.sign != 'function') { Math['sign'] = Math.sign = function (n) { return n == 0 ? 0 : n < 0 ? -1 : 1; }; } Math.trunc = Math.trunc || function(v) { v = +v; return (v - v % 1) || (!isFinite(v) || v === 0 ? v : v < 0 ? -0 : 0); }; if (typeof require === 'function' && !window['XRegExp']) { window['XRegExp'] = require('xregexp'); } var oZipImages = null; var sDownloadServiceLocalUrl = "../../../../downloadas"; var sUploadServiceLocalUrl = "../../../../upload"; var sSaveFileLocalUrl = "../../../../savefile"; var sDownloadFileLocalUrl = "../../../../downloadfile"; var nMaxRequestLength = 5242880;//5mb default 30mb function decimalNumberConversion(number, base) { return number.toString(base).split("").map(function (digit) { return parseInt(digit, base); }); } function getSockJs() { return window['SockJS'] || require('sockjs'); } function getSocketIO() { return typeof window['io'] === 'function' ? window['io'] : require("socketio"); } function getBaseUrl() { var indexHtml = window["location"]["href"]; var questInd = indexHtml.indexOf("?"); if (questInd > 0) { indexHtml = indexHtml.substring(0, questInd); } return indexHtml.substring(0, indexHtml.lastIndexOf("/") + 1); } function getBaseUrlPathname() { let baseUrl = getBaseUrl(); return baseUrl.substring(getIndex(baseUrl, '/', 3)); } function getIndex(str, substring, n) { return str.split(substring).slice(0, n).join(substring).length; } function getEncodingParams() { var res = []; for (var i = 0; i < AscCommon.c_oAscEncodings.length; ++i) { var encoding = AscCommon.c_oAscEncodings[i]; var newElem = {'codepage': encoding[0], 'lcid': encoding[1], 'name': encoding[3]}; res.push(newElem); } return res; } function getEncodingByBOM(data) { var res = {encoding: AscCommon.c_oAscCodePageNone, size: 0}; if (data.length >= 2) { res.size = 2; if (0xFF == data[0] && 0xFE == data[1]) { res.encoding = AscCommon.c_oAscCodePageUtf16; } else if (0xFE == data[0] && 0xFF == data[1]) { res.encoding = AscCommon.c_oAscCodePageUtf16BE; } else if (data.length >= 3) { res.size = 3; if (0xEF == data[0] && 0xBB == data[1] && 0xBF == data[2]) { res.encoding = AscCommon.c_oAscCodePageUtf8; } else if (data.length >= 4) { res.size = 4; if (0xFF == data[0] && 0xFE == data[1] && 0x00 == data[2] && 0x00 == data[3]) { res.encoding = AscCommon.c_oAscCodePageUtf32; } else if (0x00 == data[0] && 0x00 == data[1] && 0xFE == data[2] && 0xFF == data[3]) { res.encoding = AscCommon.c_oAscCodePageUtf32BE; } else if (0x2B == data[0] && 0x2F == data[1] && 0x76 == data[2] && 0x38 == data[3]) { res.encoding = AscCommon.c_oAscCodePageUtf7; } else if (0x2B == data[0] && 0x2F == data[1] && 0x76 == data[2] && 0x39 == data[3]) { res.encoding = AscCommon.c_oAscCodePageUtf7; } else if (0x2B == data[0] && 0x2F == data[1] && 0x76 == data[2] && 0x2B == data[3]) { res.encoding = AscCommon.c_oAscCodePageUtf7; } else if (0x2B == data[0] && 0x2F == data[1] && 0x76 == data[2] && 0x2F == data[3]) { res.encoding = AscCommon.c_oAscCodePageUtf7; } } } } return res; } function DocumentUrls() { this.Clear(); } DocumentUrls.prototype = { mediaPrefix: 'media/', init: function (urls) { this.addUrls(urls); }, Clear: function () { this.urls = {}; this.urlsReverse = {}; this.documentUrl = ""; this.imageCount = 0; }, getUrls: function () { return this.urls; }, addUrls: function (urls) { for (var i in urls) { var url = urls[i]; this.urls[i] = url; this.urlsReverse[url] = i; this.imageCount++; } if (window["IS_NATIVE_EDITOR"]) { window["native"]["setUrlsCount"](this.imageCount); } }, addImageUrl: function (strPath, url) { var urls = {}; urls[this.mediaPrefix + strPath] = url; this.addUrls(urls); }, getImageUrl: function (strPath) { return this.getUrl(this.mediaPrefix + strPath); }, getImageLocal: function (url) { if(url && 0 === url.indexOf('data:image')) { return null; } var imageLocal = this.getLocal(url); if (imageLocal && this.mediaPrefix == imageLocal.substring(0, this.mediaPrefix.length)) imageLocal = imageLocal.substring(this.mediaPrefix.length); return imageLocal; }, imagePath2Local: function (imageLocal) { if (imageLocal && this.mediaPrefix == imageLocal.substring(0, this.mediaPrefix.length)) imageLocal = imageLocal.substring(this.mediaPrefix.length); return imageLocal; }, getUrl: function (strPath) { if (this.urls) { return this.urls[strPath]; } return null; }, getLocal: function (url) { if (this.urlsReverse) { var res = this.urlsReverse[url]; if (!res && typeof editor !== 'undefined' && editor.ThemeLoader && 0 == url.indexOf(editor.ThemeLoader.ThemesUrlAbs)) { res = url.substring(editor.ThemeLoader.ThemesUrlAbs.length); } return res; } return null; }, getMaxIndex: function (url) { return this.imageCount; }, getImageUrlsWithOtherExtention: function(imageLocal) { var res = []; var filename = GetFileName(imageLocal); for (var i in this.urls) { if (0 == i.indexOf(this.mediaPrefix + filename + '.') && this.mediaPrefix + imageLocal !== i) { res.push(this.urls[i]); } } return res; }, getImagesWithOtherExtension: function(imageLocal) { var res = []; var filename = GetFileName(imageLocal); var prefix = this.mediaPrefix + filename + '.'; for (var i in this.urls) { if (0 == i.indexOf(prefix) && !i.endsWith(imageLocal)) { res.push(i.substring(this.mediaPrefix.length)); } } return res; }, isThemeUrl: function(sUrl) { return sUrl && (0 === sUrl.indexOf('theme')); } }; var g_oDocumentUrls = new DocumentUrls(); function CHTMLCursorItemBase(_name, _hotspot, _default) { this.name = _name; this.hotspot = _hotspot; this.default = _default; } CHTMLCursorItemBase.prototype.baseUrl = "../../../../sdkjs/common/Images/cursors/"; CHTMLCursorItemBase.prototype.getValue = function() { return this.default; }; /** * @extends {CHTMLCursorItemBase} */ function CHTMLCursorCur() { CHTMLCursorItemBase.apply(this, arguments); } CHTMLCursorCur.prototype = Object.create(CHTMLCursorItemBase.prototype); CHTMLCursorCur.prototype.getValue = function(globalCursors) { if (AscCommon.AscBrowser.isCustomScalingAbove2()) return "url(" + this.baseUrl + this.name + "_2x.cur), " + this.default; return "url(" + this.baseUrl + this.name + ".cur), " + this.default; } /** * @extends {CHTMLCursorItemBase} */ function CHTMLCursorSvgExternal() { CHTMLCursorItemBase.apply(this, arguments); } CHTMLCursorSvgExternal.prototype = Object.create(CHTMLCursorItemBase.prototype); CHTMLCursorSvgExternal.prototype.getValue = function(globalCursors) { return "url(" + this.baseUrl + this.name + ".svg) " + this.hotspot + ", " + this.default; } /** * @extends {CHTMLCursorItemBase} */ function CHTMLCursorPng() { CHTMLCursorItemBase.apply(this, arguments); } CHTMLCursorPng.prototype = Object.create(CHTMLCursorItemBase.prototype); CHTMLCursorPng.prototype.getValue = function(globalCursors) { return "-webkit-image-set(url(" + this.baseUrl + this.name + ".png) 1x," + " url(" + this.baseUrl + this.name + "_2x.png) 2x) " + this.hotspot + ", " + this.default; } /** * @extends {CHTMLCursorItemBase} */ function CHTMLCursorModern() { CHTMLCursorItemBase.apply(this, arguments); } CHTMLCursorModern.prototype = Object.create(CHTMLCursorItemBase.prototype); CHTMLCursorModern.prototype.getValue = function(globalCursors) { if (1.2 > AscCommon.AscBrowser.retinaPixelRatio) return "url(" + this.baseUrl + this.name + ".png) " + this.hotspot + ", " + this.default; if (globalCursors.mapSvg && globalCursors.mapSvg[this.name]) { return "url(\"data:image/svg+xml;utf8," + globalCursors.mapSvg[this.name] + "\") " + this.hotspot + ", " + this.default; } if (!AscCommon.AscBrowser.isChrome && !AscCommon.AscBrowser.isSafari) { return "url(" + this.baseUrl + this.name + ".svg) " + this.hotspot + ", " + "url(" + this.baseUrl + this.name + ".png) " + this.hotspot + ", " + this.default; } return "-webkit-image-set(url(" + this.baseUrl + this.name + ".png) 1x," + " url(" + this.baseUrl + this.name + "_2x.png) 2x) " + this.hotspot + ", " + this.default; } var Cursors = { MarkerFormat : "marker-format", SelectTableRow : "select-table-row", SelectTableColumn : "select-table-column", SelectTableCell : "select-table-cell", SelectTableContent : "select-table-content", TableEraser : "table-eraser", TablePen : "table-pen", Grab : "grab", Grabbing : "grabbing", MoveBorderHor : "move-border-horizontally", MoveBorderVer : "move-border-vertically", CellCur : "plus", CellFormatPainter : "plus-copy", TextCopy : "text-copy", ShapeCopy : "shape-copy", Eyedropper : "eyedropper" }; function CHTMLCursor() { this.cursors = {}; this.mapSvg = null; this.value = function(param) { if (this.cursors[param]) return this.cursors[param].getValue(this); return param; }; this.register = function(type, target, default_css_value) { if (AscBrowser.isIE || AscBrowser.isIeEdge) { this.cursors[type] = new CHTMLCursorCur(type, target, default_css_value); } else if (window.opera) { this.cursors[type] = new CHTMLCursorItemBase(type, target, default_css_value); } else { this.cursors[type] = new CHTMLCursorModern(type, target, default_css_value); } }; this.loadAllSvg = function() { try { var xhr = new XMLHttpRequest(); xhr.open("GET", "../../../../sdkjs/common/Images/cursors/svg.json", true); var t = this; xhr.onload = function() { if (this.status === 200 || location.href.indexOf("file:") === 0) { try { t.mapSvg = JSON.parse(this.responseText); } catch (err) {} } }; xhr.send(''); } catch (e) {} }; this.getDrawCursor = function(ln) { if (!ln.Fill) return "default"; let color = ln.Fill.fill.color.RGBA; let w = (ln.w == null) ? 12700 : ln.w; var scale = 1; switch (Asc.editor.editorId) { case AscCommon.c_oEditorId.Word: case AscCommon.c_oEditorId.Presentation: { scale = Asc.editor.WordControl.m_nZoomValue / 100; break; } case AscCommon.c_oEditorId.Spreadsheet: { scale = Asc.editor.asc_getZoom(); break; } default: break; } w = (scale * w / 9525) >> 0; if (w < 4) w = 4; if (w & 0x01) w += 1; if (ln && ln.Fill && ln.Fill.transparent !== null) color.A = ln.Fill.transparent; let isRect = (254 < color.A) ? false : true; let h = w; if (isRect) w = 10; let url = ""; if (!isRect) { url = url + ""; } else { url = url + ""; } //console.log(url); return "url(\"data:image/svg+xml;utf8," + url + "\") " + (w >> 1) + " " + (h >> 1) + ", default"; } this.loadAllSvg(); } var g_oHtmlCursor = new CHTMLCursor(); AscCommon.g_oHtmlCursor = g_oHtmlCursor; AscCommon.Cursors = Cursors; g_oHtmlCursor.register(AscCommon.Cursors.TextCopy, "2 2", "pointer"); g_oHtmlCursor.register(AscCommon.Cursors.ShapeCopy, "1 1", "pointer"); g_oHtmlCursor.register(AscCommon.Cursors.Eyedropper, "1 17", "pointer"); function OpenFileResult() { this.bSerFormat = false; this.data = null; this.url = null; this.changes = null; } function saveWithParts(fSendCommand, fCallback, fCallbackRequest, oAdditionalData, dataContainer) { var index = dataContainer.index; if (null == dataContainer.part && (!dataContainer.data || dataContainer.data.length <= nMaxRequestLength)) { oAdditionalData["savetype"] = AscCommon.c_oAscSaveTypes.CompleteAll; } else { if (0 == index) { oAdditionalData["savetype"] = AscCommon.c_oAscSaveTypes.PartStart; dataContainer.count = Math.ceil(dataContainer.data.length / nMaxRequestLength); } else if (index != dataContainer.count - 1) { oAdditionalData["savetype"] = AscCommon.c_oAscSaveTypes.Part; } else { oAdditionalData["savetype"] = AscCommon.c_oAscSaveTypes.Complete; } if(typeof dataContainer.data === 'string') { dataContainer.part = dataContainer.data.substring(index * nMaxRequestLength, (index + 1) * nMaxRequestLength); } else { dataContainer.part = dataContainer.data.subarray(index * nMaxRequestLength, (index + 1) * nMaxRequestLength); } } dataContainer.index++; oAdditionalData["saveindex"] = dataContainer.index; fSendCommand(function (incomeObject, done, status) { if (null != incomeObject && "ok" == incomeObject["status"]) { if (dataContainer.index < dataContainer.count) { oAdditionalData["savekey"] = incomeObject["data"]; saveWithParts(fSendCommand, fCallback, fCallbackRequest, oAdditionalData, dataContainer); } else if (fCallbackRequest) { fCallbackRequest(incomeObject, status); } } else { fCallbackRequest ? fCallbackRequest(incomeObject, status) : fCallback(incomeObject, status); } }, oAdditionalData, dataContainer); } function loadFileContent(url, callback, opt_responseType) { asc_ajax({ url: url, dataType: "text", responseType: opt_responseType, success: callback, error: function () { callback(null); } }); } function getImageFromChanges(name) { var content; var ext = GetFileExtension(name); if ("svg" === ext) ext += "+xml"; if (null !== ext && oZipImages && (content = oZipImages[name])) { return 'data:image/' + ext + ';base64,' + AscCommon.Base64.encode(content); } return null; } function initStreamFromResponse(httpRequest) { var stream; if (typeof ArrayBuffer !== 'undefined') { stream = new Uint8Array(httpRequest.response); } else if (AscCommon.AscBrowser.isIE) { var _response = new VBArray(httpRequest["responseBody"]).toArray(); var srcLen = _response.length; var pointer = g_memory.Alloc(srcLen); var tempStream = new AscCommon.FT_Stream2(pointer.data, srcLen); tempStream.obj = pointer.obj; stream = tempStream.data; var index = 0; while (index < srcLen) { stream[index] = _response[index]; index++; } } return stream; } function isPdfFormatFile(stream) { //x2t MIN_SIZE_BUFFER = 4096 for (let i = 0; i < 4096 && i < stream.length; ++i) { //match "%PDF-" if (0x25 === stream[i] && 0x50 === stream[i + 1] && 0x44 === stream[i + 2] && 0x46 === stream[i + 3] && 0x2D === stream[i + 4]) { return true; } } return false; } function isDjvuFormatFile(stream) { return stream.length > 4 && 0x41 == stream[0] && 0x54 == stream[1] && 0x26 == stream[2] && 0x54 == stream[3] && 0x46 == stream[4] && 0x4f == stream[5] && 0x52 == stream[6] && 0x4d == stream[7]; } function isXpsFormatFile(stream) { if (!(stream && stream.length > 4 && 0x50 === stream[0] && 0x4b === stream[1] && 0x03 === stream[2] && 0x04 === stream[3])) { //Local file header signature = 0x04034b50 (PK♥♦ or "PK\3\4") return false; } let jsZlib = new AscCommon.ZLib(); if (!jsZlib.open(stream)) { return false; } let _relsBytes = jsZlib.getFile("_rels/.rels"); let _rels = _relsBytes ? AscCommon.UTF8ArrayToString(_relsBytes, 0, _relsBytes.length) : ""; //todo combine pieces let _relsPieceBytes = jsZlib.getFile("_rels/.rels/[0].piece"); let _relsPiece = _relsPieceBytes ? AscCommon.UTF8ArrayToString(_relsPieceBytes, 0, _relsPieceBytes.length) : ""; jsZlib.close(); if (-1 !== _rels.indexOf("fixedrepresentation") && (-1 !== _rels.indexOf("/xps/") || -1 !== _rels.indexOf("/oxps/"))) { return true; } return !!_relsPiece; } function checkNativeViewerSignature(stream) { return isPdfFormatFile(stream) || isDjvuFormatFile(stream) || isXpsFormatFile(stream); } function checkStreamSignature(stream, Signature) { if (stream.length > Signature.length) { for(var i = 0 ; i < Signature.length; ++i){ if(stream[i] !== Signature.charCodeAt(i)){ return false; } } return true; } return false; } function checkOOXMLSignature(stream) { return null !== getEditorByOOXMLSignature(stream); } function getEditorByBinSignature(stream, Signature) { if (stream.length > 4) { let signature = typeof stream === 'string' ? stream.slice(0, 4) : AscCommon.UTF8ArrayToString(stream, 0, 4); switch(signature) { case "DOCY": return AscCommon.c_oEditorId.Word; case "XLSY": return AscCommon.c_oEditorId.Spreadsheet; case "PPTY": return AscCommon.c_oEditorId.Presentation; case "VSDY": return AscCommon.c_oEditorId.Visio; } } return null; } function getEditorByOOXMLSignature(stream) { if (!(stream && stream.length > 4 && 0x50 === stream[0] && 0x4b === stream[1] && 0x03 === stream[2] && 0x04 === stream[3])) { //Local file header signature = 0x04034b50 (PK♥♦ or "PK\3\4") return null; } let jsZlib = new AscCommon.ZLib(); if (!jsZlib.open(stream)) { return null; } let contentTypesBytes = jsZlib.getFile("[Content_Types].xml"); let contentTypes = contentTypesBytes ? AscCommon.UTF8ArrayToString(contentTypesBytes, 0, contentTypesBytes.length) : ""; jsZlib.close(); let isWord = -1 !== contentTypes.indexOf("application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml") || -1 !== contentTypes.indexOf("application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml") || -1 !== contentTypes.indexOf("application/vnd.ms-word.document.macroEnabled.main+xml") || -1 !== contentTypes.indexOf("application/vnd.ms-word.template.macroEnabledTemplate.main+xml") || -1 !== contentTypes.indexOf("application/vnd.openxmlformats-officedocument.wordprocessingml.document.oform") || -1 !== contentTypes.indexOf("application/vnd.openxmlformats-officedocument.wordprocessingml.document.docxf"); let isExcel = -1 !== contentTypes.indexOf("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml") || -1 !== contentTypes.indexOf("application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml") || -1 !== contentTypes.indexOf("application/vnd.ms-excel.sheet.macroEnabled.main+xml") || -1 !== contentTypes.indexOf("application/vnd.ms-excel.template.macroEnabled.main+xml") || -1 !== contentTypes.indexOf("application/vnd.ms-excel.sheet.binary.macroEnabled.main"); let isSlide = -1 !== contentTypes.indexOf("application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml") || -1 !== contentTypes.indexOf("application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml") || -1 !== contentTypes.indexOf("application/vnd.openxmlformats-officedocument.presentationml.template.main+xml") || -1 !== contentTypes.indexOf("application/vnd.ms-powerpoint.presentation.macroEnabled.main+xml") || -1 !== contentTypes.indexOf("application/vnd.ms-powerpoint.slideshow.macroEnabled.main+xml") || -1 !== contentTypes.indexOf("application/vnd.ms-powerpoint.template.macroEnabled.main+xml"); let isVisio = -1 !== contentTypes.indexOf("application/vnd.ms-visio.drawing.main+xml") || -1 !== contentTypes.indexOf("application/vnd.ms-visio.stencil.main+xml") || -1 !== contentTypes.indexOf("application/vnd.ms-visio.template.main+xml") || -1 !== contentTypes.indexOf("application/vnd.ms-visio.drawing.macroEnabled.main+xml") || -1 !== contentTypes.indexOf("application/vnd.ms-visio.stencil.macroEnabled.main+xml") || -1 !== contentTypes.indexOf("application/vnd.ms-visio.template.macroEnabled.main+xml"); if (isWord) { return AscCommon.c_oEditorId.Word; } else if (isExcel) { return AscCommon.c_oEditorId.Spreadsheet; } else if (isSlide) { return AscCommon.c_oEditorId.Presentation; } else if (isVisio) { return AscCommon.c_oEditorId.Visio; } else { return null; } } function getEditorBySignature(stream) { let res = getEditorByBinSignature(stream); return null !== res ? res :getEditorByOOXMLSignature (stream); } function openFileCommand(docId, binUrl, changesUrl, changesToken, Signature, callback) { var nError = Asc.c_oAscError.ID.No, oResult = new OpenFileResult(), bEndLoadFile = false, bEndLoadChanges = false; var onEndOpen = function () { if (bEndLoadFile && bEndLoadChanges) { if (callback) { callback(nError, oResult); } } }; var sFileUrl = binUrl; sFileUrl = sFileUrl.replace(/\\/g, "/"); if (!window['IS_NATIVE_EDITOR']) { loadFileContent(sFileUrl, function (httpRequest) { //получаем url к папке с файлом var url; var nIndex = sFileUrl.lastIndexOf("/"); url = (-1 !== nIndex) ? sFileUrl.substring(0, nIndex + 1) : sFileUrl; if (httpRequest) { var stream = initStreamFromResponse(httpRequest); if (stream) { oResult.bSerFormat = checkStreamSignature(stream, Signature); oResult.data = stream; } else { nError = Asc.c_oAscError.ID.Unknown; } } else { nError = Asc.c_oAscError.ID.DownloadError; } bEndLoadFile = true; onEndOpen(); }, "arraybuffer"); } if (changesUrl) { oZipImages = {}; AscCommon.DownloadOriginalFile(docId, changesUrl, 'changesUrl', changesToken, function () { bEndLoadChanges = true; nError = Asc.c_oAscError.ID.DownloadError; onEndOpen(); }, function(data) { oResult.changes = []; let jsZlib = new AscCommon.ZLib(); if (jsZlib.open(data)) { jsZlib.files.forEach(function(path){ let data = jsZlib.getFile(path); if (data) { if (path.endsWith('.bin') || path.endsWith('.json')) { let index = parseInt(path.slice('changes'.length)); if(isBinaryChanges(data)) { oResult.changes[index] = splitBinaryChanges(data); } else { let text = AscCommon.UTF8ArrayToString(data, 0, data.length); oResult.changes[index] = JSON.parse(text); } } else { oZipImages[path] = new Uint8Array(data); } } }); jsZlib.close(); } else { nError = Asc.c_oAscError.ID.Unknown; } bEndLoadChanges = true; onEndOpen(); }); } else { oZipImages = null; bEndLoadChanges = true; } if (window['IS_NATIVE_EDITOR']) { var stream = window["native"]["openFileCommand"](sFileUrl, changesUrl, Signature); //получаем url к папке с файлом var url; var nIndex = sFileUrl.lastIndexOf("/"); url = (-1 !== nIndex) ? sFileUrl.substring(0, nIndex + 1) : sFileUrl; if (stream) { oResult.bSerFormat = checkStreamSignature(stream, Signature); oResult.data = stream; } else { nError = Asc.c_oAscError.ID.Unknown; } bEndLoadFile = true; onEndOpen(); } } function sendCommand(editor, fCallback, rdata, dataContainer) { //json не должен превышать размера 2097152, иначе при его чтении будет exception if (null == rdata["savetype"]) { editor.CoAuthoringApi.openDocument(rdata); return; } rdata["userconnectionid"] = editor.CoAuthoringApi.getUserConnectionId(); let url = sDownloadServiceLocalUrl + '/' + rdata["id"]; url += '?cmd=' + encodeURIComponent(JSON.stringify(rdata)); if (editor.documentShardKey) { url += '&' + Asc.c_sShardKeyName + '=' + encodeURIComponent(editor.documentShardKey); } if (editor.documentWopiSrc) { url += '&' + Asc.c_sWopiSrcName + '=' + encodeURIComponent(editor.documentWopiSrc); } if (editor.documentUserSessionId) { url += '&' + Asc.c_sUserSessionIdName + '=' + encodeURIComponent(editor.documentUserSessionId); } asc_ajax({ type: 'POST', url: url, data: dataContainer.part || dataContainer.data, contentType: "application/octet-stream", error: function (httpRequest, statusText, status) { if (fCallback) { fCallback(null, true, status); } }, success: function (httpRequest) { if (fCallback) { fCallback(JSON.parse(httpRequest.responseText), true); } } }); } function sendSaveFile(docId, userId, title, jwt, shardKey, wopiSrc, userSessionId, data, fError, fsuccess) { let cmd = {'id': docId, "userid": userId, "tokenSession": jwt, 'outputpath': title}; let url =sSaveFileLocalUrl + '/' + docId; url += '?cmd=' + encodeURIComponent(JSON.stringify(cmd)); if (shardKey) { url += '&' + Asc.c_sShardKeyName + '=' + encodeURIComponent(shardKey); } if (wopiSrc) { url += '&' + Asc.c_sWopiSrcName + '=' + encodeURIComponent(wopiSrc); } if (userSessionId) { url += '&' + Asc.c_sUserSessionIdName + '=' + encodeURIComponent(userSessionId); } asc_ajax({ type: 'POST', url: url, data: data, contentType: "application/octet-stream", error: fError, success: fsuccess }); } function mapAscServerErrorToAscError(nServerError, nAction) { var nRes = Asc.c_oAscError.ID.Unknown; switch (nServerError) { case c_oAscServerError.NoError : nRes = Asc.c_oAscError.ID.No; break; case c_oAscServerError.TaskQueue : case c_oAscServerError.TaskResult : nRes = Asc.c_oAscError.ID.Database; break; case c_oAscServerError.ConvertDownload : nRes = Asc.c_oAscError.ID.DownloadError; break; case c_oAscServerError.ConvertTimeout : case c_oAscServerError.ConvertDeadLetter : nRes = Asc.c_oAscError.ID.ConvertationTimeout; break; case c_oAscServerError.ConvertDRM : case c_oAscServerError.ConvertDRM_UNSUPPORTED : case c_oAscServerError.ConvertPASSWORD : nRes = Asc.c_oAscError.ID.ConvertationPassword; break; case c_oAscServerError.ConvertLIMITS : nRes = Asc.c_oAscError.ID.ConvertationOpenLimitError; break; case c_oAscServerError.ConvertPARAMS : nRes = AscCommon.c_oAscAdvancedOptionsAction.Save === nAction ? Asc.c_oAscError.ID.ConvertationSaveError : Asc.c_oAscError.ID.ConvertationOpenFormat; break; case c_oAscServerError.ConvertCONVERT_CORRUPTED : case c_oAscServerError.ConvertLIBREOFFICE : case c_oAscServerError.ConvertNEED_PARAMS : case c_oAscServerError.ConvertUnknownFormat : case c_oAscServerError.ConvertReadFile : case c_oAscServerError.ConvertTemporaty : case c_oAscServerError.ConvertDetect : case c_oAscServerError.Convert : nRes = AscCommon.c_oAscAdvancedOptionsAction.Save === nAction ? Asc.c_oAscError.ID.ConvertationSaveError : Asc.c_oAscError.ID.ConvertationOpenError; break; case c_oAscServerError.UploadContentLength : nRes = Asc.c_oAscError.ID.UplImageSize; break; case c_oAscServerError.UploadExtension : nRes = Asc.c_oAscError.ID.UplImageExt; break; case c_oAscServerError.UploadCountFiles : nRes = Asc.c_oAscError.ID.UplImageFileCount; break; case c_oAscServerError.UploadURL : nRes = Asc.c_oAscError.ID.UplImageUrl; break; case c_oAscServerError.UploadDocumentContentLength : nRes = Asc.c_oAscError.ID.UplDocumentSize; break; case c_oAscServerError.UploadDocumentExtension : nRes = Asc.c_oAscError.ID.UplDocumentExt; break; case c_oAscServerError.UploadDocumentCountFiles : nRes = Asc.c_oAscError.ID.UplDocumentFileCount; break; case c_oAscServerError.VKey : nRes = Asc.c_oAscError.ID.FileVKey; break; case c_oAscServerError.VKeyEncrypt : nRes = Asc.c_oAscError.ID.VKeyEncrypt; break; case c_oAscServerError.VKeyKeyExpire : nRes = Asc.c_oAscError.ID.KeyExpire; break; case c_oAscServerError.VKeyUserCountExceed : nRes = Asc.c_oAscError.ID.UserCountExceed; break; case c_oAscServerError.Password : nRes = Asc.c_oAscError.ID.Password; break; case c_oAscServerError.ChangeDocInfo : nRes = Asc.c_oAscError.ID.AccessDeny; break; case c_oAscServerError.ForcedViewMode : nRes = Asc.c_oAscError.ID.ForcedViewMode; break; case c_oAscServerError.Storage : case c_oAscServerError.StorageFileNoFound : case c_oAscServerError.StorageRead : case c_oAscServerError.StorageWrite : case c_oAscServerError.StorageRemoveDir : case c_oAscServerError.StorageCreateDir : case c_oAscServerError.StorageGetInfo : case c_oAscServerError.Upload : case c_oAscServerError.ReadRequestStream : case c_oAscServerError.Unknown : nRes = Asc.c_oAscError.ID.Unknown; break; } return nRes; } function joinUrls(base, relative) { //http://stackoverflow.com/questions/14780350/convert-relative-path-to-absolute-using-javascript var stack = base.split("/"), parts = relative.split("/"); stack.pop(); // remove current file name (or empty string) // (omit if "base" is the current folder without trailing slash) for (var i = 0; i < parts.length; i++) { if (parts[i] == ".") continue; if (parts[i] == "..") stack.pop(); else stack.push(parts[i]); } return stack.join("/"); } function getSourceImageSize(src) { var oApi = (Asc.editor || editor); if(oApi) { var _img = oApi.ImageLoader.map_image_index[src]; if (_img && _img.Image) { return {width: _img.Image.width, height: _img.Image.height}; } } if (window["NATIVE_EDITOR_ENJINE"] && window["native"]["GetImageOriginalSize"]) { var sizes = window["native"]["GetImageOriginalSize"](src); if (sizes) return {width:sizes["W"], height:sizes["H"]}; } return {width: 0, height: 0}; } function getFullImageSrc2(src) { if (window["NATIVE_EDITOR_ENJINE"]) { let localUrl = g_oDocumentUrls.getImageUrl(src); if (localUrl && localUrl.startsWith("blob:")) return localUrl; return src; } var start = src.slice(0, 6); if (0 === start.indexOf('theme') && editor.ThemeLoader) { return editor.ThemeLoader.ThemesUrlAbs + src; } if (0 !== start.indexOf('http:') && 0 !== start.indexOf('data:') && 0 !== start.indexOf('https:') && 0 !== start.indexOf('file:') && 0 !== start.indexOf('ftp:')) { var srcFull = g_oDocumentUrls.getImageUrl(src); if (srcFull) { return srcFull; } } return src; } function fSortAscending(a, b) { return a - b; } function fSortDescending(a, b) { return b - a; } function isLeadingSurrogateChar(nCharCode) { return (nCharCode >= 0xD800 && nCharCode <= 0xDFFF); } function decodeSurrogateChar(nLeadingChar, nTrailingChar) { if (nLeadingChar < 0xDC00 && nTrailingChar >= 0xDC00 && nTrailingChar <= 0xDFFF) return 0x10000 + ((nLeadingChar & 0x3FF) << 10) | (nTrailingChar & 0x3FF); else return null; } function encodeSurrogateChar(nUnicode) { if (nUnicode < 0x10000) { return String.fromCharCode(nUnicode); } else { nUnicode = nUnicode - 0x10000; var nLeadingChar = 0xD800 | (nUnicode >> 10); var nTrailingChar = 0xDC00 | (nUnicode & 0x3FF); return String.fromCharCode(nLeadingChar) + String.fromCharCode(nTrailingChar); } } function convertUnicodeToUTF16(sUnicode) { var sUTF16 = ""; var nLength = sUnicode.length; for (var nPos = 0; nPos < nLength; nPos++) { sUTF16 += encodeSurrogateChar(sUnicode[nPos]); } return sUTF16; } function convertUTF16toUnicode(sUTF16) { var sUnicode = []; var nLength = sUTF16.length; for (var nPos = 0; nPos < nLength; nPos++) { var nUnicode = null; var nCharCode = sUTF16.charCodeAt(nPos); if (isLeadingSurrogateChar(nCharCode)) { if (nPos + 1 < nLength) { nPos++; var nTrailingChar = sUTF16.charCodeAt(nPos); nUnicode = decodeSurrogateChar(nCharCode, nTrailingChar); } } else nUnicode = nCharCode; if (null !== nUnicode) sUnicode.push(nUnicode); } return sUnicode; } function CUnicodeStringEmulator(array) { this.arr = array; this.len = this.arr.length; this.pos = 0; } CUnicodeStringEmulator.prototype.getUnicodeIterator = function() { return this; }; CUnicodeStringEmulator.prototype.isOutside = function() { return (this.pos >= this.len); }; CUnicodeStringEmulator.prototype.isInside = function() { return (this.pos < this.len); }; CUnicodeStringEmulator.prototype.value = function() { if (this.pos >= this.len) return 0; return this.arr[this.pos]; }; CUnicodeStringEmulator.prototype.next = function() { this.pos++; }; CUnicodeStringEmulator.prototype.position = function() { return this.pos; }; CUnicodeStringEmulator.prototype.check = CUnicodeStringEmulator.prototype.isInside; var UTF8Decoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf8") : undefined; function UTF8ArrayToString(u8Array, idx, maxBytesToRead) { var endPtr = idx + maxBytesToRead; if (endPtr - idx > 16 && UTF8Decoder) { return UTF8Decoder.decode(new Uint8Array(u8Array.buffer, u8Array.byteOffset + idx, endPtr - idx)); } else { var str = ""; while (idx < endPtr) { var u0 = u8Array[idx++]; if (!(u0 & 128)) { str += String.fromCharCode(u0); continue; } var u1 = u8Array[idx++] & 63; if ((u0 & 224) == 192) { str += String.fromCharCode((u0 & 31) << 6 | u1); continue; } var u2 = u8Array[idx++] & 63; if ((u0 & 240) == 224) { u0 = (u0 & 15) << 12 | u1 << 6 | u2; } else { u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | u8Array[idx++] & 63; } if (u0 < 65536) { str += String.fromCharCode(u0); } else { var ch = u0 - 65536; str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023); } } } return str; } function test_ws_name2() { var str_namedRanges = "[A-Z\u005F\u0080-\u0081\u0083\u0085-\u0087\u0089-\u008A\u008C-\u0091\u0093-\u0094\u0096-\u0097\u0099-\u009A\u009C-\u009F\u00A1-\u00A5\u00A7-\u00A8\u00AA\u00AD\u00AF-\u00BA\u00BC-\u02B8\u02BB-\u02C1\u02C7\u02C9-\u02CB\u02CD\u02D0-\u02D1\u02D8-\u02DB\u02DD\u02E0-\u02E4\u02EE\u0370-\u0373\u0376-\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0523\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0621-\u064A\u066E-\u066F\u0671-\u06D3\u06D5\u06E5-\u06E6\u06EE-\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4-\u07F5\u07FA\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0972\u097B-\u097F\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC-\u09DD\u09DF-\u09E1\u09F0-\u09F1\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0-\u0AE1\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B35-\u0B39\u0B3D\u0B5C-\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58-\u0C59\u0C60-\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0-\u0CE1\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D3D\u0D60-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E3A\u0E40-\u0E4E\u0E81-\u0E82\u0E84\u0E87-\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA-\u0EAB\u0EAD-\u0EB0\u0EB2-\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDD\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8B\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065-\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10D0-\u10FA\u10FC\u1100-\u1159\u115F-\u11A2\u11A8-\u11F9\u1200-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u1676\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19A9\u19C1-\u19C7\u1A00-\u1A16\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE-\u1BAF\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2010\u2013-\u2016\u2018\u201C-\u201D\u2020-\u2021\u2025-\u2027\u2030\u2032-\u2033\u2035\u203B\u2071\u2074\u207F\u2081-\u2084\u2090-\u2094\u2102-\u2103\u2105\u2107\u2109-\u2113\u2115-\u2116\u2119-\u211D\u2121-\u2122\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2153-\u2154\u215B-\u215E\u2160-\u2188\u2190-\u2199\u21D2\u21D4\u2200\u2202-\u2203\u2207-\u2208\u220B\u220F\u2211\u2215\u221A\u221D-\u2220\u2223\u2225\u2227-\u222C\u222E\u2234-\u2237\u223C-\u223D\u2248\u224C\u2252\u2260-\u2261\u2264-\u2267\u226A-\u226B\u226E-\u226F\u2282-\u2283\u2286-\u2287\u2295\u2299\u22A5\u22BF\u2312\u2460-\u24B5\u24D0-\u24E9\u2500-\u254B\u2550-\u2574\u2581-\u258F\u2592-\u2595\u25A0-\u25A1\u25A3-\u25A9\u25B2-\u25B3\u25B6-\u25B7\u25BC-\u25BD\u25C0-\u25C1\u25C6-\u25C8\u25CB\u25CE-\u25D1\u25E2-\u25E5\u25EF\u2605-\u2606\u2609\u260E-\u260F\u261C\u261E\u2640\u2642\u2660-\u2661\u2663-\u2665\u2667-\u266A\u266C-\u266D\u266F\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2C6F\u2C71-\u2C7D\u2C80-\u2CE4\u2D00-\u2D25\u2D30-\u2D65\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3000-\u3003\u3005-\u3017\u301D-\u301F\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31B7\u31F0-\u321C\u3220-\u3229\u3231-\u3232\u3239\u3260-\u327B\u327F\u32A3-\u32A8\u3303\u330D\u3314\u3318\u3322-\u3323\u3326-\u3327\u332B\u3336\u333B\u3349-\u334A\u334D\u3351\u3357\u337B-\u337E\u3380-\u3384\u3388-\u33CA\u33CD-\u33D3\u33D5-\u33D6\u33D8\u33DB-\u33DD\u3400-\u4DB5\u4E00-\u9FC3\uA000-\uA48C\uA500-\uA60C\uA610-\uA61F\uA62A-\uA62B\uA640-\uA65F\uA662-\uA66E\uA680-\uA697\uA722-\uA787\uA78B-\uA78C\uA7FB-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA90A-\uA925\uA930-\uA946\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAC00-\uD7A3\uE000-\uF848\uF900-\uFA2D\uFA30-\uFA6A\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40-\uFB41\uFB43-\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE30-\uFE31\uFE33-\uFE44\uFE49-\uFE52\uFE54-\uFE57\uFE59-\uFE66\uFE68-\uFE6B\uFE70-\uFE74\uFE76-\uFEFC\uFF01-\uFF5E\uFF61-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC\uFFE0-\uFFE6]", str_namedSheetsRange = "\u0001-\u0026\u0028-\u0029\u002B-\u002D\u003B-\u003E\u0040\u005E\u0060\u007B-\u007F\u0082\u0084\u008B\u0092\u0095\u0098\u009B\u00A0\u00A6\u00A9\u00AB-\u00AC\u00AE\u00BB\u0378-\u0379\u037E-\u0383\u0387\u038B\u038D\u03A2\u0524-\u0530\u0557-\u0558\u055A-\u0560\u0588-\u0590\u05BE\u05C0\u05C3\u05C6\u05C8-\u05CF\u05EB-\u05EF\u05F3-\u05FF\u0604-\u0605\u0609-\u060A\u060C-\u060D\u061B-\u061E\u0620\u065F\u066A-\u066D\u06D4\u0700-\u070E\u074B-\u074C\u07B2-\u07BF\u07F7-\u07F9\u07FB-\u0900\u093A-\u093B\u094E-\u094F\u0955-\u0957\u0964-\u0965\u0970\u0973-\u097A\u0980\u0984\u098D-\u098E\u0991-\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA-\u09BB\u09C5-\u09C6\u09C9-\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4-\u09E5\u09FB-\u0A00\u0A04\u0A0B-\u0A0E\u0A11-\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A-\u0A3B\u0A3D\u0A43-\u0A46\u0A49-\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A76-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA-\u0ABB\u0AC6\u0ACA\u0ACE-\u0ACF\u0AD1-\u0ADF\u0AE4-\u0AE5\u0AF0\u0AF2-\u0B00\u0B04\u0B0D-\u0B0E\u0B11-\u0B12\u0B29\u0B31\u0B34\u0B3A-\u0B3B\u0B45-\u0B46\u0B49-\u0B4A\u0B4E-\u0B55\u0B58-\u0B5B\u0B5E\u0B64-\u0B65\u0B72-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE-\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0C00\u0C04\u0C0D\u0C11\u0C29\u0C34\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5A-\u0C5F\u0C64-\u0C65\u0C70-\u0C77\u0C80-\u0C81\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA-\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4-\u0CE5\u0CF0\u0CF3-\u0D01\u0D04\u0D0D\u0D11\u0D29\u0D3A-\u0D3C\u0D45\u0D49\u0D4E-\u0D56\u0D58-\u0D5F\u0D64-\u0D65\u0D76-\u0D78\u0D80-\u0D81\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE-\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DF1\u0DF4-\u0E00\u0E3B-\u0E3E\u0E4F\u0E5A-\u0E80\u0E83\u0E85-\u0E86\u0E89\u0E8B-\u0E8C\u0E8E-\u0E93\u0E98\u0EA0\u0EA4\u0EA6\u0EA8-\u0EA9\u0EAC\u0EBA\u0EBE-\u0EBF\u0EC5\u0EC7\u0ECE-\u0ECF\u0EDA-\u0EDB\u0EDE-\u0EFF\u0F04-\u0F12\u0F3A-\u0F3D\u0F48\u0F6D-\u0F70\u0F85\u0F8C-\u0F8F\u0F98\u0FBD\u0FCD\u0FD0-\u0FFF\u104A-\u104F\u109A-\u109D\u10C6-\u10CF\u10FB\u10FD-\u10FF\u115A-\u115E\u11A3-\u11A7\u11FA-\u11FF\u1249\u124E-\u124F\u1257\u1259\u125E-\u125F\u1289\u128E-\u128F\u12B1\u12B6-\u12B7\u12BF\u12C1\u12C6-\u12C7\u12D7\u1311\u1316-\u1317\u135B-\u135E\u1361-\u1368\u137D-\u137F\u139A-\u139F\u13F5-\u1400\u166D-\u166E\u1677-\u167F\u169B-\u169F\u16EB-\u16ED\u16F1-\u16FF\u170D\u1715-\u171F\u1735-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17D4-\u17D6\u17D8-\u17DA\u17DE-\u17DF\u17EA-\u17EF\u17FA-\u180A\u180F\u181A-\u181F\u1878-\u187F\u18AB-\u18FF\u191D-\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1945\u196E-\u196F\u1975-\u197F\u19AA-\u19AF\u19CA-\u19CF\u19DA-\u19DF\u1A1C-\u1AFF\u1B4C-\u1B4F\u1B5A-\u1B60\u1B7D-\u1B7F\u1BAB-\u1BAD\u1BBA-\u1BFF\u1C38-\u1C3F\u1C4A-\u1C4C\u1C7E-\u1CFF\u1DE7-\u1DFD\u1F16-\u1F17\u1F1E-\u1F1F\u1F46-\u1F47\u1F4E-\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E-\u1F7F\u1FB5\u1FC5\u1FD4-\u1FD5\u1FDC\u1FF0-\u1FF1\u1FF5\u1FFF\u2011-\u2012\u2017\u2019-\u201B\u201E-\u201F\u2022-\u2024\u2031\u2034\u2036-\u203A\u203C-\u2043\u2045-\u2051\u2053-\u205E\u2065-\u2069\u2072-\u2073\u207D-\u207E\u208D-\u208F\u2095-\u209F\u20B6-\u20CF\u20F1-\u20FF\u2150-\u2152\u2189-\u218F\u2329-\u232A\u23E8-\u23FF\u2427-\u243F\u244B-\u245F\u269E-\u269F\u26BD-\u26BF\u26C4-\u2700\u2705\u270A-\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u275F-\u2760\u2768-\u2775\u2795-\u2797\u27B0\u27BF\u27C5-\u27C6\u27CB\u27CD-\u27CF\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC-\u29FD\u2B4D-\u2B4F\u2B55-\u2BFF\u2C2F\u2C5F\u2C70\u2C7E-\u2C7F\u2CEB-\u2CFC\u2CFE-\u2CFF\u2D26-\u2D2F\u2D66-\u2D6E\u2D70-\u2D7F\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E00-\u2E2E\u2E30-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3018-\u301C\u3030\u303D\u3040\u3097-\u3098\u30A0\u3100-\u3104\u312E-\u3130\u318F\u31B8-\u31BF\u31E4-\u31EF\u321F\u3244-\u324F\u32FF\u4DB6-\u4DBF\u9FC4-\u9FFF\uA48D-\uA48F\uA4C7-\uA4FF\uA60D-\uA60F\uA62C-\uA63F\uA660-\uA661\uA673-\uA67B\uA67E\uA698-\uA6FF\uA78D-\uA7FA\uA82C-\uA83F\uA874-\uA87F\uA8C5-\uA8CF\uA8DA-\uA8FF\uA92F\uA954-\uA9FF\uAA37-\uAA3F\uAA4E-\uAA4F\uAA5A-\uABFF\uD7A4-\uD7FF\uFA2E-\uFA2F\uFA6B-\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBB2-\uFBD2\uFD3E-\uFD4F\uFD90-\uFD91\uFDC8-\uFDEF\uFDFE-\uFDFF\uFE10-\uFE1F\uFE27-\uFE2F\uFE32\uFE45-\uFE48\uFE53\uFE58\uFE67\uFE6C-\uFE6F\uFE75\uFEFD-\uFEFE\uFF00\uFF5F-\uFF60\uFFBF-\uFFC1\uFFC8-\uFFC9\uFFD0-\uFFD1\uFFD8-\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFF8\uFFFE-\uFFFF", str_operator = ",\\s-+/^&%<=>", str_excludeCharts = "'*\\[\\]\\:/?"; this.regExp_namedRanges = new RegExp(str_namedRanges, "i"); this.regExp_namedSheetsRange = new RegExp("[" + str_namedSheetsRange + "]", "ig"); // /[-+*\/^&%<=>:]/, this.regExp_strOperator = new RegExp("[" + str_operator + "]", "ig"); this.regExp_strExcludeCharts = new RegExp("[" + str_excludeCharts + "]", "ig"); this.test = function (str) { var ch1 = str.substr(0, 1); this.regExp_strExcludeCharts.lastIndex = 0; this.regExp_namedRanges.lastIndex = 0; this.regExp_namedSheetsRange.lastIndex = 0; this.regExp_strOperator.lastIndex = 0; var validName = this.isValidName(str); if (!validName) { return validName; } if (!this.regExp_namedRanges.test(ch1)) {//если первый символ находится не в str_namedRanges, то однозначно надо экранировать return false; } else { if (this.regExp_namedSheetsRange.test(str) || this.regExp_strOperator.test(str)) {//первый символ допустимый. проверяем всю строку на наличие символов, с которыми необходимо экранировать return false; } //проверка на то, что название листа не совпадает с допустимым адресом ячейки, как в A1 так и RC стилях. var match = str.match(rx_ref); if (match != null) { var m1 = match[1], m2 = match[2]; if (match.length >= 3 && g_oCellAddressUtils.colstrToColnum(m1.substr(0, (m1.length - m2.length))) <= AscCommon.gc_nMaxCol && parseInt(m2) <= AscCommon.gc_nMaxRow) { return false; } } return true; } }; this.isValidName = function (str) { if (str.length >= 32 || str.length === 0) { return undefined; } for (var i = 0; i < str.length; i++) { if(str[i] === "\'" && (i === 0 || i === str.length - 1)) { return undefined; } else if(str[i] === "]" || str[i] === "[" || str[i] === ":" || str[i] === "?" || str[i] === "*" || str[i] === "\\" || str[i] === "/") { return undefined; } } return true; }; return this; } function test_defName() { var nameRangeRE = new RegExp("(^([" + str_namedRanges + "_])([" + str_namedRanges + "_0-9]*)$)", "i"); this.test = function (str) { var match, m1, m2; if ((!nameRangeRE.test(str) && "_xlnm.print_area" !== str) || !rx_r1c1DefError.test(str)) { return false; } match = str.match(rx_ref); if (match != null) { m1 = match[1]; m2 = match[2]; if (match.length >= 3 && g_oCellAddressUtils.colstrToColnum(m1.substr(0, (m1.length - m2.length))) <= AscCommon.gc_nMaxCol && parseInt(m2) <= AscCommon.gc_nMaxRow) { return false; } } return true; }; return this; } function test_rx_protectedRangeName() { var nameRangeRE = new RegExp("(^([" + str_namedRanges + " _])([" + str_namedRanges + " _0-9]*)$)", "i"); this.test = function (str) { return nameRangeRE.test(str); }; } var cStrucTableReservedWords = { all: "#All", data: "#Data", headers: "#Headers", totals: "#Totals", thisrow: "#This Row", at: "@" }; var FormulaTablePartInfo = { all: 1, data: 2, headers: 3, totals: 4, thisRow: 5, columns: 6 }; var cStrucTableLocalColumns = null; var cBoolOrigin = {'t': 'TRUE', 'f': 'FALSE'}; var cBoolLocal = {}; var cErrorOrigin = { "nil": "#NULL!", "div": "#DIV\/0!", "value": "#VALUE!", "ref": "#REF!", "name": "#NAME?", "num": "#NUM!", "na": "#N\/A", "getdata": "#GETTING_DATA", "uf": "#UNSUPPORTED_FUNCTION!", "calc": "#CALC!", "spill": "#SPILL!", "busy": "#BUSY!", }; var cErrorLocal = {}; let cCellFunctionLocal = {}; function build_local_rx(data) { rx_table_local = build_rx_table(data ? data["StructureTables"] : null); rx_bool_local = build_rx_bool((data && data["CONST_TRUE_FALSE"]) || cBoolOrigin); rx_error_local = build_rx_error(data ? data["CONST_ERROR"] : null); rx_cell_func_local = build_rx_cell_func(data ? data["CELL_FUNCTION_INFO_TYPE"] : null); } function build_rx_table(local) { window["AscCommon"].cStrucTableLocalColumns = cStrucTableLocalColumns = ( local ? local : { "h": "Headers", "d": "Data", "a": "All", "tr": "This Row", "t": "Totals" } ); return build_rx_table_cur(); } function build_rx_table_cur() { let loc_all = cStrucTableLocalColumns['a'], loc_headers = cStrucTableLocalColumns['h'], loc_data = cStrucTableLocalColumns['d'], loc_totals = cStrucTableLocalColumns['t'], loc_this_row = cStrucTableLocalColumns['tr'], structured_tables_headata = new XRegExp('(?:\\[\\#' + loc_headers + '\\]\\' + FormulaSeparators.functionArgumentSeparator + '\\[\\#' + loc_data + '\\])'), structured_tables_datals = new XRegExp('(?:\\[\\#' + loc_data + '\\]\\' + FormulaSeparators.functionArgumentSeparator + '\\[\\#' + loc_totals + '\\])'), structured_tables_userColumn = new XRegExp('\\s*\\[{0,1}(?:\'\\[|\'\\]|[^[\\]])+\\]{0,1}\\s*'), structured_tables_reservedColumn = new XRegExp('\\#(?:' + loc_all + '|' + loc_headers + '|' + loc_totals + '|' + loc_data + /*'|' + loc_this_row + */')'), structured_tables_thisRow = new XRegExp('(?:\\#(?:' + loc_this_row +')|(?:\\@))'); //Table4[[#Data];[#Totals]] //Table1[[#Headers],[#Data],[Column1]] //Table4[[#Headers];[Column1]:[Column2]] //Table1[[#Data],[#Totals],[Column1]] //Table4[[#Totals];[Column1]:[Column2]] //Table1[[#All];[Column1]:[Column2]] //Table1[[#Data],[#Totals]] //Table1[[#Headers],[#Data]] //Table1[[#Headers],[#Data],[Column1]:[Column2]] // @ === [#This Row], // Table[@] // Table[@Column1] // Table[@Column1:[Column2]] === Table[@[Column1]:[Column2]] let argsSeparator = FormulaSeparators.functionArgumentSeparator; return XRegExp.build('^(?{{tableName}})\\[(?{{columnName}})?\\]', { "tableName": new XRegExp("^(:?[" + str_namedRanges + "][" + str_namedRanges + "\\d.]*)"), "columnName": XRegExp.build('(?{{hdtcc}})|(?{{reservedColumn}}|{{thisRow}})|(?{{userColumnRange}})|(?{{userColumn}})', { "userColumn": structured_tables_userColumn, "reservedColumn": structured_tables_reservedColumn, "thisRow": structured_tables_thisRow, "userColumnRange": XRegExp.build('\\[(?{{uc}})\\]\\:\\[(?{{uc}})\\]', { "uc": structured_tables_userColumn }), //fixed: added [{{rc}}\\]' + argsSeparator + '\\[{{rc}}\\] for: //Table1[[#Data],[#Totals]] //Table1[[#Headers],[#Data]] // '(?\\[{{rc}}\\]' + argsSeparator + '\\[{{rc}}\\]|\\[{{rc}}\\]|{{hd}}|{{dt}})(?:\\' + argsSeparator + '(?:\\[(?{{uc}})\\])(?:\\:(?:\\[(?{{uc}})\\]))?)?' // last used: '(?(?:\\[{{rc}}\\])?(?:\@)?)(?:(?:\\'+argsSeparator+')?(?:\\\[?(?{{uc}})\\\]?)(?:\\:(?:\\[(?{{uc}})\\]))?)?' "hdtcc": XRegExp.build('(?(?:\\[{{rc}}\\]' + argsSeparator + '\\[{{rc}}\\]|\\[{{rc}}\\]|{{hd}}|{{dt}})|(?:\\[{{tr}}\\])|\@)(?:(?:\\' + argsSeparator + ')?(?:\\[(?{{uc}})\\])(?:\\:(?:\\[(?{{uc}})\\]))?)?' , { "rc": structured_tables_reservedColumn, "hd": structured_tables_headata, "dt": structured_tables_datals, "tr": structured_tables_thisRow, "uc": structured_tables_userColumn }) }) }, 'i'); } function build_rx_bool(local) { var t = cBoolLocal.t = local['t'].toUpperCase(); var f = cBoolLocal.f = local['f'].toUpperCase(); return new RegExp("^(" + t + "|" + f + ")([-+*\\/^&%<=>: ;),}]|$)", "i"); } function build_rx_error(local) { // ToDo переделать на более правильную реализацию. Не особо правильное копирование local = local ? local : { "nil": "#NULL!", "div": "#DIV\/0!", "value": "#VALUE!", "ref": "#REF!", "name": "#NAME\\?", "num": "#NUM!", "na": "#N\/A", "getdata": "#GETTING_DATA", "uf": "#UNSUPPORTED_FUNCTION!", "calc": "#CALC!", "spill": "#SPILL!", "busy": "#BUSY!" }; cErrorLocal['nil'] = local['nil']; cErrorLocal['div'] = local['div']; cErrorLocal['value'] = local['value']; cErrorLocal['ref'] = local['ref']; cErrorLocal['name'] = local['name']; cErrorLocal['num'] = local['num']; cErrorLocal['na'] = local['na']; cErrorLocal['getdata'] = local['getdata']; cErrorLocal['uf'] = local['uf']; cErrorLocal['calc'] = local['calc']; cErrorLocal['spill'] = local['spill']; cErrorLocal['busy'] = local['busy']; return new RegExp("^(" + cErrorLocal["nil"] + "|" + cErrorLocal["div"] + "|" + cErrorLocal["value"] + "|" + cErrorLocal["ref"] + "|" + cErrorLocal["name"] + "|" + cErrorLocal["num"] + "|" + cErrorLocal["na"] + "|" + cErrorLocal["getdata"] + "|" + cErrorLocal["uf"] + "|" + cErrorLocal["calc"] + "|" + cErrorLocal["spill"] + "|" + cErrorLocal["busy"] + ")", "i") } function build_rx_cell_func(local) { // ToDo переделать на более правильную реализацию. Не особо правильное копирование local = local ? local : { "address": "address", "col": "col", "color": "color", "contents": "contents", "filename": "filename", "format": "format", "parentheses": "parentheses", "prefix": "prefix", "protect": "protect", "row": "row", "type": "type", "width": "width" }; cCellFunctionLocal['address'] = local['address'] && local['address'].toLowerCase(); cCellFunctionLocal['col'] = local['col'] && local['col'].toLowerCase(); cCellFunctionLocal['color'] = local['color'] && local['color'].toLowerCase(); cCellFunctionLocal['contents'] = local['contents'] && local['contents'].toLowerCase(); cCellFunctionLocal['filename'] = local['filename'] && local['filename'].toLowerCase(); cCellFunctionLocal['format'] = local['format'] && local['format'].toLowerCase(); cCellFunctionLocal['parentheses'] = local['parentheses'] && local['parentheses'].toLowerCase(); cCellFunctionLocal['prefix'] = local['prefix'] && local['prefix'].toLowerCase(); cCellFunctionLocal['protect'] = local['protect'] && local['protect'].toLowerCase(); cCellFunctionLocal['row'] = local['row'] && local['row'].toLowerCase(); cCellFunctionLocal['type'] = local['type'] && local['type'].toLowerCase(); cCellFunctionLocal['width'] = local['width'] && local['width'].toLowerCase(); return new RegExp("^(" + cCellFunctionLocal["address"] + "|" + cCellFunctionLocal["col"] + "|" + cCellFunctionLocal["color"] + "|" + cCellFunctionLocal["contents"] + "|" + cCellFunctionLocal["filename"] + "|" + cCellFunctionLocal["format"] + "|" + cCellFunctionLocal["parentheses"] + "|" + cCellFunctionLocal["prefix"] + "|" + cCellFunctionLocal["protect"] + cCellFunctionLocal["row"] + cCellFunctionLocal["type"] + cCellFunctionLocal["width"] + ")", "i"); } var PostMessageType = { UploadImage: 0, ExtensionExist: 1 }; var c_oAscServerError = { NoError: 0, Unknown: -1, ReadRequestStream: -3, ChangeDocInfo: -5, 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, ConvertDRM_UNSUPPORTED: -85, ConvertCONVERT_CORRUPTED: -86, ConvertLIBREOFFICE: -87, ConvertPARAMS: -88, ConvertNEED_PARAMS: -89, ConvertDRM: -90, ConvertPASSWORD: -91, ConvertICU: -92, ConvertLIMITS: -93, ConvertTemporaty: -94, ConvertDetect: -95, ConvertDeadLetter: -99, Upload: -100, UploadContentLength: -101, UploadExtension: -102, UploadCountFiles: -103, UploadURL: -104, UploadDocumentContentLength: -105, UploadDocumentExtension: -106, UploadDocumentCountFiles: -107, VKey: -120, VKeyEncrypt: -121, VKeyKeyExpire: -122, VKeyUserCountExceed: -123, Password: -180, ForcedViewMode: -200 }; //todo get from server config var c_oAscImageUploadProp = {//Не все браузеры позволяют получить информацию о файле до загрузки(например ie9), меняя параметры здесь надо поменять аналогичные параметры в web.common MaxFileSize: 25000000, //25 mb SupportedFormats: ["jpg", "jpeg", "jpe", "png", "gif", "bmp", "svg", "tiff", "tif"] }; var c_oAscDocumentUploadProp = { MaxFileSize: 104857600, //100 mb SupportedFormats: ["docx", "doc", "docm", "dot", "dotm", "dotx", "epub", "fodt", "odt", "ott", "rtf", "wps"] }; var c_oAscSpreadsheetUploadProp = { MaxFileSize: 104857600, //100 mb SupportedFormats: ["xlsx", "xlsm", "xls", "ods", "csv", "xltx", "xltm", "xlsb", "xlt", "fods", "ots"] }; var c_oAscTextUploadProp = { MaxFileSize: 25000000, //25 mb SupportedFormats: ["txt", "csv"] }; var c_oAscXmlUploadProp = { MaxFileSize: 25000000, //25 mb SupportedFormats: ["xml"] }; /** * * @param sName * @returns {*} * @constructor */ function GetFileExtension(sName) { var nIndex = sName ? sName.lastIndexOf(".") : -1; if (-1 != nIndex) return sName.substring(nIndex + 1).toLowerCase(); return null; } function GetFileName(sName) { var nIndex = sName ? sName.lastIndexOf(".") : -1; if (-1 != nIndex) return sName.substring(0, nIndex); return null; } function changeFileExtention(sName, sNewExt, opt_lengthLimit) { var sOldExt = GetFileExtension(sName); var nIndexEnd = sOldExt ? sName.length - sOldExt.length - 1 : sName.length; if (opt_lengthLimit && nIndexEnd + sNewExt.length + 1 > opt_lengthLimit) { nIndexEnd = opt_lengthLimit - sNewExt.length - 1; } if (nIndexEnd < sName.length) { return sName.substring(0, nIndexEnd) + '.' + sNewExt; } else { return sName + '.' + sNewExt; } } function getExtentionByFormat(format) { switch (format) { case c_oAscFileType.PDF: case c_oAscFileType.PDFA: return 'pdf'; break; case c_oAscFileType.HTML: return 'html'; break; // Word case c_oAscFileType.DOCX: return 'docx'; break; case c_oAscFileType.DOC: return 'doc'; break; case c_oAscFileType.ODT: return 'odt'; break; case c_oAscFileType.RTF: return 'rtf'; break; case c_oAscFileType.TXT: return 'txt'; break; case c_oAscFileType.MHT: return 'mht'; break; case c_oAscFileType.EPUB: return 'epub'; break; case c_oAscFileType.FB2: return 'fb2'; break; case c_oAscFileType.MOBI: return 'mobi'; break; case c_oAscFileType.DOCM: return 'docm'; break; case c_oAscFileType.DOTX: return 'dotx'; break; case c_oAscFileType.DOTM: return 'dotm'; break; case c_oAscFileType.FODT: return 'fodt'; break; case c_oAscFileType.OTT: return 'ott'; break; case c_oAscFileType.DOC_FLAT: return 'doc'; break; case c_oAscFileType.DOCX_FLAT: return 'docx'; break; case c_oAscFileType.HTML_IN_CONTAINER: return 'zip'; break; case c_oAscFileType.DOCX_PACKAGE: return 'xml'; break; case c_oAscFileType.OFORM: return 'oform'; break; case c_oAscFileType.DOCXF: return 'docxf'; break; case c_oAscFileType.DOCY: return 'doct'; break; case c_oAscFileType.CANVAS_WORD: return 'bin'; break; case c_oAscFileType.JSON: return 'json'; break; // Excel case c_oAscFileType.XLSX: return 'xlsx'; break; case c_oAscFileType.XLS: return 'xls'; break; case c_oAscFileType.ODS: return 'ods'; break; case c_oAscFileType.CSV: return 'csv'; break; case c_oAscFileType.XLSM: return 'xlsm'; break; case c_oAscFileType.XLTX: return 'xltx'; break; case c_oAscFileType.XLTM: return 'xltm'; break; case c_oAscFileType.XLSB: return 'xlsb'; break; case c_oAscFileType.FODS: return 'fods'; break; case c_oAscFileType.OTS: return 'ots'; break; case c_oAscFileType.XLSY: return 'xlst'; break; // PowerPoint case c_oAscFileType.PPTX: return 'pptx'; break; case c_oAscFileType.PPT: return 'ppt'; break; case c_oAscFileType.ODP: return 'odp'; break; case c_oAscFileType.PPSX: return 'ppsx'; break; case c_oAscFileType.PPTM: return 'pptm'; break; case c_oAscFileType.PPSM: return 'ppsm'; break; case c_oAscFileType.POTX: return 'potx'; break; case c_oAscFileType.POTM: return 'potm'; break; case c_oAscFileType.FODP: return 'fodp'; break; case c_oAscFileType.OTP: return 'otp'; break; case c_oAscFileType.VSDX: return 'vsdx'; break; case c_oAscFileType.VSSX: return 'vssx'; break; case c_oAscFileType.VSTX: return 'vstx'; break; case c_oAscFileType.VSDM: return 'vsdm'; break; case c_oAscFileType.VSSM: return 'vssm'; break; case c_oAscFileType.VSTM: return 'vstm'; break; case c_oAscFileType.IMG: return 'zip'; break; case c_oAscFileType.JPG: return 'jpg'; break; case c_oAscFileType.TIFF: return 'tiff'; break; case c_oAscFileType.TGA: return 'tga'; break; case c_oAscFileType.GIF: return 'gif'; break; case c_oAscFileType.PNG: return 'png'; break; case c_oAscFileType.EMF: return 'emf'; break; case c_oAscFileType.WMF: return 'wmf'; break; case c_oAscFileType.BMP: return 'bmp'; break; case c_oAscFileType.CR2: return 'cr2'; break; case c_oAscFileType.PCX: return 'pcx'; break; case c_oAscFileType.RAS: return 'ras'; break; case c_oAscFileType.PSD: return 'psd'; break; case c_oAscFileType.ICO: return 'ico'; break; } return ''; } function getFormatByExtention(ext) { switch (ext.toLowerCase()) { case 'docx': return c_oAscFileType.DOCX; case 'doc': case 'wps': return c_oAscFileType.DOC; case 'odt': return c_oAscFileType.ODT; case 'rtf': return c_oAscFileType.RTF; case 'txt': case 'xml': case 'xslt': return c_oAscFileType.TXT; case 'htm': case 'html': return c_oAscFileType.HTML; case 'mht': case 'mhtml': return c_oAscFileType.MHT; case 'epub': return c_oAscFileType.MHT; case 'fb2': return c_oAscFileType.FB2; case 'mobi': return c_oAscFileType.MOBI; case 'docm': return c_oAscFileType.DOCM; case 'dotx': return c_oAscFileType.DOTX; case 'dotm': return c_oAscFileType.DOTM; case 'fodt': return c_oAscFileType.FODT; case 'ott': return c_oAscFileType.OTT; case 'oform': return c_oAscFileType.OFORM; case 'docxf': return c_oAscFileType.DOCXF; case 'pptx': return c_oAscFileType.PPTX; case 'ppt': case 'dps': return c_oAscFileType.PPT; case 'odp': return c_oAscFileType.ODP; case 'ppsx': return c_oAscFileType.PPSX; case 'pptm': return c_oAscFileType.PPTM; case 'ppsm': return c_oAscFileType.PPSM; case 'potx': return c_oAscFileType.POTX; case 'potm': return c_oAscFileType.POTM; case 'fodp': return c_oAscFileType.FODP; case 'otp': return c_oAscFileType.OTP; case 'vsdx': return c_oAscFileType.VSDX; case 'vssx': return c_oAscFileType.VSSX; case 'vstx': return c_oAscFileType.VSTX; case 'vsdm': return c_oAscFileType.VSDM; case 'vssm': return c_oAscFileType.VSSM; case 'vstm': return c_oAscFileType.VSTM; case 'xlsx': return c_oAscFileType.XLSX; case 'xls': case 'et': return c_oAscFileType.XLS; case 'ods': return c_oAscFileType.ODS; case 'csv': return c_oAscFileType.CSV; case 'xlsm': return c_oAscFileType.XLSM; case 'xltx': return c_oAscFileType.XLTX; case 'xltm': return c_oAscFileType.XLTM; case 'xltb': return c_oAscFileType.XLSB; case 'fods': return c_oAscFileType.FODS; case 'ots': return c_oAscFileType.OTS; case 'jpeg': case 'jpe': case 'jpg': return c_oAscFileType.JPG; case 'tif': case 'tiff': return c_oAscFileType.TIFF; case 'tga': return c_oAscFileType.TGA; case 'gif': return c_oAscFileType.GIF; case 'png': return c_oAscFileType.PNG; case 'emf': return c_oAscFileType.EMF; case 'wmf': return c_oAscFileType.WMF; case 'bmp': return c_oAscFileType.BMP; case 'cr2': return c_oAscFileType.CR2; case 'pcx': return c_oAscFileType.PCX; case 'ras': return c_oAscFileType.RAS; case 'psd': return c_oAscFileType.PSD; case 'ico': return c_oAscFileType.ICO; case 'pdf': return c_oAscFileType.PDF; case 'pdfa': return c_oAscFileType.PDFA; case 'djvu': return c_oAscFileType.DJVU; case 'xps': return c_oAscFileType.XPS; case 'doct': return c_oAscFileType.DOCY; case 'xlst': return c_oAscFileType.XLSY; case 'pptt': return c_oAscFileType.PPTY; case 'vsdt': return c_oAscFileType.VSDY; } return c_oAscFileType.UNKNOWN; } function InitOnMessage(callback) { if (window.addEventListener) { window.addEventListener("message", function (event) { if (null != event && null != event.data) { try { var data = JSON.parse(event.data); if (null != data && null != data["type"] && PostMessageType.UploadImage == data["type"]) { if (c_oAscServerError.NoError == data["error"]) { var urls = data["urls"]; if (urls) { g_oDocumentUrls.addUrls(urls); var firstUrl; for (var i in urls) { if (urls.hasOwnProperty(i)) { firstUrl = urls[i]; break; } } callback(Asc.c_oAscError.ID.No, firstUrl); } } else callback(mapAscServerErrorToAscError(data["error"])); } else if (data["type"] === "onExternalPluginMessage") { if (!window.g_asc_plugins) return; if (!window.g_asc_plugins.api.licenseResult || !window.g_asc_plugins.api.licenseResult['advancedApi']) return; if (data["subType"] === "connector") { window.g_asc_plugins.externalConnectorMessage(data["data"], event.origin); return; } window.g_asc_plugins.sendToAllPlugins(event.data); } else if (data["type"] === "onExternalPluginMessageCallback") { if (!window.g_asc_plugins) return; window.parent && window.parent.postMessage(event.data, "*"); } else if (data["type"] === "emulateUploadInFrame") { if (window["_private_emulate_upload"]) { window["_private_emulate_upload"](data["name"], data["content"]); window["_private_emulate_upload"] = undefined; } } } catch (err) { } } }, false); } } function getAcceptByArray(arr){ var res = '.' + arr[0]; for (var i = 1; i < arr.length; ++i) { res += ',.' + arr[i]; } return res; } function _ShowFileDialog(accept, allowEncryption, allowMultiple, fValidate, callback) { if (AscCommon.AscBrowser.isNeedEmulateUpload && window["emulateUpload"]) { window["emulateUpload"](function(name, content) { if (content === "") { callback(Asc.c_oAscError.ID.Unknown); return; } var stream = AscFonts.CreateFontData2(content); var blob = new Blob([stream.data.slice(0, stream.size)]); blob.name = name; blob.fileName = name; var nError = fValidate([blob]); callback(mapAscServerErrorToAscError(nError), [blob]); }, ":