UNPKG

3.05 kBJavaScriptView Raw
1var path = require('path'),
2 fs = require('fs'),
3 _ = require('underscore'),
4 handlebars = require('handlebars'),
5 common = require('./common.js');
6
7module.exports = function (template_dir) {
8 handlebars.registerPartial('header',
9 fs.readFileSync(path.join(template_dir, '/partials/header.hbt')).toString());
10 handlebars.registerPartial('posts_header',
11 fs.readFileSync(path.join(template_dir, '/partials/posts_header.hbt')).toString());
12 handlebars.registerPartial('footer',
13 fs.readFileSync(path.join(template_dir, '/partials/footer.hbt')).toString());
14 handlebars.registerPartial('paper',
15 fs.readFileSync(path.join(template_dir, '/partials/paper.hbt')).toString());
16 handlebars.registerPartial('proposal',
17 fs.readFileSync(path.join(template_dir, '/partials/proposal.hbt')).toString());
18 handlebars.registerPartial('course',
19 fs.readFileSync(path.join(template_dir, '/partials/course.hbt')).toString());
20 handlebars.registerPartial('projectsandpapers',
21 fs.readFileSync(path.join(template_dir, '/partials/projectsandpapers.hbt')).toString());
22
23 var object_link = function(o) {
24 if (o.person && o.institution) {
25 name = o.name + " <i>(" + o.institution + ")</i>";
26 } else {
27 name = o.name || o.title;
28 }
29 if (o.person) {
30 if (o.group || o.long_alumni) {
31 if (o.finished) {
32 return '<a href="/' + o.path + '">' + name + '</a>';
33 } else {
34 return name;
35 }
36 } else if (o.website) {
37 return '<a href="' + o.website + '">' + name + '</a>';
38 } else {
39 return name;
40 }
41 } else {
42 if (o.external) {
43 link = o.external;
44 } else if (o.path) {
45 link = '/' + o.path;
46 } else {
47 link = o.link;
48 }
49 return '<a href="' + link + '">' + name + '</a>';
50 }
51 };
52
53 handlebars.registerHelper('link', function (o) {
54 return new handlebars.SafeString(object_link(o));
55 });
56
57 handlebars.registerHelper('and_list', function (people) {
58 var list = _.map(people, object_link).map(function (e) {
59 return "<span style='white-space: nowrap;'>" + e + "</span>";
60 });
61 if (list.length == 1) {
62 list = list[0];
63 } else if (list.length == 2) {
64 list = list.join(" and ");
65 } else {
66 comma_list = list.slice(0, -1);
67 list = comma_list.join(", ") + ", and " + list.slice(-1)[0];
68 }
69 return new handlebars.SafeString(list);
70 });
71
72 handlebars.registerHelper('list_with_years', function (os, options) {
73 var last_year;
74 var ret = "";
75
76 for (var i = 0; i < os.length; i++) {
77 if (options.data) {
78 data = handlebars.createFrame(options.data || {});
79 if (!last_year || (os[i].year != last_year)) {
80 data.new_year = true;
81 } else {
82 data.new_year = false;
83 }
84 data.index = os.length - i;
85 last_year = os[i].year;
86 }
87 ret += options.fn(os[i], {data: data});
88 }
89 return ret;
90 });
91
92 handlebars.registerHelper('format_date', common.format_date);
93}