Skip to content

Commit 15eac46

Browse files
authored
Merge pull request #25 from Nitro-Bolt/pregnancy-update
Pregnancy update
2 parents c9f8795 + 299383a commit 15eac46

File tree

13 files changed

+323
-10
lines changed

13 files changed

+323
-10
lines changed

blocks_vertical/control.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -530,3 +530,52 @@ Blockly.Blocks['control_all_at_once'] = {
530530
});
531531
}
532532
};
533+
534+
Blockly.Blocks['control_foreach_in_range'] = {
535+
/**
536+
* Block for each number from range.
537+
* @this Blockly.Block
538+
*/
539+
init: function() {
540+
this.jsonInit({
541+
"message0": Blockly.Msg.CONTROL_FOREACHINRANGE,
542+
"message1": "%1", // Statement
543+
"args0": [
544+
{
545+
"type": "input_value",
546+
"name": "ITEM"
547+
},
548+
{
549+
"type": "input_value",
550+
"name": "FROM",
551+
},
552+
{
553+
"type": "input_value",
554+
"name": "TO",
555+
},
556+
],
557+
"args1": [
558+
{
559+
"type": "input_statement",
560+
"name": "SUBSTACK"
561+
}
562+
],
563+
"category": Blockly.Categories.json,
564+
"extensions": ["colours_control", "shape_statement"],
565+
});
566+
}
567+
};
568+
569+
Blockly.Blocks['control_foreach_in_range_item'] = {
570+
/**
571+
* @this Blockly.Block
572+
*/
573+
init: function() {
574+
this.jsonInit({
575+
"message0": Blockly.Msg.CONTROL_FOREACHINRANGE_ITEM,
576+
"category": Blockly.Categories.json,
577+
"duplicateOnDrag": true,
578+
"extensions": ["colours_control", "output_number"]
579+
});
580+
}
581+
};

blocks_vertical/data.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -484,6 +484,53 @@ Blockly.Blocks['data_listcontainsitem'] = {
484484
}
485485
};
486486

