mirror of
https://github.com/atom/atom.git
synced 2026-01-23 05:48:10 -05:00
Add selector parser helper class
This commit is contained in:
@@ -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))
|
||||
|
||||
16
src/selector-parser.coffee
Normal file
16
src/selector-parser.coffee
Normal 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
|
||||
Reference in New Issue
Block a user