diff options
Diffstat (limited to 'lib/json')
-rw-r--r-- | lib/json/encodeBook.js | 35 | ||||
-rw-r--r-- | lib/json/encodeBookWithPage.js | 22 | ||||
-rw-r--r-- | lib/json/encodeFile.js | 21 | ||||
-rw-r--r-- | lib/json/encodeGlossary.js | 21 | ||||
-rw-r--r-- | lib/json/encodeGlossaryEntry.js | 16 | ||||
-rw-r--r-- | lib/json/encodeOutput.js | 25 | ||||
-rw-r--r-- | lib/json/encodePage.js | 39 | ||||
-rw-r--r-- | lib/json/encodeReadme.js | 17 | ||||
-rw-r--r-- | lib/json/encodeSummary.js | 20 | ||||
-rw-r--r-- | lib/json/encodeSummaryArticle.js | 27 | ||||
-rw-r--r-- | lib/json/encodeSummaryPart.js | 17 | ||||
-rw-r--r-- | lib/json/index.js | 11 |
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') +}; |