📄 datepicker.js
字号:
this._dateSlot[index].value = i;
this._dateSlot[index].data.data = i;
this._dateSlot[index].data.parentNode.className = "";
this._dateSlot[index].data.parentNode.style.fontWeight = "normal";
this._dateSlot[index].data.parentNode.style.border= "none";
if (toISODate(d1) == today) {
this._dateSlot[index].data.parentNode.className = "today";
this._dateSlot[index].data.parentNode.style.fontWeight = "bold";
}
if (toISODate(d1) == current) {
this._dateSlot[index].data.parentNode.className += " current";
this._dateSlot[index].data.parentNode.style.border= "1px dotted WindowText";
}
if (toISODate(d1) == selected) {
this._dateSlot[index].data.parentNode.className += " selected";
this._dateSlot[index].data.parentNode.style.border= "1px solid WindowText";
}
d1 = new Date(d1.getFullYear(), d1.getMonth(), d1.getDate()+1);
}
var lastDateIndex = index;
while(index < 42) {
this._dateSlot[index].value = -1;
this._dateSlot[index].data.data = String.fromCharCode(160);
this._dateSlot[index].data.parentNode.className = "";
this._dateSlot[index].data.parentNode.style.fontWeight = "normal";
this._dateSlot[index].data.parentNode.style.border= "none";
++index;
}
// Week numbers
if (this._includeWeek) {
d1 = new Date(date.getFullYear(), date.getMonth(), 1);
for (i=0; i < 6; ++i) {
if (i == 5 && lastDateIndex < 36) {
this._weekSlot[i].data.data = String.fromCharCode(160);
this._weekSlot[i].data.parentNode.style.borderRight = "none";
} else {
week = weekNumber(this, d1);
this._weekSlot[i].data.data = week;
this._weekSlot[i].data.parentNode.style.borderRight = "1px solid WindowText";
}
d1 = new Date(d1.getFullYear(), d1.getMonth(), d1.getDate()+7);
}
}
}
Calendar.prototype.show = function(element) {
if(!this._showing) {
var p = getPoint(element);
this._calDiv.style.display = "block";
this._calDiv.style.top = p.y + element.offsetHeight + 1;
this._calDiv.style.left = p.x;
this._showing = true;
/* -------- */
if( this._bw.ie6 )
{
dw = this._calDiv.offsetWidth;
dh = this._calDiv.offsetHeight;
var els = document.getElementsByTagName("body");
var body = els[0];
if( !body ) return;
//paste iframe under the modal
var underDiv = this._calDiv.cloneNode(false);
underDiv.style.zIndex="390";
underDiv.style.margin = "0px";
underDiv.style.padding = "0px";
underDiv.style.display = "block";
underDiv.style.width = dw;
underDiv.style.height = dh;
underDiv.style.border = "1px solid WindowText";
underDiv.innerHTML = "<iframe width=\"100%\" height=\"100%\" frameborder=\"0\"></iframe>";
body.appendChild(underDiv);
this._underDiv = underDiv;
}
/* -------- */
this._calDiv.focus();
}
};
Calendar.prototype.hide = function() {
if(this._showing) {
this._calDiv.style.display = "none";
this._showing = false;
if( this._bw.ie6 ) {
if( this._underDiv ) this._underDiv.removeNode(true);
}
}
}
Calendar.prototype.toggle = function(element) {
if(this._showing) {
this.hide();
} else {
this.show(element);
}
}
Calendar.prototype.onchange = function() {};
Calendar.prototype.setCurrentDate = function(date) {
if (date == null) {
return;
}
// if string or number create a Date object
if (typeof date == "string" || typeof date == "number") {
date = new Date(date);
}
// do not update if not really changed
if (this._currentDate.getDate() != date.getDate() ||
this._currentDate.getMonth() != date.getMonth() ||
this._currentDate.getFullYear() != date.getFullYear()) {
this._currentDate = new Date(date);
this._updateHeader();
this._update();
}
}
Calendar.prototype.setSelectedDate = function(date) {
this._selectedDate = new Date(date);
this.setCurrentDate(this._selectedDate);
if (typeof this.onchange == "function") {
this.onchange();
}
}
Calendar.prototype.clearSelectedDate = function() {
this._selectedDate = null;
if (typeof this.onchange == "function") {
this.onchange();
}
}
Calendar.prototype.getElement = function() {
return this._calDiv;
}
Calendar.prototype.setIncludeWeek = function(v) {
if (this._calDiv == null) {
this._includeWeek = v;
}
}
Calendar.prototype.getSelectedDate = function () {
if (this._selectedDate == null) {
return null;
} else {
return new Date(this._selectedDate);
}
}
Calendar.prototype._updateHeader = function () {
//
var options = this._monthSelect.options;
var m = this._currentDate.getMonth();
for(var i=0; i < options.length; ++i) {
options[i].selected = false;
if (options[i].value == m) {
options[i].selected = true;
}
}
options = this._yearSelect.options;
var year = this._currentDate.getFullYear();
for(var i=0; i < options.length; ++i) {
options[i].selected = false;
if (options[i].value == year) {
options[i].selected = true;
}
}
}
Calendar.prototype.setYear = function(year) {
var d = new Date(this._currentDate);
d.setFullYear(year);
this.setCurrentDate(d);
}
Calendar.prototype.setMonth = function (month) {
var d = new Date(this._currentDate);
d.setMonth(month);
this.setCurrentDate(d);
}
Calendar.prototype.nextMonth = function () {
this.setMonth(this._currentDate.getMonth()+1);
}
Calendar.prototype.prevMonth = function () {
this.setMonth(this._currentDate.getMonth()-1);
}
Calendar.prototype.setFirstDayOfWeek = function (nFirstWeekDay) {
this._firstDayOfWeek = nFirstWeekDay;
}
Calendar.prototype.getFirstDayOfWeek = function () {
return this._firstDayOfWeek;
}
Calendar.prototype.setMinimalDaysInFirstWeek = function(n) {
this._minimalDaysInFirstWeek = n;
}
Calendar.prototype.getMinimalDaysInFirstWeek = function () {
return this._minimalDaysInFirstWeek;
}
Calendar.prototype.setMonthNames = function(a) {
// sanity test
this._monthNames = a;
}
Calendar.prototype.setShortMonthNames = function(a) {
// sanity test
this._shortMonthNames = a;
}
Calendar.prototype.setWeekDayNames = function(a) {
// sanity test
this._weekDayNames = a;
}
Calendar.prototype.setShortWeekDayNames = function(a) {
// sanity test
this._shortWeekDayNames = a;
}
Calendar.prototype.getFormat = function() {
return this._format;
}
Calendar.prototype.setFormat = function(f) {
this._format = f;
}
Calendar.prototype.formatDate = function() {
if (this._selectedDate == null) {
return "";
}
var bits = new Array();
// work out what each bit should be
var date = this._selectedDate;
bits['d'] = date.getDate();
bits['dd'] = pad(date.getDate(),2);
bits['ddd'] = this._shortWeekDayNames[date.getDay()];
bits['dddd'] = this._weekDayNames[date.getDay()];
bits['M'] = date.getMonth()+1;
bits['MM'] = pad(date.getMonth()+1,2);
bits['MMM'] = this._shortMonthNames[date.getMonth()];
bits['MMMM'] = this._monthNames[date.getMonth()];
var yearStr = "" + date.getFullYear();
yearStr = (yearStr.length == 2) ? '19' + yearStr: yearStr;
bits['yyyy'] = yearStr;
bits['yy'] = bits['yyyy'].toString().substr(2,2);
// do some funky regexs to replace the format string
// with the real values
var frm = new String(this._format);
var sect;
for (sect in bits) {
frm = eval("frm.replace(/\\b" + sect + "\\b/,'" + bits[sect] + "');");
}
return frm;
}
function isLeapYear(year) {
return ((year%4 == 0) && ((year%100 != 0) || (year%400 == 0)));
}
function yearLength(year) {
if (isLeapYear(year))
return 366;
else
return 365;
}
function dayOfYear(date) {
var a = Calendar.NUM_DAYS;
if (isLeapYear(date.getFullYear())) {
a = Calendar.LEAP_NUM_DAYS;
}
var month = date.getMonth();
return a[month] + date.getDate();
}
// ---------------------------------------------
// Week number stuff
// ---------------------------------------------
function weekNumber(cal, date) {
var dow = date.getDay();
var doy = dayOfYear(date);
var year = date.getFullYear();
// Compute the week of the year. Valid week numbers run from 1 to 52
// or 53, depending on the year, the first day of the week, and the
// minimal days in the first week. Days at the start of the year may
// fall into the last week of the previous year; days at the end of
// the year may fall into the first week of the next year.
var relDow = (dow + 7 - cal.getFirstDayOfWeek()) % 7; // 0..6
var relDowJan1 = (dow - doy + 701 - cal.getFirstDayOfWeek()) % 7; // 0..6
var week = Math.floor((doy - 1 + relDowJan1) / 7); // 0..53
if ((7 - relDowJan1) >= cal.getMinimalDaysInFirstWeek()) {
++week;
}
if (doy > 359) { // Fast check which eliminates most cases
// Check to see if we are in the last week; if so, we need
// to handle the case in which we are the first week of the
// next year.
var lastDoy = yearLength(year);
var lastRelDow = (relDow + lastDoy - doy) % 7;
if (lastRelDow < 0) {
lastRelDow += 7;
}
if (((6 - lastRelDow) >= cal.getMinimalDaysInFirstWeek())
&& ((doy + 7 - relDow) > lastDoy)) {
week = 1;
}
} else if (week == 0) {
// We are the last week of the previous year.
var prevDoy = doy + yearLength(year - 1);
week = weekOfPeriod(cal, prevDoy, dow);
}
return week;
}
function weekOfPeriod(cal, dayOfPeriod, dayOfWeek) {
// Determine the day of the week of the first day of the period
// in question (either a year or a month). Zero represents the
// first day of the week on this calendar.
var periodStartDayOfWeek =
(dayOfWeek - cal.getFirstDayOfWeek() - dayOfPeriod + 1) % 7;
if (periodStartDayOfWeek < 0) {
periodStartDayOfWeek += 7;
}
// Compute the week number. Initially, ignore the first week, which
// may be fractional (or may not be). We add periodStartDayOfWeek in
// order to fill out the first week, if it is fractional.
var weekNo = Math.floor((dayOfPeriod + periodStartDayOfWeek - 1) / 7);
// If the first week is long enough, then count it. If
// the minimal days in the first week is one, or if the period start
// is zero, we always increment weekNo.
if ((7 - periodStartDayOfWeek) >= cal.getMinimalDaysInFirstWeek()) {
++weekNo;
}
return weekNo;
}
function getEventObject(e) { // utility function to retrieve object from event
if (navigator.appName == "Microsoft Internet Explorer") {
return e.srcElement;
} else { // is mozilla/netscape
// need to crawl up the tree to get the first "real" element
// i.e. a tag, not raw text
var o = e.target;
while (!o.tagName) {
o = o.parentNode;
}
return o;
}
}
function addEvent(name, obj, funct) { // utility function to add event handlers
if (navigator.appName == "Microsoft Internet Explorer") {
obj.attachEvent("on"+name, funct);
} else { // is mozilla/netscape
obj.addEventListener(name, funct, false);
}
}
function deleteEvent(name, obj, funct) { // utility function to delete event handlers
if (navigator.appName == "Microsoft Internet Explorer") {
obj.detachEvent("on"+name, funct);
} else { // is mozilla/netscape
obj.removeEventListener(name, funct, false);
}
}
function setCursor(obj) {
if (navigator.appName == "Microsoft Internet Explorer") {
obj.style.cursor = "hand";
} else { // is mozilla/netscape
obj.style.cursor = "pointer";
}
}
function Point(iX, iY)
{
this.x = iX;
this.y = iY;
}
function getPoint(aTag)
{
var oTmp = aTag;
var point = new Point(0,0);
do
{
point.x += oTmp.offsetLeft;
point.y += oTmp.offsetTop;
oTmp = oTmp.offsetParent;
}
while (oTmp.tagName != "BODY");
return point;
}
function toISODate(date) {
var s = date.getFullYear();
var m = date.getMonth() + 1;
if (m < 10) {
m = "0" + m;
}
var day = date.getDate();
if (day < 10) {
day = "0" + day;
}
return String(s) + String(m) + String(day);
}
function pad(number,X) { // utility function to pad a number to a given width
X = (!X ? 2 : X);
number = ""+number;
while (number.length < X) {
number = "0" + number;
}
return number;
}
function bw_check()
{
var is_major = parseInt( navigator.appVersion );
this.nver = is_major;
this.ver = navigator.appVersion;
this.agent = navigator.userAgent;
this.dom = document.getElementById ? 1 : 0;
this.opera = window.opera ? 1 : 0;
this.ie5 = ( this.ver.indexOf( "MSIE 5" ) > -1 && this.dom && !this.opera ) ? 1 : 0;
this.ie6 = ( this.ver.indexOf( "MSIE 6" ) > -1 && this.dom && !this.opera ) ? 1 : 0;
this.ie4 = ( document.all && !this.dom && !this.opera ) ? 1 : 0;
this.ie = this.ie4 || this.ie5 || this.ie6;
this.mac = this.agent.indexOf( "Mac" ) > -1;
this.ns6 = ( this.dom && parseInt( this.ver ) >= 5 ) ? 1 : 0;
this.ie3 = ( this.ver.indexOf( "MSIE" ) && ( is_major < 4 ) );
this.hotjava = ( this.agent.toLowerCase().indexOf( 'hotjava' ) != -1 ) ? 1 : 0;
this.ns4 = ( document.layers && !this.dom && !this.hotjava ) ? 1 : 0;
this.bw = ( this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.opera );
this.ver3 = ( this.hotjava || this.ie3 );
this.opera7 = ( ( this.agent.toLowerCase().indexOf( 'opera 7' ) > -1 ) || ( this.agent.toLowerCase().indexOf( 'opera/7' ) > -1 ) );
this.operaOld = this.opera && !this.opera7;
return this;
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -