vendor/assets/javascripts/webshims/shims/combos/24.js in webshims-rails-1.10.9 vs vendor/assets/javascripts/webshims/shims/combos/24.js in webshims-rails-1.10.10
- old
+ new
@@ -78,11 +78,11 @@
var switchValidityClass = function(e){
var elem, timer, shadowElem, shadowType;
if(!e.target){return;}
elem = $(e.target).getNativeElement()[0];
shadowElem = $(elem).getShadowElement();
- if(elem.type == 'submit' || !$.prop(elem, 'willValidate') || (e.type == 'change' && !changeTypes[(shadowType = shadowElem.prop('type'))])){return;}
+ if(elem.type == 'submit' || !$.prop(elem, 'willValidate') || (e.type == 'change' && (shadowType = shadowElem.prop('type')) && !changeTypes[shadowType])){return;}
timer = $.data(elem, 'webshimsswitchvalidityclass');
var switchClass = function(){
if(!shadowType){
shadowType = shadowElem.prop('type');
}
@@ -153,11 +153,11 @@
} else {
$.data(elem, 'webshimsswitchvalidityclass', setTimeout(switchClass, 9));
}
};
- $(document.body)
+ $(document.body || 'html')
.on(options.validityUIEvents || 'focusout change refreshvalidityui invalid', switchValidityClass)
.on('reset resetvalui', function(e){
var elems = $(e.target);
if(e.type == 'reset'){
elems = elems.filter('form').jProp('elements');
@@ -185,22 +185,48 @@
var minWidth = (Modernizr.boxSizing || Modernizr['display-table'] || $.support.getSetAttribute) ?
'minWidth' :
'width'
;
var hasTransition = ('transitionDelay' in document.documentElement.style);
+ var resetPos = {display: 'inline-block', left: 0, top: 0, marginTop: 0, marginLeft: 0, marginRight: 0, marginBottom: 0};
+
setRoot();
webshims.ready('DOM', setRoot);
- webshims.getRelOffset = function(posElem, relElem){
+
+ webshims.getRelOffset = function(posElem, relElem, opts){
+ var offset, bodyOffset, dirs;
posElem = $(posElem);
- var offset = $(relElem).offset();
- var bodyOffset;
- $.swap($(posElem)[0], {visibility: 'hidden', display: 'inline-block', left: 0, top: 0}, function(){
- bodyOffset = posElem.offset();
+ $.swap($(posElem)[0], resetPos, function(){
+ if($.position && opts && $.position.getScrollInfo){
+ if(!opts.of){
+ opts.of = relElem;
+ }
+
+ opts.using = function(calced, data){
+ posElem.attr({'data-horizontal': data.horizontal, 'data-vertical': data.vertical});
+ offset = calced;
+ };
+ posElem.attr({
+ 'data-horizontal': '',
+ 'data-vertical': '',
+ 'data-my': opts.my || 'center',
+ 'data-at': opts.at || 'center'
+ });
+ posElem.position(opts);
+
+ } else {
+ offset = $(relElem).offset();
+ bodyOffset = posElem.offset();
+ offset.top -= bodyOffset.top;
+ offset.left -= bodyOffset.left;
+
+ offset.top += relElem.outerHeight();
+ }
+
});
- offset.top -= bodyOffset.top;
- offset.left -= bodyOffset.left;
+
return offset;
};
$.extend(webshims.wsPopover, {
@@ -247,13 +273,14 @@
}, 400);
});
},
prepareFor: function(element, visual){
var onBlur;
- var opts = $.extend({}, this.options, $(element.prop('form') || []).data('wspopover') || {}, element.data('wspopover'));
var that = this;
var css = {};
+ var opts = $.extend(true, {}, this.options, $(element.prop('form') || []).data('wspopover') || {}, element.data('wspopover'));
+ this.lastOpts = opts;
this.lastElement = $(element).getShadowFocusElement();
if(!this.prepared || !this.options.prepareFor){
if(opts.appendTo == 'element'){
this.element.insertAfter(element);
} else {
@@ -295,10 +322,11 @@
clear: function(){
$(window).off(this.eventns);
$(document).off(this.eventns);
this.element.off('transitionend'+this.eventns);
this.stopBlur = false;
+ this.lastOpts = false;
$.each(this.timers, function(timerName, val){
clearTimeout(val);
});
},
hide: function(){
@@ -322,20 +350,26 @@
}
that.timers.forcehide = setTimeout(forceHide, hasTransition ? 600 : 40);
},
position: function(element){
- var offset = webshims.getRelOffset(this.element.css({marginTop: 0, marginLeft: 0, marginRight: 0, marginBottom: 0}).removeAttr('hidden'), element);
- offset.top += element.outerHeight();
- this.element.css({marginTop: '', marginLeft: '', marginRight: '', marginBottom: ''}).css(offset);
+ var offset = webshims.getRelOffset(this.element.removeAttr('hidden'), element, (this.lastOpts || this.options).position);
+
+ this.element.css(offset);
}
});
/* some extra validation UI */
webshims.validityAlert = (function(){
+
+ options.messagePopover.position = $.extend({}, {
+ at: 'left bottom',
+ my: 'left top',
+ collision: 'none'
+ }, options.messagePopover.position || {});
var focusTimer = false;
var api = webshims.objectCreate(webshims.wsPopover, {}, options.messagePopover);
var boundHide = api.hide.bind(api);
@@ -563,9 +597,10 @@
}
}
},
submit: function(e){
if(options.iVal.sel && $(e.target).is(options.iVal.sel) && $.prop(e.target, 'noValidate') && !$(e.target).checkValidity()){
+ e.stopImmediatePropagation();
return false;
}
}
})
;