@@ -9,7 +9,10 @@ const { computed } = Ember;
9
9
export default Ember . Controller . extend ( {
10
10
isDownloading : false ,
11
11
12
- fetchingDownloads : true ,
12
+ extraDownloads : Ember . computed ( 'downloads.meta.extra_downloads' , function ( ) {
13
+ return this . get ( 'downloads.meta.extra_downloads' ) || [ ] ;
14
+ } ) ,
15
+
13
16
fetchingFollowing : true ,
14
17
following : false ,
15
18
currentVersion : computed . alias ( 'model' ) ,
@@ -112,104 +115,65 @@ export default Ember.Controller.extend({
112
115
url
113
116
} ) . finally ( ( ) => this . set ( 'fetchingFollowing' , false ) ) ;
114
117
} ,
118
+ } ,
115
119
116
- renderChart ( model , downloads , extra ) {
117
- var dates = { } ;
118
- var versions = [ ] ;
119
- for ( var i = 0 ; i < 90 ; i ++ ) {
120
- var now = moment ( ) . subtract ( i , 'days' ) ;
121
- dates [ now . format ( 'MMM D' ) ] = { date : now , cnt : { } } ;
122
- }
120
+ downloadData : Ember . computed ( 'downloads' , 'extraDownloads' , function ( ) {
121
+ let { downloads, extraDownloads : extra } = this . getProperties ( 'downloads' , 'extraDownloads' ) ;
122
+ if ( ! downloads || ! extra ) {
123
+ return ;
124
+ }
123
125
124
- downloads . forEach ( ( d ) => {
125
- var version_id = d . get ( 'version.id' ) ;
126
- var key = moment ( d . get ( 'date' ) ) . utc ( ) . format ( 'MMM D' ) ;
127
- if ( dates [ key ] ) {
128
- var prev = dates [ key ] . cnt [ version_id ] || 0 ;
129
- dates [ key ] . cnt [ version_id ] = prev + d . get ( 'downloads' ) ;
130
- }
131
- } ) ;
126
+ var dates = { } ;
127
+ var versions = [ ] ;
128
+ for ( var i = 0 ; i < 90 ; i ++ ) {
129
+ var now = moment ( ) . subtract ( i , 'days' ) ;
130
+ dates [ now . format ( 'MMM D' ) ] = { date : now , cnt : { } } ;
131
+ }
132
132
133
- extra . forEach ( ( d ) => {
134
- var key = moment ( d . date ) . utc ( ) . format ( 'MMM D' ) ;
135
- if ( dates [ key ] ) {
136
- var prev = dates [ key ] . cnt [ null ] || 0 ;
137
- dates [ key ] . cnt [ null ] = prev + d . downloads ;
138
- }
139
- } ) ;
140
- if ( this . get ( 'requestedVersion' ) ) {
141
- versions . push ( {
142
- id : model . get ( 'id' ) ,
143
- num : model . get ( 'num' ) ,
144
- } ) ;
145
- } else {
146
- var tmp = this . get ( 'smallSortedVersions' ) ;
147
- for ( i = 0 ; i < tmp . length ; i ++ ) {
148
- versions . push ( {
149
- id : tmp [ i ] . get ( 'id' ) ,
150
- num : tmp [ i ] . get ( 'num' )
151
- } ) ;
152
- }
153
- }
154
- if ( extra . length > 0 ) {
155
- versions . push ( {
156
- id : null ,
157
- num : 'Other'
158
- } ) ;
133
+ downloads . forEach ( ( d ) => {
134
+ var version_id = d . get ( 'version.id' ) ;
135
+ var key = moment ( d . get ( 'date' ) ) . utc ( ) . format ( 'MMM D' ) ;
136
+ if ( dates [ key ] ) {
137
+ var prev = dates [ key ] . cnt [ version_id ] || 0 ;
138
+ dates [ key ] . cnt [ version_id ] = prev + d . get ( 'downloads' ) ;
159
139
}
140
+ } ) ;
160
141
161
- var headers = [ 'Date' ] ;
162
- versions . sort ( ( b ) => b . num ) . reverse ( ) ;
163
- for ( i = 0 ; i < versions . length ; i ++ ) {
164
- headers . push ( versions [ i ] . num ) ;
142
+ extra . forEach ( ( d ) => {
143
+ var key = moment ( d . date ) . utc ( ) . format ( 'MMM D' ) ;
144
+ if ( dates [ key ] ) {
145
+ var prev = dates [ key ] . cnt [ null ] || 0 ;
146
+ dates [ key ] . cnt [ null ] = prev + d . downloads ;
165
147
}
166
- var data = [ headers ] ;
167
- for ( var date in dates ) {
168
- var row = [ dates [ date ] . date . toDate ( ) ] ;
169
- for ( i = 0 ; i < versions . length ; i ++ ) {
170
- row . push ( dates [ date ] . cnt [ versions [ i ] . id ] || 0 ) ;
171
- }
172
- data . push ( row ) ;
173
- }
174
-
175
- // TODO: move this to a component
176
- function drawChart ( ) {
177
- if ( ! window . google || ! window . googleChartsLoaded ) {
178
- Ember . $ ( '.graph' ) . hide ( ) ;
179
- return ;
180
- } else {
181
- Ember . $ ( '.graph' ) . show ( ) ;
182
- }
183
- var myData = window . google . visualization . arrayToDataTable ( data ) ;
148
+ } ) ;
149
+ if ( this . get ( 'requestedVersion' ) ) {
150
+ versions . push ( this . get ( 'model' ) . getProperties ( 'id' , 'num' ) ) ;
151
+ } else {
152
+ this . get ( 'smallSortedVersions' ) . forEach ( version => {
153
+ versions . push ( version . getProperties ( 'id' , 'num' ) ) ;
154
+ } ) ;
155
+ }
156
+ if ( extra . length > 0 ) {
157
+ versions . push ( {
158
+ id : null ,
159
+ num : 'Other'
160
+ } ) ;
161
+ }
184
162
185
- var fmt = new window . google . visualization . DateFormat ( {
186
- pattern : 'LLL d, yyyy' ,
187
- } ) ;
188
- fmt . format ( myData , 0 ) ;
189
- var el = document . getElementById ( 'graph-data' ) ;
190
- if ( ! el ) {
191
- return ;
192
- }
193
- var chart = new window . google . visualization . AreaChart ( el ) ;
194
- chart . draw ( myData , {
195
- chartArea : { 'left' : 85 , 'width' : '77%' , 'height' : '80%' } ,
196
- hAxis : {
197
- minorGridlines : { count : 8 } ,
198
- } ,
199
- vAxis : {
200
- minorGridlines : { count : 5 } ,
201
- viewWindow : { min : 0 , } ,
202
- } ,
203
- isStacked : true ,
204
- focusTarget : 'category' ,
205
- } ) ;
163
+ var headers = [ 'Date' ] ;
164
+ versions . sort ( ( b ) => b . num ) . reverse ( ) ;
165
+ for ( i = 0 ; i < versions . length ; i ++ ) {
166
+ headers . push ( versions [ i ] . num ) ;
167
+ }
168
+ var data = [ headers ] ;
169
+ for ( var date in dates ) {
170
+ var row = [ dates [ date ] . date . toDate ( ) ] ;
171
+ for ( i = 0 ; i < versions . length ; i ++ ) {
172
+ row . push ( dates [ date ] . cnt [ versions [ i ] . id ] || 0 ) ;
206
173
}
174
+ data . push ( row ) ;
175
+ }
207
176
208
- Ember . run . scheduleOnce ( 'afterRender' , this , drawChart ) ;
209
- Ember . $ ( window ) . off ( 'resize.chart' ) ;
210
- Ember . $ ( window ) . on ( 'resize.chart' , drawChart ) ;
211
- Ember . $ ( document ) . off ( 'googleChartsLoaded' ) ;
212
- Ember . $ ( document ) . on ( 'googleChartsLoaded' , drawChart ) ;
213
- } ,
214
- } ,
177
+ return data ;
178
+ } ) ,
215
179
} ) ;
0 commit comments