Checked in patches for bug 218068

This commit is contained in:
mostafah%oeone.com 2004-07-01 18:53:23 +00:00
Родитель f06ad4fae8
Коммит 48c00a85c0
7 изменённых файлов: 242 добавлений и 511 удалений

Просмотреть файл

@ -599,6 +599,7 @@ CalendarWindow.prototype.onMouseUpCalendarViewSplitter = function calWinOnMouseU
function CalendarView( calendarWindow )
{
this.calendarWindow = calendarWindow;
this.localeDefaultsStringBundle = srGetStrBundle("chrome://calendar/locale/calendar.properties");
}
/** A way for subclasses to invoke the super constructor */
@ -805,7 +806,7 @@ CalendarView.prototype.setDrawProperties = function calView_setDrawProperties( d
}
//update vars for next loop
if( dayEventStartList[eventStartListIndex] == null )
if( !(eventStartListIndex in dayEventStartList) || dayEventStartList[eventStartListIndex] == null )
done = true;
else
nextEventIsStarting = ( dayEventStartList[eventStartListIndex].displayDate < dayEventEndList[eventEndListIndex].displayEndDate );
@ -968,3 +969,32 @@ CalendarView.prototype.removeAttributeFromElements =
liveList.item(i).removeAttribute(attributeName);
}
}
/** PROTECTED
Return the preferred start day of the week as an integer.
0: Sun, 1: Mon, 2: Tue, 3: Wed, 4: Thu, 5: Fri, 6: Sat
Based on current preference setting or locale default.
**/
CalendarView.prototype.preferredWeekStart = function() {
var defaultWeekStart = this.localeDefaultsStringBundle.GetStringFromName("defaultWeekStart" );
return getIntPref(this.calendarWindow.calendarPreferences.calendarPref, "week.start", defaultWeekStart );
}
/** PROTECTED
Return an array of booleans for each day of week: true means isDayOff.
Indexed using integers for days of the week.
0: Sun, 1: Mon, 2: Tue, 3: Wed, 4: Thu, 5: Fri, 6: Sat
Constructed based on current preference settings or locale default.
**/
CalendarView.prototype.preferredDaysOff = function() {
var isDayOff = new Array();
var daysOffPropNames = ["SundaysOff","MondaysOff","TuesdaysOff","WednesdaysOff","ThursdaysOff","FridaysOff","SaturdaysOff"];
for (var i = 0; i < daysOffPropNames.length; i++) {
var isDefaultDayOff = ("true"==this.localeDefaultsStringBundle.GetStringFromName("defaultWeek"+ daysOffPropNames[i]));
var prefName = "week.d"+i+daysOffPropNames[i].toLowerCase();
isDayOff[i] = getBoolPref(this.calendarWindow.calendarPreferences.calendarPref, prefName, isDefaultDayOff);
}
return isDayOff;
}

Просмотреть файл

