Subversion Repositories Sites.obs-saisons.fr

Rev

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

Rev 333 Rev 335
1
function tableauxOntAuMoinsUnElementEnCommun(haystack, arr) {
1
function tableauxOntAuMoinsUnElementEnCommun(haystack, arr) {
2
    return arr.some(function (v) {
2
    return arr.some(function (v) {
3
        return haystack.indexOf(v) >= 0;
3
        return haystack.indexOf(v) >= 0;
4
    });
4
    });
5
};
5
};
6
 
6
 
7
function obtenirNomEspeceSelectionnee() {
7
function obtenirNomEspeceSelectionnee() {
8
	return $('#selecteur_liste_especes option:selected').text();
8
	return $('#selecteur_liste_especes option:selected').text();
9
}
9
}
10
 
10
 
11
function obtenirNomStadeSelectionne() {
11
function obtenirNomStadeSelectionne() {
12
	return $('#selecteur_stade option:selected').text();
12
	return $('#selecteur_stade option:selected').text();
13
}
13
}
14
 
14
 
15
function surChangementSelecteurEspece(id_espece_selectionnee, evenements) {
15
function surChangementSelecteurEspece(id_espece_selectionnee, evenements) {
16
 
16
 
17
	var $evenements_options = $('#selecteur_stade option');
17
	var $evenements_options = $('#selecteur_stade option');
18
 
18
 
19
	$('#selecteur_stade option').addClass('hide');
19
	$('#selecteur_stade option').addClass('hide');
20
	if(id_espece_selectionnee == 0) {
20
	if(id_espece_selectionnee == 0) {
21
		$('#selecteur_stade').addClass('hide');
21
		$('#selecteur_stade').addClass('hide');
22
	} else {
22
	} else {
23
		$('#selecteur_stade').removeClass('hide');
23
		$('#selecteur_stade').removeClass('hide');
24
		$evenements_options.each(function() {
24
		$evenements_options.each(function() {
25
			var $evenement_option = $(this);
25
			var $evenement_option = $(this);
26
			if($evenement_option.val() != 0) {
26
			if($evenement_option.val() != 0) {
27
				var stades_option = $evenement_option.data('evenements');
27
				var stades_option = $evenement_option.data('evenements');
28
				$evenement_option.toggleClass('hide', !tableauxOntAuMoinsUnElementEnCommun(evenements, stades_option));
28
				$evenement_option.toggleClass('hide', !tableauxOntAuMoinsUnElementEnCommun(evenements, stades_option));
29
			} else {
29
			} else {
30
				$evenement_option.removeClass('hide');
30
				$evenement_option.removeClass('hide');
31
			}
31
			}
32
		});
32
		});
33
	}
33
	}
34
 
34
 
35
	// mise sur le selecteur par défaut
35
	// mise sur le selecteur par défaut
36
	$('#selecteur_stade').val("0");
36
	$('#selecteur_stade').val("0");
37
}
37
}
38
 
38
 
39
function surChangementSelecteurStade(id_stade_selectionne) {
39
function surChangementSelecteurStade(id_stade_selectionne) {
40
	obtenirDonneesStadePhenologiques($('#selecteur_liste_especes').val(), id_stade_selectionne)
40
	obtenirDonneesStadePhenologiques($('#selecteur_liste_especes').val(), id_stade_selectionne)
41
}
41
}
42
 
42
 
43
function obtenirDonneesStadePhenologiques(id_espece, id_stades) {
43
function obtenirDonneesStadePhenologiques(id_espece, id_stades) {
44
	$.get(url_jrest+'OdsExport/ExportEvolutionPhenologiqueJson?espece='+id_espece+'&evenements='+id_stades, function(e) {
44
	$.get(url_jrest+'OdsExport/ExportEvolutionPhenologiqueJson?espece='+id_espece+'&evenements='+id_stades, function(e) {
-
 
45
    var donnees_dispos = !jQuery.isEmptyObject(e);
-
 
46
    if(donnees_dispos) {
45
		dessinerGraphiqueEvolutionStadesPhenologiques(e, id_stades);
47
      dessinerGraphiqueEvolutionStadesPhenologiques(e, id_stades);
-
 
48
    }
-
 
49
 
-
 
50
    $('.aucune-donnee').toggleClass('hide', donnees_dispos);
-
 
51
    $('.conteneur-graphique').toggleClass('hide', !donnees_dispos);
46
	});
52
	});
47
}
53
}
48
 
