mustache-js-rails 1.1.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of mustache-js-rails might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/mustache-js-rails/version.rb +1 -1
- data/vendor/assets/javascripts/mustache.js +93 -74
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3efc59f2fbc6520360b21c37a205213dde47dc25
|
4
|
+
data.tar.gz: dda31c41707ad5a12d80c760385d866a24cdff1d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a8f72c19a95b1a00cfb4953bc79fcc5e7df4d7280424d5b19996e1558a242f8e37f23e5e188ea07ad1e709c2510a4f5c5c5f7267710fadde6027a9632bb4ab65
|
7
|
+
data.tar.gz: 4ab84cfefbb4885678259d0ea97b28817ec7a0d5ff012ae89da717afaacaafe0be56ea71c8e5f9a84f5bf690e80dd087e734d87d0c113db281c7f35ae1096343
|
data/README.md
CHANGED
@@ -5,7 +5,7 @@ and [mustache jQuery integration](https://github.com/jonnyreeves/jquery-Mustache
|
|
5
5
|
|
6
6
|
Integrated versions are:
|
7
7
|
|
8
|
-
* mustache.js - <b id="mustache-js-version">
|
8
|
+
* mustache.js - <b id="mustache-js-version">2.0.0</b>
|
9
9
|
* jQuery mustache - <b id="jquery-mustache-js-version">0.2.8</b>
|
10
10
|
|
11
11
|
### Installation
|
@@ -5,52 +5,52 @@
|
|
5
5
|
|
6
6
|
/*global define: false*/
|
7
7
|
|
8
|
-
(function (global, factory) {
|
9
|
-
if (typeof exports ===
|
8
|
+
(function defineMustache (global, factory) {
|
9
|
+
if (typeof exports === 'object' && exports) {
|
10
10
|
factory(exports); // CommonJS
|
11
|
-
} else if (typeof define ===
|
11
|
+
} else if (typeof define === 'function' && define.amd) {
|
12
12
|
define(['exports'], factory); // AMD
|
13
13
|
} else {
|
14
14
|
factory(global.Mustache = {}); // <script>
|
15
15
|
}
|
16
|
-
}(this, function (mustache) {
|
16
|
+
}(this, function mustacheFactory (mustache) {
|
17
17
|
|
18
|
-
var
|
19
|
-
var isArray = Array.isArray || function (object) {
|
20
|
-
return
|
18
|
+
var objectToString = Object.prototype.toString;
|
19
|
+
var isArray = Array.isArray || function isArrayPolyfill (object) {
|
20
|
+
return objectToString.call(object) === '[object Array]';
|
21
21
|
};
|
22
22
|
|
23
|
-
function isFunction(object) {
|
23
|
+
function isFunction (object) {
|
24
24
|
return typeof object === 'function';
|
25
25
|
}
|
26
26
|
|
27
|
-
function escapeRegExp(string) {
|
28
|
-
return string.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,
|
27
|
+
function escapeRegExp (string) {
|
28
|
+
return string.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&');
|
29
29
|
}
|
30
30
|
|
31
31
|
// Workaround for https://issues.apache.org/jira/browse/COUCHDB-577
|
32
32
|
// See https://github.com/janl/mustache.js/issues/189
|
33
|
-
var
|
34
|
-
function testRegExp(re, string) {
|
35
|
-
return
|
33
|
+
var regExpTest = RegExp.prototype.test;
|
34
|
+
function testRegExp (re, string) {
|
35
|
+
return regExpTest.call(re, string);
|
36
36
|
}
|
37
37
|
|
38
38
|
var nonSpaceRe = /\S/;
|
39
|
-
function isWhitespace(string) {
|
39
|
+
function isWhitespace (string) {
|
40
40
|
return !testRegExp(nonSpaceRe, string);
|
41
41
|
}
|
42
42
|
|
43
43
|
var entityMap = {
|
44
|
-
|
45
|
-
|
46
|
-
|
44
|
+
'&': '&',
|
45
|
+
'<': '<',
|
46
|
+
'>': '>',
|
47
47
|
'"': '"',
|
48
48
|
"'": ''',
|
49
|
-
|
49
|
+
'/': '/'
|
50
50
|
};
|
51
51
|
|
52
|
-
function escapeHtml(string) {
|
53
|
-
return String(string).replace(/[&<>"'\/]/g, function (s) {
|
52
|
+
function escapeHtml (string) {
|
53
|
+
return String(string).replace(/[&<>"'\/]/g, function fromEntityMap (s) {
|
54
54
|
return entityMap[s];
|
55
55
|
});
|
56
56
|
}
|
@@ -83,7 +83,7 @@
|
|
83
83
|
* array of tokens in the subtree and 2) the index in the original template at
|
84
84
|
* which the closing tag for that section begins.
|
85
85
|
*/
|
86
|
-
function parseTemplate(template, tags) {
|
86
|
+
function parseTemplate (template, tags) {
|
87
87
|
if (!template)
|
88
88
|
return [];
|
89
89
|
|
@@ -95,7 +95,7 @@
|
|
95
95
|
|
96
96
|
// Strips all whitespace tokens array for the current line
|
97
97
|
// if there was a {{#tag}} on it and otherwise only space.
|
98
|
-
function stripSpace() {
|
98
|
+
function stripSpace () {
|
99
99
|
if (hasTag && !nonSpace) {
|
100
100
|
while (spaces.length)
|
101
101
|
delete tokens[spaces.pop()];
|
@@ -108,16 +108,16 @@
|
|
108
108
|
}
|
109
109
|
|
110
110
|
var openingTagRe, closingTagRe, closingCurlyRe;
|
111
|
-
function compileTags(
|
112
|
-
if (typeof
|
113
|
-
|
111
|
+
function compileTags (tagsToCompile) {
|
112
|
+
if (typeof tagsToCompile === 'string')
|
113
|
+
tagsToCompile = tagsToCompile.split(spaceRe, 2);
|
114
114
|
|
115
|
-
if (!isArray(
|
116
|
-
throw new Error('Invalid tags: ' +
|
115
|
+
if (!isArray(tagsToCompile) || tagsToCompile.length !== 2)
|
116
|
+
throw new Error('Invalid tags: ' + tagsToCompile);
|
117
117
|
|
118
|
-
openingTagRe = new RegExp(escapeRegExp(
|
119
|
-
closingTagRe = new RegExp('\\s*' + escapeRegExp(
|
120
|
-
closingCurlyRe = new RegExp('\\s*' + escapeRegExp('}' +
|
118
|
+
openingTagRe = new RegExp(escapeRegExp(tagsToCompile[0]) + '\\s*');
|
119
|
+
closingTagRe = new RegExp('\\s*' + escapeRegExp(tagsToCompile[1]));
|
120
|
+
closingCurlyRe = new RegExp('\\s*' + escapeRegExp('}' + tagsToCompile[1]));
|
121
121
|
}
|
122
122
|
|
123
123
|
compileTags(tags || mustache.tags);
|
@@ -213,7 +213,7 @@
|
|
213
213
|
* Combines the values of consecutive text tokens in the given `tokens` array
|
214
214
|
* to a single token.
|
215
215
|
*/
|
216
|
-
function squashTokens(tokens) {
|
216
|
+
function squashTokens (tokens) {
|
217
217
|
var squashedTokens = [];
|
218
218
|
|
219
219
|
var token, lastToken;
|
@@ -240,7 +240,7 @@
|
|
240
240
|
* all tokens that appear in that section and 2) the index in the original
|
241
241
|
* template that represents the end of that section.
|
242
242
|
*/
|
243
|
-
function nestTokens(tokens) {
|
243
|
+
function nestTokens (tokens) {
|
244
244
|
var nestedTokens = [];
|
245
245
|
var collector = nestedTokens;
|
246
246
|
var sections = [];
|
@@ -273,7 +273,7 @@
|
|
273
273
|
* A simple string scanner that is used by the template parser to find
|
274
274
|
* tokens in template strings.
|
275
275
|
*/
|
276
|
-
function Scanner(string) {
|
276
|
+
function Scanner (string) {
|
277
277
|
this.string = string;
|
278
278
|
this.tail = string;
|
279
279
|
this.pos = 0;
|
@@ -282,15 +282,15 @@
|
|
282
282
|
/**
|
283
283
|
* Returns `true` if the tail is empty (end of string).
|
284
284
|
*/
|
285
|
-
Scanner.prototype.eos = function () {
|
286
|
-
return this.tail ===
|
285
|
+
Scanner.prototype.eos = function eos () {
|
286
|
+
return this.tail === '';
|
287
287
|
};
|
288
288
|
|
289
289
|
/**
|
290
290
|
* Tries to match the given regular expression at the current position.
|
291
291
|
* Returns the matched text if it can match, the empty string otherwise.
|
292
292
|
*/
|
293
|
-
Scanner.prototype.scan = function (re) {
|
293
|
+
Scanner.prototype.scan = function scan (re) {
|
294
294
|
var match = this.tail.match(re);
|
295
295
|
|
296
296
|
if (!match || match.index !== 0)
|
@@ -308,16 +308,16 @@
|
|
308
308
|
* Skips all text until the given regular expression can be matched. Returns
|
309
309
|
* the skipped string, which is the entire tail if no match can be made.
|
310
310
|
*/
|
311
|
-
Scanner.prototype.scanUntil = function (re) {
|
311
|
+
Scanner.prototype.scanUntil = function scanUntil (re) {
|
312
312
|
var index = this.tail.search(re), match;
|
313
313
|
|
314
314
|
switch (index) {
|
315
315
|
case -1:
|
316
316
|
match = this.tail;
|
317
|
-
this.tail =
|
317
|
+
this.tail = '';
|
318
318
|
break;
|
319
319
|
case 0:
|
320
|
-
match =
|
320
|
+
match = '';
|
321
321
|
break;
|
322
322
|
default:
|
323
323
|
match = this.tail.substring(0, index);
|
@@ -333,8 +333,8 @@
|
|
333
333
|
* Represents a rendering context by wrapping a view object and
|
334
334
|
* maintaining a reference to the parent context.
|
335
335
|
*/
|
336
|
-
function Context(view, parentContext) {
|
337
|
-
this.view = view
|
336
|
+
function Context (view, parentContext) {
|
337
|
+
this.view = view;
|
338
338
|
this.cache = { '.': this.view };
|
339
339
|
this.parent = parentContext;
|
340
340
|
}
|
@@ -343,7 +343,7 @@
|
|
343
343
|
* Creates a new context using the given view with this context
|
344
344
|
* as the parent.
|
345
345
|
*/
|
346
|
-
Context.prototype.push = function (view) {
|
346
|
+
Context.prototype.push = function push (view) {
|
347
347
|
return new Context(view, this);
|
348
348
|
};
|
349
349
|
|
@@ -351,14 +351,14 @@
|
|
351
351
|
* Returns the value of the given name in this context, traversing
|
352
352
|
* up the context hierarchy if the value is absent in this context's view.
|
353
353
|
*/
|
354
|
-
Context.prototype.lookup = function (name) {
|
354
|
+
Context.prototype.lookup = function lookup (name) {
|
355
355
|
var cache = this.cache;
|
356
356
|
|
357
357
|
var value;
|
358
358
|
if (name in cache) {
|
359
359
|
value = cache[name];
|
360
360
|
} else {
|
361
|
-
var context = this, names, index;
|
361
|
+
var context = this, names, index, lookupHit = false;
|
362
362
|
|
363
363
|
while (context) {
|
364
364
|
if (name.indexOf('.') > 0) {
|
@@ -366,13 +366,29 @@
|
|
366
366
|
names = name.split('.');
|
367
367
|
index = 0;
|
368
368
|
|
369
|
-
|
369
|
+
/**
|
370
|
+
* Using the dot notion path in `name`, we descend through the
|
371
|
+
* nested objects.
|
372
|
+
*
|
373
|
+
* To be certain that the lookup has been successful, we have to
|
374
|
+
* check if the last object in the path actually has the property
|
375
|
+
* we are looking for. We store the result in `lookupHit`.
|
376
|
+
*
|
377
|
+
* This is specially necessary for when the value has been set to
|
378
|
+
* `undefined` and we want to avoid looking up parent contexts.
|
379
|
+
**/
|
380
|
+
while (value != null && index < names.length) {
|
381
|
+
if (index === names.length - 1 && value != null)
|
382
|
+
lookupHit = (typeof value === 'object') &&
|
383
|
+
value.hasOwnProperty(names[index]);
|
370
384
|
value = value[names[index++]];
|
371
|
-
|
385
|
+
}
|
386
|
+
} else if (context.view != null && typeof context.view === 'object') {
|
372
387
|
value = context.view[name];
|
388
|
+
lookupHit = context.view.hasOwnProperty(name);
|
373
389
|
}
|
374
390
|
|
375
|
-
if (
|
391
|
+
if (lookupHit)
|
376
392
|
break;
|
377
393
|
|
378
394
|
context = context.parent;
|
@@ -392,14 +408,14 @@
|
|
392
408
|
* string, given a context. It also maintains a cache of templates to
|
393
409
|
* avoid the need to parse the same template twice.
|
394
410
|
*/
|
395
|
-
function Writer() {
|
411
|
+
function Writer () {
|
396
412
|
this.cache = {};
|
397
413
|
}
|
398
414
|
|
399
415
|
/**
|
400
416
|
* Clears all cached templates in this writer.
|
401
417
|
*/
|
402
|
-
Writer.prototype.clearCache = function () {
|
418
|
+
Writer.prototype.clearCache = function clearCache () {
|
403
419
|
this.cache = {};
|
404
420
|
};
|
405
421
|
|
@@ -407,7 +423,7 @@
|
|
407
423
|
* Parses and caches the given `template` and returns the array of tokens
|
408
424
|
* that is generated from the parse.
|
409
425
|
*/
|
410
|
-
Writer.prototype.parse = function (template, tags) {
|
426
|
+
Writer.prototype.parse = function parse (template, tags) {
|
411
427
|
var cache = this.cache;
|
412
428
|
var tokens = cache[template];
|
413
429
|
|
@@ -426,7 +442,7 @@
|
|
426
442
|
* also be a function that is used to load partial templates on the fly
|
427
443
|
* that takes a single argument: the name of the partial.
|
428
444
|
*/
|
429
|
-
Writer.prototype.render = function (template, view, partials) {
|
445
|
+
Writer.prototype.render = function render (template, view, partials) {
|
430
446
|
var tokens = this.parse(template);
|
431
447
|
var context = (view instanceof Context) ? view : new Context(view);
|
432
448
|
return this.renderTokens(tokens, context, partials, template);
|
@@ -441,7 +457,7 @@
|
|
441
457
|
* If the template doesn't use higher-order sections, this argument may
|
442
458
|
* be omitted.
|
443
459
|
*/
|
444
|
-
Writer.prototype.renderTokens = function (tokens, context, partials, originalTemplate) {
|
460
|
+
Writer.prototype.renderTokens = function renderTokens (tokens, context, partials, originalTemplate) {
|
445
461
|
var buffer = '';
|
446
462
|
|
447
463
|
var token, symbol, value;
|
@@ -450,12 +466,12 @@
|
|
450
466
|
token = tokens[i];
|
451
467
|
symbol = token[0];
|
452
468
|
|
453
|
-
if (symbol === '#') value = this.
|
454
|
-
else if (symbol === '^') value = this.
|
455
|
-
else if (symbol === '>') value = this.
|
456
|
-
else if (symbol === '&') value = this.
|
457
|
-
else if (symbol === 'name') value = this.
|
458
|
-
else if (symbol === 'text') value = this.
|
469
|
+
if (symbol === '#') value = this.renderSection(token, context, partials, originalTemplate);
|
470
|
+
else if (symbol === '^') value = this.renderInverted(token, context, partials, originalTemplate);
|
471
|
+
else if (symbol === '>') value = this.renderPartial(token, context, partials, originalTemplate);
|
472
|
+
else if (symbol === '&') value = this.unescapedValue(token, context);
|
473
|
+
else if (symbol === 'name') value = this.escapedValue(token, context);
|
474
|
+
else if (symbol === 'text') value = this.rawValue(token);
|
459
475
|
|
460
476
|
if (value !== undefined)
|
461
477
|
buffer += value;
|
@@ -464,14 +480,14 @@
|
|
464
480
|
return buffer;
|
465
481
|
};
|
466
482
|
|
467
|
-
Writer.prototype.
|
483
|
+
Writer.prototype.renderSection = function renderSection (token, context, partials, originalTemplate) {
|
468
484
|
var self = this;
|
469
485
|
var buffer = '';
|
470
486
|
var value = context.lookup(token[1]);
|
471
487
|
|
472
488
|
// This function is used to render an arbitrary template
|
473
489
|
// in the current context by higher-order sections.
|
474
|
-
function subRender(template) {
|
490
|
+
function subRender (template) {
|
475
491
|
return self.render(template, context, partials);
|
476
492
|
}
|
477
493
|
|
@@ -481,7 +497,7 @@
|
|
481
497
|
for (var j = 0, valueLength = value.length; j < valueLength; ++j) {
|
482
498
|
buffer += this.renderTokens(token[4], context.push(value[j]), partials, originalTemplate);
|
483
499
|
}
|
484
|
-
} else if (typeof value === 'object' || typeof value === 'string') {
|
500
|
+
} else if (typeof value === 'object' || typeof value === 'string' || typeof value === 'number') {
|
485
501
|
buffer += this.renderTokens(token[4], context.push(value), partials, originalTemplate);
|
486
502
|
} else if (isFunction(value)) {
|
487
503
|
if (typeof originalTemplate !== 'string')
|
@@ -498,7 +514,7 @@
|
|
498
514
|
return buffer;
|
499
515
|
};
|
500
516
|
|
501
|
-
Writer.prototype.
|
517
|
+
Writer.prototype.renderInverted = function renderInverted (token, context, partials, originalTemplate) {
|
502
518
|
var value = context.lookup(token[1]);
|
503
519
|
|
504
520
|
// Use JavaScript's definition of falsy. Include empty arrays.
|
@@ -507,7 +523,7 @@
|
|
507
523
|
return this.renderTokens(token[4], context, partials, originalTemplate);
|
508
524
|
};
|
509
525
|
|
510
|
-
Writer.prototype.
|
526
|
+
Writer.prototype.renderPartial = function renderPartial (token, context, partials) {
|
511
527
|
if (!partials) return;
|
512
528
|
|
513
529
|
var value = isFunction(partials) ? partials(token[1]) : partials[token[1]];
|
@@ -515,25 +531,25 @@
|
|
515
531
|
return this.renderTokens(this.parse(value), context, partials, value);
|
516
532
|
};
|
517
533
|
|
518
|
-
Writer.prototype.
|
534
|
+
Writer.prototype.unescapedValue = function unescapedValue (token, context) {
|
519
535
|
var value = context.lookup(token[1]);
|
520
536
|
if (value != null)
|
521
537
|
return value;
|
522
538
|
};
|
523
539
|
|
524
|
-
Writer.prototype.
|
540
|
+
Writer.prototype.escapedValue = function escapedValue (token, context) {
|
525
541
|
var value = context.lookup(token[1]);
|
526
542
|
if (value != null)
|
527
543
|
return mustache.escape(value);
|
528
544
|
};
|
529
545
|
|
530
|
-
Writer.prototype.
|
546
|
+
Writer.prototype.rawValue = function rawValue (token) {
|
531
547
|
return token[1];
|
532
548
|
};
|
533
549
|
|
534
|
-
mustache.name =
|
535
|
-
mustache.version =
|
536
|
-
mustache.tags = [
|
550
|
+
mustache.name = 'mustache.js';
|
551
|
+
mustache.version = '2.0.0';
|
552
|
+
mustache.tags = [ '{{', '}}' ];
|
537
553
|
|
538
554
|
// All high-level mustache.* functions use this writer.
|
539
555
|
var defaultWriter = new Writer();
|
@@ -541,7 +557,7 @@
|
|
541
557
|
/**
|
542
558
|
* Clears all cached templates in the default writer.
|
543
559
|
*/
|
544
|
-
mustache.clearCache = function () {
|
560
|
+
mustache.clearCache = function clearCache () {
|
545
561
|
return defaultWriter.clearCache();
|
546
562
|
};
|
547
563
|
|
@@ -550,7 +566,7 @@
|
|
550
566
|
* array of tokens it contains. Doing this ahead of time avoids the need to
|
551
567
|
* parse templates on the fly as they are rendered.
|
552
568
|
*/
|
553
|
-
mustache.parse = function (template, tags) {
|
569
|
+
mustache.parse = function parse (template, tags) {
|
554
570
|
return defaultWriter.parse(template, tags);
|
555
571
|
};
|
556
572
|
|
@@ -558,12 +574,15 @@
|
|
558
574
|
* Renders the `template` with the given `view` and `partials` using the
|
559
575
|
* default writer.
|
560
576
|
*/
|
561
|
-
mustache.render = function (template, view, partials) {
|
577
|
+
mustache.render = function render (template, view, partials) {
|
562
578
|
return defaultWriter.render(template, view, partials);
|
563
579
|
};
|
564
580
|
|
565
|
-
// This is here for backwards compatibility with 0.4.x
|
566
|
-
|
581
|
+
// This is here for backwards compatibility with 0.4.x.,
|
582
|
+
/*eslint-disable */ // eslint wants camel cased function name
|
583
|
+
mustache.to_html = function to_html (template, view, partials, send) {
|
584
|
+
/*eslint-enable*/
|
585
|
+
|
567
586
|
var result = mustache.render(template, view, partials);
|
568
587
|
|
569
588
|
if (isFunction(send)) {
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mustache-js-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Krzysztof Knapik
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-05-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|