UNPKG

2.05 kBJavaScriptView Raw
1
2var jade = (function(exports){
3/*!
4 * Jade - runtime
5 * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
6 * MIT Licensed
7 */
8
9/**
10 * Render the given attributes object.
11 *
12 * @param {Object} obj
13 * @return {String}
14 * @api private
15 */
16
17exports.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 * Escape the given string of `html`.
46 *
47 * @param {String} html
48 * @return {String}
49 * @api private
50 */
51
52exports.escape = function escape(html){
53 return String(html)
54 .replace(/&(?!\w+;)/g, '&amp;')
55 .replace(/</g, '&lt;')
56 .replace(/>/g, '&gt;')
57 .replace(/"/g, '&quot;');
58};
59
60/**
61 * Re-throw the given `err` in context to the
62 * `str` of jade, `filename`, and `lineno`.
63 *
64 * @param {Error} err
65 * @param {String} str
66 * @param {String} filename
67 * @param {String} lineno
68 * @api private
69 */
70
71exports.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 // Error context
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 // Alter exception message
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