Skip to content

Commit

Permalink
Remove attribute of object (blockly)
Browse files Browse the repository at this point in the history
  • Loading branch information
klein0r committed Feb 18, 2024
1 parent 41bf9b0 commit 61c8a35
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 1 deletion.
45 changes: 44 additions & 1 deletion src/public/google-blockly/own/blocks_object.js
Original file line number Diff line number Diff line change
Expand Up @@ -320,13 +320,56 @@ Blockly.Blocks['object_set_attr'] = {
};

Blockly.JavaScript['object_set_attr'] = function(block) {
const obj = Blockly.JavaScript.valueToCode(block, 'OBJECT', Blockly.JavaScript.ORDER_ATOMIC);
let obj = Blockly.JavaScript.valueToCode(block, 'OBJECT', Blockly.JavaScript.ORDER_ATOMIC);
const attr = block.getFieldValue('ATTR');
const value = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ATOMIC);

if (!obj) {
obj = '{}';
}

return `(() => { const obj = ${obj}; if (typeof obj === 'object') { obj['${attr}'] = ${value}; } })();\n`;
};

// --- delete attribute --------------------------------------------------
Blockly.Object.blocks['object_del_attr'] =
'<block type="object_del_attr">'
+ ' <value name="ATTR">'
+ ' </value>'
+ ' <value name="OBJECT">'
+ ' </value>'
+ '</block>';

Blockly.Blocks['object_del_attr'] = {
init: function() {
this.appendDummyInput('ATTR')
.appendField(Blockly.Translate('object_del_attr'))
.appendField(new Blockly.FieldTextInput('attribute1'), 'ATTR');

this.appendValueInput('OBJECT')
.appendField(Blockly.Translate('object_del_attr_object'));

this.setInputsInline(false);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);

this.setColour(Blockly.Object.HUE);
this.setTooltip(Blockly.Translate('object_del_attr_tooltip'));
//this.setHelpUrl(getHelp('object_del_attr_help'));
}
};

Blockly.JavaScript['object_del_attr'] = function(block) {
let obj = Blockly.JavaScript.valueToCode(block, 'OBJECT', Blockly.JavaScript.ORDER_ATOMIC);
const attr = block.getFieldValue('ATTR');

if (!obj) {
obj = '{}';
}

return `(() => { const obj = ${obj}; if (typeof obj === 'object') { delete obj['${attr}']; } })();\n`;
};

// --- has attribute --------------------------------------------------
Blockly.Object.blocks['object_has_attr'] =
'<block type="object_has_attr">'
Expand Down
3 changes: 3 additions & 0 deletions src/public/google-blockly/own/blocks_words.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 61c8a35

Please sign in to comment.