Commit 3c2b15fcd9c20481fbdd814f07104807266c6eb7
1 parent
ff4f2af5
Exists in
master
and in
2 other branches
Make the Y-Axis of time series dynamic
Showing
4 changed files
with
54 additions
and
23 deletions
Show diff stats
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> | ... | ... |