]> git.openstreetmap.org Git - rails.git/blob - app/assets/javascripts/index/initializations.js
Merge pull request #7191 from CommanderStorm/fix-attribution-listener-leak
[rails.git] / app / assets / javascripts / index / initializations.js
1 OSM.initializations.push(function (map) {
2   $(".search_form a.btn.switch_link").on("click", function (e) {
3     e.preventDefault();
4     const query = $(this).closest("form").find("input[name=query]").val();
5     let search = "";
6     if (query) search = "?" + new URLSearchParams({ to: query });
7     OSM.router.route("/directions" + search + OSM.formatHash(map));
8   });
9
10   $(".search_form").on("submit", function (e) {
11     e.preventDefault();
12     $("header").addClass("closed");
13     const bounds = map.getBounds();
14     const params = new URLSearchParams({
15       query: this.elements.query.value,
16       zoom: map.getZoom(),
17       minlon: bounds.getWest(),
18       minlat: bounds.getSouth(),
19       maxlon: bounds.getEast(),
20       maxlat: bounds.getNorth()
21     });
22     const search = params.get("query") ? `/search?${params}` : "/";
23     OSM.router.route(search + OSM.formatHash(map));
24   });
25
26   $(".describe_location").on("click", function (e) {
27     e.preventDefault();
28     $("header").addClass("closed");
29     const zoom = map.getZoom();
30     const { lat, lng } = OSM.cropLocation(map.getCenter(), zoom);
31
32     OSM.router.route("/search?" + new URLSearchParams({ lat, lon: lng, zoom }));
33   });
34 });
35
36 OSM.initializations.push(function () {
37   $(".control-note .control-button").on("click", function (e) {
38     e.preventDefault();
39     e.stopPropagation();
40
41     if ($(this).hasClass("disabled")) return;
42
43     OSM.router.route("/note/new");
44   });
45 });
46
47 OSM.initializations.push(function (map) {
48   const control = $(".control-query"),
49         queryButton = control.find(".control-button");
50
51   queryButton.on("click", function (e) {
52     e.preventDefault();
53     e.stopPropagation();
54
55     if (control.hasClass("active")) {
56       disableQueryMode();
57     } else if (!queryButton.hasClass("disabled")) {
58       enableQueryMode();
59     }
60   }).on("disabled", function () {
61     if (control.hasClass("active")) {
62       map.off("click", clickHandler);
63       $(map.getContainer()).removeClass("query-active").addClass("query-disabled");
64       $(this).tooltip("show");
65     }
66   }).on("enabled", function () {
67     if (control.hasClass("active")) {
68       map.on("click", clickHandler);
69       $(map.getContainer()).removeClass("query-disabled").addClass("query-active");
70       $(this).tooltip("hide");
71     }
72   });
73
74   function clickHandler(e) {
75     const { lat, lng } = OSM.cropLocation(e.latlng, map.getZoom());
76
77     OSM.router.route("/query?" + new URLSearchParams({ lat, lon: lng }));
78   }
79
80   function enableQueryMode() {
81     $(".control-query").addClass("active");
82     map.on("click", clickHandler);
83     $(map.getContainer()).addClass("query-active");
84   }
85
86   function disableQueryMode() {
87     $(map.getContainer()).removeClass("query-active").removeClass("query-disabled");
88     map.off("click", clickHandler);
89     $(".control-query").removeClass("active");
90   }
91 });