55 lines
1.1 KiB
JavaScript
55 lines
1.1 KiB
JavaScript
'use strict'
|
|
|
|
module.exports = parse
|
|
|
|
var numberSign = 35 // '#'
|
|
var dot = 46 // '.'
|
|
|
|
// Create a hast element from a simple CSS selector.
|
|
function parse(selector, defaultTagName) {
|
|
var value = selector || ''
|
|
var name = defaultTagName || 'div'
|
|
var props = {}
|
|
var index = -1
|
|
var length = value.length
|
|
var className
|
|
var type
|
|
var code
|
|
var subvalue
|
|
var lastIndex
|
|
|
|
while (++index <= length) {
|
|
code = value.charCodeAt(index)
|
|
|
|
if (!code || code === dot || code === numberSign) {
|
|
subvalue = value.slice(lastIndex, index)
|
|
|
|
if (subvalue) {
|
|
if (type === dot) {
|
|
// eslint-disable-next-line max-depth
|
|
if (className) {
|
|
className.push(subvalue)
|
|
} else {
|
|
className = [subvalue]
|
|
props.className = className
|
|
}
|
|
} else if (type === numberSign) {
|
|
props.id = subvalue
|
|
} else {
|
|
name = subvalue
|
|
}
|
|
}
|
|
|
|
lastIndex = index + 1
|
|
type = code
|
|
}
|
|
}
|
|
|
|
return {
|
|
type: 'element',
|
|
tagName: name,
|
|
properties: props,
|
|
children: []
|
|
}
|
|
}
|