// 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( '
Oyun çesitliligi ve yüksek getiri saglayan oyun çesitleriyle kumarhane endüstrisinde rakiplerinden bir adim önde olan casino platformu, 400.000’den fazla oyun meraklisinin vazgeçilmezi. Siz de hemen bu online kumarhane sitesine abone olun, ister slot prodüksiyonlarinda neseli anlar geçirin ister canli cazino tecrübesinin tadina varin!
Çok güven veren çevrim içi casino siteleri söz konusu olunca akla gelen ilk sitelerden birisi olan 7slots, abone verilerinin gözetilmesine büyük özen gösteriyor. Sanal kumarhane sitesi, dijital sertifika ile üyelerinin islemlerini korurken çift asamali kimlik dogrulama sistemi sayesinde hesabinizi süpheli erisim tesebbüslerinden koruyor. Bunlarin yani sira Müsterini Tani operasyonlari araciligiyla abonelik olusturma asamalari özenle yönetiliyor.
Dijital tabanli kumarhane pazarindaki en güvenilir canli casino serüvenini bahis tutkunlarina sunan 7 slots, yilda dört kez bagimsiz degerlendirme sirketleri tarafindan denetimlere tabi tutuluyor. Geçen yilin analizlerine göre, bu kumar web sitesinde yapilan 1 milyondan fazla islemin %99,8’i sorunsuzca tamamlandi. Bu da 7 slots bahis sitesini internet tabanli kumar piyasasinda emniyet açisindan önde gelen bir isim yapiyor.
Çevrim içi kumar piyasasinda en begenilen oyun alternatiflerine emsalsiz portföyünde yer veren sanal kumarhane sitesi, yeni slot tutkunlarina özel kârli bonuslar ve ödüller veriyor. Ilk fon aktarimi bonusu ile 900 lirayi bulan %100 kazanç elde edebilir, 250 liralik çevrim sartsiz deneme bonusu ile sitenin yapimlarini risk almadan deneyebilirsiniz. Çevrim içi kumarhane platformu, yüksek fon transferlerine özel VIP promosyonlari ve cashback imkâni da sagliyor. En güven tesis eden online casino serüvenini yasamak için en dogru adres, 7 slots çevrim içi kumarhane platformu!
]]>Oyun çesitliligi ve kazandiran oyun çesitleriyle internet tabanli kumarhane endüstrisinde rakiplerine nal toplatan online casino platformu, 200.000’den fazla bahis tutkununun tercihi. Siz de zaman kaybetmeden bu çevrim içi bahis platformuna abone olun, ister slot alternatiflerinde keyifli vakit geçirin ister canli cazino tecrübesinin keyfini çikarin!
Saglam çevrim içi kumar portallari konusu gündeme geldiginde akilda beliren ilk online kumarhanelerinden biri olan 7slots, kullanici bilgilerinin korunmasina gereken önemi veriyor. Bahis web sitesi, güvenli baglanti ile oyuncularin profillerini emniyet altina alirken iki faktörlü kimlik dogrulama sistemi sayesinde profilinizi izinsiz erisim tesebbüslerine karsi koruyor. Bunlarin yani sira müsteri kimliginin teyidi çalismalari araciligiyla üyelik asamalari özenle yürütülmektedir.
Internet odakli kumarhane dünyasindaki en basarili bahis tecrübesini kullanicilara sunan 7 slots, düzenli olarak uluslararasi degerlendirme sirketleri tarafindan denetleniyor. Geçen senenin raporlarina göre, bu çevrim içi casino platformunda yapilan 60.000+ islemin %99,8’i bir sorun olmaksizin tamamlanmis bulunuyor. Bu da 7 slots sanal kumar web sitesini çevrim içi bahis endüstrisinde emniyet açisindan dikkat çeken bir organizasyon yapiyor.
Dijital tabanli kumarhane piyasasinda en sevilen oyun çesitlerine zengin portföyünde yer veren online kumar portali, yeni katilan oyunculara özel emsalsiz promosyonlar ve armaganlar dagitiyor. Çevrimsiz yatirim promosyonu ile 700 liraya varan %100 kazanç elde edebilir, 400 liraya varan deneme ödülü sayesinde platformun yapimlarini riskten uzak bir sekilde kesfedebilirsiniz. Çevrim içi kumar sitesi, belirli miktarlarin üzerindeki yatirimlara özel VIP bonuslari ve cashback firsati da sagliyor. En güven tesis eden çevrimiçi kumar yolculugunu yasamak için ideal mekân, 7 slots bahis web sitesi!
]]>