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,71 @@
|
|
1
|
+
var _ = require('../util')
|
2
|
+
var Directive = require('../directive')
|
3
|
+
var compile = require('../compiler/compile')
|
4
|
+
var transclude = require('../compiler/transclude')
|
5
|
+
|
6
|
+
/**
|
7
|
+
* Transclude, compile and link element.
|
8
|
+
*
|
9
|
+
* If a pre-compiled linker is available, that means the
|
10
|
+
* passed in element will be pre-transcluded and compiled
|
11
|
+
* as well - all we need to do is to call the linker.
|
12
|
+
*
|
13
|
+
* Otherwise we need to call transclude/compile/link here.
|
14
|
+
*
|
15
|
+
* @param {Element} el
|
16
|
+
* @return {Element}
|
17
|
+
*/
|
18
|
+
|
19
|
+
exports._compile = function (el) {
|
20
|
+
var options = this.$options
|
21
|
+
if (options._linker) {
|
22
|
+
this._initElement(el)
|
23
|
+
options._linker(this, el)
|
24
|
+
} else {
|
25
|
+
var raw = el
|
26
|
+
el = transclude(el, options)
|
27
|
+
this._initElement(el)
|
28
|
+
var linker = compile(el, options)
|
29
|
+
linker(this, el)
|
30
|
+
if (options.replace) {
|
31
|
+
_.replace(raw, el)
|
32
|
+
}
|
33
|
+
}
|
34
|
+
return el
|
35
|
+
}
|
36
|
+
|
37
|
+
/**
|
38
|
+
* Initialize instance element. Called in the public
|
39
|
+
* $mount() method.
|
40
|
+
*
|
41
|
+
* @param {Element} el
|
42
|
+
*/
|
43
|
+
|
44
|
+
exports._initElement = function (el) {
|
45
|
+
if (el instanceof DocumentFragment) {
|
46
|
+
this._isBlock = true
|
47
|
+
this.$el = this._blockStart = el.firstChild
|
48
|
+
this._blockEnd = el.lastChild
|
49
|
+
this._blockFragment = el
|
50
|
+
} else {
|
51
|
+
this.$el = el
|
52
|
+
}
|
53
|
+
this.$el.__vue__ = this
|
54
|
+
this._callHook('beforeCompile')
|
55
|
+
}
|
56
|
+
|
57
|
+
/**
|
58
|
+
* Create and bind a directive to an element.
|
59
|
+
*
|
60
|
+
* @param {String} name - directive name
|
61
|
+
* @param {Node} node - target node
|
62
|
+
* @param {Object} desc - parsed directive descriptor
|
63
|
+
* @param {Object} def - directive definition object
|
64
|
+
* @param {Function} [linker] - pre-compiled linker fn
|
65
|
+
*/
|
66
|
+
|
67
|
+
exports._bindDir = function (name, node, desc, def, linker) {
|
68
|
+
this._directives.push(
|
69
|
+
new Directive(name, node, this, desc, def, linker)
|
70
|
+
)
|
71
|
+
}
|
@@ -0,0 +1,122 @@
|
|
1
|
+
var _ = require('../util')
|
2
|
+
var inDoc = _.inDoc
|
3
|
+
|
4
|
+
/**
|
5
|
+
* Setup the instance's option events & watchers.
|
6
|
+
* If the value is a string, we pull it from the
|
7
|
+
* instance's methods by name.
|
8
|
+
*/
|
9
|
+
|
10
|
+
exports._initEvents = function () {
|
11
|
+
var options = this.$options
|
12
|
+
registerCallbacks(this, '$on', options.events)
|
13
|
+
registerCallbacks(this, '$watch', options.watch)
|
14
|
+
}
|
15
|
+
|
16
|
+
/**
|
17
|
+
* Register callbacks for option events and watchers.
|
18
|
+
*
|
19
|
+
* @param {Vue} vm
|
20
|
+
* @param {String} action
|
21
|
+
* @param {Object} hash
|
22
|
+
*/
|
23
|
+
|
24
|
+
function registerCallbacks (vm, action, hash) {
|
25
|
+
if (!hash) return
|
26
|
+
var handlers, key, i, j
|
27
|
+
for (key in hash) {
|
28
|
+
handlers = hash[key]
|
29
|
+
if (_.isArray(handlers)) {
|
30
|
+
for (i = 0, j = handlers.length; i < j; i++) {
|
31
|
+
register(vm, action, key, handlers[i])
|
32
|
+
}
|
33
|
+
} else {
|
34
|
+
register(vm, action, key, handlers)
|
35
|
+
}
|
36
|
+
}
|
37
|
+
}
|
38
|
+
|
39
|
+
/**
|
40
|
+
* Helper to register an event/watch callback.
|
41
|
+
*
|
42
|
+
* @param {Vue} vm
|
43
|
+
* @param {String} action
|
44
|
+
* @param {String} key
|
45
|
+
* @param {*} handler
|
46
|
+
*/
|
47
|
+
|
48
|
+
function register (vm, action, key, handler) {
|
49
|
+
var type = typeof handler
|
50
|
+
if (type === 'function') {
|
51
|
+
vm[action](key, handler)
|
52
|
+
} else if (type === 'string') {
|
53
|
+
var methods = vm.$options.methods
|
54
|
+
var method = methods && methods[handler]
|
55
|
+
if (method) {
|
56
|
+
vm[action](key, method)
|
57
|
+
} else {
|
58
|
+
_.warn(
|
59
|
+
'Unknown method: "' + handler + '" when ' +
|
60
|
+
'registering callback for ' + action +
|
61
|
+
': "' + key + '".'
|
62
|
+
)
|
63
|
+
}
|
64
|
+
}
|
65
|
+
}
|
66
|
+
|
67
|
+
/**
|
68
|
+
* Setup recursive attached/detached calls
|
69
|
+
*/
|
70
|
+
|
71
|
+
exports._initDOMHooks = function () {
|
72
|
+
this.$on('hook:attached', onAttached)
|
73
|
+
this.$on('hook:detached', onDetached)
|
74
|
+
}
|
75
|
+
|
76
|
+
/**
|
77
|
+
* Callback to recursively call attached hook on children
|
78
|
+
*/
|
79
|
+
|
80
|
+
function onAttached () {
|
81
|
+
this._isAttached = true
|
82
|
+
var children = this._children
|
83
|
+
if (!children) return
|
84
|
+
for (var i = 0, l = children.length; i < l; i++) {
|
85
|
+
var child = children[i]
|
86
|
+
if (!child._isAttached && inDoc(child.$el)) {
|
87
|
+
child._callHook('attached')
|
88
|
+
}
|
89
|
+
}
|
90
|
+
}
|
91
|
+
|
92
|
+
/**
|
93
|
+
* Callback to recursively call detached hook on children
|
94
|
+
*/
|
95
|
+
|
96
|
+
function onDetached () {
|
97
|
+
this._isAttached = false
|
98
|
+
var children = this._children
|
99
|
+
if (!children) return
|
100
|
+
for (var i = 0, l = children.length; i < l; i++) {
|
101
|
+
var child = children[i]
|
102
|
+
if (child._isAttached && !inDoc(child.$el)) {
|
103
|
+
child._callHook('detached')
|
104
|
+
}
|
105
|
+
}
|
106
|
+
}
|
107
|
+
|
108
|
+
/**
|
109
|
+
* Trigger all handlers for a hook
|
110
|
+
*
|
111
|
+
* @param {String} hook
|
112
|
+
*/
|
113
|
+
|
114
|
+
exports._callHook = function (hook) {
|
115
|
+
var handlers = this.$options[hook]
|
116
|
+
if (handlers) {
|
117
|
+
for (var i = 0, j = handlers.length; i < j; i++) {
|
118
|
+
handlers[i].call(this)
|
119
|
+
}
|
120
|
+
}
|
121
|
+
this.$emit('hook:' + hook)
|
122
|
+
}
|
@@ -0,0 +1,76 @@
|
|
1
|
+
var mergeOptions = require('../util/merge-option')
|
2
|
+
|
3
|
+
/**
|
4
|
+
* The main init sequence. This is called for every
|
5
|
+
* instance, including ones that are created from extended
|
6
|
+
* constructors.
|
7
|
+
*
|
8
|
+
* @param {Object} options - this options object should be
|
9
|
+
* the result of merging class
|
10
|
+
* options and the options passed
|
11
|
+
* in to the constructor.
|
12
|
+
*/
|
13
|
+
|
14
|
+
exports._init = function (options) {
|
15
|
+
|
16
|
+
options = options || {}
|
17
|
+
|
18
|
+
this.$el = null
|
19
|
+
this.$parent = options._parent
|
20
|
+
this.$root = options._root || this
|
21
|
+
this.$ = {} // child vm references
|
22
|
+
this.$$ = {} // element references
|
23
|
+
this._watcherList = [] // all watchers as an array
|
24
|
+
this._watchers = {} // internal watchers as a hash
|
25
|
+
this._userWatchers = {} // user watchers as a hash
|
26
|
+
this._directives = [] // all directives
|
27
|
+
|
28
|
+
// a flag to avoid this being observed
|
29
|
+
this._isVue = true
|
30
|
+
|
31
|
+
// events bookkeeping
|
32
|
+
this._events = {} // registered callbacks
|
33
|
+
this._eventsCount = {} // for $broadcast optimization
|
34
|
+
this._eventCancelled = false // for event cancellation
|
35
|
+
|
36
|
+
// block instance properties
|
37
|
+
this._isBlock = false
|
38
|
+
this._blockStart = // @type {CommentNode}
|
39
|
+
this._blockEnd = null // @type {CommentNode}
|
40
|
+
|
41
|
+
// lifecycle state
|
42
|
+
this._isCompiled =
|
43
|
+
this._isDestroyed =
|
44
|
+
this._isReady =
|
45
|
+
this._isAttached =
|
46
|
+
this._isBeingDestroyed = false
|
47
|
+
|
48
|
+
// children
|
49
|
+
this._children = // @type {Array}
|
50
|
+
this._childCtors = null // @type {Object} - hash to cache
|
51
|
+
// child constructors
|
52
|
+
|
53
|
+
// merge options.
|
54
|
+
options = this.$options = mergeOptions(
|
55
|
+
this.constructor.options,
|
56
|
+
options,
|
57
|
+
this
|
58
|
+
)
|
59
|
+
|
60
|
+
// set data after merge.
|
61
|
+
this._data = options.data || {}
|
62
|
+
|
63
|
+
// initialize data observation and scope inheritance.
|
64
|
+
this._initScope()
|
65
|
+
|
66
|
+
// setup event system and option events.
|
67
|
+
this._initEvents()
|
68
|
+
|
69
|
+
// call created hook
|
70
|
+
this._callHook('created')
|
71
|
+
|
72
|
+
// if `el` option is passed, start compilation.
|
73
|
+
if (options.el) {
|
74
|
+
this.$mount(options.el)
|
75
|
+
}
|
76
|
+
}
|
@@ -0,0 +1,217 @@
|
|
1
|
+
var _ = require('../util')
|
2
|
+
var Observer = require('../observer')
|
3
|
+
var Dep = require('../observer/dep')
|
4
|
+
|
5
|
+
/**
|
6
|
+
* Setup the scope of an instance, which contains:
|
7
|
+
* - observed data
|
8
|
+
* - computed properties
|
9
|
+
* - user methods
|
10
|
+
* - meta properties
|
11
|
+
*/
|
12
|
+
|
13
|
+
exports._initScope = function () {
|
14
|
+
this._initData()
|
15
|
+
this._initComputed()
|
16
|
+
this._initMethods()
|
17
|
+
this._initMeta()
|
18
|
+
}
|
19
|
+
|
20
|
+
/**
|
21
|
+
* Initialize the data.
|
22
|
+
*/
|
23
|
+
|
24
|
+
exports._initData = function () {
|
25
|
+
// proxy data on instance
|
26
|
+
var data = this._data
|
27
|
+
var keys = Object.keys(data)
|
28
|
+
var i = keys.length
|
29
|
+
var key
|
30
|
+
while (i--) {
|
31
|
+
key = keys[i]
|
32
|
+
if (!_.isReserved(key)) {
|
33
|
+
this._proxy(key)
|
34
|
+
}
|
35
|
+
}
|
36
|
+
// observe data
|
37
|
+
Observer.create(data).addVm(this)
|
38
|
+
}
|
39
|
+
|
40
|
+
/**
|
41
|
+
* Swap the isntance's $data. Called in $data's setter.
|
42
|
+
*
|
43
|
+
* @param {Object} newData
|
44
|
+
*/
|
45
|
+
|
46
|
+
exports._setData = function (newData) {
|
47
|
+
newData = newData || {}
|
48
|
+
var oldData = this._data
|
49
|
+
this._data = newData
|
50
|
+
var keys, key, i
|
51
|
+
// unproxy keys not present in new data
|
52
|
+
keys = Object.keys(oldData)
|
53
|
+
i = keys.length
|
54
|
+
while (i--) {
|
55
|
+
key = keys[i]
|
56
|
+
if (!_.isReserved(key) && !(key in newData)) {
|
57
|
+
this._unproxy(key)
|
58
|
+
}
|
59
|
+
}
|
60
|
+
// proxy keys not already proxied,
|
61
|
+
// and trigger change for changed values
|
62
|
+
keys = Object.keys(newData)
|
63
|
+
i = keys.length
|
64
|
+
while (i--) {
|
65
|
+
key = keys[i]
|
66
|
+
if (!this.hasOwnProperty(key) && !_.isReserved(key)) {
|
67
|
+
// new property
|
68
|
+
this._proxy(key)
|
69
|
+
}
|
70
|
+
}
|
71
|
+
oldData.__ob__.removeVm(this)
|
72
|
+
Observer.create(newData).addVm(this)
|
73
|
+
this._digest()
|
74
|
+
}
|
75
|
+
|
76
|
+
/**
|
77
|
+
* Proxy a property, so that
|
78
|
+
* vm.prop === vm._data.prop
|
79
|
+
*
|
80
|
+
* @param {String} key
|
81
|
+
*/
|
82
|
+
|
83
|
+
exports._proxy = function (key) {
|
84
|
+
// need to store ref to self here
|
85
|
+
// because these getter/setters might
|
86
|
+
// be called by child instances!
|
87
|
+
var self = this
|
88
|
+
Object.defineProperty(self, key, {
|
89
|
+
configurable: true,
|
90
|
+
enumerable: true,
|
91
|
+
get: function proxyGetter () {
|
92
|
+
return self._data[key]
|
93
|
+
},
|
94
|
+
set: function proxySetter (val) {
|
95
|
+
self._data[key] = val
|
96
|
+
}
|
97
|
+
})
|
98
|
+
}
|
99
|
+
|
100
|
+
/**
|
101
|
+
* Unproxy a property.
|
102
|
+
*
|
103
|
+
* @param {String} key
|
104
|
+
*/
|
105
|
+
|
106
|
+
exports._unproxy = function (key) {
|
107
|
+
delete this[key]
|
108
|
+
}
|
109
|
+
|
110
|
+
/**
|
111
|
+
* Force update on every watcher in scope.
|
112
|
+
*/
|
113
|
+
|
114
|
+
exports._digest = function () {
|
115
|
+
var i = this._watcherList.length
|
116
|
+
while (i--) {
|
117
|
+
this._watcherList[i].update()
|
118
|
+
}
|
119
|
+
var children = this._children
|
120
|
+
var child
|
121
|
+
if (children) {
|
122
|
+
i = children.length
|
123
|
+
while (i--) {
|
124
|
+
child = children[i]
|
125
|
+
if (child.$options.inherit) {
|
126
|
+
child._digest()
|
127
|
+
}
|
128
|
+
}
|
129
|
+
}
|
130
|
+
}
|
131
|
+
|
132
|
+
/**
|
133
|
+
* Setup computed properties. They are essentially
|
134
|
+
* special getter/setters
|
135
|
+
*/
|
136
|
+
|
137
|
+
function noop () {}
|
138
|
+
exports._initComputed = function () {
|
139
|
+
var computed = this.$options.computed
|
140
|
+
if (computed) {
|
141
|
+
for (var key in computed) {
|
142
|
+
var userDef = computed[key]
|
143
|
+
var def = {
|
144
|
+
enumerable: true,
|
145
|
+
configurable: true
|
146
|
+
}
|
147
|
+
if (typeof userDef === 'function') {
|
148
|
+
def.get = _.bind(userDef, this)
|
149
|
+
def.set = noop
|
150
|
+
} else {
|
151
|
+
def.get = userDef.get
|
152
|
+
? _.bind(userDef.get, this)
|
153
|
+
: noop
|
154
|
+
def.set = userDef.set
|
155
|
+
? _.bind(userDef.set, this)
|
156
|
+
: noop
|
157
|
+
}
|
158
|
+
Object.defineProperty(this, key, def)
|
159
|
+
}
|
160
|
+
}
|
161
|
+
}
|
162
|
+
|
163
|
+
/**
|
164
|
+
* Setup instance methods. Methods must be bound to the
|
165
|
+
* instance since they might be called by children
|
166
|
+
* inheriting them.
|
167
|
+
*/
|
168
|
+
|
169
|
+
exports._initMethods = function () {
|
170
|
+
var methods = this.$options.methods
|
171
|
+
if (methods) {
|
172
|
+
for (var key in methods) {
|
173
|
+
this[key] = _.bind(methods[key], this)
|
174
|
+
}
|
175
|
+
}
|
176
|
+
}
|
177
|
+
|
178
|
+
/**
|
179
|
+
* Initialize meta information like $index, $key & $value.
|
180
|
+
*/
|
181
|
+
|
182
|
+
exports._initMeta = function () {
|
183
|
+
var metas = this.$options._meta
|
184
|
+
if (metas) {
|
185
|
+
for (var key in metas) {
|
186
|
+
this._defineMeta(key, metas[key])
|
187
|
+
}
|
188
|
+
}
|
189
|
+
}
|
190
|
+
|
191
|
+
/**
|
192
|
+
* Define a meta property, e.g $index, $key, $value
|
193
|
+
* which only exists on the vm instance but not in $data.
|
194
|
+
*
|
195
|
+
* @param {String} key
|
196
|
+
* @param {*} value
|
197
|
+
*/
|
198
|
+
|
199
|
+
exports._defineMeta = function (key, value) {
|
200
|
+
var dep = new Dep()
|
201
|
+
Object.defineProperty(this, key, {
|
202
|
+
enumerable: true,
|
203
|
+
configurable: true,
|
204
|
+
get: function metaGetter () {
|
205
|
+
if (Observer.target) {
|
206
|
+
Observer.target.addDep(dep)
|
207
|
+
}
|
208
|
+
return value
|
209
|
+
},
|
210
|
+
set: function metaSetter (val) {
|
211
|
+
if (val !== value) {
|
212
|
+
value = val
|
213
|
+
dep.notify()
|
214
|
+
}
|
215
|
+
}
|
216
|
+
})
|
217
|
+
}
|