// 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( '
Ufavip777 ดูสักหน่อยดีกว่า เพราะไม่ใช่แค่ดูบอลอย่างเดียว แต่ได้ลุ้นเงินไปพร้อมๆ กันด้วย ฟังดูเพลินใช่ไหมล่ะ ufavip 777 เกมเดิมพันแบบนี้มันทำให้การนั่งดูบอลทุกแมตช์ตื่นเต้นขึ้นจริงๆ ไม่ว่าจะเต็ง บอลสเต็ป หรือบอลสด ก็มีกดได้ตามใจชอบ แทงบอลufa แล้วแต่สไตล์คนชอบเสี่ยงมากเสี่ยงน้อย เล่นไปสักพักจะรู้เลยว่าการแทงบอลออนไลน์มันไม่ได้น่ากลัวอย่างที่คิด พูดถึงการ แทงบอล ufa vip 777 ก็อยากได้อะไรที่มันคุ้มค่าใช่มั้ย ลองเข้ามาเล่นกับ ufavip777 แล้วจะรู้เลยว่ามันแตกต่าง เพราะโปรที่มีให้นั้นหมุนเวียนมาแบบไม่มีเบื่อ ทั้งโปรประจำวัน โปรรายสัปดาห์ หรือโปรตามเทศกาล จัดเต็มให้เลือกรับได้ตามใจ แค่ฝากเงินก็ได้โบนัสเพิ่ม แทงแล้วเสียก็ยังได้คืนบางส่วน แทงบอล10บาท เหมือนเว็บเขารู้ใจคนเล่น บอล จริงๆ หากพูดถึงแพลตฟอร์มสำหรับการเล่นสล็อต ที่ครบวงจรในยุคนี้ บอกเลยว่า ufavip777 ทางเข้าเล่น คือหนึ่งในตัวเลือกที่น่าสนใจอย่างยิ่ง และเป็นเว็บสล็อตอันดับ 1 ของโลก สามารถตอบโจทย์ด้วยการรวบรวมเกมสล็อตมากกว่า 2,000 รายการ มีตัวเลือกให้คุณได้เล่นมากมาย ครบเครื่องในทุกๆ อย่างด้าน ด้วยจุดเด่นคือการรวมกว่า 20 ค่าย เลือกเล่นได้ฟรีสไตล์ หากคุณอยากเริ่มต้นความสนุกกับการเล่นสล็อตวันนี้ สามารถล็อกอินเข้ามาที่หน้าเว็บ ufavip777จากนั้นฝากเติมเครดิตเริ่มต้นเข้าเล่นได้ทันที ซึ่งทางเรารองรับทั้งการฝากถอนผ่านทรูวอเลท และแอปธนาคาร ทางเว็บไซต์พัฒนาขึ้นเพื่อช่วยวิเคราะห์จังหวะการเล่นของแต่ละเกม เพิ่มโอกาสในการทำกำไรอย่างมีระบบมากยิ่งขึ้น
# Won CasinoWon Casino เป็นค่ายเกมคาสิโนออนไลน์ที่มอบประสบการณ์การเดิมพันที่น่าตื่นเต้นด้วยเกมหลากหลายรูปแบบ ทั้งสล็อต เกมไพ่ และเกมโต๊ะต่างๆ สำหรับผู้ที่ชื่นชอบการดูบอลสดแบบครบรส UFAVIP 777 ยังมีบริการเสริมอื่นๆ เช่น สถิติการแข่งขัน การวิเคราะห์เกม และอัพเดทข่าวสารวงการฟุตบอลล่าสุด ทำให้คุณได้รับประสบการณ์การรับชมฟุตบอลที่สมบูรณ์แบบอย่างแท้จริง ระบบสตรีมมิ่งของ ufavip777 ได้รับการออกแบบให้รองรับการใช้งานบนทุกอุปกรณ์ ไม่ว่าจะเป็นคอมพิวเตอร์ สมาร์ทโฟน หรือแท็บเล็ต ufavip777 คุณสามารถรับชมได้ทุกที่ทุกเวลาด้วยความคมชัดระดับ HD เสียงชัดเจน และที่สำคัญคือไม่มีอาการกระตุก หรือหน่วง ทำให้คุณไม่พลาดทุกจังหวะสำคัญของเกม สำหรับนักเดิมพันมือใหม่ที่กำลังมองหาจุดเริ่มต้นกับเว็บตรงมาตรฐานสากล UFAVIP777 คือทางเลือกที่ดีที่สุดในยุค 2025 ด้วยระบบการสมัครสมาชิกที่ถูกพัฒนาให้เป็นแบบ “ออโต้ 100%” (Fully Automatic Sy
สมัครวันนี้รับโบนัสทันที ufavip777 ufa888pro เพิ่มทุนบวกบอลคู่เด็ดได้ทันใจ ระบบใช้งานง่าย โหลดไว รองรับมือถือทุกระบบ พร้อมโปรโมชันจัดเต็ม Ufavip777.digital ufabet เว็บตรง สล็อตเว็บตรง แหล่งรวมเกมทำเงิน สล็อตแตกง่าย รับเครดิตฟรีได้ง่าย ๆ ทุกวัน รวมลิงก์ใหม่ล่าสุด ufavip777 digital maxsportสล็อต เข้าใช้งานหน้าราคาบอลได้ทันที โหลดไว รองรับมือถือทุกระบบ พร้อมบริการตลอด 24 ชั่วโมง
การเลือกเว็บแทง บอล ที่ไว้ใจได้คือสิ่งสำคัญสำหรับ นักเล่นทุกคน และชื่อที่ถูกพูดถึงมากในตอนนี้ก็คือ ufavip777 ทางเข้า ที่เปิดให้เข้าถึงบริการครบ ไม่ว่าจะเป็นการแทงบอล ลีกดัง บอลชุด หรือเกมคาสิโนที่หลากหลาย ทุกบริการถูกรวมไว้ที่เดียว ยูฟ่า ทางเข้า เพื่อความสะดวกของผู้เล่น อีกหนึ่งอย่าง คือระบบล็อกอิน ทุกระบบ เมนูภาษาไทยชัดเจน ฝาก–ถอนผ่านระบบอัตโนมัติ เลือก ufa เว็บหลัก ไม่มีขั้นตอนซับซ้อน สำหรับใครที่ต้องการ ความมั่นใจ ไม่ว่าคุณจะเป็น สายไหน ยิ่ง กีฬา ufa vip 777 ในการเดิมพันคือคำตอบที่ ให้ทั้งความจริง และโอกาสทำกำไรได้จริง ก็สนุกได้ครบในที่เดียว ไม่มีขัดใจผู้เดิมพัน อย่างแน่นอนที่นี่ เท่านั้นมาลองจะรู้ได้เลย เว็บตรง ufavip777 ที่รวม ทุกความสนุกเอาไว้ทั้งแทง บอล คาสิโนสด บาคาร่า และเกม ส สล็อต หลากหลายรูปแบบ ในที่เดียว เชื่อมต่อมาตรฐานเดียวกับ ufabet777 และ ufavip 777 ผู้เล่นสามารถสมัครและล็อกอินผ่าน ufa เข้าสู่ระบบ ได้ง่าย ไม่กี่ขั้นตอน ก็เริ่มเลือกทีมที่ชอบและติดตาม ดูบอลสด ufa ได้ทันที ที่นี่เน้นบริการแบบเข้าใจผู้เล่นจริง ใช้งานง่ายบนมือถือ ระบบฝากถอนเงิน เป็นสิ่งที่ขาดไม่ได้บนเว็บไซต์พนันออนไลน์ เว็บไซต์ของเรามาพร้อมกับระบบการให้บริการที่ยอดเยี่ยมระบบ Auto ที่ผู้เล่นสามารถทำรายการได้ด้วยตนเองโดยไม่ต้องติดต่อเจ้าหน้าที่ ใช้ระยะเวลาในการปรับยอดเงินรวดเร็วที่สุด ฝากถอนเงินเริ่มต้น 10 บาท เลือกช่องทางได้ด้วยตนเอง ไม่ว่าจะเป็นการทำรายการผ่าน Application ธนาคาร ทำรายการผ่าน True wallet ทำรายการผ่านตู้ atm และช่องทางอื่นๆ ทุกช่องทางทำรายการฟรี ฝากเงินเข้าสู่ระบบปรับยอด 30 วินาที เลือกเกมเดิมพันได้ตามที่ต้องการไม่ต้องโยกเงิน ไม่รับโปรโมชั่นถอนเงินออกได้ทันทีไม่ต้องทำยอดเทิร์น ทุกยอดฝากสามารถกดรับโปรโมชั่นได้ ระบบธุรกรรมทางการเงินบนเว็บไซต์ของเรา มีความปลอดภัยสูงเชื่อถือได้ ข้อมูลไม่รั่วไหลแน่นอน อยากเล่นพนันออนไลน์กับเว็บไซต์ UFABET ทำได้ไม่ยาก เพียงผู้เล่นทำการสมัครเป็นสมาชิกก็สามารถเข้าเล่นได้ทันที สมัครเข้าเล่นผ่านเว็บไซต์ ufavip777 ไม่ต้องเสียค่าบริการ ใช้เวลาในการสมัครไม่นาน เพียงแค่นักเดิมพันมีหมายเลขโทรศัพท์มือถือก็สามารถเล่นได้ ใช้ข้อมูลน้อย UFAMAX168 ระบบสมัครสมาชิกเว็บไซต์เราทำรายการออโต้ไม่ต้องติดต่อเจ้าหน้าที่ มีการจัดเก็บข้อมูลส่วนตัวของสมาชิกที่ยอดเยี่ยมไม่ต้องกังวลใจเกี่ยวกับการรั่วไหลของข้อมูลปลอดภัยที่สุดหากไม่สามารถทำรายการได้เว็บไซต์ของเรามีช่องทางการให้ความช่วยเหลือนักเดิมพันทุกท่านตลอดเวลา ไม่เป็นสมาชิกก็ติดต่อได้
หนึ่งในจุดขายของคาสิโนออนไลน์คือระบบฝากถอนอัตโนมัติ ผู้เล่นสามารถทำรายการได้ด้วยตัวเอง ใช้เวลาไม่เกิน 30 วินาที เงินก็จะเข้าสู่ระบบทันที ความสะดวกนี้ทำให้นักเดิมพันสามารถโฟกัสไปที่การเล่นเกมมากขึ้น เพื่อนๆ นักเดิมพันทุกคนครับ วันนี้เราจะมาพูดถึงเว็บพนันออนไลน์สุดฮอตอย่าง UFAVIP777 ที่รวบรวมเกมสล็อตแตกง่ายมาให้เลือกเล่นมากมาย เชื่อว่าหลายคนกำลังมองหาเว็บพนันที่ไว้ใจได้และมีโอกาสทำกำไรสูง ซึ่ง UFAVIP777 ตอบโจทย์ความต้องการเหล่านี้ได้อย่างครบครัน เล่นเกมสล็อตกับเราท่านจะได้พบกับความหลากหลาย ซึ่งในแต่ละเกมมาพร้อมกับรูปแบบที่แตกต่างกัน ถ้าหากผู้เล่นต้องเรียนรู้รูปแบบ และกฎกติกาของเกมด้วยตนเองอาจทำให้เสี่ยงต่อการขาดทุนได้สูง ดังนั้นเราจึงได้มีการเปิดระบบทดลองเล่นให้บริการฟรี เล่นได้ตลอดเวลามาพร้อมกับเครดิตฟรีที่ใช้งานได้แบบไม่จำกัด เล่นได้ทุกค่ายเกม ยังไม่เป็นสมาชิกก็สามารถเล่นกับเราได้ เป็นอีกหนึ่งบริการดีๆ ที่จะเพิ่มโอกาสในการได้รับกำไรดียิ่งขึ้น มือใหม่สามารถเข้าเรียนรู้ และฝึกประสบการณ์ให้เกิดความชำนาญได้ ไม่ว่าจะเล่นผ่านโทรศัพท์มือถือ หรืออุปกรณ์อื่นๆ ใช้งานระบบทดลองเล่นของเราได้อย่างสะดวก แต่ถ้าหากต้องการรับสิทธิประโยชน์พิเศษจากเราต้องไม่พลาดที่จะสมัครเป็นสมาชิก และเข้าเล่นด้วยเงินจริงเท่านั้น ทางเข้าเล่นเกมพนันเป็นสิ่งที่สำคัญอย่างยิ่งเล่นกับเว็บไซต์ที่ไม่ดีมีเกมให้เลือกเล่นน้อยไม่ตอบโจทย์ของผู้เล่น มีโอกาสที่จะได้รับกำไรน้อย ufavip777 พนันเว็บแม่ ส่งตรงจากต่างประเทศ เว็บไซต์เครือข่ายโดยตรงจากยูฟ่ามาพร้อมกับเกมเดิมพันที่มีความหลากหลายเปิดให้บริการมากกว่า 500 เกม และยังมีการนำเกมเดิมพันที่เปิดใหม่จากค่ายเกมชั้นนำอื่นๆ มาเปิดให้บริการอีกด้วยเข้าถึงง่ายโหลดเกมเร็ว TOPONE777 ทุกเกมที่เราเปิดให้บริการมีกฎกติกาที่เป็นมาตรฐานสากล ไม่ปรับแต่ง หรือแก้ไขรูปแบบของเกมอย่างแน่นอนได้กำไรดีไม่เอาเปรียบลูกค้า สามารถเข้าเรียนรู้กฎกติกาต่างๆ ของเกมที่เราเปิดให้บริการได้ฟรีผ่านระบบ Demo ที่มาพร้อมกับเครดิตฟรีไม่จำกัด