elements
Version:
prime dom library
55 lines (34 loc) • 1.32 kB
JavaScript
/*
zen
*/"use strict"
var $ = require("./index"),
parse = require("slick/parser"),
forEach = require("prime/array/forEach"),
map = require("prime/array/map")
module.exports = function(expression, doc){
return $(map(parse(expression), function(expression){
var previous, result
forEach(expression, function(part, i){
var node = (doc || document).createElement(part.tag)
if (part.id) node.id = part.id
if (part.classList) node.className = part.classList.join(" ")
if (part.attributes) forEach(part.attributes, function(attribute){
node.setAttribute(attribute.name, attribute.value)
})
if (part.pseudos) forEach(part.pseudos, function(pseudo){
var n = $(node), method = n[pseudo.name]
if (method) method.call(n, pseudo.value)
})
if (i === 0){
result = node
} else if (part.combinator === " "){
previous.appendChild(node)
} else if (part.combinator === "+"){
var parentNode = previous.parentNode
if (parentNode) parentNode.appendChild(node)
}
previous = node
})
return result
}))
}