map.addControl(map.osbControl);
var lBug = document.getElementById('ReportBug');
+ /* lBug.addEventListener('click',function (e) {
+ map.osbControl.activate(); document.getElementById("OpenLayers.Map_18_OpenLayers_Container").style.cursor = "crosshair" },false); */
lBug.addEventListener('click',function (e) {
- map.osbControl.activate(); document.getElementById("OpenLayers.Map_18_OpenLayers_Container").style.cursor = "crosshair" },false);
+ map.osbControl.activate(); map.osbControl.addTemporaryMarker(map.getCenter());},false);
map.events.register("zoomend",map,function () { var zoom = map.getZoom(); var lBug = document.getElementById('ReportBug')
if (zoom > 11) { lBug.style.visibility = 'visible';} else {lBug.style.visibility = "hidden";}});
* Map clicking event handler. Adds a temporary marker with a popup to the map, the popup contains the form to add a bug.
*/
click: function(e) {
+ var lonlat = this.map.getLonLatFromViewPortPx(e.xy);
+ this.addTemporaryMarker(lonlat);
+ },
+
+ addTemporaryMarker: function(lonlat) {
if(!this.map) return true;
deactivateControl();
var control = this;
- var lonlat = this.map.getLonLatFromViewPortPx(e.xy);
var lonlatApi = lonlat.clone().transform(this.map.getProjectionObject(), this.osbLayer.apiProjection);
var feature = new OpenLayers.Feature(this.osbLayer, lonlat, { icon: this.icon.clone(), autoSize: true });
feature.popupClass = OpenLayers.Popup.FramedCloud.OpenStreetBugs;
marker.feature = feature;
this.osbLayer.addMarker(marker);
+
+ /** Implement a drag and drop for markers */
+ /* TODO: veryfy that the scoping of variables works correctly everywhere */
+ var dragging = false;
+ var dragFunction = function(e) {
+ map.events.unregister("mouseup",map,dragFunction);
+ lonlat = map.getLonLatFromViewPortPx(e.xy);
+ lonlatApi = lonlat.clone().transform(map.getProjectionObject(), map.osbLayer.apiProjection);
+ marker.moveTo(map.getLayerPxFromViewPortPx(e.xy));
+ marker.popup.moveTo(map.getLayerPxFromViewPortPx(e.xy));
+ marker.popup.updateRelativePosition();
+ dragging = false;
+ return false;
+ };
+
+ marker.events.register("mouseover", this,
+ function(){ document.getElementById("OpenLayers.Map_18_OpenLayers_Container").style.cursor = "move"; });
+ marker.events.register("mouseout", this,
+ function(){ if (!dragging) {document.getElementById("OpenLayers.Map_18_OpenLayers_Container").style.cursor = "default"; }});
+ marker.events.register("mousedown", this,
+ function() { dragging = true; map.events.register("mouseup",map, dragFunction); return false;});
+
+
var newContent = document.createElement("div");
var el1,el2,el3;
el1 = document.createElement("h3");
el1.appendChild(document.createTextNode(i18n("javascripts.osb.Create bug")));
newContent.appendChild(el1);
+ newContent.appendChild(document.createTextNode(i18n("javascripts.osb.draghelp1")));
+ newContent.appendChild(document.createElement("br"));
+ newContent.appendChild(document.createTextNode(i18n("javascripts.osb.draghelp2")));
+ newContent.appendChild(document.createElement("br"));
+ newContent.appendChild(document.createElement("br"));
var el_form = document.createElement("form");
popup.events.register("close", this, function(){ feature.destroy(); });
this.map.addPopup(popup);
popup.updateSize();
+ marker.popup = popup;
},
CLASS_NAME: "OpenLayers.Control.OpenStreetBugs"