summaryrefslogtreecommitdiffstats
path: root/lib/json
diff options
context:
space:
mode:
authorSamy Pesse <samypesse@gmail.com>2016-04-30 20:15:08 +0200
committerSamy Pesse <samypesse@gmail.com>2016-04-30 20:15:08 +0200
commit36b49c66c6b75515bc84dd678fd52121a313e8d2 (patch)
treebc7e0f703d4557869943ec7f9495cac7a5027d4f /lib/json
parent87db7cf1d412fa6fbd18e9a7e4f4755f2c0c5547 (diff)
parent80b8e340dadc54377ff40500f86b1de631395806 (diff)
downloadgitbook-36b49c66c6b75515bc84dd678fd52121a313e8d2.zip
gitbook-36b49c66c6b75515bc84dd678fd52121a313e8d2.tar.gz
gitbook-36b49c66c6b75515bc84dd678fd52121a313e8d2.tar.bz2
Merge branch 'fixes'
Diffstat (limited to 'lib/json')
-rw-r--r--lib/json/encodeBook.js35
-rw-r--r--lib/json/encodeBookWithPage.js22
-rw-r--r--lib/json/encodeFile.js21
-rw-r--r--lib/json/encodeGlossary.js21
-rw-r--r--lib/json/encodeGlossaryEntry.js16
-rw-r--r--lib/json/encodeOutput.js25
-rw-r--r--lib/json/encodePage.js39
-rw-r--r--lib/json/encodeReadme.js17
-rw-r--r--lib/json/encodeSummary.js20
-rw-r--r--lib/json/encodeSummaryArticle.js27
-rw-r--r--lib/json/encodeSummaryPart.js17
-rw-r--r--lib/json/index.js11
12 files changed, 271 insertions, 0 deletions
diff --git a/lib/json/encodeBook.js b/lib/json/encodeBook.js
new file mode 100644
index 0000000..9bcb6ee
--- /dev/null
+++ b/lib/json/encodeBook.js
@@ -0,0 +1,35 @@
+var extend = require('extend');
+
+var gitbook = require('../gitbook');
+var encodeSummary = require('./encodeSummary');
+var encodeGlossary = require('./encodeGlossary');
+var encodeReadme = require('./encodeReadme');
+
+/**
+ Encode a book to JSON
+
+ @param {Book}
+ @return {Object}
+*/
+function encodeBookToJson(book) {
+ var config = book.getConfig();
+ var language = book.getLanguage();
+
+ var variables = config.getValue('variables', {});
+
+ return {
+ summary: encodeSummary(book.getSummary()),
+ glossary: encodeGlossary(book.getGlossary()),
+ readme: encodeReadme(book.getReadme()),
+ config: book.getConfig().getValues().toJS(),
+ gitbook: {
+ version: gitbook.version,
+ time: gitbook.START_TIME
+ },
+ book: extend({
+ language: language? language : undefined
+ }, variables.toJS())
+ };
+}
+
+module.exports = encodeBookToJson;
diff --git a/lib/json/encodeBookWithPage.js b/lib/json/encodeBookWithPage.js
new file mode 100644
index 0000000..5600a82
--- /dev/null
+++ b/lib/json/encodeBookWithPage.js
@@ -0,0 +1,22 @@
+var encodeBook = require('./encodeBook');
+var encodePage = require('./encodePage');
+var encodeFile = require('./encodeFile');
+
+/**
+ Return a JSON representation of a book with a specific file
+
+ @param {Book} output
+ @param {Page} page
+ @return {Object}
+*/
+function encodeBookWithPage(book, page) {
+ var file = page.getFile();
+
+ var result = encodeBook(book);
+ result.page = encodePage(page, book.getSummary());
+ result.file = encodeFile(file);
+
+ return result;
+}
+
+module.exports = encodeBookWithPage;
diff --git a/lib/json/encodeFile.js b/lib/json/encodeFile.js
new file mode 100644
index 0000000..d2c9e8a
--- /dev/null
+++ b/lib/json/encodeFile.js
@@ -0,0 +1,21 @@
+
+/**
+ Return a JSON representation of a file
+
+ @param {File} file
+ @return {Object}
+*/
+function encodeFileToJson(file) {
+ var filePath = file.getPath();
+ if (!filePath) {
+ return undefined;
+ }
+
+ return {
+ path: filePath,
+ mtime: file.getMTime(),
+ type: file.getType()
+ };
+}
+
+module.exports = encodeFileToJson;
diff --git a/lib/json/encodeGlossary.js b/lib/json/encodeGlossary.js
new file mode 100644
index 0000000..e9bcfc9
--- /dev/null
+++ b/lib/json/encodeGlossary.js
@@ -0,0 +1,21 @@
+var encodeFile = require('./encodeFile');
+var encodeGlossaryEntry = require('./encodeGlossaryEntry');
+
+/**
+ Encode a glossary to JSON
+
+ @param {Glossary}
+ @return {Object}
+*/
+function encodeGlossary(glossary) {
+ var file = glossary.getFile();
+ var entries = glossary.getEntries();
+
+ return {
+ file: encodeFile(file),
+ entries: entries
+ .map(encodeGlossaryEntry).toJS()
+ };
+}
+
+module.exports = encodeGlossary;
diff --git a/lib/json/encodeGlossaryEntry.js b/lib/json/encodeGlossaryEntry.js
new file mode 100644
index 0000000..d163f45
--- /dev/null
+++ b/lib/json/encodeGlossaryEntry.js
@@ -0,0 +1,16 @@
+
+/**
+ Encode a SummaryArticle to JSON
+
+ @param {GlossaryEntry}
+ @return {Object}
+*/
+function encodeGlossaryEntry(entry) {
+ return {
+ id: entry.getID(),
+ name: entry.getName(),
+ description: entry.getDescription()
+ };
+}
+
+module.exports = encodeGlossaryEntry;
diff --git a/lib/json/encodeOutput.js b/lib/json/encodeOutput.js
new file mode 100644
index 0000000..9054124
--- /dev/null
+++ b/lib/json/encodeOutput.js
@@ -0,0 +1,25 @@
+var encodeBook = require('./encodeBook');
+
+/**
+ Encode an output to JSON
+
+ @param {Output}
+ @return {Object}
+*/
+function encodeOutputToJson(output) {
+ var book = output.getBook();
+ var generator = output.getGenerator();
+ var options = output.getOptions();
+
+ var result = encodeBook(book);
+
+ result.output = {
+ name: generator
+ };
+
+ result.options = options.toJS();
+
+ return result;
+}
+
+module.exports = encodeOutputToJson;
diff --git a/lib/json/encodePage.js b/lib/json/encodePage.js
new file mode 100644
index 0000000..be92117
--- /dev/null
+++ b/lib/json/encodePage.js
@@ -0,0 +1,39 @@
+var encodeSummaryArticle = require('./encodeSummaryArticle');
+
+/**
+ Return a JSON representation of a page
+
+ @param {Page} page
+ @param {Summary} summary
+ @return {Object}
+*/
+function encodePage(page, summary) {
+ var file = page.getFile();
+ var attributes = page.getAttributes();
+ var article = summary.getByPath(file.getPath());
+
+ var result = attributes.toJS();
+
+ if (article) {
+ result.title = article.getTitle();
+ result.level = article.getLevel();
+ result.depth = article.getDepth();
+
+ var nextArticle = summary.getNextArticle(article);
+ if (nextArticle) {
+ result.next = encodeSummaryArticle(nextArticle);
+ }
+
+ var prevArticle = summary.getPrevArticle(article);
+ if (prevArticle) {
+ result.previous = encodeSummaryArticle(prevArticle);
+ }
+ }
+
+ result.content = page.getContent();
+ result.dir = page.getDir();
+
+ return result;
+}
+
+module.exports = encodePage;
diff --git a/lib/json/encodeReadme.js b/lib/json/encodeReadme.js
new file mode 100644
index 0000000..96176a3
--- /dev/null
+++ b/lib/json/encodeReadme.js
@@ -0,0 +1,17 @@
+var encodeFile = require('./encodeFile');
+
+/**
+ Encode a readme to JSON
+
+ @param {Readme}
+ @return {Object}
+*/
+function encodeReadme(readme) {
+ var file = readme.getFile();
+
+ return {
+ file: encodeFile(file)
+ };
+}
+
+module.exports = encodeReadme;
diff --git a/lib/json/encodeSummary.js b/lib/json/encodeSummary.js
new file mode 100644
index 0000000..97db910
--- /dev/null
+++ b/lib/json/encodeSummary.js
@@ -0,0 +1,20 @@
+var encodeFile = require('./encodeFile');
+var encodeSummaryPart = require('./encodeSummaryPart');
+
+/**
+ Encode a summary to JSON
+
+ @param {Summary}
+ @return {Object}
+*/
+function encodeSummary(summary) {
+ var file = summary.getFile();
+ var parts = summary.getParts();
+
+ return {
+ file: encodeFile(file),
+ parts: parts.map(encodeSummaryPart).toJS()
+ };
+}
+
+module.exports = encodeSummary;
diff --git a/lib/json/encodeSummaryArticle.js b/lib/json/encodeSummaryArticle.js
new file mode 100644
index 0000000..987e44a
--- /dev/null
+++ b/lib/json/encodeSummaryArticle.js
@@ -0,0 +1,27 @@
+
+/**
+ Encode a SummaryArticle to JSON
+
+ @param {SummaryArticle}
+ @return {Object}
+*/
+function encodeSummaryArticle(article, recursive) {
+ var articles = undefined;
+ if (recursive !== false) {
+ articles = article.getArticles()
+ .map(encodeSummaryArticle)
+ .toJS();
+ }
+
+ return {
+ title: article.getTitle(),
+ level: article.getLevel(),
+ depth: article.getDepth(),
+ anchor: article.getAnchor(),
+ url: article.getUrl(),
+ path: article.getPath(),
+ articles: articles
+ };
+}
+
+module.exports = encodeSummaryArticle;
diff --git a/lib/json/encodeSummaryPart.js b/lib/json/encodeSummaryPart.js
new file mode 100644
index 0000000..a5e7218
--- /dev/null
+++ b/lib/json/encodeSummaryPart.js
@@ -0,0 +1,17 @@
+var encodeSummaryArticle = require('./encodeSummaryArticle');
+
+/**
+ Encode a SummaryPart to JSON
+
+ @param {SummaryPart}
+ @return {Object}
+*/
+function encodeSummaryPart(part) {
+ return {
+ title: part.getTitle(),
+ articles: part.getArticles()
+ .map(encodeSummaryArticle).toJS()
+ };
+}
+
+module.exports = encodeSummaryPart;
diff --git a/lib/json/index.js b/lib/json/index.js
new file mode 100644
index 0000000..39cac99
--- /dev/null
+++ b/lib/json/index.js
@@ -0,0 +1,11 @@
+
+module.exports = {
+ encodeOutput: require('./encodeOutput'),
+ encodeBookWithPage: require('./encodeBookWithPage'),
+ encodeBook: require('./encodeBook'),
+ encodeFile: require('./encodeFile'),
+ encodePage: require('./encodePage'),
+ encodeSummary: require('./encodeSummary'),
+ encodeSummaryArticle: require('./encodeSummaryArticle'),
+ encodeReadme: require('./encodeReadme')
+};