/** * JTSage-DateBox * @fileOverview Responsible for creation / open / close / destroy of widget * @author J.T.Sage <jtsage+datebox@gmail.com> * @author {@link https://github.com/jtsage/jtsage-datebox/contributors|GitHub Contributors} * @license {@link https://github.com/jtsage/jtsage-datebox/blob/master/LICENSE.txt|MIT} * @version 5.2.0 */ /** * Open the DateBox widget * */ JTSageDateBox.open = function () { // PUBLIC function to open the control var w = this, o = this.options, dMode = o.displayMode, basepop = {}; if ( o.useFocus && w.fastReopen === true ) { w.d.input.blur(); return false; } w.theDate = w._makeDate( w.d.input.val() ); w.originalDate = w.theDate.copy(); if ( w.d.input.val() === "" ) { w._startOffset( w.theDate ); } w.d.input.blur(); if ( typeof w._build[ o.mode ] !== "function" ) { w._build[ "default" ].call( w ); } else { w._build[ o.mode ].call( w ); } if ( typeof w._drag[ o.mode ] === "function" ) { w._drag[ o.mode ].call( w ); } w._t( { method : "refresh" } ); if ( w.__( "useArabicIndic" ) === true ) { w._doIndic(); } // Ignore if already open if ( w.d.intHTML.is( ":visible" ) ) { return false; } w.d.mainWrap.empty(); if ( o.useHeader ) { w.d.mainWrap .append( $( w.style_mainHead( w.d.headerText, o.theme_headerTheme, o.theme_headerBtn ) ) ) .find( ".dbCloser" ).on( o.clickEvent, function( e ) { e.preventDefault(); w._t( { method : "close", closeCancel : true } ); } ); } w.d.mainWrap.append( w.d.intHTML ).css( "zIndex", o.zindex ); w._t( { method : "postrefresh" } ); // Perpare open callback, if provided. Additionally, if this // returns false then the open/update will stop. o.openCallback = w._prepFunc( o.openCallback ); if ( o.openCallback !== false ) { basepop.afteropen = function() { w._t( { method : "postrefresh" } ); if ( o.openCallback.apply( w, [{ initDate : w.initDate, date : w.theDate, duration : w.lastDuration }].concat( o.openCallbackArgs ) ) === false ) { w._t( {method : "close"} ); } }; } else { basepop.afteropen = function() { w._t( { method : "postrefresh" } ); }; } // Perpare BEFORE open callback, if provided. Additionally, if this // returns false then the open/update will stop. o.beforeOpenCallback = w._prepFunc( o.beforeOpenCallback ); if ( o.beforeOpenCallback !== false ) { if ( o.beforeOpenCallback.apply( w, [{ initDate : w.initDate, date : w.theDate, duration : w.lastDuration }].concat( o.beforeOpenCallbackArgs ) ) === false ) { return false; } } switch ( o.displayMode ) { case "inline" : case "blind" : if ( w.initDone ) { if ( o.displayMode === "blind" ) { w.refresh(); w.d.mainWrap.slideDown(); } } else { w.d.mainWrap .insertAfter( w.style_attach( true ) ) .addClass( o.theme_inlineContainer ) .css( { zIndex : "auto", marginRight : ( o.displayInlinePosition === "right" ) ? 0 : "auto", marginLeft : ( o.displayInlinePosition === "left" ) ? 0 : "auto", } ); if ( o.displayMode === "blind" ) { w.d.mainWrap.hide(); } w.initDone = true; } w._t( { method : "postrefresh" } ); break; // case "modal" : // case "dropdown" : default : w.d.mainWrap .show() .css( "zIndex", ( o.zindex ) ) .appendTo( w.style_attach( false ) ) .addClass( o.theme_modalContainer ) .one( o.tranDone, function() { if ( w.d.mainWrap.is( ":visible" ) ) { basepop.afteropen.call(); } else { basepop.afterclose.call(); w.d.mainWrap.removeClass( "db-show" ); } }); w.d.backdrop = $("<div class='jtsage-datebox-backdrop-div'></div>") .css( o.theme_backgroundMask ) .css( "zIndex", ( o.zindex - 1 ) ) .appendTo( ( o.displayMode === "modal" ) ? w.style_attach( false ) : "body" ) .on( o.clickEvent, function (e) { e.preventDefault(); if ( o.dismissOutsideClick ) { w._t( { method : "close", closeCancel : true } ); } }); w.d.mainWrap.css( ( o.displayMode === "modal" ) ? w.getModalPosition.call( w ) : w.getDropPosition.call( this, o.displayDropdownPosition ) ); break; } if ( dMode === "modal" || dMode === "dropdown" ) { $( document ).on( "resize" + w.eventNamespace, ( function() { this.d.mainWarp.css( ( dMode === "modal" ) ? this.getModalPosition.call( this ) : this.getDropPosition.call( this, this.options.displayDropdownPosition ) ); } ).bind(w) ); if ( o.dismissOnEscape ) { $( document ).on( "keydown" + w.eventNamespace, ( function( e ) { var isEscape = false; if ("key" in e) { isEscape = (e.key === "Escape" || e.key === "Esc"); } else { isEscape = (e.keyCode === 27); } if (isEscape) { this._t( { method : "close", closeCancel : true } ); } } ).bind(w) ); } } window.setTimeout(function () { w.d.mainWrap.addClass( "db-show" ); }, 0); window.setTimeout(function () { // This is hacky as hell. w.d.mainWrap.trigger( "oTransitionEnd" ); }, 200); };