diff --git a/apps/documenteditor/main/app/controller/Main.js b/apps/documenteditor/main/app/controller/Main.js index f416bc4e1..7091d3f5f 100644 --- a/apps/documenteditor/main/app/controller/Main.js +++ b/apps/documenteditor/main/app/controller/Main.js @@ -130,27 +130,38 @@ define([ var styleNames = ['Normal', 'No Spacing', 'Heading 1', 'Heading 2', 'Heading 3', 'Heading 4', 'Heading 5', 'Heading 6', 'Heading 7', 'Heading 8', 'Heading 9', 'Title', 'Subtitle', 'Quote', 'Intense Quote', 'List Paragraph', 'footnote text'], - translate = { - 'Series': this.txtSeries, - 'Diagram Title': this.txtDiagramTitle, - 'X Axis': this.txtXAxis, - 'Y Axis': this.txtYAxis, - 'Your text here': this.txtArt, - "Error! Bookmark not defined.": this.txtBookmarkError, - "above": this.txtAbove, - "below": this.txtBelow, - "on page ": this.txtOnPage, - "Header": this.txtHeader, - "Footer": this.txtFooter, - " -Section ": this.txtSection, - "First Page ": this.txtFirstPage, - "Even Page ": this.txtEvenPage, - "Odd Page ": this.txtOddPage, - "Same as Previous": this.txtSameAsPrev, - "Current Document": this.txtCurrentDocument, - "No table of contents entries found.": this.txtNoTableOfContents, - "Table of Contents": this.txtTableOfContents - }; + translate = { + 'Series': this.txtSeries, + 'Diagram Title': this.txtDiagramTitle, + 'X Axis': this.txtXAxis, + 'Y Axis': this.txtYAxis, + 'Your text here': this.txtArt, + "Error! Bookmark not defined.": this.txtBookmarkError, + "above": this.txtAbove, + "below": this.txtBelow, + "on page ": this.txtOnPage, + "Header": this.txtHeader, + "Footer": this.txtFooter, + " -Section ": this.txtSection, + "First Page ": this.txtFirstPage, + "Even Page ": this.txtEvenPage, + "Odd Page ": this.txtOddPage, + "Same as Previous": this.txtSameAsPrev, + "Current Document": this.txtCurrentDocument, + "No table of contents entries found.": this.txtNoTableOfContents, + "Table of Contents": this.txtTableOfContents, + "Syntax Error": this.txtSyntaxError, + "Missing Operator": this.txtMissOperator, + "Missing Argument": this.txtMissArg, + "Number Too Large To Format": this.txtTooLarge, + "Zero Divide": this.txtZeroDivide, + "Is Not In Table": this.txtNotInTable, + "Index Too Large": this.txtIndTooLarge, + "The Formula Not In Table": this.txtFormulaNotInTable, + "Table Index Cannot be Zero": this.txtTableInd, + "Undefined Bookmark": this.txtUndefBookmark, + "Unexpected End of Formula": this.txtEndOfFormula + }; styleNames.forEach(function(item){ translate[item] = me.translationTable[item] = me['txtStyle_' + item.replace(/ /g, '_')] || item; }); @@ -2530,6 +2541,17 @@ define([ txtShape_spline: 'Curve', txtShape_polyline1: 'Scribble', txtShape_polyline2: 'Freeform', + txtSyntaxError: 'Syntax Error', + txtMissOperator: 'Missing Operator', + txtMissArg: 'Missing Argument', + txtTooLarge: 'Number Too Large To Format', + txtZeroDivide: 'Zero Divide', + txtNotInTable: 'Is Not In Table', + txtIndTooLarge: 'Index Too Large', + txtFormulaNotInTable: 'The Formula Not In Table', + txtTableInd: 'Table Index Cannot be Zero', + txtUndefBookmark: 'Undefined Bookmark', + txtEndOfFormula: 'Unexpected End of Formula', errorEmailClient: 'No email client could be found' } })(), DE.Controllers.Main || {})) diff --git a/apps/documenteditor/main/app/template/TableSettings.template b/apps/documenteditor/main/app/template/TableSettings.template index 19e649186..c840cf208 100644 --- a/apps/documenteditor/main/app/template/TableSettings.template +++ b/apps/documenteditor/main/app/template/TableSettings.template @@ -137,6 +137,16 @@
+ + + + + + + +
+ +
diff --git a/apps/documenteditor/main/app/view/TableFormulaDialog.js b/apps/documenteditor/main/app/view/TableFormulaDialog.js new file mode 100644 index 000000000..3fbce2ae2 --- /dev/null +++ b/apps/documenteditor/main/app/view/TableFormulaDialog.js @@ -0,0 +1,247 @@ +/* + * + * (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 + * + */ +/** + * TableFormulaDialog.js + * + * Created by Julia Radzhabova on 1/21/19 + * Copyright (c) 2019 Ascensio System SIA. All rights reserved. + * + */ + +define([ + 'common/main/lib/component/InputField', + 'common/main/lib/component/Window' +], function () { 'use strict'; + + DE.Views.TableFormulaDialog = Common.UI.Window.extend(_.extend({ + options: { + width: 300, + style: 'min-width: 230px;', + cls: 'modal-dlg' + }, + + initialize : function(options) { + _.extend(this.options, { + title: this.textTitle + }, options || {}); + + this.template = [ + '
', + '
', + '', + '
', + '
', + '
', + '', + '
', + '
', + '
', + '
', + '
', + '
', + '
', + '' + ].join(''); + + this.options.tpl = _.template(this.template)(this.options); + this.bookmarks = this.options.bookmarks; + this.api = this.options.api; + + 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.inputFormula = new Common.UI.InputField({ + el : $('#id-dlg-formula-formula'), + allowBlank : true, + validateOnChange: true, + style : 'width: 100%;' + }).on('changing', _.bind(this.checkFormulaInput, this)); + + this.cmbFormat = new Common.UI.ComboBox({ + el : $('#id-dlg-formula-format'), + cls : 'input-group-nr', + menuStyle : 'min-width: 100%; max-height: 200px;' + }); + + this.cmbFunction = new Common.UI.ComboBox({ + el : $('#id-dlg-formula-function'), + cls : 'input-group-nr', + menuStyle : 'min-width: 100%; max-height: 150px;', + editable : false, + scrollAlwaysVisible: true, + data: [ + {displayValue: 'ABS', value: 1}, + {displayValue: 'AND', value: 1}, + {displayValue: 'AVERAGE', value: 1}, + {displayValue: 'COUNT', value: 1}, + {displayValue: 'DEFINED', value: 1}, + {displayValue: 'FALSE', value: 0}, + {displayValue: 'INT', value: 1}, + {displayValue: 'MAX', value: 1}, + {displayValue: 'MIN', value: 1}, + {displayValue: 'MOD', value: 1}, + {displayValue: 'NOT', value: 1}, + {displayValue: 'OR', value: 1}, + {displayValue: 'PRODUCT', value: 1}, + {displayValue: 'ROUND', value: 1}, + {displayValue: 'SIGN', value: 1}, + {displayValue: 'SUM', value: 1}, + {displayValue: 'TRUE', value: 0} + ] + }); + this.cmbFunction.on('selected', _.bind(function(combo, record) { + combo.setValue(this.textInsertFunction); + var _input = me.inputFormula._input, + end = _input[0].selectionEnd; + _input.val(_input.val().substring(0, end) + record.displayValue + (record.value ? '()' : '') + _input.val().substring(end)); + _input.focus(); + _input[0].selectionStart = _input[0].selectionEnd = end + record.displayValue.length + record.value; + this.btnOk.setDisabled(false); + }, this)); + this.cmbFunction.setValue(this.textInsertFunction); + + this.cmbBookmark = new Common.UI.ComboBox({ + el : $('#id-dlg-formula-bookmark'), + cls : 'input-group-nr', + menuStyle : 'min-width: 100%; max-heigh: 150px;', + editable : false + }); + this.cmbBookmark.on('selected', _.bind(function(combo, record) { + combo.setValue(this.textBookmark); + var _input = me.inputFormula._input, + end = _input[0].selectionEnd; + _input.val(_input.val().substring(0, end) + record.displayValue + _input.val().substring(end)); + _input.focus(); + _input[0].selectionStart = _input[0].selectionEnd = end + record.displayValue.length; + this.btnOk.setDisabled(false); + }, this)); + this.cmbBookmark.setValue(this.textBookmark); + + me.btnOk = new Common.UI.Button({ + el: $window.find('.primary') + }); + + $window.find('.dlg-btn').on('click', _.bind(this.onBtnClick, this)); + this.afterRender(); + }, + + onSelectItem: function(picker, item, record, e){ + this.btnOk.setDisabled(record.get('level')==0 && record.get('index')>0); + }, + + show: function() { + Common.UI.Window.prototype.show.apply(this, arguments); + + var me = this; + _.delay(function(){ + me.inputFormula.cmpEl.find('input').focus(); + },500); + }, + + afterRender: function() { + this.refreshBookmarks(); + this._setDefaults(); + }, + + _setDefaults: function () { + var arr = []; + _.each(this.api.asc_GetTableFormulaFormats(), function(item) { + arr.push({value: item, displayValue: item}); + }); + this.cmbFormat.setData(arr); + var formula = this.api.asc_ParseTableFormulaInstrLine(this.api.asc_GetTableFormula()); + this.inputFormula.setValue(formula[0]); + this.cmbFormat.setValue(formula[1]); + this.checkFormulaInput(this.inputFormula, this.inputFormula.getValue()); + }, + + refreshBookmarks: function() { + var arr = []; + if (this.bookmarks) { + var count = this.bookmarks.asc_GetCount(); + for (var i=0; iIf you need more please consider purchasing a commercial license.", "DE.Controllers.Main.warnNoLicenseUsers": "This version of ONLYOFFICE Editors has certain limitations for concurrent users.
If you need more please consider purchasing a commercial license.", "DE.Controllers.Main.warnProcessRightsChange": "You have been denied the right to edit the file.", + "DE.Controllers.Main.txtSyntaxError": "Syntax Error", + "DE.Controllers.Main.txtMissOperator": "Missing Operator", + "DE.Controllers.Main.txtMissArg": "Missing Argument", + "DE.Controllers.Main.txtTooLarge": "Number Too Large To Format", + "DE.Controllers.Main.txtZeroDivide": "Zero Divide", + "DE.Controllers.Main.txtNotInTable": "Is Not In Table", + "DE.Controllers.Main.txtIndTooLarge": "Index Too Large", + "DE.Controllers.Main.txtFormulaNotInTable": "The Formula Not In Table", + "DE.Controllers.Main.txtTableInd": "Table Index Cannot be Zero", + "DE.Controllers.Main.txtUndefBookmark": "Undefined Bookmark", + "DE.Controllers.Main.txtEndOfFormula": "Unexpected End of Formula", "DE.Controllers.Navigation.txtBeginning": "Beginning of document", "DE.Controllers.Navigation.txtGotoBeginning": "Go to the beginning of the document", "DE.Controllers.Statusbar.textHasChanges": "New changes have been tracked", @@ -1862,6 +1873,7 @@ "DE.Views.TableSettings.splitCellsText": "Split Cell...", "DE.Views.TableSettings.splitCellTitleText": "Split Cell", "DE.Views.TableSettings.strRepeatRow": "Repeat as header row at the top of each page", + "DE.Views.TableSettings.textAddFormula": "Add formula", "DE.Views.TableSettings.textAdvanced": "Show advanced settings", "DE.Views.TableSettings.textBackColor": "Background Color", "DE.Views.TableSettings.textBanded": "Banded",