487+
Blockly.Blocks['data_listasarray'] = {
488+
/**
489+
* Block for turning list into array.
490+
* @this Blockly.Block
491+
*/
492+
init: function() {
493+
this.jsonInit({
494+
"message0": Blockly.Msg.DATA_LISTASARRAY,
495+
"args0": [
496+
{
497+
"type": "field_variable",
498+
"name": "LIST",
499+
"variableTypes": [Blockly.LIST_VARIABLE_TYPE]
500+
}
501+
],
502+
"category": Blockly.Categories.dataLists,
503+
"extensions": ["colours_data_lists", "output_array"]
504+
});
505+
}
506+
};
507+
508+
Blockly.Blocks['data_setlistarray'] = {
509+
/**
510+
* Block to set a list to array.
511+
* @this Blockly.Block
512+
*/
513+
init: function() {
514+
this.jsonInit({
515+
"message0": Blockly.Msg.DATA_SETLISTARRAY,
516+
"args0": [
517+
{
518+
"type": "field_variable",
519+
"name": "LIST",
520+
"variableTypes": [Blockly.LIST_VARIABLE_TYPE]
521+
},
522+
{
523+
"type": "input_value",
524+
"name": "ARRAY",
525+
"check": "Array"
526+
},
527+
],
528+
"category": Blockly.Categories.dataLists,
529+
"extensions": ["colours_data_lists", "shape_statement"]
530+
});
531+
}
532+
};
533+
487534
Blockly.Blocks['data_showlist'] = {
488535
/**
489536
* Block to show a list.

blocks_vertical/default_toolbox.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,22 @@ Blockly.Blocks.defaultToolbox = '<xml id="toolbox-categories" style="display: no
295295
'</shadow>' +
296296
'</value>' +
297297
'</block>' +
298+
'<block type="control_foreach_in_range" id="control_foreach_in_range">' +
299+
'<value name="ITEM">' +
300+
'<shadow type="control_foreach_in_range_item">' +
301+
'</shadow>' +
302+
'</value>' +
303+
'<value name="FROM">' +
304+
'<shadow type="math_number">' +
305+
'<field name="NUM">1</field>' +
306+
'</shadow>' +
307+
'</value>' +
308+
'<value name="TO">' +
309+
'<shadow type="math_number">' +
310+
'<field name="NUM">10</field>' +
311+
'</shadow>' +
312+
'</value>' +
313+
'</block>' +
298314
'<block type="control_forever" id="control_forever"></block>' +
299315
'<block type="control_if" id="control_if"></block>' +
300316
'<block type="control_if_else" id="control_if_else"></block>' +
@@ -531,6 +547,8 @@ Blockly.Blocks.defaultToolbox = '<xml id="toolbox-categories" style="display: no
531547
' </shadow>' +
532548
' </value>' +
533549
'</block>' +
550+
'<block type="operator_typeof">' +
551+
'</block>' +
534552
'</category>' +
535553
'<category name="%{BKY_CATEGORY_VARIABLES}" id="data" colour="#FF8C1A" secondaryColour="#DB6E00" custom="VARIABLE">' +
536554
'</category>' +
@@ -629,13 +647,25 @@ Blockly.Blocks.defaultToolbox = '<xml id="toolbox-categories" style="display: no
629647
'</block>' +
630648
'<block type="json_merge_array" id="json_merge_array">' +
631649
'</block>' +
650+
'<block type="json_reverse_array" id="json_reverse_array">' +
651+
'</block>' +
632652
'<block type="json_has_item" id="json_has_item">' +
633653
'<value name="ITEM">' +
634654
'<shadow type="text">' +
635655
'<field name="TEXT">bar</field>' +
636656
'</shadow>' +
637657
'</value>' +
638658
'</block>' +
659+
'<block type="json_foreach" id="json_foreach">' +
660+
'<value name="VALUE">' +
661+
'<shadow type="json_foreach_value">' +
662+
'</shadow>' +
663+
'</value>' +
664+
'<value name="INDEX">' +
665+
'<shadow type="json_foreach_index">' +
666+
'</shadow>' +
667+
'</value>' +
668+
'</block>' +
639669
'</category>' +
640670
'<category name="%{BKY_CATEGORY_MYBLOCKS}" id="more" colour="#FF6680" secondaryColour="#FF4D6A" custom="PROCEDURE">' +
641671
'</category>' +
@@ -719,6 +749,12 @@ Blockly.Blocks.defaultToolbox = '<xml id="toolbox-categories" style="display: no
719749
'</shadow>' +
720750
'</value>' +
721751
'</block>' +
752+
'<block type="extension_input">' +
753+
' <value name="VALUE">' +
754+
' <shadow type="extension_blockduplicateondrag">' +
755+
' </shadow>' +
756+
' </value>' +
757+
'</block>' +
722758
'<sep gap="36"></sep>' +
723759
'<block type="extension_pen_down" id="extension_pen_down"></block>' +
724760
'<block type="extension_music_drum" id="extension_music_drum">' +

blocks_vertical/extensions.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,33 @@ Blockly.Blocks['extension_checkbox_test_legacy_json2'] = {
109109
}
110110
};
111111

112+
Blockly.Blocks['extension_input'] = {
113+
init: function () {
114+
this.jsonInit({
115+
"message0": 'input %1',
116+
"args0": [
117+
{
118+
"type": "input_value",
119+
"name": "VALUE"
120+
}
121+
],
122+
"category": Blockly.Categories.more,
123+
"extensions": ["colours_more", "shape_statement"]
124+
});
125+
}
126+
};
127+
128+
Blockly.Blocks['extension_blockduplicateondrag'] = {
129+
init: function () {
130+
this.jsonInit({
131+
"message0": 'duplicate on drag',
132+
"duplicateOnDrag": true,
133+
"category": Blockly.Categories.more,
134+
"extensions": ["colours_more", "output_string"]
135+
});
136+
}
137+
};
138+
112139
Blockly.Blocks['extension_pen_down'] = {
113140
/**
114141
* @this Blockly.Block

blocks_vertical/json.js

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,3 +483,69 @@ Blockly.Blocks['json_reverse_array'] = {
483483
});
484484
}
485485
};
486+
487+
Blockly.Blocks['json_foreach'] = {
488+
/**
489+
* Block for each item and index in array.
490+
* @this Blockly.Block
491+
*/
492+
init: function() {
493+
this.jsonInit({
494+
"message0": Blockly.Msg.JSON_FOREACH,
495+
"message1": "%1", // Statement
496+
"args0": [
497+
{
498+
"type": "input_value",
499+
"name": "VALUE"
500+
},
501+
{
502+
"type": "input_value",
503+
"name": "INDEX"
504+
},
505+
{
506+
"type": "input_value",
507+
"name": "ARRAY",
508+
"check": "Array"
509+
},
510+
],
511+
"args1": [
512+
{
513+
"type": "input_statement",
514+
"name": "SUBSTACK"
515+
}
516+
],
517+
"category": Blockly.Categories.json,
518+
"extensions": ["colours_json", "shape_statement"],
519+
});
520+
}
521+
};
522+
523+
Blockly.Blocks['json_foreach_value'] = {
524+
/**
525+
* @this Blockly.Block
526+
*/
527+
init: function() {
528+
this.jsonInit({
529+
"message0": Blockly.Msg.JSON_FOREACH_VALUE,
530+
"output": null,
531+
"outputShape": Blockly.OUTPUT_SHAPE_ROUND,
532+
"category": Blockly.Categories.json,
533+
"duplicateOnDrag": true,
534+
"extensions": ["colours_json"],
535+
});
536+
}
537+
};
538+
539+
Blockly.Blocks['json_foreach_index'] = {
540+
/**
541+
* @this Blockly.Block
542+
*/
543+
init: function() {
544+
this.jsonInit({
545+
"message0": Blockly.Msg.JSON_FOREACH_INDEX,
546+
"category": Blockly.Categories.json,
547+
"duplicateOnDrag": true,
548+
"extensions": ["colours_json", "output_number"]
549+
});
550+
}
551+
};

