X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=jquery%2Fjquery.js;h=6ff825b9355f64d6709b925c582cdd54754e083b;hb=d584a884b6377553d6ba544c10484dc2a866caee;hp=6a79833fae310754bc95033d05d6ed5e6b1af4ba;hpb=34dd8afb259be3ae154887dc7db6b8a8fdab0b6a;p=jquery.git diff --git a/jquery/jquery.js b/jquery/jquery.js index 6a79833..6ff825b 100644 --- a/jquery/jquery.js +++ b/jquery/jquery.js @@ -15,7 +15,7 @@ function $(a,c) { var $a = a || $.context || document; var $c = c && c.$jquery && c.get(0) || c; - + // Since we're using Prototype's $ function, // be nice and have backwards compatability if ( typeof Prototype != "undefined" ) { @@ -42,13 +42,13 @@ function $(a,c) { var self = { cur: $.Select($a,$c), $jquery: "$Rev$", - + // The only two getters size: function() {return this.get().length;}, get: function(i) { return typeof i == 'undefined' ? this.cur : this.cur[i]; }, - + each: function(f) { for ( var i = 0; i < this.size(); i++ ) { $.apply( this.get(i), f, [i] ); @@ -74,7 +74,7 @@ function $(a,c) { return typeof h == 'undefined' && this.size() ? this.get(0).value : this.set( "value", h ); }, - + css: function(a,b) { return a.constructor != String || b ? this.each(function(){ @@ -133,7 +133,7 @@ function $(a,c) { toggleClass: function(c) { return this.each(function(){ if ($.hasWord(this,c)) { - this.className = + this.className = this.className.replace( new RegExp('(\\s*\\b[^-])'+c+'($|\\b(?=[^-]))', 'g'), ''); } else { @@ -146,7 +146,7 @@ function $(a,c) { this.cur = []; return this; }, - + wrap: function() { var a = $.clean(arguments); return this.each(function(){ @@ -158,11 +158,11 @@ function $(a,c) { b.appendChild( this ); }); }, - + append: function() { var clone = this.size() > 1; var a = $.clean(arguments); - return this.each(function(){ + return this.domManip(function(){ for ( var i = 0; i < a.length; i++ ) { this.appendChild( clone ? a[i].cloneNode(true) : a[i] ); } @@ -177,17 +177,17 @@ function $(a,c) { } }); }, - + prepend: function() { var clone = this.size() > 1; var a = $.clean(arguments); - return this.each(function(){ + return this.domManip(function(){ for ( var i = a.length - 1; i >= 0; i-- ) { this.insertBefore( clone ? a[i].cloneNode(true) : a[i], this.firstChild ); } }); }, - + before: function() { var clone = this.size() > 1; var a = $.clean(arguments); @@ -197,7 +197,7 @@ function $(a,c) { } }); }, - + after: function() { var clone = this.size() > 1; var a = $.clean(arguments); @@ -215,7 +215,7 @@ function $(a,c) { } }); }, - + bind: function(t,f) { return this.each(function(){$.event.add(this,t,f);}); }, @@ -225,7 +225,7 @@ function $(a,c) { trigger: function(t) { return this.each(function(){$.event.trigger(this,t);}); }, - + find: function(t) { var old = [], ret = []; this.each(function(){ @@ -250,7 +250,7 @@ function $(a,c) { } return this; }, - + parents: function(a) { this.cur = $.map(this.cur,$.parents); if ( a ) { @@ -258,7 +258,7 @@ function $(a,c) { } return this; }, - + siblings: function(a) { // Incorrect, need to exclude current element this.cur = $.map(this.cur,$.sibling); @@ -267,7 +267,7 @@ function $(a,c) { } return this; }, - + filter: function(t) { this.cur = $.filter(t,this.cur).r; return this; @@ -290,7 +290,7 @@ function $(a,c) { return !this.s(t); } }; - + // TODO: Remove need to return this for ( var i in $.fn ) { if ( self[i] !== null ) { @@ -298,7 +298,7 @@ function $(a,c) { } self[i] = $.fn[i]; } - + if ( typeof Prototype != "undefined" && $a.constructor != String ) { if ( $c ) { $a = self.get(); @@ -314,18 +314,24 @@ function $(a,c) { })(k);} return $a; } - + return self; } (function(){ var b = navigator.userAgent.toLowerCase(); + + // Figure out what browser is being used $.browser = - ( /safari/.test(b) && "safari" ) || + ( /webkit/.test(b) && "safari" ) || ( /opera/.test(b) && "opera" ) || ( /msie/.test(b) && "msie" ) || ( !/compatible/.test(b) && "mozilla" ) || "other"; + + // Check to see if the W3C box model is being used + $.boxModel = ( $.browser != "msie" || + document.compatMode == "CSS1Compat" ); })(); $.apply = function(o,f,a) { @@ -347,16 +353,21 @@ $.apply = function(o,f,a) { $.getCSS = function(e,p) { // Adapted from Prototype 1.4.0 if ( p == 'height' || p == 'width' ) { - var ph = $.browser == "msie" ? 0 : - parseInt($.css(e,"paddingTop")) + parseInt($.css(e,"paddingBottom")); - var pw = $.browser == "msie" ? 0 : - parseInt($.css(e,"paddingLeft")) + parseInt($.css(e,"paddingRight")); + + // Handle extra width/height provided by the W3C box model + var ph = !$.boxModel ? 0 : + parseInt($.css(e,"paddingTop")) + parseInt($.css(e,"paddingBottom")) + + parseInt($.css(e,"borderTop")) + parseInt($.css(e,"borderBottom")) || 0; + + var pw = !$.boxModel ? 0 : + parseInt($.css(e,"paddingLeft")) + parseInt($.css(e,"paddingRight")) + + parseInt($.css(e,"borderLeft")) + parseInt($.css(e,"borderRight")) || 0; var oHeight, oWidth; if ($.css(e,"display") != 'none') { - oHeight = e.offsetHeight || parseInt(e.style.height,10); - oWidth = e.offsetWidth || parseInt(e.style.width,10); + oHeight = e.offsetHeight || parseInt(e.style.height,10) || 0; + oWidth = e.offsetWidth || parseInt(e.style.width,10) || 0; } else { var els = e.style; var ov = els.visibility; @@ -376,7 +387,7 @@ $.getCSS = function(e,p) { (oHeight - ph < 0 ? 0 : oHeight - ph) : (oWidth - pw < 0 ? 0 : oWidth - pw); } - + if (e.style[p]) { return e.style[p]; } else if (e.currentStyle) { @@ -397,30 +408,62 @@ $.clean = function(a) { var r = []; for ( var i = 0; i < a.length; i++ ) { if ( a[i].constructor == String ) { - if ( a[i].indexOf("