fluentd-ui 0.3.8 → 0.3.9
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.
Potentially problematic release.
This version of fluentd-ui might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/ChangeLog +9 -0
- data/Gemfile +1 -0
- data/Gemfile.lock +4 -1
- data/app/assets/javascripts/vue/fluent_log.js +4 -4
- data/app/assets/javascripts/vue/in_tail_format.js +43 -49
- data/app/assets/javascripts/{alert.js → vue/notification.js} +21 -7
- data/app/assets/javascripts/vue/settings.js +121 -0
- data/app/assets/javascripts/vue/treeview.js +3 -3
- data/app/assets/stylesheets/common.css.scss +7 -1
- data/app/controllers/api/settings_controller.rb +55 -0
- data/app/controllers/api_controller.rb +6 -2
- data/app/controllers/concerns/setting_concern.rb +2 -2
- data/app/controllers/fluentd/settings_controller.rb +17 -2
- data/app/models/fluentd/setting/config.rb +39 -0
- data/app/views/api/settings/_element.json.jbuilder +6 -0
- data/app/views/api/settings/index.json.jbuilder +3 -0
- data/app/views/api/settings/show.json.jbuilder +1 -0
- data/app/views/fluentd/settings/edit.html.haml +3 -0
- data/app/views/fluentd/settings/source_and_output.html.haml +19 -2
- data/app/views/layouts/application.html.erb +1 -30
- data/app/views/shared/vue/_in_tail_format.html.erb +11 -36
- data/app/views/shared/vue/_notification.html.erb +31 -0
- data/app/views/shared/vue/_setting.html.erb +23 -0
- data/app/views/shared/vue/_treeview.html.erb +2 -2
- data/bower.json +1 -1
- data/config/application.rb +1 -0
- data/config/locales/translation_en.yml +11 -7
- data/config/locales/translation_ja.yml +4 -0
- data/config/routes.rb +2 -0
- data/lib/fluentd-ui/version.rb +1 -1
- data/spec/features/fluentd/setting/source_and_output_spec.rb +157 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/support/javascript_macro.rb +21 -0
- data/vendor/assets/javascripts/bower/vue/.bower.json +7 -7
- data/vendor/assets/javascripts/bower/vue/LICENSE +1 -1
- data/vendor/assets/javascripts/bower/vue/dist/vue.js +7822 -4768
- data/vendor/assets/javascripts/bower/vue/dist/vue.min.js +7 -7
- data/vendor/assets/javascripts/bower/vue/src/api/child.js +53 -0
- data/vendor/assets/javascripts/bower/vue/src/api/data.js +161 -0
- data/vendor/assets/javascripts/bower/vue/src/api/dom.js +211 -0
- data/vendor/assets/javascripts/bower/vue/src/api/events.js +176 -0
- data/vendor/assets/javascripts/bower/vue/src/api/global.js +146 -0
- data/vendor/assets/javascripts/bower/vue/src/api/lifecycle.js +144 -0
- data/vendor/assets/javascripts/bower/vue/src/batcher.js +52 -32
- data/vendor/assets/javascripts/bower/vue/src/cache.js +112 -0
- data/vendor/assets/javascripts/bower/vue/src/compiler/compile.js +549 -0
- data/vendor/assets/javascripts/bower/vue/src/compiler/transclude.js +163 -0
- data/vendor/assets/javascripts/bower/vue/src/config.js +74 -14
- data/vendor/assets/javascripts/bower/vue/src/directive.js +179 -219
- data/vendor/assets/javascripts/bower/vue/src/directives/attr.js +32 -0
- data/vendor/assets/javascripts/bower/vue/src/directives/class.js +18 -0
- data/vendor/assets/javascripts/bower/vue/src/directives/cloak.js +12 -0
- data/vendor/assets/javascripts/bower/vue/src/directives/component.js +214 -0
- data/vendor/assets/javascripts/bower/vue/src/directives/el.js +13 -0
- data/vendor/assets/javascripts/bower/vue/src/directives/html.js +30 -34
- data/vendor/assets/javascripts/bower/vue/src/directives/if.js +77 -46
- data/vendor/assets/javascripts/bower/vue/src/directives/index.js +22 -129
- data/vendor/assets/javascripts/bower/vue/src/directives/model/checkbox.js +25 -0
- data/vendor/assets/javascripts/bower/vue/src/directives/model/default.js +123 -0
- data/vendor/assets/javascripts/bower/vue/src/directives/model/index.js +56 -0
- data/vendor/assets/javascripts/bower/vue/src/directives/model/radio.js +26 -0
- data/vendor/assets/javascripts/bower/vue/src/directives/model/select.js +166 -0
- data/vendor/assets/javascripts/bower/vue/src/directives/on.js +51 -50
- data/vendor/assets/javascripts/bower/vue/src/directives/partial.js +36 -42
- data/vendor/assets/javascripts/bower/vue/src/directives/ref.js +24 -0
- data/vendor/assets/javascripts/bower/vue/src/directives/repeat.js +477 -226
- data/vendor/assets/javascripts/bower/vue/src/directives/show.js +8 -0
- data/vendor/assets/javascripts/bower/vue/src/directives/style.js +49 -37
- data/vendor/assets/javascripts/bower/vue/src/directives/text.js +15 -0
- data/vendor/assets/javascripts/bower/vue/src/directives/transition.js +12 -0
- data/vendor/assets/javascripts/bower/vue/src/directives/with.js +38 -41
- data/vendor/assets/javascripts/bower/vue/src/filters/array-filters.js +87 -0
- data/vendor/assets/javascripts/bower/vue/src/filters/index.js +135 -0
- data/vendor/assets/javascripts/bower/vue/src/instance/compile.js +71 -0
- data/vendor/assets/javascripts/bower/vue/src/instance/events.js +122 -0
- data/vendor/assets/javascripts/bower/vue/src/instance/init.js +76 -0
- data/vendor/assets/javascripts/bower/vue/src/instance/scope.js +217 -0
- data/vendor/assets/javascripts/bower/vue/src/observer/array.js +90 -0
- data/vendor/assets/javascripts/bower/vue/src/observer/dep.js +50 -0
- data/vendor/assets/javascripts/bower/vue/src/observer/index.js +235 -0
- data/vendor/assets/javascripts/bower/vue/src/observer/object.js +75 -0
- data/vendor/assets/javascripts/bower/vue/src/parsers/directive.js +159 -0
- data/vendor/assets/javascripts/bower/vue/src/parsers/expression.js +226 -0
- data/vendor/assets/javascripts/bower/vue/src/parsers/path.js +300 -0
- data/vendor/assets/javascripts/bower/vue/src/parsers/template.js +246 -0
- data/vendor/assets/javascripts/bower/vue/src/parsers/text.js +178 -0
- data/vendor/assets/javascripts/bower/vue/src/transition/css.js +189 -0
- data/vendor/assets/javascripts/bower/vue/src/transition/index.js +151 -0
- data/vendor/assets/javascripts/bower/vue/src/transition/js.js +43 -0
- data/vendor/assets/javascripts/bower/vue/src/util/debug.js +50 -0
- data/vendor/assets/javascripts/bower/vue/src/util/dom.js +176 -0
- data/vendor/assets/javascripts/bower/vue/src/util/env.js +74 -0
- data/vendor/assets/javascripts/bower/vue/src/util/filter.js +72 -0
- data/vendor/assets/javascripts/bower/vue/src/util/index.js +8 -0
- data/vendor/assets/javascripts/bower/vue/src/util/lang.js +175 -0
- data/vendor/assets/javascripts/bower/vue/src/util/merge-option.js +258 -0
- data/vendor/assets/javascripts/bower/vue/src/vue.js +84 -0
- data/vendor/assets/javascripts/bower/vue/src/watcher.js +240 -0
- metadata +65 -20
- data/app/assets/javascripts/setting_format.js +0 -15
- data/vendor/assets/javascripts/bower/vue/src/binding.js +0 -103
- data/vendor/assets/javascripts/bower/vue/src/compiler.js +0 -1037
- data/vendor/assets/javascripts/bower/vue/src/deps-parser.js +0 -65
- data/vendor/assets/javascripts/bower/vue/src/directives/model.js +0 -174
- data/vendor/assets/javascripts/bower/vue/src/directives/view.js +0 -56
- data/vendor/assets/javascripts/bower/vue/src/emitter.js +0 -97
- data/vendor/assets/javascripts/bower/vue/src/exp-parser.js +0 -190
- data/vendor/assets/javascripts/bower/vue/src/filters.js +0 -191
- data/vendor/assets/javascripts/bower/vue/src/fragment.js +0 -67
- data/vendor/assets/javascripts/bower/vue/src/main.js +0 -188
- data/vendor/assets/javascripts/bower/vue/src/observer.js +0 -446
- data/vendor/assets/javascripts/bower/vue/src/template-parser.js +0 -46
- data/vendor/assets/javascripts/bower/vue/src/text-parser.js +0 -96
- data/vendor/assets/javascripts/bower/vue/src/transition.js +0 -228
- data/vendor/assets/javascripts/bower/vue/src/utils.js +0 -326
- data/vendor/assets/javascripts/bower/vue/src/viewmodel.js +0 -190
@@ -0,0 +1,72 @@
|
|
1
|
+
var _ = require('./debug')
|
2
|
+
|
3
|
+
/**
|
4
|
+
* Resolve read & write filters for a vm instance. The
|
5
|
+
* filters descriptor Array comes from the directive parser.
|
6
|
+
*
|
7
|
+
* This is extracted into its own utility so it can
|
8
|
+
* be used in multiple scenarios.
|
9
|
+
*
|
10
|
+
* @param {Vue} vm
|
11
|
+
* @param {Array<Object>} filters
|
12
|
+
* @param {Object} [target]
|
13
|
+
* @return {Object}
|
14
|
+
*/
|
15
|
+
|
16
|
+
exports.resolveFilters = function (vm, filters, target) {
|
17
|
+
if (!filters) {
|
18
|
+
return
|
19
|
+
}
|
20
|
+
var res = target || {}
|
21
|
+
// var registry = vm.$options.filters
|
22
|
+
filters.forEach(function (f) {
|
23
|
+
var def = vm.$options.filters[f.name]
|
24
|
+
_.assertAsset(def, 'filter', f.name)
|
25
|
+
if (!def) return
|
26
|
+
var args = f.args
|
27
|
+
var reader, writer
|
28
|
+
if (typeof def === 'function') {
|
29
|
+
reader = def
|
30
|
+
} else {
|
31
|
+
reader = def.read
|
32
|
+
writer = def.write
|
33
|
+
}
|
34
|
+
if (reader) {
|
35
|
+
if (!res.read) res.read = []
|
36
|
+
res.read.push(function (value) {
|
37
|
+
return args
|
38
|
+
? reader.apply(vm, [value].concat(args))
|
39
|
+
: reader.call(vm, value)
|
40
|
+
})
|
41
|
+
}
|
42
|
+
if (writer) {
|
43
|
+
if (!res.write) res.write = []
|
44
|
+
res.write.push(function (value, oldVal) {
|
45
|
+
return args
|
46
|
+
? writer.apply(vm, [value, oldVal].concat(args))
|
47
|
+
: writer.call(vm, value, oldVal)
|
48
|
+
})
|
49
|
+
}
|
50
|
+
})
|
51
|
+
return res
|
52
|
+
}
|
53
|
+
|
54
|
+
/**
|
55
|
+
* Apply filters to a value
|
56
|
+
*
|
57
|
+
* @param {*} value
|
58
|
+
* @param {Array} filters
|
59
|
+
* @param {Vue} vm
|
60
|
+
* @param {*} oldVal
|
61
|
+
* @return {*}
|
62
|
+
*/
|
63
|
+
|
64
|
+
exports.applyFilters = function (value, filters, vm, oldVal) {
|
65
|
+
if (!filters) {
|
66
|
+
return value
|
67
|
+
}
|
68
|
+
for (var i = 0, l = filters.length; i < l; i++) {
|
69
|
+
value = filters[i].call(vm, value, oldVal)
|
70
|
+
}
|
71
|
+
return value
|
72
|
+
}
|
@@ -0,0 +1,175 @@
|
|
1
|
+
/**
|
2
|
+
* Check is a string starts with $ or _
|
3
|
+
*
|
4
|
+
* @param {String} str
|
5
|
+
* @return {Boolean}
|
6
|
+
*/
|
7
|
+
|
8
|
+
exports.isReserved = function (str) {
|
9
|
+
var c = str.charCodeAt(0)
|
10
|
+
return c === 0x24 || c === 0x5F
|
11
|
+
}
|
12
|
+
|
13
|
+
/**
|
14
|
+
* Guard text output, make sure undefined outputs
|
15
|
+
* empty string
|
16
|
+
*
|
17
|
+
* @param {*} value
|
18
|
+
* @return {String}
|
19
|
+
*/
|
20
|
+
|
21
|
+
exports.toString = function (value) {
|
22
|
+
return value == null
|
23
|
+
? ''
|
24
|
+
: value.toString()
|
25
|
+
}
|
26
|
+
|
27
|
+
/**
|
28
|
+
* Check and convert possible numeric numbers before
|
29
|
+
* setting back to data
|
30
|
+
*
|
31
|
+
* @param {*} value
|
32
|
+
* @return {*|Number}
|
33
|
+
*/
|
34
|
+
|
35
|
+
exports.toNumber = function (value) {
|
36
|
+
return (
|
37
|
+
isNaN(value) ||
|
38
|
+
value === null ||
|
39
|
+
typeof value === 'boolean'
|
40
|
+
) ? value
|
41
|
+
: Number(value)
|
42
|
+
}
|
43
|
+
|
44
|
+
/**
|
45
|
+
* Strip quotes from a string
|
46
|
+
*
|
47
|
+
* @param {String} str
|
48
|
+
* @return {String | false}
|
49
|
+
*/
|
50
|
+
|
51
|
+
exports.stripQuotes = function (str) {
|
52
|
+
var a = str.charCodeAt(0)
|
53
|
+
var b = str.charCodeAt(str.length - 1)
|
54
|
+
return a === b && (a === 0x22 || a === 0x27)
|
55
|
+
? str.slice(1, -1)
|
56
|
+
: false
|
57
|
+
}
|
58
|
+
|
59
|
+
/**
|
60
|
+
* Camelize a hyphen-delmited string.
|
61
|
+
*
|
62
|
+
* @param {String} str
|
63
|
+
* @return {String}
|
64
|
+
*/
|
65
|
+
|
66
|
+
var camelRE = /[-_](\w)/g
|
67
|
+
var capitalCamelRE = /(?:^|[-_])(\w)/g
|
68
|
+
|
69
|
+
exports.camelize = function (str, cap) {
|
70
|
+
var RE = cap ? capitalCamelRE : camelRE
|
71
|
+
return str.replace(RE, function (_, c) {
|
72
|
+
return c ? c.toUpperCase () : ''
|
73
|
+
})
|
74
|
+
}
|
75
|
+
|
76
|
+
/**
|
77
|
+
* Simple bind, faster than native
|
78
|
+
*
|
79
|
+
* @param {Function} fn
|
80
|
+
* @param {Object} ctx
|
81
|
+
* @return {Function}
|
82
|
+
*/
|
83
|
+
|
84
|
+
exports.bind = function (fn, ctx) {
|
85
|
+
return function () {
|
86
|
+
return fn.apply(ctx, arguments)
|
87
|
+
}
|
88
|
+
}
|
89
|
+
|
90
|
+
/**
|
91
|
+
* Convert an Array-like object to a real Array.
|
92
|
+
*
|
93
|
+
* @param {Array-like} list
|
94
|
+
* @param {Number} [start] - start index
|
95
|
+
* @return {Array}
|
96
|
+
*/
|
97
|
+
|
98
|
+
exports.toArray = function (list, start) {
|
99
|
+
start = start || 0
|
100
|
+
var i = list.length - start
|
101
|
+
var ret = new Array(i)
|
102
|
+
while (i--) {
|
103
|
+
ret[i] = list[i + start]
|
104
|
+
}
|
105
|
+
return ret
|
106
|
+
}
|
107
|
+
|
108
|
+
/**
|
109
|
+
* Mix properties into target object.
|
110
|
+
*
|
111
|
+
* @param {Object} to
|
112
|
+
* @param {Object} from
|
113
|
+
*/
|
114
|
+
|
115
|
+
exports.extend = function (to, from) {
|
116
|
+
for (var key in from) {
|
117
|
+
to[key] = from[key]
|
118
|
+
}
|
119
|
+
return to
|
120
|
+
}
|
121
|
+
|
122
|
+
/**
|
123
|
+
* Quick object check - this is primarily used to tell
|
124
|
+
* Objects from primitive values when we know the value
|
125
|
+
* is a JSON-compliant type.
|
126
|
+
*
|
127
|
+
* @param {*} obj
|
128
|
+
* @return {Boolean}
|
129
|
+
*/
|
130
|
+
|
131
|
+
exports.isObject = function (obj) {
|
132
|
+
return obj && typeof obj === 'object'
|
133
|
+
}
|
134
|
+
|
135
|
+
/**
|
136
|
+
* Strict object type check. Only returns true
|
137
|
+
* for plain JavaScript objects.
|
138
|
+
*
|
139
|
+
* @param {*} obj
|
140
|
+
* @return {Boolean}
|
141
|
+
*/
|
142
|
+
|
143
|
+
var toString = Object.prototype.toString
|
144
|
+
exports.isPlainObject = function (obj) {
|
145
|
+
return toString.call(obj) === '[object Object]'
|
146
|
+
}
|
147
|
+
|
148
|
+
/**
|
149
|
+
* Array type check.
|
150
|
+
*
|
151
|
+
* @param {*} obj
|
152
|
+
* @return {Boolean}
|
153
|
+
*/
|
154
|
+
|
155
|
+
exports.isArray = function (obj) {
|
156
|
+
return Array.isArray(obj)
|
157
|
+
}
|
158
|
+
|
159
|
+
/**
|
160
|
+
* Define a non-enumerable property
|
161
|
+
*
|
162
|
+
* @param {Object} obj
|
163
|
+
* @param {String} key
|
164
|
+
* @param {*} val
|
165
|
+
* @param {Boolean} [enumerable]
|
166
|
+
*/
|
167
|
+
|
168
|
+
exports.define = function (obj, key, val, enumerable) {
|
169
|
+
Object.defineProperty(obj, key, {
|
170
|
+
value : val,
|
171
|
+
enumerable : !!enumerable,
|
172
|
+
writable : true,
|
173
|
+
configurable : true
|
174
|
+
})
|
175
|
+
}
|
@@ -0,0 +1,258 @@
|
|
1
|
+
var _ = require('./index')
|
2
|
+
var extend = _.extend
|
3
|
+
|
4
|
+
/**
|
5
|
+
* Option overwriting strategies are functions that handle
|
6
|
+
* how to merge a parent option value and a child option
|
7
|
+
* value into the final value.
|
8
|
+
*
|
9
|
+
* All strategy functions follow the same signature:
|
10
|
+
*
|
11
|
+
* @param {*} parentVal
|
12
|
+
* @param {*} childVal
|
13
|
+
* @param {Vue} [vm]
|
14
|
+
*/
|
15
|
+
|
16
|
+
var strats = Object.create(null)
|
17
|
+
|
18
|
+
/**
|
19
|
+
* Helper that recursively merges two data objects together.
|
20
|
+
*/
|
21
|
+
|
22
|
+
function mergeData (to, from) {
|
23
|
+
var key, toVal, fromVal
|
24
|
+
for (key in from) {
|
25
|
+
toVal = to[key]
|
26
|
+
fromVal = from[key]
|
27
|
+
if (!to.hasOwnProperty(key)) {
|
28
|
+
to.$add(key, fromVal)
|
29
|
+
} else if (_.isObject(toVal) && _.isObject(fromVal)) {
|
30
|
+
mergeData(toVal, fromVal)
|
31
|
+
}
|
32
|
+
}
|
33
|
+
return to
|
34
|
+
}
|
35
|
+
|
36
|
+
/**
|
37
|
+
* Data
|
38
|
+
*/
|
39
|
+
|
40
|
+
strats.data = function (parentVal, childVal, vm) {
|
41
|
+
if (!vm) {
|
42
|
+
// in a Vue.extend merge, both should be functions
|
43
|
+
if (!childVal) {
|
44
|
+
return parentVal
|
45
|
+
}
|
46
|
+
if (typeof childVal !== 'function') {
|
47
|
+
_.warn(
|
48
|
+
'The "data" option should be a function ' +
|
49
|
+
'that returns a per-instance value in component ' +
|
50
|
+
'definitions.'
|
51
|
+
)
|
52
|
+
return parentVal
|
53
|
+
}
|
54
|
+
if (!parentVal) {
|
55
|
+
return childVal
|
56
|
+
}
|
57
|
+
// when parentVal & childVal are both present,
|
58
|
+
// we need to return a function that returns the
|
59
|
+
// merged result of both functions... no need to
|
60
|
+
// check if parentVal is a function here because
|
61
|
+
// it has to be a function to pass previous merges.
|
62
|
+
return function mergedDataFn () {
|
63
|
+
return mergeData(
|
64
|
+
childVal.call(this),
|
65
|
+
parentVal.call(this)
|
66
|
+
)
|
67
|
+
}
|
68
|
+
} else {
|
69
|
+
// instance merge, return raw object
|
70
|
+
var instanceData = typeof childVal === 'function'
|
71
|
+
? childVal.call(vm)
|
72
|
+
: childVal
|
73
|
+
var defaultData = typeof parentVal === 'function'
|
74
|
+
? parentVal.call(vm)
|
75
|
+
: undefined
|
76
|
+
if (instanceData) {
|
77
|
+
return mergeData(instanceData, defaultData)
|
78
|
+
} else {
|
79
|
+
return defaultData
|
80
|
+
}
|
81
|
+
}
|
82
|
+
}
|
83
|
+
|
84
|
+
/**
|
85
|
+
* El
|
86
|
+
*/
|
87
|
+
|
88
|
+
strats.el = function (parentVal, childVal, vm) {
|
89
|
+
if (!vm && childVal && typeof childVal !== 'function') {
|
90
|
+
_.warn(
|
91
|
+
'The "el" option should be a function ' +
|
92
|
+
'that returns a per-instance value in component ' +
|
93
|
+
'definitions.'
|
94
|
+
)
|
95
|
+
return
|
96
|
+
}
|
97
|
+
var ret = childVal || parentVal
|
98
|
+
// invoke the element factory if this is instance merge
|
99
|
+
return vm && typeof ret === 'function'
|
100
|
+
? ret.call(vm)
|
101
|
+
: ret
|
102
|
+
}
|
103
|
+
|
104
|
+
/**
|
105
|
+
* Hooks and param attributes are merged as arrays.
|
106
|
+
*/
|
107
|
+
|
108
|
+
strats.created =
|
109
|
+
strats.ready =
|
110
|
+
strats.attached =
|
111
|
+
strats.detached =
|
112
|
+
strats.beforeCompile =
|
113
|
+
strats.compiled =
|
114
|
+
strats.beforeDestroy =
|
115
|
+
strats.destroyed =
|
116
|
+
strats.paramAttributes = function (parentVal, childVal) {
|
117
|
+
return childVal
|
118
|
+
? parentVal
|
119
|
+
? parentVal.concat(childVal)
|
120
|
+
: _.isArray(childVal)
|
121
|
+
? childVal
|
122
|
+
: [childVal]
|
123
|
+
: parentVal
|
124
|
+
}
|
125
|
+
|
126
|
+
/**
|
127
|
+
* Assets
|
128
|
+
*
|
129
|
+
* When a vm is present (instance creation), we need to do
|
130
|
+
* a three-way merge between constructor options, instance
|
131
|
+
* options and parent options.
|
132
|
+
*/
|
133
|
+
|
134
|
+
strats.directives =
|
135
|
+
strats.filters =
|
136
|
+
strats.partials =
|
137
|
+
strats.transitions =
|
138
|
+
strats.components = function (parentVal, childVal, vm, key) {
|
139
|
+
var ret = Object.create(
|
140
|
+
vm && vm.$parent
|
141
|
+
? vm.$parent.$options[key]
|
142
|
+
: _.Vue.options[key]
|
143
|
+
)
|
144
|
+
if (parentVal) {
|
145
|
+
var keys = Object.keys(parentVal)
|
146
|
+
var i = keys.length
|
147
|
+
var field
|
148
|
+
while (i--) {
|
149
|
+
field = keys[i]
|
150
|
+
ret[field] = parentVal[field]
|
151
|
+
}
|
152
|
+
}
|
153
|
+
if (childVal) extend(ret, childVal)
|
154
|
+
return ret
|
155
|
+
}
|
156
|
+
|
157
|
+
/**
|
158
|
+
* Events & Watchers.
|
159
|
+
*
|
160
|
+
* Events & watchers hashes should not overwrite one
|
161
|
+
* another, so we merge them as arrays.
|
162
|
+
*/
|
163
|
+
|
164
|
+
strats.watch =
|
165
|
+
strats.events = function (parentVal, childVal) {
|
166
|
+
if (!childVal) return parentVal
|
167
|
+
if (!parentVal) return childVal
|
168
|
+
var ret = {}
|
169
|
+
extend(ret, parentVal)
|
170
|
+
for (var key in childVal) {
|
171
|
+
var parent = ret[key]
|
172
|
+
var child = childVal[key]
|
173
|
+
ret[key] = parent
|
174
|
+
? parent.concat(child)
|
175
|
+
: [child]
|
176
|
+
}
|
177
|
+
return ret
|
178
|
+
}
|
179
|
+
|
180
|
+
/**
|
181
|
+
* Other object hashes.
|
182
|
+
*/
|
183
|
+
|
184
|
+
strats.methods =
|
185
|
+
strats.computed = function (parentVal, childVal) {
|
186
|
+
if (!childVal) return parentVal
|
187
|
+
if (!parentVal) return childVal
|
188
|
+
var ret = Object.create(parentVal)
|
189
|
+
extend(ret, childVal)
|
190
|
+
return ret
|
191
|
+
}
|
192
|
+
|
193
|
+
/**
|
194
|
+
* Default strategy.
|
195
|
+
*/
|
196
|
+
|
197
|
+
var defaultStrat = function (parentVal, childVal) {
|
198
|
+
return childVal === undefined
|
199
|
+
? parentVal
|
200
|
+
: childVal
|
201
|
+
}
|
202
|
+
|
203
|
+
/**
|
204
|
+
* Make sure component options get converted to actual
|
205
|
+
* constructors.
|
206
|
+
*
|
207
|
+
* @param {Object} components
|
208
|
+
*/
|
209
|
+
|
210
|
+
function guardComponents (components) {
|
211
|
+
if (components) {
|
212
|
+
var def
|
213
|
+
for (var key in components) {
|
214
|
+
def = components[key]
|
215
|
+
if (_.isPlainObject(def)) {
|
216
|
+
def.name = key
|
217
|
+
components[key] = _.Vue.extend(def)
|
218
|
+
}
|
219
|
+
}
|
220
|
+
}
|
221
|
+
}
|
222
|
+
|
223
|
+
/**
|
224
|
+
* Merge two option objects into a new one.
|
225
|
+
* Core utility used in both instantiation and inheritance.
|
226
|
+
*
|
227
|
+
* @param {Object} parent
|
228
|
+
* @param {Object} child
|
229
|
+
* @param {Vue} [vm] - if vm is present, indicates this is
|
230
|
+
* an instantiation merge.
|
231
|
+
*/
|
232
|
+
|
233
|
+
module.exports = function mergeOptions (parent, child, vm) {
|
234
|
+
guardComponents(child.components)
|
235
|
+
var options = {}
|
236
|
+
var key
|
237
|
+
for (key in parent) {
|
238
|
+
merge(parent[key], child[key], key)
|
239
|
+
}
|
240
|
+
for (key in child) {
|
241
|
+
if (!(parent.hasOwnProperty(key))) {
|
242
|
+
merge(parent[key], child[key], key)
|
243
|
+
}
|
244
|
+
}
|
245
|
+
var mixins = child.mixins
|
246
|
+
if (mixins) {
|
247
|
+
for (var i = 0, l = mixins.length; i < l; i++) {
|
248
|
+
for (key in mixins[i]) {
|
249
|
+
merge(options[key], mixins[i][key], key)
|
250
|
+
}
|
251
|
+
}
|
252
|
+
}
|
253
|
+
function merge (parentVal, childVal, key) {
|
254
|
+
var strat = strats[key] || defaultStrat
|
255
|
+
options[key] = strat(parentVal, childVal, vm, key)
|
256
|
+
}
|
257
|
+
return options
|
258
|
+
}
|