Subversion Repositories Sites.obs-saisons.fr

Rev

Rev 331 | Rev 335 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
330 aurelien 1
function capitaliserPremiereLettre(string) {
2
    return string.charAt(0).toUpperCase() + string.slice(1);
3
}
4
 
5
function obtenirNomEspeceSelectionnee() {
6
	return $('#selecteur_liste_especes option:selected').text();
7
}
8
 
9
function obtenirAnneeSelectionnee() {
10
	return $('#selecteur_annees option:selected').text();
11
}
12
 
13
function obtenirDonneesPhasesPhenologiques(id_espece, annee) {
14
	$.get(url_jrest+'OdsExport/ExportPhasesPhenologiquesJson?espece='+id_espece+'&annee='+annee, function(e) {
15
		dessinerGraphiquePhasesPhenologiques(e, annee);
16
	});
17
}
18
 
19
 
20
var legende_points = {};
21
var legende_points_index = {};
22
function dessinerGraphiquePhasesPhenologiques(data, annee) {
23
 
24
  var traces = new Array();
25
  for (var id_evenement in data) {
26
	    if (!data.hasOwnProperty(id_evenement)) continue;
27
      var data_evenement = data[id_evenement];
28
      traces.push({
29
        x: data_evenement.x,
30
        type: 'box',
31
        name: capitaliserPremiereLettre(id_evenement),
32
      });
33
 
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) {
36
        return parseFloat(x.replace("'", ''));
37
      });
38
  }
39
 
333 aurelien 40
  var titre = 'Espèce '+obtenirNomEspeceSelectionnee();
331 aurelien 41
  if(annee == "0") {
42
    titre += '<br /> Toutes les années';
43
  } else {
44
    titre += '<br /> Année '+obtenirAnneeSelectionnee();
45
  }
46
 
47
 
330 aurelien 48
  var layout = {
331 aurelien 49
    title: titre,
330 aurelien 50
    xaxis: {
51
	    title: '',
52
      autorange: true,
53
			autoticks: false,
54
      hoverformat: '.7f',
55
			tickvals: [1,2,3,4,5,6,7,8,9,10,11,12],
56
    	ticktext: ['janvier', 'fevrier', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'],
333 aurelien 57
	  },
58
    // pour la légende apparaisse en bas du graphique afin de ne pas gâcher
59
    // presque un tiers de l'espace de la page
60
    legend:{
61
      xanchor:"center",
62
      yanchor:"top",
63
      y:-0.3,
64
      x:0.5
65
    }
330 aurelien 66
  };
67
 
68
  Plotly.newPlot('conteneur-graphique', traces, layout);
69
  var graphique = document.getElementById('conteneur-graphique');
70
 
71
  graphique.on('plotly_hover', function(data) {
72
    modifierAffichageToolTips(data);
73
  });
74
 
75
}
76
 
77
function modifierAffichageToolTips(data) {
78
  var axeY = data.points[0].y;
79
  $('text.nums, text.name').css('visibility', 'hidden');
80
  $('text.nums, text.name').css('width', 0);
81
  $('text.nums').each(function() {
333 aurelien 82
 
83
    // certains label contiennent du texte qui ne doit pas être changé
84
    // par exemple si un point tombe pile sur un début de mois
85
    // le nom du mois doit rester affiché
86
    if(isNaN($(this).data('unformatted'))) {
87
      $(this).css('visibility', 'visible');
88
      $(this).css('width', '100%');
89
      return true;
90
    }
91
 
92
    var $label_axe_y = $(this).parent().find(":contains("+axeY+")");
93
    if($label_axe_y.length != 0) {
94
      $label_axe_y.css('z-index', -99999);
95
      $label_axe_y.hide();
96
    }
330 aurelien 97
    var $text_hover_clone = creerCopieTooltip($(this), axeY);
98
    $(this).parent().append($text_hover_clone);
99
  });
100
}
101
 
102
function renvoyerDatePourIndexNumerique(index_valeur, index_evenement_legende) {
103
  // des fois le graphique fait des arrondis de valeurs dont on ne peut plus relier
104
  // la valeur du graphique a sa date, dans ce cas là on prend la plus proche du tableau
105
  var index_valeur_formate = parseFloat(index_valeur).toFixed(7);
106
  var text_hover = legende_points[index_evenement_legende]["'"+index_valeur_formate+"'"];
107
  if(typeof text_hover == "undefined") {
108
    index_valeur_f = parseFloat(index_valeur);
109
    index_valeur = legende_points_index[index_evenement_legende].reduce(function(prev, curr) {
110
      return (Math.abs(curr - index_valeur_f) < Math.abs(prev - index_valeur_f) ? curr : prev);
111
    });
112
    text_hover = legende_points[index_evenement_legende]["'"+index_valeur+"'"];
113
  }
114
 
115
  return text_hover;
116
}
117
 
118
function creerCopieTooltip($original, index_evenement_legende) {
119
  var $clone = $original.clone(true);
120
  var text_hover = renvoyerDatePourIndexNumerique($original.data('unformatted'), index_evenement_legende)
121
 
122
  $clone.html(text_hover);
123
  $clone.data('unformatted', text_hover);
124
  $clone.attr('data-unformatted', text_hover);
125
  $clone.css('visibility', 'visible');
126
  $clone.css('width', '100%');
127
  $clone.css('font-size', '11px');
128
 
129
  return $clone;
130
}
131
 
132
$(document).ready(function() {
133
 
134
  $('#selecteur_liste_especes').change(function(e) {
135
    var conteneur_graphique = document.getElementById('conteneur-graphique');
136
    Plotly.purge(conteneur_graphique);
331 aurelien 137
    obtenirDonneesPhasesPhenologiques($(this).val(), $('#selecteur_annees').val());
330 aurelien 138
  });
139
 
140
  $('#selecteur_annees').change(function(e) {
141
    var conteneur_graphique = document.getElementById('conteneur-graphique');
142
    Plotly.purge(conteneur_graphique);
143
 
144
    if($('#selecteur_liste_especes').val() != "0") {
145
      obtenirDonneesPhasesPhenologiques($('#selecteur_liste_especes').val(), $(this).val());
146
    }
147
  });
331 aurelien 148
 
333 aurelien 149
  if(espece_defaut != null) {
150
    obtenirDonneesPhasesPhenologiques(espece_defaut, annee_defaut);
151
  }
152
 
330 aurelien 153
});