underscore-source 1.0.4 → 1.1.0
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.
| 
         @@ -55,7 +55,7 @@ 
     | 
|
| 
       55 
55 
     | 
    
         
             
              root._ = _;
         
     | 
| 
       56 
56 
     | 
    
         | 
| 
       57 
57 
     | 
    
         
             
              // Current version.
         
     | 
| 
       58 
     | 
    
         
            -
              _.VERSION = '1.0 
     | 
| 
      
 58 
     | 
    
         
            +
              _.VERSION = '1.1.0';
         
     | 
| 
       59 
59 
     | 
    
         | 
| 
       60 
60 
     | 
    
         
             
              // ------------------------ Collection Functions: ---------------------------
         
     | 
| 
       61 
61 
     | 
    
         | 
| 
         @@ -92,8 +92,11 @@ 
     | 
|
| 
       92 
92 
     | 
    
         | 
| 
       93 
93 
     | 
    
         
             
              // Reduce builds up a single result from a list of values, aka inject, or foldl.
         
     | 
| 
       94 
94 
     | 
    
         
             
              // Delegates to JavaScript 1.8's native reduce if available.
         
     | 
| 
       95 
     | 
    
         
            -
              _.reduce = function(obj,  
     | 
| 
       96 
     | 
    
         
            -
                if (nativeReduce && obj.reduce === nativeReduce)  
     | 
| 
      
 95 
     | 
    
         
            +
              _.reduce = function(obj, iterator, memo, context) {
         
     | 
| 
      
 96 
     | 
    
         
            +
                if (nativeReduce && obj.reduce === nativeReduce) {
         
     | 
| 
      
 97 
     | 
    
         
            +
                  if (context) iterator = _.bind(iterator, context);
         
     | 
| 
      
 98 
     | 
    
         
            +
                  return obj.reduce(iterator, memo);
         
     | 
| 
      
 99 
     | 
    
         
            +
                }
         
     | 
| 
       97 
100 
     | 
    
         
             
                each(obj, function(value, index, list) {
         
     | 
| 
       98 
101 
     | 
    
         
             
                  memo = iterator.call(context, memo, value, index, list);
         
     | 
| 
       99 
102 
     | 
    
         
             
                });
         
     | 
| 
         @@ -102,10 +105,13 @@ 
     | 
|
| 
       102 
105 
     | 
    
         | 
| 
       103 
106 
     | 
    
         
             
              // The right-associative version of reduce, also known as foldr. Uses
         
     | 
| 
       104 
107 
     | 
    
         
             
              // Delegates to JavaScript 1.8's native reduceRight if available.
         
     | 
| 
       105 
     | 
    
         
            -
              _.reduceRight = function(obj,  
     | 
| 
       106 
     | 
    
         
            -
                if (nativeReduceRight && obj.reduceRight === nativeReduceRight)  
     | 
| 
      
 108 
     | 
    
         
            +
              _.reduceRight = function(obj, iterator, memo, context) {
         
     | 
| 
      
 109 
     | 
    
         
            +
                if (nativeReduceRight && obj.reduceRight === nativeReduceRight) {
         
     | 
| 
      
 110 
     | 
    
         
            +
                  if (context) iterator = _.bind(iterator, context);
         
     | 
| 
      
 111 
     | 
    
         
            +
                  return obj.reduceRight(iterator, memo);
         
     | 
| 
      
 112 
     | 
    
         
            +
                }
         
     | 
| 
       107 
113 
     | 
    
         
             
                var reversed = _.clone(_.toArray(obj)).reverse();
         
     | 
| 
       108 
     | 
    
         
            -
                return _.reduce(reversed,  
     | 
| 
      
 114 
     | 
    
         
            +
                return _.reduce(reversed, iterator, memo, context);
         
     | 
| 
       109 
115 
     | 
    
         
             
              };
         
     | 
| 
       110 
116 
     | 
    
         | 
| 
       111 
117 
     | 
    
         
             
              // Return the first value which passes a truth test.
         
     | 
| 
         @@ -277,11 +283,11 @@ 
     | 
|
| 
       277 
283 
     | 
    
         | 
| 
       278 
284 
     | 
    
         
             
              // Return a completely flattened version of an array.
         
     | 
| 
       279 
285 
     | 
    
         
             
              _.flatten = function(array) {
         
     | 
| 
       280 
     | 
    
         
            -
                return _.reduce(array,  
     | 
| 
      
 286 
     | 
    
         
            +
                return _.reduce(array, function(memo, value) {
         
     | 
| 
       281 
287 
     | 
    
         
             
                  if (_.isArray(value)) return memo.concat(_.flatten(value));
         
     | 
| 
       282 
288 
     | 
    
         
             
                  memo.push(value);
         
     | 
| 
       283 
289 
     | 
    
         
             
                  return memo;
         
     | 
| 
       284 
     | 
    
         
            -
                });
         
     | 
| 
      
 290 
     | 
    
         
            +
                }, []);
         
     | 
| 
       285 
291 
     | 
    
         
             
              };
         
     | 
| 
       286 
292 
     | 
    
         | 
| 
       287 
293 
     | 
    
         
             
              // Return a version of the array that does not contain the specified value(s).
         
     | 
| 
         @@ -293,10 +299,10 @@ 
     | 
|
| 
       293 
299 
     | 
    
         
             
              // Produce a duplicate-free version of the array. If the array has already
         
     | 
| 
       294 
300 
     | 
    
         
             
              // been sorted, you have the option of using a faster algorithm.
         
     | 
| 
       295 
301 
     | 
    
         
             
              _.uniq = function(array, isSorted) {
         
     | 
| 
       296 
     | 
    
         
            -
                return _.reduce(array,  
     | 
| 
      
 302 
     | 
    
         
            +
                return _.reduce(array, function(memo, el, i) {
         
     | 
| 
       297 
303 
     | 
    
         
             
                  if (0 == i || (isSorted === true ? _.last(memo) != el : !_.include(memo, el))) memo.push(el);
         
     | 
| 
       298 
304 
     | 
    
         
             
                  return memo;
         
     | 
| 
       299 
     | 
    
         
            -
                });
         
     | 
| 
      
 305 
     | 
    
         
            +
                }, []);
         
     | 
| 
       300 
306 
     | 
    
         
             
              };
         
     | 
| 
       301 
307 
     | 
    
         | 
| 
       302 
308 
     | 
    
         
             
              // Produce an array that contains every item shared between all the
         
     | 
| 
         @@ -619,17 +625,19 @@ 
     | 
|
| 
       619 
625 
     | 
    
         
             
              // JavaScript templating a-la ERB, pilfered from John Resig's
         
     | 
| 
       620 
626 
     | 
    
         
             
              // "Secrets of the JavaScript Ninja", page 83.
         
     | 
| 
       621 
627 
     | 
    
         
             
              // Single-quote fix from Rick Strahl's version.
         
     | 
| 
       622 
     | 
    
         
            -
              // With alterations for arbitrary delimiters.
         
     | 
| 
      
 628 
     | 
    
         
            +
              // With alterations for arbitrary delimiters, and to preserve whitespace.
         
     | 
| 
       623 
629 
     | 
    
         
             
              _.template = function(str, data) {
         
     | 
| 
       624 
630 
     | 
    
         
             
                var c  = _.templateSettings;
         
     | 
| 
       625 
631 
     | 
    
         
             
                var endMatch = new RegExp("'(?=[^"+c.end.substr(0, 1)+"]*"+escapeRegExp(c.end)+")","g");
         
     | 
| 
       626 
632 
     | 
    
         
             
                var fn = new Function('obj',
         
     | 
| 
       627 
633 
     | 
    
         
             
                  'var p=[],print=function(){p.push.apply(p,arguments);};' +
         
     | 
| 
       628 
     | 
    
         
            -
                  'with(obj){p.push(\'' +
         
     | 
| 
       629 
     | 
    
         
            -
                  str.replace( 
     | 
| 
       630 
     | 
    
         
            -
                     .replace( 
     | 
| 
      
 634 
     | 
    
         
            +
                  'with(obj||{}){p.push(\'' +
         
     | 
| 
      
 635 
     | 
    
         
            +
                  str.replace(/\r/g, '\\r')
         
     | 
| 
      
 636 
     | 
    
         
            +
                     .replace(/\n/g, '\\n')
         
     | 
| 
      
 637 
     | 
    
         
            +
                     .replace(/\t/g, '\\t')
         
     | 
| 
      
 638 
     | 
    
         
            +
                     .replace(endMatch,"✄")
         
     | 
| 
       631 
639 
     | 
    
         
             
                     .split("'").join("\\'")
         
     | 
| 
       632 
     | 
    
         
            -
                     .split(" 
     | 
| 
      
 640 
     | 
    
         
            +
                     .split("✄").join("'")
         
     | 
| 
       633 
641 
     | 
    
         
             
                     .replace(c.interpolate, "',$1,'")
         
     | 
| 
       634 
642 
     | 
    
         
             
                     .split(c.start).join("');")
         
     | 
| 
       635 
643 
     | 
    
         
             
                     .split(c.end).join("p.push('")
         
     | 
| 
         @@ -645,6 +653,7 @@ 
     | 
|
| 
       645 
653 
     | 
    
         
             
              _.select   = _.filter;
         
     | 
| 
       646 
654 
     | 
    
         
             
              _.all      = _.every;
         
     | 
| 
       647 
655 
     | 
    
         
             
              _.any      = _.some;
         
     | 
| 
      
 656 
     | 
    
         
            +
              _.contains = _.include;
         
     | 
| 
       648 
657 
     | 
    
         
             
              _.head     = _.first;
         
     | 
| 
       649 
658 
     | 
    
         
             
              _.tail     = _.rest;
         
     | 
| 
       650 
659 
     | 
    
         
             
              _.methods  = _.functions;
         
     |