1 | module.exports = function h (tag, attr, children) {
|
2 | if (Array.isArray(attr)) {
|
3 | children = attr
|
4 | attr = {}
|
5 | }
|
6 | if (!children) children = []
|
7 | if (!Array.isArray(children)) children = [children]
|
8 | if (!attr) attr = {}
|
9 |
|
10 | var open = '<' + tag.replace(/[\/!]$/, '')
|
11 | var kattr = Object.keys(attr)
|
12 | if (kattr.length) {
|
13 | open += ' ' + kattr.map(function (k) {
|
14 | return enc(k) + '="' + enc(attr[k]) + '"'
|
15 | }).join(' ')
|
16 | }
|
17 | if (/^\?/.test(tag)) {
|
18 | return open + '?>' + children.join('')
|
19 | } else if (/!$/.test(tag)) {
|
20 | return open + '>' + children.join('')
|
21 | } else if (!children.length) {
|
22 | return open + '/>'
|
23 | } else {
|
24 | return open + '>' + children.join('') + '</' + tag + '>'
|
25 | }
|
26 | }
|
27 |
|
28 | function enc (str) {
|
29 | if (typeof str !== 'string') str = String(str)
|
30 | return str
|
31 | .replace(/&/g, '&')
|
32 | .replace(/</g, '<')
|
33 | .replace(/>/g, '>')
|
34 | .replace(/"/g, '"')
|
35 | }
|