Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
849 changes: 445 additions & 404 deletions blockly_compressed.js

Large diffs are not rendered by default.

327 changes: 189 additions & 138 deletions blockly_uncompressed.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion blocks/colour.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ goog.require('Blockly.Blocks');
* This should be the same as Blockly.Msg.COLOUR_HUE.
* @readonly
*/
Blockly.Constants.Colour.HUE = 20;
Blockly.Constants.Colour.HUE = "#7F7F7F";
/** @deprecated Use Blockly.Constants.Colour.HUE */
Blockly.Blocks.colour.HUE = Blockly.Constants.Colour.HUE;

Expand Down
2 changes: 1 addition & 1 deletion blocks/lists.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ goog.require('Blockly.Blocks');
* This should be the same as Blockly.Msg.LISTS_HUE.
* @readonly
*/
Blockly.Constants.Lists.HUE = 260;
Blockly.Constants.Lists.HUE = "#76AFC9";
/** @deprecated Use Blockly.Constants.Lists.HUE */
Blockly.Blocks.lists.HUE = Blockly.Constants.Lists.HUE;

Expand Down
12 changes: 6 additions & 6 deletions blocks/logic.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ goog.require('Blockly.Blocks');
* Should be the same as Blockly.Msg.LOGIC_HUE.
* @readonly
*/
Blockly.Constants.Logic.HUE = 210;
Blockly.Constants.Logic.HUE = "#45B4A9";
/** @deprecated Use Blockly.Constants.Logic.HUE */
Blockly.Blocks.logic.HUE = Blockly.Constants.Logic.HUE;

