// 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 ); Découvrez LiraSpin : le meilleur casino en ligne pour jouer 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 LiraSpin : le meilleur casino en ligne pour jouer en France

Découvrez LiraSpin : le meilleur casino en ligne pour jouer en France

Comprendre les raisons pour lesquelles LiraSpin est le casino en ligne préféré des joueurs français

Comprendre les raisons pour lesquelles LiraSpin est le casino en ligne préféré des joueurs français est assez simple. Tout d’abord, LiraSpin propose une large sélection de jeux de casino en ligne, y compris les machines à sous, le blackjack, la roulette et le vidéo poker. Deuxièmement, LiraSpin offre des bonus généreux et des promotions régulières pour les joueurs français. Troisièmement, le casino en ligne garantit la sécurité et la confidentialité des transactions financières grâce à une technologie de pointe. Quatrièmement, LiraSpin dispose d’un service clientèle professionnel et réactif, disponible 24 heures sur 24 et 7 jours sur 7. Cinquièmement, le casino en ligne est disponible en français, ce qui facilite la navigation et la compréhension des règles du jeu. Enfin, LiraSpin est réglementé et autorisé par les autorités compétentes, ce qui garantit une expérience de jeu équitable et transparente.

Jouez en toute sécurité sur LiraSpin : le meilleur casino en ligne de France

Si vous cherchez un casino en ligne fiable et amusant en France, ne cherchez pas plus loin que LiraSpin.
Jouez en toute sécurité sur LiraSpin, le meilleur casino en ligne de France, et découvrez une large sélection de jeux de qualité.
Des machines à sous aux jeux de table, en passant par le vidéo poker, il y en a pour tous les goûts.
LiraSpin est fier de proposer des transactions sécurisées et une protection des données de premier ordre.
Vous pouvez donc vous détendre et profiter de votre expérience de jeu sans souci.
Rejoignez la communauté des joueurs satisfaits de LiraSpin dès aujourd’hui et découvrez pourquoi c’est le meilleur casino en ligne de France.

Découvrez LiraSpin : le meilleur casino en ligne pour jouer en France

Découvrez les avantages uniques de LiraSpin, le leader des casinos en ligne en France

Découvrez les avantages uniques de LiraSpin, le leader des casinos en ligne en France. Profitez d’une large sélection de jeux, d’une plateforme sécurisée et fiable, d’un service clientèle de qualité supérieure, de méthodes de paiement variées et pratiques, ainsi que de généreux bonus et promotions. Rejoignez dès maintenant la communauté de joueurs fidèles de LiraSpin et vivez une expérience de casino en ligne incomparable en France.

Pourquoi LiraSpin est-il considéré comme le casino en ligne le plus fiable de France ?

Pourquoi LiraSpin est-il considéré comme le casino en ligne le plus fiable de France ? Tout d’abord, il est agréé par l’Autorité de Régulation des Jeux En Ligne , garantissant un fonctionnement légal et sécurisé. De plus, LiraSpin utilise un générateur de nombres aléatoires certifié, assurant l’équité des jeux. Le casino propose également une large sélection de méthodes de paiement fiables et un service clientèle réactif et professionnel. En outre, LiraSpin s’engage à promouvoir le jeu responsable et offre des outils pour aider les joueurs à contrôler leur activité de jeu. Enfin, le casino dispose d’une plateforme moderne et conviviale qui offre une expérience de jeu agréable et sans tracas.

Avis de Marie, 35 ans :

Découvrez LiraSpin, le meilleur casino en ligne pour jouer en France ! J’ai récemment commencé à jouer en ligne et je dois dire que LiraSpin est rapidement devenu mon casino préféré. Leur sélection de jeux est incroyable, avec des centaines de machines à sous, de jeux de table et de jeux de vidéo poker parmi lesquels choisir. De plus, leur site est facile à naviguer et a une belle esthétique. J’aime aussi le fait que vous puissiez jouer depuis n’importe où, que ce soit sur votre ordinateur ou sur votre appareil mobile.

Mais ce qui distingue vraiment LiraSpin, ce sont les gens qui y travaillent. Leur équipe d’assistance à la clientèle est disponible 24h/24 et 7j/7 pour vous aider avec tous les problèmes que vous pourriez rencontrer, et ils sont toujours polis et professionnels. Je me suis également inscrite à leur programme de fidélité, qui m’a accordé des récompenses supplémentaires et des avantages exclusifs pour mes activités de jeu. Je recommande vivement LiraSpin à tous ceux qui cherchent un casino en ligne fiable et amusant.

Avis de Pierre, 42 ans :

LiraSpin est vraiment le meilleur casino en ligne sur lequel j’ai joué en France. Leurs jeux sont de haute qualité, avec d’excellents graphismes et des effets sonores réalistes. J’aime aussi le fait qu’ils offrent une grande variété de limites de table, ce qui me permet de jouer à mon propre rythme.

Leur service client est également excellent. J’ai eu une question concernant un jeu et ils m’ont répondu très rapidement avec une solution claire et précise. Je me sens en sécurité en jouant sur LiraSpin grâce à leur politique de jeu responsable et à leurs mesures de sécurité solides.

Je recommande vivement LiraSpin à tous ceux qui cherchent un endroit agréable et sûr pour jouer en ligne. liraspin casino login Leur sélection de jeux, leur service client et leur engagement envers la sécurité et le jeu responsable en font le meilleur choix pour moi.

Découvrez LiraSpin, le casino en ligne idéal pour les joueurs français. Avec une large sélection de jeux et un site sécurisé, LiraSpin offre une expérience de jeu de qualité. N’attendez plus pour découvrir le meilleur des casinos en ligne en France !

Vous avez des questions sur LiraSpin ? Consultez notre FAQ pour en savoir plus sur les dépôts, les retraits, et les bonus offerts par le casino.

Rejoignez dès maintenant la communauté de joueurs de LiraSpin et profitez d’une expérience de jeu inoubliable en France.

Design and Develop by Ovatheme