From 33ffba9b6a92515db20c13f19bafc4df9b3a26ab Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 28 Mar 2023 13:08:31 +0300 Subject: [PATCH 1/4] Prevent close menu on click --- apps/common/main/lib/component/Menu.js | 14 ++++++++++++ apps/common/main/lib/component/MenuItem.js | 2 +- .../main/app/view/DocumentHolder.js | 22 +++++++++++++++++-- 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/apps/common/main/lib/component/Menu.js b/apps/common/main/lib/component/Menu.js index 824509f522..b254eedf0c 100644 --- a/apps/common/main/lib/component/Menu.js +++ b/apps/common/main/lib/component/Menu.js @@ -255,6 +255,20 @@ define([ item.on('click', _.bind(me.onItemClick, me)); item.on('toggle', _.bind(me.onItemToggle, me)); }); + menuRoot.on( "mousedown", function(e) { + if (me.preventCloseOnClick) { + e.preventDefault(); + e.stopPropagation(); + return false; + } + }); + menuRoot.on( "click", function(e) { + if (me.preventCloseOnClick) { + e.preventDefault(); + e.stopPropagation(); + return false; + } + }); } if (this.options.maxHeight) { diff --git a/apps/common/main/lib/component/MenuItem.js b/apps/common/main/lib/component/MenuItem.js index 39d288b2fb..1863393b6b 100644 --- a/apps/common/main/lib/component/MenuItem.js +++ b/apps/common/main/lib/component/MenuItem.js @@ -311,7 +311,7 @@ define([ }, onItemClick: function(e) { - if (e.which != 1 && (e.which !== undefined || this.menu)) + if (e.which != 1 && (e.which !== undefined || this.menu) || this.preventCloseOnClick) return false; if (!this.disabled && (this.allowDepress || !(this.checked && this.toggleGroup)) && !this.menu) diff --git a/apps/documenteditor/main/app/view/DocumentHolder.js b/apps/documenteditor/main/app/view/DocumentHolder.js index ae8f9734dc..c88d061c01 100644 --- a/apps/documenteditor/main/app/view/DocumentHolder.js +++ b/apps/documenteditor/main/app/view/DocumentHolder.js @@ -75,6 +75,7 @@ define([ this._currentParaObjDisabled = false; this._currLang = {}; this._isDisabled = false; + this._preventCustomClick = null; this._docProtection = { isReadOnly: false, isReviewOnly: false, @@ -2937,6 +2938,13 @@ define([ var me = this, lang = me.mode && me.mode.lang ? me.mode.lang.split(/[\-_]/)[0] : 'en'; + console.log('updateCustomItems ' + me._preventCustomClick); + me._preventCustomClick && clearTimeout(me._preventCustomClick); + me._preventCustomClick = setTimeout(function () { + console.log('clear'); + me._preventCustomClick = null; + },500); + var findCustomItem = function(guid, id) { if (menu && menu.items.length>0) { for (var i = menu.items.length-1; i >=0 ; i--) { @@ -2957,7 +2965,12 @@ define([ items: [] }); toMenu.on('item:click', function(menu, item, e) { - me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); + console.log('try click ' + me._preventCustomClick); + if (!me._preventCustomClick) { + console.log(' click '); + !me._preventCustomClick && me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); + } + // !me._preventCustomClick && me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); }); } items.forEach(function(item) { @@ -3017,7 +3030,12 @@ define([ menu: item.items && item.items.length>=0 ? getMenu(item.items, plugin.guid) : false, disabled: !!item.disabled }).on('click', function(item, e) { - me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); + console.log('try click ' + me._preventCustomClick); + if (!me._preventCustomClick) { + console.log(' click '); + !me._preventCustomClick && me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); + } + // !me._preventCustomClick && me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); }); menu.addItem(mnu); } From 016c6e25a43cc9f68f53c00ba74f5c00dc9e9716 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 21 Apr 2023 16:08:12 +0300 Subject: [PATCH 2/4] Prevent click on custom menu item after plugin update --- apps/common/main/lib/component/Menu.js | 13 +-------- .../main/app/view/DocumentHolder.js | 27 ++++++++----------- .../main/app/view/DocumentHolder.js | 15 +++++++++-- .../main/app/view/DocumentHolder.js | 15 +++++++++-- 4 files changed, 38 insertions(+), 32 deletions(-) diff --git a/apps/common/main/lib/component/Menu.js b/apps/common/main/lib/component/Menu.js index b254eedf0c..ed745f506d 100644 --- a/apps/common/main/lib/component/Menu.js +++ b/apps/common/main/lib/component/Menu.js @@ -255,19 +255,8 @@ define([ item.on('click', _.bind(me.onItemClick, me)); item.on('toggle', _.bind(me.onItemToggle, me)); }); - menuRoot.on( "mousedown", function(e) { - if (me.preventCloseOnClick) { - e.preventDefault(); - e.stopPropagation(); - return false; - } - }); menuRoot.on( "click", function(e) { - if (me.preventCloseOnClick) { - e.preventDefault(); - e.stopPropagation(); - return false; - } + me.trigger('menu:click', this, e); }); } diff --git a/apps/documenteditor/main/app/view/DocumentHolder.js b/apps/documenteditor/main/app/view/DocumentHolder.js index c88d061c01..c91e8325d4 100644 --- a/apps/documenteditor/main/app/view/DocumentHolder.js +++ b/apps/documenteditor/main/app/view/DocumentHolder.js @@ -76,6 +76,7 @@ define([ this._currLang = {}; this._isDisabled = false; this._preventCustomClick = null; + this._hasCustomItems = false; this._docProtection = { isReadOnly: false, isReviewOnly: false, @@ -2938,12 +2939,11 @@ define([ var me = this, lang = me.mode && me.mode.lang ? me.mode.lang.split(/[\-_]/)[0] : 'en'; - console.log('updateCustomItems ' + me._preventCustomClick); me._preventCustomClick && clearTimeout(me._preventCustomClick); - me._preventCustomClick = setTimeout(function () { - console.log('clear'); + me._hasCustomItems && (me._preventCustomClick = setTimeout(function () { me._preventCustomClick = null; - },500); + },500)); // set delay only on update existing items + me._hasCustomItems = true; var findCustomItem = function(guid, id) { if (menu && menu.items.length>0) { @@ -2962,15 +2962,14 @@ define([ toMenu = new Common.UI.Menu({ cls: 'shifted-right', menuAlign: 'tl-tr', + canPreventCloseOnClick: true, items: [] }); toMenu.on('item:click', function(menu, item, e) { - console.log('try click ' + me._preventCustomClick); - if (!me._preventCustomClick) { - console.log(' click '); - !me._preventCustomClick && me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); - } - // !me._preventCustomClick && me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); + !me._preventCustomClick && me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); + }); + toMenu.on('menu:click', function(menu, e) { + me._preventCustomClick && e.stopPropagation(); }); } items.forEach(function(item) { @@ -3030,12 +3029,7 @@ define([ menu: item.items && item.items.length>=0 ? getMenu(item.items, plugin.guid) : false, disabled: !!item.disabled }).on('click', function(item, e) { - console.log('try click ' + me._preventCustomClick); - if (!me._preventCustomClick) { - console.log(' click '); - !me._preventCustomClick && me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); - } - // !me._preventCustomClick && me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); + !me._preventCustomClick && me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); }); menu.addItem(mnu); } @@ -3059,6 +3053,7 @@ define([ } } } + this._hasCustomItems = false; }, focus: function() { diff --git a/apps/presentationeditor/main/app/view/DocumentHolder.js b/apps/presentationeditor/main/app/view/DocumentHolder.js index 4a6c5eb855..ef53cdd519 100644 --- a/apps/presentationeditor/main/app/view/DocumentHolder.js +++ b/apps/presentationeditor/main/app/view/DocumentHolder.js @@ -64,6 +64,8 @@ define([ me._currLang = {}; me._state = {unitsChanged: true}; me._isDisabled = false; + me._preventCustomClick = null; + me._hasCustomItems = false; Common.NotificationCenter.on('settings:unitschanged', _.bind(this.unitsChanged, this)); }, @@ -2505,6 +2507,12 @@ define([ var me = this, lang = me.mode && me.mode.lang ? me.mode.lang.split(/[\-_]/)[0] : 'en'; + me._preventCustomClick && clearTimeout(me._preventCustomClick); + me._hasCustomItems && (me._preventCustomClick = setTimeout(function () { + me._preventCustomClick = null; + },500)); // set delay only on update existing items + me._hasCustomItems = true; + var findCustomItem = function(guid, id) { if (menu && menu.items.length>0) { for (var i = menu.items.length-1; i >=0 ; i--) { @@ -2525,7 +2533,10 @@ define([ items: [] }); toMenu.on('item:click', function(menu, item, e) { - me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); + !me._preventCustomClick && me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); + }); + toMenu.on('menu:click', function(menu, e) { + me._preventCustomClick && e.stopPropagation(); }); } items.forEach(function(item) { @@ -2585,7 +2596,7 @@ define([ menu: item.items && item.items.length>=0 ? getMenu(item.items, plugin.guid) : false, disabled: !!item.disabled }).on('click', function(item, e) { - me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); + !me._preventCustomClick && me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); }); menu.addItem(mnu); } diff --git a/apps/spreadsheeteditor/main/app/view/DocumentHolder.js b/apps/spreadsheeteditor/main/app/view/DocumentHolder.js index e4fbb8b9ec..264b87324b 100644 --- a/apps/spreadsheeteditor/main/app/view/DocumentHolder.js +++ b/apps/spreadsheeteditor/main/app/view/DocumentHolder.js @@ -59,6 +59,8 @@ define([ initialize: function() { var me = this; + me._preventCustomClick = null; + me._hasCustomItems = false; this.setApi = function(api) { me.api = api; @@ -1458,6 +1460,12 @@ define([ var me = this, lang = me.mode && me.mode.lang ? me.mode.lang.split(/[\-_]/)[0] : 'en'; + me._preventCustomClick && clearTimeout(me._preventCustomClick); + me._hasCustomItems && (me._preventCustomClick = setTimeout(function () { + me._preventCustomClick = null; + },500)); // set delay only on update existing items + me._hasCustomItems = true; + var findCustomItem = function(guid, id) { if (menu && menu.items.length>0) { for (var i = menu.items.length-1; i >=0 ; i--) { @@ -1478,7 +1486,10 @@ define([ items: [] }); toMenu.on('item:click', function(menu, item, e) { - me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); + !me._preventCustomClick && me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); + }); + toMenu.on('menu:click', function(menu, e) { + me._preventCustomClick && e.stopPropagation(); }); } items.forEach(function(item) { @@ -1538,7 +1549,7 @@ define([ menu: item.items && item.items.length>=0 ? getMenu(item.items, plugin.guid) : false, disabled: !!item.disabled }).on('click', function(item, e) { - me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); + !me._preventCustomClick && me.api && me.api.onPluginContextMenuItemClick && me.api.onPluginContextMenuItemClick(item.options.guid, item.value); }); menu.addItem(mnu); } From a2986c05e0842b5db8784159426e7caf6e8e5f86 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 21 Apr 2023 16:11:32 +0300 Subject: [PATCH 3/4] Refactoring --- apps/common/main/lib/component/MenuItem.js | 2 +- apps/documenteditor/main/app/view/DocumentHolder.js | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/common/main/lib/component/MenuItem.js b/apps/common/main/lib/component/MenuItem.js index 1863393b6b..39d288b2fb 100644 --- a/apps/common/main/lib/component/MenuItem.js +++ b/apps/common/main/lib/component/MenuItem.js @@ -311,7 +311,7 @@ define([ }, onItemClick: function(e) { - if (e.which != 1 && (e.which !== undefined || this.menu) || this.preventCloseOnClick) + if (e.which != 1 && (e.which !== undefined || this.menu)) return false; if (!this.disabled && (this.allowDepress || !(this.checked && this.toggleGroup)) && !this.menu) diff --git a/apps/documenteditor/main/app/view/DocumentHolder.js b/apps/documenteditor/main/app/view/DocumentHolder.js index c91e8325d4..62023f7890 100644 --- a/apps/documenteditor/main/app/view/DocumentHolder.js +++ b/apps/documenteditor/main/app/view/DocumentHolder.js @@ -2962,7 +2962,6 @@ define([ toMenu = new Common.UI.Menu({ cls: 'shifted-right', menuAlign: 'tl-tr', - canPreventCloseOnClick: true, items: [] }); toMenu.on('item:click', function(menu, item, e) { From a3ae60a334f43a67deadd1f1856216a132385885 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 21 Apr 2023 17:02:19 +0300 Subject: [PATCH 4/4] Refactoring --- apps/presentationeditor/main/app/view/DocumentHolder.js | 1 + apps/spreadsheeteditor/main/app/view/DocumentHolder.js | 1 + 2 files changed, 2 insertions(+) diff --git a/apps/presentationeditor/main/app/view/DocumentHolder.js b/apps/presentationeditor/main/app/view/DocumentHolder.js index ef53cdd519..3053e23c70 100644 --- a/apps/presentationeditor/main/app/view/DocumentHolder.js +++ b/apps/presentationeditor/main/app/view/DocumentHolder.js @@ -2620,6 +2620,7 @@ define([ } } } + this._hasCustomItems = false; }, unitsChanged: function(m) { diff --git a/apps/spreadsheeteditor/main/app/view/DocumentHolder.js b/apps/spreadsheeteditor/main/app/view/DocumentHolder.js index 264b87324b..7bd1a61c37 100644 --- a/apps/spreadsheeteditor/main/app/view/DocumentHolder.js +++ b/apps/spreadsheeteditor/main/app/view/DocumentHolder.js @@ -1573,6 +1573,7 @@ define([ } } } + this._hasCustomItems = false; }, txtSort: 'Sort',