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