Files
sdkjs/Excel/api.js
Dmitry.Vikulov 821a12052d Селект граф.объектов при СР
git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@48931 954022d7-b5bf-4e40-9824-e11837661b57
2016-05-18 17:36:35 +03:00

3239 lines
129 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/** @define {boolean} */
var ASC_DOCS_API_LOAD_COAUTHORING_SETTINGS = true;
/** @define {boolean} */
var ASC_SPREADSHEET_API_CO_AUTHORING_ENABLE = true;
var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
(
/**
* @param {jQuery} $
* @param {Window} window
* @param {undefined} undefined
*/
function ($, window, undefined) {
var asc = window["Asc"];
var asc_CCollaborativeEditing = asc.CCollaborativeEditing;
var asc_CAdjustPrint = asc.asc_CAdjustPrint;
var asc_user = asc.asc_CUser;
var asc_CAscEditorPermissions = asc.asc_CAscEditorPermissions;
var prot;
function spreadsheet_api(name, inputName, eventsController, eventsHandlers, options) {
/************ private!!! **************/
this.HtmlElementName = name;
this.topLineEditorName = inputName;
if ("function" === typeof(eventsController)) {
var prot = eventsController.prototype;
prot.init = prot["init"];
prot.destroy = prot["destroy"];
prot.enableKeyEventsHandler = prot["enableKeyEventsHandler"];
prot.reinitializeScroll = prot["reinitializeScroll"];
prot.scrollVertical = prot["scrollVertical"];
prot.scrollHorizontal = prot["scrollHorizontal"];
this.controller = new eventsController();
} else {
this.controller = new asc.asc_CEventsController();
}
this.handlers = new asc.asc_CHandlersList(eventsHandlers);
this.options = options;
// Вид печати
this.adjustPrint = null;
// Рассчитанные данные для печати
this.printPagesData = null;
this.isMobileVersion = false;
this.fontRenderingMode = c_oAscFontRenderingModeType.noHinting;
this.wb = null;
this.wbModel = null;
this.FontLoader = window.g_font_loader;
this.FontLoader.put_Api(this);
this.FontLoader.SetStandartFonts();
this.LoadedObject = null;
this.DocumentType = 0; // 0 - empty, 1 - test, 2 - document (from json)
this.DocumentName = "";
this.documentId = undefined;
this.documentUrl = "null";
this.documentTitle = "null";
this.documentTitleWithoutExtention = "null";
this.documentFormat = "null";
this.documentVKey = null;
this.documentOrigin = "";
this.cCharDelimiter = String.fromCharCode(5);
this.chartEditor = undefined;
this.documentOpenOptions = undefined; // Опции при открытии (пока только опции для CSV)
this.DocInfo = null;
// объекты, нужные для отправки в тулбар (шрифты, стили)
this.guiFonts = null; // Переменная для сохранения фонтов для облегченной версии (переход в edit mod)
this.guiStyles = null; // Переменная для сохранения стилей ячеек
this._gui_control_colors = null;
this._gui_color_schemes = null;
this.GuiControlColorsMap = null;
this.IsSendStandartColors = false;
this.tablePictures = null;
this.asyncMethodCallback = undefined;
this.ScriptLoader = window.g_script_loader;
// Тип состояния на данный момент (сохранение, открытие или никакое)
this.advancedOptionsAction = c_oAscAdvancedOptionsAction.None;
// Переменная отвечает, загрузились ли фонты
this.FontLoadWaitComplete = false;
// Переменная отвечает, получили ли мы ответ с сервера совместного редактирования
this.ServerIdWaitComplete = false;
// Переменная отвечает, отрисовали ли мы все (иначе при рестарте, получится переинициализация)
this.DocumentLoadComplete = false;
// Переменная, которая хранит пришедшие изменения при открытии
this.FirstLoadChanges = null;
// Переменная, которая отвечает, послали ли мы окончание открытия документа
this.IsSendDocumentLoadCompleate = false;
// CoAuthoring and Chat
this.User = undefined;
this.CoAuthoringApi = new CDocsCoApi();
this.collaborativeEditing = null;
this.isCoAuthoringEnable = true;
// AutoSave
this.autoSaveGap = 0; // Интервал автосохранения (0 - означает, что автосохранения нет) в милесекундах
this.autoSaveTimeOutId = null; // Идентификатор таймаута
this.isAutoSave = false; // Флаг, означает что запущено автосохранение
this.autoSaveGapAsk = 5000; // Константа для повторного запуска автосохранения, если не смогли сделать сразу lock (только при автосохранении) в милесекундах
this.canSave = true; //Флаг нужен чтобы не происходило сохранение пока не завершится предыдущее сохранение
// Режим вставки диаграмм в редакторе документов
this.isChartEditor = false;
this.chartStyleManager = new ChartStyleManager();
this.chartPreviewManager = new ChartPreviewManager();
// Shapes
this.isStartAddShape = false;
this.addShapePreset = "";
this.ImageLoader = window.g_image_loader;
this.ImageLoader.put_Api(this);
this.shapeElementId = null;
this.isImageChangeUrl = false;
this.isShapeImageChangeUrl = false;
//находится ли фокус в рабочей области редактора(используется для copy/paste в MAC)
this.IsFocus = null;
/**************************************/
this.OpenDocumentProgress = {
Type: c_oAscAsyncAction.Open,
FontsCount: 0,
CurrentFont: 0,
ImagesCount: 0,
CurrentImage: 0
};
// На этапе сборки значение переменной ASC_DOCS_API_USE_EMBEDDED_FONTS может менятся.
// По дефолту встроенные шрифты использоваться не будут, как и при любом значении
// ASC_DOCS_API_USE_EMBEDDED_FONTS, кроме "true"(написание от регистра не зависит).
// Использовать ли обрезанные шрифты
this.isUseEmbeddedCutFonts = ("true" == ASC_DOCS_API_USE_EMBEDDED_FONTS.toLowerCase());
}
spreadsheet_api.prototype = {
asc_CheckGuiControlColors : function() {
// потом реализовать проверку на то, что нужно ли посылать
var _theme = this.wbModel.theme;
var arr_colors = new Array(10);
var _count = arr_colors.length;
for (var i = 0; i < _count; ++i)
{
var color = g_oColorManager.getThemeColor(i);
arr_colors[i] = new CColor(color.getR(), color.getG(), color.getB());
}
// теперь проверим
var bIsSend = false;
if (this.GuiControlColorsMap != null)
{
for (var i = 0; i < _count; ++i)
{
var _color1 = this.GuiControlColorsMap[i];
var _color2 = arr_colors[i];
if ((_color1.r !== _color2.r) || (_color1.g !== _color2.g) || (_color1.b !== _color2.b))
{
bIsSend = true;
break;
}
}
}
else
{
this.GuiControlColorsMap = new Array(_count);
bIsSend = true;
}
if (bIsSend)
{
for (var i = 0; i < _count; ++i)
{
this.GuiControlColorsMap[i] = arr_colors[i];
}
this.asc_SendControlColors();
}
},
asc_SendControlColors : function() {
var standart_colors = null;
if (!this.IsSendStandartColors)
{
var _c_s = g_oStandartColors.length;
standart_colors = new Array(_c_s);
for (var i = 0; i < _c_s; ++i)
{
standart_colors[i] = new CColor(g_oStandartColors[i]["R"], g_oStandartColors[i]["G"], g_oStandartColors[i]["B"]);
}
this.IsSendStandartColors = true;
}
var _count = this.GuiControlColorsMap.length;
var _ret_array = new Array(_count * 6);
var _cur_index = 0;
for (var i = 0; i < _count; ++i)
{
for(var j = 0, length = g_oThemeColorTint[i].length; j < length; ++j)
{
var tint = g_oThemeColorTint[i][j];
var color = g_oColorManager.getThemeColor(i, tint);
_ret_array[_cur_index] = new CColor(color.getR(), color.getG(), color.getB());
_cur_index++;
}
}
this.asc_SendThemeColors(_ret_array, standart_colors);
},
asc_SendThemeColorScheme : function() {
var infos = new Array();
var _index = 0;
var _c = null;
// user scheme
var _count_defaults = g_oUserColorScheme.length;
for (var i = 0; i < _count_defaults; ++i)
{
var _obj = g_oUserColorScheme[i];
infos[_index] = new CAscColorScheme();
infos[_index].Name = _obj["name"];
_c = _obj["dk1"];
infos[_index].Colors[0] = new CColor(_c["R"], _c["G"], _c["B"]);
_c = _obj["lt1"];
infos[_index].Colors[1] = new CColor(_c["R"], _c["G"], _c["B"]);
_c = _obj["dk2"];
infos[_index].Colors[2] = new CColor(_c["R"], _c["G"], _c["B"]);
_c = _obj["lt2"];
infos[_index].Colors[3] = new CColor(_c["R"], _c["G"], _c["B"]);
_c = _obj["accent1"];
infos[_index].Colors[4] = new CColor(_c["R"], _c["G"], _c["B"]);
_c = _obj["accent2"];
infos[_index].Colors[5] = new CColor(_c["R"], _c["G"], _c["B"]);
_c = _obj["accent3"];
infos[_index].Colors[6] = new CColor(_c["R"], _c["G"], _c["B"]);
_c = _obj["accent4"];
infos[_index].Colors[7] = new CColor(_c["R"], _c["G"], _c["B"]);
_c = _obj["accent5"];
infos[_index].Colors[8] = new CColor(_c["R"], _c["G"], _c["B"]);
_c = _obj["accent6"];
infos[_index].Colors[9] = new CColor(_c["R"], _c["G"], _c["B"]);
_c = _obj["hlink"];
infos[_index].Colors[10] = new CColor(_c["R"], _c["G"], _c["B"]);
_c = _obj["folHlink"];
infos[_index].Colors[11] = new CColor(_c["R"], _c["G"], _c["B"]);
++_index;
}
// theme colors
var _theme = this.wbModel.theme;
var _extra = _theme.extraClrSchemeLst;
var _count = _extra.length;
var _rgba = {R:0, G: 0, B: 0, A: 255};
for (var i = 0; i < _count; ++i)
{
var _scheme = _extra[i].clrScheme;
infos[_index] = new CAscColorScheme();
infos[_index].Name = _scheme.name;
_scheme.colors[8].Calculate(_theme, null, null, null, _rgba);
_c = _scheme.colors[8].RGBA;
infos[_index].Colors[0] = new CColor(_c.R, _c.G, _c.B);
_scheme.colors[12].Calculate(_theme, null, null, null, _rgba);
_c = _scheme.colors[12].RGBA;
infos[_index].Colors[1] = new CColor(_c.R, _c.G, _c.B);
_scheme.colors[9].Calculate(_theme, null, null, null, _rgba);
_c = _scheme.colors[9].RGBA;
infos[_index].Colors[2] = new CColor(_c.R, _c.G, _c.B);
_scheme.colors[13].Calculate(_theme, null, null, null, _rgba);
_c = _scheme.colors[13].RGBA;
infos[_index].Colors[3] = new CColor(_c.R, _c.G, _c.B);
_scheme.colors[0].Calculate(_theme, null, null, null, _rgba);
_c = _scheme.colors[0].RGBA;
infos[_index].Colors[4] = new CColor(_c.R, _c.G, _c.B);
_scheme.colors[1].Calculate(_theme, null, null, null, _rgba);
_c = _scheme.colors[1].RGBA;
infos[_index].Colors[5] = new CColor(_c.R, _c.G, _c.B);
_scheme.colors[2].Calculate(_theme, null, null, null, _rgba);
_c = _scheme.colors[2].RGBA;
infos[_index].Colors[6] = new CColor(_c.R, _c.G, _c.B);
_scheme.colors[3].Calculate(_theme, null, null, null, _rgba);
_c = _scheme.colors[3].RGBA;
infos[_index].Colors[7] = new CColor(_c.R, _c.G, _c.B);
_scheme.colors[4].Calculate(_theme, null, null, null, _rgba);
_c = _scheme.colors[4].RGBA;
infos[_index].Colors[8] = new CColor(_c.R, _c.G, _c.B);
_scheme.colors[5].Calculate(_theme, null, null, null, _rgba);
_c = _scheme.colors[5].RGBA;
infos[_index].Colors[9] = new CColor(_c.R, _c.G, _c.B);
_scheme.colors[11].Calculate(_theme, null, null, null, _rgba);
_c = _scheme.colors[11].RGBA;
infos[_index].Colors[10] = new CColor(_c.R, _c.G, _c.B);
_scheme.colors[10].Calculate(_theme, null, null, null, _rgba);
_c = _scheme.colors[10].RGBA;
infos[_index].Colors[11] = new CColor(_c.R, _c.G, _c.B);
_index++;
}
this.asc_SendThemeColorSchemes(infos);
},
asc_Init: function(fontsPath) {
var t = this;
asc["editor"] = ( asc["editor"] || t );
t.FontLoader.fontFilesPath = fontsPath;
t.asc_registerCallback("loadFonts", function (fonts, callback){t._loadFonts(fonts, callback);});
},
asc_setDocInfo: function (c_DocInfo) {
if(c_DocInfo)
this.DocInfo = c_DocInfo;
},
asc_LoadDocument: function (c_DocInfo) {
var t = this;
this.asc_setDocInfo(c_DocInfo);
if(this.DocInfo){
this.documentId = this.DocInfo["Id"];
this.documentUrl = this.DocInfo["Url"];
this.documentTitle = this.DocInfo["Title"];
this.documentFormat = this.DocInfo["Format"];
this.documentVKey = this.DocInfo["VKey"];
this.documentOrigin = this.DocInfo["Origin"];
this.chartEditor = this.DocInfo["ChartEditor"];
this.documentOpenOptions = this.DocInfo["Options"];
var nIndex = -1;
if(this.documentTitle)
nIndex = this.documentTitle.lastIndexOf(".");
if(-1 != nIndex)
this.documentTitleWithoutExtention = this.documentTitle.substring(0, nIndex);
else
this.documentTitleWithoutExtention = this.documentTitle;
// Выставляем пользователя
this.User = new asc_user();
this.User.asc_setId(this.DocInfo["UserId"]);
this.User.asc_setUserName(this.DocInfo["UserName"]);
//Взято из редактора документов
var sProtocol = window.location.protocol;
var sHost = window.location.host;
this.documentOrigin = "";
if(sProtocol && sProtocol.length > 0)
this.documentOrigin = sProtocol + "//" + sHost;
else
this.documentOrigin = sHost;
}
if (this.DocInfo["OfflineApp"] && (true == this.DocInfo["OfflineApp"])) {
this.isCoAuthoringEnable = false;
window['scriptBridge'] = {};
this.offlineModeInit();
this.offlineModeLoadDocument();
return;
}
this.asc_StartAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.Open);
if ( !this.chartEditor )
this._asc_open(function (response) {t._startOpenDocument(response);});
},
asc_LoadEmptyDocument: function () {
var emptyWorkbook = getEmptyWorkbook() + "";
if ( emptyWorkbook.length && (c_oSerFormat.Signature === emptyWorkbook.substring(0, c_oSerFormat.Signature.length)) ) {
this.isChartEditor = true;
var wb = new Workbook("", this.handlers, this);
wb.initGlobalObjects();
this.wbModel = wb;
var oBinaryFileReader = new BinaryFileReader("");
oBinaryFileReader.Read(emptyWorkbook, wb);
this._startOpenDocument({returnCode: 0, val:wb});
}
},
asc_getEditorPermissions : function(){
if (this.DocInfo &&
this.DocInfo["Id"] &&
this.DocInfo["Url"])
{
var t = this;
var v = {};
v["c"] = "getsettings";
v["format"] = this.DocInfo["Format"];
v["vkey"] = this.DocInfo["VKey"];
v["editorid"] = c_oEditorId.Excel;
this._asc_sendCommand(function (response) {t._onGetEditorPermissions(response);}, JSON.stringify(v));
}
else
{
this.handlers.trigger("asc_onGetEditorPermissions", new asc_CAscEditorPermissions());
}
},
asc_DownloadAs : function(typeFile){//передаем число соответствующее своему формату. например c_oAscFileType.XLSX
if (undefined != window['appBridge']) {
window['appBridge']['dummyCommandDownloadAs'] (); // TEST
return;
}
this.asc_StartAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.DownloadAs);
var that = this;
// Меняем тип состояния (на сохранение)
this.advancedOptionsAction = c_oAscAdvancedOptionsAction.Save;
this._asc_downloadAs(typeFile, function(incomeObject){
if(null != incomeObject && "save" == incomeObject.type)
that.asc_processSavedFile(incomeObject.data, false);
// Меняем тип состояния (на никакое)
that.advancedOptionsAction = c_oAscAdvancedOptionsAction.None;
that.asc_EndAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.DownloadAs);
}, true);
},
asc_Save : function (isAutoSave) {
if (undefined != window['appBridge']) {
window['appBridge']['dummyCommandSave'] (); // TEST
return;
}
if (!this.canSave || this.isChartEditor)
return;
// Не даем пользователю сохранять, пока не закончится сохранение
this.canSave = false;
this.isAutoSave = !!isAutoSave;
if (!this.isAutoSave) {
this.asc_StartAction(c_oAscAsyncActionType.Information, c_oAscAsyncAction.Save);
this.asc_StartAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.PrepareToSave);
}
// Нужно закрыть редактор
this.asc_closeCellEditor();
var t = this;
this.CoAuthoringApi.askSaveChanges (function (e) { t.onSaveCallback (e); });
},
asc_OnSaveEnd : function (isDocumentSaved) {
this.canSave = true;
this.isAutoSave = false;
this.asc_EndAction(c_oAscAsyncActionType.Information, c_oAscAsyncAction.Save);
this.CoAuthoringApi.unSaveChanges();
if (isDocumentSaved) {
// Запускаем таймер автосохранения
this.autoSaveInit();
} else {
this.CoAuthoringApi.disconnect();
}
},
asc_Print: function(adjustPrint){
if (adjustPrint)
this.adjustPrint = adjustPrint;
else {
this.adjustPrint = new asc_CAdjustPrint();
}
if (undefined != window['appBridge']) {
this.advancedOptionsAction = c_oAscAdvancedOptionsAction.Save;
window['appBridge']['dummyCommandPrint'] ();
this.advancedOptionsAction = c_oAscAdvancedOptionsAction.None;
return;
}
this.asc_DownloadAs(c_oAscFileType.PDFPRINT);
},
asc_Copy:function(){
var result = this.wb.copyToClipboardButton();
this.wb.restoreFocus();
return result;
},
asc_Paste:function(){
var result = this.wb.pasteFromClipboardButton();
this.wb.restoreFocus();
return result;
},
asc_Cut:function(){
var result = this.wb.cutToClipboardButton();
this.wb.restoreFocus();
return result;
},
asc_Undo: function(){
this.wb.undo();
this.wb.restoreFocus();
},
asc_Redo: function(){
this.wb.redo();
this.wb.restoreFocus();
},
asc_Resize: function(){
if (this.wb)
this.wb.resize();
},
asc_addAutoFilter: function(lTable, addFormatTableOptionsObj){
var ws = this.wb.getWorksheet();
return ws.addAutoFilter(lTable, addFormatTableOptionsObj);
},
asc_applyAutoFilter: function(type,autoFilterObject){
var ws = this.wb.getWorksheet();
ws.applyAutoFilter(type,autoFilterObject);
},
asc_sortColFilter: function(type,cellId) {
var ws = this.wb.getWorksheet();
ws.sortColFilter(type,cellId);
},
asc_getAddFormatTableOptions: function () {
var ws = this.wb.getWorksheet();
return ws.getAddFormatTableOptions();
},
// Выставление интервала автосохранения (0 - означает, что автосохранения нет)
asc_setAutoSaveGap: function (autoSaveGap) {
if (typeof autoSaveGap === "number") {
this.autoSaveGap = autoSaveGap * 1000; // Нам выставляют в секундах
this.autoSaveInit();
}
},
asc_setMobileVersion: function (isMobile){
this.isMobileVersion = isMobile;
this.options = (this.options || {});
this.options.worksheetDefaults = (this.options.worksheetDefaults || {});
this.options.worksheetDefaults.isMobile = isMobile;
window.g_isMobileVersion = isMobile;
},
asc_getViewerMode: function () {
return this.controller.getViewerMode ? this.controller.getViewerMode() : true;
},
asc_setViewerMode: function (isViewerMode) {
// Для совместного редактирования важен переход из режима просмотра в режим редактирования
if (true === this.ServerIdWaitComplete && true === this.FontLoadWaitComplete) {
this.CoAuthoringApi.set_isViewerMode(!!isViewerMode);
}
if (this.controller.setViewerMode) {
this.controller.setViewerMode(isViewerMode);
if (false === isViewerMode) {
// Загружаем не обрезанные шрифты для полной версии (при редактировании)
if (this.FontLoader.embedded_cut_manager.bIsCutFontsUse) {
this.FontLoader.embedded_cut_manager.bIsCutFontsUse = false;
this.asyncMethodCallback = function () {};
var fonts = $.map(this.wbModel.generateFontMap(), function (fname) {return new CFont(fname, 0, "", 0);});
this.FontLoader.LoadDocumentFonts(fonts);
}
this.isUseEmbeddedCutFonts = false;
// Отправка стилей
this._sendWorkbookStyles();
}
}
},
asc_setUseEmbeddedCutFonts: function (bUse) {
this.isUseEmbeddedCutFonts = bUse;
},
asc_setCoAuthoringEnable: function (isCoAuthoringEnable) {
this.isCoAuthoringEnable = !!isCoAuthoringEnable;
},
/*
idOption идентификатор дополнительного параметра, пока c_oAscAdvancedOptionsID.CSV.
option - какие свойства применить, пока массив. для CSV объект asc_CCSVAdvancedOptions(codepage, delimiter)
exp: asc_setAdvancedOptions(c_oAscAdvancedOptionsID.CSV, new Asc.asc_CCSVAdvancedOptions(1200, c_oAscCsvDelimiter.Comma) );
*/
asc_setAdvancedOptions:function(idOption,option){
var t = this;
switch(idOption){
case c_oAscAdvancedOptionsID.CSV:
// Проверяем тип состояния в данный момент
if (this.advancedOptionsAction === c_oAscAdvancedOptionsAction.Open) {
var v = {"id":this.documentId, "format": this.documentFormat, "vkey": this.documentVKey, "editorid": c_oEditorId.Speadsheet, "c":"reopen", "url": this.documentUrl, "title": this.documentTitle, "embeddedfonts": this.isUseEmbeddedCutFonts, "delimiter": option.asc_getDelimiter(), "codepage": option.asc_getCodePage()};
this._asc_sendCommand(function (response) {t._startOpenDocument(response);}, JSON.stringify(v));
} else if (this.advancedOptionsAction === c_oAscAdvancedOptionsAction.Save)
this._asc_downloadAs(c_oAscFileType.CSV, function(incomeObject){
if(null != incomeObject && "save" == incomeObject.type)
t.asc_processSavedFile(incomeObject.data, false);
// Меняем тип состояния (на никакое)
t.advancedOptionsAction = c_oAscAdvancedOptionsAction.None;
t.asc_EndAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.DownloadAs);
}, true, option);
break;
}
},
asc_processSavedFile: function(url, bInner)
{
if(bInner)
this.handlers.trigger("asc_onSaveUrl", url, function(hasError){});
else
{
if( this.isMobileVersion )
window.open("../Common/MobileDownloader/download.html?file="+encodeURIComponent(url),"_parent","",false);
else
getFile(url);
}
},
// Опции страницы (для печати)
asc_setPageOptions: function (options, index) {
var sheetIndex = (undefined !== index && null !== index) ? index : this.wbModel.getActive();
this.wbModel.getWorksheet(sheetIndex).PagePrintOptions = options;
},
asc_getPageOptions: function (index) {
var sheetIndex = (undefined !== index && null !== index) ? index : this.wbModel.getActive();
return this.wbModel.getWorksheet(sheetIndex).PagePrintOptions;
},
_asc_sendCommand: function (callback, rdata) {
var oThis = this;
$.ajax({
type: 'POST',
url: g_sMainServiceLocalUrl,
data: rdata,
error: function(jqXHR, textStatus, errorThrown){
var result = {returnCode: c_oAscError.Level.Critical, val:c_oAscError.ID.Unknown};
oThis.handlers.trigger("asc_onError", c_oAscError.ID.Unknown, c_oAscError.Level.Critical);
if(callback)
callback(result);
},
success: function(msg){
var result;
if(!msg || msg.length < 1){
result = {returnCode: c_oAscError.Level.Critical, val:c_oAscError.ID.Unknown};
oThis.handlers.trigger("asc_onError", c_oAscError.ID.Unknown, c_oAscError.Level.Critical);
if(callback)
callback(result);
return;
}
else{
var incomeObject = JSON.parse(msg);
switch( incomeObject.type ){
case "open":
var sJsonUrl = g_sResourceServiceLocalUrl + incomeObject.data;
asc_ajax({
url: sJsonUrl,
dataType: "text",
success: function(result, textStatus) {
//получаем url к папке с файлом
var url;
var nIndex = sJsonUrl.lastIndexOf("/");
if(-1 !== nIndex)
url = sJsonUrl.substring(0, nIndex + 1);
else
url = sJsonUrl;
if( c_oSerFormat.Signature === result.substring(0, c_oSerFormat.Signature.length))
{
var wb = new Workbook(url, oThis.handlers, oThis);
wb.initGlobalObjects();
oThis.wbModel = wb;
var oBinaryFileReader = new BinaryFileReader(url);
oBinaryFileReader.Read(result, wb);
if (callback)
callback({returnCode: 0, val:wb});
}
else
{
oResult = {returnCode: c_oAscError.Level.Critical, val:c_oAscError.ID.Unknown};
oThis.handlers.trigger("asc_onError", c_oAscError.ID.Unknown, c_oAscError.Level.Critical);
if(callback)
callback(oResult);
}
},
error:function(){
result = {returnCode: c_oAscError.Level.Critical, val:c_oAscError.ID.Unknown};
oThis.handlers.trigger("asc_onError", c_oAscError.ID.Unknown, c_oAscError.Level.Critical);
if(callback)
callback(result);
}
});
break;
case "needparams":
// Проверяем, возможно нам пришли опции для CSV
if (oThis.documentOpenOptions) {
var codePageCsv = oThis.documentOpenOptions["codePage"];
var delimiterCsv = oThis.documentOpenOptions["delimiter"];
if (null !== codePageCsv && undefined !== codePageCsv &&
null !== delimiterCsv && undefined !== delimiterCsv) {
oThis.asc_setAdvancedOptions(c_oAscAdvancedOptionsID.CSV,
new asc.asc_CCSVAdvancedOptions(codePageCsv, delimiterCsv));
break;
}
}
asc_ajax({
url: incomeObject.data,
dataType: "text",
success: function(result, textStatus) {
var cp = JSON.parse(result);
oThis.handlers.trigger("asc_onAdvancedOptions", new asc.asc_CAdvancedOptions(c_oAscAdvancedOptionsID.CSV,cp), oThis.advancedOptionsAction);
//var value = {url: oThis.documentUrl, delimiter: c_oAscCsvDelimiter.Comma, codepage: 65001}; //65001 - utf8
//oThis._asc_sendCommand(callback, "opencsv", oThis.documentTitle, JSON.stringify(value));
},
error:function(){
result = {returnCode: c_oAscError.Level.Critical, val:c_oAscError.ID.Unknown};
oThis.handlers.trigger("asc_onError", c_oAscError.ID.Unknown, c_oAscError.Level.Critical);
if(callback)
callback(result);
}
});
break;
case "getcodepage":
// Проверяем, возможно нам пришли опции для CSV
if (oThis.documentOpenOptions) {
var codePageCsv = oThis.documentOpenOptions["codePage"];
var delimiterCsv = oThis.documentOpenOptions["delimiter"];
if (null !== codePageCsv && undefined !== codePageCsv &&
null !== delimiterCsv && undefined !== delimiterCsv) {
oThis.asc_setAdvancedOptions(c_oAscAdvancedOptionsID.CSV,
new asc.asc_CCSVAdvancedOptions(codePageCsv, delimiterCsv));
break;
}
}
var cp = JSON.parse(incomeObject.data);
oThis.handlers.trigger("asc_onAdvancedOptions", new asc.asc_CAdvancedOptions(c_oAscAdvancedOptionsID.CSV,cp), oThis.advancedOptionsAction);
//var value = {url: oThis.documentUrl, delimiter: c_oAscCsvDelimiter.Comma, codepage: 65001}; //65001 - utf8
//oThis._asc_sendCommand(callback, "opencsv", oThis.documentTitle, JSON.stringify(value));
break;
case "save":
if(callback)
callback(incomeObject);
break;
case "waitopen":
var rData = {"id":oThis.documentId, "format": oThis.documentFormat, "vkey": oThis.documentVKey, "editorid": c_oEditorId.Spreadsheet, "c":"chopen"};
setTimeout(function(){oThis._asc_sendCommand(callback, JSON.stringify(rData));}, 3000);
break;
case "waitsave":
var rData = {"id": oThis.documentId, "title": oThis.documentTitleWithoutExtention, "c": "chsave", "data": incomeObject.data};
setTimeout(function(){oThis._asc_sendCommand(callback, JSON.stringify(rData));}, 3000);
break;
case "savepart":
var outputData = JSON.parse(incomeObject.data);
oThis._asc_downloadAs(outputData.format, callback, false, null, outputData.savekey);
break;
case "getsettings":
if(callback)
callback(incomeObject);
break;
case "err":
result = {returnCode: c_oAscError.Level.Critical, val:parseInt(incomeObject.data)};
oThis.handlers.trigger("asc_onError", _mapAscServerErrorToAscError(parseInt(incomeObject.data)), c_oAscError.Level.Critical);
if(callback)
callback(result);
break;
}
}
},
dataType: "text"});
},
_asc_open: function (fCallback) { //fCallback({returnCode:"", val:obj, ...})
if ( this.chartEditor ) {
} else if (!this.documentId || !this.documentUrl) {
var data = getTestWorkbook();
var sData = data + "";
if( c_oSerFormat.Signature === sData.substring(0, c_oSerFormat.Signature.length))
{
var sUrlPath = "offlinedocs/test-workbook9/";
var wb = new Workbook(sUrlPath, this.handlers, this);
wb.initGlobalObjects();
this.wbModel = wb;
var oBinaryFileReader = new BinaryFileReader(sUrlPath);
oBinaryFileReader.Read(sData, wb);
fCallback({returnCode: 0, val:wb});
}
}
else {
// Меняем тип состояния (на открытие)
this.advancedOptionsAction = c_oAscAdvancedOptionsAction.Open;
var v = {"id":this.documentId, "format": this.documentFormat, "vkey": this.documentVKey, "editorid": c_oEditorId.Speadsheet, "c":"open", "url": this.documentUrl, "title": this.documentTitle, "embeddedfonts": this.isUseEmbeddedCutFonts};
this._asc_sendCommand (fCallback, JSON.stringify(v));
}
},
_asc_save: function () {
var that = this;
this.wb._initCommentsToSave();
var oBinaryFileWriter = new BinaryFileWriter(this.wbModel);
var data = oBinaryFileWriter.Write();
var oAdditionalData = new Object();
oAdditionalData["c"] = "save";
oAdditionalData["id"] = this.documentId;
oAdditionalData["vkey"] = this.documentVKey;
oAdditionalData["outputformat"] = c_oAscFileType.INNER;
oAdditionalData["innersave"] = true;
oAdditionalData["savetype"] = "completeall";
this._asc_sendCommand (/*callback*/ function(incomeObject){
if(null != incomeObject && "save" == incomeObject.type)
that.asc_processSavedFile(incomeObject.data, true);
}, "mnuSaveAs" + this.cCharDelimiter + JSON.stringify(oAdditionalData) + this.cCharDelimiter + data);
},
_asc_downloadAs: function (sFormat, fCallback, bStart, options, sSaveKey) { //fCallback({returnCode:"", ...})
//sFormat: xlsx, xls, ods, csv, html
var oAdditionalData = new Object();
oAdditionalData["c"] = "save";
oAdditionalData["id"] = this.documentId;
oAdditionalData["vkey"] = this.documentVKey;
oAdditionalData["outputformat"] = sFormat;
if(null != sSaveKey)
oAdditionalData["savekey"] = sSaveKey;
var data;
if(c_oAscFileType.PDFPRINT === sFormat)
{
if (null === this.printPagesData) {
// Рассчитываем данные о страницах
this.printPagesData = this.wb.calcPagesPrint(this.adjustPrint);
}
var pdf_writer = new CPdfPrinter(this.wbModel.sUrlPath);
var isEndPrint = this.wb.printSheet(pdf_writer, this.printPagesData);
data = pdf_writer.DocumentRenderer.Memory.GetBase64Memory();
if (isEndPrint) {
// Закончили печатить
if (bStart) {
// Первый раз отправляем данные
oAdditionalData["savetype"] = "completeall";
} else {
// Не в первый раз отправляем данные
oAdditionalData["savetype"] = "complete";
}
// Очищаем данные о печати
this.printPagesData = null;
} else {
// Продолжаем печать
if (bStart) {
// Первый раз отправляем данные
oAdditionalData["savetype"] = "partstart";
} else {
// Не в первый раз отправляем данные
oAdditionalData["savetype"] = "part";
}
}
} else if (c_oAscFileType.CSV === sFormat && !options) {
var v = {"id":this.documentId, "c":"getcodepage"};
return this._asc_sendCommand (fCallback, JSON.stringify(v));
} else {
this.wb._initCommentsToSave();
var oBinaryFileWriter = new BinaryFileWriter(this.wbModel);
oAdditionalData["savetype"] = "completeall";
if (c_oAscFileType.CSV === sFormat) {
if (options instanceof asc.asc_CCSVAdvancedOptions) {
oAdditionalData["codepage"] = options.asc_getCodePage();
oAdditionalData["delimiter"] = options.asc_getDelimiter();
}
}
data = oBinaryFileWriter.Write();
if (undefined != window['appBridge']) {
window['appBridge']['dummyCommandSave_CSV'] (data);
this.asc_OnSaveEnd(true);
return;
}
}
this._asc_sendCommand (fCallback, "mnuSaveAs" + this.cCharDelimiter + JSON.stringify(oAdditionalData) + this.cCharDelimiter + data);
},
asc_getDocumentName: function () {
return this.documentTitle;
},
asc_getDocumentFormat: function () {
return this.documentFormat;
},
asc_isDocumentModified: function () {
if (History && History.Is_Modified) {
return History.Is_Modified();
}
},
// Actions and callbacks interface
/*
* asc_onStartAction (type, id)
* asc_onEndAction (type, id)
* asc_onInitEditorFonts (gui_fonts)
* asc_onInitEditorStyles (gui_styles)
* asc_onOpenDocumentProgress (_OpenDocumentProgress)
* asc_onAdvancedOptions (asc_CAdvancedOptions, ascAdvancedOptionsAction) - эвент на получение дополнительных опций (открытие/сохранение CSV)
* asc_onError (c_oAscError.ID, c_oAscError.Level)
* asc_onEditCell (c_oAscCellEditorState) - эвент на редактирование ячейки с состоянием (переходами из формулы и обратно)
* asc_onCellTextChanged (text, cursorPosition, isFormula, formulaPos, formulaName)
* asc_onSelectionChanged (asc_CCellInfo); - эвент на смену информации о выделении
* asc_onSelectionNameChanged (sName); - эвент на смену имени выделения (Id-ячейки, число выделенных столбцов/строк, имя диаграммы и др.)
* asc_onZoomChanged (zoom)
* asc_onSheetsChanged () - эвент на обновление списка листов
* asc_onActiveSheetChanged (indexActiveSheet) - эвент на обновление активного листа
* asc_onCanUndoChanged (bCanUndo) - эвент на обновление возможности undo
* asc_onCanRedoChanged (bCanRedo) - эвент на обновление возможности redo
* asc_onSaveUrl (sUrl, callback(hasError)) - эвент на сохранение файла на сервер по url
* asc_onDocumentModifiedChanged(bIsModified) - эвент на обновление статуса "изменен ли файл"
* asc_onMouseMove (asc_CMouseMoveData) - эвент на наведение мышкой на гиперлинк или комментарий
* asc_onHyperlinkClick (sUrl) - эвент на нажатие гиперлинка
* asc_onСoAuthoringDisconnect () - эвент об отключении от сервера без попытки reconnect
* asc_onSelectionRangeChanged (selectRange) - эвент о выборе диапазона для диаграммы (после нажатия кнопки выбора)
* asc_onRenameCellTextEnd (countCellsFind, countCellsReplace) - эвент об окончании замены текста в ячейках (мы не можем сразу прислать ответ)
* asc_onWorkbookLocked (result) - эвент залочена ли работа с листами или нет
* asc_onWorksheetLocked (index, result) - эвент залочен ли лист или нет
* asc_onGetEditorPermissions (permission) - эвент о правах редактора.
*/
asc_StartAction: function (type, id) {
this.handlers.trigger("asc_onStartAction", type, id);
//console.log("asc_onStartAction: type = " + type + " id = " + id);
},
asc_EndAction: function (type, id) {
this.handlers.trigger("asc_onEndAction", type, id);
//console.log("asc_onEndAction: type = " + type + " id = " + id);
},
asc_registerCallback: function (name, callback, replaceOldCallback) {
this.handlers.add(name, callback, replaceOldCallback);
/*
Не самая хорошая схема для отправки эвентов:
проверяем, подписан ли кто-то на эвент? Если да, то отправляем и больше ничего не делаем.
Если никто не подписан, то сохраняем у себя переменную и как только кто-то подписывается - отправляем ее
*/
if (null !== this.guiFonts && "asc_onInitEditorFonts" === name) {
this.handlers.trigger("asc_onInitEditorFonts", this.guiFonts);
this.guiFonts = null;
} else if (null !== this.guiStyles && "asc_onInitEditorStyles" === name) {
this.handlers.trigger("asc_onInitEditorStyles", this.guiStyles);
this.guiStyles = null;
} else if (null !== this.tablePictures && "asc_onInitTablePictures" === name) {
this.handlers.trigger("asc_onInitTablePictures", this.tablePictures);
this.tablePictures = null;
} else if (null !== this._gui_control_colors && "asc_onSendThemeColors" === name) {
this.handlers.trigger("asc_onSendThemeColors", this._gui_control_colors.Colors, this._gui_control_colors.StandartColors);
this._gui_control_colors = null;
} else if (null !== this._gui_color_schemes && "asc_onSendThemeColorSchemes" === name) {
this.handlers.trigger("asc_onSendThemeColorSchemes", this._gui_color_schemes);
this._gui_color_schemes = null;
} else if ("asc_onInitEditorShapes" === name) {
this.handlers.trigger("asc_onInitEditorShapes", g_oAutoShapesGroups, g_oAutoShapesTypes);
} else if ("asc_onInitStandartTextures" === name) {
var _count = g_oUserTexturePresets.length;
var arr = new Array(_count);
for (var i = 0; i < _count; ++i) {
arr[i] = new asc_CTexture();
arr[i].Id = i;
arr[i].Image = g_oUserTexturePresets[i];
this.ImageLoader.LoadImage(g_oUserTexturePresets[i], 1);
}
this.handlers.trigger("asc_onInitStandartTextures", arr);
}
},
asc_unregisterCallback: function (name, callback) {
this.handlers.remove(name, callback);
},
asc_getController: function() {
return this.controller;
},
// Посылает эвент о том, что обновились листы
sheetsChanged: function () {
this.handlers.trigger("asc_onSheetsChanged");
},
// Fonts loading interface
sync_InitEditorFonts: function (gui_fonts) {
/*
Не самая хорошая схема для отправки эвентов:
проверяем, подписан ли кто-то на эвент? Если да, то отправляем и больше ничего не делаем.
Если никто не подписан, то сохраняем у себя переменную и как только кто-то подписывается - отправляем ее
*/
if (false === this.handlers.trigger("asc_onInitEditorFonts", gui_fonts))
this.guiFonts = gui_fonts;
else
this.guiFonts = null;
},
asyncFontsDocumentStartLoaded: function () {
this.OpenDocumentProgress.Type = c_oAscAsyncAction.LoadDocumentFonts;
this.OpenDocumentProgress.FontsCount = this.FontLoader.fonts_loading.length;
this.OpenDocumentProgress.CurrentFont = 0;
this.asc_StartAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.LoadDocumentFonts);
},
asyncFontsDocumentEndLoaded: function () {
this.asc_EndAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.LoadDocumentFonts);
if (this.asyncMethodCallback !== undefined) {
this.asyncMethodCallback();
this.asyncMethodCallback = undefined;
} else {
// Шрифты загрузились, возможно стоит подождать совместное редактирование
this.FontLoadWaitComplete = true;
if (this.ServerIdWaitComplete)
this._openDocumentEndCallback();
}
},
asyncFontStartLoaded: function () {
this.asc_StartAction(c_oAscAsyncActionType.Information, c_oAscAsyncAction.LoadFont);
},
asyncFontEndLoaded: function (font) {
this.asc_EndAction(c_oAscAsyncActionType.Information, c_oAscAsyncAction.LoadFont);
},
SendOpenProgress: function () {
var _OpenDocumentProgress = {
"Type": this.OpenDocumentProgress.Type,
"FontsCount": this.OpenDocumentProgress.FontsCount,
"CurrentFont": this.OpenDocumentProgress.CurrentFont,
"ImagesCount": this.OpenDocumentProgress.ImagesCount,
"CurrentImage": this.OpenDocumentProgress.CurrentImage
};
this.handlers.trigger("asc_onOpenDocumentProgress", _OpenDocumentProgress);
if (undefined != window['appBridge']) {
var progress = (this.OpenDocumentProgress.CurrentFont +
this.OpenDocumentProgress.CurrentImage) /
(this.OpenDocumentProgress.ImagesCount + this.OpenDocumentProgress.FontsCount);
window['appBridge']['dummyCommandOpenDocumentProgress'] (progress * 100);
}
},
IsNeedDefaultFonts: function () {
return false;
},
_loadFonts: function (fonts, callback) {
this.asyncMethodCallback = callback;
this.FontLoader.LoadDocumentFonts2(fonts.map(function(f){return {name: f};}));
},
_startOpenDocument: function (response) {
if (response.returnCode !== 0) {return;}
this.wbModel = response.val;
// Начинаем соединение для совместного редактирования
this.asyncServerIdStartLoaded();
var fonts = $.map(this.wbModel.generateFontMap(), function (fname) {return new CFont(fname, 0, "", 0);});
this.FontLoader.LoadDocumentFonts(fonts);
if (window.USER_AGENT_SAFARI_MACOS)
setInterval(SafariIntervalFocus, 10);
},
_onGetEditorPermissions: function(response) {
if(null != response && "getsettings" == response.type){
var oSettings = JSON.parse(response.data);
//Set up coauthoring and spellcheker service
//window.g_cAscCoAuthoringUrl = oSettings['g_cAscCoAuthoringUrl'];
//window.g_cAscSpellCheckUrl = oSettings['g_cAscSpellCheckUrl'];
var oEditorPermissions = new asc_CAscEditorPermissions(oSettings);
this.handlers.trigger("asc_onGetEditorPermissions", oEditorPermissions);
}
},
// Стартуем соединение с сервером для совместного редактирования
asyncServerIdStartLoaded: function() {
//Загружаем скрипт с настройками, по окончанию инициализируем контрол для совместного редактирования
//TODO: Вынести шрифты в коммоны, SetFontPath заменить на SetCommonPath,
//пердаваемый путь использовать для загрузки шрифтов и настороек.
if(true == ASC_DOCS_API_LOAD_COAUTHORING_SETTINGS){
this.ScriptLoader.LoadScriptAsync( this.FontLoader.fontFilesPath + "../Common/docscoapisettings.js", this._onLoadCoAuthoringSetings, this);
}
else{
this._onLoadCoAuthoringSetings(this);
}
},
// Соединились с сервером
asyncServerIdEndLoaded: function(){
// С сервером соединились, возможно стоит подождать загрузку шрифтов
this.ServerIdWaitComplete = true;
if (this.FontLoadWaitComplete)
this._openDocumentEndCallback();
},
// Эвент о пришедщих изменениях
syncCollaborativeChanges: function () {
this.handlers.trigger("asc_onCollaborativeChanges");
},
// Применение изменений документа, пришедших при открытии
// Их нужно применять после того, как мы создали WorkbookView
// т.к. автофильтры, диаграммы, изображения и комментарии завязаны на WorksheetView (ToDo переделать)
_applyFirstLoadChanges: function () {
if (this.DocumentLoadComplete && null !== this.FirstLoadChanges) {
this.CoAuthoringApi.onSaveChanges(this.FirstLoadChanges, false);
this.FirstLoadChanges = null;
if (this.collaborativeEditing.applyChanges() && !this.IsSendDocumentLoadCompleate) {
this.IsSendDocumentLoadCompleate = true;
this.asc_EndAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.Open);
}
} else if (this.DocumentLoadComplete && !this.IsSendDocumentLoadCompleate) {
this.IsSendDocumentLoadCompleate = true;
this.asc_EndAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.Open);
}
},
/////////////////////////////////////////////////////////////////////////
///////////////////CoAuthoring and Chat api//////////////////////////////
/////////////////////////////////////////////////////////////////////////
_coAuthoringInit: function(docId, user) {
var t = this;
this.collaborativeEditing = new asc_CCollaborativeEditing(/*handlers*/{
"askLock": function () {t.CoAuthoringApi.askLock.apply(t.CoAuthoringApi, arguments);},
"releaseLocks": function () {t.CoAuthoringApi.releaseLocks.apply(t.CoAuthoringApi, arguments);},
"sendChanges": function () {t._onSaveChanges.apply(t, arguments);},
"applyChanges": function () {t._onApplyChanges.apply(t, arguments);},
"updateAfterApplyChanges": function () {t._onUpdateAfterApplyChanges.apply(t, arguments);},
"drawSelection": function () {t._onDrawSelection.apply(t, arguments);},
"showDrawingObjects": function () {t._onShowDrawingObjects.apply(t, arguments);},
"resetLockedGraphicObjects": function () {t._onResetLockedGraphicObjects.apply(t, arguments);},
"showComments": function () {t._onShowComments.apply(t, arguments);},
"unlockComments": function () {t._onUnlockComments.apply(t);},
"cleanSelection": function () {t._onCleanSelection.apply(t, arguments);}
});
if (!this.CoAuthoringApi) {
this.asyncServerIdEndLoaded ();
return; // Error
}
this.CoAuthoringApi.onParticipantsChanged = function (e) { t.handlers.trigger("asc_onParticipantsChanged", e); };
this.CoAuthoringApi.onAuthParticipantsChanged = function (e) { t.handlers.trigger("asc_onAuthParticipantsChanged", e ); };
this.CoAuthoringApi.onMessage = function (e) { t.handlers.trigger("asc_onCoAuthoringChatReceiveMessage", e ); };
this.CoAuthoringApi.onConnectionStateChanged = function (e) { t.handlers.trigger("asc_onConnectionStateChanged", e ); };
this.CoAuthoringApi.onUserStateChanged = function (e) { t.handlers.trigger("asc_onUserStateChanged", e ); };
this.CoAuthoringApi.onLocksAcquired = function (e) {
if ( 2 != e["state"] )
{
var elementValue = e["blockValue"];
var lockElem = t.collaborativeEditing.getLockByElem (elementValue, c_oAscLockTypes.kLockTypeOther);
if (null === lockElem) {
lockElem = new asc.CLock (elementValue);
t.collaborativeEditing.addUnlock (lockElem);
}
if (null != lockElem) {
var oldType = lockElem.getType();
if (c_oAscLockTypes.kLockTypeOther2 === oldType || c_oAscLockTypes.kLockTypeOther3 === oldType)
lockElem.setType (c_oAscLockTypes.kLockTypeOther3, true);
else
lockElem.setType (c_oAscLockTypes.kLockTypeOther, true);
// Выставляем ID пользователя, залочившего данный элемент
lockElem.setUserId (e["user"]);
}
if (t.wb) {
// Шлем update для toolbar-а, т.к. когда select в lock ячейке нужно заблокировать toolbar
t.wb._onWSSelectionChanged(/*info*/null);
// Шлем update для листов
t._onUpdateSheetsLock(lockElem);
var ws = t.wb.getWorksheet();
ws.cleanSelection();
ws._drawSelection();
}
}
};
this.CoAuthoringApi.onLocksReleased = function (e, bChanges) {
var element = e["block"];
var lockElem = t.collaborativeEditing.getLockByElem (element, c_oAscLockTypes.kLockTypeOther);
if (null != lockElem) {
var curType = lockElem.getType();
var newType = c_oAscLockTypes.kLockTypeNone;
if (curType === c_oAscLockTypes.kLockTypeOther) {
if (true != bChanges) {
newType = c_oAscLockTypes.kLockTypeNone;
}
else
{
newType = c_oAscLockTypes.kLockTypeOther2;
}
}
else if (curType === c_oAscLockTypes.kLockTypeMine){
// Такого быть не должно
newType = c_oAscLockTypes.kLockTypeMine;
}
else if (curType === c_oAscLockTypes.kLockTypeOther2 || curType === c_oAscLockTypes.kLockTypeOther3)
newType = c_oAscLockTypes.kLockTypeOther2;
if (t.wb) {
t.wb.getWorksheet().cleanSelection();
}
if (c_oAscLockTypes.kLockTypeNone !== newType)
lockElem.setType (newType, true);
else {
// Удаляем из lock-ов, тот, кто правил ушел и не сохранил
t.collaborativeEditing.removeUnlock (lockElem);
}
if (t.wb) {
// Шлем update для toolbar-а, т.к. когда select в lock ячейке нужно сбросить блокировку toolbar
t.wb._onWSSelectionChanged(/*info*/null);
// Шлем update для листов
t._onUpdateSheetsLock(lockElem);
var worksheet = t.wb.getWorksheet();
worksheet._drawSelection();
worksheet.objectRender.showDrawingObjects(true);
worksheet.cellCommentator.unlockComments();
}
}
};
this.CoAuthoringApi.onSaveChanges = function (e, bSendEvent) {
// bSendEvent = false - это означает, что мы загружаем имеющиеся изменения при открытии
var bAddChanges = false;
var nCount = e.length;
var nIndex = 0;
var oElement = null;
var oRecalcIndexColumns = null, oRecalcIndexRows = null;
for (; nIndex < nCount; ++nIndex) {
oElement = e[nIndex];
if ("string" === typeof oElement) {
t.collaborativeEditing.addChanges(oElement);
bAddChanges = true;
} else if (false !== bSendEvent && "object" === typeof oElement) {
if ("0" === oElement["type"]) {
// Это мы получили recalcIndexColumns
oRecalcIndexColumns = t.collaborativeEditing.addRecalcIndex(oElement["type"], oElement["index"]);
} else if ("1" === oElement["type"]) {
// Это мы получили recalcIndexRows
oRecalcIndexRows = t.collaborativeEditing.addRecalcIndex(oElement["type"], oElement["index"]);
}
}
// Теперь нужно пересчитать индексы для lock-элементов
if (null !== oRecalcIndexColumns && null !== oRecalcIndexRows) {
t.collaborativeEditing._recalcLockArray(c_oAscLockTypes.kLockTypeMine, oRecalcIndexColumns, oRecalcIndexRows);
t.collaborativeEditing._recalcLockArray(c_oAscLockTypes.kLockTypeOther, oRecalcIndexColumns, oRecalcIndexRows);
oRecalcIndexColumns = null;
oRecalcIndexRows = null;
}
}
// т.е. если bSendEvent не задан, то посылаем сообщение
if (true === bAddChanges && false !== bSendEvent)
t.syncCollaborativeChanges();
};
this.CoAuthoringApi.onFirstLoadChanges = function (e) {
t.FirstLoadChanges = e;
t._applyFirstLoadChanges();
};
this.CoAuthoringApi.onSetIndexUser = function (e) {
t.asyncServerIdEndLoaded ();
};
this.CoAuthoringApi.onStartCoAuthoring = function (isStartEvent) {
t.startCollaborationEditing();
// На старте не нужно ничего делать
if (!isStartEvent) {
// Принимаем чужие изменения
t.collaborativeEditing.applyChanges();
// Пересылаем свои изменения
t.collaborativeEditing.sendChanges();
}
};
/**
* Event об отсоединении от сервера
* @param {jQuery} e event об отсоединении с причиной
* @param {Bool} isDisconnectAtAll окончательно ли отсоединяемся(true) или будем пробовать сделать reconnect(false) + сами отключились
* @param {Bool} isCloseCoAuthoring
*/
this.CoAuthoringApi.onDisconnect = function (e, isDisconnectAtAll, isCloseCoAuthoring) {
if (0 === t.CoAuthoringApi.get_state())
t.asyncServerIdEndLoaded();
if (isDisconnectAtAll) {
// Посылаем наверх эвент об отключении от сервера
t.handlers.trigger("asc_onСoAuthoringDisconnect");
// И переходим в режим просмотра т.к. мы не можем сохранить таблицу
t.asc_setViewerMode(true);
if (!isCloseCoAuthoring) {
t.handlers.trigger("asc_onError", c_oAscError.ID.CoAuthoringDisconnect, c_oAscError.Level.NoCritical);
}
}
};
this.CoAuthoringApi.init (user, docId, this.asc_getViewerMode(), 'fghhfgsjdgfjs', window.location.host, g_sMainServiceLocalUrl, function(){
}, /*isExcel*/true);
},
// Set CoAuthoring server url
_coAuthoringSetServerUrl: function(url){
if (!this.CoAuthoringApi)
return; // Error
this.CoAuthoringApi.set_url(url);
},
// End load settings coAuthoring
_onLoadCoAuthoringSetings : function(that){
if(undefined !== window['g_cAscCoAuthoringUrl'])
window.g_cAscCoAuthoringUrl = window['g_cAscCoAuthoringUrl'];
if(undefined !== window.g_cAscCoAuthoringUrl)
{
//Turn off CoAuthoring feature if it disabled
if(!that.isCoAuthoringEnable)
window.g_cAscCoAuthoringUrl = "";
// Если есть в настройках сервер, то выставляем его для соединения
that._coAuthoringSetServerUrl(window.g_cAscCoAuthoringUrl);
}
//Если User не задан, отключаем коавторинг.
if (undefined === that.User || null === that.User ||
undefined === that.User.asc_getId() || null === that.User.asc_getId()) {
that.User = new asc_user();
that.User.asc_setId("Unknown");
that.User.asc_setUserName("Unknown");
that._coAuthoringSetServerUrl("");
}
that._coAuthoringInit(that.documentId, that.User);
},
_onSaveChanges: function (recalcIndexColumns, recalcIndexRows) {
var arrChanges = this.wbModel.SerializeHistory();
arrChanges.push({"index" : recalcIndexColumns, "type" : "0"});
arrChanges.push({"index" : recalcIndexRows, "type" : "1"});
this.CoAuthoringApi.saveChanges(arrChanges);
},
_onApplyChanges: function (changes, fCallback) {
this.wbModel.DeserializeHistory(changes, fCallback);
},
_onUpdateAfterApplyChanges: function () {
if (!this.IsSendDocumentLoadCompleate) {
// При открытии после принятия изменений мы должны сбросить пересчетные индексы
this.collaborativeEditing.clearRecalcIndex();
this.IsSendDocumentLoadCompleate = true;
this.asc_EndAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.Open);
}
if (this.wb) {
this.wb.getWorksheet().cellCommentator.unlockComments();
// Нужно послать обновить свойства (иначе для удаления данных не обновится строка формул).
// ToDo Возможно стоит обновлять только строку формул
this.wb._onWSSelectionChanged(null);
this.wb.getWorksheet().updateVisibleRange();
}
},
_onCleanSelection: function () {
if (this.wb)
this.wb.getWorksheet().cleanSelection();
},
_onDrawSelection: function () {
if (this.wb)
this.wb.getWorksheet()._drawSelection();
},
_onShowDrawingObjects: function () {
if (this.wb) {
this.wb.getWorksheet().objectRender.showDrawingObjects(true);
}
},
_onResetLockedGraphicObjects: function () {
if (this.wb) {
this.wb.getWorksheet().objectRender.reseltLockedGraphicObjects();
}
},
_onShowComments: function () {
if (this.wb) {
this.wb.getWorksheet().cellCommentator.drawCommentCells();
}
},
_onUnlockComments: function () {
if (this.wb) {
var ws = this.wb.getWorksheet();
ws.cellCommentator.unlockComments();
}
},
_onUpdateSheetsLock: function (lockElem) {
var t = this;
// Шлем update для листов, т.к. нужно залочить лист
if (c_oAscLockTypeElem.Sheet === lockElem.Element["type"]) {
t.handlers.trigger("asc_onWorkbookLocked", t.asc_isWorkbookLocked());
}
// Шлем update для листа
var wsModel = t.wbModel.getWorksheetById(lockElem.Element["sheetId"]);
if (wsModel) {
var wsIndex = wsModel.getIndex();
t.handlers.trigger("asc_onWorksheetLocked", wsIndex, t.asc_isWorksheetLockedOrDeleted(wsIndex));
}
},
_sendWorkbookStyles: function () {
if(this.wbModel) {
// Отправка стилей форматированных таблиц
var autoFilters = new asc.AutoFilters();
var tablePictures = autoFilters.getTablePictures(this.wbModel);
var bResult = this.handlers.trigger("asc_onInitTablePictures", tablePictures);
this.tablePictures = (false === bResult) ? tablePictures : null;
// Отправка стилей ячеек
var guiStyles = this.wb.getCellStyles();
bResult = this.handlers.trigger("asc_onInitEditorStyles", guiStyles);
this.guiStyles = (false === bResult) ? guiStyles : null;
}
},
startCollaborationEditing: function () {
// Начинаем совместное редактирование
this.collaborativeEditing.startCollaborationEditing();
},
// End Load document
_openDocumentEndCallback: function () {
// Не инициализируем дважды
if (this.DocumentLoadComplete)
return;
this.wb = new asc.WorkbookView(
this.wbModel,
this.controller,
this.handlers,
$("#" + this.HtmlElementName),
$("#" + this.topLineEditorName),
this,
this.collaborativeEditing,
this.fontRenderingMode,
this.options);
this.DocumentLoadComplete = true;
this.asc_CheckGuiControlColors();
this.asc_SendThemeColorScheme();
this.asc_ApplyColorScheme(false);
// Применяем пришедшие при открытии изменения
this._applyFirstLoadChanges();
// Меняем тип состояния (на никакое)
this.advancedOptionsAction = c_oAscAdvancedOptionsAction.None;
//this.asc_Resize(); // Убрал, т.к. сверху приходит resize (http://bugzserver/show_bug.cgi?id=14680)
if( this.wbModel.startActionOn == false ){
this.wbModel.startActionOn = true;
} else {
var t = this;
setTimeout(function(){t.asc_StartAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.Recalc)},500);
}
if (undefined != window['appBridge']) {
window['appBridge']['dummyCommandOpenDocumentProgress'] (10000);
}
// Запускаем таймер автосохранения
this.autoSaveInit();
},
// Переход на диапазон в листе
_asc_setWorksheetRange: function (val) {
// Получаем sheet по имени
var ws = this.wbModel.getWorksheetByName (val.asc_getSheet());
if (!ws || ws.getHidden())
return;
// Индекс листа
var sheetIndex = ws.getIndex();
// Если не совпали индекс листа и индекс текущего, то нужно сменить
if (this.asc_getActiveWorksheetIndex() !== sheetIndex) {
// Меняем активный лист
this.asc_showWorksheet (sheetIndex);
// Посылаем эвент о смене активного листа
this.handlers.trigger ("asc_onActiveSheetChanged", sheetIndex);
}
var range = ws.getRange2 (val.asc_getRange());
if (null !== range) {
this.wb._onSetSelection (range.getBBox0(), /*validRange*/ true);
}
},
onSaveCallback: function (e) {
var t = this;
var nState;
if (false == e["savelock"]) {
if (this.isAutoSave) {
this.asc_StartAction(c_oAscAsyncActionType.Information, c_oAscAsyncAction.Save);
this.asc_StartAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.PrepareToSave);
}
// Принимаем чужие изменения
t.collaborativeEditing.applyChanges();
// Сохраняем файл на сервер
this._asc_save();
// Cбросим флаги модификации
History.Save();
// Пересылаем свои изменения
this.collaborativeEditing.sendChanges();
// Шлем update для toolbar-а, т.к. когда select в lock ячейке нужно заблокировать toolbar
this.wb._onWSSelectionChanged(/*info*/null);
// Заканчиваем сохранение, т.к. мы хотим дать пользователю продолжать набирать документ
// Но сохранять до прихода ответа от сервера не сможет
this.asc_EndAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.PrepareToSave);
} else {
nState = t.CoAuthoringApi.get_state();
if (3 === nState) {
// Отключаемся от сохранения, соединение потеряно
if (!this.isAutoSave) {
this.asc_EndAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.PrepareToSave);
this.asc_EndAction(c_oAscAsyncActionType.Information, c_oAscAsyncAction.Save);
}
this.isAutoSave = false;
this.canSave = true;
} else {
// Если автосохранение, то не будем ждать ответа, а просто перезапустим таймер на немного
if (this.isAutoSave) {
this.isAutoSave = false;
this.canSave = true;
this.autoSaveInit(this.autoSaveGapAsk);
return;
}
setTimeout(function () {
t.CoAuthoringApi.askSaveChanges(function (event) {
// Функция может быть долгой (и в IE10 происходит disconnect). Поэтому вызовем через timeout
window.setTimeout(function () {
t.onSaveCallback(event);
}, 10);
});
}, 1000);
}
}
},
_getIsLockObjectSheet: function (lockInfo, callback) {
if (false === this.collaborativeEditing.isCoAuthoringExcellEnable()) {
// Запрещено совместное редактирование
if ($.isFunction(callback)) {callback(true);}
return;
}
if (false === this.collaborativeEditing.getCollaborativeEditing()) {
// Пользователь редактирует один: не ждем ответа, а сразу продолжаем редактирование
callback(true);
callback = undefined;
} else if (false !== this.collaborativeEditing.getLockIntersection(lockInfo, c_oAscLockTypes.kLockTypeMine, /*bCheckOnlyLockAll*/false)) {
// Редактируем сами
callback(true);
return;
}
else if (false !== this.collaborativeEditing.getLockIntersection(lockInfo, c_oAscLockTypes.kLockTypeOther, /*bCheckOnlyLockAll*/false)) {
// Уже ячейку кто-то редактирует
callback(false);
return;
}
this.collaborativeEditing.onStartCheckLock();
this.collaborativeEditing.addCheckLock(lockInfo);
this.collaborativeEditing.onEndCheckLock(callback);
},
// Workbook interface
asc_getWorksheetsCount: function () {
return this.wbModel.getWorksheetCount();
},
asc_getWorksheetName: function (index) {
return this.wbModel.getWorksheet(index).getName();
},
asc_getActiveWorksheetIndex: function () {
return this.wbModel.getActive();
},
asc_getActiveWorksheetId: function () {
var activeIndex = this.wbModel.getActive();
return this.wbModel.getWorksheet(activeIndex).getId();
},
asc_getWorksheetId: function (index) {
return this.wbModel.getWorksheet(index).getId();
},
asc_isWorksheetHidden: function (index) {
return this.wbModel.getWorksheet(index).getHidden();
},
// Залочена ли работа с листом
asc_isWorksheetLockedOrDeleted: function (index) {
var ws = this.wbModel.getWorksheet(index);
var sheetId = null;
if (null === ws || undefined === ws)
sheetId = this.asc_getActiveWorksheetId();
else
sheetId = ws.getId();
if (false === this.collaborativeEditing.isCoAuthoringExcellEnable()) {
// Запрещено совместное редактирование
return false;
}
var lockInfo = this.collaborativeEditing.getLockInfo(c_oAscLockTypeElem.Sheet, /*subType*/null, sheetId, sheetId);
// Проверим, редактирует ли кто-то лист
return (false !== this.collaborativeEditing.getLockIntersection(lockInfo,
c_oAscLockTypes.kLockTypeOther, /*bCheckOnlyLockAll*/false));
},
// Залочена ли работа с листами
asc_isWorkbookLocked: function () {
if (false === this.collaborativeEditing.isCoAuthoringExcellEnable()) {
// Запрещено совместное редактирование
return false;
}
var lockInfo = this.collaborativeEditing.getLockInfo(c_oAscLockTypeElem.Sheet, /*subType*/null, null, null);
// Проверим, редактирует ли кто-то лист
return (false !== this.collaborativeEditing.getLockIntersection(lockInfo,
c_oAscLockTypes.kLockTypeOther, /*bCheckOnlyLockAll*/false));
},
asc_getHiddenWorksheets: function () {
var model = this.wbModel;
var len = model.getWorksheetCount();
var i, ws, res = [];
for (i = 0; i < len; ++i) {
ws = model.getWorksheet(i);
if (ws.getHidden()) {
res.push({"index": i, "name": ws.getName()});
}
}
return res;
},
asc_showWorksheet: function (index) {
if (typeof index === "number" && undefined !== index && null !== index) {
var t = this;
var ws = this.wbModel.getWorksheet(index);
var isHidden = ws.getHidden();
var showWorksheetCallback = function (res) {
if (res) {
t.wbModel.getWorksheet(index).setHidden(false);
t.wb.showWorksheet(index);
if (isHidden) {
// Посылаем callback об изменении списка листов
t.sheetsChanged();
}
}
};
if (isHidden) {
var sheetId = this.wbModel.getWorksheet(index).getId();
var lockInfo = this.collaborativeEditing.getLockInfo(c_oAscLockTypeElem.Sheet, /*subType*/null, sheetId, sheetId);
this._getIsLockObjectSheet(lockInfo, showWorksheetCallback);
}
else
showWorksheetCallback(true);
}
},
asc_showActiveWorksheet: function () {
this.wb.showWorksheet(this.wbModel.getActive());
},
asc_hideWorksheet: function () {
var t = this;
// Колличество листов
var countWorksheets = this.asc_getWorksheetsCount();
// Колличество скрытых листов
var arrHideWorksheets = this.asc_getHiddenWorksheets();
var countHideWorksheets = arrHideWorksheets.length;
// Вдруг остался один лист
if (countWorksheets <= countHideWorksheets + 1)
return false;
var model = this.wbModel;
// Активный лист
var activeWorksheet = model.getActive();
var sheetId = this.wbModel.getWorksheet(activeWorksheet).getId();
var lockInfo = this.collaborativeEditing.getLockInfo(c_oAscLockTypeElem.Sheet, /*subType*/null, sheetId, sheetId);
var hideWorksheetCallback = function (res) {
if (res) {
t.wbModel.getWorksheet(activeWorksheet).setHidden(true);
// Покажем следующий лист или предыдущий (если больше нет)
var i, ws;
for (i = activeWorksheet + 1; i < countWorksheets; ++i) {
ws = model.getWorksheet(i);
if (false === ws.getHidden()) {
t.asc_showWorksheet (i);
// Посылаем callback об изменении списка листов
t.sheetsChanged();
return;
}
}
// Не нашли справа, ищем слева от текущего
for (i = activeWorksheet - 1; i >= 0; --i) {
ws = model.getWorksheet(i);
if (false === ws.getHidden()) {
t.asc_showWorksheet (i);
// Посылаем callback об изменении списка листов
t.sheetsChanged();
return;
}
}
}
};
this._getIsLockObjectSheet(lockInfo, hideWorksheetCallback);
return true;
},
asc_renameWorksheet: function (name) {
// Проверка глобального лока
if (this.collaborativeEditing.getGlobalLock())
return false;
var i = this.wbModel.getActive();
var sheetId = this.wbModel.getWorksheet(i).getId();
var lockInfo = this.collaborativeEditing.getLockInfo(c_oAscLockTypeElem.Sheet, /*subType*/null, sheetId, sheetId);
var t = this;
var renameCallback = function (res) {
if (res) {
t.wbModel.getWorksheet(i).setName(name);
}
};
this._getIsLockObjectSheet(lockInfo, renameCallback);
return true;
},
asc_addWorksheet: function () {
var active = this.wbModel.createWorksheet();
this.asc_showWorksheet (active);
// Посылаем callback об изменении списка листов
this.sheetsChanged();
},
asc_insertWorksheet: function (name) {
var i = this.wbModel.getActive();
var j = this.wbModel.createWorksheet(i, name);
this.wb.spliceWorksheet(i, 0, null);
this.asc_showWorksheet (i);
// Посылаем callback об изменении списка листов
this.sheetsChanged();
},
// Удаление листа
asc_deleteWorksheet: function () {
// Проверка глобального лока
if (this.collaborativeEditing.getGlobalLock())
return false;
var i = this.wbModel.getActive();
var sheetId = this.wbModel.getWorksheet(i).getId();
var lockInfo = this.collaborativeEditing.getLockInfo(c_oAscLockTypeElem.Sheet, /*subType*/null, sheetId, sheetId);
var t = this;
var deleteCallback = function (res) {
if (res) {
// Удаляем Worksheet и получаем новый активный индекс (-1 означает, что ничего не удалилось)
var activeNow = t.wbModel.removeWorksheet(i);
if (-1 !== activeNow){
t.wb.removeWorksheet(i);
t.asc_showWorksheet (activeNow);
// Посылаем callback об изменении списка листов
t.sheetsChanged();
}
}
};
this._getIsLockObjectSheet(lockInfo, deleteCallback);
return true;
},
asc_moveWorksheet: function (where) {
var i = this.wbModel.getActive();
var d = i < where ? +1 : -1;
// Мы должны поместить слева от заданного значения, поэтому если идем вправо, то вычтем 1
if (1 === d)
where -= 1;
this.wbModel.replaceWorksheet(i, where);
this.wb.replaceWorksheet(i, where);
// Обновим текущий номер
this.asc_showWorksheet(where);
// Посылаем callback об изменении списка листов
this.sheetsChanged();
},
asc_copyWorksheet: function (where, newName) {
var scale = this.asc_getZoom();
var i = this.wbModel.getActive();
// ToDo уйти от lock для листа при копировании
var sheetId = this.wbModel.getWorksheet(i).getId();
var lockInfo = this.collaborativeEditing.getLockInfo(c_oAscLockTypeElem.Sheet, /*subType*/null, sheetId, sheetId);
var t = this;
var copyWorksheet = function (res) {
if (res) {
t.wbModel.copyWorksheet(i, where, newName);
t.wb.copyWorksheet(i, where);
// Делаем активным скопированный
t.asc_showWorksheet(where);
t.asc_setZoom(scale);
// Посылаем callback об изменении списка листов
t.sheetsChanged();
}
};
this._getIsLockObjectSheet(lockInfo, copyWorksheet);
},
asc_cleanSelection: function(){
this.wb.getWorksheet().cleanSelection();
},
asc_getZoom: function () {
return this.wb.getZoom();
},
asc_setZoom: function (scale) {
this.wb.changeZoom(scale);
},
asc_enableKeyEvents: function (isEnabled) {
if (this.wb)
this.wb.enableKeyEventsHandler(isEnabled);
//наличие фокуса в рабочей области редактора(используется для copy/paste в MAC)
this.IsFocus = isEnabled;
},
asc_findText: function (text, scanByRows, scanForward, isMatchCase, isWholeCell) {
var d = this.wb.findCellText({text: text, scanByRows: scanByRows, scanForward: scanForward,
isMatchCase: isMatchCase, isWholeCell: isWholeCell, isNotSelect: false});
if (d) {
if (d.deltaX) {this.controller.scrollHorizontal(d.deltaX);}
if (d.deltaY) {this.controller.scrollVertical(d.deltaY);}
}
return !!d;
},
asc_replaceText: function (findWhat, replaceWith, isReplaceAll, isMatchCase, isWholeCell) {
this.wb.replaceCellText({findWhat: findWhat, replaceWith: replaceWith, isReplaceAll: isReplaceAll,
isMatchCase: isMatchCase, isWholeCell: isWholeCell});
},
/**
* Делает активной указанную ячейку
* @param {String} reference Ссылка на ячейку вида A1 или R1C1
*/
asc_findCell: function(reference) {
var d = this.wb.findCell(reference);
if (d) {
if (d.deltaX) {this.controller.scrollHorizontal(d.deltaX);}
if (d.deltaY) {this.controller.scrollVertical(d.deltaY);}
}
},
// не используется (и не стоит так делать)
// asc_openCellEditor: function (text, cursorPos) {
// this.wb.openCellEditor(text, cursorPos, /*isFocus*/false);
// },
asc_closeCellEditor: function () {
this.wb.closeCellEditor();
},
// Spreadsheet interface
asc_getColumnWidth: function () {
var ws = this.wb.getWorksheet();
return ws.getColumnWidthInSymbols(ws.getSelectedColumnIndex());
},
asc_setColumnWidth: function (width) {
this.wb.getWorksheet().changeWorksheet("colWidth", width);
},
asc_insertColumnsBefore: function (count) {
this.wb.getWorksheet().changeWorksheet("insColBefore", count);
},
asc_insertColumnsAfter: function (count){
this.wb.getWorksheet().changeWorksheet("insColAfter", count);
},
asc_deleteColumns: function() {
this.wb.getWorksheet().changeWorksheet("delCol");
},
asc_showColumns: function () {
this.wb.getWorksheet().changeWorksheet("showCols");
},
asc_hideColumns: function () {
this.wb.getWorksheet().changeWorksheet("hideCols");
},
asc_getRowHeight: function () {
var ws = this.wb.getWorksheet();
return ws.getRowHeight(ws.getSelectedRowIndex(), 1/*pt*/);
},
asc_setRowHeight: function (height) {
this.wb.getWorksheet().changeWorksheet("rowHeight", height);
},
asc_insertRowsBefore: function(count) {
this.wb.getWorksheet().changeWorksheet("insRowBefore", count);
},
asc_insertRowsAfter: function (count) {
this.wb.getWorksheet().changeWorksheet("insRowAfter", count);
},
asc_deleteRows: function () {
this.wb.getWorksheet().changeWorksheet("delRow");
},
asc_showRows: function () {
this.wb.getWorksheet().changeWorksheet("showRows");
},
asc_hideRows: function () {
this.wb.getWorksheet().changeWorksheet("hideRows");
},
asc_insertCells: function (options) {
this.wb.getWorksheet().changeWorksheet("insCell", options);
},
asc_deleteCells: function (options) {
this.wb.getWorksheet().changeWorksheet("delCell", options);
},
asc_mergeCells: function (options) {
this.wb.getWorksheet().setSelectionInfo("merge", options);
},
asc_sortCells: function (options) {
this.wb.getWorksheet().setSelectionInfo("sort", options);
},
asc_emptyCells: function (options) {
this.wb.emptyCells(options);
},
asc_drawDepCells:function(se){
if( se != c_oAscDrawDepOptions.Clear )
this.wb.getWorksheet().prepareDepCells(se);
else
this.wb.getWorksheet().cleanDepCells();
},
// Потеряем ли мы что-то при merge ячеек
asc_mergeCellsDataLost: function (options) {
return this.wb.getWorksheet().getSelectionMergeInfo(options);
},
asc_getSheetViewSettings: function () {
return this.wb.getWorksheet().getSheetViewSettings();
},
asc_setSheetViewSettings: function (options) {
this.wb.getWorksheet().changeWorksheet("sheetViewSettings", options);
},
// Images & Charts
asc_drawingObjectsExist: function(chart) {
for (var i = 0; i < this.wb.model.aWorksheets.length; i++) {
if ( this.wb.model.aWorksheets[i].Drawings && this.wb.model.aWorksheets[i].Drawings.length )
return true;
}
return false;
},
asc_getChartObject: function() { // Return new or existing chart. For image return null
var ws = this.wb.getWorksheet();
return ws.objectRender.getAscChartObject();
},
asc_addChartDrawingObject: function(chart) {
var ws = this.wb.getWorksheet();
return ws.objectRender.addChartDrawingObject(chart, this.isChartEditor);
},
asc_editChartDrawingObject: function(chart) {
var ws = this.wb.getWorksheet();
return ws.objectRender.editChartDrawingObject(chart);
},
asc_addImageDrawingObject: function(imageUrl) {
var ws = this.wb.getWorksheet();
return ws.objectRender.addImageDrawingObject(imageUrl, null);
},
asc_showImageFileDialog: function (options) {
if (undefined != window['appBridge']) {
window['appBridge']['dummyCommandAddImage'] ();
return;
}
var ws = this.wb.getWorksheet();
ws.objectRender.showImageFileDialog(this.documentId, this.documentFormat);
},
asc_setSelectedDrawingObjectLayer: function(layerType) {
var ws = this.wb.getWorksheet();
return ws.objectRender.setGraphicObjectLayer(layerType);
},
asc_getChartPreviews: function(chartType, chartSubType) {
if ( this.chartPreviewManager.isReady() ) {
return this.chartPreviewManager.getChartPreviews(chartType, chartSubType);
}
},
asc_checkChartInterval: function(type, subtype, interval, isRows) {
var ws = this.wb.getWorksheet();
return ws.objectRender.checkChartInterval(type, subtype, interval, isRows);
},
// Для вставки диаграмм в Word
asc_getBinaryFileWriter: function() {
this.wb._initCommentsToSave();
return new BinaryFileWriter(this.wbModel);
},
asc_getWordChartObject: function() {
var ws = this.wb.getWorksheet();
return ws.objectRender.getWordChartObject();
},
asc_cleanWorksheet: function() {
var ws = this.wb.getWorksheet(); // Для удаления данных листа и диаграмм
ws.objectRender.cleanWorksheet();
},
// Cell comment interface
asc_addComment: function(oComment) {
var ws = this.wb.getWorksheet();
ws.cellCommentator.asc_addComment(oComment);
},
asc_changeComment: function(id, oComment) {
var ws = this.wb.getWorksheet();
ws.cellCommentator.asc_changeComment(id, oComment);
},
asc_selectComment: function(id) {
var ws = this.wb.getWorksheet();
ws.cellCommentator.asc_selectComment(id);
},
asc_showComment: function(id) {
var ws = this.wb.getWorksheet();
ws.cellCommentator.asc_showComment(id);
},
asc_findComment: function(id) {
var ws = this.wb.getWorksheet();
return ws.cellCommentator.asc_findComment(id);
},
asc_removeComment: function(id) {
var ws = this.wb.getWorksheet();
ws.cellCommentator.asc_removeComment(id);
},
asc_getComments: function(col, row) {
var ws = this.wb.getWorksheet();
return ws.cellCommentator.asc_getComments(col, row);
},
asc_getDocumentComments: function() {
var ws = this.wb.getWorksheet();
return ws.cellCommentator.asc_getDocumentComments();
},
asc_showComments: function() {
var ws = this.wb.getWorksheet();
return ws.cellCommentator.asc_showComments();
},
asc_hideComments: function() {
var ws = this.wb.getWorksheet();
return ws.cellCommentator.asc_hideComments();
},
asc_getWorkbookComments: function() {
var _this = this, comments = [];
if ( _this.wb ) {
for (var i = 0; i < _this.wb.model.aWorksheets.length; i++) {
for (var j = 0; j < _this.wb.model.aWorksheets[i].aComments.length; j++) {
comments.push(_this.wb.model.aWorksheets[i].aComments[j]);
}
}
}
return comments;
},
// Shapes
asc_startAddShape: function(sPreset) {
this.isStartAddShape = true;
this.addShapePreset = sPreset;
var ws = this.wb.getWorksheet();
ws.objectRender.controller.startTrackNewShape(sPreset);
},
asc_endAddShape: function() {
this.isStartAddShape = false;
},
asc_isAddAutoshape: function() {
return this.isStartAddShape;
},
asc_canGroupGraphicsObjects: function() {
var ws = this.wb.getWorksheet();
return ws.objectRender.controller.canGroup();
},
asc_groupGraphicsObjects: function() {
var ws = this.wb.getWorksheet();
ws.objectRender.groupGraphicObjects();
},
asc_canUnGroupGraphicsObjects: function() {
var ws = this.wb.getWorksheet();
return ws.objectRender.controller.canUnGroup();
},
asc_unGroupGraphicsObjects: function() {
var ws = this.wb.getWorksheet();
ws.objectRender.unGroupGraphicObjects();
},
asc_changeShapeType: function(value) {
this.asc_setGraphicObjectProps(new asc_CImgProperty( {ShapeProperties:{type:value}} ));
},
asc_getGraphicObjectProps: function() {
var ws = this.wb.getWorksheet();
return ws.objectRender.controller.getGraphicObjectProps();
},
asc_setGraphicObjectProps: function(props) {
var ws = this.wb.getWorksheet();
return ws.objectRender.setGraphicObjectProps(props);
},
asc_getOriginalImageSize: function() {
var ws = this.wb.getWorksheet();
return ws.objectRender.getOriginalImageSize();
},
asc_setInterfaceDrawImagePlaceShape: function(elementId) {
this.shapeElementId = elementId;
},
asc_changeImageFromFile: function() {
this.isImageChangeUrl = true;
this.asc_showImageFileDialog();
},
asc_changeShapeImageFromFile: function() {
this.isShapeImageChangeUrl = true;
this.asc_showImageFileDialog();
},
asc_putPrLineSpacing: function(type, value) {
var ws = this.wb.getWorksheet();
ws.objectRender.controller.putPrLineSpacing(type, value);
},
asc_putLineSpacingBeforeAfter: function(type,value) { // "type == 0" means "Before", "type == 1" means "After"
var ws = this.wb.getWorksheet();
ws.objectRender.controller.putLineSpacingBeforeAfter(type, value);
},
asc_setDrawImagePlaceParagraph: function(element_id, props) {
var ws = this.wb.getWorksheet();
ws.objectRender.setDrawImagePlaceParagraph(element_id, props);
},
asyncImageStartLoaded: function() {
},
asyncImageEndLoaded: function(_image) {
if ( this.wb ) {
var ws = this.wb.getWorksheet();
if ( ws.objectRender.asyncImageEndLoaded )
ws.objectRender.asyncImageEndLoaded(_image);
}
},
asyncImagesDocumentStartLoaded: function() {
},
asyncImagesDocumentEndLoaded: function() {
if ( this.wb ) {
var ws = this.wb.getWorksheet();
if ( ws.objectRender.asyncImagesDocumentEndLoaded )
ws.objectRender.asyncImagesDocumentEndLoaded();
}
},
asyncImageEndLoadedBackground: function() {
},
// Cell interface
asc_getCellInfo: function (bExt) {
return this.wb.getWorksheet().getSelectionInfo(!!bExt);
},
// Получить координаты активной ячейки
asc_getActiveCellCoord: function () {
return this.wb.getWorksheet().getActiveCellCoord();
},
// Получаем свойство: редактируем мы сейчас или нет
asc_getCellEditMode: function () {
return this.wb.getCellEditMode();
},
asc_setCellFontName: function (fontName) {
var t = this;
t._loadFonts([fontName], function () {
var ws = t.wb.getWorksheet();
if ( ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.setCellFontName )
ws.objectRender.controller.setCellFontName(fontName);
else {
t.wb.setFontAttributes("fn", fontName);
t.wb.restoreFocus();
}
});
},
asc_setCellFontSize: function (fontSize) {
var ws = this.wb.getWorksheet();
if ( ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.setCellFontSize )
ws.objectRender.controller.setCellFontSize(fontSize);
else {
this.wb.setFontAttributes("fs", fontSize);
this.wb.restoreFocus();
}
},
asc_setCellBold: function (isBold) {
var ws = this.wb.getWorksheet();
if ( ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.setCellBold )
ws.objectRender.controller.setCellBold(isBold);
else {
this.wb.setFontAttributes("b", isBold);
this.wb.restoreFocus();
}
},
asc_setCellItalic: function (isItalic) {
var ws = this.wb.getWorksheet();
if ( ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.setCellItalic )
ws.objectRender.controller.setCellItalic(isItalic);
else {
this.wb.setFontAttributes("i", isItalic);
this.wb.restoreFocus();
}
},
asc_setCellUnderline: function (isUnderline) {
var ws = this.wb.getWorksheet();
if ( ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.setCellUnderline )
ws.objectRender.controller.setCellUnderline(isUnderline);
else {
this.wb.setFontAttributes("u", isUnderline ? "single" : "none");
this.wb.restoreFocus();
}
},
asc_setCellStrikeout: function (isStrikeout) {
var ws = this.wb.getWorksheet();
if ( ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.setCellStrikeout )
ws.objectRender.controller.setCellStrikeout(isStrikeout);
else {
this.wb.setFontAttributes("s", isStrikeout);
this.wb.restoreFocus();
}
},
asc_setCellSubscript: function (isSubscript) {
var ws = this.wb.getWorksheet();
if ( ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.setCellSubscript )
ws.objectRender.controller.setCellSubscript(isSubscript);
else {
this.wb.setFontAttributes("fa", isSubscript ? "subscript" : "none");
this.wb.restoreFocus();
}
},
asc_setCellSuperscript: function (isSuperscript) {
var ws = this.wb.getWorksheet();
if ( ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.setCellSuperscript )
ws.objectRender.controller.setCellSuperscript(isSuperscript);
else {
this.wb.setFontAttributes("fa", isSuperscript ? "superscript" : "none");
this.wb.restoreFocus();
}
},
asc_setCellAlign: function (align) {
var ws = this.wb.getWorksheet();
if ( ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.setCellAlign )
ws.objectRender.controller.setCellAlign(align);
else {
this.wb.getWorksheet().setSelectionInfo("a", align);
this.wb.restoreFocus();
}
},
asc_setCellVertAlign: function (align) {
var ws = this.wb.getWorksheet();
if ( ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.setCellVertAlign )
ws.objectRender.controller.setCellVertAlign(align);
else {
this.wb.getWorksheet().setSelectionInfo("va", align);
this.wb.restoreFocus();
}
},
asc_setCellTextWrap: function (isWrapped) {
var ws = this.wb.getWorksheet();
if ( ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.setCellTextWrap )
ws.objectRender.controller.setCellTextWrap(isWrapped);
else {
this.wb.getWorksheet().setSelectionInfo("wrap", isWrapped);
this.wb.restoreFocus();
}
},
asc_setCellTextShrink: function (isShrinked) {
var ws = this.wb.getWorksheet();
if ( ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.setCellTextShrink )
ws.objectRender.controller.setCellTextShrink(isShrinked);
else {
this.wb.getWorksheet().setSelectionInfo("shrink", isShrinked);
this.wb.restoreFocus();
}
},
asc_setCellTextColor: function (color) {
var ws = this.wb.getWorksheet();
if ( ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.setCellTextColor )
ws.objectRender.controller.setCellTextColor(color);
else {
if (color instanceof CAscColor) {
color = CorrectAscColor(color);
this.wb.setFontAttributes("c", color);
this.wb.restoreFocus();
}
}
},
asc_setCellBackgroundColor: function (color) {
var ws = this.wb.getWorksheet();
if ( ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.setCellBackgroundColor )
ws.objectRender.controller.setCellBackgroundColor(color);
else
{
if(color instanceof CAscColor || null == color)
{
if(null != color)
color = CorrectAscColor(color);
this.wb.getWorksheet().setSelectionInfo("bc", color);
this.wb.restoreFocus();
}
}
},
asc_setCellBorders: function (borders) {
this.wb.getWorksheet().setSelectionInfo("border", borders);
this.wb.restoreFocus();
},
// /**
// * Устанавливает текст в ячейке или в редакторе ячейки
// * @param {String} v новый текст
// * @param {Number} pos позиция текста в редакторе (для редактора ячейки)
// * @param {Number} len длина замещаемого текста (для редактора ячейки)
// */
// asc_setCellValue: function (v, pos, len) {
// this.wb.setCellValue(v, pos, len);
// }, - не используется (и не стоит так делать)
asc_setCellFormat: function (format) {
this.wb.getWorksheet().setSelectionInfo("format", format);
this.wb.restoreFocus();
},
asc_setCellAngle: function (angle) {
var ws = this.wb.getWorksheet();
if ( ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.setCellAngle )
ws.objectRender.controller.setCellAngle(angle);
else
{
this.wb.getWorksheet().setSelectionInfo("angle", angle);
this.wb.restoreFocus();
}
},
asc_setCellStyle: function (name) {
this.wb.getWorksheet().setSelectionInfo("style", name);
this.wb.restoreFocus();
},
asc_increaseCellDigitNumbers: function () {
this.wb.getWorksheet().setSelectionInfo("changeDigNum", +1);
this.wb.restoreFocus();
},
asc_decreaseCellDigitNumbers: function () {
this.wb.getWorksheet().setSelectionInfo("changeDigNum", -1);
this.wb.restoreFocus();
},
// Увеличение размера шрифта
asc_increaseFontSize: function () {
var ws = this.wb.getWorksheet();
if ( ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.increaseFontSize )
ws.objectRender.controller.increaseFontSize();
else{
this.wb.changeFontSize("changeFontSize", true);
this.wb.restoreFocus();
}
},
// Уменьшение размера шрифта
asc_decreaseFontSize: function () {
var ws = this.wb.getWorksheet();
if ( ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.decreaseFontSize )
ws.objectRender.controller.decreaseFontSize();
else{
this.wb.changeFontSize("changeFontSize", false);
this.wb.restoreFocus();
}
},
asc_onMouseUp: function (x, y) {
this.controller._onWindowMouseUpExternal(x, y);
},
//
asc_selectFunction: function () {
},
asc_insertHyperlink: function (options) {
// На всякий случай проверка (вдруг кто собирается вызвать...)
this.wb.closeCellEditor();
this.wb.getWorksheet().setSelectionInfo("hyperlink", options);
this.wb.restoreFocus();
},
asc_insertFormula: function (functionName, autoComplet) {
this.wb.insertFormulaInEditor(functionName, autoComplet);
this.wb.restoreFocus();
},
asc_getFormulasInfo: function () {
return getFormulasInfo();
},
asc_recalc : function(){
this.wbModel.recalc();
// this.wb.getWorksheet().changeWorksheet("update");
},
asc_setFontRenderingMode: function (mode) {
if (mode !== this.fontRenderingMode) {
this.fontRenderingMode = mode;
if (this.wb)
this.wb.setFontRenderingMode(mode, /*isInit*/false);
}
},
/**
* Режим выбора диапазона
* @param {Boolean} isSelectionDialogMode
* @param selectRange
*/
asc_setSelectionDialogMode: function (isSelectionDialogMode, selectRange) {
this.controller.setSelectionDialogMode(isSelectionDialogMode);
if (this.wb)
this.wb.setSelectionDialogMode(isSelectionDialogMode, selectRange);
},
asc_SendThemeColors : function (colors, standart_colors) {
this._gui_control_colors = { Colors : colors, StandartColors : standart_colors };
var ret = this.handlers.trigger("asc_onSendThemeColors", colors, standart_colors);
if (ret)
this._gui_control_colors = null;
},
asc_SendThemeColorSchemes : function (param) {
this._gui_color_schemes = param;
var ret = this.handlers.trigger("asc_onSendThemeColorSchemes", param);
if (ret)
this._gui_color_schemes = null;
},
asc_ChangeColorScheme : function (index_scheme) {
var t = this;
var onChangeColorScheme = function (res) {
if (res) {
var theme = t.wbModel.theme;
var oldClrScheme = theme.themeElements.clrScheme;
var _count_defaults = g_oUserColorScheme.length;
if (index_scheme < _count_defaults) {
var _obj = g_oUserColorScheme[index_scheme];
var scheme = new ClrScheme();
var _c;
_c = _obj["dk1"];
scheme.colors[8] = CreateUniColorRGB(_c["R"], _c["G"], _c["B"]);
_c = _obj["lt1"];
scheme.colors[12] = CreateUniColorRGB(_c["R"], _c["G"], _c["B"]);
_c = _obj["dk2"];
scheme.colors[9] = CreateUniColorRGB(_c["R"], _c["G"], _c["B"]);
_c = _obj["lt2"];
scheme.colors[13] = CreateUniColorRGB(_c["R"], _c["G"], _c["B"]);
_c = _obj["accent1"];
scheme.colors[0] = CreateUniColorRGB(_c["R"], _c["G"], _c["B"]);
_c = _obj["accent2"];
scheme.colors[1] = CreateUniColorRGB(_c["R"], _c["G"], _c["B"]);
_c = _obj["accent3"];
scheme.colors[2] = CreateUniColorRGB(_c["R"], _c["G"], _c["B"]);
_c = _obj["accent4"];
scheme.colors[3] = CreateUniColorRGB(_c["R"], _c["G"], _c["B"]);
_c = _obj["accent5"];
scheme.colors[4] = CreateUniColorRGB(_c["R"], _c["G"], _c["B"]);
_c = _obj["accent6"];
scheme.colors[5] = CreateUniColorRGB(_c["R"], _c["G"], _c["B"]);
_c = _obj["hlink"];
scheme.colors[11] = CreateUniColorRGB(_c["R"], _c["G"], _c["B"]);
_c = _obj["folHlink"];
scheme.colors[10] = CreateUniColorRGB(_c["R"], _c["G"], _c["B"]);
theme.themeElements.clrScheme = scheme;
} else {
index_scheme -= _count_defaults;
if (index_scheme < 0 || index_scheme >= theme.extraClrSchemeLst.length)
return;
theme.themeElements.clrScheme = theme.extraClrSchemeLst[index_scheme].clrScheme.createDuplicate();
}
History.Create_NewPoint();
//не делаем Duplicate потому что предполагаем что схема не будет менять частями, а только обьектом целиком.
History.Add(g_oUndoRedoWorkbook, historyitem_Workbook_ChangeColorScheme, null, null, new UndoRedoData_ClrScheme(oldClrScheme, theme.themeElements.clrScheme));
t.asc_AfterChangeColorScheme();
}
};
// ToDo поправить заглушку, сделать новый тип lock element-а
var sheetId = -1; // Делаем не существующий лист и не существующий объект
var lockInfo = this.collaborativeEditing.getLockInfo(c_oAscLockTypeElem.Object, /*subType*/null, sheetId, sheetId);
this._getIsLockObjectSheet(lockInfo, onChangeColorScheme);
},
asc_AfterChangeColorScheme : function() {
this.wbModel.rebuildColors();
this.asc_CheckGuiControlColors();
this.asc_ApplyColorScheme(true);
},
asc_ApplyColorScheme : function(bRedraw) {
this.chartStyleManager.init();
this.chartPreviewManager.init();
this.handlers.trigger("asc_onUpdateChartStyles");
var ws = this.wb.getWorksheet();
ws.objectRender.controller.applyColorScheme();
// На view-режиме не нужно отправлять стили
if (this.controller.getViewerMode && true !== this.controller.getViewerMode()) {
// Отправка стилей
this._sendWorkbookStyles();
}
if (bRedraw) {
var ws = this.wb.getWorksheet();
// ToDo - от _reDrawFilters в будущем стоит избавиться, ведь она проставляет стили ячейкам, а это не нужно делать (сменить отрисовку)
// ToDo - и еще, в _reDrawFilters делается отрисовка + в drawWS делается отрисовка
ws.autoFilters._reDrawFilters(ws,true);
this.wb.drawWS();
}
},
/////////////////////////////////////////////////////////////////////////
///////////////////CoAuthoring and Chat api//////////////////////////////
/////////////////////////////////////////////////////////////////////////
// send chart message
asc_coAuthoringChatSendMessage: function(message) {
if (!this.CoAuthoringApi)
return; // Error
this.CoAuthoringApi.sendMessage(message);
},
// get chart messages, возвращается массив CChatMessage
asc_coAuthoringChatGetMessages: function() {
if (!this.CoAuthoringApi)
return; // Error
this.CoAuthoringApi.getMessages();
},
// get users, возвращается массив users
asc_coAuthoringGetUsers: function() {
if (!this.CoAuthoringApi)
return; // Error
this.CoAuthoringApi.getUsers();
},
// server disconnect
asc_coAuthoringDisconnect: function () {
if (!this.CoAuthoringApi)
return; // Error
this.CoAuthoringApi.disconnect();
},
/////////////////////////////////////////////////////////////////////////
////////////////////////////AutoSave api/////////////////////////////////
/////////////////////////////////////////////////////////////////////////
autoSaveInit: function (autoSaveGap) {
// Очищаем предыдущий таймер
if (null !== this.autoSaveTimeOutId)
clearTimeout(this.autoSaveTimeOutId);
if (autoSaveGap || this.autoSaveGap) {
var t = this;
this.autoSaveTimeOutId = setTimeout(function () {
t.autoSaveTimeOutId = null;
if (t.asc_isDocumentModified()) {
// Если мы редактируем ячейку, то запустим автосохранение чуть позднее
if (t.asc_getCellEditMode())
t.autoSaveInit(t.autoSaveGapAsk);
else
t.asc_Save(/*isAutoSave*/true);
} else
t.autoSaveInit();
}, (autoSaveGap || this.autoSaveGap));
}
},
// offline mode
offlineModeInit: function() {
var t = this;
if (window['scriptBridge']) {
if (!window['scriptBridge']['_self']) {
window['scriptBridge']['_self'] = t;
}
if (!window['scriptBridge']['workPath']) {
window['scriptBridge']['workPath'] = function () {
return t.documentUrl;
};
}
if (!window['scriptBridge']['print']) {
window['scriptBridge']['print'] = function() {
var oAdditionalData = new Object();
oAdditionalData["documentId"] = t.documentId+ "." + t.documentFormat;
oAdditionalData["vkey"] = t.documentVKey;
oAdditionalData["outputformat"] = c_oAscFileType.PDFPRINT;
var bStart = false;
t.adjustPrint = new asc_CAdjustPrint();
t.printPagesData = t.wb.calcPagesPrint(t.adjustPrint);
var pdf_writer = new CPdfPrinter(t.wbModel.sUrlPath);
var isEndPrint = t.wb.printSheet(pdf_writer, t.printPagesData);
return pdf_writer.DocumentRenderer.Memory.GetBase64Memory();
};
}
if (!window['scriptBridge']['addFileImage']) {
window['scriptBridge']['addFileImage'] = function(imageUrl, x, y, width, height) {
var ws = t.wb.getWorksheet();
ws.model.workbook.handlers.trigger("asc_onStartAction", c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.LoadImage);
var options = null;
if (x && y) {
var picker = ws.objectRender.getPositionInfo(x,y);
options = {cell: {col: picker.col, row: picker.row}, width: width, height: height};
// console.log(picker);
}
ws.objectRender.addImageDrawingObject(imageUrl, options);
ws.model.workbook.handlers.trigger("asc_onEndAction", c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.LoadImage);
};
}
if (!window['scriptBridge']['isDocumentModified']) {
window['scriptBridge']['isDocumentModified'] = function() {
var f = t.asc_isDocumentModified();
t.isDocumentModify = false;
t.handlers.trigger("asc_onDocumentModifiedChanged", false);
return f;
};
}
if (!window['scriptBridge']['save']) {
window['scriptBridge']['save'] = function(sFormat) {
var oAdditionalData = new Object();
oAdditionalData["documentId"] = t.documentId + "." + t.documentFormat;
oAdditionalData["vkey"] = t.documentVKey;
oAdditionalData["outputformat"] = sFormat;
t.wb._initCommentsToSave();
var oBinaryFileWriter = new BinaryFileWriter(t.wbModel);
oAdditionalData["savetype"] = "completeall";
var data = oBinaryFileWriter.Write();
t.asc_OnSaveEnd(true);
return data;
}
}
if (!window['scriptBridge']['saveEnd']) {
window['scriptBridge']['saveEnd'] = function() {
t.asc_OnSaveEnd(true);
}
}
if (!window['scriptBridge']['showAdvancedOptionsDialog']) {
window['scriptBridge']['showAdvancedOptionsDialog'] = function(codepages) {
var cp = JSON.parse(codepages);
t.advancedOptionsAction = c_oAscAdvancedOptionsAction.Save;
t.handlers.trigger("asc_onAdvancedOptions", new asc.asc_CAdvancedOptions(c_oAscAdvancedOptionsID.CSV,cp), t.advancedOptionsAction);
}
}
if (!window['scriptBridge']['updateTitle']) {
window['scriptBridge']['updateTitle'] = function(title) {
t.documentTitle = title;
}
}
if (!window['scriptBridge']['loadDocumentFromString']) {
window['scriptBridge']['loadDocumentFromString'] = function(workbook) {
var wb = new Workbook("", t.handlers, t);
wb.initGlobalObjects();
t.wbModel = wb;
var oBinaryFileReader = new BinaryFileReader("");
oBinaryFileReader.Read(workbook, wb);
t._startOpenDocument({returnCode: 0, val:wb});
}
}
}
},
offlineModeLoadDocument: function() {
var t = this;
t.asc_StartAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.Open);
function loadDocument (data) {
var workbook = data;
if (!data || c_oSerFormat.Signature !== data.substring(0, c_oSerFormat.Signature.length)) {
workbook = "XLSY;v1;1001;BAKAAgAAAwwDAAAEHwMAAADgAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAAHgAAAAEZAAAAAAAAAAABAAAAAAIAAAAABAAAAAAFAAAAAAIdAAAAAxgAAAAGBAAAAAAHBAAAAAAIBAAAAAAJBAAAAAAECgAAAAUAAAAABQAAAAAGLwAAAAcqAAAAAQYGAAAAAAQAAAD/BAYOAAAAQwBhAGwAaQBiAHIAaQAGBQAAAAAAACZADwAAAAAAAAAAAQUAAAACAAAAAL0AAAAAOgAAAAEYAAAAAAYMAAAAUwBoAGUAZQB0ADEAAQQBAAAABAQAAABBADEACwoAAAABBQAAAAAAAC5ACQAAAAAAOgAAAAEYAAAAAAYMAAAAUwBoAGUAZQB0ADIAAQQCAAAABAQAAABBADEACwoAAAABBQAAAAAAAC5ACQAAAAAAOgAAAAEYAAAAAAYMAAAAUwBoAGUAZQB0ADMAAQQDAAAABAQAAABBADEACwoAAAABBQAAAAAAAC5ACQAAAAAFAAAAAAAAAAA=";
}
var wb = new Workbook("", t.handlers, t);
wb.initGlobalObjects();
t.wbModel = wb;
var oBinaryFileReader = new BinaryFileReader("");
oBinaryFileReader.Read(workbook, wb);
t._startOpenDocument({returnCode: 0, val:wb});
}
$.ajax({
type: 'GET',
url : t.documentUrl + "editor.js?callback=?",
jsonpCallback: 'jsonCallback',
async: false,
cache: false,
dataType: 'jsonp',
contentType: "application/json",
crossDomain: true,
success: function(data) {
loadDocument(data);
},
error: function(jqXHR, textStatus, ex) {
// console.log(textStatus + "," + ex + "," + jqXHR.responseText);
loadDocument(undefined);
}
});
},
asc_openNewDocument: function () {
if (undefined != window['appBridge']) {
window['appBridge']['dummyCommandNewDocument'] ();
}
},
asc_loadDocumentFromDisk: function () {
if (undefined != window['appBridge']) {
window['appBridge']['dummyCommandLoadDocumentFromDisk'] ();
}
}
};
function asc_ajax(obj){
var url = "", type = "GET",
async = true, data = null, dataType = "text/xml",
error = null, success = null, httpRequest = null,
init = function (obj){
if ( typeof obj.url !== 'undefined' ){
url = obj.url;
}
if ( typeof obj.type !== 'undefined' ){
type = obj.type;
}
if ( typeof obj.async !== 'undefined' ){
async = obj.async;
}
if ( typeof obj.data !== 'undefined' ){
data = obj.data;
}
if ( typeof obj.dataType !== 'undefined' ){
dataType = obj.dataType;
}
if ( typeof obj.error !== 'undefined' ){
error = obj.error;
}
if ( typeof obj.success !== 'undefined' ){
success = obj.success;
}
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
httpRequest = new XMLHttpRequest();
if (httpRequest.overrideMimeType) {
httpRequest.overrideMimeType(dataType);
}
}
else if (window.ActiveXObject) { // IE
try {
httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {}
}
}
httpRequest.onreadystatechange = function(){
respons(this);
};
send();
},
send = function(){
httpRequest.open(type, url, async);
if (type === "POST")
httpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
httpRequest.send(data);
},
respons = function(httpRequest){
switch (httpRequest.readyState)
{
case 0:
// The object has been created, but not initialized (the open method has not been called).
break;
case 1:
// A request has been opened, but the send method has not been called.
break;
case 2:
// The send method has been called. No data is available yet.
break;
case 3:
// Some data has been received; however, neither responseText nor responseBody is available.
break;
case 4:
if (httpRequest.status === 200 || httpRequest.status === 1223) {
if (typeof success === "function")
success(httpRequest.responseText);
} else {
if (typeof error === "function")
error(httpRequest,httpRequest.statusText,httpRequest.status);
}
break;
}
};
init(obj);
};
function _mapAscServerErrorToAscError(nServerError)
{
var nRes = c_oAscError.ID.Unknown;
switch(nServerError)
{
case c_oAscServerError.NoError : nRes = c_oAscError.ID.No;break;
case c_oAscServerError.TaskQueue :
case c_oAscServerError.TaskResult : nRes = c_oAscError.ID.Database;break;
case c_oAscServerError.ConvertDownload : nRes = c_oAscError.ID.DownloadError;break;
case c_oAscServerError.ConvertTimeout : nRes = c_oAscError.ID.ConvertationTimeout;break;
case c_oAscServerError.ConvertUnknownFormat :
case c_oAscServerError.ConvertReadFile :
case c_oAscServerError.Convert : nRes = c_oAscError.ID.ConvertationError;break;
case c_oAscServerError.UploadContentLength : nRes = c_oAscError.ID.UplImageSize;break;
case c_oAscServerError.UploadExtension : nRes = c_oAscError.ID.UplImageExt;break;
case c_oAscServerError.UploadCountFiles : nRes = c_oAscError.ID.UplImageFileCount;break;
case c_oAscServerError.VKey : nRes = c_oAscError.ID.FileVKey;break;
case c_oAscServerError.VKeyEncrypt : nRes = c_oAscError.ID.VKeyEncrypt;break;
case c_oAscServerError.VKeyKeyExpire : nRes = c_oAscError.ID.KeyExpire;break;
case c_oAscServerError.VKeyUserCountExceed : nRes = c_oAscError.ID.UserCountExceed;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 = c_oAscError.ID.Unknown;break;
}
return nRes;
}
/*
* Export
* -----------------------------------------------------------------------------
*/
asc["spreadsheet_api"] = spreadsheet_api;
prot = spreadsheet_api.prototype;
prot["asc_Init"] = prot.asc_Init;
prot["asc_setDocInfo"] = prot.asc_setDocInfo;
prot["asc_getEditorPermissions"] = prot.asc_getEditorPermissions;
prot["asc_LoadDocument"] = prot.asc_LoadDocument;
prot["asc_LoadEmptyDocument"] = prot.asc_LoadEmptyDocument;
prot["asc_DownloadAs"] = prot.asc_DownloadAs;
prot["asc_Save"] = prot.asc_Save;
prot["asc_OnSaveEnd"] = prot.asc_OnSaveEnd;
prot["asc_Print"] = prot.asc_Print;
prot["asc_Resize"] = prot.asc_Resize;
prot["asc_Copy"] = prot.asc_Copy;
prot["asc_Paste"] = prot.asc_Paste;
prot["asc_Cut"] = prot.asc_Cut;
prot["asc_Undo"] = prot.asc_Undo;
prot["asc_Redo"] = prot.asc_Redo;
prot["asc_getDocumentName"] = prot.asc_getDocumentName;
prot["asc_getDocumentFormat"] = prot.asc_getDocumentFormat;
prot["asc_isDocumentModified"] = prot.asc_isDocumentModified;
prot["asc_setAutoSaveGap"] = prot.asc_setAutoSaveGap;
prot["asc_setMobileVersion"] = prot.asc_setMobileVersion;
prot["asc_setViewerMode"] = prot.asc_setViewerMode;
prot["asc_setUseEmbeddedCutFonts"] = prot.asc_setUseEmbeddedCutFonts;
prot["asc_setCoAuthoringEnable"] = prot.asc_setCoAuthoringEnable;
prot["asc_setAdvancedOptions"] = prot.asc_setAdvancedOptions;
prot["asc_setPageOptions"] = prot.asc_setPageOptions;
prot["asc_getPageOptions"] = prot.asc_getPageOptions;
prot["asc_registerCallback"] = prot.asc_registerCallback;
prot["asc_unregisterCallback"] = prot.asc_unregisterCallback;
prot["asc_getController"] = prot.asc_getController;
// Workbook interface
prot["asc_getWorksheetsCount"] = prot.asc_getWorksheetsCount;
prot["asc_getWorksheetName"] = prot.asc_getWorksheetName;
prot["asc_getActiveWorksheetIndex"] = prot.asc_getActiveWorksheetIndex;
prot["asc_getActiveWorksheetId"] = prot.asc_getActiveWorksheetId;
prot["asc_getWorksheetId"] = prot.asc_getWorksheetId;
prot["asc_isWorksheetHidden"] = prot.asc_isWorksheetHidden;
prot["asc_isWorksheetLockedOrDeleted"] = prot.asc_isWorksheetLockedOrDeleted;
prot["asc_isWorkbookLocked"] = prot.asc_isWorkbookLocked;
prot["asc_getHiddenWorksheets"] = prot.asc_getHiddenWorksheets;
prot["asc_showWorksheet"] = prot.asc_showWorksheet;
prot["asc_showActiveWorksheet"] = prot.asc_showActiveWorksheet;
prot["asc_hideWorksheet"] = prot.asc_hideWorksheet;
prot["asc_renameWorksheet"] = prot.asc_renameWorksheet;
prot["asc_addWorksheet"] = prot.asc_addWorksheet;
prot["asc_insertWorksheet"] = prot.asc_insertWorksheet;
prot["asc_deleteWorksheet"] = prot.asc_deleteWorksheet;
prot["asc_moveWorksheet"] = prot.asc_moveWorksheet;
prot["asc_copyWorksheet"] = prot.asc_copyWorksheet;
prot["asc_cleanSelection"] = prot.asc_cleanSelection;
prot["asc_getZoom"] = prot.asc_getZoom;
prot["asc_setZoom"] = prot.asc_setZoom;
prot["asc_enableKeyEvents"] = prot.asc_enableKeyEvents;
prot["asc_findText"] = prot.asc_findText;
prot["asc_replaceText"] = prot.asc_replaceText;
prot["asc_findCell"] = prot.asc_findCell;
//prot["asc_openCellEditor"] = prot.asc_openCellEditor; - не используется (и не стоит так делать)
prot["asc_closeCellEditor"] = prot.asc_closeCellEditor;
// Spreadsheet interface
prot["asc_getColumnWidth"] = prot.asc_getColumnWidth;
prot["asc_setColumnWidth"] = prot.asc_setColumnWidth;
prot["asc_insertColumnsBefore"] = prot.asc_insertColumnsBefore;
prot["asc_insertColumnsAfter"] = prot.asc_insertColumnsAfter;
prot["asc_deleteColumns"] = prot.asc_deleteColumns;
prot["asc_showColumns"] = prot.asc_showColumns;
prot["asc_hideColumns"] = prot.asc_hideColumns;
prot["asc_getRowHeight"] = prot.asc_getRowHeight;
prot["asc_setRowHeight"] = prot.asc_setRowHeight;
prot["asc_insertRowsBefore"] = prot.asc_insertRowsBefore;
prot["asc_insertRowsAfter"] = prot.asc_insertRowsAfter;
prot["asc_deleteRows"] = prot.asc_deleteRows;
prot["asc_showRows"] = prot.asc_showRows;
prot["asc_hideRows"] = prot.asc_hideRows;
prot["asc_insertCells"] = prot.asc_insertCells;
prot["asc_deleteCells"] = prot.asc_deleteCells;
prot["asc_mergeCells"] = prot.asc_mergeCells;
prot["asc_sortCells"] = prot.asc_sortCells;
prot["asc_emptyCells"] = prot.asc_emptyCells;
prot["asc_mergeCellsDataLost"] = prot.asc_mergeCellsDataLost;
prot["asc_getSheetViewSettings"] = prot.asc_getSheetViewSettings;
prot["asc_setSheetViewSettings"] = prot.asc_setSheetViewSettings;
// Auto filters interface
prot["asc_addAutoFilter"] = prot.asc_addAutoFilter;
prot["asc_applyAutoFilter"] = prot.asc_applyAutoFilter;
prot["asc_sortColFilter"] = prot.asc_sortColFilter;
prot["asc_getAddFormatTableOptions"] = prot.asc_getAddFormatTableOptions;
// Drawing objects interface
prot["asc_showDrawingObjects"] = prot.asc_showDrawingObjects;
prot["asc_drawingObjectsExist"] = prot.asc_drawingObjectsExist;
prot["asc_getChartObject"] = prot.asc_getChartObject;
prot["asc_addChartDrawingObject"] = prot.asc_addChartDrawingObject;
prot["asc_editChartDrawingObject"] = prot.asc_editChartDrawingObject;
prot["asc_addImageDrawingObject"] = prot.asc_addImageDrawingObject;
prot["asc_setSelectedDrawingObjectLayer"] = prot.asc_setSelectedDrawingObjectLayer;
prot["asc_getChartPreviews"] = prot.asc_getChartPreviews;
prot["asc_checkChartInterval"] = prot.asc_checkChartInterval;
prot["asc_getBinaryFileWriter"] = prot.asc_getBinaryFileWriter;
prot["asc_getWordChartObject"] = prot.asc_getWordChartObject;
prot["asc_cleanWorksheet"] = prot.asc_cleanWorksheet;
prot["asc_showImageFileDialog"] = prot.asc_showImageFileDialog;
// Cell comment interface
prot["asc_addComment"] = prot.asc_addComment;
prot["asc_changeComment"] = prot.asc_changeComment;
prot["asc_findComment"] = prot.asc_findComment;
prot["asc_removeComment"] = prot.asc_removeComment;
prot["asc_showComment"] = prot.asc_showComment;
prot["asc_selectComment"] = prot.asc_selectComment;
prot["asc_showComments"] = prot.asc_showComments;
prot["asc_hideComments"] = prot.asc_hideComments;
prot["asc_getComments"] = prot.asc_getComments;
prot["asc_getDocumentComments"] = prot.asc_getDocumentComments;
prot["asc_getWorkbookComments"] = prot.asc_getWorkbookComments;
// Shapes
prot["asc_startAddShape"] = prot.asc_startAddShape;
prot["asc_endAddShape"] = prot.asc_endAddShape;
prot["asc_isAddAutoshape"] = prot.asc_isAddAutoshape;
prot["asc_canGroupGraphicsObjects"] = prot.asc_canGroupGraphicsObjects;
prot["asc_groupGraphicsObjects"] = prot.asc_groupGraphicsObjects;
prot["asc_canUnGroupGraphicsObjects"] = prot.asc_canUnGroupGraphicsObjects;
prot["asc_unGroupGraphicsObjects"] = prot.asc_unGroupGraphicsObjects;
prot["asc_getGraphicObjectProps"] = prot.asc_getGraphicObjectProps;
prot["asc_setGraphicObjectProps"] = prot.asc_setGraphicObjectProps;
prot["asc_getOriginalImageSize"] = prot.asc_getOriginalImageSize;
prot["asc_changeShapeType"] = prot.asc_changeShapeType;
prot["asc_setInterfaceDrawImagePlaceShape"] = prot.asc_setInterfaceDrawImagePlaceShape;
prot["asc_changeImageFromFile"] = prot.asc_changeImageFromFile;
prot["asc_putPrLineSpacing"] = prot.asc_putPrLineSpacing;
prot["asc_putLineSpacingBeforeAfter"] = prot.asc_putLineSpacingBeforeAfter;
prot["asc_setDrawImagePlaceParagraph"] = prot.asc_setDrawImagePlaceParagraph;
prot["asc_changeShapeImageFromFile"] = prot.asc_changeShapeImageFromFile;
// Cell interface
prot["asc_getCellInfo"] = prot.asc_getCellInfo;
prot["asc_getActiveCellCoord"] = prot.asc_getActiveCellCoord;
prot["asc_setCellFontName"] = prot.asc_setCellFontName;
prot["asc_setCellFontSize"] = prot.asc_setCellFontSize;
prot["asc_setCellBold"] = prot.asc_setCellBold;
prot["asc_setCellItalic"] = prot.asc_setCellItalic;
prot["asc_setCellUnderline"] = prot.asc_setCellUnderline;
prot["asc_setCellStrikeout"] = prot.asc_setCellStrikeout;
prot["asc_setCellSubscript"] = prot.asc_setCellSubscript;
prot["asc_setCellSuperscript"] = prot.asc_setCellSuperscript;
prot["asc_setCellAlign"] = prot.asc_setCellAlign;
prot["asc_setCellVertAlign"] = prot.asc_setCellVertAlign;
prot["asc_setCellTextWrap"] = prot.asc_setCellTextWrap;
prot["asc_setCellTextShrink"] = prot.asc_setCellTextShrink;
prot["asc_setCellTextColor"] = prot.asc_setCellTextColor;
prot["asc_setCellBackgroundColor"] = prot.asc_setCellBackgroundColor;
prot["asc_setCellBorders"] = prot.asc_setCellBorders;
//prot["asc_setCellValue"] = prot.asc_setCellValue; - не используется (и не стоит так делать)
prot["asc_setCellFormat"] = prot.asc_setCellFormat;
prot["asc_setCellAngle"] = prot.asc_setCellAngle;
prot["asc_setCellStyle"] = prot.asc_setCellStyle;
prot["asc_increaseCellDigitNumbers"] = prot.asc_increaseCellDigitNumbers;
prot["asc_decreaseCellDigitNumbers"] = prot.asc_decreaseCellDigitNumbers;
prot["asc_increaseFontSize"] = prot.asc_increaseFontSize;
prot["asc_decreaseFontSize"] = prot.asc_decreaseFontSize;
prot["asc_onMouseUp"] = prot.asc_onMouseUp;
prot["asc_selectFunction"] = prot.asc_selectFunction;
prot["asc_insertHyperlink"] = prot.asc_insertHyperlink;
prot["asc_insertFormula"] = prot.asc_insertFormula;
prot["asc_getFormulasInfo"] = prot.asc_getFormulasInfo;
prot["asc_setFontRenderingMode"] = prot.asc_setFontRenderingMode;
prot["asc_setSelectionDialogMode"] = prot.asc_setSelectionDialogMode;
prot["asc_ChangeColorScheme"] = prot.asc_ChangeColorScheme;
/////////////////////////////////////////////////////////////////////////
///////////////////CoAuthoring and Chat api//////////////////////////////
/////////////////////////////////////////////////////////////////////////
prot["asc_coAuthoringChatSendMessage"] = prot.asc_coAuthoringChatSendMessage;
prot["asc_coAuthoringGetUsers"] = prot.asc_coAuthoringGetUsers;
prot["asc_coAuthoringChatGetMessages"] = prot.asc_coAuthoringChatGetMessages;
prot["asc_coAuthoringDisconnect"] = prot.asc_coAuthoringDisconnect;
// offline mode
prot["asc_openNewDocument"] = prot.asc_openNewDocument;
prot["asc_loadDocumentFromDisk"] = prot. asc_loadDocumentFromDisk;
}
)(jQuery, window);