summaryrefslogtreecommitdiffstats
path: root/lib/generator.js
blob: 9c4a2d384ff9ac55a53b16cdab70fcd61feade22 (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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
var _ = require("lodash");
var path = require("path");
var Q = require("q");
var fs = require("./utils/fs");

var Plugin = require("./plugin");

var BaseGenerator = function(book) {
    this.book = book;

    Object.defineProperty(this, "options", {
        get: function () {
            return this.book.options;
        }
    });

    // Base for assets in plugins
    this.pluginAssetsBase = "book";

    _.bindAll(this);
};

BaseGenerator.prototype.callHook = function(name, data) {
    return this.plugins.hook(name, data);
};

// Prepare the genertor
BaseGenerator.prototype.prepare = function() {
    return this.preparePlugins();
};

BaseGenerator.prototype.preparePlugins = function() {
    var that = this;
    return Plugin.normalize(that.book.plugins)
    .then(function(_plugins) {
        that.plugins = _plugins;
    });
};

// Write a parsed file to the output
BaseGenerator.prototype.writeParsedFile = function(page, input) {
    return Q.reject(new Error("Could not convert "+input));
};

// Copy file to the output (non parsable)
BaseGenerator.prototype.transferFile = function(input) {
    return fs.copy(
        path.join(this.book.root, input),
        path.join(this.options.output, input)
    );
};

// Copy a folder to the output
BaseGenerator.prototype.transferFolder = function(input) {
    return fs.mkdirp(
        path.join(this.book.options.output, input)
    );
};

// Copy the cover picture
BaseGenerator.prototype.copyCover = function() {
    var that = this;

    return Q.all([
        fs.copy(path.join(that.book.root, "cover.jpg"), path.join(that.options.output, "cover.jpg")),
        fs.copy(path.join(that.book.root, "cover_small.jpg"), path.join(that.options.output, "cover_small.jpg"))
    ])
    .fail(function() {
        // If orignaly from multi-lang, try copy from parent
        if (!that.isMultilingual()) return;

        return Q.all([
            fs.copy(path.join(that.book.parentRoot(), "cover.jpg"), path.join(that.options.output, "cover.jpg")),
            fs.copy(path.join(that.book.parentRoot(), "cover_small.jpg"), path.join(that.options.output, "cover_small.jpg"))
        ]);
    })
    .fail(function(err) {
        return Q();
    });
};

// Generate the langs index
BaseGenerator.prototype.langsIndex = function(langs) {
    return Q.reject(new Error("Langs index is not supported in this generator"));
};

// At teh end of the generation
BaseGenerator.prototype.finish = function() {
    return Q.reject(new Error("Could not finish generation"));
};

module.exports = BaseGenerator;