parent
bc5cbb6b33
commit
65fa627aeb
@ -16,7 +16,7 @@ Blockly.Blocks['controls_whileUntil'] = {
|
|||||||
this.setHelpUrl(Blockly.Msg.CONTROLS_WHILEUNTIL_HELPURL);
|
this.setHelpUrl(Blockly.Msg.CONTROLS_WHILEUNTIL_HELPURL);
|
||||||
this.setColour(getColour().loops);
|
this.setColour(getColour().loops);
|
||||||
this.appendValueInput('BOOL')
|
this.appendValueInput('BOOL')
|
||||||
.setCheck(getCompatibleTypes(Boolean))
|
.setCheck(getCompatibleTypes('boolean'))
|
||||||
.appendField(new Blockly.FieldDropdown(OPERATORS), 'MODE');
|
.appendField(new Blockly.FieldDropdown(OPERATORS), 'MODE');
|
||||||
this.appendStatementInput('DO')
|
this.appendStatementInput('DO')
|
||||||
.appendField(Blockly.Msg.CONTROLS_WHILEUNTIL_INPUT_DO);
|
.appendField(Blockly.Msg.CONTROLS_WHILEUNTIL_INPUT_DO);
|
||||||
@ -53,19 +53,19 @@ Blockly.Blocks['controls_for'] = {
|
|||||||
{
|
{
|
||||||
"type": "input_value",
|
"type": "input_value",
|
||||||
"name": "FROM",
|
"name": "FROM",
|
||||||
"check": getCompatibleTypes(Number),
|
"check": getCompatibleTypes('int'),
|
||||||
"align": "RIGHT"
|
"align": "RIGHT"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "input_value",
|
"type": "input_value",
|
||||||
"name": "TO",
|
"name": "TO",
|
||||||
"check": getCompatibleTypes(Number),
|
"check": getCompatibleTypes('int'),
|
||||||
"align": "RIGHT"
|
"align": "RIGHT"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "input_value",
|
"type": "input_value",
|
||||||
"name": "BY",
|
"name": "BY",
|
||||||
"check": getCompatibleTypes(Number),
|
"check": getCompatibleTypes('int'),
|
||||||
"align": "RIGHT"
|
"align": "RIGHT"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -104,7 +104,7 @@ Blockly.Blocks['controls_forEach'] = {
|
|||||||
{
|
{
|
||||||
"type": "input_value",
|
"type": "input_value",
|
||||||
"name": "LIST",
|
"name": "LIST",
|
||||||
"check": getCompatibleTypes(Array)
|
"check": getCompatibleTypes('Array')
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"previousStatement": null,
|
"previousStatement": null,
|
||||||
@ -197,7 +197,7 @@ Blockly.Blocks['controls_repeat_ext'] = {
|
|||||||
{
|
{
|
||||||
"type": "input_value",
|
"type": "input_value",
|
||||||
"name": "TIMES",
|
"name": "TIMES",
|
||||||
"check": getCompatibleTypes(Number),
|
"check": getCompatibleTypes('int'),
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"previousStatement": null,
|
"previousStatement": null,
|
||||||
|
@ -105,135 +105,3 @@ export const getCompatibleTypes = (type) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const VARIABLE_TYPES = [['SHORT_NUMBER', 'char'], ['NUMBER', 'int'], ['DECIMAL', 'long'], ['TEXT', 'String'], ['CHARACTER', 'char'], ['BOOLEAN', 'boolean'], ['NULL', 'void'], ['UNDEF', 'undefined']];
|
export const VARIABLE_TYPES = [['SHORT_NUMBER', 'char'], ['NUMBER', 'int'], ['DECIMAL', 'long'], ['TEXT', 'String'], ['CHARACTER', 'char'], ['BOOLEAN', 'boolean'], ['NULL', 'void'], ['UNDEF', 'undefined']];
|
||||||
|
|
||||||
// /**
|
|
||||||
// * Some Types have circular dependencies on their compatibilities, so add them
|
|
||||||
// * after declaration.
|
|
||||||
// */
|
|
||||||
// Blockly.Types.NUMBER.addCompatibleTypes([
|
|
||||||
// Blockly.Types.BOOLEAN,
|
|
||||||
// Blockly.Types.SHORT_NUMBER,
|
|
||||||
// Blockly.Types.LARGE_NUMBER,
|
|
||||||
// Blockly.Types.DECIMAL]);
|
|
||||||
|
|
||||||
// Blockly.Types.SHORT_NUMBER.addCompatibleTypes([
|
|
||||||
// Blockly.Types.BOOLEAN,
|
|
||||||
// Blockly.Types.NUMBER,
|
|
||||||
// Blockly.Types.LARGE_NUMBER,
|
|
||||||
// Blockly.Types.DECIMAL]);
|
|
||||||
|
|
||||||
// Blockly.Types.LARGE_NUMBER.addCompatibleTypes([
|
|
||||||
// Blockly.Types.BOOLEAN,
|
|
||||||
// Blockly.Types.SHORT_NUMBER,
|
|
||||||
// Blockly.Types.NUMBER,
|
|
||||||
// Blockly.Types.DECIMAL]);
|
|
||||||
|
|
||||||
// /**
|
|
||||||
// * Adds another type to the Blockly.Types collection.
|
|
||||||
// * @param {string} typeId_ Identifiable name of the type.
|
|
||||||
// * @param {string} typeMsgName_ Name of the member variable from Blockly.Msg
|
|
||||||
// * object to identify the translateble string.for the Type name.
|
|
||||||
// * @param {Array<Blockly.Type>} compatibleTypes_ List of types this Type is
|
|
||||||
// * compatible with.
|
|
||||||
// */
|
|
||||||
// Blockly.Types.addType = function (typeId_, typeMsgName_, compatibleTypes_) {
|
|
||||||
// // The Id is used as the key from the value pair in the BlocklyTypes object
|
|
||||||
// var key = typeId_.toUpperCase().replace(/ /g, '_');
|
|
||||||
// if (Blockly.Types[key] !== undefined) {
|
|
||||||
// throw 'The Blockly type ' + key + ' already exists.';
|
|
||||||
// }
|
|
||||||
// Blockly.Types[key] = new Blockly.Type({
|
|
||||||
// typeId: typeId_,
|
|
||||||
// typeName: typeMsgName_,
|
|
||||||
// compatibleTypes: compatibleTypes_
|
|
||||||
// });
|
|
||||||
// };
|
|
||||||
|
|
||||||
// /**
|
|
||||||
// * Converts the static types dictionary in to a an array with 2-item arrays.
|
|
||||||
// * This array only contains the valid types, excluding any error or temp types.
|
|
||||||
// * @return {!Array<Array<string>>} Blockly types in the format described above.
|
|
||||||
// */
|
|
||||||
// Blockly.Types.getValidTypeArray = function () {
|
|
||||||
// var typesArray = [];
|
|
||||||
// for (var typeKey in Blockly.Types) {
|
|
||||||
// if ((typeKey !== 'UNDEF') && (typeKey !== 'CHILD_BLOCK_MISSING') &&
|
|
||||||
// (typeKey !== 'NULL') && (typeKey !== 'ARRAY') &&
|
|
||||||
// (typeof Blockly.Types[typeKey] !== 'function') &&
|
|
||||||
// !(Blockly.Types[typeKey] instanceof RegExp)) {
|
|
||||||
// typesArray.push([Blockly.Types[typeKey].typeName, typeKey]);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// return typesArray;
|
|
||||||
// };
|
|
||||||
|
|
||||||
// /**
|
|
||||||
// * Navigates through child blocks of the argument block to get this block type.
|
|
||||||
// * @param {!Blockly.Block} block Block to navigate through children.
|
|
||||||
// * @return {Blockly.Type} Type of the input block.
|
|
||||||
// */
|
|
||||||
// Blockly.Types.getChildBlockType = function (block) {
|
|
||||||
// var blockType = null;
|
|
||||||
// var nextBlock = block;
|
|
||||||
// // Only checks first input block, so it decides the type. Incoherences amongst
|
|
||||||
// // multiple inputs dealt at a per-block level with their own block warnings
|
|
||||||
// while (nextBlock && (nextBlock.getBlockType === undefined) &&
|
|
||||||
// (nextBlock.inputList.length > 0) &&
|
|
||||||
// (nextBlock.inputList[0].connection)) {
|
|
||||||
// nextBlock = nextBlock.inputList[0].connection.targetBlock();
|
|
||||||
// }
|
|
||||||
// if (nextBlock === block) {
|
|
||||||
// // Set variable block is empty, so no type yet
|
|
||||||
// blockType = Blockly.Types.CHILD_BLOCK_MISSING;
|
|
||||||
// } else if (nextBlock === null) {
|
|
||||||
// // Null return from targetBlock indicates no block connected
|
|
||||||
// blockType = Blockly.Types.CHILD_BLOCK_MISSING;
|
|
||||||
// } else {
|
|
||||||
// var func = nextBlock.getBlockType;
|
|
||||||
// if (func) {
|
|
||||||
// blockType = nextBlock.getBlockType();
|
|
||||||
// } else {
|
|
||||||
// // Most inner block, supposed to define a type, is missing getBlockType()
|
|
||||||
// blockType = Blockly.Types.NULL;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// return blockType;
|
|
||||||
// };
|
|
||||||
|
|
||||||
// /**
|
|
||||||
// * Regular expressions to identify an integer.
|
|
||||||
// * @private
|
|
||||||
// */
|
|
||||||
// Blockly.Types.regExpInt_ = new RegExp(/^-?\d+$/);
|
|
||||||
|
|
||||||
// /**
|
|
||||||
// * Regular expressions to identify a decimal.
|
|
||||||
// * @private
|
|
||||||
// */
|
|
||||||
// Blockly.Types.regExpFloat_ = new RegExp(/^-?[0-9]*[.][0-9]+$/);
|
|
||||||
|
|
||||||
// /**
|
|
||||||
// * Uses regular expressions to identify if the input number is an integer or a
|
|
||||||
// * floating point.
|
|
||||||
// * @param {string} numberString String of the number to identify.
|
|
||||||
// * @return {!Blockly.Type} Blockly type.
|
|
||||||
// */
|
|
||||||
// Blockly.Types.identifyNumber = function (numberString) {
|
|
||||||
// if (Blockly.Types.regExpInt_.test(numberString)) {
|
|
||||||
// var intValue = parseInt(numberString);
|
|
||||||
// if (isNaN(intValue)) {
|
|
||||||
// return Blockly.Types.NULL;
|
|
||||||
// }
|
|
||||||
// if (intValue > 32767 || intValue < -32768) {
|
|
||||||
// return Blockly.Types.LARGE_NUMBER;
|
|
||||||
// }
|
|
||||||
// return Blockly.Types.NUMBER;
|
|
||||||
// } else if (Blockly.Types.regExpFloat_.test(numberString)) {
|
|
||||||
// return Blockly.Types.DECIMAL;
|
|
||||||
// }
|
|
||||||
// return Blockly.Types.NULL;
|
|
||||||
// };
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -64,6 +64,14 @@ export const UI = {
|
|||||||
messages_GET_TUTORIAL_FAIL: 'Zurück zur Tutorials-Übersicht',
|
messages_GET_TUTORIAL_FAIL: 'Zurück zur Tutorials-Übersicht',
|
||||||
messages_LOGIN_FAIL: 'Der Benutzername oder das Passwort ist nicht korrekt.',
|
messages_LOGIN_FAIL: 'Der Benutzername oder das Passwort ist nicht korrekt.',
|
||||||
messages_copy_code: "Code wurde in die Zwischenablage kopiert",
|
messages_copy_code: "Code wurde in die Zwischenablage kopiert",
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reset Dialog
|
||||||
|
*/
|
||||||
|
|
||||||
|
resetDialog_headline: "Workspace zurücksetzen?",
|
||||||
|
resetDialog_text: "Möchtest du wirklich die Workspace zurücksetzen? Hierbei werden alle Blöcke gelöscht!",
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Share Dialog
|
* Share Dialog
|
||||||
*/
|
*/
|
||||||
|
@ -67,6 +67,15 @@ export const UI = {
|
|||||||
messages_LOGIN_FAIL: 'The username or password is incorrect.',
|
messages_LOGIN_FAIL: 'The username or password is incorrect.',
|
||||||
messages_login_error: "Enter both a username and a password.",
|
messages_login_error: "Enter both a username and a password.",
|
||||||
messages_copy_code: "Copy code to clipboard succesfull",
|
messages_copy_code: "Copy code to clipboard succesfull",
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reset Dialog
|
||||||
|
*/
|
||||||
|
|
||||||
|
resetDialog_headline: "Reset workspace?",
|
||||||
|
resetDialog_text: "Do you really want to reset the workspace? All blocks will be deleted!",
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Share Dialog
|
* Share Dialog
|
||||||
*/
|
*/
|
||||||
|
@ -16,6 +16,8 @@ import Tooltip from '@material-ui/core/Tooltip';
|
|||||||
|
|
||||||
import { faShare } from "@fortawesome/free-solid-svg-icons";
|
import { faShare } from "@fortawesome/free-solid-svg-icons";
|
||||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
|
import Dialog from '../Dialog';
|
||||||
|
import Button from '@material-ui/core/Button';
|
||||||
|
|
||||||
const styles = (theme) => ({
|
const styles = (theme) => ({
|
||||||
button: {
|
button: {
|
||||||
@ -39,12 +41,21 @@ class ResetWorkspace extends Component {
|
|||||||
this.inputRef = React.createRef();
|
this.inputRef = React.createRef();
|
||||||
this.state = {
|
this.state = {
|
||||||
snackbar: false,
|
snackbar: false,
|
||||||
|
open: false,
|
||||||
type: '',
|
type: '',
|
||||||
key: '',
|
key: '',
|
||||||
message: '',
|
message: '',
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
toggleDialog = () => {
|
||||||
|
this.setState({ open: !this.state});
|
||||||
|
}
|
||||||
|
|
||||||
|
openDialog = () => {
|
||||||
|
this.setState({open: true});
|
||||||
|
}
|
||||||
|
|
||||||
resetWorkspace = () => {
|
resetWorkspace = () => {
|
||||||
const workspace = Blockly.getMainWorkspace();
|
const workspace = Blockly.getMainWorkspace();
|
||||||
Blockly.Events.disable(); // https://groups.google.com/forum/#!topic/blockly/m7e3g0TC75Y
|
Blockly.Events.disable(); // https://groups.google.com/forum/#!topic/blockly/m7e3g0TC75Y
|
||||||
@ -69,7 +80,7 @@ class ResetWorkspace extends Component {
|
|||||||
<Tooltip title={Blockly.Msg.tooltip_reset_workspace} arrow>
|
<Tooltip title={Blockly.Msg.tooltip_reset_workspace} arrow>
|
||||||
<IconButton
|
<IconButton
|
||||||
className={this.props.classes.button}
|
className={this.props.classes.button}
|
||||||
onClick={() => this.resetWorkspace()}
|
onClick={() => this.openDialog()}
|
||||||
>
|
>
|
||||||
<FontAwesomeIcon icon={faShare} size="xs" flip='horizontal' />
|
<FontAwesomeIcon icon={faShare} size="xs" flip='horizontal' />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
@ -81,6 +92,17 @@ class ResetWorkspace extends Component {
|
|||||||
type={this.state.type}
|
type={this.state.type}
|
||||||
key={this.state.key}
|
key={this.state.key}
|
||||||
/>
|
/>
|
||||||
|
<Dialog
|
||||||
|
open={this.state.open}
|
||||||
|
title={Blockly.Msg.resetDialog_headline}
|
||||||
|
content={Blockly.Msg.resetDialog_text}
|
||||||
|
onClose={() => { this.toggleDialog(); }}
|
||||||
|
onClick={() => { this.toggleDialog(); }}
|
||||||
|
button={Blockly.Msg.button_cancel}
|
||||||
|
> <div style={{ marginTop: '10px' }}>
|
||||||
|
|
||||||
|
<Button variant='contained' color='primary' onClick={() => { this.resetWorkspace(); this.toggleDialog(); }}>Zurücksetzen</Button>
|
||||||
|
</div></Dialog>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user