📄 event-calendar.js
字号:
// $Id: event-calendar.js 4432 2006-09-14 07:45:55Z shacka $/** * * Copyright (c) 2004-2006 by Zapatec, Inc. * http://www.zapatec.com * 1700 MLK Way, Berkeley, California, * 94709, U.S.A. * All rights reserved. */Zapatec.EventCalendar = function (el, firstDayOfWeek, date, addDiv) { if (typeof el == "string") el = document.getElementById(el); if (typeof addDiv == "string") addDiv = document.getElementById(addDiv); if (!el) { alert("EventCalendar:\n Can't find parent element for the calendar."); return false; } this.div = el; this.addInf = addDiv; div = this.addInf; while (div.firstChild) { div.removeChild(div.firstChild); } this.cellWidth = 60; this.cellHeight = 50; this.events = new Array(); this.loadFromHost = null; this.firstTime = true; this.emptyCell = " "; evCal = this; this.dateText = function (date, y, m, d) { if (evCal.loadFromHost && evCal.date && (d == 1) && !evCal.refresh) { if ((evCal.firstTime) || (evCal.date.getMonth() != evCal.calendar.date.getMonth()) || (evCal.date.getFullYear() != evCal.calendar.date.getFullYear())) { evCal.firstTime = false; evCal.date = evCal.calendar.date; var url = evCal.loadFromHost + "?month=" + (evCal.date.getMonth() + 1) + "&year=" + evCal.date.getFullYear(); Zapatec.Transport.fetchJsonObj({ url: url, reliable : true, onLoad: function(result){ if (evCal.events[y]) { evCal.events[y][m - 1] = null; } for(var i in result) { evCal.addEvent(result[i].id, result[i].div1, result[i].div2, result[i].day, evCal.date.getMonth(), evCal.date.getFullYear(), result[i].start_time, true); } evCal.refreshView(); }, onError: function(type, error){ alert("Error fetching:" + url + "\nError: " + type.errorDescription); } }); } } var text = evCal.getEventText(d, m - 1, y); Zapatec.EventCalendar.triggerEvent = function (ev, el) { var posX = ev.pageX || ev.clientX + window.document.body.scrollLeft || 0; var posY = ev.pageY || ev.clientY + window.document.body.scrollTop || 0; // Get mouse button var button; if (ev.button) { button = ev.button; } else { button = ev.which; } while (!el.caldate) { el = el.parentNode; } d = el.caldate[2]; m = el.caldate[1]; y = el.caldate[0]; var event = Zapatec.Utils.getTargetElement(ev), id; while (!(id = event.id.match(/^zapatec_event_(\d+)$/)) && event != el) { event = event.parentNode; } if (!window.opera) { if (button > 1) { setTimeout(function() {evCal.menu.showMenu(posX, posY)}, 100); if (evCal.menu.updateAnchor.customClick) {Zapatec.Utils.removeEvent(evCal.menu.updateAnchor, "click", evCal.menu.updateAnchor.customClick);} Zapatec.Utils.addEvent(evCal.menu.updateAnchor, "click", evCal.menu.updateAnchor.customClick = function () { if (!win.winDiv) { win.create("center", "center", 615, 452); } win.setContentUrl(evCal.dateWizardHost + "newEvent.php?id=" + id[1] + "&no_auth=true&action=update"); win.show(); return false; }); if (evCal.menu.deleteAnchor.customClick) {Zapatec.Utils.removeEvent(evCal.menu.deleteAnchor, "click", evCal.menu.deleteAnchor.customClick);} Zapatec.Utils.addEvent(evCal.menu.deleteAnchor, "click", evCal.menu.deleteAnchor.customClick = function () { var win1 = new Zapatec.ConfirmWindow("Do you realy want to delete this event?", {title : "Delete"}); win1.getResponse(function (res) { if (res == true) { Zapatec.Transport.fetch({ url: evCal.dateWizardHost + "deleteEvent.php?id=" + id[1] + "&no_auth=true&action=delete", onLoad: function(result) { }, onError: function(type, error){ alert("Error communicating with the server."); } }); evCal.events[y][m][d] = null; evCal.calendar.reinit(); } }); return false; }); return Zapatec.Utils.stopEvent(ev); } } }; Zapatec.Utils.addEvent(window.document, 'mouseup', function(ev) { setTimeout(function() {evCal.menu.hideMenu()}, 50); return Zapatec.Utils.stopEvent(ev); } ); if (text != "") { return d + "<div style='width : " + evCal.cellWidth + "px; height : " + evCal.cellHeight + "px; overflow : hidden; text-align : left;'" + (Zapatec.EventCalendar.triggerEvent ? (" onmouseup='if (Zapatec.is_ie) {ev = window.event;} else {ev = event;} Zapatec.EventCalendar.triggerEvent(ev, this);'") : ("")) + ">" + text + "</div>"; } return d + "<div style='width : " + evCal.cellWidth + "px; height : " + evCal.cellHeight + "px;'>" + evCal.emptyCell + "</div>"; } this.onSelect = function (cal, date) { var dateObj = cal.date, y = dateObj.getFullYear(), m = dateObj.getMonth(), d = dateObj.getDate(), div = evCal.addInf; while (div.firstChild) { div.removeChild(div.firstChild); } var inf = evCal.getEventAddInf(d, m - 1, y); if (inf) div.appendChild(inf); if (evCal.onSelectDate) { evCal.onSelectDate(dateObj, (inf ? false : true), evCal); } } this.calendar = cal = new Zapatec.Calendar(firstDayOfWeek, date, this.onSelect); this.calendar.showsOtherMonths = false; this.calendar.showsTime = false; this.calendar.time24 = "24"; this.calendar.weekNumbers = true; this.calendar.sortOrder = "asc"; this.calendar.setRange(1900, 2999); this.calendar.setDateStatusHandler(null); this.calendar.getDateText = this.dateText; this.calendar.create(this.div); this.date = this.calendar.date; var ul = document.createElement("ul"); ul.style.display = "none"; var li = Zapatec.Utils.createElement("li", ul); li.innerHTML = "<a>update</a>"; var updateAnchor = li.firstChild; li = Zapatec.Utils.createElement("li", ul); li.innerHTML = "<a>delete</a>"; var deleteAnchor = li.firstChild; el.appendChild(ul); Zapatec.Utils.addEvent(window, 'load', function () {evCal.menu.hideMenu();}); this.menu = new Zapatec.Menu(ul, {zIndex : 100, vertical:true}); this.menu.hideMenu(); window.document.oncontextmenu = new Function("return false"); this.menu.updateAnchor = updateAnchor; this.menu.deleteAnchor = deleteAnchor;};Zapatec.EventCalendar.triggerEvent = null;Zapatec.EventCalendar.prototype.addEvent = function (id, div1, div2, d, m, y, startTime, dontReinit) { evCal = this; y = parseInt(y); m = parseInt(m); d = parseInt(d); if (isNaN(y) || isNaN(m) || isNaN(d)) { return false; } --m; if (!evCal.events[y]) { evCal.events[y] = new Array(); } if (!evCal.events[y][m]) { evCal.events[y][m] = new Array(); } if (!evCal.events[y][m][d]) { evCal.events[y][m][d] = []; evCal.events[y][m][d][startTime] = {"id" : id, "div1" : String(div1), "div2" : String(div2)}; } else { var unique = true; var next = null; for (var i in evCal.events[y][m][d]) { if (i == startTime) { evCal.events[y][m][d][i].id = id; evCal.events[y][m][d][i].div1 = div1; evCal.events[y][m][d][i].div2 = div2; unique = false; } if (next == null && i > startTime) { next = i; } } if (unique) { evCal.events[y][m][d] = Zapatec.Utils.Array.insertBefore(evCal.events[y][m][d], {"id" : id, "div1" : String(div1), "div2" : String(div2)}, startTime, next); } } if (!dontReinit) evCal.refreshView();};Zapatec.EventCalendar.prototype.show = function () { this.calendar.reinit(); this.calendar.show();};Zapatec.EventCalendar.prototype.refreshView = function () { this.refresh = true; this.calendar.reinit(); this.refresh = false;};Zapatec.EventCalendar.prototype.getEventText = function(d, m, y) { var text = ""; var event = null; if (event = this.eventExists(d, m, y)) { for (var i in event) { text += "<div id='zapatec_event_" + event[i].id + "'>" + i + "<br>" + event[i].div1 + "</div>"; } } return text;}Zapatec.EventCalendar.prototype.getEventAddInf = function (d, m, y) { var div = null; var event = null; if (event = this.eventExists(d, m, y)) { div = document.createElement("div"); for (var i in event) { div.innerHTML += "<div>" + event[i].div2 + "</div>"; } } return div;}Zapatec.EventCalendar.prototype.eventExists = function (d, m, y) { if (yy = evCal.events["each"]) { if (mm = yy["each"]) { if (dd = mm["each"]) { return dd; } if (dd = mm[d]) { return dd; } } if (mm = yy[m]) { if (dd = mm["each"]) { return dd; } if (dd = mm[d]) { return dd; } } } if (yy = evCal.events[y]) { if (mm = yy["each"]) { if (dd = mm["each"]) { return dd; } if (dd = mm[d]) { return dd; } } if (mm = yy[m]) { if (dd = mm["each"]) { return dd; } if (dd = mm[d]) { return dd; } } } return null;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -