/* * (c) Copyright Ascensio System SIA 2010-2024 * * This program is a free software product. You can redistribute it and/or * modify it under the terms of the GNU Affero General Public License (AGPL) * version 3 as published by the Free Software Foundation. In accordance with * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect * that Ascensio System SIA expressly excludes the warranty of non-infringement * of any third-party rights. * * This program is distributed WITHOUT ANY WARRANTY; without even the implied * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html * * You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish * street, Riga, Latvia, EU, LV-1050. * * The interactive user interfaces in modified source and object code versions * of the Program must display Appropriate Legal Notices, as required under * Section 5 of the GNU AGPL version 3. * * Pursuant to Section 7(b) of the License you must retain the original Product * logo when distributing the program. Pursuant to Section 7(e) we decline to * grant you any rights under trademark law for use of our trademarks. * * All the Product's GUI elements, including illustrations and icon sets, as * well as technical writing content are licensed under the terms of the * Creative Commons Attribution-ShareAlike 4.0 International. See the License * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode * */ /** * Toolbar.js * * Toolbar view * * Created on 05/04/23 * */ if (Common === undefined) var Common = {}; define([ 'jquery', 'underscore', 'backbone', 'text!pdfeditor/main/app/template/Toolbar.template', 'text!documenteditor/main/app/template/ToolbarView.template', 'common/main/lib/collection/Fonts', 'common/main/lib/component/Button', 'common/main/lib/component/ColorButton', 'common/main/lib/component/ComboBox', 'common/main/lib/component/DataView', 'common/main/lib/component/ColorPalette', 'common/main/lib/component/ThemeColorPalette', 'common/main/lib/component/Menu', 'common/main/lib/component/Window', 'common/main/lib/component/ComboBoxFonts', 'common/main/lib/component/ComboDataView', 'common/main/lib/component/SynchronizeTip', 'common/main/lib/component/Mixtbar', 'common/main/lib/component/ComboDataViewShape' ], function ($, _, Backbone, template, template_view) { 'use strict'; if (!Common.enumLock) Common.enumLock = {}; var enumLock = { undoLock: 'can-undo', redoLock: 'can-redo', copyLock: 'can-copy', pasteLock: 'can-paste', cutLock: 'can-cut', inLightTheme: 'light-theme', noParagraphSelected: 'no-paragraph', noTextSelected: 'no-text', cantPrint: 'cant-print', lostConnect: 'disconnect', disableOnStart: 'on-start', firstPage: 'first-page', lastPage: 'last-page', requiredNotFilled: 'required-not-filled', submit: 'submit', fileMenuOpened: 'file-menu-opened', paragraphLock: 'para-lock', shapeLock: 'shape-lock', incIndentLock: 'can-inc-indent', decIndentLock: 'can-dec-indent', hyperlinkLock: 'can-hyperlink', noObjectSelected: 'no-object', // no objects in stack from asc_onFocusObject event noDrawingObjects: 'no-drawing-object', // asc_getSelectedDrawingObjectsCount<1 (2 selected tables: noObjectSelected=true, noDrawingObjects = false) noColumns: 'no-columns', inSmartart: 'in-smartart', inSmartartInternal: 'in-smartart-internal', inEquation: 'in-equation', inAnnotation: 'in-annotation', singlePage: 'single-page', cantMergeShape: 'merge-shape-lock', pageRotateLock: 'page-rotate-lock', pageDeleted: 'page-deleted', pageEditText: 'page-edit-text', inForm: 'in-form', inCheckForm: 'in-check-form', cantAlign: 'cant-align', cantSave: 'cant-save', cantRotatePage: 'cant-rotate-page', cantDelPage: 'cant-del-page' }; for (var key in enumLock) { if (enumLock.hasOwnProperty(key)) { Common.enumLock[key] = enumLock[key]; } } PDFE.Views.Toolbar = Common.UI.Mixtbar.extend(_.extend((function(){ return { el: '#toolbar', // Compile our stats template // template: _.template(template), // Delegated events for creating new items, and clearing completed ones. events: { // }, initialize: function () { var me = this; /** * UI Components */ this.paragraphControls = []; this.toolbarControls = []; this.shapeControls = []; this._state = { hasCollaborativeChanges: undefined }; Common.NotificationCenter.on('app:ready', me.onAppReady.bind(this)); return this; }, applyLayoutPDFEdit: function(config) { if (!config.isPDFEdit) return; var _set = Common.enumLock, arr = []; const shortcutHints = {}; // tab Edit this.btnEditText = new Common.UI.Button({ id: 'id-toolbar-btn-edittext', cls: 'btn-toolbar x-huge icon-top', style: 'min-width: 45px;', iconCls: 'toolbar__icon btn-big-magic-wand', lock: [_set.pageDeleted, _set.pageEditText, _set.lostConnect, _set.disableOnStart], caption: this.capBtnRecognize, dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small' }); this.toolbarControls.push(this.btnEditText); arr.push(this.btnEditText); this.cmbFontName = new Common.UI.ComboBoxFonts({ cls: 'input-group-nr', menuCls: 'scrollable-menu', menuStyle: 'min-width: 325px;', hint: this.tipFontName, lock: [_set.paragraphLock, _set.lostConnect, _set.noTextSelected, _set.inCheckForm, _set.shapeLock, _set.disableOnStart], store: new Common.Collections.Fonts(), dataHint: '1', dataHintDirection: 'top' }); this.paragraphControls.push(this.cmbFontName); arr.push(this.cmbFontName); this.cmbFontSize = new Common.UI.ComboBox({ cls: 'input-group-nr', menuStyle: 'min-width: 55px;', hint: this.tipFontSize, lock: [_set.paragraphLock, _set.lostConnect, _set.noTextSelected, _set.inCheckForm, _set.shapeLock, _set.disableOnStart], data: [ {value: 8, displayValue: "8"}, {value: 9, displayValue: "9"}, {value: 10, displayValue: "10"}, {value: 11, displayValue: "11"}, {value: 12, displayValue: "12"}, {value: 14, displayValue: "14"}, {value: 16, displayValue: "16"}, {value: 18, displayValue: "18"}, {value: 20, displayValue: "20"}, {value: 22, displayValue: "22"}, {value: 24, displayValue: "24"}, {value: 26, displayValue: "26"}, {value: 28, displayValue: "28"}, {value: 36, displayValue: "36"}, {value: 48, displayValue: "48"}, {value: 72, displayValue: "72"}, {value: 96, displayValue: "96"} ], dataHint: '1', dataHintDirection: 'top' }); this.paragraphControls.push(this.cmbFontSize); arr.push(this.cmbFontSize); this.btnIncFontSize = new Common.UI.Button({ id: 'id-toolbar-btn-incfont', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-incfont', lock: [_set.paragraphLock, _set.lostConnect, _set.noTextSelected, _set.inCheckForm, _set.shapeLock, _set.disableOnStart], dataHint: '1', dataHintDirection: 'top' }); this.paragraphControls.push(this.btnIncFontSize); arr.push(this.btnIncFontSize); shortcutHints.IncreaseFontSize = { btn: this.btnIncFontSize, label: this.tipIncFont }; this.btnDecFontSize = new Common.UI.Button({ id: 'id-toolbar-btn-decfont', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-decfont', lock: [_set.paragraphLock, _set.lostConnect, _set.noTextSelected, _set.inCheckForm, _set.shapeLock, _set.disableOnStart], dataHint: '1', dataHintDirection: 'top' }); this.paragraphControls.push(this.btnDecFontSize); arr.push(this.btnDecFontSize); shortcutHints.DecreaseFontSize = { btn: this.btnDecFontSize, label: this.tipDecFont }; this.btnBold = new Common.UI.Button({ id: 'id-toolbar-btn-bold', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-bold', lock: [_set.paragraphLock, _set.lostConnect, _set.noTextSelected, _set.inForm, _set.shapeLock, _set.disableOnStart], enableToggle: true, dataHint: '1', dataHintDirection: 'bottom' }); this.paragraphControls.push(this.btnBold); arr.push(this.btnBold); shortcutHints.Bold = { btn: this.btnBold, label: this.textBold }; this.btnItalic = new Common.UI.Button({ id: 'id-toolbar-btn-italic', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-italic', lock: [_set.paragraphLock, _set.lostConnect, _set.noTextSelected, _set.inForm, _set.shapeLock, _set.disableOnStart], enableToggle: true, dataHint: '1', dataHintDirection: 'bottom' }); this.paragraphControls.push(this.btnItalic); arr.push(this.btnItalic); shortcutHints.Italic = { btn: this.btnItalic, label: this.textItalic }; this.btnTextUnderline = new Common.UI.Button({ id: 'id-toolbar-btn-underline', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-underline', lock: [_set.paragraphLock, _set.lostConnect, _set.noTextSelected, _set.inForm, _set.shapeLock, _set.disableOnStart], enableToggle: true, dataHint: '1', dataHintDirection: 'bottom' }); this.paragraphControls.push(this.btnTextUnderline); arr.push(this.btnTextUnderline); shortcutHints.Underline = { btn: this.btnTextUnderline, label: this.textUnderline }; this.btnTextStrikeout = new Common.UI.Button({ id: 'id-toolbar-btn-strikeout', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-strikeout', lock: [_set.paragraphLock, _set.lostConnect, _set.noTextSelected, _set.inForm, _set.shapeLock, _set.disableOnStart], enableToggle: true, dataHint: '1', dataHintDirection: 'bottom' }); this.paragraphControls.push(this.btnTextStrikeout); arr.push(this.btnTextStrikeout); this.btnSuperscript = new Common.UI.Button({ id: 'id-toolbar-btn-superscript', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-superscript', lock: [_set.paragraphLock, _set.lostConnect, _set.noTextSelected, _set.inForm, _set.shapeLock, _set.disableOnStart, _set.inEquation], enableToggle: true, toggleGroup: 'superscriptGroup', dataHint: '1', dataHintDirection: 'bottom' }); this.paragraphControls.push(this.btnSuperscript); arr.push(this.btnSuperscript); shortcutHints.Superscript = { btn: this.btnSuperscript, label: this.textSuperscript }; this.btnSubscript = new Common.UI.Button({ id: 'id-toolbar-btn-subscript', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-subscript', lock: [_set.paragraphLock, _set.lostConnect, _set.noTextSelected, _set.inForm, _set.shapeLock, _set.disableOnStart, _set.inEquation], enableToggle: true, toggleGroup: 'superscriptGroup', dataHint: '1', dataHintDirection: 'bottom' }); this.paragraphControls.push(this.btnSubscript); arr.push(this.btnSubscript); shortcutHints.Subscript = { btn: this.btnSubscript, label: this.textSubscript }; this.btnTextHighlightColor = new Common.UI.ButtonColored({ id: 'id-toolbar-btn-text-highlight', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-highlight', enableToggle: true, allowDepress: true, split: true, lock: [_set.paragraphLock, _set.lostConnect, _set.noTextSelected, _set.inForm, _set.shapeLock, _set.disableOnStart, _set.inAnnotation], dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: '0, -16', menu: new Common.UI.Menu({ style: 'min-width: 100px;', items: [ {template: _.template('
')}, {caption: '--'}, this.mnuTextHighlightTransparent = new Common.UI.MenuItem({ caption: this.strMenuNoFill, checkable: true }) ] }) }); this.paragraphControls.push(this.btnTextHighlightColor); arr.push(this.btnTextHighlightColor); var colorsconfig = Common.UI.simpleColorsConfig; this.btnFontColor = new Common.UI.ButtonColored({ id: 'id-toolbar-btn-fontcolor', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-fontcolor', lock: [_set.paragraphLock, _set.lostConnect, _set.noTextSelected, _set.shapeLock, _set.disableOnStart], split: true, menu: true, colors: colorsconfig.colors, color: '000000', dynamiccolors: colorsconfig.dynamiccolors, themecolors: colorsconfig.themecolors, effects: colorsconfig.effects, columns: colorsconfig.columns, paletteCls: colorsconfig.cls, paletteWidth: colorsconfig.paletteWidth, dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: '0, -16' }); this.paragraphControls.push(this.btnFontColor); arr.push(this.btnFontColor); this.btnChangeCase = new Common.UI.Button({ id: 'id-toolbar-btn-case', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-change-case', action: 'change-case', lock: [_set.paragraphLock, _set.lostConnect, _set.noTextSelected, _set.inForm, _set.shapeLock, _set.disableOnStart], menu: new Common.UI.Menu({ items: [ {caption: this.mniSentenceCase, value: Asc.c_oAscChangeTextCaseType.SentenceCase}, {caption: this.mniLowerCase, value: Asc.c_oAscChangeTextCaseType.LowerCase}, {caption: this.mniUpperCase, value: Asc.c_oAscChangeTextCaseType.UpperCase}, {caption: this.mniCapitalizeWords, value: Asc.c_oAscChangeTextCaseType.CapitalizeWords}, {caption: this.mniToggleCase, value: Asc.c_oAscChangeTextCaseType.ToggleCase} ] }), dataHint: '1', dataHintDirection: 'top', dataHintOffset: '0, -6' }); this.paragraphControls.push(this.btnChangeCase); arr.push(this.btnChangeCase); this.mnuChangeCase = this.btnChangeCase.menu; this.btnClearStyle = new Common.UI.Button({ id: 'id-toolbar-btn-clearstyle', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-clearstyle', lock: [ _set.paragraphLock, _set.lostConnect, _set.noTextSelected, _set.inForm, _set.disableOnStart], dataHint: '1', dataHintDirection: 'bottom' }); this.paragraphControls.push(this.btnClearStyle); arr.push(this.btnClearStyle); this.btnMarkers = new Common.UI.Button({ id: 'id-toolbar-btn-markers', cls: 'btn-toolbar', iconCls: 'toolbar__icon ' + (!Common.UI.isRTL() ? 'btn-setmarkers' : 'btn-setmarkers-rtl'), lock: [_set.paragraphLock, _set.lostConnect, _set.noParagraphSelected, _set.inSmartart, _set.inSmartartInternal, _set.disableOnStart, _set.inAnnotation], enableToggle: true, toggleGroup: 'markersGroup', split: true, menu: true, dataHint: '1', dataHintDirection: 'top', dataHintOffset: '0, -16' }); this.paragraphControls.push(this.btnMarkers); arr.push(this.btnMarkers); this.btnNumbers = new Common.UI.Button({ id: 'id-toolbar-btn-numbering', cls: 'btn-toolbar', iconCls: 'toolbar__icon ' + (!Common.UI.isRTL() ? 'btn-numbering' : 'btn-numbering-rtl'), lock: [_set.paragraphLock, _set.lostConnect, _set.noParagraphSelected, _set.inSmartart, _set.inSmartartInternal, _set.disableOnStart, _set.inAnnotation], enableToggle: true, toggleGroup: 'markersGroup', split: true, menu: true, dataHint: '1', dataHintDirection: 'top', dataHintOffset: '0, -16' }); this.paragraphControls.push(this.btnNumbers); arr.push(this.btnNumbers); var clone = function (source) { var obj = {}; for (var prop in source) obj[prop] = (typeof(source[prop]) == 'object') ? clone(source[prop]) : source[prop]; return obj; }; this.mnuMarkersPicker = { conf: {index: 0}, selectByIndex: function (idx) { this.conf.index = idx; } }; this.mnuNumbersPicker = clone(this.mnuMarkersPicker); this.btnHorizontalAlign = new Common.UI.Button({ id: 'id-toolbar-btn-halign', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-align-left', icls: 'btn-align-left', lock: [_set.paragraphLock, _set.lostConnect, _set.cantAlign, _set.disableOnStart], menu: new Common.UI.Menu({ items: [ { caption: this.textAlignLeft, iconCls: 'menu__icon btn-align-left', icls: 'btn-align-left', checkable: true, checkmark: false, toggleGroup: 'halignGroup', checked: true, value: 1 }, { caption: this.textAlignCenter, iconCls: 'menu__icon btn-align-center', icls: 'btn-align-center', checkable: true, checkmark: false, toggleGroup: 'halignGroup', value: 2 }, { caption: this.textAlignRight, iconCls: 'menu__icon btn-align-right', icls: 'btn-align-right', checkable: true, checkmark: false, toggleGroup: 'halignGroup', value: 0 }, { caption: this.textAlignJust, iconCls: 'menu__icon btn-align-just', icls: 'btn-align-just', checkable: true, checkmark: false, toggleGroup: 'halignGroup', value: 3 } ] }), action: 'align-horizontal', dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: '0, -6' }); this.paragraphControls.push(this.btnHorizontalAlign); arr.push(this.btnHorizontalAlign); shortcutHints.LeftPara = { btn: this.btnHorizontalAlign.menu.items[0], label: this.textAlignLeft, applyCallback: function(item, hintText) { item.btn.setCaption(hintText); } }; shortcutHints.CenterPara = { btn: this.btnHorizontalAlign.menu.items[1], label: this.textAlignCenter, applyCallback: function(item, hintText) { item.btn.setCaption(hintText); } }; shortcutHints.RightPara = { btn: this.btnHorizontalAlign.menu.items[2], label: this.textAlignRight, applyCallback: function(item, hintText) { item.btn.setCaption(hintText); } }; shortcutHints.JustifyPara = { btn: this.btnHorizontalAlign.menu.items[3], label: this.textAlignJust, applyCallback: function(item, hintText) { item.btn.setCaption(hintText); } }; this.btnVerticalAlign = new Common.UI.Button({ id: 'id-toolbar-btn-valign', cls: 'btn-toolbar', lock: [_set.paragraphLock, _set.lostConnect, _set.noParagraphSelected, _set.noObjectSelected, _set.disableOnStart, _set.inAnnotation], iconCls: 'toolbar__icon btn-align-middle', icls: 'btn-align-middle', menu: new Common.UI.Menu({ items: [ { caption: this.textAlignTop, iconCls: 'menu__icon btn-align-top', icls: 'btn-align-top', checkable: true, checkmark: false, toggleGroup: 'valignGroup', value: Asc.c_oAscVAlign.Top }, { caption: this.textAlignMiddle, iconCls: 'menu__icon btn-align-middle', icls: 'btn-align-middle', checkable: true, checkmark: false, toggleGroup: 'valignGroup', value: Asc.c_oAscVAlign.Center, checked: true }, { caption: this.textAlignBottom, iconCls: 'menu__icon btn-align-bottom', icls: 'btn-align-bottom', checkable: true, checkmark: false, toggleGroup: 'valignGroup', value: Asc.c_oAscVAlign.Bottom } ] }), action: 'align-vertical', dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: '0, -6' }); this.paragraphControls.push(this.btnVerticalAlign); arr.push(this.btnVerticalAlign); this.btnDecLeftOffset = new Common.UI.Button({ id: 'id-toolbar-btn-decoffset', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-decoffset', lock: [_set.decIndentLock, _set.paragraphLock, _set.lostConnect, _set.noParagraphSelected, _set.inSmartart, _set.inSmartartInternal, _set.disableOnStart, _set.inAnnotation], dataHint: '1', dataHintDirection: 'top' }); this.paragraphControls.push(this.btnDecLeftOffset); arr.push(this.btnDecLeftOffset); shortcutHints.UnIndent = { btn: this.btnDecLeftOffset, label: this.tipDecPrLeft }; this.btnIncLeftOffset = new Common.UI.Button({ id: 'id-toolbar-btn-incoffset', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-incoffset', lock: [_set.incIndentLock, _set.paragraphLock, _set.lostConnect, _set.noParagraphSelected, _set.inSmartart, _set.inSmartartInternal, _set.disableOnStart, _set.inAnnotation], dataHint: '1', dataHintDirection: 'top' }); this.paragraphControls.push(this.btnIncLeftOffset); arr.push(this.btnIncLeftOffset); shortcutHints.Indent = { btn: this.btnIncLeftOffset, label: this.tipIncPrLeft }; this.btnLineSpace = new Common.UI.Button({ id: 'id-toolbar-btn-linespace', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-linespace', lock: [_set.paragraphLock, _set.lostConnect, _set.noParagraphSelected, _set.disableOnStart, _set.inAnnotation], menu: new Common.UI.Menu({ style: 'min-width: 60px;', items: [ {caption: '1.0', value: 1.0, checkable: true, toggleGroup: 'linesize'}, {caption: '1.15', value: 1.15, checkable: true, toggleGroup: 'linesize'}, {caption: '1.5', value: 1.5, checkable: true, toggleGroup: 'linesize'}, {caption: '2.0', value: 2.0, checkable: true, toggleGroup: 'linesize'}, {caption: '2.5', value: 2.5, checkable: true, toggleGroup: 'linesize'}, {caption: '3.0', value: 3.0, checkable: true, toggleGroup: 'linesize'} ] }), action: 'line-space', dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: '0, -6' }); this.paragraphControls.push(this.btnLineSpace); arr.push(this.btnLineSpace); this.btnColumns = new Common.UI.Button({ id: 'id-toolbar-btn-columns', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-columns-two', lock: [_set.paragraphLock, _set.lostConnect, _set.noParagraphSelected, _set.noColumns, _set.disableOnStart, _set.inAnnotation], menu: new Common.UI.Menu({ cls: 'ppm-toolbar shifted-right', items: [ { caption: this.textColumnsOne, iconCls: 'menu__icon btn-columns-one', checkable: true, checkmark: false, toggleGroup: 'menuColumns', value: 0 }, { caption: this.textColumnsTwo, iconCls: 'menu__icon btn-columns-two', checkable: true, checkmark: false, toggleGroup: 'menuColumns', value: 1 }, { caption: this.textColumnsThree, iconCls: 'menu__icon btn-columns-three', checkable: true, checkmark: false, toggleGroup: 'menuColumns', value: 2 }, {caption: '--'}, {caption: this.textColumnsCustom, value: 'advanced'} ] }), action: 'insert-columns', dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: '0, -6' }); this.paragraphControls.push(this.btnColumns); arr.push(this.btnColumns); this.btnTextDir = new Common.UI.Button({ id: 'id-toolbar-btn-direction', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-ltr', icls: 'btn-ltr', action: 'text-direction', dirRtl: false, lock: [_set.paragraphLock, _set.lostConnect, _set.noTextSelected, _set.inCheckForm, _set.disableOnStart], menu: new Common.UI.Menu({ items: [ {caption: this.textDirLtr, value: false, iconCls: 'menu__icon btn-ltr'}, {caption: this.textDirRtl, value: true, iconCls: 'menu__icon btn-rtl'}, ] }), dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: '0, -6' }); this.paragraphControls.push(this.btnTextDir); arr.push(this.btnTextDir); this.mniAlignToSlide = new Common.UI.MenuItem({ caption: this.txtPageAlign, checkable: true, toggleGroup: 'slidealign', value: -1 }).on('click', function (mnu) { Common.Utils.InternalSettings.set("pdfe-align-to-slide", true); }); this.mniAlignObjects = new Common.UI.MenuItem({ caption: this.txtObjectsAlign, checkable: true, toggleGroup: 'slidealign', value: -1 }).on('click', function (mnu) { Common.Utils.InternalSettings.set("pdfe-align-to-slide", false); }); this.mniDistribHor = new Common.UI.MenuItem({ caption: this.txtDistribHor, iconCls: 'menu__icon btn-shape-distribute-hor', value: 6 }); this.mniDistribVert = new Common.UI.MenuItem({ caption: this.txtDistribVert, iconCls: 'menu__icon btn-shape-distribute-vert', value: 7 }); this.btnShapeAlign = new Common.UI.Button({ id: 'id-toolbar-btn-shape-align', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-shape-align-left', lock: [_set.shapeLock, _set.lostConnect, _set.noDrawingObjects, _set.disableOnStart], menu: new Common.UI.Menu({ cls: 'shifted-right', items: [ { caption: this.textShapeAlignLeft, iconCls: 'menu__icon btn-shape-align-left', value: Asc.c_oAscAlignShapeType.ALIGN_LEFT }, { caption: this.textShapeAlignCenter, iconCls: 'menu__icon btn-shape-align-center', value: Asc.c_oAscAlignShapeType.ALIGN_CENTER }, { caption: this.textShapeAlignRight, iconCls: 'menu__icon btn-shape-align-right', value: Asc.c_oAscAlignShapeType.ALIGN_RIGHT }, { caption: this.textShapeAlignTop, iconCls: 'menu__icon btn-shape-align-top', value: Asc.c_oAscAlignShapeType.ALIGN_TOP }, { caption: this.textShapeAlignMiddle, iconCls: 'menu__icon btn-shape-align-middle', value: Asc.c_oAscAlignShapeType.ALIGN_MIDDLE }, { caption: this.textShapeAlignBottom, iconCls: 'menu__icon btn-shape-align-bottom', value: Asc.c_oAscAlignShapeType.ALIGN_BOTTOM }, {caption: '--'}, this.mniDistribHor, this.mniDistribVert, {caption: '--'}, this.mniAlignToSlide, this.mniAlignObjects ] }), action: 'object-align', dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: '0, -6' }); this.shapeControls.push(this.btnShapeAlign); arr.push(this.btnShapeAlign); this.btnShapeArrange = new Common.UI.Button({ id: 'id-toolbar-btn-shape-arrange', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-arrange-front', lock: [_set.shapeLock, _set.lostConnect, _set.noDrawingObjects, _set.disableOnStart], menu: new Common.UI.Menu({ items: [ this.mnuArrangeFront = new Common.UI.MenuItem({ caption: this.textArrangeFront, iconCls: 'menu__icon btn-arrange-front', value: 1 }), this.mnuArrangeBack = new Common.UI.MenuItem({ caption: this.textArrangeBack, iconCls: 'menu__icon btn-arrange-back', value: 2 }), this.mnuArrangeForward = new Common.UI.MenuItem({ caption: this.textArrangeForward, iconCls: 'menu__icon btn-arrange-forward', value: 3 }), this.mnuArrangeBackward = new Common.UI.MenuItem({ caption: this.textArrangeBackward, iconCls: 'menu__icon btn-arrange-backward', value: 4 }), // {caption: '--'}, // this.mnuGroupShapes = new Common.UI.MenuItem({ // caption: this.txtGroup, // iconCls: 'menu__icon btn-shape-group', // value: 5 // }), // this.mnuUnGroupShapes = new Common.UI.MenuItem({ // caption: this.txtUngroup, // iconCls: 'menu__icon btn-shape-ungroup', // value: 6 // }) ] }), action: 'object-arrange', dataHint: '1', dataHintDirection: 'top', dataHintOffset: '0, -6' }); this.shapeControls.push(this.btnShapeArrange); arr.push(this.btnShapeArrange); this.btnShapesMerge = new Common.UI.Button({ id: 'id-toolbar-btn-merge-shapes', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-combine-shapes', lock: [_set.shapeLock, _set.lostConnect, _set.noDrawingObjects, _set.disableOnStart, _set.cantMergeShape], menu: new Common.UI.Menu({ cls: 'shifted-right', items: [ { caption: this.textShapesUnion, iconCls: 'menu__icon btn-union-shapes', value: 'unite', }, { caption: this.textShapesCombine, iconCls: 'menu__icon btn-combine-shapes', value: 'exclude', }, { caption: this.textShapesFragment, iconCls: 'menu__icon btn-fragment-shapes', value: 'divide', }, { caption: this.textShapesIntersect, iconCls: 'menu__icon btn-intersect-shapes', value: 'intersect', }, { caption: this.textShapesSubstract, iconCls: 'menu__icon btn-substract-shapes', value: 'subtract', }, ] }), action: 'object-merge', dataHint: '1', dataHintDirection: 'top', dataHintOffset: '0, -6' }); this.shapeControls.push(this.btnShapesMerge); arr.push(this.btnShapesMerge); this.btnDelPage = new Common.UI.Button({ id: 'id-toolbar-btn-delpage', cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-rem-page', lock: [_set.pageDeleted, _set.lostConnect, _set.disableOnStart, _set.singlePage, _set.cantDelPage], caption: this.capBtnDelPage, dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small' }); arr.push(this.btnDelPage); this.btnRotatePage = new Common.UI.Button({ id: 'tlbtn-rotate', cls: 'btn-toolbar x-huge icon-top', caption: this.capBtnRotatePage, split: true, iconCls: 'toolbar__icon btn-update', lock: [_set.pageDeleted, _set.pageRotateLock, _set.cantRotatePage, _set.lostConnect, _set.disableOnStart], dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small', menu: new Common.UI.Menu({ items: [ {caption: this.txtRotateRight, iconCls: 'menu__icon btn-rotate-90', value: 90}, {caption: this.txtRotateLeft, iconCls: 'menu__icon btn-rotate-270', value: -90} ] }), action: 'rotate-page', }); arr.push(this.btnRotatePage); Common.UI.LayoutManager.addControls(arr); PDFE.getController('Common.Controllers.Shortcuts').updateShortcutHints(shortcutHints); return arr; }, applyLayout: function (config) { var me = this; me.lockControls = []; var _set = Common.enumLock; if ( config.isEdit ) { Common.UI.Mixtbar.prototype.initialize.call(this, { template: _.template(template), tabs: [ {caption: me.textTabFile, action: 'file', extcls: 'canedit', layoutname: 'toolbar-file', haspanel:false, dataHintTitle: 'F'}, {caption: me.textTabHome, action: 'home', extcls: 'canedit', dataHintTitle: 'H'}, {caption: me.textTabComment, action: 'comment', extcls: 'canedit', dataHintTitle: 'C'} ], config: config } ); this.btnSaveCls = config.canSaveToFile || config.isDesktopApp && config.isOffline ? 'btn-save' : 'btn-download'; this.btnSaveTip = config.canSaveToFile || config.isDesktopApp && config.isOffline ? this.tipSave : this.tipDownload; this.btnSave = new Common.UI.Button({ id: 'id-toolbar-btn-save', cls: 'btn-toolbar', iconCls: 'toolbar__icon no-mask ' + this.btnSaveCls, lock: [_set.cantSave, _set.lostConnect, _set.disableOnStart], signals: ['disabled'], dataHint: '1', dataHintDirection: 'top', dataHintTitle: 'S' }); this.toolbarControls.push(this.btnSave); this.btnCollabChanges = this.btnSave; this.btnAddComment = new Common.UI.Button({ id: 'tlbtn-addcomment', cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-big-add-comment', lock: [_set.pageDeleted, _set.disableOnStart], caption: this.capBtnComment, dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small' }); this.toolbarControls.push(this.btnAddComment); this.btnTextComment = new Common.UI.Button({ id: 'tlbtn-textcomment', cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-big-text-comment', lock: [_set.pageDeleted, _set.disableOnStart], caption: this.capBtnTextComment, menu: true, split: true, action: 'insert-text-comment', dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small' }); this.toolbarControls.push(this.btnTextComment); this.chShowComments = new Common.UI.CheckBox({ lock: [_set.disableOnStart], labelText: this.capBtnShowComments, value: true, dataHint : '1', dataHintDirection: 'left', dataHintOffset: 'small' }); this.toolbarControls.push(this.chShowComments); this.btnStamp = new Common.UI.Button({ id: 'tlbtn-stamp', cls: 'btn-toolbar x-huge icon-top', caption: this.capBtnStamp, split: true, iconCls: 'toolbar__icon btn-stamp', lock: [_set.pageDeleted, _set.disableOnStart], dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small', menu: true, action: 'insert-stamp' }); this.toolbarControls.push(this.btnStamp); var colorsconfig = Common.UI.simpleColorsConfig; this.btnStrikeout = new Common.UI.ButtonColored({ id: 'id-toolbar-btn-strikeout', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-strikeout', lock: [_set.pageDeleted, _set.lostConnect, _set.disableOnStart], enableToggle: true, allowDepress: true, split: true, menu: true, colorLine: false, additionalItemsAfter: [ {caption: '--'}, new Common.UI.MenuItem({ template: _.template('
'), stopPropagation: true }) ], colors: colorsconfig.colors, color: 'D43230', dynamiccolors: colorsconfig.dynamiccolors, themecolors: colorsconfig.themecolors, effects: colorsconfig.effects, columns: colorsconfig.columns, paletteCls: colorsconfig.cls, paletteWidth: colorsconfig.paletteWidth, storageSuffix: '-draw', hideColorsSeparator: true, dataHint: '1', dataHintDirection: 'top', dataHintOffset: '0, -16', type: AscPDF.ANNOTATIONS_TYPES.Strikeout }); this.btnsStrikeout = [this.btnStrikeout]; this.toolbarControls.push(this.btnStrikeout); this.btnUnderline = new Common.UI.ButtonColored({ id: 'id-toolbar-btn-underline', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-underline', lock: [_set.pageDeleted, _set.lostConnect, _set.disableOnStart], enableToggle: true, allowDepress: true, split: true, menu: true, colorLine: false, additionalItemsAfter: [ {caption: '--'}, new Common.UI.MenuItem({ template: _.template('
'), stopPropagation: true }) ], colors: colorsconfig.colors, color: '3D8A44', dynamiccolors: colorsconfig.dynamiccolors, themecolors: colorsconfig.themecolors, effects: colorsconfig.effects, columns: colorsconfig.columns, paletteCls: colorsconfig.cls, paletteWidth: colorsconfig.paletteWidth, storageSuffix: '-draw', hideColorsSeparator: true, dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: '0, -16', type: AscPDF.ANNOTATIONS_TYPES.Underline }); this.btnsUnderline = [this.btnUnderline]; this.toolbarControls.push(this.btnUnderline); this.btnHighlight = new Common.UI.ButtonColored({ id: 'id-toolbar-btn-highlight', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-highlight', lock: [_set.pageDeleted, _set.lostConnect, _set.disableOnStart], enableToggle: true, allowDepress: true, split: true, menu: true, additionalItemsAfter: [ {caption: '--'}, new Common.UI.MenuItem({ template: _.template('
'), stopPropagation: true }) ], colors: [ 'FFFC54', '72F54A', '74F9FD', 'EB51F7', 'A900F9', 'EF8B3A', '7272FF', 'FF63A4', '1DFF92', '03DA18', '249B01', 'C504D2', '0633D1', 'FFF7A0', 'FF0303', 'FFFFFF', 'D3D3D4', '969696', '606060', '000000' ], color: 'FFFC54', dynamiccolors: colorsconfig.dynamiccolors, themecolors: colorsconfig.themecolors, effects: colorsconfig.effects, columns: colorsconfig.columns, paletteCls: colorsconfig.cls, paletteWidth: colorsconfig.paletteWidth, storageSuffix: '-draw', hideColorsSeparator: true, type: AscPDF.ANNOTATIONS_TYPES.Highlight, dataHint: '1', dataHintDirection: 'top', dataHintOffset: '0, -16' }); this.btnsHighlight = [this.btnHighlight]; this.toolbarControls.push(this.btnHighlight); this.btnShapeComment = new Common.UI.ButtonColored({ id: 'tlbtn-shapecomment', cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-big-annotation-rectangle', lock: [_set.pageDeleted, _set.lostConnect, _set.disableOnStart], caption: ' ', menu: true, split: true, enableToggle: true, colors: colorsconfig.colors, color: 'D43230', dynamiccolors: colorsconfig.dynamiccolors, themecolors: colorsconfig.themecolors, effects: colorsconfig.effects, columns: colorsconfig.columns, paletteCls: colorsconfig.cls, paletteWidth: colorsconfig.paletteWidth, currentSize: {arr: [0.25, 0.5, 1, 2, 3.5], idx: 2}, hidePaletteOnClick: false, additionalItemsBefore: [ { cls: 'shifted-right', tipForMainBtn: me.tipInsertRectComment, caption: me.txtRectComment, checkable: true, checkmark: false, toggleGroup: 'shapecomment', iconCls : 'menu__icon btn-annotation-rectangle', value: AscPDF.ANNOTATIONS_TYPES.Square, iconClsForMainBtn: 'btn-big-annotation-rectangle', captionForMainBtn: me.capBtnRectComment }, { cls: 'shifted-right', tipForMainBtn: me.tipInsertCircleComment, caption: me.txtCircleComment, checkable: true, checkmark: false, toggleGroup: 'shapecomment', iconCls : 'menu__icon btn-annotation-circle', value: AscPDF.ANNOTATIONS_TYPES.Circle, iconClsForMainBtn: 'btn-big-annotation-circle', captionForMainBtn: me.capBtnCircleComment }, { cls: 'shifted-right', tipForMainBtn: me.tipInsertArrowComment, caption: me.txtArrowComment, checkable: true, checkmark: false, toggleGroup: 'shapecomment', iconCls : 'menu__icon btn-annotation-arrow', value: AscPDF.ANNOTATIONS_TYPES.Line, iconClsForMainBtn: 'btn-big-annotation-arrow', captionForMainBtn: me.capBtnArrowComment }, { cls: 'shifted-right', tipForMainBtn: me.tipInsertPolyLineComment, caption: me.txtPolyLineComment, checkable: true, checkmark: false, toggleGroup: 'shapecomment', iconCls : 'menu__icon btn-annotation-connected-lines', value: AscPDF.ANNOTATIONS_TYPES.PolyLine, iconClsForMainBtn: 'btn-big-annotation-connected-lines', captionForMainBtn: me.capBtnPolyLineComment }, {caption: '--'}, ], additionalItemsAfter: [ {caption: '--'}, new Common.UI.MenuItem({ template: _.template('
'), stopPropagation: true }) ], storageSuffix: '-shapecomment', hideColorsSeparator: true, action: 'insert-shape-comment', dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small' }); this.toolbarControls.push(this.btnShapeComment); if (config.isPDFAnnotate && config.canPDFEdit || config.isPDFEdit) { this.btnEditMode = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-edit-text', style: 'min-width: 45px;', lock: [_set.lostConnect, _set.disableOnStart], caption: this.textEditMode, enableToggle: true, dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small' }); this.toolbarControls.push(this.btnEditMode); } config.isPDFEdit && this.applyLayoutPDFEdit(config); } else if ( config.isRestrictedEdit ) { Common.UI.Mixtbar.prototype.initialize.call(this, { template: _.template(template), tabs: [ {caption: me.textTabFile, action: 'file', extcls: 'canedit', layoutname: 'toolbar-file', haspanel:false, dataHintTitle: 'F'}, {caption: me.textTabHome, action: 'home', extcls: 'canedit', dataHintTitle: 'H'} ], config: config } ); this.btnClear = new Common.UI.Button({ id: 'id-toolbar-btn-clear', cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-clear-style', lock: [_set.disableOnStart], caption: this.textClear, dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small' }); this.toolbarControls.push(this.btnClear); this.btnPrevForm = new Common.UI.Button({ id: 'id-toolbar-btn-prev', cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-previous-field icon-rtl', lock: [_set.disableOnStart], caption: this.capBtnPrev, dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small' }); this.toolbarControls.push(this.btnPrevForm); this.btnNextForm = new Common.UI.Button({ id: 'id-toolbar-btn-next', cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-next-field icon-rtl', lock: [_set.disableOnStart], caption: this.capBtnNext, dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small' }); this.toolbarControls.push(this.btnNextForm); if (config.canSubmitForms) { this.btnSubmit = new Common.UI.Button({ id: 'id-toolbar-btn-submit', cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-submit-form', lock: [_set.lostConnect, _set.disableOnStart, _set.requiredNotFilled, _set.submit], caption: this.capBtnSubmit, dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small' }); this.toolbarControls.push(this.btnSubmit); } else if (config.canDownload) { this.btnSaveForm = new Common.UI.Button({ id: 'id-toolbar-btn-download-form', cls: 'btn-toolbar x-huge icon-top', lock: [_set.lostConnect, _set.disableOnStart], iconCls: 'toolbar__icon btn-save-form', caption: config.canRequestSaveAs || !!config.saveAsUrl ? this.capBtnSaveForm : (config.isOffline ? this.capBtnSaveFormDesktop : this.capBtnDownloadForm), dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small' }); this.toolbarControls.push(this.btnSaveForm); } } if ( config.isEdit || config.isRestrictedEdit) { const shortcutHints = {}; this.btnPrint = new Common.UI.Button({ id: 'id-toolbar-btn-print', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-print no-mask', lock: [_set.cantPrint, _set.disableOnStart], signals: ['disabled'], split: config.canQuickPrint, menu: config.canQuickPrint, dataHint: '1', dataHintDirection: 'bottom', dataHintTitle: 'P', printType: 'print' }); this.toolbarControls.push(this.btnPrint); shortcutHints.PrintPreviewAndPrint = { btn: this.btnPrint, label: this.tipPrint }; this.btnUndo = new Common.UI.Button({ id: 'id-toolbar-btn-undo', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-undo icon-rtl', lock: [_set.undoLock, _set.lostConnect, _set.disableOnStart], signals: ['disabled'], dataHint: '1', dataHintDirection: 'bottom', dataHintTitle: 'Z' }); this.toolbarControls.push(this.btnUndo); shortcutHints.EditUndo = { btn: this.btnUndo, label: this.tipUndo }; this.btnRedo = new Common.UI.Button({ id: 'id-toolbar-btn-redo', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-redo icon-rtl', lock: [_set.redoLock, _set.lostConnect, _set.disableOnStart], signals: ['disabled'], dataHint: '1', dataHintDirection: 'bottom', dataHintTitle: 'Y' }); this.toolbarControls.push(this.btnRedo); shortcutHints.EditRedo = { btn: this.btnRedo, label: this.tipRedo }; this.btnCopy = new Common.UI.Button({ id: 'id-toolbar-btn-copy', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-copy', lock: [_set.copyLock, _set.lostConnect, _set.disableOnStart], dataHint: '1', dataHintDirection: 'top', dataHintTitle: 'C' }); this.toolbarControls.push(this.btnCopy); shortcutHints.Copy = { btn: this.btnCopy, label: this.tipCopy }; this.btnPaste = new Common.UI.Button({ id: 'id-toolbar-btn-paste', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-paste', lock: [_set.pasteLock, _set.paragraphLock, _set.lostConnect, _set.disableOnStart], dataHint: '1', dataHintDirection: 'top', dataHintTitle: 'V' }); this.paragraphControls.push(this.btnPaste); shortcutHints.Paste = { btn: this.btnPaste, label: this.tipPaste }; this.btnCut = new Common.UI.Button({ id: 'id-toolbar-btn-cut', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-cut', lock: [_set.cutLock, _set.paragraphLock, _set.shapeLock, _set.lostConnect, _set.disableOnStart], dataHint: '1', dataHintDirection: 'top', dataHintTitle: 'X' }); this.paragraphControls.push(this.btnCut); shortcutHints.Cut = { btn: this.btnCut, label: this.tipCut }; this.btnSelectAll = new Common.UI.Button({ id: 'id-toolbar-btn-select-all', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-select-all', lock: [_set.disableOnStart], dataHint: '1', dataHintDirection: 'bottom' }); this.toolbarControls.push(this.btnSelectAll); shortcutHints.EditSelectAll = { btn: this.btnSelectAll, label: this.tipSelectAll }; this.btnSelectTool = new Common.UI.Button({ id: 'tlbtn-selecttool', cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-select', lock: [_set.disableOnStart], caption: me.capBtnSelect, toggleGroup: 'select-tools-tb', enableToggle: true, allowDepress: false, dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small' }); this.toolbarControls.push(this.btnSelectTool); this.btnHandTool = new Common.UI.Button({ id: 'tlbtn-handtool', cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-big-hand-tool', lock: [_set.disableOnStart], caption: me.capBtnHand, toggleGroup: 'select-tools-tb', enableToggle: true, allowDepress: false, dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small' }); this.toolbarControls.push(this.btnHandTool); this.fieldPages = new Common.UI.InputFieldFixed({ id: 'id-toolbar-txt-pages', style : 'width: 100%;', cls : 'text-align-right', maskExp : /[0-9]/, allowBlank : true, validateOnChange: false, fixedValue: '/ 1', value: 1, lock: [_set.disableOnStart], validation : function(value) { if (/(^[0-9]+$)/.test(value)) { value = parseInt(value); if (value===undefined || value===null || value<1) me.fieldPages.setValue(me.api.getCurrentPage()+1); } else me.fieldPages.setValue(me.api.getCurrentPage()+1); return true; } }); this.toolbarControls.push(this.fieldPages); this.btnFirstPage = new Common.UI.Button({ id : 'id-toolbar-btn-first-page', cls : 'btn-toolbar', iconCls : 'toolbar__icon btn-firstitem icon-rtl', lock: [_set.disableOnStart, _set.firstPage], dataHint : '1', dataHintDirection: 'bottom' }); this.toolbarControls.push(this.btnFirstPage); this.btnLastPage = new Common.UI.Button({ id : 'id-toolbar-btn-last-page', cls : 'btn-toolbar', iconCls : 'toolbar__icon btn-lastitem icon-rtl', lock: [_set.disableOnStart, _set.lastPage], dataHint : '1', dataHintDirection: 'bottom' }); this.toolbarControls.push(this.btnLastPage); this.btnPrevPage = new Common.UI.Button({ id : 'id-toolbar-btn-prev-page', cls : 'btn-toolbar', iconCls : 'toolbar__icon btn-previtem icon-rtl', lock: [_set.disableOnStart, _set.firstPage], dataHint : '1', dataHintDirection: 'bottom' }); this.toolbarControls.push(this.btnPrevPage); // this.btnNextPage = new Common.UI.Button({ id : 'id-toolbar-btn-next-page', cls : 'btn-toolbar', iconCls : 'toolbar__icon btn-nextitem icon-rtl', lock: [_set.disableOnStart, _set.lastPage], dataHint : '1', dataHintDirection: 'bottom' }); this.toolbarControls.push(this.btnNextPage); PDFE.getController('Common.Controllers.Shortcuts').updateShortcutHints(shortcutHints); // Menus // // Disable all components before load document this.lockControls = me.toolbarControls.concat(me.paragraphControls).concat(me.shapeControls); Common.UI.LayoutManager.addControls(this.lockControls); this.lockToolbar(Common.enumLock.disableOnStart, true, {array: this.lockControls}); this.on('render:after', _.bind(this.onToolbarAfterRender, this)); } else { Common.UI.Mixtbar.prototype.initialize.call(this, { template: _.template(template_view), tabs: [ {caption: me.textTabFile, action: 'file', layoutname: 'toolbar-file', haspanel: false, dataHintTitle: 'F'} ], config: config } ); } return this; }, render: function (mode) { var me = this; /** * Render UI layout */ this.fireEvent('render:before', [this]); me.isCompactView = mode.isCompactView; if ( mode.isEdit || mode.isRestrictedEdit) { me.$el.html(me.rendererComponents(me.$layout, mode)); } else { me.$layout.find('.canedit').hide(); me.isCompactView && me.$layout.addClass('folded'); me.$el.html(me.$layout); } this.fireEvent('render:after', [this]); Common.UI.Mixtbar.prototype.afterRender.call(this); Common.NotificationCenter.on({ 'window:resize': function() { Common.UI.Mixtbar.prototype.onResize.apply(me, arguments); } }); if ( mode.isEdit ) { /** coauthoring begin **/ this.showSynchTip = !Common.localStorage.getBool("pdfe-hide-synch"); this.needShowSynchTip = false; /** coauthoring end **/ Common.NotificationCenter.on('desktop:window', _.bind(this.onDesktopWindow, this)); } (mode.isEdit || mode.isRestrictedEdit) && me.setTab('home'); if ( me.isCompactView ) me.setFolded(true); return this; }, onTabClick: function (e) { var me = this, tab = $(e.currentTarget).find('> a[data-tab]').data('tab'), is_file_active = me.isTabActive('file'); if (!me._isDocReady || tab === 'file' && !Common.Controllers.LaunchController.isScriptLoaded()) return; Common.UI.Mixtbar.prototype.onTabClick.apply(me, arguments); if ( is_file_active ) { me.fireEvent('file:close'); } else if ( tab == 'file' ) { me.fireEvent('file:open'); me.setTab(tab); } if ( me.isTabActive('home')) me.fireEvent('home:open'); }, rendererComponentsRestrictedEdit: function($host) { var _injectComponent = function (id, cmp) { Common.Utils.injectComponent($host.findById(id), cmp); }; _injectComponent('#slot-btn-form-prev', this.btnPrevForm); _injectComponent('#slot-btn-form-next', this.btnNextForm); _injectComponent('#slot-btn-form-submit', this.btnSubmit); _injectComponent('#slot-btn-form-save', this.btnSaveForm); }, rendererComponentsPDFEdit: function($host, mode) { var _injectComponent = function (id, cmp) { Common.Utils.injectComponent($host.findById(id), cmp); }; mode.isEditTextSupport ? _injectComponent('#slot-btn-edittext', this.btnEditText) : $host.findById('#slot-btn-edittext').parents('.group').hide().next('.separator').hide(); _injectComponent('#slot-field-fontname', this.cmbFontName); _injectComponent('#slot-field-fontsize', this.cmbFontSize); _injectComponent('#slot-btn-text-underline', this.btnTextUnderline); _injectComponent('#slot-btn-text-highlight', this.btnTextHighlightColor); _injectComponent('#slot-btn-text-strikeout', this.btnTextStrikeout); _injectComponent('#slot-btn-bold', this.btnBold); _injectComponent('#slot-btn-italic', this.btnItalic); _injectComponent('#slot-btn-superscript', this.btnSuperscript); _injectComponent('#slot-btn-subscript', this.btnSubscript); _injectComponent('#slot-btn-incfont', this.btnIncFontSize); _injectComponent('#slot-btn-decfont', this.btnDecFontSize); _injectComponent('#slot-btn-fontcolor', this.btnFontColor); _injectComponent('#slot-btn-changecase', this.btnChangeCase); _injectComponent('#slot-btn-clearstyle', this.btnClearStyle); _injectComponent('#slot-btn-markers', this.btnMarkers); _injectComponent('#slot-btn-numbering', this.btnNumbers); _injectComponent('#slot-btn-incoffset', this.btnIncLeftOffset); _injectComponent('#slot-btn-decoffset', this.btnDecLeftOffset); _injectComponent('#slot-btn-halign', this.btnHorizontalAlign); _injectComponent('#slot-btn-valign', this.btnVerticalAlign); _injectComponent('#slot-btn-linespace', this.btnLineSpace); _injectComponent('#slot-btn-columns', this.btnColumns); _injectComponent('#slot-btn-direction', this.btnTextDir); _injectComponent('#slot-btn-arrange-shape', this.btnShapeArrange); _injectComponent('#slot-btn-align-shape', this.btnShapeAlign); _injectComponent('#slot-btn-rotate', this.btnRotatePage); _injectComponent('#slot-btn-shapes-merge', this.btnShapesMerge); _injectComponent('#slot-btn-deletepage', this.btnDelPage); }, rendererComponentsAnnotate: function($host) { var _injectComponent = function (id, cmp) { Common.Utils.injectComponent($host.findById(id), cmp); }; _injectComponent('#slot-btn-comment', this.btnAddComment); _injectComponent('#slot-btn-strikeout', this.btnStrikeout); _injectComponent('#slot-btn-underline', this.btnUnderline); _injectComponent('#slot-btn-highlight', this.btnHighlight); _injectComponent('#slot-btn-text-comment', this.btnTextComment); _injectComponent('#slot-btn-shape-comment', this.btnShapeComment); _injectComponent('#slot-btn-stamp', this.btnStamp); this.btnEditMode ? _injectComponent('#slot-btn-tb-edit-mode', this.btnEditMode) : $host.findById('#slot-btn-tb-edit-mode').parents('.group').hide().next('.separator').hide(); }, rendererComponentsCommon: function($host) { var _injectComponent = function (id, cmp) { Common.Utils.injectComponent($host.findById(id), cmp); }; _injectComponent('#slot-btn-print', this.btnPrint); _injectComponent('#slot-btn-save', this.btnSave); _injectComponent('#slot-btn-undo', this.btnUndo); _injectComponent('#slot-btn-redo', this.btnRedo); _injectComponent('#slot-btn-copy', this.btnCopy); _injectComponent('#slot-btn-paste', this.btnPaste); _injectComponent('#slot-btn-cut', this.btnCut); _injectComponent('#slot-btn-select-all', this.btnSelectAll); _injectComponent('#slot-btn-select-tool', this.btnSelectTool); _injectComponent('#slot-btn-hand-tool', this.btnHandTool); _injectComponent('#slot-btn-pages', this.fieldPages); _injectComponent('#slot-btn-first-page', this.btnFirstPage); _injectComponent('#slot-btn-last-page', this.btnLastPage); _injectComponent('#slot-btn-prev-page', this.btnPrevPage); _injectComponent('#slot-btn-next-page', this.btnNextPage); _injectComponent('#slot-chk-showcomment', this.chShowComments); _injectComponent('#slot-btn-form-clear', this.btnClear); this.btnPrint.menu && this.btnPrint.$el.addClass('split'); }, rendererComponents: function (html, mode) { var $host = $(html); this.rendererComponentsCommon($host); if (mode.isEdit) { this.rendererComponentsAnnotate($host); mode.isPDFEdit && this.rendererComponentsPDFEdit($host, mode); $host.find(mode.isPDFEdit ? '.annotate' : '.pdfedit').addClass('hidden'); } else if (mode.isRestrictedEdit) this.rendererComponentsRestrictedEdit($host); return $host; }, createPen: function(button, id, opacity) { var me = this; button.setMenu(); button.currentColor = button.color; if (opacity) { var onShowAfter = function(menu) { if (menu.sizePicker) { menu.sizePicker.setValue(Common.Utils.InternalSettings.get("pdfe-annot-opacity-" + id) + '%'); } else { menu.sizePicker = me.createOpacityPicker(button, id, menu.cmpEl.find('.custom-scale')); } }; button.menu.on('show:after', onShowAfter); } return button.getPicker(); }, createOpacityPicker: function(button, id, el) { var me = this; var sizePicker = new Common.UI.UpDownPicker({ el: el, caption: this.txtOpacity, minWidth: 40 }); sizePicker.on('click', function (direction) { var val = Common.Utils.InternalSettings.get("pdfe-annot-opacity-" + id); if (direction === 'up') { if (val % 10 > 0.1) { val = Math.ceil(val / 10) * 10; } else { val += 10; } val = Math.min(100, val); } else { if (val % 10 > 0.1) { val = Math.floor(val / 10) * 10; } else { val -= 10 } val = Math.max(0, val); } this.setValue(val + '%'); Common.Utils.InternalSettings.set("pdfe-annot-opacity-" + id, val); Common.localStorage.setItem("pdfe-annot-opacity-" + id, val); if (button.pressed) { var strcolor = button.currentColor || '0000FF', r = strcolor[0] + strcolor[1], g = strcolor[2] + strcolor[3], b = strcolor[4] + strcolor[5]; me.api && me.api.SetMarkerFormat(button.options.type, true, val, parseInt(r, 16), parseInt(g, 16), parseInt(b, 16)); } }); sizePicker.setValue(Common.Utils.InternalSettings.get("pdfe-annot-opacity-" + id) + '%'); return sizePicker; }, onAppReady: function (config) { var me = this; me._isDocReady = true; (new Promise( function(resolve, reject) { resolve(); })).then(function () { if ( !config.isEdit && !config.isRestrictedEdit) return; if(me.btnPrint.menu){ me.btnPrint.setMenu( new Common.UI.Menu({ items:[ { caption: me.tipPrint, iconCls: 'menu__icon btn-print', toggleGroup: 'viewPrint', value: 'print', iconClsForMainBtn: 'btn-print', platformKey: Common.Utils.String.platformKey('Ctrl+P') }, { caption: me.tipPrintQuick, iconCls: 'menu__icon btn-quick-print', toggleGroup: 'viewPrint', value: 'print-quick', iconClsForMainBtn: 'btn-quick-print', platformKey: '' } ] })); } if (me.btnStrikeout && me.btnStrikeout.menu) { Common.Utils.InternalSettings.set("pdfe-annot-opacity-strikeout", Common.localStorage.getItemAsInt("pdfe-annot-opacity-strikeout", 100)); me.mnuStrikeoutColorPicker = me.createPen(me.btnStrikeout, 'strikeout', true); me.mnusStrikeoutColorPicker = [me.mnuStrikeoutColorPicker]; } if (me.btnUnderline && me.btnUnderline.menu) { Common.Utils.InternalSettings.set("pdfe-annot-opacity-underline", Common.localStorage.getItemAsInt("pdfe-annot-opacity-underline", 100)); me.mnuUnderlineColorPicker = me.createPen(me.btnUnderline, 'underline', true); me.mnusUnderlineColorPicker = [me.mnuUnderlineColorPicker]; } if (me.btnHighlight && me.btnHighlight.menu) { Common.Utils.InternalSettings.set("pdfe-annot-opacity-highlight", Common.localStorage.getItemAsInt("pdfe-annot-opacity-highlight", 50)); me.mnuHighlightColorPicker = me.createPen(me.btnHighlight, 'highlight', true); me.mnusHighlightColorPicker = [me.mnuHighlightColorPicker]; } if (me.btnTextComment) { me.btnTextComment.options.textboxType = AscPDF.FREE_TEXT_INTENT_TYPE.FreeText; me.btnTextComment.setMenu(new Common.UI.Menu({ items: [ { caption: me.tipInsertTextComment, iconCls : 'menu__icon btn-text-comment', value: AscPDF.FREE_TEXT_INTENT_TYPE.FreeText, iconClsForMainBtn: 'btn-big-text-comment', captionForMainBtn: me.capBtnTextComment }, { caption: me.tipInsertTextCallout, iconCls : 'menu__icon btn-text-callout', value: AscPDF.FREE_TEXT_INTENT_TYPE.FreeTextCallout, iconClsForMainBtn: 'btn-big-text-callout', captionForMainBtn: me.capBtnTextCallout }, ] })); } if (me.btnShapeComment) { var btn = me.btnShapeComment; btn.options.shapeType = AscPDF.ANNOTATIONS_TYPES.Square; btn.setMenu(); btn.currentColor = btn.color; let onShowAfter = function(menu) { var sizePicker = new Common.UI.UpDownPicker({ el: menu.cmpEl.find('.custom-scale'), caption: me.txtSize, minWidth: 50 }); sizePicker.setValue(btn.options.currentSize.arr[btn.options.currentSize.idx] + ' ' + me.txtMM); sizePicker.on('click', function (direction) { me.fireEvent('shapeannot:size', [direction]); }); btn.sizePicker = sizePicker; menu.off('show:after', onShowAfter); }; btn.menu.on('show:after', onShowAfter); me.mnuShapeCommentColorPicker = btn.getPicker(); } if (me.btnStamp) { me.btnStamp.setMenu(new Common.UI.Menu({ restoreHeight: 500 })); var menu = me.btnStamp.menu; if (menu.cmpEl) { menu.cmpEl.attr('ratio', 'ratio'); menu.cmpEl.on('app:scaling', function (e, info) { if ( me.options.scaling != info.ratio ) { menu.hide(); menu.removeAll(); } }); } } }); }, createDelayedElementsCommon: function() { this.btnSelectTool.updateHint(this.tipSelectTool); this.btnHandTool.updateHint(this.tipHandTool); this.btnFirstPage.updateHint(this.tipFirstPage); this.btnLastPage.updateHint(this.tipLastPage); this.btnPrevPage.updateHint(this.tipPrevPage); this.btnNextPage.updateHint(this.tipNextPage); }, createDelayedElementsRestrictedEdit: function() { if (!this.mode.isRestrictedEdit) return; this.btnClear.updateHint(this.textClearFields); this.btnPrevForm.updateHint(this.tipPrevForm); this.btnNextForm.updateHint(this.tipNextForm); this.btnSubmit && this.btnSubmit.updateHint(this.tipSubmit); this.btnSaveForm && this.btnSaveForm.updateHint(this.mode.canRequestSaveAs || !!this.mode.saveAsUrl ? this.tipSaveForm : this.tipDownloadForm); }, createDelayedElementsPDFAnnotate: function() { if (!this.mode.isEdit) return; this.btnSave.updateHint(this.btnSaveTip); this.btnAddComment.updateHint(this.tipAddComment); this.btnStrikeout.updateHint(this.textStrikeout); this.btnUnderline.updateHint(this.textUnderline); this.btnHighlight.updateHint(this.textHighlight); // this.btnTextComment.updateHint([this.tipInsertTextComment, this.tipInsertText]); this.btnTextComment.updateHint(this.tipInsertTextComment); this.btnShapeComment.updateHint(this.tipInsertRectComment); this.btnStamp.updateHint(this.tipInsertStamp); this.btnEditMode && this.btnEditMode.updateHint(this.tipEditMode); }, createDelayedElementsPDFEdit: function() { if (!this.mode.isPDFEdit) return; this.updateMetricUnit(); this.btnEditText.updateHint(this.tipRecognize); this.btnTextStrikeout.updateHint(this.textStrikeout); this.btnFontColor.updateHint(this.tipFontColor); this.btnTextHighlightColor.updateHint(this.tipHighlightColor); this.btnChangeCase.updateHint(this.tipChangeCase); this.btnClearStyle.updateHint(this.tipClearStyle); this.btnMarkers.updateHint(this.tipMarkers); this.btnNumbers.updateHint(this.tipNumbers); this.btnHorizontalAlign.updateHint(this.tipHAligh); this.btnVerticalAlign.updateHint(this.tipVAligh); this.btnLineSpace.updateHint(this.tipLineSpace); this.btnColumns.updateHint(this.tipColumns); this.btnTextDir.updateHint(this.tipTextDir); this.btnShapeAlign.updateHint(this.tipShapeAlign); this.btnShapeArrange.updateHint(this.tipShapeArrange); this.btnShapesMerge.updateHint(this.tipShapeMerge); this.btnRotatePage.updateHint([this.txtRotatePageRight, this.txtRotatePage]); this.btnDelPage.updateHint(this.tipDelPage); this.btnMarkers.setMenu( new Common.UI.Menu({ cls: 'shifted-left', style: 'min-width: 145px', items: [ {template: _.template('')}, this.mnuMarkerSettings = new Common.UI.MenuItem({ caption: this.textListSettings, value: 'settings' }) ] }) ); this.btnNumbers.setMenu( new Common.UI.Menu({ cls: 'shifted-left', items: [ {template: _.template('')}, this.mnuNumberSettings = new Common.UI.MenuItem({ caption: this.textListSettings, value: 'settings' }) ] }) ); this._markersArr = [ 'undefined', '{"bulletTypeface":{"type":"bufont","typeface":"Symbol"},"bulletType":{"type":"char","char":"·","startAt":null}}', '{"bulletTypeface":{"type":"bufont","typeface":"Courier New"},"bulletType":{"type":"char","char":"o","startAt":null}}', '{"bulletTypeface":{"type":"bufont","typeface":"Wingdings"},"bulletType":{"type":"char","char":"§","startAt":null}}', '{"bulletTypeface":{"type":"bufont","typeface":"Wingdings"},"bulletType":{"type":"char","char":"v","startAt":null}}', '{"bulletTypeface":{"type":"bufont","typeface":"Wingdings"},"bulletType":{"type":"char","char":"Ø","startAt":null}}', '{"bulletTypeface":{"type":"bufont","typeface":"Wingdings"},"bulletType":{"type":"char","char":"ü","startAt":null}}', '{"bulletTypeface":{"type":"bufont","typeface":"Symbol"},"bulletType":{"type":"char","char":"¨","startAt":null}}', '{"bulletTypeface":{"type":"bufont","typeface":"Arial"},"bulletType":{"type":"char","char":"–","startAt":null}}' ]; var _conf = this.mnuMarkersPicker.conf; this.mnuMarkersPicker = new Common.UI.DataView({ el: $('#id-toolbar-menu-markers'), parentMenu: this.btnMarkers.menu, outerMenu: {menu: this.btnMarkers.menu, index: 0}, restoreHeight: 138, allowScrollbar: false, delayRenderTips: true, store: new Common.UI.DataViewStore([ {id: 'id-markers-' + Common.UI.getId(), data: {type: 0, subtype: -1},numberingInfo: this._markersArr[0], skipRenderOnChange: true, tip: this.tipNone}, {id: 'id-markers-' + Common.UI.getId(), data: {type: 0, subtype: 1}, numberingInfo: this._markersArr[1], skipRenderOnChange: true, tip: this.tipMarkersFRound}, {id: 'id-markers-' + Common.UI.getId(), data: {type: 0, subtype: 2}, numberingInfo: this._markersArr[2], skipRenderOnChange: true, tip: this.tipMarkersHRound}, {id: 'id-markers-' + Common.UI.getId(), data: {type: 0, subtype: 3}, numberingInfo: this._markersArr[3], skipRenderOnChange: true, tip: this.tipMarkersFSquare}, {id: 'id-markers-' + Common.UI.getId(), data: {type: 0, subtype: 4}, numberingInfo: this._markersArr[4], skipRenderOnChange: true, tip: this.tipMarkersStar}, {id: 'id-markers-' + Common.UI.getId(), data: {type: 0, subtype: 5}, numberingInfo: this._markersArr[5], skipRenderOnChange: true, tip: this.tipMarkersArrow}, {id: 'id-markers-' + Common.UI.getId(), data: {type: 0, subtype: 6}, numberingInfo: this._markersArr[6], skipRenderOnChange: true, tip: this.tipMarkersCheckmark}, {id: 'id-markers-' + Common.UI.getId(), data: {type: 0, subtype: 7}, numberingInfo: this._markersArr[7], skipRenderOnChange: true, tip: this.tipMarkersFRhombus}, {id: 'id-markers-' + Common.UI.getId(), data: {type: 0, subtype: 8}, numberingInfo: this._markersArr[8], skipRenderOnChange: true, tip: this.tipMarkersDash} ]), itemTemplate: _.template('
') }); this.btnMarkers.menu.setInnerMenu([{menu: this.mnuMarkersPicker, index: 0}]); _conf && this.mnuMarkersPicker.selectByIndex(_conf.index, true); this._numbersArr = [ 'undefined', '{"bulletTypeface":{"type":"bufont","typeface":"Arial"},"bulletType":{"type":"autonum","char":null,"autoNumType":"alphaUcPeriod","startAt":null}}', '{"bulletTypeface":{"type":"bufont","typeface":"Arial"},"bulletType":{"type":"autonum","char":null,"autoNumType":"alphaLcParenR","startAt":null}}', '{"bulletTypeface":{"type":"bufont","typeface":"Arial"},"bulletType":{"type":"autonum","char":null,"autoNumType":"alphaLcPeriod","startAt":null}}', '{"bulletTypeface":{"type":"bufont","typeface":"Arial"},"bulletType":{"type":"autonum","char":null,"autoNumType":"arabicPeriod","startAt":null}}', '{"bulletTypeface":{"type":"bufont","typeface":"Arial"},"bulletType":{"type":"autonum","char":null,"autoNumType":"arabicParenR","startAt":null}}', '{"bulletTypeface":{"type":"bufont","typeface":"Arial"},"bulletType":{"type":"autonum","char":null,"autoNumType":"romanUcPeriod","startAt":null}}', '{"bulletTypeface":{"type":"bufont","typeface":"Arial"},"bulletType":{"type":"autonum","char":null,"autoNumType":"romanLcPeriod","startAt":null}}' ]; _conf = this.mnuNumbersPicker.conf; this.mnuNumbersPicker = new Common.UI.DataView({ el: $('#id-toolbar-menu-numbering'), parentMenu: this.btnNumbers.menu, outerMenu: {menu: this.btnNumbers.menu, index: 0}, restoreHeight: 92, allowScrollbar: false, delayRenderTips: true, store: new Common.UI.DataViewStore([ {id: 'id-numbers-' + Common.UI.getId(), data: {type: 1, subtype: -1}, numberingInfo: this._numbersArr[0], skipRenderOnChange: true, tip: this.tipNone}, {id: 'id-numbers-' + Common.UI.getId(), data: {type: 1, subtype: 4}, numberingInfo: this._numbersArr[1], skipRenderOnChange: true, tip: this.tipNumCapitalLetters}, {id: 'id-numbers-' + Common.UI.getId(), data: {type: 1, subtype: 5}, numberingInfo: this._numbersArr[2], skipRenderOnChange: true, tip: this.tipNumLettersParentheses}, {id: 'id-numbers-' + Common.UI.getId(), data: {type: 1, subtype: 6}, numberingInfo: this._numbersArr[3], skipRenderOnChange: true, tip: this.tipNumLettersPoints}, {id: 'id-numbers-' + Common.UI.getId(), data: {type: 1, subtype: 1}, numberingInfo: this._numbersArr[4], skipRenderOnChange: true, tip: this.tipNumNumbersPoint}, {id: 'id-numbers-' + Common.UI.getId(), data: {type: 1, subtype: 2}, numberingInfo: this._numbersArr[5], skipRenderOnChange: true, tip: this.tipNumNumbersParentheses}, {id: 'id-numbers-' + Common.UI.getId(), data: {type: 1, subtype: 3}, numberingInfo: this._numbersArr[6], skipRenderOnChange: true, tip: this.tipNumRoman}, {id: 'id-numbers-' + Common.UI.getId(), data: {type: 1, subtype: 7}, numberingInfo: this._numbersArr[7], skipRenderOnChange: true, tip: this.tipNumRomanSmall} ]), itemTemplate: _.template('
') }); this.btnNumbers.menu.setInnerMenu([{menu: this.mnuNumbersPicker, index: 0}]); _conf && this.mnuNumbersPicker.selectByIndex(_conf.index, true); if (this.btnTextHighlightColor && this.btnTextHighlightColor.cmpEl) { this.btnTextHighlightColor.currentColor = 'FFFF00'; this.btnTextHighlightColor.setColor(this.btnTextHighlightColor.currentColor); this.mnuTextHighlightColorPicker = new Common.UI.ThemeColorPalette({ el: $('#id-toolbar-menu-text-highlight'), colors: [ 'FFFF00', '00FF00', '00FFFF', 'FF00FF', '0000FF', 'FF0000', '00008B', '008B8B', '006400', '800080', '8B0000', '808000', 'FFFFFF', 'D3D3D3', 'A9A9A9', '000000' ], colorHints: [ Common.Utils.ThemeColor.txtYellow, Common.Utils.ThemeColor.txtBrightGreen, Common.Utils.ThemeColor.txtTurquosie, Common.Utils.ThemeColor.txtPink, Common.Utils.ThemeColor.txtBlue, Common.Utils.ThemeColor.txtRed, Common.Utils.ThemeColor.txtDarkBlue, Common.Utils.ThemeColor.txtTeal, Common.Utils.ThemeColor.txtGreen, Common.Utils.ThemeColor.txtViolet, Common.Utils.ThemeColor.txtDarkRed, Common.Utils.ThemeColor.txtDarkYellow, Common.Utils.ThemeColor.txtWhite, Common.Utils.ThemeColor.txtGray + '-25%', Common.Utils.ThemeColor.txtGray + '-50%', Common.Utils.ThemeColor.txtBlack ], value: 'FFFF00', dynamiccolors: 0, themecolors: 0, effects: 0, columns: 4, cls: 'palette-large', outerMenu: {menu: this.btnTextHighlightColor.menu, index: 0, focusOnShow: true} }); this.btnTextHighlightColor.setPicker(this.mnuTextHighlightColorPicker); this.btnTextHighlightColor.menu.setInnerMenu([{menu: this.mnuTextHighlightColorPicker, index: 0}]); } if (this.btnFontColor && this.btnFontColor.menu) { this.mnuFontColorPicker = this.createPen(this.btnFontColor, 'font'); } }, createDelayedElements: function () { this.createDelayedElementsCommon(); if (this.mode.isEdit) { this.createDelayedElementsPDFAnnotate(); this.mode.isPDFEdit && this.createDelayedElementsPDFEdit(); } else if (this.mode.isRestrictedEdit) this.createDelayedElementsRestrictedEdit(); }, onToolbarAfterRender: function(toolbar) { // DataView and pickers }, updateMetricUnit: function () { }, setApi: function (api) { this.api = api; /** coauthoring begin **/ this.api.asc_registerCallback('asc_onCollaborativeChanges', _.bind(this.onCollaborativeChanges, this)); this.api.asc_registerCallback('asc_onAuthParticipantsChanged', _.bind(this.onApiUsersChanged, this)); this.api.asc_registerCallback('asc_onParticipantsChanged', _.bind(this.onApiUsersChanged, this)); /** coauthoring end **/ return this; }, setMode: function (mode) { if (mode.isDisconnected) { this.lockToolbar(Common.enumLock.lostConnect, true); if ( this.synchTooltip ) this.synchTooltip.hide(); if (!mode.enableDownload) this.lockToolbar(Common.enumLock.cantPrint, true, {array: [this.btnPrint]}); } else { this.lockToolbar(Common.enumLock.cantPrint, !mode.canPrint, {array: [this.btnPrint]}); !mode.canPrint && this.btnPrint.hide(); } this.mode = mode; }, /** coauthoring begin **/ onCollaborativeChanges: function () { if (!(this.mode.isPDFAnnotate || this.mode.isPDFEdit) || Common.Utils.InternalSettings.get("pdfe-settings-coauthmode")) return; if (this._state.hasCollaborativeChanges) return; if (!this.btnCollabChanges.rendered || this._state.previewmode) { this.needShowSynchTip = true; return; } this._state.hasCollaborativeChanges = true; this.btnCollabChanges.cmpEl.addClass('notify'); if (this.showSynchTip) { this.btnCollabChanges.updateHint(''); if (this.synchTooltip === undefined) this.createSynchTip(); this.synchTooltip.show(); } else { this.btnSaveTip = this.tipSynchronize; PDFE.getController('Common.Controllers.Shortcuts').updateShortcutHints({ Save: { btn: this.btnCollabChanges, label: this.btnSaveTip, ignoreUpdates: true }, }); } this.lockToolbar(Common.enumLock.cantSave, !this.mode.isPDFEdit && !this.mode.isPDFAnnotate && this.mode.canSaveToFile, {array: [this.btnSave]}); Common.Gateway.collaborativeChanges(); }, createSynchTip: function () { var direction = Common.UI.isRTL() ? 'left' : 'right'; this.synchTooltip = new Common.UI.SynchronizeTip({ extCls: (this.mode.compactHeader) ? undefined : 'inc-index', placement: this.mode.isDesktopApp ? 'bottom-' + direction : direction + '-bottom', target: this.btnCollabChanges.$el }); this.synchTooltip.on('dontshowclick', function () { this.showSynchTip = false; this.synchTooltip.hide(); PDFE.getController('Common.Controllers.Shortcuts').updateShortcutHints({ Save: { btn: this.btnCollabChanges, label: this.btnSaveTip, ignoreUpdates: true }, }); Common.localStorage.setItem("pdfe-hide-synch", 1); }, this); this.synchTooltip.on('closeclick', function () { this.synchTooltip.hide(); PDFE.getController('Common.Controllers.Shortcuts').updateShortcutHints({ Save: { btn: this.btnCollabChanges, label: this.btnSaveTip, ignoreUpdates: true }, }); }, this); }, synchronizeChanges: function () { if ( !this._state.previewmode && this.btnCollabChanges && this.btnCollabChanges.rendered ) { var me = this; if ( me.btnCollabChanges.cmpEl.hasClass('notify') ) { me.btnCollabChanges.cmpEl.removeClass('notify'); if (this.synchTooltip) this.synchTooltip.hide(); PDFE.getController('Common.Controllers.Shortcuts').updateShortcutHints({ Save: { btn: this.btnCollabChanges, label: this.btnSaveTip, ignoreUpdates: true }, }); this.lockToolbar(Common.enumLock.cantSave, !me.mode.forcesave && !me.mode.canSaveDocumentToBinary || !me.mode.isPDFEdit && !me.mode.isPDFAnnotate && me.mode.canSaveToFile || !me.mode.showSaveButton, {array: [this.btnSave]}); this._state.hasCollaborativeChanges = false; } } }, onApiUsersChanged: function (users) { if (!(this.mode.isPDFAnnotate || this.mode.isPDFEdit)) return; var editusers = []; _.each(users, function (item) { if (!item.asc_getView()) editusers.push(item); }); var me = this; var length = _.size(editusers); var cls = (length > 1) ? 'btn-save-coauth' : 'btn-save'; if ( cls !== me.btnSaveCls && me.btnCollabChanges && me.btnCollabChanges.rendered ) { me.btnSaveTip = ((length > 1) ? me.tipSaveCoauth : me.tipSave ); PDFE.getController('Common.Controllers.Shortcuts').updateShortcutHints({ Save: { btn: this.btnCollabChanges, label: this.btnSaveTip, ignoreUpdates: true }, }); me.btnCollabChanges.updateHint(me.btnSaveTip); me.btnCollabChanges.changeIcon({next: cls, curr: me.btnSaveCls}); me.btnSaveCls = cls; } }, onDesktopWindow: function() { if (this.synchTooltip && this.synchTooltip.isVisible()) { this.synchTooltip.show(); // change position for visible tip } }, /** coauthoring end **/ lockToolbar: function (causes, lock, opts) { Common.Utils.lockControls(causes, lock, opts, this.lockControls); }, tipNumCapitalLetters: 'A. B. C.', tipNumLettersParentheses: 'a) b) c)', tipNumLettersPoints: 'a. b. c.', tipNumNumbersPoint: '1. 2. 3.', tipNumNumbersParentheses: '1) 2) 3)', tipNumRoman: 'I. II. III.', tipNumRomanSmall: 'i. ii. iii.' } })(), PDFE.Views.Toolbar || {})); });