⌈⌋ ⎇ branch:  Bitrhythm


Hex Artifact Content

Artifact 6064f0dbb1cf2b4693aa9c578348f0edebbc42b5f56790ea47cdf9918c0fb199:


0000: 0a 2f 2f 20 61 6c 6c 6f 77 20 74 6f 20 72 65 71  .// allow to req
0010: 75 69 72 65 28 27 72 69 6f 74 27 29 0a 63 6f 6e  uire('riot').con
0020: 73 74 0a 20 20 70 61 74 68 20 3d 20 72 65 71 75  st.  path = requ
0030: 69 72 65 28 27 70 61 74 68 27 29 2c 0a 20 20 66  ire('path'),.  f
0040: 73 20 3d 20 72 65 71 75 69 72 65 28 27 66 73 27  s = require('fs'
0050: 29 2c 0a 20 20 68 61 73 52 69 6f 74 50 61 74 68  ),.  hasRiotPath
0060: 20 3d 20 21 21 70 72 6f 63 65 73 73 2e 65 6e 76   = !!process.env
0070: 2e 52 49 4f 54 2c 0a 20 20 72 69 6f 74 50 61 74  .RIOT,.  riotPat
0080: 68 20 3d 20 70 61 74 68 2e 6e 6f 72 6d 61 6c 69  h = path.normali
0090: 7a 65 28 70 72 6f 63 65 73 73 2e 65 6e 76 2e 52  ze(process.env.R
00a0: 49 4f 54 20 7c 7c 20 70 61 74 68 2e 6a 6f 69 6e  IOT || path.join
00b0: 28 27 2e 2e 27 2c 20 27 2e 2e 27 2c 20 27 72 69  ('..', '..', 'ri
00c0: 6f 74 27 29 29 2c 0a 20 20 72 69 6f 74 20 3d 20  ot')),.  riot = 
00d0: 72 65 71 75 69 72 65 28 72 69 6f 74 50 61 74 68  require(riotPath
00e0: 29 2c 0a 20 20 2f 2f 20 73 69 6d 70 6c 65 2d 64  ),.  // simple-d
00f0: 6f 6d 20 68 65 6c 70 65 72 0a 20 20 73 64 6f 6d  om helper.  sdom
0100: 20 3d 20 72 65 71 75 69 72 65 28 27 2e 2f 73 64   = require('./sd
0110: 6f 6d 27 29 2c 0a 20 20 4d 6f 64 75 6c 65 20 3d  om'),.  Module =
0120: 20 72 65 71 75 69 72 65 28 27 6d 6f 64 75 6c 65   require('module
0130: 27 29 2c 0a 20 20 63 6f 6d 70 69 6c 65 72 20 3d  '),.  compiler =
0140: 20 72 65 71 75 69 72 65 28 27 72 69 6f 74 2d 63   require('riot-c
0150: 6f 6d 70 69 6c 65 72 27 29 0a 0a 2f 2f 20 66 69  ompiler')..// fi
0160: 78 20 23 32 32 32 35 0a 2f 2f 20 72 6f 6c 6c 75  x #2225.// rollu
0170: 70 20 63 6f 6e 73 69 64 65 72 73 20 74 68 65 20  p considers the 
0180: 72 69 6f 74 2e 64 65 66 61 75 6c 74 20 6b 65 79  riot.default key
0190: 20 61 73 20 64 65 66 61 75 6c 74 20 65 78 70 6f   as default expo
01a0: 72 74 20 76 61 6c 75 65 20 69 6e 73 74 65 61 64  rt value instead
01b0: 20 6f 66 20 77 68 61 74 20 77 65 20 65 78 70 6f   of what we expo
01c0: 72 74 20 68 65 72 65 0a 64 65 6c 65 74 65 20 72  rt here.delete r
01d0: 69 6f 74 2e 64 65 66 61 75 6c 74 0a 0a 2f 2f 20  iot.default..// 
01e0: 74 69 6d 65 20 72 69 6f 74 20 73 68 6f 75 6c 64  time riot should
01f0: 20 77 61 69 74 20 62 65 66 6f 72 65 20 74 68 72   wait before thr
0200: 6f 77 69 6e 67 20 64 75 72 69 6e 67 20 61 6e 20  owing during an 
0210: 61 73 79 6e 63 20 72 65 6e 64 65 72 69 6e 67 0a  async rendering.
0220: 72 69 6f 74 2e 73 65 74 74 69 6e 67 73 2e 61 73  riot.settings.as
0230: 79 6e 63 52 65 6e 64 65 72 54 69 6d 65 6f 75 74  yncRenderTimeout
0240: 20 3d 20 31 30 30 30 0a 0a 2f 2a 2a 0a 20 2a 20   = 1000../**. * 
0250: 46 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 77 69  Function that wi
0260: 6c 6c 20 62 65 20 75 73 65 64 20 62 79 20 72 69  ll be used by ri
0270: 6f 74 2e 72 65 71 75 69 72 65 20 61 6e 64 20 62  ot.require and b
0280: 79 20 72 65 71 75 69 72 65 28 27 73 6f 6d 65 2e  y require('some.
0290: 74 61 67 27 29 0a 20 2a 20 40 70 61 72 61 6d 20  tag'). * @param 
02a0: 20 20 7b 20 53 74 72 69 6e 67 20 7d 20 66 69 6c    { String } fil
02b0: 65 6e 61 6d 65 20 2d 20 70 61 74 68 20 74 6f 20  ename - path to 
02c0: 74 68 65 20 66 69 6c 65 20 74 6f 20 6c 6f 61 64  the file to load
02d0: 20 61 6e 64 20 63 6f 6d 70 69 6c 65 0a 20 2a 20   and compile. * 
02e0: 40 70 61 72 61 6d 20 20 20 7b 20 4f 62 6a 65 63  @param   { Objec
02f0: 74 20 7d 20 6f 70 74 73 20 20 20 20 20 2d 20 63  t } opts     - c
0300: 6f 6d 70 69 6c 65 72 20 6f 70 74 69 6f 6e 73 0a  ompiler options.
0310: 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 4f 62   * @param   { Ob
0320: 6a 65 63 74 20 7d 20 63 6f 6e 74 65 78 74 20 20  ject } context  
0330: 2d 20 63 6f 6e 74 65 78 74 20 77 68 65 72 65 20  - context where 
0340: 74 68 65 20 74 61 67 20 77 69 6c 6c 20 62 65 20  the tag will be 
0350: 6d 6f 75 6e 74 65 64 20 28 4d 6f 64 75 6c 65 29  mounted (Module)
0360: 0a 20 2a 2f 0a 66 75 6e 63 74 69 6f 6e 20 6c 6f  . */.function lo
0370: 61 64 41 6e 64 43 6f 6d 70 69 6c 65 28 66 69 6c  adAndCompile(fil
0380: 65 6e 61 6d 65 2c 20 6f 70 74 73 2c 20 63 6f 6e  ename, opts, con
0390: 74 65 78 74 29 20 7b 0a 20 20 63 6f 6e 73 74 20  text) {.  const 
03a0: 73 72 63 20 3d 20 63 6f 6d 70 69 6c 65 72 2e 63  src = compiler.c
03b0: 6f 6d 70 69 6c 65 28 66 73 2e 72 65 61 64 46 69  ompile(fs.readFi
03c0: 6c 65 53 79 6e 63 28 66 69 6c 65 6e 61 6d 65 2c  leSync(filename,
03d0: 20 27 75 74 66 38 27 29 2c 20 6f 70 74 73 29 0a   'utf8'), opts).
03e0: 20 20 63 6f 6e 73 74 20 70 72 65 54 61 67 20 3d    const preTag =
03f0: 20 73 72 63 2e 73 75 62 73 74 72 69 6e 67 28 30   src.substring(0
0400: 2c 20 73 72 63 2e 69 6e 64 65 78 4f 66 28 27 72  , src.indexOf('r
0410: 69 6f 74 2e 74 61 67 27 29 29 0a 20 20 63 6f 6e  iot.tag')).  con
0420: 73 74 20 74 61 67 44 65 66 69 6e 69 74 69 6f 6e  st tagDefinition
0430: 20 3d 20 73 72 63 2e 73 75 62 73 74 72 69 6e 67   = src.substring
0440: 28 73 72 63 2e 69 6e 64 65 78 4f 66 28 27 72 69  (src.indexOf('ri
0450: 6f 74 2e 74 61 67 27 29 29 0a 0a 20 20 2f 2f 20  ot.tag'))..  // 
0460: 68 65 72 65 20 77 65 20 77 69 6c 6c 20 75 73 65  here we will use
0470: 20 74 65 6d 70 6c 61 74 65 20 73 74 72 69 6e 67   template string
0480: 73 20 69 6e 20 72 69 6f 74 40 33 2e 30 2e 30 0a  s in riot@3.0.0.
0490: 20 20 63 6f 6e 74 65 78 74 2e 5f 63 6f 6d 70 69    context._compi
04a0: 6c 65 28 60 0a 20 20 20 20 76 61 72 20 72 69 6f  le(`.    var rio
04b0: 74 20 3d 20 72 65 71 75 69 72 65 28 27 24 7b 20  t = require('${ 
04c0: 68 61 73 52 69 6f 74 50 61 74 68 20 3f 20 72 69  hasRiotPath ? ri
04d0: 6f 74 50 61 74 68 20 3a 20 27 72 69 6f 74 27 20  otPath : 'riot' 
04e0: 7d 27 29 0a 20 20 20 20 24 7b 20 70 72 65 54 61  }').    ${ preTa
04f0: 67 20 7d 0a 20 20 20 20 6d 6f 64 75 6c 65 2e 65  g }.    module.e
0500: 78 70 6f 72 74 73 20 3d 20 24 7b 20 74 61 67 44  xports = ${ tagD
0510: 65 66 69 6e 69 74 69 6f 6e 20 7d 0a 20 20 60 2c  efinition }.  `,
0520: 20 66 69 6c 65 6e 61 6d 65 29 0a 7d 0a 0a 2f 2a   filename).}../*
0530: 2a 0a 20 2a 20 45 6e 61 62 6c 65 20 74 68 65 20  *. * Enable the 
0540: 6c 6f 61 64 69 6e 67 20 6f 66 20 72 69 6f 74 20  loading of riot 
0550: 74 61 67 73 20 77 69 74 68 20 6f 70 74 69 6f 6e  tags with option
0560: 73 20 72 69 6f 74 2e 72 65 71 75 69 72 65 28 27  s riot.require('
0570: 73 6f 6d 65 2e 74 61 67 27 2c 20 7b 20 74 65 6d  some.tag', { tem
0580: 70 6c 61 74 65 3a 20 27 70 75 67 27 20 7d 29 0a  plate: 'pug' }).
0590: 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 53 74   * @param   { St
05a0: 72 69 6e 67 20 7d 20 66 69 6c 65 6e 61 6d 65 20  ring } filename 
05b0: 2d 20 70 61 74 68 20 74 6f 20 74 68 65 20 66 69  - path to the fi
05c0: 6c 65 20 74 6f 20 6c 6f 61 64 20 61 6e 64 20 63  le to load and c
05d0: 6f 6d 70 69 6c 65 0a 20 2a 20 40 70 61 72 61 6d  ompile. * @param
05e0: 20 20 20 7b 20 4f 62 6a 65 63 74 20 7d 20 6f 70     { Object } op
05f0: 74 73 20 20 20 20 20 2d 20 63 6f 6d 70 69 6c 65  ts     - compile
0600: 72 20 6f 70 74 69 6f 6e 73 0a 20 2a 20 40 72 65  r options. * @re
0610: 74 75 72 6e 73 20 7b 20 53 74 72 69 6e 67 20 7d  turns { String }
0620: 20 74 61 67 20 6e 61 6d 65 0a 20 2a 2f 0a 66 75   tag name. */.fu
0630: 6e 63 74 69 6f 6e 20 72 69 6f 74 52 65 71 75 69  nction riotRequi
0640: 72 65 28 66 69 6c 65 6e 61 6d 65 2c 20 6f 70 74  re(filename, opt
0650: 73 29 20 7b 0a 20 20 76 61 72 20 6d 6f 64 75 6c  s) {.  var modul
0660: 65 20 3d 20 6e 65 77 20 4d 6f 64 75 6c 65 28 29  e = new Module()
0670: 0a 20 20 6d 6f 64 75 6c 65 2e 69 64 20 3d 20 6d  .  module.id = m
0680: 6f 64 75 6c 65 2e 66 69 6c 65 6e 61 6d 65 20 3d  odule.filename =
0690: 20 66 69 6c 65 6e 61 6d 65 0a 20 20 6c 6f 61 64   filename.  load
06a0: 41 6e 64 43 6f 6d 70 69 6c 65 28 66 69 6c 65 6e  AndCompile(filen
06b0: 61 6d 65 2c 20 6f 70 74 73 2c 20 6d 6f 64 75 6c  ame, opts, modul
06c0: 65 29 0a 20 20 72 65 74 75 72 6e 20 6d 6f 64 75  e).  return modu
06d0: 6c 65 2e 65 78 70 6f 72 74 73 0a 7d 0a 0a 2f 2f  le.exports.}..//
06e0: 20 61 6c 6c 6f 77 20 74 6f 20 72 65 71 75 69 72   allow to requir
06f0: 65 28 27 73 6f 6d 65 2e 74 61 67 27 29 0a 69 66  e('some.tag').if
0700: 20 28 72 65 71 75 69 72 65 2e 65 78 74 65 6e 73   (require.extens
0710: 69 6f 6e 73 29 20 7b 0a 20 20 72 65 71 75 69 72  ions) {.  requir
0720: 65 2e 65 78 74 65 6e 73 69 6f 6e 73 5b 27 2e 74  e.extensions['.t
0730: 61 67 27 5d 20 3d 20 66 75 6e 63 74 69 6f 6e 28  ag'] = function(
0740: 6d 6f 64 75 6c 65 2c 20 66 69 6c 65 6e 61 6d 65  module, filename
0750: 29 20 7b 0a 20 20 20 20 6c 6f 61 64 41 6e 64 43  ) {.    loadAndC
0760: 6f 6d 70 69 6c 65 28 66 69 6c 65 6e 61 6d 65 2c  ompile(filename,
0770: 20 7b 7d 2c 20 6d 6f 64 75 6c 65 29 0a 20 20 7d   {}, module).  }
0780: 0a 7d 0a 0a 2f 2a 2a 0a 20 2a 20 47 65 74 20 74  .}../**. * Get t
0790: 68 65 20 68 74 6d 6c 20 61 73 20 73 74 72 69 6e  he html as strin
07a0: 67 20 66 6f 72 6d 20 61 6e 79 20 72 69 6f 74 20  g form any riot 
07b0: 74 61 67 20 69 6e 73 74 61 6e 63 65 0a 20 2a 20  tag instance. * 
07c0: 40 70 61 72 61 6d 20 20 20 7b 20 54 61 67 20 7d  @param   { Tag }
07d0: 20 74 61 67 20 2d 20 72 69 6f 74 20 74 61 67 20   tag - riot tag 
07e0: 69 6e 73 74 61 6e 63 65 0a 20 2a 20 40 72 65 74  instance. * @ret
07f0: 75 72 6e 73 20 7b 20 53 74 72 69 6e 67 20 7d 20  urns { String } 
0800: 20 74 61 67 20 74 65 6d 70 6c 61 74 65 0a 20 2a   tag template. *
0810: 2f 0a 66 75 6e 63 74 69 6f 6e 20 67 65 74 54 61  /.function getTa
0820: 67 48 74 6d 6c 28 74 61 67 29 20 7b 0a 20 20 72  gHtml(tag) {.  r
0830: 65 74 75 72 6e 20 73 64 6f 6d 2e 73 65 72 69 61  eturn sdom.seria
0840: 6c 69 7a 65 28 74 61 67 2e 72 6f 6f 74 29 0a 7d  lize(tag.root).}
0850: 0a 0a 2f 2a 2a 0a 20 2a 20 52 65 6e 64 65 72 20  ../**. * Render 
0860: 72 69 6f 74 20 74 61 67 73 20 72 65 74 75 72 6e  riot tags return
0870: 69 6e 67 20 61 20 73 74 72 69 6e 67 73 0a 20 2a  ing a strings. *
0880: 20 40 70 61 72 61 6d 20 20 20 7b 20 53 74 72 69   @param   { Stri
0890: 6e 67 20 7d 20 74 61 67 4e 61 6d 65 20 2d 20 74  ng } tagName - t
08a0: 61 67 20 69 64 65 6e 74 69 66 69 65 72 0a 20 2a  ag identifier. *
08b0: 20 40 70 61 72 61 6d 20 20 20 7b 20 4f 62 6a 65   @param   { Obje
08c0: 63 74 20 7d 20 6f 70 74 73 20 20 20 20 2d 20 6f  ct } opts    - o
08d0: 70 74 69 6f 6e 73 20 74 6f 20 70 61 73 73 20 74  ptions to pass t
08e0: 6f 20 74 68 65 20 74 61 67 0a 20 2a 20 40 72 65  o the tag. * @re
08f0: 74 75 72 6e 73 20 7b 20 53 74 72 69 6e 67 20 7d  turns { String }
0900: 20 74 61 67 20 72 65 73 75 6c 74 69 6e 67 20 74   tag resulting t
0910: 65 6d 70 6c 61 74 65 0a 20 2a 2f 0a 66 75 6e 63  emplate. */.func
0920: 74 69 6f 6e 20 72 65 6e 64 65 72 28 74 61 67 4e  tion render(tagN
0930: 61 6d 65 2c 20 6f 70 74 73 29 20 7b 0a 20 20 76  ame, opts) {.  v
0940: 61 72 20 74 61 67 20 3d 20 72 65 6e 64 65 72 2e  ar tag = render.
0950: 74 61 67 28 74 61 67 4e 61 6d 65 2c 20 6f 70 74  tag(tagName, opt
0960: 73 29 2c 0a 20 20 20 20 68 74 6d 6c 20 3d 20 67  s),.    html = g
0970: 65 74 54 61 67 48 74 6d 6c 28 74 61 67 29 0a 20  etTagHtml(tag). 
0980: 20 2f 2f 20 75 6e 6d 6f 75 6e 74 20 74 68 65 20   // unmount the 
0990: 74 61 67 20 61 76 6f 69 64 69 6e 67 20 6d 65 6d  tag avoiding mem
09a0: 6f 72 79 20 6c 65 61 6b 73 0a 20 20 74 61 67 2e  ory leaks.  tag.
09b0: 75 6e 6d 6f 75 6e 74 28 29 0a 20 20 72 65 74 75  unmount().  retu
09c0: 72 6e 20 68 74 6d 6c 0a 7d 0a 0a 2f 2a 2a 0a 20  rn html.}../**. 
09d0: 2a 20 52 65 6e 64 65 72 20 72 69 6f 74 20 74 61  * Render riot ta
09e0: 67 73 20 61 73 79 6e 63 68 72 6f 6e 6f 75 73 6c  gs asynchronousl
09f0: 79 0a 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20  y. * @param   { 
0a00: 53 74 72 69 6e 67 20 7d 20 74 61 67 4e 61 6d 65  String } tagName
0a10: 20 2d 20 74 61 67 20 69 64 65 6e 74 69 66 69 65   - tag identifie
0a20: 72 0a 20 2a 20 40 70 61 72 61 6d 20 20 20 7b 20  r. * @param   { 
0a30: 4f 62 6a 65 63 74 20 7d 20 6f 70 74 73 20 20 20  Object } opts   
0a40: 20 2d 20 6f 70 74 69 6f 6e 73 20 74 6f 20 70 61   - options to pa
0a50: 73 73 20 74 6f 20 74 68 65 20 74 61 67 0a 20 2a  ss to the tag. *
0a60: 20 40 72 65 74 75 72 6e 73 20 7b 20 50 72 6f 6d   @returns { Prom
0a70: 69 73 65 20 7d 20 61 20 70 72 6f 6d 69 73 65 20  ise } a promise 
0a80: 72 65 73 6f 6c 76 65 64 20 77 69 74 68 20 74 68  resolved with th
0a90: 65 20 74 61 67 20 74 65 6d 70 6c 61 74 65 20 73  e tag template s
0aa0: 74 72 69 6e 67 0a 20 2a 2f 0a 66 75 6e 63 74 69  tring. */.functi
0ab0: 6f 6e 20 72 65 6e 64 65 72 41 73 79 6e 63 28 74  on renderAsync(t
0ac0: 61 67 4e 61 6d 65 2c 20 6f 70 74 73 29 20 7b 0a  agName, opts) {.
0ad0: 20 20 72 65 74 75 72 6e 20 50 72 6f 6d 69 73 65    return Promise
0ae0: 2e 72 61 63 65 28 5b 0a 20 20 20 20 6e 65 77 20  .race([.    new 
0af0: 50 72 6f 6d 69 73 65 28 28 72 65 73 6f 6c 76 65  Promise((resolve
0b00: 2c 20 72 65 6a 65 63 74 29 20 3d 3e 20 7b 0a 20  , reject) => {. 
0b10: 20 20 20 20 20 73 65 74 54 69 6d 65 6f 75 74 28       setTimeout(
0b20: 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20  function() {.   
0b30: 20 20 20 20 20 72 65 6a 65 63 74 28 6e 65 77 20       reject(new 
0b40: 45 72 72 6f 72 28 60 54 69 6d 65 6f 75 74 20 65  Error(`Timeout e
0b50: 72 72 6f 72 3a 3a 20 74 68 65 20 74 61 67 20 22  rror:: the tag "
0b60: 24 7b 20 74 61 67 4e 61 6d 65 20 7d 22 20 64 69  ${ tagName }" di
0b70: 64 6e 27 74 20 74 72 69 67 67 65 72 20 74 68 65  dn't trigger the
0b80: 20 22 72 65 61 64 79 22 20 65 76 65 6e 74 20 64   "ready" event d
0b90: 75 72 69 6e 67 20 74 68 65 20 72 65 6e 64 65 72  uring the render
0ba0: 69 6e 67 20 70 72 6f 63 65 73 73 60 29 29 0a 20  ing process`)). 
0bb0: 20 20 20 20 20 7d 2c 20 72 69 6f 74 2e 73 65 74       }, riot.set
0bc0: 74 69 6e 67 73 2e 61 73 79 6e 63 52 65 6e 64 65  tings.asyncRende
0bd0: 72 54 69 6d 65 6f 75 74 29 0a 20 20 20 20 7d 29  rTimeout).    })
0be0: 2c 0a 20 20 20 20 6e 65 77 20 50 72 6f 6d 69 73  ,.    new Promis
0bf0: 65 28 72 65 73 6f 6c 76 65 20 3d 3e 20 7b 0a 20  e(resolve => {. 
0c00: 20 20 20 20 20 76 61 72 20 74 61 67 20 3d 20 72       var tag = r
0c10: 65 6e 64 65 72 2e 74 61 67 28 74 61 67 4e 61 6d  ender.tag(tagNam
0c20: 65 2c 20 6f 70 74 73 29 0a 20 20 20 20 20 20 74  e, opts).      t
0c30: 61 67 2e 6f 6e 28 27 72 65 61 64 79 27 2c 20 66  ag.on('ready', f
0c40: 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20  unction() {.    
0c50: 20 20 20 20 76 61 72 20 68 74 6d 6c 20 3d 20 67      var html = g
0c60: 65 74 54 61 67 48 74 6d 6c 28 74 61 67 29 0a 20  etTagHtml(tag). 
0c70: 20 20 20 20 20 20 20 74 61 67 2e 75 6e 6d 6f 75         tag.unmou
0c80: 6e 74 28 29 0a 20 20 20 20 20 20 20 20 72 65 73  nt().        res
0c90: 6f 6c 76 65 28 68 74 6d 6c 29 0a 20 20 20 20 20  olve(html).     
0ca0: 20 7d 29 0a 20 20 20 20 7d 29 0a 20 20 5d 29 0a   }).    }).  ]).
0cb0: 7d 0a 0a 2f 2f 20 65 78 74 65 6e 64 20 74 68 65  }..// extend the
0cc0: 20 72 65 6e 64 65 72 20 66 75 6e 63 74 69 6f 6e   render function
0cd0: 20 77 69 74 68 20 73 6f 6d 65 20 73 74 61 74 69   with some stati
0ce0: 63 20 6d 65 74 68 6f 64 73 0a 72 65 6e 64 65 72  c methods.render
0cf0: 2e 64 6f 6d 20 3d 20 66 75 6e 63 74 69 6f 6e 28  .dom = function(
0d00: 74 61 67 4e 61 6d 65 2c 20 6f 70 74 73 29 20 7b  tagName, opts) {
0d10: 0a 20 20 72 65 74 75 72 6e 20 72 69 6f 74 2e 72  .  return riot.r
0d20: 65 6e 64 65 72 2e 74 61 67 28 74 61 67 4e 61 6d  ender.tag(tagNam
0d30: 65 2c 20 6f 70 74 73 29 2e 72 6f 6f 74 0a 7d 0a  e, opts).root.}.
0d40: 72 65 6e 64 65 72 2e 74 61 67 20 3d 20 66 75 6e  render.tag = fun
0d50: 63 74 69 6f 6e 28 74 61 67 4e 61 6d 65 2c 20 6f  ction(tagName, o
0d60: 70 74 73 29 20 7b 0a 20 20 76 61 72 20 72 6f 6f  pts) {.  var roo
0d70: 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 63 72 65  t = document.cre
0d80: 61 74 65 45 6c 65 6d 65 6e 74 28 74 61 67 4e 61  ateElement(tagNa
0d90: 6d 65 29 2c 0a 20 20 20 20 74 61 67 20 3d 20 72  me),.    tag = r
0da0: 69 6f 74 2e 6d 6f 75 6e 74 28 72 6f 6f 74 2c 20  iot.mount(root, 
0db0: 6f 70 74 73 29 5b 30 5d 0a 20 20 72 65 74 75 72  opts)[0].  retur
0dc0: 6e 20 74 61 67 0a 7d 0a 0a 2f 2f 20 65 78 74 65  n tag.}..// exte
0dd0: 6e 64 20 74 68 65 20 72 69 6f 74 20 61 70 69 20  nd the riot api 
0de0: 61 64 64 69 6e 67 20 73 6f 6d 65 20 75 73 65 66  adding some usef
0df0: 75 6c 20 73 65 72 76 65 72 73 69 64 65 20 6d 65  ul serverside me
0e00: 74 68 6f 64 73 0a 6d 6f 64 75 6c 65 2e 65 78 70  thods.module.exp
0e10: 6f 72 74 73 20 3d 20 65 78 70 6f 72 74 73 2e 64  orts = exports.d
0e20: 65 66 61 75 6c 74 20 3d 20 4f 62 6a 65 63 74 2e  efault = Object.
0e30: 61 73 73 69 67 6e 28 72 69 6f 74 2c 20 7b 0a 20  assign(riot, {. 
0e40: 20 2f 2f 20 61 6c 6c 6f 77 20 74 6f 20 72 65 71   // allow to req
0e50: 75 69 72 65 28 27 72 69 6f 74 27 29 2e 63 6f 6d  uire('riot').com
0e60: 70 69 6c 65 0a 20 20 63 6f 6d 70 69 6c 65 3a 20  pile.  compile: 
0e70: 63 6f 6d 70 69 6c 65 72 2e 63 6f 6d 70 69 6c 65  compiler.compile
0e80: 2c 0a 20 20 70 61 72 73 65 72 73 3a 20 63 6f 6d  ,.  parsers: com
0e90: 70 69 6c 65 72 2e 70 61 72 73 65 72 73 2c 0a 20  piler.parsers,. 
0ea0: 20 72 65 71 75 69 72 65 3a 20 72 69 6f 74 52 65   require: riotRe
0eb0: 71 75 69 72 65 2c 0a 20 20 72 65 6e 64 65 72 2c  quire,.  render,
0ec0: 0a 20 20 72 65 6e 64 65 72 41 73 79 6e 63 0a 7d  .  renderAsync.}
0ed0: 29 0a                                            ).