UNPKG

2.26 kBtext/coffeescriptView Raw
1fs = require('fs')
2path = require('path')
3_ = require('lodash')
4consolidate = require('consolidate')
5
6Metalsmith = require('metalsmith')
7dynamic = require('metalsmith-dynamic')
8markdown = require('metalsmith-markdown')
9permalinks = require('metalsmith-permalinks')
10layouts = require('metalsmith-layouts')
11inplace = require('metalsmith-in-place')
12headings = require('metalsmith-headings')
13Plugins = require('./metalsmith-plugins')
14
15{ defaultPartialsSearch } = require('@resin.io/doxx-utils')
16HbHelper = require('@resin.io/doxx-handlebars-helper')
17
18Nav = require('./nav')
19Dicts = require('./dictionaries')
20SwigHelper = require('./swig-helper')
21{ refToFilename, filenameToRef } = require('./util')
22
23module.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()