mirror of
https://github.com/GitbookIO/gitbook.git
synced 2026-09-28 04:58:52 +00:00
Compare commits
21 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e7f2803d11 | |||
| 320015dd8f | |||
| 471c124a98 | |||
| aa44a109c6 | |||
| 41e5ca8422 | |||
| 53af8b2bb6 | |||
| bd885b135f | |||
| 62a6dde81a | |||
| 14b72b344f | |||
| ac03668063 | |||
| 2512e176c9 | |||
| b613393866 | |||
| 607a6e95de | |||
| 871f574ff7 | |||
| 377e470b15 | |||
| e0a3f0cea5 | |||
| 66727b2736 | |||
| 8215ad977f | |||
| a611dffbdf | |||
| 39f378d8cf | |||
| f00da58153 |
@@ -50,6 +50,7 @@ Translators
|
|||||||
- Iancu Aurel (@awrelll)
|
- Iancu Aurel (@awrelll)
|
||||||
- Korean
|
- Korean
|
||||||
- Iancu Aurel (@awrelll)
|
- Iancu Aurel (@awrelll)
|
||||||
|
- SangYeob Yu (@deminoth)
|
||||||
- Vietnamese
|
- Vietnamese
|
||||||
- Hong Nguyen (@nghong)
|
- Hong Nguyen (@nghong)
|
||||||
- Hebrew
|
- Hebrew
|
||||||
|
|||||||
+13
@@ -2,6 +2,19 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
This project adheres to [Semantic Versioning](http://semver.org/).
|
This project adheres to [Semantic Versioning](http://semver.org/).
|
||||||
|
|
||||||
|
## 2.3.2
|
||||||
|
- Fix blocks (like maths) in Asciidoc
|
||||||
|
- Fix error when checking gitbook version
|
||||||
|
|
||||||
|
## 2.3.1
|
||||||
|
- Fix black font color for ebooks (mobi, pdf and epub)
|
||||||
|
- Fix ISO code for korean language
|
||||||
|
- Fix korean translation
|
||||||
|
- Fix syntax highlighting for asciidoc
|
||||||
|
- Fix inline html escaping in markdown
|
||||||
|
- Add warning for file outside SUMMARY
|
||||||
|
- Force SUMMARY entries to be unique by filename
|
||||||
|
|
||||||
## 2.3.0
|
## 2.3.0
|
||||||
- Fix nunjucks issue with multiple `{% raw %}` blocks
|
- Fix nunjucks issue with multiple `{% raw %}` blocks
|
||||||
- Fix crash when git conref failed
|
- Fix crash when git conref failed
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ GitBook
|
|||||||
=======
|
=======
|
||||||
|
|
||||||
[](http://badge.fury.io/js/gitbook)
|
[](http://badge.fury.io/js/gitbook)
|
||||||
[](https://travis-ci.org/GitbookIO/gitbook)
|
[](https://travis-ci.org/GitbookIO/gitbook)
|
||||||
[](https://ci.appveyor.com/project/SamyPesse/gitbook)
|
[](https://ci.appveyor.com/project/GitBook/gitbook)
|
||||||
|
|
||||||
GitBook is a command line tool (and Node.js library) for building beautiful books using GitHub/Git and Markdown (or AsciiDoc). Here is an example: [Learn Javascript](https://www.gitbook.com/book/GitBookIO/javascript).
|
GitBook is a command line tool (and Node.js library) for building beautiful books using GitHub/Git and Markdown (or AsciiDoc). Here is an example: [Learn Javascript](https://www.gitbook.com/book/GitBookIO/javascript).
|
||||||
|
|
||||||
|
|||||||
@@ -121,8 +121,8 @@ Configuration.prototype.load = function() {
|
|||||||
if (!semver.satisfies(pkg.version, that.options.gitbook)) {
|
if (!semver.satisfies(pkg.version, that.options.gitbook)) {
|
||||||
throw "GitBook version doesn't satisfy version required by the book: "+that.options.gitbook;
|
throw "GitBook version doesn't satisfy version required by the book: "+that.options.gitbook;
|
||||||
}
|
}
|
||||||
if (that.options.gitbook == "*") {
|
if (that.options.gitbook != '*' && !semver.satisfies(semver.inc(pkg.version, 'patch'), that.options.gitbook)) {
|
||||||
that.book.log.warn.ln("you should specify a gitbook version to use in your book.json, for example: "+(_.first(pkg.version.split("."))+".x.x"));
|
that.book.log.warn.ln("gitbook version specified in your book.json might be too strict for future patches, \""+(_.first(pkg.version.split("."))+".x.x")+"\" is more adequate");
|
||||||
}
|
}
|
||||||
|
|
||||||
that.options.output = path.resolve(that.options.output || path.join(that.book.root, "_book"));
|
that.options.output = path.resolve(that.options.output || path.join(that.book.root, "_book"));
|
||||||
|
|||||||
+1
-1
@@ -158,7 +158,7 @@ module.exports = {
|
|||||||
.then(function(filepath) {
|
.then(function(filepath) {
|
||||||
// set livereload path
|
// set livereload path
|
||||||
lrPath = filepath;
|
lrPath = filepath;
|
||||||
console.log("Restart after change in files");
|
console.log("Restart after change in file", filepath);
|
||||||
console.log('');
|
console.log('');
|
||||||
return generate();
|
return generate();
|
||||||
})
|
})
|
||||||
|
|||||||
+5
-5
@@ -103,16 +103,16 @@ TemplateEngine.prototype.processBlock = function(blk) {
|
|||||||
return blk.body;
|
return blk.body;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return it as a macro
|
// Return it as a position marker
|
||||||
return "%+%"+blk.id+"%+%";
|
return "@%@"+blk.id+"@%@";
|
||||||
};
|
};
|
||||||
|
|
||||||
// Replace blocks by body after processing
|
// Replace position markers of blocks by body after processing
|
||||||
// This is done to avoid that markdown processer parse the block content
|
// This is done to avoid that markdown/asciidoc processer parse the block content
|
||||||
TemplateEngine.prototype.replaceBlocks = function(content) {
|
TemplateEngine.prototype.replaceBlocks = function(content) {
|
||||||
var that = this;
|
var that = this;
|
||||||
|
|
||||||
return content.replace(/\%\+\%([\s\S]+?)\%\+\%/g, function(match, key) {
|
return content.replace(/\@\%\@([\s\S]+?)\@\%\@/g, function(match, key) {
|
||||||
var blk = that.blocks[key];
|
var blk = that.blocks[key];
|
||||||
if (!blk) return match;
|
if (!blk) return match;
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ var fs = require('./fs');
|
|||||||
var batch = require('./batch');
|
var batch = require('./batch');
|
||||||
var code = require('./code');
|
var code = require('./code');
|
||||||
|
|
||||||
|
var parsableExtensions = require('gitbook-parsers').extensions;
|
||||||
|
|
||||||
// Render a cheerio dom as html
|
// Render a cheerio dom as html
|
||||||
var renderDom = function($, dom, options) {
|
var renderDom = function($, dom, options) {
|
||||||
if (!dom && $._root && $._root.children) {
|
if (!dom && $._root && $._root.children) {
|
||||||
@@ -196,11 +198,19 @@ function normalizeHtml(src, options) {
|
|||||||
var absolutePath = links.join(options.base, parts.pathname);
|
var absolutePath = links.join(options.base, parts.pathname);
|
||||||
var anchor = parts.hash || "";
|
var anchor = parts.hash || "";
|
||||||
|
|
||||||
|
|
||||||
// If is in navigation relative: transform as content
|
// If is in navigation relative: transform as content
|
||||||
if (options.navigation[absolutePath]) {
|
if (options.navigation[absolutePath]) {
|
||||||
absolutePath = options.book.contentLink(absolutePath);
|
absolutePath = options.book.contentLink(absolutePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If md/adoc/rst files is not in summary
|
||||||
|
// or for ebook, signal all files that are outside the summary
|
||||||
|
else if (_.contains(parsableExtensions, path.extname(absolutePath))
|
||||||
|
|| _.contains(['epub', 'pdf', 'mobi'], options.book.options.generator)) {
|
||||||
|
options.book.log.warn.ln("page", options.input, "contains an hyperlink to resource outside spine '"+href+"'");
|
||||||
|
}
|
||||||
|
|
||||||
// Transform as absolute
|
// Transform as absolute
|
||||||
href = links.toAbsolute("/"+absolutePath, options.base, options.output)+anchor;
|
href = links.toAbsolute("/"+absolutePath, options.base, options.output)+anchor;
|
||||||
} else {
|
} else {
|
||||||
@@ -219,7 +229,12 @@ function normalizeHtml(src, options) {
|
|||||||
($(this).attr("class") || "").split(" ")
|
($(this).attr("class") || "").split(" ")
|
||||||
)
|
)
|
||||||
.map(function(cl) {
|
.map(function(cl) {
|
||||||
|
// Markdown
|
||||||
if (cl.search("lang-") === 0) return cl.slice("lang-".length);
|
if (cl.search("lang-") === 0) return cl.slice("lang-".length);
|
||||||
|
|
||||||
|
// Asciidoc
|
||||||
|
if (cl.search("language-") === 0) return cl.slice("language-".length);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
})
|
})
|
||||||
.compact()
|
.compact()
|
||||||
|
|||||||
+5
-5
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "gitbook",
|
"name": "gitbook",
|
||||||
"version": "2.3.0",
|
"version": "2.3.2",
|
||||||
"homepage": "https://www.gitbook.com",
|
"homepage": "https://www.gitbook.com",
|
||||||
"description": "Library and cmd utility to generate GitBooks",
|
"description": "Library and cmd utility to generate GitBooks",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
@@ -12,16 +12,16 @@
|
|||||||
"resolve": "0.6.3",
|
"resolve": "0.6.3",
|
||||||
"fs-extra": "0.16.5",
|
"fs-extra": "0.16.5",
|
||||||
"fstream-ignore": "1.0.2",
|
"fstream-ignore": "1.0.2",
|
||||||
"gitbook-parsers": "0.7.7",
|
"gitbook-parsers": "0.8.1",
|
||||||
"nunjucks": "mozilla/nunjucks#b4351ec0752b102ebd02c5e2cbc2898a6e0e4839",
|
"nunjucks": "mozilla/nunjucks#b4351ec0752b102ebd02c5e2cbc2898a6e0e4839",
|
||||||
"nunjucks-autoescape": "1.0.0",
|
"nunjucks-autoescape": "1.0.0",
|
||||||
"nunjucks-filter": "1.0.0",
|
"nunjucks-filter": "1.0.0",
|
||||||
"i18n": "0.5.0",
|
"i18n": "0.5.0",
|
||||||
"semver": "2.2.1",
|
"semver": "5.0.1",
|
||||||
"npmi": "0.1.1",
|
"npmi": "0.1.1",
|
||||||
"cheerio": "0.19.0",
|
"cheerio": "0.19.0",
|
||||||
"gitbook-plugin-livereload": "0.0.1",
|
"gitbook-plugin-livereload": "0.0.1",
|
||||||
"chokidar": "~1.0.1",
|
"chokidar": "~1.0.5",
|
||||||
"send": "0.2.0",
|
"send": "0.2.0",
|
||||||
"tiny-lr": "0.1.5",
|
"tiny-lr": "0.1.5",
|
||||||
"tmp": "0.0.24",
|
"tmp": "0.0.24",
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
"npm": "2.4.1",
|
"npm": "2.4.1",
|
||||||
"dom-serializer": "0.1.0",
|
"dom-serializer": "0.1.0",
|
||||||
"spawn-cmd": "0.0.2",
|
"spawn-cmd": "0.0.2",
|
||||||
"highlight.js": "8.6.0",
|
"highlight.js": "8.8.0",
|
||||||
"escape-string-regexp": "1.0.3"
|
"escape-string-regexp": "1.0.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ var should = require('should');
|
|||||||
var path = require('path');
|
var path = require('path');
|
||||||
|
|
||||||
var Plugin = require('../lib/plugin');
|
var Plugin = require('../lib/plugin');
|
||||||
|
var parsers = require("gitbook-parsers");
|
||||||
var PLUGINS_ROOT = path.resolve(__dirname, 'plugins');
|
var PLUGINS_ROOT = path.resolve(__dirname, 'plugins');
|
||||||
|
|
||||||
describe('Plugins', function () {
|
describe('Plugins', function () {
|
||||||
@@ -200,5 +201,38 @@ describe('Plugins', function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('Blocks without parsing', function() {
|
||||||
|
var plugin;
|
||||||
|
|
||||||
|
before(function() {
|
||||||
|
plugin = new Plugin(book, "blocks");
|
||||||
|
plugin.load("./blocks", PLUGINS_ROOT);
|
||||||
|
|
||||||
|
return book.plugins.load(plugin);
|
||||||
|
});
|
||||||
|
|
||||||
|
var testTpl = function(markup, str, args, options) {
|
||||||
|
var filetype = parsers.get(markup);
|
||||||
|
|
||||||
|
return book.template.renderString(str, args, options)
|
||||||
|
.then(filetype.page).get('sections').get(0).get('content')
|
||||||
|
.then(book.template.postProcess)
|
||||||
|
};
|
||||||
|
|
||||||
|
it('should correctly process unparsable for markdown', function() {
|
||||||
|
return testTpl('.md', '{% test %}**hello**{% endtest %}')
|
||||||
|
.then(function(content) {
|
||||||
|
content.should.equal("<p>test**hello**test</p>\n");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should correctly process unparsable for asciidoc', function() {
|
||||||
|
return testTpl('.adoc', '{% test %}**hello**{% endtest %}')
|
||||||
|
.then(function(content) {
|
||||||
|
content.should.equal('<div class="paragraph">\n<p>test**hello**test</p>\n</div>');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -3,18 +3,18 @@
|
|||||||
"GLOSSARY": "어휘",
|
"GLOSSARY": "어휘",
|
||||||
"GLOSSARY_INDEX": "색인",
|
"GLOSSARY_INDEX": "색인",
|
||||||
"GLOSSARY_OPEN": "어휘",
|
"GLOSSARY_OPEN": "어휘",
|
||||||
"GITBOOK_LINK": "에 게시 GitBook",
|
"GITBOOK_LINK": "GitBook에 게시",
|
||||||
"SUMMARY": "차례",
|
"SUMMARY": "차례",
|
||||||
"SUMMARY_INTRODUCTION": "소개",
|
"SUMMARY_INTRODUCTION": "소개",
|
||||||
"SUMMARY_TOGGLE": "차례",
|
"SUMMARY_TOGGLE": "차례",
|
||||||
"SEARCH_TOGGLE": "수색",
|
"SEARCH_TOGGLE": "검색",
|
||||||
"SEARCH_PLACEHOLDER": "검색어 입력",
|
"SEARCH_PLACEHOLDER": "검색어 입력",
|
||||||
"FONTSETTINGS_TOGGLE": "글꼴 설정",
|
"FONTSETTINGS_TOGGLE": "글꼴 설정",
|
||||||
"SHARE_TOGGLE": "몫",
|
"SHARE_TOGGLE": "공유",
|
||||||
"SHARE_ON": "공유 {{platform}}",
|
"SHARE_ON": "{{platform}}에 공유",
|
||||||
"FONTSETTINGS_WHITE": "화이트",
|
"FONTSETTINGS_WHITE": "화이트",
|
||||||
"FONTSETTINGS_SEPIA": "Sepia",
|
"FONTSETTINGS_SEPIA": "세피아",
|
||||||
"FONTSETTINGS_NIGHT": "밤",
|
"FONTSETTINGS_NIGHT": "나이트",
|
||||||
"FONTSETTINGS_SANS": "Sans",
|
"FONTSETTINGS_SANS": "고딕",
|
||||||
"FONTSETTINGS_SERIF": "Serif"
|
"FONTSETTINGS_SERIF": "명조"
|
||||||
}
|
}
|
||||||
@@ -39,6 +39,6 @@
|
|||||||
body {
|
body {
|
||||||
.page {
|
.page {
|
||||||
font-family: sans-serif;
|
font-family: sans-serif;
|
||||||
.markdown-content(#333, 1.6);
|
.markdown-content(#000, 1.6);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user