mirror of
https://github.com/atom/atom.git
synced 2026-04-06 03:02:13 -04:00
Merge pull request #6368 from atom/ks-consolidate-selector-caches
Consolidate selector caches
This commit is contained in:
@@ -20,11 +20,11 @@
|
||||
"atomShellVersion": "0.22.3",
|
||||
"dependencies": {
|
||||
"async": "0.2.6",
|
||||
"atom-keymap": "^5.1",
|
||||
"atom-keymap": "^5.1.2",
|
||||
"atom-space-pen-views": "^2.0.4",
|
||||
"babel-core": "^4.0.2",
|
||||
"bootstrap": "git+https://github.com/atom/bootstrap.git#6af81906189f1747fd6c93479e3d998ebe041372",
|
||||
"clear-cut": "0.4.0",
|
||||
"clear-cut": "^2.0.1",
|
||||
"coffee-cash": "0.8.0",
|
||||
"coffee-script": "1.8.0",
|
||||
"coffeestack": "^1.1.1",
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
{Emitter, Disposable, CompositeDisposable} = require 'event-kit'
|
||||
{specificity} = require 'clear-cut'
|
||||
{calculateSpecificity, validateSelector} = require 'clear-cut'
|
||||
_ = require 'underscore-plus'
|
||||
{$} = require './space-pen-extensions'
|
||||
{validateSelector} = require './selector-validator'
|
||||
|
||||
SequenceCount = 0
|
||||
SpecificityCache = {}
|
||||
|
||||
# Public: Associates listener functions with commands in a
|
||||
# context-sensitive way using CSS selectors. You can access a global instance of
|
||||
@@ -241,7 +239,7 @@ class CommandRegistry
|
||||
|
||||
class SelectorBasedListener
|
||||
constructor: (@selector, @callback) ->
|
||||
@specificity = (SpecificityCache[@selector] ?= specificity(@selector))
|
||||
@specificity = calculateSpecificity(@selector)
|
||||
@sequenceNumber = SequenceCount++
|
||||
|
||||
compare: (other) ->
|
||||
|
||||
@@ -2,14 +2,12 @@ _ = require 'underscore-plus'
|
||||
path = require 'path'
|
||||
CSON = require 'season'
|
||||
fs = require 'fs-plus'
|
||||
{specificity} = require 'clear-cut'
|
||||
{calculateSpecificity, validateSelector} = require 'clear-cut'
|
||||
{Disposable} = require 'event-kit'
|
||||
Grim = require 'grim'
|
||||
MenuHelpers = require './menu-helpers'
|
||||
{validateSelector} = require './selector-validator'
|
||||
|
||||
platformContextMenu = require('../package.json')?._atomMenu?['context-menu']
|
||||
SpecificityCache = {}
|
||||
|
||||
# Extended: Provides a registry for commands that you'd like to appear in the
|
||||
# context menu.
|
||||
@@ -208,4 +206,4 @@ class ContextMenuManager
|
||||
|
||||
class ContextMenuItemSet
|
||||
constructor: (@selector, @items) ->
|
||||
@specificity = (SpecificityCache[@selector] ?= specificity(@selector))
|
||||
@specificity = calculateSpecificity(@selector)
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
selectorCache = null
|
||||
testElement = null
|
||||
|
||||
# Parses CSS selectors and memoizes their validity so each selector will only
|
||||
# be parsed once.
|
||||
exports.isSelectorValid = (selector) ->
|
||||
selectorCache ?= {}
|
||||
cachedValue = selectorCache[selector]
|
||||
return cachedValue if cachedValue?
|
||||
|
||||
testElement ?= document.createElement('div')
|
||||
try
|
||||
# querySelector appears to be faster than webkitMatchesSelector
|
||||
# http://jsperf.com/query-vs-matches
|
||||
testElement.querySelector(selector)
|
||||
selectorCache[selector] = true
|
||||
true
|
||||
catch selectorError
|
||||
selectorCache[selector] = false
|
||||
false
|
||||
|
||||
# Parse the given CSS selector and throw an error if it is invalid.
|
||||
exports.validateSelector = (selector) ->
|
||||
return if exports.isSelectorValid(selector)
|
||||
|
||||
error = new Error("'#{selector}' is not a valid selector")
|
||||
error.code = 'EBADSELECTOR'
|
||||
throw error
|
||||
Reference in New Issue
Block a user