1 | var path = require('path'),
|
2 | fs = require('fs'),
|
3 | _ = require('underscore'),
|
4 | handlebars = require('handlebars'),
|
5 | common = require('./common.js');
|
6 |
|
7 | module.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 | }
|