]> git.openstreetmap.org Git - rails.git/blobdiff - public/javascripts/openstreetbugs.js
Use correct URL for note details
[rails.git] / public / javascripts / openstreetbugs.js
index 66f55a035fa5bf9958a722f2484f089464f42c9d..323b04472a6fdc347a58874f9a0fcbe318437440 100644 (file)
@@ -15,6 +15,8 @@
  * Even though the OpenStreetBugs API originally does not intend this, you can create multiple instances of this Layer and add them to different maps (or to one single map for whatever crazy reason) without problems.
 */
 
+/** This version has been adapted from the original javascript library to fit the openstreetmap rails_port implementation */
+
 OpenLayers.Layer.OpenStreetBugs = new OpenLayers.Class(OpenLayers.Layer.Markers, {
        /**
         * The URL of the OpenStreetBugs API.
@@ -246,7 +248,7 @@ OpenLayers.Layer.OpenStreetBugs = new OpenLayers.Class(OpenLayers.Layer.Markers,
                if(!bounds) return false;
                bounds.transform(this.map.getProjectionObject(), this.apiProjection);
 
-               this.apiRequest("bugs"
+               this.apiRequest("notes"
                        + "?bbox="+this.round(bounds.left, 5)
             + ","+this.round(bounds.bottom, 5)
                    + ","+this.round(bounds.right, 5)                   
@@ -292,8 +294,8 @@ OpenLayers.Layer.OpenStreetBugs = new OpenLayers.Class(OpenLayers.Layer.Markers,
                var marker = feature.createMarker();
                marker.feature = feature;
                marker.events.register("click", feature, this.markerClick);
-               marker.events.register("mouseover", feature, this.markerMouseOver);
-               marker.events.register("mouseout", feature, this.markerMouseOut);
+               //marker.events.register("mouseover", feature, this.markerMouseOver);
+               //marker.events.register("mouseout", feature, this.markerMouseOut);
                this.addMarker(marker);
 
                this.bugs[id] = feature;
@@ -315,11 +317,11 @@ OpenLayers.Layer.OpenStreetBugs = new OpenLayers.Class(OpenLayers.Layer.Markers,
                var newContent = document.createElement("div");
 
                el1 = document.createElement("h3");
-               el1.appendChild(document.createTextNode(closed ? i18n("javascripts.osb.Fixed Error") : i18n("javascripts.osb.Unresolved Error")));
+               el1.appendChild(document.createTextNode(putAJAXMarker.bugs[id][2] ? i18n("javascripts.osb.Fixed Error") : i18n("javascripts.osb.Unresolved Error")));
 
                el1.appendChild(document.createTextNode(" ["));
                el2 = document.createElement("a");
-               el2.href = "/browse/bug/" + id;
+               el2.href = "/browse/note/" + id;
                el2.onclick = function(){ layer.map.setCenter(putAJAXMarker.bugs[id][0].clone().transform(layer.apiProjection, layer.map.getProjectionObject()), 15); };
                el2.appendChild(document.createTextNode(i18n("javascripts.osb.Details")));
                el1.appendChild(el2);
@@ -365,6 +367,7 @@ OpenLayers.Layer.OpenStreetBugs = new OpenLayers.Class(OpenLayers.Layer.Markers,
                        el2.className = (i == 0 ? "osb-description" : "osb-comment");
                        el2.appendChild(document.createTextNode(putAJAXMarker.bugs[id][1][i]));
                        el1.appendChild(el2);
+            if (i == 0) { el2 = document.createElement("br"); el1.appendChild(el2);};
                }
                containerDescription.appendChild(el1);
 
@@ -373,7 +376,7 @@ OpenLayers.Layer.OpenStreetBugs = new OpenLayers.Class(OpenLayers.Layer.Markers,
                        el1 = document.createElement("p");
                        el1.className = "osb-fixed";
                        el2 = document.createElement("em");
-                       el2.appendChild(document.createTextNode(i18n("javascripts.osb.Has been fixed.")));
+                       el2.appendChild(document.createTextNode(i18n("javascripts.osb.Has been fixed")));
                        el1.appendChild(el2);
                        containerDescription.appendChild(el1);
                }
@@ -418,7 +421,9 @@ OpenLayers.Layer.OpenStreetBugs = new OpenLayers.Class(OpenLayers.Layer.Markers,
                        el1.appendChild(el2);
                        el2 = document.createElement("dd");
                        var inputComment = document.createElement("textarea");
-                       inputComment.setAttribute("cols",40);                   
+                       inputComment.setAttribute("cols",40);
+            inputComment.setAttribute("rows",3);
+       
                        el2.appendChild(inputComment);
                        el1.appendChild(el2);
                        
@@ -428,7 +433,8 @@ OpenLayers.Layer.OpenStreetBugs = new OpenLayers.Class(OpenLayers.Layer.Markers,
                        el1.className = "buttons";
                        el2 = document.createElement("li");
                        el3 = document.createElement("input");
-                       el3.setAttribute("type", "submit");
+                       el3.setAttribute("type", "button");
+            el3.onclick = function(){ this.form.onsubmit(); return false; };
                        el3.value = i18n("javascripts.osb.Add comment");
                        el2.appendChild(el3);
                        el1.appendChild(el2);
@@ -461,7 +467,7 @@ OpenLayers.Layer.OpenStreetBugs = new OpenLayers.Class(OpenLayers.Layer.Markers,
         * @param String description
        */
        createBug: function(lonlat, description) {
-               this.apiRequest("bug/create"
+               this.apiRequest("note/create"
                        + "?lat="+encodeURIComponent(lonlat.lat)
                        + "&lon="+encodeURIComponent(lonlat.lon)
                        + "&text="+encodeURIComponent(description)
@@ -476,7 +482,7 @@ OpenLayers.Layer.OpenStreetBugs = new OpenLayers.Class(OpenLayers.Layer.Markers,
         * @param String comment
        */
        submitComment: function(id, comment) {
-               this.apiRequest("bug/"+encodeURIComponent(id)+"/comment"
+               this.apiRequest("note/"+encodeURIComponent(id)+"/comment"
                        + "?text="+encodeURIComponent(comment)
                        + "&name="+encodeURIComponent(this.getUserName())
                        + "&format=js"
@@ -488,7 +494,7 @@ OpenLayers.Layer.OpenStreetBugs = new OpenLayers.Class(OpenLayers.Layer.Markers,
         * @param Number id
        */
        closeBug: function(id) {
-               this.apiRequest("bug/"+encodeURIComponent(id)+"/close"
+               this.apiRequest("note/"+encodeURIComponent(id)+"/close"
                        + "?format=js"
                );
        },
@@ -632,11 +638,15 @@ OpenLayers.Control.OpenStreetBugs = new OpenLayers.Class(OpenLayers.Control, {
         * 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;
@@ -644,14 +654,41 @@ OpenLayers.Control.OpenStreetBugs = new OpenLayers.Class(OpenLayers.Control, {
                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");
-               el_form.onsubmit = function() { control.osbLayer.createBug(lonlatApi, inputDescription.value); marker.feature = null; feature.destroy(); return false; };
 
                el1 = document.createElement("dl");
                el2 = document.createElement("dt");
@@ -675,6 +712,8 @@ OpenLayers.Control.OpenStreetBugs = new OpenLayers.Class(OpenLayers.Control, {
                el3.appendChild(document.createTextNode(i18n("javascripts.osb.Login")));
                el2.appendChild(el3);
                el1.appendChild(el2);
+               el2 = document.createElement("br");
+        el1.appendChild(el2);
 
                el2 = document.createElement("dt");
                el2.appendChild(document.createTextNode(i18n("javascripts.osb.Bug description")));
@@ -682,23 +721,38 @@ OpenLayers.Control.OpenStreetBugs = new OpenLayers.Class(OpenLayers.Control, {
                el2 = document.createElement("dd");
                var inputDescription = document.createElement("textarea");
                inputDescription.setAttribute("cols",40);
+               inputDescription.setAttribute("rows",3);
                el2.appendChild(inputDescription);
                el1.appendChild(el2);
                el_form.appendChild(el1);
 
                el1 = document.createElement("div");
                el2 = document.createElement("input");
-               el2.setAttribute("type", "submit");
+               el2.setAttribute("type", "button");
                el2.value = i18n("javascripts.osb.Create");
+        el2.onclick = function() { control.osbLayer.createBug(lonlatApi, inputDescription.value); marker.feature = null; feature.destroy(); return false; };
+               el1.appendChild(el2);
+               el2 = document.createElement("input");
+               el2.setAttribute("type", "button");
+               el2.value = i18n("javascripts.osb.Cancel");
+               el2.onclick = function(){ feature.destroy(); };
                el1.appendChild(el2);
                el_form.appendChild(el1);
                newContent.appendChild(el_form);
 
+               el2 = document.createElement("hr");
+               el1.appendChild(el2);
+               el2 = document.createElement("a");
+               el2.setAttribute("href","edit");
+               el2.appendChild(document.createTextNode(i18n("javascripts.osb.edityourself")));
+               el1.appendChild(el2);
+
                feature.data.popupContentHTML = newContent;
                var popup = feature.createPopup(true);
                popup.events.register("close", this, function(){ feature.destroy(); });
                this.map.addPopup(popup);
                popup.updateSize();
+               marker.popup = popup;
        },
 
        CLASS_NAME: "OpenLayers.Control.OpenStreetBugs"