Merge pull request #636 from bartvde/autoresize
introduce new property on the Map called autoUpdateSize (r=@ahocevar)
This commit is contained in:
+29
-18
@@ -377,6 +377,13 @@ OpenLayers.Map = OpenLayers.Class({
|
|||||||
*/
|
*/
|
||||||
fallThrough: true,
|
fallThrough: true,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* APIProperty: autoUpdateSize
|
||||||
|
* {Boolean} Should OpenLayers automatically update the size of the map
|
||||||
|
* when the resize event is fired. Default is true.
|
||||||
|
*/
|
||||||
|
autoUpdateSize: true,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Property: panTween
|
* Property: panTween
|
||||||
* {<OpenLayers.Tween>} Animated panning tween object, see panTo()
|
* {<OpenLayers.Tween>} Animated panning tween object, see panTo()
|
||||||
@@ -579,19 +586,21 @@ OpenLayers.Map = OpenLayers.Class({
|
|||||||
this.events.on(this.eventListeners);
|
this.events.on(this.eventListeners);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Because Mozilla does not support the "resize" event for elements
|
if (this.autoUpdateSize === true) {
|
||||||
// other than "window", we need to put a hack here.
|
// Because Mozilla does not support the "resize" event for elements
|
||||||
if (parseFloat(navigator.appVersion.split("MSIE")[1]) < 9) {
|
// other than "window", we need to put a hack here.
|
||||||
// If IE < 9, register the resize on the div
|
if (parseFloat(navigator.appVersion.split("MSIE")[1]) < 9) {
|
||||||
this.events.register("resize", this, this.updateSize);
|
// If IE < 9, register the resize on the div
|
||||||
} else {
|
this.events.register("resize", this, this.updateSize);
|
||||||
// Else updateSize on catching the window's resize
|
} else {
|
||||||
// Note that this is ok, as updateSize() does nothing if the
|
// Else updateSize on catching the window's resize
|
||||||
// map's size has not actually changed.
|
// Note that this is ok, as updateSize() does nothing if the
|
||||||
this.updateSizeDestroy = OpenLayers.Function.bind(this.updateSize,
|
// map's size has not actually changed.
|
||||||
this);
|
this.updateSizeDestroy = OpenLayers.Function.bind(this.updateSize,
|
||||||
OpenLayers.Event.observe(window, 'resize',
|
this);
|
||||||
this.updateSizeDestroy);
|
OpenLayers.Event.observe(window, 'resize',
|
||||||
|
this.updateSizeDestroy);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// only append link stylesheet if the theme property is set
|
// only append link stylesheet if the theme property is set
|
||||||
@@ -744,11 +753,13 @@ OpenLayers.Map = OpenLayers.Class({
|
|||||||
OpenLayers.Event.stopObserving(window, 'unload', this.unloadDestroy);
|
OpenLayers.Event.stopObserving(window, 'unload', this.unloadDestroy);
|
||||||
this.unloadDestroy = null;
|
this.unloadDestroy = null;
|
||||||
|
|
||||||
if (this.updateSizeDestroy) {
|
if (this.autoUpdateSize === true) {
|
||||||
OpenLayers.Event.stopObserving(window, 'resize',
|
if (this.updateSizeDestroy) {
|
||||||
this.updateSizeDestroy);
|
OpenLayers.Event.stopObserving(window, 'resize',
|
||||||
} else {
|
this.updateSizeDestroy);
|
||||||
this.events.unregister("resize", this, this.updateSize);
|
} else {
|
||||||
|
this.events.unregister("resize", this, this.updateSize);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.paddingForPopups = null;
|
this.paddingForPopups = null;
|
||||||
|
|||||||
@@ -2090,6 +2090,48 @@
|
|||||||
t.ok(center.equals(new OpenLayers.LonLat(-13.25, 56)), "Center is correct and not equal to maxExtent's center");
|
t.ok(center.equals(new OpenLayers.LonLat(-13.25, 56)), "Center is correct and not equal to maxExtent's center");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function test_autoUpdateSize(t) {
|
||||||
|
t.plan(1);
|
||||||
|
OpenLayers.Event.unloadCache();
|
||||||
|
var resizeListener = false;
|
||||||
|
var register = OpenLayers.Events.prototype.register;
|
||||||
|
OpenLayers.Events.prototype.register = function(name, el , func) {
|
||||||
|
if (name === 'resize') {
|
||||||
|
resizeListener = true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var map = new OpenLayers.Map({
|
||||||
|
events: {
|
||||||
|
register: function(name, el, func) {
|
||||||
|
if (name === 'resize') {
|
||||||
|
resizeListener = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
autoUpdateSize: false,
|
||||||
|
div: 'map',
|
||||||
|
layers: [
|
||||||
|
new OpenLayers.Layer('name', {
|
||||||
|
isBaseLayer: true,
|
||||||
|
wrapDateLine: true
|
||||||
|
})
|
||||||
|
]
|
||||||
|
});
|
||||||
|
map.setCenter(new OpenLayers.LonLat(-1.3, 50.8), 4);
|
||||||
|
for (var key in OpenLayers.Event.observers) {
|
||||||
|
var obj = OpenLayers.Event.observers[key];
|
||||||
|
for (var i=0, ii=obj.length; i<ii; ++i) {
|
||||||
|
var listener = obj[i];
|
||||||
|
if (listener.name === 'resize' && listener.element === window) {
|
||||||
|
resizeListener = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
t.eq(resizeListener, map.autoUpdateSize, "resize listener not registered when autoUpdateSize is false");
|
||||||
|
map.destroy();
|
||||||
|
OpenLayers.Events.prototype.register = register;
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
Reference in New Issue
Block a user