From ee836843071fc1cce948aeaf2938705a6875ecce Mon Sep 17 00:00:00 2001 From: McSam Date: Mon, 15 Jul 2019 15:44:10 +0800 Subject: [PATCH 1/5] search-feature --- src/assets/sass/scratch/_toolbox.scss | 8 + .../Functions/procedures_callnoreturn.js | 26 ++- .../Functions/procedures_callreturn.js | 17 +- .../Functions/procedures_defnoreturn.js | 35 ++-- .../Functions/procedures_defreturn.js | 37 +++-- .../Advanced/Functions/procedures_ifreturn.js | 15 +- .../blocks/Advanced/List/lists_create_with.js | 25 ++- .../blocks/Advanced/Variable/variables_get.js | 16 +- .../blocks/Advanced/Variable/variables_set.js | 16 +- .../Binary/After Purchase/after_purchase.js | 14 +- .../Binary/After Purchase/check_result.js | 14 +- .../Binary/After Purchase/read_details.js | 15 +- .../Binary/After Purchase/trade_again.js | 20 ++- .../Binary/Before Purchase/ask_price.js | 14 +- .../Binary/Before Purchase/before_purchase.js | 14 +- .../blocks/Binary/Before Purchase/payout.js | 14 +- .../blocks/Binary/Before Purchase/purchase.js | 20 ++- .../Binary/During Purchase/during_purchase.js | 14 +- .../blocks/Binary/Indicators/bb_statement.js | 14 +- .../blocks/Binary/Tick Analysis/last_digit.js | 14 +- .../Tools/Candle/ohlc_values_in_list.js | 14 +- .../blocks/Binary/Tools/Misc./notify.js | 14 +- src/scratch/blocks/Binary/Tools/Time/epoch.js | 14 +- .../Trade Definition/trade_definition.js | 15 +- src/scratch/blocks/Logic/controls_if.js | 23 ++- src/scratch/blocks/Math/math_arithmetic.js | 17 +- src/scratch/blocks/Math/math_change.js | 31 +++- src/scratch/blocks/Math/math_single.js | 15 +- src/scratch/blocks/Math/math_trig.js | 15 +- src/scratch/blocks/Text/text_prompt_ext.js | 45 ++++-- src/scratch/hooks/block.js | 1 + src/scratch/hooks/data_category.js | 48 +++--- src/scratch/hooks/flyout_base.js | 54 ++++++- src/scratch/hooks/toolbox.js | 152 +++++++++++++++--- src/scratch/xml/toolbox.xml | 1 + 35 files changed, 665 insertions(+), 156 deletions(-) diff --git a/src/assets/sass/scratch/_toolbox.scss b/src/assets/sass/scratch/_toolbox.scss index 6b741eb7..53ce182f 100644 --- a/src/assets/sass/scratch/_toolbox.scss +++ b/src/assets/sass/scratch/_toolbox.scss @@ -1,6 +1,7 @@ @import '../base/mixins'; $category-colours: ( + search : #afffda, trade-definition: #303f9f, before-purchase : #00897b, during-purchase : #78909c, @@ -114,4 +115,11 @@ $category-colours: ( } } } + + #search_input { + padding: 10px; + border-radius: 5px; + border: solid $grey 1px; + margin: 3px; + } } \ No newline at end of file diff --git a/src/scratch/blocks/Advanced/Functions/procedures_callnoreturn.js b/src/scratch/blocks/Advanced/Functions/procedures_callnoreturn.js index 4cc6a83e..5a8b23ab 100755 --- a/src/scratch/blocks/Advanced/Functions/procedures_callnoreturn.js +++ b/src/scratch/blocks/Advanced/Functions/procedures_callnoreturn.js @@ -7,7 +7,16 @@ Blockly.Blocks.procedures_callnoreturn = { this.argumentVarModels = []; this.previousDisabledState = false; - this.jsonInit({ + this.jsonInit(this.definition()); + }, + /** + * Block definitions describe how a block looks and behaves, including the text, + * the colour, the shape, and what other blocks it can connect to. We've separated + * the block definition from the init function so we can search through it. + * https://developers.google.com/blockly/guides/create-custom-blocks/define-blocks + */ + definition() { + return { message0: '%1 %2', args0 : [ { @@ -25,7 +34,20 @@ Blockly.Blocks.procedures_callnoreturn = { colourTertiary : Blockly.Colours.BinaryProcedures.colourTertiary, previousStatement: null, nextStatement : null, - }); + tooltip : translate('Function with no return value tooltip'), + category : 'functions', + }; + }, + /** + * Meta returns an object with with properties that contain human readable strings, + * these strings are used in the flyout help content, as well as used for searching + * for specific blocks. + */ + meta() { + return { + 'display_name': translate('Function With no Return name'), + 'description' : translate('Function with no return value description'), + }; }, /** * Procedure calls cannot exist without the corresponding procedure diff --git a/src/scratch/blocks/Advanced/Functions/procedures_callreturn.js b/src/scratch/blocks/Advanced/Functions/procedures_callreturn.js index 9118dcd7..262a6bfb 100755 --- a/src/scratch/blocks/Advanced/Functions/procedures_callreturn.js +++ b/src/scratch/blocks/Advanced/Functions/procedures_callreturn.js @@ -1,9 +1,14 @@ +import { translate } from '../../../../utils/lang/i18n'; + Blockly.Blocks.procedures_callreturn = { init() { this.arguments = []; this.previousDisabledState = false; - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: '%1 %2', args0 : [ { @@ -20,7 +25,15 @@ Blockly.Blocks.procedures_callreturn = { colour : Blockly.Colours.BinaryProcedures.colour, colourSecondary: Blockly.Colours.BinaryProcedures.colourSecondary, colourTertiary : Blockly.Colours.BinaryProcedures.colourTertiary, - }); + tooltip : translate('Function with return value'), + category : translate('functions'), + }; + }, + meta(){ + return { + 'display_name': translate('Function with return value'), + 'description' : translate('Function with return value Description'), + }; }, onchange : Blockly.Blocks.procedures_callnoreturn.onchange, getProcedureDefinition: Blockly.Blocks.procedures_callnoreturn.getProcedureDefinition, diff --git a/src/scratch/blocks/Advanced/Functions/procedures_defnoreturn.js b/src/scratch/blocks/Advanced/Functions/procedures_defnoreturn.js index 6d6c7239..dc6b74ca 100755 --- a/src/scratch/blocks/Advanced/Functions/procedures_defnoreturn.js +++ b/src/scratch/blocks/Advanced/Functions/procedures_defnoreturn.js @@ -7,7 +7,20 @@ Blockly.Blocks.procedures_defnoreturn = { this.arguments = []; this.argumentVarModels = []; - this.jsonInit({ + this.jsonInit(this.definition()); + + // Enforce unique procedure names + const nameField = this.getField('NAME'); + nameField.setValidator(Blockly.Procedures.rename); + + // Render a ➕-icon for adding parameters + const fieldImage = new Blockly.FieldImage(plusIconLight, 24, 24, '+', () => this.onAddClick()); + this.appendDummyInput('ADD_ICON').appendField(fieldImage); + + this.setStatements(true); + }, + definition() { + return { message0: translate('function %1 %2'), args0 : [ { @@ -24,17 +37,15 @@ Blockly.Blocks.procedures_defnoreturn = { colour : Blockly.Colours.BinaryProcedures.colour, colourSecondary: Blockly.Colours.BinaryProcedures.colourSecondary, colourTertiary : Blockly.Colours.BinaryProcedures.colourTertiary, - }); - - // Enforce unique procedure names - const nameField = this.getField('NAME'); - nameField.setValidator(Blockly.Procedures.rename); - - // Render a ➕-icon for adding parameters - const fieldImage = new Blockly.FieldImage(plusIconLight, 24, 24, '+', () => this.onAddClick()); - this.appendDummyInput('ADD_ICON').appendField(fieldImage); - - this.setStatements(true); + tooltip : translate('function with no return tooltip'), + category : translate('functions'), + }; + }, + meta() { + return { + 'display_name': translate('Function with no return value'), + 'description' : translate('Function with no return value description'), + }; }, /** * Sets the block colour and updates this procedure's caller blocks diff --git a/src/scratch/blocks/Advanced/Functions/procedures_defreturn.js b/src/scratch/blocks/Advanced/Functions/procedures_defreturn.js index 4e175a50..be56cc5c 100755 --- a/src/scratch/blocks/Advanced/Functions/procedures_defreturn.js +++ b/src/scratch/blocks/Advanced/Functions/procedures_defreturn.js @@ -6,7 +6,21 @@ Blockly.Blocks.procedures_defreturn = { this.arguments = []; this.argumentVarModels = []; - this.jsonInit({ + this.jsonInit(this.definition()); + + // Enforce unique procedure names + const nameField = this.getField('NAME'); + nameField.setValidator(Blockly.Procedures.rename); + + // Render a ➕-icon for adding parameters + const fieldImage = new Blockly.FieldImage(plusIconDark, 24, 24, '+', () => this.onAddClick()); + this.appendDummyInput('ADD_ICON').appendField(fieldImage); + this.moveInputBefore('ADD_ICON', 'RETURN'); + + this.setStatements(true); + }, + definition(){ + return { message0: translate('function %1 %2 %3'), message1: 'return %1', args0 : [ @@ -35,18 +49,15 @@ Blockly.Blocks.procedures_defreturn = { colour : Blockly.Colours.BinaryProcedures.colour, colourSecondary: Blockly.Colours.BinaryProcedures.colourSecondary, colourTertiary : Blockly.Colours.BinaryProcedures.colourTertiary, - }); - - // Enforce unique procedure names - const nameField = this.getField('NAME'); - nameField.setValidator(Blockly.Procedures.rename); - - // Render a ➕-icon for adding parameters - const fieldImage = new Blockly.FieldImage(plusIconDark, 24, 24, '+', () => this.onAddClick()); - this.appendDummyInput('ADD_ICON').appendField(fieldImage); - this.moveInputBefore('ADD_ICON', 'RETURN'); - - this.setStatements(true); + tooltip : translate('Function def with return value'), + category : translate('functions'), + }; + }, + meta(){ + return { + 'display_name': translate('Function def with return value'), + 'description' : translate('Function def with return value Description'), + }; }, onAddClick : Blockly.Blocks.procedures_defnoreturn.onAddClick, onchange : Blockly.Blocks.procedures_defnoreturn.onchange, diff --git a/src/scratch/blocks/Advanced/Functions/procedures_ifreturn.js b/src/scratch/blocks/Advanced/Functions/procedures_ifreturn.js index c8cca8fd..28512457 100755 --- a/src/scratch/blocks/Advanced/Functions/procedures_ifreturn.js +++ b/src/scratch/blocks/Advanced/Functions/procedures_ifreturn.js @@ -9,7 +9,10 @@ Blockly.Blocks.procedures_ifreturn = { init() { this.hasReturnValue = true; - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('if %1 return %2'), args0 : [ { @@ -26,7 +29,15 @@ Blockly.Blocks.procedures_ifreturn = { colourTertiary : Blockly.Colours.BinaryProcedures.colourTertiary, previousStatement: null, nextStatement : null, - }); + tooltip : translate('Function If Else'), + category : 'functions', + }; + }, + meta(){ + return { + 'display_name': translate('Function If else'), + 'description' : translate('Function If else Description'), + }; }, /** * Create XML to represent whether this block has a return value. diff --git a/src/scratch/blocks/Advanced/List/lists_create_with.js b/src/scratch/blocks/Advanced/List/lists_create_with.js index cd2c2c82..013c5016 100755 --- a/src/scratch/blocks/Advanced/List/lists_create_with.js +++ b/src/scratch/blocks/Advanced/List/lists_create_with.js @@ -3,7 +3,15 @@ import { translate } from '../../../../utils/lang/i18n'; Blockly.Blocks.lists_create_with = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + + // Render a ➕-icon for adding additional `lists_statement` blocks + const fieldImage = new Blockly.FieldImage(plusIconDark, 25, 25, '', () => this.onIconClick()); + this.appendDummyInput('ADD_ICON').appendField(fieldImage); + this.moveInputBefore('ADD_ICON', 'STACK'); + }, + definition(){ + return { message0: translate('set %1 to create list with'), message1: '%1', args0 : [ @@ -24,12 +32,15 @@ Blockly.Blocks.lists_create_with = { colourTertiary : Blockly.Colours.Binary.colourTertiary, previousStatement: null, nextStatement : null, - }); - - // Render a ➕-icon for adding additional `lists_statement` blocks - const fieldImage = new Blockly.FieldImage(plusIconDark, 25, 25, '', () => this.onIconClick()); - this.appendDummyInput('ADD_ICON').appendField(fieldImage); - this.moveInputBefore('ADD_ICON', 'STACK'); + tooltip : translate('Create List with'), + category : 'list', + }; + }, + meta(){ + return { + 'display_name': translate('Create list with'), + 'description' : translate('Create list with description'), + }; }, onIconClick() { if (!this.workspace || this.isInFlyout) { diff --git a/src/scratch/blocks/Advanced/Variable/variables_get.js b/src/scratch/blocks/Advanced/Variable/variables_get.js index de7c7b09..ed194199 100755 --- a/src/scratch/blocks/Advanced/Variable/variables_get.js +++ b/src/scratch/blocks/Advanced/Variable/variables_get.js @@ -2,7 +2,10 @@ import { translate } from '../../../../utils/lang/i18n'; Blockly.Blocks.variables_get = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { type : 'variables_get', message0: '%1', args0 : [ @@ -17,8 +20,15 @@ Blockly.Blocks.variables_get = { colour : Blockly.Colours.Binary.colour, colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, - tooltip : '', - }); + tooltip : translate('Get Variable Tooltip'), + category : translate('variables'), + }; + }, + meta(){ + return { + 'display_name': translate('Get Variable Value'), + 'description' : translate('Get Variable Value Description'), + }; }, }; diff --git a/src/scratch/blocks/Advanced/Variable/variables_set.js b/src/scratch/blocks/Advanced/Variable/variables_set.js index ac8c05c3..b99809e4 100755 --- a/src/scratch/blocks/Advanced/Variable/variables_set.js +++ b/src/scratch/blocks/Advanced/Variable/variables_set.js @@ -2,7 +2,10 @@ import { translate } from '../../../../utils/lang/i18n'; Blockly.Blocks.variables_set = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { type : 'field_variable', message0: translate('set %1 to %2'), args0 : [ @@ -21,8 +24,15 @@ Blockly.Blocks.variables_set = { colourTertiary : Blockly.Colours.Binary.colourTertiary, previousStatement: null, nextStatement : null, - tooltip : '', - }); + tooltip : translate('Set Variable Tooltip'), + category : 'variables', + }; + }, + meta(){ + return { + 'display_name': translate('Set Variable'), + 'description' : translate('Set Variable Description'), + }; }, }; diff --git a/src/scratch/blocks/Binary/After Purchase/after_purchase.js b/src/scratch/blocks/Binary/After Purchase/after_purchase.js index a604df20..1f3464f8 100755 --- a/src/scratch/blocks/Binary/After Purchase/after_purchase.js +++ b/src/scratch/blocks/Binary/After Purchase/after_purchase.js @@ -4,7 +4,10 @@ import { translate } from '../../../../utils/lang/i18n'; Blockly.Blocks.after_purchase = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('%1 (4) Get your trade result and trade again %2'), message1: '%1', args0 : [ @@ -32,7 +35,14 @@ Blockly.Blocks.after_purchase = { tooltip : translate( 'Get the previous trade information and result, then trade again (Runs on trade finish)' ), - }); + category: 'after-purchase', + }; + }, + meta(){ + return { + 'display_name': translate('After Purchase'), + 'description' : translate('After Purchase Description'), + }; }, onchange(event) { setBlockTextColor(this); diff --git a/src/scratch/blocks/Binary/After Purchase/check_result.js b/src/scratch/blocks/Binary/After Purchase/check_result.js index 976a68ed..331ce49c 100755 --- a/src/scratch/blocks/Binary/After Purchase/check_result.js +++ b/src/scratch/blocks/Binary/After Purchase/check_result.js @@ -3,7 +3,10 @@ import { translate } from '../../../../utils/lang/i18n'; Blockly.Blocks.contract_check_result = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('Result is %1'), args0 : [ { @@ -18,7 +21,14 @@ Blockly.Blocks.contract_check_result = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('True if the result matches the selection'), - }); + category : translate('after-purchase'), + }; + }, + meta(){ + return { + 'display_name': translate('Check Result'), + 'description' : translate('Check Result Description'), + }; }, onchange(event) { if (!this.workspace || this.isInFlyout || this.workspace.isDragging()) { diff --git a/src/scratch/blocks/Binary/After Purchase/read_details.js b/src/scratch/blocks/Binary/After Purchase/read_details.js index c131b86a..cd36f5ee 100755 --- a/src/scratch/blocks/Binary/After Purchase/read_details.js +++ b/src/scratch/blocks/Binary/After Purchase/read_details.js @@ -3,7 +3,10 @@ import { translate } from '../../../../utils/lang/i18n'; Blockly.Blocks.read_details = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('Contract Detail: %1'), args0 : [ { @@ -17,7 +20,15 @@ Blockly.Blocks.read_details = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('Reads a selected option from contract details list'), - }); + category : translate('after-purchase'), + }; + }, + meta(){ + return { + 'display_name': translate('Read Detail Block'), + 'description' : translate('Read Detail Description'), + + }; }, onchange(event) { if (!this.workspace || this.isInFlyout || this.workspace.isDragging()) { diff --git a/src/scratch/blocks/Binary/After Purchase/trade_again.js b/src/scratch/blocks/Binary/After Purchase/trade_again.js index ff387d6c..685b13d7 100755 --- a/src/scratch/blocks/Binary/After Purchase/trade_again.js +++ b/src/scratch/blocks/Binary/After Purchase/trade_again.js @@ -2,17 +2,27 @@ import { translate } from '../../../../utils/lang/i18n'; Blockly.Blocks.trade_again = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + + // Ensure one of this type per statement-stack + this.setNextStatement(false); + }, + definition(){ + return { message0 : translate('Trade Again'), colour : Blockly.Colours.Binary.colour, colourSecondary : Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, previousStatement: null, tooltip : translate('Runs the trade block again'), - }); - - // Ensure one of this type per statement-stack - this.setNextStatement(false); + category : 'after-purchase', + }; + }, + meta(){ + return { + 'display_name': translate('Trade Again'), + 'description' : translate('Trade Again Description'), + }; }, onchange(event) { if (!this.workspace || this.isInFlyout || this.workspace.isDragging()) { diff --git a/src/scratch/blocks/Binary/Before Purchase/ask_price.js b/src/scratch/blocks/Binary/Before Purchase/ask_price.js index feab3985..97109b3f 100755 --- a/src/scratch/blocks/Binary/Before Purchase/ask_price.js +++ b/src/scratch/blocks/Binary/Before Purchase/ask_price.js @@ -3,7 +3,10 @@ import { translate } from '../../../../utils/lang/i18n'; Blockly.Blocks.ask_price = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('Ask Price %1'), args0 : [ { @@ -18,7 +21,14 @@ Blockly.Blocks.ask_price = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('Ask Price for selected proposal'), - }); + category : translate('before-purchase'), + }; + }, + meta(){ + return { + 'display_name': translate('Ask Price'), + 'description' : translate('Ask Price Description'), + }; }, onchange(event) { if (!this.workspace || this.isInFlyout || this.workspace.isDragging()) { diff --git a/src/scratch/blocks/Binary/Before Purchase/before_purchase.js b/src/scratch/blocks/Binary/Before Purchase/before_purchase.js index 35243125..0845919c 100755 --- a/src/scratch/blocks/Binary/Before Purchase/before_purchase.js +++ b/src/scratch/blocks/Binary/Before Purchase/before_purchase.js @@ -4,7 +4,10 @@ import { translate } from '../../../../utils/lang/i18n'; Blockly.Blocks.before_purchase = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition() { + return { message0: translate('%1 (2) Watch and purchase your contract %2'), message1: '%1', args0 : [ @@ -30,7 +33,14 @@ Blockly.Blocks.before_purchase = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('Watch the tick stream and purchase the desired contract (Runs on tick update)'), - }); + category : translate('before-purchase'), + }; + }, + meta(){ + return { + 'display_name': translate('Before Purchase'), + 'description' : translate('Before Purchase Description'), + }; }, onchange(event) { setBlockTextColor(this); diff --git a/src/scratch/blocks/Binary/Before Purchase/payout.js b/src/scratch/blocks/Binary/Before Purchase/payout.js index 1c72825a..2e7176ac 100755 --- a/src/scratch/blocks/Binary/Before Purchase/payout.js +++ b/src/scratch/blocks/Binary/Before Purchase/payout.js @@ -3,7 +3,10 @@ import { translate } from '../../../../utils/lang/i18n'; Blockly.Blocks.payout = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('Payout %1'), args0 : [ { @@ -18,7 +21,14 @@ Blockly.Blocks.payout = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('Payout for selected proposal'), - }); + category : translate('before-purchase'), + }; + }, + meta(){ + return { + 'display_name': translate('Payout'), + 'description' : translate('Payout Description'), + }; }, onchange(event) { if (!this.workspace || this.isInFlyout || this.workspace.isDragging()) { diff --git a/src/scratch/blocks/Binary/Before Purchase/purchase.js b/src/scratch/blocks/Binary/Before Purchase/purchase.js index 360db245..563c4ba7 100755 --- a/src/scratch/blocks/Binary/Before Purchase/purchase.js +++ b/src/scratch/blocks/Binary/Before Purchase/purchase.js @@ -3,7 +3,13 @@ import { translate } from '../../../../utils/lan Blockly.Blocks.purchase = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + + // Ensure one of this type per statement-stack + this.setNextStatement(false); + }, + definition(){ + return { message0: translate('Purchase %1'), args0 : [ { @@ -17,10 +23,14 @@ Blockly.Blocks.purchase = { colourSecondary : Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('Payout for selected proposal'), - }); - - // Ensure one of this type per statement-stack - this.setNextStatement(false); + category : 'before-purchase', + }; + }, + meta(){ + return { + 'display_name': translate('Puchase'), + 'description' : translate('Purchase Description'), + }; }, onchange(event) { if (!this.workspace || this.isInFlyout || this.workspace.isDragging()) { diff --git a/src/scratch/blocks/Binary/During Purchase/during_purchase.js b/src/scratch/blocks/Binary/During Purchase/during_purchase.js index a373ffb9..9bdc752f 100755 --- a/src/scratch/blocks/Binary/During Purchase/during_purchase.js +++ b/src/scratch/blocks/Binary/During Purchase/during_purchase.js @@ -4,7 +4,10 @@ import { translate } from '../../../../utils/lang/i18n'; Blockly.Blocks.during_purchase = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('%1 (3) Watch and sell your purchased contract %2'), message1: '%1', args0 : [ @@ -32,7 +35,14 @@ Blockly.Blocks.during_purchase = { tooltip : translate( 'Watch the purchased contract info and sell at market if available (Runs on contract update)' ), - }); + category: 'during-purchase', + }; + }, + meta(){ + return { + 'display_name': translate('During Purchase'), + 'description' : translate('During Purchase Description'), + }; }, onchange(event) { setBlockTextColor(this); diff --git a/src/scratch/blocks/Binary/Indicators/bb_statement.js b/src/scratch/blocks/Binary/Indicators/bb_statement.js index 03db7bcb..180ecef9 100755 --- a/src/scratch/blocks/Binary/Indicators/bb_statement.js +++ b/src/scratch/blocks/Binary/Indicators/bb_statement.js @@ -4,7 +4,10 @@ import { translate } from '../../../../utils/lang/i18n'; Blockly.Blocks.bb_statement = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('set %1 to Bollinger Bands %2 %3'), message1: '%1', args0 : [ @@ -35,7 +38,14 @@ Blockly.Blocks.bb_statement = { tooltip : translate('Calculates Bollinger Bands (BB) from a list with a period'), previousStatement: null, nextStatement : null, - }); + category : 'indicators', + }; + }, + meta(){ + return { + 'display_name': translate('BB Statement'), + 'descriptionL': translate('BB Statement Description'), + }; }, onchange(event) { if (!this.workspace || this.isInFlyout || this.workspace.isDragging()) { diff --git a/src/scratch/blocks/Binary/Tick Analysis/last_digit.js b/src/scratch/blocks/Binary/Tick Analysis/last_digit.js index 3ea26998..065aff96 100755 --- a/src/scratch/blocks/Binary/Tick Analysis/last_digit.js +++ b/src/scratch/blocks/Binary/Tick Analysis/last_digit.js @@ -2,7 +2,10 @@ import { translate } from '../../../../utils/lang/i18n'; Blockly.Blocks.last_digit = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0 : translate('Last Digit'), output : 'Number', outputShape : Blockly.OUTPUT_SHAPE_ROUND, @@ -10,7 +13,14 @@ Blockly.Blocks.last_digit = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('Returns the last digit of the latest tick'), - }); + category : translate('tick-analysis'), + }; + }, + meta(){ + return { + 'display_name': translate('Last Digit'), + 'description' : translate('Last Digit Description'), + }; }, onchange(event) { if (!this.workspace || this.isInFlyout || this.workspace.isDragging()) { diff --git a/src/scratch/blocks/Binary/Tools/Candle/ohlc_values_in_list.js b/src/scratch/blocks/Binary/Tools/Candle/ohlc_values_in_list.js index e329810f..d011d1e3 100755 --- a/src/scratch/blocks/Binary/Tools/Candle/ohlc_values_in_list.js +++ b/src/scratch/blocks/Binary/Tools/Candle/ohlc_values_in_list.js @@ -3,7 +3,10 @@ import { translate } from '../../../../../utils/lang/i18n'; Blockly.Blocks.ohlc_values_in_list = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('Make a list of %1 values from candles list %2'), args0 : [ { @@ -22,7 +25,14 @@ Blockly.Blocks.ohlc_values_in_list = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('Returns a list of the selected candle values'), - }); + category : translate('candle'), + }; + }, + meta(){ + return { + 'display_name': translate('Selected Candle list value'), + 'description' : translate('Selected Candle list value description'), + }; }, }; diff --git a/src/scratch/blocks/Binary/Tools/Misc./notify.js b/src/scratch/blocks/Binary/Tools/Misc./notify.js index 97c3df09..d17d35cb 100755 --- a/src/scratch/blocks/Binary/Tools/Misc./notify.js +++ b/src/scratch/blocks/Binary/Tools/Misc./notify.js @@ -3,7 +3,10 @@ import { translate } from '../../../../../utils/lang/i18n'; Blockly.Blocks.notify = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('Notify %1 with sound: %2 %3'), args0 : [ { @@ -28,7 +31,14 @@ Blockly.Blocks.notify = { previousStatement: null, nextStatement : null, tooltip : translate('Creates a notification'), - }); + cateogry : translate('misc'), + }; + }, + meta(){ + return { + 'display_name': translate('Pop out notify'), + 'description' : translate('Pop out notify description'), + }; }, }; diff --git a/src/scratch/blocks/Binary/Tools/Time/epoch.js b/src/scratch/blocks/Binary/Tools/Time/epoch.js index c7c7655d..1a789924 100755 --- a/src/scratch/blocks/Binary/Tools/Time/epoch.js +++ b/src/scratch/blocks/Binary/Tools/Time/epoch.js @@ -2,7 +2,10 @@ import { translate } from '../../../../../utils/lang/i18n'; Blockly.Blocks.epoch = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0 : translate('Seconds Since Epoch'), output : 'Number', outputShape : Blockly.OUTPUT_SHAPE_ROUND, @@ -10,7 +13,14 @@ Blockly.Blocks.epoch = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('Returns the epoch time (seconds since epoch)'), - }); + category : translate('time'), + }; + }, + meta(){ + return { + 'display_name': translate('Second Since Epoch'), + 'description' : translate('Seconds Since Epoch Decription'), + }; }, }; diff --git a/src/scratch/blocks/Binary/Trade Definition/trade_definition.js b/src/scratch/blocks/Binary/Trade Definition/trade_definition.js index 9475d722..3f71b13f 100755 --- a/src/scratch/blocks/Binary/Trade Definition/trade_definition.js +++ b/src/scratch/blocks/Binary/Trade Definition/trade_definition.js @@ -5,7 +5,10 @@ import { translate } from '../../../../utils/lang/i18n'; Blockly.Blocks.trade_definition = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition() { + return { message0: translate('%1 (1) Define your trade contract %2'), message1: '%1', message2: translate('Run Once at Start: %1'), @@ -56,7 +59,15 @@ Blockly.Blocks.trade_definition = { colour : '#2a3052', colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, - }); + tooltip : translate('Trade Definition tooltip'), + category : translate('trade-definition'), + }; + }, + meta() { + return { + 'display_name': translate('Trade Definition'), + 'description' : translate('Define market type, stake, trade type and duration in trade'), + }; }, onchange(event) { setBlockTextColor(this); diff --git a/src/scratch/blocks/Logic/controls_if.js b/src/scratch/blocks/Logic/controls_if.js index 8432a7b4..179c3486 100755 --- a/src/scratch/blocks/Logic/controls_if.js +++ b/src/scratch/blocks/Logic/controls_if.js @@ -9,7 +9,13 @@ Blockly.Blocks.controls_if = { this.elseIfCount = 0; this.elseCount = 0; - this.jsonInit({ + this.jsonInit(this.definition()); + + const addInputIcon = this.getAddInputIcon(); + this.appendDummyInput('MUTATOR').appendField(addInputIcon); + }, + definition(){ + return { message0: translate('if %1 then'), message1: '%1', args0 : [ @@ -28,13 +34,18 @@ Blockly.Blocks.controls_if = { colour : Blockly.Colours.Binary.colour, colourSecondary : Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, - category : Blockly.Categories.control, + // category : Blockly.Categories.control, previousStatement: null, nextStatement : null, - }); - - const addInputIcon = this.getAddInputIcon(); - this.appendDummyInput('MUTATOR').appendField(addInputIcon); + tooltip : translate('If else statement tooltip'), + category : 'logic', + }; + }, + meta(){ + return { + 'display_name': 'If else statement', + 'description' : 'If else statement description', + }; }, /** * Create XML to represent the number of else-if and else inputs. diff --git a/src/scratch/blocks/Math/math_arithmetic.js b/src/scratch/blocks/Math/math_arithmetic.js index ad4b0be6..b68f36ba 100755 --- a/src/scratch/blocks/Math/math_arithmetic.js +++ b/src/scratch/blocks/Math/math_arithmetic.js @@ -1,6 +1,11 @@ +import { translate } from '../../../utils/lang/i18n'; + Blockly.Blocks.math_arithmetic = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: '%1 %2 %3', args0 : [ { @@ -24,7 +29,15 @@ Blockly.Blocks.math_arithmetic = { colour : Blockly.Colours.Binary.colour, colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, - }); + tooltip : translate('Mathematic Arithmetic (Add, minus, mutiply, divide, power)'), + category : translate('mathematical'), + }; + }, + meta(){ + return { + 'display_name': translate('Mathematic Arithmetic'), + 'description' : translate('Mathematic Arithmetic Description'), + }; }, }; diff --git a/src/scratch/blocks/Math/math_change.js b/src/scratch/blocks/Math/math_change.js index 52c3d99d..eaef93ef 100755 --- a/src/scratch/blocks/Math/math_change.js +++ b/src/scratch/blocks/Math/math_change.js @@ -1,8 +1,22 @@ import { translate } from '../../../utils/lang/i18n'; Blockly.Blocks.math_change = { + /** + * Initializes the block, in most cases this calls the jsonInit function, in some + * cases it may add extra properties to the block object. + * https://developers.google.com/blockly/reference/js/Blockly.Block#jsonInit + */ init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + /** + * Block definitions describe how a block looks and behaves, including the text, + * the colour, the shape, and what other blocks it can connect to. We've separated + * the block definition from the init function so we can search through it. + * https://developers.google.com/blockly/guides/create-custom-blocks/define-blocks + */ + definition() { + return { message0: translate('change %1 by %2'), args0 : [ { @@ -21,7 +35,20 @@ Blockly.Blocks.math_change = { colourTertiary : Blockly.Colours.Binary.colourTertiary, previousStatement: null, nextStatement : null, - }); + tooltip : translate('Change Number variable'), + category : 'mathematical', + }; + }, + /** + * Meta returns an object with with properties that contain human readable strings, + * these strings are used in the flyout help content, as well as used for searching + * for specific blocks. + */ + meta() { + return { + 'display_name': translate('Change Math'), + 'description' : translate('Change Number Type Variable'), + }; }, }; diff --git a/src/scratch/blocks/Math/math_single.js b/src/scratch/blocks/Math/math_single.js index df1bc163..71676b09 100755 --- a/src/scratch/blocks/Math/math_single.js +++ b/src/scratch/blocks/Math/math_single.js @@ -2,7 +2,10 @@ import { translate } from '../../../utils/lang/i18n'; Blockly.Blocks.math_single = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('%1 %2'), args0 : [ { @@ -28,7 +31,15 @@ Blockly.Blocks.math_single = { colour : Blockly.Colours.Binary.colour, colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, - }); + tooltip : translate('Mathematical Single Tooltip'), + category : translate('mathematical'), + }; + }, + meta(){ + return { + 'display_name': translate('Mathematical Single'), + 'description' : translate('Mathematical Single Description'), + }; }, }; diff --git a/src/scratch/blocks/Math/math_trig.js b/src/scratch/blocks/Math/math_trig.js index 62ad80f2..151dcd9d 100755 --- a/src/scratch/blocks/Math/math_trig.js +++ b/src/scratch/blocks/Math/math_trig.js @@ -2,7 +2,10 @@ import { translate } from '../../../utils/lang/i18n'; Blockly.Blocks.math_trig = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('%1 %2'), args0 : [ { @@ -28,7 +31,15 @@ Blockly.Blocks.math_trig = { colour : Blockly.Colours.Binary.colour, colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, - }); + tooltip : translate('Mathematical Trig Tooltip'), + category : translate('mathematical'), + }; + }, + meta(){ + return { + 'display_name': translate('Mathematical Trig'), + 'description' : translate('Mathematical Trig Description'), + }; }, }; diff --git a/src/scratch/blocks/Text/text_prompt_ext.js b/src/scratch/blocks/Text/text_prompt_ext.js index 0ec135aa..fd9451d2 100755 --- a/src/scratch/blocks/Text/text_prompt_ext.js +++ b/src/scratch/blocks/Text/text_prompt_ext.js @@ -2,7 +2,25 @@ import { translate } from '../../../utils/lang/i18n'; Blockly.Blocks.text_prompt_ext = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + + // Change shape based on selected type + const typeField = this.getField('TYPE'); + typeField.setValidator(value => { + if (value === 'TEXT') { + this.setOutputShape(Blockly.OUTPUT_SHAPE_SQUARE); + this.setOutput(true, 'String'); + } else if (value === 'NUMBER') { + this.setOutputShape(Blockly.OUTPUT_SHAPE_ROUND); + this.setOutput(true, 'Number'); + } + this.initSvg(); + this.render(false); + return undefined; + }); + }, + definition(){ + return { message0: translate('prompt for %1 with message %2'), args0 : [ { @@ -20,22 +38,15 @@ Blockly.Blocks.text_prompt_ext = { colour : Blockly.Colours.Binary.colour, colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, - }); - - // Change shape based on selected type - const typeField = this.getField('TYPE'); - typeField.setValidator(value => { - if (value === 'TEXT') { - this.setOutputShape(Blockly.OUTPUT_SHAPE_SQUARE); - this.setOutput(true, 'String'); - } else if (value === 'NUMBER') { - this.setOutputShape(Blockly.OUTPUT_SHAPE_ROUND); - this.setOutput(true, 'Number'); - } - this.initSvg(); - this.render(false); - return undefined; - }); + tooltip : translate('Text Prompt Tooltip'), + category : translate('text'), + }; + }, + meta(){ + return { + 'trade_name' : translate('Text Prompt'), + 'description': translate('Text Prompt Description'), + }; }, }; diff --git a/src/scratch/hooks/block.js b/src/scratch/hooks/block.js index b95986ca..2de62b9a 100644 --- a/src/scratch/hooks/block.js +++ b/src/scratch/hooks/block.js @@ -76,3 +76,4 @@ Blockly.Block.prototype.getTopParent = function() { } return null; }; + diff --git a/src/scratch/hooks/data_category.js b/src/scratch/hooks/data_category.js index f8b03767..4bdf1703 100644 --- a/src/scratch/hooks/data_category.js +++ b/src/scratch/hooks/data_category.js @@ -8,11 +8,19 @@ import { translate } from '../../utils/lang/i18n'; */ Blockly.DataCategory = function(workspace) { const variableModelList = workspace.getVariablesOfType(''); - const xmlList = []; - + let xmlList = []; + // `Create Variable`-button Blockly.DataCategory.addCreateButton(xmlList, workspace); + const block_types = ['variables_set', 'variables_get', 'math_change']; + xmlList = xmlList.concat(Blockly.DataCategory.search(variableModelList, block_types)); + + return xmlList; +}; + +Blockly.DataCategory.search = function(variableModelList, blockTypesToShow){ + const xmlList = []; if (variableModelList.length > 0) { const generateVariableFieldXmlString = variableModel => { // The variable name may be user input, so it may contain characters that @@ -23,15 +31,15 @@ Blockly.DataCategory = function(workspace) { return escapedText; }; - // TEMP: Label for testing only - const operationsLabel = document.createElement('label'); - operationsLabel.setAttribute('text', translate('variables_set')); - xmlList.push(operationsLabel); - const firstVariable = variableModelList[0]; // Create 'Set `var` to'-block - if (Blockly.Blocks.variables_set) { + if (blockTypesToShow.includes('variables_set') && Blockly.Blocks.variables_set) { + // TEMP: Label for testing only + const operationsLabel = document.createElement('label'); + operationsLabel.setAttribute('text', translate('variables_set')); + xmlList.push(operationsLabel); + const gap = Blockly.Blocks.math_change ? 8 : 24; const setBlockText = `${generateVariableFieldXmlString( firstVariable @@ -40,13 +48,13 @@ Blockly.DataCategory = function(workspace) { xmlList.push(setBlock); } - // TEMP: Label for testing only - const changeLabel = document.createElement('label'); - changeLabel.setAttribute('text', translate('math_change')); - xmlList.push(changeLabel); - // Create 'Change `var` by `1`'-block - if (Blockly.Blocks.math_change) { + if (blockTypesToShow.includes('math_change') && Blockly.Blocks.math_change) { + // TEMP: Label for testing only + const changeLabel = document.createElement('label'); + changeLabel.setAttribute('text', translate('math_change')); + xmlList.push(changeLabel); + const gap = Blockly.Blocks.variables_get ? 20 : 8; const changeBlockText = `${generateVariableFieldXmlString( firstVariable @@ -55,13 +63,13 @@ Blockly.DataCategory = function(workspace) { xmlList.push(changeBlock); } - // TEMP: Label for testing only - const variablesLabel = document.createElement('label'); - variablesLabel.setAttribute('text', translate('variable_get')); - xmlList.push(variablesLabel); - // Create `variable_get` block for each variable - if (Blockly.Blocks.variables_get) { + if (blockTypesToShow.includes('variables_get') && Blockly.Blocks.variables_get) { + // TEMP: Label for testing only + const variablesLabel = document.createElement('label'); + variablesLabel.setAttribute('text', translate('variable_get')); + xmlList.push(variablesLabel); + variableModelList.sort(Blockly.VariableModel.compareByName); variableModelList.forEach(variable => { diff --git a/src/scratch/hooks/flyout_base.js b/src/scratch/hooks/flyout_base.js index cdb83795..6cf54324 100644 --- a/src/scratch/hooks/flyout_base.js +++ b/src/scratch/hooks/flyout_base.js @@ -1,3 +1,6 @@ + +import { translate } from '../../utils/lang/i18n'; + /* eslint-disable func-names, no-underscore-dangle */ /** @@ -38,7 +41,7 @@ Blockly.Flyout.prototype.scrollAnimationFraction = 1.0; * @param {number} y The computed y origin of the flyout's SVG group. * @protected */ -Blockly.Flyout.prototype.positionAt_ = function(width, height, x, y) { +Blockly.Flyout.prototype.positionAt_ = function (width, height, x, y) { this.svgGroup_.setAttribute('width', width); this.svgGroup_.setAttribute('height', height); @@ -73,6 +76,53 @@ Blockly.Flyout.prototype.positionAt_ = function(width, height, x, y) { * @return {number} The width of the flyout. * deriv-bot: Return actual width rather than this.DEFAULT_WIDTH. */ -Blockly.Flyout.prototype.getWidth = function() { +Blockly.Flyout.prototype.getWidth = function () { return this.width_; }; + +const addSearchFlyout = (callback, xmlList, flyout) => { + let xml_search_list = xmlList; + if (xmlList.type === 'search') { + const blocks = xmlList.blocks; + const fn_blocks = xmlList.fn_blocks; + const var_blocks = xmlList.var_blocks; + const no_result = !blocks.length + && !Object.keys(fn_blocks).length + && !Object.keys(var_blocks.blocks).length; + + xml_search_list = []; + + if (no_result) { + const label = document.createElement('label'); + label.setAttribute('text', translate('No Blocks Found')); + + xml_search_list.push(label); + } else { + const label = document.createElement('label'); + label.setAttribute('text', translate('Result(s)')); + + xml_search_list.push(label); + } + + if (Object.keys(fn_blocks).length) { + const func_xml_list = Blockly.Procedures.flyoutCategory(flyout.workspace_); + + xml_search_list = xml_search_list.concat(func_xml_list); + } + + if (Object.keys(var_blocks).length) { + const var_xml_list = Blockly.DataCategory.search(var_blocks.blocks, var_blocks.blocks_type); + + xml_search_list = xml_search_list.concat(var_xml_list); + } + + xml_search_list = xml_search_list.concat(blocks); + } + + callback(xml_search_list); +}; + +const originalFlyoutShowFn = Blockly.Flyout.prototype.show; +Blockly.Flyout.prototype.show = function (xmlList) { + addSearchFlyout(originalFlyoutShowFn.bind(this), xmlList, this); +}; diff --git a/src/scratch/hooks/toolbox.js b/src/scratch/hooks/toolbox.js index 00464994..09fb5f61 100644 --- a/src/scratch/hooks/toolbox.js +++ b/src/scratch/hooks/toolbox.js @@ -1,5 +1,5 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; +import React from 'react'; +import ReactDOM from 'react-dom'; import { ArrowIcon } from '../../components/Icons.jsx'; import { translate } from '../../utils/lang/i18n'; @@ -8,10 +8,10 @@ import { translate } from '../../utils/lang/i18n'; /** * Initializes the toolbox. */ -Blockly.Toolbox.prototype.init = function() { +Blockly.Toolbox.prototype.init = function () { const workspace = this.workspace_; const svg = this.workspace_.getParentSvg(); - + /** * HTML container for the Toolbox menu. * @type {Element} @@ -31,23 +31,26 @@ Blockly.Toolbox.prototype.init = function() { ReactDOM.render(, el_toolbox_arrow); svg.parentNode.insertBefore(this.HtmlDiv, svg); - + // deriv-bot: Clicking on toolbox arrow collapses it Blockly.bindEventWithChecks_(el_toolbox_arrow, 'mousedown', this, () => { const is_collapsed = this.HtmlDiv.classList.contains('toolbox--collapsed'); - + const searchInput = document.getElementById('search_input'); + if (is_collapsed) { + searchInput.style.display = 'block'; this.HtmlDiv.classList.remove('toolbox--collapsed'); } else { + searchInput.style.display = 'none'; this.HtmlDiv.classList.add('toolbox--collapsed'); } // Fire an event to re-position flyout. window.dispatchEvent(new Event('resize')); }); - + // Clicking on toolbox closes popups. - Blockly.bindEventWithChecks_(this.HtmlDiv, 'mousedown', this, function(e) { + Blockly.bindEventWithChecks_(this.HtmlDiv, 'mousedown', this, function (e) { // Cancel any gestures in progress. this.workspace_.cancelCurrentGesture(); @@ -60,7 +63,7 @@ Blockly.Toolbox.prototype.init = function() { } Blockly.Touch.clearTouchIdentifier(); // Don't block future drags. }, /* opt_noCaptureIdentifier */ false, /* opt_noPreventDefault */ true); - + this.createFlyout_(); this.categoryMenu_ = new Blockly.Toolbox.CategoryMenu(this, this.HtmlDiv); this.populate_(workspace.options.languageTree); @@ -81,28 +84,131 @@ Blockly.Toolbox.prototype.populate_ = function (newTree) { * @private */ Blockly.Toolbox.prototype.showCategory_ = function (category_id) { - let allContents = []; + let flyout_content; - const category = this.categoryMenu_.categories_.find(menuCategory => menuCategory.id_ === category_id); - if (!category) { - return; - } + if (category_id === 'search') { + let search_term = document.getElementById('search_input').value; + const all_variables = this.flyout_.workspace_.getVariablesOfType(''); + + if (search_term.length <= 1) { + this.flyout_.hide(); + return; + } + + flyout_content = { + type : 'search', + blocks : [], + fn_blocks : {}, + var_blocks: { + blocks : [], + blocks_type: [], + }, + }; + + if (typeof search_term === 'string') { + search_term = search_term.trim().toLowerCase(); + search_term = search_term.split(' '); + } - allContents = allContents.concat(category.getContents()); + const blocks = Blockly.Blocks; + Object.keys(blocks).forEach(blockKey => { + let keywords = ` ${blockKey}`; + const block = blocks[blockKey]; + const block_meta = block.meta instanceof Function && block.meta(); + const block_definition = block.definition instanceof Function && block.definition(); + + if (!block_meta) { + return; + } + + Object.keys(block_meta).forEach(key => { + const meta = block_meta[key]; + keywords += ` ${meta}`; + }); + + Object.keys(block_definition).forEach(key => { + const definition = block_definition[key]; + + if (typeof definition === 'string') { + keywords += ` ${definition}`; + } else if (definition instanceof Array) { + definition.forEach(def => { + if (def instanceof Object) { + keywords += !def.type.includes('image') ? ` ${JSON.stringify(def)}` : ''; + } else { + keywords += ` ${def}`; + } + }); + } + }); + + const category = + this.categoryMenu_.categories_ + .find(menuCategory => menuCategory.id_ === block.definition().category); + const contents = category && category.getContents(); + search_term.forEach(term => { + if (keywords.toLowerCase().includes(term)) { + if (contents === 'PROCEDURE') { + flyout_content.fn_blocks[blockKey] = block; + } else if (contents === 'VARIABLE') { + flyout_content.var_blocks.blocks_type.push(blockKey); + flyout_content.var_blocks.blocks = all_variables; + } else if (contents instanceof Array) { + const filteredContents = contents + .filter(content => content.attributes[0].nodeValue === blockKey); + + if (flyout_content.blocks.indexOf(filteredContents[0]) === -1) { + flyout_content.blocks.push(filteredContents[0]); + } + } + } + }); + }); + + all_variables.forEach(variable => { + search_term.forEach(term => { + if (variable.name.toLowerCase().includes(term) + && flyout_content.var_blocks.blocks.indexOf(variable) === -1) { + flyout_content.var_blocks.blocks.push(variable); + flyout_content.var_blocks.blocks_type = ['variables_get', 'variables_set', 'math_change']; + } + }); + }); + } else { + const category = this.categoryMenu_.categories_.find(menuCategory => menuCategory.id_ === category_id); + if (!category) { + return; + } + + flyout_content = []; + flyout_content = flyout_content.concat(category.getContents()); + } this.flyout_.autoClose = true; - this.flyout_.show(allContents); + this.flyout_.show(flyout_content); }; /** * Create the DOM for the category menu. * deriv-bot: Custom class names */ -Blockly.Toolbox.CategoryMenu.prototype.createDom = function() { +Blockly.Toolbox.CategoryMenu.prototype.createDom = function () { const className = this.parent_.horizontalLayout_ ? 'toolbox__horizontal-category-menu' : 'toolbox__category-menu'; this.table = goog.dom.createDom('div', className); - this.parentHtml_.appendChild(this.table); + this.search = goog.dom.createDom('input', { + id : 'search_input', + type : 'text', + placeholder: 'Search', + }); + this.parentHtml_.appendChild(this.table).appendChild(this.search); + + const search = document.getElementById('search_input'); + search.addEventListener('keyup', () => { + const toolbox = this.parent_; + + toolbox.setSelectedItem(toolbox.categoryMenu_.categories_.find(menuCategory => menuCategory.id_ === 'search')); + }); // Hide flyout on scrolling the toolbox category menu in // order to ensure correct positioning of flyout. @@ -121,17 +227,17 @@ Blockly.Toolbox.CategoryMenu.prototype.createDom = function() { * deriv-bot: Port from Google Blockly * @param {Node} domTree DOM tree of blocks, or null. */ -Blockly.Toolbox.CategoryMenu.prototype.populate = function(domTree) { +Blockly.Toolbox.CategoryMenu.prototype.populate = function (domTree) { if (!domTree) { return; } - + // Remove old categories this.dispose(); this.createDom(); const categories = []; - + // Find actual categories from the DOM tree. domTree.childNodes.forEach((child) => { if (child.tagName && child.tagName.toUpperCase() === 'CATEGORY') { @@ -160,7 +266,7 @@ Blockly.Toolbox.CategoryMenu.prototype.populate = function(domTree) { * @return {string} The css class names to be applied, space-separated. * deriv-bot: Custom class names */ -Blockly.Toolbox.Category.prototype.getMenuItemClassName_ = function(selected) { +Blockly.Toolbox.Category.prototype.getMenuItemClassName_ = function (selected) { const classNames = ['toolbox__item', `toolbox__category--${this.id_}`]; if (selected) { @@ -220,7 +326,7 @@ Blockly.Toolbox.prototype.setSelectedItem = function (item) { * flyout with all available blocks. This method is called by refreshToolboxSelection_() * which does the actual refreshing. */ -Blockly.Toolbox.prototype.refreshSelection = function() { +Blockly.Toolbox.prototype.refreshSelection = function () { }; /** diff --git a/src/scratch/xml/toolbox.xml b/src/scratch/xml/toolbox.xml index 8dc82f27..52fce2b1 100644 --- a/src/scratch/xml/toolbox.xml +++ b/src/scratch/xml/toolbox.xml @@ -1,5 +1,6 @@ + From debc4a450a3142ed834a0d509b773c1c9362f245 Mon Sep 17 00:00:00 2001 From: McSam Date: Tue, 16 Jul 2019 13:54:00 +0800 Subject: [PATCH 2/5] add definition & meta to blocks --- .../blocks/Advanced/List/lists_getIndex.js | 6 +++ .../blocks/Advanced/List/lists_getSublist.js | 6 +++ .../blocks/Advanced/List/lists_indexOf.js | 15 ++++++- .../blocks/Advanced/List/lists_isEmpty.js | 15 ++++++- .../blocks/Advanced/List/lists_length.js | 15 ++++++- .../blocks/Advanced/List/lists_repeat.js | 15 ++++++- .../blocks/Advanced/List/lists_setIndex.js | 6 +++ .../blocks/Advanced/List/lists_sort.js | 15 ++++++- .../blocks/Advanced/List/lists_split.js | 6 +++ .../blocks/Advanced/List/lists_statement.js | 24 ++++++++--- .../Loops/controls_flow_statements.js | 15 ++++++- .../blocks/Advanced/Loops/controls_for.js | 15 ++++++- .../blocks/Advanced/Loops/controls_forEach.js | 15 ++++++- .../blocks/Advanced/Loops/controls_repeat.js | 15 ++++++- .../Advanced/Loops/controls_repeat_ext.js | 15 ++++++- .../Advanced/Loops/controls_whileUntil.js | 15 ++++++- .../Binary/Tools/Candle/is_candle_black.js | 14 ++++++- .../Binary/Tools/Candle/read_ohlc_obj.js | 13 +++++- .../blocks/Binary/Tools/Misc./balance.js | 39 +++++++++++------- .../blocks/Binary/Tools/Misc./block_holder.js | 13 +++++- .../blocks/Binary/Tools/Misc./loader.js | 20 ++++++--- .../blocks/Binary/Tools/Misc./total_profit.js | 13 +++++- .../blocks/Binary/Tools/Misc./total_runs.js | 13 +++++- .../blocks/Binary/Tools/Time/timeout.js | 13 +++++- .../trade_definition_tradeoptions.js | 21 +++++++--- src/scratch/blocks/Logic/logic_boolean.js | 16 ++++++-- src/scratch/blocks/Logic/logic_negate.js | 15 ++++++- src/scratch/blocks/Math/math_constant.js | 17 +++++++- src/scratch/blocks/Math/math_constrain.js | 15 ++++++- src/scratch/blocks/Math/math_modulo.js | 15 ++++++- src/scratch/blocks/Math/math_number.js | 23 ++++++++--- .../blocks/Math/math_number_property.js | 29 +++++++++---- src/scratch/blocks/Math/math_on_list.js | 15 ++++++- src/scratch/blocks/Math/math_random_float.js | 15 ++++++- src/scratch/blocks/Math/math_random_int.js | 15 ++++++- src/scratch/blocks/Math/math_round.js | 17 +++++++- src/scratch/blocks/Text/text.js | 17 +++++++- src/scratch/blocks/Text/text_append.js | 15 ++++++- src/scratch/blocks/Text/text_changeCase.js | 15 ++++++- src/scratch/blocks/Text/text_charAt.js | 41 ++++++++++++------- src/scratch/blocks/Text/text_getSubstring.js | 21 +++++++--- src/scratch/blocks/Text/text_indexOf.js | 15 ++++++- src/scratch/blocks/Text/text_isEmpty.js | 15 ++++++- src/scratch/blocks/Text/text_join.js | 25 +++++++---- src/scratch/blocks/Text/text_length.js | 15 ++++++- src/scratch/blocks/Text/text_print.js | 15 ++++++- src/scratch/blocks/Text/text_statement.js | 24 ++++++++--- src/scratch/blocks/Text/text_trim.js | 15 ++++++- src/scratch/hooks/toolbox.js | 3 +- 49 files changed, 652 insertions(+), 148 deletions(-) diff --git a/src/scratch/blocks/Advanced/List/lists_getIndex.js b/src/scratch/blocks/Advanced/List/lists_getIndex.js index 88becfa8..28793a1c 100755 --- a/src/scratch/blocks/Advanced/List/lists_getIndex.js +++ b/src/scratch/blocks/Advanced/List/lists_getIndex.js @@ -34,6 +34,12 @@ Blockly.Blocks.lists_getIndex = { this.updateAt(true); }, + meta(){ + return { + 'display_name': translate('List Get Index'), + 'description' : translate('List Get Index Description'), + }; + }, mutationToDom() { const container = document.createElement('mutation'); const isStatement = !this.outputConnection; diff --git a/src/scratch/blocks/Advanced/List/lists_getSublist.js b/src/scratch/blocks/Advanced/List/lists_getSublist.js index aeda49a8..0ae4e7c7 100755 --- a/src/scratch/blocks/Advanced/List/lists_getSublist.js +++ b/src/scratch/blocks/Advanced/List/lists_getSublist.js @@ -29,6 +29,12 @@ Blockly.Blocks.lists_getSublist = { this.updateAt(1, true); this.updateAt(2, true); }, + meta() { + return { + 'display_name': translate('List get sublit'), + 'description' : translate('List get sublist description'), + }; + }, mutationToDom() { const container = document.createElement('mutation'); const isAt1 = this.getInput('AT1').type === Blockly.INPUT_VALUE; diff --git a/src/scratch/blocks/Advanced/List/lists_indexOf.js b/src/scratch/blocks/Advanced/List/lists_indexOf.js index 5ae99e1f..3c6ba183 100755 --- a/src/scratch/blocks/Advanced/List/lists_indexOf.js +++ b/src/scratch/blocks/Advanced/List/lists_indexOf.js @@ -2,7 +2,10 @@ import { translate } from '../../../../utils/lang/i18n'; Blockly.Blocks.lists_indexOf = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('in list %1 find %2 occurence of item %3'), args0 : [ { @@ -24,7 +27,15 @@ Blockly.Blocks.lists_indexOf = { colour : Blockly.Colours.Binary.colour, colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, - }); + tooltip : translate('Index of List Tooltip'), + category : 'list', + }; + }, + meta(){ + return { + 'display_name': translate('Index Of List'), + 'description' : translate('Index of List Description'), + }; }, }; diff --git a/src/scratch/blocks/Advanced/List/lists_isEmpty.js b/src/scratch/blocks/Advanced/List/lists_isEmpty.js index b22d2d9e..096181d2 100755 --- a/src/scratch/blocks/Advanced/List/lists_isEmpty.js +++ b/src/scratch/blocks/Advanced/List/lists_isEmpty.js @@ -2,7 +2,10 @@ import { translate } from '../../../../utils/lang/i18n'; Blockly.Blocks.lists_isEmpty = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('list %1 is empty'), args0 : [ { @@ -16,7 +19,15 @@ Blockly.Blocks.lists_isEmpty = { colour : Blockly.Colours.Binary.colour, colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, - }); + tooltip : translate('List is Empty Tooltip'), + category : 'list', + }; + }, + meta(){ + return { + 'display_name': translate('List is Empty'), + 'description' : translate('List is empty Description'), + }; }, }; diff --git a/src/scratch/blocks/Advanced/List/lists_length.js b/src/scratch/blocks/Advanced/List/lists_length.js index 9e73be6e..1c5e3cb7 100755 --- a/src/scratch/blocks/Advanced/List/lists_length.js +++ b/src/scratch/blocks/Advanced/List/lists_length.js @@ -2,7 +2,10 @@ import { translate } from '../../../../utils/lang/i18n'; Blockly.Blocks.lists_length = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('length of %1'), args0 : [ { @@ -15,7 +18,15 @@ Blockly.Blocks.lists_length = { colour : Blockly.Colours.Binary.colour, colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, - }); + tooltip : translate('List Length Tooltip'), + category : 'list', + }; + }, + meta(){ + return { + 'display_name': translate('List Length'), + 'description' : translate('List Length Description'), + }; }, }; diff --git a/src/scratch/blocks/Advanced/List/lists_repeat.js b/src/scratch/blocks/Advanced/List/lists_repeat.js index af19acff..bf94b8e8 100755 --- a/src/scratch/blocks/Advanced/List/lists_repeat.js +++ b/src/scratch/blocks/Advanced/List/lists_repeat.js @@ -2,7 +2,10 @@ import { translate } from '../../../../utils/lang/i18n'; Blockly.Blocks.lists_repeat = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('set %1 to item %2 repeated %3 times'), args0 : [ { @@ -24,7 +27,15 @@ Blockly.Blocks.lists_repeat = { colourTertiary : Blockly.Colours.Binary.colourTertiary, previousStatement: null, nextStatement : null, - }); + tooltip : translate('List Repeat Tooltip'), + category : 'list', + }; + }, + meta(){ + return { + 'display_name': translate('List Repeat'), + 'description' : translate('List Repeat Description'), + }; }, }; diff --git a/src/scratch/blocks/Advanced/List/lists_setIndex.js b/src/scratch/blocks/Advanced/List/lists_setIndex.js index 79227619..21227b49 100755 --- a/src/scratch/blocks/Advanced/List/lists_setIndex.js +++ b/src/scratch/blocks/Advanced/List/lists_setIndex.js @@ -29,6 +29,12 @@ Blockly.Blocks.lists_setIndex = { this.updateAt(true); }, + meta(){ + return { + 'display_name': translate('List set Index'), + 'description' : translate('List set Index'), + }; + }, mutationToDom() { const container = document.createElement('mutation'); const isAt = this.getInput('AT').type === Blockly.INPUT_VALUE; diff --git a/src/scratch/blocks/Advanced/List/lists_sort.js b/src/scratch/blocks/Advanced/List/lists_sort.js index 197855c2..58f37351 100755 --- a/src/scratch/blocks/Advanced/List/lists_sort.js +++ b/src/scratch/blocks/Advanced/List/lists_sort.js @@ -2,7 +2,10 @@ import { translate } from '../../../../utils/lang/i18n'; Blockly.Blocks.lists_sort = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('sort %1 %2 %3'), args0 : [ { @@ -25,7 +28,15 @@ Blockly.Blocks.lists_sort = { colour : Blockly.Colours.Binary.colour, colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, - }); + tooltip : translate('List Sort Tooltip'), + category : 'list', + }; + }, + meta(){ + return { + 'display_name': translate('List Sort'), + 'description' : translate('List Sort Description'), + }; }, }; diff --git a/src/scratch/blocks/Advanced/List/lists_split.js b/src/scratch/blocks/Advanced/List/lists_split.js index 6c193107..2f87d28f 100755 --- a/src/scratch/blocks/Advanced/List/lists_split.js +++ b/src/scratch/blocks/Advanced/List/lists_split.js @@ -26,6 +26,12 @@ Blockly.Blocks.lists_split = { Blockly.Colours.Binary.colourTertiary ); }, + meta(){ + return { + 'display_name': translate('List Split'), + 'description' : translate('List SPlit Description'), + }; + }, mutationToDom() { const container = document.createElement('mutation'); container.setAttribute('mode', this.getFieldValue('MODE')); diff --git a/src/scratch/blocks/Advanced/List/lists_statement.js b/src/scratch/blocks/Advanced/List/lists_statement.js index 468dd6de..ea73323d 100755 --- a/src/scratch/blocks/Advanced/List/lists_statement.js +++ b/src/scratch/blocks/Advanced/List/lists_statement.js @@ -1,10 +1,18 @@ import { minusIconDark } from '../../images'; +import { translate } from '../../../../utils/lang/i18n'; Blockly.Blocks.lists_statement = { init() { this.requiredParentId = ''; - this.jsonInit({ + this.jsonInit(this.definition()); + + // Render a ➖-icon for removing self + const fieldImage = new Blockly.FieldImage(minusIconDark, 25, 25, '', () => this.onIconClick()); + this.appendDummyInput('REMOVE_ICON').appendField(fieldImage); + }, + definition(){ + return { message0: '%1', args0 : [ { @@ -17,11 +25,15 @@ Blockly.Blocks.lists_statement = { colourTertiary : Blockly.Colours.BinaryLessGray.colourTertiary, previousStatement: null, nextStatement : null, - }); - - // Render a ➖-icon for removing self - const fieldImage = new Blockly.FieldImage(minusIconDark, 25, 25, '', () => this.onIconClick()); - this.appendDummyInput('REMOVE_ICON').appendField(fieldImage); + tooltip : translate('List Statement Tooltip'), + category : 'list', + }; + }, + meta(){ + return { + 'display_name': translate('List Statement'), + 'description' : translate('List Statement Description'), + }; }, onIconClick() { if (!this.workspace || this.isInFlyout) { diff --git a/src/scratch/blocks/Advanced/Loops/controls_flow_statements.js b/src/scratch/blocks/Advanced/Loops/controls_flow_statements.js index 21ff0c09..9325718e 100755 --- a/src/scratch/blocks/Advanced/Loops/controls_flow_statements.js +++ b/src/scratch/blocks/Advanced/Loops/controls_flow_statements.js @@ -2,7 +2,10 @@ import { translate } from '../../../../utils/lang/i18n'; Blockly.Blocks.controls_flow_statements = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('%1 of loop'), args0 : [ { @@ -19,7 +22,15 @@ Blockly.Blocks.controls_flow_statements = { colourTertiary : Blockly.Colours.Binary.colourTertiary, previousStatement: null, nextStatement : null, - }); + tooltip : translate('Control Statement Tooltip'), + category : 'loop', + }; + }, + meta(){ + return { + 'display_name': translate('Control Statement'), + 'description' : translate('Control Statement Description'), + }; }, }; diff --git a/src/scratch/blocks/Advanced/Loops/controls_for.js b/src/scratch/blocks/Advanced/Loops/controls_for.js index 9b9e30c8..ea457bcd 100755 --- a/src/scratch/blocks/Advanced/Loops/controls_for.js +++ b/src/scratch/blocks/Advanced/Loops/controls_for.js @@ -2,7 +2,10 @@ import { translate } from '../../../../utils/lang/i18n'; Blockly.Blocks.controls_for = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('count with %1 from %2 to %3 by %4'), args0 : [ { @@ -38,7 +41,15 @@ Blockly.Blocks.controls_for = { colourTertiary : Blockly.Colours.Binary.colourTertiary, previousStatement: null, nextStatement : null, - }); + tooltip : translate('Control For Tooltip'), + category : 'loop', + }; + }, + meta(){ + return { + 'display_name': translate('Control For'), + 'description' : translate('Control For Description'), + }; }, }; diff --git a/src/scratch/blocks/Advanced/Loops/controls_forEach.js b/src/scratch/blocks/Advanced/Loops/controls_forEach.js index 902f51ed..6ff83e18 100755 --- a/src/scratch/blocks/Advanced/Loops/controls_forEach.js +++ b/src/scratch/blocks/Advanced/Loops/controls_forEach.js @@ -2,7 +2,10 @@ import { translate } from '../../../../utils/lang/i18n'; Blockly.Blocks.controls_forEach = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('for each item %1 in list %2'), args0 : [ { @@ -28,7 +31,15 @@ Blockly.Blocks.controls_forEach = { colourTertiary : Blockly.Colours.Binary.colourTertiary, previousStatement: null, nextStatement : null, - }); + tooltip : translate('Control Foreach Tooltip'), + category : 'loop', + }; + }, + meta(){ + return { + 'display_name': translate('Control Foreach'), + 'description' : translate('Control Foreach'), + }; }, }; diff --git a/src/scratch/blocks/Advanced/Loops/controls_repeat.js b/src/scratch/blocks/Advanced/Loops/controls_repeat.js index ee2dee68..1f211b38 100755 --- a/src/scratch/blocks/Advanced/Loops/controls_repeat.js +++ b/src/scratch/blocks/Advanced/Loops/controls_repeat.js @@ -2,7 +2,10 @@ import { translate } from '../../../../utils/lang/i18n'; Blockly.Blocks.controls_repeat = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { type : 'controls_repeat', message0: translate('repeat %1 times'), args0 : [ @@ -26,7 +29,15 @@ Blockly.Blocks.controls_repeat = { colourTertiary : Blockly.Colours.Binary.colourTertiary, previousStatement: null, nextStatement : null, - }); + tooltip : translate('Control Repeat Tooltip'), + category : 'loop', + }; + }, + meta(){ + return { + 'display_name': translate('Control Repeat'), + 'description' : translate('Control Repeat Description'), + }; }, }; diff --git a/src/scratch/blocks/Advanced/Loops/controls_repeat_ext.js b/src/scratch/blocks/Advanced/Loops/controls_repeat_ext.js index 91917016..6466c22e 100755 --- a/src/scratch/blocks/Advanced/Loops/controls_repeat_ext.js +++ b/src/scratch/blocks/Advanced/Loops/controls_repeat_ext.js @@ -2,7 +2,10 @@ import { translate } from '../../../../utils/lang/i18n'; Blockly.Blocks.controls_repeat_ext = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('repeat %1 times'), args0 : [ { @@ -23,7 +26,15 @@ Blockly.Blocks.controls_repeat_ext = { colourTertiary : Blockly.Colours.Binary.colourTertiary, previousStatement: null, nextStatement : null, - }); + tooltip : translate('Control Repeat Tooltip'), + category : 'loop', + }; + }, + meta(){ + return { + 'display_name': translate('Control Repeat'), + 'description' : translate('Control Repeat Description'), + }; }, }; diff --git a/src/scratch/blocks/Advanced/Loops/controls_whileUntil.js b/src/scratch/blocks/Advanced/Loops/controls_whileUntil.js index 71b33141..c10ad247 100755 --- a/src/scratch/blocks/Advanced/Loops/controls_whileUntil.js +++ b/src/scratch/blocks/Advanced/Loops/controls_whileUntil.js @@ -2,7 +2,10 @@ import { translate } from '../../../../utils/lang/i18n'; Blockly.Blocks.controls_whileUntil = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('repeat %1 %2'), args0 : [ { @@ -28,7 +31,15 @@ Blockly.Blocks.controls_whileUntil = { colourTertiary : Blockly.Colours.Binary.colourTertiary, previousStatement: null, nextStatement : null, - }); + tooltip : translate('Control While Tooltip'), + category : 'loop', + }; + }, + meta(){ + return { + 'display_name': translate('Control While'), + 'description' : translate('Control While Description'), + }; }, }; diff --git a/src/scratch/blocks/Binary/Tools/Candle/is_candle_black.js b/src/scratch/blocks/Binary/Tools/Candle/is_candle_black.js index 6b2b5618..870ad683 100755 --- a/src/scratch/blocks/Binary/Tools/Candle/is_candle_black.js +++ b/src/scratch/blocks/Binary/Tools/Candle/is_candle_black.js @@ -2,7 +2,10 @@ import { translate } from '../../../../../utils/lang/i18n'; Blockly.Blocks.is_candle_black = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('Is candle black? %1'), args0 : [ { @@ -19,7 +22,14 @@ Blockly.Blocks.is_candle_black = { tooltip : translate( 'Checks if the given candle is black, returns true if close is less than open in the given candle.' ), - }); + category: 'candle', + }; + }, + meta(){ + return { + 'display_name': translate('Is Candle Block'), + 'description' : translate('Is Candle Black Description'), + }; }, }; diff --git a/src/scratch/blocks/Binary/Tools/Candle/read_ohlc_obj.js b/src/scratch/blocks/Binary/Tools/Candle/read_ohlc_obj.js index 31ec0140..1bd2cb8d 100755 --- a/src/scratch/blocks/Binary/Tools/Candle/read_ohlc_obj.js +++ b/src/scratch/blocks/Binary/Tools/Candle/read_ohlc_obj.js @@ -3,7 +3,10 @@ import { translate } from '../../../../../utils/lang/i18n'; Blockly.Blocks.read_ohlc_obj = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('Read %1 value in candle %2'), args0 : [ { @@ -22,7 +25,13 @@ Blockly.Blocks.read_ohlc_obj = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('Read a field in a candle (read from the Candles list)'), - }); + }; + }, + meta(){ + return { + 'display_name': translate('Read candle '), + 'description' : translate('Read candle Description'), + }; }, }; diff --git a/src/scratch/blocks/Binary/Tools/Misc./balance.js b/src/scratch/blocks/Binary/Tools/Misc./balance.js index 7be83f61..96c3dcfe 100755 --- a/src/scratch/blocks/Binary/Tools/Misc./balance.js +++ b/src/scratch/blocks/Binary/Tools/Misc./balance.js @@ -3,20 +3,7 @@ import { translate } from '../../../../../utils/lang/i18n'; Blockly.Blocks.balance = { init() { - this.jsonInit({ - message0: translate('Balance: %1'), - args0 : [ - { - type : 'field_dropdown', - name : 'BALANCE_TYPE', - options: config.lists.BALANCE_TYPE, - }, - ], - output : null, - colour : Blockly.Colours.Binary.colour, - colourSecondary: Blockly.Colours.Binary.colourSecondary, - colourTertiary : Blockly.Colours.Binary.colourTertiary, - }); + this.jsonInit(this.definition()); // Change shape based on selected type const balanceTypeField = this.getField('BALANCE_TYPE'); @@ -33,6 +20,30 @@ Blockly.Blocks.balance = { return undefined; }); }, + definition(){ + return { + message0: translate('Balance: %1'), + args0 : [ + { + type : 'field_dropdown', + name : 'BALANCE_TYPE', + options: config.lists.BALANCE_TYPE, + }, + ], + output : null, + colour : Blockly.Colours.Binary.colour, + colourSecondary: Blockly.Colours.Binary.colourSecondary, + colourTertiary : Blockly.Colours.Binary.colourTertiary, + tooltip : translate('Balance Tooltip'), + category : 'miscellaneous', + }; + }, + meta(){ + return { + 'display_name': translate('Balance'), + 'description' : translate('Balance Description'), + }; + }, }; Blockly.JavaScript.balance = block => { diff --git a/src/scratch/blocks/Binary/Tools/Misc./block_holder.js b/src/scratch/blocks/Binary/Tools/Misc./block_holder.js index a09592ed..03dbc123 100755 --- a/src/scratch/blocks/Binary/Tools/Misc./block_holder.js +++ b/src/scratch/blocks/Binary/Tools/Misc./block_holder.js @@ -2,7 +2,10 @@ import { translate } from '../../../../../utils/lang/i18n'; Blockly.Blocks.block_holder = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('Blocks inside are ignored %1 %2'), args0 : [ { @@ -18,7 +21,13 @@ Blockly.Blocks.block_holder = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('Put your blocks in here to prevent them from being removed'), - }); + }; + }, + meta(){ + return { + 'display_name': translate('Block Holder'), + 'description' : translate('Block Holder Description'), + }; }, }; diff --git a/src/scratch/blocks/Binary/Tools/Misc./loader.js b/src/scratch/blocks/Binary/Tools/Misc./loader.js index b6d66b0b..16242034 100755 --- a/src/scratch/blocks/Binary/Tools/Misc./loader.js +++ b/src/scratch/blocks/Binary/Tools/Misc./loader.js @@ -8,7 +8,14 @@ Blockly.Blocks.loader = { this.loadedVariables = []; this.currentUrl = ''; - this.jsonInit({ + this.jsonInit(this.definition()); + + const urlField = this.getField('URL'); + // eslint-disable-next-line no-underscore-dangle + urlField.onFinishEditing_ = newValue => this.onFinishEditingUrl(newValue); + }, + definition(){ + return { message0: translate('Load block from: %1'), args0 : [ { @@ -21,11 +28,12 @@ Blockly.Blocks.loader = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('Load blocks from URL'), - }); - - const urlField = this.getField('URL'); - // eslint-disable-next-line no-underscore-dangle - urlField.onFinishEditing_ = newValue => this.onFinishEditingUrl(newValue); + }; + }, meta(){ + return { + 'display_name': translate('Lodear'), + 'description' : translate('Loeder Description'), + }; }, onFinishEditingUrl(newValue) { if (this.currentUrl === newValue) { diff --git a/src/scratch/blocks/Binary/Tools/Misc./total_profit.js b/src/scratch/blocks/Binary/Tools/Misc./total_profit.js index 97c3a8f1..bee9a363 100755 --- a/src/scratch/blocks/Binary/Tools/Misc./total_profit.js +++ b/src/scratch/blocks/Binary/Tools/Misc./total_profit.js @@ -2,7 +2,10 @@ import { translate } from '../../../../../utils/lang/i18n'; Blockly.Blocks.total_profit = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0 : translate('Total Profit'), output : 'Number', outputShape : Blockly.OUTPUT_SHAPE_ROUND, @@ -10,7 +13,13 @@ Blockly.Blocks.total_profit = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('Returns the total profit'), - }); + }; + }, + meta(){ + return { + 'display_name': translate('Total Profit'), + 'description' : translate('Total Profit Description'), + }; }, }; diff --git a/src/scratch/blocks/Binary/Tools/Misc./total_runs.js b/src/scratch/blocks/Binary/Tools/Misc./total_runs.js index 46baca5c..59e5fab5 100755 --- a/src/scratch/blocks/Binary/Tools/Misc./total_runs.js +++ b/src/scratch/blocks/Binary/Tools/Misc./total_runs.js @@ -2,7 +2,10 @@ import { translate } from '../../../../../utils/lang/i18n'; Blockly.Blocks.total_runs = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0 : translate('Number of Runs'), output : 'Number', outputShape : Blockly.OUTPUT_SHAPE_ROUND, @@ -10,7 +13,13 @@ Blockly.Blocks.total_runs = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('Returns the number of runs since the beginning'), - }); + }; + }, + meta(){ + return { + 'display_name': translate('Total Runs'), + 'description' : translate('Total Runs Description'), + }; }, }; diff --git a/src/scratch/blocks/Binary/Tools/Time/timeout.js b/src/scratch/blocks/Binary/Tools/Time/timeout.js index a4a4ac68..89bb9636 100755 --- a/src/scratch/blocks/Binary/Tools/Time/timeout.js +++ b/src/scratch/blocks/Binary/Tools/Time/timeout.js @@ -2,7 +2,10 @@ import { translate } from '../../../../../utils/lang/i18n'; Blockly.Blocks.timeout = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('%1 %2 Run after %3 second(s)'), args0 : [ { @@ -23,7 +26,13 @@ Blockly.Blocks.timeout = { previousStatement: null, nextStatement : null, tooltip : translate('Run the blocks inside every n seconds'), - }); + }; + }, + meta(){ + return { + 'display_name': translate('Timeout'), + 'description' : translate('Timeout Description'), + }; }, onchange(event) { if (!this.workspace || this.isInFlyout || this.workspace.isDragging()) { diff --git a/src/scratch/blocks/Binary/Trade Definition/trade_definition_tradeoptions.js b/src/scratch/blocks/Binary/Trade Definition/trade_definition_tradeoptions.js index a21aae4b..b763dd8c 100755 --- a/src/scratch/blocks/Binary/Trade Definition/trade_definition_tradeoptions.js +++ b/src/scratch/blocks/Binary/Trade Definition/trade_definition_tradeoptions.js @@ -8,7 +8,13 @@ import { translate } from '../../../../utils/lang/i18n'; Blockly.Blocks.trade_definition_tradeoptions = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + + // Ensure one of this type per statement-stack + this.setNextStatement(false); + }, + definition(){ + return { message0: translate('Duration: %1 %2 Stake: %3 %4'), args0 : [ { @@ -36,10 +42,15 @@ Blockly.Blocks.trade_definition_tradeoptions = { colourTertiary : Blockly.Colours.BinaryLessPurple.colourTertiary, previousStatement: null, nextStatement : null, - }); - - // Ensure one of this type per statement-stack - this.setNextStatement(false); + tooltip : translate('Trade Options Tooltip'), + category : 'trade-definition', + }; + }, + meta(){ + return { + 'display_name': translate('Trade Options'), + 'description' : translate('Trade Options Description'), + }; }, onchange(event) { const allowedEvents = [Blockly.Events.BLOCK_CREATE, Blockly.Events.BLOCK_CHANGE, Blockly.Events.END_DRAG]; diff --git a/src/scratch/blocks/Logic/logic_boolean.js b/src/scratch/blocks/Logic/logic_boolean.js index 11914f3c..99992833 100755 --- a/src/scratch/blocks/Logic/logic_boolean.js +++ b/src/scratch/blocks/Logic/logic_boolean.js @@ -2,7 +2,10 @@ import { translate } from '../../../utils/lang/i18n'; Blockly.Blocks.logic_boolean = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: '%1', args0 : [ { @@ -16,8 +19,15 @@ Blockly.Blocks.logic_boolean = { colour : Blockly.Colours.Binary.colour, colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, - category : Blockly.Categories.operators, - }); + tooltip : translate('Logic Boolean Tooltip'), + category : 'logic', + }; + }, + meta(){ + return { + 'display_name': translate('Logic Boolean'), + 'description' : translate('Logic Boolean Description'), + }; }, }; diff --git a/src/scratch/blocks/Logic/logic_negate.js b/src/scratch/blocks/Logic/logic_negate.js index abfc0d2f..cf5e0040 100755 --- a/src/scratch/blocks/Logic/logic_negate.js +++ b/src/scratch/blocks/Logic/logic_negate.js @@ -2,7 +2,10 @@ import { translate } from '../../../utils/lang/i18n'; Blockly.Blocks.logic_negate = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('not %1'), args0 : [ { @@ -15,7 +18,15 @@ Blockly.Blocks.logic_negate = { colour : Blockly.Colours.Binary.colour, colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, - }); + tooltip : translate('Logic Negate Tooltip'), + category : 'logic', + }; + }, + meta(){ + return { + 'display_name': translate('Logic Negate'), + 'description' : translate('Logic Negate Description'), + }; }, }; diff --git a/src/scratch/blocks/Math/math_constant.js b/src/scratch/blocks/Math/math_constant.js index b7d4be83..050a1450 100755 --- a/src/scratch/blocks/Math/math_constant.js +++ b/src/scratch/blocks/Math/math_constant.js @@ -1,6 +1,11 @@ +import { translate } from '../../../utils/lang/i18n'; + Blockly.Blocks.math_constant = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: '%1', args0 : [ { @@ -21,7 +26,15 @@ Blockly.Blocks.math_constant = { colour : Blockly.Colours.Binary.colour, colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, - }); + tooltip : translate('Math Constant Tooltip'), + category : 'mathematical', + }; + }, + meta(){ + return { + 'display_name': translate('Math Constant'), + 'description' : translate('Math Constant Description'), + }; }, }; diff --git a/src/scratch/blocks/Math/math_constrain.js b/src/scratch/blocks/Math/math_constrain.js index 3d3c6dee..4859f33b 100755 --- a/src/scratch/blocks/Math/math_constrain.js +++ b/src/scratch/blocks/Math/math_constrain.js @@ -2,7 +2,10 @@ import { translate } from '../../../utils/lang/i18n'; Blockly.Blocks.math_constrain = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('constrain %1 low %2 high %3'), args0 : [ { @@ -26,7 +29,15 @@ Blockly.Blocks.math_constrain = { colour : Blockly.Colours.Binary.colour, colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, - }); + tooltip : translate('Math Constrain Tooltip'), + category : 'mathematical', + }; + }, + meta(){ + return { + 'display_name': translate('Math Constrain'), + 'description' : translate('Math Constrain Description'), + }; }, }; diff --git a/src/scratch/blocks/Math/math_modulo.js b/src/scratch/blocks/Math/math_modulo.js index f060bd60..9a49a9cc 100755 --- a/src/scratch/blocks/Math/math_modulo.js +++ b/src/scratch/blocks/Math/math_modulo.js @@ -2,7 +2,10 @@ import { translate } from '../../../utils/lang/i18n'; Blockly.Blocks.math_modulo = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('remainder of %1 ÷ %2'), args0 : [ { @@ -21,7 +24,15 @@ Blockly.Blocks.math_modulo = { colour : Blockly.Colours.Binary.colour, colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, - }); + tooltip : translate('Math Modulo Tooltip'), + category : 'mathematical', + }; + }, + meta(){ + return { + 'display_name': translate('Math Modulo'), + 'description' : translate('Math Modulo Description'), + }; }, }; diff --git a/src/scratch/blocks/Math/math_number.js b/src/scratch/blocks/Math/math_number.js index 1110039b..eff5c3b5 100755 --- a/src/scratch/blocks/Math/math_number.js +++ b/src/scratch/blocks/Math/math_number.js @@ -1,6 +1,14 @@ +import { translate } from '../../../utils/lang/i18n'; + Blockly.Blocks.math_number = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + + const fieldInput = this.getField('NUM'); + fieldInput.setValidator(input => this.numberValidator(input)); + }, + definition(){ + return { message0: '%1', args0 : [ { @@ -14,10 +22,15 @@ Blockly.Blocks.math_number = { colour : '#dedede', colourSecondary: '#ffffff', colourTertiary : '#ffffff', - }); - - const fieldInput = this.getField('NUM'); - fieldInput.setValidator(input => this.numberValidator(input)); + tooltip : translate('Math Number Tooltip'), + category : 'mathematical', + }; + }, + meta(){ + return { + 'display_name': translate('Math Number'), + 'description' : translate('Math Number Decscription'), + }; }, numberValidator(input) { if (/^-?([0][,.]|[1-9]+[,.])?([0]|[1-9])*$/.test(input)) { diff --git a/src/scratch/blocks/Math/math_number_property.js b/src/scratch/blocks/Math/math_number_property.js index b68f6c02..8d394590 100755 --- a/src/scratch/blocks/Math/math_number_property.js +++ b/src/scratch/blocks/Math/math_number_property.js @@ -2,7 +2,17 @@ import { translate } from '../../../utils/lang/i18n'; Blockly.Blocks.math_number_property = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + + this.setOnChange(event => { + if (event.name === 'PROPERTY') { + const hasDivisorInput = this.getFieldValue('PROPERTY') === 'DIVISIBLE_BY'; + this.updateShape(hasDivisorInput); + } + }); + }, + definition(){ + return { message0: translate('%1 is %2'), args0 : [ { @@ -28,14 +38,15 @@ Blockly.Blocks.math_number_property = { colour : Blockly.Colours.Binary.colour, colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, - }); - - this.setOnChange(event => { - if (event.name === 'PROPERTY') { - const hasDivisorInput = this.getFieldValue('PROPERTY') === 'DIVISIBLE_BY'; - this.updateShape(hasDivisorInput); - } - }); + toolip : translate('Math Number Tooltip'), + category : 'mathematical', + }; + }, + meta(){ + return { + 'display_name': translate('Math Number'), + 'description' : translate('Math Number Description'), + }; }, domToMutation(xmlElement) { const hasDivisorInput = xmlElement.getAttribute('divisor_input') === 'true'; diff --git a/src/scratch/blocks/Math/math_on_list.js b/src/scratch/blocks/Math/math_on_list.js index 4659b937..c417c2c4 100755 --- a/src/scratch/blocks/Math/math_on_list.js +++ b/src/scratch/blocks/Math/math_on_list.js @@ -2,7 +2,10 @@ import { translate } from '../../../utils/lang/i18n'; Blockly.Blocks.math_on_list = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('%1 of list %2'), args0 : [ { @@ -29,7 +32,15 @@ Blockly.Blocks.math_on_list = { colour : Blockly.Colours.Binary.colour, colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, - }); + tooltip : translate('Math On List'), + category : 'mathematical', + }; + }, + meta(){ + return { + 'display_name': translate('Math On List'), + 'description' : translate('Math On List Description'), + }; }, }; diff --git a/src/scratch/blocks/Math/math_random_float.js b/src/scratch/blocks/Math/math_random_float.js index c74d43e4..607869d0 100755 --- a/src/scratch/blocks/Math/math_random_float.js +++ b/src/scratch/blocks/Math/math_random_float.js @@ -2,14 +2,25 @@ import { translate } from '../../../utils/lang/i18n'; Blockly.Blocks.math_random_float = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0 : translate('random fraction'), output : 'Number', outputShape : Blockly.OUTPUT_SHAPE_ROUND, colour : Blockly.Colours.Binary.colour, colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, - }); + tooltip : translate('Math Random Float Tooltip'), + category : 'mathematical', + }; + }, + meta(){ + return { + 'display_name': translate('Math Random Float'), + 'description' : translate('Math Random Float Description'), + }; }, }; diff --git a/src/scratch/blocks/Math/math_random_int.js b/src/scratch/blocks/Math/math_random_int.js index 2b843a3b..ca93c022 100755 --- a/src/scratch/blocks/Math/math_random_int.js +++ b/src/scratch/blocks/Math/math_random_int.js @@ -2,7 +2,10 @@ import { translate } from '../../../utils/lang/i18n'; Blockly.Blocks.math_random_int = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('random integer from %1 to %2'), args0 : [ { @@ -21,7 +24,15 @@ Blockly.Blocks.math_random_int = { colour : Blockly.Colours.Binary.colour, colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, - }); + tooltip : translate('Math Random Integer Tooltip'), + category : 'mathematical', + }; + }, + meta(){ + return { + 'display_name': translate('Math Random Integer'), + 'description' : translate('Math Random Integer Description'), + }; }, }; diff --git a/src/scratch/blocks/Math/math_round.js b/src/scratch/blocks/Math/math_round.js index 4df760b1..4bcdb14f 100755 --- a/src/scratch/blocks/Math/math_round.js +++ b/src/scratch/blocks/Math/math_round.js @@ -1,3 +1,5 @@ +import { translate } from '../../../utils/lang/i18n'; + // https://github.com/google/blockly/blob/master/generators/javascript/math.js Blockly.Blocks.math_round = { /** @@ -6,7 +8,10 @@ Blockly.Blocks.math_round = { * @this Blockly.Block */ init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: '%1 %2', args0 : [ { @@ -24,7 +29,15 @@ Blockly.Blocks.math_round = { colour : Blockly.Colours.Binary.colour, colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, - }); + tooltip : translate('Math Round Tooltip'), + category : 'mathematical', + }; + }, + meta(){ + return { + 'display_name': translate('Math Round'), + 'description' : translate('Math Round Description'), + }; }, }; diff --git a/src/scratch/blocks/Text/text.js b/src/scratch/blocks/Text/text.js index 90cce4b4..1487966d 100755 --- a/src/scratch/blocks/Text/text.js +++ b/src/scratch/blocks/Text/text.js @@ -1,6 +1,11 @@ +import { translate } from '../../../utils/tools'; + Blockly.Blocks.text = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: '%1', args0 : [ { @@ -13,7 +18,15 @@ Blockly.Blocks.text = { colour : '#dedede', colourSecondary: '#ffffff', colourTertiary : '#ffffff', - }); + tooltip : translate('Text Tooltip'), + category : 'text', + }; + }, + meta(){ + return { + 'display_name': translate('text'), + 'description' : translate('Text Description'), + }; }, }; diff --git a/src/scratch/blocks/Text/text_append.js b/src/scratch/blocks/Text/text_append.js index c01314a0..f71d2d3a 100755 --- a/src/scratch/blocks/Text/text_append.js +++ b/src/scratch/blocks/Text/text_append.js @@ -2,7 +2,10 @@ import { translate } from '../../../utils/lang/i18n'; Blockly.Blocks.text_append = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('to %1 append text %2'), args0 : [ { @@ -20,7 +23,15 @@ Blockly.Blocks.text_append = { colourTertiary : Blockly.Colours.Binary.colourTertiary, previousStatement: null, nextStatement : null, - }); + tooltip : translate('Text Append Tooltip'), + category : 'text', + }; + }, + meta(){ + return { + 'display_name': translate('Text Append'), + 'description' : translate('Text Append Description'), + }; }, }; diff --git a/src/scratch/blocks/Text/text_changeCase.js b/src/scratch/blocks/Text/text_changeCase.js index 5d84e5f5..42a21d8f 100755 --- a/src/scratch/blocks/Text/text_changeCase.js +++ b/src/scratch/blocks/Text/text_changeCase.js @@ -2,7 +2,10 @@ import { translate } from '../../../utils/lang/i18n'; Blockly.Blocks.text_changeCase = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('to %1 %2'), args0 : [ { @@ -24,7 +27,15 @@ Blockly.Blocks.text_changeCase = { colour : Blockly.Colours.Binary.colour, colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, - }); + tooltip : translate('Text Change Case Tooltip'), + category : 'text', + }; + }, + meta(){ + return { + 'display_name': translate('Text Change Case'), + 'description' : translate('Text Change Case Description'), + }; }, }; diff --git a/src/scratch/blocks/Text/text_charAt.js b/src/scratch/blocks/Text/text_charAt.js index 81e7ef44..c06ccd61 100755 --- a/src/scratch/blocks/Text/text_charAt.js +++ b/src/scratch/blocks/Text/text_charAt.js @@ -2,7 +2,23 @@ import { translate } from '../../../utils/lang/i18n'; Blockly.Blocks.text_charAt = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + + const dropdown = this.getField('WHERE'); + dropdown.setValidator(value => { + const newAt = ['FROM_START', 'FROM_END'].includes(value); + if (newAt !== this.isAt) { + this.updateAt(newAt); + this.setFieldValue(value, 'WHERE'); + return null; + } + return undefined; + }); + + this.updateAt(true); + }, + definition(){ + return { message0: translate('in text %1 get %2'), args0 : [ { @@ -26,20 +42,15 @@ Blockly.Blocks.text_charAt = { colour : Blockly.Colours.Binary.colour, colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, - }); - - const dropdown = this.getField('WHERE'); - dropdown.setValidator(value => { - const newAt = ['FROM_START', 'FROM_END'].includes(value); - if (newAt !== this.isAt) { - this.updateAt(newAt); - this.setFieldValue(value, 'WHERE'); - return null; - } - return undefined; - }); - - this.updateAt(true); + tooltip : translate('Text Char At Tooltip'), + category : 'text', + }; + }, + meta(){ + return { + 'display_name': translate('Text Char At'), + 'description' : translate('Text Char At Description'), + }; }, mutationToDom() { const container = document.createElement('mutation'); diff --git a/src/scratch/blocks/Text/text_getSubstring.js b/src/scratch/blocks/Text/text_getSubstring.js index 7786a5c9..271fe58f 100755 --- a/src/scratch/blocks/Text/text_getSubstring.js +++ b/src/scratch/blocks/Text/text_getSubstring.js @@ -13,7 +13,13 @@ Blockly.Blocks.text_getSubstring = { [translate('last'), 'LAST'], ]; - this.jsonInit({ + this.jsonInit(this.definition()); + + this.updateAt(1, true); + this.updateAt(2, true); + }, + definition(){ + return { message0: translate('in text %1 get substring from %2 %3 to %4 %5'), args0 : [ { @@ -44,10 +50,15 @@ Blockly.Blocks.text_getSubstring = { colour : Blockly.Colours.Binary.colour, colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, - }); - - this.updateAt(1, true); - this.updateAt(2, true); + tooltip : translate('Text Substring tooltip'), + category : 'text', + }; + }, + meta(){ + return { + 'display_name': translate('Text Substring'), + 'description' : translate('Text Substring Description'), + }; }, mutationToDom() { const container = document.createElement('mutation'); diff --git a/src/scratch/blocks/Text/text_indexOf.js b/src/scratch/blocks/Text/text_indexOf.js index 89e7aebc..5a273a3b 100755 --- a/src/scratch/blocks/Text/text_indexOf.js +++ b/src/scratch/blocks/Text/text_indexOf.js @@ -2,7 +2,10 @@ import { translate } from '../../../utils/lang/i18n'; Blockly.Blocks.text_indexOf = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('in text %1 find %2 occurence of text %3'), args0 : [ { @@ -26,7 +29,15 @@ Blockly.Blocks.text_indexOf = { colour : Blockly.Colours.Binary.colour, colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, - }); + tooltip : translate('Text Index of Tooltip'), + cateogry : 'text', + }; + }, + meta(){ + return { + 'display_name': translate('Text Index of'), + 'description' : translate('Text Index of Description'), + }; }, }; diff --git a/src/scratch/blocks/Text/text_isEmpty.js b/src/scratch/blocks/Text/text_isEmpty.js index aeffa106..e3a6329c 100755 --- a/src/scratch/blocks/Text/text_isEmpty.js +++ b/src/scratch/blocks/Text/text_isEmpty.js @@ -2,7 +2,10 @@ import { translate } from '../../../utils/lang/i18n'; Blockly.Blocks.text_isEmpty = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('text %1 is empty'), args0 : [ { @@ -16,7 +19,15 @@ Blockly.Blocks.text_isEmpty = { colour : Blockly.Colours.Binary.colour, colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, - }); + tooltip : translate('Text Is empty'), + category : 'text', + }; + }, + meta(){ + return { + 'display_name': translate('Text Is empty'), + 'description' : translate('Text Is empty'), + }; }, }; diff --git a/src/scratch/blocks/Text/text_join.js b/src/scratch/blocks/Text/text_join.js index a8801d3c..481a52d7 100755 --- a/src/scratch/blocks/Text/text_join.js +++ b/src/scratch/blocks/Text/text_join.js @@ -3,7 +3,15 @@ import { translate } from '../../../utils/lang/i18n'; Blockly.Blocks.text_join = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + + const fieldImage = new Blockly.FieldImage(plusIconDark, 25, 25, '', this.onIconClick.bind(this)); + + this.appendDummyInput('ADD_ICON').appendField(fieldImage); + this.moveInputBefore('ADD_ICON', 'STACK'); + }, + definition(){ + return { message0: translate('set %1 to create text with'), message1: '%1', args0 : [ @@ -24,12 +32,15 @@ Blockly.Blocks.text_join = { colourTertiary : Blockly.Colours.Binary.colourTertiary, previousStatement: null, nextStatement : null, - }); - - const fieldImage = new Blockly.FieldImage(plusIconDark, 25, 25, '', this.onIconClick.bind(this)); - - this.appendDummyInput('ADD_ICON').appendField(fieldImage); - this.moveInputBefore('ADD_ICON', 'STACK'); + tooltip : translate('Text Join Tooltip'), + category : 'text', + }; + }, + meta(){ + return { + 'display_name': translate('Text Join'), + 'description' : translate('Text Join Description'), + }; }, onIconClick() { if (!this.workspace || this.isInFlyout) { diff --git a/src/scratch/blocks/Text/text_length.js b/src/scratch/blocks/Text/text_length.js index 65e794ca..703497b0 100755 --- a/src/scratch/blocks/Text/text_length.js +++ b/src/scratch/blocks/Text/text_length.js @@ -2,7 +2,10 @@ import { translate } from '../../../utils/lang/i18n'; Blockly.Blocks.text_length = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('length of %1'), args0 : [ { @@ -15,7 +18,15 @@ Blockly.Blocks.text_length = { colour : Blockly.Colours.Binary.colour, colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, - }); + tooltip : translate('Text Length Tooltip'), + category : 'text', + }; + }, + meta(){ + return { + 'display_name': translate('Text Length'), + 'description' : translate('Text Length Description'), + }; }, }; diff --git a/src/scratch/blocks/Text/text_print.js b/src/scratch/blocks/Text/text_print.js index 4178ee54..6f21ff25 100755 --- a/src/scratch/blocks/Text/text_print.js +++ b/src/scratch/blocks/Text/text_print.js @@ -2,7 +2,10 @@ import { translate } from '../../../utils/lang/i18n'; Blockly.Blocks.text_print = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('print %1'), args0 : [ { @@ -15,7 +18,15 @@ Blockly.Blocks.text_print = { colourTertiary : Blockly.Colours.Binary.colourTertiary, previousStatement: null, nextStatement : null, - }); + tooltip : translate('Text Print Tooltip'), + category : 'text', + }; + }, + meta(){ + return { + 'display_name': translate('Text Print'), + 'description' : translate('Text Print Description'), + }; }, }; diff --git a/src/scratch/blocks/Text/text_statement.js b/src/scratch/blocks/Text/text_statement.js index 47b965a7..61965c00 100755 --- a/src/scratch/blocks/Text/text_statement.js +++ b/src/scratch/blocks/Text/text_statement.js @@ -1,10 +1,18 @@ import { minusIconDark } from '../images'; +import { translate } from '../../../utils/tools'; Blockly.Blocks.text_statement = { init() { this.requiredParentId = ''; - this.jsonInit({ + this.jsonInit(this.definition()); + + const fieldImage = new Blockly.FieldImage(minusIconDark, 25, 25, '', () => this.onIconClick()); + + this.appendDummyInput('REMOVE_ICON').appendField(fieldImage); + }, + definition(){ + return { message0: '%1', args0 : [ { @@ -17,11 +25,15 @@ Blockly.Blocks.text_statement = { colourTertiary : Blockly.Colours.BinaryLessGray.colourTertiary, previousStatement: null, nextStatement : null, - }); - - const fieldImage = new Blockly.FieldImage(minusIconDark, 25, 25, '', () => this.onIconClick()); - - this.appendDummyInput('REMOVE_ICON').appendField(fieldImage); + tooltip : translate('Text Statement Tooltip'), + category : 'text', + }; + }, + meta(){ + return { + 'display_name': translate('Text Statement'), + 'description' : translate('Text Statement Description'), + }; }, onIconClick() { if (!this.workspace || this.isInFlyout) { diff --git a/src/scratch/blocks/Text/text_trim.js b/src/scratch/blocks/Text/text_trim.js index 1bf2a13e..6baa4904 100755 --- a/src/scratch/blocks/Text/text_trim.js +++ b/src/scratch/blocks/Text/text_trim.js @@ -2,7 +2,10 @@ import { translate } from '../../../utils/lang/i18n'; Blockly.Blocks.text_trim = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('trim spaces from %1 of %2'), args0 : [ { @@ -24,7 +27,15 @@ Blockly.Blocks.text_trim = { colour : Blockly.Colours.Binary.colour, colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, - }); + tooltip : translate('Text Trim Tooltip'), + category : 'text', + }; + }, + meta(){ + return { + 'display_name': translate('Text Trim'), + 'description' : translate('Text Trim Description'), + }; }, }; diff --git a/src/scratch/hooks/toolbox.js b/src/scratch/hooks/toolbox.js index 09fb5f61..7a4b5864 100644 --- a/src/scratch/hooks/toolbox.js +++ b/src/scratch/hooks/toolbox.js @@ -142,9 +142,10 @@ Blockly.Toolbox.prototype.showCategory_ = function (category_id) { } }); + const block_category = block_definition && block_definition.category; const category = this.categoryMenu_.categories_ - .find(menuCategory => menuCategory.id_ === block.definition().category); + .find(menuCategory => menuCategory.id_ === block_category); const contents = category && category.getContents(); search_term.forEach(term => { if (keywords.toLowerCase().includes(term)) { From d146606d741204454d7bf786a924d18afbc660e8 Mon Sep 17 00:00:00 2001 From: McSam Date: Tue, 16 Jul 2019 15:40:32 +0800 Subject: [PATCH 3/5] fix bug --- .../blocks/Math/math_number_positive.js | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/scratch/blocks/Math/math_number_positive.js b/src/scratch/blocks/Math/math_number_positive.js index bfb77a34..36fd8503 100755 --- a/src/scratch/blocks/Math/math_number_positive.js +++ b/src/scratch/blocks/Math/math_number_positive.js @@ -1,5 +1,32 @@ +import { translate } from '../../../utils/lang/i18n'; + Blockly.Blocks.math_number_positive = { init: Blockly.Blocks.math_number.init, + definition(){ + return { + message0: '%1', + args0 : [ + { + type : 'field_number', + name : 'NUM', + value: 0, + }, + ], + output : 'Number', + outputShape : Blockly.OUTPUT_SHAPE_ROUND, + colour : '#dedede', + colourSecondary: '#ffffff', + colourTertiary : '#ffffff', + tooltip : translate('Math Number Tooltip'), + category : 'mathematical', + }; + }, + meta() { + return { + 'display_name': translate('Math Number Positive'), + 'description' : translate('Math Number Description'), + }; + }, numberValidator(input) { if (/^([0][,.]|[1-9]+[,.])?([0]|[1-9])*$/.test(input)) { return undefined; From b457e0db9b2a654e744f27dca4a9e2b3f92ad7e6 Mon Sep 17 00:00:00 2001 From: McSam Date: Wed, 17 Jul 2019 16:27:12 +0800 Subject: [PATCH 4/5] more blocks --- .DS_Store | Bin 0 -> 8196 bytes .../Functions/procedures_callnoreturn.js | 2 +- .../Functions/procedures_callreturn.js | 2 +- .../Functions/procedures_defnoreturn.js | 2 +- .../Functions/procedures_defreturn.js | 2 +- .../Advanced/Functions/procedures_ifreturn.js | 2 +- .../blocks/Advanced/List/lists_create_with.js | 2 +- .../blocks/Advanced/List/lists_indexOf.js | 2 +- .../blocks/Advanced/List/lists_isEmpty.js | 2 +- .../blocks/Advanced/List/lists_length.js | 2 +- .../blocks/Advanced/List/lists_repeat.js | 2 +- .../blocks/Advanced/List/lists_sort.js | 2 +- .../blocks/Advanced/List/lists_statement.js | 2 +- .../Loops/controls_flow_statements.js | 2 +- .../blocks/Advanced/Loops/controls_for.js | 2 +- .../blocks/Advanced/Loops/controls_forEach.js | 2 +- .../blocks/Advanced/Loops/controls_repeat.js | 2 +- .../Advanced/Loops/controls_repeat_ext.js | 2 +- .../Advanced/Loops/controls_whileUntil.js | 2 +- .../blocks/Advanced/Variable/variables_get.js | 2 +- .../blocks/Advanced/Variable/variables_set.js | 2 +- .../Binary/After Purchase/after_purchase.js | 2 +- .../Binary/After Purchase/check_result.js | 2 +- .../Binary/After Purchase/read_details.js | 2 +- .../Binary/After Purchase/trade_again.js | 2 +- .../Binary/Before Purchase/ask_price.js | 2 +- .../Binary/Before Purchase/before_purchase.js | 2 +- .../blocks/Binary/Before Purchase/payout.js | 2 +- .../blocks/Binary/Before Purchase/purchase.js | 2 +- .../Binary/During Purchase/check_sell.js | 14 +++++++-- .../Binary/During Purchase/during_purchase.js | 2 +- .../Binary/During Purchase/sell_at_market.js | 14 +++++++-- .../Binary/During Purchase/sell_price.js | 14 +++++++-- .../blocks/Binary/Indicators/bb_statement.js | 2 +- .../blocks/Binary/Indicators/bba_statement.js | 14 +++++++-- .../blocks/Binary/Indicators/ema_statement.js | 14 +++++++-- .../Binary/Indicators/emaa_statement.js | 13 +++++++-- .../Binary/Indicators/macda_statement.js | 14 +++++++-- .../blocks/Binary/Indicators/rsi_statement.js | 14 +++++++-- .../Binary/Indicators/rsia_statement.js | 14 +++++++-- .../blocks/Binary/Indicators/sma_statement.js | 14 +++++++-- .../Binary/Indicators/smaa_statement.js | 14 +++++++-- .../Binary/Tick Analysis/check_direction.js | 14 +++++++-- .../blocks/Binary/Tick Analysis/get_ohlc.js | 14 +++++++-- .../Binary/Tick Analysis/lastDigitList.js | 14 +++++++-- .../blocks/Binary/Tick Analysis/last_digit.js | 2 +- .../blocks/Binary/Tick Analysis/ohlc.js | 14 +++++++-- .../Binary/Tick Analysis/ohlc_values.js | 14 +++++++-- .../blocks/Binary/Tick Analysis/readOhlc.js | 14 +++++++-- .../blocks/Binary/Tick Analysis/tick.js | 14 +++++++-- .../Binary/Tick Analysis/tick_analysis.js | 14 +++++++-- .../blocks/Binary/Tick Analysis/ticks.js | 14 +++++++-- .../Binary/Tools/Candle/is_candle_black.js | 2 +- .../Tools/Candle/ohlc_values_in_list.js | 2 +- .../Binary/Tools/Candle/read_ohlc_obj.js | 1 + .../blocks/Binary/Tools/Misc./balance.js | 2 +- .../blocks/Binary/Tools/Misc./block_holder.js | 1 + .../blocks/Binary/Tools/Misc./loader.js | 1 + .../blocks/Binary/Tools/Misc./notify.js | 2 +- .../blocks/Binary/Tools/Misc./total_profit.js | 1 + .../blocks/Binary/Tools/Misc./total_runs.js | 1 + src/scratch/blocks/Binary/Tools/Time/epoch.js | 2 +- .../blocks/Binary/Tools/Time/timeout.js | 1 + .../Trade Definition/trade_definition.js | 2 +- .../trade_definition_tradeoptions.js | 2 +- src/scratch/blocks/Logic/controls_if.js | 2 +- src/scratch/blocks/Logic/logic_boolean.js | 2 +- src/scratch/blocks/Logic/logic_compare.js | 17 +++++++++-- src/scratch/blocks/Logic/logic_negate.js | 2 +- src/scratch/blocks/Logic/logic_null.js | 17 +++++++++-- src/scratch/blocks/Logic/logic_operation.js | 15 ++++++++-- src/scratch/blocks/Logic/logic_ternary.js | 15 ++++++++-- src/scratch/blocks/Math/math_arithmetic.js | 2 +- src/scratch/blocks/Math/math_change.js | 2 +- src/scratch/blocks/Math/math_constant.js | 2 +- src/scratch/blocks/Math/math_constrain.js | 2 +- src/scratch/blocks/Math/math_modulo.js | 2 +- src/scratch/blocks/Math/math_number.js | 2 +- .../blocks/Math/math_number_positive.js | 27 ++---------------- .../blocks/Math/math_number_property.js | 2 +- src/scratch/blocks/Math/math_on_list.js | 2 +- src/scratch/blocks/Math/math_random_float.js | 2 +- src/scratch/blocks/Math/math_random_int.js | 2 +- src/scratch/blocks/Math/math_round.js | 2 +- src/scratch/blocks/Math/math_single.js | 2 +- src/scratch/blocks/Math/math_trig.js | 2 +- src/scratch/blocks/Text/text.js | 2 +- src/scratch/blocks/Text/text_append.js | 2 +- src/scratch/blocks/Text/text_changeCase.js | 2 +- src/scratch/blocks/Text/text_charAt.js | 2 +- src/scratch/blocks/Text/text_getSubstring.js | 2 +- src/scratch/blocks/Text/text_indexOf.js | 2 +- src/scratch/blocks/Text/text_isEmpty.js | 2 +- src/scratch/blocks/Text/text_join.js | 2 +- src/scratch/blocks/Text/text_length.js | 2 +- src/scratch/blocks/Text/text_print.js | 2 +- src/scratch/blocks/Text/text_prompt_ext.js | 2 +- src/scratch/blocks/Text/text_statement.js | 2 +- src/scratch/blocks/Text/text_trim.js | 2 +- src/scratch/hooks/constant.js | 23 +++++++++++++++ src/scratch/hooks/index.js | 1 + src/scratch/hooks/toolbox.js | 6 ++-- 102 files changed, 398 insertions(+), 142 deletions(-) create mode 100644 .DS_Store create mode 100644 src/scratch/hooks/constant.js diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..a3936ea424e00b9ef1570120cc3bc103542dd31f GIT binary patch literal 8196 zcmeHM-EPw`82!ACEiDCB32D2`4H6e)>PEE*A*9l67n1-Xir@m!mNa1vWJ%SuE29+k zhIatofJfm8cn}@{&S!g7lC~GzASP_dKDKj?e@^Ur&WK1f`rand8WCBDj4PLs%n1CP z<5XDCH5H(Mp6GUfOV}02fg$1M;{BNR6$ru5qkTO3|jeJqRro`idcx9M5g01M3>c z3YDCMl9SLq3w=WovUligNheWPXj0>VabVg3zPm3`jjD(nx%)eBrMrkXf5{-lOXO0Q z9Ezw#?bKbLx!-c!tKcSd3(Oe&*A&n(`gnsnl(Sl~n$ucRbxOYM?U?)=|5J`%2EU7T z2jroj2>qO4lqVGCbU$-C3q8D(%npUfCt1Fn|L4^FOR{xOsy3)iz3D!r4{6OZJ)i^H zrG0utP1?`)AZMOtmofSnv+(H8c# z!1F-KPG2l?9V?a`=ct=`zY zcW`ua_I~(b^zjR ['null', Blockly.JavaScript.ORDER_ATOMIC]; diff --git a/src/scratch/blocks/Logic/logic_operation.js b/src/scratch/blocks/Logic/logic_operation.js index c8f8f33f..047d2c89 100755 --- a/src/scratch/blocks/Logic/logic_operation.js +++ b/src/scratch/blocks/Logic/logic_operation.js @@ -2,7 +2,10 @@ import { translate } from '../../../utils/lang/i18n'; Blockly.Blocks.logic_operation = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: '%1 %2 %3', args0 : [ { @@ -24,7 +27,15 @@ Blockly.Blocks.logic_operation = { colour : Blockly.Colours.Binary.colour, colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, - }); + tooltip : translate('Logic Operator Tooltip'), + category : Blockly.Categories.Logic, + }; + }, + meta(){ + return { + 'display_name': translate('Logic Operator'), + 'description' : translate('Logic Operator Description'), + }; }, }; diff --git a/src/scratch/blocks/Logic/logic_ternary.js b/src/scratch/blocks/Logic/logic_ternary.js index 19b89a01..00a156a4 100755 --- a/src/scratch/blocks/Logic/logic_ternary.js +++ b/src/scratch/blocks/Logic/logic_ternary.js @@ -2,7 +2,10 @@ import { translate } from '../../../utils/lang/i18n'; Blockly.Blocks.logic_ternary = { init() { - this.jsonInit({ + this.jsonInit(this.definition()); + }, + definition(){ + return { message0: translate('test %1'), message1: translate('if true %1'), message2: translate('if false %1'), @@ -30,7 +33,15 @@ Blockly.Blocks.logic_ternary = { colour : Blockly.Colours.Binary.colour, colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, - }); + tooltip : translate('Logic Ternary Tooltip'), + category : Blockly.Categories.Logic, + }; + }, + meta(){ + return { + 'display_name': translate('Logic Ternary'), + 'description' : translate('Logic Ternary Description'), + }; }, }; diff --git a/src/scratch/blocks/Math/math_arithmetic.js b/src/scratch/blocks/Math/math_arithmetic.js index b68f36ba..3c4a897c 100755 --- a/src/scratch/blocks/Math/math_arithmetic.js +++ b/src/scratch/blocks/Math/math_arithmetic.js @@ -30,7 +30,7 @@ Blockly.Blocks.math_arithmetic = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('Mathematic Arithmetic (Add, minus, mutiply, divide, power)'), - category : translate('mathematical'), + category : Blockly.Categories.Mathematical, }; }, meta(){ diff --git a/src/scratch/blocks/Math/math_change.js b/src/scratch/blocks/Math/math_change.js index eaef93ef..3d3c5cf6 100755 --- a/src/scratch/blocks/Math/math_change.js +++ b/src/scratch/blocks/Math/math_change.js @@ -36,7 +36,7 @@ Blockly.Blocks.math_change = { previousStatement: null, nextStatement : null, tooltip : translate('Change Number variable'), - category : 'mathematical', + category : Blockly.Categories.Mathematical, }; }, /** diff --git a/src/scratch/blocks/Math/math_constant.js b/src/scratch/blocks/Math/math_constant.js index 050a1450..dbd1388f 100755 --- a/src/scratch/blocks/Math/math_constant.js +++ b/src/scratch/blocks/Math/math_constant.js @@ -27,7 +27,7 @@ Blockly.Blocks.math_constant = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('Math Constant Tooltip'), - category : 'mathematical', + category : Blockly.Categories.Mathematical, }; }, meta(){ diff --git a/src/scratch/blocks/Math/math_constrain.js b/src/scratch/blocks/Math/math_constrain.js index 4859f33b..fddc5d41 100755 --- a/src/scratch/blocks/Math/math_constrain.js +++ b/src/scratch/blocks/Math/math_constrain.js @@ -30,7 +30,7 @@ Blockly.Blocks.math_constrain = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('Math Constrain Tooltip'), - category : 'mathematical', + category : Blockly.Categories.Mathematical, }; }, meta(){ diff --git a/src/scratch/blocks/Math/math_modulo.js b/src/scratch/blocks/Math/math_modulo.js index 9a49a9cc..22df88a3 100755 --- a/src/scratch/blocks/Math/math_modulo.js +++ b/src/scratch/blocks/Math/math_modulo.js @@ -25,7 +25,7 @@ Blockly.Blocks.math_modulo = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('Math Modulo Tooltip'), - category : 'mathematical', + category : Blockly.Categories.Mathematical, }; }, meta(){ diff --git a/src/scratch/blocks/Math/math_number.js b/src/scratch/blocks/Math/math_number.js index eff5c3b5..4746ef58 100755 --- a/src/scratch/blocks/Math/math_number.js +++ b/src/scratch/blocks/Math/math_number.js @@ -23,7 +23,7 @@ Blockly.Blocks.math_number = { colourSecondary: '#ffffff', colourTertiary : '#ffffff', tooltip : translate('Math Number Tooltip'), - category : 'mathematical', + category : Blockly.Categories.Mathematical, }; }, meta(){ diff --git a/src/scratch/blocks/Math/math_number_positive.js b/src/scratch/blocks/Math/math_number_positive.js index 36fd8503..33f1d159 100755 --- a/src/scratch/blocks/Math/math_number_positive.js +++ b/src/scratch/blocks/Math/math_number_positive.js @@ -1,26 +1,8 @@ import { translate } from '../../../utils/lang/i18n'; Blockly.Blocks.math_number_positive = { - init: Blockly.Blocks.math_number.init, - definition(){ - return { - message0: '%1', - args0 : [ - { - type : 'field_number', - name : 'NUM', - value: 0, - }, - ], - output : 'Number', - outputShape : Blockly.OUTPUT_SHAPE_ROUND, - colour : '#dedede', - colourSecondary: '#ffffff', - colourTertiary : '#ffffff', - tooltip : translate('Math Number Tooltip'), - category : 'mathematical', - }; - }, + init : Blockly.Blocks.math_number.init, + definition: Blockly.Blocks.math_number.definition, meta() { return { 'display_name': translate('Math Number Positive'), @@ -35,7 +17,4 @@ Blockly.Blocks.math_number_positive = { }, }; -Blockly.JavaScript.math_number_positive = block => { - const code = block.getFieldValue('NUM'); - return [code, Blockly.JavaScript.ORDER_ATOMIC]; -}; +Blockly.JavaScript.math_number_positive = Blockly.JavaScript.math_number; diff --git a/src/scratch/blocks/Math/math_number_property.js b/src/scratch/blocks/Math/math_number_property.js index 8d394590..48d0cff4 100755 --- a/src/scratch/blocks/Math/math_number_property.js +++ b/src/scratch/blocks/Math/math_number_property.js @@ -39,7 +39,7 @@ Blockly.Blocks.math_number_property = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, toolip : translate('Math Number Tooltip'), - category : 'mathematical', + category : Blockly.Categories.Mathematical, }; }, meta(){ diff --git a/src/scratch/blocks/Math/math_on_list.js b/src/scratch/blocks/Math/math_on_list.js index c417c2c4..b41d4474 100755 --- a/src/scratch/blocks/Math/math_on_list.js +++ b/src/scratch/blocks/Math/math_on_list.js @@ -33,7 +33,7 @@ Blockly.Blocks.math_on_list = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('Math On List'), - category : 'mathematical', + category : Blockly.Categories.Mathematical, }; }, meta(){ diff --git a/src/scratch/blocks/Math/math_random_float.js b/src/scratch/blocks/Math/math_random_float.js index 607869d0..425038e5 100755 --- a/src/scratch/blocks/Math/math_random_float.js +++ b/src/scratch/blocks/Math/math_random_float.js @@ -13,7 +13,7 @@ Blockly.Blocks.math_random_float = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('Math Random Float Tooltip'), - category : 'mathematical', + category : Blockly.Categories.Mathematical, }; }, meta(){ diff --git a/src/scratch/blocks/Math/math_random_int.js b/src/scratch/blocks/Math/math_random_int.js index ca93c022..e0300b31 100755 --- a/src/scratch/blocks/Math/math_random_int.js +++ b/src/scratch/blocks/Math/math_random_int.js @@ -25,7 +25,7 @@ Blockly.Blocks.math_random_int = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('Math Random Integer Tooltip'), - category : 'mathematical', + category : Blockly.Categories.Mathematical, }; }, meta(){ diff --git a/src/scratch/blocks/Math/math_round.js b/src/scratch/blocks/Math/math_round.js index 4bcdb14f..9dcd2c53 100755 --- a/src/scratch/blocks/Math/math_round.js +++ b/src/scratch/blocks/Math/math_round.js @@ -30,7 +30,7 @@ Blockly.Blocks.math_round = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('Math Round Tooltip'), - category : 'mathematical', + category : Blockly.Categories.Mathematical, }; }, meta(){ diff --git a/src/scratch/blocks/Math/math_single.js b/src/scratch/blocks/Math/math_single.js index 71676b09..af16987a 100755 --- a/src/scratch/blocks/Math/math_single.js +++ b/src/scratch/blocks/Math/math_single.js @@ -32,7 +32,7 @@ Blockly.Blocks.math_single = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('Mathematical Single Tooltip'), - category : translate('mathematical'), + category : Blockly.Categories.Mathematical, }; }, meta(){ diff --git a/src/scratch/blocks/Math/math_trig.js b/src/scratch/blocks/Math/math_trig.js index 151dcd9d..5ad697bf 100755 --- a/src/scratch/blocks/Math/math_trig.js +++ b/src/scratch/blocks/Math/math_trig.js @@ -32,7 +32,7 @@ Blockly.Blocks.math_trig = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('Mathematical Trig Tooltip'), - category : translate('mathematical'), + category : Blockly.Categories.Mathematical, }; }, meta(){ diff --git a/src/scratch/blocks/Text/text.js b/src/scratch/blocks/Text/text.js index 1487966d..9b8a06c3 100755 --- a/src/scratch/blocks/Text/text.js +++ b/src/scratch/blocks/Text/text.js @@ -19,7 +19,7 @@ Blockly.Blocks.text = { colourSecondary: '#ffffff', colourTertiary : '#ffffff', tooltip : translate('Text Tooltip'), - category : 'text', + category : Blockly.Categories.Text, }; }, meta(){ diff --git a/src/scratch/blocks/Text/text_append.js b/src/scratch/blocks/Text/text_append.js index f71d2d3a..a7984466 100755 --- a/src/scratch/blocks/Text/text_append.js +++ b/src/scratch/blocks/Text/text_append.js @@ -24,7 +24,7 @@ Blockly.Blocks.text_append = { previousStatement: null, nextStatement : null, tooltip : translate('Text Append Tooltip'), - category : 'text', + category : Blockly.Categories.Text, }; }, meta(){ diff --git a/src/scratch/blocks/Text/text_changeCase.js b/src/scratch/blocks/Text/text_changeCase.js index 42a21d8f..6ed8c7cc 100755 --- a/src/scratch/blocks/Text/text_changeCase.js +++ b/src/scratch/blocks/Text/text_changeCase.js @@ -28,7 +28,7 @@ Blockly.Blocks.text_changeCase = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('Text Change Case Tooltip'), - category : 'text', + category : Blockly.Categories.Text, }; }, meta(){ diff --git a/src/scratch/blocks/Text/text_charAt.js b/src/scratch/blocks/Text/text_charAt.js index c06ccd61..74dd347a 100755 --- a/src/scratch/blocks/Text/text_charAt.js +++ b/src/scratch/blocks/Text/text_charAt.js @@ -43,7 +43,7 @@ Blockly.Blocks.text_charAt = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('Text Char At Tooltip'), - category : 'text', + category : Blockly.Categories.Text, }; }, meta(){ diff --git a/src/scratch/blocks/Text/text_getSubstring.js b/src/scratch/blocks/Text/text_getSubstring.js index 271fe58f..d65b5967 100755 --- a/src/scratch/blocks/Text/text_getSubstring.js +++ b/src/scratch/blocks/Text/text_getSubstring.js @@ -51,7 +51,7 @@ Blockly.Blocks.text_getSubstring = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('Text Substring tooltip'), - category : 'text', + category : Blockly.Categories.Text, }; }, meta(){ diff --git a/src/scratch/blocks/Text/text_indexOf.js b/src/scratch/blocks/Text/text_indexOf.js index 5a273a3b..c039216f 100755 --- a/src/scratch/blocks/Text/text_indexOf.js +++ b/src/scratch/blocks/Text/text_indexOf.js @@ -30,7 +30,7 @@ Blockly.Blocks.text_indexOf = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('Text Index of Tooltip'), - cateogry : 'text', + cateogry : Blockly.Categories.Text, }; }, meta(){ diff --git a/src/scratch/blocks/Text/text_isEmpty.js b/src/scratch/blocks/Text/text_isEmpty.js index e3a6329c..f67273b1 100755 --- a/src/scratch/blocks/Text/text_isEmpty.js +++ b/src/scratch/blocks/Text/text_isEmpty.js @@ -20,7 +20,7 @@ Blockly.Blocks.text_isEmpty = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('Text Is empty'), - category : 'text', + category : Blockly.Categories.Text, }; }, meta(){ diff --git a/src/scratch/blocks/Text/text_join.js b/src/scratch/blocks/Text/text_join.js index 481a52d7..d6dae53b 100755 --- a/src/scratch/blocks/Text/text_join.js +++ b/src/scratch/blocks/Text/text_join.js @@ -33,7 +33,7 @@ Blockly.Blocks.text_join = { previousStatement: null, nextStatement : null, tooltip : translate('Text Join Tooltip'), - category : 'text', + category : Blockly.Categories.Text, }; }, meta(){ diff --git a/src/scratch/blocks/Text/text_length.js b/src/scratch/blocks/Text/text_length.js index 703497b0..0043236b 100755 --- a/src/scratch/blocks/Text/text_length.js +++ b/src/scratch/blocks/Text/text_length.js @@ -19,7 +19,7 @@ Blockly.Blocks.text_length = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('Text Length Tooltip'), - category : 'text', + category : Blockly.Categories.Text, }; }, meta(){ diff --git a/src/scratch/blocks/Text/text_print.js b/src/scratch/blocks/Text/text_print.js index 6f21ff25..621ec8ca 100755 --- a/src/scratch/blocks/Text/text_print.js +++ b/src/scratch/blocks/Text/text_print.js @@ -19,7 +19,7 @@ Blockly.Blocks.text_print = { previousStatement: null, nextStatement : null, tooltip : translate('Text Print Tooltip'), - category : 'text', + category : Blockly.Categories.Text, }; }, meta(){ diff --git a/src/scratch/blocks/Text/text_prompt_ext.js b/src/scratch/blocks/Text/text_prompt_ext.js index fd9451d2..688eaadb 100755 --- a/src/scratch/blocks/Text/text_prompt_ext.js +++ b/src/scratch/blocks/Text/text_prompt_ext.js @@ -39,7 +39,7 @@ Blockly.Blocks.text_prompt_ext = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('Text Prompt Tooltip'), - category : translate('text'), + category : Blockly.Categories.Text, }; }, meta(){ diff --git a/src/scratch/blocks/Text/text_statement.js b/src/scratch/blocks/Text/text_statement.js index 61965c00..506f0eec 100755 --- a/src/scratch/blocks/Text/text_statement.js +++ b/src/scratch/blocks/Text/text_statement.js @@ -26,7 +26,7 @@ Blockly.Blocks.text_statement = { previousStatement: null, nextStatement : null, tooltip : translate('Text Statement Tooltip'), - category : 'text', + category : Blockly.Categories.Text, }; }, meta(){ diff --git a/src/scratch/blocks/Text/text_trim.js b/src/scratch/blocks/Text/text_trim.js index 6baa4904..7290f99e 100755 --- a/src/scratch/blocks/Text/text_trim.js +++ b/src/scratch/blocks/Text/text_trim.js @@ -28,7 +28,7 @@ Blockly.Blocks.text_trim = { colourSecondary: Blockly.Colours.Binary.colourSecondary, colourTertiary : Blockly.Colours.Binary.colourTertiary, tooltip : translate('Text Trim Tooltip'), - category : 'text', + category : Blockly.Categories.Text, }; }, meta(){ diff --git a/src/scratch/hooks/constant.js b/src/scratch/hooks/constant.js new file mode 100644 index 00000000..c068f5b9 --- /dev/null +++ b/src/scratch/hooks/constant.js @@ -0,0 +1,23 @@ +import { translate } from '../../utils/lang/i18n'; + +/** + * ENUM for categories. + * @const + */ +Blockly.Categories = { + 'Trade_Definition': translate('trade-definition'), + 'Before_Purchase' : translate('before-purhcase'), + 'During_Purchase' : translate('during-purhcase'), + 'After_Purchase' : translate('after-purchase'), + 'Mathematical' : translate('mathematical'), + 'Logic' : translate('logic'), + 'Text' : translate('text'), + 'Variables' : translate('variable'), + 'Functions' : translate('functions'), + 'List' : translate('list'), + 'Indicators' : translate('indicators'), + 'Time' : translate('time'), + 'Tick_Analysis' : translate('tick-analysis'), + 'Candle' : translate('candle'), + 'Miscellaneous' : translate('miscellaneous'), +}; diff --git a/src/scratch/hooks/index.js b/src/scratch/hooks/index.js index 88a3727b..6979d4f9 100644 --- a/src/scratch/hooks/index.js +++ b/src/scratch/hooks/index.js @@ -11,3 +11,4 @@ import './icon'; import './procedures'; import './toolbox'; import './variables'; +import './constant'; diff --git a/src/scratch/hooks/toolbox.js b/src/scratch/hooks/toolbox.js index 7a4b5864..d1093817 100644 --- a/src/scratch/hooks/toolbox.js +++ b/src/scratch/hooks/toolbox.js @@ -155,11 +155,11 @@ Blockly.Toolbox.prototype.showCategory_ = function (category_id) { flyout_content.var_blocks.blocks_type.push(blockKey); flyout_content.var_blocks.blocks = all_variables; } else if (contents instanceof Array) { - const filteredContents = contents + const blockContents = contents .filter(content => content.attributes[0].nodeValue === blockKey); - if (flyout_content.blocks.indexOf(filteredContents[0]) === -1) { - flyout_content.blocks.push(filteredContents[0]); + if (blockContents.length && flyout_content.blocks.indexOf(blockContents[0]) === -1) { + flyout_content.blocks.push(blockContents[0]); } } } From eff7055b3f211189561165bcad3ba2f19fe4bd93 Mon Sep 17 00:00:00 2001 From: McSam Date: Wed, 17 Jul 2019 17:08:27 +0800 Subject: [PATCH 5/5] remove ds --- .DS_Store | Bin 8196 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index a3936ea424e00b9ef1570120cc3bc103542dd31f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHM-EPw`82!ACEiDCB32D2`4H6e)>PEE*A*9l67n1-Xir@m!mNa1vWJ%SuE29+k zhIatofJfm8cn}@{&S!g7lC~GzASP_dKDKj?e@^Ur&WK1f`rand8WCBDj4PLs%n1CP z<5XDCH5H(Mp6GUfOV}02fg$1M;{BNR6$ru5qkTO3|jeJqRro`idcx9M5g01M3>c z3YDCMl9SLq3w=WovUligNheWPXj0>VabVg3zPm3`jjD(nx%)eBrMrkXf5{-lOXO0Q z9Ezw#?bKbLx!-c!tKcSd3(Oe&*A&n(`gnsnl(Sl~n$ucRbxOYM?U?)=|5J`%2EU7T z2jroj2>qO4lqVGCbU$-C3q8D(%npUfCt1Fn|L4^FOR{xOsy3)iz3D!r4{6OZJ)i^H zrG0utP1?`)AZMOtmofSnv+(H8c# z!1F-KPG2l?9V?a`=ct=`zY zcW`ua_I~(b^zjR