1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | function invokeHandler(handler, vnode, event) {
|
4 | if (typeof handler === "function") {
|
5 |
|
6 | handler.call(vnode, event, vnode);
|
7 | }
|
8 | else if (typeof handler === "object") {
|
9 |
|
10 | if (typeof handler[0] === "function") {
|
11 |
|
12 | if (handler.length === 2) {
|
13 | handler[0].call(vnode, handler[1], event, vnode);
|
14 | }
|
15 | else {
|
16 | var args = handler.slice(1);
|
17 | args.push(event);
|
18 | args.push(vnode);
|
19 | handler[0].apply(vnode, args);
|
20 | }
|
21 | }
|
22 | else {
|
23 |
|
24 | for (var i = 0; i < handler.length; i++) {
|
25 | invokeHandler(handler[i], vnode, event);
|
26 | }
|
27 | }
|
28 | }
|
29 | }
|
30 | function handleEvent(event, vnode) {
|
31 | var name = event.type, on = vnode.data.on;
|
32 |
|
33 | if (on && on[name]) {
|
34 | invokeHandler(on[name], vnode, event);
|
35 | }
|
36 | }
|
37 | function createListener() {
|
38 | return function handler(event) {
|
39 | handleEvent(event, handler.vnode);
|
40 | };
|
41 | }
|
42 | function updateEventListeners(oldVnode, vnode) {
|
43 | var oldOn = oldVnode.data.on, oldListener = oldVnode.listener, oldElm = oldVnode.elm, on = vnode && vnode.data.on, elm = (vnode && vnode.elm), name;
|
44 |
|
45 | if (oldOn === on) {
|
46 | return;
|
47 | }
|
48 |
|
49 | if (oldOn && oldListener) {
|
50 |
|
51 | if (!on) {
|
52 | for (name in oldOn) {
|
53 |
|
54 | oldElm.removeEventListener(name, oldListener, false);
|
55 | }
|
56 | }
|
57 | else {
|
58 | for (name in oldOn) {
|
59 |
|
60 | if (!on[name]) {
|
61 | oldElm.removeEventListener(name, oldListener, false);
|
62 | }
|
63 | }
|
64 | }
|
65 | }
|
66 |
|
67 | if (on) {
|
68 |
|
69 | var listener = vnode.listener = oldVnode.listener || createListener();
|
70 |
|
71 | listener.vnode = vnode;
|
72 |
|
73 | if (!oldOn) {
|
74 | for (name in on) {
|
75 |
|
76 | elm.addEventListener(name, listener, false);
|
77 | }
|
78 | }
|
79 | else {
|
80 | for (name in on) {
|
81 |
|
82 | if (!oldOn[name]) {
|
83 | elm.addEventListener(name, listener, false);
|
84 | }
|
85 | }
|
86 | }
|
87 | }
|
88 | }
|
89 | exports.eventListenersModule = {
|
90 | create: updateEventListeners,
|
91 | update: updateEventListeners,
|
92 | destroy: updateEventListeners
|
93 | };
|
94 | exports.default = exports.eventListenersModule;
|
95 |
|
\ | No newline at end of file |