/**
* JTSage-DateBox
* @fileOverview Standard controls (selects and buttons)
* @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
*/
/**
* Create a simple select html element
*
* @param {!Array<Array>} data Each inside array is [ value, title, selected(bool) ]
* @param {string} id HTML ID for the select
* @param {string} cls Class for the select
* @returns {String} Completed select element
*/
JTSageDateBox._stdSel = function( data, id, cls ) {
var i, returnVal = "<select class='" + cls + "' id='" + id + "'>";
for ( i = 0; i < data.length; i++ ) {
returnVal += "<option value='" + data[i][0] + "'" +
( data[i][2] === true ? " selected='selected'" : "" ) + ">" +
data[i][1] + "</option>";
}
returnVal += "</select>";
return returnVal;
};
/**
* Create standard buttons
*
* @type Object
* @memberof JTSageDateBox
* @namespace JTSageDateBox._stdbtn
*/
JTSageDateBox._stdBtn = {
/**
* Make a cancel button.
*
* @returns {Object} JQuery button object, with events attached
* @memberof JTSageDateBox._stdbtn
*/
cancel : function() {
var w = this,
o = this.options;
return $(
w.style_btn(
o.theme_cancelBtn,
w.__( "cancelButton" )
) )
.on( o.clickEvent, function ( e ) {
e.preventDefault();
w._t({ method : "close", closeCancel : true });
} );
},
/**
* Make a clear button
*
* @return {Object} JQuery button object, with events attached
* @memberOf JTSageDateBox._stdbtn
*/
clear : function() {
var w = this,
o = this.options;
return $(
w.style_btn(
o.theme_clearBtn,
w.__( "clearButton" )
) )
.on( o.clickEvent, function( e ) {
e.preventDefault();
w.d.input.val( "" );
w._t( { method : "clear" } );
w._t( { method : "close", closeCancel : true } );
});
},
/**
* Make a close button
*
* @param {string} txt Button text, if any
* @param {boolean|string} trigger If trigger is false, run set, otherwise run named trigger
* @return {Object} JQuery button object, with events attached
* @memberOf JTSageDateBox._stdbtn
*/
close : function( txt, trigger ) {
var w = this,
o = this.options;
if ( typeof trigger === "undefined" ) { trigger = false; }
return $(
w.style_btn(
o.theme_closeBtn,
txt
) )
.addClass( "" +
( ( w.dateOK === true ) ? "" : "disabled" )
)
.on( o.clickEvent, function( e ) {
e.preventDefault();
if ( w.dateOK === true ) {
if ( trigger === false ) {
w._t( {
method : "set",
value : w._formatter( w.__fmt(), w.theDate ),
date : w.theDate
} );
} else {
w._t( trigger );
}
w._t( { method : "close" } );
}
});
},
/**
* Make a today button
*
* @return {Object} JQuery button object, with events attached
* @memberOf JTSageDateBox._stdbtn
*/
today : function() {
var w = this,
o = this.options;
return $(
w.style_btn(
o.theme_todayBtn,
w.__( "todayButtonLabel" )
) )
.on( o.clickEvent, function( e ) {
e.preventDefault();
w.theDate = w._pa( [ 0, 0, 0 ], new w._date() );
w._t( { method : "dorefresh" } );
if ( o.closeTodayButton !== false ) {
w._t( { method : "doset" } );
w._t( { method : "close" } );
}
});
},
/**
* Make a tomorrow button
*
* @return {Object} JQuery button object, with events attached
* @memberOf JTSageDateBox._stdbtn
*/
tomorrow : function() {
var w = this,
o = this.options;
return $(
w.style_btn(
o.theme_tomorrowBtn,
w.__( "tomorrowButtonLabel" )
) )
.on( o.clickEvent, function( e ) {
e.preventDefault();
w.theDate = w._pa( [ 0, 0, 0 ], new w._date() ).adj( 2, 1 );
w._t( { method : "dorefresh" } );
if ( o.closeTomorrowButton !== false ) {
w._t( { method : "doset" } );
w._t( { method : "close" } );
}
});
},
};
/**
* Actually apply the bottom buttons to the control
*
* @param {boolean} useSet Allow the set button to be displayed
* @return {object} jQuery Object.
*/
JTSageDateBox._doBottomButtons = function ( useSet ) {
var w = this,
o = this.options,
ctrlContainer, ctrlWrk;
if ( ! (
( o.useSetButton && useSet ) ||
o.useTodayButton ||
o.useTomorrowButton ||
o.useClearButton ||
o.useCancelButton
) ) {
return "";
}
ctrlContainer = w.style_btnGrp( o.useCollapsedBut );
if ( o.useSetButton && useSet ) {
switch (o.mode) {
case "timebox" :
case "timeflipbox" :
ctrlWrk = w.__( "setTimeButtonLabel" ); break;
case "durationbox" :
case "duartionflipbox" :
ctrlWrk = w.__( "setDurationButtonLabel" ); break;
default :
ctrlWrk = w.__( "setDateButtonLabel" ); break;
}
w.setBut = w._stdBtn.close.call( w, ctrlWrk );
w.setBut.appendTo( ctrlContainer );
}
if ( o.useTodayButton ) {
ctrlContainer.append( w._stdBtn.today.call( w ) );
}
if ( o.useTomorrowButton ) {
ctrlContainer.append( w._stdBtn.tomorrow.call( w ) );
}
if ( o.useClearButton ) {
ctrlContainer.append( w._stdBtn.clear.call( w ) );
}
if ( o.useCancelButton ) {
ctrlContainer.append( w._stdBtn.cancel.call( w ) );
}
if ( typeof w.style_btnGrpOut === "function" ) {
// Used if the framework requires an additional wrap to button
// groups. Some do, notable jQM.
ctrlContainer = w.style_btnGrpOut( o.useCollapsedBut, ctrlContainer );
}
return ctrlContainer;
};