Merge pull request #167 from ahocevar/button-controls-improved
Fixing PanZoomBar and Panel issues after #164. r=@elemoine
This commit is contained in:
@@ -197,9 +197,9 @@ OpenLayers.Control.LayerSwitcher =
|
||||
* evt - {Event}
|
||||
*/
|
||||
onButtonClick: function(evt) {
|
||||
if (evt.button === this.minimizeDiv) {
|
||||
if (evt.buttonElement === this.minimizeDiv) {
|
||||
this.minimizeControl();
|
||||
} else if (evt.button === this.maximizeDiv) {
|
||||
} else if (evt.buttonElement === this.maximizeDiv) {
|
||||
this.maximizeControl();
|
||||
};
|
||||
},
|
||||
|
||||
@@ -352,9 +352,9 @@ OpenLayers.Control.OverviewMap = OpenLayers.Class(OpenLayers.Control, {
|
||||
* evt - {Event}
|
||||
*/
|
||||
onButtonClick: function(evt) {
|
||||
if (evt.button === this.minimizeDiv) {
|
||||
if (evt.buttonElement === this.minimizeDiv) {
|
||||
this.minimizeControl();
|
||||
} else if (evt.button === this.maximizeDiv) {
|
||||
} else if (evt.buttonElement === this.maximizeDiv) {
|
||||
this.maximizeControl();
|
||||
};
|
||||
},
|
||||
|
||||
@@ -176,7 +176,7 @@ OpenLayers.Control.PanZoom = OpenLayers.Class(OpenLayers.Control, {
|
||||
* evt - {Event}
|
||||
*/
|
||||
onButtonClick: function(evt) {
|
||||
var btn = evt.button;
|
||||
var btn = evt.buttonElement;
|
||||
switch (btn.action) {
|
||||
case "panup":
|
||||
this.map.pan(0, -this.getSlideFactor("h"));
|
||||
|
||||
@@ -47,12 +47,6 @@ OpenLayers.Control.PanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, {
|
||||
*/
|
||||
zoombarDiv: null,
|
||||
|
||||
/**
|
||||
* Property: divEvents
|
||||
* {<OpenLayers.Events>}
|
||||
*/
|
||||
divEvents: null,
|
||||
|
||||
/**
|
||||
* APIProperty: zoomWorldIcon
|
||||
* {Boolean}
|
||||
@@ -212,9 +206,7 @@ OpenLayers.Control.PanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, {
|
||||
"touchend": this.zoomBarUp,
|
||||
"mousedown": this.zoomBarDown,
|
||||
"mousemove": this.zoomBarDrag,
|
||||
"mouseup": this.zoomBarUp,
|
||||
"dblclick": this.doubleClick,
|
||||
"click": this.doubleClick
|
||||
"mouseup": this.zoomBarUp
|
||||
});
|
||||
|
||||
var sz = {
|
||||
@@ -239,18 +231,9 @@ OpenLayers.Control.PanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, {
|
||||
imgLocation);
|
||||
}
|
||||
div.style.cursor = "pointer";
|
||||
div.className = "olButton";
|
||||
this.zoombarDiv = div;
|
||||
|
||||
this.divEvents = new OpenLayers.Events(this, div, null, true,
|
||||
{includeXY: true});
|
||||
this.divEvents.on({
|
||||
"touchmove": this.passEventToSlider,
|
||||
"mousedown": this.divClick,
|
||||
"mousemove": this.passEventToSlider,
|
||||
"dblclick": this.doubleClick,
|
||||
"click": this.doubleClick
|
||||
});
|
||||
|
||||
this.div.appendChild(div);
|
||||
|
||||
this.startTop = parseInt(div.style.top);
|
||||
@@ -268,23 +251,14 @@ OpenLayers.Control.PanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, {
|
||||
*/
|
||||
_removeZoomBar: function() {
|
||||
this.sliderEvents.un({
|
||||
"touchstart": this.zoomBarDown,
|
||||
"touchmove": this.zoomBarDrag,
|
||||
"touchend": this.zoomBarUp,
|
||||
"mousedown": this.zoomBarDown,
|
||||
"mousemove": this.zoomBarDrag,
|
||||
"mouseup": this.zoomBarUp,
|
||||
"dblclick": this.doubleClick,
|
||||
"click": this.doubleClick
|
||||
"mouseup": this.zoomBarUp
|
||||
});
|
||||
this.sliderEvents.destroy();
|
||||
|
||||
this.divEvents.un({
|
||||
"touchmove": this.passEventToSlider,
|
||||
"mousedown": this.divClick,
|
||||
"mousemove": this.passEventToSlider,
|
||||
"dblclick": this.doubleClick,
|
||||
"click": this.doubleClick
|
||||
});
|
||||
this.divEvents.destroy();
|
||||
|
||||
this.div.removeChild(this.zoombarDiv);
|
||||
this.zoombarDiv = null;
|
||||
@@ -294,6 +268,25 @@ OpenLayers.Control.PanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, {
|
||||
this.map.events.unregister("zoomend", this, this.moveZoomBar);
|
||||
},
|
||||
|
||||
/**
|
||||
* Method: onButtonClick
|
||||
*
|
||||
* Parameters:
|
||||
* evt - {Event}
|
||||
*/
|
||||
onButtonClick: function(evt) {
|
||||
OpenLayers.Control.PanZoom.prototype.onButtonClick.apply(this, arguments);
|
||||
if (evt.buttonElement === this.zoombarDiv) {
|
||||
var levels = evt.buttonXY.y / this.zoomStopHeight;
|
||||
if(this.forceFixedZoomLevel || !this.map.fractionalZoom) {
|
||||
levels = Math.floor(levels);
|
||||
}
|
||||
var zoom = (this.map.getNumZoomLevels() - 1) - levels;
|
||||
zoom = Math.min(Math.max(zoom, 0), this.map.getNumZoomLevels() - 1);
|
||||
this.map.zoomTo(zoom);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Method: passEventToSlider
|
||||
* This function is used to pass events that happen on the div, or the map,
|
||||
@@ -306,25 +299,6 @@ OpenLayers.Control.PanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, {
|
||||
this.sliderEvents.handleBrowserEvent(evt);
|
||||
},
|
||||
|
||||
/**
|
||||
* Method: divClick
|
||||
* Picks up on clicks directly on the zoombar div
|
||||
* and sets the zoom level appropriately.
|
||||
*/
|
||||
divClick: function (evt) {
|
||||
if (!OpenLayers.Event.isLeftClick(evt)) {
|
||||
return;
|
||||
}
|
||||
var levels = evt.xy.y / this.zoomStopHeight;
|
||||
if(this.forceFixedZoomLevel || !this.map.fractionalZoom) {
|
||||
levels = Math.floor(levels);
|
||||
}
|
||||
var zoom = (this.map.getNumZoomLevels() - 1) - levels;
|
||||
zoom = Math.min(Math.max(zoom, 0), this.map.getNumZoomLevels() - 1);
|
||||
this.map.zoomTo(zoom);
|
||||
OpenLayers.Event.stop(evt);
|
||||
},
|
||||
|
||||
/*
|
||||
* Method: zoomBarDown
|
||||
* event listener for clicks on the slider
|
||||
@@ -425,4 +399,4 @@ OpenLayers.Control.PanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, {
|
||||
},
|
||||
|
||||
CLASS_NAME: "OpenLayers.Control.PanZoomBar"
|
||||
});
|
||||
});
|
||||
@@ -170,7 +170,7 @@ OpenLayers.Control.Panel = OpenLayers.Class(OpenLayers.Control, {
|
||||
draw: function() {
|
||||
OpenLayers.Control.prototype.draw.apply(this, arguments);
|
||||
if (this.outsideViewport) {
|
||||
this.events.element = this.div;
|
||||
this.events.attachToElement(this.div);
|
||||
this.events.register("buttonclick", this, this.onButtonClick);
|
||||
} else {
|
||||
this.map.events.register("buttonclick", this, this.onButtonClick);
|
||||
@@ -322,7 +322,7 @@ OpenLayers.Control.Panel = OpenLayers.Class(OpenLayers.Control, {
|
||||
*/
|
||||
onButtonClick: function (evt) {
|
||||
var controls = this.controls,
|
||||
button = evt.button || OpenLayers.Event.element(evt);
|
||||
button = evt.buttonElement;
|
||||
for (var i=controls.length-1; i>=0; --i) {
|
||||
if (controls[i].panel_div === button) {
|
||||
this.activateControl(controls[i]);
|
||||
|
||||
Reference in New Issue
Block a user