1 | var attrRE = /([\w-]+)|['"]{1}([^'"]*)['"]{1}/g;
|
2 |
|
3 |
|
4 |
|
5 |
|
6 | var lookup = (Object.create) ? Object.create(null) : {};
|
7 | lookup.area = true;
|
8 | lookup.base = true;
|
9 | lookup.br = true;
|
10 | lookup.col = true;
|
11 | lookup.embed = true;
|
12 | lookup.hr = true;
|
13 | lookup.img = true;
|
14 | lookup.input = true;
|
15 | lookup.keygen = true;
|
16 | lookup.link = true;
|
17 | lookup.menuitem = true;
|
18 | lookup.meta = true;
|
19 | lookup.param = true;
|
20 | lookup.source = true;
|
21 | lookup.track = true;
|
22 | lookup.wbr = true;
|
23 |
|
24 | module.exports = function (tag) {
|
25 | var i = 0;
|
26 | var key;
|
27 | var res = {
|
28 | type: 'tag',
|
29 | name: '',
|
30 | voidElement: false,
|
31 | attrs: {},
|
32 | children: []
|
33 | };
|
34 |
|
35 | tag.replace(attrRE, function (match) {
|
36 | if (i % 2) {
|
37 | key = match;
|
38 | } else {
|
39 | if (i === 0) {
|
40 | if (lookup[match] || tag.charAt(tag.length - 2) === '/') {
|
41 | res.voidElement = true;
|
42 | }
|
43 | res.name = match;
|
44 | } else {
|
45 | res.attrs[key] = match.replace(/['"]/g, '');
|
46 | }
|
47 | }
|
48 | i++;
|
49 | });
|
50 |
|
51 | return res;
|
52 | };
|