1 OSM.Note = function (map) {
2 const content = $("#sidebar_content"),
5 page.pushstate = page.popstate = function (path, id) {
6 OSM.loadSidebarContent(path, function () {
7 const data = $(".details").data();
9 const latLng = L.latLng(data.coordinates.split(","));
10 initialize(path, id, map.getBounds().contains(latLng));
14 page.load = function (path, id) {
18 function initialize(path, id, skipMoveToNote) {
19 content.find("button[name]").on("click", function (e) {
21 const { url, method } = $(e.target).data(),
22 name = $(e.target).attr("name"),
23 data = new URLSearchParams();
24 content.find("button[name]").prop("disabled", true);
26 if (name !== "subscribe" && name !== "unsubscribe") {
27 const textarea = content.find("textarea");
28 if (textarea.length) {
29 data.set("text", textarea.val());
35 headers: { ...OSM.oauth },
39 if (response.ok) return response;
40 return response.text().then(text => {
41 throw new Error(text);
45 OSM.loadSidebarContent(path, () => {
46 initialize(path, id, false);
50 content.find("#comment-error")
52 .prop("hidden", false)
53 .get(0).scrollIntoView({ block: "nearest" });
58 content.find("textarea").on("input", function (e) {
59 updateButtons(e.target.form);
62 content.find("textarea").val("").trigger("input");
64 const data = $(".details").data();
67 const hashParams = OSM.parseHash();
71 latLng: L.latLng(data.coordinates.split(",")),
72 icon: OSM.getMarker({ icon: `${data.status}_NOTE_MARKER`, shadow: false, height: 40 })
74 if (!hashParams.center && !skipMoveToNote) {
75 const latLng = L.latLng(data.coordinates.split(","));
76 OSM.router.withoutMoveListener(function () {
77 map.setView(latLng, 15, { reset: true });
84 function updateButtons() {
85 const resolveButton = content.find("button[name='close']");
86 const commentButton = content.find("button[name='comment']");
88 content.find("button[name]").prop("disabled", false);
89 if (content.find("textarea").val() === "") {
90 resolveButton.text(resolveButton.data("defaultActionText"));
91 commentButton.prop("disabled", true);
93 resolveButton.text(resolveButton.data("commentActionText"));
97 page.unload = function () {