Blockly.Blocks['new_attribute_declaration'] = {
init: function() {
this.appendDummyInput()
.appendField("The category")
.appendField(new Blockly.FieldDropdown(this.generateCategories(),"category_name"))
.appendField("has an attribute")
.appendField(new Blockly.FieldTextInput("attribute name"), "attribute_name");
this.appendDummyInput()
.appendField("which is of type")
.appendField(new Blockly.FieldDropdown(this.generateDataTypes(), "attribute_type"))
.appendField(", appearing as")
.appendField(new Blockly.FieldDropdown([["object, then value","ov"], ["value, then object","vo"]]), "order");
this.appendDummyInput()
.appendField(new Blockly.FieldImage("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAn0lEQVQI1z3OMa5BURSF4f/cQhAKjUQhuQmFNwGJEUi0RKN5rU7FHKhpjEH3TEMtkdBSCY1EIv8r7nFX9e29V7EBAOvu7RPjwmWGH/VuF8CyN9/OAdvqIXYLvtRaNjx9mMTDyo+NjAN1HNcl9ZQ5oQMM3dgDUqDo1l8DzvwmtZN7mnD+PkmLa+4mhrxVA9fRowBWmVBhFy5gYEjKMfz9AylsaRRgGzvZAAAAAElFTkSuQmCC", 15, 15, { alt: "\"", flipRtl: "FALSE" }))
.appendField(new Blockly.FieldTextInput(""), "prefix")
.appendField(new Blockly.FieldLabelSerializable("object"), "first_element")
.appendField(new Blockly.FieldTextInput("'s attribute name is"), "infix")
.appendField(new Blockly.FieldLabelSerializable("value"), "second_element")
.appendField(new Blockly.FieldTextInput(""), "postfix")
.appendField(new Blockly.FieldImage("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAqUlEQVQI1z3KvUpCcRiA8ef9E4JNHhI0aFEacm1o0BsI0Slx8wa8gLauoDnoBhq7DcfWhggONDmJJgqCPA7neJ7p934EOOKOnM8Q7PDElo/4x4lFb2DmuUjcUzS3URnGib9qaPNbuXvBO3sGPHJDRG6fGVdMSeWDP2q99FQdFrz26Gu5Tq7dFMzUvbXy8KXeAj57cOklgA+u1B5AoslLtGIHQMaCVnwDnADZIFIrXsoXrgAAAABJRU5ErkJggg==", 15, 15, { alt: "\"", flipRtl: "FALSE" }));
this.setInputsInline(false);
this.setPreviousStatement(true, ["OUTER", "STATEMENT"]);
this.setNextStatement(true, "STATEMENT");
this.setColour(45);
this.setTooltip("Use to create an attribute for a category.");
this.setHelpUrl("/docs/blocks/new_attribute/");
},
generateCategories: function() {
var all_workspaces = getAllWorkspaces();
// console.log("All Workspaces:")
// console.log(all_workspaces)
var knownCategoriesList = [];
for (var w = 0; w < all_workspaces.length; w++) {
// Go through the blocks in the workspace.
// If the block is an object declaration, add the relevant block to the xml
if (all_workspaces[w].xml_content) {
var domObject = Blockly.Xml.textToDom(all_workspaces[w].xml_content);
var tempWorkspace = new Blockly.Workspace();
Blockly.Xml.domToWorkspace(domObject, tempWorkspace);
var blockList = tempWorkspace.getAllBlocks();
// console.log("BlockList: " + blockList)
for (var i = 0; i< blockList.length; i++) {
if (blockList[i].type == "category_declaration") {
// Get the name of the entity, insert a block of that type,
var category_name = blockList[i].getFieldValue('category_name');
knownCategoriesList.push([category_name,category_name]);
}
}
delete tempWorkspace;
}
}
for (var id in importDictionary) {
var blockList = importDictionary[id].getAllBlocks();
for (var i = 0; i< blockList.length; i++) {
if (blockList[i].type == "category_declaration") {
// Get the name of the entity, insert a block of that type,
var category_name = blockList[i].getFieldValue('category_name');
knownCategoriesList.push([category_name,category_name]);
}
}
}
return knownCategoriesList;
},
generateDataTypes: function() {
var options = [["true / false","boolean"], ["number","number"], ["date","date"], ["time","time"], ["datetime","datetime"], ["duration","duration"]]
var knownCategories = this.generateCategories();
for (var i=0; i < knownCategories.length; i++){
options.push(knownCategories[i]);
}
return options;
}
};