Skip to content

Commit cec1bc2

Browse files
committed
Use Handlebars to generate listings.
1 parent aa062dd commit cec1bc2

File tree

5 files changed

+131
-77
lines changed

5 files changed

+131
-77
lines changed

grunt.js

Lines changed: 48 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ module.exports = function( grunt ) {
33
"use strict";
44

55
var _ = require( "underscore" ),
6-
semver = require( "semver" );
6+
semver = require( "semver" ),
7+
Handlebars = require( "handlebars" );
78

89
grunt.loadNpmTasks( "grunt-clean" );
910
grunt.loadNpmTasks( "grunt-html" );
@@ -101,21 +102,6 @@ function parseFiles( files, regex ) {
101102
.sort( sortVersion );
102103
}
103104

104-
function listItem( prefix, version, files ) {
105-
var li = "<li>" + prefix + " " + version + " - ";
106-
107-
Object.keys( files ).forEach(function( type, index ) {
108-
if ( index ) {
109-
li += " or ";
110-
}
111-
112-
li += "<a href='/" + files[ type ].filename + "'>" + type + "</a> ";
113-
});
114-
li += "</li>";
115-
116-
return li;
117-
}
118-
119105
function getLatestStable( organized ) {
120106
return _.find( Object.keys( organized ), function( version ) {
121107
return version.indexOf( "-" ) === -1;
@@ -125,8 +111,7 @@ function getLatestStable( organized ) {
125111
var rjQueryVersion = /(jquery-(\d+\.\d+(?:\.\d+)?[^.]*)(?:\.(min|pack))?\.js)/;
126112
var rjQueryMigrateVersion = /(jquery-migrate-(\d+\.\d+(?:\.\d+)?[^.]*)(?:\.min)?\.js)/;
127113
grunt.registerTask( "build-index", function() {
128-
var mainIndex, projectIndex, latestStable, gitListing,
129-
files = grunt.file.expandFiles( "cdn/**.js" ),
114+
var files = grunt.file.expandFiles( "cdn/**.js" ),
130115
jQueryCoreFiles = parseFiles( files, rjQueryVersion ),
131116
jQueryMigrateFiles = parseFiles( files, rjQueryMigrateVersion ),
132117
jQuery2 = organize( jQueryCoreFiles.filter(function( match ) {
@@ -135,68 +120,55 @@ grunt.registerTask( "build-index", function() {
135120
jQuery1 = organize( jQueryCoreFiles.filter(function( match ) {
136121
return semver.satisfies( match.version, "1.x" );
137122
})),
138-
jQueryMigrate = organize( jQueryMigrateFiles );
139-
140-
mainIndex = "<script>{\"title\":\"jQuery CDN - Latest Versions\"}</script>\n";
141-
mainIndex += "<h2>jQuery Core</h2>";
142-
mainIndex += "<p>Showing the latest release in each major branch. <a href='/jquery/'>See all versions of jQuery Core</a>.</p>";
143-
144-
latestStable = getLatestStable( jQuery2 );
145-
mainIndex += "<h3>jQuery 2.x - Latest Version (IE<9 not supported)</h3>";
146-
mainIndex += "<ul>";
147-
mainIndex += listItem( "jQuery Core", latestStable, jQuery2[ latestStable ] );
148-
mainIndex += "</ul>";
149-
150-
latestStable = getLatestStable( jQuery1 );
151-
mainIndex += "<h3>jQuery 1.x - Latest Version</h3>";
152-
mainIndex += "<ul>";
153-
mainIndex += listItem( "jQuery Core", latestStable, jQuery1[ latestStable ] );
154-
mainIndex += "</ul>";
155-
156-
gitListing = "<h3>jQuery - Live git versions</h3>";
157-
gitListing += "<p>UNSTABLE, NOT FOR PRODUCTION</p>";
158-
gitListing += "<ul>";
159-
gitListing += "<li><a href='/jquery-git2.js'>jQuery 2.x git build</a> - <a href='/jquery-git2.min.js'>minified</a></li>";
160-
gitListing += "<li><a href='/jquery-git1.js'>jQuery 1.x git build</a> - <a href='/jquery-git1.min.js'>minified</a></li>";
161-
gitListing += "<li><a href='/jquery-migrate-git.js'>jQuery Migrate git build</a> - <a href='/jquery-migrate-git.min.js'>minified</a></li>";
162-
gitListing += "</ul>";
163-
164-
mainIndex += gitListing;
165-
166-
latestStable = getLatestStable( jQueryMigrate );
167-
mainIndex += "<h3>jQuery Migrate - Latest Version</h3>";
168-
mainIndex += "<ul>";
169-
mainIndex += listItem( "jQuery Migrate", latestStable, jQueryMigrate[ latestStable ] );
170-
mainIndex += "</ul>";
171-
172-
173-
// Build /jquery/
174-
projectIndex = "<script>{\"title\":\"jQuery Core - All Versions\"}</script>\n";
175-
projectIndex += gitListing;
176-
177-
projectIndex += "<h2>jQuery Core - All 2.x Versions</h2>";
178-
projectIndex += "<ul>";
179-
Object.keys( jQuery2 ).forEach(function( version ) {
180-
projectIndex += listItem( "jQuery Core", version, jQuery2[ version ] );
181-
});
182-
projectIndex += "</ul>";
123+
jQueryMigrate = organize( jQueryMigrateFiles ),
124+
data = {
125+
jquery2: {
126+
latestStable: jQuery2[ getLatestStable( jQuery2 ) ],
127+
all: jQuery2
128+
},
129+
jquery1: {
130+
latestStable: jQuery1[ getLatestStable( jQuery1 ) ],
131+
all: jQuery1
132+
},
133+
migrate: {
134+
latestStable: jQueryMigrate[ getLatestStable( jQueryMigrate ) ],
135+
all: jQueryMigrate
136+
}
137+
};
138+
139+
Handlebars.registerHelper( "listItem", function( prefix, files ) {
140+
var li = "<li>";
141+
Object.keys( files ).forEach(function( type, index ) {
142+
if ( !index ) {
143+
li += prefix + " " + files[ type ].version + " - ";
144+
} else {
145+
li += " or ";
146+
}
183147

184-
projectIndex += "<h2>jQuery Core - All 1.x Versions</h2>";
185-
projectIndex += "<ul>";
186-
Object.keys( jQuery1 ).forEach(function( version ) {
187-
projectIndex += listItem( "jQuery Core", version, jQuery1[ version ] );
188-
});
189-
projectIndex += "</ul>";
148+
li += "<a href='/" + files[ type ].filename + "'>" + type + "</a> ";
149+
});
150+
li += "</li>";
190151

191-
projectIndex += "<h2>jQuery Migrate - All Versions</h2>";
192-
projectIndex += "<ul>";
193-
Object.keys( jQueryMigrate ).forEach(function( version ) {
194-
projectIndex += listItem( "jQuery Migrate", version, jQueryMigrate[ version ] );
152+
return new Handlebars.SafeString( li );
195153
});
196-
projectIndex += "</ul>";
197-
grunt.file.write( "dist/wordpress/posts/page/jquery.html", projectIndex );
198154

199-
grunt.file.write( "dist/wordpress/posts/page/index.html", mainIndex );
155+
Handlebars.registerHelper( "include", (function() {
156+
var templates = {};
157+
return function( template ) {
158+
if ( !templates.hasOwnProperty( template ) ) {
159+
templates[ template ] = Handlebars.compile(
160+
grunt.file.read( "templates/" + template + ".hbs" ) );
161+
}
162+
163+
return new Handlebars.SafeString( templates[ template ]() );
164+
};
165+
})());
166+
167+
grunt.file.write( "dist/wordpress/posts/page/index.html",
168+
Handlebars.compile( grunt.file.read( "templates/index.hbs" ) )( data ) );
169+
170+
grunt.file.write( "dist/wordpress/posts/page/jquery.html",
171+
Handlebars.compile( grunt.file.read( "templates/jquery.hbs" ) )( data ) );
200172
});
201173

202174
};

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@
2727
"grunt-jquery-content": "0.9.0",
2828
"grunt-check-modules": "0.1.0",
2929
"semver": "2.0.11",
30-
"underscore": "1.5.1"
30+
"underscore": "1.5.1",
31+
"handlebars": "1.0.12"
3132
},
3233
"keywords": []
3334
}

templates/index.hbs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<script>{
2+
"title": "jQuery CDN - Latest Versions"
3+
}</script>
4+
5+
<h2>jQuery Core</h2>
6+
<p>
7+
Showing the latest release in each major branch.
8+
<a href="/jquery/">See all versions of jQuery Core</a>.
9+
</p>
10+
11+
{{#with jquery2}}
12+
<h3>jQuery 2.x - Latest Version (IE &lt;9 not supported)</h3>
13+
<ul>
14+
{{listItem "jQuery Core" latestStable}}
15+
</ul>
16+
{{/with}}
17+
18+
{{#with jquery1}}
19+
<h3>jQuery 1.x - Latest Version</h3>
20+
<ul>
21+
{{listItem "jQuery Core" latestStable}}
22+
</ul>
23+
{{/with}}
24+
25+
{{include "jquery-git"}}
26+
27+
{{#with migrate}}
28+
<h3>jQuery Migrate - Latest Version</h3>
29+
<ul>
30+
{{listItem "jQuery Migrate" latestStable}}
31+
</ul>
32+
{{/with}}

templates/jquery-git.hbs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<h3>jQuery - Live git versions</h3>
2+
<p>UNSTABLE, NOT FOR PRODUCTION</p>
3+
4+
<ul>
5+
<li>
6+
<a href="/jquery-git2.js">jQuery 2.x git build</a> -
7+
<a href="/jquery-git2.min.js">minified</a>
8+
</li>
9+
<li>
10+
<a href="/jquery-git1.js">jQuery 1.x git build</a> -
11+
<a href="/jquery-git1.min.js">minified</a>
12+
</li>
13+
<li>
14+
<a href="/jquery-migrate-git.js">jQuery Migrate git build</a> -
15+
<a href="/jquery-migrate-git.min.js">minified</a>
16+
</li>
17+
</ul>

templates/jquery.hbs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<script>{
2+
"title": "jQuery Core - All Versions"
3+
}</script>
4+
5+
{{include "jquery-git"}}
6+
7+
{{#with jquery2}}
8+
<h2>jQuery Core - All 2.x Versions</h2>
9+
<ul>
10+
{{#each all}}
11+
{{listItem "jQuery Core" this}}
12+
{{/each}}
13+
</ul>
14+
{{/with}}
15+
16+
{{#with jquery1}}
17+
<h2>jQuery Core - All 1.x Versions</h2>
18+
<ul>
19+
{{#each all}}
20+
{{listItem "jQuery Core" this}}
21+
{{/each}}
22+
</ul>
23+
{{/with}}
24+
25+
{{#with migrate}}
26+
<h2>jQuery Migrate - All Versions</h2>
27+
<ul>
28+
{{#each all}}
29+
{{listItem "jQuery Core" this}}
30+
{{/each}}
31+
</ul>
32+
{{/with}}

0 commit comments

Comments
 (0)