1 OSM.Changeset = function (map) {
3 content = $("#sidebar_content");
5 content.on("turbo:before-frame-render", "turbo-frame", function () {
6 $(this).find(".numbered_pagination").trigger("numbered_pagination:disable");
9 content.on("turbo:frame-render", "turbo-frame", function () {
10 $(this).find(".numbered_pagination").trigger("numbered_pagination:enable");
13 page.pushstate = page.popstate = function (path) {
14 OSM.loadSidebarContent(path, function () {
19 page.load = function () {
20 const changesetData = content.find("[data-changeset]").data("changeset");
21 changesetData.type = "changeset";
23 const hashParams = OSM.parseHash();
25 map.addObject(changesetData, function (bounds) {
26 if (!hashParams.center && bounds.isValid()) {
27 OSM.router.withoutMoveListener(function () {
28 map.fitBounds(bounds);
32 $(".numbered_pagination").trigger("numbered_pagination:enable");
35 function updateChangeset(method, url, include_data) {
36 const data = new URLSearchParams();
38 content.find("#comment-error").prop("hidden", true);
39 content.find("button[data-method][data-url]").prop("disabled", true);
42 data.set("text", content.find("textarea").val());
47 headers: { ...OSM.oauth },
51 if (response.ok) return response;
52 return response.text().then(text => {
53 throw new Error(text);
57 OSM.loadSidebarContent(location.pathname, page.load);
60 content.find("button[data-method][data-url]").prop("disabled", false);
61 content.find("#comment-error")
63 .prop("hidden", false)
64 .get(0).scrollIntoView({ block: "nearest" });
68 function initialize() {
69 content.find("button[data-method][data-url]").on("click", function (e) {
71 const data = $(e.target).data();
72 const include_data = e.target.name === "comment";
73 updateChangeset(data.method, data.url, include_data);
76 content.find("textarea").on("input", function (e) {
77 const form = e.target.form,
78 disabled = $(e.target).val() === "";
79 form.comment.disabled = disabled;
82 content.find("textarea").val("").trigger("input");
85 page.unload = function () {
87 $(".numbered_pagination").trigger("numbered_pagination:disable");