summaryrefslogtreecommitdiffstats
path: root/lib/parse/parsePagesList.js
blob: 8644fa16f9a1e39b3039072d104211982d30bbe6 (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
var Immutable = require('immutable');

var timing = require('../utils/timing');
var Page = require('../models/page');
var walkSummary = require('./walkSummary');
var parsePage = require('./parsePage');

/**
    Parse all pages from a book as an OrderedMap

    @param {Book} book
    @return {Promise<OrderedMap<Page>>}
*/
function parsePagesList(book) {
    var fs = book.getContentFS();
    var summary = book.getSummary();
    var map = Immutable.OrderedMap();

    return timing.measure(
        'parse.listPages',
        walkSummary(summary, function(article) {
            if (!article.isPage()) return;

            var filepath = article.getPath();

            // Is the page ignored?
            if (book.isContentFileIgnored(filepath)) return;

            return fs.statFile(filepath)
            .then(function(file) {
                var page = Page.createForFile(file);
                return parsePage(book, page);
            })
            .then(function(page) {
                map = map.set(filepath, page);
            }, function() {
                // file doesn't exist
            });
        })
        .then(function() {
            return map;
        })
    );
}


module.exports = parsePagesList;