1
1
/**
2
2
@author leeluolee
3
- @version 0.5.1
3
+ @version 0.5.2
4
4
@homepage http://regularjs.github.io
5
5
*/
6
6
( function webpackUniversalModuleDefinition ( root , factory ) {
@@ -147,6 +147,12 @@ return /******/ (function(modules) { // webpackBootstrap
147
147
return res ;
148
148
}
149
149
150
+ _ . some = function ( list , fn ) {
151
+ for ( var i = 0 , len = list . length ; i < len ; i ++ ) {
152
+ if ( fn ( list [ i ] ) ) return true
153
+ }
154
+ }
155
+
150
156
_ . varName = 'd' ;
151
157
_ . setName = 'p_' ;
152
158
_ . ctxName = 'c' ;
@@ -176,7 +182,7 @@ return /******/ (function(modules) { // webpackBootstrap
176
182
177
183
// beacuse slice and toLowerCase is expensive. we handle undefined and null in another way
178
184
_ . typeOf = function ( o ) {
179
- return o == null ? String ( o ) :o2str . call ( o ) . slice ( 8 , - 1 ) ;
185
+ return o == null ? String ( o ) :o2str . call ( o ) . slice ( 8 , - 1 ) . toLowerCase ( ) ;
180
186
}
181
187
182
188
@@ -528,9 +534,9 @@ return /******/ (function(modules) { // webpackBootstrap
528
534
_ . normListener = function ( events ) {
529
535
var eventListeners = [ ] ;
530
536
var pType = _ . typeOf ( events ) ;
531
- if ( pType === 'Array ' ) {
537
+ if ( pType === 'array ' ) {
532
538
return events ;
533
- } else if ( pType === 'Object ' ) {
539
+ } else if ( pType === 'object ' ) {
534
540
for ( var i in events ) if ( events . hasOwnProperty ( i ) ) {
535
541
eventListeners . push ( {
536
542
type : i ,
@@ -1663,13 +1669,13 @@ return /******/ (function(modules) { // webpackBootstrap
1663
1669
*/
1664
1670
$bind : function ( component , expr1 , expr2 ) {
1665
1671
var type = _ . typeOf ( expr1 ) ;
1666
- if ( expr1 . type === 'expression' || type === 'String ' ) {
1672
+ if ( expr1 . type === 'expression' || type === 'string ' ) {
1667
1673
this . _bind ( component , expr1 , expr2 )
1668
- } else if ( type === "Array " ) { // multiply same path binding through array
1674
+ } else if ( type === "array " ) { // multiply same path binding through array
1669
1675
for ( var i = 0 , len = expr1 . length ; i < len ; i ++ ) {
1670
1676
this . _bind ( component , expr1 [ i ] ) ;
1671
1677
}
1672
- } else if ( type === "Object " ) {
1678
+ } else if ( type === "object " ) {
1673
1679
for ( var i in expr1 ) if ( expr1 . hasOwnProperty ( i ) ) {
1674
1680
this . _bind ( component , i , expr1 [ i ] ) ;
1675
1681
}
@@ -1783,11 +1789,15 @@ return /******/ (function(modules) { // webpackBootstrap
1783
1789
1784
1790
if ( expr . setbody && ! expr . set ) {
1785
1791
var setbody = expr . setbody ;
1786
- expr . set = function ( ctx , value , ext ) {
1787
- expr . set = new Function ( _ . ctxName , _ . setName , _ . extName , _ . prefix + setbody ) ;
1788
- return expr . set ( ctx , value , ext ) ;
1792
+ var filters = expr . filters ;
1793
+ var self = this ;
1794
+ if ( ! filters || ! _ . some ( filters , function ( filter ) { return ! self . _f_ ( filter ) . set } ) ) {
1795
+ expr . set = function ( ctx , value , ext ) {
1796
+ expr . set = new Function ( _ . ctxName , _ . setName , _ . extName , _ . prefix + setbody ) ;
1797
+ return expr . set ( ctx , value , ext ) ;
1798
+ }
1789
1799
}
1790
- expr . setbody = null ;
1800
+ expr . filters = expr . setbody = null ;
1791
1801
}
1792
1802
if ( expr . set ) {
1793
1803
touched . set = ! ext ? expr . set : function ( ctx , value ) {
@@ -2131,7 +2141,7 @@ return /******/ (function(modules) { // webpackBootstrap
2131
2141
if ( typeof handler === 'string' ) {
2132
2142
handler = wrapHander ( handler ) ;
2133
2143
}
2134
- if ( _ . typeOf ( reg ) === 'RegExp ' ) reg = reg . toString ( ) . slice ( 1 , - 1 ) ;
2144
+ if ( _ . typeOf ( reg ) === 'regexp ' ) reg = reg . toString ( ) . slice ( 1 , - 1 ) ;
2135
2145
2136
2146
reg = reg . replace ( / \{ ( \w + ) \} / g, replaceFn )
2137
2147
retain = _ . findSubCapture ( reg ) + 1 ;
@@ -2629,7 +2639,7 @@ return /******/ (function(modules) { // webpackBootstrap
2629
2639
2630
2640
var body = buffer . get || buffer ;
2631
2641
var setbody = buffer . set ;
2632
- return node . expression ( body , setbody , ! this . depend . length ) ;
2642
+ return node . expression ( body , setbody , ! this . depend . length , buffer . filters ) ;
2633
2643
}
2634
2644
2635
2645
@@ -2638,25 +2648,34 @@ return /******/ (function(modules) { // webpackBootstrap
2638
2648
op . filter = function ( ) {
2639
2649
var left = this . assign ( ) ;
2640
2650
var ll = this . eat ( '|' ) ;
2641
- var buffer = [ ] , setBuffer , prefix ,
2651
+ var buffer = [ ] , filters , setBuffer , prefix ,
2642
2652
attr = "t" ,
2643
2653
set = left . set , get ,
2644
2654
tmp = "" ;
2645
2655
2646
2656
if ( ll ) {
2647
- if ( set ) setBuffer = [ ] ;
2657
+ if ( set ) {
2658
+ setBuffer = [ ] ;
2659
+ filters = [ ] ;
2660
+ }
2648
2661
2649
2662
prefix = "(function(" + attr + "){" ;
2650
2663
2651
2664
do {
2652
- tmp = attr + " = " + ctxName + "._f_('" + this . match ( 'IDENT' ) . value + "' ).get.call( " + _ . ctxName + "," + attr ;
2665
+ var filterName = this . match ( 'IDENT' ) . value ;
2666
+ tmp = attr + " = " + ctxName + "._f_('" + filterName + "' ).get.call( " + _ . ctxName + "," + attr ;
2653
2667
if ( this . eat ( ':' ) ) {
2654
2668
tmp += ", " + this . arguments ( "|" ) . join ( "," ) + ");"
2655
2669
} else {
2656
2670
tmp += ');'
2657
2671
}
2658
2672
buffer . push ( tmp ) ;
2659
- setBuffer && setBuffer . unshift ( tmp . replace ( " ).get.call" , " ).set.call" ) ) ;
2673
+
2674
+ if ( set ) {
2675
+ // only in runtime ,we can detect whether the filter has a set function.
2676
+ filters . push ( filterName ) ;
2677
+ setBuffer . unshift ( tmp . replace ( " ).get.call" , " ).set.call" ) ) ;
2678
+ }
2660
2679
2661
2680
} while ( ll = this . eat ( '|' ) ) ;
2662
2681
buffer . push ( "return " + attr ) ;
@@ -2671,7 +2690,9 @@ return /******/ (function(modules) { // webpackBootstrap
2671
2690
2672
2691
}
2673
2692
// the set function is depend on the filter definition. if it have set method, the set will work
2674
- return this . getset ( get , set ) ;
2693
+ var ret = getset ( get , set ) ;
2694
+ ret . filters = filters ;
2695
+ return ret ;
2675
2696
}
2676
2697
return left ;
2677
2698
}
@@ -2682,8 +2703,8 @@ return /******/ (function(modules) { // webpackBootstrap
2682
2703
var left = this . condition ( ) , ll ;
2683
2704
if ( ll = this . eat ( [ '=' , '+=' , '-=' , '*=' , '/=' , '%=' ] ) ) {
2684
2705
if ( ! left . set ) this . error ( 'invalid lefthand expression in assignment expression' ) ;
2685
- return this . getset ( left . set . replace ( "," + _ . setName , "," + this . condition ( ) . get ) . replace ( "'='" , "'" + ll . type + "'" ) , left . set ) ;
2686
- // return this. getset('(' + left.get + ll.type + this.condition().get + ')', left.set);
2706
+ return getset ( left . set . replace ( "," + _ . setName , "," + this . condition ( ) . get ) . replace ( "'='" , "'" + ll . type + "'" ) , left . set ) ;
2707
+ // return getset('(' + left.get + ll.type + this.condition().get + ')', left.set);
2687
2708
}
2688
2709
return left ;
2689
2710
}
@@ -2694,7 +2715,7 @@ return /******/ (function(modules) { // webpackBootstrap
2694
2715
2695
2716
var test = this . or ( ) ;
2696
2717
if ( this . eat ( '?' ) ) {
2697
- return this . getset ( [ test . get + "?" ,
2718
+ return getset ( [ test . get + "?" ,
2698
2719
this . assign ( ) . get ,
2699
2720
this . match ( ":" ) . type ,
2700
2721
this . assign ( ) . get ] . join ( "" ) ) ;
@@ -2710,7 +2731,7 @@ return /******/ (function(modules) { // webpackBootstrap
2710
2731
var left = this . and ( ) ;
2711
2732
2712
2733
if ( this . eat ( '||' ) ) {
2713
- return this . getset ( left . get + '||' + this . or ( ) . get ) ;
2734
+ return getset ( left . get + '||' + this . or ( ) . get ) ;
2714
2735
}
2715
2736
2716
2737
return left ;
@@ -2722,7 +2743,7 @@ return /******/ (function(modules) { // webpackBootstrap
2722
2743
var left = this . equal ( ) ;
2723
2744
2724
2745
if ( this . eat ( '&&' ) ) {
2725
- return this . getset ( left . get + '&&' + this . and ( ) . get ) ;
2746
+ return getset ( left . get + '&&' + this . and ( ) . get ) ;
2726
2747
}
2727
2748
return left ;
2728
2749
}
@@ -2736,7 +2757,7 @@ return /******/ (function(modules) { // webpackBootstrap
2736
2757
var left = this . relation ( ) , ll ;
2737
2758
// @perf ;
2738
2759
if ( ll = this . eat ( [ '==' , '!=' , '===' , '!==' ] ) ) {
2739
- return this . getset ( left . get + ll . type + this . equal ( ) . get ) ;
2760
+ return getset ( left . get + ll . type + this . equal ( ) . get ) ;
2740
2761
}
2741
2762
return left
2742
2763
}
@@ -2749,7 +2770,7 @@ return /******/ (function(modules) { // webpackBootstrap
2749
2770
var left = this . additive ( ) , ll ;
2750
2771
// @perf
2751
2772
if ( ll = ( this . eat ( [ '<' , '>' , '>=' , '<=' ] ) || this . eat ( 'IDENT' , 'in' ) ) ) {
2752
- return this . getset ( left . get + ll . value + this . relation ( ) . get ) ;
2773
+ return getset ( left . get + ll . value + this . relation ( ) . get ) ;
2753
2774
}
2754
2775
return left
2755
2776
}
@@ -2760,7 +2781,7 @@ return /******/ (function(modules) { // webpackBootstrap
2760
2781
op . additive = function ( ) {
2761
2782
var left = this . multive ( ) , ll ;
2762
2783
if ( ll = this . eat ( [ '+' , '-' ] ) ) {
2763
- return this . getset ( left . get + ll . value + this . additive ( ) . get ) ;
2784
+ return getset ( left . get + ll . value + this . additive ( ) . get ) ;
2764
2785
}
2765
2786
return left
2766
2787
}
@@ -2772,7 +2793,7 @@ return /******/ (function(modules) { // webpackBootstrap
2772
2793
op . multive = function ( ) {
2773
2794
var left = this . range ( ) , ll ;
2774
2795
if ( ll = this . eat ( [ '*' , '/' , '%' ] ) ) {
2775
- return this . getset ( left . get + ll . type + this . multive ( ) . get ) ;
2796
+ return getset ( left . get + ll . type + this . multive ( ) . get ) ;
2776
2797
}
2777
2798
return left ;
2778
2799
}
@@ -2784,7 +2805,7 @@ return /******/ (function(modules) { // webpackBootstrap
2784
2805
right = this . unary ( ) ;
2785
2806
var body =
2786
2807
"(function(start,end){var res = [],step=end>start?1:-1; for(var i = start; end>start?i <= end: i>=end; i=i+step){res.push(i); } return res })(" + left . get + "," + right . get + ")"
2787
- return this . getset ( body ) ;
2808
+ return getset ( body ) ;
2788
2809
}
2789
2810
2790
2811
return left ;
@@ -2800,7 +2821,7 @@ return /******/ (function(modules) { // webpackBootstrap
2800
2821
op . unary = function ( ) {
2801
2822
var ll ;
2802
2823
if ( ll = this . eat ( [ '+' , '-' , '~' , '!' ] ) ) {
2803
- return this . getset ( '(' + ll . type + this . unary ( ) . get + ')' ) ;
2824
+ return getset ( '(' + ll . type + this . unary ( ) . get + ')' ) ;
2804
2825
} else {
2805
2826
return this . member ( )
2806
2827
}
@@ -2926,14 +2947,14 @@ return /******/ (function(modules) { // webpackBootstrap
2926
2947
this . next ( ) ;
2927
2948
var value = "" + ll . value ;
2928
2949
var quota = ~ value . indexOf ( "'" ) ? "\"" : "'" ;
2929
- return this . getset ( quota + value + quota ) ;
2950
+ return getset ( quota + value + quota ) ;
2930
2951
case 'NUMBER' :
2931
2952
this . next ( ) ;
2932
- return this . getset ( "" + ll . value ) ;
2953
+ return getset ( "" + ll . value ) ;
2933
2954
case "IDENT" :
2934
2955
this . next ( ) ;
2935
2956
if ( isKeyWord ( ll . value ) ) {
2936
- return this . getset ( ll . value ) ;
2957
+ return getset ( ll . value ) ;
2937
2958
}
2938
2959
return ll . value ;
2939
2960
default :
@@ -2990,11 +3011,12 @@ return /******/ (function(modules) { // webpackBootstrap
2990
3011
this . match ( '(' ) ;
2991
3012
var res = this . filter ( )
2992
3013
res . get = '(' + res . get + ')' ;
3014
+ res . set = res . set ;
2993
3015
this . match ( ')' ) ;
2994
3016
return res ;
2995
3017
}
2996
3018
2997
- op . getset = function ( get , set ) {
3019
+ function getset ( get , set ) {
2998
3020
return {
2999
3021
get : get ,
3000
3022
set : set
@@ -3045,12 +3067,13 @@ return /******/ (function(modules) { // webpackBootstrap
3045
3067
track : track
3046
3068
}
3047
3069
} ,
3048
- expression : function ( body , setbody , constant ) {
3070
+ expression : function ( body , setbody , constant , filters ) {
3049
3071
return {
3050
3072
type : "expression" ,
3051
3073
body : body ,
3052
3074
constant : constant || false ,
3053
- setbody : setbody || false
3075
+ setbody : setbody || false ,
3076
+ filters : filters
3054
3077
}
3055
3078
} ,
3056
3079
text : function ( text ) {
@@ -3772,7 +3795,7 @@ return /******/ (function(modules) { // webpackBootstrap
3772
3795
if ( altGroup . destroy ) altGroup . destroy ( true ) ;
3773
3796
}
3774
3797
3775
- if ( nType === 'Object ' ) rawNewValue = newValue ;
3798
+ if ( nType === 'object ' ) rawNewValue = newValue ;
3776
3799
3777
3800
if ( track === true ) {
3778
3801
updateSimple ( newList , oldList , rawNewValue ) ;
@@ -3835,7 +3858,7 @@ return /******/ (function(modules) { // webpackBootstrap
3835
3858
} ;
3836
3859
3837
3860
function getListFromValue ( value , type ) {
3838
- return type === 'Array ' ? value : ( type === 'Object ' ? _ . keys ( value ) : [ ] ) ;
3861
+ return type === 'array ' ? value : ( type === 'object ' ? _ . keys ( value ) : [ ] ) ;
3839
3862
}
3840
3863
3841
3864
@@ -5004,7 +5027,7 @@ return /******/ (function(modules) { // webpackBootstrap
5004
5027
// stable watch is dirty
5005
5028
var stableDirty = this . _digest ( true ) ;
5006
5029
5007
- if ( n > 0 && stableDirty && this . $emit ) {
5030
+ if ( ( n > 0 || stableDirty ) && this . $emit ) {
5008
5031
this . $emit ( "$update" ) ;
5009
5032
if ( this . devtools ) {
5010
5033
this . devtools . emit ( "flush" , this )
@@ -5069,11 +5092,11 @@ return /******/ (function(modules) { // webpackBootstrap
5069
5092
eq = true ;
5070
5093
5071
5094
// !Object
5072
- if ( ! ( tnow === 'Object ' && tlast === 'Object ' && watcher . deep ) ) {
5095
+ if ( ! ( tnow === 'object ' && tlast === 'object ' && watcher . deep ) ) {
5073
5096
// Array
5074
- if ( tnow === 'Array ' && ( tlast == 'undefined' || tlast === 'Array ' ) ) {
5097
+ if ( tnow === 'array ' && ( tlast == 'undefined' || tlast === 'array ' ) ) {
5075
5098
diff = diffArray ( now , watcher . last || [ ] , watcher . diff )
5076
- if ( tlast !== 'Array ' || diff === true || diff . length ) dirty = true ;
5099
+ if ( tlast !== 'array ' || diff === true || diff . length ) dirty = true ;
5077
5100
} else {
5078
5101
eq = _ . equals ( now , last ) ;
5079
5102
if ( ! eq || watcher . force ) {
@@ -5096,7 +5119,7 @@ return /******/ (function(modules) { // webpackBootstrap
5096
5119
}
5097
5120
}
5098
5121
if ( dirty && ! watcher . test ) {
5099
- if ( tnow === 'Object ' && watcher . deep || tnow === 'Array ' ) {
5122
+ if ( tnow === 'object ' && watcher . deep || tnow === 'array ' ) {
5100
5123
watcher . last = _ . clone ( now ) ;
5101
5124
} else {
5102
5125
watcher . last = now ;
0 commit comments