2012-10-17 13:32:25 +00:00
/ * !
* jQuery blockUI plugin
2015-01-01 12:35:31 +00:00
* Version 2.70 . 0 - 2014.11 . 23
2013-12-05 18:54:20 +00:00
* Requires jQuery v1 . 7 or later
2012-10-17 13:32:25 +00:00
*
* Examples at : http : //malsup.com/jquery/block/
2013-05-28 16:02:18 +00:00
* Copyright ( c ) 2007 - 2013 M . Alsup
2012-10-17 13:32:25 +00:00
* Dual licensed under the MIT and GPL licenses :
* http : //www.opensource.org/licenses/mit-license.php
* http : //www.gnu.org/licenses/gpl.html
*
* Thanks to Amir - Hossein Sobhi for some excellent contributions !
* /
; ( function ( ) {
2013-05-28 16:02:18 +00:00
/*jshint eqeqeq:false curly:false latedef:false */
2012-10-17 13:32:25 +00:00
"use strict" ;
function setup ( $ ) {
$ . fn . _fadeIn = $ . fn . fadeIn ;
var noOp = $ . noop || function ( ) { } ;
// this bit is to ensure we don't call setExpression when we shouldn't (with extra muscle to handle
2013-12-05 18:54:20 +00:00
// confusing userAgent strings on Vista)
2012-10-17 13:32:25 +00:00
var msie = /MSIE/ . test ( navigator . userAgent ) ;
2013-05-28 16:02:18 +00:00
var ie6 = /MSIE 6.0/ . test ( navigator . userAgent ) && ! /MSIE 8.0/ . test ( navigator . userAgent ) ;
2012-10-17 13:32:25 +00:00
var mode = document . documentMode || 0 ;
2021-02-04 16:04:38 +00:00
var setExpr = 'function' === typeof document . createElement ( 'div' ) . style . setExpression ? document . createElement ( 'div' ) . style . setExpression : false ;
2012-10-17 13:32:25 +00:00
// global $ methods for blocking/unblocking the entire page
$ . blockUI = function ( opts ) { install ( window , opts ) ; } ;
$ . unblockUI = function ( opts ) { remove ( window , opts ) ; } ;
// convenience method for quick growl-like notifications (http://www.google.com/search?q=growl)
$ . growlUI = function ( title , message , timeout , onClose ) {
var $m = $ ( '<div class="growlUI"></div>' ) ;
if ( title ) $m . append ( '<h1>' + title + '</h1>' ) ;
if ( message ) $m . append ( '<h2>' + message + '</h2>' ) ;
if ( timeout === undefined ) timeout = 3000 ;
2013-12-05 18:54:20 +00:00
// Added by konapun: Set timeout to 30 seconds if this growl is moused over, like normal toast notifications
var callBlock = function ( opts ) {
opts = opts || { } ;
$ . blockUI ( {
message : $m ,
fadeIn : typeof opts . fadeIn !== 'undefined' ? opts . fadeIn : 700 ,
fadeOut : typeof opts . fadeOut !== 'undefined' ? opts . fadeOut : 1000 ,
timeout : typeof opts . timeout !== 'undefined' ? opts . timeout : timeout ,
centerY : false ,
showOverlay : false ,
onUnblock : onClose ,
css : $ . blockUI . defaults . growlCSS
} ) ;
} ;
callBlock ( ) ;
var nonmousedOpacity = $m . css ( 'opacity' ) ;
2021-02-04 16:04:38 +00:00
$m . on ( 'mouseover' , function ( ) {
2013-12-05 18:54:20 +00:00
callBlock ( {
fadeIn : 0 ,
timeout : 30000
} ) ;
var displayBlock = $ ( '.blockMsg' ) ;
displayBlock . stop ( ) ; // cancel fadeout if it has started
displayBlock . fadeTo ( 300 , 1 ) ; // make it easier to read the message by removing transparency
2021-02-04 16:04:38 +00:00
} ) . on ( 'mouseout' , function ( ) {
2013-12-05 18:54:20 +00:00
$ ( '.blockMsg' ) . fadeOut ( 1000 ) ;
2012-10-17 13:32:25 +00:00
} ) ;
2013-12-05 18:54:20 +00:00
// End konapun additions
2012-10-17 13:32:25 +00:00
} ;
// plugin method for blocking element content
$ . fn . block = function ( opts ) {
2013-05-28 16:02:18 +00:00
if ( this [ 0 ] === window ) {
$ . blockUI ( opts ) ;
return this ;
}
2012-10-17 13:32:25 +00:00
var fullOpts = $ . extend ( { } , $ . blockUI . defaults , opts || { } ) ;
this . each ( function ( ) {
var $el = $ ( this ) ;
if ( fullOpts . ignoreIfBlocked && $el . data ( 'blockUI.isBlocked' ) )
return ;
$el . unblock ( { fadeOut : 0 } ) ;
} ) ;
return this . each ( function ( ) {
2013-05-28 16:02:18 +00:00
if ( $ . css ( this , 'position' ) == 'static' ) {
2012-10-17 13:32:25 +00:00
this . style . position = 'relative' ;
2013-05-28 16:02:18 +00:00
$ ( this ) . data ( 'blockUI.static' , true ) ;
}
2012-10-17 13:32:25 +00:00
this . style . zoom = 1 ; // force 'hasLayout' in ie
install ( this , opts ) ;
} ) ;
} ;
// plugin method for unblocking element content
$ . fn . unblock = function ( opts ) {
2013-05-28 16:02:18 +00:00
if ( this [ 0 ] === window ) {
$ . unblockUI ( opts ) ;
return this ;
}
2012-10-17 13:32:25 +00:00
return this . each ( function ( ) {
remove ( this , opts ) ;
} ) ;
} ;
2015-01-01 12:35:31 +00:00
$ . blockUI . version = 2.70 ; // 2nd generation blocking at no extra cost!
2012-10-17 13:32:25 +00:00
// override these in your code to change the default behavior and style
$ . blockUI . defaults = {
// message displayed when blocking (use null for no message)
message : '<h1>Please wait...</h1>' ,
title : null , // title string; only used when theme == true
draggable : true , // only used when theme == true (requires jquery-ui.js to be loaded)
theme : false , // set to true to use with jQuery UI themes
// styles for the message when blocking; if you wish to disable
// these and use an external stylesheet then do this in your code:
// $.blockUI.defaults.css = {};
css : {
padding : 0 ,
margin : 0 ,
width : '30%' ,
top : '40%' ,
left : '35%' ,
textAlign : 'center' ,
color : '#000' ,
border : '3px solid #aaa' ,
backgroundColor : '#fff' ,
cursor : 'wait'
} ,
// minimal style set used when themes are used
themedCSS : {
width : '30%' ,
top : '40%' ,
left : '35%'
} ,
// styles for the overlay
overlayCSS : {
backgroundColor : '#000' ,
opacity : 0.6 ,
cursor : 'wait'
} ,
2013-05-28 16:02:18 +00:00
// style to replace wait cursor before unblocking to correct issue
// of lingering wait cursor
cursorReset : 'default' ,
2012-10-17 13:32:25 +00:00
// styles applied when using $.growlUI
growlCSS : {
width : '350px' ,
top : '10px' ,
left : '' ,
right : '10px' ,
border : 'none' ,
padding : '5px' ,
opacity : 0.6 ,
cursor : 'default' ,
color : '#fff' ,
backgroundColor : '#000' ,
'-webkit-border-radius' : '10px' ,
'-moz-border-radius' : '10px' ,
'border-radius' : '10px'
} ,
// IE issues: 'about:blank' fails on HTTPS and javascript:false is s-l-o-w
// (hat tip to Jorge H. N. de Vasconcelos)
/*jshint scripturl:true */
iframeSrc : /^https/i . test ( window . location . href || '' ) ? 'javascript:false' : 'about:blank' ,
// force usage of iframe in non-IE browsers (handy for blocking applets)
forceIframe : false ,
// z-index for the blocking overlay
baseZ : 1000 ,
// set these to true to have the message automatically centered
centerX : true , // <-- only effects element blocking (page block controlled via css above)
centerY : true ,
// allow body element to be stetched in ie6; this makes blocking look better
// on "short" pages. disable if you wish to prevent changes to the body height
allowBodyStretch : true ,
// enable if you want key and mouse events to be disabled for content that is blocked
bindEvents : true ,
// be default blockUI will supress tab navigation from leaving blocking content
// (if bindEvents is true)
constrainTabKey : true ,
// fadeIn time in millis; set to 0 to disable fadeIn on block
fadeIn : 200 ,
// fadeOut time in millis; set to 0 to disable fadeOut on unblock
fadeOut : 400 ,
// time in millis to wait before auto-unblocking; set to 0 to disable auto-unblock
timeout : 0 ,
// disable if you don't want to show the overlay
showOverlay : true ,
// if true, focus will be placed in the first available input field when
// page blocking
focusInput : true ,
2013-05-28 16:02:18 +00:00
// elements that can receive focus
focusableElements : ':input:enabled:visible' ,
2012-10-17 13:32:25 +00:00
// suppresses the use of overlay styles on FF/Linux (due to performance issues with opacity)
// no longer needed in 2012
// applyPlatformOpacityRules: true,
// callback method invoked when fadeIn has completed and blocking message is visible
onBlock : null ,
// callback method invoked when unblocking has completed; the callback is
// passed the element that has been unblocked (which is the window object for page
// blocks) and the options that were passed to the unblock call:
// onUnblock(element, options)
onUnblock : null ,
2013-05-28 16:02:18 +00:00
// callback method invoked when the overlay area is clicked.
// setting this will turn the cursor to a pointer, otherwise cursor defined in overlayCss will be used.
onOverlayClick : null ,
2012-10-17 13:32:25 +00:00
// don't ask; if you really must know: http://groups.google.com/group/jquery-en/browse_thread/thread/36640a8730503595/2f6a79a77a78e493#2f6a79a77a78e493
quirksmodeOffsetHack : 4 ,
// class name of the message block
blockMsgClass : 'blockMsg' ,
// if it is already blocked, then ignore it (don't unblock and reblock)
ignoreIfBlocked : false
} ;
// private data and functions follow...
var pageBlock = null ;
var pageBlockEls = [ ] ;
function install ( el , opts ) {
var css , themedCSS ;
var full = ( el == window ) ;
var msg = ( opts && opts . message !== undefined ? opts . message : undefined ) ;
opts = $ . extend ( { } , $ . blockUI . defaults , opts || { } ) ;
if ( opts . ignoreIfBlocked && $ ( el ) . data ( 'blockUI.isBlocked' ) )
return ;
opts . overlayCSS = $ . extend ( { } , $ . blockUI . defaults . overlayCSS , opts . overlayCSS || { } ) ;
css = $ . extend ( { } , $ . blockUI . defaults . css , opts . css || { } ) ;
2013-05-28 16:02:18 +00:00
if ( opts . onOverlayClick )
opts . overlayCSS . cursor = 'pointer' ;
2012-10-17 13:32:25 +00:00
themedCSS = $ . extend ( { } , $ . blockUI . defaults . themedCSS , opts . themedCSS || { } ) ;
msg = msg === undefined ? opts . message : msg ;
// remove the current block (if there is one)
if ( full && pageBlock )
remove ( window , { fadeOut : 0 } ) ;
// if an existing element is being used as the blocking content then we capture
// its current place in the DOM (and current display style) so we can restore
// it when we unblock
if ( msg && typeof msg != 'string' && ( msg . parentNode || msg . jquery ) ) {
var node = msg . jquery ? msg [ 0 ] : msg ;
var data = { } ;
$ ( el ) . data ( 'blockUI.history' , data ) ;
data . el = node ;
data . parent = node . parentNode ;
data . display = node . style . display ;
data . position = node . style . position ;
if ( data . parent )
data . parent . removeChild ( node ) ;
}
$ ( el ) . data ( 'blockUI.onUnblock' , opts . onUnblock ) ;
var z = opts . baseZ ;
// blockUI uses 3 layers for blocking, for simplicity they are all used on every platform;
// layer1 is the iframe layer which is used to supress bleed through of underlying content
// layer2 is the overlay layer which has opacity and a wait cursor (by default)
// layer3 is the message content that is displayed while blocking
var lyr1 , lyr2 , lyr3 , s ;
if ( msie || opts . forceIframe )
lyr1 = $ ( '<iframe class="blockUI" style="z-index:' + ( z ++ ) + ';display:none;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0" src="' + opts . iframeSrc + '"></iframe>' ) ;
else
lyr1 = $ ( '<div class="blockUI" style="display:none"></div>' ) ;
if ( opts . theme )
lyr2 = $ ( '<div class="blockUI blockOverlay ui-widget-overlay" style="z-index:' + ( z ++ ) + ';display:none"></div>' ) ;
else
lyr2 = $ ( '<div class="blockUI blockOverlay" style="z-index:' + ( z ++ ) + ';display:none;border:none;margin:0;padding:0;width:100%;height:100%;top:0;left:0"></div>' ) ;
if ( opts . theme && full ) {
s = '<div class="blockUI ' + opts . blockMsgClass + ' blockPage ui-dialog ui-widget ui-corner-all" style="z-index:' + ( z + 10 ) + ';display:none;position:fixed">' ;
if ( opts . title ) {
s += '<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">' + ( opts . title || ' ' ) + '</div>' ;
}
s += '<div class="ui-widget-content ui-dialog-content"></div>' ;
s += '</div>' ;
}
else if ( opts . theme ) {
s = '<div class="blockUI ' + opts . blockMsgClass + ' blockElement ui-dialog ui-widget ui-corner-all" style="z-index:' + ( z + 10 ) + ';display:none;position:absolute">' ;
if ( opts . title ) {
s += '<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">' + ( opts . title || ' ' ) + '</div>' ;
2012-11-27 16:22:47 +00:00
}
2012-10-17 13:32:25 +00:00
s += '<div class="ui-widget-content ui-dialog-content"></div>' ;
s += '</div>' ;
}
else if ( full ) {
s = '<div class="blockUI ' + opts . blockMsgClass + ' blockPage" style="z-index:' + ( z + 10 ) + ';display:none;position:fixed"></div>' ;
}
else {
s = '<div class="blockUI ' + opts . blockMsgClass + ' blockElement" style="z-index:' + ( z + 10 ) + ';display:none;position:absolute"></div>' ;
}
lyr3 = $ ( s ) ;
// if we have a message, style it
if ( msg ) {
if ( opts . theme ) {
lyr3 . css ( themedCSS ) ;
lyr3 . addClass ( 'ui-widget-content' ) ;
}
else
lyr3 . css ( css ) ;
}
// style the overlay
if ( ! opts . theme /*&& (!opts.applyPlatformOpacityRules)*/ )
lyr2 . css ( opts . overlayCSS ) ;
lyr2 . css ( 'position' , full ? 'fixed' : 'absolute' ) ;
// make iframe layer transparent in IE
if ( msie || opts . forceIframe )
lyr1 . css ( 'opacity' , 0.0 ) ;
//$([lyr1[0],lyr2[0],lyr3[0]]).appendTo(full ? 'body' : el);
var layers = [ lyr1 , lyr2 , lyr3 ] , $par = full ? $ ( 'body' ) : $ ( el ) ;
$ . each ( layers , function ( ) {
this . appendTo ( $par ) ;
} ) ;
if ( opts . theme && opts . draggable && $ . fn . draggable ) {
lyr3 . draggable ( {
handle : '.ui-dialog-titlebar' ,
cancel : 'li'
} ) ;
}
// ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling)
var expr = setExpr && ( ! $ . support . boxModel || $ ( 'object,embed' , full ? null : el ) . length > 0 ) ;
if ( ie6 || expr ) {
// give body 100% height
if ( full && opts . allowBodyStretch && $ . support . boxModel )
$ ( 'html,body' ) . css ( 'height' , '100%' ) ;
// fix ie6 issue when blocked element has a border width
if ( ( ie6 || ! $ . support . boxModel ) && ! full ) {
var t = sz ( el , 'borderTopWidth' ) , l = sz ( el , 'borderLeftWidth' ) ;
var fixT = t ? '(0 - ' + t + ')' : 0 ;
var fixL = l ? '(0 - ' + l + ')' : 0 ;
}
// simulate fixed position
$ . each ( layers , function ( i , o ) {
var s = o [ 0 ] . style ;
s . position = 'absolute' ;
if ( i < 2 ) {
if ( full )
s . setExpression ( 'height' , 'Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:' + opts . quirksmodeOffsetHack + ') + "px"' ) ;
else
s . setExpression ( 'height' , 'this.parentNode.offsetHeight + "px"' ) ;
if ( full )
s . setExpression ( 'width' , 'jQuery.support.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"' ) ;
else
s . setExpression ( 'width' , 'this.parentNode.offsetWidth + "px"' ) ;
if ( fixL ) s . setExpression ( 'left' , fixL ) ;
if ( fixT ) s . setExpression ( 'top' , fixT ) ;
}
else if ( opts . centerY ) {
if ( full ) s . setExpression ( 'top' , '(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"' ) ;
s . marginTop = 0 ;
}
else if ( ! opts . centerY && full ) {
var top = ( opts . css && opts . css . top ) ? parseInt ( opts . css . top , 10 ) : 0 ;
var expression = '((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + ' + top + ') + "px"' ;
s . setExpression ( 'top' , expression ) ;
}
} ) ;
}
// show the message
if ( msg ) {
if ( opts . theme )
lyr3 . find ( '.ui-widget-content' ) . append ( msg ) ;
else
lyr3 . append ( msg ) ;
if ( msg . jquery || msg . nodeType )
$ ( msg ) . show ( ) ;
}
if ( ( msie || opts . forceIframe ) && opts . showOverlay )
lyr1 . show ( ) ; // opacity is zero
if ( opts . fadeIn ) {
var cb = opts . onBlock ? opts . onBlock : noOp ;
var cb1 = ( opts . showOverlay && ! msg ) ? cb : noOp ;
var cb2 = msg ? cb : noOp ;
if ( opts . showOverlay )
lyr2 . _fadeIn ( opts . fadeIn , cb1 ) ;
if ( msg )
lyr3 . _fadeIn ( opts . fadeIn , cb2 ) ;
}
else {
if ( opts . showOverlay )
lyr2 . show ( ) ;
if ( msg )
lyr3 . show ( ) ;
if ( opts . onBlock )
2015-01-01 12:35:31 +00:00
opts . onBlock . bind ( lyr3 ) ( ) ;
2012-10-17 13:32:25 +00:00
}
// bind key and mouse events
bind ( 1 , el , opts ) ;
if ( full ) {
pageBlock = lyr3 [ 0 ] ;
2013-05-28 16:02:18 +00:00
pageBlockEls = $ ( opts . focusableElements , pageBlock ) ;
2012-10-17 13:32:25 +00:00
if ( opts . focusInput )
setTimeout ( focus , 20 ) ;
}
else
center ( lyr3 [ 0 ] , opts . centerX , opts . centerY ) ;
if ( opts . timeout ) {
// auto-unblock
var to = setTimeout ( function ( ) {
if ( full )
$ . unblockUI ( opts ) ;
else
$ ( el ) . unblock ( opts ) ;
} , opts . timeout ) ;
$ ( el ) . data ( 'blockUI.timeout' , to ) ;
}
}
// remove the block
function remove ( el , opts ) {
2013-05-28 16:02:18 +00:00
var count ;
2012-10-17 13:32:25 +00:00
var full = ( el == window ) ;
var $ el = $ ( el ) ;
var data = $el . data ( 'blockUI.history' ) ;
var to = $el . data ( 'blockUI.timeout' ) ;
if ( to ) {
clearTimeout ( to ) ;
$el . removeData ( 'blockUI.timeout' ) ;
}
opts = $ . extend ( { } , $ . blockUI . defaults , opts || { } ) ;
bind ( 0 , el , opts ) ; // unbind events
if ( opts . onUnblock === null ) {
opts . onUnblock = $el . data ( 'blockUI.onUnblock' ) ;
$el . removeData ( 'blockUI.onUnblock' ) ;
}
var els ;
if ( full ) // crazy selector to handle odd field errors in ie6/7
2015-04-03 12:21:47 +00:00
els = $ ( document . body ) . children ( ) . filter ( '.blockUI' ) . add ( 'body > .blockUI' ) ;
2012-10-17 13:32:25 +00:00
else
els = $el . find ( '>.blockUI' ) ;
2013-05-28 16:02:18 +00:00
// fix cursor issue
if ( opts . cursorReset ) {
if ( els . length > 1 )
els [ 1 ] . style . cursor = opts . cursorReset ;
if ( els . length > 2 )
els [ 2 ] . style . cursor = opts . cursorReset ;
}
2012-10-17 13:32:25 +00:00
if ( full )
pageBlock = pageBlockEls = null ;
if ( opts . fadeOut ) {
2013-05-28 16:02:18 +00:00
count = els . length ;
2013-12-05 18:54:20 +00:00
els . stop ( ) . fadeOut ( opts . fadeOut , function ( ) {
2013-05-28 16:02:18 +00:00
if ( -- count === 0 )
reset ( els , data , opts , el ) ;
} ) ;
2012-10-17 13:32:25 +00:00
}
else
reset ( els , data , opts , el ) ;
}
// move blocking element back into the DOM where it started
function reset ( els , data , opts , el ) {
2013-05-28 16:02:18 +00:00
var $el = $ ( el ) ;
2013-12-05 18:54:20 +00:00
if ( $el . data ( 'blockUI.isBlocked' ) )
return ;
2012-10-17 13:32:25 +00:00
els . each ( function ( i , o ) {
// remove via DOM calls so we don't lose event handlers
if ( this . parentNode )
this . parentNode . removeChild ( this ) ;
} ) ;
if ( data && data . el ) {
data . el . style . display = data . display ;
data . el . style . position = data . position ;
2015-01-01 12:35:31 +00:00
data . el . style . cursor = 'default' ; // #59
2012-10-17 13:32:25 +00:00
if ( data . parent )
data . parent . appendChild ( data . el ) ;
2013-05-28 16:02:18 +00:00
$el . removeData ( 'blockUI.history' ) ;
}
if ( $el . data ( 'blockUI.static' ) ) {
$el . css ( 'position' , 'static' ) ; // #22
2012-10-17 13:32:25 +00:00
}
if ( typeof opts . onUnblock == 'function' )
opts . onUnblock ( el , opts ) ;
// fix issue in Safari 6 where block artifacts remain until reflow
var body = $ ( document . body ) , w = body . width ( ) , cssW = body [ 0 ] . style . width ;
body . width ( w - 1 ) . width ( w ) ;
body [ 0 ] . style . width = cssW ;
}
// bind/unbind the handler
function bind ( b , el , opts ) {
var full = el == window , $el = $ ( el ) ;
// don't bother unbinding if there is nothing to unbind
if ( ! b && ( full && ! pageBlock || ! full && ! $el . data ( 'blockUI.isBlocked' ) ) )
return ;
$el . data ( 'blockUI.isBlocked' , b ) ;
// don't bind events when overlay is not in use or if bindEvents is false
2013-05-28 16:02:18 +00:00
if ( ! full || ! opts . bindEvents || ( b && ! opts . showOverlay ) )
2012-10-17 13:32:25 +00:00
return ;
// bind anchors and inputs for mouse and key events
2013-05-28 16:02:18 +00:00
var events = 'mousedown mouseup keydown keypress keyup touchstart touchend touchmove' ;
2012-10-17 13:32:25 +00:00
if ( b )
2021-02-04 16:04:38 +00:00
$ ( document ) . on ( events , opts , handler ) ;
2012-10-17 13:32:25 +00:00
else
2021-02-04 16:04:38 +00:00
$ ( document ) . off ( events , handler ) ;
2012-10-17 13:32:25 +00:00
// former impl...
// var $e = $('a,:input');
// b ? $e.bind(events, opts, handler) : $e.unbind(events, handler);
}
// event handler to suppress keyboard/mouse events when blocking
function handler ( e ) {
// allow tab navigation (conditionally)
2013-12-05 18:54:20 +00:00
if ( e . type === 'keydown' && e . keyCode && e . keyCode == 9 ) {
2012-10-17 13:32:25 +00:00
if ( pageBlock && e . data . constrainTabKey ) {
var els = pageBlockEls ;
var fwd = ! e . shiftKey && e . target === els [ els . length - 1 ] ;
var back = e . shiftKey && e . target === els [ 0 ] ;
if ( fwd || back ) {
setTimeout ( function ( ) { focus ( back ) ; } , 10 ) ;
return false ;
}
}
}
var opts = e . data ;
2013-05-28 16:02:18 +00:00
var target = $ ( e . target ) ;
if ( target . hasClass ( 'blockOverlay' ) && opts . onOverlayClick )
2013-12-05 18:54:20 +00:00
opts . onOverlayClick ( e ) ;
2013-05-28 16:02:18 +00:00
2012-10-17 13:32:25 +00:00
// allow events within the message content
2013-05-28 16:02:18 +00:00
if ( target . parents ( 'div.' + opts . blockMsgClass ) . length > 0 )
2012-10-17 13:32:25 +00:00
return true ;
// allow events for content that is not being blocked
2013-05-28 16:02:18 +00:00
return target . parents ( ) . children ( ) . filter ( 'div.blockUI' ) . length === 0 ;
2012-10-17 13:32:25 +00:00
}
function focus ( back ) {
if ( ! pageBlockEls )
return ;
var e = pageBlockEls [ back === true ? pageBlockEls . length - 1 : 0 ] ;
if ( e )
2021-02-04 16:04:38 +00:00
e . trigger ( 'focus' ) ;
2012-10-17 13:32:25 +00:00
}
function center ( el , x , y ) {
var p = el . parentNode , s = el . style ;
var l = ( ( p . offsetWidth - el . offsetWidth ) / 2 ) - sz ( p , 'borderLeftWidth' ) ;
var t = ( ( p . offsetHeight - el . offsetHeight ) / 2 ) - sz ( p , 'borderTopWidth' ) ;
if ( x ) s . left = l > 0 ? ( l + 'px' ) : '0' ;
if ( y ) s . top = t > 0 ? ( t + 'px' ) : '0' ;
}
function sz ( el , p ) {
return parseInt ( $ . css ( el , p ) , 10 ) || 0 ;
}
}
/*global define:true */
if ( typeof define === 'function' && define . amd && define . amd . jQuery ) {
define ( [ 'jquery' ] , setup ) ;
} else {
setup ( jQuery ) ;
}
2021-02-04 16:04:38 +00:00
} ) ( ) ;