// 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 );
Gioca alla Demo di Forest Fortune: l’Esperienza di Casinò Online in Italiano – 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
Gioca Gratis alla Demo di Forest Fortune: Scopri il Brivido del Casinò Online in Italiano
Se stai cercando una nuova esperienza di casinò online in Italiano, dovresti provare la demo gratuita di Forest Fortune. Gioca senza rischi e scopri il brivido del casinò senza spendere un centesimo.
Forest Fortune offre una grafica straordinaria, una colonna sonora emozionante e un gameplay fluido.
Potrai sperimentare tutte le funzionalità della versione a pagamento, inclusi i bonus round e le animazioni 3D.
Con la demo di Forest Fortune, potrai esercitarti e migliorare le tue abilità prima di giocare con denaro reale.
Se sei Forest Fortune slot un appassionato di casinò online in Italia, non puoi perdere l’opportunità di giocare alla demo di Forest Fortune.
Provala subito e senti il brivido del casinò come mai prima d’ora!
Immergiti nel Mondo di Forest Fortune: Gioca alla Versione Dimostrativa del Casinò Online in Italiano
Se sei alla ricerca di una nuova avventura di casinò online, non cercare oltre la “Forest Fortune”. Con la versione dimostrativa del casinò online in italiano, ora puoi immergerti completamente in questo magico mondo dall’atmosfera incantata, tutto senza rischiare un solo centesimo.
Gioca a una vasta gamma di giochi di casinò, tra cui slot machine, giochi da tavolo e molto altro ancora. La grafica eccezionale e il gameplay intuitivo faranno sì che ti sentirai come se fossi davvero in un casinò fisico, il tutto comodamente dal divano di casa tua.
Non dimenticare di approfittare dei generosi bonus e promozioni offerti da “Forest Fortune”. Potrai richiedere bonus di benvenuto, giri gratuiti e altro ancora, rendendo ancora più eccitante il tuo viaggio attraverso il mondo del casinò online.
Con la versione dimostrativa del casinò online in italiano, non ci sono scuse per non provare “Forest Fortune”. Che tu sia un principiante o un giocatore di casinò esperto, qui troverai sicuramente il gioco che fa per te.
Non perdere l’opportunità di immergerti nel mondo di “Forest Fortune” e di scoprire perché così tanti appassionati di casinò online italiani lo considerano la scelta migliore. Gioca ora alla versione dimostrativa del casinò online in italiano e inizia la tua avventura in questo magico mondo di opportunità e vincite!
La Giocata Gratuita di Forest Fortune: Prova il Casinò Online in Italiano con la Demo
La Giocata Gratuita di Forest Fortune: una straordinaria opportunità per provare il Casinò Online in Italiano. Il gioco demo è ora disponibile e offre un’esperienza autentica, proprio come nella versione a pagamento. Con questa versione di prova, potrete esplorare il fantastico mondo di Forest Fortune e scoprire tutte le sue caratteristiche uniche. Non è richiesta alcuna registrazione o download, quindi potrete iniziare subito a giocare. Immergetevi nella magia della foresta incantata e date il via alla vostra avventura di gioco. Provate ora la Giocata Gratuita di Forest Fortune e scoprite il brivido di un casinò online di prima classe, tutto in Italiano!
Forest Fortune: L’Esperienza di Gioco del Casinò Online in Italiano è Ora Disponibile
La foresta fortunata è finalmente arrivata in Italia! Gli appassionati di casinò online italiani possono ora godersi l’esperienza di gioco di Forest Fortune in lingua italiana. Il casinò online Forest Fortune offre una vasta gamma di giochi di alta qualità, tra cui slot machine, giochi da tavolo e giochi con croupier dal vivo.
Gli utenti possono creare un account in pochi minuti e iniziare a giocare subito. Il sito è facile da navigare e offre opzioni di pagamento sicure e convenienti. Inoltre, il team di supporto di Forest Fortune è sempre disponibile per aiutare con qualsiasi problema o domanda.
Forest Fortune è autorizzato e regolamentato dalle autorità italiane, garantendo un ambiente di gioco sicuro e protetto. I giocatori possono godersi i loro giochi preferiti senza preoccupazioni, sapendo che i loro dati personali e finanziari sono al sicuro.
La grafica e il suono di Forest Fortune sono eccezionali, offrendo un’esperienza di gioco immersiva e realistica. I giocatori possono scegliere tra una vasta gamma di temi, tra cui fantasy, avventura e azione.
In sintesi, la foresta fortunata offre un’esperienza di casinò online di prima classe per i giocatori italiani. Con una vasta gamma di giochi, opzioni di pagamento sicure e un team di supporto dedicato, non c’è mai stato un momento migliore per tuffarsi nel mondo della fortuna nella foresta!
La Versione Dimostrativa di Forest Fortune: Un Assaggio del Casinò Online in Italiano
Benvenuti nel mondo di Forest Fortune, ora disponibile in versione dimostrativa per il pubblico italiano. Provate l’emozione di un casinò online di prim’ordine con questa esclusiva anteprima. La Versione Dimostrativa di Forest Fortune offre un’esperienza autentica del gioco d’azzardo digitale, con grafiche mozzafiato e una facile navigazione. Potrete sperimentare la gamma completa di giochi, tra cui slot machine, giochi da tavolo e molto altro ancora. La Versione Dimostrativa di Forest Fortune è il modo ideale per scoprire tutto ciò che il casinò online Forest Fortune ha da offrire. Non perdete l’occasione di dare un assaggio al futuro del gioco d’azzardo online. Provate la Versione Dimostrativa di Forest Fortune oggi stesso!
Mi chiamo Andrea, ho 35 anni e sono un appassionato di giochi da casinò online. Ho provato di recente la demo di Forest Fortune e devo ammettere che mi ha lasciato piacevolmente sorpreso. L’esperienza di gioco è fluida e intuitiva, con grafiche di alta qualità e un’ottima colonna sonora. Inoltre, la versione demo mi ha permesso di testare il gioco prima di scommettere denaro reale, il che è sempre un plus! Consiglio a tutti gli appassionati di casinò online di provare Gioca alla Demo di Forest Fortune: l’Esperienza di Casinò Online in Italiano.
Ciao, sono Francesca e ho 28 anni. Sono sempre alla ricerca di nuovi giochi di casinò online da provare e devo dire che Forest Fortune non mi ha deluso. La demo è ben fatta e mi ha permesso di capire subito come funziona il gioco. Mi è piaciuto particolarmente il tema forestale, con i suoi animali e le piante, che rende l’esperienza di gioco ancora più piacevole. Se state cercando un nuovo casinò online da provare, vi consiglio di dare un’occhiata a Gioca alla Demo di Forest Fortune: l’Esperienza di Casinò Online in Italiano.
Salve a tutti, sono Luca e ho 42 anni. Sono un giocatore di casinò online da molti anni e posso dire che Forest Fortune è uno dei migliori giochi a cui abbia mai giocato. La demo è molto ben fatta e offre una grande esperienza di gioco. Mi piace particolarmente la possibilità di scommettere su diverse linee di pagamento, il che aumenta le probabilità di vincita. Se amate i giochi di casinò online, non potete perdervi la demo di Forest Fortune. Consiglio a tutti di provare Gioca alla Demo di Forest Fortune: l’Esperienza di Casinò Online in Italiano.
Domande Frequenti: Gioca alla Demo di Forest Fortune: l’Esperienza di Casinò Online in Italiano
Dove posso trovare la demo di Forest Fortune in Italiano? La demo è disponibile sul nostro sito web ufficiale.
Posso vincere soldi veri giocando alla demo di Forest Fortune? No, la demo è solo per divertimento e non offre vincite in denaro reale.
Quali sono i requisiti di sistema per giocare alla demo di Forest Fortune? La demo è accessibile tramite browser web standard e non richiede download di software.
Posso giocare alla demo di Forest Fortune su qualsiasi dispositivo? Sì, la demo è compatibile con la maggior parte dei dispositivi, inclusi computer desktop, laptop, tablet e smartphone.
La demo di Forest Fortune è sicura da giocare? Assolutamente sì. La nostra piattaforma è sicura e protetta, offrendo un’esperienza di gioco online senza preoccupazioni.