diff --git a/apps/common/main/lib/component/ComboBoxFonts.js b/apps/common/main/lib/component/ComboBoxFonts.js
index 4c0be1c55..d2e7b88ee 100644
--- a/apps/common/main/lib/component/ComboBoxFonts.js
+++ b/apps/common/main/lib/component/ComboBoxFonts.js
@@ -95,7 +95,7 @@ define([
this.recent = _.isNumber(options.recent) ? options.recent : 3;
- Common.NotificationCenter.on('fonts:change', _.bind(this.onApiChangeFont, this));
+ // Common.NotificationCenter.on('fonts:change', _.bind(this.onApiChangeFont, this));
Common.NotificationCenter.on('fonts:load', _.bind(this.fillFonts, this));
},
@@ -115,8 +115,6 @@ define([
this._input.on('focus', _.bind(function() {this.inFormControl = true;}, this));
this._input.on('blur', _.bind(function() {this.inFormControl = false;}, this));
- this._modalParents = this.cmpEl.closest('.asc-window');
-
return this;
},
@@ -339,8 +337,6 @@ define([
var name = (_.isFunction(font.get_Name) ? font.get_Name() : font.asc_getName());
if (this.getRawValue() !== name) {
- if (this._modalParents.length > 0) return;
-
var record = this.store.findWhere({
name: name
});
diff --git a/apps/documenteditor/main/app/controller/Toolbar.js b/apps/documenteditor/main/app/controller/Toolbar.js
index 36ffd3609..3300ce1e3 100644
--- a/apps/documenteditor/main/app/controller/Toolbar.js
+++ b/apps/documenteditor/main/app/controller/Toolbar.js
@@ -371,6 +371,7 @@ define([
this.api.asc_registerCallback('asc_onContextMenu', _.bind(this.onContextMenu, this));
this.api.asc_registerCallback('asc_onShowParaMarks', _.bind(this.onShowParaMarks, this));
this.api.asc_registerCallback('asc_onChangeSdtGlobalSettings', _.bind(this.onChangeSdtGlobalSettings, this));
+ Common.NotificationCenter.on('fonts:change', _.bind(this.onApiChangeFont, this));
} else if (this.mode.isRestrictedEdit) {
this.api.asc_registerCallback('asc_onFocusObject', _.bind(this.onApiFocusObjectRestrictedEdit, this));
this.api.asc_registerCallback('asc_onCoAuthoringDisconnect', _.bind(this.onApiCoAuthoringDisconnect, this));
@@ -400,6 +401,10 @@ define([
this.toolbar.collapse();
},
+ onApiChangeFont: function(font) {
+ !this.getApplication().getController('Main').isModalShowed && this.toolbar.cmbFontName.onApiChangeFont(font);
+ },
+
onApiFontSize: function(size) {
if (this._state.fontsize !== size) {
this.toolbar.cmbFontSize.setValue(size);
diff --git a/apps/presentationeditor/main/app/controller/Toolbar.js b/apps/presentationeditor/main/app/controller/Toolbar.js
index b48f04afb..32e810492 100644
--- a/apps/presentationeditor/main/app/controller/Toolbar.js
+++ b/apps/presentationeditor/main/app/controller/Toolbar.js
@@ -324,6 +324,7 @@ define([
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));
+ Common.NotificationCenter.on('fonts:change', _.bind(this.onApiChangeFont, this));
this.api.asc_registerCallback('asc_onCanUndo', _.bind(this.onApiCanRevert, this, 'undo'));
this.api.asc_registerCallback('asc_onCanRedo', _.bind(this.onApiCanRevert, this, 'redo'));
@@ -380,6 +381,10 @@ define([
this.toolbar.collapse();
},
+ onApiChangeFont: function(font) {
+ !this.getApplication().getController('Main').isModalShowed && this.toolbar.cmbFontName.onApiChangeFont(font);
+ },
+
onApiFontSize: function(size) {
if (this._state.fontsize !== size) {
this.toolbar.cmbFontSize.setValue(size);
diff --git a/apps/spreadsheeteditor/main/app/controller/Main.js b/apps/spreadsheeteditor/main/app/controller/Main.js
index ac6ba98e3..6b978e8d7 100644
--- a/apps/spreadsheeteditor/main/app/controller/Main.js
+++ b/apps/spreadsheeteditor/main/app/controller/Main.js
@@ -205,7 +205,7 @@ define([
$(document.body).on('blur', 'input, textarea', function(e) {
if (me.isAppDisabled === true || me.isFrameClosed) return;
- if (!me.isModalShowed && !(me.loadMask && me.loadMask.isVisible())) {
+ if ((!me.isModalShowed || $('.asc-window.enable-key-events:visible').length>0) && !(me.loadMask && me.loadMask.isVisible())) {
if (/form-control/.test(e.target.className))
me.inFormControl = false;
if (!e.relatedTarget ||
diff --git a/apps/spreadsheeteditor/main/app/controller/Toolbar.js b/apps/spreadsheeteditor/main/app/controller/Toolbar.js
index a6ef7eb42..a7fa88538 100644
--- a/apps/spreadsheeteditor/main/app/controller/Toolbar.js
+++ b/apps/spreadsheeteditor/main/app/controller/Toolbar.js
@@ -54,7 +54,8 @@ define([
'spreadsheeteditor/main/app/view/NamedRangePasteDlg',
'spreadsheeteditor/main/app/view/NameManagerDlg',
'spreadsheeteditor/main/app/view/FormatSettingsDialog',
- 'spreadsheeteditor/main/app/view/PageMarginsDialog'
+ 'spreadsheeteditor/main/app/view/PageMarginsDialog',
+ 'spreadsheeteditor/main/app/view/HeaderFooterDialog'
], function () { 'use strict';
SSE.Controllers.Toolbar = Backbone.Controller.extend(_.extend({
@@ -365,6 +366,7 @@ define([
toolbar.btnImgAlign.menu.on('item:click', _.bind(this.onImgAlignSelect, this));
toolbar.btnImgForward.on('click', this.onImgArrangeSelect.bind(this, 'forward'));
toolbar.btnImgBackward.on('click', this.onImgArrangeSelect.bind(this, 'backward'));
+ toolbar.btnEditHeader.on('click', _.bind(this.onEditHeaderClick, this));
this.onSetupCopyStyleButton();
}
@@ -385,6 +387,7 @@ define([
Common.NotificationCenter.on('api:disconnect', _.bind(this.onApiCoAuthoringDisconnect, this));
this.api.asc_registerCallback('asc_onLockDefNameManager', _.bind(this.onLockDefNameManager, this));
this.api.asc_registerCallback('asc_onZoomChanged', _.bind(this.onApiZoomChange, this));
+ Common.NotificationCenter.on('fonts:change', _.bind(this.onApiChangeFont, this));
},
// onNewDocument: function(btn, e) {
@@ -401,6 +404,10 @@ define([
// Common.component.Analytics.trackEvent('ToolBar', 'Open Document');
// },
+ onApiChangeFont: function(font) {
+ !this.getApplication().getController('Main').isModalShowed && this.toolbar.cmbFontName.onApiChangeFont(font);
+ },
+
onContextMenu: function() {
this.toolbar.collapse();
},
@@ -3297,6 +3304,36 @@ define([
this.toolbar.btnPrintArea.menu.items[2].setVisible(this.api.asc_CanAddPrintArea());
},
+ onEditHeaderClick: function(btn) {
+ var 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);
+ }
+
+ var win = new SSE.Views.HeaderFooterDialog({
+ api: me.api,
+ fontStore: me.fontStore,
+ handler: function(dlg, result) {
+ if (result == 'ok') {
+ var props = dlg.getSettings();
+ // me.api.asc_editHeader(props);
+ }
+ Common.NotificationCenter.trigger('edit:complete');
+ }
+ });
+ win.show();
+
+ Common.NotificationCenter.trigger('edit:complete', this.toolbar);
+ },
+
textEmptyImgUrl : 'You need to specify image URL.',
warnMergeLostData : 'Operation can destroy data in the selected cells. Continue?',
textWarning : 'Warning',
diff --git a/apps/spreadsheeteditor/main/app/template/Toolbar.template b/apps/spreadsheeteditor/main/app/template/Toolbar.template
index d6054321a..69e985163 100644
--- a/apps/spreadsheeteditor/main/app/template/Toolbar.template
+++ b/apps/spreadsheeteditor/main/app/template/Toolbar.template
@@ -142,6 +142,7 @@
+
diff --git a/apps/spreadsheeteditor/main/app/view/HeaderFooterDialog.js b/apps/spreadsheeteditor/main/app/view/HeaderFooterDialog.js
new file mode 100644
index 000000000..84651596a
--- /dev/null
+++ b/apps/spreadsheeteditor/main/app/view/HeaderFooterDialog.js
@@ -0,0 +1,956 @@
+/*
+ *
+ * (c) Copyright Ascensio System Limited 2010-2018
+ *
+ * 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
+ *
+*/
+/**
+ * HeaderFooterDialog.js
+ *
+ * Created by Julia Radzhabova on 10/11/18
+ * Copyright (c) 2018 Ascensio System SIA. All rights reserved.
+ *
+ */
+
+
+define([
+ 'common/main/lib/util/utils',
+ 'common/main/lib/component/InputField',
+ 'common/main/lib/component/Window',
+ 'common/main/lib/component/ComboBoxFonts'
+], function () { 'use strict';
+
+ SSE.Views.HeaderFooterDialog = Common.UI.Window.extend(_.extend({
+ options: {
+ width: 647,
+ style: 'min-width: 350px;',
+ cls: 'modal-dlg enable-key-events'
+ },
+
+ initialize : function(options) {
+ _.extend(this.options, {
+ title: this.textTitle
+ }, options || {});
+
+ this.api = this.options.api;
+ this.props = this.options.props;
+ this.fontStore = this.options.fontStore;
+ this.isFooter = false;
+ this.currentCanvas = null;
+ this.headerControls = [];
+ this.footerControls = [];
+ this._state = {
+ clrtext: undefined,
+ bold: undefined,
+ italic: undefined,
+ underline: undefined,
+ strikeout: undefined,
+ subscript: undefined,
+ superscript: undefined,
+ fontsize: undefined,
+ fontname: 'Arial'
+ };
+
+ this.template = [
+ '
',
+ '
',
+ '',
+ '',
+ '
',
+ ' ',
+ '',
+ '
',
+ ' ',
+ ' ',
+ '',
+ '',
+ '
',
+ ' ',
+ '',
+ '
',
+ ' ',
+ ' ',
+ '
',
+ '
',
+ '', this.textAll,' ',
+ '', this.textOdd,' ',
+ '', this.textEven,' ',
+ '', this.textFirst,' ',
+ '
',
+ '
' + this.textHeader + ' ',
+ '
',
+ '
',
+ '
',
+ '
',
+ '
',
+ '
','
',
+ '
','
',
+ '
','
',
+ '
',
+ '
' + this.textFooter + ' ',
+ '
',
+ '
',
+ '
',
+ '
',
+ '
',
+ '
','
',
+ '
','
',
+ '
','
',
+ '
',
+ '
',
+ ''
+ ].join('');
+
+ this.options.tpl = _.template(this.template)(this.options);
+ Common.UI.Window.prototype.initialize.call(this, this.options);
+ },
+
+ render: function() {
+ Common.UI.Window.prototype.render.call(this);
+
+ var me = this,
+ $window = this.getChild();
+
+ this.chFirstPage = new Common.UI.CheckBox({
+ el: $('#id-dlg-hf-ch-first'),
+ labelText: this.textDiffFirst
+ });
+ this.chFirstPage.on('change', _.bind(function(field, newValue, oldValue, eOpts){
+ var checked = (field.getValue()=='checked');
+ if (this.HFObject)
+ this.HFObject.setDifferentFirst(checked);
+
+ this.btnFirst.setVisible(checked);
+ if (!checked && this.btnFirst.isActive())
+ (this.btnAll.isVisible()) ? this.btnAll.toggle(true) : this.btnOdd.toggle(true);
+ }, this));
+
+ this.chOddPage = new Common.UI.CheckBox({
+ el: $('#id-dlg-hf-ch-odd'),
+ labelText: this.textDiffOdd
+ });
+ this.chOddPage.on('change', _.bind(function(field, newValue, oldValue, eOpts){
+ var checked = (field.getValue()=='checked');
+ if (this.HFObject)
+ this.HFObject.setDifferentOddEven(checked);
+
+ this.btnOdd.setVisible(checked);
+ this.btnEven.setVisible(checked);
+ this.btnAll.setVisible(!checked);
+ if (!checked && (this.btnOdd.isActive() || this.btnEven.isActive()))
+ this.btnAll.toggle(true);
+ if (checked && this.btnAll.isActive())
+ this.btnOdd.toggle(true);
+ }, this));
+
+ this.chScale = new Common.UI.CheckBox({
+ el: $('#id-dlg-hf-ch-scale'),
+ labelText: this.textScale
+ });
+ this.chScale.on('change', _.bind(function(field, newValue, oldValue, eOpts){
+ var checked = (field.getValue()=='checked');
+ if (this.HFObject)
+ this.HFObject.setScaleWithDoc(checked);
+ }, this));
+
+ this.chAlign = new Common.UI.CheckBox({
+ el: $('#id-dlg-hf-ch-align'),
+ labelText: this.textAlign
+ });
+ this.chAlign.on('change', _.bind(function(field, newValue, oldValue, eOpts){
+ var checked = (field.getValue()=='checked');
+ if (this.HFObject)
+ this.HFObject.setAlignWithMargins(checked);
+ }, this));
+
+ this.btnAll = new Common.UI.Button({
+ el: $('#id-dlg-hf-btn-all'),
+ enableToggle: true,
+ toggleGroup: 'hf-pages',
+ allowDepress: false,
+ pressed: true
+ });
+ this.btnAll.on('toggle', _.bind(this.onPageTypeToggle, this, Asc.c_oAscHeaderFooterType.odd));
+
+ this.btnOdd = new Common.UI.Button({
+ el: $('#id-dlg-hf-btn-odd'),
+ enableToggle: true,
+ toggleGroup: 'hf-pages',
+ allowDepress: false
+ });
+ this.btnOdd.on('toggle', _.bind(this.onPageTypeToggle, this, Asc.c_oAscHeaderFooterType.odd));
+
+ this.btnEven = new Common.UI.Button({
+ el: $('#id-dlg-hf-btn-even'),
+ enableToggle: true,
+ toggleGroup: 'hf-pages',
+ allowDepress: false
+ });
+ this.btnEven.on('toggle', _.bind(this.onPageTypeToggle, this, Asc.c_oAscHeaderFooterType.even));
+
+ this.btnFirst = new Common.UI.Button({
+ el: $('#id-dlg-hf-btn-first'),
+ enableToggle: true,
+ toggleGroup: 'hf-pages',
+ allowDepress: false
+ });
+ this.btnFirst.on('toggle', _.bind(this.onPageTypeToggle, this, Asc.c_oAscHeaderFooterType.first));
+
+ this.cmbPresetsH = new Common.UI.ComboBox({
+ el : $('#id-dlg-h-presets'),
+ cls : 'input-group-nr',
+ style : 'width: 110px;',
+ menuStyle : 'min-width: 100%; max-height: 200px;',
+ editable : false,
+ scrollAlwaysVisible: true,
+ data: []
+ });
+ this.cmbPresetsH.on('selected', _.bind(this.onPresetSelect, this, false));
+ this.cmbPresetsH.setValue(this.textPresets);
+
+ this.cmbPresetsF = new Common.UI.ComboBox({
+ el : $('#id-dlg-f-presets'),
+ cls : 'input-group-nr',
+ style : 'width: 110px;',
+ menuStyle : 'min-width: 100%; max-height: 200px;',
+ editable : false,
+ scrollAlwaysVisible: true,
+ data: []
+ });
+ this.cmbPresetsF.on('selected', _.bind(this.onPresetSelect, this, true));
+ this.cmbPresetsF.setValue(this.textPresets);
+
+ var data = [
+ {displayValue: this.textPageNum, value: Asc.c_oAscHeaderFooterField.pageNumber},
+ {displayValue: this.textPageCount, value: Asc.c_oAscHeaderFooterField.pageCount},
+ {displayValue: this.textDate, value: Asc.c_oAscHeaderFooterField.date},
+ {displayValue: this.textTime, value: Asc.c_oAscHeaderFooterField.time},
+ {displayValue: this.textFileName, value: Asc.c_oAscHeaderFooterField.fileName},
+ {displayValue: this.textSheet, value: Asc.c_oAscHeaderFooterField.sheetName}
+ ];
+
+ this.cmbInsertH = new Common.UI.ComboBox({
+ el : $('#id-dlg-h-insert'),
+ cls : 'input-group-nr',
+ style : 'width: 110px;',
+ menuStyle : 'min-width: 100%; max-heigh: 100px;',
+ editable : false,
+ data: data
+ });
+ this.cmbInsertH.on('selected', _.bind(this.onObjectSelect, this));
+ this.cmbInsertH.setValue(this.textInsert);
+ this.headerControls.push(this.cmbInsertH);
+
+ this.cmbInsertF = new Common.UI.ComboBox({
+ el : $('#id-dlg-f-insert'),
+ cls : 'input-group-nr',
+ style : 'width: 110px;',
+ menuStyle : 'min-width: 100%; max-heigh: 100px;',
+ editable : false,
+ data: data
+ });
+ this.cmbInsertF.on('selected', _.bind(this.onObjectSelect, this));
+ this.cmbInsertF.setValue(this.textInsert);
+ this.footerControls.push(this.cmbInsertF);
+
+ this.cmbFonts = [];
+ this.cmbFonts.push(new Common.UI.ComboBoxFonts({
+ el : $('#id-dlg-h-fonts'),
+ cls : 'input-group-nr',
+ style : 'width: 142px;',
+ menuCls : 'scrollable-menu',
+ menuStyle : 'min-width: 100%;max-height: 270px;',
+ store : new Common.Collections.Fonts(),
+ recent : 0,
+ hint : this.tipFontName
+ }));
+ this.cmbFonts[0].on('selected', _.bind(this.onFontSelect, this));
+ this.headerControls.push(this.cmbFonts[0]);
+
+ this.cmbFonts.push(new Common.UI.ComboBoxFonts({
+ el : $('#id-dlg-f-fonts'),
+ cls : 'input-group-nr',
+ style : 'width: 142px;',
+ menuCls : 'scrollable-menu',
+ menuStyle : 'min-width: 100%;max-height: 270px;',
+ store : new Common.Collections.Fonts(),
+ recent : 0,
+ hint : this.tipFontName
+ }));
+ this.cmbFonts[1].on('selected', _.bind(this.onFontSelect, this));
+ this.footerControls.push(this.cmbFonts[1]);
+ Common.NotificationCenter.on('fonts:change', _.bind(this.onApiChangeFont, this));
+
+ 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" }
+ ];
+ this.cmbFontSize = [];
+ this.cmbFontSize.push(new Common.UI.ComboBox({
+ el: $('#id-dlg-h-font-size'),
+ cls: 'input-group-nr',
+ style: 'width: 55px;',
+ menuCls : 'scrollable-menu',
+ menuStyle: 'min-width: 55px;max-height: 270px;',
+ hint: this.tipFontSize,
+ data: data
+ }));
+ this.cmbFontSize[0].on('selected', _.bind(this.onFontSizeSelect, this));
+ this.cmbFontSize[0].setValue(this._state.fontsize);
+ this.headerControls.push(this.cmbFontSize[0]);
+
+ this.cmbFontSize.push(new Common.UI.ComboBox({
+ el: $('#id-dlg-f-font-size'),
+ cls: 'input-group-nr',
+ style: 'width: 55px;',
+ menuCls : 'scrollable-menu',
+ menuStyle: 'min-width: 55px;max-height: 270px;',
+ hint: this.tipFontSize,
+ data: data
+ }));
+ this.cmbFontSize[1].on('selected', _.bind(this.onFontSizeSelect, this));
+ this.cmbFontSize[1].setValue(this._state.fontsize);
+ this.footerControls.push(this.cmbFontSize[1]);
+
+ this.btnBold = [];
+ this.btnBold.push(new Common.UI.Button({
+ cls: 'btn-toolbar',
+ iconCls: 'btn-bold',
+ enableToggle: true,
+ hint: this.textBold
+ }));
+ this.btnBold[0].render($('#id-dlg-h-bold')) ;
+ this.btnBold[0].on('click', _.bind(this.onBoldClick, this));
+ this.headerControls.push(this.btnBold[0]);
+
+ this.btnBold.push(new Common.UI.Button({
+ cls: 'btn-toolbar',
+ iconCls: 'btn-bold',
+ enableToggle: true,
+ hint: this.textBold
+ }));
+ this.btnBold[1].render($('#id-dlg-f-bold')) ;
+ this.btnBold[1].on('click', _.bind(this.onBoldClick, this));
+ this.footerControls.push(this.btnBold[1]);
+
+ this.btnItalic = [];
+ this.btnItalic.push(new Common.UI.Button({
+ cls: 'btn-toolbar',
+ iconCls: 'btn-italic',
+ enableToggle: true,
+ hint: this.textItalic
+ }));
+ this.btnItalic[0].render($('#id-dlg-h-italic')) ;
+ this.btnItalic[0].on('click', _.bind(this.onItalicClick, this));
+ this.headerControls.push(this.btnItalic[0]);
+
+ this.btnItalic.push(new Common.UI.Button({
+ cls: 'btn-toolbar',
+ iconCls: 'btn-italic',
+ enableToggle: true,
+ hint: this.textItalic
+ }));
+ this.btnItalic[1].render($('#id-dlg-f-italic')) ;
+ this.btnItalic[1].on('click', _.bind(this.onItalicClick, this));
+ this.footerControls.push(this.btnItalic[1]);
+
+ this.btnUnderline = [];
+ this.btnUnderline.push(new Common.UI.Button({
+ cls : 'btn-toolbar',
+ iconCls : 'btn-underline',
+ enableToggle: true,
+ hint: this.textUnderline
+ }));
+ this.btnUnderline[0].render($('#id-dlg-h-underline')) ;
+ this.btnUnderline[0].on('click', _.bind(this.onUnderlineClick, this));
+ this.headerControls.push(this.btnUnderline[0]);
+
+ this.btnUnderline.push(new Common.UI.Button({
+ cls : 'btn-toolbar',
+ iconCls : 'btn-underline',
+ enableToggle: true,
+ hint: this.textUnderline
+ }));
+ this.btnUnderline[1].render($('#id-dlg-f-underline')) ;
+ this.btnUnderline[1].on('click', _.bind(this.onUnderlineClick, this));
+ this.footerControls.push(this.btnUnderline[1]);
+
+ this.btnStrikeout = [];
+ this.btnStrikeout.push(new Common.UI.Button({
+ cls: 'btn-toolbar',
+ iconCls: 'btn-strikeout',
+ enableToggle: true,
+ hint: this.textStrikeout
+ }));
+ this.btnStrikeout[0].render($('#id-dlg-h-strikeout')) ;
+ this.btnStrikeout[0].on('click',_.bind(this.onStrikeoutClick, this));
+ this.headerControls.push(this.btnStrikeout[0]);
+
+ this.btnStrikeout.push(new Common.UI.Button({
+ cls: 'btn-toolbar',
+ iconCls: 'btn-strikeout',
+ enableToggle: true,
+ hint: this.textStrikeout
+ }));
+ this.btnStrikeout[1].render($('#id-dlg-f-strikeout')) ;
+ this.btnStrikeout[1].on('click',_.bind(this.onStrikeoutClick, this));
+ this.footerControls.push(this.btnStrikeout[1]);
+
+ this.btnSuperscript = [];
+ this.btnSuperscript.push(new Common.UI.Button({
+ cls: 'btn-toolbar',
+ iconCls: 'btn-superscript',
+ enableToggle: true,
+ toggleGroup: 'superscriptHFGroup',
+ hint: this.textSuperscript
+ }));
+ this.btnSuperscript[0].render($('#id-dlg-h-superscript')) ;
+ this.btnSuperscript[0].on('click', _.bind(this.onSuperscriptClick, this));
+ this.headerControls.push(this.btnSuperscript[0]);
+
+ this.btnSuperscript.push(new Common.UI.Button({
+ cls: 'btn-toolbar',
+ iconCls: 'btn-superscript',
+ enableToggle: true,
+ toggleGroup: 'superscriptHFGroup',
+ hint: this.textSuperscript
+ }));
+ this.btnSuperscript[1].render($('#id-dlg-f-superscript')) ;
+ this.btnSuperscript[1].on('click', _.bind(this.onSuperscriptClick, this));
+ this.footerControls.push(this.btnSuperscript[1]);
+
+ this.btnSubscript = [];
+ this.btnSubscript.push(new Common.UI.Button({
+ cls: 'btn-toolbar',
+ iconCls: 'btn-subscript',
+ enableToggle: true,
+ toggleGroup: 'superscriptHFGroup',
+ hint: this.textSubscript
+ }));
+ this.btnSubscript[0].render($('#id-dlg-h-subscript')) ;
+ this.btnSubscript[0].on('click', _.bind(this.onSubscriptClick, this));
+ this.headerControls.push(this.btnSubscript[0]);
+
+ this.btnSubscript.push(new Common.UI.Button({
+ cls: 'btn-toolbar',
+ iconCls: 'btn-subscript',
+ enableToggle: true,
+ toggleGroup: 'superscriptHFGroup',
+ hint: this.textSubscript
+ }));
+ this.btnSubscript[1].render($('#id-dlg-f-subscript')) ;
+ this.btnSubscript[1].on('click', _.bind(this.onSubscriptClick, this));
+ this.footerControls.push(this.btnSubscript[1]);
+
+ var initNewColor = function(btn, picker_el) {
+ if (btn && btn.cmpEl) {
+ btn.currentColor = '#000000';
+ var colorVal = $('
');
+ $('button:first-child', btn.cmpEl).append(colorVal);
+ colorVal.css('background-color', btn.currentColor);
+ var picker = new Common.UI.ThemeColorPalette({
+ el: $(picker_el)
+ });
+ picker.currentColor = btn.currentColor;
+ }
+ btn.menu.cmpEl.on('click', picker_el+'-new', _.bind(function() {
+ picker.addNewColor((typeof(btn.color) == 'object') ? btn.color.color : btn.color);
+ }, me));
+ picker.on('select', _.bind(me.onColorSelect, me, btn));
+ return picker;
+ };
+ this.btnTextColor = [];
+ this.btnTextColor.push(new Common.UI.Button({
+ cls : 'btn-toolbar',
+ iconCls : 'btn-fontcolor',
+ hint : this.textColor,
+ split : true,
+ menu : new Common.UI.Menu({
+ items: [
+ { template: _.template('') },
+ { template: _.template('') }
+ ]
+ })
+ }));
+ this.btnTextColor[0].render($('#id-dlg-h-textcolor'));
+ this.btnTextColor[0].on('click', _.bind(this.onTextColor, this));
+ this.mnuTextColorPicker = [];
+ this.mnuTextColorPicker.push(initNewColor(this.btnTextColor[0], "#id-dlg-h-menu-fontcolor"));
+ this.headerControls.push(this.btnTextColor[0]);
+
+ this.btnTextColor.push(new Common.UI.Button({
+ cls : 'btn-toolbar',
+ iconCls : 'btn-fontcolor',
+ hint : this.textColor,
+ split : true,
+ menu : new Common.UI.Menu({
+ items: [
+ { template: _.template('') },
+ { template: _.template('') }
+ ]
+ })
+ }));
+ this.btnTextColor[1].render($('#id-dlg-f-textcolor'));
+ this.btnTextColor[1].on('click', _.bind(this.onTextColor, this));
+ this.mnuTextColorPicker.push(initNewColor(this.btnTextColor[1], "#id-dlg-f-menu-fontcolor"));
+ this.footerControls.push(this.btnTextColor[1]);
+
+ this.btnOk = new Common.UI.Button({
+ el: $window.find('.primary')
+ });
+
+ $window.find('.dlg-btn').on('click', _.bind(this.onBtnClick, this));
+
+ this.scrollers = [];
+ this.initCanvas('#header-left-img');
+ this.initCanvas('#header-center-img');
+ this.initCanvas('#header-right-img');
+ this.initCanvas('#footer-left-img');
+ this.initCanvas('#footer-center-img');
+ this.initCanvas('#footer-right-img');
+
+ this.wrapEvents = {
+ onApiEditorSelectionChanged: _.bind(this.onApiEditorSelectionChanged, this),
+ onApiResizeEditorHeight: _.bind(this.onApiResizeEditorHeight, this),
+ onUpdateEditorCursorPosition: _.bind(this.onUpdateEditorCursorPosition, this)
+ };
+
+ this.afterRender();
+ },
+
+ initCanvas: function(name) {
+ var el = this.$window.find(name);
+ el.on('click', _.bind(this.onCanvasClick, this, name));
+ this.canvasBoxHeight = el.height();
+ this.scrollers[name] = new Common.UI.Scroller({
+ el: el.parent(),
+ minScrollbarLength : 20
+ });
+ this.scrollers[name].update();
+ this.scrollers[name].scrollTop(0);
+ },
+
+ show: function() {
+ Common.UI.Window.prototype.show.apply(this, arguments);
+ var me = this;
+ _.delay(function(){
+ me.onCanvasClick('#header-left-img');
+ },500);
+ },
+
+ close: function() {
+ this.api.asc_unregisterCallback('asc_onEditorSelectionChanged', this.wrapEvents.onApiEditorSelectionChanged);
+ this.api.asc_unregisterCallback('asc_resizeEditorHeight', this.wrapEvents.onApiResizeEditorHeight);
+ this.api.asc_unregisterCallback('asc_updateEditorCursorPosition', this.wrapEvents.onUpdateEditorCursorPosition);
+
+ Common.UI.Window.prototype.close.apply(this, arguments);
+
+ if (this.HFObject)
+ this.HFObject.destroy();
+ },
+
+ afterRender: function () {
+ this.api.asc_registerCallback('asc_onEditorSelectionChanged', this.wrapEvents.onApiEditorSelectionChanged);
+ this.api.asc_registerCallback('asc_resizeEditorHeight', this.wrapEvents.onApiResizeEditorHeight);
+ this.api.asc_registerCallback('asc_updateEditorCursorPosition', this.wrapEvents.onUpdateEditorCursorPosition);
+
+ this.cmbFonts[0].fillFonts(this.fontStore);
+ this.cmbFonts[0].selectRecord(this.fontStore.findWhere({name: this._state.fontname}) || this.fontStore.at(0));
+ this.cmbFonts[1].fillFonts(this.fontStore);
+ this.cmbFonts[1].selectRecord(this.fontStore.findWhere({name: this._state.fontname}) || this.fontStore.at(0));
+ this.updateThemeColors();
+
+ this.HFObject = new AscCommonExcel.CHeaderFooterEditor(['header-left-img', 'header-center-img', 'header-right-img', 'footer-left-img', 'footer-center-img', 'footer-right-img'], 205);
+ this._setDefaults(this.props);
+ this.editorCanvas = this.$window.find('#ce-canvas-menu');
+ },
+
+ _setDefaults: function (props) {
+ var presets = [];
+ this.HFObject.getTextPresetsArr().forEach(function(item, index){
+ presets.push({displayValue: item, value: index});
+ });
+ this.cmbPresetsH.setData(presets);
+ this.cmbPresetsH.setValue(this.textPresets);
+ this.cmbPresetsF.setData(presets);
+ this.cmbPresetsF.setValue(this.textPresets);
+
+ this.chOddPage.setValue(this.HFObject.getDifferentOddEven());
+ this.chFirstPage.setValue(this.HFObject.getDifferentFirst());
+ this.chAlign.setValue(this.HFObject.getAlignWithMargins());
+ this.chScale.setValue(this.HFObject.getScaleWithDoc());
+
+ var value = (this.chOddPage.getValue() == 'checked');
+ this.btnOdd.setVisible(value);
+ this.btnEven.setVisible(value);
+ this.btnAll.setVisible(!value);
+ value ? this.btnOdd.toggle(true) : this.btnAll.toggle(true);
+
+ value = (this.chFirstPage.getValue() == 'checked');
+ this.btnFirst.setVisible(value);
+ },
+
+ updateThemeColors: function() {
+ this.mnuTextColorPicker[0].updateColors(Common.Utils.ThemeColor.getEffectColors(), Common.Utils.ThemeColor.getStandartColors());
+ this.mnuTextColorPicker[1].updateColors(Common.Utils.ThemeColor.getEffectColors(), Common.Utils.ThemeColor.getStandartColors());
+ },
+
+ getSettings: function () {
+ var props = {};
+ return props;
+ },
+
+ onBtnClick: function(event) {
+ this._handleInput(event.currentTarget.attributes['result'].value);
+ },
+
+ onPrimary: function(event) {
+ this._handleInput('ok');
+ return false;
+ },
+
+ _handleInput: function(state) {
+ if (this.options.handler) {
+ this.options.handler.call(this, this, state);
+ }
+ if (this.HFObject) {
+ this.HFObject.destroy(state=='ok');
+ this.HFObject = null;
+ }
+ this.close();
+ },
+
+ scrollerUpdate: function() {
+ for (var name in this.scrollers) {
+ this.scrollers[name] && this.scrollers[name].update();
+ }
+ },
+
+ scrollerScrollTop: function() {
+ for (var name in this.scrollers) {
+ this.scrollers[name] && this.scrollers[name].scrollTop(0);
+ }
+ },
+
+ onCanvasClick: function(id, event){
+ if (!this.HFObject) return;
+ id = id || '#header-left-img';
+ var diff = (this.currentCanvas !== id);
+ if (diff) {
+ this.currentCanvas = id;
+ this.isFooter = (id == '#footer-left-img' || id == '#footer-center-img' || id == '#footer-right-img');
+
+ var me = this;
+ this.headerControls.forEach(function(item){
+ item.setDisabled(me.isFooter);
+ });
+ this.footerControls.forEach(function(item){
+ item.setDisabled(!me.isFooter);
+ });
+ }
+
+ if (event) {
+ var parent = $(event.currentTarget).parent(),
+ offset = parent.offset();
+ this.HFObject.click(id, event.pageX*Common.Utils.zoom() - offset.left, event.pageY*Common.Utils.zoom() - offset.top + parent.scrollTop());
+ } else
+ this.HFObject.click(id);
+
+ diff && this.scrollerUpdate();
+ },
+
+ onApiResizeEditorHeight: function(event) {
+ if (!this.editorCanvas) return;
+ var height = this.editorCanvas.height();
+ if (height == this.editorCanvasHeight) return;
+ this.editorCanvasHeight = height;
+
+ if (this.scrollers[this.currentCanvas])
+ this.scrollers[this.currentCanvas].update();
+ },
+
+ onUpdateEditorCursorPosition: function(pos, height) {
+ if (!this.editorCanvas) return;
+ var id = this.currentCanvas;
+ if (this.scrollers[id]) {
+ var top = this.scrollers[id].getScrollTop();
+ if (pos + height>top+this.canvasBoxHeight)
+ this.scrollers[id].scrollTop(pos + height - this.canvasBoxHeight);
+ else if (pos