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

📄 calendar.js

📁 这是一个JSP在线考试系统
💻 JS
📖 第 1 页 / 共 4 页
字号:
						else txt = '' + i;						part._range[part._range.length] = txt;					}				}				Calendar._add_evs(part);				return part;			};			var hrs = cal.date.getHours();			var mins = cal.date.getMinutes();			var t12 = !cal.time24;			var pm = (hrs > 12);			if (t12 && pm) hrs -= 12;			var H = makeTimePart("hour", hrs, t12 ? 1 : 0, t12 ? 12 : 23);			var span = Calendar.createElement("span", cell);			span.appendChild(document.createTextNode(":"));			span.className = "colon";			var M = makeTimePart("minute", mins, 0, 59);			var AP = null;			cell = Calendar.createElement("td", row);			cell.className = "time";			cell.colSpan = 2;			if (t12)				AP = makeTimePart("ampm", pm ? "pm" : "am", ["am", "pm"]);			else				cell.innerHTML = "&nbsp;";			cal.onSetTime = function() {				var hrs = this.date.getHours();				var mins = this.date.getMinutes();				var pm = (hrs > 12);				if (pm && t12) hrs -= 12;				H.firstChild.data = (hrs < 10) ? ("0" + hrs) : hrs;				M.firstChild.data = (mins < 10) ? ("0" + mins) : mins;				if (t12)					AP.firstChild.data = pm ? "pm" : "am";			};			cal.onUpdateTime = function() {				var date = this.date;				var h = parseInt(H.firstChild.data, 10);				if (t12) {					if (/pm/i.test(AP.firstChild.data) && h < 12)						h += 12;					else if (/am/i.test(AP.firstChild.data) && h == 12)						h = 0;				}				var d = date.getDate();				var m = date.getMonth();				var y = date.getFullYear();				date.setHours(h);				date.setMinutes(parseInt(M.firstChild.data, 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.appendChild(document.createTextNode(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";		yr.appendChild(document.createTextNode(""));		div.appendChild(yr);	}	this._init(this.firstDayOfWeek, this.date);	parent.appendChild(this.element);};/** keyboard navigation, only for popup calendars */Calendar._keyEvent = function(ev) {	if (!window.calendar) {		return false;	}	(Calendar.is_ie) && (ev = window.event);	var cal = window.calendar;	var act = (Calendar.is_ie || ev.type == "keypress");	if (ev.ctrlKey) {		switch (ev.keyCode) {		    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 (ev.keyCode) {	    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 date = cal.date.getDate() - 1;			var el = cal.currentDateEl;			var ne = null;			var prev = (ev.keyCode == 37) || (ev.keyCode == 38);			switch (ev.keyCode) {			    case 37: // KEY left				(--date >= 0) && (ne = cal.ar_days[date]);				break;			    case 38: // KEY up				date -= 7;				(date >= 0) && (ne = cal.ar_days[date]);				break;			    case 39: // KEY right				(++date < cal.ar_days.length) && (ne = cal.ar_days[date]);				break;			    case 40: // KEY down				date += 7;				(date < cal.ar_days.length) && (ne = cal.ar_days[date]);				break;			}			if (!ne) {				if (prev) {					Calendar.cellClick(cal._nav_pm);				} else {					Calendar.cellClick(cal._nav_nm);				}				date = (prev) ? cal.date.getMonthDays() : 1;				el = cal.currentDateEl;				ne = cal.ar_days[date - 1];			}			Calendar.removeClass(el, "selected");			Calendar.addClass(ne, "selected");			cal.date = new Date(ne.caldate);			cal.callHandler();			cal.currentDateEl = ne;		}		break;	    case 13: // KEY enter		if (act) {			cal.callHandler();			cal.hide();		}		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();	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 = new Array();	var weekend = Calendar._TT["WEEKEND"];	for (var i = 0; i < 6; ++i, row = row.nextSibling) {		var cell = row.firstChild;		if (this.weekNumbers) {			cell.className = "day wn";			cell.firstChild.data = date.getWeekNumber();			cell = cell.nextSibling;		}		row.className = "daysrow";		var hasdays = false;		for (var j = 0; j < 7; ++j, cell = cell.nextSibling, date.setDate(date.getDate() + 1)) {			var iday = date.getDate();			var wday = date.getDay();			cell.className = "day";			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.firstChild.data = iday;			if (typeof this.getDateStatus == "function") {				var status = this.getDateStatus(date, year, month, iday);				if (status === true) {					cell.className += " disabled";					cell.disabled = true;				} else {					if (/disabled/i.test(status))						cell.disabled = true;					cell.className += " " + status;				}			}			if (!cell.disabled) {				ar_days[ar_days.length] = cell;				cell.caldate = new Date(date);				cell.ttip = "_";				if (current_month && iday == mday) {					cell.className += " selected";					this.currentDateEl = cell;				}				if (date.getFullYear() == today.getFullYear() &&				    date.getMonth() == today.getMonth() &&				    iday == today.getDate()) {					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.ar_days = ar_days;	this.title.firstChild.data = Calendar._MN[month] + ", " + year;	this.onSetTime();	this.table.style.visibility = "visible";	// PROFILE	// this.tooltips.firstChild.data = "Generated in " + ((new Date()) - today) + " ms";};/** *  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.calendar = 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) {	if (!window.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.calendar.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.calendar = 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;	this.hideShowCovered();};/** *  Shows the calendar at a given absolute position (beware that, depending on *  the calendar element style -- position property -- this might be relative *  to the parent's containing rectangle). */Calendar.prototype.showAt = function (x, y) {	var s = this.element.style;	s.left = x + "px";

⌨️ 快捷键说明

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