// 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 );
Connect with black bbw singles locally for enjoyable and exciting dates – 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
Connect with black bbw singles locally for enjoyable and exciting dates
Are you interested in a night out together that is diverse from standard? if that’s the case, you might give consideration to dating black bbw singles. these ladies are not your typical size, in addition they like to enjoy. they’re not afraid to exhibit their character, plus they are definitely not shy. if you should be trying to find a romantic date that is various, while wish to date a bbw, then you definitely must look into dating black bbw singles. there are plenty of things that you can do whenever you are dating a black bbw. you are able to carry on times, go out for eating, and/or go on holiday. they’re also great people to be around, and they’re constantly willing to assist out.
Meet black bbw singles for enjoyable and romance
Black bbws would be the perfect mix of sexy and sassy. they have a normal charisma that attracts individuals in, plus they understand how to make use of it for their benefit. they want to enjoy and so are constantly up for a great time. they are very loyal and protective of their family members. if you are looking for a date that is various and exciting, then you should truly think about dating a black bbw.
Find love and friendship with regional black bbw singles
Hi everybody! if you’re wanting love and relationship with neighborhood black bbw singles, then you definitely’ve arrive at the best spot. here at black bbw hookups, we know just how to find the right individuals, and now we’re here that will help you discover the love of your life. offering top dating website on the internet, so we’re certain you are going to like it. we have a huge pool of black bbw singles that are interested in love, and we’re sure that you will discover someone who you relate solely to. what exactly are you currently waiting for? register today and start browsing our pages!
Experience the excitement of meeting sexy black bbw singles
Looking for a fresh and exciting method to enhance your sex life? you then should think about meeting sexy black bbw singles. these women will definitely supply you with the thrills of your life, therefore won’t be sorry for one minute from it. sex with black women is something which many males are seeking. not only do they’ve the hottest bodies, nevertheless they also have a wild part that many men find irresistible. if you’re prepared to feel the excitement of meeting sexy black bbw singles, then you definitely should do your research. that you don’t desire to get a female which you can not handle, and you definitely don’t need to get hurt. so, what if you do in order to ensure that you find the right girl? well, first thing that you need to do is to use the internet. there are a great number of dating sites which are specialized in black bbw singles, and you will find one that’s ideal for you. once you have found an internet site, the next thing is to begin looking at the pages. you want to find a lady that’s compatible with you, and you may do that by searching for key words that are relevant to you. for instance, if you’re seeking a lady that one may have crazy sex with, then you definitely should look for keywords like “wild sex” and “naughty sex.” once you’ve found a profile that you want, you should begin messaging her. this is how the enjoyable begins. you want to make certain you are respectful which you are able to talk to the girl. if you’re able to do this, then you definitely’re on your way to a fantastic sex experience with a sexy black bbw singles.
Join now and unlock the possibilities of dating british black bbw singles
If you are looking for a dating site that provides black british singles, then you definitely’re in fortune! there are lots of black british dating sites available, which means you’re sure to find one that’s right for you. one of the better black british internet dating sites is blackpeoplemeet.com. this web site is dedicated to assisting black british singles find love. it offers a wide range of features, including a search engine and a user-friendly user interface. another great option is ukblackdating.com. Visit this link: www.bbwdating123.com/black-bbw-hookup.html
Welcome to black bbw singles official website
If you are looking for a dating website that provides black women, then you definitely’ve arrived at the proper destination.our website is specialized in helping black bbw singles find love and companionship.we have an array of features which make us an ideal option for black bbw singles.our website is straightforward to make use of and navigate.we have actually a search feature that enables one to find the perfect match available.we also have a chat feature so you can speak with other people.we have many features which make us the right option for black bbw singles.our website is straightforward to use and navigate.we have a search function which allows you to definitely get the perfect match for you.we have a chat feature so you can speak to other users.we have actually an array of features that do make us the perfect option for black bbw singles.our website is straightforward to use and navigate.we have actually a search function which allows you to discover the perfect match available.we also have a chat function to keep in touch with other users.we have an array of features that make us the right option for black bbw singles.our website is straightforward to utilize and navigate.we have a search function enabling one to find the perfect match for you.we have a chat feature to help you communicate with other users.we have actually an array of features that make us the right choice for black bbw singles.our website is straightforward to make use of and navigate.we have a search function which allows you to discover the perfect match for you.we also have a chat function to help you communicate with other members.we have an array of features which make us an ideal option for black bbw singles.our website is straightforward to make use of and navigate.we have actually a search feature enabling you to definitely discover the perfect match available.we have a chat feature to help you communicate with other members.we have actually a wide range of features that do make us the perfect choice for black bbw singles.our website is not hard to use and navigate.we have actually a search function that enables you to definitely get the perfect match for you.we also provide a chat feature so you can speak to other users.we have an array of features that do make us an ideal option for black bbw singles.our website is straightforward to make use of and navigate.we have a search function enabling you to discover the perfect match for you personally.we also provide a chat function so you can speak to other members.we have an array of features which make us the right option for black bbw singles.our website is easy to utilize and navigate.we have a search function which allows you to definitely find the perfect match for you.we also provide a chat feature so you can speak with other members.we have actually an array of features which make us the right option for black bbw singles.our website is not hard to make use of and navigate.we have actually a search function enabling you to discover the perfect match available.we also provide a chat feature to help you communicate with other members.we have actually many features that make us the right choice for black bbw singles.our website is straightforward to use and navigate.we have actually a search function that allows one to find the perfect match for you personally.we have a chat function in order to keep in touch with other users.we have a wide range of features that do make us the right choice for black bbw singles.our website is easy to make use of and navigate.we have actually a search function which allows you to definitely find the perfect match for you.we have a chat function to communicate with other people.we have actually a wide range of features that make us the right choice for black bbw singles.our website is not hard to utilize and navigate.we have a search feature which allows one to find the perfect match for you personally.we also provide a chat function to speak with other people.we have actually an array of features that make us the right option for black bbw singles.our website is easy to use and navigate.we have a search function enabling you to definitely get the perfect match for you personally.we also provide a chat feature so you can talk to other users.we have actually many features that make us an ideal choice for black bbw singles.our website is straightforward to use and navigate.we have a search feature that enables one to get the perfect match for you.we likewise have a chat feature to help you communicate with other users.we have actually a wide range of features which make us an ideal option for black bbw singles.our website is not hard to make use of and navigate.we have a search feature which allows you to definitely find the perfect match for you personally.we also provide a chat feature in order to keep in touch with other people.we