1 export default function (map) {
2 const content = $("#sidebar_content"),
5 page.pushstate = page.popstate = function (path, id) {
6 OSM.loadSidebarContent(path).then(function () {
7 const data = $(".details").data();
9 const [lat, lng] = data.coordinates.split(",").map(parseFloat);
10 initialize(path, id, map.getBounds().contains({ lat, lng }));
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 || `HTTP Error ${response.status} ${response.statusText}`);
45 OSM.loadSidebarContent(path)
46 .then(() => initialize(path, id, false));
49 content.find("#comment-error")
51 .prop("hidden", false)
52 .get(0).scrollIntoView({ block: "nearest" });
57 content.find("textarea").on("input", function (e) {
58 updateButtons(e.target.form);
61 content.find("textarea").val("").trigger("input");
63 const data = $(".details").data();
66 const hashParams = OSM.parseHash();
70 latLng: L.latLng(data.coordinates.split(",")),
71 icon: OSM.noteMarkers[data.status]
73 if (!hashParams.center && !skipMoveToNote) {
74 const latLng = L.latLng(data.coordinates.split(","));
75 OSM.router.withoutMoveListener(function () {
76 map.setView(latLng, 15, { reset: true });
83 function updateButtons() {
84 const resolveButton = content.find("button[name='close']");
85 const commentButton = content.find("button[name='comment']");
87 content.find("button[name]").prop("disabled", false);
88 if (content.find("textarea").val() === "") {
89 resolveButton.text(resolveButton.data("defaultActionText"));
90 commentButton.prop("disabled", true);
92 resolveButton.text(resolveButton.data("commentActionText"));
96 page.unload = function () {