Merge pull request #58 from elemoine/dispose

The map should be disposable
This commit is contained in:
Éric Lemoine
2012-10-12 08:41:51 -07:00
6 changed files with 69 additions and 3 deletions

View File

@@ -49,6 +49,15 @@ ol.control.Control = function(controlOptions) {
goog.inherits(ol.control.Control, goog.Disposable);
/**
* @inheritDoc
*/
ol.control.Control.prototype.disposeInternal = function() {
goog.dom.removeNode(this.element);
goog.base(this, 'disposeInternal');
};
/**
* @return {ol.Map} Map.
*/

View File

@@ -290,6 +290,16 @@ ol.Map.prototype.canRotate = function() {
};
/**
*
* @inheritDoc
*/
ol.Map.prototype.disposeInternal = function() {
goog.dom.removeNode(this.viewport_);
goog.base(this, 'disposeInternal');
};
/**
* @param {ol.Extent} extent Extent.
*/

View File

@@ -285,9 +285,11 @@ ol.MapBrowserEventHandler.prototype.disposeInternal = function() {
this.handleUp_, false, this);
goog.events.unlisten(element,
goog.events.EventType.CLICK, this.click_, false, this);
goog.asserts.assert(goog.isDef(this.dragListenerKeys_));
goog.array.forEach(this.dragListenerKeys_, goog.events.unlistenByKey);
this.dragListenerKeys_ = null;
if (!goog.isNull(this.dragListenerKeys_)) {
goog.array.forEach(this.dragListenerKeys_, goog.events.unlistenByKey);
this.dragListenerKeys_ = null;
}
goog.base(this, 'disposeInternal');
};

View File

@@ -83,6 +83,7 @@
<script type="text/javascript" src="spec/ol/tilegrid.test.js"></script>
<script type="text/javascript" src="spec/ol/tilerange.test.js"></script>
<script type="text/javascript" src="spec/ol/tileurlfunction.test.js"></script>
<script type="text/javascript" src="spec/ol/control/control.test.js"></script>
<script type="text/javascript">
@@ -124,5 +125,6 @@
</head>
<body>
<div id="map"></div>
</body>
</html>

View File

@@ -0,0 +1,27 @@
goog.require('goog.dom');
goog.require('ol.Map');
goog.require('ol.control.Control');
describe('ol.control.Control', function() {
var map, control;
beforeEach(function() {
map = new ol.Map({
target: document.getElementById('map')
});
var element = goog.dom.createDom(goog.dom.TagName.DIV);
control = new ol.control.Control({element: element});
control.setMap(map);
});
afterEach(function() {
map.dispose();
});
describe('dispose', function() {
it('removes the control element from its parent', function() {
control.dispose();
expect(goog.dom.getParentElement(control.element)).toBeNull();
});
});
});

View File

@@ -1,7 +1,23 @@
goog.require('goog.dom');
goog.require('ol.Map');
describe('ol.Map', function() {
describe('dispose', function() {
var map;
beforeEach(function() {
map = new ol.Map({
target: document.getElementById('map')
});
});
it('removes the viewport from its parent', function() {
map.dispose();
expect(goog.dom.getParentElement(map.getViewport())).toBeNull();
});
});
describe('create constraints', function() {
describe('create resolution constraint', function() {