From c394393bba312bb17a19c61b54fedc4c0dc75d3c Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 10 Apr 2020 17:50:58 +0300 Subject: [PATCH 01/92] [SSE] Insert slicers. Bug 30397 --- .../main/app/controller/Toolbar.js | 20 +- .../main/app/template/Toolbar.template | 4 + .../main/app/view/RemoveDuplicatesDialog.js | 2 +- .../main/app/view/SlicerAddDialog.js | 234 ++++++++++++++++++ .../main/app/view/Toolbar.js | 16 +- 5 files changed, 272 insertions(+), 4 deletions(-) create mode 100644 apps/spreadsheeteditor/main/app/view/SlicerAddDialog.js diff --git a/apps/spreadsheeteditor/main/app/controller/Toolbar.js b/apps/spreadsheeteditor/main/app/controller/Toolbar.js index 08cd523a2..dcc156ee5 100644 --- a/apps/spreadsheeteditor/main/app/controller/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/controller/Toolbar.js @@ -58,7 +58,8 @@ define([ 'spreadsheeteditor/main/app/view/PageMarginsDialog', 'spreadsheeteditor/main/app/view/HeaderFooterDialog', 'spreadsheeteditor/main/app/view/PrintTitlesDialog', - 'spreadsheeteditor/main/app/view/ScaleDialog' + 'spreadsheeteditor/main/app/view/ScaleDialog', + 'spreadsheeteditor/main/app/view/SlicerAddDialog' ], function () { 'use strict'; SSE.Controllers.Toolbar = Backbone.Controller.extend(_.extend({ @@ -328,6 +329,7 @@ define([ toolbar.btnInsertShape.menu.on('hide:after', _.bind(this.onInsertShapeHide, this)); toolbar.btnInsertEquation.on('click', _.bind(this.onInsertEquationClick, this)); toolbar.btnInsertSymbol.on('click', _.bind(this.onInsertSymbolClick, this)); + toolbar.btnInsertSlicer.on('click', _.bind(this.onInsertSlicerClick, this)); toolbar.btnTableTemplate.menu.on('show:after', _.bind(this.onTableTplMenuOpen, this)); toolbar.btnPercentStyle.on('click', _.bind(this.onNumberFormat, this)); toolbar.btnCurrencyStyle.on('click', _.bind(this.onNumberFormat, this)); @@ -2759,6 +2761,22 @@ define([ } }, + onInsertSlicerClick: function() { + var me = this, + props = me.api.asc_beforeInsertSlicer(); + if (props) { + (new SSE.Views.SlicerAddDialog({ + props: props, + handler: function (result, settings) { + if (me && me.api) { + me.api.asc_insertSlicer(settings); + } + Common.NotificationCenter.trigger('edit:complete', me.toolbar); + } + })).show(); + } + }, + onApiMathTypes: function(equation) { this._equationTemp = equation; var me = this; diff --git a/apps/spreadsheeteditor/main/app/template/Toolbar.template b/apps/spreadsheeteditor/main/app/template/Toolbar.template index 958f2d26d..cb7050e5f 100644 --- a/apps/spreadsheeteditor/main/app/template/Toolbar.template +++ b/apps/spreadsheeteditor/main/app/template/Toolbar.template @@ -144,6 +144,10 @@ +
+
+ +
diff --git a/apps/spreadsheeteditor/main/app/view/RemoveDuplicatesDialog.js b/apps/spreadsheeteditor/main/app/view/RemoveDuplicatesDialog.js index b124eb5d7..50cde1eb9 100644 --- a/apps/spreadsheeteditor/main/app/view/RemoveDuplicatesDialog.js +++ b/apps/spreadsheeteditor/main/app/view/RemoveDuplicatesDialog.js @@ -40,7 +40,7 @@ define([ 'common/main/lib/component/Window', - 'common/main/lib/component/ComboBox', + 'common/main/lib/component/CheckBox', 'common/main/lib/component/ListView' ], function () { 'use strict'; diff --git a/apps/spreadsheeteditor/main/app/view/SlicerAddDialog.js b/apps/spreadsheeteditor/main/app/view/SlicerAddDialog.js new file mode 100644 index 000000000..912674a2a --- /dev/null +++ b/apps/spreadsheeteditor/main/app/view/SlicerAddDialog.js @@ -0,0 +1,234 @@ +/* + * + * (c) Copyright Ascensio System SIA 2010-2020 + * + * 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 + * + */ +/** + * SlicerAddDialog.js + * + * Created by Julia Radzhabova on 10.04.2020 + * Copyright (c) 2020 Ascensio System SIA. All rights reserved. + * + */ + +define([ + 'common/main/lib/component/Window', + 'common/main/lib/component/ListView' +], function () { + 'use strict'; + + SSE.Views.SlicerAddDialog = Common.UI.Window.extend(_.extend({ + options: { + width: 250, + style: 'min-width: 230px;', + cls: 'modal-dlg', + buttons: ['ok', 'cancel'] + }, + + initialize : function (options) { + var t = this, + _options = {}; + + _.extend(this.options, { + title: this.txtTitle + }, options || {}); + + this.template = [ + '
', + '
', + '', + '
', + '
', + '
' + ].join(''); + + this.options.tpl = _.template(this.template)(this.options); + this.props = this.options.props; + this.handler = this.options.handler; + + Common.UI.Window.prototype.initialize.call(this, this.options); + }, + render: function () { + Common.UI.Window.prototype.render.call(this); + + this.columnsList = new Common.UI.ListView({ + el: $('#add-slicers-dlg-columns', this.$window), + store: new Common.UI.DataViewStore(), + simpleAddMode: true, + scrollAlwaysVisible: true, + template: _.template(['
'].join('')), + itemTemplate: _.template([ + '
', + '
' + ].join('')) + }); + this.columnsList.on({ + 'item:change': this.onItemChanged.bind(this), + 'item:add': this.onItemChanged.bind(this), + 'item:select': this.onCellCheck.bind(this) + }); + this.columnsList.onKeyDown = _.bind(this.onListKeyDown, this); + + this.$window.find('.dlg-btn').on('click', _.bind(this.onBtnClick, this)); + this.afterRender(); + }, + + updateColumnsList: function(props) { + var arr = []; + if (props && props.length>0) { + this.props.forEach(function (item, index) { + arr.push(new Common.UI.DataViewModel({ + id : index, + selected : false, + allowSelected : true, + value : item, + check : false + })); + }); + + this.columnsList.store.reset(arr); + this.columnsList.scroller.update({minScrollbarLength : 40, alwaysVisibleY: true, suppressScrollX: true}); + } + }, + + onItemChanged: function (view, record) { + var state = record.model.get('check'); + if ( state == 'indeterminate' ) + $('input[type=checkbox]', record.$el).prop('indeterminate', true); + else $('input[type=checkbox]', record.$el).prop({checked: state, indeterminate: false}); + }, + + onCellCheck: function (listView, itemView, record) { + if (this.checkCellTrigerBlock) + return; + + var target = '', isLabel = false, bound = null; + + var event = window.event ? window.event : window._event; + if (event) { + target = $(event.currentTarget).find('.list-item'); + + if (target.length) { + bound = target.get(0).getBoundingClientRect(); + var _clientX = event.clientX*Common.Utils.zoom(), + _clientY = event.clientY*Common.Utils.zoom(); + if (bound.left < _clientX && _clientX < bound.right && + bound.top < _clientY && _clientY < bound.bottom) { + isLabel = true; + } + } + + if (isLabel || event.target.className.match('checkbox')) { + this.updateCellCheck(listView, record); + + _.delay(function () { + listView.$el.find('.listview').focus(); + }, 100, this); + } + } + }, + + onListKeyDown: function (e, data) { + var record = null, listView = this.columnsList; + + if (listView.disabled) return; + if (_.isUndefined(undefined)) data = e; + + if (data.keyCode == Common.UI.Keys.SPACE) { + data.preventDefault(); + data.stopPropagation(); + + this.updateCellCheck(listView, listView.getSelectedRec()); + + } else { + Common.UI.DataView.prototype.onKeyDown.call(this.columnsList, e, data); + } + }, + + updateCellCheck: function (listView, record) { + if (record && listView) { + record.set('check', !record.get('check')); + // listView.scroller.update({minScrollbarLength : 40, alwaysVisibleY: true, suppressScrollX: true}); + } + }, + + afterRender: function() { + this._setDefaults(this.props); + }, + + _setDefaults: function (props) { + if (props) { + this.updateColumnsList(props); + } + }, + + getSettings: function () { + var store = this.columnsList.store, + props = []; + store.each(function(item, index) { + item.get('check') && (props.push(item.get('value'))); + }); + return props; + }, + + onBtnClick: function(event) { + this._handleInput(event.currentTarget.attributes['result'].value); + }, + + onDblClickFormat: function () { + this._handleInput('ok'); + }, + + onPrimary: function(event) { + this._handleInput('ok'); + return false; + }, + + _handleInput: function(state) { + if (this.options.handler) { + this.options.handler.call(this, state, (state == 'ok') ? this.getSettings() : this.props); + } + + this.close(); + }, + + // + txtTitle: 'Insert Slicers', + textColumns: 'Columns' + + }, SSE.Views.SlicerAddDialog || {})); +}); \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/app/view/Toolbar.js b/apps/spreadsheeteditor/main/app/view/Toolbar.js index eccc8ae5d..44d7dd9af 100644 --- a/apps/spreadsheeteditor/main/app/view/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/view/Toolbar.js @@ -730,6 +730,14 @@ define([ lock: [_set.selImage, _set.selChart, _set.selShape, _set.editFormula, _set.selRangeEdit, _set.coAuth, _set.coAuthText, _set.lostConnect] }); + me.btnInsertSlicer = new Common.UI.Button({ + id: 'tlbtn-insertslicer', + cls: 'btn-toolbar x-huge icon-top', + iconCls: 'toolbar__icon btn-symbol', + caption: me.capBtnInsSlicer, + lock: [_set.editCell, _set.selChart, _set.selChartText, _set.selShape, _set.selShapeText, _set.selImage, _set.lostConnect, _set.coAuth, _set.multiselect] + }); + me.btnTableTemplate = new Common.UI.Button({ id : 'id-toolbar-btn-ttempl', cls : 'btn-toolbar', @@ -1394,7 +1402,7 @@ define([ me.btnItalic, me.btnUnderline, me.btnStrikeout, me.btnSubscript, me.btnTextColor, me.btnAlignLeft, me.btnAlignCenter,me.btnAlignRight,me.btnAlignJust, me.btnAlignTop, me.btnAlignMiddle, me.btnAlignBottom, me.btnWrap, me.btnTextOrient, me.btnBackColor, me.btnInsertTable, - me.btnMerge, me.btnInsertFormula, me.btnNamedRange, me.btnIncDecimal, me.btnInsertShape, me.btnInsertEquation, me.btnInsertSymbol, + me.btnMerge, me.btnInsertFormula, me.btnNamedRange, me.btnIncDecimal, me.btnInsertShape, me.btnInsertEquation, me.btnInsertSymbol, me.btnInsertSlicer, me.btnInsertText, me.btnInsertTextArt, me.btnSortUp, me.btnSortDown, me.btnSetAutofilter, me.btnClearAutofilter, me.btnTableTemplate, me.btnPercentStyle, me.btnCurrencyStyle, me.btnDecDecimal, me.btnAddCell, me.btnDeleteCell, me.cmbNumberFormat, me.btnBorders, me.btnInsertImage, me.btnInsertHyperlink, @@ -1571,6 +1579,7 @@ define([ _injectComponent('#slot-btn-instextart', this.btnInsertTextArt); _injectComponent('#slot-btn-insequation', this.btnInsertEquation); _injectComponent('#slot-btn-inssymbol', this.btnInsertSymbol); + _injectComponent('#slot-btn-insslicer', this.btnInsertSlicer); _injectComponent('#slot-btn-sortdesc', this.btnSortDown); _injectComponent('#slot-btn-sortasc', this.btnSortUp); _injectComponent('#slot-btn-setfilter', this.btnSetAutofilter); @@ -1652,6 +1661,7 @@ define([ _updateHint(this.btnInsertShape, this.tipInsertShape); _updateHint(this.btnInsertEquation, this.tipInsertEquation); _updateHint(this.btnInsertSymbol, this.tipInsertSymbol); + _updateHint(this.btnInsertSlicer, this.tipInsertSlicer); _updateHint(this.btnSortDown, this.txtSortAZ); _updateHint(this.btnSortUp, this.txtSortZA); _updateHint(this.btnSetAutofilter, this.txtFilter + ' (Ctrl+Shift+L)'); @@ -2393,6 +2403,8 @@ define([ tipInsertSymbol: 'Insert symbol', txtAutosumTip: 'Summation', capBtnPrintTitles: 'Print Titles', - tipPrintTitles: 'Print titles' + tipPrintTitles: 'Print titles', + capBtnInsSlicer: 'Slicer', + tipInsertSlicer: 'Insert slicer' }, SSE.Views.Toolbar || {})); }); \ No newline at end of file From 30c42cf26e4fb9c1a97e7fcbe875a10e94e30819 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 14 Apr 2020 14:58:40 +0300 Subject: [PATCH 02/92] [SSE] Add slicer settings --- .../main/app/template/SlicerSettings.template | 76 ++++ .../main/app/view/SlicerSettings.js | 372 ++++++++++++++++++ 2 files changed, 448 insertions(+) create mode 100644 apps/spreadsheeteditor/main/app/template/SlicerSettings.template create mode 100644 apps/spreadsheeteditor/main/app/view/SlicerSettings.js diff --git a/apps/spreadsheeteditor/main/app/template/SlicerSettings.template b/apps/spreadsheeteditor/main/app/template/SlicerSettings.template new file mode 100644 index 000000000..0f8b55c6d --- /dev/null +++ b/apps/spreadsheeteditor/main/app/template/SlicerSettings.template @@ -0,0 +1,76 @@ +
+
+
+
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + +
+
+ + +
+
+ +
+
+
+
\ No newline at end of file diff --git a/apps/spreadsheeteditor/main/app/view/SlicerSettings.js b/apps/spreadsheeteditor/main/app/view/SlicerSettings.js new file mode 100644 index 000000000..76717d835 --- /dev/null +++ b/apps/spreadsheeteditor/main/app/view/SlicerSettings.js @@ -0,0 +1,372 @@ +/* + * + * (c) Copyright Ascensio System SIA 2010-2020 + * + * 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 + * + */ +/** + * SlicerSettings.js + * + * Created by Julia Radzhabova on 14.04.2020 + * Copyright (c) 2018 Ascensio System SIA. All rights reserved. + * + */ + +define([ 'text!spreadsheeteditor/main/app/template/SlicerSettings.template', + 'common/main/lib/view/AdvancedSettingsWindow', + 'common/main/lib/component/MetricSpinner', + 'common/main/lib/component/CheckBox', + 'common/main/lib/component/RadioBox', + 'common/main/lib/component/ComboDataView' +], function (contentTemplate) { + 'use strict'; + + SSE.Views.SlicerSettings = Common.Views.AdvancedSettingsWindow.extend(_.extend({ + options: { + contentWidth: 330, + height: 435, + toggleGroup: 'slicer-adv-settings-group', + storageName: 'sse-slicer-settings-adv-category' + }, + + initialize : function(options) { + var me = this; + _.extend(this.options, { + title: this.textTitle, + items: [ + {panelId: 'id-adv-slicer-style', panelCaption: this.strStyleSize}, + {panelId: 'id-adv-slicer-sorting', panelCaption: this.strSorting}, + {panelId: 'id-adv-slicer-references', panelCaption: this.strReferences} + ], + contentTemplate: _.template(contentTemplate)({ + scope: this + }) + }, options); + Common.Views.AdvancedSettingsWindow.prototype.initialize.call(this, this.options); + + this._changedProps = null; + this._noApply = true; + this.spinners = []; + + this._originalProps = this.options.props; + }, + + render: function() { + Common.Views.AdvancedSettingsWindow.prototype.render.call(this); + + var me = this; + + // Style & Size + this.inputHeader = new Common.UI.InputField({ + el : $('#sliceradv-text-header'), + allowBlank : false, + blankError : me.txtEmpty, + style : 'width: 178px;' + }); + + this.chHeader = new Common.UI.CheckBox({ + el: $('#sliceradv-checkbox-header'), + labelText: this.strShowHeader + }); + this.chHeader.on('change', _.bind(function(field, newValue, oldValue, eOpts){ + if (this._changedProps) { + // this._changedProps.asc_putStrikeout(field.getValue()=='checked'); + } + }, this)); + + this.cmbSlicerStyle = new Common.UI.ComboDataView({ + itemWidth: 50, + itemHeight: 50, + menuMaxHeight: 272, + enableKeyEvents: true, + cls: 'combo-spark-style', + minWidth: 190 + }); + this.cmbSlicerStyle.render($('#sliceradv-combo-style')); + this.cmbSlicerStyle.openButton.menu.cmpEl.css({ + 'min-width': 178, + 'max-width': 178 + }); + this.cmbSlicerStyle.on('click', _.bind(this.onSelectSlicerStyle, this)); + this.cmbSlicerStyle.openButton.menu.on('show:after', function () { + me.cmbSlicerStyle.menuPicker.scroller.update({alwaysVisibleY: true}); + }); + + this.numWidth = new Common.UI.MetricSpinner({ + el: $('#sliceradv-spin-width'), + step: .1, + width: 85, + defaultUnit : "cm", + defaultValue : 0, + value: '0 cm', + maxValue: 5963.9, + minValue: 0 + }); + this.numWidth.on('change', _.bind(function(field, newValue, oldValue, eOpts){ + var numval = field.getNumberValue(); + if (this._changedProps) { + } + }, this)); + this.spinners.push(this.numWidth); + + this.numHeight = new Common.UI.MetricSpinner({ + el: $('#sliceradv-spin-height'), + step: .1, + width: 85, + defaultUnit : "cm", + defaultValue : 0, + value: '0 cm', + maxValue: 5963.9, + minValue: 0 + }); + this.numHeight.on('change', _.bind(function(field, newValue, oldValue, eOpts){ + var numval = field.getNumberValue(); + if (this._changedProps) { + } + }, this)); + this.spinners.push(this.numHeight); + + this.numColWidth = new Common.UI.MetricSpinner({ + el: $('#sliceradv-spin-col-width'), + step: .1, + width: 85, + defaultUnit : "cm", + defaultValue : 0, + value: '0 cm', + maxValue: 5963.9, + minValue: 0 + }); + this.numColWidth.on('change', _.bind(function(field, newValue, oldValue, eOpts){ + var numval = field.getNumberValue(); + if (this._changedProps) { + } + }, this)); + this.spinners.push(this.numColWidth); + + this.numColHeight = new Common.UI.MetricSpinner({ + el: $('#sliceradv-spin-col-height'), + step: .1, + width: 85, + defaultUnit : "cm", + defaultValue : 0, + value: '0 cm', + maxValue: 5963.9, + minValue: 0 + }); + this.numColHeight.on('change', _.bind(function(field, newValue, oldValue, eOpts){ + var numval = field.getNumberValue(); + if (this._changedProps) { + } + }, this)); + this.spinners.push(this.numColHeight); + + this.numCols = new Common.UI.MetricSpinner({ + el: $('#sliceradv-spin-columns'), + step: 1, + width: 85, + defaultUnit : "", + defaultValue : 1, + value: '1', + allowDecimal: false, + maxValue: 20000, + minValue: 0 + }); + this.numCols.on('change', _.bind(function(field, newValue, oldValue, eOpts){ + var numval = field.getNumberValue(); + if (this._changedProps) { + } + }, this)); + + // Sorting & Filtering + + this.radioAsc = new Common.UI.RadioBox({ + el: $('#sliceradv-radio-asc'), + name: 'asc-radio-sliceradv-sort', + labelText: this.textAsc, + checked: true + }); + this.radioAsc.on('change', _.bind(function(field, newValue, eOpts) { + if (newValue) { + } + }, this)); + + this.radioDesc = new Common.UI.RadioBox({ + el: $('#sliceradv-radio-desc'), + name: 'asc-radio-sliceradv-sort', + labelText: this.textDesc, + checked: false + }); + this.radioDesc.on('change', _.bind(function(field, newValue, eOpts) { + if (newValue) { + } + }, this)); + + this.chHideNoData = new Common.UI.CheckBox({ + el: $('#sliceradv-check-hide-nodata'), + labelText: this.strHideNoData + }); + this.chHideNoData.on('change', _.bind(function(field, newValue, oldValue, eOpts){ + var checked = (field.getValue()=='checked'); + this.chIndNoData.setDisabled(checked); + this.chShowNoData.setDisabled(checked || (this.chIndNoData.getValue()!='checked')); + this.chShowDel.setDisabled(checked); + if (this._changedProps) { + } + }, this)); + + this.chIndNoData = new Common.UI.CheckBox({ + el: $('#sliceradv-check-indicate-nodata'), + labelText: this.strIndNoData + }); + this.chIndNoData.on('change', _.bind(function(field, newValue, oldValue, eOpts){ + var checked = (field.getValue()=='checked'); + this.chShowNoData.setDisabled(!checked); + if (this._changedProps) { + } + }, this)); + + this.chShowNoData = new Common.UI.CheckBox({ + el: $('#sliceradv-check-show-nodata-last'), + disabled: true, + labelText: this.strShowNoData + }); + this.chShowNoData.on('change', _.bind(function(field, newValue, oldValue, eOpts){ + if (this._changedProps) { + // this._changedProps.asc_putStrikeout(field.getValue()=='checked'); + } + }, this)); + + this.chShowDel = new Common.UI.CheckBox({ + el: $('#sliceradv-check-show-deleted'), + labelText: this.strShowDel + }); + this.chShowDel.on('change', _.bind(function(field, newValue, oldValue, eOpts){ + if (this._changedProps) { + // this._changedProps.asc_putStrikeout(field.getValue()=='checked'); + } + }, this)); + + // References + + this.inputName = new Common.UI.InputField({ + el : $('#sliceradv-text-name'), + allowBlank : false, + blankError : me.txtEmpty, + style : 'width: 178px;' + }); + + this.lblSource = $('#sliceradv-lbl-source'); + this.lblFormula = $('#sliceradv-lbl-formula'); + + this.on('show', function(obj) { + obj.getChild('.footer .primary').focus(); + }); + + this.afterRender(); + }, + + getSettings: function() { + return this._changedProps; + }, + + _setDefaults: function(props) { + if (props ){ + this._noApply = true; + + // depents of data type + this.radioAsc.setCaption(this.textAsc + ' (' + this.textSmallLarge + ')' ); + this.radioDesc.setCaption(this.textDesc + ' (' + this.textLargeSmall + ')' ); + + this.lblSource.text('Source name'); + this.lblFormula.text('Name in formulas'); + + this._noApply = false; + + this._changedProps = new Asc.asc_CParagraphProperty(); + } + }, + + updateMetricUnit: function() { + if (this.spinners) { + for (var i=0; i Date: Fri, 17 Apr 2020 17:04:52 +0300 Subject: [PATCH 03/92] [SSE] Use asc_onSendFunctionWizardInfo for adding formula --- .../main/app/controller/FormulaDialog.js | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js b/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js index 45a977803..caac997fb 100644 --- a/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js +++ b/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js @@ -95,7 +95,7 @@ define([ if (func.origin === 'more') { this.showDialog(group); } else { - this.api.asc_insertFormula(func.name, Asc.c_oAscPopUpSelectorType.Func, !!autocomplete); + this.api.asc_insertFormula(func.name, Asc.c_oAscPopUpSelectorType.Func, !!autocomplete, true); !autocomplete && this.updateLast10Formulas(func.origin); } } @@ -112,6 +112,7 @@ define([ setApi: function (api) { this.api = api; + this.api.asc_registerCallback('asc_onSendFunctionWizardInfo', _.bind(this.onSendFunctionWizardInfo, this)); if (this.formulasGroups && this.api) { Common.Utils.InternalSettings.set("sse-settings-func-last", Common.localStorage.getItem("sse-settings-func-last")); @@ -216,9 +217,20 @@ define([ this.formulas.fillFormulasGroups(); } } - this.formulas.show(group); + this._formulagroup = group; + this.api.asc_preInsertFormula(); } }, + + onSendFunctionWizardInfo: function(props) { + if (props) { + // show formula settings + console.log('show formula settings'); + } else + this.formulas.show(this._formulagroup); + this._formulagroup = undefined; + }, + hideDialog: function () { if (this.formulas && this.formulas.isVisible()) { this.formulas.hide(); From a6388787252e4684349b596214ddf25f73ddfc63 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 17 Apr 2020 20:12:45 +0300 Subject: [PATCH 04/92] [SSE] Add function wizard dialog --- .../main/app/controller/FormulaDialog.js | 23 ++- .../main/app/view/FormulaDialog.js | 6 + .../main/app/view/FormulaWizard.js | 175 ++++++++++++++++++ 3 files changed, 203 insertions(+), 1 deletion(-) create mode 100644 apps/spreadsheeteditor/main/app/view/FormulaWizard.js diff --git a/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js b/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js index caac997fb..990bf3d02 100644 --- a/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js +++ b/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js @@ -44,7 +44,8 @@ define([ 'core', 'spreadsheeteditor/main/app/collection/FormulaGroups', 'spreadsheeteditor/main/app/view/FormulaDialog', - 'spreadsheeteditor/main/app/view/FormulaTab' + 'spreadsheeteditor/main/app/view/FormulaTab', + 'spreadsheeteditor/main/app/view/FormulaWizard' ], function () { 'use strict'; @@ -226,6 +227,26 @@ define([ if (props) { // show formula settings console.log('show formula settings'); + var me = this; + + var name = props.name, + descrarr = this.getDescription(Common.Utils.InternalSettings.get("sse-settings-func-locale")), + funcprops = { + name: this.api.asc_getFormulaLocaleName(name), + origin: name, + args: ((descrarr && descrarr[name]) ? descrarr[name].a : '').replace(/[,;]/g, this.api.asc_getFunctionArgumentSeparator()), + desc: (descrarr && descrarr[name]) ? descrarr[name].d : '' + }; + + (new SSE.Views.FormulaWizard({ + api : this.api, + funcprops: funcprops, + props : props, + handler : function(dlg, result, settings) { + if (result == 'ok') { + } + } + })).show(); } else this.formulas.show(this._formulagroup); this._formulagroup = undefined; diff --git a/apps/spreadsheeteditor/main/app/view/FormulaDialog.js b/apps/spreadsheeteditor/main/app/view/FormulaDialog.js index 8bcd07192..b4fb645ca 100644 --- a/apps/spreadsheeteditor/main/app/view/FormulaDialog.js +++ b/apps/spreadsheeteditor/main/app/view/FormulaDialog.js @@ -132,6 +132,7 @@ define([ me.cmbListFunctions.$el.find('.listview').focus(); }, 100, this); } + this._preventCloseCellEditor = false; }, hide: function () { @@ -144,10 +145,13 @@ define([ this.$window.off('mousedown',_.bind(this.onUpdateFocus, this)); Common.UI.Window.prototype.hide.call(this); + + !this._preventCloseCellEditor && this.api.asc_closeCellEditor(); }, onBtnClick: function (event) { if ('ok' === event.currentTarget.attributes['result'].value) { + this._preventCloseCellEditor = true; if (this.handler) { this.handler.call(this, this.applyFunction); } @@ -157,6 +161,7 @@ define([ }, onDblClickFunction: function () { if (this.handler) { + this._preventCloseCellEditor = true; this.handler.call(this, this.applyFunction); } @@ -180,6 +185,7 @@ define([ }, onPrimary: function(list, record, event) { if (this.handler) { + this._preventCloseCellEditor = true; this.handler.call(this, this.applyFunction); } diff --git a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js new file mode 100644 index 000000000..150a23f0d --- /dev/null +++ b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js @@ -0,0 +1,175 @@ +/* + * + * (c) Copyright Ascensio System SIA 2010-2020 + * + * 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 + * + */ +/** + * FormulaWizard.js + * + * Created by Julia Radzhabova on 17.04.20 + * Copyright (c) 2020 Ascensio System SIA. All rights reserved. + * + */ + +define([ + 'common/main/lib/component/Window', + 'common/main/lib/component/MetricSpinner' +], function () { 'use strict'; + + SSE.Views.FormulaWizard = Common.UI.Window.extend(_.extend({ + options: { + width: 400, + header: true, + style: 'min-width: 350px;', + cls: 'modal-dlg', + buttons: ['ok', 'cancel'] + }, + + initialize : function(options) { + _.extend(this.options, { + title: this.textTitle + }, options || {}); + + this.template = [ + '
', + '
', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '
', + '', + '
', + '
', + '
', + '', + '
', + '', + '
', + '
', + '
', + '', + '
', + '
', + '', + '', + '', + '', + '
', + '
' + ].join(''); + + this.options.tpl = _.template(this.template)(this.options); + this.props = this.options.props; + this.funcprops = this.options.funcprops; + this._noApply = false; + + Common.UI.Window.prototype.initialize.call(this, this.options); + }, + + render: function() { + Common.UI.Window.prototype.render.call(this); + + this.txtArg1 = new Common.UI.InputFieldBtn({ + el : $('#formula-wizard-txt-arg1'), + style : 'width: 100%;', + allowBlank : true, + validateOnChange: false + }); + + this.txtArg2 = new Common.UI.InputFieldBtn({ + el : $('#formula-wizard-txt-arg2'), + style : 'width: 100%;', + allowBlank : true, + validateOnChange: false + }); + + var $window = this.getChild(); + $window.find('.dlg-btn').on('click', _.bind(this.onBtnClick, this)); + $window.find('input').on('keypress', _.bind(this.onKeyPress, this)); + + this.afterRender(); + }, + + afterRender: function() { + this.setSettings(); + }, + + _handleInput: function(state) { + if (this.options.handler) + this.options.handler.call(this, state, (state == 'ok') ? this.getSettings() : undefined); + + this.close(); + }, + + onBtnClick: function(event) { + this._handleInput(event.currentTarget.attributes['result'].value); + }, + + onKeyPress: function(event) { + if (event.keyCode == Common.UI.Keys.RETURN) { + this._handleInput('ok'); + } + }, + + setSettings: function () { + if (this.funcprops) { + var props = this.funcprops; + props.args ? $('#formula-wizard-args').html('' + props.name + '' + props.args) : $('#formula-wizard-args').addClass('hidden'); + props.desc ? $('#formula-wizard-desc').text(props.desc) : $('#formula-wizard-desc').addClass('hidden'); + } + if (this.props) { + // fill arguments + var props = this.props; + var result = props.asc_getFormulaResult(); + $('#formula-wizard-value').html('' + this.textValue + ': ' + ((result!==undefined && result!==null)? result : '')); + } + }, + + getSettings: function() { + return {}; + }, + + textTitle: 'Function Argumens', + textValue: 'Value' + + }, SSE.Views.FormulaWizard || {})) +}); \ No newline at end of file From 33171349d6f48e3be3f43f7ef6b6d35bd7546995 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 20 Apr 2020 12:43:04 +0300 Subject: [PATCH 05/92] [SSE] Formula refactoring --- apps/spreadsheeteditor/main/app/controller/FormulaDialog.js | 2 +- apps/spreadsheeteditor/main/app/view/FormulaDialog.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js b/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js index 990bf3d02..795331dfe 100644 --- a/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js +++ b/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js @@ -229,7 +229,7 @@ define([ console.log('show formula settings'); var me = this; - var name = props.name, + var name = props.asc_getName(), descrarr = this.getDescription(Common.Utils.InternalSettings.get("sse-settings-func-locale")), funcprops = { name: this.api.asc_getFormulaLocaleName(name), diff --git a/apps/spreadsheeteditor/main/app/view/FormulaDialog.js b/apps/spreadsheeteditor/main/app/view/FormulaDialog.js index b4fb645ca..2a2832230 100644 --- a/apps/spreadsheeteditor/main/app/view/FormulaDialog.js +++ b/apps/spreadsheeteditor/main/app/view/FormulaDialog.js @@ -146,7 +146,7 @@ define([ Common.UI.Window.prototype.hide.call(this); - !this._preventCloseCellEditor && this.api.asc_closeCellEditor(); + !this._preventCloseCellEditor && this.api.asc_closeCellEditor(true); }, onBtnClick: function (event) { From a35e5207999b47e95a238e2863a952b617bc96d4 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 20 Apr 2020 19:14:48 +0300 Subject: [PATCH 06/92] [SSE] Show function arguments --- .../main/app/view/FormulaWizard.js | 131 +++++++++++++----- 1 file changed, 98 insertions(+), 33 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js index 150a23f0d..0656d210a 100644 --- a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js +++ b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js @@ -45,7 +45,8 @@ define([ SSE.Views.FormulaWizard = Common.UI.Window.extend(_.extend({ options: { - width: 400, + width: 420, + height: 460, header: true, style: 'min-width: 350px;', cls: 'modal-dlg', @@ -58,39 +59,14 @@ define([ }, options || {}); this.template = [ - '
', - '
', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', + '
', + '', + '
', + '
', - '', - '
', - '
', - '
', - '', - '
', - '', - '
', - '
', - '
', - '', - '
', '
', '
', - '', - '', + '', + '', '', '', '
', @@ -100,7 +76,9 @@ define([ this.options.tpl = _.template(this.template)(this.options); this.props = this.options.props; this.funcprops = this.options.funcprops; + this.api = this.options.api; this._noApply = false; + this.args = []; Common.UI.Window.prototype.initialize.call(this, this.options); }, @@ -126,6 +104,13 @@ define([ $window.find('.dlg-btn').on('click', _.bind(this.onBtnClick, this)); $window.find('input').on('keypress', _.bind(this.onKeyPress, this)); + this.scrollerY = new Common.UI.Scroller({ + el: $window.find('#formula-wizard-tbl-args').parent(), + minScrollbarLength : 20, + alwaysVisibleY: this.scrollAlwaysVisible + }); + this.scrollerY.scrollTop(0); + this.afterRender(); }, @@ -157,19 +142,99 @@ define([ props.desc ? $('#formula-wizard-desc').text(props.desc) : $('#formula-wizard-desc').addClass('hidden'); } if (this.props) { + var me = this; + // fill arguments var props = this.props; var result = props.asc_getFormulaResult(); $('#formula-wizard-value').html('' + this.textValue + ': ' + ((result!==undefined && result!==null)? result : '')); + $('#formula-wizard-name').html('' + this.textFunction + ': ' + props.name); + + var tbl = this.$window.find('#formula-wizard-tbl-args'); + var argtpl = '' + + '
' + + '
'; + var argmin = props.asc_getArgumentMin(), + argmax = props.asc_getArgumentMax(), + argres = props.asc_getArgumentsResult(), + argtype = props.asc_getArgumentsType(), + argcount = 0, + lasttype; + for (var i=0; i' + this.args[argcount].argName + ''); + else + this.args[argcount].lblName.html(this.args[argcount].argName); + this.args[argcount].lblValue.text(' = '+ (argres && (argres.length>argcount) && argres[argcount]!==null ? argres[argcount] : this.args[argcount].argType)); + argcount++; + } + if (i>=argmin && (typeof type == 'object')) // show only one repeatable argument + break; + } + this.scrollerY.update(); } }, + getArgType: function(type) { + var str = ''; + switch (type) { + case Asc.c_oAscFormulaArgumentType.number: + str = 'number'; + break; + case Asc.c_oAscFormulaArgumentType.text: + str = 'text'; + break; + case Asc.c_oAscFormulaArgumentType.reference: + str = 'reference'; + break; + case Asc.c_oAscFormulaArgumentType.any: + str = 'any'; + break; + case Asc.c_oAscFormulaArgumentType.logical: + str = 'logical'; + break; + } + return str; + }, + getSettings: function() { return {}; }, + close: function () { + Common.UI.Window.prototype.close.call(this); + this.api.asc_closeCellEditor(true); + }, + textTitle: 'Function Argumens', - textValue: 'Value' + textValue: 'Formula result', + textFunction: 'Function' }, SSE.Views.FormulaWizard || {})) }); \ No newline at end of file From ddcd3fce264348090d2830d7b12e444ad32e6921 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 20 Apr 2020 19:41:43 +0300 Subject: [PATCH 07/92] [SSE] Fix formula settings --- .../main/app/view/FormulaWizard.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js index 0656d210a..7e4b7dd67 100644 --- a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js +++ b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js @@ -62,7 +62,7 @@ define([ '
', '', '
', - '', + '
', '
', '
', '', @@ -107,10 +107,12 @@ define([ this.scrollerY = new Common.UI.Scroller({ el: $window.find('#formula-wizard-tbl-args').parent(), minScrollbarLength : 20, - alwaysVisibleY: this.scrollAlwaysVisible + alwaysVisibleY: true }); this.scrollerY.scrollTop(0); + this._preventCloseCellEditor = false; + this.afterRender(); }, @@ -121,7 +123,7 @@ define([ _handleInput: function(state) { if (this.options.handler) this.options.handler.call(this, state, (state == 'ok') ? this.getSettings() : undefined); - + this._preventCloseCellEditor = (state == 'ok'); this.close(); }, @@ -160,7 +162,7 @@ define([ argtype = props.asc_getArgumentsType(), argcount = 0, lasttype; - for (var i=0; i Date: Tue, 21 Apr 2020 13:43:11 +0300 Subject: [PATCH 08/92] [SSE] Refactoring formula wizard --- .../main/app/view/FormulaWizard.js | 82 +++++++++++++------ 1 file changed, 56 insertions(+), 26 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js index 7e4b7dd67..9f9020c68 100644 --- a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js +++ b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js @@ -60,15 +60,20 @@ define([ this.template = [ '
', - '', - '
', - '', - '
', + '', + '
', + '
', + '', + '
', + '
', + '
', + '
', + '', + '', + '', + '', + '', '
', - '', - '', - '', - '', '
', '
' ].join(''); @@ -104,12 +109,9 @@ define([ $window.find('.dlg-btn').on('click', _.bind(this.onBtnClick, this)); $window.find('input').on('keypress', _.bind(this.onKeyPress, this)); - this.scrollerY = new Common.UI.Scroller({ - el: $window.find('#formula-wizard-tbl-args').parent(), - minScrollbarLength : 20, - alwaysVisibleY: true - }); - this.scrollerY.scrollTop(0); + this.panelArgs = $window.find('#formula-wizard-panel-args'); + this.tableArgs = $window.find('#formula-wizard-tbl-args').parent(); + this.panelDesc = $window.find('#formula-wizard-panel-desc'); this._preventCloseCellEditor = false; @@ -138,28 +140,44 @@ define([ }, setSettings: function () { + var me = this; if (this.funcprops) { var props = this.funcprops; props.args ? $('#formula-wizard-args').html('' + props.name + '' + props.args) : $('#formula-wizard-args').addClass('hidden'); props.desc ? $('#formula-wizard-desc').text(props.desc) : $('#formula-wizard-desc').addClass('hidden'); - } - if (this.props) { - var me = this; + props.name ? $('#formula-wizard-name').html('' + this.textFunction + ': ' + props.name) : $('#formula-wizard-name').addClass('hidden'); + this.$window.find('#formula-wizard-help').on('click', function (e) { + // me.close(); + SSE.getController('LeftMenu').getView('LeftMenu').showMenu('file:help', 'Functions\/' + me.funcprops.origin.toLocaleLowerCase() + '.htm'); + }) + } + var height = this.panelDesc.outerHeight(); + height = this.$window.find('.box').height() - height - 23;// #formula-wizard-name height + this.panelArgs.height(height); + height = parseInt((height-8)/30) * 30; + this.tableArgs.height(height); + this.scrollerY = new Common.UI.Scroller({ + el: this.tableArgs, + minScrollbarLength : 20, + alwaysVisibleY: true + }); + + if (this.props) { // fill arguments var props = this.props; var result = props.asc_getFormulaResult(); $('#formula-wizard-value').html('' + this.textValue + ': ' + ((result!==undefined && result!==null)? result : '')); - $('#formula-wizard-name').html('' + this.textFunction + ': ' + props.name); var tbl = this.$window.find('#formula-wizard-tbl-args'); - var argtpl = '' + - '
' + - '
'; + var argtpl = '
' + + '
' + + '
'; var argmin = props.asc_getArgumentMin(), argmax = props.asc_getArgumentMax(), argres = props.asc_getArgumentsResult(), argtype = props.asc_getArgumentsType(), + argval = props.asc_getArgumentsValue(), argcount = 0, lasttype; for (var i=0; i' + this.args[argcount].argName + ''); else this.args[argcount].lblName.html(this.args[argcount].argName); - this.args[argcount].lblValue.text(' = '+ (argres && (argres.length>argcount) && argres[argcount]!==null ? argres[argcount] : this.args[argcount].argType)); + this.args[argcount].lblValue.text(' = '+ (argres && (argres.length>argcount) && argres[argcount]!==null ? argres[argcount] : this.args[argcount].argTypeName)); argcount++; } } this.scrollerY.update(); + this.scrollerY.scrollTop(0); } }, @@ -229,12 +258,13 @@ define([ close: function () { Common.UI.Window.prototype.close.call(this); - !this._preventCloseCellEditor && this.api.asc_closeCellEditor(true); + this.api.asc_closeCellEditor(!this._preventCloseCellEditor); }, textTitle: 'Function Argumens', textValue: 'Formula result', - textFunction: 'Function' + textFunction: 'Function', + textHelp: 'Help on this function' }, SSE.Views.FormulaWizard || {})) }); \ No newline at end of file From cbd873c8208fc2e4c522d3b037cae5791905da4a Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 21 Apr 2020 17:23:57 +0300 Subject: [PATCH 09/92] [SSE] Formula wizard: add arguments, set values --- .../main/app/view/FormulaWizard.js | 211 +++++++++++------- 1 file changed, 136 insertions(+), 75 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js index 9f9020c68..f549d9016 100644 --- a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js +++ b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js @@ -61,15 +61,15 @@ define([ this.template = [ '
', '', - '
', - '
', + '
', + '
', '', '
', '
', '
', '
', '', - '', + '', '', '', '', @@ -84,6 +84,9 @@ define([ this.api = this.options.api; this._noApply = false; this.args = []; + this.repeatedArg = undefined; + this.minArgCount = 1; + this.maxArgCount = 1; Common.UI.Window.prototype.initialize.call(this, this.options); }, @@ -91,27 +94,14 @@ define([ render: function() { Common.UI.Window.prototype.render.call(this); - this.txtArg1 = new Common.UI.InputFieldBtn({ - el : $('#formula-wizard-txt-arg1'), - style : 'width: 100%;', - allowBlank : true, - validateOnChange: false - }); - - this.txtArg2 = new Common.UI.InputFieldBtn({ - el : $('#formula-wizard-txt-arg2'), - style : 'width: 100%;', - allowBlank : true, - validateOnChange: false - }); - var $window = this.getChild(); $window.find('.dlg-btn').on('click', _.bind(this.onBtnClick, this)); $window.find('input').on('keypress', _.bind(this.onKeyPress, this)); this.panelArgs = $window.find('#formula-wizard-panel-args'); - this.tableArgs = $window.find('#formula-wizard-tbl-args').parent(); + this.tableArgs = $window.find('#formula-wizard-tbl-args'); this.panelDesc = $window.find('#formula-wizard-panel-desc'); + this.lblArgDesc = $window.find('#formula-wizard-arg-desc'); this._preventCloseCellEditor = false; @@ -153,12 +143,12 @@ define([ }) } var height = this.panelDesc.outerHeight(); - height = this.$window.find('.box').height() - height - 23;// #formula-wizard-name height + height = this.$window.find('.box').height() - height - 33;// #formula-wizard-name height this.panelArgs.height(height); height = parseInt((height-8)/30) * 30; - this.tableArgs.height(height); + this.tableArgs.parent().height(height); this.scrollerY = new Common.UI.Scroller({ - el: this.tableArgs, + el: this.tableArgs.parent(), minScrollbarLength : 20, alwaysVisibleY: true }); @@ -166,68 +156,101 @@ define([ if (this.props) { // fill arguments var props = this.props; + this.minArgCount = props.asc_getArgumentMin(); + this.maxArgCount = props.asc_getArgumentMax(); + var result = props.asc_getFormulaResult(); $('#formula-wizard-value').html('' + this.textValue + ': ' + ((result!==undefined && result!==null)? result : '')); - var tbl = this.$window.find('#formula-wizard-tbl-args'); - var argtpl = '
' + - '
' + - '
'; - var argmin = props.asc_getArgumentMin(), - argmax = props.asc_getArgumentMax(), - argres = props.asc_getArgumentsResult(), + var argres = props.asc_getArgumentsResult(), argtype = props.asc_getArgumentsType(), - argval = props.asc_getArgumentsValue(), - argcount = 0, - lasttype; - for (var i=0; i' + this.args[argcount].argName + ''); - else - this.args[argcount].lblName.html(this.args[argcount].argName); - this.args[argcount].lblValue.text(' = '+ (argres && (argres.length>argcount) && argres[argcount]!==null ? argres[argcount] : this.args[argcount].argTypeName)); - argcount++; + if (argtype) { + for (var i=0; i
' + + '
', + div = $(Common.Utils.String.format(argtpl, argcount)); + this.tableArgs.append(div); + + var txt = new Common.UI.InputFieldBtn({ + el: div.find('#formula-wizard-txt-arg'+argcount), + index: argcount, + validateOnChange: true, + validateOnBlur: false + }).on('changed:after', function(input, newValue, oldValue, e) { + if (newValue == oldValue) return; + }).on('changing', function(input, newValue, oldValue, e) { + if (newValue == oldValue) return; + var index = input.options.index, + arg = me.args[index], + res = me.api.asc_insertFormulaArgument(newValue, index, arg.argType); + arg.lblValue.text(' = '+ (res!==null && res !==undefined ? res : arg.argTypeName)); + }); + txt.setValue((argval!==undefined && argval!==null) ? argval : ''); + txt._input.on('focus', _.bind(this.onSelectArgument, this, txt)); + txt.on('button:click', _.bind(this.onSelectData, this)); + + me.args.push({ + index: argcount, + lblName: div.find('#formula-wizard-lbl-name-arg'+argcount), + lblValue: div.find('#formula-wizard-lbl-val-arg'+argcount), + argInput: txt, + argName: 'Argument ' + (argcount+1), + argDesc: 'some argument description', + argType: argtype, + argTypeName: me.getArgType(argtype) + }); + if (argcount' + me.args[argcount].argName + ''); + else + me.args[argcount].lblName.html(me.args[argcount].argName); + me.args[argcount].lblValue.text(' = '+ ( argres!==null && argres!==undefined ? argres : me.args[argcount].argTypeName)); }, getArgType: function(type) { @@ -252,6 +275,44 @@ define([ return str; }, + onSelectArgument: function(input) { + var index = input.options.index, + arg = this.args[index]; + arg.argDesc ? this.lblArgDesc.html('' + arg.argName + ': ' + arg.argDesc) : this.lblArgDesc.addClass('hidden'); + if (!this._noApply && index==this.args.length-1 && this.repeatedArg && index+this.repeatedArg.length Date: Tue, 21 Apr 2020 22:48:51 +0300 Subject: [PATCH 10/92] [SSE] Formula wizard: show help --- .../main/app/controller/FormulaDialog.js | 1 + .../main/app/view/FormulaWizard.js | 37 ++++++++++++++++++- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js b/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js index 795331dfe..9e07a2f9e 100644 --- a/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js +++ b/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js @@ -240,6 +240,7 @@ define([ (new SSE.Views.FormulaWizard({ api : this.api, + lang : this.appOptions.lang, funcprops: funcprops, props : props, handler : function(dlg, result, settings) { diff --git a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js index f549d9016..91f786448 100644 --- a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js +++ b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js @@ -82,9 +82,12 @@ define([ this.props = this.options.props; this.funcprops = this.options.funcprops; this.api = this.options.api; + this.lang = this.options.lang; + this._noApply = false; this.args = []; this.repeatedArg = undefined; + this.helpUrl = undefined; this.minArgCount = 1; this.maxArgCount = 1; @@ -138,8 +141,7 @@ define([ props.name ? $('#formula-wizard-name').html('' + this.textFunction + ': ' + props.name) : $('#formula-wizard-name').addClass('hidden'); this.$window.find('#formula-wizard-help').on('click', function (e) { - // me.close(); - SSE.getController('LeftMenu').getView('LeftMenu').showMenu('file:help', 'Functions\/' + me.funcprops.origin.toLocaleLowerCase() + '.htm'); + me.showHelp(); }) } var height = this.panelDesc.outerHeight(); @@ -313,6 +315,37 @@ define([ } }, + showHelp: function() { + if (this.helpUrl==undefined) { + if (!this.funcprops || !this.funcprops.origin) { + this.helpUrl = null; + return; + } + var me = this, + lang = (this.lang) ? this.lang.split(/[\-\_]/)[0] : 'en', + url = 'resources/help/' + lang + '/Functions/' + (this.funcprops.origin.toLocaleLowerCase()) + '.htm'; + + fetch(url).then(function(response){ + if ( response.ok ) { + me.helpUrl = url; + me.showHelp(); + } else { + url = 'resources/help/en/Functions/' + (me.funcprops.origin.toLocaleLowerCase()) + '.htm'; + fetch(url).then(function(response){ + if ( response.ok ) { + me.helpUrl = url; + me.showHelp(); + } else { + me.helpUrl = null; + } + }); + } + }); + } else if (this.helpUrl) { + window.open(this.helpUrl); + } + }, + getSettings: function() { return {}; }, From ccf81c80a0bd7da90cea262b8f94e7beecf1c713 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Wed, 22 Apr 2020 11:43:30 +0300 Subject: [PATCH 11/92] [SSE] Fix formula calculation --- .../main/app/view/FormulaWizard.js | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js index 91f786448..6874693b9 100644 --- a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js +++ b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js @@ -105,6 +105,7 @@ define([ this.tableArgs = $window.find('#formula-wizard-tbl-args'); this.panelDesc = $window.find('#formula-wizard-panel-desc'); this.lblArgDesc = $window.find('#formula-wizard-arg-desc'); + this.lblResult = $window.find('#formula-wizard-value'); this._preventCloseCellEditor = false; @@ -162,7 +163,7 @@ define([ this.maxArgCount = props.asc_getArgumentMax(); var result = props.asc_getFormulaResult(); - $('#formula-wizard-value').html('' + this.textValue + ': ' + ((result!==undefined && result!==null)? result : '')); + this.lblResult.html('' + this.textValue + ': ' + ((result!==undefined && result!==null)? result : '')); var argres = props.asc_getArgumentsResult(), argtype = props.asc_getArgumentsType(), @@ -215,7 +216,7 @@ define([ setControls: function(argcount, argtype, argval, argres) { var me = this, argtpl = '
' + - '
' + + '
' + '
', div = $(Common.Utils.String.format(argtpl, argcount)); this.tableArgs.append(div); @@ -231,8 +232,14 @@ define([ if (newValue == oldValue) return; var index = input.options.index, arg = me.args[index], - res = me.api.asc_insertFormulaArgument(newValue, index, arg.argType); - arg.lblValue.text(' = '+ (res!==null && res !==undefined ? res : arg.argTypeName)); + res = me.api.asc_insertFormulaArgument(newValue, index, arg.argType), + argres = res ? res.asc_getArgumentsResult() : undefined; + argres = argres ? argres[index] : undefined; + arg.lblValue.html('= '+ (argres!==null && argres !==undefined ? argres : '' + arg.argTypeName + '' )); + + res = res ? res.asc_getFormulaResult() : undefined; + me.lblResult.html('' + me.textValue + ': ' + ((res!==undefined && res!==null)? res : '')); + }); txt.setValue((argval!==undefined && argval!==null) ? argval : ''); txt._input.on('focus', _.bind(this.onSelectArgument, this, txt)); @@ -252,7 +259,7 @@ define([ me.args[argcount].lblName.html('' + me.args[argcount].argName + ''); else me.args[argcount].lblName.html(me.args[argcount].argName); - me.args[argcount].lblValue.text(' = '+ ( argres!==null && argres!==undefined ? argres : me.args[argcount].argTypeName)); + me.args[argcount].lblValue.html('= '+ ( argres!==null && argres!==undefined ? argres : '' + me.args[argcount].argTypeName + '')); }, getArgType: function(type) { From 92102cfac11cc547d19d5e295c6dc308118b8d5f Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Wed, 22 Apr 2020 13:02:38 +0300 Subject: [PATCH 12/92] [SSE] Fix data input in formula wizard --- apps/spreadsheeteditor/main/app/controller/DocumentHolder.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js index b21eb4cb2..d36543936 100644 --- a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js +++ b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js @@ -2031,7 +2031,7 @@ define([ }, onFormulaCompleteMenu: function(funcarr) { - if (!this.documentHolder.funcMenu) return; + if (!this.documentHolder.funcMenu || Common.Utils.ModalWindow.isVisible()) return; if (funcarr) { var me = this, From 5fb329c853cffbd5dfdda2116326d3d93323267a Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Wed, 22 Apr 2020 17:17:31 +0300 Subject: [PATCH 13/92] [SSE] Formula wizard refactoring --- apps/spreadsheeteditor/main/app/view/FormulaWizard.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js index 6874693b9..f3169b11f 100644 --- a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js +++ b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js @@ -317,7 +317,7 @@ define([ win.setSettings({ api : me.api, range : !_.isEmpty(input.getValue()) ? input.getValue() : '', - type : Asc.c_oAscSelectionDialogType.Chart + type : Asc.c_oAscSelectionDialogType.FunctionWizard }); } }, @@ -330,14 +330,15 @@ define([ } var me = this, lang = (this.lang) ? this.lang.split(/[\-\_]/)[0] : 'en', - url = 'resources/help/' + lang + '/Functions/' + (this.funcprops.origin.toLocaleLowerCase()) + '.htm'; + name = '/Functions/' + this.funcprops.origin.toLocaleLowerCase().replace(/\./g, '-') + '.htm', + url = 'resources/help/' + lang + name; fetch(url).then(function(response){ if ( response.ok ) { me.helpUrl = url; me.showHelp(); } else { - url = 'resources/help/en/Functions/' + (me.funcprops.origin.toLocaleLowerCase()) + '.htm'; + url = 'resources/help/en' + name; fetch(url).then(function(response){ if ( response.ok ) { me.helpUrl = url; From 29ccd1e6d708930bcee032df2fd499b0654667d5 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Wed, 22 Apr 2020 17:58:16 +0300 Subject: [PATCH 14/92] [SSE] Fix formula help --- .../main/app/controller/FormulaDialog.js | 2 -- apps/spreadsheeteditor/main/app/view/FormulaWizard.js | 10 ++++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js b/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js index 9e07a2f9e..b5d3ba0d4 100644 --- a/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js +++ b/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js @@ -226,9 +226,7 @@ define([ onSendFunctionWizardInfo: function(props) { if (props) { // show formula settings - console.log('show formula settings'); var me = this; - var name = props.asc_getName(), descrarr = this.getDescription(Common.Utils.InternalSettings.get("sse-settings-func-locale")), funcprops = { diff --git a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js index f3169b11f..d2ecea731 100644 --- a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js +++ b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js @@ -328,19 +328,25 @@ define([ this.helpUrl = null; return; } + var lang = Common.Utils.InternalSettings.get("sse-settings-func-help"); + if (!lang) + lang = (this.lang) ? this.lang.split(/[\-\_]/)[0] : 'en'; + var me = this, - lang = (this.lang) ? this.lang.split(/[\-\_]/)[0] : 'en', name = '/Functions/' + this.funcprops.origin.toLocaleLowerCase().replace(/\./g, '-') + '.htm', url = 'resources/help/' + lang + name; fetch(url).then(function(response){ if ( response.ok ) { + Common.Utils.InternalSettings.set("sse-settings-func-help", lang); me.helpUrl = url; me.showHelp(); } else { - url = 'resources/help/en' + name; + lang = 'en'; + url = 'resources/help/' + lang + name; fetch(url).then(function(response){ if ( response.ok ) { + Common.Utils.InternalSettings.set("sse-settings-func-help", lang); me.helpUrl = url; me.showHelp(); } else { From fb86d517b1a8d9d5f3115af9466012913b230368 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 23 Apr 2020 13:10:34 +0300 Subject: [PATCH 15/92] [SSE] asc_insertFormula -> asc_insertInCell --- apps/spreadsheeteditor/main/app/controller/DocumentHolder.js | 4 ++-- apps/spreadsheeteditor/main/app/controller/FormulaDialog.js | 2 +- apps/spreadsheeteditor/main/app/controller/Toolbar.js | 2 +- apps/spreadsheeteditor/mobile/app/controller/CellEditor.js | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js index d36543936..4dd4d065f 100644 --- a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js +++ b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js @@ -1986,7 +1986,7 @@ define([ value : addarr ? addarr[index] : menuItem, style: (typeof menuItem == 'string' && _.isEmpty(menuItem.trim())) ? 'min-height: 25px;' : '' }).on('click', function(item, e) { - me.api.asc_insertFormula(item.value, Asc.c_oAscPopUpSelectorType.None, false ); + me.api.asc_insertInCell(item.value, Asc.c_oAscPopUpSelectorType.None, false ); }); menu.addItem(mnu); }); @@ -2063,7 +2063,7 @@ define([ caption: name, hint : (funcdesc && funcdesc[origname]) ? funcdesc[origname].d : '' }).on('click', function(item, e) { - setTimeout(function(){ me.api.asc_insertFormula(item.caption, type, false ); }, 10); + setTimeout(function(){ me.api.asc_insertInCell(item.caption, type, false ); }, 10); }); menu.addItem(mnu); }); diff --git a/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js b/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js index b5d3ba0d4..ea0ac3ea9 100644 --- a/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js +++ b/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js @@ -96,7 +96,7 @@ define([ if (func.origin === 'more') { this.showDialog(group); } else { - this.api.asc_insertFormula(func.name, Asc.c_oAscPopUpSelectorType.Func, !!autocomplete, true); + this.api.asc_insertInCell(func.name, Asc.c_oAscPopUpSelectorType.FuncWizard, !!autocomplete); !autocomplete && this.updateLast10Formulas(func.origin); } } diff --git a/apps/spreadsheeteditor/main/app/controller/Toolbar.js b/apps/spreadsheeteditor/main/app/controller/Toolbar.js index 737263986..104c51d8c 100644 --- a/apps/spreadsheeteditor/main/app/controller/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/controller/Toolbar.js @@ -1223,7 +1223,7 @@ define([ (new SSE.Views.NamedRangePasteDlg({ handler: function(result, settings) { if (result == 'ok' && settings) { - me.api.asc_insertFormula(settings.asc_getName(true), settings.asc_getIsTable() ? Asc.c_oAscPopUpSelectorType.Table : Asc.c_oAscPopUpSelectorType.Range, false); + me.api.asc_insertInCell(settings.asc_getName(true), settings.asc_getIsTable() ? Asc.c_oAscPopUpSelectorType.Table : Asc.c_oAscPopUpSelectorType.Range, false); Common.component.Analytics.trackEvent('ToolBar', 'Paste Named Range'); } Common.NotificationCenter.trigger('edit:complete', me.toolbar); diff --git a/apps/spreadsheeteditor/mobile/app/controller/CellEditor.js b/apps/spreadsheeteditor/mobile/app/controller/CellEditor.js index cfec8afca..1e52d4a59 100644 --- a/apps/spreadsheeteditor/mobile/app/controller/CellEditor.js +++ b/apps/spreadsheeteditor/mobile/app/controller/CellEditor.js @@ -67,7 +67,7 @@ define([ 'function:click': this.onInsertFunction.bind(this), 'function:hint': function (name, type) { setTimeout(function(){ - me.api.asc_insertFormula(name, type, false); + me.api.asc_insertInCell(name, type, false); }, 0); } } From 95aa744365ef1450d4e8a9631087e710f9451e13 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 23 Apr 2020 15:48:13 +0300 Subject: [PATCH 16/92] [SSE] Refactoring function wizard --- .../main/app/view/FormulaWizard.js | 144 +++++++++++------- 1 file changed, 90 insertions(+), 54 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js index d2ecea731..3f3f006c7 100644 --- a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js +++ b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js @@ -39,46 +39,56 @@ */ define([ - 'common/main/lib/component/Window', + 'common/main/lib/view/AdvancedSettingsWindow', 'common/main/lib/component/MetricSpinner' ], function () { 'use strict'; - SSE.Views.FormulaWizard = Common.UI.Window.extend(_.extend({ + SSE.Views.FormulaWizard = Common.Views.AdvancedSettingsWindow.extend(_.extend({ options: { - width: 420, - height: 460, - header: true, - style: 'min-width: 350px;', - cls: 'modal-dlg', - buttons: ['ok', 'cancel'] + contentWidth: 580, + height: 420 }, initialize : function(options) { + var me = this; _.extend(this.options, { - title: this.textTitle - }, options || {}); - - this.template = [ - '
', - '', - '
', - '
', - '', - '
', + title: this.textTitle, + template: [ + '
', + '
', + '
', + '', + '', + '', + '', + '
', + '', + '
', + '
', + '', + '
', + '
', + '
', + '', + '
', + '
', + '
', + '
', + '
', + '', + '', + '', + '', + '', + '
', + '
', + '
', '
', '
', - '
', - '', - '', - '', - '', - '', - '
', - '
', - '
' - ].join(''); + '
' + ].join('') + }, options); - this.options.tpl = _.template(this.template)(this.options); this.props = this.options.props; this.funcprops = this.options.funcprops; this.api = this.options.api; @@ -90,22 +100,26 @@ define([ this.helpUrl = undefined; this.minArgCount = 1; this.maxArgCount = 1; + this.minArgWidth = 50; - Common.UI.Window.prototype.initialize.call(this, this.options); + Common.Views.AdvancedSettingsWindow.prototype.initialize.call(this, this.options); }, render: function() { - Common.UI.Window.prototype.render.call(this); + Common.Views.AdvancedSettingsWindow.prototype.render.call(this); var $window = this.getChild(); - $window.find('.dlg-btn').on('click', _.bind(this.onBtnClick, this)); $window.find('input').on('keypress', _.bind(this.onKeyPress, this)); + this.contentPanel = $window.find('.content-panel'); + this.innerPanel = $window.find('.inner-content'); + this.panelArgs = $window.find('#formula-wizard-panel-args'); this.tableArgs = $window.find('#formula-wizard-tbl-args'); this.panelDesc = $window.find('#formula-wizard-panel-desc'); this.lblArgDesc = $window.find('#formula-wizard-arg-desc'); - this.lblResult = $window.find('#formula-wizard-value'); + this.lblFormulaResult = $window.find('#formula-wizard-value'); + this.lblFunctionResult = $window.find('#formula-wizard-lbl-val-func'); this._preventCloseCellEditor = false; @@ -113,7 +127,7 @@ define([ }, afterRender: function() { - this.setSettings(); + this._setDefaults(); }, _handleInput: function(state) { @@ -123,7 +137,7 @@ define([ this.close(); }, - onBtnClick: function(event) { + onDlgBtnClick: function(event) { this._handleInput(event.currentTarget.attributes['result'].value); }, @@ -133,28 +147,25 @@ define([ } }, - setSettings: function () { + onPrimary: function() { + this._handleInput('ok'); + return false; + }, + + _setDefaults: function () { var me = this; if (this.funcprops) { var props = this.funcprops; props.args ? $('#formula-wizard-args').html('' + props.name + '' + props.args) : $('#formula-wizard-args').addClass('hidden'); props.desc ? $('#formula-wizard-desc').text(props.desc) : $('#formula-wizard-desc').addClass('hidden'); - props.name ? $('#formula-wizard-name').html('' + this.textFunction + ': ' + props.name) : $('#formula-wizard-name').addClass('hidden'); + props.name ? $('#formula-wizard-name').html(this.textFunction + ': ' + props.name) : $('#formula-wizard-name').addClass('hidden'); this.$window.find('#formula-wizard-help').on('click', function (e) { me.showHelp(); }) } - var height = this.panelDesc.outerHeight(); - height = this.$window.find('.box').height() - height - 33;// #formula-wizard-name height - this.panelArgs.height(height); - height = parseInt((height-8)/30) * 30; - this.tableArgs.parent().height(height); - this.scrollerY = new Common.UI.Scroller({ - el: this.tableArgs.parent(), - minScrollbarLength : 20, - alwaysVisibleY: true - }); + this.recalcArgTableSize(); + this.minArgWidth = this.$window.find('#formula-wizard-lbl-func-res').width(); if (this.props) { // fill arguments @@ -162,8 +173,10 @@ define([ this.minArgCount = props.asc_getArgumentMin(); this.maxArgCount = props.asc_getArgumentMax(); - var result = props.asc_getFormulaResult(); - this.lblResult.html('' + this.textValue + ': ' + ((result!==undefined && result!==null)? result : '')); + var result = props.asc_getFunctionResult(); + this.lblFunctionResult.html('= ' + ((result!==undefined && result!==null) ? result : '')); + result = props.asc_getFormulaResult(); + this.lblFormulaResult.html('' + this.textValue + ': ' + ((result!==undefined && result!==null)? result : '')); var argres = props.asc_getArgumentsResult(), argtype = props.asc_getArgumentsType(), @@ -207,6 +220,25 @@ define([ } }, + recalcArgTableSize: function() { + var height = this.panelDesc.outerHeight(); + height = this.$window.find('.box').height() - 7 - height - 60; + height = parseInt(height/30) * 30; + this.tableArgs.parent().css('max-height', height); + if (!this.scrollerY) + this.scrollerY = new Common.UI.Scroller({ + el: this.tableArgs.parent(), + minScrollbarLength : 20, + alwaysVisibleY: true + }); + else + this.scrollerY.update(); + }, + + checkDescriptionSize: function() { + (this.contentPanel.height() < this.innerPanel.height()) && this.recalcArgTableSize(); + }, + fillArgs: function (types, argval, argres) { var argcount = this.args.length; for (var j=0; j
' + '
' + - '
', + '
', div = $(Common.Utils.String.format(argtpl, argcount)); this.tableArgs.append(div); @@ -237,8 +269,10 @@ define([ argres = argres ? argres[index] : undefined; arg.lblValue.html('= '+ (argres!==null && argres !==undefined ? argres : '' + arg.argTypeName + '' )); - res = res ? res.asc_getFormulaResult() : undefined; - me.lblResult.html('' + me.textValue + ': ' + ((res!==undefined && res!==null)? res : '')); + var result = res ? res.asc_getFunctionResult() : undefined; + me.lblFunctionResult.html('= ' + ((result!==undefined && result!==null)? result : '')); + result = res ? res.asc_getFormulaResult() : undefined; + me.lblFormulaResult.html('' + me.textValue + ': ' + ((result!==undefined && result!==null)? result : '')); }); txt.setValue((argval!==undefined && argval!==null) ? argval : ''); @@ -292,6 +326,7 @@ define([ this.fillArgs(this.repeatedArg); this.scrollerY.update(); } + this.checkDescriptionSize(); }, onSelectData: function(input) { @@ -365,12 +400,13 @@ define([ }, close: function () { - Common.UI.Window.prototype.close.call(this); + Common.Views.AdvancedSettingsWindow.prototype.close.call(this); this.api.asc_closeCellEditor(!this._preventCloseCellEditor); }, textTitle: 'Function Argumens', textValue: 'Formula result', + textFunctionRes: 'Function result', textFunction: 'Function', textHelp: 'Help on this function' From f1c4773e29fa9e2b726d8d214c59359d43629924 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 7 May 2020 18:40:58 +0300 Subject: [PATCH 17/92] [SSE] Don't show wizard for functions from quick access menu --- apps/spreadsheeteditor/main/app/controller/FormulaDialog.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js b/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js index ea0ac3ea9..44521f255 100644 --- a/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js +++ b/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js @@ -96,7 +96,7 @@ define([ if (func.origin === 'more') { this.showDialog(group); } else { - this.api.asc_insertInCell(func.name, Asc.c_oAscPopUpSelectorType.FuncWizard, !!autocomplete); + this.api.asc_insertInCell(func.name, autocomplete ? Asc.c_oAscPopUpSelectorType.Func : Asc.c_oAscPopUpSelectorType.FuncWizard, !!autocomplete); !autocomplete && this.updateLast10Formulas(func.origin); } } From d1085286edfcc240c7b2367f2c78472007b044dd Mon Sep 17 00:00:00 2001 From: Alexander Trofimov Date: Tue, 12 May 2020 15:37:52 +0300 Subject: [PATCH 18/92] [SSE] Header/Footer Fix set position on click in header/footer --- apps/spreadsheeteditor/main/app/view/HeaderFooterDialog.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/view/HeaderFooterDialog.js b/apps/spreadsheeteditor/main/app/view/HeaderFooterDialog.js index a407b64cd..4aaed457f 100644 --- a/apps/spreadsheeteditor/main/app/view/HeaderFooterDialog.js +++ b/apps/spreadsheeteditor/main/app/view/HeaderFooterDialog.js @@ -770,9 +770,7 @@ define([ } 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()); + this.HFObject.click(id, event.pageX, event.pageY); } else this.HFObject.click(id); From ef30e2360f720f656dd27dab7c8010078849af5a Mon Sep 17 00:00:00 2001 From: Alexander Trofimov Date: Tue, 12 May 2020 17:54:22 +0300 Subject: [PATCH 19/92] [SSE] Wizard Rename FunctionWizard -> Function --- apps/spreadsheeteditor/main/app/view/FormulaWizard.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js index 3f3f006c7..b18a6e33b 100644 --- a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js +++ b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js @@ -352,7 +352,7 @@ define([ win.setSettings({ api : me.api, range : !_.isEmpty(input.getValue()) ? input.getValue() : '', - type : Asc.c_oAscSelectionDialogType.FunctionWizard + type : Asc.c_oAscSelectionDialogType.Function }); } }, From b377c5b10bac665e905a206fb718689a8f9d2654 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 15 May 2020 12:39:06 +0300 Subject: [PATCH 20/92] [SSE] Refactoring formula wizard --- .../spreadsheeteditor/main/app/view/FormulaWizard.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js index b18a6e33b..7fb366554 100644 --- a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js +++ b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js @@ -264,7 +264,9 @@ define([ if (newValue == oldValue) return; var index = input.options.index, arg = me.args[index], - res = me.api.asc_insertFormulaArgument(newValue, index, arg.argType), + values = me.getArgumentsValue(); + values[index] = newValue; + var res = me.api.asc_insertArgumentsInFormula(values, index, arg.argType), argres = res ? res.asc_getArgumentsResult() : undefined; argres = argres ? argres[index] : undefined; arg.lblValue.html('= '+ (argres!==null && argres !==undefined ? argres : '' + arg.argTypeName + '' )); @@ -296,6 +298,14 @@ define([ me.args[argcount].lblValue.html('= '+ ( argres!==null && argres!==undefined ? argres : '' + me.args[argcount].argTypeName + '')); }, + getArgumentsValue: function() { + var res = []; + this.args.forEach(function(item){ + res.push(item.argInput.getValue()); + }); + return res; + }, + getArgType: function(type) { var str = ''; switch (type) { From ba775c9929261cdd8c703e276365b17cef92b1b8 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 15 May 2020 13:07:47 +0300 Subject: [PATCH 21/92] [SSE] Refactoring --- .../spreadsheeteditor/main/app/view/FormulaWizard.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js index 7fb366554..b587818df 100644 --- a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js +++ b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js @@ -299,10 +299,14 @@ define([ }, getArgumentsValue: function() { - var res = []; - this.args.forEach(function(item){ - res.push(item.argInput.getValue()); - }); + var res = [], + len = this.args.length, + empty = true; + for (var i=len-1; i>=0; i--) { + var val = this.args[i].argInput.getValue(); + empty && (empty = !val); + (!empty) && (res[i] = val); + } return res; }, From 1d2dd63f420975bf1546b57cbf59967776d8cf58 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 15 May 2020 13:57:28 +0300 Subject: [PATCH 22/92] [SSE] Fix formula arguments --- apps/spreadsheeteditor/main/app/view/FormulaWizard.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js index b587818df..ec019f0eb 100644 --- a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js +++ b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js @@ -265,7 +265,7 @@ define([ var index = input.options.index, arg = me.args[index], values = me.getArgumentsValue(); - values[index] = newValue; + (index Date: Fri, 15 May 2020 17:27:20 +0300 Subject: [PATCH 23/92] [SSE] Fix range for formula argument --- .../main/app/view/CellRangeDialog.js | 33 +++++++++++++++++-- .../main/app/view/FormulaWizard.js | 3 +- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/view/CellRangeDialog.js b/apps/spreadsheeteditor/main/app/view/CellRangeDialog.js index 19c89d13b..d1f5a5d19 100644 --- a/apps/spreadsheeteditor/main/app/view/CellRangeDialog.js +++ b/apps/spreadsheeteditor/main/app/view/CellRangeDialog.js @@ -107,6 +107,7 @@ define([ if (settings.type===undefined) settings.type = Asc.c_oAscSelectionDialogType.Chart; + this.type = settings.type; if (settings.api) { me.api = settings.api; @@ -121,10 +122,24 @@ define([ if (settings.validation) { return settings.validation.call(me, value); } else { - var isvalid = me.api.asc_checkDataRange(settings.type, value, false); + var isvalid = (settings.type === Asc.c_oAscSelectionDialogType.Function) || me.api.asc_checkDataRange(settings.type, value, false); return (isvalid==Asc.c_oAscError.ID.DataRangeError) ? me.txtInvalidRange : true; } }; + + if (me.type == Asc.c_oAscSelectionDialogType.Function) { + _.delay(function(){ + me.inputRange._input.focus(); + if (settings.selection) { + me.inputRange._input[0].selectionStart = settings.selection.start; + me.inputRange._input[0].selectionEnd = settings.selection.end; + } + },10); + me.inputRange._input.on('focus', function() { + me._addedTextLength=0; + // call api method to stop selecting cells + }); + } }, getSettings: function () { @@ -132,7 +147,21 @@ define([ }, onApiRangeChanged: function(info) { - this.inputRange.setValue(info.asc_getName()); + var name = info.asc_getName(); + if (this.type == Asc.c_oAscSelectionDialogType.Function) { + var oldlen = this._addedTextLength || 0, + val = this.inputRange.getValue(), + input = this.inputRange._input[0], + start = input.selectionStart - oldlen, + end = input.selectionEnd, + add = (start>0 && oldlen==0) && !this.api.asc_canEnterWizardRange(val.charAt(start-1)) ? '+' : ''; + this._addedTextLength = name.length; + + val = val.substring(0, start) + add + name + val.substring(end, val.length); + this.inputRange.setValue(val); + input.selectionStart = input.selectionEnd = start + add.length + this._addedTextLength; + } else + this.inputRange.setValue(name); if (this.inputRange.cmpEl.hasClass('error')) this.inputRange.cmpEl.removeClass('error'); }, diff --git a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js index ec019f0eb..ff9589c99 100644 --- a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js +++ b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js @@ -366,7 +366,8 @@ define([ win.setSettings({ api : me.api, range : !_.isEmpty(input.getValue()) ? input.getValue() : '', - type : Asc.c_oAscSelectionDialogType.Function + type : Asc.c_oAscSelectionDialogType.Function, + selection: {start: input._input[0].selectionStart, end: input._input[0].selectionEnd} }); } }, From 4dc6c6bfc95e9451695383c1babe7049c57c8e9a Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 15 May 2020 19:09:36 +0300 Subject: [PATCH 24/92] [SSE] Change data range selection --- apps/spreadsheeteditor/main/app/view/CellRangeDialog.js | 3 +-- .../spreadsheeteditor/main/app/view/TableOptionsDialog.js | 8 +++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/view/CellRangeDialog.js b/apps/spreadsheeteditor/main/app/view/CellRangeDialog.js index d1f5a5d19..32aea4bcb 100644 --- a/apps/spreadsheeteditor/main/app/view/CellRangeDialog.js +++ b/apps/spreadsheeteditor/main/app/view/CellRangeDialog.js @@ -146,8 +146,7 @@ define([ return this.inputRange.getValue(); }, - onApiRangeChanged: function(info) { - var name = info.asc_getName(); + onApiRangeChanged: function(name) { if (this.type == Asc.c_oAscSelectionDialogType.Function) { var oldlen = this._addedTextLength || 0, val = this.inputRange.getValue(), diff --git a/apps/spreadsheeteditor/main/app/view/TableOptionsDialog.js b/apps/spreadsheeteditor/main/app/view/TableOptionsDialog.js index 065dbd94d..ff2a53ef0 100644 --- a/apps/spreadsheeteditor/main/app/view/TableOptionsDialog.js +++ b/apps/spreadsheeteditor/main/app/view/TableOptionsDialog.js @@ -149,11 +149,10 @@ define([ return { selectionType: this.selectionType, range: this.inputRange.getValue()}; }, - onApiRangeChanged: function(info) { - this.inputRange.setValue(info.asc_getName()); + onApiRangeChanged: function(name) { + this.inputRange.setValue(name); if (this.inputRange.cmpEl.hasClass('error')) this.inputRange.cmpEl.removeClass('error'); - this.selectionType = info.asc_getType(); }, isRangeValid: function() { @@ -174,6 +173,9 @@ define([ case Asc.c_oAscError.ID.MultiCellsInTablesFormulaArray: Common.UI.warning({msg: this.errorMultiCellFormula}); break; + case Asc.c_oAscError.ID.LargeRangeWarning: + this.selectionType = Asc.c_oAscSelectionType.RangeMax; + return true; } } return false; From 2d1b26a6aa01b64c873d9ffdfd93e082f2d085d1 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 18 May 2020 12:00:19 +0300 Subject: [PATCH 25/92] [SSE] Refactoring range selection --- apps/spreadsheeteditor/main/app/view/CellRangeDialog.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/spreadsheeteditor/main/app/view/CellRangeDialog.js b/apps/spreadsheeteditor/main/app/view/CellRangeDialog.js index 32aea4bcb..8fbf065e6 100644 --- a/apps/spreadsheeteditor/main/app/view/CellRangeDialog.js +++ b/apps/spreadsheeteditor/main/app/view/CellRangeDialog.js @@ -137,7 +137,7 @@ define([ },10); me.inputRange._input.on('focus', function() { me._addedTextLength=0; - // call api method to stop selecting cells + me.api.asc_cleanSelectRange(); }); } }, From 709cf9fb792021f1a44aba64775ba3859f913bcc Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 18 May 2020 14:00:10 +0300 Subject: [PATCH 26/92] [SSE] Refactoring range selection --- .../main/app/controller/DocumentHolder.js | 4 ++-- .../main/app/view/CellRangeDialog.js | 13 ++++++++++--- .../main/app/view/FormulaWizard.js | 10 +++++----- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js index 734445dfb..984e32387 100644 --- a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js +++ b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js @@ -258,7 +258,7 @@ define([ click: function(e) { if (me.api) { me.api.isTextAreaBlur = false; - if (e.target.localName == 'canvas' && !me.isEditFormula) { + if (e.target.localName == 'canvas' && (!me.isEditFormula || me.rangeSelectionMode)) { if (me._preventClick) me._preventClick = false; else @@ -2030,7 +2030,7 @@ define([ }, onFormulaCompleteMenu: function(funcarr) { - if (!this.documentHolder.funcMenu || Common.Utils.ModalWindow.isVisible()) return; + if (!this.documentHolder.funcMenu || Common.Utils.ModalWindow.isVisible() || this.rangeSelectionMode) return; if (funcarr) { var me = this, diff --git a/apps/spreadsheeteditor/main/app/view/CellRangeDialog.js b/apps/spreadsheeteditor/main/app/view/CellRangeDialog.js index 8fbf065e6..151a76efa 100644 --- a/apps/spreadsheeteditor/main/app/view/CellRangeDialog.js +++ b/apps/spreadsheeteditor/main/app/view/CellRangeDialog.js @@ -103,11 +103,11 @@ define([ setSettings: function(settings) { var me = this; + this.settings = settings; this.inputRange.setValue(settings.range ? settings.range : ''); if (settings.type===undefined) settings.type = Asc.c_oAscSelectionDialogType.Chart; - this.type = settings.type; if (settings.api) { me.api = settings.api; @@ -122,12 +122,16 @@ define([ if (settings.validation) { return settings.validation.call(me, value); } else { + if (settings.type === Asc.c_oAscSelectionDialogType.Function) { + settings.argvalues[settings.argindex] = value; + me.api.asc_insertArgumentsInFormula(settings.argvalues); + } var isvalid = (settings.type === Asc.c_oAscSelectionDialogType.Function) || me.api.asc_checkDataRange(settings.type, value, false); return (isvalid==Asc.c_oAscError.ID.DataRangeError) ? me.txtInvalidRange : true; } }; - if (me.type == Asc.c_oAscSelectionDialogType.Function) { + if (settings.type == Asc.c_oAscSelectionDialogType.Function) { _.delay(function(){ me.inputRange._input.focus(); if (settings.selection) { @@ -147,7 +151,7 @@ define([ }, onApiRangeChanged: function(name) { - if (this.type == Asc.c_oAscSelectionDialogType.Function) { + if (this.settings.type == Asc.c_oAscSelectionDialogType.Function) { var oldlen = this._addedTextLength || 0, val = this.inputRange.getValue(), input = this.inputRange._input[0], @@ -159,6 +163,9 @@ define([ val = val.substring(0, start) + add + name + val.substring(end, val.length); this.inputRange.setValue(val); input.selectionStart = input.selectionEnd = start + add.length + this._addedTextLength; + + this.settings.argvalues[this.settings.argindex] = val; + this.api.asc_insertArgumentsInFormula(this.settings.argvalues); } else this.inputRange.setValue(name); if (this.inputRange.cmpEl.hasClass('error')) diff --git a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js index ff9589c99..3717d4f13 100644 --- a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js +++ b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js @@ -263,10 +263,8 @@ define([ }).on('changing', function(input, newValue, oldValue, e) { if (newValue == oldValue) return; var index = input.options.index, - arg = me.args[index], - values = me.getArgumentsValue(); - (index' + arg.argTypeName + '' )); @@ -367,7 +365,9 @@ define([ api : me.api, range : !_.isEmpty(input.getValue()) ? input.getValue() : '', type : Asc.c_oAscSelectionDialogType.Function, - selection: {start: input._input[0].selectionStart, end: input._input[0].selectionEnd} + selection: {start: input._input[0].selectionStart, end: input._input[0].selectionEnd}, + argvalues : me.getArgumentsValue(), + argindex : input.options.index }); } }, From 3799f6ecdb3a876e273a979f5d00b64df6ff5c7c Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 18 May 2020 20:01:28 +0300 Subject: [PATCH 27/92] [SSE] Fix formula arguments --- .../main/app/view/FormulaWizard.js | 37 +++++++++++-------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js index 3717d4f13..f19c4ec1c 100644 --- a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js +++ b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js @@ -259,25 +259,12 @@ define([ validateOnChange: true, validateOnBlur: false }).on('changed:after', function(input, newValue, oldValue, e) { - if (newValue == oldValue) return; }).on('changing', function(input, newValue, oldValue, e) { if (newValue == oldValue) return; - var index = input.options.index, - arg = me.args[index]; - var res = me.api.asc_insertArgumentsInFormula(me.getArgumentsValue(), index, arg.argType), - argres = res ? res.asc_getArgumentsResult() : undefined; - argres = argres ? argres[index] : undefined; - arg.lblValue.html('= '+ (argres!==null && argres !==undefined ? argres : '' + arg.argTypeName + '' )); - - var result = res ? res.asc_getFunctionResult() : undefined; - me.lblFunctionResult.html('= ' + ((result!==undefined && result!==null)? result : '')); - result = res ? res.asc_getFormulaResult() : undefined; - me.lblFormulaResult.html('' + me.textValue + ': ' + ((result!==undefined && result!==null)? result : '')); - - }); + me.onInputChanging(input, newValue, oldValue); + }).on('button:click', _.bind(this.onSelectData, this)); txt.setValue((argval!==undefined && argval!==null) ? argval : ''); txt._input.on('focus', _.bind(this.onSelectArgument, this, txt)); - txt.on('button:click', _.bind(this.onSelectData, this)); me.args.push({ index: argcount, @@ -296,6 +283,21 @@ define([ me.args[argcount].lblValue.html('= '+ ( argres!==null && argres!==undefined ? argres : '' + me.args[argcount].argTypeName + '')); }, + onInputChanging: function(input, newValue, oldValue, e) { + var me = this, + index = input.options.index, + arg = me.args[index]; + var res = me.api.asc_insertArgumentsInFormula(me.getArgumentsValue(), index, arg.argType), + argres = res ? res.asc_getArgumentsResult() : undefined; + argres = argres ? argres[index] : undefined; + arg.lblValue.html('= '+ (argres!==null && argres !==undefined ? argres : '' + arg.argTypeName + '' )); + + var result = res ? res.asc_getFunctionResult() : undefined; + me.lblFunctionResult.html('= ' + ((result!==undefined && result!==null)? result : '')); + result = res ? res.asc_getFormulaResult() : undefined; + me.lblFormulaResult.html('' + me.textValue + ': ' + ((result!==undefined && result!==null)? result : '')); + }, + getArgumentsValue: function() { var res = [], len = this.args.length, @@ -346,15 +348,18 @@ define([ var me = this; if (me.api) { + var changedValue = input.getValue(); var handlerDlg = function(dlg, result) { if (result == 'ok') { - input.setValue(dlg.getSettings()); + changedValue = dlg.getSettings(); } }; var win = new SSE.Views.CellRangeDialog({ handler: handlerDlg }).on('close', function() { + input.setValue(changedValue); + me.onInputChanging(input); me.show(); }); From 8d55696180d4e299a86691dbd4cc18da0299e599 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 18 May 2020 20:17:25 +0300 Subject: [PATCH 28/92] [SSE] Set empty range for function arguments --- apps/spreadsheeteditor/main/app/view/CellRangeDialog.js | 2 +- apps/spreadsheeteditor/main/app/view/FormulaWizard.js | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/spreadsheeteditor/main/app/view/CellRangeDialog.js b/apps/spreadsheeteditor/main/app/view/CellRangeDialog.js index 151a76efa..de07e7116 100644 --- a/apps/spreadsheeteditor/main/app/view/CellRangeDialog.js +++ b/apps/spreadsheeteditor/main/app/view/CellRangeDialog.js @@ -81,7 +81,7 @@ define([ el : $('#id-dlg-cell-range'), name : 'range', style : 'width: 100%;', - allowBlank : false, + allowBlank : this.options.allowBlank || false, blankError : this.txtEmpty, validateOnChange: true }); diff --git a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js index f19c4ec1c..8398990da 100644 --- a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js +++ b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js @@ -356,6 +356,7 @@ define([ }; var win = new SSE.Views.CellRangeDialog({ + allowBlank: true, handler: handlerDlg }).on('close', function() { input.setValue(changedValue); From f8053e0770f92ba323fe29d7048a609305a50969 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 21 May 2020 12:12:32 +0300 Subject: [PATCH 29/92] [SSE] use asc_startWizard --- .../spreadsheeteditor/main/app/controller/FormulaDialog.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js b/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js index 44521f255..25cb50b7c 100644 --- a/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js +++ b/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js @@ -96,7 +96,10 @@ define([ if (func.origin === 'more') { this.showDialog(group); } else { - this.api.asc_insertInCell(func.name, autocomplete ? Asc.c_oAscPopUpSelectorType.Func : Asc.c_oAscPopUpSelectorType.FuncWizard, !!autocomplete); + if (autocomplete) + this.api.asc_insertInCell(func.name, Asc.c_oAscPopUpSelectorType.Func, !!autocomplete); + else + this.api.asc_startWizard(func.name); !autocomplete && this.updateLast10Formulas(func.origin); } } @@ -219,7 +222,7 @@ define([ } } this._formulagroup = group; - this.api.asc_preInsertFormula(); + this.api.asc_startWizard(); } }, From 84cbbf98131fe2a26e5d322dfbc31686547c6971 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 21 May 2020 19:30:57 +0300 Subject: [PATCH 30/92] Add parameters to api customization: macros (can run macros in document), plugins (can run plugins in document), showMacrosWarning (warn about macros in document). --- apps/api/documents/api.js | 5 ++- apps/common/main/lib/component/Window.js | 3 +- .../main/app/controller/Main.js | 40 ++++++++++++++++++- 3 files changed, 45 insertions(+), 3 deletions(-) diff --git a/apps/api/documents/api.js b/apps/api/documents/api.js index 0f8d84ec8..21fe1e65d 100644 --- a/apps/api/documents/api.js +++ b/apps/api/documents/api.js @@ -134,7 +134,10 @@ spellcheck: true, compatibleFeatures: false, unit: 'cm' // cm, pt, inch, - mentionShare : true // customize tooltip for mention + mentionShare : true // customize tooltip for mention, + macros: true // can run macros in document + plugins: true // can run plugins in document + showMacrosWarning: true // warn about automatic macros }, plugins: { autostart: ['asc.{FFE1F462-1EA2-4391-990D-4CC84940B754}'], diff --git a/apps/common/main/lib/component/Window.js b/apps/common/main/lib/component/Window.js index 0d2a153c8..c3a142c65 100644 --- a/apps/common/main/lib/component/Window.js +++ b/apps/common/main/lib/component/Window.js @@ -136,7 +136,8 @@ var Common = {}; define([ - 'common/main/lib/component/BaseView' + 'common/main/lib/component/BaseView', + 'common/main/lib/component/CheckBox' ], function () { 'use strict'; diff --git a/apps/documenteditor/main/app/controller/Main.js b/apps/documenteditor/main/app/controller/Main.js index 4a093b4c0..25ef20ec5 100644 --- a/apps/documenteditor/main/app/controller/Main.js +++ b/apps/documenteditor/main/app/controller/Main.js @@ -415,6 +415,11 @@ define([ docInfo.put_Token(data.doc.token); docInfo.put_Permissions(_permissions); docInfo.put_EncryptedInfo(this.editorConfig.encryptionKeys); + + var enable = !this.editorConfig.customization || (this.editorConfig.customization.macros!==false); + docInfo.asc_putIsEnabledMacroses(!!enable); + enable = !this.editorConfig.customization || (this.editorConfig.customization.plugins!==false); + docInfo.asc_putIsEnabledPlugins(!!enable); // docInfo.put_Review(this.permissions.review); var type = /^(?:(pdf|djvu|xps))$/.exec(data.doc.fileType); @@ -425,6 +430,7 @@ define([ this.api.asc_registerCallback('asc_onGetEditorPermissions', _.bind(this.onEditorPermissions, this)); this.api.asc_registerCallback('asc_onLicenseChanged', _.bind(this.onLicenseChanged, this)); + this.api.asc_registerCallback('asc_onRunAutostartMacroses', _.bind(this.onRunAutostartMacroses, this)); this.api.asc_setDocInfo(docInfo); this.api.asc_getEditorPermissions(this.editorConfig.licenseUrl, this.editorConfig.customerId); @@ -2236,6 +2242,36 @@ define([ Common.Utils.warningDocumentIsLocked({disablefunc: _disable_ui}); }, + onRunAutostartMacroses: function() { + var me = this, + enable = !this.editorConfig.customization || (this.editorConfig.customization.macros!==false); + if (enable) { + if (!this.editorConfig.customization || (this.editorConfig.customization.showMacrosWarning!==false)) { + var value = Common.localStorage.getItem("de-macros-start"); + if (value===null) { + Common.UI.warning({ + msg: this.textHasMacros + '
', + buttons: ['yes', 'no'], + primary: 'yes', + dontshow: true, + textDontShow: this.textRemember, + callback: function(btn, dontshow){ + if (dontshow) + Common.localStorage.setItem("de-macros-start", (btn == 'yes') ? 1 : 0); + if (btn == 'yes') { + setTimeout(function() { + me.api.asc_runAutostartMacroses(); + }, 1); + } + } + }); + } else if (parseInt(value)==1) + this.api.asc_runAutostartMacroses(); + } else + this.api.asc_runAutostartMacroses(); + } + }, + leavePageText: 'You have unsaved changes in this document. Click \'Stay on this Page\' then \'Save\' to save them. Click \'Leave this Page\' to discard all the unsaved changes.', criticalErrorTitle: 'Error', notcriticalErrorTitle: 'Warning', @@ -2587,7 +2623,9 @@ define([ textApplyAll: 'Apply to all equations', textLearnMore: 'Learn More', txtEnterDate: 'Enter a date.', - txtTypeEquation: 'Type equation here.' + txtTypeEquation: 'Type equation here.', + textHasMacros: 'The file contains automatic macros.
Do you want to run macros?', + textRemember: 'Remember my choice' } })(), DE.Controllers.Main || {})) }); \ No newline at end of file From 412d53bc0bd314fe891c452cbd0fde63d6b7b5fc Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 21 May 2020 20:43:18 +0300 Subject: [PATCH 31/92] [SSE] Function wizard: hide argument description --- apps/spreadsheeteditor/main/app/view/FormulaWizard.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js index 8398990da..068b8ef96 100644 --- a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js +++ b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js @@ -46,7 +46,7 @@ define([ SSE.Views.FormulaWizard = Common.Views.AdvancedSettingsWindow.extend(_.extend({ options: { contentWidth: 580, - height: 420 + height: 397 }, initialize : function(options) { @@ -74,7 +74,7 @@ define([ '', '', '
', - '', + // '', '', '', '', @@ -222,7 +222,7 @@ define([ recalcArgTableSize: function() { var height = this.panelDesc.outerHeight(); - height = this.$window.find('.box').height() - 7 - height - 60; + height = this.$window.find('.box').height() - 7 - height - 54; height = parseInt(height/30) * 30; this.tableArgs.parent().css('max-height', height); if (!this.scrollerY) @@ -272,7 +272,7 @@ define([ lblValue: div.find('#formula-wizard-lbl-val-arg'+argcount), argInput: txt, argName: 'Argument ' + (argcount+1), - argDesc: 'some argument description', + // argDesc: 'some argument description', argType: argtype, argTypeName: me.getArgType(argtype) }); From 828f604dd1199e6a947e1a1b24b3d07e4a0c98ec Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 21 May 2020 20:46:37 +0300 Subject: [PATCH 32/92] [SSE] Add translation --- apps/spreadsheeteditor/main/locale/en.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/spreadsheeteditor/main/locale/en.json b/apps/spreadsheeteditor/main/locale/en.json index ef9ccb5ed..88a9a3290 100644 --- a/apps/spreadsheeteditor/main/locale/en.json +++ b/apps/spreadsheeteditor/main/locale/en.json @@ -1751,6 +1751,11 @@ "SSE.Views.FormulaTab.txtFormulaTip": "Insert function", "SSE.Views.FormulaTab.txtMore": "More functions", "SSE.Views.FormulaTab.txtRecent": "Recently used", + "SSE.Views.FormulaWizard.textTitle": "Function Argumens", + "SSE.Views.FormulaWizard.textValue": "Formula result", + "SSE.Views.FormulaWizard.textFunctionRes": "Function result", + "SSE.Views.FormulaWizard.textFunction": "Function", + "SSE.Views.FormulaWizard.textHelp": "Help on this function", "SSE.Views.GroupDialog.textColumns": "Columns", "SSE.Views.GroupDialog.textRows": "Rows", "SSE.Views.HeaderFooterDialog.textAlign": "Align with page margins", From 5766138138a454f570317dfee0ed7b9806c0372c Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 21 May 2020 22:50:18 +0300 Subject: [PATCH 33/92] [DE] Add settings for macros --- apps/api/documents/api.js | 2 +- .../main/app/controller/Main.js | 53 +++++++++++-------- .../main/app/view/FileMenuPanels.js | 40 +++++++++++++- 3 files changed, 71 insertions(+), 24 deletions(-) diff --git a/apps/api/documents/api.js b/apps/api/documents/api.js index 21fe1e65d..57fab51b9 100644 --- a/apps/api/documents/api.js +++ b/apps/api/documents/api.js @@ -137,7 +137,7 @@ mentionShare : true // customize tooltip for mention, macros: true // can run macros in document plugins: true // can run plugins in document - showMacrosWarning: true // warn about automatic macros + macrosMode: 'warn' // warn about automatic macros, 'enable', 'disable', 'warn' }, plugins: { autostart: ['asc.{FFE1F462-1EA2-4391-990D-4CC84940B754}'], diff --git a/apps/documenteditor/main/app/controller/Main.js b/apps/documenteditor/main/app/controller/Main.js index 25ef20ec5..0ce06a80a 100644 --- a/apps/documenteditor/main/app/controller/Main.js +++ b/apps/documenteditor/main/app/controller/Main.js @@ -384,6 +384,14 @@ define([ $('#editor-container').append('
' + '
'.repeat(20) + '
'); } + var value = Common.localStorage.getItem("de-macros-mode"); + if (value === null) { + value = this.editorConfig.customization ? this.editorConfig.customization.macrosMode : 'warn'; + value = (value == 'enable') ? 1 : (value == 'disable' ? 2 : 0); + } else + value = parseInt(value); + Common.Utils.InternalSettings.set("de-macros-mode", value); + Common.Controllers.Desktop.init(this.appOptions); }, @@ -2246,29 +2254,30 @@ define([ var me = this, enable = !this.editorConfig.customization || (this.editorConfig.customization.macros!==false); if (enable) { - if (!this.editorConfig.customization || (this.editorConfig.customization.showMacrosWarning!==false)) { - var value = Common.localStorage.getItem("de-macros-start"); - if (value===null) { - Common.UI.warning({ - msg: this.textHasMacros + '
', - buttons: ['yes', 'no'], - primary: 'yes', - dontshow: true, - textDontShow: this.textRemember, - callback: function(btn, dontshow){ - if (dontshow) - Common.localStorage.setItem("de-macros-start", (btn == 'yes') ? 1 : 0); - if (btn == 'yes') { - setTimeout(function() { - me.api.asc_runAutostartMacroses(); - }, 1); - } - } - }); - } else if (parseInt(value)==1) - this.api.asc_runAutostartMacroses(); - } else + var value = Common.Utils.InternalSettings.get("de-macros-mode"); + if (value==1) this.api.asc_runAutostartMacroses(); + else if (value === 0) { + Common.UI.warning({ + msg: this.textHasMacros + '
', + buttons: ['yes', 'no'], + primary: 'yes', + dontshow: true, + textDontShow: this.textRemember, + callback: function(btn, dontshow){ + if (dontshow) { + Common.Utils.InternalSettings.set("de-macros-mode", (btn == 'yes') ? 1 : 2); + Common.localStorage.setItem("de-macros-mode", (btn == 'yes') ? 1 : 2); + } + if (btn == 'yes') { + setTimeout(function() { + me.api.asc_runAutostartMacroses(); + }, 1); + } + } + }); + + } } }, diff --git a/apps/documenteditor/main/app/view/FileMenuPanels.js b/apps/documenteditor/main/app/view/FileMenuPanels.js index dc049fcd0..116bbb5f2 100644 --- a/apps/documenteditor/main/app/view/FileMenuPanels.js +++ b/apps/documenteditor/main/app/view/FileMenuPanels.js @@ -234,6 +234,12 @@ define([ '', '', '','', + '', + '', + '', + '
', + '
', + '','', '', '', '', @@ -388,6 +394,21 @@ define([ ] }); + this.cmbMacros = new Common.UI.ComboBox({ + el : $markup.findById('#fms-cmb-macros'), + style : 'width: 160px;', + editable : false, + cls : 'input-group-nr', + data : [ + { value: 2, displayValue: this.txtStopMacros, descValue: this.txtStopMacrosDesc }, + { value: 0, displayValue: this.txtWarnMacros, descValue: this.txtWarnMacrosDesc }, + { value: 1, displayValue: this.txtRunMacros, descValue: this.txtRunMacrosDesc } + ] + }).on('selected', function(combo, record) { + me.lblMacrosDesc.text(record.descValue); + }); + this.lblMacrosDesc = $markup.findById('#fms-lbl-macros'); + this.btnApply = new Common.UI.Button({ el: $markup.findById('#fms-btn-apply') }); @@ -425,6 +446,8 @@ define([ $('tr.coauth.changes', this.el)[mode.isEdit && !mode.isOffline && mode.canCoAuthoring ? 'show' : 'hide'](); $('tr.comments', this.el)[mode.canCoAuthoring ? 'show' : 'hide'](); /** coauthoring end **/ + + $('tr.macros', this.el)[(mode.customization && mode.customization.macros===false) ? 'hide' : 'show'](); }, updateSettings: function() { @@ -475,6 +498,10 @@ define([ this.chSpell.setValue(Common.Utils.InternalSettings.get("de-settings-spellcheck")); this.chAlignGuides.setValue(Common.Utils.InternalSettings.get("de-settings-showsnaplines")); this.chCompatible.setValue(Common.Utils.InternalSettings.get("de-settings-compatible")); + + item = this.cmbMacros.store.findWhere({value: Common.Utils.InternalSettings.get("de-macros-mode")}); + this.cmbMacros.setValue(item ? item.get('value') : 0); + this.lblMacrosDesc.text(item ? item.get('descValue') : this.txtWarnMacrosDesc); }, applySettings: function() { @@ -501,6 +528,10 @@ define([ Common.localStorage.setItem("de-settings-compatible", this.chCompatible.isChecked() ? 1 : 0); Common.Utils.InternalSettings.set("de-settings-compatible", this.chCompatible.isChecked() ? 1 : 0); Common.Utils.InternalSettings.set("de-settings-showsnaplines", this.chAlignGuides.isChecked()); + + Common.localStorage.setItem("de-macros-mode", this.cmbMacros.getValue()); + Common.Utils.InternalSettings.set("de-macros-mode", Common.localStorage.getItem("de-macros-mode")); + Common.localStorage.save(); if (this.menu) { @@ -575,7 +606,14 @@ define([ strResolvedComment: 'Turn on display of the resolved comments', textCompatible: 'Compatibility', textOldVersions: 'Make the files compatible with older MS Word versions when saved as DOCX', - txtCacheMode: 'Default cache mode' + txtCacheMode: 'Default cache mode', + strMacrosSettings: 'Macros Settings', + txtWarnMacros: 'Show Notification', + txtRunMacros: 'Enable All', + txtStopMacros: 'Disable All', + txtWarnMacrosDesc: 'Disable all macros with notification', + txtRunMacrosDesc: 'Enable all macros without notification', + txtStopMacrosDesc: 'Disable all macros without notification' }, DE.Views.FileMenuPanels.Settings || {})); DE.Views.FileMenuPanels.RecentFiles = Common.UI.BaseView.extend({ From 10d596be293cd5719c504568232393bafff4099d Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 21 May 2020 23:07:41 +0300 Subject: [PATCH 34/92] [DE] Add api parameter customization.plugins: hide plugins panel when false --- apps/common/main/lib/controller/Plugins.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/apps/common/main/lib/controller/Plugins.js b/apps/common/main/lib/controller/Plugins.js index 457d49081..8bf8ff38a 100644 --- a/apps/common/main/lib/controller/Plugins.js +++ b/apps/common/main/lib/controller/Plugins.js @@ -151,15 +151,17 @@ define([ setApi: function(api) { this.api = api; - this.api.asc_registerCallback("asc_onPluginShow", _.bind(this.onPluginShow, this)); - this.api.asc_registerCallback("asc_onPluginClose", _.bind(this.onPluginClose, this)); - this.api.asc_registerCallback("asc_onPluginResize", _.bind(this.onPluginResize, this)); - this.api.asc_registerCallback("asc_onPluginMouseUp", _.bind(this.onPluginMouseUp, this)); - this.api.asc_registerCallback("asc_onPluginMouseMove", _.bind(this.onPluginMouseMove, this)); - this.api.asc_registerCallback('asc_onPluginsReset', _.bind(this.resetPluginsList, this)); - this.api.asc_registerCallback('asc_onPluginsInit', _.bind(this.onPluginsInit, this)); + if (!this.appOptions.customization || (this.appOptions.customization.plugins!==false)) { + this.api.asc_registerCallback("asc_onPluginShow", _.bind(this.onPluginShow, this)); + this.api.asc_registerCallback("asc_onPluginClose", _.bind(this.onPluginClose, this)); + this.api.asc_registerCallback("asc_onPluginResize", _.bind(this.onPluginResize, this)); + this.api.asc_registerCallback("asc_onPluginMouseUp", _.bind(this.onPluginMouseUp, this)); + this.api.asc_registerCallback("asc_onPluginMouseMove", _.bind(this.onPluginMouseMove, this)); + this.api.asc_registerCallback('asc_onPluginsReset', _.bind(this.resetPluginsList, this)); + this.api.asc_registerCallback('asc_onPluginsInit', _.bind(this.onPluginsInit, this)); - this.loadPlugins(); + this.loadPlugins(); + } return this; }, From c9d810dc037c35bc9c66060f166a7515a5a047f2 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 22 May 2020 15:04:55 +0300 Subject: [PATCH 35/92] [DE mobile][DE embedded] Add parameters to api customization: macros, plugins --- apps/documenteditor/embed/js/ApplicationController.js | 11 +++++++++++ apps/documenteditor/mobile/app/controller/Main.js | 11 +++++++++++ 2 files changed, 22 insertions(+) diff --git a/apps/documenteditor/embed/js/ApplicationController.js b/apps/documenteditor/embed/js/ApplicationController.js index dffc44187..0e7c5c288 100644 --- a/apps/documenteditor/embed/js/ApplicationController.js +++ b/apps/documenteditor/embed/js/ApplicationController.js @@ -100,6 +100,11 @@ DE.ApplicationController = new(function(){ docInfo.put_Token(docConfig.token); docInfo.put_Permissions(_permissions); + var enable = !config.customization || (config.customization.macros!==false); + docInfo.asc_putIsEnabledMacroses(!!enable); + enable = !config.customization || (config.customization.plugins!==false); + docInfo.asc_putIsEnabledPlugins(!!enable); + var type = /^(?:(pdf|djvu|xps))$/.exec(docConfig.fileType); if (type && typeof type[1] === 'string') { permissions.edit = permissions.review = false; @@ -107,6 +112,7 @@ DE.ApplicationController = new(function(){ if (api) { api.asc_registerCallback('asc_onGetEditorPermissions', onEditorPermissions); + api.asc_registerCallback('asc_onRunAutostartMacroses', onRunAutostartMacroses); api.asc_setDocInfo(docInfo); api.asc_getEditorPermissions(config.licenseUrl, config.customerId); api.asc_enableKeyEvents(true); @@ -481,6 +487,11 @@ DE.ApplicationController = new(function(){ if (api) api.asc_DownloadAs(new Asc.asc_CDownloadOptions(Asc.c_oAscFileType.DOCX, true)); } + function onRunAutostartMacroses() { + if (!config.customization || (config.customization.macros!==false)) + if (api) api.asc_runAutostartMacroses(); + } + // Helpers // ------------------------- diff --git a/apps/documenteditor/mobile/app/controller/Main.js b/apps/documenteditor/mobile/app/controller/Main.js index 7de2d59fe..87e527121 100644 --- a/apps/documenteditor/mobile/app/controller/Main.js +++ b/apps/documenteditor/mobile/app/controller/Main.js @@ -255,6 +255,11 @@ define([ docInfo.put_Permissions(_permissions); docInfo.put_EncryptedInfo(this.editorConfig.encryptionKeys); + var enable = !this.editorConfig.customization || (this.editorConfig.customization.macros!==false); + docInfo.asc_putIsEnabledMacroses(!!enable); + enable = !this.editorConfig.customization || (this.editorConfig.customization.plugins!==false); + docInfo.asc_putIsEnabledPlugins(!!enable); + var type = /^(?:(pdf|djvu|xps))$/.exec(data.doc.fileType); if (type && typeof type[1] === 'string') { this.permissions.edit = this.permissions.review = false; @@ -263,6 +268,7 @@ define([ this.api.asc_registerCallback('asc_onGetEditorPermissions', _.bind(this.onEditorPermissions, this)); this.api.asc_registerCallback('asc_onLicenseChanged', _.bind(this.onLicenseChanged, this)); + this.api.asc_registerCallback('asc_onRunAutostartMacroses', _.bind(this.onRunAutostartMacroses, this)); this.api.asc_setDocInfo(docInfo); this.api.asc_getEditorPermissions(this.editorConfig.licenseUrl, this.editorConfig.customerId); @@ -1369,6 +1375,11 @@ define([ return false; }, + onRunAutostartMacroses: function() { + if (!this.editorConfig.customization || (this.editorConfig.customization.macros!==false)) + if (this.api) this.api.asc_runAutostartMacroses(); + }, + leavePageText: 'You have unsaved changes in this document. Click \'Stay on this Page\' to await the autosave of the document. Click \'Leave this Page\' to discard all the unsaved changes.', criticalErrorTitle: 'Error', notcriticalErrorTitle: 'Warning', From 1b915e71556cd12a5edf7218815e76521ffc412d Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 22 May 2020 16:12:25 +0300 Subject: [PATCH 36/92] [DE mobile] Api parameter customization.plugins: don't load plugins when false --- apps/common/mobile/lib/controller/Plugins.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/common/mobile/lib/controller/Plugins.js b/apps/common/mobile/lib/controller/Plugins.js index f4159b109..be083ed4e 100644 --- a/apps/common/mobile/lib/controller/Plugins.js +++ b/apps/common/mobile/lib/controller/Plugins.js @@ -82,7 +82,8 @@ define([ setMode: function(mode) { this.appConfig = mode; - this.loadPlugins(); + if (!this.appConfig.customization || (this.appConfig.customization.plugins!==false)) + this.loadPlugins(); }, From 45bc8b40b03ad26e7d5d3c079d863cbf6c1395db Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Fri, 22 May 2020 16:54:23 +0300 Subject: [PATCH 37/92] [All] jquery 3.5.1 --- vendor/jquery/jquery.js | 1226 +++++++++++++++++++++-------------- vendor/jquery/jquery.min.js | 4 +- vendor/jquery/package.json | 2 +- 3 files changed, 753 insertions(+), 479 deletions(-) diff --git a/vendor/jquery/jquery.js b/vendor/jquery/jquery.js index c06a4506d..e0966d10e 100644 --- a/vendor/jquery/jquery.js +++ b/vendor/jquery/jquery.js @@ -1,5 +1,5 @@ /*! - * jQuery JavaScript Library v3.4.1 + * jQuery JavaScript Library v3.5.1 * https://jquery.com/ * * Includes Sizzle.js @@ -9,7 +9,7 @@ * Released under the MIT license * https://jquery.org/license * - * Date: 2019-05-01T21:04Z + * Date: 2020-05-04T22:49Z */ ( function( global, factory ) { @@ -47,13 +47,16 @@ var arr = []; - var document = window.document; - var getProto = Object.getPrototypeOf; var slice = arr.slice; - var concat = arr.concat; + var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); + } : function( array ) { + return arr.concat.apply( [], array ); + }; + var push = arr.push; @@ -86,6 +89,8 @@ }; + var document = window.document; + var preservedScriptAttributes = { @@ -142,7 +147,7 @@ var - version = "3.4.1", + version = "3.5.1", // Define a local copy of jQuery jQuery = function( selector, context ) { @@ -150,11 +155,7 @@ // The jQuery object is actually just the init constructor 'enhanced' // Need init if jQuery is called (just allow error to be thrown if not included) return new jQuery.fn.init( selector, context ); - }, - - // Support: Android <=4.0 only - // Make sure we trim BOM and NBSP - rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; + }; jQuery.fn = jQuery.prototype = { @@ -220,6 +221,18 @@ return this.eq( -1 ); }, + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + eq: function( i ) { var len = this.length, j = +i + ( i < 0 ? len : 0 ); @@ -353,9 +366,10 @@ return true; }, - // Evaluates a script in a global context - globalEval: function( code, options ) { - DOMEval( code, { nonce: options && options.nonce } ); + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); }, each: function( obj, callback ) { @@ -379,13 +393,6 @@ return obj; }, - // Support: Android <=4.0 only - trim: function( text ) { - return text == null ? - "" : - ( text + "" ).replace( rtrim, "" ); - }, - // results is for internal usage only makeArray: function( arr, results ) { var ret = results || []; @@ -472,7 +479,7 @@ } // Flatten any nested arrays - return concat.apply( [], ret ); + return flat( ret ); }, // A global GUID counter for objects @@ -489,7 +496,7 @@ // Populate the class2type map jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), - function( i, name ) { + function( _i, name ) { class2type[ "[object " + name + "]" ] = name.toLowerCase(); } ); @@ -511,17 +518,16 @@ } var Sizzle = /*! - * Sizzle CSS Selector Engine v2.3.4 + * Sizzle CSS Selector Engine v2.3.5 * https://sizzlejs.com/ * * Copyright JS Foundation and other contributors * Released under the MIT license * https://js.foundation/ * - * Date: 2019-04-08 + * Date: 2020-03-14 */ - (function( window ) { - + ( function( window ) { var i, support, Expr, @@ -561,59 +567,70 @@ }, // Instance methods - hasOwn = ({}).hasOwnProperty, + hasOwn = ( {} ).hasOwnProperty, arr = [], pop = arr.pop, - push_native = arr.push, + pushNative = arr.push, push = arr.push, slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native // https://jsperf.com/thor-indexof-vs-for/5 indexOf = function( list, elem ) { var i = 0, len = list.length; for ( ; i < len; i++ ) { - if ( list[i] === elem ) { + if ( list[ i ] === elem ) { return i; } } return -1; }, - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", // Regular expressions // http://www.w3.org/TR/css3-selectors/#whitespace whitespace = "[\\x20\\t\\r\\n\\f]", - // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier - identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) "*([*^$|!~]?=)" + whitespace + - // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + - "*\\]", + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: // 1. quoted (capture 3; capture 4 or capture 5) "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) ".*" + ")\\)|)", // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), rdescend = new RegExp( whitespace + "|>" ), rpseudo = new RegExp( pseudos ), @@ -625,14 +642,16 @@ "TAG": new RegExp( "^(" + identifier + "|[*])" ), "ATTR": new RegExp( "^" + attributes ), "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + - "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + - "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + - whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) }, rhtml = /HTML$/i, @@ -648,18 +667,21 @@ // CSS escapes // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), - funescape = function( _, escaped, escapedWhitespace ) { - var high = "0x" + escaped - 0x10000; - // NaN means non-codepoint - // Support: Firefox<24 - // Workaround erroneous numeric interpretation of +"0x" - return high !== high || escapedWhitespace ? - escaped : + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair high < 0 ? - // BMP codepoint String.fromCharCode( high + 0x10000 ) : - // Supplemental Plane codepoint (surrogate pair) String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); }, @@ -675,7 +697,8 @@ } // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; } // Other potentially-special ASCII characters get backslash-escaped @@ -700,18 +723,20 @@ // Optimize for push.apply( _, NodeList ) try { push.apply( - (arr = slice.call( preferredDoc.childNodes )), + ( arr = slice.call( preferredDoc.childNodes ) ), preferredDoc.childNodes ); + // Support: Android<4.0 // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions arr[ preferredDoc.childNodes.length ].nodeType; } catch ( e ) { push = { apply: arr.length ? // Leverage slice if possible function( target, els ) { - push_native.apply( target, slice.call(els) ); + pushNative.apply( target, slice.call( els ) ); } : // Support: IE<9 @@ -719,8 +744,9 @@ function( target, els ) { var j = target.length, i = 0; + // Can't trust NodeList.length - while ( (target[j++] = els[i++]) ) {} + while ( ( target[ j++ ] = els[ i++ ] ) ) {} target.length = j - 1; } }; @@ -744,24 +770,21 @@ // Try to shortcut find operations (as opposed to filters) in HTML documents if ( !seed ) { - - if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { - setDocument( context ); - } + setDocument( context ); context = context || document; if ( documentIsHTML ) { // If the selector is sufficiently simple, try using a "get*By*" DOM method // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { // ID selector - if ( (m = match[1]) ) { + if ( ( m = match[ 1 ] ) ) { // Document context if ( nodeType === 9 ) { - if ( (elem = context.getElementById( m )) ) { + if ( ( elem = context.getElementById( m ) ) ) { // Support: IE, Opera, Webkit // TODO: identify versions @@ -780,7 +803,7 @@ // Support: IE, Opera, Webkit // TODO: identify versions // getElementById can match elements by name instead of ID - if ( newContext && (elem = newContext.getElementById( m )) && + if ( newContext && ( elem = newContext.getElementById( m ) ) && contains( context, elem ) && elem.id === m ) { @@ -790,12 +813,12 @@ } // Type selector - } else if ( match[2] ) { + } else if ( match[ 2 ] ) { push.apply( results, context.getElementsByTagName( selector ) ); return results; // Class selector - } else if ( (m = match[3]) && support.getElementsByClassName && + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && context.getElementsByClassName ) { push.apply( results, context.getElementsByClassName( m ) ); @@ -806,11 +829,11 @@ // Take advantage of querySelectorAll if ( support.qsa && !nonnativeSelectorCache[ selector + " " ] && - (!rbuggyQSA || !rbuggyQSA.test( selector )) && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && // Support: IE 8 only // Exclude object elements - (nodeType !== 1 || context.nodeName.toLowerCase() !== "object") ) { + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { newSelector = selector; newContext = context; @@ -819,27 +842,36 @@ // descendant combinators, which is not what we want. // In such cases, we work around the behavior by prefixing every selector in the // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. // Thanks to Andrew Dupont for this technique. - if ( nodeType === 1 && rdescend.test( selector ) ) { + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { - // Capture the context ID, setting it first if necessary - if ( (nid = context.getAttribute( "id" )) ) { - nid = nid.replace( rcssescape, fcssescape ); - } else { - context.setAttribute( "id", (nid = expando) ); + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } } // Prefix every selector in the list groups = tokenize( selector ); i = groups.length; while ( i-- ) { - groups[i] = "#" + nid + " " + toSelector( groups[i] ); + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); } newSelector = groups.join( "," ); - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; } try { @@ -872,12 +904,14 @@ var keys = []; function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries delete cache[ keys.shift() ]; } - return (cache[ key + " " ] = value); + return ( cache[ key + " " ] = value ); } return cache; } @@ -896,17 +930,19 @@ * @param {Function} fn Passed the created element and returns a boolean result */ function assert( fn ) { - var el = document.createElement("fieldset"); + var el = document.createElement( "fieldset" ); try { return !!fn( el ); - } catch (e) { + } catch ( e ) { return false; } finally { + // Remove from its parent by default if ( el.parentNode ) { el.parentNode.removeChild( el ); } + // release memory in IE el = null; } @@ -918,11 +954,11 @@ * @param {Function} handler The method that will be applied */ function addHandle( attrs, handler ) { - var arr = attrs.split("|"), + var arr = attrs.split( "|" ), i = arr.length; while ( i-- ) { - Expr.attrHandle[ arr[i] ] = handler; + Expr.attrHandle[ arr[ i ] ] = handler; } } @@ -944,7 +980,7 @@ // Check if b follows a if ( cur ) { - while ( (cur = cur.nextSibling) ) { + while ( ( cur = cur.nextSibling ) ) { if ( cur === b ) { return -1; } @@ -972,7 +1008,7 @@ function createButtonPseudo( type ) { return function( elem ) { var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && elem.type === type; + return ( name === "input" || name === "button" ) && elem.type === type; }; } @@ -1037,21 +1073,21 @@ * @param {Function} fn */ function createPositionalPseudo( fn ) { - return markFunction(function( argument ) { + return markFunction( function( argument ) { argument = +argument; - return markFunction(function( seed, matches ) { + return markFunction( function( seed, matches ) { var j, matchIndexes = fn( [], seed.length, argument ), i = matchIndexes.length; // Match elements found at the specified indexes while ( i-- ) { - if ( seed[ (j = matchIndexes[i]) ] ) { - seed[j] = !(matches[j] = seed[j]); + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); } } - }); - }); + } ); + } ); } /** @@ -1073,7 +1109,7 @@ */ isXML = Sizzle.isXML = function( elem ) { var namespace = elem.namespaceURI, - docElem = (elem.ownerDocument || elem).documentElement; + docElem = ( elem.ownerDocument || elem ).documentElement; // Support: IE <=8 // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes @@ -1091,7 +1127,11 @@ doc = node ? node.ownerDocument || node : preferredDoc; // Return early if doc is invalid or already selected - if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { return document; } @@ -1100,10 +1140,14 @@ docElem = document.documentElement; documentIsHTML = !isXML( document ); - // Support: IE 9-11, Edge + // Support: IE 9 - 11+, Edge 12 - 18+ // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) - if ( preferredDoc !== document && - (subWindow = document.defaultView) && subWindow.top !== subWindow ) { + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { // Support: IE 11, Edge if ( subWindow.addEventListener ) { @@ -1115,25 +1159,36 @@ } } + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + /* Attributes ---------------------------------------------------------------------- */ // Support: IE<8 // Verify that getAttribute really returns attributes and not properties // (excepting IE8 booleans) - support.attributes = assert(function( el ) { + support.attributes = assert( function( el ) { el.className = "i"; - return !el.getAttribute("className"); - }); + return !el.getAttribute( "className" ); + } ); /* getElement(s)By* ---------------------------------------------------------------------- */ // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert(function( el ) { - el.appendChild( document.createComment("") ); - return !el.getElementsByTagName("*").length; - }); + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); // Support: IE<9 support.getElementsByClassName = rnative.test( document.getElementsByClassName ); @@ -1142,38 +1197,38 @@ // Check if getElementById returns elements by name // The broken getElementById methods don't pick up programmatically-set names, // so use a roundabout getElementsByName test - support.getById = assert(function( el ) { + support.getById = assert( function( el ) { docElem.appendChild( el ).id = expando; return !document.getElementsByName || !document.getElementsByName( expando ).length; - }); + } ); // ID filter and find if ( support.getById ) { - Expr.filter["ID"] = function( id ) { + Expr.filter[ "ID" ] = function( id ) { var attrId = id.replace( runescape, funescape ); return function( elem ) { - return elem.getAttribute("id") === attrId; + return elem.getAttribute( "id" ) === attrId; }; }; - Expr.find["ID"] = function( id, context ) { + Expr.find[ "ID" ] = function( id, context ) { if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { var elem = context.getElementById( id ); return elem ? [ elem ] : []; } }; } else { - Expr.filter["ID"] = function( id ) { + Expr.filter[ "ID" ] = function( id ) { var attrId = id.replace( runescape, funescape ); return function( elem ) { var node = typeof elem.getAttributeNode !== "undefined" && - elem.getAttributeNode("id"); + elem.getAttributeNode( "id" ); return node && node.value === attrId; }; }; // Support: IE 6 - 7 only // getElementById is not reliable as a find shortcut - Expr.find["ID"] = function( id, context ) { + Expr.find[ "ID" ] = function( id, context ) { if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { var node, i, elems, elem = context.getElementById( id ); @@ -1181,7 +1236,7 @@ if ( elem ) { // Verify the id attribute - node = elem.getAttributeNode("id"); + node = elem.getAttributeNode( "id" ); if ( node && node.value === id ) { return [ elem ]; } @@ -1189,8 +1244,8 @@ // Fall back on getElementsByName elems = context.getElementsByName( id ); i = 0; - while ( (elem = elems[i++]) ) { - node = elem.getAttributeNode("id"); + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); if ( node && node.value === id ) { return [ elem ]; } @@ -1203,7 +1258,7 @@ } // Tag - Expr.find["TAG"] = support.getElementsByTagName ? + Expr.find[ "TAG" ] = support.getElementsByTagName ? function( tag, context ) { if ( typeof context.getElementsByTagName !== "undefined" ) { return context.getElementsByTagName( tag ); @@ -1218,12 +1273,13 @@ var elem, tmp = [], i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too results = context.getElementsByTagName( tag ); // Filter out possible comments if ( tag === "*" ) { - while ( (elem = results[i++]) ) { + while ( ( elem = results[ i++ ] ) ) { if ( elem.nodeType === 1 ) { tmp.push( elem ); } @@ -1235,7 +1291,7 @@ }; // Class - Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { return context.getElementsByClassName( className ); } @@ -1256,10 +1312,14 @@ // See https://bugs.jquery.com/ticket/13378 rbuggyQSA = []; - if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + // Build QSA regex // Regex strategy adopted from Diego Perini - assert(function( el ) { + assert( function( el ) { + + var input; + // Select is set to empty string on purpose // This is to test IE's treatment of not explicitly // setting a boolean content attribute, @@ -1273,78 +1333,98 @@ // Nothing should be selected when empty strings follow ^= or $= or *= // The test attribute must be unknown in Opera but "safe" for WinRT // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( el.querySelectorAll("[msallowcapture^='']").length ) { + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); } // Support: IE8 // Boolean attributes and "value" are not treated correctly - if ( !el.querySelectorAll("[selected]").length ) { + if ( !el.querySelectorAll( "[selected]" ).length ) { rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); } // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push("~="); + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); } // Webkit/Opera - :checked should return selected option elements // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked // IE8 throws error here and will not see later tests - if ( !el.querySelectorAll(":checked").length ) { - rbuggyQSA.push(":checked"); + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); } // Support: Safari 8+, iOS 8+ // https://bugs.webkit.org/show_bug.cgi?id=136851 // In-page `selector#id sibling-combinator selector` fails if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push(".#.+[+~]"); + rbuggyQSA.push( ".#.+[+~]" ); } - }); - assert(function( el ) { + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { el.innerHTML = "" + ""; // Support: Windows 8 Native Apps // The type and name attributes are restricted during .innerHTML assignment - var input = document.createElement("input"); + var input = document.createElement( "input" ); input.setAttribute( "type", "hidden" ); el.appendChild( input ).setAttribute( "name", "D" ); // Support: IE8 // Enforce case-sensitivity of name attribute - if ( el.querySelectorAll("[name=d]").length ) { + if ( el.querySelectorAll( "[name=d]" ).length ) { rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); } // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) // IE8 throws error here and will not see later tests - if ( el.querySelectorAll(":enabled").length !== 2 ) { + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { rbuggyQSA.push( ":enabled", ":disabled" ); } // Support: IE9-11+ // IE's :disabled selector does not pick up the children of disabled fieldsets docElem.appendChild( el ).disabled = true; - if ( el.querySelectorAll(":disabled").length !== 2 ) { + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { rbuggyQSA.push( ":enabled", ":disabled" ); } + // Support: Opera 10 - 11 only // Opera 10-11 does not throw on post-comma invalid pseudos - el.querySelectorAll("*,:x"); - rbuggyQSA.push(",.*:"); - }); + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); } - if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || docElem.webkitMatchesSelector || docElem.mozMatchesSelector || docElem.oMatchesSelector || - docElem.msMatchesSelector) )) ) { + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { - assert(function( el ) { // Check to see if it's possible to do matchesSelector // on a disconnected node (IE 9) support.disconnectedMatch = matches.call( el, "*" ); @@ -1353,11 +1433,11 @@ // Gecko does not error, returns false instead matches.call( el, "[s!='']:x" ); rbuggyMatches.push( "!=", pseudos ); - }); + } ); } - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); /* Contains ---------------------------------------------------------------------- */ @@ -1374,11 +1454,11 @@ adown.contains ? adown.contains( bup ) : a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - )); + ) ); } : function( a, b ) { if ( b ) { - while ( (b = b.parentNode) ) { + while ( ( b = b.parentNode ) ) { if ( b === a ) { return true; } @@ -1407,7 +1487,11 @@ } // Calculate position if both inputs belong to the same document - compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? a.compareDocumentPosition( b ) : // Otherwise we know they are disconnected @@ -1415,13 +1499,24 @@ // Disconnected nodes if ( compare & 1 || - (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { // Choose the first element that is related to our preferred document - if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { return -1; } - if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { return 1; } @@ -1434,6 +1529,7 @@ return compare & 4 ? -1 : 1; } : function( a, b ) { + // Exit early if the nodes are identical if ( a === b ) { hasDuplicate = true; @@ -1449,8 +1545,14 @@ // Parentless nodes are either documents or disconnected if ( !aup || !bup ) { - return a === document ? -1 : - b === document ? 1 : + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ aup ? -1 : bup ? 1 : sortInput ? @@ -1464,26 +1566,32 @@ // Otherwise we need full lists of their ancestors for comparison cur = a; - while ( (cur = cur.parentNode) ) { + while ( ( cur = cur.parentNode ) ) { ap.unshift( cur ); } cur = b; - while ( (cur = cur.parentNode) ) { + while ( ( cur = cur.parentNode ) ) { bp.unshift( cur ); } // Walk down the tree looking for a discrepancy - while ( ap[i] === bp[i] ) { + while ( ap[ i ] === bp[ i ] ) { i++; } return i ? + // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[i], bp[i] ) : + siblingCheck( ap[ i ], bp[ i ] ) : // Otherwise nodes in our document sort first - ap[i] === preferredDoc ? -1 : - bp[i] === preferredDoc ? 1 : + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ 0; }; @@ -1495,10 +1603,7 @@ }; Sizzle.matchesSelector = function( elem, expr ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } + setDocument( elem ); if ( support.matchesSelector && documentIsHTML && !nonnativeSelectorCache[ expr + " " ] && @@ -1510,12 +1615,13 @@ // IE 9's matchesSelector returns false on disconnected nodes if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document // fragment in IE 9 elem.document && elem.document.nodeType !== 11 ) { return ret; } - } catch (e) { + } catch ( e ) { nonnativeSelectorCache( expr, true ); } } @@ -1524,20 +1630,31 @@ }; Sizzle.contains = function( context, elem ) { + // Set document vars if needed - if ( ( context.ownerDocument || context ) !== document ) { + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { setDocument( context ); } return contains( context, elem ); }; Sizzle.attr = function( elem, name ) { + // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { setDocument( elem ); } var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? fn( elem, name, !documentIsHTML ) : @@ -1547,13 +1664,13 @@ val : support.attributes || !documentIsHTML ? elem.getAttribute( name ) : - (val = elem.getAttributeNode(name)) && val.specified ? + ( val = elem.getAttributeNode( name ) ) && val.specified ? val.value : null; }; Sizzle.escape = function( sel ) { - return (sel + "").replace( rcssescape, fcssescape ); + return ( sel + "" ).replace( rcssescape, fcssescape ); }; Sizzle.error = function( msg ) { @@ -1576,7 +1693,7 @@ results.sort( sortOrder ); if ( hasDuplicate ) { - while ( (elem = results[i++]) ) { + while ( ( elem = results[ i++ ] ) ) { if ( elem === results[ i ] ) { j = duplicates.push( i ); } @@ -1604,17 +1721,21 @@ nodeType = elem.nodeType; if ( !nodeType ) { + // If no nodeType, this is expected to be an array - while ( (node = elem[i++]) ) { + while ( ( node = elem[ i++ ] ) ) { + // Do not traverse comment nodes ret += getText( node ); } } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements // innerText usage removed for consistency of new lines (jQuery #11153) if ( typeof elem.textContent === "string" ) { return elem.textContent; } else { + // Traverse its children for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { ret += getText( elem ); @@ -1623,6 +1744,7 @@ } else if ( nodeType === 3 || nodeType === 4 ) { return elem.nodeValue; } + // Do not include comment or processing instruction nodes return ret; @@ -1650,19 +1772,21 @@ preFilter: { "ATTR": function( match ) { - match[1] = match[1].replace( runescape, funescape ); + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); // Move the given value to match[3] whether quoted or unquoted - match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); - if ( match[2] === "~=" ) { - match[3] = " " + match[3] + " "; + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; } return match.slice( 0, 4 ); }, "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] 1 type (only|nth|...) 2 what (child|of-type) @@ -1673,22 +1797,25 @@ 7 sign of y-component 8 y of y-component */ - match[1] = match[1].toLowerCase(); + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { - if ( match[1].slice( 0, 3 ) === "nth" ) { // nth-* requires argument - if ( !match[3] ) { - Sizzle.error( match[0] ); + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); } // numeric x and y parameters for Expr.filter.CHILD // remember that false/true cast respectively to 0/1 - match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); - match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); // other types prohibit arguments - } else if ( match[3] ) { - Sizzle.error( match[0] ); + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); } return match; @@ -1696,26 +1823,28 @@ "PSEUDO": function( match ) { var excess, - unquoted = !match[6] && match[2]; + unquoted = !match[ 6 ] && match[ 2 ]; - if ( matchExpr["CHILD"].test( match[0] ) ) { + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { return null; } // Accept quoted arguments as-is - if ( match[3] ) { - match[2] = match[4] || match[5] || ""; + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; // Strip excess characters from unquoted arguments } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) - (excess = tokenize( unquoted, true )) && + ( excess = tokenize( unquoted, true ) ) && + // advance to the next closing parenthesis - (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { // excess is a negative index - match[0] = match[0].slice( 0, excess ); - match[2] = unquoted.slice( 0, excess ); + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); } // Return only captures needed by the pseudo filter method (type and argument) @@ -1728,7 +1857,9 @@ "TAG": function( nodeNameSelector ) { var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); return nodeNameSelector === "*" ? - function() { return true; } : + function() { + return true; + } : function( elem ) { return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; }; @@ -1738,10 +1869,16 @@ var pattern = classCache[ className + " " ]; return pattern || - (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && - classCache( className, function( elem ) { - return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); - }); + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); }, "ATTR": function( name, operator, check ) { @@ -1757,6 +1894,8 @@ result += ""; + /* eslint-disable max-len */ + return operator === "=" ? result === check : operator === "!=" ? result !== check : operator === "^=" ? check && result.indexOf( check ) === 0 : @@ -1765,10 +1904,12 @@ operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : false; + /* eslint-enable max-len */ + }; }, - "CHILD": function( type, what, argument, first, last ) { + "CHILD": function( type, what, _argument, first, last ) { var simple = type.slice( 0, 3 ) !== "nth", forward = type.slice( -4 ) !== "last", ofType = what === "of-type"; @@ -1780,7 +1921,7 @@ return !!elem.parentNode; } : - function( elem, context, xml ) { + function( elem, _context, xml ) { var cache, uniqueCache, outerCache, node, nodeIndex, start, dir = simple !== forward ? "nextSibling" : "previousSibling", parent = elem.parentNode, @@ -1794,7 +1935,7 @@ if ( simple ) { while ( dir ) { node = elem; - while ( (node = node[ dir ]) ) { + while ( ( node = node[ dir ] ) ) { if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { @@ -1802,6 +1943,7 @@ return false; } } + // Reverse direction for :only-* (if we haven't yet done so) start = dir = type === "only" && !start && "nextSibling"; } @@ -1817,22 +1959,22 @@ // ...in a gzip-friendly way node = parent; - outerCache = node[ expando ] || (node[ expando ] = {}); + outerCache = node[ expando ] || ( node[ expando ] = {} ); // Support: IE <9 only // Defend against cloned attroperties (jQuery gh-1709) uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); + ( outerCache[ node.uniqueID ] = {} ); cache = uniqueCache[ type ] || []; nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; diff = nodeIndex && cache[ 2 ]; node = nodeIndex && parent.childNodes[ nodeIndex ]; - while ( (node = ++nodeIndex && node && node[ dir ] || + while ( ( node = ++nodeIndex && node && node[ dir ] || // Fallback to seeking `elem` from the start - (diff = nodeIndex = 0) || start.pop()) ) { + ( diff = nodeIndex = 0 ) || start.pop() ) ) { // When found, cache indexes on `parent` and break if ( node.nodeType === 1 && ++diff && node === elem ) { @@ -1842,16 +1984,18 @@ } } else { + // Use previously-cached element index if available if ( useCache ) { + // ...in a gzip-friendly way node = elem; - outerCache = node[ expando ] || (node[ expando ] = {}); + outerCache = node[ expando ] || ( node[ expando ] = {} ); // Support: IE <9 only // Defend against cloned attroperties (jQuery gh-1709) uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); + ( outerCache[ node.uniqueID ] = {} ); cache = uniqueCache[ type ] || []; nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; @@ -1861,9 +2005,10 @@ // xml :nth-child(...) // or :nth-last-child(...) or :nth(-last)?-of-type(...) if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start - while ( (node = ++nodeIndex && node && node[ dir ] || - (diff = nodeIndex = 0) || start.pop()) ) { + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { if ( ( ofType ? node.nodeName.toLowerCase() === name : @@ -1872,12 +2017,13 @@ // Cache the index of each encountered element if ( useCache ) { - outerCache = node[ expando ] || (node[ expando ] = {}); + outerCache = node[ expando ] || + ( node[ expando ] = {} ); // Support: IE <9 only // Defend against cloned attroperties (jQuery gh-1709) uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); + ( outerCache[ node.uniqueID ] = {} ); uniqueCache[ type ] = [ dirruns, diff ]; } @@ -1898,6 +2044,7 @@ }, "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive // http://www.w3.org/TR/selectors/#pseudo-classes // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters @@ -1917,15 +2064,15 @@ if ( fn.length > 1 ) { args = [ pseudo, pseudo, "", argument ]; return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction(function( seed, matches ) { + markFunction( function( seed, matches ) { var idx, matched = fn( seed, argument ), i = matched.length; while ( i-- ) { - idx = indexOf( seed, matched[i] ); - seed[ idx ] = !( matches[ idx ] = matched[i] ); + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); } - }) : + } ) : function( elem ) { return fn( elem, 0, args ); }; @@ -1936,8 +2083,10 @@ }, pseudos: { + // Potentially complex pseudos - "not": markFunction(function( selector ) { + "not": markFunction( function( selector ) { + // Trim the selector passed to compile // to avoid treating leading and trailing // spaces as combinators @@ -1946,39 +2095,40 @@ matcher = compile( selector.replace( rtrim, "$1" ) ); return matcher[ expando ] ? - markFunction(function( seed, matches, context, xml ) { + markFunction( function( seed, matches, _context, xml ) { var elem, unmatched = matcher( seed, null, xml, [] ), i = seed.length; // Match elements unmatched by `matcher` while ( i-- ) { - if ( (elem = unmatched[i]) ) { - seed[i] = !(matches[i] = elem); + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); } } - }) : - function( elem, context, xml ) { - input[0] = elem; + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; matcher( input, null, xml, results ); + // Don't keep the element (issue #299) - input[0] = null; + input[ 0 ] = null; return !results.pop(); }; - }), + } ), - "has": markFunction(function( selector ) { + "has": markFunction( function( selector ) { return function( elem ) { return Sizzle( selector, elem ).length > 0; }; - }), + } ), - "contains": markFunction(function( text ) { + "contains": markFunction( function( text ) { text = text.replace( runescape, funescape ); return function( elem ) { return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; }; - }), + } ), // "Whether an element is represented by a :lang() selector // is based solely on the element's language value @@ -1988,25 +2138,26 @@ // The identifier C does not have to be a valid language name." // http://www.w3.org/TR/selectors/#lang-pseudo "lang": markFunction( function( lang ) { + // lang value must be a valid identifier - if ( !ridentifier.test(lang || "") ) { + if ( !ridentifier.test( lang || "" ) ) { Sizzle.error( "unsupported lang: " + lang ); } lang = lang.replace( runescape, funescape ).toLowerCase(); return function( elem ) { var elemLang; do { - if ( (elemLang = documentIsHTML ? + if ( ( elemLang = documentIsHTML ? elem.lang : - elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { elemLang = elemLang.toLowerCase(); return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; } - } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); return false; }; - }), + } ), // Miscellaneous "target": function( elem ) { @@ -2019,7 +2170,9 @@ }, "focus": function( elem ) { - return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); }, // Boolean properties @@ -2027,16 +2180,20 @@ "disabled": createDisabledPseudo( true ), "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked var nodeName = elem.nodeName.toLowerCase(); - return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); }, "selected": function( elem ) { + // Accessing this property makes selected-by-default // options in Safari work properly if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions elem.parentNode.selectedIndex; } @@ -2045,6 +2202,7 @@ // Contents "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), // but not by others (comment: 8; processing instruction: 7; etc.) @@ -2058,7 +2216,7 @@ }, "parent": function( elem ) { - return !Expr.pseudos["empty"]( elem ); + return !Expr.pseudos[ "empty" ]( elem ); }, // Element/input types @@ -2082,39 +2240,40 @@ // Support: IE<8 // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); }, // Position-in-collection - "first": createPositionalPseudo(function() { + "first": createPositionalPseudo( function() { return [ 0 ]; - }), + } ), - "last": createPositionalPseudo(function( matchIndexes, length ) { + "last": createPositionalPseudo( function( _matchIndexes, length ) { return [ length - 1 ]; - }), + } ), - "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { return [ argument < 0 ? argument + length : argument ]; - }), + } ), - "even": createPositionalPseudo(function( matchIndexes, length ) { + "even": createPositionalPseudo( function( matchIndexes, length ) { var i = 0; for ( ; i < length; i += 2 ) { matchIndexes.push( i ); } return matchIndexes; - }), + } ), - "odd": createPositionalPseudo(function( matchIndexes, length ) { + "odd": createPositionalPseudo( function( matchIndexes, length ) { var i = 1; for ( ; i < length; i += 2 ) { matchIndexes.push( i ); } return matchIndexes; - }), + } ), - "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { var i = argument < 0 ? argument + length : argument > length ? @@ -2124,19 +2283,19 @@ matchIndexes.push( i ); } return matchIndexes; - }), + } ), - "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { var i = argument < 0 ? argument + length : argument; for ( ; ++i < length; ) { matchIndexes.push( i ); } return matchIndexes; - }) + } ) } }; - Expr.pseudos["nth"] = Expr.pseudos["eq"]; + Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; // Add button/input type pseudos for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { @@ -2167,37 +2326,39 @@ while ( soFar ) { // Comma and first run - if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { if ( match ) { + // Don't consume trailing commas as valid - soFar = soFar.slice( match[0].length ) || soFar; + soFar = soFar.slice( match[ 0 ].length ) || soFar; } - groups.push( (tokens = []) ); + groups.push( ( tokens = [] ) ); } matched = false; // Combinators - if ( (match = rcombinators.exec( soFar )) ) { + if ( ( match = rcombinators.exec( soFar ) ) ) { matched = match.shift(); - tokens.push({ + tokens.push( { value: matched, + // Cast descendant combinators to space - type: match[0].replace( rtrim, " " ) - }); + type: match[ 0 ].replace( rtrim, " " ) + } ); soFar = soFar.slice( matched.length ); } // Filters for ( type in Expr.filter ) { - if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || - (match = preFilters[ type ]( match ))) ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { matched = match.shift(); - tokens.push({ + tokens.push( { value: matched, type: type, matches: match - }); + } ); soFar = soFar.slice( matched.length ); } } @@ -2214,6 +2375,7 @@ soFar.length : soFar ? Sizzle.error( selector ) : + // Cache the tokens tokenCache( selector, groups ).slice( 0 ); }; @@ -2223,7 +2385,7 @@ len = tokens.length, selector = ""; for ( ; i < len; i++ ) { - selector += tokens[i].value; + selector += tokens[ i ].value; } return selector; } @@ -2236,9 +2398,10 @@ doneName = done++; return combinator.first ? + // Check against closest ancestor/preceding element function( elem, context, xml ) { - while ( (elem = elem[ dir ]) ) { + while ( ( elem = elem[ dir ] ) ) { if ( elem.nodeType === 1 || checkNonElements ) { return matcher( elem, context, xml ); } @@ -2253,7 +2416,7 @@ // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching if ( xml ) { - while ( (elem = elem[ dir ]) ) { + while ( ( elem = elem[ dir ] ) ) { if ( elem.nodeType === 1 || checkNonElements ) { if ( matcher( elem, context, xml ) ) { return true; @@ -2261,27 +2424,29 @@ } } } else { - while ( (elem = elem[ dir ]) ) { + while ( ( elem = elem[ dir ] ) ) { if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || (elem[ expando ] = {}); + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); // Support: IE <9 only // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); if ( skip && skip === elem.nodeName.toLowerCase() ) { elem = elem[ dir ] || elem; - } else if ( (oldCache = uniqueCache[ key ]) && + } else if ( ( oldCache = uniqueCache[ key ] ) && oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { // Assign to newCache so results back-propagate to previous elements - return (newCache[ 2 ] = oldCache[ 2 ]); + return ( newCache[ 2 ] = oldCache[ 2 ] ); } else { + // Reuse newcache so results back-propagate to previous elements uniqueCache[ key ] = newCache; // A match means we're done; a fail means we have to keep checking - if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { return true; } } @@ -2297,20 +2462,20 @@ function( elem, context, xml ) { var i = matchers.length; while ( i-- ) { - if ( !matchers[i]( elem, context, xml ) ) { + if ( !matchers[ i ]( elem, context, xml ) ) { return false; } } return true; } : - matchers[0]; + matchers[ 0 ]; } function multipleContexts( selector, contexts, results ) { var i = 0, len = contexts.length; for ( ; i < len; i++ ) { - Sizzle( selector, contexts[i], results ); + Sizzle( selector, contexts[ i ], results ); } return results; } @@ -2323,7 +2488,7 @@ mapped = map != null; for ( ; i < len; i++ ) { - if ( (elem = unmatched[i]) ) { + if ( ( elem = unmatched[ i ] ) ) { if ( !filter || filter( elem, context, xml ) ) { newUnmatched.push( elem ); if ( mapped ) { @@ -2343,14 +2508,18 @@ if ( postFinder && !postFinder[ expando ] ) { postFinder = setMatcher( postFinder, postSelector ); } - return markFunction(function( seed, results, context, xml ) { + return markFunction( function( seed, results, context, xml ) { var temp, i, elem, preMap = [], postMap = [], preexisting = results.length, // Get initial elements from seed or context - elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), // Prefilter to get matcher input, preserving a map for seed-results synchronization matcherIn = preFilter && ( seed || !selector ) ? @@ -2358,6 +2527,7 @@ elems, matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, postFinder || ( seed ? preFilter : preexisting || postFilter ) ? @@ -2381,8 +2551,8 @@ // Un-match failing elements by moving them back to matcherIn i = temp.length; while ( i-- ) { - if ( (elem = temp[i]) ) { - matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); } } } @@ -2390,25 +2560,27 @@ if ( seed ) { if ( postFinder || preFilter ) { if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts temp = []; i = matcherOut.length; while ( i-- ) { - if ( (elem = matcherOut[i]) ) { + if ( ( elem = matcherOut[ i ] ) ) { + // Restore matcherIn since elem is not yet a final match - temp.push( (matcherIn[i] = elem) ); + temp.push( ( matcherIn[ i ] = elem ) ); } } - postFinder( null, (matcherOut = []), temp, xml ); + postFinder( null, ( matcherOut = [] ), temp, xml ); } // Move matched elements from seed to results to keep them synchronized i = matcherOut.length; while ( i-- ) { - if ( (elem = matcherOut[i]) && - (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { - seed[temp] = !(results[temp] = elem); + seed[ temp ] = !( results[ temp ] = elem ); } } } @@ -2426,14 +2598,14 @@ push.apply( results, matcherOut ); } } - }); + } ); } function matcherFromTokens( tokens ) { var checkContext, matcher, j, len = tokens.length, - leadingRelative = Expr.relative[ tokens[0].type ], - implicitRelative = leadingRelative || Expr.relative[" "], + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], i = leadingRelative ? 1 : 0, // The foundational matcher ensures that elements are reachable from top-level context(s) @@ -2445,38 +2617,43 @@ }, implicitRelative, true ), matchers = [ function( elem, context, xml ) { var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - (checkContext = context).nodeType ? + ( checkContext = context ).nodeType ? matchContext( elem, context, xml ) : matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) checkContext = null; return ret; } ]; for ( ; i < len; i++ ) { - if ( (matcher = Expr.relative[ tokens[i].type ]) ) { - matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; } else { - matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); // Return special upon seeing a positional matcher if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling j = ++i; for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[j].type ] ) { + if ( Expr.relative[ tokens[ j ].type ] ) { break; } } return setMatcher( i > 1 && elementMatcher( matchers ), i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) ).replace( rtrim, "$1" ), matcher, i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), j < len && toSelector( tokens ) ); } @@ -2497,28 +2674,40 @@ unmatched = seed && [], setMatched = [], contextBackup = outermostContext, + // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), len = elems.length; if ( outermost ) { - outermostContext = context === document || context || outermost; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; } // Add elements passing elementMatchers directly to results // Support: IE<9, Safari // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id - for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { if ( byElement && elem ) { j = 0; - if ( !context && elem.ownerDocument !== document ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { setDocument( elem ); xml = !documentIsHTML; } - while ( (matcher = elementMatchers[j++]) ) { - if ( matcher( elem, context || document, xml) ) { + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { results.push( elem ); break; } @@ -2530,8 +2719,9 @@ // Track unmatched elements for set filters if ( bySet ) { + // They will have gone through all possible matchers - if ( (elem = !matcher && elem) ) { + if ( ( elem = !matcher && elem ) ) { matchedCount--; } @@ -2555,16 +2745,17 @@ // numerically zero. if ( bySet && i !== matchedCount ) { j = 0; - while ( (matcher = setMatchers[j++]) ) { + while ( ( matcher = setMatchers[ j++ ] ) ) { matcher( unmatched, setMatched, context, xml ); } if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting if ( matchedCount > 0 ) { while ( i-- ) { - if ( !(unmatched[i] || setMatched[i]) ) { - setMatched[i] = pop.call( results ); + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); } } } @@ -2605,13 +2796,14 @@ cached = compilerCache[ selector + " " ]; if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element if ( !match ) { match = tokenize( selector ); } i = match.length; while ( i-- ) { - cached = matcherFromTokens( match[i] ); + cached = matcherFromTokens( match[ i ] ); if ( cached[ expando ] ) { setMatchers.push( cached ); } else { @@ -2620,7 +2812,10 @@ } // Cache the compiled function - cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); // Save selector and tokenization cached.selector = selector; @@ -2640,7 +2835,7 @@ select = Sizzle.select = function( selector, context, results, seed ) { var i, tokens, token, type, find, compiled = typeof selector === "function" && selector, - match = !seed && tokenize( (selector = compiled.selector || selector) ); + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); results = results || []; @@ -2649,11 +2844,12 @@ if ( match.length === 1 ) { // Reduce context if the leading compound selector is an ID - tokens = match[0] = match[0].slice( 0 ); - if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { - context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; if ( !context ) { return results; @@ -2666,20 +2862,22 @@ } // Fetch a seed set for right-to-left matching - i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; while ( i-- ) { - token = tokens[i]; + token = tokens[ i ]; // Abort if we hit a combinator - if ( Expr.relative[ (type = token.type) ] ) { + if ( Expr.relative[ ( type = token.type ) ] ) { break; } - if ( (find = Expr.find[ type ]) ) { + if ( ( find = Expr.find[ type ] ) ) { + // Search, expanding context for leading sibling combinators - if ( (seed = find( - token.matches[0].replace( runescape, funescape ), - rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context - )) ) { + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { // If seed is empty or no tokens remain, we can return early tokens.splice( i, 1 ); @@ -2710,7 +2908,7 @@ // One-time assignments // Sort stability - support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; // Support: Chrome 14-35+ // Always assume duplicates if they aren't passed to the comparison function @@ -2721,58 +2919,59 @@ // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) // Detached nodes confoundingly follow *each other* - support.sortDetached = assert(function( el ) { + support.sortDetached = assert( function( el ) { + // Should return 1, but returns 4 (following) - return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; - }); + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; + } ); // Support: IE<8 // Prevent attribute/property "interpolation" // https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx - if ( !assert(function( el ) { + if ( !assert( function( el ) { el.innerHTML = ""; - return el.firstChild.getAttribute("href") === "#" ; - }) ) { + return el.firstChild.getAttribute( "href" ) === "#"; + } ) ) { addHandle( "type|href|height|width", function( elem, name, isXML ) { if ( !isXML ) { return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); } - }); + } ); } // Support: IE<9 // Use defaultValue in place of getAttribute("value") - if ( !support.attributes || !assert(function( el ) { + if ( !support.attributes || !assert( function( el ) { el.innerHTML = ""; el.firstChild.setAttribute( "value", "" ); return el.firstChild.getAttribute( "value" ) === ""; - }) ) { - addHandle( "value", function( elem, name, isXML ) { + } ) ) { + addHandle( "value", function( elem, _name, isXML ) { if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { return elem.defaultValue; } - }); + } ); } // Support: IE<9 // Use getAttributeNode to fetch booleans when getAttribute lies - if ( !assert(function( el ) { - return el.getAttribute("disabled") == null; - }) ) { + if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; + } ) ) { addHandle( booleans, function( elem, name, isXML ) { var val; if ( !isXML ) { return elem[ name ] === true ? name.toLowerCase() : - (val = elem.getAttributeNode( name )) && val.specified ? + ( val = elem.getAttributeNode( name ) ) && val.specified ? val.value : null; } - }); + } ); } return Sizzle; - })( window ); + } )( window ); @@ -3141,7 +3340,7 @@ parents: function( elem ) { return dir( elem, "parentNode" ); }, - parentsUntil: function( elem, i, until ) { + parentsUntil: function( elem, _i, until ) { return dir( elem, "parentNode", until ); }, next: function( elem ) { @@ -3156,10 +3355,10 @@ prevAll: function( elem ) { return dir( elem, "previousSibling" ); }, - nextUntil: function( elem, i, until ) { + nextUntil: function( elem, _i, until ) { return dir( elem, "nextSibling", until ); }, - prevUntil: function( elem, i, until ) { + prevUntil: function( elem, _i, until ) { return dir( elem, "previousSibling", until ); }, siblings: function( elem ) { @@ -3169,7 +3368,13 @@ return siblings( elem.firstChild ); }, contents: function( elem ) { - if ( typeof elem.contentDocument !== "undefined" ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + return elem.contentDocument; } @@ -3512,7 +3717,7 @@ var fns = arguments; return jQuery.Deferred( function( newDefer ) { - jQuery.each( tuples, function( i, tuple ) { + jQuery.each( tuples, function( _i, tuple ) { // Map tuples (progress, done, fail) to arguments (done, fail, progress) var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; @@ -3965,7 +4170,7 @@ // ...except when executing function values } else { bulk = fn; - fn = function( elem, key, value ) { + fn = function( elem, _key, value ) { return bulk.call( jQuery( elem ), value ); }; } @@ -4000,7 +4205,7 @@ rdashAlpha = /-([a-z])/g; // Used by camelCase as callback to replace() - function fcamelCase( all, letter ) { + function fcamelCase( _all, letter ) { return letter.toUpperCase(); } @@ -4528,27 +4733,6 @@ jQuery.css( elem, "display" ) === "none"; }; - var swap = function( elem, options, callback, args ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.apply( elem, args || [] ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; - }; - - function adjustCSS( elem, prop, valueParts, tween ) { @@ -4719,11 +4903,40 @@ -// We have to close these tags to support XHTML (#13200) - var wrapMap = { + ( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; // Support: IE <=9 only - option: [ 1, "" ], + // IE <=9 replaces "; + support.option = !!div.lastChild; + } )(); + + +// We have to close these tags to support XHTML (#13200) + var wrapMap = { // XHTML parsers do not magically insert elements in the // same way that tag soup parsers do. So we cannot shorten @@ -4736,12 +4949,14 @@ _default: [ 0, "", "" ] }; -// Support: IE <=9 only - wrapMap.optgroup = wrapMap.option; - wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; wrapMap.th = wrapMap.td; +// Support: IE <=9 only + if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; + } + function getAll( context, tag ) { @@ -4874,32 +5089,6 @@ } - ( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; - } )(); - - var rkeyEvent = /^key/, rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, @@ -5008,8 +5197,8 @@ special, handlers, type, namespaces, origType, elemData = dataPriv.get( elem ); - // Don't attach events to noData or text/comment nodes (but allow plain objects) - if ( !elemData ) { + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { return; } @@ -5033,7 +5222,7 @@ // Init the element's event structure and main handler, if this is the first if ( !( events = elemData.events ) ) { - events = elemData.events = {}; + events = elemData.events = Object.create( null ); } if ( !( eventHandle = elemData.handle ) ) { eventHandle = elemData.handle = function( e ) { @@ -5191,12 +5380,15 @@ dispatch: function( nativeEvent ) { - // Make a writable jQuery.Event from the native event object - var event = jQuery.event.fix( nativeEvent ); - var i, j, ret, matched, handleObj, handlerQueue, args = new Array( arguments.length ), - handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], special = jQuery.event.special[ event.type ] || {}; // Use the fix-ed jQuery.Event rather than the (read-only) native event @@ -5771,13 +5963,6 @@ var - /* eslint-disable max-len */ - - // See https://github.com/eslint/eslint/issues/3229 - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, - - /* eslint-enable */ - // Support: IE <=10 - 11, Edge 12 - 13 only // In IE/Edge using regex groups here causes severe slowdowns. // See https://connect.microsoft.com/IE/feedback/details/1736512/ @@ -5814,7 +5999,7 @@ } function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + var i, l, type, pdataOld, udataOld, udataCur, events; if ( dest.nodeType !== 1 ) { return; @@ -5822,13 +6007,11 @@ // 1. Copy private data: events, handlers, etc. if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.access( src ); - pdataCur = dataPriv.set( dest, pdataOld ); + pdataOld = dataPriv.get( src ); events = pdataOld.events; if ( events ) { - delete pdataCur.handle; - pdataCur.events = {}; + dataPriv.remove( dest, "handle events" ); for ( type in events ) { for ( i = 0, l = events[ type ].length; i < l; i++ ) { @@ -5864,7 +6047,7 @@ function domManip( collection, args, callback, ignored ) { // Flatten any nested arrays - args = concat.apply( [], args ); + args = flat( args ); var fragment, first, scripts, hasScripts, node, doc, i = 0, @@ -5939,7 +6122,7 @@ if ( jQuery._evalUrl && !node.noModule ) { jQuery._evalUrl( node.src, { nonce: node.nonce || node.getAttribute( "nonce" ) - } ); + }, doc ); } } else { DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); @@ -5976,7 +6159,7 @@ jQuery.extend( { htmlPrefilter: function( html ) { - return html.replace( rxhtmlTag, "<$1>" ); + return html; }, clone: function( elem, dataAndEvents, deepDataAndEvents ) { @@ -6238,6 +6421,27 @@ return view.getComputedStyle( elem ); }; + var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; + }; + + var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); @@ -6295,7 +6499,7 @@ } var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, - reliableMarginLeftVal, + reliableTrDimensionsVal, reliableMarginLeftVal, container = document.createElement( "div" ), div = document.createElement( "div" ); @@ -6330,6 +6534,35 @@ scrollboxSize: function() { computeStyleTests(); return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px"; + tr.style.height = "1px"; + trChild.style.height = "9px"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; } } ); } )(); @@ -6454,7 +6687,7 @@ fontWeight: "400" }; - function setPositiveNumber( elem, value, subtract ) { + function setPositiveNumber( _elem, value, subtract ) { // Any relative (+/-) values have already been // normalized at this point @@ -6559,17 +6792,26 @@ } - // Fall back to offsetWidth/offsetHeight when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - // Support: Android <=4.1 - 4.3 only - // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) - // Support: IE 9-11 only - // Also use offsetWidth/offsetHeight for when box sizing is unreliable - // We use getClientRects() to check for hidden/disconnected. - // In those cases, the computed value can be trusted to be border-box + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected elem.getClientRects().length ) { isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; @@ -6764,7 +7006,7 @@ } } ); - jQuery.each( [ "height", "width" ], function( i, dimension ) { + jQuery.each( [ "height", "width" ], function( _i, dimension ) { jQuery.cssHooks[ dimension ] = { get: function( elem, computed, extra ) { if ( computed ) { @@ -7537,7 +7779,7 @@ clearQueue = type; type = undefined; } - if ( clearQueue && type !== false ) { + if ( clearQueue ) { this.queue( type || "fx", [] ); } @@ -7620,7 +7862,7 @@ } } ); - jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { + jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { var cssFn = jQuery.fn[ name ]; jQuery.fn[ name ] = function( speed, easing, callback ) { return speed == null || typeof speed === "boolean" ? @@ -7841,7 +8083,7 @@ } }; - jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { var getter = attrHandle[ name ] || jQuery.find.attr; attrHandle[ name ] = function( elem, name, isXML ) { @@ -8465,7 +8707,9 @@ special.bindType || type; // jQuery handler - handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + handle = ( + dataPriv.get( cur, "events" ) || Object.create( null ) + )[ event.type ] && dataPriv.get( cur, "handle" ); if ( handle ) { handle.apply( cur, data ); @@ -8576,7 +8820,10 @@ jQuery.event.special[ fix ] = { setup: function() { - var doc = this.ownerDocument || this, + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, attaches = dataPriv.access( doc, fix ); if ( !attaches ) { @@ -8585,7 +8832,7 @@ dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); }, teardown: function() { - var doc = this.ownerDocument || this, + var doc = this.ownerDocument || this.document || this, attaches = dataPriv.access( doc, fix ) - 1; if ( !attaches ) { @@ -8601,7 +8848,7 @@ } var location = window.location; - var nonce = Date.now(); + var nonce = { guid: Date.now() }; var rquery = ( /\?/ ); @@ -8733,7 +8980,7 @@ rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && ( this.checked || !rcheckableType.test( type ) ); } ) - .map( function( i, elem ) { + .map( function( _i, elem ) { var val = jQuery( this ).val(); if ( val == null ) { @@ -9346,7 +9593,8 @@ // Add or update anti-cache param if needed if ( s.cache === false ) { cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; } // Put hash and anti-cache on the URL that will be requested (gh-1732) @@ -9479,6 +9727,11 @@ response = ajaxHandleResponses( s, jqXHR, responses ); } + // Use a noop converter for missing script + if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { + s.converters[ "text script" ] = function() {}; + } + // Convert no matter what (that way responseXXX fields are always set) response = ajaxConvert( s, response, jqXHR, isSuccess ); @@ -9569,7 +9822,7 @@ } } ); - jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery.each( [ "get", "post" ], function( _i, method ) { jQuery[ method ] = function( url, data, callback, type ) { // Shift arguments if data argument was omitted @@ -9590,8 +9843,17 @@ }; } ); + jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } + } ); - jQuery._evalUrl = function( url, options ) { + + jQuery._evalUrl = function( url, options, doc ) { return jQuery.ajax( { url: url, @@ -9609,7 +9871,7 @@ "text script": function() {} }, dataFilter: function( response ) { - jQuery.globalEval( response, options ); + jQuery.globalEval( response, options, doc ); } } ); }; @@ -9931,7 +10193,7 @@ jQuery.ajaxSetup( { jsonp: "callback", jsonpCallback: function() { - var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); + var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) ); this[ callback ] = true; return callback; } @@ -10148,23 +10410,6 @@ -// Attach a bunch of functions for handling common AJAX events - jQuery.each( [ - "ajaxStart", - "ajaxStop", - "ajaxComplete", - "ajaxError", - "ajaxSuccess", - "ajaxSend" - ], function( i, type ) { - jQuery.fn[ type ] = function( fn ) { - return this.on( type, fn ); - }; - } ); - - - - jQuery.expr.pseudos.animated = function( elem ) { return jQuery.grep( jQuery.timers, function( fn ) { return elem === fn.elem; @@ -10221,6 +10466,12 @@ options.using.call( elem, props ); } else { + if ( typeof props.top === "number" ) { + props.top += "px"; + } + if ( typeof props.left === "number" ) { + props.left += "px"; + } curElem.css( props ); } } @@ -10371,7 +10622,7 @@ // Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347 // getComputedStyle returns percent when specified for top/left/bottom/right; // rather than make the css module depend on the offset module, just check for it here - jQuery.each( [ "top", "left" ], function( i, prop ) { + jQuery.each( [ "top", "left" ], function( _i, prop ) { jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, function( elem, computed ) { if ( computed ) { @@ -10434,23 +10685,17 @@ } ); - jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + - "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + - "change select submit keydown keypress keyup contextmenu" ).split( " " ), - function( i, name ) { - - // Handle event binding - jQuery.fn[ name ] = function( data, fn ) { - return arguments.length > 0 ? - this.on( name, null, data, fn ) : - this.trigger( name ); - }; - } ); - - jQuery.fn.extend( { - hover: function( fnOver, fnOut ) { - return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); - } + jQuery.each( [ + "ajaxStart", + "ajaxStop", + "ajaxComplete", + "ajaxError", + "ajaxSuccess", + "ajaxSend" + ], function( _i, type ) { + jQuery.fn[ type ] = function( fn ) { + return this.on( type, fn ); + }; } ); @@ -10474,9 +10719,33 @@ return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); + }, + + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); } } ); + jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup contextmenu" ).split( " " ), + function( _i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; + } ); + + + + +// Support: Android <=4.0 only +// Make sure we trim BOM and NBSP + var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; + // Bind a function to a context, optionally partially applying any // arguments. // jQuery.proxy is deprecated to promote standards (specifically Function#bind) @@ -10539,6 +10808,11 @@ !isNaN( obj - parseFloat( obj ) ); }; + jQuery.trim = function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }; @@ -10587,7 +10861,7 @@ // Expose jQuery and $ identifiers, even in AMD // (#7102#comment:10, https://github.com/jquery/jquery/pull/557) // and CommonJS for browser emulators (#13566) - if ( !noGlobal ) { + if ( typeof noGlobal === "undefined" ) { window.jQuery = window.$ = jQuery; } diff --git a/vendor/jquery/jquery.min.js b/vendor/jquery/jquery.min.js index 07c00cd22..d467083b6 100644 --- a/vendor/jquery/jquery.min.js +++ b/vendor/jquery/jquery.min.js @@ -1,2 +1,2 @@ -/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0 Date: Fri, 22 May 2020 17:55:35 +0300 Subject: [PATCH 38/92] [PE][SSE] Add parameters to api customization: macros, plugins, macrosMode --- .../main/app/controller/Main.js | 1 - .../main/app/controller/Main.js | 48 ++++++++++++++++++- .../main/app/view/FileMenuPanels.js | 38 ++++++++++++++- .../main/app/controller/Main.js | 48 ++++++++++++++++++- .../main/app/view/FileMenuPanels.js | 38 ++++++++++++++- 5 files changed, 168 insertions(+), 5 deletions(-) diff --git a/apps/documenteditor/main/app/controller/Main.js b/apps/documenteditor/main/app/controller/Main.js index 0ce06a80a..bc6e3a90f 100644 --- a/apps/documenteditor/main/app/controller/Main.js +++ b/apps/documenteditor/main/app/controller/Main.js @@ -2276,7 +2276,6 @@ define([ } } }); - } } }, diff --git a/apps/presentationeditor/main/app/controller/Main.js b/apps/presentationeditor/main/app/controller/Main.js index ca3c069e6..791ad1feb 100644 --- a/apps/presentationeditor/main/app/controller/Main.js +++ b/apps/presentationeditor/main/app/controller/Main.js @@ -342,6 +342,14 @@ define([ $('#editor-container').append('
'); } + var value = Common.localStorage.getItem("pe-macros-mode"); + if (value === null) { + value = this.editorConfig.customization ? this.editorConfig.customization.macrosMode : 'warn'; + value = (value == 'enable') ? 1 : (value == 'disable' ? 2 : 0); + } else + value = parseInt(value); + Common.Utils.InternalSettings.set("pe-macros-mode", value); + Common.Controllers.Desktop.init(this.appOptions); }, @@ -373,10 +381,16 @@ define([ docInfo.put_Token(data.doc.token); docInfo.put_Permissions(_permissions); docInfo.put_EncryptedInfo(this.editorConfig.encryptionKeys); + + var enable = !this.editorConfig.customization || (this.editorConfig.customization.macros!==false); + docInfo.asc_putIsEnabledMacroses(!!enable); + enable = !this.editorConfig.customization || (this.editorConfig.customization.plugins!==false); + docInfo.asc_putIsEnabledPlugins(!!enable); } this.api.asc_registerCallback('asc_onGetEditorPermissions', _.bind(this.onEditorPermissions, this)); this.api.asc_registerCallback('asc_onLicenseChanged', _.bind(this.onLicenseChanged, this)); + this.api.asc_registerCallback('asc_onRunAutostartMacroses', _.bind(this.onRunAutostartMacroses, this)); this.api.asc_setDocInfo(docInfo); this.api.asc_getEditorPermissions(this.editorConfig.licenseUrl, this.editorConfig.customerId); @@ -1883,6 +1897,36 @@ define([ }}); }, + onRunAutostartMacroses: function() { + var me = this, + enable = !this.editorConfig.customization || (this.editorConfig.customization.macros!==false); + if (enable) { + var value = Common.Utils.InternalSettings.get("pe-macros-mode"); + if (value==1) + this.api.asc_runAutostartMacroses(); + else if (value === 0) { + Common.UI.warning({ + msg: this.textHasMacros + '
', + buttons: ['yes', 'no'], + primary: 'yes', + dontshow: true, + textDontShow: this.textRemember, + callback: function(btn, dontshow){ + if (dontshow) { + Common.Utils.InternalSettings.set("pe-macros-mode", (btn == 'yes') ? 1 : 2); + Common.localStorage.setItem("pe-macros-mode", (btn == 'yes') ? 1 : 2); + } + if (btn == 'yes') { + setTimeout(function() { + me.api.asc_runAutostartMacroses(); + }, 1); + } + } + }); + } + } + }, + // Translation leavePageText: 'You have unsaved changes in this document. Click \'Stay on this Page\' then \'Save\' to save them. Click \'Leave this Page\' to discard all the unsaved changes.', criticalErrorTitle: 'Error', @@ -2234,7 +2278,9 @@ define([ textCustomLoader: 'Please note that according to the terms of the license you are not entitled to change the loader.
Please contact our Sales Department to get a quote.', waitText: 'Please, wait...', errorFileSizeExceed: 'The file size exceeds the limitation set for your server.
Please contact your Document Server administrator for details.', - errorUpdateVersionOnDisconnect: 'Internet connection has been restored, and the file version has been changed.
Before you can continue working, you need to download the file or copy its content to make sure nothing is lost, and then reload this page.' + errorUpdateVersionOnDisconnect: 'Internet connection has been restored, and the file version has been changed.
Before you can continue working, you need to download the file or copy its content to make sure nothing is lost, and then reload this page.', + textHasMacros: 'The file contains automatic macros.
Do you want to run macros?', + textRemember: 'Remember my choice' } })(), PE.Controllers.Main || {})) }); diff --git a/apps/presentationeditor/main/app/view/FileMenuPanels.js b/apps/presentationeditor/main/app/view/FileMenuPanels.js index 1a9277247..870f34df9 100644 --- a/apps/presentationeditor/main/app/view/FileMenuPanels.js +++ b/apps/presentationeditor/main/app/view/FileMenuPanels.js @@ -208,6 +208,12 @@ define([ '', '', '','', + '', + '', + '', + '
', + '
', + '','', '', '', '', @@ -331,6 +337,21 @@ define([ ] }); + this.cmbMacros = new Common.UI.ComboBox({ + el : $markup.findById('#fms-cmb-macros'), + style : 'width: 160px;', + editable : false, + cls : 'input-group-nr', + data : [ + { value: 2, displayValue: this.txtStopMacros, descValue: this.txtStopMacrosDesc }, + { value: 0, displayValue: this.txtWarnMacros, descValue: this.txtWarnMacrosDesc }, + { value: 1, displayValue: this.txtRunMacros, descValue: this.txtRunMacrosDesc } + ] + }).on('selected', function(combo, record) { + me.lblMacrosDesc.text(record.descValue); + }); + this.lblMacrosDesc = $markup.findById('#fms-lbl-macros'); + this.btnApply = new Common.UI.Button({ el: $markup.findById('#fms-btn-apply') }); @@ -367,6 +388,7 @@ define([ /** coauthoring begin **/ $('tr.coauth.changes', this.el)[mode.isEdit && !mode.isOffline && mode.canCoAuthoring ? 'show' : 'hide'](); /** coauthoring end **/ + $('tr.macros', this.el)[(mode.customization && mode.customization.macros===false) ? 'hide' : 'show'](); }, updateSettings: function() { @@ -409,6 +431,10 @@ define([ } this.chAlignGuides.setValue(Common.Utils.InternalSettings.get("pe-settings-showsnaplines")); + + item = this.cmbMacros.store.findWhere({value: Common.Utils.InternalSettings.get("pe-macros-mode")}); + this.cmbMacros.setValue(item ? item.get('value') : 0); + this.lblMacrosDesc.text(item ? item.get('descValue') : this.txtWarnMacrosDesc); }, applySettings: function() { @@ -430,6 +456,9 @@ define([ Common.localStorage.setItem("pe-settings-forcesave", this.chForcesave.isChecked() ? 1 : 0); Common.Utils.InternalSettings.set("pe-settings-showsnaplines", this.chAlignGuides.isChecked()); + Common.localStorage.setItem("pe-macros-mode", this.cmbMacros.getValue()); + Common.Utils.InternalSettings.set("pe-macros-mode", Common.localStorage.getItem("pe-macros-mode")); + Common.localStorage.save(); if (this.menu) { @@ -484,7 +513,14 @@ define([ strForcesave: 'Always save to server (otherwise save to server on document close)', txtSpellCheck: 'Spell Checking', strSpellCheckMode: 'Turn on spell checking option', - txtCacheMode: 'Default cache mode' + txtCacheMode: 'Default cache mode', + strMacrosSettings: 'Macros Settings', + txtWarnMacros: 'Show Notification', + txtRunMacros: 'Enable All', + txtStopMacros: 'Disable All', + txtWarnMacrosDesc: 'Disable all macros with notification', + txtRunMacrosDesc: 'Enable all macros without notification', + txtStopMacrosDesc: 'Disable all macros without notification' }, PE.Views.FileMenuPanels.Settings || {})); PE.Views.FileMenuPanels.RecentFiles = Common.UI.BaseView.extend({ diff --git a/apps/spreadsheeteditor/main/app/controller/Main.js b/apps/spreadsheeteditor/main/app/controller/Main.js index 2d716ff0b..01212cb3b 100644 --- a/apps/spreadsheeteditor/main/app/controller/Main.js +++ b/apps/spreadsheeteditor/main/app/controller/Main.js @@ -390,6 +390,14 @@ define([ $('#editor_sdk').append('
' + '
'.repeat(2) + '
'); } + var value = Common.localStorage.getItem("sse-macros-mode"); + if (value === null) { + value = this.editorConfig.customization ? this.editorConfig.customization.macrosMode : 'warn'; + value = (value == 'enable') ? 1 : (value == 'disable' ? 2 : 0); + } else + value = parseInt(value); + Common.Utils.InternalSettings.set("sse-macros-mode", value); + this.isFrameClosed = (this.appOptions.isEditDiagram || this.appOptions.isEditMailMerge); Common.Controllers.Desktop.init(this.appOptions); }, @@ -422,6 +430,11 @@ define([ docInfo.put_Permissions(_permissions); docInfo.put_EncryptedInfo(this.editorConfig.encryptionKeys); + var enable = !this.editorConfig.customization || (this.editorConfig.customization.macros!==false); + docInfo.asc_putIsEnabledMacroses(!!enable); + enable = !this.editorConfig.customization || (this.editorConfig.customization.plugins!==false); + docInfo.asc_putIsEnabledPlugins(!!enable); + this.headerView && this.headerView.setDocumentCaption(data.doc.title); Common.Utils.InternalSettings.set("sse-doc-info-key", data.doc.key); @@ -429,6 +442,7 @@ define([ this.api.asc_registerCallback('asc_onGetEditorPermissions', _.bind(this.onEditorPermissions, this)); this.api.asc_registerCallback('asc_onLicenseChanged', _.bind(this.onLicenseChanged, this)); + this.api.asc_registerCallback('asc_onRunAutostartMacroses', _.bind(this.onRunAutostartMacroses, this)); this.api.asc_setDocInfo(docInfo); this.api.asc_getEditorPermissions(this.editorConfig.licenseUrl, this.editorConfig.customerId); }, @@ -2183,6 +2197,36 @@ define([ }}); }, + onRunAutostartMacroses: function() { + var me = this, + enable = !this.editorConfig.customization || (this.editorConfig.customization.macros!==false); + if (enable) { + var value = Common.Utils.InternalSettings.get("sse-macros-mode"); + if (value==1) + this.api.asc_runAutostartMacroses(); + else if (value === 0) { + Common.UI.warning({ + msg: this.textHasMacros + '
', + buttons: ['yes', 'no'], + primary: 'yes', + dontshow: true, + textDontShow: this.textRemember, + callback: function(btn, dontshow){ + if (dontshow) { + Common.Utils.InternalSettings.set("sse-macros-mode", (btn == 'yes') ? 1 : 2); + Common.localStorage.setItem("sse-macros-mode", (btn == 'yes') ? 1 : 2); + } + if (btn == 'yes') { + setTimeout(function() { + me.api.asc_runAutostartMacroses(); + }, 1); + } + } + }); + } + } + }, + leavePageText: 'You have unsaved changes in this document. Click \'Stay on this Page\' then \'Save\' to save them. Click \'Leave this Page\' to discard all the unsaved changes.', criticalErrorTitle: 'Error', notcriticalErrorTitle: 'Warning', @@ -2548,7 +2592,9 @@ define([ txtRowLbls: 'Row Labels', txtColLbls: 'Column Labels', errNoDuplicates: 'No duplicate values found.', - errRemDuplicates: 'Duplicate values found and deleted: {0}, unique values left: {1}.' + errRemDuplicates: 'Duplicate values found and deleted: {0}, unique values left: {1}.', + textHasMacros: 'The file contains automatic macros.
Do you want to run macros?', + textRemember: 'Remember my choice' } })(), SSE.Controllers.Main || {})) }); diff --git a/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js b/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js index 61385ae5d..848719a1b 100644 --- a/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js +++ b/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js @@ -667,6 +667,12 @@ define([ '', '
', '','', + '', + '', + '', + '
', + '
', + '','', '', '', '', @@ -897,6 +903,21 @@ define([ var $thousandsSeparatorInput = this.inputThousandsSeparator.$el.find('input'); $thousandsSeparatorInput.on('keydown', keyDown); + this.cmbMacros = new Common.UI.ComboBox({ + el : $markup.findById('#fms-cmb-macros'), + style : 'width: 160px;', + editable : false, + cls : 'input-group-nr', + data : [ + { value: 2, displayValue: this.txtStopMacros, descValue: this.txtStopMacrosDesc }, + { value: 0, displayValue: this.txtWarnMacros, descValue: this.txtWarnMacrosDesc }, + { value: 1, displayValue: this.txtRunMacros, descValue: this.txtRunMacrosDesc } + ] + }).on('selected', function(combo, record) { + me.lblMacrosDesc.text(record.descValue); + }); + this.lblMacrosDesc = $markup.findById('#fms-lbl-macros'); + this.btnApply = new Common.UI.Button({ el: $markup.findById('#fms-btn-apply') }); @@ -932,6 +953,7 @@ define([ $('tr.forcesave', this.el)[mode.canForcesave ? 'show' : 'hide'](); $('tr.comments', this.el)[mode.canCoAuthoring ? 'show' : 'hide'](); $('tr.coauth.changes', this.el)[mode.isEdit && !mode.isOffline && mode.canCoAuthoring? 'show' : 'hide'](); + $('tr.macros', this.el)[(mode.customization && mode.customization.macros===false) ? 'hide' : 'show'](); }, setApi: function(api) { @@ -1016,6 +1038,10 @@ define([ } else { this.$el.find('.label-separator').removeClass('disabled'); } + + item = this.cmbMacros.store.findWhere({value: Common.Utils.InternalSettings.get("sse-macros-mode")}); + this.cmbMacros.setValue(item ? item.get('value') : 0); + this.lblMacrosDesc.text(item ? item.get('descValue') : this.txtWarnMacrosDesc); }, applySettings: function() { @@ -1056,6 +1082,9 @@ define([ Common.localStorage.setBool("sse-settings-use-base-separator", isChecked); Common.Utils.InternalSettings.set("sse-settings-use-base-separator", isChecked); + Common.localStorage.setItem("sse-macros-mode", this.cmbMacros.getValue()); + Common.Utils.InternalSettings.set("sse-macros-mode", Common.localStorage.getItem("sse-macros-mode")); + Common.localStorage.save(); if (this.menu) { this.menu.fireEvent('settings:apply', [this.menu]); @@ -1150,7 +1179,14 @@ define([ strUseSeparatorsBasedOnRegionalSettings: 'Use separators based on regional settings', strDecimalSeparator: 'Decimal separator', strThousandsSeparator: 'Thousands separator', - txtCacheMode: 'Default cache mode' + txtCacheMode: 'Default cache mode', + strMacrosSettings: 'Macros Settings', + txtWarnMacros: 'Show Notification', + txtRunMacros: 'Enable All', + txtStopMacros: 'Disable All', + txtWarnMacrosDesc: 'Disable all macros with notification', + txtRunMacrosDesc: 'Enable all macros without notification', + txtStopMacrosDesc: 'Disable all macros without notification' }, SSE.Views.FileMenuPanels.MainSettingsGeneral || {})); SSE.Views.FileMenuPanels.MainSpellCheckSettings = Common.UI.BaseView.extend(_.extend({ From 0873f056e1fc9c5ab25537a291b38e453c8873cf Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Fri, 22 May 2020 18:02:18 +0300 Subject: [PATCH 39/92] [common] fixed 'isVisible' function of LoadMask --- apps/common/main/lib/component/LoadMask.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/common/main/lib/component/LoadMask.js b/apps/common/main/lib/component/LoadMask.js index d7922f81b..93d7b4a86 100644 --- a/apps/common/main/lib/component/LoadMask.js +++ b/apps/common/main/lib/component/LoadMask.js @@ -167,7 +167,7 @@ define([ }, isVisible: function() { - return !_.isEmpty(loaderEl); + return loaderEl.is(':visible'); }, updatePosition: function() { From b1233935d82922d4d508f1d0e48447f36a38f8aa Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Fri, 22 May 2020 18:02:54 +0300 Subject: [PATCH 40/92] [desktop] changed 'desktop' controller --- apps/common/main/lib/controller/Desktop.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/common/main/lib/controller/Desktop.js b/apps/common/main/lib/controller/Desktop.js index a5cd5bae3..3c82eaa27 100644 --- a/apps/common/main/lib/controller/Desktop.js +++ b/apps/common/main/lib/controller/Desktop.js @@ -276,7 +276,7 @@ define([ } else if ( opts == 'create:new' ) { if (config.createUrl == 'desktop://create.new') { - native.LocalFileCreate(!!window.SSE ? 2 : !!window.PE ? 1 : 0); + native.execCommand("create:new", !!window.SSE ? 'cell' : !!window.PE ? 'slide' : 'word'); return true; } } From 6f093dba4a08ab70d4ac10e11659cd966fec9112 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 22 May 2020 18:34:00 +0300 Subject: [PATCH 41/92] [PE embedded][SSE embedded] Add parameters to api customization: macros, plugins --- .../embed/js/ApplicationController.js | 12 ++++++++++++ .../embed/js/ApplicationController.js | 11 +++++++++++ 2 files changed, 23 insertions(+) diff --git a/apps/presentationeditor/embed/js/ApplicationController.js b/apps/presentationeditor/embed/js/ApplicationController.js index ffaf30b11..ca7a6b9ae 100644 --- a/apps/presentationeditor/embed/js/ApplicationController.js +++ b/apps/presentationeditor/embed/js/ApplicationController.js @@ -101,8 +101,14 @@ PE.ApplicationController = new(function(){ docInfo.put_Token(docConfig.token); docInfo.put_Permissions(_permissions); + var enable = !config.customization || (config.customization.macros!==false); + docInfo.asc_putIsEnabledMacroses(!!enable); + enable = !config.customization || (config.customization.plugins!==false); + docInfo.asc_putIsEnabledPlugins(!!enable); + if (api) { api.asc_registerCallback('asc_onGetEditorPermissions', onEditorPermissions); + api.asc_registerCallback('asc_onRunAutostartMacroses', onRunAutostartMacroses); api.asc_setDocInfo(docInfo); api.asc_getEditorPermissions(config.licenseUrl, config.customerId); api.asc_enableKeyEvents(true); @@ -580,6 +586,12 @@ PE.ApplicationController = new(function(){ } if (api) api.asc_DownloadAs(new Asc.asc_CDownloadOptions(Asc.c_oAscFileType.PPTX, true)); } + + function onRunAutostartMacroses() { + if (!config.customization || (config.customization.macros!==false)) + if (api) api.asc_runAutostartMacroses(); + } + // Helpers // ------------------------- diff --git a/apps/spreadsheeteditor/embed/js/ApplicationController.js b/apps/spreadsheeteditor/embed/js/ApplicationController.js index 722ed7a11..225f2b811 100644 --- a/apps/spreadsheeteditor/embed/js/ApplicationController.js +++ b/apps/spreadsheeteditor/embed/js/ApplicationController.js @@ -99,8 +99,14 @@ SSE.ApplicationController = new(function(){ docInfo.put_Token(docConfig.token); docInfo.put_Permissions(_permissions); + var enable = !config.customization || (config.customization.macros!==false); + docInfo.asc_putIsEnabledMacroses(!!enable); + enable = !config.customization || (config.customization.plugins!==false); + docInfo.asc_putIsEnabledPlugins(!!enable); + if (api) { api.asc_registerCallback('asc_onGetEditorPermissions', onEditorPermissions); + api.asc_registerCallback('asc_onRunAutostartMacroses', onRunAutostartMacroses); api.asc_setDocInfo(docInfo); api.asc_getEditorPermissions(config.licenseUrl, config.customerId); api.asc_enableKeyEvents(true); @@ -531,6 +537,11 @@ SSE.ApplicationController = new(function(){ } } + function onRunAutostartMacroses() { + if (!config.customization || (config.customization.macros!==false)) + if (api) api.asc_runAutostartMacroses(); + } + // Helpers // ------------------------- From d9966b440c3526f6f5418703e72b5ee3444bcefe Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 22 May 2020 18:38:03 +0300 Subject: [PATCH 42/92] [PE mobile][SSE mobile] Add parameters to api customization: macros, plugins --- apps/presentationeditor/mobile/app/controller/Main.js | 11 +++++++++++ apps/spreadsheeteditor/mobile/app/controller/Main.js | 11 +++++++++++ 2 files changed, 22 insertions(+) diff --git a/apps/presentationeditor/mobile/app/controller/Main.js b/apps/presentationeditor/mobile/app/controller/Main.js index 6cb144489..d1d2f755f 100644 --- a/apps/presentationeditor/mobile/app/controller/Main.js +++ b/apps/presentationeditor/mobile/app/controller/Main.js @@ -257,10 +257,16 @@ define([ docInfo.put_Token(data.doc.token); docInfo.put_Permissions(_permissions); docInfo.put_EncryptedInfo(this.editorConfig.encryptionKeys); + + var enable = !this.editorConfig.customization || (this.editorConfig.customization.macros!==false); + docInfo.asc_putIsEnabledMacroses(!!enable); + enable = !this.editorConfig.customization || (this.editorConfig.customization.plugins!==false); + docInfo.asc_putIsEnabledPlugins(!!enable); } this.api.asc_registerCallback('asc_onGetEditorPermissions', _.bind(this.onEditorPermissions, this)); this.api.asc_registerCallback('asc_onLicenseChanged', _.bind(this.onLicenseChanged, this)); + this.api.asc_registerCallback('asc_onRunAutostartMacroses', _.bind(this.onRunAutostartMacroses, this)); this.api.asc_setDocInfo(docInfo); this.api.asc_getEditorPermissions(this.editorConfig.licenseUrl, this.editorConfig.customerId); @@ -1278,6 +1284,11 @@ define([ return false; }, + onRunAutostartMacroses: function() { + if (!this.editorConfig.customization || (this.editorConfig.customization.macros!==false)) + if (this.api) this.api.asc_runAutostartMacroses(); + }, + // Translation leavePageText: 'You have unsaved changes in this document. Click \'Stay on this Page\' to await the autosave of the document. Click \'Leave this Page\' to discard all the unsaved changes.', criticalErrorTitle: 'Error', diff --git a/apps/spreadsheeteditor/mobile/app/controller/Main.js b/apps/spreadsheeteditor/mobile/app/controller/Main.js index 927dc8965..8c655506e 100644 --- a/apps/spreadsheeteditor/mobile/app/controller/Main.js +++ b/apps/spreadsheeteditor/mobile/app/controller/Main.js @@ -270,10 +270,16 @@ define([ docInfo.put_Token(data.doc.token); docInfo.put_Permissions(_permissions); docInfo.put_EncryptedInfo(this.editorConfig.encryptionKeys); + + var enable = !this.editorConfig.customization || (this.editorConfig.customization.macros!==false); + docInfo.asc_putIsEnabledMacroses(!!enable); + enable = !this.editorConfig.customization || (this.editorConfig.customization.plugins!==false); + docInfo.asc_putIsEnabledPlugins(!!enable); } this.api.asc_registerCallback('asc_onGetEditorPermissions', _.bind(this.onEditorPermissions, this)); this.api.asc_registerCallback('asc_onLicenseChanged', _.bind(this.onLicenseChanged, this)); + this.api.asc_registerCallback('asc_onRunAutostartMacroses', _.bind(this.onRunAutostartMacroses, this)); this.api.asc_setDocInfo(docInfo); this.api.asc_getEditorPermissions(this.editorConfig.licenseUrl, this.editorConfig.customerId); @@ -1483,6 +1489,11 @@ define([ return false; }, + onRunAutostartMacroses: function() { + if (!this.editorConfig.customization || (this.editorConfig.customization.macros!==false)) + if (this.api) this.api.asc_runAutostartMacroses(); + }, + leavePageText: 'You have unsaved changes in this document. Click \'Stay on this Page\' to await the autosave of the document. Click \'Leave this Page\' to discard all the unsaved changes.', criticalErrorTitle: 'Error', notcriticalErrorTitle: 'Warning', From 5112041426d14949bf7687ec3ccbba9f757e438d Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 22 May 2020 18:40:38 +0300 Subject: [PATCH 43/92] [Embedded] Send config.encryptionKeys to sdk --- apps/documenteditor/embed/js/ApplicationController.js | 1 + apps/presentationeditor/embed/js/ApplicationController.js | 1 + apps/spreadsheeteditor/embed/js/ApplicationController.js | 1 + 3 files changed, 3 insertions(+) diff --git a/apps/documenteditor/embed/js/ApplicationController.js b/apps/documenteditor/embed/js/ApplicationController.js index 0e7c5c288..8eef26616 100644 --- a/apps/documenteditor/embed/js/ApplicationController.js +++ b/apps/documenteditor/embed/js/ApplicationController.js @@ -99,6 +99,7 @@ DE.ApplicationController = new(function(){ docInfo.put_VKey(docConfig.vkey); docInfo.put_Token(docConfig.token); docInfo.put_Permissions(_permissions); + docInfo.put_EncryptedInfo(config.encryptionKeys); var enable = !config.customization || (config.customization.macros!==false); docInfo.asc_putIsEnabledMacroses(!!enable); diff --git a/apps/presentationeditor/embed/js/ApplicationController.js b/apps/presentationeditor/embed/js/ApplicationController.js index ca7a6b9ae..244aa0e0e 100644 --- a/apps/presentationeditor/embed/js/ApplicationController.js +++ b/apps/presentationeditor/embed/js/ApplicationController.js @@ -100,6 +100,7 @@ PE.ApplicationController = new(function(){ docInfo.put_VKey(docConfig.vkey); docInfo.put_Token(docConfig.token); docInfo.put_Permissions(_permissions); + docInfo.put_EncryptedInfo(config.encryptionKeys); var enable = !config.customization || (config.customization.macros!==false); docInfo.asc_putIsEnabledMacroses(!!enable); diff --git a/apps/spreadsheeteditor/embed/js/ApplicationController.js b/apps/spreadsheeteditor/embed/js/ApplicationController.js index 225f2b811..6b9a0bc31 100644 --- a/apps/spreadsheeteditor/embed/js/ApplicationController.js +++ b/apps/spreadsheeteditor/embed/js/ApplicationController.js @@ -98,6 +98,7 @@ SSE.ApplicationController = new(function(){ docInfo.put_VKey(docConfig.vkey); docInfo.put_Token(docConfig.token); docInfo.put_Permissions(_permissions); + docInfo.put_EncryptedInfo(config.encryptionKeys); var enable = !config.customization || (config.customization.macros!==false); docInfo.asc_putIsEnabledMacroses(!!enable); From a91f56adde057debe1cbb074197c68a8a3f79456 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 22 May 2020 19:38:23 +0300 Subject: [PATCH 44/92] [SSE] Formula wizard: fix focus after selecting data --- apps/spreadsheeteditor/main/app/view/FormulaWizard.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js index 068b8ef96..33a5e0a69 100644 --- a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js +++ b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js @@ -362,6 +362,11 @@ define([ input.setValue(changedValue); me.onInputChanging(input); me.show(); + _.delay(function(){ + me._noApply = true; + input.cmpEl.find('input').focus(); + me._noApply = false; + },1); }); var xy = me.$window.offset(); From 8455e7a992b54744beb6de074318c2e93a5338d7 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 25 May 2020 18:50:25 +0300 Subject: [PATCH 45/92] [SSE] Function wizard: send function name --- apps/spreadsheeteditor/main/app/view/FormulaWizard.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js index 33a5e0a69..bb8c346d7 100644 --- a/apps/spreadsheeteditor/main/app/view/FormulaWizard.js +++ b/apps/spreadsheeteditor/main/app/view/FormulaWizard.js @@ -287,7 +287,7 @@ define([ var me = this, index = input.options.index, arg = me.args[index]; - var res = me.api.asc_insertArgumentsInFormula(me.getArgumentsValue(), index, arg.argType), + var res = me.api.asc_insertArgumentsInFormula(me.getArgumentsValue(), index, arg.argType, this.funcprops ? this.funcprops.origin : undefined), argres = res ? res.asc_getArgumentsResult() : undefined; argres = argres ? argres[index] : undefined; arg.lblValue.html('= '+ (argres!==null && argres !==undefined ? argres : '' + arg.argTypeName + '' )); From 61b38d6888ef93fc06d797bcd62a9b9267b9161a Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 25 May 2020 20:25:16 +0300 Subject: [PATCH 46/92] [SSE] Show slicer settings --- .../main/app/controller/DocumentHolder.js | 28 ++++++++++++++- .../main/app/view/DocumentHolder.js | 15 ++++++-- .../main/app/view/SlicerSettings.js | 34 ++++++++++++++----- 3 files changed, 65 insertions(+), 12 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js index 9cc423981..90b1e9e75 100644 --- a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js +++ b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js @@ -71,7 +71,8 @@ define([ 'spreadsheeteditor/main/app/view/ImageSettingsAdvanced', 'spreadsheeteditor/main/app/view/SetValueDialog', 'spreadsheeteditor/main/app/view/AutoFilterDialog', - 'spreadsheeteditor/main/app/view/SpecialPasteDialog' + 'spreadsheeteditor/main/app/view/SpecialPasteDialog', + 'spreadsheeteditor/main/app/view/SlicerSettings' ], function () { 'use strict'; @@ -224,6 +225,7 @@ define([ view.mnuShapeAdvanced.on('click', _.bind(me.onShapeAdvanced, me)); view.mnuChartEdit.on('click', _.bind(me.onChartEdit, me)); view.mnuImgAdvanced.on('click', _.bind(me.onImgAdvanced, me)); + view.mnuSlicerAdvanced.on('click', _.bind(me.onSlicerAdvanced, me)); view.textInShapeMenu.on('render:after', _.bind(me.onTextInShapeAfterRender, me)); view.menuSignatureEditSign.on('click', _.bind(me.onSignatureClick, me)); view.menuSignatureEditSetup.on('click', _.bind(me.onSignatureClick, me)); @@ -878,6 +880,25 @@ define([ })).show(); }, + onSlicerAdvanced: function(item) { + var me = this; + + (new SSE.Views.SlicerSettings({ + props : item.imageInfo, + api : me.api, + handler : function(result, value) { + if (result == 'ok') { + if (me.api) { + me.api.asc_setGraphicObjectProps(value.imageProps); + + Common.component.Analytics.trackEvent('DocumentHolder', 'Apply slicer settings'); + } + } + Common.NotificationCenter.trigger('edit:complete', me); + } + })).show(); + }, + onChartEdit: function(item) { var me = this; var win, props; @@ -1619,6 +1640,7 @@ define([ has_chartprops = true; } else { documentHolder.mnuImgAdvanced.imageInfo = elValue; + documentHolder.mnuSlicerAdvanced.imageInfo = elValue; isimagemenu = true; } if (this.permissions.isSignatureSupport) @@ -1647,6 +1669,9 @@ define([ if (documentHolder.mnuImgAdvanced.imageInfo) documentHolder.menuImgOriginalSize.setDisabled(isObjLocked || documentHolder.mnuImgAdvanced.imageInfo.get_ImageUrl()===null || documentHolder.mnuImgAdvanced.imageInfo.get_ImageUrl()===undefined); + documentHolder.mnuSlicerAdvanced.setVisible(documentHolder.mnuImgAdvanced.imageInfo &&documentHolder.mnuImgAdvanced.imageInfo.asc_getSlicerProperties()); + documentHolder.mnuSlicerAdvanced.setDisabled(isObjLocked); + var pluginGuid = (documentHolder.mnuImgAdvanced.imageInfo) ? documentHolder.mnuImgAdvanced.imageInfo.asc_getPluginGuid() : null; documentHolder.menuImgReplace.setVisible(isimageonly && (pluginGuid===null || pluginGuid===undefined)); documentHolder.menuImgReplace.setDisabled(isObjLocked || pluginGuid===null); @@ -1671,6 +1696,7 @@ define([ if (showMenu) this.showPopupMenu(documentHolder.imgMenu, {}, event); documentHolder.mnuShapeSeparator.setVisible(documentHolder.mnuShapeAdvanced.isVisible() || documentHolder.mnuChartEdit.isVisible() || documentHolder.mnuImgAdvanced.isVisible()); + documentHolder.mnuSlicerSeparator.setVisible(documentHolder.mnuSlicerAdvanced.isVisible()); } else if (istextshapemenu || istextchartmenu) { if (!documentHolder.textInShapeMenu || !showMenu && !documentHolder.textInShapeMenu.isVisible()) return; diff --git a/apps/spreadsheeteditor/main/app/view/DocumentHolder.js b/apps/spreadsheeteditor/main/app/view/DocumentHolder.js index 621715714..fc8903950 100644 --- a/apps/spreadsheeteditor/main/app/view/DocumentHolder.js +++ b/apps/spreadsheeteditor/main/app/view/DocumentHolder.js @@ -567,6 +567,14 @@ define([ caption : me.advancedImgText }); + me.mnuSlicerSeparator = new Common.UI.MenuItem({ + caption : '--' + }); + + me.mnuSlicerAdvanced = new Common.UI.MenuItem({ + caption : me.advancedSlicerText + }); + me.mnuChartEdit = new Common.UI.MenuItem({ caption : me.chartText }); @@ -761,7 +769,9 @@ define([ me.mnuShapeAdvanced, me.menuImgOriginalSize, me.menuImgReplace, - me.mnuImgAdvanced + me.mnuImgAdvanced, + me.mnuSlicerSeparator, + me.mnuSlicerAdvanced ] }); @@ -1100,7 +1110,8 @@ define([ textCropFill: 'Fill', textCropFit: 'Fit', textListSettings: 'List Settings', - textFromStorage: 'From Storage' + textFromStorage: 'From Storage', + advancedSlicerText: 'Slicer Settings' }, SSE.Views.DocumentHolder || {})); }); \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/app/view/SlicerSettings.js b/apps/spreadsheeteditor/main/app/view/SlicerSettings.js index 76717d835..a1ebbab62 100644 --- a/apps/spreadsheeteditor/main/app/view/SlicerSettings.js +++ b/apps/spreadsheeteditor/main/app/view/SlicerSettings.js @@ -296,19 +296,35 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettings.template', }, _setDefaults: function(props) { - if (props ){ - this._noApply = true; + if (props){ + var value = props.asc_getWidth(); + this.numWidth.setValue((value!==null) ? Common.Utils.Metric.fnRecalcFromMM(value).toFixed(2) : '', true); + value = props.asc_getHeight(); + this.numHeight.setValue((value!==null) ? Common.Utils.Metric.fnRecalcFromMM(value).toFixed(2) : '', true); - // depents of data type - this.radioAsc.setCaption(this.textAsc + ' (' + this.textSmallLarge + ')' ); - this.radioDesc.setCaption(this.textDesc + ' (' + this.textLargeSmall + ')' ); + var slicerprops = props.asc_getSlicerProperties(); + if (slicerprops) { + this._noApply = true; - this.lblSource.text('Source name'); - this.lblFormula.text('Name in formulas'); + this.numCols.setValue(slicerprops.asc_getColumnCount(), true); + // this.numColWidth.setValue(Common.Utils.Metric.fnRecalcFromMM(slicerprops.asc_getColWidth()).toFixed(2), true); + this.numColHeight.setValue(Common.Utils.Metric.fnRecalcFromMM(slicerprops.asc_getRowHeight()).toFixed(2), true); - this._noApply = false; + this.inputHeader.setValue(slicerprops.asc_getCaption()); + this.chHeader.setValue(!!slicerprops.asc_getShowCaption()); - this._changedProps = new Asc.asc_CParagraphProperty(); + // depends of data type + this.radioAsc.setCaption(this.textAsc + ' (' + this.textSmallLarge + ')' ); + this.radioDesc.setCaption(this.textDesc + ' (' + this.textLargeSmall + ')' ); + + this.inputName.setValue(slicerprops.asc_getName()); + this.lblSource.text('Source name'); + this.lblFormula.text('Name in formulas'); + + this._noApply = false; + + this._changedProps = slicerprops; + } } }, From 95a6e48e16fa798a0b8d1fbdd5c989f5d3bde4bf Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 26 May 2020 17:14:58 +0300 Subject: [PATCH 47/92] [SSE] Load slicer settings --- .../main/app/controller/DocumentHolder.js | 4 +- ...mplate => SlicerSettingsAdvanced.template} | 31 +++- ...rSettings.js => SlicerSettingsAdvanced.js} | 139 +++++++++++++----- 3 files changed, 134 insertions(+), 40 deletions(-) rename apps/spreadsheeteditor/main/app/template/{SlicerSettings.template => SlicerSettingsAdvanced.template} (76%) rename apps/spreadsheeteditor/main/app/view/{SlicerSettings.js => SlicerSettingsAdvanced.js} (70%) diff --git a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js index 90b1e9e75..9f15a2737 100644 --- a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js +++ b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js @@ -72,7 +72,7 @@ define([ 'spreadsheeteditor/main/app/view/SetValueDialog', 'spreadsheeteditor/main/app/view/AutoFilterDialog', 'spreadsheeteditor/main/app/view/SpecialPasteDialog', - 'spreadsheeteditor/main/app/view/SlicerSettings' + 'spreadsheeteditor/main/app/view/SlicerSettingsAdvanced' ], function () { 'use strict'; @@ -883,7 +883,7 @@ define([ onSlicerAdvanced: function(item) { var me = this; - (new SSE.Views.SlicerSettings({ + (new SSE.Views.SlicerSettingsAdvanced({ props : item.imageInfo, api : me.api, handler : function(result, value) { diff --git a/apps/spreadsheeteditor/main/app/template/SlicerSettings.template b/apps/spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.template similarity index 76% rename from apps/spreadsheeteditor/main/app/template/SlicerSettings.template rename to apps/spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.template index 0f8b55c6d..26f58b9ca 100644 --- a/apps/spreadsheeteditor/main/app/template/SlicerSettings.template +++ b/apps/spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.template @@ -26,10 +26,10 @@
-
- -
-
+ + + +
@@ -73,4 +73,27 @@
+
+
+
+ + + + + + + + + + +
+ +
+
+ + +
+ +
+
\ No newline at end of file diff --git a/apps/spreadsheeteditor/main/app/view/SlicerSettings.js b/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js similarity index 70% rename from apps/spreadsheeteditor/main/app/view/SlicerSettings.js rename to apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js index a1ebbab62..b045bee00 100644 --- a/apps/spreadsheeteditor/main/app/view/SlicerSettings.js +++ b/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js @@ -31,14 +31,14 @@ * */ /** - * SlicerSettings.js + * SlicerSettingsAdvanced.js * * Created by Julia Radzhabova on 14.04.2020 * Copyright (c) 2018 Ascensio System SIA. All rights reserved. * */ -define([ 'text!spreadsheeteditor/main/app/template/SlicerSettings.template', +define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.template', 'common/main/lib/view/AdvancedSettingsWindow', 'common/main/lib/component/MetricSpinner', 'common/main/lib/component/CheckBox', @@ -47,7 +47,7 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettings.template', ], function (contentTemplate) { 'use strict'; - SSE.Views.SlicerSettings = Common.Views.AdvancedSettingsWindow.extend(_.extend({ + SSE.Views.SlicerSettingsAdvanced = Common.Views.AdvancedSettingsWindow.extend(_.extend({ options: { contentWidth: 330, height: 435, @@ -62,7 +62,8 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettings.template', items: [ {panelId: 'id-adv-slicer-style', panelCaption: this.strStyleSize}, {panelId: 'id-adv-slicer-sorting', panelCaption: this.strSorting}, - {panelId: 'id-adv-slicer-references', panelCaption: this.strReferences} + {panelId: 'id-adv-slicer-references', panelCaption: this.strReferences}, + {panelId: 'id-adv-image-alttext', panelCaption: this.textAlt} ], contentTemplate: _.template(contentTemplate)({ scope: this @@ -88,6 +89,8 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettings.template', allowBlank : false, blankError : me.txtEmpty, style : 'width: 178px;' + }).on('changed:after', function() { + me.isCaptionChanged = true; }); this.chHeader = new Common.UI.CheckBox({ @@ -96,7 +99,7 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettings.template', }); this.chHeader.on('change', _.bind(function(field, newValue, oldValue, eOpts){ if (this._changedProps) { - // this._changedProps.asc_putStrikeout(field.getValue()=='checked'); + this._changedProps.asc_setShowCaption(field.getValue()=='checked'); } }, this)); @@ -130,7 +133,8 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettings.template', }); this.numWidth.on('change', _.bind(function(field, newValue, oldValue, eOpts){ var numval = field.getNumberValue(); - if (this._changedProps) { + if (this._originalProps) { + this._originalProps.put_Width(Common.Utils.Metric.fnRecalcToMM(numval)); } }, this)); this.spinners.push(this.numWidth); @@ -147,27 +151,29 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettings.template', }); this.numHeight.on('change', _.bind(function(field, newValue, oldValue, eOpts){ var numval = field.getNumberValue(); - if (this._changedProps) { + if (this._originalProps) { + this._originalProps.put_Height(Common.Utils.Metric.fnRecalcToMM(numval)); } }, this)); this.spinners.push(this.numHeight); - this.numColWidth = new Common.UI.MetricSpinner({ - el: $('#sliceradv-spin-col-width'), - step: .1, - width: 85, - defaultUnit : "cm", - defaultValue : 0, - value: '0 cm', - maxValue: 5963.9, - minValue: 0 - }); - this.numColWidth.on('change', _.bind(function(field, newValue, oldValue, eOpts){ - var numval = field.getNumberValue(); - if (this._changedProps) { - } - }, this)); - this.spinners.push(this.numColWidth); + // this.numColWidth = new Common.UI.MetricSpinner({ + // el: $('#sliceradv-spin-col-width'), + // step: .1, + // width: 85, + // defaultUnit : "cm", + // defaultValue : 0, + // value: '0 cm', + // maxValue: 5963.9, + // minValue: 0, + // visible: false + // }); + // this.numColWidth.on('change', _.bind(function(field, newValue, oldValue, eOpts){ + // var numval = field.getNumberValue(); + // if (this._changedProps) { + // } + // }, this)); + // this.spinners.push(this.numColWidth); this.numColHeight = new Common.UI.MetricSpinner({ el: $('#sliceradv-spin-col-height'), @@ -182,6 +188,7 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettings.template', this.numColHeight.on('change', _.bind(function(field, newValue, oldValue, eOpts){ var numval = field.getNumberValue(); if (this._changedProps) { + this._changedProps.asc_setRowHeight(Common.Utils.Metric.fnRecalcToMM(numval)*36000); } }, this)); this.spinners.push(this.numColHeight); @@ -200,6 +207,7 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettings.template', this.numCols.on('change', _.bind(function(field, newValue, oldValue, eOpts){ var numval = field.getNumberValue(); if (this._changedProps) { + this._changedProps.asc_setColumnCount(numval); } }, this)); @@ -213,6 +221,9 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettings.template', }); this.radioAsc.on('change', _.bind(function(field, newValue, eOpts) { if (newValue) { + if (this._changedProps) { + this._changedProps.asc_setSortOrder(Asc.ST_tabularSlicerCacheSortOrder.Ascending); + } } }, this)); @@ -224,6 +235,9 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettings.template', }); this.radioDesc.on('change', _.bind(function(field, newValue, eOpts) { if (newValue) { + if (this._changedProps) { + this._changedProps.asc_setSortOrder(Asc.ST_tabularSlicerCacheSortOrder.Descending); + } } }, this)); @@ -237,6 +251,7 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettings.template', this.chShowNoData.setDisabled(checked || (this.chIndNoData.getValue()!='checked')); this.chShowDel.setDisabled(checked); if (this._changedProps) { + this._changedProps.asc_setHideItemsWithNoData(checked); } }, this)); @@ -248,6 +263,7 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettings.template', var checked = (field.getValue()=='checked'); this.chShowNoData.setDisabled(!checked); if (this._changedProps) { + this._changedProps.asc_setIndicateItemsWithNoData(checked); } }, this)); @@ -258,7 +274,7 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettings.template', }); this.chShowNoData.on('change', _.bind(function(field, newValue, oldValue, eOpts){ if (this._changedProps) { - // this._changedProps.asc_putStrikeout(field.getValue()=='checked'); + this._changedProps.asc_setHideItemsWithNoData(field.getValue()=='checked'); } }, this)); @@ -279,11 +295,32 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettings.template', allowBlank : false, blankError : me.txtEmpty, style : 'width: 178px;' + }).on('changed:after', function() { + me.isNameChanged = true; }); this.lblSource = $('#sliceradv-lbl-source'); this.lblFormula = $('#sliceradv-lbl-formula'); + // Alt Text + + this.inputAltTitle = new Common.UI.InputField({ + el : $('#sliceradv-alt-title'), + allowBlank : true, + validateOnBlur: false, + style : 'width: 100%;' + }).on('changed:after', function() { + me.isAltTitleChanged = true; + }); + + this.textareaAltDescription = this.$window.find('textarea'); + this.textareaAltDescription.keydown(function (event) { + if (event.keyCode == Common.UI.Keys.RETURN) { + event.stopPropagation(); + } + me.isAltDescChanged = true; + }); + this.on('show', function(obj) { obj.getChild('.footer .primary').focus(); }); @@ -292,7 +329,18 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettings.template', }, getSettings: function() { - return this._changedProps; + if (this.isCaptionChanged) + this._changedProps.asc_setCaption(this.inputHeader.getValue()); + if (this.isNameChanged) + this._changedProps.asc_setName(this.inputName.getValue()); + + if (this.isAltTitleChanged) + this._originalProps.asc_putTitle(this.inputAltTitle.getValue()); + + if (this.isAltDescChanged) + this._originalProps.asc_putDescription(this.textareaAltDescription.val()); + + return this._originalProps; }, _setDefaults: function(props) { @@ -302,24 +350,43 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettings.template', value = props.asc_getHeight(); this.numHeight.setValue((value!==null) ? Common.Utils.Metric.fnRecalcFromMM(value).toFixed(2) : '', true); + value = props.asc_getTitle(); + this.inputAltTitle.setValue(value ? value : ''); + + value = props.asc_getDescription(); + this.textareaAltDescription.val(value ? value : ''); + var slicerprops = props.asc_getSlicerProperties(); if (slicerprops) { this._noApply = true; this.numCols.setValue(slicerprops.asc_getColumnCount(), true); // this.numColWidth.setValue(Common.Utils.Metric.fnRecalcFromMM(slicerprops.asc_getColWidth()).toFixed(2), true); - this.numColHeight.setValue(Common.Utils.Metric.fnRecalcFromMM(slicerprops.asc_getRowHeight()).toFixed(2), true); + this.numColHeight.setValue(Common.Utils.Metric.fnRecalcFromMM(slicerprops.asc_getRowHeight()/36000).toFixed(2), true); - this.inputHeader.setValue(slicerprops.asc_getCaption()); - this.chHeader.setValue(!!slicerprops.asc_getShowCaption()); + this.inputHeader.setValue(slicerprops.asc_getCaption(), true); + var checked = slicerprops.asc_getShowCaption(); + this.chHeader.setValue(checked !== null && checked !== undefined ? checked : 'indeterminate', true); // depends of data type - this.radioAsc.setCaption(this.textAsc + ' (' + this.textSmallLarge + ')' ); - this.radioDesc.setCaption(this.textDesc + ' (' + this.textLargeSmall + ')' ); + this.radioAsc.setCaption(this.textAsc + ' (' + this.textAZ + ')' ); + this.radioDesc.setCaption(this.textDesc + ' (' + this.textZA + ')' ); + (slicerprops.asc_getSortOrder()==Asc.ST_tabularSlicerCacheSortOrder.Ascending) ? this.radioAsc.setValue(true, true) : this.radioDesc.setValue(true, true); + + checked = slicerprops.asc_getIndicateItemsWithNoData(); + this.chIndNoData.setValue(checked !== null && checked !== undefined ? checked : 'indeterminate', true); + checked = slicerprops.asc_getShowItemsWithNoDataLast(); + this.chShowNoData.setValue(checked !== null && checked !== undefined ? checked : 'indeterminate', true); + checked = slicerprops.asc_getHideItemsWithNoData(); + this.chHideNoData.setValue(checked !== null && checked !== undefined ? checked : 'indeterminate', true); + + this.chIndNoData.setDisabled(checked); + this.chShowNoData.setDisabled(checked || (this.chIndNoData.getValue()!='checked')); + this.chShowDel.setDisabled(checked); this.inputName.setValue(slicerprops.asc_getName()); - this.lblSource.text('Source name'); - this.lblFormula.text('Name in formulas'); + this.lblSource.text(slicerprops.asc_getSourceName()); + this.lblFormula.text(slicerprops.asc_getNameInFormulas()); this._noApply = false; @@ -382,7 +449,11 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettings.template', strHideNoData: 'Hide items with no data', strIndNoData: 'Visually indicate items with no data', strShowNoData: 'Show items with no data last', - strShowDel: 'Show items deleted from the data source' + strShowDel: 'Show items deleted from the data source', + textAlt: 'Alternative Text', + textAltTitle: 'Title', + textAltDescription: 'Description', + textAltTip: 'The alternative text-based representation of the visual object information, which will be read to the people with vision or cognitive impairments to help them better understand what information there is in the image, autoshape, chart or table.', - }, SSE.Views.SlicerSettings || {})); + }, SSE.Views.SlicerSettingsAdvanced || {})); }); From 3584b6b7e4ee9fecf202579f4227b6b3cc420771 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 26 May 2020 17:27:49 +0300 Subject: [PATCH 48/92] [SSE] Fix context menu for slicer --- .../main/app/controller/DocumentHolder.js | 14 ++++++++------ .../main/app/view/DocumentHolder.js | 2 +- .../main/app/view/SlicerSettingsAdvanced.js | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js index 9f15a2737..d302faa4c 100644 --- a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js +++ b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js @@ -889,7 +889,7 @@ define([ handler : function(result, value) { if (result == 'ok') { if (me.api) { - me.api.asc_setGraphicObjectProps(value.imageProps); + me.api.asc_setGraphicObjectProps(value); Common.component.Analytics.trackEvent('DocumentHolder', 'Apply slicer settings'); } @@ -1586,7 +1586,7 @@ define([ }, fillMenuProps: function(cellinfo, showMenu, event){ - var iscellmenu, isrowmenu, iscolmenu, isallmenu, ischartmenu, isimagemenu, istextshapemenu, isshapemenu, istextchartmenu, isimageonly, + var iscellmenu, isrowmenu, iscolmenu, isallmenu, ischartmenu, isimagemenu, istextshapemenu, isshapemenu, istextchartmenu, isimageonly, isslicermenu, documentHolder = this.documentHolder, seltype = cellinfo.asc_getSelectionType(), isCellLocked = cellinfo.asc_getLocked(), @@ -1614,7 +1614,7 @@ define([ } else if (isimagemenu || isshapemenu || ischartmenu) { if (!documentHolder.imgMenu || !showMenu && !documentHolder.imgMenu.isVisible()) return; - isimagemenu = isshapemenu = ischartmenu = false; + isimagemenu = isshapemenu = ischartmenu = isslicermenu = false; documentHolder.mnuImgAdvanced.imageInfo = undefined; var has_chartprops = false, @@ -1638,9 +1638,11 @@ define([ documentHolder.mnuChartEdit.chartInfo = elValue; ischartmenu = true; has_chartprops = true; + } if ( elValue.asc_getSlicerProperties() ) { + documentHolder.mnuSlicerAdvanced.imageInfo = elValue; + isslicermenu = true; } else { documentHolder.mnuImgAdvanced.imageInfo = elValue; - documentHolder.mnuSlicerAdvanced.imageInfo = elValue; isimagemenu = true; } if (this.permissions.isSignatureSupport) @@ -1669,7 +1671,7 @@ define([ if (documentHolder.mnuImgAdvanced.imageInfo) documentHolder.menuImgOriginalSize.setDisabled(isObjLocked || documentHolder.mnuImgAdvanced.imageInfo.get_ImageUrl()===null || documentHolder.mnuImgAdvanced.imageInfo.get_ImageUrl()===undefined); - documentHolder.mnuSlicerAdvanced.setVisible(documentHolder.mnuImgAdvanced.imageInfo &&documentHolder.mnuImgAdvanced.imageInfo.asc_getSlicerProperties()); + documentHolder.mnuSlicerAdvanced.setVisible(isslicermenu); documentHolder.mnuSlicerAdvanced.setDisabled(isObjLocked); var pluginGuid = (documentHolder.mnuImgAdvanced.imageInfo) ? documentHolder.mnuImgAdvanced.imageInfo.asc_getPluginGuid() : null; @@ -1678,7 +1680,7 @@ define([ documentHolder.menuImgReplace.menu.items[2].setVisible(this.permissions.canRequestInsertImage || this.permissions.fileChoiceUrl && this.permissions.fileChoiceUrl.indexOf("{documentType}")>-1); documentHolder.menuImageArrange.setDisabled(isObjLocked); - documentHolder.menuImgRotate.setVisible(!ischartmenu && (pluginGuid===null || pluginGuid===undefined)); + documentHolder.menuImgRotate.setVisible(!ischartmenu && (pluginGuid===null || pluginGuid===undefined) && !isslicermenu); documentHolder.menuImgRotate.setDisabled(isObjLocked); documentHolder.menuImgCrop.setVisible(this.api.asc_canEditCrop()); diff --git a/apps/spreadsheeteditor/main/app/view/DocumentHolder.js b/apps/spreadsheeteditor/main/app/view/DocumentHolder.js index fc8903950..426965d04 100644 --- a/apps/spreadsheeteditor/main/app/view/DocumentHolder.js +++ b/apps/spreadsheeteditor/main/app/view/DocumentHolder.js @@ -1111,7 +1111,7 @@ define([ textCropFit: 'Fit', textListSettings: 'List Settings', textFromStorage: 'From Storage', - advancedSlicerText: 'Slicer Settings' + advancedSlicerText: 'Slicer Advanced Settings' }, SSE.Views.DocumentHolder || {})); }); \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js b/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js index b045bee00..5e89fba75 100644 --- a/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js +++ b/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js @@ -421,7 +421,7 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem } }, - textTitle: 'Slicer Settings', + textTitle: 'Slicer - Advanced Settings', textHeader: 'Header', strStyle: 'Style', strSize: 'Size', From 0ba1760176d1919046d90f06911f8fd23f6488f1 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 26 May 2020 19:47:24 +0300 Subject: [PATCH 49/92] [SSE] Add slicer for pivot and formatted table --- apps/spreadsheeteditor/main/app/controller/Toolbar.js | 1 + apps/spreadsheeteditor/main/app/view/Toolbar.js | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/Toolbar.js b/apps/spreadsheeteditor/main/app/controller/Toolbar.js index 7d2862e52..c2595b986 100644 --- a/apps/spreadsheeteditor/main/app/controller/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/controller/Toolbar.js @@ -2369,6 +2369,7 @@ define([ this._state.inpivot = !!info.asc_getPivotTableInfo(); toolbar.lockToolbar(SSE.enumLock.editPivot, this._state.inpivot, { array: toolbar.btnsSetAutofilter.concat(toolbar.btnsClearAutofilter, toolbar.btnsSortDown, toolbar.btnsSortUp, toolbar.btnCustomSort, toolbar.btnMerge, toolbar.btnInsertHyperlink, toolbar.btnInsertTable, toolbar.btnRemoveDuplicates)}); + toolbar.lockToolbar(SSE.enumLock.noSlicerSource, !(this._state.inpivot || formatTableInfo), { array: [toolbar.btnInsertSlicer]}); need_disable = !this.appConfig.canModifyFilter; toolbar.lockToolbar(SSE.enumLock.cantModifyFilter, need_disable, { array: toolbar.btnsSetAutofilter.concat(toolbar.btnsSortDown, toolbar.btnsSortUp, toolbar.btnCustomSort, toolbar.btnTableTemplate, diff --git a/apps/spreadsheeteditor/main/app/view/Toolbar.js b/apps/spreadsheeteditor/main/app/view/Toolbar.js index a595bf678..ddcae6038 100644 --- a/apps/spreadsheeteditor/main/app/view/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/view/Toolbar.js @@ -92,7 +92,8 @@ define([ headerLock: 'header-lock', sheetLock: 'sheet-lock', noPivot: 'no-pivot', - noSubitems: 'no-subitems' + noSubitems: 'no-subitems', + noSlicerSource: 'no-slicer-source' }; SSE.Views.Toolbar = Common.UI.Mixtbar.extend(_.extend({ @@ -738,7 +739,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-symbol', caption: me.capBtnInsSlicer, - lock: [_set.editCell, _set.selChart, _set.selChartText, _set.selShape, _set.selShapeText, _set.selImage, _set.lostConnect, _set.coAuth, _set.multiselect] + lock: [_set.editCell, _set.selChart, _set.selChartText, _set.selShape, _set.selShapeText, _set.selImage, _set.lostConnect, _set.coAuth, _set.multiselect, _set.noSlicerSource] }); me.btnTableTemplate = new Common.UI.Button({ From a626ca471d54b82f1292b00f7fea0c551118fc01 Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Tue, 26 May 2020 22:28:35 +0300 Subject: [PATCH 50/92] [mobile] Fix bug 45445 --- .../mobile/lib/controller/Collaboration.js | 14 ++++----- apps/common/mobile/lib/view/Collaboration.js | 28 +++++++++--------- .../resources/less/ios/_collaboration.less | 8 ++--- .../less/material/_collaboration.less | 7 ++--- .../mobile/app/controller/add/AddOther.js | 2 +- .../mobile/resources/css/app-ios.css | 29 ++++++++++++------- .../mobile/resources/css/app-material.css | 29 ++++++++++++------- .../mobile/app/controller/add/AddOther.js | 2 +- .../mobile/resources/css/app-ios.css | 29 ++++++++++++------- .../mobile/resources/css/app-material.css | 29 ++++++++++++------- .../mobile/app/controller/add/AddOther.js | 2 +- .../mobile/resources/css/app-ios.css | 29 ++++++++++++------- .../mobile/resources/css/app-material.css | 29 ++++++++++++------- 13 files changed, 139 insertions(+), 98 deletions(-) diff --git a/apps/common/mobile/lib/controller/Collaboration.js b/apps/common/mobile/lib/controller/Collaboration.js index b46a24420..38b3d352b 100644 --- a/apps/common/mobile/lib/controller/Collaboration.js +++ b/apps/common/mobile/lib/controller/Collaboration.js @@ -1046,7 +1046,7 @@ define([ onDoneAddNewReply: function(uid) { var phone = Common.SharedSettings.get('phone'); - var reply = $('.reply-textarea')[0].value; + var reply = $('.reply-textarea')[0].value.trim(); if ($('.container-view-comment').length > 0) { var $viewComment = $('.container-view-comment'); if (reply && reply.length > 0) { @@ -1282,8 +1282,8 @@ define([ me.disabledViewComments(true); if ($('.comment-textarea').length === 0) { var $viewComment = $('.container-view-comment'); - var oldComment = $viewComment.find('.comment-text span').text(); - $viewComment.find('.comment-text span').css('display', 'none'); + var oldComment = $viewComment.find('.comment-text pre').text(); + $viewComment.find('.comment-text pre').css('display', 'none'); var template = _.template(''); $viewComment.find('.comment-text').append(template); $viewComment.find('a.prev-comment, a.next-comment, a.add-reply').css('display', 'none'); @@ -1308,7 +1308,7 @@ define([ }, onEditComment: function(comment) { - var value = $('#comment-text')[0].value; + var value = $('#comment-text')[0].value.trim(); if (value && value.length > 0) { if (!_.isUndefined(this.onChangeComment)) { comment.comment = value; @@ -1323,7 +1323,7 @@ define([ $viewComment.find('a.prev-comment, a.next-comment, a.add-reply').css('display', 'flex'); if ($viewComment.find('.comment-textarea').length > 0) { $viewComment.find('.comment-textarea').remove(); - $viewComment.find('.comment-text span').css('display', 'block'); + $viewComment.find('.comment-text pre').css('display', 'block'); } } this.disabledViewComments(false); @@ -1336,7 +1336,7 @@ define([ onCancelEditComment: function() { var $viewComment = $('.container-view-comment'); $viewComment.find('a.done-edit-comment, a.cancel-edit-comment, .comment-textarea').remove(); - $viewComment.find('.comment-text span').css('display', 'block'); + $viewComment.find('.comment-text pre').css('display', 'block'); $viewComment.find('a.prev-comment, a.next-comment, a.add-reply').css('display', 'flex'); this.disabledViewComments(false); }, @@ -1388,7 +1388,7 @@ define([ }, onEditReply: function(comment, indReply) { - var value = $('.edit-reply-textarea')[0].value; + var value = $('.edit-reply-textarea')[0].value.trim(); if (value && value.length > 0) { if ($('.container-view-comment').length > 0) { if (!_.isUndefined(this.onChangeComment)) { diff --git a/apps/common/mobile/lib/view/Collaboration.js b/apps/common/mobile/lib/view/Collaboration.js index aa9ebb472..9a90b9cc4 100644 --- a/apps/common/mobile/lib/view/Collaboration.js +++ b/apps/common/mobile/lib/view/Collaboration.js @@ -177,8 +177,8 @@ define([ if (isAndroid) { template += '
' + comment.userInitials + '
'; } - template += '

' + comment.username + '

' + - '

' + comment.date + '

'; + template += '
' + comment.username + '
' + + '
' + comment.date + '
'; if (isAndroid) { template += '
'; } @@ -191,8 +191,8 @@ define([ } template += ''; - if (comment.quote) template += '

' + me.sliceQuote(comment.quote) + '

'; - template += '
' + comment.comment + '
'; + if (comment.quote) template += '
' + me.sliceQuote(comment.quote) + '
'; + template += '
' + comment.comment + '
'; if (comment.replys.length > 0) { template += '
    '; _.each(comment.replys, function (reply) { @@ -202,8 +202,8 @@ define([ if (isAndroid) { template += '
    ' + reply.userInitials + '
    ' } - template += '

    ' + reply.username + '

    ' + - '

    ' + reply.date + '

    ' + + template += '
    ' + reply.username + '
    ' + + '
    ' + reply.date + '
    ' + '
    '; if (isAndroid) { template += ''; @@ -212,7 +212,7 @@ define([ template += '
    '; } template += '' + - '

    ' + reply.reply + '

    ' + + '
    ' + reply.reply + '
    ' + ''; }); template += '
' @@ -249,8 +249,8 @@ define([ '
', '
', '<% if (android) { %>
<%= item.userInitials %>
<% } %>', - '

<%= item.username %>

', - '

<%= item.date %>

', + '
<%= item.username %>
', + '
<%= item.date %>
', '<% if (android) { %>
<% } %>', '
', '<% if (item.editable && !viewmode) { %>', @@ -261,9 +261,9 @@ define([ '<% } %>', '
', '<% if(item.quote) {%>', - '

<%= quote %>

', + '
<%= quote %>
', '<% } %>', - '

<%= item.comment %>

', + '
<%= item.comment %>
', '<% if(replys > 0) {%>', '
    ', '<% _.each(item.replys, function (reply) { %>', @@ -271,15 +271,15 @@ define([ '
    ', '
    ', '<% if (android) { %>
    <%= reply.userInitials %>
    <% } %>', - '

    <%= reply.username %>

    ', - '

    <%= reply.date %>

    ', + '
    <%= reply.username %>
    ', + '
    <%= reply.date %>
    ', '
    ', '<% if (android) { %>
    <% } %>', '<% if (reply.editable && !viewmode) { %>', '
    ', '<% } %>', '
    ', - '

    <%= reply.reply %>

    ', + '
    <%= reply.reply %>
    ', '', '<% }); %>', '
', diff --git a/apps/common/mobile/resources/less/ios/_collaboration.less b/apps/common/mobile/resources/less/ios/_collaboration.less index 919c94f6a..d958e12f4 100644 --- a/apps/common/mobile/resources/less/ios/_collaboration.less +++ b/apps/common/mobile/resources/less/ios/_collaboration.less @@ -145,10 +145,7 @@ padding: 16px 0; word-wrap: break-word; } - p { - margin: 0; - word-break: break-word; - } + .list-reply { padding-left: 26px; } @@ -176,6 +173,9 @@ margin: 0; max-width: 100%; padding-right: 15px; + pre { + white-space: pre-wrap; + } } .reply-item { margin-top: 15px; diff --git a/apps/common/mobile/resources/less/material/_collaboration.less b/apps/common/mobile/resources/less/material/_collaboration.less index a7439c97f..6889d1806 100644 --- a/apps/common/mobile/resources/less/material/_collaboration.less +++ b/apps/common/mobile/resources/less/material/_collaboration.less @@ -143,10 +143,6 @@ } } } - p { - margin: 0; - word-break: break-word; - } .list-reply { padding-left: 26px; } @@ -173,6 +169,9 @@ margin: 0; max-width: 100%; padding-right: 15px; + pre { + white-space: pre-wrap; + } } .reply-item { padding-right: 16px; diff --git a/apps/documenteditor/mobile/app/controller/add/AddOther.js b/apps/documenteditor/mobile/app/controller/add/AddOther.js index 24f9b2553..2ad031f27 100644 --- a/apps/documenteditor/mobile/app/controller/add/AddOther.js +++ b/apps/documenteditor/mobile/app/controller/add/AddOther.js @@ -194,7 +194,7 @@ define([ }, onDoneComment: function(documentFlag) { - var value = $('#comment-text').val(); + var value = $('#comment-text').val().trim(); if (value.length > 0) { DE.getController('Common.Controllers.Collaboration').onAddNewComment(value, documentFlag); DE.getController('AddContainer').hideModal(); diff --git a/apps/documenteditor/mobile/resources/css/app-ios.css b/apps/documenteditor/mobile/resources/css/app-ios.css index fbc571974..74096f997 100644 --- a/apps/documenteditor/mobile/resources/css/app-ios.css +++ b/apps/documenteditor/mobile/resources/css/app-ios.css @@ -6559,17 +6559,6 @@ html.pixel-ratio-3 .document-menu .list-block li:last-child li .item-inner:after padding: 16px 0; word-wrap: break-word; } -.page-comments p, -.add-comment p, -.page-view-comments p, -.container-edit-comment p, -.container-add-reply p, -.page-edit-comment p, -.page-add-reply p, -.page-edit-reply p { - margin: 0; - word-break: break-word; -} .page-comments .list-reply, .add-comment .list-reply, .page-view-comments .list-reply, @@ -6665,6 +6654,24 @@ html.pixel-ratio-3 .document-menu .list-block li:last-child li .item-inner:after max-width: 100%; padding-right: 15px; } +.page-comments .comment-text pre, +.add-comment .comment-text pre, +.page-view-comments .comment-text pre, +.container-edit-comment .comment-text pre, +.container-add-reply .comment-text pre, +.page-edit-comment .comment-text pre, +.page-add-reply .comment-text pre, +.page-edit-reply .comment-text pre, +.page-comments .reply-text pre, +.add-comment .reply-text pre, +.page-view-comments .reply-text pre, +.container-edit-comment .reply-text pre, +.container-add-reply .reply-text pre, +.page-edit-comment .reply-text pre, +.page-add-reply .reply-text pre, +.page-edit-reply .reply-text pre { + white-space: pre-wrap; +} .page-comments .reply-item, .add-comment .reply-item, .page-view-comments .reply-item, diff --git a/apps/documenteditor/mobile/resources/css/app-material.css b/apps/documenteditor/mobile/resources/css/app-material.css index 65118842b..41bc3be45 100644 --- a/apps/documenteditor/mobile/resources/css/app-material.css +++ b/apps/documenteditor/mobile/resources/css/app-material.css @@ -6129,17 +6129,6 @@ html.phone .document-menu .list-block .item-link { .page-edit-reply .list-block .item-inner:after { content: none; } -.page-comments p, -.page-add-comment p, -.page-view-comments p, -.container-edit-comment p, -.container-add-reply p, -.page-edit-comment p, -.page-add-reply p, -.page-edit-reply p { - margin: 0; - word-break: break-word; -} .page-comments .list-reply, .page-add-comment .list-reply, .page-view-comments .list-reply, @@ -6234,6 +6223,24 @@ html.phone .document-menu .list-block .item-link { max-width: 100%; padding-right: 15px; } +.page-comments .comment-text pre, +.page-add-comment .comment-text pre, +.page-view-comments .comment-text pre, +.container-edit-comment .comment-text pre, +.container-add-reply .comment-text pre, +.page-edit-comment .comment-text pre, +.page-add-reply .comment-text pre, +.page-edit-reply .comment-text pre, +.page-comments .reply-text pre, +.page-add-comment .reply-text pre, +.page-view-comments .reply-text pre, +.container-edit-comment .reply-text pre, +.container-add-reply .reply-text pre, +.page-edit-comment .reply-text pre, +.page-add-reply .reply-text pre, +.page-edit-reply .reply-text pre { + white-space: pre-wrap; +} .page-comments .reply-item, .page-add-comment .reply-item, .page-view-comments .reply-item, diff --git a/apps/presentationeditor/mobile/app/controller/add/AddOther.js b/apps/presentationeditor/mobile/app/controller/add/AddOther.js index 77308a714..675a89dd0 100644 --- a/apps/presentationeditor/mobile/app/controller/add/AddOther.js +++ b/apps/presentationeditor/mobile/app/controller/add/AddOther.js @@ -168,7 +168,7 @@ define([ }, onDoneComment: function(documentFlag) { - var value = $('#comment-text').val(); + var value = $('#comment-text').val().trim(); if (value.length > 0) { PE.getController('Common.Controllers.Collaboration').onAddNewComment(value, documentFlag); PE.getController('AddContainer').hideModal(); diff --git a/apps/presentationeditor/mobile/resources/css/app-ios.css b/apps/presentationeditor/mobile/resources/css/app-ios.css index dc6164810..e4edbc1a5 100644 --- a/apps/presentationeditor/mobile/resources/css/app-ios.css +++ b/apps/presentationeditor/mobile/resources/css/app-ios.css @@ -6559,17 +6559,6 @@ html.pixel-ratio-3 .document-menu .list-block li:last-child li .item-inner:after padding: 16px 0; word-wrap: break-word; } -.page-comments p, -.add-comment p, -.page-view-comments p, -.container-edit-comment p, -.container-add-reply p, -.page-edit-comment p, -.page-add-reply p, -.page-edit-reply p { - margin: 0; - word-break: break-word; -} .page-comments .list-reply, .add-comment .list-reply, .page-view-comments .list-reply, @@ -6665,6 +6654,24 @@ html.pixel-ratio-3 .document-menu .list-block li:last-child li .item-inner:after max-width: 100%; padding-right: 15px; } +.page-comments .comment-text pre, +.add-comment .comment-text pre, +.page-view-comments .comment-text pre, +.container-edit-comment .comment-text pre, +.container-add-reply .comment-text pre, +.page-edit-comment .comment-text pre, +.page-add-reply .comment-text pre, +.page-edit-reply .comment-text pre, +.page-comments .reply-text pre, +.add-comment .reply-text pre, +.page-view-comments .reply-text pre, +.container-edit-comment .reply-text pre, +.container-add-reply .reply-text pre, +.page-edit-comment .reply-text pre, +.page-add-reply .reply-text pre, +.page-edit-reply .reply-text pre { + white-space: pre-wrap; +} .page-comments .reply-item, .add-comment .reply-item, .page-view-comments .reply-item, diff --git a/apps/presentationeditor/mobile/resources/css/app-material.css b/apps/presentationeditor/mobile/resources/css/app-material.css index 74a21da49..da0736adc 100644 --- a/apps/presentationeditor/mobile/resources/css/app-material.css +++ b/apps/presentationeditor/mobile/resources/css/app-material.css @@ -6129,17 +6129,6 @@ html.phone .document-menu .list-block .item-link { .page-edit-reply .list-block .item-inner:after { content: none; } -.page-comments p, -.page-add-comment p, -.page-view-comments p, -.container-edit-comment p, -.container-add-reply p, -.page-edit-comment p, -.page-add-reply p, -.page-edit-reply p { - margin: 0; - word-break: break-word; -} .page-comments .list-reply, .page-add-comment .list-reply, .page-view-comments .list-reply, @@ -6234,6 +6223,24 @@ html.phone .document-menu .list-block .item-link { max-width: 100%; padding-right: 15px; } +.page-comments .comment-text pre, +.page-add-comment .comment-text pre, +.page-view-comments .comment-text pre, +.container-edit-comment .comment-text pre, +.container-add-reply .comment-text pre, +.page-edit-comment .comment-text pre, +.page-add-reply .comment-text pre, +.page-edit-reply .comment-text pre, +.page-comments .reply-text pre, +.page-add-comment .reply-text pre, +.page-view-comments .reply-text pre, +.container-edit-comment .reply-text pre, +.container-add-reply .reply-text pre, +.page-edit-comment .reply-text pre, +.page-add-reply .reply-text pre, +.page-edit-reply .reply-text pre { + white-space: pre-wrap; +} .page-comments .reply-item, .page-add-comment .reply-item, .page-view-comments .reply-item, diff --git a/apps/spreadsheeteditor/mobile/app/controller/add/AddOther.js b/apps/spreadsheeteditor/mobile/app/controller/add/AddOther.js index bde23be46..869ebaed6 100644 --- a/apps/spreadsheeteditor/mobile/app/controller/add/AddOther.js +++ b/apps/spreadsheeteditor/mobile/app/controller/add/AddOther.js @@ -157,7 +157,7 @@ define([ }, onDoneComment: function(documentFlag) { - var value = $('#comment-text').val(); + var value = $('#comment-text').val().trim(); if (value.length > 0) { if (SSE.getController('Common.Controllers.Collaboration').onAddNewComment(value, documentFlag)) { this.view.isComments = true; diff --git a/apps/spreadsheeteditor/mobile/resources/css/app-ios.css b/apps/spreadsheeteditor/mobile/resources/css/app-ios.css index bdf003a6f..e4d34930e 100644 --- a/apps/spreadsheeteditor/mobile/resources/css/app-ios.css +++ b/apps/spreadsheeteditor/mobile/resources/css/app-ios.css @@ -6552,17 +6552,6 @@ html.pixel-ratio-3 .document-menu .list-block li:last-child li .item-inner:after padding: 16px 0; word-wrap: break-word; } -.page-comments p, -.add-comment p, -.page-view-comments p, -.container-edit-comment p, -.container-add-reply p, -.page-edit-comment p, -.page-add-reply p, -.page-edit-reply p { - margin: 0; - word-break: break-word; -} .page-comments .list-reply, .add-comment .list-reply, .page-view-comments .list-reply, @@ -6658,6 +6647,24 @@ html.pixel-ratio-3 .document-menu .list-block li:last-child li .item-inner:after max-width: 100%; padding-right: 15px; } +.page-comments .comment-text pre, +.add-comment .comment-text pre, +.page-view-comments .comment-text pre, +.container-edit-comment .comment-text pre, +.container-add-reply .comment-text pre, +.page-edit-comment .comment-text pre, +.page-add-reply .comment-text pre, +.page-edit-reply .comment-text pre, +.page-comments .reply-text pre, +.add-comment .reply-text pre, +.page-view-comments .reply-text pre, +.container-edit-comment .reply-text pre, +.container-add-reply .reply-text pre, +.page-edit-comment .reply-text pre, +.page-add-reply .reply-text pre, +.page-edit-reply .reply-text pre { + white-space: pre-wrap; +} .page-comments .reply-item, .add-comment .reply-item, .page-view-comments .reply-item, diff --git a/apps/spreadsheeteditor/mobile/resources/css/app-material.css b/apps/spreadsheeteditor/mobile/resources/css/app-material.css index 47dd60a12..2a7422b47 100644 --- a/apps/spreadsheeteditor/mobile/resources/css/app-material.css +++ b/apps/spreadsheeteditor/mobile/resources/css/app-material.css @@ -6139,17 +6139,6 @@ html.phone .document-menu .list-block .item-link { .page-edit-reply .list-block .item-inner:after { content: none; } -.page-comments p, -.page-add-comment p, -.page-view-comments p, -.container-edit-comment p, -.container-add-reply p, -.page-edit-comment p, -.page-add-reply p, -.page-edit-reply p { - margin: 0; - word-break: break-word; -} .page-comments .list-reply, .page-add-comment .list-reply, .page-view-comments .list-reply, @@ -6244,6 +6233,24 @@ html.phone .document-menu .list-block .item-link { max-width: 100%; padding-right: 15px; } +.page-comments .comment-text pre, +.page-add-comment .comment-text pre, +.page-view-comments .comment-text pre, +.container-edit-comment .comment-text pre, +.container-add-reply .comment-text pre, +.page-edit-comment .comment-text pre, +.page-add-reply .comment-text pre, +.page-edit-reply .comment-text pre, +.page-comments .reply-text pre, +.page-add-comment .reply-text pre, +.page-view-comments .reply-text pre, +.container-edit-comment .reply-text pre, +.container-add-reply .reply-text pre, +.page-edit-comment .reply-text pre, +.page-add-reply .reply-text pre, +.page-edit-reply .reply-text pre { + white-space: pre-wrap; +} .page-comments .reply-item, .page-add-comment .reply-item, .page-view-comments .reply-item, From 15b036daf8a8547fc66cb0701f0c8c7dcdb18192 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 26 May 2020 23:26:36 +0300 Subject: [PATCH 51/92] [SSE] Get slicer style --- .../template/SlicerSettingsAdvanced.template | 4 +- .../main/app/view/SlicerSettingsAdvanced.js | 63 ++++++++++++++----- 2 files changed, 50 insertions(+), 17 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.template b/apps/spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.template index 26f58b9ca..8f6b9b3a6 100644 --- a/apps/spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.template +++ b/apps/spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.template @@ -8,7 +8,9 @@
-
+
+
+
diff --git a/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js b/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js index 5e89fba75..5007d7d6a 100644 --- a/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js +++ b/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js @@ -103,23 +103,27 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem } }, this)); - this.cmbSlicerStyle = new Common.UI.ComboDataView({ - itemWidth: 50, - itemHeight: 50, - menuMaxHeight: 272, - enableKeyEvents: true, - cls: 'combo-spark-style', - minWidth: 190 + this.btnSlicerStyle = new Common.UI.Button({ + parentEl: $('#sliceradv-btn-style'), + cls : 'btn-large-dataview sheet-template-table', + iconCls : 'icon-template-table', + menu : new Common.UI.Menu({ + style: 'width: 400px;', + items: [ + { template: _.template('') } + ] + }) }); - this.cmbSlicerStyle.render($('#sliceradv-combo-style')); - this.cmbSlicerStyle.openButton.menu.cmpEl.css({ - 'min-width': 178, - 'max-width': 178 - }); - this.cmbSlicerStyle.on('click', _.bind(this.onSelectSlicerStyle, this)); - this.cmbSlicerStyle.openButton.menu.on('show:after', function () { - me.cmbSlicerStyle.menuPicker.scroller.update({alwaysVisibleY: true}); + this.mnuSlicerPicker = new Common.UI.DataView({ + el: $('#sliceradv-menu-style'), + parentMenu: this.btnSlicerStyle.menu, + restoreHeight: 325, + groups: new Common.UI.DataViewGroupStore(), + store: new Common.UI.DataViewStore(), + itemTemplate: _.template('
'), + style: 'max-height: 325px;' }); + this.mnuSlicerPicker.on('item:click', _.bind(this.onSelectSlicerStyle, this, this.btnSlicerStyle)); this.numWidth = new Common.UI.MetricSpinner({ el: $('#sliceradv-spin-width'), @@ -388,6 +392,17 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem this.lblSource.text(slicerprops.asc_getSourceName()); this.lblFormula.text(slicerprops.asc_getNameInFormulas()); + value = slicerprops.asc_getStyle(); + // var rec = this.mnuSlicerPicker.store.findWhere({type: value}); + // if (!rec) { + // rec = this.mnuSlicerPicker.store.at(0); + // } + // this.btnSlicerStyle.suspendEvents(); + // this.mnuSlicerPicker.selectRecord(rec, true); + // this.btnSlicerStyle.resumeEvents(); + // this.$el.find('.icon-template-table').css({'background-image': 'url(' + rec.get("imageUrl") + ')', 'height': '48px', 'width': '63px', 'background-position': 'center', 'background-size': 'cover'}); + this.$window.find('.icon-template-table').css({'height': '48px', 'width': '63px', 'background-position': 'center', 'background-size': 'cover'}); + this._noApply = false; this._changedProps = slicerprops; @@ -406,6 +421,7 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem afterRender: function() { this.updateMetricUnit(); + // this.onInitStyles(this.options.styles); this._setDefaults(this._originalProps); if (this.storageName) { var value = Common.localStorage.getItem(this.storageName); @@ -413,11 +429,26 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem } }, + onInitStyles: function(Templates){ + var count = this.mnuSlicerPicker.store.length, + arr = []; + _.each(Templates, function(template){ + arr.push({ + id : Common.UI.getId(), + type : template.asc_getType(), + imageUrl : template.asc_getImage(), + allowSelected : true, + selected : false + }); + }); + this.mnuSlicerPicker.store.reset(arr); + }, + onSelectSlicerStyle: function(combo, record) { if (this._noApply) return; if (this._changedProps) { - // this._changedProps.asc_setStyle(record.get('data')); + this._changedProps.asc_setStyle(record.get('type')); } }, From c3eb5132daaf8546f54de555385063561f7a67fa Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Wed, 27 May 2020 16:33:34 +0300 Subject: [PATCH 52/92] [SSE] Show slicer settings in the right menu --- apps/common/main/lib/util/utils.js | 3 +- .../main/app/controller/DocumentHolder.js | 4 +- .../main/app/controller/RightMenu.js | 6 + .../main/app/template/RightMenu.template | 3 + .../main/app/template/SlicerSettings.template | 89 ++++ .../main/app/view/RightMenu.js | 17 +- .../main/app/view/SlicerSettings.js | 493 ++++++++++++++++++ .../main/app/view/SlicerSettingsAdvanced.js | 4 +- apps/spreadsheeteditor/main/locale/en.json | 1 + 9 files changed, 614 insertions(+), 6 deletions(-) create mode 100644 apps/spreadsheeteditor/main/app/template/SlicerSettings.template create mode 100644 apps/spreadsheeteditor/main/app/view/SlicerSettings.js diff --git a/apps/common/main/lib/util/utils.js b/apps/common/main/lib/util/utils.js index 85f625e78..0c32fc416 100644 --- a/apps/common/main/lib/util/utils.js +++ b/apps/common/main/lib/util/utils.js @@ -105,7 +105,8 @@ Common.Utils = _.extend(new(function() { MailMerge : 8, Signature : 9, Pivot : 10, - Cell : 11 + Cell : 11, + Slicer : 12 }, importTextType = { DRM: 0, diff --git a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js index 4365e2883..efd5d1221 100644 --- a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js +++ b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js @@ -884,12 +884,12 @@ define([ var me = this; (new SSE.Views.SlicerSettingsAdvanced({ - props : item.imageInfo, + imageProps : item.imageInfo, api : me.api, handler : function(result, value) { if (result == 'ok') { if (me.api) { - me.api.asc_setGraphicObjectProps(value); + me.api.asc_setGraphicObjectProps(value.imageProps); Common.component.Analytics.trackEvent('DocumentHolder', 'Apply slicer settings'); } diff --git a/apps/spreadsheeteditor/main/app/controller/RightMenu.js b/apps/spreadsheeteditor/main/app/controller/RightMenu.js index 4048a750a..d93ae91aa 100644 --- a/apps/spreadsheeteditor/main/app/controller/RightMenu.js +++ b/apps/spreadsheeteditor/main/app/controller/RightMenu.js @@ -92,6 +92,7 @@ define([ this._settings[Common.Utils.documentSettingsType.Pivot] = {panelId: "id-pivot-settings", panel: rightMenu.pivotSettings, btn: rightMenu.btnPivot, hidden: 1, locked: false}; this._settings[Common.Utils.documentSettingsType.Signature] = {panelId: "id-signature-settings", panel: rightMenu.signatureSettings, btn: rightMenu.btnSignature, hidden: 1, props: {}, locked: false}; this._settings[Common.Utils.documentSettingsType.Cell] = {panelId: "id-cell-settings", panel: rightMenu.cellSettings, btn: rightMenu.btnCell, hidden: 1, locked: false}; + this._settings[Common.Utils.documentSettingsType.Slicer] = {panelId: "id-slicer-settings", panel: rightMenu.slicerSettings, btn: rightMenu.btnSlicer, hidden: 1, locked: false}; }, setApi: function(api) { @@ -190,6 +191,8 @@ define([ this._settings[Common.Utils.documentSettingsType.TextArt].hidden = 0; this._settings[Common.Utils.documentSettingsType.TextArt].locked = value.asc_getLocked(); } + } else if (value.asc_getSlicerProperties() !== null) { + settingsType = Common.Utils.documentSettingsType.Slicer; } } @@ -326,6 +329,7 @@ define([ this.rightmenu.paragraphSettings.updateMetricUnit(); this.rightmenu.chartSettings.updateMetricUnit(); this.rightmenu.imageSettings.updateMetricUnit(); + this.rightmenu.slicerSettings.updateMetricUnit(); }, createDelayedElements: function() { @@ -392,6 +396,7 @@ define([ this.rightmenu.tableSettings.disableControls(disabled); this.rightmenu.pivotSettings.disableControls(disabled); this.rightmenu.cellSettings.disableControls(disabled); + this.rightmenu.slicerSettings.disableControls(disabled); if (!allowSignature && this.rightmenu.signatureSettings) { this.rightmenu.btnSignature.setDisabled(disabled); @@ -410,6 +415,7 @@ define([ this.rightmenu.btnChart.setDisabled(disabled); this.rightmenu.btnPivot.setDisabled(disabled); this.rightmenu.btnCell.setDisabled(disabled); + this.rightmenu.btnSlicer.setDisabled(disabled); } else { this.onSelectionChanged(this.api.asc_getCellInfo()); } diff --git a/apps/spreadsheeteditor/main/app/template/RightMenu.template b/apps/spreadsheeteditor/main/app/template/RightMenu.template index 09960c52f..385e6d61a 100644 --- a/apps/spreadsheeteditor/main/app/template/RightMenu.template +++ b/apps/spreadsheeteditor/main/app/template/RightMenu.template @@ -18,6 +18,8 @@
+
+
@@ -29,6 +31,7 @@ +
\ No newline at end of file diff --git a/apps/spreadsheeteditor/main/app/template/SlicerSettings.template b/apps/spreadsheeteditor/main/app/template/SlicerSettings.template new file mode 100644 index 000000000..304bf2cf6 --- /dev/null +++ b/apps/spreadsheeteditor/main/app/template/SlicerSettings.template @@ -0,0 +1,89 @@ + + + + + + +
+ +
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+
+
+
+
+
+ +
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+
+
+
+ +
\ No newline at end of file diff --git a/apps/spreadsheeteditor/main/app/view/RightMenu.js b/apps/spreadsheeteditor/main/app/view/RightMenu.js index cf93f489d..a2f6f68bb 100644 --- a/apps/spreadsheeteditor/main/app/view/RightMenu.js +++ b/apps/spreadsheeteditor/main/app/view/RightMenu.js @@ -58,6 +58,7 @@ define([ 'spreadsheeteditor/main/app/view/PivotSettings', 'spreadsheeteditor/main/app/view/SignatureSettings', 'spreadsheeteditor/main/app/view/CellSettings', + 'spreadsheeteditor/main/app/view/SlicerSettings', 'common/main/lib/component/Scroller' ], function (menuTemplate, $, _, Backbone) { 'use strict'; @@ -143,6 +144,14 @@ define([ toggleGroup: 'tabpanelbtnsGroup', allowMouseEventsOnDisabled: true }); + this.btnSlicer = new Common.UI.Button({ + hint: this.txtSlicerSettings, + asctype: Common.Utils.documentSettingsType.Slicer, + enableToggle: true, + disabled: true, + toggleGroup: 'tabpanelbtnsGroup', + allowMouseEventsOnDisabled: true + }); this._settings = []; this._settings[Common.Utils.documentSettingsType.Paragraph] = {panel: "id-paragraph-settings", btn: this.btnText}; @@ -153,6 +162,7 @@ define([ this._settings[Common.Utils.documentSettingsType.Table] = {panel: "id-table-settings", btn: this.btnTable}; this._settings[Common.Utils.documentSettingsType.Pivot] = {panel: "id-pivot-settings", btn: this.btnPivot}; this._settings[Common.Utils.documentSettingsType.Cell] = {panel: "id-cell-settings", btn: this.btnCell}; + this._settings[Common.Utils.documentSettingsType.Slicer] = {panel: "id-slicer-settings", btn: this.btnSlicer}; return this; }, @@ -178,6 +188,7 @@ define([ this.btnTable.setElement($('#id-right-menu-table'), false); this.btnTable.render(); this.btnPivot.setElement($('#id-right-menu-pivot'), false); this.btnPivot.render(); this.btnCell.setElement($('#id-right-menu-cell'), false); this.btnCell.render(); + this.btnSlicer.setElement($('#id-right-menu-slicer'), false); this.btnSlicer.render(); this.btnText.on('click', _.bind(this.onBtnMenuClick, this)); this.btnImage.on('click', _.bind(this.onBtnMenuClick, this)); @@ -187,6 +198,7 @@ define([ this.btnTable.on('click', _.bind(this.onBtnMenuClick, this)); this.btnPivot.on('click', _.bind(this.onBtnMenuClick, this)); this.btnCell.on('click', _.bind(this.onBtnMenuClick, this)); + this.btnSlicer.on('click', _.bind(this.onBtnMenuClick, this)); this.paragraphSettings = new SSE.Views.ParagraphSettings(); this.imageSettings = new SSE.Views.ImageSettings(); @@ -196,6 +208,7 @@ define([ this.tableSettings = new SSE.Views.TableSettings(); this.pivotSettings = new SSE.Views.PivotSettings(); this.cellSettings = new SSE.Views.CellSettings(); + this.slicerSettings = new SSE.Views.SlicerSettings(); if (mode && mode.isSignatureSupport) { this.btnSignature = new Common.UI.Button({ @@ -244,6 +257,7 @@ define([ this.tableSettings.setApi(api); this.pivotSettings.setApi(api); this.cellSettings.setApi(api); + this.slicerSettings.setApi(api); if (this.signatureSettings) this.signatureSettings.setApi(api); return this; }, @@ -329,6 +343,7 @@ define([ txtTableSettings: 'Table Settings', txtPivotSettings: 'Pivot Table Settings', txtSignatureSettings: 'Signature Settings', - txtCellSettings: 'Cell Settings' + txtCellSettings: 'Cell Settings', + txtSlicerSettings: 'Slicer Settings' }, SSE.Views.RightMenu || {})); }); \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/app/view/SlicerSettings.js b/apps/spreadsheeteditor/main/app/view/SlicerSettings.js new file mode 100644 index 000000000..a98e2b830 --- /dev/null +++ b/apps/spreadsheeteditor/main/app/view/SlicerSettings.js @@ -0,0 +1,493 @@ +/* + * + * (c) Copyright Ascensio System SIA 2010-2020 + * + * 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 + * + */ +/** + * SlicerSettings.js + * + * Created by Julia Radzhabova on 5/26/20 + * Copyright (c) 2020 Ascensio System SIA. All rights reserved. + * + */ +define([ + 'text!spreadsheeteditor/main/app/template/SlicerSettings.template', + 'jquery', + 'underscore', + 'backbone', + 'common/main/lib/component/Button', + 'common/main/lib/component/MetricSpinner', + 'spreadsheeteditor/main/app/view/SlicerSettingsAdvanced' +], function (menuTemplate, $, _, Backbone) { + 'use strict'; + + SSE.Views.SlicerSettings = Backbone.View.extend(_.extend({ + el: '#id-slicer-settings', + + // Compile our stats template + template: _.template(menuTemplate), + + // Delegated events for creating new items, and clearing completed ones. + events: { + }, + + options: { + alias: 'SlicerSettings' + }, + + initialize: function () { + this._initSettings = true; + + this._nRatio = 1; + this._state = { + Width: 0, + Height: 0, + DisabledControls: false, + keepRatio: false, + ColCount: 0, + ColWidth: 0, + ColHeight: 0, + PosVert: 0, + PosHor: 0 + }; + this.spinners = []; + this.lockedControls = []; + this._locked = false; + + this._noApply = false; + this._originalProps = null; + + this.render(); + }, + + render: function () { + var el = $(this.el); + el.html(this.template({ + scope: this + })); + + this.linkAdvanced = $('#image-advanced-link'); + }, + + setApi: function(api) { + if ( api == undefined ) return; + this.api = api; + if (this.api) { + // this.api.asc_registerCallback('asc_InitSlicerStyles', _.bind(this.onInitStyles, this)); + } + return this; + }, + + setMode: function(mode) { + this.mode = mode; + }, + + updateMetricUnit: function() { + if (this.spinners) { + for (var i=0; i0) { + this._nRatio = this.spnWidth.getNumberValue()/this.spnHeight.getNumberValue(); + } + if (this.api) { + var props = new Asc.asc_CImgProperty(); + props.asc_putLockAspect(btn.pressed); + this.api.asc_setGraphicObjectProps(props); + } + }, this)); + + this.spnWidth.on('change', _.bind(this.onWidthChange, this)); + this.spnHeight.on('change', _.bind(this.onHeightChange, this)); + this.spnWidth.on('inputleave', function(){ Common.NotificationCenter.trigger('edit:complete', me);}); + this.spnHeight.on('inputleave', function(){ Common.NotificationCenter.trigger('edit:complete', me);}); + + this.spnHor = new Common.UI.MetricSpinner({ + el: $('#slicer-spin-hor'), + step: .1, + width: 85, + defaultUnit : "cm", + value: '0 cm', + maxValue: 5963.9, + minValue: 0 + }); + this.spinners.push(this.spnHor); + this.lockedControls.push(this.spnVert); + + this.spnVert = new Common.UI.MetricSpinner({ + el: $('#slicer-spin-vert'), + step: .1, + width: 85, + defaultUnit : "cm", + value: '0 cm', + maxValue: 5963.9, + minValue: 0 + }); + this.spinners.push(this.spnVert); + this.lockedControls.push(this.spnVert); + + // this.spnHor.on('change', _.bind(this.onHorChange, this)); + // this.spnVert.on('change', _.bind(this.onVertChange, this)); + this.spnHor.on('inputleave', function(){ Common.NotificationCenter.trigger('edit:complete', me);}); + this.spnVert.on('inputleave', function(){ Common.NotificationCenter.trigger('edit:complete', me);}); + + this.spnColWidth = new Common.UI.MetricSpinner({ + el: $('#slicer-spin-col-width'), + step: .1, + width: 85, + defaultUnit : "cm", + value: '0 cm', + maxValue: 5963.9, + minValue: 0 + }); + this.spinners.push(this.spnColWidth); + this.lockedControls.push(this.spnColWidth); + + this.spnColHeight = new Common.UI.MetricSpinner({ + el: $('#slicer-spin-col-height'), + step: .1, + width: 85, + defaultUnit : "cm", + value: '0 cm', + maxValue: 5963.9, + minValue: 0 + }); + this.spinners.push(this.spnColHeight); + this.lockedControls.push(this.spnColHeight); + + this.numCols = new Common.UI.MetricSpinner({ + el: $('#slicer-spin-cols'), + step: 1, + width: 50, + defaultUnit : "", + defaultValue : 1, + value: '1', + allowDecimal: false, + maxValue: 20000, + minValue: 0 + }); + this.lockedControls.push(this.numCols); + + // this.spnColWidth.on('change', _.bind(this.onColWidthChange, this)); + // this.spnColHeight.on('change', _.bind(this.onColHeightChange, this)); + // this.numCols.on('change', _.bind(this.onColChange, this)); + this.spnColWidth.on('inputleave', function(){ Common.NotificationCenter.trigger('edit:complete', me);}); + this.spnColHeight.on('inputleave', function(){ Common.NotificationCenter.trigger('edit:complete', me);}); + this.numCols.on('inputleave', function(){ Common.NotificationCenter.trigger('edit:complete', me);}); + + $(this.el).on('click', '#slicer-advanced-link', _.bind(this.openAdvancedSettings, this)); + }, + + createDelayedElements: function() { + this.createDelayedControls(); + this.updateMetricUnit(); + this._initSettings = false; + }, + + openAdvancedSettings: function(e) { + if (this.linkAdvanced.hasClass('disabled')) return; + + var me = this; + var win; + if (me.api && !this._locked){ + var selectedElements = me.api.asc_getGraphicObjectProps(); + if (selectedElements && selectedElements.length>0){ + var elType, elValue; + for (var i = selectedElements.length - 1; i >= 0; i--) { + elType = selectedElements[i].asc_getObjectType(); + elValue = selectedElements[i].asc_getObjectValue(); + if (Asc.c_oAscTypeSelectElement.Image == elType) { + (new SSE.Views.SlicerSettingsAdvanced( + { + imageProps: elValue, + api: me.api, + handler: function(result, value) { + if (result == 'ok') { + if (me.api) { + me.api.asc_setGraphicObjectProps(value.imageProps); + } + } + + Common.NotificationCenter.trigger('edit:complete', me); + } + })).show(); + break; + } + } + } + } + }, + + ChangeSettings: function(props) { + if (this._initSettings) + this.createDelayedElements(); + + this.disableControls(this._locked); + + if (props ){ + this._originalProps = new Asc.asc_CImgProperty(props); + + var value = props.asc_getWidth(); + if ( Math.abs(this._state.Width-value)>0.001 || + (this._state.Width===null || value===null)&&(this._state.Width!==value)) { + this.spnWidth.setValue((value!==null) ? Common.Utils.Metric.fnRecalcFromMM(value) : '', true); + this._state.Width = value; + } + + value = props.asc_getHeight(); + if ( Math.abs(this._state.Height-value)>0.001 || + (this._state.Height===null || value===null)&&(this._state.Height!==value)) { + this.spnHeight.setValue((value!==null) ? Common.Utils.Metric.fnRecalcFromMM(value) : '', true); + this._state.Height = value; + } + + if (props.asc_getHeight()>0) + this._nRatio = props.asc_getWidth()/props.asc_getHeight(); + + value = props.asc_getLockAspect(); + if (this._state.keepRatio!==value) { + this.btnRatio.toggle(value); + this._state.keepRatio=value; + } + + var slicerprops = props.asc_getSlicerProperties(); + if (slicerprops) { + value = slicerprops.asc_getColumnCount(); + if ( Math.abs(this._state.ColCount-value)>0.1 || + (this._state.ColCount===null || value===null)&&(this._state.ColCount!==value)) { + this.numCols.setValue((value!==null) ? value : '', true); + this._state.ColCount = value; + } + + // value = props.asc_getColWidth()/36000; + // if ( Math.abs(this._state.ColWidth-value)>0.001 || + // (this._state.ColWidth===null || value===null)&&(this._state.ColWidth!==value)) { + // this.spnColWidth.setValue((value!==null) ? Common.Utils.Metric.fnRecalcFromMM(value) : '', true); + // this._state.ColWidth = value; + // } + + value = slicerprops.asc_getRowHeight()/36000; + if ( Math.abs(this._state.ColHeight-value)>0.001 || + (this._state.ColHeight===null || value===null)&&(this._state.ColHeight!==value)) { + this.spnColHeight.setValue((value!==null) ? Common.Utils.Metric.fnRecalcFromMM(value) : '', true); + this._state.ColHeight = value; + } + + value = slicerprops.asc_getStyle(); + if (!this.btnSlicerStyle) + this.onInitStyles(); + // var rec = this.mnuSlicerPicker.store.findWhere({type: value}); + // if (!rec) { + // rec = this.mnuSlicerPicker.store.at(0); + // } + // this.btnSlicerStyle.suspendEvents(); + // this.mnuSlicerPicker.selectRecord(rec, true); + // this.btnSlicerStyle.resumeEvents(); + // this.$el.find('.icon-template-table').css({'background-image': 'url(' + rec.get("imageUrl") + ')', 'height': '48px', 'width': '63px', 'background-position': 'center', 'background-size': 'cover'}); + this.$el.find('.icon-template-table').css({'height': '48px', 'width': '63px', 'background-position': 'center', 'background-size': 'cover'}); + } + } + }, + + onWidthChange: function(field, newValue, oldValue, eOpts){ + var w = field.getNumberValue(); + var h = this.spnHeight.getNumberValue(); + if (this.btnRatio.pressed) { + h = w/this._nRatio; + if (h>this.spnHeight.options.maxValue) { + h = this.spnHeight.options.maxValue; + w = h * this._nRatio; + this.spnWidth.setValue(w, true); + } + this.spnHeight.setValue(h, true); + } + if (this.api) { + var props = new Asc.asc_CImgProperty(); + props.asc_putWidth(Common.Utils.Metric.fnRecalcToMM(w)); + props.asc_putHeight(Common.Utils.Metric.fnRecalcToMM(h)); + this.api.asc_setGraphicObjectProps(props); + } + }, + + onHeightChange: function(field, newValue, oldValue, eOpts){ + var h = field.getNumberValue(), w = this.spnWidth.getNumberValue(); + if (this.btnRatio.pressed) { + w = h * this._nRatio; + if (w>this.spnWidth.options.maxValue) { + w = this.spnWidth.options.maxValue; + h = w/this._nRatio; + this.spnHeight.setValue(h, true); + } + this.spnWidth.setValue(w, true); + } + if (this.api) { + var props = new Asc.asc_CImgProperty(); + props.asc_putWidth(Common.Utils.Metric.fnRecalcToMM(w)); + props.asc_putHeight(Common.Utils.Metric.fnRecalcToMM(h)); + this.api.asc_setGraphicObjectProps(props); + } + }, + + onInitStyles: function(Templates){ + var self = this; + this._isTemplatesChanged = true; + + if (!this.btnSlicerStyle) { + this.btnSlicerStyle = new Common.UI.Button({ + cls : 'btn-large-dataview sheet-template-table', + iconCls : 'icon-template-table', + menu : new Common.UI.Menu({ + style: 'width: 400px;', + items: [ + { template: _.template('') } + ] + }) + }); + this.btnSlicerStyle.on('render:after', function(btn) { + self.mnuSlicerPicker = new Common.UI.DataView({ + el: $('#id-slicer-menu-style'), + parentMenu: btn.menu, + restoreHeight: 325, + groups: new Common.UI.DataViewGroupStore(), + store: new Common.UI.DataViewStore(), + itemTemplate: _.template('
'), + style: 'max-height: 325px;' + }); + }); + this.btnSlicerStyle.render($('#slicer-btn-style')); + this.lockedControls.push(this.btnSlicerStyle); + this.mnuSlicerPicker.on('item:click', _.bind(this.onSelectSlicerStyle, this, this.btnSlicerStyle)); + if (this._locked) this.btnSlicerStyle.setDisabled(this._locked); + } + + if (Templates) { + var count = self.mnuSlicerPicker.store.length; + if (count>0 && count==Templates.length) { + var data = self.mnuSlicerPicker.store.models; + _.each(Templates, function(template, index){ + data[index].set('imageUrl', template.asc_getImage()); + }); + } else { + var arr = []; + _.each(Templates, function(template){ + arr.push({ + id : Common.UI.getId(), + type : template.asc_getType(), + imageUrl : template.asc_getImage(), + allowSelected : true, + selected : false + }); + }); + self.mnuSlicerPicker.store.reset(arr); + } + } + }, + + onSelectSlicerStyle: function(combo, record) { + if (this._noApply) return; + + // if (this._originalProps) { + // this._originalProps..asc_getSlicerProperties().asc_setStyle(record.get('type')); + // } + }, + + setLocked: function (locked) { + this._locked = locked; + }, + + disableControls: function(disable) { + if (this._initSettings) return; + + if (this._state.DisabledControls!==disable) { + this._state.DisabledControls = disable; + _.each(this.lockedControls, function(item) { + item.setDisabled(disable); + }); + this.linkAdvanced.toggleClass('disabled', disable); + } + }, + + textKeepRatio: 'Constant Proportions', + textSize: 'Size', + textWidth: 'Width', + textHeight: 'Height', + textAdvanced: 'Show advanced settings', + textPosition: 'Position', + textHor: 'Horizontal', + textVert: 'Vertical', + textButtons: 'Buttons', + textColumns: 'Columns', + textStyle: 'Style' + + }, SSE.Views.SlicerSettings || {})); +}); + diff --git a/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js b/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js index 5007d7d6a..be8a75ff1 100644 --- a/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js +++ b/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js @@ -75,7 +75,7 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem this._noApply = true; this.spinners = []; - this._originalProps = this.options.props; + this._originalProps = this.options.imageProps; }, render: function() { @@ -344,7 +344,7 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem if (this.isAltDescChanged) this._originalProps.asc_putDescription(this.textareaAltDescription.val()); - return this._originalProps; + return {imageProps: this._originalProps}; }, _setDefaults: function(props) { diff --git a/apps/spreadsheeteditor/main/locale/en.json b/apps/spreadsheeteditor/main/locale/en.json index 424987743..be7d1e351 100644 --- a/apps/spreadsheeteditor/main/locale/en.json +++ b/apps/spreadsheeteditor/main/locale/en.json @@ -2113,6 +2113,7 @@ "SSE.Views.RightMenu.txtSparklineSettings": "Sparkline Settings", "SSE.Views.RightMenu.txtTableSettings": "Table settings", "SSE.Views.RightMenu.txtTextArtSettings": "Text Art settings", + "SSE.Views.RightMenu.txtSlicerSettings": "Slicer Settings", "SSE.Views.ScaleDialog.textAuto": "Auto", "SSE.Views.ScaleDialog.textError": "The entered value is incorrect.", "SSE.Views.ScaleDialog.textFewPages": "pages", From 485c31bc80da49614f9aeee82b4c52fad4c4f60a Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Wed, 27 May 2020 17:03:14 +0300 Subject: [PATCH 53/92] [DE mobile] Fix bug 45472 --- .../mobile/app/controller/add/AddOther.js | 16 +++++++++++---- .../mobile/app/template/AddOther.template | 4 ++-- .../mobile/app/view/add/AddOther.js | 20 ++++++++++++++----- 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/apps/documenteditor/mobile/app/controller/add/AddOther.js b/apps/documenteditor/mobile/app/controller/add/AddOther.js index 2ad031f27..1eaa9c01d 100644 --- a/apps/documenteditor/mobile/app/controller/add/AddOther.js +++ b/apps/documenteditor/mobile/app/controller/add/AddOther.js @@ -91,10 +91,13 @@ define([ }, initEvents: function () { - this.view.hideInsertComments = this.isHideInsertComment(); + this.setDisableMenuItem(); }, - isHideInsertComment: function() { + setDisableMenuItem: function() { + var isDisableComment = true, + isDisableBreak = false, + isDisableFootnote = false; var stack = this.api.getSelectedElements(); var isText = false, isTable = false, @@ -133,9 +136,14 @@ define([ }); if (stack.length > 0) { var isObject = isShape || isChart || isImage || isTable; - return (this.api.can_AddQuotedComment() === false || lockedText || lockedTable || lockedImage || lockedHeader || (!isText && isObject)); + isDisableComment = (this.api.can_AddQuotedComment() === false || lockedText || lockedTable || lockedImage || lockedHeader || (!isText && isObject)); + if (isShape && isText) { + isDisableBreak = isDisableFootnote = true; + } } - return true; + this.view.isDisableComment = isDisableComment; + this.view.isDisableBreak = isDisableBreak; + this.view.isDisableFootnote = isDisableFootnote; }, onPageShow: function (view, pageId) { diff --git a/apps/documenteditor/mobile/app/template/AddOther.template b/apps/documenteditor/mobile/app/template/AddOther.template index b67fdcf51..773bdfd58 100644 --- a/apps/documenteditor/mobile/app/template/AddOther.template +++ b/apps/documenteditor/mobile/app/template/AddOther.template @@ -38,7 +38,7 @@ -
  • +
  • -
  • +
  • diff --git a/apps/documenteditor/mobile/app/view/add/AddOther.js b/apps/documenteditor/mobile/app/view/add/AddOther.js index 61947bff8..28547d3c9 100644 --- a/apps/documenteditor/mobile/app/view/add/AddOther.js +++ b/apps/documenteditor/mobile/app/view/add/AddOther.js @@ -68,14 +68,24 @@ define([ $('#add-other-link').single('click', _.bind(me.showLink, me)); $('#add-other-pagenumber').single('click', _.bind(me.showPagePosition, me)); - $('#add-other-footnote').single('click', _.bind(me.showPageFootnote, me)); - $('#add-other-break').single('click', _.bind(me.showPageBreak, me)); - if (this.hideInsertComments) { - $('#item-comment').hide(); + if (this.isDisableComment) { + $('#item-comment').addClass('disabled'); } else { - $('#item-comment').show(); + $('#item-comment').removeClass('disabled'); $('#add-other-comment').single('click', _.bind(me.showPageComment, me)); } + if (this.isDisableBreak) { + $('#item-break').addClass('disabled'); + } else { + $('#item-break').removeClass('disabled'); + $('#add-other-break').single('click', _.bind(me.showPageBreak, me)); + } + if (this.isDisableFootnote) { + $('#item-footnote').addClass('disabled'); + } else { + $('#item-footnote').removeClass('disabled'); + $('#add-other-footnote').single('click', _.bind(me.showPageFootnote, me)); + } me.initControls(); }, From ebe0f338cf3d95d0f73821cdba2ea6cfd27045ad Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Wed, 27 May 2020 18:34:15 +0300 Subject: [PATCH 54/92] [SSE] Set slicer style settings --- apps/common/main/resources/less/buttons.less | 7 + .../main/app/template/SlicerSettings.template | 2 +- .../main/app/view/SlicerSettings.js | 132 ++++++++++++------ .../main/app/view/SlicerSettingsAdvanced.js | 53 +++---- .../main/resources/less/rightmenu.less | 14 +- 5 files changed, 126 insertions(+), 82 deletions(-) diff --git a/apps/common/main/resources/less/buttons.less b/apps/common/main/resources/less/buttons.less index 160ccb572..a0e6c8a3f 100644 --- a/apps/common/main/resources/less/buttons.less +++ b/apps/common/main/resources/less/buttons.less @@ -784,6 +784,13 @@ height: 54px; } + .icon-template-slicer.icon { + min-width: 36px; + height: 55px; + line-height: 53px; + border: none; + } + .icon { display: inline-block; .btn.btnsize(52px); diff --git a/apps/spreadsheeteditor/main/app/template/SlicerSettings.template b/apps/spreadsheeteditor/main/app/template/SlicerSettings.template index 304bf2cf6..fb68d3f6b 100644 --- a/apps/spreadsheeteditor/main/app/template/SlicerSettings.template +++ b/apps/spreadsheeteditor/main/app/template/SlicerSettings.template @@ -72,7 +72,7 @@ -
    +
    diff --git a/apps/spreadsheeteditor/main/app/view/SlicerSettings.js b/apps/spreadsheeteditor/main/app/view/SlicerSettings.js index a98e2b830..fcd2475be 100644 --- a/apps/spreadsheeteditor/main/app/view/SlicerSettings.js +++ b/apps/spreadsheeteditor/main/app/view/SlicerSettings.js @@ -83,6 +83,7 @@ define([ this._noApply = false; this._originalProps = null; + this.styles = null; this.render(); }, @@ -99,9 +100,7 @@ define([ setApi: function(api) { if ( api == undefined ) return; this.api = api; - if (this.api) { - // this.api.asc_registerCallback('asc_InitSlicerStyles', _.bind(this.onInitStyles, this)); - } + this.api.asc_registerCallback('asc_onSendThemeColors', _.bind(this.onSendThemeColors, this)); return this; }, @@ -160,9 +159,10 @@ define([ this._nRatio = this.spnWidth.getNumberValue()/this.spnHeight.getNumberValue(); } if (this.api) { - var props = new Asc.asc_CImgProperty(); - props.asc_putLockAspect(btn.pressed); - this.api.asc_setGraphicObjectProps(props); + if (this._originalProps) { + this._originalProps.asc_putLockAspect(btn.pressed); + this.api.asc_setGraphicObjectProps(this._originalProps); + } } }, this)); @@ -237,9 +237,9 @@ define([ }); this.lockedControls.push(this.numCols); - // this.spnColWidth.on('change', _.bind(this.onColWidthChange, this)); - // this.spnColHeight.on('change', _.bind(this.onColHeightChange, this)); - // this.numCols.on('change', _.bind(this.onColChange, this)); + this.spnColWidth.on('change', _.bind(this.onColWidthChange, this)); + this.spnColHeight.on('change', _.bind(this.onColHeightChange, this)); + this.numCols.on('change', _.bind(this.onColChange, this)); this.spnColWidth.on('inputleave', function(){ Common.NotificationCenter.trigger('edit:complete', me);}); this.spnColHeight.on('inputleave', function(){ Common.NotificationCenter.trigger('edit:complete', me);}); this.numCols.on('inputleave', function(){ Common.NotificationCenter.trigger('edit:complete', me);}); @@ -253,6 +253,14 @@ define([ this._initSettings = false; }, + onSendThemeColors: function() { + // get new table templates + if (this.mnuSlicerPicker && this._originalProps) { + this.onInitStyles(this._originalProps.asc_getSlicerProperties().asc_getStylesPictures()); + this.mnuSlicerPicker.scroller.update({alwaysVisibleY: true}); + } + }, + openAdvancedSettings: function(e) { if (this.linkAdvanced.hasClass('disabled')) return; @@ -270,6 +278,7 @@ define([ { imageProps: elValue, api: me.api, + styles: me.styles || me._originalProps.asc_getSlicerProperties().asc_getStylesPictures(), handler: function(result, value) { if (result == 'ok') { if (me.api) { @@ -328,12 +337,12 @@ define([ this._state.ColCount = value; } - // value = props.asc_getColWidth()/36000; - // if ( Math.abs(this._state.ColWidth-value)>0.001 || - // (this._state.ColWidth===null || value===null)&&(this._state.ColWidth!==value)) { - // this.spnColWidth.setValue((value!==null) ? Common.Utils.Metric.fnRecalcFromMM(value) : '', true); - // this._state.ColWidth = value; - // } + value = slicerprops.asc_getButtonWidth()/36000; + if ( Math.abs(this._state.ColWidth-value)>0.001 || + (this._state.ColWidth===null || value===null)&&(this._state.ColWidth!==value)) { + this.spnColWidth.setValue((value!==null) ? Common.Utils.Metric.fnRecalcFromMM(value) : '', true); + this._state.ColWidth = value; + } value = slicerprops.asc_getRowHeight()/36000; if ( Math.abs(this._state.ColHeight-value)>0.001 || @@ -342,18 +351,22 @@ define([ this._state.ColHeight = value; } - value = slicerprops.asc_getStyle(); if (!this.btnSlicerStyle) - this.onInitStyles(); - // var rec = this.mnuSlicerPicker.store.findWhere({type: value}); - // if (!rec) { - // rec = this.mnuSlicerPicker.store.at(0); - // } - // this.btnSlicerStyle.suspendEvents(); - // this.mnuSlicerPicker.selectRecord(rec, true); - // this.btnSlicerStyle.resumeEvents(); - // this.$el.find('.icon-template-table').css({'background-image': 'url(' + rec.get("imageUrl") + ')', 'height': '48px', 'width': '63px', 'background-position': 'center', 'background-size': 'cover'}); - this.$el.find('.icon-template-table').css({'height': '48px', 'width': '63px', 'background-position': 'center', 'background-size': 'cover'}); + this.onInitStyles(slicerprops.asc_getStylesPictures()); + value = slicerprops.asc_getStyle(); + if (this._state.StyleType!==value || this._isTemplatesChanged) { + var rec = this.mnuSlicerPicker.store.findWhere({type: value}); + if (!rec) { + rec = this.mnuSlicerPicker.store.at(0); + } + this.btnSlicerStyle.suspendEvents(); + this.mnuSlicerPicker.selectRecord(rec, true); + this.btnSlicerStyle.resumeEvents(); + this.$el.find('.icon-template-slicer').css({'background-image': 'url(' + rec.get("imageUrl") + ')', 'height': '49px', 'width': '36px', 'background-position': 'center', 'background-size': 'cover'}); + this._state.StyleType=value; + } + this._isTemplatesChanged = false; + } } }, @@ -371,10 +384,11 @@ define([ this.spnHeight.setValue(h, true); } if (this.api) { - var props = new Asc.asc_CImgProperty(); - props.asc_putWidth(Common.Utils.Metric.fnRecalcToMM(w)); - props.asc_putHeight(Common.Utils.Metric.fnRecalcToMM(h)); - this.api.asc_setGraphicObjectProps(props); + if (this._originalProps) { + this._originalProps.asc_putWidth(Common.Utils.Metric.fnRecalcToMM(w)); + this._originalProps.asc_putHeight(Common.Utils.Metric.fnRecalcToMM(h)); + this.api.asc_setGraphicObjectProps(this._originalProps); + } } }, @@ -390,25 +404,54 @@ define([ this.spnWidth.setValue(w, true); } if (this.api) { - var props = new Asc.asc_CImgProperty(); - props.asc_putWidth(Common.Utils.Metric.fnRecalcToMM(w)); - props.asc_putHeight(Common.Utils.Metric.fnRecalcToMM(h)); - this.api.asc_setGraphicObjectProps(props); + if (this._originalProps) { + this._originalProps.asc_putWidth(Common.Utils.Metric.fnRecalcToMM(w)); + this._originalProps.asc_putHeight(Common.Utils.Metric.fnRecalcToMM(h)); + this.api.asc_setGraphicObjectProps(this._originalProps); + } + } + }, + + onColWidthChange: function(field, newValue, oldValue, eOpts){ + if (this.api) { + if (this._originalProps) { + this._originalProps.asc_getSlicerProperties().asc_setButtonWidth(Common.Utils.Metric.fnRecalcToMM(field.getNumberValue())*36000); + this.api.asc_setGraphicObjectProps(this._originalProps); + } + } + }, + + onColHeightChange: function(field, newValue, oldValue, eOpts){ + if (this.api) { + if (this._originalProps) { + this._originalProps.asc_getSlicerProperties().asc_setRowHeight(Common.Utils.Metric.fnRecalcToMM(field.getNumberValue())*36000); + this.api.asc_setGraphicObjectProps(this._originalProps); + } + } + }, + + onColChange: function(field, newValue, oldValue, eOpts){ + if (this.api) { + if (this._originalProps) { + this._originalProps.asc_getSlicerProperties().asc_setColumnCount(field.getNumberValue()); + this.api.asc_setGraphicObjectProps(this._originalProps); + } } }, onInitStyles: function(Templates){ var self = this; this._isTemplatesChanged = true; + this.styles = Templates; if (!this.btnSlicerStyle) { this.btnSlicerStyle = new Common.UI.Button({ - cls : 'btn-large-dataview sheet-template-table', - iconCls : 'icon-template-table', + cls : 'btn-large-dataview sheet-template-slicer', + iconCls : 'icon-template-slicer', menu : new Common.UI.Menu({ - style: 'width: 400px;', + style: 'width: 333px;', items: [ - { template: _.template('') } + { template: _.template('') } ] }) }); @@ -419,7 +462,7 @@ define([ restoreHeight: 325, groups: new Common.UI.DataViewGroupStore(), store: new Common.UI.DataViewStore(), - itemTemplate: _.template('
    '), + itemTemplate: _.template('
    '), style: 'max-height: 325px;' }); }); @@ -441,7 +484,7 @@ define([ _.each(Templates, function(template){ arr.push({ id : Common.UI.getId(), - type : template.asc_getType(), + type : template.asc_getName(), imageUrl : template.asc_getImage(), allowSelected : true, selected : false @@ -452,12 +495,13 @@ define([ } }, - onSelectSlicerStyle: function(combo, record) { + onSelectSlicerStyle: function(btn, picker, itemView, record) { if (this._noApply) return; - // if (this._originalProps) { - // this._originalProps..asc_getSlicerProperties().asc_setStyle(record.get('type')); - // } + if (this._originalProps) { + this._originalProps.asc_getSlicerProperties().asc_setStyle(record.get('type')); + this.api.asc_setGraphicObjectProps(this._originalProps); + } }, setLocked: function (locked) { diff --git a/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js b/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js index be8a75ff1..924fe5148 100644 --- a/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js +++ b/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js @@ -105,12 +105,12 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem this.btnSlicerStyle = new Common.UI.Button({ parentEl: $('#sliceradv-btn-style'), - cls : 'btn-large-dataview sheet-template-table', - iconCls : 'icon-template-table', + cls : 'btn-large-dataview sheet-template-slicer', + iconCls : 'icon-template-slicer', menu : new Common.UI.Menu({ - style: 'width: 400px;', + style: 'width: 333px;', items: [ - { template: _.template('') } + { template: _.template('') } ] }) }); @@ -120,7 +120,7 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem restoreHeight: 325, groups: new Common.UI.DataViewGroupStore(), store: new Common.UI.DataViewStore(), - itemTemplate: _.template('
    '), + itemTemplate: _.template('
    '), style: 'max-height: 325px;' }); this.mnuSlicerPicker.on('item:click', _.bind(this.onSelectSlicerStyle, this, this.btnSlicerStyle)); @@ -161,24 +161,6 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem }, this)); this.spinners.push(this.numHeight); - // this.numColWidth = new Common.UI.MetricSpinner({ - // el: $('#sliceradv-spin-col-width'), - // step: .1, - // width: 85, - // defaultUnit : "cm", - // defaultValue : 0, - // value: '0 cm', - // maxValue: 5963.9, - // minValue: 0, - // visible: false - // }); - // this.numColWidth.on('change', _.bind(function(field, newValue, oldValue, eOpts){ - // var numval = field.getNumberValue(); - // if (this._changedProps) { - // } - // }, this)); - // this.spinners.push(this.numColWidth); - this.numColHeight = new Common.UI.MetricSpinner({ el: $('#sliceradv-spin-col-height'), step: .1, @@ -393,15 +375,14 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem this.lblFormula.text(slicerprops.asc_getNameInFormulas()); value = slicerprops.asc_getStyle(); - // var rec = this.mnuSlicerPicker.store.findWhere({type: value}); - // if (!rec) { - // rec = this.mnuSlicerPicker.store.at(0); - // } - // this.btnSlicerStyle.suspendEvents(); - // this.mnuSlicerPicker.selectRecord(rec, true); - // this.btnSlicerStyle.resumeEvents(); - // this.$el.find('.icon-template-table').css({'background-image': 'url(' + rec.get("imageUrl") + ')', 'height': '48px', 'width': '63px', 'background-position': 'center', 'background-size': 'cover'}); - this.$window.find('.icon-template-table').css({'height': '48px', 'width': '63px', 'background-position': 'center', 'background-size': 'cover'}); + var rec = this.mnuSlicerPicker.store.findWhere({type: value}); + if (!rec) { + rec = this.mnuSlicerPicker.store.at(0); + } + this.btnSlicerStyle.suspendEvents(); + this.mnuSlicerPicker.selectRecord(rec, true); + this.btnSlicerStyle.resumeEvents(); + this.$window.find('.icon-template-slicer').css({'background-image': 'url(' + rec.get("imageUrl") + ')', 'height': '49px', 'width': '36px', 'background-position': 'center', 'background-size': 'cover'}); this._noApply = false; @@ -421,7 +402,7 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem afterRender: function() { this.updateMetricUnit(); - // this.onInitStyles(this.options.styles); + this.onInitStyles(this.options.styles); this._setDefaults(this._originalProps); if (this.storageName) { var value = Common.localStorage.getItem(this.storageName); @@ -432,10 +413,10 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem onInitStyles: function(Templates){ var count = this.mnuSlicerPicker.store.length, arr = []; - _.each(Templates, function(template){ + Templates && _.each(Templates, function(template){ arr.push({ id : Common.UI.getId(), - type : template.asc_getType(), + type : template.asc_getName(), imageUrl : template.asc_getImage(), allowSelected : true, selected : false @@ -444,7 +425,7 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem this.mnuSlicerPicker.store.reset(arr); }, - onSelectSlicerStyle: function(combo, record) { + onSelectSlicerStyle: function(btn, picker, itemView, record) { if (this._noApply) return; if (this._changedProps) { diff --git a/apps/spreadsheeteditor/main/resources/less/rightmenu.less b/apps/spreadsheeteditor/main/resources/less/rightmenu.less index 596b0f3a6..28a25d517 100644 --- a/apps/spreadsheeteditor/main/resources/less/rightmenu.less +++ b/apps/spreadsheeteditor/main/resources/less/rightmenu.less @@ -320,4 +320,16 @@ button:active:not(.disabled) .btn-change-shape {background-position: -56px - } } } -} \ No newline at end of file +} + +.sheet-template-slicer { + width: 56px; + height: 55px; +} + +.menu-slicer-template { + .item { + border: none; + .box-shadow(none); + } +} From 040b22ed81bdeee5a9933b9ca97e1c30579bfa3a Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Wed, 27 May 2020 20:20:08 +0300 Subject: [PATCH 55/92] [SSE] Cell snapping settings for slicer --- .../template/SlicerSettingsAdvanced.template | 23 ++++++++- .../main/app/view/SlicerSettingsAdvanced.js | 51 ++++++++++++++++++- 2 files changed, 72 insertions(+), 2 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.template b/apps/spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.template index 8f6b9b3a6..2da72ee09 100644 --- a/apps/spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.template +++ b/apps/spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.template @@ -76,7 +76,28 @@
    -
    +
    +
    + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js b/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js index 924fe5148..ff50d7038 100644 --- a/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js +++ b/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js @@ -63,7 +63,8 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem {panelId: 'id-adv-slicer-style', panelCaption: this.strStyleSize}, {panelId: 'id-adv-slicer-sorting', panelCaption: this.strSorting}, {panelId: 'id-adv-slicer-references', panelCaption: this.strReferences}, - {panelId: 'id-adv-image-alttext', panelCaption: this.textAlt} + {panelId: 'id-adv-slicer-snap', panelCaption: this.textSnap}, + {panelId: 'id-adv-slicer-alttext', panelCaption: this.textAlt} ], contentTemplate: _.template(contentTemplate)({ scope: this @@ -288,6 +289,31 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem this.lblSource = $('#sliceradv-lbl-source'); this.lblFormula = $('#sliceradv-lbl-formula'); + // Snapping + this.radioTwoCell = new Common.UI.RadioBox({ + el: $('#slicer-advanced-radio-twocell'), + name: 'asc-radio-snap', + labelText: this.textTwoCell, + value: AscCommon.c_oAscCellAnchorType.cellanchorTwoCell + }); + this.radioTwoCell.on('change', _.bind(this.onRadioSnapChange, this)); + + this.radioOneCell = new Common.UI.RadioBox({ + el: $('#slicer-advanced-radio-onecell'), + name: 'asc-radio-snap', + labelText: this.textOneCell, + value: AscCommon.c_oAscCellAnchorType.cellanchorOneCell + }); + this.radioOneCell.on('change', _.bind(this.onRadioSnapChange, this)); + + this.radioAbsolute = new Common.UI.RadioBox({ + el: $('#slicer-advanced-radio-absolute'), + name: 'asc-radio-snap', + labelText: this.textAbsolute, + value: AscCommon.c_oAscCellAnchorType.cellanchorAbsolute + }); + this.radioAbsolute.on('change', _.bind(this.onRadioSnapChange, this)); + // Alt Text this.inputAltTitle = new Common.UI.InputField({ @@ -342,6 +368,19 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem value = props.asc_getDescription(); this.textareaAltDescription.val(value ? value : ''); + value = props.asc_getAnchor(); + switch (value) { + case AscCommon.c_oAscCellAnchorType.cellanchorTwoCell: + this.radioTwoCell.setValue(true, true); + break; + case AscCommon.c_oAscCellAnchorType.cellanchorOneCell: + this.radioOneCell.setValue(true, true); + break; + case AscCommon.c_oAscCellAnchorType.cellanchorAbsolute: + this.radioAbsolute.setValue(true, true); + break; + } + var slicerprops = props.asc_getSlicerProperties(); if (slicerprops) { this._noApply = true; @@ -433,6 +472,12 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem } }, + onRadioSnapChange: function(field, newValue, eOpts) { + if (newValue && this._originalProps) { + this._originalProps.asc_putAnchor(field.options.value); + } + }, + textTitle: 'Slicer - Advanced Settings', textHeader: 'Header', strStyle: 'Style', @@ -466,6 +511,10 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem textAltTitle: 'Title', textAltDescription: 'Description', textAltTip: 'The alternative text-based representation of the visual object information, which will be read to the people with vision or cognitive impairments to help them better understand what information there is in the image, autoshape, chart or table.', + textSnap: 'Cell Snapping', + textAbsolute: 'Don\'t move or size with cells', + textOneCell: 'Move but don\'t size with cells', + textTwoCell: 'Move and size with cells' }, SSE.Views.SlicerSettingsAdvanced || {})); }); From 51d6daa70298e0ae7da23f441a99db8818d9cfc6 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Wed, 27 May 2020 22:39:10 +0300 Subject: [PATCH 56/92] [PE] Add icons for Bug 40447 --- apps/common/main/resources/img/doc-formats/jpg.svg | 14 ++++++++++++++ apps/common/main/resources/img/doc-formats/png.svg | 14 ++++++++++++++ apps/common/main/resources/img/doc-formats/svg.svg | 14 ++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 apps/common/main/resources/img/doc-formats/jpg.svg create mode 100644 apps/common/main/resources/img/doc-formats/png.svg create mode 100644 apps/common/main/resources/img/doc-formats/svg.svg diff --git a/apps/common/main/resources/img/doc-formats/jpg.svg b/apps/common/main/resources/img/doc-formats/jpg.svg new file mode 100644 index 000000000..b04feaf76 --- /dev/null +++ b/apps/common/main/resources/img/doc-formats/jpg.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/apps/common/main/resources/img/doc-formats/png.svg b/apps/common/main/resources/img/doc-formats/png.svg new file mode 100644 index 000000000..58aef71e3 --- /dev/null +++ b/apps/common/main/resources/img/doc-formats/png.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/apps/common/main/resources/img/doc-formats/svg.svg b/apps/common/main/resources/img/doc-formats/svg.svg new file mode 100644 index 000000000..3f2562f15 --- /dev/null +++ b/apps/common/main/resources/img/doc-formats/svg.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + From bebe79c9250f175fc93dbbfa53667536fd0ef9cb Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Wed, 27 May 2020 23:28:27 +0300 Subject: [PATCH 57/92] [SSE] Fix slicer styles --- .../main/app/controller/DocumentHolder.js | 7 ++++--- .../main/app/view/SlicerSettings.js | 1 + .../main/app/view/SlicerSettingsAdvanced.js | 20 +++++++++++-------- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js index efd5d1221..1addf0df4 100644 --- a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js +++ b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js @@ -884,9 +884,10 @@ define([ var me = this; (new SSE.Views.SlicerSettingsAdvanced({ - imageProps : item.imageInfo, - api : me.api, - handler : function(result, value) { + imageProps: item.imageInfo, + api : me.api, + styles : item.imageInfo.asc_getSlicerProperties().asc_getStylesPictures(), + handler : function(result, value) { if (result == 'ok') { if (me.api) { me.api.asc_setGraphicObjectProps(value.imageProps); diff --git a/apps/spreadsheeteditor/main/app/view/SlicerSettings.js b/apps/spreadsheeteditor/main/app/view/SlicerSettings.js index fcd2475be..ce0fb2e1a 100644 --- a/apps/spreadsheeteditor/main/app/view/SlicerSettings.js +++ b/apps/spreadsheeteditor/main/app/view/SlicerSettings.js @@ -493,6 +493,7 @@ define([ self.mnuSlicerPicker.store.reset(arr); } } + this.btnSlicerStyle.setDisabled(this.mnuSlicerPicker.store.length<1); }, onSelectSlicerStyle: function(btn, picker, itemView, record) { diff --git a/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js b/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js index ff50d7038..a2d177b53 100644 --- a/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js +++ b/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js @@ -110,6 +110,7 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem iconCls : 'icon-template-slicer', menu : new Common.UI.Menu({ style: 'width: 333px;', + additionalAlign: this.menuAddAlign, items: [ { template: _.template('') } ] @@ -386,7 +387,6 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem this._noApply = true; this.numCols.setValue(slicerprops.asc_getColumnCount(), true); - // this.numColWidth.setValue(Common.Utils.Metric.fnRecalcFromMM(slicerprops.asc_getColWidth()).toFixed(2), true); this.numColHeight.setValue(Common.Utils.Metric.fnRecalcFromMM(slicerprops.asc_getRowHeight()/36000).toFixed(2), true); this.inputHeader.setValue(slicerprops.asc_getCaption(), true); @@ -415,13 +415,16 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem value = slicerprops.asc_getStyle(); var rec = this.mnuSlicerPicker.store.findWhere({type: value}); - if (!rec) { + if (!rec && this.mnuSlicerPicker.store.length>0) { rec = this.mnuSlicerPicker.store.at(0); } - this.btnSlicerStyle.suspendEvents(); - this.mnuSlicerPicker.selectRecord(rec, true); - this.btnSlicerStyle.resumeEvents(); - this.$window.find('.icon-template-slicer').css({'background-image': 'url(' + rec.get("imageUrl") + ')', 'height': '49px', 'width': '36px', 'background-position': 'center', 'background-size': 'cover'}); + if (rec) { + this.btnSlicerStyle.suspendEvents(); + this.mnuSlicerPicker.selectRecord(rec, true); + this.btnSlicerStyle.resumeEvents(); + this.$window.find('.icon-template-slicer').css({'background-image': 'url(' + rec.get("imageUrl") + ')', 'height': '49px', 'width': '36px', 'background-position': 'center', 'background-size': 'cover'}); + } else + this.$window.find('.icon-template-slicer').css({'height': '49px', 'width': '36px', 'background-position': 'center', 'background-size': 'cover'}); this._noApply = false; @@ -450,8 +453,7 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem }, onInitStyles: function(Templates){ - var count = this.mnuSlicerPicker.store.length, - arr = []; + var arr = []; Templates && _.each(Templates, function(template){ arr.push({ id : Common.UI.getId(), @@ -462,6 +464,7 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem }); }); this.mnuSlicerPicker.store.reset(arr); + this.btnSlicerStyle.setDisabled(this.mnuSlicerPicker.store.length<1); }, onSelectSlicerStyle: function(btn, picker, itemView, record) { @@ -470,6 +473,7 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem if (this._changedProps) { this._changedProps.asc_setStyle(record.get('type')); } + this.$window.find('.icon-template-slicer').css({'background-image': 'url(' + record.get("imageUrl") + ')', 'height': '49px', 'width': '36px', 'background-position': 'center', 'background-size': 'cover'}); }, onRadioSnapChange: function(field, newValue, eOpts) { From 5c3b2638f53fed967b2956614edc4b0b31f4bf84 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 28 May 2020 13:17:21 +0300 Subject: [PATCH 58/92] [SSE] Set vertical text for cell --- .../main/app/controller/Toolbar.js | 7 +++++-- apps/spreadsheeteditor/main/app/view/Toolbar.js | 11 ++++++++++- apps/spreadsheeteditor/main/locale/en.json | 1 + .../img/toolbar/1.25x/text-orient-vertical.png | Bin 0 -> 335 bytes .../img/toolbar/1.5x/text-orient-vertical.png | Bin 0 -> 411 bytes .../img/toolbar/1.75x/text-orient-vertical.png | Bin 0 -> 467 bytes .../img/toolbar/1x/text-orient-vertical.png | Bin 0 -> 268 bytes .../img/toolbar/2x/text-orient-vertical.png | Bin 0 -> 526 bytes 8 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 apps/spreadsheeteditor/main/resources/img/toolbar/1.25x/text-orient-vertical.png create mode 100644 apps/spreadsheeteditor/main/resources/img/toolbar/1.5x/text-orient-vertical.png create mode 100644 apps/spreadsheeteditor/main/resources/img/toolbar/1.75x/text-orient-vertical.png create mode 100644 apps/spreadsheeteditor/main/resources/img/toolbar/1x/text-orient-vertical.png create mode 100644 apps/spreadsheeteditor/main/resources/img/toolbar/2x/text-orient-vertical.png diff --git a/apps/spreadsheeteditor/main/app/controller/Toolbar.js b/apps/spreadsheeteditor/main/app/controller/Toolbar.js index eaf086b4f..dfaddf1ea 100644 --- a/apps/spreadsheeteditor/main/app/controller/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/controller/Toolbar.js @@ -801,6 +801,7 @@ define([ switch (item.value) { case 'countcw': angle = 45; break; case 'clockwise': angle = -45; break; + case 'vertical': angle = 255; break; case 'rotateup': angle = 90; break; case 'rotatedown': angle = -90; break; } @@ -2289,6 +2290,7 @@ define([ need_disable = (fontparam == AscCommon.align_Justify || selectionType == Asc.c_oAscSelectionType.RangeShapeText || selectionType == Asc.c_oAscSelectionType.RangeShape); toolbar.btnTextOrient.menu.items[1].setDisabled(need_disable); toolbar.btnTextOrient.menu.items[2].setDisabled(need_disable); + toolbar.btnTextOrient.menu.items[3].setDisabled(need_disable); /* read cell vertical align */ fontparam = xfs.asc_getVertAlign(); @@ -2391,8 +2393,9 @@ define([ switch(val) { case 45: toolbar.btnTextOrient.menu.items[1].setChecked(true, true); break; case -45: toolbar.btnTextOrient.menu.items[2].setChecked(true, true); break; - case 90: toolbar.btnTextOrient.menu.items[3].setChecked(true, true); break; - case -90: toolbar.btnTextOrient.menu.items[4].setChecked(true, true); break; + case 255: toolbar.btnTextOrient.menu.items[3].setChecked(true, true); break; + case 90: toolbar.btnTextOrient.menu.items[4].setChecked(true, true); break; + case -90: toolbar.btnTextOrient.menu.items[5].setChecked(true, true); break; case 0: toolbar.btnTextOrient.menu.items[0].setChecked(true, true); break; } this._state.angle = val; diff --git a/apps/spreadsheeteditor/main/app/view/Toolbar.js b/apps/spreadsheeteditor/main/app/view/Toolbar.js index e2ff01a99..dcbb1666c 100644 --- a/apps/spreadsheeteditor/main/app/view/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/view/Toolbar.js @@ -630,6 +630,14 @@ define([ toggleGroup : 'textorientgroup', value : 'clockwise' }, + { + caption : me.textVertical, + iconCls : 'menu__icon text-orient-vertical', + checkable : true, + checkmark : false, + toggleGroup : 'textorientgroup', + value : 'vertical' + }, { caption : me.textRotateUp, iconCls : 'menu__icon text-orient-rup', @@ -2398,6 +2406,7 @@ define([ tipInsertSymbol: 'Insert symbol', txtAutosumTip: 'Summation', capBtnPrintTitles: 'Print Titles', - tipPrintTitles: 'Print titles' + tipPrintTitles: 'Print titles', + textVertical: 'Vertical Text' }, SSE.Views.Toolbar || {})); }); \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/locale/en.json b/apps/spreadsheeteditor/main/locale/en.json index 424987743..a9d5cd25c 100644 --- a/apps/spreadsheeteditor/main/locale/en.json +++ b/apps/spreadsheeteditor/main/locale/en.json @@ -2662,6 +2662,7 @@ "SSE.Views.Toolbar.txtTime": "Time", "SSE.Views.Toolbar.txtUnmerge": "Unmerge Cells", "SSE.Views.Toolbar.txtYen": "Â¥ Yen", + "SSE.Views.Toolbar.textVertical": "Vertical Text", "SSE.Views.Top10FilterDialog.textType": "Show", "SSE.Views.Top10FilterDialog.txtBottom": "Bottom", "SSE.Views.Top10FilterDialog.txtItems": "Item", diff --git a/apps/spreadsheeteditor/main/resources/img/toolbar/1.25x/text-orient-vertical.png b/apps/spreadsheeteditor/main/resources/img/toolbar/1.25x/text-orient-vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..d000dc4329d01b65e263119cab90326ca3f1e185 GIT binary patch literal 335 zcmV-V0kHmwP)X1ONa4*JNE*~NYqnys5*ctZnL?~Y?5W=(B07C8e}z2x77<}OD1UohHKBQ8dtDet^3V6R zDgG5dxUWA*6wz680}@4;$t}pD*@}KOAPbqo{zU9v$fbWHV;c0aUp(Clp?@PI1CQO} zFTHvSMheMew_4X#eTV3A0uXSz)w-_u{!fCskvxWV@mB1%`;&mLi~cRXaQm>|81zk4 h9&k9kr88&#F+U1y)0Tv9Q1Ji&002ovPDHLkV1lvEimLzs literal 0 HcmV?d00001 diff --git a/apps/spreadsheeteditor/main/resources/img/toolbar/1.5x/text-orient-vertical.png b/apps/spreadsheeteditor/main/resources/img/toolbar/1.5x/text-orient-vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..bd523533e325f8ac65c692753f6147ebca38091d GIT binary patch literal 411 zcmV;M0c8G(P)x-i5Rnox- zz9{IC46yBOSJis8J_Fp-QFFy7gHOgrb?VgFxJR%h7(>M2aKv4LEx}biYo$(`L~uQ8 zg`-IX>nLV=lTt$>c;r4yNk{~zh7V@ntww`}Drz{HWVs*^hy+Xq_-=Q%$Ln|S{n_pE z`gibm^8vWo08fRPP;+?{>#et52U)$YsW202E)U@Gc!rIu)}ZYKw&&SlMMXu$4%)7Q z1MLLnJUa{sf-umopV-)_tzyqM&gYx2T8!RS!G=f+oQaPb@%VS!*pV0;l_z!~*Tu$- z{Td=Xu?z5pxT%L24a;pl>m=o-TIRJli#l!29y#*g^8+K21A>)v*Zlwh002ovPDHLk FV1lC&xg`Jq literal 0 HcmV?d00001 diff --git a/apps/spreadsheeteditor/main/resources/img/toolbar/1.75x/text-orient-vertical.png b/apps/spreadsheeteditor/main/resources/img/toolbar/1.75x/text-orient-vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..36e5a9a64462c0bef27602f5b279eedf0563407f GIT binary patch literal 467 zcmV;^0WAKBP)&3<1aK8Zr5nhSb|fBj(0H&qpi9 zb2PQmh;brHX~LLV6%nywdLDyPMMNlQ1162xtysyP`UcF1Qz$t7X^eI@<)}e}Mw|AR zc#EN9A`%EhrUND3V)88wU%!<7C4R!(_?kjFP~t7d>e7@WC4R!xr74F>{L|4p9)4xY z_iZA3cAKoG;cRC_0LPiA45vFIVrUQ%(O}g+8!$mcgh1u986%R%rOanBB8&_T7*h=z z{=HkBS*I{cAn;D*^^_cQTrl&Kh+)-=6{~4@dpU+kTrl&K2v8{$D#H$p#^gCZFga$| z`23nu|9Z8FIPrm*KR>;ue%ES0IL4Z?#+dF|`v(Emlnq9AuD!?0$>GvT-R+ip3 zuoDjWeF&f^HhLD`N@Rtvw`QgP0G$E~UvK^T+aSZ&H_X~z8DD|V3uk-fKj#DBKAM)M S%-H7u0000-*q=3WYhhC13zv6*nEIrLa56I_ys_h3Gix!^9l;~BL^S` z@B{)MSpe(1a8LIX`pg1&2cA5E&pd!$SR*UyAq$`f3>FwN0LlstRaI3A=|R~8zQ71S z2+AIC3dp>=(|}_@W_2e4uSN*<(;_t}TR;o|{j^99$`-J`3;kKX_NhVH0p5Ydk3Kml zTR;uM{a%jymKu~D-~cRs+>(QGJg9%J<3W8w|0Uom!@;%ZLNf173bZFfGVi(8wXSns zsLuk}($e99J`3RZW-p@lIRK}(3*a*Xx<`nl$6W|*s~o5LPN!J0_41~bE8 zXbyW20&#wNh}w_;jjO4>(BqpPjG9|K06+aV3?6uV(}Qty&>H7O?Zx4PY z(U@r&61s3k+~RFQ(%Vb4-H7P70B<4bN${(x%9_~vL?dSPD=I1~D*8wC7j*DWKoImz Q1poj507*qoM6N<$f*Kj+SO5S3 literal 0 HcmV?d00001 From 6a8e712c8f0e0c979df25def05129c839b0e7e0b Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 28 May 2020 13:58:38 +0300 Subject: [PATCH 59/92] [SSE] Add tooltip for slicer buttons --- .../main/app/controller/DocumentHolder.js | 61 ++++++++++++++++++- .../main/app/controller/Main.js | 8 ++- .../main/app/view/SlicerSettings.js | 2 +- .../main/app/view/SlicerSettingsAdvanced.js | 2 +- apps/spreadsheeteditor/main/locale/en.json | 2 + 5 files changed, 69 insertions(+), 6 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js index 1addf0df4..07b5ad7cd 100644 --- a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js +++ b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js @@ -97,6 +97,9 @@ define([ row_column: { ttHeight: 20 }, + slicer: { + ttHeight: 20 + }, filter: {ttHeight: 40}, func_arg: {}, input_msg: {} @@ -957,7 +960,8 @@ define([ /** coauthoring end **/ index_locked, index_column, index_row, - index_filter; + index_filter, + index_slicer; for (var i = dataarray.length; i > 0; i--) { switch (dataarray[i-1].asc_getType()) { case Asc.c_oAscMouseMoveType.Hyperlink: @@ -980,6 +984,9 @@ define([ case Asc.c_oAscMouseMoveType.Filter: index_filter = i; break; + case Asc.c_oAscMouseMoveType.Tooltip: + index_slicer = i; + break; } } @@ -992,6 +999,7 @@ define([ hyperlinkTip = me.tooltips.hyperlink, row_columnTip = me.tooltips.row_column, filterTip = me.tooltips.filter, + slicerTip = me.tooltips.slicer, pos = [ me.documentHolder.cmpEl.offset().left - $(window).scrollLeft(), me.documentHolder.cmpEl.offset().top - $(window).scrollTop() @@ -1029,6 +1037,14 @@ define([ if (!index_locked) { me.hideCoAuthTips(); } + if (index_slicer===undefined) { + if (!slicerTip.isHidden && slicerTip.ref) { + slicerTip.ref.hide(); + slicerTip.ref = undefined; + slicerTip.text = ''; + slicerTip.isHidden = true; + } + } } if (index_filter===undefined || (me.dlgFilter && me.dlgFilter.isVisible()) || (me.currentMenu && me.currentMenu.isVisible())) { if (!filterTip.isHidden && filterTip.ref) { @@ -1038,7 +1054,6 @@ define([ filterTip.isHidden = true; } } - // show tooltips /** coauthoring begin **/ var getUserName = function(id){ @@ -1281,6 +1296,48 @@ define([ }); } } + + if (index_slicer!==undefined && me.permissions.isEdit) { + if (!slicerTip.parentEl) { + slicerTip.parentEl = $('
    '); + me.documentHolder.cmpEl.append(slicerTip.parentEl); + } + + var data = dataarray[index_slicer-1], + str = data.asc_getTooltip(); + if (slicerTip.ref && slicerTip.ref.isVisible()) { + if (slicerTip.text != str) { + slicerTip.text = str; + slicerTip.ref.setTitle(str); + slicerTip.ref.updateTitle(); + } + } + + if (!slicerTip.ref || !slicerTip.ref.isVisible()) { + slicerTip.text = str; + slicerTip.ref = new Common.UI.Tooltip({ + owner : slicerTip.parentEl, + html : true, + title : str + }); + + slicerTip.ref.show([-10000, -10000]); + slicerTip.isHidden = false; + + showPoint = [data.asc_getX(), data.asc_getY()]; + showPoint[0] += (pos[0] + 6); + showPoint[1] += (pos[1] - 20 - slicerTip.ttHeight); + + var tipwidth = slicerTip.ref.getBSTip().$tip.width(); + if (showPoint[0] + tipwidth > me.tooltips.coauth.bodyWidth ) + showPoint[0] = me.tooltips.coauth.bodyWidth - tipwidth - 20; + + slicerTip.ref.getBSTip().$tip.css({ + top : showPoint[1] + 'px', + left: showPoint[0] + 'px' + }); + } + } } }, diff --git a/apps/spreadsheeteditor/main/app/controller/Main.js b/apps/spreadsheeteditor/main/app/controller/Main.js index 2d716ff0b..69908a197 100644 --- a/apps/spreadsheeteditor/main/app/controller/Main.js +++ b/apps/spreadsheeteditor/main/app/controller/Main.js @@ -127,7 +127,9 @@ define([ 'Values': this.txtValues, 'Grand Total': this.txtGrandTotal, 'Row Labels': this.txtRowLbls, - 'Column Labels': this.txtColLbls + 'Column Labels': this.txtColLbls, + 'Multi-Select (Alt+S)': this.txtMultiSelect, + 'Clear Filter (Alt+C)': this.txtClearFilter }; styleNames.forEach(function(item){ translate[item] = me['txtStyle_' + item.replace(/ /g, '_')] || item; @@ -2548,7 +2550,9 @@ define([ txtRowLbls: 'Row Labels', txtColLbls: 'Column Labels', errNoDuplicates: 'No duplicate values found.', - errRemDuplicates: 'Duplicate values found and deleted: {0}, unique values left: {1}.' + errRemDuplicates: 'Duplicate values found and deleted: {0}, unique values left: {1}.', + txtMultiSelect: 'Multi-Select (Alt+S)', + txtClearFilter: 'Clear Filter (Alt+C)' } })(), SSE.Controllers.Main || {})) }); diff --git a/apps/spreadsheeteditor/main/app/view/SlicerSettings.js b/apps/spreadsheeteditor/main/app/view/SlicerSettings.js index ce0fb2e1a..c66ddc394 100644 --- a/apps/spreadsheeteditor/main/app/view/SlicerSettings.js +++ b/apps/spreadsheeteditor/main/app/view/SlicerSettings.js @@ -233,7 +233,7 @@ define([ value: '1', allowDecimal: false, maxValue: 20000, - minValue: 0 + minValue: 1 }); this.lockedControls.push(this.numCols); diff --git a/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js b/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js index a2d177b53..57da61753 100644 --- a/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js +++ b/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js @@ -190,7 +190,7 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem value: '1', allowDecimal: false, maxValue: 20000, - minValue: 0 + minValue: 1 }); this.numCols.on('change', _.bind(function(field, newValue, oldValue, eOpts){ var numval = field.getNumberValue(); diff --git a/apps/spreadsheeteditor/main/locale/en.json b/apps/spreadsheeteditor/main/locale/en.json index be7d1e351..87e382c73 100644 --- a/apps/spreadsheeteditor/main/locale/en.json +++ b/apps/spreadsheeteditor/main/locale/en.json @@ -814,6 +814,8 @@ "SSE.Controllers.Main.warnNoLicense": "This version of %1 editors has certain limitations for concurrent connections to the document server.
    If you need more please consider purchasing a commercial license.", "SSE.Controllers.Main.warnNoLicenseUsers": "This version of %1 editors has certain limitations for concurrent users.
    If you need more please consider purchasing a commercial license.", "SSE.Controllers.Main.warnProcessRightsChange": "You have been denied the right to edit the file.", + "SSE.Controllers.Main.txtMultiSelect": "Multi-Select (Alt+S)", + "SSE.Controllers.Main.txtClearFilter": "Clear Filter (Alt+C)", "SSE.Controllers.Print.strAllSheets": "All Sheets", "SSE.Controllers.Print.textFirstCol": "First column", "SSE.Controllers.Print.textFirstRow": "First row", From 8e3e359c89edb5fb7367bad25a693160eda97a45 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 28 May 2020 14:55:56 +0300 Subject: [PATCH 60/92] [SSE] Fix vertical text in the cell --- apps/spreadsheeteditor/main/app/view/CellSettings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/spreadsheeteditor/main/app/view/CellSettings.js b/apps/spreadsheeteditor/main/app/view/CellSettings.js index 4e32a0ee9..dd34f3734 100644 --- a/apps/spreadsheeteditor/main/app/view/CellSettings.js +++ b/apps/spreadsheeteditor/main/app/view/CellSettings.js @@ -449,7 +449,7 @@ define([ var xfs = props.asc_getXfs(), value = xfs.asc_getAngle(); if (Math.abs(this._state.CellAngle - value) > 0.1 || (this._state.CellAngle === undefined) && (this._state.CellAngle !== value)) { - this.spnAngle.setValue((value !== null) ? value : '', true); + this.spnAngle.setValue((value !== null) ? (value==255 ? 0 : value) : '', true); this._state.CellAngle = value; } this.fill = xfs.asc_getFill(); From 64904a2a0b2ed172e1efdfdeb6714be8a54457ca Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 28 May 2020 17:05:20 +0300 Subject: [PATCH 61/92] [SSE] Fix slicer settings --- .../main/app/template/SlicerSettings.template | 4 +-- .../main/app/view/SlicerSettings.js | 34 ++++++++++++++++--- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/template/SlicerSettings.template b/apps/spreadsheeteditor/main/app/template/SlicerSettings.template index fb68d3f6b..279a00689 100644 --- a/apps/spreadsheeteditor/main/app/template/SlicerSettings.template +++ b/apps/spreadsheeteditor/main/app/template/SlicerSettings.template @@ -20,11 +20,11 @@
    - - diff --git a/apps/spreadsheeteditor/main/app/view/SlicerSettings.js b/apps/spreadsheeteditor/main/app/view/SlicerSettings.js index c66ddc394..32a3b37fd 100644 --- a/apps/spreadsheeteditor/main/app/view/SlicerSettings.js +++ b/apps/spreadsheeteditor/main/app/view/SlicerSettings.js @@ -75,7 +75,8 @@ define([ ColWidth: 0, ColHeight: 0, PosVert: 0, - PosHor: 0 + PosHor: 0, + PosLocked: false }; this.spinners = []; this.lockedControls = []; @@ -94,7 +95,7 @@ define([ scope: this })); - this.linkAdvanced = $('#image-advanced-link'); + this.linkAdvanced = $('#slicer-advanced-link'); }, setApi: function(api) { @@ -181,7 +182,7 @@ define([ minValue: 0 }); this.spinners.push(this.spnHor); - this.lockedControls.push(this.spnVert); + this.lockedControls.push(this.spnHor); this.spnVert = new Common.UI.MetricSpinner({ el: $('#slicer-spin-vert'), @@ -200,6 +201,14 @@ define([ this.spnHor.on('inputleave', function(){ Common.NotificationCenter.trigger('edit:complete', me);}); this.spnVert.on('inputleave', function(){ Common.NotificationCenter.trigger('edit:complete', me);}); + this.chLock = new Common.UI.CheckBox({ + el: $('#slicer-checkbox-disable-resize'), + labelText: this.textLock, + disabled: this._locked + }); + this.lockedControls.push(this.chLock); + this.chLock.on('change', this.onLockSlicerChange.bind(this)); + this.spnColWidth = new Common.UI.MetricSpinner({ el: $('#slicer-spin-col-width'), step: .1, @@ -367,6 +376,11 @@ define([ } this._isTemplatesChanged = false; + value = slicerprops.asc_getLockedPosition(); + if ( this._state.PosLocked!==value ) { + this.chLock.setValue((value !== null && value !== undefined) ? !!value : 'indeterminate', true); + this._state.PosLocked=value; + } } } }, @@ -493,7 +507,7 @@ define([ self.mnuSlicerPicker.store.reset(arr); } } - this.btnSlicerStyle.setDisabled(this.mnuSlicerPicker.store.length<1); + this.btnSlicerStyle.setDisabled(this.mnuSlicerPicker.store.length<1 || this._locked); }, onSelectSlicerStyle: function(btn, picker, itemView, record) { @@ -505,6 +519,15 @@ define([ } }, + onLockSlicerChange: function(field, newValue, oldValue, eOpts){ + if (this.api) { + if (this._originalProps) { + this._originalProps.asc_getSlicerProperties().asc_setLockedPosition(field.getValue()=='checked'); + this.api.asc_setGraphicObjectProps(this._originalProps); + } + } + }, + setLocked: function (locked) { this._locked = locked; }, @@ -531,7 +554,8 @@ define([ textVert: 'Vertical', textButtons: 'Buttons', textColumns: 'Columns', - textStyle: 'Style' + textStyle: 'Style', + textLock: 'Disable resizing or moving' }, SSE.Views.SlicerSettings || {})); }); From 3d11c70bc071b7a05bd2bdb5e359f709a2ff6d67 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 28 May 2020 17:15:53 +0300 Subject: [PATCH 62/92] [SSE] Add translation --- apps/spreadsheeteditor/main/app/controller/Main.js | 6 ++++-- apps/spreadsheeteditor/main/locale/en.json | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/Main.js b/apps/spreadsheeteditor/main/app/controller/Main.js index 69908a197..a8f952df1 100644 --- a/apps/spreadsheeteditor/main/app/controller/Main.js +++ b/apps/spreadsheeteditor/main/app/controller/Main.js @@ -129,7 +129,8 @@ define([ 'Row Labels': this.txtRowLbls, 'Column Labels': this.txtColLbls, 'Multi-Select (Alt+S)': this.txtMultiSelect, - 'Clear Filter (Alt+C)': this.txtClearFilter + 'Clear Filter (Alt+C)': this.txtClearFilter, + '(blank)': this.txtBlank }; styleNames.forEach(function(item){ translate[item] = me['txtStyle_' + item.replace(/ /g, '_')] || item; @@ -2552,7 +2553,8 @@ define([ errNoDuplicates: 'No duplicate values found.', errRemDuplicates: 'Duplicate values found and deleted: {0}, unique values left: {1}.', txtMultiSelect: 'Multi-Select (Alt+S)', - txtClearFilter: 'Clear Filter (Alt+C)' + txtClearFilter: 'Clear Filter (Alt+C)', + txtBlank: '(blank)' } })(), SSE.Controllers.Main || {})) }); diff --git a/apps/spreadsheeteditor/main/locale/en.json b/apps/spreadsheeteditor/main/locale/en.json index 87e382c73..8c70a7bff 100644 --- a/apps/spreadsheeteditor/main/locale/en.json +++ b/apps/spreadsheeteditor/main/locale/en.json @@ -816,6 +816,7 @@ "SSE.Controllers.Main.warnProcessRightsChange": "You have been denied the right to edit the file.", "SSE.Controllers.Main.txtMultiSelect": "Multi-Select (Alt+S)", "SSE.Controllers.Main.txtClearFilter": "Clear Filter (Alt+C)", + "SSE.Controllers.Main.txtBlank": "(blank)", "SSE.Controllers.Print.strAllSheets": "All Sheets", "SSE.Controllers.Print.textFirstCol": "First column", "SSE.Controllers.Print.textFirstRow": "First row", From e1c4d6bcb71c8a7b258a2a31c08af20bd0ec7665 Mon Sep 17 00:00:00 2001 From: Kirill Volkov Date: Thu, 28 May 2020 17:41:37 +0300 Subject: [PATCH 63/92] change 1,75 toolbar icons --- .../img/toolbar/1.75x/advanced-btn-ratio.png | Bin 333 -> 362 bytes .../img/toolbar/1.75x/arrange-back.png | Bin 194 -> 204 bytes .../img/toolbar/1.75x/arrange-backward.png | Bin 166 -> 175 bytes .../img/toolbar/1.75x/arrange-forward.png | Bin 167 -> 178 bytes .../img/toolbar/1.75x/arrange-front.png | Bin 206 -> 215 bytes .../img/toolbar/1.75x/btn-align-bottom.png | Bin 166 -> 179 bytes .../img/toolbar/1.75x/btn-align-center.png | Bin 127 -> 127 bytes .../img/toolbar/1.75x/btn-align-just.png | Bin 115 -> 119 bytes .../img/toolbar/1.75x/btn-align-left.png | Bin 127 -> 127 bytes .../img/toolbar/1.75x/btn-align-middle.png | Bin 208 -> 254 bytes .../img/toolbar/1.75x/btn-align-right.png | Bin 126 -> 127 bytes .../img/toolbar/1.75x/btn-align-top.png | Bin 171 -> 193 bytes .../img/toolbar/1.75x/btn-bold(ru).png | Bin 429 -> 484 bytes .../resources/img/toolbar/1.75x/btn-bold.png | Bin 303 -> 337 bytes .../img/toolbar/1.75x/btn-border-all.png | Bin 127 -> 133 bytes .../img/toolbar/1.75x/btn-border-bottom.png | Bin 130 -> 144 bytes .../img/toolbar/1.75x/btn-border-diagdown.png | Bin 217 -> 248 bytes .../img/toolbar/1.75x/btn-border-diagup.png | Bin 218 -> 250 bytes .../img/toolbar/1.75x/btn-border-inside.png | Bin 156 -> 175 bytes .../img/toolbar/1.75x/btn-border-insidehor.png | Bin 126 -> 134 bytes .../img/toolbar/1.75x/btn-border-insidevert.png | Bin 147 -> 150 bytes .../img/toolbar/1.75x/btn-border-left.png | Bin 150 -> 147 bytes .../img/toolbar/1.75x/btn-border-no.png | Bin 125 -> 134 bytes .../img/toolbar/1.75x/btn-border-out.png | Bin 136 -> 156 bytes .../img/toolbar/1.75x/btn-border-right.png | Bin 142 -> 143 bytes .../img/toolbar/1.75x/btn-border-top.png | Bin 133 -> 144 bytes .../img/toolbar/1.75x/btn-clearstyle.png | Bin 306 -> 388 bytes .../resources/img/toolbar/1.75x/btn-close.png | Bin 249 -> 275 bytes .../img/toolbar/1.75x/btn-colorschemas.png | Bin 136 -> 143 bytes .../resources/img/toolbar/1.75x/btn-copy.png | Bin 183 -> 210 bytes .../img/toolbar/1.75x/btn-copystyle.png | Bin 171 -> 192 bytes .../resources/img/toolbar/1.75x/btn-decfont.png | Bin 290 -> 322 bytes .../img/toolbar/1.75x/btn-decoffset.png | Bin 172 -> 212 bytes .../img/toolbar/1.75x/btn-download.png | Bin 221 -> 366 bytes .../resources/img/toolbar/1.75x/btn-edit.png | Bin 226 -> 230 bytes .../img/toolbar/1.75x/btn-firstitem.png | Bin 235 -> 315 bytes .../img/toolbar/1.75x/btn-flip-hor.png | Bin 279 -> 475 bytes .../img/toolbar/1.75x/btn-flip-vert.png | Bin 231 -> 398 bytes .../img/toolbar/1.75x/btn-fontcolor.png | Bin 323 -> 363 bytes .../resources/img/toolbar/1.75x/btn-goback.png | Bin 213 -> 250 bytes .../img/toolbar/1.75x/btn-ic-doclang.png | Bin 680 -> 841 bytes .../img/toolbar/1.75x/btn-ic-docspell(ru).png | Bin 378 -> 453 bytes .../img/toolbar/1.75x/btn-ic-docspell.png | Bin 383 -> 427 bytes .../img/toolbar/1.75x/btn-ic-options.png | Bin 116 -> 119 bytes .../img/toolbar/1.75x/btn-ic-review.png | Bin 310 -> 413 bytes .../img/toolbar/1.75x/btn-ic-zoomtopage.png | Bin 347 -> 355 bytes .../img/toolbar/1.75x/btn-ic-zoomtowidth.png | Bin 237 -> 262 bytes .../resources/img/toolbar/1.75x/btn-incfont.png | Bin 344 -> 389 bytes .../img/toolbar/1.75x/btn-incoffset.png | Bin 175 -> 205 bytes .../img/toolbar/1.75x/btn-italic(ru).png | Bin 339 -> 396 bytes .../resources/img/toolbar/1.75x/btn-italic.png | Bin 221 -> 254 bytes .../img/toolbar/1.75x/btn-lastitem.png | Bin 241 -> 304 bytes .../img/toolbar/1.75x/btn-linespace.png | Bin 245 -> 276 bytes .../img/toolbar/1.75x/btn-menu-about.png | Bin 448 -> 672 bytes .../img/toolbar/1.75x/btn-menu-chart.png | Bin 163 -> 173 bytes .../img/toolbar/1.75x/btn-menu-chat.png | Bin 301 -> 335 bytes .../img/toolbar/1.75x/btn-menu-comments.png | Bin 252 -> 291 bytes .../img/toolbar/1.75x/btn-menu-image.png | Bin 340 -> 396 bytes .../img/toolbar/1.75x/btn-menu-navigation.png | Bin 110 -> 113 bytes .../img/toolbar/1.75x/btn-menu-search.png | Bin 415 -> 495 bytes .../img/toolbar/1.75x/btn-menu-shape.png | Bin 365 -> 497 bytes .../img/toolbar/1.75x/btn-menu-signature.png | Bin 765 -> 956 bytes .../img/toolbar/1.75x/btn-menu-support.png | Bin 417 -> 617 bytes .../img/toolbar/1.75x/btn-menu-table.png | Bin 140 -> 147 bytes .../img/toolbar/1.75x/btn-menu-textart.png | Bin 374 -> 492 bytes .../img/toolbar/1.75x/btn-nextitem.png | Bin 228 -> 281 bytes .../img/toolbar/1.75x/btn-numbering.png | Bin 169 -> 219 bytes .../img/toolbar/1.75x/btn-paracolor.png | Bin 399 -> 490 bytes .../img/toolbar/1.75x/btn-paragraph.png | Bin 189 -> 224 bytes .../resources/img/toolbar/1.75x/btn-paste.png | Bin 207 -> 224 bytes .../img/toolbar/1.75x/btn-previtem.png | Bin 229 -> 286 bytes .../resources/img/toolbar/1.75x/btn-print.png | Bin 209 -> 224 bytes .../resources/img/toolbar/1.75x/btn-redo.png | Bin 294 -> 344 bytes .../img/toolbar/1.75x/btn-rotate-270.png | Bin 319 -> 351 bytes .../img/toolbar/1.75x/btn-rotate-90.png | Bin 304 -> 345 bytes .../img/toolbar/1.75x/btn-save-coauth.png | Bin 431 -> 522 bytes .../resources/img/toolbar/1.75x/btn-save.png | Bin 206 -> 224 bytes .../img/toolbar/1.75x/btn-select-range.png | Bin 130 -> 135 bytes .../img/toolbar/1.75x/btn-setmarkers.png | Bin 132 -> 140 bytes .../img/toolbar/1.75x/btn-settings.png | Bin 591 -> 744 bytes .../img/toolbar/1.75x/btn-strikeout(ru).png | Bin 136 -> 137 bytes .../img/toolbar/1.75x/btn-strikeout.png | Bin 307 -> 363 bytes .../img/toolbar/1.75x/btn-subscript.png | Bin 381 -> 435 bytes .../img/toolbar/1.75x/btn-superscript.png | Bin 383 -> 444 bytes .../img/toolbar/1.75x/btn-underline(ru).png | Bin 199 -> 233 bytes .../img/toolbar/1.75x/btn-underline.png | Bin 214 -> 253 bytes .../resources/img/toolbar/1.75x/btn-undo.png | Bin 298 -> 335 bytes .../resources/img/toolbar/1.75x/btn-users.png | Bin 439 -> 647 bytes .../img/toolbar/1.75x/btn-zoomdown.png | Bin 105 -> 105 bytes .../resources/img/toolbar/1.75x/btn-zoomup.png | Bin 123 -> 123 bytes .../img/toolbar/1.75x/page-landscape.png | Bin 185 -> 197 bytes .../img/toolbar/1.75x/page-portrait.png | Bin 187 -> 202 bytes .../img/toolbar/1.75x/shape-align-bottom.png | Bin 166 -> 180 bytes .../img/toolbar/1.75x/shape-align-center.png | Bin 169 -> 185 bytes .../img/toolbar/1.75x/shape-align-left.png | Bin 170 -> 187 bytes .../img/toolbar/1.75x/shape-align-middle.png | Bin 170 -> 186 bytes .../img/toolbar/1.75x/shape-align-right.png | Bin 173 -> 190 bytes .../img/toolbar/1.75x/shape-align-top.png | Bin 160 -> 183 bytes .../img/toolbar/1.75x/shape-distribute-hor.png | Bin 171 -> 193 bytes .../img/toolbar/1.75x/shape-distribute-vert.png | Bin 166 -> 173 bytes .../resources/img/toolbar/1.75x/shape-group.png | Bin 179 -> 199 bytes .../img/toolbar/1.75x/shape-ungroup.png | Bin 209 -> 220 bytes .../img/toolbar/1.75x/text-orient-hor.png | Bin 369 -> 415 bytes .../img/toolbar/1.75x/text-orient-rdown.png | Bin 390 -> 432 bytes .../img/toolbar/1.75x/text-orient-rup.png | Bin 383 -> 427 bytes .../img/toolbar/1.75x/btn-higlight.png | Bin 295 -> 367 bytes .../img/toolbar/1.75x/btn-mailmerge.png | Bin 343 -> 343 bytes .../img/toolbar/1.75x/btn-menu-header.png | Bin 145 -> 171 bytes .../img/toolbar/1.75x/btn-multilevels.png | Bin 146 -> 152 bytes .../img/toolbar/1.75x/cc-plaintext.png | Bin 115 -> 116 bytes .../resources/img/toolbar/1.75x/cc-remove.png | Bin 163 -> 167 bytes .../resources/img/toolbar/1.75x/cc-richtext.png | Bin 218 -> 272 bytes .../img/toolbar/1.75x/columns-left.png | Bin 118 -> 123 bytes .../resources/img/toolbar/1.75x/columns-one.png | Bin 115 -> 119 bytes .../img/toolbar/1.75x/columns-right.png | Bin 118 -> 123 bytes .../img/toolbar/1.75x/columns-three.png | Bin 119 -> 118 bytes .../resources/img/toolbar/1.75x/columns-two.png | Bin 118 -> 120 bytes .../img/toolbar/1.75x/dropcap-inmargin.png | Bin 238 -> 211 bytes .../img/toolbar/1.75x/dropcap-intext.png | Bin 238 -> 214 bytes .../resources/img/toolbar/1.75x/wrap-behind.png | Bin 243 -> 294 bytes .../img/toolbar/1.75x/wrap-infront.png | Bin 385 -> 409 bytes .../resources/img/toolbar/1.75x/wrap-inline.png | Bin 368 -> 387 bytes .../resources/img/toolbar/1.75x/wrap-square.png | Bin 387 -> 401 bytes .../img/toolbar/1.75x/wrap-through.png | Bin 403 -> 416 bytes .../resources/img/toolbar/1.75x/wrap-tight.png | Bin 396 -> 405 bytes .../img/toolbar/1.75x/wrap-topandbottom.png | Bin 359 -> 378 bytes .../img/toolbar/1.75x/btn-changeslide.png | Bin 157 -> 187 bytes .../img/toolbar/1.75x/btn-ic-zoomtoslide.png | Bin 343 -> 342 bytes .../img/toolbar/1.75x/btn-menu-slide.png | Bin 182 -> 183 bytes .../img/toolbar/1.75x/btn-menu-thumbs.png | Bin 157 -> 176 bytes .../img/toolbar/1.75x/btn-presenter-view.png | Bin 208 -> 243 bytes .../resources/img/toolbar/1.75x/btn-preview.png | Bin 242 -> 280 bytes .../1.75x/btn-previwe- exit-fullscreen.png | Bin 154 -> 171 bytes .../toolbar/1.75x/btn-previwe-fullscreen.png | Bin 150 -> 161 bytes .../img/toolbar/1.75x/btn-previwe-pause.png | Bin 116 -> 121 bytes .../img/toolbar/1.75x/btn-previwe-play.png | Bin 278 -> 349 bytes .../img/toolbar/1.75x/btn-slidesize.png | Bin 154 -> 174 bytes .../resources/img/toolbar/1.75x/btn-addcell.png | Bin 159 -> 166 bytes .../img/toolbar/1.75x/btn-autofilter.png | Bin 172 -> 195 bytes .../img/toolbar/1.75x/btn-border-style.png | Bin 141 -> 146 bytes .../img/toolbar/1.75x/btn-clear-filter.png | Bin 273 -> 290 bytes .../img/toolbar/1.75x/btn-currency-style.png | Bin 218 -> 364 bytes .../img/toolbar/1.75x/btn-decdecimal.png | Bin 250 -> 310 bytes .../resources/img/toolbar/1.75x/btn-delcell.png | Bin 144 -> 154 bytes .../resources/img/toolbar/1.75x/btn-formula.png | Bin 250 -> 296 bytes .../img/toolbar/1.75x/btn-function.png | Bin 428 -> 696 bytes .../img/toolbar/1.75x/btn-incdecimal.png | Bin 283 -> 300 bytes .../img/toolbar/1.75x/btn-menu-cell.png | Bin 179 -> 208 bytes .../img/toolbar/1.75x/btn-menu-pivot.png | Bin 274 -> 317 bytes .../resources/img/toolbar/1.75x/btn-merge.png | Bin 204 -> 246 bytes .../img/toolbar/1.75x/btn-named-range.png | Bin 175 -> 171 bytes .../img/toolbar/1.75x/btn-percent-style.png | Bin 389 -> 403 bytes .../img/toolbar/1.75x/btn-sort-down(ru).png | Bin 468 -> 610 bytes .../img/toolbar/1.75x/btn-sort-down.png | Bin 440 -> 578 bytes .../img/toolbar/1.75x/btn-sort-up(ru).png | Bin 449 -> 527 bytes .../resources/img/toolbar/1.75x/btn-sort-up.png | Bin 435 -> 578 bytes .../resources/img/toolbar/1.75x/btn-wrap.png | Bin 150 -> 151 bytes .../img/toolbar/1.75x/text-orient-ccw.png | Bin 429 -> 544 bytes .../img/toolbar/1.75x/text-orient-cw.png | Bin 425 -> 494 bytes 159 files changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/common/main/resources/img/toolbar/1.75x/advanced-btn-ratio.png b/apps/common/main/resources/img/toolbar/1.75x/advanced-btn-ratio.png index 1b17925ddb3e25feed2689dc6166a13af9eb2927..7a9c8954e531a56a53532d5c071d1c731b63ad68 100644 GIT binary patch literal 362 zcmV-w0hRuVP)bvVn_uJ3@g1$4yPG}5+$KT#;^(! zl2o9?Y1oX9EEFghR)Ggg1@OMRF8TDY0(jqDkxzfBnaJ`;U(QZc1T&0b6-+3%oAOSx zH=6QJvwItOBwgDf06UU0-=p0Mfq9Dqb`}@8mBHACL$95|^G-FK@`#hCBl5g;3hk&k z)DU>13vpnNBFdB~Z%W!)~;;0(K5L`uT!neZYVrS}Yce&%jA` zQNiyaB6`|Vzwcu$5_Ty5AR>C&s2FQ+c{5RAPOo>u<=X6)!>}0!1;f#TalsI3X)`%S ziOI2tkB?$t__a&M(=IeA+{``^dlhe{S;{k`P;l_J5iAj5B z&WKM~C#&8wQKaX2!oQaSkM&;^w=~U|bP0l+XkK DEb~e~ literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!3HD?X4LuvsZLK9$B+ufx7Qijjv5HCJ-nlP z@^AkJ_n-4wKP)j=bc%!#l4PkVl$EF0)322WQ%mvv4FO#s0rN#Xzi diff --git a/apps/common/main/resources/img/toolbar/1.75x/arrange-backward.png b/apps/common/main/resources/img/toolbar/1.75x/arrange-backward.png index 3f2431e341eb6f87de76b516ea987977c781bf17..e9ed1193bdf2690afb1f6d33cb51f0af020605b7 100644 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!2%?k<+eNnQe~bljv*C{Z?7NZZBXEGxcIK^ zjlGlm%8xwLmStW!@n6RC1vmR5C71szUMGHEo&826_%qi$CAp_jj%Sn%5)SO?nHX~N zVYbgRNg2bH=>n{>4|0ir Z&myC4l$~JdUkY>qgQu&X%Q~loCIDzHLgfGe literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!2%?2P273}NacFEIEGX(zP;wi#h}Q+8u0#F z$$#Yvk@lNcC)BxgiT&TrQ!An;lsMz>%U?Hk?OGHU{F$lxX!8E10)a#3hkhRQF)*BS z_k*Bc{tu4d+vDc@Z20-!X~u`h9hr>Rn0k&MSFf;1JaoD3|LV7Y*$jPb^}DoWj|=)F RzX4jz;OXk;vd$@?2>@`-Lumj2 diff --git a/apps/common/main/resources/img/toolbar/1.75x/arrange-forward.png b/apps/common/main/resources/img/toolbar/1.75x/arrange-forward.png index fbef3680bc034ebf3e8e32de1e2c8e2094dbd97a..4d49ea053f29892377bf102e8cc13a76ec61faa1 100644 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!2%?k<+eNnQk9-Ajv*C{Z?8FW9Z=wL34EWn z_rG9~i1&BXnT(nt|915EH#DymEOK*;DXw+P2u?er^JvPnz8$4^Rc5}zHnc3KGO2Nb%K0#D691{iL;xTC&#n1@ys}Hn8&NP&NzF* cg!#|dLe($c(hxZ<0dxd|r>mdKI;Vst0FCNE!~g&Q literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!2%?2P273}NacCDIEGX(zMbmG#bC(6{5N|0 z|N18X!kg8}PL4O6m!-?LL@4*nOn)ByeEa09VPZ|!*e=!ecS-APo6+&R<$Kbkg4{=+ zzuY>KP}Qv~C#+wg5*Adb7P)g^912tAvepdx8w> z_8{XZV~1U;R5Gn7YXerLJp z^(}ot$s9@?OG8v0e_Ir4=$~z0W!Uw}PEKatboM%3re{1?q}spC6H(q9?`*?#Z-woV z)N6B&EdDXcRQ;pIy3FrKh0FsA+gc0uc}4a6<*T{W?)=YVB0&;~ErM<{?yg}MQ%kUIeR1TF zz#B`RKEWLZjS_7lY%)h$XZ~k8K6AMaU*sa6zRgZMEp>v_j<0gw#9j1m&-2?iSFX&7 enjG}%{9KoP*H4y|?e7D+g2B_(&t;ucLK6V2h(uWc literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!2%?2P273}NacFEIEGX(zP+@O_kaSAOJIMA zvO?l{XR~h_)0tFLCj?GW`>wfSjk@xgDZfI`{f!LTkZ`bRf9r1!ABzX>6J?IHaEhg` zU6_7AvLi?1P=e5tJ*TbBzm#0NIs2Jd^~K!$D_ys(!k@o1UTd^;dDyGDesX+!8aMmj Q2U*PE>FVdQ&MBb@0Ij4#Pyhe` diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-align-center.png b/apps/common/main/resources/img/toolbar/1.75x/btn-align-center.png index 266554228571019065e61bcff0aebe457b68fe04..da520ca2012b69fbfc871cf29f25f64d5d962f0c 100644 GIT binary patch delta 109 zcmb=gSL_V%bLZuf;$mQ6;Pv!y2?Ek?K&;FGBp7&Vls8UPlyp6?QIJ7_gXN(1yWjaQ zc_l@Ym?9!p&ozpflgP!&#dl_*xcvSZ&W%mX!5W8;N?ywmdK II;Vst0NraJNB{r; delta 109 zcmb=gSL_V%bLZuf;$mQ6;Pv!y2?EkKKrF`rBp5&+bY#PsiKeq8oR-uQgSkZoJla=Gi}!K23;jh>bts_rnNeh^MQc J%Q~loCIGObB`W{` diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-align-just.png b/apps/common/main/resources/img/toolbar/1.75x/btn-align-just.png index 334ddde325905a01e48512f89e7ab76dd1b1415f..220ac8ed7e746ecbaf2d4f418001d392e9dcdfd6 100644 GIT binary patch delta 89 zcmXReSL_V%bLZuf;$mQ6;Pv!y2?Ek?K&;Hf3?xG;r~I3!sA?$V>Eakt!I&(urNK~y orGaN%sKbUPm%EG8cncXA{QM+Eua}FVdQ I&MBb@0LB&`Pyhe` delta 109 zcmb=gSL_V%bLZuf;$mQ6;Pv!y2?EkKKrF`rBp5VR2}pGf6!V- z&R(v2uZlX{By@`mFGo$tystS^Crdi>^2zS)y0$_yy=Uq3ih0Mzcg|(fWv^6zj+D3Cfcj1$l znk1VIIMR3yDTu67;Nfs!oiQb$K`PK=TI@W&8F_BZI>ON$zwU0{aH!EiVv|pLO1`3i n_!-t7o})7gtynI<5@2Is(~+v%;qbx^=oki1S3j3^P6qu1dLk z);_X!Es#+5(7G$e{KV|5;LKV5XDXG9z9&vL+AB8u+5er)*7kSq={>l8ALv8|Pgg&e IbxsLQ0D+cK;s5{u diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-align-right.png b/apps/common/main/resources/img/toolbar/1.75x/btn-align-right.png index 0211531faf2ad15353f78002f422b981bb1ccc9c..58e47c3a882808d9f1948e77438e4683cb72aaa0 100644 GIT binary patch literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe0VEiBYLqtuDW;MjzhDN2vdL#HfIJIN7srqa z#*6o YL-xZolLH|-he0NLy85}Sb4q9e06)?qa{vGU literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L0VEhgKPycJQcNX5e!&b3Ws}cZ0D0z~E{-7; zjBh7z>Z#CWeq@P(Q XwP0&({4*^hSCGM;u6{1-oD!MMbJJz~JaY}w@g zkb~*ot$LRJL;5Z3`@9oaHHGF?|MWS@)MNN8ZP~dwi?ytdMjO{v&7QP#(p~kgs8?a0 z&u0BHDRt3ZxpMLu(K%dYC0e2@r~0jA2tKgyoWEn1skYk&Hz|fD!)+;UvGI?!vR0qE t|Njtc%$7$w$&#ldo`o76leqkdo9D#!tN;C1_5t0*;OXk;vd$@?2>=S)OBetE literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!2%?2P273}NELayIEGX(zMXuK^RNRC%l0L@ z4?X<;#vIp5{lxJ^{LD%DbP0l+XkKe1%9e diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-bold(ru).png b/apps/common/main/resources/img/toolbar/1.75x/btn-bold(ru).png index 52d17ac727790cfaec61dcf611676a93bffd4c35..c2ced39c2988f8b050948340f67285f2701c8bdd 100644 GIT binary patch literal 484 zcmVkht&+z^sdLoex68)=tB0tp?$P z>tT&G?4F z5`aLpi!sLUgwSb(@gG9?rv?+l4uDev^8rAUOA_)cjDHcr9~(_#$geQG0MP6bLw6LpG)??)9e@04C%`sq3-clr!UR{GgGD0ceHi1HZci&7UM z`c1`%vKaqZlotS&TwK=&pb{V#TD5A` aFZBtw>q8UJnayAT0000bCaUbijk+ z4cGyzT4RgK30s}37NuD zcA|3OI;qc%7Y=aII`x_HQY$q0FiqewY?maqUA}Jy`!h&s>s{#R(p>vysg;k|UFc}g zT+LD|AKi@`Iqd4H6SbRK{H?oDBS&4`0gfWEM9a>GVBg~PEwM!9TX2!_o7iTXZT>pH X2a$W0fG&tzgx7xG~F--2JG1m19*(XgoBBRFF)5Hn%bPH4-g0! zTp_C3oT>MgI^@^L0LlHS0(%1spl z>HRWVmoIJ_MET;Teb$^QQ>Rv00000NkvXXu0mjffdr4x literal 303 zcmV+~0nq-5P)WhR*cf2B4;u&EBDiFLTLhN`aNJya#yftK?l^9)8B=2I z-E;D3jsCK$1qZyWXSS(d#N~II*V#_4&C1GR=>tLkrf2%IjgkNW002ovPDHLkV1ma{ Bfk6NO diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-border-all.png b/apps/common/main/resources/img/toolbar/1.75x/btn-border-all.png index 9d656b32e5a33b026daa8fbad816fe1416172f92..5977025f8cdbac3d80f6406a5c05bce81a8cb3ff 100644 GIT binary patch delta 104 zcmb<#WmN18@N?(olHy`uVBq!ia0vp^Za}Qe#0(@uDyRILsHkeM<>}%WQo)!kA=6+e z!qULAF4SQIlg^O?3JgjT77`Lt4M!A2rRvtn%P=s=R!J51ikt`m>SpkC^>bP0l+XkK Drui7; delta 98 zcmZo=tXJ#|@N?(olHy`uVBq!ia0vp^Hb5-L#0(PoHucU#MO8}`PZ!6K3dZCG)(JeU xObTnaW?fyys$j>#l*uZv#I*jxP5*2LhWCbohZZbuS_IU`;OXk;vd$@?2>@%=8ngfa diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-border-bottom.png b/apps/common/main/resources/img/toolbar/1.75x/btn-border-bottom.png index eefee51b7036454b7da8ca4cde26ffc38e607ff1..59b851d5ea0b9e66f887508aab2e72faea69b2c7 100644 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!VDyDTPDTnJ(b~ diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-border-diagdown.png b/apps/common/main/resources/img/toolbar/1.75x/btn-border-diagdown.png index f0aab415db0ee121e0fb7fcc774ce68cb5167d27..8d07c3746658ae965951033a111e4a677e25c14e 100644 GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!VDyDTPDTgw$5{2vA! z92_8A?kKqhKowjiL4LsuD-F_s$l(6{$5)oJ14ZjST^vIy7?UI(HU!R;WLu!Lj-l3R<49Si!udFn%WRNe;U{DY^U?6ZWdU{*_9K}c%(IvunH*s}%UCG&sNq?I1#h84vBR7;iv`au6tor3y?p#4 fe$`=)^RF4Mv8%Pt>h*pCbP9u~tDnm{r-UW|=2TjK literal 217 zcmV;~04D#5P)Nklw6W^ptqH8o$LC-vNvD6P7?W+pqTl?X08! TwgYMf00000NkvXXu0mjfCO==2 diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-border-diagup.png b/apps/common/main/resources/img/toolbar/1.75x/btn-border-diagup.png index b6c3faf301ac75331ff32e324b96b22dcdac5910..d9e50555e32f6a21c4727e2f9d483e7b90cb0e3b 100644 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!3-qjPWHqDDa8Pv5LY1W?Ck97>gwX+@*f6( zTn7gSAkWFkX@~m~YoH?Tk|4iehBSkfKy=^W{>m-~)J!dG??7+iv z&^m(g+kg2t66FP*MiEO_t(1E|Z|BS0-+xu(WKVx6i(5VYmxz@1=lEn*Uon%g3lW~( zuDznBVV9BulU;kKZi%=O5tyv1D`pyY1yd>@FgWZ|V&VO4zW3V}8|^9Yzr*jbpLxc& T4TUj4hcI}$`njxgN@xNA0Qh1o literal 218 zcmV<0044v4P)L^lqBL7CPP5hG zY1&wn&(?|a*(&i=Z4k-XvRKX*#nZK3gtJ(Tvrzns_SxqA3xtjscK!uIN2mMqF1YKY U8@2O&oB#j-07*qoM6N<$f=C=>Y5)KL diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-border-inside.png b/apps/common/main/resources/img/toolbar/1.75x/btn-border-inside.png index 8d9720aefb07eda28dbe44aed7fc537fdb26c010..bac1fd1197e1d6bde87db18663c06aa52a8640af 100644 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!VDyDTPDT*9$oKYiaSW+oOkSWVz`)3A&>6pwiLv-W){0y{V~!0Co`0Tg z5HMh0m!@zgu!)(KrVrZ2lAbLLAAmm4F)yXl;Bo6XO@ Q0vgNU>FVdQ&MBb@00TTXv;Y7A literal 156 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!VDyvwk6a6DgFST5LY1W?Ck8~;_@F1Vw4Vv z0)<#gg8YIR(*CENuz4X4UIEGX(CQF=a5agKQz|wM>hebz$$&*uf6`xqj-GIy) wc`LpMTsXUgg*8A^Tti~nKQ)>A&XNoa9F;8W-#cd;0?lCXboFyt=akR{0D^ri)&Kwi diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-border-insidehor.png b/apps/common/main/resources/img/toolbar/1.75x/btn-border-insidehor.png index 0eb0382a8ae12d3157e147fb1baf40761aac2fc8..cec8b5985001be4f4c875a4fa85c26737d1a7e02 100644 GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!2%?k<+eNnQof!pjv*C{Z?7HXWKiI6ODta< zd8eLv_JSV^Ij(#^6fJIVmEz{|ReIg|eFe2fC-2-3Hg{u_OtCt3Cg6Nw@=hD0J(4LC h9G|uG)F&ua-D29HJSl7QBo~k^44$rjF6*2UngF{cE`k66 literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!2%?2P273}NV$5tIEGX(zP);qmqCGpHL&V( z)QkPhYaHs6VmxM~TU5>}IKXp2_UzX)Ew4{T?)kmGOJmuOez{k=T`FZhhDXj=X zAj^ycDj`Q0SY!^UY;scLS<9#K?7-CnXB$^9Y`0wetY?<9g>8Qh1H)xIo{dRHq1ixF O7(8A5T-G@yGywpAc_ID) delta 110 zcmbQnIGItgGr-TCmrII^fq{Y7)59eQNZSCh91Am$Y}%GkGf`2`Mc>oKF{FYqS>jxS zAjb>`mX^~zEIJBIo}9v~_{37~24v32Tk$2~vhAwb1vUJs3=D018Sbb5yHN%-g2B_( K&t;ucLK6VGDj%Z& diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-border-left.png b/apps/common/main/resources/img/toolbar/1.75x/btn-border-left.png index a5f4c364f08c95232c76b6e1ca62681d8139e56d..52829ff1758f8ccac17ae43ad059234de8e53d67 100644 GIT binary patch delta 109 zcmbQnIGItgGr-TCmrII^fq{Y7)59eQNV@^CG7B@1ylt5nH&IdFSj>C zL{7d1N^E=u48hF{Pcs~J2|LW9Dv))+t!I|8#i2@*Iqqf*3^OnAKPnZ{I0iIjy7 zL{6>(kHtkZBNs4u&f;uYc!{Ni+0f&8!|P*T%s;Q#ugEZcKf5Ud!|mIQvJPKnN&yXF N@O1TaS?83{1OR!%A~FB~ diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-border-no.png b/apps/common/main/resources/img/toolbar/1.75x/btn-border-no.png index 0866c7bfcd24f15bbc495d838090d989e6c2611e..821535b20312b1e43fa6d0c71958994384992451 100644 GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe#0(@uDyRGdQk(%kA+A8$+1dI3|NnCyCq)4{ z%q2m7!3=3>xeR9}0lAu9W;Kspr0<*K!<_y@8hfVL_ejS%B#Io9XM3<# ZK6~fc)tr{~+kxgWc)I$ztaD0e0sxtnDC+gTe~DWM4fB}_4C literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!2%?2P273}NcnrZIEGX(zMXoKmqCH!zzyE? z#Q(enObYipGkN`kq~*I94oJ=lSHJglQb=qnF#7-i diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-border-right.png b/apps/common/main/resources/img/toolbar/1.75x/btn-border-right.png index f245eea27a893651819b3db7791cbbeefac72f49..a848a448a496a438b77a877a11ea6ecab073d319 100644 GIT binary patch delta 106 zcmeBU>}OQ$4DfU3<&xrJU|`_&^l%9R(r!Sk%)$&LZ(AnDO;pr#(Drn345?sDmU!48 z$Twqw5?jH8hJ~{@omrN(3Hlv4+bF#F8Bbq<9PjgqybM+8e3q+!+*Jf>XYh3Ob6Mw< G&;$T<@gAoD delta 105 zcmeBY>|<2y4DfU3<&xrJU|`_&^l%9R(l$UW$HELGo3zopr E08=C$*#H0l diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-border-top.png b/apps/common/main/resources/img/toolbar/1.75x/btn-border-top.png index 424671cd893fd8f9973d5078c54be3ee0fc088e8..f134568fe802bb27a81a3d0fc8c38fa5c8807933 100644 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!3HEX#cOhbRJf;$V@L(#+iQ)iu7*4g7vEhw zbLp@7i~9@T9e*sNC2$}#lHtJevuD=cuPXVUaP&s?{F?WBXIy@NF^H!t(8t4&@z$E`z75pUXO@geCxMNip~U diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-clearstyle.png b/apps/common/main/resources/img/toolbar/1.75x/btn-clearstyle.png index 38f7d79cb88fc54d934dc6a1dc79509e016cd38a..d42ee39f11300d7acbbff7c4f0bac2832b972ce3 100644 GIT binary patch literal 388 zcmV-~0ek+5P)6k9*H*3TCM0;tahMFB^S z9QnUF&l;5)Pt!;h&Wt1@N2*8=QxAMz#Lja!CD7;rUTB;LDBj)P{iI1kH|1W16BENA zrJwVg(#?6L^l@G(T^wD-#PW^()Y3a#X|#M}P7S@ItC)A*iRo9i=1;MK;^=71s?akw zPyoO?F8n0j>fDC*+eOGWYO3{DRa0~{F!G;&XJ($wXOFkIfsFXu9@=8k)X*> z?UZK@1Jmv#E>j+y5z2!zNV#z|jZyBLR6&tti&7qeh0T^NN_hkpaD3cxGZVamH%yWdOij&EBpRdKdYSS@G!gjI6dDJ4!9<%h%l ir-D-v96562ujd;~m}?`%Oe*sL0000GTlmW7VB!n&YCPW&jjlU$wFPK5VK)~Sr{rC3`?mIXrC@6J`T>whW_jGX# zsbGA2!IkNdfe72f@P760_PUY0-yTcn6x`BJTmLOz;;q-^oN%e>rF+jjKfCkirr5nd z3p~%qp7Tof&0Le&dsV7*)kfKcoVNv|&Tw~i&k&ztwlnR^tfR9ouH)#IYu>;ve`wLq z(uAW-e7aFl`?9*lrdgCk?Um@fqvN({Pu%9Cp5ERf)3%jdEIM*aX^X3Ox1iYGD~J8Q gUgO)$|N1^(p%mNUrR9pVflg)cboFyt=akR{09|Q-H~;_u diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-close.png b/apps/common/main/resources/img/toolbar/1.75x/btn-close.png index 753322ed6efb54cf1ff20787422d45b69cdf7d1f..76fde57911988b04720afae032f0a8873e77e26f 100644 GIT binary patch literal 275 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!3HEX#cOhb)GbdJ$B+ufw>KD=LiJbV`ud{yU#-w%ebdRebNzp5{&GVwOLsseP8u zocb@kVBfP-M>3l>FWmAYY1V@rjX!!a$K4-V*l`{I7-+%g{;|-atN(CdjZEL8#|0wN z?Tdd{$Q(T`DdP&lInI*TADT@mlv*06zl?9umDfkFWKMZD-$8ciPxTA#5A9Q=Q%@gn z)UZQ0MjmVo>*Ei#K8JsP`)+8>b%?S2B-{Jd-XO>RV%AY%eD!$h?Xy5%GI+ZBxvXcA0O!d`i%&@ArPl=queiDRb7utRp_ewmggIgCn*ZQ6|TWOb$$2z_^XamSG!{t%caM4Ucz5 z9O|1L5uJBKFEMv#;_lAU4a>DR@O>*`G-JIW!Tqg7ciLi0u?5*1WzKGt;RTTlz46{a o`J>q!0~QRXTx2GkCiCxvXgwv^;_@F1oSmJ& zHW&*6McGP%{DK+o{|CYyvsYdMie!4aIEGX(CQCeY@Ze-(NnkpoC-9&rU~z++@rDB# zQ7agCx-mxba-Xn#ai?gRr)*D>f@qr*X|)-TA%qM|5D0?#6v^zpBI8~P`&{%Q(^mrk(pUS! z;8yef!L8*LHuk{>y-=z4e5+JPzI9`}blun?{pG=#o_wEF+w=WD)k&&Qhia)p_d6wV lwf9h+2DduR{EGy^(j3W4kgwv^;_@F1oSmJ& zHW&*6McGP%{DK+o{|CYyvsYdMiiCT*IEGZ*dV9%`?|=b^b71nE-|;((?;P}Qwff+; zq()J2jiqb2f$sH!Gs22K`%Z}@FPmz7<~B$3Oy}}Hp8G@uIWKPIzVrLKg7TuBJSQV2 inr)tW_K)%AHruqROjCo@7#9PrVDNPHb6Mw<&;$T5I7lP_ literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!2%?2P273}NELayIEGX(zMXQA^MC;l^WNw= zf89T5yi(pjsq0$XtOmXF33@_mX-^I)1_!iC7CB+1#n#IvbA&O}Fzcv=M*w XNI6US-HZ)D+ZjAv{an^LB{Ts55< diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-decfont.png b/apps/common/main/resources/img/toolbar/1.75x/btn-decfont.png index 8a0c07d3a14cab598346e263edb428fe72b261a1..875a89717b466eedd50a01674f20b6fbf7c4bde0 100644 GIT binary patch literal 322 zcmV-I0lof-P)Teu9igs?k)EZM!6Y~jz#%ke&n zLL?H2M4z(G!fHoP0S72X%Bv191nV$UmOA{9ROf;e(J#u3)?cuY5%?*!GQoseF{>yD z(ae;>45s1J0|PV{&{GAibZLSvS!Lo?pp3tql&Uq4e4pNSj4CbU6zHMjl!Y0gvPLX}sA~z!TJ1C3~ifI796=o=GE4Q14zE z3Gf8rj?*IS*07*qoM6N<$f}Tf&r~m)} literal 290 zcmV+-0p0$IP){q+D+Ld}~#-|*fMiYBP zhK7bdDO3;yQT;3{y8`ULbqwv+K~_Xy@gL(G>=$S%(VdF0ytC7mua<(wjaSClspJ(E zb1?79$`C7Prk2oxd6kI~_NcgYdw+?jylnPvR`R(U!tm=hK6gVJz3fpz)NSs*1EZ3x z+uWT8HWkdKee&Wf6$@wTHjA@VXpfYZ^39W(?U9m+H%I2F%xn((b+R>3;+NC07*qoM6N<$g0TC7BLDyZ diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-decoffset.png b/apps/common/main/resources/img/toolbar/1.75x/btn-decoffset.png index 6cbeef0f9b9159caee8aae71e091b1be65ec8a23..bcb5fb3cdb48710c25be4ac5c70ebbce092061e7 100644 GIT binary patch literal 212 zcmV;_04x8AP)SkPr*^mQ>x;an(`{mQ{kpOs7e&#Ga;s46Zy=CY0zZ! z80;=G8FtDW>NIcD&fKQ6&b*0Chn-KRp1zcQ^nVLxM={h?&~} O0000QY^K&MK_yT^N?^=qMn`v`bYOQNm7or!4qSpupae>wgw25{89T^A!nd&8_rHM; zP*d~v2;b2{R!qfIOvO}8#q7uECLhzP)v--JhHEXYl3=<#jOiq#=~N8t@-XZe(sTe? z887`d#$1foAFDT`=-F>$c%kQN%L?ZiBfarj;njX5IL{dN^nBTp0|yn_M&W)v5{ zZ^X1poEfn*9O>e7L<|)jceenL!TMH3OslMy;XnyE#O)xzH|bEz4@Y>M^2;HMC;)J} zS}&Av`Yb2`uk<7Xi&_Afv+<$}OTaTdi(6_SJaYa#$D#c1o3AO!7i+&U2oge95C8xG M07*qoM6N<$g5H;$-v9sr literal 221 zcmV<303!d1P)A2}lQ0`ftFc>^&k5h(cofaUZ<=kgV}K1kctfu+IVxJM8dgaE@#E zNH0`e!+4%O(uXVE!<8z}YhBm`2HnFTFyeD#8tD#Ks+{SiF^zPG=YJ91U6;NqqA)^7~AfW0?AvPR+OEu>-l58 XB5TrNsq!Z900000NkvXXu0mjftR-98 diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-edit.png b/apps/common/main/resources/img/toolbar/1.75x/btn-edit.png index 270027d34762c3e6e2ff3cb8a15d67aa224b031b..d454d37e9e87d353f5b2ccd55190ec02ef3af805 100644 GIT binary patch literal 230 zcmV4DW zagr2a&<-U&=obppS7F72n$nb}e31fFP=FH33np5E5{iq7m!O2=V3ZP+P&SNKf)dJt gQA2$uB13k4m?9%NwUH||907*qoM6N<$f)dMFfB*mh literal 226 zcmV<803H8{P)&h zWi-psC(F?9eZYz!ygPV(yA^F)@pL_w$%2M5(Z@1dyQ20%hu99FJ37WH1|4SM=r}uQ zf<0-9RVcKPEC4i`{q$F%+11C%CVMk0!m}b5SP`BTxxmhFjQxXStcRoQ1V`Bc$5{u* c*(|%eFT=O?6tJsi^#A|>07*qoM6N<$f?kPXqW}N^ diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-firstitem.png b/apps/common/main/resources/img/toolbar/1.75x/btn-firstitem.png index adf3e006eec07d7f59b37bb6265da3f494046116..0fd640a4ea1cc5ff4f8911d723eb1a55cfbedb09 100644 GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!2%?k<+eOyU|?kOba4!+V0?Qekhj@Dq%~2+ zhe>FHgInac4i*^&MwtXgb`J-jNJGnJzH5xlTff{((|`T{R!fbiKPS`t^Ur@jXZi9x zQ^o3Yc)|}Zr4k>X8o{j%o!N&TG)XZ?NN{Q%{jsFLKqx4QC1OVOG(O{&X2&+h_Z||0 z-Fb}xh8-6ZC!0Q#Q+q4sbWp*iJ2q^_SFaa9d}78Di?$ny0W!`y21TlW%}-SJ#CY=i zsvBOnk(5dJ^!0XP>}0-_LSLx~cN?4o3k@%OuaZef3%F!ad8?QC47Z8JkC(0U#oZ3Q z5qCKV#K(Npr!oZ^UiMt-pmS!E0$*CBfbe1mn;s@syZPt8f0i?8R~M^Xrws?RBXoc^?tvSMlE{j0en&_4%L5F<&|=~#Iqzva z#=vX%i17|lk?=}ph0e|adT_A_$Qr-Xn002ovPDHLkV1i_QU}gXS diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-flip-hor.png b/apps/common/main/resources/img/toolbar/1.75x/btn-flip-hor.png index f2ec28c1a338a9dad69da6c3e8e31a663af74921..0f12ab0b2e5529977bb7c1618aa934041797e503 100644 GIT binary patch literal 475 zcmV<10VMv3P)KHog09o~5ZJG?WeYANQO9Yd=ica`c=f?|+og9~UCAk(I5KQURmLi>ryS%qC( zOu7xbxR?wZc5$bPubp%kcbbs8%HT4@@J0M{PInn%_#(zREvB8tB-#uve=%t`&c(&B zP1&TnxR~Ci(Z{r2j4eA`q`6FDEIQ~`IbB`K7^Anr6ROk=Fk*uab~vlyeY zDQ{!SG={{U@iw>tQVe~1M%&C?<}vX$bC*R-ybbLhp&0u19%n|ou&{4B(vvgU;&{4B#57kF{Yq<%BWnVnEtwXXjFxh{E_SxrO%r75228#Du R|62e6002ovPDHLkV1lXd;8Fkp literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!3HD?X4Luvse7I-jv*C{Z!a>Y9di(Az4+vn z)21m3zgN9e(e8Yg!=>iBaDBVR|KAA=`FA###9rU)a=h@(_umQ0J%4|%72olz2=Pj@@sz1g*H z^SU#;PVZWm9%{MCNMp91279TaWQilioS(em^O$?%SJZBLcfRpY-u2SE_3yZ|Gmd!Z Tgj;3+eahhJ>gTe~DWM4f958jS diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-flip-vert.png b/apps/common/main/resources/img/toolbar/1.75x/btn-flip-vert.png index a93be70a5473d2a0caeb3e1a0e2460e968f37de9..b85f16e05a6e653a7c2d728cb1d4146b2b44ed62 100644 GIT binary patch literal 398 zcmV;90df9`P)Yk}Hz;Tdjb)z8lP#-TL zkhTSv5GY~C*vha4(zn23*a9UkJ=t;zK>?Pa06S2E9Vo#Plwb!+ummO8ff6i133i|a zKZf?y8}k_YQX^%D--Huv!{r?(*oMomI>9zv{>BNm;qu`|unm__b%JfUe4P<&!}WU{ hU>Tl&S}CQ^_XBevsaE864OIXD002ovPDHLkV1gJRU9JEC diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-fontcolor.png b/apps/common/main/resources/img/toolbar/1.75x/btn-fontcolor.png index a89329bd732d7ba769c80c04b25963ad5dab5847..4ec007a39aa2908f89193e9cd60697b2992f3b53 100644 GIT binary patch literal 363 zcmV-x0hIoUP)#DL3BLqNpaa}NN}vQva0$PJ`G+9BlYoMEuO4n7#-rV* zF;P=fQ&ZEwq8CW8y1)Z4yAUT?cr=GeSYURcn1kmWI%Aj&j|`hj?0F)JDfXr)JtiU~ zm|RF^xe`f`*%W5Rl?VYAmy6@PEz7B+IOJ_vY8T?f(>kF+1_QjS3kIlNig|=iehu)h zF6f|j;af?H%(}M0tt17rvTgXm_aclEVmwf|C?UQ$!TVF+HgNbe3h!RyhOXwygah^( z7hTnrc{~9giBKnavE_ei2RmLIT>C=X^|AdN=s%s@0S zFz^k;6tb0zglrcsp_qjWtXyGHQDKuTL!mHnDXd|RNz^2~Vn%|AOH$dhlgiE@T;btR z(a()Z?nFc(%VG%Dornk-OaFUSrkB&*!iwqTbSL%V-+7kW7clsDo>4mk7P6@DW5TVk z&B##jb8ek&jzx4gwM)1_chkcamhIqo^TNQ`4t}>UJFH>epZ}KjfMLZ47fW-%E?&TX zf5T4D)@FDBA6z(~vCT1s>q)tq8i|DKNx9nEEZd{O2iKbxh7Hq+>$b0RU|`_K@efrF VoKE$btik{Q002ovPDHLkV1leQ!ANZFy)f3}o5Pro&;IqZJrby*>`9myOe-s3q%45>)y{-ZVWbKRuILPEIPT7% zh7<6NhU52)h7&UI6(?fgE6y#I@-q+tC>d$~MnvD4YJKRx}iM&XiR- zQ?|I!O2fIEdE)!F$SSO`sai$_`wM$GYYqhi0wc6L}T74j55u6}8a#r8oN1c8SICFLCQiC;VJ P00000NkvXXu0mjfJ*-@} diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-ic-doclang.png b/apps/common/main/resources/img/toolbar/1.75x/btn-ic-doclang.png index 3e18820bcc2706cbfe7069078ab935914800db5b..ca2453a9393208c074d2d418febdc068d745efb8 100644 GIT binary patch literal 841 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!3-qjPWHqDsTBb}A+A8$!NI}R)z#VA8A!Uo zfSa4!e;fd!1g_r6$q7xNhldByOrQdwN+5|W3lxE<2Py!vfi?nVfodQCVlrGkP!Pxl zssVxnvB$iDZnY>0@(X4VNSJ^B{r~gvFuHz!zJWsmm{d@h(69i63knJh`WN)yk6-V< z0f+(u=I49tkq=~GV3P23aSW+od^_cM*A$%Cz_U?4m~yZt6Hh}vlC|L%6|K_ zv@3LPGbk*%JUQeX_xFxq&9ALmr?gf^nN0kXyL8`%q`6zd8y0`iS&*(hXJbG6%O#Bt zlYbl#c)!1=wf9oJYy${BVY8VV$?4Ie!JpCj##c`t3B(WJAd8gji4q)?T^SqYOciPv0dzQzHj@pbjQ{HG4 zFWnRDm+QkKX&EBs^>x7<)(aPM3d-$M->^Tu$7pz#t=~Ubts+d$DPzx6vsAxzW{oN9 zeP?R@+R!#T*U*P!^WPhD3~xwWxMuMBw$GdT`Gx+sVltm*3U_GbF5Kd8x8~<{&HFcl zpFMS)&%pF{!5;~qnb*^6ne67ywp-p~$EaCZm)ADS=od@MC1J70YIzGjCMPO2J-e*> z=yJ{}rddB#g)ZmZVk=%V+pp@Z&MBG9jnmC%Jig3pf5a~J#j<4ahsNqvOFx;Pnqq0{ zzwG<6e--&zSz#8*DY6Nb+yy!|rebDN@%HvNof2lR*ckA==W=iHl&BB;&DCXsH4jJ2 zgat(xuD$oj=afs~U(+yA?bJHHwI{yq*2ydA^nF=)F6Q{Qg3blLEgg#u fK75?~=aal^ipCwAr?Y1P(;0)OtDnm{r-UW|QxKNF literal 680 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!3-qb-Fj<*RBwP!h%1nGadB~Wb_S9V;Nju% z9|J(7oSdA1Dj@(v$$vLDH&<6zph}=Jh^&Ky1CR@31GNCz5J4at$N;K@kU$1d1V{q4 z3$|_M1Ug8+B*-tA!C}Jr_x}|j>Eakt!I-2V-^1i!`Lr?GnuGOXVg8NtvfCZ1{J-trQ|}o5=yV0U<)mj< z7aN*#EVk%eY;aUGGHyy}{pP-J5S`CS*@|(7|waTQRGGdq@DQf?wILiPiU;Q?B%G47O+~loy-O zllbI(-|@Lgm&2}o6fU?@V57~Yxkl%dxC3v&l1~2zUE1@{oP3yfD?V{{;TI8K4uhRW zZ}T^t4d6aH!`hO|XV2y}=3NR*Gn9-!9^5oRB=X^tADy<+{)X(q`!=LMUixH%#d-b> zkB+arxxV~t-QUbJv(w(&?vmIn@}^c~xnVo+(dXwrh5Hx&F~7YyHhbFgR;Qy_~W3_5AeEy`GIXiy8m!`1|LW=bvi%>r&}Q xHqW_#YE@0O274p7$^Asebpkc*sXs3NVNNoU4Lu_|K^z#v44$rjF6*2UngHBWNTUD% diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-ic-docspell(ru).png b/apps/common/main/resources/img/toolbar/1.75x/btn-ic-docspell(ru).png index 25854800f95eadef4a6205783291ecfa34908308..551fc3a75132ba0d762849f8d8a90d46bca77e0d 100644 GIT binary patch literal 453 zcmV;$0XqJPP)0YWSSxSnGX|ZWSSv9H%w;8NM>dhCo@bU zdopol3}^ZoO6qVo z%ZzI@9BS>YpQEhJ3^hIe2_@Yo6SpbY)_LnqEhTLVw0JzVl*lzpC~HLX78DJNX^K$- zu-3)4_Hr2c548qGPpc1axjd#oO#oKAh=`sPJq{?&EB0&CEKb1jhT?%uE+S$(#d$T( zE3Z0~iPHfdgNK(L%9E+AzjtYSaH;TPmo~eIh?*PBslY@qHO*vpYTvJU29f#rmJL+V|p~sAlZJ>?@e+0IHIvRZ8j#FS2 zm7E=?z!XXbxOb10G&-*NFC8@-jvR8sHQ1`X>HQJ=N4SQly7B%Co2Txw-}X}RvfuV% ztj_IsHFjpcSEY9m)=QI(61oWMneBzR*6S$EhIIu!I(m+5Hf(_xfLwI$yh`Vl?R&*| zJ%yfRp%=j0b;Bme*a07*qoM6N<$f~rxgtpET3 diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-ic-docspell.png b/apps/common/main/resources/img/toolbar/1.75x/btn-ic-docspell.png index 2b63dd2de3c291150990d34ce9822a57b8434a28..c35f91c02c0a68d12643f45cadf8f3a1d92be7fd 100644 GIT binary patch literal 427 zcmV;c0aX5pP)mnBML0s};*6FHds*Im zJ|AG$u3i6Ib`ahd5clG(0<03B`kXlMAt3JQsQ@ba)Mrub_kAB=?oKQ5fOxG^pGA43 z1ek|Y^gu)iKBIW}6lUIMVEDZM%NN7gP#G?{>ipri$}CEmfr-m}t%phURREK&nVwk) zlWN1t7pCkYgOF9lj*{S{mi_1(ZF7-&^b4M0z`|`ZBYYHhu#UG zreljb$x*zn4FQkz)hKp|)3^dSJk3YI zrAwFoT7&7G(jQ=plsW=B?z3mn&~X*Os1e|}&l2jLS|53^kHz>*Ow1Bs$JOh>;X3{r zCT0o6U+%$!*=J{pzf6H&wE7Vo&Rh--nk&G^R{v|o@tj@b92|9ajlzo4U=@|u6{o=z zO2KjsX8S6QPTT(HwVJ`ph7)b>a#=v_77s@6kJulU%L24pOvC#VHcx#UUwf(8#@Akq z)usEY#xBhFs>Ip$tuCFDCL1NY*|uEhnC*p_&gmpgz?y;@4IL*o0bAe&AgwOFQ|X=^o-RKH00G*X3(>h<=1Two002ovPDHLkV1mPWu&V$7 diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-ic-options.png b/apps/common/main/resources/img/toolbar/1.75x/btn-ic-options.png index d5f9e38af44f606bb329a32dfa45ac46edf82be7..293f5818ef934f02177bd4b39cbdf40b4cf9249b 100644 GIT binary patch delta 89 zcmXRZSL_V%bLZuf;$mQ6;Pv!y2?Ek?K&;Hf3?xG;r~I3!sA?$V>Eakt!I&)Z$iYN} og-JpptkID1JyHly85}Sb4q9e0A5TM3jhEB delta 86 zcmXRfQS1!xbLZuf;$mQ6;Pv!y2?EkKKrF|^3=;V^_0B{^RXs^h7srqa#$<^S2NMwv k8HpKTj0d{{KWnlul-BZns$SY~2&kCB)78&qol`;+05)_M8UO$Q diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-ic-review.png b/apps/common/main/resources/img/toolbar/1.75x/btn-ic-review.png index 5c39868204f504d59ba655d220cd1c2468edbdfa..a86b9c9d4ba0ed5b85ad357697baedeaa8b94205 100644 GIT binary patch literal 413 zcmV;O0b>4%P)2!)%UJyd&)9xTJ zaMV$|E10t82v%B!#=0u50%aY#d><=U*|_h(d=%!bht$@HDZfbo(1|`eDPzhn5&%&6 zpuE|cPJ*@fU^z}*XDBq@X<1GUrjuZL1->phP7Q`a;}zf~%h|?s5=7APgmZ%TeZTbP7$E>hMrtRi zP}0ndR~pel<13}+tNoJ|fWm?CmE!(tYg8&Vrd{#=LNJmfW7-ubW};AsbU;4LL?MTC zKrYNo34J4JRy>%6(o@o`9KW3h=94jP<@UDyi|y@E|F^yY3|V7oTKJhz00000NkvXX Hu0mjfwY;;R literal 310 zcmV-60m=S}P)!bW5DP8vjcSKo~f>Z9{{sh$rTvJ7DFcp=c?Cg0myDTMUT+geYsLh@`x{*h zX0qNmbUj7UP_Q0uZ>>gsv}I!HsW9rJZ4R6Yxu?Z8hRqoV7(ptd-W(IQIq>GFHCHTT z6?=|a!K%iE*tl^9tAoY30&E;Ca4Bpu>M&;}>yw?FiaN|q@cT|KHs-;?!uo)%I;#f& zfM2oYXZ4Kbv8P~L0iLlVXtizE;y;6p`q(qSdFW}A5oL1KzA8Ar@9rhp{jDZ*6DW5yP5GcB&f+qA{iXd86_MqS4|!OSKoSD0pk zdW9hH_RSGASMu|a5F|ra43btY~9pp6`wI%H+5Qt4kJt^Adn~93|ghV zT>jf=mG*L7y;L#5boElz1g)3hkC?K!ImXn*wHPxqC4v%R+V@{v<86c!$g9hs9C>l4 gIC=3eSF`I*9~5^5;UT6bD*ylh07*qoM6N<$f|TfVZU6uP delta 274 zcmV+t0qy?d0^0&1iBL{Q4GJ0x0000DNk~Le0000y0000U2m=5B07piReUTwkf6_@r zK~#9!?UYdp10f7VH^wBo>iw_VP({%-lr9ts?flFHd4vS@`0Jj)&4TF^{VbeeSB-#1 zJ>;t~a;tYRffF)eMvrX50iug?8gN4PjM?mbst2=kR!?T<;VV4+6L1-`Z{R#;-@pW+ ze+;gkRu2NoS&~MnVq9Jh=d(#9HC(P zl$z7V^eOeICdNmRoEFAMk(@S$SNNZW6%6B@u!51@VCUGwfji^noS$=G&-gg9vxc6g zgEMEfb(3uJ&OM`6L2}(Qj|I(>l-skO%fhT8q4A>(%-5JmBoY~x8~o8SkmXQJIsgCw M07*qoM6N<$f^pJy7ytkO literal 237 zcmVCL13s}WH4wVu2i{@xnpW-PYe>lY5lX}h<$CZw#B}- zS9@YUaQ*D;iWxK570Yp2wDWji$5(0@!viyJ>XLPsWcrg^opqQNZuOYhL7jEwS==Xf n43w@+{_8yAUwu;?1i@Y2pvUXuNz$0M00000NkvXXu0mjfmRn^| diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-incfont.png b/apps/common/main/resources/img/toolbar/1.75x/btn-incfont.png index af393ac925f967fb70e90470bb4d18649f868aa6..1fd8376cdc6d9d497e2f41837af88165308c4d4e 100644 GIT binary patch literal 389 zcmV;00eb$4P)#DL3BLm<{yHPA)v7K=}R7NAjYHJ zr!i4gRaI5hxulb>+yx!{hF-VKu~2jX|bY~JKR?BkvhHa=#+%OA7Sx(K_2U$hW|j}BHt z>_Q6f`Rcxe33y&v-B);z8kZZ*l?ekJH7**}m3ck^H^@&uyz7?%mt9C^Z_ik|-Zq$F jPgyFuc&n6Lm_Hw5 zE?xS!64&pg-z&2qb0>BNG~N(>s<3F#L{f!Cg$|qFx|h4r>lG(ia$mAIGPyHZzxXjk z$z9-ukw}-mg{iLI=R>>1KHv8&pY+{kX;g55*z|zz zDOcS+@5CHkol(ps$a?Pem8_t1uT63;@ALaw@?+{to)yJY1edy9KG|lHrQ|h7<&0w1 zEiLEmnii8+TCDc{#HP4JP1D@^+Rt1jRi_V^nHg%@dGGzG75%P!$qwi~22WQ%mvv4F FO#rfhPeT9z literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!2%?2P273}NR@fIIEGX(zMXcE^MC>mgX}>; znS+8%W*7d7pU}{)^O9?w)FKsKysv*ob%!SF!Sy%$o_}tWzQZQ-xQ}&H_wMO#5v4nI z^7fZL-Bpm>{Mv9y=f2e8}4G>fh+(Iyec{h!1P6c;AI;bKCm)Hl)n zdj2m^T(|)qm#!6>bCj#l!xg0kvI|$h=wIVLvB9wfz6nqyJAmMhg*bAXK zPC^%Vm>z(c3Ap&fjL%t8cn!D{-_eZl8gMthYo%}m-%j-Zw2fIq|)3TIO&u4evALg_z-ehTIVUhgRu*nb?JI*b+p$KTN?l qw{3K-RR!OC9$jlyRaI5h2lWSv@+7PTMxjvv0000Lu%jCH7zs=$6Yi6Fl z)YaAXPxW;%(%L3_7`7bsasmFlJb=SqrK@4nnOKP{FrA8(Y%#_lN$LK+`=Q_k2$ID8 zefML**@`5kn=yX7tRhn+i5uYb%8F%a3`Y8KT16pC1i%evy#OnL!V{;r zqBW136>sbdt(lGDj;&}JX)`RkgBJicAo_!|VRIb3JipL_nZeETj#g#c{o_JzY&(y= zw^seNAFch@ezYb@ibLDoh1MiV3~hH8TD7&LwE6(sTT5bf0@hkfk}UcFYpo?oL?>XM l=k)>hdEOI%b#-<5^$QQZ*=jt>eS!c0002ovPDHLkV1o7_ns5LB diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-italic.png b/apps/common/main/resources/img/toolbar/1.75x/btn-italic.png index 3967d656a6dd9646c6ca020fc31ece807b70e41d..52b2fb98eced434c4ad4cd90bc48c01243b3af52 100644 GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!2%?k<+eNnQb#>q978G?-ySfW+U&s4@^E4U zi;6;Hx%Hm%*hdN=&I5(Q2^JBY9u7=G|5mT_Ixdp=ZSt&TnX~GTNhJ3ex~YF~d|p`+ z+B0$0oavjijvZPxXSIG;;7*O_$!|m+F9^<(+M{{wz_L5%W8}IFKL@PabIR8+?#`6i z-!_K#%#B-lf8U#~i<`C0@BR(zvCe;b>hk6!o0(HToAGvSG}JIHvlChTIAC2&tmtE} z&~jK7=ob$!t2_Oxfv=&ex9$6B@Z_1>+8Gm zLf_|HtDgb9q-gZwO2Vz>F|QaNwQ_jNFAQ(Otwk#d!%ejHAr8zA!mWiz#jvY#c!?Rq zi)Ieja12*DhYuexe2BIsU3lSi;f2eT-x!{RTg!VqF}w@67R?_RZX)ep|E0dZzO(xP XH?C)wDM{>s00000NkvXXu0mjf@B3R+ diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-lastitem.png b/apps/common/main/resources/img/toolbar/1.75x/btn-lastitem.png index cab5157d694ad20d5001c3d7812dbccc9d6dfd0a..c5349f980586218cabe37ede049ffd9c8078b73f 100644 GIT binary patch literal 304 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!2%?k<+eNnQr|sY978G?-(CsiJ**(W_P}dJ zi`NVmp}f;_uNR2DYVcao?6rbLC4@<6!iV>bDY?dMQ|wTLQ#;n!#w5Z1E9Qo44|6H2 z!9KRs1RLH{M+7*Qlm)1^J1G?kU`X)q&qA<$8?Y7W&uInJn>~2>Q;YD_wfURfWgz%&t;ucLK6V?nRm$m literal 241 zcmVL&LwX3eF$Uj#_QJ+(5mEhLO!(A&4cdaBmwvzDB r%D_`A0Z*-N*lKmdMynf+#bWBdW>tWwe`Rb`00000NkvXXu0mjfJBezZ diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-linespace.png b/apps/common/main/resources/img/toolbar/1.75x/btn-linespace.png index f139ae59c010f00649234e4797ea17b0123c0616..12008880cf62f95b45072acd44367180f3e72b18 100644 GIT binary patch literal 276 zcmV+v0qg#WP)6 z(7g%~*{f|ol;oOBwq0U88p-?3`7vtBDi0XXX?n&uPSfQl6PUonY3h&taSgL(7b4wb zTxGCkt476CuC2cikPo`aQwY}7f~~^w~IAAYId}z&$ diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-menu-about.png b/apps/common/main/resources/img/toolbar/1.75x/btn-menu-about.png index 37ce7cc676fc07bc3d13c1a5d90cfc62ced9ffeb..77cb5fbd17d033666bbfeef059055f6ec3aeac2b 100644 GIT binary patch literal 672 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!3-qjPWHqDsg?kr5LY1W;Nalu>gw$53?yBU zfSa3}hlj_1ya1>is0(NU5I8wG0S!S`4&(wA07c*oh(&O_fKotR8QI(}KzHbr1o;Is z2;|Sd|Nj5^_3;V_R(*nkLBfLi1cL?n4Gs4T3Kp!7H`uVDK%+is6$1m~d`}n0kcwMx zr`|1URuE|2xWG&(P}ys7#)TUyx%dA6oi%&Mi9;&<7xv!Tyt(f1`9#(KALCr)ryTX1 zRQGOE0Qddpi!@HZ3OFsWBymfqpkn-Sy@hcC?_Jlas;68?o>}dvp0+4d<8axIRDHF5 zT$Y_u+f6p#$}lz0^VWaj=6zAwOKNAek92!bVR`@5!$j6EVRyj2$6_$kC4*J2ovz#~@pMJV{gb%|w6GopW; zY2is|<9fH1_wJSRRqL%vg7;@v@&8;FJ$D03ZLsooCbm1gd9D&q@{;$=XtU~PPySW& zxuV9{c(c0X_x&Gozn-)C+!mX=^T)GZYxmytUo&$PKl$uG$tpc9xBSRFkp~MRZ3IP* z?_>&O m^N?S)Nyla1^C$NAy6jT}#ouX6I`aY;#SEUVelF{r5}E+>bU7jb literal 448 zcmV;x0YCnUP)NurW6mR=Ocgs6ct**=)8WCfgIFMutw2FCB#aL3vM9Y1Q1Imq4zk6Yzb?-#(E zeyXV~VhQ$1>r|k!hzdAWI+dKgo6M^ml{!^hfjX}oIvD7vYf4k`Ni3Rg!Rh=@`8->!UXaL qA8uzZts_<8!?&612ij-+r+5X~NiEMxEo}|}0000JWpSpBn%Ry3?E-JK76(Fg7Kl23H(nO YRNGcfSz{fz7-&C(r>mdKI;Vst0LAY_4*&oF literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!2%?2P273}NM(7tIEGX(zP)V7cR+!M`M@9E zAOD3vO(|J%OVPtnZk1Bv<_U_sjv59}NjBbd{BPUl-48#u+}kSmIbX8xr}~csi|sQS zi@P-~oJHm+9IQUD!bh~{RLCI?twaV+u|NEG?iFY4Gn)RKCC&AxiTIbd{uNcn4CVuE OW$<+Mb6Mw<&;$T<`9LKA diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-menu-chat.png b/apps/common/main/resources/img/toolbar/1.75x/btn-menu-chat.png index 5dba7db156793373f62742d40d91c7c2985950f3..7564ad87c08a9b4673953c1dcaeb61aac68769bf 100644 GIT binary patch literal 335 zcmV-V0kHmwP)Pp|n3S(n5EN97%=FhZyNPIqi_N zPNodj@hp=Ak<#Y#0#U)A{oNMuUOv?e(aG+=n4U3k|!K83{D5 z|Gl{vW3XV@O)>&ldj@hBL$+npWbYXZMw7i~Xg0dQ2A-j_H*h-@sivt&HANHf zEyvEJhZbNsdM0TBCKk7$<9nZd)(>Fx*%&C(v`jYp;?aO%voTOc(_G*dq%jx3xHXs@ hQxQz*sF;d58&9m8EV^K!FiZdd002ovPDHLkV1nL|i-iCH literal 301 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!3-qb-Fj<*lv#jJh%1nGb#--darqAh9v&V* z+S%C|C;}uQf({N2KsJzsaGji-p8x)v4Ad!9666=maR2}P{|XBE1^4p{6eb8v5Gc43 z%GCsvo#N@@7*fIbb`mS!VFLk{?+R!B*XQiC)$R;mwZh_I#qpm0NBu9j9GiY}Id>_g z{yn_$(ET8_n+dw!X_su4>28?1X6Cx;JIwXmI|Xc)yFT)Ia_P?;vu^E)+AH;6F6-2O za?MI$=gY|LYg6vZxd~Lxa(v=3*?$v@TiV272i{DX6=lfSZDwq7G-wMEDZPVW7*?;*S1CidPtPu+`wE@SX?^>bP0 Hl+XkKIOcY` literal 252 zcmVz{Uc2Ja>U*{ND0r{E z*RS|CU|Ukex}>5moQ02s^U_p{G8imdBGTDso2m;~p#Xr*3+b%0p>}f0sVEB(O9`II z_j({ikm#B8=yn|YLbp@cCz@M6XC)-Glh~o5U+Do_cV4@iO%NXd0000cAy<-XDJ~i%q0QI1z?ge=90q%CW(yLu6#g$f^jNx{^kkKqaTH-22%d6~n0-|8 z(ZOJLil2KD4hjifuU7!i2DvC^4sr31KZ! zVon{CgtbTsoCYQiYnc)_HB1`T8fE8HF=<$NXWpq|bPJGksu&H2yEI1TIHeh2RF|uN qo4y+}BLADl|NL+IeBGEEgRNgjof4`H*1TW<0000L4Lsu_y6DjAOAl7y@GFu5_jv*C{Z?7;Jud_a6Kg?&1HPbw^3+TaA#Rm|*|v z%P}cR6)L}c4>g>WEtvlP_O8=(KWculm|l_VveZm`#iFmwof*)vX);myG|k zU*c0LDVUSQeAr5QmBck?aS1ctmutLxzR#Pk)h4^Zo2T9M@Q?6_jINW`3oZBk$!=>+ z`|)SJw2lcx^kwxzNxR5-E{28SXAN|Ct3Su@e)9ZApX-~+i7%SpSTb?_U~l?w;?D>4 O0)wZkpUXO@geCw>7nDZ; diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-menu-navigation.png b/apps/common/main/resources/img/toolbar/1.75x/btn-menu-navigation.png index 28bf6dbb825e418162ba7c7b003852537ac87dde..d7f7584096344ab3e1c9fadd9f7ec1c9796d36aa 100644 GIT binary patch literal 113 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe0VEiBYLqtuDW;MjzhDN2vdL#HfIKZv7srqa z#g Kb6Mw<&;$VUIU&mc literal 110 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L0VEhgKPycJQcNX5e!&b3Ws}cZ0D0=3E{-7; zjBn2`B+ZVc_8yIjRFs2XO~Z2TlhmVYUO6FeR`AmGJi9&0+yt<|y_d*ytY( z;qhTenj%}a{BH?edexFlQM78=AHG7N@9z zOfMqBK&D_Th4dUv!_`~$(e$)J<&1Gfp~q;a=t*nnZnsXWo*Pw8RJw)MRoW;iN4u?Z z(TTPn8&onzcW07}u|>u%bF%nuLFZ-JzvYa(6aq6IC1w5PwsF#<`z|hp35O!FM0eJG z;g%I{5Z0Oo4-@)iPN9lRp~pNKq#@o{G*R5IzLku(OClm^&?*n@l86Wc)g9oJpEAHM zrD1?~N1enK_BM_qE~R1PLZ|cfRr)tCeKfaF$4q!|mqbM3nC_l~WU=AuGP>uW?RLla zryR=nCmc!<5q(Sc(qH`=lEsf`{@>!CqHnjhih%Kf(MS=IU5=(@f4CG5eabrN97mBb ztkB6Ag~O#VJ(-D_QG{WYj>s;@qE%6n#gg)8>(=OqkSSCEj6(iw-D;i1F6YLGrOYmP_+O6002ovPDHLkV1mz(=8XUV literal 415 zcmV;Q0bu@#P)GdMCp89+t~K_L)A`@!dqk_30IvOmld)zI378DlP8 z`a7wF6pNy04)d3L#fy+A0Ayy)d&TOctB&G~F-H8y5QPeCmcE8~X4Gf%a}IZdTg9@QO!K~(#l~3? zIRsnszL~Miz@gV{%^b_;ZA-K`z3Up1N+|7&KVTAt+m>h?cUBTY!J9J@7Z%Nm5=%&1 zRf<1@HU`H+2B46(S@EaQ)$5!@Hv)B`Uq|cryIwqRdoNvjK|kSB^8zWBwy6LB002ov JPDHLkV1gWlzpVfO diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-menu-shape.png b/apps/common/main/resources/img/toolbar/1.75x/btn-menu-shape.png index 7ec53523d0dd876584a97a403cffec624eb77954..fbc106a5d0e3ef0faac515356c25a7b6c693b26f 100644 GIT binary patch literal 497 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!3-qjPWHqDsqg@w5LY1W;^OlE|9=Mu2Ot9i zoSmILJUoDcXaFYf0#pD5XtJ)Zu0TT|;$FM1P6rw-TN30K%<%ueK>hyr6BHn1e}lt< z`(Wa}!u-?T{-vak_mV0>q@E3pGmf#fp^fS{U6VbcMyS9}` z?Aul&p;X%xe2LrU71tcDeOzkK6?pIh)7G0~tF85L)E$(~mu?>s~i~t~jF*bk)MUL25Errn1SmMqPstybV z2Zn_d0umMs4^;&oROe|q#($PPItD|*;uC4~YwAmfEZD1p(^bZ=m^G~IgSwh->T zcv}cJUL2QDYmN^k)SBa{Z7!$ diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-menu-signature.png b/apps/common/main/resources/img/toolbar/1.75x/btn-menu-signature.png index 6cfea13236113e7f6a6e12324e5b1965cb03d5fb..5b4b9b9004e7320529d33b5dc28ec7437638415f 100644 GIT binary patch literal 956 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!3-qjPWHqDsnr2KA+A8$#l^+d)z!np<39`l zMVy_T9UL5B0{?*`KrT=aA_C+B0ZAQxy3&{DWLavKgm1UlEUB*-tAq5r-D5WSxu07U;4=Kr66-rrzSm*H8Y>Zr0Sg=jg;o^&f=9vUnz+6e(hxyz`9zVsX(B-pOvF*Irz6 z&FhuiBvF1kg~L~L!G>cTdKW(UJUF8DUFr1ft>5n4bl9wW=*p+Gg|^?%w^p8ui8`&5 z%>ed`1L67J%^V4h)5l9{!xd-$HHrU&ZFjDLncs*#m#A{~>11 zxOJm-tNK#**$T{C3j-8Gw2o}AIQ_)aT_xT5*`rAl(r<^nIK#sKLH|+dy2(X(H%0C% zin+QzJ+1xaq3h}L7-gTz&bYM7p4C@c9qbLO1b+Pd!)A2HKwQK5%xqw~X7F_Nb6Mw< G&;$VD1i*Iy literal 765 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!3-qb-Fj<*)QSL~5LY1W;o;%t=Jp>9oSmIr zzyQJpl0Xp$2M1SISGb6ilM|*gh%TTwL<*<{t{%bwDgYV+1Q0cFS-5pTaiBART)285 z17bDM#-4rL^+2~;lmz(&GbqF>#83EN07Ul%5`d^+{(gTTayY+!L4yLAe1G2{ApX5U zz=ri3@&o$w`|Ils@)LeO+qsj0f$@x|i(^OyOQrZzT3g~y{K(on@!{KbH&VWwS~cxqx7*d7KV+q=J>P3F?Os0JqISXc ztP9L7XFBA~xYM#*?sUpqg=e;k#C7N0ebckkMdE%}-qqe>c9q!=@7`r@)UD`v^Y>(0 zMZfNXEss23hxMi9Hi;T1C*L^7xyb3-oG`zsOZ?OeHd;LM&)T;7jLYsfHc|4;`);e7 zzBVe~b#nSHE4JG0{#kYNlApJl7RqeC`8!X(|6X zrN08T_gQdry8pPIx8r&D%NZX<{%5H%@9SEeP{w=n-n$=K7q#}b)+~_Tw|Tdw4$oQZ z`IE2r?Ha2(b=g z!cHxgCZL1#OM?7@8S3lf|4%Rg;q&?T*DHXD{R##93+@}l3ls>4vU{7LxSDT2wX1d_cDU09lL zapTQY-JrH*Q5}N&oDW_&x|3O@+V$WCk+Uyvya_OhInH-2`?g~GkvHbE`FVG3<9jE4 mtBmm>lXJgB^|Si=l=lo*rixW79Cijp5re0zpUXO@geCyU1Sz!u literal 417 zcmV;S0bc%zP)B`?5I|(Bpco*;n~^=0AeKq*7!69&(=-=pk>q_D1dDx-Q0H{;fmetcNs7@z$}J+ zEfMesc@)4kBftY68O`O>=|^*&j89?#UvFrxda}93l}i|CAt0SJ0N@wL>Fv09jZ?>F zVVr(1`9KQ+<)n4@#rb{a4m1fU$9A#a_q|s7xd!cPwm-oG{al0gwfq^d(ps@ZiOcM` z$r$=e!ZK!D665ZcAOwz0)=@diWgr1I%*dVkm4M>lhTJ{&_-pYEoi$4Bg`!3100000 LNkvXXu0mjfQ{1~Q diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-menu-table.png b/apps/common/main/resources/img/toolbar/1.75x/btn-menu-table.png index 4951e8deb5aeb4aa9ccf0a2ffef2b183ff504416..baa4971c5fa5edde2795e4ba954b3a09fd1eab7f 100644 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!2%?k<+eNnQc<2Rjv*C{Z>R0%bx`DC-Ynh! z*ZqV>+u>cw)s<`Oq!X0UMjrvFU8dajThmv5J*)>A1-!IZYtoP*1|uiBlk vQF3m4$-}zrz==B(JuhAIuAU~xaKNl?Gn=FmC;t>Bpe+oZu6{1-oD!M<`VlUp literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!2%?2P273}NCkVkIEGX(zMZ;S&_R)h<+61D zKW`7s%EJp7ifecd=Y_azdURwaw3^Fv?(*fkPk!Lg)|(;q76j%52%=k&q8Q=<7zQ zzMh&7G|nA5v`fmPXNwCDwFB%YevcnSokX-cM-)hHM2t2!`Y ztaZ_vmq*>M_`GOcg;H4_b-Q>L*0|^;FW^t!V?#kr`1u>^6U;EUhA!$_$Djm i*&P5+CAdR}cIh8X$a^?16BO$J0000``QqsT@9V+3#twZ9Gw50drkXnPDF&*=VAIY(?6DVv+Zjkb z^+NDkCX|<&!UJIYTrg_v%#iv_QZQ-m@{qbrLU0@{<200HoJPwL6lBb!wKCvE0_M?L zdFdhp15Vd3Cyufcvxzlla zDxluf0QhUSi|rV)@$zT|+VgULVb1gx+NyuC>bik$qSYQ6?stASW4Pb>>d?pO2V(5^ UiAZo4DgXcg07*qoM6N<$f^Hrb)+5eHbP11#VG2}nQ!5=H_Neh&~zo8>S&b7;am0Y5JfCJ=(- zIL_5c!?V(_V1U6&Ak_S5)iMC1HIN|?Xwvn;%B1YG$$&teS_S|*8yVDG+6PCtxX)3h zybpfqY-CU~MYRmThz2qQg7n~#M|$vi8R@~}4B5e-$s|sViA#($^`00000NkvXXu0mjf#o2Q^ literal 228 zcmVIWRS!9|ekqpPBspwz5KzSQDs~FZ=h3BNU3SqtV5jI&LVVgA%TdhUdYQ4jR^$s)EG|qa4 eIjhg-`?4LQjZB!=cgH3G0000X;eBSbey_@nFN3!(bkP*R^-W;dw zoo8nfR}@Fj-+m0{OcPmpB~A3ECz~!zN=?#~RC>~{v;d(> VHhWV$s6YS!002ovPDHLkV1m39SC#+( literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!2%?2P273}NELXxIEGX(zMXQA^MC;lv+bO3 zMP~c$e&s4^==vR)zFmN8lhUkZKiL&ybQ7|bowy(I_Z_ z|GeqNyZh=%gXr4Zvoa??e17!)x|P{)!`@%WYT17^A-^;*N%2lIQ-sBeWtQ`}nmdKI;Vst03WYG{Qv*} diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-paracolor.png b/apps/common/main/resources/img/toolbar/1.75x/btn-paracolor.png index 908e1aea2595ba81ec3e15c905fccc2f3b7f75ba..5317a6aba069fc628f6bf7cfcf9a0d17b5309371 100644 GIT binary patch literal 490 zcmVuFk2IK(_$&td?A&x~z=8z!Jul1hB5df?%NgUpA#p^jcX&f|AsORh?aZFb1 zD93ZAtP}@0hGIuKo?|F>l%qK|W#rJX_`Ks?9OcbfbU}wMn&Jrd!;e{094j7POaMjr zRs>OmcT6Xu-0H7T>Mu|jtDe+`P)O{p!xL=?1!8yIPfJ6Y`6yLEAW*saWi19|UP=J~ zDEEH5+~OEYnN^BFsMIzaa*H!jGAICm+GcNZ=B$t)ydSwU3MXgI3It3^#-ccOY{z{e z5J>MPvphkh!!T>k@&rK#V{Fd)Fq1TxfLnOttPeBfgbDa#VI*m| z=dOE&cce*^3}`ZPa@W0r4jLLkUCbWzzAG+(1N1o9<*Iosh<%)6i7qFmQn7d^CbG+a gz?^DKSDm;10H|YKsi4YKF8}}l07*qoM6N<$g1s2fApigX literal 399 zcmV;A0dW3_P)(x~G6PsPB>C27jzW)AU+guOj_f+gSi0C_8lBk035KUP97EGf zc73Kpg*z;}KGUJX9f93EV|aG+j2*O&6PDvz2W3iQNT+NY8(!|fHnRKWlh}?azt=$b zUjM9e2L2$~H9D_Wc?HT-_Bj6+SO8C0b!KBP8!v&b>deMo7DFKE<=)=z6Py|;>Kv#0 z`wSb@UY8{$uJRF6ef+hqb*^}#;Sp1P`n8U#ic}wk?4jJpae=tN0dMblrVcn&c(rp75HG?$C92<&R1G{-VdSzy$Ir*)=J}a>bQl|SPTxCwwmbZJ?a^Baov8KEa3#?|8?k_{APD+%%oX88aA{{8!J?ky?-ij;f0IEGZ*dVA$G*8v3{my3J;{Eye$Vc;XX zS&%E}{I0z|3qscEzf{mR<9O(0VI$<$!jPIRQoh0Tm{Diig|j*7Kcr2c&hI}z(?CRJ z@zKa*?l(CleOLD^wU@d2tGa~uU;YoNBgQMvg}AHMUHLal*ywEFWY0Y(OQ*1JoxtR} TEW~3!&mp&a%W#)wZB2Yns@nb0(W;V+koY1wt?ko-rezQ z;EEAwAZm<215qK@7002ov JPDHLkV1k0)T08&% diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-previtem.png b/apps/common/main/resources/img/toolbar/1.75x/btn-previtem.png index ff5f559851b7b20bd403da31034796556d5fea5b..68c0851a7a5c67d68d00014a93108f1de192f967 100644 GIT binary patch literal 286 zcmV+(0pb3MP)ABt)3P z4ZcX43nkS9=rcv&b9+TQWR)`nMmIj^9suir!&V^Sz k`@-`n`@$pF07*qoM6N<$g6x%aVgLXD literal 229 zcmV^P)cESc_n_45%(OPjLwrb+sDu_!fFD|XLxNc>|bt@%qTN!cNN{IW``{KTp5P#>e z%HkQTEIzJ!42yi#BNkbF-Az2MuG<*eZt6QV-NsUPv)j7ccuF_FE#0P(yR~iZHkH(^ fZd128j`JKl^E^y^xxh(p00000NkvXXu0mjf-(X=l diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-print.png b/apps/common/main/resources/img/toolbar/1.75x/btn-print.png index 8170138d74c971fc841ff95c9a7a1d7f5d996fa1..e0eea027ee9e6e76eeb61cbed0775b9597dd9401 100644 GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!3-qjPWHqDDWL$L5LY1W>gwv^;_@F1oSmJ& zHW&*6McGP%{DK+o{|CYyvsYdMij;f0IEGZ*dOP(Z*8v3%*U!uT|3Cd&_m1NY3Erl2 zvsu(tx0c=D3qB_GV&2PM4#N-CH75S1%eW3JH}-XRzWP(C)V1QH*Jq>Ii+`?o*y4Pc zb9q}V5AW`Zm2Q*09#0Ov*}`@qLm<;+;XyUsu2~ya$Zm_*5cap5aX3FF=Q#7>Mdr3O QKqoMGy85}Sb4q9e00$acRsaA1 literal 209 zcmV;?051QDP)p47<2k`v%wDjT z@{Ep&ug+}ndB|9q7!2QKU)0D`E$T{`J=HbeV}c8W#{F}JLf`2CePY#PTm!vp00000 LNkvXXu0mjf68un)%x>1GxFuq zXfzs)#veg^7-g0uND>WW-(@!*`zd%vW)hH4MzR$4Qu?1$qtR$I{yRTQ2kqqx$*7V500000oneEP)}ASES?7d0Z%eZZT4bxRnq1B#k^Rhf*Mxxc+8813LBf| zYt!44EyI}DG|$HE$rj5;tcZxaAHr7(v)mgR7arH#(zw9R4UOAa sJu#fKC*V)E9sXobHSX!@>G^m01LlTPw3|GnBLDyZ07*qoM6N<$g63X=tpET3 diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-rotate-270.png b/apps/common/main/resources/img/toolbar/1.75x/btn-rotate-270.png index 04b849e393fc4bd2f034802f2f3b99513117abeb..6b7d2ea0cc7b40dc0d85dc4a13558b3a16b84855 100644 GIT binary patch literal 351 zcmV-l0igbgP)ZVm6`TTKcj4_hr#>xlJY_vdPvK%Ey zOjEii(|Vj+C&R$ViFX<+8!X>BUtej`HQWB6=O4w1E3GN$IR{8nGF>F}1rm~}bjJi5 zyDb1zvN_B~=wJb$>v8V4aOLa~Bf7fG#=!zWH#s=uY%VLFip$fhI6S?8d`dTmm=kXv xG0|nCqRU1}(9Izx(7^&g>0zOZWiS~0<`WNztsQn3O7;K%002ovPDHLkV1mIelQIAR literal 319 zcmV-F0l@x=P)Rl!JFHMT)flWFMZM z$C?>n&z@)IJ^ESt*^-J$aB35c!LLmd+Vo0VpqNsrU0Yrc9~;F+lI(0;xsipWY$Zuh z$wzI)^fcaR*NPb^JhIVv+SF)Q_3a#UEq3_yd^RI1jl=9sEq`y7m`%@{)bW3`XdGq% z+z*q4d@0|<>TrMKg~RNlrmK4PvaEEokdRFmr#R5)WC2LhKC#cbbDse~uKG3c-EI~V zCu)vUHEUCG*WBo4@wVjEEnetmQIh_+#ffef612O;fo>Ln($8{&-LvNv@(XY8l9G?E Rfsgyk7lrD;4rWmBn)f@Sq6p>2m?V7dT*)h=VEDc(*w}edNWeV zxt5le7P$_-p28JxA+si}*I`AQ&RcXOq*?AsB@2Qag$jY0J4y!NJSB9pNKP7WaST3m zvP2E1&qT*UM!7NK=~xPyiL>OmNq9C?rZSV+cv1>f1}}#kp??`xfeN03gBMDHO6rr! z<@fTQR_ReLf0p;W%E#m?LyuBR8GO<>R;zfFYKluLYc<57)Kg@Mn}NzgJ!SC1`OEvy zh%k8Y<8IQ+ZqQ5UBpdY7kqvrDlYANUGGRb*agU!SLo%Q^d8FPz=0R^Eg8{^0K?y#o rfr`g~;v|%Qn|{ay3@9xvE#>(JN0+i`mvP1200000NkvXXu0mjfQ?HMe literal 304 zcmV-00nh%4P)PAJBuP?e9#R?_3JeJe zKrhQd9@;cN8#!p{*COD7hWugwv^;^OS={2vA! z92|fm5FUgLQQ+a>0aF5{f#MJ;Ac-smGz|!VdVzvK^PQZWfD9nHqQkHRXr*dNkY6yv z{r~YmWboeLy+Hl>`3hj7!C^rG2&!hG54E}-TUMTtTenxzZN}9dEPIT( zjeftB`*68qXcpUy*!x%l!B|-?oUm z6_NXmRynT8*)@BQ(K6RPpSFBRHdcCjd9D2Hi{JCkH`w!b?d7_t3JhTePgg&ebxsLQ E0QLg&umAu6 literal 431 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!3-qb-Fj<*R7ikNh%1nGb#--daq;l*_zwe4 zPEJ6kv$Hc$97w{1p&||r4sbyr8=?|O0u=*EplQ*^PB;L~l_?4G3ud_gUjc{`5+=N# z4@B_|3isn13=9@5sINDO(rmv0RQJx)#WAFUF-d{FhsnXRwDFz;hYO>GWLoTmAAiqF z&g^&air2re=f{M4*2~X~Z~eB zG!*-PMVHMys8IO3{f2dWS^s%$-F~66Yt!M3FIRX%18wyC!u~PmSA9SAKC#&%DCuaY z(vdLvC!Ym$4*0nLv=LISxmBDg&tSJa#>@E7t>=^E8THhkuqFm)GwhCXuBe%RldWNT zQJPc5jpBz!j5f<-cB~U^-?X4+2j{-b|JCZ1-?vS^$M*8j)7Db<=;~ej48C$5pa1Dr h+uE9Q+0nI`az&o(zs`HjwgUQ`!PC{xWt~$(6996Iz_I`U diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-save.png b/apps/common/main/resources/img/toolbar/1.75x/btn-save.png index 3155616f96a384da76500e2d2acd5fda3a9c64a3..acb1a2beb96990b0f3e00e098936de225993e9c9 100644 GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!2%?k<+eNnQp-JE978G?-(Ek++ibwon%IAY zV=6~+NlE_!j&}=}3VM9l|IFk5Y1OVZA3B|N+%3+?YOtR zf92XED_`wSwp$*&_C%r&ORiv~w78l2d9sN~Wy$%8;b&|uEzTfZJo z>yAq9kvtp_91(OdA=rb{`G5PWZ|hGMOf@_vk$fgTF)h*RhaYFXzs3-jiR YANt_Ho_m@p9q42RPgg&ebxsLQ0HqCH?*IS* literal 206 zcmV;<05SiGP)8W6TD-p#x`ABUNG9{&Y_iX&^_~TX>i_@%07*qo IM6N<$f*SZ!7XSbN diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-select-range.png b/apps/common/main/resources/img/toolbar/1.75x/btn-select-range.png index 599b7acb795b92d7044a8ffa2e7251aa166f3e9a..896020d13bca5b30bdc1b3dc5fb683a49e6a107a 100644 GIT binary patch delta 107 zcmZo-Y-d#L4DfU3<&xrJU|`_&^l%9R(r!Sk%)|^NLn^2Io2aPjsN?D47*fHQEWsea z#iq#Pv-&^+W59{VM#qN6#@0s86L|><0TND5%7>i4urpjV*Wlz`sxlX-pTX1B&t;uc GLK6Tl%p4^E delta 102 zcmZo?Y+_XG4DfU3<&xrJU|`_&^l%9R(l$UW$HWX0`8M^=L`78_bx#+^kP61+1y%yQ ztW6AT%R&_xo^Tr&G;yf0v9T&RrvF<|&cBwC;i!mkMV!u~FrZcjPgg&ebxsLQ09yMP Ab^rhX diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-setmarkers.png b/apps/common/main/resources/img/toolbar/1.75x/btn-setmarkers.png index 1390d946d2173604741eb0c1f2d57ed82a633b13..ae8bd60ed90a1073dc4d73247f138ef3e3e24a7a 100644 GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!2%?k<+eNnQo)`sjv*C{Z?7l{F&J{N9IU?c zulrAppDUYlNS0LN;%x%IYbV{C&b9KTDA$Tg38x#oXPfabRG0rU&`#;K-`wy~)bn~o p)p3Jq^S&r~zn3_6X>!SJ{>gaLrM1Lp*V2Y02_KG|ziqZZxPLGG`UAd~50CSH`H*}w hD_S=?clFZkwXHWEZ~JF7`76*^22WQ%mvv4FO#s}1GZz2= diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-settings.png b/apps/common/main/resources/img/toolbar/1.75x/btn-settings.png index cc2e4d186933e5d2b4730b135baefd4245db267c..959cfe832700e1f2155b7d266eac5dc1af142410 100644 GIT binary patch literal 744 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!3-qjPWHqDsW|~YA+A8$!NI`=4F1CagzM_+ z3KRJ6?CcB_1d1RF0%bisJRnj)5(wbxfefHZpcXebHy{bL0tn!;K$T8TPCzN32v8PC zLiB=-cLlN`f?Cd(?SSqxDGBlmW)OJ)ABY^z8vs$jh6M>AtgxVA!h8iFzF!}(U%}vh z{r>w2@$vor>(`&3AMfw~SuWI&fr0V3r;B4q1!IzgQi2G>j}_--+!Gmi4(oFq>zlil z^X!(!(uAtL|0BQsk4v<6Wy(Hb^W~9$(bqfb=b8Wg`+GX_;Gfg_=Y)kE-dXr(GVDG6 zaC2E9qXNtAY5hTY$6c5bwnv{+I+QBXu>Y5(1r9OB2degB^>{-ny8?7iDPu%IV_W4Pv3X`5gC?6W2WC6=hpd?5eeXGs&L>8~VO*qSCdE}!vp$G*c8zyEERVVw6g zWc%_H)w8mcvt!DuRz+tv6|L&Ed)V=0?{STL2G<392>PkOqajiSv)-3$)XOsD&eW`*iT*t5R?938axhJhmb92Y5nOl?FwZ8Cf z*574vLprASi||Er>xLCC?Nw@33rnreOnv)}VcF*RqHI&WsEu3PCNXx1O%L?WezJ6T z&Q7~@hVS}w%5@m!;wq2(F?k%Utma*Cb${U6riI!PtPGoGY5TrwKhy_I5)7WMelF{r G5}E*^TVd1y literal 591 zcmV-V05JXu5OJE5uVG%Arbc;KPI&eC$I*>XLJ4iZU2`+&pu!Q#yvK%E4WeXqpxp;Mx zFc|L4?oh@&>skN1{Gd#aANFDym}@uIXwp|>jPXbP+)bQ#HO3f@eC{W{go820hzof) z@r8pi#^87i+qjVZsM0u1T5h6eKQ>N9Q^;bgWRA>;;7HuCWJVl9B4g{mMnAr^nzU%Q zq|i>$kN7V_+#r#Z~`y*ZEFU z#nro5I#OkULT(nP*0UBZOK}?)^7?WyeD9bug|ZYEN3Jf{%e&9Bl-h?VR$PeMUEfH^ zFKxA-ck(PHJrRo|a>XKK+6_7U$F#l1Xqo&LJI{A${kSRR2Ujd*>K;4KH!Yi36Jls@ z#CDSRVd6OVM7a)>dyv?lLY7(TE{u&68^+mH6`%FJN_$#J-7(^@jI*lSdKUaTiO=Wt~`NUu(hGxKN20aPvwM4(qONx_Kqxz;5gogax3j->s>zxC_$ dtY`ge{RL2FfaOCxqDTM$002ovPDHLkV1f+x6+Hj| diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-strikeout(ru).png b/apps/common/main/resources/img/toolbar/1.75x/btn-strikeout(ru).png index 1f8e57800fd1c49c3c7f7bb3c3a34273acdb876c..f3e77ea2881c576291b0634b94e7225c365d004b 100644 GIT binary patch delta 109 zcmeBR>||8z4DfU3<&xrJU|`_&^l%9R(r!Sk%)|^NLn^2Io2aPjtmoQf;#cU4GjDRLEc)I$z JtaD0e0synq9%ldm delta 108 zcmeBV>|j*v4DfU3<&xrJU|`_&^l%9R(l$UW$HWX0`8M^=L`796T~8OskP60Ri3$ZN zDXv8`!q!GH2qrXonHXGXk(ZKs#js=tP^eMQKilpvBSY{9p7o*Xm3lw}7(8A5T-G@y GGywo@6dh0i diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-strikeout.png b/apps/common/main/resources/img/toolbar/1.75x/btn-strikeout.png index 48707ffca9290316a38b9730e5191c4516e0c25b..3de4ed7be2dfd0a0d6875f464f3938e2efc9089a 100644 GIT binary patch literal 363 zcmV-x0hIoUP)%B&6hs9f5DdW(H2LeBlwojYU^B2Gh{2hGAsB)o2!bKJ6n913WX_U`6ng4ZJgqc4 zf8<=HQmIs)$ZPGQ5M9)EyMHw)7Cb8vfXK$36pJRI-GU98ZLugUBt)5joxs4%LIkc` zZPM!8TP)C^o>-T?6?SPl%xnMv002ov JPDHLkV1hdho#p@l literal 307 zcmV-30nGl1P)0DQb6bJmO|82jOK2Lj}LiNy|vpuXADJ=HY+OTqNY7g z17cX2i9`yGedwsJMNPX9xu-g!HT%^8bgKK7&zw1PJU@)<(aMoNx{3e*002ovPDHLk FV1m(&gkt~z diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-subscript.png b/apps/common/main/resources/img/toolbar/1.75x/btn-subscript.png index 4ecba84acb5db6c3b6b8d11b26ce115d983bfe57..69d08731eb37bb7ae61be166f90aa61dd0d7eb25 100644 GIT binary patch literal 435 zcmV;k0ZjghP)6xgerlzKb$XkK1wgnb|x`kYj(H+&p1dLF(kdJI#a~$0}|i7u@N-p@SS0@ZMW+Kygd94{qeD zfcM^l2Bj^o%}J4=%rJ6l^Y3%pz~D8X+vaANJS7m{ z4D;_x3B*1=Gs4Elbi$pF0vWx13opOyDz#vT2w=o|i?E9`UlYVXJsTny)7$%^5f4a#-i}21Fmz(^_^j5BGUWNhYjEg3JGGTFD_3|sc zX%|P?KMv_5+t1)l{~WQO4*8ClMKB+>ah>3|WwW}OMKB+>K?k6PQM_10M3Z|oEt7hv drl#im^9R-T`~TMla8CdL002ovPDHLkV1hbtz-9md literal 381 zcmV-@0fPRCP)UNRtM+wjYltKs4LDGRsa5|s_moWDr5FjKMuXK--n0*;*G}tp^ zq7x@h{4I)FIx817I=k>Fqgi-_m8+~?y|PJ`;o)K8k_=K6wR)5AfC@ECT++ynGmV@X zgd-d>M5J?zTCYSz(rIf5)|H3|9oqEsdM#(ClZ8FX+37^;w|nGSV_LxA9(hJg448E4 zm8X$QTAR_qgYR=mY;!THUrkIB9^qG$!d2F=^ZVlq10(GG{`|6KkZQgDYUhASBR37( z-RA~x*6kcHG`Jz4dJ`-KyY&~&6jPfyf1h(W02?kcU}`h+Uvgg5(jSy-X{0pI`>O`` z2jyD0XwbiQI7|)RxqkoCBG>TxEki(g;QD;oIfCIWTV$PyI>{Qjq*0+zn1mw$z{EXq b;{V_WZJf!#G0rU700000NkvXXu0mjfoN1}Y diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-superscript.png b/apps/common/main/resources/img/toolbar/1.75x/btn-superscript.png index 78066ce6957bec01e7fcd6b84bcbd04b872952c7..721a32ce07d08759fcad320a288d323f15026499 100644 GIT binary patch literal 444 zcmV;t0YmB-uuoJB^zL^f71E&O+KnGR_P6w1g2`a%Q{2XEnf$_j9IryN@2{C;B z>^?0bDk>@}dL!AB3j!Hk{TCOU5CDwOxwu*&Jl%hEY>2FvZ`H?Z0Er7a7$SJ6T*!JE zZU4M#FRCyeBl?w9l?%DRwGCV?s&!+d3KLKxpjuSx291mB?1jjA*G+4}F0iWC=x`x| zN8$oTP!c199EpTwhz)85pA8#LWia4K1V(g03!s5fROVo8h|RjcCU{)CqZowPth)=M z6!1PUm9v~FQxm2*BikjZ2Ul{-4l~uGLavK#CQ^uGNT-b=N`qlW59fus+BV%oX*5Nc zE85u}%5gcE3Dw6npEf(;eU{qgK4E6tJOkq22{T*Cf!Kv5BWzsAfR~?YrF9XuE3arF z2Cscs4YBnpysulg5yqq4)4EM~*Ty|p%U|XuyelrKmcL9Tys=`veC5L%pY+)6La)zp mnrZX;9G5w5ii(Pg{zX4+%KQH)f^o3`0000q&~}WA5?$68hq)2gGi7N zIdI^gB3|PYIbMFl<&{rndbvZ2rbcf%z4+fj|+vt zpw&luWbItCN~2Nho|)<5N}S?lNb6{a9$AC4--#Edb+qi6>EsHE2JKLm9#KFLbO{#* zb}UPeEF?(}cSv}Mh{O>$X#^7=A|f2w%oP~Ui_^`*#`EHIBlQ&4eMYGl%pn`reP&@3 zSK?pMt)uJo9nKDG4uR`>&;1U d;J|^uf-hl>$-wD3&8`3d002ovPDHLkV1mWytPTJG diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-underline(ru).png b/apps/common/main/resources/img/toolbar/1.75x/btn-underline(ru).png index 6733f1f2418ada36a0eac6abd31df14217c3d09e..f7b8869a69fe994f7b56f186c02cf980a9680e74 100644 GIT binary patch literal 233 zcmVzxQ)HqjilSQ* zT%Yy>u1^CKn817k)A(_oX?9~8KDHqHF|)4klTxL*F*8nEP|@5NqOzzxC(WEVX;qV* zlepJlfnh>MLPCXMM;gEo371U{HMOz|kK7Cq5f~c|7z`_T=w>`;?dAn0FoF3k%q{vzOQ$EM0lupjV zWz4ZDrIU-rt#5qw*;L%8_#qgjx!bQq|D6@()f|Rmge^SO2HpSw002ovPDHLkV1j$> BQF#CW diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-underline.png b/apps/common/main/resources/img/toolbar/1.75x/btn-underline.png index 9c3533c3e2957ad277ed4f7f140d45ec251eb7a7..c21055e1f1b031c3648326536e2e2e0d1b8a1942 100644 GIT binary patch literal 253 zcmV4qK2Fy&F4TSq_mqB;fK7ItFK`>4fHx;LFkSzTQ|w{$-zOq00000NkvXXu0mjf Db-!lp literal 214 zcmV;{04e{8P)2kk;a(>?b=yQI3?;!YN9yryYay>Z| QXaE2J07*qoM6N<$g4AqU+yDRo diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-undo.png b/apps/common/main/resources/img/toolbar/1.75x/btn-undo.png index 8bb259a56be423ef86064650c766e2f00a0cb495..f43d173c52679eb6631a499561634f6dff23bede 100644 GIT binary patch literal 335 zcmV-V0kHmwP)nS@wmSn8-~R#ugNx`qr(9fZu9OxKpV z>qv;V4UtEU4Vk+RfgAgbZ5ebN`k{P`ubMS$*4oy2jH0J}jIU%enQG8kjDB0pGASx? zQj~aU$nYHbSd6?aZvx=bmU&hzTalG67OfH*GB3(jWa%hWf>9Gs59idUmd*$*p; zt5HS{6F*Gbce9c??83BjH{ZP)3Gr-_IevSAvoSNrIzw;F%&|^ym1*c0Wm|h< hKYekI<2a7<;uo+??IhfykhA~*002ovPDHLkV1n?-j^F?Q literal 298 zcmV+_0oDGAP)-kR{<#$gsm;?@O=e||!&uH~H%aA6k9TG=^+WBKL8hVx6fGK=Nh^Qq_Z_~bh_ wuFT?l;40k#SLr_Z4Z83Hy+e;iqtQq71MyN*a6nV93IG5A07*qoM6N<$f>XDC2mk;8 diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-users.png b/apps/common/main/resources/img/toolbar/1.75x/btn-users.png index 851986b8defc21a77e7365fc8f2a99ee6760fcb4..f502e2cd2fd78446940beecbe261ea77bdf1239b 100644 GIT binary patch literal 647 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!3-qjPWHqDsmTF8A+A8$!^6Yb+1UjQTwPs( z?Ee@5qQJqy0WJ$<164t|5WNshKsH1WXq1za6HpK+0wjUzfg(V*o0}U%C6I($2T=nd zS(9X#fX*^33GxeOP?+%k|NZ$8GQL6Ketd(0!GZ<**Y96nzrNleAz{M?f&BCFK%5W| z;NVbDu<1{}I|Bn_k*AAeNCo5D%h#tZHV|OBAS9G`<&%OB-{j(XKmV_f=DXE!TYG=r zo+HbxmbU!=XQOpd?XHH5p2^wi`w46|1t!TH+;VVbWXX-`Q#sCUlc+Rw_;B>+CtH78p9TGEMA*eHxf*Kz(A>+gg;ODB zmod}ao!$qE8kqNK_W0Q}oYPsS5cv8=8cV{1qo#cy61!|4B?Z?M-(G%f#_oS{jQ_5@ zIOkkZAtP&S-)qg3kz##9azDMd+?ywePmpPCs6hYd3G_%%xs>WddS*pWOU4#Z3Oj^zwUeo^P3dBb@Ju z((yYdeqIxho+2yGJnLD?nNAds&0c0wV@5Rc-UY_6>~utfw=#FebtF4a{Eb>8Zsr4K~p2d)>e< zJsBxzehmq*!QiD+CNGY-E8(rAQ0vdrg-f-1mBRHPfbEHJJvm&h4;LrgE8TcP&kh2{ zVROKYo*jg07hChsgFl)->|izJdT|Kg?_P>izl{&BS-0*ctBJ#vI3;Ruzl{%HbIZ-1 zI9%Vo?o~@l53z@nio^Ec z`@Q)3kHH66K4YmD2Gi1!AsQQyRQJMQr`Qnn!y@)3B>Qj>V$|#2gn*eVV7vgv$mioL h4UQ`bE-EUzra#oQimj?rA!h&p002ovPDHLkV1m;T#WVl_ diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-zoomdown.png b/apps/common/main/resources/img/toolbar/1.75x/btn-zoomdown.png index 65d50a914cee19ad1404e0cf56f5496f2479c245..3294ab426320a40c526d4f78c2e5f1848c9cf91a 100644 GIT binary patch delta 86 zcmd1IRO}4!bLZuf;$mQ6;Pv!y2?Ek?K&;FGBp7&Vls8UPl+ttLWnkbqe4y*_e$^kw ktlm`$o^#bcJw*4W?x;-G(p00i_>zopr08hymhX4Qo delta 86 zcmd1IRO}4!bLZuf;$mQ6;Pv!y2?EkKKrF`rBp5jUz9`)q zI6?2s(G})hnTt7&sS>wkqW@xr27ghY}p7HRbe$tfR6+4o8 v439~C7F3&hKD2yO-fgTe~DWM4fUe8Qt literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!2%?2P273}NHuu6IEGX(zP);ow?RR`<)Y@% zAfF4nbV|J?^QDr?#Dw;oea>-u_XGxu=V9f?9Cxm(ndUfm#!<%;cf~AyExnCcVh{eF zc3E`~=dPy4IqMP}E||`_Y^w7@&|Z8why^5~k2ARqH;5qk=cfK#q1Kq;l>FVdQ&MBb@0H3^0=Kufz diff --git a/apps/common/main/resources/img/toolbar/1.75x/page-portrait.png b/apps/common/main/resources/img/toolbar/1.75x/page-portrait.png index 688296bac775ed5e0115b9d46f8508265554413b..73c7ba77f9a1073268c805781a4a4d127d7afa2f 100644 GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!2%?k<+eNnQWHI0978G?-(KIyd%%E$#lh{P z#>9eWr&jbhMV+qF*}vQ6e+kFJYz>3pDfUnM<}HxR^LAS_A$pDatIC2oK37gFSV|O| z_5~+MojfRE+}CWFrn3A{!5l8yJW5B|mSY!3w`Ao^Xc8M~k8vVRH|7IV{$qAg||CIH%wXqW8J8l7>;}|?${an^LB{Ts5qK`^% literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!2%?2P273}NHux7IEGX(zP+}Qx50pi#i9R@ zh6i7<;VO4SS&dKXzdHE-UA|egt}xN~X}aa2)Jk>p*%M8ltl7Fol)vxXnyEaK+&=6p zG-)xPFVdQ&MBb@0P?a(wEzGB diff --git a/apps/common/main/resources/img/toolbar/1.75x/shape-align-bottom.png b/apps/common/main/resources/img/toolbar/1.75x/shape-align-bottom.png index 1855cc38daddc6c2e05b9a3c21d840f5008dbf12..046d12d2b55a92b79eacef0fa47acba5f984d611 100644 GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!VDyDTPDTgwv^;_@F1oSmJ& zHW&*6McGP%{DK+o{|CYyvsYdMig=uw8y7S5J{24;cY zRgG-&KD4}cqPnuRa>a1r>M_@Bdje8>=S~Vm=XlVRURBLP+??vlrI@x T&nYbeG?u~B)z4*}Q$iB}MIAav literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!2%?2P273}NacFEIEGX(zMbmGcR+!I<>%~Q z|J6T;RAszL-5MM8_^7PjkrtmOmNP9kTt7>do1DMa=B^%_ZECRiXyeQyLi;;@TDlh| zoeMnkJwf4FwZg_DLi)nf(_=;E@AWylL9b5MYvY`MlkXc!X-``mt@Evb@vx!%%0Tyt R_kk8Oc)I$ztaD0e0ssLqKzaZG diff --git a/apps/common/main/resources/img/toolbar/1.75x/shape-align-center.png b/apps/common/main/resources/img/toolbar/1.75x/shape-align-center.png index c0f004fe3c28695164c2318354200f733efa8c4e..b1e1a0307c089d0e5ee3daa0eb5eb9af943b645d 100644 GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!VDyDTPDT?|8?k_{APD+%%oX88aA{{8!J?ky?-iUfGNIEGX(CQF=Z5Oj7)d~ijAtErJOrooky zCuG7EjsqGJ2~9!G5xxpX;u$6WNlhp)6KP>)ZpjXaRcUzQSn}S0H^{V+qnyh)z4*}Q$iB}5?P`FaO3G)}xqT6uu7PDslK$x`d`O=aZsT7p^t|GDeZ{7C6V>196-eD^ zDvEU5dCWGlyz#wDcXO=D!bP0l+XkKY6L(h diff --git a/apps/common/main/resources/img/toolbar/1.75x/shape-align-left.png b/apps/common/main/resources/img/toolbar/1.75x/shape-align-left.png index 25bce14943abe500e694fbc274c925f9d6499f60..1012da7967dcbb86299d644272be408fd8ec3a78 100644 GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!VDyDTPDT?|8?k_{APD+%%oX88aA{{8!J?ky?-iUfJOIEGX(CQHm}5Oj7)Y`AK`-PFK1NlIN+ zA;2+++0>I^AzPBr<%F=qT;IYO+V->Q%}I2Scqb=O;P6enrT2|KNA-kNiLJlAMJ~rT eE1l)9WMDAe%NzZuLjNDobOujXKbLh*2~7YY9X#X! literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!2%?2P273}NELdzIEGX(zMXQAlR=S(<*n|m zdQQ#M_vHoZvjhy9-u;?(uyj(8L|U!ZqjJV3<_F6}?_a*c-S$YnwE6e++p&8RSavB` z$m-0EnWTJuTj4JLJNg3EGkyNu`1gL})iV9$)v|j9=I~8h8MDc6UGC!&{u!1g{M}0O VD}~>D&jwn~;OXk;vd$@?2>?xnK^Fi3 diff --git a/apps/common/main/resources/img/toolbar/1.75x/shape-align-middle.png b/apps/common/main/resources/img/toolbar/1.75x/shape-align-middle.png index c9b78207c0fe94bd5dad1be859a0c07aa721e12b..5aebf45f3d4428caf31da6287e6cb81123398308 100644 GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!VDyDTPDTgwv^;_@F1oSmJ& zHW&*6McGP%{DK+o{|CYyvsYdMiUfMPIEGX(CQF=a2=w$63_Wt>=uw8y7S5J{24;ba ze!OP_IZO@Q6|XdKikK!OajZ@Z3UX3%IB@hRqa#oJe&s70v@};H9sBLD#JMBb;PcS} ac7{8jB$*4+zOMxu&fw|l=d#Wzp$P!UK0m_% literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!2%?2P273}NELdzIEGX(zMbmGb-;jwJRE4XFZWiRtxs~CSjcQRr=`LJCDD;k^B5&t=>U@6T$eO{jEQ2*j3Da V^mV8I>;YQN;OXk;vd$@?2>^1vLyG_a diff --git a/apps/common/main/resources/img/toolbar/1.75x/shape-align-right.png b/apps/common/main/resources/img/toolbar/1.75x/shape-align-right.png index 65613c73b483da55db352a615f233653d5e8c8ec..10273a8f9b2aa9087d21c33b91a87ebaa0d09be2 100644 GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!VDyDTPDT?|8?k_{APD+%%oX88aA{{8!J?ky?-iiCQ)IEGX(CQJNk5Oj7)Ot>P!#nfmpNlHvr zpuizanZb~CVH;=Cse~|Lj!)AymhER#m@|`AkwNgBU&3~UJIxomKTKyjG{tdMo9H|J iz?^?lC7E>|Obq?YY=?|8?k_{APD+%%oX88aA{{8!J?ky?-iuifDIEGX(CQHm}2o&IKaGf%t;Sj@)j>v!j z38w=MlP67Lp5d@VszZT=M}t9d#)3t&0!`O6H7znQ?bzY4!qJpRvS(Ezql?2K1|@}d b4F-l^!h8%bP0l+XkKifB5C literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!2%?2P273}NTqwaIEGX(zMXoIlR=S(b?UMWJvrYV`{}7U@QkPz&a>yX6QzNqHM$KnW zjcq@l33sYa`>|(7Uuob(vEQtRx@Ss#@X#qNIwzd;FIpr?-2Nzw{K{|J8}|aOWbkzL Kb6Mw<&;$Ti?|8?k_{APD+%%oX88aA{{8!J?ky?-ibQz2IEGZ*dOOvTi$Q^dCHVFKc)pK2QZ5`+ zD)Zw$bU^Nko7RNC9=C;RBa$CQEPMItONg?daj%=sMF;yU3HDbUTzFlwR{V@HJ|fv} mUHU)3VRG~9@6Xc}M16uUFz)^xU7`rIgTd3)&t;ucLK6TR!$>gz literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!2%?2P273}NELayIEGX(zMbaHbwGi~W$)~& z|H@A^F1u##=BQiNwBTH^_#*x^LE$EgmX`l}72fT-SA6uQ(7VaKqK7{uZ23{WWsYND zPZ^tbN9~WlN%D4z>q2Ke@^Ve;RGp{Z_nx7%n7t!?edOC_)g#LHllY@*+m0k9>!q#F VYDg*MvIW}C;OXk;vd$@?2>?vHLNovX diff --git a/apps/common/main/resources/img/toolbar/1.75x/shape-distribute-vert.png b/apps/common/main/resources/img/toolbar/1.75x/shape-distribute-vert.png index 55e873fa5a70464cb7cbd14cc1707dd476762fbe..cef16a652e0a67767d97b1b6fe897a435f2a06b8 100644 GIT binary patch literal 173 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!2%?k<+eNnQYD@)jv*C{Z>OK;Jz&7$yjl9> zKV<{1ScMg3SI;ke|FlhDlTvhtA%mXr>Dt|zsh^+Qx3@>^-2TQZ-7EERWcH~UPp?WF zKD{c~JY)6|m&wb1DETs2-BtQ9%_%$f{4uYJ^VL&6aM^Y^_S_bBn)PU{3FC``dre0e Y`SLf3@pL?I1lrHw>FVdQ&MBb@0Jo1sg#Z8m literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!2%?2P273}NacFEIEGX(zMU4xbwGi~d2jUB zf9@{=H`QD3>e-l=F|U4_fWg8Wvu?EU{W}wNC*ghgKmNndL)te-Rdh_fwk=}5-*l!O z`zC(;eoX9Cs_9c9)+1LBuAex$J{`H>-g%FQ)I*VZX?l)xi2Z RWk1kj22WQ%mvv4FO#tAbNd5o- diff --git a/apps/common/main/resources/img/toolbar/1.75x/shape-group.png b/apps/common/main/resources/img/toolbar/1.75x/shape-group.png index dc61609c8c827b5c76eb8dd3712e7118a6cccf3f..b7714f030b5fa1031daf4d3e84d61aab5b03b286 100644 GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!VDyDTPDT?|8?k_{APD+%%oX88aA{{8!J?ky?-io|)kIEGX(CQHm}2xK@Y#xmK9gHerj(NzNj z?xqHVNf-UR6dp9>NKSEKVCArUa&-YS>zRgQ9LlUc21!RY_%kNTPrbT5qNUl?_dgy+w?DgZ1C@crq|>t>$q*Klw!~&?W{?S3j3^P6b~ literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!2%?2P273}NL6{dIEGX(zMU4$cR)bIB|ZPf ze<7XJU&}+J)`fYT`KX@f=d+Go;Yf{*t^4%}IoI~Bi&SH45U@Qhn3SK?Q*$Y{yUPBp z$UE7s=_>aE@9^7S5lhN$f1Xqf#My6JZ%F+%+UWg}uOoPmRg}?|8?k_{APD+%%oX88aA{{8!J?ky?-iWGagIEGX(CQIyV2xRbcZWQWK^WIdC_el5!HCShA ztWFdaaS49BWJ$xSwm^nNKBWg9q0axG9OUY}%+T}1YwsFE6Gn#LZ9J#%&MA!sTF>C= L>gTe~DWM4fGT%tY literal 209 zcmV;?051QDP)Q?aa;q00000 LNkvXXu0mjfibhyR diff --git a/apps/common/main/resources/img/toolbar/1.75x/text-orient-hor.png b/apps/common/main/resources/img/toolbar/1.75x/text-orient-hor.png index c06cff0aaa3d44532730210dcd562de674e55293..8f302925e060095103aa8d0daa64e4c4ed76eeee 100644 GIT binary patch literal 415 zcmV;Q0bu@#P)!6j@7>VWFNC9njRFeRvjw}-VHJ3tT;4v+-k(?#In z^I`Z&k;!B-`4-Y9Y-kV>(O}K~4yXhi zKQ;!!b+s{&BKed`TJ8KOBa*jN24qeYR?d$yB5afq8PCzw>LFvQLBpR{Yll{sj1y7n zO-2a>UTO5Fm|7DNv1)piX;!UTOXa0I2BnFJP|>SQqf%*<0hzRAw`w(eS|5)ot;e*w z%Ij1r&id|{R(ex(u{}o(8Z_Fj%e{=L(W$bq6A1(&JIjNN(wQRp^j1=b#+ITb+=QFt}PRy>wNhkEue1 zva+%a`sx7p=+NLXRS1B=U<^3+)^`>p`F+{RisdHRvo<$>>2|u=zl0@HJBuayR;n*u`bT;PZo~fDp?vOq P00000NkvXXu0mjfCFP&+ diff --git a/apps/common/main/resources/img/toolbar/1.75x/text-orient-rdown.png b/apps/common/main/resources/img/toolbar/1.75x/text-orient-rdown.png index 1d5829fe77011877cb3632634ff73fd5b89ce18a..b1170eaf689ab2123d87e57c53ef84ad3115fa96 100644 GIT binary patch literal 432 zcmV;h0Z;ykP)7Q%9w^Ox{Z}GiVlvkSSCtvOP0d<^C-VLri6s^ zhA6)V*pf}5s}69&gsw8c+vf3BX4^deI;Ilvl`gN7!RuEvnO_viL|0Z;wrr}b9KA@! z!C){l6byzJ%G|P}{8(?5xo3wT>q;4$z9O^MB}$Y<=3Y(nU9xOPq61rAkr2otbFZfP zE+OMc1jb4iQVAYqmWdKwg@`B)Hk#Ts4wgf2d2Jm);E-A7_D_TXBNSH*$mo$jSO>F? zVNsb^fx(ipa_H@{{^raIz@jp*0ssjNMvu!!Z;ncE!=h67#t0l(REkjvl`4;i)o3&t a|A!wAdp*4er}%9E0000M;xw23ZCPgfQ4;;AJon7J?xxgx`bJZKJAD?W%{W`MKmW zddkEz296v#@|#gU-h!s*zNVIsS_UTejWD1=E-}mb#nr+9124=x(>1^Vpr(tO+VfBc z0|1Q+jmDt~4h{%DX1zAR4xne|wE>n%O--iIHNX>%#)(}OtU=b8b&0;|AFs?@_|4kw zsWuI$$mUcVt7<>Bx()v69CPzn)faDLb?^cJy2KF(t`c4VfD1=}?r*@+%lZySUo*$_ zTtC2mcaF=P7C3Z3=p;uUye7THQIhQJpE9QfW(Tlirl)7(jU&_U?o!jaz%rD!KAj}% zUHaf9m9~Eg8|MOZC~f75nRoW|Ox&$SaFTUa${;y7RE3V2Gs%IOm9=j)>)8j*CbrP! kQfOKqu3QR7j{L{G0w5C#-#QpEnE(I)07*qoM6N<$g5EN#)c^nh diff --git a/apps/common/main/resources/img/toolbar/1.75x/text-orient-rup.png b/apps/common/main/resources/img/toolbar/1.75x/text-orient-rup.png index dea8d25ffa7ae9a502cb79442af2222f7dcc1a2e..97a34e7295064fd27ee0c8798570536621da1a4f 100644 GIT binary patch literal 427 zcmV;c0aX5pP){%WFVuvC?bx?Hz!VB;@~Asad3;*IPMz|Y=^}}VW2QEU|hLVMJ!klSumSZF%^lg zUe-R%cQMQL+?)z3!YgI%)4X$73+C%Ii-?$dUi(*f?#)e=<#Lp@3bhHdT;7eTPr{g* zx_L1*HEqS9C`Lh1v=QU{{F*So(u8UL*F2@l9~e8Ox6j>a$8h3}+=X$AgU_DbdN3FR zGZ|~dEdB8O*qikev-E@f;3IL1iPu!);3nePv=zgZ%7BUNcnbc&OsU2(g-*;wWh8WB zL`+{Uv3ltolX9U_y2i9w;K}DWb}#V6%-FoZ+f{zKEDvTYW?khAJF6Tya^%SK@&Vq6 VJ+pZr{n-Ej002ovPDHLkV1hH&#u)$r literal 383 zcmV-_0f7FAP)sO z7aJqJT)q1G4LC6XB*4IQOC>VWu;-P^H(uBZn88b&+~7JlxyhQ-c}`{pTmdt9i4zBQ zoH)_&%(PuM@3B(=@S|7&@VeRX2QL)>IMUvCyTNmfKVV5&;PeDe{{+nEl?8rL7C8GY z|G~Qgww3SlTKzcj>@r(@JFzZ$mGJHzuYqY9sSK>Mz_ya!tBY=sklSij?5T_#xXb%G zTo+#hzAXTg7uEpV0N11a*NSm5l%Z002ovPDHLkV1k}!sSyAG diff --git a/apps/documenteditor/main/resources/img/toolbar/1.75x/btn-higlight.png b/apps/documenteditor/main/resources/img/toolbar/1.75x/btn-higlight.png index 120f35613140c1442477cad0f8039821ef546630..3150a56b0a3de7b99a7c69fb1584fbceebff1926 100644 GIT binary patch literal 367 zcmV-#0g(QQP)dbBF@x=07Qi zD8RCdkQ2KSoFCd|&B=XYcEu5(dEgi}B^GwgniF}F148q_>EQ&Fn8NWV&+1H>l{E(^ zR%h0f!bub>qZCe}STSYh=qL+EOPLNxNtq6)QYz*DDb9p(UzANTbTeBeC1U*U-r-Ub zW>=O?iP=69_>@$7^GFa;@(o=$GRkyAFXa`KxH3mY!OT%oXx-bv-;@;KPK=wD@=c>` z+m8EY*-&T~SbDVxcB%Pkv``31wpKgTe~{Ub1MbWAnxn;+k(`~0dFO;rE@ N002ovPDHLkV1i*npq&5! literal 295 zcmV+?0oeYDP)x&Of;Qs}UAXq5Zq>>E79p?%=>i434 zZva1s5Tj^uh@4iCs*`t+SR&c*J`vaC3HA{@1wIg+9P_iTS zDNwOY#YRh5redR|EOlm&l@_zF&Wx4Tu>`x~lZr(if=S8J5Hv0;SwMqXHGi)YT;`7F tu+*LL0q#5AG2HbhoDTj|sqgr1JOKzakLy=BRsaA1002ovPDHLkV1le9e98a- diff --git a/apps/documenteditor/main/resources/img/toolbar/1.75x/btn-mailmerge.png b/apps/documenteditor/main/resources/img/toolbar/1.75x/btn-mailmerge.png index d7c8c847f3ffda355272608e6d03c6f64013fc0a..5756b4966f4f7a401415268f5b38654961c05c33 100644 GIT binary patch literal 343 zcmV-d0jU0oP)c zX=6B?{6q&c;$%t>GvbtYyOcs@dmWu36W#wZ%Y6G002ovPDHLkV1j=Wk}LoK literal 343 zcmV-d0jU0oP)Zh#=bd@FIPa4%JA{3w_}$chy!W{1=QMn6)g zV?o1sps_>%*OCrQkeVqX_$dbiV}Y6}W-z0D+OUikVA`i$P5~yQM?2Q#rm!#DV_j|r zw`tFo;Wiz9tH54ils4=~m2+`1 zP$_L$Rn9FG6Gxy8E6#c@E(S-SEqm5;Q89Z~U)r(hzBm7|+0U1DY`X6a*td~g@ZBwP z+H#FO_J_tS`0f@tZMiBOcQ4=gC0O3=BV7#}T)>9AI%aVMdiptTu`xaQ&DCQAJ^5YT pXFWajcH%$W$9(2}ykf=Q#1~Ju%oi-ceLVmG002ovPDHLkV1j4Nk!Sz_ diff --git a/apps/documenteditor/main/resources/img/toolbar/1.75x/btn-menu-header.png b/apps/documenteditor/main/resources/img/toolbar/1.75x/btn-menu-header.png index 2099b1d319b2153a85caafbf226e4eb1d4413fea..755824efde68d50184e43f76fecd53991ad172c1 100644 GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!VDyDTPDTgwv^;_@F1oSmJ& zHW&*6McGP%{DK+o{|CYyvsYdMia2??IEGX(CQGz51ah*8EL2j{Ge}?%O=L<6nZ_)z zc+-p-3C|8(JWcMCnvu9y{Q>TGd#^P$h1w5ILxiDzI4XVD6^ZT;&5G>yU2 L)z4*}Q$iB}N2NNZ literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!2%?2P273}NJV(MIEGX(zMXcEmqCGpdH3uc z|2cYs)Ej;o8s7TsT`VNWFk}4;$v5}UXq{fN=#0{eePQ7NX|uZ&E__{mBzCvhedFYA v-EB9Ly0;&V>&{<)RIz_=;jJ~8Yu6kjONbx)VkCA>$V__V>8&yQJVZ9kSf wJ#>HWZlT?|+yBPib}zj6E%ME_-k<#ZUy@Iq*J68S5442A)78&qol`;+02Eg^s{jB1 diff --git a/apps/documenteditor/main/resources/img/toolbar/1.75x/cc-plaintext.png b/apps/documenteditor/main/resources/img/toolbar/1.75x/cc-plaintext.png index a06586d6f312d6b567e8c79610da4a0019e90f9d..19d241035361123aa1af1915e60d4bf52d9633e3 100644 GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe0VEiBYLqtuDW;MjzhDN2vdL#HfIMAK7srqa z#<%Ae@-i@R9C2t%{y)_rsltzopr01p!&2><{9 literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L0VEhgKPycJQcNX5e!&b3Ws}cZ0C_r|E{-7; zjBn2^gwv^;^OS=yw`YP zDv-}o666=maR2}P4SZ?~fP6Pk7srr_TW_a0axo}yu$2D&KfhV8QBGvB#tp|0MrR6J zYdVt_Rd*%qUACwo!nw0HWJ literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!2%?2P273}NM(7tIEGX(zMbmGb-;jwvU5AW6aStssV{ZXyVzIxnP_1i}u^|z}PCT?M0 zx#o=BsZ(#lh1}-~y2mDUs!pp2Hr)Te>*rsoM@>8PYq$;m_O|}$=Kfsb{AJ#nfNr3z N44$rjF6*2UngEmtKgIw6 diff --git a/apps/documenteditor/main/resources/img/toolbar/1.75x/cc-richtext.png b/apps/documenteditor/main/resources/img/toolbar/1.75x/cc-richtext.png index 0e2b571a8e7cc05f34b57f29f0a51b1ffbb0b255..90efc38fb7b64b09ab34db05b25cfbfb42ee5632 100644 GIT binary patch literal 272 zcmV+r0q_2aP)?xte`;I(BB!1j4Mj;r6VQvCEp^C3~ z3RCxeR7_$>Okz+>SBuuhulcknK}I{QZW-^eT4bs*iPd2>$W&u$m-(ZZZkDOXl+a2$ zFhGpyJxgI+#`kq5sI1%SV26&*M3oJn-P2`)%AyvrNU&g^k|q;X6n08_izP`hC6#mb zfpHOHN-F2<1K$YeOr{ce7{WP|sl-w9wM?m!@1;hWLM7iztug)1ziD>(rpGYM47>p4 WVSqW7w$vp60000`cGEakt!I&(urNQuu sp^1sei3d?fw`N`Cs>+hNYVm=AK`2?y@U!oEFQ6U5 mysVd2&k9=`Ww2`AF$RWCYsoEakt!I&(urNK~y orGaN%sKbV)c~b7Cd^QXWSznc9e;t^R3RKVF>FVdQ&MBb@0E%Q6EC2ui delta 85 zcmXRfR_qM$bLZuf;$mQ6;Pv!y2?EkKKrF|^3=;V^_0B{^Rb2^B7srqa#^eRo3B0UK j3VXRY#CldOH)LSA?Jj*hhr@*hsFuOg)z4*}Q$iB}2mKT3 diff --git a/apps/documenteditor/main/resources/img/toolbar/1.75x/columns-right.png b/apps/documenteditor/main/resources/img/toolbar/1.75x/columns-right.png index 4b1d7c9d457422a48507e03ef051b725c4dd483b..e83695c3a2da6642951a37fc8d1cc7fd472e061e 100644 GIT binary patch delta 93 zcmXS`R_qM$bLZuf;$mQ6;Pv!y2?Ek?K&;Hf3?xG;r~I3!sA{U<>Eakt!I&(urNPj| sWQwWCi3d?zvs$llRb|OswfMlmz$hadpE_yoZJ-_oPgg&ebxsLQ04muUCIA2c delta 88 zcmb;}Q|t`zbLZuf;$mQ6;Pv!y2?EkKKrF|^3=;V^_0B{^RRd{H7srqa#^eRo3B0_e nJgk>ihpoL3Ww2`AF$RXYN)pccavW2D${9Re{an^LB{Ts5g0vQ! diff --git a/apps/documenteditor/main/resources/img/toolbar/1.75x/columns-three.png b/apps/documenteditor/main/resources/img/toolbar/1.75x/columns-three.png index 94141dbebdb17dcbbeaae93fdf9b74aadf0c9b8a..887ec8a1193337e3c14a64b04a6087104daebabd 100644 GIT binary patch delta 88 zcmXRfQ|t`zbLZuf;$mQ6;Pv!y2?Ek?K&;Hf3?xG;r~I3!sA?eX>Eakt!I&(urNLB$ nrIBZ?sDg)o?_w!-IR=JH(bP0l+XkKS)moq delta 89 zcmXRbSL_V%bLZuf;$mQ6;Pv!y2?EkKKrF|^3=;V^_0B{^RYMt17srqa#^eRo0=yih nJgEr@QAf8rWglEoCB@8;_gUm(x(kmsP(6dEtDnm{r-UW|lT{ZY diff --git a/apps/documenteditor/main/resources/img/toolbar/1.75x/columns-two.png b/apps/documenteditor/main/resources/img/toolbar/1.75x/columns-two.png index daf2a11611bacec39e20b02317a8c4c2f9993efc..bf355e754c88d335e88163cb8aec38fd1258b211 100644 GIT binary patch delta 90 zcmXS`Q0xrwbLZuf;$mQ6;Pv!y2?Ek?K&;Hf3?xG;r~I3!sA?qZ>Eakt!I&(urNPid pq@#gnU8r_L$2=)_Q$8C8hV3ab$;>}c)I$ztaD0e0sxwY7OemP delta 88 zcmb;@Q|t`zbLZuf;$mQ6;Pv!y2?EkKKrF|^3=;V^_0B{^RRd{H7srqa#^eRo3B0@< nysVd2hZU}kGFUb57z2Z6llaTyhZ}Q%${9Re{an^LB{Ts5i;Nfy diff --git a/apps/documenteditor/main/resources/img/toolbar/1.75x/dropcap-inmargin.png b/apps/documenteditor/main/resources/img/toolbar/1.75x/dropcap-inmargin.png index 90b34b2f616c0042724b764630849cb62cc20e88..2b8716c104d36df71ebb5e42d2434836111cff2e 100644 GIT binary patch literal 211 zcmV;^04)EBP)?O?YPO0WbUkhe;FL%ev8CEl8EN`J(6i@X~^_`!ZjnIpoB;3fzGjr z8eC0ne*NyS2)g(iW@)^B`!m%njjxGpPS^D5&0!{HBFw~0%tQ#em>vo+H$@h$=ga^A N002ovPDHLkV1llXSU&&& literal 238 zcmVXf^EkDuW+sV{nVMBU z1|?=qTC{{)<9P=llPDA#vl2~-7Hwa!%E1O0wl7%i4KL$s`%7!V>Q%F_Wl3wn8e4sJ o+8&S}`L5bkyJ}bMsvW16H#$#GU0|%wzW@LL07*qoM6N<$g529(=Kufz diff --git a/apps/documenteditor/main/resources/img/toolbar/1.75x/dropcap-intext.png b/apps/documenteditor/main/resources/img/toolbar/1.75x/dropcap-intext.png index c0c17b5f4b7d4228f74e4c3fa0c2f5ac710e6b44..2887f887950e2f04230b04de712f92acd61a7f98 100644 GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!2%?k<+eNnQgc0B978G?-%j=xbTZ^|Rc7S$ zczI#AWQq$@PyvIV79;1>0M0~4ordpkf9u|}y}4z!v2UK16NlpJ#cao)7B`z;x9Hw} z;s1=DCX<~@Ep<3POg<>MZM(-F<<5-0>zamtqgEwZ$v>PmF(Ba3!fgvHbr!LO2mg-S zpR3d4zGtuh%dK^$hJT}1)eC3JY~Ww3*Ug`{e{z~nPp6@wniEIl9Q8*YhYhChpF9ER OPzFy|KbLh*2~7YU;ZUvs literal 238 zcmVnw`_|15``56)UN^7p(S&m+`ah(ps>3)hujT(ps>_R^N+b ov6ZSTxwBta?W$e1t9G1IzD~x(fv5)*MF0Q*07*qoM6N<$f&xThM*si- diff --git a/apps/documenteditor/main/resources/img/toolbar/1.75x/wrap-behind.png b/apps/documenteditor/main/resources/img/toolbar/1.75x/wrap-behind.png index 003c08c56f4ffe3f2758530be8d0e2b5117d2ece..928b7e6caf5cf389487c70dd4ac9e965842ef8ab 100644 GIT binary patch literal 294 zcmV+>0oneEP)4K@H?w!11QcPdOM3F!k!n04k?Pw6_`Bvyj$+ojLE|vyH$6&Hl`(|Vf%BpoE+1_Y4pWzHDIzOm;}xC s;$dtFhN0D6^a=43QcQ|TF{$pLH(XBXhc)T&8~^|S07*qoM6N<$g8a&Oj{pDw literal 243 zcmV}1M6@}OPIHs!B8Sl{Eaxv@GCmg&r&=0`+v0!@lPZAFYc;TN9+ ti%~5`R&p-|KBIl{rP0Or7x%brya7dmn|}tB9l!tp002ovPDHLkV1miUY#jgq diff --git a/apps/documenteditor/main/resources/img/toolbar/1.75x/wrap-infront.png b/apps/documenteditor/main/resources/img/toolbar/1.75x/wrap-infront.png index 8f05371c057154544b76c338fc8746d7fa150bcb..08b6c50ecd9d658ac02a37b46ed745feee54757a 100644 GIT binary patch literal 409 zcmV;K0cQS*P)l`n5f&U8)E=OqH)v_8O)D9-G&m@r)KXCKUl7~zcBR#hwVM|!?HBdL?Be-XEDcOO+A4?VEyX^02twJ!5Tg0#nI$blW}!By0~Y-_|)ze99`V= zy6NJQgHE!MJ0Hm_OVb5@ozP$xqAO362r!e}lL;_2t1=>_pRk7sQO)e81t8jn-60FW zvJCstD_a^KP;|nh*J5};(Fu2bkw_aURq9!5JPr=U>LYD|guj~^ zOV;=EjP1=P>1(79_;_7Q2Ye*rParm(9&{NKn##^*goryDs9Z5tG}8zX8{&~KdG2SB z?UUECmU2IV5szYBabEh&J|N;ztSin+$sQ1~J&WCQZLyRBff|g zna18i99R7h;tK^ebX(#QB37C1&9s>N(W)&(oH@#g)@o^s-s6)VR<_Ol2;bwA>+4tz z9pQVdrOFX`fnLj{%1`nFez~mh?rYPAqlSqCZ|#ma95qTD>{MoV@ANcpBG_fL1A6+U z#=e*DOh0p6!^FOq?;Ov<4ihV`@DIlY8!MPtu^F$Wf@6gfyZ8FZ=;HRR->HijyLE-r ff1HSulKw%zwwl%VEd4hu00000NkvXXu0mjf?yj;g diff --git a/apps/documenteditor/main/resources/img/toolbar/1.75x/wrap-inline.png b/apps/documenteditor/main/resources/img/toolbar/1.75x/wrap-inline.png index 188880bc1a40619b9264c7e76eb197e1d0e6fbf2..f56e4d55968bf20c75ce6be662be1586d515d039 100644 GIT binary patch literal 387 zcmV-}0et?6P)Nkl^#)kLT$dJ;{b> z#*B9e#>n+o1w--Kou4+ny=j3rwt6|9=!Gq(HA++vu)(5H!2*kfD1%81#u~p>McMwJ zl7}z}01%-n$~G`1r8I{%sq7=%e^-J~gc^V,nh4#$c`2up`Eph9d*HyCT&@4rrB z7+bmlAP$<;*c3RF-I9&(FPj2F-7T>SnOlZ&L~CAbTLU)f)|lNit;8_8H71+(T%|u4urslg*UCh8_ug!ZcLxKw=69eF;qJXTZy^Rd`*WQZ)9f_YJ`(*6rIlrT?#@CMH#RQ9u7gu;V9(ZnOoA&MF20sMPN?x=D z4Xz!bo4C8s&a%Lc(9w$v?JN&`Ba~M%E9095z7fhpW@WIv;-gunR}ZNO=rar4r12e6 z5dh08l+@1n-4U{?Vu58y>31i{g5?eRs*KICdiZTRPpASY*8sLxXlihlykmox2CvE4 zUa{oWy%|eJD}tB2J;tKZ%E3z3r+W;N+BWqV%S$dbbhs?F^73r0v*gR)I~fWr}WL*&K3iYVIzvfU|;FU=M) z5xP?xU!1+zjNi7w=;QkRXHaj(=WPJ-8qzzMgk|g2`tz;AB#_*#NsY-pk`ACg72Az! zOpm0(q1dAyQ&{b+*}LWRm_o8Mhi+A1vPUp0G;7ph>=PKt!E~5F99-P&t#OeQ0psbOkizBkMt2mQfO;n1&`00000NkvXXu0mjfJ0i5? literal 387 zcmV-}0et?6P)Nkl1m)#7k&r$i zaa7e|Z(|nZzkMt`U(?V&Mt_Joovlgf5@Ea=Mby z-E%B-(sbz3c+%~1y}8iIiHJSP7z-CVIT3MlqXa=KR>oaKe53mZP^^r*i1?#T+Kjmf zFlP~Qo5y#|MZogZ1;knzZ^LedoUTR03Ms>GgB;W%;;QbCUxHMftjJn1|+(uA) zpI^;TgBf`*UCZ3yAM#$f$Eb=ncgH;a1zY)mWF0| zj@QG=E+$@E9b>84gPd5W1w!4&WLiwD(*mLHqt;^L<$b*}lAcOFW#ah0&atSclFu{P h@dfhw#D~4CeFJV$E3w#6u0H?(002ovPDHLkV1mDjwMYN} diff --git a/apps/documenteditor/main/resources/img/toolbar/1.75x/wrap-through.png b/apps/documenteditor/main/resources/img/toolbar/1.75x/wrap-through.png index 91a1750427922134904a30689747c3de4abd511b..f252026f42249200d90b5506dd8d2c01d8b4c9fd 100644 GIT binary patch literal 416 zcmV;R0bl-!P)l zP@l6t$VxZ!-^>ustd|4NeH~NB^re`fponQ9XNIy5Wd?E-$M724z@(tSSl}?!eT4xI z5n(5`T^Wi5!We#a(q^Egk^X2!06;)K1p}7H^lxD*sfm-ex2zYDnUXr6f?L*$2$P+v zzCw{H%FZH8Q&m?en5t$Orkb9jortTMi>NYd`iKc!)kWA%tAWj8afk5EtHPp3FJIYb zJ8nO+`RJu9`)tQGA`dI$N;L>$NdG?Y9Ofo{G+Sp(; zc>;N(Z6LoNcQ8Vv+5~8L03I3vz7f|)2-yhHC%ulTW9nwU*UTSpKG6R-F3i{f0000< KMNUMnLSTYY*s|0B literal 403 zcmV;E0c`$>P)+AySg6TW}j(Hy|Uh0k;9S0V8CDjF1uB;Fypibmx;Q^`S8jI8luK z8UG+evwvd-_}4KO-mpge_r%FtjQ{A<-QkWCLf=fZp+0j?oV*1*q*!pckz(Nn5kh_D zRS82`59jI5jGkU%Vc@1qM{FSfYu&e3T6q?6AQxldN-NJIws%Spm8{Bmu!!&U{0Oot zN?Fu8nREhxT>773(R#FEO4-)dKV-d?l84n8b(6MwZ#Aj!G zomNk4(>Xd$ewPx}Heu6wI@Z+SirjH!SsJ{PJLZ=w`NXS7Gw-9tB;I&OnD^0Q5^sr> zw3l~g8jIKxOSmv*`X>*~@`C#@v$KhFt1*_EJ@ScF77+SbM2bzUvVhRfB2rA^b&$-m xF`_@00$%-{9Dc8f5&gLo(Ei7bxLLE`v2Wb)U@||8B?kZi002ovPDHLkV1i6Vv_=2` diff --git a/apps/documenteditor/main/resources/img/toolbar/1.75x/wrap-tight.png b/apps/documenteditor/main/resources/img/toolbar/1.75x/wrap-tight.png index 034f82d43f8e3756e6ffb97133fd549630d28e8e..4ce614615edb41a20a084f335b59a60066e01c8d 100644 GIT binary patch literal 405 zcmV;G0c!q*c^}U&GWeeJLg=C}LX4nXV+7jvQ^hf6c96Qcz&5aM+!K4h|dq zL2kV=v=Ios|JB*bT9H3n8vwvVXDjQY{9BlkG;xUS65~~5CP~Lru*7&3Vd|G0-=N5( z$j%~6OO9?(FgcoKn6f-=b|TJZ22o{-{Dujfqe0kB#lUW{xI_5hRbkPi7q9HI9e12r zee}YWeYWE&nWvR;sTzddhyBkWu8hmo0Q@aB2nFJWSE?yXsj$=+i$mfo_H z7}GuO$6aqta!g~8GrIJam17#CoZj`;1x#iSCO|Ve*fDSm_7U>4f24RG3kZzD}zzB@M2#nw(;1C)`iYry>Lvdby0*?Jz zc4(SvUt<#J&)yeauuA-S;-HMQzg@W}Zqh4Po;fBC%7BF@U$}t>SDrabVaV&@INXup z*RwAS)NtX5a;W>|y}IJcl87D3=nGd|SrW0jV*t-tk;a2We8=y5U_}}aN>}Tje$`^i zNr332KJ97^eb!S>0-y^!=fs=|C;e`OEN@A~EKvI01X*ZFbKEq4t+ZuWF)c->%yH0d z2vph>i%y$kfdwweHFYd=fj4qZ{Bs43ykeB|)>=g3m3M@BYb_%28kjS6d8Mag5^G=v z7eY@z^I$KV_}(XWGI1((^u=P2bYh+cDC#ssoJ`Eq07adKh!csIMv`V>#2q8%oWR-b qq~rfO`vyJd1nPZUiK|t6kNpGpmrljAJZa7V0000 zs#Tv*jG60M1yl9in_o74ylH_WTfH4m^v0I+o+K&=h_Dz`u)!iD$zU>rv8P|vQR3@U z@)jlo01{M3i4&)!jpk5#bFY0A!PL>HD!A8Pq(a8`#9WD3x6a%|Fun)oN(9}zn`|?E zJZIxMbeM|><`|#h5qc+5DM$GHUI{`G8UT(GtB~GKI94n|*iJYTD#W&JgR!S_|8o(; z*tQJ-Y0{*@rof?POLlz!*%T0Zw!|uA9u>wB?KRlOi(wuWzzxCn^3Avcpw*ErBe%&_ z05xQ5!X`Z$Q%uuJ45LS5s%c^sB4TG!8?Ti~>?TAAZulH1BuuHSYNo6|y=Bv~Y1J3h YAF$BVc~T-1V*mgE07*qoM6N<$f}WE7tz6sTfA8g{D>&8WLCx}1%5=7hs?^LyyC6drdJQC2gwv^;_@F1oSmJ& zHW&*6McGP%{DK+o{|CYyvsYdMiUfJOIEGX(CQIyV2;^iGIjE$j$C1Dwme{n)b%X2# z7nv1n+Bl!d?2wv~E%Rc1+lJXMTZtJiJ?vmp*la4 bZZI*N7u53HvtrEwpy>>ru6{1-oD!M<`h!30 literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!2%?2P273}NTqnXIEGX(zMZyF@PGmj^Iqu< z|2gDbB^5rox^f+;iu%ox&*d&rY^bfi@4VNw?iQxEy_`?0_HYH|2VOPbF>9Sr4Da=W z)vV=zuEy+GHj8_ER^V2-KVh|px_`6qX9`OE*JnBwbBNhTVb9IWGYd`v?PKtC^>bP0 Hl+XkKIkh<3 diff --git a/apps/presentationeditor/main/resources/img/toolbar/1.75x/btn-ic-zoomtoslide.png b/apps/presentationeditor/main/resources/img/toolbar/1.75x/btn-ic-zoomtoslide.png index afaad7999bdf5e5ab46296baf75b029b1591c1af..2026ad2268bb82c5e520322352cc7bedc5a2230e 100644 GIT binary patch delta 318 zcmV-E0m1&)0@eZ{iBL{Q4GJ0x0000DNk~Le0000+0000Z2m=5B03OMVUy&gre?me+ zL_|dY|NlcnL;wH(e5s>}0000EbW%=J0RR6m-!R|bFmP~iZ*O+y|BV0u0L@86K~#9! z?bTrmgdhwC;G1)`^7{XO_vGk!oj9Z7prAn?2KprWX0NC2ROHuhNbn1c`vNfTkT%1S zw-_13W1!H;Z3aq!V;Lw)3db;5e@n>}$Yo8|JH^;DCW*6J(fZv%hv@$qY98Yd09C$V!=^y{jo4g0g#WvQwYb zq?;#|ox>0=q6nv=!txl;$ QBme*a07*qoM6N<$f|m`B3jhEB delta 319 zcmcb{be&1DGr-TCmrII^fq{Y7)59eQNZSCh90xOyba(5mov5f>?*In>!N9}A!%k^e zD^QlNB*-tA;s1Yw`v&*#3m7N}C@5Gz%-ju>Ip^u(7*cWT?UaLjM-(_*wsK@G{QrNq z_nB=$&9lvXzg@BPU8K*##=HLC+83{@cm1$>@Ze>`-C*`M7W)L1k_YFG@dQg`D$Y5i zdNty+RpZQpddEqbPeXHOhKX%`6L!zfMKZxs(B{B|uEy;=>Jpv2IxS*h+t^mmT6nnj zRP8Gyn1{0-IrA#Lv5?ipRbz~zWu8xqsDTU{Dkmtzkq&Y N@O1TaS?83{1OWbgiJ|}i diff --git a/apps/presentationeditor/main/resources/img/toolbar/1.75x/btn-menu-slide.png b/apps/presentationeditor/main/resources/img/toolbar/1.75x/btn-menu-slide.png index 484c844a41f2976c955cde871b4fea13d48177df..3004ea3ae3d2919a1758f313c469f3b7373a0c01 100644 GIT binary patch delta 141 zcmdnSxSdh4Gr-TCmrII^fq{Y7)59eQNV@^CG7B@1ylt5nH&M|z+0WC(F{FYqSz=a0 zASa{9K_xXkjsym=#HLlQ8)PTA$gEi1CiqZhg_Lkh@q(-aLMMFK*;@>iqt3373aj`P rcyvj}{#K3ULQ+4C5NsgsJ8yGxY{an^LB{Ts5l9?=c delta 140 zcmdnaxQ$Vj4V zASWA(Lrj{ugaL!M@j+3o1`aWc>y28MoDyb>CSFoYm_7I5C9V@D+#xeq_kUSYB47~^ pYREM8o8T!fe;>vdotXyA4B{>lTaO7P{RCRT;OXk;vd$@?2>>8?|8?k_{APD+%%oX88aA{{8!J?ky?-inx2aIEGX(CQGz51PbsiQ1U8Rz!1!QWQEQQ zo~ENGcuZX-)*a)_>S2!IRkm_=WIU!2basVQScXM+QrqVbJ?k(2P@3b#@kr< z=Z@q7u~H5-3*ndtR#QK}KEm{Hz1j@cPf?9AyLNtZDVSyT`R}HlQ~Zzgf%Y+Yy85}S Ib4q9e04xJMk^lez diff --git a/apps/presentationeditor/main/resources/img/toolbar/1.75x/btn-presenter-view.png b/apps/presentationeditor/main/resources/img/toolbar/1.75x/btn-presenter-view.png index b1a5c4f1577de1c2278be463d851b97e5ed64e42..2ce1bb2aac083f0afa8493e59ef51b0ce13476f8 100644 GIT binary patch literal 243 zcmV7WD2~Dij_~!ssa4wW9%uy^6iz`%tSy7yY t$AJ=~KedaSnWr`}C&K*D9hfm@?g1^nF05AWEP)An_9i z{KRIN;2s;AupYYwf7R~As~%;50JFM$YV%c(2zUAjd>w`vZk7|{cAdd^u2+))0000< KMNUMnLSTZnY*#k` diff --git a/apps/presentationeditor/main/resources/img/toolbar/1.75x/btn-preview.png b/apps/presentationeditor/main/resources/img/toolbar/1.75x/btn-preview.png index a16b876830cf44671668daf2c695258806f5bc07..c84bb8308752ec2b99807602ca818f87c88a69c0 100644 GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!2%?k<+eNnQujSw978G?-(Ek++ibwY8sL_| z0z^wJLboTdge4dQ+5HDN_D}!TAR=V#cU9?UaqpVt9uL)HpMR{FrEcW-+11aN(Ruol zDSZnLFTd_=`7~*7@+pa18Jm(fBxW@-Dt<~fOJZm+G(RxKQOQS8<=7L)Bpq@BlaVF1{9Tm-jp5!}GVFo%m_1|Nd2 z_z---hhYL8c~Qc^fkg+Ov_`L7@re~)x5wKL9fmh}<*AP0|EIc8>{oT*g4nNW-dsE? sf*Ys^?!{iG32+kqK+^mlh{ZBDUrThnevH2A;Q#;t07*qoM6N<$f@c|Iy#N3J diff --git a/apps/presentationeditor/main/resources/img/toolbar/1.75x/btn-previwe- exit-fullscreen.png b/apps/presentationeditor/main/resources/img/toolbar/1.75x/btn-previwe- exit-fullscreen.png index 90f29a8bfe5e50ee350c352fb70d39cddd7a7178..569de12417de339b74eb0f7beafc71981d3d92a7 100644 GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!VDyDTPDToaGN>U`Rf~6KyRTvkYh= NgQu&X%Q~loCID7>FSh^y literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L#0(PoHuVmW;tcQ!aRt&YE-wH7|6eD#%^S#J zED7=pW^j0RBMr#0_jGX#sbEZAU{{ckAixkL!^7iqs%o52=*DeGY?9IB$ yWN`M-0gh$T5+X0o9xvdRI`DyiV(@hJb6Mw<&;$TMFfWt< diff --git a/apps/presentationeditor/main/resources/img/toolbar/1.75x/btn-previwe-fullscreen.png b/apps/presentationeditor/main/resources/img/toolbar/1.75x/btn-previwe-fullscreen.png index 7d242b17e19aed36a34f3ac678c2b5a067fb2ba1..e9c8abd51f7f417c39d64b8e4f14824f079da179 100644 GIT binary patch delta 133 zcmbQnxR6n?Gr-TCmrII^fq{Y7)59eQNV@^CG7~e945^&*Z=#}Vw40}kV@L&K@&Z$V zQU;+lj66K69cY#14hy&b{RcFe!PC{xWt~$(696f^B6|P; delta 122 zcmZ3;IE_)UGr-TCmrII^fq{Y7)59eQNZSCh91}B0@F*}H+pF?hQAxvXEakt!I&%&q+l|| q)P%vqcx}|et*aV~76vYKq(Mx7Y27EKo6nr>mdKI;Vst06lIN6#xJL diff --git a/apps/presentationeditor/main/resources/img/toolbar/1.75x/btn-previwe-play.png b/apps/presentationeditor/main/resources/img/toolbar/1.75x/btn-previwe-play.png index 1734c9b9a3056d13a8a0b4e08a1ff6aaeeb88c8a..44730da761623589e53719640ddee91119218318 100644 GIT binary patch literal 349 zcmV-j0iyniP)BRU@$!lB-nW#GWZK_=%m zlVbU8PRS@bYHOB(k@mf0LaZ0=!;_kpZdGDpjxGay^cdh)GI*$xl_Iu!UVrq?%j-$V zoXJj^%X~`#GnJwgnJjW$6e5#FE=-Y|daA+@xv8f(p~arTjj~!xh@pj*7Rbgf5JgT!u_mX2Sd~*j?D>zx;s}g6rD97?7qKO$7+X$>c&qsJ cX*B-D2Oe|XNW_E*`~Uy|07*qoM6N<$f+SsU0{{R3 diff --git a/apps/presentationeditor/main/resources/img/toolbar/1.75x/btn-slidesize.png b/apps/presentationeditor/main/resources/img/toolbar/1.75x/btn-slidesize.png index 7cb166b8acdcabcdb3b2db2718e80f7c6c5ce3d3..8f0bf607404f10dc527ed78cf18b6ea8c7dbbae9 100644 GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!VDyDTPDT?|8?k_{APD+%%oX88aA{{8!J?ky?-inw~ZIEGX(CQH0*5Nuw`aAbv!o1;ZTm&U~7~kn1#;$XFqU=^q$Q8M~Coa#>yiTE^h%>gTe~DWM4f Dh?_LD diff --git a/apps/spreadsheeteditor/main/resources/img/toolbar/1.75x/btn-addcell.png b/apps/spreadsheeteditor/main/resources/img/toolbar/1.75x/btn-addcell.png index fd1b9183740eae117497c34f166a3628132410b1..9ae5e1abddc4abad573c6b5cd405ffc7ac5df021 100644 GIT binary patch delta 138 zcmbQwxQtP;Gr-TCmrII^fq{Y7)59eQNV@^CG6yq|lsnlIKT%ON!Q0ctF{I+w+Y1}{ z7z|ik1JD1jFHxW95jx##im^n#!(!cl4(l`pKF*0%B2%U(K20y#At`&_NF-gum^nGz nKu^qZ&k6OJm4#Qu`=i88-(bwN%T#*+G@ilJ)z4*}Q$iB}jutC4 delta 131 zcmZ3+IG<6mGr-TCmrII^fq{Y7)59eQNZSCh91}B0T|8YJLn;`P7uXdv z1jx92a&5ob-s=2iGXrCY gl>L0MUoUwXj=obYm}c@x4rnfer>mdKI;Vst08~#c=Kufz diff --git a/apps/spreadsheeteditor/main/resources/img/toolbar/1.75x/btn-autofilter.png b/apps/spreadsheeteditor/main/resources/img/toolbar/1.75x/btn-autofilter.png index 5873cde3e31e59847fb25243214404e6151c4d0d..a93bded8fd67a98fc26098250486e32edd65d06e 100644 GIT binary patch literal 195 zcmV;!06hPRP)r15JOQFM`7w52LwKWy~dG5{^t$B0-C02zpk-$)8ner*==J5XBV+?Sn)fS$ev@W z>^RoQnq#i4IG)IyERLtq}_m6nTZ)lhEz`ZH&Id5$K2D!F{FYqS;DKq zP=uv{XI-en2BvO-uem%NsjU+Cw>WjLI(GT+SH(qrii;E;i?4YUwIRvls3}9(e6cex Ty|*a=jbiY0^>bP0l+XkKRoo?> delta 113 zcmbQl*vqKc8Q|y6%O%Cdz`(%k>ERLtq-}s$j)@s0@@?v!iHfT3MxHK?Ar*|t5(NjO zxL6#jLSD+~j Mp00i_>zopr0BXA-zyJUM diff --git a/apps/spreadsheeteditor/main/resources/img/toolbar/1.75x/btn-clear-filter.png b/apps/spreadsheeteditor/main/resources/img/toolbar/1.75x/btn-clear-filter.png index 03ea81cb7065199e5cb414fed3abaeeb3dd80b43..c954b75ad1f2f211981f5c832d85f0159a8510e4 100644 GIT binary patch literal 290 zcmV+-0p0$IP)IftUd$A!SI7%-_I0O~i!i$&I7xm%K7eKd7M@Q$s$9jvT%l9hikv4t> zXB44v{EF3~M8+IaWyGOI`W$kl$KgbtIjqVPha0))uq$^QN#x2ARa%ZTQgg(WGiN4J zI8&9#IWUuvEm>wOig_c(1_$}xfekVY2K-eJFbFXQK6~OgaJvB^25?WDawpoR#Nkn{ z+msMYO8(QF-y9qkCI4xvHxa_4WX}0Hu1el49%lh2a%zf!a&|bJ>20c~oD~UY`T#d; o6v|mKj8D74NIz{I9i6w%7ge_wjXh>UOaK4?07*qoM6N<$g8!^?kN^Mx literal 273 zcmV+s0q*{ZP)?fR$wjMmizwx*_`_i7@0r>3LtY6knN=AosU$>wT4dZ|0upx(t@=oGzu?4OIp zsvv$Tkd`OL6%Q5xEmJ&$@IkFW`5BmEKp)iUP2B5r3hIZZY13Yxr=ZkCZBkz+Wh4qs zZrSA>quKt0%6LhO^m$aS&ag2kR#W zq6^4yHW`R%cQ?JDv>nQbT5y_S3nrLPAR3``C?X2s3>lbok8`uYw08R)43qA0ZV-&! zeuo1?w5I@uXiovml$Wr~VHk^8OaY8v!$XGoRV^@04BtcgMmY+`Ye1P%2nI)3k0GXE ze25WFH|EBlkU}V#HYG4=o4P4CHi>V(O&=N2BCEMc3>W~yWo{A=#)H;c^$X%jo7hyPBofIt(Fg9~whlwJF=!SZvNvA# zDmJacW7cBOCOEIx8T9ttEW7QT&AMLVYrXj|W8$~DtUo3gJchTz=RTd7Kv*ci%?-=;Yq(ki9|xr39uA^ URs<_)9{>OV07*qoM6N<$f&uMa3jhEB diff --git a/apps/spreadsheeteditor/main/resources/img/toolbar/1.75x/btn-decdecimal.png b/apps/spreadsheeteditor/main/resources/img/toolbar/1.75x/btn-decdecimal.png index 5e24d9f3f759e2498e39c36713896a81d027995f..84bee01a4f003a795410dfcf1e13f8d7d4cbf848 100644 GIT binary patch literal 310 zcmV-60m=S}P)6D8{g@Py--=CsLL4tfmsGUR4N+nrnZ)qxsYmJ0zrYIAI!bml9z#wZK1Zu<-ZY?pf znlbNBJ22$d5{23s^Zqn2M_}~j0(Zt#q_v*z_%>qnvH_*)(ff4Sjyid)G?T6+WP7~ng<^)Q+uF+`R4NX*} zW=j?mij*ZwGjGvF&l@GRcE$z=FKg0^OZ5959Tl~>pk_s0^kN)Om&G`qn)p|b-M$ar z)Z?0!?`7z5;&t%R@!BtHal$H6C#x>|ecXPjbDS*CjHS-8GJ6jkXtZV#Fq*ZTV=!wo z!ar$6oC#OzRGe{%Q*jJ^<|l6au=QI zsR_%W3sGAc);nFi5Wtaqb(LsR+i^ZSlQ{jJJ z3ML3#nO3^#e*X_4Q($mX2pN%9yKOZlBZ3M;4anKqunbdDqU?nL0000q268I5_VntE-S$eltbwrjE>@ z-P|P+w3`A4?Iyr+yNPQtYT&J zA`T7?uCA^S2CC$LxJHP$hldAHC6Emi2a;}XZa`f?5l2TyWRroiKr+oB*-tA!D0RU{q?goX(X3JD4E@d5A8>#q-ZufM=x zfk8n*fWLo#zd?a+yRan#1LJg07srqa#Q3+6#$~?m9PTcTawU%{_5^M0Py;AZPHf3QBLvYcI z;8}aG@Jk+>AYW$BWC zhc@g=Sf>)w*MH^y;Tg+w#O-gs_E@EN%tp8G!(^GGL0>(@gx5tFxSlm|eeS`*fAZCp z)I-i3(;;4&Q7t=>ir8dQ5L`|JE;% WTZ~GJ2ZMq6cYtO@DJp( znn232n|B{L!vGX?^X@|XY{EpGvdK`pGo^=tiI89zYIh<<)3{=_+MO{4<6mG{?cNx? zucz*e!TWmZ5fd?Aicu3DS4m3k&KSe^7ZOVCP7Z^brpH6hUG2`80fzK=$mnW!U(unL zBGBiEo4W6c(4zpa5jXWl@UF!!Xt9g1+G)Qzg<;sd3lYh+NzOHLKFkrU`ff|FX%)Ba yCv(Zh+fU}w;G!aBHies{w3;(NG=YO4SmX|A$68$sb_lQl0000*NV1*Eytr4cRdKXkMy(?1^s9bc&7j??N`P@yDTZ1grULG>nGNvPPs7Bw{XuB3)zmM*gwv^;_@F1oSmJ4 zG>|M$f4~ov<0uL83ud_g|Nj59wELT8Uho5o#e2FqhEy;nOWbtu;N;|BV4V>=p}{z! zmx)>1#jqocAxMXZhcm&hBW>YssjC+hW^_9{AI!RRDM7Ey+q-erVG%Ay$AaQJmlO^# vo={wn7Q*|mKyFIrVh&4N@q}g11$i0%-HJ3>xX9@W&?*K`S3j3^P6{>+M}0y&b2w-JMUD5ThRXP%U(;}KA6m> z9Dbd#>3rkTd)xG###||CQO?) f3ock;u#4f#6vy{BSzEM$u3+$V^>bP0l+XkKigHHS diff --git a/apps/spreadsheeteditor/main/resources/img/toolbar/1.75x/btn-menu-pivot.png b/apps/spreadsheeteditor/main/resources/img/toolbar/1.75x/btn-menu-pivot.png index e83913f9a7c25083b02f700cbcea2cef4573c029..f1c73e7e23431272dbc9fa3fca2c7d8b0b871dc8 100644 GIT binary patch literal 317 zcmV-D0mA-?P)-=I1fDm%gGp1}{TJbqt4;g^$J_ zVgfSwXsn_pVJRGZ7$PtVf&o*jB0Xf*V`^34f!Vz>L>y$5k(@s;0#+zzY3?SzNExCJ zLxc+oq8meW9cA%ih%jO~0VC5XnCS$}5T$T**Axvk)ep8?PIuKL)H>LZp`4|~oYJ$s ziYn%WXL}Vj6i#_tksSj@-d1GB3~{d_D+Y0|A~Pl#FUktWdQtZD^tkc{`p*Pdv+&PI P00000NkvXXu0mjftSWrM literal 274 zcmV+t0qy>YP)6)-+X9UQRw(U!MO$XlnXf z5$x|Z7avFf`=Te<7d7y&!6zIpO{%N+>vS4$y3nB&xdz4shg#&ihwBDjxmGL z8R{T=%R3bdSn`G)#RQfkDs=bu7zJu>6`Z=vd2)g~FeWEBggj>UfkVIuc7li4Gp$a? z5sXy@%Zo#WZb9v_yf`ROb8Fw(EK^7%x1JwCMo#$%@p})V(7MIGMP+ZcJe&4F64@Wxm!Ij zcdIL6mft4tyX5F{3DclNM3=*?gWo50xqtLn+U2hG`RM+gS%2k% zzHmL_urtiIY|>FvST^0LQKL`b;=$UpjmH*UuJx*Yww)^Jzp|_{+{53sO;+S;V)%SCDAKm6S8R$F)Pgg&ebxsLQ E03>u$QUCw| diff --git a/apps/spreadsheeteditor/main/resources/img/toolbar/1.75x/btn-named-range.png b/apps/spreadsheeteditor/main/resources/img/toolbar/1.75x/btn-named-range.png index 1c82aa0b27b70f4aaf51583ae983e77fa9a19569..b3e68275e477308b485419c17bd33b59f86d667e 100644 GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe0VEiBYLqtuDW;MjzhDN2vdL#HfV>n>7srqa z#01PKWVQLHQq`xrQwekydFQ}?swaJZ3Rr|iKz zVLj_b1*sDU4k<8PS%2Wd0hVd)A0#^-E`IH9KA-0=PeP?a?_~au21jbLm>DvPP)y z>-B(uNEph`z3ZLcgbxbI#L9(^2A4Yo0f2|#x&3jIZcsRmqQQxK}6vBq zsH|vZ?jZ=(6}`$6uV+n^Epso2*)sQXn2Na3*S5Gobij=2R0)g`%IybTDOnwpyaTfaMX0KmX)$J+n^002ovPDHLkV1j}QwD14` literal 389 zcmV;00eb$4P)O8DgwtO2LE9I$OAH+ z!2nGPDDL6m;o#r^Q47=yR0UBF6oD|{+98HGIXOY3fGQy(KoV#I#1Nnf?(XhD5uh@e z&zF3G4$?0P@(X6T|NcJ^IXEnszkfXlD+nkEB;0REXecPCub(g>z99bm`t$ku1_}lX z{QVO=Ym(a-7#Kr6T^vIy7~ftFo%Py)$02d%T?1p@;_v(S90<=-+8;L~nC)-k5ANT+ z7d}_Btu8FA(@!*YU1?+x#gUs-Htns1#P!e2%)&-XGg^!`UWrn%n4HF7;y$y9xkD)3 zgLT4fjl2+9E&&@z1SL>ES*7-uVhgx!G#LH!DIeFw$VckmC zO=p+n%C5S`{+nrdlz}%fj&rutOmn^E0cxptf4g@X zwZ5@`%#@xZ%^-5>haE%4oS#O<>t@bu$roPyw0~k_tsCdeih3 zSV;Trv%=kxGmh=EpSUyp%jX^U^?Y96H$GyObHzQ(*JpC=f!sURIU#3WcV<@B)Ze<$ z&unbTEFCt*Tu^?-$;v7H+Fl+-76zLShfSF=-N3k=zsR*QmMxvl?oBmo3|~51l6~9# af4kh+IR#2?9yA1{CI(MeKbLh*2~7YBoDysR literal 468 zcmV;_0W1EAP)K_##RmM~ZjgB;aC+<{#}N^l2J2QEP+s05ZUCH#Ak*QPhS5XAsF1fGik z0fUbs-%ujYde(Q=YcNb7-x+Pa1mLe;8ha&8wxn|>Jh5=@f^{(0Xs*M4m;oo^3>|Pj z*eqhRojTwHvj{V%4%n9TCXz;*JK%*k5k}_SaE|7trZ3}Tz*=A;j-rf@0c(QOWS&bd zxtP}hYl0`7LZRSwz#3p3%r#sotpm0VGvHi%(K=ua@EWWeRt2m9KGY{$2dn{JgY~C= zo$kwMfETJ>PWNRrUm*Wn(ifUr=Q!GIZWuMzI8Kon2dJ?o_%)cPvkoE}_QC|5GsAjg z?}SawuL<7|D}GzTUO3-w=??gIOLxE`so2F-gK5VZ7cM9P?SM6;i;+t%9dO_R6iNpy zl8e3Hw>lkjT;Uua|5*R|=J)$nb0n@Xk*(fzOr<_!jj7~l&zMLd!us4C zrEAD_pm;cK7uBkMPpXiix}tWeqj0000< KMNUMnLSTZlhsxRj diff --git a/apps/spreadsheeteditor/main/resources/img/toolbar/1.75x/btn-sort-down.png b/apps/spreadsheeteditor/main/resources/img/toolbar/1.75x/btn-sort-down.png index c7855a84df946ce9d5552ca7d5a9b528a99276a6..28bc86203ba787f52e93ca831485aeef852d39f0 100644 GIT binary patch literal 578 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!3-qjPWHqDsm1`G5LY1W>gwtO2LE9I$OAH+ z!2nGPDDL6m;o#r^Q47=yR0UBF6oD|{+98HGIXOY3fGU9upk6mOH@FFff??Z$j?gX% z@(X6T|NcJ^IXEnszkfXlD+nkEB;0REXecPCub(g>z99bm`tu3_1_1^(tO*?q42-Ux zE{-7;x87bjIq8ssK*Phfw97rmT4u~Rd-u$zfBY700Y@1dH;4Wc|HTk5$~*s_fz#cd z4@SrC>O4rD6f`qI#2H{Hzn9NVNB;1%U2sXOIS=$xC^8Mbs9v9lexZQ*Ry zpw?})hCSo6hH|0)(*~nM8ifH_B3j4RXjHoO3#J{uX&yJ7t^9Lz!ZE*_ z2{RNwiye-#e!4jE*q!8e<{NxV*!q^Sg-Mt2+6Yf9yf(qU)8s{y@AkuVB!ooQ0LMXR z=XBPw0Uns0V`glCbqPo3!a?T-c;VY-yh0=)xZb|kLOSZtO^d3rfAWk zY03ju1y3Xl!$^6+Dq!Df^8E+p^MGx`bR<4{@p-^1;5ArZSQfAfc*rN42dn~KgY{W= z<7pWc@Iuzhcv?pF26Aypzi6(4mHgTnuA+9r*}N^hwZ1XNTO+Jb!9Mf77v>40Z-O6s zC6C!2m>xLpp7HuOM{7QvI;`<@a!y}@m1olq_ywbDg5#j%(+!VNRyay|VqIVdD5m>} ztT4j3G2LkTTzq&57Db5?&CAAgjiML95LoX&!eI(_HggH4Y_ZNUan_4qu*qKAK)i%a i_Syzg@wT`6r}YkM9W@M73s(UE0000f}vgF3-bIfQ~mJ#Q~$Ej+Z}i zz>Hj~AfC<)FM%0e0;8h*`f$St@Zp9D;k_i&nk}14;DS*x%muTL*;1cN>Rd1pqo>fh zV6vs&drTo<^zLIyN39aw&K#*kC(J%()020ah!`jLG^HWg?OZ(xGhnxK_4F~_i@v1H zf5K$b>W9IoZWtAoef}ZBvJA}DMGt8eo`-{9y2qAFdT4nCh48vL#6(tuH6>XJS zVjZIT3g=rph>Q=QY}vBKk>8Llmq?F) R>rMaw002ovPDHLkV1g%x^#A|> literal 449 zcmV;y0Y3hTP)x685QbqvFa$wZ2s_oPlcO253=#;15C#o{KrnQ80WW_&wrFK&={}tTV}wkY^`jyBWYd?XBt~N5_vIfYHfT9 zz)Cv}VJTe2nsz~0XmmlCRNVHanoR?9?Ceo88h|yIy-~e-0M6_I#{)2_x_yLNJ$~~? zwAJh4!8uN>@!%Y_k z2H_nCwjo$MYkJzh7Q!9vV*gqO*LNF8HrOTrzcY{+*aToZls8i8Z3w^z-bnNei{UEP zOif?=>wwKZBow9p7O;8i*jn}K)vb*IE9)vFT;;m`H-go09H$)vwnmPyT(|#Lu=4q2 z){dl7yoyn!y2_nk<%^TKBOy2f$NTT_7_3u!j{#FDZrov~U`;gzOmO(l{(#3|P4%*w rhM`jKu~V?7+MI?VKiTK+?IXZnW|Ty?K<8Lr00000NkvXXu0mjfU=qyq diff --git a/apps/spreadsheeteditor/main/resources/img/toolbar/1.75x/btn-sort-up.png b/apps/spreadsheeteditor/main/resources/img/toolbar/1.75x/btn-sort-up.png index 7dbf0bb98350b26674d6487fb93d23c8ddf5c62f..aeb9be99b27ca834e39e3a33b5e96dc01a3def51 100644 GIT binary patch literal 578 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!3-qjPWHqDsm1`G5LY1W0tU{`&i`S+0Su5u zJUl!g${=CSF>2S>9ui60uYcL`*zLm$&$Z8t=1Da;c=@vUz_&V!GjAAooNJjG+sruq?fO&t z3fGCAfsY2ka~mB8)GqRl*#Qkl@)f z?^_s{zbW$pzZ+OEt?BcOkIk>?^F2HE>h3$izoobrg5~U#Z6Wv!g)IUftiUz%5oBX6 zfMzj*JTO;Y-EBGhOl$?k?P>OTV7WTwst|mIqACLWqhLDSUEm`CyJGt`_+Y)tWu*%_ zU<<`%HD=pj*EwCaJO|uCU*!8=93X{qmF_sDShx^u0dOJMbutv^xWiDGW3D7HNth=& z6I>yH5EekgUjQD^z@SFI8|+Dfu<&<17c2`*2w*Vk zgPg_qE7OKp z@m+8fjG!PO-d}@9u^#P>f-yN2Y+#dEsghs>1)i}B@F-TQuQn}%$!%eiSgG2_GH4C^ d`MrGy@DES4M@~0`$Grdm002ovPDHLkV1k4Ow-f*X diff --git a/apps/spreadsheeteditor/main/resources/img/toolbar/1.75x/btn-wrap.png b/apps/spreadsheeteditor/main/resources/img/toolbar/1.75x/btn-wrap.png index 70bdfc7b4719944423da685b00dcaaa0e26d1b71..2fe75c8e08706af159c25cd613c406bc943dfbf7 100644 GIT binary patch delta 123 zcmbQnIGs_kGr-TCmrII^fq{Y7)59eQNV@^CG7~e945^&*Z=#}VppB=CV@L&Kvc#4K zLlKq+o^_!P8<=!hlr1D2So9RHUAVxoVZyalp}aCnGI>f{vSN-p7E8ZeFK8UXuFJsC Y{8MW7&)&*iK=T+pUHx3vIVCg!0D-S02><{9 delta 122 zcmbQvIE_)UGr-TCmrII^fq{Y7)59eQNZSCh91}B0`<>C-y$P`mZV|m1;5O(00I4>{5$Jt?Pn?7)^<}Yno5x>x3=FcgskAKkL%gC_g XopjlC*9FNy;}|?${an^LB{Ts5WBVl` diff --git a/apps/spreadsheeteditor/main/resources/img/toolbar/1.75x/text-orient-ccw.png b/apps/spreadsheeteditor/main/resources/img/toolbar/1.75x/text-orient-ccw.png index 7703888ab004fa4f05cf8364e5a9778c60cb0f2c..c47dc06613a894a8d35fa8535275efc5ceeda9b9 100644 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!3-qjPWHqDsg?kr5LY1W;Nai_2ClBI9v&Y5 zQ2|iK+1VMQ2FO5_{14X%5eF)Oh`^NrxlT?_5H8RVpaLLpb8~}>0A(2z$_s(+&?yP> z3uX}Le}7*AOq`!!uzx<7XmBuSa9Hra0Ep@n>JuE+-;ZA(uTYQ?cIO}i1EajBi(^Oy zFL&s?|nZt2WhUw>_Q=VfyGou?0Fx}^zDEP-=e@-DJ}Q6-?%if@!kHlox;t(1Gg|Ut5-!&e!A|@ z;yLzjU%$7XIX(2?#LhY2=bt#b>cNqQpD~-Y)Y%?ApB1_@!RG6NIWsRVP^xLL@{&Bp_jLlW97`^*8C$4c!g|9+r>& zNm1;v$Jd0q;T!F#%*mx2y~$EeE&s(>vxGO#59tXM#^Inx(V2##Ss%1~VB8wEC3ApC=a-}4D z`W0E~V`iN)xIh(N^j_e%FKWxT!II>GH zpqXYDHXF!Hv&*|}K;*Dp%_5WK*~(njL)mOzlgIzWe`7&xU_~}t3~q8Fy&-pxJvPNJ XWcv^7+`&R}00000NkvXXu0mjf(pbd8 diff --git a/apps/spreadsheeteditor/main/resources/img/toolbar/1.75x/text-orient-cw.png b/apps/spreadsheeteditor/main/resources/img/toolbar/1.75x/text-orient-cw.png index 106595e029460079eecafc3deaf6b4f3f588b368..2ecb82e6a87d296c06578c34eebb351bb7206163 100644 GIT binary patch literal 494 zcmVF z^eOk)F=m@>w)v~$nsAbvxVjV?PTZ(T*;}~;l}-j{DJGmLu6e_I7yP^`=EPkOwiD-f}BVsdK7C6%BmEzJLit2IBW_$!uCq9~2(PX{+5*Ro3%b|Yae+5iV2QIk%P_9R_rCWZ?U2PSDW0HmL7so}V&DX=zbrru@M12d{#p`R}MA z=YRrf(L1WdSw1Dss(IuHzrkU3$~TTw#7vwj%*2tZn2}S7897oJlR4Fx%#rFCTC@ry kOrHwI!mA zwe+Q?i0vV8a2S=sYw3%oux~=x@smSd`^a<2S))k^9G=KojF>N;H3!=z)(R8HE7uGG zU1kM@cuH^A`OsDtmb6l&IUX;3yH04xo7GA|BOWgNp{=Yt*~xafZA{Ir=iz|WkaZ_a z=rS8~bC2P;v02k(NT;^caO8ohmGlC;v{}Xz1+LHWW3_)~VTHOGfmN~u-~F4X_lF?~=d$nMdh?d@cX!XI=%kEsy;pfx*oWj~Oe zg*&*yAIO$wsEhMQ<8pRIb47TetKfy^s&Jw!;Y4#~7zR=WGnS_UeUG~5o-dkTNwgJ# TTsemS00000NkvXXu0mjf|Lw!p From dc77c54de7b869371257439697815b7a159e036a Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 28 May 2020 17:58:32 +0300 Subject: [PATCH 64/92] [SSE] Add icons for slicer --- .../main/app/template/RightMenu.template | 2 +- apps/spreadsheeteditor/main/app/view/Toolbar.js | 2 +- .../resources/img/toolbar/1x/big/btn-slicer.png | Bin 0 -> 430 bytes .../main/resources/img/toolbar/1x/btn-slicer.png | Bin 0 -> 382 bytes .../resources/img/toolbar/2x/big/btn-slicer.png | Bin 0 -> 698 bytes .../main/resources/img/toolbar/2x/btn-slicer.png | Bin 0 -> 606 bytes 6 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 apps/spreadsheeteditor/main/resources/img/toolbar/1x/big/btn-slicer.png create mode 100644 apps/spreadsheeteditor/main/resources/img/toolbar/1x/btn-slicer.png create mode 100644 apps/spreadsheeteditor/main/resources/img/toolbar/2x/big/btn-slicer.png create mode 100644 apps/spreadsheeteditor/main/resources/img/toolbar/2x/btn-slicer.png diff --git a/apps/spreadsheeteditor/main/app/template/RightMenu.template b/apps/spreadsheeteditor/main/app/template/RightMenu.template index 385e6d61a..c8f9c4ac0 100644 --- a/apps/spreadsheeteditor/main/app/template/RightMenu.template +++ b/apps/spreadsheeteditor/main/app/template/RightMenu.template @@ -31,7 +31,7 @@ - + \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/app/view/Toolbar.js b/apps/spreadsheeteditor/main/app/view/Toolbar.js index ddcae6038..1b3a1115c 100644 --- a/apps/spreadsheeteditor/main/app/view/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/view/Toolbar.js @@ -737,7 +737,7 @@ define([ me.btnInsertSlicer = new Common.UI.Button({ id: 'tlbtn-insertslicer', cls: 'btn-toolbar x-huge icon-top', - iconCls: 'toolbar__icon btn-symbol', + iconCls: 'toolbar__icon btn-slicer', caption: me.capBtnInsSlicer, lock: [_set.editCell, _set.selChart, _set.selChartText, _set.selShape, _set.selShapeText, _set.selImage, _set.lostConnect, _set.coAuth, _set.multiselect, _set.noSlicerSource] }); diff --git a/apps/spreadsheeteditor/main/resources/img/toolbar/1x/big/btn-slicer.png b/apps/spreadsheeteditor/main/resources/img/toolbar/1x/big/btn-slicer.png new file mode 100644 index 0000000000000000000000000000000000000000..61c78064429b72198455f4a2b564234b3062a8f4 GIT binary patch literal 430 zcmV;f0a5;mP)6xS}0u&0nrt*E+w(Z+m zdjai_R+Z`d{u(EmUM!^tOAltI^q`Q#_n;RiwpDpLvE1cJ zhrfIt4?E~U?VphAzu}evV*A1_`Bp$A_b2r)^>`)vcf{Nsra_eUAV7zZR z;si?Og+G}gBDoOr!r6FBIYKQ+Fp^p29E_w_jz|(DJd!_=b9f|IuPpS zI};k0oWZ^0-9_=i7)drVoOp~Ri;_Qgui!Y2@$WY>AbOu7 z5TcaQ%d#|~am=;j=?Zc*<_zY8uImgW5Q|5_q@$+l&gcB>(UMH5@UV>eNw9i#l)gH$&;G+?EW~}NI z8nlucj~0(Xk`L#fq-$_OVPKN7a-Q~0wx}Z~M;8|mVg+VMlnY@6y!o6QAr>S&l38*N zkK{@21?k5@agtc+$6+kKvHB@c$0knPBXvwNw!NGLw{2^nAnc!skfb&E4RQr(FS|iG cO6U6=cMJ}c_Xe$ZKL7v#07*qoM6N<$f>$(_!vFvP literal 0 HcmV?d00001 diff --git a/apps/spreadsheeteditor/main/resources/img/toolbar/2x/big/btn-slicer.png b/apps/spreadsheeteditor/main/resources/img/toolbar/2x/big/btn-slicer.png new file mode 100644 index 0000000000000000000000000000000000000000..530e454a3eb47324c147bef6d203686d6c036b88 GIT binary patch literal 698 zcmV;r0!96aP)h>9t+5e7uSw5fpWcGugqUDfO4xdA7PmJYoIIwaSJFpa|Xpw3!38j3=7xCH%zcfd{g2HN%KINXckm%W35y*@j~__ndrf=(c*h1o{)SG zjOfIi&YL8n6KBN}vK(R}h*+d}mIxv`i6>+`g)R`WXz?ryM06HU$eKn3h**VqmH-jG z#1pdTfgU1OC7#7YL~rqgA`*EA5vvr>;viy>ctSCim?t7uEuQ6xh{59Zzw6r3R$R1e zlHE)PySukk literal 0 HcmV?d00001 diff --git a/apps/spreadsheeteditor/main/resources/img/toolbar/2x/btn-slicer.png b/apps/spreadsheeteditor/main/resources/img/toolbar/2x/btn-slicer.png new file mode 100644 index 0000000000000000000000000000000000000000..389f78334442548eaf59314282e30baf5b8d0538 GIT binary patch literal 606 zcmV-k0-^nhP)jK~#7F?V5pY z!Y~j;&k+MK0;5pD9?ZZ5bvEb<-2>E)!U&xp>0Pj;HpRj5-8qqZPcn%JnDh77`D_7T z7>4nGaj6G~!{Owdd&Ao;X#B8qx325_^?H4W0{Xr`;YBSz7E+6c38=Av?HF&?KAG0~#P*FPDo01&+sK4?F>O^n#P15+9B~E4~H{7Mt7;2FI|` za&&MEo4JlQ2QtZaV5HPRQVxDbX-+J4usM*)YzNkIQYlioFc)(mlWYfSt)5b7)q~G4 z2QslbaD>%?m8n(-YV|WlDi`MVV-94(tphzesSWRYyu5-8E%xi7fKe`_^Sm~^??Es= z?AOx`*MS~|8-fZ0Zh=p+cn|O>+z?+FutyQXgnAt~A>yLqMJ7aiD&Fw@)Pq>>N$nWMdueXJvEGx~d5rhcwiBtuR2}$*ZOc7{ zQ9MT+;^Usea2=dBxmxBvhE literal 0 HcmV?d00001 From b87b9f956fdc598b4c15a5a2ebe4716f4a3f4989 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 28 May 2020 17:59:49 +0300 Subject: [PATCH 65/92] [SSE] Fix size settings for slicer --- .../template/SlicerSettingsAdvanced.template | 1 + .../main/app/view/SlicerSettingsAdvanced.js | 55 +++++++++++++++++-- 2 files changed, 51 insertions(+), 5 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.template b/apps/spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.template index 2da72ee09..ca36d5327 100644 --- a/apps/spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.template +++ b/apps/spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.template @@ -17,6 +17,7 @@
    +
    diff --git a/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js b/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js index 57da61753..b936de705 100644 --- a/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js +++ b/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js @@ -75,6 +75,7 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem this._changedProps = null; this._noApply = true; this.spinners = []; + this._nRatio = 1; this._originalProps = this.options.imageProps; }, @@ -138,9 +139,19 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem minValue: 0 }); this.numWidth.on('change', _.bind(function(field, newValue, oldValue, eOpts){ - var numval = field.getNumberValue(); + if (this.btnRatio.pressed) { + var w = field.getNumberValue(); + var h = w/this._nRatio; + if (h>this.numHeight.options.maxValue) { + h = this.numHeight.options.maxValue; + w = h * this._nRatio; + this.numWidth.setValue(w, true); + } + this.numHeight.setValue(h, true); + } if (this._originalProps) { - this._originalProps.put_Width(Common.Utils.Metric.fnRecalcToMM(numval)); + this._originalProps.put_Width(Common.Utils.Metric.fnRecalcToMM(field.getNumberValue())); + this._originalProps.put_Height(Common.Utils.Metric.fnRecalcToMM(this.numHeight.getNumberValue())); } }, this)); this.spinners.push(this.numWidth); @@ -156,13 +167,40 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem minValue: 0 }); this.numHeight.on('change', _.bind(function(field, newValue, oldValue, eOpts){ - var numval = field.getNumberValue(); + var h = field.getNumberValue(), w = null; + if (this.btnRatio.pressed) { + w = h * this._nRatio; + if (w>this.numWidth.options.maxValue) { + w = this.numWidth.options.maxValue; + h = w/this._nRatio; + this.numHeight.setValue(h, true); + } + this.numWidth.setValue(w, true); + } if (this._originalProps) { - this._originalProps.put_Height(Common.Utils.Metric.fnRecalcToMM(numval)); + this._originalProps.put_Width(Common.Utils.Metric.fnRecalcToMM(this.numWidth.getNumberValue())); + this._originalProps.put_Height(Common.Utils.Metric.fnRecalcToMM(field.getNumberValue())); } }, this)); this.spinners.push(this.numHeight); + this.btnRatio = new Common.UI.Button({ + parentEl: $('#sliceradv-button-ratio'), + cls: 'btn-toolbar', + iconCls: 'toolbar__icon advanced-btn-ratio', + style: 'margin-bottom: 1px;', + enableToggle: true, + hint: this.textKeepRatio + }); + this.btnRatio.on('click', _.bind(function(btn, e) { + if (btn.pressed && this.numHeight.getNumberValue()>0) { + this._nRatio = this.numWidth.getNumberValue()/this.numHeight.getNumberValue(); + } + if (this._originalProps) { + this._originalProps.asc_putLockAspect(btn.pressed); + } + }, this)); + this.numColHeight = new Common.UI.MetricSpinner({ el: $('#sliceradv-spin-col-height'), step: .1, @@ -363,6 +401,12 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem value = props.asc_getHeight(); this.numHeight.setValue((value!==null) ? Common.Utils.Metric.fnRecalcFromMM(value).toFixed(2) : '', true); + if (props.asc_getHeight()>0) + this._nRatio = props.asc_getWidth()/props.asc_getHeight(); + + value = props.asc_getLockAspect(); + this.btnRatio.toggle(value); + value = props.asc_getTitle(); this.inputAltTitle.setValue(value ? value : ''); @@ -518,7 +562,8 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem textSnap: 'Cell Snapping', textAbsolute: 'Don\'t move or size with cells', textOneCell: 'Move but don\'t size with cells', - textTwoCell: 'Move and size with cells' + textTwoCell: 'Move and size with cells', + textKeepRatio: 'Constant Proportions' }, SSE.Views.SlicerSettingsAdvanced || {})); }); From 33557ba72df34d6f3892621f97bc5d9f764d8781 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 28 May 2020 18:09:35 +0300 Subject: [PATCH 66/92] [SSE] Fix adding slicer --- apps/spreadsheeteditor/main/app/controller/Toolbar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/spreadsheeteditor/main/app/controller/Toolbar.js b/apps/spreadsheeteditor/main/app/controller/Toolbar.js index c2595b986..58a13cfff 100644 --- a/apps/spreadsheeteditor/main/app/controller/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/controller/Toolbar.js @@ -2824,7 +2824,7 @@ define([ (new SSE.Views.SlicerAddDialog({ props: props, handler: function (result, settings) { - if (me && me.api) { + if (me && me.api && result == 'ok') { me.api.asc_insertSlicer(settings); } Common.NotificationCenter.trigger('edit:complete', me.toolbar); From bb7c716a38d71c3a76dbdf66fc88021c4726e4c5 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 28 May 2020 19:01:50 +0300 Subject: [PATCH 67/92] [SSE] Add sort settings for slicer to the right menu --- .../main/app/template/SlicerSettings.template | 40 +++++ .../template/SlicerSettingsAdvanced.template | 4 - .../main/app/view/SlicerSettings.js | 147 +++++++++++++++++- .../main/app/view/SlicerSettingsAdvanced.js | 2 +- 4 files changed, 186 insertions(+), 7 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/template/SlicerSettings.template b/apps/spreadsheeteditor/main/app/template/SlicerSettings.template index 279a00689..db9953804 100644 --- a/apps/spreadsheeteditor/main/app/template/SlicerSettings.template +++ b/apps/spreadsheeteditor/main/app/template/SlicerSettings.template @@ -80,6 +80,46 @@
    + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/apps/spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.template b/apps/spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.template index ca36d5327..d61f2be90 100644 --- a/apps/spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.template +++ b/apps/spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.template @@ -29,10 +29,6 @@
    - - - -
    diff --git a/apps/spreadsheeteditor/main/app/view/SlicerSettings.js b/apps/spreadsheeteditor/main/app/view/SlicerSettings.js index 32a3b37fd..35707ae08 100644 --- a/apps/spreadsheeteditor/main/app/view/SlicerSettings.js +++ b/apps/spreadsheeteditor/main/app/view/SlicerSettings.js @@ -76,7 +76,11 @@ define([ ColHeight: 0, PosVert: 0, PosHor: 0, - PosLocked: false + PosLocked: false, + SortOrder: Asc.ST_tabularSlicerCacheSortOrder.Ascending, + IndNoData: false, + ShowNoData: false, + HideNoData: false }; this.spinners = []; this.lockedControls = []; @@ -253,6 +257,95 @@ define([ this.spnColHeight.on('inputleave', function(){ Common.NotificationCenter.trigger('edit:complete', me);}); this.numCols.on('inputleave', function(){ Common.NotificationCenter.trigger('edit:complete', me);}); + // Sorting & Filtering + + this.radioAsc = new Common.UI.RadioBox({ + el: $('#slicer-radio-asc'), + name: 'asc-radio-sliceradv-sort', + labelText: this.textAsc + ' (' + this.textAZ + ')', + checked: true + }); + this.radioAsc.on('change', _.bind(function(field, newValue, eOpts) { + if (newValue && this.api) { + if (this._originalProps) { + this._originalProps.asc_getSlicerProperties().asc_setSortOrder(Asc.ST_tabularSlicerCacheSortOrder.Ascending); + this.api.asc_setGraphicObjectProps(this._originalProps); + } + } + }, this)); + this.lockedControls.push(this.radioAsc); + + this.radioDesc = new Common.UI.RadioBox({ + el: $('#slicer-radio-desc'), + name: 'asc-radio-sliceradv-sort', + labelText: this.textDesc + ' (' + this.textZA + ')', + checked: false + }); + this.radioDesc.on('change', _.bind(function(field, newValue, eOpts) { + if (newValue && this.api) { + if (this._originalProps) { + this._originalProps.asc_getSlicerProperties().asc_setSortOrder(Asc.ST_tabularSlicerCacheSortOrder.Descending); + this.api.asc_setGraphicObjectProps(this._originalProps); + } + } + }, this)); + this.lockedControls.push(this.radioDesc); + + this.chHideNoData = new Common.UI.CheckBox({ + el: $('#slicer-check-hide-nodata'), + labelText: this.strHideNoData + }); + this.chHideNoData.on('change', _.bind(function(field, newValue, oldValue, eOpts){ + var checked = (field.getValue()=='checked'); + this.chIndNoData.setDisabled(checked); + this.chShowNoData.setDisabled(checked || (this.chIndNoData.getValue()!='checked')); + this.chShowDel.setDisabled(checked); + if (this._originalProps && this.api) { + this._originalProps.asc_getSlicerProperties().asc_setHideItemsWithNoData(checked); + this.api.asc_setGraphicObjectProps(this._originalProps); + } + }, this)); + this.lockedControls.push(this.chHideNoData); + + this.chIndNoData = new Common.UI.CheckBox({ + el: $('#slicer-check-indicate-nodata'), + labelText: this.strIndNoData + }); + this.chIndNoData.on('change', _.bind(function(field, newValue, oldValue, eOpts){ + var checked = (field.getValue()=='checked'); + this.chShowNoData.setDisabled(!checked); + if (this._originalProps && this.api) { + this._originalProps.asc_getSlicerProperties().asc_setIndicateItemsWithNoData(checked); + this.api.asc_setGraphicObjectProps(this._originalProps); + } + }, this)); + this.lockedControls.push(this.chIndNoData); + + this.chShowNoData = new Common.UI.CheckBox({ + el: $('#slicer-check-show-nodata-last'), + disabled: true, + labelText: this.strShowNoData + }); + this.chShowNoData.on('change', _.bind(function(field, newValue, oldValue, eOpts){ + if (this._originalProps && this.api) { + this._originalProps.asc_getSlicerProperties().asc_setShowItemsWithNoDataLast(field.getValue()=='checked'); + this.api.asc_setGraphicObjectProps(this._originalProps); + } + }, this)); + this.lockedControls.push(this.chShowNoData); + + this.chShowDel = new Common.UI.CheckBox({ + el: $('#slicer-check-show-deleted'), + labelText: this.strShowDel + }); + this.chShowDel.on('change', _.bind(function(field, newValue, oldValue, eOpts){ + // if (this._originalProps && this.api) { + // this._originalProps.asc_getSlicerProperties().asc_setIndicateItemsWithNoData(field.getValue()=='checked'); + // this.api.asc_setGraphicObjectProps(this._originalProps); + // } + }, this)); + this.lockedControls.push(this.chShowDel); + $(this.el).on('click', '#slicer-advanced-link', _.bind(this.openAdvancedSettings, this)); }, @@ -381,6 +474,43 @@ define([ this.chLock.setValue((value !== null && value !== undefined) ? !!value : 'indeterminate', true); this._state.PosLocked=value; } + + // depends of data type + // this.radioAsc.setCaption(this.textAsc + ' (' + this.textAZ + ')' ); + // this.radioDesc.setCaption(this.textDesc + ' (' + this.textZA + ')' ); + value = slicerprops.asc_getSortOrder(); + if ( this._state.SortOrder!==value ) { + (value==Asc.ST_tabularSlicerCacheSortOrder.Ascending) ? this.radioAsc.setValue(true, true) : this.radioDesc.setValue(true, true); + this._state.SortOrder=value; + } + + value = slicerprops.asc_getIndicateItemsWithNoData(); + if ( this._state.IndNoData!==value ) { + this.chIndNoData.setValue((value !== null && value !== undefined) ? !!value : 'indeterminate', true); + this._state.IndNoData=value; + } + + value = slicerprops.asc_getShowItemsWithNoDataLast(); + if ( this._state.ShowNoData!==value ) { + this.chShowNoData.setValue((value !== null && value !== undefined) ? !!value : 'indeterminate', true); + this._state.ShowNoData=value; + } + + value = slicerprops.asc_getHideItemsWithNoData(); + if ( this._state.HideNoData!==value ) { + this.chHideNoData.setValue((value !== null && value !== undefined) ? !!value : 'indeterminate', true); + this._state.HideNoData=value; + } + + this.chIndNoData.setDisabled(value); + this.chShowNoData.setDisabled(value || (this.chIndNoData.getValue()!='checked')); + this.chShowDel.setDisabled(value); + + // value = slicerprops.asc_getShowDeleted(); + // if ( this._state.ShowDel!==value ) { + // this.chShowDel.setValue((value !== null && value !== undefined) ? !!value : 'indeterminate', true); + // this._state.ShowDel=value; + // } } } }, @@ -555,7 +685,20 @@ define([ textButtons: 'Buttons', textColumns: 'Columns', textStyle: 'Style', - textLock: 'Disable resizing or moving' + textLock: 'Disable resizing or moving', + strSorting: 'Sorting and filtering', + textAsc: 'Ascending', + textDesc: 'Descending', + textAZ: 'A to Z', + textZA: 'Z to A', + textOldNew: 'oldest to newest', + textNewOld: 'newest to oldest', + textSmallLarge: 'smallest to largest', + textLargeSmall: 'largest to smallest', + strHideNoData: 'Hide items with no data', + strIndNoData: 'Visually indicate items with no data', + strShowNoData: 'Show items with no data last', + strShowDel: 'Show items deleted from the data source' }, SSE.Views.SlicerSettings || {})); }); diff --git a/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js b/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js index b936de705..c749b5efd 100644 --- a/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js +++ b/apps/spreadsheeteditor/main/app/view/SlicerSettingsAdvanced.js @@ -300,7 +300,7 @@ define([ 'text!spreadsheeteditor/main/app/template/SlicerSettingsAdvanced.tem }); this.chShowNoData.on('change', _.bind(function(field, newValue, oldValue, eOpts){ if (this._changedProps) { - this._changedProps.asc_setHideItemsWithNoData(field.getValue()=='checked'); + this._changedProps.asc_setShowItemsWithNoDataLast(field.getValue()=='checked'); } }, this)); From ae9a264e327a9e48daf69a981a10697bd548c47d Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Thu, 28 May 2020 19:40:24 +0300 Subject: [PATCH 68/92] [sse mobile] Add text orientation into edit cell --- .../mobile/app/controller/edit/EditCell.js | 47 ++++++++ .../mobile/app/template/EditCell.template | 107 ++++++++++++++++++ .../mobile/app/view/edit/EditCell.js | 10 +- apps/spreadsheeteditor/mobile/locale/en.json | 7 ++ 4 files changed, 170 insertions(+), 1 deletion(-) diff --git a/apps/spreadsheeteditor/mobile/app/controller/edit/EditCell.js b/apps/spreadsheeteditor/mobile/app/controller/edit/EditCell.js index 27d213da6..94c848f72 100644 --- a/apps/spreadsheeteditor/mobile/app/controller/edit/EditCell.js +++ b/apps/spreadsheeteditor/mobile/app/controller/edit/EditCell.js @@ -132,6 +132,8 @@ define([ me.initBorderColorPage(); } else if ('#edit-text-format' == pageId) { me.initTextFormat(); + } else if ('#edit-text-orientation' == pageId) { + me.initTextOrientation(); } else if ('#edit-border-style' == pageId) { me.initBorderStyle(); } else if (!_.isUndefined(pageId) && pageId.indexOf('#edit-cell-format') > -1) { @@ -339,6 +341,8 @@ define([ return; } + me.initTextOrientation(); + me.initTextFormat(); }, @@ -504,6 +508,49 @@ define([ return clr; }, + initTextOrientation: function() { + if (_.isUndefined(this._cellInfo)) return; + + var me = this, + $pageTextOrientation = $('.page[data-page=edit-text-orientation]'), + orientationStr = 'horizontal', + xfs = this._cellInfo.asc_getXfs(); + + var textAngle = xfs.asc_getAngle(); + + switch(textAngle) { + case 45: orientationStr = 'anglecount'; break; + case -45: orientationStr = 'angleclock'; break; + case 255: orientationStr = 'vertical'; break; + case 90: orientationStr = 'rotateup'; break; + case -90: orientationStr = 'rotatedown'; break; + case 0: orientationStr = 'horizontal'; break; + } + + $('#text-orientation .item-media i').removeClass().addClass(Common.Utils.String.format('icon icon-text-orientation-{0}', orientationStr)); + + if ($pageTextOrientation.length > 0) { + var $radioOrientation = $pageTextOrientation.find('input:radio[name=text-orientation]'); + $radioOrientation.val([orientationStr]); + $radioOrientation.single('change', _.bind(me.onTextOrientationChange, me)); + } + }, + + onTextOrientationChange: function(e) { + var $target = $(e.currentTarget), + value = $target.prop('value'); + var angle = 0; + switch (value) { + case 'anglecount': angle = 45; break; + case 'angleclock': angle = -45; break; + case 'vertical': angle = 255; break; + case 'rotateup': angle = 90; break; + case 'rotatedown': angle = -90; break; + } + if (this.api) + this.api.asc_setCellAngle(angle); + }, + textFonts: 'Fonts', textAuto: 'Auto', textPt: 'pt' diff --git a/apps/spreadsheeteditor/mobile/app/template/EditCell.template b/apps/spreadsheeteditor/mobile/app/template/EditCell.template index 765b5be16..f07e2bf3a 100644 --- a/apps/spreadsheeteditor/mobile/app/template/EditCell.template +++ b/apps/spreadsheeteditor/mobile/app/template/EditCell.template @@ -55,6 +55,16 @@
    +
  • + +
    + <% if (!android) { %>
    <% } %> +
    +
    <%= scope.textTextOrientation %>
    +
    +
    +
    +
  • @@ -303,6 +313,103 @@
    + +
    + +
    +
    +
    +
      +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    +
    +
    +
    +
    +
  • +
    + +
    +
    +
    +
    +
    \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/app/view/CellSettings.js b/apps/spreadsheeteditor/main/app/view/CellSettings.js index dd34f3734..d23b4cc0d 100644 --- a/apps/spreadsheeteditor/main/app/view/CellSettings.js +++ b/apps/spreadsheeteditor/main/app/view/CellSettings.js @@ -429,6 +429,22 @@ define([ this.lockedControls.push(this.spnAngle); this.spnAngle.on('change', _.bind(this.onAngleChange, this)); this.spnAngle.on('inputleave', function(){ Common.NotificationCenter.trigger('edit:complete', me);}); + + this.chWrap = new Common.UI.CheckBox({ + el: $('#cell-checkbox-wrap'), + labelText: this.strWrap, + disabled: this._locked + }); + this.lockedControls.push(this.chWrap); + this.chWrap.on('change', this.onWrapChange.bind(this)); + + this.chShrink = new Common.UI.CheckBox({ + el: $('#cell-checkbox-shrink'), + labelText: this.strShrink, + disabled: this._locked + }); + this.lockedControls.push(this.chShrink); + this.chShrink.on('change', this.onShrinkChange.bind(this)); }, createDelayedElements: function() { @@ -452,6 +468,21 @@ define([ this.spnAngle.setValue((value !== null) ? (value==255 ? 0 : value) : '', true); this._state.CellAngle = value; } + + value = xfs.asc_getWrapText(); + if ( this._state.Wrap!==value ) { + this.chWrap.setValue((value !== null && value !== undefined) ? value : 'indeterminate', true); + this._state.Wrap=value; + } + this.chWrap.setDisabled(xfs.asc_getHorAlign() == AscCommon.align_Justify || this._locked); + + value = xfs.asc_getShrinkToFit(); + if ( this._state.Shrink!==value ) { + this.chShrink.setValue((value !== null && value !== undefined) ? value : 'indeterminate', true); + this._state.Shrink=value; + } + this.chShrink.setDisabled((this.chWrap.getValue()=='checked') || this._locked); + this.fill = xfs.asc_getFill(); if (this.fill) { this.pattern = this.fill.asc_getPatternFill(); @@ -1127,6 +1158,19 @@ define([ Common.NotificationCenter.trigger('edit:complete', this); }, + onWrapChange: function(field, newValue, oldValue, eOpts){ + if (this.api && !this._noApply) + this.api.asc_setCellTextWrap((field.getValue()=='checked')); + this.chShrink.setDisabled((field.getValue()=='checked') || this._locked); + Common.NotificationCenter.trigger('edit:complete', this); + }, + + onShrinkChange: function(field, newValue, oldValue, eOpts){ + if (this.api && !this._noApply) + this.api.asc_setCellTextShrink((field.getValue()=='checked')); + Common.NotificationCenter.trigger('edit:complete', this); + }, + textBorders: 'Border\'s Style', textBorderColor: 'Color', textBackColor: 'Background color', @@ -1156,7 +1200,10 @@ define([ textPattern: 'Pattern', textForeground: 'Foreground color', textBackground: 'Background color', - textGradient: 'Gradient' + textGradient: 'Gradient', + textControl: 'Text Control', + strWrap: 'Wrap text', + strShrink: 'Shrink to fit' }, SSE.Views.CellSettings || {})); }); \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/locale/en.json b/apps/spreadsheeteditor/main/locale/en.json index a9d5cd25c..4ad0e13a5 100644 --- a/apps/spreadsheeteditor/main/locale/en.json +++ b/apps/spreadsheeteditor/main/locale/en.json @@ -1255,6 +1255,9 @@ "SSE.Views.CellSettings.tipOuter": "Set outer border only", "SSE.Views.CellSettings.tipRight": "Set outer right border only", "SSE.Views.CellSettings.tipTop": "Set outer top border only", + "SSE.Views.CellSettings.textControl": "Text Control", + "SSE.Views.CellSettings.strWrap": "Wrap text", + "SSE.Views.CellSettings.strShrink": "Shrink to fit", "SSE.Views.ChartSettings.strLineWeight": "Line Weight", "SSE.Views.ChartSettings.strSparkColor": "Color", "SSE.Views.ChartSettings.strTemplate": "Template", From 84ef09df8bd12d6c677445f645d157a785a847f0 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 29 May 2020 15:39:37 +0300 Subject: [PATCH 70/92] [SSE] Add translation --- apps/spreadsheeteditor/main/locale/en.json | 68 ++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/apps/spreadsheeteditor/main/locale/en.json b/apps/spreadsheeteditor/main/locale/en.json index 662d89a5e..05c86829d 100644 --- a/apps/spreadsheeteditor/main/locale/en.json +++ b/apps/spreadsheeteditor/main/locale/en.json @@ -1579,6 +1579,7 @@ "SSE.Views.DocumentHolder.txtWidth": "Width", "SSE.Views.DocumentHolder.vertAlignText": "Vertical Alignment", "SSE.Views.DocumentHolder.textFromStorage": "From Storage", + "SSE.Views.DocumentHolder.advancedSlicerText": "Slicer Advanced Settings", "SSE.Views.FieldSettingsDialog.strLayout": "Layout", "SSE.Views.FieldSettingsDialog.strSubtotals": "Subtotals", "SSE.Views.FieldSettingsDialog.textReport": "Report Form", @@ -2243,6 +2244,71 @@ "SSE.Views.SignatureSettings.txtRequestedSignatures": "This spreadsheet needs to be signed.", "SSE.Views.SignatureSettings.txtSigned": "Valid signatures has been added to the spreadsheet. The spreadsheet is protected from editing.", "SSE.Views.SignatureSettings.txtSignedInvalid": "Some of the digital signatures in spreadsheet are invalid or could not be verified. The spreadsheet is protected from editing.", + "SSE.Views.SlicerAddDialog.txtTitle": "Insert Slicers", + "SSE.Views.SlicerAddDialog.textColumns": "Columns", + "SSE.Views.SlicerSettings.textKeepRatio": "Constant Proportions", + "SSE.Views.SlicerSettings.textSize": "Size", + "SSE.Views.SlicerSettings.textWidth": "Width", + "SSE.Views.SlicerSettings.textHeight": "Height", + "SSE.Views.SlicerSettings.textAdvanced": "Show advanced settings", + "SSE.Views.SlicerSettings.textPosition": "Position", + "SSE.Views.SlicerSettings.textHor": "Horizontal", + "SSE.Views.SlicerSettings.textVert": "Vertical", + "SSE.Views.SlicerSettings.textButtons": "Buttons", + "SSE.Views.SlicerSettings.textColumns": "Columns", + "SSE.Views.SlicerSettings.textStyle": "Style", + "SSE.Views.SlicerSettings.textLock": "Disable resizing or moving", + "SSE.Views.SlicerSettings.strSorting": "Sorting and filtering", + "SSE.Views.SlicerSettings.textAsc": "Ascending", + "SSE.Views.SlicerSettings.textDesc": "Descending", + "SSE.Views.SlicerSettings.textAZ": "A to Z", + "SSE.Views.SlicerSettings.textZA": "Z to A", + "SSE.Views.SlicerSettings.textOldNew": "oldest to newest", + "SSE.Views.SlicerSettings.textNewOld": "newest to oldest", + "SSE.Views.SlicerSettings.textSmallLarge": "smallest to largest", + "SSE.Views.SlicerSettings.textLargeSmall": "largest to smallest", + "SSE.Views.SlicerSettings.strHideNoData": "Hide items with no data", + "SSE.Views.SlicerSettings.strIndNoData": "Visually indicate items with no data", + "SSE.Views.SlicerSettings.strShowNoData": "Show items with no data last", + "SSE.Views.SlicerSettings.strShowDel": "Show items deleted from the data source", + "SSE.Views.SlicerSettingsAdvanced.textTitle": "Slicer - Advanced Settings", + "SSE.Views.SlicerSettingsAdvanced.textHeader": "Header", + "SSE.Views.SlicerSettingsAdvanced.strStyle": "Style", + "SSE.Views.SlicerSettingsAdvanced.strSize": "Size", + "SSE.Views.SlicerSettingsAdvanced.strWidth": "Width", + "SSE.Views.SlicerSettingsAdvanced.strHeight": "Height", + "SSE.Views.SlicerSettingsAdvanced.strButtons": "Buttons", + "SSE.Views.SlicerSettingsAdvanced.strColumns": "Columns", + "SSE.Views.SlicerSettingsAdvanced.textSort": "Sort", + "SSE.Views.SlicerSettingsAdvanced.textSourceName": "Source name", + "SSE.Views.SlicerSettingsAdvanced.textFormulaName": "Name to use in formulas", + "SSE.Views.SlicerSettingsAdvanced.textName": "Name", + "SSE.Views.SlicerSettingsAdvanced.strStyleSize": "Style & Size", + "SSE.Views.SlicerSettingsAdvanced.strSorting": "Sorting & Filtering", + "SSE.Views.SlicerSettingsAdvanced.strReferences": "References", + "SSE.Views.SlicerSettingsAdvanced.txtEmpty": "This field is required", + "SSE.Views.SlicerSettingsAdvanced.strShowHeader": "Display header", + "SSE.Views.SlicerSettingsAdvanced.textAsc": "Ascending", + "SSE.Views.SlicerSettingsAdvanced.textDesc": "Descending", + "SSE.Views.SlicerSettingsAdvanced.textAZ": "A to Z", + "SSE.Views.SlicerSettingsAdvanced.textZA": "Z to A", + "SSE.Views.SlicerSettingsAdvanced.textOldNew": "oldest to newest", + "SSE.Views.SlicerSettingsAdvanced.textNewOld": "newest to oldest", + "SSE.Views.SlicerSettingsAdvanced.textSmallLarge": "smallest to largest", + "SSE.Views.SlicerSettingsAdvanced.textLargeSmall": "largest to smallest", + "SSE.Views.SlicerSettingsAdvanced.strHideNoData": "Hide items with no data", + "SSE.Views.SlicerSettingsAdvanced.strIndNoData": "Visually indicate items with no data", + "SSE.Views.SlicerSettingsAdvanced.strShowNoData": "Show items with no data last", + "SSE.Views.SlicerSettingsAdvanced.strShowDel": "Show items deleted from the data source", + "SSE.Views.SlicerSettingsAdvanced.textAlt": "Alternative Text", + "SSE.Views.SlicerSettingsAdvanced.textAltTitle": "Title", + "SSE.Views.SlicerSettingsAdvanced.textAltDescription": "Description", + "SSE.Views.SlicerSettingsAdvanced.textAltTip": "The alternative text-based representation of the visual object information, which will be read to the people with vision or cognitive impairments to help them better understand what information there is in the image, autoshape, chart or table.", + "SSE.Views.SlicerSettingsAdvanced.textSnap": "Cell Snapping", + "SSE.Views.SlicerSettingsAdvanced.textAbsolute": "Don't move or size with cells", + "SSE.Views.SlicerSettingsAdvanced.textOneCell": "Move but don't size with cells", + "SSE.Views.SlicerSettingsAdvanced.textTwoCell": "Move and size with cells", + "SSE.Views.SlicerSettingsAdvanced.textKeepRatio": "Constant Proportions", "SSE.Views.SortDialog.errorEmpty": "All sort criteria must have a column or row specified.", "SSE.Views.SortDialog.errorMoreOneCol": "More than one column is selected.", "SSE.Views.SortDialog.errorMoreOneRow": "More than one row is selected.", @@ -2670,6 +2736,8 @@ "SSE.Views.Toolbar.txtUnmerge": "Unmerge Cells", "SSE.Views.Toolbar.txtYen": "Â¥ Yen", "SSE.Views.Toolbar.textVertical": "Vertical Text", + "SSE.Views.Toolbar.capBtnInsSlicer": "Slicer", + "SSE.Views.Toolbar.tipInsertSlicer": "Insert slicer", "SSE.Views.Top10FilterDialog.textType": "Show", "SSE.Views.Top10FilterDialog.txtBottom": "Bottom", "SSE.Views.Top10FilterDialog.txtItems": "Item", From 6d4113fe3ea752951771ccdfb73cd4ac10949aac Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 29 May 2020 19:21:19 +0300 Subject: [PATCH 71/92] [SSE] Slicer settings: set position, lock size controls. --- .../main/app/view/SlicerSettings.js | 116 +++++++++++++----- 1 file changed, 86 insertions(+), 30 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/view/SlicerSettings.js b/apps/spreadsheeteditor/main/app/view/SlicerSettings.js index 35707ae08..a922dbf57 100644 --- a/apps/spreadsheeteditor/main/app/view/SlicerSettings.js +++ b/apps/spreadsheeteditor/main/app/view/SlicerSettings.js @@ -80,10 +80,12 @@ define([ SortOrder: Asc.ST_tabularSlicerCacheSortOrder.Ascending, IndNoData: false, ShowNoData: false, - HideNoData: false + HideNoData: false, + DisabledSizeControls: false }; this.spinners = []; this.lockedControls = []; + this.sizeControls = []; this._locked = false; this._noApply = false; @@ -135,7 +137,7 @@ define([ minValue: 0 }); this.spinners.push(this.spnWidth); - this.lockedControls.push(this.spnWidth); + this.sizeControls.push(this.spnWidth); this.spnHeight = new Common.UI.MetricSpinner({ el: $('#slicer-spin-height'), @@ -147,7 +149,7 @@ define([ minValue: 0 }); this.spinners.push(this.spnHeight); - this.lockedControls.push(this.spnHeight); + this.sizeControls.push(this.spnHeight); this.btnRatio = new Common.UI.Button({ parentEl: $('#slicer-button-ratio'), @@ -157,7 +159,7 @@ define([ enableToggle: true, hint: this.textKeepRatio }); - this.lockedControls.push(this.btnRatio); + this.sizeControls.push(this.btnRatio); this.btnRatio.on('click', _.bind(function(btn, e) { if (btn.pressed && this.spnHeight.getNumberValue()>0) { @@ -169,6 +171,7 @@ define([ this.api.asc_setGraphicObjectProps(this._originalProps); } } + Common.NotificationCenter.trigger('edit:complete', this); }, this)); this.spnWidth.on('change', _.bind(this.onWidthChange, this)); @@ -186,7 +189,7 @@ define([ minValue: 0 }); this.spinners.push(this.spnHor); - this.lockedControls.push(this.spnHor); + this.sizeControls.push(this.spnHor); this.spnVert = new Common.UI.MetricSpinner({ el: $('#slicer-spin-vert'), @@ -198,10 +201,10 @@ define([ minValue: 0 }); this.spinners.push(this.spnVert); - this.lockedControls.push(this.spnVert); + this.sizeControls.push(this.spnVert); - // this.spnHor.on('change', _.bind(this.onHorChange, this)); - // this.spnVert.on('change', _.bind(this.onVertChange, this)); + this.spnHor.on('change', _.bind(this.onHorChange, this)); + this.spnVert.on('change', _.bind(this.onVertChange, this)); this.spnHor.on('inputleave', function(){ Common.NotificationCenter.trigger('edit:complete', me);}); this.spnVert.on('inputleave', function(){ Common.NotificationCenter.trigger('edit:complete', me);}); @@ -223,7 +226,7 @@ define([ minValue: 0 }); this.spinners.push(this.spnColWidth); - this.lockedControls.push(this.spnColWidth); + this.sizeControls.push(this.spnColWidth); this.spnColHeight = new Common.UI.MetricSpinner({ el: $('#slicer-spin-col-height'), @@ -235,7 +238,7 @@ define([ minValue: 0 }); this.spinners.push(this.spnColHeight); - this.lockedControls.push(this.spnColHeight); + this.sizeControls.push(this.spnColHeight); this.numCols = new Common.UI.MetricSpinner({ el: $('#slicer-spin-cols'), @@ -248,7 +251,7 @@ define([ maxValue: 20000, minValue: 1 }); - this.lockedControls.push(this.numCols); + this.sizeControls.push(this.numCols); this.spnColWidth.on('change', _.bind(this.onColWidthChange, this)); this.spnColHeight.on('change', _.bind(this.onColHeightChange, this)); @@ -271,6 +274,7 @@ define([ this._originalProps.asc_getSlicerProperties().asc_setSortOrder(Asc.ST_tabularSlicerCacheSortOrder.Ascending); this.api.asc_setGraphicObjectProps(this._originalProps); } + Common.NotificationCenter.trigger('edit:complete', this); } }, this)); this.lockedControls.push(this.radioAsc); @@ -287,6 +291,7 @@ define([ this._originalProps.asc_getSlicerProperties().asc_setSortOrder(Asc.ST_tabularSlicerCacheSortOrder.Descending); this.api.asc_setGraphicObjectProps(this._originalProps); } + Common.NotificationCenter.trigger('edit:complete', this); } }, this)); this.lockedControls.push(this.radioDesc); @@ -297,13 +302,11 @@ define([ }); this.chHideNoData.on('change', _.bind(function(field, newValue, oldValue, eOpts){ var checked = (field.getValue()=='checked'); - this.chIndNoData.setDisabled(checked); - this.chShowNoData.setDisabled(checked || (this.chIndNoData.getValue()!='checked')); - this.chShowDel.setDisabled(checked); if (this._originalProps && this.api) { this._originalProps.asc_getSlicerProperties().asc_setHideItemsWithNoData(checked); this.api.asc_setGraphicObjectProps(this._originalProps); } + Common.NotificationCenter.trigger('edit:complete', this); }, this)); this.lockedControls.push(this.chHideNoData); @@ -313,11 +316,11 @@ define([ }); this.chIndNoData.on('change', _.bind(function(field, newValue, oldValue, eOpts){ var checked = (field.getValue()=='checked'); - this.chShowNoData.setDisabled(!checked); if (this._originalProps && this.api) { this._originalProps.asc_getSlicerProperties().asc_setIndicateItemsWithNoData(checked); this.api.asc_setGraphicObjectProps(this._originalProps); } + Common.NotificationCenter.trigger('edit:complete', this); }, this)); this.lockedControls.push(this.chIndNoData); @@ -331,6 +334,7 @@ define([ this._originalProps.asc_getSlicerProperties().asc_setShowItemsWithNoDataLast(field.getValue()=='checked'); this.api.asc_setGraphicObjectProps(this._originalProps); } + Common.NotificationCenter.trigger('edit:complete', this); }, this)); this.lockedControls.push(this.chShowNoData); @@ -387,7 +391,6 @@ define([ me.api.asc_setGraphicObjectProps(value.imageProps); } } - Common.NotificationCenter.trigger('edit:complete', me); } })).show(); @@ -402,8 +405,6 @@ define([ if (this._initSettings) this.createDelayedElements(); - this.disableControls(this._locked); - if (props ){ this._originalProps = new Asc.asc_CImgProperty(props); @@ -430,7 +431,19 @@ define([ this._state.keepRatio=value; } + value = props.get_Position(); + if (value) { + var Position = {X: value.get_X(), Y: value.get_Y()}; + this.spnHor.setValue((Position.X !== null && Position.X !== undefined) ? Common.Utils.Metric.fnRecalcFromMM(Position.X) : '', true); + this.spnVert.setValue((Position.Y !== null && Position.Y !== undefined) ? Common.Utils.Metric.fnRecalcFromMM(Position.Y) : '', true); + } else { + this.spnHor.setValue('', true); + this.spnVert.setValue('', true); + } + var slicerprops = props.asc_getSlicerProperties(); + this.disableControls(this._locked, slicerprops ? slicerprops.asc_getLockedPosition() : false); + if (slicerprops) { value = slicerprops.asc_getColumnCount(); if ( Math.abs(this._state.ColCount-value)>0.1 || @@ -470,19 +483,13 @@ define([ this._isTemplatesChanged = false; value = slicerprops.asc_getLockedPosition(); - if ( this._state.PosLocked!==value ) { - this.chLock.setValue((value !== null && value !== undefined) ? !!value : 'indeterminate', true); - this._state.PosLocked=value; - } + this.chLock.setValue((value !== null && value !== undefined) ? !!value : 'indeterminate', true); // depends of data type // this.radioAsc.setCaption(this.textAsc + ' (' + this.textAZ + ')' ); // this.radioDesc.setCaption(this.textDesc + ' (' + this.textZA + ')' ); value = slicerprops.asc_getSortOrder(); - if ( this._state.SortOrder!==value ) { - (value==Asc.ST_tabularSlicerCacheSortOrder.Ascending) ? this.radioAsc.setValue(true, true) : this.radioDesc.setValue(true, true); - this._state.SortOrder=value; - } + (value==Asc.ST_tabularSlicerCacheSortOrder.Ascending) ? this.radioAsc.setValue(true, true) : this.radioDesc.setValue(true, true); value = slicerprops.asc_getIndicateItemsWithNoData(); if ( this._state.IndNoData!==value ) { @@ -502,9 +509,9 @@ define([ this._state.HideNoData=value; } - this.chIndNoData.setDisabled(value); - this.chShowNoData.setDisabled(value || (this.chIndNoData.getValue()!='checked')); - this.chShowDel.setDisabled(value); + this.chIndNoData.setDisabled(value || this._locked); + this.chShowNoData.setDisabled(value || (this.chIndNoData.getValue()!='checked') || this._locked); + this.chShowDel.setDisabled(value || this._locked); // value = slicerprops.asc_getShowDeleted(); // if ( this._state.ShowDel!==value ) { @@ -534,6 +541,7 @@ define([ this.api.asc_setGraphicObjectProps(this._originalProps); } } + Common.NotificationCenter.trigger('edit:complete', this); }, onHeightChange: function(field, newValue, oldValue, eOpts){ @@ -554,6 +562,39 @@ define([ this.api.asc_setGraphicObjectProps(this._originalProps); } } + Common.NotificationCenter.trigger('edit:complete', this); + }, + + onHorChange: function(field, newValue, oldValue, eOpts){ + var Position = new Asc.CPosition(); + if (field.getValue() !== '') + Position.put_X(Common.Utils.Metric.fnRecalcToMM(field.getNumberValue())); + if (this.spnVert.getValue() !== '') + Position.put_Y(Common.Utils.Metric.fnRecalcToMM(this.spnVert.getNumberValue())); + + if (this.api) { + if (this._originalProps) { + this._originalProps.put_Position(Position); + this.api.asc_setGraphicObjectProps(this._originalProps); + } + } + Common.NotificationCenter.trigger('edit:complete', this); + }, + + onVertChange: function(field, newValue, oldValue, eOpts){ + var Position = new Asc.CPosition(); + if (this.spnHor.getValue() !== '') + Position.put_X(Common.Utils.Metric.fnRecalcToMM(this.spnHor.getNumberValue())); + if (field.getValue() !== '') + Position.put_Y(Common.Utils.Metric.fnRecalcToMM(field.getNumberValue())); + + if (this.api) { + if (this._originalProps) { + this._originalProps.put_Position(Position); + this.api.asc_setGraphicObjectProps(this._originalProps); + } + } + Common.NotificationCenter.trigger('edit:complete', this); }, onColWidthChange: function(field, newValue, oldValue, eOpts){ @@ -563,6 +604,7 @@ define([ this.api.asc_setGraphicObjectProps(this._originalProps); } } + Common.NotificationCenter.trigger('edit:complete', this); }, onColHeightChange: function(field, newValue, oldValue, eOpts){ @@ -572,6 +614,7 @@ define([ this.api.asc_setGraphicObjectProps(this._originalProps); } } + Common.NotificationCenter.trigger('edit:complete', this); }, onColChange: function(field, newValue, oldValue, eOpts){ @@ -581,6 +624,7 @@ define([ this.api.asc_setGraphicObjectProps(this._originalProps); } } + Common.NotificationCenter.trigger('edit:complete', this); }, onInitStyles: function(Templates){ @@ -647,6 +691,7 @@ define([ this._originalProps.asc_getSlicerProperties().asc_setStyle(record.get('type')); this.api.asc_setGraphicObjectProps(this._originalProps); } + Common.NotificationCenter.trigger('edit:complete', this); }, onLockSlicerChange: function(field, newValue, oldValue, eOpts){ @@ -656,15 +701,17 @@ define([ this.api.asc_setGraphicObjectProps(this._originalProps); } } + Common.NotificationCenter.trigger('edit:complete', this); }, setLocked: function (locked) { this._locked = locked; }, - disableControls: function(disable) { + disableControls: function(disable, disableSize) { if (this._initSettings) return; + this.disableSizeControls(disable || disableSize); if (this._state.DisabledControls!==disable) { this._state.DisabledControls = disable; _.each(this.lockedControls, function(item) { @@ -674,6 +721,15 @@ define([ } }, + disableSizeControls: function(disable) { + if (this._state.DisabledSizeControls!==disable) { + this._state.DisabledSizeControls = disable; + _.each(this.sizeControls, function(item) { + item.setDisabled(disable); + }); + } + }, + textKeepRatio: 'Constant Proportions', textSize: 'Size', textWidth: 'Width', From cf42d66e5b48f239acffb457175a3ecae221abd8 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 1 Jun 2020 17:55:54 +0300 Subject: [PATCH 72/92] [Mobile] Show warning about macros --- .../mobile/app/controller/Main.js | 58 ++++++++++++++++++- .../mobile/app/controller/Main.js | 58 ++++++++++++++++++- .../mobile/app/controller/Main.js | 58 ++++++++++++++++++- 3 files changed, 165 insertions(+), 9 deletions(-) diff --git a/apps/documenteditor/mobile/app/controller/Main.js b/apps/documenteditor/mobile/app/controller/Main.js index 87e527121..1a0faebbc 100644 --- a/apps/documenteditor/mobile/app/controller/Main.js +++ b/apps/documenteditor/mobile/app/controller/Main.js @@ -224,6 +224,14 @@ define([ if (!me.editorConfig.customization || !(me.editorConfig.customization.loaderName || me.editorConfig.customization.loaderLogo)) $('#editor-container').append('
    '); + var value = Common.localStorage.getItem("de-mobile-macros-mode"); + if (value === null) { + value = this.editorConfig.customization ? this.editorConfig.customization.macrosMode : 'warn'; + value = (value == 'enable') ? 1 : (value == 'disable' ? 2 : 0); + } else + value = parseInt(value); + Common.Utils.InternalSettings.set("de-mobile-macros-mode", value); + // if (this.appOptions.location == 'us' || this.appOptions.location == 'ca') // Common.Utils.Metric.setDefaultMetric(Common.Utils.Metric.c_MetricUnits.inch); }, @@ -1376,8 +1384,48 @@ define([ }, onRunAutostartMacroses: function() { - if (!this.editorConfig.customization || (this.editorConfig.customization.macros!==false)) - if (this.api) this.api.asc_runAutostartMacroses(); + var me = this, + enable = !this.editorConfig.customization || (this.editorConfig.customization.macros!==false); + if (enable) { + var value = Common.Utils.InternalSettings.get("de-mobile-macros-mode"); + if (value==1) + this.api.asc_runAutostartMacroses(); + else if (value === 0) { + uiApp.modal({ + title: this.notcriticalErrorTitle, + text: this.textHasMacros, + afterText: '', + buttons: [{ + text: this.textYes, + onClick: function () { + var dontshow = $('input[name="checkbox-show-macros"]').prop('checked'); + if (dontshow) { + Common.Utils.InternalSettings.set("de-mobile-macros-mode", 1); + Common.localStorage.setItem("de-mobile-macros-mode", 1); + } + setTimeout(function() { + me.api.asc_runAutostartMacroses(); + }, 1); + } + }, + { + text: this.textNo, + onClick: function () { + var dontshow = $('input[name="checkbox-show-macros"]').prop('checked'); + if (dontshow) { + Common.Utils.InternalSettings.set("de-mobile-macros-mode", 2); + Common.localStorage.setItem("de-mobile-macros-mode", 2); + } + } + }] + }); + } + } }, leavePageText: 'You have unsaved changes in this document. Click \'Stay on this Page\' to await the autosave of the document. Click \'Leave this Page\' to discard all the unsaved changes.', @@ -1507,7 +1555,11 @@ define([ waitText: 'Please, wait...', errorFileSizeExceed: 'The file size exceeds the limitation set for your server.
    Please contact your Document Server administrator for details.', errorUpdateVersionOnDisconnect: 'Internet connection has been restored, and the file version has been changed.
    Before you can continue working, you need to download the file or copy its content to make sure nothing is lost, and then reload this page.', - errorOpensource: 'Files can be opened for viewing only. Mobile web editors are not available in the Open Source version.' + errorOpensource: 'Files can be opened for viewing only. Mobile web editors are not available in the Open Source version.', + textHasMacros: 'The file contains automatic macros.
    Do you want to run macros?', + textRemember: 'Remember my choice', + textYes: 'Yes', + textNo: 'No' } })(), DE.Controllers.Main || {})) }); \ No newline at end of file diff --git a/apps/presentationeditor/mobile/app/controller/Main.js b/apps/presentationeditor/mobile/app/controller/Main.js index d1d2f755f..9ebdba405 100644 --- a/apps/presentationeditor/mobile/app/controller/Main.js +++ b/apps/presentationeditor/mobile/app/controller/Main.js @@ -227,6 +227,14 @@ define([ if (!me.editorConfig.customization || !(me.editorConfig.customization.loaderName || me.editorConfig.customization.loaderLogo)) $('#editor_sdk').append('
    '); + var value = Common.localStorage.getItem("pe-mobile-macros-mode"); + if (value === null) { + value = this.editorConfig.customization ? this.editorConfig.customization.macrosMode : 'warn'; + value = (value == 'enable') ? 1 : (value == 'disable' ? 2 : 0); + } else + value = parseInt(value); + Common.Utils.InternalSettings.set("pe-mobile-macros-mode", value); + // if (this.appOptions.location == 'us' || this.appOptions.location == 'ca') // Common.Utils.Metric.setDefaultMetric(Common.Utils.Metric.c_MetricUnits.inch); }, @@ -1285,8 +1293,48 @@ define([ }, onRunAutostartMacroses: function() { - if (!this.editorConfig.customization || (this.editorConfig.customization.macros!==false)) - if (this.api) this.api.asc_runAutostartMacroses(); + var me = this, + enable = !this.editorConfig.customization || (this.editorConfig.customization.macros!==false); + if (enable) { + var value = Common.Utils.InternalSettings.get("pe-mobile-macros-mode"); + if (value==1) + this.api.asc_runAutostartMacroses(); + else if (value === 0) { + uiApp.modal({ + title: this.notcriticalErrorTitle, + text: this.textHasMacros, + afterText: '', + buttons: [{ + text: this.textYes, + onClick: function () { + var dontshow = $('input[name="checkbox-show-macros"]').prop('checked'); + if (dontshow) { + Common.Utils.InternalSettings.set("pe-mobile-macros-mode", 1); + Common.localStorage.setItem("pe-mobile-macros-mode", 1); + } + setTimeout(function() { + me.api.asc_runAutostartMacroses(); + }, 1); + } + }, + { + text: this.textNo, + onClick: function () { + var dontshow = $('input[name="checkbox-show-macros"]').prop('checked'); + if (dontshow) { + Common.Utils.InternalSettings.set("pe-mobile-macros-mode", 2); + Common.localStorage.setItem("pe-mobile-macros-mode", 2); + } + } + }] + }); + } + } }, // Translation @@ -1453,7 +1501,11 @@ define([ waitText: 'Please, wait...', errorFileSizeExceed: 'The file size exceeds the limitation set for your server.
    Please contact your Document Server administrator for details.', errorUpdateVersionOnDisconnect: 'Internet connection has been restored, and the file version has been changed.
    Before you can continue working, you need to download the file or copy its content to make sure nothing is lost, and then reload this page.', - errorOpensource: 'Files can be opened for viewing only. Mobile web editors are not available in the Open Source version.' + errorOpensource: 'Files can be opened for viewing only. Mobile web editors are not available in the Open Source version.', + textHasMacros: 'The file contains automatic macros.
    Do you want to run macros?', + textRemember: 'Remember my choice', + textYes: 'Yes', + textNo: 'No' } })(), PE.Controllers.Main || {})) }); \ No newline at end of file diff --git a/apps/spreadsheeteditor/mobile/app/controller/Main.js b/apps/spreadsheeteditor/mobile/app/controller/Main.js index 8c655506e..21e802e98 100644 --- a/apps/spreadsheeteditor/mobile/app/controller/Main.js +++ b/apps/spreadsheeteditor/mobile/app/controller/Main.js @@ -243,6 +243,14 @@ define([ if (!me.editorConfig.customization || !(me.editorConfig.customization.loaderName || me.editorConfig.customization.loaderLogo)) $('#editor_sdk').append('
    ' + '
    '.repeat(2) + '
    '); + + var value = Common.localStorage.getItem("sse-mobile-macros-mode"); + if (value === null) { + value = this.editorConfig.customization ? this.editorConfig.customization.macrosMode : 'warn'; + value = (value == 'enable') ? 1 : (value == 'disable' ? 2 : 0); + } else + value = parseInt(value); + Common.Utils.InternalSettings.set("sse-mobile-macros-mode", value); }, loadDocument: function(data) { @@ -1490,8 +1498,48 @@ define([ }, onRunAutostartMacroses: function() { - if (!this.editorConfig.customization || (this.editorConfig.customization.macros!==false)) - if (this.api) this.api.asc_runAutostartMacroses(); + var me = this, + enable = !this.editorConfig.customization || (this.editorConfig.customization.macros!==false); + if (enable) { + var value = Common.Utils.InternalSettings.get("sse-mobile-macros-mode"); + if (value==1) + this.api.asc_runAutostartMacroses(); + else if (value === 0) { + uiApp.modal({ + title: this.notcriticalErrorTitle, + text: this.textHasMacros, + afterText: '', + buttons: [{ + text: this.textYes, + onClick: function () { + var dontshow = $('input[name="checkbox-show-macros"]').prop('checked'); + if (dontshow) { + Common.Utils.InternalSettings.set("sse-mobile-macros-mode", 1); + Common.localStorage.setItem("sse-mobile-macros-mode", 1); + } + setTimeout(function() { + me.api.asc_runAutostartMacroses(); + }, 1); + } + }, + { + text: this.textNo, + onClick: function () { + var dontshow = $('input[name="checkbox-show-macros"]').prop('checked'); + if (dontshow) { + Common.Utils.InternalSettings.set("sse-mobile-macros-mode", 2); + Common.localStorage.setItem("sse-mobile-macros-mode", 2); + } + } + }] + }); + } + } }, leavePageText: 'You have unsaved changes in this document. Click \'Stay on this Page\' to await the autosave of the document. Click \'Leave this Page\' to discard all the unsaved changes.', @@ -1677,7 +1725,11 @@ define([ waitText: 'Please, wait...', errorFileSizeExceed: 'The file size exceeds the limitation set for your server.
    Please contact your Document Server administrator for details.', errorUpdateVersionOnDisconnect: 'Internet connection has been restored, and the file version has been changed.
    Before you can continue working, you need to download the file or copy its content to make sure nothing is lost, and then reload this page.', - errorOpensource: 'Files can be opened for viewing only. Mobile web editors are not available in the Open Source version.' + errorOpensource: 'Files can be opened for viewing only. Mobile web editors are not available in the Open Source version.', + textHasMacros: 'The file contains automatic macros.
    Do you want to run macros?', + textRemember: 'Remember my choice', + textYes: 'Yes', + textNo: 'No' } })(), SSE.Controllers.Main || {})) }); \ No newline at end of file From 2dfaad19f35fce9f34fc6ad1d154b91fb9d00815 Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Mon, 1 Jun 2020 20:19:37 +0300 Subject: [PATCH 73/92] [SSE mobile] Add icons in text orientation settings --- .../mobile/app/template/EditCell.template | 18 +++++++++++ .../mobile/resources/css/app-ios.css | 30 ++++++++++++++++++ .../mobile/resources/css/app-material.css | 30 ++++++++++++++++++ .../mobile/resources/less/ios/_icons.less | 31 +++++++++++++++++++ .../resources/less/material/_icons.less | 31 +++++++++++++++++++ 5 files changed, 140 insertions(+) diff --git a/apps/spreadsheeteditor/mobile/app/template/EditCell.template b/apps/spreadsheeteditor/mobile/app/template/EditCell.template index f07e2bf3a..3c4a872a2 100644 --- a/apps/spreadsheeteditor/mobile/app/template/EditCell.template +++ b/apps/spreadsheeteditor/mobile/app/template/EditCell.template @@ -336,6 +336,9 @@ <% } %>
    <%= scope.textHorizontalText %>
    + <% if (android) { %> +
    + <% } %>
  • @@ -349,6 +352,9 @@ <% } %>
    <%= scope.textAngleCounterclockwise %>
    + <% if (android) { %> +
    + <% } %>
    @@ -362,6 +368,9 @@ <% } %>
    <%= scope.textAngleClockwise %>
    + <% if (android) { %> +
    + <% } %>
    @@ -375,6 +384,9 @@ <% } %>
    <%= scope.textVerticalText %>
    + <% if (android) { %> +
    + <% } %>
    @@ -388,6 +400,9 @@ <% } %>
    <%= scope.textRotateTextUp %>
    + <% if (android) { %> +
    + <% } %>
    @@ -401,6 +416,9 @@ <% } %>
    <%= scope.textRotateTextDown %>
    + <% if (android) { %> +
    + <% } %>
    diff --git a/apps/spreadsheeteditor/mobile/resources/css/app-ios.css b/apps/spreadsheeteditor/mobile/resources/css/app-ios.css index e4d34930e..dd7cbfb10 100644 --- a/apps/spreadsheeteditor/mobile/resources/css/app-ios.css +++ b/apps/spreadsheeteditor/mobile/resources/css/app-ios.css @@ -7442,6 +7442,36 @@ i.icon.icon-add-other { height: 24px; background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M7.00049%2018C7.00049%2018.8284%206.32892%2019.5%205.50049%2019.5C4.67206%2019.5%204.00049%2018.8284%204.00049%2018C4.00049%2017.1716%204.67206%2016.5%205.50049%2016.5C6.32892%2016.5%207.00049%2017.1716%207.00049%2018ZM13.5005%2018C13.5005%2018.8284%2012.8289%2019.5%2012.0005%2019.5C11.1721%2019.5%2010.5005%2018.8284%2010.5005%2018C10.5005%2017.1716%2011.1721%2016.5%2012.0005%2016.5C12.8289%2016.5%2013.5005%2017.1716%2013.5005%2018ZM18.5005%2019.5C19.3289%2019.5%2020.0005%2018.8284%2020.0005%2018C20.0005%2017.1716%2019.3289%2016.5%2018.5005%2016.5C17.6721%2016.5%2017.0005%2017.1716%2017.0005%2018C17.0005%2018.8284%2017.6721%2019.5%2018.5005%2019.5Z%22%20fill%3D%22%2340865c%22%2F%3E%3C%2Fsvg%3E"); } +i.icon.icon-text-orientation-horizontal { + width: 24px; + height: 24px; + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M9.51367%2010.75H11.269L8.06905%202H6.36276L3.25%2010.75H4.96174L5.62136%208.76245H8.81589L9.51367%2010.75ZM7.19682%204.04127L8.29801%207.2882H6.11744L7.19682%204.04127ZM16.0002%202H12.8057V10.75H15.5259C16.5544%2010.742%2017.2031%2010.7221%2017.4721%2010.6903C17.9009%2010.6386%2018.2607%2010.5013%2018.5515%2010.2785C18.8458%2010.0517%2019.0766%209.75125%2019.2438%209.37722C19.4146%208.9992%2019.5%208.61124%2019.5%208.21334C19.5%207.70799%2019.3692%207.2683%2019.1075%206.89427C18.8458%206.52024%2018.4715%206.25563%2017.9845%206.10044C18.3298%205.92934%2018.6023%205.67269%2018.8022%205.33049C19.0057%204.98829%2019.1075%204.61227%2019.1075%204.20242C19.1075%203.82441%2019.0257%203.4842%2018.8622%203.18179C18.6986%202.8754%2018.4933%202.63068%2018.2462%202.44765C18.0027%202.26461%2017.7247%202.14524%2017.4121%202.08953C17.1032%202.02984%2016.6326%202%2016.0002%202ZM14.4193%205.47971L14.4193%203.45634L15.346%203.45634C16.1056%203.45634%2016.5653%203.46629%2016.7252%203.48619C16.9942%203.522%2017.1959%203.62545%2017.3303%203.79656C17.4684%203.96368%2017.5375%204.18253%2017.5375%204.4531C17.5375%204.73562%2017.4575%204.96442%2017.2976%205.1395C17.1414%205.3106%2016.9251%205.41405%2016.6489%205.44986C16.4963%205.46976%2016.1056%205.47971%2015.4769%205.47971H14.4193ZM14.4193%209.27575V6.93605H15.7222C16.4563%206.93605%2016.9324%206.97783%2017.1504%207.06139C17.3721%207.14495%2017.5411%207.27825%2017.6574%207.46129C17.7737%207.64433%2017.8319%207.86716%2017.8319%208.12977C17.8319%208.44014%2017.7555%208.68884%2017.6029%208.87585C17.4539%209.05889%2017.2595%209.17428%2017.0196%209.22203C16.8633%209.25784%2016.4945%209.27575%2015.913%209.27575H14.4193ZM17.9829%2013.25L21.5023%2017.0829L22%2017.625L21.5023%2018.1671L17.9829%2022L16.9875%2020.9159L19.3053%2018.3916H2V16.8584H19.3053L16.9875%2014.3341L17.9829%2013.25Z%22%20fill%3D%22%2340865c%22%2F%3E%3C%2Fsvg%3E"); +} +i.icon.icon-text-orientation-anglecount { + width: 24px; + height: 24px; + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M22%208.71927H16.3964V10.0783L19.7586%2010.0783L8.55143%2020.9162L9.67214%2022L20.597%2011.1439V14.4301L22%2014.4301V8.71927Z%22%20fill%3D%22%2340865c%22%2F%3E%3Cpath%20d%3D%22M10.6577%2011.3859L9.54484%2012.462L7.84242%2011.6713L5.81718%2013.6298L6.65905%2015.2527L5.57385%2016.3022L2%209.02933L3.08174%207.98323L10.6577%2011.3859ZM6.57946%2011.085L3.82288%209.76944L5.19705%2012.4218L6.57946%2011.085Z%22%20fill%3D%22%2340865c%22%2F%3E%3Cpath%20d%3D%22M6.08463%205.07929L8.10987%203.12078C8.51077%202.73309%208.82806%202.46285%209.06174%202.31005C9.2952%202.15259%209.54714%202.05532%209.81755%202.01826C10.0903%201.97896%2010.3756%202.0031%2010.6735%202.09068C10.9689%202.17582%2011.2364%202.33426%2011.4761%202.56602C11.7359%202.81728%2011.9098%203.1102%2011.9977%203.44478C12.0879%203.77712%2012.0778%204.10158%2011.9674%204.41815C12.3746%204.21472%2012.7796%204.14745%2013.1826%204.21634C13.5857%204.28523%2013.9473%204.47458%2014.2677%204.7844C14.52%205.02835%2014.7118%205.31856%2014.8432%205.65504C14.9743%205.98684%2015.0185%206.31251%2014.9756%206.63204C14.9326%206.9469%2014.7915%207.25165%2014.5524%207.54628C14.4021%207.73067%2014.0034%208.14059%2013.3564%208.77602L11.6319%2010.4438L6.08463%205.07929ZM8.03089%204.98287L9.31365%206.22336L9.98412%205.57498C10.3827%205.18952%2010.6241%204.94389%2010.7083%204.83812C10.8607%204.64682%2010.9322%204.45082%2010.9228%204.25012C10.9131%204.04474%2010.8188%203.85545%2010.6397%203.68225C10.4681%203.51636%2010.2856%203.42452%2010.0921%203.40673C9.89838%203.38427%209.70492%203.44451%209.51172%203.58743C9.39773%203.67327%209.09996%203.94903%208.61842%204.4147L8.03089%204.98287ZM10.2369%207.11622L11.7202%208.55065L12.6672%207.63489C13.0358%207.2784%2013.2583%207.04126%2013.3347%206.9235C13.4565%206.74717%2013.5066%206.55722%2013.485%206.35365C13.4632%206.14541%2013.354%205.94616%2013.1572%205.75587C12.9907%205.59487%2012.8126%205.4939%2012.6228%205.45299C12.433%205.41207%2012.2414%205.43395%2012.0479%205.51864C11.8567%205.60109%2011.5283%205.86736%2011.0629%206.31744L10.2369%207.11622Z%22%20fill%3D%22%2340865c%22%2F%3E%3C%2Fsvg%3E"); +} +i.icon.icon-text-orientation-angleclock { + width: 24px; + height: 24px; + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M15.2807%2022L15.2807%2016.3964L13.9217%2016.3964L13.9217%2019.7586L3.08379%208.55143L2%209.67214L12.8561%2020.597L9.56995%2020.597L9.56994%2022L15.2807%2022Z%22%20fill%3D%22%2340865c%22%2F%3E%3Cpath%20d%3D%22M12.6141%2010.6577L11.538%209.54484L12.3287%207.84242L10.3702%205.81718L8.74726%206.65905L7.69782%205.57385L14.9707%202L16.0168%203.08174L12.6141%2010.6577ZM12.915%206.57946L14.2306%203.82288L11.5782%205.19705L12.915%206.57946Z%22%20fill%3D%22%2340865c%22%2F%3E%3Cpath%20d%3D%22M18.9207%206.08463L20.8792%208.10987C21.2669%208.51077%2021.5372%208.82806%2021.6899%209.06174C21.8474%209.2952%2021.9447%209.54714%2021.9817%209.81755C22.021%2010.0903%2021.9969%2010.3756%2021.9093%2010.6735C21.8242%2010.9689%2021.6657%2011.2364%2021.434%2011.4761C21.1827%2011.7359%2020.8898%2011.9098%2020.5552%2011.9977C20.2229%2012.0879%2019.8984%2012.0778%2019.5819%2011.9674C19.7853%2012.3746%2019.8525%2012.7796%2019.7837%2013.1826C19.7148%2013.5857%2019.5254%2013.9473%2019.2156%2014.2677C18.9716%2014.52%2018.6814%2014.7118%2018.345%2014.8432C18.0132%2014.9743%2017.6875%2015.0185%2017.368%2014.9756C17.0531%2014.9326%2016.7484%2014.7915%2016.4537%2014.5524C16.2693%2014.4021%2015.8594%2014.0034%2015.224%2013.3564L13.5562%2011.6319L18.9207%206.08463ZM19.0171%208.03089L17.7766%209.31365L18.425%209.98412C18.8105%2010.3827%2019.0561%2010.6241%2019.1619%2010.7083C19.3532%2010.8607%2019.5492%2010.9322%2019.7499%2010.9228C19.9553%2010.9131%2020.1445%2010.8188%2020.3178%2010.6397C20.4836%2010.4681%2020.5755%2010.2856%2020.5933%2010.0921C20.6157%209.89838%2020.5555%209.70492%2020.4126%209.51172C20.3267%209.39773%2020.051%209.09996%2019.5853%208.61842L19.0171%208.03089ZM16.8838%2010.2369L15.4494%2011.7202L16.3651%2012.6672C16.7216%2013.0358%2016.9587%2013.2583%2017.0765%2013.3347C17.2528%2013.4565%2017.4428%2013.5066%2017.6463%2013.485C17.8546%2013.4632%2018.0538%2013.354%2018.2441%2013.1572C18.4051%2012.9907%2018.5061%2012.8126%2018.547%2012.6228C18.5879%2012.433%2018.566%2012.2414%2018.4814%2012.0479C18.3989%2011.8567%2018.1326%2011.5283%2017.6826%2011.0629L16.8838%2010.2369Z%22%20fill%3D%22%2340865c%22%2F%3E%3C%2Fsvg%3E"); +} +i.icon.icon-text-orientation-vertical { + width: 24px; + height: 24px; + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M7.10359%2022.0648L11.0819%2018.5454L9.95669%2017.55L7.33664%2019.8678L7.33664%201.9375L5.7453%201.9375L5.7453%2019.8678L3.12525%2017.55L2%2018.5454L5.97834%2022.0648L6.54097%2022.5625L7.10359%2022.0648Z%22%20fill%3D%22%2340865c%22%2F%3E%3Cpath%20d%3D%22M14.513%2013.1875L17.8287%2013.1875C18.4851%2013.1875%2018.9736%2013.2173%2019.2942%2013.277C19.6186%2013.3327%2019.9072%2013.4521%2020.1599%2013.6351C20.4164%2013.8182%2020.6295%2014.0629%2020.7993%2014.3693C20.969%2014.6717%2021.0539%2015.0119%2021.0539%2015.3899C21.0539%2015.7998%2020.9483%2016.1758%2020.737%2016.518C20.5296%2016.8602%2020.2467%2017.1168%2019.8883%2017.2879C20.3938%2017.4431%2020.7823%2017.7077%2021.0539%2018.0818C21.3255%2018.4558%2021.4613%2018.8955%2021.4613%2019.4008C21.4613%2019.7987%2021.3726%2020.1867%2021.1954%2020.5647C21.0218%2020.9387%2020.7823%2021.2392%2020.4768%2021.466C20.175%2021.6888%2019.8015%2021.8261%2019.3564%2021.8778C19.0773%2021.9096%2018.404%2021.9295%2017.3365%2021.9375L14.513%2021.9375L14.513%2013.1875ZM16.1878%2014.6438L16.1878%2016.6672L17.2855%2016.6672C17.9381%2016.6672%2018.3436%2016.6573%2018.502%2016.6374C18.7887%2016.6016%2019.0132%2016.4981%2019.1754%2016.327C19.3413%2016.1519%2019.4243%2015.9231%2019.4243%2015.6406C19.4243%2015.37%2019.3527%2015.1512%2019.2093%2014.9841C19.0697%2014.813%2018.8604%2014.7095%2018.5813%2014.6737C18.4153%2014.6538%2017.9381%2014.6438%2017.1497%2014.6438L16.1878%2014.6438ZM16.1878%2018.1235L16.1878%2020.4632L17.7382%2020.4632C18.3417%2020.4632%2018.7246%2020.4453%2018.8868%2020.4095C19.1358%2020.3618%2019.3376%2020.2464%2019.4922%2020.0634C19.6507%2019.8763%2019.7299%2019.6276%2019.7299%2019.3173C19.7299%2019.0547%2019.6695%2018.8318%2019.5488%2018.6488C19.4281%2018.4658%2019.2527%2018.3325%2019.0226%2018.2489C18.7963%2018.1653%2018.3021%2018.1235%2017.5401%2018.1235L16.1878%2018.1235Z%22%20fill%3D%22%2340865c%22%2F%3E%3Cpath%20d%3D%22M22%2010.6875L20.1781%2010.6875L19.4538%208.69995L16.1381%208.69995L15.4534%2010.6875L13.6768%2010.6875L16.9076%201.9375L18.6786%201.9375L22%2010.6875ZM18.9163%207.2257L17.7733%203.97877L16.653%207.2257L18.9163%207.2257Z%22%20fill%3D%22%2340865c%22%2F%3E%3C%2Fsvg%3E"); +} +i.icon.icon-text-orientation-rotateup { + width: 24px; + height: 24px; + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M5.9142%202.48263L2%205.89535L3.1071%206.86061L5.68491%204.61307L5.68491%2022L7.25059%2022L7.25059%204.61307L9.82839%206.86061L10.9355%205.89535L7.0213%202.48263L6.46775%202L5.9142%202.48263Z%22%20fill%3D%22%2340865c%22%2F%3E%3Cpath%20d%3D%22M21.9277%2012.5942L21.8993%2014.2496L19.9679%2014.9391L19.9162%2017.9517L21.8256%2018.5424L21.7979%2020.1567L13.3952%2017.3594L13.4228%2015.7502L21.9277%2012.5942ZM18.5353%2015.4508L15.3807%2016.5406L18.5%2017.5072L18.5353%2015.4508Z%22%20fill%3D%22%2340865c%22%2F%3E%3Cpath%20d%3D%22M13.4994%2011.0787L13.5511%208.06604C13.5614%207.46968%2013.5978%207.02537%2013.6605%206.7331C13.7194%206.43747%2013.8392%206.1734%2014.0199%205.94087C14.2008%205.70492%2014.4405%205.50741%2014.7391%205.34834C15.0339%205.18933%2015.3639%205.10684%2015.7291%205.10087C16.1251%205.0944%2016.4867%205.18442%2016.814%205.37095C17.1413%205.55405%2017.3849%205.80704%2017.5446%206.12994C17.7024%205.66822%2017.9641%205.31103%2018.3296%205.05835C18.6952%204.80567%2019.1221%204.67534%2019.6103%204.66736C19.9947%204.66107%2020.3681%204.73549%2020.7306%204.8906C21.0892%205.04235%2021.3757%205.25524%2021.59%205.52927C21.8006%205.79994%2021.9274%206.13708%2021.9704%206.54069C21.9968%206.79381%2022.0056%207.40527%2021.9966%208.37509V11.0787H13.4994ZM14.9325%209.53393L16.8872%209.50197L16.9043%208.50461C16.9145%207.91168%2016.9112%207.5434%2016.8945%207.39976C16.8643%207.13985%2016.7679%206.93756%2016.6051%206.79289C16.4386%206.64485%2016.2188%206.57306%2015.9459%206.57752C15.6845%206.5818%2015.472%206.65037%2015.3083%206.78325C15.1408%206.91277%2015.0376%207.10462%2014.9986%207.35881C14.9768%207.50993%2014.9598%207.94364%2014.9475%208.65996L14.9325%209.53393ZM18.2941%209.47896L20.5545%209.442L20.5786%208.03336C20.588%207.48499%2020.5767%207.1374%2020.5446%206.99059C20.5024%206.76514%2020.3941%206.58359%2020.2196%206.44597C20.0414%206.30497%2019.8024%206.23693%2019.5026%206.24183C19.2489%206.24598%2019.0327%206.30434%2018.854%206.4169C18.6753%206.52947%2018.5437%206.69095%2018.4594%206.90133C18.3752%207.10829%2018.3271%207.55794%2018.3152%208.25026L18.2941%209.47896Z%22%20fill%3D%22%2340865c%22%2F%3E%3C%2Fsvg%3E"); +} +i.icon.icon-text-orientation-rotatedown { + width: 24px; + height: 24px; + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M7.0213%2021.5174L10.9355%2018.1047L9.82839%2017.1394L7.25058%2019.3869L7.25059%202L5.68491%202L5.68491%2019.3869L3.1071%2017.1394L2%2018.1047L5.91419%2021.5174L6.46774%2022L7.0213%2021.5174Z%22%20fill%3D%22%2340865c%22%2F%3E%3Cpath%20d%3D%22M13.4675%2011.4058L13.4959%209.75035L15.4273%209.06091L15.479%206.04827L13.5695%205.45761L13.5972%203.84333L22%206.64062L21.9724%208.24976L13.4675%2011.4058ZM16.8599%208.54922L20.0145%207.45944L16.8952%206.49282L16.8599%208.54922Z%22%20fill%3D%22%2340865c%22%2F%3E%3Cpath%20d%3D%22M21.8957%2012.9213L21.844%2015.934C21.8338%2016.5303%2021.7974%2016.9746%2021.7347%2017.2669C21.6758%2017.5625%2021.556%2017.8266%2021.3752%2018.0591C21.1944%2018.2951%2020.9547%2018.4926%2020.656%2018.6517C20.3612%2018.8107%2020.0312%2018.8932%2019.6661%2018.8991C19.2701%2018.9056%2018.9085%2018.8156%2018.5812%2018.6291C18.2538%2018.446%2018.0103%2018.193%2017.8506%2017.8701C17.6928%2018.3318%2017.4311%2018.689%2017.0655%2018.9417C16.7%2019.1943%2016.2731%2019.3247%2015.7849%2019.3326C15.4005%2019.3389%2015.0271%2019.2645%2014.6646%2019.1094C14.306%2018.9577%2014.0195%2018.7448%2013.8051%2018.4707C13.5946%2018.2001%2013.4678%2017.8629%2013.4248%2017.4593C13.3984%2017.2062%2013.3896%2016.5947%2013.3986%2015.6249L13.3986%2012.9213L21.8957%2012.9213ZM20.4627%2014.4661L18.508%2014.498L18.4909%2015.4954C18.4807%2016.0883%2018.484%2016.4566%2018.5007%2016.6002C18.5309%2016.8601%2018.6273%2017.0624%2018.7901%2017.2071C18.9566%2017.3552%2019.1764%2017.4269%2019.4493%2017.4225C19.7107%2017.4182%2019.9232%2017.3496%2020.0869%2017.2167C20.2544%2017.0872%2020.3576%2016.8954%2020.3965%2016.6412C20.4184%2016.4901%2020.4354%2016.0564%2020.4477%2015.34L20.4627%2014.4661ZM17.101%2014.521L14.8407%2014.558L14.8166%2015.9666C14.8071%2016.515%2014.8185%2016.8626%2014.8505%2017.0094C14.8928%2017.2349%2015.0011%2017.4164%2015.1755%2017.554C15.3537%2017.695%2015.5928%2017.7631%2015.8926%2017.7582C16.1463%2017.754%2016.3625%2017.6957%2016.5412%2017.5831C16.7199%2017.4705%2016.8514%2017.3091%2016.9358%2017.0987C17.02%2016.8917%2017.0681%2016.4421%2017.08%2015.7497L17.101%2014.521Z%22%20fill%3D%22%2340865c%22%2F%3E%3C%2Fsvg%3E"); +} .active i.icon.icon-add-chart { width: 24px; height: 24px; diff --git a/apps/spreadsheeteditor/mobile/resources/css/app-material.css b/apps/spreadsheeteditor/mobile/resources/css/app-material.css index 2a7422b47..a10a87753 100644 --- a/apps/spreadsheeteditor/mobile/resources/css/app-material.css +++ b/apps/spreadsheeteditor/mobile/resources/css/app-material.css @@ -7133,6 +7133,36 @@ i.icon.icon-done-comment-white { height: 24px; background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M9%2016.1719L19.5938%205.57812L21%206.98438L9%2018.9844L3.42188%2013.4062L4.82812%2012L9%2016.1719Z%22%20fill%3D%22%23FFFFFF%22%2F%3E%3C%2Fsvg%3E"); } +i.icon.icon-text-orientation-horizontal { + width: 24px; + height: 24px; + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M9.51367%2010.75H11.269L8.06905%202H6.36276L3.25%2010.75H4.96174L5.62136%208.76245H8.81589L9.51367%2010.75ZM7.19682%204.04127L8.29801%207.2882H6.11744L7.19682%204.04127ZM16.0002%202H12.8057V10.75H15.5259C16.5544%2010.742%2017.2031%2010.7221%2017.4721%2010.6903C17.9009%2010.6386%2018.2607%2010.5013%2018.5515%2010.2785C18.8458%2010.0517%2019.0766%209.75125%2019.2438%209.37722C19.4146%208.9992%2019.5%208.61124%2019.5%208.21334C19.5%207.70799%2019.3692%207.2683%2019.1075%206.89427C18.8458%206.52024%2018.4715%206.25563%2017.9845%206.10044C18.3298%205.92934%2018.6023%205.67269%2018.8022%205.33049C19.0057%204.98829%2019.1075%204.61227%2019.1075%204.20242C19.1075%203.82441%2019.0257%203.4842%2018.8622%203.18179C18.6986%202.8754%2018.4933%202.63068%2018.2462%202.44765C18.0027%202.26461%2017.7247%202.14524%2017.4121%202.08953C17.1032%202.02984%2016.6326%202%2016.0002%202ZM14.4193%205.47971L14.4193%203.45634L15.346%203.45634C16.1056%203.45634%2016.5653%203.46629%2016.7252%203.48619C16.9942%203.522%2017.1959%203.62545%2017.3303%203.79656C17.4684%203.96368%2017.5375%204.18253%2017.5375%204.4531C17.5375%204.73562%2017.4575%204.96442%2017.2976%205.1395C17.1414%205.3106%2016.9251%205.41405%2016.6489%205.44986C16.4963%205.46976%2016.1056%205.47971%2015.4769%205.47971H14.4193ZM14.4193%209.27575V6.93605H15.7222C16.4563%206.93605%2016.9324%206.97783%2017.1504%207.06139C17.3721%207.14495%2017.5411%207.27825%2017.6574%207.46129C17.7737%207.64433%2017.8319%207.86716%2017.8319%208.12977C17.8319%208.44014%2017.7555%208.68884%2017.6029%208.87585C17.4539%209.05889%2017.2595%209.17428%2017.0196%209.22203C16.8633%209.25784%2016.4945%209.27575%2015.913%209.27575H14.4193ZM17.9829%2013.25L21.5023%2017.0829L22%2017.625L21.5023%2018.1671L17.9829%2022L16.9875%2020.9159L19.3053%2018.3916H2V16.8584H19.3053L16.9875%2014.3341L17.9829%2013.25Z%22%20fill%3D%22%2340865c%22%2F%3E%3C%2Fsvg%3E"); +} +i.icon.icon-text-orientation-anglecount { + width: 24px; + height: 24px; + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M22%208.71927H16.3964V10.0783L19.7586%2010.0783L8.55142%2020.9162L9.67214%2022L20.597%2011.1439V14.4301L22%2014.4301V8.71927Z%22%20fill%3D%22%2340865c%22%2F%3E%3Cpath%20d%3D%22M10.6577%2011.3859L9.54484%2012.462L7.84242%2011.6713L5.81718%2013.6298L6.65905%2015.2527L5.57385%2016.3022L2%209.02933L3.08174%207.98323L10.6577%2011.3859ZM6.57946%2011.085L3.82288%209.76944L5.19705%2012.4218L6.57946%2011.085Z%22%20fill%3D%22%2340865c%22%2F%3E%3Cpath%20d%3D%22M6.08462%205.07929L8.10986%203.12078C8.51077%202.73309%208.82806%202.46285%209.06174%202.31005C9.2952%202.15259%209.54714%202.05532%209.81755%202.01826C10.0903%201.97896%2010.3756%202.0031%2010.6735%202.09068C10.9689%202.17582%2011.2364%202.33426%2011.4761%202.56602C11.7359%202.81728%2011.9098%203.1102%2011.9977%203.44478C12.0879%203.77712%2012.0778%204.10158%2011.9674%204.41815C12.3746%204.21472%2012.7796%204.14745%2013.1826%204.21634C13.5857%204.28523%2013.9473%204.47458%2014.2677%204.7844C14.52%205.02835%2014.7118%205.31856%2014.8432%205.65504C14.9743%205.98684%2015.0184%206.31251%2014.9756%206.63204C14.9326%206.9469%2014.7915%207.25165%2014.5524%207.54628C14.4021%207.73067%2014.0034%208.14059%2013.3564%208.77602L11.6319%2010.4438L6.08462%205.07929ZM8.03089%204.98287L9.31365%206.22336L9.98412%205.57498C10.3827%205.18952%2010.6241%204.94389%2010.7082%204.83812C10.8607%204.64682%2010.9322%204.45082%2010.9228%204.25012C10.9131%204.04474%2010.8188%203.85545%2010.6397%203.68225C10.4681%203.51636%2010.2856%203.42452%2010.0921%203.40673C9.89838%203.38427%209.70492%203.44451%209.51172%203.58743C9.39773%203.67327%209.09996%203.94903%208.61842%204.4147L8.03089%204.98287ZM10.2369%207.11622L11.7202%208.55065L12.6672%207.63489C13.0358%207.2784%2013.2583%207.04126%2013.3347%206.9235C13.4565%206.74717%2013.5066%206.55722%2013.485%206.35365C13.4632%206.14541%2013.354%205.94616%2013.1572%205.75587C12.9907%205.59487%2012.8126%205.4939%2012.6228%205.45299C12.433%205.41207%2012.2414%205.43395%2012.0479%205.51864C11.8567%205.60109%2011.5283%205.86736%2011.0629%206.31744L10.2369%207.11622Z%22%20fill%3D%22%2340865c%22%2F%3E%3C%2Fsvg%3E"); +} +i.icon.icon-text-orientation-angleclock { + width: 24px; + height: 24px; + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M15.2807%2022L15.2807%2016.3964L13.9217%2016.3964L13.9217%2019.7586L3.08379%208.55143L2%209.67214L12.8561%2020.597L9.56995%2020.597L9.56994%2022L15.2807%2022Z%22%20fill%3D%22%2340865c%22%2F%3E%3Cpath%20d%3D%22M12.6141%2010.6577L11.538%209.54484L12.3287%207.84242L10.3702%205.81718L8.74726%206.65905L7.69782%205.57385L14.9707%202L16.0168%203.08174L12.6141%2010.6577ZM12.915%206.57946L14.2306%203.82288L11.5782%205.19705L12.915%206.57946Z%22%20fill%3D%22%2340865c%22%2F%3E%3Cpath%20d%3D%22M18.9207%206.08463L20.8792%208.10987C21.2669%208.51077%2021.5372%208.82806%2021.6899%209.06174C21.8474%209.2952%2021.9447%209.54714%2021.9817%209.81755C22.021%2010.0903%2021.9969%2010.3756%2021.9093%2010.6735C21.8242%2010.9689%2021.6657%2011.2364%2021.434%2011.4761C21.1827%2011.7359%2020.8898%2011.9098%2020.5552%2011.9977C20.2229%2012.0879%2019.8984%2012.0778%2019.5819%2011.9674C19.7853%2012.3746%2019.8525%2012.7796%2019.7837%2013.1826C19.7148%2013.5857%2019.5254%2013.9473%2019.2156%2014.2677C18.9716%2014.52%2018.6814%2014.7118%2018.345%2014.8432C18.0132%2014.9743%2017.6875%2015.0185%2017.368%2014.9756C17.0531%2014.9326%2016.7484%2014.7915%2016.4537%2014.5524C16.2693%2014.4021%2015.8594%2014.0034%2015.224%2013.3564L13.5562%2011.6319L18.9207%206.08463ZM19.0171%208.03089L17.7766%209.31365L18.425%209.98412C18.8105%2010.3827%2019.0561%2010.6241%2019.1619%2010.7083C19.3532%2010.8607%2019.5492%2010.9322%2019.7499%2010.9228C19.9553%2010.9131%2020.1445%2010.8188%2020.3178%2010.6397C20.4836%2010.4681%2020.5755%2010.2856%2020.5933%2010.0921C20.6157%209.89838%2020.5555%209.70492%2020.4126%209.51172C20.3267%209.39773%2020.051%209.09996%2019.5853%208.61842L19.0171%208.03089ZM16.8838%2010.2369L15.4494%2011.7202L16.3651%2012.6672C16.7216%2013.0358%2016.9587%2013.2583%2017.0765%2013.3347C17.2528%2013.4565%2017.4428%2013.5066%2017.6463%2013.485C17.8546%2013.4632%2018.0538%2013.354%2018.2441%2013.1572C18.4051%2012.9907%2018.5061%2012.8126%2018.547%2012.6228C18.5879%2012.433%2018.566%2012.2414%2018.4814%2012.0479C18.3989%2011.8567%2018.1326%2011.5283%2017.6826%2011.0629L16.8838%2010.2369Z%22%20fill%3D%22%2340865c%22%2F%3E%3C%2Fsvg%3E"); +} +i.icon.icon-text-orientation-vertical { + width: 24px; + height: 24px; + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M7.10359%2022.0648L11.0819%2018.5454L9.95669%2017.55L7.33664%2019.8678L7.33664%201.9375L5.7453%201.9375L5.7453%2019.8678L3.12525%2017.55L2%2018.5454L5.97834%2022.0648L6.54097%2022.5625L7.10359%2022.0648Z%22%20fill%3D%22%2340865c%22%2F%3E%3Cpath%20d%3D%22M14.513%2013.1875L17.8287%2013.1875C18.4851%2013.1875%2018.9736%2013.2173%2019.2942%2013.277C19.6186%2013.3327%2019.9072%2013.4521%2020.1599%2013.6351C20.4164%2013.8182%2020.6295%2014.0629%2020.7993%2014.3693C20.969%2014.6717%2021.0539%2015.0119%2021.0539%2015.3899C21.0539%2015.7998%2020.9483%2016.1758%2020.737%2016.518C20.5296%2016.8602%2020.2467%2017.1168%2019.8883%2017.2879C20.3938%2017.4431%2020.7823%2017.7077%2021.0539%2018.0818C21.3255%2018.4558%2021.4613%2018.8955%2021.4613%2019.4008C21.4613%2019.7987%2021.3726%2020.1867%2021.1954%2020.5647C21.0218%2020.9387%2020.7823%2021.2392%2020.4768%2021.466C20.175%2021.6888%2019.8015%2021.8261%2019.3564%2021.8778C19.0773%2021.9096%2018.404%2021.9295%2017.3365%2021.9375L14.513%2021.9375L14.513%2013.1875ZM16.1878%2014.6438L16.1878%2016.6672L17.2855%2016.6672C17.9381%2016.6672%2018.3436%2016.6573%2018.502%2016.6374C18.7887%2016.6016%2019.0132%2016.4981%2019.1754%2016.327C19.3413%2016.1519%2019.4243%2015.9231%2019.4243%2015.6406C19.4243%2015.37%2019.3527%2015.1512%2019.2093%2014.9841C19.0697%2014.813%2018.8604%2014.7095%2018.5813%2014.6737C18.4153%2014.6538%2017.9381%2014.6438%2017.1497%2014.6438L16.1878%2014.6438ZM16.1878%2018.1235L16.1878%2020.4632L17.7382%2020.4632C18.3417%2020.4632%2018.7246%2020.4453%2018.8868%2020.4095C19.1358%2020.3618%2019.3376%2020.2464%2019.4922%2020.0634C19.6507%2019.8763%2019.7299%2019.6276%2019.7299%2019.3173C19.7299%2019.0547%2019.6695%2018.8318%2019.5488%2018.6488C19.4281%2018.4658%2019.2527%2018.3325%2019.0226%2018.2489C18.7963%2018.1653%2018.3021%2018.1235%2017.5401%2018.1235L16.1878%2018.1235Z%22%20fill%3D%22%2340865c%22%2F%3E%3Cpath%20d%3D%22M22%2010.6875L20.1781%2010.6875L19.4538%208.69995L16.1381%208.69995L15.4534%2010.6875L13.6768%2010.6875L16.9076%201.9375L18.6786%201.9375L22%2010.6875ZM18.9163%207.2257L17.7733%203.97877L16.653%207.2257L18.9163%207.2257Z%22%20fill%3D%22%2340865c%22%2F%3E%3C%2Fsvg%3E"); +} +i.icon.icon-text-orientation-rotateup { + width: 24px; + height: 24px; + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M5.9142%202.48263L2%205.89535L3.1071%206.86061L5.68491%204.61307L5.68491%2022L7.25059%2022L7.25059%204.61307L9.82839%206.86061L10.9355%205.89535L7.0213%202.48263L6.46775%202L5.9142%202.48263Z%22%20fill%3D%22%2340865c%22%2F%3E%3Cpath%20d%3D%22M21.9277%2012.5942L21.8993%2014.2496L19.9679%2014.9391L19.9162%2017.9517L21.8256%2018.5424L21.7979%2020.1567L13.3952%2017.3594L13.4228%2015.7502L21.9277%2012.5942ZM18.5353%2015.4508L15.3807%2016.5406L18.5%2017.5072L18.5353%2015.4508Z%22%20fill%3D%22%2340865c%22%2F%3E%3Cpath%20d%3D%22M13.4994%2011.0787L13.5511%208.06604C13.5614%207.46968%2013.5978%207.02537%2013.6605%206.7331C13.7194%206.43747%2013.8392%206.1734%2014.0199%205.94087C14.2008%205.70492%2014.4405%205.50741%2014.7391%205.34834C15.0339%205.18933%2015.3639%205.10684%2015.7291%205.10087C16.1251%205.0944%2016.4867%205.18442%2016.814%205.37095C17.1413%205.55405%2017.3849%205.80704%2017.5446%206.12994C17.7024%205.66822%2017.9641%205.31103%2018.3296%205.05835C18.6952%204.80567%2019.1221%204.67534%2019.6103%204.66736C19.9947%204.66107%2020.3681%204.73549%2020.7306%204.8906C21.0892%205.04235%2021.3757%205.25524%2021.59%205.52927C21.8006%205.79994%2021.9274%206.13708%2021.9704%206.54069C21.9968%206.79381%2022.0056%207.40527%2021.9966%208.37509V11.0787H13.4994ZM14.9325%209.53393L16.8872%209.50197L16.9043%208.50461C16.9145%207.91168%2016.9112%207.5434%2016.8945%207.39976C16.8643%207.13985%2016.7679%206.93756%2016.6051%206.79289C16.4386%206.64485%2016.2188%206.57306%2015.9459%206.57752C15.6845%206.5818%2015.472%206.65037%2015.3083%206.78325C15.1408%206.91277%2015.0376%207.10462%2014.9986%207.35881C14.9768%207.50993%2014.9598%207.94364%2014.9475%208.65996L14.9325%209.53393ZM18.2941%209.47896L20.5545%209.442L20.5786%208.03336C20.588%207.48499%2020.5767%207.1374%2020.5446%206.99059C20.5024%206.76514%2020.3941%206.58359%2020.2196%206.44597C20.0414%206.30497%2019.8024%206.23693%2019.5026%206.24183C19.2489%206.24598%2019.0327%206.30434%2018.854%206.4169C18.6753%206.52947%2018.5437%206.69095%2018.4594%206.90133C18.3752%207.10829%2018.3271%207.55794%2018.3152%208.25026L18.2941%209.47896Z%22%20fill%3D%22%2340865c%22%2F%3E%3C%2Fsvg%3E"); +} +i.icon.icon-text-orientation-rotatedown { + width: 24px; + height: 24px; + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M7.0213%2021.5174L10.9355%2018.1047L9.82839%2017.1394L7.25058%2019.3869L7.25059%202L5.68491%202L5.68491%2019.3869L3.1071%2017.1394L2%2018.1047L5.91419%2021.5174L6.46774%2022L7.0213%2021.5174Z%22%20fill%3D%22%2340865c%22%2F%3E%3Cpath%20d%3D%22M13.4675%2011.4058L13.4959%209.75035L15.4273%209.06091L15.479%206.04827L13.5695%205.45761L13.5972%203.84333L22%206.64062L21.9724%208.24976L13.4675%2011.4058ZM16.8599%208.54922L20.0145%207.45944L16.8952%206.49282L16.8599%208.54922Z%22%20fill%3D%22%2340865c%22%2F%3E%3Cpath%20d%3D%22M21.8957%2012.9213L21.844%2015.934C21.8338%2016.5303%2021.7974%2016.9746%2021.7347%2017.2669C21.6758%2017.5625%2021.556%2017.8266%2021.3752%2018.0591C21.1944%2018.2951%2020.9547%2018.4926%2020.656%2018.6517C20.3612%2018.8107%2020.0312%2018.8932%2019.6661%2018.8991C19.2701%2018.9056%2018.9085%2018.8156%2018.5812%2018.6291C18.2538%2018.446%2018.0103%2018.193%2017.8506%2017.8701C17.6928%2018.3318%2017.4311%2018.689%2017.0655%2018.9417C16.7%2019.1943%2016.2731%2019.3247%2015.7849%2019.3326C15.4005%2019.3389%2015.0271%2019.2645%2014.6646%2019.1094C14.306%2018.9577%2014.0195%2018.7448%2013.8051%2018.4707C13.5946%2018.2001%2013.4678%2017.8629%2013.4248%2017.4593C13.3984%2017.2062%2013.3896%2016.5947%2013.3986%2015.6249L13.3986%2012.9213L21.8957%2012.9213ZM20.4627%2014.4661L18.508%2014.498L18.4909%2015.4954C18.4807%2016.0883%2018.484%2016.4566%2018.5007%2016.6002C18.5309%2016.8601%2018.6273%2017.0624%2018.7901%2017.2071C18.9566%2017.3552%2019.1764%2017.4269%2019.4493%2017.4225C19.7107%2017.4182%2019.9232%2017.3496%2020.0869%2017.2167C20.2544%2017.0872%2020.3576%2016.8954%2020.3965%2016.6412C20.4184%2016.4901%2020.4354%2016.0564%2020.4477%2015.34L20.4627%2014.4661ZM17.101%2014.521L14.8407%2014.558L14.8166%2015.9666C14.8071%2016.515%2014.8185%2016.8626%2014.8505%2017.0094C14.8928%2017.2349%2015.0011%2017.4164%2015.1755%2017.554C15.3537%2017.695%2015.5928%2017.7631%2015.8926%2017.7582C16.1463%2017.754%2016.3625%2017.6957%2016.5412%2017.5831C16.7199%2017.4705%2016.8514%2017.3091%2016.9358%2017.0987C17.02%2016.8917%2017.0681%2016.4421%2017.08%2015.7497L17.101%2014.521Z%22%20fill%3D%22%2340865c%22%2F%3E%3C%2Fsvg%3E"); +} .navbar i.icon.icon-logo { width: 100px; height: 14px; diff --git a/apps/spreadsheeteditor/mobile/resources/less/ios/_icons.less b/apps/spreadsheeteditor/mobile/resources/less/ios/_icons.less index 4db7458e3..7d65fe9a0 100644 --- a/apps/spreadsheeteditor/mobile/resources/less/ios/_icons.less +++ b/apps/spreadsheeteditor/mobile/resources/less/ios/_icons.less @@ -440,6 +440,37 @@ i.icon { height: 24px; .encoded-svg-background(''); } + // Text orientation + &.icon-text-orientation-horizontal { + width: 24px; + height: 24px; + .encoded-svg-background(''); + } + &.icon-text-orientation-anglecount { + width: 24px; + height: 24px; + .encoded-svg-background(''); + } + &.icon-text-orientation-angleclock { + width: 24px; + height: 24px; + .encoded-svg-background(''); + } + &.icon-text-orientation-vertical { + width: 24px; + height: 24px; + .encoded-svg-background(''); + } + &.icon-text-orientation-rotateup { + width: 24px; + height: 24px; + .encoded-svg-background(''); + } + &.icon-text-orientation-rotatedown { + width: 24px; + height: 24px; + .encoded-svg-background(''); + } } .active { diff --git a/apps/spreadsheeteditor/mobile/resources/less/material/_icons.less b/apps/spreadsheeteditor/mobile/resources/less/material/_icons.less index cd0e20035..a81b86ed4 100644 --- a/apps/spreadsheeteditor/mobile/resources/less/material/_icons.less +++ b/apps/spreadsheeteditor/mobile/resources/less/material/_icons.less @@ -388,6 +388,37 @@ i.icon { height: 24px; .encoded-svg-background(''); } + // Text orientation + &.icon-text-orientation-horizontal { + width: 24px; + height: 24px; + .encoded-svg-background(''); + } + &.icon-text-orientation-anglecount { + width: 24px; + height: 24px; + .encoded-svg-background(''); + } + &.icon-text-orientation-angleclock { + width: 24px; + height: 24px; + .encoded-svg-background(''); + } + &.icon-text-orientation-vertical { + width: 24px; + height: 24px; + .encoded-svg-background(''); + } + &.icon-text-orientation-rotateup { + width: 24px; + height: 24px; + .encoded-svg-background(''); + } + &.icon-text-orientation-rotatedown { + width: 24px; + height: 24px; + .encoded-svg-background(''); + } } // Overwrite color for toolbar From 7afb5e9a59fb875c67ee853c2538e0d904535402 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 2 Jun 2020 12:26:38 +0300 Subject: [PATCH 74/92] Refactoring LoadMask component --- apps/common/main/lib/component/LoadMask.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/common/main/lib/component/LoadMask.js b/apps/common/main/lib/component/LoadMask.js index 93d7b4a86..e0792ec67 100644 --- a/apps/common/main/lib/component/LoadMask.js +++ b/apps/common/main/lib/component/LoadMask.js @@ -167,7 +167,7 @@ define([ }, isVisible: function() { - return loaderEl.is(':visible'); + return !!ownerEl.ismasked; }, updatePosition: function() { From c0813053ccaff23af07201964d84ac348a5e0337 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 2 Jun 2020 12:42:07 +0300 Subject: [PATCH 75/92] [SSE] Refactoring text orientation in shape --- .../spreadsheeteditor/main/app/controller/Toolbar.js | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/Toolbar.js b/apps/spreadsheeteditor/main/app/controller/Toolbar.js index dfaddf1ea..fcd069d2a 100644 --- a/apps/spreadsheeteditor/main/app/controller/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/controller/Toolbar.js @@ -785,17 +785,6 @@ define([ }, onTextOrientationMenu: function(menu, item) { - if (this.api.asc_getCellInfo().asc_getSelectionType() == Asc.c_oAscSelectionType.RangeShapeText) { - var angle = Asc.c_oAscVertDrawingText.normal; - switch (item.value) { - case 'rotateup': angle = Asc.c_oAscVertDrawingText.vert270; break; - case 'rotatedown': angle = Asc.c_oAscVertDrawingText.vert; break; - } - - var properties = new Asc.asc_CImgProperty(); - properties.asc_putVert(angle); - this.api.asc_setGraphicObjectProps(properties); - } else { var angle = 0; switch (item.value) { @@ -809,7 +798,6 @@ define([ this._state.angle = undefined; if (this.api) this.api.asc_setCellAngle(angle); - } Common.NotificationCenter.trigger('edit:complete', this.toolbar); Common.component.Analytics.trackEvent('ToolBar', 'Text orientation'); From dabb2cea37f84f69c824e438bc8fe4e2f91d6394 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 2 Jun 2020 16:35:29 +0300 Subject: [PATCH 76/92] [SSE] Refactoring pivot settings --- apps/spreadsheeteditor/main/resources/less/rightmenu.less | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/spreadsheeteditor/main/resources/less/rightmenu.less b/apps/spreadsheeteditor/main/resources/less/rightmenu.less index 596b0f3a6..90b37bc49 100644 --- a/apps/spreadsheeteditor/main/resources/less/rightmenu.less +++ b/apps/spreadsheeteditor/main/resources/less/rightmenu.less @@ -224,8 +224,8 @@ button:active:not(.disabled) .btn-change-shape {background-position: -56px - } .list-item > div:nth-child(1) { - width:70px; - padding-right: 5px; + width:65px; + padding-right: 0; display: inline-block; white-space: pre; overflow: hidden; @@ -235,9 +235,9 @@ button:active:not(.disabled) .btn-change-shape {background-position: -56px - .listitem-icon { vertical-align: middle; - width: 16px; + width: 22px; height: 16px; - background-position: -1px -274px; + background-position: 1px -274px; display: inline-block; } } From 7292601ee32c4bfc85b69f207e1784088d97d56a Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Tue, 2 Jun 2020 17:43:48 +0300 Subject: [PATCH 77/92] [mobile] Add macros settings in Application settings --- .../mobile/app/controller/Settings.js | 17 +++++ .../mobile/app/template/Settings.template | 65 +++++++++++++++++++ .../mobile/app/view/Settings.js | 14 +++- apps/documenteditor/mobile/locale/en.json | 7 ++ .../mobile/resources/css/app-ios.css | 7 ++ .../mobile/resources/css/app-material.css | 7 ++ .../mobile/resources/less/app-ios.less | 15 +++++ .../mobile/resources/less/app-material.less | 15 +++++ .../mobile/app/controller/Settings.js | 17 +++++ .../mobile/app/template/Settings.template | 64 ++++++++++++++++++ .../mobile/app/view/Settings.js | 21 +++++- apps/presentationeditor/mobile/locale/en.json | 7 ++ .../mobile/resources/css/app-ios.css | 7 ++ .../mobile/resources/css/app-material.css | 7 ++ .../mobile/resources/less/app-ios.less | 15 +++++ .../mobile/resources/less/app-material.less | 15 +++++ .../mobile/app/controller/Settings.js | 16 +++++ .../mobile/app/template/Settings.template | 64 ++++++++++++++++++ .../mobile/app/view/Settings.js | 21 +++++- apps/spreadsheeteditor/mobile/locale/en.json | 7 ++ .../mobile/resources/css/app-ios.css | 7 ++ .../mobile/resources/css/app-material.css | 7 ++ .../mobile/resources/less/app-ios.less | 15 +++++ .../mobile/resources/less/app-material.less | 15 +++++ 24 files changed, 446 insertions(+), 6 deletions(-) diff --git a/apps/documenteditor/mobile/app/controller/Settings.js b/apps/documenteditor/mobile/app/controller/Settings.js index c058d65bd..3b59d6245 100644 --- a/apps/documenteditor/mobile/app/controller/Settings.js +++ b/apps/documenteditor/mobile/app/controller/Settings.js @@ -254,6 +254,9 @@ define([ } else if ('#margins-view' == pageId) { me.initPageMargin(); Common.Utils.addScrollIfNeed('.page[data-page=margin-view]', '.page[data-page=margin-view] .page-content'); + } else if ('#macros-settings-view' == pageId) { + me.initPageMacrosSettings(); + Common.Utils.addScrollIfNeed('.page[data-page=macros-settings-view]', '.page[data-page=macros-settings-view] .page-content'); } else { $('#settings-readermode input:checkbox').attr('checked', Common.SharedSettings.get('readerMode')); $('#settings-search').single('click', _.bind(me.onSearch, me)); @@ -273,6 +276,20 @@ define([ } }, + initPageMacrosSettings: function() { + var me = this, + $pageMacrosSettings = $('.page[data-page="macros-settings-view"] input:radio[name=macros-settings]'), + value = Common.Utils.InternalSettings.get("de-mobile-macros-mode") || 0; + $pageMacrosSettings.single('change', _.bind(me.onChangeMacrosSettings, me)); + $pageMacrosSettings.val([value]); + }, + + onChangeMacrosSettings: function(e) { + var value = parseInt($(e.currentTarget).val()); + Common.Utils.InternalSettings.set("de-mobile-macros-mode", value); + Common.localStorage.setItem("de-mobile-macros-mode", value); + }, + onChangeDisplayComments: function(e) { var displayComments = $(e.currentTarget).is(':checked'); if (!displayComments) { diff --git a/apps/documenteditor/mobile/app/template/Settings.template b/apps/documenteditor/mobile/app/template/Settings.template index caeee9e4c..1c2bc5256 100644 --- a/apps/documenteditor/mobile/app/template/Settings.template +++ b/apps/documenteditor/mobile/app/template/Settings.template @@ -770,6 +770,20 @@ + + @@ -872,4 +886,55 @@ + + + +
    + +
    +
    +
    +
    +
      +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    +
    + +
    +
    +
    \ No newline at end of file diff --git a/apps/documenteditor/mobile/app/view/Settings.js b/apps/documenteditor/mobile/app/view/Settings.js index 4d34d2997..9f665b35f 100644 --- a/apps/documenteditor/mobile/app/view/Settings.js +++ b/apps/documenteditor/mobile/app/view/Settings.js @@ -59,7 +59,8 @@ define([ _canHelp = true, _canPrint = false, _canReview = false, - _isReviewOnly = false; + _isReviewOnly = false, + _isShowMacros = true; return { // el: '.view-main', @@ -120,6 +121,7 @@ define([ if (mode.customization) { _canHelp = (mode.customization.help!==false); + _isShowMacros = (mode.customization.macros!==false); } }, @@ -149,6 +151,7 @@ define([ if (!_canPrint) $layour.find('#settings-print').hide(); if (!_canReview) $layour.find('#settings-review').hide(); if (_isReviewOnly) $layour.find('#settings-review').addClass('disabled'); + if (!_isShowMacros) $layour.find('#settings-macros').hide(); return $layour.html(); } @@ -332,7 +335,14 @@ define([ textUploaded: 'Uploaded', textLastModified: 'Last Modified', textLastModifiedBy: 'Last Modified By', - textCreated: 'Created' + textCreated: 'Created', + textMacrosSettings: 'Macros Settings', + textDisableAll: 'Disable All', + textDisableAllMacrosWithoutNotification: 'Disable all macros without notification', + textShowNotification: 'Show Notification', + textDisableAllMacrosWithNotification: 'Disable all macros with notification', + textEnableAll: 'Enable All', + textEnableAllMacrosWithoutNotification: 'Enable all macros without notification' } diff --git a/apps/documenteditor/mobile/locale/en.json b/apps/documenteditor/mobile/locale/en.json index 91156dc42..e5474144d 100644 --- a/apps/documenteditor/mobile/locale/en.json +++ b/apps/documenteditor/mobile/locale/en.json @@ -570,5 +570,12 @@ "DE.Views.Settings.textVersion": "Version", "DE.Views.Settings.textWords": "Words", "DE.Views.Settings.unknownText": "Unknown", + "DE.Views.Settings.textMacrosSettings": "Macros Settings", + "DE.Views.Settings.textDisableAll": "Disable All", + "DE.Views.Settings.textDisableAllMacrosWithoutNotification": "Disable all macros without notification", + "DE.Views.Settings.textShowNotification": "Show Notification", + "DE.Views.Settings.textDisableAllMacrosWithNotification": "Disable all macros with notification", + "DE.Views.Settings.textEnableAll": "Enable All", + "DE.Views.Settings.textEnableAllMacrosWithoutNotification": "Enable all macros without notification", "DE.Views.Toolbar.textBack": "Back" } \ No newline at end of file diff --git a/apps/documenteditor/mobile/resources/css/app-ios.css b/apps/documenteditor/mobile/resources/css/app-ios.css index fbc571974..eec882b69 100644 --- a/apps/documenteditor/mobile/resources/css/app-ios.css +++ b/apps/documenteditor/mobile/resources/css/app-ios.css @@ -7778,3 +7778,10 @@ html.pixel-ratio-3 .numbers li { -o-animation: flickerAnimation 2s infinite ease-in-out; animation: flickerAnimation 2s infinite ease-in-out; } +.page-macros-settings[data-page="macros-settings-view"] .list-block li.media-item .item-title { + font-weight: normal; +} +.page-macros-settings[data-page="macros-settings-view"] .list-block li.media-item .item-subtitle { + font-size: 14px; + color: #8e8e93; +} diff --git a/apps/documenteditor/mobile/resources/css/app-material.css b/apps/documenteditor/mobile/resources/css/app-material.css index 65118842b..a5f94d55f 100644 --- a/apps/documenteditor/mobile/resources/css/app-material.css +++ b/apps/documenteditor/mobile/resources/css/app-material.css @@ -7639,3 +7639,10 @@ html.pixel-ratio-3 .numbers li { -o-animation: flickerAnimation 2s infinite ease-in-out; animation: flickerAnimation 2s infinite ease-in-out; } +.page-macros-settings[data-page="macros-settings-view"] .list-block li.media-item .item-title { + font-weight: normal; +} +.page-macros-settings[data-page="macros-settings-view"] .list-block li.media-item .item-subtitle { + font-size: 14px; + color: #9e9e9e; +} diff --git a/apps/documenteditor/mobile/resources/less/app-ios.less b/apps/documenteditor/mobile/resources/less/app-ios.less index 379577dd0..7afcfe9cb 100644 --- a/apps/documenteditor/mobile/resources/less/app-ios.less +++ b/apps/documenteditor/mobile/resources/less/app-ios.less @@ -276,3 +276,18 @@ input, textarea { animation: flickerAnimation 2s infinite ease-in-out; } } + +// Macros settings +.page-macros-settings[data-page="macros-settings-view"] { + .list-block { + li.media-item { + .item-title { + font-weight: normal; + } + .item-subtitle { + font-size: 14px; + color: @gray; + } + } + } +} diff --git a/apps/documenteditor/mobile/resources/less/app-material.less b/apps/documenteditor/mobile/resources/less/app-material.less index 351b81974..b74cd4923 100644 --- a/apps/documenteditor/mobile/resources/less/app-material.less +++ b/apps/documenteditor/mobile/resources/less/app-material.less @@ -275,3 +275,18 @@ input, textarea { animation: flickerAnimation 2s infinite ease-in-out; } } + +// Macros settings +.page-macros-settings[data-page="macros-settings-view"] { + .list-block { + li.media-item { + .item-title { + font-weight: normal; + } + .item-subtitle { + font-size: 14px; + color: @gray; + } + } + } +} diff --git a/apps/presentationeditor/mobile/app/controller/Settings.js b/apps/presentationeditor/mobile/app/controller/Settings.js index d902cdc49..c939fd041 100644 --- a/apps/presentationeditor/mobile/app/controller/Settings.js +++ b/apps/presentationeditor/mobile/app/controller/Settings.js @@ -176,6 +176,7 @@ define([ Common.Utils.addScrollIfNeed('.page[data-page=settings-info-view]', '.page[data-page=settings-info-view] .page-content'); Common.Utils.addScrollIfNeed('.page[data-page=settings-about-view]', '.page[data-page=settings-about-view] .page-content'); Common.Utils.addScrollIfNeed('.page[data-page=color-schemes-view]', '.page[data-page=color-schemes-view] .page-content'); + Common.Utils.addScrollIfNeed('.page[data-page=settings-macros-view]', '.page[data-page=settings-macros-view] .page-content'); me.initSettings(pageId); }, @@ -193,9 +194,25 @@ define([ me.initPageColorSchemes(); } else if ('#settings-info-view' == pageId) { me.initPageInfo(); + } else if ('#settings-macros-view' == pageId) { + me.initPageMacrosSettings(); } }, + initPageMacrosSettings: function() { + var me = this, + $pageMacrosSettings = $('.page[data-page="settings-macros-view"] input:radio[name=macros-settings]'), + value = Common.Utils.InternalSettings.get("pe-mobile-macros-mode") || 0; + $pageMacrosSettings.single('change', _.bind(me.onChangeMacrosSettings, me)); + $pageMacrosSettings.val([value]); + }, + + onChangeMacrosSettings: function(e) { + var value = parseInt($(e.currentTarget).val()); + Common.Utils.InternalSettings.set("pe-mobile-macros-mode", value); + Common.localStorage.setItem("pe-mobile-macros-mode", value); + }, + initPageInfo: function() { var document = Common.SharedSettings.get('document') || {}, info = document.info || {}; diff --git a/apps/presentationeditor/mobile/app/template/Settings.template b/apps/presentationeditor/mobile/app/template/Settings.template index aa13a05ab..1101322e4 100644 --- a/apps/presentationeditor/mobile/app/template/Settings.template +++ b/apps/presentationeditor/mobile/app/template/Settings.template @@ -522,6 +522,19 @@ + @@ -544,4 +557,55 @@ + + + +
    + +
    +
    +
    +
    +
      +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    +
    + +
    +
    +
    \ No newline at end of file diff --git a/apps/presentationeditor/mobile/app/view/Settings.js b/apps/presentationeditor/mobile/app/view/Settings.js index a4b486ec5..42b0b3a69 100644 --- a/apps/presentationeditor/mobile/app/view/Settings.js +++ b/apps/presentationeditor/mobile/app/view/Settings.js @@ -55,7 +55,8 @@ define([ canDownload = false, canAbout = true, canHelp = true, - canPrint = false; + canPrint = false, + isShowMacros = true; return { // el: '.view-main', @@ -117,6 +118,7 @@ define([ if (mode.customization) { canHelp = (mode.customization.help!==false); + isShowMacros = (mode.customization.macros!==false); } }, @@ -140,6 +142,7 @@ define([ if (!canAbout) $layour.find('#settings-about').hide(); if (!canHelp) $layour.find('#settings-help').hide(); if (!canPrint) $layour.find('#settings-print').hide(); + if (!isShowMacros) $layour.find('#settings-macros').hide(); return $layour.html(); } @@ -186,6 +189,10 @@ define([ this.showPage('#settings-history-view'); }, + showMacros: function () { + this.showPage('#settings-macros-view'); + }, + showHelp: function () { var url = '{{HELP_URL}}'; if (url.charAt(url.length-1) !== '/') { @@ -213,6 +220,9 @@ define([ showSetApp: function () { this.showPage('#settings-application-view'); + if (isShowMacros) { + $('#settings-macros').single('click', _.bind(this.showMacros, this)); + } }, loadDocument: function (data) { @@ -295,7 +305,14 @@ define([ textLastModified: 'Last Modified', textLastModifiedBy: 'Last Modified By', textUploaded: 'Uploaded', - textLocation: 'Location' + textLocation: 'Location', + textMacrosSettings: 'Macros Settings', + textDisableAll: 'Disable All', + textDisableAllMacrosWithoutNotification: 'Disable all macros without notification', + textShowNotification: 'Show Notification', + textDisableAllMacrosWithNotification: 'Disable all macros with notification', + textEnableAll: 'Enable All', + textEnableAllMacrosWithoutNotification: 'Enable all macros without notification' } })(), PE.Views.Settings || {})) }); \ No newline at end of file diff --git a/apps/presentationeditor/mobile/locale/en.json b/apps/presentationeditor/mobile/locale/en.json index 34c369cf3..877622dfe 100644 --- a/apps/presentationeditor/mobile/locale/en.json +++ b/apps/presentationeditor/mobile/locale/en.json @@ -547,5 +547,12 @@ "PE.Views.Settings.textUploaded": "Uploaded", "PE.Views.Settings.textVersion": "Version", "PE.Views.Settings.unknownText": "Unknown", + "PE.Views.Settings.textMacrosSettings": "Macros Settings", + "PE.Views.Settings.textDisableAll": "Disable All", + "PE.Views.Settings.textDisableAllMacrosWithoutNotification": "Disable all macros without notification", + "PE.Views.Settings.textShowNotification": "Show Notification", + "PE.Views.Settings.textDisableAllMacrosWithNotification": "Disable all macros with notification", + "PE.Views.Settings.textEnableAll": "Enable All", + "PE.Views.Settings.textEnableAllMacrosWithoutNotification": "Enable all macros without notification", "PE.Views.Toolbar.textBack": "Back" } \ No newline at end of file diff --git a/apps/presentationeditor/mobile/resources/css/app-ios.css b/apps/presentationeditor/mobile/resources/css/app-ios.css index dc6164810..15961a759 100644 --- a/apps/presentationeditor/mobile/resources/css/app-ios.css +++ b/apps/presentationeditor/mobile/resources/css/app-ios.css @@ -7745,3 +7745,10 @@ html.pixel-ratio-3 .numbers li { .doc-placeholder .slide-container > .line.empty { background: transparent; } +.page-macros-settings[data-page="settings-macros-view"] .list-block li.media-item .item-title { + font-weight: normal; +} +.page-macros-settings[data-page="settings-macros-view"] .list-block li.media-item .item-subtitle { + font-size: 14px; + color: #8e8e93; +} diff --git a/apps/presentationeditor/mobile/resources/css/app-material.css b/apps/presentationeditor/mobile/resources/css/app-material.css index 74a21da49..54c4deb59 100644 --- a/apps/presentationeditor/mobile/resources/css/app-material.css +++ b/apps/presentationeditor/mobile/resources/css/app-material.css @@ -7655,3 +7655,10 @@ html.pixel-ratio-3 .numbers li { .doc-placeholder .slide-container > .line.empty { background: transparent; } +.page-macros-settings[data-page="settings-macros-view"] .list-block li.media-item .item-title { + font-weight: normal; +} +.page-macros-settings[data-page="settings-macros-view"] .list-block li.media-item .item-subtitle { + font-size: 14px; + color: #9e9e9e; +} diff --git a/apps/presentationeditor/mobile/resources/less/app-ios.less b/apps/presentationeditor/mobile/resources/less/app-ios.less index fb92b38f0..a2ce76091 100644 --- a/apps/presentationeditor/mobile/resources/less/app-ios.less +++ b/apps/presentationeditor/mobile/resources/less/app-ios.less @@ -322,3 +322,18 @@ input, textarea { } } } + +// Macros settings +.page-macros-settings[data-page="settings-macros-view"] { + .list-block { + li.media-item { + .item-title { + font-weight: normal; + } + .item-subtitle { + font-size: 14px; + color: @gray; + } + } + } +} diff --git a/apps/presentationeditor/mobile/resources/less/app-material.less b/apps/presentationeditor/mobile/resources/less/app-material.less index 6ac442771..71d2221e3 100644 --- a/apps/presentationeditor/mobile/resources/less/app-material.less +++ b/apps/presentationeditor/mobile/resources/less/app-material.less @@ -321,3 +321,18 @@ input, textarea { } } } + +// Macros settings +.page-macros-settings[data-page="settings-macros-view"] { + .list-block { + li.media-item { + .item-title { + font-weight: normal; + } + .item-subtitle { + font-size: 14px; + color: @gray; + } + } + } +} \ No newline at end of file diff --git a/apps/spreadsheeteditor/mobile/app/controller/Settings.js b/apps/spreadsheeteditor/mobile/app/controller/Settings.js index 847826eed..dcea13ddf 100644 --- a/apps/spreadsheeteditor/mobile/app/controller/Settings.js +++ b/apps/spreadsheeteditor/mobile/app/controller/Settings.js @@ -258,6 +258,8 @@ define([ me.initRegSettings(); } else if ('#settings-info-view' == pageId) { me.initPageInfo(); + } else if ('#settings-macros-view' == pageId) { + me.initPageMacrosSettings(); } else { var _userCount = SSE.getController('Main').returnUserCount(); if (_userCount > 0) { @@ -266,6 +268,20 @@ define([ } }, + initPageMacrosSettings: function() { + var me = this, + $pageMacrosSettings = $('.page[data-page="settings-macros-view"] input:radio[name=macros-settings]'), + value = Common.Utils.InternalSettings.get("sse-mobile-macros-mode") || 0; + $pageMacrosSettings.single('change', _.bind(me.onChangeMacrosSettings, me)); + $pageMacrosSettings.val([value]); + }, + + onChangeMacrosSettings: function(e) { + var value = parseInt($(e.currentTarget).val()); + Common.Utils.InternalSettings.set("sse-mobile-macros-mode", value); + Common.localStorage.setItem("sse-mobile-macros-mode", value); + }, + initPageInfo: function() { var document = Common.SharedSettings.get('document') || {}, info = document.info || {}; diff --git a/apps/spreadsheeteditor/mobile/app/template/Settings.template b/apps/spreadsheeteditor/mobile/app/template/Settings.template index 5b9cfd20c..28be68879 100644 --- a/apps/spreadsheeteditor/mobile/app/template/Settings.template +++ b/apps/spreadsheeteditor/mobile/app/template/Settings.template @@ -579,6 +579,19 @@ + @@ -844,4 +857,55 @@ + + + +
    + +
    +
    +
    +
    +
      +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    +
    + +
    +
    +
    \ No newline at end of file diff --git a/apps/spreadsheeteditor/mobile/app/view/Settings.js b/apps/spreadsheeteditor/mobile/app/view/Settings.js index 2ec25b119..7ac8485b4 100644 --- a/apps/spreadsheeteditor/mobile/app/view/Settings.js +++ b/apps/spreadsheeteditor/mobile/app/view/Settings.js @@ -54,7 +54,8 @@ define([ canDownload = false, canAbout = true, canHelp = true, - canPrint = false; + canPrint = false, + isShowMacros = true; return { // el: '.view-main', @@ -126,6 +127,7 @@ define([ if (mode.customization) { canHelp = (mode.customization.help!==false); + isShowMacros = (mode.customization.macros!==false); } }, @@ -143,6 +145,7 @@ define([ if (!canAbout) $layout.find('#settings-about').hide(); if (!canHelp) $layout.find('#settings-help').hide(); if (!canPrint) $layout.find('#settings-print').hide(); + if (!isShowMacros) $layour.find('#settings-macros').hide(); return $layout.html(); } @@ -173,6 +176,10 @@ define([ } }, + showMacros: function () { + this.showPage('#settings-macros-view'); + }, + showSetApp: function() { this.showPage('#settings-application-view'); $('#language-formula').single('click', _.bind(this.showFormulaLanguage, this)); @@ -180,6 +187,9 @@ define([ if (!isEdit) { $('.page[data-page=settings-application-view] .page-content > :not(.display-view)').hide(); } + if (isShowMacros) { + $('#settings-macros').single('click', _.bind(this.showMacros, this)); + } }, showFormulaLanguage: function () { @@ -421,7 +431,14 @@ define([ textLastModified: 'Last Modified', textLastModifiedBy: 'Last Modified By', textUploaded: 'Uploaded', - textLocation: 'Location' + textLocation: 'Location', + textMacrosSettings: 'Macros Settings', + textDisableAll: 'Disable All', + textDisableAllMacrosWithoutNotification: 'Disable all macros without notification', + textShowNotification: 'Show Notification', + textDisableAllMacrosWithNotification: 'Disable all macros with notification', + textEnableAll: 'Enable All', + textEnableAllMacrosWithoutNotification: 'Enable all macros without notification' } })(), SSE.Views.Settings || {})) }); \ No newline at end of file diff --git a/apps/spreadsheeteditor/mobile/locale/en.json b/apps/spreadsheeteditor/mobile/locale/en.json index 81a4904f7..411159ff2 100644 --- a/apps/spreadsheeteditor/mobile/locale/en.json +++ b/apps/spreadsheeteditor/mobile/locale/en.json @@ -616,5 +616,12 @@ "SSE.Views.Settings.textUploaded": "Uploaded", "SSE.Views.Settings.textVersion": "Version", "SSE.Views.Settings.unknownText": "Unknown", + "SSE.Views.Settings.textMacrosSettings": "Macros Settings", + "SSE.Views.Settings.textDisableAll": "Disable All", + "SSE.Views.Settings.textDisableAllMacrosWithoutNotification": "Disable all macros without notification", + "SSE.Views.Settings.textShowNotification": "Show Notification", + "SSE.Views.Settings.textDisableAllMacrosWithNotification": "Disable all macros with notification", + "SSE.Views.Settings.textEnableAll": "Enable All", + "SSE.Views.Settings.textEnableAllMacrosWithoutNotification": "Enable all macros without notification", "SSE.Views.Toolbar.textBack": "Back" } \ No newline at end of file diff --git a/apps/spreadsheeteditor/mobile/resources/css/app-ios.css b/apps/spreadsheeteditor/mobile/resources/css/app-ios.css index bdf003a6f..cbd92f59b 100644 --- a/apps/spreadsheeteditor/mobile/resources/css/app-ios.css +++ b/apps/spreadsheeteditor/mobile/resources/css/app-ios.css @@ -8306,3 +8306,10 @@ html.pixel-ratio-3 .cell-styles.dataview .row li { .picker-modal.container-view-comment .pages { background-color: #FFFFFF; } +.page-macros-settings[data-page="settings-macros-view"] .list-block li.media-item .item-title { + font-weight: normal; +} +.page-macros-settings[data-page="settings-macros-view"] .list-block li.media-item .item-subtitle { + font-size: 14px; + color: #8e8e93; +} diff --git a/apps/spreadsheeteditor/mobile/resources/css/app-material.css b/apps/spreadsheeteditor/mobile/resources/css/app-material.css index 47dd60a12..ed788a1d8 100644 --- a/apps/spreadsheeteditor/mobile/resources/css/app-material.css +++ b/apps/spreadsheeteditor/mobile/resources/css/app-material.css @@ -8249,3 +8249,10 @@ html.pixel-ratio-3 .cell-styles.dataview .row li { .picker-modal.container-view-comment .pages { background-color: #FFFFFF; } +.page-macros-settings[data-page="settings-macros-view"] .list-block li.media-item .item-title { + font-weight: normal; +} +.page-macros-settings[data-page="settings-macros-view"] .list-block li.media-item .item-subtitle { + font-size: 14px; + color: #9e9e9e; +} diff --git a/apps/spreadsheeteditor/mobile/resources/less/app-ios.less b/apps/spreadsheeteditor/mobile/resources/less/app-ios.less index ea4955770..1fe2094fb 100644 --- a/apps/spreadsheeteditor/mobile/resources/less/app-ios.less +++ b/apps/spreadsheeteditor/mobile/resources/less/app-ios.less @@ -354,4 +354,19 @@ input, textarea { .swipe-container, .toolbar, .pages { background-color: #FFFFFF; } +} + +// Macros settings +.page-macros-settings[data-page="settings-macros-view"] { + .list-block { + li.media-item { + .item-title { + font-weight: normal; + } + .item-subtitle { + font-size: 14px; + color: @gray; + } + } + } } \ No newline at end of file diff --git a/apps/spreadsheeteditor/mobile/resources/less/app-material.less b/apps/spreadsheeteditor/mobile/resources/less/app-material.less index da83d5662..c4ca7fba0 100644 --- a/apps/spreadsheeteditor/mobile/resources/less/app-material.less +++ b/apps/spreadsheeteditor/mobile/resources/less/app-material.less @@ -355,4 +355,19 @@ input, textarea { .swipe-container, .toolbar, .pages { background-color: #FFFFFF; } +} + +// Macros settings +.page-macros-settings[data-page="settings-macros-view"] { + .list-block { + li.media-item { + .item-title { + font-weight: normal; + } + .item-subtitle { + font-size: 14px; + color: @gray; + } + } + } } \ No newline at end of file From 33ec25757159c33d022baec6cff83e0f9a499bf1 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Wed, 3 Jun 2020 13:10:31 +0300 Subject: [PATCH 78/92] [SSE] Bug 24245 --- apps/common/main/lib/component/TabBar.js | 2 +- apps/spreadsheeteditor/main/app/controller/Toolbar.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/common/main/lib/component/TabBar.js b/apps/common/main/lib/component/TabBar.js index 31eaddea4..b64cb2940 100644 --- a/apps/common/main/lib/component/TabBar.js +++ b/apps/common/main/lib/component/TabBar.js @@ -225,7 +225,7 @@ define([ } } } - !tab.disabled && Common.NotificationCenter.trigger('edit:complete', this.bar); + !tab.disabled && Common.NotificationCenter.trigger('edit:complete', 'tab'); }, this), dblclick: $.proxy(function() { this.trigger('tab:dblclick', this, this.tabs.indexOf(tab), tab); diff --git a/apps/spreadsheeteditor/main/app/controller/Toolbar.js b/apps/spreadsheeteditor/main/app/controller/Toolbar.js index fcd069d2a..db64f86c7 100644 --- a/apps/spreadsheeteditor/main/app/controller/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/controller/Toolbar.js @@ -3108,8 +3108,8 @@ define([ var me = this; Common.NotificationCenter.on({ - 'edit:complete': function () { - if (me.api && me.modeAlwaysSetStyle) { + 'edit:complete': function (cmp) { + if (me.api && me.modeAlwaysSetStyle && cmp!=='tab') { me.api.asc_formatPainter(AscCommon.c_oAscFormatPainterState.kOff); me.toolbar.btnCopyStyle.toggle(false, true); me.modeAlwaysSetStyle = false; From a1442a7ad98c35ebd2756a0a298f0d39b12e8ce7 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Wed, 3 Jun 2020 14:48:33 +0300 Subject: [PATCH 79/92] Add translation --- apps/documenteditor/main/locale/en.json | 9 +++++++++ apps/documenteditor/mobile/locale/en.json | 4 ++++ apps/presentationeditor/main/locale/en.json | 9 +++++++++ apps/presentationeditor/mobile/locale/en.json | 4 ++++ apps/spreadsheeteditor/main/locale/en.json | 9 +++++++++ apps/spreadsheeteditor/mobile/locale/en.json | 4 ++++ 6 files changed, 39 insertions(+) diff --git a/apps/documenteditor/main/locale/en.json b/apps/documenteditor/main/locale/en.json index e52505a4d..0fbd88cc8 100644 --- a/apps/documenteditor/main/locale/en.json +++ b/apps/documenteditor/main/locale/en.json @@ -750,6 +750,8 @@ "DE.Controllers.Main.warnNoLicense": "This version of %1 editors has certain limitations for concurrent connections to the document server.
    If you need more please consider purchasing a commercial license.", "DE.Controllers.Main.warnNoLicenseUsers": "This version of %1 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.textHasMacros": "The file contains automatic macros.
    Do you want to run macros?", + "DE.Controllers.Main.textRemember": "Remember my choice", "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", @@ -1569,6 +1571,13 @@ "DE.Views.FileMenuPanels.Settings.txtPt": "Point", "DE.Views.FileMenuPanels.Settings.txtSpellCheck": "Spell Checking", "DE.Views.FileMenuPanels.Settings.txtWin": "as Windows", + "DE.Views.FileMenuPanels.Settings.strMacrosSettings": "Macros Settings", + "DE.Views.FileMenuPanels.Settings.txtWarnMacros": "Show Notification", + "DE.Views.FileMenuPanels.Settings.txtRunMacros": "Enable All", + "DE.Views.FileMenuPanels.Settings.txtStopMacros": "Disable All", + "DE.Views.FileMenuPanels.Settings.txtWarnMacrosDesc": "Disable all macros with notification", + "DE.Views.FileMenuPanels.Settings.txtRunMacrosDesc": "Enable all macros without notification", + "DE.Views.FileMenuPanels.Settings.txtStopMacrosDesc": "Disable all macros without notification", "DE.Views.HeaderFooterSettings.textBottomCenter": "Bottom center", "DE.Views.HeaderFooterSettings.textBottomLeft": "Bottom left", "DE.Views.HeaderFooterSettings.textBottomPage": "Bottom of Page", diff --git a/apps/documenteditor/mobile/locale/en.json b/apps/documenteditor/mobile/locale/en.json index e5474144d..1d6e5134d 100644 --- a/apps/documenteditor/mobile/locale/en.json +++ b/apps/documenteditor/mobile/locale/en.json @@ -282,6 +282,10 @@ "DE.Controllers.Main.warnNoLicense": "This version of %1 editors has certain limitations for concurrent connections to the document server.
    If you need more please consider purchasing a commercial license.", "DE.Controllers.Main.warnNoLicenseUsers": "This version of %1 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.textHasMacros": "The file contains automatic macros.
    Do you want to run macros?", + "DE.Controllers.Main.textRemember": "Remember my choice", + "DE.Controllers.Main.textYes": "Yes", + "DE.Controllers.Main.textNo": "No", "DE.Controllers.Search.textNoTextFound": "Text not Found", "DE.Controllers.Search.textReplaceAll": "Replace All", "DE.Controllers.Settings.notcriticalErrorTitle": "Warning", diff --git a/apps/presentationeditor/main/locale/en.json b/apps/presentationeditor/main/locale/en.json index 05c8e526d..12bdc3ff7 100644 --- a/apps/presentationeditor/main/locale/en.json +++ b/apps/presentationeditor/main/locale/en.json @@ -625,6 +625,8 @@ "PE.Controllers.Main.warnNoLicense": "This version of %1 editors has certain limitations for concurrent connections to the document server.
    If you need more please consider purchasing a commercial license.", "PE.Controllers.Main.warnNoLicenseUsers": "This version of %1 editors has certain limitations for concurrent users.
    If you need more please consider purchasing a commercial license.", "PE.Controllers.Main.warnProcessRightsChange": "You have been denied the right to edit the file.", + "PE.Controllers.Main.textHasMacros": "The file contains automatic macros.
    Do you want to run macros?", + "PE.Controllers.Main.textRemember": "Remember my choice", "PE.Controllers.Statusbar.zoomText": "Zoom {0}%", "PE.Controllers.Toolbar.confirmAddFontName": "The font you are going to save is not available on the current device.
    The text style will be displayed using one of the system fonts, the saved font will be used when it is available.
    Do you want to continue?", "PE.Controllers.Toolbar.textAccent": "Accents", @@ -1259,6 +1261,13 @@ "PE.Views.FileMenuPanels.Settings.txtPt": "Point", "PE.Views.FileMenuPanels.Settings.txtSpellCheck": "Spell Checking", "PE.Views.FileMenuPanels.Settings.txtWin": "as Windows", + "PE.Views.FileMenuPanels.Settings.strMacrosSettings": "Macros Settings", + "PE.Views.FileMenuPanels.Settings.txtWarnMacros": "Show Notification", + "PE.Views.FileMenuPanels.Settings.txtRunMacros": "Enable All", + "PE.Views.FileMenuPanels.Settings.txtStopMacros": "Disable All", + "PE.Views.FileMenuPanels.Settings.txtWarnMacrosDesc": "Disable all macros with notification", + "PE.Views.FileMenuPanels.Settings.txtRunMacrosDesc": "Enable all macros without notification", + "PE.Views.FileMenuPanels.Settings.txtStopMacrosDesc": "Disable all macros without notification", "PE.Views.HeaderFooterDialog.applyAllText": "Apply to all", "PE.Views.HeaderFooterDialog.applyText": "Apply", "PE.Views.HeaderFooterDialog.diffLanguage": "You can’t use a date format in a different language than the slide master.
    To change the master, click 'Apply to all' instead of 'Apply'", diff --git a/apps/presentationeditor/mobile/locale/en.json b/apps/presentationeditor/mobile/locale/en.json index 877622dfe..ab969b93e 100644 --- a/apps/presentationeditor/mobile/locale/en.json +++ b/apps/presentationeditor/mobile/locale/en.json @@ -252,6 +252,10 @@ "PE.Controllers.Main.warnNoLicense": "This version of %1 editors has certain limitations for concurrent connections to the document server.
    If you need more please consider purchasing a commercial license.", "PE.Controllers.Main.warnNoLicenseUsers": "This version of %1 editors has certain limitations for concurrent users.
    If you need more please consider purchasing a commercial license.", "PE.Controllers.Main.warnProcessRightsChange": "You have been denied the right to edit the file.", + "PE.Controllers.Main.textHasMacros": "The file contains automatic macros.
    Do you want to run macros?", + "PE.Controllers.Main.textRemember": "Remember my choice", + "PE.Controllers.Main.textYes": "Yes", + "PE.Controllers.Main.textNo": "No", "PE.Controllers.Search.textNoTextFound": "Text not Found", "PE.Controllers.Search.textReplaceAll": "Replace All", "PE.Controllers.Settings.notcriticalErrorTitle": "Warning", diff --git a/apps/spreadsheeteditor/main/locale/en.json b/apps/spreadsheeteditor/main/locale/en.json index 41c2f353a..ea91d6560 100644 --- a/apps/spreadsheeteditor/main/locale/en.json +++ b/apps/spreadsheeteditor/main/locale/en.json @@ -814,6 +814,8 @@ "SSE.Controllers.Main.warnNoLicense": "This version of %1 editors has certain limitations for concurrent connections to the document server.
    If you need more please consider purchasing a commercial license.", "SSE.Controllers.Main.warnNoLicenseUsers": "This version of %1 editors has certain limitations for concurrent users.
    If you need more please consider purchasing a commercial license.", "SSE.Controllers.Main.warnProcessRightsChange": "You have been denied the right to edit the file.", + "SSE.Controllers.Main.textHasMacros": "The file contains automatic macros.
    Do you want to run macros?", + "SSE.Controllers.Main.textRemember": "Remember my choice", "SSE.Controllers.Print.strAllSheets": "All Sheets", "SSE.Controllers.Print.textFirstCol": "First column", "SSE.Controllers.Print.textFirstRow": "First row", @@ -1687,6 +1689,13 @@ "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtPt": "Point", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtRu": "Russian", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtWin": "as Windows", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.strMacrosSettings": "Macros Settings", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtWarnMacros": "Show Notification", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtRunMacros": "Enable All", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtStopMacros": "Disable All", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtWarnMacrosDesc": "Disable all macros with notification", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtRunMacrosDesc": "Enable all macros without notification", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtStopMacrosDesc": "Disable all macros without notification", "SSE.Views.FileMenuPanels.MainSpellCheckSettings.okButtonText": "Apply", "SSE.Views.FileMenuPanels.MainSpellCheckSettings.strDictionaryLanguage": "Dictionary language", "SSE.Views.FileMenuPanels.MainSpellCheckSettings.strIgnoreWordsInUPPERCASE": "Ignore words in UPPERCASE", diff --git a/apps/spreadsheeteditor/mobile/locale/en.json b/apps/spreadsheeteditor/mobile/locale/en.json index 411159ff2..d459192f9 100644 --- a/apps/spreadsheeteditor/mobile/locale/en.json +++ b/apps/spreadsheeteditor/mobile/locale/en.json @@ -312,6 +312,10 @@ "SSE.Controllers.Main.warnNoLicense": "This version of %1 editors has certain limitations for concurrent connections to the document server.
    If you need more please consider purchasing a commercial license.", "SSE.Controllers.Main.warnNoLicenseUsers": "This version of %1 editors has certain limitations for concurrent users.
    If you need more please consider purchasing a commercial license.", "SSE.Controllers.Main.warnProcessRightsChange": "You have been denied the right to edit the file.", + "SSE.Controllers.Main.textHasMacros": "The file contains automatic macros.
    Do you want to run macros?", + "SSE.Controllers.Main.textRemember": "Remember my choice", + "SSE.Controllers.Main.textYes": "Yes", + "SSE.Controllers.Main.textNo": "No", "SSE.Controllers.Search.textNoTextFound": "Text not found", "SSE.Controllers.Search.textReplaceAll": "Replace All", "SSE.Controllers.Settings.notcriticalErrorTitle": "Warning", From 2ffcc4b7176ac87bc6310a5cf0d15f83ce7af3e9 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Wed, 3 Jun 2020 20:49:54 +0300 Subject: [PATCH 80/92] [SSE] Add settings for copy, cut, paste --- .../main/app/controller/LeftMenu.js | 4 ++++ .../main/app/controller/Main.js | 5 +++++ .../main/app/view/FileMenuPanels.js | 17 ++++++++++++++++- apps/spreadsheeteditor/main/locale/en.json | 2 ++ 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/apps/spreadsheeteditor/main/app/controller/LeftMenu.js b/apps/spreadsheeteditor/main/app/controller/LeftMenu.js index cb30a47fd..523c0001a 100644 --- a/apps/spreadsheeteditor/main/app/controller/LeftMenu.js +++ b/apps/spreadsheeteditor/main/app/controller/LeftMenu.js @@ -389,6 +389,10 @@ define([ value = parseInt(Common.localStorage.getItem("sse-settings-autosave")); Common.Utils.InternalSettings.set("sse-settings-autosave", value); this.api.asc_setAutoSaveGap(value); + + value = parseInt(Common.localStorage.getItem("sse-settings-paste-button")); + Common.Utils.InternalSettings.set("sse-settings-paste-button", value); + this.api.asc_setVisiblePasteButton(!!value); } var reg = Common.localStorage.getItem("sse-settings-reg-settings"), diff --git a/apps/spreadsheeteditor/main/app/controller/Main.js b/apps/spreadsheeteditor/main/app/controller/Main.js index 01212cb3b..a381e2ea0 100644 --- a/apps/spreadsheeteditor/main/app/controller/Main.js +++ b/apps/spreadsheeteditor/main/app/controller/Main.js @@ -808,6 +808,11 @@ define([ me.api.asc_setIsForceSaveOnUserSave(me.appOptions.forcesave); } + value = Common.localStorage.getItem("sse-settings-paste-button"); + if (value===null) value = '1'; + Common.Utils.InternalSettings.set("sse-settings-paste-button", parseInt(value)); + me.api.asc_setVisiblePasteButton(!!parseInt(value)); + if (me.needToUpdateVersion) { Common.NotificationCenter.trigger('api:disconnect'); toolbarController.onApiCoAuthoringDisconnect(); diff --git a/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js b/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js index 848719a1b..c1e60b1e8 100644 --- a/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js +++ b/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js @@ -667,6 +667,10 @@ define([ '', '
    ', '','', + '', + '', + '
    ', + '','', '', '', '', @@ -918,6 +922,11 @@ define([ }); this.lblMacrosDesc = $markup.findById('#fms-lbl-macros'); + this.chPaste = new Common.UI.CheckBox({ + el: $markup.findById('#fms-chb-paste-settings'), + labelText: this.strPasteButton + }); + this.btnApply = new Common.UI.Button({ el: $markup.findById('#fms-btn-apply') }); @@ -1042,6 +1051,8 @@ define([ item = this.cmbMacros.store.findWhere({value: Common.Utils.InternalSettings.get("sse-macros-mode")}); this.cmbMacros.setValue(item ? item.get('value') : 0); this.lblMacrosDesc.text(item ? item.get('descValue') : this.txtWarnMacrosDesc); + + this.chPaste.setValue(Common.Utils.InternalSettings.get("sse-settings-paste-button")); }, applySettings: function() { @@ -1085,6 +1096,8 @@ define([ Common.localStorage.setItem("sse-macros-mode", this.cmbMacros.getValue()); Common.Utils.InternalSettings.set("sse-macros-mode", Common.localStorage.getItem("sse-macros-mode")); + Common.localStorage.setItem("sse-settings-paste-button", this.chPaste.isChecked() ? 1 : 0); + Common.localStorage.save(); if (this.menu) { this.menu.fireEvent('settings:apply', [this.menu]); @@ -1186,7 +1199,9 @@ define([ txtStopMacros: 'Disable All', txtWarnMacrosDesc: 'Disable all macros with notification', txtRunMacrosDesc: 'Enable all macros without notification', - txtStopMacrosDesc: 'Disable all macros without notification' + txtStopMacrosDesc: 'Disable all macros without notification', + strPaste: 'Cut, copy and paste', + strPasteButton: 'Show Paste Option button when content is pasted' }, SSE.Views.FileMenuPanels.MainSettingsGeneral || {})); SSE.Views.FileMenuPanels.MainSpellCheckSettings = Common.UI.BaseView.extend(_.extend({ diff --git a/apps/spreadsheeteditor/main/locale/en.json b/apps/spreadsheeteditor/main/locale/en.json index 54f5f6f48..82fbd0b51 100644 --- a/apps/spreadsheeteditor/main/locale/en.json +++ b/apps/spreadsheeteditor/main/locale/en.json @@ -1699,6 +1699,8 @@ "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtWarnMacrosDesc": "Disable all macros with notification", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtRunMacrosDesc": "Enable all macros without notification", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtStopMacrosDesc": "Disable all macros without notification", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.strPaste": "Cut, copy and paste", + "SSE.Views.FileMenuPanels.MainSettingsGeneral.strPasteButton": "Show Paste Option button when content is pasted", "SSE.Views.FileMenuPanels.MainSpellCheckSettings.okButtonText": "Apply", "SSE.Views.FileMenuPanels.MainSpellCheckSettings.strDictionaryLanguage": "Dictionary language", "SSE.Views.FileMenuPanels.MainSpellCheckSettings.strIgnoreWordsInUPPERCASE": "Ignore words in UPPERCASE", From 3ceab39e48b479dfbcfdbd44c06ee31f51b4f9d4 Mon Sep 17 00:00:00 2001 From: JuliaSvinareva Date: Wed, 3 Jun 2020 21:06:04 +0300 Subject: [PATCH 81/92] [mobile] Display macros settings in view mode --- apps/documenteditor/mobile/app/template/Settings.template | 2 +- apps/presentationeditor/mobile/app/template/Settings.template | 3 +-- apps/presentationeditor/mobile/app/view/Settings.js | 2 +- apps/spreadsheeteditor/mobile/app/template/Settings.template | 2 +- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/apps/documenteditor/mobile/app/template/Settings.template b/apps/documenteditor/mobile/app/template/Settings.template index 1c2bc5256..61c926c4b 100644 --- a/apps/documenteditor/mobile/app/template/Settings.template +++ b/apps/documenteditor/mobile/app/template/Settings.template @@ -770,7 +770,7 @@
    -
    + -
    + -
    +
    ', @@ -380,7 +380,7 @@ define([ onInsertItem: function(item) { $(this.el).find('ul').prepend(_.template([ '
  • ', - '', + '', '
  • ' ].join(''))({ item: item.attributes, diff --git a/apps/common/main/lib/component/InputField.js b/apps/common/main/lib/component/InputField.js index d46057f61..df8164441 100644 --- a/apps/common/main/lib/component/InputField.js +++ b/apps/common/main/lib/component/InputField.js @@ -88,7 +88,7 @@ define([ 'placeholder="<%= placeHolder %>" ', 'value="<%= value %>"', '>', - '', + '', '
    ' ].join('')), @@ -414,7 +414,7 @@ define([ 'placeholder="<%= placeHolder %>" ', 'value="<%= value %>"', '>', - '', + '', '
    ' + '' + '
    ', diff --git a/apps/common/main/lib/component/RadioBox.js b/apps/common/main/lib/component/RadioBox.js index b26e23aa8..1c9a6c360 100644 --- a/apps/common/main/lib/component/RadioBox.js +++ b/apps/common/main/lib/component/RadioBox.js @@ -72,7 +72,7 @@ define([ rendered : false, template : _.template(''), initialize : function(options) { Common.UI.BaseView.prototype.initialize.call(this, options); diff --git a/apps/common/main/lib/component/TabBar.js b/apps/common/main/lib/component/TabBar.js index 31eaddea4..b2d1a18a3 100644 --- a/apps/common/main/lib/component/TabBar.js +++ b/apps/common/main/lib/component/TabBar.js @@ -311,7 +311,7 @@ define([ }, tabs: [], - template: _.template('