1
+ var _ = require ( './debug' )
1
2
var config = require ( '../config' )
2
3
3
4
/**
@@ -43,4 +44,75 @@ exports.createAnchor = function (content, persist) {
43
44
return config . debug
44
45
? document . createComment ( content )
45
46
: document . createTextNode ( persist ? ' ' : '' )
47
+ }
48
+
49
+ /**
50
+ * Resolve read & write filters for a vm instance. The
51
+ * filters descriptor Array comes from the directive parser.
52
+ *
53
+ * This is extracted into its own utility so it can
54
+ * be used in multiple scenarios.
55
+ *
56
+ * @param {Vue } vm
57
+ * @param {Array<Object> } filters
58
+ * @param {Object } [target]
59
+ * @return {Object }
60
+ */
61
+
62
+ exports . resolveFilters = function ( vm , filters , target ) {
63
+ if ( ! filters ) {
64
+ return
65
+ }
66
+ var res = target || { }
67
+ // var registry = vm.$options.filters
68
+ filters . forEach ( function ( f ) {
69
+ var def = vm . $options . filters [ f . name ]
70
+ _ . assertAsset ( def , 'filter' , f . name )
71
+ if ( ! def ) return
72
+ var args = f . args
73
+ var reader , writer
74
+ if ( typeof def === 'function' ) {
75
+ reader = def
76
+ } else {
77
+ reader = def . read
78
+ writer = def . write
79
+ }
80
+ if ( reader ) {
81
+ if ( ! res . read ) res . read = [ ]
82
+ res . read . push ( function ( value ) {
83
+ return args
84
+ ? reader . apply ( vm , [ value ] . concat ( args ) )
85
+ : reader . call ( vm , value )
86
+ } )
87
+ }
88
+ if ( writer ) {
89
+ if ( ! res . write ) res . write = [ ]
90
+ res . write . push ( function ( value , oldVal ) {
91
+ return args
92
+ ? writer . apply ( vm , [ value , oldVal ] . concat ( args ) )
93
+ : writer . call ( vm , value , oldVal )
94
+ } )
95
+ }
96
+ } )
97
+ return res
98
+ }
99
+
100
+ /**
101
+ * Apply filters to a value
102
+ *
103
+ * @param {* } value
104
+ * @param {Array } filters
105
+ * @param {Vue } vm
106
+ * @param {* } oldVal
107
+ * @return {* }
108
+ */
109
+
110
+ exports . applyFilters = function ( value , filters , vm , oldVal ) {
111
+ if ( ! filters ) {
112
+ return value
113
+ }
114
+ for ( var i = 0 , l = filters . length ; i < l ; i ++ ) {
115
+ value = filters [ i ] . call ( vm , value , oldVal )
116
+ }
117
+ return value
46
118
}
0 commit comments