⌈⌋ ⎇ branch:  Bitrhythm


Hex Artifact Content

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).}.