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