mirror of
https://github.com/google/blockly.git
synced 2026-01-11 10:57:07 +01:00
Merge branch 'develop' into goog.module-prep
This resolves a conflict in `blockly_uncompressed.js`, and missing updates to `test/deps.js`, caused by PR #5041.
This commit is contained in:
@@ -742,25 +742,33 @@ Blockly.Block.prototype.getChildren = function(ordered) {
|
||||
* @package
|
||||
*/
|
||||
Blockly.Block.prototype.setParent = function(newParent) {
|
||||
if (newParent == this.parentBlock_) {
|
||||
if (newParent === this.parentBlock_) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check that block is connected to new parent if new parent is not null and
|
||||
// that block is not connected to superior one if new parent is null.
|
||||
var connection = this.previousConnection || this.outputConnection;
|
||||
var isConnected = !!(connection && connection.targetBlock());
|
||||
|
||||
if (isConnected && newParent && connection.targetBlock() !== newParent) {
|
||||
throw Error('Block connected to superior one that is not new parent.');
|
||||
} else if (!isConnected && newParent) {
|
||||
throw Error('Block not connected to new parent.');
|
||||
} else if (isConnected && !newParent) {
|
||||
throw Error('Cannot set parent to null while block is still connected to' +
|
||||
' superior block.');
|
||||
}
|
||||
|
||||
if (this.parentBlock_) {
|
||||
// Remove this block from the old parent's child list.
|
||||
Blockly.utils.arrayRemove(this.parentBlock_.childBlocks_, this);
|
||||
|
||||
// Disconnect from superior blocks.
|
||||
if (this.previousConnection && this.previousConnection.isConnected()) {
|
||||
throw Error('Still connected to previous block.');
|
||||
}
|
||||
if (this.outputConnection && this.outputConnection.isConnected()) {
|
||||
throw Error('Still connected to parent block.');
|
||||
}
|
||||
this.parentBlock_ = null;
|
||||
// This block hasn't actually moved on-screen, so there's no need to update
|
||||
// its connection locations.
|
||||
// its connection locations.
|
||||
} else {
|
||||
// Remove this block from the workspace's list of top-most blocks.
|
||||
// New parent must be non-null so remove this block from the workspace's
|
||||
// list of top-most blocks.
|
||||
this.workspace.removeTopBlock(this);
|
||||
}
|
||||
|
||||
|
||||
@@ -159,7 +159,7 @@ Blockly.BlockDragSurfaceSvg.prototype.translateSurfaceInternal_ = function() {
|
||||
this.SVG_.style.display = 'block';
|
||||
|
||||
Blockly.utils.dom.setCssTransform(
|
||||
this.SVG_, 'translate3d(' + x + 'px, ' + y + 'px, 0px)');
|
||||
this.SVG_, 'translate3d(' + x + 'px, ' + y + 'px, 0)');
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -55,6 +55,7 @@ goog.requireType('Blockly.WorkspaceSvg');
|
||||
* the individual field's documentation for a list of properties this
|
||||
* parameter supports.
|
||||
* @constructor
|
||||
* @abstract
|
||||
* @implements {Blockly.IASTNodeLocationSvg}
|
||||
* @implements {Blockly.IASTNodeLocationWithBlock}
|
||||
* @implements {Blockly.IKeyboardAccessible}
|
||||
@@ -276,7 +277,7 @@ Blockly.Field.prototype.configure_ = function(config) {
|
||||
*/
|
||||
Blockly.Field.prototype.setSourceBlock = function(block) {
|
||||
if (this.sourceBlock_) {
|
||||
throw Error('Field already bound to a block.');
|
||||
throw Error('Field already bound to a block');
|
||||
}
|
||||
this.sourceBlock_ = block;
|
||||
};
|
||||
|
||||
@@ -135,7 +135,9 @@ Blockly.FieldAngle.prototype.DEFAULT_VALUE = 0;
|
||||
* @nocollapse
|
||||
*/
|
||||
Blockly.FieldAngle.fromJson = function(options) {
|
||||
return new Blockly.FieldAngle(options['angle'], undefined, options);
|
||||
// `this` might be a subclass of FieldAngle if that class doesn't override
|
||||
// the static fromJson method.
|
||||
return new this(options['angle'], undefined, options);
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -63,7 +63,9 @@ Blockly.FieldCheckbox.prototype.DEFAULT_VALUE = false;
|
||||
* @nocollapse
|
||||
*/
|
||||
Blockly.FieldCheckbox.fromJson = function(options) {
|
||||
return new Blockly.FieldCheckbox(options['checked'], undefined, options);
|
||||
// `this` might be a subclass of FieldCheckbox if that class doesn't override
|
||||
// the static fromJson method.
|
||||
return new this(options['checked'], undefined, options);
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -104,7 +104,9 @@ Blockly.utils.object.inherits(Blockly.FieldColour, Blockly.Field);
|
||||
* @nocollapse
|
||||
*/
|
||||
Blockly.FieldColour.fromJson = function(options) {
|
||||
return new Blockly.FieldColour(options['colour'], undefined, options);
|
||||
// `this` might be a subclass of FieldColour if that class doesn't override
|
||||
// the static fromJson method.
|
||||
return new this(options['colour'], undefined, options);
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -149,7 +149,9 @@ Blockly.FieldDropdown.ImageProperties;
|
||||
* @nocollapse
|
||||
*/
|
||||
Blockly.FieldDropdown.fromJson = function(options) {
|
||||
return new Blockly.FieldDropdown(options['options'], undefined, options);
|
||||
// `this` might be a subclass of FieldDropdown if that class doesn't override
|
||||
// the static fromJson method.
|
||||
return new this(options['options'], undefined, options);
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -132,8 +132,9 @@ Blockly.FieldImage.prototype.DEFAULT_VALUE = '';
|
||||
* @nocollapse
|
||||
*/
|
||||
Blockly.FieldImage.fromJson = function(options) {
|
||||
return new Blockly.FieldImage(
|
||||
options['src'], options['width'], options['height'],
|
||||
// `this` might be a subclass of FieldImage if that class doesn't override
|
||||
// the static fromJson method.
|
||||
return new this(options['src'], options['width'], options['height'],
|
||||
undefined, undefined, undefined, options);
|
||||
};
|
||||
|
||||
|
||||
@@ -65,7 +65,9 @@ Blockly.FieldLabel.prototype.DEFAULT_VALUE = '';
|
||||
*/
|
||||
Blockly.FieldLabel.fromJson = function(options) {
|
||||
var text = Blockly.utils.replaceMessageReferences(options['text']);
|
||||
return new Blockly.FieldLabel(text, undefined, options);
|
||||
// `this` might be a subclass of FieldLabel if that class doesn't override
|
||||
// the static fromJson method.
|
||||
return new this(text, undefined, options);
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -48,7 +48,9 @@ Blockly.utils.object.inherits(Blockly.FieldLabelSerializable,
|
||||
*/
|
||||
Blockly.FieldLabelSerializable.fromJson = function(options) {
|
||||
var text = Blockly.utils.replaceMessageReferences(options['text']);
|
||||
return new Blockly.FieldLabelSerializable(text, undefined, options);
|
||||
// `this` might be a subclass of FieldLabelSerializable if that class doesn't
|
||||
// override the static fromJson method.
|
||||
return new this(text, undefined, options);
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -89,7 +89,9 @@ Blockly.FieldMultilineInput.prototype.configure_ = function(config) {
|
||||
*/
|
||||
Blockly.FieldMultilineInput.fromJson = function(options) {
|
||||
var text = Blockly.utils.replaceMessageReferences(options['text']);
|
||||
return new Blockly.FieldMultilineInput(text, undefined, options);
|
||||
// `this` might be a subclass of FieldMultilineInput if that class doesn't
|
||||
// override the static fromJson method.
|
||||
return new this(text, undefined, options);
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -91,7 +91,9 @@ Blockly.FieldNumber.prototype.DEFAULT_VALUE = 0;
|
||||
* @nocollapse
|
||||
*/
|
||||
Blockly.FieldNumber.fromJson = function(options) {
|
||||
return new Blockly.FieldNumber(options['value'],
|
||||
// `this` might be a subclass of FieldNumber if that class doesn't override
|
||||
// the static fromJson method.
|
||||
return new this(options['value'],
|
||||
undefined, undefined, undefined, undefined, options);
|
||||
};
|
||||
|
||||
|
||||
@@ -110,7 +110,9 @@ Blockly.FieldTextInput.prototype.DEFAULT_VALUE = '';
|
||||
*/
|
||||
Blockly.FieldTextInput.fromJson = function(options) {
|
||||
var text = Blockly.utils.replaceMessageReferences(options['text']);
|
||||
return new Blockly.FieldTextInput(text, undefined, options);
|
||||
// `this` might be a subclass of FieldTextInput if that class doesn't override
|
||||
// the static fromJson method.
|
||||
return new this(text, undefined, options);
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -340,6 +342,7 @@ Blockly.FieldTextInput.prototype.showInlineEditor_ = function(quietInput) {
|
||||
* @protected
|
||||
*/
|
||||
Blockly.FieldTextInput.prototype.widgetCreate_ = function() {
|
||||
Blockly.Events.setGroup(true);
|
||||
var div = Blockly.WidgetDiv.DIV;
|
||||
|
||||
Blockly.utils.dom.addClass(this.getClickTarget_(), 'editing');
|
||||
@@ -368,8 +371,8 @@ Blockly.FieldTextInput.prototype.widgetCreate_ = function() {
|
||||
div.style.borderRadius = borderRadius;
|
||||
div.style.transition = 'box-shadow 0.25s ease 0s';
|
||||
if (this.getConstants().FIELD_TEXTINPUT_BOX_SHADOW) {
|
||||
div.style.boxShadow = 'rgba(255, 255, 255, 0.3) 0px 0px 0px ' +
|
||||
4 * scale + 'px';
|
||||
div.style.boxShadow = 'rgba(255, 255, 255, 0.3) 0 0 0 ' +
|
||||
(4 * scale) + 'px';
|
||||
}
|
||||
}
|
||||
htmlInput.style.borderRadius = borderRadius;
|
||||
@@ -402,6 +405,7 @@ Blockly.FieldTextInput.prototype.widgetDispose_ = function() {
|
||||
if (this.onFinishEditing_) {
|
||||
this.onFinishEditing_(this.value_);
|
||||
}
|
||||
Blockly.Events.setGroup(false);
|
||||
|
||||
// Actual disposal.
|
||||
this.unbindInputEvents_();
|
||||
@@ -477,15 +481,10 @@ Blockly.FieldTextInput.prototype.onHtmlInputChange_ = function(_e) {
|
||||
if (text !== this.htmlInput_.oldValue_) {
|
||||
this.htmlInput_.oldValue_ = text;
|
||||
|
||||
// TODO(#2169): Once issue is fixed the setGroup functionality could be
|
||||
// moved up to the Field setValue method. This would create a
|
||||
// broader fix for all field types.
|
||||
Blockly.Events.setGroup(true);
|
||||
var value = this.getValueFromEditorText_(text);
|
||||
this.setValue(value);
|
||||
this.forceRerender();
|
||||
this.resizeEditor_();
|
||||
Blockly.Events.setGroup(false);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -100,8 +100,9 @@ Blockly.utils.object.inherits(Blockly.FieldVariable, Blockly.FieldDropdown);
|
||||
*/
|
||||
Blockly.FieldVariable.fromJson = function(options) {
|
||||
var varName = Blockly.utils.replaceMessageReferences(options['variable']);
|
||||
return new Blockly.FieldVariable(
|
||||
varName, undefined, undefined, undefined, options);
|
||||
// `this` might be a subclass of FieldVariable if that class doesn't override
|
||||
// the static fromJson method.
|
||||
return new this(varName, undefined, undefined, undefined, options);
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -343,6 +343,10 @@ Blockly.HorizontalFlyout.prototype.reflowInternal_ = function() {
|
||||
for (var i = 0, block; (block = blocks[i]); i++) {
|
||||
flyoutHeight = Math.max(flyoutHeight, block.getHeightWidth().height);
|
||||
}
|
||||
var buttons = this.buttons_;
|
||||
for (var i = 0, button; (button = buttons[i]); i++) {
|
||||
flyoutHeight = Math.max(flyoutHeight, button.height);
|
||||
}
|
||||
flyoutHeight += this.MARGIN * 1.5;
|
||||
flyoutHeight *= this.workspace_.scale;
|
||||
flyoutHeight += Blockly.Scrollbar.scrollbarThickness;
|
||||
|
||||
@@ -82,8 +82,3 @@ goog.require('Blockly.zelos.Renderer');
|
||||
// Blockly Themes.
|
||||
// Classic is the default theme.
|
||||
goog.require('Blockly.Themes.Classic');
|
||||
goog.require('Blockly.Themes.Dark');
|
||||
goog.require('Blockly.Themes.Deuteranopia');
|
||||
goog.require('Blockly.Themes.HighContrast');
|
||||
goog.require('Blockly.Themes.Tritanopia');
|
||||
// goog.require('Blockly.Themes.Modern');
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
/**
|
||||
* @license
|
||||
* Copyright 2019 Google LLC
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* @fileoverview Dark theme.
|
||||
* @author samelh@google.com (Sam El-Husseini)
|
||||
*/
|
||||
'use strict';
|
||||
|
||||
goog.provide('Blockly.Themes.Dark');
|
||||
|
||||
goog.require('Blockly.Theme');
|
||||
|
||||
Blockly.Themes.Dark = Blockly.Theme.defineTheme('dark', {
|
||||
'base': Blockly.Themes.Classic,
|
||||
'componentStyles': {
|
||||
'workspaceBackgroundColour': '#1e1e1e',
|
||||
'toolboxBackgroundColour': 'blackBackground',
|
||||
'toolboxForegroundColour': '#fff',
|
||||
'flyoutBackgroundColour': '#252526',
|
||||
'flyoutForegroundColour': '#ccc',
|
||||
'flyoutOpacity': 1,
|
||||
'scrollbarColour': '#797979',
|
||||
'insertionMarkerColour': '#fff',
|
||||
'insertionMarkerOpacity': 0.3,
|
||||
'scrollbarOpacity': 0.4,
|
||||
'cursorColour': '#d0d0d0',
|
||||
'blackBackground': '#333'
|
||||
}
|
||||
});
|
||||
@@ -1,104 +0,0 @@
|
||||
/**
|
||||
* @license
|
||||
* Copyright 2019 Google LLC
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* @fileoverview Deuteranopia theme.
|
||||
* A colour palette for people that have deuteranopia (the inability to perceive
|
||||
* green light). This can also be used for people that have protanopia (the
|
||||
* inability to perceive red light).
|
||||
*/
|
||||
'use strict';
|
||||
|
||||
goog.provide('Blockly.Themes.Deuteranopia');
|
||||
|
||||
goog.require('Blockly.Theme');
|
||||
|
||||
|
||||
// Temporary holding object.
|
||||
Blockly.Themes.Deuteranopia = {};
|
||||
|
||||
Blockly.Themes.Deuteranopia.defaultBlockStyles = {
|
||||
"colour_blocks": {
|
||||
"colourPrimary": "#f2a72c",
|
||||
"colourSecondary": "#f1c172",
|
||||
"colourTertiary": "#da921c"
|
||||
},
|
||||
"list_blocks": {
|
||||
"colourPrimary": "#7d65ab",
|
||||
"colourSecondary": "#a88be0",
|
||||
"colourTertiary": "#66518e"
|
||||
},
|
||||
"logic_blocks": {
|
||||
"colourPrimary": "#9fd2f1",
|
||||
"colourSecondary": "#c0e0f4",
|
||||
"colourTertiary": "#74bae5"
|
||||
},
|
||||
"loop_blocks": {
|
||||
"colourPrimary": "#795a07",
|
||||
"colourSecondary": "#ac8726",
|
||||
"colourTertiary": "#c4a03f"
|
||||
},
|
||||
"math_blocks": {
|
||||
"colourPrimary": "#e6da39",
|
||||
"colourSecondary": "#f3ec8e",
|
||||
"colourTertiary": "#f2eeb7"
|
||||
},
|
||||
"procedure_blocks": {
|
||||
"colourPrimary": "#590721",
|
||||
"colourSecondary": "#8c475d",
|
||||
"colourTertiary": "#885464"
|
||||
},
|
||||
"text_blocks": {
|
||||
"colourPrimary": "#058863",
|
||||
"colourSecondary": "#5ecfaf",
|
||||
"colourTertiary": "#04684c"
|
||||
},
|
||||
"variable_blocks": {
|
||||
"colourPrimary": "#47025a",
|
||||
"colourSecondary": "#820fa1",
|
||||
"colourTertiary": "#8e579d"
|
||||
},
|
||||
"variable_dynamic_blocks": {
|
||||
"colourPrimary": "#47025a",
|
||||
"colourSecondary": "#820fa1",
|
||||
"colourTertiary": "#8e579d"
|
||||
}
|
||||
};
|
||||
|
||||
Blockly.Themes.Deuteranopia.categoryStyles = {
|
||||
"colour_category": {
|
||||
"colour": "#f2a72c"
|
||||
},
|
||||
"list_category": {
|
||||
"colour": "#7d65ab"
|
||||
},
|
||||
"logic_category": {
|
||||
"colour": "#9fd2f1"
|
||||
},
|
||||
"loop_category": {
|
||||
"colour": "#795a07"
|
||||
},
|
||||
"math_category": {
|
||||
"colour": "#e6da39"
|
||||
},
|
||||
"procedure_category": {
|
||||
"colour": "#590721"
|
||||
},
|
||||
"text_category": {
|
||||
"colour": "#058863"
|
||||
},
|
||||
"variable_category": {
|
||||
"colour": "#47025a"
|
||||
},
|
||||
"variable_dynamic_category": {
|
||||
"colour": "#47025a"
|
||||
}
|
||||
};
|
||||
|
||||
Blockly.Themes.Deuteranopia =
|
||||
new Blockly.Theme('deuteranopia',
|
||||
Blockly.Themes.Deuteranopia.defaultBlockStyles,
|
||||
Blockly.Themes.Deuteranopia.categoryStyles);
|
||||
@@ -1,119 +0,0 @@
|
||||
/**
|
||||
* @license
|
||||
* Copyright 2018 Google LLC
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* @fileoverview High contrast theme.
|
||||
* Darker colours to contrast the white font.
|
||||
*/
|
||||
'use strict';
|
||||
|
||||
goog.provide('Blockly.Themes.HighContrast');
|
||||
|
||||
goog.require('Blockly.Theme');
|
||||
|
||||
|
||||
// Temporary holding object.
|
||||
Blockly.Themes.HighContrast = {};
|
||||
|
||||
Blockly.Themes.HighContrast.defaultBlockStyles = {
|
||||
"colour_blocks": {
|
||||
"colourPrimary": "#a52714",
|
||||
"colourSecondary": "#FB9B8C",
|
||||
"colourTertiary": "#FBE1DD"
|
||||
},
|
||||
"list_blocks": {
|
||||
"colourPrimary": "#4a148c",
|
||||
"colourSecondary": "#AD7BE9",
|
||||
"colourTertiary": "#CDB6E9"
|
||||
},
|
||||
"logic_blocks": {
|
||||
"colourPrimary": "#01579b",
|
||||
"colourSecondary": "#64C7FF",
|
||||
"colourTertiary": "#C5EAFF"
|
||||
},
|
||||
"loop_blocks": {
|
||||
"colourPrimary": "#33691e",
|
||||
"colourSecondary": "#9AFF78",
|
||||
"colourTertiary": "#E1FFD7"
|
||||
},
|
||||
"math_blocks": {
|
||||
"colourPrimary": "#1a237e",
|
||||
"colourSecondary": "#8A9EFF",
|
||||
"colourTertiary": "#DCE2FF"
|
||||
},
|
||||
"procedure_blocks": {
|
||||
"colourPrimary": "#006064",
|
||||
"colourSecondary": "#77E6EE",
|
||||
"colourTertiary": "#CFECEE"
|
||||
},
|
||||
"text_blocks": {
|
||||
"colourPrimary": "#004d40",
|
||||
"colourSecondary": "#5ae27c",
|
||||
"colourTertiary": "#D2FFDD"
|
||||
},
|
||||
"variable_blocks": {
|
||||
"colourPrimary": "#880e4f",
|
||||
"colourSecondary": "#FF73BE",
|
||||
"colourTertiary": "#FFD4EB"
|
||||
},
|
||||
"variable_dynamic_blocks": {
|
||||
"colourPrimary": "#880e4f",
|
||||
"colourSecondary": "#FF73BE",
|
||||
"colourTertiary": "#FFD4EB"
|
||||
},
|
||||
"hat_blocks": {
|
||||
"colourPrimary": "#880e4f",
|
||||
"colourSecondary": "#FF73BE",
|
||||
"colourTertiary": "#FFD4EB",
|
||||
"hat": "cap"
|
||||
}
|
||||
};
|
||||
|
||||
Blockly.Themes.HighContrast.categoryStyles = {
|
||||
"colour_category": {
|
||||
"colour": "#a52714"
|
||||
},
|
||||
"list_category": {
|
||||
"colour": "#4a148c"
|
||||
},
|
||||
"logic_category": {
|
||||
"colour": "#01579b"
|
||||
},
|
||||
"loop_category": {
|
||||
"colour": "#33691e"
|
||||
},
|
||||
"math_category": {
|
||||
"colour": "#1a237e"
|
||||
},
|
||||
"procedure_category": {
|
||||
"colour": "#006064"
|
||||
},
|
||||
"text_category": {
|
||||
"colour": "#004d40"
|
||||
},
|
||||
"variable_category": {
|
||||
"colour": "#880e4f"
|
||||
},
|
||||
"variable_dynamic_category": {
|
||||
"colour": "#880e4f"
|
||||
}
|
||||
};
|
||||
|
||||
// This style is still being fleshed out and may change.
|
||||
Blockly.Themes.HighContrast =
|
||||
new Blockly.Theme('highcontrast',
|
||||
Blockly.Themes.HighContrast.defaultBlockStyles,
|
||||
Blockly.Themes.HighContrast.categoryStyles);
|
||||
|
||||
Blockly.Themes.HighContrast.setComponentStyle('selectedGlowColour', '#000000');
|
||||
Blockly.Themes.HighContrast.setComponentStyle('selectedGlowSize', 1);
|
||||
Blockly.Themes.HighContrast.setComponentStyle('replacementGlowColour', '#000000');
|
||||
|
||||
Blockly.Themes.HighContrast.setFontStyle({
|
||||
'family': null, // Use default font-family.
|
||||
'weight': null, // Use default font-weight.
|
||||
'size': 16
|
||||
});
|
||||
@@ -1,108 +0,0 @@
|
||||
/**
|
||||
* @license
|
||||
* Copyright 2018 Google LLC
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* @fileoverview Modern theme.
|
||||
* Same colours as classic, but single coloured border.
|
||||
*/
|
||||
'use strict';
|
||||
|
||||
goog.provide('Blockly.Themes.Modern');
|
||||
|
||||
goog.require('Blockly.Theme');
|
||||
|
||||
|
||||
// Temporary holding object.
|
||||
Blockly.Themes.Modern = {};
|
||||
|
||||
Blockly.Themes.Modern.defaultBlockStyles = {
|
||||
"colour_blocks": {
|
||||
"colourPrimary": "#a5745b",
|
||||
"colourSecondary": "#dbc7bd",
|
||||
"colourTertiary": "#845d49"
|
||||
},
|
||||
"list_blocks": {
|
||||
"colourPrimary": "#745ba5",
|
||||
"colourSecondary": "#c7bddb",
|
||||
"colourTertiary": "#5d4984"
|
||||
},
|
||||
"logic_blocks": {
|
||||
"colourPrimary": "#5b80a5",
|
||||
"colourSecondary": "#bdccdb",
|
||||
"colourTertiary": "#496684"
|
||||
},
|
||||
"loop_blocks": {
|
||||
"colourPrimary": "#5ba55b",
|
||||
"colourSecondary": "#bddbbd",
|
||||
"colourTertiary": "#498449"
|
||||
},
|
||||
"math_blocks": {
|
||||
"colourPrimary": "#5b67a5",
|
||||
"colourSecondary": "#bdc2db",
|
||||
"colourTertiary": "#495284"
|
||||
},
|
||||
"procedure_blocks": {
|
||||
"colourPrimary": "#995ba5",
|
||||
"colourSecondary": "#d6bddb",
|
||||
"colourTertiary": "#7a4984"
|
||||
},
|
||||
"text_blocks": {
|
||||
"colourPrimary": "#5ba58c",
|
||||
"colourSecondary": "#bddbd1",
|
||||
"colourTertiary": "#498470"
|
||||
},
|
||||
"variable_blocks": {
|
||||
"colourPrimary": "#a55b99",
|
||||
"colourSecondary": "#dbbdd6",
|
||||
"colourTertiary": "#84497a"
|
||||
},
|
||||
"variable_dynamic_blocks": {
|
||||
"colourPrimary": "#a55b99",
|
||||
"colourSecondary": "#dbbdd6",
|
||||
"colourTertiary": "#84497a"
|
||||
},
|
||||
"hat_blocks": {
|
||||
"colourPrimary": "#a55b99",
|
||||
"colourSecondary": "#dbbdd6",
|
||||
"colourTertiary": "#84497a",
|
||||
"hat": "cap"
|
||||
}
|
||||
};
|
||||
|
||||
Blockly.Themes.Modern.categoryStyles = {
|
||||
"colour_category": {
|
||||
"colour": "#a5745b"
|
||||
},
|
||||
"list_category": {
|
||||
"colour": "#745ba5"
|
||||
},
|
||||
"logic_category": {
|
||||
"colour": "#5b80a5"
|
||||
},
|
||||
"loop_category": {
|
||||
"colour": "#5ba55b"
|
||||
},
|
||||
"math_category": {
|
||||
"colour": "#5b67a5"
|
||||
},
|
||||
"procedure_category": {
|
||||
"colour": "#995ba5"
|
||||
},
|
||||
"text_category": {
|
||||
"colour": "#5ba58c"
|
||||
},
|
||||
"variable_category": {
|
||||
"colour": "#a55b99"
|
||||
},
|
||||
"variable_dynamic_category": {
|
||||
"colour": "#a55b99"
|
||||
}
|
||||
};
|
||||
|
||||
// This style is still being fleshed out and may change.
|
||||
Blockly.Themes.Modern =
|
||||
new Blockly.Theme('modern', Blockly.Themes.Modern.defaultBlockStyles,
|
||||
Blockly.Themes.Modern.categoryStyles);
|
||||
@@ -1,103 +0,0 @@
|
||||
/**
|
||||
* @license
|
||||
* Copyright 2019 Google LLC
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* @fileoverview Tritanopia theme.
|
||||
* A colour palette for people that have tritanopia (the inability to perceive
|
||||
* blue light).
|
||||
*/
|
||||
'use strict';
|
||||
|
||||
goog.provide('Blockly.Themes.Tritanopia');
|
||||
|
||||
goog.require('Blockly.Theme');
|
||||
|
||||
|
||||
// Temporary holding object.
|
||||
Blockly.Themes.Tritanopia = {};
|
||||
|
||||
Blockly.Themes.Tritanopia.defaultBlockStyles = {
|
||||
"colour_blocks": {
|
||||
"colourPrimary": "#05427f",
|
||||
"colourSecondary": "#2974c0",
|
||||
"colourTertiary": "#2d74bb"
|
||||
},
|
||||
"list_blocks": {
|
||||
"colourPrimary": "#b69ce8",
|
||||
"colourSecondary": "#ccbaef",
|
||||
"colourTertiary": "#9176c5"
|
||||
},
|
||||
"logic_blocks": {
|
||||
"colourPrimary": "#9fd2f1",
|
||||
"colourSecondary": "#c0e0f4",
|
||||
"colourTertiary": "#74bae5"
|
||||
},
|
||||
"loop_blocks": {
|
||||
"colourPrimary": "#aa1846",
|
||||
"colourSecondary": "#d36185",
|
||||
"colourTertiary": "#7c1636"
|
||||
},
|
||||
"math_blocks": {
|
||||
"colourPrimary": "#e6da39",
|
||||
"colourSecondary": "#f3ec8e",
|
||||
"colourTertiary": "#f2eeb7"
|
||||
},
|
||||
"procedure_blocks": {
|
||||
"colourPrimary": "#590721",
|
||||
"colourSecondary": "#8c475d",
|
||||
"colourTertiary": "#885464"
|
||||
},
|
||||
"text_blocks": {
|
||||
"colourPrimary": "#058863",
|
||||
"colourSecondary": "#5ecfaf",
|
||||
"colourTertiary": "#04684c"
|
||||
},
|
||||
"variable_blocks": {
|
||||
"colourPrimary": "#4b2d84",
|
||||
"colourSecondary": "#816ea7",
|
||||
"colourTertiary": "#83759e"
|
||||
},
|
||||
"variable_dynamic_blocks": {
|
||||
"colourPrimary": "#4b2d84",
|
||||
"colourSecondary": "#816ea7",
|
||||
"colourTertiary": "#83759e"
|
||||
}
|
||||
};
|
||||
|
||||
Blockly.Themes.Tritanopia.categoryStyles = {
|
||||
"colour_category": {
|
||||
"colour": "#05427f"
|
||||
},
|
||||
"list_category": {
|
||||
"colour": "#b69ce8"
|
||||
},
|
||||
"logic_category": {
|
||||
"colour": "#9fd2f1"
|
||||
},
|
||||
"loop_category": {
|
||||
"colour": "#aa1846"
|
||||
},
|
||||
"math_category": {
|
||||
"colour": "#e6da39"
|
||||
},
|
||||
"procedure_category": {
|
||||
"colour": "#590721"
|
||||
},
|
||||
"text_category": {
|
||||
"colour": "#058863"
|
||||
},
|
||||
"variable_category": {
|
||||
"colour": "#4b2d84"
|
||||
},
|
||||
"variable_dynamic_category": {
|
||||
"colour": "#4b2d84"
|
||||
}
|
||||
};
|
||||
|
||||
Blockly.Themes.Tritanopia =
|
||||
new Blockly.Theme('tritanopia',
|
||||
Blockly.Themes.Tritanopia.defaultBlockStyles,
|
||||
Blockly.Themes.Tritanopia.categoryStyles);
|
||||
@@ -652,7 +652,7 @@ Blockly.Css.register([
|
||||
|
||||
'.blocklyToolboxDiv[dir="RTL"] .blocklyTreeRow {',
|
||||
'margin-left: 8px;',
|
||||
'padding-right: 0px',
|
||||
'padding-right: 0',
|
||||
'}',
|
||||
|
||||
'.blocklyTreeIcon {',
|
||||
|
||||
@@ -370,7 +370,7 @@ Blockly.utils.dom.measureFontMetrics = function(text, fontSize, fontWeight,
|
||||
|
||||
var block = document.createElement('div');
|
||||
block.style.width = '1px';
|
||||
block.style.height = '0px';
|
||||
block.style.height = 0;
|
||||
|
||||
var div = document.createElement('div');
|
||||
div.setAttribute('style', 'position: fixed; top: 0; left: 0; display: flex;');
|
||||
|
||||
@@ -19,15 +19,25 @@ goog.provide('Blockly.utils.object');
|
||||
|
||||
/**
|
||||
* Inherit the prototype methods from one constructor into another.
|
||||
*
|
||||
* @param {!Function} childCtor Child class.
|
||||
* @param {!Function} parentCtor Parent class.
|
||||
* @suppress {strictMissingProperties} superClass_ is not defined on Function.
|
||||
*/
|
||||
Blockly.utils.object.inherits = function(childCtor, parentCtor) {
|
||||
// Set a .superClass_ property so that methods can call parent methods
|
||||
// without hard-coding the parent class name.
|
||||
// Could be replaced by ES6's super().
|
||||
childCtor.superClass_ = parentCtor.prototype;
|
||||
|
||||
// Link the child class to the parent class so that static methods inherit.
|
||||
Object.setPrototypeOf(childCtor, parentCtor);
|
||||
|
||||
// Replace the child constructor's prototype object with an instance
|
||||
// of the parent class.
|
||||
childCtor.prototype = Object.create(parentCtor.prototype);
|
||||
childCtor.prototype.constructor = childCtor;
|
||||
// Alternatively, one could use this instead:
|
||||
// Object.setPrototypeOf(childCtor.prototype, parentCtor.prototype);
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -94,7 +94,7 @@ Blockly.WorkspaceDragSurfaceSvg.prototype.translateSurface = function(x, y) {
|
||||
|
||||
this.SVG_.style.display = 'block';
|
||||
Blockly.utils.dom.setCssTransform(
|
||||
this.SVG_, 'translate3d(' + fixedX + 'px, ' + fixedY + 'px, 0px)');
|
||||
this.SVG_, 'translate3d(' + fixedX + 'px, ' + fixedY + 'px, 0)');
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user