// noinspection JSUnresolvedReference
/**
* Field Google Map
*/
/* global jQuery, document, redux_change, redux, google */
(function ( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.google_maps = redux.field_objects.google_maps || {};
/* LIBRARY INIT */
redux.field_objects.google_maps.init = function ( selector ) {
if ( ! selector ) {
selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' );
}
$( selector ).each(
function ( i ) {
let delayRender;
const el = $( this );
let parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
// Check for delay render, which is useful for calling a map
// render after JavaScript load.
delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) );
// API Key button.
redux.field_objects.google_maps.clickHandler( el );
// Init our maps.
redux.field_objects.google_maps.initMap( el, i, delayRender );
}
);
};
/* INIT MAP FUNCTION */
redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) {
let delayed;
let scrollWheel;
let streetView;
let mapType;
let address;
let defLat;
let defLong;
let defaultZoom;
let mapOptions;
let geocoder;
let g_autoComplete;
let g_LatLng;
let g_map;
let noLatLng = false;
// Pull the map class.
const mapClass = el.find( '.redux_framework_google_maps' );
const containerID = mapClass.attr( 'id' );
const autocomplete = containerID + '_autocomplete';
const canvas = containerID + '_map_canvas';
const canvasId = $( '#' + canvas );
const latitude = containerID + '_latitude';
const longitude = containerID + '_longitude';
// Add map index to data attr.
// Why, say we want to use delay_render,
// and want to init the map later on.
// You'd need the index number in the
// event of multiple map instances.
// This allows one to retrieve it
// later.
$( mapClass ).attr( 'data-idx', idx );
if ( true === delayRender ) {
return;
}
// Map has been rendered, no need to process again.
if ( $( '#' + containerID ).hasClass( 'rendered' ) ) {
return;
}
// If a map is set to delay render and has been initiated
// from another scrip, add the 'render' class so rendering
// does not occur.
// It messes things up.
delayed = Boolean( mapClass.data( 'delay-render' ) );
if ( true === delayed ) {
mapClass.addClass( 'rendered' );
}
// Create the autocomplete object, restricting the search
// to geographical location types.
g_autoComplete = await google.maps.importLibrary( 'places' );
g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} );
// Data bindings.
scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) );
streetView = Boolean( mapClass.data( 'street-view' ) );
mapType = Boolean( mapClass.data( 'map-type' ) );
address = mapClass.data( 'address' );
address = decodeURIComponent( address );
address = address.trim();
// Set default Lat/lng.
defLat = canvasId.data( 'default-lat' );
defLong = canvasId.data( 'default-long' );
defaultZoom = canvasId.data( 'default-zoom' );
// Eval whether to set maps based on lat/lng or address.
if ( '' !== address ) {
if ( '' === defLat || '' === defLong ) {
noLatLng = true;
}
} else {
noLatLng = false;
}
// Can't have empty values, or the map API will complain.
// Set default for the middle of the United States.
defLat = defLat ? defLat : 39.11676722061108;
defLong = defLong ? defLong : -100.47761000000003;
if ( noLatLng ) {
// If displaying a map based on an address.
geocoder = new google.maps.Geocoder();
// Set up Geocode and pass address.
geocoder.geocode(
{'address': address},
function ( results, status ) {
let latitude;
let longitude;
// Function results.
if ( status === google.maps.GeocoderStatus.OK ) {
// A good address was passed.
g_LatLng = results[0].geometry.location;
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom,
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
// Get and set lat/long data.
latitude = el.find( '#' + containerID + '_latitude' );
latitude.val( results[0].geometry.location.lat() );
longitude = el.find( '#' + containerID + '_longitude' );
longitude.val( results[0].geometry.location.lng() );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
} else {
// No data found, alert the user.
alert( 'Geocode was not successful for the following reason: ' + status );
}
}
);
} else {
// If displaying map based on an lat/lng.
g_LatLng = new google.maps.LatLng( defLat, defLong );
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom, // Start off far unless an item is selected, set by php.
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create the map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
}
};
redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) {
let markerTooltip;
let infoWindow;
let g_marker;
let geoAlert = mapClass.data( 'geo-alert' );
// Get HTML.
const input = document.getElementById( autocomplete );
// Set objects into the map.
g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input );
// Bind objects to the map.
g_autoComplete = new google.maps.places.Autocomplete( input );
g_autoComplete.bindTo( 'bounds', g_map );
// Get the marker tooltip data.
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Create infoWindow.
infoWindow = new google.maps.InfoWindow();
// Create marker.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
draggable: true,
title: markerTooltip,
animation: google.maps.Animation.DROP
}
);
geoAlert = decodeURIComponent( geoAlert );
// Place change.
google.maps.event.addListener(
g_autoComplete,
'place_changed',
function () {
let place;
let address;
let markerTooltip;
infoWindow.close();
// Get place data.
place = g_autoComplete.getPlace();
// Display alert if something went wrong.
if ( ! place.geometry ) {
window.alert( geoAlert );
return;
}
console.log( place.geometry.viewport );
// If the place has a geometry, then present it on a map.
if ( place.geometry.viewport ) {
g_map.fitBounds( place.geometry.viewport );
} else {
g_map.setCenter( place.geometry.location );
g_map.setZoom( 17 ); // Why 17? Because it looks good.
}
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Set the marker icon.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
title: markerTooltip,
clickable: true,
draggable: true,
animation: google.maps.Animation.DROP
}
);
// Set marker position and display.
g_marker.setPosition( place.geometry.location );
g_marker.setVisible( true );
// Form array of address components.
address = '';
if ( place.address_components ) {
address = [( place.address_components[0] && place.address_components[0].short_name || '' ),
( place.address_components[1] && place.address_components[1].short_name || '' ),
( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' );
}
// Set the default marker info window with address data.
infoWindow.setContent( '
' + place.name + ' ' + address );
infoWindow.open( g_map, g_marker );
// Run Geolocation.
redux.field_objects.google_maps.geoLocate( g_autoComplete );
// Fill in address inputs.
redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete );
}
);
// Marker drag.
google.maps.event.addListener(
g_marker,
'drag',
function ( event ) {
document.getElementById( latitude ).value = event.latLng.lat();
document.getElementById( longitude ).value = event.latLng.lng();
}
);
// End marker drag.
google.maps.event.addListener(
g_marker,
'dragend',
function () {
redux_change( el.find( '.redux_framework_google_maps' ) );
}
);
// Zoom Changed.
g_map.addListener(
'zoom_changed',
function () {
el.find( '.google_m_zoom_input' ).val( g_map.getZoom() );
}
);
// Marker Info Window.
infoWindow = new google.maps.InfoWindow();
google.maps.event.addListener(
g_marker,
'click',
function () {
const marker_info = containerID + '_marker_info';
const infoValue = document.getElementById( marker_info ).value;
if ( '' !== infoValue ) {
infoWindow.setContent( infoValue );
infoWindow.open( g_map, g_marker );
}
}
);
};
/* FILL IN ADDRESS FUNCTION */
redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) {
// Set variables.
const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' );
// What if someone only wants city, or state, ect...
// gotta do it this way to check for the address!
// Need to check each of the returned components to see what is returned.
const componentForm = {
street_number: 'short_name',
route: 'long_name',
locality: 'long_name',
administrative_area_level_1: 'short_name',
country: 'long_name',
postal_code: 'short_name'
};
// Get the place details from the autocomplete object.
const place = g_autoComplete.getPlace();
let component;
let i;
let addressType;
let _d_addressType;
let val;
let len;
document.getElementById( latitude ).value = place.geometry.location.lat();
document.getElementById( longitude ).value = place.geometry.location.lng();
for ( component in componentForm ) {
if ( componentForm.hasOwnProperty( component ) ) {
// Push in the dynamic form element ID again.
component = containerID + '_' + component;
// Assign to proper place.
document.getElementById( component ).value = '';
document.getElementById( component ).disabled = false;
}
}
// Get each component of the address from the place details
// and fill the corresponding field on the form.
len = place.address_components.length;
for ( i = 0; i < len; i += 1 ) {
addressType = place.address_components[i].types[0];
if ( componentForm[addressType] ) {
// Push in the dynamic form element ID again.
_d_addressType = containerID + '_' + addressType;
// Get the original.
val = place.address_components[i][componentForm[addressType]];
// Assign to proper place.
document.getElementById( _d_addressType ).value = val;
}
}
};
redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) {
if ( navigator.geolocation ) {
navigator.geolocation.getCurrentPosition(
function ( position ) {
const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude );
const circle = new google.maps.Circle(
{
center: geolocation,
radius: position.coords.accuracy
}
);
g_autoComplete.setBounds( circle.getBounds() );
}
);
}
};
/* API BUTTON CLICK HANDLER */
redux.field_objects.google_maps.clickHandler = function ( el ) {
// Find the API Key button and react on click.
el.find( '.google_m_api_key_button' ).on(
'click',
function () {
// Find message wrapper.
const wrapper = el.find( '.google_m_api_key_wrapper' );
if ( wrapper.is( ':visible' ) ) {
// If the wrapper is visible, close it.
wrapper.slideUp(
'fast',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
} else {
// If the wrapper is visible, open it.
wrapper.slideDown(
'medium',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
}
}
);
el.find( '.google_m_autocomplete' ).on(
'keypress',
function ( e ) {
if ( 13 === e.keyCode ) {
e.preventDefault();
}
}
);
// Auto select autocomplete contents,
// since Google doesn't do this inherently.
el.find( '.google_m_autocomplete' ).on(
'click',
function ( e ) {
$( this ).trigger( 'focus' );
$( this ).trigger( 'select' );
e.preventDefault();
}
);
};
} )( jQuery );
Profitez de Tours Gratuits Winmega Casino – Jouez Au Casino En Ligne en France! – Orchid Group Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Découvrez les Tours Gratuits Winmega Casino: Comment En Profiter en France
Jouez et gagnez gros avec les Tours Gratuits Winmega Casino en France. Découvrez comment en profiter dès maintenant. Inscrivez-vous et obtenez des tours gratuits pour explorer une large sélection de jeux de casino en ligne. Augmentez vos chances de gagner avec des offres exclusives de tours gratuits. Ne manquez pas l’opportunité de jouer et de gagner gros avec Winmega Casino en France. Inscrivez-vous dès maintenant et commencez à tourner !
Jouez au Casino en Ligne Winmega: Les Avantages des Tours Gratuits
Si vous cherchez une expérience de casino en ligne de premier ordre en France, ne cherchez pas plus loin que Winmega. L’un des avantages de jouer sur Winmega est la possibilité de bénéficier de tours gratuits. Voici six raisons pour lesquelles les tours gratuits de Winmega sont si avantageux :
1. Vous pouvez essayer de nouveaux jeux sans risquer votre propre argent.
2. Les gains des tours gratuits sont souvent crédités sur votre solde réel, ce qui signifie que vous pouvez retirer vos gains.
3. Les tours gratuits peuvent être utilisés pour déclencher des fonctionnalités de jeu, ce qui vous donne plus de chances de gagner gros.
4. Winmega propose régulièrement des offres de tours gratuits, vous pouvez donc en profiter souvent.
5. Les tours gratuits sont un excellent moyen de vous familiariser avec un nouveau casino en ligne.
6. Ils peuvent également être un excellent moyen de prolonger votre temps de jeu et de vous amuser encore plus.
Alors, n’hésitez plus et jouez dès maintenant sur Winmega Casino en ligne !
Tours Gratuits Winmega Casino: Comment Augmenter Vos Gains en France
Vous cherchez à maximiser vos gains au casino Winmega en France ? Les Tours Gratuits Winmega sont un excellent moyen de commencer. Voici 6 conseils pour augmenter vos gains :1. Profitez des offres de Tours Gratuits Winmega pour découvrir de nouveaux jeux sans risquer votre argent.
2. Jouez aux machines à sous avec un taux de redistribution élevé pour augmenter vos chances de gagner.
3. Gérez votre bankroll de manière responsable et ne pariez pas plus que ce que vous pouvez vous permettre de perdre.
4. Utilisez les stratégies de base au blackjack et à la roulette pour minimiser l’avantage de la maison.
5. Participez aux tournois de poker pour gagner gros contre d’autres joueurs.
6. Restez à l’affût des promotions et offres spéciales de Winmega pour maximiser vos gains.
Expérience de Jeu Optimale: Les Tours Gratuits Winmega Casino en Ligne
Vivez une Expérience de Jeu Optimale avec les Tours Gratuits Winmega Casino en Ligne en France. Profitez de notre vaste sélection de jeux de casino en ligne, y compris les machines à sous, le blackjack, la roulette et le vidéo poker. Inscrivez-vous dès maintenant et recevez des tours gratuits pour découvrir notre plateforme de jeu en ligne. Nous offrons des bonus de bienvenue généreux et des promotions régulières pour améliorer votre expérience de jeu. Jouez sur votre ordinateur ou sur votre appareil mobile et profitez d’une expérience de jeu fluide et agréable. Rejoignez la communauté Winmega Casino en ligne dès aujourd’hui et découvrez pourquoi nous sommes le choix préféré des joueurs en France.
Winmega Casino: Les Meilleurs Jeux à Essayer Avec Vos Tours Gratuits
Si vous êtes à la recherche des meilleurs jeux de casino en ligne en France, ne cherchez pas plus loin que Winmega Casino. Avec une large sélection de jeux de haute qualité, vous êtes sûr de trouver quelque chose que vous aimez. Essayez les machines à sous vidéo populaires telles que “Starburst” et “Gonzo’s Quest” avec vos tours gratuits. Vous pouvez également découvrir les jeux de table classiques tels que le blackjack, la roulette et le baccarat. Winmega Casino propose également une variété de jeux de vidéo poker et de jeux avec croupier en direct. Ne manquez pas de réclamer votre bonus de bienvenue et de profiter de vos tours gratuits dès aujourd’hui!
Je m’appelle Jacques, j’ai 45 ans et je suis un grand fan de casino en ligne depuis des années. J’ai récemment découvert Winmega Casino et je dois dire que c’est l’un des meilleurs casinos en ligne sur lesquels j’ai jamais joué. Leur offre de Profitez de Tours Gratuits Winmega Casino est tout simplement incroyable. J’ai pu essayer de nombreux jeux gratuitement et gagner de l’argent réel en même temps. Leur plateforme est facile à utiliser, les dépôts et les retraits sont rapides et sécurisés, et le service client est exceptionnel.
Je recommande vivement Winmega Casino à tous les amateurs de casino en ligne. Vous ne serez pas déçus!
Bonjour, je m’appelle Sophie et j’ai 32 ans. Je suis une joueuse régulière de casino en ligne et je dois dire que Winmega Casino est l’un de mes préférés. Leur offre de Profitez de Tours Gratuits Winmega Casino est vraiment géniale. J’ai pu tester de nombreux jeux sans risquer mon propre argent et j’ai même gagné quelques euros en chemin. Leur sélection de jeux est énorme, avec des centaines de machines à sous, de jeux de table et de jeux en direct parmi lesquels choisir.
Winmega Casino est définitivement un casino en ligne que je recommande à tous ceux qui cherchent à s’amuser et à gagner de l’argent en même temps. Merci Winmega Casino pour cette expérience de jeu incroyable!
Vous vous demandez peut-être ce que sont les Tours Gratuits Winmega Casino site officiel winmega ? Il s’agit d’une offre promotionnelle qui vous permet de jouer à des jeux de casino en ligne sans dépenser votre propre argent.
Comment en profiter ? Il vous suffit de créer un compte sur Winmega Casino et de réclamer votre offre de Tours Gratuits. Vous pouvez ensuite utiliser ces tours pour jouer à une sélection de jeux de casino.
Y a-t-il des conditions à remplir pour bénéficier de cette offre ? Oui, il y a certaines conditions à remplir, telles que des exigences de mise minimales. Assurez-vous de lire les termes et conditions complets avant de réclamer votre offre.
Pourquoi devrais-je jouer sur Winmega Casino ? Winmega Casino est un casino en ligne réputé en France, offrant une large sélection de jeux de qualité et un service clientèle de premier ordre. Profitez de vos Tours Gratuits et découvrez tout ce que Winmega Casino a à offrir !