Commit 2a9993e5 authored by Neil Fraser's avatar Neil Fraser

Fix cloud storage (issue 100)

parent bfee4277
...@@ -29,13 +29,12 @@ var BlocklyStorage = {}; ...@@ -29,13 +29,12 @@ var BlocklyStorage = {};
/** /**
* Backup code blocks to localStorage. * Backup code blocks to localStorage.
* @param {Blockly.WorkspaceSvg} opt_workspace Workspace. * @param {!Blockly.WorkspaceSvg} workspace Workspace.
* @private * @private
*/ */
BlocklyStorage.backupBlocks_ = function(opt_workspace) { BlocklyStorage.backupBlocks_ = function(workspace) {
if ('localStorage' in window) { if ('localStorage' in window) {
var workspace = opt_workspace || Blockly.getMainWorkspace(); var xml = Blockly.Xml.workspaceToDom(workspace);
var xml = Blockly.Xml.workspaceToDom(Blockly.workspace);
// Gets the current URL, not including the hash. // Gets the current URL, not including the hash.
var url = window.location.href.split('#')[0]; var url = window.location.href.split('#')[0];
window.localStorage.setItem(url, Blockly.Xml.domToText(xml)); window.localStorage.setItem(url, Blockly.Xml.domToText(xml));
...@@ -44,9 +43,12 @@ BlocklyStorage.backupBlocks_ = function(opt_workspace) { ...@@ -44,9 +43,12 @@ BlocklyStorage.backupBlocks_ = function(opt_workspace) {
/** /**
* Bind the localStorage backup function to the unload event. * Bind the localStorage backup function to the unload event.
* @param {Blockly.WorkspaceSvg} opt_workspace Workspace.
*/ */
BlocklyStorage.backupOnUnload = function() { BlocklyStorage.backupOnUnload = function(opt_workspace) {
window.addEventListener('unload', BlocklyStorage.backupBlocks_, false); var workspace = opt_workspace || Blockly.getMainWorkspace();
window.addEventListener('unload',
function() {BlocklyStorage.backupBlocks_(workspace);}, false);
}; };
/** /**
...@@ -70,7 +72,7 @@ BlocklyStorage.link = function(opt_workspace) { ...@@ -70,7 +72,7 @@ BlocklyStorage.link = function(opt_workspace) {
var workspace = opt_workspace || Blockly.getMainWorkspace(); var workspace = opt_workspace || Blockly.getMainWorkspace();
var xml = Blockly.Xml.workspaceToDom(workspace); var xml = Blockly.Xml.workspaceToDom(workspace);
var data = Blockly.Xml.domToText(xml); var data = Blockly.Xml.domToText(xml);
BlocklyStorage.makeRequest_('/storage', 'xml', data); BlocklyStorage.makeRequest_('/storage', 'xml', data, workspace);
}; };
/** /**
......
...@@ -335,18 +335,6 @@ Code.renderContent = function() { ...@@ -335,18 +335,6 @@ Code.renderContent = function() {
Code.init = function() { Code.init = function() {
Code.initLanguage(); Code.initLanguage();
// Disable the link button if page isn't backed by App Engine storage.
var linkButton = document.getElementById('linkButton');
if ('BlocklyStorage' in window) {
BlocklyStorage['HTTPREQUEST_ERROR'] = MSG['httpRequestError'];
BlocklyStorage['LINK_ALERT'] = MSG['linkAlert'];
BlocklyStorage['HASH_ERROR'] = MSG['hashError'];
BlocklyStorage['XML_ERROR'] = MSG['xmlError'];
Code.bindClick(linkButton, BlocklyStorage.link);
} else if (linkButton) {
linkButton.className = 'disabled';
}
var rtl = Code.isRtl(); var rtl = Code.isRtl();
var container = document.getElementById('content_area'); var container = document.getElementById('content_area');
var onresize = function(e) { var onresize = function(e) {
...@@ -390,7 +378,7 @@ Code.init = function() { ...@@ -390,7 +378,7 @@ Code.init = function() {
if ('BlocklyStorage' in window) { if ('BlocklyStorage' in window) {
// Hook a save function onto unload. // Hook a save function onto unload.
BlocklyStorage.backupOnUnload(); BlocklyStorage.backupOnUnload(Code.workspace);
} }
Code.tabClick(Code.selected); Code.tabClick(Code.selected);
...@@ -399,6 +387,18 @@ Code.init = function() { ...@@ -399,6 +387,18 @@ Code.init = function() {
Code.bindClick('trashButton', Code.bindClick('trashButton',
function() {Code.discard(); Code.renderContent();}); function() {Code.discard(); Code.renderContent();});
Code.bindClick('runButton', Code.runJS); Code.bindClick('runButton', Code.runJS);
// Disable the link button if page isn't backed by App Engine storage.
var linkButton = document.getElementById('linkButton');
if ('BlocklyStorage' in window) {
BlocklyStorage['HTTPREQUEST_ERROR'] = MSG['httpRequestError'];
BlocklyStorage['LINK_ALERT'] = MSG['linkAlert'];
BlocklyStorage['HASH_ERROR'] = MSG['hashError'];
BlocklyStorage['XML_ERROR'] = MSG['xmlError'];
Code.bindClick(linkButton,
function() {BlocklyStorage.link(Code.workspace);});
} else if (linkButton) {
linkButton.className = 'disabled';
}
for (var i = 0; i < Code.TABS_.length; i++) { for (var i = 0; i < Code.TABS_.length; i++) {
var name = Code.TABS_[i]; var name = Code.TABS_[i];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment