зеркало из https://github.com/mozilla/gecko-dev.git
bug 272732
more updates and fixes to eventDialog.js/xul to work with new interfaces and to combine eventDialog and toDoDialog r=pavlov@pavlov.net
This commit is contained in:
Родитель
9088124e56
Коммит
d89de942e5
|
@ -101,7 +101,8 @@ const kRepeatDay_6 = 1<<6;//Saturday
|
|||
var gStartDate = new Date( );
|
||||
// Note: gEndDate is *exclusive* end date, so duration = end - start.
|
||||
// For all-day(s) events (no times), displayed end date is one day earlier.
|
||||
var gEndDate = new Date( );
|
||||
var gEndDate = new Date( ); // for events
|
||||
var gDueDate = new Date( ); // for todos
|
||||
|
||||
/*-----------------------------------------------------------------
|
||||
* W I N D O W F U N C T I O N S
|
||||
|
@ -117,35 +118,22 @@ function loadCalendarEventDialog()
|
|||
var args = window.arguments[0];
|
||||
|
||||
gOnOkFunction = args.onOk;
|
||||
|
||||
// XXX I want to get rid of the use of gEvent
|
||||
gEvent = args.calendarEvent;
|
||||
|
||||
|
||||
event = args.calendarEvent;
|
||||
var title;
|
||||
|
||||
// Set up dialog as event or todo
|
||||
if (isEvent(event)) {
|
||||
document.getElementById("component-type").selectedIndex = 0;
|
||||
// mode is "new or "edit" - show proper header
|
||||
if ("new" == args.mode) {
|
||||
title = document.getElementById("data-event-title-new").getAttribute("value");
|
||||
} else {
|
||||
title = document.getElementById("data-event-title-edit").getAttribute("value");
|
||||
}
|
||||
processComponentType("event");
|
||||
} else if (isTodo(event)) {
|
||||
document.getElementById("component-type").selectedIndex = 1;
|
||||
if ("new" == args.mode)
|
||||
title = document.getElementById("data-todo-title-new").getAttribute("value");
|
||||
else
|
||||
title = document.getElementById("data-todo-title-edit").getAttribute("value");
|
||||
processComponentType("todo");
|
||||
} else {
|
||||
/* uh... */
|
||||
dump("got a bogus event\n");
|
||||
dump("loadCalendarEventDialog: ERROR! Got a bogus event! Not event or todo!\n");
|
||||
// close the dialog before we screw anything else up
|
||||
return false;
|
||||
}
|
||||
debug("title: "+title);
|
||||
|
||||
//document.getElementById("calendar-new-component-window").setAttribute("title", title);
|
||||
document.title = title;
|
||||
|
||||
debug("-----");
|
||||
debug("event: "+event);
|
||||
|
@ -154,21 +142,137 @@ function loadCalendarEventDialog()
|
|||
debug("-----");
|
||||
|
||||
// fill in fields from the event
|
||||
gStartDate = event.startDate.jsDate;
|
||||
document.getElementById("start-datetime").value = gStartDate;
|
||||
if (isEvent(event)) {
|
||||
gStartDate = event.startDate.jsDate;
|
||||
document.getElementById("start-datetime").value = gStartDate;
|
||||
|
||||
gEndDate = event.endDate.jsDate;
|
||||
var displayEndDate = new Date(gEndDate);
|
||||
/*
|
||||
if (event.isAllDay) {
|
||||
//displayEndDate == icalEndDate - 1, in the case of allday events
|
||||
displayEndDate.setDate(displayEndDate.getDate() - 1);
|
||||
// only events have end dates. todos have due dates
|
||||
gEndDate = event.endDate.jsDate;
|
||||
var displayEndDate = new Date(gEndDate);
|
||||
/*
|
||||
if (event.isAllDay) {
|
||||
//displayEndDate == icalEndDate - 1, in the case of allday events
|
||||
displayEndDate.setDate(displayEndDate.getDate() - 1);
|
||||
}
|
||||
*/
|
||||
document.getElementById("end-datetime").value = displayEndDate;
|
||||
|
||||
gDuration = gEndDate.getTime() - gStartDate.getTime(); //in ms
|
||||
|
||||
// event status fields
|
||||
switch(event.status) {
|
||||
case event.CAL_ITEM_STATUS_TENTATIVE:
|
||||
setFieldValue("event-status-field", "ICAL_STATUS_TENTATIVE");
|
||||
break;
|
||||
case event.CAL_ITEM_STATUS_CONFIRMED:
|
||||
setFieldValue("event-status-field", "ICAL_STATUS_CONFIRMED");
|
||||
break;
|
||||
case event.CAL_ITEM_STATUS_CANCELLED:
|
||||
setFieldValue("event-status-field", "ICAL_STATUS_CANCELLED");
|
||||
break;
|
||||
}
|
||||
} else if (isTodo(event)) {
|
||||
var hasStart = event.start && event.start.isSet;
|
||||
if (hasStart)
|
||||
gStartDate = event.startDate.jsDate;
|
||||
var startPicker = document.getElementById( "start-datetime" );
|
||||
startPicker.value = gStartDate;
|
||||
startPicker.disabled = !hasStart;
|
||||
document.getElementById("start-checkbox").checked = hasStart;
|
||||
|
||||
var hasDue = event.due && event.due.isSet;
|
||||
if (hasDue)
|
||||
gDueDate = event.dueDate.jsDate;
|
||||
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
|
||||
|
||||
// todo status fields
|
||||
switch(event.status) {
|
||||
case event.CAL_ITEM_STATUS_CANCELLED:
|
||||
setFieldValue( "cancelled-checkbox", true, "checked" );
|
||||
break;
|
||||
case event.CAL_TODO_STATUS_COMPLETED:
|
||||
setFieldValue( "completed-checkbox", true, "checked" );
|
||||
setFieldValue( "percent-complete-menulist", "100" );
|
||||
// XXX get the time for the completed event
|
||||
/*var completedDate = document.getElementById( "completed-date-picker" ).value;
|
||||
|
||||
gEvent.completed.year = completedDate.getYear() + 1900;
|
||||
gEvent.completed.month = completedDate.getMonth();
|
||||
gEvent.completed.day = completedDate.getDate();
|
||||
gEvent.status = gEvent.ICAL_STATUS_COMPLETED;*/
|
||||
break;
|
||||
|
||||
/* XXX Support these
|
||||
case event.CAL_TODO_STATUS_NEEDSACTION:
|
||||
// do something
|
||||
break;
|
||||
case event.CAL_TODO_STATUS_INPROCESS:
|
||||
// do something
|
||||
break;*/
|
||||
}
|
||||
}
|
||||
*/
|
||||
document.getElementById("end-datetime").value = displayEndDate;
|
||||
|
||||
gDuration = gEndDate.getTime() - gStartDate.getTime(); //in ms
|
||||
|
||||
|
||||
|
||||
// GENERAL -----------------------------------------------------------
|
||||
setFieldValue("title-field", event.title );
|
||||
setFieldValue("description-field", event.getProperty("description"));
|
||||
setFieldValue("location-field", event.getProperty("location"));
|
||||
setFieldValue("uri-field", event.getProperty("url"));
|
||||
// only enable "Go" button if there's a url
|
||||
processTextboxWithButton( "uri-field", "load-url-button" );
|
||||
|
||||
setFieldValue("all-day-event-checkbox", event.isAllDay, "checked");
|
||||
|
||||
|
||||
// PRIVACY -----------------------------------------------------------
|
||||
switch(event.privacy) {
|
||||
case "PUBLIC":
|
||||
case "PRIVATE":
|
||||
case "CONFIDENTIAL":
|
||||
setFieldValue("privacy-menulist", event.privacy);
|
||||
break;
|
||||
case "":
|
||||
setFieldValue("private-menulist", "PUBLIC");
|
||||
break;
|
||||
default: // bogus value
|
||||
dump("loadCalendarEventDialog: ERROR! Event has invalid " +
|
||||
"privacy string: " + event.privacy + "\n");
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
// ALARMS ------------------------------------------------------------
|
||||
// XXX Need to handle todo "before task starts/before task is due"
|
||||
if (!event.hasAlarm) {
|
||||
// If the event has no alarm
|
||||
setFieldValue("alarm-type", "none");
|
||||
} else {
|
||||
setFieldValue("alarm-length-field", event.getProperty("alarmLength"));
|
||||
setFieldValue("alarm-length-units", event.getProperty("alarmUnits"));
|
||||
setFieldValue("alarm-trigger-relation", event.getProperty("ICAL_RELATED_PARAMETER"));
|
||||
// If the event has an alarm email address, assume email alarm type
|
||||
var alarmEmailAddress = event.getProperty("alarmEmailAddress");
|
||||
if (alarmEmailAddress && alarmEmailAddress != "") {
|
||||
setFieldValue("alarm-type", "email");
|
||||
setFieldValue("alarm-email-field", alarmEmailAddress);
|
||||
} else {
|
||||
setFieldValue("alarm-type", "popup");
|
||||
/* XXX lilmatt: finish this by selection between popup and
|
||||
popupAndSound by checking pref "calendar.alarms.playsound" */
|
||||
}
|
||||
}
|
||||
// hide/show fields and widgets for alarm type
|
||||
processAlarmType();
|
||||
|
||||
|
||||
// RECURRENCE --------------------------------------------------------
|
||||
if (event.recurrenceInfo) {
|
||||
// we can only display at most one rule and one set of exceptions;
|
||||
// nothing else.
|
||||
|
@ -199,7 +303,7 @@ function loadCalendarEventDialog()
|
|||
if (theRule) {
|
||||
setFieldValue("repeat-checkbox", true, "checked");
|
||||
setFieldValue("repeat-length-field", theRule.interval);
|
||||
|
||||
|
||||
var typeMap = { "DAILY" : "days",
|
||||
"WEEKLY" : "weeks",
|
||||
"MONTHLY" : "months",
|
||||
|
@ -229,55 +333,10 @@ function loadCalendarEventDialog()
|
|||
}
|
||||
}
|
||||
|
||||
//file attachments;
|
||||
/* XXX this could will work when attachments are supported by calItemBase
|
||||
var count = event.attachments.length;
|
||||
for(var i = 0; i < count; i++) {
|
||||
var thisAttachment = event.attachments.queryElementAt(i, Components.interfaces.calIAttachment);
|
||||
addAttachment(thisAttachment);
|
||||
}
|
||||
*/
|
||||
|
||||
document.getElementById("exceptions-date-picker").value = gStartDate;
|
||||
|
||||
setFieldValue("title-field", event.title );
|
||||
setFieldValue("description-field", event.getProperty("description"));
|
||||
setFieldValue("location-field", event.getProperty("location"));
|
||||
setFieldValue("uri-field", event.getProperty("url"));
|
||||
|
||||
switch(event.status) {
|
||||
case event.CAL_ITEM_STATUS_TENTATIVE:
|
||||
setFieldValue("event-status-field", "ICAL_STATUS_TENTATIVE");
|
||||
break;
|
||||
case event.CAL_ITEM_STATUS_CONFIRMED:
|
||||
setFieldValue("event-status-field", "ICAL_STATUS_CONFIRMED");
|
||||
break;
|
||||
case event.CAL_ITEM_STATUS_CANCELLED:
|
||||
setFieldValue("event-status-field", "ICAL_STATUS_CANCELLED");
|
||||
break;
|
||||
}
|
||||
|
||||
setFieldValue("all-day-event-checkbox", event.isAllDay, "checked");
|
||||
setFieldValue("private-checkbox", event.isPrivate, "checked");
|
||||
|
||||
if (!event.hasAlarm) {
|
||||
// If the event has no alarm
|
||||
setFieldValue("alarm-type", "none");
|
||||
} else {
|
||||
setFieldValue("alarm-length-field", event.getProperty("alarmLength"));
|
||||
setFieldValue("alarm-length-units", event.getProperty("alarmUnits"));
|
||||
setFieldValue("alarm-trigger-relation", event.getProperty("ICAL_RELATED_PARAMETER"));
|
||||
// If the event has an alarm email address, assume email alarm type
|
||||
var alarmEmailAddress = event.getProperty("alarmEmailAddress");
|
||||
if (alarmEmailAddress && alarmEmailAddress != "") {
|
||||
setFieldValue("alarm-type", "email");
|
||||
setFieldValue("alarm-email-field", alarmEmailAddress);
|
||||
} else {
|
||||
setFieldValue("alarm-type", "popup");
|
||||
/* XXX lilmatt: finish this by selection between popup and
|
||||
popupAndSound by checking pref "calendar.alarms.playsound" */
|
||||
}
|
||||
}
|
||||
// INVITEES
|
||||
|
||||
var inviteEmailAddress = event.getProperty("inviteEmailAddress");
|
||||
if (inviteEmailAddress != undefined && inviteEmailAddress != "") {
|
||||
|
@ -286,6 +345,8 @@ function loadCalendarEventDialog()
|
|||
} else {
|
||||
setFieldValue("invite-checkbox", false, "checked");
|
||||
}
|
||||
processInviteCheckbox();
|
||||
|
||||
|
||||
// handle attendees
|
||||
attendeeList = event.getAttendees({});
|
||||
|
@ -294,6 +355,18 @@ function loadCalendarEventDialog()
|
|||
addAttendee(attendee.id);
|
||||
}
|
||||
|
||||
|
||||
// ATTACHMENTS -------------------------------------------------------
|
||||
/* XXX this could will work when attachments are supported by calItemBase
|
||||
var count = event.attachments.length;
|
||||
for(var i = 0; i < count; i++) {
|
||||
var thisAttachment = event.attachments.queryElementAt(i, Components.interfaces.calIAttachment);
|
||||
addAttachment(thisAttachment);
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/* Categories stuff */
|
||||
|
||||
// Load categories
|
||||
|
@ -349,7 +422,6 @@ function loadCalendarEventDialog()
|
|||
updateRepeatItemEnabled();
|
||||
updateStartEndItemEnabled();
|
||||
updateCompletedItemEnabled();
|
||||
processInviteCheckbox();
|
||||
|
||||
updateAddExceptionButton();
|
||||
|
||||
|
@ -362,14 +434,8 @@ function loadCalendarEventDialog()
|
|||
setFieldValue("advanced-repeat-dayofweek-last", (gEvent.recurWeekNumber == 5), "selected");
|
||||
*/
|
||||
|
||||
// hide/show fields and widgets for item type
|
||||
processComponentType();
|
||||
|
||||
// hide/show fields and widgets for alarm type
|
||||
processAlarmType();
|
||||
|
||||
// enable/disable subordinate buttons of textboxes
|
||||
processTextboxWithButton( "uri-field", "load-url-button" );
|
||||
/* these are listboxes, not textboxes
|
||||
processTextboxWithButton( "exception-dates-listbox", "delete-exception-button" );
|
||||
processTextboxWithButton( "invite-email-field", "invite-email-button" ); */
|
||||
|
@ -410,10 +476,20 @@ function onOKCommand()
|
|||
|
||||
// calIItemBase properties
|
||||
event.title = getFieldValue( "title-field" );
|
||||
if (getFieldValue("private-checkbox", "checked"))
|
||||
event.privacy = "PRIVATE";
|
||||
else
|
||||
event.privacy = "PUBLIC";
|
||||
|
||||
var privacyValue = getFieldValue( "privacy-menulist" );
|
||||
switch(privacyValue) {
|
||||
case "PUBLIC":
|
||||
case "PRIVATE":
|
||||
case "CONFIDENTIAL":
|
||||
event.privacy = privacyValue;
|
||||
break;
|
||||
default: // bogus value
|
||||
dump( "onOKCommand: ERROR! Event has invalid privacy-menulist value: " +
|
||||
privacyValue + "\n" );
|
||||
break;
|
||||
}
|
||||
|
||||
if (getFieldValue( "alarm-type" ) != "" && getFieldValue( "alarm-type" ) != "none") {
|
||||
event.hasAlarm == 1
|
||||
alarmLength = getFieldValue( "alarm-length-field" );
|
||||
|
@ -529,6 +605,47 @@ function onOKCommand()
|
|||
event.addAttendee(attendee);
|
||||
}
|
||||
|
||||
/* OLD ToDo crap we need to replace
|
||||
|
||||
gEvent.priority = getFieldValue( "priority-levels", "value" );
|
||||
var completed = getFieldValue( "completed-checkbox", "checked" );
|
||||
|
||||
var percentcomplete = getFieldValue( "percent-complete-menulist" );
|
||||
percentcomplete = parseInt( percentcomplete );
|
||||
|
||||
if(percentcomplete > 100)
|
||||
percentcomplete = 100;
|
||||
else if(percentcomplete < 0)
|
||||
percentcomplete = 0;
|
||||
|
||||
gEvent.percent = percentcomplete;
|
||||
|
||||
if( completed )
|
||||
{
|
||||
//get the time for the completed event
|
||||
var completedDate = document.getElementById( "completed-date-picker" ).value;
|
||||
|
||||
gEvent.completed.year = completedDate.getYear() + 1900;
|
||||
gEvent.completed.month = completedDate.getMonth();
|
||||
gEvent.completed.day = completedDate.getDate();
|
||||
gEvent.status = gEvent.ICAL_STATUS_COMPLETED;
|
||||
}
|
||||
else
|
||||
{
|
||||
gEvent.completed.clear();
|
||||
|
||||
var cancelled = getFieldValue( "cancelled-checkbox", "checked" );
|
||||
|
||||
if( cancelled )
|
||||
gEvent.status = gEvent.ICAL_STATUS_CANCELLED;
|
||||
else if (percentcomplete > 0)
|
||||
gEvent.status = gEvent.ICAL_STATUS_INPROCESS;
|
||||
else
|
||||
gEvent.status = gEvent.ICAL_STATUS_NEEDSACTION;
|
||||
|
||||
|
||||
*/
|
||||
|
||||
|
||||
var Server = getFieldValue( "server-field" );
|
||||
|
||||
|
@ -1461,35 +1578,20 @@ function formatTime( time )
|
|||
// XXX lilmatt's new crap for the new XUL
|
||||
|
||||
|
||||
// A textbox changed - see if its button needs to be enabled or disabled
|
||||
/*
|
||||
* A textbox changed - see if its button needs to be enabled or disabled
|
||||
*/
|
||||
|
||||
function processTextboxWithButton( textboxId, buttonId )
|
||||
{
|
||||
var textboxNotEmpty;
|
||||
if(document.getElementById( textboxId ).textLength >= 1 )
|
||||
textboxNotEmpty = true
|
||||
else
|
||||
textboxNotEmpty = false
|
||||
var buttonDisabled = document.getElementById( buttonId ).disabled;
|
||||
var textboxAndButton = (textboxNotEmpty + buttonDisabled);
|
||||
var theTextbox = document.getElementById( textboxId );
|
||||
var theButton = document.getElementById( buttonId );
|
||||
|
||||
debug("textboxNotEmpty: " + textboxNotEmpty);
|
||||
debug("buttonDisabled: " + buttonDisabled);
|
||||
debug("textboxAndButton: " + textboxAndButton);
|
||||
|
||||
// 0 = no text, button enabled (wrong - disable button)
|
||||
// 1 = no text, button disabled or text, button enabled (right) [most popular]
|
||||
// 2 = text, button disabled (wrong - enable button)
|
||||
|
||||
switch(textboxAndButton) {
|
||||
case 1:
|
||||
break;
|
||||
case 0:
|
||||
// Only change things if we have to
|
||||
if ( theTextbox.textLength == 0 && !theButton.disabled ) {
|
||||
disableElement( buttonId );
|
||||
break;
|
||||
case 2:
|
||||
} else if ( theTextbox.textLength > 0 && theButton.disabled ) {
|
||||
enableElement( buttonId );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1505,16 +1607,12 @@ function processAlarmType()
|
|||
hideElement("alarm-length-units");
|
||||
hideElement("alarm-box-email");
|
||||
break;
|
||||
//case "popupAndSound":
|
||||
case "popup":
|
||||
showElement("alarm-length-field");
|
||||
showElement("alarm-length-units");
|
||||
hideElement("alarm-box-email");
|
||||
break;
|
||||
case "popupAndSound":
|
||||
showElement("alarm-length-field");
|
||||
showElement("alarm-length-units");
|
||||
hideElement("alarm-box-email");
|
||||
break;
|
||||
case "email":
|
||||
showElement("alarm-length-field");
|
||||
showElement("alarm-length-units");
|
||||
|
@ -1528,96 +1626,106 @@ function processAlarmType()
|
|||
}
|
||||
|
||||
|
||||
function processComponentType()
|
||||
function processComponentType(componentType)
|
||||
{
|
||||
var title;
|
||||
var componentMenu = document.getElementById("component-type");
|
||||
if( componentMenu.selectedItem) {
|
||||
debug("processComponentType: " + componentMenu.selectedItem.value );
|
||||
|
||||
debug("processComponentType: " + componentType );
|
||||
|
||||
switch( componentType ) {
|
||||
case "event":
|
||||
// Set the menu properly if it isn't already
|
||||
if( componentMenu.selectedItem.value != "event")
|
||||
componentMenu.selectedItem.value = "event"
|
||||
|
||||
// Hide and show the appropriate fields and widgets
|
||||
changeMenuState("todo", "event");
|
||||
|
||||
// calling just enableElement _should_ work here, but it doesn't
|
||||
document.getElementById("start-datetime").setAttribute( "disabled", "false" );
|
||||
enableElement("start-datetime");
|
||||
enableElement("end-datetime");
|
||||
|
||||
// Set menubar title correctly
|
||||
changeTitleBar("event")
|
||||
|
||||
break;
|
||||
|
||||
case "todo":
|
||||
// Hide and show the appropriate fields and widgets
|
||||
changeMenuState("event", "todo");
|
||||
|
||||
onDateTimeCheckbox("start-checkbox", "start-datetime")
|
||||
onDateTimeCheckbox("due-checkbox", "due-datetime")
|
||||
updateCompletedItemEnabled()
|
||||
|
||||
// Set menubar title correctly
|
||||
changeTitleBar("todo")
|
||||
|
||||
break;
|
||||
|
||||
//case "journal":
|
||||
default:
|
||||
// We were passed an invalid value:
|
||||
dump("processComponentType: ERROR! Tried to select invalid component type: "+componentType+"\n");
|
||||
break;
|
||||
}
|
||||
// Make the window big enough for all the fields and widgets
|
||||
window.sizeToContent();
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Hides/shows/enables/disables fields and widgets using "hidden-controller"
|
||||
* and "disable-controller" in the .xul
|
||||
*/
|
||||
|
||||
function changeMenuState(hiddenController, showController, disableController, enableController)
|
||||
{
|
||||
var hiddenList = document.getElementsByAttribute( "hidden-controller", hiddenController );
|
||||
var showList = document.getElementsByAttribute( "hidden-controller", showController );
|
||||
var disableList = document.getElementsByAttribute( "disable-controller", disableController );
|
||||
var enableList = document.getElementsByAttribute( "disable-controller", enableController );
|
||||
|
||||
for( var i = 0; i < hiddenList.length; ++i ) {
|
||||
hideElement( hiddenList[i].id );
|
||||
}
|
||||
|
||||
for( i = 0; i < showList.length; ++i ) {
|
||||
showElement( showList[i].id );
|
||||
}
|
||||
|
||||
for( i = 0; i < disableList.length; ++i ) {
|
||||
disableElement( disableList[i].id );
|
||||
}
|
||||
|
||||
for( i = 0; i < enableList.length; ++i ) {
|
||||
enableElement( enableList[i].id );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Changes window title bar title ("New Event", "Edit Task", etc.)
|
||||
*/
|
||||
|
||||
function changeTitleBar(componentType)
|
||||
{
|
||||
// Sanity check input
|
||||
if ( componentType == "event" || componentType == "todo" ) {
|
||||
var args = window.arguments[0];
|
||||
switch( componentMenu.selectedItem.value ) {
|
||||
case "ICAL_COMPONENT_EVENT":
|
||||
// Hide and show the appropriate fields and widgets
|
||||
hideElement("todo-cancelled-label");
|
||||
hideElement("todo-cancelled-checkbox");
|
||||
hideElement("task-start-datetime-label");
|
||||
hideElement("start-checkbox");
|
||||
hideElement("due-checkbox");
|
||||
hideElement("due-datetime");
|
||||
hideElement("task-due-datetime-label");
|
||||
hideElement("task-completed-label");
|
||||
hideElement("completed-checkbox");
|
||||
hideElement("completed-date-picker");
|
||||
hideElement("percent-complete-menulist");
|
||||
hideElement("percent-complete-label");
|
||||
hideElement("task-priority-label");
|
||||
hideElement("priority-levels");
|
||||
showElement("start-datetime");
|
||||
showElement("end-datetime");
|
||||
showElement("event-start-datetime-label");
|
||||
showElement("event-end-datetime-label");
|
||||
showElement("event-status-label");
|
||||
showElement("event-status-field");
|
||||
showElement("all-day-event-checkbox");
|
||||
|
||||
// calling just enableElement _should_ work here, but it doesn't
|
||||
document.getElementById("start-datetime").setAttribute( "disabled", "false" );
|
||||
enableElement("start-datetime");
|
||||
enableElement("end-datetime");
|
||||
|
||||
// Set menubar title correctly - New vs. Edit
|
||||
if( "new" == args.mode )
|
||||
title = document.getElementById( "data-event-title-new" ).getAttribute("value");
|
||||
else
|
||||
title = document.getElementById( "data-event-title-edit" ).getAttribute("value");
|
||||
debug("title: "+title);
|
||||
//document.getElementById("calendar-new-component-window").setAttribute("title", title);
|
||||
document.title = title;
|
||||
break;
|
||||
|
||||
case "ICAL_COMPONENT_TODO":
|
||||
// Hide and show the appropriate fields and widgets
|
||||
hideElement("end-datetime");
|
||||
hideElement("event-start-datetime-label");
|
||||
hideElement("event-end-datetime-label");
|
||||
hideElement("event-status-label");
|
||||
hideElement("event-status-field");
|
||||
hideElement("all-day-event-checkbox");
|
||||
showElement("todo-cancelled-label");
|
||||
showElement("todo-cancelled-checkbox");
|
||||
showElement("task-start-datetime-label");
|
||||
showElement("start-checkbox");
|
||||
showElement("due-checkbox");
|
||||
showElement("due-datetime");
|
||||
showElement("task-due-datetime-label");
|
||||
showElement("task-completed-label");
|
||||
showElement("completed-checkbox");
|
||||
showElement("completed-date-picker");
|
||||
showElement("percent-complete-menulist");
|
||||
showElement("percent-complete-label");
|
||||
showElement("task-priority-label");
|
||||
showElement("priority-levels");
|
||||
|
||||
onDateTimeCheckbox("start-checkbox", "start-datetime")
|
||||
onDateTimeCheckbox("due-checkbox", "due-datetime")
|
||||
updateCompletedItemEnabled()
|
||||
|
||||
// Set menubar title correctly - New vs. Edit
|
||||
if( "new" == args.mode )
|
||||
title = document.getElementById( "data-todo-title-new" ).getAttribute("value");
|
||||
else
|
||||
title = document.getElementById( "data-todo-title-edit" ).getAttribute("value");
|
||||
debug("title: "+title);
|
||||
//document.getElementById("calendar-new-component-window").setAttribute("title", title);
|
||||
document.title = title;
|
||||
break;
|
||||
|
||||
//case "ICAL_COMPONENT_JOURNAL":
|
||||
}
|
||||
// Make the window big enough for all the fields and widgets
|
||||
window.sizeToContent();
|
||||
} else
|
||||
dump("processComponentType: no componentMenu.selectedItem!\n");
|
||||
// Is this a NEW event/todo, or are we EDITing an existing event/todo?
|
||||
if( "new" == args.mode )
|
||||
title = document.getElementById( "data-"+componentType+"-title-new" ).getAttribute("value");
|
||||
else
|
||||
title = document.getElementById( "data-"+componentType+"-title-edit" ).getAttribute("value");
|
||||
debug("changeTitleBar: "+title);
|
||||
document.title = title;
|
||||
} else {
|
||||
dump("changeTitleBar: ERROR! Tried to change titlebar to invalid value: "+componentType+"\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -1641,7 +1749,8 @@ function addAttendee(email)
|
|||
}
|
||||
|
||||
|
||||
/** Enable/Disable Alarm options with alarm checked.
|
||||
/** THIS IS FOR TODOS ONLY
|
||||
Enable/Disable Alarm options with alarm checked.
|
||||
|
||||
Enables/disables alarm trigger relations menulist depending on whether
|
||||
start/due dates are enabled.
|
||||
|
@ -1742,10 +1851,9 @@ function updateCompletedItemEnabled()
|
|||
|
||||
function percentCompleteCommand()
|
||||
{
|
||||
var percentcompletemenu = "percent-complete-menulist";
|
||||
var percentcomplete = getFieldValue( "percent-complete-menulist" );
|
||||
percentcomplete = parseInt( percentcomplete );
|
||||
if( percentcomplete == 100)
|
||||
var percentCompleteMenu = getFieldValue( "percent-complete-menulist" );
|
||||
percentCompleteMenu = parseInt( percentcomplete );
|
||||
if( percentCompleteMenu == 100)
|
||||
setFieldValue( "completed-checkbox", "true", "checked" );
|
||||
|
||||
updateCompletedItemEnabled();
|
||||
|
|
|
@ -65,7 +65,7 @@
|
|||
ondialogaccept="return onOKCommand();"
|
||||
ondialogcancel="return true;"
|
||||
persist="screenX screenY"
|
||||
minwidth="500" minheight="400"
|
||||
minwidth="500" minheight="500"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
xmlns:nc="http://home.netscape.com/NC-rdf#">
|
||||
|
||||
|
@ -141,15 +141,16 @@
|
|||
</hbox>
|
||||
<hbox>
|
||||
<menulist id="component-type" crop="none"
|
||||
oncommand="processComponentType()">
|
||||
oncommand="processComponentType(this.value)">
|
||||
<menupopup id="component-menulist-menupopup">
|
||||
<menuitem label="&newevent.itemType.event.label;"
|
||||
value="ICAL_COMPONENT_EVENT"/>
|
||||
value="event"/>
|
||||
<menuitem label="&newevent.itemType.todo.label;"
|
||||
value="ICAL_COMPONENT_TODO"/>
|
||||
<menuitem label="newevent.itemType.journal.label"
|
||||
value="ICAL_COMPONENT_JOURNAL"
|
||||
hidden="true" disabled="true"/>
|
||||
value="todo"/>
|
||||
<!--<menuitem label="newevent.itemType.journal.label"
|
||||
value="journal"
|
||||
hidden="true"
|
||||
disabled="true"/>-->
|
||||
</menupopup>
|
||||
</menulist>
|
||||
<spacer width="10px"/>
|
||||
|
@ -199,11 +200,19 @@
|
|||
<spacer width="10px"/>
|
||||
<!-- Status / Priority -->
|
||||
<hbox align="center">
|
||||
<label id="event-status-label" for="event-status-menulist-menupopup"
|
||||
value="&newevent.status.label;" hidden="true"/>
|
||||
<label id="task-priority-label" for="priority-levels"
|
||||
value="&newtodo.priority.label;" hidden="true"/>
|
||||
<menulist id="event-status-field" hidden="true">
|
||||
<label id="event-status-label"
|
||||
for="event-status-menulist-menupopup"
|
||||
value="&newevent.status.label;"
|
||||
hidden-controller="event"
|
||||
hidden="true"/>
|
||||
<label id="task-priority-label"
|
||||
for="priority-levels"
|
||||
value="&newtodo.priority.label;"
|
||||
hidden-controller="todo"
|
||||
hidden="true"/>
|
||||
<menulist id="event-status-field"
|
||||
hidden-controller="event"
|
||||
hidden="true">
|
||||
<menupopup id="event-status-menulist-menupopup">
|
||||
<menuitem label="None"/>
|
||||
<menuitem label="&newevent.status.tentative.label;"
|
||||
|
@ -214,7 +223,9 @@
|
|||
value="ICAL_STATUS_CANCELLED"/>
|
||||
</menupopup>
|
||||
</menulist>
|
||||
<menulist id="priority-levels" hidden="true">
|
||||
<menulist id="priority-levels"
|
||||
hidden-controller="todo"
|
||||
hidden="true">
|
||||
<menupopup>
|
||||
<menuitem label="&priority.level.none;" value="0"/>
|
||||
<menuitem label="&priority.level.low;" value="9"/>
|
||||
|
@ -237,8 +248,12 @@
|
|||
<groupbox flex="1">
|
||||
<caption label="Schedule"/>
|
||||
<hbox>
|
||||
<checkbox id="all-day-event-checkbox" label="&newevent.alldayevent.label;"
|
||||
oncommand="commandAllDay()" persist="checked" hidden="true"/>
|
||||
<checkbox id="all-day-event-checkbox"
|
||||
label="&newevent.alldayevent.label;"
|
||||
oncommand="commandAllDay()"
|
||||
persist="checked"
|
||||
hidden-controller="event"
|
||||
hidden="true"/>
|
||||
</hbox>
|
||||
<separator class="thin"/>
|
||||
<hbox>
|
||||
|
@ -250,16 +265,25 @@
|
|||
<rows>
|
||||
<row>
|
||||
<hbox pack="end" align="center">
|
||||
<label id="event-start-datetime-label" class="field-label-box-class"
|
||||
value="From" hidden="true"/>
|
||||
<label id="task-start-datetime-label" class="field-label-box-class"
|
||||
value="&newevent.startdate.label;" hidden="true"/>
|
||||
<label id="event-start-datetime-label"
|
||||
class="field-label-box-class"
|
||||
value="From"
|
||||
hidden-controller="event"
|
||||
hidden="true"/>
|
||||
<label id="task-start-datetime-label"
|
||||
class="field-label-box-class"
|
||||
value="&newevent.startdate.label;"
|
||||
hidden-controller="todo"
|
||||
hidden="true"/>
|
||||
</hbox>
|
||||
<hbox flex="1">
|
||||
<checkbox id="start-checkbox"
|
||||
oncommand="onDateTimeCheckbox(this, 'start-datetime')"
|
||||
persist="checked" hidden="true"/>
|
||||
<datetimepicker id="start-datetime" value=""
|
||||
persist="checked"
|
||||
hidden-controller="todo"
|
||||
hidden="true"/>
|
||||
<datetimepicker id="start-datetime"
|
||||
value=""
|
||||
onchange="onDateTimePick( this );"/>
|
||||
<spacer flex="1"/>
|
||||
</hbox>
|
||||
|
@ -267,18 +291,30 @@
|
|||
<row>
|
||||
<hbox pack="end" align="center">
|
||||
<label id="event-end-datetime-label"
|
||||
value="To" hidden="true"/>
|
||||
value="To"
|
||||
hidden-controller="event"
|
||||
hidden="true"/>
|
||||
<label id="task-due-datetime-label"
|
||||
value="&newtodo.duedate.label;" hidden="true"/>
|
||||
value="&newtodo.duedate.label;"
|
||||
hidden-controller="todo"
|
||||
hidden="true"/>
|
||||
</hbox>
|
||||
<hbox flex="1">
|
||||
<checkbox id="due-checkbox"
|
||||
oncommand="onDateTimeCheckbox(this, 'due-datetime')"
|
||||
persist="checked" hidden="true"/>
|
||||
<datetimepicker id="due-datetime" value=""
|
||||
onchange="onDateTimePick( this );" hidden="true"/>
|
||||
<datetimepicker id="end-datetime" value=""
|
||||
onchange="onDateTimePick( this );" hidden="true"/>
|
||||
persist="checked"
|
||||
hidden-controller="todo"
|
||||
hidden="true"/>
|
||||
<datetimepicker id="due-datetime"
|
||||
value=""
|
||||
onchange="onDateTimePick( this );"
|
||||
hidden-controller="todo"
|
||||
hidden="true"/>
|
||||
<datetimepicker id="end-datetime"
|
||||
value=""
|
||||
onchange="onDateTimePick( this );"
|
||||
hidden-controller="event"
|
||||
hidden="true"/>
|
||||
<spacer flex="1"/>
|
||||
</hbox>
|
||||
</row>
|
||||
|
@ -311,17 +347,26 @@
|
|||
<row>
|
||||
<hbox pack="end" align="center">
|
||||
<label id="task-completed-label"
|
||||
value="&newtodo.completed.label;" hidden="true"/>
|
||||
value="&newtodo.completed.label;"
|
||||
hidden-controller="todo"
|
||||
hidden="true"/>
|
||||
</hbox>
|
||||
<hbox flex="1" align="center">
|
||||
<checkbox id="completed-checkbox" hidden="true"
|
||||
oncommand="updateCompletedItemEnabled()"/>
|
||||
<checkbox id="completed-checkbox"
|
||||
oncommand="updateCompletedItemEnabled()"
|
||||
hidden-controller="todo"
|
||||
hidden="true"/>
|
||||
<datepicker id="completed-date-picker"
|
||||
disabled="true" value="" hidden="true"/>
|
||||
value=""
|
||||
disabled="true"
|
||||
hidden-controller="todo"
|
||||
hidden="true"/>
|
||||
<spacer/>
|
||||
<menulist id="percent-complete-menulist"
|
||||
editable="true" hidden="true"
|
||||
oncommand="percentCompleteCommand()">
|
||||
editable="true"
|
||||
oncommand="percentCompleteCommand()"
|
||||
hidden-controller="todo"
|
||||
hidden="true">
|
||||
<menupopup>
|
||||
<menuitem label="0" value="0"/>
|
||||
<menuitem label="10" value="10"/>
|
||||
|
@ -339,6 +384,7 @@
|
|||
<label id="percent-complete-label"
|
||||
for="percent-complete-menulist"
|
||||
value="&newtodo.percentcomplete.label;"
|
||||
hidden-controller="todo"
|
||||
hidden="true"/>
|
||||
<spacer flex="1"/>
|
||||
</hbox>
|
||||
|
@ -348,11 +394,15 @@
|
|||
<row>
|
||||
<hbox pack="end" align="center">
|
||||
<label id="todo-cancelled-label"
|
||||
value="&newtodo.cancelled.label;" hidden="true"/>
|
||||
value="&newtodo.cancelled.label;"
|
||||
hidden-controller="todo"
|
||||
hidden="true"/>
|
||||
</hbox>
|
||||
<hbox flex="1" align="center">
|
||||
<checkbox id="todo-cancelled-checkbox"
|
||||
checked="false" hidden="true"/>
|
||||
checked="false"
|
||||
hidden-controller="todo"
|
||||
hidden="true"/>
|
||||
<spacer flex="1"/>
|
||||
</hbox>
|
||||
</row>
|
||||
|
@ -641,9 +691,9 @@
|
|||
</row>
|
||||
<row>
|
||||
<listbox id="exception-dates-listbox"
|
||||
oninput="textboxChanged( this.id, 'delete-exception-button' );"
|
||||
disable-controller="repeat"
|
||||
rows="4"/>
|
||||
<!-- oninput="textboxChanged( this.id, 'delete-exception-button' );" -->
|
||||
<vbox>
|
||||
<button id="delete-exception-button"
|
||||
label="&newevent.deleteexceptions.label;"
|
||||
|
@ -672,7 +722,7 @@
|
|||
oncommand="processInviteCheckbox()"/>
|
||||
<textbox id="invite-email-field"
|
||||
size="39"
|
||||
oninput="textboxChanged( this.id, 'invite-email-button' );"
|
||||
oninput="processTextboxWithButton( this.id, 'invite-email-button' );"
|
||||
disabled="true"/>
|
||||
<button label="Add" id="invite-email-button" onclick="onIniviteAdd();"/>
|
||||
</hbox>
|
||||
|
@ -807,7 +857,7 @@
|
|||
</hbox>
|
||||
<hbox>
|
||||
<textbox id="uri-field"
|
||||
oninput="textboxChanged( this.id, 'load-url-button' );"
|
||||
oninput="processTextboxWithButton( this.id, 'load-url-button' );"
|
||||
#ifndef MOZ_SUNBIRD
|
||||
type="autocomplete"
|
||||
searchSessions="history"
|
||||
|
@ -820,12 +870,25 @@
|
|||
</hbox>
|
||||
</row>
|
||||
|
||||
<!-- Private -->
|
||||
<!-- Privacy -->
|
||||
<row align="center" flex="1">
|
||||
<spacer />
|
||||
<checkbox id="private-checkbox"
|
||||
checked="false"
|
||||
label="&newevent.private.label;"/>
|
||||
<hbox class="field-label-box-class" pack="end">
|
||||
<!-- XXX Localise this: &newevent.private.label; -->
|
||||
<label for="privacy-menulist" value="Privacy"/>
|
||||
</hbox>
|
||||
<hbox flex="1">
|
||||
<menulist id="privacy-menulist" crop="none">
|
||||
<menupopup>
|
||||
<menuitem label="Public"
|
||||
value="PUBLIC"/>
|
||||
<menuitem label="Private"
|
||||
value="PRIVATE"/>
|
||||
<menuitem label="Confidential"
|
||||
value="CONFIDENTIAL"/>
|
||||
</menupopup>
|
||||
</menulist>
|
||||
<spacer flex="1"/>
|
||||
</hbox>
|
||||
</row>
|
||||
|
||||
<!-- Description -->
|
||||
|
|
Загрузка…
Ссылка в новой задаче