@ -242,14 +242,13 @@ MonthView.prototype.refreshEvents = function monthView_refreshEvents( )
var DisplayDate = new Date( );
var eventDayInView;
var dayBoxItem;
var calendarEventDisplay;
var calIndex;
var calNumber;
// add each calendarEvent
for( var eventIndex = 0; eventIndex < monthEventList.length; ++eventIndex )
{
calendarEventDisplay = monthEventList[ eventIndex ];
var calendarEventDisplay = monthEventList[ eventIndex ];
// get the day box for the calendarEvent's day
DisplayDate.setTime( calendarEventDisplay.displayDate );
@ -263,6 +262,7 @@ MonthView.prototype.refreshEvents = function monthView_refreshEvents( )
dayBoxItem.numEvents += 1;
var eventBox;
if( dayBoxItem.numEvents <= this.numberOfEventsToShow )
{
// Make a box item to hold the event
@ -303,7 +303,7 @@ MonthView.prototype.refreshEvents = function monthView_refreshEvents( )
{
eventBoxText.setAttribute( "value", calendarEventDisplay.event.title );
// Create an image
newImage = document.createElement("image");
var newImage = document.createElement("image");
newImage.setAttribute( "class", "all-day-event-class" );
eventBox.appendChild( newImage );
}
@ -329,6 +329,7 @@ MonthView.prototype.refreshEvents = function monthView_refreshEvents( )
else
{
//if there is not a box to hold the little dots for this day...
var dotBoxHolder;
if ( !document.getElementById( "dotboxholder"+eventDayInView ) )
{
//make one
@ -451,10 +452,9 @@ MonthView.prototype.refreshDisplay = function monthView_refreshDisplay( )
document.getElementById( "m0-month-title" ).setAttribute( "value" , titleMonthArray[0] + " " + newYear );
var categoriesStringBundle = srGetStrBundle("chrome://calendar/locale/calendar.properties");
var defaultWeekStart = categoriesStringBundle.GetStringFromName("defaultWeekStart" );
var Offset = getIntPref(this.calendarWindow.calendarPreferences.calendarPref, "week.start", defaultWeekStart );
var Offset = this.preferredWeekStart();
var isOnlyWorkDays = (gOnlyWorkdayChecked == "true");
var isDayOff = (isOnlyWorkDays? this.preferredDaysOff() : null);
var NewArrayOfDayNames = new Array();
@ -483,44 +483,77 @@ MonthView.prototype.refreshDisplay = function monthView_refreshDisplay( )
// figure out first and last days of the month, first and last date of view
var firstDate = new Date( newYear, newMonth, 1 );
var firstDayOfWeek = firstDate.getDay() - Offset;
if( firstDayOfWeek < 0 )
firstDayOfWeek+=7;
this.firstDayOfWeek = firstDayOfWeek;
var firstDateCol = (7 - Offset + firstDate.getDay()) % 7;
var lastDayOfMonth = DateUtils.getLastDayOfMonth( newYear, newMonth );
this.firstDateOfView = new Date( newYear, newMonth, 1 - firstDayOfWeek, 0, 0, 0 );
this.lastDateOfView = new Date( newYear, newMonth, 42 - firstDayOfWeek, 23, 59, 59 );
var lastDateCol = (firstDateCol + lastDayOfMonth - 1) % 7;
var Checked = gOnlyWorkdayChecked ;
this.firstDateOfView = new Date( newYear, newMonth, 1 - firstDateCol, 0, 0, 0 );
this.lastDateOfView = new Date( newYear, newMonth, 42 - firstDateCol, 23, 59, 59 );
for( i = - Offset; i <= 1 - Offset; i++ ){
//ni = i - Offset ;
var ni = (i >0)? i : i + 7;
if( Checked === "true" )
document.getElementById( "month-view-column-"+ni ).setAttribute( "collapsed", "true" );
// hide or unhide columns for days off
for(var day = 0; day < 7; day++) {
var dayCol = ((7 - Offset + day) % 7) + 1;
if( isOnlyWorkDays && isDayOff[day])
document.getElementById( "month-view-column-"+dayCol ).setAttribute( "collapsed", "true" );
else
document.getElementById( "month-view-column-"+ ni).removeAttribute( "collapsed");
document.getElementById( "month-view-column-"+dayCol ).removeAttribute( "collapsed" );
}
if( Checked === "true" && Offset <= 1 && firstDayOfWeek >= 6-Offset) {
{ // first week should not display if holds only off days and only work days displayed
var isFirstWeekDisplayed = true;
if (isOnlyWorkDays) {
isFirstWeekDisplayed = false;
for (var col = firstDateCol; col < 7; col++) {
if (!isDayOff[(Offset + col) % 7]) {
isFirstWeekDisplayed = true;
break;
}
}
}
if (!isFirstWeekDisplayed) {
document.getElementById( "month-week-1-row" ).setAttribute( "collapsed", "true" );
}
else
{
} else {
document.getElementById( "month-week-1-row" ).removeAttribute( "collapsed" );
}
if(this.dayNumberItemArray.length-firstDayOfWeek-lastDayOfMonth >= 7)
{
document.getElementById( "month-week-6-row" ).setAttribute( "collapsed", "true" );
}
else
{
{ // sixth week should not display if holds only off days and only work days displayed
var isSixthWeekDisplayed = (firstDateCol + lastDayOfMonth > 5 * 7);
if (isSixthWeekDisplayed && isOnlyWorkDays) {
isSixthWeekDisplayed = false;
for (var sixthWeekCol = 0; sixthWeekCol <= lastDateCol; sixthWeekCol++) {
if (!isDayOff[(Offset + sixthWeekCol) % 7]) {
isSixthWeekDisplayed = true;
break;
}
}
}
if(!isSixthWeekDisplayed) {
document.getElementById( "month-week-6-row" ).setAttribute( "collapsed", "true" );
} else {
document.getElementById( "month-week-6-row" ).removeAttribute( "collapsed" );
}
// fifth week should not display if holds only off days and only work days displayed
var isFifthWeekDisplayed = (firstDateCol + lastDayOfMonth > 4 * 7);
if (isFifthWeekDisplayed && !isSixthWeekDisplayed && isOnlyWorkDays) {
isFifthWeekDisplayed = false;
for (var fifthWeekCol = 0; fifthWeekCol <= lastDateCol; fifthWeekCol++) {
if (!isDayOff[(Offset + fifthWeekCol) % 7]) {
isFifthWeekDisplayed = true;
break;
}
}
}
if(!isFifthWeekDisplayed) {
document.getElementById( "month-week-5-row" ).setAttribute( "collapsed", "true" );
} else {
document.getElementById( "month-week-5-row" ).removeAttribute( "collapsed" );
}
}
// To Set Week Number
var weekNumberItem;
var weekNumber ;
@ -545,13 +578,13 @@ MonthView.prototype.refreshDisplay = function monthView_refreshDisplay( )
{
var dayNumberItem = this.dayNumberItemArray[ dayIndex ];
var dayBoxItem = this.dayBoxItemArray[ dayIndex ];
var thisDate = new Date( newYear, newMonth, 1-(firstDayOfWeek - dayIndex ) );
var thisDate = new Date( newYear, newMonth, 1-(firstDateCol - dayIndex ) );
dayBoxItem.date = thisDate;
dayNumberItem.setAttribute( "value" , thisDate.getDate() );
if( dayIndex < firstDayOfWeek || dayNumber > lastDayOfMonth )
if( dayIndex < firstDateCol || dayNumber > lastDayOfMonth )
{
// this day box is NOT in the month,
dayBoxItem.dayNumber = null;
@ -612,11 +645,12 @@ MonthView.prototype.hiliteSelectedDate = function monthView_hiliteSelectedDate(
this.clearSelectedBoxes();
// Set the background for selection
var IndexInView = this.indexOfDate(this.calendarWindow.getSelectedDate());
var ThisBox = this.dayBoxItemArray[ IndexInView ];
if( ThisBox )
ThisBox.setAttribute( "monthselected" , "true" );
var indexInView = this.indexOfDate(this.calendarWindow.getSelectedDate());
if (indexInView in this.dayBoxItemArray) {
var thisBox = this.dayBoxItemArray[ indexInView ];
if( thisBox )
thisBox.setAttribute( "monthselected" , "true" );
}
}

Просмотреть файл

@ -1,374 +0,0 @@
<?xml version="1.0"?>
<!-- ***** BEGIN LICENSE BLOCK *****
- Version: MPL 1.1/GPL 2.0/LGPL 2.1
-
- The contents of this file are subject to the Mozilla Public License Version
- 1.1 (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
- http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS IS" basis,
- WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- for the specific language governing rights and limitations under the
- License.
-
- The Original Code is OEone Calendar Code, released October 31st, 2001.
-
- The Initial Developer of the Original Code is
- OEone Corporation.
- Portions created by the Initial Developer are Copyright (C) 2001
- the Initial Developer. All Rights Reserved.
-
- Contributor(s): Garth Smedley <garths@oeone.com>
- Mike Potter <mikep@oeone.com>
- Karl Guertin <grayrest@grayrest.com>
- Colin Phillips <colinp@oeone.com>
-
- Alternatively, the contents of this file may be used under the terms of
- either the GNU General Public License Version 2 or later (the "GPL"), or
- the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- in which case the provisions of the GPL or the LGPL are applicable instead
- of those above. If you wish to allow use of your version of this file only
- under the terms of either the GPL or the LGPL, and not to allow others to
- use your version of this file under the terms of the MPL, indicate your
- decision by deleting the provisions above and replace them with the notice
- and other provisions required by the LGPL or the GPL. If you do not delete
- the provisions above, a recipient may use your version of this file under
- the terms of any one of the MPL, the GPL or the LGPL.
-
- ***** END LICENSE BLOCK ***** -->
<!-- DTD File with all strings specific to the calendar -->
<!DOCTYPE overlay
[
<!ENTITY % dtd1 SYSTEM "chrome://calendar/locale/global.dtd" > %dtd1;
<!ENTITY % dtd2 SYSTEM "chrome://calendar/locale/calendar.dtd" > %dtd2;
]>
<!-- The Window -->
<overlay
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
>
<script type="application/x-javascript" src="chrome://calendar/content/monthView.js"/>
<script type="application/x-javascript">
var ArrayOfDayNames = new Array();
ArrayOfDayNames[0] = "&calendar.monthview.column.1.name;";
ArrayOfDayNames[1] = "&calendar.monthview.column.2.name;";
ArrayOfDayNames[2] = "&calendar.monthview.column.3.name;";
ArrayOfDayNames[3] = "&calendar.monthview.column.4.name;";
ArrayOfDayNames[4] = "&calendar.monthview.column.5.name;";
ArrayOfDayNames[5] = "&calendar.monthview.column.6.name;";
ArrayOfDayNames[6] = "&calendar.monthview.column.7.name;";
</script>
<vbox id="month-view-box" flex="1">
<!-- Month View: Controls-->
<hbox id="month-controls-box"> <!-- DO NOT SET FLEX, breaks resizing -->
<box class="month-previous-button-box">
<image id="month-previous-button" class="prevnextbuttons" onclick="gCalendarWindow.goToPrevious()"/>
</box>
<vbox id="month-title-container" flex="1">
<hbox id="month-title-box" flex="1">
<vbox class="month-title-label-box" flex="1">
<label id="m-2-month-title" onclick="gCalendarWindow.goToPrevious( 2 )"/>
</vbox>
<vbox class="month-title-label-box" flex="1">
<label id="m-1-month-title" onclick="gCalendarWindow.goToPrevious( 1 )"/>
</vbox>
<vbox class="month-title-label-box" flex="1">
<label id="m0-month-title" />
</vbox>
<vbox class="month-title-label-box" flex="1">
<label id="m1-month-title" onclick="gCalendarWindow.goToNext( 1 )"/>
</vbox>
<vbox class="month-title-label-box" flex="1">
<label id="m2-month-title" onclick="gCalendarWindow.goToNext( 2 )"/>
</vbox>
</hbox>
<!-- Eric modification : the year is now included in the 0-month-title by the JS file
<hbox id="year-title-box" flex="1">
<vbox class="month-title-label-box" flex="1">
<label id="m0-year-title"/>
</vbox>
</hbox>
-->
</vbox>
<box id="month-next-button-box">
<image id="month-next-button" class="prevnextbuttons" onclick="gCalendarWindow.goToNext()"/>
</box>
</hbox>
<vbox id="month-content-box">
<!-- Month View: Calendar Grid -->
<box id="month-grid-box" flex="1">
<grid id="month-grid" flex="1">
<columns>
<column id="month-view-leftcol" class="month-leftcol-class"/>
<column id="month-view-column-1" class="month-column-class" flex="1"/>
<column id="month-view-column-2" class="month-column-class" flex="1"/>
<column id="month-view-column-3" class="month-column-class" flex="1"/>
<column id="month-view-column-4" class="month-column-class" flex="1"/>
<column id="month-view-column-5" class="month-column-class" flex="1"/>
<column id="month-view-column-6" class="month-column-class" flex="1"/>
<column id="month-view-column-7" class="month-column-class" flex="1"/>
</columns>
<rows >
<row id="month-week-header-row" flex="1">
<vbox>
</vbox>
<vbox class="month-column-center-day-class">
<label class="month-view-header-days" id="month-view-header-day-1"/>
</vbox>
<vbox class="month-column-center-day-class">
<label class="month-view-header-days" id="month-view-header-day-2"/>
</vbox>
<vbox class="month-column-center-day-class">
<label class="month-view-header-days" id="month-view-header-day-3"/>
</vbox>
<vbox class="month-column-center-day-class">
<label class="month-view-header-days" id="month-view-header-day-4"/>
</vbox>
<vbox class="month-column-center-day-class">
<label class="month-view-header-days" id="month-view-header-day-5"/>
</vbox>
<vbox class="month-column-center-day-class">
<label class="month-view-header-days" id="month-view-header-day-6"/>
</vbox>
<vbox class="month-column-center-day-class">
<label class="month-view-header-days" id="month-view-header-day-7"/>
</vbox>
</row>
<row id="month-week-1-row" flex="1" >
<vbox class="month-leftcol-box-class" flex="1" id="month-week-1-left-box">
<label class="week-short-text" value="&week.short;"/>
<label class="month-leftcol-number-class" id="month-week-1-left"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-1-day-1-box">
<label class="month-day-number-class" id="month-week-1-day-1"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-1-day-2-box">
<label class="month-day-number-class" id="month-week-1-day-2"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-1-day-3-box">
<label class="month-day-number-class" id="month-week-1-day-3"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-1-day-4-box">
<label class="month-day-number-class" id="month-week-1-day-4"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-1-day-5-box">
<label class="month-day-number-class" id="month-week-1-day-5"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-1-day-6-box">
<label class="month-day-number-class" id="month-week-1-day-6"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-1-day-7-box">
<label class="month-day-number-class" id="month-week-1-day-7"/>
</vbox>
</row>
<row flex="1" >
<vbox class="month-leftcol-box-class" flex="1" id="month-week-2-left-box">
<label class="week-short-text" value="&week.short;" />
<label class="month-leftcol-number-class" id="month-week-2-left"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-2-day-1-box">
<label class="month-day-number-class" id="month-week-2-day-1"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-2-day-2-box">
<label class="month-day-number-class" id="month-week-2-day-2"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-2-day-3-box">
<label class="month-day-number-class" id="month-week-2-day-3"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-2-day-4-box">
<label class="month-day-number-class" id="month-week-2-day-4"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-2-day-5-box">
<label class="month-day-number-class" id="month-week-2-day-5"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-2-day-6-box">
<label class="month-day-number-class" id="month-week-2-day-6"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-2-day-7-box">
<label class="month-day-number-class" id="month-week-2-day-7"/>
</vbox>
</row>
<row flex="1" >
<vbox class="month-leftcol-box-class" flex="1" id="month-week-3-left-box">
<label class="week-short-text" value="&week.short;" />
<label class="month-leftcol-number-class" id="month-week-3-left"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-3-day-1-box">
<label class="month-day-number-class" id="month-week-3-day-1"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-3-day-2-box">
<label class="month-day-number-class" id="month-week-3-day-2"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-3-day-3-box">
<label class="month-day-number-class" id="month-week-3-day-3"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-3-day-4-box">
<label class="month-day-number-class" id="month-week-3-day-4"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-3-day-5-box">
<label class="month-day-number-class" id="month-week-3-day-5"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-3-day-6-box">
<label class="month-day-number-class" id="month-week-3-day-6"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-3-day-7-box">
<label class="month-day-number-class" id="month-week-3-day-7"/>
</vbox>
</row>
<row flex="1" >
<vbox class="month-leftcol-box-class" flex="1" id="month-week-4-left-box">
<label class="week-short-text" value="&week.short;" />
<label class="month-leftcol-number-class" id="month-week-4-left"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-4-day-1-box">
<label class="month-day-number-class" id="month-week-4-day-1"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-4-day-2-box">
<label class="month-day-number-class" id="month-week-4-day-2"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-4-day-3-box">
<label class="month-day-number-class" id="month-week-4-day-3"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-4-day-4-box">
<label class="month-day-number-class" id="month-week-4-day-4"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-4-day-5-box">
<label class="month-day-number-class" id="month-week-4-day-5"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-4-day-6-box">
<label class="month-day-number-class" id="month-week-4-day-6"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-4-day-7-box">
<label class="month-day-number-class" id="month-week-4-day-7"/>
</vbox>
</row>
<row flex="1" >
<vbox class="month-leftcol-box-class" flex="1" id="month-week-5-left-box">
<label class="week-short-text" value="&week.short;" />
<label class="month-leftcol-number-class" id="month-week-5-left"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-5-day-1-box">
<label class="month-day-number-class" id="month-week-5-day-1"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-5-day-2-box">
<label class="month-day-number-class" id="month-week-5-day-2"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-5-day-3-box">
<label class="month-day-number-class" id="month-week-5-day-3"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-5-day-4-box">
<label class="month-day-number-class" id="month-week-5-day-4"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-5-day-5-box">
<label class="month-day-number-class" id="month-week-5-day-5"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-5-day-6-box">
<label class="month-day-number-class" id="month-week-5-day-6"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-5-day-7-box">
<label class="month-day-number-class" id="month-week-5-day-7"/>
</vbox>
</row>
<row id="month-week-6-row" flex="1">
<vbox class="month-leftcol-box-class" flex="1" id="month-week-6-left-box">
<label class="week-short-text" value="&week.short;" />
<label class="month-leftcol-number-class" id="month-week-6-left"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-6-day-1-box">
<label class="month-day-number-class" id="month-week-6-day-1"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-6-day-2-box">
<label class="month-day-number-class" id="month-week-6-day-2"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-6-day-3-box">
<label class="month-day-number-class" id="month-week-6-day-3"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-6-day-4-box">
<label class="month-day-number-class" id="month-week-6-day-4"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-6-day-5-box">
<label class="month-day-number-class" id="month-week-6-day-5"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-6-day-6-box">
<label class="month-day-number-class" id="month-week-6-day-6"/>
</vbox>
<vbox class="month-day-box-class" flex="1" id="month-week-6-day-7-box">
<label class="month-day-number-class" id="month-week-6-day-7"/>
</vbox>
</row>
</rows>
</grid>
</box> <!-- End: Month grid box -->
</vbox> <!-- End: Month content box -->
</vbox>
</overlay>

Просмотреть файл

@ -136,7 +136,7 @@ function MultiweekView( calendarWindow )
for( i = 0; i < EventSelectionArray.length; i++ )
{
var EventBoxes;
if( EventSelectionArray[i].due )
if("due" in EventSelectionArray[i] && EventSelectionArray[i].due )
{
EventBoxes = document.getElementsByAttribute( "name", "multiweek-view-todo-box-"+EventSelectionArray[i].id );
}
@ -144,7 +144,7 @@ function MultiweekView( calendarWindow )
{
EventBoxes = document.getElementsByAttribute( "name", "multiweek-view-event-box-"+EventSelectionArray[i].id );
}
for ( j = 0; j < EventBoxes.length; j++ )
for (var j = 0; j < EventBoxes.length; j++ )
{
EventBoxes[j].setAttribute( "eventselected", "true" );
}
@ -170,8 +170,8 @@ function MultiweekView( calendarWindow )
this.lastDateOfView = new Date();
// Get the default number of WeeksInView
this.categoriesStringBundle = srGetStrBundle("chrome://calendar/locale/calendar.properties");
var defaultWeeksInView = this.categoriesStringBundle.GetStringFromName("defaultWeeksInView" );
this.localeDefaultsStringBundle = srGetStrBundle("chrome://calendar/locale/calendar.properties");
var defaultWeeksInView = this.localeDefaultsStringBundle.GetStringFromName("defaultWeeksInView" );
var WeeksInView = getIntPref(this.calendarWindow.calendarPreferences.calendarPref, "weeks.inview", defaultWeeksInView );
this.WeeksInView = ( WeeksInView >= 6 ) ? 6 : WeeksInView ;
@ -267,16 +267,15 @@ MultiweekView.prototype.refreshEvents = function multiweekView_refreshEvents( )
// Only displayed if there is enough room
if( dayBoxItem.numEvents <= this.numberOfEventsToShow)
{
eventBox = this.getToDoBox( calendarToDo,"due" );
dayBoxItem.appendChild( eventBox );
var todoBox = this.getToDoBox( calendarToDo,"due" );
dayBoxItem.appendChild( todoBox );
}
}
}
var calendarEventDisplay;
// add each calendarEvent
for( var eventIndex = 0; eventIndex < viewEventList.length; ++eventIndex )
{
calendarEventDisplay = viewEventList[ eventIndex ];
var calendarEventDisplay = viewEventList[ eventIndex ];
// get the day box for the calendarEvent's day
DisplayDate.setTime( calendarEventDisplay.displayDate );
@ -290,6 +289,7 @@ MultiweekView.prototype.refreshEvents = function multiweekView_refreshEvents( )
dayBoxItem.numEvents += 1;
var eventBox;
if( dayBoxItem.numEvents <= this.numberOfEventsToShow )
{
// Make a box item to hold the event
@ -332,7 +332,7 @@ MultiweekView.prototype.refreshEvents = function multiweekView_refreshEvents( )
{
eventBoxText.setAttribute( "value", calendarEventDisplay.event.title );
// Create an image
newImage = document.createElement("image");
var newImage = document.createElement("image");
newImage.setAttribute( "class", "all-day-event-class" );
eventBox.appendChild( newImage );
}
@ -356,6 +356,7 @@ MultiweekView.prototype.refreshEvents = function multiweekView_refreshEvents( )
else
{
//if there is not a box to hold the little dots for this day...
var dotBoxHolder;
if ( !document.getElementById( "multiweekdotbox"+eventDayInView ) )
{
//make one
@ -374,7 +375,7 @@ MultiweekView.prototype.refreshEvents = function multiweekView_refreshEvents( )
if( dotBoxHolder.childNodes.length < kMAX_NUMBER_OF_DOTS_IN_MONTH_VIEW )
{
eventDotBox = document.createElement( "box" );
var eventDotBox = document.createElement( "box" );
eventDotBox.setAttribute( "eventbox", "multiweekview" );
//show a dot representing an event.
@ -534,17 +535,17 @@ MultiweekView.prototype.refreshDisplay = function multiweekView_refreshDisplay(
var newYear = selectedDate.getFullYear();
document.getElementById( "multiweek-title" ).setAttribute( "value" , newYear );
var Offset = this.preferredWeekStart();
var isOnlyWorkDays = (gOnlyWorkdayChecked == "true");
var isDayOff = (isOnlyWorkDays? this.preferredDaysOff() : null);
var defaultWeekStart = this.categoriesStringBundle.GetStringFromName("defaultWeekStart" );
var Offset = getIntPref(this.calendarWindow.calendarPreferences.calendarPref, "week.start", defaultWeekStart );
var defaultPreviousWeeksInView = this.categoriesStringBundle.GetStringFromName("defaultPreviousWeeksInView" );
var defaultPreviousWeeksInView = this.localeDefaultsStringBundle.GetStringFromName("defaultPreviousWeeksInView" );
var PreviousWeeksInView = getIntPref(this.calendarWindow.calendarPreferences.calendarPref, "previousweeks.inview", defaultPreviousWeeksInView );
this.PreviousWeeksInView = ( PreviousWeeksInView >= this.WeeksInView - 1 ) ? this.WeeksInView - 1 : PreviousWeeksInView ;
var NewArrayOfDayNames = new Array();
for( i = 0; i < ArrayOfDayNames.length; i++ )
for(var i = 0; i < ArrayOfDayNames.length; i++ )
{
NewArrayOfDayNames[i] = ArrayOfDayNames[i];
}
@ -576,43 +577,41 @@ MultiweekView.prototype.refreshDisplay = function multiweekView_refreshDisplay(
// figure out first and last days of the month, first and last date of view
newDay = newDay - 7 * this.PreviousWeeksInView ;
var firstDate = new Date( newYear, newMonth, newDay );
var firstDayOfWeek = firstDate.getDay() - Offset;
if( firstDayOfWeek < 0 )
firstDayOfWeek+=7;
newDay = newDay - firstDayOfWeek ;
var lastDayOfMonth = DateUtils.getLastDayOfMonth( newYear, newMonth );
{ // set newDay to first day of newMonth in prev week (negative ok)
var prevWeekDay = newDay - 7 * this.PreviousWeeksInView;
var prevWeekDate = new Date( newYear, newMonth, prevWeekDay );
var prevWeekDateCol = (7 - Offset + prevWeekDate.getDay()) % 7;
newDay = prevWeekDay - prevWeekDateCol;
}
this.firstDateOfView = new Date( newYear, newMonth, newDay );
this.lastDateOfView = new Date( newYear, newMonth, newDay + this.WeeksInView*7 -1, 23, 59, 59 );
var firstDayOfMonth = new Date( newYear, newMonth, 1 );
var firstDayOfMonthIndex = this.indexOfDate( firstDayOfMonth );
var lastDayOfMonth = DateUtils.getLastDayOfMonth( newYear, newMonth );
var lastDayOfMonthDate = new Date( newYear, newMonth, lastDayOfMonth );
var lastDayOfMonthIndex = this.indexOfDate( lastDayOfMonthDate );
var Checked = gOnlyWorkdayChecked ;
for( var i = - Offset; i <= 1 - Offset; i++ ){
//ni = i - Offset ;
var ni = (i >0)? i : i + 7;
if( Checked === "true" )
document.getElementById( "multiweek-view-column-"+ ni).setAttribute( "collapsed", "true" );
// hide or unhide columns for days off
for(var day = 0; day < 7; day++) {
var col = ((7 - Offset + day) % 7) + 1;
if( isOnlyWorkDays && isDayOff[day])
document.getElementById( "multiweek-view-column-"+col ).setAttribute( "collapsed", "true" );
else
document.getElementById( "multiweek-view-column-"+ ni).removeAttribute( "collapsed");
document.getElementById( "multiweek-view-column-"+col ).removeAttribute( "collapsed" );
}
if( Checked === "true" ) {
if( isOnlyWorkDays ) {
//Is firstDayOfMonth and firstDayOfNextMonth during a weekend ?
//If so we change the firstDayOfMonthIndex to the first day displayed
var tempvar = 7 - firstDayOfMonth.getDay() ;
tempvar = ( tempvar >= 7) ? tempvar - 6 : tempvar + 1 ;
if( tempvar <= 2) firstDayOfMonthIndex += tempvar ;
tempvar = 7 - (lastDayOfMonthDate.getDay()+1) ;
tempvar = ( tempvar >= 7) ? tempvar - 6 : tempvar + 1 ;
if( tempvar <= 2) lastDayOfMonthIndex += tempvar ;
var firstOfMonthWeekDay = firstDayOfMonth.getDay();
for (var addDays = 0; addDays < 7; addDays++) {
var weekDay = (7 - Offset + firstOfMonthWeekDay + addDays) % 7;
if (!isDayOff[weekDay]) {
firstDayOfMonthIndex += addDays;
break;
}
}
}
@ -732,11 +731,12 @@ MultiweekView.prototype.hiliteSelectedDate = function multiweekView_hiliteSelect
this.clearSelectedEvent();
// Set the background for selection
var IndexInView = this.indexOfDate( this.calendarWindow.getSelectedDate() );
var ThisBox = this.dayBoxItemArray[ IndexInView ];
if( ThisBox )
ThisBox.setAttribute( "multiweekselected" , "true" );
var indexInView = this.indexOfDate( this.calendarWindow.getSelectedDate() );
if (indexInView in this.dayBoxItemArray) {
var thisBox = this.dayBoxItemArray[ indexInView ];
if( thisBox )
thisBox.setAttribute( "multiweekselected" , "true" );
}
}
@ -925,7 +925,7 @@ MultiweekView.prototype.selectBoxForEvent = function multiweekView_selectBoxForE
{
var EventBoxes = document.getElementsByAttribute( "name", "multiweek-view-event-box-"+calendarEvent.id );
for ( j = 0; j < EventBoxes.length; j++ )
for (var j = 0; j < EventBoxes.length; j++ )
{
EventBoxes[j].setAttribute( "eventselected", "true" );
}

Просмотреть файл

@ -59,6 +59,14 @@ calendarPrefObserver.prototype =
case "calendar.event.defaultendhour":
case "calendar.weeks.inview":
case "calendar.previousweeks.inview":
case "calendar.week.d0sundaysoff":
case "calendar.week.d1mondaysoff":
case "calendar.week.d2tuesdaysoff":
case "calendar.week.d2wednesdaysoff":
case "calendar.week.d2thursdaysoff":
case "calendar.week.d2fridaysoff":
case "calendar.week.d2saturdaysoff":
if (this.CalendarPreferences.calendarWindow.currentView != null)
this.CalendarPreferences.calendarWindow.currentView.refresh();
break;
@ -124,6 +132,13 @@ function calendarPreferences( CalendarWindow )
getIntPref( this.calendarPref, "event.defaultstarthour", calendarStringBundle.GetStringFromName("defaultStartHour" ) );
getIntPref( this.calendarPref, "event.defaultendhour", calendarStringBundle.GetStringFromName("defaultEndHour" ) );
getIntPref( this.calendarPref, "week.start", calendarStringBundle.GetStringFromName("defaultWeekStart" ) );
getBoolPref( this.calendarPref, "week.d0sundaysoff", "true"==calendarStringBundle.GetStringFromName("defaultWeekSundaysOff" ) );
getBoolPref( this.calendarPref, "week.d1mondaysoff", "true"==calendarStringBundle.GetStringFromName("defaultWeekMondaysOff" ) );
getBoolPref( this.calendarPref, "week.d2tuesdaysoff", "true"==calendarStringBundle.GetStringFromName("defaultWeekTuesdaysOff" ) );
getBoolPref( this.calendarPref, "week.d3wednesdaysoff", "true"==calendarStringBundle.GetStringFromName("defaultWeekWednesdaysOff" ) );
getBoolPref( this.calendarPref, "week.d4thursdaysoff", "true"==calendarStringBundle.GetStringFromName("defaultWeekThursdaysOff" ) );
getBoolPref( this.calendarPref, "week.d5fridaysoff", "true"==calendarStringBundle.GetStringFromName("defaultWeekFridaysOff" ) );
getBoolPref( this.calendarPref, "week.d6saturdaysoff", "true"==calendarStringBundle.GetStringFromName("defaultWeekSaturdaysOff" ) );
getIntPref( this.calendarPref, "weeks.inview", calendarStringBundle.GetStringFromName("defaultWeeksInView" ) );
getIntPref( this.calendarPref, "previousweeks.inview", calendarStringBundle.GetStringFromName("defaultPreviousWeeksInView" ) );
getIntPref( this.calendarPref, "alarms.onforevents", 0 );

Просмотреть файл

@ -44,6 +44,7 @@
<!DOCTYPE page
[
<!ENTITY % dtd1 SYSTEM "chrome://calendar/locale/prefs.dtd" > %dtd1;
<!ENTITY % dtd2 SYSTEM "chrome://calendar/locale/global.dtd" > %dtd2;
]>
<page xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
@ -61,9 +62,10 @@
*/
var _elementIDs = [
"nbofpreviousweeks", "nbofweeks", "weekstarts", "daystarthour", "dayendhour"
"nbofpreviousweeks", "nbofweeks", "weekstarts", "daystarthour", "dayendhour",
"sundaysoff","mondaysoff","tuesdaysoff","wednesdaysoff","thursdaysoff","fridaysoff","saturdaysoff"
];
</script>>
</script>
<groupbox>
<caption label="&pref.calendar.view.allview.caption;"/>
@ -80,7 +82,35 @@
<menuitem label="&pref.weekstarts.saturday;" value="6" selected="true"/>
</menupopup>
</menulist>
</hbox>
</hbox>
<vbox align="start">
<description>&pref.daysoff.label;</description>
<grid id="daysoffgrid">
<columns>
<column /> <column /> <column /> <column /> <column /> <column /> <column />
</columns>
<rows>
<row>
<caption label="&day.1.Ddd;" />
<caption label="&day.2.Ddd;" />
<caption label="&day.3.Ddd;" />
<caption label="&day.4.Ddd;" />
<caption label="&day.5.Ddd;" />
<caption label="&day.6.Ddd;" />
<caption label="&day.7.Ddd;" />
</row>
<row>
<checkbox id="sundaysoff" prefstring="calendar.week.d0sundaysoff" />
<checkbox id="mondaysoff" prefstring="calendar.week.d1mondaysoff" />
<checkbox id="tuesdaysoff" prefstring="calendar.week.d2tuesdaysoff"/>
<checkbox id="wednesdaysoff" prefstring="calendar.week.d3wednesdaysoff"/>
<checkbox id="thursdaysoff" prefstring="calendar.week.d4thursdaysoff"/>
<checkbox id="fridaysoff" prefstring="calendar.week.d5fridaysoff"/>
<checkbox id="saturdaysoff" prefstring="calendar.week.d6saturdaysoff"/>
</row>
</rows>
</grid>
</vbox>
</groupbox>
<groupbox>

Просмотреть файл

@ -111,6 +111,9 @@ function WeekView( calendarWindow )
*/
WeekView.prototype.refreshEvents = function( )
{
var isOnlyWorkDays = (gOnlyWorkdayChecked == "true");
var isDayOff = (isOnlyWorkDays? this.preferredDaysOff() : null);
this.kungFooDeathGripOnEventBoxes = new Array();
this.removeElementsByAttribute("eventbox","weekview");
@ -140,10 +143,9 @@ WeekView.prototype.refreshEvents = function( )
for ( dayIndex = 1; dayIndex <= 7; ++dayIndex ) {
// get the events for the day and loop through them
var dayToGet = new Date( gHeaderDateItemArray[dayIndex].getAttribute( "date" ) );
var dayToGetDay = dayToGet.getDay() ;
if( gOnlyWorkdayChecked === "true" && ( dayToGetDay == 0 || dayToGetDay == 6 )) {
continue ;
if (isOnlyWorkDays && isDayOff[dayToGetDay]) {
continue;
}
eventList[dayIndex] = gEventSource.getEventsForDay( dayToGet );
@ -193,9 +195,8 @@ WeekView.prototype.refreshEvents = function( )
for ( dayIndex = 1; dayIndex <= 7; ++dayIndex ) {
dayToGet = new Date( gHeaderDateItemArray[dayIndex].getAttribute( "date" ) );
dayToGetDay = dayToGet.getDay() ;
if( gOnlyWorkdayChecked == "true" && ( dayToGetDay == 0 || dayToGetDay == 6 )) {
/* its a weekend */
continue ;
if (isOnlyWorkDays && isDayOff[dayToGetDay]) {
continue;
}
// Calculate event draw properties (where events are drawn on view)
@ -243,7 +244,7 @@ WeekView.prototype.refreshEvents = function( )
//note the use of the WeekViewAllDayText Attribute.
//This is used to remove the text when the day is changed.
newHTMLNode = document.createElement( "label" );
var newHTMLNode = document.createElement( "label" );
newHTMLNode.setAttribute( "crop", "end" );
newHTMLNode.setAttribute( "flex", "1" );
newHTMLNode.setAttribute( "value", eventText );
@ -254,7 +255,7 @@ WeekView.prototype.refreshEvents = function( )
newHTMLNode.setAttribute( "ondblclick", "weekEventItemDoubleClick( this, event )" );
newHTMLNode.setAttribute( "tooltip", "eventTooltip" );
newImage = document.createElement("image");
var newImage = document.createElement("image");
newImage.setAttribute( "class", "all-day-event-class" );
newImage.setAttribute( "WeekViewAllDayText", "true" );
newImage.calendarEventDisplay = calendarEventDisplay;
@ -400,17 +401,24 @@ WeekView.prototype.switchTo = function( )
*/
WeekView.prototype.refreshDisplay = function( )
{
var categoriesStringBundle = srGetStrBundle("chrome://calendar/locale/calendar.properties");
var defaultWeekStart = categoriesStringBundle.GetStringFromName("defaultWeekStart" );
var Offset = this.preferredWeekStart();
var isOnlyWorkDays = (gOnlyWorkdayChecked == "true");
var isDayOff = (isOnlyWorkDays? this.preferredDaysOff() : null);
// Set the from-to title string, based on the selected date
var Offset = getIntPref(this.calendarWindow.calendarPreferences.calendarPref, "week.start", defaultWeekStart );
// Define a reference column (which will not be collapsed latter) to use to get its width.
// This is used to place the event Box
if (Offset == 0 || Offset == 6) {
gRefColumnIndex = 3 ;
gRefColumnIndex = Offset;
if (isOnlyWorkDays) {
for (var day = 0; day < 7; day++) {
if (!isDayOff[day]) {
gRefColumnIndex = day;
break;
}
}
isDayOff[gRefColumnIndex] = false; // in case all days off, make one visible.
}
// Set the from-to title string, based on the selected date
var selectedDate = this.calendarWindow.getSelectedDate();
var viewDay = selectedDate.getDay();
var viewDayOfMonth = selectedDate.getDate();
@ -443,10 +451,10 @@ WeekView.prototype.refreshDisplay = function( )
var firstDayMonthName = this.calendarWindow.dateFormater.getFormatedDateWithoutYear( firstDayOfWeek );
var lastDayMonthName = this.calendarWindow.dateFormater.getFormatedDateWithoutYear( lastDayOfWeek );
var newoffset = (Offset >= 5) ? 8 -Offset : 1 - Offset ;
var mondayDiff = (Offset >= 5) ? 8 - Offset : 1 - Offset ;
var mondayDate = new Date( firstDayOfWeek.getFullYear(),
firstDayOfWeek.getMonth(),
firstDayOfWeek.getDate()+newoffset );
firstDayOfWeek.getDate() + mondayDiff );
var weekNumber = DateUtils.getWeekNumber(mondayDate);
@ -458,7 +466,7 @@ WeekView.prototype.refreshDisplay = function( )
/* done setting the header information */
/* Fix the day names because users can choose which day the week starts on */
for( var dayIndex = 1; dayIndex < 8; ++dayIndex ) {
for( var dayIndex = 1; dayIndex <= 7; ++dayIndex ) {
var dateOfDay = firstDayOfWeek.getDate();
var headerDateItem = document.getElementById( "week-header-date-"+dayIndex );
@ -466,28 +474,16 @@ WeekView.prototype.refreshDisplay = function( )
headerDateItem.setAttribute( "date", firstDayOfWeek );
headerDateItem.numEvents = 0;
document.getElementById( "week-header-date-text-"+dayIndex ).setAttribute( "value", NewArrayOfDayNames[dayIndex-1] );
var col = dayIndex - 1;
var arrayOfBoxes = new Array();
document.getElementById( "week-header-date-text-"+dayIndex ).setAttribute( "value", NewArrayOfDayNames[col] );
if( firstDayOfWeek.getDay() == 0 || firstDayOfWeek.getDay() == 6 ) {
/* its a weekend */
arrayOfBoxes = document.getElementsByAttribute( "day", dayIndex );
if( gOnlyWorkdayChecked === "true" ) {
if( isOnlyWorkDays && isDayOff[(Offset + col) % 7]) {
document.getElementById( "weekview-column-day-"+dayIndex ).setAttribute( "collapsed", "true" );
} else {
document.getElementById( "weekview-column-day-"+dayIndex ).removeAttribute( "collapsed" );
}
for( i = 0; i < arrayOfBoxes.length; i++ ) {
arrayOfBoxes[i].setAttribute( "weekend", "true" );
}
} else {
/* it's not a weekend */
this.removeAttributeFromElements("weekend", dayIndex);
}
// advance to next day
firstDayOfWeek.setDate( dateOfDay + 1 );
}
@ -574,7 +570,7 @@ WeekView.prototype.hiliteSelectedDate = function multiweekView_hiliteSelectedDat
}
}
//dayIndex now contains the box numbers that we need.
for ( i = 0; i < 24; i++ ) {
for (var i = 0; i < 24; i++ ) {
document.getElementById( "week-tree-day-"+(dayIndex-1)+"-item-"+i ).setAttribute( "weekselected", "true" );
}
}
@ -609,7 +605,7 @@ WeekView.prototype.hiliteTodaysDate = function( )
}
}
//dayIndex now contains the box numbers that we need.
for ( i = 0; i < 24; i++ ) {
for (var i = 0; i < 24; i++ ) {
document.getElementById( "week-tree-day-"+(dayIndex-1)+"-item-"+i ).setAttribute( "today", "true" );
}
}