| Linux webm007.cluster106.gra.hosting.ovh.net 5.15.167-ovh-vps-grsec-zfs-classid #1 SMP Tue Sep 17 08:14:20 UTC 2024 x86_64 Path : /home/eglisebaa/www/wp-content/plugins/trx_addons2/components/shortcodes/osmap/ |
| Current File : /home/eglisebaa/www/wp-content/plugins/trx_addons2/components/shortcodes/osmap/osmap.js |
/**
* Shortcode OpenStreet map
*
* @package WordPress
* @subpackage ThemeREX Addons
* @since v1.6.63
*/
/* global jQuery:false */
/* global TRX_ADDONS_STORAGE:false */
(function() {
"use strict";
var osmap = {
'inited': false,
'count': 0,
'geocoder': null,
'tiler': TRX_ADDONS_STORAGE['osmap_tiler'],
'maps': []
};
var timer = null, osmap_ready = false;
jQuery(document).ready(function() {
if (typeof L !== 'undefined' && typeof L.map !== 'undefined') {
osmap_ready = true;
}
});
jQuery(document).on('action.init_hidden_elements', function(e, container){
if (container === undefined) container = jQuery('body');
var sc_osmap = container.find('.sc_osmap:not(.inited)');
if (sc_osmap.length > 0) {
if (timer !== null) clearTimeout(timer);
// Init OpenStreet map after all other elements (i.e. slider)
timer = setTimeout(function() {
trx_addons_sc_osmap_init(e, container);
}, sc_osmap.parents('.elementor-element-editable,.gutenberg__editor').length > 0 ? 500 : 0);
}
});
function trx_addons_sc_osmap_init(e, container) {
if (!osmap_ready) {
if (timer !== null) clearTimeout(timer);
timer = setTimeout(function() {
trx_addons_sc_osmap_init(e, container);
}, 100);
return;
}
if (container === undefined) container = jQuery('body');
var sc_osmap = container.find('.sc_osmap:not(.inited)');
if (sc_osmap.length > 0) {
sc_osmap.each(function () {
if (jQuery(this).parents('div:hidden,article:hidden').length > 0) return;
var map = jQuery(this).addClass('inited'),
map_id = map.attr('id'),
map_zoom = map.data('zoom'),
map_style = map.data('style') ? (map.data('style')=='default' ? 'basic' : map.data('style')) : 'streets',
map_tiler = TRX_ADDONS_STORAGE['osmap_tiler_styles'][map_style],
map_center = map.data('center'),
map_editable= map.data('editable')=='1',
map_cluster_icon = map.data('cluster-icon'),
map_markers = [];
map.find('.sc_osmap_marker').each(function() {
var marker = jQuery(this),
address = marker.data('address');
if ( !address ) return;
var latlng = address.split(',').map(parseFloat);
map_markers.push({
icon: marker.data('icon'),
icon_retina: marker.data('icon_retina'),
icon_shadow: marker.data('icon_shadow'),
icon_width: marker.data('icon_width'),
icon_height: marker.data('icon_height'),
address: latlng.length == 2 && !isNaN(latlng[0]) && !isNaN(latlng[1]) ? '' : address,
latlng: latlng.length != 2 || isNaN(latlng[0]) || isNaN(latlng[1]) ? '' : latlng,
description: marker.data('description'),
title: marker.data('title')
});
});
trx_addons_sc_osmap_create( map, {
style: map_style,
tiler: map_tiler,
zoom: map_zoom,
center: map_center,
editable: map_editable,
cluster_icon: map_cluster_icon,
markers: map_markers
}
);
});
}
}
function trx_addons_sc_osmap_create(map, coords) {
// try {
var id = map.attr('id');
osmap.count++;
// Change id if already exists on this page
if (typeof osmap.maps[id] !== 'undefined') {
id += '_copy' + osmap.count;
map.attr('id', id);
}
var center = [];
if (coords.center) {
center = (''+coords.center).split(',').map(parseFloat);
}
var zoom = coords.zoom
? parseInt(coords.zoom, 10)
: ( coords.markers.length == 1 && center.length == 0 ? 16 : 0 );
osmap.maps[id] = {
style: coords.style,
tiler: coords.tiler,
markers_inited: 0,
markers: coords.markers,
geocoder_request: false,
geocoder_control: false,
clusterer: null,
clusterIcon: coords.cluster_icon,
editable: coords.editable,
fit_to_bounds: false,
bounds: [ [-999, -999], [-999, -999] ],
opt: {
minZoom: 1,
maxZoom: coords.tiler['maxzoom'] ? coords.tiler['maxzoom'] : 18,
center: center,
zoom: zoom
}
};
if ( center.length > 0 ) {
osmap.maps[id].opt['center'] = center;
}
if ( zoom > 0 ) {
osmap.maps[id].opt['zoom'] = zoom;
}
trx_addons_sc_osmap_build(id);
// } catch (e) {
// console.log(TRX_ADDONS_STORAGE['msg_sc_osmap_not_avail']);
// };
}
function trx_addons_sc_osmap_refresh() {
for (id in osmap.maps) {
// Remove objects
if (osmap.maps[id].clusterer != null) {
osmap.maps[id].clusterer.removeLayers();
}
trx_addons_sc_osmap_build(id);
}
}
function trx_addons_sc_osmap_build(id) {
// Create map
osmap.maps[id].map = osmap.maps[id].opt['center'].length > 0 && osmap.maps[id].opt['zoom'] > 0
? L.map(id, osmap.maps[id].opt)
: L.map(id, { minZoom: osmap.maps[id].opt.minZoom, maxZoom: osmap.maps[id].opt.maxZoom });
// Add tile layer
if ( osmap.tiler == 'vector' ) {
// Add vector tile layer
L.mapboxGL({
maxZoom: osmap.maps[id].opt['maxZoom'] ? osmap.maps[id].opt['maxZoom'] : 18,
attribution: TRX_ADDONS_STORAGE['osmap_attribution'],
accessToken: osmap.maps[id].tiler['token'] ? osmap.maps[id].tiler['token'] : 'not-needed-2',
style: osmap.maps[id].tiler['url'].replace( '{style}', osmap.maps[id].style )
}).addTo(osmap.maps[id].map);
} else {
// Add raster tile layer
L.tileLayer(
osmap.maps[id].tiler['url'].replace( '{style}', osmap.maps[id].style ),
{
maxZoom: osmap.maps[id].opt['maxZoom'] ? osmap.maps[id].opt['maxZoom'] : 18,
attribution: TRX_ADDONS_STORAGE['osmap_attribution'],
id: 'osmap.tiler'
}
).addTo(osmap.maps[id].map);
}
// Add GeoCoder
if ( ! osmap.geocoder ) {
osmap.geocoder = L.Control.Geocoder.nominatim();
}
osmap.maps[id].geocoder_control = L.Control.geocoder( { geocoder: osmap.geocoder } ).addTo(osmap.maps[id].map);
// Create clusterer
if (osmap.maps[id].markers.length > 1 && !osmap.maps[id].editable && typeof L.markerClusterGroup != 'undefined') {
var clusterInit = osmap.maps[id].clusterIcon
? {
iconCreateFunction: function(cluster) {
return L.divIcon( {
html: '<div style="background-image: url('+osmap.maps[id].clusterIcon+')"><span>' + cluster.getChildCount() + '</span></div>',
className: 'sc_osmap_cluster',
iconSize: new L.Point(48, 48)
} );
}
}
: {};
osmap.maps[id].clusterer = L.markerClusterGroup( clusterInit );
}
// Prepare maps bounds
osmap.maps[id].fit_to_bounds = ( osmap.maps[id].opt['center'].length > 0 || osmap.maps[id].markers.length > 1) && osmap.maps[id].opt['zoom'] < 1;
if (osmap.maps[id].opt['center'].length > 0) {
trx_addons_sc_osmap_add_bounds(id, osmap.maps[id].opt['center']);
}
// Add resize listener
jQuery(document).on('action.resize_trx_addons', function() {
if (osmap.maps[id].map) {
if (osmap.maps[id].markers_inited == osmap.maps[id].markers.length) { // && osmap.maps[id].fit_to_bounds
if (osmap.maps[id].fit_to_bounds) {
osmap.maps[id].map.fitBounds(trx_addons_sc_osmap_get_bounds(id));
} else {
osmap.maps[id].map.setView(
osmap.maps[id].opt['center'].length > 0
? osmap.maps[id].opt['center']
: osmap.maps[id].markers[0].latlng,
osmap.maps[id].opt['zoom'] > 0
? osmap.maps[id].opt['zoom']
: 13
);
}
}
}
});
// Add markers
for (var i=0; i < osmap.maps[id].markers.length; i++) {
osmap.maps[id].markers[i].inited = false;
}
trx_addons_sc_osmap_add_markers(id);
}
function trx_addons_sc_osmap_add_markers(id) {
for (var i=0; i < osmap.maps[id].markers.length; i++) {
if (osmap.maps[id].markers[i].inited) {
continue;
}
if ( ! osmap.maps[id].markers[i].latlng ) {
if ( osmap.maps[id].geocoder_request !== false ) continue;
osmap.maps[id].geocoder_request = i;
osmap.geocoder.geocode( osmap.maps[id].markers[i].address, function(results) {
if ( results[0] && results[0].center ) {
try {
osmap.maps[id].markers[osmap.maps[id].geocoder_request].latlng = [ results[0].center.lat, results[0].center.lng ];
setTimeout(function() {
trx_addons_sc_osmap_add_markers(id);
}, 1);
} catch(e) {
// Do nothing
}
} else {
console.log(TRX_ADDONS_STORAGE['msg_sc_osmap_geocoder_error'] + ' ' + status);
}
// Release Geocoder
osmap.maps[id].geocoder_request = false;
});
} else {
// Prepare marker object
var markerInit = {
draggable: osmap.maps[id].editable,
title: osmap.maps[id].markers[i].title,
alt: osmap.maps[id].markers[i].title
};
if (osmap.maps[id].markers[i].icon) {
if (osmap.maps[id].markers[i].icon_width == 0) osmap.maps[id].markers[i].icon_width = 32;
if (osmap.maps[id].markers[i].icon_height == 0) osmap.maps[id].markers[i].icon_height = 32;
var iconInit = {
iconUrl: osmap.maps[id].markers[i].icon,
iconSize: [osmap.maps[id].markers[i].icon_width, osmap.maps[id].markers[i].icon_height],
iconAnchor: [osmap.maps[id].markers[i].icon_width/2, osmap.maps[id].markers[i].icon_height],
popupAnchor: [0, -osmap.maps[id].markers[i].icon_height-3],
};
if (osmap.maps[id].markers[i].icon_shadow) {
iconInit.shadowUrl = osmap.maps[id].markers[i].icon_shadow;
iconInit.shadowSize = [osmap.maps[id].markers[i].icon_width, osmap.maps[id].markers[i].icon_height];
iconInit.shadowAnchor = [osmap.maps[id].markers[i].icon_width/2, osmap.maps[id].markers[i].icon_height];
}
markerInit.icon = L.icon(iconInit);
}
osmap.maps[id].markers[i].marker = L.marker( L.latLng(osmap.maps[id].markers[i].latlng[0], osmap.maps[id].markers[i].latlng[1]), markerInit);
if ( osmap.maps[id].clusterer === null ) {
osmap.maps[id].markers[i].marker.addTo(osmap.maps[id].map);
}
if (osmap.maps[id].markers[i].description) {
osmap.maps[id].markers[i].marker.bindPopup(osmap.maps[id].markers[i].description);
}
osmap.maps[id].markers[i].inited = true;
osmap.maps[id].markers_inited++;
trx_addons_sc_osmap_add_bounds(id, osmap.maps[id].markers[i].latlng);
}
}
// If all markers inited
if (osmap.maps[id].markers.length > 0 && osmap.maps[id].markers_inited == osmap.maps[id].markers.length) {
// Make Cluster
if (osmap.maps[id].markers_inited > 1 && osmap.maps[id].clusterer !== null ) {
for (i = 0; i < osmap.maps[id].markers.length; i++) {
osmap.maps[id].clusterer.addLayer(osmap.maps[id].markers[i].marker);
}
osmap.maps[id].map.addLayer(osmap.maps[id].clusterer);
}
// Fit Bounds
if (osmap.maps[id].fit_to_bounds) {
osmap.maps[id].map.fitBounds(trx_addons_sc_osmap_get_bounds(id));
} else {
osmap.maps[id].map.setView(osmap.maps[id].opt['center'].length > 0 ? osmap.maps[id].opt['center'] : osmap.maps[id].markers[0].latlng, osmap.maps[id].opt['zoom'] > 0 ? osmap.maps[id].opt['zoom'] : 13);
}
// Display map
if ( ! jQuery('#'+id).parent().hasClass('ready') ) {
setTimeout(function() {
jQuery('#'+id).parent().addClass('ready');
}, 100);
}
}
}
function trx_addons_sc_osmap_add_bounds(id, latlng) {
if (osmap.maps[id].bounds[0][0] == -999 || osmap.maps[id].bounds[0][0] > latlng[0]) osmap.maps[id].bounds[0][0] = latlng[0];
if (osmap.maps[id].bounds[0][1] == -999 || osmap.maps[id].bounds[0][1] > latlng[1]) osmap.maps[id].bounds[0][1] = latlng[1];
if (osmap.maps[id].bounds[1][0] == -999 || osmap.maps[id].bounds[1][0] < latlng[0]) osmap.maps[id].bounds[1][0] = latlng[0];
if (osmap.maps[id].bounds[1][1] == -999 || osmap.maps[id].bounds[1][1] < latlng[1]) osmap.maps[id].bounds[1][1] = latlng[1];
}
function trx_addons_sc_osmap_get_bounds(id) {
return osmap.maps[id].bounds;
}
})();