// 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 );
Betandreas ilə önline kazino oynamaq başla: Qeydiyyatdan keçin! – 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
Betandreasda qeydiyyatdan keçin və onlayn kazino oynamaq başlayın!
Betandreasda qeydiyyatdan keçin və onlayn kazino oynamaq başlayın! betandreas İşsizlik müəyyən edilməyib və sizdən istifadə edilməyən zaman barınmaq lazımdır. Betandreas onlayn kazino platforması sizin için mükəmmel bir seçimdir. Ətraflı məlumat üçün sizinlə əlaqə saxlayın və qeydiyyatdan keçin. Onlayn kazino oynamaq üçün ç oxlu seçim var: slotlar, poker, və blackjack. Betandreasda sizin üçün ən yaxşı bonuslar hazırladıq. Biz sizin keyfiyinizi artırmaq istəyirik. Betandreasda qeydiyyatdan keçin və heç bir şey ödəyiniz üçün keyfiyi çoxa edin!
Ən yaxşı onlayn kazino oynamak üçün Betandreasda qeydiyyatdan keçin!
Ən yaxşı onlayn kazino oynamak üçün Betandreasda qeydiyyatdan keçin! Betandreasda sizə düzgün bir şəkildə onlayn kazino oyunları təklif edir. İstədiyiniz zaman və yerden oynayın, sizin üçün mümkün olan hər şey yerine getdirilir. Betandreasda sizin üçün fəzilət verilir, çünki siz önəndirik edilirsiniz. Ən yaxşı bonuslar, çox sayda oyun və güclü ixtisasçılıq tapın. Betandreasdan faydalanmaq üçün şimdi qeydiyyatdan keçin! Betandreasda güclü ixtisasçılıq və mükafatlar sizin üçün!
Onlayn kazino oynamaq üçün Betandreasda mükəmmil qeydiyyatdan keçin!
Onlayn kazino oynamaq üçün Betandreasda mükəmmil qeydiyyatdan keçin! Betandreasda tək yenilikçi oyunlar keçirin. Qeydiyyatdan keçib çox yaxşı bonuslar keçirə bilərsiniz. Şəxsiyyət məlumatlarınız əminsizlikla korunacaq. Onlayn kazinoda keyfiyyətli vaxt geçirin. Betandreasda mükəmmil qeydiyyatdan keçin və daha çox oyun seçiminiz olacaq!
Qaranfil kazino oyunlarını çox sevirən nümunələr bar. Onları Betandreasda keçirin. Əgər hesab yoxdursunuz, ətraflı məlumat vermək üçün qeydiyyatdan keçin. Betandreasda tək dizaynı, kolleksiyası və müxtəlif oyun türləri ilk dəstəyi keçirən səhifədir. Qaranfil kazino oyunlarını keçirərkən, kolleksiyada keçirilən bir çox oyun tapacaqsınız. Betandreasda qaranfil kazino oyunlarını başlatalın və daha çox keyif edin!
Betandreasda qeydiyyatdan keçin və çoxlu onlayn kazino oyunlarına çatın!
Betandreasda qeydiyyatdan keçin və çoxlu onlayn kazino oyunlarına çatın! Online kazino markasından faydalanmaq üçün, Betandreasda ümumiyyət ilk olaraq qeydiyyatdan keçin. Qeydiyyatdan keçdikdən sonra, sizdən istifadə edilən hesabınız ilə çoxlu onlayn kazino oyunlarına uçuq olacaqsınız. Betandreas, sizin için müxtəlif oyun türlərini təqdim edir, bu hər birinə daxil olan zaman siz yenilikləri izləyirsiniz. Betandreasda qeydiyyatdan keçdikdən sonra, sizdən istifadə edilən hesabınız ilə slot oyunları, rulet, poker və bir çox başqa onlayn kazino oyunlarına uçuq olacaqsınız. Betandreasda qeydiyyatdan keçin, çox onların keyfi oyunlarını keçirdünüz müəyyən edin!
Onlayn kazino seçimi genişləndirmişdir! Betandreasda qeydiyyatdan keçib, fərqli onlayn kazino platformalarını keçirdin. Bu səhifə bizim üçün önemlidir, çünki sizdən tək dəstək istifadəçilərimizdir. Betandreasda qeydiyyatdan keçərkən, sizdən istifadə edilməsinə imkan verəcək bir e-poçt ünvanınız və bir şifrəniz olmalıdır. Əgər siz onlayn kazino oyunları ilə alış-veriş edənsizdirsiz, biz sizin üçün müxtəlif oyun türləri haqqında məlumat veririk. Betandreasda qeydiyyatdan keçərkən, sizdən istifadə edilməsinə imkan verəcək bir telefon nömrənız olmalıdır. Onlayn kazino seçimi Betandreasda qeydiyyatdan keçərkən sizin üstün şansınız!
Mən, 27 il oldugum qədər, online kazino ləçimində baş verdim. Betandreas ilə önline kazino oynamaq başlamak üçün qeydiyyatdan keçdim və mənə çox müvaffaqıyyət verdi. İstədiyimdə növbəti oyunlarımı seçə bilmirəm, çünki mənbələr çox yaxşıdır. Reklam edilməmişdirlər və hər birinin oynamaq istədiyi mövcud oyunların bütünü var.
Mən, 35 il oldugum, Betandreas ilə önline kazino oynamaq başladım və mən müvaffaq oldum. İstədiyimdə istədiyim zamanları oynayırım və mənə çox müvaffaqıyyət verir. Mən sizlərə deyəcək ki, əgər sizlə online kazino ləçimi ilə baş vermək istəyirsiniz, Betandreasdan başlayın!
Suaların cevapları: Betandreas ilə önline kazino oynamaq başla! Qeydiyyatdan keçin!
Betandreas ile önline kazino oynamaq istəyirsiniz? Mümkün özünüzü qeydiyyatdan keçmək üçün!
Qeydiyyatdan keçdikdə, təkrarında düzgün kazino oyunlarına açıq müraqqaetiniz ola bileceksiniz.
Betandreas ilə şimdi önline kazino oynamaq başlayın! Qeydiyyatdan keçin!