0000: 69 6d 70 6f 72 74 20 6f 62 73 65 72 76 61 62 6c import observabl
0010: 65 20 66 72 6f 6d 20 27 72 69 6f 74 2d 6f 62 73 e from 'riot-obs
0020: 65 72 76 61 62 6c 65 27 0a 69 6d 70 6f 72 74 20 ervable'.import
0030: 63 6f 6d 70 69 6c 65 72 20 66 72 6f 6d 20 27 72 compiler from 'r
0040: 69 6f 74 2d 63 6f 6d 70 69 6c 65 72 27 0a 69 6d iot-compiler'.im
0050: 70 6f 72 74 20 7b 20 54 5f 53 54 52 49 4e 47 20 port { T_STRING
0060: 7d 20 66 72 6f 6d 20 27 2e 2f 2e 2e 2f 63 6f 6d } from './../com
0070: 6d 6f 6e 2f 67 6c 6f 62 61 6c 2d 76 61 72 69 61 mon/global-varia
0080: 62 6c 65 73 27 0a 0a 69 6d 70 6f 72 74 20 69 73 bles'..import is
0090: 41 72 72 61 79 20 66 72 6f 6d 20 27 2e 2f 2e 2e Array from './..
00a0: 2f 63 6f 6d 6d 6f 6e 2f 75 74 69 6c 2f 63 68 65 /common/util/che
00b0: 63 6b 73 2f 69 73 2d 61 72 72 61 79 27 0a 69 6d cks/is-array'.im
00c0: 70 6f 72 74 20 69 73 4f 62 6a 65 63 74 20 66 72 port isObject fr
00d0: 6f 6d 20 27 2e 2f 2e 2e 2f 63 6f 6d 6d 6f 6e 2f om './../common/
00e0: 75 74 69 6c 2f 63 68 65 63 6b 73 2f 69 73 2d 6f util/checks/is-o
00f0: 62 6a 65 63 74 27 0a 69 6d 70 6f 72 74 20 69 73 bject'.import is
0100: 46 75 6e 63 74 69 6f 6e 20 66 72 6f 6d 20 27 2e Function from '.
0110: 2f 2e 2e 2f 63 6f 6d 6d 6f 6e 2f 75 74 69 6c 2f /../common/util/
0120: 63 68 65 63 6b 73 2f 69 73 2d 66 75 6e 63 74 69 checks/is-functi
0130: 6f 6e 27 0a 0a 69 6d 70 6f 72 74 20 65 78 74 65 on'..import exte
0140: 6e 64 20 66 72 6f 6d 20 27 2e 2f 2e 2e 2f 63 6f nd from './../co
0150: 6d 6d 6f 6e 2f 75 74 69 6c 2f 6d 69 73 63 2f 65 mmon/util/misc/e
0160: 78 74 65 6e 64 27 0a 0a 69 6d 70 6f 72 74 20 24 xtend'..import $
0170: 24 20 66 72 6f 6d 20 27 2e 2f 2e 2e 2f 63 6f 6d $ from './../com
0180: 6d 6f 6e 2f 75 74 69 6c 2f 64 6f 6d 2f 24 24 27 mon/util/dom/$$'
0190: 0a 69 6d 70 6f 72 74 20 67 65 74 41 74 74 72 69 .import getAttri
01a0: 62 75 74 65 20 66 72 6f 6d 20 27 2e 2f 2e 2e 2f bute from './../
01b0: 63 6f 6d 6d 6f 6e 2f 75 74 69 6c 2f 64 6f 6d 2f common/util/dom/
01c0: 67 65 74 2d 61 74 74 72 69 62 75 74 65 27 0a 69 get-attribute'.i
01d0: 6d 70 6f 72 74 20 6d 61 6b 65 45 6c 65 6d 65 6e mport makeElemen
01e0: 74 20 66 72 6f 6d 20 27 2e 2f 2e 2e 2f 63 6f 6d t from './../com
01f0: 6d 6f 6e 2f 75 74 69 6c 2f 64 6f 6d 2f 6d 61 6b mon/util/dom/mak
0200: 65 2d 65 6c 65 6d 65 6e 74 27 0a 0a 76 61 72 0a e-element'..var.
0210: 20 20 70 72 6f 6d 69 73 65 2c 20 20 20 20 2f 2f promise, //
0220: 20 65 6d 69 74 73 20 74 68 65 20 27 72 65 61 64 emits the 'read
0230: 79 27 20 65 76 65 6e 74 20 61 6e 64 20 72 75 6e y' event and run
0240: 73 20 74 68 65 20 66 69 72 73 74 20 63 61 6c 6c s the first call
0250: 62 61 63 6b 0a 20 20 72 65 61 64 79 20 20 20 20 back. ready
0260: 20 20 20 2f 2f 20 61 6c 6c 20 74 68 65 20 73 63 // all the sc
0270: 72 69 70 74 73 20 77 65 72 65 20 63 6f 6d 70 69 ripts were compi
0280: 6c 65 64 3f 0a 0a 2f 2f 20 67 65 74 73 20 74 68 led?..// gets th
0290: 65 20 73 6f 75 72 63 65 20 6f 66 20 61 6e 20 65 e source of an e
02a0: 78 74 65 72 6e 61 6c 20 74 61 67 20 77 69 74 68 xternal tag with
02b0: 20 61 6e 20 61 73 79 6e 63 20 63 61 6c 6c 0a 66 an async call.f
02c0: 75 6e 63 74 69 6f 6e 20 47 45 54 20 28 75 72 6c unction GET (url
02d0: 2c 20 66 6e 2c 20 6f 70 74 73 29 20 7b 0a 20 20 , fn, opts) {.
02e0: 76 61 72 20 72 65 71 20 3d 20 6e 65 77 20 58 4d var req = new XM
02f0: 4c 48 74 74 70 52 65 71 75 65 73 74 28 29 0a 0a LHttpRequest()..
0300: 20 20 72 65 71 2e 6f 6e 72 65 61 64 79 73 74 61 req.onreadysta
0310: 74 65 63 68 61 6e 67 65 20 3d 20 66 75 6e 63 74 techange = funct
0320: 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 69 66 20 ion () {. if
0330: 28 72 65 71 2e 72 65 61 64 79 53 74 61 74 65 20 (req.readyState
0340: 3d 3d 3d 20 34 29 20 7b 0a 20 20 20 20 20 20 69 === 4) {. i
0350: 66 20 28 72 65 71 2e 73 74 61 74 75 73 20 3d 3d f (req.status ==
0360: 3d 20 32 30 30 20 7c 7c 20 21 72 65 71 2e 73 74 = 200 || !req.st
0370: 61 74 75 73 20 26 26 20 72 65 71 2e 72 65 73 70 atus && req.resp
0380: 6f 6e 73 65 54 65 78 74 2e 6c 65 6e 67 74 68 29 onseText.length)
0390: 20 7b 0a 20 20 20 20 20 20 20 20 66 6e 28 72 65 {. fn(re
03a0: 71 2e 72 65 73 70 6f 6e 73 65 54 65 78 74 2c 20 q.responseText,
03b0: 6f 70 74 73 2c 20 75 72 6c 29 0a 20 20 20 20 20 opts, url).
03c0: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 } else {.
03d0: 20 20 63 6f 6d 70 69 6c 65 2e 65 72 72 6f 72 28 compile.error(
03e0: 60 22 24 7b 20 75 72 6c 20 7d 22 20 6e 6f 74 20 `"${ url }" not
03f0: 66 6f 75 6e 64 60 29 0a 20 20 20 20 20 20 7d 0a found`). }.
0400: 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 72 65 71 }. }.. req
0410: 2e 6f 6e 65 72 72 6f 72 20 3d 20 65 20 3d 3e 20 .onerror = e =>
0420: 63 6f 6d 70 69 6c 65 2e 65 72 72 6f 72 28 65 29 compile.error(e)
0430: 0a 0a 20 20 72 65 71 2e 6f 70 65 6e 28 27 47 45 .. req.open('GE
0440: 54 27 2c 20 75 72 6c 2c 20 74 72 75 65 29 0a 20 T', url, true).
0450: 20 72 65 71 2e 73 65 6e 64 28 27 27 29 0a 7d 0a req.send('').}.
0460: 0a 2f 2f 20 65 76 61 6c 75 61 74 65 73 20 61 20 .// evaluates a
0470: 63 6f 6d 70 69 6c 65 64 20 74 61 67 20 77 69 74 compiled tag wit
0480: 68 69 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 63 hin the global c
0490: 6f 6e 74 65 78 74 0a 66 75 6e 63 74 69 6f 6e 20 ontext.function
04a0: 67 6c 6f 62 61 6c 45 76 61 6c 20 28 6a 73 2c 20 globalEval (js,
04b0: 75 72 6c 29 20 7b 0a 20 20 69 66 20 28 74 79 70 url) {. if (typ
04c0: 65 6f 66 20 6a 73 20 3d 3d 3d 20 54 5f 53 54 52 eof js === T_STR
04d0: 49 4e 47 29 20 7b 0a 20 20 20 20 76 61 72 0a 20 ING) {. var.
04e0: 20 20 20 20 20 6e 6f 64 65 20 3d 20 6d 61 6b 65 node = make
04f0: 45 6c 65 6d 65 6e 74 28 27 73 63 72 69 70 74 27 Element('script'
0500: 29 2c 0a 20 20 20 20 20 20 72 6f 6f 74 20 3d 20 ),. root =
0510: 64 6f 63 75 6d 65 6e 74 2e 64 6f 63 75 6d 65 6e document.documen
0520: 74 45 6c 65 6d 65 6e 74 0a 0a 20 20 20 20 2f 2f tElement.. //
0530: 20 6d 61 6b 65 20 74 68 65 20 73 6f 75 72 63 65 make the source
0540: 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 74 68 available in th
0550: 65 20 22 28 6e 6f 20 64 6f 6d 61 69 6e 29 22 20 e "(no domain)"
0560: 74 61 62 0a 20 20 20 20 2f 2f 20 6f 66 20 43 68 tab. // of Ch
0570: 72 6f 6d 65 20 44 65 76 54 6f 6f 6c 73 2c 20 77 rome DevTools, w
0580: 69 74 68 20 61 20 2e 6a 73 20 65 78 74 65 6e 73 ith a .js extens
0590: 69 6f 6e 0a 20 20 20 20 69 66 20 28 75 72 6c 29 ion. if (url)
05a0: 20 6a 73 20 2b 3d 20 27 5c 6e 2f 2f 23 20 73 6f js += '\n//# so
05b0: 75 72 63 65 55 52 4c 3d 27 20 2b 20 75 72 6c 20 urceURL=' + url
05c0: 2b 20 27 2e 6a 73 27 0a 0a 20 20 20 20 6e 6f 64 + '.js'.. nod
05d0: 65 2e 74 65 78 74 20 3d 20 6a 73 0a 20 20 20 20 e.text = js.
05e0: 72 6f 6f 74 2e 61 70 70 65 6e 64 43 68 69 6c 64 root.appendChild
05f0: 28 6e 6f 64 65 29 0a 20 20 20 20 72 6f 6f 74 2e (node). root.
0600: 72 65 6d 6f 76 65 43 68 69 6c 64 28 6e 6f 64 65 removeChild(node
0610: 29 0a 20 20 7d 0a 7d 0a 0a 2f 2f 20 63 6f 6d 70 ). }.}..// comp
0620: 69 6c 65 73 20 61 6c 6c 20 74 68 65 20 69 6e 74 iles all the int
0630: 65 72 6e 61 6c 20 61 6e 64 20 65 78 74 65 72 6e ernal and extern
0640: 61 6c 20 74 61 67 73 20 6f 6e 20 74 68 65 20 70 al tags on the p
0650: 61 67 65 0a 66 75 6e 63 74 69 6f 6e 20 63 6f 6d age.function com
0660: 70 69 6c 65 53 63 72 69 70 74 73 20 28 66 6e 2c pileScripts (fn,
0670: 20 78 6f 70 74 29 20 7b 0a 20 20 76 61 72 0a 20 xopt) {. var.
0680: 20 20 20 73 63 72 69 70 74 73 20 3d 20 24 24 28 scripts = $$(
0690: 27 73 63 72 69 70 74 5b 74 79 70 65 3d 22 72 69 'script[type="ri
06a0: 6f 74 2f 74 61 67 22 5d 27 29 2c 0a 20 20 20 20 ot/tag"]'),.
06b0: 73 63 72 69 70 74 73 41 6d 6f 75 6e 74 20 3d 20 scriptsAmount =
06c0: 73 63 72 69 70 74 73 2e 6c 65 6e 67 74 68 0a 0a scripts.length..
06d0: 20 20 66 75 6e 63 74 69 6f 6e 20 64 6f 6e 65 28 function done(
06e0: 29 20 7b 0a 20 20 20 20 70 72 6f 6d 69 73 65 2e ) {. promise.
06f0: 74 72 69 67 67 65 72 28 27 72 65 61 64 79 27 29 trigger('ready')
0700: 0a 20 20 20 20 72 65 61 64 79 20 3d 20 74 72 75 . ready = tru
0710: 65 0a 20 20 20 20 69 66 20 28 66 6e 29 20 66 6e e. if (fn) fn
0720: 28 29 0a 20 20 7d 0a 0a 20 20 66 75 6e 63 74 69 (). }.. functi
0730: 6f 6e 20 63 6f 6d 70 69 6c 65 54 61 67 20 28 73 on compileTag (s
0740: 72 63 2c 20 6f 70 74 73 2c 20 75 72 6c 29 20 7b rc, opts, url) {
0750: 0a 20 20 20 20 76 61 72 20 63 6f 64 65 20 3d 20 . var code =
0760: 63 6f 6d 70 69 6c 65 72 2e 63 6f 6d 70 69 6c 65 compiler.compile
0770: 28 73 72 63 2c 20 6f 70 74 73 2c 20 75 72 6c 29 (src, opts, url)
0780: 0a 0a 20 20 20 20 67 6c 6f 62 61 6c 45 76 61 6c .. globalEval
0790: 28 63 6f 64 65 2c 20 75 72 6c 29 0a 20 20 20 20 (code, url).
07a0: 69 66 20 28 21 2d 2d 73 63 72 69 70 74 73 41 6d if (!--scriptsAm
07b0: 6f 75 6e 74 29 20 64 6f 6e 65 28 29 0a 20 20 7d ount) done(). }
07c0: 0a 0a 20 20 69 66 20 28 21 73 63 72 69 70 74 73 .. if (!scripts
07d0: 41 6d 6f 75 6e 74 29 20 64 6f 6e 65 28 29 0a 20 Amount) done().
07e0: 20 65 6c 73 65 20 7b 0a 20 20 20 20 66 6f 72 20 else {. for
07f0: 28 76 61 72 20 69 20 3d 20 30 3b 20 69 20 3c 20 (var i = 0; i <
0800: 73 63 72 69 70 74 73 2e 6c 65 6e 67 74 68 3b 20 scripts.length;
0810: 2b 2b 69 29 20 7b 0a 20 20 20 20 20 20 76 61 72 ++i) {. var
0820: 0a 20 20 20 20 20 20 20 20 73 63 72 69 70 74 20 . script
0830: 3d 20 73 63 72 69 70 74 73 5b 69 5d 2c 0a 20 20 = scripts[i],.
0840: 20 20 20 20 20 20 6f 70 74 73 20 3d 20 65 78 74 opts = ext
0850: 65 6e 64 28 7b 74 65 6d 70 6c 61 74 65 3a 20 67 end({template: g
0860: 65 74 41 74 74 72 69 62 75 74 65 28 73 63 72 69 etAttribute(scri
0870: 70 74 2c 20 27 74 65 6d 70 6c 61 74 65 27 29 7d pt, 'template')}
0880: 2c 20 78 6f 70 74 29 2c 0a 20 20 20 20 20 20 20 , xopt),.
0890: 20 75 72 6c 20 3d 20 67 65 74 41 74 74 72 69 62 url = getAttrib
08a0: 75 74 65 28 73 63 72 69 70 74 2c 20 27 73 72 63 ute(script, 'src
08b0: 27 29 20 7c 7c 20 67 65 74 41 74 74 72 69 62 75 ') || getAttribu
08c0: 74 65 28 73 63 72 69 70 74 2c 20 27 64 61 74 61 te(script, 'data
08d0: 2d 73 72 63 27 29 0a 0a 20 20 20 20 20 20 75 72 -src').. ur
08e0: 6c 20 3f 20 47 45 54 28 75 72 6c 2c 20 63 6f 6d l ? GET(url, com
08f0: 70 69 6c 65 54 61 67 2c 20 6f 70 74 73 29 20 3a pileTag, opts) :
0900: 20 63 6f 6d 70 69 6c 65 54 61 67 28 73 63 72 69 compileTag(scri
0910: 70 74 2e 69 6e 6e 65 72 48 54 4d 4c 2c 20 6f 70 pt.innerHTML, op
0920: 74 73 29 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a ts). }. }.}.
0930: 0a 65 78 70 6f 72 74 20 63 6f 6e 73 74 20 70 61 .export const pa
0940: 72 73 65 72 73 20 3d 20 63 6f 6d 70 69 6c 65 72 rsers = compiler
0950: 2e 70 61 72 73 65 72 73 0a 0a 2f 2a 0a 20 20 43 .parsers../*. C
0960: 6f 6d 70 69 6c 61 74 69 6f 6e 20 66 6f 72 20 74 ompilation for t
0970: 68 65 20 62 72 6f 77 73 65 72 0a 2a 2f 0a 65 78 he browser.*/.ex
0980: 70 6f 72 74 20 66 75 6e 63 74 69 6f 6e 20 63 6f port function co
0990: 6d 70 69 6c 65 20 28 61 72 67 2c 20 66 6e 2c 20 mpile (arg, fn,
09a0: 6f 70 74 73 29 20 7b 0a 0a 20 20 69 66 20 28 74 opts) {.. if (t
09b0: 79 70 65 6f 66 20 61 72 67 20 3d 3d 3d 20 54 5f ypeof arg === T_
09c0: 53 54 52 49 4e 47 29 20 7b 0a 0a 20 20 20 20 2f STRING) {.. /
09d0: 2f 20 32 6e 64 20 70 61 72 61 6d 65 74 65 72 20 / 2nd parameter
09e0: 69 73 20 6f 70 74 69 6f 6e 61 6c 2c 20 62 75 74 is optional, but
09f0: 20 63 61 6e 20 62 65 20 6e 75 6c 6c 0a 20 20 20 can be null.
0a00: 20 69 66 20 28 69 73 4f 62 6a 65 63 74 28 66 6e if (isObject(fn
0a10: 29 29 20 7b 0a 20 20 20 20 20 20 6f 70 74 73 20 )) {. opts
0a20: 3d 20 66 6e 0a 20 20 20 20 20 20 66 6e 20 3d 20 = fn. fn =
0a30: 66 61 6c 73 65 0a 20 20 20 20 7d 0a 0a 20 20 20 false. }..
0a40: 20 2f 2f 20 60 72 69 6f 74 2e 63 6f 6d 70 69 6c // `riot.compil
0a50: 65 28 74 61 67 20 5b 2c 20 63 61 6c 6c 62 61 63 e(tag [, callbac
0a60: 6b 20 7c 20 74 72 75 65 5d 5b 2c 20 6f 70 74 69 k | true][, opti
0a70: 6f 6e 73 5d 29 60 0a 20 20 20 20 69 66 20 28 2f ons])`. if (/
0a80: 5e 5c 73 2a 3c 2f 6d 2e 74 65 73 74 28 61 72 67 ^\s*</m.test(arg
0a90: 29 29 20 7b 0a 20 20 20 20 20 20 76 61 72 20 6a )) {. var j
0aa0: 73 20 3d 20 63 6f 6d 70 69 6c 65 72 2e 63 6f 6d s = compiler.com
0ab0: 70 69 6c 65 28 61 72 67 2c 20 6f 70 74 73 29 0a pile(arg, opts).
0ac0: 20 20 20 20 20 20 69 66 20 28 66 6e 20 21 3d 3d if (fn !==
0ad0: 20 74 72 75 65 29 20 67 6c 6f 62 61 6c 45 76 61 true) globalEva
0ae0: 6c 28 6a 73 29 0a 20 20 20 20 20 20 69 66 20 28 l(js). if (
0af0: 69 73 46 75 6e 63 74 69 6f 6e 28 66 6e 29 29 20 isFunction(fn))
0b00: 66 6e 28 6a 73 2c 20 61 72 67 2c 20 6f 70 74 73 fn(js, arg, opts
0b10: 29 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6a ). return j
0b20: 73 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 20 s. }.. //
0b30: 60 72 69 6f 74 2e 63 6f 6d 70 69 6c 65 28 75 72 `riot.compile(ur
0b40: 6c 20 5b 2c 20 63 61 6c 6c 62 61 63 6b 5d 5b 2c l [, callback][,
0b50: 20 6f 70 74 69 6f 6e 73 5d 29 60 0a 20 20 20 20 options])`.
0b60: 47 45 54 28 61 72 67 2c 20 66 75 6e 63 74 69 6f GET(arg, functio
0b70: 6e 20 28 73 74 72 2c 20 6f 70 74 73 2c 20 75 72 n (str, opts, ur
0b80: 6c 29 20 7b 0a 20 20 20 20 20 20 76 61 72 20 6a l) {. var j
0b90: 73 20 3d 20 63 6f 6d 70 69 6c 65 72 2e 63 6f 6d s = compiler.com
0ba0: 70 69 6c 65 28 73 74 72 2c 20 6f 70 74 73 2c 20 pile(str, opts,
0bb0: 75 72 6c 29 0a 20 20 20 20 20 20 67 6c 6f 62 61 url). globa
0bc0: 6c 45 76 61 6c 28 6a 73 2c 20 75 72 6c 29 0a 20 lEval(js, url).
0bd0: 20 20 20 20 20 69 66 20 28 66 6e 29 20 66 6e 28 if (fn) fn(
0be0: 6a 73 2c 20 73 74 72 2c 20 6f 70 74 73 29 0a 20 js, str, opts).
0bf0: 20 20 20 7d 2c 20 6f 70 74 73 29 0a 0a 20 20 7d }, opts).. }
0c00: 20 65 6c 73 65 20 69 66 20 28 69 73 41 72 72 61 else if (isArra
0c10: 79 28 61 72 67 29 29 20 7b 0a 20 20 20 20 76 61 y(arg)) {. va
0c20: 72 20 69 20 3d 20 61 72 67 2e 6c 65 6e 67 74 68 r i = arg.length
0c30: 0a 20 20 20 20 2f 2f 20 60 72 69 6f 74 2e 63 6f . // `riot.co
0c40: 6d 70 69 6c 65 28 5b 75 72 6c 73 4c 69 73 74 5d mpile([urlsList]
0c50: 20 5b 2c 20 63 61 6c 6c 62 61 63 6b 5d 5b 2c 20 [, callback][,
0c60: 6f 70 74 69 6f 6e 73 5d 29 60 0a 20 20 20 20 61 options])`. a
0c70: 72 67 2e 66 6f 72 45 61 63 68 28 66 75 6e 63 74 rg.forEach(funct
0c80: 69 6f 6e 28 73 74 72 29 20 7b 0a 20 20 20 20 20 ion(str) {.
0c90: 20 47 45 54 28 73 74 72 2c 20 66 75 6e 63 74 69 GET(str, functi
0ca0: 6f 6e 20 28 73 74 72 2c 20 6f 70 74 73 2c 20 75 on (str, opts, u
0cb0: 72 6c 29 20 7b 0a 20 20 20 20 20 20 20 20 76 61 rl) {. va
0cc0: 72 20 6a 73 20 3d 20 63 6f 6d 70 69 6c 65 72 2e r js = compiler.
0cd0: 63 6f 6d 70 69 6c 65 28 73 74 72 2c 20 6f 70 74 compile(str, opt
0ce0: 73 2c 20 75 72 6c 29 0a 20 20 20 20 20 20 20 20 s, url).
0cf0: 67 6c 6f 62 61 6c 45 76 61 6c 28 6a 73 2c 20 75 globalEval(js, u
0d00: 72 6c 29 0a 20 20 20 20 20 20 20 20 69 20 2d 2d rl). i --
0d10: 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 69 20 . if (!i
0d20: 26 26 20 66 6e 29 20 66 6e 28 6a 73 2c 20 73 74 && fn) fn(js, st
0d30: 72 2c 20 6f 70 74 73 29 0a 20 20 20 20 20 20 7d r, opts). }
0d40: 2c 20 6f 70 74 73 29 0a 20 20 20 20 7d 29 0a 20 , opts). }).
0d50: 20 7d 20 65 6c 73 65 20 7b 0a 0a 20 20 20 20 2f } else {.. /
0d60: 2f 20 60 72 69 6f 74 2e 63 6f 6d 70 69 6c 65 28 / `riot.compile(
0d70: 5b 63 61 6c 6c 62 61 63 6b 5d 5b 2c 20 6f 70 74 [callback][, opt
0d80: 69 6f 6e 73 5d 29 60 0a 20 20 20 20 69 66 20 28 ions])`. if (
0d90: 69 73 46 75 6e 63 74 69 6f 6e 28 61 72 67 29 29 isFunction(arg))
0da0: 20 7b 0a 20 20 20 20 20 20 6f 70 74 73 20 3d 20 {. opts =
0db0: 66 6e 0a 20 20 20 20 20 20 66 6e 20 3d 20 61 72 fn. fn = ar
0dc0: 67 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 g. } else {.
0dd0: 20 20 20 20 20 6f 70 74 73 20 3d 20 61 72 67 0a opts = arg.
0de0: 20 20 20 20 20 20 66 6e 20 3d 20 75 6e 64 65 66 fn = undef
0df0: 69 6e 65 64 0a 20 20 20 20 7d 0a 0a 20 20 20 20 ined. }..
0e00: 69 66 20 28 72 65 61 64 79 29 20 7b 0a 20 20 20 if (ready) {.
0e10: 20 20 20 72 65 74 75 72 6e 20 66 6e 20 26 26 20 return fn &&
0e20: 66 6e 28 29 0a 20 20 20 20 7d 0a 0a 20 20 20 20 fn(). }..
0e30: 69 66 20 28 70 72 6f 6d 69 73 65 29 20 7b 0a 20 if (promise) {.
0e40: 20 20 20 20 20 69 66 20 28 66 6e 29 20 70 72 6f if (fn) pro
0e50: 6d 69 73 65 2e 6f 6e 28 27 72 65 61 64 79 27 2c mise.on('ready',
0e60: 20 66 6e 29 0a 0a 20 20 20 20 7d 20 65 6c 73 65 fn).. } else
0e70: 20 7b 0a 20 20 20 20 20 20 70 72 6f 6d 69 73 65 {. promise
0e80: 20 3d 20 6f 62 73 65 72 76 61 62 6c 65 28 29 0a = observable().
0e90: 20 20 20 20 20 20 63 6f 6d 70 69 6c 65 53 63 72 compileScr
0ea0: 69 70 74 73 28 66 6e 2c 20 6f 70 74 73 29 0a 20 ipts(fn, opts).
0eb0: 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2f 20 69 }. }.}..// i
0ec0: 74 20 63 61 6e 20 62 65 20 72 65 77 72 69 74 74 t can be rewritt
0ed0: 65 6e 20 62 79 20 74 68 65 20 75 73 65 72 20 74 en by the user t
0ee0: 6f 20 68 61 6e 64 6c 65 20 61 6c 6c 20 74 68 65 o handle all the
0ef0: 20 63 6f 6d 70 69 6c 65 72 20 65 72 72 6f 72 73 compiler errors
0f00: 0a 63 6f 6d 70 69 6c 65 2e 65 72 72 6f 72 20 3d .compile.error =
0f10: 20 28 65 29 20 3d 3e 20 7b 0a 20 20 74 68 72 6f (e) => {. thro
0f20: 77 20 6e 65 77 20 45 72 72 6f 72 28 65 29 0a 7d w new Error(e).}
0f30: 0a .