halo = null;
}
+ function addNewNoteMarker(latlng) {
+ if (newNoteMarker) map.removeLayer(newNoteMarker);
+
+ newNoteMarker = L.marker(latlng, {
+ icon: noteIcons.new,
+ opacity: 0.9,
+ draggable: true
+ });
+
+ newNoteMarker.on("dragstart dragend", function (a) {
+ removeHalo();
+ if (a.type === "dragend") {
+ addHalo(newNoteMarker.getLatLng());
+ }
+ });
+
+ newNoteMarker.addTo(map);
+ addHalo(newNoteMarker.getLatLng());
+
+ newNoteMarker.on("dragend", function () {
+ content.find("textarea").focus();
+ });
+ }
+
+ function removeNewNoteMarker() {
+ removeHalo();
+ if (newNoteMarker) map.removeLayer(newNoteMarker);
+ 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);
+ if (newNoteMarker) newNoteMarker.setOpacity(zoomedOut ? 0.5 : 0.9);
+ }
+
page.pushstate = page.popstate = function (path) {
OSM.loadSidebarContent(path, function () {
page.load(path);
};
page.load = function (path) {
- if (addNoteButton.hasClass("disabled")) return;
- if (addNoteButton.hasClass("active")) return;
-
addNoteButton.addClass("active");
map.addLayer(noteLayer);
padding: [50, 50]
});
- newNoteMarker = L.marker(markerLatlng, {
- icon: noteIcons.new,
- opacity: 0.9,
- draggable: true
- });
-
- newNoteMarker.on("dragstart dragend", function (a) {
- removeHalo();
- if (a.type !== "dragstart") {
- addHalo(newNoteMarker.getLatLng());
- }
- });
-
- newNoteMarker.addTo(map);
- addHalo(newNoteMarker.getLatLng());
-
- newNoteMarker.on("remove", function () {
- addNoteButton.removeClass("active");
- }).on("dragend", function () {
- content.find("textarea").focus();
- });
+ 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();
createNote(location, text, (feature) => {
content.find("textarea").val("");
addCreatedNoteMarker(feature);
- map.removeLayer(newNoteMarker);
- newNoteMarker = null;
- addNoteButton.removeClass("active");
OSM.router.route("/note/" + feature.properties.id);
});
});
+ addNoteButton.on("disabled enabled", updateControls);
+ updateControls();
+
return map.getState();
};
page.unload = function () {
- if (newNoteMarker) map.removeLayer(newNoteMarker);
- removeHalo();
+ addNoteButton.off("disabled enabled", updateControls);
+ removeNewNoteMarker();
addNoteButton.removeClass("active");
};