Artifact
1d1f0825ac50eac399ecd6a45355a07bc9ac25d2dfa98b8cb1031b4514688793:
0000: 69 6d 70 6f 72 74 20 69 73 57 72 69 74 61 62 6c import isWritabl
0010: 65 20 66 72 6f 6d 20 27 2e 2f 2e 2e 2f 63 6f 6d e from './../com
0020: 6d 6f 6e 2f 75 74 69 6c 2f 63 68 65 63 6b 73 2f mon/util/checks/
0030: 69 73 2d 77 72 69 74 61 62 6c 65 27 0a 69 6d 70 is-writable'.imp
0040: 6f 72 74 20 63 6f 6e 74 61 69 6e 73 20 66 72 6f ort contains fro
0050: 6d 20 27 2e 2f 2e 2e 2f 63 6f 6d 6d 6f 6e 2f 75 m './../common/u
0060: 74 69 6c 2f 6d 69 73 63 2f 63 6f 6e 74 61 69 6e til/misc/contain
0070: 73 27 0a 69 6d 70 6f 72 74 20 7b 20 52 45 5f 45 s'.import { RE_E
0080: 56 45 4e 54 53 5f 50 52 45 46 49 58 2c 20 52 49 VENTS_PREFIX, RI
0090: 4f 54 5f 45 56 45 4e 54 53 5f 4b 45 59 20 7d 20 OT_EVENTS_KEY }
00a0: 66 72 6f 6d 20 27 2e 2e 2f 63 6f 6d 6d 6f 6e 2f from '../common/
00b0: 67 6c 6f 62 61 6c 2d 76 61 72 69 61 62 6c 65 73 global-variables
00c0: 27 0a 69 6d 70 6f 72 74 20 67 65 74 49 6d 6d 65 '.import getImme
00d0: 64 69 61 74 65 43 75 73 74 6f 6d 50 61 72 65 6e diateCustomParen
00e0: 74 20 66 72 6f 6d 20 27 2e 2f 2e 2e 2f 63 6f 6d t from './../com
00f0: 6d 6f 6e 2f 75 74 69 6c 2f 74 61 67 73 2f 67 65 mon/util/tags/ge
0100: 74 2d 69 6d 6d 65 64 69 61 74 65 2d 63 75 73 74 t-immediate-cust
0110: 6f 6d 2d 70 61 72 65 6e 74 27 0a 69 6d 70 6f 72 om-parent'.impor
0120: 74 20 73 65 74 74 69 6e 67 73 20 66 72 6f 6d 20 t settings from
0130: 27 2e 2e 2f 2e 2e 2f 73 65 74 74 69 6e 67 73 27 '../../settings'
0140: 0a 0a 2f 2a 2a 0a 20 2a 20 54 72 69 67 67 65 72 ../**. * Trigger
0150: 20 44 4f 4d 20 65 76 65 6e 74 73 0a 20 2a 20 40 DOM events. * @
0160: 70 61 72 61 6d 20 20 20 7b 20 48 54 4d 4c 45 6c param { HTMLEl
0170: 65 6d 65 6e 74 20 7d 20 64 6f 6d 20 2d 20 64 6f ement } dom - do
0180: 6d 20 65 6c 65 6d 65 6e 74 20 74 61 72 67 65 74 m element target
0190: 20 6f 66 20 74 68 65 20 65 76 65 6e 74 0a 20 2a of the event. *
01a0: 20 40 70 61 72 61 6d 20 20 20 7b 20 46 75 6e 63 @param { Func
01b0: 74 69 6f 6e 20 7d 20 68 61 6e 64 6c 65 72 20 2d tion } handler -
01c0: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 20 user function.
01d0: 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 4f 62 6a * @param { Obj
01e0: 65 63 74 20 7d 20 65 20 2d 20 65 76 65 6e 74 20 ect } e - event
01f0: 6f 62 6a 65 63 74 0a 20 2a 2f 0a 66 75 6e 63 74 object. */.funct
0200: 69 6f 6e 20 68 61 6e 64 6c 65 45 76 65 6e 74 28 ion handleEvent(
0210: 64 6f 6d 2c 20 68 61 6e 64 6c 65 72 2c 20 65 29 dom, handler, e)
0220: 20 7b 0a 20 20 6c 65 74 20 70 74 61 67 20 3d 20 {. let ptag =
0230: 74 68 69 73 2e 5f 5f 2e 70 61 72 65 6e 74 0a 20 this.__.parent.
0240: 20 6c 65 74 20 69 74 65 6d 20 3d 20 74 68 69 73 let item = this
0250: 2e 5f 5f 2e 69 74 65 6d 0a 0a 20 20 69 66 20 28 .__.item.. if (
0260: 21 69 74 65 6d 29 0a 20 20 20 20 77 68 69 6c 65 !item). while
0270: 20 28 70 74 61 67 20 26 26 20 21 69 74 65 6d 29 (ptag && !item)
0280: 20 7b 0a 20 20 20 20 20 20 69 74 65 6d 20 3d 20 {. item =
0290: 70 74 61 67 2e 5f 5f 2e 69 74 65 6d 0a 20 20 20 ptag.__.item.
02a0: 20 20 20 70 74 61 67 20 3d 20 70 74 61 67 2e 5f ptag = ptag._
02b0: 5f 2e 70 61 72 65 6e 74 0a 20 20 20 20 7d 0a 0a _.parent. }..
02c0: 20 20 2f 2f 20 6f 76 65 72 72 69 64 65 20 74 68 // override th
02d0: 65 20 65 76 65 6e 74 20 70 72 6f 70 65 72 74 69 e event properti
02e0: 65 73 0a 20 20 2f 2a 20 69 73 74 61 6e 62 75 6c es. /* istanbul
02f0: 20 69 67 6e 6f 72 65 20 6e 65 78 74 20 2a 2f 0a ignore next */.
0300: 20 20 69 66 20 28 69 73 57 72 69 74 61 62 6c 65 if (isWritable
0310: 28 65 2c 20 27 63 75 72 72 65 6e 74 54 61 72 67 (e, 'currentTarg
0320: 65 74 27 29 29 20 65 2e 63 75 72 72 65 6e 74 54 et')) e.currentT
0330: 61 72 67 65 74 20 3d 20 64 6f 6d 0a 20 20 2f 2a arget = dom. /*
0340: 20 69 73 74 61 6e 62 75 6c 20 69 67 6e 6f 72 65 istanbul ignore
0350: 20 6e 65 78 74 20 2a 2f 0a 20 20 69 66 20 28 69 next */. if (i
0360: 73 57 72 69 74 61 62 6c 65 28 65 2c 20 27 74 61 sWritable(e, 'ta
0370: 72 67 65 74 27 29 29 20 65 2e 74 61 72 67 65 74 rget')) e.target
0380: 20 3d 20 65 2e 73 72 63 45 6c 65 6d 65 6e 74 0a = e.srcElement.
0390: 20 20 2f 2a 20 69 73 74 61 6e 62 75 6c 20 69 67 /* istanbul ig
03a0: 6e 6f 72 65 20 6e 65 78 74 20 2a 2f 0a 20 20 69 nore next */. i
03b0: 66 20 28 69 73 57 72 69 74 61 62 6c 65 28 65 2c f (isWritable(e,
03c0: 20 27 77 68 69 63 68 27 29 29 20 65 2e 77 68 69 'which')) e.whi
03d0: 63 68 20 3d 20 65 2e 63 68 61 72 43 6f 64 65 20 ch = e.charCode
03e0: 7c 7c 20 65 2e 6b 65 79 43 6f 64 65 0a 0a 20 20 || e.keyCode..
03f0: 65 2e 69 74 65 6d 20 3d 20 69 74 65 6d 0a 0a 20 e.item = item..
0400: 20 68 61 6e 64 6c 65 72 2e 63 61 6c 6c 28 74 68 handler.call(th
0410: 69 73 2c 20 65 29 0a 0a 20 20 2f 2f 20 61 76 6f is, e).. // avo
0420: 69 64 20 61 75 74 6f 20 75 70 64 61 74 65 73 0a id auto updates.
0430: 20 20 69 66 20 28 21 73 65 74 74 69 6e 67 73 2e if (!settings.
0440: 61 75 74 6f 55 70 64 61 74 65 29 20 72 65 74 75 autoUpdate) retu
0450: 72 6e 0a 0a 20 20 69 66 20 28 21 65 2e 70 72 65 rn.. if (!e.pre
0460: 76 65 6e 74 55 70 64 61 74 65 29 20 7b 0a 20 20 ventUpdate) {.
0470: 20 20 63 6f 6e 73 74 20 70 20 3d 20 67 65 74 49 const p = getI
0480: 6d 6d 65 64 69 61 74 65 43 75 73 74 6f 6d 50 61 mmediateCustomPa
0490: 72 65 6e 74 28 74 68 69 73 29 0a 20 20 20 20 2f rent(this). /
04a0: 2f 20 66 69 78 65 73 20 23 32 30 38 33 0a 20 20 / fixes #2083.
04b0: 20 20 69 66 20 28 70 2e 69 73 4d 6f 75 6e 74 65 if (p.isMounte
04c0: 64 29 20 70 2e 75 70 64 61 74 65 28 29 0a 20 20 d) p.update().
04d0: 7d 0a 7d 0a 0a 2f 2a 2a 0a 20 2a 20 41 74 74 61 }.}../**. * Atta
04e0: 63 68 20 61 6e 20 65 76 65 6e 74 20 74 6f 20 61 ch an event to a
04f0: 20 44 4f 4d 20 6e 6f 64 65 0a 20 2a 20 40 70 61 DOM node. * @pa
0500: 72 61 6d 20 7b 20 53 74 72 69 6e 67 20 7d 20 6e ram { String } n
0510: 61 6d 65 20 2d 20 65 76 65 6e 74 20 6e 61 6d 65 ame - event name
0520: 0a 20 2a 20 40 70 61 72 61 6d 20 7b 20 46 75 6e . * @param { Fun
0530: 63 74 69 6f 6e 20 7d 20 68 61 6e 64 6c 65 72 20 ction } handler
0540: 2d 20 65 76 65 6e 74 20 63 61 6c 6c 62 61 63 6b - event callback
0550: 0a 20 2a 20 40 70 61 72 61 6d 20 7b 20 4f 62 6a . * @param { Obj
0560: 65 63 74 20 7d 20 64 6f 6d 20 2d 20 64 6f 6d 20 ect } dom - dom
0570: 6e 6f 64 65 0a 20 2a 20 40 70 61 72 61 6d 20 7b node. * @param {
0580: 20 54 61 67 20 7d 20 74 61 67 20 2d 20 74 61 67 Tag } tag - tag
0590: 20 69 6e 73 74 61 6e 63 65 0a 20 2a 2f 0a 65 78 instance. */.ex
05a0: 70 6f 72 74 20 64 65 66 61 75 6c 74 20 66 75 6e port default fun
05b0: 63 74 69 6f 6e 20 73 65 74 45 76 65 6e 74 48 61 ction setEventHa
05c0: 6e 64 6c 65 72 28 6e 61 6d 65 2c 20 68 61 6e 64 ndler(name, hand
05d0: 6c 65 72 2c 20 64 6f 6d 2c 20 74 61 67 29 20 7b ler, dom, tag) {
05e0: 0a 20 20 6c 65 74 20 65 76 65 6e 74 4e 61 6d 65 . let eventName
05f0: 0a 20 20 63 6f 6e 73 74 20 63 62 20 3d 20 68 61 . const cb = ha
0600: 6e 64 6c 65 45 76 65 6e 74 2e 62 69 6e 64 28 74 ndleEvent.bind(t
0610: 61 67 2c 20 64 6f 6d 2c 20 68 61 6e 64 6c 65 72 ag, dom, handler
0620: 29 0a 0a 20 20 2f 2f 20 61 76 6f 69 64 20 74 6f ).. // avoid to
0630: 20 62 69 6e 64 20 74 77 69 63 65 20 74 68 65 20 bind twice the
0640: 73 61 6d 65 20 65 76 65 6e 74 0a 20 20 2f 2f 20 same event. //
0650: 70 6f 73 73 69 62 6c 65 20 66 69 78 20 66 6f 72 possible fix for
0660: 20 23 32 33 33 32 0a 20 20 64 6f 6d 5b 6e 61 6d #2332. dom[nam
0670: 65 5d 20 3d 20 6e 75 6c 6c 0a 0a 20 20 2f 2f 20 e] = null.. //
0680: 6e 6f 72 6d 61 6c 69 7a 65 20 65 76 65 6e 74 20 normalize event
0690: 6e 61 6d 65 0a 20 20 65 76 65 6e 74 4e 61 6d 65 name. eventName
06a0: 20 3d 20 6e 61 6d 65 2e 72 65 70 6c 61 63 65 28 = name.replace(
06b0: 52 45 5f 45 56 45 4e 54 53 5f 50 52 45 46 49 58 RE_EVENTS_PREFIX
06c0: 2c 20 27 27 29 0a 0a 20 20 2f 2f 20 63 61 63 68 , '').. // cach
06d0: 65 20 74 68 65 20 6c 69 73 74 65 6e 65 72 20 69 e the listener i
06e0: 6e 74 6f 20 74 68 65 20 6c 69 73 74 65 6e 65 72 nto the listener
06f0: 73 20 61 72 72 61 79 0a 20 20 69 66 20 28 21 63 s array. if (!c
0700: 6f 6e 74 61 69 6e 73 28 74 61 67 2e 5f 5f 2e 6c ontains(tag.__.l
0710: 69 73 74 65 6e 65 72 73 2c 20 64 6f 6d 29 29 20 isteners, dom))
0720: 74 61 67 2e 5f 5f 2e 6c 69 73 74 65 6e 65 72 73 tag.__.listeners
0730: 2e 70 75 73 68 28 64 6f 6d 29 0a 20 20 69 66 20 .push(dom). if
0740: 28 21 64 6f 6d 5b 52 49 4f 54 5f 45 56 45 4e 54 (!dom[RIOT_EVENT
0750: 53 5f 4b 45 59 5d 29 20 64 6f 6d 5b 52 49 4f 54 S_KEY]) dom[RIOT
0760: 5f 45 56 45 4e 54 53 5f 4b 45 59 5d 20 3d 20 7b _EVENTS_KEY] = {
0770: 7d 0a 20 20 69 66 20 28 64 6f 6d 5b 52 49 4f 54 }. if (dom[RIOT
0780: 5f 45 56 45 4e 54 53 5f 4b 45 59 5d 5b 6e 61 6d _EVENTS_KEY][nam
0790: 65 5d 29 20 64 6f 6d 2e 72 65 6d 6f 76 65 45 76 e]) dom.removeEv
07a0: 65 6e 74 4c 69 73 74 65 6e 65 72 28 65 76 65 6e entListener(even
07b0: 74 4e 61 6d 65 2c 20 64 6f 6d 5b 52 49 4f 54 5f tName, dom[RIOT_
07c0: 45 56 45 4e 54 53 5f 4b 45 59 5d 5b 6e 61 6d 65 EVENTS_KEY][name
07d0: 5d 29 0a 0a 20 20 64 6f 6d 5b 52 49 4f 54 5f 45 ]).. dom[RIOT_E
07e0: 56 45 4e 54 53 5f 4b 45 59 5d 5b 6e 61 6d 65 5d VENTS_KEY][name]
07f0: 20 3d 20 63 62 0a 20 20 64 6f 6d 2e 61 64 64 45 = cb. dom.addE
0800: 76 65 6e 74 4c 69 73 74 65 6e 65 72 28 65 76 65 ventListener(eve
0810: 6e 74 4e 61 6d 65 2c 20 63 62 2c 20 66 61 6c 73 ntName, cb, fals
0820: 65 29 0a 7d 0a e).}.