UNPKG

1.99 kBJavaScriptView Raw
1
2/*!
3 * Jade - runtime
4 * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
5 * MIT Licensed
6 */
7
8/**
9 * Render the given attributes object.
10 *
11 * @param {Object} obj
12 * @return {String}
13 * @api private
14 */
15
16exports.attrs = function attrs(obj){
17 var buf = []
18 , terse = obj.terse;
19 delete obj.terse;
20 var keys = Object.keys(obj)
21 , len = keys.length;
22 if (len) {
23 buf.push('');
24 for (var i = 0; i < len; ++i) {
25 var key = keys[i]
26 , val = obj[key];
27 if ('boolean' == typeof val || null == val) {
28 if (val) {
29 terse
30 ? buf.push(key)
31 : buf.push(key + '="' + key + '"');
32 }
33 } else if ('class' == key && Array.isArray(val)) {
34 buf.push(key + '="' + escape(val.join(' ')) + '"');
35 } else {
36 buf.push(key + '="' + escape(val) + '"');
37 }
38 }
39 }
40 return buf.join(' ');
41};
42
43/**
44 * Escape the given string of `html`.
45 *
46 * @param {String} html
47 * @return {String}
48 * @api private
49 */
50
51exports.escape = function escape(html){
52 return String(html)
53 .replace(/&(?!\w+;)/g, '&amp;')
54 .replace(/</g, '&lt;')
55 .replace(/>/g, '&gt;')
56 .replace(/"/g, '&quot;');
57};
58
59/**
60 * Re-throw the given `err` in context to the
61 * `str` of jade, `filename`, and `lineno`.
62 *
63 * @param {Error} err
64 * @param {String} str
65 * @param {String} filename
66 * @param {String} lineno
67 * @api private
68 */
69
70exports.rethrow = function rethrow(err, str, filename, lineno){
71 var context = 3
72 , lines = str.split('\n')
73 , start = Math.max(lineno - context, 0)
74 , end = Math.min(lines.length, lineno + context);
75
76 // Error context
77 var context = lines.slice(start, end).map(function(line, i){
78 var curr = i + start + 1;
79 return (curr == lineno ? ' > ' : ' ')
80 + curr
81 + '| '
82 + line;
83 }).join('\n');
84
85 // Alter exception message
86 err.path = filename;
87 err.message = (filename || 'Jade') + ':' + lineno
88 + '\n' + context + '\n\n' + err.message;
89 throw err;
90};