1 | var argv = require('minimist')(process.argv.slice(2)),
|
2 | path = require('path');
|
3 |
|
4 | var site_dir = argv._[0];
|
5 | if (!site_dir) {
|
6 | console.log("Usage: blue <dir>, where <dir> has your sources (src) and templates (layouts).");
|
7 | return;
|
8 | }
|
9 | site_dir = path.join(process.cwd(), site_dir);
|
10 | var template_dir = path.join(site_dir, 'layouts');
|
11 |
|
12 | require('../lib/setupHandlebars')(template_dir);
|
13 |
|
14 |
|
15 |
|
16 | var metalsmith = require('metalsmith'),
|
17 | build_date = require('metalsmith-build-date'),
|
18 | drafts = require('metalsmith-drafts'),
|
19 | filemetadata = require('metalsmith-filemetadata'),
|
20 | metadata = require('metalsmith-metadata'),
|
21 | collections = require('metalsmith-collections'),
|
22 | asciidoc = require('metalsmith-asciidoc'),
|
23 | updated = require('metalsmith-updated'),
|
24 | filepath = require('metalsmith-filepath'),
|
25 | snippet = require('./snippet.js'),
|
26 | footnotes = require('./footnotes.js'),
|
27 | annotate = require('./annotate.js'),
|
28 | permalinks = require('metalsmith-permalinks'),
|
29 | sort = require('./sort.js'),
|
30 | link = require('./link.js'),
|
31 | fixsnippets = require('../lib/fixsnippets.js'),
|
32 | layouts = require('metalsmith-layouts'),
|
33 | lessjavascript = require('../lib/lessjavascript.js'),
|
34 | concat = require('metalsmith-concat'),
|
35 | highlight = require('metalsmith-highlight'),
|
36 | msif = require('metalsmith-if'),
|
37 | clean_css = require('metalsmith-clean-css'),
|
38 | uglify = require('metalsmith-uglify'),
|
39 | rename = require('metalsmith-rename'),
|
40 | beautify = require('metalsmith-beautify'),
|
41 | spellingexceptions = require('../lib/spellingexceptions.js'),
|
42 | spellcheck = require('metalsmith-spellcheck'),
|
43 | formatcheck = require('metalsmith-formatcheck'),
|
44 | linkcheck = require('metalsmith-linkcheck');
|
45 |
|
46 |
|
47 | var people_pattern = 'people/**/bio.adoc';
|
48 | var projects_pattern = 'projects/**/summary.adoc';
|
49 | var papers_pattern = 'papers/**/**/summary.adoc';
|
50 | var proposals_pattern = 'proposals/**/summary.adoc';
|
51 | var courses_pattern = 'courses/**/**/summary.adoc';
|
52 | var posts_pattern = 'people/**/posts/*.adoc';
|
53 |
|
54 | metalsmith(site_dir)
|
55 | .destination('.build')
|
56 | .use(build_date())
|
57 | .use(drafts())
|
58 | .use(filemetadata([
|
59 | {pattern: people_pattern, metadata: {'person': true, 'layout': 'people/single.hbt'}, preserve: true},
|
60 | {pattern: projects_pattern, metadata: {'project': true, 'layout': 'projects/single.hbt'}},
|
61 | {pattern: papers_pattern, metadata: {'paper': true, 'layout': 'papers/single.hbt'}},
|
62 | {pattern: proposals_pattern, metadata: {'proposal': true, 'layout': 'proposals/single.hbt'}},
|
63 | {pattern: courses_pattern, metadata: {'course': true, 'layout': 'courses/single.hbt'}},
|
64 | {pattern: posts_pattern, metadata: {'post': true, 'layout': 'posts/single.hbt'}}
|
65 | ]))
|
66 | .use(metadata({
|
67 | people: 'people/other.yaml',
|
68 | conferences: 'papers/conferences.yaml',
|
69 | sources: 'proposals/sources.yaml',
|
70 | courses_common: 'courses/common.yaml'
|
71 | }))
|
72 | .use(collections({
|
73 | people: {
|
74 | pattern: people_pattern,
|
75 | },
|
76 | projects: {
|
77 | pattern: projects_pattern,
|
78 | },
|
79 | papers: {
|
80 | pattern: papers_pattern,
|
81 | },
|
82 | proposals: {
|
83 | pattern: proposals_pattern,
|
84 | },
|
85 | courses: {
|
86 | pattern: courses_pattern,
|
87 | },
|
88 | posts: {
|
89 | pattern: posts_pattern,
|
90 | }
|
91 | }))
|
92 | .use(asciidoc())
|
93 | .use(updated({ignoreKeys: ["draft", "working"], filePatterns: ["**/*.html"]}))
|
94 | .use(filepath({
|
95 | absolute: true,
|
96 | permalinks: true
|
97 | }))
|
98 | .use(snippet())
|
99 | .use(footnotes())
|
100 | .use(annotate())
|
101 | .use(permalinks({
|
102 | pattern: ':collection/:slug'
|
103 | }))
|
104 | .use(sort())
|
105 | .use(link())
|
106 | .use(fixsnippets())
|
107 | .use(layouts({
|
108 | engine: 'handlebars',
|
109 | directory: template_dir
|
110 | }))
|
111 | .use(lessjavascript())
|
112 | .use(concat({
|
113 | files: 'assets/css/combine/*.css',
|
114 | output: 'assets/css/site.css'
|
115 | }))
|
116 | .use(concat({
|
117 | files: 'assets/js/combine/*.js',
|
118 | output: 'assets/js/site.js'
|
119 | }))
|
120 | .use(highlight())
|
121 | .use(msif((argv['deploy'] == true), clean_css({ files: 'assets/css/*.css' })))
|
122 | .use(msif((argv['deploy'] == true), uglify()))
|
123 | .use(msif((argv['deploy'] == true), rename([[/\.min\.js$/, ".js"]])))
|
124 | .use(msif((argv['deploy'] == true), beautify({'indent_size': 2, 'css': false, 'js': false})))
|
125 | .use(msif((argv['check'] == true), spellingexceptions()))
|
126 | .use(msif((argv['check'] == true),
|
127 | spellcheck({ dicFile: 'dicts/en_US.dic',
|
128 | affFile: 'dicts/en_US.aff',
|
129 | exceptionFile: 'dicts/spelling_exceptions.json',
|
130 | checkedPart: "div#content",
|
131 | verbose: true})))
|
132 | .use(msif((argv['check'] == true),
|
133 | formatcheck({ verbose: true ,
|
134 | checkedPart: "div#content",
|
135 | failWithoutNetwork: false })))
|
136 | .use(msif((argv['check'] == true),
|
137 | linkcheck({ verbose: true , failWithoutNetwork: false })))
|
138 | .clean(true)
|
139 | .build(function throwErr (err) {
|
140 | if (err) {
|
141 | throw err;
|
142 | }
|
143 | });
|