зеркало из https://github.com/mozilla/gecko-dev.git
Checked in patches for bug 220075
This commit is contained in:
Родитель
6f17eaff70
Коммит
2a5dc4d585
|
@ -106,6 +106,8 @@ var kDaysInWeek = 7;
|
|||
|
||||
const kMAX_NUMBER_OF_DOTS_IN_MONTH_VIEW = "8"; //the maximum number of dots that fit in the month view
|
||||
|
||||
const k_NO_DATE = -62171262000000; // ms value for -0001/11/30 00:00:00, libical value for no date.
|
||||
// (Note: javascript Date interprets kNODATE ms as -0001/11/15 00:00:00.)
|
||||
|
||||
var prefService = Components.classes["@mozilla.org/preferences-service;1"]
|
||||
.getService(Components.interfaces.nsIPrefService);
|
||||
|
@ -650,24 +652,9 @@ function newToDoCommand()
|
|||
{
|
||||
var calendarToDo = createToDo();
|
||||
|
||||
var startDate = gCalendarWindow.currentView.getNewEventDate();
|
||||
|
||||
var Minutes = Math.ceil( startDate.getMinutes() / 5 ) * 5 ;
|
||||
|
||||
startDate = new Date( startDate.getFullYear(),
|
||||
startDate.getMonth(),
|
||||
startDate.getDate(),
|
||||
startDate.getHours(),
|
||||
Minutes,
|
||||
0);
|
||||
|
||||
calendarToDo.start.setTime( startDate );
|
||||
|
||||
var MinutesToAddOn = getIntPref(gCalendarWindow.calendarPreferences.calendarPref, "event.defaultlength", gCalendarBundle.getString("defaultEventLength" ) );
|
||||
|
||||
var dueDateTime = startDate.getTime() + ( 1000 * 60 * MinutesToAddOn );
|
||||
|
||||
calendarToDo.due.setTime( dueDateTime );
|
||||
// created todo has no start or due date unless user wants one
|
||||
calendarToDo.start.setTime( k_NO_DATE );
|
||||
calendarToDo.due.setTime( k_NO_DATE );
|
||||
|
||||
var args = new Object();
|
||||
args.mode = "new";
|
||||
|
|
|
@ -95,6 +95,8 @@ const kRepeatDay_4 = 1<<4;//Thursday
|
|||
const kRepeatDay_5 = 1<<5;//Friday
|
||||
const kRepeatDay_6 = 1<<6;//Saturday
|
||||
|
||||
const kNODATE = -62171262000000; // ms value for -0001/11/30 00:00:00, libical value for no date.
|
||||
// (Note: javascript Date interprets kNODATE ms as -0001/11/15 00:00:00.)
|
||||
|
||||
var gStartDate = new Date( );
|
||||
var gDueDate = new Date( );
|
||||
|
@ -132,12 +134,22 @@ function loadCalendarEventDialog()
|
|||
document.getElementById("calendar-new-eventwindow").setAttribute("title", titleString);
|
||||
|
||||
// fill in fields from the event
|
||||
gStartDate.setTime( gEvent.start.getTime() );
|
||||
document.getElementById( "start-datetime" ).value = gStartDate;
|
||||
|
||||
gDueDate.setTime(gEvent.due.getTime() );
|
||||
document.getElementById( "due-datetime" ).value = gDueDate;
|
||||
|
||||
var hasStart = (gEvent.start.getTime() != kNODATE);
|
||||
if (hasStart)
|
||||
gStartDate.setTime( gEvent.start.getTime() );
|
||||
var startPicker = document.getElementById( "start-datetime" );
|
||||
startPicker.value = gStartDate;
|
||||
startPicker.disabled = !hasStart;
|
||||
document.getElementById("start-checkbox").checked = hasStart;
|
||||
|
||||
var hasDue = (gEvent.due.getTime() != kNODATE)
|
||||
if (hasDue)
|
||||
gDueDate.setTime(gEvent.due.getTime() );
|
||||
var duePicker = document.getElementById( "due-datetime" );
|
||||
duePicker.value = gDueDate;
|
||||
duePicker.disabled = !hasDue;
|
||||
document.getElementById("due-checkbox").checked = hasDue;
|
||||
|
||||
gDuration = gDueDate.getTime() - gStartDate.getTime(); //in ms
|
||||
|
||||
if ( gEvent.recurForever )
|
||||
|
@ -341,8 +353,16 @@ function onOKCommand()
|
|||
gEvent.title = getFieldValue( "title-field" );
|
||||
gEvent.description = getFieldValue( "description-field" );
|
||||
gEvent.location = getFieldValue( "location-field" );
|
||||
gEvent.start.setTime( gStartDate.getTime() );
|
||||
gEvent.due.setTime( gDueDate.getTime() );
|
||||
|
||||
if ( getFieldValue("start-checkbox", "checked") )
|
||||
gEvent.start.setTime( gStartDate.getTime() );
|
||||
else
|
||||
gEvent.start.setTime( kNODATE );;
|
||||
|
||||
if ( getFieldValue("due-checkbox", "checked") )
|
||||
gEvent.due.setTime( gDueDate.getTime() );
|
||||
else
|
||||
gEvent.due.setTime( kNODATE );
|
||||
|
||||
gEvent.url = getFieldValue( "uri-field" );
|
||||
|
||||
|
@ -553,32 +573,48 @@ function checkDueDate()
|
|||
return 1;
|
||||
}
|
||||
|
||||
/** Check that start datetime <= due datetime if both exist.
|
||||
Provide separate error message for startDate > dueDate or
|
||||
startDate == dueDate && startTime > dueTime. **/
|
||||
function checkSetTimeDate()
|
||||
{
|
||||
var CheckDueDate = checkDueDate();
|
||||
var CheckDueTime = checkDueTime();
|
||||
var startCheckBox = document.getElementById( "start-checkbox" );
|
||||
var dueCheckBox = document.getElementById( "due-checkbox" );
|
||||
if (startCheckBox.checked && dueCheckBox.checked)
|
||||
{
|
||||
var CheckDueDate = checkDueDate();
|
||||
|
||||
if ( CheckDueDate < 0 )
|
||||
{
|
||||
if ( CheckDueDate < 0 )
|
||||
{
|
||||
// due before start
|
||||
setDateError(true);
|
||||
setTimeError(false);
|
||||
return false;
|
||||
}
|
||||
else if ( CheckDueDate == 0 )
|
||||
{
|
||||
}
|
||||
else if ( CheckDueDate == 0 )
|
||||
{
|
||||
setDateError(false);
|
||||
// start & due same
|
||||
var CheckDueTime = checkDueTime();
|
||||
setTimeError(CheckDueTime);
|
||||
return !CheckDueTime;
|
||||
}
|
||||
else
|
||||
{
|
||||
setDateError(false);
|
||||
setTimeError(false);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
setDateError(false);
|
||||
setTimeError(false);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the start or due datetime checkbox is clicked.
|
||||
* Enables/disables corresponding datetime picker.
|
||||
*/
|
||||
function onDateTimeCheckbox(checkbox, pickerId)
|
||||
{
|
||||
var picker = document.getElementById( pickerId );
|
||||
picker.disabled = !checkbox.checked;
|
||||
|
||||
updateOKButton();
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -153,8 +153,13 @@
|
|||
<hbox class="field-label-box-class" pack="end">
|
||||
<label value="&newevent.startdate.label;"/>
|
||||
</hbox>
|
||||
<datetimepicker id="start-datetime" value=""
|
||||
onchange="onDateTimePick( this );"/>
|
||||
<hbox>
|
||||
<checkbox id="start-checkbox"
|
||||
oncommand="onDateTimeCheckbox(this, 'start-datetime')"
|
||||
persist="checked"/>
|
||||
<datetimepicker id="start-datetime" value=""
|
||||
onchange="onDateTimePick( this );"/>
|
||||
</hbox>
|
||||
</row>
|
||||
|
||||
<!-- Due Date -->
|
||||
|
@ -162,11 +167,16 @@
|
|||
<hbox class="field-label-box-class" pack="end">
|
||||
<label value="&newtodo.duedate.label;"/>
|
||||
</hbox>
|
||||
<datetimepicker id="due-datetime" value=""
|
||||
onchange="onDateTimePick( this );"/>
|
||||
<hbox>
|
||||
<checkbox id="due-checkbox"
|
||||
oncommand="onDateTimeCheckbox(this, 'due-datetime')"
|
||||
persist="checked"/>
|
||||
<datetimepicker id="due-datetime" value=""
|
||||
onchange="onDateTimePick( this );"/>
|
||||
</hbox>
|
||||
</row>
|
||||
|
||||
<!-- End Time Warning -->
|
||||
<!-- Due Time Warning -->
|
||||
<row align="center">
|
||||
<spacer />
|
||||
<label id="due-time-warning"
|
||||
|
@ -175,7 +185,7 @@
|
|||
collapsed="true"/>
|
||||
</row>
|
||||
|
||||
<!-- End Date Warning -->
|
||||
<!-- Due Date Warning -->
|
||||
<row align="center">
|
||||
<spacer />
|
||||
<label id="due-date-warning"
|
||||
|
|
|
@ -52,6 +52,10 @@ const ToDoUnifinderTreeName = "unifinder-todo-tree";
|
|||
|
||||
var gTaskArray = new Array();
|
||||
|
||||
const kNODATE = -62171262000000; // ms value for -0001/11/30 00:00:00, libical value for no date.
|
||||
// (Note: javascript Date interprets kNODATE ms as -0001/11/15 00:00:00.)
|
||||
|
||||
|
||||
/**
|
||||
* Observer for the calendar event data source. This keeps the unifinder
|
||||
* display up to date when the calendar event data is changed
|
||||
|
@ -242,6 +246,18 @@ function checkboxClick( ThisToDo, completed )
|
|||
gICalLib.modifyTodo( ThisToDo );
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to display todo datetimes in the unifinder
|
||||
*/
|
||||
|
||||
function formatUnifinderToDoDateTime( datetime )
|
||||
{
|
||||
// datetime is from todo object, it is not a javascript date
|
||||
if (datetime != null && datetime.getTime() != kNODATE)
|
||||
return gCalendarWindow.dateFormater.formatDateTime( new Date(datetime.getTime()), true );
|
||||
else
|
||||
return "";
|
||||
}
|
||||
|
||||
/*
|
||||
This function return the progress state of a ToDo task :
|
||||
|
@ -249,40 +265,32 @@ completed, overdue, duetoday, inprogress, future
|
|||
*/
|
||||
function ToDoProgressAtom( calendarToDo )
|
||||
{
|
||||
var now = new Date();
|
||||
var now = new Date();
|
||||
|
||||
var thisMorning = new Date( now.getFullYear(), now.getMonth(), now.getDate(), 0, 0, 0 );
|
||||
var completed = calendarToDo.completed.getTime();
|
||||
|
||||
var completed = calendarToDo.completed.getTime();
|
||||
if( completed > 0 ) {
|
||||
return("completed");
|
||||
}
|
||||
|
||||
if( completed > 0 )
|
||||
{
|
||||
return("completed");
|
||||
}
|
||||
var startDate = new Date( calendarToDo.start.getTime() );
|
||||
var dueDate = new Date( calendarToDo.due.getTime() );
|
||||
|
||||
var startDate = new Date( calendarToDo.start.getTime() );
|
||||
var dueDate = new Date( calendarToDo.due.getTime() );
|
||||
var tonightMidnight = new Date( now.getFullYear(), now.getMonth(), now.getDate(), 23, 59, 00 );
|
||||
|
||||
if( thisMorning.getTime() > dueDate.getTime() )
|
||||
{
|
||||
return("overdue");
|
||||
} else
|
||||
if ( dueDate.getFullYear() == now.getFullYear() &&
|
||||
dueDate.getMonth() == now.getMonth() &&
|
||||
dueDate.getDate() == now.getDate() )
|
||||
{
|
||||
return("duetoday");
|
||||
} else
|
||||
if( tonightMidnight.getTime() < startDate.getTime() )
|
||||
{
|
||||
return("future");
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
return("inprogress");
|
||||
}
|
||||
if (dueDate.getTime() != kNODATE) {
|
||||
if (dueDate.getTime() < now.getTime()) {
|
||||
return "overdue";
|
||||
} else if (dueDate.getFullYear() == now.getFullYear() &&
|
||||
dueDate.getMonth() == now.getMonth() &&
|
||||
dueDate.getDate() == now.getDate()) {
|
||||
return "duetoday";
|
||||
}
|
||||
}
|
||||
if (startDate.getTime() != kNODATE) {
|
||||
if (startDate.getTime() < now.getTime()) {
|
||||
return "inprogress";
|
||||
}
|
||||
}
|
||||
return "future";
|
||||
}
|
||||
|
||||
var toDoTreeView =
|
||||
|
@ -404,18 +412,14 @@ var toDoTreeView =
|
|||
return( "" );
|
||||
|
||||
case "unifinder-todo-tree-col-title":
|
||||
var titleText;
|
||||
if( calendarToDo.title == "" )
|
||||
titleText = gCalendarBundle.getString( "eventUntitled" );
|
||||
else
|
||||
titleText = calendarToDo.title;
|
||||
return( titleText );
|
||||
// return title, or "Untitled" if empty/null
|
||||
return calendarToDo.title || gCalendarBundle.getString( "eventUntitled" );
|
||||
case "unifinder-todo-tree-col-startdate":
|
||||
return( formatUnifinderToDoDateTime( new Date( calendarToDo.start.getTime() ) ) );
|
||||
return( formatUnifinderToDoDateTime( calendarToDo.start ) );
|
||||
case "unifinder-todo-tree-col-duedate":
|
||||
return( formatUnifinderToDoDateTime( new Date( calendarToDo.due.getTime() ) ) );
|
||||
return( formatUnifinderToDoDateTime( calendarToDo.due ) );
|
||||
case "unifinder-todo-tree-col-completeddate":
|
||||
return( formatUnifinderToDoDateTime( new Date( calendarToDo.completed.getTime() ) ) );
|
||||
return( formatUnifinderToDoDateTime( calendarToDo.completed ) );
|
||||
case "unifinder-todo-tree-col-percentcomplete":
|
||||
return( calendarToDo.percent+"%" );
|
||||
case "unifinder-todo-tree-col-categories":
|
||||
|
@ -493,7 +497,7 @@ function dateToMilliseconds(date) {
|
|||
if (date == null)
|
||||
return treeView.sortStartedTime;
|
||||
var ms = date.getTime(); // note: date is not a javascript date.
|
||||
if (ms == -62171262000000) // ms value for (0000/00/00 00:00:00)
|
||||
if (ms == kNODATE)
|
||||
return treeView.sortStartedTime;
|
||||
return ms;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче