1+ var _ = require ( './debug' )
12var config = require ( '../config' )
23
34/**
@@ -43,4 +44,75 @@ exports.createAnchor = function (content, persist) {
4344 return config . debug
4445 ? document . createComment ( content )
4546 : 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
46118}
0 commit comments