jade-js-source 0.19.0 → 0.27.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/lib/jade_js/jade.js +722 -194
  2. data/lib/jade_js/runtime.js +64 -8
  3. metadata +3 -3
@@ -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;');
@@ -100,7 +156,7 @@ exports.rethrow = function rethrow(err, filename, lineno){
100
156
  , str = require('fs').readFileSync(filename, 'utf8')
101
157
  , lines = str.split('\n')
102
158
  , start = Math.max(lineno - context, 0)
103
- , end = Math.min(lines.length, lineno + context);
159
+ , end = Math.min(lines.length, lineno + context);
104
160
 
105
161
  // Error context
106
162
  var context = lines.slice(start, end).map(function(line, i){
@@ -113,11 +169,11 @@ exports.rethrow = function rethrow(err, filename, lineno){
113
169
 
114
170
  // Alter exception message
115
171
  err.path = filename;
116
- err.message = (filename || 'Jade') + ':' + lineno
172
+ err.message = (filename || 'Jade') + ':' + lineno
117
173
  + '\n' + context + '\n\n' + err.message;
118
174
  throw err;
119
175
  };
120
176
 
121
177
  return exports;
122
178
 
123
- })({});
179
+ })({});
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jade-js-source
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.19.0
4
+ version: 0.27.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2011-12-06 00:00:00.000000000Z
13
+ date: 2012-10-26 00:00:00.000000000 Z
14
14
  dependencies: []
15
15
  description: ! " Jade is a high performance template engine heavily influenced
16
16
  by Haml \n and implemented with JavaScript for node.\n"
@@ -42,7 +42,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
42
42
  version: '0'
43
43
  requirements: []
44
44
  rubyforge_project: jade-js-source
45
- rubygems_version: 1.8.12
45
+ rubygems_version: 1.8.17
46
46
  signing_key:
47
47
  specification_version: 3
48
48
  summary: Jade - template engine