Subversion Repositories Sites.obs-saisons.fr

Rev

Rev 330 | Rev 333 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 330 Rev 331
1
function capitaliserPremiereLettre(string) {
1
function capitaliserPremiereLettre(string) {
2
    return string.charAt(0).toUpperCase() + string.slice(1);
2
    return string.charAt(0).toUpperCase() + string.slice(1);
3
}
3
}
4
 
4
 
5
function obtenirNomEspeceSelectionnee() {
5
function obtenirNomEspeceSelectionnee() {
6
	return $('#selecteur_liste_especes option:selected').text();
6
	return $('#selecteur_liste_especes option:selected').text();
7
}
7
}
8
 
8
 
9
function obtenirAnneeSelectionnee() {
9
function obtenirAnneeSelectionnee() {
10
	return $('#selecteur_annees option:selected').text();
10
	return $('#selecteur_annees option:selected').text();
11
}
11
}
12
 
12
 
13
function obtenirDonneesPhasesPhenologiques(id_espece, annee) {
13
function obtenirDonneesPhasesPhenologiques(id_espece, annee) {
14
	$.get(url_jrest+'OdsExport/ExportPhasesPhenologiquesJson?espece='+id_espece+'&annee='+annee, function(e) {
14
	$.get(url_jrest+'OdsExport/ExportPhasesPhenologiquesJson?espece='+id_espece+'&annee='+annee, function(e) {
15
		dessinerGraphiquePhasesPhenologiques(e, annee);
15
		dessinerGraphiquePhasesPhenologiques(e, annee);
16
	});
16
	});
17
}
17
}
18
 
18
 
19
 
19
 
