diff options
-rw-r--r-- | .gitignore | 3 | ||||
-rw-r--r-- | gulpfile.js | 23 | ||||
-rw-r--r-- | lib/generators/website.js | 76 | ||||
-rw-r--r-- | lib/utils/fs.js | 47 | ||||
-rw-r--r-- | test/ebook.js | 4 | ||||
-rw-r--r-- | test/website.js | 6 | ||||
-rw-r--r-- | theme/assets/ebook/ebook.css (renamed from theme/assets/ebook.css) | 0 | ||||
-rw-r--r-- | theme/assets/ebook/epub.css (renamed from theme/assets/epub.css) | 0 | ||||
-rw-r--r-- | theme/assets/ebook/mobi.css (renamed from theme/assets/mobi.css) | 0 | ||||
-rw-r--r-- | theme/assets/ebook/pdf.css (renamed from theme/assets/pdf.css) | 0 | ||||
-rw-r--r-- | theme/assets/website/app.js (renamed from theme/assets/app.js) | 0 | ||||
-rw-r--r-- | theme/assets/website/fonts/fontawesome/FontAwesome.otf (renamed from theme/assets/fonts/fontawesome/FontAwesome.otf) | bin | 75188 -> 75188 bytes | |||
-rwxr-xr-x | theme/assets/website/fonts/fontawesome/fontawesome-webfont.eot (renamed from theme/assets/fonts/fontawesome/fontawesome-webfont.eot) | bin | 72449 -> 72449 bytes | |||
-rwxr-xr-x | theme/assets/website/fonts/fontawesome/fontawesome-webfont.svg (renamed from theme/assets/fonts/fontawesome/fontawesome-webfont.svg) | 0 | ||||
-rwxr-xr-x | theme/assets/website/fonts/fontawesome/fontawesome-webfont.ttf (renamed from theme/assets/fonts/fontawesome/fontawesome-webfont.ttf) | bin | 141564 -> 141564 bytes | |||
-rwxr-xr-x | theme/assets/website/fonts/fontawesome/fontawesome-webfont.woff (renamed from theme/assets/fonts/fontawesome/fontawesome-webfont.woff) | bin | 83760 -> 83760 bytes | |||
-rw-r--r-- | theme/assets/website/images/apple-touch-icon-precomposed-152.png (renamed from theme/assets/images/apple-touch-icon-precomposed-152.png) | bin | 92815 -> 92815 bytes | |||
-rw-r--r-- | theme/assets/website/images/favicon.ico (renamed from theme/assets/images/favicon.ico) | bin | 4286 -> 4286 bytes | |||
-rwxr-xr-x | theme/assets/website/style.css (renamed from theme/assets/website.css) | 0 | ||||
-rw-r--r-- | theme/templates/website/page.html | 2 |
20 files changed, 89 insertions, 72 deletions
@@ -24,8 +24,5 @@ build/Release # see https://npmjs.org/doc/faq.html#Should-I-check-my-node_modules-folder-into-git node_modules -theme/javascript/vendors -theme/vendors - # vim swapfile *.swp diff --git a/gulpfile.js b/gulpfile.js index 2de60ca..509e621 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,4 +1,6 @@ +var _ = require('lodash'); var gulp = require('gulp'); +var gutil = require('gulp-util'); var less = require('gulp-less'); var rename = require('gulp-rename'); var minifyCSS = require('gulp-minify-css'); @@ -7,13 +9,24 @@ var mergeStream = require('merge-stream'); var source = require('vinyl-source-stream'); gulp.task('css', function() { - return mergeStream( - gulp.src('theme/stylesheets/*.less') + var merged = mergeStream(); + + _.each({ + 'ebook.less': 'ebook/ebook.css', + 'pdf.less': 'ebook/pdf.css', + 'mobi.less': 'ebook/mobi.css', + 'epub.less': 'ebook/epub.css', + 'website.less': 'website/style.css' + }, function(out, input) { + gutil.log('compiling', input, 'into', out); + merged.add(gulp.src('theme/stylesheets/'+input) .pipe(less()) .pipe(minifyCSS()) - //.pipe(rename('style.css')) - .pipe(gulp.dest('theme/assets/')) - ); + .pipe(rename(out)) + .pipe(gulp.dest('theme/assets/'))); + }); + + return merged; }); gulp.task('js', function() { diff --git a/lib/generators/website.js b/lib/generators/website.js index e1a3cce..18ec65d 100644 --- a/lib/generators/website.js +++ b/lib/generators/website.js @@ -1,18 +1,18 @@ -var util = require("util"); -var path = require("path"); -var Q = require("q"); -var _ = require("lodash"); +var util = require('util'); +var path = require('path'); +var Q = require('q'); +var _ = require('lodash'); -var nunjucks = require("nunjucks"); -var AutoEscapeExtension = require("nunjucks-autoescape")(nunjucks); -var FilterExtension = require("nunjucks-filter")(nunjucks); +var nunjucks = require('nunjucks'); +var AutoEscapeExtension = require('nunjucks-autoescape')(nunjucks); +var FilterExtension = require('nunjucks-filter')(nunjucks); -var fs = require("../utils/fs"); -var BaseGenerator = require("../generator"); -var links = require("../utils/links"); -var i18n = require("../utils/i18n"); +var fs = require('../utils/fs'); +var BaseGenerator = require('../generator'); +var links = require('../utils/links'); +var i18n = require('../utils/i18n'); -var pkg = require("../../package.json"); +var pkg = require('../../package.json'); var Generator = function() { BaseGenerator.apply(this, arguments); @@ -21,10 +21,10 @@ var Generator = function() { this.revision = new Date(); // Resources namespace - this.namespace = "website"; + this.namespace = 'website'; // Style to integrates in the output - this.styles = ["website"]; + this.styles = ['website']; // Convert images (svg -> png) this.convertImages = false; @@ -63,9 +63,9 @@ Generator.prototype.prepareStyles = function() { // Prepare templates Generator.prototype.prepareTemplates = function() { - this.templates.page = this.book.plugins.template("site:page") || path.resolve(this.options.theme, "templates/website/page.html"); - this.templates.langs = this.book.plugins.template("site:langs") || path.resolve(this.options.theme, "templates/website/langs.html"); - this.templates.glossary = this.book.plugins.template("site:glossary") || path.resolve(this.options.theme, "templates/website/glossary.html"); + this.templates.page = this.book.plugins.template('site:page') || path.resolve(this.options.theme, 'templates/website/page.html'); + this.templates.langs = this.book.plugins.template('site:langs') || path.resolve(this.options.theme, 'templates/website/langs.html'); + this.templates.glossary = this.book.plugins.template('site:glossary') || path.resolve(this.options.theme, 'templates/website/glossary.html'); return Q(); }; @@ -79,7 +79,7 @@ Generator.prototype.prepareTemplateEngine = function() { var language = that.book.config.normalizeLanguage(); if (!i18n.hasLocale(language)) { - that.book.log.warn.ln("Language '"+language+"' is not available as a layout locales (en, "+i18n.getLocales().join(", ")+")"); + that.book.log.warn.ln('Language "'+language+'" is not available as a layout locales (en, '+i18n.getLocales().join(', ')+')'); } var folders = _.chain(that.templates) @@ -96,14 +96,14 @@ Generator.prototype.prepareTemplateEngine = function() { ); // Add filter - that.env.addFilter("contentLink", that.book.contentLink.bind(that.book)); - that.env.addFilter("lvl", function(lvl) { - return lvl.split(".").length; + that.env.addFilter('contentLink', that.book.contentLink.bind(that.book)); + that.env.addFilter('lvl', function(lvl) { + return lvl.split('.').length; }); // Add extension - that.env.addExtension("AutoEscapeExtension", new AutoEscapeExtension(that.env)); - that.env.addExtension("FilterExtension", new FilterExtension(that.env)); + that.env.addExtension('AutoEscapeExtension', new AutoEscapeExtension(that.env)); + that.env.addExtension('FilterExtension', new FilterExtension(that.env)); }); }; @@ -122,20 +122,20 @@ Generator.prototype.convertFile = function(input) { return that.book.parsePage(input, { convertImages: that.convertImages, interpolateTemplate: function(page) { - return that.callHook("page:before", page); + return that.callHook('page:before', page); }, interpolateContent: function(page) { - return that.callHook("page", page); + return that.callHook('page', page); } }) .then(function(page) { var relativeOutput = that.book.contentPath(page.path); var output = path.join(that.options.output, relativeOutput); - var basePath = path.relative(path.dirname(output), that.options.output) || "."; - if (process.platform === "win32") basePath = basePath.replace(/\\/g, "/"); + var basePath = path.relative(path.dirname(output), that.options.output) || '.'; + if (process.platform === 'win32') basePath = basePath.replace(/\\/g, '/'); - that.book.log.debug.ln("write parsed file", page.path, "to", relativeOutput); + that.book.log.debug.ln('write parsed file', page.path, 'to', relativeOutput); return that._writeTemplate(that.templates.page, { progress: page.progress, @@ -144,7 +144,7 @@ Generator.prototype.convertFile = function(input) { content: page.sections, basePath: basePath, - staticBase: links.join(basePath, "gitbook") + staticBase: links.join(basePath, 'gitbook') }, output); }); }; @@ -155,7 +155,7 @@ Generator.prototype.writeLangsIndex = function() { return this._writeTemplate(this.templates.langs, { langs: this.book.langs - }, path.join(this.options.output, "index.html")); + }, path.join(this.options.output, 'index.html')); }; // Write glossary @@ -163,7 +163,7 @@ Generator.prototype.writeGlossary = function() { // No glossary if (this.book.glossary.length === 0) return Q(); - return this._writeTemplate(this.templates.glossary, {}, path.join(this.options.output, "GLOSSARY.html")); + return this._writeTemplate(this.templates.glossary, {}, path.join(this.options.output, 'GLOSSARY.html')); }; // Convert a page into a normalized data set @@ -180,7 +180,7 @@ Generator.prototype.normalizePage = function(page) { return Q() .then(function() { - return _callHook("page"); + return _callHook('page'); }) .then(function() { return page; @@ -222,10 +222,10 @@ Generator.prototype._writeTemplate = function(tpl, options, output, interpolate) options: that.options, - basePath: ".", - staticBase: path.join(".", "gitbook"), + basePath: '.', + staticBase: path.join('.', 'gitbook'), - "__": that.book.i18n.bind(that.book) + '__': that.book.i18n.bind(that.book) }, options) ); }) @@ -244,15 +244,15 @@ Generator.prototype.copyAssets = function() { // Copy gitbook assets return fs.copy( - path.join(that.options.theme, "assets"), - path.join(that.options.output, "gitbook") + path.join(that.options.theme, 'assets/'+this.namespace), + path.join(that.options.output, 'gitbook') ) // Copy plugins assets .then(function() { return Q.all( _.map(that.book.plugins.list, function(plugin) { - var pluginAssets = path.join(that.options.output, "gitbook/plugins/", plugin.name); + var pluginAssets = path.join(that.options.output, 'gitbook/plugins/', plugin.name); return plugin.copyAssets(pluginAssets, that.namespace); }) ); diff --git a/lib/utils/fs.js b/lib/utils/fs.js index 0a9d846..716e3a0 100644 --- a/lib/utils/fs.js +++ b/lib/utils/fs.js @@ -1,10 +1,10 @@ -var _ = require("lodash"); -var Q = require("q"); -var tmp = require("tmp"); -var path = require("path"); -var fs = require("graceful-fs"); -var fsExtra = require("fs-extra"); -var Ignore = require("fstream-ignore"); +var _ = require('lodash'); +var Q = require('q'); +var tmp = require('tmp'); +var path = require('path'); +var fs = require('graceful-fs'); +var fsExtra = require('fs-extra'); +var Ignore = require('fstream-ignore'); var fsUtils = { tmp: { @@ -33,7 +33,7 @@ var fsUtils = { existsSync: fs.existsSync.bind(fs), readFileSync: fs.readFileSync.bind(fs), clean: cleanFolder, - getUniqueFilename: getUniqueFilename, + getUniqueFilename: getUniqueFilename }; // Write a file @@ -57,14 +57,14 @@ function writeStream(filename, st) { var wstream = fs.createWriteStream(filename); - wstream.on("finish", function () { + wstream.on('finish', function () { d.resolve(); }); - wstream.on("error", function (err) { + wstream.on('error', function (err) { d.reject(err); }); - st.on("error", function(err) { + st.on('error', function(err) { d.reject(err); }); @@ -77,7 +77,7 @@ function writeStream(filename, st) { function getUniqueFilename(base, filename) { if (!filename) { filename = base; - base = "/"; + base = '/'; } filename = path.resolve(base, filename); @@ -87,9 +87,8 @@ function getUniqueFilename(base, filename) { var _filename = filename+ext; var i = 0; - while (1) { - if (!fs.existsSync(filename)) break; - _filename = filename+"_"+i+ext; + while (fs.existsSync(filename)) { + _filename = filename+'_'+i+ext; i = i + 1; } @@ -115,20 +114,20 @@ function listFiles(root, options) { }); // Add extra rules to ignore common folders - ig.addIgnoreRules(options.ignoreRules, "__custom_stuff"); + ig.addIgnoreRules(options.ignoreRules, '__custom_stuff'); // Push each file to our list - ig.on("child", function (c) { + ig.on('child', function (c) { files.push( - c.path.substr(c.root.path.length + 1) + (c.props.Directory === true ? "/" : "") + c.path.substr(c.root.path.length + 1) + (c.props.Directory === true ? '/' : '') ); }); - ig.on("end", function() { + ig.on('end', function() { // Normalize paths on Windows - if(process.platform === "win32") { + if(process.platform === 'win32') { return d.resolve(files.map(function(file) { - return file.replace(/\\/g, "/"); + return file.replace(/\\/g, '/'); })); } @@ -136,7 +135,7 @@ function listFiles(root, options) { return d.resolve(files); }); - ig.on("error", d.reject); + ig.on('error', d.reject); return d.promise; } @@ -150,8 +149,8 @@ function cleanFolder(root) { ignoreFiles: [], ignoreRules: [ // Skip Git and SVN stuff - ".git/", - ".svn/" + '.git/', + '.svn/' ] }) .then(function(files) { diff --git a/test/ebook.js b/test/ebook.js index 335699c..6c84462 100644 --- a/test/ebook.js +++ b/test/ebook.js @@ -20,6 +20,10 @@ describe('eBook generator', function () { book.should.have.file('gitbook'); book.should.have.file('gitbook/ebook.css'); }); + + it('should not copy website assets', function() { + book.should.not.have.file('gitbook/style.css'); + }); }); describe('Custom styles', function() { diff --git a/test/website.js b/test/website.js index 4b1c4de..6a0fd1c 100644 --- a/test/website.js +++ b/test/website.js @@ -16,7 +16,11 @@ describe('Website generator', function () { it('should correctly copy assets', function() { book.should.have.file('gitbook'); book.should.have.file('gitbook/app.js'); - book.should.have.file('gitbook/website.css'); + book.should.have.file('gitbook/style.css'); + }); + + it('should not copy ebook assets', function() { + book.should.not.have.file('gitbook/ebook.css'); }); }); }); diff --git a/theme/assets/ebook.css b/theme/assets/ebook/ebook.css index 5983b10..5983b10 100644 --- a/theme/assets/ebook.css +++ b/theme/assets/ebook/ebook.css diff --git a/theme/assets/epub.css b/theme/assets/ebook/epub.css index e8cafc7..e8cafc7 100644 --- a/theme/assets/epub.css +++ b/theme/assets/ebook/epub.css diff --git a/theme/assets/mobi.css b/theme/assets/ebook/mobi.css index b18de84..b18de84 100644 --- a/theme/assets/mobi.css +++ b/theme/assets/ebook/mobi.css diff --git a/theme/assets/pdf.css b/theme/assets/ebook/pdf.css index 27e941c..27e941c 100644 --- a/theme/assets/pdf.css +++ b/theme/assets/ebook/pdf.css diff --git a/theme/assets/app.js b/theme/assets/website/app.js index b1dbe9a..b1dbe9a 100644 --- a/theme/assets/app.js +++ b/theme/assets/website/app.js diff --git a/theme/assets/fonts/fontawesome/FontAwesome.otf b/theme/assets/website/fonts/fontawesome/FontAwesome.otf Binary files differindex 3461e3f..3461e3f 100644 --- a/theme/assets/fonts/fontawesome/FontAwesome.otf +++ b/theme/assets/website/fonts/fontawesome/FontAwesome.otf diff --git a/theme/assets/fonts/fontawesome/fontawesome-webfont.eot b/theme/assets/website/fonts/fontawesome/fontawesome-webfont.eot Binary files differindex 6cfd566..6cfd566 100755 --- a/theme/assets/fonts/fontawesome/fontawesome-webfont.eot +++ b/theme/assets/website/fonts/fontawesome/fontawesome-webfont.eot diff --git a/theme/assets/fonts/fontawesome/fontawesome-webfont.svg b/theme/assets/website/fonts/fontawesome/fontawesome-webfont.svg index a9f8469..a9f8469 100755 --- a/theme/assets/fonts/fontawesome/fontawesome-webfont.svg +++ b/theme/assets/website/fonts/fontawesome/fontawesome-webfont.svg diff --git a/theme/assets/fonts/fontawesome/fontawesome-webfont.ttf b/theme/assets/website/fonts/fontawesome/fontawesome-webfont.ttf Binary files differindex 5cd6cff..5cd6cff 100755 --- a/theme/assets/fonts/fontawesome/fontawesome-webfont.ttf +++ b/theme/assets/website/fonts/fontawesome/fontawesome-webfont.ttf diff --git a/theme/assets/fonts/fontawesome/fontawesome-webfont.woff b/theme/assets/website/fonts/fontawesome/fontawesome-webfont.woff Binary files differindex 9eaecb3..9eaecb3 100755 --- a/theme/assets/fonts/fontawesome/fontawesome-webfont.woff +++ b/theme/assets/website/fonts/fontawesome/fontawesome-webfont.woff diff --git a/theme/assets/images/apple-touch-icon-precomposed-152.png b/theme/assets/website/images/apple-touch-icon-precomposed-152.png Binary files differindex d28c750..d28c750 100644 --- a/theme/assets/images/apple-touch-icon-precomposed-152.png +++ b/theme/assets/website/images/apple-touch-icon-precomposed-152.png diff --git a/theme/assets/images/favicon.ico b/theme/assets/website/images/favicon.ico Binary files differindex 9ee99fa..9ee99fa 100644 --- a/theme/assets/images/favicon.ico +++ b/theme/assets/website/images/favicon.ico diff --git a/theme/assets/website.css b/theme/assets/website/style.css index 68c3380..68c3380 100755 --- a/theme/assets/website.css +++ b/theme/assets/website/style.css diff --git a/theme/templates/website/page.html b/theme/templates/website/page.html index e40e4d3..527e181 100644 --- a/theme/templates/website/page.html +++ b/theme/templates/website/page.html @@ -62,7 +62,7 @@ require(["gitbook"], function(gitbook) { {% endblock %} {% block style %} - <link rel="stylesheet" href="{{ staticBase }}/website.css"> + <link rel="stylesheet" href="{{ staticBase }}/style.css"> {% for resource in plugins.resources.css %} {% if resource.url %} <link rel="stylesheet" href="{{ resource.url }}"> |