Commit 3c2b15fcd9c20481fbdd814f07104807266c6eb7

Authored by Goutte
1 parent ff4f2af5

Make the Y-Axis of time series dynamic

CHANGELOG.md
1 1 ## Nicolas
2 2  
3 3 - [ ] séries temporelles en échelle log ou linéaire
4   -- [ ] permettre à l'utilisateur de choisir inner heliosphere (jusqu'à mars) ou outer heliosphere (jusqu'à saturne) pour la visualisation des éphémérides planétaires
  4 + /!\ D3 ne supporte pes les échelles log pour un domaine qui contient le 0.
5 5 - [ ] rajouter MAVEN, New Horizons, Cassini, Galileo, ExoMars comme spacecraft cible
6 6 - [ ] prévoir la possibilité à l'utilisateur d'afficher le temps en Day Of Year
7 7 - [ ] modifier le bandeau vertical d'affichage des choix utilisateurs pour qu'il soit plus petit (en particulier les champs paramètres)
... ... @@ -12,6 +12,7 @@
12 12 * submit (envoyé ensuite vers un webservice d'AMDA à construire)
13 13 - [ ] prévoir un bouton EPN-TAP ou l'on mettrait l'outil en relation avec le client VESPA développé par nathanaël
14 14 - [ ] juno/rosetta doivent aussi bouger le long de leur orbite lorsque l'on parcourt à la souris les données de la série temporelle; pour les intervalles de temps où rosetta n'existe plus (crash à la surface de la comète) il faut qu'elle disparaisse; pour les intervalles de temps où juno est en orbite autour de jupiter il faut que juno suive jupiter
  15 + -> tout ceci est configurable dans le fichier de configuration, je n'ai pas les ids !
15 16  
16 17  
17 18 ## Future ?
... ... @@ -32,6 +33,7 @@
32 33 ## 1.0.0-rc7
33 34  
34 35 - [ ] Give the future data another color
  36 +- [x] Add buttons to the orbits plot zoom to inner or outer heliosphere
35 37 - [x] Make the Y-Axis of time series dynamic (at the expense of animations)
36 38  
37 39  
... ...
web/static/js/swapp.js
... ... @@ -36,7 +36,7 @@
36 36 this.configuration['parameters'].forEach(function(p){
37 37 return this$.parameters[p['id']] = p;
38 38 });
39   - this.orbiter = null;
  39 + this.orbits = null;
40 40 this.time_series = [];
41 41 }
42 42 SpaceWeather.prototype.init = function(){
... ... @@ -830,24 +830,25 @@
830 830 Orbits.prototype.clear = function(){
831 831 return $(this.svg.node()).remove();
832 832 };
833   - Orbits.prototype.resize = function(animate){
834   - var width, height, extremum, s, o, slug, ref$, config, t, t1, this$ = this;
  833 + Orbits.prototype.resize = function(animate, extremum){
  834 + var width, height, s, o, slug, ref$, config, t, t1;
835 835 animate == null && (animate = false);
  836 + extremum == null && (extremum = null);
836 837 width = Math.ceil($(this.container).width() - this.margin.left - this.margin.right);
837 838 height = Math.ceil(1.0 * width);
838 839 console.debug("Resizing orbits : " + width + " × " + height + "…");
839   - extremum = 1.1 * d3.max((function(){
840   - var ref$, results$ = [];
841   - for (s in ref$ = this.orbiters) {
842   - o = ref$[s];
843   - if (!o.hidden) {
844   - results$.push(s);
  840 + if (extremum === null) {
  841 + extremum = 1.1 * d3.max((function(){
  842 + var ref$, results$ = [];
  843 + for (s in ref$ = this.orbiters) {
  844 + o = ref$[s];
  845 + if (!o.hidden) {
  846 + results$.push(this.orbitersExtrema[s]);
  847 + }
845 848 }
846   - }
847   - return results$;
848   - }.call(this)), function(d){
849   - return this$.orbitersExtrema[d];
850   - });
  849 + return results$;
  850 + }.call(this)));
  851 + }
851 852 this.xScale = d3.scaleLinear().domain([-1 * extremum, extremum]);
852 853 this.yScale = d3.scaleLinear().domain([extremum, -1 * extremum]);
853 854 this.xScale.range([0, width]);
... ... @@ -904,6 +905,9 @@
904 905 this.repositionOrbiter(slug, null, true);
905 906 return this;
906 907 };
  908 + Orbits.prototype.zoomToTarget = function(slug){
  909 + return this.resize(true, 1.1 * this.orbitersExtrema[slug]);
  910 + };
907 911 Orbits.prototype.repositionOrbiter = function(slug, datum, animate){
908 912 var data, el, t;
909 913 animate == null && (animate = false);
... ...
web/static/js/swapp.ls
... ... @@ -63,8 +63,8 @@ https://gitlab.irap.omp.eu/CDPP/SPACEWEATHERONLINE
63 63 @configuration['parameters'].forEach (p) ~>
64 64 @parameters[p['id']] = p
65 65  
66   - @orbiter = null # our Orbiter defined below
67   - @time_series = [] # a List of TimeSeries objects
  66 + @orbits = null # an Orbiter instance (defined below)
  67 + @time_series = [] # a List of TimeSeries instances
68 68  
69 69 init: ->
70 70 """
... ... @@ -237,8 +237,6 @@ https://gitlab.irap.omp.eu/CDPP/SPACEWEATHERONLINE
237 237 handleTarget(i+1)
238 238 )
239 239 handleTarget(0)
240   -
241   -
242 240 this
243 241  
244 242 clearPlots: ->
... ... @@ -784,15 +782,19 @@ export class Orbits
784 782 clear: ->
785 783 $(@svg.node()).remove()
786 784  
787   - resize: (animate = false) ->
  785 + resize: (animate = false, extremum = null) ->
788 786 width = Math.ceil($(@container).width() - @margin.left - @margin.right)
789 787 height = Math.ceil(1.0 * width)
790 788  
791 789 console.debug("Resizing orbits : #{width} × #{height}…")
792 790  
793   - extremum = 1.1 * d3.max([s for s, o of @orbiters when not o.hidden], (d) ~>
794   - @orbitersExtrema[d]
795   - )
  791 + if extremum == null
  792 + extremum = 1.1 * d3.max(
  793 + [@orbitersExtrema[s] for s, o of @orbiters when not o.hidden]
  794 + )
  795 +# extremum = 1.1 * d3.max([s for s, o of @orbiters when not o.hidden], (d) ~>
  796 +# @orbitersExtrema[d]
  797 +# )
796 798 @xScale = d3.scaleLinear().domain([-1 * extremum, extremum])
797 799 @yScale = d3.scaleLinear().domain([extremum, -1 * extremum])
798 800  
... ... @@ -861,6 +863,9 @@ export class Orbits
861 863  
862 864 this
863 865  
  866 + zoomToTarget: (slug) ->
  867 + @resize(true, 1.1 * @orbitersExtrema[slug])
  868 +
864 869 repositionOrbiter: (slug, datum, animate = false) ->
865 870 data = @data[slug]
866 871 if not data.length then return
... ...
web/view/home.html.jinja2
... ... @@ -133,6 +133,16 @@
133 133 <div class="mdl-cell mdl-cell--4-col mdl-cell--8-col-tablet mdl-cell--4-col-phone">
134 134 <section id="orbits"></section>
135 135 <div class="plots-actions plots-buttons">
  136 + <button id="zoom_inner_heliosphere" class="mdl-button mdl-button--raised mdl-button--primary"
  137 + title="Zoom to the inner heliosphere.">
  138 + Zoom in
  139 + </button>
  140 + <button id="zoom_outer_heliosphere" class="mdl-button mdl-button--raised mdl-button--primary"
  141 + title="Zoom to the outer heliosphere.">
  142 + Zoom out
  143 + </button>
  144 + </div>
  145 + <div class="plots-actions plots-buttons">
136 146 <button id="download" class="mdl-button mdl-button--raised mdl-button--primary"
137 147 title="Download the raw data for each selected target and parameters.">
138 148 Download
... ... @@ -662,6 +672,16 @@ jQuery().ready(function($){
662 672 });
663 673 return false;
664 674 });
  675 + $('#zoom_inner_heliosphere').on("click", function(e){
  676 + console.info("Zooming to inner heliosphere…");
  677 + sw.orbits.zoomToTarget('mars');
  678 + return false;
  679 + });
  680 + $('#zoom_outer_heliosphere').on("click", function(e){
  681 + console.info("Zooming to outer heliosphere…");
  682 + sw.orbits.resize(true);
  683 + return false;
  684 + });
665 685  
666 686 });
667 687 </script>
... ...