⌈⌋ ⎇ branch:  Bitrhythm


Hex Artifact Content

Artifact fea3d64609fa663a98378573ac943eb4df9e8e66115108a5a3b0508b2acf357c:


0000: 2f 2f 20 73 69 6d 70 6c 65 2d 64 6f 6d 20 68 65  // simple-dom he
0010: 6c 70 65 72 0a 0a 76 61 72 20 73 69 6d 70 6c 65  lper..var simple
0020: 44 6f 6d 20 3d 20 72 65 71 75 69 72 65 28 27 73  Dom = require('s
0030: 69 6d 70 6c 65 2d 64 6f 6d 27 29 0a 76 61 72 20  imple-dom').var 
0040: 73 69 6d 70 6c 65 54 6f 6b 65 6e 69 7a 65 72 20  simpleTokenizer 
0050: 3d 20 72 65 71 75 69 72 65 28 27 73 69 6d 70 6c  = require('simpl
0060: 65 2d 68 74 6d 6c 2d 74 6f 6b 65 6e 69 7a 65 72  e-html-tokenizer
0070: 27 29 0a 0a 2f 2f 20 63 72 65 61 74 65 20 60 64  ')..// create `d
0080: 6f 63 75 6d 65 6e 74 60 20 74 6f 20 6d 61 6b 65  ocument` to make
0090: 20 72 69 6f 74 20 77 6f 72 6b 0a 69 66 20 28 74   riot work.if (t
00a0: 79 70 65 6f 66 20 77 69 6e 64 6f 77 20 3d 3d 3d  ypeof window ===
00b0: 20 27 75 6e 64 65 66 69 6e 65 64 27 29 20 7b 0a   'undefined') {.
00c0: 20 20 2f 2a 65 73 6c 69 6e 74 2d 64 69 73 61 62    /*eslint-disab
00d0: 6c 65 2a 2f 0a 20 20 64 6f 63 75 6d 65 6e 74 20  le*/.  document 
00e0: 3d 20 6e 65 77 20 73 69 6d 70 6c 65 44 6f 6d 2e  = new simpleDom.
00f0: 44 6f 63 75 6d 65 6e 74 28 29 0a 20 20 2f 2a 65  Document().  /*e
0100: 73 6c 69 6e 74 2d 65 6e 61 62 6c 65 2a 2f 0a 7d  slint-enable*/.}
0110: 0a 0a 2f 2f 20 65 61 73 79 20 6c 69 6b 65 20 61  ..// easy like a
0120: 20 70 69 65 21 20 63 6c 6f 73 65 73 20 23 31 37   pie! closes #17
0130: 38 30 0a 64 6f 63 75 6d 65 6e 74 2e 63 72 65 61  80.document.crea
0140: 74 65 45 6c 65 6d 65 6e 74 4e 53 20 3d 20 64 6f  teElementNS = do
0150: 63 75 6d 65 6e 74 2e 63 72 65 61 74 65 45 6c 65  cument.createEle
0160: 6d 65 6e 74 0a 0a 2f 2f 20 61 64 64 20 60 69 6e  ment..// add `in
0170: 6e 65 72 48 54 4d 4c 60 20 70 72 6f 70 65 72 74  nerHTML` propert
0180: 79 20 74 6f 20 73 69 6d 70 6c 65 2d 64 6f 6d 20  y to simple-dom 
0190: 65 6c 65 6d 65 6e 74 0a 4f 62 6a 65 63 74 2e 64  element.Object.d
01a0: 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28 73 69  efineProperty(si
01b0: 6d 70 6c 65 44 6f 6d 2e 45 6c 65 6d 65 6e 74 2e  mpleDom.Element.
01c0: 70 72 6f 74 6f 74 79 70 65 2c 20 27 69 6e 6e 65  prototype, 'inne
01d0: 72 48 54 4d 4c 27 2c 20 7b 0a 20 20 73 65 74 3a  rHTML', {.  set:
01e0: 20 66 75 6e 63 74 69 6f 6e 28 68 74 6d 6c 29 20   function(html) 
01f0: 7b 0a 20 20 20 20 76 61 72 20 66 72 61 67 20 3d  {.    var frag =
0200: 20 73 64 6f 6d 2e 70 61 72 73 65 28 68 74 6d 6c   sdom.parse(html
0210: 29 0a 20 20 20 20 77 68 69 6c 65 20 28 74 68 69  ).    while (thi
0220: 73 2e 66 69 72 73 74 43 68 69 6c 64 29 20 74 68  s.firstChild) th
0230: 69 73 2e 72 65 6d 6f 76 65 43 68 69 6c 64 28 74  is.removeChild(t
0240: 68 69 73 2e 66 69 72 73 74 43 68 69 6c 64 29 0a  his.firstChild).
0250: 20 20 20 20 74 68 69 73 2e 61 70 70 65 6e 64 43      this.appendC
0260: 68 69 6c 64 28 66 72 61 67 29 0a 20 20 7d 2c 0a  hild(frag).  },.
0270: 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 28    get: function(
0280: 29 20 7b 0a 20 20 20 20 76 61 72 20 68 74 6d 6c  ) {.    var html
0290: 20 3d 20 27 27 2c 0a 20 20 20 20 20 20 6e 65 78   = '',.      nex
02a0: 74 20 3d 20 74 68 69 73 2e 66 69 72 73 74 43 68  t = this.firstCh
02b0: 69 6c 64 0a 0a 20 20 20 20 77 68 69 6c 65 20 28  ild..    while (
02c0: 6e 65 78 74 29 20 7b 0a 20 20 20 20 20 20 68 74  next) {.      ht
02d0: 6d 6c 20 2b 3d 20 73 64 6f 6d 2e 73 65 72 69 61  ml += sdom.seria
02e0: 6c 69 7a 65 28 6e 65 78 74 29 0a 20 20 20 20 20  lize(next).     
02f0: 20 6e 65 78 74 20 3d 20 6e 65 78 74 2e 6e 65 78   next = next.nex
0300: 74 53 69 62 6c 69 6e 67 0a 20 20 20 20 7d 0a 0a  tSibling.    }..
0310: 20 20 20 20 72 65 74 75 72 6e 20 68 74 6d 6c 0a      return html.
0320: 20 20 7d 0a 7d 29 0a 0a 0a 2f 2f 20 61 64 64 20    }.})...// add 
0330: 60 61 64 64 45 76 65 6e 74 4c 69 73 74 65 6e 65  `addEventListene
0340: 72 60 20 70 72 6f 70 65 72 74 79 20 74 6f 20 73  r` property to s
0350: 69 6d 70 6c 65 2d 64 6f 6d 20 65 6c 65 6d 65 6e  imple-dom elemen
0360: 74 0a 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50  t.Object.defineP
0370: 72 6f 70 65 72 74 79 28 73 69 6d 70 6c 65 44 6f  roperty(simpleDo
0380: 6d 2e 45 6c 65 6d 65 6e 74 2e 70 72 6f 74 6f 74  m.Element.protot
0390: 79 70 65 2c 20 27 61 64 64 45 76 65 6e 74 4c 69  ype, 'addEventLi
03a0: 73 74 65 6e 65 72 27 2c 20 7b 0a 20 20 76 61 6c  stener', {.  val
03b0: 75 65 3a 20 66 75 6e 63 74 69 6f 6e 28 74 79 70  ue: function(typ
03c0: 65 2c 20 66 6e 29 20 7b 0a 20 20 20 20 74 68 69  e, fn) {.    thi
03d0: 73 5b 60 6f 6e 24 7b 20 74 79 70 65 20 7d 60 5d  s[`on${ type }`]
03e0: 20 3d 20 66 6e 0a 20 20 7d 0a 7d 29 0a 0a 4f 62   = fn.  }.})..Ob
03f0: 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65  ject.definePrope
0400: 72 74 79 28 73 69 6d 70 6c 65 44 6f 6d 2e 45 6c  rty(simpleDom.El
0410: 65 6d 65 6e 74 2e 70 72 6f 74 6f 74 79 70 65 2c  ement.prototype,
0420: 20 27 72 65 6d 6f 76 65 45 76 65 6e 74 4c 69 73   'removeEventLis
0430: 74 65 6e 65 72 27 2c 20 7b 0a 20 20 76 61 6c 75  tener', {.  valu
0440: 65 3a 20 66 75 6e 63 74 69 6f 6e 28 74 79 70 65  e: function(type
0450: 29 20 7b 0a 20 20 20 20 74 68 69 73 5b 60 6f 6e  ) {.    this[`on
0460: 24 7b 20 74 79 70 65 20 7d 60 5d 20 3d 20 6e 75  ${ type }`] = nu
0470: 6c 6c 0a 20 20 7d 0a 7d 29 0a 0a 2f 2f 20 73 65  ll.  }.})..// se
0480: 74 20 74 68 65 20 76 61 6c 75 65 20 61 74 74 72  t the value attr
0490: 69 62 75 74 65 20 63 6f 72 72 65 63 74 6c 79 20  ibute correctly 
04a0: 6f 6e 20 74 68 65 20 69 6e 70 75 74 20 74 61 67  on the input tag
04b0: 73 0a 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50  s.Object.defineP
04c0: 72 6f 70 65 72 74 79 28 73 69 6d 70 6c 65 44 6f  roperty(simpleDo
04d0: 6d 2e 45 6c 65 6d 65 6e 74 2e 70 72 6f 74 6f 74  m.Element.protot
04e0: 79 70 65 2c 20 27 76 61 6c 75 65 27 2c 20 7b 0a  ype, 'value', {.
04f0: 20 20 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 28    set: function(
0500: 76 61 6c 29 20 7b 0a 20 20 20 20 76 61 6c 20 3d  val) {.    val =
0510: 20 53 74 72 69 6e 67 28 76 61 6c 29 20 2f 2f 20   String(val) // 
0520: 6d 61 6b 65 20 73 75 72 65 20 69 74 27 73 20 61  make sure it's a
0530: 6c 77 61 79 73 20 61 20 73 74 72 69 6e 67 0a 20  lways a string. 
0540: 20 20 20 69 66 20 28 74 68 69 73 2e 67 65 74 41     if (this.getA
0550: 74 74 72 69 62 75 74 65 28 27 76 61 6c 75 65 27  ttribute('value'
0560: 29 20 21 3d 3d 20 76 61 6c 29 20 7b 0a 20 20 20  ) !== val) {.   
0570: 20 20 20 74 68 69 73 2e 73 65 74 41 74 74 72 69     this.setAttri
0580: 62 75 74 65 28 27 76 61 6c 75 65 27 2c 20 76 61  bute('value', va
0590: 6c 29 0a 20 20 20 20 20 20 74 68 69 73 2e 76 61  l).      this.va
05a0: 6c 75 65 20 3d 20 76 61 6c 0a 20 20 20 20 7d 0a  lue = val.    }.
05b0: 20 20 7d 0a 7d 29 0a 0a 2f 2f 20 61 64 64 20 60    }.})..// add `
05c0: 6f 75 74 65 72 48 54 4d 4c 60 20 70 72 6f 70 65  outerHTML` prope
05d0: 72 74 79 20 74 6f 20 73 69 6d 70 6c 65 2d 64 6f  rty to simple-do
05e0: 6d 20 65 6c 65 6d 65 6e 74 0a 4f 62 6a 65 63 74  m element.Object
05f0: 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28  .defineProperty(
0600: 73 69 6d 70 6c 65 44 6f 6d 2e 45 6c 65 6d 65 6e  simpleDom.Elemen
0610: 74 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 6f 75  t.prototype, 'ou
0620: 74 65 72 48 54 4d 4c 27 2c 20 7b 0a 20 20 67 65  terHTML', {.  ge
0630: 74 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a  t: function() {.
0640: 20 20 20 20 76 61 72 20 68 74 6d 6c 20 3d 20 73      var html = s
0650: 64 6f 6d 2e 73 65 72 69 61 6c 69 7a 65 28 74 68  dom.serialize(th
0660: 69 73 29 0a 20 20 20 20 76 61 72 20 72 78 73 74  is).    var rxst
0670: 72 20 3d 20 27 5e 28 3c 27 20 2b 20 74 68 69 73  r = '^(<' + this
0680: 2e 74 61 67 4e 61 6d 65 20 2b 20 27 3e 2e 2a 3f  .tagName + '>.*?
0690: 3c 2f 27 20 2b 20 74 68 69 73 2e 74 61 67 4e 61  </' + this.tagNa
06a0: 6d 65 20 2b 20 27 3e 29 27 0a 20 20 20 20 76 61  me + '>)'.    va
06b0: 72 20 6d 61 74 63 68 20 3d 20 68 74 6d 6c 2e 6d  r match = html.m
06c0: 61 74 63 68 28 6e 65 77 20 52 65 67 45 78 70 28  atch(new RegExp(
06d0: 72 78 73 74 72 2c 20 27 69 27 29 29 0a 20 20 20  rxstr, 'i')).   
06e0: 20 72 65 74 75 72 6e 20 6d 61 74 63 68 20 3f 20   return match ? 
06f0: 6d 61 74 63 68 5b 30 5d 20 3a 20 68 74 6d 6c 0a  match[0] : html.
0700: 20 20 7d 0a 7d 29 0a 0a 2f 2f 20 61 64 64 20 60    }.})..// add `
0710: 73 74 79 6c 65 60 20 70 72 6f 70 65 72 74 79 20  style` property 
0720: 74 6f 20 73 69 6d 70 6c 65 2d 64 6f 6d 20 65 6c  to simple-dom el
0730: 65 6d 65 6e 74 0a 4f 62 6a 65 63 74 2e 64 65 66  ement.Object.def
0740: 69 6e 65 50 72 6f 70 65 72 74 79 28 73 69 6d 70  ineProperty(simp
0750: 6c 65 44 6f 6d 2e 45 6c 65 6d 65 6e 74 2e 70 72  leDom.Element.pr
0760: 6f 74 6f 74 79 70 65 2c 20 27 73 74 79 6c 65 27  ototype, 'style'
0770: 2c 20 7b 0a 20 20 67 65 74 3a 20 66 75 6e 63 74  , {.  get: funct
0780: 69 6f 6e 28 29 20 7b 0a 20 20 20 20 76 61 72 20  ion() {.    var 
0790: 65 6c 20 3d 20 74 68 69 73 0a 20 20 20 20 72 65  el = this.    re
07a0: 74 75 72 6e 20 4f 62 6a 65 63 74 2e 64 65 66 69  turn Object.defi
07b0: 6e 65 50 72 6f 70 65 72 74 79 28 7b 7d 2c 20 27  neProperty({}, '
07c0: 64 69 73 70 6c 61 79 27 2c 20 7b 0a 20 20 20 20  display', {.    
07d0: 20 20 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 28    set: function(
07e0: 76 61 6c 75 65 29 20 7b 0a 20 20 20 20 20 20 20  value) {.       
07f0: 20 65 6c 2e 73 65 74 41 74 74 72 69 62 75 74 65   el.setAttribute
0800: 28 27 73 74 79 6c 65 27 2c 20 27 64 69 73 70 6c  ('style', 'displ
0810: 61 79 3a 20 27 20 2b 20 76 61 6c 75 65 20 2b 20  ay: ' + value + 
0820: 27 3b 27 29 0a 20 20 20 20 20 20 7d 0a 20 20 20  ';').      }.   
0830: 20 7d 29 0a 20 20 7d 0a 7d 29 0a 0a 76 61 72 20   }).  }.})..var 
0840: 73 64 6f 6d 20 3d 20 6d 6f 64 75 6c 65 2e 65 78  sdom = module.ex
0850: 70 6f 72 74 73 20 3d 20 7b 0a 20 20 70 61 72 73  ports = {.  pars
0860: 65 3a 20 66 75 6e 63 74 69 6f 6e 28 68 74 6d 6c  e: function(html
0870: 29 20 7b 0a 20 20 20 20 2f 2f 20 70 61 72 73 65  ) {.    // parse
0880: 20 68 74 6d 6c 20 73 74 72 69 6e 67 20 74 6f 20   html string to 
0890: 73 69 6d 70 6c 65 2d 64 6f 6d 20 64 6f 63 75 6d  simple-dom docum
08a0: 65 6e 74 0a 20 20 20 20 76 61 72 20 62 6c 61 6e  ent.    var blan
08b0: 6b 20 3d 20 6e 65 77 20 73 69 6d 70 6c 65 44 6f  k = new simpleDo
08c0: 6d 2e 44 6f 63 75 6d 65 6e 74 28 29 0a 20 20 20  m.Document().   
08d0: 20 76 61 72 20 70 61 72 73 65 72 20 3d 20 6e 65   var parser = ne
08e0: 77 20 73 69 6d 70 6c 65 44 6f 6d 2e 48 54 4d 4c  w simpleDom.HTML
08f0: 50 61 72 73 65 72 28 73 69 6d 70 6c 65 54 6f 6b  Parser(simpleTok
0900: 65 6e 69 7a 65 72 2e 74 6f 6b 65 6e 69 7a 65 2c  enizer.tokenize,
0910: 20 62 6c 61 6e 6b 2c 20 73 69 6d 70 6c 65 44 6f   blank, simpleDo
0920: 6d 2e 76 6f 69 64 4d 61 70 29 0a 20 20 20 20 72  m.voidMap).    r
0930: 65 74 75 72 6e 20 70 61 72 73 65 72 2e 70 61 72  eturn parser.par
0940: 73 65 28 68 74 6d 6c 29 0a 20 20 7d 2c 0a 20 20  se(html).  },.  
0950: 73 65 72 69 61 6c 69 7a 65 3a 20 66 75 6e 63 74  serialize: funct
0960: 69 6f 6e 28 64 6f 63 29 20 7b 0a 20 20 20 20 2f  ion(doc) {.    /
0970: 2f 20 73 65 72 69 61 6c 69 7a 65 20 73 69 6d 70  / serialize simp
0980: 6c 65 2d 64 6f 6d 20 64 6f 63 75 6d 65 6e 74 20  le-dom document 
0990: 74 6f 20 68 74 6d 6c 20 73 74 72 69 6e 67 0a 20  to html string. 
09a0: 20 20 20 76 61 72 20 73 65 72 69 61 6c 69 7a 65     var serialize
09b0: 72 20 3d 20 6e 65 77 20 73 69 6d 70 6c 65 44 6f  r = new simpleDo
09c0: 6d 2e 48 54 4d 4c 53 65 72 69 61 6c 69 7a 65 72  m.HTMLSerializer
09d0: 28 73 69 6d 70 6c 65 44 6f 6d 2e 76 6f 69 64 4d  (simpleDom.voidM
09e0: 61 70 29 0a 20 20 20 20 72 65 74 75 72 6e 20 73  ap).    return s
09f0: 65 72 69 61 6c 69 7a 65 72 2e 73 65 72 69 61 6c  erializer.serial
0a00: 69 7a 65 28 64 6f 63 29 0a 20 20 7d 0a 7d 0a     ize(doc).  }.}.