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();
 
  70         "id": parseInt(id, 10),
 
  71         "latLng": L.latLng(data.coordinates.split(",")),
 
  72         "icon": OSM.noteMarkers[data.status]
 
  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 () {