Merge pull request #617 from mozilla/issue-556-translate-noscript

fix(server) render index.html on the server for l10n.
This commit is contained in:
Zach Carter 2014-02-27 14:05:20 -08:00
Родитель b50e5b1795 7e626fa019
Коммит f8e4ac316a
9 изменённых файлов: 71 добавлений и 31 удалений

Просмотреть файл

@ -11,6 +11,8 @@ module.exports = function (grunt) {
'useminPrepare', 'useminPrepare',
'selectconfig:dist', 'selectconfig:dist',
'l10n-create-json', 'l10n-create-json',
// server templates are needed for requirejs to replace the require script
'copy:server_templates',
'requirejs', 'requirejs',
'css', 'css',
'concurrent:dist', 'concurrent:dist',

Просмотреть файл

@ -6,6 +6,20 @@ module.exports = function (grunt) {
'use strict'; 'use strict';
grunt.config('copy', { grunt.config('copy', {
server_templates: {
files: [{
// server side rendered templates. Copied so requirejs can
// replace the require script tag and embedded js/css
// links can be updated to use minified versions.
expand: true,
dot: true,
cwd: '<%= yeoman.page_template_src %>',
dest: '<%= yeoman.page_template_dist %>',
src: [
'*.html'
]
}]
},
dist: { dist: {
files: [ files: [
{ {
@ -19,20 +33,12 @@ module.exports = function (grunt) {
'.htaccess', '.htaccess',
'images/{,*/}*.{webp,gif}', 'images/{,*/}*.{webp,gif}',
'styles/fonts/{,*/}*.*', 'styles/fonts/{,*/}*.*',
'bower_components/{,*/}{,*/}*.*', // only modernizr is left unbundled in main.js. It should be
// the only thing copied over.
'bower_components/modernizr/modernizr.js',
'i18n/{,*/}{,*/}*.*', 'i18n/{,*/}{,*/}*.*',
'sync/*.html' 'sync/*.html'
] ]
}, {
// server side rendered templates. Copied so embedded js/css
// links can be updated to use minified versions.
expand: true,
dot: true,
cwd: '<%= yeoman.page_template_src %>',
dest: '<%= yeoman.page_template_dist %>',
src: [
'*.html'
]
} }
] ]
}, },

Просмотреть файл

@ -9,9 +9,18 @@ module.exports = function (grunt) {
dist: { dist: {
// Options: https://github.com/jrburke/r.js/blob/master/build/example.build.js // Options: https://github.com/jrburke/r.js/blob/master/build/example.build.js
options: { options: {
// `name` and `out` are set by grunt-usemin almond: true,
replaceRequireScript: [{
files: ['<%= yeoman.page_template_dist %>/index.html'],
module: 'main',
modulePath: '/scripts/main'
}],
baseUrl: '<%= yeoman.app %>/scripts', baseUrl: '<%= yeoman.app %>/scripts',
optimize: 'none', optimize: 'none',
name: 'main',
out: '<%= yeoman.tmp %>/scripts/main.js',
mainConfigFile: '<%= yeoman.app %>/scripts/main.js',
keepBuildDir: true,
// TODO: (Issue #560) Figure out how to make sourcemaps work with grunt-usemin // TODO: (Issue #560) Figure out how to make sourcemaps work with grunt-usemin
// https://github.com/yeoman/grunt-usemin/issues/30 // https://github.com/yeoman/grunt-usemin/issues/30
//generateSourceMaps: true, //generateSourceMaps: true,

Просмотреть файл

@ -14,8 +14,8 @@ module.exports = function (grunt) {
dist: { dist: {
files: [{ files: [{
expand: true, expand: true,
cwd: '<%= yeoman.dist %>/scripts', cwd: '<%= yeoman.tmp %>/scripts',
src: '**/*.js', src: ['**/*.js'],
dest: '<%= yeoman.dist %>/scripts' dest: '<%= yeoman.dist %>/scripts'
}] }]
} }

Просмотреть файл

@ -6,13 +6,26 @@ module.exports = function (grunt) {
'use strict'; 'use strict';
grunt.config('useminPrepare', { grunt.config('useminPrepare', {
options: { client_rendered: {
dest: '<%= yeoman.dist %>' dest: '<%= yeoman.dist %>',
src: [
'<%= yeoman.app %>/{,*/}*.html',
'!<%= yeoman.app %>/tests/{,*/}*.html'
],
type: 'html'
}, },
html: [ server_rendered: {
'<%= yeoman.app %>/index.html', options: {
'<%= yeoman.app %>/sync/*.html' // root must be specified or else useminPrepare uses the template
] // directory as the root from where to search for assets.
root: '<%= yeoman.app %>',
type: 'html'
},
dest: '<%= yeoman.dist %>',
src: [
'<%= yeoman.page_template_src %>/{,*/}*.html'
],
}
}); });
grunt.config('usemin', { grunt.config('usemin', {

Просмотреть файл

@ -563,7 +563,7 @@
"0.8.0": "6bd52325dcce1d995dbbf648030c59e1a606acda" "0.8.0": "6bd52325dcce1d995dbbf648030c59e1a606acda"
}, },
"grunt-contrib-uglify": { "grunt-contrib-uglify": {
"0.2.0": "feca69e0fb53cb4088068089df3d3b119c56fc72" "0.3.2": "865b00ae0d11d1f5fafca3967c9b099f8929684b"
}, },
"grunt-contrib-watch": { "grunt-contrib-watch": {
"0.5.2": "9bb73392aeeda093792cd82d67675b0a84b51adf" "0.5.2": "9bb73392aeeda093792cd82d67675b0a84b51adf"
@ -615,7 +615,7 @@
"0.1.2": "fce3afaedb8a944edbd6dce5667cc6b9fc30313d" "0.1.2": "fce3afaedb8a944edbd6dce5667cc6b9fc30313d"
}, },
"grunt-usemin": { "grunt-usemin": {
"0.1.10": "70a2591ea34a56368bac4490a61c5ce65fc176cf" "2.0.2": "35a7786581ad4454c98706fb044ea92c952f1a9b"
}, },
"grunt-z-schema": { "grunt-z-schema": {
"0.1.0": "4fd3f205ce684cd7baa6964ecbcc004b60ee9804" "0.1.0": "4fd3f205ce684cd7baa6964ecbcc004b60ee9804"
@ -1281,7 +1281,11 @@
"1.2.6": "d354b2d3c1cf10ebc18fa78c11a28bdd9ce1580d", "1.2.6": "d354b2d3c1cf10ebc18fa78c11a28bdd9ce1580d",
"1.3.3": "ddd3e98aa27f5f47e589cfb3f95cddba26096190", "1.3.3": "ddd3e98aa27f5f47e589cfb3f95cddba26096190",
"2.2.5": "a6e02a70d839792b9780488b7b8b184c095c99c7", "2.2.5": "a6e02a70d839792b9780488b7b8b184c095c99c7",
"2.3.6": "fa0984770b428b7a9b2a8058f46355d14fef211a" "2.3.6": "fa0984770b428b7a9b2a8058f46355d14fef211a",
"2.4.12": "2354d9659f85330c1e3e2910f8acd77fe14bb4a8"
},
"uglify-to-browserify": {
"1.0.2": "6e0924d6bda6b5afe349e39a6d632850a0f882b7"
}, },
"uid2": { "uid2": {
"0.0.2": "107fb155c82c1136620797ed4c88cf2b08f6aab8" "0.0.2": "107fb155c82c1136620797ed4c88cf2b08f6aab8"

Просмотреть файл

@ -46,7 +46,7 @@
"grunt-contrib-htmlmin": "0.1.3", "grunt-contrib-htmlmin": "0.1.3",
"grunt-contrib-imagemin": "0.5.0", "grunt-contrib-imagemin": "0.5.0",
"grunt-contrib-jshint": "0.8.0", "grunt-contrib-jshint": "0.8.0",
"grunt-contrib-uglify": "0.2.0", "grunt-contrib-uglify": "0.3.2",
"grunt-contrib-watch": "0.5.2", "grunt-contrib-watch": "0.5.2",
"grunt-conventional-changelog": "1.1.0", "grunt-conventional-changelog": "1.1.0",
"grunt-copyright": "0.1.0", "grunt-copyright": "0.1.0",
@ -61,7 +61,7 @@
"grunt-sass": "0.11.0", "grunt-sass": "0.11.0",
"grunt-svgmin": "0.2.0", "grunt-svgmin": "0.2.0",
"grunt-todo": "0.1.2", "grunt-todo": "0.1.2",
"grunt-usemin": "0.1.10", "grunt-usemin": "2.0.2",
"grunt-z-schema": "0.1.0", "grunt-z-schema": "0.1.0",
"handlebars": "1.3.0", "handlebars": "1.3.0",
"helmet": "0.1.2", "helmet": "0.1.2",

Просмотреть файл

@ -67,7 +67,6 @@ module.exports = function (fxAccountUrl, templates) {
// an array is used instead of a regexp simply because the regexp // an array is used instead of a regexp simply because the regexp
// became too long. One route is created for each item. // became too long. One route is created for each item.
var FRONTEND_ROUTES = [ var FRONTEND_ROUTES = [
'/',
'/signin', '/signin',
'/signin_complete', '/signin_complete',
'/signup', '/signup',
@ -94,6 +93,11 @@ module.exports = function (fxAccountUrl, templates) {
next(); next();
}); });
}); });
app.get('/', function(req, res) {
res.render('index');
});
}; };
}; };

Просмотреть файл

@ -6,7 +6,7 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Firefox Accounts</title> <title>{{#t}}Firefox Accounts{{/t}}</title>
<meta name="description" content=""> <meta name="description" content="">
<meta name="viewport" content="width=device-width"> <meta name="viewport" content="width=device-width">
<!-- Place favicon.ico and apple-touch-icon.png in the root directory --> <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->
@ -25,15 +25,17 @@
<![endif]--> <![endif]-->
<div id="stage"> <div id="stage">
<!-- this will be overwritten if JS is enabled --> <!-- this will be overwritten if JS is enabled -->
<!-- TODO - (Issue #556) this needs to be translated on the server -->
<noscript> <noscript>
Firefox Accounts requires JavaScript. {{#t}}Firefox Accounts requires JavaScript.{{/t}}
</noscript> </noscript>
</div> </div>
<!-- build:js /scripts/main.js --> <!-- no build declaration, main.js build
is done by requirejs and not concat.
rev/usemin will still replace the URL
with a cache aware URL.
-->
<script data-main="/scripts/main" src="/bower_components/requirejs/require.js"></script> <script data-main="/scripts/main" src="/bower_components/requirejs/require.js"></script>
<!-- endbuild -->
</body> </body>
</html> </html>