⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calendar.js

📁 帮助文档打开后可以阅读资源
💻 JS
📖 第 1 页 / 共 4 页
字号:
						h += 12;					else if (/am/i.test(AP.innerHTML) && h == 12)						h = 0;				}				var d = date.getDate();				var m = date.getMonth();				var y = date.getFullYear();				date.setHours(h);				date.setMinutes(parseInt(M.innerHTML, 10));				date.setFullYear(y);				date.setMonth(m);				date.setDate(d);				this.dateClicked = false;				this.callHandler();			};		})();	} else {		this.onSetTime = this.onUpdateTime = function() {};	}	var tfoot = Calendar.createElement("tfoot", table);	row = Calendar.createElement("tr", tfoot);	row.className = "footrow";	cell = hh(Calendar._TT["SEL_DATE"], this.weekNumbers ? 8 : 7, 300);	cell.className = "ttip";	if (this.isPopup) {		cell.ttip = Calendar._TT["DRAG_TO_MOVE"];		cell.style.cursor = "move";	}	this.tooltips = cell;	div = Calendar.createElement("div", this.element);	this.monthsCombo = div;	div.className = "combo";	for (i = 0; i < Calendar._MN.length; ++i) {		var mn = Calendar.createElement("div");		mn.className = Calendar.is_ie ? "label-IEfix" : "label";		mn.month = i;		mn.innerHTML = Calendar._SMN[i];		div.appendChild(mn);	}	div = Calendar.createElement("div", this.element);	this.yearsCombo = div;	div.className = "combo";	for (i = 12; i > 0; --i) {		var yr = Calendar.createElement("div");		yr.className = Calendar.is_ie ? "label-IEfix" : "label";		div.appendChild(yr);	}	this._init(this.firstDayOfWeek, this.date);	parent.appendChild(this.element);};/** keyboard navigation, only for popup calendars */Calendar._keyEvent = function(ev) {	var cal = window._dynarch_popupCalendar;	if (!cal || cal.multiple)		return false;	(Calendar.is_ie) && (ev = window.event);	var act = (Calendar.is_ie || ev.type == "keypress"),		K = ev.keyCode;	if (ev.ctrlKey) {		switch (K) {		    case 37: // KEY left			act && Calendar.cellClick(cal._nav_pm);			break;		    case 38: // KEY up			act && Calendar.cellClick(cal._nav_py);			break;		    case 39: // KEY right			act && Calendar.cellClick(cal._nav_nm);			break;		    case 40: // KEY down			act && Calendar.cellClick(cal._nav_ny);			break;		    default:			return false;		}	} else switch (K) {	    case 32: // KEY space (now)		Calendar.cellClick(cal._nav_now);		break;	    case 27: // KEY esc		act && cal.callCloseHandler();		break;	    case 37: // KEY left	    case 38: // KEY up	    case 39: // KEY right	    case 40: // KEY down		if (act) {			var prev, x, y, ne, el, step;			prev = K == 37 || K == 38;			step = (K == 37 || K == 39) ? 1 : 7;			function setVars() {				el = cal.currentDateEl;				var p = el.pos;				x = p & 15;				y = p >> 4;				ne = cal.ar_days[y][x];			};setVars();			function prevMonth() {				var date = new Date(cal.date);				date.setDate(date.getDate() - step);				cal.setDate(date);			};			function nextMonth() {				var date = new Date(cal.date);				date.setDate(date.getDate() + step);				cal.setDate(date);			};			while (1) {				switch (K) {				    case 37: // KEY left					if (--x >= 0)						ne = cal.ar_days[y][x];					else {						x = 6;						K = 38;						continue;					}					break;				    case 38: // KEY up					if (--y >= 0)						ne = cal.ar_days[y][x];					else {						prevMonth();						setVars();					}					break;				    case 39: // KEY right					if (++x < 7)						ne = cal.ar_days[y][x];					else {						x = 0;						K = 40;						continue;					}					break;				    case 40: // KEY down					if (++y < cal.ar_days.length)						ne = cal.ar_days[y][x];					else {						nextMonth();						setVars();					}					break;				}				break;			}			if (ne) {				if (!ne.disabled)					Calendar.cellClick(ne);				else if (prev)					prevMonth();				else					nextMonth();			}		}		break;	    case 13: // KEY enter		if (act)			Calendar.cellClick(cal.currentDateEl, ev);		break;	    default:		return false;	}	return Calendar.stopEvent(ev);};/** *  (RE)Initializes the calendar to the given date and firstDayOfWeek */Calendar.prototype._init = function (firstDayOfWeek, date) {	var today = new Date(),		TY = today.getFullYear(),		TM = today.getMonth(),		TD = today.getDate();	this.table.style.visibility = "hidden";	var year = date.getFullYear();	if (year < this.minYear) {		year = this.minYear;		date.setFullYear(year);	} else if (year > this.maxYear) {		year = this.maxYear;		date.setFullYear(year);	}	this.firstDayOfWeek = firstDayOfWeek;	this.date = new Date(date);	var month = date.getMonth();	var mday = date.getDate();	var no_days = date.getMonthDays();	// calendar voodoo for computing the first day that would actually be	// displayed in the calendar, even if it's from the previous month.	// WARNING: this is magic. ;-)	date.setDate(1);	var day1 = (date.getDay() - this.firstDayOfWeek) % 7;	if (day1 < 0)		day1 += 7;	date.setDate(-day1);	date.setDate(date.getDate() + 1);	var row = this.tbody.firstChild;	var MN = Calendar._SMN[month];	var ar_days = this.ar_days = new Array();	var weekend = Calendar._TT["WEEKEND"];	var dates = this.multiple ? (this.datesCells = {}) : null;	for (var i = 0; i < 6; ++i, row = row.nextSibling) {		var cell = row.firstChild;		if (this.weekNumbers) {			cell.className = "day wn";			cell.innerHTML = date.getWeekNumber();			cell = cell.nextSibling;		}		row.className = "daysrow";		var hasdays = false, iday, dpos = ar_days[i] = [];		for (var j = 0; j < 7; ++j, cell = cell.nextSibling, date.setDate(iday + 1)) {			iday = date.getDate();			var wday = date.getDay();			cell.className = "day";			cell.pos = i << 4 | j;			dpos[j] = cell;			var current_month = (date.getMonth() == month);			if (!current_month) {				if (this.showsOtherMonths) {					cell.className += " othermonth";					cell.otherMonth = true;				} else {					cell.className = "emptycell";					cell.innerHTML = "&nbsp;";					cell.disabled = true;					continue;				}			} else {				cell.otherMonth = false;				hasdays = true;			}			cell.disabled = false;			cell.innerHTML = this.getDateText ? this.getDateText(date, iday) : iday;			if (dates)				dates[date.print("%Y%m%d")] = cell;			if (this.getDateStatus) {				var status = this.getDateStatus(date, year, month, iday);				if (this.getDateToolTip) {					var toolTip = this.getDateToolTip(date, year, month, iday);					if (toolTip)						cell.title = toolTip;				}				if (status === true) {					cell.className += " disabled";					cell.disabled = true;				} else {					if (/disabled/i.test(status))						cell.disabled = true;					cell.className += " " + status;				}			}			if (!cell.disabled) {				cell.caldate = new Date(date);				cell.ttip = "_";				if (!this.multiple && current_month				    && iday == mday && this.hiliteToday) {					cell.className += " selected";					this.currentDateEl = cell;				}				if (date.getFullYear() == TY &&				    date.getMonth() == TM &&				    iday == TD) {					cell.className += " today";					cell.ttip += Calendar._TT["PART_TODAY"];				}				if (weekend.indexOf(wday.toString()) != -1)					cell.className += cell.otherMonth ? " oweekend" : " weekend";			}		}		if (!(hasdays || this.showsOtherMonths))			row.className = "emptyrow";	}	this.title.innerHTML = Calendar._MN[month] + ", " + year;	this.onSetTime();	this.table.style.visibility = "visible";	this._initMultipleDates();	// PROFILE	// this.tooltips.innerHTML = "Generated in " + ((new Date()) - today) + " ms";};Calendar.prototype._initMultipleDates = function() {	if (this.multiple) {		for (var i in this.multiple) {			var cell = this.datesCells[i];			var d = this.multiple[i];			if (!d)				continue;			if (cell)				cell.className += " selected";		}	}};Calendar.prototype._toggleMultipleDate = function(date) {	if (this.multiple) {		var ds = date.print("%Y%m%d");		var cell = this.datesCells[ds];		if (cell) {			var d = this.multiple[ds];			if (!d) {				Calendar.addClass(cell, "selected");				this.multiple[ds] = date;			} else {				Calendar.removeClass(cell, "selected");				delete this.multiple[ds];			}		}	}};Calendar.prototype.setDateToolTipHandler = function (unaryFunction) {	this.getDateToolTip = unaryFunction;};/** *  Calls _init function above for going to a certain date (but only if the *  date is different than the currently selected one). */Calendar.prototype.setDate = function (date) {	if (!date.equalsTo(this.date)) {		this._init(this.firstDayOfWeek, date);	}};/** *  Refreshes the calendar.  Useful if the "disabledHandler" function is *  dynamic, meaning that the list of disabled date can change at runtime. *  Just * call this function if you think that the list of disabled dates *  should * change. */Calendar.prototype.refresh = function () {	this._init(this.firstDayOfWeek, this.date);};/** Modifies the "firstDayOfWeek" parameter (pass 0 for Synday, 1 for Monday, etc.). */Calendar.prototype.setFirstDayOfWeek = function (firstDayOfWeek) {	this._init(firstDayOfWeek, this.date);	this._displayWeekdays();};/** *  Allows customization of what dates are enabled.  The "unaryFunction" *  parameter must be a function object that receives the date (as a JS Date *  object) and returns a boolean value.  If the returned value is true then *  the passed date will be marked as disabled. */Calendar.prototype.setDateStatusHandler = Calendar.prototype.setDisabledHandler = function (unaryFunction) {	this.getDateStatus = unaryFunction;};/** Customization of allowed year range for the calendar. */Calendar.prototype.setRange = function (a, z) {	this.minYear = a;	this.maxYear = z;};/** Calls the first user handler (selectedHandler). */Calendar.prototype.callHandler = function () {	if (this.onSelected) {		this.onSelected(this, this.date.print(this.dateFormat));	}};/** Calls the second user handler (closeHandler). */Calendar.prototype.callCloseHandler = function () {	if (this.onClose) {		this.onClose(this);	}	this.hideShowCovered();};/** Removes the calendar object from the DOM tree and destroys it. */Calendar.prototype.destroy = function () {	var el = this.element.parentNode;	el.removeChild(this.element);	Calendar._C = null;	window._dynarch_popupCalendar = null;};/** *  Moves the calendar element to a different section in the DOM tree (changes *  its parent). */Calendar.prototype.reparent = function (new_parent) {	var el = this.element;	el.parentNode.removeChild(el);	new_parent.appendChild(el);};// This gets called when the user presses a mouse button anywhere in the// document, if the calendar is shown.  If the click was outside the open// calendar this function closes it.Calendar._checkCalendar = function(ev) {	var calendar = window._dynarch_popupCalendar;	if (!calendar) {		return false;	}	var el = Calendar.is_ie ? Calendar.getElement(ev) : Calendar.getTargetElement(ev);	for (; el != null && el != calendar.element; el = el.parentNode);	if (el == null) {		// calls closeHandler which should hide the calendar.		window._dynarch_popupCalendar.callCloseHandler();		return Calendar.stopEvent(ev);	}};/** Shows the calendar. */Calendar.prototype.show = function () {	var rows = this.table.getElementsByTagName("tr");	for (var i = rows.length; i > 0;) {		var row = rows[--i];		Calendar.removeClass(row, "rowhilite");		var cells = row.getElementsByTagName("td");		for (var j = cells.length; j > 0;) {			var cell = cells[--j];			Calendar.removeClass(cell, "hilite");			Calendar.removeClass(cell, "active");		}	}	this.element.style.display = "block";	this.hidden = false;	if (this.isPopup) {		window._dynarch_popupCalendar = this;		Calendar.addEvent(document, "keydown", Calendar._keyEvent);		Calendar.addEvent(document, "keypress", Calendar._keyEvent);		Calendar.addEvent(document, "mousedown", Calendar._checkCalendar);	}	this.hideShowCovered();};/** *  Hides the calendar.  Also removes any "hilite" from the class of any TD *  element. */Calendar.prototype.hide = function () {	if (this.isPopup) {		Calendar.removeEvent(document, "keydown", Calendar._keyEvent);		Calendar.removeEvent(document, "keypress", Calendar._keyEvent);		Calendar.removeEvent(document, "mousedown", Calendar._checkCalendar);	}	this.element.style.display = "none";	this.hidden = true;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -