Skip to content

Commit

Permalink
fusejs: Add support for context and callback arguments to Fuse.Ut…
Browse files Browse the repository at this point in the history
…il.$$() and fix failing selector unit tests. [jddalton]
  • Loading branch information
jdalton committed Oct 27, 2009
1 parent a5a01ae commit 5efbd89
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 22 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG
@@ -1,3 +1,5 @@
* Add support for `context` and `callback` arguments to Fuse.Util.$$() and fix failing selector unit tests. [jddalton]

* Make Fuse.Array#concat and Fuse.Array#slice replacements conform to ECMA 5 specification. [Prototype LH #843] [jddalton, Yaffle]

* Optimize Fuse.Dom.Node() handling of window objects. [jddalton]
Expand Down
5 changes: 3 additions & 2 deletions src/dom/form/form.js
Expand Up @@ -49,7 +49,7 @@
};

plugin.findFirstElement = function findFirstElement() {
var firstByIndex, node, tabIndex, i = 0,
var firstByIndex, result, tabIndex, i = 0,
firstNode = null, minTabIndex = Infinity;

eachElement(this, function(node) {
Expand All @@ -63,7 +63,8 @@
}
});

return fromElement(firstByIndex || firstNode);
result = firstByIndex || firstNode;
return result && fromElement(result);
};

plugin.focusFirstElement = function focusFirstElement() {
Expand Down
14 changes: 13 additions & 1 deletion src/dom/selector/selector.js
Expand Up @@ -5,6 +5,18 @@
Fuse.addNS('Dom.Selector');

(function(Selector) {
function $$(selectors) {
var callback, context, args = slice.call(arguments, 0);
if (typeof args[args.length - 1] === 'function')
callback = args.pop();
if (!isString(args[args.length - 1]))
context = args.pop();

return query(args.length
? slice.call(args).join(',')
: selectors, context, callback);
}

function query(selectors, context, callback) {
if (typeof context === 'function') {
callback = context; context = null;
Expand All @@ -21,7 +33,7 @@
context && Fuse.get(context).raw || Fuse._doc, callback);
}

Fuse.Util.$$ =
Fuse.Util.$$ = $$;
Fuse.query = query;
Fuse.rawQuery = rawQuery;
})(Fuse.Dom.Selector);
3 changes: 2 additions & 1 deletion src/lang/object.js
Expand Up @@ -273,7 +273,8 @@
var i = results.length, j = 0, length = i + value.length;
while (i < length) results[i++] = toQueryPair(key, value[j++]);
}
else results.push(toQueryPair(key, value));
else if (toString.call(value) !== '[object Object]')
results.push(toQueryPair(key, value));
}
});
return Fuse.String(results.join('&'));
Expand Down
13 changes: 2 additions & 11 deletions test/unit/fixtures/selector.js
@@ -1,14 +1,5 @@
var $$ = (function() {
var slice = Array.prototype.slice;
return function() {
return Selector.findChildElements(document, slice.call(arguments));
};
})();

var $RunBenchmarks = false;

/*--------------------------------------------------------------------------*/

var Selector = Fuse.Class({
'initialize': function(selector) {
this.selector = Fuse.String(selector);
Expand All @@ -19,7 +10,7 @@ var Selector = Fuse.Class({
},

'findElements': function(context) {
return Fuse.Dom.Selector.select(this.selector, $(context));
return Fuse.Dom.Selector.select(this.selector, $(context).raw);
},

'match': function(element) {
Expand Down Expand Up @@ -59,4 +50,4 @@ Fuse.Object.extend(Selector, {
function(match, captured) { results.push(Fuse.String(captured).trim()) });
return results;
}
});
});
15 changes: 8 additions & 7 deletions test/unit/selector_test.js
@@ -1,14 +1,14 @@
new Test.Unit.Runner({

'testSelectorWithTagName': function() {
this.assertEnumEqual($A(document.getElementsByTagName('li')), $$('li'));
this.assertEnumEqual($A(document.getElementsByTagName('li')), Fuse.rawQuery('li'));
this.assertEnumEqual([$('strong')], $$('strong'));
this.assertEnumEqual([], $$('nonexistent'));

var allNodes = $A(document.getElementsByTagName('*'))
.filter(function(node) { return node.nodeType === 1 });

this.assertEnumEqual(allNodes, $$('*'));
this.assertEnumEqual(allNodes, Fuse.rawQuery('*'));
},

'testSelectorWithId': function() {
Expand Down Expand Up @@ -604,7 +604,7 @@ new Test.Unit.Runner({
});

element.setAttribute('id', 'scratch_element');
$$('body')[0].appendChild(element);
$$('body')[0].insert(element);

var results = $$('#scratch_element div');
this.assert(typeof results[0].show == 'function');
Expand All @@ -628,7 +628,8 @@ new Test.Unit.Runner({
'div.is_counted'
);

$('counted_container').innerHTML += $('counted_container').innerHTML;
$('counted_container').raw.innerHTML +=
$('counted_container').raw.innerHTML;

this.assertElementsMatch(
Selector.matchElements($('counted_container').descendants(), 'div'),
Expand All @@ -645,7 +646,7 @@ new Test.Unit.Runner({
},

'testSelectorNotInsertedNodes': function() {
var wrapper = new Element('div');
var wrapper = Fuse('<div>');
wrapper.update('<table><tr><td id="myTD"></td></tr></table>');

this.assertNotNullOrUndefined(
Expand All @@ -663,8 +664,8 @@ new Test.Unit.Runner({
this.assertNotNullOrUndefined(wrapper.down().query('[id=myTD]')[0],
'[id=myTD] on wrapper child');

var clone = $('list').cloneNode(true);
this.assert(Element.query(clone, '#item_1')[0] == Element.down(clone));
var clone = $('list').raw.cloneNode(true);
this.assert($$('#item_1', clone)[0] == Fuse.Dom.Element.down(clone));
},

'testSelectorSpit': function() {
Expand Down

0 comments on commit 5efbd89

Please sign in to comment.