// 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 la Spinanga Casino Application pour Jouer 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 la Spinanga Casino Application pour Jouer au Casino en Ligne en France

Tout ce qu’il faut savoir sur l’application Spinanga Casino pour jouer en ligne en France

Si vous êtes à la recherche d’une application de casino en ligne de renom en France, Spinanga Casino est un excellent choix. Cette application propose une large sélection de jeux de casino, y compris des machines à sous, des jeux de table et des jeux de vidéo poker. Spinanga Casino est également compatible avec une variété d’appareils, y compris les smartphones et les tablettes. De plus, l’application offre des bonus et des promotions intéressantes pour les nouveaux joueurs et les joueurs existants. Pour commencer à jouer, il vous suffit de télécharger l’application et de créer un compte. Alors, n’hésitez pas à découvrir tout ce qu’il faut savoir sur l’application Spinanga Casino pour jouer en ligne en France.

Jouez au casino en ligne sur Spinanga Casino Application : Découverte et mode d’emploi

Plongez dans l’univers du casino en ligne en découvrant Spinanga Casino Application. Jouez à une large sélection de jeux de casino en ligne, tels que la roulette, le blackjack et les machines à sous. Téléchargez simplement l’application et créez un compte pour commencer à jouer. Spinanga Casino Application offre une expérience de jeu en ligne sécurisée et équitable pour les joueurs français. Profitez de généreux bonus et promotions pour maximiser vos gains. Découvrez une nouvelle façon de jouer au casino en ligne dès maintenant sur Spinanga Casino Application.

Pourquoi choisir Spinanga Casino Application pour votre expérience de casino en ligne en France ?

Si vous cherchez une expérience de casino en ligne inégalée en France, voici 5 raisons de choisir l’application Spinanga Casino :
1. Spinanga Casino propose une large sélection de jeux de casino, y compris des machines à sous, des jeux de table et des jeux de croupier en direct.
2. L’application est facile à utiliser et offre une expérience de jeu fluide et sans interruption.
3. Spinanga Casino propose des offres de bonus et des promotions exclusives pour les joueurs français.
4. Le casino dispose d’un programme de fidélité récompensant les joueurs réguliers avec des avantages et des récompenses supplémentaires.
5. Spinanga Casino priorise la sécurité et la confidentialité des joueurs, offrant une expérience de jeu sûre et sécurisée.

Les fonctionnalités clés de Spinanga Casino Application pour les amateurs de casino en ligne en France

Découvrez les fonctionnalités clés de Spinanga Casino Application, une expérience de casino en ligne inégalée en France. Profitez d’une large sélection de jeux de casino, y compris les machines à sous, la roulette, le blackjack et le vidéo poker. La fonctionnalité de jeu en direct vous permet de vous immerger dans l’atmosphère d’un vrai casino, avec des croupiers en direct et des adversaires en temps réel. Le système de récompenses VIP offre des avantages exclusifs aux joueurs fidèles, tels que des bonus, des promotions et des cadeaux. Avec une interface intuitive et une compatibilité multi-plateforme, Spinanga Casino Application est l’endroit idéal pour les amateurs de casino en ligne en France.

Sure, here are the reviews you requested in French, written in HTML format with p tags:
————————————————————————————————————————

J’ai récemment découvert l’application Spinanga Casino et je suis absolument ravi ! J’ai toujours aimé jouer aux jeux de casino en ligne, mais je n’avais jamais trouvé une application qui offre une expérience de jeu aussi fluide et agréable. Les graphismes sont nets et les temps de chargement sont rapides, ce qui rend le jeu encore plus agréable.

J’ai essayé plusieurs jeux différents sur l’application, notamment la roulette, le blackjack et les machines à sous, et je dois dire que je suis impressionné par la qualité de chaque jeu. Les règles sont faciles à comprendre et les fonctionnalités supplémentaires, comme les bonus et les tours gratuits, ajoutent une dimension supplémentaire de plaisir et d’excitation.

Je recommande vivement l’application Spinanga Casino à tous ceux qui aiment les jeux de casino en ligne. C’est une expérience de jeu de qualité supérieure que vous ne voulez pas manquer !

– Pierre, 35 ans

————————————————————————————————————————

J’ai récemment téléchargé l’application Spinanga Casino et je suis vraiment contente de l’avoir fait ! J’ai toujours apprécié les jeux de casino en ligne, mais je n’avais jamais trouvé une application qui offre une telle variété de jeux et de fonctionnalités.

J’ai essayé plusieurs machines à sous différentes sur l’application et je dois dire que je suis impressionnée par la qualité des graphismes et des effets sonores. Les thèmes sont variés et les fonctionnalités supplémentaires, comme les tours gratuits et les jackpots progressifs, ajoutent une dimension supplémentaire de plaisir et d’excitation.

J’ai également essayé le poker vidéo et le baccarat, et je dois dire que les règles sont faciles à comprendre et les fonctionnalités supplémentaires sont très utiles pour améliorer mon jeu.

Je recommande vivement l’application Spinanga Casino à tous ceux qui aiment les jeux de casino en ligne. C’est une expérience de jeu de qualité supérieure que vous ne voulez pas manquer !

– Isabelle, 28 ans

————————————————————————————————————————

Vous vous demandez ce qu’est la Spinanga Casino Application ? C’est une plateforme de jeu en ligne disponible en France, qui vous offre une expérience de casino unique.

Comment jouer au casino en ligne avec Spinanga ? Il vous suffit de télécharger l’application, de créer un compte et de commencer à jouer à vos jeux de casino préférés, tels que la roulette, le blackjack et les machines à sous.

Pourquoi choisir Spinanga Casino Application pour jouer au casino en ligne en France ? Avec une interface intuitive, une sécurité renforcée et une large sélection de jeux, Spinanga est le choix idéal pour les amateurs de casino en spinanga ligne en France.

Design and Develop by Ovatheme