📄 bs_datepicker.class.js
字号:
/********************************************************************************************* BlueShoes Framework; This file is part of the php application framework.* NOTE: This code is stripped (obfuscated). To get the clean documented code goto * www.blueshoes.org and register for the free open source *DEVELOPER* version or * buy the commercial version.* * In case you've already got the developer version, then this is one of the few * packages/classes that is only available to *PAYING* customers.* To get it go to www.blueshoes.org and buy a commercial version.* * @copyright www.blueshoes.org* @author Samuel Blume <sam at blueshoes dot org>* @author Andrej Arn <andrej at blueshoes dot org>*/if (!Bs_Objects) {var Bs_Objects = [];};function bs_dp_inputFieldBlur() {event.srcElement.bsObj.updateByInputFieldBlur();}function bs_dp_inputFieldChange() {event.srcElement.bsObj.updateByInputFieldChange();}function Bs_DatePicker(fieldName) {this._objectId;this.fieldName = fieldName;this.jsBaseDir = '/_bsJavascript/';this.openByInit = false;this.monthLongEn = new Array('January', 'February', 'March', 'April', 'Mai', 'June', 'July', 'August', 'September', 'October', 'November', 'December');this.monthNumChars = 0;this.daysEn = new Array('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday');this.daysNumChars = 2;this.useSpinEditForYear = (typeof(Bs_NumberField) != 'undefined');this.dayHeaderFontColor = '#D4D0C8';this.dayHeaderBgColor = '#808080';this.dayFontColor = 'black';this.dayBgColor = 'white';this.dayFontColorActive = 'white';this.dayBgColorActive = '#0A246A';this.dayTableBgColor = 'white';this.dayBgColorOver = '#FFFFE1';this.dayTableClassName;this.dateInputClassName;this.monthSelectClassName;this.yearInputClassName;this.dayHeaderClassName;this.dayClassName;this.dayTableAttributeString = 'width="100%" border="0" cellspacing="0" cellpadding="3"';this.width = 150;this.validateErrorMsgEn = "Not a valid date: '__VALUE__'. Try again or use the date picker. Valid formats are:\nAmerican mm/dd/yyyy (eg 12/31/2003)\nEuropean dd.mm.yyyy (eg 31.12.2003)\nISO yyyy-mm-dd (eg 2003-12-31)";this.validateErrorMsgDe = "Kein g黮tiges Datum: '__VALUE__'. Versuchen Sie es erneut oder benutzen Sie den DatePicker. G黮tige Formate sind:\nAmerikanisch mm/dd/yyyy (Beispiel 12/31/2003)\nEurop鋓sch dd.mm.yyyy (Beispiel 31.12.2003)\nISO yyyy-mm-dd (Beispiel 2003-12-31)";this.internalDateFormat = 'iso';this.displayDateFormat = 'iso';this.dateFormat = 'iso';this.dayClassNameByWeekday = new Array();this.dayClassNameByDay = new Array();this.dateRangeLower = '1800-01-01';this.dateRangeUpper = '2100-12-31';this._currentDate = '';this._currentYear = 0;this._currentMonth = 0;this._currentDay = 0;this.toggleButton;this._constructor = function() {this._id = Bs_Objects.length;Bs_Objects[this._id] = this;this._objectId = "Bs_DatePicker_"+this._id;var btnName = this._objectId + '_tglBtn';this.toggleButton = new Bs_Button(btnName);eval(btnName + ' = this.toggleButton;');this.toggleButton.group = 'toggleButton';this.toggleButton.imgName = 'bs_calendar';this.toggleButton.cssClassDefault = 'bsBtnMouseOver';this.toggleButton.attachEvent('Bs_Objects['+this._id+'].toggleSelector();', 'on');this.toggleButton.attachEvent('Bs_Objects['+this._id+'].toggleSelector();', 'off');}this.resetDate = function() {this._currentYear = 0;this._currentMonth = 0;this._currentDay = 0;this.updateCurrentDate();}this.setDateByChunks = function(year, month, day) {var newDate = this.dateToIsoDate(year + '-' + month + '-' + day);if (newDate == false) return false;this._currentYear = year;this._currentMonth = month;this._currentDay = day;this.updateCurrentDate();return true;}this.setDateByJunks = function(year, month, day) {return this.setDateByChunks(year, month, day);}this.setDateByIso = function(isoDate) {if ("" == isoDate) {this.resetDate();} else {var newDate = this.dateToIsoDate(isoDate);if (newDate == false) return false;this._currentYear = parseInt(newDate.substr(0, 4), 10);this._currentMonth = parseInt(newDate.substr(5, 2), 10);this._currentDay = parseInt(newDate.substr(8, 2), 10);this.updateCurrentDate();}return true;}this.seedInternalWithCurrentDate = function() {var dateNow = new Date();this._currentYear = this.fixYear(dateNow.getYear());this._currentMonth = dateNow.getMonth() +1;this._currentDay = dateNow.getDate();this.updateCurrentDate();}this.fixYear = function(year) {if (year < 100) {year = parseInt('19' + year, 10);} else if ((year >= 100) && (year < 110)) {year = parseInt(200 + '' + year.toString().substr(2, 1), 10);}return year;}this.drawInto = function(tagId) {document.getElementById(tagId).innerHTML = this.render();if (this.useSpinEditForYear) this._convertYearToSpinEdit();return true;}this.convertField = function(fieldId) {var origFld = document.getElementById(fieldId);if (origFld == null) return false;origFld.maxLength = 10;if (bs_isEmpty(origFld['name'])) origFld['name'] = fieldId;this.fieldName = origFld['name'];var htmlCode = this.render(true);origFld.insertAdjacentHTML('afterEnd', htmlCode);if (this.useSpinEditForYear) this._convertYearToSpinEdit();origFld.bsObj = this;origFld.attachEvent('onblur', bs_dp_inputFieldBlur);origFld.attachEvent('onkeyup', bs_dp_inputFieldChange);return true;}this.render = function(noInputField) {var ret = new Array();if (!noInputField) {ret[ret.length] = '<input';ret[ret.length] = ' type="text"';ret[ret.length] = ' name="' + this.fieldName + '"';ret[ret.length] = ' id="' + this.fieldName + '"';ret[ret.length] = ' onBlur="Bs_Objects['+this._id+'].updateByInputFieldBlur();"';ret[ret.length] = ' onKeyUp="Bs_Objects['+this._id+'].updateByInputFieldChange();"';ret[ret.length] = ' size="10"';ret[ret.length] = ' maxlength="10"';ret[ret.length] = ' style="width:' + (this.width -22) + 'px;"';if (typeof(this.dateInputClassName) != 'undefined') {ret[ret.length] = ' class="' + this.dateInputClassName + '"';}ret[ret.length] = ' title="' + this.getCurrentDateReadable() + '"';ret[ret.length] = ' value="' + this.getCurrentDateFormatted() + '">';}this.toggleButton.title = (this.openByInit) ? 'Hide Calendar' : 'Show Calendar';if (this.openByInit) this.toggleButton.setStatus(2);var btnHtml = this.toggleButton.render();ret[ret.length] = btnHtml;ret[ret.length] = '<div id="' + this._objectId + '_div"';ret[ret.length] = ' style="width:' + this.width + 'px; border:1px solid black;';if (!this.openByInit) {ret[ret.length] = ' display:none;';}ret[ret.length] = '">';ret[ret.length] = this.renderDatePicker();ret[ret.length] = '</div>';return ret.join('');}this.renderDatePicker = function() {var ret = new Array();if (this._currentDate.length == 0) {this.seedInternalWithCurrentDate();}ret[ret.length] = '<nobr>';ret[ret.length] = '<select name="' + this.fieldName + '_month"';ret[ret.length] = ' id="' + this._objectId + '_month" size="1"';ret[ret.length] = ' onChange="Bs_Objects['+this._id+'].updateByMonth();"';if (typeof(this.monthSelectClassName) != 'undefined') {ret[ret.length] = ' class="' + this.monthSelectClassName + '"';} else {ret[ret.length] = ' style="width:94px;"';}ret[ret.length] = '>';var i = 1;for (var m=0; m<this.monthLongEn.length; m++) {ret[ret.length] = '<option value="' + i + '"';if (this._currentMonth == i) ret[ret.length] = ' selected';ret[ret.length] = '>';if (this.monthNumChars > 0) {ret[ret.length] = this.monthLongEn[m].substr(0, this.monthNumChars);} else {ret[ret.length] = this.monthLongEn[m];}ret[ret.length] = '</option>';i++;}ret[ret.length] = '</select>';ret[ret.length] = '<input type="text" name="' + this.fieldName + '_year"';ret[ret.length] = ' id="' + this._objectId + '_year" value="' + this._currentYear + '"';ret[ret.length] = ' size="4" maxlength="4" onKeyUp="Bs_Objects['+this._id+'].updateByYearChange();"';ret[ret.length] = ' onBlur="Bs_Objects['+this._id+'].updateByYearBlur();"';if (typeof(this.yearInputClassName) != 'undefined') {ret[ret.length] = ' class="' + this.yearInputClassName + '"';} else {ret[ret.length] = ' style="width:42px;"';}ret[ret.length] = '>';ret[ret.length] = '</nobr><br>';ret[ret.length] = '<div id="' + this._objectId + '_dayDiv">';ret[ret.length] = this.renderDayTable(this._currentYear, this._currentMonth, this._currentDay);ret[ret.length] = '</div>';return ret.join('');}this.renderDayTable = function(currentYear, currentMonth, currentDay) {var day = 1;var lastDayOfMonth = this.getNumberOfDays(currentYear, currentMonth);var ret = new Array();ret[ret.length] = '<table ' + this.dayTableAttributeString;ret[ret.length] = ' bgcolor="' + this.dayTableBgColor + '"';if (typeof(this.dayTableClassName) != 'undefined') {ret[ret.length] = ' class="' + this.dayTableClassName + '"';}ret[ret.length] = '>';if (currentYear >= 1970) {ret[ret.length] = '<tr>';for (var d=0; d<this.daysEn.length; d++) {ret[ret.length] = '<td width="14%" bgcolor="' + this.dayHeaderBgColor + '" align="right">';ret[ret.length] = '<span';ret[ret.length] = ' title="' + this.daysEn[d] + '"';if (typeof(this.dayHeaderClassName) != 'undefined') {ret[ret.length] = ' class="' + this.dayHeaderClassName + '"';ret[ret.length] = ' style="color:' + this.dayHeaderFontColor + '; cursor:default;">';} else {ret[ret.length] = ' style="color:' + this.dayHeaderFontColor + '; cursor:default; font-family:arial; font-size:12px;">';}if (this.daysNumChars > 0) {ret[ret.length] = this.daysEn[d].substr(0, this.daysNumChars);} else {ret[ret.length] = this.daysEn[d];}ret[ret.length] = '</span>';ret[ret.length] = '</td>';}ret[ret.length] = '</tr>';var dateObjFirst = new Date(currentYear, currentMonth-1, 1, 0, 0, 0);var weekDayFirst = dateObjFirst.getDay();if (weekDayFirst == 0) weekDayFirst = 7;} else {var weekDayFirst = 1;}for (var i=0; i<6; i++) {ret[ret.length] = '<tr>';for (var j=1; j<8; j++) {if ((day > lastDayOfMonth) || ((i == 0) && (j < weekDayFirst))) {ret[ret.length] = '<td> </td>';} else {ret[ret.length] = '<td';ret[ret.length] = ' id="' + this._objectId + '_td' + day + '"';ret[ret.length] = ' align="right"';ret[ret.length] = ' onMouseOver="Bs_Objects['+this._id+'].dayMouseOver(' + day + ');"';ret[ret.length] = ' onMouseOut="Bs_Objects['+this._id+'].dayMouseOut(' + day + ');"';ret[ret.length] = ' onClick="Bs_Objects['+this._id+'].updateByDay(' + day + ');"';if (typeof(this.dayClassName) != 'undefined') {ret[ret.length] = ' class="' + this.dayClassName + '"';ret[ret.length] = ' style="cursor:hand; cursor:pointer;';} else {ret[ret.length] = ' style="cursor:hand; cursor:pointer; font-family:arial; font-size:11px;';}if (day == currentDay) {ret[ret.length] = ' color:' + this.dayFontColorActive + '; background-color:' + this.dayBgColorActive + ';';} else {ret[ret.length] = ' color:' + this.dayFontColor + '; background-color:' + this.dayBgColor + ';';}ret[ret.length] = '">';ret[ret.length] = day;ret[ret.length] = '</td>';day++;}}ret[ret.length] = '</tr>';if (day >= (lastDayOfMonth +1)) break;}ret[ret.length] = '</table>';return ret.join('');}this.updateDayTable = function() {document.getElementById(this._objectId + '_dayDiv').innerHTML = this.renderDayTable(this._currentYear, this._currentMonth, this._currentDay);}this.getCurrentDateReadable = function() {if (this._currentDay == 0) return '';if (this._currentMonth == 0) return '';if (this._currentYear == 0) return '';var ret = '';var dateObj = new Date(this._currentYear, this._currentMonth -1, this._currentDay);var weekDay = dateObj.getDay();if (weekDay == 0) weekDay = 7;ret += this.daysEn[weekDay -1] + ', 'ret += this.monthLongEn[this._currentMonth -1] + ' ';ret += this._currentDay;switch (this._currentDay) {case 1: case 21: case 31:ret += 'st'; break;case 2: case 22:ret += 'nd'; break;case 3: case 23:ret += 'rd'; break;default:ret += 'th';}ret += ' ' + this._currentYear;return ret;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -