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

📄 calendar.js

📁 功能介绍: 1、全站生成html(可选) 可减轻服务器负载
💻 JS
📖 第 1 页 / 共 3 页
字号:
/*  Copyright Mihai Bazon, 2002, 2003  |  http://students.infoiasi.ro/~mishoo * --------------------------------------------------------------------------- * * The DHTML Calendar, version 0.9.3 "It's still alive & keeps rocking" * * Details and latest version at: * http://students.infoiasi.ro/~mishoo/site/calendar.epl * * Feel free to use this script under the terms of the GNU Lesser General * Public License, as long as you do not remove or alter this notice. */// $Id: calendar.js,v 1.11 2003/07/08 18:51:41 mishoo Exp $/** The Calendar object constructor. */Calendar = function (mondayFirst, dateStr, onSelected, onClose) {	// member variables	this.activeDiv = null;	this.currentDateEl = null;	this.checkDisabled = null;	this.timeout = null;	this.onSelected = onSelected || null;	this.onClose = onClose || null;	this.dragging = false;	this.hidden = false;	this.minYear = 1970;	this.maxYear = 2050;	this.dateFormat = Calendar._TT["DEF_DATE_FORMAT"];	this.ttDateFormat = Calendar._TT["TT_DATE_FORMAT"];	this.isPopup = true;	this.weekNumbers = true;	this.mondayFirst = mondayFirst;	this.dateStr = dateStr;	this.ar_days = null;	// HTML elements	this.table = null;	this.element = null;	this.tbody = null;	this.firstdayname = null;	// Combo boxes	this.monthsCombo = null;	this.yearsCombo = null;	this.hilitedMonth = null;	this.activeMonth = null;	this.hilitedYear = null;	this.activeYear = null;	// Information	this.dateClicked = false;	// one-time initializations	if (!Calendar._DN3) {		// table of short day names		var ar = new Array();		for (var i = 8; i > 0;) {			ar[--i] = Calendar._DN[i].substr(0, 3);		}		Calendar._DN3 = ar;		// table of short month names		ar = new Array();		for (var i = 12; i > 0;) {			ar[--i] = Calendar._MN[i].substr(0, 3);		}		Calendar._MN3 = ar;	}};// ** constants/// "static", needed for event handlers.Calendar._C = null;/// detect a special case of "web browser"Calendar.is_ie = ( /msie/i.test(navigator.userAgent) &&		   !/opera/i.test(navigator.userAgent) );// short day names array (initialized at first constructor call)Calendar._DN3 = null;// short month names array (initialized at first constructor call)Calendar._MN3 = null;// BEGIN: UTILITY FUNCTIONS; beware that these might be moved into a separate//        library, at some point.Calendar.getAbsolutePos = function(el) {	var r = { x: el.offsetLeft, y: el.offsetTop };	if (el.offsetParent) {		var tmp = Calendar.getAbsolutePos(el.offsetParent);		r.x += tmp.x;		r.y += tmp.y;	}	return r;};Calendar.isRelated = function (el, evt) {	var related = evt.relatedTarget;	if (!related) {		var type = evt.type;		if (type == "mouseover") {			related = evt.fromElement;		} else if (type == "mouseout") {			related = evt.toElement;		}	}	while (related) {		if (related == el) {			return true;		}		related = related.parentNode;	}	return false;};Calendar.removeClass = function(el, className) {	if (!(el && el.className)) {		return;	}	var cls = el.className.split(" ");	var ar = new Array();	for (var i = cls.length; i > 0;) {		if (cls[--i] != className) {			ar[ar.length] = cls[i];		}	}	el.className = ar.join(" ");};Calendar.addClass = function(el, className) {	Calendar.removeClass(el, className);	el.className += " " + className;};Calendar.getElement = function(ev) {	if (Calendar.is_ie) {		return window.event.srcElement;	} else {		return ev.currentTarget;	}};Calendar.getTargetElement = function(ev) {	if (Calendar.is_ie) {		return window.event.srcElement;	} else {		return ev.target;	}};Calendar.stopEvent = function(ev) {	if (Calendar.is_ie) {		window.event.cancelBubble = true;		window.event.returnValue = false;	} else {		ev.preventDefault();		ev.stopPropagation();	}	return false;};Calendar.addEvent = function(el, evname, func) {	if (el.attachEvent) { // IE		el.attachEvent("on" + evname, func);	} else if (el.addEventListener) { // Gecko / W3C		el.addEventListener(evname, func, true);	} else { // Opera (or old browsers)		el["on" + evname] = func;	}};Calendar.removeEvent = function(el, evname, func) {	if (el.detachEvent) { // IE		el.detachEvent("on" + evname, func);	} else if (el.removeEventListener) { // Gecko / W3C		el.removeEventListener(evname, func, true);	} else { // Opera (or old browsers)		el["on" + evname] = null;	}};Calendar.createElement = function(type, parent) {	var el = null;	if (document.createElementNS) {		// use the XHTML namespace; IE won't normally get here unless		// _they_ "fix" the DOM2 implementation.		el = document.createElementNS("http://www.w3.org/1999/xhtml", type);	} else {		el = document.createElement(type);	}	if (typeof parent != "undefined") {		parent.appendChild(el);	}	return el;};// END: UTILITY FUNCTIONS// BEGIN: CALENDAR STATIC FUNCTIONS/** Internal -- adds a set of events to make some element behave like a button. */Calendar._add_evs = function(el) {	with (Calendar) {		addEvent(el, "mouseover", dayMouseOver);		addEvent(el, "mousedown", dayMouseDown);		addEvent(el, "mouseout", dayMouseOut);		if (is_ie) {			addEvent(el, "dblclick", dayMouseDblClick);			el.setAttribute("unselectable", true);		}	}};Calendar.findMonth = function(el) {	if (typeof el.month != "undefined") {		return el;	} else if (typeof el.parentNode.month != "undefined") {		return el.parentNode;	}	return null;};Calendar.findYear = function(el) {	if (typeof el.year != "undefined") {		return el;	} else if (typeof el.parentNode.year != "undefined") {		return el.parentNode;	}	return null;};Calendar.showMonthsCombo = function () {	var cal = Calendar._C;	if (!cal) {		return false;	}	var cal = cal;	var cd = cal.activeDiv;	var mc = cal.monthsCombo;	if (cal.hilitedMonth) {		Calendar.removeClass(cal.hilitedMonth, "hilite");	}	if (cal.activeMonth) {		Calendar.removeClass(cal.activeMonth, "active");	}	var mon = cal.monthsCombo.getElementsByTagName("div")[cal.date.getMonth()];	Calendar.addClass(mon, "active");	cal.activeMonth = mon;	mc.style.left = cd.offsetLeft + "px";	mc.style.top = (cd.offsetTop + cd.offsetHeight) + "px";	mc.style.display = "block";};Calendar.showYearsCombo = function (fwd) {	var cal = Calendar._C;	if (!cal) {		return false;	}	var cal = cal;	var cd = cal.activeDiv;	var yc = cal.yearsCombo;	if (cal.hilitedYear) {		Calendar.removeClass(cal.hilitedYear, "hilite");	}	if (cal.activeYear) {		Calendar.removeClass(cal.activeYear, "active");	}	cal.activeYear = null;	var Y = cal.date.getFullYear() + (fwd ? 1 : -1);	var yr = yc.firstChild;	var show = false;	for (var i = 12; i > 0; --i) {		if (Y >= cal.minYear && Y <= cal.maxYear) {			yr.firstChild.data = Y;			yr.year = Y;			yr.style.display = "block";			show = true;		} else {			yr.style.display = "none";		}		yr = yr.nextSibling;		Y += fwd ? 2 : -2;	}	if (show) {		yc.style.left = cd.offsetLeft + "px";		yc.style.top = (cd.offsetTop + cd.offsetHeight) + "px";		yc.style.display = "block";	}};// event handlersCalendar.tableMouseUp = function(ev) {	var cal = Calendar._C;	if (!cal) {		return false;	}	if (cal.timeout) {		clearTimeout(cal.timeout);	}	var el = cal.activeDiv;	if (!el) {		return false;	}	var target = Calendar.getTargetElement(ev);	Calendar.removeClass(el, "active");	if (target == el || target.parentNode == el) {		Calendar.cellClick(el);	}	var mon = Calendar.findMonth(target);	var date = null;	if (mon) {		date = new Date(cal.date);		if (mon.month != date.getMonth()) {			date.setMonth(mon.month);			cal.setDate(date);			cal.dateClicked = false;			cal.callHandler();		}	} else {		var year = Calendar.findYear(target);		if (year) {			date = new Date(cal.date);			if (year.year != date.getFullYear()) {				date.setFullYear(year.year);				cal.setDate(date);				cal.dateClicked = false;				cal.callHandler();			}		}	}	with (Calendar) {		removeEvent(document, "mouseup", tableMouseUp);		removeEvent(document, "mouseover", tableMouseOver);		removeEvent(document, "mousemove", tableMouseOver);		cal._hideCombos();		_C = null;		return stopEvent(ev);	}};Calendar.tableMouseOver = function (ev) {	var cal = Calendar._C;	if (!cal) {		return;	}	var el = cal.activeDiv;	var target = Calendar.getTargetElement(ev);	if (target == el || target.parentNode == el) {		Calendar.addClass(el, "hilite active");		Calendar.addClass(el.parentNode, "rowhilite");	} else {		Calendar.removeClass(el, "active");		Calendar.removeClass(el, "hilite");		Calendar.removeClass(el.parentNode, "rowhilite");	}	var mon = Calendar.findMonth(target);	if (mon) {		if (mon.month != cal.date.getMonth()) {			if (cal.hilitedMonth) {				Calendar.removeClass(cal.hilitedMonth, "hilite");			}			Calendar.addClass(mon, "hilite");			cal.hilitedMonth = mon;		} else if (cal.hilitedMonth) {			Calendar.removeClass(cal.hilitedMonth, "hilite");		}	} else {		var year = Calendar.findYear(target);		if (year) {			if (year.year != cal.date.getFullYear()) {				if (cal.hilitedYear) {					Calendar.removeClass(cal.hilitedYear, "hilite");				}				Calendar.addClass(year, "hilite");				cal.hilitedYear = year;			} else if (cal.hilitedYear) {				Calendar.removeClass(cal.hilitedYear, "hilite");			}		}	}	return Calendar.stopEvent(ev);};Calendar.tableMouseDown = function (ev) {	if (Calendar.getTargetElement(ev) == Calendar.getElement(ev)) {		return Calendar.stopEvent(ev);	}};Calendar.calDragIt = function (ev) {	var cal = Calendar._C;	if (!(cal && cal.dragging)) {		return false;	}	var posX;	var posY;	if (Calendar.is_ie) {		posY = window.event.clientY + document.body.scrollTop;		posX = window.event.clientX + document.body.scrollLeft;	} else {		posX = ev.pageX;		posY = ev.pageY;	}	cal.hideShowCovered();	var st = cal.element.style;	st.left = (posX - cal.xOffs) + "px";	st.top = (posY - cal.yOffs) + "px";	return Calendar.stopEvent(ev);};Calendar.calDragEnd = function (ev) {	var cal = Calendar._C;	if (!cal) {		return false;	}	cal.dragging = false;	with (Calendar) {		removeEvent(document, "mousemove", calDragIt);		removeEvent(document, "mouseover", stopEvent);		removeEvent(document, "mouseup", calDragEnd);		tableMouseUp(ev);	}	cal.hideShowCovered();};Calendar.dayMouseDown = function(ev) {	var el = Calendar.getElement(ev);	if (el.disabled) {		return false;	}	var cal = el.calendar;	cal.activeDiv = el;	Calendar._C = cal;	if (el.navtype != 300) with (Calendar) {		addClass(el, "hilite active");		addEvent(document, "mouseover", tableMouseOver);		addEvent(document, "mousemove", tableMouseOver);		addEvent(document, "mouseup", tableMouseUp);	} else if (cal.isPopup) {		cal._dragStart(ev);	}	if (el.navtype == -1 || el.navtype == 1) {		cal.timeout = setTimeout("Calendar.showMonthsCombo()", 250);	} else if (el.navtype == -2 || el.navtype == 2) {		cal.timeout = setTimeout((el.navtype > 0) ? "Calendar.showYearsCombo(true)" : "Calendar.showYearsCombo(false)", 250);	} else {		cal.timeout = null;	}	return Calendar.stopEvent(ev);};Calendar.dayMouseDblClick = function(ev) {	Calendar.cellClick(Calendar.getElement(ev));	if (Calendar.is_ie) {		document.selection.empty();	}};Calendar.dayMouseOver = function(ev) {	var el = Calendar.getElement(ev);	if (Calendar.isRelated(el, ev) || Calendar._C || el.disabled) {

⌨️ 快捷键说明

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