54
 
49
function renvoyerNomsEvenementLegendeGraphique(id_stades) {
55
function renvoyerNomsEvenementLegendeGraphique(id_stades) {
50
	var stades = id_stades.split(',');
56
	var stades = id_stades.split(',');
51
	var stades_legende = {};
57
	var stades_legende = {};
52
 
58
 
53
	if(stades.length == 2) {
59
	if(stades.length == 2) {
54
		var stade_debut = global_evenements[stades[0]];
60
		var stade_debut = global_evenements[stades[0]];
55
		var stade_fin = global_evenements[stades[1]];
61
		var stade_fin = global_evenements[stades[1]];
56
		var legende_debut = 'début '+(stade_debut.nom)+' (stade '+(stade_debut.code)+')';
62
		var legende_debut = 'début '+(stade_debut.nom)+' (stade '+(stade_debut.code)+')';
57
		var legende_fin = 'fin '+stade_fin.nom+' (stade '+stade_fin.code+')';
63
		var legende_fin = 'fin '+stade_fin.nom+' (stade '+stade_fin.code+')';
58
		stades_legende[stades[0]] = legende_debut;
64
		stades_legende[stades[0]] = legende_debut;
59
		stades_legende[stades[1]] = legende_fin;
65
		stades_legende[stades[1]] = legende_fin;
60
	} else {
66
	} else {
61
		var stade_unique = global_evenements[stades[0]];
67
		var stade_unique = global_evenements[stades[0]];
62
		stades_legende[stades[0]] = stade_unique.nom;
68
		stades_legende[stades[0]] = stade_unique.nom;
63
	}
69
	}
64
 
70
 
65
	return stades_legende;
71
	return stades_legende;
66
}
72
}
67
 
73
 
