/* * (c) Copyright Ascensio System SIA 2010-2014 * * This program is a free software product. You can redistribute it and/or * modify it under the terms of the GNU Affero General Public License (AGPL) * version 3 as published by the Free Software Foundation. In accordance with * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect * that Ascensio System SIA expressly excludes the warranty of non-infringement * of any third-party rights. * * This program is distributed WITHOUT ANY WARRANTY; without even the implied * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html * * You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, * EU, LV-1021. * * The interactive user interfaces in modified source and object code versions * of the Program must display Appropriate Legal Notices, as required under * Section 5 of the GNU AGPL version 3. * * Pursuant to Section 7(b) of the License you must retain the original Product * logo when distributing the program. Pursuant to Section 7(e) we decline to * grant you any rights under trademark law for use of our trademarks. * * All the Product's GUI elements, including illustrations and icon sets, as * well as technical writing content are licensed under the terms of the * Creative Commons Attribution-ShareAlike 4.0 International. See the License * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode * */ Ext.define("DE.controller.Toolbar", (function () { var _onLongActionBegin = function (type, id) { switch (id) { case c_oAscAsyncAction.Save: this.getToolbar().btnSave.disable(); Ext.ComponentQuery.query("defile")[0].btnSave.disable(); break; } }; var _onLongActionEnd = function (type, id) { switch (id) { case c_oAscAsyncAction.Save: this.getToolbar().btnSave.enable(); Ext.ComponentQuery.query("defile")[0].btnSave.enable(); break; } }; return { extend: "Ext.app.Controller", requires: ["Common.view.ImageFromUrlDialog", "Common.view.CopyWarning", "DE.view.HyperlinkSettingsDialog", "DE.view.InsertTableDialog", "Common.plugin.MenuExpand", "Ext.util.Cookies", "DE.view.DropcapSettingsAdvanced"], views: ["Toolbar"], refs: [{ ref: "toolbar", selector: "detoolbar" }, { ref: "cmbFontSize", selector: "#toolbar-combo-font-size" }, { ref: "menuLineSpace", selector: "#toolbar-menu-line-space" }, { ref: "btnPageSize", selector: "#toolbar-button-pagesize" }, { ref: "listStyles", selector: "#toolbar-combo-view-styles" }, { ref: "btnInsertShape", selector: "#toolbar-button-insert-shape" }, { ref: "btnHorizontalAlign", selector: "#toolbar-button-halign" }, { ref: "btnDropCap", selector: "#toolbar-button-dropcap" }, { ref: "mnuDropCapAdvanced", selector: "#mnu-dropcap-advanced" }], flg: {}, init: function () { this._state = { bullets: { type: undefined, subtype: undefined }, prstyle: undefined, prstyleNoStyles: true, undo: undefined, redo: undefined, prcontrolsdisable: undefined, dropcap: c_oAscDropCap.None }; this._isAddingShape = false; this.control({ "detoolbar": { afterrender: function (cmp) { cmp.ownerCt.addListener("resize", Ext.bind(this.resizeToolbar, this)); Ext.FocusManager.unsubscribe(cmp); } }, "#toolbar-combo-fonts": { select: function (combo, records, eOpts) { if (this.api) { this.api.put_TextPrFontName(records[0].data.name); } this.getToolbar().fireEvent("editcomplete", this); Common.component.Analytics.trackEvent("ToolBar", "Font Name"); }, collapse: function (field, opts) { this.getToolbar().fireEvent("editcomplete", this.getToolbar()); } }, "#toolbar-combo-font-size": { select: this._fontsizeSelect, beforequery: this._fontsizeBeforeQuery, collapse: this._fontsizeCollapse, specialkey: this._fontsizeSpecialKey }, "#toolbar-button-bold": { click: this._clickBold }, "#toolbar-button-italic": { click: this._clickItalic }, "#toolbar-button-underline": { click: this._clickUnderline }, "#toolbar-strikeout": { click: this._clickStrikeout }, "#toolbar-button-superscript": { click: this._clickSuperscript }, "#toolbar-button-subscript": { click: this._clickSubscript }, "#toolbar-button-print": { click: this._handlePrint }, "#toolbar-button-save": { click: this._handleSave }, "#toolbar-button-copy": { click: { fn: this.handleCopyPaste, action: "copy" } }, "#toolbar-button-paste": { click: { fn: this.handleCopyPaste, action: "paste" } }, "#toolbar-button-undo": { click: this._handleUndo }, "#toolbar-button-redo": { click: this._handleRedo }, "#toolbar-button-increase-font": { click: this._handleIncrease }, "#toolbar-button-decrease-font": { click: this._handleDecrease }, "#toolbar-btn-markers": { click: function (btn) { var record = { data: { data: { type: 0, subtype: btn.pressed ? 0 : -1 } } }; this._onSelectBullets(btn.menu.picker, record, btn.id, btn.pressed); this.getToolbar().fireEvent("editcomplete", this.getToolbar()); } }, "#toolbar-btn-numbering": { click: function (btn) { var record = { data: { data: { type: 1, subtype: btn.pressed ? 0 : -1 } } }; this._onSelectBullets(btn.menu.picker, record, btn.id, btn.pressed); this.getToolbar().fireEvent("editcomplete", this.getToolbar()); } }, "#toolbar-button-align-left": { click: Ext.bind(this._handleHorizontalAlign, this, [1]) }, "#toolbar-button-align-center": { click: Ext.bind(this._handleHorizontalAlign, this, [2]) }, "#toolbar-button-align-right": { click: Ext.bind(this._handleHorizontalAlign, this, [0]) }, "#toolbar-button-align-just": { click: Ext.bind(this._handleHorizontalAlign, this, [3]) }, "#toolbar-button-dec-left-offset": { click: function (btn) { if (this.api) { this.api.DecreaseIndent(); } this.getToolbar().fireEvent("editcomplete", this.getToolbar()); Common.component.Analytics.trackEvent("ToolBar", "Indent"); } }, "#toolbar-button-inc-left-offset": { click: function (btn) { if (this.api) { this.api.IncreaseIndent(); } this.getToolbar().fireEvent("editcomplete", this.getToolbar()); Common.component.Analytics.trackEvent("ToolBar", "Indent"); } }, "#toolbar-menu-insertimage": { click: function (menu, item, opt) { if (item.from == "file") { this.getToolbar().fireEvent("insertimage", this.getToolbar()); if (this.api) { this.api.AddImage(); } this.getToolbar().fireEvent("editcomplete", this.getToolbar()); Common.component.Analytics.trackEvent("ToolBar", "Image"); } else { this._mnuOpenImageFromURL(); } }, hide: function () { this.getToolbar().fireEvent("editcomplete", this.getToolbar()); } }, "#toolbar-menu-line-space": { hide: function (item) { this.getToolbar().fireEvent("editcomplete", this.getToolbar()); } }, "#toolbar-menu-line-space menuitem": { click: function (item) { if (this.api) { this.api.put_PrLineSpacing(c_paragraphLinerule.LINERULE_AUTO, item.linespace); } Common.component.Analytics.trackEvent("ToolBar", "Line Spacing"); } }, "#toolbar-button-page-break": { click: function (btn) { if (this.api) { this.api.put_AddPageBreak(); } this.getToolbar().fireEvent("editcomplete", this.getToolbar()); Common.component.Analytics.trackEvent("ToolBar", "Page Break"); } }, "#toolbar-menu-edit-header": { hide: function (item) { this.getToolbar().fireEvent("editcomplete", this.getToolbar()); } }, "#toolbar-menu-edit-header menuitem": { click: function (item) { if (item.place == "Header") { this.api.GoToHeader(this.api.getCurrentPage()); } else { if (item.place == "Footer") { this.api.GoToFooter(this.api.getCurrentPage()); } else { return; } } this.getToolbar().fireEvent("editcomplete", this.getToolbar()); Common.component.Analytics.trackEvent("ToolBar", "Edit " + item.place); } }, "#toolbar-button-insert-hyperlink": { click: function (btn) { this._handleHyperlinkOptions(); } }, "#toolbar-button-clear-style": { click: function (btn) { if (this.api) { this.api.ClearFormating(); } this.getToolbar().fireEvent("editcomplete", this.getToolbar()); } }, "#toolbar-button-copy-style": { click: function (btn) { if (this.api) { this.api.SetPaintFormat(btn.pressed); } this.getToolbar().fireEvent("editcomplete", this.getToolbar()); } }, "#menu-page-size menuitem": { click: function (item) { this.getToolbar().fireEvent("editcomplete", this.getToolbar()); } }, "#menu-page-size": { hide: function (item) { this.getToolbar().fireEvent("editcomplete", this.getToolbar()); } }, "#toolbar-button-pageorient": { click: function (btn) { if (this.api) { this.api.change_PageOrient(!btn.pressed); } this.getToolbar().fireEvent("editcomplete", this.getToolbar()); Common.component.Analytics.trackEvent("ToolBar", "Page Orientation"); } }, "#toolbar-button-newdocument": { click: function (btn) { if (this.api) { this.api.OpenNewDocument(); } this.getToolbar().fireEvent("editcomplete", this.getToolbar()); Common.component.Analytics.trackEvent("ToolBar", "New Document"); } }, "#toolbar-button-opendocument": { click: function (btn) { if (this.api) { this.api.LoadDocumentFromDisk(); } this.getToolbar().fireEvent("editcomplete", this.getToolbar()); Common.component.Analytics.trackEvent("ToolBar", "Open Document"); } }, "#toolbar-combo-view-styles": { select: function (combo, record) { if (this.api) { this.api.put_Style(record.data.title); } this.getToolbar().fireEvent("editcomplete", this.getToolbar()); Common.component.Analytics.trackEvent("ToolBar", "Style"); }, menuhide: function () { this.getToolbar().fireEvent("editcomplete", this.getToolbar()); }, releasecapture: function (cnt) { this.getToolbar().fireEvent("editcomplete", this.getToolbar()); }, render: function (o) { if (this.styles) { this._onInitEditorStyles(this.styles); delete this.styles; } }, afterrender: function (o) { if (this.getListStyles().dataMenu.picker.store.getCount() > 0) { this.getListStyles().fillComboView(this.getListStyles().dataMenu.picker.store.getAt(0), true); } } }, "#toolbar-button-insert-shape": { click: function (btn) { if (!btn.pressed) { if (this.api) { this._addAutoshape(false); } btn.hideMenu(); this.getToolbar().fireEvent("editcomplete", this.getToolbar()); } else { if (this.getToolbar().btnInsertText.pressed) { this.getToolbar().btnInsertText.toggle(false, true); if (this.api) { this._addAutoshape(false); } } } }, afterrender: Ext.bind(function (btn) { var me = this; btn.getEl().on("mousedown", function (event, element, eOpts) { me._toggleFromMenuHide = false; }, me); }, this) }, "#toolbar-menu-insert-shape": { hide: function () { if (this.getBtnInsertShape().pressed && !this._isAddingShape && this._toggleFromMenuHide) { this._toggleFromMenuHide = false; this.getBtnInsertShape().toggle(false, false); } this._isAddingShape = false; this.getToolbar().fireEvent("editcomplete", this.getToolbar(), this.getBtnInsertShape()); }, show: function () { this._toggleFromMenuHide = true; } }, "#toolbar-button-insert-text": { click: function (btn) { if (this.api) { this._addAutoshape(btn.pressed, "textRect"); } if (this.getBtnInsertShape().pressed) { this.getBtnInsertShape().toggle(false, true); } this.getToolbar().fireEvent("editcomplete", this.getToolbar(), this.getBtnInsertShape()); Common.component.Analytics.trackEvent("ToolBar", "Add Text"); } }, "#toolbar-menu-insert-table": { hide: function () { this.getToolbar().fireEvent("editcomplete", this.getToolbar()); } }, "#toolbar-menu-insert-table dedimensionpicker": { beforerender: function (cmp) { if (cmp.stalign == "top") { var elem = cmp.renderTpl.splice(6, 1); cmp.renderTpl.splice(1, 0, elem[0]); } }, select: function (o, columns, rows) { if (this.api) { this.getToolbar().fireEvent("inserttable", this.getToolbar()); this.api.put_Table(columns, rows); } this.getToolbar().fireEvent("editcomplete", this.getToolbar()); Ext.menu.Manager.hideAll(); Common.component.Analytics.trackEvent("ToolBar", "Table"); }, afterrender: function (cmp) { $("#" + cmp.id).mouseleave(function () { Ext.getCmp(this.id).setTableSize(0, 0); }); } }, "#toolbar-insert-custom-table": { click: function (btn) { var win = Ext.create("DE.view.InsertTableDialog", {}); var me = this; win.addListener("onmodalresult", function (o, mr, s) { if (mr && me.api) { me.getToolbar().fireEvent("inserttable", me.getToolbar()); me.api.put_Table(s[0], s[1]); } me.getToolbar().fireEvent("editcomplete", me.getToolbar()); Common.component.Analytics.trackEvent("ToolBar", "Table"); }, false); win.show(); } }, "#toolbar-menu-color-schemas": { hide: function () { this.getToolbar().fireEvent("editcomplete", this.getToolbar()); }, click: this._handleMenuSchemas }, "#toolbar-menu-horalign": { click: this._handleMenuHorizontalAlign }, "#toolbar-menu-horalign menuitem": { beforecheckchange: function (item) { if (!item.checked) { this._clearChecked(this.getBtnHorizontalAlign().menu.items.items); } } }, "#toolbar-button-settings": { click: function () { Ext.menu.Manager.hideAll(); var needhide = false; var cmp = Ext.getCmp("main-menu-file-options"); if (cmp) { if (cmp.activeBtn === cmp.btnDocumentSettings) { needhide = true; } cmp.activeBtn = cmp.btnDocumentSettings; } var mnucmp = Ext.getCmp("view-main-menu"); if (mnucmp) { if (mnucmp.currentFullScaleMenuBtn == undefined || mnucmp.currentFullScaleMenuBtn.id != "id-menu-file") { mnucmp.selectMenu("menuFile"); } else { if (needhide) { mnucmp.closeFullScaleMenu(); } else { cmp._onShow(); } } } } }, "#toolbar-menu-fit-page": { click: function (item) { if (this.api) { if (item.checked) { this.api.zoomFitToPage(); } else { this.api.zoomCustomMode(); } } this.getToolbar().fireEvent("editcomplete", this.getToolbar()); } }, "#toolbar-menu-fit-width": { click: function (item) { if (this.api) { if (item.checked) { this.api.zoomFitToWidth(); } else { this.api.zoomCustomMode(); } } this.getToolbar().fireEvent("editcomplete", this.getToolbar()); } }, "#toolbar-menu-zoomin": { click: function () { if (this.api) { this.api.zoomIn(); } this.getToolbar().fireEvent("editcomplete", this.getToolbar()); } }, "#toolbar-menu-zoomout": { click: function () { if (this.api) { this.api.zoomOut(); } this.getToolbar().fireEvent("editcomplete", this.getToolbar()); } }, "#toolbar-menu-zoom-text": { afterrender: function (ct) { ct.setWidth(Ext.util.TextMetrics.measure(ct.getEl(), "100%").width); } }, "#menu-hide-bars": { hide: function () { this.getToolbar().fireEvent("editcomplete", this.getToolbar()); } }, "#toolbar-menu-dropcap": { click: this._handleDropCap, hide: Ext.bind(function () { this.getToolbar().fireEvent("editcomplete", this.getToolbar()); }, this) }, "#toolbar-menu-dropcap menuitem": { beforecheckchange: function (item) { if (!item.checked) { this._clearChecked(this.getBtnDropCap().menu.items.items); } } }, "#mnu-dropcap-advanced": { click: this._handleDropCapAdvanced }, "#mnu-hide-bars-toolbar": { click: function (item) { this.getToolbar().changeViewMode(item.checked); window.localStorage.setItem("de-compact-toolbar", item.checked ? 1 : 0); if (this._state.prstyleNoStyles && !item.checked) { if (this.getListStyles().dataMenu.picker.store.getCount() > 0) { var styleIndex = this.getListStyles().dataMenu.picker.store.findBy(function (record, id) { return (record.data.title === this._state.prstyle); }, this); this.getListStyles().selectByIndex((styleIndex >= 0) ? styleIndex : 0); } } this._state.prstyleNoStyles = false; this.getToolbar().fireEvent("editcomplete", this.getToolbar()); } } }); }, setApi: function (o) { this.api = o; }, resizeToolbar: function (cmp, adjWidth, adjHeight) { var w = this.getToolbar().getWidth(); if (w !== adjWidth) { this.getToolbar().setWidth(adjWidth); } this.shapeMenuExpandLeft = (adjWidth < 1072); }, _getApiTextSize: function () { var out_value = 12, textPr = this.api.get_TextProps(); if (textPr && textPr.get_TextPr) { out_value = textPr.get_TextPr().get_FontSize(); } return out_value; }, _fontsizeCollapse: function (field, eOpts) { if (!this.flg.setFontSize) { var raw_value = field.getRawValue(), api_value = this._getApiTextSize(); if (api_value && raw_value != api_value) { field.getStore().clearFilter(false); field.setValue(api_value); } } this.getToolbar().fireEvent("editcomplete", this.getToolbar()); }, _fontsizeSelect: function (combo, records, eOpts) { this.flg.setFontSize = true; if (this.api) { this.api.put_TextPrFontSize(records[0].data.sizevalue); } this.getToolbar().fireEvent("editcomplete", this.getToolbar()); this.flg.setFontSize = false; Common.component.Analytics.trackEvent("ToolBar", "Font Size"); }, _fontsizeBeforeQuery: function (event, eOpts) { event.forceAll = true; event.cancel = true; event.combo.expand(); var picker = event.combo.getPicker(); var index = event.combo.store.find("sizestring", event.query, undefined, undefined, undefined, true); if (! (index < 0)) { var record = event.combo.store.getAt(index); (record = picker.getNode(record)) && picker.highlightItem(record); } else { picker.clearHighlight(); picker.highlightedItem = undefined; } }, _fontsizeSpecialKey: function (combo, event, eOpts) { if (event.getKey() == event.ENTER) { var record = combo.getPicker().highlightedItem, readsize = false; if (record) { var value = combo.getPicker().getRecord(record).data.sizestring; } else { value = /^\+?(\d*\.?\d+)$|^\+?(\d+\.?\d*)$/.exec(combo.getValue()); if (!value) { value = this._getApiTextSize(); readsize = true; } else { value = value[0] ? parseFloat(value[0]) : parseFloat(value[1]); value = value > 100 ? 100 : value < 1 ? 1 : Math.floor((value + 0.4) * 2) / 2; } } combo.getStore().clearFilter(false); combo.setRawValue(value); this.flg.setFontSize = true; combo.collapse(); if (!readsize) { this.api.put_TextPrFontSize(value); } else { Ext.Msg.show({ title: this.textWarning, msg: this.textFontSizeErr, icon: Ext.Msg.WARNING, buttons: Ext.Msg.OK, fn: function () { this.getToolbar().fireEvent("editcomplete", this.getToolbar()); }, scope: this }); } this.flg.setFontSize = false; } }, _onFontSize: function (size) { if (!this.flg.setFontSize) { var str_size = Ext.isNumber(size) ? String(size) : ""; if (this.getCmbFontSize().getValue() != str_size) { this.getCmbFontSize().setValue(str_size); } } }, _onBold: function (on) { this.getToolbar().btnBold.toggle(on === true, true); }, _clickBold: function (btn) { if (this.api) { this.api.put_TextPrBold(btn.pressed); } this.getToolbar().fireEvent("editcomplete", this); Common.component.Analytics.trackEvent("ToolBar", "Bold"); }, _onItalic: function (on) { this.getToolbar().btnItalic.toggle(on === true, true); }, _clickItalic: function (btn) { if (this.api) { this.api.put_TextPrItalic(btn.pressed); } this.getToolbar().fireEvent("editcomplete", this); Common.component.Analytics.trackEvent("ToolBar", "Italic"); }, _onUnderline: function (on) { this.getToolbar().btnUnderline.toggle(on === true, true); }, _clickUnderline: function (btn) { if (this.api) { this.api.put_TextPrUnderline(btn.pressed); } this.getToolbar().fireEvent("editcomplete", this); Common.component.Analytics.trackEvent("ToolBar", "Underline"); }, _onStrikeout: function (on) { this.getToolbar().btnStrikeout.toggle(on === true, true); }, _clickStrikeout: function (btn) { if (this.api) { this.api.put_TextPrStrikeout(btn.pressed); } this.getToolbar().fireEvent("editcomplete", this); Common.component.Analytics.trackEvent("ToolBar", "Strikeout"); }, _clickSuperscript: function (btn) { if (!this.getToolbar().btnSubscript.pressed) { if (this.api) { this.api.put_TextPrBaseline(btn.pressed ? 1 : 0); } this.getToolbar().fireEvent("editcomplete", this); Common.component.Analytics.trackEvent("ToolBar", "Superscript"); } }, _clickSubscript: function (btn) { if (!this.getToolbar().btnSuperscript.pressed) { if (this.api) { this.api.put_TextPrBaseline(btn.pressed ? 2 : 0); } this.getToolbar().fireEvent("editcomplete", this); Common.component.Analytics.trackEvent("ToolBar", "Subscript"); } }, _onVerticalAlign: function (typeBaseline) { this.getToolbar().btnSuperscript.toggle(false, true); this.getToolbar().btnSubscript.toggle(false, true); switch (typeBaseline) { case 1: this.getToolbar().btnSuperscript.toggle(true, true); break; case 2: this.getToolbar().btnSubscript.toggle(true, true); break; } }, _handlePrint: function (btn) { if (this.api) { this.api.asc_Print(); } this.getToolbar().fireEvent("editcomplete", this.getToolbar()); Common.component.Analytics.trackEvent("Print"); Common.component.Analytics.trackEvent("ToolBar", "Print"); }, _handleSave: function (btn) { if (this.api) { this.api.asc_Save(); } Common.component.Analytics.trackEvent("Save"); Common.component.Analytics.trackEvent("ToolBar", "Save"); this.getToolbar().fireEvent("editcomplete", this.getToolbar()); }, handleCopyPaste: function (o, e, opts) { var me = this; if (me.api) { var result = opts.action == "copy" ? me.api.Copy() : me.api.Paste(); if (!result) { Ext.create("Common.view.CopyWarning", { listeners: { close: function (cnt, eOpts) { me.getToolbar().fireEvent("editcomplete", me.getToolbar()); } } }).show(); } Common.component.Analytics.trackEvent("ToolBar", "Copy Warning"); } else { me.getToolbar().fireEvent("editcomplete", me.getToolbar()); } }, _handleUndo: function (btn) { if (this.api) { this.api.Undo(); } this.getToolbar().fireEvent("editcomplete", this.getToolbar()); Common.component.Analytics.trackEvent("ToolBar", "Undo"); }, _handleRedo: function (btn) { if (this.api) { this.api.Redo(); } this.getToolbar().fireEvent("editcomplete", this.getToolbar()); Common.component.Analytics.trackEvent("ToolBar", "Redo"); }, _onCanRevert: function (can, which) { if (which == "undo") { this._state.undo !== can && (this.getToolbar()["btnUndo"].setDisabled(!can)); this._state.undo = can; } else { this._state.redo !== can && (this.getToolbar()["btnRedo"].setDisabled(!can)); this._state.redo = can; } }, _handleIncrease: function (btn) { if (this.api) { this.api.FontSizeIn(); } this.getToolbar().fireEvent("editcomplete", this.getToolbar()); Common.component.Analytics.trackEvent("ToolBar", "Font Size"); }, _handleDecrease: function (btn) { if (this.api) { this.api.FontSizeOut(); } this.getToolbar().fireEvent("editcomplete", this.getToolbar()); Common.component.Analytics.trackEvent("ToolBar", "Font Size"); }, _onSelectBullets: function (picker, record, id, pressed) { var btn = Ext.getCmp(id); if (btn) { if (typeof(pressed) == "boolean") { btn.toggle(pressed, true); } else { btn.toggle(!(record.data.data.subtype < 0), true); } } if (this.api) { this.api.put_ListType(record.data.data.type, record.data.data.subtype); } Common.component.Analytics.trackEvent("ToolBar", "List Type"); }, _clearBullets: function () { this.getToolbar().btnMarkers.toggle(false, true); this.getToolbar().btnNumbers.toggle(false, true); this.getToolbar().btnMultilevels.toggle(false, true); this.getToolbar().btnMarkers.menu.picker.selectByIndex(0); this.getToolbar().btnNumbers.menu.picker.selectByIndex(0); this.getToolbar().btnMultilevels.menu.picker.selectByIndex(0); }, _onBullets: function (v) { var type = v.get_ListType(); if (this._state.bullets.type != type || this._state.bullets.subtype != v.get_ListSubType() || this.getToolbar().btnMarkers.pressed && (type !== 0) || this.getToolbar().btnNumbers.pressed && (type !== 1) || this.getToolbar().btnMultilevels.pressed && (type !== 2)) { this._state.bullets.type = type; this._state.bullets.subtype = v.get_ListSubType(); this._clearBullets(); switch (this._state.bullets.type) { case 0: this.getToolbar().btnMarkers.toggle(true, true); this.getToolbar().btnMarkers.menu.picker.selectByIndex(this._state.bullets.subtype); break; case 1: var idx = 0; switch (this._state.bullets.subtype) { case 1: idx = 4; break; case 2: idx = 5; break; case 3: idx = 6; break; case 4: idx = 1; break; case 5: idx = 2; break; case 6: idx = 3; break; case 7: idx = 7; break; } this.getToolbar().btnNumbers.toggle(true, true); this.getToolbar().btnNumbers.menu.picker.selectByIndex(idx); break; case 2: this.getToolbar().btnMultilevels.toggle(true, true); this.getToolbar().btnMultilevels.menu.picker.selectByIndex(this._state.bullets.subtype); break; } } }, _clearChecked: function (items) { for (var i = 0; i < items.length; i++) { if (items[i].setChecked) { items[i].setChecked(false, true); } } }, _handleHorizontalAlign: function (type) { if (this.api) { this.api.put_PrAlign(type); } this.getToolbar().fireEvent("editcomplete", this.getToolbar()); Common.component.Analytics.trackEvent("ToolBar", "Align"); }, _handleMenuHorizontalAlign: function (menu, item, opt) { this.getBtnHorizontalAlign().removeCls(this.getBtnHorizontalAlign().icls); this.getBtnHorizontalAlign().icls = !item.checked ? "halign-left" : item.icls; this.getBtnHorizontalAlign().addCls(this.getBtnHorizontalAlign().icls); if (this.api && item.checked) { this.api.put_PrAlign(item.halign); } this.getToolbar().fireEvent("editcomplete", this.getToolbar()); Common.component.Analytics.trackEvent("ToolBar", "Horizontal Align"); }, _onParagraphAlign: function (v) { var index = -1, align, toolbar = this.getToolbar(); switch (v) { case 0: index = 2; align = "halign-right"; break; case 1: index = 0; align = "halign-left"; break; case 2: index = 1; align = "halign-center"; break; case 3: index = 3; align = "halign-just"; break; default: index = -255; align = "halign-left"; break; } if (! (index < 0)) { this.getBtnHorizontalAlign().menu.items.items[index].setChecked(true); } else { if (index == -255) { this._clearChecked(this.getBtnHorizontalAlign().menu.items.items); } } this.getBtnHorizontalAlign().removeCls(this.getBtnHorizontalAlign().icls); this.getBtnHorizontalAlign().icls = align; this.getBtnHorizontalAlign().addCls(align); if (v === null || v === undefined) { toolbar.btnAlignRight.rendered && toolbar.btnAlignRight.toggle(false, true); toolbar.btnAlignLeft.rendered && toolbar.btnAlignLeft.toggle(false, true); toolbar.btnAlignCenter.rendered && toolbar.btnAlignCenter.toggle(false, true); toolbar.btnAlignJust.rendered && toolbar.btnAlignJust.toggle(false, true); return; } switch (v) { case 0: toolbar.btnAlignRight.rendered && toolbar.btnAlignRight.toggle(true, false); break; case 1: toolbar.btnAlignLeft.rendered && toolbar.btnAlignLeft.toggle(true, false); break; case 2: toolbar.btnAlignCenter.rendered && toolbar.btnAlignCenter.toggle(true, false); break; case 3: toolbar.btnAlignJust.rendered && toolbar.btnAlignJust.toggle(true, false); break; } }, _mnuOpenImageFromURL: function () { var w = Ext.create("Common.view.ImageFromUrlDialog", {}); w.addListener("onmodalresult", Ext.bind(this._onOpenImageFromURL, [this, w]), false); w.addListener("close", Ext.bind(function (cnt, eOpts) { this.getToolbar().fireEvent("editcomplete", this.getToolbar()); }, this)); w.show(); }, _onOpenImageFromURL: function (mr) { var self = this[0]; var url = this[1].txtUrl; if (mr == 1 && self.api) { var checkurl = url.value.replace(/ /g, ""); if (checkurl != "") { self.getToolbar().fireEvent("insertimage", self.getToolbar()); self.api.AddImageUrl(url.value); Common.component.Analytics.trackEvent("ToolBar", "Image"); } else { Ext.MessageBox.show({ msg: self.textEmptyImgUrl, buttons: Ext.Msg.OK, icon: Ext.Msg.ERROR, width: 300, fn: Ext.bind(function (buttonId, text, opt) { self.getToolbar().fireEvent("editcomplete", self.getToolbar()); }, self) }); } } }, _onLineSpacing: function (vc) { if (vc.get_Line() === null || vc.get_LineRule() === null || vc.get_LineRule() != 1) { Ext.each(this.getMenuLineSpace().items.items, function (item) { item.setChecked(false, true); }, this); return; } var line = vc.get_Line(); if (Math.abs(line - 1) < 0.0001) { this.getMenuLineSpace().items.items[0].setChecked(true, true); } else { if (Math.abs(line - 1.15) < 0.0001) { this.getMenuLineSpace().items.items[1].setChecked(true, true); } else { if (Math.abs(line - 1.5) < 0.0001) { this.getMenuLineSpace().items.items[2].setChecked(true, true); } else { if (Math.abs(line - 2) < 0.0001) { this.getMenuLineSpace().items.items[3].setChecked(true, true); } else { if (Math.abs(line - 2.5) < 0.0001) { this.getMenuLineSpace().items.items[4].setChecked(true, true); } else { if (Math.abs(line - 3) < 0.0001) { this.getMenuLineSpace().items.items[5].setChecked(true, true); } else { Ext.each(this.getMenuLineSpace().items.items, function (item) { item.setChecked(false, true); }, this); } } } } } } }, _handleHyperlinkOptions: function (btn) { var win, props, text; var me = this; if (me.api) { text = me.api.can_AddHyperlink(); if (text !== false) { win = Ext.create("DE.view.HyperlinkSettingsDialog"); props = new CHyperlinkProperty(); props.put_Text(text); win.setSettings(props); } else { var selectedElements = me.api.getSelectedElements(); if (selectedElements && Ext.isArray(selectedElements)) { for (var i = 0; i < selectedElements.length; i++) { if (selectedElements[i].get_ObjectType() == c_oAscTypeSelectElement.Hyperlink) { props = selectedElements[i].get_ObjectValue(); } } } if (props) { win = Ext.create("DE.view.HyperlinkSettingsDialog"); win.setSettings(props); } } } if (win) { win.addListener("onmodalresult", function (mr) { if (mr == 1) { props = win.getSettings(); (text !== false) ? me.api.add_Hyperlink(props) : me.api.change_Hyperlink(props); } me.getToolbar().fireEvent("editcomplete", me.getToolbar()); }, false); win.addListener("close", function () { me.getToolbar().fireEvent("editcomplete", me.getToolbar()); }, false); win.show(); } Common.component.Analytics.trackEvent("ToolBar", "Add Hyperlink"); }, _onCanAddHyperlink: function (value) { var need_disable = !value || this._state.prcontrolsdisable; if (need_disable != this.getToolbar().btnInsertHyperlink.isDisabled()) { this.getToolbar().btnInsertHyperlink.setDisabled(need_disable); } }, _onFocusObject: function (SelectedObjects) { var pr, sh, i = -1, type; var paragraph_locked = false, header_locked = false, can_add_table = false, enable_dropcap = undefined, disable_dropcapadv = true; var frame_pr = undefined; while (++i < SelectedObjects.length) { type = SelectedObjects[i].get_ObjectType(); pr = SelectedObjects[i].get_ObjectValue(); if (type == c_oAscTypeSelectElement.Paragraph) { paragraph_locked = pr.get_Locked(); can_add_table = pr.get_CanAddTable(); frame_pr = pr; } else { if (type == c_oAscTypeSelectElement.Header) { header_locked = pr.get_Locked(); } } if (type === c_oAscTypeSelectElement.Table || type === c_oAscTypeSelectElement.Header || type === c_oAscTypeSelectElement.Image) { enable_dropcap = false; } if (enable_dropcap !== false && type == c_oAscTypeSelectElement.Paragraph) { enable_dropcap = true; } } var need_disable = paragraph_locked || header_locked; if (this._state.prcontrolsdisable != need_disable) { this._state.prcontrolsdisable = need_disable; Ext.each(this.getToolbar().paragraphControls, function (item) { item.setDisabled(need_disable); }, this); } if (enable_dropcap && frame_pr) { var value = frame_pr.get_FramePr(); var drop_value = c_oAscDropCap.None; if (value !== undefined) { drop_value = value.get_DropCap(); enable_dropcap = (drop_value === c_oAscDropCap.Drop || drop_value === c_oAscDropCap.Margin); disable_dropcapadv = false; } else { enable_dropcap = frame_pr.get_CanAddDropCap(); } if (enable_dropcap) { this._onDropCap(drop_value); } } need_disable = need_disable || !enable_dropcap; if (need_disable !== this.getToolbar().btnDropCap.isDisabled()) { this.getToolbar().btnDropCap.setDisabled(need_disable); } if (!this.getToolbar().btnDropCap.isDisabled() && disable_dropcapadv !== this.getMnuDropCapAdvanced().isDisabled()) { this.getMnuDropCapAdvanced().setDisabled(disable_dropcapadv); } need_disable = !can_add_table || header_locked; if (need_disable != this.getToolbar().btnInsertTable.isDisabled()) { this.getToolbar().btnInsertTable.setDisabled(need_disable); } need_disable = this.getToolbar().pageNumCurrentPos.isDisabled() && this.getToolbar().pageNumHeaderFooter.isDisabled(); if (need_disable != this.getToolbar().mnuInsertPageNum.isDisabled()) { this.getToolbar().mnuInsertPageNum.setDisabled(need_disable); } }, _onStyleChange: function (v) { this.getToolbar().btnCopyStyle.toggle(v, true); }, _onPageSize: function (w, h) { var cmp_w = w, cmp_h = h; if (this.getBtnPageSize()) { Ext.each(this.getBtnPageSize().menu.items.items, function (item) { if (Math.abs(item.pagesize[0] - cmp_w) < 0.01 && Math.abs(item.pagesize[1] - cmp_h) < 0.01) { item.setChecked(true, true); this.getBtnPageSize().pagesize[0] = cmp_w; this.getBtnPageSize().pagesize[1] = cmp_h; } }, this); } }, _onPageOrient: function (isportrait) { if (this.getToolbar()) { this.getToolbar().btnPageOrient.toggle(!isportrait, true); } }, _onLockDocumentProps: function () { this.getToolbar().btnPageOrient.setDisabled(true); this.getBtnPageSize().setDisabled(true); }, _onUnLockDocumentProps: function () { this.getToolbar().btnPageOrient.setDisabled(false); this.getBtnPageSize().setDisabled(false); }, _onLockDocumentSchema: function () { this.getToolbar().btnColorSchemas.setDisabled(true); }, _onUnLockDocumentSchema: function () { this.getToolbar().btnColorSchemas.setDisabled(false); }, _onParagraphStyleChange: function (name) { if (this._state.prstyle != name) { this._state.prstyle = name; var listStylesVisible = (this.getListStyles().rendered && this.getListStyles().getEl() && this.getListStyles().getEl().up("#id-toolbar-full-group-styles") && this.getListStyles().getEl().up("#id-toolbar-full-group-styles").isVisible()); if (listStylesVisible) { this.getListStyles().suspendEvents(false); var styleIndex = this.getListStyles().dataMenu.picker.store.findBy(function (record, id) { return (record.data.title === name); }, this); this.getListStyles().selectByIndex(styleIndex); this.getListStyles().resumeEvents(); } } }, _onInitEditorStyles: function (styles) { window.styles_loaded = false; var self = this; if (!self.getListStyles()) { self.styles = styles; return; } var canvasDefaultStyles = document.createElement("canvas"); var canvasDocStyles = document.createElement("canvas"); canvasDefaultStyles.id = "bigimgdefaultstyles"; canvasDocStyles.id = "bigimgdocstyles"; var isDefaultStylesLoad = !(styles.get_DefaultStylesImage().length > 0); var isDocStylesLoad = !(styles.get_DocStylesImage().length > 0); var fillStyles = function () { if (isDefaultStylesLoad && isDocStylesLoad) { self.getListStyles().dataMenu.picker.store.removeAll(); Ext.each(styles.get_MergedStyles(), function (style) { var thumb = document.createElement("canvas"); thumb.width = styles.get_STYLE_THUMBNAIL_WIDTH(); thumb.height = styles.get_STYLE_THUMBNAIL_HEIGHT(); var ctx = thumb.getContext("2d"); ctx.save(); ctx.translate(0, -style.get_ThumbnailOffset() * styles.get_STYLE_THUMBNAIL_HEIGHT()); ctx.drawImage(((style.get_Type() == c_oAscStyleImage.Default) ? canvasDefaultStyles : canvasDocStyles), 0, 0); ctx.restore(); self.getListStyles().dataMenu.picker.store.add({ imageUrl: thumb.toDataURL(), title: style.get_Name(), uid: Ext.id() }); }); var listStylesVisible = (self.getListStyles().rendered && self.getListStyles().getEl() && self.getListStyles().getEl().up("#id-toolbar-full-group-styles") && self.getListStyles().getEl().up("#id-toolbar-full-group-styles").isVisible()); if (self.getListStyles().dataMenu.picker.store.getCount() > 0 && listStylesVisible) { self.getListStyles().fillComboView(self.getListStyles().dataMenu.picker.store.getAt(0), true); self.getListStyles().selectByIndex(0); self.getToolbar().fireEvent("editcomplete", this); } } window.styles_loaded = true; }; var imgDefaultStyles = new Image(); var imgDocStyles = new Image(); imgDefaultStyles.onload = function () { canvasDefaultStyles.width = imgDefaultStyles.width; canvasDefaultStyles.height = imgDefaultStyles.height; canvasDefaultStyles.getContext("2d").drawImage(imgDefaultStyles, 0, 0); isDefaultStylesLoad = true; fillStyles(); }; imgDocStyles.onload = function () { canvasDocStyles.width = imgDocStyles.width; canvasDocStyles.height = imgDocStyles.height; canvasDocStyles.getContext("2d").drawImage(imgDocStyles, 0, 0); isDocStylesLoad = true; fillStyles(); }; imgDefaultStyles.src = styles.get_DefaultStylesImage(); imgDocStyles.src = styles.get_DocStylesImage(); }, FillAutoShapes: function () { var shapesStore = Ext.getStore("ShapeGroups"); var me = this; me.getBtnInsertShape().menu.removeAll(); for (var i = 0; i < shapesStore.getCount() - 1; i++) { var shapeGroup = shapesStore.getAt(i); var mnu = Ext.widget("menuitem", { text: shapeGroup.data.groupName, hideOnClick: false, cls: "menu-item-noicon", menu: Ext.create("Common.component.MenuDataViewPicker", { width: shapeGroup.data.groupWidth, height: shapeGroup.data.groupHeight, store: shapeGroup.data.groupStore, viewData: [], contentWidth: shapeGroup.data.groupWidth - 20, listeners: { select: Ext.bind(function (picker, record) { if (me.api) { me._addAutoshape(true, record.data.data.shapeType); me._isAddingShape = true; Common.component.Analytics.trackEvent("ToolBar", "Add Shape"); } }, this), hide: function () { me.getToolbar().fireEvent("editcomplete", me.getToolbar(), me.getBtnInsertShape()); }, show: function (cmp) { cmp.picker.selectByIndex(-1, false); } }, plugins: [{ ptype: "menuexpand" }] }), deferExpandMenu: function () { if (!this.menu.rendered || !this.menu.isVisible()) { this.parentMenu.activeChild = this.menu; this.menu.parentItem = this; this.menu.parentMenu = this.menu.ownerCt = this.parentMenu; (me.shapeMenuExpandLeft) ? this.menu.showBy(this, "tr-tl?", [-this.menu.width, 0]) : this.menu.showBy(this, "tl-tr?"); } } }); me.getBtnInsertShape().menu.add(mnu); } }, _onEndAddShape: function () { this.getToolbar().fireEvent("insertshape", this.getToolbar()); if (this.getBtnInsertShape().pressed) { this.getBtnInsertShape().toggle(false, true); } if (this.getToolbar().btnInsertText.pressed) { this.getToolbar().btnInsertText.toggle(false, true); } Ext.FocusManager.removeListener("componentfocus", this.checkInsertAutoshape, this); }, _addAutoshape: function (isstart, type) { if (isstart) { this.api.StartAddShape(type, true); Ext.FocusManager.addListener("componentfocus", this.checkInsertAutoshape, this); } else { this.api.StartAddShape("", false); Ext.FocusManager.removeListener("componentfocus", this.checkInsertAutoshape, this); } }, checkInsertAutoshape: function (fm, cmp) { if (this.getToolbar().btnInsertText.pressed || this.getBtnInsertShape().pressed) { if (cmp.id != "editor_sdk" && ((this.getToolbar().btnInsertText.pressed && cmp.id != this.getToolbar().btnInsertText.id) || (this.getBtnInsertShape().pressed && cmp.id != this.getBtnInsertShape().id))) { this._toggleFromMenuHide = false; this._isAddingShape = false; this._addAutoshape(false); this.getBtnInsertShape().toggle(false, false); this.getToolbar().btnInsertText.toggle(false, false); this.getToolbar().fireEvent("editcomplete", this.getToolbar()); } } }, getHexColor: function (r, g, b) { r = r.toString(16); g = g.toString(16); b = b.toString(16); if (r.length == 1) { r = "0" + r; } if (g.length == 1) { g = "0" + g; } if (b.length == 1) { b = "0" + b; } return r + g + b; }, onCoAuthoringDisconnect: function () { this.getToolbar().setMode({ isDisconnected: true }); }, onZoomChange: function (percent, type) { this.getToolbar().btnFitPage.setChecked(type == 2, true); this.getToolbar().btnFitWidth.setChecked(type == 1, true); this.getToolbar().txtZoom.setText(percent + "%"); }, _handleDropCap: function (menu, item, opt) { if (item.dropcap === undefined) { return; } if (this.api && item.checked) { if (item.dropcap === c_oAscDropCap.None) { this.api.removeDropcap(true); } else { var SelectedObjects = this.api.getSelectedElements(), i = -1; while (++i < SelectedObjects.length) { if (SelectedObjects[i].get_ObjectType() == c_oAscTypeSelectElement.Paragraph) { var pr = SelectedObjects[i].get_ObjectValue(); var value = pr.get_FramePr(); if (value !== undefined) { value = new CParagraphFrame(); value.put_FromDropCapMenu(true); value.put_DropCap(item.dropcap); this.api.put_FramePr(value); } else { this.api.asc_addDropCap((item.dropcap === c_oAscDropCap.Drop)); } break; } } } } this.getToolbar().fireEvent("editcomplete", this.getToolbar()); Common.component.Analytics.trackEvent("ToolBar", "Drop Cap"); }, _onDropCap: function (v) { if (this._state.dropcap === v) { return; } var index = -1; switch (v) { case c_oAscDropCap.None: index = 0; break; case c_oAscDropCap.Drop: index = 1; break; case c_oAscDropCap.Margin: index = 2; break; } if (index < 0) { this._clearChecked(this.getBtnDropCap().menu.items.items); } else { this.getBtnDropCap().menu.items.items[index].setChecked(true); } this._state.dropcap = v; }, _handleDropCapAdvanced: function () { var win, props, text; var me = this; if (me.fontstore === undefined) { me.fontstore = Ext.create("Ext.data.Store", { storeId: Ext.id(), model: "Common.model.Font" }); var fonts = me.getToolbar().cmbFont.getStore().data.items; var arr = []; Ext.each(fonts, function (font, index) { if (!font.data.cloneid) { arr.push(Ext.clone(font.data)); } }); me.fontstore.loadData(arr); } if (me.api) { var selectedElements = me.api.getSelectedElements(); if (selectedElements && Ext.isArray(selectedElements)) { for (var i = 0; i < selectedElements.length; i++) { if (selectedElements[i].get_ObjectType() == c_oAscTypeSelectElement.Paragraph) { props = selectedElements[i].get_ObjectValue(); break; } } } if (props) { var paragraph_config = { tableStylerRows: 2, tableStylerColumns: 1, fontStore: me.fontstore }; win = Ext.create("DE.view.DropcapSettingsAdvanced", paragraph_config); if (win) { win.updateMetricUnit(); win.setSettings({ paragraphProps: props, borderProps: me.borderAdvancedProps, api: me.api, colorProps: [me.getToolbar().effectcolors, me.getToolbar().standartcolors] }); win.addListener("onmodalresult", Ext.bind(function (o, mr, s) { if (mr == 1 && s) { me.borderAdvancedProps = s.borderProps; if (s.paragraphProps && s.paragraphProps.get_DropCap() === c_oAscDropCap.None) { me.api.removeDropcap(true); } else { me.api.put_FramePr(s.paragraphProps); } } me.getToolbar().fireEvent("editcomplete", me.getToolbar()); }, me), false); win.addListener("close", function () { me.getToolbar().fireEvent("editcomplete", me.getToolbar()); }, false); win.show(); } } } }, _handleMenuSchemas: function (menu, menuitem) { this.api.ChangeColorScheme(menuitem.schemaType); Common.component.Analytics.trackEvent("ToolBar", "Color Scheme"); }, loadStyles: function () { var styles = this.api.get_PropertyEditorStyles(); if (styles) { this._onInitEditorStyles(styles); } }, createDelayedElements: function () { var btn = this.getToolbar().btnMarkers; btn.menu.addListener("select", Ext.bind(this._onSelectBullets, this, [btn.id, 2], 2), this); btn.menu.addListener("hide", Ext.bind(function () { this.getToolbar().fireEvent("editcomplete", this.getToolbar()); }, this)); btn = this.getToolbar().btnNumbers; btn.menu.addListener("select", Ext.bind(this._onSelectBullets, this, [btn.id, 2], 2), this); btn.menu.addListener("hide", Ext.bind(function () { this.getToolbar().fireEvent("editcomplete", this.getToolbar()); }, this)); btn = this.getToolbar().btnMultilevels; btn.menu.addListener("select", Ext.bind(this._onSelectBullets, this, [btn.id, 2], 2), this); btn.menu.addListener("hide", Ext.bind(function () { this.getToolbar().fireEvent("editcomplete", this.getToolbar()); }, this)); this.api.asc_registerCallback("asc_onFontSize", Ext.bind(this._onFontSize, this)); this.api.asc_registerCallback("asc_onBold", Ext.bind(this._onBold, this)); this.api.asc_registerCallback("asc_onItalic", Ext.bind(this._onItalic, this)); this.api.asc_registerCallback("asc_onUnderline", Ext.bind(this._onUnderline, this)); this.api.asc_registerCallback("asc_onStrikeout", Ext.bind(this._onStrikeout, this)); this.api.asc_registerCallback("asc_onVerticalAlign", Ext.bind(this._onVerticalAlign, this)); this.api.asc_registerCallback("asc_onCanUndo", Ext.bind(this._onCanRevert, this, ["undo"], true)); this.api.asc_registerCallback("asc_onCanRedo", Ext.bind(this._onCanRevert, this, ["redo"], true)); this.api.asc_registerCallback("asc_onListType", Ext.bind(this._onBullets, this)); this.api.asc_registerCallback("asc_onPrAlign", Ext.bind(this._onParagraphAlign, this)); this.api.asc_registerCallback("asc_onParaSpacingLine", Ext.bind(this._onLineSpacing, this)); this.api.asc_registerCallback("asc_onCanAddHyperlink", Ext.bind(this._onCanAddHyperlink, this)); this.api.asc_registerCallback("asc_onFocusObject", Ext.bind(this._onFocusObject, this)); this.api.asc_registerCallback("asc_onPaintFormatChanged", Ext.bind(this._onStyleChange, this)); this.api.asc_registerCallback("asc_onDocSize", Ext.bind(this._onPageSize, this)); this.api.asc_registerCallback("asc_onPageOrient", Ext.bind(this._onPageOrient, this)); this.api.asc_registerCallback("asc_onLockDocumentProps", Ext.bind(this._onLockDocumentProps, this)); this.api.asc_registerCallback("asc_onUnLockDocumentProps", Ext.bind(this._onUnLockDocumentProps, this)); this.api.asc_registerCallback("asc_onParaStyleName", Ext.bind(this._onParagraphStyleChange, this)); this.api.asc_registerCallback("asc_onEndAddShape", Ext.bind(this._onEndAddShape, this)); this.api.asc_registerCallback("asc_onLockDocumentSchema", Ext.bind(this._onLockDocumentSchema, this)); this.api.asc_registerCallback("asc_onUnLockDocumentSchema", Ext.bind(this._onUnLockDocumentSchema, this)); this.api.asc_registerCallback("asc_onСoAuthoringDisconnect", Ext.bind(this.onCoAuthoringDisconnect, this)); this.api.asc_registerCallback("asc_onZoomChange", Ext.bind(this.onZoomChange, this)); this.api.asc_registerCallback("asc_onStartAction", Ext.bind(_onLongActionBegin, this)); this.api.asc_registerCallback("asc_onEndAction", Ext.bind(_onLongActionEnd, this)); this._onPageSize(this.api.get_DocumentWidth(), this.api.get_DocumentHeight()); }, textEmptyImgUrl: "You need to specify image URL.", textWarning: "Warning", textFontSizeErr: "The entered value must be more than 0" }; } ()));