/* *+------------------------------------------------------------------------+ *| Licensed Materials - Property of IBM *| BI and PM: prmt *| (C) Copyright IBM Corp. 2002, 2020 *| *| US Government Users Restricted Rights - Use, duplication or *| disclosure restricted by GSA ADP Schedule Contract with IBM Corp. *| *+------------------------------------------------------------------------+ */ /** @class @private */ cognos.Prompt.Control.Date = cognos.Prompt.Control.f_extend({ f_initialize: function( v_oProps ) { this[K_PRMT_LABEL_RANGE_LOWEST] = PMT_RNG_EARLIEST_DATE; this[K_PRMT_LABEL_RANGE_HIGHEST] = PMT_RNG_LATEST_DATE; this._type_ = "cognos.Prompt.Control.Date"; this.f_parent( v_oProps ); // call parent's initialize() if ( this["@selectDateUI"] ) { this["@selectUI"] = this["@selectDateUI"]; } if ( !this["@startOfWeek"] ) { this["@startOfWeek"] = "1"; } this["@startOfWeek"] = parseInt(this["@startOfWeek"], 10); this.m_bDisabled = false; this.f_initCompleted(); }, checkData: function() { // We keep a reference to the parent function // Calling this.m_oFrom functions seems to have a side effect on this.f_parent(). var v_fnParent = this.f_parent; this.m_bValid = this.m_oControl.m_bValid; this.f_parent = v_fnParent; // call parent's checkData using saved reference. this.f_parent(); // call parent's checkData using saved reference. return this.m_bValid; }, clearValues: function() { this.f_parent(); this.f_setDate( (""+new Date()) ); }, f_drawCompleted: function() { // We keep a reference to the parent function // Calling this.m_oFrom.f_drawCompleted seems to have a side effect on this.f_parent(). var v_fnParent = this.f_parent; var v_chk = $(this.f_getId( "chkAnyValue" )); if ( v_chk ) { PRMTUtils.f_addEvent( v_chk, "click", this.f_toggleDisable.bind(this) ); } var v_iStartOfWeek = 0; switch( this["@startOfWeek"] ) { case "Monday": iStartDay = 1; break; case "Tuesday": iStartDay = 2; break; case "Wednesday": iStartDay = 3; break; case "Thursday": iStartDay = 4; break; case "Friday": iStartDay = 5; break; case "Saturday": iStartDay = 6; break; } var v_oControl = new CDatePicker( null, //oSubmit, $( this.f_getId( "_Date" ) ), //oForm, $( this.f_getId( this["@selectUI"] == "editBox" ? "txtDate" : "_Date" ) ), //oEditBox, $( this.f_getId("dialogDatePicker") ), //oDialog, this.f_getId(), //sRef, this["@defaultDate"], //sDefaultDate, (this["@selectUI"] == "editBox" ? 0 : 1), //iInline, (this["@calendar"] == "Imperial" ? 1 : 0), //iType, this["@inputOrder"], //sInputOrder, v_iStartOfWeek, (this["@DateTime"] ? 0 : 1), //iDateTimeType, this["@firstDate"], //sFirstDate, this["@lastDate"], //sLastDate, this.isRequired(), //bRequired, null, //sSubmitType, null, //oImgCheck, this["CVId"] ); var v_aDO = this.f_getCV().datePickerObserverArray; if (v_aDO) { v_aDO.push( v_oControl ); } var v_oDatePicker = v_oControl.m_oDatePickerDialog; var v_el = $( this.f_getId("txtDate") ); if ( v_el ) { PRMTUtils.f_addEvent( v_el, "keyup", v_oControl.checkDate.bind(v_oControl, v_el) ); PRMTUtils.f_addEvent( v_el, "keypress", v_oControl.keyPress.bind(v_oControl, v_el) ); PRMTUtils.f_addEvent( v_el, "focus", v_oControl.gotFocus.bind(v_oControl) ); PRMTUtils.f_addEvent( v_el, "blur", v_oControl.lostFocus.bind(v_oControl) ); // link a11y label if it exists using FOR var v_a11yLabel = $( this.f_getId("PRMT_LBL_") ); if ( v_a11yLabel && !v_a11yLabel.getAttribute("for")) { v_a11yLabel.setAttribute("for", v_el.id); } } v_el = $( this.f_getId("myYear") ); if ( v_el ) { PRMTUtils.f_addEvent( v_el, "keyup", v_oDatePicker.checkYear.bind(v_oDatePicker, v_el) ); PRMTUtils.f_addEvent( v_el, "keypress", this.f_setDateFromEditBox.bind(v_oDatePicker) ); PRMTUtils.f_addEvent( v_el, "blur", v_oDatePicker.lostFocus.bind(v_oDatePicker) ); } PRMTUtils.f_addEvent( $( this.f_getId("btnYearDown") ), "click", v_oDatePicker.yearDown.bind(v_oDatePicker) ); PRMTUtils.f_addEvent( $( this.f_getId("btnYearUp") ), "click", v_oDatePicker.yearUp.bind(v_oDatePicker) ); PRMTUtils.f_addEvent( $( this.f_getId("btnYearDown") ), "keypress", v_oDatePicker.yearDown.bind(v_oDatePicker) ); PRMTUtils.f_addEvent( $( this.f_getId("btnYearUp") ), "keypress", v_oDatePicker.yearUp.bind(v_oDatePicker) ); if (window.ie) { PRMTUtils.f_addEvent( $( this.f_getId("btnYearDown") ), "dblclick", v_oDatePicker.yearDown.bind(v_oDatePicker) ); PRMTUtils.f_addEvent( $( this.f_getId("btnYearUp") ), "dblclick", v_oDatePicker.yearUp.bind(v_oDatePicker) ); } for ( var v_idxMonth = 0; v_idxMonth < 12; v_idxMonth++ ) { PRMTUtils.f_addEvent( $( this.f_getId() + "m" + v_idxMonth ), "mousedown", v_oDatePicker.newMonth.bind(v_oDatePicker, v_idxMonth) ); PRMTUtils.f_addEvent( $( this.f_getId() + "m" + v_idxMonth ), "keypress", v_oDatePicker.newMonth.bind(v_oDatePicker, v_idxMonth) ); } for ( var v_idxRow = 0; v_idxRow < 6; v_idxRow++ ) { for (v_idxCol = 0; v_idxCol < 7; v_idxCol++) { v_el = $( this.f_getId() + "r" + v_idxRow + "c" + v_idxCol ); if ( v_el ) { PRMTUtils.f_addEvent( v_el, "mousedown", v_oDatePicker.newDay.bind(v_oDatePicker, v_el) ); } } } v_el = $( this.f_getId("imgPicker") ); if ( v_el ) { PRMTUtils.f_addEvent( v_el, "click", v_oControl.toggleDialogDatePicker.bind(v_oControl, v_el) ); PRMTUtils.f_addEvent( v_el, "keypress", v_oControl.toggleDialogDatePicker.bind(v_oControl, v_el) ); } v_oControl.m_oParent = this; this.m_oControl = v_oControl; this.f_parent = v_fnParent; // call parent's f_drawCompleted using saved reference. this.f_parent(); // call parent's f_drawCompleted using saved reference. this.checkData(); if ( this[K_PRMT_sATTR_DISABLED] ) { this.f_setEnabled( false ); } } }); /** * Getter for range inputId * rangeInputId used by range label to associate the label (From/To) to the input when there are not radio buttons * */ cognos.Prompt.Control.Date.prototype.f_getRangeInputId = function() { return (this["@selectUI"] == "editBox" ? this.f_getId("txtDate") : null); //this.f_getId("dialogDatePickerTable")); } /** Compare values. See {@link cognos.Prompt.Control#f_compare} for details. @see cognos.Prompt.Control#f_compare @private @return {Integer} */ cognos.Prompt.Control.Date.prototype.f_compare = function( v_oValue ) { var v_iRetval = 1; if ( v_oValue ) { // Strips out time part. var v_dThis = this.m_oControl.m_oForm.value.split("T"); v_dThis = dParseDate( v_dThis[0], "YMD" ); var v_dCompareTo = v_oValue.m_oControl.m_oForm.value.split("T"); v_dCompareTo = dParseDate( v_dCompareTo[0], "YMD" ); var v_iThis = v_dThis.getTime(); var v_iCompareTo = v_dCompareTo.getTime(); if ( v_iCompareTo > v_iThis ) { v_iRetval = -1; } else if ( v_iCompareTo == v_iThis ) { v_iRetval = 0; } } return v_iRetval; }; /** Sets the JavaScript references used by custom scripts based on generated code from Blaring and before. (Custom Scripts Workaround) @private @return {void} */ cognos.Prompt.Control.Date.prototype.f_CSW_init = function() { this.f_CSW_createJSObject( "pickerControl", this.m_oControl ); this.f_CSW_SetFormElement("txtDate", $(this.f_getId("txtDate"))); }; /** Renders the TD cell for days in the calendar. @private @param {C_PromptElement} v_el Container (TR element). @param {Integer} v_idxRow Row index. @param {Integer} v_idxCol Column index. @return {void} */ cognos.Prompt.Control.Date.prototype.f_drawDay = function( v_el, v_idxRow, v_idxCol ) { // TODO: selectDateDaysStyle var v_td = $CE( "td", { "id": this.f_getId() + "r" + v_idxRow + "c" + v_idxCol, "nowrap": "nowrap", "class": "clsSelectDateDays pd" }, v_el ); v_td.f_appendText(K_PRMT_sEMPTY); }; /** Render the UI for days in the calendar. @private @param {C_PromptElement} v_el Container. @return {void} */ cognos.Prompt.Control.Date.prototype.f_drawDays = function( v_el ) { var v_tbl = $CE( "table", { "border": K_PRMT_DEBUG_TABLEBORDER, "cellSpacing": 0, "width": "100%", "align": "center", "role":K_PRMT_ARIA_ROLE_PRESENTATION}, v_el ); var v_tbd = $CE( "tbody", {}, v_tbl ); var v_idxCol = 0; var v_tr = $CE( "tr", {}, v_tbd ); for (v_idxCol = 0; v_idxCol < 7; v_idxCol++) { this.f_drawWeekDay( v_tr, v_idxCol ); } for ( var v_idxRow = 0; v_idxRow < 6; v_idxRow++ ) { var v_tr = $CE( "tr", {}, v_tbd ); for (v_idxCol = 0; v_idxCol < 7; v_idxCol++) { this.f_drawDay( v_tr, v_idxRow, v_idxCol ); } } }; /** Render the edit box when calendar is set as an EditBox. @private @param {C_PromptElement} v_el Container. @return {void} */ cognos.Prompt.Control.Date.prototype.f_drawEditBox = function( v_el ) { var v_tbl = $CE( "table", { "border": K_PRMT_DEBUG_TABLEBORDER, "cellPadding": 0, "cellSpacing": 0, "role":K_PRMT_ARIA_ROLE_PRESENTATION}, v_el ); var v_tbd = $CE( "tbody", {}, v_tbl ); var v_tr = $CE( "tr", {}, v_tbd ); var v_td = $CE( "td", {}, v_tr ); // TODO: selectDateEditBoxStyle var v_ipt = $CE( "input", { "type": "text", "class": "clsSelectDateEditBox pt", "aria-required": (this.isRequired() ? "true" : "false"), "id": this.f_getId("txtDate"), "value": K_PRMT_sEMPTY }, v_td ); v_td = $CE( "td", {}, v_tr ); var v_img = $CE( "img", { "id": this.f_getId("imgPicker"), "src": this.m_sSkin + "/prompting/images/icon_datepicker.gif", "height": 20, "width": 25, "class": "clsToolbarButton", "onmouseover": "buttonOver(this)", "onmouseout": "buttonOut(this)", "onmousedown": "buttonOver(this)", "vAlign": "top", "style": "padding:0px;height:20px;", "alt":"", "title":"", "tabindex": "0", "role":K_PRMT_ARIA_ROLE_PRESENTATION}, v_td ); }; /** Render the Date control. @private @param {C_PromptElement} v_el Container. @return {void} */ cognos.Prompt.Control.Date.prototype.f_drawInput = function( v_el ) { $CE("input", {"type": "hidden", "id": this.f_getId("_Date"), "value": this["@defaultDate"]}, v_el ); var v_tbl = null; var v_tbd = null; var v_tr = null; var v_td = null; if ( this["@selectDateUI"] != "editBox" && !this.isRequired() && !this["@suppressDisabled"] && !(this.m_bIsAComponent || this["@multiSelect"]) ) { v_tbl = $CE( "table", {"border": K_PRMT_DEBUG_TABLEBORDER, "cellPadding": 0, "cellSpacing": 0,"role":K_PRMT_ARIA_ROLE_PRESENTATION}, v_el ); v_tbd = $CE( "tbody", {}, v_tbl ); v_tr = $CE( "tr", {}, v_tbd ); v_td = $CE( "td", {"vAlign": "top"}, v_tr ); var v_bDisabled = (this.isEmptyReprompt() || (this[K_PRMT_sATTR_DISABLED] === true)); var v_oChbox_attr = { "type": "checkbox", "value": "anyValue", "id": this.f_getId( "chkAnyValue" ), "name": this.f_getId( "chkAnyValue" )}; if (!v_bDisabled) { v_oChbox_attr.checked = true; } $CE( "input", v_oChbox_attr, v_td ); this.m_bDisabled = v_bDisabled; v_el = $CE( "td", {"vAlign": "top"}, v_tr ); } var v_sCalendarClass = "clsSelectDateCalendar"; if( this["@selectUI"] == "editBox" ) { v_sCalendarClass = "clsSelectDateCalendarDialog"; this.f_drawEditBox( v_el ); } var v_oDivPickerInitData = { "id": this.f_getId( "dialogDatePicker" ), "style": ( this["@selectUI"] == "editBox" ? "display:none" : K_PRMT_sEMPTY ) }; var v_oCV = this.f_getCV(); if (v_oCV && v_oCV.getId) { v_oDivPickerInitData["namespaceId"] = v_oCV.getId(); } var v_divPicker = $CE( "div", v_oDivPickerInitData, v_el ); v_tbl = $CE( "table", { "id": this.f_getId( "dialogDatePickerTable" ), "border": K_PRMT_DEBUG_TABLEBORDER, "cellPadding": 0, "cellSpacing": 0, "class": v_sCalendarClass }, v_divPicker ); v_tbd = $CE( "tbody", {}, v_tbl ); v_tr = $CE( "tr", {}, v_tbd ); v_td = $CE( "td", {"vAlign": "top"}, v_tr ); this.f_drawYear( v_td ); this.f_drawMonths( v_td ); this.f_drawDays( v_td ); // ensure that calendar appears on top of select controls var v_ifrmInitData = { "id": this.f_getId( "pickerControl" ) + "iframe", "style": "position:absolute;display:none;height:0px;width:0px;", "src": this.m_sSkin + "/prompting/images/spacer.gif", "title":"blank" }; if (v_oCV && v_oCV.getId) { v_ifrmInitData["namespaceId"] = v_oCV.getId(); } var v_ifrm = $CE( "iframe", v_ifrmInitData, v_el); v_ifrm.f_appendText(K_PRMT_sEMPTY); }; /** Check if is a reprompt(this.c exists) and in case of a reprompt if the reprompt has data(a date) When a date control is optional, has a Calendar UI the user can decide not to submit the date, in that case the reprompt won't contain data. @private @return {boolean} */ cognos.Prompt.Control.Date.prototype.isEmptyReprompt = function() { var result = false; if ((typeof this.c) != K_PRMT_sUNDEFINED) { // it's a reprompt var v_c = this.c; // [{n:'selectChoices',c:[{n:'selectOption',"@useValue":"2010-01-14","@displayValue":"Jan 14, 2010"}]}] => not empty(value.n =='selectOption' || [{n:'selectChoices'}] => empty(value.n == 'selectChoices') if ( v_c.length && v_c[0].n && v_c[0].n == "selectChoices") { var v_c_value = cognos.Value.getValue( this.c ); if (v_c_value.n && v_c_value.n == "selectChoices") result = true; } } return result; }; /** Render a Month cell. @private @param {C_PromptElement} v_el Container (an TR cell). @param {Integer} v_idx Index for the current month cell. @return {void} */ cognos.Prompt.Control.Date.prototype.f_drawMonth = function( v_el, v_idx ) { // TODO: selectDateMonthsStyle var v_td = $CE( "td", { "id": this.f_getId() + "m" + v_idx, "nowrap": "nowrap", "class": "clsSelectDateMonths pm" }, v_el ); v_td.f_appendText( sGetMonth(v_idx) ); }; /** Render Months cells. @private @param {C_PromptElement} v_el Container. @return {void} */ cognos.Prompt.Control.Date.prototype.f_drawMonths = function( v_el ) { var v_tbl = $CE( "table", { "border": K_PRMT_DEBUG_TABLEBORDER, "cellPadding": 2, "cellSpacing": 0, "width": "100%", "align": "center", "role":K_PRMT_ARIA_ROLE_PRESENTATION}, v_el ); var v_tbd = $CE( "tbody", {}, v_tbl ); var v_idx; for ( var v_iRows = 0; v_iRows < 2; v_iRows++ ) { var v_tr = $CE( "tr", {}, v_tbd ); for (v_idx = 0; v_idx < 6; v_idx++) { this.f_drawMonth( v_tr, (v_iRows*6)+v_idx ); } } }; /** @private */ cognos.Prompt.Control.Date.prototype.f_drawWeekDay = function( v_el, v_idx ) { // TODO: selectDateDaysOfWeekStyle var v_td = $CE( "td", { "id": this.f_getId() + "d" + v_idx, "nowrap": "nowrap", "class": "clsSelectDateDaysOfWeek pw" }, v_el ); v_td.f_appendText( sGetDay( (v_idx + this["@startOfWeek"] - 1) % 7 ) ); }; /** @private */ cognos.Prompt.Control.Date.prototype.f_drawYear = function ( v_el ) { // Top var v_tbl = $CE( "table", { "border": K_PRMT_DEBUG_TABLEBORDER, "cellPadding": 0, "cellSpacing": 0, "class": "clsSelectDateDialogTopTable", "align": "center", "width": "100%", "role":K_PRMT_ARIA_ROLE_PRESENTATION}, v_el ); var v_tbd = $CE( "tbody", {}, v_tbl ); // TODO: selectDateYearsStyle var v_tr = $CE( "tr", {"class": "clsSelectDateYears"}, v_tbd ); var v_td = $CE( "td", {}, v_tr ); var v_sCustomDir = cssParser( this["@style"], "direction", true ); var v_FinalDir = ((v_sCustomDir == "ltr" || v_sCustomDir == "rtl") ? v_sCustomDir : PRMT_BidiUtils.lookupDirection($( this.f_getId(this.m_sDivPrefix) ))); if (!v_FinalDir) { v_FinalDir = "ltr"; } var v_img = $CE( "img", { "id": this.f_getId( "btnYearDown" ), "class" : (v_FinalDir == "ltr" ? "clsBtnYearDown" : "clsBtnYearUp"), "src": this.m_sSkin + "/prompting/images/icon_year_down.gif", "vAlign": "top", "tabindex": "0", "width": "15", "class": "clsToolbarButton", "onmouseover": "buttonOver(this)", "onmouseout": "buttonOut(this)", "onmousedown": "buttonOver(this)", "title":"", "alt":"", "role":K_PRMT_ARIA_ROLE_PRESENTATION}, v_td ); v_td = $CE( "td", { "width": "100%", "align": "center" }, v_tr ); var v_ipt = $CE( "input", { "id": this.f_getId( "myYear" ), "class": "clsSelectDateYearEditBox pcl", "aria-label" : PMT_DTP_DATE_YEAR_ENTRY_FIELD, "aria-required": (this.isRequired() ? "true" : "false"), "size": "8", "onkeydown": "return (event.keyCode!=13);", "type": "text" }, v_td ); v_td = $CE( "td", {}, v_tr ); v_img = $CE( "img", { "id": this.f_getId( "btnYearUp" ), "class" : (v_FinalDir == "ltr" ? "clsBtnYearUp" : "clsBtnYearDown"), "src": this.m_sSkin + "/prompting/images/icon_year_up.gif", "vAlign": "top", "tabindex": "0", "width": "15", "align": "right", "class": "clsToolbarButton", "onmouseover": "buttonOver(this)", "onmouseout": "buttonOut(this)", "onmousedown": "buttonOver(this)", "title":"", "alt":"", "role":K_PRMT_ARIA_ROLE_PRESENTATION}, v_td ); }; /** @private @return {cognos.Value} */ cognos.Prompt.Control.Date.prototype.f_getPV = function() { var v_oControl = this.m_oControl; var v_sUse = v_oControl.sGetValue(); if ( this.m_bIsRangeEndControl && this["@DateTime"]) { v_sUse = v_sUse.replace( K_PRMT_reTIMEPART, K_PRMT_sTIME_MAX ); } // skip handle notify if getPV got triggered by getValues if (v_oControl.handleNotify && (!this.m_bisGetValuesCall) ) { v_oControl.handleNotify(); } return ( this.m_bDisabled || !v_sUse ? null : { "use": v_sUse, "display": v_oControl.sGetFormatValue() } ); }; /** @private @return {void} */ cognos.Prompt.Control.Date.prototype.f_setDate = function( v_sDate ) { this.m_oControl.setValue( v_sDate ); }; /** @private @return {void} */ cognos.Prompt.Control.Date.prototype.f_setDateFromEditBox = function(e) { // 'this' is a CDatePickerDialog object this.keyPress( e.keyCode ); var v_oParent = this.m_oParentControl; v_oParent.checkDate( v_oParent.m_oEditBox ); }; /** @private @return {void} */ cognos.Prompt.Control.Date.prototype.f_setEnabled = function( v_bState ) { var v_oControl = this.m_oControl; if ( v_bState ) { v_oControl.enable(); PRMTUtils.f_removeClass( $( this.f_getId( "dialogDatePickerTable" ) ), K_PRMT_sCLS_DISABLED ); } else { v_oControl.disable(); PRMTUtils.f_addClass( $( this.f_getId( "dialogDatePickerTable" ) ), K_PRMT_sCLS_DISABLED ); } }; /** @private @return {void} */ cognos.Prompt.Control.Date.prototype.f_setPV = function( v_oPV ) { var v_sValue = v_oPV["use"]; if ( v_sValue ) { var v_aValues = v_sValue.split(new RegExp("[T\\s]")); if ( v_aValues.length > 2 ) { for ( var v_idx = 1; v_idx < v_aValues.length - 1; v_idx++ ) { // add all Date parts to the first element. v_aValues[0] += K_PRMT_sSP + (v_aValues[v_idx]).f_trim(); } v_aValues[0] = v_aValues[0].f_trim(); // move Time part (last value) in slot 1 v_aValues[1] = v_aValues[ v_aValues.length - 1]; } if ( v_aValues.length >= 1 ) { this.f_setDate( v_aValues[0] ); } } }; /** @private @return {void} */ cognos.Prompt.Control.Date.prototype.f_toggleDisable = function() { var v_bState = this.m_bDisabled; this.f_setEnabled( v_bState ); this.m_bDisabled = !v_bState; }; /** @private @return {boolean} */ cognos.Prompt.Control.Date.prototype.hasValue = function() { return (this.m_bValid); }; var C_Date = cognos.Prompt.Control.Date; // Keep old reference for backward compatibility with custom scripts.