@@ -51,101 +51,161 @@ grunt.registerTask( "build-wordpress", "check-modules clean lint build" );
51
51
52
52
grunt . registerTask ( "build-index" , function ( ) {
53
53
var rversion = / ^ ( \d + ) \. ( \d + ) (?: \. ( \d + ) ) ? - ? ( .* ) $ / ;
54
- function getVersion ( version ) {
54
+ function normalizeVersion ( version ) {
55
55
var match = rversion . exec ( version ) ;
56
56
57
57
return match [ 1 ] + "." + match [ 2 ] + "." + ( match [ 3 ] || 0 ) +
58
58
( match [ 4 ] ? "-" + match [ 4 ] : "" ) ;
59
59
}
60
60
61
- function organize ( files ) {
62
- var result = { } ;
63
-
64
- files . forEach ( function ( file ) {
65
- var version = result [ file . version ] || ( result [ file . version ] = { } ) ;
66
- version [ file . typePretty ] = file ;
61
+ function getLatestStable ( releases ) {
62
+ return _ . find ( releases , function ( release ) {
63
+ return release . version . indexOf ( "-" ) === - 1 ;
67
64
} ) ;
68
-
69
- return result ;
70
65
}
71
66
72
- var prettyTypes = {
73
- "" : "uncompressed" ,
74
- "min" : "minified" ,
75
- "pack" : "packed"
76
- } ;
77
- function parseFiles ( files , regex ) {
67
+ function parseReleases ( files , regex ) {
78
68
return files
79
69
. map ( function ( filename ) {
80
70
var type ,
81
71
matches = regex . exec ( filename ) ;
82
72
83
- if ( ! matches ) {
73
+ // matches[ 3 ] = "min" or "pack" or ""
74
+ if ( ! matches || matches [ 3 ] ) {
84
75
return null ;
85
76
}
86
77
87
- type = matches [ 3 ] || "" ;
88
78
return {
89
79
filename : matches [ 0 ] ,
90
- version : getVersion ( matches [ 2 ] ) ,
91
- type : type ,
92
- typePretty : prettyTypes [ type ]
80
+ version : normalizeVersion ( matches [ 2 ] )
93
81
} ;
94
82
} )
95
83
// Remove null values from filtering
96
84
. filter ( _ . identity )
97
85
. sort ( function ( a , b ) {
98
- return semver . compare ( b . version , a . version ) || ( a . type < b . type ? - 1 : 1 ) ;
86
+ return semver . compare ( b . version , a . version ) ;
99
87
} ) ;
100
88
}
101
89
102
- function getLatestStable ( organized ) {
103
- return _ . find ( Object . keys ( organized ) , function ( version ) {
104
- return version . indexOf ( "-" ) === - 1 ;
105
- } ) ;
106
- }
90
+ function getCoreData ( ) {
91
+ var files = grunt . file . expandFiles ( "cdn/*.js" ) ,
92
+ coreReleases = parseReleases ( files ,
93
+ / ( j q u e r y - ( \d + \. \d + (?: \. \d + ) ? [ ^ . ] * ) (?: \. ( m i n | p a c k ) ) ? \. j s ) / ) ,
94
+ jquery2Releases = coreReleases . filter ( function ( match ) {
95
+ return semver . satisfies ( match . version , "2.x" ) ;
96
+ } ) ,
97
+ jquery1Releases = coreReleases . filter ( function ( match ) {
98
+ return semver . satisfies ( match . version , "1.x" ) ;
99
+ } ) ,
100
+ migrateReleases = parseReleases ( files ,
101
+ / ( j q u e r y - m i g r a t e - ( \d + \. \d + (?: \. \d + ) ? [ ^ . ] * ) (?: \. ( m i n ) ) ? \. j s ) / ) ;
102
+
103
+ function addTypes ( release ) {
104
+ var minFilename = release . filename . replace ( ".js" , ".min.js" ) ,
105
+ packFilename = release . filename . replace ( ".js" , ".pack.js" ) ;
106
+
107
+ if ( files . indexOf ( "cdn/" + minFilename ) !== - 1 ) {
108
+ release . minified = minFilename ;
109
+ }
110
+ if ( files . indexOf ( "cdn/" + packFilename ) !== - 1 ) {
111
+ release . packed = packFilename ;
112
+ }
113
+ }
114
+
115
+ jquery1Releases . forEach ( addTypes ) ;
116
+ jquery2Releases . forEach ( addTypes ) ;
117
+ migrateReleases . forEach ( addTypes ) ;
107
118
108
- var allFiles = grunt . file . expandFiles ( "cdn/**.js" ) ,
109
- jQueryCoreFiles = parseFiles ( allFiles ,
110
- / ( j q u e r y - ( \d + \. \d + (?: \. \d + ) ? [ ^ . ] * ) (?: \. ( m i n | p a c k ) ) ? \. j s ) / ) ,
111
- jQueryMigrateFiles = parseFiles ( allFiles ,
112
- / ( j q u e r y - m i g r a t e - ( \d + \. \d + (?: \. \d + ) ? [ ^ . ] * ) (?: \. m i n ) ? \. j s ) / ) ,
113
- jQuery2 = organize ( jQueryCoreFiles . filter ( function ( match ) {
114
- return semver . satisfies ( match . version , "2.x" ) ;
115
- } ) ) ,
116
- jQuery1 = organize ( jQueryCoreFiles . filter ( function ( match ) {
117
- return semver . satisfies ( match . version , "1.x" ) ;
118
- } ) ) ,
119
- jQueryMigrate = organize ( jQueryMigrateFiles ) ,
120
- data = {
119
+ return {
121
120
jquery2 : {
122
- latestStable : jQuery2 [ getLatestStable ( jQuery2 ) ] ,
123
- all : jQuery2
121
+ latestStable : getLatestStable ( jquery2Releases ) ,
122
+ all : jquery2Releases
124
123
} ,
125
124
jquery1 : {
126
- latestStable : jQuery1 [ getLatestStable ( jQuery1 ) ] ,
127
- all : jQuery1
125
+ latestStable : getLatestStable ( jquery1Releases ) ,
126
+ all : jquery1Releases
128
127
} ,
129
128
migrate : {
130
- latestStable : jQueryMigrate [ getLatestStable ( jQueryMigrate ) ] ,
131
- all : jQueryMigrate
129
+ latestStable : getLatestStable ( migrateReleases ) ,
130
+ all : migrateReleases
132
131
}
133
132
} ;
133
+ }
134
+
135
+ function getUiData ( ) {
136
+ var majorReleases = { } ,
137
+ uiReleases = grunt . file . expandDirs ( "cdn/ui/*" )
138
+ . map ( function ( dir ) {
139
+ var version ,
140
+ filename = dir . substring ( 4 ) + "jquery-ui.js" ;
141
+
142
+ version = dir . substring ( 7 ) ;
143
+ version = version . substring ( 0 , version . length - 1 ) ;
144
+
145
+ return {
146
+ filename : filename ,
147
+ version : version ,
148
+ minified : filename . replace ( ".js" , ".min.js" ) ,
149
+ themes : grunt . file . expandDirs ( dir + "themes/*" ) . map ( function ( themeDir ) {
150
+ var theme = themeDir . substring ( dir . length + 7 ) ;
151
+ return theme . substring ( 0 , theme . length - 1 ) ;
152
+ } )
153
+ } ;
154
+ } )
155
+ . sort ( function ( a , b ) {
156
+ return semver . compare ( b . version , a . version ) ;
157
+ } ) ;
134
158
135
- Handlebars . registerHelper ( "listItem" , function ( prefix , files ) {
136
- var li = "<li>" ;
137
- Object . keys ( files ) . forEach ( function ( type , index ) {
138
- if ( ! index ) {
139
- li += prefix + " " + files [ type ] . version + " - " ;
140
- } else {
141
- li += " or " ;
159
+ // Group by major release
160
+ uiReleases . forEach ( function ( release ) {
161
+ var major = / ^ \d + \. \d + / . exec ( release . version ) [ 0 ] ;
162
+ if ( ! majorReleases [ major ] ) {
163
+ majorReleases [ major ] = [ ] ;
142
164
}
143
165
144
- li += "<a href='/" + files [ type ] . filename + "'>" + type + "</a> " ;
166
+ majorReleases [ major ] . push ( release ) ;
167
+ } ) ;
168
+
169
+ // Convert to array of major release groups
170
+ return Object . keys ( majorReleases ) . map ( function ( major ) {
171
+ var all = majorReleases [ major ] ,
172
+ latestStable = getLatestStable ( all ) ;
173
+
174
+ return {
175
+ major : major ,
176
+ latestStable : latestStable ,
177
+ all : all . filter ( function ( release ) {
178
+ return release !== latestStable ;
179
+ } )
180
+ } ;
145
181
} ) ;
146
- li += "</li>" ;
182
+ }
183
+
184
+ Handlebars . registerHelper ( "release" , function ( prefix , release ) {
185
+ var html = prefix + " " + release . version + " - " +
186
+ "<a href='/" + release . filename + "'>uncompressed</a>" ;
147
187
148
- return new Handlebars . SafeString ( li ) ;
188
+ if ( release . minified ) {
189
+ html += ", <a href='/" + release . minified + "'>minified</a>" ;
190
+ }
191
+ if ( release . packed ) {
192
+ html += ", <a href='/" + release . packed + "'>packed</a>" ;
193
+ }
194
+
195
+ return new Handlebars . SafeString ( html ) ;
196
+ } ) ;
197
+
198
+ Handlebars . registerHelper ( "uiTheme" , function ( release ) {
199
+ var url ;
200
+ // TODO: link to minified theme if available
201
+ if ( release . themes . indexOf ( "smoothness" ) !== - 1 ) {
202
+ url = "smoothness/jquery-ui.css" ;
203
+ } else {
204
+ url = "base/jquery-ui.css" ;
205
+ }
206
+
207
+ return new Handlebars . SafeString (
208
+ "<a href='/ui/" + release . version + "/themes/" + url + "'>theme</a>" ) ;
149
209
} ) ;
150
210
151
211
Handlebars . registerHelper ( "include" , ( function ( ) {
@@ -156,15 +216,21 @@ grunt.registerTask( "build-index", function() {
156
216
grunt . file . read ( "templates/" + template + ".hbs" ) ) ;
157
217
}
158
218
159
- return new Handlebars . SafeString ( templates [ template ] ( ) ) ;
219
+ return new Handlebars . SafeString ( templates [ template ] ( this ) ) ;
160
220
} ;
161
221
} ) ( ) ) ;
162
222
223
+ var data = getCoreData ( ) ;
224
+ data . ui = getUiData ( ) ;
225
+
163
226
grunt . file . write ( "dist/wordpress/posts/page/index.html" ,
164
227
Handlebars . compile ( grunt . file . read ( "templates/index.hbs" ) ) ( data ) ) ;
165
228
166
229
grunt . file . write ( "dist/wordpress/posts/page/jquery.html" ,
167
230
Handlebars . compile ( grunt . file . read ( "templates/jquery.hbs" ) ) ( data ) ) ;
231
+
232
+ grunt . file . write ( "dist/wordpress/posts/page/ui.html" ,
233
+ Handlebars . compile ( grunt . file . read ( "templates/ui.hbs" ) ) ( data ) ) ;
168
234
} ) ;
169
235
170
236
} ;
0 commit comments