// 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 – Fantaziya Idmanı Nədir və Necə İşləyir? – Mostbet Platformasında Hansı Fantaziya Liqaları Mövcuddur? – 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 – Fantaziya Idmanı Nədir və Necə İşləyir? – Mostbet Platformasında Hansı Fantaziya Liqaları Mövcuddur?
Mostbet-də Fantaziya Idmanı – Öz Komandanızı Qurun və Qazanın
Fantaziya idmanı, idman sevgisini strateji bir oyuna çevirən maraqlı bir fəaliyyətdir. Bu, təkcə matçları izləmək deyil, öz komandanızı qurmaq, idmançıların performansına investisiya etmək və bacarıqlarınızı sınamaq imkanıdır. Mostbet platforması Azərbaycan istifadəçiləri üçün bu maraqlı aləmi əlçatan edir, müxtəlif liqa və turnirlər təqdim edir. Platformanın bütün imkanlarından yararlanmaq üçün https://mostbet-giris-az.org/ ünvanına daxil olmaq kifayətdir.
Fantaziya Idmanı Nədir və Necə İşləyir?
Fantaziya idmanı, real idmançıların statistik göstəricilərinə əsaslanan virtual liqalardır. Siz real dünyada baş verən hadisələrdən xal toplayan bir komanda yaradırsınız. Bu, idman biliklərinizi sınamaq, strateji düşünmək və rəqiblərinizə qarşı qalib gəlmək üçün unikal bir fürsətdir. Mostbet bu prosesi asan və şəffaf edir, hər addımda sizə aydın qaydalar və real-vaxt statistikaları təqdim edir.
Mostbet-də Fantaziya Oyununun Addımları
Mostbet-də fantaziya idmanına başlamaq asandır. Əsas məqsəd, müəyyən bir büdcə daxilində ən yaxşı performans göstərəcəyini düşündüyünüz idmançılardan ibarət komanda yaratmaqdır. Hər idmançının platforma tərəfindən təyin olunmuş qiyməti var. Sizin bacarığınız dəyərli, lakin gözləniləndən daha yüksək performans göstərəcək idmançıları aşkar etməkdir. Bu, sadəcə ulduzları seçmək deyil, strateji bir investisiya qərarıdır.
Seçilmiş liqaya və ya turnirə qoşulun.
Verilmiş virtual büdcə ilə komandanızı qurun.
Komandanıza kapitan təyin edin (onun xalları ikiqat sayıla bilər).
Real oyunlar başlayana qədər komandanızı təsdiqləyin.
Seçdiyiniz idmançıların real matçlardakı performansına görə xal toplayın.
Liqa cədvəlində digər iştirakçılarla rəqabət aparın.
Turnir bitdikdən sonra ən çox xal toplayan komanda qalib olur.
Mostbet müntəzəm olaraq yeni liqalar açır.
Mostbet Platformasında Hansı Fantaziya Liqaları Mövcuddur?
Mostbet Azərbaycan istifadəçilərinin marağına uyğun geniş fantaziya liqaları təklif edir. Platforma təkcə populyar idman növləri ilə kifayətlənmir, həm də yerli turnirlərə də diqqət yetirir. Bu, həm dünya çempionatlarında, həm də öz regionunuzda baş verən idman hadisələrində iştirak etmək imkanı yaradır. Mostbet liqaları həm yeni başlayanlar, həm də təcrübəli oyunçular üçün uyğun formatlarda təşkil olunur.
Idman Növü
Liqa/Turnir Növü
Xüsusiyyətlər
Futbol
Premyer Liqa, La Liqa, Çempionlar Liqası Fantaziya Liqaları
Həftəlik və mövsümlük turnirlər, kapitan seçimi, transfer pəncərəsi.
Basketbol
NBA Fantaziya Liqası
Statistik kateqoriyalar (xal, ribaund, asist), həftəlik rəqabət.
Tennis
Qran-sləm Turnirləri üzrə Fantaziya Oyunları
Fərdi idmançı seçimi, turnir boyu davamlı komanda.
Voleybol
Yerli və beynəlxalq çempionatlar üzrə liqalar
Azərbaycan Superliqası oyunçuları da daxil olmaqla.
Avtoidman
Formula 1 Fantaziya Çempionatı
Pilot və komanda seçimi, hər yarış üçün xal toplama.
Mostbet Fantaziya Oyununda Uğurlu Strateqiyalar
Uğur təsadüfi deyil, hazırlıq və analiz nəticəsidir. Mostbet platformasında yüksək nəticə göstərmək üçün diqqətli planlaşdırma və informasiya ilə işləmək vacibdir. Bu, idmançıların formasını, qarşılaşmanın əhəmiyyətini, hətta hava şəraitini belə nəzərə almağı tələb edə bilər. Unutmayın ki, hər bir qərar sizin idman anlayışınızı əks etdirir və Mostbet bu qərarlarınızı qiymətləndirmək üçün ideal mühit yaradır.
İdmançıların son performansını və statistikasını mütəmadi olaraq təhlil edin.
Komandanızda müxtəlif rolu olan oyunçulara yer ayırın (məsələn, futbolda hücumçu, yarımmüdafiəçi, müdafiəçi).
Büdcənizi ağılla idarə edin – bütün ulduzları bir komandaya yığmaq mümkün olmaya bilər.
Komandanıza kapitan seçərkən etibarlı və yüksək potensiallı idmançıya üstünlük verin.
Son dəqiqə xəbərlərini izləyin – zədələr və ya komanda dəyişiklikləri kritik ola bilər.
Mostbet-in təqdim etdiyi dərin statistik məlumatlardan tam istifadə edin.
Uzunmüddətli turnirlərdə komandanızı mövsüm ərzində strategiyaya uyğun yeniləməyə hazır olun.
Mostbet-də Məsuliyyətli Oyun – Zövqünüzü və Limitlərinizi Bilin
Hər hansı bir oyun kimi, fantaziya idmanı da əyləncə və zehni məşq məqsədi daşımalıdır. Mostbet məsuliyyətli oyun prinsiplərinə riayət etməyinizi tövsiyə edir. Bu, vaxtınızı və enerjinizi ağılla idarə etmək, həddi aşmamaq deməkdir. Qələbə məmnunluq gətirsə də, məğlubiyyəti də təbii qəbul etmək vacibdir. Əsas məqsəd idmana olan sevginizi daha maraqlı bir səviyyəyə aparmaq və Mostbet platformasında öz biliklərinizi sınamaqdır.
Mostbet Fantaziya İdmanı Sizə Nə Vəd Edir?
Mostbet-də fantaziya liqaları iştirakçılara təkcə maddi mükafat deyil, həm də prestij və tanınma fürsəti verir. Platformanın istifadəçi dostu interfeysi, real-vaxt yeniləmələri və geniş idman seçimi bu təcrübəni daha da dəyərli edir. Bu, idman hadisələrini daha diqqətlə izləməyə, komanda strategiyalarını daha yaxşı anlamağa və eyni fikirdə olan insanlarla bir icma hissi yaratmağa kömək edir. Mostbet bu icmanın inkişafı üçün daim yeni formatlar axtarır.
Fantaziya idmanı, idman aləminə fərqli bir baxış bucağından baxmaq imkanıdır. Mostbet isə bu imkanı Azərbaycanda hər kəs üçün əlçatan edən etibarlı bir platformadır. Öz komandanızı qurun, strategiyanızı hazırlayın və idman biliklərinizin sizi hansı uğurlara aparacağını görün. Yadda saxlayın ki, hər böyük liqa kiçik bir addımla başlayır və bu gün etdiyiniz seçimlər sabahın cədvəlini formalaşdıra bilər.