diff --git a/shrine-webclient/src/main/html/js-i2b2/cells/CRC/CRC_ctrlr_Dates.js b/shrine-webclient/src/main/html/js-i2b2/cells/CRC/CRC_ctrlr_Dates.js index c2174407a..faecd500d 100644 --- a/shrine-webclient/src/main/html/js-i2b2/cells/CRC/CRC_ctrlr_Dates.js +++ b/shrine-webclient/src/main/html/js-i2b2/cells/CRC/CRC_ctrlr_Dates.js @@ -1,271 +1,271 @@ /** * @projectDescription The Date Constraint controller (GUI-only controller). * @inherits i2b2.CRC.ctrlr * @namespace i2b2.CRC.ctrlr.dateConstraint * @author Nick Benik, Griffin Weber MD PhD * @version 1.3 * ---------------------------------------------------------------------------------------- * updated 9-15-08: RC4 launch [Nick Benik] */ console.group('Load & Execute component file: CRC > ctrlr > Dates'); console.time('execute time'); // ================================================================================================== // i2b2.CRC.ctrlr.dateConstraint = { defaultStartDate: '12/01/1979', defaultEndDate: '12/31/2006', currentPanelIndex: false, // ================================================================================================== // showDates: function(panelControllerIndex) { var dm = i2b2.CRC.model.queryCurrent; var panelIndex = i2b2.CRC.ctrlr.QT.panelControllers[panelControllerIndex].panelCurrentIndex; if (undefined==dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][panelIndex]) return; var qn = dm.panels[i2b2.CRC.ctrlr.QT.temporalGroup][panelIndex]; this.currentPanelIndex = panelIndex; // only build the prompt box 1 time if (!i2b2.CRC.view.modalDates) { var handleSubmit = function(){ var closure_pi = i2b2.CRC.ctrlr.dateConstraint.currentPanelIndex; // save the dates if (i2b2.CRC.ctrlr.dateConstraint.doProcessDates(closure_pi)) { // saved and validated, close modal form this.submit(); } }; var handleCancel = function(){ this.cancel(); } i2b2.CRC.view.modalDates = new YAHOO.widget.SimpleDialog("constraintDates", { width: "400px", fixedcenter: true, constraintoviewport: true, modal: true, zindex: 700, buttons: [{ text: "OK", isDefault: true, handler: handleSubmit }, { text: "Cancel", handler: handleCancel }] }); $('constraintDates').show(); i2b2.CRC.view.modalDates.render(document.body); } i2b2.CRC.view.modalDates.show(); // load our panel data var DateRecord = new Object; if (qn.dateFrom) { DateRecord.Start = padNumber(qn.dateFrom.Month,2)+'/'+padNumber(qn.dateFrom.Day,2)+'/'+qn.dateFrom.Year; } else { DateRecord.Start = this.defaultStartDate; } $('constraintDateStart').value = DateRecord.Start; if (qn.dateTo) { DateRecord.End = padNumber(qn.dateTo.Month,2)+'/'+padNumber(qn.dateTo.Day,2)+'/'+qn.dateTo.Year; } else { // DateRecord.End = this.defaultEndDate; var curdate = new Date(); DateRecord.End = padNumber(curdate.getMonth()+1,2)+'/'+padNumber(curdate.getDate(),2)+'/'+curdate.getFullYear(); } $('constraintDateEnd').value = DateRecord.End; if (qn.dateFrom) { $('checkboxDateStart').checked = true; $('constraintDateStart').disabled = false; } else { $('checkboxDateStart').checked = false; $('constraintDateStart').disabled = true; } if (qn.dateTo) { $('checkboxDateEnd').checked = true; $('constraintDateEnd').disabled = false; } else { $('checkboxDateEnd').checked = false; $('constraintDateEnd').disabled = true; } }, // ================================================================================================== // toggleDate: function() { if ($('checkboxDateStart').checked) { $('constraintDateStart').disabled = false; setTimeout("$('constraintDateStart').select()",150); } else { $('constraintDateStart').disabled = true; } if ($('checkboxDateEnd').checked) { $('constraintDateEnd').disabled = false; setTimeout("$('constraintDateEnd').select()", 150); } else { $('constraintDateEnd').disabled = true; } }, // ================================================================================================== // doShowCalendar: function(whichDate) { // create calendar if not already initialized if (!this.DateConstrainCal) { this.DateConstrainCal = new YAHOO.widget.Calendar("DateContstrainCal","calendarDiv"); this.DateConstrainCal.selectEvent.subscribe(this.dateSelected, this.DateConstrainCal,true); } this.DateConstrainCal.clear(); // process click if (whichDate=='S') { if ($('checkboxDateStart').checked==false) { return; } var apos = Position.cumulativeOffset($('dropDateStart')); var cx = apos[0] - $("calendarDiv").getWidth() + $('dropDateStart').width + 3; var cy = apos[1] + $('dropDateStart').height + 3; $("calendarDiv").style.top = cy+'px'; $("calendarDiv").style.left = cx+'px'; $("constraintDateStart").select(); var sDateValue = $('constraintDateStart').value; } else { if ($('checkboxDateEnd').checked==false) { return; } var apos = Position.cumulativeOffset($('dropDateEnd')); var cx = apos[0] - $("calendarDiv").getWidth() + $('dropDateEnd').width + 3; var cy = apos[1] + $('dropDateEnd').height + 3; $("calendarDiv").style.top = cy+'px'; $("calendarDiv").style.left = cx+'px'; $("constraintDateEnd").select(); var sDateValue = $('constraintDateEnd').value; } var rxDate = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/ if (rxDate.test(sDateValue)) { var aDate = sDateValue.split(/\//); this.DateConstrainCal.setMonth(aDate[0]-1); this.DateConstrainCal.setYear(aDate[2]); } else { alert("Invalid Date Format, please use mm/dd/yyyy or select a date using the calendar."); } // save our date type on the calendar object for later use this.whichDate = whichDate; // display everything $("calendarDiv").show(); var w = window.innerWidth || (window.document.documentElement.clientWidth || window.document.body.clientWidth); var h = window.innerHeight || (window.document.documentElement.clientHeight || window.document.body.clientHeight); $("calendarDivMask").style.top = "0px"; $("calendarDivMask").style.left = "0px"; $("calendarDivMask").style.width = (w - 10) + "px"; $("calendarDivMask").style.height = (h - 10) + "px"; $("calendarDivMask").show(); this.DateConstrainCal.render(document.body); }, // ================================================================================================== // dateSelected: function(eventName, selectedDate) { // function is event callback fired by YUI Calendar control // (this function looses it's class scope) var cScope = i2b2.CRC.ctrlr.dateConstraint; if (cScope.whichDate=='S') { var tn = $('constraintDateStart'); } else { var tn = $('constraintDateEnd'); } var selectDate = selectedDate[0][0]; tn.value = selectDate[1]+'/'+selectDate[2]+'/'+selectDate[0]; cScope.hideCalendar.call(cScope); }, // ================================================================================================== // hideCalendar: function() { $("calendarDiv").hide(); $("calendarDivMask").hide(); }, // ================================================================================================== // doProcessDates: function(panelIndex) { // push the dates into the data model var sDateError = false; //^(0[1-9]|1[012])(\\|\-)(0[1-9]|[12][0-9]|3[01])(\\|\-)(19|20)\d\d$ ///^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/ - var rxDate = /^(0[1-9]|1[012])(\/|\-)(0[1-9]|[12][0-9]|3[01])(\/|\-)(19|20)\d\d$/; + var rxDate = /^([1-9]|0[1-9]|1[012])(\/|\-)([1-9]|0[1-9]|[12][0-9]|3[01])(\/|\-)(19|20)\d\d$/; var DateRecord = {}; var startChecked = $('checkboxDateStart').checked; var endChecked = $('checkboxDateEnd').checked; var startDate, endDate; var dm = i2b2.CRC.model.queryCurrent.panels[i2b2.CRC.ctrlr.QT.temporalGroup][panelIndex]; this.currentPanelIndex = panelIndex; // start date if (startChecked) { DateRecord.Start = {}; startDate = $('constraintDateStart').value; if (rxDate.test(startDate)) { var aDate = startDate.split(/\//); DateRecord.Start.Month = padNumber(aDate[0],2); DateRecord.Start.Day = padNumber(aDate[1],2); DateRecord.Start.Year = aDate[2]; } else { sDateError = "Invalid Start Date\n"; } } // test the end date. if (endChecked) { DateRecord.End = {}; endDate = $('constraintDateEnd').value; if (rxDate.test(endDate)) { var aDate = endDate.split(/\//); DateRecord.End.Month = padNumber(aDate[0]); DateRecord.End.Day = padNumber(aDate[1]); DateRecord.End.Year = aDate[2]; } else { sDateError = "Invalid End Date\n"; } } //make sure dates are in proper order. if(startDate && endDate) { var start = new Date(startDate); var end = new Date(endDate); if(start.valueOf() >= end.valueOf()) { sDateError = "Invalid Date Range\n"; } } //must check //add an additional if statement that ensures start date is smaller than the end date. //if(sDate) // check for processing errors if (sDateError) { sDateError += "\nPlease use the following format: mm/dd/yyyy"; alert(sDateError); return false; } else { // attach the data to our panel data if (DateRecord.Start) { dm.dateFrom = DateRecord.Start; } else { delete dm.dateFrom; } if (DateRecord.End) { dm.dateTo = DateRecord.End; } else { delete dm.dateTo; } // clear the query name and set the query as having dirty data var QT = i2b2.CRC.ctrlr.QT; QT.doSetQueryName.call(QT,''); } // redraw buttons if needed var panelctrlFound = false; var pd = i2b2.CRC.ctrlr.QT; for (var i=0; i