form.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. $( document ).ready(function() {
  2. // Defaults
  3. defaults = {
  4. lat: ($('#id_latitude').val()) ? $('#id_latitude').val() : 47.218371,
  5. lng: ($('#id_longitude').val()) ? $('#id_longitude').val() : -1.553621,
  6. zoom: 13,
  7. }
  8. // Create map
  9. var map = L.map('map', {scrollWheelZoom: false}).setView([defaults.lat,defaults.lng], defaults.zoom);
  10. L.tileLayer('//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
  11. attribution: 'Map data &copy; <a href="//openstreetmap.org">OpenStreetMap</a> contributors, <a href="//creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="//mapbox.com">Mapbox</a>',
  12. maxZoom: 18
  13. }).addTo(map);
  14. // Add scale control
  15. L.control.scale({
  16. position: 'bottomleft',
  17. metric: true,
  18. imperial: false,
  19. maxWidth: 150
  20. }).addTo(map);
  21. var marker = null;
  22. map.on('click', (e) => {
  23. // Create marker
  24. if (marker === null) {
  25. marker = L.marker([defaults.lat, defaults.lng], {
  26. draggable: true
  27. }).addTo(map);
  28. }
  29. // every time the marker is dragged, update the coordinates container
  30. marker.on('dragend', mapUpdateCoords);
  31. marker.setLatLng(e.latlng)
  32. mapUpdateCoords()
  33. // every time the marker is dragged, update the coordinates container
  34. marker.on('dragend', mapUpdateCoords);
  35. function mapUpdateCoords() {
  36. var m = marker.getLatLng();
  37. $('#id_latitude').val(m.lat);
  38. $('#id_longitude').val(m.lng);
  39. }
  40. });
  41. // Display tiny circles on existing public points
  42. var GeoJsonPath = $('#map').data('json');
  43. $.getJSON(GeoJsonPath, function(data){
  44. var featureLayer = L.geoJson(data, {
  45. pointToLayer: function (feature, latlng) {
  46. return L.circleMarker(latlng, {color: '#00B300'});
  47. }
  48. }).addTo(map);
  49. });
  50. // Search sub form
  51. $('#search-btn').click(function(e){
  52. e.preventDefault();
  53. var btn = $(this).button('loading');
  54. // Geocoding
  55. var searchString = $('#search').val();
  56. $.getJSON('https://nominatim.openstreetmap.org/search?limit=5&format=json&q='+searchString, function(data){
  57. var items = [];
  58. $.each(data, function(key, val) {
  59. items.push(
  60. "<li class='list-group-item'><a href='#' data-lat='"+val.lat+"' data-lng='"+val.lon+"'>" + val.display_name + '</a></li>'
  61. );
  62. });
  63. $('#modal .modal-body').empty();
  64. if (items.length != 0) {
  65. $('<ul/>').addClass("list-group").html(items.join('')).appendTo('#modal .modal-body');
  66. } else {
  67. $('<p/>', { html: "Aucun résultat" }).appendTo('#modal .modal-body');
  68. }
  69. $('#modal').modal('show');
  70. // Bind click on results and update coordinates
  71. $('#modal .modal-body a').on('click', function(e){
  72. e.preventDefault();
  73. marker.setLatLng({lat:$(this).data('lat'), lng:$(this).data('lng')}).update();
  74. map.panTo({lat:$(this).data('lat'), lng:$(this).data('lng')});
  75. map.setZoom(16);
  76. mapUpdateCoords();
  77. $('#modal').modal('hide');
  78. });
  79. btn.button('reset');
  80. }); // getJSON
  81. }); // Search sub form
  82. // Enter key on search form does not submit form,
  83. // Trigger search button instead.
  84. $('#search').keypress(function(e) {
  85. if (e.which == '13') {
  86. e.preventDefault();
  87. $('#search-btn').trigger('click');
  88. }
  89. });
  90. // Contrib share dynamic form
  91. if ($('[name="contrib_type"]:checked').val() == 'share') { $('#contrib-type-share').show(); }
  92. else { $('#contrib-type-share').hide(); }
  93. if ($('[name="contrib_type"]:checked').val() == 'connect') { $('#contrib-type-connect').show(); }
  94. else { $('#contrib-type-connect').hide(); }
  95. // On change
  96. $('[name="contrib_type"]').change(function(e){
  97. $('#contrib-type-share').slideUp();
  98. $('#contrib-type-connect').slideUp();
  99. if ($(this).val() == 'share') { $('#contrib-type-share').slideDown(); }
  100. if ($(this).val() == 'connect') { $('#contrib-type-connect').slideDown(); }
  101. });
  102. // select/deselect all checkbox
  103. $('#orientation-all').change(function(e){
  104. $('input[name="orientations"]').prop('checked', $(e.target).is(':checked') );
  105. });
  106. $('.orientations').change(function(e){
  107. if (! $(e.target).is(':checked')) {
  108. $('input[name="orientation-all"]').prop('checked', false);
  109. }
  110. if ($('.orientations').filter(':not(:checked)').length == 0) {
  111. $('input[name="orientation-all"]').prop('checked', true);
  112. }
  113. });
  114. });