diff --git a/externs/oli.js b/externs/oli.js index 3fd705bc78..7a951c1a2c 100644 --- a/externs/oli.js +++ b/externs/oli.js @@ -195,6 +195,9 @@ oli.interaction.DragAndDropEvent.prototype.features; oli.interaction.DragAndDropEvent.prototype.projection; +/** @type {File} */ +oli.interaction.DragAndDropEvent.prototype.file; + /** @interface */ oli.render.Event; diff --git a/src/ol/interaction/draganddropinteraction.js b/src/ol/interaction/draganddropinteraction.js index 3a8c5a911d..b2e8e482ac 100644 --- a/src/ol/interaction/draganddropinteraction.js +++ b/src/ol/interaction/draganddropinteraction.js @@ -76,21 +76,23 @@ ol.interaction.DragAndDrop.prototype.disposeInternal = function() { */ ol.interaction.DragAndDrop.prototype.handleDrop_ = function(event) { var files = event.getBrowserEvent().dataTransfer.files; - var i, ii; + var i, ii, file; for (i = 0, ii = files.length; i < ii; ++i) { + file = files[i]; // The empty string param is a workaround for // https://code.google.com/p/closure-library/issues/detail?id=524 - var reader = goog.fs.FileReader.readAsText(files[i], ''); - reader.addCallback(this.handleResult_, this); + var reader = goog.fs.FileReader.readAsText(file, ''); + reader.addCallback(goog.partial(this.handleResult_, file), this); } }; /** + * @param {File} file File. * @param {string} result Result. * @private */ -ol.interaction.DragAndDrop.prototype.handleResult_ = function(result) { +ol.interaction.DragAndDrop.prototype.handleResult_ = function(file, result) { var map = this.getMap(); goog.asserts.assert(!goog.isNull(map)); var projection = this.reprojectTo_; @@ -124,7 +126,7 @@ ol.interaction.DragAndDrop.prototype.handleResult_ = function(result) { this.dispatchEvent( new ol.interaction.DragAndDropEvent( ol.interaction.DragAndDropEventType.ADD_FEATURES, this, features, - projection)); + projection, file)); }; @@ -195,9 +197,10 @@ ol.interaction.DragAndDropEventType = { * @param {Object=} opt_target Target. * @param {Array.=} opt_features Features. * @param {ol.proj.Projection=} opt_projection Projection. + * @param {File=} opt_file File. */ ol.interaction.DragAndDropEvent = - function(type, opt_target, opt_features, opt_projection) { + function(type, opt_target, opt_features, opt_projection, opt_file) { goog.base(this, type, opt_target); @@ -213,5 +216,11 @@ ol.interaction.DragAndDropEvent = */ this.projection = opt_projection; + /** + * @type {File|undefined} + * @todo stability experimental + */ + this.file = opt_file; + }; goog.inherits(ol.interaction.DragAndDropEvent, goog.events.Event);