diff --git a/externs/oli.js b/externs/oli.js
index 0f0acb4896..d5c1846b31 100644
--- a/externs/oli.js
+++ b/externs/oli.js
@@ -49,6 +49,19 @@ oli.DrawEvent.prototype.feature;
+/**
+ * @interface
+ */
+oli.ModifyEvent = function() {};
+
+
+/**
+ * @type {ol.Collection.
}
+ */
+oli.ModifyEvent.prototype.features;
+
+
+
/**
* @interface
*/
diff --git a/src/ol/interaction/modifyinteraction.js b/src/ol/interaction/modifyinteraction.js
index e90df9d183..c8e0a28f8a 100644
--- a/src/ol/interaction/modifyinteraction.js
+++ b/src/ol/interaction/modifyinteraction.js
@@ -3,6 +3,7 @@ goog.provide('ol.interaction.Modify');
goog.require('goog.array');
goog.require('goog.asserts');
goog.require('goog.events');
+goog.require('goog.events.Event');
goog.require('goog.functions');
goog.require('ol.Collection');
goog.require('ol.CollectionEventType');
@@ -26,6 +27,52 @@ goog.require('ol.structs.RBush');
goog.require('ol.style.Style');
+/**
+ * @enum {string}
+ */
+ol.ModifyEventType = {
+ /**
+ * Triggered upon feature modification start
+ * @event ol.ModifyEvent#modifystart
+ * @api stable
+ */
+ MODIFYSTART: 'modifystart',
+ /**
+ * Triggered upon feature modification end
+ * @event ol.ModifyEvent#modifyend
+ * @api stable
+ */
+ MODIFYEND: 'modifyend'
+};
+
+
+
+/**
+ * @classdesc
+ * Events emitted by {@link ol.interaction.Modify} instances are instances of
+ * this type.
+ *
+ * @constructor
+ * @extends {goog.events.Event}
+ * @implements {oli.ModifyEvent}
+ * @param {ol.ModifyEventType} type Type.
+ * @param {ol.Collection.} features The features modified.
+ */
+ol.ModifyEvent = function(type, features) {
+
+ goog.base(this, type);
+
+ /**
+ * The feature being modified.
+ * @type {ol.Collection.}
+ * @api stable
+ */
+ this.features = features;
+
+};
+goog.inherits(ol.ModifyEvent, goog.events.Event);
+
+
/**
* @typedef {{depth: (Array.|undefined),
* feature: ol.Feature,
@@ -44,6 +91,7 @@ ol.interaction.SegmentDataType;
* @constructor
* @extends {ol.interaction.Pointer}
* @param {olx.interaction.ModifyOptions} options Options.
+ * @fires ol.ModifyEvent
* @api stable
*/
ol.interaction.Modify = function(options) {
@@ -466,6 +514,8 @@ ol.interaction.Modify.handleDownEvent_ = function(evt) {
for (i = insertVertices.length - 1; i >= 0; --i) {
this.insertVertex_.apply(this, insertVertices[i]);
}
+ this.dispatchEvent(new ol.ModifyEvent(ol.ModifyEventType.MODIFYSTART,
+ this.features_));
}
return !goog.isNull(this.vertexFeature_);
};
@@ -537,6 +587,8 @@ ol.interaction.Modify.handleUpEvent_ = function(evt) {
this.rBush_.update(ol.extent.boundingExtent(segmentData.segment),
segmentData);
}
+ this.dispatchEvent(new ol.ModifyEvent(ol.ModifyEventType.MODIFYEND,
+ this.features_));
return false;
};