UNPKG

2.95 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')
13prefixoid = require('metalsmith-prefixoid')
14Plugins = require('./metalsmith-plugins')
15
16{ defaultPartialsSearch } = require('@resin.io/doxx-utils')
17HbHelper = require('@resin.io/doxx-handlebars-helper')
18
19require('handlebars-helpers')({
20 handlebars: HbHelper.Handlebars
21})
22
23require('./extra-handlebars-helpers')({
24 handlebars: HbHelper.Handlebars
25})
26
27Nav = require('./nav')
28Dicts = require('./dictionaries')
29SwigHelper = require('./swig-helper')
30{ refToFilename, filenameToRef } = require('./util')
31
32module.exports = (cb) ->
33 config = this.config
34
35 navTree = null
36 if config.parseNav
37 navTree = Nav.parse(config)
38
39 plugins = Plugins(config, navTree)
40
41 SwigHelper.register(consolidate, config)
42 HbHelper.registerConsolidate(consolidate, {
43 beforeRun: ->
44 if not this.dynamic
45 console.warn("Warning! Using import in non-dynamic page #{this.ref}.")
46 })
47
48 console.log('Building HTML...')
49 metalsmith = Metalsmith(config.rootDir)
50 .source(config.sourceDir)
51 .destination(config.destDir)
52
53 use = (condition, plugin, pluginArgs...) ->
54 if condition
55 metalsmith = metalsmith.use(plugin(pluginArgs...))
56
57 use(true, plugins.skipPrivate)
58
59 use(true, defaultPartialsSearch)
60 use(true, dynamic, {
61 dictionaries: Dicts(config)
62 populateFields: [ '$partials_search' ]
63 tokenizeFields: [ '$switch_text' ]
64 refToFilename, filenameToRef
65 })
66
67 use(true, plugins.populateFileMeta)
68
69 use(config.parseNav, plugins.parseNav)
70 use(config.parseNav, plugins.populateFileNavMeta)
71 use(config.serializeNav, plugins.serializeNav)
72
73 use(true, inplace, {
74 engine: 'handlebars'
75 pattern: '**/*.' + config.docsExt
76 partials: config.partialsDir
77 })
78 use(config.buildLunrIndex, plugins.buildSearchIndex)
79
80 use(true, markdown)
81 use(true, permalinks)
82
83 use(true, headings, 'h2')
84
85 use(true, layouts, {
86 engine: 'swig'
87 directory: config.templatesDir
88 default: config.defaultTemplate
89 locals: this.getLocals({ nav: navTree })
90 })
91
92 if config.pathPrefix
93 use(true, prefixoid, {
94 prefix: config.pathPrefix
95 })
96
97 use(true, prefixoid, {
98 prefix: config.pathPrefix
99 tag: 'img'
100 attr: 'src'
101 })
102
103 use(true, prefixoid, {
104 prefix: config.pathPrefix
105 tag: 'script'
106 attr: 'src'
107 })
108
109 use(true, prefixoid, {
110 prefix: config.pathPrefix
111 tag: 'div'
112 attr: 'data-url-template'
113 })
114
115 use(true, prefixoid, {
116 prefix: config.pathPrefix
117 tag: 'link'
118 })
119
120 metalsmith.build (err) ->
121 return cb(err) if err
122 console.log('Done')
123 cb()