1 |
|
2 | var jade = (function(exports){
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 | exports.attrs = function attrs(obj){
|
18 | var buf = []
|
19 | , terse = obj.terse;
|
20 | delete obj.terse;
|
21 | var keys = Object.keys(obj)
|
22 | , len = keys.length;
|
23 | if (len) {
|
24 | buf.push('');
|
25 | for (var i = 0; i < len; ++i) {
|
26 | var key = keys[i]
|
27 | , val = obj[key];
|
28 | if ('boolean' == typeof val || null == val) {
|
29 | if (val) {
|
30 | terse
|
31 | ? buf.push(key)
|
32 | : buf.push(key + '="' + key + '"');
|
33 | }
|
34 | } else if ('class' == key && Array.isArray(val)) {
|
35 | buf.push(key + '="' + escape(val.join(' ')) + '"');
|
36 | } else {
|
37 | buf.push(key + '="' + escape(val) + '"');
|
38 | }
|
39 | }
|
40 | }
|
41 | return buf.join(' ');
|
42 | };
|
43 |
|
44 |
|
45 |
|
46 |
|
47 |
|
48 |
|
49 |
|
50 |
|
51 |
|
52 | exports.escape = function escape(html){
|
53 | return String(html)
|
54 | .replace(/&(?!\w+;)/g, '&')
|
55 | .replace(/</g, '<')
|
56 | .replace(/>/g, '>')
|
57 | .replace(/"/g, '"');
|
58 | };
|
59 |
|
60 |
|
61 |
|
62 |
|
63 |
|
64 |
|
65 |
|
66 |
|
67 |
|
68 |
|
69 |
|
70 |
|
71 | exports.rethrow = function rethrow(err, str, filename, lineno){
|
72 | var context = 3
|
73 | , lines = str.split('\n')
|
74 | , start = Math.max(lineno - context, 0)
|
75 | , end = Math.min(lines.length, lineno + context);
|
76 |
|
77 |
|
78 | var context = lines.slice(start, end).map(function(line, i){
|
79 | var curr = i + start + 1;
|
80 | return (curr == lineno ? ' > ' : ' ')
|
81 | + curr
|
82 | + '| '
|
83 | + line;
|
84 | }).join('\n');
|
85 |
|
86 |
|
87 | err.path = filename;
|
88 | err.message = (filename || 'Jade') + ':' + lineno
|
89 | + '\n' + context + '\n\n' + err.message;
|
90 | throw err;
|
91 | };
|
92 |
|
93 | return exports;
|
94 |
|
95 | })({}); |
\ | No newline at end of file |