oxjs/source/Ox.UI/js/Core/Ox.JQueryElement.js
2012-05-21 22:07:40 +02:00

53 lines
No EOL
1.9 KiB
JavaScript

'use strict';
/*@
Ox.JQueryElement <function> Wrapper for jQuery
($element) -> <object> Wrapped jQuery DOM element
$element <object> jQuery DOM Element
@*/
// fixme: now that children(), find() work, change code to call find directly.
Ox.JQueryElement = function($element) {
var that = this;
//@ id <number> Unique id
that.id = Ox.uid(); // fixme: rename to oxid!
//@ ox <string> OxJS version
that.ox = Ox.VERSION; // fixme: remove!
//@ $element <object> The jQuery-wrapped DOM element
that.$element = $element.data({
oxid: that.id
});
// FIXME: the following two lines should make it possible to do
// $('<div>').appendTo($element) ... check if it works, then replace all
//@ 0 <element> The DOM element
that[0] = that.$element[0];
//@ length <number> 1 (for compatibility with jQuery)
that.length = 1;
Ox.UI.elements[that.id] = that;
return that;
};
// add all jQuery functions to the prototype of Ox.JQueryElement
Ox.methods($('<div>'), true).forEach(function(method) {
Ox.JQueryElement.prototype[method] = function() {
var args = arguments, id, ret, that = this;
Ox.forEach(args, function(arg, i) {
// FIXME: with the changes above, is this still needed?
// if an ox object was passed
// then pass its $element instead
// so that we can do oxObj.jqFn(oxObj)
if (arg && arg.ox) {
args[i] = arg.$element;
}
});
ret = that.$element[method].apply(that.$element, args);
// if exactly one $element of an ox object was returned
// then return the ox object instead
// so that we can do oxObj.jqFn().oxFn()
return ret && ret.jquery
&& ret.length == 1
&& Ox.UI.elements[id = ret.data('oxid')]
? Ox.UI.elements[id] : ret;
};
});