From c68ab270fa8269d8b1f3360fc8ed290ba6f0e9a8 Mon Sep 17 00:00:00 2001 From: Mike Sherov Date: Thu, 7 Jun 2012 11:24:35 -0400 Subject: [PATCH] Modularize offset (exclude w/ grunt build:*:*:-offset). Closes #813. Fixes #11865 --- README.md | 31 ++++++++++++++++++ grunt.js | 2 +- test/unit/attributes.js | 61 ++++++++++++++++++++--------------- test/unit/core.js | 70 ++++++++++++++++++++++------------------- test/unit/offset.js | 4 +++ 5 files changed, 110 insertions(+), 58 deletions(-) diff --git a/README.md b/README.md index 51d40f988..1af92ee56 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,37 @@ Then, to get a complete, minified (w/ Uglify.js), linted (w/ JSHint) version of The built version of jQuery will be put in the `dist/` subdirectory. +### Modules (new in 1.8) + +Starting in jQuery 1.8, special builds can now be created that optionally exlude or include any of the following modules: + +- dimensions +- effects +- offset + + +To create a custom build, use the following special `grunt` commands: + +Exclude `dimensions`: + +#### `grunt build:*:*:-dimensions` #### + +Exclude `effects`: + +#### `grunt build:*:*:-effects` #### + +Exclude `offset`: + +#### `grunt build:*:*:-offset` #### + + +Exclude **all** optional modules: + +#### `grunt build:*:*:-dimensions:-effects:-offset` #### + + + + Running the Unit Tests -------------------------------------- diff --git a/grunt.js b/grunt.js index a54b85c9f..58329faa9 100644 --- a/grunt.js +++ b/grunt.js @@ -69,7 +69,7 @@ module.exports = function( grunt ) { "src/ajax/script.js", "src/ajax/xhr.js", { flag: "effects", src: "src/effects.js" }, - "src/offset.js", + { flag: "offset", src: "src/offset.js" }, { flag: "dimensions", src: "src/dimensions.js" }, "src/exports.js", "src/outro.js" diff --git a/test/unit/attributes.js b/test/unit/attributes.js index 7dec60619..33551ba94 100644 --- a/test/unit/attributes.js +++ b/test/unit/attributes.js @@ -368,44 +368,55 @@ test("attr(String, Object)", function() { }); test("attr(jquery_method)", function(){ - expect(7); var $elem = jQuery("
"), - elem = $elem[0]; + elem = $elem[0], + expected = 5, + attrObj = { + css: { paddingLeft: 1, paddingRight: 1 } + }; + + if ( jQuery.fn.width ) { + expected += 2; + attrObj.width = 10; + } + + if ( jQuery.fn.offset ) { + expected += 2; + attrObj.offset = { top: 1, left: 0 }; + } + + expect( expected ); // one at a time - $elem.attr({html: "foo"}, true); - equal( elem.innerHTML, "foo", "attr(html)"); + $elem.attr( { html: "foo" }, true ); + equal( elem.innerHTML, "foo", "attr(html)" ); - $elem.attr({text: "bar"}, true); - equal( elem.innerHTML, "bar", "attr(text)"); + $elem.attr( { text: "bar" }, true ); + equal( elem.innerHTML, "bar", "attr(text)" ); - $elem.attr({css: {color: "red"}}, true); - ok( /^(#ff0000|red)$/i.test(elem.style.color), "attr(css)"); + $elem.attr( { css: { color: "red" } }, true ); + ok( /^(#ff0000|red)$/i.test( elem.style.color ), "attr(css)" ); - if ( jQuery.fn.width ) { - $elem.attr({height: 10}, true); - equal( elem.style.height, "10px", "attr(height)"); + // Multiple attributes + $elem.attr( attrObj, true ); - // Multiple attributes - $elem.attr({ - width:10, - css:{ paddingLeft:1, paddingRight:1 } - }, true); + if ( jQuery.fn.width ) { + equal( elem.style.width, "10px", "attr({width:})" ); - equal( elem.style.width, "10px", "attr({...})"); - } else { + $elem.attr( { height: 10 }, true ); + equal( elem.style.height, "10px", "attr(height)" ); + } - $elem.attr({ - css:{ paddingLeft:1, paddingRight:1 } - }, true); + if ( jQuery.fn.offset ) { + equal( elem.style.top, "1px", "attr({offset:})" ); - ok( true, "DUMMY: attr(height)" ); - ok( true, "DUMMY: attr({...})" ); + $elem.attr( { offset: { top: 1, left: 1 } }, true ); + equal( elem.style.left, "1px", "attr(offset)" ); } - equal( elem.style.paddingLeft, "1px", "attr({...})"); - equal( elem.style.paddingRight, "1px", "attr({...})"); + equal( elem.style.paddingLeft, "1px", "attr({css:})" ); + equal( elem.style.paddingRight, "1px", "attr({css:})" ); }); test("attr(String, Object) - Loaded via XML document", function() { diff --git a/test/unit/core.js b/test/unit/core.js index f7de6c702..2daf5d24d 100644 --- a/test/unit/core.js +++ b/test/unit/core.js @@ -18,24 +18,48 @@ test("Basic requirements", function() { }); test("jQuery()", function() { - expect(29); - // Basic constructor's behavior + var elem, i, + obj = jQuery("div"), + main = jQuery("#qunit-fixture"), + code = jQuery(""), + img = jQuery(""), + div = jQuery("

