⌈⌋ ⎇ branch:  Bitrhythm


Hex Artifact Content

Artifact a9cac12593347c2df2af1b2c71dbac794785bc07bd68479ad4812eb2b4025f1a:


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                                               .