Skip to content

Commit

Permalink
Core: Simplify code post browser support reduction
Browse files Browse the repository at this point in the history
Summary of the changes:
* Tests: Remove legacy jQuery.cache & oldIE leftovers
* Tests: Reformat JavaScript in delegatetest.html
* Docs: "jQuery Foundation Projects" -> "jQuery Projects"
* Tests: Drop an unused localfile.html file (modern browsers don't support
  the `file:` protocol this way, there's no point in keeping the file around)
* Effects: Remove a redundant `!fn` check (`fn || !fn && easing` is equivalent
  to `fn || easing`; simplify the code)
* CSS: Explain the fallback to direct object access in curCSS better
* Tests: Deduplicate `jQuery.parseHTML` test titles
* Dimensions: Add a test for fractional values
* Tests: Fix a buggy WebKit regex

Closes gh-5296

(cherry picked from commit 93ca49e)
  • Loading branch information
mgol committed Sep 19, 2023
1 parent a7cc3a0 commit 6fe8869
Show file tree
Hide file tree
Showing 10 changed files with 100 additions and 159 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ In the spirit of open source software development, jQuery always encourages comm

1. [Getting Involved](https://contribute.jquery.org/)
2. [Core Style Guide](https://contribute.jquery.org/style-guide/js/)
3. [Writing Code for jQuery Foundation Projects](https://contribute.jquery.org/code/)
3. [Writing Code for jQuery Projects](https://contribute.jquery.org/code/)

### References to issues/PRs

Expand Down
4 changes: 4 additions & 0 deletions src/css/curCSS.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ function curCSS( elem, name, computed ) {
// .css('--customProperty) (gh-3144)
if ( computed ) {

// A fallback to direct property access is needed as `computed`, being
// the output of `getComputedStyle`, contains camelCased keys and
// `getPropertyValue` requires kebab-case ones.
//
// Support: IE <=9 - 11+
// IE only supports `"float"` in `getPropertyValue`; in computed styles
// it's only available as `"cssFloat"`. We no longer modify properties
Expand Down
2 changes: 1 addition & 1 deletion src/effects.js
Original file line number Diff line number Diff line change
Expand Up @@ -459,7 +459,7 @@ jQuery.Animation = jQuery.extend( Animation, {

jQuery.speed = function( speed, easing, fn ) {
var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
complete: fn || !fn && easing ||
complete: fn || easing ||
isFunction( speed ) && speed,
duration: speed,
easing: fn && easing || easing && !isFunction( easing ) && easing
Expand Down
16 changes: 6 additions & 10 deletions test/data/testinit.js
Original file line number Diff line number Diff line change
Expand Up @@ -177,16 +177,12 @@ this.createXMLFragment = function() {
return frag;
};

window.fireNative = document.createEvent ?
function( node, type ) {
var event = document.createEvent( "HTMLEvents" );

event.initEvent( type, true, true );
node.dispatchEvent( event );
} :
function( node, type ) {
node.fireEvent( "on" + type, document.createEventObject() );
};
window.fireNative = function( node, type ) {
var event = document.createEvent( "HTMLEvents" );

event.initEvent( type, true, true );
node.dispatchEvent( event );
};

/**
* Add random number to url to stop caching
Expand Down
130 changes: 61 additions & 69 deletions test/delegatetest.html
Original file line number Diff line number Diff line change
Expand Up @@ -125,103 +125,95 @@ <h2>Submit Tests</h2>

<script type='text/javascript'>

$("#fileversion").text($.fn.jquery);
$( "#fileversion" ).text( $.fn.jquery );

// Try an auto-submit, it should only fire once
$(function(){
$( function() {
var triggered = false;
$("#autosub input").trigger("keypress");
$("body").on("submit", "#autosub", function( e ){
$( "#autosub input" ).trigger( "keypress" );
$( "body" ).on( "submit", "#autosub", function( e ) {
e.preventDefault();
e.stopPropagation();
if ( triggered ) {
alert("autosubmit FAIL");
alert( "autosubmit FAIL" );
}
triggered = true;
});
$("#autosub").submit().remove();
});
} );
$( "#autosub" ).submit().remove();
} );

// Events we want to track in row-order
var events = "bind-change live-change onX-change bind-propertychange live-beforeactivate live-focusin bind-focus live-beforedeactivate live-focusout bind-blur live-click live-keydown".split(" "),
var events = "bind-change live-change onX-change bind-propertychange live-beforeactivate live-focusin bind-focus live-beforedeactivate live-focusout bind-blur live-click live-keydown".split( " " ),
counter = 0;
blinker = function(event){
if ( !counter ) {
$("#changes tbody td").text("");
}
var $el = event.data,
prev = $el.text();
prev = prev? prev +" | " : "";
return $el
.text(prev + ++counter+" " + (this.value.replace(/^on$/,"") || this.id || this.checked || ""))
.css("backgroundColor","#0f0")
.delay(800)
.queue(function(next){
$el.css("backgroundColor","#afa");
--counter;
next();
});
};
blinker = function( event ) {
if ( !counter ) {
$( "#changes tbody td" ).text( "" );
}
var $el = event.data,
prev = $el.text();
prev = prev ? prev + " | " : "";
return $el
.text( prev + ++counter + " " + ( this.value.replace( /^on$/, "" ) || this.id || this.checked || "" ) )
.css( "backgroundColor", "#0f0" )
.delay( 800 )
.queue( function( next ) {
$el.css( "backgroundColor", "#afa" );
--counter;
next();
} );
};

for ( var i=0; i < events.length; i++ ) {
var m = events[i].split("-"),
api = m[0],
type = m[1],
$row = $("<tr><th>"+type+" "+api+"</th></tr>");
for ( var i = 0; i < events.length; i++ ) {
var m = events[ i ].split( "-" ),
api = m[ 0 ],
type = m[ 1 ],
$row = $( "<tr><th>" + type + " " + api + "</th></tr>" );

$("#changes thead td").each(function(){
var id = "#"+this.id,
$cell = $("<td></td>");
$( "#changes thead td" ).each( function() {
var id = "#" + this.id,
$cell = $( "<td></td>" );
if ( api == "onX" ) {
$(this).find("input, button, select, textarea").each(function(){
this["on"+type] = function(e){ e = $.event.fix(e||event); e.data = $cell; blinker.call(this, e); };
});
$( this ).find( "input, button, select, textarea" ).each( function() {
this[ "on" + type ] = function( e ) {
e = $.event.fix( e || event ); e.data = $cell; blinker.call( this, e );
};
} );
} else if ( api == "bind" ) {
$(this).find("input, button, select, textarea").bind(type, $cell, blinker);
$( this ).find( "input, button, select, textarea" ).bind( type, $cell, blinker );
} else {
$(id+" input,"+id+" button,"+id+" select,"+id+" textarea").live(type, $cell, blinker);
$( id + " input," + id + " button," + id + " select," + id + " textarea" ).live( type, $cell, blinker );
}
$row.append($cell);
});
$("#changes tbody").append($row);
}

// Ensure that cloned elements get the delegated event magic; this is
// implementation-specific knowledge but otherwise impossible to test.
// The beforeactivate event attaches a direct-bound change event.
// (Only care about the live change for this third select element.)
var sel1 = $("#select-one select:first-child");
if ( typeof(sel1[0].fireEvent) !== "undefined" ) {
sel1.trigger( "beforeactivate" ).clone().appendTo("#select-one");
//alert($("#select-one select").map(function(){ return this._change_attached || "undef"; }).get().join("|"));
$row.append( $cell );
} );
$( "#changes tbody" ).append( $row );
}

jQuery.fn.blink = function(){
jQuery.fn.blink = function() {
return this
.css("backgroundColor","green")
.text( (parseInt(this.text(), 10) || 0) + 1 )
.delay(700).queue(function(next){
jQuery(this).css("backgroundColor","#afa");
.css( "backgroundColor", "green" )
.text( ( parseInt( this.text(), 10 ) || 0 ) + 1 )
.delay( 700 ).queue( function( next ) {
jQuery( this ).css( "backgroundColor", "#afa" );
next();
});
} );
};

jQuery.fn.addSubmitTest = function( id, prevent ) {
return this.live("submit", function(e){
return this.live( "submit", function( e ) {
if ( prevent ) {
e.preventDefault();
e.preventDefault();
}
jQuery(id).blink();
});
jQuery( id ).blink();
} );
};

$("#text_submit").addSubmitTest("#textSubmit", true);
$("#password_submit").addSubmitTest("#passwordSubmit", true);
$("#submit_submit").addSubmitTest("#submitSubmit", true);
$("#prog_submit").addSubmitTest("#submitSubmit", true);
$(document).bind("submit", function(){
jQuery("#boundSubmit").blink();
});
$( "#text_submit" ).addSubmitTest( "#textSubmit", true );
$( "#password_submit" ).addSubmitTest( "#passwordSubmit", true );
$( "#submit_submit" ).addSubmitTest( "#submitSubmit", true );
$( "#prog_submit" ).addSubmitTest( "#submitSubmit", true );
$( document ).bind( "submit", function() {
jQuery( "#boundSubmit" ).blink();
} );

</script>
</body>
Expand Down
75 changes: 0 additions & 75 deletions test/localfile.html

This file was deleted.

2 changes: 1 addition & 1 deletion test/unit/core.js
Original file line number Diff line number Diff line change
Expand Up @@ -1389,7 +1389,7 @@ QUnit.test( "jQuery.parseHTML(<a href>) - gh-2965", function( assert ) {
} );

if ( jQuery.support.createHTMLDocument ) {
QUnit.test( "jQuery.parseHTML", function( assert ) {
QUnit.test( "jQuery.parseHTML error handling", function( assert ) {
var done = assert.async();
assert.expect( 1 );

Expand Down
2 changes: 1 addition & 1 deletion test/unit/css.js
Original file line number Diff line number Diff line change
Expand Up @@ -1848,7 +1848,7 @@ QUnit.test( "Do not throw on frame elements from css method (trac-15098)", funct
var div = jQuery( "<div>" ).appendTo( "#qunit-fixture" ),
$elem = jQuery( "<div>" ).addClass( "test__customProperties" )
.appendTo( "#qunit-fixture" ),
webkitOrBlink = /\webkit\b/i.test( navigator.userAgent ) &&
webkitOrBlink = /webkit\b/i.test( navigator.userAgent ) &&
!/edge\//i.test( navigator.userAgent ),
expected = 20;

Expand Down
24 changes: 24 additions & 0 deletions test/unit/dimensions.js
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,30 @@ QUnit.test( "outerHeight()", function( assert ) {
div.remove();
} );

QUnit.test( "fractional getters", function( assert ) {
assert.expect( 8 );

var elem = jQuery( "<div>" ).css( {
width: "10.5px",
height: "20.5px",
border: "10px solid white",
padding: "2px",
margin: "3px"
} );

elem.appendTo( "#qunit-fixture" );

assert.strictEqual( elem.width(), 10.5, "width supports fractions" );
assert.strictEqual( elem.innerWidth(), 14.5, "innerWidth supports fractions" );
assert.strictEqual( elem.outerWidth(), 34.5, "outerWidth supports fractions" );
assert.strictEqual( elem.outerWidth( true ), 40.5, "outerWidth( true ) supports fractions" );

assert.strictEqual( elem.height(), 20.5, "height supports fractions" );
assert.strictEqual( elem.innerHeight(), 24.5, "innerHeight supports fractions" );
assert.strictEqual( elem.outerHeight(), 44.5, "outerHeight supports fractions" );
assert.strictEqual( elem.outerHeight( true ), 50.5, "outerHeight( true ) supports fractions" );
} );

QUnit.test( "child of a hidden elem (or unconnected node) has accurate inner/outer/Width()/Height() see trac-9441 trac-9300", function( assert ) {
assert.expect( 16 );

Expand Down
2 changes: 1 addition & 1 deletion test/unit/wrap.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ function testWrap( val, assert ) {

assert.expect( 18 );

var defaultText, result, j, i, cacheLength;
var defaultText, result, j;

defaultText = "Try them out:";
result = jQuery( "#first" ).wrap( val( "<div class='red'><span></span></div>" ) ).text();
Expand Down

0 comments on commit 6fe8869

Please sign in to comment.