Skip to content

Instantly share code, notes, and snippets.

@arian
Created January 18, 2012 00:10
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save arian/1629934 to your computer and use it in GitHub Desktop.
Save arian/1629934 to your computer and use it in GitHub Desktop.
A lite version of Slick.Finder for modern browsers/mobile.
/*
---
name: Slick.Finder
description: The new, superfast css selector engine.
provides: Slick.Finder
requires: Slick.Parser
...
*/
(function(){
// Slick
var Slick = (this.Slick || {});
Slick.version = '1.1.6-light';
// Slick finder
Slick.search = function(context, expression, append){
var result = context.querySelectorAll(expression);
if (!append || !append.push) return result;
for (var i = 0; i < result.length; i++) append.push(result[i]);
return append;
};
Slick.find = function(context, expression){
return context.querySelector(expression);
};
// Slick containment checker
Slick.contains = function(container, node){
return container.contains(node);
};
// Slick attribute getter
Slick.getAttribute = function(node, name){
return node.getAttribute(name);
};
Slick.hasAttribute = function(node, name){
return node.hasAttribute(name);
};
// Slick matcher
var documentElement = document.documentElement,
matchesSelectors = ['matchesSelector', 'webkitMatchesSelector', 'mozMatchesSelector'],
matchesSelector;
for (var i = 0; i < matchesSelectors.length; i++){
if (typeof documentElement[matchesSelectors[i]] != 'undefined'){
matchesSelector = matchesSelectors[i];
break;
}
}
Slick.match = function(node, selector){
if (!(node && selector)) return false;
if (!selector || selector === node) return true;
return node[matchesSelector](selector);
};
// Slick attribute accessor
Slick.defineAttributeGetter = function(name, fn){
// unimplemented
return this;
};
Slick.lookupAttributeGetter = function(name){
// unimplemented
return null;
};
// Slick pseudo accessor
Slick.definePseudo = function(name, fn){
// unimplemented
return this;
};
Slick.lookupPseudo = function(name){
// unimplemented
return null;
};
// Slick overrides accessor
Slick.override = function(regexp, fn){
// unimplemented
return this;
};
Slick.isXML = function(){
// unimplemented
return false;
};
var uidx = 1;
Slick.uidOf = function(node){
return node.uniqueNumber || (node.uniqueNumber = uidx++);
};
if (!this.Slick) this.Slick = Slick;
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment