openstreetmap-website/app/assets/javascripts/application.js
Tom Hughes c94de1e1a3 Improve name selection with the query tool
Pass the full expanded list of preferred languages to the client
and use that when looking for the best name for an object.

Fixes #4310
2023-11-14 17:45:50 +00:00

143 lines
3.6 KiB
JavaScript

//= require jquery3
//= require jquery_ujs
//= require jquery.timers
//= require jquery.throttle-debounce
//= require js-cookie/dist/js.cookie
//= require popper
//= require bootstrap-sprockets
//= require osm
//= require leaflet/dist/leaflet-src
//= require leaflet.osm
//= require leaflet.map
//= require leaflet.zoom
//= require leaflet.locationfilter
//= require i18n
//= require oauth
//= require matomo
//= require richtext
//= require qs/dist/qs
//= require bs-custom-file-input
//= require bs-custom-file-input-init
/*
* Called as the user scrolls/zooms around to manipulate hrefs of the
* view tab and various other links
*/
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");
delete args.node;
delete args.way;
delete args.relation;
delete args.changeset;
delete args.note;
if (object && editlink) {
args[object.type] = object.id;
}
var query = Qs.stringify(args);
if (query) href += "?" + query;
args = {
lat: loc.lat,
lon: "lon" in loc ? loc.lon : loc.lng,
zoom: zoom
};
if (layers && !editlink) {
args.layers = layers;
}
href += OSM.formatHash(args);
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" })
.tooltip(editDisabled ? "enable" : "disable")
.toggleClass("disabled", editDisabled)
.find("a")
.toggleClass("disabled", editDisabled);
};
$(document).ready(function () {
var headerWidth = 0,
compactWidth = 0;
function updateHeader() {
var windowWidth = $(window).width();
if (windowWidth < compactWidth) {
$("body").removeClass("compact-nav").addClass("small-nav");
} else if (windowWidth < headerWidth) {
$("body").addClass("compact-nav").removeClass("small-nav");
} else {
$("body").removeClass("compact-nav").removeClass("small-nav");
}
}
/*
* Chrome 60 and later seem to fire the "ready" callback
* before the DOM is fully ready causing us to measure the
* wrong sizes for the header elements - use a 0ms timeout
* to defer the measurement slightly as a workaround.
*/
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();
});
$("body").removeClass("compact-nav");
updateHeader();
$(window).resize(updateHeader);
}, 0);
$("#menu-icon").on("click", function (e) {
e.preventDefault();
$("header").toggleClass("closed");
});
$("nav.primary li a").on("click", 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;
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;
}
$("#edit_tab")
.attr("title", I18n.t("javascripts.site.edit_disabled_tooltip"));
});