jade-js-source 0.19.0 → 0.27.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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