X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/809a8b3db0f09199ae798de102cc926f87958c82..c8757cf1d00836a34e8aa3e1244b3a0694914dc2:/app/assets/javascripts/application.js diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 4f53a0493..c6d7c4fe3 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -1,6 +1,5 @@ //= require jquery3 //= require jquery_ujs -//= require jquery.timers //= require jquery.throttle-debounce //= require js-cookie/dist/js.cookie //= require popper @@ -15,9 +14,29 @@ //= require oauth //= require matomo //= require richtext -//= require qs/dist/qs -//= require bs-custom-file-input -//= require bs-custom-file-input-init + +{ + const application_data = $("head").data(); + + I18n.default_locale = OSM.DEFAULT_LOCALE; + I18n.locale = application_data.locale; + I18n.fallbacks = true; + + OSM.preferred_editor = application_data.preferredEditor; + OSM.preferred_languages = application_data.preferredLanguages; + + if (application_data.user) { + OSM.user = application_data.user; + + if (application_data.userHome) { + OSM.home = application_data.userHome; + } + } + + if (application_data.location) { + OSM.location = application_data.location; + } +} /* * Called as the user scrolls/zooms around to manipulate hrefs of the @@ -25,74 +44,93 @@ */ window.updateLinks = function (loc, zoom, layers, object) { $(".geolink").each(function (index, link) { - var href = link.href.split(/[?#]/)[0], - args = Qs.parse(link.search.substring(1)), - editlink = $(link).hasClass("editlink"); + let href = link.href.split(/[?#]/)[0]; + const queryArgs = new URLSearchParams(link.search), + editlink = $(link).hasClass("editlink"); - delete args.node; - delete args.way; - delete args.relation; - delete args.changeset; - delete args.note; + for (const arg of ["node", "way", "relation", "changeset", "note"]) { + queryArgs.delete(arg); + } if (object && editlink) { - args[object.type] = object.id; + queryArgs.set(object.type, object.id); } - var query = Qs.stringify(args); + const query = queryArgs.toString(); if (query) href += "?" + query; - args = { + const hashArgs = { lat: loc.lat, lon: "lon" in loc ? loc.lon : loc.lng, zoom: zoom }; if (layers && !editlink) { - args.layers = layers; + hashArgs.layers = layers; } - href += OSM.formatHash(args); + href += OSM.formatHash(hashArgs); link.href = href; }); + // Disable the button group and also the buttons to avoid + // inconsistent behaviour when zooming var editDisabled = zoom < 13; $("#edit_tab") .tooltip({ placement: "bottom" }) - .attr("data-bs-original-title", editDisabled ? - I18n.t("javascripts.site.edit_disabled_tooltip") : "") - // Disable the button group and also the buttons to avoid - // inconsistent behaviour when zooming + .tooltip(editDisabled ? "enable" : "disable") .toggleClass("disabled", editDisabled) .find("a") .toggleClass("disabled", editDisabled); }; -window.maximiseMap = function () { - $("#content").addClass("maximised"); -}; - -window.minimiseMap = function () { - $("#content").removeClass("maximised"); -}; - $(document).ready(function () { - var headerWidth = 0, - compactWidth = 0; + // NB: Turns Turbo Drive off by default. Turbo Drive must be opt-in on a per-link and per-form basis + // See https://turbo.hotwired.dev/reference/drive#turbo.session.drive + Turbo.session.drive = false; + + let headerWidth = 0; + const breakpointWidth = 768; function updateHeader() { var windowWidth = $(window).width(); - if (windowWidth < compactWidth) { - $("body").removeClass("compact-nav").addClass("small-nav"); + if (windowWidth < breakpointWidth) { + $("body").addClass("small-nav"); + expandSecondaryMenu(); } else if (windowWidth < headerWidth) { - $("body").addClass("compact-nav").removeClass("small-nav"); + $("body").removeClass("small-nav"); + collapseSecondaryMenu(); } else { - $("body").removeClass("compact-nav").removeClass("small-nav"); + $("body").removeClass("small-nav"); + expandSecondaryMenu(); } } + function expandSecondaryMenu() { + $("#compact-secondary-nav > ul").find("li").children("a") + .removeClass("dropdown-item") + .addClass("nav-link") + .addClass(function () { + return $(this).hasClass("active") ? "text-secondary-emphasis" : "text-secondary"; + }); + $("#compact-secondary-nav > ul").find("li") + .addClass("nav-item") + .prependTo("header nav.secondary > ul"); + $("#compact-secondary-nav").hide(); + } + + function collapseSecondaryMenu() { + $("header nav.secondary > ul").find("li:not(#compact-secondary-nav)").children("a") + .addClass("dropdown-item") + .removeClass("nav-link text-secondary text-secondary-emphasis"); + $("header nav.secondary > ul").find("li:not(#compact-secondary-nav)") + .removeClass("nav-item") + .prependTo("#compact-secondary-nav > ul"); + $("#compact-secondary-nav").show(); + } + /* * Chrome 60 and later seem to fire the "ready" callback * before the DOM is fully ready causing us to measure the @@ -101,20 +139,16 @@ $(document).ready(function () { */ setTimeout(function () { $("header").children(":visible").each(function (i, e) { - headerWidth = headerWidth + $(e).outerWidth(); - }); - - $("body").addClass("compact-nav"); - - $("header").children(":visible").each(function (i, e) { - compactWidth = compactWidth + $(e).outerWidth(); + headerWidth += $(e).outerWidth(); }); - $("body").removeClass("compact-nav"); + $("header").removeClass("text-nowrap"); + $("header nav.secondary > ul").removeClass("flex-nowrap"); updateHeader(); $(window).resize(updateHeader); + $(document).on("turbo:render", updateHeader); }, 0); $("#menu-icon").on("click", function (e) { @@ -126,23 +160,6 @@ $(document).ready(function () { $("header").toggleClass("closed"); }); - var application_data = $("head").data(); - - I18n.default_locale = OSM.DEFAULT_LOCALE; - I18n.locale = application_data.locale; - I18n.fallbacks = true; - - OSM.preferred_editor = application_data.preferredEditor; - - if (application_data.user) { - OSM.user = application_data.user; - - if (application_data.userHome) { - OSM.home = application_data.userHome; - } - } - - if (application_data.location) { - OSM.location = application_data.location; - } + $("#edit_tab") + .attr("title", I18n.t("javascripts.site.edit_disabled_tooltip")); });