From 67f3751268e2ad77f6ece612a7c2c6930a844054 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 9 Feb 2017 15:40:16 +0300 Subject: [PATCH 1/7] [SSE] Add menu for special paste. --- .../main/app/controller/DocumentHolder.js | 95 ++++++++++++++++++- apps/spreadsheeteditor/main/locale/en.json | 17 ++++ .../main/resources/less/toolbar.less | 7 ++ 3 files changed, 118 insertions(+), 1 deletion(-) diff --git a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js index c589e4ce1..d1488a6df 100644 --- a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js +++ b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js @@ -253,6 +253,8 @@ define([ this.api.asc_registerCallback('asc_onSelectionChanged', _.bind(this.onSelectionChanged, this)); this.api.asc_registerCallback('asc_onEntriesListMenu', _.bind(this.onEntriesListMenu, this)); // Alt + Down this.api.asc_registerCallback('asc_onFormulaCompleteMenu', _.bind(this.onFormulaCompleteMenu, this)); + this.api.asc_registerCallback('asc_onShowSpecialPasteOptions', _.bind(this.onShowSpecialPasteOptions, this)); + this.api.asc_registerCallback('asc_onHideSpecialPasteOptions', _.bind(this.onHideSpecialPasteOptions, this)); return this; }, @@ -1594,6 +1596,80 @@ define([ } }, + onShowSpecialPasteOptions: function(specialPasteShowOptions) { + var me = this, + documentHolderView = me.documentHolder, + coord = specialPasteShowOptions.asc_getCellCoord(), + showPoint = [coord.asc_getX() + coord.asc_getWidth() + 3, coord.asc_getY() + coord.asc_getHeight() + 3], + pasteContainer = documentHolderView.cmpEl.find('#special-paste-container'), + pasteItems = specialPasteShowOptions.asc_getOptions(); + + // Prepare menu container + if (pasteContainer.length < 1) { + me._arrSpecialPaste = []; + me._arrSpecialPaste[Asc.c_oSpecialPasteProps.paste] = me.txtPaste; + me._arrSpecialPaste[Asc.c_oSpecialPasteProps.pasteOnlyFormula] = me.txtPasteFormulas; + me._arrSpecialPaste[Asc.c_oSpecialPasteProps.formulaNumberFormat] = me.txtPasteFormulaNumFormat; + me._arrSpecialPaste[Asc.c_oSpecialPasteProps.formulaAllFormatting] = me.txtPasteKeepSourceFormat; + me._arrSpecialPaste[Asc.c_oSpecialPasteProps.formulaWithoutBorders] = me.txtPasteBorders; + me._arrSpecialPaste[Asc.c_oSpecialPasteProps.formulaColumnWidth] = me.txtPasteColWidths; + me._arrSpecialPaste[Asc.c_oSpecialPasteProps.mergeConditionalFormating] = me.txtPasteMerge; + me._arrSpecialPaste[Asc.c_oSpecialPasteProps.pasteOnlyValues] = me.txtPasteValues; + me._arrSpecialPaste[Asc.c_oSpecialPasteProps.valueNumberFormat] = me.txtPasteValNumFormat; + me._arrSpecialPaste[Asc.c_oSpecialPasteProps.valueAllFormating] = me.txtPasteValFormat; + me._arrSpecialPaste[Asc.c_oSpecialPasteProps.pasteOnlyFormating] = me.txtPasteFormat; + me._arrSpecialPaste[Asc.c_oSpecialPasteProps.transpose] = me.txtPasteTranspose; + me._arrSpecialPaste[Asc.c_oSpecialPasteProps.link] = me.txtPasteLink; + me._arrSpecialPaste[Asc.c_oSpecialPasteProps.picture] = me.txtPastePicture; + me._arrSpecialPaste[Asc.c_oSpecialPasteProps.linkedPicture] = me.txtPasteLinkPicture; + me._arrSpecialPaste[Asc.c_oSpecialPasteProps.sourceformatting] = me.txtPasteSourceFormat; + me._arrSpecialPaste[Asc.c_oSpecialPasteProps.destinationFormatting] = me.txtPasteDestFormat; + + pasteContainer = $('
'); + documentHolderView.cmpEl.append(pasteContainer); + + me.btnSpecialPaste = new Common.UI.Button({ + cls : 'btn-toolbar', + iconCls : 'btn-paste', + menu : new Common.UI.Menu({items: []}) + }); + me.btnSpecialPaste.render($('#id-document-holder-btn-special-paste')) ; + } + + var menu = me.btnSpecialPaste.menu; + for (var i = 0; i < menu.items.length; i++) { + menu.removeItem(menu.items[i]); + i--; + } + + var group_prev = -1; + _.each(pasteItems, function(menuItem, index) { + var group = (menuItem<7) ? 0 : (menuItem>9 ? 2 : 1); + if (group_prev !== group && group_prev>=0) + menu.addItem(new Common.UI.MenuItem({ caption: '--' })); + group_prev = group; + + var mnu = new Common.UI.MenuItem({ + caption: me._arrSpecialPaste[menuItem], + value: menuItem + }).on('click', function(item, e) { + var props = new Asc.SpecialPasteProps(); + props.asc_setProps(item.value); + me.api.asc_SpecialPaste(props); + }); + menu.addItem(mnu); + }); + + Common.UI.Menu.Manager.hideAll(); + + pasteContainer.css({left: showPoint[0], top : showPoint[1]}); + pasteContainer.show(); + }, + + onHideSpecialPasteOptions: function() { + this.documentHolder.cmpEl.find('#special-paste-container').hide(); + }, + onCellsRange: function(status) { this.rangeSelectionMode = (status != Asc.c_oAscSelectionDialogType.None); }, @@ -2323,7 +2399,24 @@ define([ txtExpandSort: 'The data next to the selection will not be sorted. Do you want to expand the selection to include the adjacent data or continue with sorting the currently selected cells only?', txtExpand: 'Expand and sort', txtSorting: 'Sorting', - txtSortSelected: 'Sort selected' + txtSortSelected: 'Sort selected', + txtPaste: 'Paste', + txtPasteFormulas: 'Paste only formula', + txtPasteFormulaNumFormat: 'Formula + number format', + txtPasteKeepSourceFormat: 'Formula + all formatting', + txtPasteBorders: 'Formula without borders', + txtPasteColWidths: 'Formula + column width', + txtPasteMerge: 'Merge conditional formatting', + txtPasteTranspose: 'Transpose', + txtPasteValues: 'Paste only value', + txtPasteValNumFormat: 'Value + number format', + txtPasteValFormat: 'Value + all formatting', + txtPasteFormat: 'Paste only formatting', + txtPasteLink: 'Paste Link', + txtPastePicture: 'Picture', + txtPasteLinkPicture: 'Linked Picture', + txtPasteSourceFormat: 'Source formatting', + txtPasteDestFormat: 'Destination formatting' }, SSE.Controllers.DocumentHolder || {})); }); \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/locale/en.json b/apps/spreadsheeteditor/main/locale/en.json index 9701c4566..9c22330f7 100644 --- a/apps/spreadsheeteditor/main/locale/en.json +++ b/apps/spreadsheeteditor/main/locale/en.json @@ -198,6 +198,23 @@ "SSE.Controllers.DocumentHolder.txtTop": "Top", "SSE.Controllers.DocumentHolder.txtUnderbar": "Bar under text", "SSE.Controllers.DocumentHolder.txtWidth": "Width", + "SSE.Controllers.DocumentHolder.txtPaste": "Paste", + "SSE.Controllers.DocumentHolder.txtPasteFormulas": "Paste only formula", + "SSE.Controllers.DocumentHolder.txtPasteFormulaNumFormat": "Formula + number format", + "SSE.Controllers.DocumentHolder.txtPasteKeepSourceFormat": "Formula + all formatting", + "SSE.Controllers.DocumentHolder.txtPasteBorders": "Formula without borders", + "SSE.Controllers.DocumentHolder.txtPasteColWidths": "Formula + column width", + "SSE.Controllers.DocumentHolder.txtPasteMerge": "Merge conditional formatting", + "SSE.Controllers.DocumentHolder.txtPasteTranspose": "Transpose", + "SSE.Controllers.DocumentHolder.txtPasteValues": "Paste only value", + "SSE.Controllers.DocumentHolder.txtPasteValNumFormat": "Value + number format", + "SSE.Controllers.DocumentHolder.txtPasteValFormat": "Value + all formatting", + "SSE.Controllers.DocumentHolder.txtPasteFormat": "Paste only formatting", + "SSE.Controllers.DocumentHolder.txtPasteLink": "Paste link", + "SSE.Controllers.DocumentHolder.txtPastePicture": "Picture", + "SSE.Controllers.DocumentHolder.txtPasteLinkPicture": "Linked picture", + "SSE.Controllers.DocumentHolder.txtPasteSourceFormat": "Source formatting", + "SSE.Controllers.DocumentHolder.txtPasteDestFormat": "Destination formatting", "SSE.Controllers.LeftMenu.newDocumentTitle": "Unnamed spreadsheet", "SSE.Controllers.LeftMenu.textByColumns": "By columns", "SSE.Controllers.LeftMenu.textByRows": "By rows", diff --git a/apps/spreadsheeteditor/main/resources/less/toolbar.less b/apps/spreadsheeteditor/main/resources/less/toolbar.less index 9beb5159d..53bbacd00 100644 --- a/apps/spreadsheeteditor/main/resources/less/toolbar.less +++ b/apps/spreadsheeteditor/main/resources/less/toolbar.less @@ -258,3 +258,10 @@ border: 1px solid @gray; .background-ximage('@{app-image-path}/toolbar/math.png', '@{app-image-path}/toolbar/math@2x.png', 1500px); } + +#special-paste-container { + position: absolute; + z-index: 10000; + background-color: @gray-light; + border: 1px solid @gray; +} \ No newline at end of file From f17a9dace53f4e91b4007713d00a59b83f2aa856 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 10 Feb 2017 14:27:36 +0300 Subject: [PATCH 2/7] [SSE] Debug special paste. --- .../main/app/controller/DocumentHolder.js | 10 ++++++++-- .../spreadsheeteditor/main/resources/less/toolbar.less | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js index d1488a6df..40c076c88 100644 --- a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js +++ b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js @@ -1651,14 +1651,18 @@ define([ var mnu = new Common.UI.MenuItem({ caption: me._arrSpecialPaste[menuItem], - value: menuItem + value: menuItem, + checkable: true, + toggleGroup : 'specialPasteGroup' }).on('click', function(item, e) { var props = new Asc.SpecialPasteProps(); props.asc_setProps(item.value); me.api.asc_SpecialPaste(props); + setTimeout(function(){menu.hide();}, 100); }); menu.addItem(mnu); }); + (menu.items.length>0) && menu.items[0].setChecked(true, true); Common.UI.Menu.Manager.hideAll(); @@ -1667,7 +1671,9 @@ define([ }, onHideSpecialPasteOptions: function() { - this.documentHolder.cmpEl.find('#special-paste-container').hide(); + var pasteContainer = this.documentHolder.cmpEl.find('#special-paste-container'); + if (pasteContainer.is(':visible')) + pasteContainer.hide(); }, onCellsRange: function(status) { diff --git a/apps/spreadsheeteditor/main/resources/less/toolbar.less b/apps/spreadsheeteditor/main/resources/less/toolbar.less index 53bbacd00..c14a55bf6 100644 --- a/apps/spreadsheeteditor/main/resources/less/toolbar.less +++ b/apps/spreadsheeteditor/main/resources/less/toolbar.less @@ -261,7 +261,7 @@ #special-paste-container { position: absolute; - z-index: 10000; + z-index: 100; background-color: @gray-light; border: 1px solid @gray; } \ No newline at end of file From 795306fa19cdcb3ae31809a967daf1a3c6026bad Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Wed, 15 Feb 2017 15:00:46 +0300 Subject: [PATCH 3/7] [SSE] Change button position for special paste. --- .../main/app/controller/DocumentHolder.js | 62 ++++++++++--------- 1 file changed, 34 insertions(+), 28 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js index 40c076c88..0aa8b9415 100644 --- a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js +++ b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js @@ -1600,7 +1600,6 @@ define([ var me = this, documentHolderView = me.documentHolder, coord = specialPasteShowOptions.asc_getCellCoord(), - showPoint = [coord.asc_getX() + coord.asc_getWidth() + 3, coord.asc_getY() + coord.asc_getHeight() + 3], pasteContainer = documentHolderView.cmpEl.find('#special-paste-container'), pasteItems = specialPasteShowOptions.asc_getOptions(); @@ -1636,38 +1635,45 @@ define([ me.btnSpecialPaste.render($('#id-document-holder-btn-special-paste')) ; } - var menu = me.btnSpecialPaste.menu; - for (var i = 0; i < menu.items.length; i++) { - menu.removeItem(menu.items[i]); - i--; - } + if (pasteItems.length>0) { + var menu = me.btnSpecialPaste.menu; + for (var i = 0; i < menu.items.length; i++) { + menu.removeItem(menu.items[i]); + i--; + } - var group_prev = -1; - _.each(pasteItems, function(menuItem, index) { - var group = (menuItem<7) ? 0 : (menuItem>9 ? 2 : 1); - if (group_prev !== group && group_prev>=0) - menu.addItem(new Common.UI.MenuItem({ caption: '--' })); - group_prev = group; + var group_prev = -1; + _.each(pasteItems, function(menuItem, index) { + var group = (menuItem<7) ? 0 : (menuItem>9 ? 2 : 1); + if (group_prev !== group && group_prev>=0) + menu.addItem(new Common.UI.MenuItem({ caption: '--' })); + group_prev = group; - var mnu = new Common.UI.MenuItem({ - caption: me._arrSpecialPaste[menuItem], - value: menuItem, - checkable: true, - toggleGroup : 'specialPasteGroup' - }).on('click', function(item, e) { - var props = new Asc.SpecialPasteProps(); - props.asc_setProps(item.value); - me.api.asc_SpecialPaste(props); - setTimeout(function(){menu.hide();}, 100); + var mnu = new Common.UI.MenuItem({ + caption: me._arrSpecialPaste[menuItem], + value: menuItem, + checkable: true, + toggleGroup : 'specialPasteGroup' + }).on('click', function(item, e) { + var props = new Asc.SpecialPasteProps(); + props.asc_setProps(item.value); + me.api.asc_SpecialPaste(props); + setTimeout(function(){menu.hide();}, 100); + }); + menu.addItem(mnu); }); - menu.addItem(mnu); - }); - (menu.items.length>0) && menu.items[0].setChecked(true, true); + (menu.items.length>0) && menu.items[0].setChecked(true, true); - Common.UI.Menu.Manager.hideAll(); + Common.UI.Menu.Manager.hideAll(); - pasteContainer.css({left: showPoint[0], top : showPoint[1]}); - pasteContainer.show(); + } + if (coord.asc_getX()<0 || coord.asc_getY()<0) { + if (pasteContainer.is(':visible')) pasteContainer.hide(); + } else { + var showPoint = [coord.asc_getX() + coord.asc_getWidth() + 3, coord.asc_getY() + coord.asc_getHeight() + 3]; + pasteContainer.css({left: showPoint[0], top : showPoint[1]}); + pasteContainer.show(); + } }, onHideSpecialPasteOptions: function() { From 64044dae268862b8b4a4da751764b47ad837d815 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 13 Mar 2017 13:56:25 +0300 Subject: [PATCH 4/7] [SSE] Special-paste button was over drop-down menus (left menu or menus in the toolbar). --- apps/spreadsheeteditor/main/app/controller/DocumentHolder.js | 2 +- apps/spreadsheeteditor/main/resources/less/toolbar.less | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js index 0aa8b9415..0acb90647 100644 --- a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js +++ b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js @@ -1624,7 +1624,7 @@ define([ me._arrSpecialPaste[Asc.c_oSpecialPasteProps.sourceformatting] = me.txtPasteSourceFormat; me._arrSpecialPaste[Asc.c_oSpecialPasteProps.destinationFormatting] = me.txtPasteDestFormat; - pasteContainer = $('
'); + pasteContainer = $('
'); documentHolderView.cmpEl.append(pasteContainer); me.btnSpecialPaste = new Common.UI.Button({ diff --git a/apps/spreadsheeteditor/main/resources/less/toolbar.less b/apps/spreadsheeteditor/main/resources/less/toolbar.less index c14a55bf6..2a46756d8 100644 --- a/apps/spreadsheeteditor/main/resources/less/toolbar.less +++ b/apps/spreadsheeteditor/main/resources/less/toolbar.less @@ -261,7 +261,7 @@ #special-paste-container { position: absolute; - z-index: 100; + z-index: @zindex-dropdown - 10; background-color: @gray-light; border: 1px solid @gray; } \ No newline at end of file From 28d55eb6d0a550fb34ad59ae4689f989032ba3b7 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 13 Mar 2017 15:11:34 +0300 Subject: [PATCH 5/7] Revert "[SSE] Special-paste button was over drop-down menus (left menu or menus in the toolbar)." This reverts commit 64044dae268862b8b4a4da751764b47ad837d815. --- apps/spreadsheeteditor/main/app/controller/DocumentHolder.js | 2 +- apps/spreadsheeteditor/main/resources/less/toolbar.less | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js index 0acb90647..0aa8b9415 100644 --- a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js +++ b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js @@ -1624,7 +1624,7 @@ define([ me._arrSpecialPaste[Asc.c_oSpecialPasteProps.sourceformatting] = me.txtPasteSourceFormat; me._arrSpecialPaste[Asc.c_oSpecialPasteProps.destinationFormatting] = me.txtPasteDestFormat; - pasteContainer = $('
'); + pasteContainer = $('
'); documentHolderView.cmpEl.append(pasteContainer); me.btnSpecialPaste = new Common.UI.Button({ diff --git a/apps/spreadsheeteditor/main/resources/less/toolbar.less b/apps/spreadsheeteditor/main/resources/less/toolbar.less index 2a46756d8..c14a55bf6 100644 --- a/apps/spreadsheeteditor/main/resources/less/toolbar.less +++ b/apps/spreadsheeteditor/main/resources/less/toolbar.less @@ -261,7 +261,7 @@ #special-paste-container { position: absolute; - z-index: @zindex-dropdown - 10; + z-index: 100; background-color: @gray-light; border: 1px solid @gray; } \ No newline at end of file From 1d52bcc279c6a64b7089c003493e7462f9f24a13 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 13 Mar 2017 15:28:49 +0300 Subject: [PATCH 6/7] [SSE] Special-paste button was over drop-down menus (left menu or menus in the toolbar). --- apps/spreadsheeteditor/main/app/controller/DocumentHolder.js | 2 +- apps/spreadsheeteditor/main/resources/less/toolbar.less | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js index 0aa8b9415..0acb90647 100644 --- a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js +++ b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js @@ -1624,7 +1624,7 @@ define([ me._arrSpecialPaste[Asc.c_oSpecialPasteProps.sourceformatting] = me.txtPasteSourceFormat; me._arrSpecialPaste[Asc.c_oSpecialPasteProps.destinationFormatting] = me.txtPasteDestFormat; - pasteContainer = $('
'); + pasteContainer = $('
'); documentHolderView.cmpEl.append(pasteContainer); me.btnSpecialPaste = new Common.UI.Button({ diff --git a/apps/spreadsheeteditor/main/resources/less/toolbar.less b/apps/spreadsheeteditor/main/resources/less/toolbar.less index c14a55bf6..b27de4df3 100644 --- a/apps/spreadsheeteditor/main/resources/less/toolbar.less +++ b/apps/spreadsheeteditor/main/resources/less/toolbar.less @@ -261,7 +261,7 @@ #special-paste-container { position: absolute; - z-index: 100; + z-index: @zindex-dropdown - 20; background-color: @gray-light; border: 1px solid @gray; } \ No newline at end of file From e8c82f50ed391c47efd4f340c60c6aac75af16bd Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Mon, 13 Mar 2017 15:33:02 +0300 Subject: [PATCH 7/7] [SSE] Bug: need to close context menu when 'Paste' is selected. --- apps/spreadsheeteditor/main/app/controller/DocumentHolder.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js index 0acb90647..b9dd2fbd0 100644 --- a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js +++ b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js @@ -1663,9 +1663,6 @@ define([ menu.addItem(mnu); }); (menu.items.length>0) && menu.items[0].setChecked(true, true); - - Common.UI.Menu.Manager.hideAll(); - } if (coord.asc_getX()<0 || coord.asc_getY()<0) { if (pasteContainer.is(':visible')) pasteContainer.hide();