mirror of
https://github.com/google/blockly.git
synced 2026-01-08 01:20:12 +01:00
* refactor(xml): Move textToDom to core/utils/xml.ts This function being in core/xml.ts was the cause for the last remaining circular import in core/ (between variables.ts and xml.ts). Moving it to utils/xml.ts makes sense anyway, since there is nothing Blockly-specific about this function. Fixes #6817. * fix(closure): Reenable goog.declareModuleId multiple-call check Reenable an assertion which check to make sure that goog.declareModuleId is not called more than once in a module (and which also catches circular imports amongst ES modules, which are not detected by closure-make-deps). * chore(tests,demos): Augo-migrate use of textToDom Testing the migration file entry by auto-migrating all uses of Blockly.Xml.textToDom to Blockly.utils.xml.textToDom. * chore(blocks): Manually migrate remaining use of textToDom Update the one remaining call to textToDom (in blocks/lists.ts) to the function's new location - also removing the last use of the Blockly.Xml / core/xml.ts) module from this file. * docs(xml): Remove unneeded @alias per comments on PR #6818 * fix(imports): Remove unused import
255 lines
6.2 KiB
JavaScript
255 lines
6.2 KiB
JavaScript
/**
|
|
* @license
|
|
* Copyright 2020 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
goog.declareModuleId('Blockly.test.helpers.toolboxDefinitions');
|
|
|
|
|
|
/**
|
|
* Get JSON for a toolbox that contains categories.
|
|
* @return {Blockly.utils.toolbox.ToolboxJson} The array holding information
|
|
* for a toolbox.
|
|
*/
|
|
export function getCategoryJSON() {
|
|
return {"contents": [
|
|
{
|
|
"kind": "CATEGORY",
|
|
"cssconfig": {
|
|
"container": "something",
|
|
},
|
|
"contents": [
|
|
{
|
|
"kind": "BLOCK",
|
|
"blockxml": '<block type="basic_block"><field name="TEXT">FirstCategory-FirstBlock</field></block>',
|
|
},
|
|
{
|
|
"kind": "BLOCK",
|
|
"blockxml": '<block type="basic_block"><field name="TEXT">FirstCategory-SecondBlock</field></block>',
|
|
},
|
|
],
|
|
"name": "First",
|
|
},
|
|
{
|
|
"kind": "CATEGORY",
|
|
"contents": [
|
|
{
|
|
"kind": "BLOCK",
|
|
"blockxml": '<block type="basic_block"><field name="TEXT">SecondCategory-FirstBlock</field></block>',
|
|
},
|
|
],
|
|
"name": "Second",
|
|
}]};
|
|
}
|
|
|
|
/**
|
|
* Get JSON for a simple toolbox.
|
|
* @return {Blockly.utils.toolbox.ToolboxJson} The array holding information
|
|
* for a simple toolbox.
|
|
*/
|
|
export function getSimpleJson() {
|
|
return {"contents": [
|
|
{
|
|
"kind": "BLOCK",
|
|
"blockxml":
|
|
`<block type="logic_compare">
|
|
<field name="OP">NEQ</field>
|
|
<value name="A">
|
|
<shadow type="math_number">
|
|
<field name="NUM">1</field>
|
|
</shadow>
|
|
</value>
|
|
<value name="B">
|
|
<block type="math_number">
|
|
<field name="NUM">2</field>
|
|
</block>
|
|
</value>
|
|
</block>`,
|
|
},
|
|
{
|
|
"kind": "SEP",
|
|
"gap": "20",
|
|
},
|
|
{
|
|
"kind": "BUTTON",
|
|
"text": "insert",
|
|
"callbackkey": "insertConnectionRows",
|
|
},
|
|
{
|
|
"kind": "LABEL",
|
|
"text": "tooltips",
|
|
},
|
|
]};
|
|
}
|
|
|
|
export function getProperSimpleJson() {
|
|
return {
|
|
"contents": [
|
|
{
|
|
"kind": "BLOCK",
|
|
"type": "logic_compare",
|
|
"fields": {
|
|
"OP": "NEQ",
|
|
},
|
|
"inputs": {
|
|
"A": {
|
|
"shadow": {
|
|
"type": "math_number",
|
|
"fields": {
|
|
"NUM": 1,
|
|
},
|
|
},
|
|
},
|
|
"B": {
|
|
"block": {
|
|
"type": "math_number",
|
|
"fields": {
|
|
"NUM": 2,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"kind": "SEP",
|
|
"gap": "20",
|
|
},
|
|
{
|
|
"kind": "BUTTON",
|
|
"text": "insert",
|
|
"callbackkey": "insertConnectionRows",
|
|
},
|
|
{
|
|
"kind": "LABEL",
|
|
"text": "tooltips",
|
|
},
|
|
]};
|
|
}
|
|
|
|
/**
|
|
* Get JSON for a toolbox that contains categories that contain categories.
|
|
* @return {Blockly.utils.toolbox.ToolboxJson} The array holding information
|
|
* for a toolbox.
|
|
*/
|
|
export function getDeeplyNestedJSON() {
|
|
return {"contents": [
|
|
{
|
|
"kind": "CATEGORY",
|
|
"cssconfig": {
|
|
"container": "something",
|
|
},
|
|
"contents": [{
|
|
"kind": "CATEGORY",
|
|
"contents": [{
|
|
"kind": "CATEGORY",
|
|
"contents": [
|
|
{
|
|
"kind": "BLOCK",
|
|
"blockxml": '<block type="basic_block"><field name="TEXT">NestedCategory-FirstBlock</field></block>',
|
|
},
|
|
{
|
|
"kind": "BLOCK",
|
|
"blockxml": '<block type="basic_block"><field name="TEXT">NestedCategory-SecondBlock</field></block>',
|
|
},
|
|
],
|
|
"name": "NestedCategoryInner",
|
|
}],
|
|
"name": "NestedCategoryMiddle",
|
|
}],
|
|
"name": "NestedCategoryOuter",
|
|
},
|
|
{
|
|
"kind": "CATEGORY",
|
|
"contents": [
|
|
{
|
|
"kind": "BLOCK",
|
|
"blockxml": '<block type="basic_block"><field name="TEXT">SecondCategory-FirstBlock</field></block>',
|
|
},
|
|
],
|
|
"name": "Second",
|
|
}]};
|
|
}
|
|
|
|
/**
|
|
* Get an array filled with xml elements.
|
|
* @return {Array<Node>} Array holding xml elements for a toolbox.
|
|
*/
|
|
export function getXmlArray() {
|
|
const block = Blockly.utils.xml.textToDom(
|
|
`<block type="logic_compare">
|
|
<field name="OP">NEQ</field>
|
|
<value name="A">
|
|
<shadow type="math_number">
|
|
<field name="NUM">1</field>
|
|
</shadow>
|
|
</value>
|
|
<value name="B">
|
|
<block type="math_number">
|
|
<field name="NUM">2</field>
|
|
</block>
|
|
</value>
|
|
</block>`);
|
|
const separator = Blockly.utils.xml.textToDom('<sep gap="20"></sep>');
|
|
const button = Blockly.utils.xml.textToDom('<button text="insert" callbackkey="insertConnectionRows"></button>');
|
|
const label = Blockly.utils.xml.textToDom('<label text="tooltips"></label>');
|
|
return [block, separator, button, label];
|
|
}
|
|
|
|
export function getInjectedToolbox() {
|
|
/**
|
|
* Category: First
|
|
* sep
|
|
* basic_block
|
|
* basic_block
|
|
* Category: second
|
|
* basic_block
|
|
* Category: Variables
|
|
* custom: VARIABLE
|
|
* Category: NestedCategory
|
|
* Category: NestedItemOne
|
|
*/
|
|
const toolboxXml = document.getElementById('toolbox-test');
|
|
const workspace = Blockly.inject('blocklyDiv',
|
|
{
|
|
toolbox: toolboxXml,
|
|
});
|
|
return workspace.getToolbox();
|
|
}
|
|
|
|
export function getBasicToolbox() {
|
|
const workspace = new Blockly.WorkspaceSvg(new Blockly.Options({}));
|
|
const toolbox = new Blockly.Toolbox(workspace);
|
|
toolbox.HtmlDiv = document.createElement('div');
|
|
toolbox.flyout_ = sinon.createStubInstance(Blockly.VerticalFlyout);
|
|
return toolbox;
|
|
}
|
|
|
|
export function getCollapsibleItem(toolbox) {
|
|
const contents = toolbox.contents_;
|
|
for (let i = 0; i < contents.length; i++) {
|
|
const item = contents[i];
|
|
if (item.isCollapsible()) {
|
|
return item;
|
|
}
|
|
}
|
|
}
|
|
|
|
export function getNonCollapsibleItem(toolbox) {
|
|
const contents = toolbox.contents_;
|
|
for (let i = 0; i < contents.length; i++) {
|
|
const item = contents[i];
|
|
if (!item.isCollapsible()) {
|
|
return item;
|
|
}
|
|
}
|
|
}
|
|
|
|
export function getChildItem(toolbox) {
|
|
return toolbox.getToolboxItemById('nestedCategory');
|
|
}
|
|
|
|
export function getSeparator(toolbox) {
|
|
return toolbox.getToolboxItemById('separator');
|
|
}
|