e01f913d by Adam Heath

Add pseudo-element after/before handling; this is not actually used yet

during rendering anywhere.
1 parent 124aa3c4
...@@ -37,7 +37,8 @@ const nthChildPos = (node, parent) => filterChildElements(parent).findIndex((chi ...@@ -37,7 +37,8 @@ const nthChildPos = (node, parent) => filterChildElements(parent).findIndex((chi
37 37
38 const filterChildElementsMatcher = (context, child, parent, i) => child.type === ELEMENT_NODE 38 const filterChildElementsMatcher = (context, child, parent, i) => child.type === ELEMENT_NODE
39 39
40 type Matcher = (context, node: NodeType, parent?: NodeType, i: number, debug: number) => boolean 40 type NodePosition = number | 'before' | 'after'
41 type Matcher = (context, node: NodeType, parent?: NodeType, i: NodePosition, debug: number) => boolean
41 type MatcherProducer = () => Matcher 42 type MatcherProducer = () => Matcher
42 type AttrValueMatch = (string) => string 43 type AttrValueMatch = (string) => string
43 44
...@@ -295,6 +296,16 @@ const compileMatcher = (ast: AST, selector: string): MatcherProducer => { ...@@ -295,6 +296,16 @@ const compileMatcher = (ast: AST, selector: string): MatcherProducer => {
295 } 296 }
296 case 'universal': 297 case 'universal':
297 return (context, node, parent, i, debug) => true 298 return (context, node, parent, i, debug) => true
299 case 'pseudo-element':
300 switch (ast.name) {
301 case 'after':
302 return (context, node, parent, i, debug) => i === 'after'
303 case 'before':
304 return (context, node, parent, i, debug) => i === 'before'
305 default:
306 console.error('pseudo-class', nodeUtil.inspect({ selector, ast }, { depth: null, colors: true }))
307 throw new Error(`Unknown pseudo-class: ${ast.name}`)
308 }
298 default: 309 default:
299 throw new Error(`Unhandled ast: ${ast.type}`) 310 throw new Error(`Unhandled ast: ${ast.type}`)
300 } 311 }
......