]> git.openstreetmap.org Git - rails.git/blobdiff - app/assets/javascripts/index/note.js
Merge remote-tracking branch 'upstream/pull/5346'
[rails.git] / app / assets / javascripts / index / note.js
index 15fedb1d113b52bbd8d402427af3d38c8c7f23ed..4e8f64d09c4684ae1827fabf1b6bef95b628ad6a 100644 (file)
@@ -22,44 +22,50 @@ OSM.Note = function (map) {
 
   page.pushstate = page.popstate = function (path, id) {
     OSM.loadSidebarContent(path, function () {
-      initialize(path, id, function () {
-        var data = $(".details").data();
-        if (!data) return;
-        var latLng = L.latLng(data.coordinates.split(","));
-        if (!map.getBounds().contains(latLng)) moveToNote();
-      });
+      initialize(path, id);
+
+      var data = $(".details").data();
+      if (!data) return;
+      var latLng = L.latLng(data.coordinates.split(","));
+      if (!map.getBounds().contains(latLng)) moveToNote();
     });
   };
 
   page.load = function (path, id) {
-    initialize(path, id, moveToNote);
+    initialize(path, id);
+    moveToNote();
   };
 
-  function initialize(path, id, callback) {
-    content.find("input[type=submit]").on("click", function (e) {
+  function initialize(path, id) {
+    content.find("button[name]").on("click", function (e) {
       e.preventDefault();
       var data = $(e.target).data();
-      var form = e.target.form;
-
-      $(form).find("input[type=submit]").prop("disabled", true);
-
-      $.ajax({
+      var name = $(e.target).attr("name");
+      var ajaxSettings = {
         url: data.url,
         type: data.method,
         oauth: true,
-        data: { text: $(form.text).val() },
-        success: function () {
-          OSM.loadSidebarContent(path, function () {
-            initialize(path, id, moveToNote);
+        success: () => {
+          OSM.loadSidebarContent(path, () => {
+            initialize(path, id);
+            moveToNote();
           });
         },
-        error: function (xhr) {
-          $(form).find("#comment-error")
+        error: (xhr) => {
+          content.find("#comment-error")
             .text(xhr.responseText)
-            .prop("hidden", false);
-          updateButtons(form);
+            .prop("hidden", false)
+            .get(0).scrollIntoView({ block: "nearest" });
+          updateButtons();
         }
-      });
+      };
+
+      if (name !== "subscribe" && name !== "unsubscribe") {
+        ajaxSettings.data = { text: $("textarea").val() };
+      }
+
+      content.find("button[name]").prop("disabled", true);
+      $.ajax(ajaxSettings);
     });
 
     content.find("textarea").on("input", function (e) {
@@ -78,18 +84,18 @@ OSM.Note = function (map) {
         icon: noteIcons[data.status]
       });
     }
-
-    if (callback) callback();
   }
 
-  function updateButtons(form) {
-    $(form).find("input[type=submit]").prop("disabled", false);
-    if ($(form.text).val() === "") {
-      $(form.close).val($(form.close).data("defaultActionText"));
-      $(form.comment).prop("disabled", true);
+  function updateButtons() {
+    var resolveButton = content.find("button[name='close']");
+    var commentButton = content.find("button[name='comment']");
+
+    content.find("button[name]").prop("disabled", false);
+    if (content.find("textarea").val() === "") {
+      resolveButton.text(resolveButton.data("defaultActionText"));
+      commentButton.prop("disabled", true);
     } else {
-      $(form.close).val($(form.close).data("commentActionText"));
-      $(form.comment).prop("disabled", false);
+      resolveButton.text(resolveButton.data("commentActionText"));
     }
   }