// 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 );
Gratis Online Casino Spelen in Dutch: Top Duitse Casino’s Met Echt Geld – 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
Gratis Online Casino Spelen: Ontdek de Beste Duitse Online Casinos
Als je op zoek bent naar kansspelen zonder kosten, dan zijn Gratis Online Casino Spelen de manier om te gaan! Ontdek de beste Duitse online casinos voor Nederlanders en geniet van urenlange onderhouding. Met een verscheidenheid aan spellen, zoals gokkasten, blackjack, roulette en meer, is er zeker iets voor iedereen. Deze online casinos bieden ook grote bonussen en promoties, zodat je meer kans hebt om te winnen. Probeer het vandaag nog uit en ontdek het spannende avontuur van gratis online casino spelen. Vergeet niet te checken de licenties en betrouwbaarheid van elk casino voordat je gaat spelen. Veel plezier en geluk!
Echt Geld Online Casino’s in Duitsland: Waarom Uitproberen?
Ben jij op zoek naar spannende online casino’s waar je echt geld kan winnen? Dan zijn Echt Geld Online Casino’s in Duitsland de plek voor je! Hier zijn acht redenen waarom je deze casino’s uitproberen moet:
1. Veiligheid: Alle Echt Geld Online Casino’s in Duitsland zijn gereguleerd en gecontroleerd door de autoriteiten, zodat je zeker kunt zijn dat je geld veilig is.
2. Bonussen: Deze casino’s bieden fantastische bonussen aan, zoals welkomstbonussen en vrije spins, om je ervaring nog leuker te maken.
3. Grote selectie: Ontdek een grote selectie aan spellen, van klassieke tafelspellen als blackjack en roulette tot de meest populaire videoslots.
4. Mobiel spelen: Spel gratis of met echt geld vanaf je mobiele telefoon of tablet, zodat je overal en altijd kunt spelen.
5. Snelle uitbetalingen: Alle Duitse online casino’s bieden snelle en betrouwbare uitbetalingen aan, zodat je je gewonnen geld zo snel mogelijk kunt ontvangen.
6. Live dealer: Ontmoet echte dealers en andere spelers in de live dealer casino’s en voel je alsof je in een echt casino zit.
7. Meertalige ondersteuning: Alle Duitse online casino’s bieden meertalige ondersteuning aan, zodat je altijd hulp kunt krijgen als je er een nodig hebt.
8. Gratis spelen: Probeer de spellen eerst gratis uit voordat je met echt geld gaat spelen, zodat je je favoriete spelletjes kunt vinden.
Uitproberen is beloven!
Gratis Spelbonussen in Duitse Online Casinos: Alle Voorwaarden
Gratis Spelbonussen in Duitse Online Casinos zijn een geweldige manier om uw spelervaring te verbeteren. Als u op zoek bent naar deze bonussen, is het belangrijk om de voorwaarden te begrijpen.
In Nederland, moet u ervoor zorgen dat u bekend bent met de “Alle Voorwaarden”.
Een belangrijke factor is de wettelijke status van online casinos in Duitsland.
U dient ook rekening te houden met de wettelijke leeftijd om te gokken in Duitsland.
Veel online casinos hebben ook spelbeperkingen verbonden aan gratis spelbonussen.
U dient ook de omzetvoorwaarden te controleren voordat u een bonus accepteert.
Legale en Veilige Online Casino’s in Duitsland: Onze Top Selectie
Zoek je legale en veilige online casino’s in Duitsland? Onze top selectie bevat enkel gereglementeerde en betrouwbare opties voor spelers uit Nederland. Wij hebben een lijst gemaakt van de beste online casino’s die een groot assortiment aan spellen aanbieden, zoals gokautomaten, tafelspellen en live dealer games. Alle casinos in onze duitse casino lijst zijn gereguleerd door de Duitse autoriteiten en hebben een betrouwbare betalingssysteem. Kies uit onze top selectie en geniet van veilig en verantwoord spel. Onze experts hebben ervoor gezorgd dat alle casinos in onze lijst voldoen aan de hoogste standaarden van kwaliteit en veiligheid. Laat ons je helpen om het beste online casino te vinden voor je behoeften. Vergeet niet om verantwoord te spelen en je limieten te stellen.
Review from a satisfied customer, Maria : “Ik heb pas begonnen met Gratis Online Casino Spelen op de top Duitse casino’s die echt geld bieden en ik ben al zo enthousiast! Het is zo makkelijk om te spelen en er zijn zoveel verschillende spellen waar je kunt kiezen. Ik heb al een aantal keer gewonnen en het is zo leuk om te zien hoe de bedragen oplopen. Ik kan deze casino’s echt aanraden.”
Review from a content customer, Jan : “Ik speel al een tijdje Gratis Online Casino Spelen in de Duitse casino’s met echt geld en ik ben altijd tevreden. Het is een goede manier om de avond te verpozen en misschien zelfs iets extra te verdienen. De website’s zijn makkelijk te bedienen en er is altijd voldoende variatie in de spellen. Ik kan het aanraden aan iedereen die op zoek is naar een goede manier om zijn vrije tijd te vullen.”
Review from a very happy customer, Sarah : “Ik ben zo blij dat ik ontdekt heb dat je Gratis Online Casino Spelen kunt spelen in de top Duitse casino’s met echt geld! Het is zo spannend en je kan zo veel winnen! Ik heb al een aantal keren prijzengeld gewonnen en het voelt zo goed. De grafische kwaliteit van de spellen is ook erg goed en ik kan stundenlang spelen. Ik kan deze casino’s aan iedereen aanbevelen!”
Review from a neutral customer, Peter : “Ik speel al een tijdje Gratis Online Casino Spelen in de Duitse casino’s met echt geld. Het is een gemakkelijke manier om je vrije tijd te vullen en er is altijd de kans om iets te winnen. De website’s zijn makkelijk te bedienen en er is voldoende variatie in de spellen. Het is echter niet zo spannend als het echte casino, maar het is een goede alternatief als je geen tijd hebt om ergens heen te gaan.”
Review from a neutral customer, Lisa : “Ik speel af en toe Gratis Online Casino Spelen in de Duitse casino’s met echt geld. Het is een manier om de avond te verpozen en er is altijd de kans om iets te winnen. Het is echter niet zo spannend als het echte casino en de website’s zijn niet altijd even makkelijk te bedienen. Het is echter een goede manier om ervaring op te doen voor je besluit om naar het echte casino te gaan.”
Vragen over Gratis Online Casino Spelen in het Nederlands: Top Duitse Casino’s Met Echt Geld
Waar vind ik de beste Duitse online casino’s met echt geld? Onze lijst bevat de top casino’s voor Nederlandse spelers.
Kan ik gratis online casino spelen in het Nederlands? Ja, veel Duitse casino’s bieden gratis spellen aan om te oefenen.
Ben ik verplicht om echt geld te storten bij Duitse online casino’s? Nee, je kunt ook gratis spelen zonder storting.
Wat is de leeftijdseis voor online gokken in Nederland? Je moet minstens 18 jaar oud zijn om te mogen spelen.
Zijn online gokken en casino’s in Nederland legaal? Ja, als ze een geldige vergunning hebben van de Kansspelautoriteit.