location_field_plain_auto.html 4.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <div class="bx-form-input-location-auto-cont bx-clearfix">
  2. <div>__input__</div>
  3. <div id="__id_status__" class="bx-def-padding-sec-left">
  4. <span>__location_string__</span>
  5. <div id="__id_status__copyright" class="bx-def-margin-thd-top bx-def-font-small bx-def-font-grayed"></div>
  6. </div>
  7. </div>
  8. <input type="hidden" name="__name___lat" value="__lat__" />
  9. <input type="hidden" name="__name___lng" value="__lng__" />
  10. <input type="hidden" name="__name___country" value="__country__" />
  11. <input type="hidden" name="__name___state" value="__state__" />
  12. <input type="hidden" name="__name___city" value="__city__" />
  13. <input type="hidden" name="__name___zip" value="__zip__" />
  14. <input type="hidden" name="__name___street" value="__street__" />
  15. <input type="hidden" name="__name___street_number" value="__street_number__" />
  16. <script>
  17. var eForm = $('#__form_id__');
  18. eForm.find('input[name=__name__][type=checkbox]').on('change', function () {
  19. var _self = this;
  20. var callbackOnLocationReset = function (error) {
  21. eForm.find('[name="__name___lat"]').val('');
  22. eForm.find('[name="__name___lng"]').val('');
  23. eForm.find('#__id_status__ span').html("<bx_text_js:_sys_location_field_label />");
  24. $(_self).prop("checked", false);
  25. $(_self).parents('.bx-switcher-cont').removeClass('on').addClass('off');
  26. }
  27. var callbackOnLocationSucess = function (position) {
  28. var iTimeout = 200;
  29. if ('undefined' !== typeof(glBxLocationFieldPlainAutoGeocodingRequest) && glBxLocationFieldPlainAutoGeocodingRequest) { // cancel previous request
  30. clearTimeout(glBxLocationFieldPlainAutoGeocodingRequest);
  31. glBxLocationFieldPlainAutoGeocodingRequest = null;
  32. iTimeout = 1000;
  33. }
  34. glBxLocationFieldPlainAutoGeocodingRequest = setTimeout(function () {
  35. $.getJSON('__nominatim_server__/reverse?lat=' + encodeURIComponent(position.coords.latitude) + '&lon=' + encodeURIComponent(position.coords.longitude) + '&format=json&addressdetails=1&email=__nominatim_email__', function (oResult) {
  36. glBxLocationFieldPlainAutoGeocodingRequest = false;
  37. if (('object' === typeof oResult) && ('undefined' !== typeof oResult.display_name) && ('undefined' !== typeof oResult.address) && ('undefined' !== typeof oResult.address.country_code)) {
  38. eForm.find('[name="__name___lat"]').val(position.coords.latitude);
  39. eForm.find('[name="__name___lng"]').val(position.coords.longitude);
  40. eForm.find('[name="__name___country"]').val(oResult.address.country_code.toUpperCase());
  41. if ('undefined' !== typeof oResult.address.suburb)
  42. eForm.find('[name="__name___city"]').val(oResult.address.suburb);
  43. else if ('undefined' !== typeof oResult.address.town)
  44. eForm.find('[name="__name___city"]').val(oResult.address.town);
  45. else if ('undefined' !== typeof oResult.address.city)
  46. eForm.find('[name="__name___city"]').val(oResult.address.city);
  47. var oMap = {
  48. 'postcode': '__name___zip',
  49. 'state': '__name___state',
  50. 'road': '__name___street',
  51. 'house_number': '__name___street_number',
  52. }
  53. $.each(oMap, function (i) {
  54. if ('undefined' !== typeof oResult.address[i])
  55. eForm.find('[name="' + this + '"]').val(oResult.address[i]);
  56. });
  57. eForm.find('#__id_status__ span').html(oResult.display_name);
  58. if ('undefined' !== typeof oResult.licence)
  59. eForm.find('#__id_status__copyright').html(oResult.licence);
  60. }
  61. else {
  62. eForm.find('#__id_status__ span').html(position.coords.latitude + ', ' + position.coords.longitude);
  63. }
  64. });
  65. }, iTimeout);
  66. }
  67. if ($(this).is(':checked')) {
  68. eForm.find('#__id_status__ span').html('<bx_text_js:_sys_location_determining />');
  69. if (navigator.geolocation)
  70. navigator.geolocation.getCurrentPosition(callbackOnLocationSucess, callbackOnLocationReset);
  71. else
  72. eForm.find('#__id_status__ span').html('<bx_text_js:_sys_location_geolocation_not_supported_by_browser />');
  73. }
  74. else {
  75. callbackOnLocationReset();
  76. }
  77. });
  78. </script>