diff --git a/demos/blocklyfactory/workspacefactory/wfactory_controller.js b/demos/blocklyfactory/workspacefactory/wfactory_controller.js
index da5749921..0db36c7d8 100644
--- a/demos/blocklyfactory/workspacefactory/wfactory_controller.js
+++ b/demos/blocklyfactory/workspacefactory/wfactory_controller.js
@@ -82,6 +82,8 @@ WorkspaceFactoryController = function(toolboxName, toolboxDiv, previewDiv) {
this.generator = new WorkspaceFactoryGenerator(this.model);
// Tracks which editing mode the user is in. Toolbox mode on start.
this.selectedMode = WorkspaceFactoryController.MODE_TOOLBOX;
+ // True if key events are enabled, false otherwise.
+ this.keyEventsEnabled = true;
};
// Toolbox editing mode. Changes the user makes to the workspace updates the
@@ -399,24 +401,30 @@ WorkspaceFactoryController.prototype.updatePreview = function() {
if (this.selectedMode == WorkspaceFactoryController.MODE_TOOLBOX) {
// If currently editing the toolbox.
- // Get toolbox XML.
- var tree = Blockly.Options.parseToolboxTree
- (this.generator.generateToolboxXml());
- // No categories, creates a simple flyout.
- if (tree.getElementsByTagName('category').length == 0) {
+
+ // Only update the toolbox if not in read only mode.
+ if (!this.model.options['readOnly']) {
+ // Get toolbox XML.
+ var tree = Blockly.Options.parseToolboxTree
+ (this.generator.generateToolboxXml());
+
// No categories, creates a simple flyout.
- if (this.previewWorkspace.toolbox_) {
- this.reinjectPreview(tree); // Switch to simple flyout, more expensive.
+ if (tree.getElementsByTagName('category').length == 0) {
+ // No categories, creates a simple flyout.
+ if (this.previewWorkspace.toolbox_) {
+ this.reinjectPreview(tree); // Switch to simple flyout, expensive.
+ } else {
+ this.previewWorkspace.updateToolbox(tree);
+ }
} else {
- this.previewWorkspace.flyout_.show(tree.childNodes);
- }
- } else {
- // Uses categories, creates a toolbox.
- if (!this.previewWorkspace.toolbox_) {
- this.reinjectPreview(tree); // Create a toolbox, more expensive.
- } else {
- this.previewWorkspace.toolbox_.populate_(tree);
+ // Uses categories, creates a toolbox.
+ if (!this.previewWorkspace.toolbox_) {
+ this.reinjectPreview(tree); // Create a toolbox, expensive.
+ } else {
+ this.previewWorkspace.updateToolbox(tree);
+ }
}
+
}
// Update pre-loaded blocks in the preview workspace to make sure that
@@ -425,6 +433,7 @@ WorkspaceFactoryController.prototype.updatePreview = function() {
this.previewWorkspace.clear();
Blockly.Xml.domToWorkspace(this.generator.generateWorkspaceXml(),
this.previewWorkspace);
+
} else if (this.selectedMode == WorkspaceFactoryController.MODE_PRELOAD){
// If currently editing the pre-loaded workspace.
this.previewWorkspace.clear();
@@ -676,6 +685,7 @@ WorkspaceFactoryController.prototype.importFile = function(file, importMode) {
return;
}
+ Blockly.Events.disable();
var controller = this;
var reader = new FileReader();
@@ -697,9 +707,11 @@ WorkspaceFactoryController.prototype.importFile = function(file, importMode) {
// Throw error if invalid mode.
throw new Error("Unknown import mode: " + importMode);
}
- } catch(e) {
- alert('Cannot load XML from file.');
- console.log(e);
+ } catch(e) {
+ alert('Cannot load XML from file.');
+ console.log(e);
+ } finally {
+ Blockly.Events.enable();
}
}
@@ -773,8 +785,6 @@ WorkspaceFactoryController.prototype.importToolboxFromTree_ = function(tree) {
this.view.updateState(this.model.getIndexByElementId
(this.model.getSelectedId()), this.model.getSelected());
- this.saveStateFromWorkspace();
-
this.saveStateFromWorkspace();
// Allow the user to set default configuration options for a single flyout
// or multiple categories.
@@ -828,15 +838,15 @@ WorkspaceFactoryController.prototype.importPreloadFromTree_ = function(tree) {
}
/**
- * Clears the toolbox editing area completely, deleting all categories and all
- * blocks in the model and view. Sets the mode to toolbox mode. Tied to "Clear
- * Toolbox" button.
+ * Clears the editing area completely, deleting all categories and all
+ * blocks in the model and view and all pre-loaded blocks. Tied to the
+ * "Clear" button.
*/
-WorkspaceFactoryController.prototype.clearToolbox = function() {
- this.setMode(WorkspaceFactoryController.MODE_TOOLBOX);
+WorkspaceFactoryController.prototype.clearAll = function() {
var hasCategories = this.model.hasElements();
this.model.clearToolboxList();
this.view.clearToolboxTabs();
+ this.model.savePreloadXml(Blockly.Xml.textToDom('
'));
this.view.addEmptyCategoryMessage();
this.view.updateState(-1, null);
this.toolboxWorkspace.clear();
@@ -998,8 +1008,6 @@ WorkspaceFactoryController.prototype.setMode = function(mode) {
if (mode == WorkspaceFactoryController.MODE_TOOLBOX) {
// Open the toolbox editing space.
- document.getElementById('editHelpText').textContent =
- 'Drag blocks into your toolbox:';
this.model.savePreloadXml
(Blockly.Xml.workspaceToDom(this.toolboxWorkspace));
this.clearAndLoadXml_(this.model.getSelectedXml());
@@ -1007,8 +1015,6 @@ WorkspaceFactoryController.prototype.setMode = function(mode) {
(this.model.getSelected()));
} else {
// Open the pre-loaded workspace editing space.
- document.getElementById('editHelpText').textContent =
- 'Drag blocks into your pre-loaded workspace:';
if (this.model.getSelected()) {
this.model.getSelected().saveFromWorkspace(this.toolboxWorkspace);
}
diff --git a/demos/blocklyfactory/workspacefactory/wfactory_init.js b/demos/blocklyfactory/workspacefactory/wfactory_init.js
index 09cb479b6..d306222a9 100644
--- a/demos/blocklyfactory/workspacefactory/wfactory_init.js
+++ b/demos/blocklyfactory/workspacefactory/wfactory_init.js
@@ -235,12 +235,6 @@ WorkspaceFactoryInit.assignWorkspaceFactoryClickHandlers_ =
document.getElementById('dropdownDiv_load').classList.remove("show");
document.getElementById('dropdownDiv_importBlocks').classList.
remove("show");
- })
-
- document.getElementById('button_print').addEventListener
- ('click',
- function() {
- controller.printConfig();
});
document.getElementById('button_up').addEventListener
@@ -351,11 +345,11 @@ document.getElementById('button_importBlocks').addEventListener
document.getElementById('button_clear').addEventListener
('click',
function() {
- controller.clearToolbox();
document.getElementById('dropdownDiv_importBlocks').classList.
remove("show");
document.getElementById('dropdownDiv_export').classList.remove("show");
document.getElementById('dropdownDiv_load').classList.remove("show");
+ controller.clearAll();
});
document.getElementById('dropdown_addShadow').addEventListener
@@ -394,13 +388,18 @@ document.getElementById('button_importBlocks').addEventListener
*/
WorkspaceFactoryInit.addWorkspaceFactoryEventListeners_ = function(controller) {
// Use up and down arrow keys to move categories.
- // TODO(evd2014): When merge with next CL for editing preloaded blocks, make
- // sure mode is toolbox.
window.addEventListener('keydown', function(e) {
- if (this.selectedTab != 'WORKSPACE_FACTORY' && e.keyCode == 38) {
+ // Don't let arrow keys have any effect if not in Workspace Factory
+ // editing the toolbox.
+ if (!(controller.keyEventsEnabled && controller.selectedMode
+ == WorkspaceFactoryController.MODE_TOOLBOX)) {
+ return;
+ }
+
+ if (e.keyCode == 38) {
// Arrow up.
controller.moveElement(-1);
- } else if (this.selectedTab != 'WORKSPACE_FACTORY' && e.keyCode == 40) {
+ } else if (e.keyCode == 40) {
// Arrow down.
controller.moveElement(1);
}
@@ -414,7 +413,7 @@ WorkspaceFactoryInit.addWorkspaceFactoryEventListeners_ = function(controller) {
!block.getSurroundParent()) ||
(!controller.isUserGenShadowBlock(block.id) && block.getSurroundParent()
&& controller.isUserGenShadowBlock(block.getSurroundParent().id)));
- }
+ };
// Add change listeners for toolbox workspace in workspace factory.
controller.toolboxWorkspace.addChangeListener(function(e) {
diff --git a/demos/blocklyfactory/workspacefactory/wfactory_view.js b/demos/blocklyfactory/workspacefactory/wfactory_view.js
index ad855709c..5f713960c 100644
--- a/demos/blocklyfactory/workspacefactory/wfactory_view.js
+++ b/demos/blocklyfactory/workspacefactory/wfactory_view.js
@@ -52,7 +52,7 @@ WorkspaceFactoryView.prototype.addCategoryRow =
var table = document.getElementById('categoryTable');
// Delete help label and enable category buttons if it's the first category.
if (firstCategory) {
- table.deleteRow(0);
+ document.getElementById('categoryHeader').textContent = 'Your Categories:';
}
// Create tab.
var count = table.rows.length;
@@ -94,8 +94,8 @@ WorkspaceFactoryView.prototype.deleteElementRow = function(id, index) {
WorkspaceFactoryView.prototype.addEmptyCategoryMessage = function() {
var table = document.getElementById('categoryTable');
if (table.rows.length == 0) {
- var row = table.insertRow(0);
- row.textContent = 'Your categories will appear here';
+ document.getElementById('categoryHeader').textContent =
+ 'Your categories will appear here';
}
}
@@ -216,11 +216,14 @@ WorkspaceFactoryView.prototype.moveTabToIndex =
oldIndex >= table.rows.length) {
throw new Error('Index out of bounds when moving tab in the view.');
}
- if (newIndex < oldIndex) { // Inserting before.
+
+ if (newIndex < oldIndex) {
+ // Inserting before.
var row = table.insertRow(newIndex);
row.appendChild(this.tabMap[id]);
table.deleteRow(oldIndex + 1);
- } else { // Inserting after.
+ } else {
+ // Inserting after.
var row = table.insertRow(newIndex + 1);
row.appendChild(this.tabMap[id]);
table.deleteRow(oldIndex);
@@ -296,6 +299,7 @@ WorkspaceFactoryView.prototype.clearToolboxTabs = function() {
var oldCategoryTable = document.getElementById('categoryTable');
var newCategoryTable = document.createElement('table');
newCategoryTable.id = 'categoryTable';
+ newCategoryTable.style.width = 'auto';
oldCategoryTable.parentElement.replaceChild(newCategoryTable,
oldCategoryTable);
};
@@ -370,8 +374,13 @@ WorkspaceFactoryView.prototype.setModeSelection = function(mode) {
* WorkspaceFactoryController.MODE_PRELOAD).
*/
WorkspaceFactoryView.prototype.updateHelpText = function(mode) {
- var helpText = 'Drag your blocks into your ' + (mode ==
- WorkspaceFactoryController.MODE_TOOLBOX ? 'toolbox: ' : 'pre-loaded workspace: ');
+ if (mode == WorkspaceFactoryController.MODE_TOOLBOX) {
+ var helpText = 'Drag blocks into the workspace to configure the toolbox '
+ + 'in your custom workspace.';
+ } else {
+ var helpText = 'Drag blocks into the workspace to pre-load them in your '
+ + 'custom workspace.'
+ }
document.getElementById('editHelpText').textContent = helpText;
};