Don't let button controls interfer with handlers.
This change involves removal of the map's eventsDiv and introduces an OpenLayers.Events.buttonclick component that adds a buttonclick event which makes sure that only events that are not related to clicking a button propagate. This allows button controls to be on the map's viewPortDiv again.
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
/**
|
||||
* @requires OpenLayers/Control.js
|
||||
* @requires OpenLayers/BaseTypes.js
|
||||
* @requires OpenLayers/Events.js
|
||||
* @requires OpenLayers/Events/buttonclick.js
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -157,7 +157,7 @@ OpenLayers.Control.OverviewMap = OpenLayers.Class(OpenLayers.Control, {
|
||||
this.handlers.drag.destroy();
|
||||
}
|
||||
|
||||
this.ovmap && this.ovmap.eventsDiv.removeChild(this.extentRectangle);
|
||||
this.ovmap && this.ovmap.viewPortDiv.removeChild(this.extentRectangle);
|
||||
this.extentRectangle = null;
|
||||
|
||||
if (this.rectEvents) {
|
||||
@@ -177,20 +177,19 @@ OpenLayers.Control.OverviewMap = OpenLayers.Class(OpenLayers.Control, {
|
||||
this.element = null;
|
||||
|
||||
if (this.maximizeDiv) {
|
||||
OpenLayers.Event.stopObservingElement(this.maximizeDiv);
|
||||
this.div.removeChild(this.maximizeDiv);
|
||||
this.maximizeDiv = null;
|
||||
}
|
||||
|
||||
if (this.minimizeDiv) {
|
||||
OpenLayers.Event.stopObservingElement(this.minimizeDiv);
|
||||
this.div.removeChild(this.minimizeDiv);
|
||||
this.minimizeDiv = null;
|
||||
}
|
||||
|
||||
this.map.events.un({
|
||||
"moveend": this.update,
|
||||
"changebaselayer": this.baseLayerDraw,
|
||||
buttonclick: this.onButtonClick,
|
||||
moveend: this.update,
|
||||
changebaselayer: this.baseLayerDraw,
|
||||
scope: this
|
||||
});
|
||||
|
||||
@@ -247,11 +246,7 @@ OpenLayers.Control.OverviewMap = OpenLayers.Class(OpenLayers.Control, {
|
||||
img,
|
||||
'absolute');
|
||||
this.maximizeDiv.style.display = 'none';
|
||||
this.maximizeDiv.className = this.displayClass + 'MaximizeButton';
|
||||
OpenLayers.Event.observe(this.maximizeDiv, 'click',
|
||||
OpenLayers.Function.bindAsEventListener(this.maximizeControl,
|
||||
this)
|
||||
);
|
||||
this.maximizeDiv.className = this.displayClass + 'MaximizeButton olButton';
|
||||
this.div.appendChild(this.maximizeDiv);
|
||||
|
||||
// minimize button div
|
||||
@@ -263,26 +258,8 @@ OpenLayers.Control.OverviewMap = OpenLayers.Class(OpenLayers.Control, {
|
||||
img,
|
||||
'absolute');
|
||||
this.minimizeDiv.style.display = 'none';
|
||||
this.minimizeDiv.className = this.displayClass + 'MinimizeButton';
|
||||
OpenLayers.Event.observe(this.minimizeDiv, 'click',
|
||||
OpenLayers.Function.bindAsEventListener(this.minimizeControl,
|
||||
this)
|
||||
);
|
||||
this.div.appendChild(this.minimizeDiv);
|
||||
|
||||
var eventsToStop = ['dblclick','mousedown'];
|
||||
|
||||
for (var i=0, len=eventsToStop.length; i<len; i++) {
|
||||
|
||||
OpenLayers.Event.observe(this.maximizeDiv,
|
||||
eventsToStop[i],
|
||||
OpenLayers.Event.stop);
|
||||
|
||||
OpenLayers.Event.observe(this.minimizeDiv,
|
||||
eventsToStop[i],
|
||||
OpenLayers.Event.stop);
|
||||
}
|
||||
|
||||
this.minimizeDiv.className = this.displayClass + 'MinimizeButton olButton';
|
||||
this.div.appendChild(this.minimizeDiv);
|
||||
this.minimizeControl();
|
||||
} else {
|
||||
// show the overview map
|
||||
@@ -292,7 +269,11 @@ OpenLayers.Control.OverviewMap = OpenLayers.Class(OpenLayers.Control, {
|
||||
this.update();
|
||||
}
|
||||
|
||||
this.map.events.register('moveend', this, this.update);
|
||||
this.map.events.on({
|
||||
buttonclick: this.onButtonClick,
|
||||
moveend: this.update,
|
||||
scope: this
|
||||
});
|
||||
|
||||
if (this.maximized) {
|
||||
this.maximizeControl();
|
||||
@@ -363,6 +344,21 @@ OpenLayers.Control.OverviewMap = OpenLayers.Class(OpenLayers.Control, {
|
||||
newTop));
|
||||
this.updateMapToRect();
|
||||
},
|
||||
|
||||
/**
|
||||
* Method: onButtonClick
|
||||
*
|
||||
* Parameters:
|
||||
* evt - {Event}
|
||||
*/
|
||||
onButtonClick: function(evt) {
|
||||
if (evt.button === this.minimizeDiv) {
|
||||
this.minimizeControl();
|
||||
propagate = false;
|
||||
} else if (evt.button === this.maximizeDiv) {
|
||||
this.maximizeControl();
|
||||
};
|
||||
},
|
||||
|
||||
/**
|
||||
* Method: maximizeControl
|
||||
@@ -488,7 +484,7 @@ OpenLayers.Control.OverviewMap = OpenLayers.Class(OpenLayers.Control, {
|
||||
{controls: [], maxResolution: 'auto',
|
||||
fallThrough: false}, this.mapOptions);
|
||||
this.ovmap = new OpenLayers.Map(this.mapDiv, options);
|
||||
this.ovmap.eventsDiv.appendChild(this.extentRectangle);
|
||||
this.ovmap.viewPortDiv.appendChild(this.extentRectangle);
|
||||
|
||||
// prevent ovmap from being destroyed when the page unloads, because
|
||||
// the OverviewMap control has to do this (and does it).
|
||||
|
||||
Reference in New Issue
Block a user