From f9385d98d3df192c009bc155eedc747ffbcb2193 Mon Sep 17 00:00:00 2001 From: Rachel Fenichel Date: Wed, 2 Nov 2016 16:52:37 -0700 Subject: [PATCH] Add ability to define blocks with a json array --- core/blockly.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/core/blockly.js b/core/blockly.js index 3d33d8e8c..9fa5966cb 100644 --- a/core/blockly.js +++ b/core/blockly.js @@ -399,6 +399,33 @@ Blockly.prompt = function(message, defaultValue, callback) { callback(window.prompt(message, defaultValue)); }; +/** + * Helper function for defining a block from json. The resulting function has + * the correct value of jsonDef at the point in code where jsonInit is called. + * @param {Object} jsonDef The JSON definition of a block. + * @return {function} A function that calls jsonInit with the correct value + * of jsonDef. + */ +Blockly.jsonInitFactory_ = function(jsonDef) { + return function() { + this.jsonInit(jsonDef); + }; +}; + +/** + * Define blocks from an array of JSON block definitions, as might be generated + * by the Blockly Developer Tools. + * @param {!Array} jsonArray An array of JSON block definitions. + */ +Blockly.defineBlocksWithJsonArray = function(jsonArray) { + for (var index = 0; index < jsonArray.length; index++) { + var elem = jsonArray[index]; + Blockly.Blocks[elem.type] = { + init: Blockly.jsonInitFactory_(elem) + }; + } +}; + // IE9 does not have a console. Create a stub to stop errors. if (!goog.global['console']) { goog.global['console'] = {