From 6489e7b2d33f1ec96fcd2c48472089c269413720 Mon Sep 17 00:00:00 2001 From: nekurill Date: Thu, 19 Jul 2018 12:13:17 +0300 Subject: [PATCH 01/11] Change text on the doc-formats icons --- .../main/resources/img/doc-formats/csv.svg | 59 ++++++++++++++++++- .../main/resources/img/doc-formats/docx.svg | 34 ++++++++++- .../main/resources/img/doc-formats/epub.svg | 36 ++++++++++- .../main/resources/img/doc-formats/html.svg | 36 ++++++++++- .../main/resources/img/doc-formats/odp.svg | 34 ++++++++++- .../main/resources/img/doc-formats/ods.svg | 34 ++++++++++- .../main/resources/img/doc-formats/odt.svg | 34 ++++++++++- .../main/resources/img/doc-formats/pdf.svg | 33 ++++++++++- .../main/resources/img/doc-formats/pdfa.svg | 28 ++++----- .../main/resources/img/doc-formats/pptx.svg | 38 +++++++++++- .../main/resources/img/doc-formats/rtf.svg | 42 ++++++++++++- .../main/resources/img/doc-formats/txt.svg | 41 ++++++++++++- .../main/resources/img/doc-formats/xlsx.svg | 34 ++++++++++- 13 files changed, 457 insertions(+), 26 deletions(-) diff --git a/apps/common/main/resources/img/doc-formats/csv.svg b/apps/common/main/resources/img/doc-formats/csv.svg index 028d64748..66899742f 100644 --- a/apps/common/main/resources/img/doc-formats/csv.svg +++ b/apps/common/main/resources/img/doc-formats/csv.svg @@ -1 +1,58 @@ -CSV \ No newline at end of file + + + + + csv + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/common/main/resources/img/doc-formats/docx.svg b/apps/common/main/resources/img/doc-formats/docx.svg index 0dd73dd24..6e0814583 100644 --- a/apps/common/main/resources/img/doc-formats/docx.svg +++ b/apps/common/main/resources/img/doc-formats/docx.svg @@ -1 +1,33 @@ -DOCX \ No newline at end of file + + + + + docx + + + + + + + + + + + + diff --git a/apps/common/main/resources/img/doc-formats/epub.svg b/apps/common/main/resources/img/doc-formats/epub.svg index 5a1e5fa2e..562f3c21b 100644 --- a/apps/common/main/resources/img/doc-formats/epub.svg +++ b/apps/common/main/resources/img/doc-formats/epub.svg @@ -1 +1,35 @@ -EPUB \ No newline at end of file + + + + + epub + + + + + + + + + + + + + + diff --git a/apps/common/main/resources/img/doc-formats/html.svg b/apps/common/main/resources/img/doc-formats/html.svg index baff21feb..c6aae404d 100644 --- a/apps/common/main/resources/img/doc-formats/html.svg +++ b/apps/common/main/resources/img/doc-formats/html.svg @@ -1 +1,35 @@ -HTML \ No newline at end of file + + + + + html + + + + + + + + + + + + + + diff --git a/apps/common/main/resources/img/doc-formats/odp.svg b/apps/common/main/resources/img/doc-formats/odp.svg index 03c009089..78a1f3ee4 100644 --- a/apps/common/main/resources/img/doc-formats/odp.svg +++ b/apps/common/main/resources/img/doc-formats/odp.svg @@ -1 +1,33 @@ -ODP \ No newline at end of file + + + + + odp + + + + + + + + + + + + diff --git a/apps/common/main/resources/img/doc-formats/ods.svg b/apps/common/main/resources/img/doc-formats/ods.svg index f22a21537..1f0dbc620 100644 --- a/apps/common/main/resources/img/doc-formats/ods.svg +++ b/apps/common/main/resources/img/doc-formats/ods.svg @@ -1 +1,33 @@ -ODS \ No newline at end of file + + + + + ods + + + + + + + + + + + + diff --git a/apps/common/main/resources/img/doc-formats/odt.svg b/apps/common/main/resources/img/doc-formats/odt.svg index 4495dfebd..c69c9670b 100644 --- a/apps/common/main/resources/img/doc-formats/odt.svg +++ b/apps/common/main/resources/img/doc-formats/odt.svg @@ -1 +1,33 @@ -ODT \ No newline at end of file + + + + + odt + + + + + + + + + + + + diff --git a/apps/common/main/resources/img/doc-formats/pdf.svg b/apps/common/main/resources/img/doc-formats/pdf.svg index b2d3e9ae5..f28cae773 100644 --- a/apps/common/main/resources/img/doc-formats/pdf.svg +++ b/apps/common/main/resources/img/doc-formats/pdf.svg @@ -1 +1,32 @@ -PDF \ No newline at end of file + + + + + pdf + + + + + + + + + + + diff --git a/apps/common/main/resources/img/doc-formats/pdfa.svg b/apps/common/main/resources/img/doc-formats/pdfa.svg index 5690c604c..8c8d17452 100644 --- a/apps/common/main/resources/img/doc-formats/pdfa.svg +++ b/apps/common/main/resources/img/doc-formats/pdfa.svg @@ -1,4 +1,4 @@ - + - - - - + pdfa + + + - - - - - + + + + + - + - - + + - + diff --git a/apps/common/main/resources/img/doc-formats/pptx.svg b/apps/common/main/resources/img/doc-formats/pptx.svg index 15f4f6f77..72e1d05ec 100644 --- a/apps/common/main/resources/img/doc-formats/pptx.svg +++ b/apps/common/main/resources/img/doc-formats/pptx.svg @@ -1 +1,37 @@ -PPTX \ No newline at end of file + + + + + pptx + + + + + + + + + + + + + + + + diff --git a/apps/common/main/resources/img/doc-formats/rtf.svg b/apps/common/main/resources/img/doc-formats/rtf.svg index 2d7afb66a..f89f74108 100644 --- a/apps/common/main/resources/img/doc-formats/rtf.svg +++ b/apps/common/main/resources/img/doc-formats/rtf.svg @@ -1 +1,41 @@ -RTF \ No newline at end of file + + + + + rtf + + + + + + + + + + + + + + + + + + + + diff --git a/apps/common/main/resources/img/doc-formats/txt.svg b/apps/common/main/resources/img/doc-formats/txt.svg index 616c8a96d..a4dca99e4 100644 --- a/apps/common/main/resources/img/doc-formats/txt.svg +++ b/apps/common/main/resources/img/doc-formats/txt.svg @@ -1 +1,40 @@ -TXT \ No newline at end of file + + + + + txt + + + + + + + + + + + + + + + + + + + diff --git a/apps/common/main/resources/img/doc-formats/xlsx.svg b/apps/common/main/resources/img/doc-formats/xlsx.svg index 45558c4eb..a0944b5e4 100644 --- a/apps/common/main/resources/img/doc-formats/xlsx.svg +++ b/apps/common/main/resources/img/doc-formats/xlsx.svg @@ -1 +1,33 @@ -XLSX \ No newline at end of file + + + + + xlsx + + + + + + + + + + + + From 0bf55a17fd17c29c6b576a4e90b4458c7b0f4f63 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 3 Aug 2018 14:00:54 +0300 Subject: [PATCH 02/11] [DE] Bug 19378 --- .../template/ImageSettingsAdvanced.template | 26 +++++++++ .../main/app/view/ImageSettingsAdvanced.js | 55 ++++++++++++++++--- apps/documenteditor/main/locale/en.json | 5 ++ 3 files changed, 79 insertions(+), 7 deletions(-) diff --git a/apps/documenteditor/main/app/template/ImageSettingsAdvanced.template b/apps/documenteditor/main/app/template/ImageSettingsAdvanced.template index a10802ec9..3b1df3d24 100644 --- a/apps/documenteditor/main/app/template/ImageSettingsAdvanced.template +++ b/apps/documenteditor/main/app/template/ImageSettingsAdvanced.template @@ -90,6 +90,32 @@ +
+
+
+ +
+
+
+
+
+ + + + + + + + +
+ + +
+
+
+
+
+
diff --git a/apps/documenteditor/main/app/view/ImageSettingsAdvanced.js b/apps/documenteditor/main/app/view/ImageSettingsAdvanced.js index 434248ee7..853d37920 100644 --- a/apps/documenteditor/main/app/view/ImageSettingsAdvanced.js +++ b/apps/documenteditor/main/app/view/ImageSettingsAdvanced.js @@ -64,6 +64,7 @@ define([ 'text!documenteditor/main/app/template/ImageSettingsAdvanced.templat items: [ {panelId: 'id-adv-image-width', panelCaption: this.textSize}, {panelId: 'id-adv-shape-size', panelCaption: this.textSize}, + {panelId: 'id-adv-image-rotate', panelCaption: this.textRotation}, {panelId: 'id-adv-image-wrap', panelCaption: this.textBtnWrap}, {panelId: 'id-adv-image-position', panelCaption: this.textPosition}, {panelId: 'id-adv-image-shape', panelCaption: this.textWeightArrows}, @@ -370,6 +371,27 @@ define([ 'text!documenteditor/main/app/template/ImageSettingsAdvanced.templat this.cmbHeightPc.setValue(this._state.ShapeHeightPcFrom); this.cmbHeightPc.on('selected', _.bind(this.onCmbHeightPcSelect, this)); + // Rotation + this.spnAngle = new Common.UI.MetricSpinner({ + el: $('#image-advanced-spin-angle'), + step: 1, + width: 80, + defaultUnit : "°", + value: '0 °', + maxValue: 3600, + minValue: -3600 + }); + + this.chFlipHor = new Common.UI.CheckBox({ + el: $('#image-advanced-checkbox-hor'), + labelText: this.textHorizontally + }); + + this.chFlipVert = new Common.UI.CheckBox({ + el: $('#image-advanced-checkbox-vert'), + labelText: this.textVertically + }); + // Wrapping this.btnWrapInline = new Common.UI.Button({ @@ -1268,9 +1290,10 @@ define([ 'text!documenteditor/main/app/template/ImageSettingsAdvanced.templat this.btnOriginalSize.setVisible(!(shapeprops || chartprops)); this.btnOriginalSize.setDisabled(props.get_ImageUrl()===null || props.get_ImageUrl()===undefined); - this.btnsCategory[4].setVisible(shapeprops!==null && !shapeprops.get_FromChart()); // Shapes - this.btnsCategory[5].setVisible(shapeprops!==null && !shapeprops.get_FromChart()); // Margins - this.btnsCategory[2].setDisabled(props.get_FromGroup()); // Wrapping + this.btnsCategory[5].setVisible(shapeprops!==null && !shapeprops.get_FromChart()); // Shapes + this.btnsCategory[6].setVisible(shapeprops!==null && !shapeprops.get_FromChart()); // Margins + this.btnsCategory[3].setDisabled(props.get_FromGroup()); // Wrapping + this.btnsCategory[2].setVisible(!chartprops); // Rotation if (shapeprops) { this._objectType = Asc.c_oAscTypeSelectElement.Shape; @@ -1333,8 +1356,8 @@ define([ 'text!documenteditor/main/app/template/ImageSettingsAdvanced.templat this.spnMarginBottom.setValue((null !== val && undefined !== val) ? Common.Utils.Metric.fnRecalcFromMM(val) : '', true); } - this.btnsCategory[5].setDisabled(null === margins); // Margins - this.btnsCategory[4].setDisabled(shapeprops.get_stroke().get_type() == Asc.c_oAscStrokeType.STROKE_NONE); // Weights & Arrows + this.btnsCategory[6].setDisabled(null === margins); // Margins + this.btnsCategory[5].setDisabled(shapeprops.get_stroke().get_type() == Asc.c_oAscStrokeType.STROKE_NONE); // Weights & Arrows } else { value = props.asc_getLockAspect(); @@ -1355,6 +1378,13 @@ define([ 'text!documenteditor/main/app/template/ImageSettingsAdvanced.templat this.spnHeight.setValue((value!==undefined) ? Common.Utils.Metric.fnRecalcFromMM(value).toFixed(2) : '', true); } + if (!chartprops) { + value = props.asc_getRot(); + this.spnAngle.setValue((value==undefined || value===null) ? '' : Math.floor(value*180/3.14159265358979+0.5), true); + this.chFlipHor.setValue(props.asc_getFlipH()); + this.chFlipVert.setValue(props.asc_getFlipV()); + } + value = props.asc_getTitle(); this.inputAltTitle.setValue(value ? value : ''); @@ -1397,6 +1427,12 @@ define([ 'text!documenteditor/main/app/template/ImageSettingsAdvanced.templat } } + if (this._objectType != Asc.c_oAscTypeSelectElement.Chart) { + properties.asc_putRot(this.spnAngle.getNumberValue() * 3.14159265358979 / 180); + properties.asc_putFlipH(this.chFlipHor.getValue()=='checked'); + properties.asc_putFlipV(this.chFlipVert.getValue()=='checked'); + } + if (this.isAltTitleChanged) properties.asc_putTitle(this.inputAltTitle.getValue()); @@ -1515,7 +1551,7 @@ define([ 'text!documenteditor/main/app/template/ImageSettingsAdvanced.templat this.spnTop.setDisabled(disabledTB); this.spnBottom.setDisabled(disabledTB); - this.btnsCategory[3].setDisabled(btnId == Asc.c_oAscWrapStyle2.Inline); + this.btnsCategory[4].setDisabled(btnId == Asc.c_oAscWrapStyle2.Inline); }, onHAlignSelect: function(combo, record){ @@ -2033,7 +2069,12 @@ define([ 'text!documenteditor/main/app/template/ImageSettingsAdvanced.templat 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.', - textWeightArrows: 'Weights & Arrows' + textWeightArrows: 'Weights & Arrows', + textRotation: 'Rotation', + textAngle: 'Angle', + textFlipped: 'Flipped', + textHorizontally: 'Horizontally', + textVertically: 'Vertically' }, DE.Views.ImageSettingsAdvanced || {})); }); \ No newline at end of file diff --git a/apps/documenteditor/main/locale/en.json b/apps/documenteditor/main/locale/en.json index 8b6242550..57b7fa99b 100644 --- a/apps/documenteditor/main/locale/en.json +++ b/apps/documenteditor/main/locale/en.json @@ -1300,6 +1300,11 @@ "DE.Views.ImageSettingsAdvanced.textWrapThroughTooltip": "Through", "DE.Views.ImageSettingsAdvanced.textWrapTightTooltip": "Tight", "DE.Views.ImageSettingsAdvanced.textWrapTopbottomTooltip": "Top and bottom", + "DE.Views.ImageSettingsAdvanced.textRotation": "Rotation", + "DE.Views.ImageSettingsAdvanced.textAngle": "Angle", + "DE.Views.ImageSettingsAdvanced.textFlipped": "Flipped", + "DE.Views.ImageSettingsAdvanced.textHorizontally": "Horizontally", + "DE.Views.ImageSettingsAdvanced.textVertically": "Vertically", "DE.Views.LeftMenu.tipAbout": "About", "DE.Views.LeftMenu.tipChat": "Chat", "DE.Views.LeftMenu.tipComments": "Comments", From 18332d6059b4584b219bad6ddb39e039a3792f87 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 10 Aug 2018 09:16:15 +0300 Subject: [PATCH 03/11] [DE] Add rotation to image and shape settings in the right panel --- .../main/app/template/ImageSettings.template | 26 ++++++++ .../main/app/template/ShapeSettings.template | 32 +++++++++ .../main/app/view/ImageSettings.js | 66 ++++++++++++++++++- .../main/app/view/ShapeSettings.js | 66 ++++++++++++++++++- apps/documenteditor/main/locale/en.json | 15 ++++- .../main/resources/less/toolbar.less | 5 ++ 6 files changed, 207 insertions(+), 3 deletions(-) diff --git a/apps/documenteditor/main/app/template/ImageSettings.template b/apps/documenteditor/main/app/template/ImageSettings.template index 21298ecca..31d181a60 100644 --- a/apps/documenteditor/main/app/template/ImageSettings.template +++ b/apps/documenteditor/main/app/template/ImageSettings.template @@ -27,6 +27,32 @@
+ + + + + + + + +
+
+
+
+ + + +
+
+
+
+ + + + +
+ + diff --git a/apps/documenteditor/main/app/template/ShapeSettings.template b/apps/documenteditor/main/app/template/ShapeSettings.template index 4a4ff30d1..e6169facb 100644 --- a/apps/documenteditor/main/app/template/ShapeSettings.template +++ b/apps/documenteditor/main/app/template/ShapeSettings.template @@ -121,6 +121,38 @@
+ + + + + + + + + + + + +
+ +
+
+
+
+
+ +
+
+
+
+
+ + + + +
+ + diff --git a/apps/documenteditor/main/app/view/ImageSettings.js b/apps/documenteditor/main/app/view/ImageSettings.js index 392be905e..76766f132 100644 --- a/apps/documenteditor/main/app/view/ImageSettings.js +++ b/apps/documenteditor/main/app/view/ImageSettings.js @@ -186,6 +186,46 @@ define([ }, this)); this.btnFitMargins.on('click', _.bind(this.setFitMargins, this)); + this.btnRotate270 = new Common.UI.Button({ + cls: 'btn-toolbar', + iconCls: 'rotate-270', + value: 0, + hint: this.textHint270 + }); + this.btnRotate270.render( $('#image-button-270', me.$el)); + this.btnRotate270.on('click', _.bind(this.onBtnRotateClick, this)); + this.lockedControls.push(this.btnRotate270); + + this.btnRotate90 = new Common.UI.Button({ + cls: 'btn-toolbar', + iconCls: 'rotate-90', + value: 1, + hint: this.textHint90 + }); + this.btnRotate90.render( $('#image-button-90', me.$el)); + this.btnRotate90.on('click', _.bind(this.onBtnRotateClick, this)); + this.lockedControls.push(this.btnRotate90); + + this.btnFlipV = new Common.UI.Button({ + cls: 'btn-toolbar', + iconCls: 'flip-vert', + value: 0, + hint: this.textHintFlipV + }); + this.btnFlipV.render( $('#image-button-flipv', me.$el)); + this.btnFlipV.on('click', _.bind(this.onBtnFlipClick, this)); + this.lockedControls.push(this.btnFlipV); + + this.btnFlipH = new Common.UI.Button({ + cls: 'btn-toolbar', + iconCls: 'flip-hor', + value: 1, + hint: this.textHintFlipH + }); + this.btnFlipH.render( $('#image-button-fliph', me.$el)); + this.btnFlipH.on('click', _.bind(this.onBtnFlipClick, this)); + this.lockedControls.push(this.btnFlipH); + this.linkAdvanced = $('#image-advanced-link'); this.lblReplace = $('#image-lbl-replace'); $(this.el).on('click', '#image-advanced-link', _.bind(this.openAdvancedSettings, this)); @@ -384,6 +424,23 @@ define([ })).show(); }, + onBtnRotateClick: function(btn) { + var properties = new Asc.asc_CImgProperty(); + properties.asc_putRot((btn.options.value==1 ? 90 : 270) * 3.14159265358979 / 180); + this.api.ImgApply(properties); + this.fireEvent('editcomplete', this); + }, + + onBtnFlipClick: function(btn) { + var properties = new Asc.asc_CImgProperty(); + if (btn.options.value==1) + properties.asc_putFlipH(true); + else + properties.asc_putFlipV(true); + this.api.ImgApply(properties); + this.fireEvent('editcomplete', this); + }, + openAdvancedSettings: function(e) { if (this.linkAdvanced.hasClass('disabled')) return; @@ -458,7 +515,14 @@ define([ txtInFront: 'In front', textEditObject: 'Edit Object', textEdit: 'Edit', - textFitMargins: 'Fit to Margin' + textFitMargins: 'Fit to Margin', + textRotation: 'Rotation', + textRotate90: 'Rotate 90°', + textFlip: 'Flip', + textHint270: 'Rotate Left 90°', + textHint90: 'Rotate Right 90°', + textHintFlipV: 'Flip Vertical', + textHintFlipH: 'Flip Horizontal' }, DE.Views.ImageSettings || {})); }); \ No newline at end of file diff --git a/apps/documenteditor/main/app/view/ShapeSettings.js b/apps/documenteditor/main/app/view/ShapeSettings.js index 9d303266c..f967602b9 100644 --- a/apps/documenteditor/main/app/view/ShapeSettings.js +++ b/apps/documenteditor/main/app/view/ShapeSettings.js @@ -1366,6 +1366,46 @@ define([ this.cmbBorderType.setValue(this.BorderType); this.lockedControls.push(this.cmbBorderType); + this.btnRotate270 = new Common.UI.Button({ + cls: 'btn-toolbar', + iconCls: 'rotate-270', + value: 0, + hint: this.textHint270 + }); + this.btnRotate270.render( $('#shape-button-270', me.$el)); + this.btnRotate270.on('click', _.bind(this.onBtnRotateClick, this)); + this.lockedControls.push(this.btnRotate270); + + this.btnRotate90 = new Common.UI.Button({ + cls: 'btn-toolbar', + iconCls: 'rotate-90', + value: 1, + hint: this.textHint90 + }); + this.btnRotate90.render( $('#shape-button-90', me.$el)); + this.btnRotate90.on('click', _.bind(this.onBtnRotateClick, this)); + this.lockedControls.push(this.btnRotate90); + + this.btnFlipV = new Common.UI.Button({ + cls: 'btn-toolbar', + iconCls: 'flip-vert', + value: 0, + hint: this.textHintFlipV + }); + this.btnFlipV.render( $('#shape-button-flipv', me.$el)); + this.btnFlipV.on('click', _.bind(this.onBtnFlipClick, this)); + this.lockedControls.push(this.btnFlipV); + + this.btnFlipH = new Common.UI.Button({ + cls: 'btn-toolbar', + iconCls: 'flip-hor', + value: 1, + hint: this.textHintFlipH + }); + this.btnFlipH.render( $('#shape-button-fliph', me.$el)); + this.btnFlipH.on('click', _.bind(this.onBtnFlipClick, this)); + this.lockedControls.push(this.btnFlipH); + var viewData = [ { offsetx: 0, data: Asc.c_oAscWrapStyle2.Inline, tip: this.txtInline, selected: true }, { offsetx: 50, data: Asc.c_oAscWrapStyle2.Square, tip: this.txtSquare }, @@ -1523,6 +1563,23 @@ define([ this.fireEvent('editcomplete', this); }, + onBtnRotateClick: function(btn) { + var properties = new Asc.asc_CImgProperty(); + properties.asc_putRot((btn.options.value==1 ? 90 : 270) * 3.14159265358979 / 180); + this.api.ImgApply(properties); + this.fireEvent('editcomplete', this); + }, + + onBtnFlipClick: function(btn) { + var properties = new Asc.asc_CImgProperty(); + if (btn.options.value==1) + properties.asc_putFlipH(true); + else + properties.asc_putFlipV(true); + this.api.ImgApply(properties); + this.fireEvent('editcomplete', this); + }, + fillAutoShapes: function() { var me = this, shapesStore = this.application.getCollection('ShapeGroups'); @@ -1779,6 +1836,13 @@ define([ txtBehind: 'Behind', txtInFront: 'In front', textBorderSizeErr: 'The entered value is incorrect.
Please enter a value between 0 pt and 1584 pt.', - strType: 'Type' + strType: 'Type', + textRotation: 'Rotation', + textRotate90: 'Rotate 90°', + textFlip: 'Flip', + textHint270: 'Rotate Left 90°', + textHint90: 'Rotate Right 90°', + textHintFlipV: 'Flip Vertical', + textHintFlipH: 'Flip Horizontal' }, DE.Views.ShapeSettings || {})); }); diff --git a/apps/documenteditor/main/locale/en.json b/apps/documenteditor/main/locale/en.json index 57b7fa99b..39840748b 100644 --- a/apps/documenteditor/main/locale/en.json +++ b/apps/documenteditor/main/locale/en.json @@ -1231,6 +1231,13 @@ "DE.Views.ImageSettings.txtThrough": "Through", "DE.Views.ImageSettings.txtTight": "Tight", "DE.Views.ImageSettings.txtTopAndBottom": "Top and bottom", + "DE.Views.ImageSettings.textRotation": "Rotation", + "DE.Views.ImageSettings.textRotate90": "Rotate 90°", + "DE.Views.ImageSettings.textFlip": "Flip", + "DE.Views.ImageSettings.textHint270": "Rotate Left 90°", + "DE.Views.ImageSettings.textHint90": "Rotate Right 90°", + "DE.Views.ImageSettings.textHintFlipV": "Flip Vertical", + "DE.Views.ImageSettings.textHintFlipH": "Flip Horizontal", "DE.Views.ImageSettingsAdvanced.cancelButtonText": "Cancel", "DE.Views.ImageSettingsAdvanced.okButtonText": "OK", "DE.Views.ImageSettingsAdvanced.strMargins": "Text Padding", @@ -1429,7 +1436,6 @@ "DE.Views.PageSizeDialog.cancelButtonText": "Cancel", "DE.Views.PageSizeDialog.okButtonText": "Ok", "DE.Views.PageSizeDialog.textHeight": "Height", - "DE.Views.PageSizeDialog.textPreset": "Preset", "DE.Views.PageSizeDialog.textTitle": "Page Size", "DE.Views.PageSizeDialog.textWidth": "Width", "DE.Views.PageSizeDialog.textPreset": "Preset", @@ -1562,6 +1568,13 @@ "DE.Views.ShapeSettings.txtTight": "Tight", "DE.Views.ShapeSettings.txtTopAndBottom": "Top and bottom", "DE.Views.ShapeSettings.txtWood": "Wood", + "DE.Views.ShapeSettings.textRotation": "Rotation", + "DE.Views.ShapeSettings.textRotate90": "Rotate 90°", + "DE.Views.ShapeSettings.textFlip": "Flip", + "DE.Views.ShapeSettings.textHint270": "Rotate Left 90°", + "DE.Views.ShapeSettings.textHint90": "Rotate Right 90°", + "DE.Views.ShapeSettings.textHintFlipV": "Flip Vertical", + "DE.Views.ShapeSettings.textHintFlipH": "Flip Horizontal", "DE.Views.SignatureSettings.notcriticalErrorTitle": "Warning", "DE.Views.SignatureSettings.strDelete": "Remove Signature", "DE.Views.SignatureSettings.strDetails": "Signature Details", diff --git a/apps/documenteditor/main/resources/less/toolbar.less b/apps/documenteditor/main/resources/less/toolbar.less index 865c29994..e79f80b42 100644 --- a/apps/documenteditor/main/resources/less/toolbar.less +++ b/apps/documenteditor/main/resources/less/toolbar.less @@ -341,6 +341,11 @@ //.button-normal-icon(btn-dropcap, 50, @toolbar-icon-size); .button-normal-icon(btn-ic-doclang, 67, @toolbar-icon-size); +.button-normal-icon(rotate-270, 67, @toolbar-icon-size); +.button-normal-icon(rotate-90, 67, @toolbar-icon-size); +.button-normal-icon(flip-vert, 67, @toolbar-icon-size); +.button-normal-icon(flip-hor, 67, @toolbar-icon-size); + @menu-icon-size: 22px; .menu-icon-normal(mnu-wrap-inline, 0, @menu-icon-size); .menu-icon-normal(mnu-wrap-square, 1, @menu-icon-size); From 48fec5a6d65f8610c603f4cb0262fc6e68d73caf Mon Sep 17 00:00:00 2001 From: Evgeny Katyshev Date: Fri, 17 Aug 2018 12:31:02 +0300 Subject: [PATCH 04/11] New icons Add new flip and rotate icons to DE toolbar sprite --- .../main/resources/img/toolbar-menu.png | Bin 15885 -> 16059 bytes .../main/resources/img/toolbar-menu@2x.png | Bin 38050 -> 38781 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/documenteditor/main/resources/img/toolbar-menu.png b/apps/documenteditor/main/resources/img/toolbar-menu.png index 7d8bad438f390fcdcb8fabbc73d02c19ddac62a8..beebc12de223c7e9909ed5db671567348bbdb2bc 100644 GIT binary patch literal 16059 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

AH;Q{xR!E2~ zCA6Ryrn2C&#u#qq13AITPqt@Jx9p3JJ+z;;GFWjB54fJgQ2VE@TaUE>+9dopVP^J@ z`&I5Wel$lIq1*R8JZgV$-0B@5!nD;iPa<@Gn6sZPTcZxmI0F79#!2J`C_xzY?)xLI_15|=_r|5^?+%>bM-Ijxd1xe2Zn7~{o`0&{Q4 zw!w|Ace6#v=w3{Sxv0#N+FP1&__*TmO`-N;s7%70d~rV~QJGq1s<$2C`n5Y{C&JM* zr?ARprQ2%f(PNTN5GUyoR~=|uWjPyy};w=h&~94`av=2q+tixaWYF6d`L- zg}=P5rt&9p%6ht;F+piRRXh9WSL+6+{%o3$&8$#rjAUn;kN?7;0)9#5q=>e0~sTi0#Jo>qSJ zk@P&d-pxreNLj6Q6Q+BLl!=WfO|Q6S_JY7I%@?qPkc?v5N`W{lN(J0dQs=0R|&lZXKUSUxg zRoefGV+pxYi{|QaR?pZS!w@GvTT~eT`pvvm4SPqtX5yJWc#!4GAS30YY`Pd4krR)31ME~rV)9Ni%5>UO9V zVuHkybWL#UCsM3ydMd!%z{jw^zE@X2b$!=hsk}e=?$`HXOMQd>-SNDI7-?WyXu#2oqJ4Ruak9}xpuNT zwQ|G7TKeIngCpvL&^B_h(=UQEgmq1_Hmi*Iaz~)WNFSRh{<^ra`?OVF{$GD$f!EKk zTe{ZuPd9gNdY@X}c0xYNemIUHe>Z0ez8)0W!tN>fBR==wLVBB+Rd6s$3J zG~%dc{P#h~ z=5|(UXtmSM-q4R7HFbY<9Lbb6QW_T+0i;Cw<&sSK46)o%hf?Fr^^1zt`oC2SN{>*xNNVP%RcwQgHe`_>K0FgYQ2-_CEv{!GLIf zLC@r!vAhYFN#V;Qd!IlrpiPi#F?na@a+NzI_I72`%;hp*5cC8Uu(q z-a8Yc1J?#FU)B5;cZ9Iv{ljg`H^1)v*=JO~{XIGd_@~dAGtzpG@pf#zXlchIuSY)s z^d|A0tC}0){ihpiDdqz{1xsSMHroti)yx1%4!hO}^WGiUAGTYwT2p850gTgID;by+ zAa=b>M4{21fLK2|hg5ts=s9P4a!C?-XCilCctCDW9%1>cpPpZgiRx}N-!RS(;`0ju zq+@cXhVLG)5)Ko8;Z&h6qL*X#N#v}>xlr<7e|n1>!{$Qfph{J@R>n5i-{-mPjbMdZ zT8@d0U6^y^)K>Jjx^RpLCsaeFp^^D!fO%i6y=F>Tl7{u{#(;50c2Dd^f<{kBr(v)~ z%~)r_Oh@jFl7}KuI#&~?IpD+ClHW<){&72fxW`9e`p6)wI>Y2~C8MaqW{3z*QcbVC z+Uj)6g@>M60BS_m^)hH$=?3Udg=EI=Z~nj;j_;CF;^}p{6fa|C!7;K^Sp)Vub%|XG13cC_wbeFD0TNwPH&mo;o8`pY*N-e#rEyE zq0V~>CvZzB{f=0-;Q37E?2|`|R3X=r1AD%KqS8hSuZ28yx~h5q;p8O1>+wSMOt<=- zbRmj-oxy0VTTWn4K--d!VC}JMAs6I2l{9f{1I;;L3$v6f#2fGq-Z`GMbjGgokMCYy z4?l&--o7&bX{OweDW+=!ON^}}cOF?<&3=#A4VTuCTHYS*)4bIy=}GW?41$x^zk%em zO^9_#Gua&)N~=2eI8tu|N0zs<+lA#YbwaI*O8(roOT|iqar^_&%`MA;f(}?h1@n%c z$-K$bXovm?Il%hvUvvN?vw9o5oSusy{kSsHf-us{w;m=`6niUe8_6jyZ-=M8>%TI0 z#^Rhbu0p|jJzSshN?*C2uiA6{?%W$8kvuy-Dcb#E&k%r`(c27gDr@`{>q@MakxB0z ziHKL^=d!BQh0;atrf8};5Pe2J40IL?zMC0H6|hPev=0HeJx>CKn=ZfH?Jg?CiYx~f zYVKIIhRz5^jQ7Yz-Jj&!o%?L@a;f~)*X#Xz3zktZyXB?QtEnXmt)!f-FTyn=S=axn zgBj|#hhdAL`!yp#7QxRm?p^sN6`)$P@W_u!@-fj7$2AhDAC6?5#Q*bZAbr{_yX`-hOGd>U`tNZ1<~?Qx@sh^OO`u;MRP%szNJx|FNUAT-(b4 z=*GYG{EK$7{NZksK-PUN;$L~i^u5pd@*cu}IRBuYz^$RHK1CzPEJ%mvo__v(#Zy@a z)D$>RLOf}oBA@Mi=0eEdd--bbEH7|Qeka4Yv|#T=tyW-h%fsJ!@_e&aALE?ZBpNX0_XSG)3t~%QZsX@P= zNC~YVZ2R}8t-avs^e73faE#mnyfm?5!&y)8s ztZg;pp@YWEQ{Wb)>8@30W%ZPk7U{=6r#%NHeUo%nika>HeBn9}lvkXzMxM07PIrG) ziwcd$K>F3XZa8i`J$7zb?3SXQpRFee6-#)MI&KqET0Ei|`mkYdGYi zT9^84cZK3|^3aO2@K&OlMY`0q@LQJ)b<^D=Tza3&h5WsopNw|OSllVzdkVLX93~)Q z;N{7rQSDi{HTgoG{QL-WM^Zl&El9OVKr>$C$74WV(fwdE21!6i8Ao_`+8U81^u2e` zXA@zj?_xo61g$trQ8g^?SlTzkyvKBNTv!jiM}pJiGE#a!n>(|{pvhr zLhF73wtI0`MT=4~OyB#lA398D3jJJgr7X=xdvy1udNJ0*I6Rzr!Gy!+s`IBGO^d)+ zkrikDACcY;|9?(^(Q~h>S_{16IG%a?4pk3b$4D7D*$H*=lNm-=&pWSKn)wv!JfWoZ z4n%|%_n*$L()Ty}_Kf-y+bS>}`c~%#(_WdakyH6LK3=mrQZQ;}!!R##nweoOivQb8 z0l8fibM9hy>BQGi`sKF~Id`uxov*^Hn_{^qa7|Y?=Nu2}c2~2y9$&Z|fEZ)T3BGyn z$A&iEv=1cWj@Q+$JJe#t41OJWk2XyIvDnZ`r_d1V*|yYQ{rv(tCRnQG%hj#+Z&}xy zIkH@{vZ^;(dt)JL1;b}5H-|JrdVss9dli0!%N-t@{IY!p>|MB5^76`R!u__0%AD-M zq~^+khzq^<%Mn6_Mx@DD*Xr69-a~oi<_|CAJZ>SeHj+YSr~M(9PGmzCeEh+C3O3gW zGve#DUZ3BxZD+%xTkepZ?O1cKzlP%+u*fbj6P?zQ zRc*d!^P%Nk!4uOhs>{ISOa4zi{($($!1pb;ltWYk#43A>6&ZDzZnj<9XU=?Rq$nSc z0u<}+xSQjDh8<-aYWjbzy>(m^U*A4X2uKNnbcskvcZYz8(jwg*(hU+rqlBmkNV5iw zbR$crz$zdhU9!@>3mbd~Klgn<&;9)K`{(!1?3taJv-8?><{j5{z0d3}x1!1)y%~#O zrpW#HWqrI^UbBu^_3iMQv#&v+qF@9-cEkcZg4|9Bx*s6Y~EP^of}M{+ z(-1aUA9d&gG^}RB^kttj4h`XXR0-FP=Qqpcs-c@D5rN*}sPY3pS%(dpO`m*5zQQ#~ zikdGUMS^bzZ}a$?Tr+gjy>De42#4>AyND(HU@ZKaB6mcWHB<*_fQj_8oF`2>0Mr6U z-2VZt*&kSh)aoQ)2Z@g<(G(Yq`aBBuqI!bBBgng{C2wq_ofLKaX>OcZ?%@!jk(G4d zZ@hY~-u+ZCEuqk1cj`R<6MwL=`I7iSzBKxBE87w8&AX~%Qb28nmRXt9?@kA;)-4-? z<~wf7EcNPdj=n@=$9APRJKJjhv%?k@q*rifgXJ2_`0gM*YFVtXW`562Lk$}kec^4s z&Cw}CG%ES2r9lN47{P}er%+=t5=}-tvCx+{%si%+9>IeJ+rl~f%i*bX@)e-1>G`CF zeF)qqc2?e3JypcZ6*B!)xDgR`K@=e4uN%7g$7Y25Pt_NPH_;hwe5W@~3F~i1(|*fP z9!%n*IU2|?AFK_8YHOGYzAMHqR+xCEz0DxK*&c7#0)FSIFKEri*7eB9KtNTXshYsK zg(A?UWlTW2Ao}&c_dQyOX;`3+K*@$|lg(22m;Kqh|K56Dt9yL2k*vW2p*V998U!!P zF!O}d=6d07?=L{ge{K04f3gU#K1FE23&A5~0?nb50$@OvrwU#{+fVD>G+$!mUrjJ4 zAXP@g;@;I~=BXtREGEv_8l9Mg#CRlN@xMMMxbIe5&!q`20wH0V1PQYd@NuzCg24EF zN}xjb1ENj|GHKD|T&pB~39xBxBk+OGa!pmKi5mD{!NFD5dcEMGtGqv{fm^peML0!i z+MaOfJ*d(r9p0%W7x<%+U$LLxY!58*`K-wC3CTCe8$JFzA#^2DX`B^btxMPZ2G$1C z;72|V@;Y%h<*t!b%=@pw{x8cPS(QdX{Ho$KL`dP9K*}K#W5gLUDC1rEaZ1-0Kl#;S&N)R_9V7^wXq0%r`#( z5u-R@UKI-*`T_Q{Mx=s5#mdx$s^sk9uxCukQfQQFc}f>(0;uL9?`Vc(lhxoetEpX3 zRD(W0a*fpg5XU$hTp=cr#`Mk+0=Mrz2ub~W8r@7YaFhT*K?ctMB*7J{2roWJ*v+X= z^z`@UfzRwpn4h-f$82obVQXC#rJe8pXoSZ!L0PX_6`?lwCA+=cZ*W7M*ny$h?LF|X2w7y|s zkFLx5nwLujq51rmSK(z6Q6P5&7y(b*`)=(YQaf+{C>P6&$CRLyS?+1x{$WHgjo3<} zxG)?&Ydl&xGG!e%L{g=pi6$(1OSFm@DF5Aw?cN;Xl@9pyR(t-cd9*XGB(2TwBi+X@ zqBCe6M?7u}3DRh%9QI?|*^Wl1w@I)Oc~nCkQ@l>h4?iEO>w4Hess~swPwL_;2EFo? zXfo}eT+B&U1|F&{DXnh{kiYzW0681HjlfY4`*~kowJurgh)ykXXtq64nl#&e{h8m|G@g4@F&urUh?LkfY&qWeLse>#n?W=PLO)b2(V-mjM(g!dKxwA=)9jSa1d zqqFM=&Je&2@&+A*f5J}JNnZFz@MqYjE+u?A zRG}gIbKQdKHKdqDCx-Wg;Ed+;0sD!_83$DTwL0S!8hRUbCY4>hv4K|c7&(wj1ayz^ zc6dsP$8n5RrfUzzYrRIg!{G9YcLUN7)zDbp!Wf3h;@JWxTY(c2)L~2*AyVAs)`|0? zRr5iRl|dL|W%EyI%3o||H9|m7p%qMi5!-xlW3p3BrJ)K3csD1PA~y#C4x{1zYcWVn zO7$4!mvu-GL)A(LUf4Bg$kSwiEx&p=0Gx;T5CIs~T7uf+mJU4mcS{`}{S=pVI+lCA z`&DwN@%F=>)=w7JxO-hH;ZMBCHLh?>jYb=5_uq|aRX9??I(L5#w4MZk{b=V?=NbC6 zO&LcnMLi4=Z{cn_PNrBzG!bqM(Qd|c%u6Ck4oKxKS-jBRWfFt?fDRg)A=<3kz7SXg z_TLdR=M~brjO0yN;9_9w-QQR69C*Gp9^|ZqhE(A|i52=$qaRb4Hjj_6&fkFLP;zyD150WED`P2U>7- z`Ael?nPGkDS3sS7-uZq)A%2Pwc#|a0Us`tl(Mu)kQkYGgaMe@t!sUV{L=f+ie!UTX zXM+=S4ohpl&@73{?+&gX&^XzrSo^Ms8U0OHld<^lQ}Rd$j6p9GZ^>C?Fal3&EGnXN z1RDyGD)fVVJ+~6WKzbnCA*6mB=7fg~4wqOwqH`KJpvJm?OHsa&VsiROZ*)6SRhs;H z2}{AM@)?xNO&3|3BNu-!U*6^G8f1s12^g$CgF8T#&-N*hXU3!3 zak#)wl{NwNsz4kqr|}5-8-u{L5V4c%F*}qtL}ID z442rq8xP+QhOnIMpN%20y#Bnps&OZh9_+wK2;YnWy1QJO=8eH>Wf8%;km2jiUMib5 zs?7U*A#=W2kCV`x%8P@feSg|7>HZ?$|HDb~0C(ywAxwp7&H01eZjjn>S-&c#@PhcNB*7EsqkZ?P5J+(t|tdlS% zs-r+rGn=C06_;O>VUK+C^dRLsZMfTIaz(-f5t*isBpgPcm?slHU_1XsMpm(L6-+7oz`2bH3J zLGEHp(<5dHgdI{RTpL=B{UqWQz0RgDWg5x$ zyH3F<-a~1z9uISquqCUmoiNkjd0DShAO)L65D@6iL40HyX1ONO{OQM2&g_G(01&8` zs=dv$-^EG8%6q6mQpEv=r)0dG|8e`E)3^kjW@YeOSs2~Bf$CcqvRwCACI05L`VOZ} z)c$0f&sD2$W|Ms_@TrYTr+cL=|Bwsxc+2r0nNn?Q38hOxeI!FM4hWnO@AckZ70KNM zp?025l4@Ap$dB zhYFcl`J2r4rd~y)1i{4O(g!rZ_0!V906MnykVN_xlci@`N7tndk78_xXDv8yhRE*o zNFLDt7n$?mTGn1|4bzDa{FVzvNyh%PYTfzAR|t-@g}Hz5d&|)CZGb!_GF~~nVoBUR z)<`v}FbJnH_Z#sPjAxqna1~AN!jIgLkkV zI7)5Q2#K)$>(;o686!rF=NG!L&#)kuWts`mD&;if>~`~h4UFrzZND249!iz(Y{d%@ z7LPC9AcBOzaNEl+am+l;oCwBwLl4NrQXSnLvtq)pAsGelLK(8VBc3s$TEtxJsLYiC zD@yc@=lM+>#dY09K1=ub`37niK;XM;ek?kp7M)Ip)PZFdip^@2&n_?zC6x&so7wUq zvbseVHHHJp4?18^V7zd`?XURAN??iYf}m=bG>_aP!87(Oro%1VEvMy;BWs*d z@=-0-BIwv0u+Ch0+=3r!S;{=L#T9US1Rbkow|i>9hWL zIJFVyfH$$XKobzd^#lXRbjX#yc&MM22)CaPqB@n@rk@3KFNvlBWoLa$$jvazl6-?2 zXv%U2T55P*gc;90e2gN5IvR=D2s=Nv6gi!bpq9-t>w1!&mgIsP;CoX6N1zUi;ryqY zkEhp1I3~GV*sbZFu^8@nk+$q}O!^IpSm4PwJyH@+YPth_uB8y4qbyGjxq|cEcz)=9 z8TS3PsaQ^W;mgVq8d>Ze%KPqs%AX#USbwsvD5OGMY&tLqn*0o3xo?#DoP_uDv^9{k zxbsrB!MD+&Kl5KQhR=U z&~zoItV{;uRRlt|DfIiucRi(uuEhlGLkgkeXjhK5#DqfVkyyH((%xKwqr`E1>Ri$$ zWG?tuXq=eTbah;AcSkwr4cm>y8L@S>soIHC@Z@xgE~@YeCkW%zg>@MTI%f zYMFN?8!2(fO3K66iop9iJT4To7aK8*V6{=B^(DDHV?5!2-)PL&nWy;s;%!@{;P6_d6OqA6*3k=}4WbluP&b;VU zCxXjNdx?*ACJkXk=sEF-#%xr6XDu4E`w!tO>;9vKDQj^Pgn@K2Temx!vI}OFWCZGx z`+fOyz6$Qv-pscX?3yoAEudXw`&~4$;U$bO3;SfxAoPk5Zi*b6{x8=OOUWXXqVGI5nfvWj?_-5TCpj!k#}6cj zJ1c(Bu9072h06^*0UDTanbPElS@`U=$_?4tf4Jdz(uodDdsma8sU#^57&-8dcY$CG z50#q~AX`+lWavy%RE~<`#4&>)UR!iJLeihwpQ@m3SA~29Tn<$X(>!iraC`V54gipN z@h4K*+xZj@-qYT$dmLec$iOYOFfT%-r=#Khb!7Vj&D1C6aJiq)`ZZeurODNO8rEtE zy{FbF^s?rX@gbO%5dc17eM9!g@SW<|g`OW&`4WmV!y_U&BW}lvc=Ip$XvX6uefm}& z@D!{lnGS?8EFc}aix;Aq7Yh<@Zw5Eg5B2#9`Kdjo?H4Uj=PY;@OfuY-|G~>?W0rL8 zsL20_fOKx`?ClpG&{+sK|Lku2Hbc7qu-3g;FA;>h&F>O6l=y)41%e(vMIdN)DP$}-0=nnIP$V{&z z{ZPEcy_>1f{{fclq6sA9LMaoiDatb6OBmSmGHZ4-?g+s7L-)}A@G;oWFj;) zPkmkFcqjdaqROy6IiCo)8ni6P`s!S9tJeCnq*@@+N+!hFN#vkq`?^@ewl-V~gvP6^ z``O-q`B?iY5pJvz8B|A=7wg2@)RqnMuH*TW*8yGM~LIZq1bvE2Ryot`kuh3DZ(S)imahrSEW{_S|T)Z+mAV9PrTFNg^jay9G?ojDa}Y_2bNs-w;O?4s=x#%2j6e{0KSFS z=TVBjE4EkBrvS9;HMLA>_1GwLFM-rk<$JiE(GkW6J#<#KS;ohw`yqe%V!3I(!vV4A z|4a0C3_Lge?E@oWEf)tt%OpN6LRI_lRJFQq?CxLdYPIMj?}M<0wQ>R@z&tEUp8DP9 zDmn+Wzb#LETgeSP>B9k;{viV>5VuE{l3RTt}eU+V(l5D@d&zz*&R16-;DUEb`vHlyV;6S=jI>Y zkrFw_I9}|(P4JH!(2aS+4i5Ge4G)w66&n_v&=m}OH3XgVJF~PrfTf1gtam!)=Yc)> zX1e-8fLIRlbGXpSM?R&f4&!bUZv|AH^?A5|9~3I8&{|7j?sqTs%Qq*ysUlycu)xGq zZ(}yBN5iT2blRwjjq5ieP$*KZy^B1U#VIL1T^rAV1i*ZY6ULMOg~DB}>;pExM`Z0? z!TYBV*pX}}5?c4=|HAw4BL}y5}_2cLgAWa zzP1Lh5Z$9uG6_>~CQ{A6jGEL6O2A2am4H_P!nx7~PvX{jV)&*CROTRjTDT&}o^-4( zWcM`%5Re5-UQkn_4#bEaPDL}!Csm&l7%NzL+==c=`N=j*A)8E*uYG!R*@BB^Qv)t5 z$b<=tS94_fzSOJ5JEja{x5!11y-O`6Si-TqA#rp*XUHXSG|D^L0hie_8njc$=96&FCZcW4v{eR$S37rjJe zPRMnfmF0CSsHj_)JGbCVxd1zQw$swdk zSqeA|pz)_OSM4^`Qnv=P9CfR8xss7(UvG zOP9{__MjABzw+{vYRT30f?Q<~?R)c4;g`GyDg zPq4pL_!3XX`Lqeq3q;iUs}VL0*>fXOCZPYkWj`81_|99HqxO8+xDZOf#6NS05lC2U zBog~TBHTjBI1s_12nG&}Pc_|>Bsw))PQ-OU-+$AL%~x%J%JbN^S7Qv!g(U%BbGire zVB84(|4OI8Y1&J23Tr0i$9;NOT}B#Ut>w)&EGHVK|$1j4||wA zZc)pZnR)zh&L7JUcT-c=99*Oj2JzU^DAwp#&sMm@IuuzyP+Du*~ zy?^w0=qqyF_KOAXV%&BxVr2qfJ!jQDrh`DCJHxl(9?>CcyKm{q&PXv6tNX@b?mZaF zeTXQNqmxM38t8olVtp!1spjtXmrcyFY?Z-ER}LJOsEXPiSUz(goK2Vu#!(n|ugeL( zX~ZPjIdBYFkAj8681Av@Sq*7P<`ueW^MLm5nrssEQS0l}8cz|Ai9xX^uPU2A;cQMM z3VfjRl2Ih^@Z>b?=4-cEAKug_UL6Qx>O>@Fbh*!Zv0iI&_?ma@sqjKu znAd|0oK5|$Fvds6uaBR?u&^w`gQZbs=PN5q{dCJP?G+8|&e^P-Y0^m!1C?e`+oiW$ zJ}}qRyfF7k8N0X^DBe`wvdg3yxwIZ=?V0H#2Lr!0@-;UjFXmYE& zChhg(kQCm2tAGtZ{4Jdz;`nP?g}R_70HPBCTr6S`V||@>$qw6=CI{QXnyP1AoA&|N zHO&d)3;cKXKgM@YgvT@<(8hz>E_{}0GcEYGi>LK+ri60?91*TX_dCh|pdbo6{QZ4G zNN7z>`uJS3{m+(Jm=(PMueOu}P=rS(k}cXci1iZ!Y@+{}~i{Lxph&FNnf?nZZX3nQ*8qM7w3jATIF ze9ahrwm9x(Ee$?q>?f4t{P;55^F8%rH}! z$<~n}?L{un&Y4-`9ot=+iDcuTN)G(_h0F)r6m+^G=X1TCdEabkYhRGOFR%6Z>DMv> z)sg`zvIk`Xjlv@5Z7jAcsBsQ!B=&f4`#{+Kei6l*epAxF;OYu2mN4C>5^{c)H>uDqs}azg0ym z%f!g&82Q*5{`lHCGd0Ia!tH^rDpJsNb2lp9wJv#ou@NRRBc!em1gP~!$Ydxs(_>MN zRoFXQncINY&7BCD=%@a@nA!_R1kS*cP`ULNaoax*cHke@Vq$*q4DJu-q6V|(xo_N9 z=U)0{Q#J)03$jkC^NQ4poyFccVtqq7XP`}YZxPU$KMn_QX}=e$1%danR}3$p zJ8^7@29#WXr6Dn2dv{}L8}~~oXsu`yF^NZ~G4IADN7hu@tes7p3=}R|FWU|(*^;+53X9o)5*d_V6twOrOn&!CI5M*g3LggFAdVpU#GW% zkr`8=S)6_~ChWFuVHJ1$ErpcV>k<5jS9@gs+iq&hXh?RtOrK^5C?JiS>uJtgcKzw% zpLnECfV89*J4Bf~b{C=?7Pz;0&6*w$&D2z7Y@k;59d>4nM~*NDQUky%_D243iZ^Wp zCX@?AQhsFvD6JUOa`(}PqXg9QQ-#GQ$>X4;aA?g!bJy6b0cCuWLYvquK-GVIQ=8vD7cG=${ zhwYR9S;k756mLE(A=&am`@U!YM4X)`*;&`Tz?5x&s@@?@D!WKoOZl9&_zxt$7fu0w zaLRZ5$h1y&YGnd;4A!IS0$}RFxsv$uDRcN0Pe%e%86rG+YelQ+#FGUQ{7pdV*RC<} zdTfY@M$K&BtVAp()Fm57cO&p_y_~hsVQ`YzPfB0h6T=Sddv-9FrdrP5VVV^RwIv&= z521OUU#0$u_<+PEKOo!HsmQ08+u!lcHCu#P`j5WXV5_!z+)w3T?9=fsLix| zPp@0GKhG8>6aTtRno%OVNtTG~95)OXBm@j5|1p@b|$chc}Q@Gli6U*oEJ2+T(-LKjsWXpQn2a<#mfnu@kedU|VutzBW1*b^U z<))pDjv{Gwl{CoyeF|@=9lG5HW+UNGzND!Wa_PXPE?W=Xisn1~fEXhiQ->%Z#T^2M zl~YDx_0iC;_?22r%f}&Vvw#Z@h2pgfLUPV@A5vY*QG*6O@MRg?^eSJRI3p4XnMex= zcb2hd8$L~@m{2LJ>$?^Q1QpeGqT(Bc{RV^~x5Og{LKJqp5#M2{$O{k!r)Z~aO%Yh3 z+o3+&;2%;zqv=R5UTU0KOCFmZ8p6oK_Kjgg{U7jA+XTBFmVdl90fHZ!h4x5C`CQe^ z26X5T^?i~Jl2w0~H_9oOv}h07dPNVAzc4(UJfqugEUXK7b*Xql(~*D8a-8X0jO3!W zN;&ja3ytfCgqJY6ia`*G*}uNm7K_-@tdzALn+`R@7iT;2Z%eNXFjhroDaOB^Mt&Yt z_6rV`R@nW>#}+jPIHX;&%VB%Yn_9vYQq!|eqA04per3_|0X4sQt9Y5ktIeKr@OhF! z)9<}lTpA5o_;5t4ZLX8*X>OxT)U zb(xyBMQ6ft>Dm4$WQI{>7Ei$rM_Wh8g&05S2IK3u{jb*$fH48f=yaXTNJGIC=Sk5t zqB7QPt`d;)Er<;_XP&HvEQ#ZGFfev|O{y{5p;Uam_xxl}^TLZNf^u=V9TsG z7#%<}t$v{Lj79fjUWNH*4>Gv-SpgHndt(UsJt7HOP&)U#^}rsMSsCG~K#qvcFgq@E zu8j^_U5Wr46aBQin!HH)V|%z!pm&1&=l z2^VJNZ)pL3;%uXpW*NWAahYvxc}BMs#$=DAn>93@B9GnHZ~srvD^AxdpfonD-qP1%QTuYV}zfSX5A-U+_#O;%&u~W-p*_jc85=*$VtR07#e(6H>BYAsGo{ZIbNe_<$9V&#gSa;fj?Z> zkhTrlQ>ZM@sieksmN^0QTQn<>s7(<%f!W0{n&RiKosG21H_i5XkT(VSp}rf@zGfM# z1*m@?)@MiE*w~k8G|2HFIPN-bVd=soic}BIZU|)F`Y*w zKA7|IOmW`2I0YjVN(Tvre}3ISVBOg#ZzLh!oQ^YxQo{2XXSNYtxV0JJnQEUj*MbGwa>>~zc(i{f6{Di!y2xp5vQgC5)*AS_2hn!Yx+#*V`y=g!Rs)Ep1v9BY zoTemX1Vu^F;O=)Wxn^aM1Lzt-#e_iW7G)(^9j`Mif4%B6OI`x8`E{3edlFC>q|~>h zoIk*Iarj9}vRT@{PDmjU&Ug z$v{w2R=rO4*bHKxxY6WDeqaQrZf9c}HoOs5&5H*@6nUwIUskJs^K?KJ6LHdLcA(g? zq?`~7g_~d+@3t;5FGm&(;B#-s{o^+OcZJ0N)JpvS(R%Q&kntV&_Wa=`>ZsRmGt3c` zoH1(V0gxa_7+*Fq3neJjCsIPzhM?e8@3R{E^_}6CJWGk7OfGgTEnp;dGv5bcD0Ugu zij4U@S194SB@~=rfeEw>8X4@$(IPziEhXokUqSxVQzWHM;rtjZc`&&gZMu@XmBc`+ zLuv`nT(>-H#kjz$iYVkSz!S>NPa9X*1+VmGwbJLg`1+;vJ{P0~+#_AqU@}s3>0#dY zV!|4krjeoqJQKCsXDWxnKy4c)4y;5l+gINCH#YI~ z>CDn|Xo!yOrIt+;0c~&?_#VjSn1!x-j_OXZNv32PQ43eMiNgK+en=b~QNN}j!q-pY zedsTNO$(S0KfI9i#w}x_YnFHQc%!1)Zby>i%#h>M<3vmHyw-@aA;mM|gmnp;*dzmW z-rksj<3qFUz{`cN``Db#fwjt(li&h{CB$M7;;XeWb6r!@bbunDy^ot}AY?#O{I8E= z#DgjQba}wB_@kL|n#AFCwCkW1X37xZj~y1oCnTS`$dd~S)47AjoF5OALuIBc^Psf@ zs{SPchCQ?FvXdEQD?5}dz%wg}&2#f~3Fa?zt7(ikrmZmPKFwc7=taYolV7%^s#i0!h}x74%jts~bI&DVyrC5l-U){D3rJ)~l~#BS+L&CxBH z2Y)yvMTZzSBocp(A1HS6m2L}OsD01{R_w}Bcp1tUR3~iGbi{)%V(^t#ZTA%Ge+>O# zCR6QVre`S6UwgJRUS@QIKbzKoh9ao~gQzQGBBIqcHuy|!?XVKQ)A|e-x{*{iQs#_A zJvliXob-Cr9k5HWZ@*vqr7*6*uP3|qbsr?a?SllQ`F1m_?J2FyxzA*eDbzL zsWt~0`d#0Wh|YV*5(~(^-<6?HaMZHeeNSD(C}RP|dYe3Kc68G#OxQ$G+DcpbD3q&z{3)~D$EG07$ceM=g1NJ?(62oJuD!AR>e7;7GLW-}*MHs^g-CU~F}MAT zZLG=foQ5}*yd(9nGPoBC)ucyRN!hyE&Qqo$5ypMZyAsQc{rjsoL2)R3P&?6l5Ucl6 zNGE<3uCef5qB z%vJK8dt`YWz5sx8g|2|0AV~*P+Ihe2$cas%c5ah)f_eIshs~Qm*|C_>Ql)unGG>DL zCn0(Am)Po4n{4l0ltX|aI2SAp*?tYy?kwa;d0kMY{J|_h0i|>(m-s8lGaQd{s5R2> zZDgkKOQVibBY*okiI@E+SO9D^+{K-neS*nXL{M`j`{<8@Gw;9$=celHk9(#Sgx1~j|6 zF|SrBRu+_BvyTs;^~GbRFYm*8OmGwSMck;hY{u?z)kZhY|9Bk$h^Kukh-V(L#!8mT zD|gBm-}JvXL+3`xX``q5l(FlY8COSv<80+0TH8a6nni5-_w^Qen>C^S`pYPeNMbatlf@HL4|GZ=%X5$VxQAr#tOYNowgz*Sj?;xg_^yR zUG7tfVo&d0Rk*PsKp?P4sUC}k*%@PD>*{4xV*_)nN?hjt9V`C2cBmJ3wWcaKgt6S7^U^*?W=IZlcN&frxEeP)K6`|Sgf zK`{!ItS@LTm={r$0#uVZ!FQz40M03MO@Ry=9zMv0a@SGfJ9S>APQn56v3?oc7<-@zJMEq9%jwuCyj~*8*yH#O97nm*LdH^3bxb z(_!v%^tV@^MU?y^LxE`uR8}V8v;koLf!XE7Cy$zif;8Gp!((u-T5E1qB{mT0_7Y^~ zRO==rrQHW0NltU?85BvoLA9||mmvKkm$u`265`g8RJoRvbm069J@^C?7)-ARtW zV13XBEFZmhIMeGwCLJNyov~A9_G>i*^bES@^S+ad)qSdlG@?Z9cMnaoRxgkCz*Eno z4qGK`ENBwP>U;zO*TxrDd4Dk}Ec*xua=8o)&J2=gUAx478F3G`Lm#0VAzecv5;HB( zvQNdl|G+-~ytyy8%QA3vLSJA-C4y@)QYnmb^}DrU0Lz-6Ozi4o-P{=nRCtDi=aHE# zSd;bn7Y*r&vGGD&Ss5fVQf}t@hMKUC<&>ig)rD&H@j(VrTj}$AxTO@|X~L?4ae>9+ z)R*RIY5hg$)1NTpIB`uIy&=sj@kn6=2+_dhWWR<45|?RoDw%&zLx+s;&<; z(2e)E7%Gl!ia!n7C=kgh^zo1MJ|Yjb@xS)XZk0??rwuB41}`CfanoJr`+@s{f@M5PETmtDE(J zdrBb8p^+C<((Oy-Hymh89n*X3Sf9@9KDa3QTDzzB$_hYDG)g=xe%!QvQn9F{_0 z;hV}7KM36m2F=U9%oVPT`@q=jED8j_*@NrWio8ixAl#i_!odaZFUPFoG8NeQ&bqz~m?6C6G< Wz8)Ble{vN%Jyz3s@I}QY`u_p2zI+=1 delta 30932 zcmZU52V4_P^FO^qKzfacigXm|0aU~W0*cZhp^5ZJ5fH+Kt|B0!Aksu1MWsb*=pj*x zp(#p{mPiQ_N+_Wvz(4pr@9!;tKCm}CyLY#PSzf(oc`Pn)n2Upni3uGz zexHfysn5q_O3Y$$Fiz0~m3Q6FBVM=QIbB}2s`2Uy5>=keRg!=PJ-gWuogtNkWr939 z5yyM_jQDMhg+z{7j+@s6nh7_U?6fjwrF@#VcXfCs6}R<9Fcs60-izLhdl06JAEu?( zy1t%1|MgBl^M%h3UMaj@XZw~4Pc~IIEDv-pF)9y)Oh2(PV=YW4gGTyDRwDe-#^*6C za>MVf<={ZkJQBDVuEAxGF>QK<`wn9+X>w=4JRDcar;Nk_UCXl88}&AO$r{fGOi{8kC6?nylif8KQuEdR516dd)FzhY&sdQQFG`yh8cLfg!yIfwBd)hv>M@s<4e=Yjhbrd94Gxl% z_V$e}_1G6{T{q`CMr#0TOj(~0y7m3VvGG?mIu7xyHTw4gDYM$~2bFxV#Zf{ys{$c( zb29{H!6nfs^{r}ty*FvS)S$Vl2xcqGr6&;#A(ZMU5Ij2vSbAHItulLi&u=4DdMO>M zJ6p7*McECu*9?*VEP+S({#jo*S^Ar{-YyB-AeA=>oGr8ifNj}5>Z(h~h4%KaU)te8 z`~`@G@ieLEzZ_2Qcqe}LgJT{5pbPt@rO}|WgFpTu;mvp7OnLuE%(Utf{$-Pe)VMTl zxRCIt{JxvfdX*3TY?-}$UtzxtCTsg^Epk_$woNxE#gM3TXD}@7{`D^hECXwSynGju zH{Pp?91DLff6*Hssb=WZo9t{f%D>-4_t&MYu~dzZEzlv_5}B%Os)P^RgK0nQ-K_#j zB?@5e2FWb4ySXFRoXg1mZ@dSsn7T&8aEYKFm(CD-&mP!z+1sA552|_f`lX`n3zkxDs)Q=*D!7&6REAy^rB? z*0wjoB??_&zprK;;guNV@jY6ObU7->YlZlkSHp_v_XRa>)HB@={+M}a9 zSt6x^sTirVhYuf4S-|V+PtJ~MMbb8!!%4k#;nqq0R;`8VU9HK9`nB1f#-P(OY*82h z+d-6y;H007K9n`}WpHq?;=Ei!dC+Wkj?dr_NRBO+V7)iSM1~ngO9jU6Bh#@)D4FE8 zA#b{2i&oQw-}wfXOxGUe}Mc4w-Ello!%Zmb7aRH^XNBC3TWgCD<+S4caf%hij*?3^GT#F1d4fnv^(q&z zYgZDT%)t=B3C@lx9AHQ{pp`A%c3a7W)x88QeXtj%7JkZY{xP|xEB35bu_bO23qzaHNsSq0YiE<3xSa@A#M#dHV7nw! z0-0b(G>;^FnDL1?NiVs$zt-vqWre)ZfChS?epIFdO>409Y7=m@5N~5r>pR=QkDZ|( zp_6SC?g$lJ*)v(V$9=JANFHd@6kMKEW#-l}ToH8CnK`9D8An75GVe15UL_L7MLeIg z(Wqs~Q8rwg)z%0~UlC{sBaM@R(5NeK(m)p}Zv?pnQ8V$I`%o}WG*ezp43JMK)4;vR z$BMg;b1Jg!oGKlG3$GK6_2m0kq;nZu7p~;zyR}*kvIVe}(caFx5pkb`3}4$}Gk$Y+ zBO6{6R)1P;gFh2q{eFY>xJ!@Kb@y!;`U`iYZ)e5RtG!l^?vbpJKJLhb_ecfIg`T>+AxPqFh!_j8*yKB;C{Zw zfpMyzyR7%+5+<qUlu#-^lTQzkow z`?-!ZQM(^RqmFZg*v$!x7&`- zhdB8bP=DZFc1PnrivCWW=LIwjPM!P6TiT3&x(=+4|21ee=8`e;dS_v?Z9e`7X9)lj zo4p1u-KmW7*SQTQ?GO7CcIe<-{xMD(=+wrr$l!7=LgQL4V@ieA?(#0L!rf0GFF2j}j#z0WZD(03+dm$;n&YXe(#1h`RHbc7T4 z1I6kpw*7jCPi%yXbWz6|aqvI@|9&irlF^gy(eK{WNq~KQu6JHznh)6msl}OXX+6hYN|wKUO=P(C_v8p%6 z{DzMg+UUhxZAQe z;M*ZDr^0zukFr>*7eaNM_wsDdniAa`q{Q&--H`)m7YbbHlQsHzdD2TVQa?zlj#o~7 zucDa&wu;m{8Qtzht?K*C7m`ox!moEL4{Ykv4eDl zU@4=@nao=2J`PE_T&T|h&$^J3JJqTH?kd~xT(bJ!gtP&Vn z1nf+)Hrl4)EWLWpb^Bhe&iMT(txjy7c~uYR zURGoEARd}I04!0q&L`iG zz#ojjeU37e1S-Af`hJWKL~hp~Uig|>g>Y|JHY}Ff5tC|uZd-;Pe5L3>7yY*`Ie3QH zE=~|Rak4|7*N(8lr}IIk*DQfAbd95Bi5|gm`E9j&Ig%22h@P23Pj?(X=CGzPBnKGbQ1^z_HAx+X5&vc1|lXgdKH540X*I^ z#|OZTWDHnuRL3Ntsq&sF)Wt+Ym`te6F|xOmrbD|={m}EZys)azF$ih>{2OiK=+sCy zy3pQCA5$6XFGkc$1EGl2&$7vv0g1IJ zsewZLsz4on2d%mcPxko6+YUMF0o=Reuv9!Jjx8o0M<)gTf~evp8JBEBz;(yYg@?Fi zCL(#^?`ZW-dr>E{XHs@|(vZzWumTp?oUNp@%svYiE;WyyUySMX`(+TBU(i^VPM(gW zj!nwmJiM~J=d4&K24OX3ty64AI^!by;Q7%g=%fT1T-)ezV|8-TSqC`2jO4_C%((S} zkg-U$p&_=YwkX(>D0Hb(#eg}l>bET4?2vqRiV#{fhEw43+B%=1&-=UjLk>*fSSMmQ z;qhs!KGYfM5|`evG^99go05oba4xP-8Hnn>5}~nwIEhow$j;x~9c&5Q7 z-T4&;>wa_!%8nAP#mXzC^EbbY3loQrzh$sA!38elyqJh2m=uyJ3!$)we z7V+-f*#@e7zcp31XD>{4AuY^Vd{hwovC4fpz7@I1TwdVkR0!ml)s983$1&OUX_xh> z%ssc&OF!o-NSLpGOO0fAf#Cz*P7T~{6DGtAGY?@Z;rRjv@^^%)I1AWXub8mxGFHyo z{x2t(1KKh};HtBy5${E;PpGoUKX#@dM>~FXJJfA!rIK#qA`#Q1x^E?(B%y&{9!Mm1 z;8*wlujwvCdEaVTvRs26;jmYz&S&D9HCfDyOV6I!{Eekdd2PoupyZxdwBvsY46Rk6 z%HWdGxj8G9_Ta2z^IBT2wuWPE%j+hY#q)+nECQ$Gp7j-P0t-XpF-@f(j9u&tS0Zlk z>H(6@eJvE0xzybqdI$bj6Ssf8;jkSorlB8bQcbs7W(RBFTU!op7Ttg{o?3aQ9=m%; zj>U)zT3EDFnT69hMz`!lYP*W{M>xbJFgm9*`bJt8c17HX8Ls#Z*SY9@26geaGg9BJ*M969;*CCDJ?;o7!BI(0GATulyuZ=E#wxt+pkHbXQRJ8t+> za_l7!w&!(A8ds>U2;iQdrpnqfDyfVbl@cCJ=!ii${W*8n zj^MPj9?;Ky_i%Sr3n!rp&IJK?_(B#$Gqxt-(M^xYkQu(@yx%a_O^myKy`_yne1;C= zHD)|1vsB{q^<;6(IR<+l(*9wL%PN7F=mNJpzqQ#6k<7!E>;TtS;l8m8Ug$$H>{%Xc5b**w zCxX46#8R>$;rNyvnq?1NQ$u~w8Q)Ls$B*%62bwFR#ya<*MV2?-$iQCy?MKy+%D z@s~oCx8=FW!bFWkXwqd@rb+g`xaJRA@C{vpAw5n23Y9urRXa+E*SxF%5lf4w-i(f* zyG4it@f!kYu1!S&ckq_bma>>F?EksJ^BPQ;%>H)`A4~HVQSS?<+7(^&T7{;N0Mjh@AwNf`5&c&S*WKocv>cqI=Vpagkt=f2m0)stzy^w!;n2+B2-{CP|rCJbe} z(dHMy94urZPNN3I8A3Y78bpnmK>|V)Ny@y)-a`^j_>bqy2Z1D({1%0K-ba#&SCwQw zl~Fh~T^5GyIIYa(rxlwiK|Y)dVv)jDUdD704on0BDGz2wM5tcE{3S5a8GoCPM$NF1 z%q-HB0yJ4#F%s$tB?QZO=$#=ZaqLZaaa#qtB>7_78sR3&`ax2Q3A*|&qd0v~R6Ep+ zMJe;2D$a_sdUJO6d$7j4)0ZY;WVae;Ud6My45R0W42KbyH04ddIs>j?V`*dt^Der# zwpoh(Or(_&NJu~n4-z+eAQEMx}${eg6dDn&=kfx`=&UBLelYXXJpk)1MbY$>7BL0 z8#*Wboa+uss6zXPE)nnEgg8-Gn{cUDFpoX5NU}iS4VENlq<0R_(3>hzr~fE(`G)w1 z-O+&<4y?AIW<{0?-;j|Rv~cD}a3Zmxc#d4vd1j#LK1KS7$FkdJLU) zKTY?fM!X0|2j1_>m0meL0FMlctPcs=e&UJF!!86}UG7<@zpayglDNZ;)FTgi@{YoMily?Q|85Kw26R#J~=&euZ^45$p?Gt1n?dZfP2d8a!1K~5C@jTJuo`QO$1U2r#Z((j+Q(Q0PyC!L3fBO7$Y z1A_}{;F)WsiGHgSm4+tU8-+J5)JT8QDoSal==R~JqEh{q@Qs>BY+5Mm|L$4l-7 zUfY>NuPiQkR%~V)?Z*!4shRs|XS5;Ja*QD&dSc2~|Ax7%fMLDdz3<}mp2W`r;c97Q~*{VF3e{poi}xd-rk0HlTR4i)JsQ72HNYIX=CB0HX(>W zw7luYzHtob+|uM!CePW;<=tJ{9<2`iFQA67BNcaPk;HVCZA-uTFblnO86;+4Mix=? zf6YL1tO3k9W?ptx5tQ`-F`hEmeA`X#&!NcJUg8WhZ%KMjtt8-IySTsoaYP@b2183< zkDxU3C%MP3a87E(PaXMB$mT$XQ&H(#y4Cj2#?<30hPV041Ol@^4|`NwKO3`T_-Zl* z388ho78wyi;(M1b?E{PJ7Fq8$ePi>WKUc}#KY~-dPSnL5SIb_*JKQqyZNt(+F7MH} zY4u0PrNiw7h~Y5~>EN1FYxO>=E$cp|-t$m6!t>K=t1Yt?bj66F}~|@j~=TC3Dl9Khly} zVZbnpRqwX4!S>l2A(Z$6w>0sc)FufGcct+P-j7A%ABSOO{Icym=_2pSclV za`MVcWBZ8KsPDo8i34f{ug+TOiCES}JWQgZbY%j5iKGJHCtO>|Q=@6IRfG`-_D299 z_dg8K6}GX)?%G|VeS~!uvm#LNWR^^3dOiBX8hW=Peq~wc8o%eZ!B*jcYV_0n%8ASM z@EhKbC$8dN+EG`MdK@%B_k|GPUxi#JaGwI-0_DG0WI~)!3Uu;)TsH3wcyA)~BYL zP$o(B$R)bk%QE!x@z*hTK?}(L&(FTL-2vWhl^`Q_W#@|j!ln0;Nc&E|K`6C}D zO^CGYRIp%|VNQx}l&*aCUr?!jVCP$w**;d{6~$>K+yA1PpUCI({Edn(Fi_Dem^@vk zi7#eW*lQP9?wT6s;(>DHZXBmGuAhIGz@y%JG8CiDH{K5_C;XB&{lhjQIylFCs6mcD zPJ!osWE?zdb9jdNbBgDgn5D7&!$$%!@?T+py)uq(oqj;cgsVj-mCrOi;OJ!&CMpsg zxAJ?7qDIwRGvm{T9QbTO~-rQxTCl(6I~-!{6ZdpF0h7h>g9xiAod zuvL3rXrYS1H%KZ^F_qgO72kY|Q<2cwy0rIWIi5t(C_CzWSA7T}Sx0>p=N9i*o<4f- zS{tg(bVS*Z5Ja#Y7Imt(OXs9h@GU z7nuBvP;Pi46`A5PeAz{fW)U#W@UBI#{JvI*-&1v@+$+|2|CBq=nB$hz8S*_ULS-Pfhj5Z?Cwnf28;pxCX`nKZEXk+1k##On2?bQ(I zMY|%-4;r4B; z4e0R|jegT~G5>chp1cCkLPwM}xYQW1e{PCE?ZDjRctPX!h%u7F=ICI!x5h!JJ&m!ger9E$QBma`lH7F+h!cLnL>?BcLPkZ$uRq{lo3BB27 z%r(MxI(=U2#xx8qbr*v_z>?dJNE7LuOdqWNGoIjYR0{}WPaJy~dudHLN&W`rM-j4Y zNn`QMIrco#-h9!P$r(mm;~(pgVJ3d8JZ+ohh@$X4pOVx#uzu}T6^9%?2S}Z|P2`8m zJF|yl8UFpvvA6Q^Vy>X{I8s{)tSHZ!1PQbOuZyH^U!};|mzo8Rip-0ojvQ2k$ADU; z?@Cf@G#oFiNUT0!|FGKgvSkwdP_%?A6DO`AP^LQ!JX_m}X}QOFyZ-%;WW*a+u+yZf z9^amDEw%!4Y-ZY^Z0wdqULu0Zb?0GA7AHYok9|*Y3CTb*Or~`}SPvNUTZZv`+<>^p zwZ~tJV+^qMPVVAZM}io|h>jq0BqB{c677-j1|<)8$b1qR84FHVkzB+%*>SsDWv%f5V5 z6S8+W9brIyGx5zpueHsiuz9NwA@4{T&u`@%{F0)#%ggXs0BQj7J1J~K!m@6g%{d#D z85FY9=GX$s7>({9v6H0Fo0`j9Hzi*!X*tGi7@088Ra5OAs5LTTH?J0PvI!(7u>46Q zkC)Tddiac<_&!~sZdZ8onKHw*9(EoMK&%*OrtB;wTeZnkqGd8yPybQ;2p zy~A>Z17izVrOT=bN1WNCFeUjmG~}QxK2oGLXD?o0k;~YE?S}RO8HvbNNB2=D^aLj#8~w+j z(Fqn0W7uJW&#_vg6!O(tLAZ^3W4$x!vfigNn9{!bITpena#wgXm1JOtNor!X3>@Gr zCmCpvnl5Ys*S5?f&bBiv*8OH3!adIpaaEw7pdV{GOh&py$cAta<;=+pyoc+^6ozAh zNUJn^e~pONs_`ngZyIxJe#&yZ5lkb(WMSGtPrCyN#mtCf4eUYC1%F0V@CXeV`Qh$` zQT_Ziu~ibZO+(*qEG&nk+oneAXYcR4I>B~2PYlpi|EnB-8dmTj|LffgArsf=kvfpn zePfLZWGmLo1a8?A-nN!M)Gb}#YaYzCrQ*EKO8Oox4w;PXX%cF0I+~0uzB6LMU>Qft z0ZTJY2?nPJkW<;0QLIa`Q~Jw?hacMq8P`oR(Qb*t>8H5wVvOJrk}R9_A#zXhNom+5 zP|A{K)tCqH%gmj=zw_x{@||Wptj~gFwkK7mcORxpTOc|o^zf%moq2$BEh2T4K!@B8FUys!;bEkWW+Y{FHhP5W6 zzAh-{g=ZTK$8|{7i@R`Y+?jBhhw;jJ6J1Y}WS>NY`!tO1ddX6To&Xi`vdc*Whcu?` z;0z4SFdo^O6(PG2teZDmN@GFC;dR)P1eDLg>rnb~WGL4AUI% zJ~E$=H3n@e7V>rda;>HrJoisxw_k2Lz6Titx#)P^(fEmwwWvS}!}8Z&YVP0QhgGly1ywuB_t}I0Hocr#r z2Ab~@#W36qomZ$vH zK98RpYo0KnZF5@bo}B7;f>*5EOYwhO=m(LK1i`pIP(a-0!#gH7^`!&j+$g|@;L^3b zZcIjnANZup_idi>9X_o+B(6O6z3{^$NaqeM-o>BcD4Fc+!7>n-V{&UJ%}$>6d^D{z z!q_gw{^dI!IFavk_wU(Ng#U<3WTXk4V@_W7`!V!^otO467ZW(w=lMHF)eTJk$E)m_ z^QaAYguA&V$eij5wfl;V`Im3|f4Gm#0X6qP!04-duvzhK#$Mmv^-a$~ zO3{4ElRHzzR2ukj-RdTfQK;g9LwsWQ zN&0;12@E$a2p5pd&Q}G3C>I!10pX0{YKK{EOjb|t`xOJwOmZ>v?Z z_{wB_K9v*4lAXU4=oHXN6%`3*I-cUzO(XgdQV8jU8Ppoah{e#M<9CrWse=OW1*RaF z7BXoY{JQoChzl)gR65fJ);&%U*fQTb0RY}8!^6bZj|{Z@OTZGr*xmB|bf`;5)fs&; zY#*j?l?mN+s6{4*d4kEsm8eRCgl_X~(q0S>+Aa*mV-BF~fx4F0ga;H2zRsCTdP3!i zK%%V=v|p{NktN>S;se z{s6%*2FimBAZ!y$dBL0kNQ){J;rTx1KPgC)Xke?lopd$-v5yQ3dM0VXVSfthxbkU$IX_47cyCY+ZF ziF!p9NY(-fHgJXL$}BPZ<*kMju>KFS#3wr8<1>Deflm-FrBMo-HIHbst4~c3 z>0YDty@XTb^%;Z4fxV|d##4tD*>*nlDodzDRb$fR6!mwMYU2~~>8B3GibM4c^OLWw z#OJ48_fa&accUdkB|?WIDU$t)I(fwrk!X}TrD z)5_PED2`j^KzH&$p<5}X9mI!+fb-2nA9;;RS5Pq~eARco=o5PfC^F+zuH9>ITpL`F zgb*#jhqdGmZ^$pL<Y;rW_(&_&Qm%_Q=;o|}O zU5JU#lOL5+rDdVX+2OTkx?K{q5kA_4FD&h}>fuT}m>8=vD6 znos%o>gfp%>`z@l@g~4f`dkd;v-mc(jmI8=5@hK3KWS~e@(@N2luh*xj9oQB(7>z& zWQ$>Fd%^kmu!pwbQe@)4la&6U<}Rn*VdQ5)p^hEhaqPyIgPJIqY zihQ?6XCQhFz3>RaD#yJ4D@i6dFMDcJJ{1YvF-^PLi(laz7Vix?AX8S4N>)PAMAHpk z-RRB&ViKs{8NFA0d;c*$(Wx}!w5hsiV5dze;!TI3)EVk;kusZVVAE`nYf9Wf;Sto6 z$`7vG$NweN4n3Z#xp(S)#k1_oQxdC`>t&;zscD7vjPxn#`mZPP{6qZutp+&6AGwAf6d!ZBQjvGr4Tw@+o(= zn8vd1V)!YUl$kD0sxkzrE=#$vWx&>~co0V9GAP@bCvwA&_`%Q1XUCfa&CdD_X*2`mdLav3_s$N~pbN)Z-YRs;isze8@lGr08 zWwNk)Nq3;^5l`%R+Xd35p&^D4-U(htthCp&b@S97kmiWvas>ky%iQ?9{K&BVJ(2Yp zr6oU;yw1sMYfAT+7nsEr1qw7a+m4NGve-*AB6D#r7)RZ)r{`JjZMT7s|1fgX(NXZ5nQluo)5@w=~B%3KO68XCju0;72y=x%Up;g@jM~_viBSp@Y*B zG!m;|S_?Oc%wz1}MEurWBJ_{qg_-^siX;c~$*_@CxSyY0N|2UZvb7fqv*yY?WGM`A zx$V(1dJ{o7cPWmon7=}ZI89L&nO0I;ikmz?D_b|bjN{;M0UWrc(Qc41&~U>-nnvaS z6?$3f9=qzo8X)(#S;|1E_VvCZYe{4h=G=T_q+DUYI-v#87o_yrl|^vPD> z?x5uJix@3pN)dijZ&wraQ>r{%vs;Wt-94i3$!40GgN4_@o0q45aB3t5g*ox>?fiZF|pm04v&#}fm)X-CKk{@hHc3J-uh!m-B45!=M79c#$) zf>%5%ne!{cACkKv%|N4c=7L*=8y+BsD51lb+orHH_4bou1?7f0Oq>op=r^D6k3pu4 zeia`-fyYD?nAeVRUaEc)>94fy-fG;!NUBu1MG(Hu8}a3-k{SBMheIUl^hH9=gCpC) zp9+sK-6G>YssNa*cUSU;8aJ`e;1^$sg057tLz9mH)}MWXw0XxkOt8P5gv*Mbk>9q3 zag78c)bwJsO7ztF60gEFn$iahh0CG@hNuGQw1N5)!9KcmBZDi18a=!Bqj>{_C!gNm z(ym>ZUmM#I3?A7z^Mks*(ba3*F}2k*H@oH14L6K;;s!Piiht9D!<%N^bCp_{8#!07 zf#)V>EuegvWLJFF6Xiez*N7t`u(M}8VN8xWso_ykL#d~^029q)$CTuttR=#{?Ur%g z76w>Ar)el>%Htk(i-+7tU?-?P9dNLxgd(g; z{vt!y0{@j^{alu}guT4v+aTYhfPXCcL$x+;YKTjt{F_!)%qtHBcQW=CTCM)kS|u(9 zVQ4-qEfBYOENii*zfv6cix0M*y7yW0R?=6kDJ2wB?&%B3l()rJrm9to5QFcLVv$NM zx)DC@W%VC+D9vqh)HnC&FMNUklEZK6=}ob*pW7qg;z_>;BqCFc-rt!R)z*_az22F3 zHODUW=3WouP4Zb46T3d2$vT;mtuT!~R`CGB`*n?fESL3d}F&@D*DBju2YGNtq zV9CNBHAgqG&xSB94h`{zAH^Np4B4hYSX*lSS0X)HTSk>7+?9rGfORQS=r@+!-`0D1 z3LE4Q$6LZq^Jh3lrF9%5a!#|B$CoWEzsR@wRig=AU}Vv0%q9+=gg*}X;+o^ldpFr^ zn8Q0ureDR1(Uz;du;{K@`nHL+fH}GHn5x!L$4EuR1NjP1^u`YCRCP)u`)#H*Ds{PLB+g(PwgoagLv8Hu4)maBupSYc3t+rK0A*k~9-%hV*M$B}*B4=A zM+nChr^MVf%2xAu`PgLb7k=A;Oa4>H+Acv3t_%^9;{-a|KB7$gk&6_EEzp*PGw(i= z9f2pzY5MHk4m`2Y3=sxrli^OrF;^@4O@dP3x{PmI;;pb(e;5zi*m+?P#B&Bxw&sR( z`DjpF%;CSczViqp;@ zK{HSArze20Lv7F>5r#_$it=z;V(k99x8oM$6cm19$b4aYvv!0avEN zD9&}GDPQ^wdULhcFE71w75 zgkTbT2Oo|UgHS1ynZCTVcLZO{{|qBA-l6+alaxaKpd?PLV0D`x8!BMyT?)i*atP z#@~MNb=UrtwRny_TGsi-)Y*5u2*Jgnj>oW5e_6{94MkAIe)Ml>i|0Gkizo9c|Ij)SND{-4vj(JO7RY(I2$~T;?(AyHib`jpo#fiF#y2_CeFX+}< z{6Y7oi&Nvbg}a*{W|nt9xb{^3{2jRt+`D(Hfn?Gyy$9^d_n+N8c|X}yp-4G1jbl#q zHgi1K|K~zt|GBx2(x#yzzoN|NzV8&Yk&`a?$@O0byw_q+;KcWK-8lJv2T7ckHOOik z=j%ycx+V3O^m~BPxJ|z*I+W9Us;Q1}x4+_LpCsm!lL=Bz>$e2Rr8nC0DqUdbh;m59 zox{~83y)d=y4TA){Y8W46TMR;@JpPsL2p9uiQbd>V!-+QS-5bhT($6yGD+0Se9NjA z8PnTjS$9?(&92{M0y^7ExqXdyF}5JVRqM@37Af3&Tk|5$m!)L+oqM*fMyI)VSb5d5 zREP5UepGcsCG37}>SnbCAeY?X<}=z^UoodT8aCPnfT9$=nd#6upD8Z9UcOfhvzljv zQVwMgo{+ONOiJ^_H-jAg#vJgK8>j`hHymiGont1zv;8|zNYAOWIc;lKRv_#b_Yc2zE!7awx;qgc znU^pC`4X<`Yw3zrmY42IWc9D6C^yx;{)Z_mc5S#~;z+QBy-wZDYZl1jRfAw-4ef7F z-h5k?sQa2bYH^Xi$FcIWrlr%TS?k>m)WW?$KkJXoI!!mYu2!aIUUg*1dmsPiIHXI5 zLtL2PfzI>BY7PCoW$kIFkB_wPxU)cV@oN?lZyo-~mlfjRhqcM|uNr0=GQAkA2~m?&R-39%4eQ_ib6RiJ z=!+vxD;6J~4?5ujnr$qQ(nZj z$%DaC_~KM=``HITzd>M$9-|Xd%VHD<-aUAgu1Lc)FJNXzxp0Xj{s0A=7-VeH`Z(Dj+FpGd)h zTLJ3R7C7U<+r9Zs2@yRFC!x6JMb9~Za@v679Gp=R zgN?_O&Z1WZV*=e3!+(A*0=sN0ue00UkeVMUbRlhi72V(avOf1k$iL@3*u|}+EM5w~ zOBuOACYH+q^wA59FrRMDyzXG* z|BT!RjmDWSp5;D|f>K46>8^WN?}AbjseSraCD2X!-U7sdHx&?5w#s7tlKCudZq+m6 z(yC|uYly>_%$x5a4*weTyW4A?*S^kny>e8t%Cas{RTlUOak%j*vhu`C*YyI`SDDY8 zE(09b3RM48XSy6QeVJ?1MK8Kr)hJIDRhn8?NnJmgj5x=iDOwG>&_|O7J2SOGJ275f z$Fjs^kP}tjR>%9MSMWs-yd){bCMPOP9%G^X%=S|DAFrmDUljlnUBP+4AwdacD_e_zM1?$fg{p3I{E%mWphSOaSe=;uMr)~8xdQA#{ zw>Oizi;R5NvizJOg~=wwq3<~yGW9~SMBVeabe0S0v7(AC5MN3j>yHE~bv_j+k_S5( zYakU_PawT1Fo;T3ULTg=*z76qW22okaoh#mYZPNbEo~t?Sj&8T=RXsnK#{c zsXAink(J7ipmM*iCMQcwqhFe+d#u+z(bepQJ$5p(vQ=O9D*VwSP#GnsyuY__n6oeQ zSwZ7)acy0^j8j3W&C6V1@$kiGiYbh?i&=_fx!Vt9ryoaF9)Ix-{qp`{tI*EOna|+q z(Mbb!TJE=q!@8X(XS*s@R_cdWJ!f`OG_A5^r^DWAn!2od$}*>hmwvL~b(l_rcV>!~ zv>vsxwW`(3KHTSDMBR9#Z#5{I!I;h?46ziqzGPA*rwXk;Ch7qPb61$JNVc9TB>K0x zu6pi57|$O$f7SZ)GDAphgEIxCAC1>M!+!myNlf)hWX%*DJk56*qt8+6c-Eqdw<{>! zf?B@Mw%IAvF%;i9`|#s1a^Mz@maFQFh)xpqtiwJpKZG z&)F#;RBh|!S;OwU!e(nuFW%16UEhCrhTPzk^*C2mRqivoR^J0epSt>Gs!@PvDF`c+ zyHjTkn7n5>ZsZWvu`T%WBgVfJ5Z8TQvwQP70b$SZE=EH zyOvE$jD_->BQZduJH_s+{~`50RBOPs_xC3!pK#H&4He0>{%OcAg{Akf{g8zLE%{}9 z@O8-B37XHT-+sANAe-HCZ{9bLu5AN=&ecTjFg{A2e7V^3Caqay3(8#f?mQi-StsNx6p6?b;;W#Rl3(Yo1(1_8t}&= z|61M38wDk{gt;WDP0n0(Jk0waGQq6l8XmGXl z%EFdCkYduhK6|wPU~a{$e-McZQH3$Qgk1c0kAj39@uS?_xG$TL%Q?0ESb*)y9Mh_M>5N`P&5f6fwHVer$A#gi zrY9$ZRDSsA9_8Gry=8<{e-RuN%wox-&FGB0u;>jtbLfD)>jKP z?l&L7=O`2LjN7-7(7~mZ+X7Osc~9;qjhhmgSVgJ0^fk=$nyX%}jpcu?$J296M)s|M zSj%!>#{KD)BLOJxpU<1p*=HXiO_2UuQJ)b3k&+UlKDza@Zj@yw7w#WWL$7`II>xYK z@CAl1nDdri8KqX>dYgL#q!N>#RKP$%3Mc-7lC-%WcWFq_w_#*5Hc^ z`3+eO8l)T=_?9ca18nBOzML7P9TSb?tdrr*zt6IFAn1DYVOalr8XzIQL8pr9=-r8v zGvqW`Wa74>@IN4=(}JBPcd}VXv>&fM`ViL^F?zek@X6p7>jzlEo+1+u-N~NgMgB2= zQKYQ~*J;}2e(na5d>*rX&)dp-dEr(a$5TKfSv=k$IGONFG%@f&A%z&o*>f^fnnZ+{ zycYxj_?tSDpsPV5Vtu70ss`jOziViA{6bziG4ff%?$Uu##*|=o8dpc&ySkq#9n3)` zNcnboYiDAD6D*(#aj8L8{iRbgoq2Z(mEqZka0=tNG1Kq-ZLGRPa;!E49;+M*0j{*G zJ$)a(upM@K{-Ces$&=i!0~%^;y9?($zr;u4N%CiJox=#G>;C34k3U?cv0-+XjhQ_f z<>G5Y8579@E~$(*XYwe*-oD@a&}VR*pQ?Z55vLzVE#$cM6%tvPB3pmY_v>40#7SdL z)7vje=QH|rx2fl0^HjW3WHg$9L8zys&`13eyQL7~r*%R#0_ch~Pf z>zN)%c=-}fx*TcaY#FIfqcGMU%ep;sl}s&v_zU6qX6QhMXEpM&F2>fE+yY;~o zUJ_JCa2IGQA09};L^-LL*@E*FfzSqSe+YqpQTru86BdzSOMg7SMeeQUx2)tX(c;oA zViHtGKT+iN#2>_&@kSv!LOHAo)J%hTn5(GyZrnIxtptE)5etldWQqsbV+$Gy=PWMa z4p@4${wvi3Oy5ZXsBwi;F#gL4yPID|9QRyfnH;R!wx2bUla5i8&dI~p znE$2SXFiTtt2rE4lQLi^L(HVE*YznlaU})d`i_tF3b}(u1$&ZSVfHlb`?sVtiPcc! z-xjtX5uCe@-V3dTpWttIO>A&GJyTBzTXL7ZlzyXtbmFzZlbVafS5A-_XCB+V*_5D9 zxN*C4epL7T^2>~Kn{Xt8|AcJiJ)jXq=Ym^=ANd;zd`!%1wjV~>_Sa?}^~VVPl9ePI z+CWW!6N}_=*ceo8J1_u~hatJk5LuGsw*#=AL1~GOYel@{;$N2oMgC zzh51(^9!oRSl!Ac^HK4}X=c=TSg93>*%V(29Ls%}5XW_=m*1KCtCh8f_Feyi8zXnGG!scD*Xc z+C*h39f9#^Z`r zEf@0aZWI>C&unk8MoN|-sNoCTqryCg`NcLSBBf%Z!xXefw_R?Yn?DBi>&2W}+-p z#3J4^J3WgDAmznY=%gZCPKNoMZ_th=pqPy2S$*XC@^KdB?;lyJzhvS0&?9QGEoav= zVp7bkJ44n|y4V{u!F)Ntw^&slUI93`F_+OcOddRDI`z7|_~IH}ol|%nquFqtBQ`>U zy?F;L&mZl{zG%6?d`xC@#FAroDqGT3M`zB=6ah*(A`chf9valv103nJ`7LtU-^{7P zV63-oo`kX^5Dcq!71=Fc+W=J{{d#M-GF4>sh(1Cc6zjiA3Lxvp8$%W4Jl38QHcW8AyZ z>TlYahbP^yrXkpKWo(4f1j1IX+pCwE0w?{fDvwyuNgm)Cwt3MeDZ+X_jr}LL&VhTl zd26f=ED76Dh9|~-y4}kvVx@QpOvhufPiO-o>cNv%;GJt4h>0Z}$tk;aQ+x|iC-JpU zbP1Wrw%;WdN`nttwYBv$lJ*FFS#qEWzYX55ULZJbyo;2`tLLrctx-E}5HS#7K8xUE zk%z&zEaUD2-CJ9aXRZfH>BZAvt@m^eKHuo_){Hv!xmJ6fmrgW?XV~e#|g5NdH*ERRKjl^AS$xr8((v`RE{y zFrqNe8-olrQCB0u7x7|`+;8n@_{g;4&il^UQO zAluJE`K%pmwxHNg_GXr$<`dYzdcalM?G#>u#2;iBDkjMFTfu?)XT1j{L8@Lg1CeQy zYPkCJjOR&*#w|Eg_S=`qGiSBPcWDm4m{Ykum=|?bm$C|X{dN(!of@!xedn_6@gGY7 z{0Cltqscz0js6RLJJ)y-CV{3#2T1=oj=c>%Bt5D`+ye;Sb^Th&6G!jZEj!j#a}4OW z1#_9r-8-x4d6F(j$sERaLY`Z{(L7R#i)5yy4xlotrS40WdZl>Ij*hngK`Dr3QL z-iFM=3=cD(BwP*$r~&BV`Fr{i%{jP{zs?#E$tsz+5e=t^8&iGi?G_?2!r_3d^}nK> zyRIP8_Wj1cw0|QYa16=~l!`PO+`6|=Aqd{KlMu*BC>)q0*u3Q|<80}9lj2@%4lW7T z!M@GARK$p@kQ!(e=!L~xg&@K4A1E_l0&pg(&4V2Ur!Y#9EIuTwv93nRlje~5f{x` z-mD2`Sv+;f6kfj1V}1AMhci(8Y!jg-iq|4F>0tIX18Z6!eGKXq2sqNFo%zRBoRBET z1s2bYqCBFHfE?+vSdDn?gpfbZW7OIAM^ljO{;C?SqVZnjS@$Ko@N` zwn(;KJAu{fZcvt%j1eUWot(jBX?MFTrO>^^--$T)5bgrIb;=l3?+?i8zXH#1aLy*i zXMqmvJ%~8wk36J1-W|ot1_6G3^=#!d7JkTal z7d$Fgcn>0j{GqsqvGjc`8OV3WJDTSc&Y?x1AHYeKq-IOlz{LKK0G{2VxcN69Qyw)m zh9%|+K1>~}roh`oowaVOcw*qP)-3@fHXO~?W?U7wXVgX8#_g_L%QR`dNr9kiV#}NQT^;UJ5`T0L)rkYT6A#Z^3B2R<`^PWvs^aP=@h*eVBB`RC5u_T zj~+pvc9pj4Xv#RchT!eMTGPvWO~3=E#ftO4eBJ=pO>Ua zBNm4;K4d^cpQc>UE)`BIt_k19KIca=CF!$2uK?3;%Uv-?wC>o3HNqjG7=`{`VCrJtL=> z)_(t$sxl_zGjQqm`8HBm4&laSX9>EHNFx`q&-MYb$s+e5OO2fZ<+3SGExB(tcxHv* zJ80U~Cu_|PK*KnMnUv`AjH{X|L}x{tQ24a4s1Rip;?6N%`E|#&=Ss!BPH>>lb{;t7 zNgy1<#uf@)r zSS!xuIr2(U3V86JIm5DIYbU*AFkOqYfNyq*4so^J-+@eM5H z+xUld!2ChR&Jrr1XVmxbu`9zDmZqoz-!E^nU+V?vJS_u&?#Y{v!Ds9Uj$ZP3B2t?O zR;CRe)H_)pc>H>GGECdd5{PBH0r1LRnJV}%woi#SiotQ#Up3Zjgum(17@x@ep5e>; zo-R-zLqwO}SgUB_!Mpdo<3W7-N9#dGqm;P5=JW&m_L{P-YlI)*0` zqA3eu+pOB^r9X+AN_C@_GG zh^_wWH5-%$phXSX&9$PiyPOZtsS;+?t{(E#CiAwwP~3Qm&l$E}Ilzb^I%NP?YtTun zu@<-~#ZhRB>6nQn-()q$ML(u%PB_*EmOMq_w$}BE$S3p4kPNOA9mVa+gR^=bk}ix{ zgKeMKL@Iqeqst>SdSq0pzUn24fiw_JYwv|TYJPiu34pfBQ{uWO*;#O$dss%)Vp)HM z0#>18ynFDpFsHC$r&-nFRioh&Hb1hBX~=%mD67#KM-N8!LQ=7m-wVT z^=uegyAZAYSTpbG0db_%4&iCUrasF!)1+L!lDkX5D|qrk0PkT=5v)rF>3XHFc0%mC z5$~MfGU2?H|LXTnLf4OzecVNhknLACH!ukd`WS~oSn`J2?5_`Zi1)2Hu%CQ|+dTD!+jeXIhiwtOK4nlenlB`8sswp*<(~V{xJ~Dya%D8>{QXJy zlW68<+Tcb770>m(*e0tQDPFilu3la4M68Ej5}oBMgsZlS5%2E*ODOs_3z2gKBB2j{aNe?&JMeClS6^3jLWYw zj{Q-KboH`PiU+!guUXccj3GXUQtXRQU~%R|!T$I7wRTQtX!t>t`eEMGs)>FCf@-fy zfc3U+x_%e4cr)uCgk6>Im!o>y>sao4lU;kF9t+#{)R@TeS7X$+GXvG@!Wt=N0H$M+ z4W?N;Z%@3xy*)sOrs}9}{G0&tqiN%>La)opgG6YGH*ag>kRP~Tu-$V~*8#)Udn)+T zSL@|V`zdw>*S0TBDNVcso!O`c>nEKsHwUk4lp4j|XK5`yo?o{7!>Wi5D>=exm)V}?`~)#~=TA~BQ2**7kPU80t5%d7 zP_UJL4DK8%Pcx;!i!qR$o-or{M;q4sVTmPHs>h;%5`_upD$4TuZ_9D^YV}pg#+VW? zS}a?Sz4RHF{V%q6r3K$9CcY~ZPL`-Y;g~lT_(a>(gwFSIx4Ul`@IUlXuTB4MuCYO| zl|rhqTlTr119@{!Emh?q=jg4F5piD%tF7mEV;L2-?dDh33h(qnip-1W6aa-R`*^IK zkSt#AT5MNx+iI6gPGIhosARh%X9?_C?B@Qx_#$&Nmvj=uR21B~zIM4>_Dd+aaPY_? zO*~|$IrLke@N`VJ0zqBi`8VlwdQIcM>E08z_tEPbx&I^ED=fqdcnn=WlA&7j`oRbS z9?VOg=L3q3#)7(KT$MEy&Fdkbl*`qk3vzx84Fv0CVyUIv#)}~Pmx&QFG zU?AhsDcTDHGJl9BtvA0srB@RC6(0TQ&2T9f-x)b)W~;<9`{}*`=z}qNC^hN8tn;Dz zqEZ~UpiFWn)*D1$sXxR^vQTomv(lJ@psrV)+_~^h3YU*|QTy7O3d-HHtS(0C zbmjJtCZ+c&z}M}bL}mv`l2db`tPg2;UAkf9NJvk+=x}y|QG+V?>g~hEQ%$eG-_*=} za@S(&K(Xf1x$y1vQ%1ufrw4mSpI5|&pOW7`oMIN1$Mv-fP;bO6Yc<>djFJs4U7I2v za0R-0U+@9QgxPE8J7&UddsVqNT$F%DqS)AUsb_m@-%gngEPVa)8-|yW;<%abZbXNlmxZ! z;n%MvOoIIQ&<(n>QCi4+)(20}CO3GhznqC(i604pQ-40jcA>|7W(Edz>;U^9MXhn1 zFWsthU2L>LR&twR_g0G9Fu(Ujh!zUHa8|=KZCl5qIt?A>)oC!cH>n7>DpYNB5ymju zET`^$*&v98hFN*4pAEl69U>DaLGS5ouJ_#MphNTBi12WX(ZIlCqF_l5%~m*ovLKP! zRF7-IWQ)FR-rzNxIe=R~18~v}9ns+CF=V%*aQ4g_>2 zn`K4`VC$*hj`f$G6Wn}h_NlQdRFM(%z~*gz(?^#A^JM^K%`y_-y*QLs;n0aS03jt<6C&3e4hV1hfC*D&D z9>UbaunIeI#uPIsPxn0Y(ESfY@Tc^`Tw9==$?tRg8#jfV$nvBX7QGvaMNz$?%J7Yx zSG0`nc(Mwh@l+Mththt4aLIHi zU6AxMo)bJp?c&n@c%-q-Z)BE7ju#u`@kGZ!P{`oKbAoP4HI6fzNMxMsr0aBsQ%(Ir zzWFP2$tt=o*BWvR!)F#@uj6(Gx(pksLNBcB2y~Rt31<@5V>G%RG~`>T{>hQsp z{l)Lh$L`BJxk2bDw}Cz&L#Vw^+U~jpaZSs+-7DqyI$DJ$pO!N~4sYs-NW`-J5Y)7*w@wQl4ptz)O+Wq4-*I!J(|# zw5<}SEbul(N}+wC*8b({utD;Hc60XawC%IT481$en!Aq6XKR7^N5XNLMEE&Y#y8Lv zrhIdWCzA5i)Ilu2AMcOEuC31&6;JC5yahTN2Scos)@`~s$O*B$aA3FD7kUMpq5=`X z!Zfoijs9WTp7eAM(c{)t%HemT^{$1N^B0~Dq{JGn1h9Gqy**);hYUZIKvl-HkrOUk zp3rZe_FCduz$UqC$xqU58RrF~J+%6|BrU1vGa;K!p@~|0WnDg3U2!{#_<5yTc!m4D zQPru2NaQo?&4ub#@Y{_gneTVi#Gq?lN*VrR@`bnagmlTl%lHrTJ`cnx^Lv+utdkdg z;=z`GE#rT7ET!M2%9a0#=l(r(76E!(D2@zO{4{XedRV>(d?&eu`TfzRSLyVhOax~v zweUOp_iNzS&~}zT9#3im5i*8HjVS`f7V-U^YzTxeAcqO4y44naB%l)>+EWmVF>>biZ0YExlBKX*iuksb<5 z;P!5nNfTfrD-p;R5OG7T#8o_$iM5L-Uk<|nT_VIK_K@CChm+HP?r4D23JG6Q^a@#84ft=#@sMh%!imhU!cs9$Iw zS@pZ)a2qQXvd47?p$2pm3jRKh7(D3o&=#xN3OGPQIlc>tUmF3DuA?TQfq-+S5eM2>XN8;% zVFj>@nEbk$weGVIn>CR)XRyu-o1P?7c3+^FJeHTxPoS3Ft3OEs3S*0;1v*y-s(pjI zvqi)V?1x}!i#x7qY8L2fImC+9E!jU^S@UG$T+vZ43ew2zl|k3zyRB1BQ|Cm!-Ro0Pdu@FESz}~`B&x7DDYP%ea1O{K-~XZXI6F^ zRH7{{{Q1}p$vXRIqQJg<2L9;R-v4W6NY%O!KBtpO1na&PfLgbI4+fS1E*Jgj)SK@~ zGkI?M`uNt0qh_Tf@Gn&v1*2d~k%oEP$?-+-@Zu`lNiu#=)*KB2)w(B#7tK$PD4+!` z<5n5K<#$o|Vr5Txdbe&@ev*}tDyP9XORc*Z4KsW)o+JxI;pV8y#!376E_R{`MQ zYu|HLlS?p!|1CGaPMjj!z>I&19{~sA z`XA>LEOlz8H9U4tSkzxNcl|hka$7xA_FWD|fuS(ss%dd;I^sZwy6};(Ch!uThK{nO za!Xh-kHbcTdn7d`oI|7CwDD^u(Gj`^E`vJEbLs=)j9tVHIoEG_CJ`|N!J`u8Fbm-o zYz_1&xQs;_S{mAYs*WDcIlcYi|E7ZLt_J2(3dcryQD|!_ZcaF;3}Jf3PU;=e95zb# za=v)5*U~n<+tT(Mjw%f(0rMWr)}>I1%M2w7FWD*@4JnFJFC`DYlSH|n6>ZV%yHko; zn|yRRkw-b>!JL}U!t+61wx$++)6BI-B0~nZagmH^>l-cvqNIT@uU5;r=w{d5HyNVs zp4pjTv_#86Ya_CzV&O8cR+L3cT~R5 zswmaBloIDu@Qx|tpP|I*fS@fLFMrbryv8v}IR3>QFzu!I`r1P&oTkXyqd``26kEY~ zM>!}0`Ogf%<@5`lhf}N5hfz3u5rbY|JnAxccO%E@F2LpaN~YO|5?N#*D$fh-fWnEq zUd<@w!f@u_itD!si8tKHl|t|L0yIWp1>?HMG5hC_{bG!wY@g3WR6pLj@j#otPYcVM z+2W@3+hx`1-fUKE_bP}RSOOb`(YELjVWvLaztHh$LLv1x+Cce?<0afhvyWSS+8U=X zCq~RT+~Pf`k3!Zr@C_6a-f{V*0)k9_$F-EU9{gb9CK4X9KVa-5z%g-(G?uEc>DlZb z=n4MpEh;b|nF!gcXMX?+H{?6Ikyx{#HX8s_*hyCaGK2W)@%1Y?&)@z8g45mD_D zG-6!)Wm%UYhktLL2l{f*ndoWf`}%sila&bCH8f^q!8C4TH}`2-WV%ldwALZQYVq2Y zIVaZ|?`R2lir^xzNxH-e5VY#8JK2EvOF7J^$b02VscGcOt2kc~>pX?_-NNW&?f_bC zJH=?s*XBE2fggO`UcZ)h1}>k%yDu1V&0wl5Iyo`?JOdhtWJ;reVto(AP3u>_pPP7( zSTyarx=^|wqRt^S38^ik-=Rs*Vz=MnxWff{GRvc9^m%6wbm{5p05A1@tJSlnnMH6` zUY+nBbuT`-q__@G?r+Pa5snGe*sVo z%`Zm>!)oj*7hLGdD(z*Ym!L^p=NI875Ra9KS`KWSw%zgyN;e6!Ewf5n7hOL0$Az!UDnp(a@=XtN z%E@P5P80=Adf-E@qnJ!rXh+Nf9+JPg)~X9z{Sy(VkIrkNBFpDvh>w-SCPV`91FdHt zzl+O4^Op6Wz&hgNHa$=G{xZv}SXy~C#+-dl4YT>^sd_&fxj0U6k$dwj_o}?DK--)B zku+KOcVJ=>(VYx19oMB6a8=2`G`5ZQp>*4hOHyOzOYdV-MasrT+Y@+)TV-fQ2&xg< zgVkl_CU#FN=UF7h$~1zx3B!Q*RE3r5x_6Mr6Y;r~R;G2Ri9_}Y&b6|F^)?|*ne_qE z#&$KPi7ct8Hl&psL|v#128%6o_YMPASesdFOz0cu~d6@&^%&Zm)OKP4UtYCq1 z*~3OPm#wLxLCGXguUb`Z3ULYwoA?+YT^id~hkLz-LO*x*cye!V4+)2(%Klew(A?ea)b{ET&Z9ZOf#M0L&3*O89{ ztsgr09SyEhda#n{esySU-xx7*@jof;N>4JBeSgez8 z>XHI)g-2+t=Y2=}j%63zpXy{$m&QVq?o#K@;fmDM>n8@B7{RoH6Wph6g~!vNF3}Te zVY$893kL^EeqybQ)t6o9tOwlhYm;*5D_hCa=(g9?hPEgBgTYTN;A9RGrHxH8ScDi+W0={ zbG79@5Y73jJ-^mJ-^3=T9G2)-L+@vxx! zI@r+JG$2hCJRG4`Bz=%kj{`~Khpn!A$A6hcge)E++&q)+#XitY*{zi6Q=wjeY!5<< zQac`IA^Bo{M%PGnWt212dC0Y@$lRrNx=$CuS_1y`FWQ+gzQL{f8|)9OlS$*)AfK8S zH6rt1C38!3NE9W2?d}Nv+isrv&jAAPP{F@dZ2xadN4>x6HB@$aE5h7B!I^YAFsbXQ zGvN$MsX5e)$5iczr9okxeTFtkRigsI9D@o)Dyy03pz845w3w19J@8{gwmn|9_>2rZH)Zr zaVnDy%rEN=P&?W!5c%Z$*UZHZN%BdQl8M`Mxch-^hX8($?68~Ib*wsew}^RxEjWg$ zC20cg`rWpQW&nKGv5~+Cs)rZGU>=VLeE7=@F7B=TIYa^~AItsJ!jLg1T_GJ;4&C3t^B*V)ybZtjBp)a`1~Yp65hlFV z38?lHF<8AB2fB;@_P763-c9zMVPTeG@ARIXf@`ynWABx|+__F06I7wwX0aQGu2}h+ zRWpA5dijZ;+P&;aTbmS?>YOhnl(60A~>Ltx<&IhrRy0xyYJ0e^)Fhe!`QXkzW*VF8gt1_xQ$tA zd~n`JXWP<7=3pvI=Y+y<@cHss$wIiCV`)1G9!9ED@|bli0J2Nj)xMl|HoM_%LuOkHim`J&*y&LHILPaa3 z_(O3PBj-A6o)ejd#+5tJgz>7Rq&+A_;2E%qHu-}u zu~_LfptZ+Xw}u-Ny6y~w&_(eQWgY{zFn^~do2LxEbjHOq*G?o5pX*MZsS=alk>|-E zo7ORHHrydakAaWW%3>7d)b{*aYb7MaA$ z-Db6Q$@PlmkyURbnvDKtL-Jpuw@Vkf3rr=cmS|I3%qWa&;C0BG&Sv>y7OoP=>l4YK zCQNHn&fvT?WZf}~?nr4M+i}lEO#Wh0$6OS^bA*txtljFuC|7%Js;;UgJssGGrAo02Ef>1Xe2w zt-fIxmpnaU!-qD)U`~hNW4=^o`q8cA$}l=zO9A)-XT}G-UboMiaA6Sv63AOGqpWz>l;hVJgO{VeFj$~nFam`bIr8$@_ zktkhR_;v6kc( z`bZ!~+YW?u+g0$pD(-bK|F|bYwXZv-?f*fZ{>G96RH2Pkg;PSqDe|YA)aQ@ZsG#!s zAAWCNcTgQJY+(AuxzBI9NyZ;1#WU$OCC5z?_8&aPC~+RCudw%lP(!dbhmXLk_>1i} za3ox+GO+>l1w!h6=uSf(13Q|tfWnFzvxoEZ37=JoRd!cST4Kf@oSE|2=ZLq{n%^d8 z09BQz0lJNUjrq{x`OIc7z>*!Q4g-ir6FXZerq2f1XT5J2K1a#)qoh|m3Idy>;?nJ; z`|e3j7qaJy`pVYEU1hS>rm_FYcucOOj@@@L9tE;GkV_~c0nkOCAuqRIsyAy~apY$t zMIu|cCtQDlKv_0PMHHuUB1WwgN=MpBxn9hmm)$kY;qS3XhpN#_Tp5@BgpwT}eUPmj z+A?tUBX)Ui+oiPq=L!1sh)z5Mv8Oh#He&d8L;}q>{P8PpB<<1XSMJZG32nZHkJ@_1 zs+oCy)*A!+TPa~ajjMyOiU|p|CYc1)uA$#QFSiR7jwjN&u7|E_dW6{q0s<)Rk8o%& zo#9qDM+IHj@<1?!N=zI*7j1QmJ|d`^NZ8F4c}nA#;tg{0Nc=GDOLE%EAj7J#XHY2! ztSt^akq-aCB4PIbx4v>G=luRJP4XEKhC6G!)hS+W0g;L955D-2G_);v!eD_m;=0@F zI|C6LhRWfOCk6su^CZvjYWoS)a$3+Yy$p8cU+w-eD9pP6kFc1^fbZ4QC;!g$_6?)! J Date: Fri, 17 Aug 2018 14:17:10 +0300 Subject: [PATCH 05/11] [DE] Fix icons for rotation --- apps/documenteditor/main/resources/less/toolbar.less | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/documenteditor/main/resources/less/toolbar.less b/apps/documenteditor/main/resources/less/toolbar.less index e79f80b42..8c5a85faf 100644 --- a/apps/documenteditor/main/resources/less/toolbar.less +++ b/apps/documenteditor/main/resources/less/toolbar.less @@ -341,10 +341,10 @@ //.button-normal-icon(btn-dropcap, 50, @toolbar-icon-size); .button-normal-icon(btn-ic-doclang, 67, @toolbar-icon-size); -.button-normal-icon(rotate-270, 67, @toolbar-icon-size); -.button-normal-icon(rotate-90, 67, @toolbar-icon-size); -.button-normal-icon(flip-vert, 67, @toolbar-icon-size); -.button-normal-icon(flip-hor, 67, @toolbar-icon-size); +.button-normal-icon(rotate-90, 81, @toolbar-icon-size); +.button-normal-icon(rotate-270, 82, @toolbar-icon-size); +.button-normal-icon(flip-hor, 84, @toolbar-icon-size); +.button-normal-icon(flip-vert, 85, @toolbar-icon-size); @menu-icon-size: 22px; .menu-icon-normal(mnu-wrap-inline, 0, @menu-icon-size); From fbd59eaf24f87b5eefe21018139bbf839ba21734 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 23 Aug 2018 16:43:06 +0300 Subject: [PATCH 06/11] Fix comments: scroll to edit buttons, update height after closing edit box and adding reply. --- apps/common/main/lib/view/ReviewPopover.js | 47 ++++++++++++---------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/apps/common/main/lib/view/ReviewPopover.js b/apps/common/main/lib/view/ReviewPopover.js index d2738d796..067cef0a6 100644 --- a/apps/common/main/lib/view/ReviewPopover.js +++ b/apps/common/main/lib/view/ReviewPopover.js @@ -196,7 +196,7 @@ define([ } parentView.scroller.scrollTop(scrollPos); - view.autoScrollToEditButtons(); + parentView.autoScrollToEditButtons(); } if (textBox && textBox.length) { @@ -216,23 +216,6 @@ define([ this.textBox.unbind('input propertychange'); this.textBox = undefined; } - }, - autoScrollToEditButtons: function () { - var button = $('#id-comments-change-popover'), // TODO: add to cache - btnBounds = null, - contentBounds = this.el.getBoundingClientRect(), - moveY = 0, - padding = 7; - - if (button.length) { - btnBounds = button.get(0).getBoundingClientRect(); - if (btnBounds && contentBounds) { - moveY = contentBounds.bottom - (btnBounds.bottom + padding); - if (moveY < 0) { - parentView.scroller.scrollTop(parentView.scroller.getScrollTop() - moveY); - } - } - } } } })()); @@ -328,7 +311,7 @@ define([ me.hookTextBox(); - this.autoScrollToEditButtons(); + me.autoScrollToEditButtons(); this.setFocusToTextBox(); } else { if (!showEditBox) { @@ -347,7 +330,7 @@ define([ me.hookTextBox(); - this.autoScrollToEditButtons(); + me.autoScrollToEditButtons(); this.setFocusToTextBox(); } } @@ -380,7 +363,7 @@ define([ this.autoHeightTextBox(); me.hookTextBox(); - this.autoScrollToEditButtons(); + me.autoScrollToEditButtons(); this.setFocusToTextBox(); } else if (btn.hasClass('btn-reply', false)) { if (showReplyBox) { @@ -388,6 +371,7 @@ define([ me.fireEvent('comment:addReply', [commentId, this.getActiveTextBoxVal()]); me.fireEvent('comment:closeEditing'); + me.calculateSizeOfContent(); readdresolves(); } @@ -774,6 +758,8 @@ define([ sdkBoundsTopPos = 0; if (commentsView && arrowView && commentsView.get(0)) { + var scrollPos = this.scroller.getScrollTop(); + commentsView.css({height: '100%'}); contentBounds = commentsView.get(0).getBoundingClientRect(); @@ -813,6 +799,7 @@ define([ arrowPosY = Math.min(arrowPosY, sdkBoundsHeight - (sdkPanelHeight + this.arrow.margin + this.arrow.width)); arrowView.css({top: arrowPosY + 'px'}); + this.scroller.scrollTop(scrollPos); } else { outerHeight = windowHeight; @@ -922,6 +909,24 @@ define([ return this.popover; }, + autoScrollToEditButtons: function () { + var button = $('#id-comments-change-popover'), // TODO: add to cache + btnBounds = null, + contentBounds = this.$window[0].getBoundingClientRect(), + moveY = 0, + padding = 7; + + if (button.length) { + btnBounds = button.get(0).getBoundingClientRect(); + if (btnBounds && contentBounds) { + moveY = contentBounds.bottom - (btnBounds.bottom + padding); + if (moveY < 0) { + this.scroller.scrollTop(this.scroller.getScrollTop() - moveY); + } + } + } + }, + textAddReply : 'Add Reply', textAdd : "Add", textCancel : 'Cancel', From a7ab7b4f1941cbbd3aebe84f3baacecaab448ac2 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 28 Aug 2018 14:24:09 +0300 Subject: [PATCH 07/11] Don't add hyperlink when file menu is opened --- apps/documenteditor/main/app/view/DocumentHolder.js | 2 +- apps/presentationeditor/main/app/view/DocumentHolder.js | 2 +- apps/spreadsheeteditor/main/app/controller/Toolbar.js | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/documenteditor/main/app/view/DocumentHolder.js b/apps/documenteditor/main/app/view/DocumentHolder.js index 415fd7d13..b3fb78543 100644 --- a/apps/documenteditor/main/app/view/DocumentHolder.js +++ b/apps/documenteditor/main/app/view/DocumentHolder.js @@ -673,7 +673,7 @@ define([ var onDialogAddHyperlink = function() { var win, props, text; - if (me.api && me.mode.isEdit && !me._isDisabled){ + if (me.api && me.mode.isEdit && !me._isDisabled && !DE.getController('LeftMenu').leftMenu.menuFile.isVisible()){ var handlerDlg = function(dlg, result) { if (result == 'ok') { props = dlg.getSettings(); diff --git a/apps/presentationeditor/main/app/view/DocumentHolder.js b/apps/presentationeditor/main/app/view/DocumentHolder.js index 0ff9ee452..b8b8aba62 100644 --- a/apps/presentationeditor/main/app/view/DocumentHolder.js +++ b/apps/presentationeditor/main/app/view/DocumentHolder.js @@ -583,7 +583,7 @@ define([ var onDialogAddHyperlink = function() { var win, props, text; - if (me.api && me.mode.isEdit && !me._isDisabled){ + if (me.api && me.mode.isEdit && !me._isDisabled && !PE.getController('LeftMenu').leftMenu.menuFile.isVisible()){ var handlerDlg = function(dlg, result) { if (result == 'ok') { props = dlg.getSettings(); diff --git a/apps/spreadsheeteditor/main/app/controller/Toolbar.js b/apps/spreadsheeteditor/main/app/controller/Toolbar.js index 6606b5ff1..baee0fb5a 100644 --- a/apps/spreadsheeteditor/main/app/controller/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/controller/Toolbar.js @@ -1437,7 +1437,8 @@ define([ e.stopPropagation(); }, 'command+k,ctrl+k': function (e) { - if (me.editMode && !me.toolbar.mode.isEditMailMerge && !me.toolbar.mode.isEditDiagram && !me.api.isCellEdited && !me._state.multiselect && !me._state.inpivot) + if (me.editMode && !me.toolbar.mode.isEditMailMerge && !me.toolbar.mode.isEditDiagram && !me.api.isCellEdited && !me._state.multiselect && !me._state.inpivot && + !me.getApplication().getController('LeftMenu').leftMenu.menuFile.isVisible()) me.onHyperlink(); e.preventDefault(); }, From 3dac3f04013e63a7494be8b52db006b8ecb54d82 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 28 Aug 2018 14:25:03 +0300 Subject: [PATCH 08/11] Default cursor in comment window --- apps/common/main/resources/less/window.less | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/common/main/resources/less/window.less b/apps/common/main/resources/less/window.less index 8e3302440..f0661610f 100644 --- a/apps/common/main/resources/less/window.less +++ b/apps/common/main/resources/less/window.less @@ -34,6 +34,7 @@ opacity: 0; position: fixed; + cursor: default; > .header { height: 34px; From a345d02840ab5f052c75c1fbeaf0b969cb45aad6 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 30 Aug 2018 16:53:46 +0300 Subject: [PATCH 09/11] [PE] Add rotation to image and shape settings in the right panel --- .../main/app/template/ImageSettings.template | 26 ++++++++ .../main/app/template/ShapeSettings.template | 32 +++++++++ .../main/app/view/ImageSettings.js | 66 ++++++++++++++++++- .../main/app/view/ShapeSettings.js | 66 ++++++++++++++++++- apps/presentationeditor/main/locale/en.json | 14 ++++ .../main/resources/less/toolbar.less | 5 ++ 6 files changed, 207 insertions(+), 2 deletions(-) diff --git a/apps/presentationeditor/main/app/template/ImageSettings.template b/apps/presentationeditor/main/app/template/ImageSettings.template index 709adceca..d1c9ef2fa 100644 --- a/apps/presentationeditor/main/app/template/ImageSettings.template +++ b/apps/presentationeditor/main/app/template/ImageSettings.template @@ -22,6 +22,32 @@

+ + + + + + + + +
+
+
+
+ + + +
+
+
+
+ + + + +
+ + diff --git a/apps/presentationeditor/main/app/template/ShapeSettings.template b/apps/presentationeditor/main/app/template/ShapeSettings.template index f86e7770a..f97d33753 100644 --- a/apps/presentationeditor/main/app/template/ShapeSettings.template +++ b/apps/presentationeditor/main/app/template/ShapeSettings.template @@ -116,6 +116,38 @@
+ + +
+ + + + + + + + + + + + + + +
+ +
+
+
+
+
+ +
+
+
+
+
+ +
diff --git a/apps/presentationeditor/main/app/view/ImageSettings.js b/apps/presentationeditor/main/app/view/ImageSettings.js index 189eb1188..4a13258f1 100644 --- a/apps/presentationeditor/main/app/view/ImageSettings.js +++ b/apps/presentationeditor/main/app/view/ImageSettings.js @@ -139,6 +139,46 @@ define([ this.fireEvent('editcomplete', this); }, this)); + this.btnRotate270 = new Common.UI.Button({ + cls: 'btn-toolbar', + iconCls: 'rotate-270', + value: 0, + hint: this.textHint270 + }); + this.btnRotate270.render( $('#image-button-270', this.$el)); + this.btnRotate270.on('click', _.bind(this.onBtnRotateClick, this)); + this.lockedControls.push(this.btnRotate270); + + this.btnRotate90 = new Common.UI.Button({ + cls: 'btn-toolbar', + iconCls: 'rotate-90', + value: 1, + hint: this.textHint90 + }); + this.btnRotate90.render( $('#image-button-90', this.$el)); + this.btnRotate90.on('click', _.bind(this.onBtnRotateClick, this)); + this.lockedControls.push(this.btnRotate90); + + this.btnFlipV = new Common.UI.Button({ + cls: 'btn-toolbar', + iconCls: 'flip-vert', + value: 0, + hint: this.textHintFlipV + }); + this.btnFlipV.render( $('#image-button-flipv', this.$el)); + this.btnFlipV.on('click', _.bind(this.onBtnFlipClick, this)); + this.lockedControls.push(this.btnFlipV); + + this.btnFlipH = new Common.UI.Button({ + cls: 'btn-toolbar', + iconCls: 'flip-hor', + value: 1, + hint: this.textHintFlipH + }); + this.btnFlipH.render( $('#image-button-fliph', this.$el)); + this.btnFlipH.on('click', _.bind(this.onBtnFlipClick, this)); + this.lockedControls.push(this.btnFlipH); + this.linkAdvanced = $('#image-advanced-link'); this.lblReplace = $('#image-lbl-replace'); $(this.el).on('click', '#image-advanced-link', _.bind(this.openAdvancedSettings, this)); @@ -268,6 +308,23 @@ define([ } }, + onBtnRotateClick: function(btn) { + var properties = new Asc.asc_CImgProperty(); + properties.asc_putRot((btn.options.value==1 ? 90 : 270) * 3.14159265358979 / 180); + this.api.ImgApply(properties); + this.fireEvent('editcomplete', this); + }, + + onBtnFlipClick: function(btn) { + var properties = new Asc.asc_CImgProperty(); + if (btn.options.value==1) + properties.asc_putFlipH(true); + else + properties.asc_putFlipV(true); + this.api.ImgApply(properties); + this.fireEvent('editcomplete', this); + }, + setLocked: function (locked) { this._locked = locked; }, @@ -293,7 +350,14 @@ define([ textFromFile: 'From File', textAdvanced: 'Show advanced settings', textEditObject: 'Edit Object', - textEdit: 'Edit' + textEdit: 'Edit', + textRotation: 'Rotation', + textRotate90: 'Rotate 90°', + textFlip: 'Flip', + textHint270: 'Rotate Left 90°', + textHint90: 'Rotate Right 90°', + textHintFlipV: 'Flip Vertical', + textHintFlipH: 'Flip Horizontal' }, PE.Views.ImageSettings || {})); }); \ No newline at end of file diff --git a/apps/presentationeditor/main/app/view/ShapeSettings.js b/apps/presentationeditor/main/app/view/ShapeSettings.js index ca5de8ee2..18079723b 100644 --- a/apps/presentationeditor/main/app/view/ShapeSettings.js +++ b/apps/presentationeditor/main/app/view/ShapeSettings.js @@ -1290,6 +1290,46 @@ define([ this.btnChangeShape.render( $('#shape-btn-change')) ; this.lockedControls.push(this.btnChangeShape); + this.btnRotate270 = new Common.UI.Button({ + cls: 'btn-toolbar', + iconCls: 'rotate-270', + value: 0, + hint: this.textHint270 + }); + this.btnRotate270.render( $('#shape-button-270', me.$el)); + this.btnRotate270.on('click', _.bind(this.onBtnRotateClick, this)); + this.lockedControls.push(this.btnRotate270); + + this.btnRotate90 = new Common.UI.Button({ + cls: 'btn-toolbar', + iconCls: 'rotate-90', + value: 1, + hint: this.textHint90 + }); + this.btnRotate90.render( $('#shape-button-90', me.$el)); + this.btnRotate90.on('click', _.bind(this.onBtnRotateClick, this)); + this.lockedControls.push(this.btnRotate90); + + this.btnFlipV = new Common.UI.Button({ + cls: 'btn-toolbar', + iconCls: 'flip-vert', + value: 0, + hint: this.textHintFlipV + }); + this.btnFlipV.render( $('#shape-button-flipv', me.$el)); + this.btnFlipV.on('click', _.bind(this.onBtnFlipClick, this)); + this.lockedControls.push(this.btnFlipV); + + this.btnFlipH = new Common.UI.Button({ + cls: 'btn-toolbar', + iconCls: 'flip-hor', + value: 1, + hint: this.textHintFlipH + }); + this.btnFlipH.render( $('#shape-button-fliph', me.$el)); + this.btnFlipH.on('click', _.bind(this.onBtnFlipClick, this)); + this.lockedControls.push(this.btnFlipH); + this.linkAdvanced = $('#shape-advanced-link'); $(this.el).on('click', '#shape-advanced-link', _.bind(this.openAdvancedSettings, this)); }, @@ -1544,6 +1584,23 @@ define([ this.colorsGrad.updateColors(Common.Utils.ThemeColor.getEffectColors(), Common.Utils.ThemeColor.getStandartColors()); }, + onBtnRotateClick: function(btn) { + var properties = new Asc.asc_CShapeProperty(); + properties.asc_putRot((btn.options.value==1 ? 90 : 270) * 3.14159265358979 / 180); + this.api.ShapeApply(properties); + this.fireEvent('editcomplete', this); + }, + + onBtnFlipClick: function(btn) { + var properties = new Asc.asc_CShapeProperty(); + if (btn.options.value==1) + properties.asc_putFlipH(true); + else + properties.asc_putFlipV(true); + this.api.ShapeApply(properties); + this.fireEvent('editcomplete', this); + }, + _pt2mm: function(value) { return (value * 25.4 / 72.0); }, @@ -1643,6 +1700,13 @@ define([ textStyle: 'Style', textGradient: 'Gradient', textBorderSizeErr: 'The entered value is incorrect.
Please enter a value between 0 pt and 1584 pt.', - strType: 'Type' + strType: 'Type', + textRotation: 'Rotation', + textRotate90: 'Rotate 90°', + textFlip: 'Flip', + textHint270: 'Rotate Left 90°', + textHint90: 'Rotate Right 90°', + textHintFlipV: 'Flip Vertical', + textHintFlipH: 'Flip Horizontal' }, PE.Views.ShapeSettings || {})); }); diff --git a/apps/presentationeditor/main/locale/en.json b/apps/presentationeditor/main/locale/en.json index e9a07a9e7..f60fba5e6 100644 --- a/apps/presentationeditor/main/locale/en.json +++ b/apps/presentationeditor/main/locale/en.json @@ -1037,6 +1037,13 @@ "PE.Views.ImageSettings.textOriginalSize": "Default Size", "PE.Views.ImageSettings.textSize": "Size", "PE.Views.ImageSettings.textWidth": "Width", + "PE.Views.ImageSettings.textRotation": "Rotation", + "PE.Views.ImageSettings.textRotate90": "Rotate 90°", + "PE.Views.ImageSettings.textFlip": "Flip", + "PE.Views.ImageSettings.textHint270": "Rotate Left 90°", + "PE.Views.ImageSettings.textHint90": "Rotate Right 90°", + "PE.Views.ImageSettings.textHintFlipV": "Flip Vertical", + "PE.Views.ImageSettings.textHintFlipH": "Flip Horizontal", "PE.Views.ImageSettingsAdvanced.cancelButtonText": "Cancel", "PE.Views.ImageSettingsAdvanced.okButtonText": "OK", "PE.Views.ImageSettingsAdvanced.textAlt": "Alternative Text", @@ -1148,6 +1155,13 @@ "PE.Views.ShapeSettings.txtNoBorders": "No Line", "PE.Views.ShapeSettings.txtPapyrus": "Papyrus", "PE.Views.ShapeSettings.txtWood": "Wood", + "PE.Views.ShapeSettings.textRotation": "Rotation", + "PE.Views.ShapeSettings.textRotate90": "Rotate 90°", + "PE.Views.ShapeSettings.textFlip": "Flip", + "PE.Views.ShapeSettings.textHint270": "Rotate Left 90°", + "PE.Views.ShapeSettings.textHint90": "Rotate Right 90°", + "PE.Views.ShapeSettings.textHintFlipV": "Flip Vertical", + "PE.Views.ShapeSettings.textHintFlipH": "Flip Horizontal", "PE.Views.ShapeSettingsAdvanced.cancelButtonText": "Cancel", "PE.Views.ShapeSettingsAdvanced.okButtonText": "OK", "PE.Views.ShapeSettingsAdvanced.strColumns": "Columns", diff --git a/apps/presentationeditor/main/resources/less/toolbar.less b/apps/presentationeditor/main/resources/less/toolbar.less index 8840f802f..fc165252d 100644 --- a/apps/presentationeditor/main/resources/less/toolbar.less +++ b/apps/presentationeditor/main/resources/less/toolbar.less @@ -289,6 +289,11 @@ .toolbar-btn-icon(btn-save-coauth, 69, @toolbar-icon-size); //.toolbar-btn-icon(btn-insertequation, 74, @toolbar-icon-size); +//.toolbar-btn-icon(rotate-90, 79, @toolbar-icon-size); +//.toolbar-btn-icon(rotate-270, 80, @toolbar-icon-size); +//.toolbar-btn-icon(flip-hor, 81, @toolbar-icon-size); +//.toolbar-btn-icon(flip-vert, 82, @toolbar-icon-size); + // add slide //.btn-toolbar .btn-addslide {background-position: 0 -120px;} //.btn-toolbar.active > .btn-addslide, From 3455b57289995caee3672a92ee48073684264ab8 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 30 Aug 2018 17:11:49 +0300 Subject: [PATCH 10/11] [SSE] Add rotation to image and shape settings in the right panel --- .../main/app/template/ImageSettings.template | 26 +++++++ .../main/app/template/ShapeSettings.template | 32 +++++++++ .../main/app/view/ImageSettings.js | 66 +++++++++++++++++- .../main/app/view/ShapeSettings.js | 68 ++++++++++++++++++- apps/spreadsheeteditor/main/locale/en.json | 14 ++++ .../main/resources/less/toolbar.less | 5 ++ 6 files changed, 209 insertions(+), 2 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/template/ImageSettings.template b/apps/spreadsheeteditor/main/app/template/ImageSettings.template index ce4c7e79d..bef0c6502 100644 --- a/apps/spreadsheeteditor/main/app/template/ImageSettings.template +++ b/apps/spreadsheeteditor/main/app/template/ImageSettings.template @@ -29,6 +29,32 @@
+ + + + + + + + +
+
+
+
+ + + +
+
+
+
+ + + + +
+ + diff --git a/apps/spreadsheeteditor/main/app/template/ShapeSettings.template b/apps/spreadsheeteditor/main/app/template/ShapeSettings.template index f86e7770a..f97d33753 100644 --- a/apps/spreadsheeteditor/main/app/template/ShapeSettings.template +++ b/apps/spreadsheeteditor/main/app/template/ShapeSettings.template @@ -116,6 +116,38 @@
+ + +
+ + + + + + + + + + + + + + +
+ +
+
+
+
+
+ +
+
+
+
+
+ +
diff --git a/apps/spreadsheeteditor/main/app/view/ImageSettings.js b/apps/spreadsheeteditor/main/app/view/ImageSettings.js index cb61b7d20..266f160f8 100644 --- a/apps/spreadsheeteditor/main/app/view/ImageSettings.js +++ b/apps/spreadsheeteditor/main/app/view/ImageSettings.js @@ -195,6 +195,46 @@ define([ this.lblReplace = $('#image-lbl-replace'); + this.btnRotate270 = new Common.UI.Button({ + cls: 'btn-toolbar', + iconCls: 'rotate-270', + value: 0, + hint: this.textHint270 + }); + this.btnRotate270.render( $('#image-button-270', me.$el)); + this.btnRotate270.on('click', _.bind(this.onBtnRotateClick, this)); + this.lockedControls.push(this.btnRotate270); + + this.btnRotate90 = new Common.UI.Button({ + cls: 'btn-toolbar', + iconCls: 'rotate-90', + value: 1, + hint: this.textHint90 + }); + this.btnRotate90.render( $('#image-button-90', me.$el)); + this.btnRotate90.on('click', _.bind(this.onBtnRotateClick, this)); + this.lockedControls.push(this.btnRotate90); + + this.btnFlipV = new Common.UI.Button({ + cls: 'btn-toolbar', + iconCls: 'flip-vert', + value: 0, + hint: this.textHintFlipV + }); + this.btnFlipV.render( $('#image-button-flipv', me.$el)); + this.btnFlipV.on('click', _.bind(this.onBtnFlipClick, this)); + this.lockedControls.push(this.btnFlipV); + + this.btnFlipH = new Common.UI.Button({ + cls: 'btn-toolbar', + iconCls: 'flip-hor', + value: 1, + hint: this.textHintFlipH + }); + this.btnFlipH.render( $('#image-button-fliph', me.$el)); + this.btnFlipH.on('click', _.bind(this.onBtnFlipClick, this)); + this.lockedControls.push(this.btnFlipH); + $(this.el).on('click', '#image-advanced-link', _.bind(this.openAdvancedSettings, this)); }, @@ -366,6 +406,23 @@ define([ })).show(); }, + onBtnRotateClick: function(btn) { + var properties = new Asc.asc_CImgProperty(); + properties.asc_putRot((btn.options.value==1 ? 90 : 270) * 3.14159265358979 / 180); + this.api.asc_setGraphicObjectProps(properties); + Common.NotificationCenter.trigger('edit:complete', this); + }, + + onBtnFlipClick: function(btn) { + var properties = new Asc.asc_CImgProperty(); + if (btn.options.value==1) + properties.asc_putFlipH(true); + else + properties.asc_putFlipV(true); + this.api.asc_setGraphicObjectProps(properties); + Common.NotificationCenter.trigger('edit:complete', this); + }, + setLocked: function (locked) { this._locked = locked; }, @@ -392,6 +449,13 @@ define([ textFromFile: 'From File', textEditObject: 'Edit Object', textEdit: 'Edit', - textAdvanced: 'Show advanced settings' + textAdvanced: 'Show advanced settings', + textRotation: 'Rotation', + textRotate90: 'Rotate 90°', + textFlip: 'Flip', + textHint270: 'Rotate Left 90°', + textHint90: 'Rotate Right 90°', + textHintFlipV: 'Flip Vertical', + textHintFlipH: 'Flip Horizontal' }, SSE.Views.ImageSettings || {})); }); \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/app/view/ShapeSettings.js b/apps/spreadsheeteditor/main/app/view/ShapeSettings.js index f9a74e426..0b324d26e 100644 --- a/apps/spreadsheeteditor/main/app/view/ShapeSettings.js +++ b/apps/spreadsheeteditor/main/app/view/ShapeSettings.js @@ -1314,6 +1314,46 @@ define([ this.btnChangeShape.render( $('#shape-btn-change')) ; this.lockedControls.push(this.btnChangeShape); + this.btnRotate270 = new Common.UI.Button({ + cls: 'btn-toolbar', + iconCls: 'rotate-270', + value: 0, + hint: this.textHint270 + }); + this.btnRotate270.render( $('#shape-button-270', me.$el)); + this.btnRotate270.on('click', _.bind(this.onBtnRotateClick, this)); + this.lockedControls.push(this.btnRotate270); + + this.btnRotate90 = new Common.UI.Button({ + cls: 'btn-toolbar', + iconCls: 'rotate-90', + value: 1, + hint: this.textHint90 + }); + this.btnRotate90.render( $('#shape-button-90', me.$el)); + this.btnRotate90.on('click', _.bind(this.onBtnRotateClick, this)); + this.lockedControls.push(this.btnRotate90); + + this.btnFlipV = new Common.UI.Button({ + cls: 'btn-toolbar', + iconCls: 'flip-vert', + value: 0, + hint: this.textHintFlipV + }); + this.btnFlipV.render( $('#shape-button-flipv', me.$el)); + this.btnFlipV.on('click', _.bind(this.onBtnFlipClick, this)); + this.lockedControls.push(this.btnFlipV); + + this.btnFlipH = new Common.UI.Button({ + cls: 'btn-toolbar', + iconCls: 'flip-hor', + value: 1, + hint: this.textHintFlipH + }); + this.btnFlipH.render( $('#shape-button-fliph', me.$el)); + this.btnFlipH.on('click', _.bind(this.onBtnFlipClick, this)); + this.lockedControls.push(this.btnFlipH); + $(this.el).on('click', '#shape-advanced-link', _.bind(this.openAdvancedSettings, this)); this.linkAdvanced = $('#shape-advanced-link'); }, @@ -1463,6 +1503,25 @@ define([ } }, + onBtnRotateClick: function(btn) { + var props = new Asc.asc_CShapeProperty(); + props.asc_putRot((btn.options.value==1 ? 90 : 270) * 3.14159265358979 / 180); + this.imgprops.asc_putShapeProperties(props); + this.api.asc_setGraphicObjectProps(this.imgprops); + Common.NotificationCenter.trigger('edit:complete', this); + }, + + onBtnFlipClick: function(btn) { + var props = new Asc.asc_CShapeProperty(); + if (btn.options.value==1) + props.asc_putFlipH(true); + else + props.asc_putFlipV(true); + this.imgprops.asc_putShapeProperties(props); + this.api.asc_setGraphicObjectProps(this.imgprops); + Common.NotificationCenter.trigger('edit:complete', this); + }, + UpdateThemeColors: function() { if (!this.btnBackColor) { this.btnBackColor = new Common.UI.ColorButton({ @@ -1668,6 +1727,13 @@ define([ textStyle: 'Style', textGradient: 'Gradient', textBorderSizeErr: 'The entered value is incorrect.
Please enter a value between 0 pt and 1584 pt.', - strType: 'Type' + strType: 'Type', + textRotation: 'Rotation', + textRotate90: 'Rotate 90°', + textFlip: 'Flip', + textHint270: 'Rotate Left 90°', + textHint90: 'Rotate Right 90°', + textHintFlipV: 'Flip Vertical', + textHintFlipH: 'Flip Horizontal' }, SSE.Views.ShapeSettings || {})); }); diff --git a/apps/spreadsheeteditor/main/locale/en.json b/apps/spreadsheeteditor/main/locale/en.json index 64ff02d93..68010b257 100644 --- a/apps/spreadsheeteditor/main/locale/en.json +++ b/apps/spreadsheeteditor/main/locale/en.json @@ -1388,6 +1388,13 @@ "SSE.Views.ImageSettings.textOriginalSize": "Default Size", "SSE.Views.ImageSettings.textSize": "Size", "SSE.Views.ImageSettings.textWidth": "Width", + "SSE.Views.ImageSettings.textRotation": "Rotation", + "SSE.Views.ImageSettings.textRotate90": "Rotate 90°", + "SSE.Views.ImageSettings.textFlip": "Flip", + "SSE.Views.ImageSettings.textHint270": "Rotate Left 90°", + "SSE.Views.ImageSettings.textHint90": "Rotate Right 90°", + "SSE.Views.ImageSettings.textHintFlipV": "Flip Vertical", + "SSE.Views.ImageSettings.textHintFlipH": "Flip Horizontal", "SSE.Views.ImageSettingsAdvanced.cancelButtonText": "Cancel", "SSE.Views.ImageSettingsAdvanced.okButtonText": "Ok", "SSE.Views.ImageSettingsAdvanced.textAlt": "Alternative Text", @@ -1647,6 +1654,13 @@ "SSE.Views.ShapeSettings.txtNoBorders": "No Line", "SSE.Views.ShapeSettings.txtPapyrus": "Papyrus", "SSE.Views.ShapeSettings.txtWood": "Wood", + "SSE.Views.ShapeSettings.textRotation": "Rotation", + "SSE.Views.ShapeSettings.textRotate90": "Rotate 90°", + "SSE.Views.ShapeSettings.textFlip": "Flip", + "SSE.Views.ShapeSettings.textHint270": "Rotate Left 90°", + "SSE.Views.ShapeSettings.textHint90": "Rotate Right 90°", + "SSE.Views.ShapeSettings.textHintFlipV": "Flip Vertical", + "SSE.Views.ShapeSettings.textHintFlipH": "Flip Horizontal", "SSE.Views.ShapeSettingsAdvanced.cancelButtonText": "Cancel", "SSE.Views.ShapeSettingsAdvanced.okButtonText": "OK", "SSE.Views.ShapeSettingsAdvanced.strColumns": "Columns", diff --git a/apps/spreadsheeteditor/main/resources/less/toolbar.less b/apps/spreadsheeteditor/main/resources/less/toolbar.less index a01721eea..c13b03a1c 100644 --- a/apps/spreadsheeteditor/main/resources/less/toolbar.less +++ b/apps/spreadsheeteditor/main/resources/less/toolbar.less @@ -168,6 +168,11 @@ .toolbar-btn-icon(btn-subscript, 85, @toolbar-icon-size); .toolbar-btn-icon(btn-superscript, 86, @toolbar-icon-size); +//.toolbar-btn-icon(rotate-90, 89, @toolbar-icon-size); +//.toolbar-btn-icon(rotate-270, 90, @toolbar-icon-size); +//.toolbar-btn-icon(flip-hor, 91, @toolbar-icon-size); +//.toolbar-btn-icon(flip-vert, 92, @toolbar-icon-size); + @menu-icon-size: 22px; .menu-btn-icon(mnu-align-center, 0, @menu-icon-size); .menu-btn-icon(mnu-align-just, 1, @menu-icon-size); From f60d5fafe9cd29a7502482a7ad2fe3eab1ce9280 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 30 Aug 2018 18:41:09 +0300 Subject: [PATCH 11/11] [PE][SSE] Bug 19378 --- .../template/ImageSettingsAdvanced.template | 26 ++++++++++ .../template/ShapeSettingsAdvanced.template | 26 ++++++++++ .../main/app/view/ImageSettingsAdvanced.js | 41 +++++++++++++++- .../main/app/view/ShapeSettingsAdvanced.js | 47 +++++++++++++++++-- apps/presentationeditor/main/locale/en.json | 10 ++++ .../template/ImageSettingsAdvanced.template | 26 ++++++++++ .../template/ShapeSettingsAdvanced.template | 26 ++++++++++ .../main/app/view/ImageSettingsAdvanced.js | 42 ++++++++++++++++- .../main/app/view/ShapeSettingsAdvanced.js | 47 +++++++++++++++++-- apps/spreadsheeteditor/main/locale/en.json | 10 ++++ 10 files changed, 287 insertions(+), 14 deletions(-) diff --git a/apps/presentationeditor/main/app/template/ImageSettingsAdvanced.template b/apps/presentationeditor/main/app/template/ImageSettingsAdvanced.template index d811bd244..337aff709 100644 --- a/apps/presentationeditor/main/app/template/ImageSettingsAdvanced.template +++ b/apps/presentationeditor/main/app/template/ImageSettingsAdvanced.template @@ -45,6 +45,32 @@ +
+
+
+ +
+
+
+
+
+ + + + + + + + +
+ + +
+
+
+
+
+
diff --git a/apps/presentationeditor/main/app/template/ShapeSettingsAdvanced.template b/apps/presentationeditor/main/app/template/ShapeSettingsAdvanced.template index 2b7149a8c..957639ea8 100644 --- a/apps/presentationeditor/main/app/template/ShapeSettingsAdvanced.template +++ b/apps/presentationeditor/main/app/template/ShapeSettingsAdvanced.template @@ -17,6 +17,32 @@
+
+
+
+ +
+
+
+
+
+ + + + + + + + +
+ + +
+
+
+
+
+
diff --git a/apps/presentationeditor/main/app/view/ImageSettingsAdvanced.js b/apps/presentationeditor/main/app/view/ImageSettingsAdvanced.js index 1fd3b5887..b8066688b 100644 --- a/apps/presentationeditor/main/app/view/ImageSettingsAdvanced.js +++ b/apps/presentationeditor/main/app/view/ImageSettingsAdvanced.js @@ -40,7 +40,8 @@ define([ 'text!presentationeditor/main/app/template/ImageSettingsAdvanced.template', 'common/main/lib/view/AdvancedSettingsWindow', - 'common/main/lib/component/MetricSpinner' + 'common/main/lib/component/MetricSpinner', + 'common/main/lib/component/CheckBox' ], function (contentTemplate) { 'use strict'; @@ -59,6 +60,7 @@ define([ 'text!presentationeditor/main/app/template/ImageSettingsAdvanced.tem title: this.textTitle, items: [ {panelId: 'id-adv-image-size', panelCaption: this.textPlacement}, + {panelId: 'id-adv-image-rotate', panelCaption: this.textRotation}, {panelId: 'id-adv-image-alttext', panelCaption: this.textAlt} ], contentTemplate: _.template(contentTemplate)({ @@ -171,6 +173,27 @@ define([ 'text!presentationeditor/main/app/template/ImageSettingsAdvanced.tem }); this.spinners.push(this.spnY); + // Rotation + this.spnAngle = new Common.UI.MetricSpinner({ + el: $('#image-advanced-spin-angle'), + step: 1, + width: 80, + defaultUnit : "°", + value: '0 °', + maxValue: 3600, + minValue: -3600 + }); + + this.chFlipHor = new Common.UI.CheckBox({ + el: $('#image-advanced-checkbox-hor'), + labelText: this.textHorizontally + }); + + this.chFlipVert = new Common.UI.CheckBox({ + el: $('#image-advanced-checkbox-vert'), + labelText: this.textVertically + }); + // Alt Text this.inputAltTitle = new Common.UI.InputField({ @@ -225,6 +248,11 @@ define([ 'text!presentationeditor/main/app/template/ImageSettingsAdvanced.tem this.spnY.setValue('', true); } + value = props.asc_getRot(); + this.spnAngle.setValue((value==undefined || value===null) ? '' : Math.floor(value*180/3.14159265358979+0.5), true); + this.chFlipHor.setValue(props.asc_getFlipH()); + this.chFlipVert.setValue(props.asc_getFlipV()); + value = props.asc_getTitle(); this.inputAltTitle.setValue(value ? value : ''); @@ -254,6 +282,10 @@ define([ 'text!presentationeditor/main/app/template/ImageSettingsAdvanced.tem if (this.isAltDescChanged) properties.asc_putDescription(this.textareaAltDescription.val()); + properties.asc_putRot(this.spnAngle.getNumberValue() * 3.14159265358979 / 180); + properties.asc_putFlipH(this.chFlipHor.getValue()=='checked'); + properties.asc_putFlipV(this.chFlipVert.getValue()=='checked'); + return { imageProps: properties }; }, @@ -289,7 +321,12 @@ define([ 'text!presentationeditor/main/app/template/ImageSettingsAdvanced.tem 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.' + 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.', + textRotation: 'Rotation', + textAngle: 'Angle', + textFlipped: 'Flipped', + textHorizontally: 'Horizontally', + textVertically: 'Vertically' }, PE.Views.ImageSettingsAdvanced || {})); }); \ No newline at end of file diff --git a/apps/presentationeditor/main/app/view/ShapeSettingsAdvanced.js b/apps/presentationeditor/main/app/view/ShapeSettingsAdvanced.js index abe18a36c..3f4951f61 100644 --- a/apps/presentationeditor/main/app/view/ShapeSettingsAdvanced.js +++ b/apps/presentationeditor/main/app/view/ShapeSettingsAdvanced.js @@ -41,7 +41,8 @@ define([ 'text!presentationeditor/main/app/template/ShapeSettingsAdvanced.template', 'common/main/lib/view/AdvancedSettingsWindow', 'common/main/lib/component/ComboBox', - 'common/main/lib/component/MetricSpinner' + 'common/main/lib/component/MetricSpinner', + 'common/main/lib/component/CheckBox' ], function (contentTemplate) { 'use strict'; @@ -61,6 +62,7 @@ define([ 'text!presentationeditor/main/app/template/ShapeSettingsAdvanced.tem title: this.textTitle, items: [ {panelId: 'id-adv-shape-width', panelCaption: this.textSize}, + {panelId: 'id-adv-shape-rotate', panelCaption: this.textRotation}, {panelId: 'id-adv-shape-shape', panelCaption: this.textWeightArrows}, {panelId: 'id-adv-shape-margins', panelCaption: this.strMargins}, {panelId: 'id-adv-shape-columns', panelCaption: this.strColumns}, @@ -230,6 +232,27 @@ define([ 'text!presentationeditor/main/app/template/ShapeSettingsAdvanced.tem }, this)); this.spinners.push(this.spnMarginRight); + // Rotation + this.spnAngle = new Common.UI.MetricSpinner({ + el: $('#shape-advanced-spin-angle'), + step: 1, + width: 80, + defaultUnit : "°", + value: '0 °', + maxValue: 3600, + minValue: -3600 + }); + + this.chFlipHor = new Common.UI.CheckBox({ + el: $('#shape-advanced-checkbox-hor'), + labelText: this.textHorizontally + }); + + this.chFlipVert = new Common.UI.CheckBox({ + el: $('#shape-advanced-checkbox-vert'), + labelText: this.textVertically + }); + // Shape this._arrCapType = [ {displayValue: this.textFlat, value: Asc.c_oAscLineCapType.Flat}, @@ -499,10 +522,10 @@ define([ 'text!presentationeditor/main/app/template/ShapeSettingsAdvanced.tem val = margins.get_Bottom(); this.spnMarginBottom.setValue((null !== val && undefined !== val) ? Common.Utils.Metric.fnRecalcFromMM(val) : '', true); } - this.btnsCategory[2].setDisabled(null === margins); // Margins + this.btnsCategory[3].setDisabled(null === margins); // Margins var shapetype = props.asc_getType(); - this.btnsCategory[3].setDisabled(shapetype=='line' || shapetype=='bentConnector2' || shapetype=='bentConnector3' + this.btnsCategory[4].setDisabled(shapetype=='line' || shapetype=='bentConnector2' || shapetype=='bentConnector3' || shapetype=='bentConnector4' || shapetype=='bentConnector5' || shapetype=='curvedConnector2' || shapetype=='curvedConnector3' || shapetype=='curvedConnector4' || shapetype=='curvedConnector5' || shapetype=='straightConnector1'); @@ -519,6 +542,11 @@ define([ 'text!presentationeditor/main/app/template/ShapeSettingsAdvanced.tem value = props.asc_getDescription(); this.textareaAltDescription.val(value ? value : ''); + value = props.asc_getRot(); + this.spnAngle.setValue((value==undefined || value===null) ? '' : Math.floor(value*180/3.14159265358979+0.5), true); + this.chFlipHor.setValue(props.asc_getFlipH()); + this.chFlipVert.setValue(props.asc_getFlipV()); + this._changedProps = new Asc.asc_CShapeProperty(); } }, @@ -530,6 +558,10 @@ define([ 'text!presentationeditor/main/app/template/ShapeSettingsAdvanced.tem if (this.isAltDescChanged) this._changedProps.asc_putDescription(this.textareaAltDescription.val()); + this._changedProps.asc_putRot(this.spnAngle.getNumberValue() * 3.14159265358979 / 180); + this._changedProps.asc_putFlipH(this.chFlipHor.getValue()=='checked'); + this._changedProps.asc_putFlipV(this.chFlipVert.getValue()=='checked'); + Common.localStorage.setItem("pe-settings-shaperatio", (this.btnRatio.pressed) ? 1 : 0); return { shapeProps: this._changedProps} ; }, @@ -538,7 +570,7 @@ define([ 'text!presentationeditor/main/app/template/ShapeSettingsAdvanced.tem if (props ){ var stroke = props.get_stroke(); if (stroke) { - this.btnsCategory[1].setDisabled(stroke.get_type() == Asc.c_oAscStrokeType.STROKE_NONE); // Weights & Arrows + this.btnsCategory[2].setDisabled(stroke.get_type() == Asc.c_oAscStrokeType.STROKE_NONE); // Weights & Arrows var value = stroke.get_linejoin(); for (var i=0; i +
+
+ +
+
+
+
+
+
+ + + + + + + +
+ + +
+
+
+
+
+
diff --git a/apps/spreadsheeteditor/main/app/template/ShapeSettingsAdvanced.template b/apps/spreadsheeteditor/main/app/template/ShapeSettingsAdvanced.template index 2ae9bfa02..8ed314425 100644 --- a/apps/spreadsheeteditor/main/app/template/ShapeSettingsAdvanced.template +++ b/apps/spreadsheeteditor/main/app/template/ShapeSettingsAdvanced.template @@ -17,6 +17,32 @@
+
+
+
+ +
+
+
+
+
+ + + + + + + + +
+ + +
+
+
+
+
+
diff --git a/apps/spreadsheeteditor/main/app/view/ImageSettingsAdvanced.js b/apps/spreadsheeteditor/main/app/view/ImageSettingsAdvanced.js index 74f43448a..b4bb98e96 100644 --- a/apps/spreadsheeteditor/main/app/view/ImageSettingsAdvanced.js +++ b/apps/spreadsheeteditor/main/app/view/ImageSettingsAdvanced.js @@ -40,7 +40,9 @@ define([ 'text!spreadsheeteditor/main/app/template/ImageSettingsAdvanced.template', 'common/main/lib/view/AdvancedSettingsWindow', - 'common/main/lib/component/InputField' + 'common/main/lib/component/InputField', + 'common/main/lib/component/MetricSpinner', + 'common/main/lib/component/CheckBox' ], function (contentTemplate) { 'use strict'; @@ -57,6 +59,7 @@ define([ 'text!spreadsheeteditor/main/app/template/ImageSettingsAdvanced.temp _.extend(this.options, { title: this.textTitle, items: [ + {panelId: 'id-adv-image-rotate', panelCaption: this.textRotation}, {panelId: 'id-adv-image-alttext', panelCaption: this.textAlt} ], contentTemplate: _.template(contentTemplate)({ @@ -74,6 +77,27 @@ define([ 'text!spreadsheeteditor/main/app/template/ImageSettingsAdvanced.temp var me = this; + // Rotation + this.spnAngle = new Common.UI.MetricSpinner({ + el: $('#image-advanced-spin-angle'), + step: 1, + width: 80, + defaultUnit : "°", + value: '0 °', + maxValue: 3600, + minValue: -3600 + }); + + this.chFlipHor = new Common.UI.CheckBox({ + el: $('#image-advanced-checkbox-hor'), + labelText: this.textHorizontally + }); + + this.chFlipVert = new Common.UI.CheckBox({ + el: $('#image-advanced-checkbox-vert'), + labelText: this.textVertically + }); + // Alt Text this.inputAltTitle = new Common.UI.InputField({ @@ -112,6 +136,11 @@ define([ 'text!spreadsheeteditor/main/app/template/ImageSettingsAdvanced.temp value = props.asc_getDescription(); this.textareaAltDescription.val(value ? value : ''); + value = props.asc_getRot(); + this.spnAngle.setValue((value==undefined || value===null) ? '' : Math.floor(value*180/3.14159265358979+0.5), true); + this.chFlipHor.setValue(props.asc_getFlipH()); + this.chFlipVert.setValue(props.asc_getFlipV()); + this._changedProps = new Asc.asc_CImgProperty(); } }, @@ -123,6 +152,10 @@ define([ 'text!spreadsheeteditor/main/app/template/ImageSettingsAdvanced.temp if (this.isAltDescChanged) this._changedProps.asc_putDescription(this.textareaAltDescription.val()); + this._changedProps.asc_putRot(this.spnAngle.getNumberValue() * 3.14159265358979 / 180); + this._changedProps.asc_putFlipH(this.chFlipHor.getValue()=='checked'); + this._changedProps.asc_putFlipV(this.chFlipVert.getValue()=='checked'); + return { imageProps: this._changedProps} ; }, @@ -132,7 +165,12 @@ define([ 'text!spreadsheeteditor/main/app/template/ImageSettingsAdvanced.temp 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.' + 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.', + textRotation: 'Rotation', + textAngle: 'Angle', + textFlipped: 'Flipped', + textHorizontally: 'Horizontally', + textVertically: 'Vertically' }, SSE.Views.ImageSettingsAdvanced || {})); }); \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/app/view/ShapeSettingsAdvanced.js b/apps/spreadsheeteditor/main/app/view/ShapeSettingsAdvanced.js index b06b78d65..2d8ab3521 100644 --- a/apps/spreadsheeteditor/main/app/view/ShapeSettingsAdvanced.js +++ b/apps/spreadsheeteditor/main/app/view/ShapeSettingsAdvanced.js @@ -41,7 +41,8 @@ define([ 'text!spreadsheeteditor/main/app/template/ShapeSettingsAdvanced.template', 'common/main/lib/view/AdvancedSettingsWindow', 'common/main/lib/component/ComboBox', - 'common/main/lib/component/MetricSpinner' + 'common/main/lib/component/MetricSpinner', + 'common/main/lib/component/CheckBox' ], function (contentTemplate) { 'use strict'; @@ -61,6 +62,7 @@ define([ 'text!spreadsheeteditor/main/app/template/ShapeSettingsAdvanced.temp title: this.textTitle, items: [ {panelId: 'id-adv-shape-width', panelCaption: this.textSize}, + {panelId: 'id-adv-shape-rotate', panelCaption: this.textRotation}, {panelId: 'id-adv-shape-shape', panelCaption: this.textWeightArrows}, {panelId: 'id-adv-shape-margins', panelCaption: this.strMargins}, {panelId: 'id-adv-shape-columns', panelCaption: this.strColumns}, @@ -246,6 +248,27 @@ define([ 'text!spreadsheeteditor/main/app/template/ShapeSettingsAdvanced.temp }, this)); this.spinners.push(this.spnMarginRight); + // Rotation + this.spnAngle = new Common.UI.MetricSpinner({ + el: $('#shape-advanced-spin-angle'), + step: 1, + width: 80, + defaultUnit : "°", + value: '0 °', + maxValue: 3600, + minValue: -3600 + }); + + this.chFlipHor = new Common.UI.CheckBox({ + el: $('#shape-advanced-checkbox-hor'), + labelText: this.textHorizontally + }); + + this.chFlipVert = new Common.UI.CheckBox({ + el: $('#shape-advanced-checkbox-vert'), + labelText: this.textVertically + }); + // Shape this._arrCapType = [ {displayValue: this.textFlat, value: Asc.c_oAscLineCapType.Flat}, @@ -533,10 +556,10 @@ define([ 'text!spreadsheeteditor/main/app/template/ShapeSettingsAdvanced.temp val = margins.asc_getBottom(); this.spnMarginBottom.setValue((null !== val && undefined !== val) ? Common.Utils.Metric.fnRecalcFromMM(val) : '', true); } - this.btnsCategory[2].setDisabled(null === margins); // Margins + this.btnsCategory[3].setDisabled(null === margins); // Margins var shapetype = shapeprops.asc_getType(); - this.btnsCategory[3].setDisabled(shapetype=='line' || shapetype=='bentConnector2' || shapetype=='bentConnector3' + this.btnsCategory[4].setDisabled(shapetype=='line' || shapetype=='bentConnector2' || shapetype=='bentConnector3' || shapetype=='bentConnector4' || shapetype=='bentConnector5' || shapetype=='curvedConnector2' || shapetype=='curvedConnector3' || shapetype=='curvedConnector4' || shapetype=='curvedConnector5' || shapetype=='straightConnector1'); @@ -553,6 +576,11 @@ define([ 'text!spreadsheeteditor/main/app/template/ShapeSettingsAdvanced.temp value = props.asc_getDescription(); this.textareaAltDescription.val(value ? value : ''); + value = props.asc_getRot(); + this.spnAngle.setValue((value==undefined || value===null) ? '' : Math.floor(value*180/3.14159265358979+0.5), true); + this.chFlipHor.setValue(props.asc_getFlipH()); + this.chFlipVert.setValue(props.asc_getFlipV()); + this._changedProps = new Asc.asc_CImgProperty(); } }, @@ -564,6 +592,10 @@ define([ 'text!spreadsheeteditor/main/app/template/ShapeSettingsAdvanced.temp if (this.isAltDescChanged) this._changedProps.asc_putDescription(this.textareaAltDescription.val()); + this._changedProps.asc_putRot(this.spnAngle.getNumberValue() * 3.14159265358979 / 180); + this._changedProps.asc_putFlipH(this.chFlipHor.getValue()=='checked'); + this._changedProps.asc_putFlipV(this.chFlipVert.getValue()=='checked'); + return { shapeProps: this._changedProps} ; }, @@ -571,7 +603,7 @@ define([ 'text!spreadsheeteditor/main/app/template/ShapeSettingsAdvanced.temp if (props ){ var stroke = props.asc_getStroke(); if (stroke) { - this.btnsCategory[1].setDisabled(stroke.asc_getType() == Asc.c_oAscStrokeType.STROKE_NONE); // Weights & Arrows + this.btnsCategory[2].setDisabled(stroke.asc_getType() == Asc.c_oAscStrokeType.STROKE_NONE); // Weights & Arrows var value = stroke.asc_getLinejoin(); for (var i=0; i