/** * Единая точка работы с Leaflet для карт МЕРЫ. * * До этого модуля loadLeaflet() и константы LEAFLET_* были дословно * скопированы в шести компонентах (MapCard, MapPicker, SaleShareMap, * v2/HeroBar, v2/ParamsPanel, v2/SourcesMap). Копии разъезжались: правку * атрибуции или версии приходилось вносить шесть раз, и любая пропущенная * копия молча оставалась со старым поведением. Здесь один источник правды. * * Leaflet по-прежнему грузится с CDN (unpkg) с SRI-хэшами, а не как npm-дep — * это сознательный статус-кво, менять его отдельной задачей. */ /* eslint-disable @typescript-eslint/no-explicit-any -- интероп с CDN-библиотекой Leaflet (window.L без типов) */ export const LEAFLET_VER = "1.9.4"; export const LEAFLET_CSS = `https://unpkg.com/leaflet@${LEAFLET_VER}/dist/leaflet.css`; export const LEAFLET_JS = `https://unpkg.com/leaflet@${LEAFLET_VER}/dist/leaflet.js`; export const LEAFLET_CSS_SRI = "sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY="; export const LEAFLET_JS_SRI = "sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo="; /** Тайлы OSM (стандартный слой). */ export const OSM_TILE_URL = "https://tile.openstreetmap.org/{z}/{x}/{y}.png"; /** Максимальный зум стандартного слоя OSM. */ export const OSM_MAX_ZOOM = 19; /** * Атрибуция тайлов OSM — обязательна по ODbL и Attribution Guidelines OSMF. * * Раньше во всех картах стояло просто "© OpenStreetMap": без ссылки на * лицензию и без слова contributors, то есть требованиям не соответствовало. * Guidelines требуют кредит «© OpenStreetMap contributors» со ссылкой на * https://www.openstreetmap.org/copyright; само имя OpenStreetMap переводить * нельзя, поэтому строка остаётся в канонической английской форме. * * Вставляется Leaflet'ом через innerHTML контрола атрибуции, поэтому это * намеренно HTML. Строка — константа модуля, пользовательского ввода в ней * нет. */ export const OSM_ATTRIBUTION = '© OpenStreetMap contributors'; /** * Подгружает Leaflet с CDN ровно один раз на страницу, резолвит window.L. * * Повторные вызовы либо сразу отдают уже готовый window.L, либо подписываются * на load уже висящего в DOM