Expand Down Expand Up @@ -84,7 +84,7 @@ Blockly.defineBlocksWithJsonArray([ // BEGIN JSON EXTRACT
],
"previousStatement": null,
"nextStatement": null,
"colour": "%{BKY_LOGIC_HUE}",
"colour": "%{BKY_LOOPS_HUE}",
"helpUrl": "%{BKY_CONTROLS_IF_HELPURL}",
"mutator": "controls_if_mutator",
"extensions": ["controls_if_tooltip"]
Expand Down Expand Up @@ -234,7 +234,7 @@ Blockly.defineBlocksWithJsonArray([ // BEGIN JSON EXTRACT
}
],
"output": null,
"colour": "%{BKY_LOGIC_HUE}",
"colour": "%{BKY_LOOPS_HUE}",
"tooltip": "%{BKY_LOGIC_TERNARY_TOOLTIP}",
"helpUrl": "%{BKY_LOGIC_TERNARY_HELPURL}",
"extensions": ["logic_ternary"]
Expand All @@ -248,7 +248,7 @@ Blockly.defineBlocksWithJsonArray([ // Mutator blocks. Do not extract.
"message0": "%{BKY_CONTROLS_IF_IF_TITLE_IF}",
"nextStatement": null,
"enableContextMenu": false,
"colour": "%{BKY_LOGIC_HUE}",
"colour": "%{BKY_LOOPS_HUE}",
"tooltip": "%{BKY_CONTROLS_IF_IF_TOOLTIP}"
},
// Block representing the else-if statement in the controls_if mutator.
Expand All @@ -258,7 +258,7 @@ Blockly.defineBlocksWithJsonArray([ // Mutator blocks. Do not extract.
"previousStatement": null,
"nextStatement": null,
"enableContextMenu": false,
"colour": "%{BKY_LOGIC_HUE}",
"colour": "%{BKY_LOOPS_HUE}",
"tooltip": "%{BKY_CONTROLS_IF_ELSEIF_TOOLTIP}"
},
// Block representing the else statement in the controls_if mutator.
Expand All @@ -267,7 +267,7 @@ Blockly.defineBlocksWithJsonArray([ // Mutator blocks. Do not extract.
"message0": "%{BKY_CONTROLS_IF_ELSE_TITLE_ELSE}",
"previousStatement": null,
"enableContextMenu": false,
"colour": "%{BKY_LOGIC_HUE}",
"colour": "%{BKY_LOOPS_HUE}",
"tooltip": "%{BKY_CONTROLS_IF_ELSE_TOOLTIP}"
}
]);
Expand Down
2 changes: 1 addition & 1 deletion blocks/loops.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ goog.require('Blockly.Blocks');
* Should be the same as Blockly.Msg.LOOPS_HUE
* @readonly
*/
Blockly.Constants.Loops.HUE = 120;
Blockly.Constants.Loops.HUE = "#F3AA44";
/** @deprecated Use Blockly.Constants.Loops.HUE */
Blockly.Blocks.loops.HUE = Blockly.Constants.Loops.HUE;

Expand Down
4 changes: 2 additions & 2 deletions blocks/math.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ goog.require('Blockly.Blocks');
* Should be the same as Blockly.Msg.MATH_HUE
* @readonly
*/
Blockly.Constants.Math.HUE = 230;
Blockly.Constants.Math.HUE = "#6789CC";
/** @deprecated Use Blockly.Constants.Math.HUE */
Blockly.Blocks.math.HUE = Blockly.Constants.Math.HUE;

Expand Down Expand Up @@ -286,7 +286,7 @@ Blockly.defineBlocksWithJsonArray([ // BEGIN JSON EXTRACT
}
],
"output": "Number",
"colour": "%{BKY_MATH_HUE}",
"colour": "%{BKY_LISTS_HUE}",
"helpUrl": "%{BKY_MATH_ONLIST_HELPURL}",
"mutator": "math_modes_of_list_mutator",
"extensions": ["math_op_tooltip"]
Expand Down
2 changes: 1 addition & 1 deletion blocks/procedures.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ goog.require('Blockly.Blocks');
/**
* Common HSV hue for all blocks in this category.
*/
Blockly.Blocks.procedures.HUE = 290;
Blockly.Blocks.procedures.HUE = "#7560A4";

Blockly.Blocks['procedures_defnoreturn'] = {
/**
Expand Down
2 changes: 1 addition & 1 deletion blocks/text.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ goog.require('Blockly.Blocks');
* Should be the same as Blockly.Msg.TEXTS_HUE
* @readonly
*/
Blockly.Constants.Text.HUE = 160;
Blockly.Constants.Text.HUE = "#DF6078";
/** @deprecated Use Blockly.Constants.Text.HUE */
Blockly.Blocks.texts.HUE = Blockly.Constants.Text.HUE;

Expand Down
2 changes: 1 addition & 1 deletion blocks/variables.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ goog.require('Blockly.Blocks');
* Should be the same as Blockly.Msg.VARIABLES_HUE.
* @readonly
*/
Blockly.Constants.Variables.HUE = 330;
Blockly.Constants.Variables.HUE = "#FC8743";
/** @deprecated Use Blockly.Constants.Variables.HUE */
Blockly.Blocks.variables.HUE = Blockly.Constants.Variables.HUE;

Expand Down
44 changes: 22 additions & 22 deletions blocks_compressed.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion build.py
Original file line number Diff line number Diff line change
Expand Up @@ -354,7 +354,7 @@ def gen_generator(self, language):
def do_compile(self, params, target_filename, filenames, remove):
# Send the request to Google.
headers = {"Content-type": "application/x-www-form-urlencoded"}
conn = httplib.HTTPConnection("closure-compiler.appspot.com")
conn = httplib.HTTPSConnection("closure-compiler.appspot.com")
conn.request("POST", "/compile", urllib.urlencode(params), headers)
response = conn.getresponse()
json_str = response.read()
Expand Down
8 changes: 6 additions & 2 deletions core/constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -74,14 +74,18 @@ Blockly.DRAG_STACK = true;
/**
* The richness of block colours, regardless of the hue.
* Must be in the range of 0 (inclusive) to 1 (exclusive).
*
* Note: Changed by Thunkable
*/
Blockly.HSV_SATURATION = 0.45;
Blockly.HSV_SATURATION = 0.56;

/**
* The intensity of block colours, regardless of the hue.
* Must be in the range of 0 (inclusive) to 1 (exclusive).
*
* Note: Changed by Thunkable
*/
Blockly.HSV_VALUE = 0.65;
Blockly.HSV_VALUE = 0.83;

/**
* Sprited icons and images.
Expand Down
10 changes: 8 additions & 2 deletions core/css.js
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,8 @@ Blockly.Css.CONTENT = [
'.blocklyText {',
'cursor: default;',
'fill: #fff;',
'font-family: sans-serif;',
/* Note: Changed by Thunkable */
'font-family: "Source Sans Pro", Lato, sans-serif;',
'font-size: 11pt;',
'}',

Expand Down Expand Up @@ -395,6 +396,8 @@ Blockly.Css.CONTENT = [
'}',

'.blocklyMainBackground {',
/* Note: Added by Thunkable */
'fill: #E8EAF8 !important;',
'stroke-width: 1;',
'stroke: #c6c6c6;', /* Equates to #ddd due to border being off-pixel. */
'}',
Expand Down Expand Up @@ -600,7 +603,10 @@ Blockly.Css.CONTENT = [

'.blocklyTreeLabel {',
'cursor: default;',
'font-family: sans-serif;',
/* Note: Changed by Thunkable */
'font-family: "Source Sans Pro", Lato, sans-serif;',
/* Note: Added by Thunkable */
'font-weight: 300;',
'font-size: 16px;',
'padding: 0 3px;',
'vertical-align: middle;',
Expand Down
2 changes: 1 addition & 1 deletion core/trashcan.js
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ Blockly.Trashcan.prototype.LID_HEIGHT_ = 16;
* @type {number}
* @private
*/
Blockly.Trashcan.prototype.MARGIN_BOTTOM_ = 20;
Blockly.Trashcan.prototype.MARGIN_BOTTOM_ = 90;

/**
* Distance between trashcan and right edge of workspace.
Expand Down
12 changes: 11 additions & 1 deletion generators/javascript.js
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,8 @@ Blockly.JavaScript.finish = function(code) {
delete Blockly.JavaScript.definitions_;
delete Blockly.JavaScript.functionNames_;
Blockly.JavaScript.variableDB_.reset();
return definitions.join('\n\n') + '\n\n\n' + code;
return definitions.join('\n\n') + '\n\n\n' +
Blockly.JavaScript.getConvertUndefinedCode() + '\n\n\n' + code;
};

/**
Expand Down Expand Up @@ -314,4 +315,13 @@ Blockly.JavaScript.getAdjusted = function(block, atId, opt_delta, opt_negate,
}
}
return at;
};

Blockly.JavaScript.getConvertUndefinedCode = function() {
return `convertUndefinedToEmptyString = function(value) { return (value === undefined ? "" : value); }`;
};

Blockly.JavaScript.valueToCodeNoUndefined = function(block, name, outerOrder) {
let code = Blockly.JavaScript.valueToCode(block, name, outerOrder);
return `convertUndefinedToEmptyString(${code})`;
};
42 changes: 21 additions & 21 deletions generators/javascript/text.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,21 +41,21 @@ Blockly.JavaScript['text_join'] = function(block) {
case 0:
return ['\'\'', Blockly.JavaScript.ORDER_ATOMIC];
case 1:
var element = Blockly.JavaScript.valueToCode(block, 'ADD0',
var element = Blockly.JavaScript.valueToCodeNoUndefined(block, 'ADD0',
Blockly.JavaScript.ORDER_NONE) || '\'\'';
var code = 'String(' + element + ')';
return [code, Blockly.JavaScript.ORDER_FUNCTION_CALL];
case 2:
var element0 = Blockly.JavaScript.valueToCode(block, 'ADD0',
var element0 = Blockly.JavaScript.valueToCodeNoUndefined(block, 'ADD0',
Blockly.JavaScript.ORDER_NONE) || '\'\'';
var element1 = Blockly.JavaScript.valueToCode(block, 'ADD1',
var element1 = Blockly.JavaScript.valueToCodeNoUndefined(block, 'ADD1',
Blockly.JavaScript.ORDER_NONE) || '\'\'';
var code = 'String(' + element0 + ') + String(' + element1 + ')';
return [code, Blockly.JavaScript.ORDER_ADDITION];
default:
var elements = new Array(block.itemCount_);
for (var i = 0; i < block.itemCount_; i++) {
elements[i] = Blockly.JavaScript.valueToCode(block, 'ADD' + i,
elements[i] = Blockly.JavaScript.valueToCodeNoUndefined(block, 'ADD' + i,
Blockly.JavaScript.ORDER_COMMA) || '\'\'';
}
var code = '[' + elements.join(',') + '].join(\'\')';
Expand All @@ -67,21 +67,21 @@ Blockly.JavaScript['text_append'] = function(block) {
// Append to a variable in place.
var varName = Blockly.JavaScript.variableDB_.getName(
block.getFieldValue('VAR'), Blockly.Variables.NAME_TYPE);
var value = Blockly.JavaScript.valueToCode(block, 'TEXT',
var value = Blockly.JavaScript.valueToCodeNoUndefined(block, 'TEXT',
Blockly.JavaScript.ORDER_NONE) || '\'\'';
return varName + ' = String(' + varName + ') + String(' + value + ');\n';
};

Blockly.JavaScript['text_length'] = function(block) {
// String or array length.
var text = Blockly.JavaScript.valueToCode(block, 'VALUE',
var text = Blockly.JavaScript.valueToCodeNoUndefined(block, 'VALUE',
Blockly.JavaScript.ORDER_FUNCTION_CALL) || '\'\'';
return [text + '.length', Blockly.JavaScript.ORDER_MEMBER];
};

Blockly.JavaScript['text_isEmpty'] = function(block) {
// Is the string null or array empty?
var text = Blockly.JavaScript.valueToCode(block, 'VALUE',
var text = Blockly.JavaScript.valueToCodeNoUndefined(block, 'VALUE',
Blockly.JavaScript.ORDER_MEMBER) || '\'\'';
return ['!' + text + '.length', Blockly.JavaScript.ORDER_LOGICAL_NOT];
};
Expand All @@ -90,9 +90,9 @@ Blockly.JavaScript['text_indexOf'] = function(block) {
// Search the text for a substring.
var operator = block.getFieldValue('END') == 'FIRST' ?
'indexOf' : 'lastIndexOf';
var substring = Blockly.JavaScript.valueToCode(block, 'FIND',
var substring = Blockly.JavaScript.valueToCodeNoUndefined(block, 'FIND',
Blockly.JavaScript.ORDER_NONE) || '\'\'';
var text = Blockly.JavaScript.valueToCode(block, 'VALUE',
var text = Blockly.JavaScript.valueToCodeNoUndefined(block, 'VALUE',
Blockly.JavaScript.ORDER_MEMBER) || '\'\'';
var code = text + '.' + operator + '(' + substring + ')';
// Adjust index if using one-based indices.
Expand All @@ -108,7 +108,7 @@ Blockly.JavaScript['text_charAt'] = function(block) {
var where = block.getFieldValue('WHERE') || 'FROM_START';
var textOrder = (where == 'RANDOM') ? Blockly.JavaScript.ORDER_NONE :
Blockly.JavaScript.ORDER_MEMBER;
var text = Blockly.JavaScript.valueToCode(block, 'VALUE',
var text = Blockly.JavaScript.valueToCodeNoUndefined(block, 'VALUE',
textOrder) || '\'\'';
switch (where) {
case 'FIRST':
Expand Down Expand Up @@ -162,7 +162,7 @@ Blockly.JavaScript.text.getIndex_ = function(stringName, where, opt_at) {

Blockly.JavaScript['text_getSubstring'] = function(block) {
// Get substring.
var text = Blockly.JavaScript.valueToCode(block, 'STRING',
var text = Blockly.JavaScript.valueToCodeNoUndefined(block, 'STRING',
Blockly.JavaScript.ORDER_FUNCTION_CALL) || '\'\'';
var where1 = block.getFieldValue('WHERE1');
var where2 = block.getFieldValue('WHERE2');
Expand Down Expand Up @@ -243,7 +243,7 @@ Blockly.JavaScript['text_changeCase'] = function(block) {
var operator = OPERATORS[block.getFieldValue('CASE')];
var textOrder = operator ? Blockly.JavaScript.ORDER_MEMBER :
Blockly.JavaScript.ORDER_NONE;
var text = Blockly.JavaScript.valueToCode(block, 'TEXT',
var text = Blockly.JavaScript.valueToCodeNoUndefined(block, 'TEXT',
textOrder) || '\'\'';
if (operator) {
// Upper and lower case are functions built into JavaScript.
Expand Down Expand Up @@ -271,14 +271,14 @@ Blockly.JavaScript['text_trim'] = function(block) {
'BOTH': '.trim()'
};
var operator = OPERATORS[block.getFieldValue('MODE')];
var text = Blockly.JavaScript.valueToCode(block, 'TEXT',
var text = Blockly.JavaScript.valueToCodeNoUndefined(block, 'TEXT',
Blockly.JavaScript.ORDER_MEMBER) || '\'\'';
return [text + operator, Blockly.JavaScript.ORDER_FUNCTION_CALL];
};

Blockly.JavaScript['text_print'] = function(block) {
// Print statement.
var msg = Blockly.JavaScript.valueToCode(block, 'TEXT',
var msg = Blockly.JavaScript.valueToCodeNoUndefined(block, 'TEXT',
Blockly.JavaScript.ORDER_NONE) || '\'\'';
return 'window.alert(' + msg + ');\n';
};
Expand All @@ -290,7 +290,7 @@ Blockly.JavaScript['text_prompt_ext'] = function(block) {
var msg = Blockly.JavaScript.quote_(block.getFieldValue('TEXT'));
} else {
// External message.
var msg = Blockly.JavaScript.valueToCode(block, 'TEXT',
var msg = Blockly.JavaScript.valueToCodeNoUndefined(block, 'TEXT',
Blockly.JavaScript.ORDER_NONE) || '\'\'';
}
var code = 'window.prompt(' + msg + ')';
Expand All @@ -304,9 +304,9 @@ Blockly.JavaScript['text_prompt_ext'] = function(block) {
Blockly.JavaScript['text_prompt'] = Blockly.JavaScript['text_prompt_ext'];

Blockly.JavaScript['text_count'] = function(block) {
var text = Blockly.JavaScript.valueToCode(block, 'TEXT',
var text = Blockly.JavaScript.valueToCodeNoUndefined(block, 'TEXT',
Blockly.JavaScript.ORDER_MEMBER) || '\'\'';
var sub = Blockly.JavaScript.valueToCode(block, 'SUB',
var sub = Blockly.JavaScript.valueToCodeNoUndefined(block, 'SUB',
Blockly.JavaScript.ORDER_NONE) || '\'\'';
var functionName = Blockly.JavaScript.provideFunction_(
'textCount',
Expand All @@ -323,11 +323,11 @@ Blockly.JavaScript['text_count'] = function(block) {
};

Blockly.JavaScript['text_replace'] = function(block) {
var text = Blockly.JavaScript.valueToCode(block, 'TEXT',
var text = Blockly.JavaScript.valueToCodeNoUndefined(block, 'TEXT',
Blockly.JavaScript.ORDER_MEMBER) || '\'\'';
var from = Blockly.JavaScript.valueToCode(block, 'FROM',
var from = Blockly.JavaScript.valueToCodeNoUndefined(block, 'FROM',
Blockly.JavaScript.ORDER_NONE) || '\'\'';
var to = Blockly.JavaScript.valueToCode(block, 'TO',
var to = Blockly.JavaScript.valueToCodeNoUndefined(block, 'TO',
Blockly.JavaScript.ORDER_NONE) || '\'\'';
// The regex escaping code below is taken from the implementation of
// goog.string.regExpEscape.
Expand All @@ -345,7 +345,7 @@ Blockly.JavaScript['text_replace'] = function(block) {
};

Blockly.JavaScript['text_reverse'] = function(block) {
var text = Blockly.JavaScript.valueToCode(block, 'TEXT',
var text = Blockly.JavaScript.valueToCodeNoUndefined(block, 'TEXT',
Blockly.JavaScript.ORDER_MEMBER) || '\'\'';
var code = text + '.split(\'\').reverse().join(\'\')';
return [code, Blockly.JavaScript.ORDER_MEMBER];
Expand Down
Loading