blocks_vertical/operators.js

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -489,8 +489,8 @@ Blockly.Blocks['operator_cast'] = {
489489
[Blockly.Msg.OPERATORS_CAST_STRING, "string"],
490490
[Blockly.Msg.OPERATORS_CAST_NUMBER, "number"],
491491
[Blockly.Msg.OPERATORS_CAST_BOOLEAN, "boolean"],
492-
[Blockly.Msg.OPERATORS_CAST_ARRAY, "array"],
493-
[Blockly.Msg.OPERATORS_CAST_OBJECT, "object"]
492+
[Blockly.Msg.OPERATORS_CAST_OBJECT, "object"],
493+
[Blockly.Msg.OPERATORS_CAST_ARRAY, "array"]
494494
]
495495
}
496496
],
@@ -501,3 +501,23 @@ Blockly.Blocks['operator_cast'] = {
501501
});
502502
}
503503
};
504+
505+
Blockly.Blocks['operator_typeof'] = {
506+
/**
507+
* Get the specific type of a value.
508+
* @this Blockly.Block
509+
*/
510+
init: function () {
511+
this.jsonInit({
512+
message0: Blockly.Msg.OPERATORS_TYPEOF,
513+
args0: [
514+
{
515+
type: "input_value",
516+
name: "VALUE"
517+
}
518+
],
519+
category: Blockly.Categories.operators,
520+
extensions: ["colours_operators", "output_string"]
521+
});
522+
}
523+
};

