mirror of
https://github.com/google/blockly.git
synced 2026-01-04 15:40:08 +01:00
feat: add block factory export in json (#8051)
This commit is contained in:
committed by
GitHub
parent
5a5184ab4f
commit
da97e782c4
@@ -126,6 +126,16 @@ AppController.prototype.exportBlockLibraryToFile = function() {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
AppController.prototype.exportBlockLibraryAsJson = function() {
|
||||||
|
const blockJson = this.blockLibraryController.getBlockLibraryAsJson();
|
||||||
|
if (blockJson.length === 0) {
|
||||||
|
alert('No blocks in library to export');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const filename = 'legacy_block_factory_export.txt';
|
||||||
|
FactoryUtils.createAndDownloadFile(JSON.stringify(blockJson), filename, 'plain');
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts an object mapping block type to XML to text file for output.
|
* Converts an object mapping block type to XML to text file for output.
|
||||||
* @param {!Object} blockXmlMap Object mapping block type to XML.
|
* @param {!Object} blockXmlMap Object mapping block type to XML.
|
||||||
@@ -491,6 +501,10 @@ AppController.prototype.assignBlockFactoryClickHandlers = function() {
|
|||||||
self.exportBlockLibraryToFile();
|
self.exportBlockLibraryToFile();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
document.getElementById('exportAsJson').addEventListener('click', function() {
|
||||||
|
self.exportBlockLibraryAsJson();
|
||||||
|
});
|
||||||
|
|
||||||
document.getElementById('helpButton').addEventListener('click',
|
document.getElementById('helpButton').addEventListener('click',
|
||||||
function() {
|
function() {
|
||||||
open('https://developers.google.com/blockly/custom-blocks/block-factory',
|
open('https://developers.google.com/blockly/custom-blocks/block-factory',
|
||||||
|
|||||||
@@ -173,6 +173,29 @@ BlockLibraryController.prototype.getBlockLibrary = function() {
|
|||||||
return this.storage.getBlockXmlTextMap();
|
return this.storage.getBlockXmlTextMap();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return {Object[]} Array of JSON data, where each item is the data for one block type.
|
||||||
|
*/
|
||||||
|
BlockLibraryController.prototype.getBlockLibraryAsJson = function() {
|
||||||
|
const xmlBlocks = this.storage.getBlockXmlMap(this.storage.getBlockTypes());
|
||||||
|
const jsonBlocks = [];
|
||||||
|
const headlessWorkspace = new Blockly.Workspace();
|
||||||
|
|
||||||
|
for (const blockName in xmlBlocks) {
|
||||||
|
// Load the block XML into a workspace so we can save it as JSON
|
||||||
|
headlessWorkspace.clear();
|
||||||
|
const blockXml = xmlBlocks[blockName];
|
||||||
|
Blockly.Xml.domToWorkspace(blockXml, headlessWorkspace);
|
||||||
|
const block = headlessWorkspace.getBlocksByType('factory_base', false)[0];
|
||||||
|
|
||||||
|
if (!block) continue;
|
||||||
|
|
||||||
|
const json = Blockly.serialization.blocks.save(block, {addCoordinates: false, saveIds: false});
|
||||||
|
jsonBlocks.push(json);
|
||||||
|
}
|
||||||
|
return jsonBlocks;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return stored XML of a given block type.
|
* Return stored XML of a given block type.
|
||||||
* @param {string} blockType The type of block.
|
* @param {string} blockType The type of block.
|
||||||
|
|||||||
@@ -339,6 +339,9 @@
|
|||||||
<button id="localSaveButton" title="Save block library XML to a local file.">
|
<button id="localSaveButton" title="Save block library XML to a local file.">
|
||||||
<span>Download Block Library</span>
|
<span>Download Block Library</span>
|
||||||
</button>
|
</button>
|
||||||
|
<button id="exportAsJson" title="Export block library for import into the new Block Factory.">
|
||||||
|
<span>Export Block Library</span>
|
||||||
|
</button>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|||||||
Reference in New Issue
Block a user