summaryrefslogtreecommitdiffstats
path: root/lib/api/encodeNavigation.js
blob: 8e329a18bae981f0df2d7cb418ba6cc832054bc0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
var Immutable = require('immutable');

/**
    Encode an article for next/prev

    @param {Map<String:Page>}
    @param {Article}
    @return {Object}
*/
function encodeArticle(pages, article) {
    var articlePath = article.getPath();

    return {
        path: articlePath,
        title: article.getTitle(),
        level: article.getLevel(),
        exists: (articlePath && pages.has(articlePath)),
        external: article.isExternal()
    };
}

/**
    this.navigation is a deprecated property from GitBook v2

    @param {Output}
    @return {Object}
*/
function encodeNavigation(output) {
    var book = output.getBook();
    var pages = output.getPages();
    var summary = book.getSummary();
    var articles = summary.getArticlesAsList();


    var navigation = articles
        .map(function(article, i) {
            var ref = article.getRef();
            if (!ref) {
                return undefined;
            }

            var prev = articles.get(i - 1);
            var next = articles.get(i + 1);

            return [
                ref,
                {
                    index: i,
                    title: article.getTitle(),
                    introduction: (i === 0),
                    prev: prev? encodeArticle(pages, prev) : undefined,
                    next: next? encodeArticle(pages, next) : undefined,
                    level: article.getLevel()
                }
            ];
        })
        .filter(function(e) {
            return Boolean(e);
        });

    return Immutable.Map(navigation).toJS();
}

module.exports = encodeNavigation;