⌈⌋ ⎇ branch:  Bitrhythm


Hex Artifact Content

Artifact 6033d597ae24b1668103429f53917fe5f06b023dbb4111599ed1e27a89941a96:

  • File public/riot-3.13.2/riot.js — part of check-in [12a9bb700d] at 2021-08-11 18:56:04 on branch trunk — Import from git Added a changelog (user: dev size: 92885)

0000: 2f 2a 20 52 69 6f 74 20 76 33 2e 31 33 2e 32 2c  /* Riot v3.13.2,
0010: 20 40 6c 69 63 65 6e 73 65 20 4d 49 54 20 2a 2f   @license MIT */
0020: 0a 28 66 75 6e 63 74 69 6f 6e 20 28 67 6c 6f 62  .(function (glob
0030: 61 6c 2c 20 66 61 63 74 6f 72 79 29 20 7b 0a 20  al, factory) {. 
0040: 20 74 79 70 65 6f 66 20 65 78 70 6f 72 74 73 20   typeof exports 
0050: 3d 3d 3d 20 27 6f 62 6a 65 63 74 27 20 26 26 20  === 'object' && 
0060: 74 79 70 65 6f 66 20 6d 6f 64 75 6c 65 20 21 3d  typeof module !=
0070: 3d 20 27 75 6e 64 65 66 69 6e 65 64 27 20 3f 20  = 'undefined' ? 
0080: 66 61 63 74 6f 72 79 28 65 78 70 6f 72 74 73 29  factory(exports)
0090: 20 3a 0a 20 20 74 79 70 65 6f 66 20 64 65 66 69   :.  typeof defi
00a0: 6e 65 20 3d 3d 3d 20 27 66 75 6e 63 74 69 6f 6e  ne === 'function
00b0: 27 20 26 26 20 64 65 66 69 6e 65 2e 61 6d 64 20  ' && define.amd 
00c0: 3f 20 64 65 66 69 6e 65 28 5b 27 65 78 70 6f 72  ? define(['expor
00d0: 74 73 27 5d 2c 20 66 61 63 74 6f 72 79 29 20 3a  ts'], factory) :
00e0: 0a 20 20 28 66 61 63 74 6f 72 79 28 28 67 6c 6f  .  (factory((glo
00f0: 62 61 6c 2e 72 69 6f 74 20 3d 20 7b 7d 29 29 29  bal.riot = {})))
0100: 3b 0a 7d 28 74 68 69 73 2c 20 28 66 75 6e 63 74  ;.}(this, (funct
0110: 69 6f 6e 20 28 65 78 70 6f 72 74 73 29 20 7b 20  ion (exports) { 
0120: 27 75 73 65 20 73 74 72 69 63 74 27 3b 0a 0a 20  'use strict';.. 
0130: 20 2f 2a 2a 0a 20 20 20 2a 20 53 68 6f 72 74 65   /**.   * Shorte
0140: 72 20 61 6e 64 20 66 61 73 74 20 77 61 79 20 74  r and fast way t
0150: 6f 20 73 65 6c 65 63 74 20 61 20 73 69 6e 67 6c  o select a singl
0160: 65 20 6e 6f 64 65 20 69 6e 20 74 68 65 20 44 4f  e node in the DO
0170: 4d 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20  M.   * @param   
0180: 7b 20 53 74 72 69 6e 67 20 7d 20 73 65 6c 65 63  { String } selec
0190: 74 6f 72 20 2d 20 75 6e 69 71 75 65 20 64 6f 6d  tor - unique dom
01a0: 20 73 65 6c 65 63 74 6f 72 0a 20 20 20 2a 20 40   selector.   * @
01b0: 70 61 72 61 6d 20 20 20 7b 20 4f 62 6a 65 63 74  param   { Object
01c0: 20 7d 20 63 74 78 20 2d 20 44 4f 4d 20 6e 6f 64   } ctx - DOM nod
01d0: 65 20 77 68 65 72 65 20 74 68 65 20 74 61 72 67  e where the targ
01e0: 65 74 20 6f 66 20 6f 75 72 20 73 65 61 72 63 68  et of our search
01f0: 20 77 69 6c 6c 20 69 73 20 6c 6f 63 61 74 65 64   will is located
0200: 0a 20 20 20 2a 20 40 72 65 74 75 72 6e 73 20 7b  .   * @returns {
0210: 20 4f 62 6a 65 63 74 20 7d 20 64 6f 6d 20 6e 6f   Object } dom no
0220: 64 65 20 66 6f 75 6e 64 0a 20 20 20 2a 2f 0a 20  de found.   */. 
0230: 20 66 75 6e 63 74 69 6f 6e 20 24 28 73 65 6c 65   function $(sele
0240: 63 74 6f 72 2c 20 63 74 78 29 20 7b 0a 20 20 20  ctor, ctx) {.   
0250: 20 72 65 74 75 72 6e 20 28 63 74 78 20 7c 7c 20   return (ctx || 
0260: 64 6f 63 75 6d 65 6e 74 29 2e 71 75 65 72 79 53  document).queryS
0270: 65 6c 65 63 74 6f 72 28 73 65 6c 65 63 74 6f 72  elector(selector
0280: 29 0a 20 20 7d 0a 0a 20 20 76 61 72 0a 20 20 20  ).  }..  var.   
0290: 20 2f 2f 20 62 65 20 61 77 61 72 65 2c 20 69 6e   // be aware, in
02a0: 74 65 72 6e 61 6c 20 75 73 61 67 65 0a 20 20 20  ternal usage.   
02b0: 20 2f 2f 20 41 54 54 45 4e 54 49 4f 4e 3a 20 70   // ATTENTION: p
02c0: 72 65 66 69 78 20 74 68 65 20 67 6c 6f 62 61 6c  refix the global
02d0: 20 64 79 6e 61 6d 69 63 20 76 61 72 69 61 62 6c   dynamic variabl
02e0: 65 73 20 77 69 74 68 20 60 5f 5f 60 0a 20 20 20  es with `__`.   
02f0: 20 2f 2f 20 74 61 67 73 20 69 6e 73 74 61 6e 63   // tags instanc
0300: 65 73 20 63 61 63 68 65 0a 20 20 20 20 5f 5f 54  es cache.    __T
0310: 41 47 53 5f 43 41 43 48 45 20 3d 20 5b 5d 2c 0a  AGS_CACHE = [],.
0320: 20 20 20 20 2f 2f 20 74 61 67 73 20 69 6d 70 6c      // tags impl
0330: 65 6d 65 6e 74 61 74 69 6f 6e 20 63 61 63 68 65  ementation cache
0340: 0a 20 20 20 20 5f 5f 54 41 47 5f 49 4d 50 4c 20  .    __TAG_IMPL 
0350: 3d 20 7b 7d 2c 0a 20 20 20 20 59 49 45 4c 44 5f  = {},.    YIELD_
0360: 54 41 47 20 3d 20 27 79 69 65 6c 64 27 2c 0a 0a  TAG = 'yield',..
0370: 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 43      /**.     * C
0380: 6f 6e 73 74 0a 20 20 20 20 20 2a 2f 0a 20 20 20  onst.     */.   
0390: 20 47 4c 4f 42 41 4c 5f 4d 49 58 49 4e 20 3d 20   GLOBAL_MIXIN = 
03a0: 27 5f 5f 67 6c 6f 62 61 6c 5f 6d 69 78 69 6e 27  '__global_mixin'
03b0: 2c 0a 0a 20 20 20 20 2f 2f 20 72 69 6f 74 20 73  ,..    // riot s
03c0: 70 65 63 69 66 69 63 20 70 72 65 66 69 78 65 73  pecific prefixes
03d0: 20 6f 72 20 61 74 74 72 69 62 75 74 65 73 0a 20   or attributes. 
03e0: 20 20 20 41 54 54 52 53 5f 50 52 45 46 49 58 20     ATTRS_PREFIX 
03f0: 3d 20 27 72 69 6f 74 2d 27 2c 0a 0a 20 20 20 20  = 'riot-',..    
0400: 2f 2f 20 52 69 6f 74 20 44 69 72 65 63 74 69 76  // Riot Directiv
0410: 65 73 0a 20 20 20 20 52 45 46 5f 44 49 52 45 43  es.    REF_DIREC
0420: 54 49 56 45 53 20 3d 20 5b 27 72 65 66 27 2c 20  TIVES = ['ref', 
0430: 27 64 61 74 61 2d 72 65 66 27 5d 2c 0a 20 20 20  'data-ref'],.   
0440: 20 49 53 5f 44 49 52 45 43 54 49 56 45 20 3d 20   IS_DIRECTIVE = 
0450: 27 64 61 74 61 2d 69 73 27 2c 0a 20 20 20 20 43  'data-is',.    C
0460: 4f 4e 44 49 54 49 4f 4e 41 4c 5f 44 49 52 45 43  ONDITIONAL_DIREC
0470: 54 49 56 45 20 3d 20 27 69 66 27 2c 0a 20 20 20  TIVE = 'if',.   
0480: 20 4c 4f 4f 50 5f 44 49 52 45 43 54 49 56 45 20   LOOP_DIRECTIVE 
0490: 3d 20 27 65 61 63 68 27 2c 0a 20 20 20 20 4c 4f  = 'each',.    LO
04a0: 4f 50 5f 4e 4f 5f 52 45 4f 52 44 45 52 5f 44 49  OP_NO_REORDER_DI
04b0: 52 45 43 54 49 56 45 20 3d 20 27 6e 6f 2d 72 65  RECTIVE = 'no-re
04c0: 6f 72 64 65 72 27 2c 0a 20 20 20 20 53 48 4f 57  order',.    SHOW
04d0: 5f 44 49 52 45 43 54 49 56 45 20 3d 20 27 73 68  _DIRECTIVE = 'sh
04e0: 6f 77 27 2c 0a 20 20 20 20 48 49 44 45 5f 44 49  ow',.    HIDE_DI
04f0: 52 45 43 54 49 56 45 20 3d 20 27 68 69 64 65 27  RECTIVE = 'hide'
0500: 2c 0a 20 20 20 20 4b 45 59 5f 44 49 52 45 43 54  ,.    KEY_DIRECT
0510: 49 56 45 20 3d 20 27 6b 65 79 27 2c 0a 20 20 20  IVE = 'key',.   
0520: 20 52 49 4f 54 5f 45 56 45 4e 54 53 5f 4b 45 59   RIOT_EVENTS_KEY
0530: 20 3d 20 27 5f 5f 72 69 6f 74 2d 65 76 65 6e 74   = '__riot-event
0540: 73 5f 5f 27 2c 0a 0a 20 20 20 20 2f 2f 20 66 6f  s__',..    // fo
0550: 72 20 74 79 70 65 6f 66 20 3d 3d 20 27 27 20 63  r typeof == '' c
0560: 6f 6d 70 61 72 69 73 6f 6e 73 0a 20 20 20 20 54  omparisons.    T
0570: 5f 53 54 52 49 4e 47 20 3d 20 27 73 74 72 69 6e  _STRING = 'strin
0580: 67 27 2c 0a 20 20 20 20 54 5f 4f 42 4a 45 43 54  g',.    T_OBJECT
0590: 20 3d 20 27 6f 62 6a 65 63 74 27 2c 0a 20 20 20   = 'object',.   
05a0: 20 54 5f 55 4e 44 45 46 20 20 3d 20 27 75 6e 64   T_UNDEF  = 'und
05b0: 65 66 69 6e 65 64 27 2c 0a 20 20 20 20 54 5f 46  efined',.    T_F
05c0: 55 4e 43 54 49 4f 4e 20 3d 20 27 66 75 6e 63 74  UNCTION = 'funct
05d0: 69 6f 6e 27 2c 0a 0a 20 20 20 20 58 4c 49 4e 4b  ion',..    XLINK
05e0: 5f 4e 53 20 3d 20 27 68 74 74 70 3a 2f 2f 77 77  _NS = 'http://ww
05f0: 77 2e 77 33 2e 6f 72 67 2f 31 39 39 39 2f 78 6c  w.w3.org/1999/xl
0600: 69 6e 6b 27 2c 0a 20 20 20 20 53 56 47 5f 4e 53  ink',.    SVG_NS
0610: 20 3d 20 27 68 74 74 70 3a 2f 2f 77 77 77 2e 77   = 'http://www.w
0620: 33 2e 6f 72 67 2f 32 30 30 30 2f 73 76 67 27 2c  3.org/2000/svg',
0630: 0a 20 20 20 20 58 4c 49 4e 4b 5f 52 45 47 45 58  .    XLINK_REGEX
0640: 20 3d 20 2f 5e 78 6c 69 6e 6b 3a 28 5c 77 2b 29   = /^xlink:(\w+)
0650: 2f 2c 0a 0a 20 20 20 20 57 49 4e 20 3d 20 74 79  /,..    WIN = ty
0660: 70 65 6f 66 20 77 69 6e 64 6f 77 20 3d 3d 3d 20  peof window === 
0670: 54 5f 55 4e 44 45 46 20 3f 20 2f 2a 20 69 73 74  T_UNDEF ? /* ist
0680: 61 6e 62 75 6c 20 69 67 6e 6f 72 65 20 6e 65 78  anbul ignore nex
0690: 74 20 2a 2f 20 75 6e 64 65 66 69 6e 65 64 20 3a  t */ undefined :
06a0: 20 77 69 6e 64 6f 77 2c 0a 0a 20 20 20 20 2f 2f   window,..    //
06b0: 20 73 70 65 63 69 61 6c 20 6e 61 74 69 76 65 20   special native 
06c0: 74 61 67 73 20 74 68 61 74 20 63 61 6e 6e 6f 74  tags that cannot
06d0: 20 62 65 20 74 72 65 61 74 65 64 20 6c 69 6b 65   be treated like
06e0: 20 74 68 65 20 6f 74 68 65 72 73 0a 20 20 20 20   the others.    
06f0: 52 45 5f 53 50 45 43 49 41 4c 5f 54 41 47 53 20  RE_SPECIAL_TAGS 
0700: 3d 20 2f 5e 28 3f 3a 74 28 3f 3a 62 6f 64 79 7c  = /^(?:t(?:body|
0710: 68 65 61 64 7c 66 6f 6f 74 7c 5b 72 68 64 5d 29  head|foot|[rhd])
0720: 7c 63 61 70 74 69 6f 6e 7c 63 6f 6c 28 3f 3a 67  |caption|col(?:g
0730: 72 6f 75 70 29 3f 7c 6f 70 74 28 3f 3a 69 6f 6e  roup)?|opt(?:ion
0740: 7c 67 72 6f 75 70 29 29 24 2f 2c 0a 20 20 20 20  |group))$/,.    
0750: 52 45 5f 53 50 45 43 49 41 4c 5f 54 41 47 53 5f  RE_SPECIAL_TAGS_
0760: 4e 4f 5f 4f 50 54 49 4f 4e 20 3d 20 2f 5e 28 3f  NO_OPTION = /^(?
0770: 3a 74 28 3f 3a 62 6f 64 79 7c 68 65 61 64 7c 66  :t(?:body|head|f
0780: 6f 6f 74 7c 5b 72 68 64 5d 29 7c 63 61 70 74 69  oot|[rhd])|capti
0790: 6f 6e 7c 63 6f 6c 28 3f 3a 67 72 6f 75 70 29 3f  on|col(?:group)?
07a0: 29 24 2f 2c 0a 20 20 20 20 52 45 5f 45 56 45 4e  )$/,.    RE_EVEN
07b0: 54 53 5f 50 52 45 46 49 58 20 3d 20 2f 5e 6f 6e  TS_PREFIX = /^on
07c0: 2f 2c 0a 20 20 20 20 52 45 5f 48 54 4d 4c 5f 41  /,.    RE_HTML_A
07d0: 54 54 52 53 20 3d 20 2f 28 5b 2d 5c 77 5d 2b 29  TTRS = /([-\w]+)
07e0: 20 3f 3d 20 3f 28 3f 3a 22 28 5b 5e 22 5d 2a 29   ?= ?(?:"([^"]*)
07f0: 7c 27 28 5b 5e 27 5d 2a 29 7c 28 7b 5b 5e 7d 5d  |'([^']*)|({[^}]
0800: 2a 7d 29 29 2f 67 2c 0a 20 20 20 20 2f 2f 20 73  *}))/g,.    // s
0810: 6f 6d 65 20 44 4f 4d 20 61 74 74 72 69 62 75 74  ome DOM attribut
0820: 65 73 20 6d 75 73 74 20 62 65 20 6e 6f 72 6d 61  es must be norma
0830: 6c 69 7a 65 64 0a 20 20 20 20 43 41 53 45 5f 53  lized.    CASE_S
0840: 45 4e 53 49 54 49 56 45 5f 41 54 54 52 49 42 55  ENSITIVE_ATTRIBU
0850: 54 45 53 20 3d 20 7b 0a 20 20 20 20 20 20 27 76  TES = {.      'v
0860: 69 65 77 62 6f 78 27 3a 20 27 76 69 65 77 42 6f  iewbox': 'viewBo
0870: 78 27 2c 0a 20 20 20 20 20 20 27 70 72 65 73 65  x',.      'prese
0880: 72 76 65 61 73 70 65 63 74 72 61 74 69 6f 27 3a  rveaspectratio':
0890: 20 27 70 72 65 73 65 72 76 65 41 73 70 65 63 74   'preserveAspect
08a0: 52 61 74 69 6f 27 0a 20 20 20 20 7d 2c 0a 20 20  Ratio'.    },.  
08b0: 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 4d 61 74    /**.     * Mat
08c0: 63 68 65 73 20 62 6f 6f 6c 65 61 6e 20 48 54 4d  ches boolean HTM
08d0: 4c 20 61 74 74 72 69 62 75 74 65 73 20 69 6e 20  L attributes in 
08e0: 74 68 65 20 72 69 6f 74 20 74 61 67 20 64 65 66  the riot tag def
08f0: 69 6e 69 74 69 6f 6e 2e 0a 20 20 20 20 20 2a 20  inition..     * 
0900: 57 69 74 68 20 61 20 6c 6f 6e 67 20 6c 69 73 74  With a long list
0910: 20 6c 69 6b 65 20 74 68 69 73 2c 20 61 20 72 65   like this, a re
0920: 67 65 78 20 69 73 20 66 61 73 74 65 72 20 74 68  gex is faster th
0930: 61 6e 20 60 5b 5d 2e 69 6e 64 65 78 4f 66 60 20  an `[].indexOf` 
0940: 69 6e 20 6d 6f 73 74 20 62 72 6f 77 73 65 72 73  in most browsers
0950: 2e 0a 20 20 20 20 20 2a 20 40 63 6f 6e 73 74 20  ..     * @const 
0960: 7b 52 65 67 45 78 70 7d 0a 20 20 20 20 20 2a 20  {RegExp}.     * 
0970: 40 73 65 65 20 5b 61 74 74 72 69 62 75 74 65 73  @see [attributes
0980: 2e 6d 64 5d 28 68 74 74 70 73 3a 2f 2f 67 69 74  .md](https://git
0990: 68 75 62 2e 63 6f 6d 2f 72 69 6f 74 2f 63 6f 6d  hub.com/riot/com
09a0: 70 69 6c 65 72 2f 62 6c 6f 62 2f 64 65 76 2f 64  piler/blob/dev/d
09b0: 6f 63 2f 61 74 74 72 69 62 75 74 65 73 2e 6d 64  oc/attributes.md
09c0: 29 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 52 45  ).     */.    RE
09d0: 5f 42 4f 4f 4c 5f 41 54 54 52 53 20 3d 20 2f 5e  _BOOL_ATTRS = /^
09e0: 28 3f 3a 64 69 73 61 62 6c 65 64 7c 63 68 65 63  (?:disabled|chec
09f0: 6b 65 64 7c 72 65 61 64 6f 6e 6c 79 7c 72 65 71  ked|readonly|req
0a00: 75 69 72 65 64 7c 61 6c 6c 6f 77 66 75 6c 6c 73  uired|allowfulls
0a10: 63 72 65 65 6e 7c 61 75 74 6f 28 3f 3a 66 6f 63  creen|auto(?:foc
0a20: 75 73 7c 70 6c 61 79 29 7c 63 6f 6d 70 61 63 74  us|play)|compact
0a30: 7c 63 6f 6e 74 72 6f 6c 73 7c 64 65 66 61 75 6c  |controls|defaul
0a40: 74 7c 66 6f 72 6d 6e 6f 76 61 6c 69 64 61 74 65  t|formnovalidate
0a50: 7c 68 69 64 64 65 6e 7c 69 73 6d 61 70 7c 69 74  |hidden|ismap|it
0a60: 65 6d 73 63 6f 70 65 7c 6c 6f 6f 70 7c 6d 75 6c  emscope|loop|mul
0a70: 74 69 70 6c 65 7c 6d 75 74 65 64 7c 6e 6f 28 3f  tiple|muted|no(?
0a80: 3a 72 65 73 69 7a 65 7c 73 68 61 64 65 7c 76 61  :resize|shade|va
0a90: 6c 69 64 61 74 65 7c 77 72 61 70 29 3f 7c 6f 70  lidate|wrap)?|op
0aa0: 65 6e 7c 72 65 76 65 72 73 65 64 7c 73 65 61 6d  en|reversed|seam
0ab0: 6c 65 73 73 7c 73 65 6c 65 63 74 65 64 7c 73 6f  less|selected|so
0ac0: 72 74 61 62 6c 65 7c 74 72 75 65 73 70 65 65 64  rtable|truespeed
0ad0: 7c 74 79 70 65 6d 75 73 74 6d 61 74 63 68 29 24  |typemustmatch)$
0ae0: 2f 2c 0a 20 20 20 20 2f 2f 20 76 65 72 73 69 6f  /,.    // versio
0af0: 6e 23 20 66 6f 72 20 49 45 20 38 2d 31 31 2c 20  n# for IE 8-11, 
0b00: 30 20 66 6f 72 20 6f 74 68 65 72 73 0a 20 20 20  0 for others.   
0b10: 20 49 45 5f 56 45 52 53 49 4f 4e 20 3d 20 28 57   IE_VERSION = (W
0b20: 49 4e 20 26 26 20 57 49 4e 2e 64 6f 63 75 6d 65  IN && WIN.docume
0b30: 6e 74 20 7c 7c 20 2f 2a 20 69 73 74 61 6e 62 75  nt || /* istanbu
0b40: 6c 20 69 67 6e 6f 72 65 20 6e 65 78 74 20 2a 2f  l ignore next */
0b50: 20 7b 7d 29 2e 64 6f 63 75 6d 65 6e 74 4d 6f 64   {}).documentMod
0b60: 65 20 7c 20 30 3b 0a 0a 20 20 2f 2a 2a 0a 20 20  e | 0;..  /**.  
0b70: 20 2a 20 43 72 65 61 74 65 20 61 20 67 65 6e 65   * Create a gene
0b80: 72 69 63 20 44 4f 4d 20 6e 6f 64 65 0a 20 20 20  ric DOM node.   
0b90: 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 53 74 72  * @param   { Str
0ba0: 69 6e 67 20 7d 20 6e 61 6d 65 20 2d 20 6e 61 6d  ing } name - nam
0bb0: 65 20 6f 66 20 74 68 65 20 44 4f 4d 20 6e 6f 64  e of the DOM nod
0bc0: 65 20 77 65 20 77 61 6e 74 20 74 6f 20 63 72 65  e we want to cre
0bd0: 61 74 65 0a 20 20 20 2a 20 40 72 65 74 75 72 6e  ate.   * @return
0be0: 73 20 7b 20 4f 62 6a 65 63 74 20 7d 20 44 4f 4d  s { Object } DOM
0bf0: 20 6e 6f 64 65 20 6a 75 73 74 20 63 72 65 61 74   node just creat
0c00: 65 64 0a 20 20 20 2a 2f 0a 20 20 66 75 6e 63 74  ed.   */.  funct
0c10: 69 6f 6e 20 6d 61 6b 65 45 6c 65 6d 65 6e 74 28  ion makeElement(
0c20: 6e 61 6d 65 29 20 7b 0a 20 20 20 20 72 65 74 75  name) {.    retu
0c30: 72 6e 20 6e 61 6d 65 20 3d 3d 3d 20 27 73 76 67  rn name === 'svg
0c40: 27 20 3f 20 64 6f 63 75 6d 65 6e 74 2e 63 72 65  ' ? document.cre
0c50: 61 74 65 45 6c 65 6d 65 6e 74 4e 53 28 53 56 47  ateElementNS(SVG
0c60: 5f 4e 53 2c 20 6e 61 6d 65 29 20 3a 20 64 6f 63  _NS, name) : doc
0c70: 75 6d 65 6e 74 2e 63 72 65 61 74 65 45 6c 65 6d  ument.createElem
0c80: 65 6e 74 28 6e 61 6d 65 29 0a 20 20 7d 0a 0a 20  ent(name).  }.. 
0c90: 20 2f 2a 2a 0a 20 20 20 2a 20 53 65 74 20 61 6e   /**.   * Set an
0ca0: 79 20 44 4f 4d 20 61 74 74 72 69 62 75 74 65 0a  y DOM attribute.
0cb0: 20 20 20 2a 20 40 70 61 72 61 6d 20 7b 20 4f 62     * @param { Ob
0cc0: 6a 65 63 74 20 7d 20 64 6f 6d 20 2d 20 44 4f 4d  ject } dom - DOM
0cd0: 20 6e 6f 64 65 20 77 65 20 77 61 6e 74 20 74 6f   node we want to
0ce0: 20 75 70 64 61 74 65 0a 20 20 20 2a 20 40 70 61   update.   * @pa
0cf0: 72 61 6d 20 7b 20 53 74 72 69 6e 67 20 7d 20 6e  ram { String } n
0d00: 61 6d 65 20 2d 20 6e 61 6d 65 20 6f 66 20 74 68  ame - name of th
0d10: 65 20 70 72 6f 70 65 72 74 79 20 77 65 20 77 61  e property we wa
0d20: 6e 74 20 74 6f 20 73 65 74 0a 20 20 20 2a 20 40  nt to set.   * @
0d30: 70 61 72 61 6d 20 7b 20 53 74 72 69 6e 67 20 7d  param { String }
0d40: 20 76 61 6c 20 2d 20 76 61 6c 75 65 20 6f 66 20   val - value of 
0d50: 74 68 65 20 70 72 6f 70 65 72 74 79 20 77 65 20  the property we 
0d60: 77 61 6e 74 20 74 6f 20 73 65 74 0a 20 20 20 2a  want to set.   *
0d70: 2f 0a 20 20 66 75 6e 63 74 69 6f 6e 20 73 65 74  /.  function set
0d80: 41 74 74 72 69 62 75 74 65 28 64 6f 6d 2c 20 6e  Attribute(dom, n
0d90: 61 6d 65 2c 20 76 61 6c 29 20 7b 0a 20 20 20 20  ame, val) {.    
0da0: 76 61 72 20 78 6c 69 6e 6b 20 3d 20 58 4c 49 4e  var xlink = XLIN
0db0: 4b 5f 52 45 47 45 58 2e 65 78 65 63 28 6e 61 6d  K_REGEX.exec(nam
0dc0: 65 29 3b 0a 20 20 20 20 69 66 20 28 78 6c 69 6e  e);.    if (xlin
0dd0: 6b 20 26 26 20 78 6c 69 6e 6b 5b 31 5d 29 0a 20  k && xlink[1]). 
0de0: 20 20 20 20 20 7b 20 64 6f 6d 2e 73 65 74 41 74       { dom.setAt
0df0: 74 72 69 62 75 74 65 4e 53 28 58 4c 49 4e 4b 5f  tributeNS(XLINK_
0e00: 4e 53 2c 20 78 6c 69 6e 6b 5b 31 5d 2c 20 76 61  NS, xlink[1], va
0e10: 6c 29 3b 20 7d 0a 20 20 20 20 65 6c 73 65 0a 20  l); }.    else. 
0e20: 20 20 20 20 20 7b 20 64 6f 6d 2e 73 65 74 41 74       { dom.setAt
0e30: 74 72 69 62 75 74 65 28 6e 61 6d 65 2c 20 76 61  tribute(name, va
0e40: 6c 29 3b 20 7d 0a 20 20 7d 0a 0a 20 20 76 61 72  l); }.  }..  var
0e50: 20 73 74 79 6c 65 4e 6f 64 65 3b 0a 20 20 2f 2f   styleNode;.  //
0e60: 20 43 72 65 61 74 65 20 63 61 63 68 65 20 61 6e   Create cache an
0e70: 64 20 73 68 6f 72 74 63 75 74 20 74 6f 20 74 68  d shortcut to th
0e80: 65 20 63 6f 72 72 65 63 74 20 70 72 6f 70 65 72  e correct proper
0e90: 74 79 0a 20 20 76 61 72 20 63 73 73 54 65 78 74  ty.  var cssText
0ea0: 50 72 6f 70 3b 0a 20 20 76 61 72 20 62 79 4e 61  Prop;.  var byNa
0eb0: 6d 65 20 3d 20 7b 7d 3b 0a 20 20 76 61 72 20 6e  me = {};.  var n
0ec0: 65 65 64 73 49 6e 6a 65 63 74 20 3d 20 66 61 6c  eedsInject = fal
0ed0: 73 65 3b 0a 0a 20 20 2f 2f 20 73 6b 69 70 20 74  se;..  // skip t
0ee0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64  he following cod
0ef0: 65 20 6f 6e 20 74 68 65 20 73 65 72 76 65 72 0a  e on the server.
0f00: 20 20 69 66 20 28 57 49 4e 29 20 7b 0a 20 20 20    if (WIN) {.   
0f10: 20 73 74 79 6c 65 4e 6f 64 65 20 3d 20 28 28 66   styleNode = ((f
0f20: 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20  unction () {.   
0f30: 20 20 20 2f 2f 20 63 72 65 61 74 65 20 61 20 6e     // create a n
0f40: 65 77 20 73 74 79 6c 65 20 65 6c 65 6d 65 6e 74  ew style element
0f50: 20 77 69 74 68 20 74 68 65 20 63 6f 72 72 65 63   with the correc
0f60: 74 20 74 79 70 65 0a 20 20 20 20 20 20 76 61 72  t type.      var
0f70: 20 6e 65 77 4e 6f 64 65 20 3d 20 6d 61 6b 65 45   newNode = makeE
0f80: 6c 65 6d 65 6e 74 28 27 73 74 79 6c 65 27 29 3b  lement('style');
0f90: 0a 20 20 20 20 20 20 2f 2f 20 72 65 70 6c 61 63  .      // replac
0fa0: 65 20 61 6e 79 20 75 73 65 72 20 6e 6f 64 65 20  e any user node 
0fb0: 6f 72 20 69 6e 73 65 72 74 20 74 68 65 20 6e 65  or insert the ne
0fc0: 77 20 6f 6e 65 20 69 6e 74 6f 20 74 68 65 20 68  w one into the h
0fd0: 65 61 64 0a 20 20 20 20 20 20 76 61 72 20 75 73  ead.      var us
0fe0: 65 72 4e 6f 64 65 20 3d 20 24 28 27 73 74 79 6c  erNode = $('styl
0ff0: 65 5b 74 79 70 65 3d 72 69 6f 74 5d 27 29 3b 0a  e[type=riot]');.
1000: 0a 20 20 20 20 20 20 73 65 74 41 74 74 72 69 62  .      setAttrib
1010: 75 74 65 28 6e 65 77 4e 6f 64 65 2c 20 27 74 79  ute(newNode, 'ty
1020: 70 65 27 2c 20 27 74 65 78 74 2f 63 73 73 27 29  pe', 'text/css')
1030: 3b 0a 20 20 20 20 20 20 2f 2a 20 69 73 74 61 6e  ;.      /* istan
1040: 62 75 6c 20 69 67 6e 6f 72 65 20 6e 65 78 74 20  bul ignore next 
1050: 2a 2f 0a 20 20 20 20 20 20 69 66 20 28 75 73 65  */.      if (use
1060: 72 4e 6f 64 65 29 20 7b 0a 20 20 20 20 20 20 20  rNode) {.       
1070: 20 69 66 20 28 75 73 65 72 4e 6f 64 65 2e 69 64   if (userNode.id
1080: 29 20 7b 20 6e 65 77 4e 6f 64 65 2e 69 64 20 3d  ) { newNode.id =
1090: 20 75 73 65 72 4e 6f 64 65 2e 69 64 3b 20 7d 0a   userNode.id; }.
10a0: 20 20 20 20 20 20 20 20 75 73 65 72 4e 6f 64 65          userNode
10b0: 2e 70 61 72 65 6e 74 4e 6f 64 65 2e 72 65 70 6c  .parentNode.repl
10c0: 61 63 65 43 68 69 6c 64 28 6e 65 77 4e 6f 64 65  aceChild(newNode
10d0: 2c 20 75 73 65 72 4e 6f 64 65 29 3b 0a 20 20 20  , userNode);.   
10e0: 20 20 20 7d 20 65 6c 73 65 20 7b 20 64 6f 63 75     } else { docu
10f0: 6d 65 6e 74 2e 68 65 61 64 2e 61 70 70 65 6e 64  ment.head.append
1100: 43 68 69 6c 64 28 6e 65 77 4e 6f 64 65 29 3b 20  Child(newNode); 
1110: 7d 0a 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  }..      return 
1120: 6e 65 77 4e 6f 64 65 0a 20 20 20 20 7d 29 29 28  newNode.    }))(
1130: 29 3b 0a 20 20 20 20 63 73 73 54 65 78 74 50 72  );.    cssTextPr
1140: 6f 70 20 3d 20 73 74 79 6c 65 4e 6f 64 65 2e 73  op = styleNode.s
1150: 74 79 6c 65 53 68 65 65 74 3b 0a 20 20 7d 0a 0a  tyleSheet;.  }..
1160: 20 20 2f 2a 2a 0a 20 20 20 2a 20 4f 62 6a 65 63    /**.   * Objec
1170: 74 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75  t that will be u
1180: 73 65 64 20 74 6f 20 69 6e 6a 65 63 74 20 61 6e  sed to inject an
1190: 64 20 6d 61 6e 61 67 65 20 74 68 65 20 63 73 73  d manage the css
11a0: 20 6f 66 20 65 76 65 72 79 20 74 61 67 20 69 6e   of every tag in
11b0: 73 74 61 6e 63 65 0a 20 20 20 2a 2f 0a 20 20 76  stance.   */.  v
11c0: 61 72 20 73 74 79 6c 65 4d 61 6e 61 67 65 72 20  ar styleManager 
11d0: 3d 20 7b 0a 20 20 20 20 73 74 79 6c 65 4e 6f 64  = {.    styleNod
11e0: 65 3a 20 73 74 79 6c 65 4e 6f 64 65 2c 0a 20 20  e: styleNode,.  
11f0: 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 53 61 76    /**.     * Sav
1200: 65 20 61 20 74 61 67 20 73 74 79 6c 65 20 74 6f  e a tag style to
1210: 20 62 65 20 6c 61 74 65 72 20 69 6e 6a 65 63 74   be later inject
1220: 65 64 20 69 6e 74 6f 20 44 4f 4d 0a 20 20 20 20  ed into DOM.    
1230: 20 2a 20 40 70 61 72 61 6d 20 7b 20 53 74 72 69   * @param { Stri
1240: 6e 67 20 7d 20 63 73 73 20 2d 20 63 73 73 20 73  ng } css - css s
1250: 74 72 69 6e 67 0a 20 20 20 20 20 2a 20 40 70 61  tring.     * @pa
1260: 72 61 6d 20 7b 20 53 74 72 69 6e 67 20 7d 20 6e  ram { String } n
1270: 61 6d 65 20 2d 20 69 66 20 69 74 27 73 20 70 61  ame - if it's pa
1280: 73 73 65 64 20 77 65 20 77 69 6c 6c 20 6d 61 70  ssed we will map
1290: 20 74 68 65 20 63 73 73 20 74 6f 20 61 20 74 61   the css to a ta
12a0: 67 6e 61 6d 65 0a 20 20 20 20 20 2a 2f 0a 20 20  gname.     */.  
12b0: 20 20 61 64 64 3a 20 66 75 6e 63 74 69 6f 6e 20    add: function 
12c0: 61 64 64 28 63 73 73 2c 20 6e 61 6d 65 29 20 7b  add(css, name) {
12d0: 0a 20 20 20 20 20 20 62 79 4e 61 6d 65 5b 6e 61  .      byName[na
12e0: 6d 65 5d 20 3d 20 63 73 73 3b 0a 20 20 20 20 20  me] = css;.     
12f0: 20 6e 65 65 64 73 49 6e 6a 65 63 74 20 3d 20 74   needsInject = t
1300: 72 75 65 3b 0a 20 20 20 20 7d 2c 0a 20 20 20 20  rue;.    },.    
1310: 2f 2a 2a 0a 20 20 20 20 20 2a 20 49 6e 6a 65 63  /**.     * Injec
1320: 74 20 61 6c 6c 20 70 72 65 76 69 6f 75 73 6c 79  t all previously
1330: 20 73 61 76 65 64 20 74 61 67 20 73 74 79 6c 65   saved tag style
1340: 73 20 69 6e 74 6f 20 44 4f 4d 0a 20 20 20 20 20  s into DOM.     
1350: 2a 20 69 6e 6e 65 72 48 54 4d 4c 20 73 65 65 6d  * innerHTML seem
1360: 73 20 73 6c 6f 77 3a 20 68 74 74 70 3a 2f 2f 6a  s slow: http://j
1370: 73 70 65 72 66 2e 63 6f 6d 2f 72 69 6f 74 2d 69  sperf.com/riot-i
1380: 6e 73 65 72 74 2d 73 74 79 6c 65 0a 20 20 20 20  nsert-style.    
1390: 20 2a 2f 0a 20 20 20 20 69 6e 6a 65 63 74 3a 20   */.    inject: 
13a0: 66 75 6e 63 74 69 6f 6e 20 69 6e 6a 65 63 74 28  function inject(
13b0: 29 20 7b 0a 20 20 20 20 20 20 69 66 20 28 21 57  ) {.      if (!W
13c0: 49 4e 20 7c 7c 20 21 6e 65 65 64 73 49 6e 6a 65  IN || !needsInje
13d0: 63 74 29 20 7b 20 72 65 74 75 72 6e 20 7d 0a 20  ct) { return }. 
13e0: 20 20 20 20 20 6e 65 65 64 73 49 6e 6a 65 63 74       needsInject
13f0: 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20 20 20   = false;.      
1400: 76 61 72 20 73 74 79 6c 65 20 3d 20 4f 62 6a 65  var style = Obje
1410: 63 74 2e 6b 65 79 73 28 62 79 4e 61 6d 65 29 0a  ct.keys(byName).
1420: 20 20 20 20 20 20 20 20 2e 6d 61 70 28 66 75 6e          .map(fun
1430: 63 74 69 6f 6e 20 28 6b 29 20 7b 20 72 65 74 75  ction (k) { retu
1440: 72 6e 20 62 79 4e 61 6d 65 5b 6b 5d 3b 20 7d 29  rn byName[k]; })
1450: 0a 20 20 20 20 20 20 20 20 2e 6a 6f 69 6e 28 27  .        .join('
1460: 5c 6e 27 29 3b 0a 20 20 20 20 20 20 2f 2a 20 69  \n');.      /* i
1470: 73 74 61 6e 62 75 6c 20 69 67 6e 6f 72 65 20 6e  stanbul ignore n
1480: 65 78 74 20 2a 2f 0a 20 20 20 20 20 20 69 66 20  ext */.      if 
1490: 28 63 73 73 54 65 78 74 50 72 6f 70 29 20 7b 20  (cssTextProp) { 
14a0: 63 73 73 54 65 78 74 50 72 6f 70 2e 63 73 73 54  cssTextProp.cssT
14b0: 65 78 74 20 3d 20 73 74 79 6c 65 3b 20 7d 0a 20  ext = style; }. 
14c0: 20 20 20 20 20 65 6c 73 65 20 7b 20 73 74 79 6c       else { styl
14d0: 65 4e 6f 64 65 2e 69 6e 6e 65 72 48 54 4d 4c 20  eNode.innerHTML 
14e0: 3d 20 73 74 79 6c 65 3b 20 7d 0a 20 20 20 20 7d  = style; }.    }
14f0: 2c 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20  ,..    /**.     
1500: 2a 20 52 65 6d 6f 76 65 20 61 20 74 61 67 20 73  * Remove a tag s
1510: 74 79 6c 65 20 6f 66 20 69 6e 6a 65 63 74 65 64  tyle of injected
1520: 20 44 4f 4d 20 6c 61 74 65 72 2e 0a 20 20 20 20   DOM later..    
1530: 20 2a 20 40 70 61 72 61 6d 20 7b 53 74 72 69 6e   * @param {Strin
1540: 67 7d 20 6e 61 6d 65 20 61 20 72 65 67 69 73 74  g} name a regist
1550: 65 72 65 64 20 74 61 67 6e 61 6d 65 0a 20 20 20  ered tagname.   
1560: 20 20 2a 2f 0a 20 20 20 20 72 65 6d 6f 76 65 3a    */.    remove:
1570: 20 66 75 6e 63 74 69 6f 6e 20 72 65 6d 6f 76 65   function remove
1580: 28 6e 61 6d 65 29 20 7b 0a 20 20 20 20 20 20 64  (name) {.      d
1590: 65 6c 65 74 65 20 62 79 4e 61 6d 65 5b 6e 61 6d  elete byName[nam
15a0: 65 5d 3b 0a 20 20 20 20 20 20 6e 65 65 64 73 49  e];.      needsI
15b0: 6e 6a 65 63 74 20 3d 20 74 72 75 65 3b 0a 20 20  nject = true;.  
15c0: 20 20 7d 0a 20 20 7d 3b 0a 0a 20 20 2f 2a 2a 0a    }.  };..  /**.
15d0: 20 20 20 2a 20 54 68 65 20 72 69 6f 74 20 74 65     * The riot te
15e0: 6d 70 6c 61 74 65 20 65 6e 67 69 6e 65 0a 20 20  mplate engine.  
15f0: 20 2a 20 40 76 65 72 73 69 6f 6e 20 76 33 2e 30   * @version v3.0
1600: 2e 38 0a 20 20 20 2a 2f 0a 0a 20 20 2f 2a 20 69  .8.   */..  /* i
1610: 73 74 61 6e 62 75 6c 20 69 67 6e 6f 72 65 20 6e  stanbul ignore n
1620: 65 78 74 20 2a 2f 0a 20 20 76 61 72 20 73 6b 69  ext */.  var ski
1630: 70 52 65 67 65 78 20 3d 20 28 66 75 6e 63 74 69  pRegex = (functi
1640: 6f 6e 20 28 29 20 7b 20 2f 2f 65 73 6c 69 6e 74  on () { //eslint
1650: 2d 64 69 73 61 62 6c 65 2d 6c 69 6e 65 20 6e 6f  -disable-line no
1660: 2d 75 6e 75 73 65 64 2d 76 61 72 73 0a 0a 20 20  -unused-vars..  
1670: 20 20 76 61 72 20 62 65 66 6f 72 65 52 65 43 68    var beforeReCh
1680: 61 72 73 20 3d 20 27 5b 7b 28 2c 3b 3a 3f 3d 7c  ars = '[{(,;:?=|
1690: 26 21 5e 7e 3e 25 2a 2f 27 3b 0a 0a 20 20 20 20  &!^~>%*/';..    
16a0: 76 61 72 20 62 65 66 6f 72 65 52 65 57 6f 72 64  var beforeReWord
16b0: 73 20 3d 20 5b 0a 20 20 20 20 20 20 27 63 61 73  s = [.      'cas
16c0: 65 27 2c 0a 20 20 20 20 20 20 27 64 65 66 61 75  e',.      'defau
16d0: 6c 74 27 2c 0a 20 20 20 20 20 20 27 64 6f 27 2c  lt',.      'do',
16e0: 0a 20 20 20 20 20 20 27 65 6c 73 65 27 2c 0a 20  .      'else',. 
16f0: 20 20 20 20 20 27 69 6e 27 2c 0a 20 20 20 20 20       'in',.     
1700: 20 27 69 6e 73 74 61 6e 63 65 6f 66 27 2c 0a 20   'instanceof',. 
1710: 20 20 20 20 20 27 70 72 65 66 69 78 27 2c 0a 20       'prefix',. 
1720: 20 20 20 20 20 27 72 65 74 75 72 6e 27 2c 0a 20       'return',. 
1730: 20 20 20 20 20 27 74 79 70 65 6f 66 27 2c 0a 20       'typeof',. 
1740: 20 20 20 20 20 27 76 6f 69 64 27 2c 0a 20 20 20       'void',.   
1750: 20 20 20 27 79 69 65 6c 64 27 0a 20 20 20 20 5d     'yield'.    ]
1760: 3b 0a 0a 20 20 20 20 76 61 72 20 77 6f 72 64 73  ;..    var words
1770: 4c 61 73 74 43 68 61 72 20 3d 20 62 65 66 6f 72  LastChar = befor
1780: 65 52 65 57 6f 72 64 73 2e 72 65 64 75 63 65 28  eReWords.reduce(
1790: 66 75 6e 63 74 69 6f 6e 20 28 73 2c 20 77 29 20  function (s, w) 
17a0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 73  {.      return s
17b0: 20 2b 20 77 2e 73 6c 69 63 65 28 2d 31 29 0a 20   + w.slice(-1). 
17c0: 20 20 20 7d 2c 20 27 27 29 3b 0a 0a 20 20 20 20     }, '');..    
17d0: 76 61 72 20 52 45 5f 52 45 47 45 58 20 3d 20 2f  var RE_REGEX = /
17e0: 5e 5c 2f 28 3f 3d 5b 5e 2a 3e 2f 5d 29 5b 5e 5b  ^\/(?=[^*>/])[^[
17f0: 2f 5c 5c 5d 2a 28 3f 3a 28 3f 3a 5c 5c 2e 7c 5c  /\\]*(?:(?:\\.|\
1800: 5b 28 3f 3a 5c 5c 2e 7c 5b 5e 5c 5d 5c 5c 5d 2a  [(?:\\.|[^\]\\]*
1810: 29 2a 5c 5d 29 5b 5e 5b 5c 5c 2f 5d 2a 29 2a 3f  )*\])[^[\\/]*)*?
1820: 5c 2f 5b 67 69 6d 75 79 5d 2a 2f 3b 0a 20 20 20  \/[gimuy]*/;.   
1830: 20 76 61 72 20 52 45 5f 56 4e 5f 43 48 41 52 20   var RE_VN_CHAR 
1840: 3d 20 2f 5b 24 5c 77 5d 2f 3b 0a 0a 20 20 20 20  = /[$\w]/;..    
1850: 66 75 6e 63 74 69 6f 6e 20 70 72 65 76 20 28 63  function prev (c
1860: 6f 64 65 2c 20 70 6f 73 29 20 7b 0a 20 20 20 20  ode, pos) {.    
1870: 20 20 77 68 69 6c 65 20 28 2d 2d 70 6f 73 20 3e    while (--pos >
1880: 3d 20 30 20 26 26 20 2f 5c 73 2f 2e 74 65 73 74  = 0 && /\s/.test
1890: 28 63 6f 64 65 5b 70 6f 73 5d 29 29 7b 20 7d 0a  (code[pos])){ }.
18a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 70 6f 73        return pos
18b0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63  .    }..    func
18c0: 74 69 6f 6e 20 5f 73 6b 69 70 52 65 67 65 78 20  tion _skipRegex 
18d0: 28 63 6f 64 65 2c 20 73 74 61 72 74 29 20 7b 0a  (code, start) {.
18e0: 0a 20 20 20 20 20 20 76 61 72 20 72 65 20 3d 20  .      var re = 
18f0: 2f 2e 2a 2f 67 3b 0a 20 20 20 20 20 20 76 61 72  /.*/g;.      var
1900: 20 70 6f 73 20 3d 20 72 65 2e 6c 61 73 74 49 6e   pos = re.lastIn
1910: 64 65 78 20 3d 20 73 74 61 72 74 2b 2b 3b 0a 20  dex = start++;. 
1920: 20 20 20 20 20 76 61 72 20 6d 61 74 63 68 20 3d       var match =
1930: 20 72 65 2e 65 78 65 63 28 63 6f 64 65 29 5b 30   re.exec(code)[0
1940: 5d 2e 6d 61 74 63 68 28 52 45 5f 52 45 47 45 58  ].match(RE_REGEX
1950: 29 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 6d 61  );..      if (ma
1960: 74 63 68 29 20 7b 0a 20 20 20 20 20 20 20 20 76  tch) {.        v
1970: 61 72 20 6e 65 78 74 20 3d 20 70 6f 73 20 2b 20  ar next = pos + 
1980: 6d 61 74 63 68 5b 30 5d 2e 6c 65 6e 67 74 68 3b  match[0].length;
1990: 0a 0a 20 20 20 20 20 20 20 20 70 6f 73 20 3d 20  ..        pos = 
19a0: 70 72 65 76 28 63 6f 64 65 2c 20 70 6f 73 29 3b  prev(code, pos);
19b0: 0a 20 20 20 20 20 20 20 20 76 61 72 20 63 20 3d  .        var c =
19c0: 20 63 6f 64 65 5b 70 6f 73 5d 3b 0a 0a 20 20 20   code[pos];..   
19d0: 20 20 20 20 20 69 66 20 28 70 6f 73 20 3c 20 30       if (pos < 0
19e0: 20 7c 7c 20 7e 62 65 66 6f 72 65 52 65 43 68 61   || ~beforeReCha
19f0: 72 73 2e 69 6e 64 65 78 4f 66 28 63 29 29 20 7b  rs.indexOf(c)) {
1a00: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
1a10: 6e 20 6e 65 78 74 0a 20 20 20 20 20 20 20 20 7d  n next.        }
1a20: 0a 0a 20 20 20 20 20 20 20 20 69 66 20 28 63 20  ..        if (c 
1a30: 3d 3d 3d 20 27 2e 27 29 20 7b 0a 0a 20 20 20 20  === '.') {..    
1a40: 20 20 20 20 20 20 69 66 20 28 63 6f 64 65 5b 70        if (code[p
1a50: 6f 73 20 2d 20 31 5d 20 3d 3d 3d 20 27 2e 27 29  os - 1] === '.')
1a60: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73   {.            s
1a70: 74 61 72 74 20 3d 20 6e 65 78 74 3b 0a 20 20 20  tart = next;.   
1a80: 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20         }..      
1a90: 20 20 7d 20 65 6c 73 65 20 69 66 20 28 63 20 3d    } else if (c =
1aa0: 3d 3d 20 27 2b 27 20 7c 7c 20 63 20 3d 3d 3d 20  == '+' || c === 
1ab0: 27 2d 27 29 20 7b 0a 0a 20 20 20 20 20 20 20 20  '-') {..        
1ac0: 20 20 69 66 20 28 63 6f 64 65 5b 2d 2d 70 6f 73    if (code[--pos
1ad0: 5d 20 21 3d 3d 20 63 20 7c 7c 0a 20 20 20 20 20  ] !== c ||.     
1ae0: 20 20 20 20 20 20 20 20 20 28 70 6f 73 20 3d 20           (pos = 
1af0: 70 72 65 76 28 63 6f 64 65 2c 20 70 6f 73 29 29  prev(code, pos))
1b00: 20 3c 20 30 20 7c 7c 0a 20 20 20 20 20 20 20 20   < 0 ||.        
1b10: 20 20 20 20 20 20 21 52 45 5f 56 4e 5f 43 48 41        !RE_VN_CHA
1b20: 52 2e 74 65 73 74 28 63 6f 64 65 5b 70 6f 73 5d  R.test(code[pos]
1b30: 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  )) {.           
1b40: 20 73 74 61 72 74 20 3d 20 6e 65 78 74 3b 0a 20   start = next;. 
1b50: 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20           }..    
1b60: 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 7e      } else if (~
1b70: 77 6f 72 64 73 4c 61 73 74 43 68 61 72 2e 69 6e  wordsLastChar.in
1b80: 64 65 78 4f 66 28 63 29 29 20 7b 0a 0a 20 20 20  dexOf(c)) {..   
1b90: 20 20 20 20 20 20 20 76 61 72 20 65 6e 64 20 3d         var end =
1ba0: 20 70 6f 73 20 2b 20 31 3b 0a 0a 20 20 20 20 20   pos + 1;..     
1bb0: 20 20 20 20 20 77 68 69 6c 65 20 28 2d 2d 70 6f       while (--po
1bc0: 73 20 3e 3d 20 30 20 26 26 20 52 45 5f 56 4e 5f  s >= 0 && RE_VN_
1bd0: 43 48 41 52 2e 74 65 73 74 28 63 6f 64 65 5b 70  CHAR.test(code[p
1be0: 6f 73 5d 29 29 7b 20 7d 0a 20 20 20 20 20 20 20  os])){ }.       
1bf0: 20 20 20 69 66 20 28 7e 62 65 66 6f 72 65 52 65     if (~beforeRe
1c00: 57 6f 72 64 73 2e 69 6e 64 65 78 4f 66 28 63 6f  Words.indexOf(co
1c10: 64 65 2e 73 6c 69 63 65 28 70 6f 73 20 2b 20 31  de.slice(pos + 1
1c20: 2c 20 65 6e 64 29 29 29 20 7b 0a 20 20 20 20 20  , end))) {.     
1c30: 20 20 20 20 20 20 20 73 74 61 72 74 20 3d 20 6e         start = n
1c40: 65 78 74 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  ext;.          }
1c50: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
1c60: 20 7d 0a 0a 20 20 20 20 20 20 72 65 74 75 72 6e   }..      return
1c70: 20 73 74 61 72 74 0a 20 20 20 20 7d 0a 0a 20 20   start.    }..  
1c80: 20 20 72 65 74 75 72 6e 20 5f 73 6b 69 70 52 65    return _skipRe
1c90: 67 65 78 0a 0a 20 20 7d 29 28 29 3b 0a 0a 20 20  gex..  })();..  
1ca0: 2f 2a 2a 0a 20 20 20 2a 20 72 69 6f 74 2e 75 74  /**.   * riot.ut
1cb0: 69 6c 2e 62 72 61 63 6b 65 74 73 0a 20 20 20 2a  il.brackets.   *
1cc0: 0a 20 20 20 2a 20 2d 20 60 62 72 61 63 6b 65 74  .   * - `bracket
1cd0: 73 20 20 20 20 60 20 2d 20 52 65 74 75 72 6e 73  s    ` - Returns
1ce0: 20 61 20 73 74 72 69 6e 67 20 6f 72 20 72 65 67   a string or reg
1cf0: 65 78 20 62 61 73 65 64 20 6f 6e 20 69 74 73 20  ex based on its 
1d00: 70 61 72 61 6d 65 74 65 72 0a 20 20 20 2a 20 2d  parameter.   * -
1d10: 20 60 62 72 61 63 6b 65 74 73 2e 73 65 74 60 20   `brackets.set` 
1d20: 2d 20 43 68 61 6e 67 65 20 74 68 65 20 63 75 72  - Change the cur
1d30: 72 65 6e 74 20 72 69 6f 74 20 62 72 61 63 6b 65  rent riot bracke
1d40: 74 73 0a 20 20 20 2a 0a 20 20 20 2a 20 40 6d 6f  ts.   *.   * @mo
1d50: 64 75 6c 65 0a 20 20 20 2a 2f 0a 0a 20 20 2f 2a  dule.   */..  /*
1d60: 20 67 6c 6f 62 61 6c 20 72 69 6f 74 20 2a 2f 0a   global riot */.
1d70: 0a 20 20 2f 2a 20 69 73 74 61 6e 62 75 6c 20 69  .  /* istanbul i
1d80: 67 6e 6f 72 65 20 6e 65 78 74 20 2a 2f 0a 20 20  gnore next */.  
1d90: 76 61 72 20 62 72 61 63 6b 65 74 73 20 3d 20 28  var brackets = (
1da0: 66 75 6e 63 74 69 6f 6e 20 28 55 4e 44 45 46 29  function (UNDEF)
1db0: 20 7b 0a 0a 20 20 20 20 76 61 72 0a 20 20 20 20   {..    var.    
1dc0: 20 20 52 45 47 4c 4f 42 20 3d 20 27 67 27 2c 0a    REGLOB = 'g',.
1dd0: 0a 20 20 20 20 20 20 52 5f 4d 4c 43 4f 4d 4d 53  .      R_MLCOMMS
1de0: 20 3d 20 2f 5c 2f 5c 2a 5b 5e 2a 5d 2a 5c 2a 2b   = /\/\*[^*]*\*+
1df0: 28 3f 3a 5b 5e 2a 5c 2f 5d 5b 5e 2a 5d 2a 5c 2a  (?:[^*\/][^*]*\*
1e00: 2b 29 2a 5c 2f 2f 67 2c 0a 0a 20 20 20 20 20 20  +)*\//g,..      
1e10: 52 5f 53 54 52 49 4e 47 53 20 3d 20 2f 22 5b 5e  R_STRINGS = /"[^
1e20: 22 5c 5c 5d 2a 28 3f 3a 5c 5c 5b 5c 53 5c 73 5d  "\\]*(?:\\[\S\s]
1e30: 5b 5e 22 5c 5c 5d 2a 29 2a 22 7c 27 5b 5e 27 5c  [^"\\]*)*"|'[^'\
1e40: 5c 5d 2a 28 3f 3a 5c 5c 5b 5c 53 5c 73 5d 5b 5e  \]*(?:\\[\S\s][^
1e50: 27 5c 5c 5d 2a 29 2a 27 7c 60 5b 5e 60 5c 5c 5d  '\\]*)*'|`[^`\\]
1e60: 2a 28 3f 3a 5c 5c 5b 5c 53 5c 73 5d 5b 5e 60 5c  *(?:\\[\S\s][^`\
1e70: 5c 5d 2a 29 2a 60 2f 67 2c 0a 0a 20 20 20 20 20  \]*)*`/g,..     
1e80: 20 53 5f 51 42 4c 4f 43 4b 53 20 3d 20 52 5f 53   S_QBLOCKS = R_S
1e90: 54 52 49 4e 47 53 2e 73 6f 75 72 63 65 20 2b 20  TRINGS.source + 
1ea0: 27 7c 27 20 2b 0a 20 20 20 20 20 20 20 20 2f 28  '|' +.        /(
1eb0: 3f 3a 5c 62 72 65 74 75 72 6e 5c 73 2b 7c 28 3f  ?:\breturn\s+|(?
1ec0: 3a 5b 24 5c 77 5c 29 5c 5d 5d 7c 5c 2b 5c 2b 7c  :[$\w\)\]]|\+\+|
1ed0: 2d 2d 29 5c 73 2a 28 5c 2f 29 28 3f 21 5b 2a 5c  --)\s*(\/)(?![*\
1ee0: 2f 5d 29 29 2f 2e 73 6f 75 72 63 65 20 2b 20 27  /]))/.source + '
1ef0: 7c 27 20 2b 0a 20 20 20 20 20 20 20 20 2f 5c 2f  |' +.        /\/
1f00: 28 3f 3d 5b 5e 2a 5c 2f 5d 29 5b 5e 5b 5c 2f 5c  (?=[^*\/])[^[\/\
1f10: 5c 5d 2a 28 3f 3a 28 3f 3a 5c 5b 28 3f 3a 5c 5c  \]*(?:(?:\[(?:\\
1f20: 2e 7c 5b 5e 5c 5d 5c 5c 5d 2a 29 2a 5c 5d 7c 5c  .|[^\]\\]*)*\]|\
1f30: 5c 2e 29 5b 5e 5b 5c 2f 5c 5c 5d 2a 29 2a 3f 28  \.)[^[\/\\]*)*?(
1f40: 5b 5e 3c 5d 5c 2f 29 5b 67 69 6d 5d 2a 2f 2e 73  [^<]\/)[gim]*/.s
1f50: 6f 75 72 63 65 2c 0a 0a 20 20 20 20 20 20 55 4e  ource,..      UN
1f60: 53 55 50 50 4f 52 54 45 44 20 3d 20 52 65 67 45  SUPPORTED = RegE
1f70: 78 70 28 27 5b 5c 5c 27 20 2b 20 27 78 30 30 2d  xp('[\\' + 'x00-
1f80: 5c 5c 78 31 46 3c 3e 61 2d 7a 41 2d 5a 30 2d 39  \\x1F<>a-zA-Z0-9
1f90: 5c 27 22 2c 3b 5c 5c 5c 5c 5d 27 29 2c 0a 0a 20  \'",;\\\\]'),.. 
1fa0: 20 20 20 20 20 4e 45 45 44 5f 45 53 43 41 50 45       NEED_ESCAPE
1fb0: 20 3d 20 2f 28 3f 3d 5b 5b 5c 5d 28 29 2a 2b 3f   = /(?=[[\]()*+?
1fc0: 2e 5e 24 7c 5d 29 2f 67 2c 0a 0a 20 20 20 20 20  .^$|])/g,..     
1fd0: 20 53 5f 51 42 4c 4f 43 4b 32 20 3d 20 52 5f 53   S_QBLOCK2 = R_S
1fe0: 54 52 49 4e 47 53 2e 73 6f 75 72 63 65 20 2b 20  TRINGS.source + 
1ff0: 27 7c 27 20 2b 20 2f 28 5c 2f 29 28 3f 21 5b 2a  '|' + /(\/)(?![*
2000: 5c 2f 5d 29 2f 2e 73 6f 75 72 63 65 2c 0a 0a 20  \/])/.source,.. 
2010: 20 20 20 20 20 46 49 4e 44 42 52 41 43 45 53 20       FINDBRACES 
2020: 3d 20 7b 0a 20 20 20 20 20 20 20 20 27 28 27 3a  = {.        '(':
2030: 20 52 65 67 45 78 70 28 27 28 5b 28 29 5d 29 7c   RegExp('([()])|
2040: 27 20 20 20 2b 20 53 5f 51 42 4c 4f 43 4b 32 2c  '   + S_QBLOCK2,
2050: 20 52 45 47 4c 4f 42 29 2c 0a 20 20 20 20 20 20   REGLOB),.      
2060: 20 20 27 5b 27 3a 20 52 65 67 45 78 70 28 27 28    '[': RegExp('(
2070: 5b 5b 5c 5c 5d 5d 29 7c 27 20 2b 20 53 5f 51 42  [[\\]])|' + S_QB
2080: 4c 4f 43 4b 32 2c 20 52 45 47 4c 4f 42 29 2c 0a  LOCK2, REGLOB),.
2090: 20 20 20 20 20 20 20 20 27 7b 27 3a 20 52 65 67          '{': Reg
20a0: 45 78 70 28 27 28 5b 7b 7d 5d 29 7c 27 20 20 20  Exp('([{}])|'   
20b0: 2b 20 53 5f 51 42 4c 4f 43 4b 32 2c 20 52 45 47  + S_QBLOCK2, REG
20c0: 4c 4f 42 29 0a 20 20 20 20 20 20 7d 2c 0a 0a 20  LOB).      },.. 
20d0: 20 20 20 20 20 44 45 46 41 55 4c 54 20 3d 20 27       DEFAULT = '
20e0: 7b 20 7d 27 3b 0a 0a 20 20 20 20 76 61 72 20 5f  { }';..    var _
20f0: 70 61 69 72 73 20 3d 20 5b 0a 20 20 20 20 20 20  pairs = [.      
2100: 27 7b 27 2c 20 27 7d 27 2c 0a 20 20 20 20 20 20  '{', '}',.      
2110: 27 7b 27 2c 20 27 7d 27 2c 0a 20 20 20 20 20 20  '{', '}',.      
2120: 2f 7b 5b 5e 7d 5d 2a 7d 2f 2c 0a 20 20 20 20 20  /{[^}]*}/,.     
2130: 20 2f 5c 5c 28 5b 7b 7d 5d 29 2f 67 2c 0a 20 20   /\\([{}])/g,.  
2140: 20 20 20 20 2f 5c 5c 28 7b 29 7c 7b 2f 67 2c 0a      /\\({)|{/g,.
2150: 20 20 20 20 20 20 52 65 67 45 78 70 28 27 5c 5c        RegExp('\\
2160: 5c 5c 28 7d 29 7c 28 5b 5b 28 7b 5d 29 7c 28 7d  \\(})|([[({])|(}
2170: 29 7c 27 20 2b 20 53 5f 51 42 4c 4f 43 4b 32 2c  )|' + S_QBLOCK2,
2180: 20 52 45 47 4c 4f 42 29 2c 0a 20 20 20 20 20 20   REGLOB),.      
2190: 44 45 46 41 55 4c 54 2c 0a 20 20 20 20 20 20 2f  DEFAULT,.      /
21a0: 5e 5c 73 2a 7b 5c 5e 3f 5c 73 2a 28 5b 24 5c 77  ^\s*{\^?\s*([$\w
21b0: 5d 2b 29 28 3f 3a 5c 73 2a 2c 5c 73 2a 28 5c 53  ]+)(?:\s*,\s*(\S
21c0: 2b 29 29 3f 5c 73 2b 69 6e 5c 73 2b 28 5c 53 2e  +))?\s+in\s+(\S.
21d0: 2a 29 5c 73 2a 7d 2f 2c 0a 20 20 20 20 20 20 2f  *)\s*}/,.      /
21e0: 28 5e 7c 5b 5e 5c 5c 5d 29 7b 3d 5b 5c 53 5c 73  (^|[^\\]){=[\S\s
21f0: 5d 2a 3f 7d 2f 0a 20 20 20 20 5d 3b 0a 0a 20 20  ]*?}/.    ];..  
2200: 20 20 76 61 72 0a 20 20 20 20 20 20 63 61 63 68    var.      cach
2210: 65 64 42 72 61 63 6b 65 74 73 20 3d 20 55 4e 44  edBrackets = UND
2220: 45 46 2c 0a 20 20 20 20 20 20 5f 72 65 67 65 78  EF,.      _regex
2230: 2c 0a 20 20 20 20 20 20 5f 63 61 63 68 65 20 3d  ,.      _cache =
2240: 20 5b 5d 2c 0a 20 20 20 20 20 20 5f 73 65 74 74   [],.      _sett
2250: 69 6e 67 73 3b 0a 0a 20 20 20 20 66 75 6e 63 74  ings;..    funct
2260: 69 6f 6e 20 5f 6c 6f 6f 70 62 61 63 6b 20 28 72  ion _loopback (r
2270: 65 29 20 7b 20 72 65 74 75 72 6e 20 72 65 20 7d  e) { return re }
2280: 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 5f  ..    function _
2290: 72 65 77 72 69 74 65 20 28 72 65 2c 20 62 70 29  rewrite (re, bp)
22a0: 20 7b 0a 20 20 20 20 20 20 69 66 20 28 21 62 70   {.      if (!bp
22b0: 29 20 7b 20 62 70 20 3d 20 5f 63 61 63 68 65 3b  ) { bp = _cache;
22c0: 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   }.      return 
22d0: 6e 65 77 20 52 65 67 45 78 70 28 0a 20 20 20 20  new RegExp(.    
22e0: 20 20 20 20 72 65 2e 73 6f 75 72 63 65 2e 72 65      re.source.re
22f0: 70 6c 61 63 65 28 2f 7b 2f 67 2c 20 62 70 5b 32  place(/{/g, bp[2
2300: 5d 29 2e 72 65 70 6c 61 63 65 28 2f 7d 2f 67 2c  ]).replace(/}/g,
2310: 20 62 70 5b 33 5d 29 2c 20 72 65 2e 67 6c 6f 62   bp[3]), re.glob
2320: 61 6c 20 3f 20 52 45 47 4c 4f 42 20 3a 20 27 27  al ? REGLOB : ''
2330: 0a 20 20 20 20 20 20 29 0a 20 20 20 20 7d 0a 0a  .      ).    }..
2340: 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 5f 63 72      function _cr
2350: 65 61 74 65 20 28 70 61 69 72 29 20 7b 0a 20 20  eate (pair) {.  
2360: 20 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 3d      if (pair ===
2370: 20 44 45 46 41 55 4c 54 29 20 7b 20 72 65 74 75   DEFAULT) { retu
2380: 72 6e 20 5f 70 61 69 72 73 20 7d 0a 0a 20 20 20  rn _pairs }..   
2390: 20 20 20 76 61 72 20 61 72 72 20 3d 20 70 61 69     var arr = pai
23a0: 72 2e 73 70 6c 69 74 28 27 20 27 29 3b 0a 0a 20  r.split(' ');.. 
23b0: 20 20 20 20 20 69 66 20 28 61 72 72 2e 6c 65 6e       if (arr.len
23c0: 67 74 68 20 21 3d 3d 20 32 20 7c 7c 20 55 4e 53  gth !== 2 || UNS
23d0: 55 50 50 4f 52 54 45 44 2e 74 65 73 74 28 70 61  UPPORTED.test(pa
23e0: 69 72 29 29 20 7b 0a 20 20 20 20 20 20 20 20 74  ir)) {.        t
23f0: 68 72 6f 77 20 6e 65 77 20 45 72 72 6f 72 28 27  hrow new Error('
2400: 55 6e 73 75 70 70 6f 72 74 65 64 20 62 72 61 63  Unsupported brac
2410: 6b 65 74 73 20 22 27 20 2b 20 70 61 69 72 20 2b  kets "' + pair +
2420: 20 27 22 27 29 0a 20 20 20 20 20 20 7d 0a 20 20   '"').      }.  
2430: 20 20 20 20 61 72 72 20 3d 20 61 72 72 2e 63 6f      arr = arr.co
2440: 6e 63 61 74 28 70 61 69 72 2e 72 65 70 6c 61 63  ncat(pair.replac
2450: 65 28 4e 45 45 44 5f 45 53 43 41 50 45 2c 20 27  e(NEED_ESCAPE, '
2460: 5c 5c 27 29 2e 73 70 6c 69 74 28 27 20 27 29 29  \\').split(' '))
2470: 3b 0a 0a 20 20 20 20 20 20 61 72 72 5b 34 5d 20  ;..      arr[4] 
2480: 3d 20 5f 72 65 77 72 69 74 65 28 61 72 72 5b 31  = _rewrite(arr[1
2490: 5d 2e 6c 65 6e 67 74 68 20 3e 20 31 20 3f 20 2f  ].length > 1 ? /
24a0: 7b 5b 5c 53 5c 73 5d 2a 3f 7d 2f 20 3a 20 5f 70  {[\S\s]*?}/ : _p
24b0: 61 69 72 73 5b 34 5d 2c 20 61 72 72 29 3b 0a 20  airs[4], arr);. 
24c0: 20 20 20 20 20 61 72 72 5b 35 5d 20 3d 20 5f 72       arr[5] = _r
24d0: 65 77 72 69 74 65 28 70 61 69 72 2e 6c 65 6e 67  ewrite(pair.leng
24e0: 74 68 20 3e 20 33 20 3f 20 2f 5c 5c 28 7b 7c 7d  th > 3 ? /\\({|}
24f0: 29 2f 67 20 3a 20 5f 70 61 69 72 73 5b 35 5d 2c  )/g : _pairs[5],
2500: 20 61 72 72 29 3b 0a 20 20 20 20 20 20 61 72 72   arr);.      arr
2510: 5b 36 5d 20 3d 20 5f 72 65 77 72 69 74 65 28 5f  [6] = _rewrite(_
2520: 70 61 69 72 73 5b 36 5d 2c 20 61 72 72 29 3b 0a  pairs[6], arr);.
2530: 20 20 20 20 20 20 61 72 72 5b 37 5d 20 3d 20 52        arr[7] = R
2540: 65 67 45 78 70 28 27 5c 5c 5c 5c 28 27 20 2b 20  egExp('\\\\(' + 
2550: 61 72 72 5b 33 5d 20 2b 20 27 29 7c 28 5b 5b 28  arr[3] + ')|([[(
2560: 7b 5d 29 7c 28 27 20 2b 20 61 72 72 5b 33 5d 20  {])|(' + arr[3] 
2570: 2b 20 27 29 7c 27 20 2b 20 53 5f 51 42 4c 4f 43  + ')|' + S_QBLOC
2580: 4b 32 2c 20 52 45 47 4c 4f 42 29 3b 0a 20 20 20  K2, REGLOB);.   
2590: 20 20 20 61 72 72 5b 38 5d 20 3d 20 70 61 69 72     arr[8] = pair
25a0: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 61  ;.      return a
25b0: 72 72 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75  rr.    }..    fu
25c0: 6e 63 74 69 6f 6e 20 5f 62 72 61 63 6b 65 74 73  nction _brackets
25d0: 20 28 72 65 4f 72 49 64 78 29 20 7b 0a 20 20 20   (reOrIdx) {.   
25e0: 20 20 20 72 65 74 75 72 6e 20 72 65 4f 72 49 64     return reOrId
25f0: 78 20 69 6e 73 74 61 6e 63 65 6f 66 20 52 65 67  x instanceof Reg
2600: 45 78 70 20 3f 20 5f 72 65 67 65 78 28 72 65 4f  Exp ? _regex(reO
2610: 72 49 64 78 29 20 3a 20 5f 63 61 63 68 65 5b 72  rIdx) : _cache[r
2620: 65 4f 72 49 64 78 5d 0a 20 20 20 20 7d 0a 0a 20  eOrIdx].    }.. 
2630: 20 20 20 5f 62 72 61 63 6b 65 74 73 2e 73 70 6c     _brackets.spl
2640: 69 74 20 3d 20 66 75 6e 63 74 69 6f 6e 20 73 70  it = function sp
2650: 6c 69 74 20 28 73 74 72 2c 20 74 6d 70 6c 2c 20  lit (str, tmpl, 
2660: 5f 62 70 29 20 7b 0a 20 20 20 20 20 20 2f 2f 20  _bp) {.      // 
2670: 69 73 74 61 6e 62 75 6c 20 69 67 6e 6f 72 65 20  istanbul ignore 
2680: 6e 65 78 74 3a 20 5f 62 70 20 69 73 20 66 6f 72  next: _bp is for
2690: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 0a 20 20   the compiler.  
26a0: 20 20 20 20 69 66 20 28 21 5f 62 70 29 20 7b 20      if (!_bp) { 
26b0: 5f 62 70 20 3d 20 5f 63 61 63 68 65 3b 20 7d 0a  _bp = _cache; }.
26c0: 0a 20 20 20 20 20 20 76 61 72 0a 20 20 20 20 20  .      var.     
26d0: 20 20 20 70 61 72 74 73 20 3d 20 5b 5d 2c 0a 20     parts = [],. 
26e0: 20 20 20 20 20 20 20 6d 61 74 63 68 2c 0a 20 20         match,.  
26f0: 20 20 20 20 20 20 69 73 65 78 70 72 2c 0a 20 20        isexpr,.  
2700: 20 20 20 20 20 20 73 74 61 72 74 2c 0a 20 20 20        start,.   
2710: 20 20 20 20 20 70 6f 73 2c 0a 20 20 20 20 20 20       pos,.      
2720: 20 20 72 65 20 3d 20 5f 62 70 5b 36 5d 3b 0a 0a    re = _bp[6];..
2730: 20 20 20 20 20 20 76 61 72 20 71 62 6c 6f 63 6b        var qblock
2740: 73 20 3d 20 5b 5d 3b 0a 20 20 20 20 20 20 76 61  s = [];.      va
2750: 72 20 70 72 65 76 53 74 72 20 3d 20 27 27 3b 0a  r prevStr = '';.
2760: 20 20 20 20 20 20 76 61 72 20 6d 61 72 6b 2c 20        var mark, 
2770: 6c 61 73 74 49 6e 64 65 78 3b 0a 0a 20 20 20 20  lastIndex;..    
2780: 20 20 69 73 65 78 70 72 20 3d 20 73 74 61 72 74    isexpr = start
2790: 20 3d 20 72 65 2e 6c 61 73 74 49 6e 64 65 78 20   = re.lastIndex 
27a0: 3d 20 30 3b 0a 0a 20 20 20 20 20 20 77 68 69 6c  = 0;..      whil
27b0: 65 20 28 28 6d 61 74 63 68 20 3d 20 72 65 2e 65  e ((match = re.e
27c0: 78 65 63 28 73 74 72 29 29 29 20 7b 0a 0a 20 20  xec(str))) {..  
27d0: 20 20 20 20 20 20 6c 61 73 74 49 6e 64 65 78 20        lastIndex 
27e0: 3d 20 72 65 2e 6c 61 73 74 49 6e 64 65 78 3b 0a  = re.lastIndex;.
27f0: 20 20 20 20 20 20 20 20 70 6f 73 20 3d 20 6d 61          pos = ma
2800: 74 63 68 2e 69 6e 64 65 78 3b 0a 0a 20 20 20 20  tch.index;..    
2810: 20 20 20 20 69 66 20 28 69 73 65 78 70 72 29 20      if (isexpr) 
2820: 7b 0a 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if 
2830: 28 6d 61 74 63 68 5b 32 5d 29 20 7b 0a 0a 20 20  (match[2]) {..  
2840: 20 20 20 20 20 20 20 20 20 20 76 61 72 20 63 68            var ch
2850: 20 3d 20 6d 61 74 63 68 5b 32 5d 3b 0a 20 20 20   = match[2];.   
2860: 20 20 20 20 20 20 20 20 20 76 61 72 20 72 65 63           var rec
2870: 68 20 3d 20 46 49 4e 44 42 52 41 43 45 53 5b 63  h = FINDBRACES[c
2880: 68 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  h];.            
2890: 76 61 72 20 69 78 20 3d 20 31 3b 0a 0a 20 20 20  var ix = 1;..   
28a0: 20 20 20 20 20 20 20 20 20 72 65 63 68 2e 6c 61           rech.la
28b0: 73 74 49 6e 64 65 78 20 3d 20 6c 61 73 74 49 6e  stIndex = lastIn
28c0: 64 65 78 3b 0a 20 20 20 20 20 20 20 20 20 20 20  dex;.           
28d0: 20 77 68 69 6c 65 20 28 28 6d 61 74 63 68 20 3d   while ((match =
28e0: 20 72 65 63 68 2e 65 78 65 63 28 73 74 72 29 29   rech.exec(str))
28f0: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
2900: 20 20 69 66 20 28 6d 61 74 63 68 5b 31 5d 29 20    if (match[1]) 
2910: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
2920: 20 20 69 66 20 28 6d 61 74 63 68 5b 31 5d 20 3d    if (match[1] =
2930: 3d 3d 20 63 68 29 20 7b 20 2b 2b 69 78 3b 20 7d  == ch) { ++ix; }
2940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2950: 20 65 6c 73 65 20 69 66 20 28 21 2d 2d 69 78 29   else if (!--ix)
2960: 20 7b 20 62 72 65 61 6b 20 7d 0a 20 20 20 20 20   { break }.     
2970: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else 
2980: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
2990: 20 20 72 65 63 68 2e 6c 61 73 74 49 6e 64 65 78    rech.lastIndex
29a0: 20 3d 20 70 75 73 68 51 42 6c 6f 63 6b 28 6d 61   = pushQBlock(ma
29b0: 74 63 68 2e 69 6e 64 65 78 2c 20 72 65 63 68 2e  tch.index, rech.
29c0: 6c 61 73 74 49 6e 64 65 78 2c 20 6d 61 74 63 68  lastIndex, match
29d0: 5b 32 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  [2]);.          
29e0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
29f0: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
2a00: 72 65 2e 6c 61 73 74 49 6e 64 65 78 20 3d 20 69  re.lastIndex = i
2a10: 78 20 3f 20 73 74 72 2e 6c 65 6e 67 74 68 20 3a  x ? str.length :
2a20: 20 72 65 63 68 2e 6c 61 73 74 49 6e 64 65 78 3b   rech.lastIndex;
2a30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
2a40: 74 69 6e 75 65 0a 20 20 20 20 20 20 20 20 20 20  tinue.          
2a50: 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  }..          if 
2a60: 28 21 6d 61 74 63 68 5b 33 5d 29 20 7b 0a 20 20  (!match[3]) {.  
2a70: 20 20 20 20 20 20 20 20 20 20 72 65 2e 6c 61 73            re.las
2a80: 74 49 6e 64 65 78 20 3d 20 70 75 73 68 51 42 6c  tIndex = pushQBl
2a90: 6f 63 6b 28 70 6f 73 2c 20 6c 61 73 74 49 6e 64  ock(pos, lastInd
2aa0: 65 78 2c 20 6d 61 74 63 68 5b 34 5d 29 3b 0a 20  ex, match[4]);. 
2ab0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
2ac0: 6e 75 65 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  nue.          }.
2ad0: 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
2ae0: 20 20 20 69 66 20 28 21 6d 61 74 63 68 5b 31 5d     if (!match[1]
2af0: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 75 6e  ) {.          un
2b00: 65 73 63 61 70 65 53 74 72 28 73 74 72 2e 73 6c  escapeStr(str.sl
2b10: 69 63 65 28 73 74 61 72 74 2c 20 70 6f 73 29 29  ice(start, pos))
2b20: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 74 61 72  ;.          star
2b30: 74 20 3d 20 72 65 2e 6c 61 73 74 49 6e 64 65 78  t = re.lastIndex
2b40: 3b 0a 20 20 20 20 20 20 20 20 20 20 72 65 20 3d  ;.          re =
2b50: 20 5f 62 70 5b 36 20 2b 20 28 69 73 65 78 70 72   _bp[6 + (isexpr
2b60: 20 5e 3d 20 31 29 5d 3b 0a 20 20 20 20 20 20 20   ^= 1)];.       
2b70: 20 20 20 72 65 2e 6c 61 73 74 49 6e 64 65 78 20     re.lastIndex 
2b80: 3d 20 73 74 61 72 74 3b 0a 20 20 20 20 20 20 20  = start;.       
2b90: 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20   }.      }..    
2ba0: 20 20 69 66 20 28 73 74 72 20 26 26 20 73 74 61    if (str && sta
2bb0: 72 74 20 3c 20 73 74 72 2e 6c 65 6e 67 74 68 29  rt < str.length)
2bc0: 20 7b 0a 20 20 20 20 20 20 20 20 75 6e 65 73 63   {.        unesc
2bd0: 61 70 65 53 74 72 28 73 74 72 2e 73 6c 69 63 65  apeStr(str.slice
2be0: 28 73 74 61 72 74 29 29 3b 0a 20 20 20 20 20 20  (start));.      
2bf0: 7d 0a 0a 20 20 20 20 20 20 70 61 72 74 73 2e 71  }..      parts.q
2c00: 62 6c 6f 63 6b 73 20 3d 20 71 62 6c 6f 63 6b 73  blocks = qblocks
2c10: 3b 0a 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
2c20: 70 61 72 74 73 0a 0a 20 20 20 20 20 20 66 75 6e  parts..      fun
2c30: 63 74 69 6f 6e 20 75 6e 65 73 63 61 70 65 53 74  ction unescapeSt
2c40: 72 20 28 73 29 20 7b 0a 20 20 20 20 20 20 20 20  r (s) {.        
2c50: 69 66 20 28 70 72 65 76 53 74 72 29 20 7b 0a 20  if (prevStr) {. 
2c60: 20 20 20 20 20 20 20 20 20 73 20 3d 20 70 72 65           s = pre
2c70: 76 53 74 72 20 2b 20 73 3b 0a 20 20 20 20 20 20  vStr + s;.      
2c80: 20 20 20 20 70 72 65 76 53 74 72 20 3d 20 27 27      prevStr = ''
2c90: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
2ca0: 20 20 20 20 69 66 20 28 74 6d 70 6c 20 7c 7c 20      if (tmpl || 
2cb0: 69 73 65 78 70 72 29 20 7b 0a 20 20 20 20 20 20  isexpr) {.      
2cc0: 20 20 20 20 70 61 72 74 73 2e 70 75 73 68 28 73      parts.push(s
2cd0: 20 26 26 20 73 2e 72 65 70 6c 61 63 65 28 5f 62   && s.replace(_b
2ce0: 70 5b 35 5d 2c 20 27 24 31 27 29 29 3b 0a 20 20  p[5], '$1'));.  
2cf0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20        } else {. 
2d00: 20 20 20 20 20 20 20 20 20 70 61 72 74 73 2e 70           parts.p
2d10: 75 73 68 28 73 29 3b 0a 20 20 20 20 20 20 20 20  ush(s);.        
2d20: 7d 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  }.      }..     
2d30: 20 66 75 6e 63 74 69 6f 6e 20 70 75 73 68 51 42   function pushQB
2d40: 6c 6f 63 6b 28 5f 70 6f 73 2c 20 5f 6c 61 73 74  lock(_pos, _last
2d50: 49 6e 64 65 78 2c 20 73 6c 61 73 68 29 20 7b 20  Index, slash) { 
2d60: 2f 2f 65 73 6c 69 6e 74 2d 64 69 73 61 62 6c 65  //eslint-disable
2d70: 2d 6c 69 6e 65 0a 20 20 20 20 20 20 20 20 69 66  -line.        if
2d80: 20 28 73 6c 61 73 68 29 20 7b 0a 20 20 20 20 20   (slash) {.     
2d90: 20 20 20 20 20 5f 6c 61 73 74 49 6e 64 65 78 20       _lastIndex 
2da0: 3d 20 73 6b 69 70 52 65 67 65 78 28 73 74 72 2c  = skipRegex(str,
2db0: 20 5f 70 6f 73 29 3b 0a 20 20 20 20 20 20 20 20   _pos);.        
2dc0: 7d 0a 0a 20 20 20 20 20 20 20 20 69 66 20 28 74  }..        if (t
2dd0: 6d 70 6c 20 26 26 20 5f 6c 61 73 74 49 6e 64 65  mpl && _lastInde
2de0: 78 20 3e 20 5f 70 6f 73 20 2b 20 32 29 20 7b 0a  x > _pos + 2) {.
2df0: 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 20 3d            mark =
2e00: 20 27 5c 75 32 30 35 37 27 20 2b 20 71 62 6c 6f   '\u2057' + qblo
2e10: 63 6b 73 2e 6c 65 6e 67 74 68 20 2b 20 27 7e 27  cks.length + '~'
2e20: 3b 0a 20 20 20 20 20 20 20 20 20 20 71 62 6c 6f  ;.          qblo
2e30: 63 6b 73 2e 70 75 73 68 28 73 74 72 2e 73 6c 69  cks.push(str.sli
2e40: 63 65 28 5f 70 6f 73 2c 20 5f 6c 61 73 74 49 6e  ce(_pos, _lastIn
2e50: 64 65 78 29 29 3b 0a 20 20 20 20 20 20 20 20 20  dex));.         
2e60: 20 70 72 65 76 53 74 72 20 2b 3d 20 73 74 72 2e   prevStr += str.
2e70: 73 6c 69 63 65 28 73 74 61 72 74 2c 20 5f 70 6f  slice(start, _po
2e80: 73 29 20 2b 20 6d 61 72 6b 3b 0a 20 20 20 20 20  s) + mark;.     
2e90: 20 20 20 20 20 73 74 61 72 74 20 3d 20 5f 6c 61       start = _la
2ea0: 73 74 49 6e 64 65 78 3b 0a 20 20 20 20 20 20 20  stIndex;.       
2eb0: 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72   }.        retur
2ec0: 6e 20 5f 6c 61 73 74 49 6e 64 65 78 0a 20 20 20  n _lastIndex.   
2ed0: 20 20 20 7d 0a 20 20 20 20 7d 3b 0a 0a 20 20 20     }.    };..   
2ee0: 20 5f 62 72 61 63 6b 65 74 73 2e 68 61 73 45 78   _brackets.hasEx
2ef0: 70 72 20 3d 20 66 75 6e 63 74 69 6f 6e 20 68 61  pr = function ha
2f00: 73 45 78 70 72 20 28 73 74 72 29 20 7b 0a 20 20  sExpr (str) {.  
2f10: 20 20 20 20 72 65 74 75 72 6e 20 5f 63 61 63 68      return _cach
2f20: 65 5b 34 5d 2e 74 65 73 74 28 73 74 72 29 0a 20  e[4].test(str). 
2f30: 20 20 20 7d 3b 0a 0a 20 20 20 20 5f 62 72 61 63     };..    _brac
2f40: 6b 65 74 73 2e 6c 6f 6f 70 4b 65 79 73 20 3d 20  kets.loopKeys = 
2f50: 66 75 6e 63 74 69 6f 6e 20 6c 6f 6f 70 4b 65 79  function loopKey
2f60: 73 20 28 65 78 70 72 29 20 7b 0a 20 20 20 20 20  s (expr) {.     
2f70: 20 76 61 72 20 6d 20 3d 20 65 78 70 72 2e 6d 61   var m = expr.ma
2f80: 74 63 68 28 5f 63 61 63 68 65 5b 39 5d 29 3b 0a  tch(_cache[9]);.
2f90: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 0a  .      return m.
2fa0: 20 20 20 20 20 20 20 20 3f 20 7b 20 6b 65 79 3a          ? { key:
2fb0: 20 6d 5b 31 5d 2c 20 70 6f 73 3a 20 6d 5b 32 5d   m[1], pos: m[2]
2fc0: 2c 20 76 61 6c 3a 20 5f 63 61 63 68 65 5b 30 5d  , val: _cache[0]
2fd0: 20 2b 20 6d 5b 33 5d 2e 74 72 69 6d 28 29 20 2b   + m[3].trim() +
2fe0: 20 5f 63 61 63 68 65 5b 31 5d 20 7d 0a 20 20 20   _cache[1] }.   
2ff0: 20 20 20 20 20 3a 20 7b 20 76 61 6c 3a 20 65 78       : { val: ex
3000: 70 72 2e 74 72 69 6d 28 29 20 7d 0a 20 20 20 20  pr.trim() }.    
3010: 7d 3b 0a 0a 20 20 20 20 5f 62 72 61 63 6b 65 74  };..    _bracket
3020: 73 2e 61 72 72 61 79 20 3d 20 66 75 6e 63 74 69  s.array = functi
3030: 6f 6e 20 61 72 72 61 79 20 28 70 61 69 72 29 20  on array (pair) 
3040: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 70  {.      return p
3050: 61 69 72 20 3f 20 5f 63 72 65 61 74 65 28 70 61  air ? _create(pa
3060: 69 72 29 20 3a 20 5f 63 61 63 68 65 0a 20 20 20  ir) : _cache.   
3070: 20 7d 3b 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f   };..    functio
3080: 6e 20 5f 72 65 73 65 74 20 28 70 61 69 72 29 20  n _reset (pair) 
3090: 7b 0a 20 20 20 20 20 20 69 66 20 28 28 70 61 69  {.      if ((pai
30a0: 72 20 7c 7c 20 28 70 61 69 72 20 3d 20 44 45 46  r || (pair = DEF
30b0: 41 55 4c 54 29 29 20 21 3d 3d 20 5f 63 61 63 68  AULT)) !== _cach
30c0: 65 5b 38 5d 29 20 7b 0a 20 20 20 20 20 20 20 20  e[8]) {.        
30d0: 5f 63 61 63 68 65 20 3d 20 5f 63 72 65 61 74 65  _cache = _create
30e0: 28 70 61 69 72 29 3b 0a 20 20 20 20 20 20 20 20  (pair);.        
30f0: 5f 72 65 67 65 78 20 3d 20 70 61 69 72 20 3d 3d  _regex = pair ==
3100: 3d 20 44 45 46 41 55 4c 54 20 3f 20 5f 6c 6f 6f  = DEFAULT ? _loo
3110: 70 62 61 63 6b 20 3a 20 5f 72 65 77 72 69 74 65  pback : _rewrite
3120: 3b 0a 20 20 20 20 20 20 20 20 5f 63 61 63 68 65  ;.        _cache
3130: 5b 39 5d 20 3d 20 5f 72 65 67 65 78 28 5f 70 61  [9] = _regex(_pa
3140: 69 72 73 5b 39 5d 29 3b 0a 20 20 20 20 20 20 7d  irs[9]);.      }
3150: 0a 20 20 20 20 20 20 63 61 63 68 65 64 42 72 61  .      cachedBra
3160: 63 6b 65 74 73 20 3d 20 70 61 69 72 3b 0a 20 20  ckets = pair;.  
3170: 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f    }..    functio
3180: 6e 20 5f 73 65 74 53 65 74 74 69 6e 67 73 20 28  n _setSettings (
3190: 6f 29 20 7b 0a 20 20 20 20 20 20 76 61 72 20 62  o) {.      var b
31a0: 3b 0a 0a 20 20 20 20 20 20 6f 20 3d 20 6f 20 7c  ;..      o = o |
31b0: 7c 20 7b 7d 3b 0a 20 20 20 20 20 20 62 20 3d 20  | {};.      b = 
31c0: 6f 2e 62 72 61 63 6b 65 74 73 3b 0a 20 20 20 20  o.brackets;.    
31d0: 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50    Object.defineP
31e0: 72 6f 70 65 72 74 79 28 6f 2c 20 27 62 72 61 63  roperty(o, 'brac
31f0: 6b 65 74 73 27 2c 20 7b 0a 20 20 20 20 20 20 20  kets', {.       
3200: 20 73 65 74 3a 20 5f 72 65 73 65 74 2c 0a 20 20   set: _reset,.  
3210: 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74        get: funct
3220: 69 6f 6e 20 28 29 20 7b 20 72 65 74 75 72 6e 20  ion () { return 
3230: 63 61 63 68 65 64 42 72 61 63 6b 65 74 73 20 7d  cachedBrackets }
3240: 2c 0a 20 20 20 20 20 20 20 20 65 6e 75 6d 65 72  ,.        enumer
3250: 61 62 6c 65 3a 20 74 72 75 65 0a 20 20 20 20 20  able: true.     
3260: 20 7d 29 3b 0a 20 20 20 20 20 20 5f 73 65 74 74   });.      _sett
3270: 69 6e 67 73 20 3d 20 6f 3b 0a 20 20 20 20 20 20  ings = o;.      
3280: 5f 72 65 73 65 74 28 62 29 3b 0a 20 20 20 20 7d  _reset(b);.    }
3290: 0a 0a 20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66  ..    Object.def
32a0: 69 6e 65 50 72 6f 70 65 72 74 79 28 5f 62 72 61  ineProperty(_bra
32b0: 63 6b 65 74 73 2c 20 27 73 65 74 74 69 6e 67 73  ckets, 'settings
32c0: 27 2c 20 7b 0a 20 20 20 20 20 20 73 65 74 3a 20  ', {.      set: 
32d0: 5f 73 65 74 53 65 74 74 69 6e 67 73 2c 0a 20 20  _setSettings,.  
32e0: 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f      get: functio
32f0: 6e 20 28 29 20 7b 20 72 65 74 75 72 6e 20 5f 73  n () { return _s
3300: 65 74 74 69 6e 67 73 20 7d 0a 20 20 20 20 7d 29  ettings }.    })
3310: 3b 0a 0a 20 20 20 20 2f 2a 20 69 73 74 61 6e 62  ;..    /* istanb
3320: 75 6c 20 69 67 6e 6f 72 65 20 6e 65 78 74 3a 20  ul ignore next: 
3330: 69 6e 20 74 68 65 20 62 72 6f 77 73 65 72 20 72  in the browser r
3340: 69 6f 74 20 69 73 20 61 6c 77 61 79 73 20 69 6e  iot is always in
3350: 20 74 68 65 20 73 63 6f 70 65 20 2a 2f 0a 20 20   the scope */.  
3360: 20 20 5f 62 72 61 63 6b 65 74 73 2e 73 65 74 74    _brackets.sett
3370: 69 6e 67 73 20 3d 20 74 79 70 65 6f 66 20 72 69  ings = typeof ri
3380: 6f 74 20 21 3d 3d 20 27 75 6e 64 65 66 69 6e 65  ot !== 'undefine
3390: 64 27 20 26 26 20 72 69 6f 74 2e 73 65 74 74 69  d' && riot.setti
33a0: 6e 67 73 20 7c 7c 20 7b 7d 3b 0a 20 20 20 20 5f  ngs || {};.    _
33b0: 62 72 61 63 6b 65 74 73 2e 73 65 74 20 3d 20 5f  brackets.set = _
33c0: 72 65 73 65 74 3b 0a 20 20 20 20 5f 62 72 61 63  reset;.    _brac
33d0: 6b 65 74 73 2e 73 6b 69 70 52 65 67 65 78 20 3d  kets.skipRegex =
33e0: 20 73 6b 69 70 52 65 67 65 78 3b 0a 0a 20 20 20   skipRegex;..   
33f0: 20 5f 62 72 61 63 6b 65 74 73 2e 52 5f 53 54 52   _brackets.R_STR
3400: 49 4e 47 53 20 3d 20 52 5f 53 54 52 49 4e 47 53  INGS = R_STRINGS
3410: 3b 0a 20 20 20 20 5f 62 72 61 63 6b 65 74 73 2e  ;.    _brackets.
3420: 52 5f 4d 4c 43 4f 4d 4d 53 20 3d 20 52 5f 4d 4c  R_MLCOMMS = R_ML
3430: 43 4f 4d 4d 53 3b 0a 20 20 20 20 5f 62 72 61 63  COMMS;.    _brac
3440: 6b 65 74 73 2e 53 5f 51 42 4c 4f 43 4b 53 20 3d  kets.S_QBLOCKS =
3450: 20 53 5f 51 42 4c 4f 43 4b 53 3b 0a 20 20 20 20   S_QBLOCKS;.    
3460: 5f 62 72 61 63 6b 65 74 73 2e 53 5f 51 42 4c 4f  _brackets.S_QBLO
3470: 43 4b 32 20 3d 20 53 5f 51 42 4c 4f 43 4b 32 3b  CK2 = S_QBLOCK2;
3480: 0a 0a 20 20 20 20 72 65 74 75 72 6e 20 5f 62 72  ..    return _br
3490: 61 63 6b 65 74 73 0a 0a 20 20 7d 29 28 29 3b 0a  ackets..  })();.
34a0: 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 40 6d 6f 64  .  /**.   * @mod
34b0: 75 6c 65 20 74 6d 70 6c 0a 20 20 20 2a 0a 20 20  ule tmpl.   *.  
34c0: 20 2a 20 74 6d 70 6c 20 20 20 20 20 20 20 20 20   * tmpl         
34d0: 20 2d 20 52 6f 6f 74 20 66 75 6e 63 74 69 6f 6e   - Root function
34e0: 2c 20 72 65 74 75 72 6e 73 20 74 68 65 20 74 65  , returns the te
34f0: 6d 70 6c 61 74 65 20 76 61 6c 75 65 2c 20 72 65  mplate value, re
3500: 6e 64 65 72 20 77 69 74 68 20 64 61 74 61 0a 20  nder with data. 
3510: 20 20 2a 20 74 6d 70 6c 2e 68 61 73 45 78 70 72    * tmpl.hasExpr
3520: 20 20 2d 20 54 65 73 74 20 74 68 65 20 65 78 69    - Test the exi
3530: 73 74 65 6e 63 65 20 6f 66 20 61 20 65 78 70 72  stence of a expr
3540: 65 73 73 69 6f 6e 20 69 6e 73 69 64 65 20 61 20  ession inside a 
3550: 73 74 72 69 6e 67 0a 20 20 20 2a 20 74 6d 70 6c  string.   * tmpl
3560: 2e 6c 6f 6f 70 4b 65 79 73 20 2d 20 47 65 74 20  .loopKeys - Get 
3570: 74 68 65 20 6b 65 79 73 20 66 6f 72 20 61 6e 20  the keys for an 
3580: 27 65 61 63 68 27 20 6c 6f 6f 70 20 28 75 73 65  'each' loop (use
3590: 64 20 62 79 20 60 5f 65 61 63 68 60 29 0a 20 20  d by `_each`).  
35a0: 20 2a 2f 0a 0a 20 20 2f 2a 20 69 73 74 61 6e 62   */..  /* istanb
35b0: 75 6c 20 69 67 6e 6f 72 65 20 6e 65 78 74 20 2a  ul ignore next *
35c0: 2f 0a 20 20 76 61 72 20 74 6d 70 6c 20 3d 20 28  /.  var tmpl = (
35d0: 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 0a 20  function () {.. 
35e0: 20 20 20 76 61 72 20 5f 63 61 63 68 65 20 3d 20     var _cache = 
35f0: 7b 7d 3b 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f  {};..    functio
3600: 6e 20 5f 74 6d 70 6c 20 28 73 74 72 2c 20 64 61  n _tmpl (str, da
3610: 74 61 29 20 7b 0a 20 20 20 20 20 20 69 66 20 28  ta) {.      if (
3620: 21 73 74 72 29 20 7b 20 72 65 74 75 72 6e 20 73  !str) { return s
3630: 74 72 20 7d 0a 0a 20 20 20 20 20 20 72 65 74 75  tr }..      retu
3640: 72 6e 20 28 5f 63 61 63 68 65 5b 73 74 72 5d 20  rn (_cache[str] 
3650: 7c 7c 20 28 5f 63 61 63 68 65 5b 73 74 72 5d 20  || (_cache[str] 
3660: 3d 20 5f 63 72 65 61 74 65 28 73 74 72 29 29 29  = _create(str)))
3670: 2e 63 61 6c 6c 28 0a 20 20 20 20 20 20 20 20 64  .call(.        d
3680: 61 74 61 2c 20 5f 6c 6f 67 45 72 72 2e 62 69 6e  ata, _logErr.bin
3690: 64 28 7b 0a 20 20 20 20 20 20 20 20 20 20 64 61  d({.          da
36a0: 74 61 3a 20 64 61 74 61 2c 0a 20 20 20 20 20 20  ta: data,.      
36b0: 20 20 20 20 74 6d 70 6c 3a 20 73 74 72 0a 20 20      tmpl: str.  
36c0: 20 20 20 20 20 20 7d 29 0a 20 20 20 20 20 20 29        }).      )
36d0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 5f 74 6d 70  .    }..    _tmp
36e0: 6c 2e 68 61 73 45 78 70 72 20 3d 20 62 72 61 63  l.hasExpr = brac
36f0: 6b 65 74 73 2e 68 61 73 45 78 70 72 3b 0a 0a 20  kets.hasExpr;.. 
3700: 20 20 20 5f 74 6d 70 6c 2e 6c 6f 6f 70 4b 65 79     _tmpl.loopKey
3710: 73 20 3d 20 62 72 61 63 6b 65 74 73 2e 6c 6f 6f  s = brackets.loo
3720: 70 4b 65 79 73 3b 0a 0a 20 20 20 20 2f 2f 20 69  pKeys;..    // i
3730: 73 74 61 6e 62 75 6c 20 69 67 6e 6f 72 65 20 6e  stanbul ignore n
3740: 65 78 74 0a 20 20 20 20 5f 74 6d 70 6c 2e 63 6c  ext.    _tmpl.cl
3750: 65 61 72 43 61 63 68 65 20 3d 20 66 75 6e 63 74  earCache = funct
3760: 69 6f 6e 20 28 29 20 7b 20 5f 63 61 63 68 65 20  ion () { _cache 
3770: 3d 20 7b 7d 3b 20 7d 3b 0a 0a 20 20 20 20 5f 74  = {}; };..    _t
3780: 6d 70 6c 2e 65 72 72 6f 72 48 61 6e 64 6c 65 72  mpl.errorHandler
3790: 20 3d 20 6e 75 6c 6c 3b 0a 0a 20 20 20 20 66 75   = null;..    fu
37a0: 6e 63 74 69 6f 6e 20 5f 6c 6f 67 45 72 72 20 28  nction _logErr (
37b0: 65 72 72 2c 20 63 74 78 29 20 7b 0a 0a 20 20 20  err, ctx) {..   
37c0: 20 20 20 65 72 72 2e 72 69 6f 74 44 61 74 61 20     err.riotData 
37d0: 3d 20 7b 0a 20 20 20 20 20 20 20 20 74 61 67 4e  = {.        tagN
37e0: 61 6d 65 3a 20 63 74 78 20 26 26 20 63 74 78 2e  ame: ctx && ctx.
37f0: 5f 5f 20 26 26 20 63 74 78 2e 5f 5f 2e 74 61 67  __ && ctx.__.tag
3800: 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 5f 72  Name,.        _r
3810: 69 6f 74 5f 69 64 3a 20 63 74 78 20 26 26 20 63  iot_id: ctx && c
3820: 74 78 2e 5f 72 69 6f 74 5f 69 64 20 20 2f 2f 65  tx._riot_id  //e
3830: 73 6c 69 6e 74 2d 64 69 73 61 62 6c 65 2d 6c 69  slint-disable-li
3840: 6e 65 20 63 61 6d 65 6c 63 61 73 65 0a 20 20 20  ne camelcase.   
3850: 20 20 20 7d 3b 0a 0a 20 20 20 20 20 20 69 66 20     };..      if 
3860: 28 5f 74 6d 70 6c 2e 65 72 72 6f 72 48 61 6e 64  (_tmpl.errorHand
3870: 6c 65 72 29 20 7b 20 5f 74 6d 70 6c 2e 65 72 72  ler) { _tmpl.err
3880: 6f 72 48 61 6e 64 6c 65 72 28 65 72 72 29 3b 20  orHandler(err); 
3890: 7d 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 20  }.      else if 
38a0: 28 0a 20 20 20 20 20 20 20 20 74 79 70 65 6f 66  (.        typeof
38b0: 20 63 6f 6e 73 6f 6c 65 20 21 3d 3d 20 27 75 6e   console !== 'un
38c0: 64 65 66 69 6e 65 64 27 20 26 26 0a 20 20 20 20  defined' &&.    
38d0: 20 20 20 20 74 79 70 65 6f 66 20 63 6f 6e 73 6f      typeof conso
38e0: 6c 65 2e 65 72 72 6f 72 20 3d 3d 3d 20 27 66 75  le.error === 'fu
38f0: 6e 63 74 69 6f 6e 27 0a 20 20 20 20 20 20 29 20  nction'.      ) 
3900: 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 6f 6c  {.        consol
3910: 65 2e 65 72 72 6f 72 28 65 72 72 2e 6d 65 73 73  e.error(err.mess
3920: 61 67 65 29 3b 0a 20 20 20 20 20 20 20 20 63 6f  age);.        co
3930: 6e 73 6f 6c 65 2e 6c 6f 67 28 27 3c 25 73 3e 20  nsole.log('<%s> 
3940: 25 73 27 2c 20 65 72 72 2e 72 69 6f 74 44 61 74  %s', err.riotDat
3950: 61 2e 74 61 67 4e 61 6d 65 20 7c 7c 20 27 55 6e  a.tagName || 'Un
3960: 6b 6e 6f 77 6e 20 74 61 67 27 2c 20 74 68 69 73  known tag', this
3970: 2e 74 6d 70 6c 29 3b 20 2f 2f 20 65 73 6c 69 6e  .tmpl); // eslin
3980: 74 2d 64 69 73 61 62 6c 65 2d 6c 69 6e 65 0a 20  t-disable-line. 
3990: 20 20 20 20 20 20 20 63 6f 6e 73 6f 6c 65 2e 6c         console.l
39a0: 6f 67 28 74 68 69 73 2e 64 61 74 61 29 3b 20 2f  og(this.data); /
39b0: 2f 20 65 73 6c 69 6e 74 2d 64 69 73 61 62 6c 65  / eslint-disable
39c0: 2d 6c 69 6e 65 0a 20 20 20 20 20 20 7d 0a 20 20  -line.      }.  
39d0: 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f    }..    functio
39e0: 6e 20 5f 63 72 65 61 74 65 20 28 73 74 72 29 20  n _create (str) 
39f0: 7b 0a 20 20 20 20 20 20 76 61 72 20 65 78 70 72  {.      var expr
3a00: 20 3d 20 5f 67 65 74 54 6d 70 6c 28 73 74 72 29   = _getTmpl(str)
3a10: 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 65 78 70  ;..      if (exp
3a20: 72 2e 73 6c 69 63 65 28 30 2c 20 31 31 29 20 21  r.slice(0, 11) !
3a30: 3d 3d 20 27 74 72 79 7b 72 65 74 75 72 6e 20 27  == 'try{return '
3a40: 29 20 7b 20 65 78 70 72 20 3d 20 27 72 65 74 75  ) { expr = 'retu
3a50: 72 6e 20 27 20 2b 20 65 78 70 72 3b 20 7d 0a 0a  rn ' + expr; }..
3a60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
3a70: 20 46 75 6e 63 74 69 6f 6e 28 27 45 27 2c 20 65   Function('E', e
3a80: 78 70 72 20 2b 20 27 3b 27 29 20 20 20 20 2f 2f  xpr + ';')    //
3a90: 20 65 73 6c 69 6e 74 2d 64 69 73 61 62 6c 65 2d   eslint-disable-
3aa0: 6c 69 6e 65 20 6e 6f 2d 6e 65 77 2d 66 75 6e 63  line no-new-func
3ab0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 76 61 72 20  .    }..    var 
3ac0: 52 45 5f 44 51 55 4f 54 45 20 3d 20 2f 5c 75 32  RE_DQUOTE = /\u2
3ad0: 30 35 37 2f 67 3b 0a 20 20 20 20 76 61 72 20 52  057/g;.    var R
3ae0: 45 5f 51 42 4d 41 52 4b 20 3d 20 2f 5c 75 32 30  E_QBMARK = /\u20
3af0: 35 37 28 5c 64 2b 29 7e 2f 67 3b 0a 0a 20 20 20  57(\d+)~/g;..   
3b00: 20 66 75 6e 63 74 69 6f 6e 20 5f 67 65 74 54 6d   function _getTm
3b10: 70 6c 20 28 73 74 72 29 20 7b 0a 20 20 20 20 20  pl (str) {.     
3b20: 20 76 61 72 20 70 61 72 74 73 20 3d 20 62 72 61   var parts = bra
3b30: 63 6b 65 74 73 2e 73 70 6c 69 74 28 73 74 72 2e  ckets.split(str.
3b40: 72 65 70 6c 61 63 65 28 52 45 5f 44 51 55 4f 54  replace(RE_DQUOT
3b50: 45 2c 20 27 22 27 29 2c 20 31 29 3b 0a 20 20 20  E, '"'), 1);.   
3b60: 20 20 20 76 61 72 20 71 73 74 72 20 3d 20 70 61     var qstr = pa
3b70: 72 74 73 2e 71 62 6c 6f 63 6b 73 3b 0a 20 20 20  rts.qblocks;.   
3b80: 20 20 20 76 61 72 20 65 78 70 72 3b 0a 0a 20 20     var expr;..  
3b90: 20 20 20 20 69 66 20 28 70 61 72 74 73 2e 6c 65      if (parts.le
3ba0: 6e 67 74 68 20 3e 20 32 20 7c 7c 20 70 61 72 74  ngth > 2 || part
3bb0: 73 5b 30 5d 29 20 7b 0a 20 20 20 20 20 20 20 20  s[0]) {.        
3bc0: 76 61 72 20 69 2c 20 6a 2c 20 6c 69 73 74 20 3d  var i, j, list =
3bd0: 20 5b 5d 3b 0a 0a 20 20 20 20 20 20 20 20 66 6f   [];..        fo
3be0: 72 20 28 69 20 3d 20 6a 20 3d 20 30 3b 20 69 20  r (i = j = 0; i 
3bf0: 3c 20 70 61 72 74 73 2e 6c 65 6e 67 74 68 3b 20  < parts.length; 
3c00: 2b 2b 69 29 20 7b 0a 0a 20 20 20 20 20 20 20 20  ++i) {..        
3c10: 20 20 65 78 70 72 20 3d 20 70 61 72 74 73 5b 69    expr = parts[i
3c20: 5d 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 69 66  ];..          if
3c30: 20 28 65 78 70 72 20 26 26 20 28 65 78 70 72 20   (expr && (expr 
3c40: 3d 20 69 20 26 20 31 0a 0a 20 20 20 20 20 20 20  = i & 1..       
3c50: 20 20 20 20 20 20 20 3f 20 5f 70 61 72 73 65 45         ? _parseE
3c60: 78 70 72 28 65 78 70 72 2c 20 31 2c 20 71 73 74  xpr(expr, 1, qst
3c70: 72 29 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20  r)..            
3c80: 20 20 3a 20 27 22 27 20 2b 20 65 78 70 72 0a 20    : '"' + expr. 
3c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ca0: 20 2e 72 65 70 6c 61 63 65 28 2f 5c 5c 2f 67 2c   .replace(/\\/g,
3cb0: 20 27 5c 5c 5c 5c 27 29 0a 20 20 20 20 20 20 20   '\\\\').       
3cc0: 20 20 20 20 20 20 20 20 20 20 20 2e 72 65 70 6c             .repl
3cd0: 61 63 65 28 2f 5c 72 5c 6e 3f 7c 5c 6e 2f 67 2c  ace(/\r\n?|\n/g,
3ce0: 20 27 5c 5c 6e 27 29 0a 20 20 20 20 20 20 20 20   '\\n').        
3cf0: 20 20 20 20 20 20 20 20 20 20 2e 72 65 70 6c 61            .repla
3d00: 63 65 28 2f 22 2f 67 2c 20 27 5c 5c 22 27 29 20  ce(/"/g, '\\"') 
3d10: 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  +.              
3d20: 20 20 27 22 27 0a 0a 20 20 20 20 20 20 20 20 20    '"'..         
3d30: 20 20 20 29 29 20 7b 20 6c 69 73 74 5b 6a 2b 2b     )) { list[j++
3d40: 5d 20 3d 20 65 78 70 72 3b 20 7d 0a 0a 20 20 20  ] = expr; }..   
3d50: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20       }..        
3d60: 65 78 70 72 20 3d 20 6a 20 3c 20 32 20 3f 20 6c  expr = j < 2 ? l
3d70: 69 73 74 5b 30 5d 0a 20 20 20 20 20 20 20 20 20  ist[0].         
3d80: 20 20 20 20 3a 20 27 5b 27 20 2b 20 6c 69 73 74      : '[' + list
3d90: 2e 6a 6f 69 6e 28 27 2c 27 29 20 2b 20 27 5d 2e  .join(',') + '].
3da0: 6a 6f 69 6e 28 22 22 29 27 3b 0a 0a 20 20 20 20  join("")';..    
3db0: 20 20 7d 20 65 6c 73 65 20 7b 0a 0a 20 20 20 20    } else {..    
3dc0: 20 20 20 20 65 78 70 72 20 3d 20 5f 70 61 72 73      expr = _pars
3dd0: 65 45 78 70 72 28 70 61 72 74 73 5b 31 5d 2c 20  eExpr(parts[1], 
3de0: 30 2c 20 71 73 74 72 29 3b 0a 20 20 20 20 20 20  0, qstr);.      
3df0: 7d 0a 0a 20 20 20 20 20 20 69 66 20 28 71 73 74  }..      if (qst
3e00: 72 2e 6c 65 6e 67 74 68 29 20 7b 0a 20 20 20 20  r.length) {.    
3e10: 20 20 20 20 65 78 70 72 20 3d 20 65 78 70 72 2e      expr = expr.
3e20: 72 65 70 6c 61 63 65 28 52 45 5f 51 42 4d 41 52  replace(RE_QBMAR
3e30: 4b 2c 20 66 75 6e 63 74 69 6f 6e 20 28 5f 2c 20  K, function (_, 
3e40: 70 6f 73 29 20 7b 0a 20 20 20 20 20 20 20 20 20  pos) {.         
3e50: 20 72 65 74 75 72 6e 20 71 73 74 72 5b 70 6f 73   return qstr[pos
3e60: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2e 72  ].            .r
3e70: 65 70 6c 61 63 65 28 2f 5c 72 2f 67 2c 20 27 5c  eplace(/\r/g, '\
3e80: 5c 72 27 29 0a 20 20 20 20 20 20 20 20 20 20 20  \r').           
3e90: 20 2e 72 65 70 6c 61 63 65 28 2f 5c 6e 2f 67 2c   .replace(/\n/g,
3ea0: 20 27 5c 5c 6e 27 29 0a 20 20 20 20 20 20 20 20   '\\n').        
3eb0: 7d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  });.      }.    
3ec0: 20 20 72 65 74 75 72 6e 20 65 78 70 72 0a 20 20    return expr.  
3ed0: 20 20 7d 0a 0a 20 20 20 20 76 61 72 20 52 45 5f    }..    var RE_
3ee0: 43 53 4e 41 4d 45 20 3d 20 2f 5e 28 3f 3a 28 2d  CSNAME = /^(?:(-
3ef0: 3f 5b 5f 41 2d 5a 61 2d 7a 5c 78 41 30 2d 5c 78  ?[_A-Za-z\xA0-\x
3f00: 46 46 5d 5b 2d 5c 77 5c 78 41 30 2d 5c 78 46 46  FF][-\w\xA0-\xFF
3f10: 5d 2a 29 7c 5c 75 32 30 35 37 28 5c 64 2b 29 7e  ]*)|\u2057(\d+)~
3f20: 29 3a 2f 3b 0a 20 20 20 20 76 61 72 0a 20 20 20  ):/;.    var.   
3f30: 20 20 20 52 45 5f 42 52 45 4e 44 20 3d 20 7b 0a     RE_BREND = {.
3f40: 20 20 20 20 20 20 20 20 27 28 27 3a 20 2f 5b 28          '(': /[(
3f50: 29 5d 2f 67 2c 0a 20 20 20 20 20 20 20 20 27 5b  )]/g,.        '[
3f60: 27 3a 20 2f 5b 5b 5c 5d 5d 2f 67 2c 0a 20 20 20  ': /[[\]]/g,.   
3f70: 20 20 20 20 20 27 7b 27 3a 20 2f 5b 7b 7d 5d 2f       '{': /[{}]/
3f80: 67 0a 20 20 20 20 20 20 7d 3b 0a 0a 20 20 20 20  g.      };..    
3f90: 66 75 6e 63 74 69 6f 6e 20 5f 70 61 72 73 65 45  function _parseE
3fa0: 78 70 72 20 28 65 78 70 72 2c 20 61 73 54 65 78  xpr (expr, asTex
3fb0: 74 2c 20 71 73 74 72 29 20 7b 0a 0a 20 20 20 20  t, qstr) {..    
3fc0: 20 20 65 78 70 72 20 3d 20 65 78 70 72 0a 20 20    expr = expr.  
3fd0: 20 20 20 20 20 20 2e 72 65 70 6c 61 63 65 28 2f        .replace(/
3fe0: 5c 73 2b 2f 67 2c 20 27 20 27 29 2e 74 72 69 6d  \s+/g, ' ').trim
3ff0: 28 29 0a 20 20 20 20 20 20 20 20 2e 72 65 70 6c  ().        .repl
4000: 61 63 65 28 2f 5c 20 3f 28 5b 5b 5c 28 7b 7d 2c  ace(/\ ?([[\({},
4010: 3f 5c 2e 3a 5d 29 5c 20 3f 2f 67 2c 20 27 24 31  ?\.:])\ ?/g, '$1
4020: 27 29 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 65  ');..      if (e
4030: 78 70 72 29 20 7b 0a 20 20 20 20 20 20 20 20 76  xpr) {.        v
4040: 61 72 0a 20 20 20 20 20 20 20 20 20 20 6c 69 73  ar.          lis
4050: 74 20 3d 20 5b 5d 2c 0a 20 20 20 20 20 20 20 20  t = [],.        
4060: 20 20 63 6e 74 20 3d 20 30 2c 0a 20 20 20 20 20    cnt = 0,.     
4070: 20 20 20 20 20 6d 61 74 63 68 3b 0a 0a 20 20 20       match;..   
4080: 20 20 20 20 20 77 68 69 6c 65 20 28 65 78 70 72       while (expr
4090: 20 26 26 0a 20 20 20 20 20 20 20 20 20 20 20 20   &&.            
40a0: 20 20 28 6d 61 74 63 68 20 3d 20 65 78 70 72 2e    (match = expr.
40b0: 6d 61 74 63 68 28 52 45 5f 43 53 4e 41 4d 45 29  match(RE_CSNAME)
40c0: 29 20 26 26 0a 20 20 20 20 20 20 20 20 20 20 20  ) &&.           
40d0: 20 20 20 21 6d 61 74 63 68 2e 69 6e 64 65 78 0a     !match.index.
40e0: 20 20 20 20 20 20 20 20 20 20 29 20 7b 0a 20 20            ) {.  
40f0: 20 20 20 20 20 20 20 20 76 61 72 0a 20 20 20 20          var.    
4100: 20 20 20 20 20 20 20 20 6b 65 79 2c 0a 20 20 20          key,.   
4110: 20 20 20 20 20 20 20 20 20 6a 73 62 2c 0a 20 20           jsb,.  
4120: 20 20 20 20 20 20 20 20 20 20 72 65 20 3d 20 2f            re = /
4130: 2c 7c 28 5b 5b 7b 28 5d 29 7c 24 2f 67 3b 0a 0a  ,|([[{(])|$/g;..
4140: 20 20 20 20 20 20 20 20 20 20 65 78 70 72 20 3d            expr =
4150: 20 52 65 67 45 78 70 2e 72 69 67 68 74 43 6f 6e   RegExp.rightCon
4160: 74 65 78 74 3b 0a 20 20 20 20 20 20 20 20 20 20  text;.          
4170: 6b 65 79 20 20 3d 20 6d 61 74 63 68 5b 32 5d 20  key  = match[2] 
4180: 3f 20 71 73 74 72 5b 6d 61 74 63 68 5b 32 5d 5d  ? qstr[match[2]]
4190: 2e 73 6c 69 63 65 28 31 2c 20 2d 31 29 2e 74 72  .slice(1, -1).tr
41a0: 69 6d 28 29 2e 72 65 70 6c 61 63 65 28 2f 5c 73  im().replace(/\s
41b0: 2b 2f 67 2c 20 27 20 27 29 20 3a 20 6d 61 74 63  +/g, ' ') : matc
41c0: 68 5b 31 5d 3b 0a 0a 20 20 20 20 20 20 20 20 20  h[1];..         
41d0: 20 77 68 69 6c 65 20 28 6a 73 62 20 3d 20 28 6d   while (jsb = (m
41e0: 61 74 63 68 20 3d 20 72 65 2e 65 78 65 63 28 65  atch = re.exec(e
41f0: 78 70 72 29 29 5b 31 5d 29 20 7b 20 73 6b 69 70  xpr))[1]) { skip
4200: 42 72 61 63 65 73 28 6a 73 62 2c 20 72 65 29 3b  Braces(jsb, re);
4210: 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 6a 73   }..          js
4220: 62 20 20 3d 20 65 78 70 72 2e 73 6c 69 63 65 28  b  = expr.slice(
4230: 30 2c 20 6d 61 74 63 68 2e 69 6e 64 65 78 29 3b  0, match.index);
4240: 0a 20 20 20 20 20 20 20 20 20 20 65 78 70 72 20  .          expr 
4250: 3d 20 52 65 67 45 78 70 2e 72 69 67 68 74 43 6f  = RegExp.rightCo
4260: 6e 74 65 78 74 3b 0a 0a 20 20 20 20 20 20 20 20  ntext;..        
4270: 20 20 6c 69 73 74 5b 63 6e 74 2b 2b 5d 20 3d 20    list[cnt++] = 
4280: 5f 77 72 61 70 45 78 70 72 28 6a 73 62 2c 20 31  _wrapExpr(jsb, 1
4290: 2c 20 6b 65 79 29 3b 0a 20 20 20 20 20 20 20 20  , key);.        
42a0: 7d 0a 0a 20 20 20 20 20 20 20 20 65 78 70 72 20  }..        expr 
42b0: 3d 20 21 63 6e 74 20 3f 20 5f 77 72 61 70 45 78  = !cnt ? _wrapEx
42c0: 70 72 28 65 78 70 72 2c 20 61 73 54 65 78 74 29  pr(expr, asText)
42d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20  .             : 
42e0: 63 6e 74 20 3e 20 31 20 3f 20 27 5b 27 20 2b 20  cnt > 1 ? '[' + 
42f0: 6c 69 73 74 2e 6a 6f 69 6e 28 27 2c 27 29 20 2b  list.join(',') +
4300: 20 27 5d 2e 6a 6f 69 6e 28 22 20 22 29 2e 74 72   '].join(" ").tr
4310: 69 6d 28 29 27 20 3a 20 6c 69 73 74 5b 30 5d 3b  im()' : list[0];
4320: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72  .      }.      r
4330: 65 74 75 72 6e 20 65 78 70 72 0a 0a 20 20 20 20  eturn expr..    
4340: 20 20 66 75 6e 63 74 69 6f 6e 20 73 6b 69 70 42    function skipB
4350: 72 61 63 65 73 20 28 63 68 2c 20 72 65 29 20 7b  races (ch, re) {
4360: 0a 20 20 20 20 20 20 20 20 76 61 72 0a 20 20 20  .        var.   
4370: 20 20 20 20 20 20 20 6d 6d 2c 0a 20 20 20 20 20         mm,.     
4380: 20 20 20 20 20 6c 76 20 3d 20 31 2c 0a 20 20 20       lv = 1,.   
4390: 20 20 20 20 20 20 20 69 72 20 3d 20 52 45 5f 42         ir = RE_B
43a0: 52 45 4e 44 5b 63 68 5d 3b 0a 0a 20 20 20 20 20  REND[ch];..     
43b0: 20 20 20 69 72 2e 6c 61 73 74 49 6e 64 65 78 20     ir.lastIndex 
43c0: 3d 20 72 65 2e 6c 61 73 74 49 6e 64 65 78 3b 0a  = re.lastIndex;.
43d0: 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 6d          while (m
43e0: 6d 20 3d 20 69 72 2e 65 78 65 63 28 65 78 70 72  m = ir.exec(expr
43f0: 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 69  )) {.          i
4400: 66 20 28 6d 6d 5b 30 5d 20 3d 3d 3d 20 63 68 29  f (mm[0] === ch)
4410: 20 7b 20 2b 2b 6c 76 3b 20 7d 0a 20 20 20 20 20   { ++lv; }.     
4420: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 21 2d       else if (!-
4430: 2d 6c 76 29 20 7b 20 62 72 65 61 6b 20 7d 0a 20  -lv) { break }. 
4440: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
4450: 20 72 65 2e 6c 61 73 74 49 6e 64 65 78 20 3d 20   re.lastIndex = 
4460: 6c 76 20 3f 20 65 78 70 72 2e 6c 65 6e 67 74 68  lv ? expr.length
4470: 20 3a 20 69 72 2e 6c 61 73 74 49 6e 64 65 78 3b   : ir.lastIndex;
4480: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a  .      }.    }..
4490: 20 20 20 20 2f 2f 20 69 73 74 61 6e 62 75 6c 20      // istanbul 
44a0: 69 67 6e 6f 72 65 20 6e 65 78 74 3a 20 6e 6f 74  ignore next: not
44b0: 20 62 6f 74 68 0a 20 20 20 20 76 61 72 20 2f 2f   both.    var //
44c0: 20 65 73 6c 69 6e 74 2d 64 69 73 61 62 6c 65 2d   eslint-disable-
44d0: 6e 65 78 74 2d 6c 69 6e 65 20 6d 61 78 2d 6c 65  next-line max-le
44e0: 6e 0a 20 20 20 20 20 20 4a 53 5f 43 4f 4e 54 45  n.      JS_CONTE
44f0: 58 54 20 3d 20 27 22 69 6e 20 74 68 69 73 3f 74  XT = '"in this?t
4500: 68 69 73 3a 27 20 2b 20 28 74 79 70 65 6f 66 20  his:' + (typeof 
4510: 77 69 6e 64 6f 77 20 21 3d 3d 20 27 6f 62 6a 65  window !== 'obje
4520: 63 74 27 20 3f 20 27 67 6c 6f 62 61 6c 27 20 3a  ct' ? 'global' :
4530: 20 27 77 69 6e 64 6f 77 27 29 20 2b 20 27 29 2e   'window') + ').
4540: 27 2c 0a 20 20 20 20 20 20 4a 53 5f 56 41 52 4e  ',.      JS_VARN
4550: 41 4d 45 20 3d 20 2f 5b 2c 7b 5d 5b 5c 24 5c 77  AME = /[,{][\$\w
4560: 5d 2b 28 3f 3d 3a 29 7c 28 5e 20 2a 7c 5b 5e 24  ]+(?=:)|(^ *|[^$
4570: 5c 77 5c 2e 7b 5d 29 28 3f 21 28 3f 3a 74 79 70  \w\.{])(?!(?:typ
4580: 65 6f 66 7c 74 72 75 65 7c 66 61 6c 73 65 7c 6e  eof|true|false|n
4590: 75 6c 6c 7c 75 6e 64 65 66 69 6e 65 64 7c 69 6e  ull|undefined|in
45a0: 7c 69 6e 73 74 61 6e 63 65 6f 66 7c 69 73 28 3f  |instanceof|is(?
45b0: 3a 46 69 6e 69 74 65 7c 4e 61 4e 29 7c 76 6f 69  :Finite|NaN)|voi
45c0: 64 7c 4e 61 4e 7c 6e 65 77 7c 44 61 74 65 7c 52  d|NaN|new|Date|R
45d0: 65 67 45 78 70 7c 4d 61 74 68 29 28 3f 21 5b 24  egExp|Math)(?![$
45e0: 5c 77 5d 29 29 28 5b 24 5f 41 2d 5a 61 2d 7a 5d  \w]))([$_A-Za-z]
45f0: 5b 24 5c 77 5d 2a 29 2f 67 2c 0a 20 20 20 20 20  [$\w]*)/g,.     
4600: 20 4a 53 5f 4e 4f 50 52 4f 50 53 20 3d 20 2f 5e   JS_NOPROPS = /^
4610: 28 3f 3d 28 5c 2e 5b 24 5c 77 5d 2b 29 29 5c 31  (?=(\.[$\w]+))\1
4620: 28 3f 3a 5b 5e 2e 5b 28 5d 7c 24 29 2f 3b 0a 0a  (?:[^.[(]|$)/;..
4630: 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 5f 77 72      function _wr
4640: 61 70 45 78 70 72 20 28 65 78 70 72 2c 20 61 73  apExpr (expr, as
4650: 54 65 78 74 2c 20 6b 65 79 29 20 7b 0a 20 20 20  Text, key) {.   
4660: 20 20 20 76 61 72 20 74 62 3b 0a 0a 20 20 20 20     var tb;..    
4670: 20 20 65 78 70 72 20 3d 20 65 78 70 72 2e 72 65    expr = expr.re
4680: 70 6c 61 63 65 28 4a 53 5f 56 41 52 4e 41 4d 45  place(JS_VARNAME
4690: 2c 20 66 75 6e 63 74 69 6f 6e 20 28 6d 61 74 63  , function (matc
46a0: 68 2c 20 70 2c 20 6d 76 61 72 2c 20 70 6f 73 2c  h, p, mvar, pos,
46b0: 20 73 29 20 7b 0a 20 20 20 20 20 20 20 20 69 66   s) {.        if
46c0: 20 28 6d 76 61 72 29 20 7b 0a 20 20 20 20 20 20   (mvar) {.      
46d0: 20 20 20 20 70 6f 73 20 3d 20 74 62 20 3f 20 30      pos = tb ? 0
46e0: 20 3a 20 70 6f 73 20 2b 20 6d 61 74 63 68 2e 6c   : pos + match.l
46f0: 65 6e 67 74 68 3b 0a 0a 20 20 20 20 20 20 20 20  ength;..        
4700: 20 20 69 66 20 28 6d 76 61 72 20 21 3d 3d 20 27    if (mvar !== '
4710: 74 68 69 73 27 20 26 26 20 6d 76 61 72 20 21 3d  this' && mvar !=
4720: 3d 20 27 67 6c 6f 62 61 6c 27 20 26 26 20 6d 76  = 'global' && mv
4730: 61 72 20 21 3d 3d 20 27 77 69 6e 64 6f 77 27 29  ar !== 'window')
4740: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d   {.            m
4750: 61 74 63 68 20 3d 20 70 20 2b 20 27 28 22 27 20  atch = p + '("' 
4760: 2b 20 6d 76 61 72 20 2b 20 4a 53 5f 43 4f 4e 54  + mvar + JS_CONT
4770: 45 58 54 20 2b 20 6d 76 61 72 3b 0a 20 20 20 20  EXT + mvar;.    
4780: 20 20 20 20 20 20 20 20 69 66 20 28 70 6f 73 29          if (pos)
4790: 20 7b 20 74 62 20 3d 20 28 73 20 3d 20 73 5b 70   { tb = (s = s[p
47a0: 6f 73 5d 29 20 3d 3d 3d 20 27 2e 27 20 7c 7c 20  os]) === '.' || 
47b0: 73 20 3d 3d 3d 20 27 28 27 20 7c 7c 20 73 20 3d  s === '(' || s =
47c0: 3d 3d 20 27 5b 27 3b 20 7d 0a 20 20 20 20 20 20  == '['; }.      
47d0: 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 70      } else if (p
47e0: 6f 73 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  os) {.          
47f0: 20 20 74 62 20 3d 20 21 4a 53 5f 4e 4f 50 52 4f    tb = !JS_NOPRO
4800: 50 53 2e 74 65 73 74 28 73 2e 73 6c 69 63 65 28  PS.test(s.slice(
4810: 70 6f 73 29 29 3b 0a 20 20 20 20 20 20 20 20 20  pos));.         
4820: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
4830: 20 20 20 20 20 72 65 74 75 72 6e 20 6d 61 74 63       return matc
4840: 68 0a 20 20 20 20 20 20 7d 29 3b 0a 0a 20 20 20  h.      });..   
4850: 20 20 20 69 66 20 28 74 62 29 20 7b 0a 20 20 20     if (tb) {.   
4860: 20 20 20 20 20 65 78 70 72 20 3d 20 27 74 72 79       expr = 'try
4870: 7b 72 65 74 75 72 6e 20 27 20 2b 20 65 78 70 72  {return ' + expr
4880: 20 2b 20 27 7d 63 61 74 63 68 28 65 29 7b 45 28   + '}catch(e){E(
4890: 65 2c 74 68 69 73 29 7d 27 3b 0a 20 20 20 20 20  e,this)}';.     
48a0: 20 7d 0a 0a 20 20 20 20 20 20 69 66 20 28 6b 65   }..      if (ke
48b0: 79 29 20 7b 0a 0a 20 20 20 20 20 20 20 20 65 78  y) {..        ex
48c0: 70 72 20 3d 20 28 74 62 0a 20 20 20 20 20 20 20  pr = (tb.       
48d0: 20 20 20 20 20 3f 20 27 66 75 6e 63 74 69 6f 6e       ? 'function
48e0: 28 29 7b 27 20 2b 20 65 78 70 72 20 2b 20 27 7d  (){' + expr + '}
48f0: 2e 63 61 6c 6c 28 74 68 69 73 29 27 20 3a 20 27  .call(this)' : '
4900: 28 27 20 2b 20 65 78 70 72 20 2b 20 27 29 27 0a  (' + expr + ')'.
4910: 20 20 20 20 20 20 20 20 20 20 29 20 2b 20 27 3f            ) + '?
4920: 22 27 20 2b 20 6b 65 79 20 2b 20 27 22 3a 22 22  "' + key + '":""
4930: 27 3b 0a 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  ';..      } else
4940: 20 69 66 20 28 61 73 54 65 78 74 29 20 7b 0a 0a   if (asText) {..
4950: 20 20 20 20 20 20 20 20 65 78 70 72 20 3d 20 27          expr = '
4960: 66 75 6e 63 74 69 6f 6e 28 76 29 7b 27 20 2b 20  function(v){' + 
4970: 28 74 62 0a 20 20 20 20 20 20 20 20 20 20 20 20  (tb.            
4980: 3f 20 65 78 70 72 2e 72 65 70 6c 61 63 65 28 27  ? expr.replace('
4990: 72 65 74 75 72 6e 20 27 2c 20 27 76 3d 27 29 20  return ', 'v=') 
49a0: 3a 20 27 76 3d 28 27 20 2b 20 65 78 70 72 20 2b  : 'v=(' + expr +
49b0: 20 27 29 27 0a 20 20 20 20 20 20 20 20 20 20 29   ')'.          )
49c0: 20 2b 20 27 3b 72 65 74 75 72 6e 20 76 7c 7c 76   + ';return v||v
49d0: 3d 3d 3d 30 3f 76 3a 22 22 7d 2e 63 61 6c 6c 28  ===0?v:""}.call(
49e0: 74 68 69 73 29 27 3b 0a 20 20 20 20 20 20 7d 0a  this)';.      }.
49f0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 65 78  .      return ex
4a00: 70 72 0a 20 20 20 20 7d 0a 0a 20 20 20 20 5f 74  pr.    }..    _t
4a10: 6d 70 6c 2e 76 65 72 73 69 6f 6e 20 3d 20 62 72  mpl.version = br
4a20: 61 63 6b 65 74 73 2e 76 65 72 73 69 6f 6e 20 3d  ackets.version =
4a30: 20 27 76 33 2e 30 2e 38 27 3b 0a 0a 20 20 20 20   'v3.0.8';..    
4a40: 72 65 74 75 72 6e 20 5f 74 6d 70 6c 0a 0a 20 20  return _tmpl..  
4a50: 7d 29 28 29 3b 0a 0a 20 20 2f 2a 20 69 73 74 61  })();..  /* ista
4a60: 6e 62 75 6c 20 69 67 6e 6f 72 65 20 6e 65 78 74  nbul ignore next
4a70: 20 2a 2f 0a 20 20 76 61 72 20 6f 62 73 65 72 76   */.  var observ
4a80: 61 62 6c 65 20 3d 20 66 75 6e 63 74 69 6f 6e 28  able = function(
4a90: 65 6c 29 20 7b 0a 0a 20 20 20 20 2f 2a 2a 0a 20  el) {..    /**. 
4aa0: 20 20 20 20 2a 20 45 78 74 65 6e 64 20 74 68 65      * Extend the
4ab0: 20 6f 72 69 67 69 6e 61 6c 20 6f 62 6a 65 63 74   original object
4ac0: 20 6f 72 20 63 72 65 61 74 65 20 61 20 6e 65 77   or create a new
4ad0: 20 65 6d 70 74 79 20 6f 6e 65 0a 20 20 20 20 20   empty one.     
4ae0: 2a 20 40 74 79 70 65 20 7b 20 4f 62 6a 65 63 74  * @type { Object
4af0: 20 7d 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20   }.     */..    
4b00: 65 6c 20 3d 20 65 6c 20 7c 7c 20 7b 7d 3b 0a 0a  el = el || {};..
4b10: 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 50      /**.     * P
4b20: 72 69 76 61 74 65 20 76 61 72 69 61 62 6c 65 73  rivate variables
4b30: 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 76 61 72  .     */.    var
4b40: 20 63 61 6c 6c 62 61 63 6b 73 20 3d 20 7b 7d 2c   callbacks = {},
4b50: 0a 20 20 20 20 20 20 73 6c 69 63 65 20 3d 20 41  .      slice = A
4b60: 72 72 61 79 2e 70 72 6f 74 6f 74 79 70 65 2e 73  rray.prototype.s
4b70: 6c 69 63 65 3b 0a 0a 20 20 20 20 2f 2a 2a 0a 20  lice;..    /**. 
4b80: 20 20 20 20 2a 20 50 75 62 6c 69 63 20 41 70 69      * Public Api
4b90: 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 2f 2f  .     */..    //
4ba0: 20 65 78 74 65 6e 64 20 74 68 65 20 65 6c 20 6f   extend the el o
4bb0: 62 6a 65 63 74 20 61 64 64 69 6e 67 20 74 68 65  bject adding the
4bc0: 20 6f 62 73 65 72 76 61 62 6c 65 20 6d 65 74 68   observable meth
4bd0: 6f 64 73 0a 20 20 20 20 4f 62 6a 65 63 74 2e 64  ods.    Object.d
4be0: 65 66 69 6e 65 50 72 6f 70 65 72 74 69 65 73 28  efineProperties(
4bf0: 65 6c 2c 20 7b 0a 20 20 20 20 20 20 2f 2a 2a 0a  el, {.      /**.
4c00: 20 20 20 20 20 20 20 2a 20 4c 69 73 74 65 6e 20         * Listen 
4c10: 74 6f 20 74 68 65 20 67 69 76 65 6e 20 60 65 76  to the given `ev
4c20: 65 6e 74 60 20 61 6e 64 73 0a 20 20 20 20 20 20  ent` ands.      
4c30: 20 2a 20 65 78 65 63 75 74 65 20 74 68 65 20 60   * execute the `
4c40: 63 61 6c 6c 62 61 63 6b 60 20 65 61 63 68 20 74  callback` each t
4c50: 69 6d 65 20 61 6e 20 65 76 65 6e 74 20 69 73 20  ime an event is 
4c60: 74 72 69 67 67 65 72 65 64 2e 0a 20 20 20 20 20  triggered..     
4c70: 20 20 2a 20 40 70 61 72 61 6d 20 20 7b 20 53 74    * @param  { St
4c80: 72 69 6e 67 20 7d 20 65 76 65 6e 74 20 2d 20 65  ring } event - e
4c90: 76 65 6e 74 20 69 64 0a 20 20 20 20 20 20 20 2a  vent id.       *
4ca0: 20 40 70 61 72 61 6d 20 20 7b 20 46 75 6e 63 74   @param  { Funct
4cb0: 69 6f 6e 20 7d 20 66 6e 20 2d 20 63 61 6c 6c 62  ion } fn - callb
4cc0: 61 63 6b 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20  ack function.   
4cd0: 20 20 20 20 2a 20 40 72 65 74 75 72 6e 73 20 7b      * @returns {
4ce0: 20 4f 62 6a 65 63 74 20 7d 20 65 6c 0a 20 20 20   Object } el.   
4cf0: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 6f 6e 3a      */.      on:
4d00: 20 7b 0a 20 20 20 20 20 20 20 20 76 61 6c 75 65   {.        value
4d10: 3a 20 66 75 6e 63 74 69 6f 6e 28 65 76 65 6e 74  : function(event
4d20: 2c 20 66 6e 29 20 7b 0a 20 20 20 20 20 20 20 20  , fn) {.        
4d30: 20 20 69 66 20 28 74 79 70 65 6f 66 20 66 6e 20    if (typeof fn 
4d40: 3d 3d 20 27 66 75 6e 63 74 69 6f 6e 27 29 0a 20  == 'function'). 
4d50: 20 20 20 20 20 20 20 20 20 20 20 7b 20 28 63 61             { (ca
4d60: 6c 6c 62 61 63 6b 73 5b 65 76 65 6e 74 5d 20 3d  llbacks[event] =
4d70: 20 63 61 6c 6c 62 61 63 6b 73 5b 65 76 65 6e 74   callbacks[event
4d80: 5d 20 7c 7c 20 5b 5d 29 2e 70 75 73 68 28 66 6e  ] || []).push(fn
4d90: 29 3b 20 7d 0a 20 20 20 20 20 20 20 20 20 20 72  ); }.          r
4da0: 65 74 75 72 6e 20 65 6c 0a 20 20 20 20 20 20 20  eturn el.       
4db0: 20 7d 2c 0a 20 20 20 20 20 20 20 20 65 6e 75 6d   },.        enum
4dc0: 65 72 61 62 6c 65 3a 20 66 61 6c 73 65 2c 0a 20  erable: false,. 
4dd0: 20 20 20 20 20 20 20 77 72 69 74 61 62 6c 65 3a         writable:
4de0: 20 66 61 6c 73 65 2c 0a 20 20 20 20 20 20 20 20   false,.        
4df0: 63 6f 6e 66 69 67 75 72 61 62 6c 65 3a 20 66 61  configurable: fa
4e00: 6c 73 65 0a 20 20 20 20 20 20 7d 2c 0a 0a 20 20  lse.      },..  
4e10: 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 20 20 2a      /**.       *
4e20: 20 52 65 6d 6f 76 65 73 20 74 68 65 20 67 69 76   Removes the giv
4e30: 65 6e 20 60 65 76 65 6e 74 60 20 6c 69 73 74 65  en `event` liste
4e40: 6e 65 72 73 0a 20 20 20 20 20 20 20 2a 20 40 70  ners.       * @p
4e50: 61 72 61 6d 20 20 20 7b 20 53 74 72 69 6e 67 20  aram   { String 
4e60: 7d 20 65 76 65 6e 74 20 2d 20 65 76 65 6e 74 20  } event - event 
4e70: 69 64 0a 20 20 20 20 20 20 20 2a 20 40 70 61 72  id.       * @par
4e80: 61 6d 20 20 20 7b 20 46 75 6e 63 74 69 6f 6e 20  am   { Function 
4e90: 7d 20 66 6e 20 2d 20 63 61 6c 6c 62 61 63 6b 20  } fn - callback 
4ea0: 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20 20 20 20  function.       
4eb0: 2a 20 40 72 65 74 75 72 6e 73 20 7b 20 4f 62 6a  * @returns { Obj
4ec0: 65 63 74 20 7d 20 65 6c 0a 20 20 20 20 20 20 20  ect } el.       
4ed0: 2a 2f 0a 20 20 20 20 20 20 6f 66 66 3a 20 7b 0a  */.      off: {.
4ee0: 20 20 20 20 20 20 20 20 76 61 6c 75 65 3a 20 66          value: f
4ef0: 75 6e 63 74 69 6f 6e 28 65 76 65 6e 74 2c 20 66  unction(event, f
4f00: 6e 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 69  n) {.          i
4f10: 66 20 28 65 76 65 6e 74 20 3d 3d 20 27 2a 27 20  f (event == '*' 
4f20: 26 26 20 21 66 6e 29 20 7b 20 63 61 6c 6c 62 61  && !fn) { callba
4f30: 63 6b 73 20 3d 20 7b 7d 3b 20 7d 0a 20 20 20 20  cks = {}; }.    
4f40: 20 20 20 20 20 20 65 6c 73 65 20 7b 0a 20 20 20        else {.   
4f50: 20 20 20 20 20 20 20 20 20 69 66 20 28 66 6e 29           if (fn)
4f60: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
4f70: 20 76 61 72 20 61 72 72 20 3d 20 63 61 6c 6c 62   var arr = callb
4f80: 61 63 6b 73 5b 65 76 65 6e 74 5d 3b 0a 20 20 20  acks[event];.   
4f90: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28             for (
4fa0: 76 61 72 20 69 20 3d 20 30 2c 20 63 62 3b 20 63  var i = 0, cb; c
4fb0: 62 20 3d 20 61 72 72 20 26 26 20 61 72 72 5b 69  b = arr && arr[i
4fc0: 5d 3b 20 2b 2b 69 29 20 7b 0a 20 20 20 20 20 20  ]; ++i) {.      
4fd0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 62            if (cb
4fe0: 20 3d 3d 20 66 6e 29 20 7b 20 61 72 72 2e 73 70   == fn) { arr.sp
4ff0: 6c 69 63 65 28 69 2d 2d 2c 20 31 29 3b 20 7d 0a  lice(i--, 1); }.
5000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
5010: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
5020: 73 65 20 7b 20 64 65 6c 65 74 65 20 63 61 6c 6c  se { delete call
5030: 62 61 63 6b 73 5b 65 76 65 6e 74 5d 3b 20 7d 0a  backs[event]; }.
5040: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
5050: 20 20 20 20 20 20 72 65 74 75 72 6e 20 65 6c 0a        return el.
5060: 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
5070: 20 20 20 65 6e 75 6d 65 72 61 62 6c 65 3a 20 66     enumerable: f
5080: 61 6c 73 65 2c 0a 20 20 20 20 20 20 20 20 77 72  alse,.        wr
5090: 69 74 61 62 6c 65 3a 20 66 61 6c 73 65 2c 0a 20  itable: false,. 
50a0: 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
50b0: 62 6c 65 3a 20 66 61 6c 73 65 0a 20 20 20 20 20  ble: false.     
50c0: 20 7d 2c 0a 0a 20 20 20 20 20 20 2f 2a 2a 0a 20   },..      /**. 
50d0: 20 20 20 20 20 20 2a 20 4c 69 73 74 65 6e 20 74        * Listen t
50e0: 6f 20 74 68 65 20 67 69 76 65 6e 20 60 65 76 65  o the given `eve
50f0: 6e 74 60 20 61 6e 64 0a 20 20 20 20 20 20 20 2a  nt` and.       *
5100: 20 65 78 65 63 75 74 65 20 74 68 65 20 60 63 61   execute the `ca
5110: 6c 6c 62 61 63 6b 60 20 61 74 20 6d 6f 73 74 20  llback` at most 
5120: 6f 6e 63 65 0a 20 20 20 20 20 20 20 2a 20 40 70  once.       * @p
5130: 61 72 61 6d 20 20 20 7b 20 53 74 72 69 6e 67 20  aram   { String 
5140: 7d 20 65 76 65 6e 74 20 2d 20 65 76 65 6e 74 20  } event - event 
5150: 69 64 0a 20 20 20 20 20 20 20 2a 20 40 70 61 72  id.       * @par
5160: 61 6d 20 20 20 7b 20 46 75 6e 63 74 69 6f 6e 20  am   { Function 
5170: 7d 20 66 6e 20 2d 20 63 61 6c 6c 62 61 63 6b 20  } fn - callback 
5180: 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20 20 20 20  function.       
5190: 2a 20 40 72 65 74 75 72 6e 73 20 7b 20 4f 62 6a  * @returns { Obj
51a0: 65 63 74 20 7d 20 65 6c 0a 20 20 20 20 20 20 20  ect } el.       
51b0: 2a 2f 0a 20 20 20 20 20 20 6f 6e 65 3a 20 7b 0a  */.      one: {.
51c0: 20 20 20 20 20 20 20 20 76 61 6c 75 65 3a 20 66          value: f
51d0: 75 6e 63 74 69 6f 6e 28 65 76 65 6e 74 2c 20 66  unction(event, f
51e0: 6e 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 66  n) {.          f
51f0: 75 6e 63 74 69 6f 6e 20 6f 6e 28 29 20 7b 0a 20  unction on() {. 
5200: 20 20 20 20 20 20 20 20 20 20 20 65 6c 2e 6f 66             el.of
5210: 66 28 65 76 65 6e 74 2c 20 6f 6e 29 3b 0a 20 20  f(event, on);.  
5220: 20 20 20 20 20 20 20 20 20 20 66 6e 2e 61 70 70            fn.app
5230: 6c 79 28 65 6c 2c 20 61 72 67 75 6d 65 6e 74 73  ly(el, arguments
5240: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
5250: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
5260: 65 6c 2e 6f 6e 28 65 76 65 6e 74 2c 20 6f 6e 29  el.on(event, on)
5270: 0a 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20  .        },.    
5280: 20 20 20 20 65 6e 75 6d 65 72 61 62 6c 65 3a 20      enumerable: 
5290: 66 61 6c 73 65 2c 0a 20 20 20 20 20 20 20 20 77  false,.        w
52a0: 72 69 74 61 62 6c 65 3a 20 66 61 6c 73 65 2c 0a  ritable: false,.
52b0: 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
52c0: 61 62 6c 65 3a 20 66 61 6c 73 65 0a 20 20 20 20  able: false.    
52d0: 20 20 7d 2c 0a 0a 20 20 20 20 20 20 2f 2a 2a 0a    },..      /**.
52e0: 20 20 20 20 20 20 20 2a 20 45 78 65 63 75 74 65         * Execute
52f0: 20 61 6c 6c 20 63 61 6c 6c 62 61 63 6b 20 66 75   all callback fu
5300: 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 6c 69 73  nctions that lis
5310: 74 65 6e 20 74 6f 0a 20 20 20 20 20 20 20 2a 20  ten to.       * 
5320: 74 68 65 20 67 69 76 65 6e 20 60 65 76 65 6e 74  the given `event
5330: 60 0a 20 20 20 20 20 20 20 2a 20 40 70 61 72 61  `.       * @para
5340: 6d 20 20 20 7b 20 53 74 72 69 6e 67 20 7d 20 65  m   { String } e
5350: 76 65 6e 74 20 2d 20 65 76 65 6e 74 20 69 64 0a  vent - event id.
5360: 20 20 20 20 20 20 20 2a 20 40 72 65 74 75 72 6e         * @return
5370: 73 20 7b 20 4f 62 6a 65 63 74 20 7d 20 65 6c 0a  s { Object } el.
5380: 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20         */.      
5390: 74 72 69 67 67 65 72 3a 20 7b 0a 20 20 20 20 20  trigger: {.     
53a0: 20 20 20 76 61 6c 75 65 3a 20 66 75 6e 63 74 69     value: functi
53b0: 6f 6e 28 65 76 65 6e 74 29 20 7b 0a 20 20 20 20  on(event) {.    
53c0: 20 20 20 20 20 20 76 61 72 20 61 72 67 75 6d 65        var argume
53d0: 6e 74 73 24 31 20 3d 20 61 72 67 75 6d 65 6e 74  nts$1 = argument
53e0: 73 3b 0a 0a 0a 20 20 20 20 20 20 20 20 20 20 2f  s;...          /
53f0: 2f 20 67 65 74 74 69 6e 67 20 74 68 65 20 61 72  / getting the ar
5400: 67 75 6d 65 6e 74 73 0a 20 20 20 20 20 20 20 20  guments.        
5410: 20 20 76 61 72 20 61 72 67 6c 65 6e 20 3d 20 61    var arglen = a
5420: 72 67 75 6d 65 6e 74 73 2e 6c 65 6e 67 74 68 20  rguments.length 
5430: 2d 20 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20  - 1,.           
5440: 20 61 72 67 73 20 3d 20 6e 65 77 20 41 72 72 61   args = new Arra
5450: 79 28 61 72 67 6c 65 6e 29 2c 0a 20 20 20 20 20  y(arglen),.     
5460: 20 20 20 20 20 20 20 66 6e 73 2c 0a 20 20 20 20         fns,.    
5470: 20 20 20 20 20 20 20 20 66 6e 2c 0a 20 20 20 20          fn,.    
5480: 20 20 20 20 20 20 20 20 69 3b 0a 0a 20 20 20 20          i;..    
5490: 20 20 20 20 20 20 66 6f 72 20 28 69 20 3d 20 30        for (i = 0
54a0: 3b 20 69 20 3c 20 61 72 67 6c 65 6e 3b 20 69 2b  ; i < arglen; i+
54b0: 2b 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  +) {.           
54c0: 20 61 72 67 73 5b 69 5d 20 3d 20 61 72 67 75 6d   args[i] = argum
54d0: 65 6e 74 73 24 31 5b 69 20 2b 20 31 5d 3b 20 2f  ents$1[i + 1]; /
54e0: 2f 20 73 6b 69 70 20 66 69 72 73 74 20 61 72 67  / skip first arg
54f0: 75 6d 65 6e 74 0a 20 20 20 20 20 20 20 20 20 20  ument.          
5500: 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 66 6e 73  }..          fns
5510: 20 3d 20 73 6c 69 63 65 2e 63 61 6c 6c 28 63 61   = slice.call(ca
5520: 6c 6c 62 61 63 6b 73 5b 65 76 65 6e 74 5d 20 7c  llbacks[event] |
5530: 7c 20 5b 5d 2c 20 30 29 3b 0a 0a 20 20 20 20 20  | [], 0);..     
5540: 20 20 20 20 20 66 6f 72 20 28 69 20 3d 20 30 3b       for (i = 0;
5550: 20 66 6e 20 3d 20 66 6e 73 5b 69 5d 3b 20 2b 2b   fn = fns[i]; ++
5560: 69 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  i) {.           
5570: 20 66 6e 2e 61 70 70 6c 79 28 65 6c 2c 20 61 72   fn.apply(el, ar
5580: 67 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  gs);.          }
5590: 0a 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
55a0: 63 61 6c 6c 62 61 63 6b 73 5b 27 2a 27 5d 20 26  callbacks['*'] &
55b0: 26 20 65 76 65 6e 74 20 21 3d 20 27 2a 27 29 0a  & event != '*').
55c0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 65 6c              { el
55d0: 2e 74 72 69 67 67 65 72 2e 61 70 70 6c 79 28 65  .trigger.apply(e
55e0: 6c 2c 20 5b 27 2a 27 2c 20 65 76 65 6e 74 5d 2e  l, ['*', event].
55f0: 63 6f 6e 63 61 74 28 61 72 67 73 29 29 3b 20 7d  concat(args)); }
5600: 0a 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
5610: 72 6e 20 65 6c 0a 20 20 20 20 20 20 20 20 7d 2c  rn el.        },
5620: 0a 20 20 20 20 20 20 20 20 65 6e 75 6d 65 72 61  .        enumera
5630: 62 6c 65 3a 20 66 61 6c 73 65 2c 0a 20 20 20 20  ble: false,.    
5640: 20 20 20 20 77 72 69 74 61 62 6c 65 3a 20 66 61      writable: fa
5650: 6c 73 65 2c 0a 20 20 20 20 20 20 20 20 63 6f 6e  lse,.        con
5660: 66 69 67 75 72 61 62 6c 65 3a 20 66 61 6c 73 65  figurable: false
5670: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 29 3b  .      }.    });
5680: 0a 0a 20 20 20 20 72 65 74 75 72 6e 20 65 6c 0a  ..    return el.
5690: 0a 20 20 7d 3b 0a 0a 20 20 2f 2a 2a 0a 20 20 20  .  };..  /**.   
56a0: 2a 20 53 68 6f 72 74 20 61 6c 69 61 73 20 66 6f  * Short alias fo
56b0: 72 20 4f 62 6a 65 63 74 2e 67 65 74 4f 77 6e 50  r Object.getOwnP
56c0: 72 6f 70 65 72 74 79 44 65 73 63 72 69 70 74 6f  ropertyDescripto
56d0: 72 0a 20 20 20 2a 2f 0a 20 20 66 75 6e 63 74 69  r.   */.  functi
56e0: 6f 6e 20 67 65 74 50 72 6f 70 44 65 73 63 72 69  on getPropDescri
56f0: 70 74 6f 72 20 28 6f 2c 20 6b 29 20 7b 0a 20 20  ptor (o, k) {.  
5700: 20 20 72 65 74 75 72 6e 20 4f 62 6a 65 63 74 2e    return Object.
5710: 67 65 74 4f 77 6e 50 72 6f 70 65 72 74 79 44 65  getOwnPropertyDe
5720: 73 63 72 69 70 74 6f 72 28 6f 2c 20 6b 29 0a 20  scriptor(o, k). 
5730: 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 43   }..  /**.   * C
5740: 68 65 63 6b 20 69 66 20 70 61 73 73 65 64 20 61  heck if passed a
5750: 72 67 75 6d 65 6e 74 20 69 73 20 75 6e 64 65 66  rgument is undef
5760: 69 6e 65 64 0a 20 20 20 2a 20 40 70 61 72 61 6d  ined.   * @param
5770: 20 20 20 7b 20 2a 20 7d 20 76 61 6c 75 65 20 2d     { * } value -
5780: 0a 20 20 20 2a 20 40 72 65 74 75 72 6e 73 20 7b  .   * @returns {
5790: 20 42 6f 6f 6c 65 61 6e 20 7d 20 2d 0a 20 20 20   Boolean } -.   
57a0: 2a 2f 0a 20 20 66 75 6e 63 74 69 6f 6e 20 69 73  */.  function is
57b0: 55 6e 64 65 66 69 6e 65 64 28 76 61 6c 75 65 29  Undefined(value)
57c0: 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 74 79   {.    return ty
57d0: 70 65 6f 66 20 76 61 6c 75 65 20 3d 3d 3d 20 54  peof value === T
57e0: 5f 55 4e 44 45 46 0a 20 20 7d 0a 0a 20 20 2f 2a  _UNDEF.  }..  /*
57f0: 2a 0a 20 20 20 2a 20 43 68 65 63 6b 20 77 68 65  *.   * Check whe
5800: 74 68 65 72 20 6f 62 6a 65 63 74 27 73 20 70 72  ther object's pr
5810: 6f 70 65 72 74 79 20 63 6f 75 6c 64 20 62 65 20  operty could be 
5820: 6f 76 65 72 72 69 64 64 65 6e 0a 20 20 20 2a 20  overridden.   * 
5830: 40 70 61 72 61 6d 20 20 20 7b 20 4f 62 6a 65 63  @param   { Objec
5840: 74 20 7d 20 20 6f 62 6a 20 2d 20 73 6f 75 72 63  t }  obj - sourc
5850: 65 20 6f 62 6a 65 63 74 0a 20 20 20 2a 20 40 70  e object.   * @p
5860: 61 72 61 6d 20 20 20 7b 20 53 74 72 69 6e 67 20  aram   { String 
5870: 7d 20 20 6b 65 79 20 2d 20 6f 62 6a 65 63 74 20  }  key - object 
5880: 70 72 6f 70 65 72 74 79 0a 20 20 20 2a 20 40 72  property.   * @r
5890: 65 74 75 72 6e 73 20 7b 20 42 6f 6f 6c 65 61 6e  eturns { Boolean
58a0: 20 7d 20 74 72 75 65 20 69 66 20 77 72 69 74 61   } true if writa
58b0: 62 6c 65 0a 20 20 20 2a 2f 0a 20 20 66 75 6e 63  ble.   */.  func
58c0: 74 69 6f 6e 20 69 73 57 72 69 74 61 62 6c 65 28  tion isWritable(
58d0: 6f 62 6a 2c 20 6b 65 79 29 20 7b 0a 20 20 20 20  obj, key) {.    
58e0: 76 61 72 20 64 65 73 63 72 69 70 74 6f 72 20 3d  var descriptor =
58f0: 20 67 65 74 50 72 6f 70 44 65 73 63 72 69 70 74   getPropDescript
5900: 6f 72 28 6f 62 6a 2c 20 6b 65 79 29 3b 0a 20 20  or(obj, key);.  
5910: 20 20 72 65 74 75 72 6e 20 69 73 55 6e 64 65 66    return isUndef
5920: 69 6e 65 64 28 6f 62 6a 5b 6b 65 79 5d 29 20 7c  ined(obj[key]) |
5930: 7c 20 64 65 73 63 72 69 70 74 6f 72 20 26 26 20  | descriptor && 
5940: 64 65 73 63 72 69 70 74 6f 72 2e 77 72 69 74 61  descriptor.writa
5950: 62 6c 65 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20  ble.  }..  /**. 
5960: 20 20 2a 20 45 78 74 65 6e 64 20 61 6e 79 20 6f    * Extend any o
5970: 62 6a 65 63 74 20 77 69 74 68 20 6f 74 68 65 72  bject with other
5980: 20 70 72 6f 70 65 72 74 69 65 73 0a 20 20 20 2a   properties.   *
5990: 20 40 70 61 72 61 6d 20 20 20 7b 20 4f 62 6a 65   @param   { Obje
59a0: 63 74 20 7d 20 73 72 63 20 2d 20 73 6f 75 72 63  ct } src - sourc
59b0: 65 20 6f 62 6a 65 63 74 0a 20 20 20 2a 20 40 72  e object.   * @r
59c0: 65 74 75 72 6e 73 20 7b 20 4f 62 6a 65 63 74 20  eturns { Object 
59d0: 7d 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20  } the resulting 
59e0: 65 78 74 65 6e 64 65 64 20 6f 62 6a 65 63 74 0a  extended object.
59f0: 20 20 20 2a 0a 20 20 20 2a 20 76 61 72 20 6f 62     *.   * var ob
5a00: 6a 20 3d 20 7b 20 66 6f 6f 3a 20 27 62 61 7a 27  j = { foo: 'baz'
5a10: 20 7d 0a 20 20 20 2a 20 65 78 74 65 6e 64 28 6f   }.   * extend(o
5a20: 62 6a 2c 20 7b 62 61 72 3a 20 27 62 61 72 27 2c  bj, {bar: 'bar',
5a30: 20 66 6f 6f 3a 20 27 62 61 72 27 7d 29 0a 20 20   foo: 'bar'}).  
5a40: 20 2a 20 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 6f   * console.log(o
5a50: 62 6a 29 20 3d 3e 20 7b 62 61 72 3a 20 27 62 61  bj) => {bar: 'ba
5a60: 72 27 2c 20 66 6f 6f 3a 20 27 62 61 72 27 7d 0a  r', foo: 'bar'}.
5a70: 20 20 20 2a 0a 20 20 20 2a 2f 0a 20 20 66 75 6e     *.   */.  fun
5a80: 63 74 69 6f 6e 20 65 78 74 65 6e 64 28 73 72 63  ction extend(src
5a90: 29 20 7b 0a 20 20 20 20 76 61 72 20 6f 62 6a 3b  ) {.    var obj;
5aa0: 0a 20 20 20 20 76 61 72 20 69 20 3d 20 31 3b 0a  .    var i = 1;.
5ab0: 20 20 20 20 76 61 72 20 61 72 67 73 20 3d 20 61      var args = a
5ac0: 72 67 75 6d 65 6e 74 73 3b 0a 20 20 20 20 76 61  rguments;.    va
5ad0: 72 20 6c 20 3d 20 61 72 67 73 2e 6c 65 6e 67 74  r l = args.lengt
5ae0: 68 3b 0a 0a 20 20 20 20 66 6f 72 20 28 3b 20 69  h;..    for (; i
5af0: 20 3c 20 6c 3b 20 69 2b 2b 29 20 7b 0a 20 20 20   < l; i++) {.   
5b00: 20 20 20 69 66 20 28 6f 62 6a 20 3d 20 61 72 67     if (obj = arg
5b10: 73 5b 69 5d 29 20 7b 0a 20 20 20 20 20 20 20 20  s[i]) {.        
5b20: 66 6f 72 20 28 76 61 72 20 6b 65 79 20 69 6e 20  for (var key in 
5b30: 6f 62 6a 29 20 7b 0a 20 20 20 20 20 20 20 20 20  obj) {.         
5b40: 20 2f 2f 20 63 68 65 63 6b 20 69 66 20 74 68 69   // check if thi
5b50: 73 20 70 72 6f 70 65 72 74 79 20 6f 66 20 74 68  s property of th
5b60: 65 20 73 6f 75 72 63 65 20 6f 62 6a 65 63 74 20  e source object 
5b70: 63 6f 75 6c 64 20 62 65 20 6f 76 65 72 72 69 64  could be overrid
5b80: 64 65 6e 0a 20 20 20 20 20 20 20 20 20 20 69 66  den.          if
5b90: 20 28 69 73 57 72 69 74 61 62 6c 65 28 73 72 63   (isWritable(src
5ba0: 2c 20 6b 65 79 29 29 0a 20 20 20 20 20 20 20 20  , key)).        
5bb0: 20 20 20 20 7b 20 73 72 63 5b 6b 65 79 5d 20 3d      { src[key] =
5bc0: 20 6f 62 6a 5b 6b 65 79 5d 3b 20 7d 0a 20 20 20   obj[key]; }.   
5bd0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
5be0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
5bf0: 73 72 63 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20  src.  }..  /**. 
5c00: 20 20 2a 20 41 6c 69 61 73 20 66 6f 72 20 4f 62    * Alias for Ob
5c10: 6a 65 63 74 2e 63 72 65 61 74 65 0a 20 20 20 2a  ject.create.   *
5c20: 2f 0a 20 20 66 75 6e 63 74 69 6f 6e 20 63 72 65  /.  function cre
5c30: 61 74 65 28 73 72 63 29 20 7b 0a 20 20 20 20 72  ate(src) {.    r
5c40: 65 74 75 72 6e 20 4f 62 6a 65 63 74 2e 63 72 65  eturn Object.cre
5c50: 61 74 65 28 73 72 63 29 0a 20 20 7d 0a 0a 20 20  ate(src).  }..  
5c60: 76 61 72 20 73 65 74 74 69 6e 67 73 20 3d 20 65  var settings = e
5c70: 78 74 65 6e 64 28 63 72 65 61 74 65 28 62 72 61  xtend(create(bra
5c80: 63 6b 65 74 73 2e 73 65 74 74 69 6e 67 73 29 2c  ckets.settings),
5c90: 20 7b 0a 20 20 20 20 73 6b 69 70 41 6e 6f 6e 79   {.    skipAnony
5ca0: 6d 6f 75 73 54 61 67 73 3a 20 74 72 75 65 2c 0a  mousTags: true,.
5cb0: 20 20 20 20 2f 2f 20 74 68 65 20 22 76 61 6c 75      // the "valu
5cc0: 65 22 20 61 74 74 72 69 62 75 74 65 73 20 77 69  e" attributes wi
5cd0: 6c 6c 20 62 65 20 70 72 65 73 65 72 76 65 64 0a  ll be preserved.
5ce0: 20 20 20 20 6b 65 65 70 56 61 6c 75 65 41 74 74      keepValueAtt
5cf0: 72 69 62 75 74 65 73 3a 20 66 61 6c 73 65 2c 0a  ributes: false,.
5d00: 20 20 20 20 2f 2f 20 68 61 6e 64 6c 65 20 74 68      // handle th
5d10: 65 20 61 75 74 6f 20 75 70 64 61 74 65 73 20 6f  e auto updates o
5d20: 6e 20 61 6e 79 20 44 4f 4d 20 65 76 65 6e 74 0a  n any DOM event.
5d30: 20 20 20 20 61 75 74 6f 55 70 64 61 74 65 3a 20      autoUpdate: 
5d40: 74 72 75 65 0a 20 20 7d 29 3b 0a 0a 20 20 2f 2a  true.  });..  /*
5d50: 2a 0a 20 20 20 2a 20 53 68 6f 72 74 65 72 20 61  *.   * Shorter a
5d60: 6e 64 20 66 61 73 74 20 77 61 79 20 74 6f 20 73  nd fast way to s
5d70: 65 6c 65 63 74 20 6d 75 6c 74 69 70 6c 65 20 6e  elect multiple n
5d80: 6f 64 65 73 20 69 6e 20 74 68 65 20 44 4f 4d 0a  odes in the DOM.
5d90: 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20     * @param   { 
5da0: 53 74 72 69 6e 67 20 7d 20 73 65 6c 65 63 74 6f  String } selecto
5db0: 72 20 2d 20 44 4f 4d 20 73 65 6c 65 63 74 6f 72  r - DOM selector
5dc0: 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20 7b  .   * @param   {
5dd0: 20 4f 62 6a 65 63 74 20 7d 20 63 74 78 20 2d 20   Object } ctx - 
5de0: 44 4f 4d 20 6e 6f 64 65 20 77 68 65 72 65 20 74  DOM node where t
5df0: 68 65 20 74 61 72 67 65 74 73 20 6f 66 20 6f 75  he targets of ou
5e00: 72 20 73 65 61 72 63 68 20 77 69 6c 6c 20 69 73  r search will is
5e10: 20 6c 6f 63 61 74 65 64 0a 20 20 20 2a 20 40 72   located.   * @r
5e20: 65 74 75 72 6e 73 20 7b 20 4f 62 6a 65 63 74 20  eturns { Object 
5e30: 7d 20 64 6f 6d 20 6e 6f 64 65 73 20 66 6f 75 6e  } dom nodes foun
5e40: 64 0a 20 20 20 2a 2f 0a 20 20 66 75 6e 63 74 69  d.   */.  functi
5e50: 6f 6e 20 24 24 28 73 65 6c 65 63 74 6f 72 2c 20  on $$(selector, 
5e60: 63 74 78 29 20 7b 0a 20 20 20 20 72 65 74 75 72  ctx) {.    retur
5e70: 6e 20 5b 5d 2e 73 6c 69 63 65 2e 63 61 6c 6c 28  n [].slice.call(
5e80: 28 63 74 78 20 7c 7c 20 64 6f 63 75 6d 65 6e 74  (ctx || document
5e90: 29 2e 71 75 65 72 79 53 65 6c 65 63 74 6f 72 41  ).querySelectorA
5ea0: 6c 6c 28 73 65 6c 65 63 74 6f 72 29 29 0a 20 20  ll(selector)).  
5eb0: 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 43 72  }..  /**.   * Cr
5ec0: 65 61 74 65 20 61 20 64 6f 63 75 6d 65 6e 74 20  eate a document 
5ed0: 74 65 78 74 20 6e 6f 64 65 0a 20 20 20 2a 20 40  text node.   * @
5ee0: 72 65 74 75 72 6e 73 20 7b 20 4f 62 6a 65 63 74  returns { Object
5ef0: 20 7d 20 63 72 65 61 74 65 20 61 20 74 65 78 74   } create a text
5f00: 20 6e 6f 64 65 20 74 6f 20 75 73 65 20 61 73 20   node to use as 
5f10: 70 6c 61 63 65 68 6f 6c 64 65 72 0a 20 20 20 2a  placeholder.   *
5f20: 2f 0a 20 20 66 75 6e 63 74 69 6f 6e 20 63 72 65  /.  function cre
5f30: 61 74 65 44 4f 4d 50 6c 61 63 65 68 6f 6c 64 65  ateDOMPlaceholde
5f40: 72 28 29 20 7b 0a 20 20 20 20 72 65 74 75 72 6e  r() {.    return
5f50: 20 64 6f 63 75 6d 65 6e 74 2e 63 72 65 61 74 65   document.create
5f60: 54 65 78 74 4e 6f 64 65 28 27 27 29 0a 20 20 7d  TextNode('').  }
5f70: 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 54 6f 67  ..  /**.   * Tog
5f80: 67 6c 65 20 74 68 65 20 76 69 73 69 62 69 6c 69  gle the visibili
5f90: 74 79 20 6f 66 20 61 6e 79 20 44 4f 4d 20 6e 6f  ty of any DOM no
5fa0: 64 65 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20  de.   * @param  
5fb0: 20 7b 20 4f 62 6a 65 63 74 20 7d 20 20 64 6f 6d   { Object }  dom
5fc0: 20 2d 20 44 4f 4d 20 6e 6f 64 65 20 77 65 20 77   - DOM node we w
5fd0: 61 6e 74 20 74 6f 20 68 69 64 65 0a 20 20 20 2a  ant to hide.   *
5fe0: 20 40 70 61 72 61 6d 20 20 20 7b 20 42 6f 6f 6c   @param   { Bool
5ff0: 65 61 6e 20 7d 20 73 68 6f 77 20 2d 20 64 6f 20  ean } show - do 
6000: 77 65 20 77 61 6e 74 20 74 6f 20 73 68 6f 77 20  we want to show 
6010: 69 74 3f 0a 20 20 20 2a 2f 0a 0a 20 20 66 75 6e  it?.   */..  fun
6020: 63 74 69 6f 6e 20 74 6f 67 67 6c 65 56 69 73 69  ction toggleVisi
6030: 62 69 6c 69 74 79 28 64 6f 6d 2c 20 73 68 6f 77  bility(dom, show
6040: 29 20 7b 0a 20 20 20 20 64 6f 6d 2e 73 74 79 6c  ) {.    dom.styl
6050: 65 2e 64 69 73 70 6c 61 79 20 3d 20 73 68 6f 77  e.display = show
6060: 20 3f 20 27 27 20 3a 20 27 6e 6f 6e 65 27 3b 0a   ? '' : 'none';.
6070: 20 20 20 20 64 6f 6d 2e 68 69 64 64 65 6e 20 3d      dom.hidden =
6080: 20 73 68 6f 77 20 3f 20 66 61 6c 73 65 20 3a 20   show ? false : 
6090: 74 72 75 65 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 2a  true;.  }..  /**
60a0: 0a 20 20 20 2a 20 47 65 74 20 74 68 65 20 76 61  .   * Get the va
60b0: 6c 75 65 20 6f 66 20 61 6e 79 20 44 4f 4d 20 61  lue of any DOM a
60c0: 74 74 72 69 62 75 74 65 20 6f 6e 20 61 20 6e 6f  ttribute on a no
60d0: 64 65 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20  de.   * @param  
60e0: 20 7b 20 4f 62 6a 65 63 74 20 7d 20 64 6f 6d 20   { Object } dom 
60f0: 2d 20 44 4f 4d 20 6e 6f 64 65 20 77 65 20 77 61  - DOM node we wa
6100: 6e 74 20 74 6f 20 70 61 72 73 65 0a 20 20 20 2a  nt to parse.   *
6110: 20 40 70 61 72 61 6d 20 20 20 7b 20 53 74 72 69   @param   { Stri
6120: 6e 67 20 7d 20 6e 61 6d 65 20 2d 20 6e 61 6d 65  ng } name - name
6130: 20 6f 66 20 74 68 65 20 61 74 74 72 69 62 75 74   of the attribut
6140: 65 20 77 65 20 77 61 6e 74 20 74 6f 20 67 65 74  e we want to get
6150: 0a 20 20 20 2a 20 40 72 65 74 75 72 6e 73 20 7b  .   * @returns {
6160: 20 53 74 72 69 6e 67 20 7c 20 75 6e 64 65 66 69   String | undefi
6170: 6e 65 64 20 7d 20 6e 61 6d 65 20 6f 66 20 74 68  ned } name of th
6180: 65 20 6e 6f 64 65 20 61 74 74 72 69 62 75 74 65  e node attribute
6190: 20 77 68 65 74 68 65 72 20 69 74 20 65 78 69 73   whether it exis
61a0: 74 73 0a 20 20 20 2a 2f 0a 20 20 66 75 6e 63 74  ts.   */.  funct
61b0: 69 6f 6e 20 67 65 74 41 74 74 72 69 62 75 74 65  ion getAttribute
61c0: 28 64 6f 6d 2c 20 6e 61 6d 65 29 20 7b 0a 20 20  (dom, name) {.  
61d0: 20 20 72 65 74 75 72 6e 20 64 6f 6d 2e 67 65 74    return dom.get
61e0: 41 74 74 72 69 62 75 74 65 28 6e 61 6d 65 29 0a  Attribute(name).
61f0: 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20    }..  /**.   * 
6200: 52 65 6d 6f 76 65 20 61 6e 79 20 44 4f 4d 20 61  Remove any DOM a
6210: 74 74 72 69 62 75 74 65 20 66 72 6f 6d 20 61 20  ttribute from a 
6220: 6e 6f 64 65 0a 20 20 20 2a 20 40 70 61 72 61 6d  node.   * @param
6230: 20 20 20 7b 20 4f 62 6a 65 63 74 20 7d 20 64 6f     { Object } do
6240: 6d 20 2d 20 44 4f 4d 20 6e 6f 64 65 20 77 65 20  m - DOM node we 
6250: 77 61 6e 74 20 74 6f 20 75 70 64 61 74 65 0a 20  want to update. 
6260: 20 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 53    * @param   { S
6270: 74 72 69 6e 67 20 7d 20 6e 61 6d 65 20 2d 20 6e  tring } name - n
6280: 61 6d 65 20 6f 66 20 74 68 65 20 70 72 6f 70 65  ame of the prope
6290: 72 74 79 20 77 65 20 77 61 6e 74 20 74 6f 20 72  rty we want to r
62a0: 65 6d 6f 76 65 0a 20 20 20 2a 2f 0a 20 20 66 75  emove.   */.  fu
62b0: 6e 63 74 69 6f 6e 20 72 65 6d 6f 76 65 41 74 74  nction removeAtt
62c0: 72 69 62 75 74 65 28 64 6f 6d 2c 20 6e 61 6d 65  ribute(dom, name
62d0: 29 20 7b 0a 20 20 20 20 64 6f 6d 2e 72 65 6d 6f  ) {.    dom.remo
62e0: 76 65 41 74 74 72 69 62 75 74 65 28 6e 61 6d 65  veAttribute(name
62f0: 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20  );.  }..  /**.  
6300: 20 2a 20 53 65 74 20 74 68 65 20 69 6e 6e 65 72   * Set the inner
6310: 20 68 74 6d 6c 20 6f 66 20 61 6e 79 20 44 4f 4d   html of any DOM
6320: 20 6e 6f 64 65 20 53 56 47 73 20 69 6e 63 6c 75   node SVGs inclu
6330: 64 65 64 0a 20 20 20 2a 20 40 70 61 72 61 6d 20  ded.   * @param 
6340: 7b 20 4f 62 6a 65 63 74 20 7d 20 63 6f 6e 74 61  { Object } conta
6350: 69 6e 65 72 20 2d 20 44 4f 4d 20 6e 6f 64 65 20  iner - DOM node 
6360: 77 68 65 72 65 20 77 65 27 6c 6c 20 69 6e 6a 65  where we'll inje
6370: 63 74 20 6e 65 77 20 68 74 6d 6c 0a 20 20 20 2a  ct new html.   *
6380: 20 40 70 61 72 61 6d 20 7b 20 53 74 72 69 6e 67   @param { String
6390: 20 7d 20 68 74 6d 6c 20 2d 20 68 74 6d 6c 20 74   } html - html t
63a0: 6f 20 69 6e 6a 65 63 74 0a 20 20 20 2a 20 40 70  o inject.   * @p
63b0: 61 72 61 6d 20 7b 20 42 6f 6f 6c 65 61 6e 20 7d  aram { Boolean }
63c0: 20 69 73 53 76 67 20 2d 20 73 76 67 20 74 61 67   isSvg - svg tag
63d0: 73 20 73 68 6f 75 6c 64 20 62 65 20 74 72 65 61  s should be trea
63e0: 74 65 64 20 61 20 62 69 74 20 64 69 66 66 65 72  ted a bit differ
63f0: 65 6e 74 6c 79 0a 20 20 20 2a 2f 0a 20 20 2f 2a  ently.   */.  /*
6400: 20 69 73 74 61 6e 62 75 6c 20 69 67 6e 6f 72 65   istanbul ignore
6410: 20 6e 65 78 74 20 2a 2f 0a 20 20 66 75 6e 63 74   next */.  funct
6420: 69 6f 6e 20 73 65 74 49 6e 6e 65 72 48 54 4d 4c  ion setInnerHTML
6430: 28 63 6f 6e 74 61 69 6e 65 72 2c 20 68 74 6d 6c  (container, html
6440: 2c 20 69 73 53 76 67 29 20 7b 0a 20 20 20 20 2f  , isSvg) {.    /
6450: 2f 20 69 6e 6e 65 72 48 54 4d 4c 20 69 73 20 6e  / innerHTML is n
6460: 6f 74 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20  ot supported on 
6470: 73 76 67 20 74 61 67 73 20 73 6f 20 77 65 20 6e  svg tags so we n
6480: 65 65 74 20 74 6f 20 74 72 65 61 74 20 74 68 65  eet to treat the
6490: 6d 20 64 69 66 66 65 72 65 6e 74 6c 79 0a 20 20  m differently.  
64a0: 20 20 69 66 20 28 69 73 53 76 67 29 20 7b 0a 20    if (isSvg) {. 
64b0: 20 20 20 20 20 76 61 72 20 6e 6f 64 65 20 3d 20       var node = 
64c0: 63 6f 6e 74 61 69 6e 65 72 2e 6f 77 6e 65 72 44  container.ownerD
64d0: 6f 63 75 6d 65 6e 74 2e 69 6d 70 6f 72 74 4e 6f  ocument.importNo
64e0: 64 65 28 0a 20 20 20 20 20 20 20 20 6e 65 77 20  de(.        new 
64f0: 44 4f 4d 50 61 72 73 65 72 28 29 0a 20 20 20 20  DOMParser().    
6500: 20 20 20 20 20 20 2e 70 61 72 73 65 46 72 6f 6d        .parseFrom
6510: 53 74 72 69 6e 67 28 28 22 3c 73 76 67 20 78 6d  String(("<svg xm
6520: 6c 6e 73 3d 5c 22 22 20 2b 20 53 56 47 5f 4e 53  lns=\"" + SVG_NS
6530: 20 2b 20 22 5c 22 3e 22 20 2b 20 68 74 6d 6c 20   + "\">" + html 
6540: 2b 20 22 3c 2f 73 76 67 3e 22 29 2c 20 27 61 70  + "</svg>"), 'ap
6550: 70 6c 69 63 61 74 69 6f 6e 2f 78 6d 6c 27 29 0a  plication/xml').
6560: 20 20 20 20 20 20 20 20 20 20 2e 64 6f 63 75 6d            .docum
6570: 65 6e 74 45 6c 65 6d 65 6e 74 2c 0a 20 20 20 20  entElement,.    
6580: 20 20 20 20 74 72 75 65 0a 20 20 20 20 20 20 29      true.      )
6590: 3b 0a 0a 20 20 20 20 20 20 63 6f 6e 74 61 69 6e  ;..      contain
65a0: 65 72 2e 61 70 70 65 6e 64 43 68 69 6c 64 28 6e  er.appendChild(n
65b0: 6f 64 65 29 3b 0a 20 20 20 20 7d 20 65 6c 73 65  ode);.    } else
65c0: 20 7b 0a 20 20 20 20 20 20 63 6f 6e 74 61 69 6e   {.      contain
65d0: 65 72 2e 69 6e 6e 65 72 48 54 4d 4c 20 3d 20 68  er.innerHTML = h
65e0: 74 6d 6c 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  tml;.    }.  }..
65f0: 20 20 2f 2a 2a 0a 20 20 20 2a 20 4d 69 6e 69 6d    /**.   * Minim
6600: 69 7a 65 20 72 69 73 6b 3a 20 6f 6e 6c 79 20 7a  ize risk: only z
6610: 65 72 6f 20 6f 72 20 6f 6e 65 20 5f 73 70 61 63  ero or one _spac
6620: 65 5f 20 62 65 74 77 65 65 6e 20 61 74 74 72 20  e_ between attr 
6630: 26 20 76 61 6c 75 65 0a 20 20 20 2a 20 40 70 61  & value.   * @pa
6640: 72 61 6d 20 20 20 7b 20 53 74 72 69 6e 67 20 7d  ram   { String }
6650: 20 20 20 68 74 6d 6c 20 2d 20 68 74 6d 6c 20 73     html - html s
6660: 74 72 69 6e 67 20 77 65 20 77 61 6e 74 20 74 6f  tring we want to
6670: 20 70 61 72 73 65 0a 20 20 20 2a 20 40 70 61 72   parse.   * @par
6680: 61 6d 20 20 20 7b 20 46 75 6e 63 74 69 6f 6e 20  am   { Function 
6690: 7d 20 66 6e 20 2d 20 63 61 6c 6c 62 61 63 6b 20  } fn - callback 
66a0: 66 75 6e 63 74 69 6f 6e 20 74 6f 20 61 70 70 6c  function to appl
66b0: 79 20 6f 6e 20 61 6e 79 20 61 74 74 72 69 62 75  y on any attribu
66c0: 74 65 20 66 6f 75 6e 64 0a 20 20 20 2a 2f 0a 20  te found.   */. 
66d0: 20 66 75 6e 63 74 69 6f 6e 20 77 61 6c 6b 41 74   function walkAt
66e0: 74 72 69 62 75 74 65 73 28 68 74 6d 6c 2c 20 66  tributes(html, f
66f0: 6e 29 20 7b 0a 20 20 20 20 69 66 20 28 21 68 74  n) {.    if (!ht
6700: 6d 6c 29 20 7b 20 72 65 74 75 72 6e 20 7d 0a 20  ml) { return }. 
6710: 20 20 20 76 61 72 20 6d 3b 0a 20 20 20 20 77 68     var m;.    wh
6720: 69 6c 65 20 28 6d 20 3d 20 52 45 5f 48 54 4d 4c  ile (m = RE_HTML
6730: 5f 41 54 54 52 53 2e 65 78 65 63 28 68 74 6d 6c  _ATTRS.exec(html
6740: 29 29 0a 20 20 20 20 20 20 7b 20 66 6e 28 6d 5b  )).      { fn(m[
6750: 31 5d 2e 74 6f 4c 6f 77 65 72 43 61 73 65 28 29  1].toLowerCase()
6760: 2c 20 6d 5b 32 5d 20 7c 7c 20 6d 5b 33 5d 20 7c  , m[2] || m[3] |
6770: 7c 20 6d 5b 34 5d 29 3b 20 7d 0a 20 20 7d 0a 0a  | m[4]); }.  }..
6780: 20 20 2f 2a 2a 0a 20 20 20 2a 20 43 72 65 61 74    /**.   * Creat
6790: 65 20 61 20 64 6f 63 75 6d 65 6e 74 20 66 72 61  e a document fra
67a0: 67 6d 65 6e 74 0a 20 20 20 2a 20 40 72 65 74 75  gment.   * @retu
67b0: 72 6e 73 20 7b 20 4f 62 6a 65 63 74 20 7d 20 64  rns { Object } d
67c0: 6f 63 75 6d 65 6e 74 20 66 72 61 67 6d 65 6e 74  ocument fragment
67d0: 0a 20 20 20 2a 2f 0a 20 20 66 75 6e 63 74 69 6f  .   */.  functio
67e0: 6e 20 63 72 65 61 74 65 46 72 61 67 6d 65 6e 74  n createFragment
67f0: 28 29 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  () {.    return 
6800: 64 6f 63 75 6d 65 6e 74 2e 63 72 65 61 74 65 44  document.createD
6810: 6f 63 75 6d 65 6e 74 46 72 61 67 6d 65 6e 74 28  ocumentFragment(
6820: 29 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20  ).  }..  /**.   
6830: 2a 20 49 6e 73 65 72 74 20 73 61 66 65 6c 79 20  * Insert safely 
6840: 61 20 74 61 67 20 74 6f 20 66 69 78 20 23 31 39  a tag to fix #19
6850: 36 32 20 23 31 36 34 39 0a 20 20 20 2a 20 40 70  62 #1649.   * @p
6860: 61 72 61 6d 20 20 20 7b 20 48 54 4d 4c 45 6c 65  aram   { HTMLEle
6870: 6d 65 6e 74 20 7d 20 72 6f 6f 74 20 2d 20 63 68  ment } root - ch
6880: 69 6c 64 72 65 6e 20 63 6f 6e 74 61 69 6e 65 72  ildren container
6890: 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20 7b  .   * @param   {
68a0: 20 48 54 4d 4c 45 6c 65 6d 65 6e 74 20 7d 20 63   HTMLElement } c
68b0: 75 72 72 20 2d 20 6e 6f 64 65 20 74 6f 20 69 6e  urr - node to in
68c0: 73 65 72 74 0a 20 20 20 2a 20 40 70 61 72 61 6d  sert.   * @param
68d0: 20 20 20 7b 20 48 54 4d 4c 45 6c 65 6d 65 6e 74     { HTMLElement
68e0: 20 7d 20 6e 65 78 74 20 2d 20 6e 6f 64 65 20 74   } next - node t
68f0: 68 61 74 20 73 68 6f 75 6c 64 20 70 72 65 63 65  hat should prece
6900: 65 64 20 74 68 65 20 63 75 72 72 65 6e 74 20 6e  ed the current n
6910: 6f 64 65 20 69 6e 73 65 72 74 65 64 0a 20 20 20  ode inserted.   
6920: 2a 2f 0a 20 20 66 75 6e 63 74 69 6f 6e 20 73 61  */.  function sa
6930: 66 65 49 6e 73 65 72 74 28 72 6f 6f 74 2c 20 63  feInsert(root, c
6940: 75 72 72 2c 20 6e 65 78 74 29 20 7b 0a 20 20 20  urr, next) {.   
6950: 20 72 6f 6f 74 2e 69 6e 73 65 72 74 42 65 66 6f   root.insertBefo
6960: 72 65 28 63 75 72 72 2c 20 6e 65 78 74 2e 70 61  re(curr, next.pa
6970: 72 65 6e 74 4e 6f 64 65 20 26 26 20 6e 65 78 74  rentNode && next
6980: 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20  );.  }..  /**.  
6990: 20 2a 20 43 6f 6e 76 65 72 74 20 61 20 73 74 79   * Convert a sty
69a0: 6c 65 20 6f 62 6a 65 63 74 20 74 6f 20 61 20 73  le object to a s
69b0: 74 72 69 6e 67 0a 20 20 20 2a 20 40 70 61 72 61  tring.   * @para
69c0: 6d 20 20 20 7b 20 4f 62 6a 65 63 74 20 7d 20 73  m   { Object } s
69d0: 74 79 6c 65 20 2d 20 73 74 79 6c 65 20 6f 62 6a  tyle - style obj
69e0: 65 63 74 20 77 65 20 6e 65 65 64 20 74 6f 20 70  ect we need to p
69f0: 61 72 73 65 0a 20 20 20 2a 20 40 72 65 74 75 72  arse.   * @retur
6a00: 6e 73 20 7b 20 53 74 72 69 6e 67 20 7d 20 72 65  ns { String } re
6a10: 73 75 6c 74 69 6e 67 20 63 73 73 20 73 74 72 69  sulting css stri
6a20: 6e 67 0a 20 20 20 2a 20 40 65 78 61 6d 70 6c 65  ng.   * @example
6a30: 0a 20 20 20 2a 20 73 74 79 6c 65 4f 62 6a 65 63  .   * styleObjec
6a40: 74 54 6f 53 74 72 69 6e 67 28 7b 20 63 6f 6c 6f  tToString({ colo
6a50: 72 3a 20 27 72 65 64 27 2c 20 68 65 69 67 68 74  r: 'red', height
6a60: 3a 20 27 31 30 70 78 27 7d 29 20 2f 2f 20 3d 3e  : '10px'}) // =>
6a70: 20 27 63 6f 6c 6f 72 3a 20 72 65 64 3b 20 68 65   'color: red; he
6a80: 69 67 68 74 3a 20 31 30 70 78 27 0a 20 20 20 2a  ight: 10px'.   *
6a90: 2f 0a 20 20 66 75 6e 63 74 69 6f 6e 20 73 74 79  /.  function sty
6aa0: 6c 65 4f 62 6a 65 63 74 54 6f 53 74 72 69 6e 67  leObjectToString
6ab0: 28 73 74 79 6c 65 29 20 7b 0a 20 20 20 20 72 65  (style) {.    re
6ac0: 74 75 72 6e 20 4f 62 6a 65 63 74 2e 6b 65 79 73  turn Object.keys
6ad0: 28 73 74 79 6c 65 29 2e 72 65 64 75 63 65 28 66  (style).reduce(f
6ae0: 75 6e 63 74 69 6f 6e 20 28 61 63 63 2c 20 70 72  unction (acc, pr
6af0: 6f 70 29 20 7b 0a 20 20 20 20 20 20 72 65 74 75  op) {.      retu
6b00: 72 6e 20 28 61 63 63 20 2b 20 22 20 22 20 2b 20  rn (acc + " " + 
6b10: 70 72 6f 70 20 2b 20 22 3a 20 22 20 2b 20 28 73  prop + ": " + (s
6b20: 74 79 6c 65 5b 70 72 6f 70 5d 29 20 2b 20 22 3b  tyle[prop]) + ";
6b30: 22 29 0a 20 20 20 20 7d 2c 20 27 27 29 0a 20 20  ").    }, '').  
6b40: 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 57 61  }..  /**.   * Wa
6b50: 6c 6b 20 64 6f 77 6e 20 72 65 63 75 72 73 69 76  lk down recursiv
6b60: 65 6c 79 20 61 6c 6c 20 74 68 65 20 63 68 69 6c  ely all the chil
6b70: 64 72 65 6e 20 74 61 67 73 20 73 74 61 72 74 69  dren tags starti
6b80: 6e 67 20 64 6f 6d 20 6e 6f 64 65 0a 20 20 20 2a  ng dom node.   *
6b90: 20 40 70 61 72 61 6d 20 20 20 7b 20 4f 62 6a 65   @param   { Obje
6ba0: 63 74 20 7d 20 20 20 64 6f 6d 20 2d 20 73 74 61  ct }   dom - sta
6bb0: 72 74 69 6e 67 20 6e 6f 64 65 20 77 68 65 72 65  rting node where
6bc0: 20 77 65 20 77 69 6c 6c 20 73 74 61 72 74 20 74   we will start t
6bd0: 68 65 20 72 65 63 75 72 73 69 6f 6e 0a 20 20 20  he recursion.   
6be0: 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 46 75 6e  * @param   { Fun
6bf0: 63 74 69 6f 6e 20 7d 20 66 6e 20 2d 20 63 61 6c  ction } fn - cal
6c00: 6c 62 61 63 6b 20 74 6f 20 74 72 61 6e 73 66 6f  lback to transfo
6c10: 72 6d 20 74 68 65 20 63 68 69 6c 64 20 6e 6f 64  rm the child nod
6c20: 65 20 6a 75 73 74 20 66 6f 75 6e 64 0a 20 20 20  e just found.   
6c30: 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 4f 62 6a  * @param   { Obj
6c40: 65 63 74 20 7d 20 20 20 63 6f 6e 74 65 78 74 20  ect }   context 
6c50: 2d 20 66 6e 20 63 61 6e 20 6f 70 74 69 6f 6e 61  - fn can optiona
6c60: 6c 6c 79 20 72 65 74 75 72 6e 20 61 6e 20 6f 62  lly return an ob
6c70: 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73 20 70  ject, which is p
6c80: 61 73 73 65 64 20 74 6f 20 63 68 69 6c 64 72 65  assed to childre
6c90: 6e 0a 20 20 20 2a 2f 0a 20 20 66 75 6e 63 74 69  n.   */.  functi
6ca0: 6f 6e 20 77 61 6c 6b 4e 6f 64 65 73 28 64 6f 6d  on walkNodes(dom
6cb0: 2c 20 66 6e 2c 20 63 6f 6e 74 65 78 74 29 20 7b  , fn, context) {
6cc0: 0a 20 20 20 20 69 66 20 28 64 6f 6d 29 20 7b 0a  .    if (dom) {.
6cd0: 20 20 20 20 20 20 76 61 72 20 72 65 73 20 3d 20        var res = 
6ce0: 66 6e 28 64 6f 6d 2c 20 63 6f 6e 74 65 78 74 29  fn(dom, context)
6cf0: 3b 0a 20 20 20 20 20 20 76 61 72 20 6e 65 78 74  ;.      var next
6d00: 3b 0a 20 20 20 20 20 20 2f 2f 20 73 74 6f 70 20  ;.      // stop 
6d10: 74 68 65 20 72 65 63 75 72 73 69 6f 6e 0a 20 20  the recursion.  
6d20: 20 20 20 20 69 66 20 28 72 65 73 20 3d 3d 3d 20      if (res === 
6d30: 66 61 6c 73 65 29 20 7b 20 72 65 74 75 72 6e 20  false) { return 
6d40: 7d 0a 0a 20 20 20 20 20 20 64 6f 6d 20 3d 20 64  }..      dom = d
6d50: 6f 6d 2e 66 69 72 73 74 43 68 69 6c 64 3b 0a 0a  om.firstChild;..
6d60: 20 20 20 20 20 20 77 68 69 6c 65 20 28 64 6f 6d        while (dom
6d70: 29 20 7b 0a 20 20 20 20 20 20 20 20 6e 65 78 74  ) {.        next
6d80: 20 3d 20 64 6f 6d 2e 6e 65 78 74 53 69 62 6c 69   = dom.nextSibli
6d90: 6e 67 3b 0a 20 20 20 20 20 20 20 20 77 61 6c 6b  ng;.        walk
6da0: 4e 6f 64 65 73 28 64 6f 6d 2c 20 66 6e 2c 20 72  Nodes(dom, fn, r
6db0: 65 73 29 3b 0a 20 20 20 20 20 20 20 20 64 6f 6d  es);.        dom
6dc0: 20 3d 20 6e 65 78 74 3b 0a 20 20 20 20 20 20 7d   = next;.      }
6dd0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 0a 0a 20 20  .    }.  }....  
6de0: 76 61 72 20 64 6f 6d 20 3d 20 2f 2a 23 5f 5f 50  var dom = /*#__P
6df0: 55 52 45 5f 5f 2a 2f 4f 62 6a 65 63 74 2e 66 72  URE__*/Object.fr
6e00: 65 65 7a 65 28 7b 0a 20 20 20 20 24 24 3a 20 24  eeze({.    $$: $
6e10: 24 2c 0a 20 20 20 20 24 3a 20 24 2c 0a 20 20 20  $,.    $: $,.   
6e20: 20 63 72 65 61 74 65 44 4f 4d 50 6c 61 63 65 68   createDOMPlaceh
6e30: 6f 6c 64 65 72 3a 20 63 72 65 61 74 65 44 4f 4d  older: createDOM
6e40: 50 6c 61 63 65 68 6f 6c 64 65 72 2c 0a 20 20 20  Placeholder,.   
6e50: 20 6d 6b 45 6c 3a 20 6d 61 6b 65 45 6c 65 6d 65   mkEl: makeEleme
6e60: 6e 74 2c 0a 20 20 20 20 73 65 74 41 74 74 72 3a  nt,.    setAttr:
6e70: 20 73 65 74 41 74 74 72 69 62 75 74 65 2c 0a 20   setAttribute,. 
6e80: 20 20 20 74 6f 67 67 6c 65 56 69 73 69 62 69 6c     toggleVisibil
6e90: 69 74 79 3a 20 74 6f 67 67 6c 65 56 69 73 69 62  ity: toggleVisib
6ea0: 69 6c 69 74 79 2c 0a 20 20 20 20 67 65 74 41 74  ility,.    getAt
6eb0: 74 72 3a 20 67 65 74 41 74 74 72 69 62 75 74 65  tr: getAttribute
6ec0: 2c 0a 20 20 20 20 72 65 6d 41 74 74 72 3a 20 72  ,.    remAttr: r
6ed0: 65 6d 6f 76 65 41 74 74 72 69 62 75 74 65 2c 0a  emoveAttribute,.
6ee0: 20 20 20 20 73 65 74 49 6e 6e 65 72 48 54 4d 4c      setInnerHTML
6ef0: 3a 20 73 65 74 49 6e 6e 65 72 48 54 4d 4c 2c 0a  : setInnerHTML,.
6f00: 20 20 20 20 77 61 6c 6b 41 74 74 72 73 3a 20 77      walkAttrs: w
6f10: 61 6c 6b 41 74 74 72 69 62 75 74 65 73 2c 0a 20  alkAttributes,. 
6f20: 20 20 20 63 72 65 61 74 65 46 72 61 67 3a 20 63     createFrag: c
6f30: 72 65 61 74 65 46 72 61 67 6d 65 6e 74 2c 0a 20  reateFragment,. 
6f40: 20 20 20 73 61 66 65 49 6e 73 65 72 74 3a 20 73     safeInsert: s
6f50: 61 66 65 49 6e 73 65 72 74 2c 0a 20 20 20 20 73  afeInsert,.    s
6f60: 74 79 6c 65 4f 62 6a 65 63 74 54 6f 53 74 72 69  tyleObjectToStri
6f70: 6e 67 3a 20 73 74 79 6c 65 4f 62 6a 65 63 74 54  ng: styleObjectT
6f80: 6f 53 74 72 69 6e 67 2c 0a 20 20 20 20 77 61 6c  oString,.    wal
6f90: 6b 4e 6f 64 65 73 3a 20 77 61 6c 6b 4e 6f 64 65  kNodes: walkNode
6fa0: 73 0a 20 20 7d 29 3b 0a 0a 20 20 2f 2a 2a 0a 20  s.  });..  /**. 
6fb0: 20 20 2a 20 43 68 65 63 6b 20 61 67 61 69 6e 73    * Check agains
6fc0: 74 20 74 68 65 20 6e 75 6c 6c 20 61 6e 64 20 75  t the null and u
6fd0: 6e 64 65 66 69 6e 65 64 20 76 61 6c 75 65 73 0a  ndefined values.
6fe0: 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20     * @param   { 
6ff0: 2a 20 7d 20 20 76 61 6c 75 65 20 2d 0a 20 20 20  * }  value -.   
7000: 2a 20 40 72 65 74 75 72 6e 73 20 7b 42 6f 6f 6c  * @returns {Bool
7010: 65 61 6e 7d 20 2d 0a 20 20 20 2a 2f 0a 20 20 66  ean} -.   */.  f
7020: 75 6e 63 74 69 6f 6e 20 69 73 4e 69 6c 28 76 61  unction isNil(va
7030: 6c 75 65 29 20 7b 0a 20 20 20 20 72 65 74 75 72  lue) {.    retur
7040: 6e 20 69 73 55 6e 64 65 66 69 6e 65 64 28 76 61  n isUndefined(va
7050: 6c 75 65 29 20 7c 7c 20 76 61 6c 75 65 20 3d 3d  lue) || value ==
7060: 3d 20 6e 75 6c 6c 0a 20 20 7d 0a 0a 20 20 2f 2a  = null.  }..  /*
7070: 2a 0a 20 20 20 2a 20 43 68 65 63 6b 20 69 66 20  *.   * Check if 
7080: 70 61 73 73 65 64 20 61 72 67 75 6d 65 6e 74 20  passed argument 
7090: 69 73 20 65 6d 70 74 79 2e 20 44 69 66 66 65 72  is empty. Differ
70a0: 65 6e 74 20 66 72 6f 6d 20 66 61 6c 73 79 2c 20  ent from falsy, 
70b0: 62 65 63 61 75 73 65 20 77 65 20 64 6f 6e 74 20  because we dont 
70c0: 63 6f 6e 73 69 64 65 72 20 30 20 6f 72 20 66 61  consider 0 or fa
70d0: 6c 73 65 20 74 6f 20 62 65 20 62 6c 61 6e 6b 0a  lse to be blank.
70e0: 20 20 20 2a 20 40 70 61 72 61 6d 20 7b 20 2a 20     * @param { * 
70f0: 7d 20 76 61 6c 75 65 20 2d 0a 20 20 20 2a 20 40  } value -.   * @
7100: 72 65 74 75 72 6e 73 20 7b 20 42 6f 6f 6c 65 61  returns { Boolea
7110: 6e 20 7d 20 2d 0a 20 20 20 2a 2f 0a 20 20 66 75  n } -.   */.  fu
7120: 6e 63 74 69 6f 6e 20 69 73 42 6c 61 6e 6b 28 76  nction isBlank(v
7130: 61 6c 75 65 29 20 7b 0a 20 20 20 20 72 65 74 75  alue) {.    retu
7140: 72 6e 20 69 73 4e 69 6c 28 76 61 6c 75 65 29 20  rn isNil(value) 
7150: 7c 7c 20 76 61 6c 75 65 20 3d 3d 3d 20 27 27 0a  || value === ''.
7160: 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20    }..  /**.   * 
7170: 43 68 65 63 6b 20 69 66 20 70 61 73 73 65 64 20  Check if passed 
7180: 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 66 75  argument is a fu
7190: 6e 63 74 69 6f 6e 0a 20 20 20 2a 20 40 70 61 72  nction.   * @par
71a0: 61 6d 20 20 20 7b 20 2a 20 7d 20 76 61 6c 75 65  am   { * } value
71b0: 20 2d 0a 20 20 20 2a 20 40 72 65 74 75 72 6e 73   -.   * @returns
71c0: 20 7b 20 42 6f 6f 6c 65 61 6e 20 7d 20 2d 0a 20   { Boolean } -. 
71d0: 20 20 2a 2f 0a 20 20 66 75 6e 63 74 69 6f 6e 20    */.  function 
71e0: 69 73 46 75 6e 63 74 69 6f 6e 28 76 61 6c 75 65  isFunction(value
71f0: 29 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 74  ) {.    return t
7200: 79 70 65 6f 66 20 76 61 6c 75 65 20 3d 3d 3d 20  ypeof value === 
7210: 54 5f 46 55 4e 43 54 49 4f 4e 0a 20 20 7d 0a 0a  T_FUNCTION.  }..
7220: 20 20 2f 2a 2a 0a 20 20 20 2a 20 43 68 65 63 6b    /**.   * Check
7230: 20 69 66 20 70 61 73 73 65 64 20 61 72 67 75 6d   if passed argum
7240: 65 6e 74 20 69 73 20 61 6e 20 6f 62 6a 65 63 74  ent is an object
7250: 2c 20 65 78 63 6c 75 64 65 20 6e 75 6c 6c 0a 20  , exclude null. 
7260: 20 20 2a 20 4e 4f 54 45 3a 20 75 73 65 20 69 73    * NOTE: use is
7270: 4f 62 6a 65 63 74 28 78 29 20 26 26 20 21 69 73  Object(x) && !is
7280: 41 72 72 61 79 28 78 29 20 74 6f 20 65 78 63 6c  Array(x) to excl
7290: 75 64 65 73 20 61 72 72 61 79 73 2e 0a 20 20 20  udes arrays..   
72a0: 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 2a 20 7d  * @param   { * }
72b0: 20 76 61 6c 75 65 20 2d 0a 20 20 20 2a 20 40 72   value -.   * @r
72c0: 65 74 75 72 6e 73 20 7b 20 42 6f 6f 6c 65 61 6e  eturns { Boolean
72d0: 20 7d 20 2d 0a 20 20 20 2a 2f 0a 20 20 66 75 6e   } -.   */.  fun
72e0: 63 74 69 6f 6e 20 69 73 4f 62 6a 65 63 74 28 76  ction isObject(v
72f0: 61 6c 75 65 29 20 7b 0a 20 20 20 20 72 65 74 75  alue) {.    retu
7300: 72 6e 20 76 61 6c 75 65 20 26 26 20 74 79 70 65  rn value && type
7310: 6f 66 20 76 61 6c 75 65 20 3d 3d 3d 20 54 5f 4f  of value === T_O
7320: 42 4a 45 43 54 20 2f 2f 20 74 79 70 65 6f 66 20  BJECT // typeof 
7330: 6e 75 6c 6c 20 69 73 20 27 6f 62 6a 65 63 74 27  null is 'object'
7340: 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a  .  }..  /**.   *
7350: 20 43 68 65 63 6b 20 69 66 20 61 20 44 4f 4d 20   Check if a DOM 
7360: 6e 6f 64 65 20 69 73 20 61 6e 20 73 76 67 20 74  node is an svg t
7370: 61 67 20 6f 72 20 70 61 72 74 20 6f 66 20 61 6e  ag or part of an
7380: 20 73 76 67 0a 20 20 20 2a 20 40 70 61 72 61 6d   svg.   * @param
7390: 20 20 20 7b 20 48 54 4d 4c 45 6c 65 6d 65 6e 74     { HTMLElement
73a0: 20 7d 20 20 65 6c 20 2d 20 6e 6f 64 65 20 77 65   }  el - node we
73b0: 20 77 61 6e 74 20 74 6f 20 74 65 73 74 0a 20 20   want to test.  
73c0: 20 2a 20 40 72 65 74 75 72 6e 73 20 7b 42 6f 6f   * @returns {Boo
73d0: 6c 65 61 6e 7d 20 74 72 75 65 20 69 66 20 69 74  lean} true if it
73e0: 27 73 20 61 6e 20 73 76 67 20 6e 6f 64 65 0a 20  's an svg node. 
73f0: 20 20 2a 2f 0a 20 20 66 75 6e 63 74 69 6f 6e 20    */.  function 
7400: 69 73 53 76 67 28 65 6c 29 20 7b 0a 20 20 20 20  isSvg(el) {.    
7410: 76 61 72 20 6f 77 6e 65 72 20 3d 20 65 6c 2e 6f  var owner = el.o
7420: 77 6e 65 72 53 56 47 45 6c 65 6d 65 6e 74 3b 0a  wnerSVGElement;.
7430: 20 20 20 20 72 65 74 75 72 6e 20 21 21 6f 77 6e      return !!own
7440: 65 72 20 7c 7c 20 6f 77 6e 65 72 20 3d 3d 3d 20  er || owner === 
7450: 6e 75 6c 6c 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a  null.  }..  /**.
7460: 20 20 20 2a 20 43 68 65 63 6b 20 69 66 20 70 61     * Check if pa
7470: 73 73 65 64 20 61 72 67 75 6d 65 6e 74 20 69 73  ssed argument is
7480: 20 61 20 6b 69 6e 64 20 6f 66 20 61 72 72 61 79   a kind of array
7490: 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20 7b  .   * @param   {
74a0: 20 2a 20 7d 20 76 61 6c 75 65 20 2d 0a 20 20 20   * } value -.   
74b0: 2a 20 40 72 65 74 75 72 6e 73 20 7b 20 42 6f 6f  * @returns { Boo
74c0: 6c 65 61 6e 20 7d 20 2d 0a 20 20 20 2a 2f 0a 20  lean } -.   */. 
74d0: 20 66 75 6e 63 74 69 6f 6e 20 69 73 41 72 72 61   function isArra
74e0: 79 28 76 61 6c 75 65 29 20 7b 0a 20 20 20 20 72  y(value) {.    r
74f0: 65 74 75 72 6e 20 41 72 72 61 79 2e 69 73 41 72  eturn Array.isAr
7500: 72 61 79 28 76 61 6c 75 65 29 20 7c 7c 20 76 61  ray(value) || va
7510: 6c 75 65 20 69 6e 73 74 61 6e 63 65 6f 66 20 41  lue instanceof A
7520: 72 72 61 79 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a  rray.  }..  /**.
7530: 20 20 20 2a 20 43 68 65 63 6b 20 69 66 20 74 68     * Check if th
7540: 65 20 70 61 73 73 65 64 20 61 72 67 75 6d 65 6e  e passed argumen
7550: 74 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 61  t is a boolean a
7560: 74 74 72 69 62 75 74 65 0a 20 20 20 2a 20 40 70  ttribute.   * @p
7570: 61 72 61 6d 20 20 20 7b 20 53 74 72 69 6e 67 20  aram   { String 
7580: 7d 20 76 61 6c 75 65 20 2d 0a 20 20 20 2a 20 40  } value -.   * @
7590: 72 65 74 75 72 6e 73 20 7b 20 42 6f 6f 6c 65 61  returns { Boolea
75a0: 6e 20 7d 20 2d 0a 20 20 20 2a 2f 0a 20 20 66 75  n } -.   */.  fu
75b0: 6e 63 74 69 6f 6e 20 69 73 42 6f 6f 6c 41 74 74  nction isBoolAtt
75c0: 72 28 76 61 6c 75 65 29 20 7b 0a 20 20 20 20 72  r(value) {.    r
75d0: 65 74 75 72 6e 20 52 45 5f 42 4f 4f 4c 5f 41 54  eturn RE_BOOL_AT
75e0: 54 52 53 2e 74 65 73 74 28 76 61 6c 75 65 29 0a  TRS.test(value).
75f0: 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20    }..  /**.   * 
7600: 43 68 65 63 6b 20 69 66 20 70 61 73 73 65 64 20  Check if passed 
7610: 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 73 74  argument is a st
7620: 72 69 6e 67 0a 20 20 20 2a 20 40 70 61 72 61 6d  ring.   * @param
7630: 20 20 20 7b 20 2a 20 7d 20 76 61 6c 75 65 20 2d     { * } value -
7640: 0a 20 20 20 2a 20 40 72 65 74 75 72 6e 73 20 7b  .   * @returns {
7650: 20 42 6f 6f 6c 65 61 6e 20 7d 20 2d 0a 20 20 20   Boolean } -.   
7660: 2a 2f 0a 20 20 66 75 6e 63 74 69 6f 6e 20 69 73  */.  function is
7670: 53 74 72 69 6e 67 28 76 61 6c 75 65 29 20 7b 0a  String(value) {.
7680: 20 20 20 20 72 65 74 75 72 6e 20 74 79 70 65 6f      return typeo
7690: 66 20 76 61 6c 75 65 20 3d 3d 3d 20 54 5f 53 54  f value === T_ST
76a0: 52 49 4e 47 0a 20 20 7d 0a 0a 0a 0a 20 20 76 61  RING.  }....  va
76b0: 72 20 63 68 65 63 6b 20 3d 20 2f 2a 23 5f 5f 50  r check = /*#__P
76c0: 55 52 45 5f 5f 2a 2f 4f 62 6a 65 63 74 2e 66 72  URE__*/Object.fr
76d0: 65 65 7a 65 28 7b 0a 20 20 20 20 69 73 42 6c 61  eeze({.    isBla
76e0: 6e 6b 3a 20 69 73 42 6c 61 6e 6b 2c 0a 20 20 20  nk: isBlank,.   
76f0: 20 69 73 46 75 6e 63 74 69 6f 6e 3a 20 69 73 46   isFunction: isF
7700: 75 6e 63 74 69 6f 6e 2c 0a 20 20 20 20 69 73 4f  unction,.    isO
7710: 62 6a 65 63 74 3a 20 69 73 4f 62 6a 65 63 74 2c  bject: isObject,
7720: 0a 20 20 20 20 69 73 53 76 67 3a 20 69 73 53 76  .    isSvg: isSv
7730: 67 2c 0a 20 20 20 20 69 73 57 72 69 74 61 62 6c  g,.    isWritabl
7740: 65 3a 20 69 73 57 72 69 74 61 62 6c 65 2c 0a 20  e: isWritable,. 
7750: 20 20 20 69 73 41 72 72 61 79 3a 20 69 73 41 72     isArray: isAr
7760: 72 61 79 2c 0a 20 20 20 20 69 73 42 6f 6f 6c 41  ray,.    isBoolA
7770: 74 74 72 3a 20 69 73 42 6f 6f 6c 41 74 74 72 2c  ttr: isBoolAttr,
7780: 0a 20 20 20 20 69 73 4e 69 6c 3a 20 69 73 4e 69  .    isNil: isNi
7790: 6c 2c 0a 20 20 20 20 69 73 53 74 72 69 6e 67 3a  l,.    isString:
77a0: 20 69 73 53 74 72 69 6e 67 2c 0a 20 20 20 20 69   isString,.    i
77b0: 73 55 6e 64 65 66 69 6e 65 64 3a 20 69 73 55 6e  sUndefined: isUn
77c0: 64 65 66 69 6e 65 64 0a 20 20 7d 29 3b 0a 0a 20  defined.  });.. 
77d0: 20 2f 2a 2a 0a 20 20 20 2a 20 43 68 65 63 6b 20   /**.   * Check 
77e0: 77 68 65 74 68 65 72 20 61 6e 20 61 72 72 61 79  whether an array
77f0: 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20 69 74 65   contains an ite
7800: 6d 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20  m.   * @param   
7810: 7b 20 41 72 72 61 79 20 7d 20 61 72 72 61 79 20  { Array } array 
7820: 2d 20 74 61 72 67 65 74 20 61 72 72 61 79 0a 20  - target array. 
7830: 20 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 2a    * @param   { *
7840: 20 7d 20 69 74 65 6d 20 2d 20 69 74 65 6d 20 74   } item - item t
7850: 6f 20 74 65 73 74 0a 20 20 20 2a 20 40 72 65 74  o test.   * @ret
7860: 75 72 6e 73 20 7b 20 42 6f 6f 6c 65 61 6e 20 7d  urns { Boolean }
7870: 20 2d 0a 20 20 20 2a 2f 0a 20 20 66 75 6e 63 74   -.   */.  funct
7880: 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 28 61 72 72  ion contains(arr
7890: 61 79 2c 20 69 74 65 6d 29 20 7b 0a 20 20 20 20  ay, item) {.    
78a0: 72 65 74 75 72 6e 20 61 72 72 61 79 2e 69 6e 64  return array.ind
78b0: 65 78 4f 66 28 69 74 65 6d 29 20 21 3d 3d 20 2d  exOf(item) !== -
78c0: 31 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20  1.  }..  /**.   
78d0: 2a 20 53 70 65 63 69 61 6c 69 7a 65 64 20 66 75  * Specialized fu
78e0: 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 6f 70 69  nction for loopi
78f0: 6e 67 20 61 6e 20 61 72 72 61 79 2d 6c 69 6b 65  ng an array-like
7900: 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 77 69 74 68   collection with
7910: 20 60 65 61 63 68 3d 7b 7d 60 0a 20 20 20 2a 20   `each={}`.   * 
7920: 40 70 61 72 61 6d 20 20 20 7b 20 41 72 72 61 79  @param   { Array
7930: 20 7d 20 6c 69 73 74 20 2d 20 63 6f 6c 6c 65 63   } list - collec
7940: 74 69 6f 6e 20 6f 66 20 69 74 65 6d 73 0a 20 20  tion of items.  
7950: 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 46 75 6e   * @param   {Fun
7960: 63 74 69 6f 6e 7d 20 66 6e 20 2d 20 63 61 6c 6c  ction} fn - call
7970: 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 0a 20 20  back function.  
7980: 20 2a 20 40 72 65 74 75 72 6e 73 20 7b 20 41 72   * @returns { Ar
7990: 72 61 79 20 7d 20 74 68 65 20 61 72 72 61 79 20  ray } the array 
79a0: 6c 6f 6f 70 65 64 0a 20 20 20 2a 2f 0a 20 20 66  looped.   */.  f
79b0: 75 6e 63 74 69 6f 6e 20 65 61 63 68 28 6c 69 73  unction each(lis
79c0: 74 2c 20 66 6e 29 20 7b 0a 20 20 20 20 76 61 72  t, fn) {.    var
79d0: 20 6c 65 6e 20 3d 20 6c 69 73 74 20 3f 20 6c 69   len = list ? li
79e0: 73 74 2e 6c 65 6e 67 74 68 20 3a 20 30 3b 0a 20  st.length : 0;. 
79f0: 20 20 20 76 61 72 20 69 20 3d 20 30 3b 0a 20 20     var i = 0;.  
7a00: 20 20 66 6f 72 20 28 3b 20 69 20 3c 20 6c 65 6e    for (; i < len
7a10: 3b 20 69 2b 2b 29 20 7b 20 66 6e 28 6c 69 73 74  ; i++) { fn(list
7a20: 5b 69 5d 2c 20 69 29 3b 20 7d 0a 20 20 20 20 72  [i], i); }.    r
7a30: 65 74 75 72 6e 20 6c 69 73 74 0a 20 20 7d 0a 0a  eturn list.  }..
7a40: 20 20 2f 2a 2a 0a 20 20 20 2a 20 46 61 73 74 65    /**.   * Faste
7a50: 72 20 53 74 72 69 6e 67 20 73 74 61 72 74 73 57  r String startsW
7a60: 69 74 68 20 61 6c 74 65 72 6e 61 74 69 76 65 0a  ith alternative.
7a70: 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20     * @param   { 
7a80: 53 74 72 69 6e 67 20 7d 20 73 74 72 20 2d 20 73  String } str - s
7a90: 6f 75 72 63 65 20 73 74 72 69 6e 67 0a 20 20 20  ource string.   
7aa0: 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 53 74 72  * @param   { Str
7ab0: 69 6e 67 20 7d 20 76 61 6c 75 65 20 2d 20 74 65  ing } value - te
7ac0: 73 74 20 73 74 72 69 6e 67 0a 20 20 20 2a 20 40  st string.   * @
7ad0: 72 65 74 75 72 6e 73 20 7b 20 42 6f 6f 6c 65 61  returns { Boolea
7ae0: 6e 20 7d 20 2d 0a 20 20 20 2a 2f 0a 20 20 66 75  n } -.   */.  fu
7af0: 6e 63 74 69 6f 6e 20 73 74 61 72 74 73 57 69 74  nction startsWit
7b00: 68 28 73 74 72 2c 20 76 61 6c 75 65 29 20 7b 0a  h(str, value) {.
7b10: 20 20 20 20 72 65 74 75 72 6e 20 73 74 72 2e 73      return str.s
7b20: 6c 69 63 65 28 30 2c 20 76 61 6c 75 65 2e 6c 65  lice(0, value.le
7b30: 6e 67 74 68 29 20 3d 3d 3d 20 76 61 6c 75 65 0a  ngth) === value.
7b40: 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20    }..  /**.   * 
7b50: 46 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 69  Function returni
7b60: 6e 67 20 61 6c 77 61 79 73 20 61 20 75 6e 69 71  ng always a uniq
7b70: 75 65 20 69 64 65 6e 74 69 66 69 65 72 0a 20 20  ue identifier.  
7b80: 20 2a 20 40 72 65 74 75 72 6e 73 20 7b 20 4e 75   * @returns { Nu
7b90: 6d 62 65 72 20 7d 20 2d 20 6e 75 6d 62 65 72 20  mber } - number 
7ba0: 66 72 6f 6d 20 30 2e 2e 2e 6e 0a 20 20 20 2a 2f  from 0...n.   */
7bb0: 0a 20 20 76 61 72 20 75 69 64 20 3d 20 28 66 75  .  var uid = (fu
7bc0: 6e 63 74 69 6f 6e 20 75 69 64 28 29 20 7b 0a 20  nction uid() {. 
7bd0: 20 20 20 76 61 72 20 69 20 3d 20 2d 31 3b 0a 20     var i = -1;. 
7be0: 20 20 20 72 65 74 75 72 6e 20 66 75 6e 63 74 69     return functi
7bf0: 6f 6e 20 28 29 20 7b 20 72 65 74 75 72 6e 20 2b  on () { return +
7c00: 2b 69 3b 20 7d 0a 20 20 7d 29 28 29 3b 0a 0a 20  +i; }.  })();.. 
7c10: 20 2f 2a 2a 0a 20 20 20 2a 20 48 65 6c 70 65 72   /**.   * Helper
7c20: 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 73 65 74   function to set
7c30: 20 61 6e 20 69 6d 6d 75 74 61 62 6c 65 20 70 72   an immutable pr
7c40: 6f 70 65 72 74 79 0a 20 20 20 2a 20 40 70 61 72  operty.   * @par
7c50: 61 6d 20 20 20 7b 20 4f 62 6a 65 63 74 20 7d 20  am   { Object } 
7c60: 65 6c 20 2d 20 6f 62 6a 65 63 74 20 77 68 65 72  el - object wher
7c70: 65 20 74 68 65 20 6e 65 77 20 70 72 6f 70 65 72  e the new proper
7c80: 74 79 20 77 69 6c 6c 20 62 65 20 73 65 74 0a 20  ty will be set. 
7c90: 20 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 53    * @param   { S
7ca0: 74 72 69 6e 67 20 7d 20 6b 65 79 20 2d 20 6f 62  tring } key - ob
7cb0: 6a 65 63 74 20 6b 65 79 20 77 68 65 72 65 20 74  ject key where t
7cc0: 68 65 20 6e 65 77 20 70 72 6f 70 65 72 74 79 20  he new property 
7cd0: 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 0a 20  will be stored. 
7ce0: 20 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 2a    * @param   { *
7cf0: 20 7d 20 76 61 6c 75 65 20 2d 20 76 61 6c 75 65   } value - value
7d00: 20 6f 66 20 74 68 65 20 6e 65 77 20 70 72 6f 70   of the new prop
7d10: 65 72 74 79 0a 20 20 20 2a 20 40 70 61 72 61 6d  erty.   * @param
7d20: 20 20 20 7b 20 4f 62 6a 65 63 74 20 7d 20 6f 70     { Object } op
7d30: 74 69 6f 6e 73 20 2d 20 73 65 74 20 74 68 65 20  tions - set the 
7d40: 70 72 6f 70 65 72 79 20 6f 76 65 72 72 69 64 69  propery overridi
7d50: 6e 67 20 74 68 65 20 64 65 66 61 75 6c 74 20 6f  ng the default o
7d60: 70 74 69 6f 6e 73 0a 20 20 20 2a 20 40 72 65 74  ptions.   * @ret
7d70: 75 72 6e 73 20 7b 20 4f 62 6a 65 63 74 20 7d 20  urns { Object } 
7d80: 2d 20 74 68 65 20 69 6e 69 74 69 61 6c 20 6f 62  - the initial ob
7d90: 6a 65 63 74 0a 20 20 20 2a 2f 0a 20 20 66 75 6e  ject.   */.  fun
7da0: 63 74 69 6f 6e 20 64 65 66 69 6e 65 28 65 6c 2c  ction define(el,
7db0: 20 6b 65 79 2c 20 76 61 6c 75 65 2c 20 6f 70 74   key, value, opt
7dc0: 69 6f 6e 73 29 20 7b 0a 20 20 20 20 4f 62 6a 65  ions) {.    Obje
7dd0: 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74  ct.definePropert
7de0: 79 28 65 6c 2c 20 6b 65 79 2c 20 65 78 74 65 6e  y(el, key, exten
7df0: 64 28 7b 0a 20 20 20 20 20 20 76 61 6c 75 65 3a  d({.      value:
7e00: 20 76 61 6c 75 65 2c 0a 20 20 20 20 20 20 65 6e   value,.      en
7e10: 75 6d 65 72 61 62 6c 65 3a 20 66 61 6c 73 65 2c  umerable: false,
7e20: 0a 20 20 20 20 20 20 77 72 69 74 61 62 6c 65 3a  .      writable:
7e30: 20 66 61 6c 73 65 2c 0a 20 20 20 20 20 20 63 6f   false,.      co
7e40: 6e 66 69 67 75 72 61 62 6c 65 3a 20 74 72 75 65  nfigurable: true
7e50: 0a 20 20 20 20 7d 2c 20 6f 70 74 69 6f 6e 73 29  .    }, options)
7e60: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 65 6c  );.    return el
7e70: 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a  .  }..  /**.   *
7e80: 20 43 6f 6e 76 65 72 74 20 61 20 73 74 72 69 6e   Convert a strin
7e90: 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 64 61 73  g containing das
7ea0: 68 65 73 20 74 6f 20 63 61 6d 65 6c 20 63 61 73  hes to camel cas
7eb0: 65 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20  e.   * @param   
7ec0: 7b 20 53 74 72 69 6e 67 20 7d 20 73 74 72 20 2d  { String } str -
7ed0: 20 69 6e 70 75 74 20 73 74 72 69 6e 67 0a 20 20   input string.  
7ee0: 20 2a 20 40 72 65 74 75 72 6e 73 20 7b 20 53 74   * @returns { St
7ef0: 72 69 6e 67 20 7d 20 6d 79 2d 73 74 72 69 6e 67  ring } my-string
7f00: 20 2d 3e 20 6d 79 53 74 72 69 6e 67 0a 20 20 20   -> myString.   
7f10: 2a 2f 0a 20 20 66 75 6e 63 74 69 6f 6e 20 74 6f  */.  function to
7f20: 43 61 6d 65 6c 28 73 74 72 29 20 7b 0a 20 20 20  Camel(str) {.   
7f30: 20 72 65 74 75 72 6e 20 73 74 72 2e 72 65 70 6c   return str.repl
7f40: 61 63 65 28 2f 2d 28 5c 77 29 2f 67 2c 20 66 75  ace(/-(\w)/g, fu
7f50: 6e 63 74 69 6f 6e 20 28 5f 2c 20 63 29 20 7b 20  nction (_, c) { 
7f60: 72 65 74 75 72 6e 20 63 2e 74 6f 55 70 70 65 72  return c.toUpper
7f70: 43 61 73 65 28 29 3b 20 7d 29 0a 20 20 7d 0a 0a  Case(); }).  }..
7f80: 20 20 2f 2a 2a 0a 20 20 20 2a 20 57 61 72 6e 20    /**.   * Warn 
7f90: 61 20 6d 65 73 73 61 67 65 20 76 69 61 20 63 6f  a message via co
7fa0: 6e 73 6f 6c 65 0a 20 20 20 2a 20 40 70 61 72 61  nsole.   * @para
7fb0: 6d 20 20 20 7b 53 74 72 69 6e 67 7d 20 6d 65 73  m   {String} mes
7fc0: 73 61 67 65 20 2d 20 77 61 72 6e 69 6e 67 20 6d  sage - warning m
7fd0: 65 73 73 61 67 65 0a 20 20 20 2a 2f 0a 20 20 66  essage.   */.  f
7fe0: 75 6e 63 74 69 6f 6e 20 77 61 72 6e 28 6d 65 73  unction warn(mes
7ff0: 73 61 67 65 29 20 7b 0a 20 20 20 20 69 66 20 28  sage) {.    if (
8000: 63 6f 6e 73 6f 6c 65 20 26 26 20 63 6f 6e 73 6f  console && conso
8010: 6c 65 2e 77 61 72 6e 29 20 7b 20 63 6f 6e 73 6f  le.warn) { conso
8020: 6c 65 2e 77 61 72 6e 28 6d 65 73 73 61 67 65 29  le.warn(message)
8030: 3b 20 7d 0a 20 20 7d 0a 0a 0a 0a 20 20 76 61 72  ; }.  }....  var
8040: 20 6d 69 73 63 20 3d 20 2f 2a 23 5f 5f 50 55 52   misc = /*#__PUR
8050: 45 5f 5f 2a 2f 4f 62 6a 65 63 74 2e 66 72 65 65  E__*/Object.free
8060: 7a 65 28 7b 0a 20 20 20 20 63 6f 6e 74 61 69 6e  ze({.    contain
8070: 73 3a 20 63 6f 6e 74 61 69 6e 73 2c 0a 20 20 20  s: contains,.   
8080: 20 65 61 63 68 3a 20 65 61 63 68 2c 0a 20 20 20   each: each,.   
8090: 20 67 65 74 50 72 6f 70 44 65 73 63 72 69 70 74   getPropDescript
80a0: 6f 72 3a 20 67 65 74 50 72 6f 70 44 65 73 63 72  or: getPropDescr
80b0: 69 70 74 6f 72 2c 0a 20 20 20 20 73 74 61 72 74  iptor,.    start
80c0: 73 57 69 74 68 3a 20 73 74 61 72 74 73 57 69 74  sWith: startsWit
80d0: 68 2c 0a 20 20 20 20 75 69 64 3a 20 75 69 64 2c  h,.    uid: uid,
80e0: 0a 20 20 20 20 64 65 66 69 6e 65 50 72 6f 70 65  .    definePrope
80f0: 72 74 79 3a 20 64 65 66 69 6e 65 2c 0a 20 20 20  rty: define,.   
8100: 20 6f 62 6a 65 63 74 43 72 65 61 74 65 3a 20 63   objectCreate: c
8110: 72 65 61 74 65 2c 0a 20 20 20 20 65 78 74 65 6e  reate,.    exten
8120: 64 3a 20 65 78 74 65 6e 64 2c 0a 20 20 20 20 74  d: extend,.    t
8130: 6f 43 61 6d 65 6c 3a 20 74 6f 43 61 6d 65 6c 2c  oCamel: toCamel,
8140: 0a 20 20 20 20 77 61 72 6e 3a 20 77 61 72 6e 0a  .    warn: warn.
8150: 20 20 7d 29 3b 0a 0a 20 20 2f 2a 2a 0a 20 20 20    });..  /**.   
8160: 2a 20 53 65 74 20 74 68 65 20 70 72 6f 70 65 72  * Set the proper
8170: 74 79 20 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20  ty of an object 
8180: 66 6f 72 20 61 20 67 69 76 65 6e 20 6b 65 79 2e  for a given key.
8190: 20 49 66 20 73 6f 6d 65 74 68 69 6e 67 20 61 6c   If something al
81a0: 72 65 61 64 79 0a 20 20 20 2a 20 65 78 69 73 74  ready.   * exist
81b0: 73 20 74 68 65 72 65 2c 20 74 68 65 6e 20 69 74  s there, then it
81c0: 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 72 72 61   becomes an arra
81d0: 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 62 6f 74  y containing bot
81e0: 68 20 74 68 65 20 6f 6c 64 20 61 6e 64 20 6e 65  h the old and ne
81f0: 77 20 76 61 6c 75 65 2e 0a 20 20 20 2a 20 40 70  w value..   * @p
8200: 61 72 61 6d 20 7b 20 4f 62 6a 65 63 74 20 7d 20  aram { Object } 
8210: 6f 62 6a 20 2d 20 6f 62 6a 65 63 74 20 6f 6e 20  obj - object on 
8220: 77 68 69 63 68 20 74 6f 20 73 65 74 20 74 68 65  which to set the
8230: 20 70 72 6f 70 65 72 74 79 0a 20 20 20 2a 20 40   property.   * @
8240: 70 61 72 61 6d 20 7b 20 53 74 72 69 6e 67 20 7d  param { String }
8250: 20 6b 65 79 20 2d 20 70 72 6f 70 65 72 74 79 20   key - property 
8260: 6e 61 6d 65 0a 20 20 20 2a 20 40 70 61 72 61 6d  name.   * @param
8270: 20 7b 20 4f 62 6a 65 63 74 20 7d 20 76 61 6c 75   { Object } valu
8280: 65 20 2d 20 74 68 65 20 76 61 6c 75 65 20 6f 66  e - the value of
8290: 20 74 68 65 20 70 72 6f 70 65 72 74 79 20 74 6f   the property to
82a0: 20 62 65 20 73 65 74 0a 20 20 20 2a 20 40 70 61   be set.   * @pa
82b0: 72 61 6d 20 7b 20 42 6f 6f 6c 65 61 6e 20 7d 20  ram { Boolean } 
82c0: 65 6e 73 75 72 65 41 72 72 61 79 20 2d 20 65 6e  ensureArray - en
82d0: 73 75 72 65 20 74 68 61 74 20 74 68 65 20 70 72  sure that the pr
82e0: 6f 70 65 72 74 79 20 72 65 6d 61 69 6e 73 20 61  operty remains a
82f0: 6e 20 61 72 72 61 79 0a 20 20 20 2a 20 40 70 61  n array.   * @pa
8300: 72 61 6d 20 7b 20 4e 75 6d 62 65 72 20 7d 20 69  ram { Number } i
8310: 6e 64 65 78 20 2d 20 61 64 64 20 74 68 65 20 6e  ndex - add the n
8320: 65 77 20 69 74 65 6d 20 69 6e 20 61 20 63 65 72  ew item in a cer
8330: 74 61 69 6e 20 61 72 72 61 79 20 70 6f 73 69 74  tain array posit
8340: 69 6f 6e 0a 20 20 20 2a 2f 0a 20 20 66 75 6e 63  ion.   */.  func
8350: 74 69 6f 6e 20 61 72 72 61 79 69 73 68 41 64 64  tion arrayishAdd
8360: 28 6f 62 6a 2c 20 6b 65 79 2c 20 76 61 6c 75 65  (obj, key, value
8370: 2c 20 65 6e 73 75 72 65 41 72 72 61 79 2c 20 69  , ensureArray, i
8380: 6e 64 65 78 29 20 7b 0a 20 20 20 20 76 61 72 20  ndex) {.    var 
8390: 64 65 73 74 20 3d 20 6f 62 6a 5b 6b 65 79 5d 3b  dest = obj[key];
83a0: 0a 20 20 20 20 76 61 72 20 69 73 41 72 72 20 3d  .    var isArr =
83b0: 20 69 73 41 72 72 61 79 28 64 65 73 74 29 3b 0a   isArray(dest);.
83c0: 20 20 20 20 76 61 72 20 68 61 73 49 6e 64 65 78      var hasIndex
83d0: 20 3d 20 21 69 73 55 6e 64 65 66 69 6e 65 64 28   = !isUndefined(
83e0: 69 6e 64 65 78 29 3b 0a 0a 20 20 20 20 69 66 20  index);..    if 
83f0: 28 64 65 73 74 20 26 26 20 64 65 73 74 20 3d 3d  (dest && dest ==
8400: 3d 20 76 61 6c 75 65 29 20 7b 20 72 65 74 75 72  = value) { retur
8410: 6e 20 7d 0a 0a 20 20 20 20 2f 2f 20 69 66 20 74  n }..    // if t
8420: 68 65 20 6b 65 79 20 77 61 73 20 6e 65 76 65 72  he key was never
8430: 20 73 65 74 2c 20 73 65 74 20 69 74 20 6f 6e 63   set, set it onc
8440: 65 0a 20 20 20 20 69 66 20 28 21 64 65 73 74 20  e.    if (!dest 
8450: 26 26 20 65 6e 73 75 72 65 41 72 72 61 79 29 20  && ensureArray) 
8460: 7b 20 6f 62 6a 5b 6b 65 79 5d 20 3d 20 5b 76 61  { obj[key] = [va
8470: 6c 75 65 5d 3b 20 7d 0a 20 20 20 20 65 6c 73 65  lue]; }.    else
8480: 20 69 66 20 28 21 64 65 73 74 29 20 7b 20 6f 62   if (!dest) { ob
8490: 6a 5b 6b 65 79 5d 20 3d 20 76 61 6c 75 65 3b 20  j[key] = value; 
84a0: 7d 0a 20 20 20 20 2f 2f 20 69 66 20 69 74 20 77  }.    // if it w
84b0: 61 73 20 61 6e 20 61 72 72 61 79 20 61 6e 64 20  as an array and 
84c0: 6e 6f 74 20 79 65 74 20 73 65 74 0a 20 20 20 20  not yet set.    
84d0: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 69 66 20  else {.      if 
84e0: 28 69 73 41 72 72 29 20 7b 0a 20 20 20 20 20 20  (isArr) {.      
84f0: 20 20 76 61 72 20 6f 6c 64 49 6e 64 65 78 20 3d    var oldIndex =
8500: 20 64 65 73 74 2e 69 6e 64 65 78 4f 66 28 76 61   dest.indexOf(va
8510: 6c 75 65 29 3b 0a 20 20 20 20 20 20 20 20 2f 2f  lue);.        //
8520: 20 74 68 69 73 20 69 74 65 6d 20 6e 65 76 65 72   this item never
8530: 20 63 68 61 6e 67 65 64 20 69 74 73 20 70 6f 73   changed its pos
8540: 69 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 69 66  ition.        if
8550: 20 28 6f 6c 64 49 6e 64 65 78 20 3d 3d 3d 20 69   (oldIndex === i
8560: 6e 64 65 78 29 20 7b 20 72 65 74 75 72 6e 20 7d  ndex) { return }
8570: 0a 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6d 6f  .        // remo
8580: 76 65 20 74 68 65 20 69 74 65 6d 20 66 72 6f 6d  ve the item from
8590: 20 69 74 73 20 6f 6c 64 20 70 6f 73 69 74 69 6f   its old positio
85a0: 6e 0a 20 20 20 20 20 20 20 20 69 66 20 28 6f 6c  n.        if (ol
85b0: 64 49 6e 64 65 78 20 21 3d 3d 20 2d 31 29 20 7b  dIndex !== -1) {
85c0: 20 64 65 73 74 2e 73 70 6c 69 63 65 28 6f 6c 64   dest.splice(old
85d0: 49 6e 64 65 78 2c 20 31 29 3b 20 7d 0a 20 20 20  Index, 1); }.   
85e0: 20 20 20 20 20 2f 2f 20 6d 6f 76 65 20 6f 72 20       // move or 
85f0: 61 64 64 20 74 68 65 20 69 74 65 6d 0a 20 20 20  add the item.   
8600: 20 20 20 20 20 69 66 20 28 68 61 73 49 6e 64 65       if (hasInde
8610: 78 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 64  x) {.          d
8620: 65 73 74 2e 73 70 6c 69 63 65 28 69 6e 64 65 78  est.splice(index
8630: 2c 20 30 2c 20 76 61 6c 75 65 29 3b 0a 20 20 20  , 0, value);.   
8640: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20       } else {.  
8650: 20 20 20 20 20 20 20 20 64 65 73 74 2e 70 75 73          dest.pus
8660: 68 28 76 61 6c 75 65 29 3b 0a 20 20 20 20 20 20  h(value);.      
8670: 20 20 7d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65    }.      } else
8680: 20 7b 20 6f 62 6a 5b 6b 65 79 5d 20 3d 20 5b 64   { obj[key] = [d
8690: 65 73 74 2c 20 76 61 6c 75 65 5d 3b 20 7d 0a 20  est, value]; }. 
86a0: 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a     }.  }..  /**.
86b0: 20 20 20 2a 20 44 65 74 65 63 74 20 74 68 65 20     * Detect the 
86c0: 74 61 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  tag implementati
86d0: 6f 6e 20 62 79 20 61 20 44 4f 4d 20 6e 6f 64 65  on by a DOM node
86e0: 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20 7b  .   * @param   {
86f0: 20 4f 62 6a 65 63 74 20 7d 20 64 6f 6d 20 2d 20   Object } dom - 
8700: 44 4f 4d 20 6e 6f 64 65 20 77 65 20 6e 65 65 64  DOM node we need
8710: 20 74 6f 20 70 61 72 73 65 20 74 6f 20 67 65 74   to parse to get
8720: 20 69 74 73 20 74 61 67 20 69 6d 70 6c 65 6d 65   its tag impleme
8730: 6e 74 61 74 69 6f 6e 0a 20 20 20 2a 20 40 72 65  ntation.   * @re
8740: 74 75 72 6e 73 20 7b 20 4f 62 6a 65 63 74 20 7d  turns { Object }
8750: 20 69 74 20 72 65 74 75 72 6e 73 20 61 6e 20 6f   it returns an o
8760: 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 69 6e 67  bject containing
8770: 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
8780: 69 6f 6e 20 6f 66 20 61 20 63 75 73 74 6f 6d 20  ion of a custom 
8790: 74 61 67 20 28 74 65 6d 70 6c 61 74 65 20 61 6e  tag (template an
87a0: 64 20 62 6f 6f 74 20 66 75 6e 63 74 69 6f 6e 29  d boot function)
87b0: 0a 20 20 20 2a 2f 0a 20 20 66 75 6e 63 74 69 6f  .   */.  functio
87c0: 6e 20 67 65 74 28 64 6f 6d 29 20 7b 0a 20 20 20  n get(dom) {.   
87d0: 20 72 65 74 75 72 6e 20 64 6f 6d 2e 74 61 67 4e   return dom.tagN
87e0: 61 6d 65 20 26 26 20 5f 5f 54 41 47 5f 49 4d 50  ame && __TAG_IMP
87f0: 4c 5b 67 65 74 41 74 74 72 69 62 75 74 65 28 64  L[getAttribute(d
8800: 6f 6d 2c 20 49 53 5f 44 49 52 45 43 54 49 56 45  om, IS_DIRECTIVE
8810: 29 20 7c 7c 0a 20 20 20 20 20 20 67 65 74 41 74  ) ||.      getAt
8820: 74 72 69 62 75 74 65 28 64 6f 6d 2c 20 49 53 5f  tribute(dom, IS_
8830: 44 49 52 45 43 54 49 56 45 29 20 7c 7c 20 64 6f  DIRECTIVE) || do
8840: 6d 2e 74 61 67 4e 61 6d 65 2e 74 6f 4c 6f 77 65  m.tagName.toLowe
8850: 72 43 61 73 65 28 29 5d 0a 20 20 7d 0a 0a 20 20  rCase()].  }..  
8860: 2f 2a 2a 0a 20 20 20 2a 20 47 65 74 20 74 68 65  /**.   * Get the
8870: 20 74 61 67 20 6e 61 6d 65 20 6f 66 20 61 6e 79   tag name of any
8880: 20 44 4f 4d 20 6e 6f 64 65 0a 20 20 20 2a 20 40   DOM node.   * @
8890: 70 61 72 61 6d 20 20 20 7b 20 4f 62 6a 65 63 74  param   { Object
88a0: 20 7d 20 64 6f 6d 20 2d 20 44 4f 4d 20 6e 6f 64   } dom - DOM nod
88b0: 65 20 77 65 20 77 61 6e 74 20 74 6f 20 70 61 72  e we want to par
88c0: 73 65 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20  se.   * @param  
88d0: 20 7b 20 42 6f 6f 6c 65 61 6e 20 7d 20 73 6b 69   { Boolean } ski
88e0: 70 44 61 74 61 49 73 20 2d 20 68 61 63 6b 20 74  pDataIs - hack t
88f0: 6f 20 69 67 6e 6f 72 65 20 74 68 65 20 64 61 74  o ignore the dat
8900: 61 2d 69 73 20 61 74 74 72 69 62 75 74 65 20 77  a-is attribute w
8910: 68 65 6e 20 61 74 74 61 63 68 69 6e 67 20 74 6f  hen attaching to
8920: 20 70 61 72 65 6e 74 0a 20 20 20 2a 20 40 72 65   parent.   * @re
8930: 74 75 72 6e 73 20 7b 20 53 74 72 69 6e 67 20 7d  turns { String }
8940: 20 6e 61 6d 65 20 74 6f 20 69 64 65 6e 74 69 66   name to identif
8950: 79 20 74 68 69 73 20 64 6f 6d 20 6e 6f 64 65 20  y this dom node 
8960: 69 6e 20 72 69 6f 74 0a 20 20 20 2a 2f 0a 20 20  in riot.   */.  
8970: 66 75 6e 63 74 69 6f 6e 20 67 65 74 4e 61 6d 65  function getName
8980: 28 64 6f 6d 2c 20 73 6b 69 70 44 61 74 61 49 73  (dom, skipDataIs
8990: 29 20 7b 0a 20 20 20 20 76 61 72 20 63 68 69 6c  ) {.    var chil
89a0: 64 20 3d 20 67 65 74 28 64 6f 6d 29 3b 0a 20 20  d = get(dom);.  
89b0: 20 20 76 61 72 20 6e 61 6d 65 64 54 61 67 20 3d    var namedTag =
89c0: 20 21 73 6b 69 70 44 61 74 61 49 73 20 26 26 20   !skipDataIs && 
89d0: 67 65 74 41 74 74 72 69 62 75 74 65 28 64 6f 6d  getAttribute(dom
89e0: 2c 20 49 53 5f 44 49 52 45 43 54 49 56 45 29 3b  , IS_DIRECTIVE);
89f0: 0a 20 20 20 20 72 65 74 75 72 6e 20 6e 61 6d 65  .    return name
8a00: 64 54 61 67 20 26 26 20 21 74 6d 70 6c 2e 68 61  dTag && !tmpl.ha
8a10: 73 45 78 70 72 28 6e 61 6d 65 64 54 61 67 29 20  sExpr(namedTag) 
8a20: 3f 0a 20 20 20 20 20 20 6e 61 6d 65 64 54 61 67  ?.      namedTag
8a30: 20 3a 20 63 68 69 6c 64 20 3f 20 63 68 69 6c 64   : child ? child
8a40: 2e 6e 61 6d 65 20 3a 20 64 6f 6d 2e 74 61 67 4e  .name : dom.tagN
8a50: 61 6d 65 2e 74 6f 4c 6f 77 65 72 43 61 73 65 28  ame.toLowerCase(
8a60: 29 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20  ).  }..  /**.   
8a70: 2a 20 52 65 74 75 72 6e 20 61 20 74 65 6d 70 6f  * Return a tempo
8a80: 72 61 72 79 20 63 6f 6e 74 65 78 74 20 63 6f 6e  rary context con
8a90: 74 61 69 6e 69 6e 67 20 61 6c 73 6f 20 74 68 65  taining also the
8aa0: 20 70 61 72 65 6e 74 20 70 72 6f 70 65 72 74 69   parent properti
8ab0: 65 73 0a 20 20 20 2a 20 40 74 68 69 73 20 54 61  es.   * @this Ta
8ac0: 67 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 7b 20  g.   * @param { 
8ad0: 54 61 67 20 7d 20 2d 20 74 65 6d 70 6f 72 61 72  Tag } - temporar
8ae0: 79 20 74 61 67 20 63 6f 6e 74 65 78 74 20 63 6f  y tag context co
8af0: 6e 74 61 69 6e 69 6e 67 20 61 6c 6c 20 74 68 65  ntaining all the
8b00: 20 70 61 72 65 6e 74 20 70 72 6f 70 65 72 74 69   parent properti
8b10: 65 73 0a 20 20 20 2a 2f 0a 20 20 66 75 6e 63 74  es.   */.  funct
8b20: 69 6f 6e 20 69 6e 68 65 72 69 74 50 61 72 65 6e  ion inheritParen
8b30: 74 50 72 6f 70 73 28 29 20 7b 0a 20 20 20 20 69  tProps() {.    i
8b40: 66 20 28 74 68 69 73 2e 70 61 72 65 6e 74 29 20  f (this.parent) 
8b50: 7b 20 72 65 74 75 72 6e 20 65 78 74 65 6e 64 28  { return extend(
8b60: 63 72 65 61 74 65 28 74 68 69 73 29 2c 20 74 68  create(this), th
8b70: 69 73 2e 70 61 72 65 6e 74 29 20 7d 0a 20 20 20  is.parent) }.   
8b80: 20 72 65 74 75 72 6e 20 74 68 69 73 0a 20 20 7d   return this.  }
8b90: 0a 0a 20 20 2f 2a 0a 20 20 20 20 49 6e 63 6c 75  ..  /*.    Inclu
8ba0: 64 65 73 20 68 61 63 6b 73 20 6e 65 65 64 65 64  des hacks needed
8bb0: 20 66 6f 72 20 74 68 65 20 49 6e 74 65 72 6e 65   for the Interne
8bc0: 74 20 45 78 70 6c 6f 72 65 72 20 76 65 72 73 69  t Explorer versi
8bd0: 6f 6e 20 39 20 61 6e 64 20 62 65 6c 6f 77 0a 20  on 9 and below. 
8be0: 20 20 20 53 65 65 3a 20 68 74 74 70 3a 2f 2f 6b     See: http://k
8bf0: 61 6e 67 61 78 2e 67 69 74 68 75 62 2e 69 6f 2f  angax.github.io/
8c00: 63 6f 6d 70 61 74 2d 74 61 62 6c 65 2f 65 73 35  compat-table/es5
8c10: 2f 23 69 65 38 0a 20 20 20 20 20 20 20 20 20 68  /#ie8.         h
8c20: 74 74 70 3a 2f 2f 63 6f 64 65 70 6c 61 6e 65 74  ttp://codeplanet
8c30: 2e 69 6f 2f 64 72 6f 70 70 69 6e 67 2d 69 65 38  .io/dropping-ie8
8c40: 2f 0a 20 20 2a 2f 0a 0a 20 20 76 61 72 0a 20 20  /.  */..  var.  
8c50: 20 20 72 65 48 61 73 59 69 65 6c 64 20 20 3d 20    reHasYield  = 
8c60: 2f 3c 79 69 65 6c 64 5c 62 2f 69 2c 0a 20 20 20  /<yield\b/i,.   
8c70: 20 72 65 59 69 65 6c 64 41 6c 6c 20 20 3d 20 2f   reYieldAll  = /
8c80: 3c 79 69 65 6c 64 5c 73 2a 28 3f 3a 5c 2f 3e 7c  <yield\s*(?:\/>|
8c90: 3e 28 5b 5c 53 5c 73 5d 2a 3f 29 3c 5c 2f 79 69  >([\S\s]*?)<\/yi
8ca0: 65 6c 64 5c 73 2a 3e 7c 3e 29 2f 69 67 2c 0a 20  eld\s*>|>)/ig,. 
8cb0: 20 20 20 72 65 59 69 65 6c 64 53 72 63 20 20 3d     reYieldSrc  =
8cc0: 20 2f 3c 79 69 65 6c 64 5c 73 2b 74 6f 3d 5b 27   /<yield\s+to=['
8cd0: 22 5d 28 5b 5e 27 22 3e 5d 2a 29 5b 27 22 5d 5c  "]([^'">]*)['"]\
8ce0: 73 2a 3e 28 5b 5c 53 5c 73 5d 2a 3f 29 3c 5c 2f  s*>([\S\s]*?)<\/
8cf0: 79 69 65 6c 64 5c 73 2a 3e 2f 69 67 2c 0a 20 20  yield\s*>/ig,.  
8d00: 20 20 72 65 59 69 65 6c 64 44 65 73 74 20 3d 20    reYieldDest = 
8d10: 2f 3c 79 69 65 6c 64 5c 73 2b 66 72 6f 6d 3d 5b  /<yield\s+from=[
8d20: 27 22 5d 3f 28 5b 2d 5c 77 5d 2b 29 5b 27 22 5d  '"]?([-\w]+)['"]
8d30: 3f 5c 73 2a 28 3f 3a 5c 2f 3e 7c 3e 28 5b 5c 53  ?\s*(?:\/>|>([\S
8d40: 5c 73 5d 2a 3f 29 3c 5c 2f 79 69 65 6c 64 5c 73  \s]*?)<\/yield\s
8d50: 2a 3e 29 2f 69 67 2c 0a 20 20 20 20 72 6f 6f 74  *>)/ig,.    root
8d60: 45 6c 73 20 3d 20 7b 20 74 72 3a 20 27 74 62 6f  Els = { tr: 'tbo
8d70: 64 79 27 2c 20 74 68 3a 20 27 74 72 27 2c 20 74  dy', th: 'tr', t
8d80: 64 3a 20 27 74 72 27 2c 20 63 6f 6c 3a 20 27 63  d: 'tr', col: 'c
8d90: 6f 6c 67 72 6f 75 70 27 20 7d 2c 0a 20 20 20 20  olgroup' },.    
8da0: 74 62 6c 54 61 67 73 20 3d 20 49 45 5f 56 45 52  tblTags = IE_VER
8db0: 53 49 4f 4e 20 26 26 20 49 45 5f 56 45 52 53 49  SION && IE_VERSI
8dc0: 4f 4e 20 3c 20 31 30 20 3f 20 52 45 5f 53 50 45  ON < 10 ? RE_SPE
8dd0: 43 49 41 4c 5f 54 41 47 53 20 3a 20 52 45 5f 53  CIAL_TAGS : RE_S
8de0: 50 45 43 49 41 4c 5f 54 41 47 53 5f 4e 4f 5f 4f  PECIAL_TAGS_NO_O
8df0: 50 54 49 4f 4e 2c 0a 20 20 20 20 47 45 4e 45 52  PTION,.    GENER
8e00: 49 43 20 3d 20 27 64 69 76 27 2c 0a 20 20 20 20  IC = 'div',.    
8e10: 53 56 47 20 3d 20 27 73 76 67 27 3b 0a 0a 0a 20  SVG = 'svg';... 
8e20: 20 2f 2a 0a 20 20 20 20 43 72 65 61 74 65 73 20   /*.    Creates 
8e30: 74 68 65 20 72 6f 6f 74 20 65 6c 65 6d 65 6e 74  the root element
8e40: 20 66 6f 72 20 74 61 62 6c 65 20 6f 72 20 73 65   for table or se
8e50: 6c 65 63 74 20 63 68 69 6c 64 20 65 6c 65 6d 65  lect child eleme
8e60: 6e 74 73 3a 0a 20 20 20 20 74 72 2f 74 68 2f 74  nts:.    tr/th/t
8e70: 64 2f 74 68 65 61 64 2f 74 66 6f 6f 74 2f 74 62  d/thead/tfoot/tb
8e80: 6f 64 79 2f 63 61 70 74 69 6f 6e 2f 63 6f 6c 2f  ody/caption/col/
8e90: 63 6f 6c 67 72 6f 75 70 2f 6f 70 74 69 6f 6e 2f  colgroup/option/
8ea0: 6f 70 74 67 72 6f 75 70 0a 20 20 2a 2f 0a 20 20  optgroup.  */.  
8eb0: 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 61 6c  function special
8ec0: 54 61 67 73 28 65 6c 2c 20 74 6d 70 6c 2c 20 74  Tags(el, tmpl, t
8ed0: 61 67 4e 61 6d 65 29 20 7b 0a 0a 20 20 20 20 76  agName) {..    v
8ee0: 61 72 0a 20 20 20 20 20 20 73 65 6c 65 63 74 20  ar.      select 
8ef0: 3d 20 74 61 67 4e 61 6d 65 5b 30 5d 20 3d 3d 3d  = tagName[0] ===
8f00: 20 27 6f 27 2c 0a 20 20 20 20 20 20 70 61 72 65   'o',.      pare
8f10: 6e 74 20 3d 20 73 65 6c 65 63 74 20 3f 20 27 73  nt = select ? 's
8f20: 65 6c 65 63 74 3e 27 20 3a 20 27 74 61 62 6c 65  elect>' : 'table
8f30: 3e 27 3b 0a 0a 20 20 20 20 2f 2f 20 74 72 69 6d  >';..    // trim
8f40: 28 29 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  () is important 
8f50: 68 65 72 65 2c 20 74 68 69 73 20 65 6e 73 75 72  here, this ensur
8f60: 65 73 20 77 65 20 64 6f 6e 27 74 20 68 61 76 65  es we don't have
8f70: 20 61 72 74 69 66 61 63 74 73 2c 0a 20 20 20 20   artifacts,.    
8f80: 2f 2f 20 73 6f 20 77 65 20 63 61 6e 20 63 68 65  // so we can che
8f90: 63 6b 20 69 66 20 77 65 20 68 61 76 65 20 6f 6e  ck if we have on
8fa0: 6c 79 20 6f 6e 65 20 65 6c 65 6d 65 6e 74 20 69  ly one element i
8fb0: 6e 73 69 64 65 20 74 68 65 20 70 61 72 65 6e 74  nside the parent
8fc0: 0a 20 20 20 20 65 6c 2e 69 6e 6e 65 72 48 54 4d  .    el.innerHTM
8fd0: 4c 20 3d 20 27 3c 27 20 2b 20 70 61 72 65 6e 74  L = '<' + parent
8fe0: 20 2b 20 74 6d 70 6c 2e 74 72 69 6d 28 29 20 2b   + tmpl.trim() +
8ff0: 20 27 3c 2f 27 20 2b 20 70 61 72 65 6e 74 3b 0a   '</' + parent;.
9000: 20 20 20 20 70 61 72 65 6e 74 20 3d 20 65 6c 2e      parent = el.
9010: 66 69 72 73 74 43 68 69 6c 64 3b 0a 0a 20 20 20  firstChild;..   
9020: 20 2f 2f 20 72 65 74 75 72 6e 73 20 74 68 65 20   // returns the 
9030: 69 6d 6d 65 64 69 61 74 65 20 70 61 72 65 6e 74  immediate parent
9040: 20 69 66 20 74 72 2f 74 68 2f 74 64 2f 63 6f 6c   if tr/th/td/col
9050: 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 65 6c 65   is the only ele
9060: 6d 65 6e 74 2c 20 69 66 20 6e 6f 74 0a 20 20 20  ment, if not.   
9070: 20 2f 2f 20 72 65 74 75 72 6e 73 20 74 68 65 20   // returns the 
9080: 77 68 6f 6c 65 20 74 72 65 65 2c 20 61 73 20 74  whole tree, as t
9090: 68 69 73 20 63 61 6e 20 69 6e 63 6c 75 64 65 20  his can include 
90a0: 61 64 64 69 74 69 6f 6e 61 6c 20 65 6c 65 6d 65  additional eleme
90b0: 6e 74 73 0a 20 20 20 20 2f 2a 20 69 73 74 61 6e  nts.    /* istan
90c0: 62 75 6c 20 69 67 6e 6f 72 65 20 6e 65 78 74 20  bul ignore next 
90d0: 2a 2f 0a 20 20 20 20 69 66 20 28 73 65 6c 65 63  */.    if (selec
90e0: 74 29 20 7b 0a 20 20 20 20 20 20 70 61 72 65 6e  t) {.      paren
90f0: 74 2e 73 65 6c 65 63 74 65 64 49 6e 64 65 78 20  t.selectedIndex 
9100: 3d 20 2d 31 3b 20 20 2f 2f 20 66 6f 72 20 49 45  = -1;  // for IE
9110: 39 2c 20 63 6f 6d 70 61 74 69 62 6c 65 20 77 2f  9, compatible w/
9120: 63 75 72 72 65 6e 74 20 72 69 6f 74 20 62 65 68  current riot beh
9130: 61 76 69 6f 72 0a 20 20 20 20 7d 20 65 6c 73 65  avior.    } else
9140: 20 7b 0a 20 20 20 20 20 20 2f 2f 20 61 76 6f 69   {.      // avoi
9150: 64 73 20 69 6e 73 65 72 74 69 6f 6e 20 6f 66 20  ds insertion of 
9160: 63 6f 69 6e 74 61 69 6e 65 72 20 69 6e 73 69 64  cointainer insid
9170: 65 20 63 6f 6e 74 61 69 6e 65 72 20 28 65 78 3a  e container (ex:
9180: 20 74 62 6f 64 79 20 69 6e 73 69 64 65 20 74 62   tbody inside tb
9190: 6f 64 79 29 0a 20 20 20 20 20 20 76 61 72 20 74  ody).      var t
91a0: 6e 61 6d 65 20 3d 20 72 6f 6f 74 45 6c 73 5b 74  name = rootEls[t
91b0: 61 67 4e 61 6d 65 5d 3b 0a 20 20 20 20 20 20 69  agName];.      i
91c0: 66 20 28 74 6e 61 6d 65 20 26 26 20 70 61 72 65  f (tname && pare
91d0: 6e 74 2e 63 68 69 6c 64 45 6c 65 6d 65 6e 74 43  nt.childElementC
91e0: 6f 75 6e 74 20 3d 3d 3d 20 31 29 20 7b 20 70 61  ount === 1) { pa
91f0: 72 65 6e 74 20 3d 20 24 28 74 6e 61 6d 65 2c 20  rent = $(tname, 
9200: 70 61 72 65 6e 74 29 3b 20 7d 0a 20 20 20 20 7d  parent); }.    }
9210: 0a 20 20 20 20 72 65 74 75 72 6e 20 70 61 72 65  .    return pare
9220: 6e 74 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 20  nt.  }..  /*.   
9230: 20 52 65 70 6c 61 63 65 20 74 68 65 20 79 69 65   Replace the yie
9240: 6c 64 20 74 61 67 20 66 72 6f 6d 20 61 6e 79 20  ld tag from any 
9250: 74 61 67 20 74 65 6d 70 6c 61 74 65 20 77 69 74  tag template wit
9260: 68 20 74 68 65 20 69 6e 6e 65 72 48 54 4d 4c 20  h the innerHTML 
9270: 6f 66 20 74 68 65 0a 20 20 20 20 6f 72 69 67 69  of the.    origi
9280: 6e 61 6c 20 74 61 67 20 69 6e 20 74 68 65 20 70  nal tag in the p
9290: 61 67 65 0a 20 20 2a 2f 0a 20 20 66 75 6e 63 74  age.  */.  funct
92a0: 69 6f 6e 20 72 65 70 6c 61 63 65 59 69 65 6c 64  ion replaceYield
92b0: 28 74 6d 70 6c 2c 20 68 74 6d 6c 29 20 7b 0a 20  (tmpl, html) {. 
92c0: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
92d0: 20 69 66 20 6e 6f 20 79 69 65 6c 64 0a 20 20 20   if no yield.   
92e0: 20 69 66 20 28 21 72 65 48 61 73 59 69 65 6c 64   if (!reHasYield
92f0: 2e 74 65 73 74 28 74 6d 70 6c 29 29 20 7b 20 72  .test(tmpl)) { r
9300: 65 74 75 72 6e 20 74 6d 70 6c 20 7d 0a 0a 20 20  eturn tmpl }..  
9310: 20 20 2f 2f 20 62 65 20 63 61 72 65 66 75 6c 20    // be careful 
9320: 77 69 74 68 20 23 31 33 34 33 20 2d 20 73 74 72  with #1343 - str
9330: 69 6e 67 20 6f 6e 20 74 68 65 20 73 6f 75 72 63  ing on the sourc
9340: 65 20 68 61 76 69 6e 67 20 60 24 31 60 0a 20 20  e having `$1`.  
9350: 20 20 76 61 72 20 73 72 63 20 3d 20 7b 7d 3b 0a    var src = {};.
9360: 0a 20 20 20 20 68 74 6d 6c 20 3d 20 68 74 6d 6c  .    html = html
9370: 20 26 26 20 68 74 6d 6c 2e 72 65 70 6c 61 63 65   && html.replace
9380: 28 72 65 59 69 65 6c 64 53 72 63 2c 20 66 75 6e  (reYieldSrc, fun
9390: 63 74 69 6f 6e 20 28 5f 2c 20 72 65 66 2c 20 74  ction (_, ref, t
93a0: 65 78 74 29 20 7b 0a 20 20 20 20 20 20 73 72 63  ext) {.      src
93b0: 5b 72 65 66 5d 20 3d 20 73 72 63 5b 72 65 66 5d  [ref] = src[ref]
93c0: 20 7c 7c 20 74 65 78 74 3b 20 20 20 2f 2f 20 70   || text;   // p
93d0: 72 65 73 65 72 76 65 20 66 69 72 73 74 20 64 65  reserve first de
93e0: 66 69 6e 69 74 69 6f 6e 0a 20 20 20 20 20 20 72  finition.      r
93f0: 65 74 75 72 6e 20 27 27 0a 20 20 20 20 7d 29 2e  eturn ''.    }).
9400: 74 72 69 6d 28 29 3b 0a 0a 20 20 20 20 72 65 74  trim();..    ret
9410: 75 72 6e 20 74 6d 70 6c 0a 20 20 20 20 20 20 2e  urn tmpl.      .
9420: 72 65 70 6c 61 63 65 28 72 65 59 69 65 6c 64 44  replace(reYieldD
9430: 65 73 74 2c 20 66 75 6e 63 74 69 6f 6e 20 28 5f  est, function (_
9440: 2c 20 72 65 66 2c 20 64 65 66 29 20 7b 20 20 2f  , ref, def) {  /
9450: 2f 20 79 69 65 6c 64 20 77 69 74 68 20 66 72 6f  / yield with fro
9460: 6d 20 2d 20 74 6f 20 61 74 74 72 73 0a 20 20 20  m - to attrs.   
9470: 20 20 20 20 20 72 65 74 75 72 6e 20 73 72 63 5b       return src[
9480: 72 65 66 5d 20 7c 7c 20 64 65 66 20 7c 7c 20 27  ref] || def || '
9490: 27 0a 20 20 20 20 20 20 7d 29 0a 20 20 20 20 20  '.      }).     
94a0: 20 2e 72 65 70 6c 61 63 65 28 72 65 59 69 65 6c   .replace(reYiel
94b0: 64 41 6c 6c 2c 20 66 75 6e 63 74 69 6f 6e 20 28  dAll, function (
94c0: 5f 2c 20 64 65 66 29 20 7b 20 20 20 20 20 20 20  _, def) {       
94d0: 20 2f 2f 20 79 69 65 6c 64 20 77 69 74 68 6f 75   // yield withou
94e0: 74 20 61 6e 79 20 22 66 72 6f 6d 22 0a 20 20 20  t any "from".   
94f0: 20 20 20 20 20 72 65 74 75 72 6e 20 68 74 6d 6c       return html
9500: 20 7c 7c 20 64 65 66 20 7c 7c 20 27 27 0a 20 20   || def || ''.  
9510: 20 20 20 20 7d 29 0a 20 20 7d 0a 0a 20 20 2f 2a      }).  }..  /*
9520: 2a 0a 20 20 20 2a 20 43 72 65 61 74 65 73 20 61  *.   * Creates a
9530: 20 44 4f 4d 20 65 6c 65 6d 65 6e 74 20 74 6f 20   DOM element to 
9540: 77 72 61 70 20 74 68 65 20 67 69 76 65 6e 20 63  wrap the given c
9550: 6f 6e 74 65 6e 74 2e 20 4e 6f 72 6d 61 6c 6c 79  ontent. Normally
9560: 20 61 6e 20 60 44 49 56 60 2c 20 62 75 74 20 63   an `DIV`, but c
9570: 61 6e 20 62 65 0a 20 20 20 2a 20 61 6c 73 6f 20  an be.   * also 
9580: 61 20 60 54 41 42 4c 45 60 2c 20 60 53 45 4c 45  a `TABLE`, `SELE
9590: 43 54 60 2c 20 60 54 42 4f 44 59 60 2c 20 60 54  CT`, `TBODY`, `T
95a0: 52 60 2c 20 6f 72 20 60 43 4f 4c 47 52 4f 55 50  R`, or `COLGROUP
95b0: 60 20 65 6c 65 6d 65 6e 74 2e 0a 20 20 20 2a 0a  ` element..   *.
95c0: 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20     * @param   { 
95d0: 53 74 72 69 6e 67 20 7d 20 74 6d 70 6c 20 20 2d  String } tmpl  -
95e0: 20 54 68 65 20 74 65 6d 70 6c 61 74 65 20 63 6f   The template co
95f0: 6d 69 6e 67 20 66 72 6f 6d 20 74 68 65 20 63 75  ming from the cu
9600: 73 74 6f 6d 20 74 61 67 20 64 65 66 69 6e 69 74  stom tag definit
9610: 69 6f 6e 0a 20 20 20 2a 20 40 70 61 72 61 6d 20  ion.   * @param 
9620: 20 20 7b 20 53 74 72 69 6e 67 20 7d 20 68 74 6d    { String } htm
9630: 6c 20 2d 20 48 54 4d 4c 20 63 6f 6e 74 65 6e 74  l - HTML content
9640: 20 74 68 61 74 20 63 6f 6d 65 73 20 66 72 6f 6d   that comes from
9650: 20 74 68 65 20 44 4f 4d 20 65 6c 65 6d 65 6e 74   the DOM element
9660: 20 77 68 65 72 65 20 79 6f 75 0a 20 20 20 2a 20   where you.   * 
9670: 20 20 20 20 20 20 20 20 20 20 77 69 6c 6c 20 6d            will m
9680: 6f 75 6e 74 20 74 68 65 20 74 61 67 2c 20 6d 6f  ount the tag, mo
9690: 73 74 6c 79 20 74 68 65 20 6f 72 69 67 69 6e 61  stly the origina
96a0: 6c 20 74 61 67 20 69 6e 20 74 68 65 20 70 61 67  l tag in the pag
96b0: 65 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20  e.   * @param   
96c0: 7b 20 42 6f 6f 6c 65 61 6e 20 7d 20 69 73 53 76  { Boolean } isSv
96d0: 67 20 2d 20 74 72 75 65 20 69 66 20 74 68 65 20  g - true if the 
96e0: 72 6f 6f 74 20 6e 6f 64 65 20 69 73 20 61 6e 20  root node is an 
96f0: 73 76 67 0a 20 20 20 2a 20 40 72 65 74 75 72 6e  svg.   * @return
9700: 73 20 7b 20 48 54 4d 4c 45 6c 65 6d 65 6e 74 20  s { HTMLElement 
9710: 7d 20 44 4f 4d 20 65 6c 65 6d 65 6e 74 20 77 69  } DOM element wi
9720: 74 68 20 5f 74 6d 70 6c 5f 20 6d 65 72 67 65 64  th _tmpl_ merged
9730: 20 74 68 72 6f 75 67 68 20 60 59 49 45 4c 44 60   through `YIELD`
9740: 20 77 69 74 68 20 74 68 65 20 5f 68 74 6d 6c 5f   with the _html_
9750: 2e 0a 20 20 20 2a 2f 0a 20 20 66 75 6e 63 74 69  ..   */.  functi
9760: 6f 6e 20 6d 6b 64 6f 6d 28 74 6d 70 6c 2c 20 68  on mkdom(tmpl, h
9770: 74 6d 6c 2c 20 69 73 53 76 67 29 20 7b 0a 20 20  tml, isSvg) {.  
9780: 20 20 76 61 72 20 6d 61 74 63 68 20 20 20 3d 20    var match   = 
9790: 74 6d 70 6c 20 26 26 20 74 6d 70 6c 2e 6d 61 74  tmpl && tmpl.mat
97a0: 63 68 28 2f 5e 5c 73 2a 3c 28 5b 2d 5c 77 5d 2b  ch(/^\s*<([-\w]+
97b0: 29 2f 29 3b 0a 20 20 20 20 76 61 72 20 20 74 61  )/);.    var  ta
97c0: 67 4e 61 6d 65 20 3d 20 6d 61 74 63 68 20 26 26  gName = match &&
97d0: 20 6d 61 74 63 68 5b 31 5d 2e 74 6f 4c 6f 77 65   match[1].toLowe
97e0: 72 43 61 73 65 28 29 3b 0a 20 20 20 20 76 61 72  rCase();.    var
97f0: 20 65 6c 20 3d 20 6d 61 6b 65 45 6c 65 6d 65 6e   el = makeElemen
9800: 74 28 69 73 53 76 67 20 3f 20 53 56 47 20 3a 20  t(isSvg ? SVG : 
9810: 47 45 4e 45 52 49 43 29 3b 0a 0a 20 20 20 20 2f  GENERIC);..    /
9820: 2f 20 72 65 70 6c 61 63 65 20 61 6c 6c 20 74 68  / replace all th
9830: 65 20 79 69 65 6c 64 20 74 61 67 73 20 77 69 74  e yield tags wit
9840: 68 20 74 68 65 20 74 61 67 20 69 6e 6e 65 72 20  h the tag inner 
9850: 68 74 6d 6c 0a 20 20 20 20 74 6d 70 6c 20 3d 20  html.    tmpl = 
9860: 72 65 70 6c 61 63 65 59 69 65 6c 64 28 74 6d 70  replaceYield(tmp
9870: 6c 2c 20 68 74 6d 6c 29 3b 0a 0a 20 20 20 20 2f  l, html);..    /
9880: 2a 20 69 73 74 61 6e 62 75 6c 20 69 67 6e 6f 72  * istanbul ignor
9890: 65 20 6e 65 78 74 20 2a 2f 0a 20 20 20 20 69 66  e next */.    if
98a0: 20 28 74 62 6c 54 61 67 73 2e 74 65 73 74 28 74   (tblTags.test(t
98b0: 61 67 4e 61 6d 65 29 29 0a 20 20 20 20 20 20 7b  agName)).      {
98c0: 20 65 6c 20 3d 20 73 70 65 63 69 61 6c 54 61 67   el = specialTag
98d0: 73 28 65 6c 2c 20 74 6d 70 6c 2c 20 74 61 67 4e  s(el, tmpl, tagN
98e0: 61 6d 65 29 3b 20 7d 0a 20 20 20 20 65 6c 73 65  ame); }.    else
98f0: 0a 20 20 20 20 20 20 7b 20 73 65 74 49 6e 6e 65  .      { setInne
9900: 72 48 54 4d 4c 28 65 6c 2c 20 74 6d 70 6c 2c 20  rHTML(el, tmpl, 
9910: 69 73 53 76 67 29 3b 20 7d 0a 0a 20 20 20 20 72  isSvg); }..    r
9920: 65 74 75 72 6e 20 65 6c 0a 20 20 7d 0a 0a 20 20  eturn el.  }..  
9930: 76 61 72 20 45 56 45 4e 54 5f 41 54 54 52 5f 52  var EVENT_ATTR_R
9940: 45 20 3d 20 2f 5e 6f 6e 2f 3b 0a 0a 20 20 2f 2a  E = /^on/;..  /*
9950: 2a 0a 20 20 20 2a 20 54 72 75 65 20 69 66 20 74  *.   * True if t
9960: 68 65 20 65 76 65 6e 74 20 61 74 74 72 69 62 75  he event attribu
9970: 74 65 20 73 74 61 72 74 73 20 77 69 74 68 20 27  te starts with '
9980: 6f 6e 27 0a 20 20 20 2a 20 40 70 61 72 61 6d 20  on'.   * @param 
9990: 20 20 7b 20 53 74 72 69 6e 67 20 7d 20 61 74 74    { String } att
99a0: 72 69 62 75 74 65 20 2d 20 65 76 65 6e 74 20 61  ribute - event a
99b0: 74 74 72 69 62 75 74 65 0a 20 20 20 2a 20 40 72  ttribute.   * @r
99c0: 65 74 75 72 6e 73 20 7b 20 42 6f 6f 6c 65 61 6e  eturns { Boolean
99d0: 20 7d 0a 20 20 20 2a 2f 0a 20 20 66 75 6e 63 74   }.   */.  funct
99e0: 69 6f 6e 20 69 73 45 76 65 6e 74 41 74 74 72 69  ion isEventAttri
99f0: 62 75 74 65 28 61 74 74 72 69 62 75 74 65 29 20  bute(attribute) 
9a00: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 45 56 45  {.    return EVE
9a10: 4e 54 5f 41 54 54 52 5f 52 45 2e 74 65 73 74 28  NT_ATTR_RE.test(
9a20: 61 74 74 72 69 62 75 74 65 29 0a 20 20 7d 0a 0a  attribute).  }..
9a30: 20 20 2f 2a 2a 0a 20 20 20 2a 20 4c 6f 6f 70 20    /**.   * Loop 
9a40: 62 61 63 6b 77 61 72 64 20 61 6c 6c 20 74 68 65  backward all the
9a50: 20 70 61 72 65 6e 74 73 20 74 72 65 65 20 74 6f   parents tree to
9a60: 20 64 65 74 65 63 74 20 74 68 65 20 66 69 72 73   detect the firs
9a70: 74 20 63 75 73 74 6f 6d 20 70 61 72 65 6e 74 20  t custom parent 
9a80: 74 61 67 0a 20 20 20 2a 20 40 70 61 72 61 6d 20  tag.   * @param 
9a90: 20 20 7b 20 4f 62 6a 65 63 74 20 7d 20 74 61 67    { Object } tag
9aa0: 20 2d 20 61 20 54 61 67 20 69 6e 73 74 61 6e 63   - a Tag instanc
9ab0: 65 0a 20 20 20 2a 20 40 72 65 74 75 72 6e 73 20  e.   * @returns 
9ac0: 7b 20 4f 62 6a 65 63 74 20 7d 20 74 68 65 20 69  { Object } the i
9ad0: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
9ae0: 69 72 73 74 20 63 75 73 74 6f 6d 20 70 61 72 65  irst custom pare
9af0: 6e 74 20 74 61 67 20 66 6f 75 6e 64 0a 20 20 20  nt tag found.   
9b00: 2a 2f 0a 20 20 66 75 6e 63 74 69 6f 6e 20 67 65  */.  function ge
9b10: 74 49 6d 6d 65 64 69 61 74 65 43 75 73 74 6f 6d  tImmediateCustom
9b20: 50 61 72 65 6e 74 28 74 61 67 29 20 7b 0a 20 20  Parent(tag) {.  
9b30: 20 20 76 61 72 20 70 74 61 67 20 3d 20 74 61 67    var ptag = tag
9b40: 3b 0a 20 20 20 20 77 68 69 6c 65 20 28 70 74 61  ;.    while (pta
9b50: 67 2e 5f 5f 2e 69 73 41 6e 6f 6e 79 6d 6f 75 73  g.__.isAnonymous
9b60: 29 20 7b 0a 20 20 20 20 20 20 69 66 20 28 21 70  ) {.      if (!p
9b70: 74 61 67 2e 70 61 72 65 6e 74 29 20 7b 20 62 72  tag.parent) { br
9b80: 65 61 6b 20 7d 0a 20 20 20 20 20 20 70 74 61 67  eak }.      ptag
9b90: 20 3d 20 70 74 61 67 2e 70 61 72 65 6e 74 3b 0a   = ptag.parent;.
9ba0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
9bb0: 20 70 74 61 67 0a 20 20 7d 0a 0a 20 20 2f 2a 2a   ptag.  }..  /**
9bc0: 0a 20 20 20 2a 20 54 72 69 67 67 65 72 20 44 4f  .   * Trigger DO
9bd0: 4d 20 65 76 65 6e 74 73 0a 20 20 20 2a 20 40 70  M events.   * @p
9be0: 61 72 61 6d 20 20 20 7b 20 48 54 4d 4c 45 6c 65  aram   { HTMLEle
9bf0: 6d 65 6e 74 20 7d 20 64 6f 6d 20 2d 20 64 6f 6d  ment } dom - dom
9c00: 20 65 6c 65 6d 65 6e 74 20 74 61 72 67 65 74 20   element target 
9c10: 6f 66 20 74 68 65 20 65 76 65 6e 74 0a 20 20 20  of the event.   
9c20: 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 46 75 6e  * @param   { Fun
9c30: 63 74 69 6f 6e 20 7d 20 68 61 6e 64 6c 65 72 20  ction } handler 
9c40: 2d 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a  - user function.
9c50: 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20     * @param   { 
9c60: 4f 62 6a 65 63 74 20 7d 20 65 20 2d 20 65 76 65  Object } e - eve
9c70: 6e 74 20 6f 62 6a 65 63 74 0a 20 20 20 2a 2f 0a  nt object.   */.
9c80: 20 20 66 75 6e 63 74 69 6f 6e 20 68 61 6e 64 6c    function handl
9c90: 65 45 76 65 6e 74 28 64 6f 6d 2c 20 68 61 6e 64  eEvent(dom, hand
9ca0: 6c 65 72 2c 20 65 29 20 7b 0a 20 20 20 20 76 61  ler, e) {.    va
9cb0: 72 20 70 74 61 67 20 3d 20 74 68 69 73 2e 5f 5f  r ptag = this.__
9cc0: 2e 70 61 72 65 6e 74 3b 0a 20 20 20 20 76 61 72  .parent;.    var
9cd0: 20 69 74 65 6d 20 3d 20 74 68 69 73 2e 5f 5f 2e   item = this.__.
9ce0: 69 74 65 6d 3b 0a 0a 20 20 20 20 69 66 20 28 21  item;..    if (!
9cf0: 69 74 65 6d 29 0a 20 20 20 20 20 20 7b 20 77 68  item).      { wh
9d00: 69 6c 65 20 28 70 74 61 67 20 26 26 20 21 69 74  ile (ptag && !it
9d10: 65 6d 29 20 7b 0a 20 20 20 20 20 20 20 20 69 74  em) {.        it
9d20: 65 6d 20 3d 20 70 74 61 67 2e 5f 5f 2e 69 74 65  em = ptag.__.ite
9d30: 6d 3b 0a 20 20 20 20 20 20 20 20 70 74 61 67 20  m;.        ptag 
9d40: 3d 20 70 74 61 67 2e 5f 5f 2e 70 61 72 65 6e 74  = ptag.__.parent
9d50: 3b 0a 20 20 20 20 20 20 7d 20 7d 0a 0a 20 20 20  ;.      } }..   
9d60: 20 2f 2f 20 6f 76 65 72 72 69 64 65 20 74 68 65   // override the
9d70: 20 65 76 65 6e 74 20 70 72 6f 70 65 72 74 69 65   event propertie
9d80: 73 0a 20 20 20 20 2f 2a 20 69 73 74 61 6e 62 75  s.    /* istanbu
9d90: 6c 20 69 67 6e 6f 72 65 20 6e 65 78 74 20 2a 2f  l ignore next */
9da0: 0a 20 20 20 20 69 66 20 28 69 73 57 72 69 74 61  .    if (isWrita
9db0: 62 6c 65 28 65 2c 20 27 63 75 72 72 65 6e 74 54  ble(e, 'currentT
9dc0: 61 72 67 65 74 27 29 29 20 7b 20 65 2e 63 75 72  arget')) { e.cur
9dd0: 72 65 6e 74 54 61 72 67 65 74 20 3d 20 64 6f 6d  rentTarget = dom
9de0: 3b 20 7d 0a 20 20 20 20 2f 2a 20 69 73 74 61 6e  ; }.    /* istan
9df0: 62 75 6c 20 69 67 6e 6f 72 65 20 6e 65 78 74 20  bul ignore next 
9e00: 2a 2f 0a 20 20 20 20 69 66 20 28 69 73 57 72 69  */.    if (isWri
9e10: 74 61 62 6c 65 28 65 2c 20 27 74 61 72 67 65 74  table(e, 'target
9e20: 27 29 29 20 7b 20 65 2e 74 61 72 67 65 74 20 3d  ')) { e.target =
9e30: 20 65 2e 73 72 63 45 6c 65 6d 65 6e 74 3b 20 7d   e.srcElement; }
9e40: 0a 20 20 20 20 2f 2a 20 69 73 74 61 6e 62 75 6c  .    /* istanbul
9e50: 20 69 67 6e 6f 72 65 20 6e 65 78 74 20 2a 2f 0a   ignore next */.
9e60: 20 20 20 20 69 66 20 28 69 73 57 72 69 74 61 62      if (isWritab
9e70: 6c 65 28 65 2c 20 27 77 68 69 63 68 27 29 29 20  le(e, 'which')) 
9e80: 7b 20 65 2e 77 68 69 63 68 20 3d 20 65 2e 63 68  { e.which = e.ch
9e90: 61 72 43 6f 64 65 20 7c 7c 20 65 2e 6b 65 79 43  arCode || e.keyC
9ea0: 6f 64 65 3b 20 7d 0a 0a 20 20 20 20 65 2e 69 74  ode; }..    e.it
9eb0: 65 6d 20 3d 20 69 74 65 6d 3b 0a 0a 20 20 20 20  em = item;..    
9ec0: 68 61 6e 64 6c 65 72 2e 63 61 6c 6c 28 74 68 69  handler.call(thi
9ed0: 73 2c 20 65 29 3b 0a 0a 20 20 20 20 2f 2f 20 61  s, e);..    // a
9ee0: 76 6f 69 64 20 61 75 74 6f 20 75 70 64 61 74 65  void auto update
9ef0: 73 0a 20 20 20 20 69 66 20 28 21 73 65 74 74 69  s.    if (!setti
9f00: 6e 67 73 2e 61 75 74 6f 55 70 64 61 74 65 29 20  ngs.autoUpdate) 
9f10: 7b 20 72 65 74 75 72 6e 20 7d 0a 0a 20 20 20 20  { return }..    
9f20: 69 66 20 28 21 65 2e 70 72 65 76 65 6e 74 55 70  if (!e.preventUp
9f30: 64 61 74 65 29 20 7b 0a 20 20 20 20 20 20 76 61  date) {.      va
9f40: 72 20 70 20 3d 20 67 65 74 49 6d 6d 65 64 69 61  r p = getImmedia
9f50: 74 65 43 75 73 74 6f 6d 50 61 72 65 6e 74 28 74  teCustomParent(t
9f60: 68 69 73 29 3b 0a 20 20 20 20 20 20 2f 2f 20 66  his);.      // f
9f70: 69 78 65 73 20 23 32 30 38 33 0a 20 20 20 20 20  ixes #2083.     
9f80: 20 69 66 20 28 70 2e 69 73 4d 6f 75 6e 74 65 64   if (p.isMounted
9f90: 29 20 7b 20 70 2e 75 70 64 61 74 65 28 29 3b 20  ) { p.update(); 
9fa0: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f  }.    }.  }..  /
9fb0: 2a 2a 0a 20 20 20 2a 20 41 74 74 61 63 68 20 61  **.   * Attach a
9fc0: 6e 20 65 76 65 6e 74 20 74 6f 20 61 20 44 4f 4d  n event to a DOM
9fd0: 20 6e 6f 64 65 0a 20 20 20 2a 20 40 70 61 72 61   node.   * @para
9fe0: 6d 20 7b 20 53 74 72 69 6e 67 20 7d 20 6e 61 6d  m { String } nam
9ff0: 65 20 2d 20 65 76 65 6e 74 20 6e 61 6d 65 0a 20  e - event name. 
a000: 20 20 2a 20 40 70 61 72 61 6d 20 7b 20 46 75 6e    * @param { Fun
a010: 63 74 69 6f 6e 20 7d 20 68 61 6e 64 6c 65 72 20  ction } handler 
a020: 2d 20 65 76 65 6e 74 20 63 61 6c 6c 62 61 63 6b  - event callback
a030: 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 7b 20 4f  .   * @param { O
a040: 62 6a 65 63 74 20 7d 20 64 6f 6d 20 2d 20 64 6f  bject } dom - do
a050: 6d 20 6e 6f 64 65 0a 20 20 20 2a 20 40 70 61 72  m node.   * @par
a060: 61 6d 20 7b 20 54 61 67 20 7d 20 74 61 67 20 2d  am { Tag } tag -
a070: 20 74 61 67 20 69 6e 73 74 61 6e 63 65 0a 20 20   tag instance.  
a080: 20 2a 2f 0a 20 20 66 75 6e 63 74 69 6f 6e 20 73   */.  function s
a090: 65 74 45 76 65 6e 74 48 61 6e 64 6c 65 72 28 6e  etEventHandler(n
a0a0: 61 6d 65 2c 20 68 61 6e 64 6c 65 72 2c 20 64 6f  ame, handler, do
a0b0: 6d 2c 20 74 61 67 29 20 7b 0a 20 20 20 20 76 61  m, tag) {.    va
a0c0: 72 20 65 76 65 6e 74 4e 61 6d 65 3b 0a 20 20 20  r eventName;.   
a0d0: 20 76 61 72 20 63 62 20 3d 20 68 61 6e 64 6c 65   var cb = handle
a0e0: 45 76 65 6e 74 2e 62 69 6e 64 28 74 61 67 2c 20  Event.bind(tag, 
a0f0: 64 6f 6d 2c 20 68 61 6e 64 6c 65 72 29 3b 0a 0a  dom, handler);..
a100: 20 20 20 20 2f 2f 20 61 76 6f 69 64 20 74 6f 20      // avoid to 
a110: 62 69 6e 64 20 74 77 69 63 65 20 74 68 65 20 73  bind twice the s
a120: 61 6d 65 20 65 76 65 6e 74 0a 20 20 20 20 2f 2f  ame event.    //
a130: 20 70 6f 73 73 69 62 6c 65 20 66 69 78 20 66 6f   possible fix fo
a140: 72 20 23 32 33 33 32 0a 20 20 20 20 64 6f 6d 5b  r #2332.    dom[
a150: 6e 61 6d 65 5d 20 3d 20 6e 75 6c 6c 3b 0a 0a 20  name] = null;.. 
a160: 20 20 20 2f 2f 20 6e 6f 72 6d 61 6c 69 7a 65 20     // normalize 
a170: 65 76 65 6e 74 20 6e 61 6d 65 0a 20 20 20 20 65  event name.    e
a180: 76 65 6e 74 4e 61 6d 65 20 3d 20 6e 61 6d 65 2e  ventName = name.
a190: 72 65 70 6c 61 63 65 28 52 45 5f 45 56 45 4e 54  replace(RE_EVENT
a1a0: 53 5f 50 52 45 46 49 58 2c 20 27 27 29 3b 0a 0a  S_PREFIX, '');..
a1b0: 20 20 20 20 2f 2f 20 63 61 63 68 65 20 74 68 65      // cache the
a1c0: 20 6c 69 73 74 65 6e 65 72 20 69 6e 74 6f 20 74   listener into t
a1d0: 68 65 20 6c 69 73 74 65 6e 65 72 73 20 61 72 72  he listeners arr
a1e0: 61 79 0a 20 20 20 20 69 66 20 28 21 63 6f 6e 74  ay.    if (!cont
a1f0: 61 69 6e 73 28 74 61 67 2e 5f 5f 2e 6c 69 73 74  ains(tag.__.list
a200: 65 6e 65 72 73 2c 20 64 6f 6d 29 29 20 7b 20 74  eners, dom)) { t
a210: 61 67 2e 5f 5f 2e 6c 69 73 74 65 6e 65 72 73 2e  ag.__.listeners.
a220: 70 75 73 68 28 64 6f 6d 29 3b 20 7d 0a 20 20 20  push(dom); }.   
a230: 20 69 66 20 28 21 64 6f 6d 5b 52 49 4f 54 5f 45   if (!dom[RIOT_E
a240: 56 45 4e 54 53 5f 4b 45 59 5d 29 20 7b 20 64 6f  VENTS_KEY]) { do
a250: 6d 5b 52 49 4f 54 5f 45 56 45 4e 54 53 5f 4b 45  m[RIOT_EVENTS_KE
a260: 59 5d 20 3d 20 7b 7d 3b 20 7d 0a 20 20 20 20 69  Y] = {}; }.    i
a270: 66 20 28 64 6f 6d 5b 52 49 4f 54 5f 45 56 45 4e  f (dom[RIOT_EVEN
a280: 54 53 5f 4b 45 59 5d 5b 6e 61 6d 65 5d 29 20 7b  TS_KEY][name]) {
a290: 20 64 6f 6d 2e 72 65 6d 6f 76 65 45 76 65 6e 74   dom.removeEvent
a2a0: 4c 69 73 74 65 6e 65 72 28 65 76 65 6e 74 4e 61  Listener(eventNa
a2b0: 6d 65 2c 20 64 6f 6d 5b 52 49 4f 54 5f 45 56 45  me, dom[RIOT_EVE
a2c0: 4e 54 53 5f 4b 45 59 5d 5b 6e 61 6d 65 5d 29 3b  NTS_KEY][name]);
a2d0: 20 7d 0a 0a 20 20 20 20 64 6f 6d 5b 52 49 4f 54   }..    dom[RIOT
a2e0: 5f 45 56 45 4e 54 53 5f 4b 45 59 5d 5b 6e 61 6d  _EVENTS_KEY][nam
a2f0: 65 5d 20 3d 20 63 62 3b 0a 20 20 20 20 64 6f 6d  e] = cb;.    dom
a300: 2e 61 64 64 45 76 65 6e 74 4c 69 73 74 65 6e 65  .addEventListene
a310: 72 28 65 76 65 6e 74 4e 61 6d 65 2c 20 63 62 2c  r(eventName, cb,
a320: 20 66 61 6c 73 65 29 3b 0a 20 20 7d 0a 0a 20 20   false);.  }..  
a330: 2f 2a 2a 0a 20 20 20 2a 20 43 72 65 61 74 65 20  /**.   * Create 
a340: 61 20 6e 65 77 20 63 68 69 6c 64 20 74 61 67 20  a new child tag 
a350: 69 6e 63 6c 75 64 69 6e 67 20 69 74 20 63 6f 72  including it cor
a360: 72 65 63 74 6c 79 20 69 6e 74 6f 20 69 74 73 20  rectly into its 
a370: 70 61 72 65 6e 74 0a 20 20 20 2a 20 40 70 61 72  parent.   * @par
a380: 61 6d 20 20 20 7b 20 4f 62 6a 65 63 74 20 7d 20  am   { Object } 
a390: 63 68 69 6c 64 20 2d 20 63 68 69 6c 64 20 74 61  child - child ta
a3a0: 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  g implementation
a3b0: 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20 7b  .   * @param   {
a3c0: 20 4f 62 6a 65 63 74 20 7d 20 6f 70 74 73 20 2d   Object } opts -
a3d0: 20 74 61 67 20 6f 70 74 69 6f 6e 73 20 63 6f 6e   tag options con
a3e0: 74 61 69 6e 69 6e 67 20 74 68 65 20 44 4f 4d 20  taining the DOM 
a3f0: 6e 6f 64 65 20 77 68 65 72 65 20 74 68 65 20 74  node where the t
a400: 61 67 20 77 69 6c 6c 20 62 65 20 6d 6f 75 6e 74  ag will be mount
a410: 65 64 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20  ed.   * @param  
a420: 20 7b 20 53 74 72 69 6e 67 20 7d 20 69 6e 6e 65   { String } inne
a430: 72 48 54 4d 4c 20 2d 20 69 6e 6e 65 72 20 68 74  rHTML - inner ht
a440: 6d 6c 20 6f 66 20 74 68 65 20 63 68 69 6c 64 20  ml of the child 
a450: 6e 6f 64 65 0a 20 20 20 2a 20 40 70 61 72 61 6d  node.   * @param
a460: 20 20 20 7b 20 4f 62 6a 65 63 74 20 7d 20 70 61     { Object } pa
a470: 72 65 6e 74 20 2d 20 69 6e 73 74 61 6e 63 65 20  rent - instance 
a480: 6f 66 20 74 68 65 20 70 61 72 65 6e 74 20 74 61  of the parent ta
a490: 67 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20  g including the 
a4a0: 63 68 69 6c 64 20 63 75 73 74 6f 6d 20 74 61 67  child custom tag
a4b0: 0a 20 20 20 2a 20 40 72 65 74 75 72 6e 73 20 7b  .   * @returns {
a4c0: 20 4f 62 6a 65 63 74 20 7d 20 69 6e 73 74 61 6e   Object } instan
a4d0: 63 65 20 6f 66 20 74 68 65 20 6e 65 77 20 63 68  ce of the new ch
a4e0: 69 6c 64 20 74 61 67 20 6a 75 73 74 20 63 72 65  ild tag just cre
a4f0: 61 74 65 64 0a 20 20 20 2a 2f 0a 20 20 66 75 6e  ated.   */.  fun
a500: 63 74 69 6f 6e 20 69 6e 69 74 43 68 69 6c 64 28  ction initChild(
a510: 63 68 69 6c 64 2c 20 6f 70 74 73 2c 20 69 6e 6e  child, opts, inn
a520: 65 72 48 54 4d 4c 2c 20 70 61 72 65 6e 74 29 20  erHTML, parent) 
a530: 7b 0a 20 20 20 20 76 61 72 20 74 61 67 20 3d 20  {.    var tag = 
a540: 63 72 65 61 74 65 54 61 67 28 63 68 69 6c 64 2c  createTag(child,
a550: 20 6f 70 74 73 2c 20 69 6e 6e 65 72 48 54 4d 4c   opts, innerHTML
a560: 29 3b 0a 20 20 20 20 76 61 72 20 74 61 67 4e 61  );.    var tagNa
a570: 6d 65 20 3d 20 6f 70 74 73 2e 74 61 67 4e 61 6d  me = opts.tagNam
a580: 65 20 7c 7c 20 67 65 74 4e 61 6d 65 28 6f 70 74  e || getName(opt
a590: 73 2e 72 6f 6f 74 2c 20 74 72 75 65 29 3b 0a 20  s.root, true);. 
a5a0: 20 20 20 76 61 72 20 70 74 61 67 20 3d 20 67 65     var ptag = ge
a5b0: 74 49 6d 6d 65 64 69 61 74 65 43 75 73 74 6f 6d  tImmediateCustom
a5c0: 50 61 72 65 6e 74 28 70 61 72 65 6e 74 29 3b 0a  Parent(parent);.
a5d0: 20 20 20 20 2f 2f 20 66 69 78 20 66 6f 72 20 74      // fix for t
a5e0: 68 65 20 70 61 72 65 6e 74 20 61 74 74 72 69 62  he parent attrib
a5f0: 75 74 65 20 69 6e 20 74 68 65 20 6c 6f 6f 70 65  ute in the loope
a600: 64 20 65 6c 65 6d 65 6e 74 73 0a 20 20 20 20 64  d elements.    d
a610: 65 66 69 6e 65 28 74 61 67 2c 20 27 70 61 72 65  efine(tag, 'pare
a620: 6e 74 27 2c 20 70 74 61 67 29 3b 0a 20 20 20 20  nt', ptag);.    
a630: 2f 2f 20 73 74 6f 72 65 20 74 68 65 20 72 65 61  // store the rea
a640: 6c 20 70 61 72 65 6e 74 20 74 61 67 0a 20 20 20  l parent tag.   
a650: 20 2f 2f 20 69 6e 20 73 6f 6d 65 20 63 61 73 65   // in some case
a660: 73 20 74 68 69 73 20 63 6f 75 6c 64 20 62 65 20  s this could be 
a670: 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74  different from t
a680: 68 65 20 63 75 73 74 6f 6d 20 70 61 72 65 6e 74  he custom parent
a690: 20 74 61 67 0a 20 20 20 20 2f 2f 20 66 6f 72 20   tag.    // for 
a6a0: 65 78 61 6d 70 6c 65 20 69 6e 20 6e 65 73 74 65  example in neste
a6b0: 64 20 6c 6f 6f 70 73 0a 20 20 20 20 74 61 67 2e  d loops.    tag.
a6c0: 5f 5f 2e 70 61 72 65 6e 74 20 3d 20 70 61 72 65  __.parent = pare
a6d0: 6e 74 3b 0a 0a 20 20 20 20 2f 2f 20 61 64 64 20  nt;..    // add 
a6e0: 74 68 69 73 20 74 61 67 20 74 6f 20 74 68 65 20  this tag to the 
a6f0: 63 75 73 74 6f 6d 20 70 61 72 65 6e 74 20 74 61  custom parent ta
a700: 67 0a 20 20 20 20 61 72 72 61 79 69 73 68 41 64  g.    arrayishAd
a710: 64 28 70 74 61 67 2e 74 61 67 73 2c 20 74 61 67  d(ptag.tags, tag
a720: 4e 61 6d 65 2c 20 74 61 67 29 3b 0a 0a 20 20 20  Name, tag);..   
a730: 20 2f 2f 20 61 6e 64 20 61 6c 73 6f 20 74 6f 20   // and also to 
a740: 74 68 65 20 72 65 61 6c 20 70 61 72 65 6e 74 20  the real parent 
a750: 74 61 67 0a 20 20 20 20 69 66 20 28 70 74 61 67  tag.    if (ptag
a760: 20 21 3d 3d 20 70 61 72 65 6e 74 29 0a 20 20 20   !== parent).   
a770: 20 20 20 7b 20 61 72 72 61 79 69 73 68 41 64 64     { arrayishAdd
a780: 28 70 61 72 65 6e 74 2e 74 61 67 73 2c 20 74 61  (parent.tags, ta
a790: 67 4e 61 6d 65 2c 20 74 61 67 29 3b 20 7d 0a 0a  gName, tag); }..
a7a0: 20 20 20 20 72 65 74 75 72 6e 20 74 61 67 0a 20      return tag. 
a7b0: 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 52   }..  /**.   * R
a7c0: 65 6d 6f 76 65 73 20 61 6e 20 69 74 65 6d 20 66  emoves an item f
a7d0: 72 6f 6d 20 61 6e 20 6f 62 6a 65 63 74 20 61 74  rom an object at
a7e0: 20 61 20 67 69 76 65 6e 20 6b 65 79 2e 20 49 66   a given key. If
a7f0: 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20   the key points 
a800: 74 6f 20 61 6e 20 61 72 72 61 79 2c 0a 20 20 20  to an array,.   
a810: 2a 20 74 68 65 6e 20 74 68 65 20 69 74 65 6d 20  * then the item 
a820: 69 73 20 6a 75 73 74 20 72 65 6d 6f 76 65 64 20  is just removed 
a830: 66 72 6f 6d 20 74 68 65 20 61 72 72 61 79 2e 0a  from the array..
a840: 20 20 20 2a 20 40 70 61 72 61 6d 20 7b 20 4f 62     * @param { Ob
a850: 6a 65 63 74 20 7d 20 6f 62 6a 20 2d 20 6f 62 6a  ject } obj - obj
a860: 65 63 74 20 6f 6e 20 77 68 69 63 68 20 74 6f 20  ect on which to 
a870: 72 65 6d 6f 76 65 20 74 68 65 20 70 72 6f 70 65  remove the prope
a880: 72 74 79 0a 20 20 20 2a 20 40 70 61 72 61 6d 20  rty.   * @param 
a890: 7b 20 53 74 72 69 6e 67 20 7d 20 6b 65 79 20 2d  { String } key -
a8a0: 20 70 72 6f 70 65 72 74 79 20 6e 61 6d 65 0a 20   property name. 
a8b0: 20 20 2a 20 40 70 61 72 61 6d 20 7b 20 4f 62 6a    * @param { Obj
a8c0: 65 63 74 20 7d 20 76 61 6c 75 65 20 2d 20 74 68  ect } value - th
a8d0: 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 70  e value of the p
a8e0: 72 6f 70 65 72 74 79 20 74 6f 20 62 65 20 72 65  roperty to be re
a8f0: 6d 6f 76 65 64 0a 20 20 20 2a 20 40 70 61 72 61  moved.   * @para
a900: 6d 20 7b 20 42 6f 6f 6c 65 61 6e 20 7d 20 65 6e  m { Boolean } en
a910: 73 75 72 65 41 72 72 61 79 20 2d 20 65 6e 73 75  sureArray - ensu
a920: 72 65 20 74 68 61 74 20 74 68 65 20 70 72 6f 70  re that the prop
a930: 65 72 74 79 20 72 65 6d 61 69 6e 73 20 61 6e 20  erty remains an 
a940: 61 72 72 61 79 0a 20 20 2a 2f 0a 20 20 66 75 6e  array.  */.  fun
a950: 63 74 69 6f 6e 20 61 72 72 61 79 69 73 68 52 65  ction arrayishRe
a960: 6d 6f 76 65 28 6f 62 6a 2c 20 6b 65 79 2c 20 76  move(obj, key, v
a970: 61 6c 75 65 2c 20 65 6e 73 75 72 65 41 72 72 61  alue, ensureArra
a980: 79 29 20 7b 0a 20 20 20 20 69 66 20 28 69 73 41  y) {.    if (isA
a990: 72 72 61 79 28 6f 62 6a 5b 6b 65 79 5d 29 29 20  rray(obj[key])) 
a9a0: 7b 0a 20 20 20 20 20 20 76 61 72 20 69 6e 64 65  {.      var inde
a9b0: 78 20 3d 20 6f 62 6a 5b 6b 65 79 5d 2e 69 6e 64  x = obj[key].ind
a9c0: 65 78 4f 66 28 76 61 6c 75 65 29 3b 0a 20 20 20  exOf(value);.   
a9d0: 20 20 20 69 66 20 28 69 6e 64 65 78 20 21 3d 3d     if (index !==
a9e0: 20 2d 31 29 20 7b 20 6f 62 6a 5b 6b 65 79 5d 2e   -1) { obj[key].
a9f0: 73 70 6c 69 63 65 28 69 6e 64 65 78 2c 20 31 29  splice(index, 1)
aa00: 3b 20 7d 0a 20 20 20 20 20 20 69 66 20 28 21 6f  ; }.      if (!o
aa10: 62 6a 5b 6b 65 79 5d 2e 6c 65 6e 67 74 68 29 20  bj[key].length) 
aa20: 7b 20 64 65 6c 65 74 65 20 6f 62 6a 5b 6b 65 79  { delete obj[key
aa30: 5d 3b 20 7d 0a 20 20 20 20 20 20 65 6c 73 65 20  ]; }.      else 
aa40: 69 66 20 28 6f 62 6a 5b 6b 65 79 5d 2e 6c 65 6e  if (obj[key].len
aa50: 67 74 68 20 3d 3d 3d 20 31 20 26 26 20 21 65 6e  gth === 1 && !en
aa60: 73 75 72 65 41 72 72 61 79 29 20 7b 20 6f 62 6a  sureArray) { obj
aa70: 5b 6b 65 79 5d 20 3d 20 6f 62 6a 5b 6b 65 79 5d  [key] = obj[key]
aa80: 5b 30 5d 3b 20 7d 0a 20 20 20 20 7d 20 65 6c 73  [0]; }.    } els
aa90: 65 20 69 66 20 28 6f 62 6a 5b 6b 65 79 5d 20 3d  e if (obj[key] =
aaa0: 3d 3d 20 76 61 6c 75 65 29 0a 20 20 20 20 20 20  == value).      
aab0: 7b 20 64 65 6c 65 74 65 20 6f 62 6a 5b 6b 65 79  { delete obj[key
aac0: 5d 3b 20 7d 20 2f 2f 20 6f 74 68 65 72 77 69 73  ]; } // otherwis
aad0: 65 20 6a 75 73 74 20 64 65 6c 65 74 65 20 74 68  e just delete th
aae0: 65 20 6b 65 79 0a 20 20 7d 0a 0a 20 20 2f 2a 2a  e key.  }..  /**
aaf0: 0a 20 20 20 2a 20 41 64 64 73 20 74 68 65 20 65  .   * Adds the e
ab00: 6c 65 6d 65 6e 74 73 20 66 6f 72 20 61 20 76 69  lements for a vi
ab10: 72 74 75 61 6c 20 74 61 67 0a 20 20 20 2a 20 40  rtual tag.   * @
ab20: 74 68 69 73 20 54 61 67 0a 20 20 20 2a 20 40 70  this Tag.   * @p
ab30: 61 72 61 6d 20 7b 20 4e 6f 64 65 20 7d 20 73 72  aram { Node } sr
ab40: 63 20 2d 20 74 68 65 20 6e 6f 64 65 20 74 68 61  c - the node tha
ab50: 74 20 77 69 6c 6c 20 64 6f 20 74 68 65 20 69 6e  t will do the in
ab60: 73 65 72 74 69 6e 67 20 6f 72 20 61 70 70 65 6e  serting or appen
ab70: 64 69 6e 67 0a 20 20 20 2a 20 40 70 61 72 61 6d  ding.   * @param
ab80: 20 7b 20 54 61 67 20 7d 20 74 61 72 67 65 74 20   { Tag } target 
ab90: 2d 20 6f 6e 6c 79 20 69 66 20 69 6e 73 65 72 74  - only if insert
aba0: 69 6e 67 2c 20 69 6e 73 65 72 74 20 62 65 66 6f  ing, insert befo
abb0: 72 65 20 74 68 69 73 20 74 61 67 27 73 20 66 69  re this tag's fi
abc0: 72 73 74 20 63 68 69 6c 64 0a 20 20 20 2a 2f 0a  rst child.   */.
abd0: 20 20 66 75 6e 63 74 69 6f 6e 20 6d 61 6b 65 56    function makeV
abe0: 69 72 74 75 61 6c 28 73 72 63 2c 20 74 61 72 67  irtual(src, targ
abf0: 65 74 29 20 7b 0a 20 20 20 20 76 61 72 20 74 68  et) {.    var th
ac00: 69 73 24 31 20 3d 20 74 68 69 73 3b 0a 0a 20 20  is$1 = this;..  
ac10: 20 20 76 61 72 20 68 65 61 64 20 3d 20 63 72 65    var head = cre
ac20: 61 74 65 44 4f 4d 50 6c 61 63 65 68 6f 6c 64 65  ateDOMPlaceholde
ac30: 72 28 29 3b 0a 20 20 20 20 76 61 72 20 74 61 69  r();.    var tai
ac40: 6c 20 3d 20 63 72 65 61 74 65 44 4f 4d 50 6c 61  l = createDOMPla
ac50: 63 65 68 6f 6c 64 65 72 28 29 3b 0a 20 20 20 20  ceholder();.    
ac60: 76 61 72 20 66 72 61 67 20 3d 20 63 72 65 61 74  var frag = creat
ac70: 65 46 72 61 67 6d 65 6e 74 28 29 3b 0a 20 20 20  eFragment();.   
ac80: 20 76 61 72 20 73 69 62 3b 0a 20 20 20 20 76 61   var sib;.    va
ac90: 72 20 65 6c 3b 0a 0a 20 20 20 20 74 68 69 73 2e  r el;..    this.
aca0: 72 6f 6f 74 2e 69 6e 73 65 72 74 42 65 66 6f 72  root.insertBefor
acb0: 65 28 68 65 61 64 2c 20 74 68 69 73 2e 72 6f 6f  e(head, this.roo
acc0: 74 2e 66 69 72 73 74 43 68 69 6c 64 29 3b 0a 20  t.firstChild);. 
acd0: 20 20 20 74 68 69 73 2e 72 6f 6f 74 2e 61 70 70     this.root.app
ace0: 65 6e 64 43 68 69 6c 64 28 74 61 69 6c 29 3b 0a  endChild(tail);.
acf0: 0a 20 20 20 20 74 68 69 73 2e 5f 5f 2e 68 65 61  .    this.__.hea
ad00: 64 20 3d 20 65 6c 20 3d 20 68 65 61 64 3b 0a 20  d = el = head;. 
ad10: 20 20 20 74 68 69 73 2e 5f 5f 2e 74 61 69 6c 20     this.__.tail 
ad20: 3d 20 74 61 69 6c 3b 0a 0a 20 20 20 20 77 68 69  = tail;..    whi
ad30: 6c 65 20 28 65 6c 29 20 7b 0a 20 20 20 20 20 20  le (el) {.      
ad40: 73 69 62 20 3d 20 65 6c 2e 6e 65 78 74 53 69 62  sib = el.nextSib
ad50: 6c 69 6e 67 3b 0a 20 20 20 20 20 20 66 72 61 67  ling;.      frag
ad60: 2e 61 70 70 65 6e 64 43 68 69 6c 64 28 65 6c 29  .appendChild(el)
ad70: 3b 0a 20 20 20 20 20 20 74 68 69 73 24 31 2e 5f  ;.      this$1._
ad80: 5f 2e 76 69 72 74 73 2e 70 75 73 68 28 65 6c 29  _.virts.push(el)
ad90: 3b 20 2f 2f 20 68 6f 6c 64 20 66 6f 72 20 75 6e  ; // hold for un
ada0: 6d 6f 75 6e 74 69 6e 67 0a 20 20 20 20 20 20 65  mounting.      e
adb0: 6c 20 3d 20 73 69 62 3b 0a 20 20 20 20 7d 0a 0a  l = sib;.    }..
adc0: 20 20 20 20 69 66 20 28 74 61 72 67 65 74 29 0a      if (target).
add0: 20 20 20 20 20 20 7b 20 73 72 63 2e 69 6e 73 65        { src.inse
ade0: 72 74 42 65 66 6f 72 65 28 66 72 61 67 2c 20 74  rtBefore(frag, t
adf0: 61 72 67 65 74 2e 5f 5f 2e 68 65 61 64 29 3b 20  arget.__.head); 
ae00: 7d 0a 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20  }.    else.     
ae10: 20 7b 20 73 72 63 2e 61 70 70 65 6e 64 43 68 69   { src.appendChi
ae20: 6c 64 28 66 72 61 67 29 3b 20 7d 0a 20 20 7d 0a  ld(frag); }.  }.
ae30: 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 6d 61 6b 65  .  /**.   * make
ae40: 73 20 61 20 74 61 67 20 76 69 72 74 75 61 6c 20  s a tag virtual 
ae50: 61 6e 64 20 72 65 70 6c 61 63 65 73 20 61 20 72  and replaces a r
ae60: 65 66 65 72 65 6e 63 65 20 69 6e 20 74 68 65 20  eference in the 
ae70: 64 6f 6d 0a 20 20 20 2a 20 40 74 68 69 73 20 54  dom.   * @this T
ae80: 61 67 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 7b  ag.   * @param {
ae90: 20 74 61 67 20 7d 20 74 68 65 20 74 61 67 20 74   tag } the tag t
aea0: 6f 20 6d 61 6b 65 20 76 69 72 74 75 61 6c 0a 20  o make virtual. 
aeb0: 20 20 2a 20 40 70 61 72 61 6d 20 7b 20 72 65 66    * @param { ref
aec0: 20 7d 20 74 68 65 20 64 6f 6d 20 72 65 66 65 72   } the dom refer
aed0: 65 6e 63 65 20 6c 6f 63 61 74 69 6f 6e 0a 20 20  ence location.  
aee0: 20 2a 2f 0a 20 20 66 75 6e 63 74 69 6f 6e 20 6d   */.  function m
aef0: 61 6b 65 52 65 70 6c 61 63 65 56 69 72 74 75 61  akeReplaceVirtua
af00: 6c 28 74 61 67 2c 20 72 65 66 29 20 7b 0a 20 20  l(tag, ref) {.  
af10: 20 20 69 66 20 28 21 72 65 66 2e 70 61 72 65 6e    if (!ref.paren
af20: 74 4e 6f 64 65 29 20 7b 20 72 65 74 75 72 6e 20  tNode) { return 
af30: 7d 0a 20 20 20 20 76 61 72 20 66 72 61 67 20 3d  }.    var frag =
af40: 20 63 72 65 61 74 65 46 72 61 67 6d 65 6e 74 28   createFragment(
af50: 29 3b 0a 20 20 20 20 6d 61 6b 65 56 69 72 74 75  );.    makeVirtu
af60: 61 6c 2e 63 61 6c 6c 28 74 61 67 2c 20 66 72 61  al.call(tag, fra
af70: 67 29 3b 0a 20 20 20 20 72 65 66 2e 70 61 72 65  g);.    ref.pare
af80: 6e 74 4e 6f 64 65 2e 72 65 70 6c 61 63 65 43 68  ntNode.replaceCh
af90: 69 6c 64 28 66 72 61 67 2c 20 72 65 66 29 3b 0a  ild(frag, ref);.
afa0: 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20    }..  /**.   * 
afb0: 55 70 64 61 74 65 20 64 79 6e 61 6d 69 63 61 6c  Update dynamical
afc0: 6c 79 20 63 72 65 61 74 65 64 20 64 61 74 61 2d  ly created data-
afd0: 69 73 20 74 61 67 73 20 77 69 74 68 20 63 68 61  is tags with cha
afe0: 6e 67 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e  nging expression
aff0: 73 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 7b 20  s.   * @param { 
b000: 4f 62 6a 65 63 74 20 7d 20 65 78 70 72 20 2d 20  Object } expr - 
b010: 65 78 70 72 65 73 73 69 6f 6e 20 74 61 67 20 61  expression tag a
b020: 6e 64 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  nd expression in
b030: 66 6f 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 7b  fo.   * @param {
b040: 20 54 61 67 20 7d 20 20 20 20 70 61 72 65 6e 74   Tag }    parent
b050: 20 2d 20 70 61 72 65 6e 74 20 66 6f 72 20 74 61   - parent for ta
b060: 67 20 63 72 65 61 74 69 6f 6e 0a 20 20 20 2a 20  g creation.   * 
b070: 40 70 61 72 61 6d 20 7b 20 53 74 72 69 6e 67 20  @param { String 
b080: 7d 20 74 61 67 4e 61 6d 65 20 2d 20 74 61 67 20  } tagName - tag 
b090: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 77  implementation w
b0a0: 65 20 77 61 6e 74 20 74 6f 20 75 73 65 0a 20 20  e want to use.  
b0b0: 20 2a 2f 0a 20 20 66 75 6e 63 74 69 6f 6e 20 75   */.  function u
b0c0: 70 64 61 74 65 44 61 74 61 49 73 28 65 78 70 72  pdateDataIs(expr
b0d0: 2c 20 70 61 72 65 6e 74 2c 20 74 61 67 4e 61 6d  , parent, tagNam
b0e0: 65 29 20 7b 0a 20 20 20 20 76 61 72 20 74 61 67  e) {.    var tag
b0f0: 20 3d 20 65 78 70 72 2e 74 61 67 20 7c 7c 20 65   = expr.tag || e
b100: 78 70 72 2e 64 6f 6d 2e 5f 74 61 67 3b 0a 20 20  xpr.dom._tag;.  
b110: 20 20 76 61 72 20 72 65 66 3b 0a 0a 20 20 20 20    var ref;..    
b120: 76 61 72 20 72 65 66 24 31 20 3d 20 74 61 67 20  var ref$1 = tag 
b130: 3f 20 74 61 67 2e 5f 5f 20 3a 20 7b 7d 3b 0a 20  ? tag.__ : {};. 
b140: 20 20 20 76 61 72 20 68 65 61 64 20 3d 20 72 65     var head = re
b150: 66 24 31 2e 68 65 61 64 3b 0a 20 20 20 20 76 61  f$1.head;.    va
b160: 72 20 69 73 56 69 72 74 75 61 6c 20 3d 20 65 78  r isVirtual = ex
b170: 70 72 2e 64 6f 6d 2e 74 61 67 4e 61 6d 65 20 3d  pr.dom.tagName =
b180: 3d 3d 20 27 56 49 52 54 55 41 4c 27 3b 0a 0a 20  == 'VIRTUAL';.. 
b190: 20 20 20 69 66 20 28 74 61 67 20 26 26 20 65 78     if (tag && ex
b1a0: 70 72 2e 74 61 67 4e 61 6d 65 20 3d 3d 3d 20 74  pr.tagName === t
b1b0: 61 67 4e 61 6d 65 29 20 7b 0a 20 20 20 20 20 20  agName) {.      
b1c0: 74 61 67 2e 75 70 64 61 74 65 28 29 3b 0a 20 20  tag.update();.  
b1d0: 20 20 20 20 72 65 74 75 72 6e 0a 20 20 20 20 7d      return.    }
b1e0: 0a 0a 20 20 20 20 2f 2f 20 73 79 6e 63 20 5f 70  ..    // sync _p
b1f0: 61 72 65 6e 74 20 74 6f 20 61 63 63 6f 6d 6d 6f  arent to accommo
b200: 64 61 74 65 20 63 68 61 6e 67 69 6e 67 20 74 61  date changing ta
b210: 67 6e 61 6d 65 73 0a 20 20 20 20 69 66 20 28 74  gnames.    if (t
b220: 61 67 29 20 7b 0a 20 20 20 20 20 20 2f 2f 20 6e  ag) {.      // n
b230: 65 65 64 20 70 6c 61 63 65 68 6f 6c 64 65 72 20  eed placeholder 
b240: 62 65 66 6f 72 65 20 75 6e 6d 6f 75 6e 74 0a 20  before unmount. 
b250: 20 20 20 20 20 69 66 28 69 73 56 69 72 74 75 61       if(isVirtua
b260: 6c 29 20 7b 0a 20 20 20 20 20 20 20 20 72 65 66  l) {.        ref
b270: 20 3d 20 63 72 65 61 74 65 44 4f 4d 50 6c 61 63   = createDOMPlac
b280: 65 68 6f 6c 64 65 72 28 29 3b 0a 20 20 20 20 20  eholder();.     
b290: 20 20 20 68 65 61 64 2e 70 61 72 65 6e 74 4e 6f     head.parentNo
b2a0: 64 65 2e 69 6e 73 65 72 74 42 65 66 6f 72 65 28  de.insertBefore(
b2b0: 72 65 66 2c 20 68 65 61 64 29 3b 0a 20 20 20 20  ref, head);.    
b2c0: 20 20 7d 0a 0a 20 20 20 20 20 20 74 61 67 2e 75    }..      tag.u
b2d0: 6e 6d 6f 75 6e 74 28 74 72 75 65 29 3b 0a 20 20  nmount(true);.  
b2e0: 20 20 7d 0a 0a 20 20 20 20 2f 2f 20 75 6e 61 62    }..    // unab
b2f0: 6c 65 20 74 6f 20 67 65 74 20 74 68 65 20 74 61  le to get the ta
b300: 67 20 6e 61 6d 65 0a 20 20 20 20 69 66 20 28 21  g name.    if (!
b310: 69 73 53 74 72 69 6e 67 28 74 61 67 4e 61 6d 65  isString(tagName
b320: 29 29 20 7b 20 72 65 74 75 72 6e 20 7d 0a 0a 20  )) { return }.. 
b330: 20 20 20 65 78 70 72 2e 69 6d 70 6c 20 3d 20 5f     expr.impl = _
b340: 5f 54 41 47 5f 49 4d 50 4c 5b 74 61 67 4e 61 6d  _TAG_IMPL[tagNam
b350: 65 5d 3b 0a 0a 20 20 20 20 2f 2f 20 75 6e 6b 6e  e];..    // unkn
b360: 6f 77 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  own implementati
b370: 6f 6e 0a 20 20 20 20 69 66 20 28 21 65 78 70 72  on.    if (!expr
b380: 2e 69 6d 70 6c 29 20 7b 20 72 65 74 75 72 6e 20  .impl) { return 
b390: 7d 0a 0a 20 20 20 20 65 78 70 72 2e 74 61 67 20  }..    expr.tag 
b3a0: 3d 20 74 61 67 20 3d 20 69 6e 69 74 43 68 69 6c  = tag = initChil
b3b0: 64 28 0a 20 20 20 20 20 20 65 78 70 72 2e 69 6d  d(.      expr.im
b3c0: 70 6c 2c 20 7b 0a 20 20 20 20 20 20 20 20 72 6f  pl, {.        ro
b3d0: 6f 74 3a 20 65 78 70 72 2e 64 6f 6d 2c 0a 20 20  ot: expr.dom,.  
b3e0: 20 20 20 20 20 20 70 61 72 65 6e 74 3a 20 70 61        parent: pa
b3f0: 72 65 6e 74 2c 0a 20 20 20 20 20 20 20 20 74 61  rent,.        ta
b400: 67 4e 61 6d 65 3a 20 74 61 67 4e 61 6d 65 0a 20  gName: tagName. 
b410: 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 65 78       },.      ex
b420: 70 72 2e 64 6f 6d 2e 69 6e 6e 65 72 48 54 4d 4c  pr.dom.innerHTML
b430: 2c 0a 20 20 20 20 20 20 70 61 72 65 6e 74 0a 20  ,.      parent. 
b440: 20 20 20 29 3b 0a 0a 20 20 20 20 65 61 63 68 28     );..    each(
b450: 65 78 70 72 2e 61 74 74 72 73 2c 20 66 75 6e 63  expr.attrs, func
b460: 74 69 6f 6e 20 28 61 29 20 7b 20 72 65 74 75 72  tion (a) { retur
b470: 6e 20 73 65 74 41 74 74 72 69 62 75 74 65 28 74  n setAttribute(t
b480: 61 67 2e 72 6f 6f 74 2c 20 61 2e 6e 61 6d 65 2c  ag.root, a.name,
b490: 20 61 2e 76 61 6c 75 65 29 3b 20 7d 29 3b 0a 20   a.value); });. 
b4a0: 20 20 20 65 78 70 72 2e 74 61 67 4e 61 6d 65 20     expr.tagName 
b4b0: 3d 20 74 61 67 4e 61 6d 65 3b 0a 20 20 20 20 74  = tagName;.    t
b4c0: 61 67 2e 6d 6f 75 6e 74 28 29 3b 0a 0a 20 20 20  ag.mount();..   
b4d0: 20 2f 2f 20 72 6f 6f 74 20 65 78 69 73 74 20 66   // root exist f
b4e0: 69 72 73 74 20 74 69 6d 65 2c 20 61 66 74 65 72  irst time, after
b4f0: 20 75 73 65 20 70 6c 61 63 65 68 6f 6c 64 65 72   use placeholder
b500: 0a 20 20 20 20 69 66 20 28 69 73 56 69 72 74 75  .    if (isVirtu
b510: 61 6c 29 20 7b 20 6d 61 6b 65 52 65 70 6c 61 63  al) { makeReplac
b520: 65 56 69 72 74 75 61 6c 28 74 61 67 2c 20 72 65  eVirtual(tag, re
b530: 66 20 7c 7c 20 74 61 67 2e 72 6f 6f 74 29 3b 20  f || tag.root); 
b540: 7d 0a 0a 20 20 20 20 2f 2f 20 70 61 72 65 6e 74  }..    // parent
b550: 20 69 73 20 74 68 65 20 70 6c 61 63 65 68 6f 6c   is the placehol
b560: 64 65 72 20 74 61 67 2c 20 6e 6f 74 20 74 68 65  der tag, not the
b570: 20 64 79 6e 61 6d 69 63 20 74 61 67 20 73 6f 20   dynamic tag so 
b580: 63 6c 65 61 6e 20 75 70 0a 20 20 20 20 70 61 72  clean up.    par
b590: 65 6e 74 2e 5f 5f 2e 6f 6e 55 6e 6d 6f 75 6e 74  ent.__.onUnmount
b5a0: 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b   = function () {
b5b0: 0a 20 20 20 20 20 20 76 61 72 20 64 65 6c 4e 61  .      var delNa
b5c0: 6d 65 20 3d 20 74 61 67 2e 6f 70 74 73 2e 64 61  me = tag.opts.da
b5d0: 74 61 49 73 3b 0a 20 20 20 20 20 20 61 72 72 61  taIs;.      arra
b5e0: 79 69 73 68 52 65 6d 6f 76 65 28 74 61 67 2e 70  yishRemove(tag.p
b5f0: 61 72 65 6e 74 2e 74 61 67 73 2c 20 64 65 6c 4e  arent.tags, delN
b600: 61 6d 65 2c 20 74 61 67 29 3b 0a 20 20 20 20 20  ame, tag);.     
b610: 20 61 72 72 61 79 69 73 68 52 65 6d 6f 76 65 28   arrayishRemove(
b620: 74 61 67 2e 5f 5f 2e 70 61 72 65 6e 74 2e 74 61  tag.__.parent.ta
b630: 67 73 2c 20 64 65 6c 4e 61 6d 65 2c 20 74 61 67  gs, delName, tag
b640: 29 3b 0a 20 20 20 20 20 20 74 61 67 2e 75 6e 6d  );.      tag.unm
b650: 6f 75 6e 74 28 29 3b 0a 20 20 20 20 7d 3b 0a 20  ount();.    };. 
b660: 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 4e   }..  /**.   * N
b670: 6f 6d 61 6c 69 7a 65 20 61 6e 79 20 61 74 74 72  omalize any attr
b680: 69 62 75 74 65 20 72 65 6d 6f 76 69 6e 67 20 74  ibute removing t
b690: 68 65 20 22 72 69 6f 74 2d 22 20 70 72 65 66 69  he "riot-" prefi
b6a0: 78 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20  x.   * @param   
b6b0: 7b 20 53 74 72 69 6e 67 20 7d 20 61 74 74 72 4e  { String } attrN
b6c0: 61 6d 65 20 2d 20 6f 72 69 67 69 6e 61 6c 20 61  ame - original a
b6d0: 74 74 72 69 62 75 74 65 20 6e 61 6d 65 0a 20 20  ttribute name.  
b6e0: 20 2a 20 40 72 65 74 75 72 6e 73 20 7b 20 53 74   * @returns { St
b6f0: 72 69 6e 67 20 7d 20 76 61 6c 69 64 20 68 74 6d  ring } valid htm
b700: 6c 20 61 74 74 72 69 62 75 74 65 20 6e 61 6d 65  l attribute name
b710: 0a 20 20 20 2a 2f 0a 20 20 66 75 6e 63 74 69 6f  .   */.  functio
b720: 6e 20 6e 6f 72 6d 61 6c 69 7a 65 41 74 74 72 4e  n normalizeAttrN
b730: 61 6d 65 28 61 74 74 72 4e 61 6d 65 29 20 7b 0a  ame(attrName) {.
b740: 20 20 20 20 69 66 20 28 21 61 74 74 72 4e 61 6d      if (!attrNam
b750: 65 29 20 7b 20 72 65 74 75 72 6e 20 6e 75 6c 6c  e) { return null
b760: 20 7d 0a 20 20 20 20 61 74 74 72 4e 61 6d 65 20   }.    attrName 
b770: 3d 20 61 74 74 72 4e 61 6d 65 2e 72 65 70 6c 61  = attrName.repla
b780: 63 65 28 41 54 54 52 53 5f 50 52 45 46 49 58 2c  ce(ATTRS_PREFIX,
b790: 20 27 27 29 3b 0a 20 20 20 20 69 66 20 28 43 41   '');.    if (CA
b7a0: 53 45 5f 53 45 4e 53 49 54 49 56 45 5f 41 54 54  SE_SENSITIVE_ATT
b7b0: 52 49 42 55 54 45 53 5b 61 74 74 72 4e 61 6d 65  RIBUTES[attrName
b7c0: 5d 29 20 7b 20 61 74 74 72 4e 61 6d 65 20 3d 20  ]) { attrName = 
b7d0: 43 41 53 45 5f 53 45 4e 53 49 54 49 56 45 5f 41  CASE_SENSITIVE_A
b7e0: 54 54 52 49 42 55 54 45 53 5b 61 74 74 72 4e 61  TTRIBUTES[attrNa
b7f0: 6d 65 5d 3b 20 7d 0a 20 20 20 20 72 65 74 75 72  me]; }.    retur
b800: 6e 20 61 74 74 72 4e 61 6d 65 0a 20 20 7d 0a 0a  n attrName.  }..
b810: 20 20 2f 2a 2a 0a 20 20 20 2a 20 55 70 64 61 74    /**.   * Updat
b820: 65 20 6f 6e 20 73 69 6e 67 6c 65 20 74 61 67 20  e on single tag 
b830: 65 78 70 72 65 73 73 69 6f 6e 0a 20 20 20 2a 20  expression.   * 
b840: 40 74 68 69 73 20 54 61 67 0a 20 20 20 2a 20 40  @this Tag.   * @
b850: 70 61 72 61 6d 20 7b 20 4f 62 6a 65 63 74 20 7d  param { Object }
b860: 20 65 78 70 72 20 2d 20 65 78 70 72 65 73 73 69   expr - expressi
b870: 6f 6e 20 6c 6f 67 69 63 0a 20 20 20 2a 20 40 72  on logic.   * @r
b880: 65 74 75 72 6e 73 20 7b 20 75 6e 64 65 66 69 6e  eturns { undefin
b890: 65 64 20 7d 0a 20 20 20 2a 2f 0a 20 20 66 75 6e  ed }.   */.  fun
b8a0: 63 74 69 6f 6e 20 75 70 64 61 74 65 45 78 70 72  ction updateExpr
b8b0: 65 73 73 69 6f 6e 28 65 78 70 72 29 20 7b 0a 20  ession(expr) {. 
b8c0: 20 20 20 69 66 20 28 74 68 69 73 2e 72 6f 6f 74     if (this.root
b8d0: 20 26 26 20 67 65 74 41 74 74 72 69 62 75 74 65   && getAttribute
b8e0: 28 74 68 69 73 2e 72 6f 6f 74 2c 27 76 69 72 74  (this.root,'virt
b8f0: 75 61 6c 69 7a 65 64 27 29 29 20 7b 20 72 65 74  ualized')) { ret
b900: 75 72 6e 20 7d 0a 0a 20 20 20 20 76 61 72 20 64  urn }..    var d
b910: 6f 6d 20 3d 20 65 78 70 72 2e 64 6f 6d 3b 0a 20  om = expr.dom;. 
b920: 20 20 20 2f 2f 20 72 65 6d 6f 76 65 20 74 68 65     // remove the
b930: 20 72 69 6f 74 2d 20 70 72 65 66 69 78 0a 20 20   riot- prefix.  
b940: 20 20 76 61 72 20 61 74 74 72 4e 61 6d 65 20 3d    var attrName =
b950: 20 6e 6f 72 6d 61 6c 69 7a 65 41 74 74 72 4e 61   normalizeAttrNa
b960: 6d 65 28 65 78 70 72 2e 61 74 74 72 29 3b 0a 20  me(expr.attr);. 
b970: 20 20 20 76 61 72 20 69 73 54 6f 67 67 6c 65 20     var isToggle 
b980: 3d 20 63 6f 6e 74 61 69 6e 73 28 5b 53 48 4f 57  = contains([SHOW
b990: 5f 44 49 52 45 43 54 49 56 45 2c 20 48 49 44 45  _DIRECTIVE, HIDE
b9a0: 5f 44 49 52 45 43 54 49 56 45 5d 2c 20 61 74 74  _DIRECTIVE], att
b9b0: 72 4e 61 6d 65 29 3b 0a 20 20 20 20 76 61 72 20  rName);.    var 
b9c0: 69 73 56 69 72 74 75 61 6c 20 3d 20 65 78 70 72  isVirtual = expr
b9d0: 2e 72 6f 6f 74 20 26 26 20 65 78 70 72 2e 72 6f  .root && expr.ro
b9e0: 6f 74 2e 74 61 67 4e 61 6d 65 20 3d 3d 3d 20 27  ot.tagName === '
b9f0: 56 49 52 54 55 41 4c 27 3b 0a 20 20 20 20 76 61  VIRTUAL';.    va
ba00: 72 20 72 65 66 20 3d 20 74 68 69 73 2e 5f 5f 3b  r ref = this.__;
ba10: 0a 20 20 20 20 76 61 72 20 69 73 41 6e 6f 6e 79  .    var isAnony
ba20: 6d 6f 75 73 20 3d 20 72 65 66 2e 69 73 41 6e 6f  mous = ref.isAno
ba30: 6e 79 6d 6f 75 73 3b 0a 20 20 20 20 76 61 72 20  nymous;.    var 
ba40: 70 61 72 65 6e 74 20 3d 20 64 6f 6d 20 26 26 20  parent = dom && 
ba50: 28 65 78 70 72 2e 70 61 72 65 6e 74 20 7c 7c 20  (expr.parent || 
ba60: 64 6f 6d 2e 70 61 72 65 6e 74 4e 6f 64 65 29 3b  dom.parentNode);
ba70: 0a 20 20 20 20 76 61 72 20 6b 65 65 70 56 61 6c  .    var keepVal
ba80: 75 65 41 74 74 72 69 62 75 74 65 73 20 3d 20 73  ueAttributes = s
ba90: 65 74 74 69 6e 67 73 2e 6b 65 65 70 56 61 6c 75  ettings.keepValu
baa0: 65 41 74 74 72 69 62 75 74 65 73 3b 0a 20 20 20  eAttributes;.   
bab0: 20 2f 2f 20 64 65 74 65 63 74 20 74 68 65 20 73   // detect the s
bac0: 74 79 6c 65 20 61 74 74 72 69 62 75 74 65 73 0a  tyle attributes.
bad0: 20 20 20 20 76 61 72 20 69 73 53 74 79 6c 65 41      var isStyleA
bae0: 74 74 72 20 3d 20 61 74 74 72 4e 61 6d 65 20 3d  ttr = attrName =
baf0: 3d 3d 20 27 73 74 79 6c 65 27 3b 0a 20 20 20 20  == 'style';.    
bb00: 76 61 72 20 69 73 43 6c 61 73 73 41 74 74 72 20  var isClassAttr 
bb10: 3d 20 61 74 74 72 4e 61 6d 65 20 3d 3d 3d 20 27  = attrName === '
bb20: 63 6c 61 73 73 27 3b 0a 20 20 20 20 76 61 72 20  class';.    var 
bb30: 69 73 56 61 6c 75 65 41 74 74 72 20 3d 20 61 74  isValueAttr = at
bb40: 74 72 4e 61 6d 65 20 3d 3d 3d 20 27 76 61 6c 75  trName === 'valu
bb50: 65 27 3b 0a 0a 20 20 20 20 76 61 72 20 76 61 6c  e';..    var val
bb60: 75 65 3b 0a 0a 20 20 20 20 2f 2f 20 69 66 20 69  ue;..    // if i
bb70: 74 27 73 20 61 20 74 61 67 20 77 65 20 63 6f 75  t's a tag we cou
bb80: 6c 64 20 74 6f 74 61 6c 6c 79 20 73 6b 69 70 20  ld totally skip 
bb90: 74 68 65 20 72 65 73 74 0a 20 20 20 20 69 66 20  the rest.    if 
bba0: 28 65 78 70 72 2e 5f 72 69 6f 74 5f 69 64 29 20  (expr._riot_id) 
bbb0: 7b 0a 20 20 20 20 20 20 69 66 20 28 65 78 70 72  {.      if (expr
bbc0: 2e 5f 5f 2e 77 61 73 43 72 65 61 74 65 64 29 20  .__.wasCreated) 
bbd0: 7b 0a 20 20 20 20 20 20 20 20 65 78 70 72 2e 75  {.        expr.u
bbe0: 70 64 61 74 65 28 29 3b 0a 20 20 20 20 20 20 2f  pdate();.      /
bbf0: 2f 20 69 66 20 69 74 20 68 61 73 6e 27 74 20 62  / if it hasn't b
bc00: 65 65 6e 20 6d 6f 75 6e 74 65 64 20 79 65 74 2c  een mounted yet,
bc10: 20 64 6f 20 74 68 61 74 20 6e 6f 77 2e 0a 20 20   do that now..  
bc20: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20      } else {.   
bc30: 20 20 20 20 20 65 78 70 72 2e 6d 6f 75 6e 74 28       expr.mount(
bc40: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 69  );.        if (i
bc50: 73 56 69 72 74 75 61 6c 29 20 7b 0a 20 20 20 20  sVirtual) {.    
bc60: 20 20 20 20 20 20 6d 61 6b 65 52 65 70 6c 61 63        makeReplac
bc70: 65 56 69 72 74 75 61 6c 28 65 78 70 72 2c 20 65  eVirtual(expr, e
bc80: 78 70 72 2e 72 6f 6f 74 29 3b 0a 20 20 20 20 20  xpr.root);.     
bc90: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
bca0: 20 20 20 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a     return.    }.
bcb0: 0a 20 20 20 20 2f 2f 20 69 66 20 74 68 69 73 20  .    // if this 
bcc0: 65 78 70 72 65 73 73 69 6f 6e 20 68 61 73 20 74  expression has t
bcd0: 68 65 20 75 70 64 61 74 65 20 6d 65 74 68 6f 64  he update method
bce0: 20 69 74 20 6d 65 61 6e 73 20 69 74 20 63 61 6e   it means it can
bcf0: 20 68 61 6e 64 6c 65 20 74 68 65 20 44 4f 4d 20   handle the DOM 
bd00: 63 68 61 6e 67 65 73 20 62 79 20 69 74 73 65 6c  changes by itsel
bd10: 66 0a 20 20 20 20 69 66 20 28 65 78 70 72 2e 75  f.    if (expr.u
bd20: 70 64 61 74 65 29 20 7b 20 72 65 74 75 72 6e 20  pdate) { return 
bd30: 65 78 70 72 2e 75 70 64 61 74 65 28 29 20 7d 0a  expr.update() }.
bd40: 0a 20 20 20 20 76 61 72 20 63 6f 6e 74 65 78 74  .    var context
bd50: 20 3d 20 69 73 54 6f 67 67 6c 65 20 26 26 20 21   = isToggle && !
bd60: 69 73 41 6e 6f 6e 79 6d 6f 75 73 20 3f 20 69 6e  isAnonymous ? in
bd70: 68 65 72 69 74 50 61 72 65 6e 74 50 72 6f 70 73  heritParentProps
bd80: 2e 63 61 6c 6c 28 74 68 69 73 29 20 3a 20 74 68  .call(this) : th
bd90: 69 73 3b 0a 0a 20 20 20 20 2f 2f 20 2e 2e 2e 69  is;..    // ...i
bda0: 74 20 73 65 65 6d 73 20 74 6f 20 62 65 20 61 20  t seems to be a 
bdb0: 73 69 6d 70 6c 65 20 65 78 70 72 65 73 73 69 6f  simple expressio
bdc0: 6e 20 73 6f 20 77 65 20 74 72 79 20 74 6f 20 63  n so we try to c
bdd0: 61 6c 63 75 6c 61 74 65 20 69 74 73 20 76 61 6c  alculate its val
bde0: 75 65 0a 20 20 20 20 76 61 6c 75 65 20 3d 20 74  ue.    value = t
bdf0: 6d 70 6c 28 65 78 70 72 2e 65 78 70 72 2c 20 63  mpl(expr.expr, c
be00: 6f 6e 74 65 78 74 29 3b 0a 0a 20 20 20 20 76 61  ontext);..    va
be10: 72 20 68 61 73 56 61 6c 75 65 20 3d 20 21 69 73  r hasValue = !is
be20: 42 6c 61 6e 6b 28 76 61 6c 75 65 29 3b 0a 20 20  Blank(value);.  
be30: 20 20 76 61 72 20 69 73 4f 62 6a 20 3d 20 69 73    var isObj = is
be40: 4f 62 6a 65 63 74 28 76 61 6c 75 65 29 3b 0a 0a  Object(value);..
be50: 20 20 20 20 2f 2f 20 63 6f 6e 76 65 72 74 20 74      // convert t
be60: 68 65 20 73 74 79 6c 65 2f 63 6c 61 73 73 20 6f  he style/class o
be70: 62 6a 65 63 74 73 20 74 6f 20 73 74 72 69 6e 67  bjects to string
be80: 73 0a 20 20 20 20 69 66 20 28 69 73 4f 62 6a 29  s.    if (isObj)
be90: 20 7b 0a 20 20 20 20 20 20 69 66 20 28 69 73 43   {.      if (isC
bea0: 6c 61 73 73 41 74 74 72 29 20 7b 0a 20 20 20 20  lassAttr) {.    
beb0: 20 20 20 20 76 61 6c 75 65 20 3d 20 74 6d 70 6c      value = tmpl
bec0: 28 4a 53 4f 4e 2e 73 74 72 69 6e 67 69 66 79 28  (JSON.stringify(
bed0: 76 61 6c 75 65 29 2c 20 74 68 69 73 29 3b 0a 20  value), this);. 
bee0: 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28       } else if (
bef0: 69 73 53 74 79 6c 65 41 74 74 72 29 20 7b 0a 20  isStyleAttr) {. 
bf00: 20 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 73         value = s
bf10: 74 79 6c 65 4f 62 6a 65 63 74 54 6f 53 74 72 69  tyleObjectToStri
bf20: 6e 67 28 76 61 6c 75 65 29 3b 0a 20 20 20 20 20  ng(value);.     
bf30: 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f   }.    }..    //
bf40: 20 72 65 6d 6f 76 65 20 6f 72 69 67 69 6e 61 6c   remove original
bf50: 20 61 74 74 72 69 62 75 74 65 0a 20 20 20 20 69   attribute.    i
bf60: 66 20 28 65 78 70 72 2e 61 74 74 72 20 26 26 0a  f (expr.attr &&.
bf70: 20 20 20 20 20 20 20 20 28 0a 20 20 20 20 20 20          (.      
bf80: 20 20 20 20 2f 2f 20 74 68 65 20 6f 72 69 67 69      // the origi
bf90: 6e 61 6c 20 61 74 74 72 69 62 75 74 65 20 63 61  nal attribute ca
bfa0: 6e 20 62 65 20 72 65 6d 6f 76 65 64 20 6f 6e 6c  n be removed onl
bfb0: 79 20 69 66 20 77 65 20 61 72 65 20 70 61 72 73  y if we are pars
bfc0: 69 6e 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  ing the original
bfd0: 20 65 78 70 72 65 73 73 69 6f 6e 0a 20 20 20 20   expression.    
bfe0: 20 20 20 20 20 20 21 65 78 70 72 2e 77 61 73 50        !expr.wasP
bff0: 61 72 73 65 64 4f 6e 63 65 20 7c 7c 0a 20 20 20  arsedOnce ||.   
c000: 20 20 20 20 20 20 20 2f 2f 20 6f 72 20 69 74 73         // or its
c010: 20 76 61 6c 75 65 20 69 73 20 66 61 6c 73 65 0a   value is false.
c020: 20 20 20 20 20 20 20 20 20 20 76 61 6c 75 65 20            value 
c030: 3d 3d 3d 20 66 61 6c 73 65 20 7c 7c 0a 20 20 20  === false ||.   
c040: 20 20 20 20 20 20 20 2f 2f 20 6f 72 20 69 66 20         // or if 
c050: 69 74 73 20 76 61 6c 75 65 20 69 73 20 63 75 72  its value is cur
c060: 72 65 6e 74 6c 79 20 66 61 6c 73 79 2e 2e 2e 0a  rently falsy....
c070: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 57 65 20            // We 
c080: 77 69 6c 6c 20 6b 65 65 70 20 74 68 65 20 22 76  will keep the "v
c090: 61 6c 75 65 22 20 61 74 74 72 69 62 75 74 65 73  alue" attributes
c0a0: 20 69 66 20 74 68 65 20 22 6b 65 65 70 56 61 6c   if the "keepVal
c0b0: 75 65 41 74 74 72 69 62 75 74 65 73 22 0a 20 20  ueAttributes".  
c0c0: 20 20 20 20 20 20 20 20 2f 2f 20 69 73 20 65 6e          // is en
c0d0: 61 62 6c 65 64 20 74 68 6f 75 67 68 0a 20 20 20  abled though.   
c0e0: 20 20 20 20 20 20 20 28 21 68 61 73 56 61 6c 75         (!hasValu
c0f0: 65 20 26 26 20 28 21 69 73 56 61 6c 75 65 41 74  e && (!isValueAt
c100: 74 72 20 7c 7c 20 69 73 56 61 6c 75 65 41 74 74  tr || isValueAtt
c110: 72 20 26 26 20 21 6b 65 65 70 56 61 6c 75 65 41  r && !keepValueA
c120: 74 74 72 69 62 75 74 65 73 29 29 0a 20 20 20 20  ttributes)).    
c130: 20 20 20 20 29 0a 20 20 20 20 29 20 7b 0a 20 20      ).    ) {.  
c140: 20 20 20 20 2f 2f 20 72 65 6d 6f 76 65 20 65 69      // remove ei
c150: 74 68 65 72 20 72 69 6f 74 2d 2a 20 61 74 74 72  ther riot-* attr
c160: 69 62 75 74 65 73 20 6f 72 20 6a 75 73 74 20 74  ibutes or just t
c170: 68 65 20 61 74 74 72 69 62 75 74 65 20 6e 61 6d  he attribute nam
c180: 65 0a 20 20 20 20 20 20 72 65 6d 6f 76 65 41 74  e.      removeAt
c190: 74 72 69 62 75 74 65 28 64 6f 6d 2c 20 67 65 74  tribute(dom, get
c1a0: 41 74 74 72 69 62 75 74 65 28 64 6f 6d 2c 20 65  Attribute(dom, e
c1b0: 78 70 72 2e 61 74 74 72 29 20 3f 20 65 78 70 72  xpr.attr) ? expr
c1c0: 2e 61 74 74 72 20 3a 20 61 74 74 72 4e 61 6d 65  .attr : attrName
c1d0: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f  );.    }..    //
c1e0: 20 66 6f 72 20 74 68 65 20 62 6f 6f 6c 65 61 6e   for the boolean
c1f0: 20 61 74 74 72 69 62 75 74 65 73 20 77 65 20 64   attributes we d
c200: 6f 6e 27 74 20 6e 65 65 64 20 74 68 65 20 76 61  on't need the va
c210: 6c 75 65 0a 20 20 20 20 2f 2f 20 77 65 20 63 61  lue.    // we ca
c220: 6e 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  n convert it to 
c230: 63 68 65 63 6b 65 64 3d 74 72 75 65 20 74 6f 20  checked=true to 
c240: 63 68 65 63 6b 65 64 3d 63 68 65 63 6b 65 64 0a  checked=checked.
c250: 20 20 20 20 69 66 20 28 65 78 70 72 2e 62 6f 6f      if (expr.boo
c260: 6c 29 20 7b 20 76 61 6c 75 65 20 3d 20 76 61 6c  l) { value = val
c270: 75 65 20 3f 20 61 74 74 72 4e 61 6d 65 20 3a 20  ue ? attrName : 
c280: 66 61 6c 73 65 3b 20 7d 0a 20 20 20 20 69 66 20  false; }.    if 
c290: 28 65 78 70 72 2e 69 73 52 74 61 67 29 20 7b 20  (expr.isRtag) { 
c2a0: 72 65 74 75 72 6e 20 75 70 64 61 74 65 44 61 74  return updateDat
c2b0: 61 49 73 28 65 78 70 72 2c 20 74 68 69 73 2c 20  aIs(expr, this, 
c2c0: 76 61 6c 75 65 29 20 7d 0a 20 20 20 20 69 66 20  value) }.    if 
c2d0: 28 65 78 70 72 2e 77 61 73 50 61 72 73 65 64 4f  (expr.wasParsedO
c2e0: 6e 63 65 20 26 26 20 65 78 70 72 2e 76 61 6c 75  nce && expr.valu
c2f0: 65 20 3d 3d 3d 20 76 61 6c 75 65 29 20 7b 20 72  e === value) { r
c300: 65 74 75 72 6e 20 7d 0a 0a 20 20 20 20 2f 2f 20  eturn }..    // 
c310: 75 70 64 61 74 65 20 74 68 65 20 65 78 70 72 65  update the expre
c320: 73 73 69 6f 6e 20 76 61 6c 75 65 0a 20 20 20 20  ssion value.    
c330: 65 78 70 72 2e 76 61 6c 75 65 20 3d 20 76 61 6c  expr.value = val
c340: 75 65 3b 0a 20 20 20 20 65 78 70 72 2e 77 61 73  ue;.    expr.was
c350: 50 61 72 73 65 64 4f 6e 63 65 20 3d 20 74 72 75  ParsedOnce = tru
c360: 65 3b 0a 0a 20 20 20 20 2f 2f 20 69 66 20 74 68  e;..    // if th
c370: 65 20 76 61 6c 75 65 20 69 73 20 61 6e 20 6f 62  e value is an ob
c380: 6a 65 63 74 20 28 61 6e 64 20 69 74 27 73 20 6e  ject (and it's n
c390: 6f 74 20 61 20 73 74 79 6c 65 20 6f 72 20 63 6c  ot a style or cl
c3a0: 61 73 73 20 61 74 74 72 69 62 75 74 65 29 20 77  ass attribute) w
c3b0: 65 20 63 61 6e 20 6e 6f 74 20 64 6f 20 6d 75 63  e can not do muc
c3c0: 68 20 6d 6f 72 65 20 77 69 74 68 20 69 74 0a 20  h more with it. 
c3d0: 20 20 20 69 66 20 28 69 73 4f 62 6a 20 26 26 20     if (isObj && 
c3e0: 21 69 73 43 6c 61 73 73 41 74 74 72 20 26 26 20  !isClassAttr && 
c3f0: 21 69 73 53 74 79 6c 65 41 74 74 72 20 26 26 20  !isStyleAttr && 
c400: 21 69 73 54 6f 67 67 6c 65 29 20 7b 20 72 65 74  !isToggle) { ret
c410: 75 72 6e 20 7d 0a 20 20 20 20 2f 2f 20 61 76 6f  urn }.    // avo
c420: 69 64 20 74 6f 20 72 65 6e 64 65 72 20 75 6e 64  id to render und
c430: 65 66 69 6e 65 64 2f 6e 75 6c 6c 20 76 61 6c 75  efined/null valu
c440: 65 73 0a 20 20 20 20 69 66 20 28 21 68 61 73 56  es.    if (!hasV
c450: 61 6c 75 65 29 20 7b 20 76 61 6c 75 65 20 3d 20  alue) { value = 
c460: 27 27 3b 20 7d 0a 0a 20 20 20 20 2f 2f 20 74 65  ''; }..    // te
c470: 78 74 61 72 65 61 20 61 6e 64 20 74 65 78 74 20  xtarea and text 
c480: 6e 6f 64 65 73 20 68 61 76 65 20 6e 6f 20 61 74  nodes have no at
c490: 74 72 69 62 75 74 65 20 6e 61 6d 65 0a 20 20 20  tribute name.   
c4a0: 20 69 66 20 28 21 61 74 74 72 4e 61 6d 65 29 20   if (!attrName) 
c4b0: 7b 0a 20 20 20 20 20 20 2f 2f 20 61 62 6f 75 74  {.      // about
c4c0: 20 23 38 31 35 20 77 2f 6f 20 72 65 70 6c 61 63   #815 w/o replac
c4d0: 65 3a 20 74 68 65 20 62 72 6f 77 73 65 72 20 63  e: the browser c
c4e0: 6f 6e 76 65 72 74 73 20 74 68 65 20 76 61 6c 75  onverts the valu
c4f0: 65 20 74 6f 20 61 20 73 74 72 69 6e 67 2c 0a 20  e to a string,. 
c500: 20 20 20 20 20 2f 2f 20 74 68 65 20 63 6f 6d 70       // the comp
c510: 61 72 69 73 6f 6e 20 62 79 20 22 3d 3d 22 20 64  arison by "==" d
c520: 6f 65 73 20 74 6f 6f 2c 20 62 75 74 20 6e 6f 74  oes too, but not
c530: 20 69 6e 20 74 68 65 20 73 65 72 76 65 72 0a 20   in the server. 
c540: 20 20 20 20 20 76 61 6c 75 65 20 2b 3d 20 27 27       value += ''
c550: 3b 0a 20 20 20 20 20 20 2f 2f 20 74 65 73 74 20  ;.      // test 
c560: 66 6f 72 20 70 61 72 65 6e 74 20 61 76 6f 69 64  for parent avoid
c570: 73 20 65 72 72 6f 72 20 77 69 74 68 20 69 6e 76  s error with inv
c580: 61 6c 69 64 20 61 73 73 69 67 6e 6d 65 6e 74 20  alid assignment 
c590: 74 6f 20 6e 6f 64 65 56 61 6c 75 65 0a 20 20 20  to nodeValue.   
c5a0: 20 20 20 69 66 20 28 70 61 72 65 6e 74 29 20 7b     if (parent) {
c5b0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 63 61 63 68  .        // cach
c5c0: 65 20 74 68 65 20 70 61 72 65 6e 74 20 6e 6f 64  e the parent nod
c5d0: 65 20 62 65 63 61 75 73 65 20 73 6f 6d 65 68 6f  e because someho
c5e0: 77 20 69 74 20 77 69 6c 6c 20 62 65 63 6f 6d 65  w it will become
c5f0: 20 6e 75 6c 6c 20 6f 6e 20 49 45 0a 20 20 20 20   null on IE.    
c600: 20 20 20 20 2f 2f 20 6f 6e 20 74 68 65 20 6e 65      // on the ne
c610: 78 74 20 69 74 65 72 61 74 69 6f 6e 0a 20 20 20  xt iteration.   
c620: 20 20 20 20 20 65 78 70 72 2e 70 61 72 65 6e 74       expr.parent
c630: 20 3d 20 70 61 72 65 6e 74 3b 0a 20 20 20 20 20   = parent;.     
c640: 20 20 20 69 66 20 28 70 61 72 65 6e 74 2e 74 61     if (parent.ta
c650: 67 4e 61 6d 65 20 3d 3d 3d 20 27 54 45 58 54 41  gName === 'TEXTA
c660: 52 45 41 27 29 20 7b 0a 20 20 20 20 20 20 20 20  REA') {.        
c670: 20 20 70 61 72 65 6e 74 2e 76 61 6c 75 65 20 3d    parent.value =
c680: 20 76 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20   value;         
c690: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 23 31             // #1
c6a0: 31 31 33 0a 20 20 20 20 20 20 20 20 20 20 69 66  113.          if
c6b0: 20 28 21 49 45 5f 56 45 52 53 49 4f 4e 29 20 7b   (!IE_VERSION) {
c6c0: 20 64 6f 6d 2e 6e 6f 64 65 56 61 6c 75 65 20 3d   dom.nodeValue =
c6d0: 20 76 61 6c 75 65 3b 20 7d 20 20 2f 2f 20 23 31   value; }  // #1
c6e0: 36 32 35 20 49 45 20 74 68 72 6f 77 73 20 68 65  625 IE throws he
c6f0: 72 65 2c 20 6e 6f 64 65 56 61 6c 75 65 0a 20 20  re, nodeValue.  
c700: 20 20 20 20 20 20 7d 20 20 20 20 20 20 20 20 20        }         
c710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c730: 2f 2f 20 77 69 6c 6c 20 62 65 20 61 76 61 69 6c  // will be avail
c740: 61 62 6c 65 20 6f 6e 20 27 75 70 64 61 74 65 64  able on 'updated
c750: 27 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 7b  '.        else {
c760: 20 64 6f 6d 2e 6e 6f 64 65 56 61 6c 75 65 20 3d   dom.nodeValue =
c770: 20 76 61 6c 75 65 3b 20 7d 0a 20 20 20 20 20 20   value; }.      
c780: 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 0a 20  }.      return. 
c790: 20 20 20 7d 0a 0a 20 20 20 20 73 77 69 74 63 68     }..    switch
c7a0: 20 28 74 72 75 65 29 20 7b 0a 20 20 20 20 2f 2f   (true) {.    //
c7b0: 20 68 61 6e 64 6c 65 20 65 76 65 6e 74 73 20 62   handle events b
c7c0: 69 6e 64 69 6e 67 0a 20 20 20 20 63 61 73 65 20  inding.    case 
c7d0: 69 73 46 75 6e 63 74 69 6f 6e 28 76 61 6c 75 65  isFunction(value
c7e0: 29 3a 0a 20 20 20 20 20 20 69 66 20 28 69 73 45  ):.      if (isE
c7f0: 76 65 6e 74 41 74 74 72 69 62 75 74 65 28 61 74  ventAttribute(at
c800: 74 72 4e 61 6d 65 29 29 20 7b 0a 20 20 20 20 20  trName)) {.     
c810: 20 20 20 73 65 74 45 76 65 6e 74 48 61 6e 64 6c     setEventHandl
c820: 65 72 28 61 74 74 72 4e 61 6d 65 2c 20 76 61 6c  er(attrName, val
c830: 75 65 2c 20 64 6f 6d 2c 20 74 68 69 73 29 3b 0a  ue, dom, this);.
c840: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72        }.      br
c850: 65 61 6b 0a 20 20 20 20 2f 2f 20 73 68 6f 77 20  eak.    // show 
c860: 2f 20 68 69 64 65 0a 20 20 20 20 63 61 73 65 20  / hide.    case 
c870: 69 73 54 6f 67 67 6c 65 3a 0a 20 20 20 20 20 20  isToggle:.      
c880: 74 6f 67 67 6c 65 56 69 73 69 62 69 6c 69 74 79  toggleVisibility
c890: 28 64 6f 6d 2c 20 61 74 74 72 4e 61 6d 65 20 3d  (dom, attrName =
c8a0: 3d 3d 20 48 49 44 45 5f 44 49 52 45 43 54 49 56  == HIDE_DIRECTIV
c8b0: 45 20 3f 20 21 76 61 6c 75 65 20 3a 20 76 61 6c  E ? !value : val
c8c0: 75 65 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  ue);.      break
c8d0: 0a 20 20 20 20 2f 2f 20 68 61 6e 64 6c 65 20 61  .    // handle a
c8e0: 74 74 72 69 62 75 74 65 73 0a 20 20 20 20 64 65  ttributes.    de
c8f0: 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 69 66 20  fault:.      if 
c900: 28 65 78 70 72 2e 62 6f 6f 6c 29 20 7b 0a 20 20  (expr.bool) {.  
c910: 20 20 20 20 20 20 64 6f 6d 5b 61 74 74 72 4e 61        dom[attrNa
c920: 6d 65 5d 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20  me] = value;.   
c930: 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 20 28     }..      if (
c940: 69 73 56 61 6c 75 65 41 74 74 72 20 26 26 20 64  isValueAttr && d
c950: 6f 6d 2e 76 61 6c 75 65 20 21 3d 3d 20 76 61 6c  om.value !== val
c960: 75 65 29 20 7b 0a 20 20 20 20 20 20 20 20 64 6f  ue) {.        do
c970: 6d 2e 76 61 6c 75 65 20 3d 20 76 61 6c 75 65 3b  m.value = value;
c980: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66  .      } else if
c990: 20 28 68 61 73 56 61 6c 75 65 20 26 26 20 76 61   (hasValue && va
c9a0: 6c 75 65 20 21 3d 3d 20 66 61 6c 73 65 29 20 7b  lue !== false) {
c9b0: 0a 20 20 20 20 20 20 20 20 73 65 74 41 74 74 72  .        setAttr
c9c0: 69 62 75 74 65 28 64 6f 6d 2c 20 61 74 74 72 4e  ibute(dom, attrN
c9d0: 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0a 20 20 20  ame, value);.   
c9e0: 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2f 20 6d     }..      // m
c9f0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 69 6e  ake sure that in
ca00: 20 63 61 73 65 20 6f 66 20 73 74 79 6c 65 20 63   case of style c
ca10: 68 61 6e 67 65 73 0a 20 20 20 20 20 20 2f 2f 20  hanges.      // 
ca20: 74 68 65 20 65 6c 65 6d 65 6e 74 20 73 74 61 79  the element stay
ca30: 73 20 68 69 64 64 65 6e 0a 20 20 20 20 20 20 69  s hidden.      i
ca40: 66 20 28 69 73 53 74 79 6c 65 41 74 74 72 20 26  f (isStyleAttr &
ca50: 26 20 64 6f 6d 2e 68 69 64 64 65 6e 29 20 7b 20  & dom.hidden) { 
ca60: 74 6f 67 67 6c 65 56 69 73 69 62 69 6c 69 74 79  toggleVisibility
ca70: 28 64 6f 6d 2c 20 66 61 6c 73 65 29 3b 20 7d 0a  (dom, false); }.
ca80: 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 2a      }.  }..  /**
ca90: 0a 20 20 20 2a 20 55 70 64 61 74 65 20 61 6c 6c  .   * Update all
caa0: 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73   the expressions
cab0: 20 69 6e 20 61 20 54 61 67 20 69 6e 73 74 61 6e   in a Tag instan
cac0: 63 65 0a 20 20 20 2a 20 40 74 68 69 73 20 54 61  ce.   * @this Ta
cad0: 67 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 7b 20  g.   * @param { 
cae0: 41 72 72 61 79 20 7d 20 65 78 70 72 65 73 73 69  Array } expressi
caf0: 6f 6e 73 20 2d 20 65 78 70 72 65 73 73 69 6f 6e  ons - expression
cb00: 20 74 68 61 74 20 6d 75 73 74 20 62 65 20 72 65   that must be re
cb10: 20 65 76 61 6c 75 61 74 65 64 0a 20 20 20 2a 2f   evaluated.   */
cb20: 0a 20 20 66 75 6e 63 74 69 6f 6e 20 75 70 64 61  .  function upda
cb30: 74 65 28 65 78 70 72 65 73 73 69 6f 6e 73 29 20  te(expressions) 
cb40: 7b 0a 20 20 20 20 65 61 63 68 28 65 78 70 72 65  {.    each(expre
cb50: 73 73 69 6f 6e 73 2c 20 75 70 64 61 74 65 45 78  ssions, updateEx
cb60: 70 72 65 73 73 69 6f 6e 2e 62 69 6e 64 28 74 68  pression.bind(th
cb70: 69 73 29 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 2a  is));.  }..  /**
cb80: 0a 20 20 20 2a 20 57 65 20 6e 65 65 64 20 74 6f  .   * We need to
cb90: 20 75 70 64 61 74 65 20 6f 70 74 73 20 66 6f 72   update opts for
cba0: 20 74 68 69 73 20 74 61 67 2e 20 54 68 61 74 20   this tag. That 
cbb0: 72 65 71 75 69 72 65 73 20 75 70 64 61 74 69 6e  requires updatin
cbc0: 67 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  g the expression
cbd0: 73 0a 20 20 20 2a 20 69 6e 20 61 6e 79 20 61 74  s.   * in any at
cbe0: 74 72 69 62 75 74 65 73 20 6f 6e 20 74 68 65 20  tributes on the 
cbf0: 74 61 67 2c 20 61 6e 64 20 74 68 65 6e 20 63 6f  tag, and then co
cc00: 70 79 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74  pying the result
cc10: 20 6f 6e 74 6f 20 6f 70 74 73 2e 0a 20 20 20 2a   onto opts..   *
cc20: 20 40 74 68 69 73 20 54 61 67 0a 20 20 20 2a 20   @this Tag.   * 
cc30: 40 70 61 72 61 6d 20 20 20 7b 42 6f 6f 6c 65 61  @param   {Boolea
cc40: 6e 7d 20 69 73 4c 6f 6f 70 20 2d 20 69 73 20 69  n} isLoop - is i
cc50: 74 20 61 20 6c 6f 6f 70 20 74 61 67 3f 0a 20 20  t a loop tag?.  
cc60: 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 54 61   * @param   { Ta
cc70: 67 20 7d 20 20 70 61 72 65 6e 74 20 2d 20 70 61  g }  parent - pa
cc80: 72 65 6e 74 20 74 61 67 20 6e 6f 64 65 0a 20 20  rent tag node.  
cc90: 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 42 6f   * @param   { Bo
cca0: 6f 6c 65 61 6e 20 7d 20 20 69 73 41 6e 6f 6e 79  olean }  isAnony
ccb0: 6d 6f 75 73 20 2d 20 69 73 20 69 74 20 61 20 74  mous - is it a t
ccc0: 61 67 20 77 69 74 68 6f 75 74 20 61 6e 79 20 69  ag without any i
ccd0: 6d 70 6c 3f 20 28 61 20 74 61 67 20 6e 6f 74 20  mpl? (a tag not 
cce0: 72 65 67 69 73 74 65 72 65 64 29 0a 20 20 20 2a  registered).   *
ccf0: 20 40 70 61 72 61 6d 20 20 20 7b 20 4f 62 6a 65   @param   { Obje
cd00: 63 74 20 7d 20 20 6f 70 74 73 20 2d 20 74 61 67  ct }  opts - tag
cd10: 20 6f 70 74 69 6f 6e 73 0a 20 20 20 2a 20 40 70   options.   * @p
cd20: 61 72 61 6d 20 20 20 7b 20 41 72 72 61 79 20 7d  aram   { Array }
cd30: 20 20 69 6e 73 74 41 74 74 72 73 20 2d 20 74 61    instAttrs - ta
cd40: 67 20 61 74 74 72 69 62 75 74 65 73 20 61 72 72  g attributes arr
cd50: 61 79 0a 20 20 20 2a 2f 0a 20 20 66 75 6e 63 74  ay.   */.  funct
cd60: 69 6f 6e 20 75 70 64 61 74 65 4f 70 74 73 28 69  ion updateOpts(i
cd70: 73 4c 6f 6f 70 2c 20 70 61 72 65 6e 74 2c 20 69  sLoop, parent, i
cd80: 73 41 6e 6f 6e 79 6d 6f 75 73 2c 20 6f 70 74 73  sAnonymous, opts
cd90: 2c 20 69 6e 73 74 41 74 74 72 73 29 20 7b 0a 20  , instAttrs) {. 
cda0: 20 20 20 2f 2f 20 69 73 41 6e 6f 6e 79 6d 6f 75     // isAnonymou
cdb0: 73 20 60 65 61 63 68 60 20 74 61 67 73 20 74 72  s `each` tags tr
cdc0: 65 61 74 20 60 64 6f 6d 60 20 61 6e 64 20 60 72  eat `dom` and `r
cdd0: 6f 6f 74 60 20 64 69 66 66 65 72 65 6e 74 6c 79  oot` differently
cde0: 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 0a 20  . In this case. 
cdf0: 20 20 20 2f 2f 20 28 61 6e 64 20 6f 6e 6c 79 20     // (and only 
ce00: 74 68 69 73 20 63 61 73 65 29 20 77 65 20 64 6f  this case) we do
ce10: 6e 27 74 20 6e 65 65 64 20 74 6f 20 64 6f 20 75  n't need to do u
ce20: 70 64 61 74 65 4f 70 74 73 2c 20 62 65 63 61 75  pdateOpts, becau
ce30: 73 65 20 74 68 65 20 72 65 67 75 6c 61 72 20 70  se the regular p
ce40: 61 72 73 65 0a 20 20 20 20 2f 2f 20 77 69 6c 6c  arse.    // will
ce50: 20 75 70 64 61 74 65 20 74 68 6f 73 65 20 61 74   update those at
ce60: 74 72 73 2e 20 50 6c 75 73 2c 20 69 73 41 6e 6f  trs. Plus, isAno
ce70: 6e 79 6d 6f 75 73 20 74 61 67 73 20 64 6f 6e 27  nymous tags don'
ce80: 74 20 6e 65 65 64 20 6f 70 74 73 20 61 6e 79 77  t need opts anyw
ce90: 61 79 0a 20 20 20 20 69 66 20 28 69 73 4c 6f 6f  ay.    if (isLoo
cea0: 70 20 26 26 20 69 73 41 6e 6f 6e 79 6d 6f 75 73  p && isAnonymous
ceb0: 29 20 7b 20 72 65 74 75 72 6e 20 7d 0a 20 20 20  ) { return }.   
cec0: 20 76 61 72 20 63 74 78 20 3d 20 69 73 4c 6f 6f   var ctx = isLoo
ced0: 70 20 3f 20 69 6e 68 65 72 69 74 50 61 72 65 6e  p ? inheritParen
cee0: 74 50 72 6f 70 73 2e 63 61 6c 6c 28 74 68 69 73  tProps.call(this
cef0: 29 20 3a 20 70 61 72 65 6e 74 20 7c 7c 20 74 68  ) : parent || th
cf00: 69 73 3b 0a 0a 20 20 20 20 65 61 63 68 28 69 6e  is;..    each(in
cf10: 73 74 41 74 74 72 73 2c 20 66 75 6e 63 74 69 6f  stAttrs, functio
cf20: 6e 20 28 61 74 74 72 29 20 7b 0a 20 20 20 20 20  n (attr) {.     
cf30: 20 69 66 20 28 61 74 74 72 2e 65 78 70 72 29 20   if (attr.expr) 
cf40: 7b 20 75 70 64 61 74 65 45 78 70 72 65 73 73 69  { updateExpressi
cf50: 6f 6e 2e 63 61 6c 6c 28 63 74 78 2c 20 61 74 74  on.call(ctx, att
cf60: 72 2e 65 78 70 72 29 3b 20 7d 0a 20 20 20 20 20  r.expr); }.     
cf70: 20 2f 2f 20 6e 6f 72 6d 61 6c 69 7a 65 20 74 68   // normalize th
cf80: 65 20 61 74 74 72 69 62 75 74 65 20 6e 61 6d 65  e attribute name
cf90: 73 0a 20 20 20 20 20 20 6f 70 74 73 5b 74 6f 43  s.      opts[toC
cfa0: 61 6d 65 6c 28 61 74 74 72 2e 6e 61 6d 65 29 2e  amel(attr.name).
cfb0: 72 65 70 6c 61 63 65 28 41 54 54 52 53 5f 50 52  replace(ATTRS_PR
cfc0: 45 46 49 58 2c 20 27 27 29 5d 20 3d 20 61 74 74  EFIX, '')] = att
cfd0: 72 2e 65 78 70 72 20 3f 20 61 74 74 72 2e 65 78  r.expr ? attr.ex
cfe0: 70 72 2e 76 61 6c 75 65 20 3a 20 61 74 74 72 2e  pr.value : attr.
cff0: 76 61 6c 75 65 3b 0a 20 20 20 20 7d 29 3b 0a 20  value;.    });. 
d000: 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 55   }..  /**.   * U
d010: 70 64 61 74 65 20 74 68 65 20 74 61 67 20 65 78  pdate the tag ex
d020: 70 72 65 73 73 69 6f 6e 73 20 61 6e 64 20 6f 70  pressions and op
d030: 74 69 6f 6e 73 0a 20 20 20 2a 20 40 70 61 72 61  tions.   * @para
d040: 6d 20 7b 20 54 61 67 20 7d 20 74 61 67 20 2d 20  m { Tag } tag - 
d050: 74 61 67 20 6f 62 6a 65 63 74 0a 20 20 20 2a 20  tag object.   * 
d060: 40 70 61 72 61 6d 20 7b 20 2a 20 7d 20 64 61 74  @param { * } dat
d070: 61 20 2d 20 64 61 74 61 20 77 65 20 77 61 6e 74  a - data we want
d080: 20 74 6f 20 75 73 65 20 74 6f 20 65 78 74 65 6e   to use to exten
d090: 64 20 74 68 65 20 74 61 67 20 70 72 6f 70 65 72  d the tag proper
d0a0: 74 69 65 73 0a 20 20 20 2a 20 40 70 61 72 61 6d  ties.   * @param
d0b0: 20 7b 20 41 72 72 61 79 20 7d 20 65 78 70 72 65   { Array } expre
d0c0: 73 73 69 6f 6e 73 20 2d 20 63 6f 6d 70 6f 6e 65  ssions - compone
d0d0: 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61  nt expressions a
d0e0: 72 72 61 79 0a 20 20 20 2a 20 40 72 65 74 75 72  rray.   * @retur
d0f0: 6e 73 20 7b 20 54 61 67 20 7d 20 74 68 65 20 63  ns { Tag } the c
d100: 75 72 72 65 6e 74 20 74 61 67 20 69 6e 73 74 61  urrent tag insta
d110: 6e 63 65 0a 20 20 20 2a 2f 0a 20 20 66 75 6e 63  nce.   */.  func
d120: 74 69 6f 6e 20 63 6f 6d 70 6f 6e 65 6e 74 55 70  tion componentUp
d130: 64 61 74 65 28 74 61 67 2c 20 64 61 74 61 2c 20  date(tag, data, 
d140: 65 78 70 72 65 73 73 69 6f 6e 73 29 20 7b 0a 20  expressions) {. 
d150: 20 20 20 76 61 72 20 5f 5f 20 3d 20 74 61 67 2e     var __ = tag.
d160: 5f 5f 3b 0a 20 20 20 20 76 61 72 20 6e 65 78 74  __;.    var next
d170: 4f 70 74 73 20 3d 20 7b 7d 3b 0a 20 20 20 20 76  Opts = {};.    v
d180: 61 72 20 63 61 6e 54 72 69 67 67 65 72 20 3d 20  ar canTrigger = 
d190: 74 61 67 2e 69 73 4d 6f 75 6e 74 65 64 20 26 26  tag.isMounted &&
d1a0: 20 21 5f 5f 2e 73 6b 69 70 41 6e 6f 6e 79 6d 6f   !__.skipAnonymo
d1b0: 75 73 3b 0a 0a 20 20 20 20 2f 2f 20 69 6e 68 65  us;..    // inhe
d1c0: 72 69 74 20 70 72 6f 70 65 72 74 69 65 73 20 66  rit properties f
d1d0: 72 6f 6d 20 74 68 65 20 70 61 72 65 6e 74 20 74  rom the parent t
d1e0: 61 67 0a 20 20 20 20 69 66 20 28 5f 5f 2e 69 73  ag.    if (__.is
d1f0: 41 6e 6f 6e 79 6d 6f 75 73 20 26 26 20 5f 5f 2e  Anonymous && __.
d200: 70 61 72 65 6e 74 29 20 7b 20 65 78 74 65 6e 64  parent) { extend
d210: 28 74 61 67 2c 20 5f 5f 2e 70 61 72 65 6e 74 29  (tag, __.parent)
d220: 3b 20 7d 0a 20 20 20 20 65 78 74 65 6e 64 28 74  ; }.    extend(t
d230: 61 67 2c 20 64 61 74 61 29 3b 0a 0a 20 20 20 20  ag, data);..    
d240: 75 70 64 61 74 65 4f 70 74 73 2e 61 70 70 6c 79  updateOpts.apply
d250: 28 74 61 67 2c 20 5b 5f 5f 2e 69 73 4c 6f 6f 70  (tag, [__.isLoop
d260: 2c 20 5f 5f 2e 70 61 72 65 6e 74 2c 20 5f 5f 2e  , __.parent, __.
d270: 69 73 41 6e 6f 6e 79 6d 6f 75 73 2c 20 6e 65 78  isAnonymous, nex
d280: 74 4f 70 74 73 2c 20 5f 5f 2e 69 6e 73 74 41 74  tOpts, __.instAt
d290: 74 72 73 5d 29 3b 0a 0a 20 20 20 20 69 66 20 28  trs]);..    if (
d2a0: 0a 20 20 20 20 20 20 63 61 6e 54 72 69 67 67 65  .      canTrigge
d2b0: 72 20 26 26 0a 20 20 20 20 20 20 74 61 67 2e 69  r &&.      tag.i
d2c0: 73 4d 6f 75 6e 74 65 64 20 26 26 0a 20 20 20 20  sMounted &&.    
d2d0: 20 20 69 73 46 75 6e 63 74 69 6f 6e 28 74 61 67    isFunction(tag
d2e0: 2e 73 68 6f 75 6c 64 55 70 64 61 74 65 29 20 26  .shouldUpdate) &
d2f0: 26 20 21 74 61 67 2e 73 68 6f 75 6c 64 55 70 64  & !tag.shouldUpd
d300: 61 74 65 28 64 61 74 61 2c 20 6e 65 78 74 4f 70  ate(data, nextOp
d310: 74 73 29 0a 20 20 20 20 29 20 7b 0a 20 20 20 20  ts).    ) {.    
d320: 20 20 72 65 74 75 72 6e 20 74 61 67 0a 20 20 20    return tag.   
d330: 20 7d 0a 0a 20 20 20 20 65 78 74 65 6e 64 28 74   }..    extend(t
d340: 61 67 2e 6f 70 74 73 2c 20 6e 65 78 74 4f 70 74  ag.opts, nextOpt
d350: 73 29 3b 0a 0a 20 20 20 20 69 66 20 28 63 61 6e  s);..    if (can
d360: 54 72 69 67 67 65 72 29 20 7b 20 74 61 67 2e 74  Trigger) { tag.t
d370: 72 69 67 67 65 72 28 27 75 70 64 61 74 65 27 2c  rigger('update',
d380: 20 64 61 74 61 29 3b 20 7d 0a 20 20 20 20 75 70   data); }.    up
d390: 64 61 74 65 2e 63 61 6c 6c 28 74 61 67 2c 20 65  date.call(tag, e
d3a0: 78 70 72 65 73 73 69 6f 6e 73 29 3b 0a 20 20 20  xpressions);.   
d3b0: 20 69 66 20 28 63 61 6e 54 72 69 67 67 65 72 29   if (canTrigger)
d3c0: 20 7b 20 74 61 67 2e 74 72 69 67 67 65 72 28 27   { tag.trigger('
d3d0: 75 70 64 61 74 65 64 27 29 3b 20 7d 0a 0a 20 20  updated'); }..  
d3e0: 20 20 72 65 74 75 72 6e 20 74 61 67 0a 20 20 7d    return tag.  }
d3f0: 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 47 65 74  ..  /**.   * Get
d400: 20 73 65 6c 65 63 74 6f 72 73 20 66 6f 72 20 74   selectors for t
d410: 61 67 73 0a 20 20 20 2a 20 40 70 61 72 61 6d 20  ags.   * @param 
d420: 20 20 7b 20 41 72 72 61 79 20 7d 20 74 61 67 73    { Array } tags
d430: 20 2d 20 74 61 67 20 6e 61 6d 65 73 20 74 6f 20   - tag names to 
d440: 73 65 6c 65 63 74 0a 20 20 20 2a 20 40 72 65 74  select.   * @ret
d450: 75 72 6e 73 20 7b 20 53 74 72 69 6e 67 20 7d 20  urns { String } 
d460: 73 65 6c 65 63 74 6f 72 0a 20 20 20 2a 2f 0a 20  selector.   */. 
d470: 20 66 75 6e 63 74 69 6f 6e 20 71 75 65 72 79 28   function query(
d480: 74 61 67 73 29 20 7b 0a 20 20 20 20 2f 2f 20 73  tags) {.    // s
d490: 65 6c 65 63 74 20 61 6c 6c 20 74 61 67 73 0a 20  elect all tags. 
d4a0: 20 20 20 69 66 20 28 21 74 61 67 73 29 20 7b 0a     if (!tags) {.
d4b0: 20 20 20 20 20 20 76 61 72 20 6b 65 79 73 20 3d        var keys =
d4c0: 20 4f 62 6a 65 63 74 2e 6b 65 79 73 28 5f 5f 54   Object.keys(__T
d4d0: 41 47 5f 49 4d 50 4c 29 3b 0a 20 20 20 20 20 20  AG_IMPL);.      
d4e0: 72 65 74 75 72 6e 20 6b 65 79 73 20 2b 20 71 75  return keys + qu
d4f0: 65 72 79 28 6b 65 79 73 29 0a 20 20 20 20 7d 0a  ery(keys).    }.
d500: 0a 20 20 20 20 72 65 74 75 72 6e 20 74 61 67 73  .    return tags
d510: 0a 20 20 20 20 20 20 2e 66 69 6c 74 65 72 28 66  .      .filter(f
d520: 75 6e 63 74 69 6f 6e 20 28 74 29 20 7b 20 72 65  unction (t) { re
d530: 74 75 72 6e 20 21 2f 5b 5e 2d 5c 77 5d 2f 2e 74  turn !/[^-\w]/.t
d540: 65 73 74 28 74 29 3b 20 7d 29 0a 20 20 20 20 20  est(t); }).     
d550: 20 2e 72 65 64 75 63 65 28 66 75 6e 63 74 69 6f   .reduce(functio
d560: 6e 20 28 6c 69 73 74 2c 20 74 29 20 7b 0a 20 20  n (list, t) {.  
d570: 20 20 20 20 20 20 76 61 72 20 6e 61 6d 65 20 3d        var name =
d580: 20 74 2e 74 72 69 6d 28 29 2e 74 6f 4c 6f 77 65   t.trim().toLowe
d590: 72 43 61 73 65 28 29 3b 0a 20 20 20 20 20 20 20  rCase();.       
d5a0: 20 72 65 74 75 72 6e 20 6c 69 73 74 20 2b 20 22   return list + "
d5b0: 2c 5b 22 20 2b 20 49 53 5f 44 49 52 45 43 54 49  ,[" + IS_DIRECTI
d5c0: 56 45 20 2b 20 22 3d 5c 22 22 20 2b 20 6e 61 6d  VE + "=\"" + nam
d5d0: 65 20 2b 20 22 5c 22 5d 22 0a 20 20 20 20 20 20  e + "\"]".      
d5e0: 7d 2c 20 27 27 29 0a 20 20 7d 0a 0a 20 20 2f 2a  }, '').  }..  /*
d5f0: 2a 0a 20 20 20 2a 20 41 6e 6f 74 68 65 72 20 77  *.   * Another w
d600: 61 79 20 74 6f 20 63 72 65 61 74 65 20 61 20 72  ay to create a r
d610: 69 6f 74 20 74 61 67 20 61 20 62 69 74 20 6d 6f  iot tag a bit mo
d620: 72 65 20 65 73 36 20 66 72 69 65 6e 64 6c 79 0a  re es6 friendly.
d630: 20 20 20 2a 20 40 70 61 72 61 6d 20 7b 20 48 54     * @param { HT
d640: 4d 4c 45 6c 65 6d 65 6e 74 20 7d 20 65 6c 20 2d  MLElement } el -
d650: 20 74 61 67 20 44 4f 4d 20 73 65 6c 65 63 74 6f   tag DOM selecto
d660: 72 20 6f 72 20 44 4f 4d 20 6e 6f 64 65 2f 73 0a  r or DOM node/s.
d670: 20 20 20 2a 20 40 70 61 72 61 6d 20 7b 20 4f 62     * @param { Ob
d680: 6a 65 63 74 20 7d 20 6f 70 74 73 20 2d 20 74 61  ject } opts - ta
d690: 67 20 6c 6f 67 69 63 0a 20 20 20 2a 20 40 72 65  g logic.   * @re
d6a0: 74 75 72 6e 73 20 7b 20 54 61 67 20 7d 20 6e 65  turns { Tag } ne
d6b0: 77 20 72 69 6f 74 20 74 61 67 20 69 6e 73 74 61  w riot tag insta
d6c0: 6e 63 65 0a 20 20 20 2a 2f 0a 20 20 66 75 6e 63  nce.   */.  func
d6d0: 74 69 6f 6e 20 54 61 67 28 65 6c 2c 20 6f 70 74  tion Tag(el, opt
d6e0: 73 29 20 7b 0a 20 20 20 20 2f 2f 20 67 65 74 20  s) {.    // get 
d6f0: 74 68 65 20 74 61 67 20 70 72 6f 70 65 72 74 69  the tag properti
d700: 65 73 20 66 72 6f 6d 20 74 68 65 20 63 6c 61 73  es from the clas
d710: 73 20 63 6f 6e 73 74 72 75 63 74 6f 72 0a 20 20  s constructor.  
d720: 20 20 76 61 72 20 72 65 66 20 3d 20 74 68 69 73    var ref = this
d730: 3b 0a 20 20 20 20 76 61 72 20 6e 61 6d 65 20 3d  ;.    var name =
d740: 20 72 65 66 2e 6e 61 6d 65 3b 0a 20 20 20 20 76   ref.name;.    v
d750: 61 72 20 74 6d 70 6c 20 3d 20 72 65 66 2e 74 6d  ar tmpl = ref.tm
d760: 70 6c 3b 0a 20 20 20 20 76 61 72 20 63 73 73 20  pl;.    var css 
d770: 3d 20 72 65 66 2e 63 73 73 3b 0a 20 20 20 20 76  = ref.css;.    v
d780: 61 72 20 61 74 74 72 73 20 3d 20 72 65 66 2e 61  ar attrs = ref.a
d790: 74 74 72 73 3b 0a 20 20 20 20 76 61 72 20 6f 6e  ttrs;.    var on
d7a0: 43 72 65 61 74 65 20 3d 20 72 65 66 2e 6f 6e 43  Create = ref.onC
d7b0: 72 65 61 74 65 3b 0a 20 20 20 20 2f 2f 20 72 65  reate;.    // re
d7c0: 67 69 73 74 65 72 20 61 20 6e 65 77 20 74 61 67  gister a new tag
d7d0: 20 61 6e 64 20 63 61 63 68 65 20 74 68 65 20 63   and cache the c
d7e0: 6c 61 73 73 20 70 72 6f 74 6f 74 79 70 65 0a 20  lass prototype. 
d7f0: 20 20 20 69 66 20 28 21 5f 5f 54 41 47 5f 49 4d     if (!__TAG_IM
d800: 50 4c 5b 6e 61 6d 65 5d 29 20 7b 0a 20 20 20 20  PL[name]) {.    
d810: 20 20 74 61 67 28 6e 61 6d 65 2c 20 74 6d 70 6c    tag(name, tmpl
d820: 2c 20 63 73 73 2c 20 61 74 74 72 73 2c 20 6f 6e  , css, attrs, on
d830: 43 72 65 61 74 65 29 3b 0a 20 20 20 20 20 20 2f  Create);.      /
d840: 2f 20 63 61 63 68 65 20 74 68 65 20 63 6c 61 73  / cache the clas
d850: 73 20 63 6f 6e 73 74 72 75 63 74 6f 72 0a 20 20  s constructor.  
d860: 20 20 20 20 5f 5f 54 41 47 5f 49 4d 50 4c 5b 6e      __TAG_IMPL[n
d870: 61 6d 65 5d 2e 63 6c 61 73 73 20 3d 20 74 68 69  ame].class = thi
d880: 73 2e 63 6f 6e 73 74 72 75 63 74 6f 72 3b 0a 20  s.constructor;. 
d890: 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 20 6d 6f 75     }..    // mou
d8a0: 6e 74 20 74 68 65 20 74 61 67 20 75 73 69 6e 67  nt the tag using
d8b0: 20 74 68 65 20 63 6c 61 73 73 20 69 6e 73 74 61   the class insta
d8c0: 6e 63 65 0a 20 20 20 20 6d 6f 75 6e 74 24 31 28  nce.    mount$1(
d8d0: 65 6c 2c 20 6e 61 6d 65 2c 20 6f 70 74 73 2c 20  el, name, opts, 
d8e0: 74 68 69 73 29 3b 0a 20 20 20 20 2f 2f 20 69 6e  this);.    // in
d8f0: 6a 65 63 74 20 74 68 65 20 63 6f 6d 70 6f 6e 65  ject the compone
d900: 6e 74 20 63 73 73 0a 20 20 20 20 69 66 20 28 63  nt css.    if (c
d910: 73 73 29 20 7b 20 73 74 79 6c 65 4d 61 6e 61 67  ss) { styleManag
d920: 65 72 2e 69 6e 6a 65 63 74 28 29 3b 20 7d 0a 0a  er.inject(); }..
d930: 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 0a      return this.
d940: 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20    }..  /**.   * 
d950: 43 72 65 61 74 65 20 61 20 6e 65 77 20 72 69 6f  Create a new rio
d960: 74 20 74 61 67 20 69 6d 70 6c 65 6d 65 6e 74 61  t tag implementa
d970: 74 69 6f 6e 0a 20 20 20 2a 20 40 70 61 72 61 6d  tion.   * @param
d980: 20 20 20 7b 20 53 74 72 69 6e 67 20 7d 20 20 20     { String }   
d990: 6e 61 6d 65 20 2d 20 6e 61 6d 65 2f 69 64 20 6f  name - name/id o
d9a0: 66 20 74 68 65 20 6e 65 77 20 72 69 6f 74 20 74  f the new riot t
d9b0: 61 67 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20  ag.   * @param  
d9c0: 20 7b 20 53 74 72 69 6e 67 20 7d 20 20 20 74 6d   { String }   tm
d9d0: 70 6c 20 2d 20 74 61 67 20 74 65 6d 70 6c 61 74  pl - tag templat
d9e0: 65 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20  e.   * @param   
d9f0: 7b 20 53 74 72 69 6e 67 20 7d 20 20 20 63 73 73  { String }   css
da00: 20 2d 20 63 75 73 74 6f 6d 20 74 61 67 20 63 73   - custom tag cs
da10: 73 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20  s.   * @param   
da20: 7b 20 53 74 72 69 6e 67 20 7d 20 20 20 61 74 74  { String }   att
da30: 72 73 20 2d 20 72 6f 6f 74 20 74 61 67 20 61 74  rs - root tag at
da40: 74 72 69 62 75 74 65 73 0a 20 20 20 2a 20 40 70  tributes.   * @p
da50: 61 72 61 6d 20 20 20 7b 20 46 75 6e 63 74 69 6f  aram   { Functio
da60: 6e 20 7d 20 66 6e 20 2d 20 75 73 65 72 20 66 75  n } fn - user fu
da70: 6e 63 74 69 6f 6e 0a 20 20 20 2a 20 40 72 65 74  nction.   * @ret
da80: 75 72 6e 73 20 7b 20 53 74 72 69 6e 67 20 7d 20  urns { String } 
da90: 6e 61 6d 65 2f 69 64 20 6f 66 20 74 68 65 20 74  name/id of the t
daa0: 61 67 20 6a 75 73 74 20 63 72 65 61 74 65 64 0a  ag just created.
dab0: 20 20 20 2a 2f 0a 20 20 66 75 6e 63 74 69 6f 6e     */.  function
dac0: 20 74 61 67 28 6e 61 6d 65 2c 20 74 6d 70 6c 2c   tag(name, tmpl,
dad0: 20 63 73 73 2c 20 61 74 74 72 73 2c 20 66 6e 29   css, attrs, fn)
dae0: 20 7b 0a 20 20 20 20 69 66 20 28 69 73 46 75 6e   {.    if (isFun
daf0: 63 74 69 6f 6e 28 61 74 74 72 73 29 29 20 7b 0a  ction(attrs)) {.
db00: 20 20 20 20 20 20 66 6e 20 3d 20 61 74 74 72 73        fn = attrs
db10: 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 2f 5e 5b  ;..      if (/^[
db20: 5c 77 2d 5d 2b 5c 73 3f 3d 2f 2e 74 65 73 74 28  \w-]+\s?=/.test(
db30: 63 73 73 29 29 20 7b 0a 20 20 20 20 20 20 20 20  css)) {.        
db40: 61 74 74 72 73 20 3d 20 63 73 73 3b 0a 20 20 20  attrs = css;.   
db50: 20 20 20 20 20 63 73 73 20 3d 20 27 27 3b 0a 20       css = '';. 
db60: 20 20 20 20 20 7d 20 65 6c 73 65 0a 20 20 20 20       } else.    
db70: 20 20 20 20 7b 20 61 74 74 72 73 20 3d 20 27 27      { attrs = ''
db80: 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  ; }.    }..    i
db90: 66 20 28 63 73 73 29 20 7b 0a 20 20 20 20 20 20  f (css) {.      
dba0: 69 66 20 28 69 73 46 75 6e 63 74 69 6f 6e 28 63  if (isFunction(c
dbb0: 73 73 29 29 0a 20 20 20 20 20 20 20 20 7b 20 66  ss)).        { f
dbc0: 6e 20 3d 20 63 73 73 3b 20 7d 0a 20 20 20 20 20  n = css; }.     
dbd0: 20 65 6c 73 65 0a 20 20 20 20 20 20 20 20 7b 20   else.        { 
dbe0: 73 74 79 6c 65 4d 61 6e 61 67 65 72 2e 61 64 64  styleManager.add
dbf0: 28 63 73 73 2c 20 6e 61 6d 65 29 3b 20 7d 0a 20  (css, name); }. 
dc00: 20 20 20 7d 0a 0a 20 20 20 20 6e 61 6d 65 20 3d     }..    name =
dc10: 20 6e 61 6d 65 2e 74 6f 4c 6f 77 65 72 43 61 73   name.toLowerCas
dc20: 65 28 29 3b 0a 20 20 20 20 5f 5f 54 41 47 5f 49  e();.    __TAG_I
dc30: 4d 50 4c 5b 6e 61 6d 65 5d 20 3d 20 7b 20 6e 61  MPL[name] = { na
dc40: 6d 65 3a 20 6e 61 6d 65 2c 20 74 6d 70 6c 3a 20  me: name, tmpl: 
dc50: 74 6d 70 6c 2c 20 61 74 74 72 73 3a 20 61 74 74  tmpl, attrs: att
dc60: 72 73 2c 20 66 6e 3a 20 66 6e 20 7d 3b 0a 0a 20  rs, fn: fn };.. 
dc70: 20 20 20 72 65 74 75 72 6e 20 6e 61 6d 65 0a 20     return name. 
dc80: 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 43   }..  /**.   * C
dc90: 72 65 61 74 65 20 61 20 6e 65 77 20 72 69 6f 74  reate a new riot
dca0: 20 74 61 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74   tag implementat
dcb0: 69 6f 6e 20 28 66 6f 72 20 75 73 65 20 62 79 20  ion (for use by 
dcc0: 74 68 65 20 63 6f 6d 70 69 6c 65 72 29 0a 20 20  the compiler).  
dcd0: 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 53 74   * @param   { St
dce0: 72 69 6e 67 20 7d 20 20 20 6e 61 6d 65 20 2d 20  ring }   name - 
dcf0: 6e 61 6d 65 2f 69 64 20 6f 66 20 74 68 65 20 6e  name/id of the n
dd00: 65 77 20 72 69 6f 74 20 74 61 67 0a 20 20 20 2a  ew riot tag.   *
dd10: 20 40 70 61 72 61 6d 20 20 20 7b 20 53 74 72 69   @param   { Stri
dd20: 6e 67 20 7d 20 20 20 74 6d 70 6c 20 2d 20 74 61  ng }   tmpl - ta
dd30: 67 20 74 65 6d 70 6c 61 74 65 0a 20 20 20 2a 20  g template.   * 
dd40: 40 70 61 72 61 6d 20 20 20 7b 20 53 74 72 69 6e  @param   { Strin
dd50: 67 20 7d 20 20 20 63 73 73 20 2d 20 63 75 73 74  g }   css - cust
dd60: 6f 6d 20 74 61 67 20 63 73 73 0a 20 20 20 2a 20  om tag css.   * 
dd70: 40 70 61 72 61 6d 20 20 20 7b 20 53 74 72 69 6e  @param   { Strin
dd80: 67 20 7d 20 20 20 61 74 74 72 73 20 2d 20 72 6f  g }   attrs - ro
dd90: 6f 74 20 74 61 67 20 61 74 74 72 69 62 75 74 65  ot tag attribute
dda0: 73 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20  s.   * @param   
ddb0: 7b 20 46 75 6e 63 74 69 6f 6e 20 7d 20 66 6e 20  { Function } fn 
ddc0: 2d 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a  - user function.
ddd0: 20 20 20 2a 20 40 72 65 74 75 72 6e 73 20 7b 20     * @returns { 
dde0: 53 74 72 69 6e 67 20 7d 20 6e 61 6d 65 2f 69 64  String } name/id
ddf0: 20 6f 66 20 74 68 65 20 74 61 67 20 6a 75 73 74   of the tag just
de00: 20 63 72 65 61 74 65 64 0a 20 20 20 2a 2f 0a 20   created.   */. 
de10: 20 66 75 6e 63 74 69 6f 6e 20 74 61 67 32 28 6e   function tag2(n
de20: 61 6d 65 2c 20 74 6d 70 6c 2c 20 63 73 73 2c 20  ame, tmpl, css, 
de30: 61 74 74 72 73 2c 20 66 6e 29 20 7b 0a 20 20 20  attrs, fn) {.   
de40: 20 69 66 20 28 63 73 73 29 20 7b 20 73 74 79 6c   if (css) { styl
de50: 65 4d 61 6e 61 67 65 72 2e 61 64 64 28 63 73 73  eManager.add(css
de60: 2c 20 6e 61 6d 65 29 3b 20 7d 0a 0a 20 20 20 20  , name); }..    
de70: 5f 5f 54 41 47 5f 49 4d 50 4c 5b 6e 61 6d 65 5d  __TAG_IMPL[name]
de80: 20 3d 20 7b 20 6e 61 6d 65 3a 20 6e 61 6d 65 2c   = { name: name,
de90: 20 74 6d 70 6c 3a 20 74 6d 70 6c 2c 20 61 74 74   tmpl: tmpl, att
dea0: 72 73 3a 20 61 74 74 72 73 2c 20 66 6e 3a 20 66  rs: attrs, fn: f
deb0: 6e 20 7d 3b 0a 0a 20 20 20 20 72 65 74 75 72 6e  n };..    return
dec0: 20 6e 61 6d 65 0a 20 20 7d 0a 0a 20 20 2f 2a 2a   name.  }..  /**
ded0: 0a 20 20 20 2a 20 4d 6f 75 6e 74 20 61 20 74 61  .   * Mount a ta
dee0: 67 20 75 73 69 6e 67 20 61 20 73 70 65 63 69 66  g using a specif
def0: 69 63 20 74 61 67 20 69 6d 70 6c 65 6d 65 6e 74  ic tag implement
df00: 61 74 69 6f 6e 0a 20 20 20 2a 20 40 70 61 72 61  ation.   * @para
df10: 6d 20 20 20 7b 20 2a 20 7d 20 73 65 6c 65 63 74  m   { * } select
df20: 6f 72 20 2d 20 74 61 67 20 44 4f 4d 20 73 65 6c  or - tag DOM sel
df30: 65 63 74 6f 72 20 6f 72 20 44 4f 4d 20 6e 6f 64  ector or DOM nod
df40: 65 2f 73 0a 20 20 20 2a 20 40 70 61 72 61 6d 20  e/s.   * @param 
df50: 20 20 7b 20 53 74 72 69 6e 67 20 7d 20 74 61 67    { String } tag
df60: 4e 61 6d 65 20 2d 20 74 61 67 20 69 6d 70 6c 65  Name - tag imple
df70: 6d 65 6e 74 61 74 69 6f 6e 20 6e 61 6d 65 0a 20  mentation name. 
df80: 20 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 4f    * @param   { O
df90: 62 6a 65 63 74 20 7d 20 6f 70 74 73 20 2d 20 74  bject } opts - t
dfa0: 61 67 20 6c 6f 67 69 63 0a 20 20 20 2a 20 40 72  ag logic.   * @r
dfb0: 65 74 75 72 6e 73 20 7b 20 41 72 72 61 79 20 7d  eturns { Array }
dfc0: 20 6e 65 77 20 74 61 67 73 20 69 6e 73 74 61 6e   new tags instan
dfd0: 63 65 73 0a 20 20 20 2a 2f 0a 20 20 66 75 6e 63  ces.   */.  func
dfe0: 74 69 6f 6e 20 6d 6f 75 6e 74 28 73 65 6c 65 63  tion mount(selec
dff0: 74 6f 72 2c 20 74 61 67 4e 61 6d 65 2c 20 6f 70  tor, tagName, op
e000: 74 73 29 20 7b 0a 20 20 20 20 76 61 72 20 74 61  ts) {.    var ta
e010: 67 73 20 3d 20 5b 5d 3b 0a 20 20 20 20 76 61 72  gs = [];.    var
e020: 20 65 6c 65 6d 2c 20 61 6c 6c 54 61 67 73 3b 0a   elem, allTags;.
e030: 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 70 75  .    function pu
e040: 73 68 54 61 67 73 54 6f 28 72 6f 6f 74 29 20 7b  shTagsTo(root) {
e050: 0a 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 2e  .      if (root.
e060: 74 61 67 4e 61 6d 65 29 20 7b 0a 20 20 20 20 20  tagName) {.     
e070: 20 20 20 76 61 72 20 72 69 6f 74 54 61 67 20 3d     var riotTag =
e080: 20 67 65 74 41 74 74 72 69 62 75 74 65 28 72 6f   getAttribute(ro
e090: 6f 74 2c 20 49 53 5f 44 49 52 45 43 54 49 56 45  ot, IS_DIRECTIVE
e0a0: 29 2c 20 74 61 67 3b 0a 0a 20 20 20 20 20 20 20  ), tag;..       
e0b0: 20 2f 2f 20 68 61 76 65 20 74 61 67 4e 61 6d 65   // have tagName
e0c0: 3f 20 66 6f 72 63 65 20 72 69 6f 74 2d 74 61 67  ? force riot-tag
e0d0: 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d 65 0a   to be the same.
e0e0: 20 20 20 20 20 20 20 20 69 66 20 28 74 61 67 4e          if (tagN
e0f0: 61 6d 65 20 26 26 20 72 69 6f 74 54 61 67 20 21  ame && riotTag !
e100: 3d 3d 20 74 61 67 4e 61 6d 65 29 20 7b 0a 20 20  == tagName) {.  
e110: 20 20 20 20 20 20 20 20 72 69 6f 74 54 61 67 20          riotTag 
e120: 3d 20 74 61 67 4e 61 6d 65 3b 0a 20 20 20 20 20  = tagName;.     
e130: 20 20 20 20 20 73 65 74 41 74 74 72 69 62 75 74       setAttribut
e140: 65 28 72 6f 6f 74 2c 20 49 53 5f 44 49 52 45 43  e(root, IS_DIREC
e150: 54 49 56 45 2c 20 74 61 67 4e 61 6d 65 29 3b 0a  TIVE, tagName);.
e160: 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
e170: 20 20 20 74 61 67 20 3d 20 6d 6f 75 6e 74 24 31     tag = mount$1
e180: 28 0a 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74  (.          root
e190: 2c 0a 20 20 20 20 20 20 20 20 20 20 72 69 6f 74  ,.          riot
e1a0: 54 61 67 20 7c 7c 20 72 6f 6f 74 2e 74 61 67 4e  Tag || root.tagN
e1b0: 61 6d 65 2e 74 6f 4c 6f 77 65 72 43 61 73 65 28  ame.toLowerCase(
e1c0: 29 2c 0a 20 20 20 20 20 20 20 20 20 20 69 73 46  ),.          isF
e1d0: 75 6e 63 74 69 6f 6e 28 6f 70 74 73 29 20 3f 20  unction(opts) ? 
e1e0: 6f 70 74 73 28 29 20 3a 20 6f 70 74 73 0a 20 20  opts() : opts.  
e1f0: 20 20 20 20 20 20 29 3b 0a 0a 20 20 20 20 20 20        );..      
e200: 20 20 69 66 20 28 74 61 67 29 0a 20 20 20 20 20    if (tag).     
e210: 20 20 20 20 20 7b 20 74 61 67 73 2e 70 75 73 68       { tags.push
e220: 28 74 61 67 29 3b 20 7d 0a 20 20 20 20 20 20 7d  (tag); }.      }
e230: 20 65 6c 73 65 20 69 66 20 28 72 6f 6f 74 2e 6c   else if (root.l
e240: 65 6e 67 74 68 29 0a 20 20 20 20 20 20 20 20 7b  ength).        {
e250: 20 65 61 63 68 28 72 6f 6f 74 2c 20 70 75 73 68   each(root, push
e260: 54 61 67 73 54 6f 29 3b 20 7d 20 2f 2f 20 61 73  TagsTo); } // as
e270: 73 75 6d 65 20 6e 6f 64 65 4c 69 73 74 0a 20 20  sume nodeList.  
e280: 20 20 7d 0a 0a 20 20 20 20 2f 2f 20 69 6e 6a 65    }..    // inje
e290: 63 74 20 73 74 79 6c 65 73 20 69 6e 74 6f 20 44  ct styles into D
e2a0: 4f 4d 0a 20 20 20 20 73 74 79 6c 65 4d 61 6e 61  OM.    styleMana
e2b0: 67 65 72 2e 69 6e 6a 65 63 74 28 29 3b 0a 0a 20  ger.inject();.. 
e2c0: 20 20 20 69 66 20 28 69 73 4f 62 6a 65 63 74 28     if (isObject(
e2d0: 74 61 67 4e 61 6d 65 29 20 7c 7c 20 69 73 46 75  tagName) || isFu
e2e0: 6e 63 74 69 6f 6e 28 74 61 67 4e 61 6d 65 29 29  nction(tagName))
e2f0: 20 7b 0a 20 20 20 20 20 20 6f 70 74 73 20 3d 20   {.      opts = 
e300: 74 61 67 4e 61 6d 65 3b 0a 20 20 20 20 20 20 74  tagName;.      t
e310: 61 67 4e 61 6d 65 20 3d 20 30 3b 0a 20 20 20 20  agName = 0;.    
e320: 7d 0a 0a 20 20 20 20 2f 2f 20 63 72 61 77 6c 20  }..    // crawl 
e330: 74 68 65 20 44 4f 4d 20 74 6f 20 66 69 6e 64 20  the DOM to find 
e340: 74 68 65 20 74 61 67 0a 20 20 20 20 69 66 20 28  the tag.    if (
e350: 69 73 53 74 72 69 6e 67 28 73 65 6c 65 63 74 6f  isString(selecto
e360: 72 29 29 20 7b 0a 20 20 20 20 20 20 73 65 6c 65  r)) {.      sele
e370: 63 74 6f 72 20 3d 20 73 65 6c 65 63 74 6f 72 20  ctor = selector 
e380: 3d 3d 3d 20 27 2a 27 20 3f 0a 20 20 20 20 20 20  === '*' ?.      
e390: 20 20 2f 2f 20 73 65 6c 65 63 74 20 61 6c 6c 20    // select all 
e3a0: 72 65 67 69 73 74 65 72 65 64 20 74 61 67 73 0a  registered tags.
e3b0: 20 20 20 20 20 20 20 20 2f 2f 20 26 20 74 61 67          // & tag
e3c0: 73 20 66 6f 75 6e 64 20 77 69 74 68 20 74 68 65  s found with the
e3d0: 20 72 69 6f 74 2d 74 61 67 20 61 74 74 72 69 62   riot-tag attrib
e3e0: 75 74 65 20 73 65 74 0a 20 20 20 20 20 20 20 20  ute set.        
e3f0: 61 6c 6c 54 61 67 73 20 3d 20 71 75 65 72 79 28  allTags = query(
e400: 29 20 3a 0a 20 20 20 20 20 20 20 20 2f 2f 20 6f  ) :.        // o
e410: 72 20 6a 75 73 74 20 74 68 65 20 6f 6e 65 73 20  r just the ones 
e420: 6e 61 6d 65 64 20 6c 69 6b 65 20 74 68 65 20 73  named like the s
e430: 65 6c 65 63 74 6f 72 0a 20 20 20 20 20 20 20 20  elector.        
e440: 73 65 6c 65 63 74 6f 72 20 2b 20 71 75 65 72 79  selector + query
e450: 28 73 65 6c 65 63 74 6f 72 2e 73 70 6c 69 74 28  (selector.split(
e460: 2f 2c 20 2a 2f 29 29 3b 0a 0a 20 20 20 20 20 20  /, */));..      
e470: 2f 2f 20 6d 61 6b 65 20 73 75 72 65 20 74 6f 20  // make sure to 
e480: 70 61 73 73 20 61 6c 77 61 79 73 20 61 20 73 65  pass always a se
e490: 6c 65 63 74 6f 72 0a 20 20 20 20 20 20 2f 2f 20  lector.      // 
e4a0: 74 6f 20 74 68 65 20 71 75 65 72 79 53 65 6c 65  to the querySele
e4b0: 63 74 6f 72 41 6c 6c 20 66 75 6e 63 74 69 6f 6e  ctorAll function
e4c0: 0a 20 20 20 20 20 20 65 6c 65 6d 20 3d 20 73 65  .      elem = se
e4d0: 6c 65 63 74 6f 72 20 3f 20 24 24 28 73 65 6c 65  lector ? $$(sele
e4e0: 63 74 6f 72 29 20 3a 20 5b 5d 3b 0a 20 20 20 20  ctor) : [];.    
e4f0: 7d 0a 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20  }.    else.     
e500: 20 2f 2f 20 70 72 6f 62 61 62 6c 79 20 79 6f 75   // probably you
e510: 20 68 61 76 65 20 70 61 73 73 65 64 20 61 6c 72   have passed alr
e520: 65 61 64 79 20 61 20 74 61 67 20 6f 72 20 61 20  eady a tag or a 
e530: 4e 6f 64 65 4c 69 73 74 0a 20 20 20 20 20 20 7b  NodeList.      {
e540: 20 65 6c 65 6d 20 3d 20 73 65 6c 65 63 74 6f 72   elem = selector
e550: 3b 20 7d 0a 0a 20 20 20 20 2f 2f 20 73 65 6c 65  ; }..    // sele
e560: 63 74 20 61 6c 6c 20 74 68 65 20 72 65 67 69 73  ct all the regis
e570: 74 65 72 65 64 20 61 6e 64 20 6d 6f 75 6e 74 20  tered and mount 
e580: 74 68 65 6d 20 69 6e 73 69 64 65 20 74 68 65 69  them inside thei
e590: 72 20 72 6f 6f 74 20 65 6c 65 6d 65 6e 74 73 0a  r root elements.
e5a0: 20 20 20 20 69 66 20 28 74 61 67 4e 61 6d 65 20      if (tagName 
e5b0: 3d 3d 3d 20 27 2a 27 29 20 7b 0a 20 20 20 20 20  === '*') {.     
e5c0: 20 2f 2f 20 67 65 74 20 61 6c 6c 20 63 75 73 74   // get all cust
e5d0: 6f 6d 20 74 61 67 73 0a 20 20 20 20 20 20 74 61  om tags.      ta
e5e0: 67 4e 61 6d 65 20 3d 20 61 6c 6c 54 61 67 73 20  gName = allTags 
e5f0: 7c 7c 20 71 75 65 72 79 28 29 3b 0a 20 20 20 20  || query();.    
e600: 20 20 2f 2f 20 69 66 20 74 68 65 20 72 6f 6f 74    // if the root
e610: 20 65 6c 73 20 69 74 27 73 20 6a 75 73 74 20 61   els it's just a
e620: 20 73 69 6e 67 6c 65 20 74 61 67 0a 20 20 20 20   single tag.    
e630: 20 20 69 66 20 28 65 6c 65 6d 2e 74 61 67 4e 61    if (elem.tagNa
e640: 6d 65 29 0a 20 20 20 20 20 20 20 20 7b 20 65 6c  me).        { el
e650: 65 6d 20 3d 20 24 24 28 74 61 67 4e 61 6d 65 2c  em = $$(tagName,
e660: 20 65 6c 65 6d 29 3b 20 7d 0a 20 20 20 20 20 20   elem); }.      
e670: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 2f  else {.        /
e680: 2f 20 73 65 6c 65 63 74 20 61 6c 6c 20 74 68 65  / select all the
e690: 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61 6c   children for al
e6a0: 6c 20 74 68 65 20 64 69 66 66 65 72 65 6e 74 20  l the different 
e6b0: 72 6f 6f 74 20 65 6c 65 6d 65 6e 74 73 0a 20 20  root elements.  
e6c0: 20 20 20 20 20 20 76 61 72 20 6e 6f 64 65 4c 69        var nodeLi
e6d0: 73 74 20 3d 20 5b 5d 3b 0a 0a 20 20 20 20 20 20  st = [];..      
e6e0: 20 20 65 61 63 68 28 65 6c 65 6d 2c 20 66 75 6e    each(elem, fun
e6f0: 63 74 69 6f 6e 20 28 5f 65 6c 29 20 7b 20 72 65  ction (_el) { re
e700: 74 75 72 6e 20 6e 6f 64 65 4c 69 73 74 2e 70 75  turn nodeList.pu
e710: 73 68 28 24 24 28 74 61 67 4e 61 6d 65 2c 20 5f  sh($$(tagName, _
e720: 65 6c 29 29 3b 20 7d 29 3b 0a 0a 20 20 20 20 20  el)); });..     
e730: 20 20 20 65 6c 65 6d 20 3d 20 6e 6f 64 65 4c 69     elem = nodeLi
e740: 73 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  st;.      }.    
e750: 20 20 2f 2f 20 67 65 74 20 72 69 64 20 6f 66 20    // get rid of 
e760: 74 68 65 20 74 61 67 4e 61 6d 65 0a 20 20 20 20  the tagName.    
e770: 20 20 74 61 67 4e 61 6d 65 20 3d 20 30 3b 0a 20    tagName = 0;. 
e780: 20 20 20 7d 0a 0a 20 20 20 20 70 75 73 68 54 61     }..    pushTa
e790: 67 73 54 6f 28 65 6c 65 6d 29 3b 0a 0a 20 20 20  gsTo(elem);..   
e7a0: 20 72 65 74 75 72 6e 20 74 61 67 73 0a 20 20 7d   return tags.  }
e7b0: 0a 0a 20 20 2f 2f 20 43 72 65 61 74 65 20 61 20  ..  // Create a 
e7c0: 6d 69 78 69 6e 20 74 68 61 74 20 63 6f 75 6c 64  mixin that could
e7d0: 20 62 65 20 67 6c 6f 62 61 6c 6c 79 20 73 68 61   be globally sha
e7e0: 72 65 64 20 61 63 72 6f 73 73 20 61 6c 6c 20 74  red across all t
e7f0: 68 65 20 74 61 67 73 0a 20 20 76 61 72 20 6d 69  he tags.  var mi
e800: 78 69 6e 73 20 3d 20 7b 7d 3b 0a 20 20 76 61 72  xins = {};.  var
e810: 20 67 6c 6f 62 61 6c 73 20 3d 20 6d 69 78 69 6e   globals = mixin
e820: 73 5b 47 4c 4f 42 41 4c 5f 4d 49 58 49 4e 5d 20  s[GLOBAL_MIXIN] 
e830: 3d 20 7b 7d 3b 0a 20 20 76 61 72 20 6d 69 78 69  = {};.  var mixi
e840: 6e 73 5f 69 64 20 3d 20 30 3b 0a 0a 20 20 2f 2a  ns_id = 0;..  /*
e850: 2a 0a 20 20 20 2a 20 43 72 65 61 74 65 2f 52 65  *.   * Create/Re
e860: 74 75 72 6e 20 61 20 6d 69 78 69 6e 20 62 79 20  turn a mixin by 
e870: 69 74 73 20 6e 61 6d 65 0a 20 20 20 2a 20 40 70  its name.   * @p
e880: 61 72 61 6d 20 20 20 7b 20 53 74 72 69 6e 67 20  aram   { String 
e890: 7d 20 20 6e 61 6d 65 20 2d 20 6d 69 78 69 6e 20  }  name - mixin 
e8a0: 6e 61 6d 65 20 28 67 6c 6f 62 61 6c 20 6d 69 78  name (global mix
e8b0: 69 6e 20 69 66 20 6f 62 6a 65 63 74 29 0a 20 20  in if object).  
e8c0: 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 4f 62   * @param   { Ob
e8d0: 6a 65 63 74 20 7d 20 20 6d 69 78 20 2d 20 6d 69  ject }  mix - mi
e8e0: 78 69 6e 20 6c 6f 67 69 63 0a 20 20 20 2a 20 40  xin logic.   * @
e8f0: 70 61 72 61 6d 20 20 20 7b 20 42 6f 6f 6c 65 61  param   { Boolea
e900: 6e 20 7d 20 67 20 2d 20 69 73 20 67 6c 6f 62 61  n } g - is globa
e910: 6c 3f 0a 20 20 20 2a 20 40 72 65 74 75 72 6e 73  l?.   * @returns
e920: 20 7b 20 4f 62 6a 65 63 74 20 7d 20 20 74 68 65   { Object }  the
e930: 20 6d 69 78 69 6e 20 6c 6f 67 69 63 0a 20 20 20   mixin logic.   
e940: 2a 2f 0a 20 20 66 75 6e 63 74 69 6f 6e 20 6d 69  */.  function mi
e950: 78 69 6e 28 6e 61 6d 65 2c 20 6d 69 78 2c 20 67  xin(name, mix, g
e960: 29 20 7b 0a 20 20 20 20 2f 2f 20 55 6e 6e 61 6d  ) {.    // Unnam
e970: 65 64 20 67 6c 6f 62 61 6c 0a 20 20 20 20 69 66  ed global.    if
e980: 20 28 69 73 4f 62 6a 65 63 74 28 6e 61 6d 65 29   (isObject(name)
e990: 29 20 7b 0a 20 20 20 20 20 20 6d 69 78 69 6e 28  ) {.      mixin(
e9a0: 28 22 5f 5f 22 20 2b 20 28 6d 69 78 69 6e 73 5f  ("__" + (mixins_
e9b0: 69 64 2b 2b 29 20 2b 20 22 5f 5f 22 29 2c 20 6e  id++) + "__"), n
e9c0: 61 6d 65 2c 20 74 72 75 65 29 3b 0a 20 20 20 20  ame, true);.    
e9d0: 20 20 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a    return.    }..
e9e0: 20 20 20 20 76 61 72 20 73 74 6f 72 65 20 3d 20      var store = 
e9f0: 67 20 3f 20 67 6c 6f 62 61 6c 73 20 3a 20 6d 69  g ? globals : mi
ea00: 78 69 6e 73 3b 0a 0a 20 20 20 20 2f 2f 20 47 65  xins;..    // Ge
ea10: 74 74 65 72 0a 20 20 20 20 69 66 20 28 21 6d 69  tter.    if (!mi
ea20: 78 29 20 7b 0a 20 20 20 20 20 20 69 66 20 28 69  x) {.      if (i
ea30: 73 55 6e 64 65 66 69 6e 65 64 28 73 74 6f 72 65  sUndefined(store
ea40: 5b 6e 61 6d 65 5d 29 29 0a 20 20 20 20 20 20 20  [name])).       
ea50: 20 7b 20 74 68 72 6f 77 20 6e 65 77 20 45 72 72   { throw new Err
ea60: 6f 72 28 28 22 55 6e 72 65 67 69 73 74 65 72 65  or(("Unregistere
ea70: 64 20 6d 69 78 69 6e 3a 20 22 20 2b 20 6e 61 6d  d mixin: " + nam
ea80: 65 29 29 20 7d 0a 0a 20 20 20 20 20 20 72 65 74  e)) }..      ret
ea90: 75 72 6e 20 73 74 6f 72 65 5b 6e 61 6d 65 5d 0a  urn store[name].
eaa0: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 20 53 65      }..    // Se
eab0: 74 74 65 72 0a 20 20 20 20 73 74 6f 72 65 5b 6e  tter.    store[n
eac0: 61 6d 65 5d 20 3d 20 69 73 46 75 6e 63 74 69 6f  ame] = isFunctio
ead0: 6e 28 6d 69 78 29 20 3f 0a 20 20 20 20 20 20 65  n(mix) ?.      e
eae0: 78 74 65 6e 64 28 6d 69 78 2e 70 72 6f 74 6f 74  xtend(mix.protot
eaf0: 79 70 65 2c 20 73 74 6f 72 65 5b 6e 61 6d 65 5d  ype, store[name]
eb00: 20 7c 7c 20 7b 7d 29 20 26 26 20 6d 69 78 20 3a   || {}) && mix :
eb10: 0a 20 20 20 20 20 20 65 78 74 65 6e 64 28 73 74  .      extend(st
eb20: 6f 72 65 5b 6e 61 6d 65 5d 20 7c 7c 20 7b 7d 2c  ore[name] || {},
eb30: 20 6d 69 78 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a   mix);.  }..  /*
eb40: 2a 0a 20 20 20 2a 20 55 70 64 61 74 65 20 61 6c  *.   * Update al
eb50: 6c 20 74 68 65 20 74 61 67 73 20 69 6e 73 74 61  l the tags insta
eb60: 6e 63 65 73 20 63 72 65 61 74 65 64 0a 20 20 20  nces created.   
eb70: 2a 20 40 72 65 74 75 72 6e 73 20 7b 20 41 72 72  * @returns { Arr
eb80: 61 79 20 7d 20 61 6c 6c 20 74 68 65 20 74 61 67  ay } all the tag
eb90: 73 20 69 6e 73 74 61 6e 63 65 73 0a 20 20 20 2a  s instances.   *
eba0: 2f 0a 20 20 66 75 6e 63 74 69 6f 6e 20 75 70 64  /.  function upd
ebb0: 61 74 65 24 31 28 29 20 7b 0a 20 20 20 20 72 65  ate$1() {.    re
ebc0: 74 75 72 6e 20 65 61 63 68 28 5f 5f 54 41 47 53  turn each(__TAGS
ebd0: 5f 43 41 43 48 45 2c 20 66 75 6e 63 74 69 6f 6e  _CACHE, function
ebe0: 20 28 74 61 67 29 20 7b 20 72 65 74 75 72 6e 20   (tag) { return 
ebf0: 74 61 67 2e 75 70 64 61 74 65 28 29 3b 20 7d 29  tag.update(); })
ec00: 0a 20 20 7d 0a 0a 20 20 66 75 6e 63 74 69 6f 6e  .  }..  function
ec10: 20 75 6e 72 65 67 69 73 74 65 72 28 6e 61 6d 65   unregister(name
ec20: 29 20 7b 0a 20 20 20 20 73 74 79 6c 65 4d 61 6e  ) {.    styleMan
ec30: 61 67 65 72 2e 72 65 6d 6f 76 65 28 6e 61 6d 65  ager.remove(name
ec40: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 64 65  );.    return de
ec50: 6c 65 74 65 20 5f 5f 54 41 47 5f 49 4d 50 4c 5b  lete __TAG_IMPL[
ec60: 6e 61 6d 65 5d 0a 20 20 7d 0a 0a 20 20 76 61 72  name].  }..  var
ec70: 20 76 65 72 73 69 6f 6e 20 3d 20 27 76 33 2e 31   version = 'v3.1
ec80: 33 2e 32 27 3b 0a 0a 20 20 76 61 72 20 63 6f 72  3.2';..  var cor
ec90: 65 20 3d 20 2f 2a 23 5f 5f 50 55 52 45 5f 5f 2a  e = /*#__PURE__*
eca0: 2f 4f 62 6a 65 63 74 2e 66 72 65 65 7a 65 28 7b  /Object.freeze({
ecb0: 0a 20 20 20 20 54 61 67 3a 20 54 61 67 2c 0a 20  .    Tag: Tag,. 
ecc0: 20 20 20 74 61 67 3a 20 74 61 67 2c 0a 20 20 20     tag: tag,.   
ecd0: 20 74 61 67 32 3a 20 74 61 67 32 2c 0a 20 20 20   tag2: tag2,.   
ece0: 20 6d 6f 75 6e 74 3a 20 6d 6f 75 6e 74 2c 0a 20   mount: mount,. 
ecf0: 20 20 20 6d 69 78 69 6e 3a 20 6d 69 78 69 6e 2c     mixin: mixin,
ed00: 0a 20 20 20 20 75 70 64 61 74 65 3a 20 75 70 64  .    update: upd
ed10: 61 74 65 24 31 2c 0a 20 20 20 20 75 6e 72 65 67  ate$1,.    unreg
ed20: 69 73 74 65 72 3a 20 75 6e 72 65 67 69 73 74 65  ister: unregiste
ed30: 72 2c 0a 20 20 20 20 76 65 72 73 69 6f 6e 3a 20  r,.    version: 
ed40: 76 65 72 73 69 6f 6e 0a 20 20 7d 29 3b 0a 0a 20  version.  });.. 
ed50: 20 2f 2a 2a 0a 20 20 20 2a 20 41 64 64 20 61 20   /**.   * Add a 
ed60: 6d 69 78 69 6e 20 74 6f 20 74 68 69 73 20 74 61  mixin to this ta
ed70: 67 0a 20 20 20 2a 20 40 72 65 74 75 72 6e 73 20  g.   * @returns 
ed80: 7b 20 54 61 67 20 7d 20 74 68 65 20 63 75 72 72  { Tag } the curr
ed90: 65 6e 74 20 74 61 67 20 69 6e 73 74 61 6e 63 65  ent tag instance
eda0: 0a 20 20 20 2a 2f 0a 20 20 66 75 6e 63 74 69 6f  .   */.  functio
edb0: 6e 20 63 6f 6d 70 6f 6e 65 6e 74 4d 69 78 69 6e  n componentMixin
edc0: 28 74 61 67 24 24 31 29 20 7b 0a 20 20 20 20 76  (tag$$1) {.    v
edd0: 61 72 20 6d 69 78 69 6e 73 20 3d 20 5b 5d 2c 20  ar mixins = [], 
ede0: 6c 65 6e 20 3d 20 61 72 67 75 6d 65 6e 74 73 2e  len = arguments.
edf0: 6c 65 6e 67 74 68 20 2d 20 31 3b 0a 20 20 20 20  length - 1;.    
ee00: 77 68 69 6c 65 20 28 20 6c 65 6e 2d 2d 20 3e 20  while ( len-- > 
ee10: 30 20 29 20 6d 69 78 69 6e 73 5b 20 6c 65 6e 20  0 ) mixins[ len 
ee20: 5d 20 3d 20 61 72 67 75 6d 65 6e 74 73 5b 20 6c  ] = arguments[ l
ee30: 65 6e 20 2b 20 31 20 5d 3b 0a 0a 20 20 20 20 65  en + 1 ];..    e
ee40: 61 63 68 28 6d 69 78 69 6e 73 2c 20 66 75 6e 63  ach(mixins, func
ee50: 74 69 6f 6e 20 28 6d 69 78 29 20 7b 0a 20 20 20  tion (mix) {.   
ee60: 20 20 20 76 61 72 20 69 6e 73 74 61 6e 63 65 3b     var instance;
ee70: 0a 20 20 20 20 20 20 76 61 72 20 6f 62 6a 3b 0a  .      var obj;.
ee80: 20 20 20 20 20 20 76 61 72 20 70 72 6f 70 73 20        var props 
ee90: 3d 20 5b 5d 3b 0a 0a 20 20 20 20 20 20 2f 2f 20  = [];..      // 
eea0: 70 72 6f 70 65 72 74 69 65 73 20 62 6c 61 63 6b  properties black
eeb0: 6c 69 73 74 65 64 20 61 6e 64 20 77 69 6c 6c 20  listed and will 
eec0: 6e 6f 74 20 62 65 20 62 6f 75 6e 64 20 74 6f 20  not be bound to 
eed0: 74 68 65 20 74 61 67 20 69 6e 73 74 61 6e 63 65  the tag instance
eee0: 0a 20 20 20 20 20 20 76 61 72 20 70 72 6f 70 73  .      var props
eef0: 42 6c 61 63 6b 6c 69 73 74 20 3d 20 5b 27 69 6e  Blacklist = ['in
ef00: 69 74 27 2c 20 27 5f 5f 70 72 6f 74 6f 5f 5f 27  it', '__proto__'
ef10: 5d 3b 0a 0a 20 20 20 20 20 20 6d 69 78 20 3d 20  ];..      mix = 
ef20: 69 73 53 74 72 69 6e 67 28 6d 69 78 29 20 3f 20  isString(mix) ? 
ef30: 6d 69 78 69 6e 28 6d 69 78 29 20 3a 20 6d 69 78  mixin(mix) : mix
ef40: 3b 0a 0a 20 20 20 20 20 20 2f 2f 20 63 68 65 63  ;..      // chec
ef50: 6b 20 69 66 20 74 68 65 20 6d 69 78 69 6e 20 69  k if the mixin i
ef60: 73 20 61 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20  s a function.   
ef70: 20 20 20 69 66 20 28 69 73 46 75 6e 63 74 69 6f     if (isFunctio
ef80: 6e 28 6d 69 78 29 29 20 7b 0a 20 20 20 20 20 20  n(mix)) {.      
ef90: 20 20 2f 2f 20 63 72 65 61 74 65 20 74 68 65 20    // create the 
efa0: 6e 65 77 20 6d 69 78 69 6e 20 69 6e 73 74 61 6e  new mixin instan
efb0: 63 65 0a 20 20 20 20 20 20 20 20 69 6e 73 74 61  ce.        insta
efc0: 6e 63 65 20 3d 20 6e 65 77 20 6d 69 78 28 29 3b  nce = new mix();
efd0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 20  .      } else { 
efe0: 69 6e 73 74 61 6e 63 65 20 3d 20 6d 69 78 3b 20  instance = mix; 
eff0: 7d 0a 0a 20 20 20 20 20 20 76 61 72 20 70 72 6f  }..      var pro
f000: 74 6f 20 3d 20 4f 62 6a 65 63 74 2e 67 65 74 50  to = Object.getP
f010: 72 6f 74 6f 74 79 70 65 4f 66 28 69 6e 73 74 61  rototypeOf(insta
f020: 6e 63 65 29 3b 0a 0a 20 20 20 20 20 20 2f 2f 20  nce);..      // 
f030: 62 75 69 6c 64 20 6d 75 6c 74 69 6c 65 76 65 6c  build multilevel
f040: 20 70 72 6f 74 6f 74 79 70 65 20 69 6e 68 65 72   prototype inher
f050: 69 74 61 6e 63 65 20 63 68 61 69 6e 20 70 72 6f  itance chain pro
f060: 70 65 72 74 79 20 6c 69 73 74 0a 20 20 20 20 20  perty list.     
f070: 20 64 6f 20 7b 20 70 72 6f 70 73 20 3d 20 70 72   do { props = pr
f080: 6f 70 73 2e 63 6f 6e 63 61 74 28 4f 62 6a 65 63  ops.concat(Objec
f090: 74 2e 67 65 74 4f 77 6e 50 72 6f 70 65 72 74 79  t.getOwnProperty
f0a0: 4e 61 6d 65 73 28 6f 62 6a 20 7c 7c 20 69 6e 73  Names(obj || ins
f0b0: 74 61 6e 63 65 29 29 3b 20 7d 0a 20 20 20 20 20  tance)); }.     
f0c0: 20 77 68 69 6c 65 20 28 6f 62 6a 20 3d 20 4f 62   while (obj = Ob
f0d0: 6a 65 63 74 2e 67 65 74 50 72 6f 74 6f 74 79 70  ject.getPrototyp
f0e0: 65 4f 66 28 6f 62 6a 20 7c 7c 20 69 6e 73 74 61  eOf(obj || insta
f0f0: 6e 63 65 29 29 0a 0a 20 20 20 20 20 20 2f 2f 20  nce))..      // 
f100: 6c 6f 6f 70 20 74 68 65 20 6b 65 79 73 20 69 6e  loop the keys in
f110: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 72   the function pr
f120: 6f 74 6f 74 79 70 65 20 6f 72 20 74 68 65 20 61  ototype or the a
f130: 6c 6c 20 6f 62 6a 65 63 74 20 6b 65 79 73 0a 20  ll object keys. 
f140: 20 20 20 20 20 65 61 63 68 28 70 72 6f 70 73 2c       each(props,
f150: 20 66 75 6e 63 74 69 6f 6e 20 28 6b 65 79 29 20   function (key) 
f160: 7b 0a 20 20 20 20 20 20 20 20 2f 2f 20 62 69 6e  {.        // bin
f170: 64 20 6d 65 74 68 6f 64 73 20 74 6f 20 74 61 67  d methods to tag
f180: 0a 20 20 20 20 20 20 20 20 2f 2f 20 61 6c 6c 6f  .        // allo
f190: 77 20 6d 69 78 69 6e 73 20 74 6f 20 6f 76 65 72  w mixins to over
f1a0: 72 69 64 65 20 6f 74 68 65 72 20 70 72 6f 70 65  ride other prope
f1b0: 72 74 69 65 73 2f 70 61 72 65 6e 74 20 6d 69 78  rties/parent mix
f1c0: 69 6e 73 0a 20 20 20 20 20 20 20 20 69 66 20 28  ins.        if (
f1d0: 21 63 6f 6e 74 61 69 6e 73 28 70 72 6f 70 73 42  !contains(propsB
f1e0: 6c 61 63 6b 6c 69 73 74 2c 20 6b 65 79 29 29 20  lacklist, key)) 
f1f0: 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 63  {.          // c
f200: 68 65 63 6b 20 66 6f 72 20 67 65 74 74 65 72 73  heck for getters
f210: 2f 73 65 74 74 65 72 73 0a 20 20 20 20 20 20 20  /setters.       
f220: 20 20 20 76 61 72 20 64 65 73 63 72 69 70 74 6f     var descripto
f230: 72 20 3d 20 67 65 74 50 72 6f 70 44 65 73 63 72  r = getPropDescr
f240: 69 70 74 6f 72 28 69 6e 73 74 61 6e 63 65 2c 20  iptor(instance, 
f250: 6b 65 79 29 20 7c 7c 20 67 65 74 50 72 6f 70 44  key) || getPropD
f260: 65 73 63 72 69 70 74 6f 72 28 70 72 6f 74 6f 2c  escriptor(proto,
f270: 20 6b 65 79 29 3b 0a 20 20 20 20 20 20 20 20 20   key);.         
f280: 20 76 61 72 20 68 61 73 47 65 74 74 65 72 53 65   var hasGetterSe
f290: 74 74 65 72 20 3d 20 64 65 73 63 72 69 70 74 6f  tter = descripto
f2a0: 72 20 26 26 20 28 64 65 73 63 72 69 70 74 6f 72  r && (descriptor
f2b0: 2e 67 65 74 20 7c 7c 20 64 65 73 63 72 69 70 74  .get || descript
f2c0: 6f 72 2e 73 65 74 29 3b 0a 0a 20 20 20 20 20 20  or.set);..      
f2d0: 20 20 20 20 2f 2f 20 61 70 70 6c 79 20 6d 65 74      // apply met
f2e0: 68 6f 64 20 6f 6e 6c 79 20 69 66 20 69 74 20 64  hod only if it d
f2f0: 6f 65 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20  oes not already 
f300: 65 78 69 73 74 20 6f 6e 20 74 68 65 20 69 6e 73  exist on the ins
f310: 74 61 6e 63 65 0a 20 20 20 20 20 20 20 20 20 20  tance.          
f320: 69 66 20 28 21 74 61 67 24 24 31 2e 68 61 73 4f  if (!tag$$1.hasO
f330: 77 6e 50 72 6f 70 65 72 74 79 28 6b 65 79 29 20  wnProperty(key) 
f340: 26 26 20 68 61 73 47 65 74 74 65 72 53 65 74 74  && hasGetterSett
f350: 65 72 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  er) {.          
f360: 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50    Object.defineP
f370: 72 6f 70 65 72 74 79 28 74 61 67 24 24 31 2c 20  roperty(tag$$1, 
f380: 6b 65 79 2c 20 64 65 73 63 72 69 70 74 6f 72 29  key, descriptor)
f390: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c  ;.          } el
f3a0: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  se {.           
f3b0: 20 74 61 67 24 24 31 5b 6b 65 79 5d 20 3d 20 69   tag$$1[key] = i
f3c0: 73 46 75 6e 63 74 69 6f 6e 28 69 6e 73 74 61 6e  sFunction(instan
f3d0: 63 65 5b 6b 65 79 5d 29 20 3f 0a 20 20 20 20 20  ce[key]) ?.     
f3e0: 20 20 20 20 20 20 20 20 20 69 6e 73 74 61 6e 63           instanc
f3f0: 65 5b 6b 65 79 5d 2e 62 69 6e 64 28 74 61 67 24  e[key].bind(tag$
f400: 24 31 29 20 3a 0a 20 20 20 20 20 20 20 20 20 20  $1) :.          
f410: 20 20 20 20 69 6e 73 74 61 6e 63 65 5b 6b 65 79      instance[key
f420: 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  ];.          }. 
f430: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
f440: 29 3b 0a 0a 20 20 20 20 20 20 2f 2f 20 69 6e 69  );..      // ini
f450: 74 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 62 65  t method will be
f460: 20 63 61 6c 6c 65 64 20 61 75 74 6f 6d 61 74 69   called automati
f470: 63 61 6c 6c 79 0a 20 20 20 20 20 20 69 66 20 28  cally.      if (
f480: 69 6e 73 74 61 6e 63 65 2e 69 6e 69 74 29 0a 20  instance.init). 
f490: 20 20 20 20 20 20 20 7b 20 69 6e 73 74 61 6e 63         { instanc
f4a0: 65 2e 69 6e 69 74 2e 62 69 6e 64 28 74 61 67 24  e.init.bind(tag$
f4b0: 24 31 29 28 74 61 67 24 24 31 2e 6f 70 74 73 29  $1)(tag$$1.opts)
f4c0: 3b 20 7d 0a 20 20 20 20 7d 29 3b 0a 0a 20 20 20  ; }.    });..   
f4d0: 20 72 65 74 75 72 6e 20 74 61 67 24 24 31 0a 20   return tag$$1. 
f4e0: 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 4d   }..  /**.   * M
f4f0: 6f 76 65 20 74 68 65 20 70 6f 73 69 74 69 6f 6e  ove the position
f500: 20 6f 66 20 61 20 63 75 73 74 6f 6d 20 74 61 67   of a custom tag
f510: 20 69 6e 20 69 74 73 20 70 61 72 65 6e 74 20 74   in its parent t
f520: 61 67 0a 20 20 20 2a 20 40 74 68 69 73 20 54 61  ag.   * @this Ta
f530: 67 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20  g.   * @param   
f540: 7b 20 53 74 72 69 6e 67 20 7d 20 74 61 67 4e 61  { String } tagNa
f550: 6d 65 20 2d 20 6b 65 79 20 77 68 65 72 65 20 74  me - key where t
f560: 68 65 20 74 61 67 20 77 61 73 20 73 74 6f 72 65  he tag was store
f570: 64 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20  d.   * @param   
f580: 7b 20 4e 75 6d 62 65 72 20 7d 20 6e 65 77 50 6f  { Number } newPo
f590: 73 20 2d 20 69 6e 64 65 78 20 77 68 65 72 65 20  s - index where 
f5a0: 74 68 65 20 6e 65 77 20 74 61 67 20 77 69 6c 6c  the new tag will
f5b0: 20 62 65 20 73 74 6f 72 65 64 0a 20 20 20 2a 2f   be stored.   */
f5c0: 0a 20 20 66 75 6e 63 74 69 6f 6e 20 6d 6f 76 65  .  function move
f5d0: 43 68 69 6c 64 28 74 61 67 4e 61 6d 65 2c 20 6e  Child(tagName, n
f5e0: 65 77 50 6f 73 29 20 7b 0a 20 20 20 20 76 61 72  ewPos) {.    var
f5f0: 20 70 61 72 65 6e 74 20 3d 20 74 68 69 73 2e 70   parent = this.p
f600: 61 72 65 6e 74 3b 0a 20 20 20 20 76 61 72 20 74  arent;.    var t
f610: 61 67 73 3b 0a 20 20 20 20 2f 2f 20 6e 6f 20 70  ags;.    // no p
f620: 61 72 65 6e 74 20 6e 6f 20 6d 6f 76 65 0a 20 20  arent no move.  
f630: 20 20 69 66 20 28 21 70 61 72 65 6e 74 29 20 7b    if (!parent) {
f640: 20 72 65 74 75 72 6e 20 7d 0a 0a 20 20 20 20 74   return }..    t
f650: 61 67 73 20 3d 20 70 61 72 65 6e 74 2e 74 61 67  ags = parent.tag
f660: 73 5b 74 61 67 4e 61 6d 65 5d 3b 0a 0a 20 20 20  s[tagName];..   
f670: 20 69 66 20 28 69 73 41 72 72 61 79 28 74 61 67   if (isArray(tag
f680: 73 29 29 0a 20 20 20 20 20 20 7b 20 74 61 67 73  s)).      { tags
f690: 2e 73 70 6c 69 63 65 28 6e 65 77 50 6f 73 2c 20  .splice(newPos, 
f6a0: 30 2c 20 74 61 67 73 2e 73 70 6c 69 63 65 28 74  0, tags.splice(t
f6b0: 61 67 73 2e 69 6e 64 65 78 4f 66 28 74 68 69 73  ags.indexOf(this
f6c0: 29 2c 20 31 29 5b 30 5d 29 3b 20 7d 0a 20 20 20  ), 1)[0]); }.   
f6d0: 20 65 6c 73 65 20 7b 20 61 72 72 61 79 69 73 68   else { arrayish
f6e0: 41 64 64 28 70 61 72 65 6e 74 2e 74 61 67 73 2c  Add(parent.tags,
f6f0: 20 74 61 67 4e 61 6d 65 2c 20 74 68 69 73 29 3b   tagName, this);
f700: 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20   }.  }..  /**.  
f710: 20 2a 20 4d 6f 76 65 20 76 69 72 74 75 61 6c 20   * Move virtual 
f720: 74 61 67 20 61 6e 64 20 61 6c 6c 20 63 68 69 6c  tag and all chil
f730: 64 20 6e 6f 64 65 73 0a 20 20 20 2a 20 40 74 68  d nodes.   * @th
f740: 69 73 20 54 61 67 0a 20 20 20 2a 20 40 70 61 72  is Tag.   * @par
f750: 61 6d 20 7b 20 4e 6f 64 65 20 7d 20 73 72 63 20  am { Node } src 
f760: 20 2d 20 74 68 65 20 6e 6f 64 65 20 74 68 61 74   - the node that
f770: 20 77 69 6c 6c 20 64 6f 20 74 68 65 20 69 6e 73   will do the ins
f780: 65 72 74 69 6e 67 0a 20 20 20 2a 20 40 70 61 72  erting.   * @par
f790: 61 6d 20 7b 20 54 61 67 20 7d 20 74 61 72 67 65  am { Tag } targe
f7a0: 74 20 2d 20 69 6e 73 65 72 74 20 62 65 66 6f 72  t - insert befor
f7b0: 65 20 74 68 69 73 20 74 61 67 27 73 20 66 69 72  e this tag's fir
f7c0: 73 74 20 63 68 69 6c 64 0a 20 20 20 2a 2f 0a 20  st child.   */. 
f7d0: 20 66 75 6e 63 74 69 6f 6e 20 6d 6f 76 65 56 69   function moveVi
f7e0: 72 74 75 61 6c 28 73 72 63 2c 20 74 61 72 67 65  rtual(src, targe
f7f0: 74 29 20 7b 0a 20 20 20 20 76 61 72 20 74 68 69  t) {.    var thi
f800: 73 24 31 20 3d 20 74 68 69 73 3b 0a 0a 20 20 20  s$1 = this;..   
f810: 20 76 61 72 20 65 6c 20 3d 20 74 68 69 73 2e 5f   var el = this._
f820: 5f 2e 68 65 61 64 3b 0a 20 20 20 20 76 61 72 20  _.head;.    var 
f830: 73 69 62 3b 0a 20 20 20 20 76 61 72 20 66 72 61  sib;.    var fra
f840: 67 20 3d 20 63 72 65 61 74 65 46 72 61 67 6d 65  g = createFragme
f850: 6e 74 28 29 3b 0a 0a 20 20 20 20 77 68 69 6c 65  nt();..    while
f860: 20 28 65 6c 29 20 7b 0a 20 20 20 20 20 20 73 69   (el) {.      si
f870: 62 20 3d 20 65 6c 2e 6e 65 78 74 53 69 62 6c 69  b = el.nextSibli
f880: 6e 67 3b 0a 20 20 20 20 20 20 66 72 61 67 2e 61  ng;.      frag.a
f890: 70 70 65 6e 64 43 68 69 6c 64 28 65 6c 29 3b 0a  ppendChild(el);.
f8a0: 20 20 20 20 20 20 65 6c 20 3d 20 73 69 62 3b 0a        el = sib;.
f8b0: 20 20 20 20 20 20 69 66 20 28 65 6c 20 3d 3d 3d        if (el ===
f8c0: 20 74 68 69 73 24 31 2e 5f 5f 2e 74 61 69 6c 29   this$1.__.tail)
f8d0: 20 7b 0a 20 20 20 20 20 20 20 20 66 72 61 67 2e   {.        frag.
f8e0: 61 70 70 65 6e 64 43 68 69 6c 64 28 65 6c 29 3b  appendChild(el);
f8f0: 0a 20 20 20 20 20 20 20 20 73 72 63 2e 69 6e 73  .        src.ins
f900: 65 72 74 42 65 66 6f 72 65 28 66 72 61 67 2c 20  ertBefore(frag, 
f910: 74 61 72 67 65 74 2e 5f 5f 2e 68 65 61 64 29 3b  target.__.head);
f920: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 0a 20  .        break. 
f930: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
f940: 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 43 6f 6e  ..  /**.   * Con
f950: 76 65 72 74 20 74 68 65 20 69 74 65 6d 20 6c 6f  vert the item lo
f960: 6f 70 65 64 20 69 6e 74 6f 20 61 6e 20 6f 62 6a  oped into an obj
f970: 65 63 74 20 75 73 65 64 20 74 6f 20 65 78 74 65  ect used to exte
f980: 6e 64 20 74 68 65 20 63 68 69 6c 64 20 74 61 67  nd the child tag
f990: 20 70 72 6f 70 65 72 74 69 65 73 0a 20 20 20 2a   properties.   *
f9a0: 20 40 70 61 72 61 6d 20 20 20 7b 20 4f 62 6a 65   @param   { Obje
f9b0: 63 74 20 7d 20 65 78 70 72 20 2d 20 6f 62 6a 65  ct } expr - obje
f9c0: 63 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ct containing th
f9d0: 65 20 6b 65 79 73 20 75 73 65 64 20 74 6f 20 65  e keys used to e
f9e0: 78 74 65 6e 64 20 74 68 65 20 63 68 69 6c 64 72  xtend the childr
f9f0: 65 6e 20 74 61 67 73 0a 20 20 20 2a 20 40 70 61  en tags.   * @pa
fa00: 72 61 6d 20 20 20 7b 20 2a 20 7d 20 6b 65 79 20  ram   { * } key 
fa10: 2d 20 76 61 6c 75 65 20 74 6f 20 61 73 73 69 67  - value to assig
fa20: 6e 20 74 6f 20 74 68 65 20 6e 65 77 20 6f 62 6a  n to the new obj
fa30: 65 63 74 20 72 65 74 75 72 6e 65 64 0a 20 20 20  ect returned.   
fa40: 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 2a 20 7d  * @param   { * }
fa50: 20 76 61 6c 20 2d 20 76 61 6c 75 65 20 63 6f 6e   val - value con
fa60: 74 61 69 6e 69 6e 67 20 74 68 65 20 70 6f 73 69  taining the posi
fa70: 74 69 6f 6e 20 6f 66 20 74 68 65 20 69 74 65 6d  tion of the item
fa80: 20 69 6e 20 74 68 65 20 61 72 72 61 79 0a 20 20   in the array.  
fa90: 20 2a 20 40 72 65 74 75 72 6e 73 20 7b 20 4f 62   * @returns { Ob
faa0: 6a 65 63 74 20 7d 20 2d 20 6e 65 77 20 6f 62 6a  ject } - new obj
fab0: 65 63 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ect containing t
fac0: 68 65 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65  he values of the
fad0: 20 6f 72 69 67 69 6e 61 6c 20 69 74 65 6d 0a 20   original item. 
fae0: 20 20 2a 0a 20 20 20 2a 20 54 68 65 20 76 61 72    *.   * The var
faf0: 69 61 62 6c 65 73 20 27 6b 65 79 27 20 61 6e 64  iables 'key' and
fb00: 20 27 76 61 6c 27 20 61 72 65 20 61 72 62 69 74   'val' are arbit
fb10: 72 61 72 79 2e 0a 20 20 20 2a 20 54 68 65 79 20  rary..   * They 
fb20: 64 65 70 65 6e 64 20 6f 6e 20 74 68 65 20 63 6f  depend on the co
fb30: 6c 6c 65 63 74 69 6f 6e 20 74 79 70 65 20 6c 6f  llection type lo
fb40: 6f 70 65 64 20 28 41 72 72 61 79 2c 20 4f 62 6a  oped (Array, Obj
fb50: 65 63 74 29 0a 20 20 20 2a 20 61 6e 64 20 6f 6e  ect).   * and on
fb60: 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
fb70: 75 73 65 64 20 6f 6e 20 74 68 65 20 65 61 63 68  used on the each
fb80: 20 74 61 67 0a 20 20 20 2a 0a 20 20 20 2a 2f 0a   tag.   *.   */.
fb90: 20 20 66 75 6e 63 74 69 6f 6e 20 6d 6b 69 74 65    function mkite
fba0: 6d 28 65 78 70 72 2c 20 6b 65 79 2c 20 76 61 6c  m(expr, key, val
fbb0: 29 20 7b 0a 20 20 20 20 76 61 72 20 69 74 65 6d  ) {.    var item
fbc0: 20 3d 20 7b 7d 3b 0a 20 20 20 20 69 74 65 6d 5b   = {};.    item[
fbd0: 65 78 70 72 2e 6b 65 79 5d 20 3d 20 6b 65 79 3b  expr.key] = key;
fbe0: 0a 20 20 20 20 69 66 20 28 65 78 70 72 2e 70 6f  .    if (expr.po
fbf0: 73 29 20 7b 20 69 74 65 6d 5b 65 78 70 72 2e 70  s) { item[expr.p
fc00: 6f 73 5d 20 3d 20 76 61 6c 3b 20 7d 0a 20 20 20  os] = val; }.   
fc10: 20 72 65 74 75 72 6e 20 69 74 65 6d 0a 20 20 7d   return item.  }
fc20: 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 55 6e 6d  ..  /**.   * Unm
fc30: 6f 75 6e 74 20 74 68 65 20 72 65 64 75 6e 64 61  ount the redunda
fc40: 6e 74 20 74 61 67 73 0a 20 20 20 2a 20 40 70 61  nt tags.   * @pa
fc50: 72 61 6d 20 20 20 7b 20 41 72 72 61 79 20 7d 20  ram   { Array } 
fc60: 69 74 65 6d 73 20 2d 20 61 72 72 61 79 20 63 6f  items - array co
fc70: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 63 75 72  ntaining the cur
fc80: 72 65 6e 74 20 69 74 65 6d 73 20 74 6f 20 6c 6f  rent items to lo
fc90: 6f 70 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20  op.   * @param  
fca0: 20 7b 20 41 72 72 61 79 20 7d 20 74 61 67 73 20   { Array } tags 
fcb0: 2d 20 61 72 72 61 79 20 63 6f 6e 74 61 69 6e 69  - array containi
fcc0: 6e 67 20 61 6c 6c 20 74 68 65 20 63 68 69 6c 64  ng all the child
fcd0: 72 65 6e 20 74 61 67 73 0a 20 20 20 2a 2f 0a 20  ren tags.   */. 
fce0: 20 66 75 6e 63 74 69 6f 6e 20 75 6e 6d 6f 75 6e   function unmoun
fcf0: 74 52 65 64 75 6e 64 61 6e 74 28 69 74 65 6d 73  tRedundant(items
fd00: 2c 20 74 61 67 73 2c 20 66 69 6c 74 65 72 65 64  , tags, filtered
fd10: 49 74 65 6d 73 43 6f 75 6e 74 29 20 7b 0a 20 20  ItemsCount) {.  
fd20: 20 20 76 61 72 20 69 20 3d 20 74 61 67 73 2e 6c    var i = tags.l
fd30: 65 6e 67 74 68 3b 0a 20 20 20 20 76 61 72 20 6a  ength;.    var j
fd40: 20 3d 20 69 74 65 6d 73 2e 6c 65 6e 67 74 68 20   = items.length 
fd50: 2d 20 66 69 6c 74 65 72 65 64 49 74 65 6d 73 43  - filteredItemsC
fd60: 6f 75 6e 74 3b 0a 0a 20 20 20 20 77 68 69 6c 65  ount;..    while
fd70: 20 28 69 20 3e 20 6a 29 20 7b 0a 20 20 20 20 20   (i > j) {.     
fd80: 20 69 2d 2d 3b 0a 20 20 20 20 20 20 72 65 6d 6f   i--;.      remo
fd90: 76 65 2e 61 70 70 6c 79 28 74 61 67 73 5b 69 5d  ve.apply(tags[i]
fda0: 2c 20 5b 74 61 67 73 2c 20 69 5d 29 3b 0a 20 20  , [tags, i]);.  
fdb0: 20 20 7d 0a 20 20 7d 0a 0a 0a 20 20 2f 2a 2a 0a    }.  }...  /**.
fdc0: 20 20 20 2a 20 52 65 6d 6f 76 65 20 61 20 63 68     * Remove a ch
fdd0: 69 6c 64 20 74 61 67 0a 20 20 20 2a 20 40 74 68  ild tag.   * @th
fde0: 69 73 20 54 61 67 0a 20 20 20 2a 20 40 70 61 72  is Tag.   * @par
fdf0: 61 6d 20 20 20 7b 20 41 72 72 61 79 20 7d 20 74  am   { Array } t
fe00: 61 67 73 20 2d 20 74 61 67 73 20 63 6f 6c 6c 65  ags - tags colle
fe10: 63 74 69 6f 6e 0a 20 20 20 2a 20 40 70 61 72 61  ction.   * @para
fe20: 6d 20 20 20 7b 20 4e 75 6d 62 65 72 20 7d 20 69  m   { Number } i
fe30: 20 2d 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20   - index of the 
fe40: 74 61 67 20 74 6f 20 72 65 6d 6f 76 65 0a 20 20  tag to remove.  
fe50: 20 2a 2f 0a 20 20 66 75 6e 63 74 69 6f 6e 20 72   */.  function r
fe60: 65 6d 6f 76 65 28 74 61 67 73 2c 20 69 29 20 7b  emove(tags, i) {
fe70: 0a 20 20 20 20 74 61 67 73 2e 73 70 6c 69 63 65  .    tags.splice
fe80: 28 69 2c 20 31 29 3b 0a 20 20 20 20 74 68 69 73  (i, 1);.    this
fe90: 2e 75 6e 6d 6f 75 6e 74 28 29 3b 0a 20 20 20 20  .unmount();.    
fea0: 61 72 72 61 79 69 73 68 52 65 6d 6f 76 65 28 74  arrayishRemove(t
feb0: 68 69 73 2e 70 61 72 65 6e 74 2c 20 74 68 69 73  his.parent, this
fec0: 2c 20 74 68 69 73 2e 5f 5f 2e 74 61 67 4e 61 6d  , this.__.tagNam
fed0: 65 2c 20 74 72 75 65 29 3b 0a 20 20 7d 0a 0a 20  e, true);.  }.. 
fee0: 20 2f 2a 2a 0a 20 20 20 2a 20 4d 6f 76 65 20 74   /**.   * Move t
fef0: 68 65 20 6e 65 73 74 65 64 20 63 75 73 74 6f 6d  he nested custom
ff00: 20 74 61 67 73 20 69 6e 20 6e 6f 6e 20 63 75 73   tags in non cus
ff10: 74 6f 6d 20 6c 6f 6f 70 20 74 61 67 73 0a 20 20  tom loop tags.  
ff20: 20 2a 20 40 74 68 69 73 20 54 61 67 0a 20 20 20   * @this Tag.   
ff30: 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 4e 75 6d  * @param   { Num
ff40: 62 65 72 20 7d 20 69 20 2d 20 63 75 72 72 65 6e  ber } i - curren
ff50: 74 20 70 6f 73 69 74 69 6f 6e 20 6f 66 20 74 68  t position of th
ff60: 65 20 6c 6f 6f 70 20 74 61 67 0a 20 20 20 2a 2f  e loop tag.   */
ff70: 0a 20 20 66 75 6e 63 74 69 6f 6e 20 6d 6f 76 65  .  function move
ff80: 4e 65 73 74 65 64 54 61 67 73 28 69 29 20 7b 0a  NestedTags(i) {.
ff90: 20 20 20 20 76 61 72 20 74 68 69 73 24 31 20 3d      var this$1 =
ffa0: 20 74 68 69 73 3b 0a 0a 20 20 20 20 65 61 63 68   this;..    each
ffb0: 28 4f 62 6a 65 63 74 2e 6b 65 79 73 28 74 68 69  (Object.keys(thi
ffc0: 73 2e 74 61 67 73 29 2c 20 66 75 6e 63 74 69 6f  s.tags), functio
ffd0: 6e 20 28 74 61 67 4e 61 6d 65 29 20 7b 0a 20 20  n (tagName) {.  
ffe0: 20 20 20 20 6d 6f 76 65 43 68 69 6c 64 2e 61 70      moveChild.ap
fff0: 70 6c 79 28 74 68 69 73 24 31 2e 74 61 67 73 5b  ply(this$1.tags[
10000 74 61 67 4e 61 6d 65 5d 2c 20 5b 74 61 67 4e 61  tagName], [tagNa
10010 6d 65 2c 20 69 5d 29 3b 0a 20 20 20 20 7d 29 3b  me, i]);.    });
10020 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a  .  }..  /**.   *
10030 20 4d 6f 76 65 20 61 20 63 68 69 6c 64 20 74 61   Move a child ta
10040 67 0a 20 20 20 2a 20 40 74 68 69 73 20 54 61 67  g.   * @this Tag
10050 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20 7b  .   * @param   {
10060 20 48 54 4d 4c 45 6c 65 6d 65 6e 74 20 7d 20 72   HTMLElement } r
10070 6f 6f 74 20 2d 20 64 6f 6d 20 6e 6f 64 65 20 63  oot - dom node c
10080 6f 6e 74 61 69 6e 69 6e 67 20 61 6c 6c 20 74 68  ontaining all th
10090 65 20 6c 6f 6f 70 20 63 68 69 6c 64 72 65 6e 0a  e loop children.
100a0 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20     * @param   { 
100b0 54 61 67 20 7d 20 6e 65 78 74 54 61 67 20 2d 20  Tag } nextTag - 
100c0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
100d0 6e 65 78 74 20 74 61 67 20 70 72 65 63 65 64 69  next tag precedi
100e0 6e 67 20 74 68 65 20 6f 6e 65 20 77 65 20 77 61  ng the one we wa
100f0 6e 74 20 74 6f 20 6d 6f 76 65 0a 20 20 20 2a 20  nt to move.   * 
10100 40 70 61 72 61 6d 20 20 20 7b 20 42 6f 6f 6c 65  @param   { Boole
10110 61 6e 20 7d 20 69 73 56 69 72 74 75 61 6c 20 2d  an } isVirtual -
10120 20 69 73 20 69 74 20 61 20 76 69 72 74 75 61 6c   is it a virtual
10130 20 74 61 67 3f 0a 20 20 20 2a 2f 0a 20 20 66 75   tag?.   */.  fu
10140 6e 63 74 69 6f 6e 20 6d 6f 76 65 28 72 6f 6f 74  nction move(root
10150 2c 20 6e 65 78 74 54 61 67 2c 20 69 73 56 69 72  , nextTag, isVir
10160 74 75 61 6c 29 20 7b 0a 20 20 20 20 69 66 20 28  tual) {.    if (
10170 69 73 56 69 72 74 75 61 6c 29 0a 20 20 20 20 20  isVirtual).     
10180 20 7b 20 6d 6f 76 65 56 69 72 74 75 61 6c 2e 61   { moveVirtual.a
10190 70 70 6c 79 28 74 68 69 73 2c 20 5b 72 6f 6f 74  pply(this, [root
101a0 2c 20 6e 65 78 74 54 61 67 5d 29 3b 20 7d 0a 20  , nextTag]); }. 
101b0 20 20 20 65 6c 73 65 0a 20 20 20 20 20 20 7b 20     else.      { 
101c0 73 61 66 65 49 6e 73 65 72 74 28 72 6f 6f 74 2c  safeInsert(root,
101d0 20 74 68 69 73 2e 72 6f 6f 74 2c 20 6e 65 78 74   this.root, next
101e0 54 61 67 2e 72 6f 6f 74 29 3b 20 7d 0a 20 20 7d  Tag.root); }.  }
101f0 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 49 6e 73  ..  /**.   * Ins
10200 65 72 74 20 61 6e 64 20 6d 6f 75 6e 74 20 61 20  ert and mount a 
10210 63 68 69 6c 64 20 74 61 67 0a 20 20 20 2a 20 40  child tag.   * @
10220 74 68 69 73 20 54 61 67 0a 20 20 20 2a 20 40 70  this Tag.   * @p
10230 61 72 61 6d 20 20 20 7b 20 48 54 4d 4c 45 6c 65  aram   { HTMLEle
10240 6d 65 6e 74 20 7d 20 72 6f 6f 74 20 2d 20 64 6f  ment } root - do
10250 6d 20 6e 6f 64 65 20 63 6f 6e 74 61 69 6e 69 6e  m node containin
10260 67 20 61 6c 6c 20 74 68 65 20 6c 6f 6f 70 20 63  g all the loop c
10270 68 69 6c 64 72 65 6e 0a 20 20 20 2a 20 40 70 61  hildren.   * @pa
10280 72 61 6d 20 20 20 7b 20 54 61 67 20 7d 20 6e 65  ram   { Tag } ne
10290 78 74 54 61 67 20 2d 20 69 6e 73 74 61 6e 63 65  xtTag - instance
102a0 20 6f 66 20 74 68 65 20 6e 65 78 74 20 74 61 67   of the next tag
102b0 20 70 72 65 63 65 64 69 6e 67 20 74 68 65 20 6f   preceding the o
102c0 6e 65 20 77 65 20 77 61 6e 74 20 74 6f 20 69 6e  ne we want to in
102d0 73 65 72 74 0a 20 20 20 2a 20 40 70 61 72 61 6d  sert.   * @param
102e0 20 20 20 7b 20 42 6f 6f 6c 65 61 6e 20 7d 20 69     { Boolean } i
102f0 73 56 69 72 74 75 61 6c 20 2d 20 69 73 20 69 74  sVirtual - is it
10300 20 61 20 76 69 72 74 75 61 6c 20 74 61 67 3f 0a   a virtual tag?.
10310 20 20 20 2a 2f 0a 20 20 66 75 6e 63 74 69 6f 6e     */.  function
10320 20 69 6e 73 65 72 74 28 72 6f 6f 74 2c 20 6e 65   insert(root, ne
10330 78 74 54 61 67 2c 20 69 73 56 69 72 74 75 61 6c  xtTag, isVirtual
10340 29 20 7b 0a 20 20 20 20 69 66 20 28 69 73 56 69  ) {.    if (isVi
10350 72 74 75 61 6c 29 0a 20 20 20 20 20 20 7b 20 6d  rtual).      { m
10360 61 6b 65 56 69 72 74 75 61 6c 2e 61 70 70 6c 79  akeVirtual.apply
10370 28 74 68 69 73 2c 20 5b 72 6f 6f 74 2c 20 6e 65  (this, [root, ne
10380 78 74 54 61 67 5d 29 3b 20 7d 0a 20 20 20 20 65  xtTag]); }.    e
10390 6c 73 65 0a 20 20 20 20 20 20 7b 20 73 61 66 65  lse.      { safe
103a0 49 6e 73 65 72 74 28 72 6f 6f 74 2c 20 74 68 69  Insert(root, thi
103b0 73 2e 72 6f 6f 74 2c 20 6e 65 78 74 54 61 67 2e  s.root, nextTag.
103c0 72 6f 6f 74 29 3b 20 7d 0a 20 20 7d 0a 0a 20 20  root); }.  }..  
103d0 2f 2a 2a 0a 20 20 20 2a 20 41 70 70 65 6e 64 20  /**.   * Append 
103e0 61 20 6e 65 77 20 74 61 67 20 69 6e 74 6f 20 74  a new tag into t
103f0 68 65 20 44 4f 4d 0a 20 20 20 2a 20 40 74 68 69  he DOM.   * @thi
10400 73 20 54 61 67 0a 20 20 20 2a 20 40 70 61 72 61  s Tag.   * @para
10410 6d 20 20 20 7b 20 48 54 4d 4c 45 6c 65 6d 65 6e  m   { HTMLElemen
10420 74 20 7d 20 72 6f 6f 74 20 2d 20 64 6f 6d 20 6e  t } root - dom n
10430 6f 64 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61  ode containing a
10440 6c 6c 20 74 68 65 20 6c 6f 6f 70 20 63 68 69 6c  ll the loop chil
10450 64 72 65 6e 0a 20 20 20 2a 20 40 70 61 72 61 6d  dren.   * @param
10460 20 20 20 7b 20 42 6f 6f 6c 65 61 6e 20 7d 20 69     { Boolean } i
10470 73 56 69 72 74 75 61 6c 20 2d 20 69 73 20 69 74  sVirtual - is it
10480 20 61 20 76 69 72 74 75 61 6c 20 74 61 67 3f 0a   a virtual tag?.
10490 20 20 20 2a 2f 0a 20 20 66 75 6e 63 74 69 6f 6e     */.  function
104a0 20 61 70 70 65 6e 64 28 72 6f 6f 74 2c 20 69 73   append(root, is
104b0 56 69 72 74 75 61 6c 29 20 7b 0a 20 20 20 20 69  Virtual) {.    i
104c0 66 20 28 69 73 56 69 72 74 75 61 6c 29 0a 20 20  f (isVirtual).  
104d0 20 20 20 20 7b 20 6d 61 6b 65 56 69 72 74 75 61      { makeVirtua
104e0 6c 2e 63 61 6c 6c 28 74 68 69 73 2c 20 72 6f 6f  l.call(this, roo
104f0 74 29 3b 20 7d 0a 20 20 20 20 65 6c 73 65 0a 20  t); }.    else. 
10500 20 20 20 20 20 7b 20 72 6f 6f 74 2e 61 70 70 65       { root.appe
10510 6e 64 43 68 69 6c 64 28 74 68 69 73 2e 72 6f 6f  ndChild(this.roo
10520 74 29 3b 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 2a  t); }.  }..  /**
10530 0a 20 20 20 2a 20 52 65 74 75 72 6e 20 74 68 65  .   * Return the
10540 20 76 61 6c 75 65 20 77 65 20 77 61 6e 74 20 74   value we want t
10550 6f 20 75 73 65 20 74 6f 20 6c 6f 6f 6b 75 70 20  o use to lookup 
10560 74 68 65 20 70 6f 73 74 69 6f 6e 20 6f 66 20 6f  the postion of o
10570 75 72 20 69 74 65 6d 73 20 69 6e 20 74 68 65 20  ur items in the 
10580 63 6f 6c 6c 65 63 74 69 6f 6e 0a 20 20 20 2a 20  collection.   * 
10590 40 70 61 72 61 6d 20 20 20 7b 20 53 74 72 69 6e  @param   { Strin
105a0 67 20 7d 20 20 6b 65 79 41 74 74 72 20 20 20 20  g }  keyAttr    
105b0 20 20 20 20 20 2d 20 6c 6f 6f 6b 75 70 20 73 74       - lookup st
105c0 72 69 6e 67 20 6f 72 20 65 78 70 72 65 73 73 69  ring or expressi
105d0 6f 6e 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20  on.   * @param  
105e0 20 7b 20 2a 20 7d 20 20 20 20 20 20 20 6f 72 69   { * }       ori
105f0 67 69 6e 61 6c 49 74 65 6d 20 20 20 20 2d 20 6f  ginalItem    - o
10600 72 69 67 69 6e 61 6c 20 69 74 65 6d 20 66 72 6f  riginal item fro
10610 6d 20 74 68 65 20 63 6f 6c 6c 65 63 74 69 6f 6e  m the collection
10620 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20 7b  .   * @param   {
10630 20 4f 62 6a 65 63 74 20 7d 20 20 6b 65 79 65 64   Object }  keyed
10640 49 74 65 6d 20 20 20 20 20 20 20 2d 20 6f 62 6a  Item       - obj
10650 65 63 74 20 63 72 65 61 74 65 64 20 62 79 20 72  ect created by r
10660 69 6f 74 20 76 69 61 20 7b 20 69 74 65 6d 2c 20  iot via { item, 
10670 69 20 69 6e 20 63 6f 6c 6c 65 63 74 69 6f 6e 20  i in collection 
10680 7d 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20  }.   * @param   
10690 7b 20 42 6f 6f 6c 65 61 6e 20 7d 20 68 61 73 4b  { Boolean } hasK
106a0 65 79 41 74 74 72 45 78 70 72 20 20 2d 20 66 6c  eyAttrExpr  - fl
106b0 61 67 20 74 6f 20 63 68 65 63 6b 20 77 68 65 74  ag to check whet
106c0 68 65 72 20 74 68 65 20 6b 65 79 20 69 73 20 61  her the key is a
106d0 6e 20 65 78 70 72 65 73 73 69 6f 6e 0a 20 20 20  n expression.   
106e0 2a 20 40 72 65 74 75 72 6e 73 20 7b 20 2a 20 7d  * @returns { * }
106f0 20 76 61 6c 75 65 20 74 68 61 74 20 77 65 20 77   value that we w
10700 69 6c 6c 20 75 73 65 20 74 6f 20 66 69 67 75 72  ill use to figur
10710 65 20 6f 75 74 20 74 68 65 20 69 74 65 6d 20 70  e out the item p
10720 6f 73 69 74 69 6f 6e 20 76 69 61 20 63 6f 6c 6c  osition via coll
10730 65 63 74 69 6f 6e 2e 69 6e 64 65 78 4f 66 0a 20  ection.indexOf. 
10740 20 20 2a 2f 0a 20 20 66 75 6e 63 74 69 6f 6e 20    */.  function 
10750 67 65 74 49 74 65 6d 49 64 28 6b 65 79 41 74 74  getItemId(keyAtt
10760 72 2c 20 6f 72 69 67 69 6e 61 6c 49 74 65 6d 2c  r, originalItem,
10770 20 6b 65 79 65 64 49 74 65 6d 2c 20 68 61 73 4b   keyedItem, hasK
10780 65 79 41 74 74 72 45 78 70 72 29 20 7b 0a 20 20  eyAttrExpr) {.  
10790 20 20 69 66 20 28 6b 65 79 41 74 74 72 29 20 7b    if (keyAttr) {
107a0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 68 61  .      return ha
107b0 73 4b 65 79 41 74 74 72 45 78 70 72 20 3f 20 20  sKeyAttrExpr ?  
107c0 74 6d 70 6c 28 6b 65 79 41 74 74 72 2c 20 6b 65  tmpl(keyAttr, ke
107d0 79 65 64 49 74 65 6d 29 20 3a 20 20 6f 72 69 67  yedItem) :  orig
107e0 69 6e 61 6c 49 74 65 6d 5b 6b 65 79 41 74 74 72  inalItem[keyAttr
107f0 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 72 65 74  ].    }..    ret
10800 75 72 6e 20 6f 72 69 67 69 6e 61 6c 49 74 65 6d  urn originalItem
10810 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a  .  }..  /**.   *
10820 20 4d 61 6e 61 67 65 20 74 61 67 73 20 68 61 76   Manage tags hav
10830 69 6e 67 20 74 68 65 20 27 65 61 63 68 27 0a 20  ing the 'each'. 
10840 20 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 48    * @param   { H
10850 54 4d 4c 45 6c 65 6d 65 6e 74 20 7d 20 64 6f 6d  TMLElement } dom
10860 20 2d 20 44 4f 4d 20 6e 6f 64 65 20 77 65 20 6e   - DOM node we n
10870 65 65 64 20 74 6f 20 6c 6f 6f 70 0a 20 20 20 2a  eed to loop.   *
10880 20 40 70 61 72 61 6d 20 20 20 7b 20 54 61 67 20   @param   { Tag 
10890 7d 20 70 61 72 65 6e 74 20 2d 20 70 61 72 65 6e  } parent - paren
108a0 74 20 74 61 67 20 69 6e 73 74 61 6e 63 65 20 77  t tag instance w
108b0 68 65 72 65 20 74 68 65 20 64 6f 6d 20 6e 6f 64  here the dom nod
108c0 65 20 69 73 20 63 6f 6e 74 61 69 6e 65 64 0a 20  e is contained. 
108d0 20 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 53    * @param   { S
108e0 74 72 69 6e 67 20 7d 20 65 78 70 72 20 2d 20 73  tring } expr - s
108f0 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 65 64 20  tring contained 
10900 69 6e 20 74 68 65 20 27 65 61 63 68 27 20 61 74  in the 'each' at
10910 74 72 69 62 75 74 65 0a 20 20 20 2a 20 40 72 65  tribute.   * @re
10920 74 75 72 6e 73 20 7b 20 4f 62 6a 65 63 74 20 7d  turns { Object }
10930 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 62 6a 65   expression obje
10940 63 74 20 66 6f 72 20 74 68 69 73 20 65 61 63 68  ct for this each
10950 20 6c 6f 6f 70 0a 20 20 20 2a 2f 0a 20 20 66 75   loop.   */.  fu
10960 6e 63 74 69 6f 6e 20 5f 65 61 63 68 28 64 6f 6d  nction _each(dom
10970 2c 20 70 61 72 65 6e 74 2c 20 65 78 70 72 29 20  , parent, expr) 
10980 7b 0a 20 20 20 20 76 61 72 20 6d 75 73 74 52 65  {.    var mustRe
10990 6f 72 64 65 72 20 3d 20 74 79 70 65 6f 66 20 67  order = typeof g
109a0 65 74 41 74 74 72 69 62 75 74 65 28 64 6f 6d 2c  etAttribute(dom,
109b0 20 4c 4f 4f 50 5f 4e 4f 5f 52 45 4f 52 44 45 52   LOOP_NO_REORDER
109c0 5f 44 49 52 45 43 54 49 56 45 29 20 21 3d 3d 20  _DIRECTIVE) !== 
109d0 54 5f 53 54 52 49 4e 47 20 7c 7c 20 72 65 6d 6f  T_STRING || remo
109e0 76 65 41 74 74 72 69 62 75 74 65 28 64 6f 6d 2c  veAttribute(dom,
109f0 20 4c 4f 4f 50 5f 4e 4f 5f 52 45 4f 52 44 45 52   LOOP_NO_REORDER
10a00 5f 44 49 52 45 43 54 49 56 45 29 3b 0a 20 20 20  _DIRECTIVE);.   
10a10 20 76 61 72 20 6b 65 79 41 74 74 72 20 3d 20 67   var keyAttr = g
10a20 65 74 41 74 74 72 69 62 75 74 65 28 64 6f 6d 2c  etAttribute(dom,
10a30 20 4b 45 59 5f 44 49 52 45 43 54 49 56 45 29 3b   KEY_DIRECTIVE);
10a40 0a 20 20 20 20 76 61 72 20 68 61 73 4b 65 79 41  .    var hasKeyA
10a50 74 74 72 45 78 70 72 20 3d 20 6b 65 79 41 74 74  ttrExpr = keyAtt
10a60 72 20 3f 20 74 6d 70 6c 2e 68 61 73 45 78 70 72  r ? tmpl.hasExpr
10a70 28 6b 65 79 41 74 74 72 29 20 3a 20 66 61 6c 73  (keyAttr) : fals
10a80 65 3b 0a 20 20 20 20 76 61 72 20 74 61 67 4e 61  e;.    var tagNa
10a90 6d 65 20 3d 20 67 65 74 4e 61 6d 65 28 64 6f 6d  me = getName(dom
10aa0 29 3b 0a 20 20 20 20 76 61 72 20 69 6d 70 6c 20  );.    var impl 
10ab0 3d 20 5f 5f 54 41 47 5f 49 4d 50 4c 5b 74 61 67  = __TAG_IMPL[tag
10ac0 4e 61 6d 65 5d 3b 0a 20 20 20 20 76 61 72 20 70  Name];.    var p
10ad0 61 72 65 6e 74 4e 6f 64 65 20 3d 20 64 6f 6d 2e  arentNode = dom.
10ae0 70 61 72 65 6e 74 4e 6f 64 65 3b 0a 20 20 20 20  parentNode;.    
10af0 76 61 72 20 70 6c 61 63 65 68 6f 6c 64 65 72 20  var placeholder 
10b00 3d 20 63 72 65 61 74 65 44 4f 4d 50 6c 61 63 65  = createDOMPlace
10b10 68 6f 6c 64 65 72 28 29 3b 0a 20 20 20 20 76 61  holder();.    va
10b20 72 20 63 68 69 6c 64 20 3d 20 67 65 74 28 64 6f  r child = get(do
10b30 6d 29 3b 0a 20 20 20 20 76 61 72 20 69 66 45 78  m);.    var ifEx
10b40 70 72 20 3d 20 67 65 74 41 74 74 72 69 62 75 74  pr = getAttribut
10b50 65 28 64 6f 6d 2c 20 43 4f 4e 44 49 54 49 4f 4e  e(dom, CONDITION
10b60 41 4c 5f 44 49 52 45 43 54 49 56 45 29 3b 0a 20  AL_DIRECTIVE);. 
10b70 20 20 20 76 61 72 20 74 61 67 73 20 3d 20 5b 5d     var tags = []
10b80 3b 0a 20 20 20 20 76 61 72 20 69 73 4c 6f 6f 70  ;.    var isLoop
10b90 20 3d 20 74 72 75 65 3b 0a 20 20 20 20 76 61 72   = true;.    var
10ba0 20 69 6e 6e 65 72 48 54 4d 4c 20 3d 20 64 6f 6d   innerHTML = dom
10bb0 2e 69 6e 6e 65 72 48 54 4d 4c 3b 0a 20 20 20 20  .innerHTML;.    
10bc0 76 61 72 20 69 73 41 6e 6f 6e 79 6d 6f 75 73 20  var isAnonymous 
10bd0 3d 20 21 5f 5f 54 41 47 5f 49 4d 50 4c 5b 74 61  = !__TAG_IMPL[ta
10be0 67 4e 61 6d 65 5d 3b 0a 20 20 20 20 76 61 72 20  gName];.    var 
10bf0 69 73 56 69 72 74 75 61 6c 20 3d 20 64 6f 6d 2e  isVirtual = dom.
10c00 74 61 67 4e 61 6d 65 20 3d 3d 3d 20 27 56 49 52  tagName === 'VIR
10c10 54 55 41 4c 27 3b 0a 20 20 20 20 76 61 72 20 6f  TUAL';.    var o
10c20 6c 64 49 74 65 6d 73 20 3d 20 5b 5d 3b 0a 0a 20  ldItems = [];.. 
10c30 20 20 20 2f 2f 20 72 65 6d 6f 76 65 20 74 68 65     // remove the
10c40 20 65 61 63 68 20 70 72 6f 70 65 72 74 79 20 66   each property f
10c50 72 6f 6d 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  rom the original
10c60 20 74 61 67 0a 20 20 20 20 72 65 6d 6f 76 65 41   tag.    removeA
10c70 74 74 72 69 62 75 74 65 28 64 6f 6d 2c 20 4c 4f  ttribute(dom, LO
10c80 4f 50 5f 44 49 52 45 43 54 49 56 45 29 3b 0a 20  OP_DIRECTIVE);. 
10c90 20 20 20 72 65 6d 6f 76 65 41 74 74 72 69 62 75     removeAttribu
10ca0 74 65 28 64 6f 6d 2c 20 4b 45 59 5f 44 49 52 45  te(dom, KEY_DIRE
10cb0 43 54 49 56 45 29 3b 0a 0a 20 20 20 20 2f 2f 20  CTIVE);..    // 
10cc0 70 61 72 73 65 20 74 68 65 20 65 61 63 68 20 65  parse the each e
10cd0 78 70 72 65 73 73 69 6f 6e 0a 20 20 20 20 65 78  xpression.    ex
10ce0 70 72 20 3d 20 74 6d 70 6c 2e 6c 6f 6f 70 4b 65  pr = tmpl.loopKe
10cf0 79 73 28 65 78 70 72 29 3b 0a 20 20 20 20 65 78  ys(expr);.    ex
10d00 70 72 2e 69 73 4c 6f 6f 70 20 3d 20 74 72 75 65  pr.isLoop = true
10d10 3b 0a 0a 20 20 20 20 69 66 20 28 69 66 45 78 70  ;..    if (ifExp
10d20 72 29 20 7b 20 72 65 6d 6f 76 65 41 74 74 72 69  r) { removeAttri
10d30 62 75 74 65 28 64 6f 6d 2c 20 43 4f 4e 44 49 54  bute(dom, CONDIT
10d40 49 4f 4e 41 4c 5f 44 49 52 45 43 54 49 56 45 29  IONAL_DIRECTIVE)
10d50 3b 20 7d 0a 0a 20 20 20 20 2f 2f 20 69 6e 73 65  ; }..    // inse
10d60 72 74 20 61 20 6d 61 72 6b 65 64 20 77 68 65 72  rt a marked wher
10d70 65 20 74 68 65 20 6c 6f 6f 70 20 74 61 67 73 20  e the loop tags 
10d80 77 69 6c 6c 20 62 65 20 69 6e 6a 65 63 74 65 64  will be injected
10d90 0a 20 20 20 20 70 61 72 65 6e 74 4e 6f 64 65 2e  .    parentNode.
10da0 69 6e 73 65 72 74 42 65 66 6f 72 65 28 70 6c 61  insertBefore(pla
10db0 63 65 68 6f 6c 64 65 72 2c 20 64 6f 6d 29 3b 0a  ceholder, dom);.
10dc0 20 20 20 20 70 61 72 65 6e 74 4e 6f 64 65 2e 72      parentNode.r
10dd0 65 6d 6f 76 65 43 68 69 6c 64 28 64 6f 6d 29 3b  emoveChild(dom);
10de0 0a 0a 20 20 20 20 65 78 70 72 2e 75 70 64 61 74  ..    expr.updat
10df0 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 75 70 64  e = function upd
10e00 61 74 65 45 61 63 68 28 29 20 7b 0a 20 20 20 20  ateEach() {.    
10e10 20 20 2f 2f 20 67 65 74 20 74 68 65 20 6e 65 77    // get the new
10e20 20 69 74 65 6d 73 20 63 6f 6c 6c 65 63 74 69 6f   items collectio
10e30 6e 0a 20 20 20 20 20 20 65 78 70 72 2e 76 61 6c  n.      expr.val
10e40 75 65 20 3d 20 74 6d 70 6c 28 65 78 70 72 2e 76  ue = tmpl(expr.v
10e50 61 6c 2c 20 70 61 72 65 6e 74 29 3b 0a 0a 20 20  al, parent);..  
10e60 20 20 20 20 76 61 72 20 69 74 65 6d 73 20 3d 20      var items = 
10e70 65 78 70 72 2e 76 61 6c 75 65 3b 0a 20 20 20 20  expr.value;.    
10e80 20 20 76 61 72 20 66 72 61 67 20 3d 20 63 72 65    var frag = cre
10e90 61 74 65 46 72 61 67 6d 65 6e 74 28 29 3b 0a 20  ateFragment();. 
10ea0 20 20 20 20 20 76 61 72 20 69 73 4f 62 6a 65 63       var isObjec
10eb0 74 20 3d 20 21 69 73 41 72 72 61 79 28 69 74 65  t = !isArray(ite
10ec0 6d 73 29 20 26 26 20 21 69 73 53 74 72 69 6e 67  ms) && !isString
10ed0 28 69 74 65 6d 73 29 3b 0a 20 20 20 20 20 20 76  (items);.      v
10ee0 61 72 20 72 6f 6f 74 20 3d 20 70 6c 61 63 65 68  ar root = placeh
10ef0 6f 6c 64 65 72 2e 70 61 72 65 6e 74 4e 6f 64 65  older.parentNode
10f00 3b 0a 20 20 20 20 20 20 76 61 72 20 74 6d 70 49  ;.      var tmpI
10f10 74 65 6d 73 20 3d 20 5b 5d 3b 0a 20 20 20 20 20  tems = [];.     
10f20 20 76 61 72 20 68 61 73 4b 65 79 73 20 3d 20 69   var hasKeys = i
10f30 73 4f 62 6a 65 63 74 20 26 26 20 21 21 69 74 65  sObject && !!ite
10f40 6d 73 3b 0a 0a 20 20 20 20 20 20 2f 2f 20 69 66  ms;..      // if
10f50 20 74 68 69 73 20 44 4f 4d 20 77 61 73 20 72 65   this DOM was re
10f60 6d 6f 76 65 64 20 74 68 65 20 75 70 64 61 74 65  moved the update
10f70 20 68 65 72 65 20 69 73 20 75 73 65 6c 65 73 73   here is useless
10f80 0a 20 20 20 20 20 20 2f 2f 20 74 68 69 73 20 63  .      // this c
10f90 6f 6e 64 69 74 69 6f 6e 20 66 69 78 65 73 20 61  ondition fixes a
10fa0 6c 73 6f 20 61 20 77 65 69 72 64 20 61 73 79 6e  lso a weird asyn
10fb0 63 20 69 73 73 75 65 20 6f 6e 20 49 45 20 69 6e  c issue on IE in
10fc0 20 6f 75 72 20 75 6e 69 74 20 74 65 73 74 0a 20   our unit test. 
10fd0 20 20 20 20 20 69 66 20 28 21 72 6f 6f 74 29 20       if (!root) 
10fe0 7b 20 72 65 74 75 72 6e 20 7d 0a 0a 20 20 20 20  { return }..    
10ff0 20 20 2f 2f 20 6f 62 6a 65 63 74 20 6c 6f 6f 70    // object loop
11000 2e 20 61 6e 79 20 63 68 61 6e 67 65 73 20 63 61  . any changes ca
11010 75 73 65 20 66 75 6c 6c 20 72 65 64 72 61 77 0a  use full redraw.
11020 20 20 20 20 20 20 69 66 20 28 69 73 4f 62 6a 65        if (isObje
11030 63 74 29 20 7b 0a 20 20 20 20 20 20 20 20 69 74  ct) {.        it
11040 65 6d 73 20 3d 20 69 74 65 6d 73 20 3f 20 4f 62  ems = items ? Ob
11050 6a 65 63 74 2e 6b 65 79 73 28 69 74 65 6d 73 29  ject.keys(items)
11060 2e 6d 61 70 28 66 75 6e 63 74 69 6f 6e 20 28 6b  .map(function (k
11070 65 79 29 20 7b 20 72 65 74 75 72 6e 20 6d 6b 69  ey) { return mki
11080 74 65 6d 28 65 78 70 72 2c 20 69 74 65 6d 73 5b  tem(expr, items[
11090 6b 65 79 5d 2c 20 6b 65 79 29 3b 20 7d 29 20 3a  key], key); }) :
110a0 20 5b 5d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20   [];.      }..  
110b0 20 20 20 20 2f 2f 20 73 74 6f 72 65 20 74 68 65      // store the
110c0 20 61 6d 6f 75 6e 74 20 6f 66 20 66 69 6c 74 65   amount of filte
110d0 72 65 64 20 69 74 65 6d 73 0a 20 20 20 20 20 20  red items.      
110e0 76 61 72 20 66 69 6c 74 65 72 65 64 49 74 65 6d  var filteredItem
110f0 73 43 6f 75 6e 74 20 3d 20 30 3b 0a 0a 20 20 20  sCount = 0;..   
11100 20 20 20 2f 2f 20 6c 6f 6f 70 20 61 6c 6c 20 74     // loop all t
11110 68 65 20 6e 65 77 20 69 74 65 6d 73 0a 20 20 20  he new items.   
11120 20 20 20 65 61 63 68 28 69 74 65 6d 73 2c 20 66     each(items, f
11130 75 6e 63 74 69 6f 6e 20 28 5f 69 74 65 6d 2c 20  unction (_item, 
11140 69 6e 64 65 78 29 20 7b 0a 20 20 20 20 20 20 20  index) {.       
11150 20 76 61 72 20 69 20 3d 20 69 6e 64 65 78 20 2d   var i = index -
11160 20 66 69 6c 74 65 72 65 64 49 74 65 6d 73 43 6f   filteredItemsCo
11170 75 6e 74 3b 0a 20 20 20 20 20 20 20 20 76 61 72  unt;.        var
11180 20 69 74 65 6d 20 3d 20 21 68 61 73 4b 65 79 73   item = !hasKeys
11190 20 26 26 20 65 78 70 72 2e 6b 65 79 20 3f 20 6d   && expr.key ? m
111a0 6b 69 74 65 6d 28 65 78 70 72 2c 20 5f 69 74 65  kitem(expr, _ite
111b0 6d 2c 20 69 6e 64 65 78 29 20 3a 20 5f 69 74 65  m, index) : _ite
111c0 6d 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20 73  m;..        // s
111d0 6b 69 70 20 74 68 69 73 20 69 74 65 6d 20 62 65  kip this item be
111e0 63 61 75 73 65 20 69 74 20 6d 75 73 74 20 62 65  cause it must be
111f0 20 66 69 6c 74 65 72 65 64 0a 20 20 20 20 20 20   filtered.      
11200 20 20 69 66 20 28 69 66 45 78 70 72 20 26 26 20    if (ifExpr && 
11210 21 74 6d 70 6c 28 69 66 45 78 70 72 2c 20 65 78  !tmpl(ifExpr, ex
11220 74 65 6e 64 28 63 72 65 61 74 65 28 70 61 72 65  tend(create(pare
11230 6e 74 29 2c 20 69 74 65 6d 29 29 29 20 7b 0a 20  nt), item))) {. 
11240 20 20 20 20 20 20 20 20 20 66 69 6c 74 65 72 65           filtere
11250 64 49 74 65 6d 73 43 6f 75 6e 74 20 2b 2b 3b 0a  dItemsCount ++;.
11260 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11270 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  .        }..    
11280 20 20 20 20 76 61 72 20 69 74 65 6d 49 64 20 3d      var itemId =
11290 20 67 65 74 49 74 65 6d 49 64 28 6b 65 79 41 74   getItemId(keyAt
112a0 74 72 2c 20 5f 69 74 65 6d 2c 20 69 74 65 6d 2c  tr, _item, item,
112b0 20 68 61 73 4b 65 79 41 74 74 72 45 78 70 72 29   hasKeyAttrExpr)
112c0 3b 0a 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6f  ;.        // reo
112d0 72 64 65 72 20 6f 6e 6c 79 20 69 66 20 74 68 65  rder only if the
112e0 20 69 74 65 6d 73 20 61 72 65 20 6e 6f 74 20 6f   items are not o
112f0 62 6a 65 63 74 73 0a 20 20 20 20 20 20 20 20 2f  bjects.        /
11300 2f 20 6f 72 20 61 20 6b 65 79 20 61 74 74 72 69  / or a key attri
11310 62 75 74 65 20 68 61 73 20 62 65 65 6e 20 70 72  bute has been pr
11320 6f 76 69 64 65 64 0a 20 20 20 20 20 20 20 20 76  ovided.        v
11330 61 72 20 64 6f 52 65 6f 72 64 65 72 20 3d 20 21  ar doReorder = !
11340 69 73 4f 62 6a 65 63 74 20 26 26 20 6d 75 73 74  isObject && must
11350 52 65 6f 72 64 65 72 20 26 26 20 74 79 70 65 6f  Reorder && typeo
11360 66 20 5f 69 74 65 6d 20 3d 3d 3d 20 54 5f 4f 42  f _item === T_OB
11370 4a 45 43 54 20 7c 7c 20 6b 65 79 41 74 74 72 3b  JECT || keyAttr;
11380 0a 20 20 20 20 20 20 20 20 76 61 72 20 6f 6c 64  .        var old
11390 50 6f 73 20 3d 20 6f 6c 64 49 74 65 6d 73 2e 69  Pos = oldItems.i
113a0 6e 64 65 78 4f 66 28 69 74 65 6d 49 64 29 3b 0a  ndexOf(itemId);.
113b0 20 20 20 20 20 20 20 20 76 61 72 20 69 73 4e 65          var isNe
113c0 77 20 3d 20 6f 6c 64 50 6f 73 20 3d 3d 3d 20 2d  w = oldPos === -
113d0 31 3b 0a 20 20 20 20 20 20 20 20 76 61 72 20 70  1;.        var p
113e0 6f 73 20 3d 20 21 69 73 4e 65 77 20 26 26 20 64  os = !isNew && d
113f0 6f 52 65 6f 72 64 65 72 20 3f 20 6f 6c 64 50 6f  oReorder ? oldPo
11400 73 20 3a 20 69 3b 0a 20 20 20 20 20 20 20 20 2f  s : i;.        /
11410 2f 20 64 6f 65 73 20 61 20 74 61 67 20 65 78 69  / does a tag exi
11420 73 74 20 69 6e 20 74 68 69 73 20 70 6f 73 69 74  st in this posit
11430 69 6f 6e 3f 0a 20 20 20 20 20 20 20 20 76 61 72  ion?.        var
11440 20 74 61 67 20 3d 20 74 61 67 73 5b 70 6f 73 5d   tag = tags[pos]
11450 3b 0a 20 20 20 20 20 20 20 20 76 61 72 20 6d 75  ;.        var mu
11460 73 74 41 70 70 65 6e 64 20 3d 20 69 20 3e 3d 20  stAppend = i >= 
11470 6f 6c 64 49 74 65 6d 73 2e 6c 65 6e 67 74 68 3b  oldItems.length;
11480 0a 20 20 20 20 20 20 20 20 76 61 72 20 6d 75 73  .        var mus
11490 74 43 72 65 61 74 65 20 3d 20 64 6f 52 65 6f 72  tCreate = doReor
114a0 64 65 72 20 26 26 20 69 73 4e 65 77 20 7c 7c 20  der && isNew || 
114b0 21 64 6f 52 65 6f 72 64 65 72 20 26 26 20 21 74  !doReorder && !t
114c0 61 67 20 7c 7c 20 21 74 61 67 73 5b 69 5d 3b 0a  ag || !tags[i];.
114d0 0a 20 20 20 20 20 20 20 20 2f 2f 20 6e 65 77 20  .        // new 
114e0 74 61 67 0a 20 20 20 20 20 20 20 20 69 66 20 28  tag.        if (
114f0 6d 75 73 74 43 72 65 61 74 65 29 20 7b 0a 20 20  mustCreate) {.  
11500 20 20 20 20 20 20 20 20 74 61 67 20 3d 20 63 72          tag = cr
11510 65 61 74 65 54 61 67 28 69 6d 70 6c 2c 20 7b 0a  eateTag(impl, {.
11520 20 20 20 20 20 20 20 20 20 20 20 20 70 61 72 65              pare
11530 6e 74 3a 20 70 61 72 65 6e 74 2c 0a 20 20 20 20  nt: parent,.    
11540 20 20 20 20 20 20 20 20 69 73 4c 6f 6f 70 3a 20          isLoop: 
11550 69 73 4c 6f 6f 70 2c 0a 20 20 20 20 20 20 20 20  isLoop,.        
11560 20 20 20 20 69 73 41 6e 6f 6e 79 6d 6f 75 73 3a      isAnonymous:
11570 20 69 73 41 6e 6f 6e 79 6d 6f 75 73 2c 0a 20 20   isAnonymous,.  
11580 20 20 20 20 20 20 20 20 20 20 74 61 67 4e 61 6d            tagNam
11590 65 3a 20 74 61 67 4e 61 6d 65 2c 0a 20 20 20 20  e: tagName,.    
115a0 20 20 20 20 20 20 20 20 72 6f 6f 74 3a 20 64 6f          root: do
115b0 6d 2e 63 6c 6f 6e 65 4e 6f 64 65 28 69 73 41 6e  m.cloneNode(isAn
115c0 6f 6e 79 6d 6f 75 73 29 2c 0a 20 20 20 20 20 20  onymous),.      
115d0 20 20 20 20 20 20 69 74 65 6d 3a 20 69 74 65 6d        item: item
115e0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ,.            in
115f0 64 65 78 3a 20 69 2c 0a 20 20 20 20 20 20 20 20  dex: i,.        
11600 20 20 7d 2c 20 69 6e 6e 65 72 48 54 4d 4c 29 3b    }, innerHTML);
11610 0a 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 6d  ..          // m
11620 6f 75 6e 74 20 74 68 65 20 74 61 67 0a 20 20 20  ount the tag.   
11630 20 20 20 20 20 20 20 74 61 67 2e 6d 6f 75 6e 74         tag.mount
11640 28 29 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 69  ();..          i
11650 66 20 28 6d 75 73 74 41 70 70 65 6e 64 29 0a 20  f (mustAppend). 
11660 20 20 20 20 20 20 20 20 20 20 20 7b 20 61 70 70             { app
11670 65 6e 64 2e 61 70 70 6c 79 28 74 61 67 2c 20 5b  end.apply(tag, [
11680 66 72 61 67 20 7c 7c 20 72 6f 6f 74 2c 20 69 73  frag || root, is
11690 56 69 72 74 75 61 6c 5d 29 3b 20 7d 0a 20 20 20  Virtual]); }.   
116a0 20 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20         else.    
116b0 20 20 20 20 20 20 20 20 7b 20 69 6e 73 65 72 74          { insert
116c0 2e 61 70 70 6c 79 28 74 61 67 2c 20 5b 72 6f 6f  .apply(tag, [roo
116d0 74 2c 20 74 61 67 73 5b 69 5d 2c 20 69 73 56 69  t, tags[i], isVi
116e0 72 74 75 61 6c 5d 29 3b 20 7d 0a 0a 20 20 20 20  rtual]); }..    
116f0 20 20 20 20 20 20 69 66 20 28 21 6d 75 73 74 41        if (!mustA
11700 70 70 65 6e 64 29 20 7b 20 6f 6c 64 49 74 65 6d  ppend) { oldItem
11710 73 2e 73 70 6c 69 63 65 28 69 2c 20 30 2c 20 69  s.splice(i, 0, i
11720 74 65 6d 29 3b 20 7d 0a 20 20 20 20 20 20 20 20  tem); }.        
11730 20 20 74 61 67 73 2e 73 70 6c 69 63 65 28 69 2c    tags.splice(i,
11740 20 30 2c 20 74 61 67 29 3b 0a 20 20 20 20 20 20   0, tag);.      
11750 20 20 20 20 69 66 20 28 63 68 69 6c 64 29 20 7b      if (child) {
11760 20 61 72 72 61 79 69 73 68 41 64 64 28 70 61 72   arrayishAdd(par
11770 65 6e 74 2e 74 61 67 73 2c 20 74 61 67 4e 61 6d  ent.tags, tagNam
11780 65 2c 20 74 61 67 2c 20 74 72 75 65 29 3b 20 7d  e, tag, true); }
11790 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else 
117a0 69 66 20 28 70 6f 73 20 21 3d 3d 20 69 20 26 26  if (pos !== i &&
117b0 20 64 6f 52 65 6f 72 64 65 72 29 20 7b 0a 20 20   doReorder) {.  
117c0 20 20 20 20 20 20 20 20 2f 2f 20 6d 6f 76 65 0a          // move.
117d0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
117e0 79 41 74 74 72 20 7c 7c 20 63 6f 6e 74 61 69 6e  yAttr || contain
117f0 73 28 69 74 65 6d 73 2c 20 6f 6c 64 49 74 65 6d  s(items, oldItem
11800 73 5b 70 6f 73 5d 29 29 20 7b 0a 20 20 20 20 20  s[pos])) {.     
11810 20 20 20 20 20 20 20 6d 6f 76 65 2e 61 70 70 6c         move.appl
11820 79 28 74 61 67 2c 20 5b 72 6f 6f 74 2c 20 74 61  y(tag, [root, ta
11830 67 73 5b 69 5d 2c 20 69 73 56 69 72 74 75 61 6c  gs[i], isVirtual
11840 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ]);.            
11850 2f 2f 20 6d 6f 76 65 20 74 68 65 20 6f 6c 64 20  // move the old 
11860 74 61 67 20 69 6e 73 74 61 6e 63 65 0a 20 20 20  tag instance.   
11870 20 20 20 20 20 20 20 20 20 74 61 67 73 2e 73 70           tags.sp
11880 6c 69 63 65 28 69 2c 20 30 2c 20 74 61 67 73 2e  lice(i, 0, tags.
11890 73 70 6c 69 63 65 28 70 6f 73 2c 20 31 29 5b 30  splice(pos, 1)[0
118a0 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ]);.            
118b0 2f 2f 20 6d 6f 76 65 20 74 68 65 20 6f 6c 64 20  // move the old 
118c0 69 74 65 6d 0a 20 20 20 20 20 20 20 20 20 20 20  item.           
118d0 20 6f 6c 64 49 74 65 6d 73 2e 73 70 6c 69 63 65   oldItems.splice
118e0 28 69 2c 20 30 2c 20 6f 6c 64 49 74 65 6d 73 2e  (i, 0, oldItems.
118f0 73 70 6c 69 63 65 28 70 6f 73 2c 20 31 29 5b 30  splice(pos, 1)[0
11900 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  ]);.          }.
11910 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 75 70  .          // up
11920 64 61 74 65 20 74 68 65 20 70 6f 73 69 74 69 6f  date the positio
11930 6e 20 61 74 74 72 69 62 75 74 65 20 69 66 20 69  n attribute if i
11940 74 20 65 78 69 73 74 73 0a 20 20 20 20 20 20 20  t exists.       
11950 20 20 20 69 66 20 28 65 78 70 72 2e 70 6f 73 29     if (expr.pos)
11960 20 7b 20 74 61 67 5b 65 78 70 72 2e 70 6f 73 5d   { tag[expr.pos]
11970 20 3d 20 69 3b 20 7d 0a 0a 20 20 20 20 20 20 20   = i; }..       
11980 20 20 20 2f 2f 20 69 66 20 74 68 65 20 6c 6f 6f     // if the loo
11990 70 20 74 61 67 73 20 61 72 65 20 6e 6f 74 20 63  p tags are not c
119a0 75 73 74 6f 6d 0a 20 20 20 20 20 20 20 20 20 20  ustom.          
119b0 2f 2f 20 77 65 20 6e 65 65 64 20 74 6f 20 6d 6f  // we need to mo
119c0 76 65 20 61 6c 6c 20 74 68 65 69 72 20 63 75 73  ve all their cus
119d0 74 6f 6d 20 74 61 67 73 20 69 6e 74 6f 20 74 68  tom tags into th
119e0 65 20 72 69 67 68 74 20 70 6f 73 69 74 69 6f 6e  e right position
119f0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21  .          if (!
11a00 63 68 69 6c 64 20 26 26 20 74 61 67 2e 74 61 67  child && tag.tag
11a10 73 29 20 7b 20 6d 6f 76 65 4e 65 73 74 65 64 54  s) { moveNestedT
11a20 61 67 73 2e 63 61 6c 6c 28 74 61 67 2c 20 69 29  ags.call(tag, i)
11a30 3b 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20  ; }.        }.. 
11a40 20 20 20 20 20 20 20 2f 2f 20 63 61 63 68 65 20         // cache 
11a50 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 74 65  the original ite
11a60 6d 20 74 6f 20 75 73 65 20 69 74 20 69 6e 20 74  m to use it in t
11a70 68 65 20 65 76 65 6e 74 73 20 62 6f 75 6e 64 20  he events bound 
11a80 74 6f 20 74 68 69 73 20 6e 6f 64 65 0a 20 20 20  to this node.   
11a90 20 20 20 20 20 2f 2f 20 61 6e 64 20 69 74 73 20       // and its 
11aa0 63 68 69 6c 64 72 65 6e 0a 20 20 20 20 20 20 20  children.       
11ab0 20 65 78 74 65 6e 64 28 74 61 67 2e 5f 5f 2c 20   extend(tag.__, 
11ac0 7b 0a 20 20 20 20 20 20 20 20 20 20 69 74 65 6d  {.          item
11ad0 3a 20 69 74 65 6d 2c 0a 20 20 20 20 20 20 20 20  : item,.        
11ae0 20 20 69 6e 64 65 78 3a 20 69 2c 0a 20 20 20 20    index: i,.    
11af0 20 20 20 20 20 20 70 61 72 65 6e 74 3a 20 70 61        parent: pa
11b00 72 65 6e 74 0a 20 20 20 20 20 20 20 20 7d 29 3b  rent.        });
11b10 0a 0a 20 20 20 20 20 20 20 20 74 6d 70 49 74 65  ..        tmpIte
11b20 6d 73 5b 69 5d 20 3d 20 69 74 65 6d 49 64 3b 0a  ms[i] = itemId;.
11b30 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 6d 75  .        if (!mu
11b40 73 74 43 72 65 61 74 65 29 20 7b 20 74 61 67 2e  stCreate) { tag.
11b50 75 70 64 61 74 65 28 69 74 65 6d 29 3b 20 7d 0a  update(item); }.
11b60 20 20 20 20 20 20 7d 29 3b 0a 0a 20 20 20 20 20        });..     
11b70 20 2f 2f 20 72 65 6d 6f 76 65 20 74 68 65 20 72   // remove the r
11b80 65 64 75 6e 64 61 6e 74 20 74 61 67 73 0a 20 20  edundant tags.  
11b90 20 20 20 20 75 6e 6d 6f 75 6e 74 52 65 64 75 6e      unmountRedun
11ba0 64 61 6e 74 28 69 74 65 6d 73 2c 20 74 61 67 73  dant(items, tags
11bb0 2c 20 66 69 6c 74 65 72 65 64 49 74 65 6d 73 43  , filteredItemsC
11bc0 6f 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20 2f 2f  ount);..      //
11bd0 20 63 6c 6f 6e 65 20 74 68 65 20 69 74 65 6d 73   clone the items
11be0 20 61 72 72 61 79 0a 20 20 20 20 20 20 6f 6c 64   array.      old
11bf0 49 74 65 6d 73 20 3d 20 74 6d 70 49 74 65 6d 73  Items = tmpItems
11c00 2e 73 6c 69 63 65 28 29 3b 0a 0a 20 20 20 20 20  .slice();..     
11c10 20 72 6f 6f 74 2e 69 6e 73 65 72 74 42 65 66 6f   root.insertBefo
11c20 72 65 28 66 72 61 67 2c 20 70 6c 61 63 65 68 6f  re(frag, placeho
11c30 6c 64 65 72 29 3b 0a 20 20 20 20 7d 3b 0a 0a 20  lder);.    };.. 
11c40 20 20 20 65 78 70 72 2e 75 6e 6d 6f 75 6e 74 20     expr.unmount 
11c50 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  = function () {.
11c60 20 20 20 20 20 20 65 61 63 68 28 74 61 67 73 2c        each(tags,
11c70 20 66 75 6e 63 74 69 6f 6e 20 28 74 29 20 7b 20   function (t) { 
11c80 74 2e 75 6e 6d 6f 75 6e 74 28 29 3b 20 7d 29 3b  t.unmount(); });
11c90 0a 20 20 20 20 7d 3b 0a 0a 20 20 20 20 72 65 74  .    };..    ret
11ca0 75 72 6e 20 65 78 70 72 0a 20 20 7d 0a 0a 20 20  urn expr.  }..  
11cb0 76 61 72 20 52 65 66 45 78 70 72 20 3d 20 7b 0a  var RefExpr = {.
11cc0 20 20 20 20 69 6e 69 74 3a 20 66 75 6e 63 74 69      init: functi
11cd0 6f 6e 20 69 6e 69 74 28 64 6f 6d 2c 20 70 61 72  on init(dom, par
11ce0 65 6e 74 2c 20 61 74 74 72 4e 61 6d 65 2c 20 61  ent, attrName, a
11cf0 74 74 72 56 61 6c 75 65 29 20 7b 0a 20 20 20 20  ttrValue) {.    
11d00 20 20 74 68 69 73 2e 64 6f 6d 20 3d 20 64 6f 6d    this.dom = dom
11d10 3b 0a 20 20 20 20 20 20 74 68 69 73 2e 61 74 74  ;.      this.att
11d20 72 20 3d 20 61 74 74 72 4e 61 6d 65 3b 0a 20 20  r = attrName;.  
11d30 20 20 20 20 74 68 69 73 2e 72 61 77 56 61 6c 75      this.rawValu
11d40 65 20 3d 20 61 74 74 72 56 61 6c 75 65 3b 0a 20  e = attrValue;. 
11d50 20 20 20 20 20 74 68 69 73 2e 70 61 72 65 6e 74       this.parent
11d60 20 3d 20 70 61 72 65 6e 74 3b 0a 20 20 20 20 20   = parent;.     
11d70 20 74 68 69 73 2e 68 61 73 45 78 70 20 3d 20 74   this.hasExp = t
11d80 6d 70 6c 2e 68 61 73 45 78 70 72 28 61 74 74 72  mpl.hasExpr(attr
11d90 56 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 72 65  Value);.      re
11da0 74 75 72 6e 20 74 68 69 73 0a 20 20 20 20 7d 2c  turn this.    },
11db0 0a 20 20 20 20 75 70 64 61 74 65 3a 20 66 75 6e  .    update: fun
11dc0 63 74 69 6f 6e 20 75 70 64 61 74 65 28 29 20 7b  ction update() {
11dd0 0a 20 20 20 20 20 20 76 61 72 20 6f 6c 64 20 3d  .      var old =
11de0 20 74 68 69 73 2e 76 61 6c 75 65 3b 0a 20 20 20   this.value;.   
11df0 20 20 20 76 61 72 20 63 75 73 74 6f 6d 50 61 72     var customPar
11e00 65 6e 74 20 3d 20 74 68 69 73 2e 70 61 72 65 6e  ent = this.paren
11e10 74 20 26 26 20 67 65 74 49 6d 6d 65 64 69 61 74  t && getImmediat
11e20 65 43 75 73 74 6f 6d 50 61 72 65 6e 74 28 74 68  eCustomParent(th
11e30 69 73 2e 70 61 72 65 6e 74 29 3b 0a 20 20 20 20  is.parent);.    
11e40 20 20 2f 2f 20 69 66 20 74 68 65 20 72 65 66 65    // if the refe
11e50 72 65 6e 63 65 64 20 65 6c 65 6d 65 6e 74 20 69  renced element i
11e60 73 20 61 20 63 75 73 74 6f 6d 20 74 61 67 2c 20  s a custom tag, 
11e70 74 68 65 6e 20 77 65 20 73 65 74 20 74 68 65 20  then we set the 
11e80 74 61 67 20 69 74 73 65 6c 66 2c 20 72 61 74 68  tag itself, rath
11e90 65 72 20 74 68 61 6e 20 44 4f 4d 0a 20 20 20 20  er than DOM.    
11ea0 20 20 76 61 72 20 74 61 67 4f 72 44 6f 6d 20 3d    var tagOrDom =
11eb0 20 74 68 69 73 2e 64 6f 6d 2e 5f 5f 72 65 66 20   this.dom.__ref 
11ec0 7c 7c 20 74 68 69 73 2e 74 61 67 20 7c 7c 20 74  || this.tag || t
11ed0 68 69 73 2e 64 6f 6d 3b 0a 0a 20 20 20 20 20 20  his.dom;..      
11ee0 74 68 69 73 2e 76 61 6c 75 65 20 3d 20 74 68 69  this.value = thi
11ef0 73 2e 68 61 73 45 78 70 20 3f 20 74 6d 70 6c 28  s.hasExp ? tmpl(
11f00 74 68 69 73 2e 72 61 77 56 61 6c 75 65 2c 20 74  this.rawValue, t
11f10 68 69 73 2e 70 61 72 65 6e 74 29 20 3a 20 74 68  his.parent) : th
11f20 69 73 2e 72 61 77 56 61 6c 75 65 3b 0a 0a 20 20  is.rawValue;..  
11f30 20 20 20 20 2f 2f 20 74 68 65 20 6e 61 6d 65 20      // the name 
11f40 63 68 61 6e 67 65 64 2c 20 73 6f 20 77 65 20 6e  changed, so we n
11f50 65 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 69 74  eed to remove it
11f60 20 66 72 6f 6d 20 74 68 65 20 6f 6c 64 20 6b 65   from the old ke
11f70 79 20 28 69 66 20 70 72 65 73 65 6e 74 29 0a 20  y (if present). 
11f80 20 20 20 20 20 69 66 20 28 21 69 73 42 6c 61 6e       if (!isBlan
11f90 6b 28 6f 6c 64 29 20 26 26 20 63 75 73 74 6f 6d  k(old) && custom
11fa0 50 61 72 65 6e 74 29 20 7b 20 61 72 72 61 79 69  Parent) { arrayi
11fb0 73 68 52 65 6d 6f 76 65 28 63 75 73 74 6f 6d 50  shRemove(customP
11fc0 61 72 65 6e 74 2e 72 65 66 73 2c 20 6f 6c 64 2c  arent.refs, old,
11fd0 20 74 61 67 4f 72 44 6f 6d 29 3b 20 7d 0a 20 20   tagOrDom); }.  
11fe0 20 20 20 20 69 66 20 28 21 69 73 42 6c 61 6e 6b      if (!isBlank
11ff0 28 74 68 69 73 2e 76 61 6c 75 65 29 20 26 26 20  (this.value) && 
12000 69 73 53 74 72 69 6e 67 28 74 68 69 73 2e 76 61  isString(this.va
12010 6c 75 65 29 29 20 7b 0a 20 20 20 20 20 20 20 20  lue)) {.        
12020 2f 2f 20 61 64 64 20 69 74 20 74 6f 20 74 68 65  // add it to the
12030 20 72 65 66 73 20 6f 66 20 70 61 72 65 6e 74 20   refs of parent 
12040 74 61 67 20 28 74 68 69 73 20 62 65 68 61 76 69  tag (this behavi
12050 6f 72 20 77 61 73 20 63 68 61 6e 67 65 64 20 3e  or was changed >
12060 3d 33 2e 30 29 0a 20 20 20 20 20 20 20 20 69 66  =3.0).        if
12070 20 28 63 75 73 74 6f 6d 50 61 72 65 6e 74 29 20   (customParent) 
12080 7b 20 61 72 72 61 79 69 73 68 41 64 64 28 0a 20  { arrayishAdd(. 
12090 20 20 20 20 20 20 20 20 20 63 75 73 74 6f 6d 50           customP
120a0 61 72 65 6e 74 2e 72 65 66 73 2c 0a 20 20 20 20  arent.refs,.    
120b0 20 20 20 20 20 20 74 68 69 73 2e 76 61 6c 75 65        this.value
120c0 2c 0a 20 20 20 20 20 20 20 20 20 20 74 61 67 4f  ,.          tagO
120d0 72 44 6f 6d 2c 0a 20 20 20 20 20 20 20 20 20 20  rDom,.          
120e0 2f 2f 20 75 73 65 20 61 6e 20 61 72 72 61 79 20  // use an array 
120f0 69 66 20 69 74 27 73 20 61 20 6c 6f 6f 70 65 64  if it's a looped
12100 20 6e 6f 64 65 20 61 6e 64 20 74 68 65 20 72 65   node and the re
12110 66 20 69 73 20 6e 6f 74 20 61 6e 20 65 78 70 72  f is not an expr
12120 65 73 73 69 6f 6e 0a 20 20 20 20 20 20 20 20 20  ession.         
12130 20 6e 75 6c 6c 2c 0a 20 20 20 20 20 20 20 20 20   null,.         
12140 20 74 68 69 73 2e 70 61 72 65 6e 74 2e 5f 5f 2e   this.parent.__.
12150 69 6e 64 65 78 0a 20 20 20 20 20 20 20 20 29 3b  index.        );
12160 20 7d 0a 0a 20 20 20 20 20 20 20 20 69 66 20 28   }..        if (
12170 74 68 69 73 2e 76 61 6c 75 65 20 21 3d 3d 20 6f  this.value !== o
12180 6c 64 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ld) {.          
12190 73 65 74 41 74 74 72 69 62 75 74 65 28 74 68 69  setAttribute(thi
121a0 73 2e 64 6f 6d 2c 20 74 68 69 73 2e 61 74 74 72  s.dom, this.attr
121b0 2c 20 74 68 69 73 2e 76 61 6c 75 65 29 3b 0a 20  , this.value);. 
121c0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
121d0 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20   else {.        
121e0 72 65 6d 6f 76 65 41 74 74 72 69 62 75 74 65 28  removeAttribute(
121f0 74 68 69 73 2e 64 6f 6d 2c 20 74 68 69 73 2e 61  this.dom, this.a
12200 74 74 72 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  ttr);.      }.. 
12210 20 20 20 20 20 2f 2f 20 63 61 63 68 65 20 74 68       // cache th
12220 65 20 72 65 66 20 62 6f 75 6e 64 20 74 6f 20 74  e ref bound to t
12230 68 69 73 20 64 6f 6d 20 6e 6f 64 65 0a 20 20 20  his dom node.   
12240 20 20 20 2f 2f 20 74 6f 20 72 65 75 73 65 20 69     // to reuse i
12250 74 20 69 6e 20 66 75 74 75 72 65 20 28 73 65 65  t in future (see
12260 20 61 6c 73 6f 20 23 32 33 32 39 29 0a 20 20 20   also #2329).   
12270 20 20 20 69 66 20 28 21 74 68 69 73 2e 64 6f 6d     if (!this.dom
12280 2e 5f 5f 72 65 66 29 20 7b 20 74 68 69 73 2e 64  .__ref) { this.d
12290 6f 6d 2e 5f 5f 72 65 66 20 3d 20 74 61 67 4f 72  om.__ref = tagOr
122a0 44 6f 6d 3b 20 7d 0a 20 20 20 20 7d 2c 0a 20 20  Dom; }.    },.  
122b0 20 20 75 6e 6d 6f 75 6e 74 3a 20 66 75 6e 63 74    unmount: funct
122c0 69 6f 6e 20 75 6e 6d 6f 75 6e 74 28 29 20 7b 0a  ion unmount() {.
122d0 20 20 20 20 20 20 76 61 72 20 74 61 67 4f 72 44        var tagOrD
122e0 6f 6d 20 3d 20 74 68 69 73 2e 74 61 67 20 7c 7c  om = this.tag ||
122f0 20 74 68 69 73 2e 64 6f 6d 3b 0a 20 20 20 20 20   this.dom;.     
12300 20 76 61 72 20 63 75 73 74 6f 6d 50 61 72 65 6e   var customParen
12310 74 20 3d 20 74 68 69 73 2e 70 61 72 65 6e 74 20  t = this.parent 
12320 26 26 20 67 65 74 49 6d 6d 65 64 69 61 74 65 43  && getImmediateC
12330 75 73 74 6f 6d 50 61 72 65 6e 74 28 74 68 69 73  ustomParent(this
12340 2e 70 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20  .parent);.      
12350 69 66 20 28 21 69 73 42 6c 61 6e 6b 28 74 68 69  if (!isBlank(thi
12360 73 2e 76 61 6c 75 65 29 20 26 26 20 63 75 73 74  s.value) && cust
12370 6f 6d 50 61 72 65 6e 74 29 0a 20 20 20 20 20 20  omParent).      
12380 20 20 7b 20 61 72 72 61 79 69 73 68 52 65 6d 6f    { arrayishRemo
12390 76 65 28 63 75 73 74 6f 6d 50 61 72 65 6e 74 2e  ve(customParent.
123a0 72 65 66 73 2c 20 74 68 69 73 2e 76 61 6c 75 65  refs, this.value
123b0 2c 20 74 61 67 4f 72 44 6f 6d 29 3b 20 7d 0a 20  , tagOrDom); }. 
123c0 20 20 20 7d 0a 20 20 7d 3b 0a 0a 20 20 2f 2a 2a     }.  };..  /**
123d0 0a 20 20 20 2a 20 43 72 65 61 74 65 20 61 20 6e  .   * Create a n
123e0 65 77 20 72 65 66 20 64 69 72 65 63 74 69 76 65  ew ref directive
123f0 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20 7b  .   * @param   {
12400 20 48 54 4d 4c 45 6c 65 6d 65 6e 74 20 7d 20 64   HTMLElement } d
12410 6f 6d 20 2d 20 64 6f 6d 20 6e 6f 64 65 20 68 61  om - dom node ha
12420 76 69 6e 67 20 74 68 65 20 72 65 66 20 61 74 74  ving the ref att
12430 72 69 62 75 74 65 0a 20 20 20 2a 20 40 70 61 72  ribute.   * @par
12440 61 6d 20 20 20 7b 20 54 61 67 20 7d 20 63 6f 6e  am   { Tag } con
12450 74 65 78 74 20 2d 20 74 61 67 20 69 6e 73 74 61  text - tag insta
12460 6e 63 65 20 77 68 65 72 65 20 74 68 65 20 44 4f  nce where the DO
12470 4d 20 6e 6f 64 65 20 69 73 20 6c 6f 63 61 74 65  M node is locate
12480 64 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20  d.   * @param   
12490 7b 20 53 74 72 69 6e 67 20 7d 20 61 74 74 72 4e  { String } attrN
124a0 61 6d 65 20 2d 20 65 69 74 68 65 72 20 27 72 65  ame - either 're
124b0 66 27 20 6f 72 20 27 64 61 74 61 2d 72 65 66 27  f' or 'data-ref'
124c0 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20 7b  .   * @param   {
124d0 20 53 74 72 69 6e 67 20 7d 20 61 74 74 72 56 61   String } attrVa
124e0 6c 75 65 20 2d 20 76 61 6c 75 65 20 6f 66 20 74  lue - value of t
124f0 68 65 20 72 65 66 20 61 74 74 72 69 62 75 74 65  he ref attribute
12500 0a 20 20 20 2a 20 40 72 65 74 75 72 6e 73 20 7b  .   * @returns {
12510 20 52 65 66 45 78 70 72 20 7d 20 61 20 6e 65 77   RefExpr } a new
12520 20 52 65 66 45 78 70 72 20 6f 62 6a 65 63 74 0a   RefExpr object.
12530 20 20 20 2a 2f 0a 20 20 66 75 6e 63 74 69 6f 6e     */.  function
12540 20 63 72 65 61 74 65 52 65 66 44 69 72 65 63 74   createRefDirect
12550 69 76 65 28 64 6f 6d 2c 20 74 61 67 2c 20 61 74  ive(dom, tag, at
12560 74 72 4e 61 6d 65 2c 20 61 74 74 72 56 61 6c 75  trName, attrValu
12570 65 29 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  e) {.    return 
12580 63 72 65 61 74 65 28 52 65 66 45 78 70 72 29 2e  create(RefExpr).
12590 69 6e 69 74 28 64 6f 6d 2c 20 74 61 67 2c 20 61  init(dom, tag, a
125a0 74 74 72 4e 61 6d 65 2c 20 61 74 74 72 56 61 6c  ttrName, attrVal
125b0 75 65 29 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20  ue).  }..  /**. 
125c0 20 20 2a 20 54 72 69 67 67 65 72 20 74 68 65 20    * Trigger the 
125d0 75 6e 6d 6f 75 6e 74 20 6d 65 74 68 6f 64 20 6f  unmount method o
125e0 6e 20 61 6c 6c 20 74 68 65 20 65 78 70 72 65 73  n all the expres
125f0 73 69 6f 6e 73 0a 20 20 20 2a 20 40 70 61 72 61  sions.   * @para
12600 6d 20 20 20 7b 20 41 72 72 61 79 20 7d 20 65 78  m   { Array } ex
12610 70 72 65 73 73 69 6f 6e 73 20 2d 20 44 4f 4d 20  pressions - DOM 
12620 65 78 70 72 65 73 73 69 6f 6e 73 0a 20 20 20 2a  expressions.   *
12630 2f 0a 20 20 66 75 6e 63 74 69 6f 6e 20 75 6e 6d  /.  function unm
12640 6f 75 6e 74 41 6c 6c 28 65 78 70 72 65 73 73 69  ountAll(expressi
12650 6f 6e 73 29 20 7b 0a 20 20 20 20 65 61 63 68 28  ons) {.    each(
12660 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 66 75 6e  expressions, fun
12670 63 74 69 6f 6e 20 28 65 78 70 72 29 20 7b 0a 20  ction (expr) {. 
12680 20 20 20 20 20 69 66 20 28 65 78 70 72 2e 75 6e       if (expr.un
12690 6d 6f 75 6e 74 29 20 7b 20 65 78 70 72 2e 75 6e  mount) { expr.un
126a0 6d 6f 75 6e 74 28 74 72 75 65 29 3b 20 7d 0a 20  mount(true); }. 
126b0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 65 78       else if (ex
126c0 70 72 2e 74 61 67 4e 61 6d 65 29 20 7b 20 65 78  pr.tagName) { ex
126d0 70 72 2e 74 61 67 2e 75 6e 6d 6f 75 6e 74 28 74  pr.tag.unmount(t
126e0 72 75 65 29 3b 20 7d 0a 20 20 20 20 20 20 65 6c  rue); }.      el
126f0 73 65 20 69 66 20 28 65 78 70 72 2e 75 6e 6d 6f  se if (expr.unmo
12700 75 6e 74 29 20 7b 20 65 78 70 72 2e 75 6e 6d 6f  unt) { expr.unmo
12710 75 6e 74 28 29 3b 20 7d 0a 20 20 20 20 7d 29 3b  unt(); }.    });
12720 0a 20 20 7d 0a 0a 20 20 76 61 72 20 49 66 45 78  .  }..  var IfEx
12730 70 72 20 3d 20 7b 0a 20 20 20 20 69 6e 69 74 3a  pr = {.    init:
12740 20 66 75 6e 63 74 69 6f 6e 20 69 6e 69 74 28 64   function init(d
12750 6f 6d 2c 20 74 61 67 2c 20 65 78 70 72 29 20 7b  om, tag, expr) {
12760 0a 20 20 20 20 20 20 72 65 6d 6f 76 65 41 74 74  .      removeAtt
12770 72 69 62 75 74 65 28 64 6f 6d 2c 20 43 4f 4e 44  ribute(dom, COND
12780 49 54 49 4f 4e 41 4c 5f 44 49 52 45 43 54 49 56  ITIONAL_DIRECTIV
12790 45 29 3b 0a 20 20 20 20 20 20 65 78 74 65 6e 64  E);.      extend
127a0 28 74 68 69 73 2c 20 7b 20 74 61 67 3a 20 74 61  (this, { tag: ta
127b0 67 2c 20 65 78 70 72 3a 20 65 78 70 72 2c 20 73  g, expr: expr, s
127c0 74 75 62 3a 20 63 72 65 61 74 65 44 4f 4d 50 6c  tub: createDOMPl
127d0 61 63 65 68 6f 6c 64 65 72 28 29 2c 20 70 72 69  aceholder(), pri
127e0 73 74 69 6e 65 3a 20 64 6f 6d 20 7d 29 3b 0a 20  stine: dom });. 
127f0 20 20 20 20 20 76 61 72 20 70 20 3d 20 64 6f 6d       var p = dom
12800 2e 70 61 72 65 6e 74 4e 6f 64 65 3b 0a 20 20 20  .parentNode;.   
12810 20 20 20 70 2e 69 6e 73 65 72 74 42 65 66 6f 72     p.insertBefor
12820 65 28 74 68 69 73 2e 73 74 75 62 2c 20 64 6f 6d  e(this.stub, dom
12830 29 3b 0a 20 20 20 20 20 20 70 2e 72 65 6d 6f 76  );.      p.remov
12840 65 43 68 69 6c 64 28 64 6f 6d 29 3b 0a 0a 20 20  eChild(dom);..  
12850 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 0a      return this.
12860 20 20 20 20 7d 2c 0a 20 20 20 20 75 70 64 61 74      },.    updat
12870 65 3a 20 66 75 6e 63 74 69 6f 6e 20 75 70 64 61  e: function upda
12880 74 65 24 24 31 28 29 20 7b 0a 20 20 20 20 20 20  te$$1() {.      
12890 74 68 69 73 2e 76 61 6c 75 65 20 3d 20 74 6d 70  this.value = tmp
128a0 6c 28 74 68 69 73 2e 65 78 70 72 2c 20 74 68 69  l(this.expr, thi
128b0 73 2e 74 61 67 29 3b 0a 0a 20 20 20 20 20 20 69  s.tag);..      i
128c0 66 20 28 21 74 68 69 73 2e 73 74 75 62 2e 70 61  f (!this.stub.pa
128d0 72 65 6e 74 4e 6f 64 65 29 20 7b 20 72 65 74 75  rentNode) { retu
128e0 72 6e 20 7d 0a 0a 20 20 20 20 20 20 69 66 20 28  rn }..      if (
128f0 74 68 69 73 2e 76 61 6c 75 65 20 26 26 20 21 74  this.value && !t
12900 68 69 73 2e 63 75 72 72 65 6e 74 29 20 7b 20 2f  his.current) { /
12910 2f 20 69 6e 73 65 72 74 0a 20 20 20 20 20 20 20  / insert.       
12920 20 74 68 69 73 2e 63 75 72 72 65 6e 74 20 3d 20   this.current = 
12930 74 68 69 73 2e 70 72 69 73 74 69 6e 65 2e 63 6c  this.pristine.cl
12940 6f 6e 65 4e 6f 64 65 28 74 72 75 65 29 3b 0a 20  oneNode(true);. 
12950 20 20 20 20 20 20 20 74 68 69 73 2e 73 74 75 62         this.stub
12960 2e 70 61 72 65 6e 74 4e 6f 64 65 2e 69 6e 73 65  .parentNode.inse
12970 72 74 42 65 66 6f 72 65 28 74 68 69 73 2e 63 75  rtBefore(this.cu
12980 72 72 65 6e 74 2c 20 74 68 69 73 2e 73 74 75 62  rrent, this.stub
12990 29 3b 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e  );.        this.
129a0 65 78 70 72 65 73 73 69 6f 6e 73 20 3d 20 70 61  expressions = pa
129b0 72 73 65 45 78 70 72 65 73 73 69 6f 6e 73 2e 61  rseExpressions.a
129c0 70 70 6c 79 28 74 68 69 73 2e 74 61 67 2c 20 5b  pply(this.tag, [
129d0 74 68 69 73 2e 63 75 72 72 65 6e 74 2c 20 74 72  this.current, tr
129e0 75 65 5d 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c  ue]);.      } el
129f0 73 65 20 69 66 20 28 21 74 68 69 73 2e 76 61 6c  se if (!this.val
12a00 75 65 20 26 26 20 74 68 69 73 2e 63 75 72 72 65  ue && this.curre
12a10 6e 74 29 20 7b 20 2f 2f 20 72 65 6d 6f 76 65 0a  nt) { // remove.
12a20 20 20 20 20 20 20 20 20 74 68 69 73 2e 75 6e 6d          this.unm
12a30 6f 75 6e 74 28 29 3b 0a 20 20 20 20 20 20 20 20  ount();.        
12a40 74 68 69 73 2e 63 75 72 72 65 6e 74 20 3d 20 6e  this.current = n
12a50 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 74 68 69  ull;.        thi
12a60 73 2e 65 78 70 72 65 73 73 69 6f 6e 73 20 3d 20  s.expressions = 
12a70 5b 5d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  [];.      }..   
12a80 20 20 20 69 66 20 28 74 68 69 73 2e 76 61 6c 75     if (this.valu
12a90 65 29 20 7b 20 75 70 64 61 74 65 2e 63 61 6c 6c  e) { update.call
12aa0 28 74 68 69 73 2e 74 61 67 2c 20 74 68 69 73 2e  (this.tag, this.
12ab0 65 78 70 72 65 73 73 69 6f 6e 73 29 3b 20 7d 0a  expressions); }.
12ac0 20 20 20 20 7d 2c 0a 20 20 20 20 75 6e 6d 6f 75      },.    unmou
12ad0 6e 74 3a 20 66 75 6e 63 74 69 6f 6e 20 75 6e 6d  nt: function unm
12ae0 6f 75 6e 74 28 29 20 7b 0a 20 20 20 20 20 20 69  ount() {.      i
12af0 66 20 28 74 68 69 73 2e 63 75 72 72 65 6e 74 29  f (this.current)
12b00 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 74   {.        if (t
12b10 68 69 73 2e 63 75 72 72 65 6e 74 2e 5f 74 61 67  his.current._tag
12b20 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 74 68  ) {.          th
12b30 69 73 2e 63 75 72 72 65 6e 74 2e 5f 74 61 67 2e  is.current._tag.
12b40 75 6e 6d 6f 75 6e 74 28 29 3b 0a 20 20 20 20 20  unmount();.     
12b50 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 74 68     } else if (th
12b60 69 73 2e 63 75 72 72 65 6e 74 2e 70 61 72 65 6e  is.current.paren
12b70 74 4e 6f 64 65 29 20 7b 0a 20 20 20 20 20 20 20  tNode) {.       
12b80 20 20 20 74 68 69 73 2e 63 75 72 72 65 6e 74 2e     this.current.
12b90 70 61 72 65 6e 74 4e 6f 64 65 2e 72 65 6d 6f 76  parentNode.remov
12ba0 65 43 68 69 6c 64 28 74 68 69 73 2e 63 75 72 72  eChild(this.curr
12bb0 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ent);.        }.
12bc0 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 75        }..      u
12bd0 6e 6d 6f 75 6e 74 41 6c 6c 28 74 68 69 73 2e 65  nmountAll(this.e
12be0 78 70 72 65 73 73 69 6f 6e 73 20 7c 7c 20 5b 5d  xpressions || []
12bf0 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 3b 0a 0a 20  );.    }.  };.. 
12c00 20 2f 2a 2a 0a 20 20 20 2a 20 43 72 65 61 74 65   /**.   * Create
12c10 20 61 20 6e 65 77 20 69 66 20 64 69 72 65 63 74   a new if direct
12c20 69 76 65 0a 20 20 20 2a 20 40 70 61 72 61 6d 20  ive.   * @param 
12c30 20 20 7b 20 48 54 4d 4c 45 6c 65 6d 65 6e 74 20    { HTMLElement 
12c40 7d 20 64 6f 6d 20 2d 20 69 66 20 72 6f 6f 74 20  } dom - if root 
12c50 64 6f 6d 20 6e 6f 64 65 0a 20 20 20 2a 20 40 70  dom node.   * @p
12c60 61 72 61 6d 20 20 20 7b 20 54 61 67 20 7d 20 63  aram   { Tag } c
12c70 6f 6e 74 65 78 74 20 2d 20 74 61 67 20 69 6e 73  ontext - tag ins
12c80 74 61 6e 63 65 20 77 68 65 72 65 20 74 68 65 20  tance where the 
12c90 44 4f 4d 20 6e 6f 64 65 20 69 73 20 6c 6f 63 61  DOM node is loca
12ca0 74 65 64 0a 20 20 20 2a 20 40 70 61 72 61 6d 20  ted.   * @param 
12cb0 20 20 7b 20 53 74 72 69 6e 67 20 7d 20 61 74 74    { String } att
12cc0 72 20 2d 20 69 66 20 65 78 70 72 65 73 73 69 6f  r - if expressio
12cd0 6e 0a 20 20 20 2a 20 40 72 65 74 75 72 6e 73 20  n.   * @returns 
12ce0 7b 20 49 46 45 78 70 72 20 7d 20 61 20 6e 65 77  { IFExpr } a new
12cf0 20 49 66 45 78 70 72 20 6f 62 6a 65 63 74 0a 20   IfExpr object. 
12d00 20 20 2a 2f 0a 20 20 66 75 6e 63 74 69 6f 6e 20    */.  function 
12d10 63 72 65 61 74 65 49 66 44 69 72 65 63 74 69 76  createIfDirectiv
12d20 65 28 64 6f 6d 2c 20 74 61 67 2c 20 61 74 74 72  e(dom, tag, attr
12d30 29 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 63  ) {.    return c
12d40 72 65 61 74 65 28 49 66 45 78 70 72 29 2e 69 6e  reate(IfExpr).in
12d50 69 74 28 64 6f 6d 2c 20 74 61 67 2c 20 61 74 74  it(dom, tag, att
12d60 72 29 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20  r).  }..  /**.  
12d70 20 2a 20 57 61 6c 6b 20 74 68 65 20 74 61 67 20   * Walk the tag 
12d80 44 4f 4d 20 74 6f 20 64 65 74 65 63 74 20 74 68  DOM to detect th
12d90 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f  e expressions to
12da0 20 65 76 61 6c 75 61 74 65 0a 20 20 20 2a 20 40   evaluate.   * @
12db0 74 68 69 73 20 54 61 67 0a 20 20 20 2a 20 40 70  this Tag.   * @p
12dc0 61 72 61 6d 20 20 20 7b 20 48 54 4d 4c 45 6c 65  aram   { HTMLEle
12dd0 6d 65 6e 74 20 7d 20 72 6f 6f 74 20 2d 20 72 6f  ment } root - ro
12de0 6f 74 20 74 61 67 20 77 68 65 72 65 20 77 65 20  ot tag where we 
12df0 77 69 6c 6c 20 73 74 61 72 74 20 64 69 67 67 69  will start diggi
12e00 6e 67 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  ng the expressio
12e10 6e 73 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20  ns.   * @param  
12e20 20 7b 20 42 6f 6f 6c 65 61 6e 20 7d 20 6d 75 73   { Boolean } mus
12e30 74 49 6e 63 6c 75 64 65 52 6f 6f 74 20 2d 20 66  tIncludeRoot - f
12e40 6c 61 67 20 74 6f 20 64 65 63 69 64 65 20 77 68  lag to decide wh
12e50 65 74 68 65 72 20 74 68 65 20 72 6f 6f 74 20 6d  ether the root m
12e60 75 73 74 20 62 65 20 70 61 72 73 65 64 20 61 73  ust be parsed as
12e70 20 77 65 6c 6c 0a 20 20 20 2a 20 40 72 65 74 75   well.   * @retu
12e80 72 6e 73 20 7b 20 41 72 72 61 79 20 7d 20 61 6c  rns { Array } al
12e90 6c 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  l the expression
12ea0 73 20 66 6f 75 6e 64 0a 20 20 20 2a 2f 0a 20 20  s found.   */.  
12eb0 66 75 6e 63 74 69 6f 6e 20 70 61 72 73 65 45 78  function parseEx
12ec0 70 72 65 73 73 69 6f 6e 73 28 72 6f 6f 74 2c 20  pressions(root, 
12ed0 6d 75 73 74 49 6e 63 6c 75 64 65 52 6f 6f 74 29  mustIncludeRoot)
12ee0 20 7b 0a 20 20 20 20 76 61 72 20 74 68 69 73 24   {.    var this$
12ef0 31 20 3d 20 74 68 69 73 3b 0a 0a 20 20 20 20 76  1 = this;..    v
12f00 61 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 3d  ar expressions =
12f10 20 5b 5d 3b 0a 0a 20 20 20 20 77 61 6c 6b 4e 6f   [];..    walkNo
12f20 64 65 73 28 72 6f 6f 74 2c 20 66 75 6e 63 74 69  des(root, functi
12f30 6f 6e 20 28 64 6f 6d 29 20 7b 0a 20 20 20 20 20  on (dom) {.     
12f40 20 76 61 72 20 74 79 70 65 20 3d 20 64 6f 6d 2e   var type = dom.
12f50 6e 6f 64 65 54 79 70 65 3b 0a 20 20 20 20 20 20  nodeType;.      
12f60 76 61 72 20 61 74 74 72 3b 0a 20 20 20 20 20 20  var attr;.      
12f70 76 61 72 20 74 61 67 49 6d 70 6c 3b 0a 0a 20 20  var tagImpl;..  
12f80 20 20 20 20 69 66 20 28 21 6d 75 73 74 49 6e 63      if (!mustInc
12f90 6c 75 64 65 52 6f 6f 74 20 26 26 20 64 6f 6d 20  ludeRoot && dom 
12fa0 3d 3d 3d 20 72 6f 6f 74 29 20 7b 20 72 65 74 75  === root) { retu
12fb0 72 6e 20 7d 0a 0a 20 20 20 20 20 20 2f 2f 20 74  rn }..      // t
12fc0 65 78 74 20 6e 6f 64 65 0a 20 20 20 20 20 20 69  ext node.      i
12fd0 66 20 28 74 79 70 65 20 3d 3d 3d 20 33 20 26 26  f (type === 3 &&
12fe0 20 64 6f 6d 2e 70 61 72 65 6e 74 4e 6f 64 65 2e   dom.parentNode.
12ff0 74 61 67 4e 61 6d 65 20 21 3d 3d 20 27 53 54 59  tagName !== 'STY
13000 4c 45 27 20 26 26 20 74 6d 70 6c 2e 68 61 73 45  LE' && tmpl.hasE
13010 78 70 72 28 64 6f 6d 2e 6e 6f 64 65 56 61 6c 75  xpr(dom.nodeValu
13020 65 29 29 0a 20 20 20 20 20 20 20 20 7b 20 65 78  e)).        { ex
13030 70 72 65 73 73 69 6f 6e 73 2e 70 75 73 68 28 7b  pressions.push({
13040 64 6f 6d 3a 20 64 6f 6d 2c 20 65 78 70 72 3a 20  dom: dom, expr: 
13050 64 6f 6d 2e 6e 6f 64 65 56 61 6c 75 65 7d 29 3b  dom.nodeValue});
13060 20 7d 0a 0a 20 20 20 20 20 20 69 66 20 28 74 79   }..      if (ty
13070 70 65 20 21 3d 3d 20 31 29 20 7b 20 72 65 74 75  pe !== 1) { retu
13080 72 6e 20 7d 0a 0a 20 20 20 20 20 20 76 61 72 20  rn }..      var 
13090 69 73 56 69 72 74 75 61 6c 20 3d 20 64 6f 6d 2e  isVirtual = dom.
130a0 74 61 67 4e 61 6d 65 20 3d 3d 3d 20 27 56 49 52  tagName === 'VIR
130b0 54 55 41 4c 27 3b 0a 0a 20 20 20 20 20 20 2f 2f  TUAL';..      //
130c0 20 6c 6f 6f 70 2e 20 65 61 63 68 20 64 6f 65 73   loop. each does
130d0 20 69 74 27 73 20 6f 77 6e 20 74 68 69 6e 67 20   it's own thing 
130e0 28 66 6f 72 20 6e 6f 77 29 0a 20 20 20 20 20 20  (for now).      
130f0 69 66 20 28 61 74 74 72 20 3d 20 67 65 74 41 74  if (attr = getAt
13100 74 72 69 62 75 74 65 28 64 6f 6d 2c 20 4c 4f 4f  tribute(dom, LOO
13110 50 5f 44 49 52 45 43 54 49 56 45 29 29 20 7b 0a  P_DIRECTIVE)) {.
13120 20 20 20 20 20 20 20 20 69 66 28 69 73 56 69 72          if(isVir
13130 74 75 61 6c 29 20 7b 20 73 65 74 41 74 74 72 69  tual) { setAttri
13140 62 75 74 65 28 64 6f 6d 2c 20 27 6c 6f 6f 70 56  bute(dom, 'loopV
13150 69 72 74 75 61 6c 27 2c 20 74 72 75 65 29 3b 20  irtual', true); 
13160 7d 20 2f 2f 20 69 67 6e 6f 72 65 20 68 65 72 65  } // ignore here
13170 2c 20 68 61 6e 64 6c 65 64 20 69 6e 20 5f 65 61  , handled in _ea
13180 63 68 0a 20 20 20 20 20 20 20 20 65 78 70 72 65  ch.        expre
13190 73 73 69 6f 6e 73 2e 70 75 73 68 28 5f 65 61 63  ssions.push(_eac
131a0 68 28 64 6f 6d 2c 20 74 68 69 73 24 31 2c 20 61  h(dom, this$1, a
131b0 74 74 72 29 29 3b 0a 20 20 20 20 20 20 20 20 72  ttr));.        r
131c0 65 74 75 72 6e 20 66 61 6c 73 65 0a 20 20 20 20  eturn false.    
131d0 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2f 20 69 66    }..      // if
131e0 2d 61 74 74 72 73 20 62 65 63 6f 6d 65 20 74 68  -attrs become th
131f0 65 20 6e 65 77 20 70 61 72 65 6e 74 2e 20 41 6e  e new parent. An
13200 79 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 72  y following expr
13210 65 73 73 69 6f 6e 73 20 28 65 69 74 68 65 72 20  essions (either 
13220 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74 0a 20  on the current. 
13230 20 20 20 20 20 2f 2f 20 65 6c 65 6d 65 6e 74 2c       // element,
13240 20 6f 72 20 62 65 6c 6f 77 20 69 74 29 20 62 65   or below it) be
13250 63 6f 6d 65 20 63 68 69 6c 64 72 65 6e 20 6f 66  come children of
13260 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e   this expression
13270 2e 0a 20 20 20 20 20 20 69 66 20 28 61 74 74 72  ..      if (attr
13280 20 3d 20 67 65 74 41 74 74 72 69 62 75 74 65 28   = getAttribute(
13290 64 6f 6d 2c 20 43 4f 4e 44 49 54 49 4f 4e 41 4c  dom, CONDITIONAL
132a0 5f 44 49 52 45 43 54 49 56 45 29 29 20 7b 0a 20  _DIRECTIVE)) {. 
132b0 20 20 20 20 20 20 20 65 78 70 72 65 73 73 69 6f         expressio
132c0 6e 73 2e 70 75 73 68 28 63 72 65 61 74 65 49 66  ns.push(createIf
132d0 44 69 72 65 63 74 69 76 65 28 64 6f 6d 2c 20 74  Directive(dom, t
132e0 68 69 73 24 31 2c 20 61 74 74 72 29 29 3b 0a 20  his$1, attr));. 
132f0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
13300 6c 73 65 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  lse.      }..   
13310 20 20 20 69 66 20 28 61 74 74 72 20 3d 20 67 65     if (attr = ge
13320 74 41 74 74 72 69 62 75 74 65 28 64 6f 6d 2c 20  tAttribute(dom, 
13330 49 53 5f 44 49 52 45 43 54 49 56 45 29 29 20 7b  IS_DIRECTIVE)) {
13340 0a 20 20 20 20 20 20 20 20 69 66 20 28 74 6d 70  .        if (tmp
13350 6c 2e 68 61 73 45 78 70 72 28 61 74 74 72 29 29  l.hasExpr(attr))
13360 20 7b 0a 20 20 20 20 20 20 20 20 20 20 65 78 70   {.          exp
13370 72 65 73 73 69 6f 6e 73 2e 70 75 73 68 28 7b 0a  ressions.push({.
13380 20 20 20 20 20 20 20 20 20 20 20 20 69 73 52 74              isRt
13390 61 67 3a 20 74 72 75 65 2c 0a 20 20 20 20 20 20  ag: true,.      
133a0 20 20 20 20 20 20 65 78 70 72 3a 20 61 74 74 72        expr: attr
133b0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f  ,.            do
133c0 6d 3a 20 64 6f 6d 2c 0a 20 20 20 20 20 20 20 20  m: dom,.        
133d0 20 20 20 20 61 74 74 72 73 3a 20 5b 5d 2e 73 6c      attrs: [].sl
133e0 69 63 65 2e 63 61 6c 6c 28 64 6f 6d 2e 61 74 74  ice.call(dom.att
133f0 72 69 62 75 74 65 73 29 0a 20 20 20 20 20 20 20  ributes).       
13400 20 20 20 7d 29 3b 0a 0a 20 20 20 20 20 20 20 20     });..        
13410 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0a 20    return false. 
13420 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
13430 0a 0a 20 20 20 20 20 20 2f 2f 20 69 66 20 74 68  ..      // if th
13440 69 73 20 69 73 20 61 20 74 61 67 2c 20 73 74 6f  is is a tag, sto
13450 70 20 74 72 61 76 65 72 73 69 6e 67 20 68 65 72  p traversing her
13460 65 2e 0a 20 20 20 20 20 20 2f 2f 20 77 65 20 69  e..      // we i
13470 67 6e 6f 72 65 20 74 68 65 20 72 6f 6f 74 2c 20  gnore the root, 
13480 73 69 6e 63 65 20 70 61 72 73 65 45 78 70 72 65  since parseExpre
13490 73 73 69 6f 6e 73 20 69 73 20 63 61 6c 6c 65 64  ssions is called
134a0 20 77 68 69 6c 65 20 77 65 27 72 65 20 6d 6f 75   while we're mou
134b0 6e 74 69 6e 67 20 74 68 61 74 20 72 6f 6f 74 0a  nting that root.
134c0 20 20 20 20 20 20 74 61 67 49 6d 70 6c 20 3d 20        tagImpl = 
134d0 67 65 74 28 64 6f 6d 29 3b 0a 0a 20 20 20 20 20  get(dom);..     
134e0 20 69 66 28 69 73 56 69 72 74 75 61 6c 29 20 7b   if(isVirtual) {
134f0 0a 20 20 20 20 20 20 20 20 69 66 28 67 65 74 41  .        if(getA
13500 74 74 72 69 62 75 74 65 28 64 6f 6d 2c 20 27 76  ttribute(dom, 'v
13510 69 72 74 75 61 6c 69 7a 65 64 27 29 29 20 7b 64  irtualized')) {d
13520 6f 6d 2e 70 61 72 65 6e 74 45 6c 65 6d 65 6e 74  om.parentElement
13530 2e 72 65 6d 6f 76 65 43 68 69 6c 64 28 64 6f 6d  .removeChild(dom
13540 29 3b 20 7d 20 2f 2f 20 74 61 67 20 63 72 65 61  ); } // tag crea
13550 74 65 64 2c 20 72 65 6d 6f 76 65 20 66 72 6f 6d  ted, remove from
13560 20 64 6f 6d 0a 20 20 20 20 20 20 20 20 69 66 28   dom.        if(
13570 21 74 61 67 49 6d 70 6c 20 26 26 20 21 67 65 74  !tagImpl && !get
13580 41 74 74 72 69 62 75 74 65 28 64 6f 6d 2c 20 27  Attribute(dom, '
13590 76 69 72 74 75 61 6c 69 7a 65 64 27 29 20 26 26  virtualized') &&
135a0 20 21 67 65 74 41 74 74 72 69 62 75 74 65 28 64   !getAttribute(d
135b0 6f 6d 2c 20 27 6c 6f 6f 70 56 69 72 74 75 61 6c  om, 'loopVirtual
135c0 27 29 29 20 20 2f 2f 20 6f 6b 20 74 6f 20 63 72  '))  // ok to cr
135d0 65 61 74 65 20 76 69 72 74 75 61 6c 20 74 61 67  eate virtual tag
135e0 0a 20 20 20 20 20 20 20 20 20 20 7b 20 74 61 67  .          { tag
135f0 49 6d 70 6c 20 3d 20 7b 20 74 6d 70 6c 3a 20 64  Impl = { tmpl: d
13600 6f 6d 2e 6f 75 74 65 72 48 54 4d 4c 20 7d 3b 20  om.outerHTML }; 
13610 7d 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  }.      }..     
13620 20 69 66 20 28 74 61 67 49 6d 70 6c 20 26 26 20   if (tagImpl && 
13630 28 64 6f 6d 20 21 3d 3d 20 72 6f 6f 74 20 7c 7c  (dom !== root ||
13640 20 6d 75 73 74 49 6e 63 6c 75 64 65 52 6f 6f 74   mustIncludeRoot
13650 29 29 20 7b 0a 20 20 20 20 20 20 20 20 76 61 72  )) {.        var
13660 20 68 61 73 49 73 44 69 72 65 63 74 69 76 65 20   hasIsDirective 
13670 3d 20 67 65 74 41 74 74 72 69 62 75 74 65 28 64  = getAttribute(d
13680 6f 6d 2c 20 49 53 5f 44 49 52 45 43 54 49 56 45  om, IS_DIRECTIVE
13690 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 69 73  );.        if(is
136a0 56 69 72 74 75 61 6c 20 26 26 20 21 68 61 73 49  Virtual && !hasI
136b0 73 44 69 72 65 63 74 69 76 65 29 20 7b 20 2f 2f  sDirective) { //
136c0 20 68 61 6e 64 6c 65 64 20 69 6e 20 75 70 64 61   handled in upda
136d0 74 65 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  te.          // 
136e0 63 61 6e 20 6e 6f 74 20 72 65 6d 6f 76 65 20 61  can not remove a
136f0 74 74 72 69 62 75 74 65 20 6c 69 6b 65 20 64 69  ttribute like di
13700 72 65 63 74 69 76 65 73 0a 20 20 20 20 20 20 20  rectives.       
13710 20 20 20 2f 2f 20 73 6f 20 66 6c 61 67 20 66 6f     // so flag fo
13720 72 20 72 65 6d 6f 76 61 6c 20 61 66 74 65 72 20  r removal after 
13730 63 72 65 61 74 69 6f 6e 20 74 6f 20 70 72 65 76  creation to prev
13740 65 6e 74 20 6d 61 78 69 6d 75 6d 20 73 74 61 63  ent maximum stac
13750 6b 20 65 72 72 6f 72 0a 20 20 20 20 20 20 20 20  k error.        
13760 20 20 73 65 74 41 74 74 72 69 62 75 74 65 28 64    setAttribute(d
13770 6f 6d 2c 20 27 76 69 72 74 75 61 6c 69 7a 65 64  om, 'virtualized
13780 27 2c 20 74 72 75 65 29 3b 0a 20 20 20 20 20 20  ', true);.      
13790 20 20 20 20 76 61 72 20 74 61 67 20 3d 20 63 72      var tag = cr
137a0 65 61 74 65 54 61 67 28 0a 20 20 20 20 20 20 20  eateTag(.       
137b0 20 20 20 20 20 7b 74 6d 70 6c 3a 20 64 6f 6d 2e       {tmpl: dom.
137c0 6f 75 74 65 72 48 54 4d 4c 7d 2c 0a 20 20 20 20  outerHTML},.    
137d0 20 20 20 20 20 20 20 20 7b 72 6f 6f 74 3a 20 64          {root: d
137e0 6f 6d 2c 20 70 61 72 65 6e 74 3a 20 74 68 69 73  om, parent: this
137f0 24 31 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20  $1},.           
13800 20 64 6f 6d 2e 69 6e 6e 65 72 48 54 4d 4c 0a 20   dom.innerHTML. 
13810 20 20 20 20 20 20 20 20 20 29 3b 0a 0a 20 20 20           );..   
13820 20 20 20 20 20 20 20 65 78 70 72 65 73 73 69 6f         expressio
13830 6e 73 2e 70 75 73 68 28 74 61 67 29 3b 20 2f 2f  ns.push(tag); //
13840 20 6e 6f 20 72 65 74 75 72 6e 2c 20 61 6e 6f 6e   no return, anon
13850 79 6d 6f 75 73 20 74 61 67 2c 20 6b 65 65 70 20  ymous tag, keep 
13860 70 61 72 73 69 6e 67 0a 20 20 20 20 20 20 20 20  parsing.        
13870 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20  } else {.       
13880 20 20 20 69 66 20 28 68 61 73 49 73 44 69 72 65     if (hasIsDire
13890 63 74 69 76 65 20 26 26 20 69 73 56 69 72 74 75  ctive && isVirtu
138a0 61 6c 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  al).            
138b0 7b 20 77 61 72 6e 28 28 22 56 69 72 74 75 61 6c  { warn(("Virtual
138c0 20 74 61 67 73 20 73 68 6f 75 6c 64 6e 27 74 20   tags shouldn't 
138d0 62 65 20 75 73 65 64 20 74 6f 67 65 74 68 65 72  be used together
138e0 20 77 69 74 68 20 74 68 65 20 5c 22 22 20 2b 20   with the \"" + 
138f0 49 53 5f 44 49 52 45 43 54 49 56 45 20 2b 20 22  IS_DIRECTIVE + "
13900 5c 22 20 61 74 74 72 69 62 75 74 65 20 2d 20 68  \" attribute - h
13910 74 74 70 73 3a 2f 2f 67 69 74 68 75 62 2e 63 6f  ttps://github.co
13920 6d 2f 72 69 6f 74 2f 72 69 6f 74 2f 69 73 73 75  m/riot/riot/issu
13930 65 73 2f 32 35 31 31 22 29 29 3b 20 7d 0a 0a 20  es/2511")); }.. 
13940 20 20 20 20 20 20 20 20 20 65 78 70 72 65 73 73           express
13950 69 6f 6e 73 2e 70 75 73 68 28 0a 20 20 20 20 20  ions.push(.     
13960 20 20 20 20 20 20 20 69 6e 69 74 43 68 69 6c 64         initChild
13970 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  (.              
13980 74 61 67 49 6d 70 6c 2c 0a 20 20 20 20 20 20 20  tagImpl,.       
13990 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
139a0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 3a 20 64           root: d
139b0 6f 6d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  om,.            
139c0 20 20 20 20 70 61 72 65 6e 74 3a 20 74 68 69 73      parent: this
139d0 24 31 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  $1.             
139e0 20 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   },.            
139f0 20 20 64 6f 6d 2e 69 6e 6e 65 72 48 54 4d 4c 2c    dom.innerHTML,
13a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
13a10 68 69 73 24 31 0a 20 20 20 20 20 20 20 20 20 20  his$1.          
13a20 20 20 29 0a 20 20 20 20 20 20 20 20 20 20 29 3b    ).          );
13a30 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
13a40 6e 20 66 61 6c 73 65 0a 20 20 20 20 20 20 20 20  n false.        
13a50 7d 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  }.      }..     
13a60 20 2f 2f 20 61 74 74 72 69 62 75 74 65 20 65 78   // attribute ex
13a70 70 72 65 73 73 69 6f 6e 73 0a 20 20 20 20 20 20  pressions.      
13a80 70 61 72 73 65 41 74 74 72 69 62 75 74 65 73 2e  parseAttributes.
13a90 61 70 70 6c 79 28 74 68 69 73 24 31 2c 20 5b 64  apply(this$1, [d
13aa0 6f 6d 2c 20 64 6f 6d 2e 61 74 74 72 69 62 75 74  om, dom.attribut
13ab0 65 73 2c 20 66 75 6e 63 74 69 6f 6e 20 28 61 74  es, function (at
13ac0 74 72 2c 20 65 78 70 72 29 20 7b 0a 20 20 20 20  tr, expr) {.    
13ad0 20 20 20 20 69 66 20 28 21 65 78 70 72 29 20 7b      if (!expr) {
13ae0 20 72 65 74 75 72 6e 20 7d 0a 20 20 20 20 20 20   return }.      
13af0 20 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 70 75    expressions.pu
13b00 73 68 28 65 78 70 72 29 3b 0a 20 20 20 20 20 20  sh(expr);.      
13b10 7d 5d 29 3b 0a 20 20 20 20 7d 29 3b 0a 0a 20 20  }]);.    });..  
13b20 20 20 72 65 74 75 72 6e 20 65 78 70 72 65 73 73    return express
13b30 69 6f 6e 73 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a  ions.  }..  /**.
13b40 20 20 20 2a 20 43 61 6c 6c 73 20 60 66 6e 60 20     * Calls `fn` 
13b50 66 6f 72 20 65 76 65 72 79 20 61 74 74 72 69 62  for every attrib
13b60 75 74 65 20 6f 6e 20 61 6e 20 65 6c 65 6d 65 6e  ute on an elemen
13b70 74 2e 20 49 66 20 74 68 61 74 20 61 74 74 72 20  t. If that attr 
13b80 68 61 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f  has an expressio
13b90 6e 2c 0a 20 20 20 2a 20 69 74 20 69 73 20 61 6c  n,.   * it is al
13ba0 73 6f 20 70 61 73 73 65 64 20 74 6f 20 66 6e 2e  so passed to fn.
13bb0 0a 20 20 20 2a 20 40 74 68 69 73 20 54 61 67 0a  .   * @this Tag.
13bc0 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20     * @param   { 
13bd0 48 54 4d 4c 45 6c 65 6d 65 6e 74 20 7d 20 64 6f  HTMLElement } do
13be0 6d 20 2d 20 64 6f 6d 20 6e 6f 64 65 20 74 6f 20  m - dom node to 
13bf0 70 61 72 73 65 0a 20 20 20 2a 20 40 70 61 72 61  parse.   * @para
13c00 6d 20 20 20 7b 20 41 72 72 61 79 20 7d 20 61 74  m   { Array } at
13c10 74 72 73 20 2d 20 61 72 72 61 79 20 6f 66 20 61  trs - array of a
13c20 74 74 72 69 62 75 74 65 73 0a 20 20 20 2a 20 40  ttributes.   * @
13c30 70 61 72 61 6d 20 20 20 7b 20 46 75 6e 63 74 69  param   { Functi
13c40 6f 6e 20 7d 20 66 6e 20 2d 20 63 61 6c 6c 62 61  on } fn - callba
13c50 63 6b 20 74 6f 20 65 78 65 63 20 6f 6e 20 61 6e  ck to exec on an
13c60 79 20 69 74 65 72 61 74 69 6f 6e 0a 20 20 20 2a  y iteration.   *
13c70 2f 0a 20 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  /.  function par
13c80 73 65 41 74 74 72 69 62 75 74 65 73 28 64 6f 6d  seAttributes(dom
13c90 2c 20 61 74 74 72 73 2c 20 66 6e 29 20 7b 0a 20  , attrs, fn) {. 
13ca0 20 20 20 76 61 72 20 74 68 69 73 24 31 20 3d 20     var this$1 = 
13cb0 74 68 69 73 3b 0a 0a 20 20 20 20 65 61 63 68 28  this;..    each(
13cc0 61 74 74 72 73 2c 20 66 75 6e 63 74 69 6f 6e 20  attrs, function 
13cd0 28 61 74 74 72 29 20 7b 0a 20 20 20 20 20 20 69  (attr) {.      i
13ce0 66 20 28 21 61 74 74 72 29 20 7b 20 72 65 74 75  f (!attr) { retu
13cf0 72 6e 20 66 61 6c 73 65 20 7d 0a 0a 20 20 20 20  rn false }..    
13d00 20 20 76 61 72 20 6e 61 6d 65 20 3d 20 61 74 74    var name = att
13d10 72 2e 6e 61 6d 65 3b 0a 20 20 20 20 20 20 76 61  r.name;.      va
13d20 72 20 62 6f 6f 6c 20 3d 20 69 73 42 6f 6f 6c 41  r bool = isBoolA
13d30 74 74 72 28 6e 61 6d 65 29 3b 0a 20 20 20 20 20  ttr(name);.     
13d40 20 76 61 72 20 65 78 70 72 3b 0a 0a 20 20 20 20   var expr;..    
13d50 20 20 69 66 20 28 63 6f 6e 74 61 69 6e 73 28 52    if (contains(R
13d60 45 46 5f 44 49 52 45 43 54 49 56 45 53 2c 20 6e  EF_DIRECTIVES, n
13d70 61 6d 65 29 20 26 26 20 64 6f 6d 2e 74 61 67 4e  ame) && dom.tagN
13d80 61 6d 65 2e 74 6f 4c 6f 77 65 72 43 61 73 65 28  ame.toLowerCase(
13d90 29 20 21 3d 3d 20 59 49 45 4c 44 5f 54 41 47 29  ) !== YIELD_TAG)
13da0 20 7b 0a 20 20 20 20 20 20 20 20 65 78 70 72 20   {.        expr 
13db0 3d 20 20 63 72 65 61 74 65 52 65 66 44 69 72 65  =  createRefDire
13dc0 63 74 69 76 65 28 64 6f 6d 2c 20 74 68 69 73 24  ctive(dom, this$
13dd0 31 2c 20 6e 61 6d 65 2c 20 61 74 74 72 2e 76 61  1, name, attr.va
13de0 6c 75 65 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c  lue);.      } el
13df0 73 65 20 69 66 20 28 74 6d 70 6c 2e 68 61 73 45  se if (tmpl.hasE
13e00 78 70 72 28 61 74 74 72 2e 76 61 6c 75 65 29 29  xpr(attr.value))
13e10 20 7b 0a 20 20 20 20 20 20 20 20 65 78 70 72 20   {.        expr 
13e20 3d 20 7b 64 6f 6d 3a 20 64 6f 6d 2c 20 65 78 70  = {dom: dom, exp
13e30 72 3a 20 61 74 74 72 2e 76 61 6c 75 65 2c 20 61  r: attr.value, a
13e40 74 74 72 3a 20 6e 61 6d 65 2c 20 62 6f 6f 6c 3a  ttr: name, bool:
13e50 20 62 6f 6f 6c 7d 3b 0a 20 20 20 20 20 20 7d 0a   bool};.      }.
13e60 0a 20 20 20 20 20 20 66 6e 28 61 74 74 72 2c 20  .      fn(attr, 
13e70 65 78 70 72 29 3b 0a 20 20 20 20 7d 29 3b 0a 20  expr);.    });. 
13e80 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 4d   }..  /**.   * M
13e90 61 6e 61 67 65 20 74 68 65 20 6d 6f 75 6e 74 20  anage the mount 
13ea0 73 74 61 74 65 20 6f 66 20 61 20 74 61 67 20 74  state of a tag t
13eb0 72 69 67 67 65 72 69 6e 67 20 61 6c 73 6f 20 74  riggering also t
13ec0 68 65 20 6f 62 73 65 72 76 61 62 6c 65 20 65 76  he observable ev
13ed0 65 6e 74 73 0a 20 20 20 2a 20 40 74 68 69 73 20  ents.   * @this 
13ee0 54 61 67 0a 20 20 20 2a 20 40 70 61 72 61 6d 20  Tag.   * @param 
13ef0 7b 20 42 6f 6f 6c 65 61 6e 20 7d 20 76 61 6c 75  { Boolean } valu
13f00 65 20 2d 20 2e 2e 6f 66 20 74 68 65 20 69 73 4d  e - ..of the isM
13f10 6f 75 6e 74 65 64 20 66 6c 61 67 0a 20 20 20 2a  ounted flag.   *
13f20 2f 0a 20 20 66 75 6e 63 74 69 6f 6e 20 73 65 74  /.  function set
13f30 4d 6f 75 6e 74 53 74 61 74 65 28 76 61 6c 75 65  MountState(value
13f40 29 20 7b 0a 20 20 20 20 76 61 72 20 72 65 66 20  ) {.    var ref 
13f50 3d 20 74 68 69 73 2e 5f 5f 3b 0a 20 20 20 20 76  = this.__;.    v
13f60 61 72 20 69 73 41 6e 6f 6e 79 6d 6f 75 73 20 3d  ar isAnonymous =
13f70 20 72 65 66 2e 69 73 41 6e 6f 6e 79 6d 6f 75 73   ref.isAnonymous
13f80 3b 0a 20 20 20 20 76 61 72 20 73 6b 69 70 41 6e  ;.    var skipAn
13f90 6f 6e 79 6d 6f 75 73 20 3d 20 72 65 66 2e 73 6b  onymous = ref.sk
13fa0 69 70 41 6e 6f 6e 79 6d 6f 75 73 3b 0a 0a 20 20  ipAnonymous;..  
13fb0 20 20 64 65 66 69 6e 65 28 74 68 69 73 2c 20 27    define(this, '
13fc0 69 73 4d 6f 75 6e 74 65 64 27 2c 20 76 61 6c 75  isMounted', valu
13fd0 65 29 3b 0a 0a 20 20 20 20 69 66 20 28 21 69 73  e);..    if (!is
13fe0 41 6e 6f 6e 79 6d 6f 75 73 20 7c 7c 20 21 73 6b  Anonymous || !sk
13ff0 69 70 41 6e 6f 6e 79 6d 6f 75 73 29 20 7b 0a 20  ipAnonymous) {. 
14000 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 29 20       if (value) 
14010 7b 20 74 68 69 73 2e 74 72 69 67 67 65 72 28 27  { this.trigger('
14020 6d 6f 75 6e 74 27 29 3b 20 7d 0a 20 20 20 20 20  mount'); }.     
14030 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20   else {.        
14040 74 68 69 73 2e 74 72 69 67 67 65 72 28 27 75 6e  this.trigger('un
14050 6d 6f 75 6e 74 27 29 3b 0a 20 20 20 20 20 20 20  mount');.       
14060 20 74 68 69 73 2e 6f 66 66 28 27 2a 27 29 3b 0a   this.off('*');.
14070 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 5f 2e          this.__.
14080 77 61 73 43 72 65 61 74 65 64 20 3d 20 66 61 6c  wasCreated = fal
14090 73 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  se;.      }.    
140a0 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20  }.  }..  /**.   
140b0 2a 20 4d 6f 75 6e 74 20 74 68 65 20 63 75 72 72  * Mount the curr
140c0 65 6e 74 20 74 61 67 20 69 6e 73 74 61 6e 63 65  ent tag instance
140d0 0a 20 20 20 2a 20 40 72 65 74 75 72 6e 73 20 7b  .   * @returns {
140e0 20 54 61 67 20 7d 20 74 68 65 20 63 75 72 72 65   Tag } the curre
140f0 6e 74 20 74 61 67 20 69 6e 73 74 61 6e 63 65 0a  nt tag instance.
14100 20 20 20 2a 2f 0a 20 20 66 75 6e 63 74 69 6f 6e     */.  function
14110 20 63 6f 6d 70 6f 6e 65 6e 74 4d 6f 75 6e 74 28   componentMount(
14120 74 61 67 24 24 31 2c 20 64 6f 6d 2c 20 65 78 70  tag$$1, dom, exp
14130 72 65 73 73 69 6f 6e 73 2c 20 6f 70 74 73 29 20  ressions, opts) 
14140 7b 0a 20 20 20 20 76 61 72 20 5f 5f 20 3d 20 74  {.    var __ = t
14150 61 67 24 24 31 2e 5f 5f 3b 0a 20 20 20 20 76 61  ag$$1.__;.    va
14160 72 20 72 6f 6f 74 20 3d 20 5f 5f 2e 72 6f 6f 74  r root = __.root
14170 3b 0a 20 20 20 20 72 6f 6f 74 2e 5f 74 61 67 20  ;.    root._tag 
14180 3d 20 74 61 67 24 24 31 3b 20 2f 2f 20 6b 65 65  = tag$$1; // kee
14190 70 20 61 20 72 65 66 65 72 65 6e 63 65 20 74 6f  p a reference to
141a0 20 74 68 65 20 74 61 67 20 6a 75 73 74 20 63 72   the tag just cr
141b0 65 61 74 65 64 0a 0a 20 20 20 20 2f 2f 20 52 65  eated..    // Re
141c0 61 64 20 61 6c 6c 20 74 68 65 20 61 74 74 72 73  ad all the attrs
141d0 20 6f 6e 20 74 68 69 73 20 69 6e 73 74 61 6e 63   on this instanc
141e0 65 2e 20 54 68 69 73 20 67 69 76 65 20 75 73 20  e. This give us 
141f0 74 68 65 20 69 6e 66 6f 20 77 65 20 6e 65 65 64  the info we need
14200 20 66 6f 72 20 75 70 64 61 74 65 4f 70 74 73 0a   for updateOpts.
14210 20 20 20 20 70 61 72 73 65 41 74 74 72 69 62 75      parseAttribu
14220 74 65 73 2e 61 70 70 6c 79 28 5f 5f 2e 70 61 72  tes.apply(__.par
14230 65 6e 74 2c 20 5b 72 6f 6f 74 2c 20 72 6f 6f 74  ent, [root, root
14240 2e 61 74 74 72 69 62 75 74 65 73 2c 20 66 75 6e  .attributes, fun
14250 63 74 69 6f 6e 20 28 61 74 74 72 2c 20 65 78 70  ction (attr, exp
14260 72 29 20 7b 0a 20 20 20 20 20 20 69 66 20 28 21  r) {.      if (!
14270 5f 5f 2e 69 73 41 6e 6f 6e 79 6d 6f 75 73 20 26  __.isAnonymous &
14280 26 20 52 65 66 45 78 70 72 2e 69 73 50 72 6f 74  & RefExpr.isProt
14290 6f 74 79 70 65 4f 66 28 65 78 70 72 29 29 20 7b  otypeOf(expr)) {
142a0 20 65 78 70 72 2e 74 61 67 20 3d 20 74 61 67 24   expr.tag = tag$
142b0 24 31 3b 20 7d 0a 20 20 20 20 20 20 61 74 74 72  $1; }.      attr
142c0 2e 65 78 70 72 20 3d 20 65 78 70 72 3b 0a 20 20  .expr = expr;.  
142d0 20 20 20 20 5f 5f 2e 69 6e 73 74 41 74 74 72 73      __.instAttrs
142e0 2e 70 75 73 68 28 61 74 74 72 29 3b 0a 20 20 20  .push(attr);.   
142f0 20 7d 5d 29 3b 0a 0a 20 20 20 20 2f 2f 20 75 70   }]);..    // up
14300 64 61 74 65 20 74 68 65 20 72 6f 6f 74 20 61 64  date the root ad
14310 64 69 6e 67 20 63 75 73 74 6f 6d 20 61 74 74 72  ding custom attr
14320 69 62 75 74 65 73 20 63 6f 6d 69 6e 67 20 66 72  ibutes coming fr
14330 6f 6d 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 0a  om the compiler.
14340 20 20 20 20 77 61 6c 6b 41 74 74 72 69 62 75 74      walkAttribut
14350 65 73 28 5f 5f 2e 69 6d 70 6c 2e 61 74 74 72 73  es(__.impl.attrs
14360 2c 20 66 75 6e 63 74 69 6f 6e 20 28 6b 2c 20 76  , function (k, v
14370 29 20 7b 20 5f 5f 2e 69 6d 70 6c 41 74 74 72 73  ) { __.implAttrs
14380 2e 70 75 73 68 28 7b 6e 61 6d 65 3a 20 6b 2c 20  .push({name: k, 
14390 76 61 6c 75 65 3a 20 76 7d 29 3b 20 7d 29 3b 0a  value: v}); });.
143a0 20 20 20 20 70 61 72 73 65 41 74 74 72 69 62 75      parseAttribu
143b0 74 65 73 2e 61 70 70 6c 79 28 74 61 67 24 24 31  tes.apply(tag$$1
143c0 2c 20 5b 72 6f 6f 74 2c 20 5f 5f 2e 69 6d 70 6c  , [root, __.impl
143d0 41 74 74 72 73 2c 20 66 75 6e 63 74 69 6f 6e 20  Attrs, function 
143e0 28 61 74 74 72 2c 20 65 78 70 72 29 20 7b 0a 20  (attr, expr) {. 
143f0 20 20 20 20 20 69 66 20 28 65 78 70 72 29 20 7b       if (expr) {
14400 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 70 75 73   expressions.pus
14410 68 28 65 78 70 72 29 3b 20 7d 0a 20 20 20 20 20  h(expr); }.     
14420 20 65 6c 73 65 20 7b 20 73 65 74 41 74 74 72 69   else { setAttri
14430 62 75 74 65 28 72 6f 6f 74 2c 20 61 74 74 72 2e  bute(root, attr.
14440 6e 61 6d 65 2c 20 61 74 74 72 2e 76 61 6c 75 65  name, attr.value
14450 29 3b 20 7d 0a 20 20 20 20 7d 5d 29 3b 0a 0a 20  ); }.    }]);.. 
14460 20 20 20 2f 2f 20 69 6e 69 74 69 61 6c 69 61 74     // initialiat
14470 69 6f 6e 0a 20 20 20 20 75 70 64 61 74 65 4f 70  ion.    updateOp
14480 74 73 2e 61 70 70 6c 79 28 74 61 67 24 24 31 2c  ts.apply(tag$$1,
14490 20 5b 5f 5f 2e 69 73 4c 6f 6f 70 2c 20 5f 5f 2e   [__.isLoop, __.
144a0 70 61 72 65 6e 74 2c 20 5f 5f 2e 69 73 41 6e 6f  parent, __.isAno
144b0 6e 79 6d 6f 75 73 2c 20 6f 70 74 73 2c 20 5f 5f  nymous, opts, __
144c0 2e 69 6e 73 74 41 74 74 72 73 5d 29 3b 0a 0a 20  .instAttrs]);.. 
144d0 20 20 20 2f 2f 20 61 64 64 20 67 6c 6f 62 61 6c     // add global
144e0 20 6d 69 78 69 6e 73 0a 20 20 20 20 76 61 72 20   mixins.    var 
144f0 67 6c 6f 62 61 6c 4d 69 78 69 6e 20 3d 20 6d 69  globalMixin = mi
14500 78 69 6e 28 47 4c 4f 42 41 4c 5f 4d 49 58 49 4e  xin(GLOBAL_MIXIN
14510 29 3b 0a 0a 20 20 20 20 69 66 20 28 67 6c 6f 62  );..    if (glob
14520 61 6c 4d 69 78 69 6e 20 26 26 20 21 5f 5f 2e 73  alMixin && !__.s
14530 6b 69 70 41 6e 6f 6e 79 6d 6f 75 73 29 20 7b 0a  kipAnonymous) {.
14540 20 20 20 20 20 20 66 6f 72 20 28 76 61 72 20 69        for (var i
14550 20 69 6e 20 67 6c 6f 62 61 6c 4d 69 78 69 6e 29   in globalMixin)
14560 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 67   {.        if (g
14570 6c 6f 62 61 6c 4d 69 78 69 6e 2e 68 61 73 4f 77  lobalMixin.hasOw
14580 6e 50 72 6f 70 65 72 74 79 28 69 29 29 20 7b 0a  nProperty(i)) {.
14590 20 20 20 20 20 20 20 20 20 20 74 61 67 24 24 31            tag$$1
145a0 2e 6d 69 78 69 6e 28 67 6c 6f 62 61 6c 4d 69 78  .mixin(globalMix
145b0 69 6e 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20  in[i]);.        
145c0 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
145d0 0a 20 20 20 20 69 66 20 28 5f 5f 2e 69 6d 70 6c  .    if (__.impl
145e0 2e 66 6e 29 20 7b 20 5f 5f 2e 69 6d 70 6c 2e 66  .fn) { __.impl.f
145f0 6e 2e 63 61 6c 6c 28 74 61 67 24 24 31 2c 20 6f  n.call(tag$$1, o
14600 70 74 73 29 3b 20 7d 0a 0a 20 20 20 20 69 66 20  pts); }..    if 
14610 28 21 5f 5f 2e 73 6b 69 70 41 6e 6f 6e 79 6d 6f  (!__.skipAnonymo
14620 75 73 29 20 7b 20 74 61 67 24 24 31 2e 74 72 69  us) { tag$$1.tri
14630 67 67 65 72 28 27 62 65 66 6f 72 65 2d 6d 6f 75  gger('before-mou
14640 6e 74 27 29 3b 20 7d 0a 0a 20 20 20 20 2f 2f 20  nt'); }..    // 
14650 70 61 72 73 65 20 6c 61 79 6f 75 74 20 61 66 74  parse layout aft
14660 65 72 20 69 6e 69 74 2e 20 66 6e 20 6d 61 79 20  er init. fn may 
14670 63 61 6c 63 75 6c 61 74 65 20 61 72 67 73 20 66  calculate args f
14680 6f 72 20 6e 65 73 74 65 64 20 63 75 73 74 6f 6d  or nested custom
14690 20 74 61 67 73 0a 20 20 20 20 65 61 63 68 28 70   tags.    each(p
146a0 61 72 73 65 45 78 70 72 65 73 73 69 6f 6e 73 2e  arseExpressions.
146b0 61 70 70 6c 79 28 74 61 67 24 24 31 2c 20 5b 64  apply(tag$$1, [d
146c0 6f 6d 2c 20 5f 5f 2e 69 73 41 6e 6f 6e 79 6d 6f  om, __.isAnonymo
146d0 75 73 5d 29 2c 20 66 75 6e 63 74 69 6f 6e 20 28  us]), function (
146e0 65 29 20 7b 20 72 65 74 75 72 6e 20 65 78 70 72  e) { return expr
146f0 65 73 73 69 6f 6e 73 2e 70 75 73 68 28 65 29 3b  essions.push(e);
14700 20 7d 29 3b 0a 0a 20 20 20 20 74 61 67 24 24 31   });..    tag$$1
14710 2e 75 70 64 61 74 65 28 5f 5f 2e 69 74 65 6d 29  .update(__.item)
14720 3b 0a 0a 20 20 20 20 69 66 20 28 21 5f 5f 2e 69  ;..    if (!__.i
14730 73 41 6e 6f 6e 79 6d 6f 75 73 20 26 26 20 21 5f  sAnonymous && !_
14740 5f 2e 69 73 49 6e 6c 69 6e 65 29 20 7b 0a 20 20  _.isInline) {.  
14750 20 20 20 20 77 68 69 6c 65 20 28 64 6f 6d 2e 66      while (dom.f
14760 69 72 73 74 43 68 69 6c 64 29 20 7b 20 72 6f 6f  irstChild) { roo
14770 74 2e 61 70 70 65 6e 64 43 68 69 6c 64 28 64 6f  t.appendChild(do
14780 6d 2e 66 69 72 73 74 43 68 69 6c 64 29 3b 20 7d  m.firstChild); }
14790 0a 20 20 20 20 7d 0a 0a 20 20 20 20 64 65 66 69  .    }..    defi
147a0 6e 65 28 74 61 67 24 24 31 2c 20 27 72 6f 6f 74  ne(tag$$1, 'root
147b0 27 2c 20 72 6f 6f 74 29 3b 0a 0a 20 20 20 20 2f  ', root);..    /
147c0 2f 20 69 66 20 77 65 20 6e 65 65 64 20 74 6f 20  / if we need to 
147d0 77 61 69 74 20 74 68 61 74 20 74 68 65 20 70 61  wait that the pa
147e0 72 65 6e 74 20 22 6d 6f 75 6e 74 22 20 6f 72 20  rent "mount" or 
147f0 22 75 70 64 61 74 65 64 22 20 65 76 65 6e 74 20  "updated" event 
14800 67 65 74 73 20 74 72 69 67 67 65 72 65 64 0a 20  gets triggered. 
14810 20 20 20 69 66 20 28 21 5f 5f 2e 73 6b 69 70 41     if (!__.skipA
14820 6e 6f 6e 79 6d 6f 75 73 20 26 26 20 74 61 67 24  nonymous && tag$
14830 24 31 2e 70 61 72 65 6e 74 29 20 7b 0a 20 20 20  $1.parent) {.   
14840 20 20 20 76 61 72 20 70 20 3d 20 67 65 74 49 6d     var p = getIm
14850 6d 65 64 69 61 74 65 43 75 73 74 6f 6d 50 61 72  mediateCustomPar
14860 65 6e 74 28 74 61 67 24 24 31 2e 70 61 72 65 6e  ent(tag$$1.paren
14870 74 29 3b 0a 20 20 20 20 20 20 70 2e 6f 6e 65 28  t);.      p.one(
14880 21 70 2e 69 73 4d 6f 75 6e 74 65 64 20 3f 20 27  !p.isMounted ? '
14890 6d 6f 75 6e 74 27 20 3a 20 27 75 70 64 61 74 65  mount' : 'update
148a0 64 27 2c 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  d', function () 
148b0 7b 0a 20 20 20 20 20 20 20 20 73 65 74 4d 6f 75  {.        setMou
148c0 6e 74 53 74 61 74 65 2e 63 61 6c 6c 28 74 61 67  ntState.call(tag
148d0 24 24 31 2c 20 74 72 75 65 29 3b 0a 20 20 20 20  $$1, true);.    
148e0 20 20 7d 29 3b 0a 20 20 20 20 7d 20 65 6c 73 65    });.    } else
148f0 20 7b 0a 20 20 20 20 20 20 2f 2f 20 6f 74 68 65   {.      // othe
14900 72 77 69 73 65 20 69 74 27 73 20 6e 6f 74 20 61  rwise it's not a
14910 20 63 68 69 6c 64 20 74 61 67 20 77 65 20 63 61   child tag we ca
14920 6e 20 74 72 69 67 67 65 72 20 69 74 73 20 6d 6f  n trigger its mo
14930 75 6e 74 20 65 76 65 6e 74 0a 20 20 20 20 20 20  unt event.      
14940 73 65 74 4d 6f 75 6e 74 53 74 61 74 65 2e 63 61  setMountState.ca
14950 6c 6c 28 74 61 67 24 24 31 2c 20 74 72 75 65 29  ll(tag$$1, true)
14960 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 61 67  ;.    }..    tag
14970 24 24 31 2e 5f 5f 2e 77 61 73 43 72 65 61 74 65  $$1.__.wasCreate
14980 64 20 3d 20 74 72 75 65 3b 0a 0a 20 20 20 20 72  d = true;..    r
14990 65 74 75 72 6e 20 74 61 67 24 24 31 0a 20 20 7d  eturn tag$$1.  }
149a0 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 55 6e 6d  ..  /**.   * Unm
149b0 6f 75 6e 74 20 74 68 65 20 74 61 67 20 69 6e 73  ount the tag ins
149c0 74 61 6e 63 65 0a 20 20 20 2a 20 40 70 61 72 61  tance.   * @para
149d0 6d 20 7b 20 42 6f 6f 6c 65 61 6e 20 7d 20 6d 75  m { Boolean } mu
149e0 73 74 4b 65 65 70 52 6f 6f 74 20 2d 20 69 66 20  stKeepRoot - if 
149f0 69 74 27 73 20 74 72 75 65 20 74 68 65 20 72 6f  it's true the ro
14a00 6f 74 20 6e 6f 64 65 20 77 69 6c 6c 20 6e 6f 74  ot node will not
14a10 20 62 65 20 72 65 6d 6f 76 65 64 0a 20 20 20 2a   be removed.   *
14a20 20 40 72 65 74 75 72 6e 73 20 7b 20 54 61 67 20   @returns { Tag 
14a30 7d 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61  } the current ta
14a40 67 20 69 6e 73 74 61 6e 63 65 0a 20 20 20 2a 2f  g instance.   */
14a50 0a 20 20 66 75 6e 63 74 69 6f 6e 20 74 61 67 55  .  function tagU
14a60 6e 6d 6f 75 6e 74 28 74 61 67 2c 20 6d 75 73 74  nmount(tag, must
14a70 4b 65 65 70 52 6f 6f 74 2c 20 65 78 70 72 65 73  KeepRoot, expres
14a80 73 69 6f 6e 73 29 20 7b 0a 20 20 20 20 76 61 72  sions) {.    var
14a90 20 5f 5f 20 3d 20 74 61 67 2e 5f 5f 3b 0a 20 20   __ = tag.__;.  
14aa0 20 20 76 61 72 20 72 6f 6f 74 20 3d 20 5f 5f 2e    var root = __.
14ab0 72 6f 6f 74 3b 0a 20 20 20 20 76 61 72 20 74 61  root;.    var ta
14ac0 67 49 6e 64 65 78 20 3d 20 5f 5f 54 41 47 53 5f  gIndex = __TAGS_
14ad0 43 41 43 48 45 2e 69 6e 64 65 78 4f 66 28 74 61  CACHE.indexOf(ta
14ae0 67 29 3b 0a 20 20 20 20 76 61 72 20 70 20 3d 20  g);.    var p = 
14af0 72 6f 6f 74 2e 70 61 72 65 6e 74 4e 6f 64 65 3b  root.parentNode;
14b00 0a 0a 20 20 20 20 69 66 20 28 21 5f 5f 2e 73 6b  ..    if (!__.sk
14b10 69 70 41 6e 6f 6e 79 6d 6f 75 73 29 20 7b 20 74  ipAnonymous) { t
14b20 61 67 2e 74 72 69 67 67 65 72 28 27 62 65 66 6f  ag.trigger('befo
14b30 72 65 2d 75 6e 6d 6f 75 6e 74 27 29 3b 20 7d 0a  re-unmount'); }.
14b40 0a 20 20 20 20 2f 2f 20 63 6c 65 61 72 20 61 6c  .    // clear al
14b50 6c 20 61 74 74 72 69 62 75 74 65 73 20 63 6f 6d  l attributes com
14b60 69 6e 67 20 66 72 6f 6d 20 74 68 65 20 6d 6f 75  ing from the mou
14b70 6e 74 65 64 20 74 61 67 0a 20 20 20 20 77 61 6c  nted tag.    wal
14b80 6b 41 74 74 72 69 62 75 74 65 73 28 5f 5f 2e 69  kAttributes(__.i
14b90 6d 70 6c 2e 61 74 74 72 73 2c 20 66 75 6e 63 74  mpl.attrs, funct
14ba0 69 6f 6e 20 28 6e 61 6d 65 29 20 7b 0a 20 20 20  ion (name) {.   
14bb0 20 20 20 69 66 20 28 73 74 61 72 74 73 57 69 74     if (startsWit
14bc0 68 28 6e 61 6d 65 2c 20 41 54 54 52 53 5f 50 52  h(name, ATTRS_PR
14bd0 45 46 49 58 29 29 0a 20 20 20 20 20 20 20 20 7b  EFIX)).        {
14be0 20 6e 61 6d 65 20 3d 20 6e 61 6d 65 2e 73 6c 69   name = name.sli
14bf0 63 65 28 41 54 54 52 53 5f 50 52 45 46 49 58 2e  ce(ATTRS_PREFIX.
14c00 6c 65 6e 67 74 68 29 3b 20 7d 0a 0a 20 20 20 20  length); }..    
14c10 20 20 72 65 6d 6f 76 65 41 74 74 72 69 62 75 74    removeAttribut
14c20 65 28 72 6f 6f 74 2c 20 6e 61 6d 65 29 3b 0a 20  e(root, name);. 
14c30 20 20 20 7d 29 3b 0a 0a 20 20 20 20 2f 2f 20 72     });..    // r
14c40 65 6d 6f 76 65 20 61 6c 6c 20 74 68 65 20 65 76  emove all the ev
14c50 65 6e 74 20 6c 69 73 74 65 6e 65 72 73 0a 20 20  ent listeners.  
14c60 20 20 74 61 67 2e 5f 5f 2e 6c 69 73 74 65 6e 65    tag.__.listene
14c70 72 73 2e 66 6f 72 45 61 63 68 28 66 75 6e 63 74  rs.forEach(funct
14c80 69 6f 6e 20 28 64 6f 6d 29 20 7b 0a 20 20 20 20  ion (dom) {.    
14c90 20 20 4f 62 6a 65 63 74 2e 6b 65 79 73 28 64 6f    Object.keys(do
14ca0 6d 5b 52 49 4f 54 5f 45 56 45 4e 54 53 5f 4b 45  m[RIOT_EVENTS_KE
14cb0 59 5d 29 2e 66 6f 72 45 61 63 68 28 66 75 6e 63  Y]).forEach(func
14cc0 74 69 6f 6e 20 28 65 76 65 6e 74 4e 61 6d 65 29  tion (eventName)
14cd0 20 7b 0a 20 20 20 20 20 20 20 20 64 6f 6d 2e 72   {.        dom.r
14ce0 65 6d 6f 76 65 45 76 65 6e 74 4c 69 73 74 65 6e  emoveEventListen
14cf0 65 72 28 65 76 65 6e 74 4e 61 6d 65 2c 20 64 6f  er(eventName, do
14d00 6d 5b 52 49 4f 54 5f 45 56 45 4e 54 53 5f 4b 45  m[RIOT_EVENTS_KE
14d10 59 5d 5b 65 76 65 6e 74 4e 61 6d 65 5d 29 3b 0a  Y][eventName]);.
14d20 20 20 20 20 20 20 7d 29 3b 0a 20 20 20 20 7d 29        });.    })
14d30 3b 0a 0a 20 20 20 20 2f 2f 20 72 65 6d 6f 76 65  ;..    // remove
14d40 20 74 61 67 20 69 6e 73 74 61 6e 63 65 20 66 72   tag instance fr
14d50 6f 6d 20 74 68 65 20 67 6c 6f 62 61 6c 20 74 61  om the global ta
14d60 67 73 20 63 61 63 68 65 20 63 6f 6c 6c 65 63 74  gs cache collect
14d70 69 6f 6e 0a 20 20 20 20 69 66 20 28 74 61 67 49  ion.    if (tagI
14d80 6e 64 65 78 20 21 3d 3d 20 2d 31 29 20 7b 20 5f  ndex !== -1) { _
14d90 5f 54 41 47 53 5f 43 41 43 48 45 2e 73 70 6c 69  _TAGS_CACHE.spli
14da0 63 65 28 74 61 67 49 6e 64 65 78 2c 20 31 29 3b  ce(tagIndex, 1);
14db0 20 7d 0a 0a 20 20 20 20 2f 2f 20 63 6c 65 61 6e   }..    // clean
14dc0 20 75 70 20 74 68 65 20 70 61 72 65 6e 74 20 74   up the parent t
14dd0 61 67 73 20 6f 62 6a 65 63 74 0a 20 20 20 20 69  ags object.    i
14de0 66 20 28 5f 5f 2e 70 61 72 65 6e 74 20 26 26 20  f (__.parent && 
14df0 21 5f 5f 2e 69 73 41 6e 6f 6e 79 6d 6f 75 73 29  !__.isAnonymous)
14e00 20 7b 0a 20 20 20 20 20 20 76 61 72 20 70 74 61   {.      var pta
14e10 67 20 3d 20 67 65 74 49 6d 6d 65 64 69 61 74 65  g = getImmediate
14e20 43 75 73 74 6f 6d 50 61 72 65 6e 74 28 5f 5f 2e  CustomParent(__.
14e30 70 61 72 65 6e 74 29 3b 0a 0a 20 20 20 20 20 20  parent);..      
14e40 69 66 20 28 5f 5f 2e 69 73 56 69 72 74 75 61 6c  if (__.isVirtual
14e50 29 20 7b 0a 20 20 20 20 20 20 20 20 4f 62 6a 65  ) {.        Obje
14e60 63 74 0a 20 20 20 20 20 20 20 20 20 20 2e 6b 65  ct.          .ke
14e70 79 73 28 74 61 67 2e 74 61 67 73 29 0a 20 20 20  ys(tag.tags).   
14e80 20 20 20 20 20 20 20 2e 66 6f 72 45 61 63 68 28         .forEach(
14e90 66 75 6e 63 74 69 6f 6e 20 28 74 61 67 4e 61 6d  function (tagNam
14ea0 65 29 20 7b 20 72 65 74 75 72 6e 20 61 72 72 61  e) { return arra
14eb0 79 69 73 68 52 65 6d 6f 76 65 28 70 74 61 67 2e  yishRemove(ptag.
14ec0 74 61 67 73 2c 20 74 61 67 4e 61 6d 65 2c 20 74  tags, tagName, t
14ed0 61 67 2e 74 61 67 73 5b 74 61 67 4e 61 6d 65 5d  ag.tags[tagName]
14ee0 29 3b 20 7d 29 3b 0a 20 20 20 20 20 20 7d 20 65  ); });.      } e
14ef0 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 61 72  lse {.        ar
14f00 72 61 79 69 73 68 52 65 6d 6f 76 65 28 70 74 61  rayishRemove(pta
14f10 67 2e 74 61 67 73 2c 20 5f 5f 2e 74 61 67 4e 61  g.tags, __.tagNa
14f20 6d 65 2c 20 74 61 67 29 3b 0a 20 20 20 20 20 20  me, tag);.      
14f30 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 20  }.    }..    // 
14f40 75 6e 6d 6f 75 6e 74 20 61 6c 6c 20 74 68 65 20  unmount all the 
14f50 76 69 72 74 75 61 6c 20 64 69 72 65 63 74 69 76  virtual directiv
14f60 65 73 0a 20 20 20 20 69 66 20 28 74 61 67 2e 5f  es.    if (tag._
14f70 5f 2e 76 69 72 74 73 29 20 7b 0a 20 20 20 20 20  _.virts) {.     
14f80 20 65 61 63 68 28 74 61 67 2e 5f 5f 2e 76 69 72   each(tag.__.vir
14f90 74 73 2c 20 66 75 6e 63 74 69 6f 6e 20 28 76 29  ts, function (v)
14fa0 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 76   {.        if (v
14fb0 2e 70 61 72 65 6e 74 4e 6f 64 65 29 20 7b 20 76  .parentNode) { v
14fc0 2e 70 61 72 65 6e 74 4e 6f 64 65 2e 72 65 6d 6f  .parentNode.remo
14fd0 76 65 43 68 69 6c 64 28 76 29 3b 20 7d 0a 20 20  veChild(v); }.  
14fe0 20 20 20 20 7d 29 3b 0a 20 20 20 20 7d 0a 0a 20      });.    }.. 
14ff0 20 20 20 2f 2f 20 61 6c 6c 6f 77 20 65 78 70 72     // allow expr
15000 65 73 73 69 6f 6e 73 20 74 6f 20 75 6e 6d 6f 75  essions to unmou
15010 6e 74 20 74 68 65 6d 73 65 6c 76 65 73 0a 20 20  nt themselves.  
15020 20 20 75 6e 6d 6f 75 6e 74 41 6c 6c 28 65 78 70    unmountAll(exp
15030 72 65 73 73 69 6f 6e 73 29 3b 0a 20 20 20 20 65  ressions);.    e
15040 61 63 68 28 5f 5f 2e 69 6e 73 74 41 74 74 72 73  ach(__.instAttrs
15050 2c 20 66 75 6e 63 74 69 6f 6e 20 28 61 29 20 7b  , function (a) {
15060 20 72 65 74 75 72 6e 20 61 2e 65 78 70 72 20 26   return a.expr &
15070 26 20 61 2e 65 78 70 72 2e 75 6e 6d 6f 75 6e 74  & a.expr.unmount
15080 20 26 26 20 61 2e 65 78 70 72 2e 75 6e 6d 6f 75   && a.expr.unmou
15090 6e 74 28 29 3b 20 7d 29 3b 0a 0a 20 20 20 20 2f  nt(); });..    /
150a0 2f 20 63 6c 65 61 72 20 74 68 65 20 74 61 67 20  / clear the tag 
150b0 68 74 6d 6c 20 69 66 20 69 74 27 73 20 6e 65 63  html if it's nec
150c0 65 73 73 61 72 79 0a 20 20 20 20 69 66 20 28 6d  essary.    if (m
150d0 75 73 74 4b 65 65 70 52 6f 6f 74 29 20 7b 20 73  ustKeepRoot) { s
150e0 65 74 49 6e 6e 65 72 48 54 4d 4c 28 72 6f 6f 74  etInnerHTML(root
150f0 2c 20 27 27 29 3b 20 7d 0a 20 20 20 20 2f 2f 20  , ''); }.    // 
15100 6f 74 68 65 72 77 69 73 65 20 64 65 74 61 63 68  otherwise detach
15110 20 74 68 65 20 72 6f 6f 74 20 74 61 67 20 66 72   the root tag fr
15120 6f 6d 20 74 68 65 20 44 4f 4d 0a 20 20 20 20 65  om the DOM.    e
15130 6c 73 65 20 69 66 20 28 70 29 20 7b 20 70 2e 72  lse if (p) { p.r
15140 65 6d 6f 76 65 43 68 69 6c 64 28 72 6f 6f 74 29  emoveChild(root)
15150 3b 20 7d 0a 0a 20 20 20 20 2f 2f 20 63 75 73 74  ; }..    // cust
15160 6f 6d 20 69 6e 74 65 72 6e 61 6c 20 75 6e 6d 6f  om internal unmo
15170 75 6e 74 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  unt function to 
15180 61 76 6f 69 64 20 72 65 6c 79 69 6e 67 20 6f 6e  avoid relying on
15190 20 74 68 65 20 6f 62 73 65 72 76 61 62 6c 65 0a   the observable.
151a0 20 20 20 20 69 66 20 28 5f 5f 2e 6f 6e 55 6e 6d      if (__.onUnm
151b0 6f 75 6e 74 29 20 7b 20 5f 5f 2e 6f 6e 55 6e 6d  ount) { __.onUnm
151c0 6f 75 6e 74 28 29 3b 20 7d 0a 0a 20 20 20 20 2f  ount(); }..    /
151d0 2f 20 77 65 69 72 64 20 66 69 78 20 66 6f 72 20  / weird fix for 
151e0 61 20 77 65 69 72 64 20 65 64 67 65 20 63 61 73  a weird edge cas
151f0 65 20 23 32 34 30 39 20 61 6e 64 20 23 32 34 33  e #2409 and #243
15200 36 0a 20 20 20 20 2f 2f 20 73 6f 6d 65 20 75 73  6.    // some us
15210 65 72 73 20 6d 69 67 68 74 20 75 73 65 20 79 6f  ers might use yo
15220 75 72 20 73 6f 66 74 77 61 72 65 20 6e 6f 74 20  ur software not 
15230 61 73 20 79 6f 75 27 76 65 20 65 78 70 65 63 74  as you've expect
15240 65 64 0a 20 20 20 20 2f 2f 20 73 6f 20 49 20 6e  ed.    // so I n
15250 65 65 64 20 74 6f 20 61 64 64 20 74 68 65 73 65  eed to add these
15260 20 64 69 72 74 79 20 68 61 63 6b 73 20 74 6f 20   dirty hacks to 
15270 6d 69 74 69 67 61 74 65 20 75 6e 65 78 70 65 63  mitigate unexpec
15280 74 65 64 20 69 73 73 75 65 73 0a 20 20 20 20 69  ted issues.    i
15290 66 20 28 21 74 61 67 2e 69 73 4d 6f 75 6e 74 65  f (!tag.isMounte
152a0 64 29 20 7b 20 73 65 74 4d 6f 75 6e 74 53 74 61  d) { setMountSta
152b0 74 65 2e 63 61 6c 6c 28 74 61 67 2c 20 74 72 75  te.call(tag, tru
152c0 65 29 3b 20 7d 0a 0a 20 20 20 20 73 65 74 4d 6f  e); }..    setMo
152d0 75 6e 74 53 74 61 74 65 2e 63 61 6c 6c 28 74 61  untState.call(ta
152e0 67 2c 20 66 61 6c 73 65 29 3b 0a 0a 20 20 20 20  g, false);..    
152f0 64 65 6c 65 74 65 20 72 6f 6f 74 2e 5f 74 61 67  delete root._tag
15300 3b 0a 0a 20 20 20 20 72 65 74 75 72 6e 20 74 61  ;..    return ta
15310 67 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20  g.  }..  /**.   
15320 2a 20 54 61 67 20 63 72 65 61 74 69 6f 6e 20 66  * Tag creation f
15330 61 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 0a  actory function.
15340 20 20 20 2a 20 40 63 6f 6e 73 74 72 75 63 74 6f     * @constructo
15350 72 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 7b 20  r.   * @param { 
15360 4f 62 6a 65 63 74 20 7d 20 69 6d 70 6c 20 2d 20  Object } impl - 
15370 69 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  it contains the 
15380 74 61 67 20 74 65 6d 70 6c 61 74 65 2c 20 61 6e  tag template, an
15390 64 20 6c 6f 67 69 63 0a 20 20 20 2a 20 40 70 61  d logic.   * @pa
153a0 72 61 6d 20 7b 20 4f 62 6a 65 63 74 20 7d 20 63  ram { Object } c
153b0 6f 6e 66 20 2d 20 74 61 67 20 6f 70 74 69 6f 6e  onf - tag option
153c0 73 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 7b 20  s.   * @param { 
153d0 53 74 72 69 6e 67 20 7d 20 69 6e 6e 65 72 48 54  String } innerHT
153e0 4d 4c 20 2d 20 68 74 6d 6c 20 74 68 61 74 20 65  ML - html that e
153f0 76 65 6e 74 75 61 6c 6c 79 20 77 65 20 6e 65 65  ventually we nee
15400 64 20 74 6f 20 69 6e 6a 65 63 74 20 69 6e 20 74  d to inject in t
15410 68 65 20 74 61 67 0a 20 20 20 2a 2f 0a 20 20 66  he tag.   */.  f
15420 75 6e 63 74 69 6f 6e 20 63 72 65 61 74 65 54 61  unction createTa
15430 67 28 69 6d 70 6c 2c 20 63 6f 6e 66 2c 20 69 6e  g(impl, conf, in
15440 6e 65 72 48 54 4d 4c 29 20 7b 0a 20 20 20 20 69  nerHTML) {.    i
15450 66 20 28 20 69 6d 70 6c 20 3d 3d 3d 20 76 6f 69  f ( impl === voi
15460 64 20 30 20 29 20 69 6d 70 6c 20 3d 20 7b 7d 3b  d 0 ) impl = {};
15470 0a 20 20 20 20 69 66 20 28 20 63 6f 6e 66 20 3d  .    if ( conf =
15480 3d 3d 20 76 6f 69 64 20 30 20 29 20 63 6f 6e 66  == void 0 ) conf
15490 20 3d 20 7b 7d 3b 0a 0a 20 20 20 20 76 61 72 20   = {};..    var 
154a0 74 61 67 20 3d 20 63 6f 6e 66 2e 63 6f 6e 74 65  tag = conf.conte
154b0 78 74 20 7c 7c 20 7b 7d 3b 0a 20 20 20 20 76 61  xt || {};.    va
154c0 72 20 6f 70 74 73 20 3d 20 63 6f 6e 66 2e 6f 70  r opts = conf.op
154d0 74 73 20 7c 7c 20 7b 7d 3b 0a 20 20 20 20 76 61  ts || {};.    va
154e0 72 20 70 61 72 65 6e 74 20 3d 20 63 6f 6e 66 2e  r parent = conf.
154f0 70 61 72 65 6e 74 3b 0a 20 20 20 20 76 61 72 20  parent;.    var 
15500 69 73 4c 6f 6f 70 20 3d 20 63 6f 6e 66 2e 69 73  isLoop = conf.is
15510 4c 6f 6f 70 3b 0a 20 20 20 20 76 61 72 20 69 73  Loop;.    var is
15520 41 6e 6f 6e 79 6d 6f 75 73 20 3d 20 21 21 63 6f  Anonymous = !!co
15530 6e 66 2e 69 73 41 6e 6f 6e 79 6d 6f 75 73 3b 0a  nf.isAnonymous;.
15540 20 20 20 20 76 61 72 20 73 6b 69 70 41 6e 6f 6e      var skipAnon
15550 79 6d 6f 75 73 20 3d 20 73 65 74 74 69 6e 67 73  ymous = settings
15560 2e 73 6b 69 70 41 6e 6f 6e 79 6d 6f 75 73 54 61  .skipAnonymousTa
15570 67 73 20 26 26 20 69 73 41 6e 6f 6e 79 6d 6f 75  gs && isAnonymou
15580 73 3b 0a 20 20 20 20 76 61 72 20 69 74 65 6d 20  s;.    var item 
15590 3d 20 63 6f 6e 66 2e 69 74 65 6d 3b 0a 20 20 20  = conf.item;.   
155a0 20 2f 2f 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e   // available on
155b0 6c 79 20 66 6f 72 20 74 68 65 20 6c 6f 6f 70 65  ly for the loope
155c0 64 20 6e 6f 64 65 73 0a 20 20 20 20 76 61 72 20  d nodes.    var 
155d0 69 6e 64 65 78 20 3d 20 63 6f 6e 66 2e 69 6e 64  index = conf.ind
155e0 65 78 3b 0a 20 20 20 20 2f 2f 20 41 6c 6c 20 61  ex;.    // All a
155f0 74 74 72 69 62 75 74 65 73 20 6f 6e 20 74 68 65  ttributes on the
15600 20 54 61 67 20 77 68 65 6e 20 69 74 27 73 20 66   Tag when it's f
15610 69 72 73 74 20 70 61 72 73 65 64 0a 20 20 20 20  irst parsed.    
15620 76 61 72 20 69 6e 73 74 41 74 74 72 73 20 3d 20  var instAttrs = 
15630 5b 5d 3b 0a 20 20 20 20 2f 2f 20 65 78 70 72 65  [];.    // expre
15640 73 73 69 6f 6e 73 20 6f 6e 20 74 68 69 73 20 74  ssions on this t
15650 79 70 65 20 6f 66 20 54 61 67 0a 20 20 20 20 76  ype of Tag.    v
15660 61 72 20 69 6d 70 6c 41 74 74 72 73 20 3d 20 5b  ar implAttrs = [
15670 5d 3b 0a 20 20 20 20 76 61 72 20 74 6d 70 6c 20  ];.    var tmpl 
15680 3d 20 69 6d 70 6c 2e 74 6d 70 6c 3b 0a 20 20 20  = impl.tmpl;.   
15690 20 76 61 72 20 65 78 70 72 65 73 73 69 6f 6e 73   var expressions
156a0 20 3d 20 5b 5d 3b 0a 20 20 20 20 76 61 72 20 72   = [];.    var r
156b0 6f 6f 74 20 3d 20 63 6f 6e 66 2e 72 6f 6f 74 3b  oot = conf.root;
156c0 0a 20 20 20 20 76 61 72 20 74 61 67 4e 61 6d 65  .    var tagName
156d0 20 3d 20 63 6f 6e 66 2e 74 61 67 4e 61 6d 65 20   = conf.tagName 
156e0 7c 7c 20 67 65 74 4e 61 6d 65 28 72 6f 6f 74 29  || getName(root)
156f0 3b 0a 20 20 20 20 76 61 72 20 69 73 56 69 72 74  ;.    var isVirt
15700 75 61 6c 20 3d 20 74 61 67 4e 61 6d 65 20 3d 3d  ual = tagName ==
15710 3d 20 27 76 69 72 74 75 61 6c 27 3b 0a 20 20 20  = 'virtual';.   
15720 20 76 61 72 20 69 73 49 6e 6c 69 6e 65 20 3d 20   var isInline = 
15730 21 69 73 56 69 72 74 75 61 6c 20 26 26 20 21 74  !isVirtual && !t
15740 6d 70 6c 3b 0a 20 20 20 20 76 61 72 20 64 6f 6d  mpl;.    var dom
15750 3b 0a 0a 20 20 20 20 69 66 20 28 69 73 49 6e 6c  ;..    if (isInl
15760 69 6e 65 20 7c 7c 20 69 73 4c 6f 6f 70 20 26 26  ine || isLoop &&
15770 20 69 73 41 6e 6f 6e 79 6d 6f 75 73 29 20 7b 0a   isAnonymous) {.
15780 20 20 20 20 20 20 64 6f 6d 20 3d 20 72 6f 6f 74        dom = root
15790 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20  ;.    } else {. 
157a0 20 20 20 20 20 69 66 20 28 21 69 73 56 69 72 74       if (!isVirt
157b0 75 61 6c 29 20 7b 20 72 6f 6f 74 2e 69 6e 6e 65  ual) { root.inne
157c0 72 48 54 4d 4c 20 3d 20 27 27 3b 20 7d 0a 20 20  rHTML = ''; }.  
157d0 20 20 20 20 64 6f 6d 20 3d 20 6d 6b 64 6f 6d 28      dom = mkdom(
157e0 74 6d 70 6c 2c 20 69 6e 6e 65 72 48 54 4d 4c 2c  tmpl, innerHTML,
157f0 20 69 73 53 76 67 28 72 6f 6f 74 29 29 3b 0a 20   isSvg(root));. 
15800 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 20 6d 61 6b     }..    // mak
15810 65 20 74 68 69 73 20 74 61 67 20 6f 62 73 65 72  e this tag obser
15820 76 61 62 6c 65 0a 20 20 20 20 69 66 20 28 21 73  vable.    if (!s
15830 6b 69 70 41 6e 6f 6e 79 6d 6f 75 73 29 20 7b 20  kipAnonymous) { 
15840 6f 62 73 65 72 76 61 62 6c 65 28 74 61 67 29 3b  observable(tag);
15850 20 7d 0a 0a 20 20 20 20 2f 2f 20 6f 6e 6c 79 20   }..    // only 
15860 63 61 6c 6c 20 75 6e 6d 6f 75 6e 74 20 69 66 20  call unmount if 
15870 77 65 20 68 61 76 65 20 61 20 76 61 6c 69 64 20  we have a valid 
15880 5f 5f 54 41 47 5f 49 4d 50 4c 20 28 68 61 73 20  __TAG_IMPL (has 
15890 6e 61 6d 65 20 70 72 6f 70 65 72 74 79 29 0a 20  name property). 
158a0 20 20 20 69 66 20 28 69 6d 70 6c 2e 6e 61 6d 65     if (impl.name
158b0 20 26 26 20 72 6f 6f 74 2e 5f 74 61 67 29 20 7b   && root._tag) {
158c0 20 72 6f 6f 74 2e 5f 74 61 67 2e 75 6e 6d 6f 75   root._tag.unmou
158d0 6e 74 28 74 72 75 65 29 3b 20 7d 0a 0a 20 20 20  nt(true); }..   
158e0 20 64 65 66 69 6e 65 28 74 61 67 2c 20 27 5f 5f   define(tag, '__
158f0 27 2c 20 7b 0a 20 20 20 20 20 20 69 6d 70 6c 3a  ', {.      impl:
15900 20 69 6d 70 6c 2c 0a 20 20 20 20 20 20 72 6f 6f   impl,.      roo
15910 74 3a 20 72 6f 6f 74 2c 0a 20 20 20 20 20 20 73  t: root,.      s
15920 6b 69 70 41 6e 6f 6e 79 6d 6f 75 73 3a 20 73 6b  kipAnonymous: sk
15930 69 70 41 6e 6f 6e 79 6d 6f 75 73 2c 0a 20 20 20  ipAnonymous,.   
15940 20 20 20 69 6d 70 6c 41 74 74 72 73 3a 20 69 6d     implAttrs: im
15950 70 6c 41 74 74 72 73 2c 0a 20 20 20 20 20 20 69  plAttrs,.      i
15960 73 41 6e 6f 6e 79 6d 6f 75 73 3a 20 69 73 41 6e  sAnonymous: isAn
15970 6f 6e 79 6d 6f 75 73 2c 0a 20 20 20 20 20 20 69  onymous,.      i
15980 6e 73 74 41 74 74 72 73 3a 20 69 6e 73 74 41 74  nstAttrs: instAt
15990 74 72 73 2c 0a 20 20 20 20 20 20 69 6e 6e 65 72  trs,.      inner
159a0 48 54 4d 4c 3a 20 69 6e 6e 65 72 48 54 4d 4c 2c  HTML: innerHTML,
159b0 0a 20 20 20 20 20 20 74 61 67 4e 61 6d 65 3a 20  .      tagName: 
159c0 74 61 67 4e 61 6d 65 2c 0a 20 20 20 20 20 20 69  tagName,.      i
159d0 6e 64 65 78 3a 20 69 6e 64 65 78 2c 0a 20 20 20  ndex: index,.   
159e0 20 20 20 69 73 4c 6f 6f 70 3a 20 69 73 4c 6f 6f     isLoop: isLoo
159f0 70 2c 0a 20 20 20 20 20 20 69 73 49 6e 6c 69 6e  p,.      isInlin
15a00 65 3a 20 69 73 49 6e 6c 69 6e 65 2c 0a 20 20 20  e: isInline,.   
15a10 20 20 20 69 74 65 6d 3a 20 69 74 65 6d 2c 0a 20     item: item,. 
15a20 20 20 20 20 20 70 61 72 65 6e 74 3a 20 70 61 72       parent: par
15a30 65 6e 74 2c 0a 20 20 20 20 20 20 2f 2f 20 74 61  ent,.      // ta
15a40 67 73 20 68 61 76 69 6e 67 20 65 76 65 6e 74 20  gs having event 
15a50 6c 69 73 74 65 6e 65 72 73 0a 20 20 20 20 20 20  listeners.      
15a60 2f 2f 20 69 74 20 77 6f 75 6c 64 20 62 65 20 62  // it would be b
15a70 65 74 74 65 72 20 74 6f 20 75 73 65 20 77 65 61  etter to use wea
15a80 6b 20 6d 61 70 73 20 68 65 72 65 20 62 75 74 20  k maps here but 
15a90 77 65 20 63 61 6e 20 6e 6f 74 20 69 6e 74 72 6f  we can not intro
15aa0 64 75 63 65 20 62 72 65 61 6b 69 6e 67 20 63 68  duce breaking ch
15ab0 61 6e 67 65 73 20 6e 6f 77 0a 20 20 20 20 20 20  anges now.      
15ac0 6c 69 73 74 65 6e 65 72 73 3a 20 5b 5d 2c 0a 20  listeners: [],. 
15ad0 20 20 20 20 20 2f 2f 20 74 68 65 73 65 20 76 61       // these va
15ae0 72 73 20 77 69 6c 6c 20 62 65 20 6e 65 65 64 65  rs will be neede
15af0 64 20 6f 6e 6c 79 20 66 6f 72 20 74 68 65 20 76  d only for the v
15b00 69 72 74 75 61 6c 20 74 61 67 73 0a 20 20 20 20  irtual tags.    
15b10 20 20 76 69 72 74 73 3a 20 5b 5d 2c 0a 20 20 20    virts: [],.   
15b20 20 20 20 77 61 73 43 72 65 61 74 65 64 3a 20 66     wasCreated: f
15b30 61 6c 73 65 2c 0a 20 20 20 20 20 20 74 61 69 6c  alse,.      tail
15b40 3a 20 6e 75 6c 6c 2c 0a 20 20 20 20 20 20 68 65  : null,.      he
15b50 61 64 3a 20 6e 75 6c 6c 0a 20 20 20 20 7d 29 3b  ad: null.    });
15b60 0a 0a 20 20 20 20 2f 2f 20 74 61 67 20 70 72 6f  ..    // tag pro
15b70 74 65 63 74 65 64 20 70 72 6f 70 65 72 74 69 65  tected propertie
15b80 73 0a 20 20 20 20 72 65 74 75 72 6e 20 5b 0a 20  s.    return [. 
15b90 20 20 20 20 20 5b 27 69 73 4d 6f 75 6e 74 65 64       ['isMounted
15ba0 27 2c 20 66 61 6c 73 65 5d 2c 0a 20 20 20 20 20  ', false],.     
15bb0 20 2f 2f 20 63 72 65 61 74 65 20 61 20 75 6e 69   // create a uni
15bc0 71 75 65 20 69 64 20 74 6f 20 74 68 69 73 20 74  que id to this t
15bd0 61 67 0a 20 20 20 20 20 20 2f 2f 20 69 74 20 63  ag.      // it c
15be0 6f 75 6c 64 20 62 65 20 68 61 6e 64 79 20 74 6f  ould be handy to
15bf0 20 75 73 65 20 69 74 20 61 6c 73 6f 20 74 6f 20   use it also to 
15c00 69 6d 70 72 6f 76 65 20 74 68 65 20 76 69 72 74  improve the virt
15c10 75 61 6c 20 64 6f 6d 20 72 65 6e 64 65 72 69 6e  ual dom renderin
15c20 67 20 73 70 65 65 64 0a 20 20 20 20 20 20 5b 27  g speed.      ['
15c30 5f 72 69 6f 74 5f 69 64 27 2c 20 75 69 64 28 29  _riot_id', uid()
15c40 5d 2c 0a 20 20 20 20 20 20 5b 27 72 6f 6f 74 27  ],.      ['root'
15c50 2c 20 72 6f 6f 74 5d 2c 0a 20 20 20 20 20 20 5b  , root],.      [
15c60 27 6f 70 74 73 27 2c 20 6f 70 74 73 2c 20 7b 20  'opts', opts, { 
15c70 77 72 69 74 61 62 6c 65 3a 20 74 72 75 65 2c 20  writable: true, 
15c80 65 6e 75 6d 65 72 61 62 6c 65 3a 20 74 72 75 65  enumerable: true
15c90 20 7d 5d 2c 0a 20 20 20 20 20 20 5b 27 70 61 72   }],.      ['par
15ca0 65 6e 74 27 2c 20 70 61 72 65 6e 74 20 7c 7c 20  ent', parent || 
15cb0 6e 75 6c 6c 5d 2c 0a 20 20 20 20 20 20 2f 2f 20  null],.      // 
15cc0 70 72 6f 74 65 63 74 20 74 68 65 20 22 74 61 67  protect the "tag
15cd0 73 22 20 61 6e 64 20 22 72 65 66 73 22 20 70 72  s" and "refs" pr
15ce0 6f 70 65 72 74 79 20 66 72 6f 6d 20 62 65 69 6e  operty from bein
15cf0 67 20 6f 76 65 72 72 69 64 64 65 6e 0a 20 20 20  g overridden.   
15d00 20 20 20 5b 27 74 61 67 73 27 2c 20 7b 7d 5d 2c     ['tags', {}],
15d10 0a 20 20 20 20 20 20 5b 27 72 65 66 73 27 2c 20  .      ['refs', 
15d20 7b 7d 5d 2c 0a 20 20 20 20 20 20 5b 27 75 70 64  {}],.      ['upd
15d30 61 74 65 27 2c 20 66 75 6e 63 74 69 6f 6e 20 28  ate', function (
15d40 64 61 74 61 29 20 7b 20 72 65 74 75 72 6e 20 63  data) { return c
15d50 6f 6d 70 6f 6e 65 6e 74 55 70 64 61 74 65 28 74  omponentUpdate(t
15d60 61 67 2c 20 64 61 74 61 2c 20 65 78 70 72 65 73  ag, data, expres
15d70 73 69 6f 6e 73 29 3b 20 7d 5d 2c 0a 20 20 20 20  sions); }],.    
15d80 20 20 5b 27 6d 69 78 69 6e 27 2c 20 66 75 6e 63    ['mixin', func
15d90 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20 20  tion () {.      
15da0 20 20 76 61 72 20 6d 69 78 69 6e 73 20 3d 20 5b    var mixins = [
15db0 5d 2c 20 6c 65 6e 20 3d 20 61 72 67 75 6d 65 6e  ], len = argumen
15dc0 74 73 2e 6c 65 6e 67 74 68 3b 0a 20 20 20 20 20  ts.length;.     
15dd0 20 20 20 77 68 69 6c 65 20 28 20 6c 65 6e 2d 2d     while ( len--
15de0 20 29 20 6d 69 78 69 6e 73 5b 20 6c 65 6e 20 5d   ) mixins[ len ]
15df0 20 3d 20 61 72 67 75 6d 65 6e 74 73 5b 20 6c 65   = arguments[ le
15e00 6e 20 5d 3b 0a 0a 20 20 20 20 20 20 20 20 72 65  n ];..        re
15e10 74 75 72 6e 20 63 6f 6d 70 6f 6e 65 6e 74 4d 69  turn componentMi
15e20 78 69 6e 2e 61 70 70 6c 79 28 76 6f 69 64 20 30  xin.apply(void 0
15e30 2c 20 5b 20 74 61 67 20 5d 2e 63 6f 6e 63 61 74  , [ tag ].concat
15e40 28 20 6d 69 78 69 6e 73 20 29 29 3b 0a 20 20 20  ( mixins ));.   
15e50 20 7d 5d 2c 0a 20 20 20 20 20 20 5b 27 6d 6f 75   }],.      ['mou
15e60 6e 74 27 2c 20 66 75 6e 63 74 69 6f 6e 20 28 29  nt', function ()
15e70 20 7b 20 72 65 74 75 72 6e 20 63 6f 6d 70 6f 6e   { return compon
15e80 65 6e 74 4d 6f 75 6e 74 28 74 61 67 2c 20 64 6f  entMount(tag, do
15e90 6d 2c 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20  m, expressions, 
15ea0 6f 70 74 73 29 3b 20 7d 5d 2c 0a 20 20 20 20 20  opts); }],.     
15eb0 20 5b 27 75 6e 6d 6f 75 6e 74 27 2c 20 66 75 6e   ['unmount', fun
15ec0 63 74 69 6f 6e 20 28 6d 75 73 74 4b 65 65 70 52  ction (mustKeepR
15ed0 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e 20 74 61  oot) { return ta
15ee0 67 55 6e 6d 6f 75 6e 74 28 74 61 67 2c 20 6d 75  gUnmount(tag, mu
15ef0 73 74 4b 65 65 70 52 6f 6f 74 2c 20 65 78 70 72  stKeepRoot, expr
15f00 65 73 73 69 6f 6e 73 29 3b 20 7d 5d 0a 20 20 20  essions); }].   
15f10 20 5d 2e 72 65 64 75 63 65 28 66 75 6e 63 74 69   ].reduce(functi
15f20 6f 6e 20 28 61 63 63 2c 20 72 65 66 29 20 7b 0a  on (acc, ref) {.
15f30 20 20 20 20 20 20 76 61 72 20 6b 65 79 20 3d 20        var key = 
15f40 72 65 66 5b 30 5d 3b 0a 20 20 20 20 20 20 76 61  ref[0];.      va
15f50 72 20 76 61 6c 75 65 20 3d 20 72 65 66 5b 31 5d  r value = ref[1]
15f60 3b 0a 20 20 20 20 20 20 76 61 72 20 6f 70 74 73  ;.      var opts
15f70 20 3d 20 72 65 66 5b 32 5d 3b 0a 0a 20 20 20 20   = ref[2];..    
15f80 20 20 64 65 66 69 6e 65 28 74 61 67 2c 20 6b 65    define(tag, ke
15f90 79 2c 20 76 61 6c 75 65 2c 20 6f 70 74 73 29 3b  y, value, opts);
15fa0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 63  .      return ac
15fb0 63 0a 20 20 20 20 7d 2c 20 65 78 74 65 6e 64 28  c.    }, extend(
15fc0 74 61 67 2c 20 69 74 65 6d 29 29 0a 20 20 7d 0a  tag, item)).  }.
15fd0 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 4d 6f 75 6e  .  /**.   * Moun
15fe0 74 20 61 20 74 61 67 20 63 72 65 61 74 69 6e 67  t a tag creating
15ff0 20 6e 65 77 20 54 61 67 20 69 6e 73 74 61 6e 63   new Tag instanc
16000 65 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20  e.   * @param   
16010 7b 20 4f 62 6a 65 63 74 20 7d 20 72 6f 6f 74 20  { Object } root 
16020 2d 20 64 6f 6d 20 6e 6f 64 65 20 77 68 65 72 65  - dom node where
16030 20 74 68 65 20 74 61 67 20 77 69 6c 6c 20 62 65   the tag will be
16040 20 6d 6f 75 6e 74 65 64 0a 20 20 20 2a 20 40 70   mounted.   * @p
16050 61 72 61 6d 20 20 20 7b 20 53 74 72 69 6e 67 20  aram   { String 
16060 7d 20 74 61 67 4e 61 6d 65 20 2d 20 6e 61 6d 65  } tagName - name
16070 20 6f 66 20 74 68 65 20 72 69 6f 74 20 74 61 67   of the riot tag
16080 20 77 65 20 77 61 6e 74 20 74 6f 20 6d 6f 75 6e   we want to moun
16090 74 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20  t.   * @param   
160a0 7b 20 4f 62 6a 65 63 74 20 7d 20 6f 70 74 73 20  { Object } opts 
160b0 2d 20 6f 70 74 69 6f 6e 73 20 74 6f 20 70 61 73  - options to pas
160c0 73 20 74 6f 20 74 68 65 20 54 61 67 20 69 6e 73  s to the Tag ins
160d0 74 61 6e 63 65 0a 20 20 20 2a 20 40 70 61 72 61  tance.   * @para
160e0 6d 20 20 20 7b 20 4f 62 6a 65 63 74 20 7d 20 63  m   { Object } c
160f0 74 78 20 2d 20 6f 70 74 69 6f 6e 61 6c 20 63 6f  tx - optional co
16100 6e 74 65 78 74 20 74 68 61 74 20 77 69 6c 6c 20  ntext that will 
16110 62 65 20 75 73 65 64 20 74 6f 20 65 78 74 65 6e  be used to exten
16120 64 20 61 6e 20 65 78 69 73 74 69 6e 67 20 63 6c  d an existing cl
16130 61 73 73 20 28 20 75 73 65 64 20 69 6e 20 72 69  ass ( used in ri
16140 6f 74 2e 54 61 67 20 29 0a 20 20 20 2a 20 40 72  ot.Tag ).   * @r
16150 65 74 75 72 6e 73 20 7b 20 54 61 67 20 7d 20 61  eturns { Tag } a
16160 20 6e 65 77 20 54 61 67 20 69 6e 73 74 61 6e 63   new Tag instanc
16170 65 0a 20 20 20 2a 2f 0a 20 20 66 75 6e 63 74 69  e.   */.  functi
16180 6f 6e 20 6d 6f 75 6e 74 24 31 28 72 6f 6f 74 2c  on mount$1(root,
16190 20 74 61 67 4e 61 6d 65 2c 20 6f 70 74 73 2c 20   tagName, opts, 
161a0 63 74 78 29 20 7b 0a 20 20 20 20 76 61 72 20 69  ctx) {.    var i
161b0 6d 70 6c 20 3d 20 5f 5f 54 41 47 5f 49 4d 50 4c  mpl = __TAG_IMPL
161c0 5b 74 61 67 4e 61 6d 65 5d 3b 0a 20 20 20 20 76  [tagName];.    v
161d0 61 72 20 69 6d 70 6c 43 6c 61 73 73 20 3d 20 5f  ar implClass = _
161e0 5f 54 41 47 5f 49 4d 50 4c 5b 74 61 67 4e 61 6d  _TAG_IMPL[tagNam
161f0 65 5d 2e 63 6c 61 73 73 3b 0a 20 20 20 20 76 61  e].class;.    va
16200 72 20 63 6f 6e 74 65 78 74 20 3d 20 63 74 78 20  r context = ctx 
16210 7c 7c 20 28 69 6d 70 6c 43 6c 61 73 73 20 3f 20  || (implClass ? 
16220 63 72 65 61 74 65 28 69 6d 70 6c 43 6c 61 73 73  create(implClass
16230 2e 70 72 6f 74 6f 74 79 70 65 29 20 3a 20 7b 7d  .prototype) : {}
16240 29 3b 0a 20 20 20 20 2f 2f 20 63 61 63 68 65 20  );.    // cache 
16250 74 68 65 20 69 6e 6e 65 72 20 48 54 4d 4c 20 74  the inner HTML t
16260 6f 20 66 69 78 20 23 38 35 35 0a 20 20 20 20 76  o fix #855.    v
16270 61 72 20 69 6e 6e 65 72 48 54 4d 4c 20 3d 20 72  ar innerHTML = r
16280 6f 6f 74 2e 5f 69 6e 6e 65 72 48 54 4d 4c 20 3d  oot._innerHTML =
16290 20 72 6f 6f 74 2e 5f 69 6e 6e 65 72 48 54 4d 4c   root._innerHTML
162a0 20 7c 7c 20 72 6f 6f 74 2e 69 6e 6e 65 72 48 54   || root.innerHT
162b0 4d 4c 3b 0a 20 20 20 20 76 61 72 20 63 6f 6e 66  ML;.    var conf
162c0 20 3d 20 65 78 74 65 6e 64 28 7b 20 72 6f 6f 74   = extend({ root
162d0 3a 20 72 6f 6f 74 2c 20 6f 70 74 73 3a 20 6f 70  : root, opts: op
162e0 74 73 2c 20 63 6f 6e 74 65 78 74 3a 20 63 6f 6e  ts, context: con
162f0 74 65 78 74 20 7d 2c 20 7b 20 70 61 72 65 6e 74  text }, { parent
16300 3a 20 6f 70 74 73 20 3f 20 6f 70 74 73 2e 70 61  : opts ? opts.pa
16310 72 65 6e 74 20 3a 20 6e 75 6c 6c 20 7d 29 3b 0a  rent : null });.
16320 20 20 20 20 76 61 72 20 74 61 67 3b 0a 0a 20 20      var tag;..  
16330 20 20 69 66 20 28 69 6d 70 6c 20 26 26 20 72 6f    if (impl && ro
16340 6f 74 29 20 7b 20 74 61 67 20 3d 20 63 72 65 61  ot) { tag = crea
16350 74 65 54 61 67 28 69 6d 70 6c 2c 20 63 6f 6e 66  teTag(impl, conf
16360 2c 20 69 6e 6e 65 72 48 54 4d 4c 29 3b 20 7d 0a  , innerHTML); }.
16370 0a 20 20 20 20 69 66 20 28 74 61 67 20 26 26 20  .    if (tag && 
16380 74 61 67 2e 6d 6f 75 6e 74 29 20 7b 0a 20 20 20  tag.mount) {.   
16390 20 20 20 74 61 67 2e 6d 6f 75 6e 74 28 74 72 75     tag.mount(tru
163a0 65 29 3b 0a 20 20 20 20 20 20 2f 2f 20 61 64 64  e);.      // add
163b0 20 74 68 69 73 20 74 61 67 20 74 6f 20 74 68 65   this tag to the
163c0 20 76 69 72 74 75 61 6c 44 6f 6d 20 76 61 72 69   virtualDom vari
163d0 61 62 6c 65 0a 20 20 20 20 20 20 69 66 20 28 21  able.      if (!
163e0 63 6f 6e 74 61 69 6e 73 28 5f 5f 54 41 47 53 5f  contains(__TAGS_
163f0 43 41 43 48 45 2c 20 74 61 67 29 29 20 7b 20 5f  CACHE, tag)) { _
16400 5f 54 41 47 53 5f 43 41 43 48 45 2e 70 75 73 68  _TAGS_CACHE.push
16410 28 74 61 67 29 3b 20 7d 0a 20 20 20 20 7d 0a 0a  (tag); }.    }..
16420 20 20 20 20 72 65 74 75 72 6e 20 74 61 67 0a 20      return tag. 
16430 20 7d 0a 0a 0a 0a 20 20 76 61 72 20 74 61 67 73   }....  var tags
16440 20 3d 20 2f 2a 23 5f 5f 50 55 52 45 5f 5f 2a 2f   = /*#__PURE__*/
16450 4f 62 6a 65 63 74 2e 66 72 65 65 7a 65 28 7b 0a  Object.freeze({.
16460 20 20 20 20 61 72 72 61 79 69 73 68 41 64 64 3a      arrayishAdd:
16470 20 61 72 72 61 79 69 73 68 41 64 64 2c 0a 20 20   arrayishAdd,.  
16480 20 20 67 65 74 54 61 67 4e 61 6d 65 3a 20 67 65    getTagName: ge
16490 74 4e 61 6d 65 2c 0a 20 20 20 20 69 6e 68 65 72  tName,.    inher
164a0 69 74 50 61 72 65 6e 74 50 72 6f 70 73 3a 20 69  itParentProps: i
164b0 6e 68 65 72 69 74 50 61 72 65 6e 74 50 72 6f 70  nheritParentProp
164c0 73 2c 0a 20 20 20 20 6d 6f 75 6e 74 54 6f 3a 20  s,.    mountTo: 
164d0 6d 6f 75 6e 74 24 31 2c 0a 20 20 20 20 73 65 6c  mount$1,.    sel
164e0 65 63 74 54 61 67 73 3a 20 71 75 65 72 79 2c 0a  ectTags: query,.
164f0 20 20 20 20 61 72 72 61 79 69 73 68 52 65 6d 6f      arrayishRemo
16500 76 65 3a 20 61 72 72 61 79 69 73 68 52 65 6d 6f  ve: arrayishRemo
16510 76 65 2c 0a 20 20 20 20 67 65 74 54 61 67 3a 20  ve,.    getTag: 
16520 67 65 74 2c 0a 20 20 20 20 69 6e 69 74 43 68 69  get,.    initChi
16530 6c 64 54 61 67 3a 20 69 6e 69 74 43 68 69 6c 64  ldTag: initChild
16540 2c 0a 20 20 20 20 6d 6f 76 65 43 68 69 6c 64 54  ,.    moveChildT
16550 61 67 3a 20 6d 6f 76 65 43 68 69 6c 64 2c 0a 20  ag: moveChild,. 
16560 20 20 20 6d 61 6b 65 52 65 70 6c 61 63 65 56 69     makeReplaceVi
16570 72 74 75 61 6c 3a 20 6d 61 6b 65 52 65 70 6c 61  rtual: makeRepla
16580 63 65 56 69 72 74 75 61 6c 2c 0a 20 20 20 20 67  ceVirtual,.    g
16590 65 74 49 6d 6d 65 64 69 61 74 65 43 75 73 74 6f  etImmediateCusto
165a0 6d 50 61 72 65 6e 74 54 61 67 3a 20 67 65 74 49  mParentTag: getI
165b0 6d 6d 65 64 69 61 74 65 43 75 73 74 6f 6d 50 61  mmediateCustomPa
165c0 72 65 6e 74 2c 0a 20 20 20 20 6d 61 6b 65 56 69  rent,.    makeVi
165d0 72 74 75 61 6c 3a 20 6d 61 6b 65 56 69 72 74 75  rtual: makeVirtu
165e0 61 6c 2c 0a 20 20 20 20 6d 6f 76 65 56 69 72 74  al,.    moveVirt
165f0 75 61 6c 3a 20 6d 6f 76 65 56 69 72 74 75 61 6c  ual: moveVirtual
16600 2c 0a 20 20 20 20 75 6e 6d 6f 75 6e 74 41 6c 6c  ,.    unmountAll
16610 3a 20 75 6e 6d 6f 75 6e 74 41 6c 6c 2c 0a 20 20  : unmountAll,.  
16620 20 20 63 72 65 61 74 65 49 66 44 69 72 65 63 74    createIfDirect
16630 69 76 65 3a 20 63 72 65 61 74 65 49 66 44 69 72  ive: createIfDir
16640 65 63 74 69 76 65 2c 0a 20 20 20 20 63 72 65 61  ective,.    crea
16650 74 65 52 65 66 44 69 72 65 63 74 69 76 65 3a 20  teRefDirective: 
16660 63 72 65 61 74 65 52 65 66 44 69 72 65 63 74 69  createRefDirecti
16670 76 65 0a 20 20 7d 29 3b 0a 0a 20 20 2f 2a 2a 0a  ve.  });..  /**.
16680 20 20 20 2a 20 52 69 6f 74 20 70 75 62 6c 69 63     * Riot public
16690 20 61 70 69 0a 20 20 20 2a 2f 0a 20 20 76 61 72   api.   */.  var
166a0 20 73 65 74 74 69 6e 67 73 24 31 20 3d 20 73 65   settings$1 = se
166b0 74 74 69 6e 67 73 3b 0a 20 20 76 61 72 20 75 74  ttings;.  var ut
166c0 69 6c 20 3d 20 7b 0a 20 20 20 20 74 6d 70 6c 3a  il = {.    tmpl:
166d0 20 74 6d 70 6c 2c 0a 20 20 20 20 62 72 61 63 6b   tmpl,.    brack
166e0 65 74 73 3a 20 62 72 61 63 6b 65 74 73 2c 0a 20  ets: brackets,. 
166f0 20 20 20 73 74 79 6c 65 4d 61 6e 61 67 65 72 3a     styleManager:
16700 20 73 74 79 6c 65 4d 61 6e 61 67 65 72 2c 0a 20   styleManager,. 
16710 20 20 20 76 64 6f 6d 3a 20 5f 5f 54 41 47 53 5f     vdom: __TAGS_
16720 43 41 43 48 45 2c 0a 20 20 20 20 73 74 79 6c 65  CACHE,.    style
16730 4e 6f 64 65 3a 20 73 74 79 6c 65 4d 61 6e 61 67  Node: styleManag
16740 65 72 2e 73 74 79 6c 65 4e 6f 64 65 2c 0a 20 20  er.styleNode,.  
16750 20 20 2f 2f 20 65 78 70 6f 72 74 20 74 68 65 20    // export the 
16760 72 69 6f 74 20 69 6e 74 65 72 6e 61 6c 20 75 74  riot internal ut
16770 69 6c 73 20 61 73 20 77 65 6c 6c 0a 20 20 20 20  ils as well.    
16780 64 6f 6d 3a 20 64 6f 6d 2c 0a 20 20 20 20 63 68  dom: dom,.    ch
16790 65 63 6b 3a 20 63 68 65 63 6b 2c 0a 20 20 20 20  eck: check,.    
167a0 6d 69 73 63 3a 20 6d 69 73 63 2c 0a 20 20 20 20  misc: misc,.    
167b0 74 61 67 73 3a 20 74 61 67 73 0a 20 20 7d 3b 0a  tags: tags.  };.
167c0 0a 20 20 2f 2f 20 65 78 70 6f 72 74 20 74 68 65  .  // export the
167d0 20 63 6f 72 65 20 70 72 6f 70 73 2f 6d 65 74 68   core props/meth
167e0 6f 64 73 0a 20 20 76 61 72 20 54 61 67 24 31 20  ods.  var Tag$1 
167f0 3d 20 54 61 67 3b 0a 20 20 76 61 72 20 74 61 67  = Tag;.  var tag
16800 24 31 20 3d 20 74 61 67 3b 0a 20 20 76 61 72 20  $1 = tag;.  var 
16810 74 61 67 32 24 31 20 3d 20 74 61 67 32 3b 0a 20  tag2$1 = tag2;. 
16820 20 76 61 72 20 6d 6f 75 6e 74 24 32 20 3d 20 6d   var mount$2 = m
16830 6f 75 6e 74 3b 0a 20 20 76 61 72 20 6d 69 78 69  ount;.  var mixi
16840 6e 24 31 20 3d 20 6d 69 78 69 6e 3b 0a 20 20 76  n$1 = mixin;.  v
16850 61 72 20 75 70 64 61 74 65 24 32 20 3d 20 75 70  ar update$2 = up
16860 64 61 74 65 24 31 3b 0a 20 20 76 61 72 20 75 6e  date$1;.  var un
16870 72 65 67 69 73 74 65 72 24 31 20 3d 20 75 6e 72  register$1 = unr
16880 65 67 69 73 74 65 72 3b 0a 20 20 76 61 72 20 76  egister;.  var v
16890 65 72 73 69 6f 6e 24 31 20 3d 20 76 65 72 73 69  ersion$1 = versi
168a0 6f 6e 3b 0a 20 20 76 61 72 20 6f 62 73 65 72 76  on;.  var observ
168b0 61 62 6c 65 24 31 20 3d 20 6f 62 73 65 72 76 61  able$1 = observa
168c0 62 6c 65 3b 0a 0a 20 20 76 61 72 20 72 69 6f 74  ble;..  var riot
168d0 24 31 20 3d 20 65 78 74 65 6e 64 28 7b 7d 2c 20  $1 = extend({}, 
168e0 63 6f 72 65 2c 20 7b 0a 20 20 20 20 6f 62 73 65  core, {.    obse
168f0 72 76 61 62 6c 65 3a 20 6f 62 73 65 72 76 61 62  rvable: observab
16900 6c 65 2c 0a 20 20 20 20 73 65 74 74 69 6e 67 73  le,.    settings
16910 3a 20 73 65 74 74 69 6e 67 73 24 31 2c 0a 20 20  : settings$1,.  
16920 20 20 75 74 69 6c 3a 20 75 74 69 6c 2c 0a 20 20    util: util,.  
16930 7d 29 3b 0a 0a 20 20 65 78 70 6f 72 74 73 2e 73  });..  exports.s
16940 65 74 74 69 6e 67 73 20 3d 20 73 65 74 74 69 6e  ettings = settin
16950 67 73 24 31 3b 0a 20 20 65 78 70 6f 72 74 73 2e  gs$1;.  exports.
16960 75 74 69 6c 20 3d 20 75 74 69 6c 3b 0a 20 20 65  util = util;.  e
16970 78 70 6f 72 74 73 2e 54 61 67 20 3d 20 54 61 67  xports.Tag = Tag
16980 24 31 3b 0a 20 20 65 78 70 6f 72 74 73 2e 74 61  $1;.  exports.ta
16990 67 20 3d 20 74 61 67 24 31 3b 0a 20 20 65 78 70  g = tag$1;.  exp
169a0 6f 72 74 73 2e 74 61 67 32 20 3d 20 74 61 67 32  orts.tag2 = tag2
169b0 24 31 3b 0a 20 20 65 78 70 6f 72 74 73 2e 6d 6f  $1;.  exports.mo
169c0 75 6e 74 20 3d 20 6d 6f 75 6e 74 24 32 3b 0a 20  unt = mount$2;. 
169d0 20 65 78 70 6f 72 74 73 2e 6d 69 78 69 6e 20 3d   exports.mixin =
169e0 20 6d 69 78 69 6e 24 31 3b 0a 20 20 65 78 70 6f   mixin$1;.  expo
169f0 72 74 73 2e 75 70 64 61 74 65 20 3d 20 75 70 64  rts.update = upd
16a00 61 74 65 24 32 3b 0a 20 20 65 78 70 6f 72 74 73  ate$2;.  exports
16a10 2e 75 6e 72 65 67 69 73 74 65 72 20 3d 20 75 6e  .unregister = un
16a20 72 65 67 69 73 74 65 72 24 31 3b 0a 20 20 65 78  register$1;.  ex
16a30 70 6f 72 74 73 2e 76 65 72 73 69 6f 6e 20 3d 20  ports.version = 
16a40 76 65 72 73 69 6f 6e 24 31 3b 0a 20 20 65 78 70  version$1;.  exp
16a50 6f 72 74 73 2e 6f 62 73 65 72 76 61 62 6c 65 20  orts.observable 
16a60 3d 20 6f 62 73 65 72 76 61 62 6c 65 24 31 3b 0a  = observable$1;.
16a70 20 20 65 78 70 6f 72 74 73 2e 64 65 66 61 75 6c    exports.defaul
16a80 74 20 3d 20 72 69 6f 74 24 31 3b 0a 0a 20 20 4f  t = riot$1;..  O
16a90 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70  bject.defineProp
16aa0 65 72 74 79 28 65 78 70 6f 72 74 73 2c 20 27 5f  erty(exports, '_
16ab0 5f 65 73 4d 6f 64 75 6c 65 27 2c 20 7b 20 76 61  _esModule', { va
16ac0 6c 75 65 3a 20 74 72 75 65 20 7d 29 3b 0a 0a 7d  lue: true });..}
16ad0 29 29 29 3b 0a                                   )));.