diff options
Diffstat (limited to 'comm/calendar/base/content/dialogs/chooseCalendarDialog.js')
-rw-r--r-- | comm/calendar/base/content/dialogs/chooseCalendarDialog.js | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/comm/calendar/base/content/dialogs/chooseCalendarDialog.js b/comm/calendar/base/content/dialogs/chooseCalendarDialog.js new file mode 100644 index 0000000000..47532df8ea --- /dev/null +++ b/comm/calendar/base/content/dialogs/chooseCalendarDialog.js @@ -0,0 +1,89 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* exported loadCalendars */ + +/* import-globals-from ../calendar-ui-utils.js */ + +var { cal } = ChromeUtils.import("resource:///modules/calendar/calUtils.jsm"); + +function loadCalendars() { + const calendarManager = Cc["@mozilla.org/calendar/manager;1"].getService(Ci.calICalendarManager); + let listbox = document.getElementById("calendar-list"); + let composite = cal.view.getCompositeCalendar(window.opener); + let selectedIndex = 0; + let calendars; + + if (window.arguments[0].calendars) { + calendars = window.arguments[0].calendars; + } else { + calendars = calendarManager.getCalendars(); + } + calendars = sortCalendarArray(calendars); + + for (let i = 0; i < calendars.length; i++) { + let calendar = calendars[i]; + let listItem = document.createXULElement("richlistitem"); + + let colorCell = document.createXULElement("box"); + try { + colorCell.style.backgroundColor = calendar.getProperty("color") || "#a8c2e1"; + } catch (e) {} + listItem.appendChild(colorCell); + + let nameCell = document.createXULElement("label"); + nameCell.setAttribute("value", calendar.name); + nameCell.setAttribute("flex", "1"); + listItem.appendChild(nameCell); + + listItem.calendar = calendar; + listbox.appendChild(listItem); + + // Select the default calendar of the opening calendar window. + if (calendar.id == composite.defaultCalendar.id) { + selectedIndex = i; + } + } + document.getElementById("prompt").textContent = window.arguments[0].promptText; + if (window.arguments[0].promptNotify) { + document.getElementById("promptNotify").textContent = window.arguments[0].promptNotify; + } + + // this button is the default action + let dialog = document.querySelector("dialog"); + let accept = dialog.getButton("accept"); + if (window.arguments[0].labelOk) { + accept.setAttribute("label", window.arguments[0].labelOk); + accept.removeAttribute("hidden"); + } + + let extra1 = dialog.getButton("extra1"); + if (window.arguments[0].labelExtra1) { + extra1.setAttribute("label", window.arguments[0].labelExtra1); + extra1.removeAttribute("hidden"); + } else { + extra1.setAttribute("hidden", "true"); + } + + if (calendars.length) { + listbox.ensureIndexIsVisible(selectedIndex); + listbox.timedSelect(listbox.getItemAtIndex(selectedIndex), 0); + } else { + // If there are no calendars, then disable the accept button + accept.setAttribute("disabled", "true"); + } + + window.sizeToContent(); +} + +document.addEventListener("dialogaccept", () => { + let listbox = document.getElementById("calendar-list"); + window.arguments[0].onOk(listbox.selectedItem.calendar); +}); + +document.addEventListener("dialogextra1", () => { + let listbox = document.getElementById("calendar-list"); + window.arguments[0].onExtra1(listbox.selectedItem.calendar); + window.close(); +}); |