summaryrefslogtreecommitdiffstats
path: root/lib/api/decodePage.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/api/decodePage.js')
-rw-r--r--lib/api/decodePage.js44
1 files changed, 44 insertions, 0 deletions
diff --git a/lib/api/decodePage.js b/lib/api/decodePage.js
new file mode 100644
index 0000000..c85dd1b
--- /dev/null
+++ b/lib/api/decodePage.js
@@ -0,0 +1,44 @@
+var deprecate = require('./deprecate');
+
+/**
+ Decode changes from a JS API to a page object.
+ Only the content can be edited by plugin's hooks.
+
+ @param {Output} output
+ @param {Page} page: page instance to edit
+ @param {Object} result: result from API
+ @return {Page}
+*/
+function decodePage(output, page, result) {
+ var originalContent = page.getContent();
+
+ // No returned value
+ // Existing content will be used
+ if (!result) {
+ return page;
+ }
+
+ deprecate.disable('page.sections');
+
+ // GitBook 3
+ // Use returned page.content if different from original content
+ if (result.content != originalContent) {
+ page = page.set('content', result.content);
+ }
+
+ // GitBook 2 compatibility
+ // Finally, use page.sections
+ else if (result.sections) {
+ page = page.set('content',
+ result.sections.map(function(section) {
+ return section.content;
+ }).join('\n')
+ );
+ }
+
+ deprecate.enable('page.sections');
+
+ return page;
+}
+
+module.exports = decodePage;