From 6ac46e6a5a6cac509626267865980f4dfbeebc2d Mon Sep 17 00:00:00 2001
From: =?utf8?q?J=C3=B6rn=20Zaefferer?= <joern.zaefferer@gmail.com>
Date: Tue, 12 Dec 2006 20:33:10 +0000
Subject: [PATCH] Got context functions back in, added noteworthy stuff,
 replaced js linebreak replacer with xstl

---
 build/docs/js/doc.js      |    6 +-----
 build/docs/style/docs.xsl |   20 +++++++++++++++++-
 newandnoteworthy.txt      |    7 ++++++-
 src/jquery/jquery.js      |   51 +++++++++++++++++++++++++++++++++++----------
 4 files changed, 66 insertions(+), 18 deletions(-)

diff --git a/build/docs/js/doc.js b/build/docs/js/doc.js
index dcf42a5..8a144f0 100644
--- a/build/docs/js/doc.js
+++ b/build/docs/js/doc.js
@@ -18,11 +18,7 @@ $(document).ready(function(){
 	}).ToolTipDemo('#fff');
 
 	$("a.name").click(function(){
-		$("div.more,div.short",this.parentNode.parentNode)
-			.find("div.desc").each(function(){
-				$(this).html( $(this).html().replace(/\n\n/g, "<br/><br/>") );
-			}).end()
-			.toggle('slow');
+		$("div.more,div.short",this.parentNode.parentNode).toggle('slow');
 		return false;
 	});
 	
diff --git a/build/docs/style/docs.xsl b/build/docs/style/docs.xsl
index 8d9f670..ff1977a 100644
--- a/build/docs/style/docs.xsl
+++ b/build/docs/style/docs.xsl
@@ -37,7 +37,9 @@
 				</div>
 				<div class='more'>
 					<div class='desc'>
-						<xsl:value-of select="desc"/>
+						<xsl:for-each select="desc">
+							<xsl:call-template name="break" />
+						</xsl:for-each>
 					</div>
 					<xsl:for-each select="examples">
 						<div class='example'>
@@ -66,4 +68,20 @@
 </html>
 </xsl:template>
 
+<xsl:template name="break">
+		<xsl:param name="text" select="." />
+		<xsl:choose>
+			<xsl:when test="contains($text, '&#xa;&#xa;')">
+				<xsl:value-of select="substring-before($text, '&#xa;&#xa;')" />
+				<br /><br />
+				<xsl:call-template name="break">
+					<xsl:with-param name="text"	select="substring-after($text, '&#xa;&#xa;')" />
+				</xsl:call-template>
+			</xsl:when>
+			<xsl:otherwise>
+				<xsl:value-of select="$text" />
+			</xsl:otherwise>
+		</xsl:choose>
+	</xsl:template>
+
 </xsl:stylesheet>
diff --git a/newandnoteworthy.txt b/newandnoteworthy.txt
index 11650d9..5f35efc 100644
--- a/newandnoteworthy.txt
+++ b/newandnoteworthy.txt
@@ -11,4 +11,9 @@ New and Noteworthy
  - Extensions to global ajax handlers: ajaxSend, ajaxSuccess, ajaxError and ajaxComplete get XMLHttpRequest and settings passed as arguments
  - Extensions to event handling: pageX and pageY are available x-browser (IE does not provide native pageX/Y)
  - Improved docs: $(String) method has now two seperate descriptions, one for selecting elements, one for creating (html on-the-fly)
