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

📄 calendar.js

📁 功能介绍: 1、全站生成html(可选) 可减轻服务器负载
💻 JS
📖 第 1 页 / 共 3 页
字号:
		return false;	}	if (el.ttip) {		if (el.ttip.substr(0, 1) == "_") {			var date = null;			with (el.calendar.date) {				date = new Date(getFullYear(), getMonth(), el.caldate);			}			el.ttip = date.print(el.calendar.ttDateFormat) + el.ttip.substr(1);		}		el.calendar.tooltips.firstChild.data = el.ttip;	}	if (el.navtype != 300) {		Calendar.addClass(el, "hilite");		if (el.caldate) {			Calendar.addClass(el.parentNode, "rowhilite");		}	}	return Calendar.stopEvent(ev);};Calendar.dayMouseOut = function(ev) {	with (Calendar) {		var el = getElement(ev);		if (isRelated(el, ev) || _C || el.disabled) {			return false;		}		removeClass(el, "hilite");		if (el.caldate) {			removeClass(el.parentNode, "rowhilite");		}		el.calendar.tooltips.firstChild.data = _TT["SEL_DATE"];		return stopEvent(ev);	}};/** *  A generic "click" handler :) handles all types of buttons defined in this *  calendar. */Calendar.cellClick = function(el) {	var cal = el.calendar;	var closing = false;	var newdate = false;	var date = null;	if (typeof el.navtype == "undefined") {		Calendar.removeClass(cal.currentDateEl, "selected");		Calendar.addClass(el, "selected");		closing = (cal.currentDateEl == el);		if (!closing) {			cal.currentDateEl = el;		}		cal.date.setDate(el.caldate);		date = cal.date;		newdate = true;		// a date was clicked		cal.dateClicked = true;	} else {		if (el.navtype == 200) {			Calendar.removeClass(el, "hilite");			cal.callCloseHandler();			return;		}		date = (el.navtype == 0) ? new Date() : new Date(cal.date);		// unless "today" was clicked, we assume no date was clicked so		// the selected handler will know not to close the calenar when		// in single-click mode.		cal.dateClicked = (el.navtype == 0);		var year = date.getFullYear();		var mon = date.getMonth();		function setMonth(m) {			var day = date.getDate();			var max = date.getMonthDays(m);			if (day > max) {				date.setDate(max);			}			date.setMonth(m);		};		switch (el.navtype) {		    case -2:			if (year > cal.minYear) {				date.setFullYear(year - 1);			}			break;		    case -1:			if (mon > 0) {				setMonth(mon - 1);			} else if (year-- > cal.minYear) {				date.setFullYear(year);				setMonth(11);			}			break;		    case 1:			if (mon < 11) {				setMonth(mon + 1);			} else if (year < cal.maxYear) {				date.setFullYear(year + 1);				setMonth(0);			}			break;		    case 2:			if (year < cal.maxYear) {				date.setFullYear(year + 1);			}			break;		    case 100:			cal.setMondayFirst(!cal.mondayFirst);			return;		    case 0:			// TODAY will bring us here			if ((typeof cal.checkDisabled == "function") && cal.checkDisabled(date)) {				// remember, "date" was previously set to new				// Date() if TODAY was clicked; thus, it				// contains today date.				return false;			}			break;		}		if (!date.equalsTo(cal.date)) {			cal.setDate(date);			newdate = true;		}	}	if (newdate) {		cal.callHandler();	}	if (closing) {		Calendar.removeClass(el, "hilite");		cal.callCloseHandler();	}};// END: CALENDAR STATIC FUNCTIONS// BEGIN: CALENDAR OBJECT FUNCTIONS/** *  This function creates the calendar inside the given parent.  If _par is *  null than it creates a popup calendar inside the BODY element.  If _par is *  an element, be it BODY, then it creates a non-popup calendar (still *  hidden).  Some properties need to be set before calling this function. */Calendar.prototype.create = function (_par) {	var parent = null;	if (! _par) {		// default parent is the document body, in which case we create		// a popup calendar.		parent = document.getElementsByTagName("body")[0];		this.isPopup = true;	} else {		parent = _par;		this.isPopup = false;	}	this.date = this.dateStr ? new Date(this.dateStr) : new Date();	var table = Calendar.createElement("table");	this.table = table;	table.cellSpacing = 0;	table.cellPadding = 0;	table.calendar = this;	Calendar.addEvent(table, "mousedown", Calendar.tableMouseDown);	var div = Calendar.createElement("div");	this.element = div;	div.className = "calendar";	if (this.isPopup) {		div.style.position = "absolute";		div.style.display = "none";	}	div.appendChild(table);	var thead = Calendar.createElement("thead", table);	var cell = null;	var row = null;	var cal = this;	var hh = function (text, cs, navtype) {		cell = Calendar.createElement("td", row);		cell.colSpan = cs;		cell.className = "button";		Calendar._add_evs(cell);		cell.calendar = cal;		cell.navtype = navtype;		if (text.substr(0, 1) != "&") {			cell.appendChild(document.createTextNode(text));		}		else {			// FIXME: dirty hack for entities			cell.innerHTML = text;		}		return cell;	};	row = Calendar.createElement("tr", thead);	var title_length = 6;	(this.isPopup) && --title_length;	(this.weekNumbers) && ++title_length;	hh("-", 1, 100).ttip = Calendar._TT["TOGGLE"];	this.title = hh("", title_length, 300);	this.title.className = "title";	if (this.isPopup) {		this.title.ttip = Calendar._TT["DRAG_TO_MOVE"];		this.title.style.cursor = "move";		hh("&#x00d7;", 1, 200).ttip = Calendar._TT["CLOSE"];	}	row = Calendar.createElement("tr", thead);	row.className = "headrow";	this._nav_py = hh("&#x00ab;", 1, -2);	this._nav_py.ttip = Calendar._TT["PREV_YEAR"];	this._nav_pm = hh("&#x2039;", 1, -1);	this._nav_pm.ttip = Calendar._TT["PREV_MONTH"];	this._nav_now = hh(Calendar._TT["TODAY"], this.weekNumbers ? 4 : 3, 0);	this._nav_now.ttip = Calendar._TT["GO_TODAY"];	this._nav_nm = hh("&#x203a;", 1, 1);	this._nav_nm.ttip = Calendar._TT["NEXT_MONTH"];	this._nav_ny = hh("&#x00bb;", 1, 2);	this._nav_ny.ttip = Calendar._TT["NEXT_YEAR"];	// day names	row = Calendar.createElement("tr", thead);	row.className = "daynames";	if (this.weekNumbers) {		cell = Calendar.createElement("td", row);		cell.className = "name wn";		cell.appendChild(document.createTextNode(Calendar._TT["WK"]));	}	for (var i = 7; i > 0; --i) {		cell = Calendar.createElement("td", row);		cell.appendChild(document.createTextNode(""));		if (!i) {			cell.navtype = 100;			cell.calendar = this;			Calendar._add_evs(cell);		}	}	this.firstdayname = (this.weekNumbers) ? row.firstChild.nextSibling : row.firstChild;	this._displayWeekdays();	var tbody = Calendar.createElement("tbody", table);	this.tbody = tbody;	for (i = 6; i > 0; --i) {		row = Calendar.createElement("tr", tbody);		if (this.weekNumbers) {			cell = Calendar.createElement("td", row);			cell.appendChild(document.createTextNode(""));		}		for (var j = 7; j > 0; --j) {			cell = Calendar.createElement("td", row);			cell.appendChild(document.createTextNode(""));			cell.calendar = this;			Calendar._add_evs(cell);		}	}	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 = "label";		mn.month = i;		mn.appendChild(document.createTextNode(Calendar._MN3[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 = "label";		yr.appendChild(document.createTextNode(""));		div.appendChild(yr);	}	this._init(this.mondayFirst, 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.hide();		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.setDate(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 style (if mondayFirst is *  true it makes Monday the first day of week, otherwise the weeks start on *  Sunday. */Calendar.prototype._init = function (mondayFirst, date) {	var today = new Date();	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.mondayFirst = mondayFirst;	this.date = new Date(date);	var month = date.getMonth();	var mday = date.getDate();	var no_days = date.getMonthDays();	date.setDate(1);	var wday = date.getDay();	var MON = mondayFirst ? 1 : 0;	var SAT = mondayFirst ? 5 : 6;	var SUN = mondayFirst ? 6 : 0;	if (mondayFirst) {		wday = (wday > 0) ? (wday - 1) : 6;	}	var iday = 1;	var row = this.tbody.firstChild;	var MN = Calendar._MN3[month];	var hasToday = ((today.getFullYear() == year) && (today.getMonth() == month));	var todayDate = today.getDate();	var week_number = date.getWeekNumber();	var ar_days = new Array();	for (var i = 0; i < 6; ++i) {		if (iday > no_days) {			row.className = "emptyrow";			row = row.nextSibling;			continue;		}		var cell = row.firstChild;		if (this.weekNumbers) {			cell.className = "day wn";			cell.firstChild.data = week_number;			cell = cell.nextSibling;		}		++week_number;		row.className = "daysrow";		for (var j = 0; j < 7; ++j) {			cell.className = "day";			if ((!i && j < wday) || iday > no_days) {				// cell.className = "emptycell";				cell.innerHTML = "&nbsp;";				cell.disabled = true;				cell = cell.nextSibling;				continue;			}			cell.disabled = false;			cell.firstChild.data = iday;			if (typeof this.checkDisabled == "function") {				date.setDate(iday);				if (this.checkDisabled(date)) {					cell.className += " disabled";					cell.disabled = true;				}			}			if (!cell.disabled) {				ar_days[ar_days.length] = cell;				cell.caldate = iday;				cell.ttip = "_";				if (iday == mday) {					cell.className += " selected";					this.currentDateEl = cell;

⌨️ 快捷键说明

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