diff --git a/Makefile b/Makefile
index b14e6f989..d2574ada6 100644
--- a/Makefile
+++ b/Makefile
@@ -26,6 +26,7 @@ all: \
js/id/oauth.js \
js/id/taginfo.js \
js/id/util.js \
+ js/id/actions.js \
js/id/actions/*.js \
js/id/modes.js \
js/id/modes/*.js \
diff --git a/index.html b/index.html
index ab9e86956..6237d2962 100644
--- a/index.html
+++ b/index.html
@@ -40,7 +40,17 @@
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/js/id/actions.js b/js/id/actions.js
new file mode 100644
index 000000000..481fa8285
--- /dev/null
+++ b/js/id/actions.js
@@ -0,0 +1 @@
+iD.actions = {};
diff --git a/js/id/actions/actions.js b/js/id/actions/actions.js
deleted file mode 100644
index b27c8fbc2..000000000
--- a/js/id/actions/actions.js
+++ /dev/null
@@ -1,97 +0,0 @@
-iD.actions = {};
-
-iD.actions.noop = function() {
- return function(graph) {
- return graph;
- };
-};
-
-// https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/command/AddCommand.java
-iD.actions.addNode = function(node) {
- return function(graph) {
- return graph.replace(node, 'added a place');
- };
-};
-
-iD.actions.startWay = function(way) {
- return function(graph) {
- return graph.replace(way, 'started a road');
- };
-};
-
-// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteWayAction.as
-iD.actions.remove = function(entity) {
- return function(graph) {
- graph.parentWays(entity.id)
- .forEach(function(parent) {
- graph = iD.actions.removeWayNode(parent, entity)(graph);
- });
-
- graph.parentRelations(entity.id)
- .forEach(function(parent) {
- graph = iD.actions.removeRelationEntity(parent, entity)(graph);
- });
-
- return graph.remove(entity, 'removed a feature');
- };
-};
-
-// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/AddNodeToWayAction.as
-iD.actions.addWayNode = function(way, node, index) {
- return function(graph) {
- var nodes = way.nodes.slice();
- nodes.splice(index || nodes.length, 0, node.id);
- return graph.replace(way.update({nodes: nodes})).replace(node, 'added to a road');
- };
-};
-
-iD.actions.removeWayNode = function(way, node) {
- return function(graph) {
- var nodes = _.without(way.nodes, node.id);
- return graph.replace(way.update({nodes: nodes}), 'removed from a road');
- };
-};
-
-iD.actions.removeRelationEntity = function(relation, entity) {
- return function(graph) {
- var members = _.without(relation.members, entity.id);
- return graph.replace(relation.update({members: members}), 'removed from a relation');
- };
-};
-
-// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/AddNodeToWayAction.as
-iD.actions.changeWayDirection = function(way) {
- return function(graph) {
- return graph.replace(way.update({
- nodes: way.nodes.slice()
- }), 'changed way direction');
- };
-};
-
-iD.actions.changeTags = function(node, tags) {
- return function(graph) {
- return graph.replace(node.update({
- tags: tags
- }), 'changed tags');
- };
-};
-
-// https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/command/MoveCommand.java
-// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MoveNodeAction.as
-iD.actions.move = function(entity, loc) {
- return function(graph) {
- return graph.replace(entity.update({loc: loc}), 'moved an element');
- };
-};
-
-iD.actions.addTemporary = function(node) {
- return function(graph) {
- return graph.replace(node);
- };
-};
-
-iD.actions.removeTemporary = function(node) {
- return function(graph) {
- return graph.remove(node);
- };
-};
diff --git a/js/id/actions/add_node.js b/js/id/actions/add_node.js
new file mode 100644
index 000000000..291811409
--- /dev/null
+++ b/js/id/actions/add_node.js
@@ -0,0 +1,6 @@
+// https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/command/AddCommand.java
+iD.actions.addNode = function(node) {
+ return function(graph) {
+ return graph.replace(node, 'added a place');
+ };
+};
diff --git a/js/id/actions/add_way_node.js b/js/id/actions/add_way_node.js
new file mode 100644
index 000000000..bc4b7f347
--- /dev/null
+++ b/js/id/actions/add_way_node.js
@@ -0,0 +1,8 @@
+// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/AddNodeToWayAction.as
+iD.actions.addWayNode = function(way, node, index) {
+ return function(graph) {
+ var nodes = way.nodes.slice();
+ nodes.splice(index || nodes.length, 0, node.id);
+ return graph.replace(way.update({nodes: nodes})).replace(node, 'added to a road');
+ };
+};
diff --git a/js/id/actions/change_tags.js b/js/id/actions/change_tags.js
new file mode 100644
index 000000000..81b99760e
--- /dev/null
+++ b/js/id/actions/change_tags.js
@@ -0,0 +1,7 @@
+iD.actions.changeTags = function(node, tags) {
+ return function(graph) {
+ return graph.replace(node.update({
+ tags: tags
+ }), 'changed tags');
+ };
+};
diff --git a/js/id/actions/change_way_direction.js b/js/id/actions/change_way_direction.js
new file mode 100644
index 000000000..cfa637336
--- /dev/null
+++ b/js/id/actions/change_way_direction.js
@@ -0,0 +1,8 @@
+// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/AddNodeToWayAction.as
+iD.actions.changeWayDirection = function(way) {
+ return function(graph) {
+ return graph.replace(way.update({
+ nodes: way.nodes.slice()
+ }), 'changed way direction');
+ };
+};
diff --git a/js/id/actions/move.js b/js/id/actions/move.js
new file mode 100644
index 000000000..d67af763f
--- /dev/null
+++ b/js/id/actions/move.js
@@ -0,0 +1,7 @@
+// https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/command/MoveCommand.java
+// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MoveNodeAction.as
+iD.actions.move = function(entity, loc) {
+ return function(graph) {
+ return graph.replace(entity.update({loc: loc}), 'moved an element');
+ };
+};
diff --git a/js/id/actions/noop.js b/js/id/actions/noop.js
new file mode 100644
index 000000000..ddae5dde5
--- /dev/null
+++ b/js/id/actions/noop.js
@@ -0,0 +1,5 @@
+iD.actions.noop = function() {
+ return function(graph) {
+ return graph;
+ };
+};
diff --git a/js/id/actions/remove.js b/js/id/actions/remove.js
new file mode 100644
index 000000000..9d65b7115
--- /dev/null
+++ b/js/id/actions/remove.js
@@ -0,0 +1,16 @@
+// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteWayAction.as
+iD.actions.remove = function(entity) {
+ return function(graph) {
+ graph.parentWays(entity.id)
+ .forEach(function(parent) {
+ graph = iD.actions.removeWayNode(parent, entity)(graph);
+ });
+
+ graph.parentRelations(entity.id)
+ .forEach(function(parent) {
+ graph = iD.actions.removeRelationEntity(parent, entity)(graph);
+ });
+
+ return graph.remove(entity, 'removed a feature');
+ };
+};
diff --git a/js/id/actions/remove_relation_entity.js b/js/id/actions/remove_relation_entity.js
new file mode 100644
index 000000000..4a9fd1c70
--- /dev/null
+++ b/js/id/actions/remove_relation_entity.js
@@ -0,0 +1,6 @@
+iD.actions.removeRelationEntity = function(relation, entity) {
+ return function(graph) {
+ var members = _.without(relation.members, entity.id);
+ return graph.replace(relation.update({members: members}), 'removed from a relation');
+ };
+};
diff --git a/js/id/actions/remove_way_node.js b/js/id/actions/remove_way_node.js
new file mode 100644
index 000000000..16f9883bb
--- /dev/null
+++ b/js/id/actions/remove_way_node.js
@@ -0,0 +1,6 @@
+iD.actions.removeWayNode = function(way, node) {
+ return function(graph) {
+ var nodes = _.without(way.nodes, node.id);
+ return graph.replace(way.update({nodes: nodes}), 'removed from a road');
+ };
+};
diff --git a/js/id/actions/start_way.js b/js/id/actions/start_way.js
new file mode 100644
index 000000000..8e7ea7631
--- /dev/null
+++ b/js/id/actions/start_way.js
@@ -0,0 +1,5 @@
+iD.actions.startWay = function(way) {
+ return function(graph) {
+ return graph.replace(way, 'started a road');
+ };
+};
diff --git a/test/index.html b/test/index.html
index 9bbb4bd31..0c163b17c 100644
--- a/test/index.html
+++ b/test/index.html
@@ -42,7 +42,17 @@
-
+
+
+
+
+
+
+
+
+
+
+