@@ -402,12 +402,20 @@ var Window = {
402402 next_stop ( ) ;
403403 } , this ) ) ;
404404
405- shq . queue ( $ . proxy ( function ( next_unbind_hide_ui ) {
405+ shq . queue ( $ . proxy ( function ( next_unbinds ) {
406+ // ui
406407 var duration = this . view ? this . view . options . effects . window . hide : 0 ;
407408 this . unbindUI ( ) ;
408409 this . hideUI ( null , duration ) ;
409- next_unbind_hide_ui ( ) ;
410- } , this ) ) ;
410+
411+ // close on click outside
412+ this . unbindHideOnClickOutside ( ) ;
413+
414+ // keyboard
415+ Keyboard . disable ( ) ;
416+
417+ next_unbinds ( ) ;
418+ } , this ) ) ;
411419
412420 shq . queue ( $ . proxy ( function ( next_zero ) {
413421 this . resize ( 0 , $ . proxy ( function ( ) {
@@ -419,6 +427,8 @@ var Window = {
419427
420428 Pages . removeAll ( ) ;
421429
430+ this . timers . clear ( ) ;
431+
422432 this . _position = - 1 ;
423433
424434 // afterHide callback
@@ -451,8 +461,8 @@ var Window = {
451461
452462 //Pages.removeExpired();
453463 this . visible = false ;
454- this . timers . clear ( ) ;
455464 this . hideUI ( null , 0 ) ;
465+ this . timers . clear ( 'ui' ) ;
456466 this . resetPrevNext ( ) ;
457467 this . _cachedMouseMoveEvent = null ;
458468 } ,
@@ -500,6 +510,32 @@ var Window = {
500510 } ;
501511 } ,
502512
513+
514+ // close when clicking outside of strip or an element opening strip
515+ bindHideOnClickOutside : function ( ) {
516+ this . unbindHideOnClickOutside ( ) ;
517+ $ ( document . documentElement ) . bind ( 'click' , this . _delegateHideOutsideHandler = $ . proxy ( this . _delegateHideOutside , this ) ) ;
518+ } ,
519+
520+ unbindHideOnClickOutside : function ( ) {
521+ if ( this . _delegateHideOutsideHandler ) {
522+ $ ( document . documentElement ) . unbind ( 'click' , this . _delegateHideOutsideHandler ) ;
523+ this . _delegateHideOutsideHandler = null ;
524+ }
525+ } ,
526+
527+ _delegateHideOutside : function ( event ) {
528+ var page = Pages . page ;
529+ if ( ! this . visible || ! ( page && page . view . options . hideOnClickOutside ) ) return ;
530+
531+ var element = event . target ;
532+
533+ if ( ! $ ( element ) . closest ( '.strip, .strp-window' ) [ 0 ] ) {
534+ this . hide ( ) ;
535+ }
536+ } ,
537+
538+
503539 // UI
504540 bindUI : function ( ) {
505541 this . unbindUI ( ) ;
@@ -518,8 +554,6 @@ var Window = {
518554 . delegate ( '.strp-container' , 'mouseout' , this . _onMouseOutHandler = $ . proxy ( this . _onMouseOut , this ) )
519555 . delegate ( '.strp-container' , 'mouseenter' , this . _onMouseEnterHandler = $ . proxy ( this . _onMouseEnter , this ) ) ;
520556
521-
522-
523557 $ ( window ) . bind ( 'scroll' , this . _onScrollHandler = $ . proxy ( this . _onScroll , this ) ) ;
524558 }
525559
@@ -589,9 +623,9 @@ var Window = {
589623 } ,
590624
591625 _getEventSide : function ( event ) {
592- var offsetLeft = this . _offsetLeft || this . element . offset ( ) . left ;
593- var left = event . pageX - offsetLeft ;
594- var width = this . _outerWidth || this . element . outerWidth ( ) ;
626+ var offsetLeft = this . _offsetLeft || this . element . offset ( ) . left ,
627+ left = event . pageX - offsetLeft ,
628+ width = this . _outerWidth || this . element . outerWidth ( ) ;
595629
596630 return left < .5 * width ? 'Previous' : 'Next' ;
597631 } ,
@@ -613,7 +647,7 @@ var Window = {
613647 if ( $ . type ( callback ) == 'function' ) callback ( ) ;
614648 } , this ) ) ;
615649 } ,
616-
650+
617651 hideUI : function ( callback , alternateDuration ) {
618652 var elements = this . element . find ( '.strp-nav-button' ) ;
619653
0 commit comments