jader 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,5 @@
1
1
 
2
- var jade = (function(exports){
2
+ jade = (function(exports){
3
3
  /*!
4
4
  * Jade - runtime
5
5
  * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
@@ -29,41 +29,97 @@ if (!Object.keys) {
29
29
  }
30
30
  }
31
31
  return arr;
32
- }
32
+ }
33
+ }
34
+
35
+ /**
36
+ * Merge two attribute objects giving precedence
37
+ * to values in object `b`. Classes are special-cased
38
+ * allowing for arrays and merging/joining appropriately
39
+ * resulting in a string.
40
+ *
41
+ * @param {Object} a
42
+ * @param {Object} b
43
+ * @return {Object} a
44
+ * @api private
45
+ */
46
+
47
+ exports.merge = function merge(a, b) {
48
+ var ac = a['class'];
49
+ var bc = b['class'];
50
+
51
+ if (ac || bc) {
52
+ ac = ac || [];
53
+ bc = bc || [];
54
+ if (!Array.isArray(ac)) ac = [ac];
55
+ if (!Array.isArray(bc)) bc = [bc];
56
+ ac = ac.filter(nulls);
57
+ bc = bc.filter(nulls);
58
+ a['class'] = ac.concat(bc).join(' ');
59
+ }
60
+
61
+ for (var key in b) {
62
+ if (key != 'class') {
63
+ a[key] = b[key];
64
+ }
65
+ }
66
+
67
+ return a;
68
+ };
69
+
70
+ /**
71
+ * Filter null `val`s.
72
+ *
73
+ * @param {Mixed} val
74
+ * @return {Mixed}
75
+ * @api private
76
+ */
77
+
78
+ function nulls(val) {
79
+ return val != null;
33
80
  }
34
81
 
35
82
  /**
36
83
  * Render the given attributes object.
37
84
  *
38
85
  * @param {Object} obj
86
+ * @param {Object} escaped
39
87
  * @return {String}
40
88
  * @api private
41
89
  */
42
90
 
43
- exports.attrs = function attrs(obj){
91
+ exports.attrs = function attrs(obj, escaped){
44
92
  var buf = []
45
93
  , terse = obj.terse;
94
+
46
95
  delete obj.terse;
47
96
  var keys = Object.keys(obj)
48
97
  , len = keys.length;
98
+
49
99
  if (len) {
50
100
  buf.push('');
51
101
  for (var i = 0; i < len; ++i) {
52
102
  var key = keys[i]
53
103
  , val = obj[key];
104
+
54
105
  if ('boolean' == typeof val || null == val) {
55
106
  if (val) {
56
107
  terse
57
108
  ? buf.push(key)
58
109
  : buf.push(key + '="' + key + '"');
59
110
  }
111
+ } else if (0 == key.indexOf('data') && 'string' != typeof val) {
112
+ buf.push(key + "='" + JSON.stringify(val) + "'");
60
113
  } else if ('class' == key && Array.isArray(val)) {
61
114
  buf.push(key + '="' + exports.escape(val.join(' ')) + '"');
62
- } else {
115
+ } else if (escaped && escaped[key]) {
63
116
  buf.push(key + '="' + exports.escape(val) + '"');
117
+ } else {
118
+ buf.push(key + '="' + val + '"');
64
119
  }
65
120
  }
66
121
  }
122
+
67
123
  return buf.join(' ');
68
124
  };
69
125
 
@@ -77,7 +133,7 @@ exports.attrs = function attrs(obj){
77
133
 
78
134
  exports.escape = function escape(html){
79
135
  return String(html)
80
- .replace(/&(?!\w+;)/g, '&amp;')
136
+ .replace(/&(?!(\w+|\#\d+);)/g, '&amp;')
81
137
  .replace(/</g, '&lt;')
82
138
  .replace(/>/g, '&gt;')
83
139
  .replace(/"/g, '&quot;');
@@ -96,30 +152,25 @@ exports.escape = function escape(html){
96
152
  exports.rethrow = function rethrow(err, filename, lineno){
97
153
  if (!filename) throw err;
98
154
 
99
- // If we can't catch the context we still output line and file
100
- try {
101
- var context = 3
102
- , str = require('fs').readFileSync(filename, 'utf8')
103
- , lines = str.split('\n')
104
- , start = Math.max(lineno - context, 0)
105
- , end = Math.min(lines.length, lineno + context);
106
-
107
- // Error context
108
- var context = lines.slice(start, end).map(function(line, i){
109
- var curr = i + start + 1;
110
- return (curr == lineno ? ' > ' : ' ')
111
- + curr
112
- + '| '
113
- + line;
114
- }).join('\n') + '\n\n';
115
- } catch(failure) {
116
- var context = '';
117
- }
155
+ var context = 3
156
+ , str = require('fs').readFileSync(filename, 'utf8')
157
+ , lines = str.split('\n')
158
+ , start = Math.max(lineno - context, 0)
159
+ , end = Math.min(lines.length, lineno + context);
160
+
161
+ // Error context
162
+ var context = lines.slice(start, end).map(function(line, i){
163
+ var curr = i + start + 1;
164
+ return (curr == lineno ? ' > ' : ' ')
165
+ + curr
166
+ + '| '
167
+ + line;
168
+ }).join('\n');
118
169
 
119
170
  // Alter exception message
120
171
  err.path = filename;
121
- err.message = (filename || 'Jade') + ':' + lineno
122
- + '\n' + context + err.message;
172
+ err.message = (filename || 'Jade') + ':' + lineno
173
+ + '\n' + context + '\n\n' + err.message;
123
174
  throw err;
124
175
  };
125
176
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jader
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ cert_chain: []
13
13
  date: 2012-08-23 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: execjs
16
+ name: libv8
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
@@ -124,6 +124,22 @@ dependencies:
124
124
  - - ! '>='
125
125
  - !ruby/object:Gem::Version
126
126
  version: '0'
127
+ - !ruby/object:Gem::Dependency
128
+ name: yard
129
+ requirement: !ruby/object:Gem::Requirement
130
+ none: false
131
+ requirements:
132
+ - - ! '>='
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ type: :development
136
+ prerelease: false
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
127
143
  description: Share your Jade views between client and server, eliminate code duplication
128
144
  and make your single-page app SEO friendly
129
145
  email:
@@ -276,3 +292,4 @@ test_files:
276
292
  - spec/support/global.rb
277
293
  - spec/support/matchers.rb
278
294
  - spec/template_spec.rb
295
+ has_rdoc: