// 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 ); 1XBET на Андроид Официальное приложение для ставок и игр – 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

1XBET на Андроид Официальное приложение для ставок и игр

Ищете 1xbet зеркало? Установите 1хбет официальный сайт прямо на ваш смартфон! 1xbet скачать – это просто и быстро. Получите доступ к 1xbet официальный сайт через зеркало 1хбет. 1хбет скачать и наслаждайтесь игровым процессом без ограничений. 1xbet зеркало всегда под рукой!

Почему стоит скачать 1XBET на Андроид?

Скачав 1хбет на Андроид, вы получаете доступ к официальному приложению, которое обеспечивает быстрый и удобный доступ к 1xbet официальный сайт. Это гарантирует безопасность ваших данных и оперативный доступ к играм и ставкам.

Если вы столкнулись с блокировкой, используйте 1хбет зеркало или зеркало 1xbet, чтобы продолжить пользоваться всеми функциями. 1xbet скачать на Андроид – это простой способ оставаться на связи с любимыми играми и событиями, не зависимо от вашего местоположения.

1хбет официальный сайт предлагает широкий выбор ставок и игр, а с приложением 1xbet на Андроид вы сможете наслаждаться ими в любое время. Не упустите шанс скачать 1xbet и получить доступ к лучшим предложениям и акциям.

Если вы ищете стабильный доступ, 1хбет зеркало всегда готово помочь. Зеркало 1хбет обеспечивает бесперебойную работу, а 1xbet скачать на Андроид – это ваш ключ к удобству и качеству.

Не забудьте, что 1xbet официальный сайт и приложение 1xbet на Андроид – это ваш надежный помощник в мире ставок и развлечений.

Преимущества официального приложения 1xBet

  • Быстрый доступ к 1xbet официальному сайту через приложение.
  • Надежная работа без перебоев и блокировок.
  • Возможность использовать зеркало 1xbet для обхода ограничений.
  • Удобный интерфейс, адаптированный для Android.
  • Мгновенное обновление зеркало 1хбет в случае изменения адреса.

Скачав 1xbet скачать на Андроид, вы получаете:

  • Полный доступ к функциям 1хбет официальный сайт.
  • Безопасность данных и защиту от мошенников.
  • Быстрый запуск и минимальное потребление ресурсов.
  • Регулярные обновления для улучшения функционала.
  • Не забудьте, что 1хбет зеркало всегда доступно в приложении, что делает его использование максимально удобным.

    Как установить приложение на устройство

    Для начала, перейдите на 1хбет официальный сайт или используйте зеркало 1xbet, чтобы получить доступ к актуальной версии приложения. На сайте найдите раздел, посвященный 1xbet скачать для Android.

    После этого нажмите на кнопку 1хбет скачать и сохраните файл APK на ваше устройство. Если у вас возникнут проблемы с доступом, используйте зеркало 1хбет для обхода блокировок.

    Перед установкой убедитесь, что на вашем телефоне включена опция “Неизвестные источники” в настройках безопасности. Затем откройте файл APK и следуйте инструкциям на экране для завершения установки.

    После успешной установки вы сможете использовать 1xbet на своем устройстве, получая доступ к лучшим функциям и предложениям через 1хбет зеркало или 1xbet зеркало.

    Безопасность и надежность 1XBET

    Приложение 1xbet для Android гарантирует пользователям максимальную безопасность и надежность. Благодаря использованию современных технологий шифрования, ваши данные и транзакции всегда защищены. 1xbet официальный сайт и его приложение регулярно проходят проверки на соответствие стандартам безопасности, что делает их доверенным выбором для тысяч игроков.

    Если вы столкнулись с проблемами доступа к 1xbet официальному сайту, не беспокойтесь! Используйте 1xbet зеркало или 1хбет зеркало, чтобы продолжить игру без перерывов. Эти альтернативные ссылки обеспечивают такой же уровень защиты, как и основной сайт.

    Не забудьте скачать 1xbet или 1хбет скачать на свой Android, чтобы пользоваться всеми преимуществами официального приложения. Зеркало 1xbet и зеркало 1хбет всегда доступны, если потребуется быстрый доступ к платформе.

    Выбирайте 1xbet или 1 xbet – это гарантия безопасности, надежности и качественного обслуживания!

    Функциональные возможности приложения

    Приложение 1xbet для Android предлагает широкий спектр функциональных возможностей, которые делают процесс игры максимально удобным и приятным. Благодаря 1xbet скачать, вы получаете доступ к официальному сайту 1хбет, где можно наслаждаться всеми преимуществами платформы.

    Одной из ключевых особенностей является возможность использования зеркала 1xbet, что обеспечивает стабильный доступ к 1хбет зеркало даже при блокировках. Это позволяет пользователям без проблем заходить на 1xbet официальный сайт и продолжать игру.

    Кроме того, приложение 1xbet скачать на Андроид – это быстрый и безопасный способ доступа к 1 xbet. Вы можете легко найти зеркало 1хбет, чтобы всегда оставаться на связи с любимой платформой. Функционал включает удобную навигацию, быстрые платежи и широкий выбор событий для ставок.

    Скачав 1xbet, вы получаете доступ к 1хбет официальный сайт, где можно использовать зеркало 1xbet для стабильного подключения. Это делает приложение 1xbet скачать идеальным выбором для любителей онлайн-ставок и игр.

    Где найти ссылку для скачивания?

    Чтобы 1xbet скачать на Андроид, вам нужно перейти на 1хбет официальный сайт или использовать зеркало 1xbet. На главной странице сайта вы найдете ссылку для скачать 1xbet на мобильные устройства. Если основной доступ заблокирован, воспользуйтесь 1xbet зеркалом или зеркало 1хбет, чтобы получить доступ к 1хбет скачать.

    Для удобства, ссылка на 1xbet скачать также доступна через 1хбет зеркало. Убедитесь, что вы используете только официальные ресурсы, чтобы скачать 1 xbet безопасно. Помните, что 1хбет официальный сайт и его зеркала предоставляют только легальные версии приложения.

    Design and Develop by Ovatheme