diff options
author | Samy Pesse <samypesse@gmail.com> | 2016-04-23 17:10:16 +0200 |
---|---|---|
committer | Samy Pesse <samypesse@gmail.com> | 2016-04-23 17:10:16 +0200 |
commit | e1fa977b5b1b3c03790de6e2c21ee39ba55d9555 (patch) | |
tree | a1ad4386100b5779ef930845093c14639a3353b5 /lib/json | |
parent | ce95f316b9ce1eac1e615db3540c4d0f30408d63 (diff) | |
download | gitbook-e1fa977b5b1b3c03790de6e2c21ee39ba55d9555.zip gitbook-e1fa977b5b1b3c03790de6e2c21ee39ba55d9555.tar.gz gitbook-e1fa977b5b1b3c03790de6e2c21ee39ba55d9555.tar.bz2 |
Add json encoding utils
Diffstat (limited to 'lib/json')
-rw-r--r-- | lib/json/encodeBook.js | 21 | ||||
-rw-r--r-- | lib/json/encodeBookWithPage.js | 22 | ||||
-rw-r--r-- | lib/json/encodeConfig.js | 12 | ||||
-rw-r--r-- | lib/json/encodeFile.js | 16 | ||||
-rw-r--r-- | lib/json/encodeGlossary.js | 21 | ||||
-rw-r--r-- | lib/json/encodeGlossaryEntry.js | 16 | ||||
-rw-r--r-- | lib/json/encodePage.js | 30 | ||||
-rw-r--r-- | lib/json/encodeReadme.js | 17 | ||||
-rw-r--r-- | lib/json/encodeSummary.js | 20 | ||||
-rw-r--r-- | lib/json/encodeSummaryArticle.js | 18 | ||||
-rw-r--r-- | lib/json/encodeSummaryPart.js | 17 | ||||
-rw-r--r-- | lib/json/index.js | 10 |
12 files changed, 220 insertions, 0 deletions
diff --git a/lib/json/encodeBook.js b/lib/json/encodeBook.js new file mode 100644 index 0000000..eed5e5f --- /dev/null +++ b/lib/json/encodeBook.js @@ -0,0 +1,21 @@ +var encodeSummary = require('./encodeSummary'); +var encodeGlossary = require('./encodeGlossary'); +var encodeReadme = require('./encodeReadme'); +var encodeConfig = require('./encodeConfig'); + +/** + Encode a book to JSON + + @param {Book} + @return {Object} +*/ +function encodeBookToJson(book) { + return { + summary: encodeSummary(book.getSummary()), + glossary: encodeGlossary(book.getGlossary()), + readme: encodeReadme(book.getReadme()), + config: encodeConfig(book.getConfig()) + }; +} + +module.exports = encodeBookToJson; diff --git a/lib/json/encodeBookWithPage.js b/lib/json/encodeBookWithPage.js new file mode 100644 index 0000000..26ab174 --- /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); + result.file = encodeFile(file); + + return result; +} + +module.exports = encodeBookWithPage; diff --git a/lib/json/encodeConfig.js b/lib/json/encodeConfig.js new file mode 100644 index 0000000..195d43b --- /dev/null +++ b/lib/json/encodeConfig.js @@ -0,0 +1,12 @@ +/** + Encode configuration to JSON + + @param {Config} + @return {Object} +*/ +function encodeConfig(config) { + var values = config.getValues(); + return values.toJS(); +} + +module.exports = encodeConfig; diff --git a/lib/json/encodeFile.js b/lib/json/encodeFile.js new file mode 100644 index 0000000..03b3450 --- /dev/null +++ b/lib/json/encodeFile.js @@ -0,0 +1,16 @@ + +/** + Return a JSON representation of a file + + @param {File} file + @return {Object} +*/ +function encodeFileToJson(file) { + return { + path: file.getPath(), + 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..fcaf4d2 --- /dev/null +++ b/lib/json/encodeGlossary.js @@ -0,0 +1,21 @@ +var encodeFile = require('./encodeFileToJson'); +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/encodePage.js b/lib/json/encodePage.js new file mode 100644 index 0000000..d876c78 --- /dev/null +++ b/lib/json/encodePage.js @@ -0,0 +1,30 @@ +/** + 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(); + + // todo: next and prev + } + + 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..0127788 --- /dev/null +++ b/lib/json/encodeReadme.js @@ -0,0 +1,17 @@ +var encodeFile = require('./encodeFileToJson'); + +/** + 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..485d209 --- /dev/null +++ b/lib/json/encodeSummaryArticle.js @@ -0,0 +1,18 @@ + +/** + Encode a SummaryArticle to JSON + + @param {SummaryArticle} + @return {Object} +*/ +function encodeSummaryArticle(article) { + return { + title: article.getTitle(), + level: article.getLevel(), + depth: article.getDepth(), + articles: article.getArticles() + .map(encodeSummaryArticle).toJS() + }; +} + +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..a026a7f --- /dev/null +++ b/lib/json/index.js @@ -0,0 +1,10 @@ + +module.exports = { + encodeBookWithPage: require('./encodeBookWithPage'), + encodeBook: require('./encodeBook'), + encodeFile: require('./encodeFile'), + encodePage: require('./encodePage'), + encodeSummary: require('./encodeSummary'), + encodeReadme: require('./encodeReadme'), + encodeConfig: require('./encodeConfig') +}; |