- Fix auto save.

- Fix error trying to remove a node that contains a icons
- Fix auto-save leaving the page.
This commit is contained in:
Paulo Veiga 2011-11-29 00:38:11 -03:00
parent c598c1837e
commit 81f9ffa5e9
5 changed files with 192 additions and 183 deletions

View File

@ -60,13 +60,6 @@ mindplot.Designer = new Class({
// Register keyboard events ... // Register keyboard events ...
mindplot.DesignerKeyboard.register(this); mindplot.DesignerKeyboard.register(this);
// To prevent the user from leaving the page with changes ...
$(window).addEvent('beforeunload', function () {
if (this.needsSave()) {
this.save(null, false);
}
}.bind(this));
}, },
_registerMouseEvents : function() { _registerMouseEvents : function() {

View File

@ -1,74 +1,78 @@
/* /*
* Copyright [2011] [wisemapping] * Copyright [2011] [wisemapping]
* *
* Licensed under WiseMapping Public License, Version 1.0 (the "License"). * Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the * It is basically the Apache License, Version 2.0 (the "License") plus the
* "powered by wisemapping" text requirement on every single page; * "powered by wisemapping" text requirement on every single page;
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the license at * You may obtain a copy of the license at
* *
* http://www.wisemapping.org/license * http://www.wisemapping.org/license
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
mindplot.PersitenceManager = new Class({ mindplot.PersitenceManager = new Class({
initialize: function() { initialize: function() {
}, },
save: function(mindmap, editorProperties, saveHistory, events) { save: function(mindmap, editorProperties, saveHistory, events) {
$assert(mindmap, "mindmap can not be null"); $assert(mindmap, "mindmap can not be null");
$assert(editorProperties, "editorProperties can not be null"); $assert(editorProperties, "editorProperties can not be null");
var mapId = mindmap.getId(); var mapId = mindmap.getId();
$assert(mapId, "mapId can not be null"); $assert(mapId, "mapId can not be null");
var serializer = mindplot.XMLMindmapSerializerFactory.getSerializerFromMindmap(mindmap); var serializer = mindplot.XMLMindmapSerializerFactory.getSerializerFromMindmap(mindmap);
var domMap = serializer.toXML(mindmap); var domMap = serializer.toXML(mindmap);
var mapXml = core.Utils.innerXML(domMap); var mapXml = core.Utils.innerXML(domMap);
var pref = JSON.encode(editorProperties); var pref = JSON.encode(editorProperties);
try { try {
this.saveMapXml(mapId, mapXml, pref, saveHistory, events); this.saveMapXml(mapId, mapXml, pref, saveHistory, events);
} catch(e) { } catch(e) {
console.log(e); console.log(e);
events.onError(); events.onError();
} }
}, },
load: function(mapId) { load: function(mapId) {
$assert(mapId, "mapId can not be null"); $assert(mapId, "mapId can not be null");
var domDocument = this.loadMapDom(mapId); var domDocument = this.loadMapDom(mapId);
return this.loadFromDom(mapId, domDocument); return this.loadFromDom(mapId, domDocument);
}, },
loadMapDom: function(mapId) { loadMapDom: function(mapId) {
throw "Method must be implemented"; throw "Method must be implemented";
}, },
saveMapXml : function(mapId, mapXml, pref, saveHistory, events) { saveMapXml : function(mapId, mapXml, pref, saveHistory, events) {
throw "Method must be implemented"; throw "Method must be implemented";
}, },
loadFromDom : function(mapId, mapDom) { loadFromDom : function(mapId, mapDom) {
$assert(mapId, "mapId can not be null"); $assert(mapId, "mapId can not be null");
$assert(mapDom, "mapDom can not be null"); $assert(mapDom, "mapDom can not be null");
var serializer = mindplot.XMLMindmapSerializerFactory.getSerializerFromDocument(mapDom); var serializer = mindplot.XMLMindmapSerializerFactory.getSerializerFromDocument(mapDom);
return serializer.loadFromDom(mapDom, mapId); return serializer.loadFromDom(mapDom, mapId);
} },
});
logEntry: function(severity, message) {
mindplot.PersitenceManager.init = function(instance) { throw "Method must be implemented";
mindplot.PersitenceManager._instance = instance; }
}; });
mindplot.PersitenceManager.getInstance = function() { mindplot.PersitenceManager.init = function(instance) {
return mindplot.PersitenceManager._instance; mindplot.PersitenceManager._instance = instance;
}; };
mindplot.PersitenceManager.getInstance = function() {
return mindplot.PersitenceManager._instance;
};

View File

@ -18,7 +18,7 @@
mindplot.commands.DeleteCommand = new Class({ mindplot.commands.DeleteCommand = new Class({
Extends:mindplot.Command, Extends:mindplot.Command,
initialize: function(topicIds,relIds) { initialize: function(topicIds, relIds) {
this._relIds = relIds; this._relIds = relIds;
this._topicIds = topicIds; this._topicIds = topicIds;
this._deletedTopicModels = []; this._deletedTopicModels = [];
@ -32,9 +32,9 @@ mindplot.commands.DeleteCommand = new Class({
if (topics.length > 0) { if (topics.length > 0) {
topics.forEach( topics.forEach(
function(topic, index) { function(topic, index) {
var model = topic.getModel().clone(); var model = topic.getModel();
//delete relationships // Delete relationships
var relationships = topic.getRelationships(); var relationships = topic.getRelationships();
while (relationships.length > 0) { while (relationships.length > 0) {
var relationship = relationships[0]; var relationship = relationships[0];
@ -68,6 +68,7 @@ mindplot.commands.DeleteCommand = new Class({
}.bind(this)); }.bind(this));
} }
}, },
undoExecute: function(commandContext) { undoExecute: function(commandContext) {
var topics = commandContext.findTopics(this._topicIds); var topics = commandContext.findTopics(this._topicIds);

View File

@ -245,27 +245,24 @@ mindplot.widget.Menu = new Class({
var saveElem = $('save'); var saveElem = $('save');
if (saveElem) { if (saveElem) {
this.addButton('save', false, false, function() { this.addButton('save', false, false, function() {
this._save(saveElem, designer, true);
$notify("Saving ...");
saveElem.setStyle('cursor', 'wait');
// Load map content ...
var mindmap = designer.getMindmap();
var mindmapProp = designer.getMindmapProperties();
var persistenceManager = mindplot.PersitenceManager.getInstance();
persistenceManager.save(mindmap, mindmapProp, true, {
onSuccess: function() {
saveElem.setStyle('cursor', 'pointer');
$notify("Save complete");
},
onError: function() {
saveElem.setStyle('cursor', 'pointer');
$notify("Save could not be completed. Try latter");
}
});
}); });
if (!readOnly) {
// To prevent the user from leaving the page with changes ...
$(window).addEvent('beforeunload', function () {
if (designer.needsSave()) {
this._save(saveElem, designer, false);
}
}.bind(this));
// Autosave on a fixed period of time ...
(function() {
if (designer.needsSave()) {
this._save(saveElem, designer, false);
}
}.bind(this)).periodical(30000);
}
} }
var discardElem = $('discard'); var discardElem = $('discard');
@ -436,5 +433,38 @@ mindplot.widget.Menu = new Class({
this._toolbarElems.forEach(function(item) { this._toolbarElems.forEach(function(item) {
item.hide(); item.hide();
}); });
},
_save:function (saveElem, designer, saveHistory) {
// Load map content ...
var mindmap = designer.getMindmap();
var mindmapProp = designer.getMindmapProperties();
// Display save message ..
if (saveHistory) {
$notify("Saving ...");
saveElem.setStyle('cursor', 'wait');
} else {
console.log("Saving without history ...");
}
// Call persistence manager for saving ...
var persistenceManager = mindplot.PersitenceManager.getInstance();
persistenceManager.save(mindmap, mindmapProp, saveHistory, {
onSuccess: function() {
if (saveHistory) {
saveElem.setStyle('cursor', 'pointer');
$notify("Save complete");
}
},
onError: function() {
if (saveHistory) {
saveElem.setStyle('cursor', 'pointer');
$notify("Save could not be completed. Try latter");
}
}
});
} }
}); });

View File

@ -1,79 +1,60 @@
/* /*
* Copyright [2011] [wisemapping] * Copyright [2011] [wisemapping]
* *
* Licensed under WiseMapping Public License, Version 1.0 (the "License"). * Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the * It is basically the Apache License, Version 2.0 (the "License") plus the
* "powered by wisemapping" text requirement on every single page; * "powered by wisemapping" text requirement on every single page;
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the license at * You may obtain a copy of the license at
* *
* http://www.wisemapping.org/license * http://www.wisemapping.org/license
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
Asset.javascript('../js/mindplot-min.js', { Asset.javascript('../js/mindplot-min.js', {
id: 'MindplotSVGLib', id: 'MindplotSVGLib',
onLoad: function() { onLoad: function() {
$(document).fireEvent('loadcomplete', 'mind') $(document).fireEvent('loadcomplete', 'mind')
} }
}); });
var designer = null; var designer = null;
/* JavaScript tabs changer */ /* JavaScript tabs changer */
function setUpToolbar(designer, readOnly) { function setUpToolbar(designer, readOnly) {
var menu = new mindplot.widget.Menu(designer, 'toolbar', mapId); var menu = new mindplot.widget.Menu(designer, 'toolbar', mapId);
// Autosave ... // If a node has focus, focus can be move to another node using the keys.
if (!readOnly) { designer._cleanScreen = function() {
(function() { menu.clear()
};
if (designer.needsSave()) {
designer.save(function() {
var monitor = core.ToolbarNotifier.getInstance(); }
}, false);
} function buildDesigner(properties) {
}).periodical(30000); $assert(properties, "properties can not be null");
// To prevent the user from leaving the page with changes ... var container = $('mindplot');
window.onbeforeunload = function() { container.setStyles({
if (designer.needsSave()) { height: parseInt(screen.height),
designer.save(null, false) width: parseInt(screen.width)
} });
}
} designer = new mindplot.Designer(properties, container);
designer.setViewPort({
// If a node has focus, focus can be move to another node using the keys. height: parseInt(window.innerHeight - 151), // Footer and Header
designer._cleanScreen = function() { width: parseInt(window.innerWidth)
menu.clear() });
};
// Toolbar is only loaded if it was defined ...
if ($('toolbar')) {
} setUpToolbar(designer, properties.readOnly);
}
function buildDesigner(properties) { return designer;
$assert(properties, "properties can not be null"); }
var container = $('mindplot');
container.setStyles({
height: parseInt(screen.height),
width: parseInt(screen.width)
});
designer = new mindplot.Designer(properties, container);
designer.setViewPort({
height: parseInt(window.innerHeight - 151), // Footer and Header
width: parseInt(window.innerWidth)
});
// Toolbar is only loaded if it was defined ...
if ($('toolbar')) {
setUpToolbar(designer, properties.readOnly);
}
return designer;
}