@@ -33,20 +33,19 @@ issueList.DropdownView = Backbone.View.extend({
33
33
} ,
34
34
selectDropdownOption : function ( e ) {
35
35
var option = $ ( e . target ) ;
36
- var paramKey = option . data ( 'paramKey' ) ;
37
- var paramValue = option . data ( 'paramValue' ) ;
36
+ var params = option . data ( 'params' ) ;
38
37
option . addClass ( 'is-active' )
39
38
. siblings ( ) . removeClass ( 'is-active' ) ;
40
39
41
40
this . updateDropdownTitle ( option ) ;
42
41
43
42
// persist value of selection to be used on subsequent page loads
44
43
if ( 'localStorage' in window ) {
45
- window . localStorage . setItem ( paramKey , paramValue ) ;
44
+ window . localStorage . setItem ( "params" , params ) ;
46
45
}
47
46
48
47
// fire an event so other views can react to dropdown changes
49
- wcEvents . trigger ( 'dropdown:change' , paramKey , paramValue ) ;
48
+ wcEvents . trigger ( 'dropdown:change' , params ) ;
50
49
e . preventDefault ( ) ;
51
50
} ,
52
51
updateDropdownTitle : function ( optionElm ) {
@@ -203,20 +202,21 @@ issueList.SortingView = Backbone.View.extend({
203
202
// TODO(miket): persist selected page limit to survive page loads
204
203
dropdownTitle : 'Show 50' ,
205
204
dropdownOptions : [
206
- { title : 'Show 25' , paramKey : 'per_page' , paramValue : ' 25'} ,
207
- { title : 'Show 50' , paramKey : 'per_page' , paramValue : ' 50'} ,
208
- { title : 'Show 100' , paramKey : 'per_page' , paramValue : ' 100'}
205
+ { title : 'Show 25' , params : 'per_page= 25' } ,
206
+ { title : 'Show 50' , params : 'per_page= 50' } ,
207
+ { title : 'Show 100' , params : 'per_page= 100' }
209
208
]
210
209
} ) ;
211
210
212
- // TODO(miket): update model to have paramKey and paramValue
213
211
this . sortModel = new Backbone . Model ( {
214
212
dropdownTitle : 'Newest' ,
215
213
dropdownOptions : [
216
- { title : 'Newest' , params : '' } ,
217
- { title : 'Oldest' , params : '' } ,
218
- { title : 'Most Commented' , params : '' } ,
219
- { title : 'etc.' , params : '' }
214
+ { title : 'Newest' , params : 'sort=created&direction=desc' } ,
215
+ { title : 'Oldest' , params : 'sort=created&direction=asc' } ,
216
+ { title : 'Most Commented' , params : 'sort=comments&direction=desc' } ,
217
+ { title : 'Least Commented' , params : 'sort=comments&direction=asc' } ,
218
+ { title : 'Recently Updated' , params : 'sort=updated&direction=desc' } ,
219
+ { title : 'Least Recently Updated' , params : 'sort=updated&direction=asc' }
220
220
]
221
221
} ) ;
222
222
@@ -226,17 +226,15 @@ issueList.SortingView = Backbone.View.extend({
226
226
this . paginationDropdown = new issueList . DropdownView ( {
227
227
model : this . paginationModel
228
228
} ) ;
229
- /* Commenting out for now, see Issues #312, #266
230
229
this . sortDropdown = new issueList . DropdownView ( {
231
230
model : this . sortModel
232
- }); */
231
+ } ) ;
233
232
} ,
234
233
template : _ . template ( $ ( '#issuelist-sorting-tmpl' ) . html ( ) ) ,
235
234
render : function ( ) {
236
235
this . $el . html ( this . template ( ) ) ;
237
236
this . paginationDropdown . setElement ( this . $el . find ( '.js-dropdown-pagination' ) ) . render ( ) ;
238
- /* Commenting out for now, see Issues #312, #266
239
- this.sortDropdown.setElement(this.$el.find('.js-dropdown-sort')).render(); */
237
+ this . sortDropdown . setElement ( this . $el . find ( '.js-dropdown-sort' ) ) . render ( ) ;
240
238
return this ;
241
239
}
242
240
} ) ;
@@ -406,37 +404,34 @@ issueList.IssueView = Backbone.View.extend({
406
404
}
407
405
this . fetchAndRenderIssues ( ) ;
408
406
} ,
409
- updateModelParams : function ( paramKey , paramValue ) {
407
+ updateModelParams : function ( params ) {
410
408
var decomposeUrl = function ( url ) {
411
409
var _url = url . split ( '?' ) ;
412
410
return { path : _url [ 0 ] , params : _url [ 1 ] } ;
413
411
} ;
414
- var linkUrl ;
412
+
415
413
var newParams ;
416
414
var modelUrl = decomposeUrl ( this . issues . url ) ;
417
- var parsedModelParams = $ . deparam ( modelUrl . params ) ;
418
-
415
+ var paramsArray = params . split ( '&' ) ;
419
416
var updateParams = { } ;
420
- updateParams [ paramKey ] = paramValue ;
421
-
422
- // do we have a ?link param in the model URL from traversing pagination?
423
- if ( parsedModelParams . hasOwnProperty ( 'link' ) ) {
424
- // if so, decompose link param url, merge updated params, and recompose
425
- linkUrl = decomposeUrl ( parsedModelParams . link ) ;
426
- newParams = $ . extend ( $ . deparam ( linkUrl . params ) , updateParams ) ;
427
- this . issues . url = modelUrl . path + '?link=' + encodeURIComponent ( linkUrl . path + '?' + $ . param ( newParams ) ) ;
428
- this . fetchAndRenderIssues ( ) ;
429
- return ;
430
- }
417
+
418
+ // paramsArray is an array of param 'key=value' string pairs,
419
+ // iterate over them in case there are multiple pairs
420
+ _ . forEach ( paramsArray , function ( param ) {
421
+ var kvArray = param . split ( '=' ) ;
422
+ var key = kvArray [ 0 ] ;
423
+ var value = kvArray [ 1 ] ;
424
+ updateParams [ key ] = value ;
425
+
426
+ if ( key === 'per_page' ) {
427
+ this . _pageLimit = value ;
428
+ }
429
+ } ) ;
431
430
432
431
// merge old params with passed in param data
433
432
// $.extend will update existing object keys, and add new ones
434
433
newParams = $ . extend ( $ . deparam ( modelUrl . params ) , updateParams ) ;
435
434
436
- if ( paramKey === 'per_page' ) {
437
- this . _pageLimit = paramValue ;
438
- }
439
-
440
435
// construct new model URL and re-request issues
441
436
this . issues . url = modelUrl . path + '?' + $ . param ( newParams ) ;
442
437
this . fetchAndRenderIssues ( ) ;
0 commit comments