MonthlyCalendar.js
资源名称:oa.rar [点击查看]
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:10k
源码类别:
OA系统
开发平台:
Java
- /*
- Copyright (c) 2004-2006, The Dojo Foundation
- All Rights Reserved.
- Licensed under the Academic Free License version 2.1 or above OR the
- modified BSD license. For more information on Dojo licensing, see:
- http://dojotoolkit.org/community/licensing.shtml
- */
- dojo.provide("dojo.widget.MonthlyCalendar");
- dojo.require("dojo.date.common");
- dojo.require("dojo.date.format");
- dojo.require("dojo.widget.*");
- dojo.require("dojo.widget.DatePicker");
- dojo.require("dojo.event.*");
- dojo.require("dojo.html.*");
- dojo.require("dojo.experimental");
- dojo.experimental("dojo.widget.MonthlyCalendar");
- dojo.widget.defineWidget("dojo.widget.MonthlyCalendar", dojo.widget.DatePicker, {dayWidth:"wide", templateString:"<div class="datePickerContainer" dojoAttachPoint="datePickerContainerNode">nt<h3 class="monthLabel">nt<!--nt<span nttdojoAttachPoint="decreaseWeekNode" nttdojoAttachEvent="onClick: onIncrementWeek;" nttclass="incrementControl">ntt<img src="${dojoWidgetModuleUri}templates/decrementWeek.gif" alt="↑" />nt</span>nt-->nt<span nttdojoAttachPoint="decreaseMonthNode" nttdojoAttachEvent="onClick: onIncrementMonth;" class="incrementControl">ntt<img src="${dojoWidgetModuleUri}templates/decrementMonth.gif" ntttalt="↑" dojoAttachPoint="decrementMonthImageNode">nt</span>nt<span dojoAttachPoint="monthLabelNode" class="month">July</span>nt<span nttdojoAttachPoint="increaseMonthNode" nttdojoAttachEvent="onClick: onIncrementMonth;" class="incrementControl">ntt<img src="${dojoWidgetModuleUri}templates/incrementMonth.gif" ntttalt="↓" dojoAttachPoint="incrementMonthImageNode">nt</span>nt<!--ntt<span dojoAttachPoint="increaseWeekNode" ntttdojoAttachEvent="onClick: onIncrementWeek;" ntttclass="incrementControl">nttt<img src="${dojoWidgetModuleUri}templates/incrementWeek.gif" ntttalt="↓" />ntt</span>nt-->nt</h3>nt<table class="calendarContainer">ntt<thead>nttt<tr dojoAttachPoint="dayLabelsRow">ntttt<td></td>ntttt<td></td>ntttt<td></td>ntttt<td></td>ntttt<td></td>ntttt<td></td>ntttt<td></td>nttt</tr>ntt</thead>ntt<tbody dojoAttachPoint="calendarDatesContainerNode" ntttdojoAttachEvent="onClick: onSetDate;">nttt<tr dojoAttachPoint="calendarRow0">ntttt<td></td>ntttt<td></td>ntttt<td></td>ntttt<td></td>ntttt<td></td>ntttt<td></td>ntttt<td></td>nttt</tr>nttt<tr dojoAttachPoint="calendarRow1">ntttt<td></td>ntttt<td></td>ntttt<td></td>ntttt<td></td>ntttt<td></td>ntttt<td></td>ntttt<td></td>nttt</tr>nttt<tr dojoAttachPoint="calendarRow2">ntttt<td></td>ntttt<td></td>ntttt<td></td>ntttt<td></td>ntttt<td></td>ntttt<td></td>ntttt<td></td>nttt</tr>nttt<tr dojoAttachPoint="calendarRow3">ntttt<td></td>ntttt<td></td>ntttt<td></td>ntttt<td></td>ntttt<td></td>ntttt<td></td>ntttt<td></td>nttt</tr>nttt<tr dojoAttachPoint="calendarRow4">ntttt<td></td>ntttt<td></td>ntttt<td></td>ntttt<td></td>ntttt<td></td>ntttt<td></td>ntttt<td></td>nttt</tr>nttt<tr dojoAttachPoint="calendarRow5">ntttt<td></td>ntttt<td></td>ntttt<td></td>ntttt<td></td>ntttt<td></td>ntttt<td></td>ntttt<td></td>nttt</tr>ntt</tbody>nt</table>nt<h3 class="yearLabel">ntt<span dojoAttachPoint="previousYearLabelNode"ntttdojoAttachEvent="onClick: onIncrementYear;" class="previousYear"></span>ntt<span class="selectedYear" dojoAttachPoint="currentYearLabelNode"></span>ntt<span dojoAttachPoint="nextYearLabelNode" ntttdojoAttachEvent="onClick: onIncrementYear;" class="nextYear"></span>nt</h3>n</div>n", templateCssString:".datePickerContainer {ntmargin:0.5em 2em 0.5em 0;nt/*width:10em;*/ntfloat:left;n}nn.previousMonth {ntbackground-color:#bbbbbb;n}nn.currentMonth {ntbackground-color:#8f8f8f;n}nn.nextMonth {ntbackground-color:#eeeeee;n}nn.currentDate {nttext-decoration:underline;ntfont-style:italic;n}nn.selectedItem {ntbackground-color:#3a3a3a;ntcolor:#ffffff;n}nn.calendarContainer {ntborder-collapse:collapse;ntborder-spacing:0;ntborder-bottom:1px solid #e6e6e6;ntoverflow: hidden;nttext-align: right;n}nn.calendarContainer thead{ntborder-bottom:1px solid #e6e6e6;n}nn.calendarContainer tbody * td {n height: 100px;n border: 1px solid gray;n}nn.calendarContainer td {n width: 100px;n padding: 2px;ntvertical-align: top;n}nn.monthLabel {ntfont-size:0.9em;ntfont-weight:400;ntmargin:0;nttext-align:center;n}nn.monthLabel .month {ntpadding:0 0.4em 0 0.4em;n}nn.yearLabel {ntfont-size:0.9em;ntfont-weight:400;ntmargin:0.25em 0 0 0;nttext-align:right;ntcolor:#a3a3a3;n}nn.yearLabel .selectedYear {ntcolor:#000;ntpadding:0 0.2em;n}nn.nextYear, .previousYear {ntcursor:pointer;cursor:hand;n}nn.incrementControl {ntcursor:pointer;cursor:hand;ntwidth:1em;n}nn.dojoMonthlyCalendarEvent {ntfont-size:0.7em;ntoverflow: hidden;ntfont-color: grey;ntwhite-space: nowrap;nttext-align: left;n}n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/MonthlyCalendar.css"), initializer:function () {
- this.iCalendars = [];
- }, addCalendar:function (cal) {
- dojo.debug("Adding Calendar");
- this.iCalendars.push(cal);
- dojo.debug("Starting init");
- this.initUI();
- dojo.debug("done init");
- }, createDayContents:function (node, mydate) {
- dojo.html.removeChildren(node);
- node.appendChild(document.createTextNode(mydate.getDate()));
- for (var x = 0; x < this.iCalendars.length; x++) {
- var evts = this.iCalendars[x].getEvents(mydate);
- if ((dojo.lang.isArray(evts)) && (evts.length > 0)) {
- for (var y = 0; y < evts.length; y++) {
- var el = document.createElement("div");
- dojo.html.addClass(el, "dojoMonthlyCalendarEvent");
- el.appendChild(document.createTextNode(evts[y].summary.value));
- el.width = dojo.html.getContentBox(node).width;
- node.appendChild(el);
- }
- }
- }
- }, initUI:function () {
- var dayLabels = dojo.date.getNames("days", this.dayWidth, "standAlone", this.lang);
- var dayLabelNodes = this.dayLabelsRow.getElementsByTagName("td");
- for (var i = 0; i < 7; i++) {
- dayLabelNodes.item(i).innerHTML = dayLabels[i];
- }
- this.selectedIsUsed = false;
- this.currentIsUsed = false;
- var currentClassName = "";
- var previousDate = new Date();
- var calendarNodes = this.calendarDatesContainerNode.getElementsByTagName("td");
- var currentCalendarNode;
- previousDate.setHours(8);
- var nextDate = new Date(this.firstSaturday.year, this.firstSaturday.month, this.firstSaturday.date, 8);
- var lastDay = new Date(this.firstSaturday.year, this.firstSaturday.month, this.firstSaturday.date + 42, 8);
- if (this.iCalendars.length > 0) {
- for (var x = 0; x < this.iCalendars.length; x++) {
- this.iCalendars[x].preComputeRecurringEvents(lastDay);
- }
- }
- if (this.firstSaturday.date < 7) {
- var dayInWeek = 6;
- for (var i = this.firstSaturday.date; i > 0; i--) {
- currentCalendarNode = calendarNodes.item(dayInWeek);
- this.createDayContents(currentCalendarNode, nextDate);
- dojo.html.setClass(currentCalendarNode, this.getDateClassName(nextDate, "current"));
- dayInWeek--;
- previousDate = nextDate;
- nextDate = this.incrementDate(nextDate, false);
- }
- for (var i = dayInWeek; i > -1; i--) {
- currentCalendarNode = calendarNodes.item(i);
- this.createDayContents(currentCalendarNode, nextDate);
- dojo.html.setClass(currentCalendarNode, this.getDateClassName(nextDate, "previous"));
- previousDate = nextDate;
- nextDate = this.incrementDate(nextDate, false);
- }
- } else {
- nextDate.setDate(1);
- for (var i = 0; i < 7; i++) {
- currentCalendarNode = calendarNodes.item(i);
- this.createDayContents(currentCalendarNode, nextDate);
- dojo.html.setClass(currentCalendarNode, this.getDateClassName(nextDate, "current"));
- previousDate = nextDate;
- nextDate = this.incrementDate(nextDate, true);
- }
- }
- previousDate.setDate(this.firstSaturday.date);
- previousDate.setMonth(this.firstSaturday.month);
- previousDate.setFullYear(this.firstSaturday.year);
- nextDate = this.incrementDate(previousDate, true);
- var count = 7;
- currentCalendarNode = calendarNodes.item(count);
- while ((nextDate.getMonth() == previousDate.getMonth()) && (count < 42)) {
- this.createDayContents(currentCalendarNode, nextDate);
- dojo.html.setClass(currentCalendarNode, this.getDateClassName(nextDate, "current"));
- currentCalendarNode = calendarNodes.item(++count);
- previousDate = nextDate;
- nextDate = this.incrementDate(nextDate, true);
- }
- while (count < 42) {
- this.createDayContents(currentCalendarNode, nextDate);
- dojo.html.setClass(currentCalendarNode, this.getDateClassName(nextDate, "next"));
- currentCalendarNode = calendarNodes.item(++count);
- previousDate = nextDate;
- nextDate = this.incrementDate(nextDate, true);
- }
- this.setMonthLabel(this.firstSaturday.month);
- this.setYearLabels(this.firstSaturday.year);
- }});
- dojo.widget.MonthlyCalendar.util = new function () {
- this.toRfcDate = function (jsDate) {
- if (!jsDate) {
- jsDate = this.today;
- }
- var year = jsDate.getFullYear();
- var month = jsDate.getMonth() + 1;
- if (month < 10) {
- month = "0" + month.toString();
- }
- var date = jsDate.getDate();
- if (date < 10) {
- date = "0" + date.toString();
- }
- return year + "-" + month + "-" + date + "T00:00:00+00:00";
- };
- this.fromRfcDate = function (rfcDate) {
- var tempDate = rfcDate.split("-");
- if (tempDate.length < 3) {
- return new Date();
- }
- return new Date(parseInt(tempDate[0]), (parseInt(tempDate[1], 10) - 1), parseInt(tempDate[2].substr(0, 2), 10));
- };
- this.initFirstSaturday = function (month, year) {
- if (!month) {
- month = this.date.getMonth();
- }
- if (!year) {
- year = this.date.getFullYear();
- }
- var firstOfMonth = new Date(year, month, 1);
- return {year:year, month:month, date:7 - firstOfMonth.getDay()};
- };
- };