68
function dessinerGraphiqueEvolutionStadesPhenologiques(data, id_stades) {
74
function dessinerGraphiqueEvolutionStadesPhenologiques(data, id_stades) {
69
 
75
 
70
	var noms_evenements = renvoyerNomsEvenementLegendeGraphique(id_stades);
76
	var noms_evenements = renvoyerNomsEvenementLegendeGraphique(id_stades);
71
	var nb_evenements = 0;
77
	var nb_evenements = 0;
72
	var graph_data = new Array();
78
	var graph_data = new Array();
73
	for (var id_evenement in data) {
79
	for (var id_evenement in data) {
74
	    if (!data.hasOwnProperty(id_evenement)) continue;
80
	    if (!data.hasOwnProperty(id_evenement)) continue;
75
 
81
 
76
	    var data_evenement = data[id_evenement];
82
	    var data_evenement = data[id_evenement];
77
 
83
 
78
			graph_data.push({
84
			graph_data.push({
79
				type: "scatter",
85
				type: "scatter",
80
				mode: 'lines+markers',
86
				mode: 'lines+markers',
81
				name: noms_evenements[id_evenement],
87
				name: noms_evenements[id_evenement],
82
				x: data_evenement.x,
88
				x: data_evenement.x,
83
				y: data_evenement.y,
89
				y: data_evenement.y,
84
				text: data_evenement.text,
90
				text: data_evenement.text,
85
				hoverinfo: 'text'
91
				hoverinfo: 'text'
86
			});
92
			});
87
 
93
 
88
			nb_evenements++;
94
			nb_evenements++;
89
	}
95
	}
90
 
96
 
91
	var nom_espece_selectionnee =  obtenirNomEspeceSelectionnee();
97
	var nom_espece_selectionnee =  obtenirNomEspeceSelectionnee();
92
	var nom_stade_selectionne =  obtenirNomStadeSelectionne().toLowerCase();
98
	var nom_stade_selectionne =  obtenirNomStadeSelectionne().toLowerCase();
93
 
99
 
94
	var titre_graphique = 'Dates moyennes de ';
100
	var titre_graphique = 'Dates moyennes de ';
95
	if(nb_evenements > 1) {
101
	if(nb_evenements > 1) {
96
		titre_graphique += 'début et fin de ';
102
		titre_graphique += 'début et fin de ';
97
	}
103
	}
98
	titre_graphique += nom_stade_selectionne+' pour l\'espèce '+nom_espece_selectionnee;
104
	titre_graphique += nom_stade_selectionne+' pour l\'espèce '+nom_espece_selectionnee;
99
 
105
 
100
	var layout = {
106
	var layout = {
101
	  title: titre_graphique,
107
	  title: titre_graphique,
102
	  xaxis: {
108
	  xaxis: {
103
	    title: 'Années',
109
	    title: 'Années',
104
	    showgrid: false,
110
	    showgrid: false,
105
	    zeroline: false,
111
	    zeroline: false,
106
			tickvals: annees_observations,
112
			tickvals: annees_observations,
107
			ticktext: annees_observations,
113
			ticktext: annees_observations,
108
			autoticks: false,
114
			autoticks: false,
109
	  },
115
	  },
110
	  yaxis: {
116
	  yaxis: {
111
	    title: '',
117
	    title: '',
112
			autoticks: false,
118
			autoticks: false,
113
			tickvals: [1,2,3,4,5,6,7,8,9,10,11,12],
119
			tickvals: [1,2,3,4,5,6,7,8,9,10,11,12],
114
    	ticktext: ['janvier', 'fevrier', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'],
120
    	ticktext: ['janvier', 'fevrier', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'],
115
	  },
121
	  },
116
    // pour la légende apparaisse en bas du graphique afin de ne pas gâcher
122
    // pour la légende apparaisse en bas du graphique afin de ne pas gâcher
117
    // presque un tiers de l'espace de la page
123
    // presque un tiers de l'espace de la page
118
    legend:{
124
    legend:{
119
      xanchor:"center",
125
      xanchor:"center",
120
      yanchor:"top",
126
      yanchor:"top",
121
      y:-0.3,
127
      y:-0.3,
122
      x:0.5
128
      x:0.5
123
    }
129
    }
124
	};
130
	};
125
	var conteneur_graphique = document.getElementById('conteneur-graphique');
131
	var conteneur_graphique = document.getElementById('conteneur-graphique');
126
	Plotly.purge(conteneur_graphique);
132
	Plotly.purge(conteneur_graphique);
127
	var graphique = Plotly.plot(conteneur_graphique, graph_data, layout);
133
	var graphique = Plotly.plot(conteneur_graphique, graph_data, layout);
128
}
134
}
129
 
135
 
130
$(document).ready(function() {
136
$(document).ready(function() {
131
	$('#selecteur_liste_especes').change(function(e) {
137
	$('#selecteur_liste_especes').change(function(e) {
132
		var conteneur_graphique = document.getElementById('conteneur-graphique');
138
		var conteneur_graphique = document.getElementById('conteneur-graphique');
133
		Plotly.purge(conteneur_graphique);
139
		Plotly.purge(conteneur_graphique);
134
		surChangementSelecteurEspece($(this).val(), $(this).find(":selected").data('id-evenements'));
140
		surChangementSelecteurEspece($(this).val(), $(this).find(":selected").data('id-evenements'));
135
	});
141
	});
136
 
142
 
137
	$('#selecteur_stade').change(function(e) {
143
	$('#selecteur_stade').change(function(e) {
138
		var conteneur_graphique = document.getElementById('conteneur-graphique');
144
		var conteneur_graphique = document.getElementById('conteneur-graphique');
139
		Plotly.purge(conteneur_graphique);
145
		Plotly.purge(conteneur_graphique);
140
		if($(this).val() == "0") {
146
		if($(this).val() == "0") {
141
			return;
147
			return;
142
		}
148
		}
143
		surChangementSelecteurStade($(this).val());
149
		surChangementSelecteurStade($(this).val());
144
	});
150
	});
145
 
151
 
146
  if(espece_defaut != null && stades_defaut != 0) {
152
  if(espece_defaut != null && stades_defaut != 0) {
147
    obtenirDonneesStadePhenologiques(espece_defaut, stades_defaut);
153
    obtenirDonneesStadePhenologiques(espece_defaut, stades_defaut);
148
  }
154
  }
149
});
155
});