0000: 2f 2a 20 52 69 6f 74 20 76 32 2e 36 2e 31 2c 20 /* Riot v2.6.1,
0010: 40 6c 69 63 65 6e 73 65 20 4d 49 54 20 2a 2f 0a @license MIT */.
0020: 0a 3b 28 66 75 6e 63 74 69 6f 6e 28 77 69 6e 64 .;(function(wind
0030: 6f 77 2c 20 75 6e 64 65 66 69 6e 65 64 29 20 7b ow, undefined) {
0040: 0a 20 20 27 75 73 65 20 73 74 72 69 63 74 27 3b . 'use strict';
0050: 0a 76 61 72 20 72 69 6f 74 20 3d 20 7b 20 76 65 .var riot = { ve
0060: 72 73 69 6f 6e 3a 20 27 76 32 2e 36 2e 31 27 2c rsion: 'v2.6.1',
0070: 20 73 65 74 74 69 6e 67 73 3a 20 7b 7d 20 7d 2c settings: {} },
0080: 0a 20 20 2f 2f 20 62 65 20 61 77 61 72 65 2c 20 . // be aware,
0090: 69 6e 74 65 72 6e 61 6c 20 75 73 61 67 65 0a 20 internal usage.
00a0: 20 2f 2f 20 41 54 54 45 4e 54 49 4f 4e 3a 20 70 // ATTENTION: p
00b0: 72 65 66 69 78 20 74 68 65 20 67 6c 6f 62 61 6c refix the global
00c0: 20 64 79 6e 61 6d 69 63 20 76 61 72 69 61 62 6c dynamic variabl
00d0: 65 73 20 77 69 74 68 20 60 5f 5f 60 0a 0a 20 20 es with `__`..
00e0: 2f 2f 20 63 6f 75 6e 74 65 72 20 74 6f 20 67 69 // counter to gi
00f0: 76 65 20 61 20 75 6e 69 71 75 65 20 69 64 20 74 ve a unique id t
0100: 6f 20 61 6c 6c 20 74 68 65 20 54 61 67 20 69 6e o all the Tag in
0110: 73 74 61 6e 63 65 73 0a 20 20 5f 5f 75 69 64 20 stances. __uid
0120: 3d 20 30 2c 0a 20 20 2f 2f 20 74 61 67 73 20 69 = 0,. // tags i
0130: 6e 73 74 61 6e 63 65 73 20 63 61 63 68 65 0a 20 nstances cache.
0140: 20 5f 5f 76 69 72 74 75 61 6c 44 6f 6d 20 3d 20 __virtualDom =
0150: 5b 5d 2c 0a 20 20 2f 2f 20 74 61 67 73 20 69 6d [],. // tags im
0160: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 63 61 63 plementation cac
0170: 68 65 0a 20 20 5f 5f 74 61 67 49 6d 70 6c 20 3d he. __tagImpl =
0180: 20 7b 7d 2c 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a {},.. /**. *
0190: 20 43 6f 6e 73 74 0a 20 20 20 2a 2f 0a 20 20 47 Const. */. G
01a0: 4c 4f 42 41 4c 5f 4d 49 58 49 4e 20 3d 20 27 5f LOBAL_MIXIN = '_
01b0: 5f 67 6c 6f 62 61 6c 5f 6d 69 78 69 6e 27 2c 0a _global_mixin',.
01c0: 0a 20 20 2f 2f 20 72 69 6f 74 20 73 70 65 63 69 . // riot speci
01d0: 66 69 63 20 70 72 65 66 69 78 65 73 0a 20 20 52 fic prefixes. R
01e0: 49 4f 54 5f 50 52 45 46 49 58 20 3d 20 27 72 69 IOT_PREFIX = 'ri
01f0: 6f 74 2d 27 2c 0a 20 20 52 49 4f 54 5f 54 41 47 ot-',. RIOT_TAG
0200: 20 3d 20 52 49 4f 54 5f 50 52 45 46 49 58 20 2b = RIOT_PREFIX +
0210: 20 27 74 61 67 27 2c 0a 20 20 52 49 4f 54 5f 54 'tag',. RIOT_T
0220: 41 47 5f 49 53 20 3d 20 27 64 61 74 61 2d 69 73 AG_IS = 'data-is
0230: 27 2c 0a 0a 20 20 2f 2f 20 66 6f 72 20 74 79 70 ',.. // for typ
0240: 65 6f 66 20 3d 3d 20 27 27 20 63 6f 6d 70 61 72 eof == '' compar
0250: 69 73 6f 6e 73 0a 20 20 54 5f 53 54 52 49 4e 47 isons. T_STRING
0260: 20 3d 20 27 73 74 72 69 6e 67 27 2c 0a 20 20 54 = 'string',. T
0270: 5f 4f 42 4a 45 43 54 20 3d 20 27 6f 62 6a 65 63 _OBJECT = 'objec
0280: 74 27 2c 0a 20 20 54 5f 55 4e 44 45 46 20 20 3d t',. T_UNDEF =
0290: 20 27 75 6e 64 65 66 69 6e 65 64 27 2c 0a 20 20 'undefined',.
02a0: 54 5f 46 55 4e 43 54 49 4f 4e 20 3d 20 27 66 75 T_FUNCTION = 'fu
02b0: 6e 63 74 69 6f 6e 27 2c 0a 20 20 58 4c 49 4e 4b nction',. XLINK
02c0: 5f 4e 53 20 3d 20 27 68 74 74 70 3a 2f 2f 77 77 _NS = 'http://ww
02d0: 77 2e 77 33 2e 6f 72 67 2f 31 39 39 39 2f 78 6c w.w3.org/1999/xl
02e0: 69 6e 6b 27 2c 0a 20 20 58 4c 49 4e 4b 5f 52 45 ink',. XLINK_RE
02f0: 47 45 58 20 3d 20 2f 5e 78 6c 69 6e 6b 3a 28 5c GEX = /^xlink:(\
0300: 77 2b 29 2f 2c 0a 20 20 2f 2f 20 73 70 65 63 69 w+)/,. // speci
0310: 61 6c 20 6e 61 74 69 76 65 20 74 61 67 73 20 74 al native tags t
0320: 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 74 72 hat cannot be tr
0330: 65 61 74 65 64 20 6c 69 6b 65 20 74 68 65 20 6f eated like the o
0340: 74 68 65 72 73 0a 20 20 53 50 45 43 49 41 4c 5f thers. SPECIAL_
0350: 54 41 47 53 5f 52 45 47 45 58 20 3d 20 2f 5e 28 TAGS_REGEX = /^(
0360: 3f 3a 74 28 3f 3a 62 6f 64 79 7c 68 65 61 64 7c ?:t(?:body|head|
0370: 66 6f 6f 74 7c 5b 72 68 64 5d 29 7c 63 61 70 74 foot|[rhd])|capt
0380: 69 6f 6e 7c 63 6f 6c 28 3f 3a 67 72 6f 75 70 29 ion|col(?:group)
0390: 3f 7c 6f 70 74 28 3f 3a 69 6f 6e 7c 67 72 6f 75 ?|opt(?:ion|grou
03a0: 70 29 29 24 2f 2c 0a 20 20 52 45 53 45 52 56 45 p))$/,. RESERVE
03b0: 44 5f 57 4f 52 44 53 5f 42 4c 41 43 4b 4c 49 53 D_WORDS_BLACKLIS
03c0: 54 20 3d 20 2f 5e 28 3f 3a 5f 28 3f 3a 69 74 65 T = /^(?:_(?:ite
03d0: 6d 7c 69 64 7c 70 61 72 65 6e 74 29 7c 75 70 64 m|id|parent)|upd
03e0: 61 74 65 7c 72 6f 6f 74 7c 28 3f 3a 75 6e 29 3f ate|root|(?:un)?
03f0: 6d 6f 75 6e 74 7c 6d 69 78 69 6e 7c 69 73 28 3f mount|mixin|is(?
0400: 3a 4d 6f 75 6e 74 65 64 7c 4c 6f 6f 70 29 7c 74 :Mounted|Loop)|t
0410: 61 67 73 7c 70 61 72 65 6e 74 7c 6f 70 74 73 7c ags|parent|opts|
0420: 74 72 69 67 67 65 72 7c 6f 28 3f 3a 6e 7c 66 66 trigger|o(?:n|ff
0430: 7c 6e 65 29 29 24 2f 2c 0a 20 20 2f 2f 20 53 56 |ne))$/,. // SV
0440: 47 20 74 61 67 73 20 6c 69 73 74 20 68 74 74 70 G tags list http
0450: 73 3a 2f 2f 77 77 77 2e 77 33 2e 6f 72 67 2f 54 s://www.w3.org/T
0460: 52 2f 53 56 47 2f 61 74 74 69 6e 64 65 78 2e 68 R/SVG/attindex.h
0470: 74 6d 6c 23 50 72 65 73 65 6e 74 61 74 69 6f 6e tml#Presentation
0480: 41 74 74 72 69 62 75 74 65 73 0a 20 20 53 56 47 Attributes. SVG
0490: 5f 54 41 47 53 5f 4c 49 53 54 20 3d 20 5b 27 61 _TAGS_LIST = ['a
04a0: 6c 74 47 6c 79 70 68 27 2c 20 27 61 6e 69 6d 61 ltGlyph', 'anima
04b0: 74 65 27 2c 20 27 61 6e 69 6d 61 74 65 43 6f 6c te', 'animateCol
04c0: 6f 72 27 2c 20 27 63 69 72 63 6c 65 27 2c 20 27 or', 'circle', '
04d0: 63 6c 69 70 50 61 74 68 27 2c 20 27 64 65 66 73 clipPath', 'defs
04e0: 27 2c 20 27 65 6c 6c 69 70 73 65 27 2c 20 27 66 ', 'ellipse', 'f
04f0: 65 42 6c 65 6e 64 27 2c 20 27 66 65 43 6f 6c 6f eBlend', 'feColo
0500: 72 4d 61 74 72 69 78 27 2c 20 27 66 65 43 6f 6d rMatrix', 'feCom
0510: 70 6f 6e 65 6e 74 54 72 61 6e 73 66 65 72 27 2c ponentTransfer',
0520: 20 27 66 65 43 6f 6d 70 6f 73 69 74 65 27 2c 20 'feComposite',
0530: 27 66 65 43 6f 6e 76 6f 6c 76 65 4d 61 74 72 69 'feConvolveMatri
0540: 78 27 2c 20 27 66 65 44 69 66 66 75 73 65 4c 69 x', 'feDiffuseLi
0550: 67 68 74 69 6e 67 27 2c 20 27 66 65 44 69 73 70 ghting', 'feDisp
0560: 6c 61 63 65 6d 65 6e 74 4d 61 70 27 2c 20 27 66 lacementMap', 'f
0570: 65 46 6c 6f 6f 64 27 2c 20 27 66 65 47 61 75 73 eFlood', 'feGaus
0580: 73 69 61 6e 42 6c 75 72 27 2c 20 27 66 65 49 6d sianBlur', 'feIm
0590: 61 67 65 27 2c 20 27 66 65 4d 65 72 67 65 27 2c age', 'feMerge',
05a0: 20 27 66 65 4d 6f 72 70 68 6f 6c 6f 67 79 27 2c 'feMorphology',
05b0: 20 27 66 65 4f 66 66 73 65 74 27 2c 20 27 66 65 'feOffset', 'fe
05c0: 53 70 65 63 75 6c 61 72 4c 69 67 68 74 69 6e 67 SpecularLighting
05d0: 27 2c 20 27 66 65 54 69 6c 65 27 2c 20 27 66 65 ', 'feTile', 'fe
05e0: 54 75 72 62 75 6c 65 6e 63 65 27 2c 20 27 66 69 Turbulence', 'fi
05f0: 6c 74 65 72 27 2c 20 27 66 6f 6e 74 27 2c 20 27 lter', 'font', '
0600: 66 6f 72 65 69 67 6e 4f 62 6a 65 63 74 27 2c 20 foreignObject',
0610: 27 67 27 2c 20 27 67 6c 79 70 68 27 2c 20 27 67 'g', 'glyph', 'g
0620: 6c 79 70 68 52 65 66 27 2c 20 27 69 6d 61 67 65 lyphRef', 'image
0630: 27 2c 20 27 6c 69 6e 65 27 2c 20 27 6c 69 6e 65 ', 'line', 'line
0640: 61 72 47 72 61 64 69 65 6e 74 27 2c 20 27 6d 61 arGradient', 'ma
0650: 72 6b 65 72 27 2c 20 27 6d 61 73 6b 27 2c 20 27 rker', 'mask', '
0660: 6d 69 73 73 69 6e 67 2d 67 6c 79 70 68 27 2c 20 missing-glyph',
0670: 27 70 61 74 68 27 2c 20 27 70 61 74 74 65 72 6e 'path', 'pattern
0680: 27 2c 20 27 70 6f 6c 79 67 6f 6e 27 2c 20 27 70 ', 'polygon', 'p
0690: 6f 6c 79 6c 69 6e 65 27 2c 20 27 72 61 64 69 61 olyline', 'radia
06a0: 6c 47 72 61 64 69 65 6e 74 27 2c 20 27 72 65 63 lGradient', 'rec
06b0: 74 27 2c 20 27 73 74 6f 70 27 2c 20 27 73 76 67 t', 'stop', 'svg
06c0: 27 2c 20 27 73 77 69 74 63 68 27 2c 20 27 73 79 ', 'switch', 'sy
06d0: 6d 62 6f 6c 27 2c 20 27 74 65 78 74 27 2c 20 27 mbol', 'text', '
06e0: 74 65 78 74 50 61 74 68 27 2c 20 27 74 72 65 66 textPath', 'tref
06f0: 27 2c 20 27 74 73 70 61 6e 27 2c 20 27 75 73 65 ', 'tspan', 'use
0700: 27 5d 2c 0a 0a 20 20 2f 2f 20 76 65 72 73 69 6f '],.. // versio
0710: 6e 23 20 66 6f 72 20 49 45 20 38 2d 31 31 2c 20 n# for IE 8-11,
0720: 30 20 66 6f 72 20 6f 74 68 65 72 73 0a 20 20 49 0 for others. I
0730: 45 5f 56 45 52 53 49 4f 4e 20 3d 20 28 77 69 6e E_VERSION = (win
0740: 64 6f 77 20 26 26 20 77 69 6e 64 6f 77 2e 64 6f dow && window.do
0750: 63 75 6d 65 6e 74 20 7c 7c 20 7b 7d 29 2e 64 6f cument || {}).do
0760: 63 75 6d 65 6e 74 4d 6f 64 65 20 7c 20 30 2c 0a cumentMode | 0,.
0770: 0a 20 20 2f 2f 20 64 65 74 65 63 74 20 66 69 72 . // detect fir
0780: 65 66 6f 78 20 74 6f 20 66 69 78 20 23 31 33 37 efox to fix #137
0790: 34 0a 20 20 46 49 52 45 46 4f 58 20 3d 20 77 69 4. FIREFOX = wi
07a0: 6e 64 6f 77 20 26 26 20 21 21 77 69 6e 64 6f 77 ndow && !!window
07b0: 2e 49 6e 73 74 61 6c 6c 54 72 69 67 67 65 72 0a .InstallTrigger.
07c0: 2f 2a 20 69 73 74 61 6e 62 75 6c 20 69 67 6e 6f /* istanbul igno
07d0: 72 65 20 6e 65 78 74 20 2a 2f 0a 72 69 6f 74 2e re next */.riot.
07e0: 6f 62 73 65 72 76 61 62 6c 65 20 3d 20 66 75 6e observable = fun
07f0: 63 74 69 6f 6e 28 65 6c 29 20 7b 0a 0a 20 20 2f ction(el) {.. /
0800: 2a 2a 0a 20 20 20 2a 20 45 78 74 65 6e 64 20 74 **. * Extend t
0810: 68 65 20 6f 72 69 67 69 6e 61 6c 20 6f 62 6a 65 he original obje
0820: 63 74 20 6f 72 20 63 72 65 61 74 65 20 61 20 6e ct or create a n
0830: 65 77 20 65 6d 70 74 79 20 6f 6e 65 0a 20 20 20 ew empty one.
0840: 2a 20 40 74 79 70 65 20 7b 20 4f 62 6a 65 63 74 * @type { Object
0850: 20 7d 0a 20 20 20 2a 2f 0a 0a 20 20 65 6c 20 3d }. */.. el =
0860: 20 65 6c 20 7c 7c 20 7b 7d 0a 0a 20 20 2f 2a 2a el || {}.. /**
0870: 0a 20 20 20 2a 20 50 72 69 76 61 74 65 20 76 61 . * Private va
0880: 72 69 61 62 6c 65 73 0a 20 20 20 2a 2f 0a 20 20 riables. */.
0890: 76 61 72 20 63 61 6c 6c 62 61 63 6b 73 20 3d 20 var callbacks =
08a0: 7b 7d 2c 0a 20 20 20 20 73 6c 69 63 65 20 3d 20 {},. slice =
08b0: 41 72 72 61 79 2e 70 72 6f 74 6f 74 79 70 65 2e Array.prototype.
08c0: 73 6c 69 63 65 0a 0a 20 20 2f 2a 2a 0a 20 20 20 slice.. /**.
08d0: 2a 20 50 72 69 76 61 74 65 20 4d 65 74 68 6f 64 * Private Method
08e0: 73 0a 20 20 20 2a 2f 0a 0a 20 20 2f 2a 2a 0a 20 s. */.. /**.
08f0: 20 20 2a 20 48 65 6c 70 65 72 20 66 75 6e 63 74 * Helper funct
0900: 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 ion needed to ge
0910: 74 20 61 6e 64 20 6c 6f 6f 70 20 61 6c 6c 20 74 t and loop all t
0920: 68 65 20 65 76 65 6e 74 73 20 69 6e 20 61 20 73 he events in a s
0930: 74 72 69 6e 67 0a 20 20 20 2a 20 40 70 61 72 61 tring. * @para
0940: 6d 20 20 20 7b 20 53 74 72 69 6e 67 20 7d 20 20 m { String }
0950: 20 65 20 2d 20 65 76 65 6e 74 20 73 74 72 69 6e e - event strin
0960: 67 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20 g. * @param
0970: 7b 46 75 6e 63 74 69 6f 6e 7d 20 20 20 66 6e 20 {Function} fn
0980: 2d 20 63 61 6c 6c 62 61 63 6b 0a 20 20 20 2a 2f - callback. */
0990: 0a 20 20 66 75 6e 63 74 69 6f 6e 20 6f 6e 45 61 . function onEa
09a0: 63 68 45 76 65 6e 74 28 65 2c 20 66 6e 29 20 7b chEvent(e, fn) {
09b0: 0a 20 20 20 20 76 61 72 20 65 73 20 3d 20 65 2e . var es = e.
09c0: 73 70 6c 69 74 28 27 20 27 29 2c 20 6c 20 3d 20 split(' '), l =
09d0: 65 73 2e 6c 65 6e 67 74 68 2c 20 69 20 3d 20 30 es.length, i = 0
09e0: 0a 20 20 20 20 66 6f 72 20 28 3b 20 69 20 3c 20 . for (; i <
09f0: 6c 3b 20 69 2b 2b 29 20 7b 0a 20 20 20 20 20 20 l; i++) {.
0a00: 76 61 72 20 6e 61 6d 65 20 3d 20 65 73 5b 69 5d var name = es[i]
0a10: 0a 20 20 20 20 20 20 69 66 20 28 6e 61 6d 65 29 . if (name)
0a20: 20 66 6e 28 6e 61 6d 65 2c 20 69 29 0a 20 20 20 fn(name, i).
0a30: 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 }. }.. /**.
0a40: 20 2a 20 50 75 62 6c 69 63 20 41 70 69 0a 20 20 * Public Api.
0a50: 20 2a 2f 0a 0a 20 20 2f 2f 20 65 78 74 65 6e 64 */.. // extend
0a60: 20 74 68 65 20 65 6c 20 6f 62 6a 65 63 74 20 61 the el object a
0a70: 64 64 69 6e 67 20 74 68 65 20 6f 62 73 65 72 76 dding the observ
0a80: 61 62 6c 65 20 6d 65 74 68 6f 64 73 0a 20 20 4f able methods. O
0a90: 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 bject.defineProp
0aa0: 65 72 74 69 65 73 28 65 6c 2c 20 7b 0a 20 20 20 erties(el, {.
0ab0: 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 4c 69 73 74 /**. * List
0ac0: 65 6e 20 74 6f 20 74 68 65 20 67 69 76 65 6e 20 en to the given
0ad0: 73 70 61 63 65 20 73 65 70 61 72 61 74 65 64 20 space separated
0ae0: 6c 69 73 74 20 6f 66 20 60 65 76 65 6e 74 73 60 list of `events`
0af0: 20 61 6e 64 0a 20 20 20 20 20 2a 20 65 78 65 63 and. * exec
0b00: 75 74 65 20 74 68 65 20 60 63 61 6c 6c 62 61 63 ute the `callbac
0b10: 6b 60 20 65 61 63 68 20 74 69 6d 65 20 61 6e 20 k` each time an
0b20: 65 76 65 6e 74 20 69 73 20 74 72 69 67 67 65 72 event is trigger
0b30: 65 64 2e 0a 20 20 20 20 20 2a 20 40 70 61 72 61 ed.. * @para
0b40: 6d 20 20 7b 20 53 74 72 69 6e 67 20 7d 20 65 76 m { String } ev
0b50: 65 6e 74 73 20 2d 20 65 76 65 6e 74 73 20 69 64 ents - events id
0b60: 73 0a 20 20 20 20 20 2a 20 40 70 61 72 61 6d 20 s. * @param
0b70: 20 7b 20 46 75 6e 63 74 69 6f 6e 20 7d 20 66 6e { Function } fn
0b80: 20 2d 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 - callback func
0b90: 74 69 6f 6e 0a 20 20 20 20 20 2a 20 40 72 65 74 tion. * @ret
0ba0: 75 72 6e 73 20 7b 20 4f 62 6a 65 63 74 20 7d 20 urns { Object }
0bb0: 65 6c 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 6f el. */. o
0bc0: 6e 3a 20 7b 0a 20 20 20 20 20 20 76 61 6c 75 65 n: {. value
0bd0: 3a 20 66 75 6e 63 74 69 6f 6e 28 65 76 65 6e 74 : function(event
0be0: 73 2c 20 66 6e 29 20 7b 0a 20 20 20 20 20 20 20 s, fn) {.
0bf0: 20 69 66 20 28 74 79 70 65 6f 66 20 66 6e 20 21 if (typeof fn !
0c00: 3d 20 27 66 75 6e 63 74 69 6f 6e 27 29 20 20 72 = 'function') r
0c10: 65 74 75 72 6e 20 65 6c 0a 0a 20 20 20 20 20 20 eturn el..
0c20: 20 20 6f 6e 45 61 63 68 45 76 65 6e 74 28 65 76 onEachEvent(ev
0c30: 65 6e 74 73 2c 20 66 75 6e 63 74 69 6f 6e 28 6e ents, function(n
0c40: 61 6d 65 2c 20 70 6f 73 29 20 7b 0a 20 20 20 20 ame, pos) {.
0c50: 20 20 20 20 20 20 28 63 61 6c 6c 62 61 63 6b 73 (callbacks
0c60: 5b 6e 61 6d 65 5d 20 3d 20 63 61 6c 6c 62 61 63 [name] = callbac
0c70: 6b 73 5b 6e 61 6d 65 5d 20 7c 7c 20 5b 5d 29 2e ks[name] || []).
0c80: 70 75 73 68 28 66 6e 29 0a 20 20 20 20 20 20 20 push(fn).
0c90: 20 20 20 66 6e 2e 74 79 70 65 64 20 3d 20 70 6f fn.typed = po
0ca0: 73 20 3e 20 30 0a 20 20 20 20 20 20 20 20 7d 29 s > 0. })
0cb0: 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return
0cc0: 20 65 6c 0a 20 20 20 20 20 20 7d 2c 0a 20 20 20 el. },.
0cd0: 20 20 20 65 6e 75 6d 65 72 61 62 6c 65 3a 20 66 enumerable: f
0ce0: 61 6c 73 65 2c 0a 20 20 20 20 20 20 77 72 69 74 alse,. writ
0cf0: 61 62 6c 65 3a 20 66 61 6c 73 65 2c 0a 20 20 20 able: false,.
0d00: 20 20 20 63 6f 6e 66 69 67 75 72 61 62 6c 65 3a configurable:
0d10: 20 66 61 6c 73 65 0a 20 20 20 20 7d 2c 0a 0a 20 false. },..
0d20: 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 52 65 /**. * Re
0d30: 6d 6f 76 65 73 20 74 68 65 20 67 69 76 65 6e 20 moves the given
0d40: 73 70 61 63 65 20 73 65 70 61 72 61 74 65 64 20 space separated
0d50: 6c 69 73 74 20 6f 66 20 60 65 76 65 6e 74 73 60 list of `events`
0d60: 20 6c 69 73 74 65 6e 65 72 73 0a 20 20 20 20 20 listeners.
0d70: 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 53 74 72 * @param { Str
0d80: 69 6e 67 20 7d 20 65 76 65 6e 74 73 20 2d 20 65 ing } events - e
0d90: 76 65 6e 74 73 20 69 64 73 0a 20 20 20 20 20 2a vents ids. *
0da0: 20 40 70 61 72 61 6d 20 20 20 7b 20 46 75 6e 63 @param { Func
0db0: 74 69 6f 6e 20 7d 20 66 6e 20 2d 20 63 61 6c 6c tion } fn - call
0dc0: 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 0a 20 20 back function.
0dd0: 20 20 20 2a 20 40 72 65 74 75 72 6e 73 20 7b 20 * @returns {
0de0: 4f 62 6a 65 63 74 20 7d 20 65 6c 0a 20 20 20 20 Object } el.
0df0: 20 2a 2f 0a 20 20 20 20 6f 66 66 3a 20 7b 0a 20 */. off: {.
0e00: 20 20 20 20 20 76 61 6c 75 65 3a 20 66 75 6e 63 value: func
0e10: 74 69 6f 6e 28 65 76 65 6e 74 73 2c 20 66 6e 29 tion(events, fn)
0e20: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 65 {. if (e
0e30: 76 65 6e 74 73 20 3d 3d 20 27 2a 27 20 26 26 20 vents == '*' &&
0e40: 21 66 6e 29 20 63 61 6c 6c 62 61 63 6b 73 20 3d !fn) callbacks =
0e50: 20 7b 7d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 {}. else
0e60: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 6f 6e 45 {. onE
0e70: 61 63 68 45 76 65 6e 74 28 65 76 65 6e 74 73 2c achEvent(events,
0e80: 20 66 75 6e 63 74 69 6f 6e 28 6e 61 6d 65 2c 20 function(name,
0e90: 70 6f 73 29 20 7b 0a 20 20 20 20 20 20 20 20 20 pos) {.
0ea0: 20 20 20 69 66 20 28 66 6e 29 20 7b 0a 20 20 20 if (fn) {.
0eb0: 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20 61 var a
0ec0: 72 72 20 3d 20 63 61 6c 6c 62 61 63 6b 73 5b 6e rr = callbacks[n
0ed0: 61 6d 65 5d 0a 20 20 20 20 20 20 20 20 20 20 20 ame].
0ee0: 20 20 20 66 6f 72 20 28 76 61 72 20 69 20 3d 20 for (var i =
0ef0: 30 2c 20 63 62 3b 20 63 62 20 3d 20 61 72 72 20 0, cb; cb = arr
0f00: 26 26 20 61 72 72 5b 69 5d 3b 20 2b 2b 69 29 20 && arr[i]; ++i)
0f10: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
0f20: 20 20 69 66 20 28 63 62 20 3d 3d 20 66 6e 29 20 if (cb == fn)
0f30: 61 72 72 2e 73 70 6c 69 63 65 28 69 2d 2d 2c 20 arr.splice(i--,
0f40: 31 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 1).
0f50: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }. }
0f60: 20 65 6c 73 65 20 64 65 6c 65 74 65 20 63 61 6c else delete cal
0f70: 6c 62 61 63 6b 73 5b 6e 61 6d 65 5d 0a 20 20 20 lbacks[name].
0f80: 20 20 20 20 20 20 20 7d 29 0a 20 20 20 20 20 20 }).
0f90: 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 }. retu
0fa0: 72 6e 20 65 6c 0a 20 20 20 20 20 20 7d 2c 0a 20 rn el. },.
0fb0: 20 20 20 20 20 65 6e 75 6d 65 72 61 62 6c 65 3a enumerable:
0fc0: 20 66 61 6c 73 65 2c 0a 20 20 20 20 20 20 77 72 false,. wr
0fd0: 69 74 61 62 6c 65 3a 20 66 61 6c 73 65 2c 0a 20 itable: false,.
0fe0: 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 62 6c configurabl
0ff0: 65 3a 20 66 61 6c 73 65 0a 20 20 20 20 7d 2c 0a e: false. },.
1000: 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 . /**. *
1010: 4c 69 73 74 65 6e 20 74 6f 20 74 68 65 20 67 69 Listen to the gi
1020: 76 65 6e 20 73 70 61 63 65 20 73 65 70 61 72 61 ven space separa
1030: 74 65 64 20 6c 69 73 74 20 6f 66 20 60 65 76 65 ted list of `eve
1040: 6e 74 73 60 20 61 6e 64 0a 20 20 20 20 20 2a 20 nts` and. *
1050: 65 78 65 63 75 74 65 20 74 68 65 20 60 63 61 6c execute the `cal
1060: 6c 62 61 63 6b 60 20 61 74 20 6d 6f 73 74 20 6f lback` at most o
1070: 6e 63 65 0a 20 20 20 20 20 2a 20 40 70 61 72 61 nce. * @para
1080: 6d 20 20 20 7b 20 53 74 72 69 6e 67 20 7d 20 65 m { String } e
1090: 76 65 6e 74 73 20 2d 20 65 76 65 6e 74 73 20 69 vents - events i
10a0: 64 73 0a 20 20 20 20 20 2a 20 40 70 61 72 61 6d ds. * @param
10b0: 20 20 20 7b 20 46 75 6e 63 74 69 6f 6e 20 7d 20 { Function }
10c0: 66 6e 20 2d 20 63 61 6c 6c 62 61 63 6b 20 66 75 fn - callback fu
10d0: 6e 63 74 69 6f 6e 0a 20 20 20 20 20 2a 20 40 72 nction. * @r
10e0: 65 74 75 72 6e 73 20 7b 20 4f 62 6a 65 63 74 20 eturns { Object
10f0: 7d 20 65 6c 0a 20 20 20 20 20 2a 2f 0a 20 20 20 } el. */.
1100: 20 6f 6e 65 3a 20 7b 0a 20 20 20 20 20 20 76 61 one: {. va
1110: 6c 75 65 3a 20 66 75 6e 63 74 69 6f 6e 28 65 76 lue: function(ev
1120: 65 6e 74 73 2c 20 66 6e 29 20 7b 0a 20 20 20 20 ents, fn) {.
1130: 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6f 6e 28 function on(
1140: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 65 6c ) {. el
1150: 2e 6f 66 66 28 65 76 65 6e 74 73 2c 20 6f 6e 29 .off(events, on)
1160: 0a 20 20 20 20 20 20 20 20 20 20 66 6e 2e 61 70 . fn.ap
1170: 70 6c 79 28 65 6c 2c 20 61 72 67 75 6d 65 6e 74 ply(el, argument
1180: 73 29 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 s). }.
1190: 20 20 20 20 20 72 65 74 75 72 6e 20 65 6c 2e 6f return el.o
11a0: 6e 28 65 76 65 6e 74 73 2c 20 6f 6e 29 0a 20 20 n(events, on).
11b0: 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 65 6e 75 },. enu
11c0: 6d 65 72 61 62 6c 65 3a 20 66 61 6c 73 65 2c 0a merable: false,.
11d0: 20 20 20 20 20 20 77 72 69 74 61 62 6c 65 3a 20 writable:
11e0: 66 61 6c 73 65 2c 0a 20 20 20 20 20 20 63 6f 6e false,. con
11f0: 66 69 67 75 72 61 62 6c 65 3a 20 66 61 6c 73 65 figurable: false
1200: 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 2f 2a 2a . },.. /**
1210: 0a 20 20 20 20 20 2a 20 45 78 65 63 75 74 65 20 . * Execute
1220: 61 6c 6c 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e all callback fun
1230: 63 74 69 6f 6e 73 20 74 68 61 74 20 6c 69 73 74 ctions that list
1240: 65 6e 20 74 6f 0a 20 20 20 20 20 2a 20 74 68 65 en to. * the
1250: 20 67 69 76 65 6e 20 73 70 61 63 65 20 73 65 70 given space sep
1260: 61 72 61 74 65 64 20 6c 69 73 74 20 6f 66 20 60 arated list of `
1270: 65 76 65 6e 74 73 60 0a 20 20 20 20 20 2a 20 40 events`. * @
1280: 70 61 72 61 6d 20 20 20 7b 20 53 74 72 69 6e 67 param { String
1290: 20 7d 20 65 76 65 6e 74 73 20 2d 20 65 76 65 6e } events - even
12a0: 74 73 20 69 64 73 0a 20 20 20 20 20 2a 20 40 72 ts ids. * @r
12b0: 65 74 75 72 6e 73 20 7b 20 4f 62 6a 65 63 74 20 eturns { Object
12c0: 7d 20 65 6c 0a 20 20 20 20 20 2a 2f 0a 20 20 20 } el. */.
12d0: 20 74 72 69 67 67 65 72 3a 20 7b 0a 20 20 20 20 trigger: {.
12e0: 20 20 76 61 6c 75 65 3a 20 66 75 6e 63 74 69 6f value: functio
12f0: 6e 28 65 76 65 6e 74 73 29 20 7b 0a 0a 20 20 20 n(events) {..
1300: 20 20 20 20 20 2f 2f 20 67 65 74 74 69 6e 67 20 // getting
1310: 74 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 20 20 the arguments.
1320: 20 20 20 20 20 20 76 61 72 20 61 72 67 6c 65 6e var arglen
1330: 20 3d 20 61 72 67 75 6d 65 6e 74 73 2e 6c 65 6e = arguments.len
1340: 67 74 68 20 2d 20 31 2c 0a 20 20 20 20 20 20 20 gth - 1,.
1350: 20 20 20 61 72 67 73 20 3d 20 6e 65 77 20 41 72 args = new Ar
1360: 72 61 79 28 61 72 67 6c 65 6e 29 2c 0a 20 20 20 ray(arglen),.
1370: 20 20 20 20 20 20 20 66 6e 73 0a 0a 20 20 20 20 fns..
1380: 20 20 20 20 66 6f 72 20 28 76 61 72 20 69 20 3d for (var i =
1390: 20 30 3b 20 69 20 3c 20 61 72 67 6c 65 6e 3b 20 0; i < arglen;
13a0: 69 2b 2b 29 20 7b 0a 20 20 20 20 20 20 20 20 20 i++) {.
13b0: 20 61 72 67 73 5b 69 5d 20 3d 20 61 72 67 75 6d args[i] = argum
13c0: 65 6e 74 73 5b 69 20 2b 20 31 5d 20 2f 2f 20 73 ents[i + 1] // s
13d0: 6b 69 70 20 66 69 72 73 74 20 61 72 67 75 6d 65 kip first argume
13e0: 6e 74 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 nt. }..
13f0: 20 20 20 20 20 20 6f 6e 45 61 63 68 45 76 65 6e onEachEven
1400: 74 28 65 76 65 6e 74 73 2c 20 66 75 6e 63 74 69 t(events, functi
1410: 6f 6e 28 6e 61 6d 65 2c 20 70 6f 73 29 20 7b 0a on(name, pos) {.
1420: 0a 20 20 20 20 20 20 20 20 20 20 66 6e 73 20 3d . fns =
1430: 20 73 6c 69 63 65 2e 63 61 6c 6c 28 63 61 6c 6c slice.call(call
1440: 62 61 63 6b 73 5b 6e 61 6d 65 5d 20 7c 7c 20 5b backs[name] || [
1450: 5d 2c 20 30 29 0a 0a 20 20 20 20 20 20 20 20 20 ], 0)..
1460: 20 66 6f 72 20 28 76 61 72 20 69 20 3d 20 30 2c for (var i = 0,
1470: 20 66 6e 3b 20 66 6e 20 3d 20 66 6e 73 5b 69 5d fn; fn = fns[i]
1480: 3b 20 2b 2b 69 29 20 7b 0a 20 20 20 20 20 20 20 ; ++i) {.
1490: 20 20 20 20 20 69 66 20 28 66 6e 2e 62 75 73 79 if (fn.busy
14a0: 29 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20 20 20 ) continue.
14b0: 20 20 20 20 20 20 20 66 6e 2e 62 75 73 79 20 3d fn.busy =
14c0: 20 31 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 1. f
14d0: 6e 2e 61 70 70 6c 79 28 65 6c 2c 20 66 6e 2e 74 n.apply(el, fn.t
14e0: 79 70 65 64 20 3f 20 5b 6e 61 6d 65 5d 2e 63 6f yped ? [name].co
14f0: 6e 63 61 74 28 61 72 67 73 29 20 3a 20 61 72 67 ncat(args) : arg
1500: 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 s). i
1510: 66 20 28 66 6e 73 5b 69 5d 20 21 3d 3d 20 66 6e f (fns[i] !== fn
1520: 29 20 7b 20 69 2d 2d 20 7d 0a 20 20 20 20 20 20 ) { i-- }.
1530: 20 20 20 20 20 20 66 6e 2e 62 75 73 79 20 3d 20 fn.busy =
1540: 30 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 0. }..
1550: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 61 6c if (cal
1560: 6c 62 61 63 6b 73 5b 27 2a 27 5d 20 26 26 20 6e lbacks['*'] && n
1570: 61 6d 65 20 21 3d 20 27 2a 27 29 0a 20 20 20 20 ame != '*').
1580: 20 20 20 20 20 20 20 20 65 6c 2e 74 72 69 67 67 el.trigg
1590: 65 72 2e 61 70 70 6c 79 28 65 6c 2c 20 5b 27 2a er.apply(el, ['*
15a0: 27 2c 20 6e 61 6d 65 5d 2e 63 6f 6e 63 61 74 28 ', name].concat(
15b0: 61 72 67 73 29 29 0a 0a 20 20 20 20 20 20 20 20 args))..
15c0: 7d 29 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 }).. retu
15d0: 72 6e 20 65 6c 0a 20 20 20 20 20 20 7d 2c 0a 20 rn el. },.
15e0: 20 20 20 20 20 65 6e 75 6d 65 72 61 62 6c 65 3a enumerable:
15f0: 20 66 61 6c 73 65 2c 0a 20 20 20 20 20 20 77 72 false,. wr
1600: 69 74 61 62 6c 65 3a 20 66 61 6c 73 65 2c 0a 20 itable: false,.
1610: 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 62 6c configurabl
1620: 65 3a 20 66 61 6c 73 65 0a 20 20 20 20 7d 0a 20 e: false. }.
1630: 20 7d 29 0a 0a 20 20 72 65 74 75 72 6e 20 65 6c }).. return el
1640: 0a 0a 7d 0a 2f 2a 20 69 73 74 61 6e 62 75 6c 20 ..}./* istanbul
1650: 69 67 6e 6f 72 65 20 6e 65 78 74 20 2a 2f 0a 3b ignore next */.;
1660: 28 66 75 6e 63 74 69 6f 6e 28 72 69 6f 74 29 20 (function(riot)
1670: 7b 0a 0a 2f 2a 2a 0a 20 2a 20 53 69 6d 70 6c 65 {../**. * Simple
1680: 20 63 6c 69 65 6e 74 2d 73 69 64 65 20 72 6f 75 client-side rou
1690: 74 65 72 0a 20 2a 20 40 6d 6f 64 75 6c 65 20 72 ter. * @module r
16a0: 69 6f 74 2d 72 6f 75 74 65 0a 20 2a 2f 0a 0a 0a iot-route. */...
16b0: 76 61 72 20 52 45 5f 4f 52 49 47 49 4e 20 3d 20 var RE_ORIGIN =
16c0: 2f 5e 2e 2b 3f 5c 2f 5c 2f 2b 5b 5e 5c 2f 5d 2b /^.+?\/\/+[^\/]+
16d0: 2f 2c 0a 20 20 45 56 45 4e 54 5f 4c 49 53 54 45 /,. EVENT_LISTE
16e0: 4e 45 52 20 3d 20 27 45 76 65 6e 74 4c 69 73 74 NER = 'EventList
16f0: 65 6e 65 72 27 2c 0a 20 20 52 45 4d 4f 56 45 5f ener',. REMOVE_
1700: 45 56 45 4e 54 5f 4c 49 53 54 45 4e 45 52 20 3d EVENT_LISTENER =
1710: 20 27 72 65 6d 6f 76 65 27 20 2b 20 45 56 45 4e 'remove' + EVEN
1720: 54 5f 4c 49 53 54 45 4e 45 52 2c 0a 20 20 41 44 T_LISTENER,. AD
1730: 44 5f 45 56 45 4e 54 5f 4c 49 53 54 45 4e 45 52 D_EVENT_LISTENER
1740: 20 3d 20 27 61 64 64 27 20 2b 20 45 56 45 4e 54 = 'add' + EVENT
1750: 5f 4c 49 53 54 45 4e 45 52 2c 0a 20 20 48 41 53 _LISTENER,. HAS
1760: 5f 41 54 54 52 49 42 55 54 45 20 3d 20 27 68 61 _ATTRIBUTE = 'ha
1770: 73 41 74 74 72 69 62 75 74 65 27 2c 0a 20 20 52 sAttribute',. R
1780: 45 50 4c 41 43 45 20 3d 20 27 72 65 70 6c 61 63 EPLACE = 'replac
1790: 65 27 2c 0a 20 20 50 4f 50 53 54 41 54 45 20 3d e',. POPSTATE =
17a0: 20 27 70 6f 70 73 74 61 74 65 27 2c 0a 20 20 48 'popstate',. H
17b0: 41 53 48 43 48 41 4e 47 45 20 3d 20 27 68 61 73 ASHCHANGE = 'has
17c0: 68 63 68 61 6e 67 65 27 2c 0a 20 20 54 52 49 47 hchange',. TRIG
17d0: 47 45 52 20 3d 20 27 74 72 69 67 67 65 72 27 2c GER = 'trigger',
17e0: 0a 20 20 4d 41 58 5f 45 4d 49 54 5f 53 54 41 43 . MAX_EMIT_STAC
17f0: 4b 5f 4c 45 56 45 4c 20 3d 20 33 2c 0a 20 20 77 K_LEVEL = 3,. w
1800: 69 6e 20 3d 20 74 79 70 65 6f 66 20 77 69 6e 64 in = typeof wind
1810: 6f 77 20 21 3d 20 27 75 6e 64 65 66 69 6e 65 64 ow != 'undefined
1820: 27 20 26 26 20 77 69 6e 64 6f 77 2c 0a 20 20 64 ' && window,. d
1830: 6f 63 20 3d 20 74 79 70 65 6f 66 20 64 6f 63 75 oc = typeof docu
1840: 6d 65 6e 74 20 21 3d 20 27 75 6e 64 65 66 69 6e ment != 'undefin
1850: 65 64 27 20 26 26 20 64 6f 63 75 6d 65 6e 74 2c ed' && document,
1860: 0a 20 20 68 69 73 74 20 3d 20 77 69 6e 20 26 26 . hist = win &&
1870: 20 68 69 73 74 6f 72 79 2c 0a 20 20 6c 6f 63 20 history,. loc
1880: 3d 20 77 69 6e 20 26 26 20 28 68 69 73 74 2e 6c = win && (hist.l
1890: 6f 63 61 74 69 6f 6e 20 7c 7c 20 77 69 6e 2e 6c ocation || win.l
18a0: 6f 63 61 74 69 6f 6e 29 2c 20 2f 2f 20 73 65 65 ocation), // see
18b0: 20 68 74 6d 6c 35 2d 68 69 73 74 6f 72 79 2d 61 html5-history-a
18c0: 70 69 0a 20 20 70 72 6f 74 20 3d 20 52 6f 75 74 pi. prot = Rout
18d0: 65 72 2e 70 72 6f 74 6f 74 79 70 65 2c 20 2f 2f er.prototype, //
18e0: 20 74 6f 20 6d 69 6e 69 66 79 20 6d 6f 72 65 0a to minify more.
18f0: 20 20 63 6c 69 63 6b 45 76 65 6e 74 20 3d 20 64 clickEvent = d
1900: 6f 63 20 26 26 20 64 6f 63 2e 6f 6e 74 6f 75 63 oc && doc.ontouc
1910: 68 73 74 61 72 74 20 3f 20 27 74 6f 75 63 68 73 hstart ? 'touchs
1920: 74 61 72 74 27 20 3a 20 27 63 6c 69 63 6b 27 2c tart' : 'click',
1930: 0a 20 20 73 74 61 72 74 65 64 20 3d 20 66 61 6c . started = fal
1940: 73 65 2c 0a 20 20 63 65 6e 74 72 61 6c 20 3d 20 se,. central =
1950: 72 69 6f 74 2e 6f 62 73 65 72 76 61 62 6c 65 28 riot.observable(
1960: 29 2c 0a 20 20 72 6f 75 74 65 46 6f 75 6e 64 20 ),. routeFound
1970: 3d 20 66 61 6c 73 65 2c 0a 20 20 64 65 62 6f 75 = false,. debou
1980: 6e 63 65 64 45 6d 69 74 2c 0a 20 20 62 61 73 65 ncedEmit,. base
1990: 2c 20 63 75 72 72 65 6e 74 2c 20 70 61 72 73 65 , current, parse
19a0: 72 2c 20 73 65 63 6f 6e 64 50 61 72 73 65 72 2c r, secondParser,
19b0: 20 65 6d 69 74 53 74 61 63 6b 20 3d 20 5b 5d 2c emitStack = [],
19c0: 20 65 6d 69 74 53 74 61 63 6b 4c 65 76 65 6c 20 emitStackLevel
19d0: 3d 20 30 0a 0a 2f 2a 2a 0a 20 2a 20 44 65 66 61 = 0../**. * Defa
19e0: 75 6c 74 20 70 61 72 73 65 72 2e 20 59 6f 75 20 ult parser. You
19f0: 63 61 6e 20 72 65 70 6c 61 63 65 20 69 74 20 76 can replace it v
1a00: 69 61 20 72 6f 75 74 65 72 2e 70 61 72 73 65 72 ia router.parser
1a10: 20 6d 65 74 68 6f 64 2e 0a 20 2a 20 40 70 61 72 method.. * @par
1a20: 61 6d 20 7b 73 74 72 69 6e 67 7d 20 70 61 74 68 am {string} path
1a30: 20 2d 20 63 75 72 72 65 6e 74 20 70 61 74 68 20 - current path
1a40: 28 6e 6f 72 6d 61 6c 69 7a 65 64 29 0a 20 2a 20 (normalized). *
1a50: 40 72 65 74 75 72 6e 73 20 7b 61 72 72 61 79 7d @returns {array}
1a60: 20 61 72 72 61 79 0a 20 2a 2f 0a 66 75 6e 63 74 array. */.funct
1a70: 69 6f 6e 20 44 45 46 41 55 4c 54 5f 50 41 52 53 ion DEFAULT_PARS
1a80: 45 52 28 70 61 74 68 29 20 7b 0a 20 20 72 65 74 ER(path) {. ret
1a90: 75 72 6e 20 70 61 74 68 2e 73 70 6c 69 74 28 2f urn path.split(/
1aa0: 5b 2f 3f 23 5d 2f 29 0a 7d 0a 0a 2f 2a 2a 0a 20 [/?#]/).}../**.
1ab0: 2a 20 44 65 66 61 75 6c 74 20 70 61 72 73 65 72 * Default parser
1ac0: 20 28 73 65 63 6f 6e 64 29 2e 20 59 6f 75 20 63 (second). You c
1ad0: 61 6e 20 72 65 70 6c 61 63 65 20 69 74 20 76 69 an replace it vi
1ae0: 61 20 72 6f 75 74 65 72 2e 70 61 72 73 65 72 20 a router.parser
1af0: 6d 65 74 68 6f 64 2e 0a 20 2a 20 40 70 61 72 61 method.. * @para
1b00: 6d 20 7b 73 74 72 69 6e 67 7d 20 70 61 74 68 20 m {string} path
1b10: 2d 20 63 75 72 72 65 6e 74 20 70 61 74 68 20 28 - current path (
1b20: 6e 6f 72 6d 61 6c 69 7a 65 64 29 0a 20 2a 20 40 normalized). * @
1b30: 70 61 72 61 6d 20 7b 73 74 72 69 6e 67 7d 20 66 param {string} f
1b40: 69 6c 74 65 72 20 2d 20 66 69 6c 74 65 72 20 73 ilter - filter s
1b50: 74 72 69 6e 67 20 28 6e 6f 72 6d 61 6c 69 7a 65 tring (normalize
1b60: 64 29 0a 20 2a 20 40 72 65 74 75 72 6e 73 20 7b d). * @returns {
1b70: 61 72 72 61 79 7d 20 61 72 72 61 79 0a 20 2a 2f array} array. */
1b80: 0a 66 75 6e 63 74 69 6f 6e 20 44 45 46 41 55 4c .function DEFAUL
1b90: 54 5f 53 45 43 4f 4e 44 5f 50 41 52 53 45 52 28 T_SECOND_PARSER(
1ba0: 70 61 74 68 2c 20 66 69 6c 74 65 72 29 20 7b 0a path, filter) {.
1bb0: 20 20 76 61 72 20 72 65 20 3d 20 6e 65 77 20 52 var re = new R
1bc0: 65 67 45 78 70 28 27 5e 27 20 2b 20 66 69 6c 74 egExp('^' + filt
1bd0: 65 72 5b 52 45 50 4c 41 43 45 5d 28 2f 5c 2a 2f er[REPLACE](/\*/
1be0: 67 2c 20 27 28 5b 5e 2f 3f 23 5d 2b 3f 29 27 29 g, '([^/?#]+?)')
1bf0: 5b 52 45 50 4c 41 43 45 5d 28 2f 5c 2e 5c 2e 2f [REPLACE](/\.\./
1c00: 2c 20 27 2e 2a 27 29 20 2b 20 27 24 27 29 2c 0a , '.*') + '$'),.
1c10: 20 20 20 20 61 72 67 73 20 3d 20 70 61 74 68 2e args = path.
1c20: 6d 61 74 63 68 28 72 65 29 0a 0a 20 20 69 66 20 match(re).. if
1c30: 28 61 72 67 73 29 20 72 65 74 75 72 6e 20 61 72 (args) return ar
1c40: 67 73 2e 73 6c 69 63 65 28 31 29 0a 7d 0a 0a 2f gs.slice(1).}../
1c50: 2a 2a 0a 20 2a 20 53 69 6d 70 6c 65 2f 63 68 65 **. * Simple/che
1c60: 61 70 20 64 65 62 6f 75 6e 63 65 20 69 6d 70 6c ap debounce impl
1c70: 65 6d 65 6e 74 61 74 69 6f 6e 0a 20 2a 20 40 70 ementation. * @p
1c80: 61 72 61 6d 20 20 20 7b 66 75 6e 63 74 69 6f 6e aram {function
1c90: 7d 20 66 6e 20 2d 20 63 61 6c 6c 62 61 63 6b 0a } fn - callback.
1ca0: 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 6e 75 6d * @param {num
1cb0: 62 65 72 7d 20 64 65 6c 61 79 20 2d 20 64 65 6c ber} delay - del
1cc0: 61 79 20 69 6e 20 73 65 63 6f 6e 64 73 0a 20 2a ay in seconds. *
1cd0: 20 40 72 65 74 75 72 6e 73 20 7b 66 75 6e 63 74 @returns {funct
1ce0: 69 6f 6e 7d 20 64 65 62 6f 75 6e 63 65 64 20 66 ion} debounced f
1cf0: 75 6e 63 74 69 6f 6e 0a 20 2a 2f 0a 66 75 6e 63 unction. */.func
1d00: 74 69 6f 6e 20 64 65 62 6f 75 6e 63 65 28 66 6e tion debounce(fn
1d10: 2c 20 64 65 6c 61 79 29 20 7b 0a 20 20 76 61 72 , delay) {. var
1d20: 20 74 0a 20 20 72 65 74 75 72 6e 20 66 75 6e 63 t. return func
1d30: 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 63 6c tion () {. cl
1d40: 65 61 72 54 69 6d 65 6f 75 74 28 74 29 0a 20 20 earTimeout(t).
1d50: 20 20 74 20 3d 20 73 65 74 54 69 6d 65 6f 75 74 t = setTimeout
1d60: 28 66 6e 2c 20 64 65 6c 61 79 29 0a 20 20 7d 0a (fn, delay). }.
1d70: 7d 0a 0a 2f 2a 2a 0a 20 2a 20 53 65 74 20 74 68 }../**. * Set th
1d80: 65 20 77 69 6e 64 6f 77 20 6c 69 73 74 65 6e 65 e window listene
1d90: 72 73 20 74 6f 20 74 72 69 67 67 65 72 20 74 68 rs to trigger th
1da0: 65 20 72 6f 75 74 65 73 0a 20 2a 20 40 70 61 72 e routes. * @par
1db0: 61 6d 20 7b 62 6f 6f 6c 65 61 6e 7d 20 61 75 74 am {boolean} aut
1dc0: 6f 45 78 65 63 20 2d 20 73 65 65 20 72 6f 75 74 oExec - see rout
1dd0: 65 2e 73 74 61 72 74 0a 20 2a 2f 0a 66 75 6e 63 e.start. */.func
1de0: 74 69 6f 6e 20 73 74 61 72 74 28 61 75 74 6f 45 tion start(autoE
1df0: 78 65 63 29 20 7b 0a 20 20 64 65 62 6f 75 6e 63 xec) {. debounc
1e00: 65 64 45 6d 69 74 20 3d 20 64 65 62 6f 75 6e 63 edEmit = debounc
1e10: 65 28 65 6d 69 74 2c 20 31 29 0a 20 20 77 69 6e e(emit, 1). win
1e20: 5b 41 44 44 5f 45 56 45 4e 54 5f 4c 49 53 54 45 [ADD_EVENT_LISTE
1e30: 4e 45 52 5d 28 50 4f 50 53 54 41 54 45 2c 20 64 NER](POPSTATE, d
1e40: 65 62 6f 75 6e 63 65 64 45 6d 69 74 29 0a 20 20 ebouncedEmit).
1e50: 77 69 6e 5b 41 44 44 5f 45 56 45 4e 54 5f 4c 49 win[ADD_EVENT_LI
1e60: 53 54 45 4e 45 52 5d 28 48 41 53 48 43 48 41 4e STENER](HASHCHAN
1e70: 47 45 2c 20 64 65 62 6f 75 6e 63 65 64 45 6d 69 GE, debouncedEmi
1e80: 74 29 0a 20 20 64 6f 63 5b 41 44 44 5f 45 56 45 t). doc[ADD_EVE
1e90: 4e 54 5f 4c 49 53 54 45 4e 45 52 5d 28 63 6c 69 NT_LISTENER](cli
1ea0: 63 6b 45 76 65 6e 74 2c 20 63 6c 69 63 6b 29 0a ckEvent, click).
1eb0: 20 20 69 66 20 28 61 75 74 6f 45 78 65 63 29 20 if (autoExec)
1ec0: 65 6d 69 74 28 74 72 75 65 29 0a 7d 0a 0a 2f 2a emit(true).}../*
1ed0: 2a 0a 20 2a 20 52 6f 75 74 65 72 20 63 6c 61 73 *. * Router clas
1ee0: 73 0a 20 2a 2f 0a 66 75 6e 63 74 69 6f 6e 20 52 s. */.function R
1ef0: 6f 75 74 65 72 28 29 20 7b 0a 20 20 74 68 69 73 outer() {. this
1f00: 2e 24 20 3d 20 5b 5d 0a 20 20 72 69 6f 74 2e 6f .$ = []. riot.o
1f10: 62 73 65 72 76 61 62 6c 65 28 74 68 69 73 29 20 bservable(this)
1f20: 2f 2f 20 6d 61 6b 65 20 69 74 20 6f 62 73 65 72 // make it obser
1f30: 76 61 62 6c 65 0a 20 20 63 65 6e 74 72 61 6c 2e vable. central.
1f40: 6f 6e 28 27 73 74 6f 70 27 2c 20 74 68 69 73 2e on('stop', this.
1f50: 73 2e 62 69 6e 64 28 74 68 69 73 29 29 0a 20 20 s.bind(this)).
1f60: 63 65 6e 74 72 61 6c 2e 6f 6e 28 27 65 6d 69 74 central.on('emit
1f70: 27 2c 20 74 68 69 73 2e 65 2e 62 69 6e 64 28 74 ', this.e.bind(t
1f80: 68 69 73 29 29 0a 7d 0a 0a 66 75 6e 63 74 69 6f his)).}..functio
1f90: 6e 20 6e 6f 72 6d 61 6c 69 7a 65 28 70 61 74 68 n normalize(path
1fa0: 29 20 7b 0a 20 20 72 65 74 75 72 6e 20 70 61 74 ) {. return pat
1fb0: 68 5b 52 45 50 4c 41 43 45 5d 28 2f 5e 5c 2f 7c h[REPLACE](/^\/|
1fc0: 5c 2f 24 2f 2c 20 27 27 29 0a 7d 0a 0a 66 75 6e \/$/, '').}..fun
1fd0: 63 74 69 6f 6e 20 69 73 53 74 72 69 6e 67 28 73 ction isString(s
1fe0: 74 72 29 20 7b 0a 20 20 72 65 74 75 72 6e 20 74 tr) {. return t
1ff0: 79 70 65 6f 66 20 73 74 72 20 3d 3d 20 27 73 74 ypeof str == 'st
2000: 72 69 6e 67 27 0a 7d 0a 0a 2f 2a 2a 0a 20 2a 20 ring'.}../**. *
2010: 47 65 74 20 74 68 65 20 70 61 72 74 20 61 66 74 Get the part aft
2020: 65 72 20 64 6f 6d 61 69 6e 20 6e 61 6d 65 0a 20 er domain name.
2030: 2a 20 40 70 61 72 61 6d 20 7b 73 74 72 69 6e 67 * @param {string
2040: 7d 20 68 72 65 66 20 2d 20 66 75 6c 6c 70 61 74 } href - fullpat
2050: 68 0a 20 2a 20 40 72 65 74 75 72 6e 73 20 7b 73 h. * @returns {s
2060: 74 72 69 6e 67 7d 20 70 61 74 68 20 66 72 6f 6d tring} path from
2070: 20 72 6f 6f 74 0a 20 2a 2f 0a 66 75 6e 63 74 69 root. */.functi
2080: 6f 6e 20 67 65 74 50 61 74 68 46 72 6f 6d 52 6f on getPathFromRo
2090: 6f 74 28 68 72 65 66 29 20 7b 0a 20 20 72 65 74 ot(href) {. ret
20a0: 75 72 6e 20 28 68 72 65 66 20 7c 7c 20 6c 6f 63 urn (href || loc
20b0: 2e 68 72 65 66 29 5b 52 45 50 4c 41 43 45 5d 28 .href)[REPLACE](
20c0: 52 45 5f 4f 52 49 47 49 4e 2c 20 27 27 29 0a 7d RE_ORIGIN, '').}
20d0: 0a 0a 2f 2a 2a 0a 20 2a 20 47 65 74 20 74 68 65 ../**. * Get the
20e0: 20 70 61 72 74 20 61 66 74 65 72 20 62 61 73 65 part after base
20f0: 0a 20 2a 20 40 70 61 72 61 6d 20 7b 73 74 72 69 . * @param {stri
2100: 6e 67 7d 20 68 72 65 66 20 2d 20 66 75 6c 6c 70 ng} href - fullp
2110: 61 74 68 0a 20 2a 20 40 72 65 74 75 72 6e 73 20 ath. * @returns
2120: 7b 73 74 72 69 6e 67 7d 20 70 61 74 68 20 66 72 {string} path fr
2130: 6f 6d 20 62 61 73 65 0a 20 2a 2f 0a 66 75 6e 63 om base. */.func
2140: 74 69 6f 6e 20 67 65 74 50 61 74 68 46 72 6f 6d tion getPathFrom
2150: 42 61 73 65 28 68 72 65 66 29 20 7b 0a 20 20 72 Base(href) {. r
2160: 65 74 75 72 6e 20 62 61 73 65 5b 30 5d 20 3d 3d eturn base[0] ==
2170: 20 27 23 27 0a 20 20 20 20 3f 20 28 68 72 65 66 '#'. ? (href
2180: 20 7c 7c 20 6c 6f 63 2e 68 72 65 66 20 7c 7c 20 || loc.href ||
2190: 27 27 29 2e 73 70 6c 69 74 28 62 61 73 65 29 5b '').split(base)[
21a0: 31 5d 20 7c 7c 20 27 27 0a 20 20 20 20 3a 20 28 1] || ''. : (
21b0: 6c 6f 63 20 3f 20 67 65 74 50 61 74 68 46 72 6f loc ? getPathFro
21c0: 6d 52 6f 6f 74 28 68 72 65 66 29 20 3a 20 68 72 mRoot(href) : hr
21d0: 65 66 20 7c 7c 20 27 27 29 5b 52 45 50 4c 41 43 ef || '')[REPLAC
21e0: 45 5d 28 62 61 73 65 2c 20 27 27 29 0a 7d 0a 0a E](base, '').}..
21f0: 66 75 6e 63 74 69 6f 6e 20 65 6d 69 74 28 66 6f function emit(fo
2200: 72 63 65 29 20 7b 0a 20 20 2f 2f 20 74 68 65 20 rce) {. // the
2210: 73 74 61 63 6b 20 69 73 20 6e 65 65 64 65 64 20 stack is needed
2220: 66 6f 72 20 72 65 64 69 72 65 63 74 69 6f 6e 73 for redirections
2230: 0a 20 20 76 61 72 20 69 73 52 6f 6f 74 20 3d 20 . var isRoot =
2240: 65 6d 69 74 53 74 61 63 6b 4c 65 76 65 6c 20 3d emitStackLevel =
2250: 3d 20 30 2c 20 66 69 72 73 74 0a 20 20 69 66 20 = 0, first. if
2260: 28 4d 41 58 5f 45 4d 49 54 5f 53 54 41 43 4b 5f (MAX_EMIT_STACK_
2270: 4c 45 56 45 4c 20 3c 3d 20 65 6d 69 74 53 74 61 LEVEL <= emitSta
2280: 63 6b 4c 65 76 65 6c 29 20 72 65 74 75 72 6e 0a ckLevel) return.
2290: 0a 20 20 65 6d 69 74 53 74 61 63 6b 4c 65 76 65 . emitStackLeve
22a0: 6c 2b 2b 0a 20 20 65 6d 69 74 53 74 61 63 6b 2e l++. emitStack.
22b0: 70 75 73 68 28 66 75 6e 63 74 69 6f 6e 28 29 20 push(function()
22c0: 7b 0a 20 20 20 20 76 61 72 20 70 61 74 68 20 3d {. var path =
22d0: 20 67 65 74 50 61 74 68 46 72 6f 6d 42 61 73 65 getPathFromBase
22e0: 28 29 0a 20 20 20 20 69 66 20 28 66 6f 72 63 65 (). if (force
22f0: 20 7c 7c 20 70 61 74 68 20 21 3d 20 63 75 72 72 || path != curr
2300: 65 6e 74 29 20 7b 0a 20 20 20 20 20 20 63 65 6e ent) {. cen
2310: 74 72 61 6c 5b 54 52 49 47 47 45 52 5d 28 27 65 tral[TRIGGER]('e
2320: 6d 69 74 27 2c 20 70 61 74 68 29 0a 20 20 20 20 mit', path).
2330: 20 20 63 75 72 72 65 6e 74 20 3d 20 70 61 74 68 current = path
2340: 0a 20 20 20 20 7d 0a 20 20 7d 29 0a 20 20 69 66 . }. }). if
2350: 20 28 69 73 52 6f 6f 74 29 20 7b 0a 20 20 20 20 (isRoot) {.
2360: 77 68 69 6c 65 20 28 66 69 72 73 74 20 3d 20 65 while (first = e
2370: 6d 69 74 53 74 61 63 6b 2e 73 68 69 66 74 28 29 mitStack.shift()
2380: 29 20 66 69 72 73 74 28 29 20 2f 2f 20 73 74 61 ) first() // sta
2390: 63 6b 20 69 6e 63 72 65 73 65 73 20 77 69 74 68 ck increses with
23a0: 69 6e 20 74 68 69 73 20 63 61 6c 6c 0a 20 20 20 in this call.
23b0: 20 65 6d 69 74 53 74 61 63 6b 4c 65 76 65 6c 20 emitStackLevel
23c0: 3d 20 30 0a 20 20 7d 0a 7d 0a 0a 66 75 6e 63 74 = 0. }.}..funct
23d0: 69 6f 6e 20 63 6c 69 63 6b 28 65 29 20 7b 0a 20 ion click(e) {.
23e0: 20 69 66 20 28 0a 20 20 20 20 65 2e 77 68 69 63 if (. e.whic
23f0: 68 20 21 3d 20 31 20 2f 2f 20 6e 6f 74 20 6c 65 h != 1 // not le
2400: 66 74 20 63 6c 69 63 6b 0a 20 20 20 20 7c 7c 20 ft click. ||
2410: 65 2e 6d 65 74 61 4b 65 79 20 7c 7c 20 65 2e 63 e.metaKey || e.c
2420: 74 72 6c 4b 65 79 20 7c 7c 20 65 2e 73 68 69 66 trlKey || e.shif
2430: 74 4b 65 79 20 2f 2f 20 6f 72 20 6d 65 74 61 20 tKey // or meta
2440: 6b 65 79 73 0a 20 20 20 20 7c 7c 20 65 2e 64 65 keys. || e.de
2450: 66 61 75 6c 74 50 72 65 76 65 6e 74 65 64 20 2f faultPrevented /
2460: 2f 20 6f 72 20 64 65 66 61 75 6c 74 20 70 72 65 / or default pre
2470: 76 65 6e 74 65 64 0a 20 20 29 20 72 65 74 75 72 vented. ) retur
2480: 6e 0a 0a 20 20 76 61 72 20 65 6c 20 3d 20 65 2e n.. var el = e.
2490: 74 61 72 67 65 74 0a 20 20 77 68 69 6c 65 20 28 target. while (
24a0: 65 6c 20 26 26 20 65 6c 2e 6e 6f 64 65 4e 61 6d el && el.nodeNam
24b0: 65 20 21 3d 20 27 41 27 29 20 65 6c 20 3d 20 65 e != 'A') el = e
24c0: 6c 2e 70 61 72 65 6e 74 4e 6f 64 65 0a 0a 20 20 l.parentNode..
24d0: 69 66 20 28 0a 20 20 20 20 21 65 6c 20 7c 7c 20 if (. !el ||
24e0: 65 6c 2e 6e 6f 64 65 4e 61 6d 65 20 21 3d 20 27 el.nodeName != '
24f0: 41 27 20 2f 2f 20 6e 6f 74 20 41 20 74 61 67 0a A' // not A tag.
2500: 20 20 20 20 7c 7c 20 65 6c 5b 48 41 53 5f 41 54 || el[HAS_AT
2510: 54 52 49 42 55 54 45 5d 28 27 64 6f 77 6e 6c 6f TRIBUTE]('downlo
2520: 61 64 27 29 20 2f 2f 20 68 61 73 20 64 6f 77 6e ad') // has down
2530: 6c 6f 61 64 20 61 74 74 72 0a 20 20 20 20 7c 7c load attr. ||
2540: 20 21 65 6c 5b 48 41 53 5f 41 54 54 52 49 42 55 !el[HAS_ATTRIBU
2550: 54 45 5d 28 27 68 72 65 66 27 29 20 2f 2f 20 68 TE]('href') // h
2560: 61 73 20 6e 6f 20 68 72 65 66 20 61 74 74 72 0a as no href attr.
2570: 20 20 20 20 7c 7c 20 65 6c 2e 74 61 72 67 65 74 || el.target
2580: 20 26 26 20 65 6c 2e 74 61 72 67 65 74 20 21 3d && el.target !=
2590: 20 27 5f 73 65 6c 66 27 20 2f 2f 20 61 6e 6f 74 '_self' // anot
25a0: 68 65 72 20 77 69 6e 64 6f 77 20 6f 72 20 66 72 her window or fr
25b0: 61 6d 65 0a 20 20 20 20 7c 7c 20 65 6c 2e 68 72 ame. || el.hr
25c0: 65 66 2e 69 6e 64 65 78 4f 66 28 6c 6f 63 2e 68 ef.indexOf(loc.h
25d0: 72 65 66 2e 6d 61 74 63 68 28 52 45 5f 4f 52 49 ref.match(RE_ORI
25e0: 47 49 4e 29 5b 30 5d 29 20 3d 3d 20 2d 31 20 2f GIN)[0]) == -1 /
25f0: 2f 20 63 72 6f 73 73 20 6f 72 69 67 69 6e 0a 20 / cross origin.
2600: 20 29 20 72 65 74 75 72 6e 0a 0a 20 20 69 66 20 ) return.. if
2610: 28 65 6c 2e 68 72 65 66 20 21 3d 20 6c 6f 63 2e (el.href != loc.
2620: 68 72 65 66 0a 20 20 20 20 26 26 20 28 0a 20 20 href. && (.
2630: 20 20 20 20 65 6c 2e 68 72 65 66 2e 73 70 6c 69 el.href.spli
2640: 74 28 27 23 27 29 5b 30 5d 20 3d 3d 20 6c 6f 63 t('#')[0] == loc
2650: 2e 68 72 65 66 2e 73 70 6c 69 74 28 27 23 27 29 .href.split('#')
2660: 5b 30 5d 20 2f 2f 20 69 6e 74 65 72 6e 61 6c 20 [0] // internal
2670: 6a 75 6d 70 0a 20 20 20 20 20 20 7c 7c 20 62 61 jump. || ba
2680: 73 65 5b 30 5d 20 21 3d 20 27 23 27 20 26 26 20 se[0] != '#' &&
2690: 67 65 74 50 61 74 68 46 72 6f 6d 52 6f 6f 74 28 getPathFromRoot(
26a0: 65 6c 2e 68 72 65 66 29 2e 69 6e 64 65 78 4f 66 el.href).indexOf
26b0: 28 62 61 73 65 29 20 21 3d 3d 20 30 20 2f 2f 20 (base) !== 0 //
26c0: 6f 75 74 73 69 64 65 20 6f 66 20 62 61 73 65 0a outside of base.
26d0: 20 20 20 20 20 20 7c 7c 20 62 61 73 65 5b 30 5d || base[0]
26e0: 20 3d 3d 20 27 23 27 20 26 26 20 65 6c 2e 68 72 == '#' && el.hr
26f0: 65 66 2e 73 70 6c 69 74 28 62 61 73 65 29 5b 30 ef.split(base)[0
2700: 5d 20 21 3d 20 6c 6f 63 2e 68 72 65 66 2e 73 70 ] != loc.href.sp
2710: 6c 69 74 28 62 61 73 65 29 5b 30 5d 20 2f 2f 20 lit(base)[0] //
2720: 6f 75 74 73 69 64 65 20 6f 66 20 23 62 61 73 65 outside of #base
2730: 0a 20 20 20 20 20 20 7c 7c 20 21 67 6f 28 67 65 . || !go(ge
2740: 74 50 61 74 68 46 72 6f 6d 42 61 73 65 28 65 6c tPathFromBase(el
2750: 2e 68 72 65 66 29 2c 20 65 6c 2e 74 69 74 6c 65 .href), el.title
2760: 20 7c 7c 20 64 6f 63 2e 74 69 74 6c 65 29 20 2f || doc.title) /
2770: 2f 20 72 6f 75 74 65 20 6e 6f 74 20 66 6f 75 6e / route not foun
2780: 64 0a 20 20 20 20 29 29 20 72 65 74 75 72 6e 0a d. )) return.
2790: 0a 20 20 65 2e 70 72 65 76 65 6e 74 44 65 66 61 . e.preventDefa
27a0: 75 6c 74 28 29 0a 7d 0a 0a 2f 2a 2a 0a 20 2a 20 ult().}../**. *
27b0: 47 6f 20 74 6f 20 74 68 65 20 70 61 74 68 0a 20 Go to the path.
27c0: 2a 20 40 70 61 72 61 6d 20 7b 73 74 72 69 6e 67 * @param {string
27d0: 7d 20 70 61 74 68 20 2d 20 64 65 73 74 69 6e 61 } path - destina
27e0: 74 69 6f 6e 20 70 61 74 68 0a 20 2a 20 40 70 61 tion path. * @pa
27f0: 72 61 6d 20 7b 73 74 72 69 6e 67 7d 20 74 69 74 ram {string} tit
2800: 6c 65 20 2d 20 70 61 67 65 20 74 69 74 6c 65 0a le - page title.
2810: 20 2a 20 40 70 61 72 61 6d 20 7b 62 6f 6f 6c 65 * @param {boole
2820: 61 6e 7d 20 73 68 6f 75 6c 64 52 65 70 6c 61 63 an} shouldReplac
2830: 65 20 2d 20 75 73 65 20 72 65 70 6c 61 63 65 53 e - use replaceS
2840: 74 61 74 65 20 6f 72 20 70 75 73 68 53 74 61 74 tate or pushStat
2850: 65 0a 20 2a 20 40 72 65 74 75 72 6e 73 20 7b 62 e. * @returns {b
2860: 6f 6f 6c 65 61 6e 7d 20 2d 20 72 6f 75 74 65 20 oolean} - route
2870: 6e 6f 74 20 66 6f 75 6e 64 20 66 6c 61 67 0a 20 not found flag.
2880: 2a 2f 0a 66 75 6e 63 74 69 6f 6e 20 67 6f 28 70 */.function go(p
2890: 61 74 68 2c 20 74 69 74 6c 65 2c 20 73 68 6f 75 ath, title, shou
28a0: 6c 64 52 65 70 6c 61 63 65 29 20 7b 0a 20 20 2f ldReplace) {. /
28b0: 2f 20 53 65 72 76 65 72 2d 73 69 64 65 20 75 73 / Server-side us
28c0: 61 67 65 3a 20 64 69 72 65 63 74 6c 79 20 65 78 age: directly ex
28d0: 65 63 75 74 65 20 68 61 6e 64 6c 65 72 73 20 66 ecute handlers f
28e0: 6f 72 20 74 68 65 20 70 61 74 68 0a 20 20 69 66 or the path. if
28f0: 20 28 21 68 69 73 74 29 20 72 65 74 75 72 6e 20 (!hist) return
2900: 63 65 6e 74 72 61 6c 5b 54 52 49 47 47 45 52 5d central[TRIGGER]
2910: 28 27 65 6d 69 74 27 2c 20 67 65 74 50 61 74 68 ('emit', getPath
2920: 46 72 6f 6d 42 61 73 65 28 70 61 74 68 29 29 0a FromBase(path)).
2930: 0a 20 20 70 61 74 68 20 3d 20 62 61 73 65 20 2b . path = base +
2940: 20 6e 6f 72 6d 61 6c 69 7a 65 28 70 61 74 68 29 normalize(path)
2950: 0a 20 20 74 69 74 6c 65 20 3d 20 74 69 74 6c 65 . title = title
2960: 20 7c 7c 20 64 6f 63 2e 74 69 74 6c 65 0a 20 20 || doc.title.
2970: 2f 2f 20 62 72 6f 77 73 65 72 73 20 69 67 6e 6f // browsers igno
2980: 72 65 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 res the second p
2990: 61 72 61 6d 65 74 65 72 20 60 74 69 74 6c 65 60 arameter `title`
29a0: 0a 20 20 73 68 6f 75 6c 64 52 65 70 6c 61 63 65 . shouldReplace
29b0: 0a 20 20 20 20 3f 20 68 69 73 74 2e 72 65 70 6c . ? hist.repl
29c0: 61 63 65 53 74 61 74 65 28 6e 75 6c 6c 2c 20 74 aceState(null, t
29d0: 69 74 6c 65 2c 20 70 61 74 68 29 0a 20 20 20 20 itle, path).
29e0: 3a 20 68 69 73 74 2e 70 75 73 68 53 74 61 74 65 : hist.pushState
29f0: 28 6e 75 6c 6c 2c 20 74 69 74 6c 65 2c 20 70 61 (null, title, pa
2a00: 74 68 29 0a 20 20 2f 2f 20 73 6f 20 77 65 20 6e th). // so we n
2a10: 65 65 64 20 74 6f 20 73 65 74 20 69 74 20 6d 61 eed to set it ma
2a20: 6e 75 61 6c 6c 79 0a 20 20 64 6f 63 2e 74 69 74 nually. doc.tit
2a30: 6c 65 20 3d 20 74 69 74 6c 65 0a 20 20 72 6f 75 le = title. rou
2a40: 74 65 46 6f 75 6e 64 20 3d 20 66 61 6c 73 65 0a teFound = false.
2a50: 20 20 65 6d 69 74 28 29 0a 20 20 72 65 74 75 72 emit(). retur
2a60: 6e 20 72 6f 75 74 65 46 6f 75 6e 64 0a 7d 0a 0a n routeFound.}..
2a70: 2f 2a 2a 0a 20 2a 20 47 6f 20 74 6f 20 70 61 74 /**. * Go to pat
2a80: 68 20 6f 72 20 73 65 74 20 61 63 74 69 6f 6e 0a h or set action.
2a90: 20 2a 20 61 20 73 69 6e 67 6c 65 20 73 74 72 69 * a single stri
2aa0: 6e 67 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 ng:
2ab0: 20 20 20 67 6f 20 74 68 65 72 65 0a 20 2a 20 74 go there. * t
2ac0: 77 6f 20 73 74 72 69 6e 67 73 3a 20 20 20 20 20 wo strings:
2ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 g
2ae0: 6f 20 74 68 65 72 65 20 77 69 74 68 20 73 65 74 o there with set
2af0: 74 69 6e 67 20 61 20 74 69 74 6c 65 0a 20 2a 20 ting a title. *
2b00: 74 77 6f 20 73 74 72 69 6e 67 73 20 61 6e 64 20 two strings and
2b10: 62 6f 6f 6c 65 61 6e 3a 20 20 20 20 20 20 20 20 boolean:
2b20: 72 65 70 6c 61 63 65 20 68 69 73 74 6f 72 79 20 replace history
2b30: 77 69 74 68 20 73 65 74 74 69 6e 67 20 61 20 74 with setting a t
2b40: 69 74 6c 65 0a 20 2a 20 61 20 73 69 6e 67 6c 65 itle. * a single
2b50: 20 66 75 6e 63 74 69 6f 6e 3a 20 20 20 20 20 20 function:
2b60: 20 20 20 20 20 20 20 20 73 65 74 20 61 6e 20 61 set an a
2b70: 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64 65 66 ction on the def
2b80: 61 75 6c 74 20 72 6f 75 74 65 0a 20 2a 20 61 20 ault route. * a
2b90: 73 74 72 69 6e 67 2f 52 65 67 45 78 70 20 61 6e string/RegExp an
2ba0: 64 20 61 20 66 75 6e 63 74 69 6f 6e 3a 20 73 65 d a function: se
2bb0: 74 20 61 6e 20 61 63 74 69 6f 6e 20 6f 6e 20 74 t an action on t
2bc0: 68 65 20 72 6f 75 74 65 0a 20 2a 20 40 70 61 72 he route. * @par
2bd0: 61 6d 20 7b 28 73 74 72 69 6e 67 7c 66 75 6e 63 am {(string|func
2be0: 74 69 6f 6e 29 7d 20 66 69 72 73 74 20 2d 20 70 tion)} first - p
2bf0: 61 74 68 20 2f 20 61 63 74 69 6f 6e 20 2f 20 66 ath / action / f
2c00: 69 6c 74 65 72 0a 20 2a 20 40 70 61 72 61 6d 20 ilter. * @param
2c10: 7b 28 73 74 72 69 6e 67 7c 52 65 67 45 78 70 7c {(string|RegExp|
2c20: 66 75 6e 63 74 69 6f 6e 29 7d 20 73 65 63 6f 6e function)} secon
2c30: 64 20 2d 20 74 69 74 6c 65 20 2f 20 61 63 74 69 d - title / acti
2c40: 6f 6e 0a 20 2a 20 40 70 61 72 61 6d 20 7b 62 6f on. * @param {bo
2c50: 6f 6c 65 61 6e 7d 20 74 68 69 72 64 20 2d 20 72 olean} third - r
2c60: 65 70 6c 61 63 65 20 66 6c 61 67 0a 20 2a 2f 0a eplace flag. */.
2c70: 70 72 6f 74 2e 6d 20 3d 20 66 75 6e 63 74 69 6f prot.m = functio
2c80: 6e 28 66 69 72 73 74 2c 20 73 65 63 6f 6e 64 2c n(first, second,
2c90: 20 74 68 69 72 64 29 20 7b 0a 20 20 69 66 20 28 third) {. if (
2ca0: 69 73 53 74 72 69 6e 67 28 66 69 72 73 74 29 20 isString(first)
2cb0: 26 26 20 28 21 73 65 63 6f 6e 64 20 7c 7c 20 69 && (!second || i
2cc0: 73 53 74 72 69 6e 67 28 73 65 63 6f 6e 64 29 29 sString(second))
2cd0: 29 20 67 6f 28 66 69 72 73 74 2c 20 73 65 63 6f ) go(first, seco
2ce0: 6e 64 2c 20 74 68 69 72 64 20 7c 7c 20 66 61 6c nd, third || fal
2cf0: 73 65 29 0a 20 20 65 6c 73 65 20 69 66 20 28 73 se). else if (s
2d00: 65 63 6f 6e 64 29 20 74 68 69 73 2e 72 28 66 69 econd) this.r(fi
2d10: 72 73 74 2c 20 73 65 63 6f 6e 64 29 0a 20 20 65 rst, second). e
2d20: 6c 73 65 20 74 68 69 73 2e 72 28 27 40 27 2c 20 lse this.r('@',
2d30: 66 69 72 73 74 29 0a 7d 0a 0a 2f 2a 2a 0a 20 2a first).}../**. *
2d40: 20 53 74 6f 70 20 72 6f 75 74 69 6e 67 0a 20 2a Stop routing. *
2d50: 2f 0a 70 72 6f 74 2e 73 20 3d 20 66 75 6e 63 74 /.prot.s = funct
2d60: 69 6f 6e 28 29 20 7b 0a 20 20 74 68 69 73 2e 6f ion() {. this.o
2d70: 66 66 28 27 2a 27 29 0a 20 20 74 68 69 73 2e 24 ff('*'). this.$
2d80: 20 3d 20 5b 5d 0a 7d 0a 0a 2f 2a 2a 0a 20 2a 20 = [].}../**. *
2d90: 45 6d 69 74 0a 20 2a 20 40 70 61 72 61 6d 20 7b Emit. * @param {
2da0: 73 74 72 69 6e 67 7d 20 70 61 74 68 20 2d 20 70 string} path - p
2db0: 61 74 68 0a 20 2a 2f 0a 70 72 6f 74 2e 65 20 3d ath. */.prot.e =
2dc0: 20 66 75 6e 63 74 69 6f 6e 28 70 61 74 68 29 20 function(path)
2dd0: 7b 0a 20 20 74 68 69 73 2e 24 2e 63 6f 6e 63 61 {. this.$.conca
2de0: 74 28 27 40 27 29 2e 73 6f 6d 65 28 66 75 6e 63 t('@').some(func
2df0: 74 69 6f 6e 28 66 69 6c 74 65 72 29 20 7b 0a 20 tion(filter) {.
2e00: 20 20 20 76 61 72 20 61 72 67 73 20 3d 20 28 66 var args = (f
2e10: 69 6c 74 65 72 20 3d 3d 20 27 40 27 20 3f 20 70 ilter == '@' ? p
2e20: 61 72 73 65 72 20 3a 20 73 65 63 6f 6e 64 50 61 arser : secondPa
2e30: 72 73 65 72 29 28 6e 6f 72 6d 61 6c 69 7a 65 28 rser)(normalize(
2e40: 70 61 74 68 29 2c 20 6e 6f 72 6d 61 6c 69 7a 65 path), normalize
2e50: 28 66 69 6c 74 65 72 29 29 0a 20 20 20 20 69 66 (filter)). if
2e60: 20 28 74 79 70 65 6f 66 20 61 72 67 73 20 21 3d (typeof args !=
2e70: 20 27 75 6e 64 65 66 69 6e 65 64 27 29 20 7b 0a 'undefined') {.
2e80: 20 20 20 20 20 20 74 68 69 73 5b 54 52 49 47 47 this[TRIGG
2e90: 45 52 5d 2e 61 70 70 6c 79 28 6e 75 6c 6c 2c 20 ER].apply(null,
2ea0: 5b 66 69 6c 74 65 72 5d 2e 63 6f 6e 63 61 74 28 [filter].concat(
2eb0: 61 72 67 73 29 29 0a 20 20 20 20 20 20 72 65 74 args)). ret
2ec0: 75 72 6e 20 72 6f 75 74 65 46 6f 75 6e 64 20 3d urn routeFound =
2ed0: 20 74 72 75 65 20 2f 2f 20 65 78 69 74 20 66 72 true // exit fr
2ee0: 6f 6d 20 6c 6f 6f 70 0a 20 20 20 20 7d 0a 20 20 om loop. }.
2ef0: 7d 2c 20 74 68 69 73 29 0a 7d 0a 0a 2f 2a 2a 0a }, this).}../**.
2f00: 20 2a 20 52 65 67 69 73 74 65 72 20 72 6f 75 74 * Register rout
2f10: 65 0a 20 2a 20 40 70 61 72 61 6d 20 7b 73 74 72 e. * @param {str
2f20: 69 6e 67 7d 20 66 69 6c 74 65 72 20 2d 20 66 69 ing} filter - fi
2f30: 6c 74 65 72 20 66 6f 72 20 6d 61 74 63 68 69 6e lter for matchin
2f40: 67 20 74 6f 20 75 72 6c 0a 20 2a 20 40 70 61 72 g to url. * @par
2f50: 61 6d 20 7b 66 75 6e 63 74 69 6f 6e 7d 20 61 63 am {function} ac
2f60: 74 69 6f 6e 20 2d 20 61 63 74 69 6f 6e 20 74 6f tion - action to
2f70: 20 72 65 67 69 73 74 65 72 0a 20 2a 2f 0a 70 72 register. */.pr
2f80: 6f 74 2e 72 20 3d 20 66 75 6e 63 74 69 6f 6e 28 ot.r = function(
2f90: 66 69 6c 74 65 72 2c 20 61 63 74 69 6f 6e 29 20 filter, action)
2fa0: 7b 0a 20 20 69 66 20 28 66 69 6c 74 65 72 20 21 {. if (filter !
2fb0: 3d 20 27 40 27 29 20 7b 0a 20 20 20 20 66 69 6c = '@') {. fil
2fc0: 74 65 72 20 3d 20 27 2f 27 20 2b 20 6e 6f 72 6d ter = '/' + norm
2fd0: 61 6c 69 7a 65 28 66 69 6c 74 65 72 29 0a 20 20 alize(filter).
2fe0: 20 20 74 68 69 73 2e 24 2e 70 75 73 68 28 66 69 this.$.push(fi
2ff0: 6c 74 65 72 29 0a 20 20 7d 0a 20 20 74 68 69 73 lter). }. this
3000: 2e 6f 6e 28 66 69 6c 74 65 72 2c 20 61 63 74 69 .on(filter, acti
3010: 6f 6e 29 0a 7d 0a 0a 76 61 72 20 6d 61 69 6e 52 on).}..var mainR
3020: 6f 75 74 65 72 20 3d 20 6e 65 77 20 52 6f 75 74 outer = new Rout
3030: 65 72 28 29 0a 76 61 72 20 72 6f 75 74 65 20 3d er().var route =
3040: 20 6d 61 69 6e 52 6f 75 74 65 72 2e 6d 2e 62 69 mainRouter.m.bi
3050: 6e 64 28 6d 61 69 6e 52 6f 75 74 65 72 29 0a 0a nd(mainRouter)..
3060: 2f 2a 2a 0a 20 2a 20 43 72 65 61 74 65 20 61 20 /**. * Create a
3070: 73 75 62 20 72 6f 75 74 65 72 0a 20 2a 20 40 72 sub router. * @r
3080: 65 74 75 72 6e 73 20 7b 66 75 6e 63 74 69 6f 6e eturns {function
3090: 7d 20 74 68 65 20 6d 65 74 68 6f 64 20 6f 66 20 } the method of
30a0: 61 20 6e 65 77 20 52 6f 75 74 65 72 20 6f 62 6a a new Router obj
30b0: 65 63 74 0a 20 2a 2f 0a 72 6f 75 74 65 2e 63 72 ect. */.route.cr
30c0: 65 61 74 65 20 3d 20 66 75 6e 63 74 69 6f 6e 28 eate = function(
30d0: 29 20 7b 0a 20 20 76 61 72 20 6e 65 77 53 75 62 ) {. var newSub
30e0: 52 6f 75 74 65 72 20 3d 20 6e 65 77 20 52 6f 75 Router = new Rou
30f0: 74 65 72 28 29 0a 20 20 2f 2f 20 61 73 73 69 67 ter(). // assig
3100: 6e 20 73 75 62 2d 72 6f 75 74 65 72 27 73 20 6d n sub-router's m
3110: 61 69 6e 20 6d 65 74 68 6f 64 0a 20 20 76 61 72 ain method. var
3120: 20 72 6f 75 74 65 72 20 3d 20 6e 65 77 53 75 62 router = newSub
3130: 52 6f 75 74 65 72 2e 6d 2e 62 69 6e 64 28 6e 65 Router.m.bind(ne
3140: 77 53 75 62 52 6f 75 74 65 72 29 0a 20 20 2f 2f wSubRouter). //
3150: 20 73 74 6f 70 20 6f 6e 6c 79 20 74 68 69 73 20 stop only this
3160: 73 75 62 2d 72 6f 75 74 65 72 0a 20 20 72 6f 75 sub-router. rou
3170: 74 65 72 2e 73 74 6f 70 20 3d 20 6e 65 77 53 75 ter.stop = newSu
3180: 62 52 6f 75 74 65 72 2e 73 2e 62 69 6e 64 28 6e bRouter.s.bind(n
3190: 65 77 53 75 62 52 6f 75 74 65 72 29 0a 20 20 72 ewSubRouter). r
31a0: 65 74 75 72 6e 20 72 6f 75 74 65 72 0a 7d 0a 0a eturn router.}..
31b0: 2f 2a 2a 0a 20 2a 20 53 65 74 20 74 68 65 20 62 /**. * Set the b
31c0: 61 73 65 20 6f 66 20 75 72 6c 0a 20 2a 20 40 70 ase of url. * @p
31d0: 61 72 61 6d 20 7b 28 73 74 72 7c 52 65 67 45 78 aram {(str|RegEx
31e0: 70 29 7d 20 61 72 67 20 2d 20 61 20 6e 65 77 20 p)} arg - a new
31f0: 62 61 73 65 20 6f 72 20 27 23 27 20 6f 72 20 27 base or '#' or '
3200: 23 21 27 0a 20 2a 2f 0a 72 6f 75 74 65 2e 62 61 #!'. */.route.ba
3210: 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e 28 61 72 se = function(ar
3220: 67 29 20 7b 0a 20 20 62 61 73 65 20 3d 20 61 72 g) {. base = ar
3230: 67 20 7c 7c 20 27 23 27 0a 20 20 63 75 72 72 65 g || '#'. curre
3240: 6e 74 20 3d 20 67 65 74 50 61 74 68 46 72 6f 6d nt = getPathFrom
3250: 42 61 73 65 28 29 20 2f 2f 20 72 65 63 61 6c 63 Base() // recalc
3260: 75 6c 61 74 65 20 63 75 72 72 65 6e 74 20 70 61 ulate current pa
3270: 74 68 0a 7d 0a 0a 2f 2a 2a 20 45 78 65 63 20 72 th.}../** Exec r
3280: 6f 75 74 69 6e 67 20 72 69 67 68 74 20 6e 6f 77 outing right now
3290: 20 2a 2a 2f 0a 72 6f 75 74 65 2e 65 78 65 63 20 **/.route.exec
32a0: 3d 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 = function() {.
32b0: 20 65 6d 69 74 28 74 72 75 65 29 0a 7d 0a 0a 2f emit(true).}../
32c0: 2a 2a 0a 20 2a 20 52 65 70 6c 61 63 65 20 74 68 **. * Replace th
32d0: 65 20 64 65 66 61 75 6c 74 20 72 6f 75 74 65 72 e default router
32e0: 20 74 6f 20 79 6f 75 72 73 0a 20 2a 20 40 70 61 to yours. * @pa
32f0: 72 61 6d 20 7b 66 75 6e 63 74 69 6f 6e 7d 20 66 ram {function} f
3300: 6e 20 2d 20 79 6f 75 72 20 70 61 72 73 65 72 20 n - your parser
3310: 66 75 6e 63 74 69 6f 6e 0a 20 2a 20 40 70 61 72 function. * @par
3320: 61 6d 20 7b 66 75 6e 63 74 69 6f 6e 7d 20 66 6e am {function} fn
3330: 32 20 2d 20 79 6f 75 72 20 73 65 63 6f 6e 64 50 2 - your secondP
3340: 61 72 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 20 arser function.
3350: 2a 2f 0a 72 6f 75 74 65 2e 70 61 72 73 65 72 20 */.route.parser
3360: 3d 20 66 75 6e 63 74 69 6f 6e 28 66 6e 2c 20 66 = function(fn, f
3370: 6e 32 29 20 7b 0a 20 20 69 66 20 28 21 66 6e 20 n2) {. if (!fn
3380: 26 26 20 21 66 6e 32 29 20 7b 0a 20 20 20 20 2f && !fn2) {. /
3390: 2f 20 72 65 73 65 74 20 70 61 72 73 65 72 20 66 / reset parser f
33a0: 6f 72 20 74 65 73 74 69 6e 67 2e 2e 2e 0a 20 20 or testing....
33b0: 20 20 70 61 72 73 65 72 20 3d 20 44 45 46 41 55 parser = DEFAU
33c0: 4c 54 5f 50 41 52 53 45 52 0a 20 20 20 20 73 65 LT_PARSER. se
33d0: 63 6f 6e 64 50 61 72 73 65 72 20 3d 20 44 45 46 condParser = DEF
33e0: 41 55 4c 54 5f 53 45 43 4f 4e 44 5f 50 41 52 53 AULT_SECOND_PARS
33f0: 45 52 0a 20 20 7d 0a 20 20 69 66 20 28 66 6e 29 ER. }. if (fn)
3400: 20 70 61 72 73 65 72 20 3d 20 66 6e 0a 20 20 69 parser = fn. i
3410: 66 20 28 66 6e 32 29 20 73 65 63 6f 6e 64 50 61 f (fn2) secondPa
3420: 72 73 65 72 20 3d 20 66 6e 32 0a 7d 0a 0a 2f 2a rser = fn2.}../*
3430: 2a 0a 20 2a 20 48 65 6c 70 65 72 20 66 75 6e 63 *. * Helper func
3440: 74 69 6f 6e 20 74 6f 20 67 65 74 20 75 72 6c 20 tion to get url
3450: 71 75 65 72 79 20 61 73 20 61 6e 20 6f 62 6a 65 query as an obje
3460: 63 74 0a 20 2a 20 40 72 65 74 75 72 6e 73 20 7b ct. * @returns {
3470: 6f 62 6a 65 63 74 7d 20 70 61 72 73 65 64 20 71 object} parsed q
3480: 75 65 72 79 0a 20 2a 2f 0a 72 6f 75 74 65 2e 71 uery. */.route.q
3490: 75 65 72 79 20 3d 20 66 75 6e 63 74 69 6f 6e 28 uery = function(
34a0: 29 20 7b 0a 20 20 76 61 72 20 71 20 3d 20 7b 7d ) {. var q = {}
34b0: 0a 20 20 76 61 72 20 68 72 65 66 20 3d 20 6c 6f . var href = lo
34c0: 63 2e 68 72 65 66 20 7c 7c 20 63 75 72 72 65 6e c.href || curren
34d0: 74 0a 20 20 68 72 65 66 5b 52 45 50 4c 41 43 45 t. href[REPLACE
34e0: 5d 28 2f 5b 3f 26 5d 28 2e 2b 3f 29 3d 28 5b 5e ](/[?&](.+?)=([^
34f0: 26 5d 2a 29 2f 67 2c 20 66 75 6e 63 74 69 6f 6e &]*)/g, function
3500: 28 5f 2c 20 6b 2c 20 76 29 20 7b 20 71 5b 6b 5d (_, k, v) { q[k]
3510: 20 3d 20 76 20 7d 29 0a 20 20 72 65 74 75 72 6e = v }). return
3520: 20 71 0a 7d 0a 0a 2f 2a 2a 20 53 74 6f 70 20 72 q.}../** Stop r
3530: 6f 75 74 69 6e 67 20 2a 2a 2f 0a 72 6f 75 74 65 outing **/.route
3540: 2e 73 74 6f 70 20 3d 20 66 75 6e 63 74 69 6f 6e .stop = function
3550: 20 28 29 20 7b 0a 20 20 69 66 20 28 73 74 61 72 () {. if (star
3560: 74 65 64 29 20 7b 0a 20 20 20 20 69 66 20 28 77 ted) {. if (w
3570: 69 6e 29 20 7b 0a 20 20 20 20 20 20 77 69 6e 5b in) {. win[
3580: 52 45 4d 4f 56 45 5f 45 56 45 4e 54 5f 4c 49 53 REMOVE_EVENT_LIS
3590: 54 45 4e 45 52 5d 28 50 4f 50 53 54 41 54 45 2c TENER](POPSTATE,
35a0: 20 64 65 62 6f 75 6e 63 65 64 45 6d 69 74 29 0a debouncedEmit).
35b0: 20 20 20 20 20 20 77 69 6e 5b 52 45 4d 4f 56 45 win[REMOVE
35c0: 5f 45 56 45 4e 54 5f 4c 49 53 54 45 4e 45 52 5d _EVENT_LISTENER]
35d0: 28 48 41 53 48 43 48 41 4e 47 45 2c 20 64 65 62 (HASHCHANGE, deb
35e0: 6f 75 6e 63 65 64 45 6d 69 74 29 0a 20 20 20 20 ouncedEmit).
35f0: 20 20 64 6f 63 5b 52 45 4d 4f 56 45 5f 45 56 45 doc[REMOVE_EVE
3600: 4e 54 5f 4c 49 53 54 45 4e 45 52 5d 28 63 6c 69 NT_LISTENER](cli
3610: 63 6b 45 76 65 6e 74 2c 20 63 6c 69 63 6b 29 0a ckEvent, click).
3620: 20 20 20 20 7d 0a 20 20 20 20 63 65 6e 74 72 61 }. centra
3630: 6c 5b 54 52 49 47 47 45 52 5d 28 27 73 74 6f 70 l[TRIGGER]('stop
3640: 27 29 0a 20 20 20 20 73 74 61 72 74 65 64 20 3d '). started =
3650: 20 66 61 6c 73 65 0a 20 20 7d 0a 7d 0a 0a 2f 2a false. }.}../*
3660: 2a 0a 20 2a 20 53 74 61 72 74 20 72 6f 75 74 69 *. * Start routi
3670: 6e 67 0a 20 2a 20 40 70 61 72 61 6d 20 7b 62 6f ng. * @param {bo
3680: 6f 6c 65 61 6e 7d 20 61 75 74 6f 45 78 65 63 20 olean} autoExec
3690: 2d 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 - automatically
36a0: 65 78 65 63 20 61 66 74 65 72 20 73 74 61 72 74 exec after start
36b0: 69 6e 67 20 69 66 20 74 72 75 65 0a 20 2a 2f 0a ing if true. */.
36c0: 72 6f 75 74 65 2e 73 74 61 72 74 20 3d 20 66 75 route.start = fu
36d0: 6e 63 74 69 6f 6e 20 28 61 75 74 6f 45 78 65 63 nction (autoExec
36e0: 29 20 7b 0a 20 20 69 66 20 28 21 73 74 61 72 74 ) {. if (!start
36f0: 65 64 29 20 7b 0a 20 20 20 20 69 66 20 28 77 69 ed) {. if (wi
3700: 6e 29 20 7b 0a 20 20 20 20 20 20 69 66 20 28 64 n) {. if (d
3710: 6f 63 75 6d 65 6e 74 2e 72 65 61 64 79 53 74 61 ocument.readySta
3720: 74 65 20 3d 3d 20 27 63 6f 6d 70 6c 65 74 65 27 te == 'complete'
3730: 29 20 73 74 61 72 74 28 61 75 74 6f 45 78 65 63 ) start(autoExec
3740: 29 0a 20 20 20 20 20 20 2f 2f 20 74 68 65 20 74 ). // the t
3750: 69 6d 65 6f 75 74 20 69 73 20 6e 65 65 64 65 64 imeout is needed
3760: 20 74 6f 20 73 6f 6c 76 65 0a 20 20 20 20 20 20 to solve.
3770: 2f 2f 20 61 20 77 65 69 72 64 20 73 61 66 61 72 // a weird safar
3780: 69 20 62 75 67 20 68 74 74 70 73 3a 2f 2f 67 69 i bug https://gi
3790: 74 68 75 62 2e 63 6f 6d 2f 72 69 6f 74 2f 72 6f thub.com/riot/ro
37a0: 75 74 65 2f 69 73 73 75 65 73 2f 33 33 0a 20 20 ute/issues/33.
37b0: 20 20 20 20 65 6c 73 65 20 77 69 6e 5b 41 44 44 else win[ADD
37c0: 5f 45 56 45 4e 54 5f 4c 49 53 54 45 4e 45 52 5d _EVENT_LISTENER]
37d0: 28 27 6c 6f 61 64 27 2c 20 66 75 6e 63 74 69 6f ('load', functio
37e0: 6e 28 29 20 7b 0a 20 20 20 20 20 20 20 20 73 65 n() {. se
37f0: 74 54 69 6d 65 6f 75 74 28 66 75 6e 63 74 69 6f tTimeout(functio
3800: 6e 28 29 20 7b 20 73 74 61 72 74 28 61 75 74 6f n() { start(auto
3810: 45 78 65 63 29 20 7d 2c 20 31 29 0a 20 20 20 20 Exec) }, 1).
3820: 20 20 7d 29 0a 20 20 20 20 7d 0a 20 20 20 20 73 }). }. s
3830: 74 61 72 74 65 64 20 3d 20 74 72 75 65 0a 20 20 tarted = true.
3840: 7d 0a 7d 0a 0a 2f 2a 2a 20 50 72 65 70 61 72 65 }.}../** Prepare
3850: 20 74 68 65 20 72 6f 75 74 65 72 20 2a 2a 2f 0a the router **/.
3860: 72 6f 75 74 65 2e 62 61 73 65 28 29 0a 72 6f 75 route.base().rou
3870: 74 65 2e 70 61 72 73 65 72 28 29 0a 0a 72 69 6f te.parser()..rio
3880: 74 2e 72 6f 75 74 65 20 3d 20 72 6f 75 74 65 0a t.route = route.
3890: 7d 29 28 72 69 6f 74 29 0a 2f 2a 20 69 73 74 61 })(riot)./* ista
38a0: 6e 62 75 6c 20 69 67 6e 6f 72 65 20 6e 65 78 74 nbul ignore next
38b0: 20 2a 2f 0a 0a 2f 2a 2a 0a 20 2a 20 54 68 65 20 */../**. * The
38c0: 72 69 6f 74 20 74 65 6d 70 6c 61 74 65 20 65 6e riot template en
38d0: 67 69 6e 65 0a 20 2a 20 40 76 65 72 73 69 6f 6e gine. * @version
38e0: 20 76 32 2e 34 2e 31 0a 20 2a 2f 0a 2f 2a 2a 0a v2.4.1. */./**.
38f0: 20 2a 20 72 69 6f 74 2e 75 74 69 6c 2e 62 72 61 * riot.util.bra
3900: 63 6b 65 74 73 0a 20 2a 0a 20 2a 20 2d 20 60 62 ckets. *. * - `b
3910: 72 61 63 6b 65 74 73 20 20 20 20 60 20 2d 20 52 rackets ` - R
3920: 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 eturns a string
3930: 6f 72 20 72 65 67 65 78 20 62 61 73 65 64 20 6f or regex based o
3940: 6e 20 69 74 73 20 70 61 72 61 6d 65 74 65 72 0a n its parameter.
3950: 20 2a 20 2d 20 60 62 72 61 63 6b 65 74 73 2e 73 * - `brackets.s
3960: 65 74 60 20 2d 20 43 68 61 6e 67 65 20 74 68 65 et` - Change the
3970: 20 63 75 72 72 65 6e 74 20 72 69 6f 74 20 62 72 current riot br
3980: 61 63 6b 65 74 73 0a 20 2a 0a 20 2a 20 40 6d 6f ackets. *. * @mo
3990: 64 75 6c 65 0a 20 2a 2f 0a 0a 76 61 72 20 62 72 dule. */..var br
39a0: 61 63 6b 65 74 73 20 3d 20 28 66 75 6e 63 74 69 ackets = (functi
39b0: 6f 6e 20 28 55 4e 44 45 46 29 20 7b 0a 0a 20 20 on (UNDEF) {..
39c0: 76 61 72 0a 20 20 20 20 52 45 47 4c 4f 42 20 3d var. REGLOB =
39d0: 20 27 67 27 2c 0a 0a 20 20 20 20 52 5f 4d 4c 43 'g',.. R_MLC
39e0: 4f 4d 4d 53 20 3d 20 2f 5c 2f 5c 2a 5b 5e 2a 5d OMMS = /\/\*[^*]
39f0: 2a 5c 2a 2b 28 3f 3a 5b 5e 2a 5c 2f 5d 5b 5e 2a *\*+(?:[^*\/][^*
3a00: 5d 2a 5c 2a 2b 29 2a 5c 2f 2f 67 2c 0a 0a 20 20 ]*\*+)*\//g,..
3a10: 20 20 52 5f 53 54 52 49 4e 47 53 20 3d 20 2f 22 R_STRINGS = /"
3a20: 5b 5e 22 5c 5c 5d 2a 28 3f 3a 5c 5c 5b 5c 53 5c [^"\\]*(?:\\[\S\
3a30: 73 5d 5b 5e 22 5c 5c 5d 2a 29 2a 22 7c 27 5b 5e s][^"\\]*)*"|'[^
3a40: 27 5c 5c 5d 2a 28 3f 3a 5c 5c 5b 5c 53 5c 73 5d '\\]*(?:\\[\S\s]
3a50: 5b 5e 27 5c 5c 5d 2a 29 2a 27 2f 67 2c 0a 0a 20 [^'\\]*)*'/g,..
3a60: 20 20 20 53 5f 51 42 4c 4f 43 4b 53 20 3d 20 52 S_QBLOCKS = R
3a70: 5f 53 54 52 49 4e 47 53 2e 73 6f 75 72 63 65 20 _STRINGS.source
3a80: 2b 20 27 7c 27 20 2b 0a 20 20 20 20 20 20 2f 28 + '|' +. /(
3a90: 3f 3a 5c 62 72 65 74 75 72 6e 5c 73 2b 7c 28 3f ?:\breturn\s+|(?
3aa0: 3a 5b 24 5c 77 5c 29 5c 5d 5d 7c 5c 2b 5c 2b 7c :[$\w\)\]]|\+\+|
3ab0: 2d 2d 29 5c 73 2a 28 5c 2f 29 28 3f 21 5b 2a 5c --)\s*(\/)(?![*\
3ac0: 2f 5d 29 29 2f 2e 73 6f 75 72 63 65 20 2b 20 27 /]))/.source + '
3ad0: 7c 27 20 2b 0a 20 20 20 20 20 20 2f 5c 2f 28 3f |' +. /\/(?
3ae0: 3d 5b 5e 2a 5c 2f 5d 29 5b 5e 5b 5c 2f 5c 5c 5d =[^*\/])[^[\/\\]
3af0: 2a 28 3f 3a 28 3f 3a 5c 5b 28 3f 3a 5c 5c 2e 7c *(?:(?:\[(?:\\.|
3b00: 5b 5e 5c 5d 5c 5c 5d 2a 29 2a 5c 5d 7c 5c 5c 2e [^\]\\]*)*\]|\\.
3b10: 29 5b 5e 5b 5c 2f 5c 5c 5d 2a 29 2a 3f 28 5c 2f )[^[\/\\]*)*?(\/
3b20: 29 5b 67 69 6d 5d 2a 2f 2e 73 6f 75 72 63 65 2c )[gim]*/.source,
3b30: 0a 0a 20 20 20 20 55 4e 53 55 50 50 4f 52 54 45 .. UNSUPPORTE
3b40: 44 20 3d 20 52 65 67 45 78 70 28 27 5b 5c 5c 27 D = RegExp('[\\'
3b50: 20 2b 20 27 78 30 30 2d 5c 5c 78 31 46 3c 3e 61 + 'x00-\\x1F<>a
3b60: 2d 7a 41 2d 5a 30 2d 39 5c 27 22 2c 3b 5c 5c 5c -zA-Z0-9\'",;\\\
3b70: 5c 5d 27 29 2c 0a 0a 20 20 20 20 4e 45 45 44 5f \]'),.. NEED_
3b80: 45 53 43 41 50 45 20 3d 20 2f 28 3f 3d 5b 5b 5c ESCAPE = /(?=[[\
3b90: 5d 28 29 2a 2b 3f 2e 5e 24 7c 5d 29 2f 67 2c 0a ]()*+?.^$|])/g,.
3ba0: 0a 20 20 20 20 46 49 4e 44 42 52 41 43 45 53 20 . FINDBRACES
3bb0: 3d 20 7b 0a 20 20 20 20 20 20 27 28 27 3a 20 52 = {. '(': R
3bc0: 65 67 45 78 70 28 27 28 5b 28 29 5d 29 7c 27 20 egExp('([()])|'
3bd0: 20 20 2b 20 53 5f 51 42 4c 4f 43 4b 53 2c 20 52 + S_QBLOCKS, R
3be0: 45 47 4c 4f 42 29 2c 0a 20 20 20 20 20 20 27 5b EGLOB),. '[
3bf0: 27 3a 20 52 65 67 45 78 70 28 27 28 5b 5b 5c 5c ': RegExp('([[\\
3c00: 5d 5d 29 7c 27 20 2b 20 53 5f 51 42 4c 4f 43 4b ]])|' + S_QBLOCK
3c10: 53 2c 20 52 45 47 4c 4f 42 29 2c 0a 20 20 20 20 S, REGLOB),.
3c20: 20 20 27 7b 27 3a 20 52 65 67 45 78 70 28 27 28 '{': RegExp('(
3c30: 5b 7b 7d 5d 29 7c 27 20 20 20 2b 20 53 5f 51 42 [{}])|' + S_QB
3c40: 4c 4f 43 4b 53 2c 20 52 45 47 4c 4f 42 29 0a 20 LOCKS, REGLOB).
3c50: 20 20 20 7d 2c 0a 0a 20 20 20 20 44 45 46 41 55 },.. DEFAU
3c60: 4c 54 20 3d 20 27 7b 20 7d 27 0a 0a 20 20 76 61 LT = '{ }'.. va
3c70: 72 20 5f 70 61 69 72 73 20 3d 20 5b 0a 20 20 20 r _pairs = [.
3c80: 20 27 7b 27 2c 20 27 7d 27 2c 0a 20 20 20 20 27 '{', '}',. '
3c90: 7b 27 2c 20 27 7d 27 2c 0a 20 20 20 20 2f 7b 5b {', '}',. /{[
3ca0: 5e 7d 5d 2a 7d 2f 2c 0a 20 20 20 20 2f 5c 5c 28 ^}]*}/,. /\\(
3cb0: 5b 7b 7d 5d 29 2f 67 2c 0a 20 20 20 20 2f 5c 5c [{}])/g,. /\\
3cc0: 28 7b 29 7c 7b 2f 67 2c 0a 20 20 20 20 52 65 67 ({)|{/g,. Reg
3cd0: 45 78 70 28 27 5c 5c 5c 5c 28 7d 29 7c 28 5b 5b Exp('\\\\(})|([[
3ce0: 28 7b 5d 29 7c 28 7d 29 7c 27 20 2b 20 53 5f 51 ({])|(})|' + S_Q
3cf0: 42 4c 4f 43 4b 53 2c 20 52 45 47 4c 4f 42 29 2c BLOCKS, REGLOB),
3d00: 0a 20 20 20 20 44 45 46 41 55 4c 54 2c 0a 20 20 . DEFAULT,.
3d10: 20 20 2f 5e 5c 73 2a 7b 5c 5e 3f 5c 73 2a 28 5b /^\s*{\^?\s*([
3d20: 24 5c 77 5d 2b 29 28 3f 3a 5c 73 2a 2c 5c 73 2a $\w]+)(?:\s*,\s*
3d30: 28 5c 53 2b 29 29 3f 5c 73 2b 69 6e 5c 73 2b 28 (\S+))?\s+in\s+(
3d40: 5c 53 2e 2a 29 5c 73 2a 7d 2f 2c 0a 20 20 20 20 \S.*)\s*}/,.
3d50: 2f 28 5e 7c 5b 5e 5c 5c 5d 29 7b 3d 5b 5c 53 5c /(^|[^\\]){=[\S\
3d60: 73 5d 2a 3f 7d 2f 0a 20 20 5d 0a 0a 20 20 76 61 s]*?}/. ].. va
3d70: 72 0a 20 20 20 20 63 61 63 68 65 64 42 72 61 63 r. cachedBrac
3d80: 6b 65 74 73 20 3d 20 55 4e 44 45 46 2c 0a 20 20 kets = UNDEF,.
3d90: 20 20 5f 72 65 67 65 78 2c 0a 20 20 20 20 5f 63 _regex,. _c
3da0: 61 63 68 65 20 3d 20 5b 5d 2c 0a 20 20 20 20 5f ache = [],. _
3db0: 73 65 74 74 69 6e 67 73 0a 0a 20 20 66 75 6e 63 settings.. func
3dc0: 74 69 6f 6e 20 5f 6c 6f 6f 70 62 61 63 6b 20 28 tion _loopback (
3dd0: 72 65 29 20 7b 20 72 65 74 75 72 6e 20 72 65 20 re) { return re
3de0: 7d 0a 0a 20 20 66 75 6e 63 74 69 6f 6e 20 5f 72 }.. function _r
3df0: 65 77 72 69 74 65 20 28 72 65 2c 20 62 70 29 20 ewrite (re, bp)
3e00: 7b 0a 20 20 20 20 69 66 20 28 21 62 70 29 20 62 {. if (!bp) b
3e10: 70 20 3d 20 5f 63 61 63 68 65 0a 20 20 20 20 72 p = _cache. r
3e20: 65 74 75 72 6e 20 6e 65 77 20 52 65 67 45 78 70 eturn new RegExp
3e30: 28 0a 20 20 20 20 20 20 72 65 2e 73 6f 75 72 63 (. re.sourc
3e40: 65 2e 72 65 70 6c 61 63 65 28 2f 7b 2f 67 2c 20 e.replace(/{/g,
3e50: 62 70 5b 32 5d 29 2e 72 65 70 6c 61 63 65 28 2f bp[2]).replace(/
3e60: 7d 2f 67 2c 20 62 70 5b 33 5d 29 2c 20 72 65 2e }/g, bp[3]), re.
3e70: 67 6c 6f 62 61 6c 20 3f 20 52 45 47 4c 4f 42 20 global ? REGLOB
3e80: 3a 20 27 27 0a 20 20 20 20 29 0a 20 20 7d 0a 0a : ''. ). }..
3e90: 20 20 66 75 6e 63 74 69 6f 6e 20 5f 63 72 65 61 function _crea
3ea0: 74 65 20 28 70 61 69 72 29 20 7b 0a 20 20 20 20 te (pair) {.
3eb0: 69 66 20 28 70 61 69 72 20 3d 3d 3d 20 44 45 46 if (pair === DEF
3ec0: 41 55 4c 54 29 20 72 65 74 75 72 6e 20 5f 70 61 AULT) return _pa
3ed0: 69 72 73 0a 0a 20 20 20 20 76 61 72 20 61 72 72 irs.. var arr
3ee0: 20 3d 20 70 61 69 72 2e 73 70 6c 69 74 28 27 20 = pair.split('
3ef0: 27 29 0a 0a 20 20 20 20 69 66 20 28 61 72 72 2e ').. if (arr.
3f00: 6c 65 6e 67 74 68 20 21 3d 3d 20 32 20 7c 7c 20 length !== 2 ||
3f10: 55 4e 53 55 50 50 4f 52 54 45 44 2e 74 65 73 74 UNSUPPORTED.test
3f20: 28 70 61 69 72 29 29 20 7b 0a 20 20 20 20 20 20 (pair)) {.
3f30: 74 68 72 6f 77 20 6e 65 77 20 45 72 72 6f 72 28 throw new Error(
3f40: 27 55 6e 73 75 70 70 6f 72 74 65 64 20 62 72 61 'Unsupported bra
3f50: 63 6b 65 74 73 20 22 27 20 2b 20 70 61 69 72 20 ckets "' + pair
3f60: 2b 20 27 22 27 29 0a 20 20 20 20 7d 0a 20 20 20 + '"'). }.
3f70: 20 61 72 72 20 3d 20 61 72 72 2e 63 6f 6e 63 61 arr = arr.conca
3f80: 74 28 70 61 69 72 2e 72 65 70 6c 61 63 65 28 4e t(pair.replace(N
3f90: 45 45 44 5f 45 53 43 41 50 45 2c 20 27 5c 5c 27 EED_ESCAPE, '\\'
3fa0: 29 2e 73 70 6c 69 74 28 27 20 27 29 29 0a 0a 20 ).split(' '))..
3fb0: 20 20 20 61 72 72 5b 34 5d 20 3d 20 5f 72 65 77 arr[4] = _rew
3fc0: 72 69 74 65 28 61 72 72 5b 31 5d 2e 6c 65 6e 67 rite(arr[1].leng
3fd0: 74 68 20 3e 20 31 20 3f 20 2f 7b 5b 5c 53 5c 73 th > 1 ? /{[\S\s
3fe0: 5d 2a 3f 7d 2f 20 3a 20 5f 70 61 69 72 73 5b 34 ]*?}/ : _pairs[4
3ff0: 5d 2c 20 61 72 72 29 0a 20 20 20 20 61 72 72 5b ], arr). arr[
4000: 35 5d 20 3d 20 5f 72 65 77 72 69 74 65 28 70 61 5] = _rewrite(pa
4010: 69 72 2e 6c 65 6e 67 74 68 20 3e 20 33 20 3f 20 ir.length > 3 ?
4020: 2f 5c 5c 28 7b 7c 7d 29 2f 67 20 3a 20 5f 70 61 /\\({|})/g : _pa
4030: 69 72 73 5b 35 5d 2c 20 61 72 72 29 0a 20 20 20 irs[5], arr).
4040: 20 61 72 72 5b 36 5d 20 3d 20 5f 72 65 77 72 69 arr[6] = _rewri
4050: 74 65 28 5f 70 61 69 72 73 5b 36 5d 2c 20 61 72 te(_pairs[6], ar
4060: 72 29 0a 20 20 20 20 61 72 72 5b 37 5d 20 3d 20 r). arr[7] =
4070: 52 65 67 45 78 70 28 27 5c 5c 5c 5c 28 27 20 2b RegExp('\\\\(' +
4080: 20 61 72 72 5b 33 5d 20 2b 20 27 29 7c 28 5b 5b arr[3] + ')|([[
4090: 28 7b 5d 29 7c 28 27 20 2b 20 61 72 72 5b 33 5d ({])|(' + arr[3]
40a0: 20 2b 20 27 29 7c 27 20 2b 20 53 5f 51 42 4c 4f + ')|' + S_QBLO
40b0: 43 4b 53 2c 20 52 45 47 4c 4f 42 29 0a 20 20 20 CKS, REGLOB).
40c0: 20 61 72 72 5b 38 5d 20 3d 20 70 61 69 72 0a 20 arr[8] = pair.
40d0: 20 20 20 72 65 74 75 72 6e 20 61 72 72 0a 20 20 return arr.
40e0: 7d 0a 0a 20 20 66 75 6e 63 74 69 6f 6e 20 5f 62 }.. function _b
40f0: 72 61 63 6b 65 74 73 20 28 72 65 4f 72 49 64 78 rackets (reOrIdx
4100: 29 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 ) {. return r
4110: 65 4f 72 49 64 78 20 69 6e 73 74 61 6e 63 65 6f eOrIdx instanceo
4120: 66 20 52 65 67 45 78 70 20 3f 20 5f 72 65 67 65 f RegExp ? _rege
4130: 78 28 72 65 4f 72 49 64 78 29 20 3a 20 5f 63 61 x(reOrIdx) : _ca
4140: 63 68 65 5b 72 65 4f 72 49 64 78 5d 0a 20 20 7d che[reOrIdx]. }
4150: 0a 0a 20 20 5f 62 72 61 63 6b 65 74 73 2e 73 70 .. _brackets.sp
4160: 6c 69 74 20 3d 20 66 75 6e 63 74 69 6f 6e 20 73 lit = function s
4170: 70 6c 69 74 20 28 73 74 72 2c 20 74 6d 70 6c 2c plit (str, tmpl,
4180: 20 5f 62 70 29 20 7b 0a 20 20 20 20 2f 2f 20 69 _bp) {. // i
4190: 73 74 61 6e 62 75 6c 20 69 67 6e 6f 72 65 20 6e stanbul ignore n
41a0: 65 78 74 3a 20 5f 62 70 20 69 73 20 66 6f 72 20 ext: _bp is for
41b0: 74 68 65 20 63 6f 6d 70 69 6c 65 72 0a 20 20 20 the compiler.
41c0: 20 69 66 20 28 21 5f 62 70 29 20 5f 62 70 20 3d if (!_bp) _bp =
41d0: 20 5f 63 61 63 68 65 0a 0a 20 20 20 20 76 61 72 _cache.. var
41e0: 0a 20 20 20 20 20 20 70 61 72 74 73 20 3d 20 5b . parts = [
41f0: 5d 2c 0a 20 20 20 20 20 20 6d 61 74 63 68 2c 0a ],. match,.
4200: 20 20 20 20 20 20 69 73 65 78 70 72 2c 0a 20 20 isexpr,.
4210: 20 20 20 20 73 74 61 72 74 2c 0a 20 20 20 20 20 start,.
4220: 20 70 6f 73 2c 0a 20 20 20 20 20 20 72 65 20 3d pos,. re =
4230: 20 5f 62 70 5b 36 5d 0a 0a 20 20 20 20 69 73 65 _bp[6].. ise
4240: 78 70 72 20 3d 20 73 74 61 72 74 20 3d 20 72 65 xpr = start = re
4250: 2e 6c 61 73 74 49 6e 64 65 78 20 3d 20 30 0a 0a .lastIndex = 0..
4260: 20 20 20 20 77 68 69 6c 65 20 28 28 6d 61 74 63 while ((matc
4270: 68 20 3d 20 72 65 2e 65 78 65 63 28 73 74 72 29 h = re.exec(str)
4280: 29 29 20 7b 0a 0a 20 20 20 20 20 20 70 6f 73 20 )) {.. pos
4290: 3d 20 6d 61 74 63 68 2e 69 6e 64 65 78 0a 0a 20 = match.index..
42a0: 20 20 20 20 20 69 66 20 28 69 73 65 78 70 72 29 if (isexpr)
42b0: 20 7b 0a 0a 20 20 20 20 20 20 20 20 69 66 20 28 {.. if (
42c0: 6d 61 74 63 68 5b 32 5d 29 20 7b 0a 20 20 20 20 match[2]) {.
42d0: 20 20 20 20 20 20 72 65 2e 6c 61 73 74 49 6e 64 re.lastInd
42e0: 65 78 20 3d 20 73 6b 69 70 42 72 61 63 65 73 28 ex = skipBraces(
42f0: 73 74 72 2c 20 6d 61 74 63 68 5b 32 5d 2c 20 72 str, match[2], r
4300: 65 2e 6c 61 73 74 49 6e 64 65 78 29 0a 20 20 20 e.lastIndex).
4310: 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a continue.
4320: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 }.
4330: 20 20 69 66 20 28 21 6d 61 74 63 68 5b 33 5d 29 if (!match[3])
4340: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e {. con
4350: 74 69 6e 75 65 0a 20 20 20 20 20 20 20 20 7d 0a tinue. }.
4360: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 }.. i
4370: 66 20 28 21 6d 61 74 63 68 5b 31 5d 29 20 7b 0a f (!match[1]) {.
4380: 20 20 20 20 20 20 20 20 75 6e 65 73 63 61 70 65 unescape
4390: 53 74 72 28 73 74 72 2e 73 6c 69 63 65 28 73 74 Str(str.slice(st
43a0: 61 72 74 2c 20 70 6f 73 29 29 0a 20 20 20 20 20 art, pos)).
43b0: 20 20 20 73 74 61 72 74 20 3d 20 72 65 2e 6c 61 start = re.la
43c0: 73 74 49 6e 64 65 78 0a 20 20 20 20 20 20 20 20 stIndex.
43d0: 72 65 20 3d 20 5f 62 70 5b 36 20 2b 20 28 69 73 re = _bp[6 + (is
43e0: 65 78 70 72 20 5e 3d 20 31 29 5d 0a 20 20 20 20 expr ^= 1)].
43f0: 20 20 20 20 72 65 2e 6c 61 73 74 49 6e 64 65 78 re.lastIndex
4400: 20 3d 20 73 74 61 72 74 0a 20 20 20 20 20 20 7d = start. }
4410: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 20 28 . }.. if (
4420: 73 74 72 20 26 26 20 73 74 61 72 74 20 3c 20 73 str && start < s
4430: 74 72 2e 6c 65 6e 67 74 68 29 20 7b 0a 20 20 20 tr.length) {.
4440: 20 20 20 75 6e 65 73 63 61 70 65 53 74 72 28 73 unescapeStr(s
4450: 74 72 2e 73 6c 69 63 65 28 73 74 61 72 74 29 29 tr.slice(start))
4460: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 72 65 74 75 . }.. retu
4470: 72 6e 20 70 61 72 74 73 0a 0a 20 20 20 20 66 75 rn parts.. fu
4480: 6e 63 74 69 6f 6e 20 75 6e 65 73 63 61 70 65 53 nction unescapeS
4490: 74 72 20 28 73 29 20 7b 0a 20 20 20 20 20 20 69 tr (s) {. i
44a0: 66 20 28 74 6d 70 6c 20 7c 7c 20 69 73 65 78 70 f (tmpl || isexp
44b0: 72 29 20 7b 0a 20 20 20 20 20 20 20 20 70 61 72 r) {. par
44c0: 74 73 2e 70 75 73 68 28 73 20 26 26 20 73 2e 72 ts.push(s && s.r
44d0: 65 70 6c 61 63 65 28 5f 62 70 5b 35 5d 2c 20 27 eplace(_bp[5], '
44e0: 24 31 27 29 29 0a 20 20 20 20 20 20 7d 20 65 6c $1')). } el
44f0: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 70 61 72 se {. par
4500: 74 73 2e 70 75 73 68 28 73 29 0a 20 20 20 20 20 ts.push(s).
4510: 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 }. }.. fu
4520: 6e 63 74 69 6f 6e 20 73 6b 69 70 42 72 61 63 65 nction skipBrace
4530: 73 20 28 73 2c 20 63 68 2c 20 69 78 29 20 7b 0a s (s, ch, ix) {.
4540: 20 20 20 20 20 20 76 61 72 0a 20 20 20 20 20 20 var.
4550: 20 20 6d 61 74 63 68 2c 0a 20 20 20 20 20 20 20 match,.
4560: 20 72 65 63 63 68 20 3d 20 46 49 4e 44 42 52 41 recch = FINDBRA
4570: 43 45 53 5b 63 68 5d 0a 0a 20 20 20 20 20 20 72 CES[ch].. r
4580: 65 63 63 68 2e 6c 61 73 74 49 6e 64 65 78 20 3d ecch.lastIndex =
4590: 20 69 78 0a 20 20 20 20 20 20 69 78 20 3d 20 31 ix. ix = 1
45a0: 0a 20 20 20 20 20 20 77 68 69 6c 65 20 28 28 6d . while ((m
45b0: 61 74 63 68 20 3d 20 72 65 63 63 68 2e 65 78 65 atch = recch.exe
45c0: 63 28 73 29 29 29 20 7b 0a 20 20 20 20 20 20 20 c(s))) {.
45d0: 20 69 66 20 28 6d 61 74 63 68 5b 31 5d 20 26 26 if (match[1] &&
45e0: 0a 20 20 20 20 20 20 20 20 20 20 21 28 6d 61 74 . !(mat
45f0: 63 68 5b 31 5d 20 3d 3d 3d 20 63 68 20 3f 20 2b ch[1] === ch ? +
4600: 2b 69 78 20 3a 20 2d 2d 69 78 29 29 20 62 72 65 +ix : --ix)) bre
4610: 61 6b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 ak. }.
4620: 20 72 65 74 75 72 6e 20 69 78 20 3f 20 73 2e 6c return ix ? s.l
4630: 65 6e 67 74 68 20 3a 20 72 65 63 63 68 2e 6c 61 ength : recch.la
4640: 73 74 49 6e 64 65 78 0a 20 20 20 20 7d 0a 20 20 stIndex. }.
4650: 7d 0a 0a 20 20 5f 62 72 61 63 6b 65 74 73 2e 68 }.. _brackets.h
4660: 61 73 45 78 70 72 20 3d 20 66 75 6e 63 74 69 6f asExpr = functio
4670: 6e 20 68 61 73 45 78 70 72 20 28 73 74 72 29 20 n hasExpr (str)
4680: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 5f 63 61 {. return _ca
4690: 63 68 65 5b 34 5d 2e 74 65 73 74 28 73 74 72 29 che[4].test(str)
46a0: 0a 20 20 7d 0a 0a 20 20 5f 62 72 61 63 6b 65 74 . }.. _bracket
46b0: 73 2e 6c 6f 6f 70 4b 65 79 73 20 3d 20 66 75 6e s.loopKeys = fun
46c0: 63 74 69 6f 6e 20 6c 6f 6f 70 4b 65 79 73 20 28 ction loopKeys (
46d0: 65 78 70 72 29 20 7b 0a 20 20 20 20 76 61 72 20 expr) {. var
46e0: 6d 20 3d 20 65 78 70 72 2e 6d 61 74 63 68 28 5f m = expr.match(_
46f0: 63 61 63 68 65 5b 39 5d 29 0a 0a 20 20 20 20 72 cache[9]).. r
4700: 65 74 75 72 6e 20 6d 0a 20 20 20 20 20 20 3f 20 eturn m. ?
4710: 7b 20 6b 65 79 3a 20 6d 5b 31 5d 2c 20 70 6f 73 { key: m[1], pos
4720: 3a 20 6d 5b 32 5d 2c 20 76 61 6c 3a 20 5f 63 61 : m[2], val: _ca
4730: 63 68 65 5b 30 5d 20 2b 20 6d 5b 33 5d 2e 74 72 che[0] + m[3].tr
4740: 69 6d 28 29 20 2b 20 5f 63 61 63 68 65 5b 31 5d im() + _cache[1]
4750: 20 7d 0a 20 20 20 20 20 20 3a 20 7b 20 76 61 6c }. : { val
4760: 3a 20 65 78 70 72 2e 74 72 69 6d 28 29 20 7d 0a : expr.trim() }.
4770: 20 20 7d 0a 0a 20 20 5f 62 72 61 63 6b 65 74 73 }.. _brackets
4780: 2e 61 72 72 61 79 20 3d 20 66 75 6e 63 74 69 6f .array = functio
4790: 6e 20 61 72 72 61 79 20 28 70 61 69 72 29 20 7b n array (pair) {
47a0: 0a 20 20 20 20 72 65 74 75 72 6e 20 70 61 69 72 . return pair
47b0: 20 3f 20 5f 63 72 65 61 74 65 28 70 61 69 72 29 ? _create(pair)
47c0: 20 3a 20 5f 63 61 63 68 65 0a 20 20 7d 0a 0a 20 : _cache. }..
47d0: 20 66 75 6e 63 74 69 6f 6e 20 5f 72 65 73 65 74 function _reset
47e0: 20 28 70 61 69 72 29 20 7b 0a 20 20 20 20 69 66 (pair) {. if
47f0: 20 28 28 70 61 69 72 20 7c 7c 20 28 70 61 69 72 ((pair || (pair
4800: 20 3d 20 44 45 46 41 55 4c 54 29 29 20 21 3d 3d = DEFAULT)) !==
4810: 20 5f 63 61 63 68 65 5b 38 5d 29 20 7b 0a 20 20 _cache[8]) {.
4820: 20 20 20 20 5f 63 61 63 68 65 20 3d 20 5f 63 72 _cache = _cr
4830: 65 61 74 65 28 70 61 69 72 29 0a 20 20 20 20 20 eate(pair).
4840: 20 5f 72 65 67 65 78 20 3d 20 70 61 69 72 20 3d _regex = pair =
4850: 3d 3d 20 44 45 46 41 55 4c 54 20 3f 20 5f 6c 6f == DEFAULT ? _lo
4860: 6f 70 62 61 63 6b 20 3a 20 5f 72 65 77 72 69 74 opback : _rewrit
4870: 65 0a 20 20 20 20 20 20 5f 63 61 63 68 65 5b 39 e. _cache[9
4880: 5d 20 3d 20 5f 72 65 67 65 78 28 5f 70 61 69 72 ] = _regex(_pair
4890: 73 5b 39 5d 29 0a 20 20 20 20 7d 0a 20 20 20 20 s[9]). }.
48a0: 63 61 63 68 65 64 42 72 61 63 6b 65 74 73 20 3d cachedBrackets =
48b0: 20 70 61 69 72 0a 20 20 7d 0a 0a 20 20 66 75 6e pair. }.. fun
48c0: 63 74 69 6f 6e 20 5f 73 65 74 53 65 74 74 69 6e ction _setSettin
48d0: 67 73 20 28 6f 29 20 7b 0a 20 20 20 20 76 61 72 gs (o) {. var
48e0: 20 62 0a 0a 20 20 20 20 6f 20 3d 20 6f 20 7c 7c b.. o = o ||
48f0: 20 7b 7d 0a 20 20 20 20 62 20 3d 20 6f 2e 62 72 {}. b = o.br
4900: 61 63 6b 65 74 73 0a 20 20 20 20 4f 62 6a 65 63 ackets. Objec
4910: 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 t.defineProperty
4920: 28 6f 2c 20 27 62 72 61 63 6b 65 74 73 27 2c 20 (o, 'brackets',
4930: 7b 0a 20 20 20 20 20 20 73 65 74 3a 20 5f 72 65 {. set: _re
4940: 73 65 74 2c 0a 20 20 20 20 20 20 67 65 74 3a 20 set,. get:
4950: 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 20 72 65 function () { re
4960: 74 75 72 6e 20 63 61 63 68 65 64 42 72 61 63 6b turn cachedBrack
4970: 65 74 73 20 7d 2c 0a 20 20 20 20 20 20 65 6e 75 ets },. enu
4980: 6d 65 72 61 62 6c 65 3a 20 74 72 75 65 0a 20 20 merable: true.
4990: 20 20 7d 29 0a 20 20 20 20 5f 73 65 74 74 69 6e }). _settin
49a0: 67 73 20 3d 20 6f 0a 20 20 20 20 5f 72 65 73 65 gs = o. _rese
49b0: 74 28 62 29 0a 20 20 7d 0a 0a 20 20 4f 62 6a 65 t(b). }.. Obje
49c0: 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74 ct.definePropert
49d0: 79 28 5f 62 72 61 63 6b 65 74 73 2c 20 27 73 65 y(_brackets, 'se
49e0: 74 74 69 6e 67 73 27 2c 20 7b 0a 20 20 20 20 73 ttings', {. s
49f0: 65 74 3a 20 5f 73 65 74 53 65 74 74 69 6e 67 73 et: _setSettings
4a00: 2c 0a 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74 ,. get: funct
4a10: 69 6f 6e 20 28 29 20 7b 20 72 65 74 75 72 6e 20 ion () { return
4a20: 5f 73 65 74 74 69 6e 67 73 20 7d 0a 20 20 7d 29 _settings }. })
4a30: 0a 0a 20 20 2f 2a 20 69 73 74 61 6e 62 75 6c 20 .. /* istanbul
4a40: 69 67 6e 6f 72 65 20 6e 65 78 74 3a 20 69 6e 20 ignore next: in
4a50: 74 68 65 20 62 72 6f 77 73 65 72 20 72 69 6f 74 the browser riot
4a60: 20 69 73 20 61 6c 77 61 79 73 20 69 6e 20 74 68 is always in th
4a70: 65 20 73 63 6f 70 65 20 2a 2f 0a 20 20 5f 62 72 e scope */. _br
4a80: 61 63 6b 65 74 73 2e 73 65 74 74 69 6e 67 73 20 ackets.settings
4a90: 3d 20 74 79 70 65 6f 66 20 72 69 6f 74 20 21 3d = typeof riot !=
4aa0: 3d 20 27 75 6e 64 65 66 69 6e 65 64 27 20 26 26 = 'undefined' &&
4ab0: 20 72 69 6f 74 2e 73 65 74 74 69 6e 67 73 20 7c riot.settings |
4ac0: 7c 20 7b 7d 0a 20 20 5f 62 72 61 63 6b 65 74 73 | {}. _brackets
4ad0: 2e 73 65 74 20 3d 20 5f 72 65 73 65 74 0a 0a 20 .set = _reset..
4ae0: 20 5f 62 72 61 63 6b 65 74 73 2e 52 5f 53 54 52 _brackets.R_STR
4af0: 49 4e 47 53 20 3d 20 52 5f 53 54 52 49 4e 47 53 INGS = R_STRINGS
4b00: 0a 20 20 5f 62 72 61 63 6b 65 74 73 2e 52 5f 4d . _brackets.R_M
4b10: 4c 43 4f 4d 4d 53 20 3d 20 52 5f 4d 4c 43 4f 4d LCOMMS = R_MLCOM
4b20: 4d 53 0a 20 20 5f 62 72 61 63 6b 65 74 73 2e 53 MS. _brackets.S
4b30: 5f 51 42 4c 4f 43 4b 53 20 3d 20 53 5f 51 42 4c _QBLOCKS = S_QBL
4b40: 4f 43 4b 53 0a 0a 20 20 72 65 74 75 72 6e 20 5f OCKS.. return _
4b50: 62 72 61 63 6b 65 74 73 0a 0a 7d 29 28 29 0a 0a brackets..})()..
4b60: 2f 2a 2a 0a 20 2a 20 40 6d 6f 64 75 6c 65 20 74 /**. * @module t
4b70: 6d 70 6c 0a 20 2a 0a 20 2a 20 74 6d 70 6c 20 20 mpl. *. * tmpl
4b80: 20 20 20 20 20 20 20 20 2d 20 52 6f 6f 74 20 66 - Root f
4b90: 75 6e 63 74 69 6f 6e 2c 20 72 65 74 75 72 6e 73 unction, returns
4ba0: 20 74 68 65 20 74 65 6d 70 6c 61 74 65 20 76 61 the template va
4bb0: 6c 75 65 2c 20 72 65 6e 64 65 72 20 77 69 74 68 lue, render with
4bc0: 20 64 61 74 61 0a 20 2a 20 74 6d 70 6c 2e 68 61 data. * tmpl.ha
4bd0: 73 45 78 70 72 20 20 2d 20 54 65 73 74 20 74 68 sExpr - Test th
4be0: 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20 61 e existence of a
4bf0: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 73 69 expression insi
4c00: 64 65 20 61 20 73 74 72 69 6e 67 0a 20 2a 20 74 de a string. * t
4c10: 6d 70 6c 2e 6c 6f 6f 70 4b 65 79 73 20 2d 20 47 mpl.loopKeys - G
4c20: 65 74 20 74 68 65 20 6b 65 79 73 20 66 6f 72 20 et the keys for
4c30: 61 6e 20 27 65 61 63 68 27 20 6c 6f 6f 70 20 28 an 'each' loop (
4c40: 75 73 65 64 20 62 79 20 60 5f 65 61 63 68 60 29 used by `_each`)
4c50: 0a 20 2a 2f 0a 0a 76 61 72 20 74 6d 70 6c 20 3d . */..var tmpl =
4c60: 20 28 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a (function () {.
4c70: 0a 20 20 76 61 72 20 5f 63 61 63 68 65 20 3d 20 . var _cache =
4c80: 7b 7d 0a 0a 20 20 66 75 6e 63 74 69 6f 6e 20 5f {}.. function _
4c90: 74 6d 70 6c 20 28 73 74 72 2c 20 64 61 74 61 29 tmpl (str, data)
4ca0: 20 7b 0a 20 20 20 20 69 66 20 28 21 73 74 72 29 {. if (!str)
4cb0: 20 72 65 74 75 72 6e 20 73 74 72 0a 0a 20 20 20 return str..
4cc0: 20 72 65 74 75 72 6e 20 28 5f 63 61 63 68 65 5b return (_cache[
4cd0: 73 74 72 5d 20 7c 7c 20 28 5f 63 61 63 68 65 5b str] || (_cache[
4ce0: 73 74 72 5d 20 3d 20 5f 63 72 65 61 74 65 28 73 str] = _create(s
4cf0: 74 72 29 29 29 2e 63 61 6c 6c 28 64 61 74 61 2c tr))).call(data,
4d00: 20 5f 6c 6f 67 45 72 72 29 0a 20 20 7d 0a 0a 20 _logErr). }..
4d10: 20 5f 74 6d 70 6c 2e 68 61 76 65 52 61 77 20 3d _tmpl.haveRaw =
4d20: 20 62 72 61 63 6b 65 74 73 2e 68 61 73 52 61 77 brackets.hasRaw
4d30: 0a 0a 20 20 5f 74 6d 70 6c 2e 68 61 73 45 78 70 .. _tmpl.hasExp
4d40: 72 20 3d 20 62 72 61 63 6b 65 74 73 2e 68 61 73 r = brackets.has
4d50: 45 78 70 72 0a 0a 20 20 5f 74 6d 70 6c 2e 6c 6f Expr.. _tmpl.lo
4d60: 6f 70 4b 65 79 73 20 3d 20 62 72 61 63 6b 65 74 opKeys = bracket
4d70: 73 2e 6c 6f 6f 70 4b 65 79 73 0a 0a 20 20 2f 2f s.loopKeys.. //
4d80: 20 69 73 74 61 6e 62 75 6c 20 69 67 6e 6f 72 65 istanbul ignore
4d90: 20 6e 65 78 74 0a 20 20 5f 74 6d 70 6c 2e 63 6c next. _tmpl.cl
4da0: 65 61 72 43 61 63 68 65 20 3d 20 66 75 6e 63 74 earCache = funct
4db0: 69 6f 6e 20 28 29 20 7b 20 5f 63 61 63 68 65 20 ion () { _cache
4dc0: 3d 20 7b 7d 20 7d 0a 0a 20 20 5f 74 6d 70 6c 2e = {} }.. _tmpl.
4dd0: 65 72 72 6f 72 48 61 6e 64 6c 65 72 20 3d 20 6e errorHandler = n
4de0: 75 6c 6c 0a 0a 20 20 66 75 6e 63 74 69 6f 6e 20 ull.. function
4df0: 5f 6c 6f 67 45 72 72 20 28 65 72 72 2c 20 63 74 _logErr (err, ct
4e00: 78 29 20 7b 0a 0a 20 20 20 20 69 66 20 28 5f 74 x) {.. if (_t
4e10: 6d 70 6c 2e 65 72 72 6f 72 48 61 6e 64 6c 65 72 mpl.errorHandler
4e20: 29 20 7b 0a 0a 20 20 20 20 20 20 65 72 72 2e 72 ) {.. err.r
4e30: 69 6f 74 44 61 74 61 20 3d 20 7b 0a 20 20 20 20 iotData = {.
4e40: 20 20 20 20 74 61 67 4e 61 6d 65 3a 20 63 74 78 tagName: ctx
4e50: 20 26 26 20 63 74 78 2e 72 6f 6f 74 20 26 26 20 && ctx.root &&
4e60: 63 74 78 2e 72 6f 6f 74 2e 74 61 67 4e 61 6d 65 ctx.root.tagName
4e70: 2c 0a 20 20 20 20 20 20 20 20 5f 72 69 6f 74 5f ,. _riot_
4e80: 69 64 3a 20 63 74 78 20 26 26 20 63 74 78 2e 5f id: ctx && ctx._
4e90: 72 69 6f 74 5f 69 64 20 20 2f 2f 65 73 6c 69 6e riot_id //eslin
4ea0: 74 2d 64 69 73 61 62 6c 65 2d 6c 69 6e 65 20 63 t-disable-line c
4eb0: 61 6d 65 6c 63 61 73 65 0a 20 20 20 20 20 20 7d amelcase. }
4ec0: 0a 20 20 20 20 20 20 5f 74 6d 70 6c 2e 65 72 72 . _tmpl.err
4ed0: 6f 72 48 61 6e 64 6c 65 72 28 65 72 72 29 0a 20 orHandler(err).
4ee0: 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 66 75 6e 63 }. }.. func
4ef0: 74 69 6f 6e 20 5f 63 72 65 61 74 65 20 28 73 74 tion _create (st
4f00: 72 29 20 7b 0a 20 20 20 20 76 61 72 20 65 78 70 r) {. var exp
4f10: 72 20 3d 20 5f 67 65 74 54 6d 70 6c 28 73 74 72 r = _getTmpl(str
4f20: 29 0a 0a 20 20 20 20 69 66 20 28 65 78 70 72 2e ).. if (expr.
4f30: 73 6c 69 63 65 28 30 2c 20 31 31 29 20 21 3d 3d slice(0, 11) !==
4f40: 20 27 74 72 79 7b 72 65 74 75 72 6e 20 27 29 20 'try{return ')
4f50: 65 78 70 72 20 3d 20 27 72 65 74 75 72 6e 20 27 expr = 'return '
4f60: 20 2b 20 65 78 70 72 0a 0a 20 20 20 20 72 65 74 + expr.. ret
4f70: 75 72 6e 20 6e 65 77 20 46 75 6e 63 74 69 6f 6e urn new Function
4f80: 28 27 45 27 2c 20 65 78 70 72 20 2b 20 27 3b 27 ('E', expr + ';'
4f90: 29 20 20 20 20 2f 2f 20 65 73 6c 69 6e 74 2d 64 ) // eslint-d
4fa0: 69 73 61 62 6c 65 2d 6c 69 6e 65 20 6e 6f 2d 6e isable-line no-n
4fb0: 65 77 2d 66 75 6e 63 0a 20 20 7d 0a 0a 20 20 76 ew-func. }.. v
4fc0: 61 72 0a 20 20 20 20 43 48 5f 49 44 45 58 50 52 ar. CH_IDEXPR
4fd0: 20 3d 20 27 5c 75 32 30 35 37 27 2c 0a 20 20 20 = '\u2057',.
4fe0: 20 52 45 5f 43 53 4e 41 4d 45 20 3d 20 2f 5e 28 RE_CSNAME = /^(
4ff0: 3f 3a 28 2d 3f 5b 5f 41 2d 5a 61 2d 7a 5c 78 41 ?:(-?[_A-Za-z\xA
5000: 30 2d 5c 78 46 46 5d 5b 2d 5c 77 5c 78 41 30 2d 0-\xFF][-\w\xA0-
5010: 5c 78 46 46 5d 2a 29 7c 5c 75 32 30 35 37 28 5c \xFF]*)|\u2057(\
5020: 64 2b 29 7e 29 3a 2f 2c 0a 20 20 20 20 52 45 5f d+)~):/,. RE_
5030: 51 42 4c 4f 43 4b 20 3d 20 52 65 67 45 78 70 28 QBLOCK = RegExp(
5040: 62 72 61 63 6b 65 74 73 2e 53 5f 51 42 4c 4f 43 brackets.S_QBLOC
5050: 4b 53 2c 20 27 67 27 29 2c 0a 20 20 20 20 52 45 KS, 'g'),. RE
5060: 5f 44 51 55 4f 54 45 20 3d 20 2f 5c 75 32 30 35 _DQUOTE = /\u205
5070: 37 2f 67 2c 0a 20 20 20 20 52 45 5f 51 42 4d 41 7/g,. RE_QBMA
5080: 52 4b 20 3d 20 2f 5c 75 32 30 35 37 28 5c 64 2b RK = /\u2057(\d+
5090: 29 7e 2f 67 0a 0a 20 20 66 75 6e 63 74 69 6f 6e )~/g.. function
50a0: 20 5f 67 65 74 54 6d 70 6c 20 28 73 74 72 29 20 _getTmpl (str)
50b0: 7b 0a 20 20 20 20 76 61 72 0a 20 20 20 20 20 20 {. var.
50c0: 71 73 74 72 20 3d 20 5b 5d 2c 0a 20 20 20 20 20 qstr = [],.
50d0: 20 65 78 70 72 2c 0a 20 20 20 20 20 20 70 61 72 expr,. par
50e0: 74 73 20 3d 20 62 72 61 63 6b 65 74 73 2e 73 70 ts = brackets.sp
50f0: 6c 69 74 28 73 74 72 2e 72 65 70 6c 61 63 65 28 lit(str.replace(
5100: 52 45 5f 44 51 55 4f 54 45 2c 20 27 22 27 29 2c RE_DQUOTE, '"'),
5110: 20 31 29 0a 0a 20 20 20 20 69 66 20 28 70 61 72 1).. if (par
5120: 74 73 2e 6c 65 6e 67 74 68 20 3e 20 32 20 7c 7c ts.length > 2 ||
5130: 20 70 61 72 74 73 5b 30 5d 29 20 7b 0a 20 20 20 parts[0]) {.
5140: 20 20 20 76 61 72 20 69 2c 20 6a 2c 20 6c 69 73 var i, j, lis
5150: 74 20 3d 20 5b 5d 0a 0a 20 20 20 20 20 20 66 6f t = [].. fo
5160: 72 20 28 69 20 3d 20 6a 20 3d 20 30 3b 20 69 20 r (i = j = 0; i
5170: 3c 20 70 61 72 74 73 2e 6c 65 6e 67 74 68 3b 20 < parts.length;
5180: 2b 2b 69 29 20 7b 0a 0a 20 20 20 20 20 20 20 20 ++i) {..
5190: 65 78 70 72 20 3d 20 70 61 72 74 73 5b 69 5d 0a expr = parts[i].
51a0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 65 78 70 . if (exp
51b0: 72 20 26 26 20 28 65 78 70 72 20 3d 20 69 20 26 r && (expr = i &
51c0: 20 31 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 1..
51d0: 3f 20 5f 70 61 72 73 65 45 78 70 72 28 65 78 70 ? _parseExpr(exp
51e0: 72 2c 20 31 2c 20 71 73 74 72 29 0a 0a 20 20 20 r, 1, qstr)..
51f0: 20 20 20 20 20 20 20 20 20 3a 20 27 22 27 20 2b : '"' +
5200: 20 65 78 70 72 0a 20 20 20 20 20 20 20 20 20 20 expr.
5210: 20 20 20 20 20 20 2e 72 65 70 6c 61 63 65 28 2f .replace(/
5220: 5c 5c 2f 67 2c 20 27 5c 5c 5c 5c 27 29 0a 20 20 \\/g, '\\\\').
5230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 72 .r
5240: 65 70 6c 61 63 65 28 2f 5c 72 5c 6e 3f 7c 5c 6e eplace(/\r\n?|\n
5250: 2f 67 2c 20 27 5c 5c 6e 27 29 0a 20 20 20 20 20 /g, '\\n').
5260: 20 20 20 20 20 20 20 20 20 20 20 2e 72 65 70 6c .repl
5270: 61 63 65 28 2f 22 2f 67 2c 20 27 5c 5c 22 27 29 ace(/"/g, '\\"')
5280: 20 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 +.
5290: 20 27 22 27 0a 0a 20 20 20 20 20 20 20 20 20 20 '"'..
52a0: 29 29 20 6c 69 73 74 5b 6a 2b 2b 5d 20 3d 20 65 )) list[j++] = e
52b0: 78 70 72 0a 0a 20 20 20 20 20 20 7d 0a 0a 20 20 xpr.. }..
52c0: 20 20 20 20 65 78 70 72 20 3d 20 6a 20 3c 20 32 expr = j < 2
52d0: 20 3f 20 6c 69 73 74 5b 30 5d 0a 20 20 20 20 20 ? list[0].
52e0: 20 20 20 20 20 20 3a 20 27 5b 27 20 2b 20 6c 69 : '[' + li
52f0: 73 74 2e 6a 6f 69 6e 28 27 2c 27 29 20 2b 20 27 st.join(',') + '
5300: 5d 2e 6a 6f 69 6e 28 22 22 29 27 0a 0a 20 20 20 ].join("")'..
5310: 20 7d 20 65 6c 73 65 20 7b 0a 0a 20 20 20 20 20 } else {..
5320: 20 65 78 70 72 20 3d 20 5f 70 61 72 73 65 45 78 expr = _parseEx
5330: 70 72 28 70 61 72 74 73 5b 31 5d 2c 20 30 2c 20 pr(parts[1], 0,
5340: 71 73 74 72 29 0a 20 20 20 20 7d 0a 0a 20 20 20 qstr). }..
5350: 20 69 66 20 28 71 73 74 72 5b 30 5d 29 20 7b 0a if (qstr[0]) {.
5360: 20 20 20 20 20 20 65 78 70 72 20 3d 20 65 78 70 expr = exp
5370: 72 2e 72 65 70 6c 61 63 65 28 52 45 5f 51 42 4d r.replace(RE_QBM
5380: 41 52 4b 2c 20 66 75 6e 63 74 69 6f 6e 20 28 5f ARK, function (_
5390: 2c 20 70 6f 73 29 20 7b 0a 20 20 20 20 20 20 20 , pos) {.
53a0: 20 72 65 74 75 72 6e 20 71 73 74 72 5b 70 6f 73 return qstr[pos
53b0: 5d 0a 20 20 20 20 20 20 20 20 20 20 2e 72 65 70 ]. .rep
53c0: 6c 61 63 65 28 2f 5c 72 2f 67 2c 20 27 5c 5c 72 lace(/\r/g, '\\r
53d0: 27 29 0a 20 20 20 20 20 20 20 20 20 20 2e 72 65 '). .re
53e0: 70 6c 61 63 65 28 2f 5c 6e 2f 67 2c 20 27 5c 5c place(/\n/g, '\\
53f0: 6e 27 29 0a 20 20 20 20 20 20 7d 29 0a 20 20 20 n'). }).
5400: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 65 78 }. return ex
5410: 70 72 0a 20 20 7d 0a 0a 20 20 76 61 72 0a 20 20 pr. }.. var.
5420: 20 20 52 45 5f 42 52 45 4e 44 20 3d 20 7b 0a 20 RE_BREND = {.
5430: 20 20 20 20 20 27 28 27 3a 20 2f 5b 28 29 5d 2f '(': /[()]/
5440: 67 2c 0a 20 20 20 20 20 20 27 5b 27 3a 20 2f 5b g,. '[': /[
5450: 5b 5c 5d 5d 2f 67 2c 0a 20 20 20 20 20 20 27 7b [\]]/g,. '{
5460: 27 3a 20 2f 5b 7b 7d 5d 2f 67 0a 20 20 20 20 7d ': /[{}]/g. }
5470: 0a 0a 20 20 66 75 6e 63 74 69 6f 6e 20 5f 70 61 .. function _pa
5480: 72 73 65 45 78 70 72 20 28 65 78 70 72 2c 20 61 rseExpr (expr, a
5490: 73 54 65 78 74 2c 20 71 73 74 72 29 20 7b 0a 0a sText, qstr) {..
54a0: 20 20 20 20 65 78 70 72 20 3d 20 65 78 70 72 0a expr = expr.
54b0: 20 20 20 20 20 20 20 20 20 20 2e 72 65 70 6c 61 .repla
54c0: 63 65 28 52 45 5f 51 42 4c 4f 43 4b 2c 20 66 75 ce(RE_QBLOCK, fu
54d0: 6e 63 74 69 6f 6e 20 28 73 2c 20 64 69 76 29 20 nction (s, div)
54e0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 {. re
54f0: 74 75 72 6e 20 73 2e 6c 65 6e 67 74 68 20 3e 20 turn s.length >
5500: 32 20 26 26 20 21 64 69 76 20 3f 20 43 48 5f 49 2 && !div ? CH_I
5510: 44 45 58 50 52 20 2b 20 28 71 73 74 72 2e 70 75 DEXPR + (qstr.pu
5520: 73 68 28 73 29 20 2d 20 31 29 20 2b 20 27 7e 27 sh(s) - 1) + '~'
5530: 20 3a 20 73 0a 20 20 20 20 20 20 20 20 20 20 7d : s. }
5540: 29 0a 20 20 20 20 20 20 20 20 20 20 2e 72 65 70 ). .rep
5550: 6c 61 63 65 28 2f 5c 73 2b 2f 67 2c 20 27 20 27 lace(/\s+/g, ' '
5560: 29 2e 74 72 69 6d 28 29 0a 20 20 20 20 20 20 20 ).trim().
5570: 20 20 20 2e 72 65 70 6c 61 63 65 28 2f 5c 20 3f .replace(/\ ?
5580: 28 5b 5b 5c 28 7b 7d 2c 3f 5c 2e 3a 5d 29 5c 20 ([[\({},?\.:])\
5590: 3f 2f 67 2c 20 27 24 31 27 29 0a 0a 20 20 20 20 ?/g, '$1')..
55a0: 69 66 20 28 65 78 70 72 29 20 7b 0a 20 20 20 20 if (expr) {.
55b0: 20 20 76 61 72 0a 20 20 20 20 20 20 20 20 6c 69 var. li
55c0: 73 74 20 3d 20 5b 5d 2c 0a 20 20 20 20 20 20 20 st = [],.
55d0: 20 63 6e 74 20 3d 20 30 2c 0a 20 20 20 20 20 20 cnt = 0,.
55e0: 20 20 6d 61 74 63 68 0a 0a 20 20 20 20 20 20 77 match.. w
55f0: 68 69 6c 65 20 28 65 78 70 72 20 26 26 0a 20 20 hile (expr &&.
5600: 20 20 20 20 20 20 20 20 20 20 28 6d 61 74 63 68 (match
5610: 20 3d 20 65 78 70 72 2e 6d 61 74 63 68 28 52 45 = expr.match(RE
5620: 5f 43 53 4e 41 4d 45 29 29 20 26 26 0a 20 20 20 _CSNAME)) &&.
5630: 20 20 20 20 20 20 20 20 20 21 6d 61 74 63 68 2e !match.
5640: 69 6e 64 65 78 0a 20 20 20 20 20 20 20 20 29 20 index. )
5650: 7b 0a 20 20 20 20 20 20 20 20 76 61 72 0a 20 20 {. var.
5660: 20 20 20 20 20 20 20 20 6b 65 79 2c 0a 20 20 20 key,.
5670: 20 20 20 20 20 20 20 6a 73 62 2c 0a 20 20 20 20 jsb,.
5680: 20 20 20 20 20 20 72 65 20 3d 20 2f 2c 7c 28 5b re = /,|([
5690: 5b 7b 28 5d 29 7c 24 2f 67 0a 0a 20 20 20 20 20 [{(])|$/g..
56a0: 20 20 20 65 78 70 72 20 3d 20 52 65 67 45 78 70 expr = RegExp
56b0: 2e 72 69 67 68 74 43 6f 6e 74 65 78 74 0a 20 20 .rightContext.
56c0: 20 20 20 20 20 20 6b 65 79 20 20 3d 20 6d 61 74 key = mat
56d0: 63 68 5b 32 5d 20 3f 20 71 73 74 72 5b 6d 61 74 ch[2] ? qstr[mat
56e0: 63 68 5b 32 5d 5d 2e 73 6c 69 63 65 28 31 2c 20 ch[2]].slice(1,
56f0: 2d 31 29 2e 74 72 69 6d 28 29 2e 72 65 70 6c 61 -1).trim().repla
5700: 63 65 28 2f 5c 73 2b 2f 67 2c 20 27 20 27 29 20 ce(/\s+/g, ' ')
5710: 3a 20 6d 61 74 63 68 5b 31 5d 0a 0a 20 20 20 20 : match[1]..
5720: 20 20 20 20 77 68 69 6c 65 20 28 6a 73 62 20 3d while (jsb =
5730: 20 28 6d 61 74 63 68 20 3d 20 72 65 2e 65 78 65 (match = re.exe
5740: 63 28 65 78 70 72 29 29 5b 31 5d 29 20 73 6b 69 c(expr))[1]) ski
5750: 70 42 72 61 63 65 73 28 6a 73 62 2c 20 72 65 29 pBraces(jsb, re)
5760: 0a 0a 20 20 20 20 20 20 20 20 6a 73 62 20 20 3d .. jsb =
5770: 20 65 78 70 72 2e 73 6c 69 63 65 28 30 2c 20 6d expr.slice(0, m
5780: 61 74 63 68 2e 69 6e 64 65 78 29 0a 20 20 20 20 atch.index).
5790: 20 20 20 20 65 78 70 72 20 3d 20 52 65 67 45 78 expr = RegEx
57a0: 70 2e 72 69 67 68 74 43 6f 6e 74 65 78 74 0a 0a p.rightContext..
57b0: 20 20 20 20 20 20 20 20 6c 69 73 74 5b 63 6e 74 list[cnt
57c0: 2b 2b 5d 20 3d 20 5f 77 72 61 70 45 78 70 72 28 ++] = _wrapExpr(
57d0: 6a 73 62 2c 20 31 2c 20 6b 65 79 29 0a 20 20 20 jsb, 1, key).
57e0: 20 20 20 7d 0a 0a 20 20 20 20 20 20 65 78 70 72 }.. expr
57f0: 20 3d 20 21 63 6e 74 20 3f 20 5f 77 72 61 70 45 = !cnt ? _wrapE
5800: 78 70 72 28 65 78 70 72 2c 20 61 73 54 65 78 74 xpr(expr, asText
5810: 29 0a 20 20 20 20 20 20 20 20 20 20 20 3a 20 63 ). : c
5820: 6e 74 20 3e 20 31 20 3f 20 27 5b 27 20 2b 20 6c nt > 1 ? '[' + l
5830: 69 73 74 2e 6a 6f 69 6e 28 27 2c 27 29 20 2b 20 ist.join(',') +
5840: 27 5d 2e 6a 6f 69 6e 28 22 20 22 29 2e 74 72 69 '].join(" ").tri
5850: 6d 28 29 27 20 3a 20 6c 69 73 74 5b 30 5d 0a 20 m()' : list[0].
5860: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 }. return
5870: 65 78 70 72 0a 0a 20 20 20 20 66 75 6e 63 74 69 expr.. functi
5880: 6f 6e 20 73 6b 69 70 42 72 61 63 65 73 20 28 63 on skipBraces (c
5890: 68 2c 20 72 65 29 20 7b 0a 20 20 20 20 20 20 76 h, re) {. v
58a0: 61 72 0a 20 20 20 20 20 20 20 20 6d 6d 2c 0a 20 ar. mm,.
58b0: 20 20 20 20 20 20 20 6c 76 20 3d 20 31 2c 0a 20 lv = 1,.
58c0: 20 20 20 20 20 20 20 69 72 20 3d 20 52 45 5f 42 ir = RE_B
58d0: 52 45 4e 44 5b 63 68 5d 0a 0a 20 20 20 20 20 20 REND[ch]..
58e0: 69 72 2e 6c 61 73 74 49 6e 64 65 78 20 3d 20 72 ir.lastIndex = r
58f0: 65 2e 6c 61 73 74 49 6e 64 65 78 0a 20 20 20 20 e.lastIndex.
5900: 20 20 77 68 69 6c 65 20 28 6d 6d 20 3d 20 69 72 while (mm = ir
5910: 2e 65 78 65 63 28 65 78 70 72 29 29 20 7b 0a 20 .exec(expr)) {.
5920: 20 20 20 20 20 20 20 69 66 20 28 6d 6d 5b 30 5d if (mm[0]
5930: 20 3d 3d 3d 20 63 68 29 20 2b 2b 6c 76 0a 20 20 === ch) ++lv.
5940: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 21 else if (!
5950: 2d 2d 6c 76 29 20 62 72 65 61 6b 0a 20 20 20 20 --lv) break.
5960: 20 20 7d 0a 20 20 20 20 20 20 72 65 2e 6c 61 73 }. re.las
5970: 74 49 6e 64 65 78 20 3d 20 6c 76 20 3f 20 65 78 tIndex = lv ? ex
5980: 70 72 2e 6c 65 6e 67 74 68 20 3a 20 69 72 2e 6c pr.length : ir.l
5990: 61 73 74 49 6e 64 65 78 0a 20 20 20 20 7d 0a 20 astIndex. }.
59a0: 20 7d 0a 0a 20 20 2f 2f 20 69 73 74 61 6e 62 75 }.. // istanbu
59b0: 6c 20 69 67 6e 6f 72 65 20 6e 65 78 74 3a 20 6e l ignore next: n
59c0: 6f 74 20 62 6f 74 68 0a 20 20 76 61 72 20 2f 2f ot both. var //
59d0: 20 65 73 6c 69 6e 74 2d 64 69 73 61 62 6c 65 2d eslint-disable-
59e0: 6e 65 78 74 2d 6c 69 6e 65 20 6d 61 78 2d 6c 65 next-line max-le
59f0: 6e 0a 20 20 20 20 4a 53 5f 43 4f 4e 54 45 58 54 n. JS_CONTEXT
5a00: 20 3d 20 27 22 69 6e 20 74 68 69 73 3f 74 68 69 = '"in this?thi
5a10: 73 3a 27 20 2b 20 28 74 79 70 65 6f 66 20 77 69 s:' + (typeof wi
5a20: 6e 64 6f 77 20 21 3d 3d 20 27 6f 62 6a 65 63 74 ndow !== 'object
5a30: 27 20 3f 20 27 67 6c 6f 62 61 6c 27 20 3a 20 27 ' ? 'global' : '
5a40: 77 69 6e 64 6f 77 27 29 20 2b 20 27 29 2e 27 2c window') + ').',
5a50: 0a 20 20 20 20 4a 53 5f 56 41 52 4e 41 4d 45 20 . JS_VARNAME
5a60: 3d 20 2f 5b 2c 7b 5d 5b 24 5c 77 5d 2b 28 3f 3d = /[,{][$\w]+(?=
5a70: 3a 29 7c 28 5e 20 2a 7c 5b 5e 24 5c 77 5c 2e 5d :)|(^ *|[^$\w\.]
5a80: 29 28 3f 21 28 3f 3a 74 79 70 65 6f 66 7c 74 72 )(?!(?:typeof|tr
5a90: 75 65 7c 66 61 6c 73 65 7c 6e 75 6c 6c 7c 75 6e ue|false|null|un
5aa0: 64 65 66 69 6e 65 64 7c 69 6e 7c 69 6e 73 74 61 defined|in|insta
5ab0: 6e 63 65 6f 66 7c 69 73 28 3f 3a 46 69 6e 69 74 nceof|is(?:Finit
5ac0: 65 7c 4e 61 4e 29 7c 76 6f 69 64 7c 4e 61 4e 7c e|NaN)|void|NaN|
5ad0: 6e 65 77 7c 44 61 74 65 7c 52 65 67 45 78 70 7c new|Date|RegExp|
5ae0: 4d 61 74 68 29 28 3f 21 5b 24 5c 77 5d 29 29 28 Math)(?![$\w]))(
5af0: 5b 24 5f 41 2d 5a 61 2d 7a 5d 5b 24 5c 77 5d 2a [$_A-Za-z][$\w]*
5b00: 29 2f 67 2c 0a 20 20 20 20 4a 53 5f 4e 4f 50 52 )/g,. JS_NOPR
5b10: 4f 50 53 20 3d 20 2f 5e 28 3f 3d 28 5c 2e 5b 24 OPS = /^(?=(\.[$
5b20: 5c 77 5d 2b 29 29 5c 31 28 3f 3a 5b 5e 2e 5b 28 \w]+))\1(?:[^.[(
5b30: 5d 7c 24 29 2f 0a 0a 20 20 66 75 6e 63 74 69 6f ]|$)/.. functio
5b40: 6e 20 5f 77 72 61 70 45 78 70 72 20 28 65 78 70 n _wrapExpr (exp
5b50: 72 2c 20 61 73 54 65 78 74 2c 20 6b 65 79 29 20 r, asText, key)
5b60: 7b 0a 20 20 20 20 76 61 72 20 74 62 0a 0a 20 20 {. var tb..
5b70: 20 20 65 78 70 72 20 3d 20 65 78 70 72 2e 72 65 expr = expr.re
5b80: 70 6c 61 63 65 28 4a 53 5f 56 41 52 4e 41 4d 45 place(JS_VARNAME
5b90: 2c 20 66 75 6e 63 74 69 6f 6e 20 28 6d 61 74 63 , function (matc
5ba0: 68 2c 20 70 2c 20 6d 76 61 72 2c 20 70 6f 73 2c h, p, mvar, pos,
5bb0: 20 73 29 20 7b 0a 20 20 20 20 20 20 69 66 20 28 s) {. if (
5bc0: 6d 76 61 72 29 20 7b 0a 20 20 20 20 20 20 20 20 mvar) {.
5bd0: 70 6f 73 20 3d 20 74 62 20 3f 20 30 20 3a 20 70 pos = tb ? 0 : p
5be0: 6f 73 20 2b 20 6d 61 74 63 68 2e 6c 65 6e 67 74 os + match.lengt
5bf0: 68 0a 0a 20 20 20 20 20 20 20 20 69 66 20 28 6d h.. if (m
5c00: 76 61 72 20 21 3d 3d 20 27 74 68 69 73 27 20 26 var !== 'this' &
5c10: 26 20 6d 76 61 72 20 21 3d 3d 20 27 67 6c 6f 62 & mvar !== 'glob
5c20: 61 6c 27 20 26 26 20 6d 76 61 72 20 21 3d 3d 20 al' && mvar !==
5c30: 27 77 69 6e 64 6f 77 27 29 20 7b 0a 20 20 20 20 'window') {.
5c40: 20 20 20 20 20 20 6d 61 74 63 68 20 3d 20 70 20 match = p
5c50: 2b 20 27 28 22 27 20 2b 20 6d 76 61 72 20 2b 20 + '("' + mvar +
5c60: 4a 53 5f 43 4f 4e 54 45 58 54 20 2b 20 6d 76 61 JS_CONTEXT + mva
5c70: 72 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 r. if (
5c80: 70 6f 73 29 20 74 62 20 3d 20 28 73 20 3d 20 73 pos) tb = (s = s
5c90: 5b 70 6f 73 5d 29 20 3d 3d 3d 20 27 2e 27 20 7c [pos]) === '.' |
5ca0: 7c 20 73 20 3d 3d 3d 20 27 28 27 20 7c 7c 20 73 | s === '(' || s
5cb0: 20 3d 3d 3d 20 27 5b 27 0a 20 20 20 20 20 20 20 === '['.
5cc0: 20 7d 20 65 6c 73 65 20 69 66 20 28 70 6f 73 29 } else if (pos)
5cd0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 74 62 20 {. tb
5ce0: 3d 20 21 4a 53 5f 4e 4f 50 52 4f 50 53 2e 74 65 = !JS_NOPROPS.te
5cf0: 73 74 28 73 2e 73 6c 69 63 65 28 70 6f 73 29 29 st(s.slice(pos))
5d00: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 . }.
5d10: 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 }. return
5d20: 6d 61 74 63 68 0a 20 20 20 20 7d 29 0a 0a 20 20 match. })..
5d30: 20 20 69 66 20 28 74 62 29 20 7b 0a 20 20 20 20 if (tb) {.
5d40: 20 20 65 78 70 72 20 3d 20 27 74 72 79 7b 72 65 expr = 'try{re
5d50: 74 75 72 6e 20 27 20 2b 20 65 78 70 72 20 2b 20 turn ' + expr +
5d60: 27 7d 63 61 74 63 68 28 65 29 7b 45 28 65 2c 74 '}catch(e){E(e,t
5d70: 68 69 73 29 7d 27 0a 20 20 20 20 7d 0a 0a 20 20 his)}'. }..
5d80: 20 20 69 66 20 28 6b 65 79 29 20 7b 0a 0a 20 20 if (key) {..
5d90: 20 20 20 20 65 78 70 72 20 3d 20 28 74 62 0a 20 expr = (tb.
5da0: 20 20 20 20 20 20 20 20 20 3f 20 27 66 75 6e 63 ? 'func
5db0: 74 69 6f 6e 28 29 7b 27 20 2b 20 65 78 70 72 20 tion(){' + expr
5dc0: 2b 20 27 7d 2e 63 61 6c 6c 28 74 68 69 73 29 27 + '}.call(this)'
5dd0: 20 3a 20 27 28 27 20 2b 20 65 78 70 72 20 2b 20 : '(' + expr +
5de0: 27 29 27 0a 20 20 20 20 20 20 20 20 29 20 2b 20 ')'. ) +
5df0: 27 3f 22 27 20 2b 20 6b 65 79 20 2b 20 27 22 3a '?"' + key + '":
5e00: 22 22 27 0a 0a 20 20 20 20 7d 20 65 6c 73 65 20 ""'.. } else
5e10: 69 66 20 28 61 73 54 65 78 74 29 20 7b 0a 0a 20 if (asText) {..
5e20: 20 20 20 20 20 65 78 70 72 20 3d 20 27 66 75 6e expr = 'fun
5e30: 63 74 69 6f 6e 28 76 29 7b 27 20 2b 20 28 74 62 ction(v){' + (tb
5e40: 0a 20 20 20 20 20 20 20 20 20 20 3f 20 65 78 70 . ? exp
5e50: 72 2e 72 65 70 6c 61 63 65 28 27 72 65 74 75 72 r.replace('retur
5e60: 6e 20 27 2c 20 27 76 3d 27 29 20 3a 20 27 76 3d n ', 'v=') : 'v=
5e70: 28 27 20 2b 20 65 78 70 72 20 2b 20 27 29 27 0a (' + expr + ')'.
5e80: 20 20 20 20 20 20 20 20 29 20 2b 20 27 3b 72 65 ) + ';re
5e90: 74 75 72 6e 20 76 7c 7c 76 3d 3d 3d 30 3f 76 3a turn v||v===0?v:
5ea0: 22 22 7d 2e 63 61 6c 6c 28 74 68 69 73 29 27 0a ""}.call(this)'.
5eb0: 20 20 20 20 7d 0a 0a 20 20 20 20 72 65 74 75 72 }.. retur
5ec0: 6e 20 65 78 70 72 0a 20 20 7d 0a 0a 20 20 5f 74 n expr. }.. _t
5ed0: 6d 70 6c 2e 76 65 72 73 69 6f 6e 20 3d 20 62 72 mpl.version = br
5ee0: 61 63 6b 65 74 73 2e 76 65 72 73 69 6f 6e 20 3d ackets.version =
5ef0: 20 27 76 32 2e 34 2e 31 27 0a 0a 20 20 72 65 74 'v2.4.1'.. ret
5f00: 75 72 6e 20 5f 74 6d 70 6c 0a 0a 7d 29 28 29 0a urn _tmpl..})().
5f10: 0a 2f 2a 0a 20 20 6c 69 62 2f 62 72 6f 77 73 65 ./*. lib/browse
5f20: 72 2f 74 61 67 2f 6d 6b 64 6f 6d 2e 6a 73 0a 0a r/tag/mkdom.js..
5f30: 20 20 49 6e 63 6c 75 64 65 73 20 68 61 63 6b 73 Includes hacks
5f40: 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65 20 needed for the
5f50: 49 6e 74 65 72 6e 65 74 20 45 78 70 6c 6f 72 65 Internet Explore
5f60: 72 20 76 65 72 73 69 6f 6e 20 39 20 61 6e 64 20 r version 9 and
5f70: 62 65 6c 6f 77 0a 20 20 53 65 65 3a 20 68 74 74 below. See: htt
5f80: 70 3a 2f 2f 6b 61 6e 67 61 78 2e 67 69 74 68 75 p://kangax.githu
5f90: 62 2e 69 6f 2f 63 6f 6d 70 61 74 2d 74 61 62 6c b.io/compat-tabl
5fa0: 65 2f 65 73 35 2f 23 69 65 38 0a 20 20 20 20 20 e/es5/#ie8.
5fb0: 20 20 68 74 74 70 3a 2f 2f 63 6f 64 65 70 6c 61 http://codepla
5fc0: 6e 65 74 2e 69 6f 2f 64 72 6f 70 70 69 6e 67 2d net.io/dropping-
5fd0: 69 65 38 2f 0a 2a 2f 0a 76 61 72 20 6d 6b 64 6f ie8/.*/.var mkdo
5fe0: 6d 20 3d 20 28 66 75 6e 63 74 69 6f 6e 20 5f 6d m = (function _m
5ff0: 6b 64 6f 6d 28 29 20 7b 0a 20 20 76 61 72 0a 20 kdom() {. var.
6000: 20 20 20 72 65 48 61 73 59 69 65 6c 64 20 20 3d reHasYield =
6010: 20 2f 3c 79 69 65 6c 64 5c 62 2f 69 2c 0a 20 20 /<yield\b/i,.
6020: 20 20 72 65 59 69 65 6c 64 41 6c 6c 20 20 3d 20 reYieldAll =
6030: 2f 3c 79 69 65 6c 64 5c 73 2a 28 3f 3a 5c 2f 3e /<yield\s*(?:\/>
6040: 7c 3e 28 5b 5c 53 5c 73 5d 2a 3f 29 3c 5c 2f 79 |>([\S\s]*?)<\/y
6050: 69 65 6c 64 5c 73 2a 3e 7c 3e 29 2f 69 67 2c 0a ield\s*>|>)/ig,.
6060: 20 20 20 20 72 65 59 69 65 6c 64 53 72 63 20 20 reYieldSrc
6070: 3d 20 2f 3c 79 69 65 6c 64 5c 73 2b 74 6f 3d 5b = /<yield\s+to=[
6080: 27 22 5d 28 5b 5e 27 22 3e 5d 2a 29 5b 27 22 5d '"]([^'">]*)['"]
6090: 5c 73 2a 3e 28 5b 5c 53 5c 73 5d 2a 3f 29 3c 5c \s*>([\S\s]*?)<\
60a0: 2f 79 69 65 6c 64 5c 73 2a 3e 2f 69 67 2c 0a 20 /yield\s*>/ig,.
60b0: 20 20 20 72 65 59 69 65 6c 64 44 65 73 74 20 3d reYieldDest =
60c0: 20 2f 3c 79 69 65 6c 64 5c 73 2b 66 72 6f 6d 3d /<yield\s+from=
60d0: 5b 27 22 5d 3f 28 5b 2d 5c 77 5d 2b 29 5b 27 22 ['"]?([-\w]+)['"
60e0: 5d 3f 5c 73 2a 28 3f 3a 5c 2f 3e 7c 3e 28 5b 5c ]?\s*(?:\/>|>([\
60f0: 53 5c 73 5d 2a 3f 29 3c 5c 2f 79 69 65 6c 64 5c S\s]*?)<\/yield\
6100: 73 2a 3e 29 2f 69 67 0a 20 20 76 61 72 0a 20 20 s*>)/ig. var.
6110: 20 20 72 6f 6f 74 45 6c 73 20 3d 20 7b 20 74 72 rootEls = { tr
6120: 3a 20 27 74 62 6f 64 79 27 2c 20 74 68 3a 20 27 : 'tbody', th: '
6130: 74 72 27 2c 20 74 64 3a 20 27 74 72 27 2c 20 63 tr', td: 'tr', c
6140: 6f 6c 3a 20 27 63 6f 6c 67 72 6f 75 70 27 20 7d ol: 'colgroup' }
6150: 2c 0a 20 20 20 20 74 62 6c 54 61 67 73 20 3d 20 ,. tblTags =
6160: 49 45 5f 56 45 52 53 49 4f 4e 20 26 26 20 49 45 IE_VERSION && IE
6170: 5f 56 45 52 53 49 4f 4e 20 3c 20 31 30 0a 20 20 _VERSION < 10.
6180: 20 20 20 20 3f 20 53 50 45 43 49 41 4c 5f 54 41 ? SPECIAL_TA
6190: 47 53 5f 52 45 47 45 58 20 3a 20 2f 5e 28 3f 3a GS_REGEX : /^(?:
61a0: 74 28 3f 3a 62 6f 64 79 7c 68 65 61 64 7c 66 6f t(?:body|head|fo
61b0: 6f 74 7c 5b 72 68 64 5d 29 7c 63 61 70 74 69 6f ot|[rhd])|captio
61c0: 6e 7c 63 6f 6c 28 3f 3a 67 72 6f 75 70 29 3f 29 n|col(?:group)?)
61d0: 24 2f 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 43 $/.. /**. * C
61e0: 72 65 61 74 65 73 20 61 20 44 4f 4d 20 65 6c 65 reates a DOM ele
61f0: 6d 65 6e 74 20 74 6f 20 77 72 61 70 20 74 68 65 ment to wrap the
6200: 20 67 69 76 65 6e 20 63 6f 6e 74 65 6e 74 2e 20 given content.
6210: 4e 6f 72 6d 61 6c 6c 79 20 61 6e 20 60 44 49 56 Normally an `DIV
6220: 60 2c 20 62 75 74 20 63 61 6e 20 62 65 0a 20 20 `, but can be.
6230: 20 2a 20 61 6c 73 6f 20 61 20 60 54 41 42 4c 45 * also a `TABLE
6240: 60 2c 20 60 53 45 4c 45 43 54 60 2c 20 60 54 42 `, `SELECT`, `TB
6250: 4f 44 59 60 2c 20 60 54 52 60 2c 20 6f 72 20 60 ODY`, `TR`, or `
6260: 43 4f 4c 47 52 4f 55 50 60 20 65 6c 65 6d 65 6e COLGROUP` elemen
6270: 74 2e 0a 20 20 20 2a 0a 20 20 20 2a 20 40 70 61 t.. *. * @pa
6280: 72 61 6d 20 20 20 7b 73 74 72 69 6e 67 7d 20 74 ram {string} t
6290: 65 6d 70 6c 20 20 2d 20 54 68 65 20 74 65 6d 70 empl - The temp
62a0: 6c 61 74 65 20 63 6f 6d 69 6e 67 20 66 72 6f 6d late coming from
62b0: 20 74 68 65 20 63 75 73 74 6f 6d 20 74 61 67 20 the custom tag
62c0: 64 65 66 69 6e 69 74 69 6f 6e 0a 20 20 20 2a 20 definition. *
62d0: 40 70 61 72 61 6d 20 20 20 7b 73 74 72 69 6e 67 @param {string
62e0: 7d 20 5b 68 74 6d 6c 5d 20 2d 20 48 54 4d 4c 20 } [html] - HTML
62f0: 63 6f 6e 74 65 6e 74 20 74 68 61 74 20 63 6f 6d content that com
6300: 65 73 20 66 72 6f 6d 20 74 68 65 20 44 4f 4d 20 es from the DOM
6310: 65 6c 65 6d 65 6e 74 20 77 68 65 72 65 20 79 6f element where yo
6320: 75 0a 20 20 20 2a 20 20 20 20 20 20 20 20 20 20 u. *
6330: 20 77 69 6c 6c 20 6d 6f 75 6e 74 20 74 68 65 20 will mount the
6340: 74 61 67 2c 20 6d 6f 73 74 6c 79 20 74 68 65 20 tag, mostly the
6350: 6f 72 69 67 69 6e 61 6c 20 74 61 67 20 69 6e 20 original tag in
6360: 74 68 65 20 70 61 67 65 0a 20 20 20 2a 20 40 72 the page. * @r
6370: 65 74 75 72 6e 73 20 7b 48 54 4d 4c 45 6c 65 6d eturns {HTMLElem
6380: 65 6e 74 7d 20 44 4f 4d 20 65 6c 65 6d 65 6e 74 ent} DOM element
6390: 20 77 69 74 68 20 5f 74 65 6d 70 6c 5f 20 6d 65 with _templ_ me
63a0: 72 67 65 64 20 74 68 72 6f 75 67 68 20 60 59 49 rged through `YI
63b0: 45 4c 44 60 20 77 69 74 68 20 74 68 65 20 5f 68 ELD` with the _h
63c0: 74 6d 6c 5f 2e 0a 20 20 20 2a 2f 0a 20 20 66 75 tml_.. */. fu
63d0: 6e 63 74 69 6f 6e 20 5f 6d 6b 64 6f 6d 28 74 65 nction _mkdom(te
63e0: 6d 70 6c 2c 20 68 74 6d 6c 29 20 7b 0a 20 20 20 mpl, html) {.
63f0: 20 76 61 72 0a 20 20 20 20 20 20 6d 61 74 63 68 var. match
6400: 20 20 20 3d 20 74 65 6d 70 6c 20 26 26 20 74 65 = templ && te
6410: 6d 70 6c 2e 6d 61 74 63 68 28 2f 5e 5c 73 2a 3c mpl.match(/^\s*<
6420: 28 5b 2d 5c 77 5d 2b 29 2f 29 2c 0a 20 20 20 20 ([-\w]+)/),.
6430: 20 20 74 61 67 4e 61 6d 65 20 3d 20 6d 61 74 63 tagName = matc
6440: 68 20 26 26 20 6d 61 74 63 68 5b 31 5d 2e 74 6f h && match[1].to
6450: 4c 6f 77 65 72 43 61 73 65 28 29 2c 0a 20 20 20 LowerCase(),.
6460: 20 20 20 65 6c 20 3d 20 6d 6b 45 6c 28 27 64 69 el = mkEl('di
6470: 76 27 2c 20 69 73 53 56 47 54 61 67 28 74 61 67 v', isSVGTag(tag
6480: 4e 61 6d 65 29 29 0a 0a 20 20 20 20 2f 2f 20 72 Name)).. // r
6490: 65 70 6c 61 63 65 20 61 6c 6c 20 74 68 65 20 79 eplace all the y
64a0: 69 65 6c 64 20 74 61 67 73 20 77 69 74 68 20 74 ield tags with t
64b0: 68 65 20 74 61 67 20 69 6e 6e 65 72 20 68 74 6d he tag inner htm
64c0: 6c 0a 20 20 20 20 74 65 6d 70 6c 20 3d 20 72 65 l. templ = re
64d0: 70 6c 61 63 65 59 69 65 6c 64 28 74 65 6d 70 6c placeYield(templ
64e0: 2c 20 68 74 6d 6c 29 0a 0a 20 20 20 20 2f 2a 20 , html).. /*
64f0: 69 73 74 61 6e 62 75 6c 20 69 67 6e 6f 72 65 20 istanbul ignore
6500: 6e 65 78 74 20 2a 2f 0a 20 20 20 20 69 66 20 28 next */. if (
6510: 74 62 6c 54 61 67 73 2e 74 65 73 74 28 74 61 67 tblTags.test(tag
6520: 4e 61 6d 65 29 29 0a 20 20 20 20 20 20 65 6c 20 Name)). el
6530: 3d 20 73 70 65 63 69 61 6c 54 61 67 73 28 65 6c = specialTags(el
6540: 2c 20 74 65 6d 70 6c 2c 20 74 61 67 4e 61 6d 65 , templ, tagName
6550: 29 0a 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20 ). else.
6560: 20 73 65 74 49 6e 6e 65 72 48 54 4d 4c 28 65 6c setInnerHTML(el
6570: 2c 20 74 65 6d 70 6c 29 0a 0a 20 20 20 20 65 6c , templ).. el
6580: 2e 73 74 75 62 20 3d 20 74 72 75 65 0a 0a 20 20 .stub = true..
6590: 20 20 72 65 74 75 72 6e 20 65 6c 0a 20 20 7d 0a return el. }.
65a0: 0a 20 20 2f 2a 0a 20 20 20 20 43 72 65 61 74 65 . /*. Create
65b0: 73 20 74 68 65 20 72 6f 6f 74 20 65 6c 65 6d 65 s the root eleme
65c0: 6e 74 20 66 6f 72 20 74 61 62 6c 65 20 6f 72 20 nt for table or
65d0: 73 65 6c 65 63 74 20 63 68 69 6c 64 20 65 6c 65 select child ele
65e0: 6d 65 6e 74 73 3a 0a 20 20 20 20 74 72 2f 74 68 ments:. tr/th
65f0: 2f 74 64 2f 74 68 65 61 64 2f 74 66 6f 6f 74 2f /td/thead/tfoot/
6600: 74 62 6f 64 79 2f 63 61 70 74 69 6f 6e 2f 63 6f tbody/caption/co
6610: 6c 2f 63 6f 6c 67 72 6f 75 70 2f 6f 70 74 69 6f l/colgroup/optio
6620: 6e 2f 6f 70 74 67 72 6f 75 70 0a 20 20 2a 2f 0a n/optgroup. */.
6630: 20 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 function speci
6640: 61 6c 54 61 67 73 28 65 6c 2c 20 74 65 6d 70 6c alTags(el, templ
6650: 2c 20 74 61 67 4e 61 6d 65 29 20 7b 0a 20 20 20 , tagName) {.
6660: 20 76 61 72 0a 20 20 20 20 20 20 73 65 6c 65 63 var. selec
6670: 74 20 3d 20 74 61 67 4e 61 6d 65 5b 30 5d 20 3d t = tagName[0] =
6680: 3d 3d 20 27 6f 27 2c 0a 20 20 20 20 20 20 70 61 == 'o',. pa
6690: 72 65 6e 74 20 3d 20 73 65 6c 65 63 74 20 3f 20 rent = select ?
66a0: 27 73 65 6c 65 63 74 3e 27 20 3a 20 27 74 61 62 'select>' : 'tab
66b0: 6c 65 3e 27 0a 0a 20 20 20 20 2f 2f 20 74 72 69 le>'.. // tri
66c0: 6d 28 29 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 m() is important
66d0: 20 68 65 72 65 2c 20 74 68 69 73 20 65 6e 73 75 here, this ensu
66e0: 72 65 73 20 77 65 20 64 6f 6e 27 74 20 68 61 76 res we don't hav
66f0: 65 20 61 72 74 69 66 61 63 74 73 2c 0a 20 20 20 e artifacts,.
6700: 20 2f 2f 20 73 6f 20 77 65 20 63 61 6e 20 63 68 // so we can ch
6710: 65 63 6b 20 69 66 20 77 65 20 68 61 76 65 20 6f eck if we have o
6720: 6e 6c 79 20 6f 6e 65 20 65 6c 65 6d 65 6e 74 20 nly one element
6730: 69 6e 73 69 64 65 20 74 68 65 20 70 61 72 65 6e inside the paren
6740: 74 0a 20 20 20 20 65 6c 2e 69 6e 6e 65 72 48 54 t. el.innerHT
6750: 4d 4c 20 3d 20 27 3c 27 20 2b 20 70 61 72 65 6e ML = '<' + paren
6760: 74 20 2b 20 74 65 6d 70 6c 2e 74 72 69 6d 28 29 t + templ.trim()
6770: 20 2b 20 27 3c 2f 27 20 2b 20 70 61 72 65 6e 74 + '</' + parent
6780: 0a 20 20 20 20 70 61 72 65 6e 74 20 3d 20 65 6c . parent = el
6790: 2e 66 69 72 73 74 43 68 69 6c 64 0a 0a 20 20 20 .firstChild..
67a0: 20 2f 2f 20 72 65 74 75 72 6e 73 20 74 68 65 20 // returns the
67b0: 69 6d 6d 65 64 69 61 74 65 20 70 61 72 65 6e 74 immediate parent
67c0: 20 69 66 20 74 72 2f 74 68 2f 74 64 2f 63 6f 6c if tr/th/td/col
67d0: 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 65 6c 65 is the only ele
67e0: 6d 65 6e 74 2c 20 69 66 20 6e 6f 74 0a 20 20 20 ment, if not.
67f0: 20 2f 2f 20 72 65 74 75 72 6e 73 20 74 68 65 20 // returns the
6800: 77 68 6f 6c 65 20 74 72 65 65 2c 20 61 73 20 74 whole tree, as t
6810: 68 69 73 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 his can include
6820: 61 64 64 69 74 69 6f 6e 61 6c 20 65 6c 65 6d 65 additional eleme
6830: 6e 74 73 0a 20 20 20 20 69 66 20 28 73 65 6c 65 nts. if (sele
6840: 63 74 29 20 7b 0a 20 20 20 20 20 20 70 61 72 65 ct) {. pare
6850: 6e 74 2e 73 65 6c 65 63 74 65 64 49 6e 64 65 78 nt.selectedIndex
6860: 20 3d 20 2d 31 20 20 2f 2f 20 66 6f 72 20 49 45 = -1 // for IE
6870: 39 2c 20 63 6f 6d 70 61 74 69 62 6c 65 20 77 2f 9, compatible w/
6880: 63 75 72 72 65 6e 74 20 72 69 6f 74 20 62 65 68 current riot beh
6890: 61 76 69 6f 72 0a 20 20 20 20 7d 20 65 6c 73 65 avior. } else
68a0: 20 7b 0a 20 20 20 20 20 20 2f 2f 20 61 76 6f 69 {. // avoi
68b0: 64 73 20 69 6e 73 65 72 74 69 6f 6e 20 6f 66 20 ds insertion of
68c0: 63 6f 69 6e 74 61 69 6e 65 72 20 69 6e 73 69 64 cointainer insid
68d0: 65 20 63 6f 6e 74 61 69 6e 65 72 20 28 65 78 3a e container (ex:
68e0: 20 74 62 6f 64 79 20 69 6e 73 69 64 65 20 74 62 tbody inside tb
68f0: 6f 64 79 29 0a 20 20 20 20 20 20 76 61 72 20 74 ody). var t
6900: 6e 61 6d 65 20 3d 20 72 6f 6f 74 45 6c 73 5b 74 name = rootEls[t
6910: 61 67 4e 61 6d 65 5d 0a 20 20 20 20 20 20 69 66 agName]. if
6920: 20 28 74 6e 61 6d 65 20 26 26 20 70 61 72 65 6e (tname && paren
6930: 74 2e 63 68 69 6c 64 45 6c 65 6d 65 6e 74 43 6f t.childElementCo
6940: 75 6e 74 20 3d 3d 3d 20 31 29 20 70 61 72 65 6e unt === 1) paren
6950: 74 20 3d 20 24 28 74 6e 61 6d 65 2c 20 70 61 72 t = $(tname, par
6960: 65 6e 74 29 0a 20 20 20 20 7d 0a 20 20 20 20 72 ent). }. r
6970: 65 74 75 72 6e 20 70 61 72 65 6e 74 0a 20 20 7d eturn parent. }
6980: 0a 0a 20 20 2f 2a 0a 20 20 20 20 52 65 70 6c 61 .. /*. Repla
6990: 63 65 20 74 68 65 20 79 69 65 6c 64 20 74 61 67 ce the yield tag
69a0: 20 66 72 6f 6d 20 61 6e 79 20 74 61 67 20 74 65 from any tag te
69b0: 6d 70 6c 61 74 65 20 77 69 74 68 20 74 68 65 20 mplate with the
69c0: 69 6e 6e 65 72 48 54 4d 4c 20 6f 66 20 74 68 65 innerHTML of the
69d0: 0a 20 20 20 20 6f 72 69 67 69 6e 61 6c 20 74 61 . original ta
69e0: 67 20 69 6e 20 74 68 65 20 70 61 67 65 0a 20 20 g in the page.
69f0: 2a 2f 0a 20 20 66 75 6e 63 74 69 6f 6e 20 72 65 */. function re
6a00: 70 6c 61 63 65 59 69 65 6c 64 28 74 65 6d 70 6c placeYield(templ
6a10: 2c 20 68 74 6d 6c 29 20 7b 0a 20 20 20 20 2f 2f , html) {. //
6a20: 20 64 6f 20 6e 6f 74 68 69 6e 67 20 69 66 20 6e do nothing if n
6a30: 6f 20 79 69 65 6c 64 0a 20 20 20 20 69 66 20 28 o yield. if (
6a40: 21 72 65 48 61 73 59 69 65 6c 64 2e 74 65 73 74 !reHasYield.test
6a50: 28 74 65 6d 70 6c 29 29 20 72 65 74 75 72 6e 20 (templ)) return
6a60: 74 65 6d 70 6c 0a 0a 20 20 20 20 2f 2f 20 62 65 templ.. // be
6a70: 20 63 61 72 65 66 75 6c 20 77 69 74 68 20 23 31 careful with #1
6a80: 33 34 33 20 2d 20 73 74 72 69 6e 67 20 6f 6e 20 343 - string on
6a90: 74 68 65 20 73 6f 75 72 63 65 20 68 61 76 69 6e the source havin
6aa0: 67 20 60 24 31 60 0a 20 20 20 20 76 61 72 20 73 g `$1`. var s
6ab0: 72 63 20 3d 20 7b 7d 0a 0a 20 20 20 20 68 74 6d rc = {}.. htm
6ac0: 6c 20 3d 20 68 74 6d 6c 20 26 26 20 68 74 6d 6c l = html && html
6ad0: 2e 72 65 70 6c 61 63 65 28 72 65 59 69 65 6c 64 .replace(reYield
6ae0: 53 72 63 2c 20 66 75 6e 63 74 69 6f 6e 20 28 5f Src, function (_
6af0: 2c 20 72 65 66 2c 20 74 65 78 74 29 20 7b 0a 20 , ref, text) {.
6b00: 20 20 20 20 20 73 72 63 5b 72 65 66 5d 20 3d 20 src[ref] =
6b10: 73 72 63 5b 72 65 66 5d 20 7c 7c 20 74 65 78 74 src[ref] || text
6b20: 20 20 20 2f 2f 20 70 72 65 73 65 72 76 65 20 66 // preserve f
6b30: 69 72 73 74 20 64 65 66 69 6e 69 74 69 6f 6e 0a irst definition.
6b40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 27 27 0a return ''.
6b50: 20 20 20 20 7d 29 2e 74 72 69 6d 28 29 0a 0a 20 }).trim()..
6b60: 20 20 20 72 65 74 75 72 6e 20 74 65 6d 70 6c 0a return templ.
6b70: 20 20 20 20 20 20 2e 72 65 70 6c 61 63 65 28 72 .replace(r
6b80: 65 59 69 65 6c 64 44 65 73 74 2c 20 66 75 6e 63 eYieldDest, func
6b90: 74 69 6f 6e 20 28 5f 2c 20 72 65 66 2c 20 64 65 tion (_, ref, de
6ba0: 66 29 20 7b 20 20 2f 2f 20 79 69 65 6c 64 20 77 f) { // yield w
6bb0: 69 74 68 20 66 72 6f 6d 20 2d 20 74 6f 20 61 74 ith from - to at
6bc0: 74 72 73 0a 20 20 20 20 20 20 20 20 72 65 74 75 trs. retu
6bd0: 72 6e 20 73 72 63 5b 72 65 66 5d 20 7c 7c 20 64 rn src[ref] || d
6be0: 65 66 20 7c 7c 20 27 27 0a 20 20 20 20 20 20 7d ef || ''. }
6bf0: 29 0a 20 20 20 20 20 20 2e 72 65 70 6c 61 63 65 ). .replace
6c00: 28 72 65 59 69 65 6c 64 41 6c 6c 2c 20 66 75 6e (reYieldAll, fun
6c10: 63 74 69 6f 6e 20 28 5f 2c 20 64 65 66 29 20 7b ction (_, def) {
6c20: 20 20 20 20 20 20 20 20 2f 2f 20 79 69 65 6c 64 // yield
6c30: 20 77 69 74 68 6f 75 74 20 61 6e 79 20 22 66 72 without any "fr
6c40: 6f 6d 22 0a 20 20 20 20 20 20 20 20 72 65 74 75 om". retu
6c50: 72 6e 20 68 74 6d 6c 20 7c 7c 20 64 65 66 20 7c rn html || def |
6c60: 7c 20 27 27 0a 20 20 20 20 20 20 7d 29 0a 20 20 | ''. }).
6c70: 7d 0a 0a 20 20 72 65 74 75 72 6e 20 5f 6d 6b 64 }.. return _mkd
6c80: 6f 6d 0a 0a 7d 29 28 29 0a 0a 2f 2a 2a 0a 20 2a om..})()../**. *
6c90: 20 43 6f 6e 76 65 72 74 20 74 68 65 20 69 74 65 Convert the ite
6ca0: 6d 20 6c 6f 6f 70 65 64 20 69 6e 74 6f 20 61 6e m looped into an
6cb0: 20 6f 62 6a 65 63 74 20 75 73 65 64 20 74 6f 20 object used to
6cc0: 65 78 74 65 6e 64 20 74 68 65 20 63 68 69 6c 64 extend the child
6cd0: 20 74 61 67 20 70 72 6f 70 65 72 74 69 65 73 0a tag properties.
6ce0: 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 4f 62 * @param { Ob
6cf0: 6a 65 63 74 20 7d 20 65 78 70 72 20 2d 20 6f 62 ject } expr - ob
6d00: 6a 65 63 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 ject containing
6d10: 74 68 65 20 6b 65 79 73 20 75 73 65 64 20 74 6f the keys used to
6d20: 20 65 78 74 65 6e 64 20 74 68 65 20 63 68 69 6c extend the chil
6d30: 64 72 65 6e 20 74 61 67 73 0a 20 2a 20 40 70 61 dren tags. * @pa
6d40: 72 61 6d 20 20 20 7b 20 2a 20 7d 20 6b 65 79 20 ram { * } key
6d50: 2d 20 76 61 6c 75 65 20 74 6f 20 61 73 73 69 67 - value to assig
6d60: 6e 20 74 6f 20 74 68 65 20 6e 65 77 20 6f 62 6a n to the new obj
6d70: 65 63 74 20 72 65 74 75 72 6e 65 64 0a 20 2a 20 ect returned. *
6d80: 40 70 61 72 61 6d 20 20 20 7b 20 2a 20 7d 20 76 @param { * } v
6d90: 61 6c 20 2d 20 76 61 6c 75 65 20 63 6f 6e 74 61 al - value conta
6da0: 69 6e 69 6e 67 20 74 68 65 20 70 6f 73 69 74 69 ining the positi
6db0: 6f 6e 20 6f 66 20 74 68 65 20 69 74 65 6d 20 69 on of the item i
6dc0: 6e 20 74 68 65 20 61 72 72 61 79 0a 20 2a 20 40 n the array. * @
6dd0: 72 65 74 75 72 6e 73 20 7b 20 4f 62 6a 65 63 74 returns { Object
6de0: 20 7d 20 2d 20 6e 65 77 20 6f 62 6a 65 63 74 20 } - new object
6df0: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 76 containing the v
6e00: 61 6c 75 65 73 20 6f 66 20 74 68 65 20 6f 72 69 alues of the ori
6e10: 67 69 6e 61 6c 20 69 74 65 6d 0a 20 2a 0a 20 2a ginal item. *. *
6e20: 20 54 68 65 20 76 61 72 69 61 62 6c 65 73 20 27 The variables '
6e30: 6b 65 79 27 20 61 6e 64 20 27 76 61 6c 27 20 61 key' and 'val' a
6e40: 72 65 20 61 72 62 69 74 72 61 72 79 2e 0a 20 2a re arbitrary.. *
6e50: 20 54 68 65 79 20 64 65 70 65 6e 64 20 6f 6e 20 They depend on
6e60: 74 68 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 74 the collection t
6e70: 79 70 65 20 6c 6f 6f 70 65 64 20 28 41 72 72 61 ype looped (Arra
6e80: 79 2c 20 4f 62 6a 65 63 74 29 0a 20 2a 20 61 6e y, Object). * an
6e90: 64 20 6f 6e 20 74 68 65 20 65 78 70 72 65 73 73 d on the express
6ea0: 69 6f 6e 20 75 73 65 64 20 6f 6e 20 74 68 65 20 ion used on the
6eb0: 65 61 63 68 20 74 61 67 0a 20 2a 0a 20 2a 2f 0a each tag. *. */.
6ec0: 66 75 6e 63 74 69 6f 6e 20 6d 6b 69 74 65 6d 28 function mkitem(
6ed0: 65 78 70 72 2c 20 6b 65 79 2c 20 76 61 6c 29 20 expr, key, val)
6ee0: 7b 0a 20 20 76 61 72 20 69 74 65 6d 20 3d 20 7b {. var item = {
6ef0: 7d 0a 20 20 69 74 65 6d 5b 65 78 70 72 2e 6b 65 }. item[expr.ke
6f00: 79 5d 20 3d 20 6b 65 79 0a 20 20 69 66 20 28 65 y] = key. if (e
6f10: 78 70 72 2e 70 6f 73 29 20 69 74 65 6d 5b 65 78 xpr.pos) item[ex
6f20: 70 72 2e 70 6f 73 5d 20 3d 20 76 61 6c 0a 20 20 pr.pos] = val.
6f30: 72 65 74 75 72 6e 20 69 74 65 6d 0a 7d 0a 0a 2f return item.}../
6f40: 2a 2a 0a 20 2a 20 55 6e 6d 6f 75 6e 74 20 74 68 **. * Unmount th
6f50: 65 20 72 65 64 75 6e 64 61 6e 74 20 74 61 67 73 e redundant tags
6f60: 0a 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 41 . * @param { A
6f70: 72 72 61 79 20 7d 20 69 74 65 6d 73 20 2d 20 61 rray } items - a
6f80: 72 72 61 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 rray containing
6f90: 74 68 65 20 63 75 72 72 65 6e 74 20 69 74 65 6d the current item
6fa0: 73 20 74 6f 20 6c 6f 6f 70 0a 20 2a 20 40 70 61 s to loop. * @pa
6fb0: 72 61 6d 20 20 20 7b 20 41 72 72 61 79 20 7d 20 ram { Array }
6fc0: 74 61 67 73 20 2d 20 61 72 72 61 79 20 63 6f 6e tags - array con
6fd0: 74 61 69 6e 69 6e 67 20 61 6c 6c 20 74 68 65 20 taining all the
6fe0: 63 68 69 6c 64 72 65 6e 20 74 61 67 73 0a 20 2a children tags. *
6ff0: 2f 0a 66 75 6e 63 74 69 6f 6e 20 75 6e 6d 6f 75 /.function unmou
7000: 6e 74 52 65 64 75 6e 64 61 6e 74 28 69 74 65 6d ntRedundant(item
7010: 73 2c 20 74 61 67 73 29 20 7b 0a 0a 20 20 76 61 s, tags) {.. va
7020: 72 20 69 20 3d 20 74 61 67 73 2e 6c 65 6e 67 74 r i = tags.lengt
7030: 68 2c 0a 20 20 20 20 6a 20 3d 20 69 74 65 6d 73 h,. j = items
7040: 2e 6c 65 6e 67 74 68 2c 0a 20 20 20 20 74 0a 0a .length,. t..
7050: 20 20 77 68 69 6c 65 20 28 69 20 3e 20 6a 29 20 while (i > j)
7060: 7b 0a 20 20 20 20 74 20 3d 20 74 61 67 73 5b 2d {. t = tags[-
7070: 2d 69 5d 0a 20 20 20 20 74 61 67 73 2e 73 70 6c -i]. tags.spl
7080: 69 63 65 28 69 2c 20 31 29 0a 20 20 20 20 74 2e ice(i, 1). t.
7090: 75 6e 6d 6f 75 6e 74 28 29 0a 20 20 7d 0a 7d 0a unmount(). }.}.
70a0: 0a 2f 2a 2a 0a 20 2a 20 4d 6f 76 65 20 74 68 65 ./**. * Move the
70b0: 20 6e 65 73 74 65 64 20 63 75 73 74 6f 6d 20 74 nested custom t
70c0: 61 67 73 20 69 6e 20 6e 6f 6e 20 63 75 73 74 6f ags in non custo
70d0: 6d 20 6c 6f 6f 70 20 74 61 67 73 0a 20 2a 20 40 m loop tags. * @
70e0: 70 61 72 61 6d 20 20 20 7b 20 4f 62 6a 65 63 74 param { Object
70f0: 20 7d 20 63 68 69 6c 64 20 2d 20 6e 6f 6e 20 63 } child - non c
7100: 75 73 74 6f 6d 20 6c 6f 6f 70 20 74 61 67 0a 20 ustom loop tag.
7110: 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 4e 75 6d * @param { Num
7120: 62 65 72 20 7d 20 69 20 2d 20 63 75 72 72 65 6e ber } i - curren
7130: 74 20 70 6f 73 69 74 69 6f 6e 20 6f 66 20 74 68 t position of th
7140: 65 20 6c 6f 6f 70 20 74 61 67 0a 20 2a 2f 0a 66 e loop tag. */.f
7150: 75 6e 63 74 69 6f 6e 20 6d 6f 76 65 4e 65 73 74 unction moveNest
7160: 65 64 54 61 67 73 28 63 68 69 6c 64 2c 20 69 29 edTags(child, i)
7170: 20 7b 0a 20 20 4f 62 6a 65 63 74 2e 6b 65 79 73 {. Object.keys
7180: 28 63 68 69 6c 64 2e 74 61 67 73 29 2e 66 6f 72 (child.tags).for
7190: 45 61 63 68 28 66 75 6e 63 74 69 6f 6e 28 74 61 Each(function(ta
71a0: 67 4e 61 6d 65 29 20 7b 0a 20 20 20 20 76 61 72 gName) {. var
71b0: 20 74 61 67 20 3d 20 63 68 69 6c 64 2e 74 61 67 tag = child.tag
71c0: 73 5b 74 61 67 4e 61 6d 65 5d 0a 20 20 20 20 69 s[tagName]. i
71d0: 66 20 28 69 73 41 72 72 61 79 28 74 61 67 29 29 f (isArray(tag))
71e0: 0a 20 20 20 20 20 20 65 61 63 68 28 74 61 67 2c . each(tag,
71f0: 20 66 75 6e 63 74 69 6f 6e 20 28 74 29 20 7b 0a function (t) {.
7200: 20 20 20 20 20 20 20 20 6d 6f 76 65 43 68 69 6c moveChil
7210: 64 54 61 67 28 74 2c 20 74 61 67 4e 61 6d 65 2c dTag(t, tagName,
7220: 20 69 29 0a 20 20 20 20 20 20 7d 29 0a 20 20 20 i). }).
7230: 20 65 6c 73 65 0a 20 20 20 20 20 20 6d 6f 76 65 else. move
7240: 43 68 69 6c 64 54 61 67 28 74 61 67 2c 20 74 61 ChildTag(tag, ta
7250: 67 4e 61 6d 65 2c 20 69 29 0a 20 20 7d 29 0a 7d gName, i). }).}
7260: 0a 0a 2f 2a 2a 0a 20 2a 20 41 64 64 73 20 74 68 ../**. * Adds th
7270: 65 20 65 6c 65 6d 65 6e 74 73 20 66 6f 72 20 61 e elements for a
7280: 20 76 69 72 74 75 61 6c 20 74 61 67 0a 20 2a 20 virtual tag. *
7290: 40 70 61 72 61 6d 20 7b 20 54 61 67 20 7d 20 74 @param { Tag } t
72a0: 61 67 20 2d 20 74 68 65 20 74 61 67 20 77 68 6f ag - the tag who
72b0: 73 65 20 72 6f 6f 74 27 73 20 63 68 69 6c 64 72 se root's childr
72c0: 65 6e 20 77 69 6c 6c 20 62 65 20 69 6e 73 65 72 en will be inser
72d0: 74 65 64 20 6f 72 20 61 70 70 65 6e 64 65 64 0a ted or appended.
72e0: 20 2a 20 40 70 61 72 61 6d 20 7b 20 4e 6f 64 65 * @param { Node
72f0: 20 7d 20 73 72 63 20 2d 20 74 68 65 20 6e 6f 64 } src - the nod
7300: 65 20 74 68 61 74 20 77 69 6c 6c 20 64 6f 20 74 e that will do t
7310: 68 65 20 69 6e 73 65 72 74 69 6e 67 20 6f 72 20 he inserting or
7320: 61 70 70 65 6e 64 69 6e 67 0a 20 2a 20 40 70 61 appending. * @pa
7330: 72 61 6d 20 7b 20 54 61 67 20 7d 20 74 61 72 67 ram { Tag } targ
7340: 65 74 20 2d 20 6f 6e 6c 79 20 69 66 20 69 6e 73 et - only if ins
7350: 65 72 74 69 6e 67 2c 20 69 6e 73 65 72 74 20 62 erting, insert b
7360: 65 66 6f 72 65 20 74 68 69 73 20 74 61 67 27 73 efore this tag's
7370: 20 66 69 72 73 74 20 63 68 69 6c 64 0a 20 2a 2f first child. */
7380: 0a 66 75 6e 63 74 69 6f 6e 20 61 64 64 56 69 72 .function addVir
7390: 74 75 61 6c 28 74 61 67 2c 20 73 72 63 2c 20 74 tual(tag, src, t
73a0: 61 72 67 65 74 29 20 7b 0a 20 20 76 61 72 20 65 arget) {. var e
73b0: 6c 20 3d 20 74 61 67 2e 5f 72 6f 6f 74 2c 20 73 l = tag._root, s
73c0: 69 62 0a 20 20 74 61 67 2e 5f 76 69 72 74 73 20 ib. tag._virts
73d0: 3d 20 5b 5d 0a 20 20 77 68 69 6c 65 20 28 65 6c = []. while (el
73e0: 29 20 7b 0a 20 20 20 20 73 69 62 20 3d 20 65 6c ) {. sib = el
73f0: 2e 6e 65 78 74 53 69 62 6c 69 6e 67 0a 20 20 20 .nextSibling.
7400: 20 69 66 20 28 74 61 72 67 65 74 29 0a 20 20 20 if (target).
7410: 20 20 20 73 72 63 2e 69 6e 73 65 72 74 42 65 66 src.insertBef
7420: 6f 72 65 28 65 6c 2c 20 74 61 72 67 65 74 2e 5f ore(el, target._
7430: 72 6f 6f 74 29 0a 20 20 20 20 65 6c 73 65 0a 20 root). else.
7440: 20 20 20 20 20 73 72 63 2e 61 70 70 65 6e 64 43 src.appendC
7450: 68 69 6c 64 28 65 6c 29 0a 0a 20 20 20 20 74 61 hild(el).. ta
7460: 67 2e 5f 76 69 72 74 73 2e 70 75 73 68 28 65 6c g._virts.push(el
7470: 29 20 2f 2f 20 68 6f 6c 64 20 66 6f 72 20 75 6e ) // hold for un
7480: 6d 6f 75 6e 74 69 6e 67 0a 20 20 20 20 65 6c 20 mounting. el
7490: 3d 20 73 69 62 0a 20 20 7d 0a 7d 0a 0a 2f 2a 2a = sib. }.}../**
74a0: 0a 20 2a 20 4d 6f 76 65 20 76 69 72 74 75 61 6c . * Move virtual
74b0: 20 74 61 67 20 61 6e 64 20 61 6c 6c 20 63 68 69 tag and all chi
74c0: 6c 64 20 6e 6f 64 65 73 0a 20 2a 20 40 70 61 72 ld nodes. * @par
74d0: 61 6d 20 7b 20 54 61 67 20 7d 20 74 61 67 20 2d am { Tag } tag -
74e0: 20 66 69 72 73 74 20 63 68 69 6c 64 20 72 65 66 first child ref
74f0: 65 72 65 6e 63 65 20 75 73 65 64 20 74 6f 20 73 erence used to s
7500: 74 61 72 74 20 6d 6f 76 65 0a 20 2a 20 40 70 61 tart move. * @pa
7510: 72 61 6d 20 7b 20 4e 6f 64 65 20 7d 20 73 72 63 ram { Node } src
7520: 20 20 2d 20 74 68 65 20 6e 6f 64 65 20 74 68 61 - the node tha
7530: 74 20 77 69 6c 6c 20 64 6f 20 74 68 65 20 69 6e t will do the in
7540: 73 65 72 74 69 6e 67 0a 20 2a 20 40 70 61 72 61 serting. * @para
7550: 6d 20 7b 20 54 61 67 20 7d 20 74 61 72 67 65 74 m { Tag } target
7560: 20 2d 20 69 6e 73 65 72 74 20 62 65 66 6f 72 65 - insert before
7570: 20 74 68 69 73 20 74 61 67 27 73 20 66 69 72 73 this tag's firs
7580: 74 20 63 68 69 6c 64 0a 20 2a 20 40 70 61 72 61 t child. * @para
7590: 6d 20 7b 20 4e 75 6d 62 65 72 20 7d 20 6c 65 6e m { Number } len
75a0: 20 2d 20 68 6f 77 20 6d 61 6e 79 20 63 68 69 6c - how many chil
75b0: 64 20 6e 6f 64 65 73 20 74 6f 20 6d 6f 76 65 0a d nodes to move.
75c0: 20 2a 2f 0a 66 75 6e 63 74 69 6f 6e 20 6d 6f 76 */.function mov
75d0: 65 56 69 72 74 75 61 6c 28 74 61 67 2c 20 73 72 eVirtual(tag, sr
75e0: 63 2c 20 74 61 72 67 65 74 2c 20 6c 65 6e 29 20 c, target, len)
75f0: 7b 0a 20 20 76 61 72 20 65 6c 20 3d 20 74 61 67 {. var el = tag
7600: 2e 5f 72 6f 6f 74 2c 20 73 69 62 2c 20 69 20 3d ._root, sib, i =
7610: 20 30 0a 20 20 66 6f 72 20 28 3b 20 69 20 3c 20 0. for (; i <
7620: 6c 65 6e 3b 20 69 2b 2b 29 20 7b 0a 20 20 20 20 len; i++) {.
7630: 73 69 62 20 3d 20 65 6c 2e 6e 65 78 74 53 69 62 sib = el.nextSib
7640: 6c 69 6e 67 0a 20 20 20 20 73 72 63 2e 69 6e 73 ling. src.ins
7650: 65 72 74 42 65 66 6f 72 65 28 65 6c 2c 20 74 61 ertBefore(el, ta
7660: 72 67 65 74 2e 5f 72 6f 6f 74 29 0a 20 20 20 20 rget._root).
7670: 65 6c 20 3d 20 73 69 62 0a 20 20 7d 0a 7d 0a 0a el = sib. }.}..
7680: 0a 2f 2a 2a 0a 20 2a 20 4d 61 6e 61 67 65 20 74 ./**. * Manage t
7690: 61 67 73 20 68 61 76 69 6e 67 20 74 68 65 20 27 ags having the '
76a0: 65 61 63 68 27 0a 20 2a 20 40 70 61 72 61 6d 20 each'. * @param
76b0: 20 20 7b 20 4f 62 6a 65 63 74 20 7d 20 64 6f 6d { Object } dom
76c0: 20 2d 20 44 4f 4d 20 6e 6f 64 65 20 77 65 20 6e - DOM node we n
76d0: 65 65 64 20 74 6f 20 6c 6f 6f 70 0a 20 2a 20 40 eed to loop. * @
76e0: 70 61 72 61 6d 20 20 20 7b 20 54 61 67 20 7d 20 param { Tag }
76f0: 70 61 72 65 6e 74 20 2d 20 70 61 72 65 6e 74 20 parent - parent
7700: 74 61 67 20 69 6e 73 74 61 6e 63 65 20 77 68 65 tag instance whe
7710: 72 65 20 74 68 65 20 64 6f 6d 20 6e 6f 64 65 20 re the dom node
7720: 69 73 20 63 6f 6e 74 61 69 6e 65 64 0a 20 2a 20 is contained. *
7730: 40 70 61 72 61 6d 20 20 20 7b 20 53 74 72 69 6e @param { Strin
7740: 67 20 7d 20 65 78 70 72 20 2d 20 73 74 72 69 6e g } expr - strin
7750: 67 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 g contained in t
7760: 68 65 20 27 65 61 63 68 27 20 61 74 74 72 69 62 he 'each' attrib
7770: 75 74 65 0a 20 2a 2f 0a 66 75 6e 63 74 69 6f 6e ute. */.function
7780: 20 5f 65 61 63 68 28 64 6f 6d 2c 20 70 61 72 65 _each(dom, pare
7790: 6e 74 2c 20 65 78 70 72 29 20 7b 0a 0a 20 20 2f nt, expr) {.. /
77a0: 2f 20 72 65 6d 6f 76 65 20 74 68 65 20 65 61 63 / remove the eac
77b0: 68 20 70 72 6f 70 65 72 74 79 20 66 72 6f 6d 20 h property from
77c0: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 74 61 67 the original tag
77d0: 0a 20 20 72 65 6d 41 74 74 72 28 64 6f 6d 2c 20 . remAttr(dom,
77e0: 27 65 61 63 68 27 29 0a 0a 20 20 76 61 72 20 6d 'each').. var m
77f0: 75 73 74 52 65 6f 72 64 65 72 20 3d 20 74 79 70 ustReorder = typ
7800: 65 6f 66 20 67 65 74 41 74 74 72 28 64 6f 6d 2c eof getAttr(dom,
7810: 20 27 6e 6f 2d 72 65 6f 72 64 65 72 27 29 20 21 'no-reorder') !
7820: 3d 3d 20 54 5f 53 54 52 49 4e 47 20 7c 7c 20 72 == T_STRING || r
7830: 65 6d 41 74 74 72 28 64 6f 6d 2c 20 27 6e 6f 2d emAttr(dom, 'no-
7840: 72 65 6f 72 64 65 72 27 29 2c 0a 20 20 20 20 74 reorder'),. t
7850: 61 67 4e 61 6d 65 20 3d 20 67 65 74 54 61 67 4e agName = getTagN
7860: 61 6d 65 28 64 6f 6d 29 2c 0a 20 20 20 20 69 6d ame(dom),. im
7870: 70 6c 20 3d 20 5f 5f 74 61 67 49 6d 70 6c 5b 74 pl = __tagImpl[t
7880: 61 67 4e 61 6d 65 5d 20 7c 7c 20 7b 20 74 6d 70 agName] || { tmp
7890: 6c 3a 20 67 65 74 4f 75 74 65 72 48 54 4d 4c 28 l: getOuterHTML(
78a0: 64 6f 6d 29 20 7d 2c 0a 20 20 20 20 75 73 65 52 dom) },. useR
78b0: 6f 6f 74 20 3d 20 53 50 45 43 49 41 4c 5f 54 41 oot = SPECIAL_TA
78c0: 47 53 5f 52 45 47 45 58 2e 74 65 73 74 28 74 61 GS_REGEX.test(ta
78d0: 67 4e 61 6d 65 29 2c 0a 20 20 20 20 72 6f 6f 74 gName),. root
78e0: 20 3d 20 64 6f 6d 2e 70 61 72 65 6e 74 4e 6f 64 = dom.parentNod
78f0: 65 2c 0a 20 20 20 20 72 65 66 20 3d 20 64 6f 63 e,. ref = doc
7900: 75 6d 65 6e 74 2e 63 72 65 61 74 65 54 65 78 74 ument.createText
7910: 4e 6f 64 65 28 27 27 29 2c 0a 20 20 20 20 63 68 Node(''),. ch
7920: 69 6c 64 20 3d 20 67 65 74 54 61 67 28 64 6f 6d ild = getTag(dom
7930: 29 2c 0a 20 20 20 20 69 73 4f 70 74 69 6f 6e 20 ),. isOption
7940: 3d 20 74 61 67 4e 61 6d 65 2e 74 6f 4c 6f 77 65 = tagName.toLowe
7950: 72 43 61 73 65 28 29 20 3d 3d 3d 20 27 6f 70 74 rCase() === 'opt
7960: 69 6f 6e 27 2c 20 2f 2f 20 74 68 65 20 6f 70 74 ion', // the opt
7970: 69 6f 6e 20 74 61 67 73 20 6d 75 73 74 20 62 65 ion tags must be
7980: 20 74 72 65 61 74 65 64 20 64 69 66 66 65 72 65 treated differe
7990: 6e 74 6c 79 0a 20 20 20 20 74 61 67 73 20 3d 20 ntly. tags =
79a0: 5b 5d 2c 0a 20 20 20 20 6f 6c 64 49 74 65 6d 73 [],. oldItems
79b0: 20 3d 20 5b 5d 2c 0a 20 20 20 20 68 61 73 4b 65 = [],. hasKe
79c0: 79 73 2c 0a 20 20 20 20 69 73 56 69 72 74 75 61 ys,. isVirtua
79d0: 6c 20 3d 20 64 6f 6d 2e 74 61 67 4e 61 6d 65 20 l = dom.tagName
79e0: 3d 3d 20 27 56 49 52 54 55 41 4c 27 0a 0a 20 20 == 'VIRTUAL'..
79f0: 2f 2f 20 70 61 72 73 65 20 74 68 65 20 65 61 63 // parse the eac
7a00: 68 20 65 78 70 72 65 73 73 69 6f 6e 0a 20 20 65 h expression. e
7a10: 78 70 72 20 3d 20 74 6d 70 6c 2e 6c 6f 6f 70 4b xpr = tmpl.loopK
7a20: 65 79 73 28 65 78 70 72 29 0a 0a 20 20 2f 2f 20 eys(expr).. //
7a30: 69 6e 73 65 72 74 20 61 20 6d 61 72 6b 65 64 20 insert a marked
7a40: 77 68 65 72 65 20 74 68 65 20 6c 6f 6f 70 20 74 where the loop t
7a50: 61 67 73 20 77 69 6c 6c 20 62 65 20 69 6e 6a 65 ags will be inje
7a60: 63 74 65 64 0a 20 20 72 6f 6f 74 2e 69 6e 73 65 cted. root.inse
7a70: 72 74 42 65 66 6f 72 65 28 72 65 66 2c 20 64 6f rtBefore(ref, do
7a80: 6d 29 0a 0a 20 20 2f 2f 20 63 6c 65 61 6e 20 74 m).. // clean t
7a90: 65 6d 70 6c 61 74 65 20 63 6f 64 65 0a 20 20 70 emplate code. p
7aa0: 61 72 65 6e 74 2e 6f 6e 65 28 27 62 65 66 6f 72 arent.one('befor
7ab0: 65 2d 6d 6f 75 6e 74 27 2c 20 66 75 6e 63 74 69 e-mount', functi
7ac0: 6f 6e 20 28 29 20 7b 0a 0a 20 20 20 20 2f 2f 20 on () {.. //
7ad0: 72 65 6d 6f 76 65 20 74 68 65 20 6f 72 69 67 69 remove the origi
7ae0: 6e 61 6c 20 44 4f 4d 20 6e 6f 64 65 0a 20 20 20 nal DOM node.
7af0: 20 64 6f 6d 2e 70 61 72 65 6e 74 4e 6f 64 65 2e dom.parentNode.
7b00: 72 65 6d 6f 76 65 43 68 69 6c 64 28 64 6f 6d 29 removeChild(dom)
7b10: 0a 20 20 20 20 69 66 20 28 72 6f 6f 74 2e 73 74 . if (root.st
7b20: 75 62 29 20 72 6f 6f 74 20 3d 20 70 61 72 65 6e ub) root = paren
7b30: 74 2e 72 6f 6f 74 0a 0a 20 20 7d 29 2e 6f 6e 28 t.root.. }).on(
7b40: 27 75 70 64 61 74 65 27 2c 20 66 75 6e 63 74 69 'update', functi
7b50: 6f 6e 20 28 29 20 7b 0a 20 20 20 20 2f 2f 20 67 on () {. // g
7b60: 65 74 20 74 68 65 20 6e 65 77 20 69 74 65 6d 73 et the new items
7b70: 20 63 6f 6c 6c 65 63 74 69 6f 6e 0a 20 20 20 20 collection.
7b80: 76 61 72 20 69 74 65 6d 73 20 3d 20 74 6d 70 6c var items = tmpl
7b90: 28 65 78 70 72 2e 76 61 6c 2c 20 70 61 72 65 6e (expr.val, paren
7ba0: 74 29 2c 0a 20 20 20 20 20 20 2f 2f 20 63 72 65 t),. // cre
7bb0: 61 74 65 20 61 20 66 72 61 67 6d 65 6e 74 20 74 ate a fragment t
7bc0: 6f 20 68 6f 6c 64 20 74 68 65 20 6e 65 77 20 44 o hold the new D
7bd0: 4f 4d 20 6e 6f 64 65 73 20 74 6f 20 69 6e 6a 65 OM nodes to inje
7be0: 63 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 ct in the parent
7bf0: 20 74 61 67 0a 20 20 20 20 20 20 66 72 61 67 20 tag. frag
7c00: 3d 20 64 6f 63 75 6d 65 6e 74 2e 63 72 65 61 74 = document.creat
7c10: 65 44 6f 63 75 6d 65 6e 74 46 72 61 67 6d 65 6e eDocumentFragmen
7c20: 74 28 29 0a 0a 20 20 20 20 2f 2f 20 6f 62 6a 65 t().. // obje
7c30: 63 74 20 6c 6f 6f 70 2e 20 61 6e 79 20 63 68 61 ct loop. any cha
7c40: 6e 67 65 73 20 63 61 75 73 65 20 66 75 6c 6c 20 nges cause full
7c50: 72 65 64 72 61 77 0a 20 20 20 20 69 66 20 28 21 redraw. if (!
7c60: 69 73 41 72 72 61 79 28 69 74 65 6d 73 29 29 20 isArray(items))
7c70: 7b 0a 20 20 20 20 20 20 68 61 73 4b 65 79 73 20 {. hasKeys
7c80: 3d 20 69 74 65 6d 73 20 7c 7c 20 66 61 6c 73 65 = items || false
7c90: 0a 20 20 20 20 20 20 69 74 65 6d 73 20 3d 20 68 . items = h
7ca0: 61 73 4b 65 79 73 20 3f 0a 20 20 20 20 20 20 20 asKeys ?.
7cb0: 20 4f 62 6a 65 63 74 2e 6b 65 79 73 28 69 74 65 Object.keys(ite
7cc0: 6d 73 29 2e 6d 61 70 28 66 75 6e 63 74 69 6f 6e ms).map(function
7cd0: 20 28 6b 65 79 29 20 7b 0a 20 20 20 20 20 20 20 (key) {.
7ce0: 20 20 20 72 65 74 75 72 6e 20 6d 6b 69 74 65 6d return mkitem
7cf0: 28 65 78 70 72 2c 20 6b 65 79 2c 20 69 74 65 6d (expr, key, item
7d00: 73 5b 6b 65 79 5d 29 0a 20 20 20 20 20 20 20 20 s[key]).
7d10: 7d 29 20 3a 20 5b 5d 0a 20 20 20 20 7d 0a 0a 20 }) : []. }..
7d20: 20 20 20 2f 2f 20 6c 6f 6f 70 20 61 6c 6c 20 74 // loop all t
7d30: 68 65 20 6e 65 77 20 69 74 65 6d 73 0a 20 20 20 he new items.
7d40: 20 76 61 72 20 69 20 3d 20 30 2c 0a 20 20 20 20 var i = 0,.
7d50: 20 20 69 74 65 6d 73 4c 65 6e 67 74 68 20 3d 20 itemsLength =
7d60: 69 74 65 6d 73 2e 6c 65 6e 67 74 68 0a 0a 20 20 items.length..
7d70: 20 20 66 6f 72 20 28 3b 20 69 20 3c 20 69 74 65 for (; i < ite
7d80: 6d 73 4c 65 6e 67 74 68 3b 20 69 2b 2b 29 20 7b msLength; i++) {
7d90: 0a 20 20 20 20 20 20 2f 2f 20 72 65 6f 72 64 65 . // reorde
7da0: 72 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 69 74 r only if the it
7db0: 65 6d 73 20 61 72 65 20 6f 62 6a 65 63 74 73 0a ems are objects.
7dc0: 20 20 20 20 20 20 76 61 72 0a 20 20 20 20 20 20 var.
7dd0: 20 20 69 74 65 6d 20 3d 20 69 74 65 6d 73 5b 69 item = items[i
7de0: 5d 2c 0a 20 20 20 20 20 20 20 20 5f 6d 75 73 74 ],. _must
7df0: 52 65 6f 72 64 65 72 20 3d 20 6d 75 73 74 52 65 Reorder = mustRe
7e00: 6f 72 64 65 72 20 26 26 20 74 79 70 65 6f 66 20 order && typeof
7e10: 69 74 65 6d 20 3d 3d 20 54 5f 4f 42 4a 45 43 54 item == T_OBJECT
7e20: 20 26 26 20 21 68 61 73 4b 65 79 73 2c 0a 20 20 && !hasKeys,.
7e30: 20 20 20 20 20 20 6f 6c 64 50 6f 73 20 3d 20 6f oldPos = o
7e40: 6c 64 49 74 65 6d 73 2e 69 6e 64 65 78 4f 66 28 ldItems.indexOf(
7e50: 69 74 65 6d 29 2c 0a 20 20 20 20 20 20 20 20 70 item),. p
7e60: 6f 73 20 3d 20 7e 6f 6c 64 50 6f 73 20 26 26 20 os = ~oldPos &&
7e70: 5f 6d 75 73 74 52 65 6f 72 64 65 72 20 3f 20 6f _mustReorder ? o
7e80: 6c 64 50 6f 73 20 3a 20 69 2c 0a 20 20 20 20 20 ldPos : i,.
7e90: 20 20 20 2f 2f 20 64 6f 65 73 20 61 20 74 61 67 // does a tag
7ea0: 20 65 78 69 73 74 20 69 6e 20 74 68 69 73 20 70 exist in this p
7eb0: 6f 73 69 74 69 6f 6e 3f 0a 20 20 20 20 20 20 20 osition?.
7ec0: 20 74 61 67 20 3d 20 74 61 67 73 5b 70 6f 73 5d tag = tags[pos]
7ed0: 0a 0a 20 20 20 20 20 20 69 74 65 6d 20 3d 20 21 .. item = !
7ee0: 68 61 73 4b 65 79 73 20 26 26 20 65 78 70 72 2e hasKeys && expr.
7ef0: 6b 65 79 20 3f 20 6d 6b 69 74 65 6d 28 65 78 70 key ? mkitem(exp
7f00: 72 2c 20 69 74 65 6d 2c 20 69 29 20 3a 20 69 74 r, item, i) : it
7f10: 65 6d 0a 0a 20 20 20 20 20 20 2f 2f 20 6e 65 77 em.. // new
7f20: 20 74 61 67 0a 20 20 20 20 20 20 69 66 20 28 0a tag. if (.
7f30: 20 20 20 20 20 20 20 20 21 5f 6d 75 73 74 52 65 !_mustRe
7f40: 6f 72 64 65 72 20 26 26 20 21 74 61 67 20 2f 2f order && !tag //
7f50: 20 77 69 74 68 20 6e 6f 2d 72 65 6f 72 64 65 72 with no-reorder
7f60: 20 77 65 20 6a 75 73 74 20 75 70 64 61 74 65 20 we just update
7f70: 74 68 65 20 6f 6c 64 20 74 61 67 73 0a 20 20 20 the old tags.
7f80: 20 20 20 20 20 7c 7c 0a 20 20 20 20 20 20 20 20 ||.
7f90: 5f 6d 75 73 74 52 65 6f 72 64 65 72 20 26 26 20 _mustReorder &&
7fa0: 21 7e 6f 6c 64 50 6f 73 20 7c 7c 20 21 74 61 67 !~oldPos || !tag
7fb0: 20 2f 2f 20 62 79 20 64 65 66 61 75 6c 74 20 77 // by default w
7fc0: 65 20 61 6c 77 61 79 73 20 74 72 79 20 74 6f 20 e always try to
7fd0: 72 65 6f 72 64 65 72 20 74 68 65 20 44 4f 4d 20 reorder the DOM
7fe0: 65 6c 65 6d 65 6e 74 73 0a 20 20 20 20 20 20 29 elements. )
7ff0: 20 7b 0a 0a 20 20 20 20 20 20 20 20 74 61 67 20 {.. tag
8000: 3d 20 6e 65 77 20 54 61 67 28 69 6d 70 6c 2c 20 = new Tag(impl,
8010: 7b 0a 20 20 20 20 20 20 20 20 20 20 70 61 72 65 {. pare
8020: 6e 74 3a 20 70 61 72 65 6e 74 2c 0a 20 20 20 20 nt: parent,.
8030: 20 20 20 20 20 20 69 73 4c 6f 6f 70 3a 20 74 72 isLoop: tr
8040: 75 65 2c 0a 20 20 20 20 20 20 20 20 20 20 68 61 ue,. ha
8050: 73 49 6d 70 6c 3a 20 21 21 5f 5f 74 61 67 49 6d sImpl: !!__tagIm
8060: 70 6c 5b 74 61 67 4e 61 6d 65 5d 2c 0a 20 20 20 pl[tagName],.
8070: 20 20 20 20 20 20 20 72 6f 6f 74 3a 20 75 73 65 root: use
8080: 52 6f 6f 74 20 3f 20 72 6f 6f 74 20 3a 20 64 6f Root ? root : do
8090: 6d 2e 63 6c 6f 6e 65 4e 6f 64 65 28 29 2c 0a 20 m.cloneNode(),.
80a0: 20 20 20 20 20 20 20 20 20 69 74 65 6d 3a 20 69 item: i
80b0: 74 65 6d 0a 20 20 20 20 20 20 20 20 7d 2c 20 64 tem. }, d
80c0: 6f 6d 2e 69 6e 6e 65 72 48 54 4d 4c 29 0a 0a 20 om.innerHTML)..
80d0: 20 20 20 20 20 20 20 74 61 67 2e 6d 6f 75 6e 74 tag.mount
80e0: 28 29 0a 0a 20 20 20 20 20 20 20 20 69 66 20 28 ().. if (
80f0: 69 73 56 69 72 74 75 61 6c 29 20 74 61 67 2e 5f isVirtual) tag._
8100: 72 6f 6f 74 20 3d 20 74 61 67 2e 72 6f 6f 74 2e root = tag.root.
8110: 66 69 72 73 74 43 68 69 6c 64 20 2f 2f 20 73 61 firstChild // sa
8120: 76 65 20 72 65 66 65 72 65 6e 63 65 20 66 6f 72 ve reference for
8130: 20 66 75 72 74 68 65 72 20 6d 6f 76 65 73 20 6f further moves o
8140: 72 20 69 6e 73 65 72 74 73 0a 20 20 20 20 20 20 r inserts.
8150: 20 20 2f 2f 20 74 68 69 73 20 74 61 67 20 6d 75 // this tag mu
8160: 73 74 20 62 65 20 61 70 70 65 6e 64 65 64 0a 20 st be appended.
8170: 20 20 20 20 20 20 20 69 66 20 28 69 20 3d 3d 20 if (i ==
8180: 74 61 67 73 2e 6c 65 6e 67 74 68 20 7c 7c 20 21 tags.length || !
8190: 74 61 67 73 5b 69 5d 29 20 7b 20 2f 2f 20 66 69 tags[i]) { // fi
81a0: 78 20 31 35 38 31 0a 20 20 20 20 20 20 20 20 20 x 1581.
81b0: 20 69 66 20 28 69 73 56 69 72 74 75 61 6c 29 0a if (isVirtual).
81c0: 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64 56 addV
81d0: 69 72 74 75 61 6c 28 74 61 67 2c 20 66 72 61 67 irtual(tag, frag
81e0: 29 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 ). else
81f0: 20 66 72 61 67 2e 61 70 70 65 6e 64 43 68 69 6c frag.appendChil
8200: 64 28 74 61 67 2e 72 6f 6f 74 29 0a 20 20 20 20 d(tag.root).
8210: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2f }. //
8220: 20 74 68 69 73 20 74 61 67 20 6d 75 73 74 20 62 this tag must b
8230: 65 20 69 6e 73 65 72 74 0a 20 20 20 20 20 20 20 e insert.
8240: 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 else {.
8250: 20 20 69 66 20 28 69 73 56 69 72 74 75 61 6c 29 if (isVirtual)
8260: 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64 . add
8270: 56 69 72 74 75 61 6c 28 74 61 67 2c 20 72 6f 6f Virtual(tag, roo
8280: 74 2c 20 74 61 67 73 5b 69 5d 29 0a 20 20 20 20 t, tags[i]).
8290: 20 20 20 20 20 20 65 6c 73 65 20 72 6f 6f 74 2e else root.
82a0: 69 6e 73 65 72 74 42 65 66 6f 72 65 28 74 61 67 insertBefore(tag
82b0: 2e 72 6f 6f 74 2c 20 74 61 67 73 5b 69 5d 2e 72 .root, tags[i].r
82c0: 6f 6f 74 29 20 2f 2f 20 23 31 33 37 34 20 73 6f oot) // #1374 so
82d0: 6d 65 20 62 72 6f 77 73 65 72 73 20 72 65 73 65 me browsers rese
82e0: 74 20 73 65 6c 65 63 74 65 64 20 68 65 72 65 0a t selected here.
82f0: 20 20 20 20 20 20 20 20 20 20 6f 6c 64 49 74 65 oldIte
8300: 6d 73 2e 73 70 6c 69 63 65 28 69 2c 20 30 2c 20 ms.splice(i, 0,
8310: 69 74 65 6d 29 0a 20 20 20 20 20 20 20 20 7d 0a item). }.
8320: 0a 20 20 20 20 20 20 20 20 74 61 67 73 2e 73 70 . tags.sp
8330: 6c 69 63 65 28 69 2c 20 30 2c 20 74 61 67 29 0a lice(i, 0, tag).
8340: 20 20 20 20 20 20 20 20 70 6f 73 20 3d 20 69 20 pos = i
8350: 2f 2f 20 68 61 6e 64 6c 65 64 20 68 65 72 65 20 // handled here
8360: 73 6f 20 6e 6f 20 6d 6f 76 65 0a 20 20 20 20 20 so no move.
8370: 20 7d 20 65 6c 73 65 20 74 61 67 2e 75 70 64 61 } else tag.upda
8380: 74 65 28 69 74 65 6d 2c 20 74 72 75 65 29 0a 0a te(item, true)..
8390: 20 20 20 20 20 20 2f 2f 20 72 65 6f 72 64 65 72 // reorder
83a0: 20 74 68 65 20 74 61 67 20 69 66 20 69 74 27 73 the tag if it's
83b0: 20 6e 6f 74 20 6c 6f 63 61 74 65 64 20 69 6e 20 not located in
83c0: 69 74 73 20 70 72 65 76 69 6f 75 73 20 70 6f 73 its previous pos
83d0: 69 74 69 6f 6e 0a 20 20 20 20 20 20 69 66 20 28 ition. if (
83e0: 0a 20 20 20 20 20 20 20 20 70 6f 73 20 21 3d 3d . pos !==
83f0: 20 69 20 26 26 20 5f 6d 75 73 74 52 65 6f 72 64 i && _mustReord
8400: 65 72 20 26 26 0a 20 20 20 20 20 20 20 20 74 61 er &&. ta
8410: 67 73 5b 69 5d 20 2f 2f 20 66 69 78 20 31 35 38 gs[i] // fix 158
8420: 31 20 75 6e 61 62 6c 65 20 74 6f 20 72 65 70 72 1 unable to repr
8430: 6f 64 75 63 65 20 69 74 20 69 6e 20 61 20 74 65 oduce it in a te
8440: 73 74 21 0a 20 20 20 20 20 20 29 20 7b 0a 20 20 st!. ) {.
8450: 20 20 20 20 20 20 2f 2f 20 75 70 64 61 74 65 20 // update
8460: 74 68 65 20 44 4f 4d 0a 20 20 20 20 20 20 20 20 the DOM.
8470: 69 66 20 28 69 73 56 69 72 74 75 61 6c 29 0a 20 if (isVirtual).
8480: 20 20 20 20 20 20 20 20 20 6d 6f 76 65 56 69 72 moveVir
8490: 74 75 61 6c 28 74 61 67 2c 20 72 6f 6f 74 2c 20 tual(tag, root,
84a0: 74 61 67 73 5b 69 5d 2c 20 64 6f 6d 2e 63 68 69 tags[i], dom.chi
84b0: 6c 64 4e 6f 64 65 73 2e 6c 65 6e 67 74 68 29 0a ldNodes.length).
84c0: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 else if
84d0: 28 74 61 67 73 5b 69 5d 2e 72 6f 6f 74 2e 70 61 (tags[i].root.pa
84e0: 72 65 6e 74 4e 6f 64 65 29 20 72 6f 6f 74 2e 69 rentNode) root.i
84f0: 6e 73 65 72 74 42 65 66 6f 72 65 28 74 61 67 2e nsertBefore(tag.
8500: 72 6f 6f 74 2c 20 74 61 67 73 5b 69 5d 2e 72 6f root, tags[i].ro
8510: 6f 74 29 0a 20 20 20 20 20 20 20 20 2f 2f 20 75 ot). // u
8520: 70 64 61 74 65 20 74 68 65 20 70 6f 73 69 74 69 pdate the positi
8530: 6f 6e 20 61 74 74 72 69 62 75 74 65 20 69 66 20 on attribute if
8540: 69 74 20 65 78 69 73 74 73 0a 20 20 20 20 20 20 it exists.
8550: 20 20 69 66 20 28 65 78 70 72 2e 70 6f 73 29 0a if (expr.pos).
8560: 20 20 20 20 20 20 20 20 20 20 74 61 67 5b 65 78 tag[ex
8570: 70 72 2e 70 6f 73 5d 20 3d 20 69 0a 20 20 20 20 pr.pos] = i.
8580: 20 20 20 20 2f 2f 20 6d 6f 76 65 20 74 68 65 20 // move the
8590: 6f 6c 64 20 74 61 67 20 69 6e 73 74 61 6e 63 65 old tag instance
85a0: 0a 20 20 20 20 20 20 20 20 74 61 67 73 2e 73 70 . tags.sp
85b0: 6c 69 63 65 28 69 2c 20 30 2c 20 74 61 67 73 2e lice(i, 0, tags.
85c0: 73 70 6c 69 63 65 28 70 6f 73 2c 20 31 29 5b 30 splice(pos, 1)[0
85d0: 5d 29 0a 20 20 20 20 20 20 20 20 2f 2f 20 6d 6f ]). // mo
85e0: 76 65 20 74 68 65 20 6f 6c 64 20 69 74 65 6d 0a ve the old item.
85f0: 20 20 20 20 20 20 20 20 6f 6c 64 49 74 65 6d 73 oldItems
8600: 2e 73 70 6c 69 63 65 28 69 2c 20 30 2c 20 6f 6c .splice(i, 0, ol
8610: 64 49 74 65 6d 73 2e 73 70 6c 69 63 65 28 70 6f dItems.splice(po
8620: 73 2c 20 31 29 5b 30 5d 29 0a 20 20 20 20 20 20 s, 1)[0]).
8630: 20 20 2f 2f 20 69 66 20 74 68 65 20 6c 6f 6f 70 // if the loop
8640: 20 74 61 67 73 20 61 72 65 20 6e 6f 74 20 63 75 tags are not cu
8650: 73 74 6f 6d 0a 20 20 20 20 20 20 20 20 2f 2f 20 stom. //
8660: 77 65 20 6e 65 65 64 20 74 6f 20 6d 6f 76 65 20 we need to move
8670: 61 6c 6c 20 74 68 65 69 72 20 63 75 73 74 6f 6d all their custom
8680: 20 74 61 67 73 20 69 6e 74 6f 20 74 68 65 20 72 tags into the r
8690: 69 67 68 74 20 70 6f 73 69 74 69 6f 6e 0a 20 20 ight position.
86a0: 20 20 20 20 20 20 69 66 20 28 21 63 68 69 6c 64 if (!child
86b0: 20 26 26 20 74 61 67 2e 74 61 67 73 29 20 6d 6f && tag.tags) mo
86c0: 76 65 4e 65 73 74 65 64 54 61 67 73 28 74 61 67 veNestedTags(tag
86d0: 2c 20 69 29 0a 20 20 20 20 20 20 7d 0a 0a 20 20 , i). }..
86e0: 20 20 20 20 2f 2f 20 63 61 63 68 65 20 74 68 65 // cache the
86f0: 20 6f 72 69 67 69 6e 61 6c 20 69 74 65 6d 20 74 original item t
8700: 6f 20 75 73 65 20 69 74 20 69 6e 20 74 68 65 20 o use it in the
8710: 65 76 65 6e 74 73 20 62 6f 75 6e 64 20 74 6f 20 events bound to
8720: 74 68 69 73 20 6e 6f 64 65 0a 20 20 20 20 20 20 this node.
8730: 2f 2f 20 61 6e 64 20 69 74 73 20 63 68 69 6c 64 // and its child
8740: 72 65 6e 0a 20 20 20 20 20 20 74 61 67 2e 5f 69 ren. tag._i
8750: 74 65 6d 20 3d 20 69 74 65 6d 0a 20 20 20 20 20 tem = item.
8760: 20 2f 2f 20 63 61 63 68 65 20 74 68 65 20 72 65 // cache the re
8770: 61 6c 20 70 61 72 65 6e 74 20 74 61 67 20 69 6e al parent tag in
8780: 74 65 72 6e 61 6c 6c 79 0a 20 20 20 20 20 20 64 ternally. d
8790: 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28 74 61 efineProperty(ta
87a0: 67 2c 20 27 5f 70 61 72 65 6e 74 27 2c 20 70 61 g, '_parent', pa
87b0: 72 65 6e 74 29 0a 20 20 20 20 7d 0a 0a 20 20 20 rent). }..
87c0: 20 2f 2f 20 72 65 6d 6f 76 65 20 74 68 65 20 72 // remove the r
87d0: 65 64 75 6e 64 61 6e 74 20 74 61 67 73 0a 20 20 edundant tags.
87e0: 20 20 75 6e 6d 6f 75 6e 74 52 65 64 75 6e 64 61 unmountRedunda
87f0: 6e 74 28 69 74 65 6d 73 2c 20 74 61 67 73 29 0a nt(items, tags).
8800: 0a 20 20 20 20 2f 2f 20 69 6e 73 65 72 74 20 74 . // insert t
8810: 68 65 20 6e 65 77 20 6e 6f 64 65 73 0a 20 20 20 he new nodes.
8820: 20 72 6f 6f 74 2e 69 6e 73 65 72 74 42 65 66 6f root.insertBefo
8830: 72 65 28 66 72 61 67 2c 20 72 65 66 29 0a 20 20 re(frag, ref).
8840: 20 20 69 66 20 28 69 73 4f 70 74 69 6f 6e 29 20 if (isOption)
8850: 7b 0a 0a 20 20 20 20 20 20 2f 2f 20 23 31 33 37 {.. // #137
8860: 34 20 46 69 72 65 46 6f 78 20 62 75 67 20 69 6e 4 FireFox bug in
8870: 20 3c 6f 70 74 69 6f 6e 20 73 65 6c 65 63 74 65 <option selecte
8880: 64 3d 7b 65 78 70 72 65 73 73 69 6f 6e 7d 3e 0a d={expression}>.
8890: 20 20 20 20 20 20 69 66 20 28 46 49 52 45 46 4f if (FIREFO
88a0: 58 20 26 26 20 21 72 6f 6f 74 2e 6d 75 6c 74 69 X && !root.multi
88b0: 70 6c 65 29 20 7b 0a 20 20 20 20 20 20 20 20 66 ple) {. f
88c0: 6f 72 20 28 76 61 72 20 6e 20 3d 20 30 3b 20 6e or (var n = 0; n
88d0: 20 3c 20 72 6f 6f 74 2e 6c 65 6e 67 74 68 3b 20 < root.length;
88e0: 6e 2b 2b 29 20 7b 0a 20 20 20 20 20 20 20 20 20 n++) {.
88f0: 20 69 66 20 28 72 6f 6f 74 5b 6e 5d 2e 5f 5f 72 if (root[n].__r
8900: 69 6f 74 31 33 37 34 29 20 7b 0a 20 20 20 20 20 iot1374) {.
8910: 20 20 20 20 20 20 20 72 6f 6f 74 2e 73 65 6c 65 root.sele
8920: 63 74 65 64 49 6e 64 65 78 20 3d 20 6e 20 20 2f ctedIndex = n /
8930: 2f 20 63 6c 65 61 72 20 6f 74 68 65 72 20 6f 70 / clear other op
8940: 74 69 6f 6e 73 0a 20 20 20 20 20 20 20 20 20 20 tions.
8950: 20 20 64 65 6c 65 74 65 20 72 6f 6f 74 5b 6e 5d delete root[n]
8960: 2e 5f 5f 72 69 6f 74 31 33 37 34 0a 20 20 20 20 .__riot1374.
8970: 20 20 20 20 20 20 20 20 62 72 65 61 6b 0a 20 20 break.
8980: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 }.
8990: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 }. }.
89a0: 7d 0a 0a 20 20 20 20 2f 2f 20 73 65 74 20 74 68 }.. // set th
89b0: 65 20 27 74 61 67 73 27 20 70 72 6f 70 65 72 74 e 'tags' propert
89c0: 79 20 6f 66 20 74 68 65 20 70 61 72 65 6e 74 20 y of the parent
89d0: 74 61 67 0a 20 20 20 20 2f 2f 20 69 66 20 63 68 tag. // if ch
89e0: 69 6c 64 20 69 73 20 27 75 6e 64 65 66 69 6e 65 ild is 'undefine
89f0: 64 27 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 d' it means that
8a00: 20 77 65 20 64 6f 6e 27 74 20 6e 65 65 64 20 74 we don't need t
8a10: 6f 20 73 65 74 20 74 68 69 73 20 70 72 6f 70 65 o set this prope
8a20: 72 74 79 0a 20 20 20 20 2f 2f 20 66 6f 72 20 65 rty. // for e
8a30: 78 61 6d 70 6c 65 3a 0a 20 20 20 20 2f 2f 20 77 xample:. // w
8a40: 65 20 64 6f 6e 27 74 20 6e 65 65 64 20 73 74 6f e don't need sto
8a50: 72 65 20 74 68 65 20 60 6d 79 54 61 67 2e 74 61 re the `myTag.ta
8a60: 67 73 5b 27 64 69 76 27 5d 60 20 70 72 6f 70 65 gs['div']` prope
8a70: 72 74 79 20 69 66 20 77 65 20 61 72 65 20 6c 6f rty if we are lo
8a80: 6f 70 69 6e 67 20 61 20 64 69 76 20 74 61 67 0a oping a div tag.
8a90: 20 20 20 20 2f 2f 20 62 75 74 20 77 65 20 6e 65 // but we ne
8aa0: 65 64 20 74 6f 20 74 72 61 63 6b 20 74 68 65 20 ed to track the
8ab0: 60 6d 79 54 61 67 2e 74 61 67 73 5b 27 63 68 69 `myTag.tags['chi
8ac0: 6c 64 27 5d 60 20 70 72 6f 70 65 72 74 79 20 6c ld']` property l
8ad0: 6f 6f 70 69 6e 67 20 61 20 63 75 73 74 6f 6d 20 ooping a custom
8ae0: 63 68 69 6c 64 20 6e 6f 64 65 20 6e 61 6d 65 64 child node named
8af0: 20 60 63 68 69 6c 64 60 0a 20 20 20 20 69 66 20 `child`. if
8b00: 28 63 68 69 6c 64 29 20 70 61 72 65 6e 74 2e 74 (child) parent.t
8b10: 61 67 73 5b 74 61 67 4e 61 6d 65 5d 20 3d 20 74 ags[tagName] = t
8b20: 61 67 73 0a 0a 20 20 20 20 2f 2f 20 63 6c 6f 6e ags.. // clon
8b30: 65 20 74 68 65 20 69 74 65 6d 73 20 61 72 72 61 e the items arra
8b40: 79 0a 20 20 20 20 6f 6c 64 49 74 65 6d 73 20 3d y. oldItems =
8b50: 20 69 74 65 6d 73 2e 73 6c 69 63 65 28 29 0a 0a items.slice()..
8b60: 20 20 7d 29 0a 0a 7d 0a 2f 2a 2a 0a 20 2a 20 4f })..}./**. * O
8b70: 62 6a 65 63 74 20 74 68 61 74 20 77 69 6c 6c 20 bject that will
8b80: 62 65 20 75 73 65 64 20 74 6f 20 69 6e 6a 65 63 be used to injec
8b90: 74 20 61 6e 64 20 6d 61 6e 61 67 65 20 74 68 65 t and manage the
8ba0: 20 63 73 73 20 6f 66 20 65 76 65 72 79 20 74 61 css of every ta
8bb0: 67 20 69 6e 73 74 61 6e 63 65 0a 20 2a 2f 0a 76 g instance. */.v
8bc0: 61 72 20 73 74 79 6c 65 4d 61 6e 61 67 65 72 20 ar styleManager
8bd0: 3d 20 28 66 75 6e 63 74 69 6f 6e 28 5f 72 69 6f = (function(_rio
8be0: 74 29 20 7b 0a 0a 20 20 69 66 20 28 21 77 69 6e t) {.. if (!win
8bf0: 64 6f 77 29 20 72 65 74 75 72 6e 20 7b 20 2f 2f dow) return { //
8c00: 20 73 6b 69 70 20 69 6e 6a 65 63 74 69 6f 6e 20 skip injection
8c10: 6f 6e 20 74 68 65 20 73 65 72 76 65 72 0a 20 20 on the server.
8c20: 20 20 61 64 64 3a 20 66 75 6e 63 74 69 6f 6e 20 add: function
8c30: 28 29 20 7b 7d 2c 0a 20 20 20 20 69 6e 6a 65 63 () {},. injec
8c40: 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b t: function () {
8c50: 7d 0a 20 20 7d 0a 0a 20 20 76 61 72 20 73 74 79 }. }.. var sty
8c60: 6c 65 4e 6f 64 65 20 3d 20 28 66 75 6e 63 74 69 leNode = (functi
8c70: 6f 6e 20 28 29 20 7b 0a 20 20 20 20 2f 2f 20 63 on () {. // c
8c80: 72 65 61 74 65 20 61 20 6e 65 77 20 73 74 79 6c reate a new styl
8c90: 65 20 65 6c 65 6d 65 6e 74 20 77 69 74 68 20 74 e element with t
8ca0: 68 65 20 63 6f 72 72 65 63 74 20 74 79 70 65 0a he correct type.
8cb0: 20 20 20 20 76 61 72 20 6e 65 77 4e 6f 64 65 20 var newNode
8cc0: 3d 20 6d 6b 45 6c 28 27 73 74 79 6c 65 27 29 0a = mkEl('style').
8cd0: 20 20 20 20 73 65 74 41 74 74 72 28 6e 65 77 4e setAttr(newN
8ce0: 6f 64 65 2c 20 27 74 79 70 65 27 2c 20 27 74 65 ode, 'type', 'te
8cf0: 78 74 2f 63 73 73 27 29 0a 0a 20 20 20 20 2f 2f xt/css').. //
8d00: 20 72 65 70 6c 61 63 65 20 61 6e 79 20 75 73 65 replace any use
8d10: 72 20 6e 6f 64 65 20 6f 72 20 69 6e 73 65 72 74 r node or insert
8d20: 20 74 68 65 20 6e 65 77 20 6f 6e 65 20 69 6e 74 the new one int
8d30: 6f 20 74 68 65 20 68 65 61 64 0a 20 20 20 20 76 o the head. v
8d40: 61 72 20 75 73 65 72 4e 6f 64 65 20 3d 20 24 28 ar userNode = $(
8d50: 27 73 74 79 6c 65 5b 74 79 70 65 3d 72 69 6f 74 'style[type=riot
8d60: 5d 27 29 0a 20 20 20 20 69 66 20 28 75 73 65 72 ]'). if (user
8d70: 4e 6f 64 65 29 20 7b 0a 20 20 20 20 20 20 69 66 Node) {. if
8d80: 20 28 75 73 65 72 4e 6f 64 65 2e 69 64 29 20 6e (userNode.id) n
8d90: 65 77 4e 6f 64 65 2e 69 64 20 3d 20 75 73 65 72 ewNode.id = user
8da0: 4e 6f 64 65 2e 69 64 0a 20 20 20 20 20 20 75 73 Node.id. us
8db0: 65 72 4e 6f 64 65 2e 70 61 72 65 6e 74 4e 6f 64 erNode.parentNod
8dc0: 65 2e 72 65 70 6c 61 63 65 43 68 69 6c 64 28 6e e.replaceChild(n
8dd0: 65 77 4e 6f 64 65 2c 20 75 73 65 72 4e 6f 64 65 ewNode, userNode
8de0: 29 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 ). }. else
8df0: 20 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65 document.getEle
8e00: 6d 65 6e 74 73 42 79 54 61 67 4e 61 6d 65 28 27 mentsByTagName('
8e10: 68 65 61 64 27 29 5b 30 5d 2e 61 70 70 65 6e 64 head')[0].append
8e20: 43 68 69 6c 64 28 6e 65 77 4e 6f 64 65 29 0a 0a Child(newNode)..
8e30: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 4e 6f return newNo
8e40: 64 65 0a 20 20 7d 29 28 29 0a 0a 20 20 2f 2f 20 de. })().. //
8e50: 43 72 65 61 74 65 20 63 61 63 68 65 20 61 6e 64 Create cache and
8e60: 20 73 68 6f 72 74 63 75 74 20 74 6f 20 74 68 65 shortcut to the
8e70: 20 63 6f 72 72 65 63 74 20 70 72 6f 70 65 72 74 correct propert
8e80: 79 0a 20 20 76 61 72 20 63 73 73 54 65 78 74 50 y. var cssTextP
8e90: 72 6f 70 20 3d 20 73 74 79 6c 65 4e 6f 64 65 2e rop = styleNode.
8ea0: 73 74 79 6c 65 53 68 65 65 74 2c 0a 20 20 20 20 styleSheet,.
8eb0: 73 74 79 6c 65 73 54 6f 49 6e 6a 65 63 74 20 3d stylesToInject =
8ec0: 20 27 27 0a 0a 20 20 2f 2f 20 45 78 70 6f 73 65 ''.. // Expose
8ed0: 20 74 68 65 20 73 74 79 6c 65 20 6e 6f 64 65 20 the style node
8ee0: 69 6e 20 61 20 6e 6f 6e 2d 6d 6f 64 69 66 69 63 in a non-modific
8ef0: 61 62 6c 65 20 70 72 6f 70 65 72 74 79 0a 20 20 able property.
8f00: 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f Object.definePro
8f10: 70 65 72 74 79 28 5f 72 69 6f 74 2c 20 27 73 74 perty(_riot, 'st
8f20: 79 6c 65 4e 6f 64 65 27 2c 20 7b 0a 20 20 20 20 yleNode', {.
8f30: 76 61 6c 75 65 3a 20 73 74 79 6c 65 4e 6f 64 65 value: styleNode
8f40: 2c 0a 20 20 20 20 77 72 69 74 61 62 6c 65 3a 20 ,. writable:
8f50: 74 72 75 65 0a 20 20 7d 29 0a 0a 20 20 2f 2a 2a true. }).. /**
8f60: 0a 20 20 20 2a 20 50 75 62 6c 69 63 20 61 70 69 . * Public api
8f70: 0a 20 20 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 . */. return
8f80: 7b 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a {. /**. *
8f90: 20 53 61 76 65 20 61 20 74 61 67 20 73 74 79 6c Save a tag styl
8fa0: 65 20 74 6f 20 62 65 20 6c 61 74 65 72 20 69 6e e to be later in
8fb0: 6a 65 63 74 65 64 20 69 6e 74 6f 20 44 4f 4d 0a jected into DOM.
8fc0: 20 20 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20 * @param
8fd0: 7b 20 53 74 72 69 6e 67 20 7d 20 63 73 73 20 5b { String } css [
8fe0: 64 65 73 63 72 69 70 74 69 6f 6e 5d 0a 20 20 20 description].
8ff0: 20 20 2a 2f 0a 20 20 20 20 61 64 64 3a 20 66 75 */. add: fu
9000: 6e 63 74 69 6f 6e 28 63 73 73 29 20 7b 0a 20 20 nction(css) {.
9010: 20 20 20 20 73 74 79 6c 65 73 54 6f 49 6e 6a 65 stylesToInje
9020: 63 74 20 2b 3d 20 63 73 73 0a 20 20 20 20 7d 2c ct += css. },
9030: 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 . /**. *
9040: 49 6e 6a 65 63 74 20 61 6c 6c 20 70 72 65 76 69 Inject all previ
9050: 6f 75 73 6c 79 20 73 61 76 65 64 20 74 61 67 20 ously saved tag
9060: 73 74 79 6c 65 73 20 69 6e 74 6f 20 44 4f 4d 0a styles into DOM.
9070: 20 20 20 20 20 2a 20 69 6e 6e 65 72 48 54 4d 4c * innerHTML
9080: 20 73 65 65 6d 73 20 73 6c 6f 77 3a 20 68 74 74 seems slow: htt
9090: 70 3a 2f 2f 6a 73 70 65 72 66 2e 63 6f 6d 2f 72 p://jsperf.com/r
90a0: 69 6f 74 2d 69 6e 73 65 72 74 2d 73 74 79 6c 65 iot-insert-style
90b0: 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 69 6e 6a . */. inj
90c0: 65 63 74 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 ect: function()
90d0: 7b 0a 20 20 20 20 20 20 69 66 20 28 73 74 79 6c {. if (styl
90e0: 65 73 54 6f 49 6e 6a 65 63 74 29 20 7b 0a 20 20 esToInject) {.
90f0: 20 20 20 20 20 20 69 66 20 28 63 73 73 54 65 78 if (cssTex
9100: 74 50 72 6f 70 29 20 63 73 73 54 65 78 74 50 72 tProp) cssTextPr
9110: 6f 70 2e 63 73 73 54 65 78 74 20 2b 3d 20 73 74 op.cssText += st
9120: 79 6c 65 73 54 6f 49 6e 6a 65 63 74 0a 20 20 20 ylesToInject.
9130: 20 20 20 20 20 65 6c 73 65 20 73 74 79 6c 65 4e else styleN
9140: 6f 64 65 2e 69 6e 6e 65 72 48 54 4d 4c 20 2b 3d ode.innerHTML +=
9150: 20 73 74 79 6c 65 73 54 6f 49 6e 6a 65 63 74 0a stylesToInject.
9160: 20 20 20 20 20 20 20 20 73 74 79 6c 65 73 54 6f stylesTo
9170: 49 6e 6a 65 63 74 20 3d 20 27 27 0a 20 20 20 20 Inject = ''.
9180: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 7d }. }. }..}
9190: 29 28 72 69 6f 74 29 0a 0a 0a 66 75 6e 63 74 69 )(riot)...functi
91a0: 6f 6e 20 70 61 72 73 65 4e 61 6d 65 64 45 6c 65 on parseNamedEle
91b0: 6d 65 6e 74 73 28 72 6f 6f 74 2c 20 74 61 67 2c ments(root, tag,
91c0: 20 63 68 69 6c 64 54 61 67 73 2c 20 66 6f 72 63 childTags, forc
91d0: 65 50 61 72 73 69 6e 67 4e 61 6d 65 64 29 20 7b eParsingNamed) {
91e0: 0a 0a 20 20 77 61 6c 6b 28 72 6f 6f 74 2c 20 66 .. walk(root, f
91f0: 75 6e 63 74 69 6f 6e 28 64 6f 6d 29 20 7b 0a 20 unction(dom) {.
9200: 20 20 20 69 66 20 28 64 6f 6d 2e 6e 6f 64 65 54 if (dom.nodeT
9210: 79 70 65 20 3d 3d 20 31 29 20 7b 0a 20 20 20 20 ype == 1) {.
9220: 20 20 64 6f 6d 2e 69 73 4c 6f 6f 70 20 3d 20 64 dom.isLoop = d
9230: 6f 6d 2e 69 73 4c 6f 6f 70 20 7c 7c 0a 20 20 20 om.isLoop ||.
9240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
9250: 64 6f 6d 2e 70 61 72 65 6e 74 4e 6f 64 65 20 26 dom.parentNode &
9260: 26 20 64 6f 6d 2e 70 61 72 65 6e 74 4e 6f 64 65 & dom.parentNode
9270: 2e 69 73 4c 6f 6f 70 20 7c 7c 20 67 65 74 41 74 .isLoop || getAt
9280: 74 72 28 64 6f 6d 2c 20 27 65 61 63 68 27 29 29 tr(dom, 'each'))
9290: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
92a0: 20 20 20 20 20 3f 20 31 20 3a 20 30 0a 0a 20 20 ? 1 : 0..
92b0: 20 20 20 20 2f 2f 20 63 75 73 74 6f 6d 20 63 68 // custom ch
92c0: 69 6c 64 20 74 61 67 0a 20 20 20 20 20 20 69 66 ild tag. if
92d0: 20 28 63 68 69 6c 64 54 61 67 73 29 20 7b 0a 20 (childTags) {.
92e0: 20 20 20 20 20 20 20 76 61 72 20 63 68 69 6c 64 var child
92f0: 20 3d 20 67 65 74 54 61 67 28 64 6f 6d 29 0a 0a = getTag(dom)..
9300: 20 20 20 20 20 20 20 20 69 66 20 28 63 68 69 6c if (chil
9310: 64 20 26 26 20 21 64 6f 6d 2e 69 73 4c 6f 6f 70 d && !dom.isLoop
9320: 29 0a 20 20 20 20 20 20 20 20 20 20 63 68 69 6c ). chil
9330: 64 54 61 67 73 2e 70 75 73 68 28 69 6e 69 74 43 dTags.push(initC
9340: 68 69 6c 64 54 61 67 28 63 68 69 6c 64 2c 20 7b hildTag(child, {
9350: 72 6f 6f 74 3a 20 64 6f 6d 2c 20 70 61 72 65 6e root: dom, paren
9360: 74 3a 20 74 61 67 7d 2c 20 64 6f 6d 2e 69 6e 6e t: tag}, dom.inn
9370: 65 72 48 54 4d 4c 2c 20 74 61 67 29 29 0a 20 20 erHTML, tag)).
9380: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 20 }.. if
9390: 28 21 64 6f 6d 2e 69 73 4c 6f 6f 70 20 7c 7c 20 (!dom.isLoop ||
93a0: 66 6f 72 63 65 50 61 72 73 69 6e 67 4e 61 6d 65 forceParsingName
93b0: 64 29 0a 20 20 20 20 20 20 20 20 73 65 74 4e 61 d). setNa
93c0: 6d 65 64 28 64 6f 6d 2c 20 74 61 67 2c 20 5b 5d med(dom, tag, []
93d0: 29 0a 20 20 20 20 7d 0a 0a 20 20 7d 29 0a 0a 7d ). }.. })..}
93e0: 0a 0a 66 75 6e 63 74 69 6f 6e 20 70 61 72 73 65 ..function parse
93f0: 45 78 70 72 65 73 73 69 6f 6e 73 28 72 6f 6f 74 Expressions(root
9400: 2c 20 74 61 67 2c 20 65 78 70 72 65 73 73 69 6f , tag, expressio
9410: 6e 73 29 20 7b 0a 0a 20 20 66 75 6e 63 74 69 6f ns) {.. functio
9420: 6e 20 61 64 64 45 78 70 72 28 64 6f 6d 2c 20 76 n addExpr(dom, v
9430: 61 6c 2c 20 65 78 74 72 61 29 20 7b 0a 20 20 20 al, extra) {.
9440: 20 69 66 20 28 74 6d 70 6c 2e 68 61 73 45 78 70 if (tmpl.hasExp
9450: 72 28 76 61 6c 29 29 20 7b 0a 20 20 20 20 20 20 r(val)) {.
9460: 65 78 70 72 65 73 73 69 6f 6e 73 2e 70 75 73 68 expressions.push
9470: 28 65 78 74 65 6e 64 28 7b 20 64 6f 6d 3a 20 64 (extend({ dom: d
9480: 6f 6d 2c 20 65 78 70 72 3a 20 76 61 6c 20 7d 2c om, expr: val },
9490: 20 65 78 74 72 61 29 29 0a 20 20 20 20 7d 0a 20 extra)). }.
94a0: 20 7d 0a 0a 20 20 77 61 6c 6b 28 72 6f 6f 74 2c }.. walk(root,
94b0: 20 66 75 6e 63 74 69 6f 6e 28 64 6f 6d 29 20 7b function(dom) {
94c0: 0a 20 20 20 20 76 61 72 20 74 79 70 65 20 3d 20 . var type =
94d0: 64 6f 6d 2e 6e 6f 64 65 54 79 70 65 2c 0a 20 20 dom.nodeType,.
94e0: 20 20 20 20 61 74 74 72 0a 0a 20 20 20 20 2f 2f attr.. //
94f0: 20 74 65 78 74 20 6e 6f 64 65 0a 20 20 20 20 69 text node. i
9500: 66 20 28 74 79 70 65 20 3d 3d 20 33 20 26 26 20 f (type == 3 &&
9510: 64 6f 6d 2e 70 61 72 65 6e 74 4e 6f 64 65 2e 74 dom.parentNode.t
9520: 61 67 4e 61 6d 65 20 21 3d 20 27 53 54 59 4c 45 agName != 'STYLE
9530: 27 29 20 61 64 64 45 78 70 72 28 64 6f 6d 2c 20 ') addExpr(dom,
9540: 64 6f 6d 2e 6e 6f 64 65 56 61 6c 75 65 29 0a 20 dom.nodeValue).
9550: 20 20 20 69 66 20 28 74 79 70 65 20 21 3d 20 31 if (type != 1
9560: 29 20 72 65 74 75 72 6e 0a 0a 20 20 20 20 2f 2a ) return.. /*
9570: 20 65 6c 65 6d 65 6e 74 20 2a 2f 0a 0a 20 20 20 element */..
9580: 20 2f 2f 20 6c 6f 6f 70 0a 20 20 20 20 61 74 74 // loop. att
9590: 72 20 3d 20 67 65 74 41 74 74 72 28 64 6f 6d 2c r = getAttr(dom,
95a0: 20 27 65 61 63 68 27 29 0a 0a 20 20 20 20 69 66 'each').. if
95b0: 20 28 61 74 74 72 29 20 7b 20 5f 65 61 63 68 28 (attr) { _each(
95c0: 64 6f 6d 2c 20 74 61 67 2c 20 61 74 74 72 29 3b dom, tag, attr);
95d0: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 20 7d 0a return false }.
95e0: 0a 20 20 20 20 2f 2f 20 61 74 74 72 69 62 75 74 . // attribut
95f0: 65 20 65 78 70 72 65 73 73 69 6f 6e 73 0a 20 20 e expressions.
9600: 20 20 65 61 63 68 28 64 6f 6d 2e 61 74 74 72 69 each(dom.attri
9610: 62 75 74 65 73 2c 20 66 75 6e 63 74 69 6f 6e 28 butes, function(
9620: 61 74 74 72 29 20 7b 0a 20 20 20 20 20 20 76 61 attr) {. va
9630: 72 20 6e 61 6d 65 20 3d 20 61 74 74 72 2e 6e 61 r name = attr.na
9640: 6d 65 2c 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c me,. bool
9650: 20 3d 20 6e 61 6d 65 2e 73 70 6c 69 74 28 27 5f = name.split('_
9660: 5f 27 29 5b 31 5d 0a 0a 20 20 20 20 20 20 61 64 _')[1].. ad
9670: 64 45 78 70 72 28 64 6f 6d 2c 20 61 74 74 72 2e dExpr(dom, attr.
9680: 76 61 6c 75 65 2c 20 7b 20 61 74 74 72 3a 20 62 value, { attr: b
9690: 6f 6f 6c 20 7c 7c 20 6e 61 6d 65 2c 20 62 6f 6f ool || name, boo
96a0: 6c 3a 20 62 6f 6f 6c 20 7d 29 0a 20 20 20 20 20 l: bool }).
96b0: 20 69 66 20 28 62 6f 6f 6c 29 20 7b 20 72 65 6d if (bool) { rem
96c0: 41 74 74 72 28 64 6f 6d 2c 20 6e 61 6d 65 29 3b Attr(dom, name);
96d0: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 20 7d 0a return false }.
96e0: 0a 20 20 20 20 7d 29 0a 0a 20 20 20 20 2f 2f 20 . }).. //
96f0: 73 6b 69 70 20 63 75 73 74 6f 6d 20 74 61 67 73 skip custom tags
9700: 0a 20 20 20 20 69 66 20 28 67 65 74 54 61 67 28 . if (getTag(
9710: 64 6f 6d 29 29 20 72 65 74 75 72 6e 20 66 61 6c dom)) return fal
9720: 73 65 0a 0a 20 20 7d 29 0a 0a 7d 0a 66 75 6e 63 se.. })..}.func
9730: 74 69 6f 6e 20 54 61 67 28 69 6d 70 6c 2c 20 63 tion Tag(impl, c
9740: 6f 6e 66 2c 20 69 6e 6e 65 72 48 54 4d 4c 29 20 onf, innerHTML)
9750: 7b 0a 0a 20 20 76 61 72 20 73 65 6c 66 20 3d 20 {.. var self =
9760: 72 69 6f 74 2e 6f 62 73 65 72 76 61 62 6c 65 28 riot.observable(
9770: 74 68 69 73 29 2c 0a 20 20 20 20 6f 70 74 73 20 this),. opts
9780: 3d 20 69 6e 68 65 72 69 74 28 63 6f 6e 66 2e 6f = inherit(conf.o
9790: 70 74 73 29 20 7c 7c 20 7b 7d 2c 0a 20 20 20 20 pts) || {},.
97a0: 70 61 72 65 6e 74 20 3d 20 63 6f 6e 66 2e 70 61 parent = conf.pa
97b0: 72 65 6e 74 2c 0a 20 20 20 20 69 73 4c 6f 6f 70 rent,. isLoop
97c0: 20 3d 20 63 6f 6e 66 2e 69 73 4c 6f 6f 70 2c 0a = conf.isLoop,.
97d0: 20 20 20 20 68 61 73 49 6d 70 6c 20 3d 20 63 6f hasImpl = co
97e0: 6e 66 2e 68 61 73 49 6d 70 6c 2c 0a 20 20 20 20 nf.hasImpl,.
97f0: 69 74 65 6d 20 3d 20 63 6c 65 61 6e 55 70 44 61 item = cleanUpDa
9800: 74 61 28 63 6f 6e 66 2e 69 74 65 6d 29 2c 0a 20 ta(conf.item),.
9810: 20 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20 3d expressions =
9820: 20 5b 5d 2c 0a 20 20 20 20 63 68 69 6c 64 54 61 [],. childTa
9830: 67 73 20 3d 20 5b 5d 2c 0a 20 20 20 20 72 6f 6f gs = [],. roo
9840: 74 20 3d 20 63 6f 6e 66 2e 72 6f 6f 74 2c 0a 20 t = conf.root,.
9850: 20 20 20 74 61 67 4e 61 6d 65 20 3d 20 72 6f 6f tagName = roo
9860: 74 2e 74 61 67 4e 61 6d 65 2e 74 6f 4c 6f 77 65 t.tagName.toLowe
9870: 72 43 61 73 65 28 29 2c 0a 20 20 20 20 61 74 74 rCase(),. att
9880: 72 20 3d 20 7b 7d 2c 0a 20 20 20 20 70 72 6f 70 r = {},. prop
9890: 73 49 6e 53 79 6e 63 57 69 74 68 50 61 72 65 6e sInSyncWithParen
98a0: 74 20 3d 20 5b 5d 2c 0a 20 20 20 20 64 6f 6d 0a t = [],. dom.
98b0: 0a 20 20 2f 2f 20 6f 6e 6c 79 20 63 61 6c 6c 20 . // only call
98c0: 75 6e 6d 6f 75 6e 74 20 69 66 20 77 65 20 68 61 unmount if we ha
98d0: 76 65 20 61 20 76 61 6c 69 64 20 5f 5f 74 61 67 ve a valid __tag
98e0: 49 6d 70 6c 20 28 68 61 73 20 6e 61 6d 65 20 70 Impl (has name p
98f0: 72 6f 70 65 72 74 79 29 0a 20 20 69 66 20 28 69 roperty). if (i
9900: 6d 70 6c 2e 6e 61 6d 65 20 26 26 20 72 6f 6f 74 mpl.name && root
9910: 2e 5f 74 61 67 29 20 72 6f 6f 74 2e 5f 74 61 67 ._tag) root._tag
9920: 2e 75 6e 6d 6f 75 6e 74 28 74 72 75 65 29 0a 0a .unmount(true)..
9930: 20 20 2f 2f 20 6e 6f 74 20 79 65 74 20 6d 6f 75 // not yet mou
9940: 6e 74 65 64 0a 20 20 74 68 69 73 2e 69 73 4d 6f nted. this.isMo
9950: 75 6e 74 65 64 20 3d 20 66 61 6c 73 65 0a 20 20 unted = false.
9960: 72 6f 6f 74 2e 69 73 4c 6f 6f 70 20 3d 20 69 73 root.isLoop = is
9970: 4c 6f 6f 70 0a 0a 20 20 2f 2f 20 6b 65 65 70 20 Loop.. // keep
9980: 61 20 72 65 66 65 72 65 6e 63 65 20 74 6f 20 74 a reference to t
9990: 68 65 20 74 61 67 20 6a 75 73 74 20 63 72 65 61 he tag just crea
99a0: 74 65 64 0a 20 20 2f 2f 20 73 6f 20 77 65 20 77 ted. // so we w
99b0: 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 6d ill be able to m
99c0: 6f 75 6e 74 20 74 68 69 73 20 74 61 67 20 6d 75 ount this tag mu
99d0: 6c 74 69 70 6c 65 20 74 69 6d 65 73 0a 20 20 72 ltiple times. r
99e0: 6f 6f 74 2e 5f 74 61 67 20 3d 20 74 68 69 73 0a oot._tag = this.
99f0: 0a 20 20 2f 2f 20 63 72 65 61 74 65 20 61 20 75 . // create a u
9a00: 6e 69 71 75 65 20 69 64 20 74 6f 20 74 68 69 73 nique id to this
9a10: 20 74 61 67 0a 20 20 2f 2f 20 69 74 20 63 6f 75 tag. // it cou
9a20: 6c 64 20 62 65 20 68 61 6e 64 79 20 74 6f 20 75 ld be handy to u
9a30: 73 65 20 69 74 20 61 6c 73 6f 20 74 6f 20 69 6d se it also to im
9a40: 70 72 6f 76 65 20 74 68 65 20 76 69 72 74 75 61 prove the virtua
9a50: 6c 20 64 6f 6d 20 72 65 6e 64 65 72 69 6e 67 20 l dom rendering
9a60: 73 70 65 65 64 0a 20 20 64 65 66 69 6e 65 50 72 speed. definePr
9a70: 6f 70 65 72 74 79 28 74 68 69 73 2c 20 27 5f 72 operty(this, '_r
9a80: 69 6f 74 5f 69 64 27 2c 20 2b 2b 5f 5f 75 69 64 iot_id', ++__uid
9a90: 29 20 2f 2f 20 62 61 73 65 20 31 20 61 6c 6c 6f ) // base 1 allo
9aa0: 77 73 20 74 65 73 74 20 21 74 2e 5f 72 69 6f 74 ws test !t._riot
9ab0: 5f 69 64 0a 0a 20 20 65 78 74 65 6e 64 28 74 68 _id.. extend(th
9ac0: 69 73 2c 20 7b 20 70 61 72 65 6e 74 3a 20 70 61 is, { parent: pa
9ad0: 72 65 6e 74 2c 20 72 6f 6f 74 3a 20 72 6f 6f 74 rent, root: root
9ae0: 2c 20 6f 70 74 73 3a 20 6f 70 74 73 7d 2c 20 69 , opts: opts}, i
9af0: 74 65 6d 29 0a 20 20 2f 2f 20 70 72 6f 74 65 63 tem). // protec
9b00: 74 20 74 68 65 20 22 74 61 67 73 22 20 70 72 6f t the "tags" pro
9b10: 70 65 72 74 79 20 66 72 6f 6d 20 62 65 69 6e 67 perty from being
9b20: 20 6f 76 65 72 72 69 64 64 65 6e 0a 20 20 64 65 overridden. de
9b30: 66 69 6e 65 50 72 6f 70 65 72 74 79 28 74 68 69 fineProperty(thi
9b40: 73 2c 20 27 74 61 67 73 27 2c 20 7b 7d 29 0a 0a s, 'tags', {})..
9b50: 20 20 2f 2f 20 67 72 61 62 20 61 74 74 72 69 62 // grab attrib
9b60: 75 74 65 73 0a 20 20 65 61 63 68 28 72 6f 6f 74 utes. each(root
9b70: 2e 61 74 74 72 69 62 75 74 65 73 2c 20 66 75 6e .attributes, fun
9b80: 63 74 69 6f 6e 28 65 6c 29 20 7b 0a 20 20 20 20 ction(el) {.
9b90: 76 61 72 20 76 61 6c 20 3d 20 65 6c 2e 76 61 6c var val = el.val
9ba0: 75 65 0a 20 20 20 20 2f 2f 20 72 65 6d 65 6d 62 ue. // rememb
9bb0: 65 72 20 61 74 74 72 69 62 75 74 65 73 20 77 69 er attributes wi
9bc0: 74 68 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f th expressions o
9bd0: 6e 6c 79 0a 20 20 20 20 69 66 20 28 74 6d 70 6c nly. if (tmpl
9be0: 2e 68 61 73 45 78 70 72 28 76 61 6c 29 29 20 61 .hasExpr(val)) a
9bf0: 74 74 72 5b 65 6c 2e 6e 61 6d 65 5d 20 3d 20 76 ttr[el.name] = v
9c00: 61 6c 0a 20 20 7d 29 0a 0a 20 20 64 6f 6d 20 3d al. }).. dom =
9c10: 20 6d 6b 64 6f 6d 28 69 6d 70 6c 2e 74 6d 70 6c mkdom(impl.tmpl
9c20: 2c 20 69 6e 6e 65 72 48 54 4d 4c 29 0a 0a 20 20 , innerHTML)..
9c30: 2f 2f 20 6f 70 74 69 6f 6e 73 0a 20 20 66 75 6e // options. fun
9c40: 63 74 69 6f 6e 20 75 70 64 61 74 65 4f 70 74 73 ction updateOpts
9c50: 28 29 20 7b 0a 20 20 20 20 76 61 72 20 63 74 78 () {. var ctx
9c60: 20 3d 20 68 61 73 49 6d 70 6c 20 26 26 20 69 73 = hasImpl && is
9c70: 4c 6f 6f 70 20 3f 20 73 65 6c 66 20 3a 20 70 61 Loop ? self : pa
9c80: 72 65 6e 74 20 7c 7c 20 73 65 6c 66 0a 0a 20 20 rent || self..
9c90: 20 20 2f 2f 20 75 70 64 61 74 65 20 6f 70 74 73 // update opts
9ca0: 20 66 72 6f 6d 20 63 75 72 72 65 6e 74 20 44 4f from current DO
9cb0: 4d 20 61 74 74 72 69 62 75 74 65 73 0a 20 20 20 M attributes.
9cc0: 20 65 61 63 68 28 72 6f 6f 74 2e 61 74 74 72 69 each(root.attri
9cd0: 62 75 74 65 73 2c 20 66 75 6e 63 74 69 6f 6e 28 butes, function(
9ce0: 65 6c 29 20 7b 0a 20 20 20 20 20 20 76 61 72 20 el) {. var
9cf0: 76 61 6c 20 3d 20 65 6c 2e 76 61 6c 75 65 0a 20 val = el.value.
9d00: 20 20 20 20 20 6f 70 74 73 5b 74 6f 43 61 6d 65 opts[toCame
9d10: 6c 28 65 6c 2e 6e 61 6d 65 29 5d 20 3d 20 74 6d l(el.name)] = tm
9d20: 70 6c 2e 68 61 73 45 78 70 72 28 76 61 6c 29 20 pl.hasExpr(val)
9d30: 3f 20 74 6d 70 6c 28 76 61 6c 2c 20 63 74 78 29 ? tmpl(val, ctx)
9d40: 20 3a 20 76 61 6c 0a 20 20 20 20 7d 29 0a 20 20 : val. }).
9d50: 20 20 2f 2f 20 72 65 63 6f 76 65 72 20 74 68 6f // recover tho
9d60: 73 65 20 77 69 74 68 20 65 78 70 72 65 73 73 69 se with expressi
9d70: 6f 6e 73 0a 20 20 20 20 65 61 63 68 28 4f 62 6a ons. each(Obj
9d80: 65 63 74 2e 6b 65 79 73 28 61 74 74 72 29 2c 20 ect.keys(attr),
9d90: 66 75 6e 63 74 69 6f 6e 28 6e 61 6d 65 29 20 7b function(name) {
9da0: 0a 20 20 20 20 20 20 6f 70 74 73 5b 74 6f 43 61 . opts[toCa
9db0: 6d 65 6c 28 6e 61 6d 65 29 5d 20 3d 20 74 6d 70 mel(name)] = tmp
9dc0: 6c 28 61 74 74 72 5b 6e 61 6d 65 5d 2c 20 63 74 l(attr[name], ct
9dd0: 78 29 0a 20 20 20 20 7d 29 0a 20 20 7d 0a 0a 20 x). }). }..
9de0: 20 66 75 6e 63 74 69 6f 6e 20 6e 6f 72 6d 61 6c function normal
9df0: 69 7a 65 44 61 74 61 28 64 61 74 61 29 20 7b 0a izeData(data) {.
9e00: 20 20 20 20 66 6f 72 20 28 76 61 72 20 6b 65 79 for (var key
9e10: 20 69 6e 20 69 74 65 6d 29 20 7b 0a 20 20 20 20 in item) {.
9e20: 20 20 69 66 20 28 74 79 70 65 6f 66 20 73 65 6c if (typeof sel
9e30: 66 5b 6b 65 79 5d 20 21 3d 3d 20 54 5f 55 4e 44 f[key] !== T_UND
9e40: 45 46 20 26 26 20 69 73 57 72 69 74 61 62 6c 65 EF && isWritable
9e50: 28 73 65 6c 66 2c 20 6b 65 79 29 29 0a 20 20 20 (self, key)).
9e60: 20 20 20 20 20 73 65 6c 66 5b 6b 65 79 5d 20 3d self[key] =
9e70: 20 64 61 74 61 5b 6b 65 79 5d 0a 20 20 20 20 7d data[key]. }
9e80: 0a 20 20 7d 0a 0a 20 20 66 75 6e 63 74 69 6f 6e . }.. function
9e90: 20 69 6e 68 65 72 69 74 46 72 6f 6d 28 74 61 72 inheritFrom(tar
9ea0: 67 65 74 29 20 7b 0a 20 20 20 20 65 61 63 68 28 get) {. each(
9eb0: 4f 62 6a 65 63 74 2e 6b 65 79 73 28 74 61 72 67 Object.keys(targ
9ec0: 65 74 29 2c 20 66 75 6e 63 74 69 6f 6e 28 6b 29 et), function(k)
9ed0: 20 7b 0a 20 20 20 20 20 20 2f 2f 20 73 6f 6d 65 {. // some
9ee0: 20 70 72 6f 70 65 72 74 69 65 73 20 6d 75 73 74 properties must
9ef0: 20 62 65 20 61 6c 77 61 79 73 20 69 6e 20 73 79 be always in sy
9f00: 6e 63 20 77 69 74 68 20 74 68 65 20 70 61 72 65 nc with the pare
9f10: 6e 74 20 74 61 67 0a 20 20 20 20 20 20 76 61 72 nt tag. var
9f20: 20 6d 75 73 74 53 79 6e 63 20 3d 20 21 52 45 53 mustSync = !RES
9f30: 45 52 56 45 44 5f 57 4f 52 44 53 5f 42 4c 41 43 ERVED_WORDS_BLAC
9f40: 4b 4c 49 53 54 2e 74 65 73 74 28 6b 29 20 26 26 KLIST.test(k) &&
9f50: 20 63 6f 6e 74 61 69 6e 73 28 70 72 6f 70 73 49 contains(propsI
9f60: 6e 53 79 6e 63 57 69 74 68 50 61 72 65 6e 74 2c nSyncWithParent,
9f70: 20 6b 29 0a 0a 20 20 20 20 20 20 69 66 20 28 74 k).. if (t
9f80: 79 70 65 6f 66 20 73 65 6c 66 5b 6b 5d 20 3d 3d ypeof self[k] ==
9f90: 3d 20 54 5f 55 4e 44 45 46 20 7c 7c 20 6d 75 73 = T_UNDEF || mus
9fa0: 74 53 79 6e 63 29 20 7b 0a 20 20 20 20 20 20 20 tSync) {.
9fb0: 20 2f 2f 20 74 72 61 63 6b 20 74 68 65 20 70 72 // track the pr
9fc0: 6f 70 65 72 74 79 20 74 6f 20 6b 65 65 70 20 69 operty to keep i
9fd0: 6e 20 73 79 6e 63 0a 20 20 20 20 20 20 20 20 2f n sync. /
9fe0: 2f 20 73 6f 20 77 65 20 63 61 6e 20 6b 65 65 70 / so we can keep
9ff0: 20 69 74 20 75 70 64 61 74 65 64 0a 20 20 20 20 it updated.
a000: 20 20 20 20 69 66 20 28 21 6d 75 73 74 53 79 6e if (!mustSyn
a010: 63 29 20 70 72 6f 70 73 49 6e 53 79 6e 63 57 69 c) propsInSyncWi
a020: 74 68 50 61 72 65 6e 74 2e 70 75 73 68 28 6b 29 thParent.push(k)
a030: 0a 20 20 20 20 20 20 20 20 73 65 6c 66 5b 6b 5d . self[k]
a040: 20 3d 20 74 61 72 67 65 74 5b 6b 5d 0a 20 20 20 = target[k].
a050: 20 20 20 7d 0a 20 20 20 20 7d 29 0a 20 20 7d 0a }. }). }.
a060: 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 55 70 64 61 . /**. * Upda
a070: 74 65 20 74 68 65 20 74 61 67 20 65 78 70 72 65 te the tag expre
a080: 73 73 69 6f 6e 73 20 61 6e 64 20 6f 70 74 69 6f ssions and optio
a090: 6e 73 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20 ns. * @param
a0a0: 20 7b 20 2a 20 7d 20 20 64 61 74 61 20 2d 20 64 { * } data - d
a0b0: 61 74 61 20 77 65 20 77 61 6e 74 20 74 6f 20 75 ata we want to u
a0c0: 73 65 20 74 6f 20 65 78 74 65 6e 64 20 74 68 65 se to extend the
a0d0: 20 74 61 67 20 70 72 6f 70 65 72 74 69 65 73 0a tag properties.
a0e0: 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 * @param {
a0f0: 42 6f 6f 6c 65 61 6e 20 7d 20 69 73 49 6e 68 65 Boolean } isInhe
a100: 72 69 74 65 64 20 2d 20 69 73 20 74 68 69 73 20 rited - is this
a110: 75 70 64 61 74 65 20 63 6f 6d 69 6e 67 20 66 72 update coming fr
a120: 6f 6d 20 61 20 70 61 72 65 6e 74 20 74 61 67 3f om a parent tag?
a130: 0a 20 20 20 2a 20 40 72 65 74 75 72 6e 73 20 7b . * @returns {
a140: 20 73 65 6c 66 20 7d 0a 20 20 20 2a 2f 0a 20 20 self }. */.
a150: 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28 74 defineProperty(t
a160: 68 69 73 2c 20 27 75 70 64 61 74 65 27 2c 20 66 his, 'update', f
a170: 75 6e 63 74 69 6f 6e 28 64 61 74 61 2c 20 69 73 unction(data, is
a180: 49 6e 68 65 72 69 74 65 64 29 20 7b 0a 0a 20 20 Inherited) {..
a190: 20 20 2f 2f 20 6d 61 6b 65 20 73 75 72 65 20 74 // make sure t
a1a0: 68 65 20 64 61 74 61 20 70 61 73 73 65 64 20 77 he data passed w
a1b0: 69 6c 6c 20 6e 6f 74 20 6f 76 65 72 72 69 64 65 ill not override
a1c0: 0a 20 20 20 20 2f 2f 20 74 68 65 20 63 6f 6d 70 . // the comp
a1d0: 6f 6e 65 6e 74 20 63 6f 72 65 20 6d 65 74 68 6f onent core metho
a1e0: 64 73 0a 20 20 20 20 64 61 74 61 20 3d 20 63 6c ds. data = cl
a1f0: 65 61 6e 55 70 44 61 74 61 28 64 61 74 61 29 0a eanUpData(data).
a200: 20 20 20 20 2f 2f 20 69 6e 68 65 72 69 74 20 70 // inherit p
a210: 72 6f 70 65 72 74 69 65 73 20 66 72 6f 6d 20 74 roperties from t
a220: 68 65 20 70 61 72 65 6e 74 20 69 6e 20 6c 6f 6f he parent in loo
a230: 70 0a 20 20 20 20 69 66 20 28 69 73 4c 6f 6f 70 p. if (isLoop
a240: 29 20 7b 0a 20 20 20 20 20 20 69 6e 68 65 72 69 ) {. inheri
a250: 74 46 72 6f 6d 28 73 65 6c 66 2e 70 61 72 65 6e tFrom(self.paren
a260: 74 29 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2f 20 t). }. //
a270: 6e 6f 72 6d 61 6c 69 7a 65 20 74 68 65 20 74 61 normalize the ta
a280: 67 20 70 72 6f 70 65 72 74 69 65 73 20 69 6e 20 g properties in
a290: 63 61 73 65 20 61 6e 20 69 74 65 6d 20 6f 62 6a case an item obj
a2a0: 65 63 74 20 77 61 73 20 69 6e 69 74 69 61 6c 6c ect was initiall
a2b0: 79 20 70 61 73 73 65 64 0a 20 20 20 20 69 66 20 y passed. if
a2c0: 28 64 61 74 61 20 26 26 20 69 73 4f 62 6a 65 63 (data && isObjec
a2d0: 74 28 69 74 65 6d 29 29 20 7b 0a 20 20 20 20 20 t(item)) {.
a2e0: 20 6e 6f 72 6d 61 6c 69 7a 65 44 61 74 61 28 64 normalizeData(d
a2f0: 61 74 61 29 0a 20 20 20 20 20 20 69 74 65 6d 20 ata). item
a300: 3d 20 64 61 74 61 0a 20 20 20 20 7d 0a 20 20 20 = data. }.
a310: 20 65 78 74 65 6e 64 28 73 65 6c 66 2c 20 64 61 extend(self, da
a320: 74 61 29 0a 20 20 20 20 75 70 64 61 74 65 4f 70 ta). updateOp
a330: 74 73 28 29 0a 20 20 20 20 73 65 6c 66 2e 74 72 ts(). self.tr
a340: 69 67 67 65 72 28 27 75 70 64 61 74 65 27 2c 20 igger('update',
a350: 64 61 74 61 29 0a 20 20 20 20 75 70 64 61 74 65 data). update
a360: 28 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 73 65 (expressions, se
a370: 6c 66 29 0a 0a 20 20 20 20 2f 2f 20 74 68 65 20 lf).. // the
a380: 75 70 64 61 74 65 64 20 65 76 65 6e 74 20 77 69 updated event wi
a390: 6c 6c 20 62 65 20 74 72 69 67 67 65 72 65 64 0a ll be triggered.
a3a0: 20 20 20 20 2f 2f 20 6f 6e 63 65 20 74 68 65 20 // once the
a3b0: 44 4f 4d 20 77 69 6c 6c 20 62 65 20 72 65 61 64 DOM will be read
a3c0: 79 20 61 6e 64 20 61 6c 6c 20 74 68 65 20 72 65 y and all the re
a3d0: 2d 66 6c 6f 77 73 20 61 72 65 20 63 6f 6d 70 6c -flows are compl
a3e0: 65 74 65 64 0a 20 20 20 20 2f 2f 20 74 68 69 73 eted. // this
a3f0: 20 69 73 20 75 73 65 66 75 6c 20 69 66 20 79 6f is useful if yo
a400: 75 20 77 61 6e 74 20 74 6f 20 67 65 74 20 74 68 u want to get th
a410: 65 20 22 72 65 61 6c 22 20 72 6f 6f 74 20 70 72 e "real" root pr
a420: 6f 70 65 72 74 69 65 73 0a 20 20 20 20 2f 2f 20 operties. //
a430: 34 20 65 78 3a 20 72 6f 6f 74 2e 6f 66 66 73 65 4 ex: root.offse
a440: 74 57 69 64 74 68 20 2e 2e 2e 0a 20 20 20 20 69 tWidth .... i
a450: 66 20 28 69 73 49 6e 68 65 72 69 74 65 64 20 26 f (isInherited &
a460: 26 20 73 65 6c 66 2e 70 61 72 65 6e 74 29 0a 20 & self.parent).
a470: 20 20 20 20 20 2f 2f 20 63 6c 6f 73 65 73 20 23 // closes #
a480: 31 35 39 39 0a 20 20 20 20 20 20 73 65 6c 66 2e 1599. self.
a490: 70 61 72 65 6e 74 2e 6f 6e 65 28 27 75 70 64 61 parent.one('upda
a4a0: 74 65 64 27 2c 20 66 75 6e 63 74 69 6f 6e 28 29 ted', function()
a4b0: 20 7b 20 73 65 6c 66 2e 74 72 69 67 67 65 72 28 { self.trigger(
a4c0: 27 75 70 64 61 74 65 64 27 29 20 7d 29 0a 20 20 'updated') }).
a4d0: 20 20 65 6c 73 65 20 72 41 46 28 66 75 6e 63 74 else rAF(funct
a4e0: 69 6f 6e 28 29 20 7b 20 73 65 6c 66 2e 74 72 69 ion() { self.tri
a4f0: 67 67 65 72 28 27 75 70 64 61 74 65 64 27 29 20 gger('updated')
a500: 7d 29 0a 0a 20 20 20 20 72 65 74 75 72 6e 20 74 }).. return t
a510: 68 69 73 0a 20 20 7d 29 0a 0a 20 20 64 65 66 69 his. }).. defi
a520: 6e 65 50 72 6f 70 65 72 74 79 28 74 68 69 73 2c neProperty(this,
a530: 20 27 6d 69 78 69 6e 27 2c 20 66 75 6e 63 74 69 'mixin', functi
a540: 6f 6e 28 29 20 7b 0a 20 20 20 20 65 61 63 68 28 on() {. each(
a550: 61 72 67 75 6d 65 6e 74 73 2c 20 66 75 6e 63 74 arguments, funct
a560: 69 6f 6e 28 6d 69 78 29 20 7b 0a 20 20 20 20 20 ion(mix) {.
a570: 20 76 61 72 20 69 6e 73 74 61 6e 63 65 2c 0a 20 var instance,.
a580: 20 20 20 20 20 20 20 70 72 6f 70 73 20 3d 20 5b props = [
a590: 5d 2c 0a 20 20 20 20 20 20 20 20 6f 62 6a 0a 0a ],. obj..
a5a0: 20 20 20 20 20 20 6d 69 78 20 3d 20 74 79 70 65 mix = type
a5b0: 6f 66 20 6d 69 78 20 3d 3d 3d 20 54 5f 53 54 52 of mix === T_STR
a5c0: 49 4e 47 20 3f 20 72 69 6f 74 2e 6d 69 78 69 6e ING ? riot.mixin
a5d0: 28 6d 69 78 29 20 3a 20 6d 69 78 0a 0a 20 20 20 (mix) : mix..
a5e0: 20 20 20 2f 2f 20 63 68 65 63 6b 20 69 66 20 74 // check if t
a5f0: 68 65 20 6d 69 78 69 6e 20 69 73 20 61 20 66 75 he mixin is a fu
a600: 6e 63 74 69 6f 6e 0a 20 20 20 20 20 20 69 66 20 nction. if
a610: 28 69 73 46 75 6e 63 74 69 6f 6e 28 6d 69 78 29 (isFunction(mix)
a620: 29 20 7b 0a 20 20 20 20 20 20 20 20 2f 2f 20 63 ) {. // c
a630: 72 65 61 74 65 20 74 68 65 20 6e 65 77 20 6d 69 reate the new mi
a640: 78 69 6e 20 69 6e 73 74 61 6e 63 65 0a 20 20 20 xin instance.
a650: 20 20 20 20 20 69 6e 73 74 61 6e 63 65 20 3d 20 instance =
a660: 6e 65 77 20 6d 69 78 28 29 0a 20 20 20 20 20 20 new mix().
a670: 7d 20 65 6c 73 65 20 69 6e 73 74 61 6e 63 65 20 } else instance
a680: 3d 20 6d 69 78 0a 0a 20 20 20 20 20 20 2f 2f 20 = mix.. //
a690: 62 75 69 6c 64 20 6d 75 6c 74 69 6c 65 76 65 6c build multilevel
a6a0: 20 70 72 6f 74 6f 74 79 70 65 20 69 6e 68 65 72 prototype inher
a6b0: 69 74 61 6e 63 65 20 63 68 61 69 6e 20 70 72 6f itance chain pro
a6c0: 70 65 72 74 79 20 6c 69 73 74 0a 20 20 20 20 20 perty list.
a6d0: 20 64 6f 20 70 72 6f 70 73 20 3d 20 70 72 6f 70 do props = prop
a6e0: 73 2e 63 6f 6e 63 61 74 28 4f 62 6a 65 63 74 2e s.concat(Object.
a6f0: 67 65 74 4f 77 6e 50 72 6f 70 65 72 74 79 4e 61 getOwnPropertyNa
a700: 6d 65 73 28 6f 62 6a 20 7c 7c 20 69 6e 73 74 61 mes(obj || insta
a710: 6e 63 65 29 29 0a 20 20 20 20 20 20 77 68 69 6c nce)). whil
a720: 65 20 28 6f 62 6a 20 3d 20 4f 62 6a 65 63 74 2e e (obj = Object.
a730: 67 65 74 50 72 6f 74 6f 74 79 70 65 4f 66 28 6f getPrototypeOf(o
a740: 62 6a 20 7c 7c 20 69 6e 73 74 61 6e 63 65 29 29 bj || instance))
a750: 0a 0a 20 20 20 20 20 20 2f 2f 20 6c 6f 6f 70 20 .. // loop
a760: 74 68 65 20 6b 65 79 73 20 69 6e 20 74 68 65 20 the keys in the
a770: 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 function prototy
a780: 70 65 20 6f 72 20 74 68 65 20 61 6c 6c 20 6f 62 pe or the all ob
a790: 6a 65 63 74 20 6b 65 79 73 0a 20 20 20 20 20 20 ject keys.
a7a0: 65 61 63 68 28 70 72 6f 70 73 2c 20 66 75 6e 63 each(props, func
a7b0: 74 69 6f 6e 28 6b 65 79 29 20 7b 0a 20 20 20 20 tion(key) {.
a7c0: 20 20 20 20 2f 2f 20 62 69 6e 64 20 6d 65 74 68 // bind meth
a7d0: 6f 64 73 20 74 6f 20 73 65 6c 66 0a 20 20 20 20 ods to self.
a7e0: 20 20 20 20 2f 2f 20 61 6c 6c 6f 77 20 6d 69 78 // allow mix
a7f0: 69 6e 73 20 74 6f 20 6f 76 65 72 72 69 64 65 20 ins to override
a800: 6f 74 68 65 72 20 70 72 6f 70 65 72 74 69 65 73 other properties
a810: 2f 70 61 72 65 6e 74 20 6d 69 78 69 6e 73 0a 20 /parent mixins.
a820: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 21 if (key !
a830: 3d 20 27 69 6e 69 74 27 29 20 7b 0a 20 20 20 20 = 'init') {.
a840: 20 20 20 20 20 20 2f 2f 20 63 68 65 63 6b 20 66 // check f
a850: 6f 72 20 67 65 74 74 65 72 73 2f 73 65 74 74 65 or getters/sette
a860: 72 73 0a 20 20 20 20 20 20 20 20 20 20 76 61 72 rs. var
a870: 20 64 65 73 63 72 69 70 74 6f 72 20 3d 20 4f 62 descriptor = Ob
a880: 6a 65 63 74 2e 67 65 74 4f 77 6e 50 72 6f 70 65 ject.getOwnPrope
a890: 72 74 79 44 65 73 63 72 69 70 74 6f 72 28 69 6e rtyDescriptor(in
a8a0: 73 74 61 6e 63 65 2c 20 6b 65 79 29 0a 20 20 20 stance, key).
a8b0: 20 20 20 20 20 20 20 76 61 72 20 68 61 73 47 65 var hasGe
a8c0: 74 74 65 72 53 65 74 74 65 72 20 3d 20 64 65 73 tterSetter = des
a8d0: 63 72 69 70 74 6f 72 20 26 26 20 28 64 65 73 63 criptor && (desc
a8e0: 72 69 70 74 6f 72 2e 67 65 74 20 7c 7c 20 64 65 riptor.get || de
a8f0: 73 63 72 69 70 74 6f 72 2e 73 65 74 29 0a 0a 20 scriptor.set)..
a900: 20 20 20 20 20 20 20 20 20 2f 2f 20 61 70 70 6c // appl
a910: 79 20 6d 65 74 68 6f 64 20 6f 6e 6c 79 20 69 66 y method only if
a920: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 61 6c 72 it does not alr
a930: 65 61 64 79 20 65 78 69 73 74 20 6f 6e 20 74 68 eady exist on th
a940: 65 20 69 6e 73 74 61 6e 63 65 0a 20 20 20 20 20 e instance.
a950: 20 20 20 20 20 69 66 20 28 21 73 65 6c 66 2e 68 if (!self.h
a960: 61 73 4f 77 6e 50 72 6f 70 65 72 74 79 28 6b 65 asOwnProperty(ke
a970: 79 29 20 26 26 20 68 61 73 47 65 74 74 65 72 53 y) && hasGetterS
a980: 65 74 74 65 72 29 20 7b 0a 20 20 20 20 20 20 20 etter) {.
a990: 20 20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 Object.defi
a9a0: 6e 65 50 72 6f 70 65 72 74 79 28 73 65 6c 66 2c neProperty(self,
a9b0: 20 6b 65 79 2c 20 64 65 73 63 72 69 70 74 6f 72 key, descriptor
a9c0: 29 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c ). } el
a9d0: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 se {.
a9e0: 20 73 65 6c 66 5b 6b 65 79 5d 20 3d 20 69 73 46 self[key] = isF
a9f0: 75 6e 63 74 69 6f 6e 28 69 6e 73 74 61 6e 63 65 unction(instance
aa00: 5b 6b 65 79 5d 29 20 3f 0a 20 20 20 20 20 20 20 [key]) ?.
aa10: 20 20 20 20 20 20 20 69 6e 73 74 61 6e 63 65 5b instance[
aa20: 6b 65 79 5d 2e 62 69 6e 64 28 73 65 6c 66 29 20 key].bind(self)
aa30: 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 :.
aa40: 69 6e 73 74 61 6e 63 65 5b 6b 65 79 5d 0a 20 20 instance[key].
aa50: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 }.
aa60: 20 20 7d 0a 20 20 20 20 20 20 7d 29 0a 0a 20 20 }. })..
aa70: 20 20 20 20 2f 2f 20 69 6e 69 74 20 6d 65 74 68 // init meth
aa80: 6f 64 20 77 69 6c 6c 20 62 65 20 63 61 6c 6c 65 od will be calle
aa90: 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a d automatically.
aaa0: 20 20 20 20 20 20 69 66 20 28 69 6e 73 74 61 6e if (instan
aab0: 63 65 2e 69 6e 69 74 29 20 69 6e 73 74 61 6e 63 ce.init) instanc
aac0: 65 2e 69 6e 69 74 2e 62 69 6e 64 28 73 65 6c 66 e.init.bind(self
aad0: 29 28 29 0a 20 20 20 20 7d 29 0a 20 20 20 20 72 )(). }). r
aae0: 65 74 75 72 6e 20 74 68 69 73 0a 20 20 7d 29 0a eturn this. }).
aaf0: 0a 20 20 64 65 66 69 6e 65 50 72 6f 70 65 72 74 . definePropert
ab00: 79 28 74 68 69 73 2c 20 27 6d 6f 75 6e 74 27 2c y(this, 'mount',
ab10: 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 0a 20 function() {..
ab20: 20 20 20 75 70 64 61 74 65 4f 70 74 73 28 29 0a updateOpts().
ab30: 0a 20 20 20 20 2f 2f 20 61 64 64 20 67 6c 6f 62 . // add glob
ab40: 61 6c 20 6d 69 78 69 6e 73 0a 20 20 20 20 76 61 al mixins. va
ab50: 72 20 67 6c 6f 62 61 6c 4d 69 78 69 6e 20 3d 20 r globalMixin =
ab60: 72 69 6f 74 2e 6d 69 78 69 6e 28 47 4c 4f 42 41 riot.mixin(GLOBA
ab70: 4c 5f 4d 49 58 49 4e 29 0a 0a 20 20 20 20 69 66 L_MIXIN).. if
ab80: 20 28 67 6c 6f 62 61 6c 4d 69 78 69 6e 29 0a 20 (globalMixin).
ab90: 20 20 20 20 20 66 6f 72 20 28 76 61 72 20 69 20 for (var i
aba0: 69 6e 20 67 6c 6f 62 61 6c 4d 69 78 69 6e 29 0a in globalMixin).
abb0: 20 20 20 20 20 20 20 20 69 66 20 28 67 6c 6f 62 if (glob
abc0: 61 6c 4d 69 78 69 6e 2e 68 61 73 4f 77 6e 50 72 alMixin.hasOwnPr
abd0: 6f 70 65 72 74 79 28 69 29 29 0a 20 20 20 20 20 operty(i)).
abe0: 20 20 20 20 20 73 65 6c 66 2e 6d 69 78 69 6e 28 self.mixin(
abf0: 67 6c 6f 62 61 6c 4d 69 78 69 6e 5b 69 5d 29 0a globalMixin[i]).
ac00: 0a 20 20 20 20 2f 2f 20 63 68 69 6c 64 72 65 6e . // children
ac10: 20 69 6e 20 6c 6f 6f 70 20 73 68 6f 75 6c 64 20 in loop should
ac20: 69 6e 68 65 72 69 74 20 66 72 6f 6d 20 74 72 75 inherit from tru
ac30: 65 20 70 61 72 65 6e 74 0a 20 20 20 20 69 66 20 e parent. if
ac40: 28 73 65 6c 66 2e 5f 70 61 72 65 6e 74 29 20 7b (self._parent) {
ac50: 0a 20 20 20 20 20 20 69 6e 68 65 72 69 74 46 72 . inheritFr
ac60: 6f 6d 28 73 65 6c 66 2e 5f 70 61 72 65 6e 74 29 om(self._parent)
ac70: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 20 69 . }.. // i
ac80: 6e 69 74 69 61 6c 69 61 74 69 6f 6e 0a 20 20 20 nitialiation.
ac90: 20 69 66 20 28 69 6d 70 6c 2e 66 6e 29 20 69 6d if (impl.fn) im
aca0: 70 6c 2e 66 6e 2e 63 61 6c 6c 28 73 65 6c 66 2c pl.fn.call(self,
acb0: 20 6f 70 74 73 29 0a 0a 20 20 20 20 2f 2f 20 70 opts).. // p
acc0: 61 72 73 65 20 6c 61 79 6f 75 74 20 61 66 74 65 arse layout afte
acd0: 72 20 69 6e 69 74 2e 20 66 6e 20 6d 61 79 20 63 r init. fn may c
ace0: 61 6c 63 75 6c 61 74 65 20 61 72 67 73 20 66 6f alculate args fo
acf0: 72 20 6e 65 73 74 65 64 20 63 75 73 74 6f 6d 20 r nested custom
ad00: 74 61 67 73 0a 20 20 20 20 70 61 72 73 65 45 78 tags. parseEx
ad10: 70 72 65 73 73 69 6f 6e 73 28 64 6f 6d 2c 20 73 pressions(dom, s
ad20: 65 6c 66 2c 20 65 78 70 72 65 73 73 69 6f 6e 73 elf, expressions
ad30: 29 0a 0a 20 20 20 20 2f 2f 20 6d 6f 75 6e 74 20 ).. // mount
ad40: 74 68 65 20 63 68 69 6c 64 20 74 61 67 73 0a 20 the child tags.
ad50: 20 20 20 74 6f 67 67 6c 65 28 74 72 75 65 29 0a toggle(true).
ad60: 0a 20 20 20 20 2f 2f 20 75 70 64 61 74 65 20 74 . // update t
ad70: 68 65 20 72 6f 6f 74 20 61 64 64 69 6e 67 20 63 he root adding c
ad80: 75 73 74 6f 6d 20 61 74 74 72 69 62 75 74 65 73 ustom attributes
ad90: 20 63 6f 6d 69 6e 67 20 66 72 6f 6d 20 74 68 65 coming from the
ada0: 20 63 6f 6d 70 69 6c 65 72 0a 20 20 20 20 2f 2f compiler. //
adb0: 20 69 74 20 66 69 78 65 73 20 61 6c 73 6f 20 23 it fixes also #
adc0: 31 30 38 37 0a 20 20 20 20 69 66 20 28 69 6d 70 1087. if (imp
add0: 6c 2e 61 74 74 72 73 29 0a 20 20 20 20 20 20 77 l.attrs). w
ade0: 61 6c 6b 41 74 74 72 69 62 75 74 65 73 28 69 6d alkAttributes(im
adf0: 70 6c 2e 61 74 74 72 73 2c 20 66 75 6e 63 74 69 pl.attrs, functi
ae00: 6f 6e 20 28 6b 2c 20 76 29 20 7b 20 73 65 74 41 on (k, v) { setA
ae10: 74 74 72 28 72 6f 6f 74 2c 20 6b 2c 20 76 29 20 ttr(root, k, v)
ae20: 7d 29 0a 20 20 20 20 69 66 20 28 69 6d 70 6c 2e }). if (impl.
ae30: 61 74 74 72 73 20 7c 7c 20 68 61 73 49 6d 70 6c attrs || hasImpl
ae40: 29 0a 20 20 20 20 20 20 70 61 72 73 65 45 78 70 ). parseExp
ae50: 72 65 73 73 69 6f 6e 73 28 73 65 6c 66 2e 72 6f ressions(self.ro
ae60: 6f 74 2c 20 73 65 6c 66 2c 20 65 78 70 72 65 73 ot, self, expres
ae70: 73 69 6f 6e 73 29 0a 0a 20 20 20 20 69 66 20 28 sions).. if (
ae80: 21 73 65 6c 66 2e 70 61 72 65 6e 74 20 7c 7c 20 !self.parent ||
ae90: 69 73 4c 6f 6f 70 29 20 73 65 6c 66 2e 75 70 64 isLoop) self.upd
aea0: 61 74 65 28 69 74 65 6d 29 0a 0a 20 20 20 20 2f ate(item).. /
aeb0: 2f 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 20 6f / internal use o
aec0: 6e 6c 79 2c 20 66 69 78 65 73 20 23 34 30 33 0a nly, fixes #403.
aed0: 20 20 20 20 73 65 6c 66 2e 74 72 69 67 67 65 72 self.trigger
aee0: 28 27 62 65 66 6f 72 65 2d 6d 6f 75 6e 74 27 29 ('before-mount')
aef0: 0a 0a 20 20 20 20 69 66 20 28 69 73 4c 6f 6f 70 .. if (isLoop
af00: 20 26 26 20 21 68 61 73 49 6d 70 6c 29 20 7b 0a && !hasImpl) {.
af10: 20 20 20 20 20 20 2f 2f 20 75 70 64 61 74 65 20 // update
af20: 74 68 65 20 72 6f 6f 74 20 61 74 74 72 69 62 75 the root attribu
af30: 74 65 20 66 6f 72 20 74 68 65 20 6c 6f 6f 70 65 te for the loope
af40: 64 20 65 6c 65 6d 65 6e 74 73 0a 20 20 20 20 20 d elements.
af50: 20 72 6f 6f 74 20 3d 20 64 6f 6d 2e 66 69 72 73 root = dom.firs
af60: 74 43 68 69 6c 64 0a 20 20 20 20 7d 20 65 6c 73 tChild. } els
af70: 65 20 7b 0a 20 20 20 20 20 20 77 68 69 6c 65 20 e {. while
af80: 28 64 6f 6d 2e 66 69 72 73 74 43 68 69 6c 64 29 (dom.firstChild)
af90: 20 72 6f 6f 74 2e 61 70 70 65 6e 64 43 68 69 6c root.appendChil
afa0: 64 28 64 6f 6d 2e 66 69 72 73 74 43 68 69 6c 64 d(dom.firstChild
afb0: 29 0a 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 ). if (root
afc0: 2e 73 74 75 62 29 20 72 6f 6f 74 20 3d 20 70 61 .stub) root = pa
afd0: 72 65 6e 74 2e 72 6f 6f 74 0a 20 20 20 20 7d 0a rent.root. }.
afe0: 0a 20 20 20 20 64 65 66 69 6e 65 50 72 6f 70 65 . definePrope
aff0: 72 74 79 28 73 65 6c 66 2c 20 27 72 6f 6f 74 27 rty(self, 'root'
b000: 2c 20 72 6f 6f 74 29 0a 0a 20 20 20 20 2f 2f 20 , root).. //
b010: 70 61 72 73 65 20 74 68 65 20 6e 61 6d 65 64 20 parse the named
b020: 64 6f 6d 20 6e 6f 64 65 73 20 69 6e 20 74 68 65 dom nodes in the
b030: 20 6c 6f 6f 70 65 64 20 63 68 69 6c 64 0a 20 20 looped child.
b040: 20 20 2f 2f 20 61 64 64 69 6e 67 20 74 68 65 6d // adding them
b050: 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 61 to the parent a
b060: 73 20 77 65 6c 6c 0a 20 20 20 20 69 66 20 28 69 s well. if (i
b070: 73 4c 6f 6f 70 29 0a 20 20 20 20 20 20 70 61 72 sLoop). par
b080: 73 65 4e 61 6d 65 64 45 6c 65 6d 65 6e 74 73 28 seNamedElements(
b090: 73 65 6c 66 2e 72 6f 6f 74 2c 20 73 65 6c 66 2e self.root, self.
b0a0: 70 61 72 65 6e 74 2c 20 6e 75 6c 6c 2c 20 74 72 parent, null, tr
b0b0: 75 65 29 0a 0a 20 20 20 20 2f 2f 20 69 66 20 69 ue).. // if i
b0c0: 74 27 73 20 6e 6f 74 20 61 20 63 68 69 6c 64 20 t's not a child
b0d0: 74 61 67 20 77 65 20 63 61 6e 20 74 72 69 67 67 tag we can trigg
b0e0: 65 72 20 69 74 73 20 6d 6f 75 6e 74 20 65 76 65 er its mount eve
b0f0: 6e 74 0a 20 20 20 20 69 66 20 28 21 73 65 6c 66 nt. if (!self
b100: 2e 70 61 72 65 6e 74 20 7c 7c 20 73 65 6c 66 2e .parent || self.
b110: 70 61 72 65 6e 74 2e 69 73 4d 6f 75 6e 74 65 64 parent.isMounted
b120: 29 20 7b 0a 20 20 20 20 20 20 73 65 6c 66 2e 69 ) {. self.i
b130: 73 4d 6f 75 6e 74 65 64 20 3d 20 74 72 75 65 0a sMounted = true.
b140: 20 20 20 20 20 20 73 65 6c 66 2e 74 72 69 67 67 self.trigg
b150: 65 72 28 27 6d 6f 75 6e 74 27 29 0a 20 20 20 20 er('mount').
b160: 7d 0a 20 20 20 20 2f 2f 20 6f 74 68 65 72 77 69 }. // otherwi
b170: 73 65 20 77 65 20 6e 65 65 64 20 74 6f 20 77 61 se we need to wa
b180: 69 74 20 74 68 61 74 20 74 68 65 20 70 61 72 65 it that the pare
b190: 6e 74 20 65 76 65 6e 74 20 67 65 74 73 20 74 72 nt event gets tr
b1a0: 69 67 67 65 72 65 64 0a 20 20 20 20 65 6c 73 65 iggered. else
b1b0: 20 73 65 6c 66 2e 70 61 72 65 6e 74 2e 6f 6e 65 self.parent.one
b1c0: 28 27 6d 6f 75 6e 74 27 2c 20 66 75 6e 63 74 69 ('mount', functi
b1d0: 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 2f 2f 20 on() {. //
b1e0: 61 76 6f 69 64 20 74 6f 20 74 72 69 67 67 65 72 avoid to trigger
b1f0: 20 74 68 65 20 60 6d 6f 75 6e 74 60 20 65 76 65 the `mount` eve
b200: 6e 74 20 66 6f 72 20 74 68 65 20 74 61 67 73 0a nt for the tags.
b210: 20 20 20 20 20 20 2f 2f 20 6e 6f 74 20 76 69 73 // not vis
b220: 69 62 6c 65 20 69 6e 63 6c 75 64 65 64 20 69 6e ible included in
b230: 20 61 6e 20 69 66 20 73 74 61 74 65 6d 65 6e 74 an if statement
b240: 0a 20 20 20 20 20 20 69 66 20 28 21 69 73 49 6e . if (!isIn
b250: 53 74 75 62 28 73 65 6c 66 2e 72 6f 6f 74 29 29 Stub(self.root))
b260: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 6c 66 2e {. self.
b270: 70 61 72 65 6e 74 2e 69 73 4d 6f 75 6e 74 65 64 parent.isMounted
b280: 20 3d 20 73 65 6c 66 2e 69 73 4d 6f 75 6e 74 65 = self.isMounte
b290: 64 20 3d 20 74 72 75 65 0a 20 20 20 20 20 20 20 d = true.
b2a0: 20 73 65 6c 66 2e 74 72 69 67 67 65 72 28 27 6d self.trigger('m
b2b0: 6f 75 6e 74 27 29 0a 20 20 20 20 20 20 7d 0a 20 ount'). }.
b2c0: 20 20 20 7d 29 0a 20 20 7d 29 0a 0a 0a 20 20 64 }). })... d
b2d0: 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28 74 68 efineProperty(th
b2e0: 69 73 2c 20 27 75 6e 6d 6f 75 6e 74 27 2c 20 66 is, 'unmount', f
b2f0: 75 6e 63 74 69 6f 6e 28 6b 65 65 70 52 6f 6f 74 unction(keepRoot
b300: 54 61 67 29 20 7b 0a 20 20 20 20 76 61 72 20 65 Tag) {. var e
b310: 6c 20 3d 20 72 6f 6f 74 2c 0a 20 20 20 20 20 20 l = root,.
b320: 70 20 3d 20 65 6c 2e 70 61 72 65 6e 74 4e 6f 64 p = el.parentNod
b330: 65 2c 0a 20 20 20 20 20 20 70 74 61 67 2c 0a 20 e,. ptag,.
b340: 20 20 20 20 20 74 61 67 49 6e 64 65 78 20 3d 20 tagIndex =
b350: 5f 5f 76 69 72 74 75 61 6c 44 6f 6d 2e 69 6e 64 __virtualDom.ind
b360: 65 78 4f 66 28 73 65 6c 66 29 0a 0a 20 20 20 20 exOf(self)..
b370: 73 65 6c 66 2e 74 72 69 67 67 65 72 28 27 62 65 self.trigger('be
b380: 66 6f 72 65 2d 75 6e 6d 6f 75 6e 74 27 29 0a 0a fore-unmount')..
b390: 20 20 20 20 2f 2f 20 72 65 6d 6f 76 65 20 74 68 // remove th
b3a0: 69 73 20 74 61 67 20 69 6e 73 74 61 6e 63 65 20 is tag instance
b3b0: 66 72 6f 6d 20 74 68 65 20 67 6c 6f 62 61 6c 20 from the global
b3c0: 76 69 72 74 75 61 6c 44 6f 6d 20 76 61 72 69 61 virtualDom varia
b3d0: 62 6c 65 0a 20 20 20 20 69 66 20 28 7e 74 61 67 ble. if (~tag
b3e0: 49 6e 64 65 78 29 0a 20 20 20 20 20 20 5f 5f 76 Index). __v
b3f0: 69 72 74 75 61 6c 44 6f 6d 2e 73 70 6c 69 63 65 irtualDom.splice
b400: 28 74 61 67 49 6e 64 65 78 2c 20 31 29 0a 0a 20 (tagIndex, 1)..
b410: 20 20 20 69 66 20 28 70 29 20 7b 0a 0a 20 20 20 if (p) {..
b420: 20 20 20 69 66 20 28 70 61 72 65 6e 74 29 20 7b if (parent) {
b430: 0a 20 20 20 20 20 20 20 20 70 74 61 67 20 3d 20 . ptag =
b440: 67 65 74 49 6d 6d 65 64 69 61 74 65 43 75 73 74 getImmediateCust
b450: 6f 6d 50 61 72 65 6e 74 54 61 67 28 70 61 72 65 omParentTag(pare
b460: 6e 74 29 0a 20 20 20 20 20 20 20 20 2f 2f 20 72 nt). // r
b470: 65 6d 6f 76 65 20 74 68 69 73 20 74 61 67 20 66 emove this tag f
b480: 72 6f 6d 20 74 68 65 20 70 61 72 65 6e 74 20 74 rom the parent t
b490: 61 67 73 20 6f 62 6a 65 63 74 0a 20 20 20 20 20 ags object.
b4a0: 20 20 20 2f 2f 20 69 66 20 74 68 65 72 65 20 61 // if there a
b4b0: 72 65 20 6d 75 6c 74 69 70 6c 65 20 6e 65 73 74 re multiple nest
b4c0: 65 64 20 74 61 67 73 20 77 69 74 68 20 73 61 6d ed tags with sam
b4d0: 65 20 6e 61 6d 65 2e 2e 0a 20 20 20 20 20 20 20 e name...
b4e0: 20 2f 2f 20 72 65 6d 6f 76 65 20 74 68 69 73 20 // remove this
b4f0: 65 6c 65 6d 65 6e 74 20 66 6f 72 6d 20 74 68 65 element form the
b500: 20 61 72 72 61 79 0a 20 20 20 20 20 20 20 20 69 array. i
b510: 66 20 28 69 73 41 72 72 61 79 28 70 74 61 67 2e f (isArray(ptag.
b520: 74 61 67 73 5b 74 61 67 4e 61 6d 65 5d 29 29 0a tags[tagName])).
b530: 20 20 20 20 20 20 20 20 20 20 65 61 63 68 28 70 each(p
b540: 74 61 67 2e 74 61 67 73 5b 74 61 67 4e 61 6d 65 tag.tags[tagName
b550: 5d 2c 20 66 75 6e 63 74 69 6f 6e 28 74 61 67 2c ], function(tag,
b560: 20 69 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 i) {.
b570: 20 20 69 66 20 28 74 61 67 2e 5f 72 69 6f 74 5f if (tag._riot_
b580: 69 64 20 3d 3d 20 73 65 6c 66 2e 5f 72 69 6f 74 id == self._riot
b590: 5f 69 64 29 0a 20 20 20 20 20 20 20 20 20 20 20 _id).
b5a0: 20 20 20 70 74 61 67 2e 74 61 67 73 5b 74 61 67 ptag.tags[tag
b5b0: 4e 61 6d 65 5d 2e 73 70 6c 69 63 65 28 69 2c 20 Name].splice(i,
b5c0: 31 29 0a 20 20 20 20 20 20 20 20 20 20 7d 29 0a 1). }).
b5d0: 20 20 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20 else.
b5e0: 20 20 20 20 20 20 20 2f 2f 20 6f 74 68 65 72 77 // otherw
b5f0: 69 73 65 20 6a 75 73 74 20 64 65 6c 65 74 65 20 ise just delete
b600: 74 68 65 20 74 61 67 20 69 6e 73 74 61 6e 63 65 the tag instance
b610: 0a 20 20 20 20 20 20 20 20 20 20 70 74 61 67 2e . ptag.
b620: 74 61 67 73 5b 74 61 67 4e 61 6d 65 5d 20 3d 20 tags[tagName] =
b630: 75 6e 64 65 66 69 6e 65 64 0a 20 20 20 20 20 20 undefined.
b640: 7d 0a 0a 20 20 20 20 20 20 65 6c 73 65 0a 20 20 }.. else.
b650: 20 20 20 20 20 20 77 68 69 6c 65 20 28 65 6c 2e while (el.
b660: 66 69 72 73 74 43 68 69 6c 64 29 20 65 6c 2e 72 firstChild) el.r
b670: 65 6d 6f 76 65 43 68 69 6c 64 28 65 6c 2e 66 69 emoveChild(el.fi
b680: 72 73 74 43 68 69 6c 64 29 0a 0a 20 20 20 20 20 rstChild)..
b690: 20 69 66 20 28 21 6b 65 65 70 52 6f 6f 74 54 61 if (!keepRootTa
b6a0: 67 29 0a 20 20 20 20 20 20 20 20 70 2e 72 65 6d g). p.rem
b6b0: 6f 76 65 43 68 69 6c 64 28 65 6c 29 0a 20 20 20 oveChild(el).
b6c0: 20 20 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 else {.
b6d0: 20 20 2f 2f 20 74 68 65 20 72 69 6f 74 2d 74 61 // the riot-ta
b6e0: 67 20 61 6e 64 20 74 68 65 20 64 61 74 61 2d 69 g and the data-i
b6f0: 73 20 61 74 74 72 69 62 75 74 65 73 20 61 72 65 s attributes are
b700: 6e 27 74 20 6e 65 65 64 65 64 20 61 6e 79 6d 6f n't needed anymo
b710: 72 65 2c 20 72 65 6d 6f 76 65 20 74 68 65 6d 0a re, remove them.
b720: 20 20 20 20 20 20 20 20 72 65 6d 41 74 74 72 28 remAttr(
b730: 70 2c 20 52 49 4f 54 5f 54 41 47 5f 49 53 29 0a p, RIOT_TAG_IS).
b740: 20 20 20 20 20 20 20 20 72 65 6d 41 74 74 72 28 remAttr(
b750: 70 2c 20 52 49 4f 54 5f 54 41 47 29 20 2f 2f 20 p, RIOT_TAG) //
b760: 74 68 69 73 20 77 69 6c 6c 20 62 65 20 72 65 6d this will be rem
b770: 6f 76 65 64 20 69 6e 20 72 69 6f 74 20 33 2e 30 oved in riot 3.0
b780: 2e 30 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 .0. }..
b790: 7d 0a 0a 20 20 20 20 69 66 20 28 74 68 69 73 2e }.. if (this.
b7a0: 5f 76 69 72 74 73 29 20 7b 0a 20 20 20 20 20 20 _virts) {.
b7b0: 65 61 63 68 28 74 68 69 73 2e 5f 76 69 72 74 73 each(this._virts
b7c0: 2c 20 66 75 6e 63 74 69 6f 6e 28 76 29 20 7b 0a , function(v) {.
b7d0: 20 20 20 20 20 20 20 20 69 66 20 28 76 2e 70 61 if (v.pa
b7e0: 72 65 6e 74 4e 6f 64 65 29 20 76 2e 70 61 72 65 rentNode) v.pare
b7f0: 6e 74 4e 6f 64 65 2e 72 65 6d 6f 76 65 43 68 69 ntNode.removeChi
b800: 6c 64 28 76 29 0a 20 20 20 20 20 20 7d 29 0a 20 ld(v). }).
b810: 20 20 20 7d 0a 0a 20 20 20 20 73 65 6c 66 2e 74 }.. self.t
b820: 72 69 67 67 65 72 28 27 75 6e 6d 6f 75 6e 74 27 rigger('unmount'
b830: 29 0a 20 20 20 20 74 6f 67 67 6c 65 28 29 0a 20 ). toggle().
b840: 20 20 20 73 65 6c 66 2e 6f 66 66 28 27 2a 27 29 self.off('*')
b850: 0a 20 20 20 20 73 65 6c 66 2e 69 73 4d 6f 75 6e . self.isMoun
b860: 74 65 64 20 3d 20 66 61 6c 73 65 0a 20 20 20 20 ted = false.
b870: 64 65 6c 65 74 65 20 72 6f 6f 74 2e 5f 74 61 67 delete root._tag
b880: 0a 0a 20 20 7d 29 0a 0a 20 20 2f 2f 20 70 72 6f .. }).. // pro
b890: 78 79 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 xy function to b
b8a0: 69 6e 64 20 75 70 64 61 74 65 73 0a 20 20 2f 2f ind updates. //
b8b0: 20 64 69 73 70 61 74 63 68 65 64 20 66 72 6f 6d dispatched from
b8c0: 20 61 20 70 61 72 65 6e 74 20 74 61 67 0a 20 20 a parent tag.
b8d0: 66 75 6e 63 74 69 6f 6e 20 6f 6e 43 68 69 6c 64 function onChild
b8e0: 55 70 64 61 74 65 28 64 61 74 61 29 20 7b 20 73 Update(data) { s
b8f0: 65 6c 66 2e 75 70 64 61 74 65 28 64 61 74 61 2c elf.update(data,
b900: 20 74 72 75 65 29 20 7d 0a 0a 20 20 66 75 6e 63 true) }.. func
b910: 74 69 6f 6e 20 74 6f 67 67 6c 65 28 69 73 4d 6f tion toggle(isMo
b920: 75 6e 74 29 20 7b 0a 0a 20 20 20 20 2f 2f 20 6d unt) {.. // m
b930: 6f 75 6e 74 2f 75 6e 6d 6f 75 6e 74 20 63 68 69 ount/unmount chi
b940: 6c 64 72 65 6e 0a 20 20 20 20 65 61 63 68 28 63 ldren. each(c
b950: 68 69 6c 64 54 61 67 73 2c 20 66 75 6e 63 74 69 hildTags, functi
b960: 6f 6e 28 63 68 69 6c 64 29 20 7b 20 63 68 69 6c on(child) { chil
b970: 64 5b 69 73 4d 6f 75 6e 74 20 3f 20 27 6d 6f 75 d[isMount ? 'mou
b980: 6e 74 27 20 3a 20 27 75 6e 6d 6f 75 6e 74 27 5d nt' : 'unmount']
b990: 28 29 20 7d 29 0a 0a 20 20 20 20 2f 2f 20 6c 69 () }).. // li
b9a0: 73 74 65 6e 2f 75 6e 6c 69 73 74 65 6e 20 70 61 sten/unlisten pa
b9b0: 72 65 6e 74 20 28 65 76 65 6e 74 73 20 66 6c 6f rent (events flo
b9c0: 77 20 6f 6e 65 20 77 61 79 20 66 72 6f 6d 20 70 w one way from p
b9d0: 61 72 65 6e 74 20 74 6f 20 63 68 69 6c 64 72 65 arent to childre
b9e0: 6e 29 0a 20 20 20 20 69 66 20 28 21 70 61 72 65 n). if (!pare
b9f0: 6e 74 29 20 72 65 74 75 72 6e 0a 20 20 20 20 76 nt) return. v
ba00: 61 72 20 65 76 74 20 3d 20 69 73 4d 6f 75 6e 74 ar evt = isMount
ba10: 20 3f 20 27 6f 6e 27 20 3a 20 27 6f 66 66 27 0a ? 'on' : 'off'.
ba20: 0a 20 20 20 20 2f 2f 20 74 68 65 20 6c 6f 6f 70 . // the loop
ba30: 20 74 61 67 73 20 77 69 6c 6c 20 62 65 20 61 6c tags will be al
ba40: 77 61 79 73 20 69 6e 20 73 79 6e 63 20 77 69 74 ways in sync wit
ba50: 68 20 74 68 65 20 70 61 72 65 6e 74 20 61 75 74 h the parent aut
ba60: 6f 6d 61 74 69 63 61 6c 6c 79 0a 20 20 20 20 69 omatically. i
ba70: 66 20 28 69 73 4c 6f 6f 70 29 0a 20 20 20 20 20 f (isLoop).
ba80: 20 70 61 72 65 6e 74 5b 65 76 74 5d 28 27 75 6e parent[evt]('un
ba90: 6d 6f 75 6e 74 27 2c 20 73 65 6c 66 2e 75 6e 6d mount', self.unm
baa0: 6f 75 6e 74 29 0a 20 20 20 20 65 6c 73 65 20 7b ount). else {
bab0: 0a 20 20 20 20 20 20 70 61 72 65 6e 74 5b 65 76 . parent[ev
bac0: 74 5d 28 27 75 70 64 61 74 65 27 2c 20 6f 6e 43 t]('update', onC
bad0: 68 69 6c 64 55 70 64 61 74 65 29 5b 65 76 74 5d hildUpdate)[evt]
bae0: 28 27 75 6e 6d 6f 75 6e 74 27 2c 20 73 65 6c 66 ('unmount', self
baf0: 2e 75 6e 6d 6f 75 6e 74 29 0a 20 20 20 20 7d 0a .unmount). }.
bb00: 20 20 7d 0a 0a 0a 20 20 2f 2f 20 6e 61 6d 65 64 }... // named
bb10: 20 65 6c 65 6d 65 6e 74 73 20 61 76 61 69 6c 61 elements availa
bb20: 62 6c 65 20 66 6f 72 20 66 6e 0a 20 20 70 61 72 ble for fn. par
bb30: 73 65 4e 61 6d 65 64 45 6c 65 6d 65 6e 74 73 28 seNamedElements(
bb40: 64 6f 6d 2c 20 74 68 69 73 2c 20 63 68 69 6c 64 dom, this, child
bb50: 54 61 67 73 29 0a 0a 7d 0a 2f 2a 2a 0a 20 2a 20 Tags)..}./**. *
bb60: 41 74 74 61 63 68 20 61 6e 20 65 76 65 6e 74 20 Attach an event
bb70: 74 6f 20 61 20 44 4f 4d 20 6e 6f 64 65 0a 20 2a to a DOM node. *
bb80: 20 40 70 61 72 61 6d 20 7b 20 53 74 72 69 6e 67 @param { String
bb90: 20 7d 20 6e 61 6d 65 20 2d 20 65 76 65 6e 74 20 } name - event
bba0: 6e 61 6d 65 0a 20 2a 20 40 70 61 72 61 6d 20 7b name. * @param {
bbb0: 20 46 75 6e 63 74 69 6f 6e 20 7d 20 68 61 6e 64 Function } hand
bbc0: 6c 65 72 20 2d 20 65 76 65 6e 74 20 63 61 6c 6c ler - event call
bbd0: 62 61 63 6b 0a 20 2a 20 40 70 61 72 61 6d 20 7b back. * @param {
bbe0: 20 4f 62 6a 65 63 74 20 7d 20 64 6f 6d 20 2d 20 Object } dom -
bbf0: 64 6f 6d 20 6e 6f 64 65 0a 20 2a 20 40 70 61 72 dom node. * @par
bc00: 61 6d 20 7b 20 54 61 67 20 7d 20 74 61 67 20 2d am { Tag } tag -
bc10: 20 74 61 67 20 69 6e 73 74 61 6e 63 65 0a 20 2a tag instance. *
bc20: 2f 0a 66 75 6e 63 74 69 6f 6e 20 73 65 74 45 76 /.function setEv
bc30: 65 6e 74 48 61 6e 64 6c 65 72 28 6e 61 6d 65 2c entHandler(name,
bc40: 20 68 61 6e 64 6c 65 72 2c 20 64 6f 6d 2c 20 74 handler, dom, t
bc50: 61 67 29 20 7b 0a 0a 20 20 64 6f 6d 5b 6e 61 6d ag) {.. dom[nam
bc60: 65 5d 20 3d 20 66 75 6e 63 74 69 6f 6e 28 65 29 e] = function(e)
bc70: 20 7b 0a 0a 20 20 20 20 76 61 72 20 70 74 61 67 {.. var ptag
bc80: 20 3d 20 74 61 67 2e 5f 70 61 72 65 6e 74 2c 0a = tag._parent,.
bc90: 20 20 20 20 20 20 69 74 65 6d 20 3d 20 74 61 67 item = tag
bca0: 2e 5f 69 74 65 6d 2c 0a 20 20 20 20 20 20 65 6c ._item,. el
bcb0: 0a 0a 20 20 20 20 69 66 20 28 21 69 74 65 6d 29 .. if (!item)
bcc0: 0a 20 20 20 20 20 20 77 68 69 6c 65 20 28 70 74 . while (pt
bcd0: 61 67 20 26 26 20 21 69 74 65 6d 29 20 7b 0a 20 ag && !item) {.
bce0: 20 20 20 20 20 20 20 69 74 65 6d 20 3d 20 70 74 item = pt
bcf0: 61 67 2e 5f 69 74 65 6d 0a 20 20 20 20 20 20 20 ag._item.
bd00: 20 70 74 61 67 20 3d 20 70 74 61 67 2e 5f 70 61 ptag = ptag._pa
bd10: 72 65 6e 74 0a 20 20 20 20 20 20 7d 0a 0a 20 20 rent. }..
bd20: 20 20 2f 2f 20 63 72 6f 73 73 20 62 72 6f 77 73 // cross brows
bd30: 65 72 20 65 76 65 6e 74 20 66 69 78 0a 20 20 20 er event fix.
bd40: 20 65 20 3d 20 65 20 7c 7c 20 77 69 6e 64 6f 77 e = e || window
bd50: 2e 65 76 65 6e 74 0a 0a 20 20 20 20 2f 2f 20 6f .event.. // o
bd60: 76 65 72 72 69 64 65 20 74 68 65 20 65 76 65 6e verride the even
bd70: 74 20 70 72 6f 70 65 72 74 69 65 73 0a 20 20 20 t properties.
bd80: 20 69 66 20 28 69 73 57 72 69 74 61 62 6c 65 28 if (isWritable(
bd90: 65 2c 20 27 63 75 72 72 65 6e 74 54 61 72 67 65 e, 'currentTarge
bda0: 74 27 29 29 20 65 2e 63 75 72 72 65 6e 74 54 61 t')) e.currentTa
bdb0: 72 67 65 74 20 3d 20 64 6f 6d 0a 20 20 20 20 69 rget = dom. i
bdc0: 66 20 28 69 73 57 72 69 74 61 62 6c 65 28 65 2c f (isWritable(e,
bdd0: 20 27 74 61 72 67 65 74 27 29 29 20 65 2e 74 61 'target')) e.ta
bde0: 72 67 65 74 20 3d 20 65 2e 73 72 63 45 6c 65 6d rget = e.srcElem
bdf0: 65 6e 74 0a 20 20 20 20 69 66 20 28 69 73 57 72 ent. if (isWr
be00: 69 74 61 62 6c 65 28 65 2c 20 27 77 68 69 63 68 itable(e, 'which
be10: 27 29 29 20 65 2e 77 68 69 63 68 20 3d 20 65 2e ')) e.which = e.
be20: 63 68 61 72 43 6f 64 65 20 7c 7c 20 65 2e 6b 65 charCode || e.ke
be30: 79 43 6f 64 65 0a 0a 20 20 20 20 65 2e 69 74 65 yCode.. e.ite
be40: 6d 20 3d 20 69 74 65 6d 0a 0a 20 20 20 20 2f 2f m = item.. //
be50: 20 70 72 65 76 65 6e 74 20 64 65 66 61 75 6c 74 prevent default
be60: 20 62 65 68 61 76 69 6f 75 72 20 28 62 79 20 64 behaviour (by d
be70: 65 66 61 75 6c 74 29 0a 20 20 20 20 69 66 20 28 efault). if (
be80: 68 61 6e 64 6c 65 72 2e 63 61 6c 6c 28 74 61 67 handler.call(tag
be90: 2c 20 65 29 20 21 3d 3d 20 74 72 75 65 20 26 26 , e) !== true &&
bea0: 20 21 2f 72 61 64 69 6f 7c 63 68 65 63 6b 2f 2e !/radio|check/.
beb0: 74 65 73 74 28 64 6f 6d 2e 74 79 70 65 29 29 20 test(dom.type))
bec0: 7b 0a 20 20 20 20 20 20 69 66 20 28 65 2e 70 72 {. if (e.pr
bed0: 65 76 65 6e 74 44 65 66 61 75 6c 74 29 20 65 2e eventDefault) e.
bee0: 70 72 65 76 65 6e 74 44 65 66 61 75 6c 74 28 29 preventDefault()
bef0: 0a 20 20 20 20 20 20 65 2e 72 65 74 75 72 6e 56 . e.returnV
bf00: 61 6c 75 65 20 3d 20 66 61 6c 73 65 0a 20 20 20 alue = false.
bf10: 20 7d 0a 0a 20 20 20 20 69 66 20 28 21 65 2e 70 }.. if (!e.p
bf20: 72 65 76 65 6e 74 55 70 64 61 74 65 29 20 7b 0a reventUpdate) {.
bf30: 20 20 20 20 20 20 65 6c 20 3d 20 69 74 65 6d 20 el = item
bf40: 3f 20 67 65 74 49 6d 6d 65 64 69 61 74 65 43 75 ? getImmediateCu
bf50: 73 74 6f 6d 50 61 72 65 6e 74 54 61 67 28 70 74 stomParentTag(pt
bf60: 61 67 29 20 3a 20 74 61 67 0a 20 20 20 20 20 20 ag) : tag.
bf70: 65 6c 2e 75 70 64 61 74 65 28 29 0a 20 20 20 20 el.update().
bf80: 7d 0a 0a 20 20 7d 0a 0a 7d 0a 0a 0a 2f 2a 2a 0a }.. }..}.../**.
bf90: 20 2a 20 49 6e 73 65 72 74 20 61 20 44 4f 4d 20 * Insert a DOM
bfa0: 6e 6f 64 65 20 72 65 70 6c 61 63 69 6e 67 20 61 node replacing a
bfb0: 6e 6f 74 68 65 72 20 6f 6e 65 20 28 75 73 65 64 nother one (used
bfc0: 20 62 79 20 69 66 2d 20 61 74 74 72 69 62 75 74 by if- attribut
bfd0: 65 29 0a 20 2a 20 40 70 61 72 61 6d 20 20 20 7b e). * @param {
bfe0: 20 4f 62 6a 65 63 74 20 7d 20 72 6f 6f 74 20 2d Object } root -
bff0: 20 70 61 72 65 6e 74 20 6e 6f 64 65 0a 20 2a 20 parent node. *
c000: 40 70 61 72 61 6d 20 20 20 7b 20 4f 62 6a 65 63 @param { Objec
c010: 74 20 7d 20 6e 6f 64 65 20 2d 20 6e 6f 64 65 20 t } node - node
c020: 72 65 70 6c 61 63 65 64 0a 20 2a 20 40 70 61 72 replaced. * @par
c030: 61 6d 20 20 20 7b 20 4f 62 6a 65 63 74 20 7d 20 am { Object }
c040: 62 65 66 6f 72 65 20 2d 20 6e 6f 64 65 20 61 64 before - node ad
c050: 64 65 64 0a 20 2a 2f 0a 66 75 6e 63 74 69 6f 6e ded. */.function
c060: 20 69 6e 73 65 72 74 54 6f 28 72 6f 6f 74 2c 20 insertTo(root,
c070: 6e 6f 64 65 2c 20 62 65 66 6f 72 65 29 20 7b 0a node, before) {.
c080: 20 20 69 66 20 28 21 72 6f 6f 74 29 20 72 65 74 if (!root) ret
c090: 75 72 6e 0a 20 20 72 6f 6f 74 2e 69 6e 73 65 72 urn. root.inser
c0a0: 74 42 65 66 6f 72 65 28 62 65 66 6f 72 65 2c 20 tBefore(before,
c0b0: 6e 6f 64 65 29 0a 20 20 72 6f 6f 74 2e 72 65 6d node). root.rem
c0c0: 6f 76 65 43 68 69 6c 64 28 6e 6f 64 65 29 0a 7d oveChild(node).}
c0d0: 0a 0a 2f 2a 2a 0a 20 2a 20 55 70 64 61 74 65 20 ../**. * Update
c0e0: 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 the expressions
c0f0: 69 6e 20 61 20 54 61 67 20 69 6e 73 74 61 6e 63 in a Tag instanc
c100: 65 0a 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 e. * @param {
c110: 41 72 72 61 79 20 7d 20 65 78 70 72 65 73 73 69 Array } expressi
c120: 6f 6e 73 20 2d 20 65 78 70 72 65 73 73 69 6f 6e ons - expression
c130: 20 74 68 61 74 20 6d 75 73 74 20 62 65 20 72 65 that must be re
c140: 20 65 76 61 6c 75 61 74 65 64 0a 20 2a 20 40 70 evaluated. * @p
c150: 61 72 61 6d 20 20 20 7b 20 54 61 67 20 7d 20 74 aram { Tag } t
c160: 61 67 20 2d 20 74 61 67 20 69 6e 73 74 61 6e 63 ag - tag instanc
c170: 65 0a 20 2a 2f 0a 66 75 6e 63 74 69 6f 6e 20 75 e. */.function u
c180: 70 64 61 74 65 28 65 78 70 72 65 73 73 69 6f 6e pdate(expression
c190: 73 2c 20 74 61 67 29 20 7b 0a 0a 20 20 65 61 63 s, tag) {.. eac
c1a0: 68 28 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 66 h(expressions, f
c1b0: 75 6e 63 74 69 6f 6e 28 65 78 70 72 2c 20 69 29 unction(expr, i)
c1c0: 20 7b 0a 0a 20 20 20 20 76 61 72 20 64 6f 6d 20 {.. var dom
c1d0: 3d 20 65 78 70 72 2e 64 6f 6d 2c 0a 20 20 20 20 = expr.dom,.
c1e0: 20 20 61 74 74 72 4e 61 6d 65 20 3d 20 65 78 70 attrName = exp
c1f0: 72 2e 61 74 74 72 2c 0a 20 20 20 20 20 20 76 61 r.attr,. va
c200: 6c 75 65 20 3d 20 74 6d 70 6c 28 65 78 70 72 2e lue = tmpl(expr.
c210: 65 78 70 72 2c 20 74 61 67 29 2c 0a 20 20 20 20 expr, tag),.
c220: 20 20 70 61 72 65 6e 74 20 3d 20 65 78 70 72 2e parent = expr.
c230: 70 61 72 65 6e 74 20 7c 7c 20 65 78 70 72 2e 64 parent || expr.d
c240: 6f 6d 2e 70 61 72 65 6e 74 4e 6f 64 65 0a 0a 20 om.parentNode..
c250: 20 20 20 69 66 20 28 65 78 70 72 2e 62 6f 6f 6c if (expr.bool
c260: 29 20 7b 0a 20 20 20 20 20 20 76 61 6c 75 65 20 ) {. value
c270: 3d 20 21 21 76 61 6c 75 65 0a 20 20 20 20 7d 20 = !!value. }
c280: 65 6c 73 65 20 69 66 20 28 76 61 6c 75 65 20 3d else if (value =
c290: 3d 20 6e 75 6c 6c 29 20 7b 0a 20 20 20 20 20 20 = null) {.
c2a0: 76 61 6c 75 65 20 3d 20 27 27 0a 20 20 20 20 7d value = ''. }
c2b0: 0a 0a 20 20 20 20 2f 2f 20 23 31 36 33 38 3a 20 .. // #1638:
c2c0: 72 65 67 72 65 73 73 69 6f 6e 20 6f 66 20 23 31 regression of #1
c2d0: 36 31 32 2c 20 75 70 64 61 74 65 20 74 68 65 20 612, update the
c2e0: 64 6f 6d 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 dom only if the
c2f0: 76 61 6c 75 65 20 6f 66 20 74 68 65 0a 20 20 20 value of the.
c300: 20 2f 2f 20 65 78 70 72 65 73 73 69 6f 6e 20 77 // expression w
c310: 61 73 20 63 68 61 6e 67 65 64 0a 20 20 20 20 69 as changed. i
c320: 66 20 28 65 78 70 72 2e 76 61 6c 75 65 20 3d 3d f (expr.value ==
c330: 3d 20 76 61 6c 75 65 29 20 7b 0a 20 20 20 20 20 = value) {.
c340: 20 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 20 20 return. }.
c350: 20 20 65 78 70 72 2e 76 61 6c 75 65 20 3d 20 76 expr.value = v
c360: 61 6c 75 65 0a 0a 20 20 20 20 2f 2f 20 74 65 78 alue.. // tex
c370: 74 61 72 65 61 20 61 6e 64 20 74 65 78 74 20 6e tarea and text n
c380: 6f 64 65 73 20 68 61 73 20 6e 6f 20 61 74 74 72 odes has no attr
c390: 69 62 75 74 65 20 6e 61 6d 65 0a 20 20 20 20 69 ibute name. i
c3a0: 66 20 28 21 61 74 74 72 4e 61 6d 65 29 20 7b 0a f (!attrName) {.
c3b0: 20 20 20 20 20 20 2f 2f 20 61 62 6f 75 74 20 23 // about #
c3c0: 38 31 35 20 77 2f 6f 20 72 65 70 6c 61 63 65 3a 815 w/o replace:
c3d0: 20 74 68 65 20 62 72 6f 77 73 65 72 20 63 6f 6e the browser con
c3e0: 76 65 72 74 73 20 74 68 65 20 76 61 6c 75 65 20 verts the value
c3f0: 74 6f 20 61 20 73 74 72 69 6e 67 2c 0a 20 20 20 to a string,.
c400: 20 20 20 2f 2f 20 74 68 65 20 63 6f 6d 70 61 72 // the compar
c410: 69 73 6f 6e 20 62 79 20 22 3d 3d 22 20 64 6f 65 ison by "==" doe
c420: 73 20 74 6f 6f 2c 20 62 75 74 20 6e 6f 74 20 69 s too, but not i
c430: 6e 20 74 68 65 20 73 65 72 76 65 72 0a 20 20 20 n the server.
c440: 20 20 20 76 61 6c 75 65 20 2b 3d 20 27 27 0a 20 value += ''.
c450: 20 20 20 20 20 2f 2f 20 74 65 73 74 20 66 6f 72 // test for
c460: 20 70 61 72 65 6e 74 20 61 76 6f 69 64 73 20 65 parent avoids e
c470: 72 72 6f 72 20 77 69 74 68 20 69 6e 76 61 6c 69 rror with invali
c480: 64 20 61 73 73 69 67 6e 6d 65 6e 74 20 74 6f 20 d assignment to
c490: 6e 6f 64 65 56 61 6c 75 65 0a 20 20 20 20 20 20 nodeValue.
c4a0: 69 66 20 28 70 61 72 65 6e 74 29 20 7b 0a 20 20 if (parent) {.
c4b0: 20 20 20 20 20 20 2f 2f 20 63 61 63 68 65 20 74 // cache t
c4c0: 68 65 20 70 61 72 65 6e 74 20 6e 6f 64 65 20 62 he parent node b
c4d0: 65 63 61 75 73 65 20 73 6f 6d 65 68 6f 77 20 69 ecause somehow i
c4e0: 74 20 77 69 6c 6c 20 62 65 63 6f 6d 65 20 6e 75 t will become nu
c4f0: 6c 6c 20 6f 6e 20 49 45 0a 20 20 20 20 20 20 20 ll on IE.
c500: 20 2f 2f 20 6f 6e 20 74 68 65 20 6e 65 78 74 20 // on the next
c510: 69 74 65 72 61 74 69 6f 6e 0a 20 20 20 20 20 20 iteration.
c520: 20 20 65 78 70 72 2e 70 61 72 65 6e 74 20 3d 20 expr.parent =
c530: 70 61 72 65 6e 74 0a 20 20 20 20 20 20 20 20 69 parent. i
c540: 66 20 28 70 61 72 65 6e 74 2e 74 61 67 4e 61 6d f (parent.tagNam
c550: 65 20 3d 3d 3d 20 27 54 45 58 54 41 52 45 41 27 e === 'TEXTAREA'
c560: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 70 61 ) {. pa
c570: 72 65 6e 74 2e 76 61 6c 75 65 20 3d 20 76 61 6c rent.value = val
c580: 75 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ue
c590: 20 20 20 20 20 20 2f 2f 20 23 31 31 31 33 0a 20 // #1113.
c5a0: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 49 45 if (!IE
c5b0: 5f 56 45 52 53 49 4f 4e 29 20 64 6f 6d 2e 6e 6f _VERSION) dom.no
c5c0: 64 65 56 61 6c 75 65 20 3d 20 76 61 6c 75 65 20 deValue = value
c5d0: 20 2f 2f 20 23 31 36 32 35 20 49 45 20 74 68 72 // #1625 IE thr
c5e0: 6f 77 73 20 68 65 72 65 2c 20 6e 6f 64 65 56 61 ows here, nodeVa
c5f0: 6c 75 65 0a 20 20 20 20 20 20 20 20 7d 20 20 20 lue. }
c600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c620: 20 20 20 20 20 20 2f 2f 20 77 69 6c 6c 20 62 65 // will be
c630: 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20 27 75 available on 'u
c640: 70 64 61 74 65 64 27 0a 20 20 20 20 20 20 20 20 pdated'.
c650: 65 6c 73 65 20 64 6f 6d 2e 6e 6f 64 65 56 61 6c else dom.nodeVal
c660: 75 65 20 3d 20 76 61 6c 75 65 0a 20 20 20 20 20 ue = value.
c670: 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 0a }. return.
c680: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 20 7e 7e }.. // ~~
c690: 23 31 36 31 32 3a 20 6c 6f 6f 6b 20 66 6f 72 20 #1612: look for
c6a0: 63 68 61 6e 67 65 73 20 69 6e 20 64 6f 6d 2e 76 changes in dom.v
c6b0: 61 6c 75 65 20 77 68 65 6e 20 75 70 64 61 74 69 alue when updati
c6c0: 6e 67 20 74 68 65 20 76 61 6c 75 65 7e 7e 0a 20 ng the value~~.
c6d0: 20 20 20 69 66 20 28 61 74 74 72 4e 61 6d 65 20 if (attrName
c6e0: 3d 3d 3d 20 27 76 61 6c 75 65 27 29 20 7b 0a 20 === 'value') {.
c6f0: 20 20 20 20 20 69 66 20 28 64 6f 6d 2e 76 61 6c if (dom.val
c700: 75 65 20 21 3d 3d 20 76 61 6c 75 65 29 20 7b 0a ue !== value) {.
c710: 20 20 20 20 20 20 20 20 64 6f 6d 2e 76 61 6c 75 dom.valu
c720: 65 20 3d 20 76 61 6c 75 65 0a 20 20 20 20 20 20 e = value.
c730: 20 20 73 65 74 41 74 74 72 28 64 6f 6d 2c 20 61 setAttr(dom, a
c740: 74 74 72 4e 61 6d 65 2c 20 76 61 6c 75 65 29 0a ttrName, value).
c750: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 }. re
c760: 74 75 72 6e 0a 20 20 20 20 7d 20 65 6c 73 65 20 turn. } else
c770: 7b 0a 20 20 20 20 20 20 2f 2f 20 72 65 6d 6f 76 {. // remov
c780: 65 20 6f 72 69 67 69 6e 61 6c 20 61 74 74 72 69 e original attri
c790: 62 75 74 65 0a 20 20 20 20 20 20 72 65 6d 41 74 bute. remAt
c7a0: 74 72 28 64 6f 6d 2c 20 61 74 74 72 4e 61 6d 65 tr(dom, attrName
c7b0: 29 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 20 ). }.. //
c7c0: 65 76 65 6e 74 20 68 61 6e 64 6c 65 72 0a 20 20 event handler.
c7d0: 20 20 69 66 20 28 69 73 46 75 6e 63 74 69 6f 6e if (isFunction
c7e0: 28 76 61 6c 75 65 29 29 20 7b 0a 20 20 20 20 20 (value)) {.
c7f0: 20 73 65 74 45 76 65 6e 74 48 61 6e 64 6c 65 72 setEventHandler
c800: 28 61 74 74 72 4e 61 6d 65 2c 20 76 61 6c 75 65 (attrName, value
c810: 2c 20 64 6f 6d 2c 20 74 61 67 29 0a 0a 20 20 20 , dom, tag)..
c820: 20 2f 2f 20 69 66 2d 20 63 6f 6e 64 69 74 69 6f // if- conditio
c830: 6e 61 6c 0a 20 20 20 20 7d 20 65 6c 73 65 20 69 nal. } else i
c840: 66 20 28 61 74 74 72 4e 61 6d 65 20 3d 3d 20 27 f (attrName == '
c850: 69 66 27 29 20 7b 0a 20 20 20 20 20 20 76 61 72 if') {. var
c860: 20 73 74 75 62 20 3d 20 65 78 70 72 2e 73 74 75 stub = expr.stu
c870: 62 2c 0a 20 20 20 20 20 20 20 20 61 64 64 20 3d b,. add =
c880: 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 20 69 6e function() { in
c890: 73 65 72 74 54 6f 28 73 74 75 62 2e 70 61 72 65 sertTo(stub.pare
c8a0: 6e 74 4e 6f 64 65 2c 20 73 74 75 62 2c 20 64 6f ntNode, stub, do
c8b0: 6d 29 20 7d 2c 0a 20 20 20 20 20 20 20 20 72 65 m) },. re
c8c0: 6d 6f 76 65 20 3d 20 66 75 6e 63 74 69 6f 6e 28 move = function(
c8d0: 29 20 7b 20 69 6e 73 65 72 74 54 6f 28 64 6f 6d ) { insertTo(dom
c8e0: 2e 70 61 72 65 6e 74 4e 6f 64 65 2c 20 64 6f 6d .parentNode, dom
c8f0: 2c 20 73 74 75 62 29 20 7d 0a 0a 20 20 20 20 20 , stub) }..
c900: 20 2f 2f 20 61 64 64 20 74 6f 20 44 4f 4d 0a 20 // add to DOM.
c910: 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 29 20 if (value)
c920: 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 74 {. if (st
c930: 75 62 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 ub) {.
c940: 61 64 64 28 29 0a 20 20 20 20 20 20 20 20 20 20 add().
c950: 64 6f 6d 2e 69 6e 53 74 75 62 20 3d 20 66 61 6c dom.inStub = fal
c960: 73 65 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 se. //
c970: 61 76 6f 69 64 20 74 6f 20 74 72 69 67 67 65 72 avoid to trigger
c980: 20 74 68 65 20 6d 6f 75 6e 74 20 65 76 65 6e 74 the mount event
c990: 20 69 66 20 74 68 65 20 74 61 67 73 20 69 73 20 if the tags is
c9a0: 6e 6f 74 20 76 69 73 69 62 6c 65 20 79 65 74 0a not visible yet.
c9b0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 6d 61 79 // may
c9c0: 62 65 20 77 65 20 63 61 6e 20 6f 70 74 69 6d 69 be we can optimi
c9d0: 7a 65 20 74 68 69 73 20 61 76 6f 69 64 69 6e 67 ze this avoiding
c9e0: 20 74 6f 20 6d 6f 75 6e 74 20 74 68 65 20 74 61 to mount the ta
c9f0: 67 20 61 74 20 61 6c 6c 0a 20 20 20 20 20 20 20 g at all.
ca00: 20 20 20 69 66 20 28 21 69 73 49 6e 53 74 75 62 if (!isInStub
ca10: 28 64 6f 6d 29 29 20 7b 0a 20 20 20 20 20 20 20 (dom)) {.
ca20: 20 20 20 20 20 77 61 6c 6b 28 64 6f 6d 2c 20 66 walk(dom, f
ca30: 75 6e 63 74 69 6f 6e 28 65 6c 29 20 7b 0a 20 20 unction(el) {.
ca40: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
ca50: 65 6c 2e 5f 74 61 67 20 26 26 20 21 65 6c 2e 5f el._tag && !el._
ca60: 74 61 67 2e 69 73 4d 6f 75 6e 74 65 64 29 0a 20 tag.isMounted).
ca70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 e
ca80: 6c 2e 5f 74 61 67 2e 69 73 4d 6f 75 6e 74 65 64 l._tag.isMounted
ca90: 20 3d 20 21 21 65 6c 2e 5f 74 61 67 2e 74 72 69 = !!el._tag.tri
caa0: 67 67 65 72 28 27 6d 6f 75 6e 74 27 29 0a 20 20 gger('mount').
cab0: 20 20 20 20 20 20 20 20 20 20 7d 29 0a 20 20 20 }).
cac0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 }.
cad0: 20 7d 0a 20 20 20 20 20 20 2f 2f 20 72 65 6d 6f }. // remo
cae0: 76 65 20 66 72 6f 6d 20 44 4f 4d 0a 20 20 20 20 ve from DOM.
caf0: 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 } else {.
cb00: 20 20 20 73 74 75 62 20 3d 20 65 78 70 72 2e 73 stub = expr.s
cb10: 74 75 62 20 3d 20 73 74 75 62 20 7c 7c 20 64 6f tub = stub || do
cb20: 63 75 6d 65 6e 74 2e 63 72 65 61 74 65 54 65 78 cument.createTex
cb30: 74 4e 6f 64 65 28 27 27 29 0a 20 20 20 20 20 20 tNode('').
cb40: 20 20 2f 2f 20 69 66 20 74 68 65 20 70 61 72 65 // if the pare
cb50: 6e 74 4e 6f 64 65 20 69 73 20 64 65 66 69 6e 65 ntNode is define
cb60: 64 20 77 65 20 63 61 6e 20 65 61 73 69 6c 79 20 d we can easily
cb70: 72 65 70 6c 61 63 65 20 74 68 65 20 74 61 67 0a replace the tag.
cb80: 20 20 20 20 20 20 20 20 69 66 20 28 64 6f 6d 2e if (dom.
cb90: 70 61 72 65 6e 74 4e 6f 64 65 29 0a 20 20 20 20 parentNode).
cba0: 20 20 20 20 20 20 72 65 6d 6f 76 65 28 29 0a 20 remove().
cbb0: 20 20 20 20 20 20 20 2f 2f 20 6f 74 68 65 72 77 // otherw
cbc0: 69 73 65 20 77 65 20 6e 65 65 64 20 74 6f 20 77 ise we need to w
cbd0: 61 69 74 20 74 68 65 20 75 70 64 61 74 65 64 20 ait the updated
cbe0: 65 76 65 6e 74 0a 20 20 20 20 20 20 20 20 65 6c event. el
cbf0: 73 65 20 28 74 61 67 2e 70 61 72 65 6e 74 20 7c se (tag.parent |
cc00: 7c 20 74 61 67 29 2e 6f 6e 65 28 27 75 70 64 61 | tag).one('upda
cc10: 74 65 64 27 2c 20 72 65 6d 6f 76 65 29 0a 0a 20 ted', remove)..
cc20: 20 20 20 20 20 20 20 64 6f 6d 2e 69 6e 53 74 75 dom.inStu
cc30: 62 20 3d 20 74 72 75 65 0a 20 20 20 20 20 20 7d b = true. }
cc40: 0a 20 20 20 20 2f 2f 20 73 68 6f 77 20 2f 20 68 . // show / h
cc50: 69 64 65 0a 20 20 20 20 7d 20 65 6c 73 65 20 69 ide. } else i
cc60: 66 20 28 61 74 74 72 4e 61 6d 65 20 3d 3d 3d 20 f (attrName ===
cc70: 27 73 68 6f 77 27 29 20 7b 0a 20 20 20 20 20 20 'show') {.
cc80: 64 6f 6d 2e 73 74 79 6c 65 2e 64 69 73 70 6c 61 dom.style.displa
cc90: 79 20 3d 20 76 61 6c 75 65 20 3f 20 27 27 20 3a y = value ? '' :
cca0: 20 27 6e 6f 6e 65 27 0a 0a 20 20 20 20 7d 20 65 'none'.. } e
ccb0: 6c 73 65 20 69 66 20 28 61 74 74 72 4e 61 6d 65 lse if (attrName
ccc0: 20 3d 3d 3d 20 27 68 69 64 65 27 29 20 7b 0a 20 === 'hide') {.
ccd0: 20 20 20 20 20 64 6f 6d 2e 73 74 79 6c 65 2e 64 dom.style.d
cce0: 69 73 70 6c 61 79 20 3d 20 76 61 6c 75 65 20 3f isplay = value ?
ccf0: 20 27 6e 6f 6e 65 27 20 3a 20 27 27 0a 0a 20 20 'none' : ''..
cd00: 20 20 7d 20 65 6c 73 65 20 69 66 20 28 65 78 70 } else if (exp
cd10: 72 2e 62 6f 6f 6c 29 20 7b 0a 20 20 20 20 20 20 r.bool) {.
cd20: 64 6f 6d 5b 61 74 74 72 4e 61 6d 65 5d 20 3d 20 dom[attrName] =
cd30: 76 61 6c 75 65 0a 20 20 20 20 20 20 69 66 20 28 value. if (
cd40: 76 61 6c 75 65 29 20 73 65 74 41 74 74 72 28 64 value) setAttr(d
cd50: 6f 6d 2c 20 61 74 74 72 4e 61 6d 65 2c 20 61 74 om, attrName, at
cd60: 74 72 4e 61 6d 65 29 0a 20 20 20 20 20 20 69 66 trName). if
cd70: 20 28 46 49 52 45 46 4f 58 20 26 26 20 61 74 74 (FIREFOX && att
cd80: 72 4e 61 6d 65 20 3d 3d 3d 20 27 73 65 6c 65 63 rName === 'selec
cd90: 74 65 64 27 20 26 26 20 64 6f 6d 2e 74 61 67 4e ted' && dom.tagN
cda0: 61 6d 65 20 3d 3d 3d 20 27 4f 50 54 49 4f 4e 27 ame === 'OPTION'
cdb0: 29 20 7b 0a 20 20 20 20 20 20 20 20 64 6f 6d 2e ) {. dom.
cdc0: 5f 5f 72 69 6f 74 31 33 37 34 20 3d 20 76 61 6c __riot1374 = val
cdd0: 75 65 20 20 20 2f 2f 20 23 31 33 37 34 0a 20 20 ue // #1374.
cde0: 20 20 20 20 7d 0a 0a 20 20 20 20 7d 20 65 6c 73 }.. } els
cdf0: 65 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 3d 20 e if (value ===
ce00: 30 20 7c 7c 20 76 61 6c 75 65 20 26 26 20 74 79 0 || value && ty
ce10: 70 65 6f 66 20 76 61 6c 75 65 20 21 3d 3d 20 54 peof value !== T
ce20: 5f 4f 42 4a 45 43 54 29 20 7b 0a 20 20 20 20 20 _OBJECT) {.
ce30: 20 2f 2f 20 3c 69 6d 67 20 73 72 63 3d 22 7b 20 // <img src="{
ce40: 65 78 70 72 20 7d 22 3e 0a 20 20 20 20 20 20 69 expr }">. i
ce50: 66 20 28 73 74 61 72 74 73 57 69 74 68 28 61 74 f (startsWith(at
ce60: 74 72 4e 61 6d 65 2c 20 52 49 4f 54 5f 50 52 45 trName, RIOT_PRE
ce70: 46 49 58 29 20 26 26 20 61 74 74 72 4e 61 6d 65 FIX) && attrName
ce80: 20 21 3d 20 52 49 4f 54 5f 54 41 47 29 20 7b 0a != RIOT_TAG) {.
ce90: 20 20 20 20 20 20 20 20 61 74 74 72 4e 61 6d 65 attrName
cea0: 20 3d 20 61 74 74 72 4e 61 6d 65 2e 73 6c 69 63 = attrName.slic
ceb0: 65 28 52 49 4f 54 5f 50 52 45 46 49 58 2e 6c 65 e(RIOT_PREFIX.le
cec0: 6e 67 74 68 29 0a 20 20 20 20 20 20 7d 0a 20 20 ngth). }.
ced0: 20 20 20 20 73 65 74 41 74 74 72 28 64 6f 6d 2c setAttr(dom,
cee0: 20 61 74 74 72 4e 61 6d 65 2c 20 76 61 6c 75 65 attrName, value
cef0: 29 0a 20 20 20 20 7d 0a 0a 20 20 7d 29 0a 0a 7d ). }.. })..}
cf00: 0a 2f 2a 2a 0a 20 2a 20 53 70 65 63 69 61 6c 69 ./**. * Speciali
cf10: 7a 65 64 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 zed function for
cf20: 20 6c 6f 6f 70 69 6e 67 20 61 6e 20 61 72 72 61 looping an arra
cf30: 79 2d 6c 69 6b 65 20 63 6f 6c 6c 65 63 74 69 6f y-like collectio
cf40: 6e 20 77 69 74 68 20 60 65 61 63 68 3d 7b 7d 60 n with `each={}`
cf50: 0a 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 41 . * @param { A
cf60: 72 72 61 79 20 7d 20 65 6c 73 20 2d 20 63 6f 6c rray } els - col
cf70: 6c 65 63 74 69 6f 6e 20 6f 66 20 69 74 65 6d 73 lection of items
cf80: 0a 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 46 75 . * @param {Fu
cf90: 6e 63 74 69 6f 6e 7d 20 66 6e 20 2d 20 63 61 6c nction} fn - cal
cfa0: 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 0a 20 lback function.
cfb0: 2a 20 40 72 65 74 75 72 6e 73 20 7b 20 41 72 72 * @returns { Arr
cfc0: 61 79 20 7d 20 74 68 65 20 61 72 72 61 79 20 6c ay } the array l
cfd0: 6f 6f 70 65 64 0a 20 2a 2f 0a 66 75 6e 63 74 69 ooped. */.functi
cfe0: 6f 6e 20 65 61 63 68 28 65 6c 73 2c 20 66 6e 29 on each(els, fn)
cff0: 20 7b 0a 20 20 76 61 72 20 6c 65 6e 20 3d 20 65 {. var len = e
d000: 6c 73 20 3f 20 65 6c 73 2e 6c 65 6e 67 74 68 20 ls ? els.length
d010: 3a 20 30 0a 0a 20 20 66 6f 72 20 28 76 61 72 20 : 0.. for (var
d020: 69 20 3d 20 30 2c 20 65 6c 3b 20 69 20 3c 20 6c i = 0, el; i < l
d030: 65 6e 3b 20 69 2b 2b 29 20 7b 0a 20 20 20 20 65 en; i++) {. e
d040: 6c 20 3d 20 65 6c 73 5b 69 5d 0a 20 20 20 20 2f l = els[i]. /
d050: 2f 20 72 65 74 75 72 6e 20 66 61 6c 73 65 20 2d / return false -
d060: 3e 20 63 75 72 72 65 6e 74 20 69 74 65 6d 20 77 > current item w
d070: 61 73 20 72 65 6d 6f 76 65 64 20 62 79 20 66 6e as removed by fn
d080: 20 64 75 72 69 6e 67 20 74 68 65 20 6c 6f 6f 70 during the loop
d090: 0a 20 20 20 20 69 66 20 28 65 6c 20 21 3d 20 6e . if (el != n
d0a0: 75 6c 6c 20 26 26 20 66 6e 28 65 6c 2c 20 69 29 ull && fn(el, i)
d0b0: 20 3d 3d 3d 20 66 61 6c 73 65 29 20 69 2d 2d 0a === false) i--.
d0c0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 65 6c 73 }. return els
d0d0: 0a 7d 0a 0a 2f 2a 2a 0a 20 2a 20 44 65 74 65 63 .}../**. * Detec
d0e0: 74 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e t if the argumen
d0f0: 74 20 70 61 73 73 65 64 20 69 73 20 61 20 66 75 t passed is a fu
d100: 6e 63 74 69 6f 6e 0a 20 2a 20 40 70 61 72 61 6d nction. * @param
d110: 20 20 20 7b 20 2a 20 7d 20 76 20 2d 20 77 68 61 { * } v - wha
d120: 74 65 76 65 72 20 79 6f 75 20 77 61 6e 74 20 74 tever you want t
d130: 6f 20 70 61 73 73 20 74 6f 20 74 68 69 73 20 66 o pass to this f
d140: 75 6e 63 74 69 6f 6e 0a 20 2a 20 40 72 65 74 75 unction. * @retu
d150: 72 6e 73 20 7b 20 42 6f 6f 6c 65 61 6e 20 7d 20 rns { Boolean }
d160: 2d 0a 20 2a 2f 0a 66 75 6e 63 74 69 6f 6e 20 69 -. */.function i
d170: 73 46 75 6e 63 74 69 6f 6e 28 76 29 20 7b 0a 20 sFunction(v) {.
d180: 20 72 65 74 75 72 6e 20 74 79 70 65 6f 66 20 76 return typeof v
d190: 20 3d 3d 3d 20 54 5f 46 55 4e 43 54 49 4f 4e 20 === T_FUNCTION
d1a0: 7c 7c 20 66 61 6c 73 65 20 20 20 2f 2f 20 61 76 || false // av
d1b0: 6f 69 64 20 49 45 20 70 72 6f 62 6c 65 6d 73 0a oid IE problems.
d1c0: 7d 0a 0a 2f 2a 2a 0a 20 2a 20 47 65 74 20 74 68 }../**. * Get th
d1d0: 65 20 6f 75 74 65 72 20 68 74 6d 6c 20 6f 66 20 e outer html of
d1e0: 61 6e 79 20 44 4f 4d 20 6e 6f 64 65 20 53 56 47 any DOM node SVG
d1f0: 73 20 69 6e 63 6c 75 64 65 64 0a 20 2a 20 40 70 s included. * @p
d200: 61 72 61 6d 20 20 20 7b 20 4f 62 6a 65 63 74 20 aram { Object
d210: 7d 20 65 6c 20 2d 20 44 4f 4d 20 6e 6f 64 65 20 } el - DOM node
d220: 74 6f 20 70 61 72 73 65 0a 20 2a 20 40 72 65 74 to parse. * @ret
d230: 75 72 6e 73 20 7b 20 53 74 72 69 6e 67 20 7d 20 urns { String }
d240: 65 6c 2e 6f 75 74 65 72 48 54 4d 4c 0a 20 2a 2f el.outerHTML. */
d250: 0a 66 75 6e 63 74 69 6f 6e 20 67 65 74 4f 75 74 .function getOut
d260: 65 72 48 54 4d 4c 28 65 6c 29 20 7b 0a 20 20 69 erHTML(el) {. i
d270: 66 20 28 65 6c 2e 6f 75 74 65 72 48 54 4d 4c 29 f (el.outerHTML)
d280: 20 72 65 74 75 72 6e 20 65 6c 2e 6f 75 74 65 72 return el.outer
d290: 48 54 4d 4c 0a 20 20 2f 2f 20 73 6f 6d 65 20 62 HTML. // some b
d2a0: 72 6f 77 73 65 72 73 20 64 6f 20 6e 6f 74 20 73 rowsers do not s
d2b0: 75 70 70 6f 72 74 20 6f 75 74 65 72 48 54 4d 4c upport outerHTML
d2c0: 20 6f 6e 20 74 68 65 20 53 56 47 73 20 74 61 67 on the SVGs tag
d2d0: 73 0a 20 20 65 6c 73 65 20 7b 0a 20 20 20 20 76 s. else {. v
d2e0: 61 72 20 63 6f 6e 74 61 69 6e 65 72 20 3d 20 6d ar container = m
d2f0: 6b 45 6c 28 27 64 69 76 27 29 0a 20 20 20 20 63 kEl('div'). c
d300: 6f 6e 74 61 69 6e 65 72 2e 61 70 70 65 6e 64 43 ontainer.appendC
d310: 68 69 6c 64 28 65 6c 2e 63 6c 6f 6e 65 4e 6f 64 hild(el.cloneNod
d320: 65 28 74 72 75 65 29 29 0a 20 20 20 20 72 65 74 e(true)). ret
d330: 75 72 6e 20 63 6f 6e 74 61 69 6e 65 72 2e 69 6e urn container.in
d340: 6e 65 72 48 54 4d 4c 0a 20 20 7d 0a 7d 0a 0a 2f nerHTML. }.}../
d350: 2a 2a 0a 20 2a 20 53 65 74 20 74 68 65 20 69 6e **. * Set the in
d360: 6e 65 72 20 68 74 6d 6c 20 6f 66 20 61 6e 79 20 ner html of any
d370: 44 4f 4d 20 6e 6f 64 65 20 53 56 47 73 20 69 6e DOM node SVGs in
d380: 63 6c 75 64 65 64 0a 20 2a 20 40 70 61 72 61 6d cluded. * @param
d390: 20 7b 20 4f 62 6a 65 63 74 20 7d 20 63 6f 6e 74 { Object } cont
d3a0: 61 69 6e 65 72 20 2d 20 44 4f 4d 20 6e 6f 64 65 ainer - DOM node
d3b0: 20 77 68 65 72 65 20 77 65 20 77 69 6c 6c 20 69 where we will i
d3c0: 6e 6a 65 63 74 20 74 68 65 20 6e 65 77 20 68 74 nject the new ht
d3d0: 6d 6c 0a 20 2a 20 40 70 61 72 61 6d 20 7b 20 53 ml. * @param { S
d3e0: 74 72 69 6e 67 20 7d 20 68 74 6d 6c 20 2d 20 68 tring } html - h
d3f0: 74 6d 6c 20 74 6f 20 69 6e 6a 65 63 74 0a 20 2a tml to inject. *
d400: 2f 0a 66 75 6e 63 74 69 6f 6e 20 73 65 74 49 6e /.function setIn
d410: 6e 65 72 48 54 4d 4c 28 63 6f 6e 74 61 69 6e 65 nerHTML(containe
d420: 72 2c 20 68 74 6d 6c 29 20 7b 0a 20 20 69 66 20 r, html) {. if
d430: 28 74 79 70 65 6f 66 20 63 6f 6e 74 61 69 6e 65 (typeof containe
d440: 72 2e 69 6e 6e 65 72 48 54 4d 4c 20 21 3d 20 54 r.innerHTML != T
d450: 5f 55 4e 44 45 46 29 20 63 6f 6e 74 61 69 6e 65 _UNDEF) containe
d460: 72 2e 69 6e 6e 65 72 48 54 4d 4c 20 3d 20 68 74 r.innerHTML = ht
d470: 6d 6c 0a 20 20 2f 2f 20 73 6f 6d 65 20 62 72 6f ml. // some bro
d480: 77 73 65 72 73 20 64 6f 20 6e 6f 74 20 73 75 70 wsers do not sup
d490: 70 6f 72 74 20 69 6e 6e 65 72 48 54 4d 4c 20 6f port innerHTML o
d4a0: 6e 20 74 68 65 20 53 56 47 73 20 74 61 67 73 0a n the SVGs tags.
d4b0: 20 20 65 6c 73 65 20 7b 0a 20 20 20 20 76 61 72 else {. var
d4c0: 20 64 6f 63 20 3d 20 6e 65 77 20 44 4f 4d 50 61 doc = new DOMPa
d4d0: 72 73 65 72 28 29 2e 70 61 72 73 65 46 72 6f 6d rser().parseFrom
d4e0: 53 74 72 69 6e 67 28 68 74 6d 6c 2c 20 27 61 70 String(html, 'ap
d4f0: 70 6c 69 63 61 74 69 6f 6e 2f 78 6d 6c 27 29 0a plication/xml').
d500: 20 20 20 20 63 6f 6e 74 61 69 6e 65 72 2e 61 70 container.ap
d510: 70 65 6e 64 43 68 69 6c 64 28 0a 20 20 20 20 20 pendChild(.
d520: 20 63 6f 6e 74 61 69 6e 65 72 2e 6f 77 6e 65 72 container.owner
d530: 44 6f 63 75 6d 65 6e 74 2e 69 6d 70 6f 72 74 4e Document.importN
d540: 6f 64 65 28 64 6f 63 2e 64 6f 63 75 6d 65 6e 74 ode(doc.document
d550: 45 6c 65 6d 65 6e 74 2c 20 74 72 75 65 29 0a 20 Element, true).
d560: 20 20 20 29 0a 20 20 7d 0a 7d 0a 0a 2f 2a 2a 0a ). }.}../**.
d570: 20 2a 20 43 68 65 63 6b 73 20 77 65 74 68 65 72 * Checks wether
d580: 20 61 20 44 4f 4d 20 6e 6f 64 65 20 6d 75 73 74 a DOM node must
d590: 20 62 65 20 63 6f 6e 73 69 64 65 72 65 64 20 70 be considered p
d5a0: 61 72 74 20 6f 66 20 61 6e 20 73 76 67 20 64 6f art of an svg do
d5b0: 63 75 6d 65 6e 74 0a 20 2a 20 40 70 61 72 61 6d cument. * @param
d5c0: 20 20 20 7b 20 53 74 72 69 6e 67 20 7d 20 20 6e { String } n
d5d0: 61 6d 65 20 2d 20 74 61 67 20 6e 61 6d 65 0a 20 ame - tag name.
d5e0: 2a 20 40 72 65 74 75 72 6e 73 20 7b 20 42 6f 6f * @returns { Boo
d5f0: 6c 65 61 6e 20 7d 20 2d 0a 20 2a 2f 0a 66 75 6e lean } -. */.fun
d600: 63 74 69 6f 6e 20 69 73 53 56 47 54 61 67 28 6e ction isSVGTag(n
d610: 61 6d 65 29 20 7b 0a 20 20 72 65 74 75 72 6e 20 ame) {. return
d620: 7e 53 56 47 5f 54 41 47 53 5f 4c 49 53 54 2e 69 ~SVG_TAGS_LIST.i
d630: 6e 64 65 78 4f 66 28 6e 61 6d 65 29 0a 7d 0a 0a ndexOf(name).}..
d640: 2f 2a 2a 0a 20 2a 20 44 65 74 65 63 74 20 69 66 /**. * Detect if
d650: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 70 61 the argument pa
d660: 73 73 65 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 ssed is an objec
d670: 74 2c 20 65 78 63 6c 75 64 65 20 6e 75 6c 6c 2e t, exclude null.
d680: 0a 20 2a 20 4e 4f 54 45 3a 20 55 73 65 20 69 73 . * NOTE: Use is
d690: 4f 62 6a 65 63 74 28 78 29 20 26 26 20 21 69 73 Object(x) && !is
d6a0: 41 72 72 61 79 28 78 29 20 74 6f 20 65 78 63 6c Array(x) to excl
d6b0: 75 64 65 73 20 61 72 72 61 79 73 2e 0a 20 2a 20 udes arrays.. *
d6c0: 40 70 61 72 61 6d 20 20 20 7b 20 2a 20 7d 20 76 @param { * } v
d6d0: 20 2d 20 77 68 61 74 65 76 65 72 20 79 6f 75 20 - whatever you
d6e0: 77 61 6e 74 20 74 6f 20 70 61 73 73 20 74 6f 20 want to pass to
d6f0: 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 0a 20 2a this function. *
d700: 20 40 72 65 74 75 72 6e 73 20 7b 20 42 6f 6f 6c @returns { Bool
d710: 65 61 6e 20 7d 20 2d 0a 20 2a 2f 0a 66 75 6e 63 ean } -. */.func
d720: 74 69 6f 6e 20 69 73 4f 62 6a 65 63 74 28 76 29 tion isObject(v)
d730: 20 7b 0a 20 20 72 65 74 75 72 6e 20 76 20 26 26 {. return v &&
d740: 20 74 79 70 65 6f 66 20 76 20 3d 3d 3d 20 54 5f typeof v === T_
d750: 4f 42 4a 45 43 54 20 20 20 20 20 20 20 20 20 2f OBJECT /
d760: 2f 20 74 79 70 65 6f 66 20 6e 75 6c 6c 20 69 73 / typeof null is
d770: 20 27 6f 62 6a 65 63 74 27 0a 7d 0a 0a 2f 2a 2a 'object'.}../**
d780: 0a 20 2a 20 52 65 6d 6f 76 65 20 61 6e 79 20 44 . * Remove any D
d790: 4f 4d 20 61 74 74 72 69 62 75 74 65 20 66 72 6f OM attribute fro
d7a0: 6d 20 61 20 6e 6f 64 65 0a 20 2a 20 40 70 61 72 m a node. * @par
d7b0: 61 6d 20 20 20 7b 20 4f 62 6a 65 63 74 20 7d 20 am { Object }
d7c0: 64 6f 6d 20 2d 20 44 4f 4d 20 6e 6f 64 65 20 77 dom - DOM node w
d7d0: 65 20 77 61 6e 74 20 74 6f 20 75 70 64 61 74 65 e want to update
d7e0: 0a 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 53 . * @param { S
d7f0: 74 72 69 6e 67 20 7d 20 6e 61 6d 65 20 2d 20 6e tring } name - n
d800: 61 6d 65 20 6f 66 20 74 68 65 20 70 72 6f 70 65 ame of the prope
d810: 72 74 79 20 77 65 20 77 61 6e 74 20 74 6f 20 72 rty we want to r
d820: 65 6d 6f 76 65 0a 20 2a 2f 0a 66 75 6e 63 74 69 emove. */.functi
d830: 6f 6e 20 72 65 6d 41 74 74 72 28 64 6f 6d 2c 20 on remAttr(dom,
d840: 6e 61 6d 65 29 20 7b 0a 20 20 64 6f 6d 2e 72 65 name) {. dom.re
d850: 6d 6f 76 65 41 74 74 72 69 62 75 74 65 28 6e 61 moveAttribute(na
d860: 6d 65 29 0a 7d 0a 0a 2f 2a 2a 0a 20 2a 20 43 6f me).}../**. * Co
d870: 6e 76 65 72 74 20 61 20 73 74 72 69 6e 67 20 63 nvert a string c
d880: 6f 6e 74 61 69 6e 69 6e 67 20 64 61 73 68 65 73 ontaining dashes
d890: 20 74 6f 20 63 61 6d 65 6c 20 63 61 73 65 0a 20 to camel case.
d8a0: 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 53 74 72 * @param { Str
d8b0: 69 6e 67 20 7d 20 73 74 72 69 6e 67 20 2d 20 69 ing } string - i
d8c0: 6e 70 75 74 20 73 74 72 69 6e 67 0a 20 2a 20 40 nput string. * @
d8d0: 72 65 74 75 72 6e 73 20 7b 20 53 74 72 69 6e 67 returns { String
d8e0: 20 7d 20 6d 79 2d 73 74 72 69 6e 67 20 2d 3e 20 } my-string ->
d8f0: 6d 79 53 74 72 69 6e 67 0a 20 2a 2f 0a 66 75 6e myString. */.fun
d900: 63 74 69 6f 6e 20 74 6f 43 61 6d 65 6c 28 73 74 ction toCamel(st
d910: 72 69 6e 67 29 20 7b 0a 20 20 72 65 74 75 72 6e ring) {. return
d920: 20 73 74 72 69 6e 67 2e 72 65 70 6c 61 63 65 28 string.replace(
d930: 2f 2d 28 5c 77 29 2f 67 2c 20 66 75 6e 63 74 69 /-(\w)/g, functi
d940: 6f 6e 28 5f 2c 20 63 29 20 7b 0a 20 20 20 20 72 on(_, c) {. r
d950: 65 74 75 72 6e 20 63 2e 74 6f 55 70 70 65 72 43 eturn c.toUpperC
d960: 61 73 65 28 29 0a 20 20 7d 29 0a 7d 0a 0a 2f 2a ase(). }).}../*
d970: 2a 0a 20 2a 20 47 65 74 20 74 68 65 20 76 61 6c *. * Get the val
d980: 75 65 20 6f 66 20 61 6e 79 20 44 4f 4d 20 61 74 ue of any DOM at
d990: 74 72 69 62 75 74 65 20 6f 6e 20 61 20 6e 6f 64 tribute on a nod
d9a0: 65 0a 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 e. * @param {
d9b0: 4f 62 6a 65 63 74 20 7d 20 64 6f 6d 20 2d 20 44 Object } dom - D
d9c0: 4f 4d 20 6e 6f 64 65 20 77 65 20 77 61 6e 74 20 OM node we want
d9d0: 74 6f 20 70 61 72 73 65 0a 20 2a 20 40 70 61 72 to parse. * @par
d9e0: 61 6d 20 20 20 7b 20 53 74 72 69 6e 67 20 7d 20 am { String }
d9f0: 6e 61 6d 65 20 2d 20 6e 61 6d 65 20 6f 66 20 74 name - name of t
da00: 68 65 20 61 74 74 72 69 62 75 74 65 20 77 65 20 he attribute we
da10: 77 61 6e 74 20 74 6f 20 67 65 74 0a 20 2a 20 40 want to get. * @
da20: 72 65 74 75 72 6e 73 20 7b 20 53 74 72 69 6e 67 returns { String
da30: 20 7c 20 75 6e 64 65 66 69 6e 65 64 20 7d 20 6e | undefined } n
da40: 61 6d 65 20 6f 66 20 74 68 65 20 6e 6f 64 65 20 ame of the node
da50: 61 74 74 72 69 62 75 74 65 20 77 68 65 74 68 65 attribute whethe
da60: 72 20 69 74 20 65 78 69 73 74 73 0a 20 2a 2f 0a r it exists. */.
da70: 66 75 6e 63 74 69 6f 6e 20 67 65 74 41 74 74 72 function getAttr
da80: 28 64 6f 6d 2c 20 6e 61 6d 65 29 20 7b 0a 20 20 (dom, name) {.
da90: 72 65 74 75 72 6e 20 64 6f 6d 2e 67 65 74 41 74 return dom.getAt
daa0: 74 72 69 62 75 74 65 28 6e 61 6d 65 29 0a 7d 0a tribute(name).}.
dab0: 0a 2f 2a 2a 0a 20 2a 20 53 65 74 20 61 6e 79 20 ./**. * Set any
dac0: 44 4f 4d 2f 53 56 47 20 61 74 74 72 69 62 75 74 DOM/SVG attribut
dad0: 65 0a 20 2a 20 40 70 61 72 61 6d 20 7b 20 4f 62 e. * @param { Ob
dae0: 6a 65 63 74 20 7d 20 64 6f 6d 20 2d 20 44 4f 4d ject } dom - DOM
daf0: 20 6e 6f 64 65 20 77 65 20 77 61 6e 74 20 74 6f node we want to
db00: 20 75 70 64 61 74 65 0a 20 2a 20 40 70 61 72 61 update. * @para
db10: 6d 20 7b 20 53 74 72 69 6e 67 20 7d 20 6e 61 6d m { String } nam
db20: 65 20 2d 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 e - name of the
db30: 70 72 6f 70 65 72 74 79 20 77 65 20 77 61 6e 74 property we want
db40: 20 74 6f 20 73 65 74 0a 20 2a 20 40 70 61 72 61 to set. * @para
db50: 6d 20 7b 20 53 74 72 69 6e 67 20 7d 20 76 61 6c m { String } val
db60: 20 2d 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 - value of the
db70: 70 72 6f 70 65 72 74 79 20 77 65 20 77 61 6e 74 property we want
db80: 20 74 6f 20 73 65 74 0a 20 2a 2f 0a 66 75 6e 63 to set. */.func
db90: 74 69 6f 6e 20 73 65 74 41 74 74 72 28 64 6f 6d tion setAttr(dom
dba0: 2c 20 6e 61 6d 65 2c 20 76 61 6c 29 20 7b 0a 20 , name, val) {.
dbb0: 20 76 61 72 20 78 6c 69 6e 6b 20 3d 20 58 4c 49 var xlink = XLI
dbc0: 4e 4b 5f 52 45 47 45 58 2e 65 78 65 63 28 6e 61 NK_REGEX.exec(na
dbd0: 6d 65 29 0a 20 20 69 66 20 28 78 6c 69 6e 6b 20 me). if (xlink
dbe0: 26 26 20 78 6c 69 6e 6b 5b 31 5d 29 0a 20 20 20 && xlink[1]).
dbf0: 20 64 6f 6d 2e 73 65 74 41 74 74 72 69 62 75 74 dom.setAttribut
dc00: 65 4e 53 28 58 4c 49 4e 4b 5f 4e 53 2c 20 78 6c eNS(XLINK_NS, xl
dc10: 69 6e 6b 5b 31 5d 2c 20 76 61 6c 29 0a 20 20 65 ink[1], val). e
dc20: 6c 73 65 0a 20 20 20 20 64 6f 6d 2e 73 65 74 41 lse. dom.setA
dc30: 74 74 72 69 62 75 74 65 28 6e 61 6d 65 2c 20 76 ttribute(name, v
dc40: 61 6c 29 0a 7d 0a 0a 2f 2a 2a 0a 20 2a 20 44 65 al).}../**. * De
dc50: 74 65 63 74 20 74 68 65 20 74 61 67 20 69 6d 70 tect the tag imp
dc60: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 62 79 20 61 lementation by a
dc70: 20 44 4f 4d 20 6e 6f 64 65 0a 20 2a 20 40 70 61 DOM node. * @pa
dc80: 72 61 6d 20 20 20 7b 20 4f 62 6a 65 63 74 20 7d ram { Object }
dc90: 20 64 6f 6d 20 2d 20 44 4f 4d 20 6e 6f 64 65 20 dom - DOM node
dca0: 77 65 20 6e 65 65 64 20 74 6f 20 70 61 72 73 65 we need to parse
dcb0: 20 74 6f 20 67 65 74 20 69 74 73 20 74 61 67 20 to get its tag
dcc0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 20 implementation.
dcd0: 2a 20 40 72 65 74 75 72 6e 73 20 7b 20 4f 62 6a * @returns { Obj
dce0: 65 63 74 20 7d 20 69 74 20 72 65 74 75 72 6e 73 ect } it returns
dcf0: 20 61 6e 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61 an object conta
dd00: 69 6e 69 6e 67 20 74 68 65 20 69 6d 70 6c 65 6d ining the implem
dd10: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20 63 75 entation of a cu
dd20: 73 74 6f 6d 20 74 61 67 20 28 74 65 6d 70 6c 61 stom tag (templa
dd30: 74 65 20 61 6e 64 20 62 6f 6f 74 20 66 75 6e 63 te and boot func
dd40: 74 69 6f 6e 29 0a 20 2a 2f 0a 66 75 6e 63 74 69 tion). */.functi
dd50: 6f 6e 20 67 65 74 54 61 67 28 64 6f 6d 29 20 7b on getTag(dom) {
dd60: 0a 20 20 72 65 74 75 72 6e 20 64 6f 6d 2e 74 61 . return dom.ta
dd70: 67 4e 61 6d 65 20 26 26 20 5f 5f 74 61 67 49 6d gName && __tagIm
dd80: 70 6c 5b 67 65 74 41 74 74 72 28 64 6f 6d 2c 20 pl[getAttr(dom,
dd90: 52 49 4f 54 5f 54 41 47 5f 49 53 29 20 7c 7c 0a RIOT_TAG_IS) ||.
dda0: 20 20 20 20 67 65 74 41 74 74 72 28 64 6f 6d 2c getAttr(dom,
ddb0: 20 52 49 4f 54 5f 54 41 47 29 20 7c 7c 20 64 6f RIOT_TAG) || do
ddc0: 6d 2e 74 61 67 4e 61 6d 65 2e 74 6f 4c 6f 77 65 m.tagName.toLowe
ddd0: 72 43 61 73 65 28 29 5d 0a 7d 0a 2f 2a 2a 0a 20 rCase()].}./**.
dde0: 2a 20 41 64 64 20 61 20 63 68 69 6c 64 20 74 61 * Add a child ta
ddf0: 67 20 74 6f 20 69 74 73 20 70 61 72 65 6e 74 20 g to its parent
de00: 69 6e 74 6f 20 74 68 65 20 60 74 61 67 73 60 20 into the `tags`
de10: 6f 62 6a 65 63 74 0a 20 2a 20 40 70 61 72 61 6d object. * @param
de20: 20 20 20 7b 20 4f 62 6a 65 63 74 20 7d 20 74 61 { Object } ta
de30: 67 20 2d 20 63 68 69 6c 64 20 74 61 67 20 69 6e g - child tag in
de40: 73 74 61 6e 63 65 0a 20 2a 20 40 70 61 72 61 6d stance. * @param
de50: 20 20 20 7b 20 53 74 72 69 6e 67 20 7d 20 74 61 { String } ta
de60: 67 4e 61 6d 65 20 2d 20 6b 65 79 20 77 68 65 72 gName - key wher
de70: 65 20 74 68 65 20 6e 65 77 20 74 61 67 20 77 69 e the new tag wi
de80: 6c 6c 20 62 65 20 73 74 6f 72 65 64 0a 20 2a 20 ll be stored. *
de90: 40 70 61 72 61 6d 20 20 20 7b 20 4f 62 6a 65 63 @param { Objec
dea0: 74 20 7d 20 70 61 72 65 6e 74 20 2d 20 74 61 67 t } parent - tag
deb0: 20 69 6e 73 74 61 6e 63 65 20 77 68 65 72 65 20 instance where
dec0: 74 68 65 20 6e 65 77 20 63 68 69 6c 64 20 74 61 the new child ta
ded0: 67 20 77 69 6c 6c 20 62 65 20 69 6e 63 6c 75 64 g will be includ
dee0: 65 64 0a 20 2a 2f 0a 66 75 6e 63 74 69 6f 6e 20 ed. */.function
def0: 61 64 64 43 68 69 6c 64 54 61 67 28 74 61 67 2c addChildTag(tag,
df00: 20 74 61 67 4e 61 6d 65 2c 20 70 61 72 65 6e 74 tagName, parent
df10: 29 20 7b 0a 20 20 76 61 72 20 63 61 63 68 65 64 ) {. var cached
df20: 54 61 67 20 3d 20 70 61 72 65 6e 74 2e 74 61 67 Tag = parent.tag
df30: 73 5b 74 61 67 4e 61 6d 65 5d 0a 0a 20 20 2f 2f s[tagName].. //
df40: 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6d 75 if there are mu
df50: 6c 74 69 70 6c 65 20 63 68 69 6c 64 72 65 6e 20 ltiple children
df60: 74 61 67 73 20 68 61 76 69 6e 67 20 74 68 65 20 tags having the
df70: 73 61 6d 65 20 6e 61 6d 65 0a 20 20 69 66 20 28 same name. if (
df80: 63 61 63 68 65 64 54 61 67 29 20 7b 0a 20 20 20 cachedTag) {.
df90: 20 2f 2f 20 69 66 20 74 68 65 20 70 61 72 65 6e // if the paren
dfa0: 74 20 74 61 67 73 20 70 72 6f 70 65 72 74 79 20 t tags property
dfb0: 69 73 20 6e 6f 74 20 79 65 74 20 61 6e 20 61 72 is not yet an ar
dfc0: 72 61 79 0a 20 20 20 20 2f 2f 20 63 72 65 61 74 ray. // creat
dfd0: 65 20 69 74 20 61 64 64 69 6e 67 20 74 68 65 20 e it adding the
dfe0: 66 69 72 73 74 20 63 61 63 68 65 64 20 74 61 67 first cached tag
dff0: 0a 20 20 20 20 69 66 20 28 21 69 73 41 72 72 61 . if (!isArra
e000: 79 28 63 61 63 68 65 64 54 61 67 29 29 0a 20 20 y(cachedTag)).
e010: 20 20 20 20 2f 2f 20 64 6f 6e 27 74 20 61 64 64 // don't add
e020: 20 74 68 65 20 73 61 6d 65 20 74 61 67 20 74 77 the same tag tw
e030: 69 63 65 0a 20 20 20 20 20 20 69 66 20 28 63 61 ice. if (ca
e040: 63 68 65 64 54 61 67 20 21 3d 3d 20 74 61 67 29 chedTag !== tag)
e050: 0a 20 20 20 20 20 20 20 20 70 61 72 65 6e 74 2e . parent.
e060: 74 61 67 73 5b 74 61 67 4e 61 6d 65 5d 20 3d 20 tags[tagName] =
e070: 5b 63 61 63 68 65 64 54 61 67 5d 0a 20 20 20 20 [cachedTag].
e080: 2f 2f 20 61 64 64 20 74 68 65 20 6e 65 77 20 6e // add the new n
e090: 65 73 74 65 64 20 74 61 67 20 74 6f 20 74 68 65 ested tag to the
e0a0: 20 61 72 72 61 79 0a 20 20 20 20 69 66 20 28 21 array. if (!
e0b0: 63 6f 6e 74 61 69 6e 73 28 70 61 72 65 6e 74 2e contains(parent.
e0c0: 74 61 67 73 5b 74 61 67 4e 61 6d 65 5d 2c 20 74 tags[tagName], t
e0d0: 61 67 29 29 0a 20 20 20 20 20 20 70 61 72 65 6e ag)). paren
e0e0: 74 2e 74 61 67 73 5b 74 61 67 4e 61 6d 65 5d 2e t.tags[tagName].
e0f0: 70 75 73 68 28 74 61 67 29 0a 20 20 7d 20 65 6c push(tag). } el
e100: 73 65 20 7b 0a 20 20 20 20 70 61 72 65 6e 74 2e se {. parent.
e110: 74 61 67 73 5b 74 61 67 4e 61 6d 65 5d 20 3d 20 tags[tagName] =
e120: 74 61 67 0a 20 20 7d 0a 7d 0a 0a 2f 2a 2a 0a 20 tag. }.}../**.
e130: 2a 20 4d 6f 76 65 20 74 68 65 20 70 6f 73 69 74 * Move the posit
e140: 69 6f 6e 20 6f 66 20 61 20 63 75 73 74 6f 6d 20 ion of a custom
e150: 74 61 67 20 69 6e 20 69 74 73 20 70 61 72 65 6e tag in its paren
e160: 74 20 74 61 67 0a 20 2a 20 40 70 61 72 61 6d 20 t tag. * @param
e170: 20 20 7b 20 4f 62 6a 65 63 74 20 7d 20 74 61 67 { Object } tag
e180: 20 2d 20 63 68 69 6c 64 20 74 61 67 20 69 6e 73 - child tag ins
e190: 74 61 6e 63 65 0a 20 2a 20 40 70 61 72 61 6d 20 tance. * @param
e1a0: 20 20 7b 20 53 74 72 69 6e 67 20 7d 20 74 61 67 { String } tag
e1b0: 4e 61 6d 65 20 2d 20 6b 65 79 20 77 68 65 72 65 Name - key where
e1c0: 20 74 68 65 20 74 61 67 20 77 61 73 20 73 74 6f the tag was sto
e1d0: 72 65 64 0a 20 2a 20 40 70 61 72 61 6d 20 20 20 red. * @param
e1e0: 7b 20 4e 75 6d 62 65 72 20 7d 20 6e 65 77 50 6f { Number } newPo
e1f0: 73 20 2d 20 69 6e 64 65 78 20 77 68 65 72 65 20 s - index where
e200: 74 68 65 20 6e 65 77 20 74 61 67 20 77 69 6c 6c the new tag will
e210: 20 62 65 20 73 74 6f 72 65 64 0a 20 2a 2f 0a 66 be stored. */.f
e220: 75 6e 63 74 69 6f 6e 20 6d 6f 76 65 43 68 69 6c unction moveChil
e230: 64 54 61 67 28 74 61 67 2c 20 74 61 67 4e 61 6d dTag(tag, tagNam
e240: 65 2c 20 6e 65 77 50 6f 73 29 20 7b 0a 20 20 76 e, newPos) {. v
e250: 61 72 20 70 61 72 65 6e 74 20 3d 20 74 61 67 2e ar parent = tag.
e260: 70 61 72 65 6e 74 2c 0a 20 20 20 20 74 61 67 73 parent,. tags
e270: 0a 20 20 2f 2f 20 6e 6f 20 70 61 72 65 6e 74 20 . // no parent
e280: 6e 6f 20 6d 6f 76 65 0a 20 20 69 66 20 28 21 70 no move. if (!p
e290: 61 72 65 6e 74 29 20 72 65 74 75 72 6e 0a 0a 20 arent) return..
e2a0: 20 74 61 67 73 20 3d 20 70 61 72 65 6e 74 2e 74 tags = parent.t
e2b0: 61 67 73 5b 74 61 67 4e 61 6d 65 5d 0a 0a 20 20 ags[tagName]..
e2c0: 69 66 20 28 69 73 41 72 72 61 79 28 74 61 67 73 if (isArray(tags
e2d0: 29 29 0a 20 20 20 20 74 61 67 73 2e 73 70 6c 69 )). tags.spli
e2e0: 63 65 28 6e 65 77 50 6f 73 2c 20 30 2c 20 74 61 ce(newPos, 0, ta
e2f0: 67 73 2e 73 70 6c 69 63 65 28 74 61 67 73 2e 69 gs.splice(tags.i
e300: 6e 64 65 78 4f 66 28 74 61 67 29 2c 20 31 29 5b ndexOf(tag), 1)[
e310: 30 5d 29 0a 20 20 65 6c 73 65 20 61 64 64 43 68 0]). else addCh
e320: 69 6c 64 54 61 67 28 74 61 67 2c 20 74 61 67 4e ildTag(tag, tagN
e330: 61 6d 65 2c 20 70 61 72 65 6e 74 29 0a 7d 0a 0a ame, parent).}..
e340: 2f 2a 2a 0a 20 2a 20 43 72 65 61 74 65 20 61 20 /**. * Create a
e350: 6e 65 77 20 63 68 69 6c 64 20 74 61 67 20 69 6e new child tag in
e360: 63 6c 75 64 69 6e 67 20 69 74 20 63 6f 72 72 65 cluding it corre
e370: 63 74 6c 79 20 69 6e 74 6f 20 69 74 73 20 70 61 ctly into its pa
e380: 72 65 6e 74 0a 20 2a 20 40 70 61 72 61 6d 20 20 rent. * @param
e390: 20 7b 20 4f 62 6a 65 63 74 20 7d 20 63 68 69 6c { Object } chil
e3a0: 64 20 2d 20 63 68 69 6c 64 20 74 61 67 20 69 6d d - child tag im
e3b0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 20 2a 20 plementation. *
e3c0: 40 70 61 72 61 6d 20 20 20 7b 20 4f 62 6a 65 63 @param { Objec
e3d0: 74 20 7d 20 6f 70 74 73 20 2d 20 74 61 67 20 6f t } opts - tag o
e3e0: 70 74 69 6f 6e 73 20 63 6f 6e 74 61 69 6e 69 6e ptions containin
e3f0: 67 20 74 68 65 20 44 4f 4d 20 6e 6f 64 65 20 77 g the DOM node w
e400: 68 65 72 65 20 74 68 65 20 74 61 67 20 77 69 6c here the tag wil
e410: 6c 20 62 65 20 6d 6f 75 6e 74 65 64 0a 20 2a 20 l be mounted. *
e420: 40 70 61 72 61 6d 20 20 20 7b 20 53 74 72 69 6e @param { Strin
e430: 67 20 7d 20 69 6e 6e 65 72 48 54 4d 4c 20 2d 20 g } innerHTML -
e440: 69 6e 6e 65 72 20 68 74 6d 6c 20 6f 66 20 74 68 inner html of th
e450: 65 20 63 68 69 6c 64 20 6e 6f 64 65 0a 20 2a 20 e child node. *
e460: 40 70 61 72 61 6d 20 20 20 7b 20 4f 62 6a 65 63 @param { Objec
e470: 74 20 7d 20 70 61 72 65 6e 74 20 2d 20 69 6e 73 t } parent - ins
e480: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 70 61 72 tance of the par
e490: 65 6e 74 20 74 61 67 20 69 6e 63 6c 75 64 69 6e ent tag includin
e4a0: 67 20 74 68 65 20 63 68 69 6c 64 20 63 75 73 74 g the child cust
e4b0: 6f 6d 20 74 61 67 0a 20 2a 20 40 72 65 74 75 72 om tag. * @retur
e4c0: 6e 73 20 7b 20 4f 62 6a 65 63 74 20 7d 20 69 6e ns { Object } in
e4d0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 6e 65 stance of the ne
e4e0: 77 20 63 68 69 6c 64 20 74 61 67 20 6a 75 73 74 w child tag just
e4f0: 20 63 72 65 61 74 65 64 0a 20 2a 2f 0a 66 75 6e created. */.fun
e500: 63 74 69 6f 6e 20 69 6e 69 74 43 68 69 6c 64 54 ction initChildT
e510: 61 67 28 63 68 69 6c 64 2c 20 6f 70 74 73 2c 20 ag(child, opts,
e520: 69 6e 6e 65 72 48 54 4d 4c 2c 20 70 61 72 65 6e innerHTML, paren
e530: 74 29 20 7b 0a 20 20 76 61 72 20 74 61 67 20 3d t) {. var tag =
e540: 20 6e 65 77 20 54 61 67 28 63 68 69 6c 64 2c 20 new Tag(child,
e550: 6f 70 74 73 2c 20 69 6e 6e 65 72 48 54 4d 4c 29 opts, innerHTML)
e560: 2c 0a 20 20 20 20 74 61 67 4e 61 6d 65 20 3d 20 ,. tagName =
e570: 67 65 74 54 61 67 4e 61 6d 65 28 6f 70 74 73 2e getTagName(opts.
e580: 72 6f 6f 74 29 2c 0a 20 20 20 20 70 74 61 67 20 root),. ptag
e590: 3d 20 67 65 74 49 6d 6d 65 64 69 61 74 65 43 75 = getImmediateCu
e5a0: 73 74 6f 6d 50 61 72 65 6e 74 54 61 67 28 70 61 stomParentTag(pa
e5b0: 72 65 6e 74 29 0a 20 20 2f 2f 20 66 69 78 20 66 rent). // fix f
e5c0: 6f 72 20 74 68 65 20 70 61 72 65 6e 74 20 61 74 or the parent at
e5d0: 74 72 69 62 75 74 65 20 69 6e 20 74 68 65 20 6c tribute in the l
e5e0: 6f 6f 70 65 64 20 65 6c 65 6d 65 6e 74 73 0a 20 ooped elements.
e5f0: 20 74 61 67 2e 70 61 72 65 6e 74 20 3d 20 70 74 tag.parent = pt
e600: 61 67 0a 20 20 2f 2f 20 73 74 6f 72 65 20 74 68 ag. // store th
e610: 65 20 72 65 61 6c 20 70 61 72 65 6e 74 20 74 61 e real parent ta
e620: 67 0a 20 20 2f 2f 20 69 6e 20 73 6f 6d 65 20 63 g. // in some c
e630: 61 73 65 73 20 74 68 69 73 20 63 6f 75 6c 64 20 ases this could
e640: 62 65 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f be different fro
e650: 6d 20 74 68 65 20 63 75 73 74 6f 6d 20 70 61 72 m the custom par
e660: 65 6e 74 20 74 61 67 0a 20 20 2f 2f 20 66 6f 72 ent tag. // for
e670: 20 65 78 61 6d 70 6c 65 20 69 6e 20 6e 65 73 74 example in nest
e680: 65 64 20 6c 6f 6f 70 73 0a 20 20 74 61 67 2e 5f ed loops. tag._
e690: 70 61 72 65 6e 74 20 3d 20 70 61 72 65 6e 74 0a parent = parent.
e6a0: 0a 20 20 2f 2f 20 61 64 64 20 74 68 69 73 20 74 . // add this t
e6b0: 61 67 20 74 6f 20 74 68 65 20 63 75 73 74 6f 6d ag to the custom
e6c0: 20 70 61 72 65 6e 74 20 74 61 67 0a 20 20 61 64 parent tag. ad
e6d0: 64 43 68 69 6c 64 54 61 67 28 74 61 67 2c 20 74 dChildTag(tag, t
e6e0: 61 67 4e 61 6d 65 2c 20 70 74 61 67 29 0a 20 20 agName, ptag).
e6f0: 2f 2f 20 61 6e 64 20 61 6c 73 6f 20 74 6f 20 74 // and also to t
e700: 68 65 20 72 65 61 6c 20 70 61 72 65 6e 74 20 74 he real parent t
e710: 61 67 0a 20 20 69 66 20 28 70 74 61 67 20 21 3d ag. if (ptag !=
e720: 3d 20 70 61 72 65 6e 74 29 0a 20 20 20 20 61 64 = parent). ad
e730: 64 43 68 69 6c 64 54 61 67 28 74 61 67 2c 20 74 dChildTag(tag, t
e740: 61 67 4e 61 6d 65 2c 20 70 61 72 65 6e 74 29 0a agName, parent).
e750: 20 20 2f 2f 20 65 6d 70 74 79 20 74 68 65 20 63 // empty the c
e760: 68 69 6c 64 20 6e 6f 64 65 20 6f 6e 63 65 20 77 hild node once w
e770: 65 20 67 6f 74 20 69 74 73 20 74 65 6d 70 6c 61 e got its templa
e780: 74 65 0a 20 20 2f 2f 20 74 6f 20 61 76 6f 69 64 te. // to avoid
e790: 20 74 68 61 74 20 69 74 73 20 63 68 69 6c 64 72 that its childr
e7a0: 65 6e 20 67 65 74 20 63 6f 6d 70 69 6c 65 64 20 en get compiled
e7b0: 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 0a 20 multiple times.
e7c0: 20 6f 70 74 73 2e 72 6f 6f 74 2e 69 6e 6e 65 72 opts.root.inner
e7d0: 48 54 4d 4c 20 3d 20 27 27 0a 0a 20 20 72 65 74 HTML = ''.. ret
e7e0: 75 72 6e 20 74 61 67 0a 7d 0a 0a 2f 2a 2a 0a 20 urn tag.}../**.
e7f0: 2a 20 4c 6f 6f 70 20 62 61 63 6b 77 61 72 64 20 * Loop backward
e800: 61 6c 6c 20 74 68 65 20 70 61 72 65 6e 74 73 20 all the parents
e810: 74 72 65 65 20 74 6f 20 64 65 74 65 63 74 20 74 tree to detect t
e820: 68 65 20 66 69 72 73 74 20 63 75 73 74 6f 6d 20 he first custom
e830: 70 61 72 65 6e 74 20 74 61 67 0a 20 2a 20 40 70 parent tag. * @p
e840: 61 72 61 6d 20 20 20 7b 20 4f 62 6a 65 63 74 20 aram { Object
e850: 7d 20 74 61 67 20 2d 20 61 20 54 61 67 20 69 6e } tag - a Tag in
e860: 73 74 61 6e 63 65 0a 20 2a 20 40 72 65 74 75 72 stance. * @retur
e870: 6e 73 20 7b 20 4f 62 6a 65 63 74 20 7d 20 74 68 ns { Object } th
e880: 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 e instance of th
e890: 65 20 66 69 72 73 74 20 63 75 73 74 6f 6d 20 70 e first custom p
e8a0: 61 72 65 6e 74 20 74 61 67 20 66 6f 75 6e 64 0a arent tag found.
e8b0: 20 2a 2f 0a 66 75 6e 63 74 69 6f 6e 20 67 65 74 */.function get
e8c0: 49 6d 6d 65 64 69 61 74 65 43 75 73 74 6f 6d 50 ImmediateCustomP
e8d0: 61 72 65 6e 74 54 61 67 28 74 61 67 29 20 7b 0a arentTag(tag) {.
e8e0: 20 20 76 61 72 20 70 74 61 67 20 3d 20 74 61 67 var ptag = tag
e8f0: 0a 20 20 77 68 69 6c 65 20 28 21 67 65 74 54 61 . while (!getTa
e900: 67 28 70 74 61 67 2e 72 6f 6f 74 29 29 20 7b 0a g(ptag.root)) {.
e910: 20 20 20 20 69 66 20 28 21 70 74 61 67 2e 70 61 if (!ptag.pa
e920: 72 65 6e 74 29 20 62 72 65 61 6b 0a 20 20 20 20 rent) break.
e930: 70 74 61 67 20 3d 20 70 74 61 67 2e 70 61 72 65 ptag = ptag.pare
e940: 6e 74 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 nt. }. return
e950: 70 74 61 67 0a 7d 0a 0a 2f 2a 2a 0a 20 2a 20 48 ptag.}../**. * H
e960: 65 6c 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 74 elper function t
e970: 6f 20 73 65 74 20 61 6e 20 69 6d 6d 75 74 61 62 o set an immutab
e980: 6c 65 20 70 72 6f 70 65 72 74 79 0a 20 2a 20 40 le property. * @
e990: 70 61 72 61 6d 20 20 20 7b 20 4f 62 6a 65 63 74 param { Object
e9a0: 20 7d 20 65 6c 20 2d 20 6f 62 6a 65 63 74 20 77 } el - object w
e9b0: 68 65 72 65 20 74 68 65 20 6e 65 77 20 70 72 6f here the new pro
e9c0: 70 65 72 74 79 20 77 69 6c 6c 20 62 65 20 73 65 perty will be se
e9d0: 74 0a 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 t. * @param {
e9e0: 53 74 72 69 6e 67 20 7d 20 6b 65 79 20 2d 20 6f String } key - o
e9f0: 62 6a 65 63 74 20 6b 65 79 20 77 68 65 72 65 20 bject key where
ea00: 74 68 65 20 6e 65 77 20 70 72 6f 70 65 72 74 79 the new property
ea10: 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 0a will be stored.
ea20: 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 2a 20 * @param { *
ea30: 7d 20 76 61 6c 75 65 20 2d 20 76 61 6c 75 65 20 } value - value
ea40: 6f 66 20 74 68 65 20 6e 65 77 20 70 72 6f 70 65 of the new prope
ea50: 72 74 79 0a 2a 20 40 70 61 72 61 6d 20 20 20 7b rty.* @param {
ea60: 20 4f 62 6a 65 63 74 20 7d 20 6f 70 74 69 6f 6e Object } option
ea70: 73 20 2d 20 73 65 74 20 74 68 65 20 70 72 6f 70 s - set the prop
ea80: 65 72 79 20 6f 76 65 72 72 69 64 69 6e 67 20 74 ery overriding t
ea90: 68 65 20 64 65 66 61 75 6c 74 20 6f 70 74 69 6f he default optio
eaa0: 6e 73 0a 20 2a 20 40 72 65 74 75 72 6e 73 20 7b ns. * @returns {
eab0: 20 4f 62 6a 65 63 74 20 7d 20 2d 20 74 68 65 20 Object } - the
eac0: 69 6e 69 74 69 61 6c 20 6f 62 6a 65 63 74 0a 20 initial object.
ead0: 2a 2f 0a 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 */.function defi
eae0: 6e 65 50 72 6f 70 65 72 74 79 28 65 6c 2c 20 6b neProperty(el, k
eaf0: 65 79 2c 20 76 61 6c 75 65 2c 20 6f 70 74 69 6f ey, value, optio
eb00: 6e 73 29 20 7b 0a 20 20 4f 62 6a 65 63 74 2e 64 ns) {. Object.d
eb10: 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28 65 6c efineProperty(el
eb20: 2c 20 6b 65 79 2c 20 65 78 74 65 6e 64 28 7b 0a , key, extend({.
eb30: 20 20 20 20 76 61 6c 75 65 3a 20 76 61 6c 75 65 value: value
eb40: 2c 0a 20 20 20 20 65 6e 75 6d 65 72 61 62 6c 65 ,. enumerable
eb50: 3a 20 66 61 6c 73 65 2c 0a 20 20 20 20 77 72 69 : false,. wri
eb60: 74 61 62 6c 65 3a 20 66 61 6c 73 65 2c 0a 20 20 table: false,.
eb70: 20 20 63 6f 6e 66 69 67 75 72 61 62 6c 65 3a 20 configurable:
eb80: 74 72 75 65 0a 20 20 7d 2c 20 6f 70 74 69 6f 6e true. }, option
eb90: 73 29 29 0a 20 20 72 65 74 75 72 6e 20 65 6c 0a s)). return el.
eba0: 7d 0a 0a 2f 2a 2a 0a 20 2a 20 47 65 74 20 74 68 }../**. * Get th
ebb0: 65 20 74 61 67 20 6e 61 6d 65 20 6f 66 20 61 6e e tag name of an
ebc0: 79 20 44 4f 4d 20 6e 6f 64 65 0a 20 2a 20 40 70 y DOM node. * @p
ebd0: 61 72 61 6d 20 20 20 7b 20 4f 62 6a 65 63 74 20 aram { Object
ebe0: 7d 20 64 6f 6d 20 2d 20 44 4f 4d 20 6e 6f 64 65 } dom - DOM node
ebf0: 20 77 65 20 77 61 6e 74 20 74 6f 20 70 61 72 73 we want to pars
ec00: 65 0a 20 2a 20 40 72 65 74 75 72 6e 73 20 7b 20 e. * @returns {
ec10: 53 74 72 69 6e 67 20 7d 20 6e 61 6d 65 20 74 6f String } name to
ec20: 20 69 64 65 6e 74 69 66 79 20 74 68 69 73 20 64 identify this d
ec30: 6f 6d 20 6e 6f 64 65 20 69 6e 20 72 69 6f 74 0a om node in riot.
ec40: 20 2a 2f 0a 66 75 6e 63 74 69 6f 6e 20 67 65 74 */.function get
ec50: 54 61 67 4e 61 6d 65 28 64 6f 6d 29 20 7b 0a 20 TagName(dom) {.
ec60: 20 76 61 72 20 63 68 69 6c 64 20 3d 20 67 65 74 var child = get
ec70: 54 61 67 28 64 6f 6d 29 2c 0a 20 20 20 20 6e 61 Tag(dom),. na
ec80: 6d 65 64 54 61 67 20 3d 20 67 65 74 41 74 74 72 medTag = getAttr
ec90: 28 64 6f 6d 2c 20 27 6e 61 6d 65 27 29 2c 0a 20 (dom, 'name'),.
eca0: 20 20 20 74 61 67 4e 61 6d 65 20 3d 20 6e 61 6d tagName = nam
ecb0: 65 64 54 61 67 20 26 26 20 21 74 6d 70 6c 2e 68 edTag && !tmpl.h
ecc0: 61 73 45 78 70 72 28 6e 61 6d 65 64 54 61 67 29 asExpr(namedTag)
ecd0: 20 3f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ?.
ece0: 20 20 20 6e 61 6d 65 64 54 61 67 20 3a 0a 20 20 namedTag :.
ecf0: 20 20 20 20 20 20 20 20 20 20 20 20 63 68 69 6c chil
ed00: 64 20 3f 20 63 68 69 6c 64 2e 6e 61 6d 65 20 3a d ? child.name :
ed10: 20 64 6f 6d 2e 74 61 67 4e 61 6d 65 2e 74 6f 4c dom.tagName.toL
ed20: 6f 77 65 72 43 61 73 65 28 29 0a 0a 20 20 72 65 owerCase().. re
ed30: 74 75 72 6e 20 74 61 67 4e 61 6d 65 0a 7d 0a 0a turn tagName.}..
ed40: 2f 2a 2a 0a 20 2a 20 45 78 74 65 6e 64 20 61 6e /**. * Extend an
ed50: 79 20 6f 62 6a 65 63 74 20 77 69 74 68 20 6f 74 y object with ot
ed60: 68 65 72 20 70 72 6f 70 65 72 74 69 65 73 0a 20 her properties.
ed70: 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 4f 62 6a * @param { Obj
ed80: 65 63 74 20 7d 20 73 72 63 20 2d 20 73 6f 75 72 ect } src - sour
ed90: 63 65 20 6f 62 6a 65 63 74 0a 20 2a 20 40 72 65 ce object. * @re
eda0: 74 75 72 6e 73 20 7b 20 4f 62 6a 65 63 74 20 7d turns { Object }
edb0: 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 65 the resulting e
edc0: 78 74 65 6e 64 65 64 20 6f 62 6a 65 63 74 0a 20 xtended object.
edd0: 2a 0a 20 2a 20 76 61 72 20 6f 62 6a 20 3d 20 7b *. * var obj = {
ede0: 20 66 6f 6f 3a 20 27 62 61 7a 27 20 7d 0a 20 2a foo: 'baz' }. *
edf0: 20 65 78 74 65 6e 64 28 6f 62 6a 2c 20 7b 62 61 extend(obj, {ba
ee00: 72 3a 20 27 62 61 72 27 2c 20 66 6f 6f 3a 20 27 r: 'bar', foo: '
ee10: 62 61 72 27 7d 29 0a 20 2a 20 63 6f 6e 73 6f 6c bar'}). * consol
ee20: 65 2e 6c 6f 67 28 6f 62 6a 29 20 3d 3e 20 7b 62 e.log(obj) => {b
ee30: 61 72 3a 20 27 62 61 72 27 2c 20 66 6f 6f 3a 20 ar: 'bar', foo:
ee40: 27 62 61 72 27 7d 0a 20 2a 0a 20 2a 2f 0a 66 75 'bar'}. *. */.fu
ee50: 6e 63 74 69 6f 6e 20 65 78 74 65 6e 64 28 73 72 nction extend(sr
ee60: 63 29 20 7b 0a 20 20 76 61 72 20 6f 62 6a 2c 20 c) {. var obj,
ee70: 61 72 67 73 20 3d 20 61 72 67 75 6d 65 6e 74 73 args = arguments
ee80: 0a 20 20 66 6f 72 20 28 76 61 72 20 69 20 3d 20 . for (var i =
ee90: 31 3b 20 69 20 3c 20 61 72 67 73 2e 6c 65 6e 67 1; i < args.leng
eea0: 74 68 3b 20 2b 2b 69 29 20 7b 0a 20 20 20 20 69 th; ++i) {. i
eeb0: 66 20 28 6f 62 6a 20 3d 20 61 72 67 73 5b 69 5d f (obj = args[i]
eec0: 29 20 7b 0a 20 20 20 20 20 20 66 6f 72 20 28 76 ) {. for (v
eed0: 61 72 20 6b 65 79 20 69 6e 20 6f 62 6a 29 20 7b ar key in obj) {
eee0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 63 68 65 63 . // chec
eef0: 6b 20 69 66 20 74 68 69 73 20 70 72 6f 70 65 72 k if this proper
ef00: 74 79 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65 ty of the source
ef10: 20 6f 62 6a 65 63 74 20 63 6f 75 6c 64 20 62 65 object could be
ef20: 20 6f 76 65 72 72 69 64 64 65 6e 0a 20 20 20 20 overridden.
ef30: 20 20 20 20 69 66 20 28 69 73 57 72 69 74 61 62 if (isWritab
ef40: 6c 65 28 73 72 63 2c 20 6b 65 79 29 29 0a 20 20 le(src, key)).
ef50: 20 20 20 20 20 20 20 20 73 72 63 5b 6b 65 79 5d src[key]
ef60: 20 3d 20 6f 62 6a 5b 6b 65 79 5d 0a 20 20 20 20 = obj[key].
ef70: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 }. }. }.
ef80: 72 65 74 75 72 6e 20 73 72 63 0a 7d 0a 0a 2f 2a return src.}../*
ef90: 2a 0a 20 2a 20 43 68 65 63 6b 20 77 68 65 74 68 *. * Check wheth
efa0: 65 72 20 61 6e 20 61 72 72 61 79 20 63 6f 6e 74 er an array cont
efb0: 61 69 6e 73 20 61 6e 20 69 74 65 6d 0a 20 2a 20 ains an item. *
efc0: 40 70 61 72 61 6d 20 20 20 7b 20 41 72 72 61 79 @param { Array
efd0: 20 7d 20 61 72 72 20 2d 20 74 61 72 67 65 74 20 } arr - target
efe0: 61 72 72 61 79 0a 20 2a 20 40 70 61 72 61 6d 20 array. * @param
eff0: 20 20 7b 20 2a 20 7d 20 69 74 65 6d 20 2d 20 69 { * } item - i
f000: 74 65 6d 20 74 6f 20 74 65 73 74 0a 20 2a 20 40 tem to test. * @
f010: 72 65 74 75 72 6e 73 20 7b 20 42 6f 6f 6c 65 61 returns { Boolea
f020: 6e 20 7d 20 44 6f 65 73 20 27 61 72 72 27 20 63 n } Does 'arr' c
f030: 6f 6e 74 61 69 6e 20 27 69 74 65 6d 27 3f 0a 20 ontain 'item'?.
f040: 2a 2f 0a 66 75 6e 63 74 69 6f 6e 20 63 6f 6e 74 */.function cont
f050: 61 69 6e 73 28 61 72 72 2c 20 69 74 65 6d 29 20 ains(arr, item)
f060: 7b 0a 20 20 72 65 74 75 72 6e 20 7e 61 72 72 2e {. return ~arr.
f070: 69 6e 64 65 78 4f 66 28 69 74 65 6d 29 0a 7d 0a indexOf(item).}.
f080: 0a 2f 2a 2a 0a 20 2a 20 43 68 65 63 6b 20 77 68 ./**. * Check wh
f090: 65 74 68 65 72 20 61 6e 20 6f 62 6a 65 63 74 20 ether an object
f0a0: 69 73 20 61 20 6b 69 6e 64 20 6f 66 20 61 72 72 is a kind of arr
f0b0: 61 79 0a 20 2a 20 40 70 61 72 61 6d 20 20 20 7b ay. * @param {
f0c0: 20 2a 20 7d 20 61 20 2d 20 61 6e 79 74 68 69 6e * } a - anythin
f0d0: 67 0a 20 2a 20 40 72 65 74 75 72 6e 73 20 7b 42 g. * @returns {B
f0e0: 6f 6f 6c 65 61 6e 7d 20 69 73 20 27 61 27 20 61 oolean} is 'a' a
f0f0: 6e 20 61 72 72 61 79 3f 0a 20 2a 2f 0a 66 75 6e n array?. */.fun
f100: 63 74 69 6f 6e 20 69 73 41 72 72 61 79 28 61 29 ction isArray(a)
f110: 20 7b 20 72 65 74 75 72 6e 20 41 72 72 61 79 2e { return Array.
f120: 69 73 41 72 72 61 79 28 61 29 20 7c 7c 20 61 20 isArray(a) || a
f130: 69 6e 73 74 61 6e 63 65 6f 66 20 41 72 72 61 79 instanceof Array
f140: 20 7d 0a 0a 2f 2a 2a 0a 20 2a 20 44 65 74 65 63 }../**. * Detec
f150: 74 20 77 68 65 74 68 65 72 20 61 20 70 72 6f 70 t whether a prop
f160: 65 72 74 79 20 6f 66 20 61 6e 20 6f 62 6a 65 63 erty of an objec
f170: 74 20 63 6f 75 6c 64 20 62 65 20 6f 76 65 72 72 t could be overr
f180: 69 64 64 65 6e 0a 20 2a 20 40 70 61 72 61 6d 20 idden. * @param
f190: 20 20 7b 20 4f 62 6a 65 63 74 20 7d 20 20 6f 62 { Object } ob
f1a0: 6a 20 2d 20 73 6f 75 72 63 65 20 6f 62 6a 65 63 j - source objec
f1b0: 74 0a 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 t. * @param {
f1c0: 53 74 72 69 6e 67 20 7d 20 20 6b 65 79 20 2d 20 String } key -
f1d0: 6f 62 6a 65 63 74 20 70 72 6f 70 65 72 74 79 0a object property.
f1e0: 20 2a 20 40 72 65 74 75 72 6e 73 20 7b 20 42 6f * @returns { Bo
f1f0: 6f 6c 65 61 6e 20 7d 20 69 73 20 74 68 69 73 20 olean } is this
f200: 70 72 6f 70 65 72 74 79 20 77 72 69 74 61 62 6c property writabl
f210: 65 3f 0a 20 2a 2f 0a 66 75 6e 63 74 69 6f 6e 20 e?. */.function
f220: 69 73 57 72 69 74 61 62 6c 65 28 6f 62 6a 2c 20 isWritable(obj,
f230: 6b 65 79 29 20 7b 0a 20 20 76 61 72 20 70 72 6f key) {. var pro
f240: 70 73 20 3d 20 4f 62 6a 65 63 74 2e 67 65 74 4f ps = Object.getO
f250: 77 6e 50 72 6f 70 65 72 74 79 44 65 73 63 72 69 wnPropertyDescri
f260: 70 74 6f 72 28 6f 62 6a 2c 20 6b 65 79 29 0a 20 ptor(obj, key).
f270: 20 72 65 74 75 72 6e 20 74 79 70 65 6f 66 20 6f return typeof o
f280: 62 6a 5b 6b 65 79 5d 20 3d 3d 3d 20 54 5f 55 4e bj[key] === T_UN
f290: 44 45 46 20 7c 7c 20 70 72 6f 70 73 20 26 26 20 DEF || props &&
f2a0: 70 72 6f 70 73 2e 77 72 69 74 61 62 6c 65 0a 7d props.writable.}
f2b0: 0a 0a 0a 2f 2a 2a 0a 20 2a 20 57 69 74 68 20 74 .../**. * With t
f2c0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 77 65 20 his function we
f2d0: 61 76 6f 69 64 20 74 68 61 74 20 74 68 65 20 69 avoid that the i
f2e0: 6e 74 65 72 6e 61 6c 20 54 61 67 20 6d 65 74 68 nternal Tag meth
f2f0: 6f 64 73 20 67 65 74 20 6f 76 65 72 72 69 64 64 ods get overridd
f300: 65 6e 0a 20 2a 20 40 70 61 72 61 6d 20 20 20 7b en. * @param {
f310: 20 4f 62 6a 65 63 74 20 7d 20 64 61 74 61 20 2d Object } data -
f320: 20 6f 70 74 69 6f 6e 73 20 77 65 20 77 61 6e 74 options we want
f330: 20 74 6f 20 75 73 65 20 74 6f 20 65 78 74 65 6e to use to exten
f340: 64 20 74 68 65 20 74 61 67 20 69 6e 73 74 61 6e d the tag instan
f350: 63 65 0a 20 2a 20 40 72 65 74 75 72 6e 73 20 7b ce. * @returns {
f360: 20 4f 62 6a 65 63 74 20 7d 20 63 6c 65 61 6e 20 Object } clean
f370: 6f 62 6a 65 63 74 20 77 69 74 68 6f 75 74 20 63 object without c
f380: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 69 ontaining the ri
f390: 6f 74 20 69 6e 74 65 72 6e 61 6c 20 72 65 73 65 ot internal rese
f3a0: 72 76 65 64 20 77 6f 72 64 73 0a 20 2a 2f 0a 66 rved words. */.f
f3b0: 75 6e 63 74 69 6f 6e 20 63 6c 65 61 6e 55 70 44 unction cleanUpD
f3c0: 61 74 61 28 64 61 74 61 29 20 7b 0a 20 20 69 66 ata(data) {. if
f3d0: 20 28 21 28 64 61 74 61 20 69 6e 73 74 61 6e 63 (!(data instanc
f3e0: 65 6f 66 20 54 61 67 29 20 26 26 20 21 28 64 61 eof Tag) && !(da
f3f0: 74 61 20 26 26 20 74 79 70 65 6f 66 20 64 61 74 ta && typeof dat
f400: 61 2e 74 72 69 67 67 65 72 20 3d 3d 20 54 5f 46 a.trigger == T_F
f410: 55 4e 43 54 49 4f 4e 29 29 0a 20 20 20 20 72 65 UNCTION)). re
f420: 74 75 72 6e 20 64 61 74 61 0a 0a 20 20 76 61 72 turn data.. var
f430: 20 6f 20 3d 20 7b 7d 0a 20 20 66 6f 72 20 28 76 o = {}. for (v
f440: 61 72 20 6b 65 79 20 69 6e 20 64 61 74 61 29 20 ar key in data)
f450: 7b 0a 20 20 20 20 69 66 20 28 21 52 45 53 45 52 {. if (!RESER
f460: 56 45 44 5f 57 4f 52 44 53 5f 42 4c 41 43 4b 4c VED_WORDS_BLACKL
f470: 49 53 54 2e 74 65 73 74 28 6b 65 79 29 29 20 6f IST.test(key)) o
f480: 5b 6b 65 79 5d 20 3d 20 64 61 74 61 5b 6b 65 79 [key] = data[key
f490: 5d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 6f ]. }. return o
f4a0: 0a 7d 0a 0a 2f 2a 2a 0a 20 2a 20 57 61 6c 6b 20 .}../**. * Walk
f4b0: 64 6f 77 6e 20 72 65 63 75 72 73 69 76 65 6c 79 down recursively
f4c0: 20 61 6c 6c 20 74 68 65 20 63 68 69 6c 64 72 65 all the childre
f4d0: 6e 20 74 61 67 73 20 73 74 61 72 74 69 6e 67 20 n tags starting
f4e0: 64 6f 6d 20 6e 6f 64 65 0a 20 2a 20 40 70 61 72 dom node. * @par
f4f0: 61 6d 20 20 20 7b 20 4f 62 6a 65 63 74 20 7d 20 am { Object }
f500: 20 20 64 6f 6d 20 2d 20 73 74 61 72 74 69 6e 67 dom - starting
f510: 20 6e 6f 64 65 20 77 68 65 72 65 20 77 65 20 77 node where we w
f520: 69 6c 6c 20 73 74 61 72 74 20 74 68 65 20 72 65 ill start the re
f530: 63 75 72 73 69 6f 6e 0a 20 2a 20 40 70 61 72 61 cursion. * @para
f540: 6d 20 20 20 7b 20 46 75 6e 63 74 69 6f 6e 20 7d m { Function }
f550: 20 66 6e 20 2d 20 63 61 6c 6c 62 61 63 6b 20 74 fn - callback t
f560: 6f 20 74 72 61 6e 73 66 6f 72 6d 20 74 68 65 20 o transform the
f570: 63 68 69 6c 64 20 6e 6f 64 65 20 6a 75 73 74 20 child node just
f580: 66 6f 75 6e 64 0a 20 2a 2f 0a 66 75 6e 63 74 69 found. */.functi
f590: 6f 6e 20 77 61 6c 6b 28 64 6f 6d 2c 20 66 6e 29 on walk(dom, fn)
f5a0: 20 7b 0a 20 20 69 66 20 28 64 6f 6d 29 20 7b 0a {. if (dom) {.
f5b0: 20 20 20 20 2f 2f 20 73 74 6f 70 20 74 68 65 20 // stop the
f5c0: 72 65 63 75 72 73 69 6f 6e 0a 20 20 20 20 69 66 recursion. if
f5d0: 20 28 66 6e 28 64 6f 6d 29 20 3d 3d 3d 20 66 61 (fn(dom) === fa
f5e0: 6c 73 65 29 20 72 65 74 75 72 6e 0a 20 20 20 20 lse) return.
f5f0: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 64 6f 6d else {. dom
f600: 20 3d 20 64 6f 6d 2e 66 69 72 73 74 43 68 69 6c = dom.firstChil
f610: 64 0a 0a 20 20 20 20 20 20 77 68 69 6c 65 20 28 d.. while (
f620: 64 6f 6d 29 20 7b 0a 20 20 20 20 20 20 20 20 77 dom) {. w
f630: 61 6c 6b 28 64 6f 6d 2c 20 66 6e 29 0a 20 20 20 alk(dom, fn).
f640: 20 20 20 20 20 64 6f 6d 20 3d 20 64 6f 6d 2e 6e dom = dom.n
f650: 65 78 74 53 69 62 6c 69 6e 67 0a 20 20 20 20 20 extSibling.
f660: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a }. }. }.}..
f670: 2f 2a 2a 0a 20 2a 20 4d 69 6e 69 6d 69 7a 65 20 /**. * Minimize
f680: 72 69 73 6b 3a 20 6f 6e 6c 79 20 7a 65 72 6f 20 risk: only zero
f690: 6f 72 20 6f 6e 65 20 5f 73 70 61 63 65 5f 20 62 or one _space_ b
f6a0: 65 74 77 65 65 6e 20 61 74 74 72 20 26 20 76 61 etween attr & va
f6b0: 6c 75 65 0a 20 2a 20 40 70 61 72 61 6d 20 20 20 lue. * @param
f6c0: 7b 20 53 74 72 69 6e 67 20 7d 20 20 20 68 74 6d { String } htm
f6d0: 6c 20 2d 20 68 74 6d 6c 20 73 74 72 69 6e 67 20 l - html string
f6e0: 77 65 20 77 61 6e 74 20 74 6f 20 70 61 72 73 65 we want to parse
f6f0: 0a 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 46 . * @param { F
f700: 75 6e 63 74 69 6f 6e 20 7d 20 66 6e 20 2d 20 63 unction } fn - c
f710: 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e allback function
f720: 20 74 6f 20 61 70 70 6c 79 20 6f 6e 20 61 6e 79 to apply on any
f730: 20 61 74 74 72 69 62 75 74 65 20 66 6f 75 6e 64 attribute found
f740: 0a 20 2a 2f 0a 66 75 6e 63 74 69 6f 6e 20 77 61 . */.function wa
f750: 6c 6b 41 74 74 72 69 62 75 74 65 73 28 68 74 6d lkAttributes(htm
f760: 6c 2c 20 66 6e 29 20 7b 0a 20 20 76 61 72 20 6d l, fn) {. var m
f770: 2c 0a 20 20 20 20 72 65 20 3d 20 2f 28 5b 2d 5c ,. re = /([-\
f780: 77 5d 2b 29 20 3f 3d 20 3f 28 3f 3a 22 28 5b 5e w]+) ?= ?(?:"([^
f790: 22 5d 2a 29 7c 27 28 5b 5e 27 5d 2a 29 7c 28 7b "]*)|'([^']*)|({
f7a0: 5b 5e 7d 5d 2a 7d 29 29 2f 67 0a 0a 20 20 77 68 [^}]*}))/g.. wh
f7b0: 69 6c 65 20 28 6d 20 3d 20 72 65 2e 65 78 65 63 ile (m = re.exec
f7c0: 28 68 74 6d 6c 29 29 20 7b 0a 20 20 20 20 66 6e (html)) {. fn
f7d0: 28 6d 5b 31 5d 2e 74 6f 4c 6f 77 65 72 43 61 73 (m[1].toLowerCas
f7e0: 65 28 29 2c 20 6d 5b 32 5d 20 7c 7c 20 6d 5b 33 e(), m[2] || m[3
f7f0: 5d 20 7c 7c 20 6d 5b 34 5d 29 0a 20 20 7d 0a 7d ] || m[4]). }.}
f800: 0a 0a 2f 2a 2a 0a 20 2a 20 43 68 65 63 6b 20 77 ../**. * Check w
f810: 68 65 74 68 65 72 20 61 20 44 4f 4d 20 6e 6f 64 hether a DOM nod
f820: 65 20 69 73 20 69 6e 20 73 74 75 62 20 6d 6f 64 e is in stub mod
f830: 65 2c 20 75 73 65 66 75 6c 20 66 6f 72 20 74 68 e, useful for th
f840: 65 20 72 69 6f 74 20 27 69 66 27 20 64 69 72 65 e riot 'if' dire
f850: 63 74 69 76 65 0a 20 2a 20 40 70 61 72 61 6d 20 ctive. * @param
f860: 20 20 7b 20 4f 62 6a 65 63 74 20 7d 20 20 64 6f { Object } do
f870: 6d 20 2d 20 44 4f 4d 20 6e 6f 64 65 20 77 65 20 m - DOM node we
f880: 77 61 6e 74 20 74 6f 20 70 61 72 73 65 0a 20 2a want to parse. *
f890: 20 40 72 65 74 75 72 6e 73 20 7b 20 42 6f 6f 6c @returns { Bool
f8a0: 65 61 6e 20 7d 20 2d 0a 20 2a 2f 0a 66 75 6e 63 ean } -. */.func
f8b0: 74 69 6f 6e 20 69 73 49 6e 53 74 75 62 28 64 6f tion isInStub(do
f8c0: 6d 29 20 7b 0a 20 20 77 68 69 6c 65 20 28 64 6f m) {. while (do
f8d0: 6d 29 20 7b 0a 20 20 20 20 69 66 20 28 64 6f 6d m) {. if (dom
f8e0: 2e 69 6e 53 74 75 62 29 20 72 65 74 75 72 6e 20 .inStub) return
f8f0: 74 72 75 65 0a 20 20 20 20 64 6f 6d 20 3d 20 64 true. dom = d
f900: 6f 6d 2e 70 61 72 65 6e 74 4e 6f 64 65 0a 20 20 om.parentNode.
f910: 7d 0a 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 }. return false
f920: 0a 7d 0a 0a 2f 2a 2a 0a 20 2a 20 43 72 65 61 74 .}../**. * Creat
f930: 65 20 61 20 67 65 6e 65 72 69 63 20 44 4f 4d 20 e a generic DOM
f940: 6e 6f 64 65 0a 20 2a 20 40 70 61 72 61 6d 20 20 node. * @param
f950: 20 7b 20 53 74 72 69 6e 67 20 7d 20 6e 61 6d 65 { String } name
f960: 20 2d 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 44 - name of the D
f970: 4f 4d 20 6e 6f 64 65 20 77 65 20 77 61 6e 74 20 OM node we want
f980: 74 6f 20 63 72 65 61 74 65 0a 20 2a 20 40 70 61 to create. * @pa
f990: 72 61 6d 20 20 20 7b 20 42 6f 6f 6c 65 61 6e 20 ram { Boolean
f9a0: 7d 20 69 73 53 76 67 20 2d 20 73 68 6f 75 6c 64 } isSvg - should
f9b0: 20 77 65 20 75 73 65 20 61 20 53 56 47 20 61 73 we use a SVG as
f9c0: 20 70 61 72 65 6e 74 20 6e 6f 64 65 3f 0a 20 2a parent node?. *
f9d0: 20 40 72 65 74 75 72 6e 73 20 7b 20 4f 62 6a 65 @returns { Obje
f9e0: 63 74 20 7d 20 44 4f 4d 20 6e 6f 64 65 20 6a 75 ct } DOM node ju
f9f0: 73 74 20 63 72 65 61 74 65 64 0a 20 2a 2f 0a 66 st created. */.f
fa00: 75 6e 63 74 69 6f 6e 20 6d 6b 45 6c 28 6e 61 6d unction mkEl(nam
fa10: 65 2c 20 69 73 53 76 67 29 20 7b 0a 20 20 72 65 e, isSvg) {. re
fa20: 74 75 72 6e 20 69 73 53 76 67 20 3f 0a 20 20 20 turn isSvg ?.
fa30: 20 64 6f 63 75 6d 65 6e 74 2e 63 72 65 61 74 65 document.create
fa40: 45 6c 65 6d 65 6e 74 4e 53 28 27 68 74 74 70 3a ElementNS('http:
fa50: 2f 2f 77 77 77 2e 77 33 2e 6f 72 67 2f 32 30 30 //www.w3.org/200
fa60: 30 2f 73 76 67 27 2c 20 27 73 76 67 27 29 20 3a 0/svg', 'svg') :
fa70: 0a 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 63 72 . document.cr
fa80: 65 61 74 65 45 6c 65 6d 65 6e 74 28 6e 61 6d 65 eateElement(name
fa90: 29 0a 7d 0a 0a 2f 2a 2a 0a 20 2a 20 53 68 6f 72 ).}../**. * Shor
faa0: 74 65 72 20 61 6e 64 20 66 61 73 74 20 77 61 79 ter and fast way
fab0: 20 74 6f 20 73 65 6c 65 63 74 20 6d 75 6c 74 69 to select multi
fac0: 70 6c 65 20 6e 6f 64 65 73 20 69 6e 20 74 68 65 ple nodes in the
fad0: 20 44 4f 4d 0a 20 2a 20 40 70 61 72 61 6d 20 20 DOM. * @param
fae0: 20 7b 20 53 74 72 69 6e 67 20 7d 20 73 65 6c 65 { String } sele
faf0: 63 74 6f 72 20 2d 20 44 4f 4d 20 73 65 6c 65 63 ctor - DOM selec
fb00: 74 6f 72 0a 20 2a 20 40 70 61 72 61 6d 20 20 20 tor. * @param
fb10: 7b 20 4f 62 6a 65 63 74 20 7d 20 63 74 78 20 2d { Object } ctx -
fb20: 20 44 4f 4d 20 6e 6f 64 65 20 77 68 65 72 65 20 DOM node where
fb30: 74 68 65 20 74 61 72 67 65 74 73 20 6f 66 20 6f the targets of o
fb40: 75 72 20 73 65 61 72 63 68 20 77 69 6c 6c 20 69 ur search will i
fb50: 73 20 6c 6f 63 61 74 65 64 0a 20 2a 20 40 72 65 s located. * @re
fb60: 74 75 72 6e 73 20 7b 20 4f 62 6a 65 63 74 20 7d turns { Object }
fb70: 20 64 6f 6d 20 6e 6f 64 65 73 20 66 6f 75 6e 64 dom nodes found
fb80: 0a 20 2a 2f 0a 66 75 6e 63 74 69 6f 6e 20 24 24 . */.function $$
fb90: 28 73 65 6c 65 63 74 6f 72 2c 20 63 74 78 29 20 (selector, ctx)
fba0: 7b 0a 20 20 72 65 74 75 72 6e 20 28 63 74 78 20 {. return (ctx
fbb0: 7c 7c 20 64 6f 63 75 6d 65 6e 74 29 2e 71 75 65 || document).que
fbc0: 72 79 53 65 6c 65 63 74 6f 72 41 6c 6c 28 73 65 rySelectorAll(se
fbd0: 6c 65 63 74 6f 72 29 0a 7d 0a 0a 2f 2a 2a 0a 20 lector).}../**.
fbe0: 2a 20 53 68 6f 72 74 65 72 20 61 6e 64 20 66 61 * Shorter and fa
fbf0: 73 74 20 77 61 79 20 74 6f 20 73 65 6c 65 63 74 st way to select
fc00: 20 61 20 73 69 6e 67 6c 65 20 6e 6f 64 65 20 69 a single node i
fc10: 6e 20 74 68 65 20 44 4f 4d 0a 20 2a 20 40 70 61 n the DOM. * @pa
fc20: 72 61 6d 20 20 20 7b 20 53 74 72 69 6e 67 20 7d ram { String }
fc30: 20 73 65 6c 65 63 74 6f 72 20 2d 20 75 6e 69 71 selector - uniq
fc40: 75 65 20 64 6f 6d 20 73 65 6c 65 63 74 6f 72 0a ue dom selector.
fc50: 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 4f 62 * @param { Ob
fc60: 6a 65 63 74 20 7d 20 63 74 78 20 2d 20 44 4f 4d ject } ctx - DOM
fc70: 20 6e 6f 64 65 20 77 68 65 72 65 20 74 68 65 20 node where the
fc80: 74 61 72 67 65 74 20 6f 66 20 6f 75 72 20 73 65 target of our se
fc90: 61 72 63 68 20 77 69 6c 6c 20 69 73 20 6c 6f 63 arch will is loc
fca0: 61 74 65 64 0a 20 2a 20 40 72 65 74 75 72 6e 73 ated. * @returns
fcb0: 20 7b 20 4f 62 6a 65 63 74 20 7d 20 64 6f 6d 20 { Object } dom
fcc0: 6e 6f 64 65 20 66 6f 75 6e 64 0a 20 2a 2f 0a 66 node found. */.f
fcd0: 75 6e 63 74 69 6f 6e 20 24 28 73 65 6c 65 63 74 unction $(select
fce0: 6f 72 2c 20 63 74 78 29 20 7b 0a 20 20 72 65 74 or, ctx) {. ret
fcf0: 75 72 6e 20 28 63 74 78 20 7c 7c 20 64 6f 63 75 urn (ctx || docu
fd00: 6d 65 6e 74 29 2e 71 75 65 72 79 53 65 6c 65 63 ment).querySelec
fd10: 74 6f 72 28 73 65 6c 65 63 74 6f 72 29 0a 7d 0a tor(selector).}.
fd20: 0a 2f 2a 2a 0a 20 2a 20 53 69 6d 70 6c 65 20 6f ./**. * Simple o
fd30: 62 6a 65 63 74 20 70 72 6f 74 6f 74 79 70 61 6c bject prototypal
fd40: 20 69 6e 68 65 72 69 74 61 6e 63 65 0a 20 2a 20 inheritance. *
fd50: 40 70 61 72 61 6d 20 20 20 7b 20 4f 62 6a 65 63 @param { Objec
fd60: 74 20 7d 20 70 61 72 65 6e 74 20 2d 20 70 61 72 t } parent - par
fd70: 65 6e 74 20 6f 62 6a 65 63 74 0a 20 2a 20 40 72 ent object. * @r
fd80: 65 74 75 72 6e 73 20 7b 20 4f 62 6a 65 63 74 20 eturns { Object
fd90: 7d 20 63 68 69 6c 64 20 69 6e 73 74 61 6e 63 65 } child instance
fda0: 0a 20 2a 2f 0a 66 75 6e 63 74 69 6f 6e 20 69 6e . */.function in
fdb0: 68 65 72 69 74 28 70 61 72 65 6e 74 29 20 7b 0a herit(parent) {.
fdc0: 20 20 66 75 6e 63 74 69 6f 6e 20 43 68 69 6c 64 function Child
fdd0: 28 29 20 7b 7d 0a 20 20 43 68 69 6c 64 2e 70 72 () {}. Child.pr
fde0: 6f 74 6f 74 79 70 65 20 3d 20 70 61 72 65 6e 74 ototype = parent
fdf0: 0a 20 20 72 65 74 75 72 6e 20 6e 65 77 20 43 68 . return new Ch
fe00: 69 6c 64 28 29 0a 7d 0a 0a 2f 2a 2a 0a 20 2a 20 ild().}../**. *
fe10: 47 65 74 20 74 68 65 20 6e 61 6d 65 20 70 72 6f Get the name pro
fe20: 70 65 72 74 79 20 6e 65 65 64 65 64 20 74 6f 20 perty needed to
fe30: 69 64 65 6e 74 69 66 79 20 61 20 44 4f 4d 20 6e identify a DOM n
fe40: 6f 64 65 20 69 6e 20 72 69 6f 74 0a 20 2a 20 40 ode in riot. * @
fe50: 70 61 72 61 6d 20 20 20 7b 20 4f 62 6a 65 63 74 param { Object
fe60: 20 7d 20 64 6f 6d 20 2d 20 44 4f 4d 20 6e 6f 64 } dom - DOM nod
fe70: 65 20 77 65 20 6e 65 65 64 20 74 6f 20 70 61 72 e we need to par
fe80: 73 65 0a 20 2a 20 40 72 65 74 75 72 6e 73 20 7b se. * @returns {
fe90: 20 53 74 72 69 6e 67 20 7c 20 75 6e 64 65 66 69 String | undefi
fea0: 6e 65 64 20 7d 20 67 69 76 65 20 75 73 20 62 61 ned } give us ba
feb0: 63 6b 20 61 20 73 74 72 69 6e 67 20 74 6f 20 69 ck a string to i
fec0: 64 65 6e 74 69 66 79 20 74 68 69 73 20 64 6f 6d dentify this dom
fed0: 20 6e 6f 64 65 0a 20 2a 2f 0a 66 75 6e 63 74 69 node. */.functi
fee0: 6f 6e 20 67 65 74 4e 61 6d 65 64 4b 65 79 28 64 on getNamedKey(d
fef0: 6f 6d 29 20 7b 0a 20 20 72 65 74 75 72 6e 20 67 om) {. return g
ff00: 65 74 41 74 74 72 28 64 6f 6d 2c 20 27 69 64 27 etAttr(dom, 'id'
ff10: 29 20 7c 7c 20 67 65 74 41 74 74 72 28 64 6f 6d ) || getAttr(dom
ff20: 2c 20 27 6e 61 6d 65 27 29 0a 7d 0a 0a 2f 2a 2a , 'name').}../**
ff30: 0a 20 2a 20 53 65 74 20 74 68 65 20 6e 61 6d 65 . * Set the name
ff40: 64 20 70 72 6f 70 65 72 74 69 65 73 20 6f 66 20 d properties of
ff50: 61 20 74 61 67 20 65 6c 65 6d 65 6e 74 0a 20 2a a tag element. *
ff60: 20 40 70 61 72 61 6d 20 7b 20 4f 62 6a 65 63 74 @param { Object
ff70: 20 7d 20 64 6f 6d 20 2d 20 44 4f 4d 20 6e 6f 64 } dom - DOM nod
ff80: 65 20 77 65 20 6e 65 65 64 20 74 6f 20 70 61 72 e we need to par
ff90: 73 65 0a 20 2a 20 40 70 61 72 61 6d 20 7b 20 4f se. * @param { O
ffa0: 62 6a 65 63 74 20 7d 20 70 61 72 65 6e 74 20 2d bject } parent -
ffb0: 20 74 61 67 20 69 6e 73 74 61 6e 63 65 20 77 68 tag instance wh
ffc0: 65 72 65 20 74 68 65 20 6e 61 6d 65 64 20 64 6f ere the named do
ffd0: 6d 20 65 6c 65 6d 65 6e 74 20 77 69 6c 6c 20 62 m element will b
ffe0: 65 20 65 76 65 6e 74 75 61 6c 6c 79 20 61 64 64 e eventually add
fff0: 65 64 0a 20 2a 20 40 70 61 72 61 6d 20 7b 20 41 ed. * @param { A
10000 72 72 61 79 20 7d 20 6b 65 79 73 20 2d 20 6c 69 rray } keys - li
10010 73 74 20 6f 66 20 61 6c 6c 20 74 68 65 20 74 61 st of all the ta
10020 67 20 69 6e 73 74 61 6e 63 65 20 70 72 6f 70 65 g instance prope
10030 72 74 69 65 73 0a 20 2a 2f 0a 66 75 6e 63 74 69 rties. */.functi
10040 6f 6e 20 73 65 74 4e 61 6d 65 64 28 64 6f 6d 2c on setNamed(dom,
10050 20 70 61 72 65 6e 74 2c 20 6b 65 79 73 29 20 7b parent, keys) {
10060 0a 20 20 2f 2f 20 67 65 74 20 74 68 65 20 6b 65 . // get the ke
10070 79 20 76 61 6c 75 65 20 77 65 20 77 61 6e 74 20 y value we want
10080 74 6f 20 61 64 64 20 74 6f 20 74 68 65 20 74 61 to add to the ta
10090 67 20 69 6e 73 74 61 6e 63 65 0a 20 20 76 61 72 g instance. var
100a0 20 6b 65 79 20 3d 20 67 65 74 4e 61 6d 65 64 4b key = getNamedK
100b0 65 79 28 64 6f 6d 29 2c 0a 20 20 20 20 69 73 41 ey(dom),. isA
100c0 72 72 2c 0a 20 20 20 20 2f 2f 20 61 64 64 20 74 rr,. // add t
100d0 68 65 20 6e 6f 64 65 20 64 65 74 65 63 74 65 64 he node detected
100e0 20 74 6f 20 61 20 74 61 67 20 69 6e 73 74 61 6e to a tag instan
100f0 63 65 20 75 73 69 6e 67 20 74 68 65 20 6e 61 6d ce using the nam
10100 65 64 20 70 72 6f 70 65 72 74 79 0a 20 20 20 20 ed property.
10110 61 64 64 20 3d 20 66 75 6e 63 74 69 6f 6e 28 76 add = function(v
10120 61 6c 75 65 29 20 7b 0a 20 20 20 20 20 20 2f 2f alue) {. //
10130 20 61 76 6f 69 64 20 74 6f 20 6f 76 65 72 72 69 avoid to overri
10140 64 65 20 74 68 65 20 74 61 67 20 70 72 6f 70 65 de the tag prope
10150 72 74 69 65 73 20 61 6c 72 65 61 64 79 20 73 65 rties already se
10160 74 0a 20 20 20 20 20 20 69 66 20 28 63 6f 6e 74 t. if (cont
10170 61 69 6e 73 28 6b 65 79 73 2c 20 6b 65 79 29 29 ains(keys, key))
10180 20 72 65 74 75 72 6e 0a 20 20 20 20 20 20 2f 2f return. //
10190 20 63 68 65 63 6b 20 77 68 65 74 68 65 72 20 74 check whether t
101a0 68 69 73 20 76 61 6c 75 65 20 69 73 20 61 6e 20 his value is an
101b0 61 72 72 61 79 0a 20 20 20 20 20 20 69 73 41 72 array. isAr
101c0 72 20 3d 20 69 73 41 72 72 61 79 28 76 61 6c 75 r = isArray(valu
101d0 65 29 0a 20 20 20 20 20 20 2f 2f 20 69 66 20 74 e). // if t
101e0 68 65 20 6b 65 79 20 77 61 73 20 6e 65 76 65 72 he key was never
101f0 20 73 65 74 0a 20 20 20 20 20 20 69 66 20 28 21 set. if (!
10200 76 61 6c 75 65 29 0a 20 20 20 20 20 20 20 20 2f value). /
10210 2f 20 73 65 74 20 69 74 20 6f 6e 63 65 20 6f 6e / set it once on
10220 20 74 68 65 20 74 61 67 20 69 6e 73 74 61 6e 63 the tag instanc
10230 65 0a 20 20 20 20 20 20 20 20 70 61 72 65 6e 74 e. parent
10240 5b 6b 65 79 5d 20 3d 20 64 6f 6d 0a 20 20 20 20 [key] = dom.
10250 20 20 2f 2f 20 69 66 20 69 74 20 77 61 73 20 61 // if it was a
10260 6e 20 61 72 72 61 79 20 61 6e 64 20 6e 6f 74 20 n array and not
10270 79 65 74 20 73 65 74 0a 20 20 20 20 20 20 65 6c yet set. el
10280 73 65 20 69 66 20 28 21 69 73 41 72 72 20 7c 7c se if (!isArr ||
10290 20 69 73 41 72 72 20 26 26 20 21 63 6f 6e 74 61 isArr && !conta
102a0 69 6e 73 28 76 61 6c 75 65 2c 20 64 6f 6d 29 29 ins(value, dom))
102b0 20 7b 0a 20 20 20 20 20 20 20 20 2f 2f 20 61 64 {. // ad
102c0 64 20 74 68 65 20 64 6f 6d 20 6e 6f 64 65 20 69 d the dom node i
102d0 6e 74 6f 20 74 68 65 20 61 72 72 61 79 0a 20 20 nto the array.
102e0 20 20 20 20 20 20 69 66 20 28 69 73 41 72 72 29 if (isArr)
102f0 0a 20 20 20 20 20 20 20 20 20 20 76 61 6c 75 65 . value
10300 2e 70 75 73 68 28 64 6f 6d 29 0a 20 20 20 20 20 .push(dom).
10310 20 20 20 65 6c 73 65 0a 20 20 20 20 20 20 20 20 else.
10320 20 20 70 61 72 65 6e 74 5b 6b 65 79 5d 20 3d 20 parent[key] =
10330 5b 76 61 6c 75 65 2c 20 64 6f 6d 5d 0a 20 20 20 [value, dom].
10340 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 2f 2f }. }.. //
10350 20 73 6b 69 70 20 74 68 65 20 65 6c 65 6d 65 6e skip the elemen
10360 74 73 20 77 69 74 68 20 6e 6f 20 6e 61 6d 65 64 ts with no named
10370 20 70 72 6f 70 65 72 74 69 65 73 0a 20 20 69 66 properties. if
10380 20 28 21 6b 65 79 29 20 72 65 74 75 72 6e 0a 0a (!key) return..
10390 20 20 2f 2f 20 63 68 65 63 6b 20 77 68 65 74 68 // check wheth
103a0 65 72 20 74 68 69 73 20 6b 65 79 20 68 61 73 20 er this key has
103b0 62 65 65 6e 20 61 6c 72 65 61 64 79 20 65 76 61 been already eva
103c0 6c 75 61 74 65 64 0a 20 20 69 66 20 28 74 6d 70 luated. if (tmp
103d0 6c 2e 68 61 73 45 78 70 72 28 6b 65 79 29 29 0a l.hasExpr(key)).
103e0 20 20 20 20 2f 2f 20 77 61 69 74 20 74 68 65 20 // wait the
103f0 66 69 72 73 74 20 75 70 64 61 74 65 64 20 65 76 first updated ev
10400 65 6e 74 20 6f 6e 6c 79 20 6f 6e 63 65 0a 20 20 ent only once.
10410 20 20 70 61 72 65 6e 74 2e 6f 6e 65 28 27 6d 6f parent.one('mo
10420 75 6e 74 27 2c 20 66 75 6e 63 74 69 6f 6e 28 29 unt', function()
10430 20 7b 0a 20 20 20 20 20 20 6b 65 79 20 3d 20 67 {. key = g
10440 65 74 4e 61 6d 65 64 4b 65 79 28 64 6f 6d 29 0a etNamedKey(dom).
10450 20 20 20 20 20 20 61 64 64 28 70 61 72 65 6e 74 add(parent
10460 5b 6b 65 79 5d 29 0a 20 20 20 20 7d 29 0a 20 20 [key]). }).
10470 65 6c 73 65 0a 20 20 20 20 61 64 64 28 70 61 72 else. add(par
10480 65 6e 74 5b 6b 65 79 5d 29 0a 0a 7d 0a 0a 2f 2a ent[key])..}../*
10490 2a 0a 20 2a 20 46 61 73 74 65 72 20 53 74 72 69 *. * Faster Stri
104a0 6e 67 20 73 74 61 72 74 73 57 69 74 68 20 61 6c ng startsWith al
104b0 74 65 72 6e 61 74 69 76 65 0a 20 2a 20 40 70 61 ternative. * @pa
104c0 72 61 6d 20 20 20 7b 20 53 74 72 69 6e 67 20 7d ram { String }
104d0 20 73 72 63 20 2d 20 73 6f 75 72 63 65 20 73 74 src - source st
104e0 72 69 6e 67 0a 20 2a 20 40 70 61 72 61 6d 20 20 ring. * @param
104f0 20 7b 20 53 74 72 69 6e 67 20 7d 20 73 74 72 20 { String } str
10500 2d 20 74 65 73 74 20 73 74 72 69 6e 67 0a 20 2a - test string. *
10510 20 40 72 65 74 75 72 6e 73 20 7b 20 42 6f 6f 6c @returns { Bool
10520 65 61 6e 20 7d 20 2d 0a 20 2a 2f 0a 66 75 6e 63 ean } -. */.func
10530 74 69 6f 6e 20 73 74 61 72 74 73 57 69 74 68 28 tion startsWith(
10540 73 72 63 2c 20 73 74 72 29 20 7b 0a 20 20 72 65 src, str) {. re
10550 74 75 72 6e 20 73 72 63 2e 73 6c 69 63 65 28 30 turn src.slice(0
10560 2c 20 73 74 72 2e 6c 65 6e 67 74 68 29 20 3d 3d , str.length) ==
10570 3d 20 73 74 72 0a 7d 0a 0a 2f 2a 2a 0a 20 2a 20 = str.}../**. *
10580 72 65 71 75 65 73 74 41 6e 69 6d 61 74 69 6f 6e requestAnimation
10590 46 72 61 6d 65 20 66 75 6e 63 74 69 6f 6e 0a 20 Frame function.
105a0 2a 20 41 64 61 70 74 65 64 20 66 72 6f 6d 20 68 * Adapted from h
105b0 74 74 70 73 3a 2f 2f 67 69 73 74 2e 67 69 74 68 ttps://gist.gith
105c0 75 62 2e 63 6f 6d 2f 70 61 75 6c 69 72 69 73 68 ub.com/paulirish
105d0 2f 31 35 37 39 36 37 31 2c 20 6c 69 63 65 6e 73 /1579671, licens
105e0 65 20 4d 49 54 0a 20 2a 2f 0a 76 61 72 20 72 41 e MIT. */.var rA
105f0 46 20 3d 20 28 66 75 6e 63 74 69 6f 6e 20 28 77 F = (function (w
10600 29 20 7b 0a 20 20 76 61 72 20 72 61 66 20 3d 20 ) {. var raf =
10610 77 2e 72 65 71 75 65 73 74 41 6e 69 6d 61 74 69 w.requestAnimati
10620 6f 6e 46 72 61 6d 65 20 20 20 20 7c 7c 0a 20 20 onFrame ||.
10630 20 20 20 20 20 20 20 20 20 20 77 2e 6d 6f 7a 52 w.mozR
10640 65 71 75 65 73 74 41 6e 69 6d 61 74 69 6f 6e 46 equestAnimationF
10650 72 61 6d 65 20 7c 7c 20 77 2e 77 65 62 6b 69 74 rame || w.webkit
10660 52 65 71 75 65 73 74 41 6e 69 6d 61 74 69 6f 6e RequestAnimation
10670 46 72 61 6d 65 0a 0a 20 20 69 66 20 28 21 72 61 Frame.. if (!ra
10680 66 20 7c 7c 20 2f 69 50 28 61 64 7c 68 6f 6e 65 f || /iP(ad|hone
10690 7c 6f 64 29 2e 2a 4f 53 20 36 2f 2e 74 65 73 74 |od).*OS 6/.test
106a0 28 77 2e 6e 61 76 69 67 61 74 6f 72 2e 75 73 65 (w.navigator.use
106b0 72 41 67 65 6e 74 29 29 20 7b 20 20 2f 2f 20 62 rAgent)) { // b
106c0 75 67 67 79 20 69 4f 53 36 0a 20 20 20 20 76 61 uggy iOS6. va
106d0 72 20 6c 61 73 74 54 69 6d 65 20 3d 20 30 0a 0a r lastTime = 0..
106e0 20 20 20 20 72 61 66 20 3d 20 66 75 6e 63 74 69 raf = functi
106f0 6f 6e 20 28 63 62 29 20 7b 0a 20 20 20 20 20 20 on (cb) {.
10700 76 61 72 20 6e 6f 77 74 69 6d 65 20 3d 20 44 61 var nowtime = Da
10710 74 65 2e 6e 6f 77 28 29 2c 20 74 69 6d 65 6f 75 te.now(), timeou
10720 74 20 3d 20 4d 61 74 68 2e 6d 61 78 28 31 36 20 t = Math.max(16
10730 2d 20 28 6e 6f 77 74 69 6d 65 20 2d 20 6c 61 73 - (nowtime - las
10740 74 54 69 6d 65 29 2c 20 30 29 0a 20 20 20 20 20 tTime), 0).
10750 20 73 65 74 54 69 6d 65 6f 75 74 28 66 75 6e 63 setTimeout(func
10760 74 69 6f 6e 20 28 29 20 7b 20 63 62 28 6c 61 73 tion () { cb(las
10770 74 54 69 6d 65 20 3d 20 6e 6f 77 74 69 6d 65 20 tTime = nowtime
10780 2b 20 74 69 6d 65 6f 75 74 29 20 7d 2c 20 74 69 + timeout) }, ti
10790 6d 65 6f 75 74 29 0a 20 20 20 20 7d 0a 20 20 7d meout). }. }
107a0 0a 20 20 72 65 74 75 72 6e 20 72 61 66 0a 0a 7d . return raf..}
107b0 29 28 77 69 6e 64 6f 77 20 7c 7c 20 7b 7d 29 0a )(window || {}).
107c0 0a 2f 2a 2a 0a 20 2a 20 4d 6f 75 6e 74 20 61 20 ./**. * Mount a
107d0 74 61 67 20 63 72 65 61 74 69 6e 67 20 6e 65 77 tag creating new
107e0 20 54 61 67 20 69 6e 73 74 61 6e 63 65 0a 20 2a Tag instance. *
107f0 20 40 70 61 72 61 6d 20 20 20 7b 20 4f 62 6a 65 @param { Obje
10800 63 74 20 7d 20 72 6f 6f 74 20 2d 20 64 6f 6d 20 ct } root - dom
10810 6e 6f 64 65 20 77 68 65 72 65 20 74 68 65 20 74 node where the t
10820 61 67 20 77 69 6c 6c 20 62 65 20 6d 6f 75 6e 74 ag will be mount
10830 65 64 0a 20 2a 20 40 70 61 72 61 6d 20 20 20 7b ed. * @param {
10840 20 53 74 72 69 6e 67 20 7d 20 74 61 67 4e 61 6d String } tagNam
10850 65 20 2d 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 e - name of the
10860 72 69 6f 74 20 74 61 67 20 77 65 20 77 61 6e 74 riot tag we want
10870 20 74 6f 20 6d 6f 75 6e 74 0a 20 2a 20 40 70 61 to mount. * @pa
10880 72 61 6d 20 20 20 7b 20 4f 62 6a 65 63 74 20 7d ram { Object }
10890 20 6f 70 74 73 20 2d 20 6f 70 74 69 6f 6e 73 20 opts - options
108a0 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20 54 to pass to the T
108b0 61 67 20 69 6e 73 74 61 6e 63 65 0a 20 2a 20 40 ag instance. * @
108c0 72 65 74 75 72 6e 73 20 7b 20 54 61 67 20 7d 20 returns { Tag }
108d0 61 20 6e 65 77 20 54 61 67 20 69 6e 73 74 61 6e a new Tag instan
108e0 63 65 0a 20 2a 2f 0a 66 75 6e 63 74 69 6f 6e 20 ce. */.function
108f0 6d 6f 75 6e 74 54 6f 28 72 6f 6f 74 2c 20 74 61 mountTo(root, ta
10900 67 4e 61 6d 65 2c 20 6f 70 74 73 29 20 7b 0a 20 gName, opts) {.
10910 20 76 61 72 20 74 61 67 20 3d 20 5f 5f 74 61 67 var tag = __tag
10920 49 6d 70 6c 5b 74 61 67 4e 61 6d 65 5d 2c 0a 20 Impl[tagName],.
10930 20 20 20 2f 2f 20 63 61 63 68 65 20 74 68 65 20 // cache the
10940 69 6e 6e 65 72 20 48 54 4d 4c 20 74 6f 20 66 69 inner HTML to fi
10950 78 20 23 38 35 35 0a 20 20 20 20 69 6e 6e 65 72 x #855. inner
10960 48 54 4d 4c 20 3d 20 72 6f 6f 74 2e 5f 69 6e 6e HTML = root._inn
10970 65 72 48 54 4d 4c 20 3d 20 72 6f 6f 74 2e 5f 69 erHTML = root._i
10980 6e 6e 65 72 48 54 4d 4c 20 7c 7c 20 72 6f 6f 74 nnerHTML || root
10990 2e 69 6e 6e 65 72 48 54 4d 4c 0a 0a 20 20 2f 2f .innerHTML.. //
109a0 20 63 6c 65 61 72 20 74 68 65 20 69 6e 6e 65 72 clear the inner
109b0 20 68 74 6d 6c 0a 20 20 72 6f 6f 74 2e 69 6e 6e html. root.inn
109c0 65 72 48 54 4d 4c 20 3d 20 27 27 0a 0a 20 20 69 erHTML = ''.. i
109d0 66 20 28 74 61 67 20 26 26 20 72 6f 6f 74 29 20 f (tag && root)
109e0 74 61 67 20 3d 20 6e 65 77 20 54 61 67 28 74 61 tag = new Tag(ta
109f0 67 2c 20 7b 20 72 6f 6f 74 3a 20 72 6f 6f 74 2c g, { root: root,
10a00 20 6f 70 74 73 3a 20 6f 70 74 73 20 7d 2c 20 69 opts: opts }, i
10a10 6e 6e 65 72 48 54 4d 4c 29 0a 0a 20 20 69 66 20 nnerHTML).. if
10a20 28 74 61 67 20 26 26 20 74 61 67 2e 6d 6f 75 6e (tag && tag.moun
10a30 74 29 20 7b 0a 20 20 20 20 74 61 67 2e 6d 6f 75 t) {. tag.mou
10a40 6e 74 28 29 0a 20 20 20 20 2f 2f 20 61 64 64 20 nt(). // add
10a50 74 68 69 73 20 74 61 67 20 74 6f 20 74 68 65 20 this tag to the
10a60 76 69 72 74 75 61 6c 44 6f 6d 20 76 61 72 69 61 virtualDom varia
10a70 62 6c 65 0a 20 20 20 20 69 66 20 28 21 63 6f 6e ble. if (!con
10a80 74 61 69 6e 73 28 5f 5f 76 69 72 74 75 61 6c 44 tains(__virtualD
10a90 6f 6d 2c 20 74 61 67 29 29 20 5f 5f 76 69 72 74 om, tag)) __virt
10aa0 75 61 6c 44 6f 6d 2e 70 75 73 68 28 74 61 67 29 ualDom.push(tag)
10ab0 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 74 . }.. return t
10ac0 61 67 0a 7d 0a 2f 2a 2a 0a 20 2a 20 52 69 6f 74 ag.}./**. * Riot
10ad0 20 70 75 62 6c 69 63 20 61 70 69 0a 20 2a 2f 0a public api. */.
10ae0 0a 2f 2f 20 73 68 61 72 65 20 6d 65 74 68 6f 64 .// share method
10af0 73 20 66 6f 72 20 6f 74 68 65 72 20 72 69 6f 74 s for other riot
10b00 20 70 61 72 74 73 2c 20 65 2e 67 2e 20 63 6f 6d parts, e.g. com
10b10 70 69 6c 65 72 0a 72 69 6f 74 2e 75 74 69 6c 20 piler.riot.util
10b20 3d 20 7b 20 62 72 61 63 6b 65 74 73 3a 20 62 72 = { brackets: br
10b30 61 63 6b 65 74 73 2c 20 74 6d 70 6c 3a 20 74 6d ackets, tmpl: tm
10b40 70 6c 20 7d 0a 0a 2f 2a 2a 0a 20 2a 20 43 72 65 pl }../**. * Cre
10b50 61 74 65 20 61 20 6d 69 78 69 6e 20 74 68 61 74 ate a mixin that
10b60 20 63 6f 75 6c 64 20 62 65 20 67 6c 6f 62 61 6c could be global
10b70 6c 79 20 73 68 61 72 65 64 20 61 63 72 6f 73 73 ly shared across
10b80 20 61 6c 6c 20 74 68 65 20 74 61 67 73 0a 20 2a all the tags. *
10b90 2f 0a 72 69 6f 74 2e 6d 69 78 69 6e 20 3d 20 28 /.riot.mixin = (
10ba0 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 76 function() {. v
10bb0 61 72 20 6d 69 78 69 6e 73 20 3d 20 7b 7d 2c 0a ar mixins = {},.
10bc0 20 20 20 20 67 6c 6f 62 61 6c 73 20 3d 20 6d 69 globals = mi
10bd0 78 69 6e 73 5b 47 4c 4f 42 41 4c 5f 4d 49 58 49 xins[GLOBAL_MIXI
10be0 4e 5d 20 3d 20 7b 7d 2c 0a 20 20 20 20 5f 69 64 N] = {},. _id
10bf0 20 3d 20 30 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a = 0.. /**. *
10c00 20 43 72 65 61 74 65 2f 52 65 74 75 72 6e 20 61 Create/Return a
10c10 20 6d 69 78 69 6e 20 62 79 20 69 74 73 20 6e 61 mixin by its na
10c20 6d 65 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 20 me. * @param
10c30 20 7b 20 53 74 72 69 6e 67 20 7d 20 20 6e 61 6d { String } nam
10c40 65 20 2d 20 6d 69 78 69 6e 20 6e 61 6d 65 20 28 e - mixin name (
10c50 67 6c 6f 62 61 6c 20 6d 69 78 69 6e 20 69 66 20 global mixin if
10c60 6f 62 6a 65 63 74 29 0a 20 20 20 2a 20 40 70 61 object). * @pa
10c70 72 61 6d 20 20 20 7b 20 4f 62 6a 65 63 74 20 7d ram { Object }
10c80 20 20 6d 69 78 69 6e 20 2d 20 6d 69 78 69 6e 20 mixin - mixin
10c90 6c 6f 67 69 63 0a 20 20 20 2a 20 40 70 61 72 61 logic. * @para
10ca0 6d 20 20 20 7b 20 42 6f 6f 6c 65 61 6e 20 7d 20 m { Boolean }
10cb0 67 20 2d 20 69 73 20 67 6c 6f 62 61 6c 3f 0a 20 g - is global?.
10cc0 20 20 2a 20 40 72 65 74 75 72 6e 73 20 7b 20 4f * @returns { O
10cd0 62 6a 65 63 74 20 7d 20 20 74 68 65 20 6d 69 78 bject } the mix
10ce0 69 6e 20 6c 6f 67 69 63 0a 20 20 20 2a 2f 0a 20 in logic. */.
10cf0 20 72 65 74 75 72 6e 20 66 75 6e 63 74 69 6f 6e return function
10d00 28 6e 61 6d 65 2c 20 6d 69 78 69 6e 2c 20 67 29 (name, mixin, g)
10d10 20 7b 0a 20 20 20 20 2f 2f 20 55 6e 6e 61 6d 65 {. // Unname
10d20 64 20 67 6c 6f 62 61 6c 0a 20 20 20 20 69 66 20 d global. if
10d30 28 69 73 4f 62 6a 65 63 74 28 6e 61 6d 65 29 29 (isObject(name))
10d40 20 7b 0a 20 20 20 20 20 20 72 69 6f 74 2e 6d 69 {. riot.mi
10d50 78 69 6e 28 27 5f 5f 75 6e 6e 61 6d 65 64 5f 27 xin('__unnamed_'
10d60 2b 5f 69 64 2b 2b 2c 20 6e 61 6d 65 2c 20 74 72 +_id++, name, tr
10d70 75 65 29 0a 20 20 20 20 20 20 72 65 74 75 72 6e ue). return
10d80 0a 20 20 20 20 7d 0a 0a 20 20 20 20 76 61 72 20 . }.. var
10d90 73 74 6f 72 65 20 3d 20 67 20 3f 20 67 6c 6f 62 store = g ? glob
10da0 61 6c 73 20 3a 20 6d 69 78 69 6e 73 0a 0a 20 20 als : mixins..
10db0 20 20 2f 2f 20 47 65 74 74 65 72 0a 20 20 20 20 // Getter.
10dc0 69 66 20 28 21 6d 69 78 69 6e 29 20 7b 0a 20 20 if (!mixin) {.
10dd0 20 20 20 20 69 66 20 28 74 79 70 65 6f 66 20 73 if (typeof s
10de0 74 6f 72 65 5b 6e 61 6d 65 5d 20 3d 3d 3d 20 54 tore[name] === T
10df0 5f 55 4e 44 45 46 29 20 7b 0a 20 20 20 20 20 20 _UNDEF) {.
10e00 20 20 74 68 72 6f 77 20 6e 65 77 20 45 72 72 6f throw new Erro
10e10 72 28 27 55 6e 72 65 67 69 73 74 65 72 65 64 20 r('Unregistered
10e20 6d 69 78 69 6e 3a 20 27 20 2b 20 6e 61 6d 65 29 mixin: ' + name)
10e30 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 . }. r
10e40 65 74 75 72 6e 20 73 74 6f 72 65 5b 6e 61 6d 65 eturn store[name
10e50 5d 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2f 20 53 ]. }. // S
10e60 65 74 74 65 72 0a 20 20 20 20 69 66 20 28 69 73 etter. if (is
10e70 46 75 6e 63 74 69 6f 6e 28 6d 69 78 69 6e 29 29 Function(mixin))
10e80 20 7b 0a 20 20 20 20 20 20 65 78 74 65 6e 64 28 {. extend(
10e90 6d 69 78 69 6e 2e 70 72 6f 74 6f 74 79 70 65 2c mixin.prototype,
10ea0 20 73 74 6f 72 65 5b 6e 61 6d 65 5d 20 7c 7c 20 store[name] ||
10eb0 7b 7d 29 0a 20 20 20 20 20 20 73 74 6f 72 65 5b {}). store[
10ec0 6e 61 6d 65 5d 20 3d 20 6d 69 78 69 6e 0a 20 20 name] = mixin.
10ed0 20 20 7d 0a 20 20 20 20 65 6c 73 65 20 7b 0a 20 }. else {.
10ee0 20 20 20 20 20 73 74 6f 72 65 5b 6e 61 6d 65 5d store[name]
10ef0 20 3d 20 65 78 74 65 6e 64 28 73 74 6f 72 65 5b = extend(store[
10f00 6e 61 6d 65 5d 20 7c 7c 20 7b 7d 2c 20 6d 69 78 name] || {}, mix
10f10 69 6e 29 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 7d in). }. }..}
10f20 29 28 29 0a 0a 2f 2a 2a 0a 20 2a 20 43 72 65 61 )()../**. * Crea
10f30 74 65 20 61 20 6e 65 77 20 72 69 6f 74 20 74 61 te a new riot ta
10f40 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e g implementation
10f50 0a 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 53 . * @param { S
10f60 74 72 69 6e 67 20 7d 20 20 20 6e 61 6d 65 20 2d tring } name -
10f70 20 6e 61 6d 65 2f 69 64 20 6f 66 20 74 68 65 20 name/id of the
10f80 6e 65 77 20 72 69 6f 74 20 74 61 67 0a 20 2a 20 new riot tag. *
10f90 40 70 61 72 61 6d 20 20 20 7b 20 53 74 72 69 6e @param { Strin
10fa0 67 20 7d 20 20 20 68 74 6d 6c 20 2d 20 74 61 67 g } html - tag
10fb0 20 74 65 6d 70 6c 61 74 65 0a 20 2a 20 40 70 61 template. * @pa
10fc0 72 61 6d 20 20 20 7b 20 53 74 72 69 6e 67 20 7d ram { String }
10fd0 20 20 20 63 73 73 20 2d 20 63 75 73 74 6f 6d 20 css - custom
10fe0 74 61 67 20 63 73 73 0a 20 2a 20 40 70 61 72 61 tag css. * @para
10ff0 6d 20 20 20 7b 20 53 74 72 69 6e 67 20 7d 20 20 m { String }
11000 20 61 74 74 72 73 20 2d 20 72 6f 6f 74 20 74 61 attrs - root ta
11010 67 20 61 74 74 72 69 62 75 74 65 73 0a 20 2a 20 g attributes. *
11020 40 70 61 72 61 6d 20 20 20 7b 20 46 75 6e 63 74 @param { Funct
11030 69 6f 6e 20 7d 20 66 6e 20 2d 20 75 73 65 72 20 ion } fn - user
11040 66 75 6e 63 74 69 6f 6e 0a 20 2a 20 40 72 65 74 function. * @ret
11050 75 72 6e 73 20 7b 20 53 74 72 69 6e 67 20 7d 20 urns { String }
11060 6e 61 6d 65 2f 69 64 20 6f 66 20 74 68 65 20 74 name/id of the t
11070 61 67 20 6a 75 73 74 20 63 72 65 61 74 65 64 0a ag just created.
11080 20 2a 2f 0a 72 69 6f 74 2e 74 61 67 20 3d 20 66 */.riot.tag = f
11090 75 6e 63 74 69 6f 6e 28 6e 61 6d 65 2c 20 68 74 unction(name, ht
110a0 6d 6c 2c 20 63 73 73 2c 20 61 74 74 72 73 2c 20 ml, css, attrs,
110b0 66 6e 29 20 7b 0a 20 20 69 66 20 28 69 73 46 75 fn) {. if (isFu
110c0 6e 63 74 69 6f 6e 28 61 74 74 72 73 29 29 20 7b nction(attrs)) {
110d0 0a 20 20 20 20 66 6e 20 3d 20 61 74 74 72 73 0a . fn = attrs.
110e0 20 20 20 20 69 66 20 28 2f 5e 5b 5c 77 5c 2d 5d if (/^[\w\-]
110f0 2b 5c 73 3f 3d 2f 2e 74 65 73 74 28 63 73 73 29 +\s?=/.test(css)
11100 29 20 7b 0a 20 20 20 20 20 20 61 74 74 72 73 20 ) {. attrs
11110 3d 20 63 73 73 0a 20 20 20 20 20 20 63 73 73 20 = css. css
11120 3d 20 27 27 0a 20 20 20 20 7d 20 65 6c 73 65 20 = ''. } else
11130 61 74 74 72 73 20 3d 20 27 27 0a 20 20 7d 0a 20 attrs = ''. }.
11140 20 69 66 20 28 63 73 73 29 20 7b 0a 20 20 20 20 if (css) {.
11150 69 66 20 28 69 73 46 75 6e 63 74 69 6f 6e 28 63 if (isFunction(c
11160 73 73 29 29 20 66 6e 20 3d 20 63 73 73 0a 20 20 ss)) fn = css.
11170 20 20 65 6c 73 65 20 73 74 79 6c 65 4d 61 6e 61 else styleMana
11180 67 65 72 2e 61 64 64 28 63 73 73 29 0a 20 20 7d ger.add(css). }
11190 0a 20 20 6e 61 6d 65 20 3d 20 6e 61 6d 65 2e 74 . name = name.t
111a0 6f 4c 6f 77 65 72 43 61 73 65 28 29 0a 20 20 5f oLowerCase(). _
111b0 5f 74 61 67 49 6d 70 6c 5b 6e 61 6d 65 5d 20 3d _tagImpl[name] =
111c0 20 7b 20 6e 61 6d 65 3a 20 6e 61 6d 65 2c 20 74 { name: name, t
111d0 6d 70 6c 3a 20 68 74 6d 6c 2c 20 61 74 74 72 73 mpl: html, attrs
111e0 3a 20 61 74 74 72 73 2c 20 66 6e 3a 20 66 6e 20 : attrs, fn: fn
111f0 7d 0a 20 20 72 65 74 75 72 6e 20 6e 61 6d 65 0a }. return name.
11200 7d 0a 0a 2f 2a 2a 0a 20 2a 20 43 72 65 61 74 65 }../**. * Create
11210 20 61 20 6e 65 77 20 72 69 6f 74 20 74 61 67 20 a new riot tag
11220 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 28 implementation (
11230 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 63 for use by the c
11240 6f 6d 70 69 6c 65 72 29 0a 20 2a 20 40 70 61 72 ompiler). * @par
11250 61 6d 20 20 20 7b 20 53 74 72 69 6e 67 20 7d 20 am { String }
11260 20 20 6e 61 6d 65 20 2d 20 6e 61 6d 65 2f 69 64 name - name/id
11270 20 6f 66 20 74 68 65 20 6e 65 77 20 72 69 6f 74 of the new riot
11280 20 74 61 67 0a 20 2a 20 40 70 61 72 61 6d 20 20 tag. * @param
11290 20 7b 20 53 74 72 69 6e 67 20 7d 20 20 20 68 74 { String } ht
112a0 6d 6c 20 2d 20 74 61 67 20 74 65 6d 70 6c 61 74 ml - tag templat
112b0 65 0a 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 e. * @param {
112c0 53 74 72 69 6e 67 20 7d 20 20 20 63 73 73 20 2d String } css -
112d0 20 63 75 73 74 6f 6d 20 74 61 67 20 63 73 73 0a custom tag css.
112e0 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 53 74 * @param { St
112f0 72 69 6e 67 20 7d 20 20 20 61 74 74 72 73 20 2d ring } attrs -
11300 20 72 6f 6f 74 20 74 61 67 20 61 74 74 72 69 62 root tag attrib
11310 75 74 65 73 0a 20 2a 20 40 70 61 72 61 6d 20 20 utes. * @param
11320 20 7b 20 46 75 6e 63 74 69 6f 6e 20 7d 20 66 6e { Function } fn
11330 20 2d 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e - user function
11340 0a 20 2a 20 40 72 65 74 75 72 6e 73 20 7b 20 53 . * @returns { S
11350 74 72 69 6e 67 20 7d 20 6e 61 6d 65 2f 69 64 20 tring } name/id
11360 6f 66 20 74 68 65 20 74 61 67 20 6a 75 73 74 20 of the tag just
11370 63 72 65 61 74 65 64 0a 20 2a 2f 0a 72 69 6f 74 created. */.riot
11380 2e 74 61 67 32 20 3d 20 66 75 6e 63 74 69 6f 6e .tag2 = function
11390 28 6e 61 6d 65 2c 20 68 74 6d 6c 2c 20 63 73 73 (name, html, css
113a0 2c 20 61 74 74 72 73 2c 20 66 6e 29 20 7b 0a 20 , attrs, fn) {.
113b0 20 69 66 20 28 63 73 73 29 20 73 74 79 6c 65 4d if (css) styleM
113c0 61 6e 61 67 65 72 2e 61 64 64 28 63 73 73 29 0a anager.add(css).
113d0 20 20 2f 2f 69 66 20 28 62 70 61 69 72 29 20 72 //if (bpair) r
113e0 69 6f 74 2e 73 65 74 74 69 6e 67 73 2e 62 72 61 iot.settings.bra
113f0 63 6b 65 74 73 20 3d 20 62 70 61 69 72 0a 20 20 ckets = bpair.
11400 5f 5f 74 61 67 49 6d 70 6c 5b 6e 61 6d 65 5d 20 __tagImpl[name]
11410 3d 20 7b 20 6e 61 6d 65 3a 20 6e 61 6d 65 2c 20 = { name: name,
11420 74 6d 70 6c 3a 20 68 74 6d 6c 2c 20 61 74 74 72 tmpl: html, attr
11430 73 3a 20 61 74 74 72 73 2c 20 66 6e 3a 20 66 6e s: attrs, fn: fn
11440 20 7d 0a 20 20 72 65 74 75 72 6e 20 6e 61 6d 65 }. return name
11450 0a 7d 0a 0a 2f 2a 2a 0a 20 2a 20 4d 6f 75 6e 74 .}../**. * Mount
11460 20 61 20 74 61 67 20 75 73 69 6e 67 20 61 20 73 a tag using a s
11470 70 65 63 69 66 69 63 20 74 61 67 20 69 6d 70 6c pecific tag impl
11480 65 6d 65 6e 74 61 74 69 6f 6e 0a 20 2a 20 40 70 ementation. * @p
11490 61 72 61 6d 20 20 20 7b 20 53 74 72 69 6e 67 20 aram { String
114a0 7d 20 73 65 6c 65 63 74 6f 72 20 2d 20 74 61 67 } selector - tag
114b0 20 44 4f 4d 20 73 65 6c 65 63 74 6f 72 0a 20 2a DOM selector. *
114c0 20 40 70 61 72 61 6d 20 20 20 7b 20 53 74 72 69 @param { Stri
114d0 6e 67 20 7d 20 74 61 67 4e 61 6d 65 20 2d 20 74 ng } tagName - t
114e0 61 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f ag implementatio
114f0 6e 20 6e 61 6d 65 0a 20 2a 20 40 70 61 72 61 6d n name. * @param
11500 20 20 20 7b 20 4f 62 6a 65 63 74 20 7d 20 6f 70 { Object } op
11510 74 73 20 2d 20 74 61 67 20 6c 6f 67 69 63 0a 20 ts - tag logic.
11520 2a 20 40 72 65 74 75 72 6e 73 20 7b 20 41 72 72 * @returns { Arr
11530 61 79 20 7d 20 6e 65 77 20 74 61 67 73 20 69 6e ay } new tags in
11540 73 74 61 6e 63 65 73 0a 20 2a 2f 0a 72 69 6f 74 stances. */.riot
11550 2e 6d 6f 75 6e 74 20 3d 20 66 75 6e 63 74 69 6f .mount = functio
11560 6e 28 73 65 6c 65 63 74 6f 72 2c 20 74 61 67 4e n(selector, tagN
11570 61 6d 65 2c 20 6f 70 74 73 29 20 7b 0a 0a 20 20 ame, opts) {..
11580 76 61 72 20 65 6c 73 2c 0a 20 20 20 20 61 6c 6c var els,. all
11590 54 61 67 73 2c 0a 20 20 20 20 74 61 67 73 20 3d Tags,. tags =
115a0 20 5b 5d 0a 0a 20 20 2f 2f 20 68 65 6c 70 65 72 [].. // helper
115b0 20 66 75 6e 63 74 69 6f 6e 73 0a 0a 20 20 66 75 functions.. fu
115c0 6e 63 74 69 6f 6e 20 61 64 64 52 69 6f 74 54 61 nction addRiotTa
115d0 67 73 28 61 72 72 29 20 7b 0a 20 20 20 20 76 61 gs(arr) {. va
115e0 72 20 6c 69 73 74 20 3d 20 27 27 0a 20 20 20 20 r list = ''.
115f0 65 61 63 68 28 61 72 72 2c 20 66 75 6e 63 74 69 each(arr, functi
11600 6f 6e 20 28 65 29 20 7b 0a 20 20 20 20 20 20 69 on (e) {. i
11610 66 20 28 21 2f 5b 5e 2d 5c 77 5d 2f 2e 74 65 73 f (!/[^-\w]/.tes
11620 74 28 65 29 29 20 7b 0a 20 20 20 20 20 20 20 20 t(e)) {.
11630 65 20 3d 20 65 2e 74 72 69 6d 28 29 2e 74 6f 4c e = e.trim().toL
11640 6f 77 65 72 43 61 73 65 28 29 0a 20 20 20 20 20 owerCase().
11650 20 20 20 6c 69 73 74 20 2b 3d 20 27 2c 5b 27 20 list += ',['
11660 2b 20 52 49 4f 54 5f 54 41 47 5f 49 53 20 2b 20 + RIOT_TAG_IS +
11670 27 3d 22 27 20 2b 20 65 20 2b 20 27 22 5d 2c 5b '="' + e + '"],[
11680 27 20 2b 20 52 49 4f 54 5f 54 41 47 20 2b 20 27 ' + RIOT_TAG + '
11690 3d 22 27 20 2b 20 65 20 2b 20 27 22 5d 27 0a 20 ="' + e + '"]'.
116a0 20 20 20 20 20 7d 0a 20 20 20 20 7d 29 0a 20 20 }. }).
116b0 20 20 72 65 74 75 72 6e 20 6c 69 73 74 0a 20 20 return list.
116c0 7d 0a 0a 20 20 66 75 6e 63 74 69 6f 6e 20 73 65 }.. function se
116d0 6c 65 63 74 41 6c 6c 54 61 67 73 28 29 20 7b 0a lectAllTags() {.
116e0 20 20 20 20 76 61 72 20 6b 65 79 73 20 3d 20 4f var keys = O
116f0 62 6a 65 63 74 2e 6b 65 79 73 28 5f 5f 74 61 67 bject.keys(__tag
11700 49 6d 70 6c 29 0a 20 20 20 20 72 65 74 75 72 6e Impl). return
11710 20 6b 65 79 73 20 2b 20 61 64 64 52 69 6f 74 54 keys + addRiotT
11720 61 67 73 28 6b 65 79 73 29 0a 20 20 7d 0a 0a 20 ags(keys). }..
11730 20 66 75 6e 63 74 69 6f 6e 20 70 75 73 68 54 61 function pushTa
11740 67 73 28 72 6f 6f 74 29 20 7b 0a 20 20 20 20 69 gs(root) {. i
11750 66 20 28 72 6f 6f 74 2e 74 61 67 4e 61 6d 65 29 f (root.tagName)
11760 20 7b 0a 20 20 20 20 20 20 76 61 72 20 72 69 6f {. var rio
11770 74 54 61 67 20 3d 20 67 65 74 41 74 74 72 28 72 tTag = getAttr(r
11780 6f 6f 74 2c 20 52 49 4f 54 5f 54 41 47 5f 49 53 oot, RIOT_TAG_IS
11790 29 20 7c 7c 20 67 65 74 41 74 74 72 28 72 6f 6f ) || getAttr(roo
117a0 74 2c 20 52 49 4f 54 5f 54 41 47 29 0a 0a 20 20 t, RIOT_TAG)..
117b0 20 20 20 20 2f 2f 20 68 61 76 65 20 74 61 67 4e // have tagN
117c0 61 6d 65 3f 20 66 6f 72 63 65 20 72 69 6f 74 2d ame? force riot-
117d0 74 61 67 20 74 6f 20 62 65 20 74 68 65 20 73 61 tag to be the sa
117e0 6d 65 0a 20 20 20 20 20 20 69 66 20 28 74 61 67 me. if (tag
117f0 4e 61 6d 65 20 26 26 20 72 69 6f 74 54 61 67 20 Name && riotTag
11800 21 3d 3d 20 74 61 67 4e 61 6d 65 29 20 7b 0a 20 !== tagName) {.
11810 20 20 20 20 20 20 20 72 69 6f 74 54 61 67 20 3d riotTag =
11820 20 74 61 67 4e 61 6d 65 0a 20 20 20 20 20 20 20 tagName.
11830 20 73 65 74 41 74 74 72 28 72 6f 6f 74 2c 20 52 setAttr(root, R
11840 49 4f 54 5f 54 41 47 5f 49 53 2c 20 74 61 67 4e IOT_TAG_IS, tagN
11850 61 6d 65 29 0a 20 20 20 20 20 20 20 20 73 65 74 ame). set
11860 41 74 74 72 28 72 6f 6f 74 2c 20 52 49 4f 54 5f Attr(root, RIOT_
11870 54 41 47 2c 20 74 61 67 4e 61 6d 65 29 20 2f 2f TAG, tagName) //
11880 20 74 68 69 73 20 77 69 6c 6c 20 62 65 20 72 65 this will be re
11890 6d 6f 76 65 64 20 69 6e 20 72 69 6f 74 20 33 2e moved in riot 3.
118a0 30 2e 30 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 0.0. }.
118b0 20 20 76 61 72 20 74 61 67 20 3d 20 6d 6f 75 6e var tag = moun
118c0 74 54 6f 28 72 6f 6f 74 2c 20 72 69 6f 74 54 61 tTo(root, riotTa
118d0 67 20 7c 7c 20 72 6f 6f 74 2e 74 61 67 4e 61 6d g || root.tagNam
118e0 65 2e 74 6f 4c 6f 77 65 72 43 61 73 65 28 29 2c e.toLowerCase(),
118f0 20 6f 70 74 73 29 0a 0a 20 20 20 20 20 20 69 66 opts).. if
11900 20 28 74 61 67 29 20 74 61 67 73 2e 70 75 73 68 (tag) tags.push
11910 28 74 61 67 29 0a 20 20 20 20 7d 20 65 6c 73 65 (tag). } else
11920 20 69 66 20 28 72 6f 6f 74 2e 6c 65 6e 67 74 68 if (root.length
11930 29 20 7b 0a 20 20 20 20 20 20 65 61 63 68 28 72 ) {. each(r
11940 6f 6f 74 2c 20 70 75 73 68 54 61 67 73 29 20 20 oot, pushTags)
11950 20 2f 2f 20 61 73 73 75 6d 65 20 6e 6f 64 65 4c // assume nodeL
11960 69 73 74 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 ist. }. }..
11970 20 2f 2f 20 2d 2d 2d 2d 2d 20 6d 6f 75 6e 74 20 // ----- mount
11980 63 6f 64 65 20 2d 2d 2d 2d 2d 0a 0a 20 20 2f 2f code -----.. //
11990 20 69 6e 6a 65 63 74 20 73 74 79 6c 65 73 20 69 inject styles i
119a0 6e 74 6f 20 44 4f 4d 0a 20 20 73 74 79 6c 65 4d nto DOM. styleM
119b0 61 6e 61 67 65 72 2e 69 6e 6a 65 63 74 28 29 0a anager.inject().
119c0 0a 20 20 69 66 20 28 69 73 4f 62 6a 65 63 74 28 . if (isObject(
119d0 74 61 67 4e 61 6d 65 29 29 20 7b 0a 20 20 20 20 tagName)) {.
119e0 6f 70 74 73 20 3d 20 74 61 67 4e 61 6d 65 0a 20 opts = tagName.
119f0 20 20 20 74 61 67 4e 61 6d 65 20 3d 20 30 0a 20 tagName = 0.
11a00 20 7d 0a 0a 20 20 2f 2f 20 63 72 61 77 6c 20 74 }.. // crawl t
11a10 68 65 20 44 4f 4d 20 74 6f 20 66 69 6e 64 20 74 he DOM to find t
11a20 68 65 20 74 61 67 0a 20 20 69 66 20 28 74 79 70 he tag. if (typ
11a30 65 6f 66 20 73 65 6c 65 63 74 6f 72 20 3d 3d 3d eof selector ===
11a40 20 54 5f 53 54 52 49 4e 47 29 20 7b 0a 20 20 20 T_STRING) {.
11a50 20 69 66 20 28 73 65 6c 65 63 74 6f 72 20 3d 3d if (selector ==
11a60 3d 20 27 2a 27 29 0a 20 20 20 20 20 20 2f 2f 20 = '*'). //
11a70 73 65 6c 65 63 74 20 61 6c 6c 20 74 68 65 20 74 select all the t
11a80 61 67 73 20 72 65 67 69 73 74 65 72 65 64 0a 20 ags registered.
11a90 20 20 20 20 20 2f 2f 20 61 6e 64 20 61 6c 73 6f // and also
11aa0 20 74 68 65 20 74 61 67 73 20 66 6f 75 6e 64 20 the tags found
11ab0 77 69 74 68 20 74 68 65 20 72 69 6f 74 2d 74 61 with the riot-ta
11ac0 67 20 61 74 74 72 69 62 75 74 65 20 73 65 74 0a g attribute set.
11ad0 20 20 20 20 20 20 73 65 6c 65 63 74 6f 72 20 3d selector =
11ae0 20 61 6c 6c 54 61 67 73 20 3d 20 73 65 6c 65 63 allTags = selec
11af0 74 41 6c 6c 54 61 67 73 28 29 0a 20 20 20 20 65 tAllTags(). e
11b00 6c 73 65 0a 20 20 20 20 20 20 2f 2f 20 6f 72 20 lse. // or
11b10 6a 75 73 74 20 74 68 65 20 6f 6e 65 73 20 6e 61 just the ones na
11b20 6d 65 64 20 6c 69 6b 65 20 74 68 65 20 73 65 6c med like the sel
11b30 65 63 74 6f 72 0a 20 20 20 20 20 20 73 65 6c 65 ector. sele
11b40 63 74 6f 72 20 2b 3d 20 61 64 64 52 69 6f 74 54 ctor += addRiotT
11b50 61 67 73 28 73 65 6c 65 63 74 6f 72 2e 73 70 6c ags(selector.spl
11b60 69 74 28 2f 2c 20 2a 2f 29 29 0a 0a 20 20 20 20 it(/, */))..
11b70 2f 2f 20 6d 61 6b 65 20 73 75 72 65 20 74 6f 20 // make sure to
11b80 70 61 73 73 20 61 6c 77 61 79 73 20 61 20 73 65 pass always a se
11b90 6c 65 63 74 6f 72 0a 20 20 20 20 2f 2f 20 74 6f lector. // to
11ba0 20 74 68 65 20 71 75 65 72 79 53 65 6c 65 63 74 the querySelect
11bb0 6f 72 41 6c 6c 20 66 75 6e 63 74 69 6f 6e 0a 20 orAll function.
11bc0 20 20 20 65 6c 73 20 3d 20 73 65 6c 65 63 74 6f els = selecto
11bd0 72 20 3f 20 24 24 28 73 65 6c 65 63 74 6f 72 29 r ? $$(selector)
11be0 20 3a 20 5b 5d 0a 20 20 7d 0a 20 20 65 6c 73 65 : []. }. else
11bf0 0a 20 20 20 20 2f 2f 20 70 72 6f 62 61 62 6c 79 . // probably
11c00 20 79 6f 75 20 68 61 76 65 20 70 61 73 73 65 64 you have passed
11c10 20 61 6c 72 65 61 64 79 20 61 20 74 61 67 20 6f already a tag o
11c20 72 20 61 20 4e 6f 64 65 4c 69 73 74 0a 20 20 20 r a NodeList.
11c30 20 65 6c 73 20 3d 20 73 65 6c 65 63 74 6f 72 0a els = selector.
11c40 0a 20 20 2f 2f 20 73 65 6c 65 63 74 20 61 6c 6c . // select all
11c50 20 74 68 65 20 72 65 67 69 73 74 65 72 65 64 20 the registered
11c60 61 6e 64 20 6d 6f 75 6e 74 20 74 68 65 6d 20 69 and mount them i
11c70 6e 73 69 64 65 20 74 68 65 69 72 20 72 6f 6f 74 nside their root
11c80 20 65 6c 65 6d 65 6e 74 73 0a 20 20 69 66 20 28 elements. if (
11c90 74 61 67 4e 61 6d 65 20 3d 3d 3d 20 27 2a 27 29 tagName === '*')
11ca0 20 7b 0a 20 20 20 20 2f 2f 20 67 65 74 20 61 6c {. // get al
11cb0 6c 20 63 75 73 74 6f 6d 20 74 61 67 73 0a 20 20 l custom tags.
11cc0 20 20 74 61 67 4e 61 6d 65 20 3d 20 61 6c 6c 54 tagName = allT
11cd0 61 67 73 20 7c 7c 20 73 65 6c 65 63 74 41 6c 6c ags || selectAll
11ce0 54 61 67 73 28 29 0a 20 20 20 20 2f 2f 20 69 66 Tags(). // if
11cf0 20 74 68 65 20 72 6f 6f 74 20 65 6c 73 20 69 74 the root els it
11d00 27 73 20 6a 75 73 74 20 61 20 73 69 6e 67 6c 65 's just a single
11d10 20 74 61 67 0a 20 20 20 20 69 66 20 28 65 6c 73 tag. if (els
11d20 2e 74 61 67 4e 61 6d 65 29 0a 20 20 20 20 20 20 .tagName).
11d30 65 6c 73 20 3d 20 24 24 28 74 61 67 4e 61 6d 65 els = $$(tagName
11d40 2c 20 65 6c 73 29 0a 20 20 20 20 65 6c 73 65 20 , els). else
11d50 7b 0a 20 20 20 20 20 20 2f 2f 20 73 65 6c 65 63 {. // selec
11d60 74 20 61 6c 6c 20 74 68 65 20 63 68 69 6c 64 72 t all the childr
11d70 65 6e 20 66 6f 72 20 61 6c 6c 20 74 68 65 20 64 en for all the d
11d80 69 66 66 65 72 65 6e 74 20 72 6f 6f 74 20 65 6c ifferent root el
11d90 65 6d 65 6e 74 73 0a 20 20 20 20 20 20 76 61 72 ements. var
11da0 20 6e 6f 64 65 4c 69 73 74 20 3d 20 5b 5d 0a 20 nodeList = [].
11db0 20 20 20 20 20 65 61 63 68 28 65 6c 73 2c 20 66 each(els, f
11dc0 75 6e 63 74 69 6f 6e 20 28 5f 65 6c 29 20 7b 0a unction (_el) {.
11dd0 20 20 20 20 20 20 20 20 6e 6f 64 65 4c 69 73 74 nodeList
11de0 2e 70 75 73 68 28 24 24 28 74 61 67 4e 61 6d 65 .push($$(tagName
11df0 2c 20 5f 65 6c 29 29 0a 20 20 20 20 20 20 7d 29 , _el)). })
11e00 0a 20 20 20 20 20 20 65 6c 73 20 3d 20 6e 6f 64 . els = nod
11e10 65 4c 69 73 74 0a 20 20 20 20 7d 0a 20 20 20 20 eList. }.
11e20 2f 2f 20 67 65 74 20 72 69 64 20 6f 66 20 74 68 // get rid of th
11e30 65 20 74 61 67 4e 61 6d 65 0a 20 20 20 20 74 61 e tagName. ta
11e40 67 4e 61 6d 65 20 3d 20 30 0a 20 20 7d 0a 0a 20 gName = 0. }..
11e50 20 70 75 73 68 54 61 67 73 28 65 6c 73 29 0a 0a pushTags(els)..
11e60 20 20 72 65 74 75 72 6e 20 74 61 67 73 0a 7d 0a return tags.}.
11e70 0a 2f 2a 2a 0a 20 2a 20 55 70 64 61 74 65 20 61 ./**. * Update a
11e80 6c 6c 20 74 68 65 20 74 61 67 73 20 69 6e 73 74 ll the tags inst
11e90 61 6e 63 65 73 20 63 72 65 61 74 65 64 0a 20 2a ances created. *
11ea0 20 40 72 65 74 75 72 6e 73 20 7b 20 41 72 72 61 @returns { Arra
11eb0 79 20 7d 20 61 6c 6c 20 74 68 65 20 74 61 67 73 y } all the tags
11ec0 20 69 6e 73 74 61 6e 63 65 73 0a 20 2a 2f 0a 72 instances. */.r
11ed0 69 6f 74 2e 75 70 64 61 74 65 20 3d 20 66 75 6e iot.update = fun
11ee0 63 74 69 6f 6e 28 29 20 7b 0a 20 20 72 65 74 75 ction() {. retu
11ef0 72 6e 20 65 61 63 68 28 5f 5f 76 69 72 74 75 61 rn each(__virtua
11f00 6c 44 6f 6d 2c 20 66 75 6e 63 74 69 6f 6e 28 74 lDom, function(t
11f10 61 67 29 20 7b 0a 20 20 20 20 74 61 67 2e 75 70 ag) {. tag.up
11f20 64 61 74 65 28 29 0a 20 20 7d 29 0a 7d 0a 0a 2f date(). }).}../
11f30 2a 2a 0a 20 2a 20 45 78 70 6f 72 74 20 74 68 65 **. * Export the
11f40 20 56 69 72 74 75 61 6c 20 44 4f 4d 0a 20 2a 2f Virtual DOM. */
11f50 0a 72 69 6f 74 2e 76 64 6f 6d 20 3d 20 5f 5f 76 .riot.vdom = __v
11f60 69 72 74 75 61 6c 44 6f 6d 0a 0a 2f 2a 2a 0a 20 irtualDom../**.
11f70 2a 20 45 78 70 6f 72 74 20 74 68 65 20 54 61 67 * Export the Tag
11f80 20 63 6f 6e 73 74 72 75 63 74 6f 72 0a 20 2a 2f constructor. */
11f90 0a 72 69 6f 74 2e 54 61 67 20 3d 20 54 61 67 0a .riot.Tag = Tag.
11fa0 20 20 2f 2f 20 73 75 70 70 6f 72 74 20 43 6f 6d // support Com
11fb0 6d 6f 6e 4a 53 2c 20 41 4d 44 20 26 20 62 72 6f monJS, AMD & bro
11fc0 77 73 65 72 0a 20 20 2f 2a 20 69 73 74 61 6e 62 wser. /* istanb
11fd0 75 6c 20 69 67 6e 6f 72 65 20 6e 65 78 74 20 2a ul ignore next *
11fe0 2f 0a 20 20 69 66 20 28 74 79 70 65 6f 66 20 65 /. if (typeof e
11ff0 78 70 6f 72 74 73 20 3d 3d 3d 20 54 5f 4f 42 4a xports === T_OBJ
12000 45 43 54 29 0a 20 20 20 20 6d 6f 64 75 6c 65 2e ECT). module.
12010 65 78 70 6f 72 74 73 20 3d 20 72 69 6f 74 0a 20 exports = riot.
12020 20 65 6c 73 65 20 69 66 20 28 74 79 70 65 6f 66 else if (typeof
12030 20 64 65 66 69 6e 65 20 3d 3d 3d 20 54 5f 46 55 define === T_FU
12040 4e 43 54 49 4f 4e 20 26 26 20 74 79 70 65 6f 66 NCTION && typeof
12050 20 64 65 66 69 6e 65 2e 61 6d 64 20 21 3d 3d 20 define.amd !==
12060 54 5f 55 4e 44 45 46 29 0a 20 20 20 20 64 65 66 T_UNDEF). def
12070 69 6e 65 28 66 75 6e 63 74 69 6f 6e 28 29 20 7b ine(function() {
12080 20 72 65 74 75 72 6e 20 72 69 6f 74 20 7d 29 0a return riot }).
12090 20 20 65 6c 73 65 0a 20 20 20 20 77 69 6e 64 6f else. windo
120a0 77 2e 72 69 6f 74 20 3d 20 72 69 6f 74 0a 0a 7d w.riot = riot..}
120b0 29 28 74 79 70 65 6f 66 20 77 69 6e 64 6f 77 20 )(typeof window
120c0 21 3d 20 27 75 6e 64 65 66 69 6e 65 64 27 20 3f != 'undefined' ?
120d0 20 77 69 6e 64 6f 77 20 3a 20 76 6f 69 64 20 30 window : void 0
120e0 29 3b 0a );.