From f77dc3d45f932113f1ce334847c2f00ec26c1460 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 18 Jan 2018 17:26:31 +0300 Subject: [PATCH 01/18] [DE] Added table settings: change width/height, distribute rows/columns. --- .../main/app/controller/RightMenu.js | 1 + .../main/app/template/TableSettings.template | 36 +++-- .../main/app/view/TableSettings.js | 151 ++++++++---------- apps/documenteditor/main/locale/en.json | 11 +- 4 files changed, 106 insertions(+), 93 deletions(-) diff --git a/apps/documenteditor/main/app/controller/RightMenu.js b/apps/documenteditor/main/app/controller/RightMenu.js index e8f72db52..196e1a9e0 100644 --- a/apps/documenteditor/main/app/controller/RightMenu.js +++ b/apps/documenteditor/main/app/controller/RightMenu.js @@ -260,6 +260,7 @@ define([ this.rightmenu.paragraphSettings.updateMetricUnit(); this.rightmenu.chartSettings.updateMetricUnit(); this.rightmenu.imageSettings.updateMetricUnit(); + this.rightmenu.tableSettings.updateMetricUnit(); }, createDelayedElements: function() { diff --git a/apps/documenteditor/main/app/template/TableSettings.template b/apps/documenteditor/main/app/template/TableSettings.template index 611f7d811..19e649186 100644 --- a/apps/documenteditor/main/app/template/TableSettings.template +++ b/apps/documenteditor/main/app/template/TableSettings.template @@ -95,14 +95,9 @@ - - - - - - -
-
+ + +
@@ -110,10 +105,31 @@
+ + + + + - -
+ +
+ + + + + +
+ + + + + + + + + + diff --git a/apps/documenteditor/main/app/view/TableSettings.js b/apps/documenteditor/main/app/view/TableSettings.js index babc878c2..4f0d26c39 100644 --- a/apps/documenteditor/main/app/view/TableSettings.js +++ b/apps/documenteditor/main/app/view/TableSettings.js @@ -79,14 +79,11 @@ define([ CheckFirst: false, CheckLast: false, CheckColBanded: false, - WrapStyle: -1, - CanBeFlow: true, - TableAlignment: -1, - TableIndent: 0, BackColor: '#000000', RepeatRow: false, DisabledControls: false }; + this.spinners = []; this.lockedControls = []; this._locked = false; this._originalLook = new Asc.CTablePropLook(); @@ -96,7 +93,6 @@ define([ this.CellColor = {Value: 1, Color: 'transparent'}; // value=1 - цвет определен - прозрачный или другой, value=0 - цвет не определен, рисуем прозрачным this.BorderSize = 1; this._noApply = false; - this._wrapHandled = false; this.render(); }, @@ -140,24 +136,6 @@ define([ this.fireEvent('editcomplete', this); }, - onBtnWrapClick: function(btn, e) { - if (this.api && btn.pressed && !this._noApply) { - var properties = new Asc.CTableProp(); - properties.put_TableWrap(btn.options.posId); - if (btn.options.posId == c_tableWrap.TABLE_WRAP_NONE) { - if (this._state.TableAlignment<0) - this._state.TableAlignment = c_tableAlign.TABLE_ALIGN_LEFT; - properties.put_TableAlignment(this._state.TableAlignment); - properties.put_TableIndent(this._state.TableIndent); - } - properties.put_CellSelect(true); - this.api.tblApply(properties); - } - if (this._wrapHandled) { this._wrapHandled = false; return; } - this._wrapHandled = true; - this.fireEvent('editcomplete', this); - }, - onCheckRepeatRowChange: function(field, newValue, oldValue, eOpts) { if (this.api) { var properties = new Asc.CTableProp(); @@ -259,8 +237,6 @@ define([ setApi: function(o) { this.api = o; if (o) { - this.api.asc_registerCallback('asc_onTblWrapStyleChanged', _.bind(this._TblWrapStyleChanged, this)); - this.api.asc_registerCallback('asc_onTblAlignChanged', _.bind(this._TblAlignChanged, this)); this.api.asc_registerCallback('asc_onInitTableTemplates', _.bind(this._onInitTemplates, this)); } return this; @@ -310,32 +286,6 @@ define([ this.chLast.on('change', _.bind(this.onCheckTemplateChange, this, 4)); this.chColBanded.on('change', _.bind(this.onCheckTemplateChange, this, 5)); - this.btnWrapNone = new Common.UI.Button({ - cls: 'btn-options huge', - iconCls: 'icon-right-panel btn-wrap-none', - posId: c_tableWrap.TABLE_WRAP_NONE, - hint: this.textWrapNoneTooltip, - enableToggle: true, - allowDepress: false, - toggleGroup : 'tablewrapGroup' - }); - this.btnWrapNone.render( $('#table-button-wrap-none')) ; - this.btnWrapNone.on('click', _.bind(this.onBtnWrapClick, this)); - this.lockedControls.push(this.btnWrapNone); - - this.btnWrapParallel = new Common.UI.Button({ - cls: 'btn-options huge', - iconCls: 'icon-right-panel btn-wrap-parallel', - posId: c_tableWrap.TABLE_WRAP_PARALLEL, - hint: this.textWrapParallelTooltip, - enableToggle: true, - allowDepress: false, - toggleGroup : 'tablewrapGroup' - }); - this.btnWrapParallel.render( $('#table-button-wrap-parallel')) ; - this.btnWrapParallel.on('click', _.bind(this.onBtnWrapClick, this)); - this.lockedControls.push(this.btnWrapParallel); - var _arrBorderPosition = [ ['l', 'btn-borders-small btn-position-left', 'table-button-border-left', this.tipLeft], ['c','btn-borders-small btn-position-inner-vert', 'table-button-border-inner-vert', this.tipInnerVert], @@ -417,6 +367,50 @@ define([ this.chRepeatRow.on('change', _.bind(this.onCheckRepeatRowChange, this)); this.lockedControls.push(this.chRepeatRow); + this.numHeight = new Common.UI.MetricSpinner({ + el: $('#table-spin-cell-height'), + step: .1, + width: 115, + defaultUnit : "cm", + value: '1 cm', + maxValue: 55.88, + minValue: 0 + }); + this.numHeight.on('change', _.bind(function(field, newValue, oldValue, eOpts){ + // this._changedProps.put_Height(this.cmbUnit.getValue() ? -field.getNumberValue() : Common.Utils.Metric.fnRecalcToMM(field.getNumberValue())); + }, this)); + this.lockedControls.push(this.numHeight); + this.spinners.push(this.numHeight); + + this.numWidth = new Common.UI.MetricSpinner({ + el: $('#table-spin-cell-width'), + step: .1, + width: 115, + defaultUnit : "cm", + value: '1 cm', + maxValue: 55.88, + minValue: 0 + }); + this.numWidth.on('change', _.bind(function(field, newValue, oldValue, eOpts){ + // this._changedProps.put_Width(this.cmbUnit.getValue() ? -field.getNumberValue() : Common.Utils.Metric.fnRecalcToMM(field.getNumberValue())); + }, this)); + this.lockedControls.push(this.numWidth); + this.spinners.push(this.numWidth); + + this.btnDistributeRows = new Common.UI.Button({ + el: $('#table-btn-distrub-rows') + }); + this.lockedControls.push(this.btnDistributeRows); + this.btnDistributeRows.on('click', _.bind(function(field, newValue, oldValue, eOpts){ + }, this)); + + this.btnDistributeCols = new Common.UI.Button({ + el: $('#table-btn-distrub-cols') + }); + this.lockedControls.push(this.btnDistributeCols); + this.btnDistributeCols.on('click', _.bind(function(field, newValue, oldValue, eOpts){ + }, this)); + this.linkAdvanced = $('#table-advanced-link'); $(this.el).on('click', '#table-advanced-link', _.bind(this.openAdvancedSettings, this)); }, @@ -424,6 +418,7 @@ define([ createDelayedElements: function() { this.createDelayedControls(); this.UpdateThemeColors(); + this.updateMetricUnit(); this._initSettings = false; }, @@ -438,17 +433,16 @@ define([ this._originalProps = new Asc.CTableProp(props); this._originalProps.put_CellSelect(true); - this._TblWrapStyleChanged(props.get_TableWrap()); - - var value = props.get_CanBeFlow() && !this._locked; - if ( this._state.CanBeFlow!==value ) { - this.btnWrapParallel.setDisabled(!value); - this._state.CanBeFlow=value; + var value = null;//props.get_Width(); + if ( Math.abs(this._state.Width-value)>0.001 || + (this._state.Width===null || value===null)&&(this._state.Width!==value)) { + this.numWidth.setValue((value !== null) ? Common.Utils.Metric.fnRecalcFromMM(value) : '', true); + } + value = null;//props.get_Height(); + if ( Math.abs(this._state.Height-value)>0.001 || + (this._state.Height===null || value===null)&&(this._state.Height!==value)) { + this.numHeight.setValue((value !== null) ? Common.Utils.Metric.fnRecalcFromMM(value) : '', true); } - - // align props - this._TblAlignChanged(props.get_TableAlignment()); - this._state.TableIndent = (props.get_TableAlignment() !== c_tableAlign.TABLE_ALIGN_LEFT) ? 0 : props.get_TableIndent(); //for table-template value = props.get_TableStyle(); @@ -567,6 +561,16 @@ define([ } }, + updateMetricUnit: function() { + if (this.spinners) { + for (var i=0; i Date: Thu, 18 Jan 2018 17:44:03 +0300 Subject: [PATCH 02/18] [DE] Table context menu: remove table wrapping and align, add rows/columns distribution. --- .../main/app/view/DocumentHolder.js | 106 ++++-------------- apps/documenteditor/main/locale/en.json | 6 +- 2 files changed, 28 insertions(+), 84 deletions(-) diff --git a/apps/documenteditor/main/app/view/DocumentHolder.js b/apps/documenteditor/main/app/view/DocumentHolder.js index c0705edff..6a4eaaf56 100644 --- a/apps/documenteditor/main/app/view/DocumentHolder.js +++ b/apps/documenteditor/main/app/view/DocumentHolder.js @@ -1595,27 +1595,6 @@ define([ window.currentStyleName = name; }, - _applyTableWrap: function(wrap, align){ - var selectedElements = this.api.getSelectedElements(); - if (selectedElements && _.isArray(selectedElements)){ - for (var i = selectedElements.length - 1; i >= 0; i--) { - var elType, elValue; - elType = selectedElements[i].get_ObjectType(); - elValue = selectedElements[i].get_ObjectValue(); - if (Asc.c_oAscTypeSelectElement.Table == elType) { - var properties = new Asc.CTableProp(); - properties.put_TableWrap(wrap); - if (wrap == c_tableWrap.TABLE_WRAP_NONE) { - properties.put_TableAlignment(align); - properties.put_TableIndent(0); - } - this.api.tblApply(properties); - break; - } - } - } - }, - advancedParagraphClick: function(item, e, eOpt){ var win, me = this; if (me.api){ @@ -2327,51 +2306,6 @@ define([ /* table menu*/ - var tableAlign = function(item, e) { - me._applyTableWrap(c_tableWrap.TABLE_WRAP_NONE, item.options.align); - }; - - var menuTableWrapInline = new Common.UI.MenuItem({ - caption : me.inlineText, - toggleGroup : 'popuptablewrapping', - checkable : true, - menu : new Common.UI.Menu({ - menuAlign: 'tl-tr', - items : [ - me.menuTableAlignLeft = new Common.UI.MenuItem({ - caption : me.textShapeAlignLeft, - toggleGroup : 'popuptablealign', - checkable : true, - checked : false, - align : c_tableAlign.TABLE_ALIGN_LEFT - }).on('click', _.bind(tableAlign, me)), - me.menuTableAlignCenter = new Common.UI.MenuItem({ - caption : me.textShapeAlignCenter, - toggleGroup : 'popuptablealign', - checkable : true, - checked : false, - align : c_tableAlign.TABLE_ALIGN_CENTER - }).on('click', _.bind(tableAlign, me)), - me.menuTableAlignRight = new Common.UI.MenuItem({ - caption : me.textShapeAlignRight, - toggleGroup : 'popuptablealign', - checkable : true, - checked : false, - align : c_tableAlign.TABLE_ALIGN_RIGHT - }).on('click', _.bind(tableAlign, me)) - ] - }) - }); - - var menuTableWrapFlow = new Common.UI.MenuItem({ - caption : me.flowoverText, - toggleGroup : 'popuptablewrapping', - checkable : true, - checked : true - }).on('click', function(item) { - me._applyTableWrap(c_tableWrap.TABLE_WRAP_PARALLEL); - }); - var mnuTableMerge = new Common.UI.MenuItem({ caption : me.mergeCellsText }).on('click', function(item) { @@ -2641,6 +2575,22 @@ define([ caption : '--' }); + var menuTableDistRows = new Common.UI.MenuItem({ + caption : me.textDistributeRows + }).on('click', _.bind(function(){ + // if (me.api) + // me.api.distributeCols(); + me.fireEvent('editcomplete', me); + }, me)); + + var menuTableDistCols = new Common.UI.MenuItem({ + caption : me.textDistributeCols + }).on('click', _.bind(function(){ + // if (me.api) + // me.api.distributeCols(); + me.fireEvent('editcomplete', me); + }, me)); + var tableDirection = function(item, e) { if (me.api) { var properties = new Asc.CTableProp(); @@ -2700,14 +2650,6 @@ define([ me.menuTableCellCenter.setChecked(align == Asc.c_oAscVertAlignJc.Center); me.menuTableCellBottom.setChecked(align == Asc.c_oAscVertAlignJc.Bottom); - var flow = (value.tableProps.value.get_TableWrap() == c_tableWrap.TABLE_WRAP_PARALLEL); - (flow) ? menuTableWrapFlow.setChecked(true) : menuTableWrapInline.setChecked(true); - - align = value.tableProps.value.get_TableAlignment(); - me.menuTableAlignLeft.setChecked((flow) ? false : (align === c_tableAlign.TABLE_ALIGN_LEFT)); - me.menuTableAlignCenter.setChecked((flow) ? false : (align === c_tableAlign.TABLE_ALIGN_CENTER)); - me.menuTableAlignRight.setChecked((flow) ? false : (align === c_tableAlign.TABLE_ALIGN_RIGHT)); - var dir = value.tableProps.value.get_CellsTextDirection(); me.menuTableDirectH.setChecked(dir == Asc.c_oAscCellTextDirection.LRTB); me.menuTableDirect90.setChecked(dir == Asc.c_oAscCellTextDirection.TBRL); @@ -2722,11 +2664,11 @@ define([ mnuTableSplit.setDisabled(disabled || !me.api.CheckBeforeSplitCells()); } + menuTableDistRows.setDisabled(disabled); + menuTableDistCols.setDisabled(disabled); menuTableCellAlign.setDisabled(disabled); menuTableDirection.setDisabled(disabled); - menuTableWrapInline.setDisabled(disabled); - menuTableWrapFlow.setDisabled(disabled || !value.tableProps.value.get_CanBeFlow()); menuTableAdvanced.setDisabled(disabled); var cancopy = me.api && me.api.can_CopyCut(); @@ -2902,12 +2844,12 @@ define([ mnuTableMerge, mnuTableSplit, { caption: '--' }, + menuTableDistRows, + menuTableDistCols, + { caption: '--' }, menuTableCellAlign, menuTableDirection, { caption: '--' }, - menuTableWrapInline, - menuTableWrapFlow, - { caption: '--' }, menuTableAdvanced, { caption: '--' }, /** coauthoring begin **/ @@ -3476,8 +3418,6 @@ define([ mergeCellsText : 'Merge Cells', splitCellsText : 'Split Cell...', splitCellTitleText : 'Split Cell', - flowoverText : 'Wrapping Style - Flow', - inlineText : 'Wrapping Style - Inline', originalSizeText : 'Default Size', advancedText : 'Advanced Settings', breakBeforeText : 'Page break before', @@ -3637,7 +3577,9 @@ define([ textRemove: 'Remove', textSettings: 'Settings', textRemoveControl: 'Remove content control', - textEditControls: 'Content control settings' + textEditControls: 'Content control settings', + textDistributeRows: 'Distribute rows', + textDistributeCols: 'Distribute columns' }, DE.Views.DocumentHolder || {})); }); \ No newline at end of file diff --git a/apps/documenteditor/main/locale/en.json b/apps/documenteditor/main/locale/en.json index 7c507dcae..375de78de 100644 --- a/apps/documenteditor/main/locale/en.json +++ b/apps/documenteditor/main/locale/en.json @@ -837,13 +837,13 @@ "DE.Views.DocumentHolder.editFooterText": "Edit Footer", "DE.Views.DocumentHolder.editHeaderText": "Edit Header", "DE.Views.DocumentHolder.editHyperlinkText": "Edit Hyperlink", - "DE.Views.DocumentHolder.flowoverText": "Wrapping Style - Flow", + "del_DE.Views.DocumentHolder.flowoverText": "Wrapping Style - Flow", "DE.Views.DocumentHolder.guestText": "Guest", "DE.Views.DocumentHolder.hyperlinkText": "Hyperlink", "DE.Views.DocumentHolder.ignoreAllSpellText": "Ignore All", "DE.Views.DocumentHolder.ignoreSpellText": "Ignore", "DE.Views.DocumentHolder.imageText": "Image Advanced Settings", - "DE.Views.DocumentHolder.inlineText": "Wrapping Style - Inline", + "del_DE.Views.DocumentHolder.inlineText": "Wrapping Style - Inline", "DE.Views.DocumentHolder.insertColumnLeftText": "Column Left", "DE.Views.DocumentHolder.insertColumnRightText": "Column Right", "DE.Views.DocumentHolder.insertColumnText": "Insert Column", @@ -990,6 +990,8 @@ "DE.Views.DocumentHolder.textNest": "Nest table", "DE.Views.DocumentHolder.updateStyleText": "Update %1 style", "DE.Views.DocumentHolder.vertAlignText": "Vertical Alignment", + "DE.Views.DocumentHolder.textDistributeRows": "Distribute rows", + "DE.Views.DocumentHolder.textDistributeCols": "Distribute columns", "DE.Views.DropcapSettingsAdvanced.cancelButtonText": "Cancel", "DE.Views.DropcapSettingsAdvanced.okButtonText": "Ok", "DE.Views.DropcapSettingsAdvanced.strBorders": "Borders & Fill", From 5854f4ea43b2e82a3eeb40f999914babe7f84b2b Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 26 Jan 2018 11:02:37 +0300 Subject: [PATCH 03/18] [DE] Distribute table rows and columns. --- apps/documenteditor/main/app/view/DocumentHolder.js | 8 ++++---- apps/documenteditor/main/app/view/TableSettings.js | 6 ++++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/apps/documenteditor/main/app/view/DocumentHolder.js b/apps/documenteditor/main/app/view/DocumentHolder.js index 6a4eaaf56..d350081c0 100644 --- a/apps/documenteditor/main/app/view/DocumentHolder.js +++ b/apps/documenteditor/main/app/view/DocumentHolder.js @@ -2578,16 +2578,16 @@ define([ var menuTableDistRows = new Common.UI.MenuItem({ caption : me.textDistributeRows }).on('click', _.bind(function(){ - // if (me.api) - // me.api.distributeCols(); + if (me.api) + me.api.asc_DistributeTableCells(false); me.fireEvent('editcomplete', me); }, me)); var menuTableDistCols = new Common.UI.MenuItem({ caption : me.textDistributeCols }).on('click', _.bind(function(){ - // if (me.api) - // me.api.distributeCols(); + if (me.api) + me.api.asc_DistributeTableCells(true); me.fireEvent('editcomplete', me); }, me)); diff --git a/apps/documenteditor/main/app/view/TableSettings.js b/apps/documenteditor/main/app/view/TableSettings.js index 4f0d26c39..ad72179a5 100644 --- a/apps/documenteditor/main/app/view/TableSettings.js +++ b/apps/documenteditor/main/app/view/TableSettings.js @@ -401,14 +401,16 @@ define([ el: $('#table-btn-distrub-rows') }); this.lockedControls.push(this.btnDistributeRows); - this.btnDistributeRows.on('click', _.bind(function(field, newValue, oldValue, eOpts){ + this.btnDistributeRows.on('click', _.bind(function(btn){ + this.api.asc_DistributeTableCells(false); }, this)); this.btnDistributeCols = new Common.UI.Button({ el: $('#table-btn-distrub-cols') }); this.lockedControls.push(this.btnDistributeCols); - this.btnDistributeCols.on('click', _.bind(function(field, newValue, oldValue, eOpts){ + this.btnDistributeCols.on('click', _.bind(function(btn){ + this.api.asc_DistributeTableCells(true); }, this)); this.linkAdvanced = $('#table-advanced-link'); From ba6d82f74187ded78570c358bcec2da6b0f79aab Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Tue, 30 Jan 2018 14:42:19 +0300 Subject: [PATCH 04/18] Test variant for working with column width and row height. --- .../main/app/view/TableSettings.js | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/apps/documenteditor/main/app/view/TableSettings.js b/apps/documenteditor/main/app/view/TableSettings.js index ad72179a5..ae018fa01 100644 --- a/apps/documenteditor/main/app/view/TableSettings.js +++ b/apps/documenteditor/main/app/view/TableSettings.js @@ -376,8 +376,10 @@ define([ maxValue: 55.88, minValue: 0 }); - this.numHeight.on('change', _.bind(function(field, newValue, oldValue, eOpts){ - // this._changedProps.put_Height(this.cmbUnit.getValue() ? -field.getNumberValue() : Common.Utils.Metric.fnRecalcToMM(field.getNumberValue())); + this.numHeight.on('change', _.bind(function(field, newValue, oldValue, eOpts){ + var _props = new Asc.CTableProp(); + _props.put_RowHeight(Common.Utils.Metric.fnRecalcToMM(field.getNumberValue())); + this.api.tblApply(_props); }, this)); this.lockedControls.push(this.numHeight); this.spinners.push(this.numHeight); @@ -392,7 +394,9 @@ define([ minValue: 0 }); this.numWidth.on('change', _.bind(function(field, newValue, oldValue, eOpts){ - // this._changedProps.put_Width(this.cmbUnit.getValue() ? -field.getNumberValue() : Common.Utils.Metric.fnRecalcToMM(field.getNumberValue())); + var _props = new Asc.CTableProp(); + _props.put_ColumnWidth(Common.Utils.Metric.fnRecalcToMM(field.getNumberValue())); + this.api.tblApply(_props); }, this)); this.lockedControls.push(this.numWidth); this.spinners.push(this.numWidth); @@ -435,14 +439,14 @@ define([ this._originalProps = new Asc.CTableProp(props); this._originalProps.put_CellSelect(true); - var value = null;//props.get_Width(); - if ( Math.abs(this._state.Width-value)>0.001 || - (this._state.Width===null || value===null)&&(this._state.Width!==value)) { + var value = props.get_ColumnWidth(); + if ((this._state.Width === null || this._state.Width === undefined) || + Math.abs(this._state.Width-value)>0.001) { this.numWidth.setValue((value !== null) ? Common.Utils.Metric.fnRecalcFromMM(value) : '', true); } - value = null;//props.get_Height(); - if ( Math.abs(this._state.Height-value)>0.001 || - (this._state.Height===null || value===null)&&(this._state.Height!==value)) { + value = props.get_RowHeight(); + if ((this._state.Height === null || this._state.Height === undefined) || + Math.abs(this._state.Height-value)>0.001) { this.numHeight.setValue((value !== null) ? Common.Utils.Metric.fnRecalcFromMM(value) : '', true); } From 4a760ce9992c34b518a01c6c22f5e1a5388b6847 Mon Sep 17 00:00:00 2001 From: Oleg Korshul Date: Tue, 30 Jan 2018 17:00:57 +0300 Subject: [PATCH 05/18] add new scripts --- apps/documenteditor/sdk_dev_scripts.js | 6 ++++-- apps/presentationeditor/sdk_dev_scripts.js | 5 ++++- apps/spreadsheeteditor/sdk_dev_scripts.js | 11 +++++++---- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/apps/documenteditor/sdk_dev_scripts.js b/apps/documenteditor/sdk_dev_scripts.js index 3ba4cf95a..26652e11d 100644 --- a/apps/documenteditor/sdk_dev_scripts.js +++ b/apps/documenteditor/sdk_dev_scripts.js @@ -18,9 +18,11 @@ var sdk_dev_scrpipts = [ "../../../../sdkjs/common/AdvancedOptions.js", "../../../../sdkjs/common/FontsFreeType/font_engine.js", "../../../../sdkjs/common/FontsFreeType/FontFile.js", - "../../../../sdkjs/common/FontsFreeType/font_map.js", + "../../../../sdkjs/common/FontsFreeType/font_map.js", + "../../../../sdkjs/common/FontsFreeType/RasterHeapManager.js", + "../../../../sdkjs/common/FontsFreeType/GlyphString.js", "../../../../sdkjs/common/FontsFreeType/FontManager.js", - "../../../../sdkjs/word/Editor/FontClassification.js", + "../../../../sdkjs/common/FontsFreeType/FontClassification.js", "../../../../sdkjs/common/FontsFreeType/character.js", "../../../../sdkjs/common/Drawings/Metafile.js", "../../../../sdkjs/common/FontsFreeType/TextMeasurer.js", diff --git a/apps/presentationeditor/sdk_dev_scripts.js b/apps/presentationeditor/sdk_dev_scripts.js index 6f6ddf6fe..c44352eac 100644 --- a/apps/presentationeditor/sdk_dev_scripts.js +++ b/apps/presentationeditor/sdk_dev_scripts.js @@ -19,8 +19,11 @@ var sdk_dev_scrpipts = [ "../../../../sdkjs/common/FontsFreeType/font_engine.js", "../../../../sdkjs/common/FontsFreeType/FontFile.js", "../../../../sdkjs/common/FontsFreeType/font_map.js", + "../../../../sdkjs/common/FontsFreeType/RasterHeapManager.js", + "../../../../sdkjs/common/FontsFreeType/GlyphString.js", "../../../../sdkjs/common/FontsFreeType/FontManager.js", - "../../../../sdkjs/word/Editor/FontClassification.js", + "../../../../sdkjs/common/FontsFreeType/FontClassification.js", + "../../../../sdkjs/common/FontsFreeType/character.js", "../../../../sdkjs/common/Drawings/Metafile.js", "../../../../sdkjs/common/FontsFreeType/TextMeasurer.js", "../../../../sdkjs/common/Drawings/WorkEvents.js", diff --git a/apps/spreadsheeteditor/sdk_dev_scripts.js b/apps/spreadsheeteditor/sdk_dev_scripts.js index 3ca931033..6cdc9650f 100644 --- a/apps/spreadsheeteditor/sdk_dev_scripts.js +++ b/apps/spreadsheeteditor/sdk_dev_scripts.js @@ -26,10 +26,13 @@ var sdk_dev_scrpipts = [ "../../../../sdkjs/common/NumFormat.js", "../../../../sdkjs/common/SerializeChart.js", "../../../../sdkjs/common/FontsFreeType/font_engine.js", - "../../../../sdkjs/common/FontsFreeType/FontFile.js", - "../../../../sdkjs/common/FontsFreeType/font_map.js", - "../../../../sdkjs/common/FontsFreeType/FontManager.js", - "../../../../sdkjs/word/Editor/FontClassification.js", + "../../../../sdkjs/common/FontsFreeType/FontFile.js", + "../../../../sdkjs/common/FontsFreeType/font_map.js", + "../../../../sdkjs/common/FontsFreeType/RasterHeapManager.js", + "../../../../sdkjs/common/FontsFreeType/GlyphString.js", + "../../../../sdkjs/common/FontsFreeType/FontManager.js", + "../../../../sdkjs/common/FontsFreeType/FontClassification.js", + "../../../../sdkjs/common/FontsFreeType/character.js", "../../../../sdkjs/common/Drawings/Metafile.js", "../../../../sdkjs/common/FontsFreeType/TextMeasurer.js", "../../../../sdkjs/common/Drawings/WorkEvents.js", From 42e448177658c1fad4bfe637beaf7d7d991b4945 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 5 Feb 2018 12:22:03 +0300 Subject: [PATCH 06/18] Set long operation mask for plugins actions (action.id is string). --- apps/documenteditor/main/app/controller/Main.js | 6 ++++++ apps/documenteditor/mobile/app/controller/Main.js | 6 ++++++ apps/presentationeditor/main/app/controller/Main.js | 6 ++++++ apps/presentationeditor/mobile/app/controller/Main.js | 6 ++++++ apps/spreadsheeteditor/main/app/controller/Main.js | 5 +++++ apps/spreadsheeteditor/mobile/app/controller/Main.js | 6 ++++++ 6 files changed, 35 insertions(+) diff --git a/apps/documenteditor/main/app/controller/Main.js b/apps/documenteditor/main/app/controller/Main.js index f1e71bd65..52158cf1a 100644 --- a/apps/documenteditor/main/app/controller/Main.js +++ b/apps/documenteditor/main/app/controller/Main.js @@ -754,6 +754,12 @@ define([ title = this.loadingDocumentTitleText; text = this.loadingDocumentTextText; break; + default: + if (typeof action.id == 'string'){ + title = action.id; + text = action.id; + } + break; } if (action.type == Asc.c_oAscAsyncActionType['BlockInteraction']) { diff --git a/apps/documenteditor/mobile/app/controller/Main.js b/apps/documenteditor/mobile/app/controller/Main.js index 2be081442..3d0cedd5f 100644 --- a/apps/documenteditor/mobile/app/controller/Main.js +++ b/apps/documenteditor/mobile/app/controller/Main.js @@ -442,6 +442,12 @@ define([ title = me.loadingDocumentTitleText; text = me.loadingDocumentTextText; break; + default: + if (typeof action.id == 'string'){ + title = action.id; + text = action.id; + } + break; } if (action.type == Asc.c_oAscAsyncActionType['BlockInteraction']) { diff --git a/apps/presentationeditor/main/app/controller/Main.js b/apps/presentationeditor/main/app/controller/Main.js index 6f81aff74..b89ee8df4 100644 --- a/apps/presentationeditor/main/app/controller/Main.js +++ b/apps/presentationeditor/main/app/controller/Main.js @@ -540,6 +540,12 @@ define([ title = this.loadingDocumentTitleText; text = this.loadingDocumentTextText; break; + default: + if (typeof action.id == 'string'){ + title = action.id; + text = action.id; + } + break; } if (action.type == Asc.c_oAscAsyncActionType['BlockInteraction']) { diff --git a/apps/presentationeditor/mobile/app/controller/Main.js b/apps/presentationeditor/mobile/app/controller/Main.js index 69d23b5c1..e629e88f1 100644 --- a/apps/presentationeditor/mobile/app/controller/Main.js +++ b/apps/presentationeditor/mobile/app/controller/Main.js @@ -425,6 +425,12 @@ define([ title = me.loadingDocumentTitleText; text = me.loadingDocumentTextText; break; + default: + if (typeof action.id == 'string'){ + title = action.id; + text = action.id; + } + break; } if (action.type == Asc.c_oAscAsyncActionType['BlockInteraction']) { diff --git a/apps/spreadsheeteditor/main/app/controller/Main.js b/apps/spreadsheeteditor/main/app/controller/Main.js index 92dfbc780..e59fac42a 100644 --- a/apps/spreadsheeteditor/main/app/controller/Main.js +++ b/apps/spreadsheeteditor/main/app/controller/Main.js @@ -557,6 +557,11 @@ define([ case LoadingDocument: title = this.loadingDocumentTitleText; break; + default: + if (typeof action.id == 'string'){ + title = action.id; + } + break; } if (action.type == Asc.c_oAscAsyncActionType.BlockInteraction) { diff --git a/apps/spreadsheeteditor/mobile/app/controller/Main.js b/apps/spreadsheeteditor/mobile/app/controller/Main.js index 5c2bb4b17..98ce0a370 100644 --- a/apps/spreadsheeteditor/mobile/app/controller/Main.js +++ b/apps/spreadsheeteditor/mobile/app/controller/Main.js @@ -440,6 +440,12 @@ define([ title = me.loadingDocumentTitleText; text = me.loadingDocumentTextText; break; + default: + if (typeof action.id == 'string'){ + title = action.id; + text = action.id; + } + break; } if (action.type == Asc.c_oAscAsyncActionType.BlockInteraction) { From f0bf279175c736698f8993a103ad9262a18048d3 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 5 Feb 2018 13:41:49 +0300 Subject: [PATCH 07/18] [DE] Fix Bug 36775, Fix Bug 36771. --- .../main/app/view/TableOfContentsSettings.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/apps/documenteditor/main/app/view/TableOfContentsSettings.js b/apps/documenteditor/main/app/view/TableOfContentsSettings.js index ca0ab8aca..171311f72 100644 --- a/apps/documenteditor/main/app/view/TableOfContentsSettings.js +++ b/apps/documenteditor/main/app/view/TableOfContentsSettings.js @@ -358,6 +358,12 @@ define([ this.chLinks.setValue((value !== null && value !== undefined) ? value : 'indeterminate', true); value = props.get_StylesType(); this.cmbStyles.setValue((value!==null) ? value : Asc.c_oAscTOCStylesType.Current); + value = props.get_ShowPageNumbers(); + this.chPages.setValue((value !== null && value !== undefined) ? value : 'indeterminate'); + if (this.chPages.getValue() == 'checked') { + value = props.get_RightAlignTab(); + this.chAlign.setValue((value !== null && value !== undefined) ? value : 'indeterminate'); + } var start = props.get_OutlineStart(), end = props.get_OutlineEnd(), @@ -446,11 +452,11 @@ define([ if (!props) { this._originalProps.put_OutlineRange(this.startLevel, this.endLevel); this._originalProps.put_Hyperlink(this.chLinks.getValue() == 'checked'); - } - this._originalProps.put_ShowPageNumbers(this.chPages.getValue() == 'checked'); - if (this.chPages.getValue() == 'checked') { - this._originalProps.put_RightAlignTab(this.chAlign.getValue() == 'checked'); - this._originalProps.put_TabLeader(this.cmbLeader.getValue()); + this._originalProps.put_ShowPageNumbers(this.chPages.getValue() == 'checked'); + if (this.chPages.getValue() == 'checked') { + this._originalProps.put_RightAlignTab(this.chAlign.getValue() == 'checked'); + this._originalProps.put_TabLeader(this.cmbLeader.getValue()); + } } // this.api.SetDrawImagePlaceContents('tableofcontents-img', this._originalProps); From 8d89ee185f0182a26e4fb598f2806c80283f7222 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 5 Feb 2018 15:13:43 +0300 Subject: [PATCH 08/18] [SSE] Added button for selecting pivot table. --- .../main/app/controller/PivotTable.js | 5 +++++ .../main/app/view/PivotTable.js | 21 ++++++++++++++++++- apps/spreadsheeteditor/main/locale/en.json | 2 ++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/apps/spreadsheeteditor/main/app/controller/PivotTable.js b/apps/spreadsheeteditor/main/app/controller/PivotTable.js index ee2b75727..be9468999 100644 --- a/apps/spreadsheeteditor/main/app/controller/PivotTable.js +++ b/apps/spreadsheeteditor/main/app/controller/PivotTable.js @@ -59,6 +59,7 @@ define([ 'pivottable:rowscolumns': _.bind(this.onCheckTemplateChange, this), 'pivottable:create': _.bind(this.onCreateClick, this), 'pivottable:refresh': _.bind(this.onRefreshClick, this), + 'pivottable:select': _.bind(this.onSelectClick, this), 'pivottable:style': _.bind(this.onPivotStyleSelect, this), 'pivottable:layout': _.bind(this.onPivotLayout, this), 'pivottable:blankrows': _.bind(this.onPivotBlankRows, this), @@ -143,6 +144,10 @@ define([ Common.NotificationCenter.trigger('edit:complete', this); }, + onSelectClick: function(btn, opts){ + Common.NotificationCenter.trigger('edit:complete', this); + }, + onPivotStyleSelect: function(record){ if (this.api) { this._originalProps.asc_getStyleInfo().asc_setName(this.api, this._originalProps, record.get('name')); diff --git a/apps/spreadsheeteditor/main/app/view/PivotTable.js b/apps/spreadsheeteditor/main/app/view/PivotTable.js index 79cd96480..678d34edc 100644 --- a/apps/spreadsheeteditor/main/app/view/PivotTable.js +++ b/apps/spreadsheeteditor/main/app/view/PivotTable.js @@ -67,6 +67,10 @@ define([ '' + '' + '
' + + '
' + + '' + + '
' + + '
' + '
' + '
' + '' + @@ -114,6 +118,10 @@ define([ me.fireEvent('pivottable:refresh'); }); + this.btnSelectPivot.on('click', function (e) { + me.fireEvent('pivottable:select'); + }); + this.chRowHeader.on('change', function (field, value) { me.fireEvent('pivottable:rowscolumns', [0, value]); }); @@ -243,6 +251,13 @@ define([ }); // this.lockedControls.push(this.btnRefreshPivot); + this.btnSelectPivot = new Common.UI.Button({ + cls: 'btn-toolbar x-huge icon-top', + iconCls: 'btn-update-pivot', + caption: this.txtSelect + }); + this.lockedControls.push(this.btnSelectPivot); + this.pivotStyles = new Common.UI.ComboDataView({ cls : 'combo-pivot-template', enableKeyEvents : true, @@ -270,6 +285,7 @@ define([ })).then(function(){ me.btnAddPivot.updateHint(me.tipCreatePivot); me.btnRefreshPivot.updateHint(me.tipRefresh); + me.btnSelectPivot.updateHint(me.tipSelect); me.btnPivotLayout.updateHint(me.capLayout); me.btnPivotBlankRows.updateHint(me.capBlankRows); me.btnPivotSubtotals.updateHint(me.tipSubtotals); @@ -289,6 +305,7 @@ define([ this.btnAddPivot.render(this.$el.find('#slot-btn-add-pivot')); this.btnRefreshPivot.render(this.$el.find('#slot-btn-refresh-pivot')); + this.btnSelectPivot.render(this.$el.find('#slot-btn-select-pivot')); this.btnPivotLayout.render(this.$el.find('#slot-btn-pivot-report-layout')); this.btnPivotBlankRows.render(this.$el.find('#slot-btn-pivot-blank-rows')); this.btnPivotSubtotals.render(this.$el.find('#slot-btn-pivot-subtotals')); @@ -341,7 +358,9 @@ define([ txtRefresh: 'Refresh', tipRefresh: 'Update the information from data source', tipGrandTotals: 'Show or hide grand totals', - tipSubtotals: 'Show or hide subtotals' + tipSubtotals: 'Show or hide subtotals', + txtSelect: 'Select', + tipSelect: 'Select entire pivot table' } }()), SSE.Views.PivotTable || {})); }); \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/locale/en.json b/apps/spreadsheeteditor/main/locale/en.json index bced17ee7..922243dc0 100644 --- a/apps/spreadsheeteditor/main/locale/en.json +++ b/apps/spreadsheeteditor/main/locale/en.json @@ -1499,6 +1499,8 @@ "SSE.Views.PivotTable.tipRefresh": "Update the information from data source", "SSE.Views.PivotTable.tipGrandTotals": "Show or hide grand totals", "SSE.Views.PivotTable.tipSubtotals": "Show or hide subtotals", + "SSE.Views.PivotTable.txtSelect": "Select", + "SSE.Views.PivotTable.tipSelect": "Select entire pivot table", "SSE.Views.PrintSettings.btnPrint": "Save & Print", "SSE.Views.PrintSettings.cancelButtonText": "Cancel", "SSE.Views.PrintSettings.strBottom": "Bottom", From 00dea9fd5c5a972d0c04afdfd7a05b57d504beb1 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 5 Feb 2018 15:41:24 +0300 Subject: [PATCH 09/18] [SSE] Select entire pivot table. --- apps/spreadsheeteditor/main/app/controller/PivotTable.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/spreadsheeteditor/main/app/controller/PivotTable.js b/apps/spreadsheeteditor/main/app/controller/PivotTable.js index be9468999..5f336a592 100644 --- a/apps/spreadsheeteditor/main/app/controller/PivotTable.js +++ b/apps/spreadsheeteditor/main/app/controller/PivotTable.js @@ -145,6 +145,9 @@ define([ }, onSelectClick: function(btn, opts){ + if (this.api) { + this._originalProps.asc_select(this.api); + } Common.NotificationCenter.trigger('edit:complete', this); }, From 1703a115e13c6f4edd2a65480d8e9595e02c11ab Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 6 Feb 2018 11:56:13 +0300 Subject: [PATCH 10/18] Fix Bug 36850. Added Default Size for images in the context menu, added Change Shape Type for images in the right settings panel. --- .../main/app/template/ShapeSettings.template | 6 ++-- .../main/app/view/DocumentHolder.js | 5 +-- .../main/app/view/ShapeSettings.js | 31 +++++++++++++------ .../main/app/template/ShapeSettings.template | 11 +++---- .../main/app/view/DocumentHolder.js | 4 +-- .../main/app/view/ShapeSettings.js | 31 +++++++++++++------ .../main/app/controller/DocumentHolder.js | 6 ++-- .../main/app/template/ShapeSettings.template | 11 +++---- .../main/app/view/ShapeSettings.js | 31 +++++++++++++------ 9 files changed, 83 insertions(+), 53 deletions(-) diff --git a/apps/documenteditor/main/app/template/ShapeSettings.template b/apps/documenteditor/main/app/template/ShapeSettings.template index e0346dc1e..4a4ff30d1 100644 --- a/apps/documenteditor/main/app/template/ShapeSettings.template +++ b/apps/documenteditor/main/app/template/ShapeSettings.template @@ -134,18 +134,18 @@ - +
- +
- +
diff --git a/apps/documenteditor/main/app/view/DocumentHolder.js b/apps/documenteditor/main/app/view/DocumentHolder.js index c0705edff..21209e718 100644 --- a/apps/documenteditor/main/app/view/DocumentHolder.js +++ b/apps/documenteditor/main/app/view/DocumentHolder.js @@ -137,6 +137,8 @@ define([ if (shapeprops) { if (shapeprops.get_FromChart()) menu_props.imgProps.isChart = true; + else if (shapeprops.get_FromImage()) + menu_props.imgProps.isOnlyImg = true; else menu_props.imgProps.isShape = true; } else if ( chartprops ) @@ -2266,8 +2268,7 @@ define([ menuChartEdit.setVisible(!_.isNull(value.imgProps.value.get_ChartProperties()) && !onlyCommonProps); - me.menuOriginalSize.setVisible(_.isNull(value.imgProps.value.get_ChartProperties()) && _.isNull(value.imgProps.value.get_ShapeProperties()) && - !onlyCommonProps); + me.menuOriginalSize.setVisible(value.imgProps.isOnlyImg); me.pictureMenu.items[10].setVisible(menuChartEdit.isVisible() || me.menuOriginalSize.isVisible()); var islocked = value.imgProps.locked || (value.headerProps!==undefined && value.headerProps.locked); diff --git a/apps/documenteditor/main/app/view/ShapeSettings.js b/apps/documenteditor/main/app/view/ShapeSettings.js index 7828424e5..03dc30873 100644 --- a/apps/documenteditor/main/app/view/ShapeSettings.js +++ b/apps/documenteditor/main/app/view/ShapeSettings.js @@ -755,11 +755,17 @@ define([ this._noApply = true; this.disableControls(this._locked, !shapeprops.get_CanFill()); - this.hideShapeOnlySettings(shapeprops.get_FromChart()); - this.hideChangeTypeSettings(shapetype=='line' || shapetype=='bentConnector2' || shapetype=='bentConnector3' - || shapetype=='bentConnector4' || shapetype=='bentConnector5' || shapetype=='curvedConnector2' - || shapetype=='curvedConnector3' || shapetype=='curvedConnector4' || shapetype=='curvedConnector5' - || shapetype=='straightConnector1'); + this.hideShapeOnlySettings(shapeprops.get_FromChart() || shapeprops.get_FromImage()); + + var hidechangetype = shapeprops.get_FromChart() || shapetype=='line' || shapetype=='bentConnector2' || shapetype=='bentConnector3' + || shapetype=='bentConnector4' || shapetype=='bentConnector5' || shapetype=='curvedConnector2' + || shapetype=='curvedConnector3' || shapetype=='curvedConnector4' || shapetype=='curvedConnector5' + || shapetype=='straightConnector1'; + this.hideChangeTypeSettings(hidechangetype); + if (!hidechangetype) { + this.btnChangeShape.menu.items[0].setVisible(shapeprops.get_FromImage()); + this.btnChangeShape.menu.items[1].setVisible(!shapeprops.get_FromImage()); + } var value = props.get_WrappingStyle(); if (this._state.WrappingStyle!==value) { @@ -1522,22 +1528,27 @@ define([ shapesStore = this.application.getCollection('ShapeGroups'); var count = shapesStore.length; - for (var i=0; i0; i++) { + var shapeGroup = shapesStore.at(i>-1 ? i : i+1); var menuItem = new Common.UI.MenuItem({ caption: shapeGroup.get('groupName'), menu: new Common.UI.Menu({ menuAlign: 'tr-tl', items: [ - { template: _.template('') } + { template: _.template('') } ] }) }); me.btnChangeShape.menu.addItem(menuItem); + var store = shapeGroup.get('groupStore'); + if (i<0) { + store = store.clone(); + store.shift(); + } var shapePicker = new Common.UI.DataView({ - el: $('#id-shape-menu-shapegroup' + i), - store: shapeGroup.get('groupStore'), + el: $('#id-shape-menu-shapegroup' + (i+1)), + store: store, parentMenu: menuItem.menu, showLast: false, itemTemplate: _.template('
') diff --git a/apps/presentationeditor/main/app/template/ShapeSettings.template b/apps/presentationeditor/main/app/template/ShapeSettings.template index 13fc671a5..f86e7770a 100644 --- a/apps/presentationeditor/main/app/template/ShapeSettings.template +++ b/apps/presentationeditor/main/app/template/ShapeSettings.template @@ -97,7 +97,7 @@ - +
@@ -116,21 +116,18 @@
- - - - +
- +
- +
diff --git a/apps/presentationeditor/main/app/view/DocumentHolder.js b/apps/presentationeditor/main/app/view/DocumentHolder.js index 8ce3c5fda..5e866fe82 100644 --- a/apps/presentationeditor/main/app/view/DocumentHolder.js +++ b/apps/presentationeditor/main/app/view/DocumentHolder.js @@ -3101,12 +3101,12 @@ define([ disabled = imgdisabled || shapedisabled || chartdisabled || (value.slideProps!==undefined && value.slideProps.locked); // image properties - menuImgOriginalSize.setVisible(_.isUndefined(value.shapeProps) && _.isUndefined(value.chartProps)); + menuImgOriginalSize.setVisible((_.isUndefined(value.shapeProps) || value.shapeProps.value.get_FromImage()) && _.isUndefined(value.chartProps)); if (menuImgOriginalSize.isVisible()) menuImgOriginalSize.setDisabled(disabled || _.isNull(value.imgProps.value.get_ImageUrl()) || _.isUndefined(value.imgProps.value.get_ImageUrl())); - menuImageAdvanced.setVisible(_.isUndefined(value.shapeProps) && _.isUndefined(value.chartProps)); + menuImageAdvanced.setVisible((_.isUndefined(value.shapeProps) || value.shapeProps.value.get_FromImage()) && _.isUndefined(value.chartProps)); menuShapeAdvanced.setVisible(_.isUndefined(value.imgProps) && _.isUndefined(value.chartProps)); menuChartEdit.setVisible(_.isUndefined(value.imgProps) && !_.isUndefined(value.chartProps) && (_.isUndefined(value.shapeProps) || value.shapeProps.isChart)); menuImgShapeSeparator.setVisible(menuImageAdvanced.isVisible() || menuShapeAdvanced.isVisible() || menuChartEdit.isVisible()); diff --git a/apps/presentationeditor/main/app/view/ShapeSettings.js b/apps/presentationeditor/main/app/view/ShapeSettings.js index 3d96ff791..3a20fbd5f 100644 --- a/apps/presentationeditor/main/app/view/ShapeSettings.js +++ b/apps/presentationeditor/main/app/view/ShapeSettings.js @@ -687,11 +687,17 @@ define([ var shapetype = props.asc_getType(); this.disableControls(this._locked==true, props.get_CanFill() !== true); - this.hideShapeOnlySettings(props.get_FromChart()); - this.hideChangeTypeSettings(shapetype=='line' || shapetype=='bentConnector2' || shapetype=='bentConnector3' - || shapetype=='bentConnector4' || shapetype=='bentConnector5' || shapetype=='curvedConnector2' - || shapetype=='curvedConnector3' || shapetype=='curvedConnector4' || shapetype=='curvedConnector5' - || shapetype=='straightConnector1'); + this.hideShapeOnlySettings(props.get_FromChart() || props.get_FromImage()); + + var hidechangetype = props.get_FromChart() || shapetype=='line' || shapetype=='bentConnector2' || shapetype=='bentConnector3' + || shapetype=='bentConnector4' || shapetype=='bentConnector5' || shapetype=='curvedConnector2' + || shapetype=='curvedConnector3' || shapetype=='curvedConnector4' || shapetype=='curvedConnector5' + || shapetype=='straightConnector1'; + this.hideChangeTypeSettings(hidechangetype); + if (!hidechangetype) { + this.btnChangeShape.menu.items[0].setVisible(props.get_FromImage()); + this.btnChangeShape.menu.items[1].setVisible(!props.get_FromImage()); + } // background colors var rec = null; @@ -1395,22 +1401,27 @@ define([ shapesStore = this.application.getCollection('ShapeGroups'); var count = shapesStore.length; - for (var i=0; i0; i++) { + var shapeGroup = shapesStore.at(i>-1 ? i : i+1); var menuItem = new Common.UI.MenuItem({ caption: shapeGroup.get('groupName'), menu: new Common.UI.Menu({ menuAlign: 'tr-tl', items: [ - { template: _.template('') } + { template: _.template('') } ] }) }); me.btnChangeShape.menu.addItem(menuItem); + var store = shapeGroup.get('groupStore'); + if (i<0) { + store = store.clone(); + store.shift(); + } var shapePicker = new Common.UI.DataView({ - el: $('#id-shape-menu-shapegroup' + i), - store: shapeGroup.get('groupStore'), + el: $('#id-shape-menu-shapegroup' + (i+1)), + store: store, parentMenu: menuItem.menu, showLast: false, itemTemplate: _.template('
') diff --git a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js index c7d2fed2f..807cd029b 100644 --- a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js +++ b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js @@ -1249,7 +1249,7 @@ define([ }, fillMenuProps: function(cellinfo, showMenu, event){ - var iscellmenu, isrowmenu, iscolmenu, isallmenu, ischartmenu, isimagemenu, istextshapemenu, isshapemenu, istextchartmenu, + var iscellmenu, isrowmenu, iscolmenu, isallmenu, ischartmenu, isimagemenu, istextshapemenu, isshapemenu, istextchartmenu, isimageonly, documentHolder = this.documentHolder, seltype = cellinfo.asc_getFlags().asc_getSelectionType(), isCellLocked = cellinfo.asc_getLocked(), @@ -1285,6 +1285,8 @@ define([ if (shapeprops) { if (shapeprops.asc_getFromChart()) ischartmenu = true; + else if (shapeprops.asc_getFromImage()) + isimageonly = true; else { documentHolder.mnuShapeAdvanced.shapeInfo = elValue; isshapemenu = true; @@ -1310,7 +1312,7 @@ define([ documentHolder.mnuChartEdit.setDisabled(isObjLocked); documentHolder.pmiImgCut.setDisabled(isObjLocked); documentHolder.pmiImgPaste.setDisabled(isObjLocked); - documentHolder.mnuImgAdvanced.setVisible(isimagemenu && !isshapemenu && !ischartmenu); + documentHolder.mnuImgAdvanced.setVisible(isimagemenu && (!isshapemenu || isimageonly) && !ischartmenu); documentHolder.mnuImgAdvanced.setDisabled(isObjLocked); var isInSign = !!signGuid; diff --git a/apps/spreadsheeteditor/main/app/template/ShapeSettings.template b/apps/spreadsheeteditor/main/app/template/ShapeSettings.template index 13fc671a5..f86e7770a 100644 --- a/apps/spreadsheeteditor/main/app/template/ShapeSettings.template +++ b/apps/spreadsheeteditor/main/app/template/ShapeSettings.template @@ -97,7 +97,7 @@ - +
@@ -116,21 +116,18 @@
- - - - +
- +
- +
diff --git a/apps/spreadsheeteditor/main/app/view/ShapeSettings.js b/apps/spreadsheeteditor/main/app/view/ShapeSettings.js index ed33ce59f..996ae431a 100644 --- a/apps/spreadsheeteditor/main/app/view/ShapeSettings.js +++ b/apps/spreadsheeteditor/main/app/view/ShapeSettings.js @@ -711,11 +711,17 @@ define([ this._noApply = true; this.disableControls(this._locked, !shapeprops.asc_getCanFill()); - this.hideShapeOnlySettings(shapeprops.asc_getFromChart()); - this.hideChangeTypeSettings(shapetype=='line' || shapetype=='bentConnector2' || shapetype=='bentConnector3' - || shapetype=='bentConnector4' || shapetype=='bentConnector5' || shapetype=='curvedConnector2' - || shapetype=='curvedConnector3' || shapetype=='curvedConnector4' || shapetype=='curvedConnector5' - || shapetype=='straightConnector1'); + this.hideShapeOnlySettings(shapeprops.asc_getFromChart() || shapeprops.asc_getFromImage()); + + var hidechangetype = shapeprops.get_FromChart() || shapetype=='line' || shapetype=='bentConnector2' || shapetype=='bentConnector3' + || shapetype=='bentConnector4' || shapetype=='bentConnector5' || shapetype=='curvedConnector2' + || shapetype=='curvedConnector3' || shapetype=='curvedConnector4' || shapetype=='curvedConnector5' + || shapetype=='straightConnector1'; + this.hideChangeTypeSettings(hidechangetype); + if (!hidechangetype) { + this.btnChangeShape.menu.items[0].setVisible(shapeprops.get_FromImage()); + this.btnChangeShape.menu.items[1].setVisible(!shapeprops.get_FromImage()); + } // background colors var rec = null; @@ -1420,22 +1426,27 @@ define([ shapesStore = this.application.getCollection('ShapeGroups'); var count = shapesStore.length; - for (var i=0; i0; i++) { + var shapeGroup = shapesStore.at(i>-1 ? i : i+1); var menuItem = new Common.UI.MenuItem({ caption: shapeGroup.get('groupName'), menu: new Common.UI.Menu({ menuAlign: 'tr-tl', items: [ - { template: _.template('') } + { template: _.template('') } ] }) }); me.btnChangeShape.menu.addItem(menuItem); + var store = shapeGroup.get('groupStore'); + if (i<0) { + store = store.clone(); + store.shift(); + } var shapePicker = new Common.UI.DataView({ - el: $('#id-shape-menu-shapegroup' + i), - store: shapeGroup.get('groupStore'), + el: $('#id-shape-menu-shapegroup' + (i+1)), + store: store, parentMenu: menuItem.menu, showLast: false, itemTemplate: _.template('
') From 11a3706785d0b2d9de2166cd0a7b0219fa54df64 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 6 Feb 2018 13:54:40 +0300 Subject: [PATCH 11/18] Added "Close File" button to the password dialog. Send api event "onRequestClose" when Close File (or Esc) is selected. --- apps/api/documents/api.js | 1 + apps/common/Gateway.js | 4 ++ apps/common/main/lib/component/Window.js | 5 +- apps/common/main/lib/view/OpenDialog.js | 61 ++++++++++++------- .../main/app/controller/LeftMenu.js | 2 + .../main/app/controller/Main.js | 15 +++-- apps/documenteditor/main/app/view/FileMenu.js | 2 +- apps/documenteditor/main/locale/en.json | 1 + .../main/app/controller/LeftMenu.js | 2 + .../main/app/controller/Main.js | 15 +++-- .../main/app/view/FileMenu.js | 2 +- apps/presentationeditor/main/locale/en.json | 1 + .../main/app/controller/LeftMenu.js | 2 + .../main/app/controller/Main.js | 15 +++-- .../main/app/view/FileMenu.js | 4 +- apps/spreadsheeteditor/main/locale/en.json | 1 + 16 files changed, 91 insertions(+), 42 deletions(-) diff --git a/apps/api/documents/api.js b/apps/api/documents/api.js index 76c6f6ea1..2f69b9272 100644 --- a/apps/api/documents/api.js +++ b/apps/api/documents/api.js @@ -189,6 +189,7 @@ _config.editorConfig.canHistoryRestore = _config.events && !!_config.events.onRequestRestore; _config.editorConfig.canSendEmailAddresses = _config.events && !!_config.events.onRequestEmailAddresses; _config.editorConfig.canRequestEditRights = _config.events && !!_config.events.onRequestEditRights; + _config.editorConfig.canRequestClose = _config.events && !!_config.events.onRequestClose; _config.frameEditorId = placeholderId; _config.events && !!_config.events.onReady && console.log("Obsolete: The onReady event is deprecated. Please use onAppReady instead."); diff --git a/apps/common/Gateway.js b/apps/common/Gateway.js index 71d36ecc1..5e06dbdd8 100644 --- a/apps/common/Gateway.js +++ b/apps/common/Gateway.js @@ -250,6 +250,10 @@ if (Common === undefined) { _postMessage({ event: 'onDocumentReady' }); }, + requestClose: function() { + _postMessage({event: 'onRequestClose'}); + }, + on: function(event, handler){ var localHandler = function(event, data){ handler.call(me, data) diff --git a/apps/common/main/lib/component/Window.js b/apps/common/main/lib/component/Window.js index acfec692b..e4387beaa 100644 --- a/apps/common/main/lib/component/Window.js +++ b/apps/common/main/lib/component/Window.js @@ -191,7 +191,10 @@ define([ event.preventDefault(); event.stopPropagation(); if (this.initConfig.closable !== false) { - this.initConfig.toolclose=='hide' ? this.hide() : this.close(); + if (this.initConfig.toolcallback) + this.initConfig.toolcallback.call(this); + else + (this.initConfig.toolclose=='hide') ? this.hide() : this.close(); } return false; } diff --git a/apps/common/main/lib/view/OpenDialog.js b/apps/common/main/lib/view/OpenDialog.js index 43a8ddf7f..462f7f028 100644 --- a/apps/common/main/lib/view/OpenDialog.js +++ b/apps/common/main/lib/view/OpenDialog.js @@ -54,14 +54,15 @@ define([ _options = {}; _.extend(_options, { - closable: false, + closable : false, width : 250, height : (options.type == Asc.c_oAscAdvancedOptionsID.CSV) ? 205 : 155, contentWidth : 390, header : true, cls : 'open-dlg', contentTemplate : '', - title : (options.type == Asc.c_oAscAdvancedOptionsID.DRM) ? t.txtTitleProtected : t.txtTitle.replace('%1', (options.type == Asc.c_oAscAdvancedOptionsID.CSV) ? 'CSV' : 'TXT') + title : (options.type == Asc.c_oAscAdvancedOptionsID.DRM) ? t.txtTitleProtected : t.txtTitle.replace('%1', (options.type == Asc.c_oAscAdvancedOptionsID.CSV) ? 'CSV' : 'TXT'), + toolcallback : _.bind(t.onToolClose, t) }, options); @@ -84,18 +85,21 @@ define([ '<% } %>', '
', '
', - '
', '' ].join(''); - this.handler = options.handler; - this.type = options.type; - this.codepages = options.codepages; - this.settings = options.settings; - this.validatePwd = options.validatePwd || false; + this.handler = _options.handler; + this.type = _options.type; + this.closable = _options.closable; + this.codepages = _options.codepages; + this.settings = _options.settings; + this.validatePwd = _options.validatePwd || false; _options.tpl = _.template(this.template)(_options); @@ -106,7 +110,8 @@ define([ if (this.$window) { var me = this; - this.$window.find('.tool').hide(); + if (!this.closable) + this.$window.find('.tool').hide(); this.$window.find('.dlg-btn').on('click', _.bind(this.onBtnClick, this)); if (this.type == Asc.c_oAscAdvancedOptionsID.DRM) { this.inputPwd = new Common.UI.InputField({ @@ -120,11 +125,11 @@ define([ this.$window.find('input').on('keypress', _.bind(this.onKeyPress, this)); } else { this.initCodePages(); - this.onPrimary = function() { - me.onBtnClick(); - return false; - }; } + this.onPrimary = function() { + me._handleInput('ok'); + return false; + }; } }, @@ -141,25 +146,36 @@ define([ } }, - onBtnClick: function (event) { + onKeyPress: function(event) { + if (event.keyCode == Common.UI.Keys.RETURN) { + this._handleInput('ok'); + } else if (this.closable && event.keyCode == Common.UI.Keys.ESC) + this._handleInput('cancel'); + }, + + onBtnClick: function(event) { + this._handleInput(event.currentTarget.attributes['result'].value); + }, + + onToolClose: function() { + this._handleInput('cancel'); + }, + + _handleInput: function(state) { if (this.handler) { if (this.cmbEncoding) { var delimiter = this.cmbDelimiter ? this.cmbDelimiter.getValue() : null, delimiterChar = (delimiter == -1) ? this.inputDelimiter.getValue() : null; (delimiter == -1) && (delimiter = null); this.handler.call(this, this.cmbEncoding.getValue(), delimiter, delimiterChar); - } else - this.handler.call(this, this.inputPwd.getValue()); + } else { + this.handler.call(this, state, this.inputPwd.getValue()); + } } this.close(); }, - onKeyPress: function(event) { - if (event.keyCode == Common.UI.Keys.RETURN) - this.onBtnClick(); - }, - initCodePages: function () { var i, c, codepage, encodedata = [], listItems = [], length = 0; @@ -381,7 +397,8 @@ define([ txtPassword : "Password", txtTitleProtected : "Protected File", txtOther: 'Other', - txtIncorrectPwd: 'Password is incorrect.' + txtIncorrectPwd: 'Password is incorrect.', + closeButtonText: 'Close File' }, Common.Views.OpenDialog || {})); }); \ No newline at end of file diff --git a/apps/documenteditor/main/app/controller/LeftMenu.js b/apps/documenteditor/main/app/controller/LeftMenu.js index 51e78b6db..2180cc6f9 100644 --- a/apps/documenteditor/main/app/controller/LeftMenu.js +++ b/apps/documenteditor/main/app/controller/LeftMenu.js @@ -610,6 +610,8 @@ define([ }, onShortcut: function(s, e) { + if (!this.mode) return; + switch (s) { case 'replace': case 'search': diff --git a/apps/documenteditor/main/app/controller/Main.js b/apps/documenteditor/main/app/controller/Main.js index 52158cf1a..32ad346c4 100644 --- a/apps/documenteditor/main/app/controller/Main.js +++ b/apps/documenteditor/main/app/controller/Main.js @@ -1065,6 +1065,7 @@ define([ this.appOptions.isOffline = this.api.asc_isOffline(); this.appOptions.isReviewOnly = this.permissions.review === true && this.permissions.edit === false; this.appOptions.canRequestEditRights = this.editorConfig.canRequestEditRights; + this.appOptions.canRequestClose = this.editorConfig.canRequestClose; this.appOptions.canEdit = (this.permissions.edit !== false || this.permissions.review === true) && // can edit or review (this.editorConfig.canRequestEditRights || this.editorConfig.mode !== 'view') && // if mode=="view" -> canRequestEditRights must be defined (!this.appOptions.isReviewOnly || this.appOptions.canLicense); // if isReviewOnly==true -> canLicense must be true @@ -1861,14 +1862,18 @@ define([ }); } else if (type == Asc.c_oAscAdvancedOptionsID.DRM) { me._state.openDlg = new Common.Views.OpenDialog({ + closable: me.appOptions.canRequestClose, type: type, validatePwd: !!me._state.isDRM, - handler: function (value) { + handler: function (result, value) { me.isShowOpenDialog = false; - if (me && me.api) { - me.api.asc_setAdvancedOptions(type, new Asc.asc_CDRMAdvancedOptions(value)); - me.loadMask && me.loadMask.show(); - } + if (result == 'ok') { + if (me.api) { + me.api.asc_setAdvancedOptions(type, new Asc.asc_CDRMAdvancedOptions(value)); + me.loadMask && me.loadMask.show(); + } + } else + Common.Gateway.requestClose(); me._state.openDlg = null; } }); diff --git a/apps/documenteditor/main/app/view/FileMenu.js b/apps/documenteditor/main/app/view/FileMenu.js index f15050312..88d0518cd 100644 --- a/apps/documenteditor/main/app/view/FileMenu.js +++ b/apps/documenteditor/main/app/view/FileMenu.js @@ -221,7 +221,7 @@ define([ }, show: function(panel, opts) { - if (this.isVisible() && panel===undefined) return; + if (this.isVisible() && panel===undefined || !this.mode) return; var defPanel = (this.mode.canDownload && (!this.mode.isDesktopApp || !this.mode.isOffline)) ? 'saveas' : 'info'; if (!panel) diff --git a/apps/documenteditor/main/locale/en.json b/apps/documenteditor/main/locale/en.json index 1fc235339..d9a6737e8 100644 --- a/apps/documenteditor/main/locale/en.json +++ b/apps/documenteditor/main/locale/en.json @@ -183,6 +183,7 @@ "Common.Views.OpenDialog.txtPassword": "Password", "Common.Views.OpenDialog.txtTitle": "Choose %1 options", "Common.Views.OpenDialog.txtTitleProtected": "Protected File", + "Common.Views.OpenDialog.closeButtonText": "Close File", "Common.Views.PasswordDialog.cancelButtonText": "Cancel", "Common.Views.PasswordDialog.okButtonText": "OK", "Common.Views.PasswordDialog.txtDescription": "A password is required to open this document", diff --git a/apps/presentationeditor/main/app/controller/LeftMenu.js b/apps/presentationeditor/main/app/controller/LeftMenu.js index 62e35b2fe..3590306ae 100644 --- a/apps/presentationeditor/main/app/controller/LeftMenu.js +++ b/apps/presentationeditor/main/app/controller/LeftMenu.js @@ -463,6 +463,8 @@ define([ }, onShortcut: function(s, e) { + if (!this.mode) return; + var previewPanel = PE.getController('Viewport').getView('DocumentPreview'); switch (s) { diff --git a/apps/presentationeditor/main/app/controller/Main.js b/apps/presentationeditor/main/app/controller/Main.js index b89ee8df4..db1f9fb2e 100644 --- a/apps/presentationeditor/main/app/controller/Main.js +++ b/apps/presentationeditor/main/app/controller/Main.js @@ -831,6 +831,7 @@ define([ this.appOptions.canCoAuthoring = !this.appOptions.isLightVersion; /** coauthoring end **/ this.appOptions.canRequestEditRights = this.editorConfig.canRequestEditRights; + this.appOptions.canRequestClose = this.editorConfig.canRequestClose; this.appOptions.canEdit = this.permissions.edit !== false && // can edit (this.editorConfig.canRequestEditRights || this.editorConfig.mode !== 'view'); // if mode=="view" -> canRequestEditRights must be defined this.appOptions.isEdit = this.appOptions.canLicense && this.appOptions.canEdit && this.editorConfig.mode !== 'view'; @@ -1711,14 +1712,18 @@ define([ me = this; if (type == Asc.c_oAscAdvancedOptionsID.DRM) { me._state.openDlg = new Common.Views.OpenDialog({ + closable: me.appOptions.canRequestClose, type: type, validatePwd: !!me._state.isDRM, - handler: function (value) { + handler: function (result, value) { me.isShowOpenDialog = false; - if (me && me.api) { - me.api.asc_setAdvancedOptions(type, new Asc.asc_CDRMAdvancedOptions(value)); - me.loadMask && me.loadMask.show(); - } + if (result == 'ok') { + if (me.api) { + me.api.asc_setAdvancedOptions(type, new Asc.asc_CDRMAdvancedOptions(value)); + me.loadMask && me.loadMask.show(); + } + } else + Common.Gateway.requestClose(); me._state.openDlg = null; } }); diff --git a/apps/presentationeditor/main/app/view/FileMenu.js b/apps/presentationeditor/main/app/view/FileMenu.js index bc10f274a..91ca8a383 100644 --- a/apps/presentationeditor/main/app/view/FileMenu.js +++ b/apps/presentationeditor/main/app/view/FileMenu.js @@ -216,7 +216,7 @@ define([ }, show: function(panel) { - if (this.isVisible() && panel===undefined) return; + if (this.isVisible() && panel===undefined || !this.mode) return; var defPanel = (this.mode.canDownload && (!this.mode.isDesktopApp || !this.mode.isOffline)) ? 'saveas' : 'info'; if (!panel) diff --git a/apps/presentationeditor/main/locale/en.json b/apps/presentationeditor/main/locale/en.json index f0e4b6f38..ebde90872 100644 --- a/apps/presentationeditor/main/locale/en.json +++ b/apps/presentationeditor/main/locale/en.json @@ -116,6 +116,7 @@ "Common.Views.OpenDialog.txtPassword": "Password", "Common.Views.OpenDialog.txtTitle": "Choose %1 options", "Common.Views.OpenDialog.txtTitleProtected": "Protected File", + "Common.Views.OpenDialog.closeButtonText": "Close File", "Common.Views.PasswordDialog.cancelButtonText": "Cancel", "Common.Views.PasswordDialog.okButtonText": "OK", "Common.Views.PasswordDialog.txtDescription": "A password is required to open this document", diff --git a/apps/spreadsheeteditor/main/app/controller/LeftMenu.js b/apps/spreadsheeteditor/main/app/controller/LeftMenu.js index 463cb2f6d..d64fe5f54 100644 --- a/apps/spreadsheeteditor/main/app/controller/LeftMenu.js +++ b/apps/spreadsheeteditor/main/app/controller/LeftMenu.js @@ -662,6 +662,8 @@ define([ /** coauthoring end **/ onShortcut: function(s, e) { + if (!this.mode) return; + if (this.mode.isEditDiagram && s!='escape') return false; if (this.mode.isEditMailMerge && s!='escape' && s!='search') return false; diff --git a/apps/spreadsheeteditor/main/app/controller/Main.js b/apps/spreadsheeteditor/main/app/controller/Main.js index e59fac42a..73e650de3 100644 --- a/apps/spreadsheeteditor/main/app/controller/Main.js +++ b/apps/spreadsheeteditor/main/app/controller/Main.js @@ -881,6 +881,7 @@ define([ this.appOptions.canModifyFilter = true; this.appOptions.canRequestEditRights = this.editorConfig.canRequestEditRights; + this.appOptions.canRequestClose = this.editorConfig.canRequestClose; this.appOptions.canEdit = this.permissions.edit !== false && // can edit (this.editorConfig.canRequestEditRights || this.editorConfig.mode !== 'view'); // if mode=="view" -> canRequestEditRights must be defined this.appOptions.isEdit = (this.appOptions.canLicense || this.appOptions.isEditDiagram || this.appOptions.isEditMailMerge) && this.permissions.edit !== false && this.editorConfig.mode !== 'view'; @@ -1533,14 +1534,18 @@ define([ }); } else if (type == Asc.c_oAscAdvancedOptionsID.DRM) { me._state.openDlg = new Common.Views.OpenDialog({ + closable: me.appOptions.canRequestClose, type: type, validatePwd: !!me._state.isDRM, - handler: function (value) { + handler: function (result, value) { me.isShowOpenDialog = false; - if (me && me.api) { - me.api.asc_setAdvancedOptions(type, new Asc.asc_CDRMAdvancedOptions(value)); - me.loadMask && me.loadMask.show(); - } + if (result == 'ok') { + if (me && me.api) { + me.api.asc_setAdvancedOptions(type, new Asc.asc_CDRMAdvancedOptions(value)); + me.loadMask && me.loadMask.show(); + } + } else + Common.Gateway.requestClose(); me._state.openDlg = null; } }); diff --git a/apps/spreadsheeteditor/main/app/view/FileMenu.js b/apps/spreadsheeteditor/main/app/view/FileMenu.js index bd54b5d3e..c5da026fb 100644 --- a/apps/spreadsheeteditor/main/app/view/FileMenu.js +++ b/apps/spreadsheeteditor/main/app/view/FileMenu.js @@ -205,7 +205,7 @@ define([ }, show: function(panel) { - if (this.isVisible() && panel===undefined) return; + if (this.isVisible() && panel===undefined || !this.mode) return; var defPanel = (this.mode.canDownload && (!this.mode.isDesktopApp || !this.mode.isOffline)) ? 'saveas' : 'info'; if (!panel) @@ -220,7 +220,7 @@ define([ hide: function() { this.$el.hide(); - this.api.asc_enableKeyEvents(true); + this.api && this.api.asc_enableKeyEvents(true); this.fireEvent('menu:hide', [this]); }, diff --git a/apps/spreadsheeteditor/main/locale/en.json b/apps/spreadsheeteditor/main/locale/en.json index 922243dc0..678417074 100644 --- a/apps/spreadsheeteditor/main/locale/en.json +++ b/apps/spreadsheeteditor/main/locale/en.json @@ -102,6 +102,7 @@ "Common.Views.OpenDialog.txtTab": "Tab", "Common.Views.OpenDialog.txtTitle": "Choose %1 options", "Common.Views.OpenDialog.txtTitleProtected": "Protected File", + "Common.Views.OpenDialog.closeButtonText": "Close File", "Common.Views.PasswordDialog.cancelButtonText": "Cancel", "Common.Views.PasswordDialog.okButtonText": "OK", "Common.Views.PasswordDialog.txtDescription": "A password is required to open this document", From ba341f529e0442af567752aca271638fc71de677 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 6 Feb 2018 14:45:10 +0300 Subject: [PATCH 12/18] [DE] Refactoring table settings. --- apps/documenteditor/main/app/view/TableSettings.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/apps/documenteditor/main/app/view/TableSettings.js b/apps/documenteditor/main/app/view/TableSettings.js index ae018fa01..ee04179a0 100644 --- a/apps/documenteditor/main/app/view/TableSettings.js +++ b/apps/documenteditor/main/app/view/TableSettings.js @@ -81,7 +81,9 @@ define([ CheckColBanded: false, BackColor: '#000000', RepeatRow: false, - DisabledControls: false + DisabledControls: false, + Width: null, + Height: null }; this.spinners = []; this.lockedControls = []; @@ -440,14 +442,16 @@ define([ this._originalProps.put_CellSelect(true); var value = props.get_ColumnWidth(); - if ((this._state.Width === null || this._state.Width === undefined) || + if ((this._state.Width === undefined || value === undefined)&&(this._state.Width!==value) || Math.abs(this._state.Width-value)>0.001) { - this.numWidth.setValue((value !== null) ? Common.Utils.Metric.fnRecalcFromMM(value) : '', true); + this.numWidth.setValue((value !== null && value !== undefined) ? Common.Utils.Metric.fnRecalcFromMM(value) : '', true); + this._state.Width=value; } value = props.get_RowHeight(); - if ((this._state.Height === null || this._state.Height === undefined) || + if ((this._state.Height === undefined || value === undefined)&&(this._state.Height!==value) || Math.abs(this._state.Height-value)>0.001) { - this.numHeight.setValue((value !== null) ? Common.Utils.Metric.fnRecalcFromMM(value) : '', true); + this.numHeight.setValue((value !== null && value !== undefined) ? Common.Utils.Metric.fnRecalcFromMM(value) : '', true); + this._state.Height=value; } //for table-template From 81e72f269c5d280429cc97ad4ea9fda4ae16e67a Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 6 Feb 2018 15:06:01 +0300 Subject: [PATCH 13/18] [PE] Added width, height for table settings in the right panel. Distribute rows and columns in table. --- .../main/app/controller/RightMenu.js | 1 + .../main/app/template/TableSettings.template | 32 +++++++ .../main/app/view/DocumentHolder.js | 27 +++++- .../main/app/view/TableSettings.js | 88 ++++++++++++++++++- apps/presentationeditor/main/locale/en.json | 7 ++ 5 files changed, 150 insertions(+), 5 deletions(-) diff --git a/apps/presentationeditor/main/app/controller/RightMenu.js b/apps/presentationeditor/main/app/controller/RightMenu.js index 6b7c8e5d2..6aedd397a 100644 --- a/apps/presentationeditor/main/app/controller/RightMenu.js +++ b/apps/presentationeditor/main/app/controller/RightMenu.js @@ -273,6 +273,7 @@ define([ this.rightmenu.paragraphSettings.updateMetricUnit(); this.rightmenu.chartSettings.updateMetricUnit(); this.rightmenu.imageSettings.updateMetricUnit(); + this.rightmenu.tableSettings.updateMetricUnit(); }, fillTextArt: function() { diff --git a/apps/presentationeditor/main/app/template/TableSettings.template b/apps/presentationeditor/main/app/template/TableSettings.template index aab71eff9..6d3db0d7e 100644 --- a/apps/presentationeditor/main/app/template/TableSettings.template +++ b/apps/presentationeditor/main/app/template/TableSettings.template @@ -105,6 +105,38 @@
+ + + + + + + + +
+ + + + + +
+ + + + + + + + + + + + + + +
+ + diff --git a/apps/presentationeditor/main/app/view/DocumentHolder.js b/apps/presentationeditor/main/app/view/DocumentHolder.js index 8ce3c5fda..130364c25 100644 --- a/apps/presentationeditor/main/app/view/DocumentHolder.js +++ b/apps/presentationeditor/main/app/view/DocumentHolder.js @@ -2116,6 +2116,22 @@ define([ })() }); + var menuTableDistRows = new Common.UI.MenuItem({ + caption : me.textDistributeRows + }).on('click', _.bind(function(){ + if (me.api) + me.api.asc_DistributeTableCells(false); + me.fireEvent('editcomplete', me); + }, me)); + + var menuTableDistCols = new Common.UI.MenuItem({ + caption : me.textDistributeCols + }).on('click', _.bind(function(){ + if (me.api) + me.api.asc_DistributeTableCells(true); + me.fireEvent('editcomplete', me); + }, me)); + me.menuSpellTable = new Common.UI.MenuItem({ caption : me.loadSpellText, disabled : true @@ -2910,7 +2926,7 @@ define([ return; var isEquation= (value.mathProps && value.mathProps.value); - for (var i = 6; i < 16; i++) { + for (var i = 6; i < 19; i++) { me.tableMenu.items[i].setVisible(!isEquation); } @@ -2924,6 +2940,8 @@ define([ mnuTableMerge.setDisabled(value.tableProps.locked || disabled || !me.api.CheckBeforeMergeCells()); mnuTableSplit.setDisabled(value.tableProps.locked || disabled || !me.api.CheckBeforeSplitCells()); } + menuTableDistRows.setDisabled(value.tableProps.locked || disabled); + menuTableDistCols.setDisabled(value.tableProps.locked || disabled); me.tableMenu.items[7].setDisabled(value.tableProps.locked || disabled); me.tableMenu.items[8].setDisabled(value.tableProps.locked || disabled); @@ -3068,6 +3086,9 @@ define([ mnuTableMerge, mnuTableSplit, { caption: '--' }, + menuTableDistRows, + menuTableDistCols, + { caption: '--' }, menuTableCellAlign, { caption: '--' }, menuTableAdvanced, @@ -3375,7 +3396,9 @@ define([ txtKeepTextOnly: 'Keep text only', txtPastePicture: 'Picture', txtPasteSourceFormat: 'Keep source formatting', - txtPasteDestFormat: 'Use destination theme' + txtPasteDestFormat: 'Use destination theme', + textDistributeRows: 'Distribute rows', + textDistributeCols: 'Distribute columns' }, PE.Views.DocumentHolder || {})); }); \ No newline at end of file diff --git a/apps/presentationeditor/main/app/view/TableSettings.js b/apps/presentationeditor/main/app/view/TableSettings.js index 815b66760..251b624cd 100644 --- a/apps/presentationeditor/main/app/view/TableSettings.js +++ b/apps/presentationeditor/main/app/view/TableSettings.js @@ -80,8 +80,11 @@ define([ CheckLast: false, CheckColBanded: false, BackColor: '#000000', - DisabledControls: false + DisabledControls: false, + Width: null, + Height: null }; + this.spinners = []; this.lockedControls = []; this._locked = false; this._originalLook = new Asc.CTablePropLook(); @@ -350,6 +353,56 @@ define([ this.btnEdit.menu.on('item:click', _.bind(this.onEditClick, this)); this.lockedControls.push(this.btnEdit); + this.numHeight = new Common.UI.MetricSpinner({ + el: $('#table-spin-cell-height'), + step: .1, + width: 115, + defaultUnit : "cm", + value: '1 cm', + maxValue: 55.88, + minValue: 0 + }); + this.numHeight.on('change', _.bind(function(field, newValue, oldValue, eOpts){ + var _props = new Asc.CTableProp(); + _props.put_RowHeight(Common.Utils.Metric.fnRecalcToMM(field.getNumberValue())); + this.api.tblApply(_props); + }, this)); + this.lockedControls.push(this.numHeight); + this.spinners.push(this.numHeight); + + this.numWidth = new Common.UI.MetricSpinner({ + el: $('#table-spin-cell-width'), + step: .1, + width: 115, + defaultUnit : "cm", + value: '1 cm', + maxValue: 55.88, + minValue: 0 + }); + this.numWidth.on('change', _.bind(function(field, newValue, oldValue, eOpts){ + var _props = new Asc.CTableProp(); + _props.put_ColumnWidth(Common.Utils.Metric.fnRecalcToMM(field.getNumberValue())); + this.api.tblApply(_props); + }, this)); + this.lockedControls.push(this.numWidth); + this.spinners.push(this.numWidth); + + this.btnDistributeRows = new Common.UI.Button({ + el: $('#table-btn-distrub-rows') + }); + this.lockedControls.push(this.btnDistributeRows); + this.btnDistributeRows.on('click', _.bind(function(btn){ + this.api.asc_DistributeTableCells(false); + }, this)); + + this.btnDistributeCols = new Common.UI.Button({ + el: $('#table-btn-distrub-cols') + }); + this.lockedControls.push(this.btnDistributeCols); + this.btnDistributeCols.on('click', _.bind(function(btn){ + this.api.asc_DistributeTableCells(true); + }, this)); + this.linkAdvanced = $('#table-advanced-link'); $(this.el).on('click', '#table-advanced-link', _.bind(this.openAdvancedSettings, this)); }, @@ -365,8 +418,21 @@ define([ this._originalProps = new Asc.CTableProp(props); this._originalProps.put_CellSelect(true); + var value = props.get_ColumnWidth(); + if ((this._state.Width === undefined || value === undefined)&&(this._state.Width!==value) || + Math.abs(this._state.Width-value)>0.001) { + this.numWidth.setValue((value !== null && value !== undefined) ? Common.Utils.Metric.fnRecalcFromMM(value) : '', true); + this._state.Width=value; + } + value = props.get_RowHeight(); + if ((this._state.Height === undefined || value === undefined)&&(this._state.Height!==value) || + Math.abs(this._state.Height-value)>0.001) { + this.numHeight.setValue((value !== null && value !== undefined) ? Common.Utils.Metric.fnRecalcFromMM(value) : '', true); + this._state.Height=value; + } + //for table-template - var value = props.get_TableStyle(); + value = props.get_TableStyle(); if (this._state.TemplateId!==value || this._isTemplatesChanged) { this.cmbTableTemplate.suspendEvents(); var rec = this.cmbTableTemplate.menuPicker.store.findWhere({ @@ -473,6 +539,16 @@ define([ } }, + updateMetricUnit: function() { + if (this.spinners) { + for (var i=0; i Date: Tue, 6 Feb 2018 15:27:44 +0300 Subject: [PATCH 14/18] [DE] TableSettings: change RowsInHeader property. --- apps/documenteditor/main/app/view/TableSettings.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/apps/documenteditor/main/app/view/TableSettings.js b/apps/documenteditor/main/app/view/TableSettings.js index ee04179a0..001ac34f0 100644 --- a/apps/documenteditor/main/app/view/TableSettings.js +++ b/apps/documenteditor/main/app/view/TableSettings.js @@ -141,7 +141,7 @@ define([ onCheckRepeatRowChange: function(field, newValue, oldValue, eOpts) { if (this.api) { var properties = new Asc.CTableProp(); - properties.put_RowsInHeader((field.getValue()=='checked') ? 1 : 0 ); + properties.put_RowsInHeader(field.getValue()=='checked'); this.api.tblApply(properties); } this.fireEvent('editcomplete', this); @@ -562,10 +562,8 @@ define([ value = props.get_RowsInHeader(); if ( this._state.RepeatRow!==value ) { - if ( value !== null ) - this.chRepeatRow.setValue((value>0) ? 1 : 0, true); - else - this.chRepeatRow.setValue('indeterminate', true); + this.chRepeatRow.setValue(!!value, true); + this.chRepeatRow.setDisabled(value === null); this._state.RepeatRow=value; } } From b142294a4acd46ac45cd685f628f725d217ff18d Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 6 Feb 2018 16:29:11 +0300 Subject: [PATCH 15/18] [SSE] Update select pivot icon. --- .../resources/img/controls/toolbarbig.png | Bin 13583 -> 9225 bytes .../resources/img/controls/toolbarbig@2x.png | Bin 30487 -> 18856 bytes apps/common/main/resources/less/toolbar.less | 1 + .../main/app/view/PivotTable.js | 2 +- 4 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/common/main/resources/img/controls/toolbarbig.png b/apps/common/main/resources/img/controls/toolbarbig.png index b9f731ba9b01170d28d411bedb747794566d49a5..f589fa1c33ed37f86a0d94c3f488c140f76adc74 100644 GIT binary patch literal 9225 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 literal 13583 zcmZ9z1z42N7d8wcDJ9(q2uOFAih|UF(kar-($WYbA_595y-0WG($Z2(FSW$djnpDi z--EyR`@h%qUR=OD&&51at%#7#KtkgK?ELsrnmfD5|Rqj0!25Ac1Dwn#Vh!H?)&9hH}W7t-)fO$ zD2)~;Xm6;+FiMX1%PVxv4Y=@qQ#vE(vWi=VAX}BYbI-TfHtxOs?^CZ9HC^s(zUb@H{42D*H4Y|6ql#ad3$5 zoDuXJSL&TN6`w38pTX-OxOPkT^cs6jO(BZ@jUoeν0+*{_c&4GFcKj|Km@4w|Yu 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 diff --git a/apps/common/main/resources/img/controls/toolbarbig@2x.png b/apps/common/main/resources/img/controls/toolbarbig@2x.png index a5cc606ce5533f6a997b2fc4f03c9b8116b3ff4f..26977df1a7446811e3a9cbbcdfaf1e2d277dec74 100644 GIT binary patch literal 18856 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 Date: Tue, 6 Feb 2018 17:03:04 +0300 Subject: [PATCH 16/18] [DE] Open advanced setting by double clicking on rulers. --- .../main/app/view/DocumentHolder.js | 133 ++++++++++++------ 1 file changed, 92 insertions(+), 41 deletions(-) diff --git a/apps/documenteditor/main/app/view/DocumentHolder.js b/apps/documenteditor/main/app/view/DocumentHolder.js index f9837617c..4166d5a2b 100644 --- a/apps/documenteditor/main/app/view/DocumentHolder.js +++ b/apps/documenteditor/main/app/view/DocumentHolder.js @@ -1521,6 +1521,7 @@ define([ this.api.asc_registerCallback('asc_onDialogAddHyperlink', onDialogAddHyperlink); this.api.asc_registerCallback('asc_doubleClickOnChart', onDoubleClickOnChart); this.api.asc_registerCallback('asc_onSpellCheckVariantsFound', _.bind(onSpellCheckVariantsFound, this)); + this.api.asc_registerCallback('asc_onRulerDblClick', _.bind(this.onRulerDblClick, this)); } this.api.asc_registerCallback('asc_onCoAuthoringDisconnect', _.bind(onCoAuthoringDisconnect, this)); Common.NotificationCenter.on('api:disconnect', _.bind(onCoAuthoringDisconnect, this)); @@ -1633,6 +1634,7 @@ define([ if (win) { win.show(); + return win; } }, @@ -1675,6 +1677,93 @@ define([ } }, + advancedTableClick: function(item, e, eOpt){ + var win, me = this; + if (me.api){ + var selectedElements = me.api.getSelectedElements(); + + if (selectedElements && _.isArray(selectedElements)){ + for (var i = selectedElements.length - 1; i >= 0; i--) { + var elType, elValue; + + elType = selectedElements[i].get_ObjectType(); + elValue = selectedElements[i].get_ObjectValue(); + + if (Asc.c_oAscTypeSelectElement.Table == elType) { + win = new DE.Views.TableSettingsAdvanced({ + tableStylerRows : (elValue.get_CellBorders().get_InsideH()===null && elValue.get_CellSelect()==true) ? 1 : 2, + tableStylerColumns : (elValue.get_CellBorders().get_InsideV()===null && elValue.get_CellSelect()==true) ? 1 : 2, + tableProps : elValue, + borderProps : me.borderAdvancedProps, + sectionProps : me.api.asc_GetSectionProps(), + handler : function(result, value) { + if (result == 'ok') { + if (me.api) { + me.borderAdvancedProps = value.borderProps; + me.api.tblApply(value.tableProps); + } + } + me.fireEvent('editcomplete', me); + } + }); + break; + } + } + } + } + + if (win) { + win.show(); + return win; + } + }, + + onRulerDblClick: function(type) { + var win, me = this; + if (type == 'tables') { + win = this.advancedTableClick(); + if (win) + win.setActiveCategory(4); + } else if (type == 'indents' || type == 'tabs') { + win = this.advancedParagraphClick({isChart: false}); + if (win) + win.setActiveCategory(type == 'indents' ? 0 : 3); + } else if (type == 'margins') { + win = new DE.Views.PageMarginsDialog({ + handler: function(dlg, result) { + if (result == 'ok') { + var props = dlg.getSettings(); + var mnu = DE.getController('Toolbar').toolbar.btnPageMargins.menu.items[0]; + mnu.setVisible(true); + mnu.setChecked(true); + mnu.options.value = mnu.value = [props.get_TopMargin(), props.get_LeftMargin(), props.get_BottomMargin(), props.get_RightMargin()]; + $(mnu.el).html(mnu.template({id: Common.UI.getId(), caption : mnu.caption, options : mnu.options})); + Common.localStorage.setItem("de-pgmargins-top", props.get_TopMargin()); + Common.localStorage.setItem("de-pgmargins-left", props.get_LeftMargin()); + Common.localStorage.setItem("de-pgmargins-bottom", props.get_BottomMargin()); + Common.localStorage.setItem("de-pgmargins-right", props.get_RightMargin()); + + me.api.asc_SetSectionProps(props); + me.fireEvent('editcomplete', me); + } + } + }); + win.show(); + win.setSettings(me.api.asc_GetSectionProps()); + } else if (type == 'columns') { + win = new DE.Views.CustomColumnsDialog({ + handler: function(dlg, result) { + if (result == 'ok') { + me.api.asc_SetColumnsProps(dlg.getSettings()); + me.fireEvent('editcomplete', me); + } + } + }); + win.show(); + win.setSettings(me.api.asc_GetColumnsProps()); + } + }, + editHyperlink: function(item, e, eOpt){ var win, me = this; if (me.api){ @@ -1787,14 +1876,14 @@ define([ me.api.asc_SetContentControlProperties(value, props.get_InternalId()); } - Common.NotificationCenter.trigger('edit:complete', me.toolbar); + me.fireEvent('editcomplete', me); } })).show(); } else if (item.value == 'remove') { this.api.asc_RemoveContentControlWrapper(props.get_InternalId()); } } - Common.NotificationCenter.trigger('edit:complete', this.toolbar); + me.fireEvent('editcomplete', me); }, createDelayedElementsViewer: function() { @@ -2373,45 +2462,7 @@ define([ var menuTableAdvanced = new Common.UI.MenuItem({ caption : me.advancedTableText - }).on('click', function(item, e, eOpt){ - var win; - if (me.api){ - var selectedElements = me.api.getSelectedElements(); - - if (selectedElements && _.isArray(selectedElements)){ - for (var i = selectedElements.length - 1; i >= 0; i--) { - var elType, elValue; - - elType = selectedElements[i].get_ObjectType(); - elValue = selectedElements[i].get_ObjectValue(); - - if (Asc.c_oAscTypeSelectElement.Table == elType) { - win = new DE.Views.TableSettingsAdvanced({ - tableStylerRows : (elValue.get_CellBorders().get_InsideH()===null && elValue.get_CellSelect()==true) ? 1 : 2, - tableStylerColumns : (elValue.get_CellBorders().get_InsideV()===null && elValue.get_CellSelect()==true) ? 1 : 2, - tableProps : elValue, - borderProps : me.borderAdvancedProps, - sectionProps : me.api.asc_GetSectionProps(), - handler : function(result, value) { - if (result == 'ok') { - if (me.api) { - me.borderAdvancedProps = value.borderProps; - me.api.tblApply(value.tableProps); - } - } - me.fireEvent('editcomplete', me); - } - }); - break; - } - } - } - } - - if (win) { - win.show(); - } - }); + }).on('click', _.bind(me.advancedTableClick, me)); var menuParagraphAdvancedInTable = new Common.UI.MenuItem({ caption : me.advancedParagraphText From 8f3638ee14931270fc336fa6f22548a867b93621 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Wed, 7 Feb 2018 11:05:58 +0300 Subject: [PATCH 17/18] [PE] Fix Bug 36833. --- apps/presentationeditor/main/app/view/LeftMenu.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/apps/presentationeditor/main/app/view/LeftMenu.js b/apps/presentationeditor/main/app/view/LeftMenu.js index 5bd9deb5c..d72f0912a 100644 --- a/apps/presentationeditor/main/app/view/LeftMenu.js +++ b/apps/presentationeditor/main/app/view/LeftMenu.js @@ -302,12 +302,10 @@ define([ }, disableMenu: function(menu, disable) { - this.btnSearch.setDisabled(disable); this.btnThumbs.setDisabled(disable); this.btnAbout.setDisabled(disable); this.btnSupport.setDisabled(disable); /** coauthoring begin **/ - this.btnComments.setDisabled(disable); this.btnChat.setDisabled(disable); /** coauthoring end **/ this.btnPlugins.setDisabled(disable); From 159b26aac5e8837e66b22d6e425f42ece30d56ff Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Wed, 7 Feb 2018 11:11:58 +0300 Subject: [PATCH 18/18] fix bug 36857 --- apps/common/main/lib/view/Header.js | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/apps/common/main/lib/view/Header.js b/apps/common/main/lib/view/Header.js index 792c70ff7..e132d35f4 100644 --- a/apps/common/main/lib/view/Header.js +++ b/apps/common/main/lib/view/Header.js @@ -208,7 +208,8 @@ define([ appConfig = mode; var me = this; - me.btnGoBack.updateHint(me.textBack); + if ( !me.branding.goback ) + me.btnGoBack.updateHint(me.textBack); me.btnGoBack.on('click', function (e) { Common.NotificationCenter.trigger('goback', true); }); @@ -475,11 +476,17 @@ define([ this.branding = value; - if (value && value.logo && value.logo.image) { - element = $('#header-logo'); - if ( element ) { - element.html(''); - element.css({'background-image': 'none', width: 'auto'}); + if ( value ) { + if ( value.logo && value.logo.image ) { + element = $('#header-logo'); + if (element) { + element.html(''); + element.css({'background-image': 'none', width: 'auto'}); + } + } + + if ( !!value.goback ) { + this.btnGoBack.updateHint(value.goback.text); } } },