1 | fs = require('fs')
|
2 | path = require('path')
|
3 | _ = require('lodash')
|
4 | consolidate = require('consolidate')
|
5 |
|
6 | Metalsmith = require('metalsmith')
|
7 | dynamic = require('metalsmith-dynamic')
|
8 | markdown = require('metalsmith-markdown')
|
9 | permalinks = require('metalsmith-permalinks')
|
10 | layouts = require('metalsmith-layouts')
|
11 | inplace = require('metalsmith-in-place')
|
12 | headings = require('metalsmith-headings')
|
13 | Plugins = require('./metalsmith-plugins')
|
14 |
|
15 | { defaultPartialsSearch } = require('@resin.io/doxx-utils')
|
16 | HbHelper = require('@resin.io/doxx-handlebars-helper')
|
17 |
|
18 | Nav = require('./nav')
|
19 | Dicts = require('./dictionaries')
|
20 | SwigHelper = require('./swig-helper')
|
21 | { refToFilename, filenameToRef } = require('./util')
|
22 |
|
23 | module.exports = (cb) ->
|
24 | config = this.config
|
25 |
|
26 | navTree = null
|
27 | if config.parseNav
|
28 | navTree = Nav.parse(config)
|
29 |
|
30 | plugins = Plugins(config, navTree)
|
31 |
|
32 | SwigHelper.register(consolidate, config)
|
33 | HbHelper.registerConsolidate(consolidate, {
|
34 | beforeRun: ->
|
35 | if not this.dynamic
|
36 | console.warn("Warning! Using import in non-dynamic page #{this.ref}.")
|
37 | })
|
38 |
|
39 | console.log('Building HTML...')
|
40 | metalsmith = Metalsmith(config.rootDir)
|
41 | .source(config.sourceDir)
|
42 | .destination(config.destDir)
|
43 |
|
44 | use = (condition, plugin, pluginArgs...) ->
|
45 | if condition
|
46 | metalsmith = metalsmith.use(plugin(pluginArgs...))
|
47 |
|
48 | use(true, plugins.skipPrivate)
|
49 |
|
50 | use(true, defaultPartialsSearch)
|
51 | use(true, dynamic, {
|
52 | dictionaries: Dicts(config)
|
53 | populateFields: [ '$partials_search' ]
|
54 | tokenizeFields: [ '$switch_text' ]
|
55 | refToFilename, filenameToRef
|
56 | })
|
57 |
|
58 | use(true, plugins.populateFileMeta)
|
59 |
|
60 | use(config.parseNav, plugins.parseNav)
|
61 | use(config.parseNav, plugins.populateFileNavMeta)
|
62 | use(config.serializeNav, plugins.serializeNav)
|
63 |
|
64 | use(true, inplace, {
|
65 | engine: 'handlebars'
|
66 | pattern: '**/*.' + config.docsExt
|
67 | partials: config.partialsDir
|
68 | })
|
69 | use(config.buildLunrIndex, plugins.buildSearchIndex)
|
70 |
|
71 | use(true, markdown)
|
72 | use(true, permalinks)
|
73 |
|
74 | use(true, headings, 'h2')
|
75 |
|
76 | use(true, layouts, {
|
77 | engine: 'swig'
|
78 | directory: config.templatesDir
|
79 | default: config.defaultTemplate
|
80 | locals: this.getLocals({ nav: navTree })
|
81 | })
|
82 |
|
83 | metalsmith.build (err) ->
|
84 | return cb(err) if err
|
85 | console.log('Done')
|
86 | cb()
|