diff --git a/index.html b/index.html
index af3c68085..cd1177efb 100644
--- a/index.html
+++ b/index.html
@@ -123,6 +123,7 @@
+
diff --git a/js/id/actions/change_preset.js b/js/id/actions/change_preset.js
new file mode 100644
index 000000000..dbebf2890
--- /dev/null
+++ b/js/id/actions/change_preset.js
@@ -0,0 +1,12 @@
+iD.actions.ChangePreset = function(entityId, oldPreset, newPreset) {
+ return function(graph) {
+ var entity = graph.entity(entityId),
+ geometry = entity.geometry(graph),
+ tags = entity.tags;
+
+ tags = oldPreset.removeTags(tags, geometry);
+ tags = newPreset.applyTags(tags, geometry);
+
+ return graph.replace(entity.update({tags: tags}));
+ };
+};
diff --git a/js/id/ui/entity_editor.js b/js/id/ui/entity_editor.js
index 4748f5ea3..bdfef6588 100644
--- a/js/id/ui/entity_editor.js
+++ b/js/id/ui/entity_editor.js
@@ -158,18 +158,7 @@ iD.ui.EntityEditor = function(context) {
entityEditor.preset = function(_) {
if (!arguments.length) return preset;
-
- var entity = context.entity(id),
- geometry = context.geometry(id),
- tags = preset.removeTags(entity.tags, geometry);
-
preset = _;
- tags = preset.applyTags(tags, geometry);
-
- context.perform(
- iD.actions.ChangeTags(id, tags),
- t('operations.change_tags.annotation'));
-
return entityEditor;
};
diff --git a/js/id/ui/preset_list.js b/js/id/ui/preset_list.js
index 9b961c79a..dbb6d340e 100644
--- a/js/id/ui/preset_list.js
+++ b/js/id/ui/preset_list.js
@@ -1,7 +1,7 @@
iD.ui.PresetList = function(context) {
var event = d3.dispatch('choose'),
id,
- preset,
+ currentPreset,
autofocus = false;
function presetList(selection) {
@@ -16,7 +16,7 @@ iD.ui.PresetList = function(context) {
var message = messagewrap.append('h3')
.text(t('inspector.choose'));
- if (preset) {
+ if (currentPreset) {
messagewrap.append('button')
.attr('class', 'preset-choose')
.on('click', event.choose)
@@ -106,7 +106,7 @@ iD.ui.PresetList = function(context) {
items.enter().append('div')
.attr('class', function(item) { return 'preset-list-item preset-' + item.preset.id.replace('/', '-'); })
- .classed('current', function(item) { return item.preset === preset; })
+ .classed('current', function(item) { return item.preset === currentPreset; })
.each(function(item) {
d3.select(this).call(item);
})
@@ -193,6 +193,11 @@ iD.ui.PresetList = function(context) {
item.choose = function() {
context.presets().choose(preset);
+
+ context.perform(
+ iD.actions.ChangePreset(id, currentPreset, preset),
+ t('operations.change_tags.annotation'));
+
event.choose(preset);
};
@@ -220,8 +225,8 @@ iD.ui.PresetList = function(context) {
};
presetList.preset = function(_) {
- if (!arguments.length) return preset;
- preset = _;
+ if (!arguments.length) return currentPreset;
+ currentPreset = _;
return presetList;
};