Subversion Repositories eFlore/Applications.cel

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
3892 idir 1
import {valeurOk} from './utils.js';
2
 
3
export const initGeoloc = () => {
4
  onGeoloc();
5
  onGeolocManuelle();
6
  geolocValidationEtStockage();
7
};
8
 
9
const onGeoloc = () => {
10
  // Empêcher que le module carto ne bind ses events partout
11
  $('#tb-geolocation').on('submit blur click focus mousedown mouseleave mouseup change', '*', evt => {
12
    evt.preventDefault();
13
    return false;
14
  });
15
  // evenement location
16
  $('#tb-geolocation').on('location', location => {
17
    const locDatas = location.originalEvent.detail;
18
 
19
    if (valeurOk( locDatas )) {
20
      let latitude  = '',
21
        longitude = '';
22
 
23
      console.dir( locDatas );
24
      if (valeurOk( locDatas.geometry.coordinates)) {
25
        if ('Point' === locDatas.geometry.type) {
26
          if (valeurOk( locDatas.geometry.coordinates[0])) {
27
            longitude = locDatas.geometry.coordinates[0].toFixed(5);
28
          }
29
          if (valeurOk( locDatas.geometry.coordinates[1])) {
30
            latitude = locDatas.geometry.coordinates[1].toFixed(5);
31
          }
32
        } else if ('LineString' === locDatas.geometry.type) {
33
          if (valeurOk( locDatas.centroid.coordinates )){
34
            if (valeurOk( locDatas.centroid.coordinates[0])) {
35
              longitude = locDatas.centroid.coordinates[0];
36
            }
37
            if (valeurOk( locDatas.centroid.coordinates[1])) {
38
              latitude = locDatas.centroid.coordinates[1];
39
            }
40
          } else {// on ne prend qu'un point de la ligne
41
            if (valeurOk( locDatas.geometry.coordinates[0][0])) {
42
              longitude = locDatas.geometry.coordinates[0][0];
43
              longitude = longitude.toFixed(5);
44
            }
45
            if (valeurOk( locDatas.geometry.coordinates[0][1])){
46
              latitude = locDatas.geometry.coordinates[0][1];
47
              latitude = latitude.toFixed(5);
48
            }
49
          }
50
        }
51
      }
52
      if (valeurOk(latitude) && valeurOk(longitude)) {
53
        $('#latitude').val(latitude);
54
        $('#longitude').val(longitude);
55
      }
56
    }
57
  });
58
}
59
 
60
const onGeolocManuelle = () => {
61
  const coords = ['latitude','longitude','zoom'];
62
 
63
  $('#latitude,#longitude,#zoom').on('change', function(event) {
64
    const thisCoord = this.id,
65
        thisVal     = $(this).val();
66
    let valeur = '';
67
 
68
    if ($.isNumeric(thisVal)) {
69
      switch(thisCoord) {
70
        case 'zoom':
71
          if (0 < parseInt(thisVal, 10) && 18 >= parseInt(thisVal, 10)) {
72
            valeur = thisVal;
73
          }
74
          break;
75
        case 'latitude':
76
          if ( 90 > Math.abs( parseInt(thisVal, 10))) {
77
            valeur = parseFloat(thisVal, 10).toFixed(5);
78
            $('#latitude').val(valeur);
79
          }
80
          break;
81
        case 'longitude':
82
          if ( 180 >= Math.abs( parseInt(thisVal, 10))) {
83
            valeur = parseFloat(thisVal, 10).toFixed(5);
84
            $('#longitude').val(valeur);
85
          }
86
          break;
87
        default:
88
          break;
89
      }
90
    }
91
    //un champ vide n'est pas une erreur
92
    if ($.isNumeric(valeur)) {
93
        $(this).siblings('span.error').remove();
94
    } else if (0 <= $.inArray(thisCoord, coords)) {
95
      // on ne signale pas d'erreur si il n'y a rien dans le champ
96
      if (!valeurOk($(this).siblings('span.error')) && valeurOk($(this).val())) {
97
        $(this).after('<span class="error">mauvais format pour ce champ<span>');
98
      } else {
99
        $(this).siblings('span.error').remove();
100
      }
101
    }
102
  });
103
}
104
 
105
const geolocValidationEtStockage = () => {
106
  $('#signup_submit').off().on('click', event => {
107
    let localisation = '';
108
    const latitude = $('#latitude').val(),
109
      longitude    = $('#longitude').val(),
110
      zoom         = $('#zoom').val(),
111
      $warning     = $('.warning-carto');
112
 
113
    if ((valeurOk(longitude) && !valeurOk(latitude)) || (!valeurOk(longitude) && valeurOk(latitude))) {
114
      if (!valeurOk($warning)) {
115
        $('#new-fields-buttons').after(
116
          `<p class="message warning-carto">
117
            <i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#ff5d55"></i>&nbsp;Vous avez entré des coordonnées incomplètes<br>
118
            Complétez latitude ou longitude, ou placez un marqueur sur la carto, ou effacez ces deux champs
119
          </p>`
120
        );
121
      }
122
      return false;
123
    } else if (valeurOk($warning)) {
124
      $warning.remove();
125
    }
126
    if (valeurOk(latitude) && valeurOk(longitude)) {
127
      localisation += 'latitude:'+latitude+';';
128
      localisation += 'longitude:'+longitude;
129
    }
130
    if (valeurOk(zoom)) {
131
      if (valeurOk(localisation)) {
132
        localisation += ';';
133
      }
134
      localisation += 'zoom:'+zoom;
135
    }
136
    if (valeurOk(localisation)) {
137
      $('#localisation').val(localisation);
138
    }
139
  });
140
};