X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=jquery%2Fjquery.js;h=668a592d5892f1b77bda19b21b9ccf408290a86e;hb=40fdf0ad5c0dd13546a2a0925778605c5e7b1173;hp=6b1d2f1cb1f2220f733479a8b4ef5b56ca78a5b0;hpb=6b6773fe39bfa9ebf8fbd06aeac056a571c29416;p=jquery.git diff --git a/jquery/jquery.js b/jquery/jquery.js index 6b1d2f1..668a592 100644 --- a/jquery/jquery.js +++ b/jquery/jquery.js @@ -2,6 +2,9 @@ * JQuery (http://jquery.com/) * By John Resig (http://ejohn.org/) * Under an Attribution, Share Alike License + * + * $Date$ + * $Rev$ */ function $(a,c) { @@ -32,7 +35,7 @@ function $(a,c) { // Load Dynamic Function List var self = { cur: $.Select($a,$c), - $jquery: "0.30", + $jquery: "$Rev$", // The only two getters size: function() {return this.get().length}, @@ -56,21 +59,22 @@ function $(a,c) { }, html: function(h) { return h == null && this.size() ? - this.get(0).innerHTML : this.set( "innerHTML", h ); + this.get(0).innerHTML : this.set( "innerHTML", h ); }, val: function(h) { return h == null && this.size() ? - this.get(0).value : this.set( "value", h ); + this.get(0).value : this.set( "value", h ); }, css: function(a,b) { - return this.each(function(){ - if ( !b ) - for ( var j in a ) - $.attr(this.style,j,a[j]); - else - $.attr(this.style,a,b); - }); + return a.constructor != String || b ? + this.each(function(){ + if ( !b ) + for ( var j in a ) + $.attr(this.style,j,a[j]); + else + $.attr(this.style,a,b); + }) : $.css( this.get(0), a ); }, toggle: function() { return this.each(function(){ @@ -135,10 +139,10 @@ function $(a,c) { }, append: function() { - var clone = this.size() > 1; + var clone = this.size() > 1; var a = $.clean(arguments); return this.each(function(){ - for ( var i in a ) + for ( var i = 0; i < a.length; i++ ) this.appendChild( clone ? a[i].cloneNode(true) : a[i] ); }); }, @@ -152,7 +156,7 @@ function $(a,c) { }, prepend: function() { - var clone = this.size() > 1; + var clone = this.size() > 1; var a = $.clean(arguments); return this.each(function(){ for ( var i = a.length - 1; i >= 0; i-- ) @@ -161,16 +165,16 @@ function $(a,c) { }, before: function() { - var clone = this.size() > 1; + var clone = this.size() > 1; var a = $.clean(arguments); return this.each(function(){ - for ( var i in a ) + for ( var i = 0; i < a.length; i++ ) this.parentNode.insertBefore( clone ? a[i].cloneNode(true) : a[i], this ); }); }, after: function() { - var clone = this.size() > 1; + var clone = this.size() > 1; var a = $.clean(arguments); return this.each(function(){ for ( var i = a.length - 1; i >= 0; i-- ) @@ -209,23 +213,25 @@ function $(a,c) { this.cur = this.old; return this; }, - + parent: function(a) { - if ( a == null ) a = 1; this.cur = $.map(this.cur,function(d){ - var b = $.parents(d); - if ( a == 0 ) - return b; - else if ( a.constructor == String ) { - var c = $.filter(a,b); - return c.length > 0 ? c[0] : null; - } else - return b.length >= a ? b[a-1] : null; + return d.parentNode; }); + if ( a ) this.cur = $.filter(a,this.cur).r; return this; }, parents: function(a) { + this.cur = $.map(this.cur,$.parents); + if ( a ) this.cur = $.filter(a,this.cur).r; + return this; + }, + + siblings: function(a) { + // Incorrect, need to exclude current element + this.cur = $.map(this.cur,$.sibling); + if ( a ) this.cur = $.filter(a,this.cur).r; return this; }, @@ -280,7 +286,7 @@ $.apply = function(o,f,a) { a = a || []; if ( f.apply ) return f.apply( o, a ); - else { + else { var p = []; for (var i = 0; i < a.length; i++) p[i] = 'a['+i+']'; @@ -294,37 +300,37 @@ $.apply = function(o,f,a) { $.getCSS = function(e,p) { // Adapted from Prototype 1.4.0 if ( p == 'height' || p == 'width' ) { - if ($.getCSS(e,"display") != 'none') + if ($.getCSS(e,"display") != 'none') return p == 'height' ? e.offsetHeight || parseInt(e.style.height) : e.offsetWidth || parseInt(e.style.width); - var els = e.style; - var ov = els.visibility; - var op = els.position; + var els = e.style; + var ov = els.visibility; + var op = els.position; var od = els.display; - els.visibility = 'hidden'; - els.position = 'absolute'; - els.display = ''; + els.visibility = 'hidden'; + els.position = 'absolute'; + els.display = ''; var oHeight = e.clientHeight || parseInt(e.style.height); - var oWidth = e.clientWidth || parseInt(e.style.width); - els.display = od; - els.position = op; - els.visibility = ov; + var oWidth = e.clientWidth || parseInt(e.style.width); + els.display = od; + els.position = op; + els.visibility = ov; return p == 'height' ? oHeight : oWidth; - } + } - if (e.style[p]) - return e.style[p]; - else if (e.currentStyle) - return e.currentStyle[p]; - else if (document.defaultView && document.defaultView.getComputedStyle) { - p = p.replace(/([A-Z])/g,"-$1"); - p = p.toLowerCase(); - var s = document.defaultView.getComputedStyle(e,""); - var r = s ? s.getPropertyValue(p) : p; + if (e.style[p]) + return e.style[p]; + else if (e.currentStyle) + return e.currentStyle[p]; + else if (document.defaultView && document.defaultView.getComputedStyle) { + p = p.replace(/([A-Z])/g,"-$1"); + p = p.toLowerCase(); + var s = document.defaultView.getComputedStyle(e,""); + var r = s ? s.getPropertyValue(p) : p; return r; - } else - return null; + } else + return null; }; $.css = $.getCSS; @@ -378,7 +384,7 @@ $.g = { checked: "a.checked" }, // TODO: Write getAttribute helper - ".": "$.hasWord(a.className||a.getAttribute('class'),m[2])", + ".": "$.hasWord(a,m[2])", "@": { "=": "$.attr(a,m[3]) == m[4]", "!=": "$.attr(a,m[3]) != m[4]", @@ -410,118 +416,118 @@ $.Select = function( t, context ) { } var ret = [context]; - var done = []; + var done = []; var last = null; - while ( t.length > 0 && last != t ) { - var r = []; - last = t; - - t = $.cleanSpaces(t); - - var re = new RegExp( "^//", "i" ); - t = t.replace( re, "" ); - - if ( t.indexOf('..') == 0 || t.indexOf('/..') == 0 ) { + while ( t.length > 0 && last != t ) { + var r = []; + last = t; + + t = $.cleanSpaces(t); + + var re = new RegExp( "^//", "i" ); + t = t.replace( re, "" ); + + if ( t.indexOf('..') == 0 || t.indexOf('/..') == 0 ) { if ( t.indexOf('/') == 0 ) t = t.substr(1,t.length); - r = $.map( ret, function(a){ return a.parentNode; } ); + r = $.map( ret, function(a){ return a.parentNode; } ); t = t.substr(2,t.length); t = $.cleanSpaces(t); - } else if ( t.indexOf('>') == 0 || t.indexOf('/') == 0 ) { - r = $.map( ret, function(a){ return ( a.childNodes.length > 0 ? $.sibling( a.firstChild ) : null ); } ); + } else if ( t.indexOf('>') == 0 || t.indexOf('/') == 0 ) { + r = $.map( ret, function(a){ return ( a.childNodes.length > 0 ? $.sibling( a.firstChild ) : null ); } ); t = t.substr(1,t.length); t = $.cleanSpaces(t); - } else if ( t.indexOf('+') == 0 ) { - r = $.map( ret, function(a){ return $.sibling(a).next; } ); + } else if ( t.indexOf('+') == 0 ) { + r = $.map( ret, function(a){ return $.sibling(a).next; } ); t = t.substr(1,t.length); t = $.cleanSpaces(t); - } else if ( t.indexOf('~') == 0 ) { - r = $.map( ret, function(a){ - var r = []; - var s = $.sibling(a); - if ( s.n > 0 ) - for ( var i = s.n; i < s.length; i++ ) - r[r.length] = s[i]; - return r; - } ); + } else if ( t.indexOf('~') == 0 ) { + r = $.map( ret, function(a){ + var r = []; + var s = $.sibling(a); + if ( s.n > 0 ) + for ( var i = s.n; i < s.length; i++ ) + r[r.length] = s[i]; + return r; + }); t = t.substr(1,t.length); t = $.cleanSpaces(t); - } else if ( t.indexOf(',') == 0 || t.indexOf('|') == 0 ) { - if ( ret[0] == context ) ret.shift(); - done = $.merge( done, ret ); - r = ret = [context]; + } else if ( t.indexOf(',') == 0 || t.indexOf('|') == 0 ) { + if ( ret[0] == context ) ret.shift(); + done = $.merge( done, ret ); + r = ret = [context]; t = " " + t.substr(1,t.length); - } else { - var re = new RegExp( "^([#.]?)([a-z0-9\\*_-]*)", "i" ); - var m = re.exec(t); - + } else { + var re = new RegExp( "^([#.]?)([a-z0-9\\*_-]*)", "i" ); + var m = re.exec(t); + if ( m[1] == "#" ) { // Ummm, should make this work in all XML docs var oid = document.getElementById(m[2]); r = oid ? [oid] : []; - t = t.replace( re, "" ); + t = t.replace( re, "" ); } else { - if ( m[2] == "" || m[1] == "." ) m[2] = "*"; - - for ( var i = 0; i < ret.length; i++ ) { - var o = ret[i]; - if ( o ) { - switch( m[2] ) { - case '*': - r = $.merge( $.getAll(o), r ); - break; - case 'text': case 'radio': case 'checkbox': case 'hidden': - case 'button': case 'submit': case 'image': case 'password': - case 'reset': case 'file': - r = $.merge( $.grep( $.tag(o,"input"), - function(a){ return a.type == m[2] }), r ); - break; - case 'input': - r = $.merge( $.tag(o,"input"), r ); - r = $.merge( $.tag(o,"select"), r ); - r = $.merge( $.tag(o,"textarea"), r ); - break; - default: - r = $.merge( r, $.tag(o,m[2]) ); - break; - } - } - } + if ( m[2] == "" || m[1] == "." ) m[2] = "*"; + + for ( var i = 0; i < ret.length; i++ ) { + var o = ret[i]; + if ( o ) { + switch( m[2] ) { + case '*': + r = $.merge( $.getAll(o), r ); + break; + case 'text': case 'radio': case 'checkbox': case 'hidden': + case 'button': case 'submit': case 'image': case 'password': + case 'reset': case 'file': + r = $.merge( $.grep( $.tag(o,"input"), + function(a){ return a.type == m[2] }), r ); + break; + case 'input': + r = $.merge( $.tag(o,"input"), r ); + r = $.merge( $.tag(o,"select"), r ); + r = $.merge( $.tag(o,"textarea"), r ); + break; + default: + r = $.merge( r, $.tag(o,m[2]) ); + break; + } + } + } } - } + } var val = $.filter(t,r); ret = r = val.r; t = $.cleanSpaces(val.t); - } + } - if ( ret && ret[0] == context ) ret.shift(); - done = $.merge( done, ret ); - return done; + if ( ret && ret[0] == context ) ret.shift(); + done = $.merge( done, ret ); + return done; }; $.tag = function(a,b){ - return a && typeof a.getElementsByTagName != "undefined" ? - a.getElementsByTagName( b ) : []; + return a && typeof a.getElementsByTagName != "undefined" ? + a.getElementsByTagName( b ) : []; }; $.attr = function(o,a,v){ - if ( a && a.constructor == String ) { - var fix = { - 'for': 'htmlFor', - 'text': 'cssText', - 'class': 'className', - 'float': 'cssFloat' - }; - a = (fix[a] && fix[a].replace && fix[a]) || a; - var r = new RegExp("-([a-z])","ig"); - a = a.replace(r,function(z,b){return b.toUpperCase();}); - if ( v != null ) { - o[a] = v; - if ( o.setAttribute ) o.setAttribute(a,v); - } - return o[a] || o.getAttribute(a) || ''; - } else return ''; + if ( a && a.constructor == String ) { + var fix = { + 'for': 'htmlFor', + 'text': 'cssText', + 'class': 'className', + 'float': 'cssFloat' + }; + a = (fix[a] && fix[a].replace && fix[a]) || a; + var r = new RegExp("-([a-z])","ig"); + a = a.replace(r,function(z,b){return b.toUpperCase();}); + if ( v != null ) { + o[a] = v; + if ( o.setAttribute ) o.setAttribute(a,v); + } + return o[a] || o.getAttribute(a) || ''; + } else return ''; }; $.filter = function(t,r,not) { @@ -570,41 +576,43 @@ $.filter = function(t,r,not) { $.parents = function(a){ var b = []; var c = a.parentNode; - while ( c != null && c != c.documentElement ) { + while ( c != null && c != document ) { b[b.length] = c; c = c.parentNode; } return b; }; -$.cleanSpaces = function(t){return t.replace(/^\s+|\s+$/g, '')}; +$.cleanSpaces = function(t){ + return t.replace(/^\s+|\s+$/g, '') +}; $.ofType = function(a,n,e) { - var t = $.grep($.sibling(a),function(b){return b.nodeName == a.nodeName}); - if ( e ) n = t.length - n - 1; - return n != null ? t[n] == a : t.length; + var t = $.grep($.sibling(a),function(b){return b.nodeName == a.nodeName}); + if ( e ) n = t.length - n - 1; + return n != null ? t[n] == a : t.length; }; $.sibling = function(a,n,e) { - var type = []; - var tmp = a.parentNode.childNodes; - for ( var i = 0; i < tmp.length; i++ ) { - if ( tmp[i].nodeType == 1 ) - type[type.length] = tmp[i]; - if ( tmp[i] == a ) - type.n = type.length - 1; - } - if ( e ) n = type.length - n - 1; - type.cur = ( type[n] == a ); - type.prev = ( type.n > 0 ? type[type.n - 1] : null ); - type.next = ( type.n < type.length - 1 ? type[type.n + 1] : null ); - return type; + var type = []; + var tmp = a.parentNode.childNodes; + for ( var i = 0; i < tmp.length; i++ ) { + if ( tmp[i].nodeType == 1 ) + type[type.length] = tmp[i]; + if ( tmp[i] == a ) + type.n = type.length - 1; + } + if ( e ) n = type.length - n - 1; + type.cur = ( type[n] == a ); + type.prev = ( type.n > 0 ? type[type.n - 1] : null ); + type.next = ( type.n < type.length - 1 ? type[type.n + 1] : null ); + return type; }; $.hasWord = function(e,a) { - if ( e == null ) return false; - if ( e.className != null ) e = e.className; - return new RegExp("(^|\\s)" + a + "(\\s|$)").test(e) + if ( e == null ) return false; + if ( e.className != null ) e = e.className; + return new RegExp("(^|\\s)" + a + "(\\s|$)").test(e) }; $.getAll = function(o,r) { @@ -624,36 +632,36 @@ $.merge = function(a,b) { for ( var j = 0; j < b.length; j++ ) d[j] = b[j]; - for ( var i = 0; i < a.length; i++ ) { - var c = true; - for ( var j = 0; j < b.length; j++ ) - if ( a[i] == b[j] ) - c = false; - if ( c ) - d[d.length] = a[i]; - } + for ( var i = 0; i < a.length; i++ ) { + var c = true; + for ( var j = 0; j < b.length; j++ ) + if ( a[i] == b[j] ) + c = false; + if ( c ) + d[d.length] = a[i]; + } return d; }; $.grep = function(a,f,s) { - var r = []; + var r = []; if ( a != null ) for ( var i = 0; i < a.length; i++ ) if ( (!s && f(a[i],i)) || (s && !f(a[i],i)) ) r[r.length] = a[i]; - return r; + return r; }; $.map = function(a,f) { - var r = []; - for ( var i = 0; i < a.length; i++ ) { - var t = f(a[i],i); - if ( t != null ) { - if ( t.constructor != Array ) t = [t]; + var r = []; + for ( var i = 0; i < a.length; i++ ) { + var t = f(a[i],i); + if ( t != null ) { + if ( t.constructor != Array ) t = [t]; r = $.merge( t, r ); } - } - return r; + } + return r; }; // Bind an event to an element @@ -690,9 +698,10 @@ function removeEvent(element, type, handler) { } }; -function triggerEvent(element,type) { - if ( element["on" + type] ) - element["on" + type]({ type: type }); +function triggerEvent(element,type,data) { + data = data || [{ type: type }]; + if ( element && element["on" + type] ) + $.apply( element, element["on" + type], data ); } function handleEvent(event) { @@ -701,7 +710,7 @@ function handleEvent(event) { var handlers = []; for ( var i in this.events[event.type] ) handlers[handlers.length] = this.events[event.type][i]; - for ( var i = 0; i < handlers.length; i++ ) { + for ( var i = 0; i < handlers.length; i++ ) { try { if ( handlers[i].constructor == Function ) { this.$$handleEvent = handlers[i]; @@ -743,6 +752,6 @@ $.fn.text = function(e) { }; setTimeout(function(){ - if ( typeof Prototype != "undefined" && $.g == null && $.clean == null ) - throw "Error: You are overwriting jQuery, please include jQuery last."; -}, 1000); + if ( typeof Prototype != "undefined" && $.g == null && $.clean == null ) + throw "Error: You are overwriting jQuery, please include jQuery last."; +}, 1000); \ No newline at end of file