|
|
@@ -1,3 +1,4 @@
|
|
|
+var _ = require('./debug')
|
|
|
var config = require('../config')
|
|
|
|
|
|
/**
|
|
|
@@ -43,4 +44,75 @@ exports.createAnchor = function (content, persist) {
|
|
|
return config.debug
|
|
|
? document.createComment(content)
|
|
|
: document.createTextNode(persist ? ' ' : '')
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Resolve read & write filters for a vm instance. The
|
|
|
+ * filters descriptor Array comes from the directive parser.
|
|
|
+ *
|
|
|
+ * This is extracted into its own utility so it can
|
|
|
+ * be used in multiple scenarios.
|
|
|
+ *
|
|
|
+ * @param {Vue} vm
|
|
|
+ * @param {Array<Object>} filters
|
|
|
+ * @param {Object} [target]
|
|
|
+ * @return {Object}
|
|
|
+ */
|
|
|
+
|
|
|
+exports.resolveFilters = function (vm, filters, target) {
|
|
|
+ if (!filters) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var res = target || {}
|
|
|
+ // var registry = vm.$options.filters
|
|
|
+ filters.forEach(function (f) {
|
|
|
+ var def = vm.$options.filters[f.name]
|
|
|
+ _.assertAsset(def, 'filter', f.name)
|
|
|
+ if (!def) return
|
|
|
+ var args = f.args
|
|
|
+ var reader, writer
|
|
|
+ if (typeof def === 'function') {
|
|
|
+ reader = def
|
|
|
+ } else {
|
|
|
+ reader = def.read
|
|
|
+ writer = def.write
|
|
|
+ }
|
|
|
+ if (reader) {
|
|
|
+ if (!res.read) res.read = []
|
|
|
+ res.read.push(function (value) {
|
|
|
+ return args
|
|
|
+ ? reader.apply(vm, [value].concat(args))
|
|
|
+ : reader.call(vm, value)
|
|
|
+ })
|
|
|
+ }
|
|
|
+ if (writer) {
|
|
|
+ if (!res.write) res.write = []
|
|
|
+ res.write.push(function (value, oldVal) {
|
|
|
+ return args
|
|
|
+ ? writer.apply(vm, [value, oldVal].concat(args))
|
|
|
+ : writer.call(vm, value, oldVal)
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+ return res
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Apply filters to a value
|
|
|
+ *
|
|
|
+ * @param {*} value
|
|
|
+ * @param {Array} filters
|
|
|
+ * @param {Vue} vm
|
|
|
+ * @param {*} oldVal
|
|
|
+ * @return {*}
|
|
|
+ */
|
|
|
+
|
|
|
+exports.applyFilters = function (value, filters, vm, oldVal) {
|
|
|
+ if (!filters) {
|
|
|
+ return value
|
|
|
+ }
|
|
|
+ for (var i = 0, l = filters.length; i < l; i++) {
|
|
|
+ value = filters[i].call(vm, value, oldVal)
|
|
|
+ }
|
|
|
+ return value
|
|
|
}
|