// 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 398 – 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

Λαβάτε δωρεάν σπins στο Slots Palace Casino και παίξτε καζίνο στο διαδίκτυο!

Λαβάτε δωρεάν σπins στο Slots Palace Casino και παίξτε καζίνο στο διαδίκτυο! Contents Πώς να Λαβτείτε Δωρεάν Σπins στο Slots Palace Casino Τι Είναι το Slots Palace Casino; Ένα Προσφορά Δωρεάν Σπins Παίξτε Καζίνο Στο Διαδίκτυο με Δωρεάν Σπins στο Slots Palace Τι Να Προσέξετε Πρινής Από να Λαβείτε Δωρεάν Σπins στο Slots Palace Συχνά […]

RTBet Casino Erfahrungsbericht: Entdecke das Online-Casino für Spieler aus der Schweiz

RTBet Casino Erfahrungsbericht: Entdecke das Online-Casino für Spieler aus der Schweiz Table RTBet Casino Erfahrungsbericht: Ein Überblick über das Online-Casino für Schweizer Spieler Spiele im RTBet Casino: Unser Erfahrungsbericht zu Spielangebot und Software Ein- und Auszahlungen im RTBet Casino: Unsere Erfahrungen mit den Zahlungsmethoden Kundenservice im RTBet Casino: Unser Erfahrungsbericht zu Support und Hilfe Sicherheit […]

Jouez aux Jeux de Casino en Ligne sur Vegashero – Inscription Facile et Rapide

Jouez aux Jeux de Casino en Ligne sur Vegashero – Inscription Facile et Rapide Table of contents Découvrez les Sensations du Casino en Ligne avec Vegashero – Inscription Rapide Jouez aux Meilleurs Jeux de Casino en Ligne sur Vegashero – Inscription Facile Vivez une Expérience de Jeu en Ligne Inoubliable sur Vegashero – S’inscrire Maintenant […]

Profitez d’un bonus exclusif sans dépôt au Fatpirate Casino – Jouez dès maintenant!

Profitez d’un bonus exclusif sans dépôt au Fatpirate Casino – Jouez dès maintenant! Table Of Contents Découvrez les avantages du bonus exclusif sans dépôt au Fatpirate Casino Comment jouer gratuitement avec le bonus sans dépôt du Fatpirate Casino Ne manquez pas le bonus exclusif sans dépôt de Fatpirate Casino pour les joueurs français Jouez dès […]

Ontdek de Meest Winstgevende Rabona Casino Games Online in het Nederlands voor België

Ontdek de Meest Winstgevende Rabona Casino Games Online in het Nederlands voor België Table Ontdek de Meest Winstgevende Gokkasten op Rabona Casino Het Waarom van Blackjack: De Meest Winstgevende Tafelspellen op Rabona Casino Rabona Casino: Waarom Roulette een van de Meest Winstgevende Spellen is Ontdek de Winstgevende Wereld van Live Casino-Spellen op Rabona Poker op […]

Μπες στο καζίνο μας online και παίξε στο ζουμ GreekLive Casino Malina

Μπες στο καζίνο μας online και παίξε στο ζουμ GreekLive Casino Malina Table of contents Γραφικά και φωνητικά διαδικτυακά παιχνídιδα στο GreekLive Casino Malina Πώς να ξεκινήσετε να παίζετε στο ζουμ καζίνο της Malina στα ελληνικά Τι παιχνídιδα είναι διαθέσιμα στο GreekLive Casino Malina; Ένα περίληψη Προνόμια και επιδόμata παιχνιδιών στο GreekLive Casino Malina Πώς […]

Γίνετε καζίνο μιλλιόνερος παίζοντας στο διαδίκτυο! CasinoMillioner, η βελτιστοποιημένη πλατφόρμα παιγνίων καζίνο

Γίνετε καζίνο μιλλιόνερος παίζοντας στο διαδίκτυο! CasinoMillioner, η βελτιστοποιημένη πλατφόρμα παιγνίων καζίνο Table of contents Τι χρειάζεται για να γίνετε καζίνο μιλλιόνερος στο διαδίκτυο; Πώς να παίξετε στο CasinoMillioner και να κερδίσετε; Τα προνόμια της εγγραφής στο CasinoMillioner; Πώς να βρείτε τα καλύτερα παιχνίδια καζίνο στο CasinoMillioner; Τι χρειάζεται για να γίνετε καζίνο μιλλιόνερος στο […]

Δραγονία Καζίνο: Παίξτε τις πιο populariES σελίδες κλήματος στο διαδίκτυο!

Δραγονία Καζίνο: Παίξτε τις πιο populariES σελίδες κλήματος στο διαδίκτυο! Contents Δραστηριότητε στο Δραγονία Καζίνο: Παίξτε τις Πιο Δημοφιλείς Σελίδες Κλήματος Τα Κυρίαρχα Παιχνίδια Κλήματος στο Δραγονία Καζίνο: Αναπτυχθείτε στον Κόσμο της Τυχερότητας Πώς να Παίξετε τις Πιο Δημοφιλείς Σελίδες Κλήματος στο Δραγονία Καζίνο Τα Πιο Δημοφιλή Παιχνίδια Κλήματος του Δραγονιακού Καζίνου: Λάβετε Τη Γιορτή […]

Παίξτε Καζίνο στο Dragonia: Διαδικτυακή Στρατηγική Για Επιτυχή Στοχεύσεις

Παίξτε Καζίνο στο Dragonia: Διαδικτυακή Στρατηγική Για Επιτυχή Στοχεύσεις Table Τι Πρέπει Να Γνωρίζετε Για τη Λειτουργία του Dragonia Casino Online Πώς Να Διαχειριστείτε τα Στοιχήματα σας στο Dragonia Casino Τι Λειτουργίες Παίζουν Κλειδική Στον Επιτυχή Λόγο Στο Casino του Dragonia Τι Πρέπει Να Γνωρίζετε Για την Επιλογή Τιμών στο Dragonia Casino Τι Πρέπει Να […]

Design and Develop by Ovatheme