From 42b69052dce060ff3233a3aaf1240181bc31689d Mon Sep 17 00:00:00 2001 From: Marwin Hochfelsner <50826859+hlfan@users.noreply.github.com> Date: Tue, 5 Aug 2025 22:54:59 +0200 Subject: [PATCH] Move controller invoking event handlers outside said controllers --- app/assets/javascripts/index.js | 3 +- app/assets/javascripts/index/contextmenu.js | 4 +- app/assets/javascripts/index/new_note.js | 19 +++--- app/assets/javascripts/index/query.js | 64 ++++++++++----------- app/assets/javascripts/index/search.js | 5 +- 5 files changed, 49 insertions(+), 46 deletions(-) diff --git a/app/assets/javascripts/index.js b/app/assets/javascripts/index.js index 8902478a6..92843e34c 100644 --- a/app/assets/javascripts/index.js +++ b/app/assets/javascripts/index.js @@ -24,6 +24,7 @@ //= require index/element //= require router +OSM.initializations = []; $(function () { const map = new L.OSM.Map("map", { zoomControl: false, @@ -140,7 +141,7 @@ $(function () { L.control.scale() .addTo(map); - OSM.initializeContextMenu(map); + OSM.initializations.forEach(func => func(map)); if (OSM.STATUS !== "api_offline" && OSM.STATUS !== "database_offline") { OSM.initializeNotesLayer(map); diff --git a/app/assets/javascripts/index/contextmenu.js b/app/assets/javascripts/index/contextmenu.js index 3ed988e2e..e7cc93cc2 100644 --- a/app/assets/javascripts/index/contextmenu.js +++ b/app/assets/javascripts/index/contextmenu.js @@ -1,4 +1,4 @@ -OSM.initializeContextMenu = function (map) { +OSM.initializations.push(function (map) { const $contextMenu = $("#map-context-menu"); map.osm_contextmenu = new OSM.ContextMenu(map, $contextMenu); @@ -99,7 +99,7 @@ OSM.initializeContextMenu = function (map) { }); map.on("zoomend", updateContextMenuState); -}; +}); class ContextMenu { constructor(map, $element) { diff --git a/app/assets/javascripts/index/new_note.js b/app/assets/javascripts/index/new_note.js index a126b7100..f06fa0bdc 100644 --- a/app/assets/javascripts/index/new_note.js +++ b/app/assets/javascripts/index/new_note.js @@ -1,3 +1,13 @@ +OSM.initializations.push(function () { + $(".control-note .control-button").on("click", function (e) { + e.preventDefault(); + e.stopPropagation(); + + if ($(this).hasClass("disabled")) return; + + OSM.router.route("/note/new"); + }); +}); OSM.NewNote = function (map) { const noteLayer = map.noteLayer, content = $("#sidebar_content"), @@ -7,15 +17,6 @@ OSM.NewNote = function (map) { let newNoteMarker, halo; - addNoteButton.on("click", function (e) { - e.preventDefault(); - e.stopPropagation(); - - if ($(this).hasClass("disabled")) return; - - OSM.router.route("/note/new"); - }); - function createNote(location, text, callback) { fetch("/api/0.6/notes.json", { method: "POST", diff --git a/app/assets/javascripts/index/query.js b/app/assets/javascripts/index/query.js index f3bfd28ef..62474401f 100644 --- a/app/assets/javascripts/index/query.js +++ b/app/assets/javascripts/index/query.js @@ -1,16 +1,6 @@ -OSM.Query = function (map) { +OSM.initializations.push(function (map) { const control = $(".control-query"), - queryButton = control.find(".control-button"), - uninterestingTags = ["source", "source_ref", "source:ref", "history", "attribution", "created_by", "tiger:county", "tiger:tlid", "tiger:upload_uuid", "KSJ2:curve_id", "KSJ2:lat", "KSJ2:lon", "KSJ2:coordinate", "KSJ2:filename", "note:ja"]; - let marker; - - const featureStyle = { - color: "#FF6200", - weight: 4, - opacity: 1, - fillOpacity: 0.5, - interactive: false - }; + queryButton = control.find(".control-button"); queryButton.on("click", function (e) { e.preventDefault(); @@ -35,6 +25,36 @@ OSM.Query = function (map) { } }); + function clickHandler(e) { + const [lat, lon] = OSM.cropLocation(e.latlng, map.getZoom()); + + OSM.router.route("/query?" + new URLSearchParams({ lat, lon })); + } + + function enableQueryMode() { + $(".control-query").addClass("active"); + map.on("click", clickHandler); + $(map.getContainer()).addClass("query-active"); + } + + function disableQueryMode() { + $(map.getContainer()).removeClass("query-active").removeClass("query-disabled"); + map.off("click", clickHandler); + $(".control-query").removeClass("active"); + } +}); +OSM.Query = function (map) { + const uninterestingTags = ["source", "source_ref", "source:ref", "history", "attribution", "created_by", "tiger:county", "tiger:tlid", "tiger:upload_uuid", "KSJ2:curve_id", "KSJ2:lat", "KSJ2:lon", "KSJ2:coordinate", "KSJ2:filename", "note:ja"]; + let marker; + + const featureStyle = { + color: "#FF6200", + weight: 4, + opacity: 1, + fillOpacity: 0.5, + interactive: false + }; + function showResultGeometry() { const geometry = $(this).data("geometry"); if (geometry) map.addLayer(geometry); @@ -268,25 +288,6 @@ OSM.Query = function (map) { runQuery(isin, $("#query-isin"), true, (feature1, feature2) => size(feature1.bounds) - size(feature2.bounds)); } - function clickHandler(e) { - const [lat, lon] = OSM.cropLocation(e.latlng, map.getZoom()); - - OSM.router.route("/query?" + new URLSearchParams({ lat, lon })); - } - - function enableQueryMode() { - control.addClass("active"); - map.on("click", clickHandler); - $(map.getContainer()).addClass("query-active"); - } - - function disableQueryMode() { - if (marker) map.removeLayer(marker); - $(map.getContainer()).removeClass("query-active").removeClass("query-disabled"); - map.off("click", clickHandler); - control.removeClass("active"); - } - const page = {}; page.pushstate = page.popstate = function (path) { @@ -310,7 +311,6 @@ OSM.Query = function (map) { page.unload = function (sameController) { if (!sameController) { - disableQueryMode(); $("#sidebar_content .query-results a.selected").each(hideResultGeometry); } }; diff --git a/app/assets/javascripts/index/search.js b/app/assets/javascripts/index/search.js index 2d7b17fc5..121ab9cad 100644 --- a/app/assets/javascripts/index/search.js +++ b/app/assets/javascripts/index/search.js @@ -1,4 +1,4 @@ -OSM.Search = function (map) { +OSM.initializations.push(function (map) { $(".search_form a.btn.switch_link").on("click", function (e) { e.preventDefault(); const query = $(this).closest("form").find("input[name=query]").val(); @@ -30,7 +30,8 @@ OSM.Search = function (map) { OSM.router.route("/search?" + new URLSearchParams({ lat, lon, zoom })); }); - +}); +OSM.Search = function (map) { $("#sidebar_content") .on("click", ".search_more a", clickSearchMore) .on("click", ".search_results_entry a.set_position", clickSearchResult); -- 2.39.5