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) => {
-
+
${favorites === null ? "" : favorites.map((c) => ``)}
@@ -365,6 +365,7 @@ export default (favorites) => {
+
@@ -378,19 +379,29 @@ export default (favorites) => {
-
-
-
-
-
-
- FIRST
-
+
+
+ FROM_START
+ FROM_START
+
list
+
+
+ SPLIT
+
+
+ ,
+
+
+
+
+
+
+
GET
@@ -401,20 +412,18 @@ export default (favorites) => {
-
-
- SET
- FROM_START
-
+
+ FIRST
+
list
-
-
- FROM_START
- FROM_START
+
+
+ SET
+ FROM_START
list
@@ -428,16 +437,18 @@ export default (favorites) => {
-
-
- SPLIT
-
-
- ,
-
-
-
+
+
+
+
+
+
+
+
+
+
+