Throw an error when adding an invalid selector

This commit is contained in:
Kevin Sawicki
2015-03-03 14:38:15 -08:00
parent c6428dc526
commit 8ba098b640
2 changed files with 26 additions and 0 deletions

View File

@@ -87,6 +87,8 @@ class CommandRegistry
return disposable
if typeof target is 'string'
unless @isSelectorValid(target)
throw new Error("'#{target}' is not a valid selector")
@addSelectorBasedListener(target, commandName, callback)
else
@addInlineListener(target, commandName, callback)
@@ -235,6 +237,20 @@ 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))