From df9b7cf276e2f2f82419cc7c688b5a7433a5b57f Mon Sep 17 00:00:00 2001 From: Julia Svinareva Date: Fri, 4 Oct 2019 11:14:09 +0300 Subject: [PATCH] [DE] Fix add caption label --- .../main/app/view/AddNewCaptionLabelDialog.js | 127 ++++++++++++++++++ .../main/app/view/CaptionDialog.js | 54 ++++---- apps/documenteditor/main/locale/en.json | 5 +- 3 files changed, 155 insertions(+), 31 deletions(-) create mode 100644 apps/documenteditor/main/app/view/AddNewCaptionLabelDialog.js diff --git a/apps/documenteditor/main/app/view/AddNewCaptionLabelDialog.js b/apps/documenteditor/main/app/view/AddNewCaptionLabelDialog.js new file mode 100644 index 000000000..76f9b774f --- /dev/null +++ b/apps/documenteditor/main/app/view/AddNewCaptionLabelDialog.js @@ -0,0 +1,127 @@ +/* + * + * (c) Copyright Ascensio System SIA 2010-2019 + * + * 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-12 Ernesta Birznieka-Upisha + * 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 + * +*/ +/** + * AddNewCaptionLabelDialog.js + * + * Created by Julia Svinareva on 03/10/19 + * Copyright (c) 2019 Ascensio System SIA. All rights reserved. + * + */ + +define([ + 'common/main/lib/component/Window', + 'common/main/lib/component/InputField' +], function () { 'use strict'; + + Common.Views.AddNewCaptionLabelDialog = Common.UI.Window.extend(_.extend({ + options: { + width: 330, + header: false, + cls: 'modal-dlg', + buttons: ['ok', 'cancel'], + footerCls: 'center' + }, + + initialize : function(options) { + _.extend(this.options, options || {}); + + this.template = [ + '
', + '
', + '', + '
', + '
', + '
' + ].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; + me.inputLabel = new Common.UI.InputField({ + el : $('#id-dlg-label-caption'), + allowBlank : false, + blankError : me.textLabelError, + style : 'width: 100%;', + validateOnBlur: false, + validation : function(value) { + return value ? true : ''; + } + }); + + var $window = this.getChild(); + $window.find('.btn').on('click', _.bind(this.onBtnClick, this)); + }, + + show: function() { + Common.UI.Window.prototype.show.apply(this, arguments); + + var me = this; + _.delay(function(){ + me.getChild('input').focus(); + },500); + }, + + onPrimary: function(event) { + this._handleInput('ok'); + return false; + }, + + onBtnClick: function(event) { + this._handleInput(event.currentTarget.attributes['result'].value); + }, + + _handleInput: function(state) { + if (this.options.handler) { + if (state == 'ok') { + if (this.inputLabel.checkValidate() !== true) { + this.inputLabel.cmpEl.find('input').focus(); + return; + } + } + + this.options.handler.call(this, state, this.inputLabel.getValue()); + } + + this.close(); + }, + + textLabel: 'Label:', + textLabelError: 'Label must not be empty.' + }, Common.Views.AddNewCaptionLabelDialog || {})); +}); \ No newline at end of file diff --git a/apps/documenteditor/main/app/view/CaptionDialog.js b/apps/documenteditor/main/app/view/CaptionDialog.js index bfd3817e3..28a32cfb1 100644 --- a/apps/documenteditor/main/app/view/CaptionDialog.js +++ b/apps/documenteditor/main/app/view/CaptionDialog.js @@ -42,7 +42,8 @@ define([ 'common/main/lib/util/utils', 'common/main/lib/component/MetricSpinner', 'common/main/lib/component/ComboBox', - 'common/main/lib/view/AdvancedSettingsWindow' + 'common/main/lib/view/AdvancedSettingsWindow', + 'documenteditor/main/app/view/AddNewCaptionLabelDialog' ], function () { 'use strict'; DE.Views.CaptionDialog = Common.Views.AdvancedSettingsWindow.extend(_.extend({ @@ -178,7 +179,7 @@ define([ el: $('#caption-combo-label'), cls: 'input-group-nr', menuStyle: 'min-width: 160px;max-height:155px;', - editable: true, + editable: false, data: this.arrLabel, alwaysVisibleY: true }); @@ -187,18 +188,11 @@ define([ me.props.put_Label(value); me.props.updateName(); me.txtCaption.setValue(me.props.get_Name()); - var custom = (record.type==1), - find = _.findWhere(me.arrLabel, {value: value}) ? true : false; - me.btnAdd.setDisabled(find); + var custom = (record.type==1); me.btnDelete.setDisabled(!custom); me.currentLabel = value; me.positionCaption = me.txtCaption.getValue().length; }); - this.cmbLabel.$el.find('input').on('keyup', _.bind(function() { - var value = this.cmbLabel.getRawValue(), - disabled = _.findWhere(this.arrLabel, {value: value}) ? true : false; - this.btnAdd.setDisabled(disabled); - }, this)); var curLabel = Common.Utils.InternalSettings.get("de-settings-current-label"), recLabel, findIndLabel; @@ -215,25 +209,28 @@ define([ this.cmbLabel.selectRecord(recLabel); this.btnAdd = new Common.UI.Button({ - el: $('#caption-btn-add'), - disabled: true + el: $('#caption-btn-add') }); this.btnAdd.on('click', _.bind(function (e) { - var value = this.cmbLabel.getRawValue(); - if (!value) { - Common.UI.error({ - msg : this.textLabelError - }); - this.cmbLabel.setValue(this.currentLabel); - this.btnAdd.setDisabled(true); - } else { - var rec = { displayValue: value, value: value, type: 1 }; - this.arrLabel.unshift(rec); - this.cmbLabel.setData(this.arrLabel); - this.cmbLabel.setValue(value); - this.cmbLabel.trigger('selected', this.cmbLabel, rec); - this.cmbLabel.scroller.update({alwaysVisibleY: true}); - } + var me = this; + (new Common.Views.AddNewCaptionLabelDialog({ + handler: function(result, value) { + if (result == 'ok') { + var rec = _.findWhere(me.arrLabel, {value: value}); + if (rec) { + me.cmbLabel.setValue(value); + me.cmbLabel.trigger('selected', me.cmbLabel, rec); + } else { + var rec = {displayValue: value, value: value, type: 1}; + me.arrLabel.unshift(rec); + me.cmbLabel.setData(me.arrLabel); + me.cmbLabel.setValue(value); + me.cmbLabel.trigger('selected', me.cmbLabel, rec); + me.cmbLabel.scroller.update({alwaysVisibleY: true}); + } + } + } + })).show(); }, this)); this.btnDelete = new Common.UI.Button({ @@ -454,8 +451,7 @@ define([ textEquation: 'Equation', textFigure: 'Figure', textTable: 'Table', - textExclude: 'Exclude label from caption', - textLabelError: 'Label must not be empty.' + textExclude: 'Exclude label from caption' }, DE.Views.CaptionDialog || {})) }); \ No newline at end of file diff --git a/apps/documenteditor/main/locale/en.json b/apps/documenteditor/main/locale/en.json index 5c7b05055..1b062f3e5 100644 --- a/apps/documenteditor/main/locale/en.json +++ b/apps/documenteditor/main/locale/en.json @@ -1025,7 +1025,6 @@ "DE.Views.CaptionDialog.textFigure": "Figure", "DE.Views.CaptionDialog.textTable": "Table", "DE.Views.CaptionDialog.textExclude": "Exclude label from caption", - "DE.Views.CaptionDialog.textLabelError": "Label must not be empty.", "DE.Views.CellsAddDialog.textCol": "Columns", "DE.Views.CellsAddDialog.textDown": "Below the cursor", "DE.Views.CellsAddDialog.textLeft": "To the left", @@ -2256,5 +2255,7 @@ "DE.Views.WatermarkSettingsDialog.textTransparency": "Semitransparent", "DE.Views.WatermarkSettingsDialog.textUnderline": "Underline", "DE.Views.WatermarkSettingsDialog.tipFontName": "Font Name", - "DE.Views.WatermarkSettingsDialog.tipFontSize": "Font Size" + "DE.Views.WatermarkSettingsDialog.tipFontSize": "Font Size", + "DE.Views.AddNewCaptionLabelDialog.textLabel": "Label:", + "DE.Views.AddNewCaptionLabelDialog.textLabelError": "Label must not be empty." } \ No newline at end of file