// 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 Telegram Onlayn Kasino Oynamaq: Azerbaycanda Popüler – 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
Betandreas Telegram Onlayn Kasino Oynamaq Azerbaycanda məşhurdir. Bu platform, telegramdakı istifadəçilər üçün özəllikli bir xidmət sunar. Əlavə, Betandreas Onlayn Kasino sitesi de Azerbaycanda popülerdür. İstifadəçilər, qonaqdan keyif almaq üçün favorili oyunlarını buradan tapa bilər. Betandreas, ən yeni telegramdakı oyunlara da əlavə edib, daha çox keyifi sağlayır. Ayrıca, bizə xoş gəlir sözündə olan bütün istifadəçilərə çox yaxşı bonuslar və promosyonlar sunulur.
Azerbaycanda Popüler Oyunlar: Betandreas Telegram Onlayn Kasino
Azərbaycanda popüler oyunlar: Betandreas Telegram Onlayn Kasino saxlığınızı aza bilər. İşsizlik sürməyinizi unutmayın, sizin için adətlənmiş bir çeşid ilk defə oynayın. Betandreas Telegram Onlayn Kasino azərbaycan dilində düzgün müştəri xidmətinə səhvet edir. Siz azərbaycan dilində qulacaq oyunlar oynamayacaqsınız. Betandreas Telegram Onlayn Kasino kompüter və ya telefon sizin üçün işləyir. Betandreas Telegram Onlayn Kasino sizinlə əlaqə saxlayaraq yaddaş verir. Betandreas Telegram Onlayn Kasino sizin işsizlik sürməyinizi göstərəcək.
Onlayn Kasino Oynamaq: Betandreas Telegramun Azerbaycan Müşahidəsi
Onlayn Kasino Oynamaq ilə bağlı olaraq, Betandreas Telegramun Azerbaycan Müşahidəsi istifadə edərkən, azərbaycan dilində keyfiyyətli bir casino təcrübəni çıxarın. Bu platformda geniş bir slot malları seçimi vardır. Ayrıca, qazançı oyunlar, rulet və poker da sizin için təklif edilir. Ən yaxşı bonuslar və promosıyalar sizin üçün hazırlandırılıb. Onlayn kasino oynamaq sizin için bir keyf edəcəkdir və Betandreas Telegramun Azerbaycan Müşahidəsi ilə kollektiv olaraq ehtiyacınıza çevriləcək.
Azerbaycanlılar İçin Popüler Onlayn Kasino Oyunları: Betandreas Telegram
Azerbaycanlıları özündə popüler olmuş onlayn kasino oyunlarından birini keçid edin: Betandreas Telegram! Betandreas, sizin için mükactiviyet verici bonuslar sunan, güvenli ve mümkün olan en koşulsuz oyun tecrübünü sunan bir platformdır. Ətraflı məlumat üçün bizim sahəmizə qeyd edin və artıq bugün çatın! Betandreas, sizin için təşəkkür edərək bir neçə oyununu keçid edə bilərsiniz, bu hansılarılara daxil olar: Texas Hold’em Poker, Blackjack, Slot oyunları və daha fazlası. Əgər siz onlayn kasino oyunlarına öz yaxşılayırsınız, bu platform sizin için səbəb olduqda olacaq mükbirdir ki, gəlirinizlə qalıq yoxsa, bir neçə vaxt sizin için daha çox oyunlar keçirilsin.
Betandreas Telegram Onlayn Kasino Azerbaycan’da ən yeni trend proqramlar ilə tanınır. Bu platform, istədiyiniz zaman və yerindən salonunuzu açabilməyə imkan verir. Ətraflı məlumat üçün Telegram grupundan istifadə edin. Betandreas, sizin için güvenli, müasir və bahasız oyunlar sunuyor. İstədiyiniz zaman və yerinizdə keyfini çap etmək üçün ən yenilikdən yararlanın! Betandreas Telegram Onlayn Kasino, betandreas Azerbaycan dövrəsində sizin için daha çox keyfi qurmaq üçün çalışır.
Mənim adım Elnur. Yaşım 27. Betandreas Telegram Onlayn Kasino Oynamaq Azerbaycanda müxtəlif xidmətlər ilə məşhurdi. Məni bir dəfə keçirir, əgər siz istəyirsiniz, onların təklikləri ilə tanış olmaq istəyirsinizsə. Betandreas, bir çoxlu salon ilə doğrudan əlaqə saxlayır və sizə müxtəlif oyun təkliklərində keyfi işləyimə imkan verir. Onların dəstək şəbəkəsi güclüdür və istifadəçilər ilə görüşmək üçün rahat təbriklər verir.
Salam, men Rövşən adım. Yaşım 33. Mən Betandreas Onlayn Kasino ilə tanışdım bir dostun ilkənə gətirib. Mən çox sətir hastaim və bu platforma iştirak etmək üçün mənə idealdir. Onların sürücüsi təşkilatı var və onların bütün oyunları müttəqi, rahat və təhlükəsizdir. Betandreas Telegram Kanalı mənə xoş gəldi, çünki onda mən sizə sorularımıza cavab verəndə qoyulur və mən sizlər ilk və son oyun təkliklərimizi paylaşa bilirəm.
Salam, men Züleyxa adım. Yaşım 25. Mən Betandreas Onlayn Kasino ilə çox mutludurum. Onlar tranzisyonlarını öz sahibimdi və ən yaxşı imkanları ilə saxlanırlar. Mən bir çoxlu oyun ilə tanışdım və hər biri m Xbox’um ilə eyni rahatlıqla oynandı. Onların müştərilərə yaxşı imkanlar verməsinin üçün mən onlara təkbir veririm.
Betandreas Telegram Onlayn Kasino Oynamaq: Azerbaycanda Popüler Soru Cüzəlli
Betandreas Telegram Onlayn Kasino Oynamaq, Azerbaycanda popüler olan bir xəbərdarlıq versiyasıdır. Siz nasıbla bir hesab yaradıb telegram üzərindən casino oyunlarına qoşulmaq istəyirsiniz?
Hesab yaradırken, sizə bir kod göndərilir ki, telegramdakı botla əlaqə saxlaya bilərsiniz. Bot sizə bütün casino oyunlarının siyahısını göstərir və siz onlardan seçmək istədiyinizini seçə bilərsiniz.
Məsələn, poker, roulette, blackjack və bir çox başqa oyunları mövcuddur. Betandreas Telegram Onlayn Kasino Oynamaq, Azerbaycanda günlük bir çox oyuncularına məskun edir.