From c55575f6e8e6b5100694756dde834f98c30acef0 Mon Sep 17 00:00:00 2001 From: Aaron Imming Date: Tue, 5 Feb 2019 18:12:18 +0800 Subject: [PATCH 1/3] Modify default context menu by hooking Blockly fn --- src/botPage/view/blockly/index.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/botPage/view/blockly/index.js b/src/botPage/view/blockly/index.js index 1770cd03b2..efa5a7127e 100644 --- a/src/botPage/view/blockly/index.js +++ b/src/botPage/view/blockly/index.js @@ -417,3 +417,30 @@ while(true) { } /* eslint-enable */ } + +// Hooks to override default Blockly behaviour +const originalContextMenuFn = Blockly.ContextMenu.show; +Blockly.ContextMenu.show = (e, menuOptions, rtl) => { + // Rename 'Clean up blocks' + menuOptions.some(option => { + if (option.text === Blockly.Msg.CLEAN_UP) { + option.text = translate('Rearrange vertically'); + return true; + } + return false; + }) && + /* Remove delete all blocks, but only when 'Clean up blocks' is available + * This allows users to still delete root blocks containing blocks + */ + menuOptions.some((option, i) => { + if ( + option.text === Blockly.Msg.DELETE_BLOCK || + option.text.replace(/[0-9]+/, '%1') === Blockly.Msg.DELETE_X_BLOCKS + ) { + menuOptions.splice(i, 1); + return true; + } + return false; + }); + originalContextMenuFn(e, menuOptions, rtl); +}; From 65a9c304261f39f5ff3ae5fec0700119ca709147 Mon Sep 17 00:00:00 2001 From: Aaron Imming Date: Tue, 5 Feb 2019 18:22:19 +0800 Subject: [PATCH 2/3] Open Elev.io widget when 'Help' is clicked --- src/botPage/view/blockly/index.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/botPage/view/blockly/index.js b/src/botPage/view/blockly/index.js index efa5a7127e..2cd8ccc30e 100644 --- a/src/botPage/view/blockly/index.js +++ b/src/botPage/view/blockly/index.js @@ -429,7 +429,7 @@ Blockly.ContextMenu.show = (e, menuOptions, rtl) => { } return false; }) && - /* Remove delete all blocks, but only when 'Clean up blocks' is available + /* Remove delete all blocks, but only when 'Clean up blocks' is available (i.e. workspace) * This allows users to still delete root blocks containing blocks */ menuOptions.some((option, i) => { @@ -442,5 +442,14 @@ Blockly.ContextMenu.show = (e, menuOptions, rtl) => { } return false; }); + // Open the Elev.io widget when clicking 'Help' + if (window._elev) { + menuOptions.some(option => { + if (option.text === Blockly.Msg.HELP) { + option.callback = () => window._elev.open(); + return true; + } + }); + } originalContextMenuFn(e, menuOptions, rtl); }; From 43f423b043275b34451fb6157e243bae30d4354d Mon Sep 17 00:00:00 2001 From: Aaron Imming Date: Tue, 5 Feb 2019 18:35:03 +0800 Subject: [PATCH 3/3] Add disable some eslint rules --- src/botPage/view/blockly/index.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/botPage/view/blockly/index.js b/src/botPage/view/blockly/index.js index 2cd8ccc30e..50efc8d34a 100644 --- a/src/botPage/view/blockly/index.js +++ b/src/botPage/view/blockly/index.js @@ -419,12 +419,13 @@ while(true) { } // Hooks to override default Blockly behaviour +/* eslint-disable no-unused-expressions */ const originalContextMenuFn = Blockly.ContextMenu.show; Blockly.ContextMenu.show = (e, menuOptions, rtl) => { // Rename 'Clean up blocks' menuOptions.some(option => { if (option.text === Blockly.Msg.CLEAN_UP) { - option.text = translate('Rearrange vertically'); + option.text = translate('Rearrange vertically'); // eslint-disable-line no-param-reassign return true; } return false; @@ -443,13 +444,16 @@ Blockly.ContextMenu.show = (e, menuOptions, rtl) => { return false; }); // Open the Elev.io widget when clicking 'Help' + // eslint-disable-next-line no-underscore-dangle if (window._elev) { menuOptions.some(option => { if (option.text === Blockly.Msg.HELP) { - option.callback = () => window._elev.open(); + option.callback = () => window._elev.open(); // eslint-disable-line no-param-reassign, no-underscore-dangle return true; } + return false; }); } originalContextMenuFn(e, menuOptions, rtl); }; +/* eslint-enable */