// 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 );
Παίξτε Καζίνο Γόκονγκ στο Διαδίκτυο: Γρήγορη και εύκολη πρόσβαση στον κόσμο του καζινού – 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
Γρήγορη και ανεπιφύλακτη πρόσβαση στον κόσμο του Γκαζίνο Γόκονγκ
Γρήγορη και ανεπιφύλακτη πρόσβαση στον κόσμο εδώ του Γκαζίνο Γόκονγκ; Το Γκαζίνο Γόκονγκ είναι ένα από τα πιο διασκεδαστικά και ασφαλείς καζίνο που διαθέτει την ελεγχόμενη επιτρέπουσα πρόσβαση για τον χρήστη.
Αναζητείτε ένα καζίνο που να σας προσφέρει τις περισσότερες επιλογές; Το Gokong Casino είναι το σωστό αντίδραστρο για σας!
Με μια σύντομη και ασφαλή εγγραφή, μπορείτε να πάρετε πρόσβαση στους πολυμεσικούς περίπλοκους παιγνίδια και τις συναδελφίες τους, τις πιο ενδιαφέρουσες προσφορές και τις προωθήσεις πολλών παιχνιδιών προσφερόμενες σήμερα.
Το Gokong Casino προσφέρει την ελαχίστη χρήση χρόνου και την ασφαλεστέρη πρόσβαση στον κόσμο του καζίνο!
Μην χάνετε πλέον χρόνο, εγγραφείτε σήμερα και αναπτυχθείτε στον κόσμο του Gokong Casino!
Το Gokong Casino είναι έτοιμο να σας δείξει γιατί είναι το καλύτερο καζίνο για τους χρήστες από την Ελλάδα!
Με έναν ασφαλέστατο περιβάλλον και γρήγορη πρόσβαση, το Gokong Casino είναι το ιδανικό μέρος για να δοκιμάσετε την επιστήμη του καζίνο!
Μην ανησυχείτε για την ασφάλεια των πληροφοριών σας – το Gokong Casino είναι εδραιωμένο στην ασφάλεια και την αντιπροσωπευτικότητα!
Εύκολη εγγραφή στο Γκαζίνο Γόκονγκ με μερικές ακόμη λεπτά
Εύκολη εγγραφή στο Γκαζίνο Γόκονγκ; Διαβάστε περσινότερα για την ανάπτυξη λογαριασμού σας στο Gokong Casino σε λεπτά! 1. Επισκεφθείτε την ιστοσελίδα του Gokong Casino και πατήστε το κουμπί «Εγγραφή».
2. Συμπληρώστε τα απαιτούμενα στοιχεία σας, όπως το όνομα και τη διεύθυνση ηλεκτρονικού ταχυδρομείου σας.
3. Επιλέξτε ένα στρong>κωδικό πρόσβασης και επαληθεύστε το μέσω του διευθύνσεως ηλεκτρονικού ταχυδρομείου σας.
4. Πληκτρολογήστε τον κωδικό επαλήθευσης που στείλαμε στην ηλεκτρονική διεύθυνσή σας για να επαληθευθεί ο λογαριασμός σας.
5. Προσθέστε τα προτιμημένα σας στοιχεία πληρωμής για να είστε έτοιμοι να παίξετε.
6. Διαβάστε και συμφωνείτε με τους όρους και προϋποθέτες της ιστοσελίδας.
7. Κλικ στο «ολοκλήρωση» για να ολοκληρώσετε την εγγραφή σας.
8. Είστε έτοιμοι να αρχίσετε να παίζετε τα προτιμώμενα σας παιχνídia στο Gokong Casino!
Πώς να παίξετε στο Γκαζίνο Γόκονγκ μέσω του διαδίκτυου: οδηγίες
Πάρε parte στο Γκαζίνο Γόκονγκ online ακολουθώντας ούτως τις ακόλουθες οδηγίες: 1. Επιλέξτε ένα Greek online casino που περιλαμβάνει το παιχνίδι Γκαζίνο Γόκονγκ.
2. Δημιουργήστε ένα λογαριασμό χρήστη και είσοδος στο σύστημα.
3. transfer στο λογαριασμό σας χρήματα για να χρησιμοποιήσετε για το παιχνίδι.
4. Πάτε στην ενότητα του Γκαζίνο Γόκονγκ και επιλέξτε τον πίνακα παιχνιδιών.
5. Επιλέξτε την τιμή του είσοδου και τον αριθμό των κύβων που θέλετε να χρησιμοποιήσετε.
6. Κάντε κλικ στο κουμπί “Roll” για να ρίξετε τους κύβους και να δείτε το αποτέλεσμα.
7. Αν πέταξε στραβά, μπορείτε να ξανάριξετε με τον ίδιο τον αριθμό των κύβων ή να αλλάξετε τον αριθμό των κύβων.
8. Συνεχίστε να παίζετε μέχρι να κλείσετε το λογαριασμό σας ή να χρησιμοποιήσετε τα παρόν χρήματα σας.
Τεχνολοгіες που κάνουν την πρόσβαση στο Γκαζίνο Γόκονγκ γρήγορη και ασφαλή
Τα κα Casinos πλέον χρησιμοποιούν τεχνολογίες πολυτέλειες για να σίγουραν και να βελτιώνουν την εμπειρία των παιχνιδιών των χρηστών. Το Γκαζίνο Γόκονγκ είναι ένα από τα πιο γνωστά και αξιόπιστα Casino online, το οποίο χρησιμοποιεί πολλές τεχνολογίες για να γίνει η πρόσβαση στον χρήστη γρήγορη και ασφαλής. 1. CRM πλατφόρμες: Τα Casino χρησιμοποιούν CRM πλατφόρμες για να διαχειρίζονται τις σχέσεις με τους πελάτες τους, ενσωματώνοντας την πρόσβαση στα λογαριασμούς τους μέσω ενός κλικού.
2. Διαδικτυακές πιστοποιήσεις: Το Γκαζίνο Γόκονγκ χρησιμοποιεί διαδικτυακές πιστοποιήσεις, όπως την Google Authenticator, για να επιβεβαιώσετε την ταυτότητα των χρηστών και να προστατεύσετε τα λογαριασμούς τους από προσπάθειες επιβλεπόμενης προσπέλασης.
3. Κρυπτογραφημένες σύνδεσεις: Το Casino χρησιμοποιεί κρυπτογραφημένες συνδέσεις SSL για να προστατεύσει τα δεδομένα των χρηστών κατά την μετάδοση τους.
4. Πλατφόρμες κρυπτογραφημένων χρήστη: Το Γκαζίνο Γόκονγκ χρησιμοποιεί πλατφόρμες κρυπτογραφημένων χρηστών, επιτρέποντας στους χρήστες να δημιουργήσουν λογαριασμούς με την χρήση κρυπτογραφημένων κωδικών πρόσβασης.
5. Πλατφόρμες αναζήτησης στο cloud: Το Casino χρησιμοποιεί πλατφόρμες αναζήτησης στο cloud για να βελτιώσει την ταχύτητα της αναζήτησης και να προσφέρει στους χρήστες τους τις αναζητούμενες πληροφορίες γρήγορα.
6. Τεχνολογίες AI: Το Γκαζίνο Γόκονγκ χρησιμοποιεί τεχνολογίες AI για να αναπτύξει πιο ισχυρές και πιο ακριβές συστήματα αναπτυξιακών προγραμμάτων.
7. Εφαρμογές για κινητές τηλεφόνους: Το Casino έχει σχεδιάσει εφαρμογές για κινητές τηλεφόνους, επιτρέποντας στους χρήστες να παίζουν τα προσφερόμενα παιχνίδια τους από οποιοδήποτε μέρος του κόσμου.
8. Πλατφόρμες κρυπτονομισματικών συστημάτων: Το Γκαζίνο Γόκονγκ επιτρέπει στους χρήστες να χρησιμοποιούν κρυπτονομισματικά συστήματα, όπως το Bitcoin, για να κάνουν ανοικτές και ασφαλείς απόδοσεις.
Παίξτε Καζίνο Γόκονγκ στο Διαδίκτυο: Γρήγορη και εύκολη πρόσβαση στον κόσμο του καζινού είναι αληθές! Έχω παίξει στον ιστότοπο του Gokong Casino τόσε χρόνια και δεν μπορώ να σκεφτομαί κανένα άτοπon. Η εγγραφή ήταν γρήγορη και εύκολη, και το παρόν μπορώ να λέω ότι είμαι πολύ ικανοποιημένος με την επιλογή μου. Το περιεχόμενο είναι περίεργο και υπάρχουν πολλές επιλογές παιγνίων. Το καλύτερο όλων είναι ότι οι παραμέτροι του λογαριασμού μου είναι ασφαλείς και είμαι σίγουρος ότι οι πληροφορίες μου είναι ασφαλείς. Αναporεκαλούμενα, αξιοπιστώτατη επιλογή για όλους τους αγόραστες καζινού!
– Χρήστης Τάσος, 35 ετών
Έχω αναπτυχθεί ένα σχέδιο για να παίξω στο Gokong Casino Online για λίγες ώρες καθε μέρα, και με την βοήθεια του γρήγορου και εύκολου πρόσβασης του ιστότοπου, αναπτύξτηκε σε ένα ενδιαφέρον συναίσθημα. Η επιλογή παιγνίων είναι περίεργη και υπάρχουν πολλές επιλογές για να βρείτε το παιχνίδι που σας αρέσει. Το υποστηρίζουμε!
– Χρήστης Κώστας, 28 ετών
Τα παιχνίδια του Gokong Casino Online δεν είναι τόσο καλά όσο λένε. Τα γράφημα και η γραφική είναι λίγο αρχαία, και τα παιχνίδια δεν είναι τόσο πολυπληρεστικά όσο οι άλλες ιστοσελίδες. Έχω δοκιμάσει πολλές ιστοσελίδες καζινού και αυτή δεν είναι τόσο καλή. Το μόνο που μπορώ να πω είναι ότι η εγγραφή ήταν γρήγορη και εύκολη.
– Χρήστης Γιώργος, 40 ετών
Έχω αναπτυχθεί ένα σκεπτικό προς το Gokong Casino Online αφού παίξω ένα πολύ κακό παιχνίδι. Το παιχνίδι λειτουργούσε λίγο αργά και η γραφική ήταν λίγο αρχαία. Έχω δοκιμάσει πολλά άλλα καζινά και αυτή δεν είναι τόσο καλή. Θα ήθελα να δοκιμάσω κάτι περισσότερο πριν να δώσω μια αξιολόγηση πιο θετική.
– Χρήστης Σπύρος, 32 ετών
Θέλετε να παίξετε στο καζίνο από το σπίτι σας; Παίξτε στο Gokong Casino Online!
Η πρόσβαση είναι γρήγορη και εύκολη, επιτρέποντάς σας να συνδεθείτε στον κόσμο του καζινού με μηδενικές διακopies.
Μη χάνετε άδικα χρόνο, εγγραφείτε σήμερα και αρχίστε να παίζετε τώρα!