devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
158 lines (157 loc) • 5.81 kB
JavaScript
/**
* DevExtreme (esm/__internal/ui/map/provider.google_static.js)
* Version: 25.2.3
* Build date: Fri Dec 12 2025
*
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
import Color from "../../../color";
import {
name as clickEventName
} from "../../../common/core/events/click";
import eventsEngine from "../../../common/core/events/core/events_engine";
import {
getHeight,
getWidth
} from "../../../core/utils/size";
import Provider from "./provider";
let GOOGLE_STATIC_URL = "https://maps.google.com/maps/api/staticmap?";
class GoogleStaticProvider extends Provider {
_locationToString(location) {
const latLng = this._getLatLng(location);
return latLng ? `${latLng.lat},${latLng.lng}` : location.toString().replace(/ /g, "+")
}
_renderImpl() {
return this._updateMap()
}
updateDimensions() {
return this._updateMap()
}
updateMapType() {
return this._updateMap()
}
updateBounds() {
return Promise.resolve()
}
updateCenter() {
return this._updateMap()
}
updateZoom() {
return this._updateMap()
}
updateControls() {
return Promise.resolve()
}
addMarkers() {
let markers = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];
return this._updateMap().then((result => {
markers.forEach((options => {
this._fireMarkerAddedAction({
options: options
})
}));
return result
}))
}
removeMarkers() {
let markers = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];
return this._updateMap().then((result => {
markers.forEach((options => {
this._fireMarkerRemovedAction({
options: options
})
}));
return result
}))
}
adjustViewport() {
return Promise.resolve()
}
addRoutes() {
let routes = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];
return this._updateMap().then((result => {
routes.forEach((options => {
this._fireRouteAddedAction({
options: options
})
}));
return result
}))
}
removeRoutes() {
let routes = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];
return this._updateMap().then((result => {
routes.forEach((options => {
this._fireRouteRemovedAction({
options: options
})
}));
return result
}))
}
clean() {
this._$container.css("backgroundImage", "none");
eventsEngine.off(this._$container, this._addEventNamespace(clickEventName));
return Promise.resolve()
}
mapRendered() {
return true
}
_updateMap() {
const key = this._keyOption("googleStatic");
const providerConfig = this._option("providerConfig");
const mapId = null === providerConfig || void 0 === providerConfig ? void 0 : providerConfig.mapId;
const $container = this._$container;
const requestOptions = ["sensor=false", `size=${Math.round(getWidth($container))}x${Math.round(getHeight($container))}`, `maptype=${this._option("type")}`, `center=${this._locationToString(this._option("center"))}`, `zoom=${this._option("zoom")}`, this._markersSubstring()];
requestOptions.push(...this._routeSubstrings());
if (key) {
requestOptions.push(`key=${key}`)
}
if (mapId) {
requestOptions.push(`map_id=${mapId}`)
}
const request = GOOGLE_STATIC_URL + requestOptions.join("&");
this._$container.css("background", `url("${request}") no-repeat 0 0`);
this._attachClickEvent();
return Promise.resolve(true)
}
_markersSubstring() {
const markers = [];
const markerIcon = this._option("markerIconSrc");
const markersOption = this._option("markers") ?? [];
if (markerIcon) {
markers.push(`icon:${markerIcon}`)
}
markersOption.forEach((marker => {
markers.push(this._locationToString(marker.location))
}));
return `markers=${markers.join("|")}`
}
_routeSubstrings() {
const routes = [];
const routesOptions = this._option("routes") ?? [];
routesOptions.forEach((route => {
const color = new Color(route.color ?? this._defaultRouteColor()).toHex().replace("#", "0x");
const opacity = Math.round(255 * (route.opacity ?? this._defaultRouteOpacity())).toString(16);
const width = route.weight ?? this._defaultRouteWeight();
const locations = [];
const routeLocations = route.locations ?? [];
routeLocations.forEach((routePoint => {
locations.push(this._locationToString(routePoint))
}));
routes.push(`path=color:${color}${opacity}|weight:${width}|${locations.join("|")}`)
}));
return routes
}
_attachClickEvent() {
const eventName = this._addEventNamespace(clickEventName);
eventsEngine.off(this._$container, eventName);
eventsEngine.on(this._$container, eventName, (e => {
this._fireClickAction({
event: e
})
}))
}
}
export default GoogleStaticProvider;