Skip to content
Browse files

refactor new methods to use array awesomeness

  • Loading branch information...
1 parent 9c4af7f commit 1babc9a6bd116bed0dac6103249d01b18123d24e @madrobby committed Mar 1, 2011
Showing with 75 additions and 35 deletions.
  1. +22 −27 src/zepto.js
  2. +1 −1 test/ajax.html
  3. +1 −1 test/assets_functional.html
  4. +1 −1 test/detect.html
  5. +47 −0 test/polyfill.html
  6. +1 −1 test/touch_functional.html
  7. +1 −1 test/touchcancel_functional.html
  8. +1 −3 test/zepto.html
View
49 src/zepto.js
@@ -6,6 +6,12 @@ var Zepto = (function() {
function compact(array){ return array.filter(function(item){ return item !== undefined && item !== null }) }
function flatten(array){ return array.reduce(function(a,b){ return a.concat(b) }, []) }
function camelize(str){ return str.replace(/-+(.)?/g, function(match, chr){ return chr ? chr.toUpperCase() : '' }) }
+ function uniq(array){
+ var r = [];
+ for(var i=0,n=array.length;i<n;i++)
+ if(r.indexOf(array[i])<0) r.push(array[i]);
+ return r;
+ }
fragmentRE = /^\s*<.+>/;
container = document.createElement("div");
@@ -41,6 +47,10 @@ var Zepto = (function() {
$.extend = function(target, source){ for (key in source) target[key] = source[key]; return target }
$.qsa = $$ = function(element, selector){ return slice.call(element.querySelectorAll(selector)) }
+ function filtered(nodes, selector){
+ return selector === undefined ? $(nodes) : $(nodes).filter(selector);
+ }
+
$.fn = {
forEach: [].forEach,
map: [].map,
@@ -68,14 +78,15 @@ var Zepto = (function() {
},
not: function(selector){
var nodes=[];
- if (typeof selector == 'function' && selector.call !== undefined){
+ if (typeof selector == 'function' && selector.call !== undefined)

what is the case for this check?
selector.call !== undefined

@ekhaled
ekhaled added a note Mar 21, 2011

Check this commit:
37d2ed6

Thanks
Safari thinks typeOf NodeList == function
Chrome thinks typeof NodeList == Object
how about?
function isFunction(value) { return ({}).toString.call(obj) == "[object Function]" }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
this.each(function(idx){
if (!selector.call(this,idx)) nodes.push(this);
});
- }else{
- var ignores=slice.call(typeof selector === "string" ?
- this.filter(selector) :
- selector instanceof NodeList ? selector : $(selector));
+ else {
+ var ignores = slice.call(
+ typeof selector === "string" ?
+ this.filter(selector) :
+ selector instanceof NodeList ? selector : $(selector));
slice.call(this).forEach(function(el){
if (ignores.indexOf(el) < 0) nodes.push(el);
});
@@ -106,34 +117,18 @@ var Zepto = (function() {
return node;
}
}));
- ancestors = $(ancestors);
- return selector === undefined ? ancestors : ancestors.filter(selector);
+ return filtered(ancestors, selector);
},
parent: function(selector){
- var node, nodes = [];
- this.each(function(){
- if ((node = this.parentNode) && nodes.indexOf(node) < 0) nodes.push(node);
- });
- nodes = $(nodes);
- return selector === undefined ? nodes : nodes.filter(selector);
+ return filtered(uniq(compact(this.pluck('parentNode'))), selector);
},
children: function(selector){
- var nodes=[];
- this.each(function(){
- slice.call(this.children).forEach(function(el){
- nodes.push(el);
- })
- });
- return selector === undefined ? $(nodes) : $(nodes).filter(selector);
+ return filtered(flatten(this.map(function(el){ return slice.call(el.children) })), selector);
},
siblings: function(selector){
- var node, nodes=[];
- this.each(function(){
- slice.call((node = this).parentNode.children).forEach(function(el){
- if (node !== el) nodes.push(el);
- })
- });
- return selector === undefined ? $(nodes) : $(nodes).filter(selector);
+ return filtered(flatten(this.map(function(el){
+ return slice.call(el.parentNode.children).filter(function(child){ return child!==el });
+ })), selector);
},
pluck: function(property){ return this.map(function(element){ return element[property] }) },
show: function(){ return this.css('display', 'block') },
View
2 test/ajax.html
@@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<title>Zepto Ajax unit tests</title>
- <script src="../src/compat.js"></script>
+ <script src="../src/polyfill.js"></script>
<script src="../src/zepto.js"></script>
<script src="../src/ajax.js"></script>
<script src="../vendor/evidence.js"></script>
View
2 test/assets_functional.html
@@ -4,7 +4,7 @@
<meta charset="utf-8">
<title>Zepto assets functional test</title>
<meta name="viewport" content="maximum-scale=1,initial-scale=1,user-scalable=0">
- <script src="../src/compat.js"></script>
+ <script src="../src/polyfill.js"></script>
<script src="../src/zepto.js"></script>
<style>
#container div {
View
2 test/detect.html
@@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<title>Zepto environment detection unit tests</title>
- <script src="../src/compat.js"></script>
+ <script src="../src/polyfill.js"></script>
<script src="../src/zepto.js"></script>
<script src="../src/detect.js"></script>
<script src="../vendor/evidence.js"></script>
View
47 test/polyfill.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Zepto Compatibility unit tests</title>
+ <script src="../src/polyfill.js"></script>
+ <script src="../src/zepto.js"></script>
+ <script src="../vendor/evidence.js"></script>
+</head>
+<body>
+ <h1>Zepto Compatibility unit tests</h1>
+ <p>
+ See the browser console for results.
+ </p>
+ <script>
+ Evidence.TestCase.extend('ZeptoTest', {
+
+ // test to see if we augment String.prototype.trim if not supported natively
+ testTrim: function(t){
+ t.assertEqual("blah", " blah ".trim());
+ },
+
+ // test to see if we augment Array.prototype.reduceif not supported natively
+ testReduce: function(t){
+ t.assertEqual(
+ 10,
+ [0,1,2,3,4].reduce(function(p,c){ return p+c })
+ );
+
+ t.assertEqual(
+ 20,
+ [0,1,2,3,4].reduce(function(p,c){ return p+c }, 10)
+ );
+
+ var flattened = [[0,1], [2,3], [4,5]].reduce(function(a,b){
+ return a.concat(b);
+ });
+
+ t.assertEqual(6, flattened.length);
+
+ for(var i=0;i<6;i++) t.assertEqual(i, flattened[i]);
+ }
+
+ });
+ </script>
+</body>
+</html>
View
2 test/touch_functional.html
@@ -4,7 +4,7 @@
<meta charset="utf-8">
<title>Zepto touch functional test</title>
<meta name="viewport" content="maximum-scale=1,initial-scale=1,user-scalable=0">
- <script src="../src/compat.js"></script>
+ <script src="../src/polyfill.js"></script>
<script src="../src/zepto.js"></script>
<script src="../src/event.js"></script>
<script src="../src/touch.js"></script>
View
2 test/touchcancel_functional.html
@@ -4,7 +4,7 @@
<meta charset="utf-8">
<title>Zepto touch functional test</title>
<meta name="viewport" content="maximum-scale=1,initial-scale=1,user-scalable=0">
- <script src="../src/compat.js"></script>
+ <script src="../src/polyfill.js"></script>
<script src="../src/zepto.js"></script>
<script src="../src/event.js"></script>
<script src="../src/touch.js"></script>
View
4 test/zepto.html
@@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<title>Zepto DOM unit tests</title>
- <script src="../src/compat.js"></script>
+ <script src="../src/polyfill.js"></script>
<script src="../src/zepto.js"></script>
<script src="../src/event.js"></script>
<script src="../vendor/evidence.js"></script>
@@ -820,8 +820,6 @@
var els = $('#attr_with_text_input');
els.get(0).removeAttribute('disabled');
- console.log(els[0].disabled);
- console.log(els.attr('disabled'))
t.assertFalse(els.attr('disabled'));
els.attr('disabled', 'definitely');

0 comments on commit 1babc9a

Please sign in to comment.
Something went wrong with that request. Please try again.