Skip to content

Commit

Permalink
improve performance in IE + improve fieldsetdisabled support check
Browse files Browse the repository at this point in the history
  • Loading branch information
aFarkas committed Jul 14, 2014
1 parent 8e4f486 commit 1aa1466
Show file tree
Hide file tree
Showing 103 changed files with 350 additions and 235 deletions.
13 changes: 13 additions & 0 deletions changelog.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
upcoming Release 1.14.5
----------

- force all browser to use new stepUp/stepDown algorithm
- improve readyState complete detection
- don't polyfill elements with the class 'ws-nopolyfill'
- improve support for custom jQuery builds
- recheck validilty of invalid textarea using input event
- updated plugins (sizzle and ui.position)
- improved performance especially for IE's


Release 1.14.4
----------

- replaced promise with [es6-shim](https://github.com/paulmillr/es6-shim) (currently most things aren't feature detected, so only promise can be used safely)
- removed dependency to Modernizr (still needed html5shiv or Modernizr to use semantic elements like section/article/main etc.), but not needed for video/audio/form and so on
- improved runtime and network performance for mediaelement flash fallback
Expand Down
2 changes: 1 addition & 1 deletion js-webshim/dev/polyfiller.js
Original file line number Diff line number Diff line change
Expand Up @@ -1028,7 +1028,7 @@
try {
if(fieldset.querySelector(':invalid')){
fieldset.disabled = true;
tmp = !fieldset.querySelector(':invalid');
tmp = !fieldset.querySelector(':invalid') && fieldset.querySelector(':disabled');
}
} catch(er){}
support.fieldsetdisabled = !!tmp;
Expand Down
4 changes: 2 additions & 2 deletions js-webshim/dev/shims/combos/1.js
Original file line number Diff line number Diff line change
Expand Up @@ -323,11 +323,11 @@ webshims.isReady('swfmini', true);
};
$.extend(exp, {
"enabled": function( elem ) {
return elem.disabled === false && !$(elem).is('fieldset[disabled] *');
return 'disabled' in elem && elem.disabled === false && !$.find.matchesSelector(elem, 'fieldset[disabled] *');
},

"disabled": function( elem ) {
return elem.disabled === true || ('disabled' in elem && $(elem).is('fieldset[disabled] *'));
return elem.disabled === true || ('disabled' in elem && $.find.matchesSelector(elem, 'fieldset[disabled] *'));
}
});
}
Expand Down
5 changes: 3 additions & 2 deletions js-webshim/dev/shims/combos/10.js
Original file line number Diff line number Diff line change
Expand Up @@ -549,8 +549,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
webshims.warn(type +' already implemented for element #'+elem.id);
return false;
}

