all files / src/hyperscript/hasCssSelector/ matchBasicCssSelector.ts

100% Statements 16/16
100% Branches 13/13
100% Functions 1/1
100% Lines 15/15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32    71×   71×         71×   63×   63×   63×   63× 54×   54× 13×     50×   41×    
import { VNode } from '../../'
import { parseSelector } from '../parseSelector'
 
export function matchBasicCssSelector(cssSelector: string, vNode: VNode) {
  const hasTagName = cssSelector[0] !== '#' && cssSelector[0] !== '.'
 
  const { tagName, className, id } =
    hasTagName ?
      parseSelector(cssSelector) :
      parseSelector(vNode.tagName + cssSelector)
 
  if (tagName !== vNode.tagName)
    return false
 
  const parsedClassNames = className && className.split(' ') || []
 
  const { props: { className: propsClassName = '', id: propsId } } = vNode
 
  const vNodeClassNames = propsClassName.split(' ')
 
  for (let i = 0; i < parsedClassNames.length; ++i) {
    const parsedClassName = parsedClassNames[i]
 
    if (vNodeClassNames.indexOf(parsedClassName) === -1)
      return false
  }
 
  if (id) return propsId === id
 
  return true
}