From 5424cfe2b344291bcae60a06a9ef80649d35084c Mon Sep 17 00:00:00 2001
From: Anton Khorev
Date: Thu, 26 Dec 2024 00:43:40 +0300
Subject: [PATCH] Let page.load proceed when zoomed out, disabling submit
Note that addNoteButton.hasClass("active") check in page.load is useless because page.unload removes this class.
---
app/assets/javascripts/index/new_note.js | 21 +++++++++++++--------
app/assets/javascripts/leaflet.note.js | 13 ++++++++++---
app/views/notes/new.html.erb | 1 +
test/system/create_note_test.rb | 21 +++++++++++++++++++++
4 files changed, 45 insertions(+), 11 deletions(-)
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" %>