20
var legende_points = {};
20
var legende_points = {};
21
var legende_points_index = {};
21
var legende_points_index = {};
22
function dessinerGraphiquePhasesPhenologiques(data, annee) {
22
function dessinerGraphiquePhasesPhenologiques(data, annee) {
23
 
23
 
24
  var traces = new Array();
24
  var traces = new Array();
25
  for (var id_evenement in data) {
25
  for (var id_evenement in data) {
26
	    if (!data.hasOwnProperty(id_evenement)) continue;
26
	    if (!data.hasOwnProperty(id_evenement)) continue;
27
      var data_evenement = data[id_evenement];
27
      var data_evenement = data[id_evenement];
28
      traces.push({
28
      traces.push({
29
        x: data_evenement.x,
29
        x: data_evenement.x,
30
        type: 'box',
30
        type: 'box',
31
        name: capitaliserPremiereLettre(id_evenement),
31
        name: capitaliserPremiereLettre(id_evenement),
32
      });
32
      });
33
 
33
 
34
      legende_points[capitaliserPremiereLettre(id_evenement)] = data_evenement.text_index;
34
      legende_points[capitaliserPremiereLettre(id_evenement)] = data_evenement.text_index;
35
      legende_points_index[capitaliserPremiereLettre(id_evenement)] = Object.keys(data_evenement.text_index).map(function(x) {
35
      legende_points_index[capitaliserPremiereLettre(id_evenement)] = Object.keys(data_evenement.text_index).map(function(x) {
36
        return parseFloat(x.replace("'", ''));
36
        return parseFloat(x.replace("'", ''));
37
      });
37
      });
38
  }
38
  }
-
 
39
 
-
 
40
  var titre = 'Calendrier phénologique pour l\'espèce '+obtenirNomEspeceSelectionnee();
-
 
41
  if(annee == "0") {
-
 
42
    titre += '<br /> Toutes les années';
-
 
43
  } else {
-
 
44
    titre += '<br /> Année '+obtenirAnneeSelectionnee();
-
 
45
  }
-
 
46
 
39
 
47
 
40
  var layout = {
48
  var layout = {
41
    title: 'Calendrier phénologique pour l\'espèce '+obtenirNomEspeceSelectionnee()+'<br /> Année '+obtenirAnneeSelectionnee(),
49
    title: titre,
42
    xaxis: {
50
    xaxis: {
43
	    title: '',
51
	    title: '',
44
      autorange: true,
52
      autorange: true,
45
			autoticks: false,
53
			autoticks: false,
46
      hoverformat: '.7f',
54
      hoverformat: '.7f',
47
			tickvals: [1,2,3,4,5,6,7,8,9,10,11,12],
55
			tickvals: [1,2,3,4,5,6,7,8,9,10,11,12],
48
    	ticktext: ['janvier', 'fevrier', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'],
56
    	ticktext: ['janvier', 'fevrier', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'],
49
	  }
57
	  }
50
  };
58
  };
51
 
59
 
52
  Plotly.newPlot('conteneur-graphique', traces, layout);
60
  Plotly.newPlot('conteneur-graphique', traces, layout);
53
  var graphique = document.getElementById('conteneur-graphique');
61
  var graphique = document.getElementById('conteneur-graphique');
54
 
62
 
55
  graphique.on('plotly_hover', function(data) {
63
  graphique.on('plotly_hover', function(data) {
56
    modifierAffichageToolTips(data);
64
    modifierAffichageToolTips(data);
57
  });
65
  });
58
 
66
 
59
}
67
}
60
 
68
 
61
function modifierAffichageToolTips(data) {
69
function modifierAffichageToolTips(data) {
62
  var axeY = data.points[0].y;
70
  var axeY = data.points[0].y;
63
  $('text.nums, text.name').css('visibility', 'hidden');
71
  $('text.nums, text.name').css('visibility', 'hidden');
64
  $('text.nums, text.name').css('width', 0);
72
  $('text.nums, text.name').css('width', 0);
65
  $('text.nums').each(function() {
73
  $('text.nums').each(function() {
66
    var $text_hover_clone = creerCopieTooltip($(this), axeY);
74
    var $text_hover_clone = creerCopieTooltip($(this), axeY);
67
    $(this).parent().append($text_hover_clone);
75
    $(this).parent().append($text_hover_clone);
68
  });
76
  });
69
}
77
}
70
 
78
 
71
function renvoyerDatePourIndexNumerique(index_valeur, index_evenement_legende) {
79
function renvoyerDatePourIndexNumerique(index_valeur, index_evenement_legende) {
72
  // des fois le graphique fait des arrondis de valeurs dont on ne peut plus relier
80
  // des fois le graphique fait des arrondis de valeurs dont on ne peut plus relier
73
  // la valeur du graphique a sa date, dans ce cas là on prend la plus proche du tableau
81
  // la valeur du graphique a sa date, dans ce cas là on prend la plus proche du tableau
74
  var index_valeur_formate = parseFloat(index_valeur).toFixed(7);
82
  var index_valeur_formate = parseFloat(index_valeur).toFixed(7);
75
  var text_hover = legende_points[index_evenement_legende]["'"+index_valeur_formate+"'"];
83
  var text_hover = legende_points[index_evenement_legende]["'"+index_valeur_formate+"'"];
76
  if(typeof text_hover == "undefined") {
84
  if(typeof text_hover == "undefined") {
77
    index_valeur_f = parseFloat(index_valeur);
85
    index_valeur_f = parseFloat(index_valeur);
78
    index_valeur = legende_points_index[index_evenement_legende].reduce(function(prev, curr) {
86
    index_valeur = legende_points_index[index_evenement_legende].reduce(function(prev, curr) {
79
      return (Math.abs(curr - index_valeur_f) < Math.abs(prev - index_valeur_f) ? curr : prev);
87
      return (Math.abs(curr - index_valeur_f) < Math.abs(prev - index_valeur_f) ? curr : prev);
80
    });
88
    });
81
    text_hover = legende_points[index_evenement_legende]["'"+index_valeur+"'"];
89
    text_hover = legende_points[index_evenement_legende]["'"+index_valeur+"'"];
82
  }
90
  }
83
 
91
 
84
  return text_hover;
92
  return text_hover;
85
}
93
}
86
 
94
 
87
function creerCopieTooltip($original, index_evenement_legende) {
95
function creerCopieTooltip($original, index_evenement_legende) {
88
  var $clone = $original.clone(true);
96
  var $clone = $original.clone(true);
89
  var text_hover = renvoyerDatePourIndexNumerique($original.data('unformatted'), index_evenement_legende)
97
  var text_hover = renvoyerDatePourIndexNumerique($original.data('unformatted'), index_evenement_legende)
90
 
98
 
91
  $clone.html(text_hover);
99
  $clone.html(text_hover);
92
  $clone.data('unformatted', text_hover);
100
  $clone.data('unformatted', text_hover);
93
  $clone.attr('data-unformatted', text_hover);
101
  $clone.attr('data-unformatted', text_hover);
94
  $clone.css('visibility', 'visible');
102
  $clone.css('visibility', 'visible');
95
  $clone.css('width', '100%');
103
  $clone.css('width', '100%');
96
  $clone.css('font-size', '11px');
104
  $clone.css('font-size', '11px');
97
 
105
 
98
  return $clone;
106
  return $clone;
99
}
107
}
100
 
108
 
101
$(document).ready(function() {
109
$(document).ready(function() {
102
 
110
 
103
  $('#selecteur_liste_especes').change(function(e) {
111
  $('#selecteur_liste_especes').change(function(e) {
104
    var conteneur_graphique = document.getElementById('conteneur-graphique');
112
    var conteneur_graphique = document.getElementById('conteneur-graphique');
105
    Plotly.purge(conteneur_graphique);
113
    Plotly.purge(conteneur_graphique);
106
 
-
 
107
    if($('#selecteur_annees').val() != "0") {
-
 
108
      obtenirDonneesPhasesPhenologiques($(this).val(), $('#selecteur_annees').val());
114
    obtenirDonneesPhasesPhenologiques($(this).val(), $('#selecteur_annees').val());
109
    }
-
 
110
 
-
 
111
  });
115
  });
112
 
116
 
113
  $('#selecteur_annees').change(function(e) {
117
  $('#selecteur_annees').change(function(e) {
114
    var conteneur_graphique = document.getElementById('conteneur-graphique');
118
    var conteneur_graphique = document.getElementById('conteneur-graphique');
115
    Plotly.purge(conteneur_graphique);
119
    Plotly.purge(conteneur_graphique);
116
    if($(this).val() == "0") {
-
 
117
      return;
-
 
118
    }
-
 
119
 
120
 
120
    if($('#selecteur_liste_especes').val() != "0") {
121
    if($('#selecteur_liste_especes').val() != "0") {
121
      obtenirDonneesPhasesPhenologiques($('#selecteur_liste_especes').val(), $(this).val());
122
      obtenirDonneesPhasesPhenologiques($('#selecteur_liste_especes').val(), $(this).val());
122
    }
123
    }
123
  });
124
  });
124
  
125
 
125
});
126
});