data[type] = true;
return true;
return !$(elem).hasClass('ws-nopolyfill');
},
extendUNDEFProp: function(obj, props){
$.each(props, function(name, prop){
Expand Down Expand Up @@ -3553,7 +3554,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
var type = $.prop(this, 'type');
var i, opts, data, optsName, labels, cNames, hasInitialFocus;

if(inputTypes[type] && webshims.implement(this, 'inputwidgets') && !$(this).hasClass('ws-nopolyfill') && (!supportInputTypes[type] || !$(this).hasClass('ws-noreplace'))){
if(inputTypes[type] && webshims.implement(this, 'inputwidgets') && (!supportInputTypes[type] || !$(this).hasClass('ws-noreplace'))){
data = {};
optsName = type;
hasInitialFocus = $(this).is(':focus');
Expand Down
2 changes: 1 addition & 1 deletion js-webshim/dev/shims/combos/11.js
Original file line number Diff line number Diff line change
Expand Up @@ -2341,7 +2341,7 @@
var type = $.prop(this, 'type');
var i, opts, data, optsName, labels, cNames, hasInitialFocus;

if(inputTypes[type] && webshims.implement(this, 'inputwidgets') && !$(this).hasClass('ws-nopolyfill') && (!supportInputTypes[type] || !$(this).hasClass('ws-noreplace'))){
if(inputTypes[type] && webshims.implement(this, 'inputwidgets') && (!supportInputTypes[type] || !$(this).hasClass('ws-noreplace'))){
data = {};
optsName = type;
hasInitialFocus = $(this).is(':focus');
Expand Down
9 changes: 5 additions & 4 deletions js-webshim/dev/shims/combos/15.js
Original file line number Diff line number Diff line change
Expand Up @@ -549,8 +549,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
webshims.warn(type +' already implemented for element #'+elem.id);
return false;
}

data[type] = true;
return true;
return !$(elem).hasClass('ws-nopolyfill');
},
extendUNDEFProp: function(obj, props){
$.each(props, function(name, prop){
Expand Down Expand Up @@ -1312,11 +1313,11 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
};
$.extend(exp, {
"enabled": function( elem ) {
return elem.disabled === false && !$(elem).is('fieldset[disabled] *');
return 'disabled' in elem && elem.disabled === false && !$.find.matchesSelector(elem, 'fieldset[disabled] *');
},

"disabled": function( elem ) {
return elem.disabled === true || ('disabled' in elem && $(elem).is('fieldset[disabled] *'));
return elem.disabled === true || ('disabled' in elem && $.find.matchesSelector(elem, 'fieldset[disabled] *'));
}
});
}
Expand Down Expand Up @@ -1929,7 +1930,7 @@ var rsubmittable = /^(?:select|textarea|input)/i;
;
return function(){
var elem = $(this).getNativeElement()[0];
return !!(!elem.readOnly && !types[elem.type] && !$(elem).is(':disabled') );
return !!(!elem.readOnly && !types[elem.type] && !$.find.matchesSelector(elem, ':disabled') );
};
})()
},
Expand Down
9 changes: 5 additions & 4 deletions js-webshim/dev/shims/combos/16.js
Original file line number Diff line number Diff line change
Expand Up @@ -772,8 +772,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
webshims.warn(type +' already implemented for element #'+elem.id);
return false;
}

data[type] = true;
return true;
return !$(elem).hasClass('ws-nopolyfill');
},
extendUNDEFProp: function(obj, props){
$.each(props, function(name, prop){
Expand Down Expand Up @@ -1535,11 +1536,11 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
};
$.extend(exp, {
"enabled": function( elem ) {
return elem.disabled === false && !$(elem).is('fieldset[disabled] *');
return 'disabled' in elem && elem.disabled === false && !$.find.matchesSelector(elem, 'fieldset[disabled] *');
},

"disabled": function( elem ) {
return elem.disabled === true || ('disabled' in elem && $(elem).is('fieldset[disabled] *'));
return elem.disabled === true || ('disabled' in elem && $.find.matchesSelector(elem, 'fieldset[disabled] *'));
}
});
}
Expand Down Expand Up @@ -2152,7 +2153,7 @@ var rsubmittable = /^(?:select|textarea|input)/i;
;
return function(){
var elem = $(this).getNativeElement()[0];
return !!(!elem.readOnly && !types[elem.type] && !$(elem).is(':disabled') );
return !!(!elem.readOnly && !types[elem.type] && !$.find.matchesSelector(elem, ':disabled') );
};
})()
},
Expand Down
2 changes: 1 addition & 1 deletion js-webshim/dev/shims/combos/17.js
Original file line number Diff line number Diff line change
Expand Up @@ -2957,7 +2957,7 @@ webshims.register('form-number-date-api', function($, webshims, window, document
var type = $.prop(this, 'type');
var i, opts, data, optsName, labels, cNames, hasInitialFocus;

if(inputTypes[type] && webshims.implement(this, 'inputwidgets') && !$(this).hasClass('ws-nopolyfill') && (!supportInputTypes[type] || !$(this).hasClass('ws-noreplace'))){
if(inputTypes[type] && webshims.implement(this, 'inputwidgets') && (!supportInputTypes[type] || !$(this).hasClass('ws-noreplace'))){
data = {};
optsName = type;
hasInitialFocus = $(this).is(':focus');
Expand Down
7 changes: 4 additions & 3 deletions js-webshim/dev/shims/combos/2.js
Original file line number Diff line number Diff line change
Expand Up @@ -772,8 +772,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
webshims.warn(type +' already implemented for element #'+elem.id);
return false;
}

data[type] = true;
return true;
return !$(elem).hasClass('ws-nopolyfill');
},
extendUNDEFProp: function(obj, props){
$.each(props, function(name, prop){
Expand Down Expand Up @@ -1535,11 +1536,11 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
};
$.extend(exp, {
"enabled": function( elem ) {
return elem.disabled === false && !$(elem).is('fieldset[disabled] *');
return 'disabled' in elem && elem.disabled === false && !$.find.matchesSelector(elem, 'fieldset[disabled] *');
},

"disabled": function( elem ) {
return elem.disabled === true || ('disabled' in elem && $(elem).is('fieldset[disabled] *'));
return elem.disabled === true || ('disabled' in elem && $.find.matchesSelector(elem, 'fieldset[disabled] *'));
}
});
}
Expand Down
4 changes: 2 additions & 2 deletions js-webshim/dev/shims/combos/21.js
Original file line number Diff line number Diff line change
Expand Up @@ -1546,11 +1546,11 @@
var media, error, parent;
if(
($(e.target).is('audio, video') || ((parent = e.target.parentNode) && $('source', parent).last()[0] == e.target)) &&
(media = $(e.target).closest('audio, video')) && !media.is('.nonnative-api-active')
(media = $(e.target).closest('audio, video')) && !media.hasClass('nonnative-api-active')
){
error = media.prop('error');
setTimeout(function(){
if(!media.is('.nonnative-api-active')){
if(!media.hasClass('nonnative-api-active')){
if(error && switchErrors[error.code]){
options.preferFlash = true;
document.removeEventListener('error', switchOptions, true);
Expand Down
9 changes: 5 additions & 4 deletions js-webshim/dev/shims/combos/25.js
Original file line number Diff line number Diff line change
Expand Up @@ -549,8 +549,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
webshims.warn(type +' already implemented for element #'+elem.id);
return false;
}

data[type] = true;
return true;
return !$(elem).hasClass('ws-nopolyfill');
},
extendUNDEFProp: function(obj, props){
$.each(props, function(name, prop){
Expand Down Expand Up @@ -1549,7 +1550,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
writeable: false,
get: function(){
if(this.type != 'file'){return null;}
if(!$(this).is('.ws-filereader')){
if(!$(this).hasClass('ws-filereader')){
webshim.info("please add the 'ws-filereader' class to your input[type='file'] to implement files-property");
}
return webshim.data(this, 'fileList') || [];
Expand Down Expand Up @@ -2892,11 +2893,11 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
var media, error, parent;
if(
($(e.target).is('audio, video') || ((parent = e.target.parentNode) && $('source', parent).last()[0] == e.target)) &&
(media = $(e.target).closest('audio, video')) && !media.is('.nonnative-api-active')
(media = $(e.target).closest('audio, video')) && !media.hasClass('nonnative-api-active')
){
error = media.prop('error');
setTimeout(function(){
if(!media.is('.nonnative-api-active')){
if(!media.hasClass('nonnative-api-active')){
if(error && switchErrors[error.code]){
options.preferFlash = true;
document.removeEventListener('error', switchOptions, true);
Expand Down
2 changes: 1 addition & 1 deletion js-webshim/dev/shims/combos/26.js
Original file line number Diff line number Diff line change
Expand Up @@ -7570,7 +7570,7 @@ Globally exposed namespace with the most frequently used public classes and hand
writeable: false,
get: function(){
if(this.type != 'file'){return null;}
if(!$(this).is('.ws-filereader')){
if(!$(this).hasClass('ws-filereader')){
webshim.info("please add the 'ws-filereader' class to your input[type='file'] to implement files-property");
}
return webshim.data(this, 'fileList') || [];
Expand Down
38 changes: 29 additions & 9 deletions js-webshim/dev/shims/combos/27.js
Original file line number Diff line number Diff line change
Expand Up @@ -156,18 +156,37 @@ webshims.register('form-shim-extend2', function($, webshims, window, document, u
if(!support.fieldsetdisabled || !support.fieldsetelements){
(function(){
if(!support.fieldsetdisabled){
var hasIsDisabled = 'isDisabled' in document.createElement('div');
var isFieldsetGroup = {
fieldset: 1,
FIELDSET: 1
};
var disableElementsSel = 'input, textarea, select, button';

var isDisabledChild = function(elem){
if(hasIsDisabled && !elem.isDisabled){
return false;
}
return $.find.matchesSelector(elem, 'fieldset[disabled] *' );
};
var isDisabledChildFilter = hasIsDisabled ?
function(){
return this.isDisabled && $.find.matchesSelector(this, 'fieldset[disabled] *' );
} :
'fieldset[disabled] *';
var isEnableChildFilter = hasIsDisabled ?
function(){
return !this.isDisabled && !$.find.matchesSelector(this, 'fieldset[disabled] *' );
} :
':not(fieldset[disabled] *)';

$.extend($.expr[":"], {
"enabled": function( elem ) {
return elem.disabled === false || (isFieldsetGroup[elem.nodeName] && webshims.contentAttr(elem, 'disabled') == null && !$(elem).is('fieldset[disabled] *')) ;
return isFieldsetGroup[elem.nodeName] ? (webshims.contentAttr(elem, 'disabled') == null && !isDisabledChild(elem)) : elem.disabled === false;
},

"disabled": function( elem ) {
return elem.disabled === true || (isFieldsetGroup[elem.nodeName] && (webshims.contentAttr(elem, 'disabled') != null || $(elem).is('fieldset[disabled] *')));
return isFieldsetGroup[elem.nodeName] ? (webshims.contentAttr(elem, 'disabled') != null || isDisabledChild(elem)) : elem.disabled === true;
}
});

Expand Down Expand Up @@ -197,11 +216,12 @@ webshims.register('form-shim-extend2', function($, webshims, window, document, u

if(value){
$(this.querySelectorAll(disableElementsSel)).each(groupControl.disable);
} else if(!$(this).is('fieldset[disabled] *')){

} else if(!isDisabledChild(this)){
var elements = $(this.querySelectorAll(disableElementsSel));

if( this.querySelector('fieldset[disabled]') ){
elements = elements.not('fieldset[disabled] *');
elements = elements.filter(isEnableChildFilter);
}

elements.each(groupControl.enable);
Expand All @@ -218,7 +238,8 @@ webshims.register('form-shim-extend2', function($, webshims, window, document, u
if(value){
webshims.data(this, 'groupedisabled', false);
desc.prop._supset.call(this, value);
} else if($(this).is('fieldset[disabled] *')){

} else if(isDisabledChild(this)){
webshims.data(this, 'groupedisabled', true);
desc.prop._supset.call(this, true);
} else {
Expand All @@ -242,7 +263,7 @@ webshims.register('form-shim-extend2', function($, webshims, window, document, u
webshims.addReady(function(context){

$(context)
.filter('fieldset[disabled], fieldset[disabled] *')
.filter(isDisabledChildFilter)
.find(disableElementsSel)
.each(groupControl.disable)
;
Expand All @@ -254,7 +275,6 @@ webshims.register('form-shim-extend2', function($, webshims, window, document, u
var isForm = {form: 1, FORM: 1};
$.prop = function(elem, name, value){
var ret;
//TODO: cache + perftest
if(elem && elem.nodeType == 1 && value === undefined && isForm[elem.nodeName] && elem.id){
ret = document.getElementsByName(name);
if(!ret || !ret.length){
Expand Down Expand Up @@ -896,7 +916,7 @@ webshims.register('form-shim-extend2', function($, webshims, window, document, u

if(elem.type == 'password' || isOver){
data.text = createPlaceholder(elem);
if(isResponsive || $(elem).is('.responsive-width') || (elem.currentStyle || {width: ''}).width.indexOf('%') != -1){
if(isResponsive || $(elem).hasClass('responsive-width') || (elem.currentStyle || {width: ''}).width.indexOf('%') != -1){
data.box = data.text;
} else {
data.box = $('<span class="placeholder-box placeholder-box-'+ (elem.nodeName || '').toLowerCase() +' placeholder-box-'+$.css(elem, 'float')+'" />')
Expand Down Expand Up @@ -1569,7 +1589,7 @@ webshims.register('form-shim-extend2', function($, webshims, window, document, u
writeable: false,
get: function(){
if(this.type != 'file'){return null;}
if(!$(this).is('.ws-filereader')){
if(!$(this).hasClass('ws-filereader')){
webshim.info("please add the 'ws-filereader' class to your input[type='file'] to implement files-property");
}
return webshim.data(this, 'fileList') || [];
Expand Down
2 changes: 1 addition & 1 deletion js-webshim/dev/shims/combos/28.js
Original file line number Diff line number Diff line change
Expand Up @@ -392,7 +392,7 @@ var rsubmittable = /^(?:select|textarea|input)/i;
;
return function(){
var elem = $(this).getNativeElement()[0];
return !!(!elem.readOnly && !types[elem.type] && !$(elem).is(':disabled') );
return !!(!elem.readOnly && !types[elem.type] && !$.find.matchesSelector(elem, ':disabled') );
};
})()
},
Expand Down
7 changes: 4 additions & 3 deletions js-webshim/dev/shims/combos/3.js
Original file line number Diff line number Diff line change
Expand Up @@ -549,8 +549,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
webshims.warn(type +' already implemented for element #'+elem.id);
return false;
}

data[type] = true;
return true;
return !$(elem).hasClass('ws-nopolyfill');
},
extendUNDEFProp: function(obj, props){
$.each(props, function(name, prop){
Expand Down Expand Up @@ -1312,11 +1313,11 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
};
$.extend(exp, {
"enabled": function( elem ) {
return elem.disabled === false && !$(elem).is('fieldset[disabled] *');
return 'disabled' in elem && elem.disabled === false && !$.find.matchesSelector(elem, 'fieldset[disabled] *');
},

"disabled": function( elem ) {
return elem.disabled === true || ('disabled' in elem && $(elem).is('fieldset[disabled] *'));
return elem.disabled === true || ('disabled' in elem && $.find.matchesSelector(elem, 'fieldset[disabled] *'));
}
});
}
Expand Down
7 changes: 4 additions & 3 deletions js-webshim/dev/shims/combos/30.js
Original file line number Diff line number Diff line change
Expand Up @@ -549,8 +549,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
webshims.warn(type +' already implemented for element #'+elem.id);
return false;
}

data[type] = true;
return true;
return !$(elem).hasClass('ws-nopolyfill');
},
extendUNDEFProp: function(obj, props){
$.each(props, function(name, prop){
Expand Down Expand Up @@ -1312,11 +1313,11 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
};
$.extend(exp, {
"enabled": function( elem ) {
return elem.disabled === false && !$(elem).is('fieldset[disabled] *');
return 'disabled' in elem && elem.disabled === false && !$.find.matchesSelector(elem, 'fieldset[disabled] *');
},

"disabled": function( elem ) {
return elem.disabled === true || ('disabled' in elem && $(elem).is('fieldset[disabled] *'));
return elem.disabled === true || ('disabled' in elem && $.find.matchesSelector(elem, 'fieldset[disabled] *'));
}
});
}
Expand Down
Loading

0 comments on commit 1aa1466

Please sign in to comment.