vendor/assets/javascripts/webshims/shims/combos/3.js in webshims-rails-0.4.6 vs vendor/assets/javascripts/webshims/shims/combos/3.js in webshims-rails-0.4.7

- old
+ new

@@ -1,8 +1,9 @@ //additional tests for partial implementation of forms features (function($){ "use strict"; + var isWebkit = /webkit/i.test(navigator.userAgent); var Modernizr = window.Modernizr; var webshims = $.webshims; var bugs = webshims.bugs; var form = $('<form action="#" style="width: 1px; height: 1px; overflow: hidden;"><select name="b" required="" /><input required="" name="a" /></form>'); var testRequiredFind = function(){ @@ -41,85 +42,85 @@ } }; if(!Modernizr.formvalidation || bugs.bustedValidity){ testRequiredFind(); - return; - } - - //create delegatable events - webshims.capturingEvents(['input']); - webshims.capturingEvents(['invalid'], true); - - if(window.opera || window.testGoodWithFix){ + } else { + //create delegatable events + webshims.capturingEvents(['input']); + webshims.capturingEvents(['invalid'], true); - form.appendTo('head'); - - testRequiredFind(); - bugs.validationMessage = !(inputElem.prop('validationMessage')); - - webshims.reTest(['form-native-extend', 'form-message']); - - form.remove(); + if(window.opera || window.testGoodWithFix){ - $(function(){ - onDomextend(function(){ + form.appendTo('head'); + + testRequiredFind(); + bugs.validationMessage = !(inputElem.prop('validationMessage')); + + webshims.reTest(['form-native-extend', 'form-message']); + + form.remove(); - //Opera shows native validation bubbles in case of input.checkValidity() - // Opera 11.6/12 hasn't fixed this issue right, it's buggy - var preventDefault = function(e){ - e.preventDefault(); - }; - - ['form', 'input', 'textarea', 'select'].forEach(function(name){ - var desc = webshims.defineNodeNameProperty(name, 'checkValidity', { - prop: { - value: function(){ - if (!webshims.fromSubmit) { - $(this).on('invalid.checkvalidity', preventDefault); + $(function(){ + onDomextend(function(){ + + //Opera shows native validation bubbles in case of input.checkValidity() + // Opera 11.6/12 hasn't fixed this issue right, it's buggy + var preventDefault = function(e){ + e.preventDefault(); + }; + + ['form', 'input', 'textarea', 'select'].forEach(function(name){ + var desc = webshims.defineNodeNameProperty(name, 'checkValidity', { + prop: { + value: function(){ + if (!webshims.fromSubmit) { + $(this).on('invalid.checkvalidity', preventDefault); + } + + webshims.fromCheckValidity = true; + var ret = desc.prop._supvalue.apply(this, arguments); + if (!webshims.fromSubmit) { + $(this).unbind('invalid.checkvalidity', preventDefault); + } + webshims.fromCheckValidity = false; + return ret; } - - webshims.fromCheckValidity = true; - var ret = desc.prop._supvalue.apply(this, arguments); - if (!webshims.fromSubmit) { - $(this).unbind('invalid.checkvalidity', preventDefault); - } - webshims.fromCheckValidity = false; - return ret; } - } + }); }); + }); - }); - }); + } + + if(isWebkit && !webshims.bugs.bustedValidity){ + (function(){ + var elems = /^(?:textarea|input)$/i; + var form = false; + + document.addEventListener('contextmenu', function(e){ + if(elems.test( e.target.nodeName || '') && (form = e.target.form)){ + setTimeout(function(){ + form = false; + }, 1); + } + }, false); + + $(window).on('invalid', function(e){ + if(e.originalEvent && form && form == e.target.form){ + e.wrongWebkitInvalid = true; + e.stopImmediatePropagation(); + } + }); + + })(); + } } - if($.browser.webkit && !webshims.bugs.bustedValidity){ - (function(){ - var elems = /^(?:textarea|input)$/i; - var form = false; - - document.addEventListener('contextmenu', function(e){ - if(elems.test( e.target.nodeName || '') && (form = e.target.form)){ - setTimeout(function(){ - form = false; - }, 1); - } - }, false); - - $(window).on('invalid', function(e){ - if(e.originalEvent && form && form == e.target.form){ - e.wrongWebkitInvalid = true; - e.stopImmediatePropagation(); - } - }); - - })(); - } -})(jQuery); + jQuery.webshims.register('form-core', function($, webshims, window, document, undefined, options){ "use strict"; var checkTypes = {checkbox: 1, radio: 1}; @@ -229,11 +230,11 @@ return elem === doc.activeElement && (!doc.hasFocus || doc.hasFocus()); } catch(e){} return false; }; - if(Modernizr.formvalidation && $.browser.webkit && !webshims.bugs.bustedValidity && webshims.browserVersion < 27){ + if(Modernizr.formvalidation && isWebkit && !webshims.bugs.bustedValidity){ (function(){ var retriggerRadioValidity = function(){ var validity; if((validity = this.validity) && !validity.customError){ this.setCustomValidity(''); @@ -408,11 +409,11 @@ webshims.modules["form-core"].getGroupElements = getGroupElements; var setRoot = function(){ - webshims.scrollRoot = ($.browser.webkit || document.compatMode == 'BackCompat') ? + webshims.scrollRoot = (isWebkit || document.compatMode == 'BackCompat') ? $(document.body) : $(document.documentElement) ; }; setRoot(); @@ -430,11 +431,11 @@ return offset; }; /* some extra validation UI */ webshims.validityAlert = (function(){ - var alertElem = (!$.browser.msie || parseInt($.browser.version, 10) > 7) ? 'span' : 'label'; + var alertElem = 'span'; var errorBubble; var hideTimer = false; var focusTimer = false; var resizeTimer = false; var boundHide; @@ -545,11 +546,11 @@ _create: function(){ if(errorBubble){return;} errorBubble = api.errorBubble = $('<'+alertElem+' class="validity-alert-wrapper" role="alert"><span class="validity-alert"><span class="va-arrow"><span class="va-arrow-box"></span></span><span class="va-box"></span></span></'+alertElem+'>').css({position: 'absolute', display: 'none'}); webshims.ready('DOM', function(){ errorBubble.appendTo('body'); - if($.fn.bgIframe && $.browser.msie && parseInt($.browser.version, 10) < 7){ + if($.fn.bgIframe){ errorBubble.bgIframe(); } }); } }; @@ -625,12 +626,13 @@ $.webshims.validityAlert.showFor( e.target ); } }); }); } - }); + +})(jQuery); if(!Modernizr.formvalidation || jQuery.webshims.bugs.bustedValidity){ jQuery.webshims.register('form-shim-extend', function($, webshims, window, document){ "use strict"; webshims.inputTypes = webshims.inputTypes || {}; //some helper-functions @@ -980,11 +982,11 @@ webshims.defineNodeNamesBooleanProperty(['input', 'textarea', 'select'], 'required', { set: function(value){ $(this).getShadowFocusElement().attr('aria-required', !!(value)+''); }, - initAttr: (!$.browser.msie || webshims.browserVersion > 7)//only if we have aria-support + initAttr: (Modernizr.localstorage)//only if we have aria-support }); webshims.reflectProperties(['input'], ['pattern']); @@ -1295,18 +1297,17 @@ return $.attr(this, 'novalidate') != null; } } }); -if($.browser.webkit && Modernizr.inputtypes.date){ +if(Modernizr.inputtypes.date && /webkit/i.test(navigator.userAgent)){ (function(){ var noInputTriggerEvts = {updateInput: 1, input: 1}, fixInputTypes = { date: 1, - time: 1, - "datetime-local": 1 + time: 1 }, noFocusEvents = { focusout: 1, blur: 1 }, @@ -1726,12 +1727,11 @@ })(); } (function(){ Modernizr.textareaPlaceholder = !!('placeholder' in $('<textarea />')[0]); - var bustedTextarea = $.browser.webkit && Modernizr.textareaPlaceholder && webshims.browserVersion < 535; - if(Modernizr.input.placeholder && Modernizr.textareaPlaceholder && !bustedTextarea){return;} + if(Modernizr.input.placeholder && Modernizr.textareaPlaceholder){return;} var isOver = (webshims.cfg.forms.placeholderType == 'over'); var isResponsive = (webshims.cfg.forms.responsivePlaceholder); var polyfillElements = ['textarea']; if(!Modernizr.input.placeholder){ @@ -1929,12 +1929,12 @@ $.each(['Left', 'Top'], function(i, side){ var size = (parseInt($.css(elem, 'padding'+ side), 10) || 0) + Math.max((parseInt($.css(elem, 'margin'+ side), 10) || 0), 0) + (parseInt($.css(elem, 'border'+ side +'Width'), 10) || 0); data.text.css('padding'+ side, size); }); - $(elem) - .on('updateshadowdom', function(){ + $(document) + .onTrigger('updateshadowdom', function(){ var height, width; if((width = elem.offsetWidth) || (height = elem.offsetHeight)){ data.text .css({ width: width, @@ -1942,11 +1942,10 @@ }) .css($(elem).position()) ; } }) - .triggerHandler('updateshadowdom') ; } else { var reset = function(e){ if($(elem).hasClass('placeholder-visible')){ @@ -1998,21 +1997,15 @@ polyfillElements.forEach(function(nodeName){ var desc = webshims.defineNodeNameProperty(nodeName, 'placeholder', { attr: { set: function(val){ var elem = this; - if(bustedTextarea){ - webshims.data(elem, 'textareaPlaceholder', val); - elem.placeholder = ''; - } else { - webshims.contentAttr(elem, 'placeholder', val); - } + webshims.contentAttr(elem, 'placeholder', val); pHolder.update(elem, val); }, get: function(){ - var ret = (bustedTextarea) ? webshims.data(this, 'textareaPlaceholder') : ''; - return ret || webshims.contentAttr(this, 'placeholder'); + return webshims.contentAttr(this, 'placeholder'); } }, reflect: true, initAttr: true }); @@ -2024,17 +2017,13 @@ var desc; ['attr', 'prop'].forEach(function(propType){ placeholderValueDesc[propType] = { set: function(val){ var elem = this; - var placeholder; - if(bustedTextarea){ - placeholder = webshims.data(elem, 'textareaPlaceholder'); - } - if(!placeholder){ - placeholder = webshims.contentAttr(elem, 'placeholder'); - } + var placeholder = webshims.contentAttr(elem, 'placeholder'); + + $.removeData(elem, 'cachedValidity'); var ret = desc[propType]._supset.call(elem, val); if(placeholder && 'value' in elem){ changePlaceholderVisibility(elem, val, placeholder); } @@ -2591,11 +2580,10 @@ //ToDo range: 1, date: 1 }; - var lteie6 = ($.browser.msie && parseInt($.browser.version, 10) < 7); var globStoredOptions = {}; var getStoredOptions = function(name){ if(!name){return [];} if(globStoredOptions[name]){ return globStoredOptions[name]; @@ -2875,10 +2863,10 @@ } this.arrayOptions = allOptions; this.shadowList.html('<div class="datalist-outer-box"><div class="datalist-box"><ul role="list">'+ list.join("\n") +'</ul></div></div>'); - if($.fn.bgIframe && lteie6){ + if($.fn.bgIframe){ this.shadowList.bgIframe(); } if(_forceShow || this.isListVisible){ this.showHideOptions(); \ No newline at end of file