/*
* (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 = "";
}
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]);
}, ":