/* * (c) Copyright Ascensio System SIA 2010-2015 * * This program is a free software product. You can redistribute it and/or * modify it under the terms of the GNU Affero General Public License (AGPL) * version 3 as published by the Free Software Foundation. In accordance with * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect * that Ascensio System SIA expressly excludes the warranty of non-infringement * of any third-party rights. * * This program is distributed WITHOUT ANY WARRANTY; without even the implied * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html * * You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, * EU, LV-1021. * * The interactive user interfaces in modified source and object code versions * of the Program must display Appropriate Legal Notices, as required under * Section 5 of the GNU AGPL version 3. * * Pursuant to Section 7(b) of the License you must retain the original Product * logo when distributing the program. Pursuant to Section 7(e) we decline to * grant you any rights under trademark law for use of our trademarks. * * All the Product's GUI elements, including illustrations and icon sets, as * well as technical writing content are licensed under the terms of the * Creative Commons Attribution-ShareAlike 4.0 International. See the License * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode * */ define(["core", "irregularstack", "common/main/lib/component/Window", "common/main/lib/component/LoadMask", "common/main/lib/component/Tooltip", "common/main/lib/controller/Fonts", "spreadsheeteditor/main/app/collection/ShapeGroups", "spreadsheeteditor/main/app/collection/TableTemplates", "spreadsheeteditor/main/app/controller/FormulaDialog", "spreadsheeteditor/main/app/view/OpenDialog"], function () { SSE.Controllers.Main = Backbone.Controller.extend(_.extend((function () { var InitApplication = -254; var ApplyEditRights = -255; var LoadingDocument = -256; var mapCustomizationElements = { about: "button#left-btn-about", feedback: "button#left-btn-support", goback: "#fm-btn-back > a, #header-back > div" }; return { models: [], collections: ["ShapeGroups", "TableTemplates"], views: [], initialize: function () {}, onLaunch: function () { window.asc_CCommentData = window.Asc.asc_CCommentData || window.asc_CCommentData; window.storagename = "table"; this._state = {}; if (!Common.Utils.isBrowserSupported()) { Common.Utils.showBrowserRestriction(); Common.Gateway.reportError(undefined, this.unsupportedBrowserErrorText); return; } else {} var value = window.localStorage.getItem("sse-settings-fontrender"); if (value === null) { value = window.devicePixelRatio > 1 ? "1" : "3"; } this.api = new Asc.spreadsheet_api("editor_sdk", "ce-cell-content"); this.api.asc_setFontRenderingMode(parseInt(value)); this.api.asc_Init("../../../sdk/Fonts/"); this.api.asc_registerCallback("asc_onOpenDocumentProgress", _.bind(this.onOpenDocument, this)); this.api.asc_registerCallback("asc_onEndAction", _.bind(this.onLongActionEnd, this)); this.api.asc_registerCallback("asc_onError", _.bind(this.onError, this)); this.api.asc_registerCallback("asc_onСoAuthoringDisconnect", _.bind(this.onCoAuthoringDisconnect, this)); this.api.asc_registerCallback("asc_onAdvancedOptions", _.bind(this.onAdvancedOptions, this)); this.api.asc_registerCallback("asc_onDocumentUpdateVersion", _.bind(this.onUpdateVersion, this)); Common.NotificationCenter.on("api:disconnect", _.bind(this.onCoAuthoringDisconnect, this)); this.stackLongActions = new Common.IrregularStack({ strongCompare: this._compareActionStrong, weakCompare: this._compareActionWeak }); this.stackLongActions.push({ id: InitApplication, type: c_oAscAsyncActionType.BlockInteraction }); this.isShowOpenDialog = false; this.editorConfig = {}; Common.Gateway.on("init", _.bind(this.loadConfig, this)); Common.Gateway.on("showmessage", _.bind(this.onExternalMessage, this)); Common.Gateway.on("opendocument", _.bind(this.loadDocument, this)); Common.Gateway.on("internalcommand", _.bind(this.onInternalCommand, this)); Common.Gateway.ready(); this.getApplication().getController("Viewport").setApi(this.api); var me = this; $(document.body).on("focus", "input, textarea:not(#ce-cell-content)", function (e) { if (e && e.target && e.target.id && e.target.id === "clipboard-helper-text") { me.api.asc_enableKeyEvents(true); return; } if (this.isAppDisabled === true) { return; } me.api.asc_enableKeyEvents(false); }); $("#editor_sdk").focus(function (e) { if (this.isAppDisabled === true) { return; } if (!me.isModalShowed) { me.api.asc_enableKeyEvents(true); } }); $(document.body).on("blur", "input, textarea", function (e) { if (this.isAppDisabled === true) { return; } if (!me.isModalShowed) { me.api.asc_enableKeyEvents(true); } }); Common.NotificationCenter.on({ "modal:show": function (e) { me.isModalShowed = true; me.api.asc_enableKeyEvents(false); }, "modal:close": function (dlg) { if (dlg && dlg.$lastmodal && dlg.$lastmodal.size() < 1) { me.isModalShowed = false; me.api.asc_enableKeyEvents(true); } }, "modal:hide": function (dlg) { if (dlg && dlg.$lastmodal && dlg.$lastmodal.size() < 1) { me.isModalShowed = false; me.api.asc_enableKeyEvents(true); } }, "edit:complete": _.bind(this.onEditComplete, this), "settings:unitschanged": _.bind(this.unitsChanged, this) }); this.initNames(); Common.util.Shortcuts.delegateShortcuts({ shortcuts: { "command+s,ctrl+s": _.bind(function (e) { e.preventDefault(); e.stopPropagation(); }, this) } }); }, loadConfig: function (data) { this.editorConfig = $.extend(this.editorConfig, data.config); if ((this.editorConfig.user === undefined || this.editorConfig.user === null)) { this.editorConfig.user = {}; if (this.editorConfig.users) { this.editorConfig.userId = this.editorConfig.userId || 0; for (var i = 0; i < this.editorConfig.users.length; i++) { if (this.editorConfig.users[i].id === this.editorConfig.userId) { this.editorConfig.user = { id: this.editorConfig.users[i].id, name: this.editorConfig.users[i].username }; break; } } } } this.editorConfig.user.id = this.editorConfig.user.id || ("uid-" + Date.now()); this.editorConfig.user.name = this.editorConfig.user.name || this.textAnonymous; this.appOptions = {}; this.appOptions.user = this.editorConfig.user; this.appOptions.canBack = this.editorConfig.nativeApp !== true && this.editorConfig.canBackToFolder === true; this.appOptions.nativeApp = this.editorConfig.nativeApp === true; this.appOptions.isDesktopApp = this.editorConfig.targetApp == "desktop"; this.appOptions.canCreateNew = !_.isEmpty(this.editorConfig.createUrl) && !this.appOptions.isDesktopApp; this.appOptions.canOpenRecent = this.editorConfig.nativeApp !== true && this.editorConfig.recent !== undefined && !this.appOptions.isDesktopApp; this.appOptions.templates = this.editorConfig.templates; this.appOptions.recent = this.editorConfig.recent; this.appOptions.createUrl = this.editorConfig.createUrl; this.appOptions.lang = this.editorConfig.lang; this.appOptions.canAutosave = -1; this.appOptions.canAnalytics = false; this.appOptions.sharingSettingsUrl = this.editorConfig.sharingSettingsUrl; this.appOptions.isEditDiagram = this.editorConfig.mode == "editdiagram"; this.appOptions.customization = this.editorConfig.customization; this.headerView = this.getApplication().getController("Viewport").getView("Common.Views.Header"); this.headerView.setCanBack(this.editorConfig.canBackToFolder === true); if (this.editorConfig.lang) { this.api.asc_setLocale(this.editorConfig.lang); } }, loadDocument: function (data) { this.appOptions.spreadsheet = data.doc; this.permissions = {}; var docInfo = {}; if (data.doc) { this.permissions = _.extend(this.permissions, data.doc.permissions); docInfo.Id = data.doc.key; docInfo.Url = data.doc.url; docInfo.Title = data.doc.title; docInfo.Format = data.doc.fileType; docInfo.Options = data.doc.options; docInfo.UserId = this.editorConfig.user.id; docInfo.UserName = this.editorConfig.user.name; docInfo.VKey = data.doc.vkey; docInfo.Origin = data.doc.origin; docInfo.CallbackUrl = this.editorConfig.callbackUrl; this.headerView.setDocumentCaption(data.doc.title); } if (this.appOptions.isEditDiagram) { this.onEditorPermissions(undefined); } else { this.api.asc_registerCallback("asc_onGetEditorPermissions", _.bind(this.onEditorPermissions, this)); this.api.asc_setDocInfo(docInfo); this.api.asc_getEditorPermissions(); } }, onProcessSaveResult: function (data) { this.api.asc_OnSaveEnd(data.result); if (data && data.result === false) { Common.UI.error({ title: this.criticalErrorTitle, msg: _.isEmpty(data.message) ? this.errorProcessSaveResult : data.message }); } }, onProcessRightsChange: function (data) { if (data && data.enabled === false) { this.api.asc_coAuthoringDisconnect(); this.getApplication().getController("LeftMenu").leftMenu.getMenu("file").panels["rights"].onLostEditRights(); Common.UI.warning({ title: this.notcriticalErrorTitle, msg: _.isEmpty(data.message) ? this.warnProcessRightsChange : data.message }); } }, onProcessMouse: function (data) { if (data.type == "mouseup") { var editor = document.getElementById("editor_sdk"); if (editor) { var rect = editor.getBoundingClientRect(); var event = window.event || arguments.callee.caller.arguments[0]; this.api.asc_onMouseUp(event, data.x - rect.left, data.y - rect.top); } } }, goBack: function () { Common.Gateway.goBack(); }, onEditComplete: function (cmp, opts) { if (opts && opts.restorefocus && this.api.isCEditorFocused) { this.formulaInput.blur(); this.formulaInput.focus(); } else { this.getApplication().getController("DocumentHolder").getView("DocumentHolder").focus(); this.api.isCEditorFocused = false; } }, onLongActionBegin: function (type, id) { var action = { id: id, type: type }; this.stackLongActions.push(action); this.setLongActionView(action); }, onLongActionEnd: function (type, id) { var action = { id: id, type: type }; this.stackLongActions.pop(action); this.headerView.setDocumentCaption(this.api.asc_getDocumentName()); this.updateWindowTitle(this.api.asc_isDocumentModified(), true); if (type === c_oAscAsyncActionType.BlockInteraction && id == c_oAscAsyncAction.Open) { Common.Gateway.internalMessage("documentReady", {}); this.onDocumentReady(); } action = this.stackLongActions.get({ type: c_oAscAsyncActionType.Information }); action && this.setLongActionView(action); if (id == c_oAscAsyncAction.Save) { this.toolbarView.synchronizeChanges(); } action = this.stackLongActions.get({ type: c_oAscAsyncActionType.BlockInteraction }); if (action) { this.setLongActionView(action); } else { this.loadMask && this.loadMask.hide(); if (type == c_oAscAsyncActionType.BlockInteraction) { this.onEditComplete(this.loadMask, { restorefocus: true }); } } }, setLongActionView: function (action) { var title = ""; switch (action.id) { case c_oAscAsyncAction.Open: title = this.openTitleText; break; case c_oAscAsyncAction.Save: title = this.saveTitleText; break; case c_oAscAsyncAction.LoadDocumentFonts: title = this.loadFontsTitleText; break; case c_oAscAsyncAction.LoadDocumentImages: title = this.loadImagesTitleText; break; case c_oAscAsyncAction.LoadFont: title = this.loadFontTitleText; break; case c_oAscAsyncAction.LoadImage: title = this.loadImageTitleText; break; case c_oAscAsyncAction.DownloadAs: title = this.downloadTitleText; break; case c_oAscAsyncAction.Print: title = this.printTitleText; break; case c_oAscAsyncAction.UploadImage: title = this.uploadImageTitleText; break; case c_oAscAsyncAction.Recalc: title = this.titleRecalcFormulas; break; case c_oAscAsyncAction.SlowOperation: title = this.textPleaseWait; break; case c_oAscAsyncAction["PrepareToSave"]: title = this.savePreparingText; break; case ApplyEditRights: title = this.txtEditingMode; break; case LoadingDocument: title = this.loadingDocumentTitleText; break; } if (action.type == c_oAscAsyncActionType.BlockInteraction) { ! this.loadMask && (this.loadMask = new Common.UI.LoadMask({ owner: $("#viewport") })); this.loadMask.setTitle(title); if (!this.isShowOpenDialog) { this.loadMask.show(); } } }, onApplyEditRights: function (data) { if (data) { if (data.allowed) { this.onLongActionBegin(c_oAscAsyncActionType["BlockInteraction"], ApplyEditRights); this.appOptions.isEdit = true; var me = this; setTimeout(function () { me.applyModeCommonElements(); me.applyModeEditorElements("view"); me.api.asc_setViewerMode(false); var application = me.getApplication(); var documentHolderController = application.getController("DocumentHolder"); application.getController("LeftMenu").setMode(me.appOptions).createDelayedElements(); Common.NotificationCenter.trigger("layout:changed", "main"); var timer_sl = setInterval(function () { if (window.styles_loaded) { clearInterval(timer_sl); documentHolderController.getView("DocumentHolder").createDelayedElements(); documentHolderController.resetApi(); application.getController("Toolbar").createDelayedElements(); application.getController("RightMenu").createDelayedElements(); application.getController("Statusbar").getView("Statusbar").update(); application.getController("CellEditor").setMode(me.appOptions); me.api.asc_registerCallback("asc_onInitEditorShapes", _.bind(me.fillAutoShapes, me)); me.api.asc_registerCallback("asc_onSaveUrl", _.bind(me.onSaveUrl, me)); me.api.asc_registerCallback("asc_onDocumentModifiedChanged", _.bind(me.onDocumentModifiedChanged, me)); me.api.asc_registerCallback("asc_onDocumentCanSaveChanged", _.bind(me.onDocumentCanSaveChanged, me)); me.updateThemeColors(); application.getController("FormulaDialog").setApi(me.api); } }, 50); }, 50); } else { Common.UI.info({ title: this.requestEditFailedTitleText, msg: data.message || this.requestEditFailedMessageText }); } } }, onDocumentReady: function () { if (this._isDocReady) { return; } var me = this, value, tips = []; me._isDocReady = true; me.hidePreloader(); me.onLongActionEnd(c_oAscAsyncActionType["BlockInteraction"], LoadingDocument); value = this.appOptions.isEditDiagram ? 100 : window.localStorage.getItem("sse-settings-zoom"); this.api.asc_setZoom(!value ? 1 : parseInt(value) / 100); value = window.localStorage.getItem("sse-settings-livecomment"); this.isLiveCommenting = !(value !== null && parseInt(value) == 0); this.isLiveCommenting ? this.api.asc_showComments() : this.api.asc_hideComments(); me.api.asc_registerCallback("asc_onStartAction", _.bind(me.onLongActionBegin, me)); me.api.asc_registerCallback("asc_onConfirmAction", _.bind(me.onConfirmAction, me)); me.api.asc_registerCallback("asc_onActiveSheetChanged", _.bind(me.onActiveSheetChanged, me)); var application = me.getApplication(); me.headerView.setDocumentCaption(me.api.asc_getDocumentName()); me.updateWindowTitle(me.api.asc_isDocumentModified(), true); var toolbarController = application.getController("Toolbar"), statusbarController = application.getController("Statusbar"), documentHolderController = application.getController("DocumentHolder"), rightmenuController = application.getController("RightMenu"), leftmenuController = application.getController("LeftMenu"), celleditorController = application.getController("CellEditor"), statusbarView = statusbarController.getView("Statusbar"), leftMenuView = leftmenuController.getView("LeftMenu"), documentHolderView = documentHolderController.getView("DocumentHolder"), chatController = application.getController("Common.Controllers.Chat"); leftMenuView.getMenu("file").loadDocument({ doc: me.appOptions.spreadsheet }); leftmenuController.setMode(me.appOptions).createDelayedElements().setApi(me.api); leftMenuView.disableMenu("all", false); if (!me.appOptions.isEditDiagram && me.appOptions.canBranding) { me.getApplication().getController("LeftMenu").leftMenu.getMenu("about").setLicInfo(me.editorConfig.customization); } documentHolderController.setApi(me.api).loadConfig({ config: me.editorConfig }); celleditorController.setApi(me.api).setMode(this.appOptions); celleditorController.onApiCellSelection(me.api.asc_getCellInfo()); chatController.setApi(this.api).setMode(this.appOptions); statusbarController.createDelayedElements(); statusbarController.setApi(me.api); documentHolderView.setApi(me.api); statusbarView.update(); this.formulaInput = celleditorController.getView("CellEditor").$el.find("textarea"); if (me.appOptions.isEdit) { if (me.needToUpdateVersion) { Common.NotificationCenter.trigger("api:disconnect"); toolbarController.onApiCoAuthoringDisconnect(); } var timer_sl = setInterval(function () { if (window.styles_loaded || me.appOptions.isEditDiagram) { clearInterval(timer_sl); Common.NotificationCenter.trigger("comments:updatefilter", { property: "uid", value: new RegExp("^(doc_|sheet" + me.api.asc_getActiveWorksheetId() + "_)") }); documentHolderView.createDelayedElements(); toolbarController.createDelayedElements(); rightmenuController.createDelayedElements(); if (!me.appOptions.isEditDiagram) { me.api.asc_registerCallback("asc_onInitEditorShapes", _.bind(me.fillAutoShapes, me)); me.updateThemeColors(); } me.api.asc_registerCallback("asc_onSaveUrl", _.bind(me.onSaveUrl, me)); me.api.asc_registerCallback("asc_onDocumentModifiedChanged", _.bind(me.onDocumentModifiedChanged, me)); me.api.asc_registerCallback("asc_onDocumentCanSaveChanged", _.bind(me.onDocumentCanSaveChanged, me)); var formulasDlgController = application.getController("FormulaDialog"); if (formulasDlgController) { formulasDlgController.setApi(me.api); } if (me.needToUpdateVersion) { toolbarController.onApiCoAuthoringDisconnect(); } } }, 50); } if (me.appOptions.canAutosave) { value = window.localStorage.getItem("sse-settings-autosave"); value = (value !== null) ? parseInt(value) : 1; } else { value = 0; } me.api.asc_setAutoSaveGap(value); if (me.appOptions.canAnalytics) { Common.component.Analytics.initialize("UA-12442749-13", "Spreadsheet Editor"); } Common.Gateway.on("applyeditrights", _.bind(me.onApplyEditRights, me)); Common.Gateway.on("processsaveresult", _.bind(me.onProcessSaveResult, me)); Common.Gateway.on("processrightschange", _.bind(me.onProcessRightsChange, me)); Common.Gateway.on("processmouse", _.bind(me.onProcessMouse, me)); $(document).on("contextmenu", _.bind(me.onContextMenu, me)); if ( !! window["AscDesktopEditor"]) { Common.Utils.isIE9m && tips.push(me.warnBrowserIE9); ! Common.Utils.isGecko && !me.appOptions.isEditDiagram && !me.appOptions.nativeApp && (Math.abs(me.getBrowseZoomLevel() - 1) > 0.1) && tips.push(Common.Utils.String.platformKey(me.warnBrowserZoom, "{0}")); if (tips.length) { me.showTips(tips); } } }, onOpenDocument: function (progress) { var elem = document.getElementById("loadmask-text"); var proc = (progress.CurrentFont + progress.CurrentImage) / (progress.FontsCount + progress.ImagesCount); proc = this.textLoadingDocument + ": " + Math.round(proc * 100) + "%"; elem ? elem.innerHTML = proc : this.loadMask.setTitle(proc); }, onEditorPermissions: function (params) { if (params) { this.permissions.edit !== false && (this.permissions.edit = params.asc_getCanEdit()); this.permissions.download !== false && (this.permissions.download = params.asc_getCanDownload()); this.appOptions.canAutosave = this.editorConfig.canAutosave !== false && params.asc_getIsAutosaveEnable(); this.appOptions.canAnalytics = params.asc_getIsAnalyticsEnable(); this.appOptions.canCoAuthoring = true; this.appOptions.canLicense = params.asc_getCanLicense ? params.asc_getCanLicense() : false; this.appOptions.canComments = this.appOptions.canLicense && !((typeof(this.editorConfig.customization) == "object") && this.editorConfig.customization.comments === false); this.appOptions.canChat = this.appOptions.canLicense && !((typeof(this.editorConfig.customization) == "object") && this.editorConfig.customization.chat === false); this.appOptions.canBranding = params.asc_getCanBranding() && (typeof(this.editorConfig.customization) == "object"); if (this.appOptions.canBranding) { this.headerView.setBranding(this.editorConfig.customization); } } this.appOptions.canEdit = this.permissions.edit === true; this.appOptions.isEdit = this.permissions.edit === true && this.editorConfig.mode !== "view"; this.appOptions.canDownload = !this.appOptions.nativeApp && (this.permissions.download !== undefined ? this.permissions.download : true); this.applyModeCommonElements(); this.applyModeEditorElements(); this.api.asc_setViewerMode(!this.appOptions.isEdit); this.appOptions.isEditDiagram ? this.api.asc_LoadEmptyDocument() : this.api.asc_LoadDocument(); if (!this.appOptions.isEdit) { this.hidePreloader(); this.onLongActionBegin(c_oAscAsyncActionType.BlockInteraction, LoadingDocument); } }, applyModeCommonElements: function () { window.editor_elements_prepared = true; var value = window.localStorage.getItem("sse-hidden-title"); value = this.appOptions.isEdit && (value !== null && parseInt(value) == 1); var app = this.getApplication(), viewport = app.getController("Viewport").getView("Viewport"), statusbarView = app.getController("Statusbar").getView("Statusbar"); if (this.headerView) { this.headerView.setHeaderCaption(this.appOptions.isEdit ? "Spreadsheet Editor" : "Spreadsheet Viewer"); this.headerView.setVisible(!this.appOptions.nativeApp && !value && !this.appOptions.isDesktopApp && !this.appOptions.isEditDiagram); } viewport && viewport.setMode(this.appOptions, true); statusbarView && statusbarView.setMode(this.appOptions); app.getController("DocumentHolder").setMode(this.appOptions); if (this.appOptions.isEditDiagram) { statusbarView.hide(); app.getController("LeftMenu").getView("LeftMenu").hide(); $(window).mouseup(function (e) { Common.Gateway.internalMessage("processMouse", { event: "mouse:up" }); }).mousemove($.proxy(function (e) { if (this.isDiagramDrag) { Common.Gateway.internalMessage("processMouse", { event: "mouse:move", pagex: e.pageX, pagey: e.pageY }); } }, this)); } if (this.api) { var translateChart = new Asc.asc_CChartTranslate(); translateChart.asc_setTitle(this.txtDiagramTitle); translateChart.asc_setXAxis(this.txtXAxis); translateChart.asc_setYAxis(this.txtYAxis); translateChart.asc_setSeries(this.txtSeries); this.api.asc_setChartTranslate(translateChart); } if (!this.appOptions.isEditDiagram) { this.api.asc_registerCallback("asc_onSendThemeColors", _.bind(this.onSendThemeColors, this)); } }, applyModeEditorElements: function (prevmode) { if (this.appOptions.isEdit) { var me = this, application = this.getApplication(), toolbarController = application.getController("Toolbar"), statusbarController = application.getController("Statusbar"), rightmenuController = application.getController("RightMenu"), printController = application.getController("Print"), commentsController = application.getController("Common.Controllers.Comments"), fontsControllers = application.getController("Common.Controllers.Fonts"); fontsControllers && fontsControllers.setApi(me.api); toolbarController && toolbarController.setApi(me.api); if (commentsController) { commentsController.setMode(this.appOptions); commentsController.setConfig({ config: me.editorConfig, sdkviewname: "#ws-canvas-outer", hintmode: true }, me.api); } rightmenuController && rightmenuController.setApi(me.api); printController && printController.setApi(me.api); if (statusbarController) { statusbarController.getView("Statusbar").changeViewMode(true); } if (prevmode == "view") { if (commentsController) { Common.NotificationCenter.trigger("comments:updatefilter", { property: "uid", value: new RegExp("^(doc_|sheet" + this.api.asc_getActiveWorksheetId() + "_)") }); } } var viewport = this.getApplication().getController("Viewport").getView("Viewport"); viewport.applyEditorMode(); this.toolbarView = toolbarController.getView("Toolbar"); _.each([this.toolbarView, rightmenuController.getView("RightMenu")], function (view) { if (view) { view.setMode(me.appOptions); view.setApi(me.api); } }); if (this.toolbarView) { this.toolbarView.on("insertimage", _.bind(me.onInsertImage, me)); this.toolbarView.on("insertshape", _.bind(me.onInsertShape, me)); this.toolbarView.on("insertchart", _.bind(me.onInsertChart, me)); } var value = window.localStorage.getItem("sse-settings-unit"); Common.Utils.Metric.setCurrentMetric((value !== null) ? parseInt(value) : Common.Utils.Metric.c_MetricUnits.cm); if (!me.appOptions.isEditDiagram) { var options = {}; JSON.parse(window.localStorage.getItem("sse-hidden-title")) && (options.title = true); JSON.parse(window.localStorage.getItem("sse-hidden-formula")) && (options.formula = true); JSON.parse(window.localStorage.getItem("sse-hidden-headings")) && (options.headings = true); application.getController("Toolbar").hideElements(options); } else { rightmenuController.getView("RightMenu").hide(); } if (me.stackLongActions.exist({ id: ApplyEditRights, type: c_oAscAsyncActionType["BlockInteraction"] })) { me.onLongActionEnd(c_oAscAsyncActionType["BlockInteraction"], ApplyEditRights); } else { if (!this._isDocReady) { me.hidePreloader(); me.onLongActionBegin(c_oAscAsyncActionType["BlockInteraction"], LoadingDocument); } } window.onbeforeunload = _.bind(me.onBeforeUnload, me); } }, onExternalMessage: function (msg) { if (msg) { var tip = msg.msg.charAt(0).toUpperCase() + msg.msg.substring(1), title = (msg.severity.indexOf("error") >= 0) ? this.criticalErrorTitle : this.notcriticalErrorTitle; this.showTips([tip], false, title); Common.component.Analytics.trackEvent("External Error", msg.title); } }, onError: function (id, level, errData) { this.hidePreloader(); this.onLongActionEnd(c_oAscAsyncActionType.BlockInteraction, LoadingDocument); var config = { closable: false }; switch (id) { case c_oAscError.ID.Unknown: config.msg = this.unknownErrorText; break; case c_oAscError.ID.ConvertationTimeout: config.msg = this.convertationTimeoutText; break; case c_oAscError.ID.ConvertationError: config.msg = this.convertationErrorText; break; case c_oAscError.ID.DownloadError: config.msg = this.downloadErrorText; break; case c_oAscError.ID.UplImageSize: config.msg = this.uploadImageSizeMessage; break; case c_oAscError.ID.UplImageExt: config.msg = this.uploadImageExtMessage; break; case c_oAscError.ID.UplImageFileCount: config.msg = this.uploadImageFileCountMessage; break; case c_oAscError.ID.PastInMergeAreaError: config.msg = this.pastInMergeAreaError; break; case c_oAscError.ID.FrmlWrongCountParentheses: config.msg = this.errorWrongBracketsCount; break; case c_oAscError.ID.FrmlWrongOperator: config.msg = this.errorWrongOperator; break; case c_oAscError.ID.FrmlWrongMaxArgument: config.msg = this.errorCountArgExceed; break; case c_oAscError.ID.FrmlWrongCountArgument: config.msg = this.errorCountArg; break; case c_oAscError.ID.FrmlWrongFunctionName: config.msg = this.errorFormulaName; break; case c_oAscError.ID.FrmlAnotherParsingError: config.msg = this.errorFormulaParsing; break; case c_oAscError.ID.FrmlWrongArgumentRange: config.msg = this.errorArgsRange; break; case c_oAscError.ID.UnexpectedGuid: config.msg = this.errorUnexpectedGuid; break; case c_oAscError.ID.Database: config.msg = this.errorDatabaseConnection; break; case c_oAscError.ID.FileRequest: config.msg = this.errorFileRequest; break; case c_oAscError.ID.FileVKey: config.msg = this.errorFileVKey; break; case c_oAscError.ID.StockChartError: config.msg = this.errorStockChart; break; case c_oAscError.ID.DataRangeError: config.msg = this.errorDataRange; break; case c_oAscError.ID.FrmlOperandExpected: config.msg = this.errorOperandExpected; break; case c_oAscError.ID.VKeyEncrypt: config.msg = this.errorKeyEncrypt; break; case c_oAscError.ID.KeyExpire: config.msg = this.errorKeyExpire; break; case c_oAscError.ID.UserCountExceed: config.msg = this.errorUsersExceed; break; case c_oAscError.ID.CannotMoveRange: config.msg = this.errorMoveRange; break; case c_oAscError.ID.UplImageUrl: config.msg = this.errorBadImageUrl; break; case c_oAscError.ID.CoAuthoringDisconnect: config.msg = this.errorCoAuthoringDisconnect; break; case c_oAscError.ID.ConvertationPassword: config.msg = this.errorFilePassProtect; break; case c_oAscError.ID.AutoFilterDataRangeError: config.msg = this.errorAutoFilterDataRange; break; case c_oAscError.ID.AutoFilterChangeFormatTableError: config.msg = this.errorAutoFilterChangeFormatTable; break; case c_oAscError.ID.AutoFilterChangeError: config.msg = this.errorAutoFilterChange; break; case c_oAscError.ID.CannotFillRange: config.msg = this.errorFillRange; break; case c_oAscError.ID.UserDrop: config.msg = this.errorUserDrop; break; default: config.msg = this.errorDefaultMessage.replace("%1", id); break; } if (level == c_oAscError.Level.Critical) { Common.Gateway.reportError(id, config.msg); config.title = this.criticalErrorTitle; config.iconCls = "error"; if (this.editorConfig.canBackToFolder) { config.msg += "

" + this.criticalErrorExtText; config.callback = function (btn) { if (btn == "ok") { Common.Gateway.goBack(); } }; } } else { config.title = this.notcriticalErrorTitle; config.iconCls = "warn"; config.buttons = ["ok"]; config.callback = _.bind(function (btn) { this.onEditComplete(); }, this); } if ($(".asc-window.modal.alert:visible").length < 1) { Common.UI.alert(config); Common.component.Analytics.trackEvent("Internal Error", id.toString()); } }, onCoAuthoringDisconnect: function () { this.getApplication().getController("Viewport").getView("Viewport").setMode({ isDisconnected: true }); }, getBrowseZoomLevel: function () { if (Common.Utils.isIE) { return screen.logicalXDPI / screen.deviceXDPI; } else { var zoom = window.outerWidth / document.documentElement.clientWidth; if (Common.Utils.isSafari) { zoom = Math.floor(zoom * 10) / 10; } return zoom; } }, showTips: function (strings, autohide, title) { var me = this; if (!strings.length) { return; } if (typeof(strings) != "object") { strings = [strings]; } function showNextTip() { var str_tip = strings.shift(); if (str_tip) { str_tip += me.textCloseTip; tooltip.setTitle(str_tip); tooltip.show(); } } if (!this.tooltip) { this.tooltip = new Common.UI.Tooltip({ owner: this.toolbarView, hideonclick: true, placement: "bottom", cls: "main-info", offset: 30 }); } var tooltip = this.tooltip; tooltip.on("tooltip:hide", function () { setTimeout(showNextTip, 300); }); showNextTip(); }, updateWindowTitle: function (change, force) { if (this._state.isDocModified !== change || force) { var title = this.defaultTitleText; if (!_.isEmpty(this.headerView.getDocumentCaption())) { title = this.headerView.getDocumentCaption() + " - " + title; } if (change) { if (!_.isUndefined(title)) { title = "* " + title; this.headerView.setDocumentCaption(this.headerView.getDocumentCaption() + "*", true); } } else { this.headerView.setDocumentCaption(this.headerView.getDocumentCaption()); } if (window.document.title != title) { window.document.title = title; } this._state.isDocModified = change; } }, onDocumentChanged: function () {}, onDocumentModifiedChanged: function (change) { this.updateWindowTitle(change); Common.Gateway.setDocumentModified(change); if (this.toolbarView && this.api) { var isSyncButton = $(".btn-icon", this.toolbarView.btnSave.cmpEl).hasClass("btn-synch"); var cansave = this.api.asc_isDocumentCanSave(); if (this.toolbarView.btnSave.isDisabled() !== (!cansave && !isSyncButton)) { this.toolbarView.btnSave.setDisabled(!cansave); } } }, onDocumentCanSaveChanged: function (isCanSave) { if (this.toolbarView) { var isSyncButton = $(".btn-icon", this.toolbarView.btnSave.cmpEl).hasClass("btn-synch"); if (this.toolbarView.btnSave.isDisabled() !== (!isCanSave && !isSyncButton)) { this.toolbarView.btnSave.setDisabled(!isCanSave && !isSyncButton); } } }, onBeforeUnload: function () { var isEdit = this.permissions.edit === true && this.editorConfig.mode !== "view" && this.editorConfig.mode !== "editdiagram"; if (isEdit && this.api.asc_isDocumentModified()) { return this.leavePageText; } }, hidePreloader: function () { if ( !! this.appOptions.customization && !this.appOptions.customization.done) { this.appOptions.customization.done = true; Common.Utils.applyCustomization(this.appOptions.customization, mapCustomizationElements); } this.stackLongActions.pop({ id: InitApplication, type: c_oAscAsyncActionType.BlockInteraction }); Common.NotificationCenter.trigger("layout:changed", "main"); $("#loading-mask").hide().remove(); }, onSaveUrl: function (url) { Common.Gateway.save(url); }, onUpdateVersion: function (callback) { var me = this; me.needToUpdateVersion = true; me.onLongActionEnd(c_oAscAsyncActionType["BlockInteraction"], LoadingDocument); Common.UI.error({ msg: this.errorUpdateVersion, callback: function () { _.defer(function () { Common.Gateway.updateVersion(); if (callback) { callback.call(me); } me.onLongActionBegin(c_oAscAsyncActionType["BlockInteraction"], LoadingDocument); }); } }); }, onAdvancedOptions: function (advOptions) { if (advOptions.asc_getOptionId() == c_oAscAdvancedOptionsID.CSV) { var me = this; var dlg = new SSE.Views.OpenDialog({ codepages: advOptions.asc_getOptions().asc_getCodePages(), settings: advOptions.asc_getOptions().asc_getRecommendedSettings(), handler: function (encoding, delimiter) { me.isShowOpenDialog = false; if (me && me.api) { me.api.asc_setAdvancedOptions(c_oAscAdvancedOptionsID.CSV, new Asc.asc_CCSVAdvancedOptions(encoding, delimiter)); me.loadMask && me.loadMask.show(); } } }); this.isShowOpenDialog = true; this.loadMask && this.loadMask.hide(); this.onLongActionEnd(c_oAscAsyncActionType.BlockInteraction, LoadingDocument); dlg.show(); } }, onActiveSheetChanged: function (index) { if (!this.appOptions.isEditDiagram && window.editor_elements_prepared) { this.application.getController("Statusbar").selectTab(index); if (this.appOptions.isEdit) { Common.NotificationCenter.trigger("comments:updatefilter", { property: "uid", value: new RegExp("^(doc_|sheet" + this.api.asc_getWorksheetId(index) + "_)") }, false); } } }, onConfirmAction: function (id, apiCallback) { if (id == c_oAscConfirm.ConfirmReplaceRange) { var me = this; Common.UI.warning({ closable: false, title: this.notcriticalErrorTitle, msg: this.confirmMoveCellRange, buttons: ["yes", "no"], callback: _.bind(function (btn) { if (apiCallback) { apiCallback(btn === "ok"); } if (btn == "ok") { me.onEditComplete(me.application.getController("DocumentHolder").getView("DocumentHolder")); } }, this) }); } }, initNames: function () { this.shapeGroupNames = [this.txtBasicShapes, this.txtFiguredArrows, this.txtMath, this.txtCharts, this.txtStarsRibbons, this.txtCallouts, this.txtButtons, this.txtRectangles, this.txtLines]; }, fillAutoShapes: function (groupNames, shapes) { if (_.isEmpty(shapes) || _.isEmpty(groupNames) || shapes.length != groupNames.length) { return; } var me = this, shapegrouparray = [], shapeStore = this.getCollection("ShapeGroups"); shapeStore.reset(); var groupscount = groupNames.length; _.each(groupNames, function (groupName, index) { var store = new Backbone.Collection([], { model: SSE.Models.ShapeModel }); var cols = (shapes[index].length) > 18 ? 7 : 6, height = Math.ceil(shapes[index].length / cols) * 35 + 3, width = 30 * cols; _.each(shapes[index], function (shape, idx) { store.add({ imageUrl: shape.Image, data: { shapeType: shape.Type }, tip: me.textShape + " " + (idx + 1), allowSelected: false, selected: false }); }); shapegrouparray.push({ groupName: me.shapeGroupNames[index], groupStore: store, groupWidth: width, groupHeight: height }); }); if (groupscount > 0) { var store = new Backbone.Collection([], { model: SSE.Models.ShapeModel }); var cols = (shapes[groupscount - 1].length - 3) > 18 ? 7 : 6, height = Math.ceil((shapes[groupscount - 1].length - 3) / cols) * 35 + 3, width = 30 * cols; for (var i = 0; i < shapes[groupscount - 1].length - 3; i++) { var shape = shapes[groupscount - 1][i]; store.add({ imageUrl: shape.Image, data: { shapeType: shape.Type }, allowSelected: false, selected: false }); } shapegrouparray.push({ groupName: me.shapeGroupNames[groupscount - 1], groupStore: store, groupWidth: width, groupHeight: height }); } shapeStore.add(shapegrouparray); setTimeout(function () { me.getApplication().getController("Toolbar").fillAutoShapes(); }, 50); }, updateThemeColors: function () { var me = this; setTimeout(function () { me.getApplication().getController("RightMenu").UpdateThemeColors(); }, 50); setTimeout(function () { me.getApplication().getController("Toolbar").updateThemeColors(); }, 50); setTimeout(function () { me.getApplication().getController("Statusbar").updateThemeColors(); }, 50); }, onSendThemeColors: function (colors, standart_colors) { Common.Utils.ThemeColor.setColors(colors, standart_colors); if (window.styles_loaded && !this.appOptions.isEditDiagram) { this.updateThemeColors(); } }, loadLanguages: function () {}, onInsertImage: function () { this.getApplication().getController("RightMenu").onInsertImage(); }, onInsertChart: function () { this.getApplication().getController("RightMenu").onInsertChart(); }, onInsertShape: function () { this.getApplication().getController("RightMenu").onInsertShape(); }, onInternalCommand: function (data) { if (data) { switch (data.command) { case "setChartData": this.setChartData(data.data); break; case "getChartData": this.getChartData(); break; case "clearChartData": this.clearChartData(); break; case "setAppDisabled": this.isAppDisabled = data.data; this.api.asc_enableKeyEvents(false); break; case "queryClose": if ($("body .asc-window:visible").length === 0) { Common.Gateway.internalMessage("canClose", { mr: data.data.mr, answer: true }); } break; case "window:drag": this.isDiagramDrag = data.data; break; case "processmouse": this.onProcessMouse(data.data); break; } } }, setChartData: function (chart) { if (typeof chart === "object" && this.api) { this.api.asc_addChartDrawingObject(chart); } }, getChartData: function () { if (this.api) { var chartData = this.api.asc_getWordChartObject(); if (typeof chartData === "object") { Common.Gateway.internalMessage("chartData", { data: chartData }); } } }, clearChartData: function () { this.api && this.api.asc_cleanWorksheet(); }, unitsChanged: function (m) { var value = window.localStorage.getItem("sse-settings-unit"); Common.Utils.Metric.setCurrentMetric((value !== null) ? parseInt(value) : Common.Utils.Metric.c_MetricUnits.cm); this.getApplication().getController("RightMenu").updateMetricUnit(); this.getApplication().getController("Print").getView("MainSettingsPrint").updateMetricUnit(); }, _compareActionStrong: function (obj1, obj2) { return obj1.id === obj2.id && obj1.type === obj2.type; }, _compareActionWeak: function (obj1, obj2) { return obj1.type === obj2.type; }, onContextMenu: function (event) { var canCopyAttr = event.target.getAttribute("data-can-copy"), isInputEl = (event.target instanceof HTMLInputElement) || (event.target instanceof HTMLTextAreaElement); if ((isInputEl && canCopyAttr === "false") || (!isInputEl && canCopyAttr !== "true")) { event.stopPropagation(); event.preventDefault(); return false; } }, leavePageText: "You have unsaved changes in this document. Click 'Stay on this Page' then 'Save' to save them. Click 'Leave this Page' to discard all the unsaved changes.", criticalErrorTitle: "Error", notcriticalErrorTitle: "Warning", errorDefaultMessage: "Error code: %1", criticalErrorExtText: 'Press "Ok" to to back to document list.', openTitleText: "Opening Document", openTextText: "Opening document...", saveTitleText: "Saving Document", saveTextText: "Saving document...", loadFontsTitleText: "Loading Data", loadFontsTextText: "Loading data...", loadImagesTitleText: "Loading Images", loadImagesTextText: "Loading images...", loadFontTitleText: "Loading Data", loadFontTextText: "Loading data...", loadImageTitleText: "Loading Image", loadImageTextText: "Loading image...", downloadTitleText: "Downloading Document", downloadTextText: "Downloading document...", printTitleText: "Printing Document", printTextText: "Printing document...", uploadImageTitleText: "Uploading Image", uploadImageTextText: "Uploading image...", savePreparingText: "Preparing to save", savePreparingTitle: "Preparing to save. Please wait...", loadingDocumentTitleText: "Loading Document", uploadImageSizeMessage: "Maximium image size limit exceeded.", uploadImageExtMessage: "Unknown image format.", uploadImageFileCountMessage: "No images uploaded.", reloadButtonText: "Reload Page", unknownErrorText: "Unknown error.", convertationTimeoutText: "Convertation timeout exceeded.", convertationErrorText: "Convertation failed.", downloadErrorText: "Download failed.", unsupportedBrowserErrorText: "Your browser is not supported.", requestEditFailedTitleText: "Access denied", requestEditFailedMessageText: "Someone is editing this document right now. Please try again later.", warnBrowserZoom: "Your browser's current zoom setting is not fully supported. Please reset to the default zoom by pressing Ctrl+0.", warnBrowserIE9: "The application has low capabilities on IE9. Use IE10 or higher", pastInMergeAreaError: "Cannot change part of a merged cell", titleRecalcFormulas: "Calculating formulas...", textRecalcFormulas: "Calculating formulas...", textPleaseWait: "It's working hard. Please wait...", errorWrongBracketsCount: "Found an error in the formula entered.
Wrong cout of brackets.", errorWrongOperator: "Found an error in the formula entered.
Wrong operator.", errorCountArgExceed: "Found an error in the formula entered.
Count of arguments exceeded.", errorCountArg: "Found an error in the formula entered.
Invalid number of arguments.", errorFormulaName: "Found an error in the formula entered.
Incorrect formula name.", errorFormulaParsing: "Internal error while the formula parsing.", errorArgsRange: "Found an error in the formula entered.
Incorrect arguments range.", errorUnexpectedGuid: "External error.
Unexpected Guid. Please, contact support.", errorDatabaseConnection: "External error.
Database connection error. Please, contact support.", errorFileRequest: "External error.
File Request. Please, contact support.", errorFileVKey: "External error.
Incorrect securety key. Please, contact support.", errorStockChart: "Incorrect row order. To build a stock chart place the data on the sheet in the following order:
opening price, max price, min price, closing price.", errorDataRange: "Incorrect data range.", errorOperandExpected: "Operand expected", errorKeyEncrypt: "Unknown key descriptor", errorKeyExpire: "Key descriptor expired", errorUsersExceed: "Count of users was exceed", errorMoveRange: "Cann't change a part of merged cell", errorBadImageUrl: "Image url is incorrect", errorCoAuthoringDisconnect: "Server connection lost. You can't edit anymore.", errorFilePassProtect: "The document is password protected.", txtEditingMode: "Set editing mode...", textLoadingDocument: "LOADING DOCUMENT", textConfirm: "Confirmation", confirmMoveCellRange: "The destination cell's range can contain data. Continue the operation?", textYes : "Yes", textNo: "No", textAnonymous: "Anonymous", txtBasicShapes: "Basic Shapes", txtFiguredArrows: "Figured Arrows", txtMath: "Math", txtCharts: "Charts", txtStarsRibbons: "Stars & Ribbons", txtCallouts: "Callouts", txtButtons: "Buttons", txtRectangles: "Rectangles", txtLines: "Lines", txtDiagramTitle: "Diagram Title", txtXAxis: "X Axis", txtYAxis: "Y Axis", txtSeries: "Seria", warnProcessRightsChange: "You have been denied the right to edit the file.", errorProcessSaveResult: "Saving is failed.", errorAutoFilterDataRange: "The operation could not be done for the selected range of cells.
Select a uniform data range inside or outside the table and try again.", errorAutoFilterChangeFormatTable: "The operation could not be done for the selected cells as you cannot move a part of the table.
Select another data range so that the whole table was shifted and try again.", errorAutoFilterChange: "The operation is not allowed, as it is attempting to shift cells in a table on your worksheet.", textCloseTip: "\nClick to close the tip.", textShape: "Shape", errorFillRange: "Could not fill the selected range of cells.
All the merged cells need to be the same size.", errorUpdateVersion: "The file version has been changed. The page will be reloaded.", defaultTitleText: "ONLYOFFICE Spreadsheet Editor", errorUserDrop: "The file cannot be accessed right now." }; })(), SSE.Controllers.Main || {})); });