summaryrefslogtreecommitdiffstats
path: root/lib/json
diff options
context:
space:
mode:
authorSamy Pesse <samypesse@gmail.com>2016-04-23 17:10:16 +0200
committerSamy Pesse <samypesse@gmail.com>2016-04-23 17:10:16 +0200
commite1fa977b5b1b3c03790de6e2c21ee39ba55d9555 (patch)
treea1ad4386100b5779ef930845093c14639a3353b5 /lib/json
parentce95f316b9ce1eac1e615db3540c4d0f30408d63 (diff)
downloadgitbook-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.js21
-rw-r--r--lib/json/encodeBookWithPage.js22
-rw-r--r--lib/json/encodeConfig.js12
-rw-r--r--lib/json/encodeFile.js16
-rw-r--r--lib/json/encodeGlossary.js21
-rw-r--r--lib/json/encodeGlossaryEntry.js16
-rw-r--r--lib/json/encodePage.js30
-rw-r--r--lib/json/encodeReadme.js17
-rw-r--r--lib/json/encodeSummary.js20
-rw-r--r--lib/json/encodeSummaryArticle.js18
-rw-r--r--lib/json/encodeSummaryPart.js17
-rw-r--r--lib/json/index.js10
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')
+};