diff options
| author | Alon Levy <alon@pobox.com> | 2015-05-05 10:25:38 +0300 |
|---|---|---|
| committer | Alon Levy <alon@pobox.com> | 2015-05-05 10:25:38 +0300 |
| commit | 1ab3ab57e0b786315d69f86270aec11f3650131d (patch) | |
| tree | c4ec2bb19d008240620d0af22c6451165d605336 /src/client | |
| parent | 2f6e26f09fac0cebd4240dc20575fea3b48e62ac (diff) | |
client: improve text of delete messages, fix #521
Diffstat (limited to 'src/client')
| -rw-r--r-- | src/client/messages.js | 48 | ||||
| -rw-r--r-- | src/client/model/graph.js | 6 | ||||
| -rw-r--r-- | src/client/view/selection.js | 4 |
3 files changed, 47 insertions, 11 deletions
diff --git a/src/client/messages.js b/src/client/messages.js index 306a80c9..370dab2f 100644 --- a/src/client/messages.js +++ b/src/client/messages.js @@ -1,26 +1,58 @@ -define( ['util', 'model/graph'], -function (util, graph) { +define( ['underscore', 'util', 'model/graph'], +function (_, util, graph) { function delete_items_message(items) { util.assert(items && items.length && items.length > 0); - return delete_items_message_helper(graph.is_node(items[0]) ? 'node' : 'link', items.length); + var nodes = _.filter(items, graph.is_node), + links = _.filter(items, graph.is_link); + + return delete_items_message_by_name(nodes, links); +} + +function delete_items_message_by_name(nodes, links) +{ + var middle, + node_names = _.map(_.map(nodes, 'name'), quoted), + link_names = _.map(_.map(links, 'name'), quoted); + + if (nodes.length > 0 && links.length > 0) { + middle = english_conjunction(node_names) + ', and ' + english_conjunction(link_names) + ' connections'; + } else if (nodes.length > 0) { + middle = english_conjunction(node_names); + } + return 'Delete ' + middle + '?'; +} + +function quoted(name) +{ + if (name.indexOf(' ') == -1) { + return name; + } + return '"' + name + '"' } -function delete_nodes_message(count) { - return delete_items_message_helper('node', count); +function english_conjunction(names) +{ + if (names.length == 1) { + return names[0]; + } + return names.slice(0, names.length - 1).join(', ') + ' and ' + names[names.length - 1]; } -function delete_items_message_helper(type, count) { - var descriptor = count > 1 ? '' + count + ' ' + type + 's' : 'a ' + type; +function delete_items_message_by_number(type, nodes, links) { + var count_nodes = nodes.length, + count_links = links.length, + make_descriptor = function (type, count) { return count > 1 ? '' + count + ' ' + type + 's' : 'a ' + type; }, + descriptor = make_descriptor('node', count_nodes) + + (count_links > 0 && count_nodes > 0 ? ' and ' : '') + make_descriptor('link', count_links); return 'You are about to delete ' + descriptor + ', are you sure you want to do that?' ; } return { delete_items_message: delete_items_message, - delete_nodes_message: delete_nodes_message, }; }); diff --git a/src/client/model/graph.js b/src/client/model/graph.js index 29db5969..99c63886 100644 --- a/src/client/model/graph.js +++ b/src/client/model/graph.js @@ -1222,9 +1222,15 @@ function is_node(item) return item.__src === undefined; } +function is_link(item) +{ + return item.__src !== undefined; +} + return { Graph: Graph, is_node: is_node, + is_link: is_link, }; }); diff --git a/src/client/view/selection.js b/src/client/view/selection.js index cc2d9bfe..496d0b9e 100644 --- a/src/client/view/selection.js +++ b/src/client/view/selection.js @@ -270,9 +270,7 @@ var setup_toolbar = function(main_graph, main_graph_view) main_graph.nodes__merge(selected_nodes_ids()); }, delete_selection = function() { - var ids = selected_nodes_ids(); - - if (confirm(messages.delete_nodes_message(ids.length))) { + if (confirm(messages.delete_items_message(selected_nodes, []))) { main_graph.nodes__delete(ids); } }, |
