mirror of
https://github.com/atom/atom.git
synced 2026-04-28 03:01:47 -04:00
Throw an error when adding an invalid selector
This commit is contained in:
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user