-
Notifications
You must be signed in to change notification settings - Fork 0
/
handlebars.js
117 lines (113 loc) · 2.64 KB
/
handlebars.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
var Fs = require("fs");
exports.options = {
partials: {
foobar: "This is a handlebars partial!",
fullwidth: "</div><div>",
endfullwidth: '</div><div class="o-textstyles Prose">',
"preview/header": Fs.readFileSync(
"./fractal/components/_layout/header.hbs",
"utf8"
),
"preview/footer": Fs.readFileSync(
"./fractal/components/_layout/footer.hbs",
"utf8"
)
},
/* other configuration options here */
// helpers based on http://stackoverflow.com/a/31632215
helpers: {
uppercase(str) {
return str.toUpperCase();
},
eq(v1, v2) {
return v1 === v2;
},
ne(v1, v2) {
return v1 !== v2;
},
lt(v1, v2) {
return v1 < v2;
},
gt(v1, v2) {
return v1 > v2;
},
lte(v1, v2) {
return v1 <= v2;
},
gte(v1, v2) {
return v1 >= v2;
},
and(v1, v2) {
return v1 && v2;
},
or(v1, v2) {
return v1 || v2;
},
concat() {
let concatedString = "";
for (let i = 0; i < arguments.length - 1; i++) {
concatedString += arguments[i];
}
return concatedString;
},
join(arr, separator) {
if (arr) {
return arr.join(separator);
}
return "";
},
attr(arr) {
if (arr) {
return arr.reduce((attrString, currentAttr) => {
return new Handlebars.SafeString(
`${attrString} ${currentAttr.name}="${currentAttr.value}"`
);
}, "");
}
return "";
},
modifiers(modifiers, options) {
if (modifiers) {
const blockNameString =
typeof options.hash.block !== "undefined"
? `${options.hash.block}--`
: "";
return modifiers.reduce((classString, modifier) => {
classString += ` ${blockNameString}${modifier}`;
return classString;
}, "");
}
return "";
},
classes(classes) {
if (classes) {
return classes.reduce((classString, className) => {
classString += ` ${className}`;
return classString;
}, "");
}
return "";
},
toHTML(plainText) {
if (!plainText) {
return;
}
let output = "";
const lines = plainText.split(/\r\n.?\r\n|\n.?\r|\r.?\n|\r.?\r|\n.?\n/g);
lines.forEach(element => {
let line = element;
if (line) {
line = line.replace(/\r\n|\n\r|\r|\n/g, "<br>");
output += `<p>${line}</p>`;
}
});
return new Handlebars.SafeString(output);
},
log(someVar) {
console.log(someVar);
},
json(someVar) {
JSON.stringify(someVar);
}
}
};