416 lines
13 KiB
JavaScript
416 lines
13 KiB
JavaScript
/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
|
|
var ComponentEditor = {
|
|
attendeesWindow: null,
|
|
recurrenceWindow: null,
|
|
reminderWindow: null
|
|
};
|
|
|
|
function getOwnerLogin() {
|
|
return ownerLogin;
|
|
}
|
|
|
|
function getCalendarOwner() {
|
|
var ownerProfile;
|
|
|
|
if (typeof organizer == "undefined") {
|
|
var calendarIndex = $("calendarList").value;
|
|
var ownersList = owners[0];
|
|
var profiles = owners[1];
|
|
var ownerUid = ownersList[calendarIndex];
|
|
ownerProfile = profiles[ownerUid];
|
|
ownerProfile["uid"] = ownerUid;
|
|
}
|
|
else {
|
|
ownerProfile = organizer;
|
|
}
|
|
|
|
return ownerProfile;
|
|
}
|
|
|
|
function onPopupAttendeesWindow(event) {
|
|
if (event)
|
|
preventDefault(event);
|
|
if (ComponentEditor.attendeesWindow && ComponentEditor.attendeesWindow.open && !ComponentEditor.attendeesWindow.closed)
|
|
ComponentEditor.attendeesWindow.focus();
|
|
else
|
|
ComponentEditor.attendeesWindow = window.open(ApplicationBaseURL + "/editAttendees",
|
|
sanitizeWindowName(activeCalendar + activeComponent + "Attendees"),
|
|
"width=900,height=573");
|
|
|
|
return false;
|
|
}
|
|
|
|
function onSelectClassification(event) {
|
|
if (event.button == 0 || (isWebKit() && event.button == 1)) {
|
|
var node = getTarget(event);
|
|
if (node.tagName != 'A')
|
|
node = $(node).up("A");
|
|
popupToolbarMenu(node, "classification-menu");
|
|
Event.stop(event);
|
|
}
|
|
}
|
|
|
|
function onPopupAttachWindow(event) {
|
|
if (event)
|
|
preventDefault(event);
|
|
|
|
var attachInput = $("attach");
|
|
var newAttach = window.prompt(_("Target:"), attachInput.value || "http://");
|
|
if (newAttach != null) {
|
|
var documentHref = $("documentHref");
|
|
var documentLabel = $("documentLabel");
|
|
if (documentHref.childNodes.length > 0) {
|
|
documentHref.childNodes[0].nodeValue = newAttach;
|
|
if (newAttach.length > 0)
|
|
documentLabel.setStyle({ display: "block" });
|
|
else
|
|
documentLabel.setStyle({ display: "none" });
|
|
}
|
|
else {
|
|
documentHref.appendChild(document.createTextNode(newAttach));
|
|
if (newAttach.length > 0)
|
|
documentLabel.setStyle({ display: "block" });
|
|
}
|
|
attachInput.value = newAttach;
|
|
}
|
|
onWindowResize(event);
|
|
|
|
return false;
|
|
}
|
|
|
|
function onPopupDocumentWindow(event) {
|
|
var documentUrl = $("attach");
|
|
|
|
preventDefault(event);
|
|
window.open(documentUrl.value, "SOGo_Document");
|
|
|
|
return false;
|
|
}
|
|
|
|
function onMenuSetClassification(event) {
|
|
event.cancelBubble = true;
|
|
|
|
var classification = this.getAttribute("classification");
|
|
if (this.parentNode.chosenNode)
|
|
this.parentNode.chosenNode.removeClassName("_chosen");
|
|
this.addClassName("_chosen");
|
|
this.parentNode.chosenNode = this;
|
|
|
|
var classificationInput = $("classification");
|
|
classificationInput.value = classification;
|
|
}
|
|
|
|
function onChangeCalendar(event) {
|
|
var calendars = $("calendarFoldersList").value.split(",");
|
|
var form = document.forms["editform"];
|
|
var urlElems = form.getAttribute("action").split("?");
|
|
var choice = calendars[this.value];
|
|
var urlParam = "moveToCalendar=" + choice;
|
|
if (urlElems.length == 1)
|
|
urlElems.push(urlParam);
|
|
else
|
|
urlElems[2] = urlParam;
|
|
|
|
while (urlElems.length > 2)
|
|
urlElems.pop();
|
|
|
|
form.setAttribute("action", urlElems.join("?"));
|
|
}
|
|
|
|
function initializeDocumentHref() {
|
|
var documentHref = $("documentHref");
|
|
var documentLabel = $("documentLabel");
|
|
var documentUrl = $("attach");
|
|
|
|
documentHref.on("click", onPopupDocumentWindow, false);
|
|
if (documentUrl.value.length > 0) {
|
|
documentHref.appendChild(document.createTextNode(documentUrl.value));
|
|
documentLabel.setStyle({ display: "block" });
|
|
}
|
|
|
|
var changeUrlButton = $("changeAttachButton");
|
|
if (changeUrlButton)
|
|
changeUrlButton.on("click", onPopupAttachWindow, false);
|
|
}
|
|
|
|
function initializeClassificationMenu() {
|
|
if ($("classification-menu")) {
|
|
var classification = $("classification").value.toUpperCase();
|
|
var classificationMenu = $("classification-menu").childNodesWithTag("ul")[0];
|
|
var menuEntries = $(classificationMenu).childNodesWithTag("li");
|
|
var chosenNode;
|
|
if (classification == "CONFIDENTIAL")
|
|
chosenNode = menuEntries[1];
|
|
else if (classification == "PRIVATE")
|
|
chosenNode = menuEntries[2];
|
|
else
|
|
chosenNode = menuEntries[0];
|
|
classificationMenu.chosenNode = chosenNode;
|
|
$(chosenNode).addClassName("_chosen");
|
|
}
|
|
}
|
|
|
|
function findAttendeeWithFieldValue(field, fieldValue) {
|
|
var foundAttendee = null;
|
|
|
|
var attendeesKeys = attendees.keys();
|
|
for (var i = 0; !foundAttendee && i < attendeesKeys.length; i++) {
|
|
var attendee = attendees.get(attendeesKeys[i]);
|
|
if (attendee[field] == fieldValue) {
|
|
foundAttendee = attendee;
|
|
}
|
|
}
|
|
|
|
return foundAttendee;
|
|
}
|
|
|
|
function findDelegateAddress() {
|
|
var delegateAddress = null;
|
|
|
|
var ownerAttendee = findAttendeeWithFieldValue("uid", ownerLogin);
|
|
if (ownerAttendee && ownerAttendee["delegated-to"]) {
|
|
var delegateAttendee
|
|
= findAttendeeWithFieldValue("email",
|
|
ownerAttendee["delegated-to"]);
|
|
if (delegateAttendee) {
|
|
if (delegateAttendee["name"]) {
|
|
delegateAddress = (delegateAttendee["name"]
|
|
+ " <" + delegateAttendee["email"] + ">");
|
|
}
|
|
else {
|
|
delegateAddress = delegateAttendee["email"];
|
|
}
|
|
}
|
|
}
|
|
|
|
return delegateAddress;
|
|
}
|
|
|
|
function onComponentEditorLoad(event) {
|
|
initializeDocumentHref();
|
|
initializeClassificationMenu();
|
|
var list = $("calendarList");
|
|
if (list) {
|
|
list.on("change", onChangeCalendar);
|
|
list.fire("mousedown");
|
|
}
|
|
|
|
var tmp = $("itemClassificationList");
|
|
if (tmp) {
|
|
var menuItems = tmp.childNodesWithTag("li");
|
|
for (var i = 0; i < menuItems.length; i++)
|
|
menuItems[i].on("mousedown", onMenuSetClassification);
|
|
}
|
|
|
|
tmp = $("replyList");
|
|
if (tmp) {
|
|
tmp.on("change", onReplyChange);
|
|
var isDelegated = (tmp.value == 4);
|
|
tmp = $("delegatedTo");
|
|
tmp.addInterface(SOGoAutoCompletionInterface);
|
|
tmp.uidField = "c_mail";
|
|
tmp.excludeGroups = true;
|
|
var delegateEditor = $("delegateEditor");
|
|
tmp.animationParent = delegateEditor;
|
|
if (isDelegated) {
|
|
var delegateAddress = findDelegateAddress();
|
|
if (delegateAddress) {
|
|
tmp.value = delegateAddress;
|
|
}
|
|
delegateEditor.show();
|
|
}
|
|
}
|
|
|
|
tmp = $("repeatHref");
|
|
if (tmp)
|
|
tmp.on("click", onPopupRecurrenceWindow);
|
|
tmp = $("repeatList");
|
|
if (tmp)
|
|
tmp.on("change", onPopupRecurrenceWindow);
|
|
tmp = $("reminderHref");
|
|
if (tmp)
|
|
tmp.on("click", onPopupReminderWindow);
|
|
tmp = $("reminderList");
|
|
if (tmp)
|
|
tmp.on("change", onPopupReminderWindow);
|
|
tmp = $("summary");
|
|
if (tmp)
|
|
tmp.on("keyup", onSummaryChange);
|
|
|
|
Event.on(window, "resize", onWindowResize);
|
|
Event.on(window, "beforeunload", onComponentEditorClose);
|
|
|
|
onPopupRecurrenceWindow(null);
|
|
onPopupReminderWindow(null);
|
|
onSummaryChange (null);
|
|
|
|
var summary = $("summary");
|
|
if (summary) {
|
|
summary.focus();
|
|
summary.selectText(0, summary.value.length);
|
|
}
|
|
|
|
tmp = $("okButton");
|
|
if (tmp)
|
|
tmp.on ("click", onOkButtonClick);
|
|
tmp = $("cancelButton");
|
|
if (tmp)
|
|
tmp.on ("click", onCancelButtonClick);
|
|
}
|
|
|
|
function onSummaryChange (e) {
|
|
if ($("summary"))
|
|
document.title = $("summary").value;
|
|
}
|
|
|
|
function onReplyChange(event) {
|
|
var delegateEditor = $("delegateEditor");
|
|
if (this.value == 4) {
|
|
// Delegated
|
|
delegateEditor.show();
|
|
$("delegatedTo").focus();
|
|
}
|
|
else {
|
|
delegateEditor.hide();
|
|
}
|
|
onWindowResize(null);
|
|
|
|
return true;
|
|
}
|
|
|
|
function onComponentEditorClose(event) {
|
|
if (ComponentEditor.attendeesWindow && ComponentEditor.attendeesWindow.open && !ComponentEditor.attendeesWindow.closed)
|
|
ComponentEditor.attendeesWindow.close();
|
|
if (ComponentEditor.recurrenceWindow && ComponentEditor.recurrenceWindow.open && !ComponentEditor.recurrenceWindow.closed)
|
|
ComponentEditor.recurrenceWindow.close();
|
|
if (ComponentEditor.reminderWindow && ComponentEditor.reminderWindow.open && !ComponentEditor.reminderWindow.closed)
|
|
ComponentEditor.reminderWindow.close();
|
|
}
|
|
|
|
function onWindowResize(event) {
|
|
var comment = $("commentArea");
|
|
if (comment) {
|
|
// Resize comment area of read-write component
|
|
var document = $("documentLabel");
|
|
var area = comment.select("textarea").first();
|
|
var offset = 6;
|
|
var height;
|
|
|
|
height = window.height() - comment.cumulativeOffset().top - offset;
|
|
|
|
if (document.visible()) {
|
|
// Component has an attachment
|
|
if ($("changeAttachButton"))
|
|
height -= $("changeAttachButton").getHeight();
|
|
else
|
|
height -= $("documentHref").getHeight();
|
|
}
|
|
|
|
if (area)
|
|
area.setStyle({ height: (height - offset*2) + "px" });
|
|
|
|
comment.setStyle({ height: (height - offset) + "px" });
|
|
}
|
|
else {
|
|
// Resize attendees area of a read-only component
|
|
$("eventView").style.height = window.height () + "px";
|
|
var height = window.height() - 120;
|
|
var tmp = $("generalDiv");
|
|
if (tmp)
|
|
height -= tmp.offsetHeight;
|
|
tmp = $("descriptionDiv");
|
|
if (tmp)
|
|
height -= tmp.offsetHeight;
|
|
|
|
tmp = $("attendeesDiv");
|
|
if (tmp) {
|
|
tmp.style.height = height + "px";
|
|
$("attendeesMenu").style.height = (height - 20) + "px";
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
function onPopupRecurrenceWindow(event) {
|
|
if (event)
|
|
preventDefault(event);
|
|
|
|
var repeatHref = $("repeatHref");
|
|
|
|
var repeatList = $("repeatList");
|
|
if (repeatList && repeatList.value == 7) {
|
|
// Custom repeat rule
|
|
repeatHref.show();
|
|
if (event) {
|
|
if (ComponentEditor.recurrenceWindow && ComponentEditor.recurrenceWindow.open && !ComponentEditor.recurrenceWindow.closed)
|
|
ComponentEditor.recurrenceWindow.focus();
|
|
else
|
|
ComponentEditor.recurrenceWindow = window.open(ApplicationBaseURL + "/editRecurrence",
|
|
sanitizeWindowName(activeCalendar + activeComponent + "Recurrence"),
|
|
"width=500,height=400");
|
|
}
|
|
}
|
|
else if (repeatHref)
|
|
repeatHref.hide();
|
|
|
|
return false;
|
|
}
|
|
|
|
function onPopupReminderWindow(event) {
|
|
if (event)
|
|
preventDefault(event);
|
|
|
|
var reminderHref = $("reminderHref");
|
|
|
|
var reminderList = $("reminderList");
|
|
if (reminderList && reminderList.value == 15) {
|
|
reminderHref.show();
|
|
if (event) {
|
|
if (ComponentEditor.reminderWindow && ComponentEditor.reminderWindow.open && !ComponentEditor.reminderWindow.closed)
|
|
ComponentEditor.reminderWindow.focus();
|
|
else {
|
|
var height = (emailAlarmsEnabled ? 235 : 150);
|
|
ComponentEditor.reminderWindow
|
|
= window.open(ApplicationBaseURL + "/editReminder",
|
|
sanitizeWindowName(activeCalendar + activeComponent + "Reminder"),
|
|
"width=255,height=" + height);
|
|
}
|
|
}
|
|
}
|
|
else if (reminderHref)
|
|
reminderHref.hide();
|
|
|
|
return false;
|
|
}
|
|
|
|
function onOkButtonClick (e) {
|
|
var item = $("replyList");
|
|
var value = parseInt(item.options[item.selectedIndex].value);
|
|
var action = "";
|
|
var parameters = "";
|
|
|
|
if (value == 0)
|
|
action = 'accept';
|
|
else if (value == 1)
|
|
action = 'decline';
|
|
else if (value == 2)
|
|
action = 'needsaction';
|
|
else if (value == 3)
|
|
action = 'tentative';
|
|
else if (value == 4) {
|
|
var url = ApplicationBaseURL + "/" + activeCalendar + "/" + activeComponent;
|
|
delegateInvitation(url, modifyEventCallback);
|
|
}
|
|
|
|
if (action != "")
|
|
modifyEvent (item, action, parameters);
|
|
}
|
|
|
|
function onCancelButtonClick (e) {
|
|
window.close ();
|
|
}
|
|
|
|
document.on("dom:loaded", onComponentEditorLoad);
|