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

Spielen Sie Pirots 4-Slot-Spielautomaten im Online-Casino in Deutschland

Spielen Sie Pirots 4-Slot-Spielautomaten im Online-Casino in Deutschland Table Of Contents Entdecke Pirots 4-Walzen-Spielautomaten im Online-Casino in Deutschland Spielen Sie Pirots Slot-Spiele mit 4 Walzen im Online-Casino Pirots 4-Walzen-Spielautomaten im Online-Casino: Erfahrungen und Tipps Warum Sie Pirots 4-Walzen-Spielautomaten im deutschen Online-Casino ausprobieren sollten So gewinnen Sie bei Pirots 4-Walzen-Spielautomaten im Online-Casino Die besten Online-Casinos in […]

Experience Thrilling Tower Rush Games & Online Casino Action in English – UK Players Welcome

Experience Thrilling Tower Rush Games & Online Casino Action in English – UK Players Welcome Table Unleashing the Excitement: Tower Rush Games & Online Casinos for UK Players Thrilling Tower Rush Games: A New Addition to Online Casino Gaming in the UK Experience the Ultimate Gaming Thrill: Tower Rush Games & Online Casinos in England […]

Spielen Sie Chicken Road Online-Casino: Die Top Plattform für Casino-Spiele in Deutschland

Spielen Sie Chicken Road Online-Casino: Die Top Plattform für Casino-Spiele in Deutschland Table Spielen Sie Chicken Road: Die beste Online-Casino-Plattform in Deutschland Chicken Road Online-Casino: Entdecken Sie die Top Casino-Spiele in Deutschland Warum Chicken Road das Online-Casino der Wahl in Deutschland ist Chicken Road: Ihr Gateway zu den besten Casino-Spielen in Deutschland Spielen Sie Chicken […]

Igrajte Chicken Road casino igre online u Hrvatskoj

Igrajte Chicken Road casino igre online u Hrvatskoj Table Kako igraju Chicken Road casino igre online u Hrvatskoj? Najbolje Chicken Road online casino igre za igrače u Hrvatskoj Provjera sigurnosti Chicken Road online casino igara u Hrvatskoj Bonusi i promocije na Chicken Road online casino igricama u Hrvatskoj Popularne Chicken Road online casino igre među […]

Speel Lightning Storm Evolution online casino spel in het Nederlandse Internet gamingwereld

Speel Lightning Storm Evolution online casino spel in het Nederlandse Internet gamingwereld Table of contents Hoe kan je Lightning Storm Evolution online spelen in Nederland? De voordelen van Lightning Storm Evolution in het Nederlandse internet gamingwereld Lightning Storm Evolution: een online casino spel voor iedereen Waarom je Lightning Storm Evolution online moet spelen in Nederland […]

Contents 塔樓衝刺:台灣最受歡迎的線上賭場介紹 如何在台灣的線上賭場玩轉塔樓衝刺 台灣線上賭場塔樓衝刺的技巧與提示 台灣最受歡迎的塔樓衝刺賭場平台 塔樓衝刺的遊戲規則和流程 台灣線上賭場塔樓衝刺的優勢和風險 玩轉塔樓衝刺:在台灣最受歡迎的線上賭場! 塔樓衝刺:台灣最受歡迎的線上賭場介紹 在線上賭場中,台灣玩家最喜歡的是塔樓衝刺!這家在台灣具有絕對嚴謹牌照的線上賭場,提供多種遊戲,如百家樂、骰寶、撲克等。塔樓衝刺的界面設計簡單直觀,遊戲流暢且公正,是台灣玩家最理想的選擇。此外,塔樓衝刺還提供多種優惠和促銷活動,讓玩家可以獲得更多收益。如果你想尋找一個安全、公正、簡單易用的線上賭場,塔樓衝刺是你不能錯過的選擇! 如何在台灣的線上賭場玩轉塔樓衝刺 了解如何在台灣的線上賭場玩轉塔樓衝刺?首先,找尋一家信譽良好、提供塔樓衝刺遊戲的台灣線上賭場。接下來,註冊帳號、完成實名制和存款。選擇塔樓衝刺遊戲,熟悉遊戲規則和界面。根據遊戲進程和策略來下注,包括下注金額和時機。最後,如果中大獎,請注意提款流程和相關限制。 台灣線上賭場塔樓衝刺的技巧與提示 1. 了解遊戲規則:在開始塔樓衝刺前,務必瞭解遊戲规則,包括塔的種類、攻擊方式和得分方式。 2. 管理您的財務:分配適當的賭注金額,避免一次性下注過多,造成資金不足。 3. 選擇正確的塔:不同類型的塔有不同的價值和攻擊力,選擇正確的塔可以提高您的勝算。 4. 使用特殊技能:塔樓衝刺遊戲 souvent 會提供特殊技能,使用這些技能可以增加您的攻擊力和防守能力。 5. 隨時升級:在塔樓衝刺中,升級是提高攻擊力和防守能力的關鍵。 6. 觀察對手:了解對手的攻擊方式和塔的種類,可以有效地對抗對手。 7. 保持冷靜:在激動的遊戲過程中,保持冷靜,做出正確的決策,是成功的關鍵。 台灣最受歡迎的塔樓衝刺賭場平台 在台灣,台灣最受歡迎的塔樓衝刺賭場平台有哪些?首先,我們要提到PT5299。其次,台灣網友也非常喜歡Playbet999。此外,IGAME888亦是一個不錯的選擇。再者,Crown688同樣是一個值得信任的平台。此外,Gclub888也是一個受歡迎的選擇。最後,不可遺忘台灣最受歡迎的塔樓衝刺賭場平台之一:WINN998。 Tower Rush Demo 塔樓衝刺的遊戲規則和流程 在台灣,塔樓衝刺是一款熱門的 casino 遊戲。玩家需先了解塔樓衝刺的遊戲規則和流程,以獲得最佳的遊戲體驗。 塔樓衝刺遊戲的目標是破壞對手的塔樓,讓自己的塔樓保持安全。 每名玩家都會有五個單位,分別是步兵、弓箭手、騎士、法師和大妖精。 每回合,玩家可以選擇一名單位向對手的塔樓進發,並可以使用該單位的技能。 如果對手的塔樓被摧毀,該名玩家就會獲得勝利;如果自己的塔樓被摧毀,則該名玩家失敗。 塔樓衝刺的遊戲規則和流程相對簡單,但遊戲中的策略和技巧卻可以讓遊戲變得非常有挑戰。 玩家可以通過多次遊戲的實踐,提高自己的遊戲技巧,並成為塔樓衝刺的高手。 台灣線上賭場塔樓衝刺的優勢和風險 台灣線上賭場提供多樣的遊戲選擇,其中之一是塔樓衝刺。 這種遊戲的優勢在於可以隨時參與,而且 souvent 提供高於其他遊戲的 Gewinne。 然而,塔樓衝刺也存在一定的風險,例如易於因為陷入熱情而遺失時間和金錢。 另外,如果您不熟悉遊戲規則,也容易在投注過程中出現錯誤。 因此,在參與塔樓衝刺之前,建議先了解遊戲規則並且設定自己的投注限制。 此外,選擇一家可靠的台灣線上賭場,也能夠有效降低您遭受詐騙的風險。 總之,台灣線上賭場的塔樓衝刺可以提供高回報,但也需要注意相應的風險。 […]

Design and Develop by Ovatheme