// 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 );
Glory casino Live – Glory casino Live-kazino – Adi Oyunlardan Əsas Fərqlər – Glory casino Live Oyun Zalları və Provayder Seçimi – 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
Glory casino Live – Glory casino Live-kazino – Adi Oyunlardan Əsas Fərqlər – Glory casino Live Oyun Zalları və Provayder Seçimi
Glory casino Live-kazino Bölməsinin Keyfiyyət Meyarları ilə Tam İcmalı
Onlayn oyun dünyasında canlı dilerlə qarşılıqlı əlaqə yaratmaq istəyənlər üçün live-kazino bölməsi əsas seçim meydançasına çevrilib. Burada sadəcə bir platforma deyil, həqiqi kazino atmosferini evinizə gətirən xüsusi bir təcrübə axtarılır. Glory casino bu sahədə özünü necə təqdim edir və onun təklifləri keyfiyyət baxımından nə qədər fərqlənir? Bu bələdçi sizə yalnız oyunları deyil, ümumi keyfiyyət göstəricilərini qiymətləndirməyi öyrədəcək. Məsələn, casino glory saytında canlı oyunların təşkili və provayder seçimi ilə bağlı dəyərli məlumatlar əldə edə bilərsiniz.
Glory casino Live-kazino – Adi Oyunlardan Əsas Fərqlər
Bir çox oyunçu canlı kazino ilə adi RNG (Təsadüfi Nömrə Generatoru) oyunları arasındakı fərqi tam başa düşmür. Glory casino kontekstində bu fərqlər daha aydın görünür. Əsas fərq şəffaflıq və sosial interaktivlikdədir. Canlı diler real vaxt rejimində kartları paylayır və ruleti fırladır, siz isə bunu yüksək keyfiyyətli video yayımı ilə izləyirsiniz. Bu, nəticələrə inam yaradır. Glory casino bu təcrübəni təmin edərkən, stabil və fasiləsiz yayım keyfiyyətinə üstünlük verir. Adi slotlarda isə alqoritm nəticəni təyin edir və bu, bəzən şübhə doğura bilər. Canlı oyunlarda isə proses fiziki olaraq baş verdiyi üçün etibarlılıq hissi daha güclüdür.
Glory casino Canlı Oyunlarında Diqqət Yetirilməli 3 Keyfiyyət Göstəricisi
Hər hansı bir live-kazino bölməsini qiymətləndirərkən üç əsas meyarı nəzərdən qaçırmamalısınız. Glory casino bu meyarları necə ödəyir? Birincisi, video yayımının keyfiyyəti və dayanıqlığıdır. Oyun zamanı donma və ya pisləşmə olmamalıdır. İkincisi, dilerlərin peşəkarlığı və müştəri ilə qurduğu ünsiyyətdir. Üçüncüsü isə interfeysin istifadə rahatlığı və mərcdən tutmuş çat funksiyasına qədər bütün alətlərin əlçatanlığıdır. Bu üç nöqtəyə diqqət yetirməklə, platformanın ümumi səviyyəsini obyektiv qiymətləndirmək olar.
Glory casino Live Oyun Zalları və Provayder Seçimi
Bir live-kazino platformasının gücü onun əməkdaşlıq etdiyi provayderlərlə birbaşa bağlıdır. Glory casino burada məhdudlaşmır və sənayedə lider sayılan bir neçə təchizatçı ilə işləyir. Bu, oyunçulara geniş seçim və müxtəlif oyun stilləri təqdim edir. Hər bir provayder özünəməxsus atmosfer, qayda variasiyaları və xüsusi bonus təklifləri gətirir. Aşağıdakı cədvəldə Glory casino-də əsas diqqət yetirilən provayderlərin və onların gətirdiyi əsas oyun növlərinin ümumi icmalını tapa bilərsiniz.
Provayderin Adı
Əsas Oyun Növləri
Xüsusi Xüsusiyyətlər
Evolution
Live Blackjack, Lightning Roulette, Monopoly Live
Yüksək interaktivlik, mükəmməl video keyfiyyəti, müxtəlif dillər
Pragmatic Play Live
Mega Roulette, Sweet Bonanza CandyLand
Yaradıcı oyun konseptləri, böyük çarxlar
Ezugi
Live Andar Bahar, Live Casino Hold’em
Şərq bazarına uyğun oyunlar, ənənəvi atmosfer
Vivo Gaming
Live Baccarat, Live Dragon Tiger
Latın Amerikası stilində oyunlar, sürətli oyun dövrləri
XPG
Live Roulette, Live Blackjack
Klassik oyunlara diqqət, stabil performans
Bu cədvəl göstərir ki, Glory casino yalnız bir provayderə arxalanmır. Müxtəlif provayderlərlə işləmək platformanı daha davamlı edir və hər kəsə öz zövqünə uyğun bir oyun tapa bilmək imkanı yaradır. Məsələn, innovativ və əyləncəli oyunlar axtarırsınızsa, Evolution və ya Pragmatic Play Live zallarına üstünlük verə bilərsiniz.
Glory casino Live-kazinoda Hansı Oyunlar Ən Populardır?
Oyun seçimi geniş olsa da, bəzi oyunlar daimi olaraq daha çox diqqət cəlb edir. Glory casino-də bu trend sənayedəki ümumi tendensiyalara uyğun gedir. Rulet, Blackjack və Baccarat ənənəvi liderlər olaraq qalır. Lakin, canlı oyun şouları kimi yeni formatlar da sürətlə populyarlıq qazanır. Bu oyunların hər birini seçərkən nəyə baxmaq lazımdır? Aşağıdakı siyahı hər bir əsas oyun növü üçün əsas keyfiyyət göstəricilərini sadalayır.
Live Rulet: Dilerin fırlatma texnikası, masa görünüşünün aydınlığı, mərc növlərinin müxtəlifliyi (məsələn, Fransız, Avropa, Amerika stili).
Live Blackjack: Oyunun sürəti, dilerin qaydaları açıq şəkildə izah etməsi, əlavə seçimlər (məsələn, Insurance, Split).
Live Baccarat: Kartların açılma sürəti, komissiya faizinin aydın göstərilməsi, müxtəlif mərc variantlarının olması.
Live Oyun Şouları (məsələn, Monopoly Live): Aparıcının enerjisi, interaktiv bonus dövrələrinin olması, qrafika və animasiyaların keyfiyyəti.
Live Poker Növləri (Casino Hold’em): Cəmiyyət kartlarının vaxtında açılması, dilerin peşəkarlığı, oyun interfeysinin anlaşıqlı olması.
Bu meyarları yadda saxlayaraq, siz təsadüfi seçim etmək əvəzinə, həqiqətən keyfiyyətli bir oyun təcrübəsinə qoşula bilərsiniz. Glory casino bu oyunların əksəriyyətində yüksək keyfiyyətli provayderlərlə işlədiyi üçün, yuxarıda qeyd olunan göstəricilər ümumiyyətlə yaxşı səviyyədə təmin olunur.
Glory casino Canlı Oyunlarında Əlavə Xüsusiyyətlər və Alətlər
Yaxşı bir live-kazino təcrübəsi təkcə əsas oyundan ibarət deyil. Glory casino oyunçulara prosesi asanlaşdıran və daha məlumatlı qərarlar verməyə kömək edən bir sıra əlavə alətlər təqdim edir. Məsələn, oyun tarixçəsi və statistik məlumatlar bölməsi, oyunçuya öz mərc strategiyasını təhlil etməyə imkan verir. Çat funksiyası təkcə dilerlə deyil, digər oyunçularla da ünsiyyət qurmaq üçün vacibdir və bu, sosial atmosferi gücləndirir. Bundan əlavə, mərc limitlərinin asan təyin edilə bilməsi və müxtəlif ödəniş variantlarının dəstəklənməsi də ümumi rahatlığa töhfə verir. Bu kiçik detallar birlikdə böyük fərq yaradır və platformanın istifadəçi mərkəzli yanaşmasını göstərir.
Glory casino Live-kazinoda Pul Mərcələri və Valyuta
Azerbaycan oyunçuları üçün ən rahat aspektlərdən biri yerli valyutanın, yəni AZN-nin dəstəklənməsidir. Glory casino burada lokal ehtiyacları nəzərə alır. Canlı oyunlarda mərc etmək üçün AZN ilə hesab yarada və ya pul köçürə bilərsiniz. Bu, valyuta dəyişikliyi ilə bağlı əlavə məsələlərdən və itkilərdən qaçınmağa kömək edir. Mərc hədləri hər bir oyuna və zala görə dəyişir, lakin ümumiyyətlə, həm başlanğıc səviyyəli oyunçular, həm də yüksək mərc edənlər üçün uyğun variantlar mövcuddur. Əhəmiyyətli olan budur ki, minimum və maksimum mərc hədləri oyun masasında aydın şəkildə göstərilir, bu da qərar qəbul etməni asanlaşdırır və gözlənilməz vəziyyətlərin qarşısını alır.
AZN ilə hesab: Valyuta çevrilməsi narahatlığını aradan qaldırır, büdcəni daha yaxşı idarə etməyə kömək edir.
Aydın mərc hədləri: Hər masa üçün minimum və maksimum məbləğlər açıq şəkildə göstərilir.
Müxtəlif mərc növləri: Tək nömrələrdən tutmuş kombine mərclərə qədər geniş seçim.
Tez hesablanma: Qazanclar dərhal hesabınıza əks olunur və növbəti əl üçün istifadə edilə bilər.
Mərc tarixçəsi: Bütün mərc və nəticələrinizin detallı qeydi mövcuddur.