UNPKG

4.88 kBJavaScriptView Raw
1var argv = require('minimist')(process.argv.slice(2)),
2 path = require('path');
3
4var site_dir = argv._[0];
5if (!site_dir) {
6 console.log("Usage: blue <dir>, where <dir> has your sources (src) and templates (layouts).");
7 return;
8}
9site_dir = path.join(process.cwd(), site_dir);
10var template_dir = path.join(site_dir, 'layouts');
11
12require('../lib/setupHandlebars')(template_dir);
13
14// 23 Sep 2015 : GWA : Pipeline includes.
15
16var 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
47var people_pattern = 'people/**/bio.adoc';
48var projects_pattern = 'projects/**/summary.adoc';
49var papers_pattern = 'papers/**/**/summary.adoc';
50var proposals_pattern = 'proposals/**/summary.adoc';
51var courses_pattern = 'courses/**/**/summary.adoc';
52var posts_pattern = 'people/**/posts/*.adoc';
53
54metalsmith(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 });