@@ -53,8 +53,7 @@ grunt.registerTask( "build-index", function() {
5353 function parseReleases ( files , regex ) {
5454 return files
5555 . map ( function ( filename ) {
56- var type ,
57- matches = regex . exec ( filename ) ;
56+ var matches = regex . exec ( filename ) ;
5857
5958 // matches[ 3 ] = "min" or "pack" or ""
6059 if ( ! matches || matches [ 3 ] ) {
@@ -74,17 +73,36 @@ grunt.registerTask( "build-index", function() {
7473 } ) ;
7574 }
7675
76+ function parseStableReleases ( ) {
77+ return parseReleases . apply ( null , arguments )
78+ . filter ( function ( release ) {
79+
80+ // Filter out non-stable releases via this semver trick.
81+ return semver . satisfies ( release . version , ">=0" )
82+ } )
83+ }
84+
85+ function groupByMajor ( releases ) {
86+ return _ ( releases )
87+ . groupBy ( function ( release ) {
88+ return semver . major ( release . version ) ;
89+ } )
90+ . map ( function ( group , key ) {
91+ return [ key , group ]
92+ } )
93+ . sortBy ( function ( group ) {
94+ return group [ 0 ] ;
95+ } )
96+ . reverse ( )
97+ . value ( )
98+ }
99+
77100 function getCoreData ( ) {
78101 var files = grunt . file . expand ( "cdn/*.js" ) ,
79- coreReleases = parseReleases ( files ,
102+ coreReleases = parseStableReleases ( files ,
80103 / ( j q u e r y - ( \d + \. \d + (?: \. \d + ) ? [ ^ . ] * ) (?: \. ( m i n | p a c k ) ) ? \. j s ) / ) ,
81- jquery2Releases = coreReleases . filter ( function ( match ) {
82- return semver . satisfies ( match . version , "2.x" ) ;
83- } ) ,
84- jquery1Releases = coreReleases . filter ( function ( match ) {
85- return semver . satisfies ( match . version , "1.x" ) ;
86- } ) ,
87- migrateReleases = parseReleases ( files ,
104+ coreReleasesGrouped = groupByMajor ( coreReleases ) ,
105+ migrateReleases = parseStableReleases ( files ,
88106 / ( j q u e r y - m i g r a t e - ( \d + \. \d + (?: \. \d + ) ? [ ^ . ] * ) (?: \. ( m i n ) ) ? \. j s ) / ) ;
89107
90108 function addTypes ( release ) {
@@ -99,24 +117,27 @@ grunt.registerTask( "build-index", function() {
99117 }
100118 }
101119
102- jquery1Releases . forEach ( addTypes ) ;
103- jquery2Releases . forEach ( addTypes ) ;
120+ coreReleasesGrouped . forEach ( function ( group ) {
121+ group [ 1 ] . forEach ( addTypes ) ;
122+ } ) ;
104123 migrateReleases . forEach ( addTypes ) ;
105124
106- return {
107- jquery2 : {
108- latestStable : getLatestStable ( jquery2Releases ) ,
109- all : jquery2Releases
110- } ,
111- jquery1 : {
112- latestStable : getLatestStable ( jquery1Releases ) ,
113- all : jquery1Releases
114- } ,
125+ var index = {
126+ jquery : [ ] ,
115127 migrate : {
116128 latestStable : getLatestStable ( migrateReleases ) ,
117129 all : migrateReleases
118130 }
119131 } ;
132+
133+ coreReleasesGrouped . forEach ( function ( group ) {
134+ index . jquery . push ( [ group [ 0 ] , {
135+ latestStable : getLatestStable ( group [ 1 ] ) ,
136+ all : group [ 1 ]
137+ } ] ) ;
138+ } ) ;
139+
140+ return index ;
120141 }
121142
122143 function getUiData ( ) {
@@ -213,7 +234,7 @@ grunt.registerTask( "build-index", function() {
213234
214235 function getColorData ( ) {
215236 var files = grunt . file . expand ( "cdn/color/*.js" ) ,
216- releases = parseReleases ( files ,
237+ releases = parseStableReleases ( files ,
217238 / ( c o l o r \/ j q u e r y .c o l o r - ( \d + \. \d + (?: \. \d + ) ? [ ^ . ] * ) (?: \. ( m i n ) ) ? \. j s ) / ) ,
218239 modes = [ "svg-names" , "plus-names" ] ;
219240
@@ -244,7 +265,7 @@ grunt.registerTask( "build-index", function() {
244265
245266 function getQunitData ( ) {
246267 var files = grunt . file . expand ( "cdn/qunit/*.js" ) ,
247- releases = parseReleases ( files ,
268+ releases = parseStableReleases ( files ,
248269 / ( q u n i t \/ q u n i t - ( \d + \. \d + \. \d + [ ^ . ] * ) (?: \. ( m i n ) ) ? \. j s ) / ) ;
249270
250271 releases . forEach ( function ( release ) {
0 commit comments