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; } } }) ;