summaryrefslogtreecommitdiffstats
path: root/packages/gitbook/src/json
diff options
context:
space:
mode:
authorSamy Pesse <samypesse@gmail.com>2016-10-06 20:08:47 +0200
committerSamy Pesse <samypesse@gmail.com>2016-10-06 20:08:47 +0200
commit58ae96b7f6a5cd3b7c1fd1d650fcaae4686f578d (patch)
treec1555e51d2d399062d52a8b1df8eda1852a2bf7c /packages/gitbook/src/json
parent1354582c4e0d61c7608965f36b3c27ee3e39dc78 (diff)
downloadgitbook-58ae96b7f6a5cd3b7c1fd1d650fcaae4686f578d.zip
gitbook-58ae96b7f6a5cd3b7c1fd1d650fcaae4686f578d.tar.gz
gitbook-58ae96b7f6a5cd3b7c1fd1d650fcaae4686f578d.tar.bz2
Add "url" to summary articles and files in json representation
Diffstat (limited to 'packages/gitbook/src/json')
-rw-r--r--packages/gitbook/src/json/encodeBook.js39
-rw-r--r--packages/gitbook/src/json/encodeBookWithPage.js22
-rw-r--r--packages/gitbook/src/json/encodeFile.js10
-rw-r--r--packages/gitbook/src/json/encodeGlossary.js15
-rw-r--r--packages/gitbook/src/json/encodeGlossaryEntry.js10
-rw-r--r--packages/gitbook/src/json/encodeLanguages.js13
-rw-r--r--packages/gitbook/src/json/encodeOutput.js25
-rw-r--r--packages/gitbook/src/json/encodeOutputWithPage.js25
-rw-r--r--packages/gitbook/src/json/encodePage.js15
-rw-r--r--packages/gitbook/src/json/encodeReadme.js11
-rw-r--r--packages/gitbook/src/json/encodeState.js42
-rw-r--r--packages/gitbook/src/json/encodeSummary.js11
-rw-r--r--packages/gitbook/src/json/encodeSummaryArticle.js10
-rw-r--r--packages/gitbook/src/json/encodeSummaryPart.js12
-rw-r--r--packages/gitbook/src/json/index.js17
15 files changed, 108 insertions, 169 deletions
diff --git a/packages/gitbook/src/json/encodeBook.js b/packages/gitbook/src/json/encodeBook.js
deleted file mode 100644
index c5632d2..0000000
--- a/packages/gitbook/src/json/encodeBook.js
+++ /dev/null
@@ -1,39 +0,0 @@
-const extend = require('extend');
-
-const gitbook = require('../gitbook');
-const encodeSummary = require('./encodeSummary');
-const encodeGlossary = require('./encodeGlossary');
-const encodeReadme = require('./encodeReadme');
-const encodeLanguages = require('./encodeLanguages');
-
-/**
- * Encode a book to JSON
- *
- * @param {Book}
- * @return {Object}
- */
-function encodeBookToJson(book) {
- const config = book.getConfig();
- const language = book.getLanguage();
-
- const variables = config.getValue('variables', {});
-
- return {
- summary: encodeSummary(book.getSummary()),
- glossary: encodeGlossary(book.getGlossary()),
- readme: encodeReadme(book.getReadme()),
- config: book.getConfig().getValues().toJS(),
-
- languages: book.isMultilingual() ? encodeLanguages(book.getLanguages()) : undefined,
-
- gitbook: {
- version: gitbook.version,
- time: gitbook.START_TIME
- },
- book: extend({
- language: language ? language : undefined
- }, variables.toJS())
- };
-}
-
-module.exports = encodeBookToJson;
diff --git a/packages/gitbook/src/json/encodeBookWithPage.js b/packages/gitbook/src/json/encodeBookWithPage.js
deleted file mode 100644
index f593af2..0000000
--- a/packages/gitbook/src/json/encodeBookWithPage.js
+++ /dev/null
@@ -1,22 +0,0 @@
-const encodeBook = require('./encodeBook');
-const encodePage = require('./encodePage');
-const 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) {
- const file = page.getFile();
-
- const result = encodeBook(book);
- result.page = encodePage(page, book.getSummary());
- result.file = encodeFile(file);
-
- return result;
-}
-
-module.exports = encodeBookWithPage;
diff --git a/packages/gitbook/src/json/encodeFile.js b/packages/gitbook/src/json/encodeFile.js
index 1f41228..2295ac1 100644
--- a/packages/gitbook/src/json/encodeFile.js
+++ b/packages/gitbook/src/json/encodeFile.js
@@ -2,11 +2,11 @@
/**
* Return a JSON representation of a file
*
- * @param {File} file
- * @param {String} url?
- * @return {Object} json
+ * @param {File} file
+ * @param {URIIndex} urls
+ * @return {JSON} json
*/
-function encodeFileToJson(file, url) {
+function encodeFileToJson(file, urls) {
const filePath = file.getPath();
if (!filePath) {
return undefined;
@@ -16,7 +16,7 @@ function encodeFileToJson(file, url) {
path: filePath,
mtime: file.getMTime(),
type: file.getType(),
- url
+ url: urls.resolveToURL(filePath)
};
}
diff --git a/packages/gitbook/src/json/encodeGlossary.js b/packages/gitbook/src/json/encodeGlossary.js
index 6bdd683..d82bb62 100644
--- a/packages/gitbook/src/json/encodeGlossary.js
+++ b/packages/gitbook/src/json/encodeGlossary.js
@@ -2,17 +2,18 @@ const encodeFile = require('./encodeFile');
const encodeGlossaryEntry = require('./encodeGlossaryEntry');
/**
- Encode a glossary to JSON
-
- @param {Glossary}
- @return {Object}
-*/
-function encodeGlossary(glossary) {
+ * Encode a glossary to JSON
+ *
+ * @param {Glossary} glossary
+ * @param {URIIndex} urls
+ * @return {JSON} json
+ */
+function encodeGlossary(glossary, urls) {
const file = glossary.getFile();
const entries = glossary.getEntries();
return {
- file: encodeFile(file),
+ file: encodeFile(file, urls),
entries: entries
.map(encodeGlossaryEntry).toJS()
};
diff --git a/packages/gitbook/src/json/encodeGlossaryEntry.js b/packages/gitbook/src/json/encodeGlossaryEntry.js
index d163f45..52e13c3 100644
--- a/packages/gitbook/src/json/encodeGlossaryEntry.js
+++ b/packages/gitbook/src/json/encodeGlossaryEntry.js
@@ -1,10 +1,10 @@
/**
- Encode a SummaryArticle to JSON
-
- @param {GlossaryEntry}
- @return {Object}
-*/
+ * Encode a SummaryArticle to JSON
+ *
+ * @param {GlossaryEntry} entry
+ * @return {JSON} json
+ */
function encodeGlossaryEntry(entry) {
return {
id: entry.getID(),
diff --git a/packages/gitbook/src/json/encodeLanguages.js b/packages/gitbook/src/json/encodeLanguages.js
index fc7487b..e1ef2ef 100644
--- a/packages/gitbook/src/json/encodeLanguages.js
+++ b/packages/gitbook/src/json/encodeLanguages.js
@@ -1,17 +1,18 @@
const encodeFile = require('./encodeFile');
/**
- Encode a languages listing to JSON
-
- @param {Languages}
- @return {Object}
+ * Encode a languages listing to JSON
+ *
+ * @param {Languages} languages
+ * @param {URIIndex} urls
+ * @return {JSON} json
*/
-function encodeLanguages(languages) {
+function encodeLanguages(languages, urls) {
const file = languages.getFile();
const list = languages.getList();
return {
- file: encodeFile(file),
+ file: encodeFile(file, urls),
list: list
.valueSeq()
.map(function(lang) {
diff --git a/packages/gitbook/src/json/encodeOutput.js b/packages/gitbook/src/json/encodeOutput.js
deleted file mode 100644
index 31e5757..0000000
--- a/packages/gitbook/src/json/encodeOutput.js
+++ /dev/null
@@ -1,25 +0,0 @@
-const encodeBook = require('./encodeBook');
-
-/**
- * Encode an output to JSON
- *
- * @param {Output}
- * @return {Object}
- */
-function encodeOutputToJson(output) {
- const book = output.getBook();
- const generator = output.getGenerator();
- const options = output.getOptions();
-
- const result = encodeBook(book);
-
- result.output = {
- name: generator
- };
-
- result.options = options.toJS();
-
- return result;
-}
-
-module.exports = encodeOutputToJson;
diff --git a/packages/gitbook/src/json/encodeOutputWithPage.js b/packages/gitbook/src/json/encodeOutputWithPage.js
deleted file mode 100644
index e6cb0c5..0000000
--- a/packages/gitbook/src/json/encodeOutputWithPage.js
+++ /dev/null
@@ -1,25 +0,0 @@
-const resolveFileToURL = require('../output/helper/resolveFileToURL');
-
-const encodeOutput = require('./encodeOutput');
-const encodePage = require('./encodePage');
-const encodeFile = require('./encodeFile');
-
-/**
- * Return a JSON representation of a book with a specific file
- *
- * @param {Book} output
- * @param {Page} page
- * @return {Object}
- */
-function encodeOutputWithPage(output, page) {
- const file = page.getFile();
- const book = output.getBook();
-
- const result = encodeOutput(output);
- result.page = encodePage(page, book.getSummary());
- result.file = encodeFile(file, resolveFileToURL(output, file.getPath()));
-
- return result;
-}
-
-module.exports = encodeOutputWithPage;
diff --git a/packages/gitbook/src/json/encodePage.js b/packages/gitbook/src/json/encodePage.js
index 0d31d7e..6610308 100644
--- a/packages/gitbook/src/json/encodePage.js
+++ b/packages/gitbook/src/json/encodePage.js
@@ -1,13 +1,14 @@
const encodeSummaryArticle = require('./encodeSummaryArticle');
/**
- * Return a JSON representation of a page
+ * Return a JSON representation of a page.
*
- * @param {Page} page
- * @param {Summary} summary
- * @return {Object} json
+ * @param {Page} page
+ * @param {Summary} summary
+ * @param {URIIndex} urls
+ * @return {JSON} json
*/
-function encodePage(page, summary) {
+function encodePage(page, summary, urls) {
const file = page.getFile();
const attributes = page.getAttributes();
const article = summary.getByPath(file.getPath());
@@ -21,12 +22,12 @@ function encodePage(page, summary) {
const nextArticle = summary.getNextArticle(article);
if (nextArticle) {
- result.next = encodeSummaryArticle(nextArticle);
+ result.next = encodeSummaryArticle(nextArticle, urls, false);
}
const prevArticle = summary.getPrevArticle(article);
if (prevArticle) {
- result.previous = encodeSummaryArticle(prevArticle);
+ result.previous = encodeSummaryArticle(prevArticle, urls, false);
}
}
diff --git a/packages/gitbook/src/json/encodeReadme.js b/packages/gitbook/src/json/encodeReadme.js
index 5fe5a63..dff81cf 100644
--- a/packages/gitbook/src/json/encodeReadme.js
+++ b/packages/gitbook/src/json/encodeReadme.js
@@ -1,16 +1,17 @@
const encodeFile = require('./encodeFile');
/**
- * Encode a readme to JSON
+ * Encode a readme to JSON.
*
- * @param {Readme}
- * @return {Object}
+ * @param {Readme} readme
+ * @param {URIIndex} urls
+ * @return {JSON} json
*/
-function encodeReadme(readme) {
+function encodeReadme(readme, urls) {
const file = readme.getFile();
return {
- file: encodeFile(file)
+ file: encodeFile(file, urls)
};
}
diff --git a/packages/gitbook/src/json/encodeState.js b/packages/gitbook/src/json/encodeState.js
new file mode 100644
index 0000000..d264835
--- /dev/null
+++ b/packages/gitbook/src/json/encodeState.js
@@ -0,0 +1,42 @@
+const gitbook = require('../gitbook');
+const encodeSummary = require('./encodeSummary');
+const encodeGlossary = require('./encodeGlossary');
+const encodeReadme = require('./encodeReadme');
+const encodeLanguages = require('./encodeLanguages');
+const encodePage = require('./encodePage');
+const encodeFile = require('./encodeFile');
+
+/**
+ * Encode context to JSON from an output instance.
+ * This JSON representation is used as initial state for the redux store.
+ *
+ * @param {Output} output
+ * @param {Page} page
+ * @return {JSON}
+ */
+function encodeStateToJSON(output, page) {
+ const book = output.getBook();
+ const urls = output.getURLIndex();
+ const file = page.getFile();
+
+ return {
+ output: {
+ name: output.getGenerator()
+ },
+ gitbook: {
+ version: gitbook.version,
+ time: gitbook.START_TIME
+ },
+
+ summary: encodeSummary(book.getSummary(), urls),
+ glossary: encodeGlossary(book.getGlossary(), urls),
+ readme: encodeReadme(book.getReadme(), urls),
+ config: book.getConfig().getValues().toJS(),
+ languages: book.isMultilingual() ? encodeLanguages(book.getLanguages()) : undefined,
+
+ page: encodePage(page, book.getSummary(), urls),
+ file: encodeFile(file, urls)
+ };
+}
+
+module.exports = encodeStateToJSON;
diff --git a/packages/gitbook/src/json/encodeSummary.js b/packages/gitbook/src/json/encodeSummary.js
index 0a9dbe7..8380379 100644
--- a/packages/gitbook/src/json/encodeSummary.js
+++ b/packages/gitbook/src/json/encodeSummary.js
@@ -4,16 +4,19 @@ const encodeSummaryPart = require('./encodeSummaryPart');
/**
* Encode a summary to JSON
*
- * @param {Summary}
+ * @param {Summary} summary
+ * @param {URIIndex} urls
* @return {Object}
*/
-function encodeSummary(summary) {
+function encodeSummary(summary, urls) {
const file = summary.getFile();
const parts = summary.getParts();
return {
- file: encodeFile(file),
- parts: parts.map(encodeSummaryPart).toJS()
+ file: encodeFile(file, urls),
+ parts: parts
+ .map(part => encodeSummaryPart(part, urls))
+ .toJS()
};
}
diff --git a/packages/gitbook/src/json/encodeSummaryArticle.js b/packages/gitbook/src/json/encodeSummaryArticle.js
index b6d7d9f..0fb6368 100644
--- a/packages/gitbook/src/json/encodeSummaryArticle.js
+++ b/packages/gitbook/src/json/encodeSummaryArticle.js
@@ -2,14 +2,16 @@
/**
* Encode a SummaryArticle to JSON
*
- * @param {SummaryArticle}
+ * @param {SummaryArticle} article
+ * @param {URIIndex} urls
+ * @param {Boolean} recursive
* @return {Object}
*/
-function encodeSummaryArticle(article, recursive) {
+function encodeSummaryArticle(article, urls, recursive) {
let articles = undefined;
if (recursive !== false) {
articles = article.getArticles()
- .map(encodeSummaryArticle)
+ .map(innerArticle => encodeSummaryArticle(innerArticle, urls, recursive))
.toJS();
}
@@ -18,7 +20,7 @@ function encodeSummaryArticle(article, recursive) {
level: article.getLevel(),
depth: article.getDepth(),
anchor: article.getAnchor(),
- url: article.getUrl(),
+ url: urls.resolveToURL(article.getPath() || article.getUrl()),
path: article.getPath(),
ref: article.getRef(),
articles
diff --git a/packages/gitbook/src/json/encodeSummaryPart.js b/packages/gitbook/src/json/encodeSummaryPart.js
index 9ff3583..fbcdc4c 100644
--- a/packages/gitbook/src/json/encodeSummaryPart.js
+++ b/packages/gitbook/src/json/encodeSummaryPart.js
@@ -1,16 +1,18 @@
const encodeSummaryArticle = require('./encodeSummaryArticle');
/**
- * Encode a SummaryPart to JSON
+ * Encode a SummaryPart to JSON.
*
- * @param {SummaryPart}
- * @return {Object}
+ * @param {SummaryPart} part
+ * @param {URIIndex} urls
+ * @return {JSON} json
*/
-function encodeSummaryPart(part) {
+function encodeSummaryPart(part, urls) {
return {
title: part.getTitle(),
articles: part.getArticles()
- .map(encodeSummaryArticle).toJS()
+ .map(article => encodeSummaryArticle(article, urls))
+ .toJS()
};
}
diff --git a/packages/gitbook/src/json/index.js b/packages/gitbook/src/json/index.js
index 3b68f5e..49ab195 100644
--- a/packages/gitbook/src/json/index.js
+++ b/packages/gitbook/src/json/index.js
@@ -1,13 +1,10 @@
module.exports = {
- encodeOutput: require('./encodeOutput'),
- encodeBookWithPage: require('./encodeBookWithPage'),
- encodeOutputWithPage: require('./encodeOutputWithPage'),
- encodeBook: require('./encodeBook'),
- encodeFile: require('./encodeFile'),
- encodePage: require('./encodePage'),
- encodeSummary: require('./encodeSummary'),
- encodeSummaryArticle: require('./encodeSummaryArticle'),
- encodeReadme: require('./encodeReadme'),
- encodeLanguages: require('./encodeLanguages')
+ encodeState: require('./encodeState'),
+ encodeFile: require('./encodeFile'),
+ encodePage: require('./encodePage'),
+ encodeSummary: require('./encodeSummary'),
+ encodeSummaryArticle: require('./encodeSummaryArticle'),
+ encodeReadme: require('./encodeReadme'),
+ encodeLanguages: require('./encodeLanguages')
};