haml_coffee_assets 1.8.2 → 1.9.1

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2011-2012 Michael Kessler <michi@netzpiraten.ch>
1
+ Copyright (c) 2011-2013 Michael Kessler <michi@netzpiraten.ch>
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -436,7 +436,7 @@ by default. This allows you to render a template within another template like:
436
436
 
437
437
  ```
438
438
  %h1 Comments for this article
439
- - for comment in @article.comments
439
+ - for comment in @article.comments
440
440
  != JST['articles/comment'](comment)
441
441
  ```
442
442
 
@@ -508,7 +508,7 @@ See the [CHANGELOG](https://github.com/netzpirat/haml_coffee_assets/blob/master/
508
508
 
509
509
  (The MIT License)
510
510
 
511
- Copyright (c) 2011-2012 Michael Kessler
511
+ Copyright (c) 2011-2013 Michael Kessler
512
512
 
513
513
  Permission is hereby granted, free of charge, to any person obtaining
514
514
  a copy of this software and associated documentation files (the
@@ -26,7 +26,7 @@ module HamlCoffeeAssets
26
26
  config.escapeHtml, config.escapeAttributes, config.cleanValue, config.placement, config.dependencies,
27
27
  config.customHtmlEscape, config.customCleanValue,
28
28
  config.customPreserve, config.customFindAndPreserve,
29
- config.customSurround, config.customSucceed, config.customPrecede,
29
+ config.customSurround, config.customSucceed, config.customPrecede, config.customReference,
30
30
  config.preserveTags, config.selfCloseTags,
31
31
  config.context, config.extendScope)
32
32
  end
@@ -33,6 +33,7 @@ module HamlCoffeeAssets
33
33
  self.customSurround = 'window.HAML.surround'
34
34
  self.customSucceed = 'window.HAML.succeed'
35
35
  self.customPrecede = 'window.HAML.precede'
36
+ self.customReference = 'window.HAML.reference'
36
37
  self.preserveTags = 'textarea,pre'
37
38
  self.selfCloseTags = 'meta,img,link,br,hr,input,area,param,col,base'
38
39
  self.context = 'window.HAML.context'
@@ -100,6 +101,10 @@ module HamlCoffeeAssets
100
101
  #
101
102
  attr_accessor :customPreserve
102
103
 
104
+ # Custom object reference function
105
+ #
106
+ attr_accessor :customReference
107
+
103
108
  # Custom find and preserve function
104
109
  #
105
110
  attr_accessor :customFindAndPreserve
@@ -1,5 +1,5 @@
1
1
  # coding: UTF-8
2
2
 
3
3
  module HamlCoffeeAssets
4
- VERSION = '1.8.2' unless defined?(HamlCoffeeAssets::VERSION)
4
+ VERSION = '1.9.1' unless defined?(HamlCoffeeAssets::VERSION)
5
5
  end
@@ -27,6 +27,7 @@ var HamlCoffeeAssets = (function(){
27
27
  * @param customSurround [String] the name of the function for the surround helper
28
28
  * @param customSucceed [String] the name of the function for the succeed helper
29
29
  * @param customPrecede [String] the name of the function for the precede helper
30
+ * @param customReference [String] the name of the function for the object reference helper
30
31
  * @param preserveTags [String] comma separated list of tags to preserve whitespace
31
32
  * @param selfCloseTags [String] comma separated list of tags to self-closing tags
32
33
  * @param context [String] the name of the function to merge contexts
@@ -35,7 +36,7 @@ var HamlCoffeeAssets = (function(){
35
36
  compile: function(name, source, jst, namespace, format, uglify, basename,
36
37
  escapeHtml, escapeAttributes, cleanValue, placement, dependencies,
37
38
  customHtmlEscape, customCleanValue, customPreserve, customFindAndPreserve,
38
- customSurround, customSucceed, customPrecede,
39
+ customSurround, customSucceed, customPrecede, customReference,
39
40
  preserveTags, selfCloseTags,
40
41
  context, extendScope) {
41
42
 
@@ -55,6 +56,7 @@ var HamlCoffeeAssets = (function(){
55
56
  customSurround: customSurround,
56
57
  customSucceed: customSucceed,
57
58
  customPrecede: customPrecede,
59
+ customReference: customReference,
58
60
  preserveTags: preserveTags,
59
61
  selfCloseTags: selfCloseTags,
60
62
  extendScope: extendScope
@@ -78,7 +80,7 @@ var HamlCoffeeAssets = (function(){
78
80
  }
79
81
 
80
82
  if (context !== '' && context !== false) {
81
- // With AMD we replace the context function with the one from the hamlcoffee AMD module if not set explicit
83
+ // With AMD we replace the context function with the one from the hamlcoffee AMD module if not set explicit
82
84
  if (placement === 'amd' && context === 'window.HAML.context' && /^hamlcoffee/.test(dependencies['hc'])) {
83
85
  context = 'hc.context';
84
86
  }
data/lib/js/hamlcoffee.js CHANGED
@@ -363,7 +363,7 @@ require.define("/haml-coffee.coffee", function (require, module, exports, __dirn
363
363
 
364
364
  module.exports = HamlCoffee = (function() {
365
365
 
366
- HamlCoffee.VERSION = '1.8.2';
366
+ HamlCoffee.VERSION = '1.9.1';
367
367
 
368
368
  function HamlCoffee(options) {
369
369
  var _base, _base10, _base11, _base2, _base3, _base4, _base5, _base6, _base7, _base8, _base9, _ref, _ref10, _ref11, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9;
@@ -591,6 +591,7 @@ require.define("/haml-coffee.coffee", function (require, module, exports, __dirn
591
591
  this.options.customSurround = 'hc.surround';
592
592
  this.options.customSucceed = 'hc.succeed';
593
593
  this.options.customPrecede = 'hc.precede';
594
+ this.options.customReference = 'hc.reference';
594
595
  }
595
596
  modules = [];
596
597
  params = [];
@@ -711,6 +712,13 @@ require.define("/haml-coffee.coffee", function (require, module, exports, __dirn
711
712
  fn += "precede = (start, fn) => start + fn.call(@)?.replace(/^\s+/g, '')\n";
712
713
  }
713
714
  }
715
+ if (code.indexOf('$r') !== -1) {
716
+ if (this.options.customReference) {
717
+ fn += "$r = " + this.options.customReference + "\n";
718
+ } else {
719
+ fn += "$r = (object, prefix) ->\n name = if prefix then prefix + '_' else ''\n\n if typeof(object.hamlObjectRef) is 'function'\n name += object.hamlObjectRef()\n else\n name += (object.constructor?.name || 'object').replace(/\W+/g, '_').replace(/([a-z\d])([A-Z])/g, '$1_$2').toLowerCase()\n\n id = if typeof(object.to_key) is 'function'\n object.to_key()\n else if typeof(object.id) is 'function'\n object.id()\n else if object.id\n object.id\n else\n object\n\n result = \"class='\#{ name }'\"\n result += \" id='\#{ name }_\#{ id }'\" if id\n";
720
+ }
721
+ }
714
722
  fn += "$o = []\n";
715
723
  fn += "" + code + "\n";
716
724
  return fn += "return $o.join(\"\\n\")" + (this.convertBooleans(code)) + (this.removeEmptyIDAndClass(code)) + (this.cleanupWhitespace(code)) + "\n";
@@ -1187,12 +1195,13 @@ require.define("/nodes/haml.coffee", function (require, module, exports, __dirna
1187
1195
  classes: classes,
1188
1196
  text: escapeQuotes(tag.text),
1189
1197
  attributes: attributes,
1190
- assignment: tag.assignment
1198
+ assignment: tag.assignment,
1199
+ reference: tag.reference
1191
1200
  };
1192
1201
  };
1193
1202
 
1194
1203
  Haml.prototype.parseTag = function(exp) {
1195
- var assignment, attributes, ch, classes, doctype, end, haml, id, ids, klass, level, pos, rest, start, tag, text, whitespace, _ref, _ref2, _ref3;
1204
+ var assignment, attr, attributes, ch, classes, doctype, end, haml, htmlAttributes, id, ids, key, klass, level, pos, reference, rest, rubyAttributes, start, tag, text, val, whitespace, _i, _j, _len, _len2, _ref, _ref2, _ref3, _ref4, _ref5;
1196
1205
  try {
1197
1206
  doctype = (_ref = exp.match(/^(\!{3}.*)/)) != null ? _ref[1] : void 0;
1198
1207
  if (doctype) {
@@ -1202,35 +1211,68 @@ require.define("/nodes/haml.coffee", function (require, module, exports, __dirna
1202
1211
  }
1203
1212
  haml = exp.match(/^((?:[#%\.][a-z0-9_:\-]*[\/]?)+)/i)[0];
1204
1213
  rest = exp.substring(haml.length);
1205
- if (rest.match(/^[{(]/)) {
1206
- start = rest[0];
1207
- end = (function() {
1208
- switch (start) {
1209
- case '{':
1210
- return '}';
1211
- case '(':
1212
- return ')';
1213
- }
1214
- })();
1215
- level = 0;
1216
- for (pos = 0, _ref2 = rest.length; 0 <= _ref2 ? pos <= _ref2 : pos >= _ref2; 0 <= _ref2 ? pos++ : pos--) {
1217
- ch = rest[pos];
1218
- if (ch === start) level += 1;
1219
- if (ch === end) {
1220
- if (level === 1) {
1221
- break;
1222
- } else {
1223
- level -= 1;
1214
+ if (rest.match(/^[{([]/)) {
1215
+ reference = '';
1216
+ htmlAttributes = '';
1217
+ rubyAttributes = '';
1218
+ _ref2 = ['[', '{', '(', '[', '{', '('];
1219
+ for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
1220
+ start = _ref2[_i];
1221
+ if (start === rest[0]) {
1222
+ end = (function() {
1223
+ switch (start) {
1224
+ case '{':
1225
+ return '}';
1226
+ case '(':
1227
+ return ')';
1228
+ case '[':
1229
+ return ']';
1230
+ }
1231
+ })();
1232
+ level = 0;
1233
+ for (pos = 0, _ref3 = rest.length; 0 <= _ref3 ? pos <= _ref3 : pos >= _ref3; 0 <= _ref3 ? pos++ : pos--) {
1234
+ ch = rest[pos];
1235
+ if (ch === start) level += 1;
1236
+ if (ch === end) {
1237
+ if (level === 1) {
1238
+ break;
1239
+ } else {
1240
+ level -= 1;
1241
+ }
1242
+ }
1243
+ }
1244
+ switch (start) {
1245
+ case '{':
1246
+ rubyAttributes += rest.substring(0, pos + 1);
1247
+ rest = rest.substring(pos + 1);
1248
+ break;
1249
+ case '(':
1250
+ htmlAttributes += rest.substring(0, pos + 1);
1251
+ rest = rest.substring(pos + 1);
1252
+ break;
1253
+ case '[':
1254
+ reference = rest.substring(1, pos);
1255
+ rest = rest.substring(pos + 1);
1224
1256
  }
1225
1257
  }
1226
1258
  }
1227
- attributes = rest.substring(0, pos + 1);
1228
- assignment = rest.substring(pos + 1);
1259
+ assignment = rest || '';
1229
1260
  } else {
1230
- attributes = '';
1261
+ reference = '';
1262
+ htmlAttributes = '';
1263
+ rubyAttributes = '';
1231
1264
  assignment = rest;
1232
1265
  }
1233
- if (whitespace = (_ref3 = assignment.match(/^[<>]{0,2}/)) != null ? _ref3[0] : void 0) {
1266
+ attributes = {};
1267
+ _ref4 = [this.parseAttributes(htmlAttributes), this.parseAttributes(rubyAttributes)];
1268
+ for (_j = 0, _len2 = _ref4.length; _j < _len2; _j++) {
1269
+ attr = _ref4[_j];
1270
+ for (key in attr) {
1271
+ val = attr[key];
1272
+ attributes[key] = val;
1273
+ }
1274
+ }
1275
+ if (whitespace = (_ref5 = assignment.match(/^[<>]{0,2}/)) != null ? _ref5[0] : void 0) {
1234
1276
  assignment = assignment.substring(whitespace.length);
1235
1277
  }
1236
1278
  if (assignment[0] === ' ') assignment = assignment.substring(1);
@@ -1251,25 +1293,26 @@ require.define("/nodes/haml.coffee", function (require, module, exports, __dirna
1251
1293
  return {
1252
1294
  tag: tag ? tag[1] : 'div',
1253
1295
  ids: ids ? (function() {
1254
- var _i, _len, _results;
1296
+ var _k, _len3, _results;
1255
1297
  _results = [];
1256
- for (_i = 0, _len = ids.length; _i < _len; _i++) {
1257
- id = ids[_i];
1298
+ for (_k = 0, _len3 = ids.length; _k < _len3; _k++) {
1299
+ id = ids[_k];
1258
1300
  _results.push("'" + (id.substr(1)) + "'");
1259
1301
  }
1260
1302
  return _results;
1261
1303
  })() : void 0,
1262
1304
  classes: classes ? (function() {
1263
- var _i, _len, _results;
1305
+ var _k, _len3, _results;
1264
1306
  _results = [];
1265
- for (_i = 0, _len = classes.length; _i < _len; _i++) {
1266
- klass = classes[_i];
1307
+ for (_k = 0, _len3 = classes.length; _k < _len3; _k++) {
1308
+ klass = classes[_k];
1267
1309
  _results.push("'" + (klass.substr(1)) + "'");
1268
1310
  }
1269
1311
  return _results;
1270
1312
  })() : void 0,
1271
- attributes: this.parseAttributes(attributes),
1313
+ attributes: attributes,
1272
1314
  assignment: assignment,
1315
+ reference: reference,
1273
1316
  text: text
1274
1317
  };
1275
1318
  } catch (error) {
@@ -1385,6 +1428,13 @@ require.define("/nodes/haml.coffee", function (require, module, exports, __dirna
1385
1428
  tagParts.push("class='" + classes + "'");
1386
1429
  }
1387
1430
  if (tokens.id) tagParts.push("id='" + tokens.id + "'");
1431
+ if (tokens.reference) {
1432
+ if (tokens.attributes) {
1433
+ delete tokens.attributes['class'];
1434
+ delete tokens.attributes['id'];
1435
+ }
1436
+ tagParts.push("\#{$r(" + tokens.reference + ")}");
1437
+ }
1388
1438
  if (tokens.attributes) {
1389
1439
  _ref = tokens.attributes;
1390
1440
  for (key in _ref) {
@@ -108,3 +108,30 @@ class window.HAML
108
108
  #
109
109
  @precede: (start, fn) ->
110
110
  start + fn.call(@)?.replace(/^\s+/g, '')
111
+
112
+ # The reference helper creates id and class attributes
113
+ # for an object reference.
114
+ #
115
+ # @param [Object] object the referenced object
116
+ # @param [String] prefix the optional id and class prefix
117
+ # @return [String] the id and class attributes
118
+ #
119
+ @reference: (object, prefix) ->
120
+ name = if prefix then prefix + '_' else ''
121
+
122
+ if typeof(object.hamlObjectRef) is 'function'
123
+ name += object.hamlObjectRef()
124
+ else
125
+ name += (object.constructor?.name || 'object').replace(/\W+/g, '_').replace(/([a-z\d])([A-Z])/g, '$1_$2').toLowerCase()
126
+
127
+ id = if typeof(object.to_key) is 'function'
128
+ object.to_key()
129
+ else if typeof(object.id) is 'function'
130
+ object.id()
131
+ else if object.id
132
+ object.id
133
+ else
134
+ object
135
+
136
+ result = "class='#{ name }'"
137
+ result += " id='#{ name }_#{ id }'" if id
@@ -89,3 +89,30 @@ define ->
89
89
  # @return [Object] the merged context
90
90
  #
91
91
  context: (locals) -> locals
92
+
93
+ # The reference helper creates id and class attributes
94
+ # for an object reference.
95
+ #
96
+ # @param [Object] object the referenced object
97
+ # @param [String] prefix the optional id and class prefix
98
+ # @return [String] the id and class attributes
99
+ #
100
+ reference: (object, prefix) ->
101
+ name = if prefix then prefix + '_' else ''
102
+
103
+ if typeof(object.hamlObjectRef) is 'function'
104
+ name += object.hamlObjectRef()
105
+ else
106
+ name += (object.constructor?.name || 'object').replace(/\W+/g, '_').replace(/([a-z\d])([A-Z])/g, '$1_$2').toLowerCase()
107
+
108
+ id = if typeof(object.to_key) is 'function'
109
+ object.to_key()
110
+ else if typeof(object.id) is 'function'
111
+ object.id()
112
+ else if object.id
113
+ object.id
114
+ else
115
+ object
116
+
117
+ result = "class='#{ name }'"
118
+ result += " id='#{ name }_#{ id }'" if i
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: haml_coffee_assets
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.2
4
+ version: 1.9.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-29 00:00:00.000000000 Z
12
+ date: 2013-01-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: coffee-script
@@ -115,7 +115,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
115
115
  version: 1.3.6
116
116
  requirements: []
117
117
  rubyforge_project: haml_coffee_assets
118
- rubygems_version: 1.8.24
118
+ rubygems_version: 1.8.23
119
119
  signing_key:
120
120
  specification_version: 3
121
121
  summary: Haml CoffeeScript templates