Skip to content

Commit

Permalink
adding andSelf() and unit tests for andSelf, modified end (removed if…
Browse files Browse the repository at this point in the history
… statement that wasn't needed), cleaned up src for object now it's .fn rather than $.fn
  • Loading branch information
goatslacker committed May 5, 2011
1 parent 622824f commit a14ef4a
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 24 deletions.
51 changes: 29 additions & 22 deletions src/zepto.js
Expand Up @@ -44,18 +44,13 @@ var Zepto = (function() {
return dom;
}

function $Zepto (selector, context) {
$.stack = [];
return $(selector, context);
}

function $(selector, context){
$.stack.push({ selector: selector, context: context });
var els = undefined;

if (!selector) return Z();
if (context !== undefined) return $(context).find(selector);
else if (isF(selector)) return $(document).ready(selector);
else if (selector instanceof Z) return selector;
if (!selector) els = Z();
if (context !== undefined) els = $(context).find(selector);
else if (isF(selector)) els = $(document).ready(selector);
else if (selector instanceof Z) els = selector;
else {
var dom;
if (isA(selector)) dom = compact(selector);
Expand All @@ -64,8 +59,17 @@ var Zepto = (function() {
else if (fragmentRE.test(selector)) dom = fragment(selector);
else if (selector.nodeType && selector.nodeType == 3) dom = [selector];
else dom = $$(document, selector);
return Z(dom, selector);
els = Z(dom, selector);
}

$.stack.push({ selector: selector, context: context, items: els });

return els;
}

function $Zepto(selector, context) {
$.stack = [];
return $(selector, context);
}

$Zepto.extend = function(target, source){ for (key in source) target[key] = source[key]; return target }
Expand All @@ -79,7 +83,7 @@ var Zepto = (function() {
$.isObject = isO;
$.isArray = isA;

$.fn = {
$Zepto.fn = {
forEach: [].forEach,
map: [].map,
reduce: [].reduce,
Expand Down Expand Up @@ -192,13 +196,17 @@ var Zepto = (function() {
this.each(function(idx){ this.innerHTML = isF(html) ? html.call(this, idx, this.innerHTML) : html });
},
end: function () {
if ($.stack) {
if ($.stack.length > 0) $.stack.pop();
var previous = $.stack.pop();
return $(previous.selector, previous.context);
} else {
return $(document);
if ($.stack.length > 0) $.stack.pop();
var previous = $.stack.pop();
return $(previous.selector, previous.context);
},
andSelf: function () {
if ($.stack.length > 1) {
var prev = $.stack.shift();
Array.prototype.unshift.apply(this, prev.items);
this.selector.unshift(prev.items.selector);
}
return this;
},
text: function(text){
return text === undefined ?
Expand Down Expand Up @@ -289,14 +297,14 @@ var Zepto = (function() {
};

['width', 'height'].forEach(function(property){
$.fn[property] = function(){ var offset = this.offset(); return offset ? offset[property] : null }
$Zepto.fn[property] = function(){ var offset = this.offset(); return offset ? offset[property] : null }
});


var adjacencyOperators = {append: 'beforeEnd', prepend: 'afterBegin', before: 'beforeBegin', after: 'afterEnd'};

for (key in adjacencyOperators)
$.fn[key] = (function(operator) {
$Zepto.fn[key] = (function(operator) {
return function(html){
return this.each(function(index, element){
if (html instanceof Z) {
Expand All @@ -312,8 +320,7 @@ var Zepto = (function() {
};
})(adjacencyOperators[key]);

Z.prototype = $.fn;
$Zepto.fn = $.fn;
Z.prototype = $Zepto.fn;

return $Zepto;
})();
Expand Down
32 changes: 30 additions & 2 deletions test/zepto.html
Expand Up @@ -157,6 +157,21 @@ <h1>Zepto DOM unit tests</h1>
<div><span>Hello</span>, how are you?</div>
</div>

<br />

<div class="andSelf">
<strong>Some Bold Text</strong>
</div>

<br />

<div class="andSelf">
<p>First Paragraph</p>
<p>Second Paragraph</p>
</div>

<br />

<form id="some_form"></form>

<div class="replace_test_div">test</div>
Expand Down Expand Up @@ -1126,15 +1141,28 @@ <h1>Zepto DOM unit tests</h1>
},

testEndFunc: function (t) {
$('ul.firstul').find('.redli').css('background-color', 'red').end().find('.greenli').css('background-color', 'green');
$('ul.firstul').find('.redli').css('background-color', 'red').end().find('.greenli').css('background-color', 'green').end();

t.assertEqual($('ul.firstul .redli').css('background-color'), 'red');
t.assertEqual($('ul.firstul .greenli').css('background-color'), 'green');
t.assert($('ul.secondul .greenli').css('background-color'), 'rgba (0, 0, 0, 0)');

$("#endTest2 div").find("span").end().css("border", "2px solid red")
$("#endTest2 div").find("span").end().css("border", "2px solid red");

t.assertEqual($('#endTest2 div').css('border'), '2px solid red');
},

testAndSelf: function (t) {
$(".andSelf").find("p").css('background-color', 'yellow');
$(".andSelf").find("p").andSelf().css('border', '1px solid red');

t.assertEqual($(".andSelf").find("p").css('background-color'), 'yellow');
t.refuteEqual($(".andSelf").css('background-color'), 'yellow');

t.assertEqual($(".andSelf").find("p").css('border'), '1px solid red');
t.assertEqual($(".andSelf").css('border'), '1px solid red');
},

testDocumentReady: function (t) {
// Check that if document is already loaded, ready() immediately executes callback
var foo = false;
Expand Down

0 comments on commit a14ef4a

Please sign in to comment.