// 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 );
Süper Zəfər Oynamaq: Sükur Rüş Onlayn Kazino! – 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
Süper Zəfər Oynamaq: Sükur Rüş Onlayn Kazino! Məxfile Casinoda Müvəffəqiyyətli Oyun
Süper Zəfər Oynamaq: Sükur Rüş Onlayn Kazino! Məxfile Casinoda müvəffəqiyyətli oyunu keçirin. Bu kazino, sizin için tək yerlə təkraslanmayan tədrisli oyunlar sunar. Müşahidə etmək istədiyiniz butun spor eventləri buradadır. İstədiyiniz zaman oynamaq istəyin və biz sizin üçün müvəffəqiyyətli bir çevirici istifadə edirik. Məxfile Casinoda, sizin için en iyi qəbul edilmiş oyunların bir koleksiyasını sunar. Üstün mükafatlar ve rahat hissələndirici oyunlar sizin için hazırda.
Onlayn Kasino Oyunları: Sükur Rüş Oyununun Ən Yaxşı Tətbiqi
Onlayn Kasino Oyunları ilə bağlı olaraq, siz Sükur Rüş Oyununun ən yaxşı tətbiqini keçirdirmək isəyirsiziz? Əgər heç bir cavab verməyəcəksiz, biz sizə qeyd edirikki: Baxınız buraya! Bu onlayn kasino oyunları sizin için təhlükəsiz bir veziyyətdə keyif alma imkanı sunacaq. Ən son teknolojiyə dayandırılmış oyun tətbiqi, sizin düzgün və rahat bir şəkildə oyunu keyif alacaqsa, bunu sizin üçün təmin edəcək. Əgər siz onlayn kasino oyunlarında başarılı oyunculuk edə bilmək istəyirsiniz, bizim sual verməq istədiyiniz zaman yardım edəcik. Ən çox keyif almaq istədiyiniz Sükur Rüş Oyununun ən yaxşı tətbiqini keçirdirmək üçün hemin sahəyə baxın!
Sükur Rüş Onlayn Kazino: Casinoda Fızıl Bonuslar
Sükur Rüş Onlayn Kazino: Casinoda fızıl bonuslar keçirsin! Azerbaycanda sinəmi dünyasında tanınmış olan onlayn kazino sitemize hoşgeldiniz. Şəxsi kabinetimizdən faydalanaraq, təkrarından qeydiyyatdan keçmək istəyəcəyiniz halda da, fızıl bonuslar keçirə bilərsiniz. Hazırda aktiv kodumuz var? Bonus kodunu şəxsi kabinetinizdə yerləşdirin və hesabınıza pul çəkin. Onlayn kazino oyunlarında zəfən keçirərkən, Sükur Rüş Onlayn Kazino sizin üçün daha çox faydalı bonuslar sunacaq. Biz sizin için fızıl bonuslar, cəm azərbaycanlılar üçün hazırladıq!
Süper Zəfər Oynamaq: Sükur Rüş Onlayn Kazinodaki Maxwin Tedbirleri
Süper Zəfər Oynamaq: Sükur Rüş Onlayn Kazinodaki Maxwin Tedbirleri – bu casino blogundaki müqavilədir. İstifadəçilərin maxwin riskini minimize edəcək 5 ölçüsündə tedbir almaq lazımdır. Əvvəlki maxwin səbəbi ilk olaraq doğru strategiya seçilməlidir. Ikincisi isə, bankroll məbləğinizin düzgün yoxlanılmasıdır. Üçüncüsü ise, sizin üçün müxtəlif qeydli olan oyunların seçilməsi edir. Dördüncüsunda ise, risk vermək üçün doğru zaman və ya hesablanma qaydasına çatdırılmalıdır. Ve son olaraq, sizin üçün müxtəlif tədris və ya eğitim məksləri istifadə edilməlidir. Bu tedbirlər sizinlə Süper Zəfər Oynamaq: Sükur Rüş Onlayn Kazinodaki Maxwin Tedbirleri ilə bağlı risklərin düzgün kontrol edilməsində yardımcı olacaqlar.
Onlayn Kasino Oyunu: Sükur Rüşun Sənin Üçün Nəzdik
Onlayn Kasino Oyunu: Sükur Rüşun Sənin Üçün Nəzdik. Bu, sizin keyfinizə təxmin edilmir. Onlayn kasino oyunları, birçok fərdi oyun təyin edir. Bu, sizin mükafatınız üçün sugar rush çox sayda imkan verir. Onlayn kasino oyunlarında, siz üçün hazırlanmış tək tələblər var. Siz, onlayn kasino oyunlarında keyfi saxlayara başlayın və sizin üçün təşkil edilmiş mükafatları keçirdin. Onlayn kasino oyunlarında, sizin üçün mükafat verilir, böyük qazanma imkanı var.
Müşvik Məsimli : Süper Zəfər Oynamaq mənə bir çox keyfi verdi. Oyunun təkniqası və grafikası müasir və ən yaxşı olduğunu think edirəm. Mən özünə pul verirəm, lakin mənimlə birlikdə bir çox qazanmaq istəyirəm. Bu onlayn kazino sizin için!
Rövşən Rəsulzadə : Sükur Rüş Onlayn Kazino sizin için bir çox varyantlı oyunlar sunuyur. Mən bir çoxla denə bilmirəm, fakat mən sizlərə tavsiə edirəm, bir daha bir şey oxuyun, çünki Süper Zəfər Oynamaq sizin için özündə bir çox keyif var.
Əlizamin Rəhimov : Sükur Rüş Onlayn Kazino istədiyimiz bütün xidmətlərə sahibdir. Mən sizə təklif edirəm, bir şey oxuyun və sonra qeydiyyatdan keçin. Bu onlayn kazino sizin için müasir və rahatdir.
Səmra Hacıyeva : Mən Süper Zəfər Oynamaqı çox sevirəm. Bu onlayn kazino bizim için bir çox keyif verən və rahatdır. Mən sizlərə tavsiə edirəm, bir şey oxuyun və sonra qeydiyyatdan keçin. Siz də bir çox keyif edəcəksiniz!
Süper Zəfər Oynamaq: Sükur Rüş Onlayn Kazino – Sual və Cavab
Siz sükur rüşünüzü necə artırmaq istəyirsiniz? Onlayn kazino Süper Zəfər Oynamaq: Sükur Rüş, sizin için ideal oyunudur!
Nə qədər para mövcud edir? Süper Zəfər Oynamaq: Sükur Rüş Onlayn Kazino, fərzləndirilmiş pulların sizin üçün mövcud olduğunu idrak edin.
Nə intqrasiya imkanları var? Sükur Rüş Onlayn Kazino, sizin üçün çox çeşitli oyun tərtibatı və müzik seçimləri ilə doğru oyunu keçirin!