From 1aa14669d5353ab4dbb4adfdddf888e750ee42a5 Mon Sep 17 00:00:00 2001 From: aFarkas Date: Mon, 14 Jul 2014 14:17:40 +0200 Subject: [PATCH] improve performance in IE + improve fieldsetdisabled support check --- changelog.md | 13 +++++++ js-webshim/dev/polyfiller.js | 2 +- js-webshim/dev/shims/combos/1.js | 4 +- js-webshim/dev/shims/combos/10.js | 5 ++- js-webshim/dev/shims/combos/11.js | 2 +- js-webshim/dev/shims/combos/15.js | 9 +++-- js-webshim/dev/shims/combos/16.js | 9 +++-- js-webshim/dev/shims/combos/17.js | 2 +- js-webshim/dev/shims/combos/2.js | 7 ++-- js-webshim/dev/shims/combos/21.js | 4 +- js-webshim/dev/shims/combos/25.js | 9 +++-- js-webshim/dev/shims/combos/26.js | 2 +- js-webshim/dev/shims/combos/27.js | 38 ++++++++++++++----- js-webshim/dev/shims/combos/28.js | 2 +- js-webshim/dev/shims/combos/3.js | 7 ++-- js-webshim/dev/shims/combos/30.js | 7 ++-- js-webshim/dev/shims/combos/31.js | 7 ++-- js-webshim/dev/shims/combos/34.js | 3 +- js-webshim/dev/shims/combos/4.js | 3 +- js-webshim/dev/shims/combos/5.js | 2 +- js-webshim/dev/shims/combos/6.js | 2 +- js-webshim/dev/shims/combos/7.js | 7 ++-- js-webshim/dev/shims/combos/8.js | 7 ++-- js-webshim/dev/shims/combos/9.js | 5 ++- js-webshim/dev/shims/dom-extend.js | 3 +- js-webshim/dev/shims/filereader.js | 2 +- js-webshim/dev/shims/form-core.js | 4 +- js-webshim/dev/shims/form-number-date-ui.js | 2 +- js-webshim/dev/shims/form-shim-extend.js | 2 +- js-webshim/dev/shims/form-shim-extend2.js | 36 ++++++++++++++---- js-webshim/dev/shims/form-validation.js | 31 +++++++-------- js-webshim/dev/shims/form-validators.js | 6 +-- js-webshim/dev/shims/forms-picker.js | 6 +-- js-webshim/dev/shims/mediaelement-jaris.js | 4 +- js-webshim/dev/shims/track-ui.js | 4 +- js-webshim/minified/polyfiller.js | 2 +- js-webshim/minified/shims/combos/1.js | 2 +- js-webshim/minified/shims/combos/10.js | 4 +- js-webshim/minified/shims/combos/11.js | 2 +- js-webshim/minified/shims/combos/15.js | 4 +- js-webshim/minified/shims/combos/16.js | 4 +- js-webshim/minified/shims/combos/17.js | 2 +- js-webshim/minified/shims/combos/2.js | 2 +- js-webshim/minified/shims/combos/21.js | 2 +- js-webshim/minified/shims/combos/25.js | 4 +- js-webshim/minified/shims/combos/26.js | 2 +- js-webshim/minified/shims/combos/27.js | 2 +- js-webshim/minified/shims/combos/28.js | 2 +- js-webshim/minified/shims/combos/3.js | 2 +- js-webshim/minified/shims/combos/30.js | 2 +- js-webshim/minified/shims/combos/31.js | 2 +- js-webshim/minified/shims/combos/34.js | 2 +- js-webshim/minified/shims/combos/4.js | 2 +- js-webshim/minified/shims/combos/5.js | 2 +- js-webshim/minified/shims/combos/6.js | 2 +- js-webshim/minified/shims/combos/7.js | 4 +- js-webshim/minified/shims/combos/8.js | 4 +- js-webshim/minified/shims/combos/9.js | 4 +- js-webshim/minified/shims/dom-extend.js | 2 +- js-webshim/minified/shims/filereader.js | 2 +- js-webshim/minified/shims/form-core.js | 2 +- .../minified/shims/form-number-date-ui.js | 2 +- js-webshim/minified/shims/form-shim-extend.js | 2 +- .../minified/shims/form-shim-extend2.js | 2 +- js-webshim/minified/shims/form-validation.js | 2 +- js-webshim/minified/shims/form-validators.js | 2 +- js-webshim/minified/shims/forms-picker.js | 2 +- .../minified/shims/mediaelement-jaris.js | 2 +- js-webshim/minified/shims/track-ui.js | 2 +- src/polyfiller.js | 2 +- src/shims/combos/1.js | 4 +- src/shims/combos/10.js | 5 ++- src/shims/combos/11.js | 2 +- src/shims/combos/15.js | 9 +++-- src/shims/combos/16.js | 9 +++-- src/shims/combos/17.js | 2 +- src/shims/combos/2.js | 7 ++-- src/shims/combos/21.js | 4 +- src/shims/combos/25.js | 9 +++-- src/shims/combos/26.js | 2 +- src/shims/combos/27.js | 38 ++++++++++++++----- src/shims/combos/28.js | 2 +- src/shims/combos/3.js | 7 ++-- src/shims/combos/30.js | 7 ++-- src/shims/combos/31.js | 7 ++-- src/shims/combos/34.js | 3 +- src/shims/combos/4.js | 3 +- src/shims/combos/5.js | 2 +- src/shims/combos/6.js | 2 +- src/shims/combos/7.js | 7 ++-- src/shims/combos/8.js | 7 ++-- src/shims/combos/9.js | 5 ++- src/shims/dom-extend.js | 3 +- src/shims/filereader.js | 2 +- src/shims/form-core.js | 4 +- src/shims/form-number-date-ui.js | 2 +- src/shims/form-shim-extend.js | 2 +- src/shims/form-shim-extend2.js | 36 ++++++++++++++---- src/shims/form-validation.js | 31 +++++++-------- src/shims/form-validators.js | 6 +-- src/shims/forms-picker.js | 6 +-- src/shims/mediaelement-jaris.js | 4 +- src/shims/track-ui.js | 4 +- 103 files changed, 350 insertions(+), 235 deletions(-) diff --git a/changelog.md b/changelog.md index f2509147..b7db5ef5 100644 --- a/changelog.md +++ b/changelog.md @@ -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 diff --git a/js-webshim/dev/polyfiller.js b/js-webshim/dev/polyfiller.js index 32f280a9..f90a5ec7 100644 --- a/js-webshim/dev/polyfiller.js +++ b/js-webshim/dev/polyfiller.js @@ -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; diff --git a/js-webshim/dev/shims/combos/1.js b/js-webshim/dev/shims/combos/1.js index e51644d4..c9d3cb75 100644 --- a/js-webshim/dev/shims/combos/1.js +++ b/js-webshim/dev/shims/combos/1.js @@ -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] *')); } }); } diff --git a/js-webshim/dev/shims/combos/10.js b/js-webshim/dev/shims/combos/10.js index fd1597db..cf60fb5f 100644 --- a/js-webshim/dev/shims/combos/10.js +++ b/js-webshim/dev/shims/combos/10.js @@ -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){ @@ -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'); diff --git a/js-webshim/dev/shims/combos/11.js b/js-webshim/dev/shims/combos/11.js index d14e821b..8addfe7f 100644 --- a/js-webshim/dev/shims/combos/11.js +++ b/js-webshim/dev/shims/combos/11.js @@ -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'); diff --git a/js-webshim/dev/shims/combos/15.js b/js-webshim/dev/shims/combos/15.js index 4c31b978..b6532e84 100644 --- a/js-webshim/dev/shims/combos/15.js +++ b/js-webshim/dev/shims/combos/15.js @@ -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){ @@ -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] *')); } }); } @@ -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') ); }; })() }, diff --git a/js-webshim/dev/shims/combos/16.js b/js-webshim/dev/shims/combos/16.js index 4ec19485..5d2dc1f6 100644 --- a/js-webshim/dev/shims/combos/16.js +++ b/js-webshim/dev/shims/combos/16.js @@ -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){ @@ -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] *')); } }); } @@ -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') ); }; })() }, diff --git a/js-webshim/dev/shims/combos/17.js b/js-webshim/dev/shims/combos/17.js index 03e87691..c5b7f656 100644 --- a/js-webshim/dev/shims/combos/17.js +++ b/js-webshim/dev/shims/combos/17.js @@ -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'); diff --git a/js-webshim/dev/shims/combos/2.js b/js-webshim/dev/shims/combos/2.js index 20b26a88..c3b8873f 100644 --- a/js-webshim/dev/shims/combos/2.js +++ b/js-webshim/dev/shims/combos/2.js @@ -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){ @@ -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] *')); } }); } diff --git a/js-webshim/dev/shims/combos/21.js b/js-webshim/dev/shims/combos/21.js index 1751efb6..e61e118d 100644 --- a/js-webshim/dev/shims/combos/21.js +++ b/js-webshim/dev/shims/combos/21.js @@ -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); diff --git a/js-webshim/dev/shims/combos/25.js b/js-webshim/dev/shims/combos/25.js index 1ea35b04..08ccd9f5 100644 --- a/js-webshim/dev/shims/combos/25.js +++ b/js-webshim/dev/shims/combos/25.js @@ -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){ @@ -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') || []; @@ -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); diff --git a/js-webshim/dev/shims/combos/26.js b/js-webshim/dev/shims/combos/26.js index c96f1be9..39131ada 100644 --- a/js-webshim/dev/shims/combos/26.js +++ b/js-webshim/dev/shims/combos/26.js @@ -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') || []; diff --git a/js-webshim/dev/shims/combos/27.js b/js-webshim/dev/shims/combos/27.js index 1d6a5d8a..64a45b36 100644 --- a/js-webshim/dev/shims/combos/27.js +++ b/js-webshim/dev/shims/combos/27.js @@ -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; } }); @@ -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); @@ -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 { @@ -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) ; @@ -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){ @@ -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 = $('') @@ -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') || []; diff --git a/js-webshim/dev/shims/combos/28.js b/js-webshim/dev/shims/combos/28.js index 9342cbf2..de2b950b 100644 --- a/js-webshim/dev/shims/combos/28.js +++ b/js-webshim/dev/shims/combos/28.js @@ -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') ); }; })() }, diff --git a/js-webshim/dev/shims/combos/3.js b/js-webshim/dev/shims/combos/3.js index b5b9926d..0f9493cc 100644 --- a/js-webshim/dev/shims/combos/3.js +++ b/js-webshim/dev/shims/combos/3.js @@ -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){ @@ -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] *')); } }); } diff --git a/js-webshim/dev/shims/combos/30.js b/js-webshim/dev/shims/combos/30.js index aa6b0c0d..e727d2d4 100644 --- a/js-webshim/dev/shims/combos/30.js +++ b/js-webshim/dev/shims/combos/30.js @@ -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){ @@ -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] *')); } }); } diff --git a/js-webshim/dev/shims/combos/31.js b/js-webshim/dev/shims/combos/31.js index ca8d6c72..c9a8430b 100644 --- a/js-webshim/dev/shims/combos/31.js +++ b/js-webshim/dev/shims/combos/31.js @@ -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){ @@ -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] *')); } }); } diff --git a/js-webshim/dev/shims/combos/34.js b/js-webshim/dev/shims/combos/34.js index 66b477f7..e1d716e9 100644 --- a/js-webshim/dev/shims/combos/34.js +++ b/js-webshim/dev/shims/combos/34.js @@ -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){ diff --git a/js-webshim/dev/shims/combos/4.js b/js-webshim/dev/shims/combos/4.js index 2814e04a..55c0fc60 100644 --- a/js-webshim/dev/shims/combos/4.js +++ b/js-webshim/dev/shims/combos/4.js @@ -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){ diff --git a/js-webshim/dev/shims/combos/5.js b/js-webshim/dev/shims/combos/5.js index 63ccde83..3afdfb08 100644 --- a/js-webshim/dev/shims/combos/5.js +++ b/js-webshim/dev/shims/combos/5.js @@ -3168,7 +3168,7 @@ webshims.register('form-native-extend', function($, webshims, window, doc, undef 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'); diff --git a/js-webshim/dev/shims/combos/6.js b/js-webshim/dev/shims/combos/6.js index b0b10c3a..3e7365dd 100644 --- a/js-webshim/dev/shims/combos/6.js +++ b/js-webshim/dev/shims/combos/6.js @@ -3168,7 +3168,7 @@ webshims.register('form-native-extend', function($, webshims, window, doc, undef 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'); diff --git a/js-webshim/dev/shims/combos/7.js b/js-webshim/dev/shims/combos/7.js index 3384d9cb..2fbf0b80 100644 --- a/js-webshim/dev/shims/combos/7.js +++ b/js-webshim/dev/shims/combos/7.js @@ -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){ @@ -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] *')); } }); } diff --git a/js-webshim/dev/shims/combos/8.js b/js-webshim/dev/shims/combos/8.js index b121c39f..9d792249 100644 --- a/js-webshim/dev/shims/combos/8.js +++ b/js-webshim/dev/shims/combos/8.js @@ -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){ @@ -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] *')); } }); } diff --git a/js-webshim/dev/shims/combos/9.js b/js-webshim/dev/shims/combos/9.js index 40fdbab6..8e70451e 100644 --- a/js-webshim/dev/shims/combos/9.js +++ b/js-webshim/dev/shims/combos/9.js @@ -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){ @@ -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'); diff --git a/js-webshim/dev/shims/dom-extend.js b/js-webshim/dev/shims/dom-extend.js index bad678ea..ac2ba763 100644 --- a/js-webshim/dev/shims/dom-extend.js +++ b/js-webshim/dev/shims/dom-extend.js @@ -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){ diff --git a/js-webshim/dev/shims/filereader.js b/js-webshim/dev/shims/filereader.js index 5d78544f..f8da375d 100644 --- a/js-webshim/dev/shims/filereader.js +++ b/js-webshim/dev/shims/filereader.js @@ -337,7 +337,7 @@ webshim.register('filereader', function($, webshim, window, document, undefined, 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') || []; diff --git a/js-webshim/dev/shims/form-core.js b/js-webshim/dev/shims/form-core.js index 99ba02bc..5e5d824b 100644 --- a/js-webshim/dev/shims/form-core.js +++ b/js-webshim/dev/shims/form-core.js @@ -100,11 +100,11 @@ webshims.register('form-core', function($, webshims, window, document, undefined }; $.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] *')); } }); } diff --git a/js-webshim/dev/shims/form-number-date-ui.js b/js-webshim/dev/shims/form-number-date-ui.js index 865526d8..c796d7d9 100644 --- a/js-webshim/dev/shims/form-number-date-ui.js +++ b/js-webshim/dev/shims/form-number-date-ui.js @@ -1721,7 +1721,7 @@ webshims.register('form-number-date-ui', 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'); diff --git a/js-webshim/dev/shims/form-shim-extend.js b/js-webshim/dev/shims/form-shim-extend.js index 3e59059d..c2e72c07 100644 --- a/js-webshim/dev/shims/form-shim-extend.js +++ b/js-webshim/dev/shims/form-shim-extend.js @@ -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') ); }; })() }, diff --git a/js-webshim/dev/shims/form-shim-extend2.js b/js-webshim/dev/shims/form-shim-extend2.js index 42f9c6d6..a121da01 100644 --- a/js-webshim/dev/shims/form-shim-extend2.js +++ b/js-webshim/dev/shims/form-shim-extend2.js @@ -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; } }); @@ -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); @@ -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 { @@ -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) ; @@ -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){ @@ -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 = $('') diff --git a/js-webshim/dev/shims/form-validation.js b/js-webshim/dev/shims/form-validation.js index 2964e5de..279601eb 100644 --- a/js-webshim/dev/shims/form-validation.js +++ b/js-webshim/dev/shims/form-validation.js @@ -111,7 +111,7 @@ webshims.register('form-validation', function($, webshims, window, document, und shadowType = shadowElem.prop('type'); } if( - (chromeBugs && (e.type == 'change' || webkitVersion < 537.36) && noFocusWidgets[shadowType] && $(e.target).is(':focus')) || + (chromeBugs && (e.type == 'change' || webkitVersion < 537.36) && noFocusWidgets[shadowType] && $.find.matchesSelector(e.target, ':focus')) || (e.type == 'focusout' && elem.type == 'radio' && isInGroup(elem.name)) ){ return; @@ -679,7 +679,7 @@ webshims.register('form-validation', function($, webshims, window, document, und var ret = $(elem).data('errortype'); if(!ret){ $.each(fields, function(errorName, cNames){ - if($(elem).is(cNames)){ + if($.find.matchesSelector(elem, cNames)){ ret = errorName; return false; } @@ -724,7 +724,8 @@ webshims.register('form-validation', function($, webshims, window, document, und }; })(), initIvalContentMessage: function(elem){ - if($(elem).jProp('form').is(iVal.sel)){ + var form; + if(iVal.sel && (form = $.prop(elem, 'form')) && $.find.matchesSelector(form, iVal.sel)){ this.get(elem); } }, @@ -840,7 +841,7 @@ webshims.register('form-validation', function($, webshims, window, document, und this.hideError(elem, true).removeClass(successWrapperClass); }, toggle: function(elem){ - if($(elem).is(':invalid')){ + if($.find.matchesSelector(elem, ':invalid')){ this.showError(elem); } else { this.hideError(elem); @@ -851,25 +852,21 @@ webshims.register('form-validation', function($, webshims, window, document, und $(document.body) .on({ 'changedvaliditystate': function(e){ - if(iVal.sel){ - var form = $(e.target).jProp('form'); - if(form.is(iVal.sel)){ - webshims.errorbox.toggle(e.target); - } + var form; + if(iVal.sel && (form = $.prop(e.target, 'form')) && $.find.matchesSelector(form, iVal.sel)){ + webshims.errorbox.toggle(e.target); } }, 'resetvalidityui.webshims': function(e){ - if (iVal.sel) { - var form = $(e.target).jProp('form'); - if (form.is(iVal.sel)) { - webshims.errorbox.reset(e.target); - } + var form; + if(iVal.sel && (form = $.prop(e.target, 'form')) && $.find.matchesSelector(form, iVal.sel)){ + webshims.errorbox.reset(e.target); } }, firstinvalid: function(e){ + var form; if(iVal.sel && iVal.handleBubble){ - var form = $(e.target).jProp('form'); - if(form.is(iVal.sel)){ + if(iVal.sel && (form = $.prop(e.target, 'form')) && $.find.matchesSelector(form, iVal.sel)){ e.preventDefault(); if(iVal.handleBubble != 'none'){ webshims.validityAlert.showFor( e.target, false, false, iVal.handleBubble == 'hide' ); @@ -878,7 +875,7 @@ webshims.register('form-validation', function($, webshims, window, document, und } }, submit: function(e){ - if(iVal.sel && iVal.submitCheck && $(e.target).is(iVal.sel) && $.prop(e.target, 'noValidate') && !$(e.target).checkValidity()){ + if(iVal.sel && iVal.submitCheck && $.find.matchesSelector(e.target, iVal.sel) && $.prop(e.target, 'noValidate') && !$(e.target).checkValidity()){ e.stopImmediatePropagation(); return false; } diff --git a/js-webshim/dev/shims/form-validators.js b/js-webshim/dev/shims/form-validators.js index 79f1c1fd..54d5dc66 100644 --- a/js-webshim/dev/shims/form-validators.js +++ b/js-webshim/dev/shims/form-validators.js @@ -35,7 +35,7 @@ webshims.ready('form-validation', function(){ elem = elements[id].elem; if(elem != noTest && elements[id].val != (val = elem.value)){ elements[id].val = val; - if(iValClasses && $(elem).hasClass(iValClasses)){ + if(iValClasses && $.find.matchesSelector(elem, iValClasses)){ $(elem).trigger('updatevalidation.webshims'); } else { testValidityRules(elem); @@ -423,7 +423,7 @@ webshims.ready('form-validation', function(){ } data.ajaxvalidate.depends.on('change', function(){ - if($(this).is(':valid')){ + if($.find.matchesSelector(this, ':valid')){ webshims.refreshCustomValidityRules(elem); } }); @@ -486,7 +486,7 @@ webshims.ready('form-validation', function(){ data = {}; data[$.prop(elem, 'name') || $.prop(elem, 'id')] = $(elem).val(); opts.depends.each(function(){ - if($(this).is(':invalid')){ + if($.find.matchesSelector(this, ':invalid')){ data = false; return false; } diff --git a/js-webshim/dev/shims/forms-picker.js b/js-webshim/dev/shims/forms-picker.js index 1b5156f5..a8647858 100644 --- a/js-webshim/dev/shims/forms-picker.js +++ b/js-webshim/dev/shims/forms-picker.js @@ -1495,7 +1495,7 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi data._commonDateInit = true; var o = data.options; var actionfn = function(e){ - if(!$(this).is('.othermonth') || $(this).css('cursor') == 'pointer'){ + if(!$(this).hasClass('othermonth') || $(this).css('cursor') == 'pointer'){ popover.actionFn({ 'data-action': $.attr(this, 'data-action'), value: $(this).val() || $.attr(this, 'value') @@ -1550,13 +1550,13 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi $('button', popover.buttonRow).each(function(){ var text; - if($(this).is('.ws-empty')){ + if($(this).hasClass('ws-empty')){ text = curCfg.date.clear; if(!text){ text = formcfg[''].date.clear || 'clear'; webshims.warn("could not get clear text from form cfg"); } - } else if($(this).is('.ws-current')){ + } else if($(this).hasClass('ws-current')){ text = (curCfg[data.type] || {}).currentText; if(!text){ text = (formcfg[''][[data.type]] || {}).currentText || (curCfg.date || {}).currentText || 'current'; diff --git a/js-webshim/dev/shims/mediaelement-jaris.js b/js-webshim/dev/shims/mediaelement-jaris.js index a12b6cbe..c7acd0ed 100644 --- a/js-webshim/dev/shims/mediaelement-jaris.js +++ b/js-webshim/dev/shims/mediaelement-jaris.js @@ -1211,11 +1211,11 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document, 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); diff --git a/js-webshim/dev/shims/track-ui.js b/js-webshim/dev/shims/track-ui.js index 2fa36dda..e18dcb6b 100644 --- a/js-webshim/dev/shims/track-ui.js +++ b/js-webshim/dev/shims/track-ui.js @@ -334,13 +334,13 @@ webshims.register('track-ui', function($, webshims, window, document, undefined) addTrackView(); } else { - if(elem.is('.nonnative-api-active')){ + if(elem.hasClass('nonnative-api-active')){ addTrackView(); } elem .on('mediaelementapichange trackapichange', function(){ - if(!usesNativeTrack() || elem.is('.nonnative-api-active')){ + if(!usesNativeTrack() || elem.hasClass('nonnative-api-active')){ addTrackView(); } else { clearTimeout(updateTimer); diff --git a/js-webshim/minified/polyfiller.js b/js-webshim/minified/polyfiller.js index 2528675c..5d5b66c6 100644 --- a/js-webshim/minified/polyfiller.js +++ b/js-webshim/minified/polyfiller.js @@ -1 +1 @@ -!function(a){var b=function(){window.asyncWebshims||(window.asyncWebshims={cfg:[],ready:[]})},c=function(){window.jQuery&&(a(jQuery),a=function(){return window.webshims})};window.webshims={setOptions:function(){b(),window.asyncWebshims.cfg.push(arguments)},ready:function(){b(),window.asyncWebshims.ready.push(arguments)},activeLang:function(a){b(),window.asyncWebshims.lang=a},polyfill:function(a){b(),window.asyncWebshims.polyfill=a},_curScript:function(){var a,b,c,d=document.currentScript;if(!d){try{throw new Error("")}catch(e){c=(e.sourceURL||e.stack||"").split("\n"),c=((c[c.length-1]||c[c.length-2]||"").match(/(?:fil|htt|wid|abo|app|res)(.)+/i)||[""])[0].replace(/[\:\s\(]+[\d\:\)\(\s]+$/,"")}for(a=document.scripts||document.getElementsByTagName("script"),b=0;b1?p[b]=a.isPlainObject(c)?a.extend(!0,p[b]||{},c):c:"object"==typeof b&&a.extend(!0,p,b)},getLazyFn:function(a,b){var c=function(){w(b)};return s("WINDOWLOAD",c),function(){var d=arguments,e=this;c(),s(b,function(){e[a].apply(e,d)})}},_getAutoEnhance:n,addPolyfill:function(b,c){c=c||{};var d=c.f||b;q[d]||(q[d]=[],f.featureList.push(d),p[d]={}),q[d].push(b),c.options=a.extend(p[d],c.options),x(b,c),c.methodNames&&a.each(c.methodNames,function(a,b){f.addMethodName(b)})},polyfill:function(){return function(a){a||(a=f.featureList),"string"==typeof a&&(a=a.split(" "));return f._polyfill(a)}}(),_polyfill:function(b){var d,e=[];c.run||(d=-1!==a.inArray("forms-ext",b),c(),d&&-1==a.inArray("forms",b)&&b.push("forms"),p.loadStyles&&v.loadCSS("styles/shim"+(d&&!u["form-number-date-ui"].test()?"-ext":"")+".css")),p.waitReady&&(a.readyWait++,s(b,function(){a.ready(!0)})),a.each(b,function(a,b){return b=o[b]||b,q[b]?(b!==q[b][0]&&s(q[b],function(){r(b,!0)}),void(e=e.concat(q[b]))):void r(b,!0)}),w(e),a.each(b,function(a,b){var c=p[b];c&&("mediaelement"==b&&(c.replaceUI=n(c.replaceUI))&&c.plugins.unshift("mediacontrols"),c.plugins&&c.plugins.length&&w(p[b].plugins))})},reTest:function(){var b,c=function(c,d){var e=u[d],f=d+"Ready";!e||e.loaded||(e.test&&a.isFunction(e.test)?e.test([]):e.test)||(h[f]&&delete h[f],q[e.f],b.push(d))};return function(d){"string"==typeof d&&(d=d.split(" ")),b=[],a.each(d,c),w(b)}}(),isReady:function(b,c){if(b+="Ready",c){if(h[b]&&h[b].add)return!0;h[b]=a.extend(h[b]||{},{add:function(a){a.handler.call(this,b)}}),a(document).triggerHandler(b)}return!(!h[b]||!h[b].add)||!1},ready:function(b,c){var d=arguments[2];if("string"==typeof b&&(b=b.split(" ")),d||(b=a.map(a.grep(b,function(a){return!r(a)}),function(a){return a+"Ready"})),!b.length)return void c(a,f,window,document);var e=b.shift(),g=function(){s(b,c,!0)};a(document).one(e,g)},capturingEvents:function(b,c){document.addEventListener&&("string"==typeof b&&(b=[b]),a.each(b,function(b,d){var e=function(b){return b=a.event.fix(b),c&&f.capturingEventPrevented&&f.capturingEventPrevented(b),a.event.dispatch.call(this,b)};h[d]=h[d]||{},h[d].setup||h[d].teardown||a.extend(h[d],{setup:function(){this.addEventListener(d,e,!0)},teardown:function(){this.removeEventListener(d,e,!0)}})}))},register:function(b,c){var d=u[b];if(!d)return void f.error("can't find module: "+b);d.loaded=!0;var e=function(){c(a,f,window,document,void 0,d.options),r(b,!0)};d.d&&d.d.length?s(d.d,e):e()},c:{},loader:{addModule:function(b,c){u[b]=c,c.name=c.name||b,c.c||(c.c=[]),a.each(c.c,function(a,c){f.c[c]||(f.c[c]=[]),f.c[c].push(b)})},loadList:function(){var b=[],c=function(c,d){"string"==typeof d&&(d=[d]),a.merge(b,d),v.loadScript(c,!1,d)},d=function(c,d){if(r(c)||-1!=a.inArray(c,b))return!0;var e,f=u[c];return f?(e=f.test&&a.isFunction(f.test)?f.test(d):f.test,e?(r(c,!0),!0):!1):!0},e=function(b,c){if(b.d&&b.d.length){var e=function(b,e){d(e,c)||-1!=a.inArray(e,c)||c.push(e)};a.each(b.d,function(b,c){u[c]?u[c].loaded||e(b,c):q[c]&&(a.each(q[c],e),s(q[c],function(){r(c,!0)}))}),b.noAutoCallback||(b.noAutoCallback=!0)}};return function(g){var h,i,j,k,l=[],m=function(d,e){return k=e,a.each(f.c[e],function(c,d){return-1==a.inArray(d,l)||-1!=a.inArray(d,b)?(k=!1,!1):void 0}),k?(c("combos/"+k,f.c[k]),!1):void 0};for(i=0;ii;i++)k=!1,h=l[i],-1==a.inArray(h,b)&&("noCombo"!=p.debug&&a.each(u[h].c,m),k||c(u[h].src||h,h))}}(),makePath:function(a){return-1!=a.indexOf("//")||0===a.indexOf("/")?a:(-1==a.indexOf(".")&&(a+=".js"),p.addCacheBuster&&(a+=p.addCacheBuster),p.basePath+a)},loadCSS:function(){var b,c={};return function(d){d=this.makePath(d),c[d]||(b=b||a("link, style")[0]||a("script")[0],c[d]=1,a('').insertBefore(b).attr({href:d}))}}(),loadScript:function(){var b={};return function(c,d,e,f){if(f||(c=v.makePath(c)),!b[c]){var g=function(){d&&d(),e&&("string"==typeof e&&(e=e.split(" ")),a.each(e,function(a,b){u[b]&&(u[b].afterLoad&&u[b].afterLoad(),r(u[b].noAutoCallback?b+"FileLoaded":b,!0))}))};b[c]=1,p.loadScript(c,g,a.noop)}}}()}});var p=f.cfg,q=f.features,r=f.isReady,s=f.ready,t=f.addPolyfill,u=f.modules,v=f.loader,w=v.loadList,x=v.addModule,y=f.bugs,z=[],A={warn:1,error:1},B=a.fn;return f.addMethodName=function(a){a=a.split(":");var b=a[1];1==a.length?(b=a[0],a=a[0]):a=a[0],B[a]=function(){return this.callProp(b,arguments)}},B.callProp=function(b,c){var d;return c||(c=[]),this.each(function(){var e=a.prop(this,b);if(e&&e.apply){if(d=e.apply(this,c),void 0!==d)return!1}else f.warn(b+" is not a method of "+this)}),void 0!==d?d:this},f.activeLang=function(){"language"in e||(e.language=e.browserLanguage||"");var b=a.attr(document.documentElement,"lang")||e.language;return s("webshimLocalization",function(){f.activeLang(b)}),function(a){if(a)if("string"==typeof a)b=a;else if("object"==typeof a){var c=arguments,d=this;s("webshimLocalization",function(){f.activeLang.apply(d,c)})}return b}}(),f.errorLog=[],a.each(["log","error","warn","info"],function(a,b){f[b]=function(a){(A[b]&&p.debug!==!1||p.debug)&&(f.errorLog.push(a),window.console&&console.log&&console[console[b]?b:"log"](a))}}),function(){a.isDOMReady=a.isReady;var b=function(){a.isDOMReady=!0,r("DOM",!0),setTimeout(function(){r("WINDOWLOAD",!0)},9999)};c=function(){if(!c.run){if((p.debug||!("crossDomain"in p.ajax)&&location.protocol.indexOf("http"))&&(p.ajax.crossDomain=!0),!a.isDOMReady&&p.waitReady){var d=a.ready;a.ready=function(a){return a!==!0&&document.body&&b(),d.apply(this,arguments)},a.ready.promise=d.promise}p.readyEvt?a(document).one(p.readyEvt,b):a(b)}c.run=!0},a(window).on("load",function(){b(),setTimeout(function(){r("WINDOWLOAD",!0)},9)});var d=[],e=function(){1==this.nodeType&&f.triggerDomUpdate(this)};a.extend(f,{addReady:function(a){var b=function(b,c){f.ready("DOM",function(){a(b,c)})};d.push(b),p.wsdoc&&b(p.wsdoc,i)},triggerDomUpdate:function(b){if(!b||!b.nodeType)return void(b&&b.jquery&&b.each(function(){f.triggerDomUpdate(this)}));var c=b.nodeType;if(1==c||9==c){var e=b!==document?a(b):i;a.each(d,function(a,c){c(b,e)})}}}),B.clonePolyfill=B.clone,B.htmlPolyfill=function(b){if(!arguments.length)return a(this.clonePolyfill()).html();var c=B.html.call(this,b);return c===this&&a.isDOMReady&&this.each(e),c},B.jProp=function(){return this.pushStack(a(B.prop.apply(this,arguments)||[]))},a.each(["after","before","append","prepend","replaceWith"],function(b,c){B[c+"Polyfill"]=function(b){return b=a(b),B[c].call(this,b),a.isDOMReady&&b.each(e),this}}),a.each(["insertAfter","insertBefore","appendTo","prependTo","replaceAll"],function(b,c){B[c.replace(/[A-Z]/,function(a){return"Polyfill"+a})]=function(){return B[c].apply(this,arguments),a.isDOMReady&&f.triggerDomUpdate(this),this}}),B.updatePolyfill=function(){return a.isDOMReady&&f.triggerDomUpdate(this),this},a.each(["getNativeElement","getShadowElement","getShadowFocusElement"],function(a,b){B[b]=function(){return this.pushStack(this)}})}(),l.create&&(f.objectCreate=function(b,c,d){var e=l.create(b);return d&&(e.options=a.extend(!0,{},e.options||{},d),d=e.options),e._create&&a.isFunction(e._create)&&e._create(d),e}),x("swfmini",{test:function(){return window.swfobject&&!window.swfmini&&(window.swfmini=window.swfobject),"swfmini"in window},c:[16,7,2,8,1,12,23]}),u.swfmini.test(),x("sizzle",{test:a.expr.filters}),x("jajax",{test:a.ajax&&a.ajaxSettings.xhr}),t("es5",{test:!(!k.ES5||!Function.prototype.bind),d:["sizzle"]}),t("dom-extend",{f:g,noAutoCallback:!0,d:["es5"],c:[16,7,2,15,30,3,8,4,9,10,25,31,34]}),b("picture"),t("picture",{test:"picturefill"in window||!!window.HTMLPictureElement,d:["matchMedia"],c:[18],loadInit:function(){r("picture",!0)}}),t("matchMedia",{test:!(!window.matchMedia||!matchMedia("all").addListener),c:[18]}),t("es6",{test:!!(Math.imul&&Number.MIN_SAFE_INTEGER&&l.is&&window.Promise&&Promise.all),d:["es5"]}),t("geolocation",{test:"geolocation"in e,options:{destroyWrite:!0},c:[21]}),function(){t("canvas",{src:"excanvas",test:"getContext"in b("canvas"),options:{type:"flash"},noAutoCallback:!0,loadInit:function(){var a=this.options.type;!a||-1===a.indexOf("flash")||u.swfmini.test()&&!swfmini.hasFlashPlayerVersion("9.0.0")||(this.src="flash"==a?"FlashCanvas/flashcanvas":"FlashCanvasPro/flashcanvas")},methodNames:["getContext"],d:[g]})}(),function(){var c,d,h="form-shim-extend",i="formvalidation",j="form-number-date-api",l=!1,m=!1,o=!1,q={},r=b("progress"),s=b("output"),v=function(){var d,f,g=b("input");if(f=a('