X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=jquery%2Fjquery.js;h=c377f63d5ac14ee1832a476249ae4592a77d9147;hb=7eb6a25d5e223053a1ebc824c78bf854a755ccd0;hp=475ca5608e9f324adac89a183d2306786d730568;hpb=aee5a0fe70baedc71ca3b6f87d80a88f794e6d31;p=jquery.git diff --git a/jquery/jquery.js b/jquery/jquery.js index 475ca56..c377f63 100644 --- a/jquery/jquery.js +++ b/jquery/jquery.js @@ -1,12 +1,17 @@ /* - * jQuery (http://jquery.com/) - * By John Resig (http://ejohn.org/) - * Under an Attribution, Share Alike License + * jQuery (jquery.com) * - * $Date: $ - * $Rev: $ + * Copyright (c) 2006 John Resig (ejohn.org) + * Licensed under the MIT License: + * http://www.opensource.org/licenses/mit-license.php + * + * $Date$ + * $Rev$ */ +/* For JSLint (jslint.com): */ +/*extern ActiveXObject Prototype setTimeout setInterval clearInterval document window XMLHttpRequest navigator*/ + function $(a,c) { var $a = a || $.context || document; var $c = c && c.$jquery && c.get(0) || c; @@ -18,15 +23,16 @@ function $(a,c) { var re = new RegExp( "[^a-zA-Z0-9_-]" ); if ( !re.test($a) ) { $c = $c && $c.documentElement || document; - if ( $c.getElementsByTagName($a).length == 0 ) { + if ( $c.getElementsByTagName($a).length === 0 ) { var obj = $c.getElementById($a); - if ( obj != null ) return obj; + if ( obj ) { return obj; } } } } else if ( $a.constructor == Array ) { return $.map( $a, function(b){ - if ( b.constructor == String ) + if ( b.constructor == String ) { return document.getElementById(b); + } return b; }); } @@ -38,74 +44,87 @@ function $(a,c) { $jquery: "$Rev$", // The only two getters - size: function() {return this.get().length}, + size: function() {return this.get().length;}, get: function(i) { - return i == null ? this.cur : this.cur[i]; + return typeof i == 'undefined' ? this.cur : this.cur[i]; }, each: function(f) { - for ( var i = 0; i < this.size(); i++ ) + for ( var i = 0; i < this.size(); i++ ) { $.apply( this.get(i), f, [i] ); + } return this; }, set: function(a,b) { return this.each(function(){ - if ( b == null ) - for ( var j in a ) + if ( typeof b == 'undefined' ) { + for ( var j in a ) { $.attr(this,j,a[j]); - else + } + } else { $.attr(this,a,b); + } }); }, html: function(h) { - return h == null && this.size() ? - this.get(0).innerHTML : this.set( "innerHTML", h ); + return typeof h == 'undefined' && this.size() ? + this.get(0).innerHTML : this.set( "innerHTML", h ); }, val: function(h) { - return h == null && this.size() ? - this.get(0).value : this.set( "value", h ); + return typeof h == 'undefined' && this.size() ? + 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(){ var d = $.getCSS(this,"display"); - if ( d == "none" || d == '' ) + if ( d == "none" || d === '' ) { $(this).show(); - else + } else { $(this).hide(); + } }); }, show: function(a) { return this.each(function(){ this.style.display = this.$$oldblock ? this.$$oldblock : ''; - if ( $.getCSS(this,"display") == "none" ) this.style.display = 'block'; + if ( $.getCSS(this,"display") == "none" ) { + this.style.display = 'block'; + } }); }, hide: function(a) { return this.each(function(){ this.$$oldblock = $.getCSS(this,"display"); - if ( this.$$oldblock == "none" ) this.$$oldblock = 'block'; + if ( this.$$oldblock == "none" ) { + this.$$oldblock = 'block'; + } this.style.display = 'none'; }); }, addClass: function(c) { return this.each(function(){ - if ($.hasWord(this,c)) return; + if ($.hasWord(this,c)) { + return null; + } this.className += ( this.className.length > 0 ? " " : "" ) + c; }); }, removeClass: function(c) { return this.each(function(){ - this.className = c == null ? '' : + this.className = !c ? '' : this.className.replace( new RegExp('(^|\\s*\\b[^-])'+c+'($|\\b(?=[^-]))', 'g'), ''); }); @@ -113,12 +132,13 @@ function $(a,c) { // TODO: Optomize toggleClass: function(c) { return this.each(function(){ - if ($.hasWord(this,c)) + if ($.hasWord(this,c)) { this.className = this.className.replace( new RegExp('(\\s*\\b[^-])'+c+'($|\\b(?=[^-]))', 'g'), ''); - else + } else { this.className += ( this.className.length > 0 ? " " : "" ) + c; + } }); }, remove: function() { @@ -132,70 +152,78 @@ function $(a,c) { return this.each(function(){ var b = a[0].cloneNode(true); this.parentNode.insertBefore( b, this ); - while ( b.firstChild ) b = b.firstChild; + while ( b.firstChild ) { + b = b.firstChild; + } b.appendChild( this ); }); }, 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 ) + return this.domManip(function(){ + for ( var i = 0; i < a.length; i++ ) { this.appendChild( clone ? a[i].cloneNode(true) : a[i] ); + } }); }, appendTo: function() { var a = arguments; return this.each(function(){ - for ( var i = 0; i < a.length; i++ ) + for ( var i = 0; i < a.length; i++ ) { $(a[i]).append( this ); + } }); }, 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-- ) + 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 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-- ) + for ( var i = a.length - 1; i >= 0; i-- ) { this.parentNode.insertBefore( clone ? a[i].cloneNode(true) : a[i], this.nextSibling ); + } }); }, empty: function() { return this.each(function(){ - while ( this.firstChild ) + while ( this.firstChild ) { this.removeChild( this.firstChild ); + } }); }, bind: function(t,f) { - return this.each(function(){addEvent(this,t,f);}); + return this.each(function(){$.event.add(this,t,f);}); }, unbind: function(t,f) { - return this.each(function(){removeEvent(this,t,f);}); + return this.each(function(){$.event.remove(this,t,f);}); }, trigger: function(t) { - return this.each(function(){triggerEvent(this,t);}); + return this.each(function(){$.event.trigger(this,t);}); }, find: function(t) { @@ -212,23 +240,31 @@ 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; }, @@ -257,36 +293,56 @@ function $(a,c) { // TODO: Remove need to return this for ( var i in $.fn ) { - if ( self[i] != null ) + if ( self[i] !== null ) { self["_"+i] = self[i]; + } self[i] = $.fn[i]; } if ( typeof Prototype != "undefined" && $a.constructor != String ) { - if ( $c ) $a = self.get(); - for ( var i in self ) {(function(j){ + if ( $c ) { + $a = self.get(); + } + for ( var k in self ) {(function(j){ try { - if ( $a[j] == null ) { + if ( !$a[j] ) { $a[j] = function() { return $.apply(self,self[j],arguments); }; } } catch(e) {} - })(i);} + })(k);} return $a; } return self; } +(function(){ + var b = navigator.userAgent.toLowerCase(); + + // Figure out what browser is being used + $.browser = + ( /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) { a = a || []; - if ( f.apply ) + if ( f.apply ) { return f.apply( o, a ); - else { + } else { var p = []; - for (var i = 0; i < a.length; i++) + for (var i = 0; i < a.length; i++) { p[i] = 'a['+i+']'; + } o.$$exec = this; var r = eval('o.$$exec(' + p.join(',') + ')'); o.$$exec = null; @@ -297,60 +353,120 @@ $.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') - 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 od = 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; - return p == 'height' ? oHeight : oWidth; - } + + // 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")); + + var pw = !$.boxModel ? 0 : + parseInt($.css(e,"paddingLeft")) + parseInt($.css(e,"paddingRight")) + + parseInt($.css(e,"borderLeft")) + parseInt($.css(e,"borderRight")); + + var oHeight, oWidth; + + if ($.css(e,"display") != 'none') { + oHeight = e.offsetHeight || parseInt(e.style.height,10); + oWidth = e.offsetWidth || parseInt(e.style.width,10); + } else { + var els = e.style; + var ov = els.visibility; + var op = els.position; + var od = els.display; + els.visibility = 'hidden'; + els.position = 'absolute'; + els.display = ''; + oHeight = e.clientHeight || parseInt(e.style.height,10); + oWidth = e.clientWidth || parseInt(e.style.width,10); + els.display = od; + els.position = op; + els.visibility = ov; + } + + return p == 'height' ? + (oHeight - ph < 0 ? 0 : oHeight - ph) : + (oWidth - pw < 0 ? 0 : oWidth - pw); + } - 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; $.clean = function(a) { var r = []; - for ( var i = 0; i < a.length; i++ ) + for ( var i = 0; i < a.length; i++ ) { if ( a[i].constructor == String ) { + + if ( !a[i].indexOf(""; + } else if ( !a[i].indexOf(""; + } + var div = document.createElement("div"); div.innerHTML = a[i]; - for ( var j = 0; j < div.childNodes.length; j++ ) + + if ( tr || td ) { + div = div.firstChild.firstChild; + if ( td ) { + div = div.firstChild; + } + } + + for ( var j = 0; j < div.childNodes.length; j++ ) { r[r.length] = div.childNodes[j]; - } else if ( a[i].length ) - for ( var j = 0; j < a[i].length; j++ ) - r[r.length] = a[i][j]; - else if ( a[i] != null ) + } + } else if ( a[i].length && !a[i].nodeType ) { + for ( var k = 0; k < a[i].length; k++ ) { + r[r.length] = a[i][k]; + } + } else if ( a[i] !== null ) { r[r.length] = a[i].nodeType ? a[i] : document.createTextNode(a[i].toString()); + } + } return r; }; +$.fn = {}; + +/** + * A wrapper function for each() to be used by append and prepend. + * Handles cases where you're trying to modify the inner contents of + * a table, when you actually need to work with the tbody. + */ +$.fn.domManip = function(fn){ + return this.each(function(){ + var obj = this; + + if ( this.nodeName == 'TABLE' ) { + if ( !this.firstChild ) { + this.appendChild( document.createElement("tbody") ); + } + obj = this.firstChild; + } + + $.apply( obj, fn ); + }); +}; + $.g = { '': "m[2] == '*' || a.nodeName.toUpperCase() == m[2].toUpperCase()", - '#': "a.id == m[2]", + '#': "a.getAttribute('id') && a.getAttribute('id').nodeValue == m[2]", ':': { lt: "i < m[3]-0", gt: "i > m[3]-0", @@ -380,8 +496,7 @@ $.g = { disabled: "a.disabled", 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]", @@ -395,219 +510,240 @@ $.g = { "[": "$.Select(m[2],a).length > 0" }; -$.fn = {}; - $.Select = function( t, context ) { context = context || $.context || document; - if ( t.constructor != String ) return [t]; + if ( t.constructor != String ) { + return [t]; + } - if ( t.indexOf("//") == 0 ) { + if ( t.indexOf("//") === 0 ) { context = context.documentElement; t = t.substr(2,t.length); - } else if ( t.indexOf("/") == 0 ) { + } else if ( t.indexOf("/") === 0 ) { context = context.documentElement; t = t.substr(1,t.length); // FIX Assume the root element is right :( - if ( t.indexOf('/') ) + if ( t.indexOf('/') ) { t = t.substr(t.indexOf('/'),t.length); + } } var ret = [context]; - var done = []; + var done = []; var last = null; - while ( t.length > 0 && last != t ) { + 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 ) + + 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 re2 = new RegExp( "^([#.]?)([a-z0-9\\*_-]*)", "i" ); + var m = re2.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, "" ); + r = ret = oid ? [oid] : []; + t = t.replace( re2, "" ); } 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 ( t ) { + var val = $.filter(t,r); + ret = r = val.r; + t = $.cleanSpaces(val.t); + } + } + + if ( ret && ret[0] == context ) { ret.shift(); } + done = $.merge( done, ret ); - if ( ret && ret[0] == context ) ret.shift(); - done = $.merge( done, ret ); - return done; + 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 ( typeof v != 'undefined' ) { + o[a] = v; + if ( o.setAttribute ) { + o.setAttribute(a,v); + } + } + return o[a] || o.getAttribute(a) || ''; + } else { + return ''; + } }; $.filter = function(t,r,not) { var g = $.grep; - if ( not == false ) var g = function(a,f) {return $.grep(a,f,true);}; + if ( not === false ) { + g = function(a,f) {return $.grep(a,f,true);}; + } while ( t.length > 0 && t.match(/^[:\\.#\\[a-zA-Z\\*]/) ) { - var re = new RegExp( "^\\[ *@([a-z0-9\\(\\)_-]+) *([~!\\|\\*$^=]*) *'?\"?([^'\"]*)'?\"? *\\]", "i" ); + var re = new RegExp( "^\\[ *@([a-z0-9\\*\\(\\)_-]+) *([~!\\|\\*$^=]*) *'?\"?([^'\"]*)'?\"? *\\]", "i" ); var m = re.exec(t); - if ( m != null ) { + if ( m !== null ) { m = ['', '@', m[2], m[1], m[3]]; } else { - var re = new RegExp( "^(\\[) *([^\\]]*) *\\]", "i" ); - var m = re.exec(t); + re = new RegExp( "^(\\[) *([^\\]]*) *\\]", "i" ); + m = re.exec(t); - if ( m == null ) { - var re = new RegExp( "^(:)([a-z0-9\\*_-]*)\\( *[\"']?([^ \\)'\"]*)['\"]? *\\)", "i" ); - var m = re.exec(t); + if ( m === null ) { + re = new RegExp( "^(:)([a-z0-9\\*_-]*)\\( *[\"']?([^ \\)'\"]*)['\"]? *\\)", "i" ); + m = re.exec(t); - if ( m == null ) { - var re = new RegExp( "^([:\\.#]*)([a-z0-9\\*_-]*)", "i" ); - var m = re.exec(t); + if ( m === null ) { + re = new RegExp( "^([:\\.#]*)([a-z0-9\\*_-]*)", "i" ); + m = re.exec(t); } } } t = t.replace( re, "" ); - if ( m[1] == ":" && m[2] == "not" ) + if ( m[1] == ":" && m[2] == "not" ) { r = $.filter(m[3],r,false).r; - else { - if ( $.g[m[1]].constructor == String ) - var f = $.g[m[1]]; - else if ( $.g[m[1]][m[2]] ) - var f = $.g[m[1]][m[2]]; + } else { + var f = null; + + if ( $.g[m[1]].constructor == String ) { + f = $.g[m[1]]; + } else if ( $.g[m[1]][m[2]] ) { + f = $.g[m[1]][m[2]]; + } - if ( f != null ) { - eval("f = function(a,i){return " + f + "}"); + if ( f !== null ) { + eval('f = function(a,i){return ' + f + '}'); r = g( r, f ); } } } + return { r: r, t: t }; }; $.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 typeof n != 'undefined' ? 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 ( typeof e == 'undefined' ) { return false; } + if ( e.className !== null ) { e = e.className; } + return new RegExp("(^|\\s)" + a + "(\\s|$)").test(e); }; $.getAll = function(o,r) { @@ -624,110 +760,133 @@ $.getAll = function(o,r) { $.merge = function(a,b) { var d = []; - for ( var j = 0; j < b.length; j++ ) - d[j] = b[j]; + for ( var k = 0; k < b.length; k++ ) { d[k] = b[k]; } - 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 ) + 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 = []; - if ( a != null ) - for ( var i = 0; i < a.length; i++ ) - if ( (!s && f(a[i],i)) || (s && !f(a[i],i)) ) + var r = []; + if ( typeof a != 'undefined' ) { + 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; }; +$.event = {}; + // Bind an event to an element // Original by Dean Edwards -function addEvent(element, type, handler) { - if ( element.location ) element = window; // Ughhhhh.... - if (!handler.$$guid) handler.$$guid = addEvent.guid++; - if (!element.events) element.events = {}; +$.event.add = function(element, type, handler) { + // For whatever reason, IE has trouble passing the window object + // around, causing it to be cloned in the process + if ( $.browser == "msie" && typeof element.setInterval != "undefined" ) { + element = window; + } + + if (!handler.$$guid) { handler.$$guid = $.event.add.guid++; } + if (!element.events) { element.events = {}; } var handlers = element.events[type]; if (!handlers) { handlers = element.events[type] = {}; - if (element["on" + type]) + if (element["on" + type]) { handlers[0] = element["on" + type]; + } } handlers[handler.$$guid] = handler; - element["on" + type] = handleEvent; + element["on" + type] = $.event.handle; }; -addEvent.guid = 1; + +$.event.add.guid = 1; // Detach an event or set of events from an element -function removeEvent(element, type, handler) { +$.event.remove = function(element, type, handler) { if (element.events) { if (type && element.events[type]) { if ( handler ) { delete element.events[type][handler.$$guid]; } else { - for ( var i in element.events[type] ) + for ( var i in element.events[type] ) { delete element.events[type][i]; + } } } else { - for ( var i in element.events ) - removeEvent( element, i ); + for ( var j in element.events ) { + $.event.remove( element, j ); + } } } }; -function triggerEvent(element,type) { - if ( element["on" + type] ) - element["on" + type]({ type: type }); -} +$.event.trigger = function(element,type,data) { + data = data || [ $.event.fix({ type: type }) ]; + if ( element && element["on" + type] ) { + $.apply( element, element["on" + type], data ); + } +}; -function handleEvent(event) { - var returnValue = true; - event = event || fixEvent(window.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++ ) { - try { - if ( handlers[i].constructor == Function ) { - this.$$handleEvent = handlers[i]; - if (this.$$handleEvent(event) === false) { - event.preventDefault(); - event.stopPropagation(); - returnValue = false; - } +$.event.handle = function(event) { + if ( !event && !window.event ) { return null; } + + var returnValue = true, handlers = []; + event = event || $.event.fix(window.event); + + for ( var j in this.events[event.type] ) { + handlers[handlers.length] = this.events[event.type][j]; + } + + for ( var i = 0; i < handlers.length; i++ ) { + if ( handlers[i].constructor == Function ) { + this.$$handleEvent = handlers[i]; + if (this.$$handleEvent(event) === false) { + event.preventDefault(); + event.stopPropagation(); + returnValue = false; } - } catch(e){} + } } return returnValue; }; -function fixEvent(event) { - event.preventDefault = fixEvent.preventDefault; - event.stopPropagation = fixEvent.stopPropagation; +$.event.fix = function(event) { + event.preventDefault = $.event.fix.preventDefault; + event.stopPropagation = $.event.fix.stopPropagation; return event; }; -fixEvent.preventDefault = function() { + +$.event.fix.preventDefault = function() { this.returnValue = false; }; -fixEvent.stopPropagation = function() { + +$.event.fix.stopPropagation = function() { this.cancelBubble = true; }; @@ -737,15 +896,16 @@ $.fn.text = function(e) { e = e || this.cur; var t = ""; for ( var j = 0; j < e.length; j++ ) { - for ( var i = 0; i < e[j].childNodes.length; i++ ) + for ( var i = 0; i < e[j].childNodes.length; i++ ) { t += e[j].childNodes[i].nodeType != 1 ? e[j].childNodes[i].nodeValue : $.fn.text(e[j].childNodes[i].childNodes); + } } return t; }; -setTimeout(function(){ - if ( typeof Prototype != "undefined" && $.g == null && $.clean == null ) - throw "Error: You are overwriting jQuery, please include jQuery last."; -}, 1000); +/*setTimeout(function(){ + if ( typeof Prototype != "undefined" && $.g == null && $.clean == null ) + throw "Error: You are overwriting jQuery, please include jQuery last."; +}, 1000);*/