summaryrefslogtreecommitdiff
path: root/src/client
diff options
context:
space:
mode:
authorAlon Levy <alon@pobox.com>2015-05-05 10:25:38 +0300
committerAlon Levy <alon@pobox.com>2015-05-05 10:25:38 +0300
commit1ab3ab57e0b786315d69f86270aec11f3650131d (patch)
treec4ec2bb19d008240620d0af22c6451165d605336 /src/client
parent2f6e26f09fac0cebd4240dc20575fea3b48e62ac (diff)
client: improve text of delete messages, fix #521
Diffstat (limited to 'src/client')
-rw-r--r--src/client/messages.js48
-rw-r--r--src/client/model/graph.js6
-rw-r--r--src/client/view/selection.js4
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);
}
},