Add selector parser helper class

This commit is contained in:
Kevin Sawicki
2015-03-03 14:46:35 -08:00
parent 333a495d55
commit 2a12f7779d
2 changed files with 18 additions and 15 deletions

View File

@@ -2,6 +2,7 @@
{specificity} = require 'clear-cut'
_ = require 'underscore-plus'
{$} = require './space-pen-extensions'
{isSelectorValid} = require './selector-parser'
SequenceCount = 0
SpecificityCache = {}
@@ -87,7 +88,7 @@ class CommandRegistry
return disposable
if typeof target is 'string'
unless @isSelectorValid(target)
unless isSelectorValid(target)
throw new Error("'#{target}' is not a valid selector")
@addSelectorBasedListener(target, commandName, callback)
else
@@ -237,20 +238,6 @@ class CommandRegistry
window.addEventListener(commandName, @handleCommandEvent, true)
@registeredCommands[commandName] = true
isSelectorValid: (selector) ->
@selectorCache ?= {}
cachedValue = @selectorCache[selector]
return cachedValue if cachedValue?
@testElement ?= document.createElement('div')
try
@testElement.webkitMatchesSelector(selector)
@selectorCache[selector] = true
true
catch selectorError
@selectorCache[selector] = false
false
class SelectorBasedListener
constructor: (@selector, @callback) ->
@specificity = (SpecificityCache[@selector] ?= specificity(@selector))

View File

@@ -0,0 +1,16 @@
selectorCache = null
testElement = null
exports.isSelectorValid = (selector) ->
selectorCache ?= {}
cachedValue = selectorCache[selector]
return cachedValue if cachedValue?
testElement ?= document.createElement('div')
try
testElement.webkitMatchesSelector(selector)
selectorCache[selector] = true
true
catch selectorError
selectorCache[selector] = false
false