- - FX module: Most inline stlyes added by animations are now removed when the animation is complete, eg. height style when animating height (exception: display styles)
\ No newline at end of file
+ - FX module: Most inline stlyes added by animations are now removed when the animation is complete, eg. height style when animating height (exception: display styles)
+ - Added note to attr(String, Object) about issues with setting the name property on input elements
+ - Seperated internal stuff from get() into set()
+ - Merged the two API examples for each() into one more precise example
+ - Improved docs for $.browser and added docs for $.boxModel
+ - Docs for the jQuery constructor $() were improved: There is now $(String expression[, Object context]) and $(String html)
\ No newline at end of file
diff --git a/src/jquery/jquery.js b/src/jquery/jquery.js
index 9e62fe3..177d86b 100644
--- a/src/jquery/jquery.js
+++ b/src/jquery/jquery.js
@@ -22,7 +22,7 @@ window.undefined = window.undefined;
  */
 var jQuery = function(a,c) {
 
-	// Shortcut for document ready (because $(document).each() is silly)
+	// Shortcut for document ready
 	if ( a && typeof a == "function" && jQuery.fn.ready && !a.nodeType && a[0] == undefined ) // Safari reports typeof on DOM NodeLists as a function
 		return jQuery(document).ready(a);
 
@@ -55,6 +55,13 @@ var jQuery = function(a,c) {
 		// Find the matching elements and save them for later
 		jQuery.find( a, c ) );
 
+	// See if an extra function was provided
+	var fn = arguments[ arguments.length - 1 ];
+
+	// If so, execute it in context
+	if ( fn && typeof fn == "function" )
+		this.each(fn);
+
 	return this;
 };
 
@@ -789,7 +796,7 @@ jQuery.fn = jQuery.prototype = {
 	find: function(t) {
 		return this.pushStack( jQuery.map( this, function(a){
 			return jQuery.find(t,a);
-		}));
+		}), arguments );
 	},
 
 	/**
@@ -810,7 +817,7 @@ jQuery.fn = jQuery.prototype = {
 	clone: function(deep) {
 		return this.pushStack( jQuery.map( this, function(a){
 			return a.cloneNode( deep != undefined ? deep : true );
-		}));
+		}), arguments );
 	},
 
 	/**
@@ -865,7 +872,7 @@ jQuery.fn = jQuery.prototype = {
 			typeof t == "function" &&
 			jQuery.grep( this, t ) ||
 
-			jQuery.filter(t,this).r );
+			jQuery.filter(t,this).r, arguments );
 	},
 
 	/**
@@ -899,7 +906,7 @@ jQuery.fn = jQuery.prototype = {
 	not: function(t) {
 		return this.pushStack( typeof t == "string" ?
 			jQuery.filter(t,this,false).r :
-			jQuery.grep(this,function(a){ return a != t; }) );
+			jQuery.grep(this,function(a){ return a != t; }), arguments );
 	},
 
 	/**
@@ -945,7 +952,7 @@ jQuery.fn = jQuery.prototype = {
 	 */
 	add: function(t) {
 		return this.pushStack( jQuery.merge( this, typeof t == "string" ?
-			jQuery.find(t) : t.constructor == Array ? t : [t] ) );
+			jQuery.find(t) : t.constructor == Array ? t : [t] ), arguments );
 	},
 
 	/**
@@ -1021,11 +1028,28 @@ jQuery.fn = jQuery.prototype = {
 	 * @type jQuery
 	 * @cat Core
 	 */
-	pushStack: function(a) {
-		if ( !this.stack )
-			this.stack = [];
-		this.stack.push( this.get() );
-		return this.set( a );
+	pushStack: function(a,args) {
+		var fn = args && args[args.length-1];
+		var fn2 = args && args[args.length-2];
+		
+		if ( fn && fn.constructor != Function ) fn = null;
+		if ( fn2 && fn2.constructor != Function ) fn2 = null;
+
+		if ( !fn ) {
+			if ( !this.stack ) this.stack = [];
+			this.stack.push( this.get() );
+			this.set( a );
+		} else {
+			var old = this.get();
+			this.set( a );
+
+			if ( fn2 && a.length || !fn2 )
+				this.each( fn2 || fn ).set( old );
+			else
+				this.set( old ).each( fn );
+		}
+
+		return this;
 	}
 };
 
@@ -1992,6 +2016,11 @@ jQuery.extend({
  * This property is available before the DOM is ready, therefore you can
  * use it to add ready events only for certain browsers.
  *
+ * There are situations where object detections is not reliable enough, in that
+ * cases it makes sense to use browser detection. Simply try to avoid both!
+ *
+ * A combination of browser and object detection yields quite reliable results.
+ *
  * @example $.browser.msie
  * @desc Returns true if the current useragent is some version of microsoft's internet explorer
  *
-- 
1.7.10.4