diff --git a/src/blocks/invention/index.js b/src/blocks/invention/index.js index ae3d1771b..d3732dac1 100644 --- a/src/blocks/invention/index.js +++ b/src/blocks/invention/index.js @@ -1,2 +1,3 @@ import "./fsh/" import "./Other/" +import "./lists/" diff --git a/src/blocks/invention/lists/concat.js b/src/blocks/invention/lists/concat.js new file mode 100644 index 000000000..e3870b96c --- /dev/null +++ b/src/blocks/invention/lists/concat.js @@ -0,0 +1,38 @@ +import Blockly from "blockly/core"; + +const blockName = "inv_list_concat"; + +const blockData = { + "message0": "concat %1 and %2", + "args0": [ + { + "type": "input_value", + "name": "one", + "check": "Array" + }, + { + "type": "input_value", + "name": "two", + "check": "Array" + } + ], + "inputsInline": true, + "output": "Array", + "colour": "#745ba5", + "tooltip": "Returns a list that contains the elements of the imputed lists", + "helpUrl": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat" +} + +Blockly.Blocks[blockName] = { + init: function() { + this.jsonInit(blockData); + } +}; + +Blockly.JavaScript[blockName] = function(block) { + var value_one = Blockly.JavaScript.valueToCode(block, 'one', Blockly.JavaScript.ORDER_ATOMIC); + var value_two = Blockly.JavaScript.valueToCode(block, 'two', Blockly.JavaScript.ORDER_ATOMIC); + + var code = `${value_one}.concat(${value_two})`; + return [code, Blockly.JavaScript.ORDER_NONE]; +}; diff --git a/src/blocks/invention/lists/copywithin.js b/src/blocks/invention/lists/copywithin.js new file mode 100644 index 000000000..3612172af --- /dev/null +++ b/src/blocks/invention/lists/copywithin.js @@ -0,0 +1,50 @@ +import Blockly from "blockly/core"; + +const blockName = "inv_list_copywithin"; + +const blockData = { + "message0": "copy within array %1 target %2 start %3 end %4", + "args0": [ + { + "type": "input_value", + "name": "one", + "check": "Array" + }, + { + "type": "input_value", + "name": "two", + "check": "Number" + }, + { + "type": "input_value", + "name": "three", + "check": "Number" + }, + { + "type": "input_value", + "name": "four", + "check": "Number" + } + ], + "inputsInline": true, + "output": "Array", + "colour": "#745ba5", + "tooltip": "idk what this does use help url", + "helpUrl": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/copyWithin" +} + +Blockly.Blocks[blockName] = { + init: function() { + this.jsonInit(blockData); + } +}; + +Blockly.JavaScript[blockName] = function(block) { + var value_one = Blockly.JavaScript.valueToCode(block, 'one', Blockly.JavaScript.ORDER_ATOMIC); + var value_two = Blockly.JavaScript.valueToCode(block, 'two', Blockly.JavaScript.ORDER_ATOMIC); + var value_three = Blockly.JavaScript.valueToCode(block, 'three', Blockly.JavaScript.ORDER_ATOMIC); + var value_four = Blockly.JavaScript.valueToCode(block, 'four', Blockly.JavaScript.ORDER_ATOMIC); + + var code = `${value_one}.copyWithin(${value_two}, ${value_three}, ${value_four})`; + return [code, Blockly.JavaScript.ORDER_NONE]; +}; diff --git a/src/blocks/invention/lists/every.js b/src/blocks/invention/lists/every.js new file mode 100644 index 000000000..ede1d2843 --- /dev/null +++ b/src/blocks/invention/lists/every.js @@ -0,0 +1,40 @@ +import Blockly from "blockly/core"; + +const blockName = "inv_list_every"; + +const blockData = { + "message0": "on list %1 every value follows %2 ?", + "args0": [ + { + "type": "input_value", + "name": "one", + "check": "Array" + }, + { + "type": "input_value", + "name": "two", + "check": "Boolean" + } + ], + "inputsInline": true, + "output": "Boolean", + "colour": "#745ba5", + "tooltip": "Tells you if every element on the list follows a test (boolean)", + "helpUrl": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every" +} + +Blockly.Blocks[blockName] = { + init: function() { + this.jsonInit(blockData); + } +}; + +Blockly.JavaScript[blockName] = function(block) { + var value_one = Blockly.JavaScript.valueToCode(block, 'one', Blockly.JavaScript.ORDER_ATOMIC); + var value_two = Blockly.JavaScript.valueToCode(block, 'two', Blockly.JavaScript.ORDER_ATOMIC); + + var code = `${value_one}.every(function(element, index, array) { + return ${value_two} + })`; + return [code, Blockly.JavaScript.ORDER_NONE]; +}; diff --git a/src/blocks/invention/lists/every_element.js b/src/blocks/invention/lists/every_element.js new file mode 100644 index 000000000..e89ec4c02 --- /dev/null +++ b/src/blocks/invention/lists/every_element.js @@ -0,0 +1,24 @@ +import Blockly from "blockly/core"; + +const blockName = "inv_list_every_element"; + +const blockData = { + "message0": "current element on every", + "args0": [], + "inputsInline": true, + "output": null, + "colour": "#745ba5", + "tooltip": "Element currently being selected (for the every list block)", + "helpUrl": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every" +} + +Blockly.Blocks[blockName] = { + init: function() { + this.jsonInit(blockData); + } +}; + +Blockly.JavaScript[blockName] = function() { + var code = `element`; + return [code, Blockly.JavaScript.ORDER_NONE]; +}; diff --git a/src/blocks/invention/lists/every_index.js b/src/blocks/invention/lists/every_index.js new file mode 100644 index 000000000..c739528a5 --- /dev/null +++ b/src/blocks/invention/lists/every_index.js @@ -0,0 +1,24 @@ +import Blockly from "blockly/core"; + +const blockName = "inv_list_every_index"; + +const blockData = { + "message0": "current index on every", + "args0": [], + "inputsInline": true, + "output": "Number", + "colour": "#745ba5", + "tooltip": "Index of the element currently being selected (for the every list block)", + "helpUrl": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every" +} + +Blockly.Blocks[blockName] = { + init: function() { + this.jsonInit(blockData); + } +}; + +Blockly.JavaScript[blockName] = function() { + var code = `index`; + return [code, Blockly.JavaScript.ORDER_NONE]; +}; diff --git a/src/blocks/invention/lists/flat.js b/src/blocks/invention/lists/flat.js new file mode 100644 index 000000000..ccecb2b24 --- /dev/null +++ b/src/blocks/invention/lists/flat.js @@ -0,0 +1,38 @@ +import Blockly from "blockly/core"; + +const blockName = "inv_list_flat"; + +const blockData = { + "message0": "flaten list %1 with depth %2", + "args0": [ + { + "type": "input_value", + "name": "one", + "check": "Array" + }, + { + "type": "input_value", + "name": "two", + "check": "Number" + } + ], + "inputsInline": true, + "output": "Array", + "colour": "#745ba5", + "tooltip": "Makes arrays stored as arrays part of the main array, depth is optional", + "helpUrl": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat" +} + +Blockly.Blocks[blockName] = { + init: function() { + this.jsonInit(blockData); + } +}; + +Blockly.JavaScript[blockName] = function(block) { + var value_one = Blockly.JavaScript.valueToCode(block, 'one', Blockly.JavaScript.ORDER_ATOMIC); + var value_two = Blockly.JavaScript.valueToCode(block, 'two', Blockly.JavaScript.ORDER_ATOMIC); + + var code = `${value_one}.flat(${value_two})`; + return [code, Blockly.JavaScript.ORDER_NONE]; +}; diff --git a/src/blocks/invention/lists/foreach.js b/src/blocks/invention/lists/foreach.js new file mode 100644 index 000000000..95b12d737 --- /dev/null +++ b/src/blocks/invention/lists/foreach.js @@ -0,0 +1,40 @@ +import Blockly from "blockly/core"; + +const blockName = "inv_list_foreach"; + +const blockData = { + "message0": "for each in list %1 do %2", + "args0": [ + { + "type": "input_value", + "name": "one", + "check": "Array" + }, + { + "type": "input_statement", + "name": "two" + } + ], + "inputsInline": true, + "previousStatement": null, + "nextStatement": null, + "colour": "#745ba5", + "tooltip": "Same as the one in loops category but code different", + "helpUrl": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach" +} + +Blockly.Blocks[blockName] = { + init: function() { + this.jsonInit(blockData); + } +}; + +Blockly.JavaScript[blockName] = function(block) { + var value_one = Blockly.JavaScript.valueToCode(block, 'one', Blockly.JavaScript.ORDER_ATOMIC); + var statements_two = Blockly.JavaScript.statementToCode(block, 'two'); + + var code = `${value_one}.forEach(element => { + ${statements_two} + })`; + return code; +}; diff --git a/src/blocks/invention/lists/foreach_element.js b/src/blocks/invention/lists/foreach_element.js new file mode 100644 index 000000000..2abf00950 --- /dev/null +++ b/src/blocks/invention/lists/foreach_element.js @@ -0,0 +1,24 @@ +import Blockly from "blockly/core"; + +const blockName = "inv_list_foreach_element"; + +const blockData = { + "message0": "current element on foreach", + "args0": [], + "inputsInline": true, + "output": null, + "colour": "#745ba5", + "tooltip": "Element currently being selected (for the foreach list block)", + "helpUrl": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach" +} + +Blockly.Blocks[blockName] = { + init: function() { + this.jsonInit(blockData); + } +}; + +Blockly.JavaScript[blockName] = function() { + var code = `element`; + return [code, Blockly.JavaScript.ORDER_NONE]; +}; diff --git a/src/blocks/invention/lists/index.js b/src/blocks/invention/lists/index.js new file mode 100644 index 000000000..36bea74d6 --- /dev/null +++ b/src/blocks/invention/lists/index.js @@ -0,0 +1,8 @@ +import "./concat.js" +import "./copywithin.js" +import "./every.js" +import "./every_element.js" +import "./every_index.js" +import "./flat.js" +import "./foreach.js" +import "./foreach_element.js" diff --git a/src/toolbox.js b/src/toolbox.js index be7b4abac..0a41b5deb 100644 --- a/src/toolbox.js +++ b/src/toolbox.js @@ -9,7 +9,7 @@ export default (favorites) => { - + @@ -365,6 +365,7 @@ export default (favorites) => { +