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). }.}.