Use ol.Disposable instead of goog.Disposable

This commit is contained in:
Tim Schaub
2016-03-01 23:58:36 -07:00
parent ae4d8195c0
commit 09eee46822
7 changed files with 67 additions and 30 deletions
+17 -5
View File
@@ -118,14 +118,17 @@ ol.control.ZoomSlider = function(opt_options) {
[className, ol.css.CLASS_UNSELECTABLE, ol.css.CLASS_CONTROL], [className, ol.css.CLASS_UNSELECTABLE, ol.css.CLASS_CONTROL],
thumbElement); thumbElement);
var dragger = new ol.pointer.PointerEventHandler(containerElement); /**
this.registerDisposable(dragger); * @type {ol.pointer.PointerEventHandler}
* @private
*/
this.dragger_ = new ol.pointer.PointerEventHandler(containerElement);
ol.events.listen(dragger, ol.pointer.EventType.POINTERDOWN, ol.events.listen(this.dragger_, ol.pointer.EventType.POINTERDOWN,
this.handleDraggerStart_, this); this.handleDraggerStart_, this);
ol.events.listen(dragger, ol.pointer.EventType.POINTERMOVE, ol.events.listen(this.dragger_, ol.pointer.EventType.POINTERMOVE,
this.handleDraggerDrag_, this); this.handleDraggerDrag_, this);
ol.events.listen(dragger, ol.pointer.EventType.POINTERUP, ol.events.listen(this.dragger_, ol.pointer.EventType.POINTERUP,
this.handleDraggerEnd_, this); this.handleDraggerEnd_, this);
ol.events.listen(containerElement, ol.events.EventType.CLICK, ol.events.listen(containerElement, ol.events.EventType.CLICK,
@@ -143,6 +146,15 @@ ol.control.ZoomSlider = function(opt_options) {
goog.inherits(ol.control.ZoomSlider, ol.control.Control); goog.inherits(ol.control.ZoomSlider, ol.control.Control);
/**
* @inheritDoc
*/
ol.control.ZoomSlider.prototype.disposeInternal = function() {
this.dragger_.dispose();
goog.base(this, 'disposeInternal');
};
/** /**
* The enum for available directions. * The enum for available directions.
* *
+30
View File
@@ -0,0 +1,30 @@
goog.provide('ol.Disposable');
/**
* Objects that need to clean up after themselves.
* @constructor
*/
ol.Disposable = function() {};
/**
* The object has already been disposed.
* @type {boolean}
* @private
*/
ol.Disposable.prototype.disposed_ = false;
/**
* Clean up.
*/
ol.Disposable.prototype.dispose = function() {
if (!this.disposed_) {
this.disposed_ = true;
this.disposeInternal();
}
};
/**
* Extension point for disposable objects.
* @protected
*/
ol.Disposable.prototype.disposeInternal = function() {};
+3 -4
View File
@@ -1,6 +1,6 @@
goog.provide('ol.events.EventTarget'); goog.provide('ol.events.EventTarget');
goog.require('goog.Disposable'); goog.require('ol.Disposable');
goog.require('ol.events'); goog.require('ol.events');
goog.require('ol.events.Event'); goog.require('ol.events.Event');
@@ -20,7 +20,7 @@ goog.require('ol.events.Event');
* returns false. * returns false.
* *
* @constructor * @constructor
* @extends {goog.Disposable} * @extends {ol.Disposable}
*/ */
ol.events.EventTarget = function() { ol.events.EventTarget = function() {
@@ -33,7 +33,7 @@ ol.events.EventTarget = function() {
this.listeners_ = {}; this.listeners_ = {};
}; };
goog.inherits(ol.events.EventTarget, goog.Disposable); goog.inherits(ol.events.EventTarget, ol.Disposable);
/** /**
@@ -79,7 +79,6 @@ ol.events.EventTarget.prototype.dispatchEvent = function(event) {
*/ */
ol.events.EventTarget.prototype.disposeInternal = function() { ol.events.EventTarget.prototype.disposeInternal = function() {
ol.events.unlistenAll(this); ol.events.unlistenAll(this);
goog.base(this, 'disposeInternal');
}; };
+9 -6
View File
@@ -300,12 +300,15 @@ ol.Map = function(options) {
} }
this.viewport_.appendChild(this.overlayContainerStopEvent_); this.viewport_.appendChild(this.overlayContainerStopEvent_);
var mapBrowserEventHandler = new ol.MapBrowserEventHandler(this); /**
* @private
* @type {ol.MapBrowserEventHandler}
*/
this.mapBrowserEventHandler_ = new ol.MapBrowserEventHandler(this);
for (var key in ol.MapBrowserEvent.EventType) { for (var key in ol.MapBrowserEvent.EventType) {
ol.events.listen(mapBrowserEventHandler, ol.MapBrowserEvent.EventType[key], ol.events.listen(this.mapBrowserEventHandler_, ol.MapBrowserEvent.EventType[key],
this.handleMapBrowserEvent, this); this.handleMapBrowserEvent, this);
} }
this.registerDisposable(mapBrowserEventHandler);
/** /**
* @private * @private
@@ -353,9 +356,7 @@ ol.Map = function(options) {
* @type {ol.renderer.Map} * @type {ol.renderer.Map}
* @private * @private
*/ */
this.renderer_ = this.renderer_ = new optionsInternal.rendererConstructor(this.viewport_, this);
new optionsInternal.rendererConstructor(this.viewport_, this);
this.registerDisposable(this.renderer_);
/** /**
* @type {function(Event)|undefined} * @type {function(Event)|undefined}
@@ -577,6 +578,8 @@ ol.Map.prototype.removePreRenderFunction = function(preRenderFunction) {
* @inheritDoc * @inheritDoc
*/ */
ol.Map.prototype.disposeInternal = function() { ol.Map.prototype.disposeInternal = function() {
this.mapBrowserEventHandler_.dispose();
this.renderer_.dispose();
ol.events.unlisten(this.viewport_, ol.events.EventType.WHEEL, ol.events.unlisten(this.viewport_, ol.events.EventType.WHEEL,
this.handleBrowserEvent, this); this.handleBrowserEvent, this);
ol.events.unlisten(this.viewport_, ol.events.EventType.MOUSEWHEEL, ol.events.unlisten(this.viewport_, ol.events.EventType.MOUSEWHEEL,
+3 -4
View File
@@ -2,14 +2,14 @@
goog.provide('ol.render.Box'); goog.provide('ol.render.Box');
goog.require('goog.Disposable');
goog.require('goog.asserts'); goog.require('goog.asserts');
goog.require('ol.Disposable');
goog.require('ol.geom.Polygon'); goog.require('ol.geom.Polygon');
/** /**
* @constructor * @constructor
* @extends {goog.Disposable} * @extends {ol.Disposable}
* @param {string} className CSS class name. * @param {string} className CSS class name.
*/ */
ol.render.Box = function(className) { ol.render.Box = function(className) {
@@ -47,7 +47,7 @@ ol.render.Box = function(className) {
this.endPixel_ = null; this.endPixel_ = null;
}; };
goog.inherits(ol.render.Box, goog.Disposable); goog.inherits(ol.render.Box, ol.Disposable);
/** /**
@@ -55,7 +55,6 @@ goog.inherits(ol.render.Box, goog.Disposable);
*/ */
ol.render.Box.prototype.disposeInternal = function() { ol.render.Box.prototype.disposeInternal = function() {
this.setMap(null); this.setMap(null);
goog.base(this, 'disposeInternal');
}; };
+3 -4
View File
@@ -1,11 +1,11 @@
goog.provide('ol.RendererType'); goog.provide('ol.RendererType');
goog.provide('ol.renderer.Map'); goog.provide('ol.renderer.Map');
goog.require('goog.Disposable');
goog.require('goog.asserts'); goog.require('goog.asserts');
goog.require('goog.functions'); goog.require('goog.functions');
goog.require('goog.vec.Mat4'); goog.require('goog.vec.Mat4');
goog.require('ol'); goog.require('ol');
goog.require('ol.Disposable');
goog.require('ol.events'); goog.require('ol.events');
goog.require('ol.events.EventType'); goog.require('ol.events.EventType');
goog.require('ol.extent'); goog.require('ol.extent');
@@ -29,7 +29,7 @@ ol.RendererType = {
/** /**
* @constructor * @constructor
* @extends {goog.Disposable} * @extends {ol.Disposable}
* @param {Element} container Container. * @param {Element} container Container.
* @param {ol.Map} map Map. * @param {ol.Map} map Map.
* @struct * @struct
@@ -58,7 +58,7 @@ ol.renderer.Map = function(container, map) {
this.layerRendererListeners_ = {}; this.layerRendererListeners_ = {};
}; };
goog.inherits(ol.renderer.Map, goog.Disposable); goog.inherits(ol.renderer.Map, ol.Disposable);
/** /**
@@ -96,7 +96,6 @@ ol.renderer.Map.prototype.disposeInternal = function() {
for (var id in this.layerRenderers_) { for (var id in this.layerRenderers_) {
this.layerRenderers_[id].dispose(); this.layerRenderers_[id].dispose();
} }
goog.base(this, 'disposeInternal');
}; };
@@ -102,7 +102,6 @@ describe('ol.control.ZoomSlider', function() {
}); });
it('[horizontal] handles a drag sequence', function() { it('[horizontal] handles a drag sequence', function() {
var spy = sinon.spy(goog.Disposable.prototype, 'registerDisposable');
var control = new ol.control.ZoomSlider(); var control = new ol.control.ZoomSlider();
map.addControl(control); map.addControl(control);
map.getView().setZoom(0); map.getView().setZoom(0);
@@ -111,8 +110,7 @@ describe('ol.control.ZoomSlider', function() {
control.element.firstChild.style.width = '100px'; control.element.firstChild.style.width = '100px';
control.element.firstChild.style.height = '10px'; control.element.firstChild.style.height = '10px';
map.renderSync(); map.renderSync();
var dragger = spy.firstCall.args[0]; var dragger = control.dragger_;
spy.restore();
var event = new ol.pointer.PointerEvent(ol.pointer.EventType.POINTERDOWN, { var event = new ol.pointer.PointerEvent(ol.pointer.EventType.POINTERDOWN, {
target: control.element.firstElementChild target: control.element.firstElementChild
}); });
@@ -138,7 +136,6 @@ describe('ol.control.ZoomSlider', function() {
expect(control.dragging_).to.be(false); expect(control.dragging_).to.be(false);
}); });
it('[vertical] handles a drag sequence', function() { it('[vertical] handles a drag sequence', function() {
var spy = sinon.spy(goog.Disposable.prototype, 'registerDisposable');
var control = new ol.control.ZoomSlider(); var control = new ol.control.ZoomSlider();
control.element.style.width = '10px'; control.element.style.width = '10px';
control.element.style.height = '100px'; control.element.style.height = '100px';
@@ -147,8 +144,7 @@ describe('ol.control.ZoomSlider', function() {
map.addControl(control); map.addControl(control);
map.getView().setZoom(8); map.getView().setZoom(8);
map.renderSync(); map.renderSync();
var dragger = spy.firstCall.args[0]; var dragger = control.dragger_;
spy.restore();
var event = new ol.pointer.PointerEvent(ol.pointer.EventType.POINTERDOWN, { var event = new ol.pointer.PointerEvent(ol.pointer.EventType.POINTERDOWN, {
target: control.element.firstElementChild target: control.element.firstElementChild
}); });
@@ -177,7 +173,6 @@ describe('ol.control.ZoomSlider', function() {
}); });
goog.require('goog.Disposable');
goog.require('goog.dom.classlist'); goog.require('goog.dom.classlist');
goog.require('ol.Map'); goog.require('ol.Map');
goog.require('ol.View'); goog.require('ol.View');