From 941bdcd18786588057e28ae3f0f015eabe4077c1 Mon Sep 17 00:00:00 2001 From: Neil Fraser Date: Tue, 11 Oct 2016 16:50:13 -0700 Subject: [PATCH 1/3] Remove a bunch of Closure from Block Factory. --- demos/blockfactory/app_controller.js | 9 ++++----- demos/blockfactory/block_exporter_tools.js | 11 +++++++---- demos/blockfactory/block_exporter_view.js | 8 ++++---- demos/blockfactory/block_library_view.js | 16 +++++++--------- demos/blockfactory/block_option.js | 12 ++++++------ demos/blockfactory/factory_utils.js | 4 ++-- .../workspacefactory/wfactory_controller.js | 4 ++-- .../workspacefactory/wfactory_view.js | 6 +++--- 8 files changed, 35 insertions(+), 35 deletions(-) diff --git a/demos/blockfactory/app_controller.js b/demos/blockfactory/app_controller.js index 225078b81..c82d525c7 100644 --- a/demos/blockfactory/app_controller.js +++ b/demos/blockfactory/app_controller.js @@ -32,7 +32,6 @@ goog.require('FactoryUtils'); goog.require('BlockLibraryController'); goog.require('BlockExporterController'); goog.require('goog.dom.classlist'); -goog.require('goog.string'); goog.require('goog.ui.PopupColorPicker'); goog.require('goog.ui.ColorPicker'); @@ -59,11 +58,11 @@ AppController = function() { // Map of tab type to the div element for the tab. this.tabMap = Object.create(null); this.tabMap[AppController.BLOCK_FACTORY] = - goog.dom.getElement('blockFactory_tab'); + document.getElementById('blockFactory_tab'); this.tabMap[AppController.WORKSPACE_FACTORY] = - goog.dom.getElement('workspaceFactory_tab'); + document.getElementById('workspaceFactory_tab'); this.tabMap[AppController.EXPORTER] = - goog.dom.getElement('blocklibraryExporter_tab'); + document.getElementById('blocklibraryExporter_tab'); // Last selected tab. this.lastSelectedTab = null; @@ -535,7 +534,7 @@ AppController.prototype.assignBlockFactoryClickHandlers = function() { self.blockLibraryController.setNoneSelected(); // Close the Block Library Dropdown. - goog.dom.getElement('dropdownDiv_blockLib').classList.remove("show"); + document.getElementById('dropdownDiv_blockLib').classList.remove('show'); }); }; diff --git a/demos/blockfactory/block_exporter_tools.js b/demos/blockfactory/block_exporter_tools.js index 88e17a2e2..596ad8764 100644 --- a/demos/blockfactory/block_exporter_tools.js +++ b/demos/blockfactory/block_exporter_tools.js @@ -47,7 +47,7 @@ BlockExporterTools = function() { }, ''); // Empty quotes for empty div. // Hide hidden workspace. this.container.style.display = 'none'; - goog.dom.appendChild(document.body, this.container); + document.body.appendChild(this.container); /** * Hidden workspace for the Block Exporter that holds pieces that make * up the block @@ -251,9 +251,12 @@ BlockExporterTools.prototype.createBlockSelectorFromLib = // them in the exporter workspace. this.addBlockDefinitions(blockXmlMap); - var blockSelector = goog.dom.getElement(blockSelectorID); + var blockSelector = document.getElementById(blockSelectorID); // Clear the block selector. - goog.dom.removeChildren(blockSelector); + var child; + while ((child = blockSelector.firstChild)) { + blockSelector.removeChild(child); + } // Append each block option's dom to the selector. var blockOptions = Object.create(null); @@ -266,7 +269,7 @@ BlockExporterTools.prototype.createBlockSelectorFromLib = // option to block selector. var blockOpt = new BlockOption(blockSelector, blockType, previewBlockXml); blockOpt.createDom(); - goog.dom.appendChild(blockSelector, blockOpt.dom); + blockSelector.appendChild(blockOpt.dom); blockOpt.showPreviewBlock(); blockOptions[blockType] = blockOpt; } diff --git a/demos/blockfactory/block_exporter_view.js b/demos/blockfactory/block_exporter_view.js index fbeddaf47..011fc2bf5 100644 --- a/demos/blockfactory/block_exporter_view.js +++ b/demos/blockfactory/block_exporter_view.js @@ -61,10 +61,10 @@ BlockExporterView.prototype.setBlockOptions = function(blockOptions) { */ BlockExporterView.prototype.updateHelperText = function(newText, opt_append) { if (opt_append) { - goog.dom.getElement('helperText').textContent = - goog.dom.getElement('helperText').textContent + newText; + document.getElementById('helperText').textContent = + document.getElementById('helperText').textContent + newText; } else { - goog.dom.getElement('helperText').textContent = newText; + document.getElementById('helperText').textContent = newText; } }; @@ -74,7 +74,7 @@ BlockExporterView.prototype.updateHelperText = function(newText, opt_append) { BlockExporterView.prototype.listSelectedBlocks = function() { var selectedBlocksText = this.getSelectedBlockTypes().join(",\n "); - goog.dom.getElement('selectedBlocksText').textContent = selectedBlocksText; + document.getElementById('selectedBlocksText').textContent = selectedBlocksText; }; /** diff --git a/demos/blockfactory/block_library_view.js b/demos/blockfactory/block_library_view.js index 444c91c6d..6179841cd 100644 --- a/demos/blockfactory/block_library_view.js +++ b/demos/blockfactory/block_library_view.js @@ -41,13 +41,13 @@ var BlockLibraryView = function() { // Div element to contain the block types to choose from. // Id of the div that holds the block library view. this.blockLibraryViewDivID = 'dropdownDiv_blockLib'; - this.dropdown = goog.dom.getElement('dropdownDiv_blockLib'); + this.dropdown = document.getElementById('dropdownDiv_blockLib'); // Map of block type to corresponding 'a' element that is the option in the // dropdown. Used to quickly and easily get a specific option. this.optionMap = Object.create(null); // Save and delete buttons. - this.saveButton = goog.dom.getElement('saveToBlockLibraryButton'); - this.deleteButton = goog.dom.getElement('removeBlockFromLibraryButton'); + this.saveButton = document.getElementById('saveToBlockLibraryButton'); + this.deleteButton = document.getElementById('removeBlockFromLibraryButton'); // Initially, user should not be able to delete a block. They must save a // block or select a stored block first. this.deleteButton.disabled = true; @@ -202,17 +202,15 @@ BlockLibraryView.prototype.getSelectedBlockType = function() { * @return {!Element} HTML 'a' element that is the option for a block type. */ BlockLibraryView.prototype.getSelectedOption = function() { - return goog.dom.getElementByClass('dropdown-content-selected', this.dropdown); + return this.dropdown.getElementsByClassName('dropdown-content-selected')[0]; }; /** * Removes all options from dropdown. */ BlockLibraryView.prototype.clearOptions = function() { - var blockOpts = goog.dom.getElementsByClass('blockLibOpt', this.dropdown); - if (blockOpts) { - for (var i = 0, option; option = blockOpts[i]; i++) { - goog.dom.removeNode(option); - } + var blockOpts = this.dropdown.getElementsByClassName('blockLibOpt'); + for (var i = 0, option; option = blockOpts[i]; i++) { + option.parentNode.removeChild(option); } }; diff --git a/demos/blockfactory/block_option.js b/demos/blockfactory/block_option.js index 90efe405f..9e03b601a 100644 --- a/demos/blockfactory/block_option.js +++ b/demos/blockfactory/block_option.js @@ -81,38 +81,38 @@ BlockOption.prototype.createDom = function() { 'id' : this.blockType + '_workspace', 'class': 'blockOption_preview' }, ''); - goog.dom.appendChild(blockOptContainer,blockOptionPreview); + blockOptContainer.appendChild(blockOptionPreview); // Create and append container to hold checkbox and label. var checkLabelContainer = goog.dom.createDom('div', { 'class': 'blockOption_checkLabel' }, ''); - goog.dom.appendChild(blockOptContainer,checkLabelContainer); + blockOptContainer.appendChild(checkLabelContainer); // Create and append container for checkbox. var checkContainer = goog.dom.createDom('div', { 'class': 'blockOption_check' }, ''); - goog.dom.appendChild(checkLabelContainer, checkContainer); + checkLabelContainer.appendChild(checkContainer); // Create and append checkbox. this.checkbox = goog.dom.createDom('input', { 'type': 'checkbox', 'id': this.blockType + '_check' }, ''); - goog.dom.appendChild(checkContainer, this.checkbox); + checkContainer.appendChild(this.checkbox); // Create and append container for block label. var labelContainer = goog.dom.createDom('div', { 'class': 'blockOption_label' }, ''); - goog.dom.appendChild(checkLabelContainer, labelContainer); + checkLabelContainer.appendChild(labelContainer); // Create and append text node for the label. var labelText = goog.dom.createDom('p', { 'id': this.blockType + '_text' }, this.blockType); - goog.dom.appendChild(labelContainer, labelText); + labelContainer.appendChild(labelText); this.dom = blockOptContainer; return this.dom; diff --git a/demos/blockfactory/factory_utils.js b/demos/blockfactory/factory_utils.js index f961c0bdf..523e8d5e4 100644 --- a/demos/blockfactory/factory_utils.js +++ b/demos/blockfactory/factory_utils.js @@ -884,8 +884,8 @@ FactoryUtils.injectCode = function(code, id) { */ FactoryUtils.sameBlockXml = function(blockXml1, blockXml2) { // Each XML element should contain a single child element with a 'block' tag - if (goog.string.caseInsensitiveCompare(blockXml1.tagName, 'xml') || - goog.string.caseInsensitiveCompare(blockXml2.tagName, 'xml')) { + if (blockXml1.tagName.toLowerCase() == 'xml' || + blockXml2.tagName.toLowerCase() == 'xml') { throw new Error('Expected two XML elements, recieved elements with tag ' + 'names: ' + blockXml1.tagName + ' and ' + blockXml2.tagName + '.'); } diff --git a/demos/blockfactory/workspacefactory/wfactory_controller.js b/demos/blockfactory/workspacefactory/wfactory_controller.js index c4da7257e..344da0e14 100644 --- a/demos/blockfactory/workspacefactory/wfactory_controller.js +++ b/demos/blockfactory/workspacefactory/wfactory_controller.js @@ -277,7 +277,7 @@ WorkspaceFactoryController.prototype.switchElement = function(id) { /** * Switches to a new tab for the element by ID. Helper for switchElement. * Updates selected, clears the workspace and clears undo, loads a new element. - * @param {string} id ID of category to load + * @param {string} id ID of category to load. */ WorkspaceFactoryController.prototype.clearAndLoadElement = function(id) { // Unselect current tab if switching to and from an element. @@ -1242,7 +1242,7 @@ WorkspaceFactoryController.prototype.setBlockLibCategory = function(categoryXml, libBlockTypes) { var blockLibCategory = document.getElementById('blockLibCategory'); - // Set category id so that it can be easily replaced, and set a standard, + // Set category ID so that it can be easily replaced, and set a standard, // arbitrary block library color. categoryXml.setAttribute('id', 'blockLibCategory'); categoryXml.setAttribute('colour', 260); diff --git a/demos/blockfactory/workspacefactory/wfactory_view.js b/demos/blockfactory/workspacefactory/wfactory_view.js index 245c7e5cb..cd652b951 100644 --- a/demos/blockfactory/workspacefactory/wfactory_view.js +++ b/demos/blockfactory/workspacefactory/wfactory_view.js @@ -121,7 +121,7 @@ WorkspaceFactoryView.prototype.updateState = function(selectedIndex, selected) { }; /** - * Determines the DOM id for a category given its name. + * Determines the DOM ID for a category given its name. * @param {string} name Name of category * @return {string} ID of category tab */ @@ -146,8 +146,8 @@ WorkspaceFactoryView.prototype.setCategoryTabSelection = /** * Used to bind a click to a certain DOM element (used for category tabs). * Taken directly from code.js - * @param {string|!Element} e1 tab element or corresponding id string - * @param {!Function} func Function to be executed on click + * @param {string|!Element} e1 Tab element or corresponding ID string. + * @param {!Function} func Function to be executed on click. */ WorkspaceFactoryView.prototype.bindClick = function(el, func) { if (typeof el == 'string') { From 88dba494b93860235ae69bf955d16c5d00606848 Mon Sep 17 00:00:00 2001 From: picklesrus Date: Wed, 12 Oct 2016 11:06:09 -0700 Subject: [PATCH 2/3] Commit 941bdcd18786588057e28ae3f0f015eabe4077c1 swapped caseInsensitiveCompare with toLowerCase but forgot to swap the check so it reversed the (#693) error case. Fixing. --- demos/blockfactory/factory_utils.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/demos/blockfactory/factory_utils.js b/demos/blockfactory/factory_utils.js index 523e8d5e4..17c2c4817 100644 --- a/demos/blockfactory/factory_utils.js +++ b/demos/blockfactory/factory_utils.js @@ -884,8 +884,8 @@ FactoryUtils.injectCode = function(code, id) { */ FactoryUtils.sameBlockXml = function(blockXml1, blockXml2) { // Each XML element should contain a single child element with a 'block' tag - if (blockXml1.tagName.toLowerCase() == 'xml' || - blockXml2.tagName.toLowerCase() == 'xml') { + if (!blockXml1.tagName.toLowerCase() == 'xml' || + !blockXml2.tagName.toLowerCase() == 'xml') { throw new Error('Expected two XML elements, recieved elements with tag ' + 'names: ' + blockXml1.tagName + ' and ' + blockXml2.tagName + '.'); } From 7c2016284afae415cf4b8fe55c517c1005560f87 Mon Sep 17 00:00:00 2001 From: picklesrus Date: Wed, 12 Oct 2016 11:21:59 -0700 Subject: [PATCH 3/3] Change label of block factory to blockly developer tools. Change the icon too. Also remove old, unneeded index.html file from workspacefactory directory. (#694) --- demos/blockfactory/devtools.png | Bin 0 -> 13114 bytes demos/blockfactory/index.html | 2 +- .../blockfactory/workspacefactory/index.html | 769 ------------------ demos/index.html | 6 +- 4 files changed, 4 insertions(+), 773 deletions(-) create mode 100644 demos/blockfactory/devtools.png delete mode 100644 demos/blockfactory/workspacefactory/index.html diff --git a/demos/blockfactory/devtools.png b/demos/blockfactory/devtools.png new file mode 100644 index 0000000000000000000000000000000000000000..b38a8894b368b579c25b5c7daf6a8c9ab65eb52c GIT binary patch literal 13114 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 literal 0 HcmV?d00001 diff --git a/demos/blockfactory/index.html b/demos/blockfactory/index.html index 72ddce573..0ac9176da 100644 --- a/demos/blockfactory/index.html +++ b/demos/blockfactory/index.html @@ -43,7 +43,7 @@

Blockly > - Demos > Blockly Factory + Demos > Blockly Developer Tools diff --git a/demos/blockfactory/workspacefactory/index.html b/demos/blockfactory/workspacefactory/index.html deleted file mode 100644 index 92b4668e0..000000000 --- a/demos/blockfactory/workspacefactory/index.html +++ /dev/null @@ -1,769 +0,0 @@ - - -Blockly Workspace Factory - - - - - - - - - - - - - - - - - - - - - -
-

Blockly‏ > - Demos‏ > - Workspace Factory -

-
-

-

- - - - - -

-
- -
-

Drag blocks into your toolbox:

- - - -
ToolboxWorkspace
-
-
-
-
- - - - - - - -
- - - - - - diff --git a/demos/index.html b/demos/index.html index bd745ce88..7501bfa1f 100644 --- a/demos/index.html +++ b/demos/index.html @@ -199,12 +199,12 @@ - + - -
Build custom blocks using Blockly.
+ +
Build custom blocks and setup a toolbox using Blockly.