mirror of
https://github.com/google/blockly.git
synced 2026-01-08 01:20:12 +01:00
Move test blocks to dev-tools, refactor advanced playground (#4057)
* Remove remaining advanced playground actions, and remove test blocks
This commit is contained in:
@@ -102,7 +102,7 @@ Blockly.utils.toolbox.convertToolboxToJSON = function(toolboxDef) {
|
||||
if (Blockly.utils.toolbox.hasCategories(toolboxDef)) {
|
||||
// TODO: Remove after #3985 has been looked into.
|
||||
console.warn('Due to some performance issues, defining a toolbox using' +
|
||||
'JSON is not ready yet. Please define your toolbox using xml.');
|
||||
' JSON is not ready yet. Please define your toolbox using xml.');
|
||||
}
|
||||
return /** @type {!Array.<Blockly.utils.toolbox.Toolbox>} */ (toolboxDef);
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -64,23 +64,11 @@
|
||||
<script src="../blocks/variables.js"></script>
|
||||
<script src="../blocks/variables_dynamic.js"></script>
|
||||
<script src="../blocks/procedures.js"></script>
|
||||
<script src="blocks/test_blocks.js"></script>
|
||||
<script src="themes/test_themes.js"></script>
|
||||
<script src="./playgrounds/screenshot.js"></script>
|
||||
<script src="./playgrounds/test_blocks_toolbox.js"></script>
|
||||
|
||||
<script>
|
||||
// Custom requires for the playground.
|
||||
|
||||
// Rendering.
|
||||
goog.require('Blockly.blockRendering.Debug');
|
||||
goog.require('Blockly.minimalist.Renderer');
|
||||
goog.require('Blockly.Themes.Modern');
|
||||
goog.require('Blockly.Themes.Zelos');
|
||||
goog.require('Blockly.thrasos.Renderer');
|
||||
goog.require('Blockly.zelos.Renderer');
|
||||
|
||||
// Other.
|
||||
goog.require('Blockly.WorkspaceCommentSvg');
|
||||
goog.require('Blockly.WorkspaceCommentSvg.render');
|
||||
</script>
|
||||
@@ -139,7 +127,6 @@ function start() {
|
||||
}
|
||||
});
|
||||
workspace.configureContextMenu = configureContextMenu;
|
||||
addToolboxButtonCallbacks();
|
||||
// Restore previously displayed text.
|
||||
if (sessionStorage) {
|
||||
var text = sessionStorage.getItem('textarea');
|
||||
@@ -161,116 +148,6 @@ function start() {
|
||||
}
|
||||
}
|
||||
|
||||
function addToolboxButtonCallbacks() {
|
||||
var addAllBlocksToWorkspace = function(button) {
|
||||
var workspace = button.getTargetWorkspace();
|
||||
var blocks = button.workspace_.getTopBlocks();
|
||||
for(var i = 0, block; block = blocks[i]; i++) {
|
||||
var xml = Blockly.utils.xml.createElement('xml');
|
||||
xml.appendChild(Blockly.Xml.blockToDom(block));
|
||||
Blockly.Xml.appendDomToWorkspace(xml, workspace);
|
||||
}
|
||||
};
|
||||
var randomizeLabelText = function(button) {
|
||||
var blocks = button.targetWorkspace_
|
||||
.getBlocksByType('test_fields_label_serializable');
|
||||
var possible = 'AB';
|
||||
for (var i = 0, block; block = blocks[i]; i++) {
|
||||
var text = '';
|
||||
for (var j = 0; j < 4; j++) {
|
||||
text += possible.charAt(Math.floor(Math.random() * possible.length));
|
||||
}
|
||||
block.setFieldValue(text, 'LABEL');
|
||||
}
|
||||
};
|
||||
var setRandomStyle = function(button) {
|
||||
var blocks = button.workspace_.getAllBlocks(false);
|
||||
var styles =
|
||||
Object.keys(workspace.getRenderer().getConstants().blockStyles);
|
||||
styles.splice(styles.indexOf(blocks[0].getStyleName()), 1);
|
||||
var style = styles[Math.floor(Math.random() * styles.length)];
|
||||
for(var i = 0, block; block = blocks[i]; i++) {
|
||||
block.setStyle(style);
|
||||
}
|
||||
};
|
||||
var toggleEnabled = function(button) {
|
||||
var blocks = button.workspace_.getAllBlocks(false);
|
||||
for(var i = 0, block; block = blocks[i]; i++) {
|
||||
block.setEnabled(!block.isEnabled());
|
||||
}
|
||||
};
|
||||
var toggleShadow = function(button) {
|
||||
var blocks = button.workspace_.getAllBlocks(false);
|
||||
for(var i = 0, block; block = blocks[i]; i++) {
|
||||
block.setShadow(!block.isShadow());
|
||||
}
|
||||
};
|
||||
var toggleCollapsed = function(button) {
|
||||
var blocks = button.workspace_.getAllBlocks(false);
|
||||
for(var i = 0, block; block = blocks[i]; i++) {
|
||||
block.setCollapsed(!block.isCollapsed());
|
||||
}
|
||||
};
|
||||
var setInput = function(button) {
|
||||
Blockly.prompt('Input text to set.', 'ab', function(input) {
|
||||
var blocks = button.getTargetWorkspace().getAllBlocks(false);
|
||||
for(var i = 0, block; block = blocks[i]; i++) {
|
||||
if (block.getField('INPUT')) {
|
||||
block.setFieldValue(input, 'INPUT');
|
||||
}
|
||||
}
|
||||
})
|
||||
};
|
||||
var changeImage = function(button) {
|
||||
var blocks = button.workspace_.getBlocksByType('test_fields_image');
|
||||
var possible = 'abcdefghijklm';
|
||||
var image = possible.charAt(Math.floor(Math.random() * possible.length));
|
||||
var src = 'https://blockly-demo.appspot.com/static/tests/media/'
|
||||
+ image + '.png';
|
||||
for (var i = 0, block; block = blocks[i]; i++) {
|
||||
var imageField = block.getField('IMAGE');
|
||||
imageField.setValue(src);
|
||||
}
|
||||
};
|
||||
var addVariables = function(button) {
|
||||
workspace.createVariable('1b', '', '1B');
|
||||
workspace.createVariable('1c', '', '1C');
|
||||
workspace.createVariable('2a', '', '2A');
|
||||
workspace.createVariable('2b', '', '2B');
|
||||
workspace.createVariable('2c', '', '2C');
|
||||
};
|
||||
|
||||
workspace.registerButtonCallback(
|
||||
'addVariables', addVariables);
|
||||
workspace.registerButtonCallback(
|
||||
'changeImage', changeImage);
|
||||
workspace.registerButtonCallback(
|
||||
'addAllBlocksToWorkspace', addAllBlocksToWorkspace);
|
||||
workspace.registerButtonCallback(
|
||||
'setInput', setInput);
|
||||
workspace.registerButtonCallback(
|
||||
'setRandomStyle', setRandomStyle);
|
||||
workspace.registerButtonCallback(
|
||||
'toggleEnabled', toggleEnabled);
|
||||
workspace.registerButtonCallback(
|
||||
'toggleShadow', toggleShadow);
|
||||
workspace.registerButtonCallback(
|
||||
'toggleCollapsed', toggleCollapsed);
|
||||
workspace.registerButtonCallback(
|
||||
'randomizeLabelText', randomizeLabelText);
|
||||
workspace.registerButtonCallback(
|
||||
'addDynamicOption', Blockly.TestBlocks.addDynamicDropdownOption);
|
||||
workspace.registerButtonCallback(
|
||||
'removeDynamicOption', Blockly.TestBlocks.removeDynamicDropdownOption);
|
||||
workspace.registerButtonCallback(
|
||||
'insertConnectionRows', Blockly.TestBlocks.insertConnectionRows);
|
||||
workspace.registerButtonCallback(
|
||||
'insertConnectionStacks', Blockly.TestBlocks.insertConnectionStacks);
|
||||
workspace.registerButtonCallback(
|
||||
'insertConnectionStatements',
|
||||
Blockly.TestBlocks.insertConnectionStatements);
|
||||
}
|
||||
|
||||
function setBackgroundColour() {
|
||||
// Set background colour to differentiate server vs local copy.
|
||||
if (location.protocol == 'file:') {
|
||||
@@ -287,14 +164,9 @@ function getToolboxSuffix() {
|
||||
}
|
||||
|
||||
function getToolboxElement() {
|
||||
// The four possible values are: "simple", "categories",
|
||||
// "categories-typed-variables", and "test-blocks".
|
||||
var toolboxSuffix = getToolboxSuffix();
|
||||
// test-blocks are defined in JSON
|
||||
if (toolboxSuffix == 'test-blocks') {
|
||||
return testBlocksToolbox;
|
||||
}
|
||||
return document.getElementById('toolbox-' + toolboxSuffix);
|
||||
// The three possible values are: "simple", "categories",
|
||||
// "categories-typed-variables".
|
||||
return document.getElementById('toolbox-' + getToolboxSuffix());
|
||||
}
|
||||
|
||||
function setToolboxDropdown() {
|
||||
@@ -302,7 +174,6 @@ function setToolboxDropdown() {
|
||||
'toolbox-categories',
|
||||
'toolbox-categories-typed-variables',
|
||||
'toolbox-simple',
|
||||
'toolbox-test-blocks'
|
||||
];
|
||||
var toolboxSuffix = getToolboxSuffix();
|
||||
document.forms.options.elements.toolbox.selectedIndex =
|
||||
@@ -524,7 +395,6 @@ var spaghettiXml = [
|
||||
<option value="categories">Categories (untyped variables)</option>
|
||||
<option value="categories-typed-variables">Categories (typed variables)</option>
|
||||
<option value="simple">Simple</option>
|
||||
<option value="test-blocks">Test Blocks</option>
|
||||
</select>
|
||||
</form>
|
||||
<p>
|
||||
|
||||
@@ -64,7 +64,6 @@
|
||||
<script src="../../blocks/variables.js"></script>
|
||||
<script src="../../blocks/variables_dynamic.js"></script>
|
||||
<script src="../../blocks/procedures.js"></script>
|
||||
<script src="../blocks/test_blocks.js"></script>
|
||||
<script src="../themes/test_themes.js"></script>
|
||||
<script src="./screenshot.js"></script>
|
||||
<script src="./test_blocks_toolbox.js"></script>
|
||||
@@ -92,26 +91,10 @@ function start() {
|
||||
function createWorkspace(blocklyDiv, options) {
|
||||
var workspace = Blockly.inject(blocklyDiv, options);
|
||||
workspace.configureContextMenu = configureContextMenu.bind(workspace);
|
||||
addToolboxButtonCallbacks(workspace);
|
||||
return workspace;
|
||||
}
|
||||
|
||||
function configurePlayground(playground) {
|
||||
// Add custom actions.
|
||||
playground.addAction('Random Blocks!', function(ws) {
|
||||
populateRandom(ws, 100);
|
||||
}, 'Stress Test');
|
||||
playground.addAction('Spaghetti!', function(ws) {
|
||||
spaghetti(ws, 8);
|
||||
}, 'Stress Test');
|
||||
playground.addCheckboxAction('Log Events', function(ws, value) {
|
||||
if (value) {
|
||||
ws.addChangeListener(logger);
|
||||
} else {
|
||||
ws.removeChangeListener(logger);
|
||||
}
|
||||
}, 'Logging');
|
||||
|
||||
// Rendering options.
|
||||
var gui = playground.getGUI();
|
||||
var renderingFolder = gui.addFolder('Rendering');
|
||||
@@ -185,116 +168,6 @@ function initPlayground() {
|
||||
});
|
||||
}
|
||||
|
||||
function addToolboxButtonCallbacks(workspace) {
|
||||
var addAllBlocksToWorkspace = function(button) {
|
||||
var workspace = button.getTargetWorkspace();
|
||||
var blocks = button.workspace_.getTopBlocks();
|
||||
for(var i = 0, block; block = blocks[i]; i++) {
|
||||
var xml = Blockly.utils.xml.createElement('xml');
|
||||
xml.appendChild(Blockly.Xml.blockToDom(block));
|
||||
Blockly.Xml.appendDomToWorkspace(xml, workspace);
|
||||
}
|
||||
};
|
||||
var randomizeLabelText = function(button) {
|
||||
var blocks = button.targetWorkspace_
|
||||
.getBlocksByType('test_fields_label_serializable');
|
||||
var possible = 'AB';
|
||||
for (var i = 0, block; block = blocks[i]; i++) {
|
||||
var text = '';
|
||||
for (var j = 0; j < 4; j++) {
|
||||
text += possible.charAt(Math.floor(Math.random() * possible.length));
|
||||
}
|
||||
block.setFieldValue(text, 'LABEL');
|
||||
}
|
||||
};
|
||||
var setRandomStyle = function(button) {
|
||||
var blocks = button.workspace_.getAllBlocks(false);
|
||||
var styles =
|
||||
Object.keys(workspace.getRenderer().getConstants().blockStyles);
|
||||
styles.splice(styles.indexOf(blocks[0].getStyleName()), 1);
|
||||
var style = styles[Math.floor(Math.random() * styles.length)];
|
||||
for(var i = 0, block; block = blocks[i]; i++) {
|
||||
block.setStyle(style);
|
||||
}
|
||||
};
|
||||
var toggleEnabled = function(button) {
|
||||
var blocks = button.workspace_.getAllBlocks(false);
|
||||
for(var i = 0, block; block = blocks[i]; i++) {
|
||||
block.setEnabled(!block.isEnabled());
|
||||
}
|
||||
};
|
||||
var toggleShadow = function(button) {
|
||||
var blocks = button.workspace_.getAllBlocks(false);
|
||||
for(var i = 0, block; block = blocks[i]; i++) {
|
||||
block.setShadow(!block.isShadow());
|
||||
}
|
||||
};
|
||||
var toggleCollapsed = function(button) {
|
||||
var blocks = button.workspace_.getAllBlocks(false);
|
||||
for(var i = 0, block; block = blocks[i]; i++) {
|
||||
block.setCollapsed(!block.isCollapsed());
|
||||
}
|
||||
};
|
||||
var setInput = function(button) {
|
||||
Blockly.prompt('Input text to set.', 'ab', function(input) {
|
||||
var blocks = button.getTargetWorkspace().getAllBlocks(false);
|
||||
for(var i = 0, block; block = blocks[i]; i++) {
|
||||
if (block.getField('INPUT')) {
|
||||
block.setFieldValue(input, 'INPUT');
|
||||
}
|
||||
}
|
||||
})
|
||||
};
|
||||
var changeImage = function(button) {
|
||||
var blocks = button.workspace_.getBlocksByType('test_fields_image');
|
||||
var possible = 'abcdefghijklm';
|
||||
var image = possible.charAt(Math.floor(Math.random() * possible.length));
|
||||
var src = 'https://blockly-demo.appspot.com/static/tests/media/'
|
||||
+ image + '.png';
|
||||
for (var i = 0, block; block = blocks[i]; i++) {
|
||||
var imageField = block.getField('IMAGE');
|
||||
imageField.setValue(src);
|
||||
}
|
||||
};
|
||||
var addVariables = function(button) {
|
||||
workspace.createVariable('1b', '', '1B');
|
||||
workspace.createVariable('1c', '', '1C');
|
||||
workspace.createVariable('2a', '', '2A');
|
||||
workspace.createVariable('2b', '', '2B');
|
||||
workspace.createVariable('2c', '', '2C');
|
||||
};
|
||||
|
||||
workspace.registerButtonCallback(
|
||||
'addVariables', addVariables);
|
||||
workspace.registerButtonCallback(
|
||||
'changeImage', changeImage);
|
||||
workspace.registerButtonCallback(
|
||||
'addAllBlocksToWorkspace', addAllBlocksToWorkspace);
|
||||
workspace.registerButtonCallback(
|
||||
'setInput', setInput);
|
||||
workspace.registerButtonCallback(
|
||||
'setRandomStyle', setRandomStyle);
|
||||
workspace.registerButtonCallback(
|
||||
'toggleEnabled', toggleEnabled);
|
||||
workspace.registerButtonCallback(
|
||||
'toggleShadow', toggleShadow);
|
||||
workspace.registerButtonCallback(
|
||||
'toggleCollapsed', toggleCollapsed);
|
||||
workspace.registerButtonCallback(
|
||||
'randomizeLabelText', randomizeLabelText);
|
||||
workspace.registerButtonCallback(
|
||||
'addDynamicOption', Blockly.TestBlocks.addDynamicDropdownOption);
|
||||
workspace.registerButtonCallback(
|
||||
'removeDynamicOption', Blockly.TestBlocks.removeDynamicDropdownOption);
|
||||
workspace.registerButtonCallback(
|
||||
'insertConnectionRows', Blockly.TestBlocks.insertConnectionRows);
|
||||
workspace.registerButtonCallback(
|
||||
'insertConnectionStacks', Blockly.TestBlocks.insertConnectionStacks);
|
||||
workspace.registerButtonCallback(
|
||||
'insertConnectionStatements',
|
||||
Blockly.TestBlocks.insertConnectionStatements);
|
||||
}
|
||||
|
||||
function setBackgroundColour() {
|
||||
// Set background colour to differentiate server vs local copy.
|
||||
if (location.protocol == 'file:') {
|
||||
@@ -319,70 +192,6 @@ function configureContextMenu(menuOptions, e) {
|
||||
menuOptions.push(Blockly.ContextMenu.workspaceCommentOption(workspace, e));
|
||||
}
|
||||
|
||||
function logger(e) {
|
||||
console.log(e);
|
||||
}
|
||||
|
||||
function populateRandom(ws, n) {
|
||||
var names = [];
|
||||
for (var blockName in Blockly.Blocks) {
|
||||
names.push(blockName);
|
||||
}
|
||||
|
||||
for (var i = 0; i < n; i++) {
|
||||
var name = names[Math.floor(Math.random() * names.length)];
|
||||
var block = ws.newBlock(name);
|
||||
block.initSvg();
|
||||
block.getSvgRoot().setAttribute('transform', 'translate(' +
|
||||
Math.round(Math.random() * 450 + 40) + ', ' +
|
||||
Math.round(Math.random() * 600 + 40) + ')');
|
||||
block.render();
|
||||
}
|
||||
}
|
||||
|
||||
function spaghetti(ws, n) {
|
||||
var xml = spaghettiXml;
|
||||
for(var i = 0; i < n; i++) {
|
||||
xml = xml.replace(/(<(statement|next)( name="DO0")?>)<\//g,
|
||||
'$1' + spaghettiXml + '</');
|
||||
}
|
||||
xml = '<xml xmlns="https://developers.google.com/blockly/xml">' + xml + '</xml>';
|
||||
var dom = Blockly.Xml.textToDom(xml);
|
||||
console.time('Spaghetti domToWorkspace');
|
||||
Blockly.Xml.domToWorkspace(dom, ws);
|
||||
console.timeEnd('Spaghetti domToWorkspace');
|
||||
}
|
||||
var spaghettiXml = [
|
||||
' <block type="controls_if">',
|
||||
' <value name="IF0">',
|
||||
' <block type="logic_compare">',
|
||||
' <field name="OP">EQ</field>',
|
||||
' <value name="A">',
|
||||
' <block type="math_arithmetic">',
|
||||
' <field name="OP">MULTIPLY</field>',
|
||||
' <value name="A">',
|
||||
' <block type="math_number">',
|
||||
' <field name="NUM">6</field>',
|
||||
' </block>',
|
||||
' </value>',
|
||||
' <value name="B">',
|
||||
' <block type="math_number">',
|
||||
' <field name="NUM">7</field>',
|
||||
' </block>',
|
||||
' </value>',
|
||||
' </block>',
|
||||
' </value>',
|
||||
' <value name="B">',
|
||||
' <block type="math_number">',
|
||||
' <field name="NUM">42</field>',
|
||||
' </block>',
|
||||
' </value>',
|
||||
' </block>',
|
||||
' </value>',
|
||||
' <statement name="DO0"></statement>',
|
||||
' <next></next>',
|
||||
' </block>'].join('\n');
|
||||
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
Reference in New Issue
Block a user