// 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 );
Mostbet Bonusini Samarali Foydalanishning Eng Yaxshi Strategiyalari – 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
Mostbet Bonusini Samarali Foydalanishning Eng Yaxshi Strategiyalari
Bu maqolada, Mostbet bonusidan samarali foydalanish uchun eng yaxshi strategiyalarni ko’rib chiqamiz. Sport betlari va kazino o’yinlariga qiziqadiganlar uchun bonuslar juda muhimdir, chunki ular o’yinchilarga qo’shimcha mablag’lar yoki bepul tikish imkoniyatlarini taqdim etadi. Unique bonus strategiyalarini bilish, o’yinlarda muvaffaqiyatli bo’lish va o’z foydasini oshirishga yordam beradi. Shu sababli, ushbu maqola sizga Mostbet bonuslarini qanday qilib eng yaxshi tarzda ishlatishni tushuntiradi.
Bonus Turlarini Tushunish
Mostbet platformasida turli xil bonus turlari mavjud, har biri o’ziga xos shartlari va imkoniyatlaridan iborat. Quyida siz bilan eng ko’p uchraydigan bonus turlarini muhokama qilamiz:
Shohir bonuslari: Yangi o’yinchilar uchun birinchi marta depozit qo’yishganda beriladigan bonuslar.
Bepul tikishlar: O’yinchilarga boshlang’ich yoki faoliyat davomida beriladigan bepul tikish imkoniyatlari.
Keshbek: Yo’qotilgan betlar asosida o’yinchila beriladigan pulning bir qismini qaytarish.
Promokodlar: Maxsus reklama kodlari orqali qo’shimcha bonus olish imkoniyatlari.
Bonus Shartlariga Diqqat Bering
Bonuslardan foydalanishdan oldin, ularning shartlariga diqqat qilish juda muhimdir. Har bir bonusning o’ziga xos talablari bor, masalan, minimal depozit miqdori, tikish koeffitsiyenti va o’yin shartlari. Bu shartlarni buzganingizda, bonuslaringizni yo’qotishingiz mumkin. Shunga ko’ra, quyidagilarni kuzatib boring:
Bonusni olish shartlarini o’qish.
Minimum depozit miqdorini bilish.
Tikish koeffitsiyentlarini tushunish.
Bonusdan foydalanish muddati haqida ma’lumot oling.
Strategik Tikish Yondashuvlari
Mostbet bonusidan muvaffaqiyatli foydalanish uchun strategik yondashuvlarni ishlab chiqish muhimdir. Bu yondashuvlar o’z-o’zidan qoidalar yoki tavsiyalar bo’lishi mumkin. O’z tikishlaringizni foydali qiladigan strategiyalar ichida:
G’alaba qozonish imkoniyatlarini tahlil qilish: O’yinlar va jamoalar haqida ma’lumot yig’ing.
Bankroll boshqarish: Har bir tikish uchun ma’lum bir miqdorni belgilash va shundan oshmaslik.
Bonusli tikishlarni tanlash: Bepul tikishlar yoki keshbek imkoniyatlaridan foydalangan holda, imkoniyatlaringizni oshirish.
Рisk tahlili: Har bir tikishning xavf darajasini baholash va shu asosda qarorlar qabul qilish.
Majburiy O’yinlarni Tanlash
Bonusdan foydalanishda muhim jihatlardan biri, bonusni eng samarali ishlatadigan o’yinlarni tanlashdir. Mostbetda turli xil o’yinlar taklif etiladi, lekin barchasi bonuslardan ma’lum shartlarda foydalanishga imkon bermaydi. Quyidagi o’yinlardan qanday qilib foydali foydalanishingiz mumkin: Мостбет Узбекистан
Sport tikishlari: O’yinchilar bahs qilish uchun mavjud bo’lgan sport tadbirlarini ko’rib chiqing.
Kazino o’yinlari: Ruletka, poker va slotlar kabi o’yinlar bonuslardan samarali foydalanishingiz uchun tavsiya etiladi.
Slot o’yinlari: Yuqori RTP (Return to Player) koeffitsiyentiga ega slotlar sizga ko’proq imkoniyatlar beradi.
Natijalardan Xulosa Chiqaring
Natijalarni tahlil qilish, o’yinlarda muvaffaqiyatga erishish yo’lida juda muhimdir. O’yin o’tkazmoqchi bo’lgan holatlarda, qanday natijalarga erishganingizni va bonuslaringizni qanday ishlatganingizni ko’rsatadigan yozuvlar olib boring. Bu sizga keyingi tikishlaringizni strategik ravishda yanada yaxshilash imkoniyatini beradi.
Natijaviy Xulosa
Mostbet bonuslaridan samarali foydalanish uchun to’g’ri strategiyalarni bilish juda muhimdir. O’yinlarni tanlashdan tortib, bonus shartlarini tushunishga qadar, har bir nuqtaga e’tibor berishingiz kerak. Shuningdek, o’z tikishlaringizni muvaffaqiyatli o’tkazish uchun tajriba va dars olish juda zarurligini unutmang. O’z bonuslaringizni eng samarali tarzda ishlatish orqali, siz o’yinlarni yanada qiziqarli va foydali qilishingiz mumkin.
Tez-tez beriladigan savollar (FAQ)
1. Mostbet bonusini qanday olishim mumkin?
Mostbet bonusini olish uchun, siz platformaga ro’yxatdan o’tishingiz va depzit qilishingiz kerak.
2. Bepul tikishlar qanday ishlaydi?
Bepul tikishlar, biron bir o’yin uchun qo’shimcha ball bo’lib, ularni tikish uchun foydalanishingiz mumkin.
3. Keshbek bonuslarini qanday olishim mumkin?
Keshbek bonuslarini olish uchun, siz tikishlaringizdan yo’qotgan mablag’ingizning bir qismini qaytarib olasiz.
4. Tikish koeffitsiyentlari qanday aniqlanadi?
Tikish koeffitsiyentlari o’yinchi g’alaba qozondaganda olinadigan pul miqdorini aniqlaydi.
5. O’yinlar va bonuslar o’rtasidagi bog’liqlik qanday?
Har bir o’yin uchun bonus shartlari turlicha bo’lishi mumkin, shuning uchun eng yaxshi opsiyalarni tanlash muhimdir.