/**
* JTSage-DateBox
* @fileOverview Public function methods
* @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
*/
/**
* Get the current date
*
* @return {object} Current Date, JavaScript date object
*/
JTSageDateBox.getTheDate = function() {
return this.theDate;
};
/**
* Get the currently selected date
*
* @return {object} Current Date, JavaScript date object
*/
JTSageDateBox.getSelectedDate = function() {
return this.originalDate;
};
/**
* Get the current duration
*
* @return {number} Current duration
*/
JTSageDateBox.getLastDur = function() {
return this.lastDuration;
};
/**
* Ask if the currently selected date is visible in the display
*
* @return {boolean} True on date is visible
*/
JTSageDateBox.dateVisible = function() {
// Undefined trap is for builds that don't include calbox. This function is
// calbox mode specific.
if ( typeof this.isSelectedInCalGrid === "undefined" ) { return true; }
return this.isSelectedInCalGrid();
};
/**
* Set the date.
*
* When passing strings, date must be formatted exactly how DateBox would do it.
*
* @param {string|object} newDate JavaScript date or string in proper format
*/
JTSageDateBox.setTheDate = function( newDate ) {
if ( typeof( newDate ) === "object" ) {
this.theDate = newDate;
} else {
this.theDate = this._makeDate( newDate );
}
this.refresh();
this._t( { method : "doset" });
};
/**
* Parse an arbitrary date with an arbitrary format
*
* @param {string} format Format to parse
* @param {string} strdate String to parse
* @return {object} JavaScript date
*/
JTSageDateBox.parseDate = function( format, strdate ) {
// Provide a PUBLIC function to parse a date
var retty,
w = this;
w.fmtOver = format;
retty = w._makeDate( strdate );
w.fmtOver = false;
return retty;
};
/**
* Parse a string ISO date
*
* @param {string} strdate ISO string to parse (YYYY-MM-DD)
* @return {object} JavaScript date
*/
JTSageDateBox.parseISO = function( strDate ) {
return this.parseDate( "%Y-%m-%d", strDate );
};
/**
* Format a date via {@link JTSageDateBox._makeDate}
*
* @param {string} format Format string to use
* @param {object} date Date to format
* @param {boolean} allowArIn Allow indic number translation, default true
* @return {string} Formatted date
*/
JTSageDateBox.callFormat = function( format, date, allowArIn ) {
if ( typeof(allowArIn) === "undefined" ) { allowArIn = false; }
return this._formatter( format, date, allowArIn );
};
/**
* Refresh the display
*/
JTSageDateBox.refresh = function() {
var w = this,
o = this.options;
if ( typeof w._build[ o.mode ] !== "function" ) {
w._build[ "default" ].call( w );
} else {
w._build[ o.mode ].call( w );
}
if ( w.__( "useArabicIndic" ) === true ) {
w._doIndic();
}
w.d.mainWrap.append( w.d.intHTML );
w._t( { method : "postrefresh" } );
};
/**
* Apply the HTML min/max attributes (minDate / maxDate)
*
* @param {boolean} refresh Refresh the display when done
* @param {boolean} override Allow overriding minDate/maxDate if already set
*/
JTSageDateBox.applyMinMax = function( refresh, override ) {
var valueFromAttr,
w = this,
o = this.options,
ISOPattern = RegExp(/\d\d\d\d-\d\d-\d\d/);
if ( typeof refresh === "undefined" ) { refresh = true; }
if ( typeof override === "undefined" ) { override = true; }
if ( override === true || o.minDate === false ) {
valueFromAttr = w.d.input.attr( "min" );
if ( ISOPattern.test( valueFromAttr ) ) {
o.minDate = valueFromAttr;
}
}
if ( override === true || o.maxDate === false ) {
valueFromAttr = w.d.input.attr( "max" );
if ( ISOPattern.test( valueFromAttr ) ) {
o.maxDate = valueFromAttr;
}
}
if ( refresh === true ) {
w._t( { method : "refresh" } );
}
};