diff --git a/app/assets/javascripts/index/new_note.js b/app/assets/javascripts/index/new_note.js index e717be82c2..9fd61b0538 100644 --- a/app/assets/javascripts/index/new_note.js +++ b/app/assets/javascripts/index/new_note.js @@ -107,6 +107,14 @@ OSM.NewNote = function (map) { newNoteMarker = null; } + function updateControls() { + const zoomedOut = addNoteButton.hasClass("disabled"); + const withoutText = content.find("textarea").val() === ""; + + content.find("#new-note-zoom-warning").prop("hidden", !zoomedOut); + content.find("input[type=submit]").prop("disabled", zoomedOut || withoutText); + } + page.pushstate = page.popstate = function (path) { OSM.loadSidebarContent(path, function () { page.load(path); @@ -114,9 +122,6 @@ OSM.NewNote = function (map) { }; page.load = function (path) { - if (addNoteButton.hasClass("disabled")) return; - if (addNoteButton.hasClass("active")) return; - addNoteButton.addClass("active"); map.addLayer(noteLayer); @@ -137,13 +142,9 @@ OSM.NewNote = function (map) { addNewNoteMarker(markerLatlng); content.find("textarea") - .on("input", disableWhenBlank) + .on("input", updateControls) .focus(); - function disableWhenBlank(e) { - $(e.target.form.add).prop("disabled", $(e.target).val() === ""); - } - content.find("input[type=submit]").on("click", function (e) { const location = newNoteMarker.getLatLng().wrap(); const text = content.find("textarea").val(); @@ -160,10 +161,14 @@ OSM.NewNote = function (map) { }); }); + addNoteButton.on("disabled enabled", updateControls); + updateControls(); + return map.getState(); }; page.unload = function () { + addNoteButton.off("disabled enabled", updateControls); removeNewNoteMarker(); addNoteButton.removeClass("active"); }; diff --git a/app/assets/javascripts/leaflet.note.js b/app/assets/javascripts/leaflet.note.js index 5f80109673..19fc9392c0 100644 --- a/app/assets/javascripts/leaflet.note.js +++ b/app/assets/javascripts/leaflet.note.js @@ -14,12 +14,19 @@ L.OSM.note = function (options) { map.on("zoomend", update); function update() { - var disabled = OSM.STATUS === "database_offline" || map.getZoom() < 12; + var wasDisabled = link.hasClass("disabled"), + isDisabled = OSM.STATUS === "database_offline" || map.getZoom() < 12; link - .toggleClass("disabled", disabled) - .attr("data-bs-original-title", I18n.t(disabled ? + .toggleClass("disabled", isDisabled) + .attr("data-bs-original-title", I18n.t(isDisabled ? "javascripts.site.createnote_disabled_tooltip" : "javascripts.site.createnote_tooltip")); + + if (isDisabled && !wasDisabled) { + link.trigger("disabled"); + } else if (wasDisabled && !isDisabled) { + link.trigger("enabled"); + } } update(); diff --git a/app/views/notes/new.html.erb b/app/views/notes/new.html.erb index c9b1275b94..f461f60e23 100644 --- a/app/views/notes/new.html.erb +++ b/app/views/notes/new.html.erb @@ -9,6 +9,7 @@ :log_in => link_to(t(".anonymous_warning_log_in"), login_path(:referer => new_note_path)), :sign_up => link_to(t(".anonymous_warning_sign_up"), user_new_path) %>
<% end %> +<%= t "javascripts.site.createnote_disabled_tooltip" %>