123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- /*
- Blockly.Blocks['classics_get_all'] = {
- init: function() {
- this.setHelpUrl('http://www.example.com/');
- this.setColour(WEATHER_HUE);
- this.appendDummyInput()
- .appendField("classics.get all books");
- this.setInputsInline(false);
- this.setOutput(true, "Number");
- this.setTooltip('Returns all the books');
- }
- };
- Blockly.Python['classics_get_all'] = function(block) {
- Blockly.Python.definitions_['import_classics'] = 'import classics';
- var code = 'classics.get_all()';
- return [code, Blockly.Python.ORDER_ATOMIC];
- };
- PythonToBlocks.KNOWN_MODULES['classics'] = {
- "get_all": ["classics_get_all"]
- };
- */
- function newBlock(name) {
- var block = blockpy.components.editor.blockly.newBlock(name);
- block.initSvg();
- block.render();
- }
- /**
- * Decode an XML DOM and create blocks on the workspace, clearing out old blocks.
- * @param {!Element} xml XML DOM.
- * @param {!Blockly.Workspace} workspace The workspace.
- */
- Blockly.Xml.domToWorkspaceDestructive = function(xml, workspace, errorXml) {
- if (xml instanceof Blockly.Workspace) {
- var swap = xml;
- xml = workspace;
- workspace = swap;
- console.warn('Deprecated call to Blockly.Xml.domToWorkspace, ' +
- 'swap the arguments.');
- }
- var width; // Not used in LTR.
- if (workspace.RTL) {
- width = workspace.getWidth();
- }
- Blockly.Field.startCache();
- // Safari 7.1.3 is known to provide node lists with extra references to
- // children beyond the lists' length. Trust the length, do not use the
- // looping pattern of checking the index for an object.
- var childCount = xml.childNodes.length;
- var existingGroup = Blockly.Events.getGroup();
- if (!existingGroup) {
- Blockly.Events.setGroup(true);
- }
- Blockly.Events.disable();
- while (workspace.topBlocks_.length) {
- workspace.topBlocks_[0].dispose();
- }
- //workspace.variableList.length = 0;
- Blockly.Events.enable();
- // Disable workspace resizes as an optimization.
- if (workspace.setResizesEnabled) {
- workspace.setResizesEnabled(false);
- }
- for (var i = 0; i < childCount; i++) {
- var xmlChild = xml.childNodes[i];
- var name = xmlChild.nodeName.toLowerCase();
- if (name == 'block' ||
- (name == 'shadow' && !Blockly.Events.recordUndo)) {
- // Allow top-level shadow blocks if recordUndo is disabled since
- // that means an undo is in progress. Such a block is expected
- // to be moved to a nested destination in the next operation.
- var block = Blockly.Xml.domToBlock(xmlChild, workspace);
- var blockX = parseInt(xmlChild.getAttribute('x'), 10);
- var blockY = parseInt(xmlChild.getAttribute('y'), 10);
- if (!isNaN(blockX) && !isNaN(blockY)) {
- block.moveBy(workspace.RTL ? width - blockX : blockX, blockY);
- }
- } else if (name == 'shadow') {
- goog.asserts.fail('Shadow block cannot be a top-level block.');
- }
- }
- if (!existingGroup) {
- Blockly.Events.setGroup(false);
- }
- Blockly.Field.stopCache();
- //workspace.updateVariableList(false);
- // Re-enable workspace resizing.
- if (workspace.setResizesEnabled) {
- workspace.setResizesEnabled(true);
- }
- }
- function PLUS_MINUS_updateShape(listItemName, startMessage) {
- return function() {
- var that = this;
- function addField(field, block, e) {
- var rect = field.fieldGroup_.getBoundingClientRect();
- var yPosition = e.clientY;
- if (yPosition < rect.top+rect.height/2) {
- var input = that.appendValueInput(listItemName + that.itemCount_);
- that.itemCount_ += 1;
- } else {
- if (that.itemCount_ > 0) {
- that.itemCount_ -= 1;
- that.removeInput(listItemName + that.itemCount_)
- }
- }
- }
- if (!this.getInput('START')) {
- var clickablePlusMinus = new Blockly.FieldClickImage("images/plus-minus-button.svg", 12, 24, '+', addField, '-2px');
- //clickablePlusMinus.imageElement_.style.y = '-2px';
- this.appendDummyInput('START')
- .appendField(startMessage)
- .appendField(clickablePlusMinus);
- }
- // Add new inputs.
- for (var i = 0; i < this.itemCount_; i++) {
- if (!this.getInput(listItemName + i)) {
- var input = this.appendValueInput(listItemName + i);
- }
- }
- // Remove deleted inputs.
- while (this.getInput(listItemName + i)) {
- this.removeInput(listItemName + i);
- i++;
- }
- }
- }
|