mirror of
https://github.com/GitbookIO/gitbook.git
synced 2026-10-03 12:10:34 +00:00
Write glossary for website
This commit is contained in:
+2
-1
@@ -282,7 +282,7 @@ Book.prototype.parseGlossary = function() {
|
||||
|
||||
return that.findFile(that.config.getStructure("glossary"))
|
||||
.then(function(glossary) {
|
||||
if (!glossary) return {};
|
||||
if (!glossary) return [];
|
||||
|
||||
// Remove the glossary from the list of files to parse
|
||||
that.files = _.without(that.files, glossary.path);
|
||||
@@ -325,6 +325,7 @@ Book.prototype.parsePage = function(filename) {
|
||||
|
||||
// Content sections
|
||||
page.sections = pageUtil.normalize(page.sections, {
|
||||
input: filename,
|
||||
navigation: that.navigation,
|
||||
base: path.dirname(filename) || './',
|
||||
output: path.dirname(filename) || './',
|
||||
|
||||
+15
-7
@@ -89,6 +89,7 @@ Generator.prototype.prepareTemplates = function() {
|
||||
Generator.prototype.finish = function() {
|
||||
return this.copyAssets()
|
||||
.then(this.copyCover)
|
||||
.then(this.writeGlossary)
|
||||
};
|
||||
|
||||
// Normalize a link to .html and convert README -> index
|
||||
@@ -131,16 +132,21 @@ Generator.prototype.writeParsedFile = function(page) {
|
||||
// Write the index for langs
|
||||
Generator.prototype.langsIndex = function(langs) {
|
||||
var that = this;
|
||||
var basePath = ".";
|
||||
|
||||
return this._writeTemplate(this.langsTemplate, {
|
||||
langs: langs,
|
||||
|
||||
basePath: basePath,
|
||||
staticBase: path.join(basePath, "gitbook"),
|
||||
langs: langs
|
||||
}, path.join(this.options.output, "index.html"));
|
||||
};
|
||||
|
||||
// Write glossary
|
||||
Generator.prototype.writeGlossary = function() {
|
||||
var that = this;
|
||||
|
||||
// No glossary
|
||||
if (this.book.glossary.length == 0) return Q();
|
||||
|
||||
return this._writeTemplate(this.glossaryTemplate, {}, path.join(this.options.output, "GLOSSARY.html"));
|
||||
};
|
||||
|
||||
// Convert a page into a normalized data set
|
||||
Generator.prototype.normalizePage = function(page) {
|
||||
@@ -189,7 +195,10 @@ Generator.prototype._writeTemplate = function(tpl, options, output, interpolate)
|
||||
pluginsConfig: JSON.stringify(that.options.pluginsConfig),
|
||||
htmlSnippet: _.partialRight(that.plugins.html, that, options),
|
||||
|
||||
options: that.options
|
||||
options: that.options,
|
||||
|
||||
basePath: ".",
|
||||
staticBase: path.join(".", "gitbook"),
|
||||
}, options)
|
||||
);
|
||||
})
|
||||
@@ -202,7 +211,6 @@ Generator.prototype._writeTemplate = function(tpl, options, output, interpolate)
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
// Copy assets
|
||||
Generator.prototype.copyAssets = function() {
|
||||
var that = this;
|
||||
|
||||
@@ -95,9 +95,15 @@ function normalizeHtml(src, options) {
|
||||
// Replace glossayr terms
|
||||
_.each(options.glossary, function(term) {
|
||||
var r = new RegExp( "\\b(" + pregQuote(term.name.toLowerCase()) + ")\\b" , 'gi' );
|
||||
var includedInFiles = false;
|
||||
|
||||
$("*").each(function() {
|
||||
replaceText($, this, r, function(match) {
|
||||
if (!includedInFiles) {
|
||||
includedInFiles = true;
|
||||
term.files = term.files || [];
|
||||
term.files.push(options.navigation[options.input]);
|
||||
}
|
||||
return "<a href='"+links.toAbsolute("GLOSSARY.html", options.base, options.output)+"#"+term.id+"' class='glossary-term' title='"+term.description+"'>"+match+"</span>";
|
||||
});
|
||||
});
|
||||
@@ -110,6 +116,9 @@ function normalizeHtml(src, options) {
|
||||
// Adapt page content to be relative to a base folder
|
||||
function normalizePage(sections, options) {
|
||||
options = _.defaults(options || {}, {
|
||||
// Current file path
|
||||
input: ".",
|
||||
|
||||
// Navigation to use to transform path
|
||||
navigation: {},
|
||||
|
||||
|
||||
@@ -22,6 +22,12 @@ describe('Website Generator', function () {
|
||||
}, done);
|
||||
});
|
||||
|
||||
it('should correctly include glossary in website', function(done) {
|
||||
testGeneration(books[0], "site", function(output) {
|
||||
assert(fs.existsSync(path.join(output, "GLOSSARY.html")));
|
||||
}, done);
|
||||
});
|
||||
|
||||
it('should correctly generate a multilingual book to website', function(done) {
|
||||
testGeneration(books[2], "site", function(output) {
|
||||
assert(fs.existsSync(path.join(output, "index.html")));
|
||||
|
||||
@@ -3,16 +3,16 @@
|
||||
{% block title %}Glossary | {{ title }}{% endblock %}
|
||||
|
||||
{% block page_inner %}
|
||||
{% for item in glossaryIndex %}
|
||||
<section class="normal glossary" id="{{ item.id }}">
|
||||
<h2><a href="#{{ item.id }}">{{ item.name }}</a></h2>
|
||||
<p>{{ item.description }}</p>
|
||||
<h4>Index</h4>
|
||||
<ul class="glossary-index">
|
||||
{% for file in item.files %}
|
||||
<li><a href="{{ basePath }}/{{ file.path|contentLink }}"><span class="level">{{ file.level }}.</span> {{ file.title }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</section>
|
||||
{% endfor %}
|
||||
{% for item in glossary %}
|
||||
<section class="normal glossary" id="{{ item.id }}">
|
||||
<h2><a href="#{{ item.id }}">{{ item.name }}</a></h2>
|
||||
<p>{{ item.description }}</p>
|
||||
<h4>Index</h4>
|
||||
<ul class="glossary-index">
|
||||
{% for file in item.files %}
|
||||
<li><a href="{{ basePath }}/{{ file.path|contentLink }}"><span class="level">{{ file.level }}.</span> {{ file.title }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</section>
|
||||
{% endfor %}
|
||||
{% endblock %}
|
||||
|
||||
Reference in New Issue
Block a user