aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimmy Willison <timmywillisn@gmail.com>2013-07-04 14:00:26 -0400
committerTimmy Willison <timmywillisn@gmail.com>2013-07-04 14:00:26 -0400
commit1f67d07c60c37e60052db37fc03d42af482c2d03 (patch)
tree190247a4b91a35338fdc339376c205eee1e39fdd
parentaee465987c6e2db9e37900e91161584b2c92390e (diff)
downloadjquery-1f67d07c60c37e60052db37fc03d42af482c2d03.tar.gz
jquery-1f67d07c60c37e60052db37fc03d42af482c2d03.zip
Support CommonJS environments by accentuating the need for a window with a document. Fixes #13768.
-rw-r--r--Gruntfile.js2
-rw-r--r--src/exports.js24
-rw-r--r--src/intro.js36
-rw-r--r--src/outro.js6
4 files changed, 40 insertions, 28 deletions
diff --git a/Gruntfile.js b/Gruntfile.js
index 952515b46..d582451b7 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -68,8 +68,6 @@ module.exports = function( grunt ) {
{ flag: "offset", src: "src/offset.js", needs: ["css"] },
{ flag: "dimensions", src: "src/dimensions.js", needs: ["css"] },
{ flag: "deprecated", src: "src/deprecated.js" },
-
- "src/exports.js",
"src/outro.js"
]
}
diff --git a/src/exports.js b/src/exports.js
deleted file mode 100644
index 2d5c56f8a..000000000
--- a/src/exports.js
+++ /dev/null
@@ -1,24 +0,0 @@
-if ( typeof module === "object" && module && typeof module.exports === "object" ) {
- // Expose jQuery as module.exports in loaders that implement the Node
- // module pattern (including browserify). Do not create the global, since
- // the user will be storing it themselves locally, and globals are frowned
- // upon in the Node module world.
- module.exports = jQuery;
-} else {
- // Register as a named AMD module, since jQuery can be concatenated with other
- // files that may use define, but not via a proper concatenation script that
- // understands anonymous AMD modules. A named AMD is safest and most robust
- // way to register. Lowercase jquery is used because AMD module names are
- // derived from file names, and jQuery is normally delivered in a lowercase
- // file name. Do this after creating the global so that if an AMD module wants
- // to call noConflict to hide this version of jQuery, it will work.
- if ( typeof define === "function" && define.amd ) {
- define( "jquery", [], function () { return jQuery; } );
- }
-}
-
-// If there is a window object, that at least has a document property,
-// define jQuery and $ identifiers
-if ( typeof window === "object" && typeof window.document === "object" ) {
- window.jQuery = window.$ = jQuery;
-}
diff --git a/src/intro.js b/src/intro.js
index c9b1dcdad..64032d4ca 100644
--- a/src/intro.js
+++ b/src/intro.js
@@ -11,7 +11,41 @@
*
* Date: @DATE
*/
-(function( window, undefined ) {
+
+(function ( window, factory ) {
+
+ if ( typeof module === "object" && typeof module.exports === "object" ) {
+ // Expose a jQuery-making factory as module.exports in loaders that implement the Node
+ // module pattern (including browserify).
+ // This accentuates the need for a real window in the environment
+ // e.g. var jQuery = require("jquery")(window);
+ module.exports = function( w ) {
+ w = w || window;
+ if ( !w.document ) {
+ throw new Error("jQuery requires a window with a document");
+ }
+ return factory( w );
+ };
+ } else {
+ // Execute the factory to produce jQuery
+ var jQuery = factory( window );
+
+ // Register as a named AMD module, since jQuery can be concatenated with other
+ // files that may use define, but not via a proper concatenation script that
+ // understands anonymous AMD modules. A named AMD is safest and most robust
+ // way to register. Lowercase jquery is used because AMD module names are
+ // derived from file names, and jQuery is normally delivered in a lowercase
+ // file name. Do this after creating the global so that if an AMD module wants
+ // to call noConflict to hide this version of jQuery, it will work.
+ if ( typeof define === "function" && define.amd ) {
+ define( "jquery", [], function() {
+ return jQuery;
+ });
+ }
+ }
+
+// Pass this, window may not be defined yet
+}(this, function ( window, undefined ) {
// Can't do this because several apps including ASP.NET trace
// the stack via arguments.caller.callee and Firefox dies if
diff --git a/src/outro.js b/src/outro.js
index ac484391c..20cec437c 100644
--- a/src/outro.js
+++ b/src/outro.js
@@ -1,2 +1,6 @@
+// Expose jQuery and $ identifiers, even in
+// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
+// and CommonJS for browser emulators (#13566)
+return (window.jQuery = window.$ = jQuery);
-})( window );
+}));