diff --git a/src/command-registry.coffee b/src/command-registry.coffee index 8d4b86dd5..ac77bcc27 100644 --- a/src/command-registry.coffee +++ b/src/command-registry.coffee @@ -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)) diff --git a/src/selector-parser.coffee b/src/selector-parser.coffee new file mode 100644 index 000000000..fc3744a1f --- /dev/null +++ b/src/selector-parser.coffee @@ -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