/* * (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", "common/main/lib/component/Window", "common/main/lib/view/CopyWarningDialog", "common/main/lib/view/ImageFromUrlDialog", "common/main/lib/view/InsertTableDialog", "documenteditor/main/app/view/Toolbar", "documenteditor/main/app/view/HyperlinkSettingsDialog", "documenteditor/main/app/view/DropcapSettingsAdvanced"], function () { DE.Controllers.Toolbar = Backbone.Controller.extend(_.extend({ models: [], collections: [], views: ["Toolbar"], initialize: function () { this._state = { activated: false, bullets: { type: undefined, subtype: undefined }, prstyle: undefined, prcontrolsdisable: undefined, dropcap: c_oAscDropCap.None, clrhighlight: undefined, clrtext: undefined, pgsize: [0, 0], linespace: undefined, pralign: undefined, clrback: undefined, valign: undefined, can_undo: undefined, can_redo: undefined, bold: undefined, italic: undefined, strike: undefined, underline: undefined, pgorient: undefined, lock_doc: undefined, can_copycut: undefined, show_copywarning: true }; this.flg = {}; this.diagramEditor = null; this._isAddingShape = false; this._isAddingEquation = false; this.editMode = true; this.addListeners({ "Toolbar": { "changecompact": this.onChangeCompactView } }); var me = this; var checkInsertAutoshape = function (e) { var cmp = $(e.target), cmp_sdk = cmp.closest("#editor_sdk"), btn_id = cmp.closest("button").attr("id"); if (btn_id === undefined) { btn_id = cmp.closest(".btn-group").attr("id"); } if (cmp.attr("id") != "editor_sdk" && cmp_sdk.length <= 0) { if (me.toolbar.btnInsertText.pressed && btn_id != me.toolbar.btnInsertText.id || me.toolbar.btnInsertShape.pressed && btn_id != me.toolbar.btnInsertShape.id || me.toolbar.btnInsertEquation.pressed && btn_id != me.toolbar.btnInsertEquation.id) { me._isAddingShape = false; me._isAddingEquation = false; me._addAutoshape(false); me.toolbar.btnInsertShape.toggle(false, true); me.toolbar.btnInsertText.toggle(false, true); me.toolbar.btnInsertEquation.toggle(false, true); Common.NotificationCenter.trigger("edit:complete", me.toolbar); } else { if (me.toolbar.btnInsertShape.pressed && btn_id == me.toolbar.btnInsertShape.id) { _.defer(function () { me.api.StartAddShape("", false); Common.NotificationCenter.trigger("edit:complete", me.toolbar); }, 100); } } } }; this.onApiEndAddShape = function () { this.toolbar.fireEvent("insertshape", this.toolbar); if (this.toolbar.btnInsertShape.pressed) { this.toolbar.btnInsertShape.toggle(false, true); } if (this.toolbar.btnInsertText.pressed) { this.toolbar.btnInsertText.toggle(false, true); } $(document.body).off("mouseup", checkInsertAutoshape); }; this._addAutoshape = function (isstart, type) { if (this.api) { if (isstart) { this.api.StartAddShape(type, true); $(document.body).on("mouseup", checkInsertAutoshape); } else { this.api.StartAddShape("", false); $(document.body).off("mouseup", checkInsertAutoshape); } } }; }, onLaunch: function () { this.toolbar = this.createView("Toolbar"); this.toolbar.on("render:after", _.bind(this.onToolbarAfterRender, this)); }, onToolbarAfterRender: function (toolbar) { toolbar.btnNewDocument.on("click", _.bind(this.onNewDocument, this)); toolbar.btnOpenDocument.on("click", _.bind(this.onOpenDocument, this)); toolbar.btnPrint.on("click", _.bind(this.onPrint, this)); toolbar.btnSave.on("click", _.bind(this.onSave, this)); toolbar.btnUndo.on("click", _.bind(this.onUndo, this)); toolbar.btnRedo.on("click", _.bind(this.onRedo, this)); toolbar.btnCopy.on("click", _.bind(this.onCopyPaste, this, true)); toolbar.btnPaste.on("click", _.bind(this.onCopyPaste, this, false)); toolbar.btnIncFontSize.on("click", _.bind(this.onIncrease, this)); toolbar.btnDecFontSize.on("click", _.bind(this.onDecrease, this)); toolbar.btnBold.on("click", _.bind(this.onBold, this)); toolbar.btnItalic.on("click", _.bind(this.onItalic, this)); toolbar.btnUnderline.on("click", _.bind(this.onUnderline, this)); toolbar.btnStrikeout.on("click", _.bind(this.onStrikeout, this)); toolbar.btnSuperscript.on("click", _.bind(this.onSuperscript, this)); toolbar.btnSubscript.on("click", _.bind(this.onSubscript, this)); toolbar.btnAlignLeft.on("click", _.bind(this.onHorizontalAlign, this, 1)); toolbar.btnAlignCenter.on("click", _.bind(this.onHorizontalAlign, this, 2)); toolbar.btnAlignRight.on("click", _.bind(this.onHorizontalAlign, this, 0)); toolbar.btnAlignJust.on("click", _.bind(this.onHorizontalAlign, this, 3)); toolbar.btnHorizontalAlign.menu.on("item:click", _.bind(this.onMenuHorizontalAlignSelect, this)); toolbar.btnDecLeftOffset.on("click", _.bind(this.onDecOffset, this)); toolbar.btnIncLeftOffset.on("click", _.bind(this.onIncOffset, this)); toolbar.btnMarkers.on("click", _.bind(this.onMarkers, this)); toolbar.btnNumbers.on("click", _.bind(this.onNumbers, this)); toolbar.cmbFontName.on("selected", _.bind(this.onFontNameSelect, this)); toolbar.cmbFontName.on("show:after", _.bind(this.onFontNameOpen, this)); toolbar.cmbFontName.on("hide:after", _.bind(this.onHideMenus, this)); toolbar.cmbFontName.on("combo:blur", _.bind(this.onComboBlur, this)); toolbar.cmbFontSize.on("selected", _.bind(this.onFontSizeSelect, this)); toolbar.cmbFontSize.on("changed:before", _.bind(this.onFontSizeChanged, this, true)); toolbar.cmbFontSize.on("changed:after", _.bind(this.onFontSizeChanged, this, false)); toolbar.cmbFontSize.on("combo:blur", _.bind(this.onComboBlur, this)); toolbar.cmbFontSize.on("show:after", _.bind(this.onFontSizeOpen, this)); toolbar.cmbFontSize.on("hide:after", _.bind(this.onHideMenus, this)); toolbar.mnuMarkersPicker.on("item:click", _.bind(this.onSelectBullets, this, toolbar.btnMarkers)); toolbar.mnuNumbersPicker.on("item:click", _.bind(this.onSelectBullets, this, toolbar.btnNumbers)); toolbar.mnuMultilevelPicker.on("item:click", _.bind(this.onSelectBullets, this, toolbar.btnMultilevels)); toolbar.btnHighlightColor.on("click", _.bind(this.onBtnHighlightColor, this)); toolbar.btnFontColor.on("click", _.bind(this.onBtnFontColor, this)); toolbar.btnParagraphColor.on("click", _.bind(this.onBtnParagraphColor, this)); toolbar.mnuHighlightColorPicker.on("select", _.bind(this.onSelectHighlightColor, this)); toolbar.mnuFontColorPicker.on("select", _.bind(this.onSelectFontColor, this)); toolbar.mnuParagraphColorPicker.on("select", _.bind(this.onParagraphColorPickerSelect, this)); toolbar.mnuHighlightTransparent.on("click", _.bind(this.onHighlightTransparentClick, this)); $("#id-toolbar-menu-auto-fontcolor").on("click", _.bind(this.onAutoFontColor, this)); $("#id-toolbar-menu-new-fontcolor").on("click", _.bind(this.onNewFontColor, this)); $("#id-toolbar-menu-new-paracolor").on("click", _.bind(this.onNewParagraphColor, this)); toolbar.mnuLineSpace.on("item:toggle", _.bind(this.onLineSpaceToggle, this)); toolbar.mnuNonPrinting.on("item:toggle", _.bind(this.onMenuNonPrintingToggle, this)); toolbar.btnShowHidenChars.on("toggle", _.bind(this.onNonPrintingToggle, this)); toolbar.btnInsertPageBreak.on("click", _.bind(this.onPageBreakClick, this)); toolbar.btnInsertPageBreak.menu.on("item:click", _.bind(this.onPageBreakClick, this)); toolbar.mnuInsertSectionBreak.menu.on("item:click", _.bind(this.onSectionBreakClick, this)); toolbar.btnInsertHyperlink.on("click", _.bind(this.onHyperlinkClick, this)); toolbar.mnuTablePicker.on("select", _.bind(this.onTablePickerSelect, this)); toolbar.mnuInsertTable.on("item:click", _.bind(this.onInsertTableClick, this)); toolbar.mnuInsertImage.on("item:click", _.bind(this.onInsertImageClick, this)); toolbar.btnInsertText.on("click", _.bind(this.onInsertTextClick, this)); toolbar.btnInsertShape.menu.on("hide:after", _.bind(this.onInsertShapeHide, this)); toolbar.btnInsertEquation.menu.on("hide:after", _.bind(this.onInsertEquationHide, this)); toolbar.btnDropCap.menu.on("item:click", _.bind(this.onDropCapSelect, this)); toolbar.mnuDropCapAdvanced.on("click", _.bind(this.onDropCapAdvancedClick, this)); toolbar.btnPageOrient.on("toggle", _.bind(this.onPageOrientToggle, this)); toolbar.btnClearStyle.on("click", _.bind(this.onClearStyleClick, this)); toolbar.btnCopyStyle.on("toggle", _.bind(this.onCopyStyleToggle, this)); toolbar.btnAdvSettings.on("click", _.bind(this.onAdvSettingsClick, this)); toolbar.mnuPageSize.on("item:click", _.bind(this.onPageSizeClick, this)); toolbar.mnuColorSchema.on("item:click", _.bind(this.onColorSchemaClick, this)); toolbar.mnuInsertChartPicker.on("item:click", _.bind(this.onSelectChart, this)); toolbar.mnuPageNumberPosPicker.on("item:click", _.bind(this.onInsertPageNumberClick, this)); toolbar.btnEditHeader.menu.on("item:click", _.bind(this.onEditHeaderFooterClick, this)); toolbar.mnuPageNumCurrentPos.on("click", _.bind(this.onPageNumCurrentPosClick, this)); toolbar.listStyles.on("click", _.bind(this.onListStyleSelect, this)); toolbar.mnuitemHideTitleBar.on("toggle", _.bind(this.onHideTitleBar, this)); toolbar.mnuitemHideStatusBar.on("toggle", _.bind(this.onHideStatusBar, this)); toolbar.mnuitemHideRulers.on("toggle", _.bind(this.onHideRulers, this)); toolbar.btnFitPage.on("toggle", _.bind(this.onZoomToPageToggle, this)); toolbar.btnFitWidth.on("toggle", _.bind(this.onZoomToWidthToggle, this)); toolbar.mnuZoomIn.on("click", _.bind(this.onZoomInClick, this)); toolbar.mnuZoomOut.on("click", _.bind(this.onZoomOutClick, this)); this.onSetupCopyStyleButton(); }, setApi: function (api) { this.api = api; this.toolbar.setApi(api); this.api.asc_registerCallback("asc_onFontSize", _.bind(this.onApiFontSize, this)); this.api.asc_registerCallback("asc_onBold", _.bind(this.onApiBold, this)); this.api.asc_registerCallback("asc_onItalic", _.bind(this.onApiItalic, this)); this.api.asc_registerCallback("asc_onUnderline", _.bind(this.onApiUnderline, this)); this.api.asc_registerCallback("asc_onStrikeout", _.bind(this.onApiStrikeout, this)); this.api.asc_registerCallback("asc_onVerticalAlign", _.bind(this.onApiVerticalAlign, this)); this.api.asc_registerCallback("asc_onCanUndo", _.bind(this.onApiCanRevert, this, "undo")); this.api.asc_registerCallback("asc_onCanRedo", _.bind(this.onApiCanRevert, this, "redo")); this.api.asc_registerCallback("asc_onListType", _.bind(this.onApiBullets, this)); this.api.asc_registerCallback("asc_onPrAlign", _.bind(this.onApiParagraphAlign, this)); this.api.asc_registerCallback("asc_onTextColor", _.bind(this.onApiTextColor, this)); this.api.asc_registerCallback("asc_onParaSpacingLine", _.bind(this.onApiLineSpacing, this)); this.api.asc_registerCallback("asc_onCanAddHyperlink", _.bind(this.onApiCanAddHyperlink, this)); this.api.asc_registerCallback("asc_onFocusObject", _.bind(this.onApiFocusObject, this)); this.api.asc_registerCallback("asc_onDocSize", _.bind(this.onApiPageSize, this)); this.api.asc_registerCallback("asc_onPaintFormatChanged", _.bind(this.onApiStyleChange, this)); this.api.asc_registerCallback("asc_onParaStyleName", _.bind(this.onApiParagraphStyleChange, this)); this.api.asc_registerCallback("asc_onEndAddShape", _.bind(this.onApiEndAddShape, this)); this.api.asc_registerCallback("asc_onPageOrient", _.bind(this.onApiPageOrient, this)); this.api.asc_registerCallback("asc_onLockDocumentProps", _.bind(this.onApiLockDocumentProps, this)); this.api.asc_registerCallback("asc_onUnLockDocumentProps", _.bind(this.onApiUnLockDocumentProps, this)); this.api.asc_registerCallback("asc_onLockDocumentSchema", _.bind(this.onApiLockDocumentSchema, this)); this.api.asc_registerCallback("asc_onUnLockDocumentSchema", _.bind(this.onApiUnLockDocumentSchema, this)); this.api.asc_registerCallback("asc_onLockHeaderFooters", _.bind(this.onApiLockHeaderFooters, this)); this.api.asc_registerCallback("asc_onUnLockHeaderFooters", _.bind(this.onApiUnLockHeaderFooters, this)); this.api.asc_registerCallback("asc_onZoomChange", _.bind(this.onApiZoomChange, this)); this.api.asc_registerCallback("asc_onMarkerFormatChanged", _.bind(this.onApiStartHighlight, this)); this.api.asc_registerCallback("asc_onTextHighLight", _.bind(this.onApiHighlightColor, this)); this.api.asc_registerCallback("asc_onInitEditorStyles", _.bind(this.onApiInitEditorStyles, this)); this.api.asc_registerCallback("asc_onСoAuthoringDisconnect", _.bind(this.onApiCoAuthoringDisconnect, this)); Common.NotificationCenter.on("api:disconnect", _.bind(this.onApiCoAuthoringDisconnect, this)); this.api.asc_registerCallback("asc_onCanCopyCut", _.bind(this.onApiCanCopyCut, this)); Common.NotificationCenter.on("copywarning:show", _.bind(function () { this._state.show_copywarning = false; }, this)); this.api.asc_registerCallback("asc_onMathTypes", _.bind(this.onMathTypes, this)); this.onApiPageSize(this.api.get_DocumentWidth(), this.api.get_DocumentHeight()); }, onChangeCompactView: function (view, compact) { window.localStorage.setItem("de-compact-toolbar", compact ? 1 : 0); Common.NotificationCenter.trigger("layout:changed", "toolbar"); Common.NotificationCenter.trigger("edit:complete", this.toolbar); }, onApiFontSize: function (size) { if (!this.flg.setFontSize) { if (this.toolbar.cmbFontSize.getValue() != size) { this.toolbar.cmbFontSize.setValue(size); } } }, onApiBold: function (on) { if (this._state.bold !== on) { this.toolbar.btnBold.toggle(on === true, true); this._state.bold = on; } }, onApiItalic: function (on) { if (this._state.italic !== on) { this.toolbar.btnItalic.toggle(on === true, true); this._state.italic = on; } }, onApiUnderline: function (on) { if (this._state.underline !== on) { this.toolbar.btnUnderline.toggle(on === true, true); this._state.underline = on; } }, onApiStrikeout: function (on) { if (this._state.strike !== on) { this.toolbar.btnStrikeout.toggle(on === true, true); this._state.strike = on; } }, onApiVerticalAlign: function (typeBaseline) { if (this._state.valign !== typeBaseline) { this.toolbar.btnSuperscript.toggle(typeBaseline == 1, true); this.toolbar.btnSubscript.toggle(typeBaseline == 2, true); this._state.valign = typeBaseline; } }, onApiCanRevert: function (which, can) { if (which == "undo") { if (this._state.can_undo !== can) { this.toolbar.btnUndo.setDisabled(!can); this._state.can_undo = can; } } else { if (this._state.can_redo !== can) { this.toolbar.btnRedo.setDisabled(!can); this._state.can_redo = can; } } }, onApiCanCopyCut: function (can) { if (this._state.can_copycut !== can) { this.toolbar.btnCopy.setDisabled(!can); this._state.can_copycut = can; } }, onApiBullets: function (v) { var type = v.get_ListType(); if (this._state.bullets.type != type || this._state.bullets.subtype != v.get_ListSubType() || this.toolbar.btnMarkers.pressed && (type !== 0) || this.toolbar.btnNumbers.pressed && (type !== 1) || this.toolbar.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.toolbar.btnMarkers.toggle(true, true); this.toolbar.mnuMarkersPicker.selectByIndex(this._state.bullets.subtype, true); 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.toolbar.btnNumbers.toggle(true, true); this.toolbar.mnuNumbersPicker.selectByIndex(idx, true); break; case 2: this.toolbar.btnMultilevels.toggle(true, true); this.toolbar.mnuMultilevelPicker.selectByIndex(this._state.bullets.subtype, true); break; } } }, onApiParagraphAlign: function (v) { if (this._state.pralign !== v) { this._state.pralign = v; var index = -1, align, toolbar = this.toolbar; switch (v) { case 0: index = 2; align = "btn-align-right"; break; case 1: index = 0; align = "btn-align-left"; break; case 2: index = 1; align = "btn-align-center"; break; case 3: index = 3; align = "btn-align-just"; break; default: index = -255; align = "btn-align-left"; break; } if (! (index < 0)) { this.toolbar.btnHorizontalAlign.menu.items[index].setChecked(true); } else { if (index == -255) { this._clearChecked(this.toolbar.btnHorizontalAlign.menu); } } var btnHorizontalAlign = this.toolbar.btnHorizontalAlign; if (btnHorizontalAlign.rendered) { var iconEl = $(".btn-icon", btnHorizontalAlign.cmpEl); if (iconEl) { iconEl.removeClass(btnHorizontalAlign.options.icls); btnHorizontalAlign.options.icls = align; iconEl.addClass(btnHorizontalAlign.options.icls); } } if (v === null || v === undefined) { toolbar.btnAlignRight.toggle(false, true); toolbar.btnAlignLeft.toggle(false, true); toolbar.btnAlignCenter.toggle(false, true); toolbar.btnAlignJust.toggle(false, true); return; } toolbar.btnAlignRight.toggle(v === 0, true); toolbar.btnAlignLeft.toggle(v === 1, true); toolbar.btnAlignCenter.toggle(v === 2, true); toolbar.btnAlignJust.toggle(v === 3, true); } }, onApiLineSpacing: function (vc) { var line = (vc.get_Line() === null || vc.get_LineRule() === null || vc.get_LineRule() != 1) ? -1 : vc.get_Line(); if (this._state.linespace !== line) { this._state.linespace = line; _.each(this.toolbar.mnuLineSpace.items, function (item) { item.setChecked(false, true); }); if (line < 0) { return; } if (Math.abs(line - 1) < 0.0001) { this.toolbar.mnuLineSpace.items[0].setChecked(true, true); } else { if (Math.abs(line - 1.15) < 0.0001) { this.toolbar.mnuLineSpace.items[1].setChecked(true, true); } else { if (Math.abs(line - 1.5) < 0.0001) { this.toolbar.mnuLineSpace.items[2].setChecked(true, true); } else { if (Math.abs(line - 2) < 0.0001) { this.toolbar.mnuLineSpace.items[3].setChecked(true, true); } else { if (Math.abs(line - 2.5) < 0.0001) { this.toolbar.mnuLineSpace.items[4].setChecked(true, true); } else { if (Math.abs(line - 3) < 0.0001) { this.toolbar.mnuLineSpace.items[5].setChecked(true, true); } } } } } } } }, onApiCanAddHyperlink: function (value) { var need_disable = !value || this._state.prcontrolsdisable; if (need_disable != this.toolbar.btnInsertHyperlink.isDisabled() && this.editMode) { this.toolbar.btnInsertHyperlink.setDisabled(need_disable); } }, onApiPageSize: function (w, h) { if (Math.abs(this._state.pgsize[0] - w) > 0.01 || Math.abs(this._state.pgsize[1] - h) > 0.01) { this._state.pgsize = [w, h]; if (this.toolbar.mnuPageSize) { _.each(this.toolbar.mnuPageSize.items, function (item) { if (Math.abs(item.value[0] - w) < 0.01 && Math.abs(item.value[1] - h) < 0.01) { item.setChecked(true); return false; } }, this); } } }, onApiFocusObject: function (selectedObjects) { if (!this.editMode) { return; } var pr, sh, i = -1, type, paragraph_locked = false, header_locked = false, can_add_table = false, can_add_image = false, enable_dropcap = undefined, disable_dropcapadv = true, frame_pr = undefined, toolbar = this.toolbar, in_header = false, in_chart = false, in_equation = false, btn_eq_state = false; 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(); can_add_image = pr.get_CanAddImage(); frame_pr = pr; sh = pr.get_Shade(); } else { if (type === c_oAscTypeSelectElement.Header) { header_locked = pr.get_Locked(); in_header = true; } else { if (type === c_oAscTypeSelectElement.Image) { in_header = true; if (pr && pr.get_ChartProperties()) { in_chart = true; } } else { if (type === c_oAscTypeSelectElement.Math) { in_equation = true; if (c_oAscMathInterfaceType.Common === pr.get_Type()) { btn_eq_state = true; } } } } } 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; } } if (sh) { this.onParagraphColor(sh); } var need_disable = paragraph_locked || header_locked; if (this._state.prcontrolsdisable != need_disable) { if (this._state.activated) { this._state.prcontrolsdisable = need_disable; } _.each(toolbar.paragraphControls, function (item) { item.setDisabled(need_disable); }, this); } var need_text_disable = paragraph_locked || header_locked || in_chart; if (this._state.textonlycontrolsdisable != need_text_disable) { if (this._state.activated) { this._state.textonlycontrolsdisable = need_text_disable; } if (!need_disable) { _.each(toolbar.textOnlyControls, function (item) { item.setDisabled(need_text_disable); }, this); } toolbar.btnCopyStyle.setDisabled(need_text_disable); toolbar.btnClearStyle.setDisabled(need_text_disable); } if (enable_dropcap && frame_pr) { var value = frame_pr.get_FramePr(), 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 || in_equation; if (need_disable !== toolbar.btnDropCap.isDisabled()) { toolbar.btnDropCap.setDisabled(need_disable); } if (!toolbar.btnDropCap.isDisabled() && disable_dropcapadv !== toolbar.mnuDropCapAdvanced.isDisabled()) { toolbar.mnuDropCapAdvanced.setDisabled(disable_dropcapadv); } need_disable = !can_add_table || header_locked || in_equation; if (need_disable != toolbar.btnInsertTable.isDisabled()) { toolbar.btnInsertTable.setDisabled(need_disable); } need_disable = toolbar.mnuPageNumCurrentPos.isDisabled() && toolbar.mnuPageNumberPosPicker.isDisabled(); if (need_disable != toolbar.mnuInsertPageNum.isDisabled()) { toolbar.mnuInsertPageNum.setDisabled(need_disable); } need_disable = paragraph_locked || header_locked || in_header || in_equation && !btn_eq_state; if (need_disable != toolbar.btnInsertPageBreak.isDisabled()) { toolbar.btnInsertPageBreak.setDisabled(need_disable); } need_disable = paragraph_locked || header_locked || !can_add_image || in_equation; if (need_disable != toolbar.btnInsertChart.isDisabled()) { toolbar.btnInsertChart.setDisabled(need_disable); toolbar.btnInsertImage.setDisabled(need_disable); toolbar.btnInsertShape.setDisabled(need_disable); toolbar.btnInsertText.setDisabled(need_disable); } need_disable = paragraph_locked || header_locked || in_chart || !can_add_image && !in_equation; if (need_disable !== toolbar.btnInsertEquation.isDisabled()) { toolbar.btnInsertEquation.setDisabled(need_disable); } need_disable = paragraph_locked || header_locked || in_equation; if (need_disable !== toolbar.btnSuperscript.isDisabled()) { toolbar.btnSuperscript.setDisabled(need_disable); toolbar.btnSubscript.setDisabled(need_disable); } if (in_equation !== toolbar.btnEditHeader.isDisabled()) { toolbar.btnEditHeader.setDisabled(in_equation); } }, onApiStyleChange: function (v) { this.toolbar.btnCopyStyle.toggle(v, true); this.modeAlwaysSetStyle = false; }, onApiParagraphStyleChange: function (name) { if (this._state.prstyle != name) { var listStyle = this.toolbar.listStyles, listStylesVisible = (listStyle.rendered); if (listStylesVisible) { listStyle.suspendEvents(); var styleRec = listStyle.menuPicker.store.findWhere({ title: name }); this._state.prstyle = (listStyle.menuPicker.store.length > 0) ? name : undefined; listStyle.menuPicker.selectRecord(styleRec); listStyle.resumeEvents(); } } }, onApiPageOrient: function (isportrait) { if (this._state.pgorient !== isportrait) { this.toolbar.btnPageOrient.toggle(!isportrait, true); this._state.pgorient = isportrait; } }, onApiLockDocumentProps: function () { if (this._state.lock_doc !== true) { this.toolbar.btnPageOrient.setDisabled(true); this.toolbar.btnPageSize.setDisabled(true); if (this._state.activated) { this._state.lock_doc = true; } } }, onApiUnLockDocumentProps: function () { if (this._state.lock_doc !== false) { this.toolbar.btnPageOrient.setDisabled(false); this.toolbar.btnPageSize.setDisabled(false); if (this._state.activated) { this._state.lock_doc = false; } } }, onApiLockDocumentSchema: function () { this.toolbar.btnColorSchemas.setDisabled(true); }, onApiUnLockDocumentSchema: function () { this.toolbar.btnColorSchemas.setDisabled(false); }, onApiLockHeaderFooters: function () { this.toolbar.mnuPageNumberPosPicker.setDisabled(true); this.toolbar.mnuInsertPageNum.setDisabled(this.toolbar.mnuPageNumCurrentPos.isDisabled()); }, onApiUnLockHeaderFooters: function () { this.toolbar.mnuPageNumberPosPicker.setDisabled(false); this.toolbar.mnuInsertPageNum.setDisabled(false); }, onApiZoomChange: function (percent, type) { this.toolbar.btnFitPage.setChecked(type == 2, true); this.toolbar.btnFitWidth.setChecked(type == 1, true); $(".menu-zoom .zoom", this.toolbar.el).html(percent + "%"); }, onApiStartHighlight: function (pressed) { this.toolbar.btnHighlightColor.toggle(pressed, true); }, onApiHighlightColor: function (c) { var textpr = this.api.get_TextProps().get_TextPr(); if (textpr) { c = textpr.get_HighLight(); if (c == -1) { if (this._state.clrhighlight != -1) { this.toolbar.mnuHighlightTransparent.setChecked(true, true); if (this.toolbar.mnuHighlightColorPicker.cmpEl) { this._state.clrhighlight = -1; this.toolbar.mnuHighlightColorPicker.select(null, true); } } } else { if (c !== null) { if (this._state.clrhighlight != c.get_hex().toUpperCase()) { this.toolbar.mnuHighlightTransparent.setChecked(false); this._state.clrhighlight = c.get_hex().toUpperCase(); if (_.contains(this.toolbar.mnuHighlightColorPicker.colors, this._state.clrhighlight)) { this.toolbar.mnuHighlightColorPicker.select(this._state.clrhighlight, true); } } } else { if (this._state.clrhighlight !== c) { this.toolbar.mnuHighlightTransparent.setChecked(false, true); this.toolbar.mnuHighlightColorPicker.select(null, true); this._state.clrhighlight = c; } } } } }, onApiInitEditorStyles: function (styles) { this._onInitEditorStyles(styles); }, onNewDocument: function (btn, e) { if (this.api) { this.api.OpenNewDocument(); } Common.NotificationCenter.trigger("edit:complete", this.toolbar); Common.component.Analytics.trackEvent("ToolBar", "New Document"); }, onOpenDocument: function (btn, e) { if (this.api) { this.api.LoadDocumentFromDisk(); } Common.NotificationCenter.trigger("edit:complete", this.toolbar); Common.component.Analytics.trackEvent("ToolBar", "Open Document"); }, onPrint: function (e) { if (this.api) { this.api.asc_Print(); } Common.NotificationCenter.trigger("edit:complete", this.toolbar); Common.component.Analytics.trackEvent("Print"); Common.component.Analytics.trackEvent("ToolBar", "Print"); }, onSave: function (e) { if (this.api) { var isModified = this.api.asc_isDocumentCanSave(); var isSyncButton = $(".btn-icon", this.toolbar.btnSave.cmpEl).hasClass("btn-synch"); if (!isModified && !isSyncButton) { return; } this.api.asc_Save(); } this.toolbar.btnSave.setDisabled(true); Common.NotificationCenter.trigger("edit:complete", this.toolbar); Common.component.Analytics.trackEvent("Save"); Common.component.Analytics.trackEvent("ToolBar", "Save"); }, onUndo: function (btn, e) { if (this.api) { this.api.Undo(); } Common.NotificationCenter.trigger("edit:complete", this.toolbar); Common.component.Analytics.trackEvent("ToolBar", "Undo"); }, onRedo: function (btn, e) { if (this.api) { this.api.Redo(); } Common.NotificationCenter.trigger("edit:complete", this.toolbar); Common.component.Analytics.trackEvent("ToolBar", "Redo"); }, onCopyPaste: function (copy, e) { var me = this; if (me.api) { var value = window.localStorage.getItem("de-hide-copywarning"); if (! (value && parseInt(value) == 1) && this._state.show_copywarning) { (new Common.Views.CopyWarningDialog({ handler: function (dontshow) { copy ? me.api.Copy() : me.api.Paste(); if (dontshow) { window.localStorage.setItem("de-hide-copywarning", 1); } Common.NotificationCenter.trigger("edit:complete", me.toolbar); } })).show(); } else { copy ? me.api.Copy() : me.api.Paste(); Common.NotificationCenter.trigger("edit:complete", me.toolbar); } Common.component.Analytics.trackEvent("ToolBar", "Copy Warning"); } else { Common.NotificationCenter.trigger("edit:complete", me.toolbar); } }, onIncrease: function (e) { if (this.api) { this.api.FontSizeIn(); } Common.NotificationCenter.trigger("edit:complete", this.toolbar); Common.component.Analytics.trackEvent("ToolBar", "Font Size"); }, onDecrease: function (e) { if (this.api) { this.api.FontSizeOut(); } Common.NotificationCenter.trigger("edit:complete", this.toolbar); Common.component.Analytics.trackEvent("ToolBar", "Font Size"); }, onBold: function (btn, e) { this._state.bold = undefined; if (this.api) { this.api.put_TextPrBold(btn.pressed); } Common.NotificationCenter.trigger("edit:complete", this.toolbar); Common.component.Analytics.trackEvent("ToolBar", "Bold"); }, onItalic: function (btn, e) { this._state.italic = undefined; if (this.api) { this.api.put_TextPrItalic(btn.pressed); } Common.NotificationCenter.trigger("edit:complete", this.toolbar); Common.component.Analytics.trackEvent("ToolBar", "Italic"); }, onUnderline: function (btn, e) { this._state.underline = undefined; if (this.api) { this.api.put_TextPrUnderline(btn.pressed); } Common.NotificationCenter.trigger("edit:complete", this.toolbar); Common.component.Analytics.trackEvent("ToolBar", "Underline"); }, onStrikeout: function (btn, e) { this._state.strike = undefined; if (this.api) { this.api.put_TextPrStrikeout(btn.pressed); } Common.NotificationCenter.trigger("edit:complete", this.toolbar); Common.component.Analytics.trackEvent("ToolBar", "Strikeout"); }, onSuperscript: function (btn, e) { if (!this.toolbar.btnSubscript.pressed) { this._state.valign = undefined; if (this.api) { this.api.put_TextPrBaseline(btn.pressed ? 1 : 0); } Common.NotificationCenter.trigger("edit:complete", this.toolbar); Common.component.Analytics.trackEvent("ToolBar", "Superscript"); } }, onSubscript: function (btn, e) { if (!this.toolbar.btnSuperscript.pressed) { this._state.valign = undefined; if (this.api) { this.api.put_TextPrBaseline(btn.pressed ? 2 : 0); } Common.NotificationCenter.trigger("edit:complete", this.toolbar); Common.component.Analytics.trackEvent("ToolBar", "Subscript"); } }, onDecOffset: function (btn, e) { if (this.api) { this.api.DecreaseIndent(); } Common.NotificationCenter.trigger("edit:complete", this.toolbar); Common.component.Analytics.trackEvent("ToolBar", "Indent"); }, onIncOffset: function (btn, e) { if (this.api) { this.api.IncreaseIndent(); } Common.NotificationCenter.trigger("edit:complete", this.toolbar); Common.component.Analytics.trackEvent("ToolBar", "Indent"); }, onHorizontalAlign: function (type, btn, e) { this._state.pralign = undefined; if (this.api) { this.api.put_PrAlign(type); } Common.NotificationCenter.trigger("edit:complete", this.toolbar); Common.component.Analytics.trackEvent("ToolBar", "Align"); }, onMenuHorizontalAlignSelect: function (menu, item) { this._state.pralign = undefined; var btnHorizontalAlign = this.toolbar.btnHorizontalAlign, iconEl = $(".btn-icon", btnHorizontalAlign.cmpEl); if (iconEl) { iconEl.removeClass(btnHorizontalAlign.options.icls); btnHorizontalAlign.options.icls = !item.checked ? "btn-align-left" : item.options.icls; iconEl.addClass(btnHorizontalAlign.options.icls); } if (this.api && item.checked) { this.api.put_PrAlign(item.value); } Common.NotificationCenter.trigger("edit:complete", this.toolbar); Common.component.Analytics.trackEvent("ToolBar", "Horizontal Align"); }, onMarkers: function (btn, e) { var record = { data: { type: 0, subtype: btn.pressed ? 0 : -1 } }; this.onSelectBullets(null, null, null, record); Common.NotificationCenter.trigger("edit:complete", this.toolbar); }, onNumbers: function (btn, e) { var record = { data: { type: 1, subtype: btn.pressed ? 0 : -1 } }; this.onSelectBullets(null, null, null, record); Common.NotificationCenter.trigger("edit:complete", this.toolbar); }, onComboBlur: function () { Common.NotificationCenter.trigger("edit:complete", this.toolbar); }, onFontNameSelect: function (combo, record) { if (this.api) { this.api.put_TextPrFontName(record.name); } Common.NotificationCenter.trigger("edit:complete", this.toolbar); Common.component.Analytics.trackEvent("ToolBar", "Font Name"); }, onFontNameOpen: function (combo) { _.delay(function () { $("input", combo.cmpEl).select().focus(); }, 10); }, onFontSizeSelect: function (combo, record) { this.flg.setFontSize = true; if (this.api) { this.api.put_TextPrFontSize(record.value); } Common.NotificationCenter.trigger("edit:complete", this.toolbar); this.flg.setFontSize = false; Common.component.Analytics.trackEvent("ToolBar", "Font Size"); }, onFontSizeChanged: function (before, combo, record, e) { var value, me = this; if (before) { var item = combo.store.findWhere({ displayValue: record.value }); if (!item) { value = /^\+?(\d*\.?\d+)$|^\+?(\d+\.?\d*)$/.exec(record.value); if (!value) { value = this._getApiTextSize(); Common.UI.error({ msg: this.textFontSizeErr, callback: function () { _.defer(function (btn) { me.api.asc_enableKeyEvents(false); $("input", combo.cmpEl).focus(); }); } }); combo.setRawValue(value); e.preventDefault(); return false; } } } else { value = parseFloat(record.value); value = value > 300 ? 300 : value < 1 ? 1 : Math.floor((value + 0.4) * 2) / 2; combo.setRawValue(value); this.flg.setFontSize = true; if (this.api) { this.api.put_TextPrFontSize(value); } Common.NotificationCenter.trigger("edit:complete", this.toolbar); this.flg.setFontSize = false; } }, onFontSizeOpen: function (combo) { _.delay(function () { $("input", combo.cmpEl).select().focus(); }, 10); }, onSelectBullets: function (btn, picker, itemView, record) { var rawData = {}, isPickerSelect = _.isFunction(record.toJSON); if (isPickerSelect) { if (record.get("selected")) { rawData = record.toJSON(); } else { return; } } else { rawData = record; } if (btn) { btn.toggle(rawData.data.subtype > -1, true); } this._state.bullets.type = rawData.data.type; this._state.bullets.subtype = rawData.data.subtype; if (this.api) { this.api.put_ListType(rawData.data.type, rawData.data.subtype); } Common.component.Analytics.trackEvent("ToolBar", "List Type"); Common.NotificationCenter.trigger("edit:complete", this.toolbar); }, onLineSpaceToggle: function (menu, item, state, e) { if ( !! state) { this._state.linespace = undefined; if (this.api) { this.api.put_PrLineSpacing(c_paragraphLinerule.LINERULE_AUTO, item.value); } Common.component.Analytics.trackEvent("ToolBar", "Line Spacing"); Common.NotificationCenter.trigger("edit:complete", this.toolbar); } }, onMenuNonPrintingToggle: function (menu, item, state, e) { var me = this; if (item.value === "characters") { window.localStorage.setItem("de-show-hiddenchars", state); me.toolbar.btnShowHidenChars.toggle(state, true); if (me.api) { me.api.put_ShowParaMarks(state); } Common.NotificationCenter.trigger("edit:complete", me); Common.component.Analytics.trackEvent("ToolBar", "Hidden Characters"); } else { if (item.value === "table") { window.localStorage.setItem("de-show-tableline", state); me.api && me.api.put_ShowTableEmptyLine(state); Common.NotificationCenter.trigger("edit:complete", me); } } }, onNonPrintingToggle: function (btn, state) { var me = this; if (state) { me.toolbar.mnuNonPrinting.items[0].setChecked(true, true); Common.component.Analytics.trackEvent("ToolBar", "Hidden Characters"); } else { me.toolbar.mnuNonPrinting.items[0].setChecked(false, true); } if (me.api) { me.api.put_ShowParaMarks(state); } window.localStorage.setItem("de-show-hiddenchars", state); Common.NotificationCenter.trigger("edit:complete", me); }, onPageBreakClick: function (menu, item, e) { if (this.api) { if (item.value === "section") {} else { this.api.put_AddPageBreak(); Common.NotificationCenter.trigger("edit:complete", this.toolbar); Common.component.Analytics.trackEvent("ToolBar", "Page Break"); } } }, onSectionBreakClick: function (menu, item, e) { if (this.api) { this.api.add_SectionBreak(item.value); Common.NotificationCenter.trigger("edit:complete", this.toolbar); Common.component.Analytics.trackEvent("ToolBar", "Section Break"); } }, onHyperlinkClick: function (btn) { var me = this, win, props, text; if (me.api) { var handlerDlg = function (dlg, result) { if (result == "ok") { props = dlg.getSettings(); (text !== false) ? me.api.add_Hyperlink(props) : me.api.change_Hyperlink(props); } Common.NotificationCenter.trigger("edit:complete", me.toolbar); }; text = me.api.can_AddHyperlink(); if (text !== false) { win = new DE.Views.HyperlinkSettingsDialog({ handler: handlerDlg }); props = new CHyperlinkProperty(); props.put_Text(text); win.show(); win.setSettings(props); } else { var selectedElements = me.api.getSelectedElements(); if (selectedElements && _.isArray(selectedElements)) { _.each(selectedElements, function (el, i) { if (selectedElements[i].get_ObjectType() == c_oAscTypeSelectElement.Hyperlink) { props = selectedElements[i].get_ObjectValue(); } }); } if (props) { win = new DE.Views.HyperlinkSettingsDialog({ handler: handlerDlg }); win.show(); win.setSettings(props); } } } Common.component.Analytics.trackEvent("ToolBar", "Add Hyperlink"); }, onTablePickerSelect: function (picker, columns, rows, e) { if (this.api) { this.toolbar.fireEvent("inserttable", this.toolbar); this.api.put_Table(columns, rows); } Common.NotificationCenter.trigger("edit:complete", this.toolbar); Common.component.Analytics.trackEvent("ToolBar", "Table"); }, onInsertTableClick: function (menu, item, e) { if (item.value === "custom") { var me = this; (new Common.Views.InsertTableDialog({ handler: function (result, value) { if (result == "ok") { if (me.api) { me.toolbar.fireEvent("inserttable", me.toolbar); me.api.put_Table(value.columns, value.rows); } Common.NotificationCenter.trigger("edit:complete", me.toolbar); Common.component.Analytics.trackEvent("ToolBar", "Table"); } } })).show(); } }, onInsertImageClick: function (menu, item, e) { var me = this; if (item.value === "file") { this.toolbar.fireEvent("insertimage", this.toolbar); if (this.api) { this.api.AddImage(); } Common.NotificationCenter.trigger("edit:complete", me.toolbar); Common.component.Analytics.trackEvent("ToolBar", "Image"); } else { (new Common.Views.ImageFromUrlDialog({ handler: function (result, value) { if (result == "ok") { if (me.api) { var checkUrl = value.replace(/ /g, ""); if (!_.isEmpty(checkUrl)) { me.toolbar.fireEvent("insertimage", me.toolbar); me.api.AddImageUrl(checkUrl); Common.component.Analytics.trackEvent("ToolBar", "Image"); } else { Common.UI.warning({ msg: this.textEmptyImgUrl }); } } Common.NotificationCenter.trigger("edit:complete", me.toolbar); } } })).show(); } }, onInsertTextClick: function (btn, e) { if (this.api) { this._addAutoshape(btn.pressed, "textRect"); } if (this.toolbar.btnInsertShape.pressed) { this.toolbar.btnInsertShape.toggle(false, true); } if (this.toolbar.btnInsertEquation.pressed) { this.toolbar.btnInsertEquation.toggle(false, true); } Common.NotificationCenter.trigger("edit:complete", this.toolbar, this.toolbar.btnInsertShape); Common.component.Analytics.trackEvent("ToolBar", "Add Text"); }, onInsertShapeHide: function (btn, e) { if (this.toolbar.btnInsertShape.pressed && !this._isAddingShape) { this.toolbar.btnInsertShape.toggle(false, true); } this._isAddingShape = false; Common.NotificationCenter.trigger("edit:complete", this.toolbar, this.toolbar.btnInsertShape); }, onInsertEquationHide: function (btn, e) { if (this.toolbar.btnInsertEquation.pressed && !this._isAddingEquation) { this.toolbar.btnInsertEquation.toggle(false, true); } this._isAddingEquation = false; Common.NotificationCenter.trigger("edit:complete", this.toolbar, this.toolbar.btnInsertEquation); }, onPageOrientToggle: function (btn, state, e) { this._state.pgorient = undefined; if (this.api) { this.api.change_PageOrient(!state); } Common.NotificationCenter.trigger("edit:complete", this.toolbar); Common.component.Analytics.trackEvent("ToolBar", "Page Orientation"); }, onClearStyleClick: function (btn, e) { if (this.api) { this.api.ClearFormating(); } Common.NotificationCenter.trigger("edit:complete", this.toolbar); }, onCopyStyleToggle: function (btn, state, e) { if (this.api) { this.api.SetPaintFormat(state ? 1 : 0); } Common.NotificationCenter.trigger("edit:complete", this.toolbar); this.modeAlwaysSetStyle = state; }, onAdvSettingsClick: function (btn, e) { this.toolbar.fireEvent("file:settings", this); btn.cmpEl.blur(); }, onPageSizeClick: function (menu, item, state) { if (this.api && state) { this._state.pgsize = [0, 0]; this.api.change_DocSize(item.value[0], item.value[1]); Common.component.Analytics.trackEvent("ToolBar", "Page Size"); } Common.NotificationCenter.trigger("edit:complete", this.toolbar); }, onColorSchemaClick: function (menu, item) { if (this.api) { this.api.ChangeColorScheme(item.value); Common.component.Analytics.trackEvent("ToolBar", "Color Scheme"); } Common.NotificationCenter.trigger("edit:complete", this.toolbar); }, onDropCapSelect: function (menu, item) { if (_.isUndefined(item.value)) { return; } this._state.dropcap = undefined; if (this.api && item.checked) { if (item.value === 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 (!_.isUndefined(value)) { value = new CParagraphFrame(); value.put_FromDropCapMenu(true); value.put_DropCap(item.value); this.api.put_FramePr(value); } else { this.api.asc_addDropCap((item.value === c_oAscDropCap.Drop)); } break; } } } } Common.NotificationCenter.trigger("edit:complete", this.toolbar); 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.toolbar.btnDropCap.menu); } else { this.toolbar.btnDropCap.menu.items[index].setChecked(true); } this._state.dropcap = v; }, onDropCapAdvancedClick: function () { var win, props, text, me = this; if (_.isUndefined(me.fontstore)) { me.fontstore = new Common.Collections.Fonts(); var fonts = me.toolbar.cmbFontName.store.toJSON(); var arr = []; _.each(fonts, function (font, index) { if (!font.cloneid) { arr.push(_.clone(font)); } }); me.fontstore.add(arr); } if (me.api) { var selectedElements = me.api.getSelectedElements(), selectedElementsLenght = selectedElements.length; if (selectedElements && _.isArray(selectedElements)) { for (var i = 0; i < selectedElementsLenght; i++) { if (selectedElements[i].get_ObjectType() == c_oAscTypeSelectElement.Paragraph) { props = selectedElements[i].get_ObjectValue(); break; } } } if (props) { (new DE.Views.DropcapSettingsAdvanced({ tableStylerRows: 2, tableStylerColumns: 1, fontStore: me.fontstore, paragraphProps: props, borderProps: me.borderAdvancedProps, api: me.api, isFrame: false, handler: function (result, value) { if (result == "ok") { me.borderAdvancedProps = value.borderProps; if (value.paragraphProps && value.paragraphProps.get_DropCap() === c_oAscDropCap.None) { me.api.removeDropcap(true); } else { me.api.put_FramePr(value.paragraphProps); } } Common.NotificationCenter.trigger("edit:complete", me.toolbar); } })).show(); } } }, onSelectChart: function (picker, item, record) { var me = this, type = record.get("type"); if (!this.diagramEditor) { this.diagramEditor = this.getApplication().getController("Common.Controllers.ExternalDiagramEditor").getView("Common.Views.ExternalDiagramEditor"); } if (this.diagramEditor && me.api) { this.diagramEditor.setEditMode(false); this.diagramEditor.show(); var chart = me.api.asc_getChartObject(type); if (chart) { this.diagramEditor.setChartData(new Asc.asc_CChartBinary(chart)); } me.toolbar.fireEvent("insertchart", me.toolbar); } }, onInsertPageNumberClick: function (picker, item, record) { if (this.api) { this.api.put_PageNum(record.get("data").type, record.get("data").subtype); } Common.NotificationCenter.trigger("edit:complete", this.toolbar); Common.component.Analytics.trackEvent("ToolBar", "Page Number"); }, onEditHeaderFooterClick: function (menu, item) { if (this.api) { if (item.value == "header") { this.api.GoToHeader(this.api.getCurrentPage()); } else { if (item.value == "footer") { this.api.GoToFooter(this.api.getCurrentPage()); } else { return; } } Common.NotificationCenter.trigger("edit:complete", this.toolbar); Common.component.Analytics.trackEvent("ToolBar", "Edit " + item.value); } }, onPageNumCurrentPosClick: function (item) { if (this.api) { this.api.put_PageNum(-1); } Common.NotificationCenter.trigger("edit:complete", this.toolbar); Common.component.Analytics.trackEvent("ToolBar", "Page Number"); }, onListStyleSelect: function (combo, record) { this._state.prstyle = undefined; if (this.api) { this.api.put_Style(record.get("title")); } Common.NotificationCenter.trigger("edit:complete", this.toolbar); Common.component.Analytics.trackEvent("ToolBar", "Style"); }, onHideTitleBar: function (item, checked) { var headerView = this.getApplication().getController("Viewport").getView("Common.Views.Header"); headerView && headerView.setVisible(!checked); window.localStorage.setItem("de-hidden-title", checked ? 1 : 0); Common.NotificationCenter.trigger("layout:changed", "header"); Common.NotificationCenter.trigger("edit:complete", this.toolbar); }, onHideStatusBar: function (item, checked) { var headerView = this.getApplication().getController("Statusbar").getView("Statusbar"); headerView && headerView.setVisible(!checked); window.localStorage.setItem("de-hidden-status", checked ? 1 : 0); Common.NotificationCenter.trigger("layout:changed", "status"); Common.NotificationCenter.trigger("edit:complete", this.toolbar); }, onHideRulers: function (item, checked) { if (this.api) { this.api.asc_SetViewRulers(!checked); } window.localStorage.setItem("de-hidden-rulers", checked ? 1 : 0); Common.NotificationCenter.trigger("layout:changed", "rulers"); Common.NotificationCenter.trigger("edit:complete", this.toolbar); }, onZoomToPageToggle: function (item, state) { if (this.api) { if (state) { this.api.zoomFitToPage(); } else { this.api.zoomCustomMode(); } } Common.NotificationCenter.trigger("edit:complete", this.toolbar); }, onZoomToWidthToggle: function (item, state) { if (this.api) { if (state) { this.api.zoomFitToWidth(); } else { this.api.zoomCustomMode(); } } Common.NotificationCenter.trigger("edit:complete", this.toolbar); }, onZoomInClick: function (btn) { if (this.api) { this.api.zoomIn(); } Common.NotificationCenter.trigger("edit:complete", this.toolbar); }, onZoomOutClick: function (btn) { if (this.api) { this.api.zoomOut(); } Common.NotificationCenter.trigger("edit:complete", this.toolbar); }, _clearBullets: function () { this.toolbar.btnMarkers.toggle(false, true); this.toolbar.btnNumbers.toggle(false, true); this.toolbar.btnMultilevels.toggle(false, true); this.toolbar.mnuMarkersPicker.selectByIndex(0, true); this.toolbar.mnuNumbersPicker.selectByIndex(0, true); this.toolbar.mnuMultilevelPicker.selectByIndex(0, true); }, _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; }, onNewFontColor: function (picker, color) { this.toolbar.mnuFontColorPicker.addNewColor(); }, onAutoFontColor: function (e) { this._state.clrtext = this._state.clrtext_asccolor = undefined; var color = new CAscColor(); color.put_auto(true); this.api.put_TextColor(color); this.toolbar.btnFontColor.currentColor = { color: color, isAuto: true }; $(".btn-color-value-line", this.toolbar.btnFontColor.cmpEl).css("background-color", "#000"); this.toolbar.mnuFontColorPicker.clearSelection(); this.toolbar.mnuFontColorPicker.currentColor = { color: color, isAuto: true }; }, onNewParagraphColor: function (picker, color) { this.toolbar.mnuParagraphColorPicker.addNewColor(); }, onSelectHighlightColor: function (picker, color) { this._setMarkerColor(color, "menu"); }, onSelectFontColor: function (picker, color) { this._state.clrtext = this._state.clrtext_asccolor = undefined; var clr = (typeof(color) == "object") ? (color.isAuto ? "#000" : color.color) : color; this.toolbar.btnFontColor.currentColor = color; $(".btn-color-value-line", this.toolbar.btnFontColor.cmpEl).css("background-color", "#" + clr); this.toolbar.mnuFontColorPicker.currentColor = color; if (this.api) { this.api.put_TextColor(color.isAuto ? color.color : Common.Utils.ThemeColor.getRgbColor(color)); } Common.component.Analytics.trackEvent("ToolBar", "Text Color"); }, onParagraphColorPickerSelect: function (picker, color) { this._state.clrback = this._state.clrshd_asccolor = undefined; var clr = (typeof(color) == "object") ? color.color : color; this.toolbar.btnParagraphColor.currentColor = color; $(".btn-color-value-line", this.toolbar.btnParagraphColor.cmpEl).css("background-color", color != "transparent" ? "#" + clr : clr); this.toolbar.mnuParagraphColorPicker.currentColor = color; if (this.api) { if (color == "transparent") { this.api.put_ParagraphShade(false); } else { this.api.put_ParagraphShade(true, Common.Utils.ThemeColor.getRgbColor(color)); } } Common.NotificationCenter.trigger("edit:complete", this); }, onBtnHighlightColor: function (btn) { if (btn.pressed) { this._setMarkerColor(btn.currentColor); Common.component.Analytics.trackEvent("ToolBar", "Highlight Color"); } else { this.api.SetMarkerFormat(false); } }, onBtnFontColor: function () { this.toolbar.mnuFontColorPicker.trigger("select", this.toolbar.mnuFontColorPicker, this.toolbar.mnuFontColorPicker.currentColor); }, onBtnParagraphColor: function () { this.toolbar.mnuParagraphColorPicker.trigger("select", this.toolbar.mnuParagraphColorPicker, this.toolbar.mnuParagraphColorPicker.currentColor); }, onHighlightTransparentClick: function (item, e) { this._setMarkerColor("transparent", "menu"); item.setChecked(true, true); this.toolbar.btnHighlightColor.currentColor = "transparent"; $(".btn-color-value-line", this.toolbar.btnHighlightColor.cmpEl).css("background-color", "transparent"); }, onParagraphColor: function (shd) { var picker = this.toolbar.mnuParagraphColorPicker, clr; if (shd !== null && shd !== undefined && shd.get_Value() === shd_Clear) { var color = shd.get_Color(); if (color) { if (color.get_type() == c_oAscColor.COLOR_TYPE_SCHEME) { clr = { color: Common.Utils.ThemeColor.getHexColor(color.get_r(), color.get_g(), color.get_b()), effectValue: color.get_value() }; } else { clr = Common.Utils.ThemeColor.getHexColor(color.get_r(), color.get_g(), color.get_b()); } } else { clr = "transparent"; } } else { clr = "transparent"; } var type1 = typeof(clr), type2 = typeof(this._state.clrback); if ((type1 !== type2) || (type1 == "object" && (clr.effectValue !== this._state.clrback.effectValue || this._state.clrback.color.indexOf(clr.color) < 0)) || (type1 != "object" && this._state.clrback.indexOf(clr) < 0)) { if (typeof(clr) == "object") { var isselected = false; for (var i = 0; i < 10; i++) { if (Common.Utils.ThemeColor.ThemeValues[i] == clr.effectValue) { picker.select(clr, true); isselected = true; break; } } if (!isselected) { picker.clearSelection(); } } else { picker.select(clr, true); } this._state.clrback = clr; } this._state.clrshd_asccolor = shd; }, onApiTextColor: function (color) { if (color.get_auto()) { if (this._state.clrtext !== "auto") { this.toolbar.mnuFontColorPicker.clearSelection(); var clr_item = this.toolbar.btnFontColor.menu.$el.find("#id-toolbar-menu-auto-fontcolor > a"); ! clr_item.hasClass("selected") && clr_item.addClass("selected"); this._state.clrtext = "auto"; } } else { var picker = this.toolbar.mnuFontColorPicker, clr; if (color) { color.get_type() == c_oAscColor.COLOR_TYPE_SCHEME ? clr = { color: Common.Utils.ThemeColor.getHexColor(color.get_r(), color.get_g(), color.get_b()), effectValue: color.get_value() } : clr = Common.Utils.ThemeColor.getHexColor(color.get_r(), color.get_g(), color.get_b()); } var type1 = typeof(clr), type2 = typeof(this._state.clrtext); if ((this._state.clrtext == "auto") || (type1 !== type2) || (type1 == "object" && (clr.effectValue !== this._state.clrtext.effectValue || this._state.clrtext.color.indexOf(clr.color) < 0)) || (type1 != "object" && this._state.clrtext.indexOf(clr) < 0)) { var clr_item = this.toolbar.btnFontColor.menu.$el.find("#id-toolbar-menu-auto-fontcolor > a"); clr_item.hasClass("selected") && clr_item.removeClass("selected"); if (typeof(clr) == "object") { var isselected = false; for (var i = 0; i < 10; i++) { if (Common.Utils.ThemeColor.ThemeValues[i] == clr.effectValue) { picker.select(clr, true); isselected = true; break; } } if (!isselected) { picker.clearSelection(); } } else { picker.select(clr, true); } this._state.clrtext = clr; } } this._state.clrtext_asccolor = color; }, fillAutoShapes: function () { var me = this, shapesStore = this.getApplication().getCollection("ShapeGroups"); for (var i = 0; i < shapesStore.length - 1; i++) { var shapeGroup = shapesStore.at(i); var menuItem = new Common.UI.MenuItem({ caption: shapeGroup.get("groupName"), menu: new Common.UI.Menu({ menuAlign: "tl-tr", items: [{ template: _.template('
') }] }) }); me.toolbar.btnInsertShape.menu.addItem(menuItem); var shapePicker = new Common.UI.DataView({ el: $("#id-toolbar-menu-shapegroup" + i), store: shapeGroup.get("groupStore"), itemTemplate: _.template('