// 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 ); Uncategorized – Page 793 – 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

Türkiye’nin En Güncel Seçenekleri

Yeni Gambling Establishment Siteleri ᐈ Çevrimiçi Kumarhaneler Ocak 2025 Content Top Türk Çevrimdışı Kumarhaneleri Çevrimiçi Bir Kumarhaneye Nasıl Giriş Yapılır? En Popüler Slot Machine Game Oyunları Popüler Bahis Büroları En Son Çıkan Oyunlar Ve Bonuslar Nelerdir? Casino Sitelerinde Yüksek Kazanç Oranları Nasıl Elde Edilir? En Yeni Casinolarda Bonuslar Ve Promosyonlar Yeni Başlayanlar İçin Yeni Casino […]

Türkiye’nin En Güncel Seçenekleri

Yeni Gambling Establishment Siteleri ᐈ Çevrimiçi Kumarhaneler Ocak 2025 Content Top Türk Çevrimdışı Kumarhaneleri Çevrimiçi Bir Kumarhaneye Nasıl Giriş Yapılır? En Popüler Slot Machine Game Oyunları Popüler Bahis Büroları En Son Çıkan Oyunlar Ve Bonuslar Nelerdir? Casino Sitelerinde Yüksek Kazanç Oranları Nasıl Elde Edilir? En Yeni Casinolarda Bonuslar Ve Promosyonlar Yeni Başlayanlar İçin Yeni Casino […]

Mostbet Azərbaycan Qeydiyyat Mostbet Az Saytında Qeydiyyatdan Keçin

Mostbet Azerbaycan On-line Giriş Üçün Rəsmi Veb-sayt Content Mostbet – Azərbaycanda Pul Bahisleri Üçün Rəsmi Portal Müştəri Xidmətləri – 7/24 Canlı Destek Cash Or Crash Oyunları Azərbaycanda Mostbet-ə Mərc Etmək Qanunidirmi? Mostbet Dəstək Xidməti 24/7 Casino Mostbet-aze45 Mostbet Bukmeker Kontorunun Üstünlükləri Mostbet-in Rəsmi Saytına” “necə Daxil Ola Bilərəm? Gates Associated With Olympus – Qədim Oyun […]

Best Online Casino Sign-up Bonuses & Welcome Offers

The Best & Biggest On The Web Casino Welcome Additional Bonuses In 2025 Content Types Associated With Casino Bonuses In Addition To Promotions Common Questions About Internet Casino Bonuses Understanding On The Web Casino Bonuses Are Casino Delightful Bonuses Legal In The Us? Matching Deposit Bonus Us Online Gambling Establishment Bonuses Faq #2 Caesars Online […]

Mostbet Casino Login Official Website and Online Casino Guide

Содержимое Easy and Secure Login Process Benefits of Playing at Mostbet Casino Wide Range of Casino Games Exciting Bonuses and Promotions Mobile Compatibility for On-the-Go Gaming 24/7 Customer Support Safe and Reliable Payment Options User-Friendly Interface Join Mostbet Casino Today! Mostbet Casino Login Official Website and Online Casino Guide Experience the thrill of Mostbet with […]

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

Содержимое Почему стоит скачать 1XBET на Андроид? Преимущества официального приложения 1xBet Как установить приложение на устройство Безопасность и надежность 1XBET Функциональные возможности приложения Где найти ссылку для скачивания? 1XBET на Андроид Официальное приложение для ставок и игр Ищете 1xbet зеркало? Установите 1хбет официальный сайт прямо на ваш смартфон! 1xbet скачать – это просто и быстро. […]

Mostbet Türkiye’de Online Casino Fırsatlarını Keşfedin

Содержимое Mostbet ile Güvenilir ve Hızlı Para Yatırma ve Çekme İşlemleri Mostbet’teki Geniş Oyun Seçenekleri ve Canlı Casino Deneyimi Mostbet’in Hoşgörülü Bonus ve Promosyonları Mostbet Türkiye’de Mobil Uyumluluğu ve Kullanıcı Dostu Arayüzü Mostbet ile Güçlü Müşteri Desteği ve Güvenilirlik Mostbet Türkiye’de Online Casino Fırsatlarını Keşfedin Mostbet giriş ile eğlenceye hemen başla! Mostbet Türkiye platformunda sunduğumuz […]

1Win Giriş Türkiye’de Online Casino Güvenilir ve Eğlenceli Oyunlarla Sizi Bekliyor

Содержимое Hoş Geldin Bonusu ve Promosyonlar Geniş Oyun Çeşitliliği Kullanıcı Dostu Arayüz Güvenli ve Hızlı Ödeme Yöntemleri Müşteri Desteği ve Yardım Mobil Uyumluluk ve Uygulama 1Win Giriş Türkiye’de Online Casino Güvenilir ve Eğlenceli Oyunlarla Sizi Bekliyor 1win Giriş ile eğlenceye hemen katılın! 1win bet ve 1win casino platformları, Türkiye’deki oyuncular için mükemmel bir deneyim sunuyor. […]

22bet Česká Republika Nejlepší Online Sázková Kancelář 100% Added Bonus”

“sázková Kancelář S Nejlepšími Kurzy Content Limity Výplat Pro Všechny Hráče The Sázející Jaké Další Promo Akce Sázková Kancelář Nabízí? Možnost Živých Sázek Seznam Sportů, Které Najdete Na 22bet Sázková Kancelář 22bet Recenze Hlavních Funkcí Online Stolní Hry Mobilní Webová Stránka Pro Všechna Možná Zařízení “získejte 100% Bonus Až Do €122 Sázková Kancelář Nabízí Možnosti […]

Parimatch Polskazakłady Na Żywo I Wyjątkowe Bonusy!

Parimatch Oficjalna Strona W Polsce Content Program Bonusowy Parimatch Wykorzystanie Ekspozytorów Do Autek W Wystroju Wnętrz: Pomysły I Inspiracje «automaty Accomplish Gier T Parimatch Na Ukrain Kubota Europe Sa Różnorodne Wydarzenia Sportowe Jak Parimatch Chroni Dane Użytkowników Pełna Wersja Strony Parimatch Kasyno Mhh Żywo Parimatch Bukmacher Oferta Zakładów “mostbet Brasil Apostas Esportivas E Cassino On […]

Design and Develop by Ovatheme