"), + exec = false, + long = "", + expected = 28, + attrObj = { + css: { paddingLeft: 1, paddingRight: 1 }, + click: function() { ok( exec, "Click executed." ); }, + text: "test", + "class": "test2", + id: "test3" + }; + if ( jQuery.fn.width ) { + expected++; + attrObj.width = 10; + } + + if ( jQuery.fn.offset ) { + expected++; + attrObj.offset = { top: 1, left: 1 }; + } + + expect( expected ); + + // Basic constructor's behavior equal( jQuery().length, 0, "jQuery() === jQuery([])" ); equal( jQuery(undefined).length, 0, "jQuery(undefined) === jQuery([])" ); equal( jQuery(null).length, 0, "jQuery(null) === jQuery([])" ); equal( jQuery("").length, 0, "jQuery('') === jQuery([])" ); equal( jQuery("#").length, 0, "jQuery('#') === jQuery([])" ); - var obj = jQuery("div"); equal( jQuery(obj).selector, "div", "jQuery(jQueryObj) == jQueryObj" ); - // can actually yield more than one, when iframes are included, the window is an array as well + // can actually yield more than one, when iframes are included, the window is an array as well equal( jQuery(window).length, 1, "Correct number of elements generated for jQuery(window)" ); - - var main = jQuery("#qunit-fixture"); deepEqual( jQuery("div p", main).get(), q("sndp", "en", "sap"), "Basic selector with jQuery object as context" ); /* @@ -56,13 +80,12 @@ test("jQuery()", function() { } ok( pass, "jQuery('<tag>') needs optional document parameter to ease cross-frame DOM wrangling, see #968" );*/ - var code = jQuery(""); equal( code.length, 1, "Correct number of elements generated for code" ); equal( code.parent().length, 0, "Make sure that the generated HTML has no parent." ); - var img = jQuery(""); + equal( img.length, 1, "Correct number of elements generated for img" ); equal( img.parent().length, 0, "Make sure that the generated HTML has no parent." ); - var div = jQuery("

"); + equal( div.length, 4, "Correct number of elements generated for div hr code b" ); equal( div.parent().length, 0, "Make sure that the generated HTML has no parent." ); @@ -70,30 +93,14 @@ test("jQuery()", function() { equal( jQuery(document.body).get(0), jQuery("body").get(0), "Test passing an html node to the factory" ); - var exec = false, - elem; + elem = jQuery("
", attrObj ); if ( jQuery.fn.width ) { - elem = jQuery("
", { - width: 10, - css: { paddingLeft:1, paddingRight:1 }, - click: function(){ ok(exec, "Click executed."); }, - text: "test", - "class": "test2", - id: "test3" - }); - equal( elem[0].style.width, "10px", "jQuery() quick setter width"); - } else { - elem = jQuery("
", { - css: { paddingLeft:1, paddingRight:1 }, - click: function(){ ok(exec, "Click executed."); }, - text: "test", - "class": "test2", - id: "test3" - }); + } - ok( true, "DUMMY: jQuery() quick setter width"); + if ( jQuery.fn.offset ) { + equal( elem[0].style.top, "1px", "jQuery() quick setter offset"); } equal( elem[0].style.paddingLeft, "1px", "jQuery quick setter css"); @@ -109,7 +116,7 @@ test("jQuery()", function() { // manually clean up detached elements elem.remove(); - for ( var i = 0; i < 3; ++i ) { + for ( i = 0; i < 3; ++i ) { elem = jQuery(""); } equal( elem[0].defaultValue, "TEST", "Ensure cached nodes are cloned properly (Bug #6655)" ); @@ -120,8 +127,7 @@ test("jQuery()", function() { equal( jQuery("
").length, 1, "Make sure whitespace is trimmed." ); equal( jQuery(" a
b ").length, 1, "Make sure whitespace and other characters are trimmed." ); - var long = ""; - for ( var i = 0; i < 128; i++ ) { + for ( i = 0; i < 128; i++ ) { long += "12345678"; } diff --git a/test/unit/offset.js b/test/unit/offset.js index 750228281..f3f93bace 100644 --- a/test/unit/offset.js +++ b/test/unit/offset.js @@ -1,3 +1,5 @@ +if ( jQuery.fn.offset ) { + module("offset", { teardown: moduleTeardown }); test("disconnected node", function() { @@ -475,3 +477,5 @@ test("fractions (see #7730 and #7885)", function() { div.remove(); }); + +} -- 2.39.5