📄 calendar_mini.js
字号:
/* Copyright Mihai Bazon, 2002 | http://students.infoiasi.ro/~mishoo * --------------------------------------------------------------------- * * The DHTML Calendar, version 0.9.2 "The art of date selection" * * 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_mini.js 10712 2008-08-21 10:09:39Z eddieajau $Calendar = function (mondayFirst, dateStr, onSelected, onClose) { 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; this.table = null; this.element = null; this.tbody = null; this.firstdayname = null; this.monthsCombo = null; this.yearsCombo = null; this.hilitedMonth = null; this.activeMonth = null; this.hilitedYear = null; this.activeYear = null; if (!Calendar._DN3) { var ar = new Array(); for (var i = 8; i > 0;) { ar[--i] = Calendar._DN[i].substr(0, 3);}Calendar._DN3 = ar; ar = new Array(); for (var i = 12; i > 0;) { ar[--i] = Calendar._MN[i].substr(0, 3);}Calendar._MN3 = ar;}}; Calendar._C = null; Calendar.is_ie = ( (navigator.userAgent.toLowerCase().indexOf("msie") != -1) &&(navigator.userAgent.toLowerCase().indexOf("opera") == -1) ); Calendar._DN3 = null; Calendar._MN3 = null; 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();}}; Calendar.addEvent = function(el, evname, func) { if (Calendar.is_ie) { el.attachEvent("on" + evname, func);} else { el.addEventListener(evname, func, true);}}; Calendar.removeEvent = function(el, evname, func) { if (Calendar.is_ie) { el.detachEvent("on" + evname, func);} else { el.removeEventListener(evname, func, true);}}; Calendar.createElement = function(type, parent) { var el = null; if (document.createElementNS) { el = document.createElementNS("http://www.w3.org/1999/xhtml", type);} else { el = document.createElement(type);}if (typeof parent != "undefined") { parent.appendChild(el);}return el;}; 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";}}; Calendar.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);}} 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);}}}with (Calendar) { removeEvent(document, "mouseup", tableMouseUp); removeEvent(document, "mouseover", tableMouseOver); removeEvent(document, "mousemove", tableMouseOver); cal._hideCombos(); stopEvent(ev); _C = null;}}; 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");}}}Calendar.stopEvent(ev);}; Calendar.tableMouseDown = function (ev) { if (Calendar.getTargetElement(ev) == Calendar.getElement(ev)) { 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"; 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);}Calendar.stopEvent(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;}}; 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) { 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");}}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"]; stopEvent(ev);}}; 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;} else { if (el.navtype == 200) { Calendar.removeClass(el, "hilite"); cal.callCloseHandler(); return;}date = (el.navtype == 0) ? new Date() : new Date(cal.date); 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;}if (!date.equalsTo(cal.date)) { cal.setDate(date); newdate = el.navtype == 0;}}if (newdate) { cal.callHandler();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -