aboutsummaryrefslogtreecommitdiff
path: root/node_modules/vue/src/platforms/weex/runtime/modules/events.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/vue/src/platforms/weex/runtime/modules/events.js')
-rwxr-xr-xnode_modules/vue/src/platforms/weex/runtime/modules/events.js57
1 files changed, 57 insertions, 0 deletions
diff --git a/node_modules/vue/src/platforms/weex/runtime/modules/events.js b/node_modules/vue/src/platforms/weex/runtime/modules/events.js
new file mode 100755
index 00000000..a3f9e25a
--- /dev/null
+++ b/node_modules/vue/src/platforms/weex/runtime/modules/events.js
@@ -0,0 +1,57 @@
+/* @flow */
+
+import { updateListeners } from 'core/vdom/helpers/update-listeners'
+
+let target: any
+
+function add (
+ event: string,
+ handler: Function,
+ once: boolean,
+ capture: boolean,
+ passive?: boolean,
+ params?: Array<any>
+) {
+ if (capture) {
+ console.log('Weex do not support event in bubble phase.')
+ return
+ }
+ if (once) {
+ const oldHandler = handler
+ const _target = target // save current target element in closure
+ handler = function (ev) {
+ const res = arguments.length === 1
+ ? oldHandler(ev)
+ : oldHandler.apply(null, arguments)
+ if (res !== null) {
+ remove(event, null, null, _target)
+ }
+ }
+ }
+ target.addEvent(event, handler, params)
+}
+
+function remove (
+ event: string,
+ handler: any,
+ capture: any,
+ _target?: any
+) {
+ (_target || target).removeEvent(event)
+}
+
+function updateDOMListeners (oldVnode: VNodeWithData, vnode: VNodeWithData) {
+ if (!oldVnode.data.on && !vnode.data.on) {
+ return
+ }
+ const on = vnode.data.on || {}
+ const oldOn = oldVnode.data.on || {}
+ target = vnode.elm
+ updateListeners(on, oldOn, add, remove, vnode.context)
+ target = undefined
+}
+
+export default {
+ create: updateDOMListeners,
+ update: updateDOMListeners
+}