core/block.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,12 @@ Blockly.Block = function(workspace, prototypeName, opt_id) {
142142
*/
143143
this.outputShape_ = null;
144144

145+
/**
146+
* @type {boolean}
147+
* @private
148+
*/
149+
this.duplicateOnDrag_ = false;
150+
145151
/**
146152
* @type {?string}
147153
* @private
@@ -1325,6 +1331,9 @@ Blockly.Block.prototype.jsonInit = function(json) {
13251331
var localizedValue = Blockly.utils.replaceMessageReferences(rawValue);
13261332
this.setHelpUrl(localizedValue);
13271333
}
1334+
if (json['duplicateOnDrag'] !== undefined) {
1335+
this.setDuplicateOnDrag(json['duplicateOnDrag']);
1336+
}
13281337
if (goog.isString(json['extensions'])) {
13291338
console.warn('JSON attribute \'extensions\' should be an array of ' +
13301339
'strings. Found raw string in JSON for \'' + json['type'] + '\' block.');
@@ -1839,3 +1848,19 @@ Blockly.Block.prototype.toDevString = function() {
18391848
}
18401849
return msg;
18411850
};
1851+
1852+
/**
1853+
* Set whether this block can duplicate on drag and if it's a shadow block.
1854+
* @param {boolean} value True if this block should duplicate on drag.
1855+
*/
1856+
Blockly.Block.prototype.setDuplicateOnDrag = function(value) {
1857+
this.duplicateOnDrag_ = value;
1858+
};
1859+
1860+
/**
1861+
* Get whether this block can duplicate on drag and if it's a shadow block.
1862+
* @return {boolean} True if this block can duplicate on drag.
1863+
*/
1864+
Blockly.Block.prototype.canDuplicateOnDrag = function() {
1865+
return this.duplicateOnDrag_ && this.isShadow();
1866+
};

core/block_render_svg_vertical.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -533,8 +533,7 @@ Blockly.BlockSvg.DEFINE_BLOCK_PADDING_RIGHT = 2 * Blockly.BlockSvg.GRID_UNIT;
533533
*/
534534
Blockly.BlockSvg.prototype.updateColour = function() {
535535
var strokeColour = this.getColourTertiary();
536-
var renderShadowed = this.isShadow() &&
537-
!Blockly.scratchBlocksUtils.isShadowArgumentReporter(this);
536+
var renderShadowed = !this.canDuplicateOnDrag() && this.isShadow() && !Blockly.scratchBlocksUtils.isShadowArgumentReporter(this);
538537

539538
if (renderShadowed && this.parentBlock_) {
540539
// Pull shadow block stroke colour from parent block's tertiary if possible.
@@ -989,7 +988,7 @@ Blockly.BlockSvg.prototype.computeInputWidth_ = function(input) {
989988
Blockly.BlockSvg.prototype.computeInputHeight_ = function(input, row,
990989
previousRow) {
991990
if (this.inputList.length === 1 && this.outputConnection &&
992-
(this.isShadow() &&
991+
(!this.canDuplicateOnDrag() && this.isShadow() &&
993992
!Blockly.scratchBlocksUtils.isShadowArgumentReporter(this))) {
994993
// "Lone" field blocks are smaller.
995994
return Blockly.BlockSvg.MIN_BLOCK_Y_SINGLE_FIELD_OUTPUT;
@@ -1049,7 +1048,7 @@ Blockly.BlockSvg.prototype.computeRightEdge_ = function(curEdge, hasStatement) {
10491048
// Blocks with notches
10501049
edge = Math.max(edge, Blockly.BlockSvg.MIN_BLOCK_X);
10511050
} else if (this.outputConnection) {
1052-
if (this.isShadow() &&
1051+
if (!this.canDuplicateOnDrag() && this.isShadow() &&
10531052
!Blockly.scratchBlocksUtils.isShadowArgumentReporter(this)) {
10541053
// Single-fields
10551054
edge = Math.max(edge, Blockly.BlockSvg.MIN_BLOCK_X_SHADOW_OUTPUT);
@@ -1080,7 +1079,7 @@ Blockly.BlockSvg.prototype.computeRightEdge_ = function(curEdge, hasStatement) {
10801079
Blockly.BlockSvg.prototype.computeOutputPadding_ = function(inputRows) {
10811080
// Only apply to blocks with outputs and not single fields (shadows).
10821081
if (!this.getOutputShape() || !this.outputConnection ||
1083-
(this.isShadow() &&
1082+
(!this.canDuplicateOnDrag() && this.isShadow() &&
10841083
!Blockly.scratchBlocksUtils.isShadowArgumentReporter(this))) {
10851084
return;
10861085
}

0 commit comments

Comments
 (0)