From df25517f097150f56a9564d9acbee88f79fdceb8 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 5 Mar 2012 11:25:16 +0100 Subject: [PATCH] [IMP] use deferred for node and edge destruction callbacks, so the node or edge is not removed if the unlink call fails bzr revid: xmo@openerp.com-20120305102516-3u14hvxs81qzgxd8 --- addons/web_diagram/static/src/js/diagram.js | 10 ++++------ addons/web_diagram/static/src/js/graph.js | 8 ++++---- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/addons/web_diagram/static/src/js/diagram.js b/addons/web_diagram/static/src/js/diagram.js index 1f437fb2b81..41b3c4844db 100644 --- a/addons/web_diagram/static/src/js/diagram.js +++ b/addons/web_diagram/static/src/js/diagram.js @@ -193,10 +193,9 @@ openerp.web.DiagramView = openerp.web.View.extend({ var i = 0; CuteNode.destruction_callback = function(cutenode){ if(!confirm(_t("Deleting this node cannot be undone.\nIt will also delete all connected transitions.\n\nAre you sure ?"))){ - return false; + return $.Deferred().reject().promise(); } - new openerp.web.DataSet(self,self.node).unlink([cutenode.id]); - return true; + return new openerp.web.DataSet(self,self.node).unlink([cutenode.id]); }; CuteEdge.double_click_callback = function(cuteedge){ self.edit_connector(cuteedge.id); @@ -212,10 +211,9 @@ openerp.web.DiagramView = openerp.web.View.extend({ }; CuteEdge.destruction_callback = function(cuteedge){ if(!confirm(_t("Deleting this transition cannot be undone.\n\nAre you sure ?"))){ - return false; + return $.Deferred().reject().promise(); } - new openerp.web.DataSet(self,self.connector).unlink([cuteedge.id]); - return true; + return new openerp.web.DataSet(self,self.connector).unlink([cuteedge.id]); }; }, diff --git a/addons/web_diagram/static/src/js/graph.js b/addons/web_diagram/static/src/js/graph.js index d0e79b12952..b61b2bf7a6b 100644 --- a/addons/web_diagram/static/src/js/graph.js +++ b/addons/web_diagram/static/src/js/graph.js @@ -85,15 +85,15 @@ dummy_circle.animate({'r': close_button_radius }, 400, 'linear'); if(entity_type == "node"){ - if(GraphNode.destruction_callback(entity)){ + $.when(GraphNode.destruction_callback(entity)).then(function () { //console.log("remove node",entity); entity.remove(); - } + }); }else if(entity_type == "edge"){ - if(GraphEdge.destruction_callback(entity)){ + $.when(GraphEdge.destruction_callback(entity)).then(function () { //console.log("remove edge",entity); entity.remove(); - } + }); } } dummy_circle.click(click_action);