var global_filters = 1;
let filtersXML;
Blockly.Blocks['filters'] = {
init: function () {
this.filtersCount_ = 1;
this.appendDummyInput()
.setAlign(Blockly.ALIGN_CENTER)
.appendField("Filters");
this.appendDummyInput('condition')
.appendField(new Blockly.FieldDropdown(minecraft.all_any), "conditionDrop");
this.appendDummyInput('filter0')
.setAlign(Blockly.ALIGN_LEFT)
.appendField("Test")
.appendField(new Blockly.FieldDropdown(minecraft.filters), "test0")
.appendField("Operator")
.appendField(new Blockly.FieldDropdown(minecraft.operator), "operator0")
.appendField("Subject")
.appendField(new Blockly.FieldDropdown(minecraft.subject), "subject0")
.appendField("Value")
.appendField(new Blockly.FieldNumber(0, 0), "value0");
this.setMutator(new Blockly.Mutator(['filtersItems']));
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(230);
this.setTooltip("");
this.setHelpUrl("");
},
mutationToDom: function () {
var container = Blockly.utils.xml.createElement('filters_mutation');
container.setAttribute('filterCount', this.filtersCount_);
for (var i = 0; i < this.filtersCount_; i++) {
var conditionDrop = this.getFieldValue('conditionDrop');
var test = this.getFieldValue('test' + i);
var operator = this.getFieldValue('operator' + i);
var subject = this.getFieldValue('subject' + i);
var value = this.getFieldValue('value' + i);
container.setAttribute('conditionDrop', conditionDrop);
container.setAttribute('test' + i, test);
container.setAttribute('operator' + i, operator);
container.setAttribute('subject' + i, subject);
container.setAttribute('value' + i, value);
}
filtersXML = container;
return container;
},
decompose: function (workspace) {
var containerBlock = workspace.newBlock('filtersContainer');
containerBlock.initSvg();
var connection = containerBlock.getInput('filtersList').connection;
for (var x = 0; x < this.filtersCount_; x++) {
var itemBlock = workspace.newBlock('filtersItems');
itemBlock.initSvg();
connection.connect(itemBlock.previousConnection);
connection = itemBlock.nextConnection;
}
return containerBlock;
},
compose: function (containerBlock) {
if (this.filtersCount_ == 0) {
this.removeInput('filter0');
} else {
for (var x = this.filtersCount_ - 1; x >= 0; x--) {
this.removeInput('filter' + x);
}
}
this.filtersCount_ = 0;
var ItemBlock = containerBlock.getInputTargetBlock('filtersList');
while (ItemBlock) {
var input = this.appendDummyInput('filter' + this.filtersCount_)
input.setAlign(Blockly.ALIGN_LEFT)
.appendField("Test")
.appendField(new Blockly.FieldDropdown(minecraft.filters), "test" + this.filtersCount_)
.appendField("Operator")
.appendField(new Blockly.FieldDropdown(minecraft.operator), "operator" + this.filtersCount_)
.appendField("Subject")
.appendField(new Blockly.FieldDropdown(minecraft.subject), "subject" + this.filtersCount_)
.appendField("Value")
.appendField(new Blockly.FieldNumber(0, 0), "value" + this.filtersCount_);
if (ItemBlock.valueConnection_) {
input.connection.connect(ItemBlock.valueConnection_);
}
this.filtersCount_++;
global_filters = this.filtersCount_;
ItemBlock = ItemBlock.nextConnection &&
ItemBlock.nextConnection.targetBlock();
}
if (this.filtersCount_ == 0) {
this.appendDummyInput('filter0')
.setAlign(Blockly.ALIGN_LEFT)
.appendField("Test")
.appendField(new Blockly.FieldDropdown(minecraft.filters), "test0")
.appendField("Operator")
.appendField(new Blockly.FieldDropdown(minecraft.operator), "operator0")
.appendField("Subject")
.appendField(new Blockly.FieldDropdown(minecraft.subject), "subject0")
.appendField("Value")
.appendField(new Blockly.FieldNumber(0, 0), "value0");
}
this.replace(filtersXML)
},
replace: function (container) {
for (var i = 0; i < this.filtersCount_; i++) {
var conditionDrop = container.getAttribute('conditionDrop');
var test = container.getAttribute('test' + i);
var operator = container.getAttribute('operator' + i);
var subject = container.getAttribute('subject' + i);
var value = container.getAttribute('value' + i);
this.setFieldValue(conditionDrop, 'conditionDrop');
this.setFieldValue(test, 'test' + i);
this.setFieldValue(operator, 'operator' + i);
this.setFieldValue(subject, 'subject' + i);
this.setFieldValue(value, 'value' + i);
}
}
};