Merge pull request #471 from GitbookIO/feature/multipages

Use multiple HTML files for ebook generation
This commit is contained in:
Samy Pessé
2014-10-13 10:41:23 +02:00
13 changed files with 93 additions and 129 deletions
+2 -1
View File
@@ -41,7 +41,8 @@ Generator.prototype.finish = function() {
"--level1-toc": "descendant-or-self::*[contains(concat(' ', normalize-space(@class), ' '), ' book-chapter-1 ')]",
"--level2-toc": "descendant-or-self::*[contains(concat(' ', normalize-space(@class), ' '), ' book-chapter-2 ')]",
"--level3-toc": "descendant-or-self::*[contains(concat(' ', normalize-space(@class), ' '), ' book-chapter-3 ')]",
"--no-chapters-in-toc": true
"--no-chapters-in-toc": true,
"--max-levels": "1000"
};
if (format == "pdf") {
+1 -3
View File
@@ -79,6 +79,4 @@ BaseGenerator.prototype.finish = function() {
return Q.reject(new Error("Could not finish generation"));
};
module.exports = BaseGenerator;
module.exports = BaseGenerator;
+1 -1
View File
@@ -73,4 +73,4 @@ Generator.prototype.finish = function() {
// ignore
};
module.exports = Generator;
module.exports = Generator;
+6 -29
View File
@@ -30,24 +30,6 @@ Generator.prototype.loadTemplates = function() {
);
};
Generator.prototype.convertFile = function(content, input) {
var that = this;
var json = {
path: input,
progress: parse.progress(this.options.navigation, input)
};
return this.prepareFile(content, input)
.then(function(page) {
that.pages[input] = page;
});
};
// Generate languages index
Generator.prototype.langsIndex = function(langs) {
return Q();
};
Generator.prototype.finish = function() {
var that = this;
var basePath = ".";
@@ -56,16 +38,6 @@ Generator.prototype.finish = function() {
var progress = parse.progress(this.options.navigation, "README.md");
return Q()
// Generate html
.then(function(pages) {
return that._writeTemplate(that.template, {
pages: that.pages,
progress: progress,
basePath: basePath,
staticBase: path.join(basePath, "gitbook"),
}, output);
})
// Copy cover
.then(function() {
@@ -78,4 +50,9 @@ Generator.prototype.finish = function() {
});
};
module.exports = Generator;
// Generate languages index
Generator.prototype.langsIndex = function(langs) {
return Q();
};
module.exports = Generator;
+1 -1
View File
@@ -8,7 +8,7 @@ var resolve = require('resolve');
var pkg = require("../../package.json");
var RESOURCES = ["js", "css"];
var RESOURCES = ["js", "css"];
var Plugin = function(name, root, generator) {
this.name = name;
-1
View File
@@ -1,5 +1,4 @@
var _ = require("lodash");
var kramed = require('kramed');
var textRenderer = require('kramed-text-renderer');
+1 -1
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+44 -19
View File
@@ -3,30 +3,55 @@
@import "ebook/variables.less";
@import "ebook/highlight.less";
.book-chapter {
display: none;
}
.exercise, .quiz {
margin: 1cm 0cm;
padding: 0.4cm;
page-break-inside: avoid;
border: 3px solid #ddd;
.exercise-header {
margin-bottom: 0.4cm;
padding-bottom: 0.2cm;
border-bottom: 1px solid #ddd;
.page {
.book-chapter {
display: none;
}
.question {
margin-top: 0.4cm;
.exercise, .quiz {
margin: 1cm 0cm;
border: 2px solid #ddd;
.exercise-header {
padding: 0.1cm 0.3cm;
background: #f5f5f5;
border-bottom: 1px solid #ddd;
font-weight: bold;
page-break-inside: avoid;
}
.exercise-inner {
padding: 0.15cm 0.3cm;
p:last-child {
margin: 0px;
}
}
hr {
height: 2px;
}
.question {
margin-top: 0.1cm;
border-top: 1px solid #ddd;
.question-base {
}
.question-solution {
}
}
}
}
body {
font-family: sans-serif;
.markdown-content(#333, 1.6);
.page {
font-family: sans-serif;
.markdown-content(#333, 1.6);
}
}
@@ -0,0 +1,11 @@
<div class="exercise-header">Exercise</div>
<div class="exercise-inner">
{% autoescape false %}{{ section.content }}{% endautoescape %}
</div>
<div class="exercise-inner">
<pre><code>{% autoescape false %}{{ section.code.base|code }}{% endautoescape %}</code></pre>
</div>
<hr>
<div class="exercise-inner">
<pre><code>{% autoescape false %}{{ section.code.solution|code }}{% endautoescape %}</code></pre>
</div>
+14
View File
@@ -0,0 +1,14 @@
<div class="exercise-header">Quiz</div>
<div class="exercise-inner">{% autoescape false %}{{ section.content }}{% endautoescape %}</div>
{% for quiz in section.quiz %}
<div class="question exercise-inner">
<div class="question-header">Question {{ loop.index }} of {{ section.quiz.length }}</div>
<div class="question-base">
{% autoescape false %}{{ quiz.base }}{% endautoescape %}
</div>
<div class="question-solution">
{% autoescape false %}{{ quiz.solution }}{% endautoescape %}
</div>
</div>
{% endfor %}
+11 -69
View File
@@ -1,6 +1,6 @@
{% extends "layout.html" %}
{% block title %}{{ title }}{% endblock %}
{% block title %}{{ progress.current.title }} | {{ title }}{% endblock %}
{% block style %}
<link rel="stylesheet" href="{{ staticBase }}/print.css">
@@ -13,82 +13,24 @@
{% endfor %}
{% endblock %}
{% macro articleContent(content) %}
{% block content %}
<div class="page">
<h1 class="book-chapter book-chapter-{{ progress.current.level|lvl }}">{{ progress.current.title }}</h1>
{% for section in content %}
<section class="{{ section.type }}" id="section-{{ section.id }}">
{% if section.type == "normal" %}
{% autoescape false %}{{ section.content }}{% endautoescape %}
{% elif section.type == "exercise" %}
<div class="exercise">
<div class="exercise-header">Exercise #{{ exercise }}</div>
{% autoescape false %}{{ section.content }}{% endautoescape %}
<pre><code>{% autoescape false %}{{ section.code.base|code }}{% endautoescape %}</code></pre>
{% set exercise = exercise + 1 %}
</div>
{% include "./includes/page/exercise.html" with {section: section} %}
{% elif section.type == "quiz" %}
<div class="quiz">
<div class="exercise-header">Quiz #{{ exercise }}</div>
{% autoescape false %}{{ section.content }}{% endautoescape %}
{% for quiz in section.quiz %}
<div class="question">
<div class="question-header">Question {{ loop.index }} of {{ section.quiz.length }}</div>
{% autoescape false %}{{ quiz.base }}{% endautoescape %}
</div>
{% endfor %}
{% set exercise = exercise + 1 %}
</div>
{% include "./includes/page/quiz.html" with {section: section} %}
{% endif %}
{% endfor %}
{% endmacro %}
{% set exercise = 1 %}
{% block content %}
{# Pages content #}
{% for item in progress.chapters %}
<article id="{{ article.path }}">
<h1 class="book-chapter book-chapter-{{ item.level|lvl }}">{{ item.title }}</h1>
{% if pages[item.path] %}
{{ articleContent(pages[item.path].sections) }}
{% endif %}
</article>
</section>
{% endfor %}
{# Exercise solutions #}
{% if exercise > 1 %}
{% set exercise = 1 %}
<article>
<h1 class="book-chapter book-chapter-1">Exercise Solutions</h1>
<h1>Exercise Solutions</h1>
{% for item in progress.chapters %}
{% if pages[item.path] %}
{% for section in pages[item.path].sections %}
{% if section.type == "exercise" %}
<div class="exercise">
<div class="exercise-header">Exercise #{{ exercise }}</div>
{% autoescape false %}{{ section.content }}{% endautoescape %}
<pre><code>{% autoescape false %}{{ section.code.solution|code }}{% endautoescape %}</code></pre>
{% set exercise = exercise + 1 %}
</div>
{% elif section.type == "quiz" %}
<div class="quiz">
<div class="exercise-header">Quiz #{{ exercise }}</div>
{% autoescape false %}{{ section.content }}{% endautoescape %}
{% for quiz in section.quiz %}
<div class="question">
<div class="question-header">Question {{ loop.index }} of {{ section.quiz.length }}</div>
{% autoescape false %}{{ quiz.solution }}{% endautoescape %}
</div>
{% endfor %}
{% set exercise = exercise + 1 %}
</div>
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
</article>
{% if progress.current.next and progress.current.next.path %}
<a href="{{ basePath }}/{{ progress.current.next.path|mdLink }}" />
{% endif %}
</div>
{% endblock %}
{% block javascript %}{% endblock %}
-3
View File
@@ -2,9 +2,6 @@
{% block head %}
{% parent %}
{% if githubAuthor %}
<meta name="author" content="{{ githubAuthor }}">
{% endif %}
{% if progress.current.next and progress.current.next.path %}
<link rel="next" href="{{ basePath }}/{{ progress.current.next.path|mdLink }}" />
{% endif %}