location_field_plain_auto.html 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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. $('input[name=__name__][type=checkbox]').on('change', function () {
  18. var _self = this;
  19. var callbackOnLocationReset = function (error) {
  20. $('[name="__name___lat"]').val('');
  21. $('[name="__name___lng"]').val('');
  22. $('#__id_status__ span').html("<bx_text_js:_sys_location_undefined />");
  23. $(_self).prop("checked", false);
  24. $(_self).parents('.bx-switcher-cont').removeClass('on').addClass('off');
  25. }
  26. var callbackOnLocationSucess = function (position) {
  27. var iTimeout = 200;
  28. if ('undefined' !== typeof(glBxLocationFieldPlainAutoGeocodingRequest) && glBxLocationFieldPlainAutoGeocodingRequest) { // cancel previous request
  29. clearTimeout(glBxLocationFieldPlainAutoGeocodingRequest);
  30. glBxLocationFieldPlainAutoGeocodingRequest = null;
  31. iTimeout = 1000;
  32. }
  33. glBxLocationFieldPlainAutoGeocodingRequest = setTimeout(function () {
  34. $.getJSON('__nominatim_server__/reverse?lat=' + encodeURIComponent(position.coords.latitude) + '&lon=' + encodeURIComponent(position.coords.longitude) + '&format=json&addressdetails=1&email=__nominatim_email__', function (oResult) {
  35. glBxLocationFieldPlainAutoGeocodingRequest = false;
  36. if (('object' === typeof oResult) && ('undefined' !== typeof oResult.display_name) && ('undefined' !== typeof oResult.address) && ('undefined' !== typeof oResult.address.country_code)) {
  37. $('[name="__name___lat"]').val(position.coords.latitude);
  38. $('[name="__name___lng"]').val(position.coords.longitude);
  39. $('[name="__name___country"]').val(oResult.address.country_code.toUpperCase());
  40. if ('undefined' !== typeof oResult.address.suburb)
  41. $('[name="__name___city"]').val(oResult.address.suburb);
  42. else if ('undefined' !== typeof oResult.address.town)
  43. $('[name="__name___city"]').val(oResult.address.town);
  44. else if ('undefined' !== typeof oResult.address.city)
  45. $('[name="__name___city"]').val(oResult.address.city);
  46. var oMap = {
  47. 'postcode': '__name___zip',
  48. 'state': '__name___state',
  49. 'road': '__name___street',
  50. 'house_number': '__name___street_number',
  51. }
  52. $.each(oMap, function (i) {
  53. if ('undefined' !== typeof oResult.address[i])
  54. $('[name="' + this + '"]').val(oResult.address[i]);
  55. });
  56. $('#__id_status__ span').html(oResult.display_name);
  57. if ('undefined' !== typeof oResult.licence)
  58. $('#__id_status__copyright').html(oResult.licence);
  59. }
  60. else {
  61. $('#__id_status__ span').html(position.coords.latitude + ', ' + position.coords.longitude);
  62. }
  63. });
  64. }, iTimeout);
  65. }
  66. if ($(this).is(':checked')) {
  67. $('#__id_status__ span').html('<bx_text_js:_sys_location_determining />');
  68. if (navigator.geolocation)
  69. navigator.geolocation.getCurrentPosition(callbackOnLocationSucess, callbackOnLocationReset);
  70. else
  71. $('#__id_status__ span').html('<bx_text_js:_sys_location_geolocation_not_supported_by_browser />');
  72. }
  73. else {
  74. callbackOnLocationReset();
  75. }
  76. });
  77. </script>