~ubuntu-branches/ubuntu/oneiric/lightning-extension/oneiric-updates

« back to all changes in this revision

Viewing changes to calendar/base/content/dialogs/calendar-event-dialog.js

  • Committer: Package Import Robot
  • Author(s): Chris Coulson
  • Date: 2012-11-08 10:00:06 UTC
  • mfrom: (1.3.8)
  • Revision ID: package-import@ubuntu.com-20121108100006-xpf89hktfitzuqc3
Tags: 1.9+build1-0ubuntu0.11.10.1
* New upstream stable release to support Thunderbird 17 (CALENDAR_1_9_BUILD1)
  - see LP: #1080212 for USN information

Show diffs side-by-side

added added

removed removed

Lines of Context:
4
4
 
5
5
Components.utils.import("resource://calendar/modules/calUtils.jsm");
6
6
Components.utils.import("resource://gre/modules/Services.jsm");
 
7
Components.utils.import("resource://calendar/modules/calRecurrenceUtils.jsm");
7
8
 
8
9
try {
9
10
    Components.utils.import("resource:///modules/cloudFileAccounts.js");
29
30
var gLastRepeatSelection = 0;
30
31
var gIgnoreUpdate = false;
31
32
var gShowTimeAs = null;
 
33
var gWarning = false;
32
34
 
33
35
var eventDialogQuitObserver = {
34
36
  observe: function(aSubject, aTopic, aData) {
242
244
function onAccept() {
243
245
    dispose();
244
246
    onCommandSave(true);
245
 
    return true;
 
247
    return !gWarning;
246
248
}
247
249
 
248
250
/**
254
256
 * @return    Returns true if the window should be closed.
255
257
 */
256
258
function onCommandCancel() {
257
 
    if (!isItemChanged()) {
 
259
    // Allow closing if the item has not changed and no warning dialog has to be showed.
 
260
    if (!isItemChanged() && !gWarning) {
258
261
        return true;
259
262
    }
260
263
 
291
294
            onCommandSave(true);
292
295
            return true;
293
296
        case 2: // Don't save
 
297
            // Don't show any warning dialog when closing without saving.
 
298
            gWarning = false;
294
299
            return true;
295
300
        default: // Cancel
296
301
            return false;
309
314
 
310
315
    if (!gConfirmCancel || (gConfirmCancel && onCommandCancel())) {
311
316
        dispose();
312
 
        return true;
 
317
        // Don't allow closing the dialog when the user inputs a wrong
 
318
        // date then closes the dialog and answers with "Save" in
 
319
        // the "Save Event" dialog.
 
320
        return !gWarning;
313
321
    }
314
322
    return false;
315
323
}
568
576
        // jsDate is always in OS timezone, thus we create a calIDateTime
569
577
        // object from the jsDate representation then we convert the timezone
570
578
        // in order to keep gStartTime in default timezone.
571
 
        gStartTime = jsDateToDateTime(getElementValue(startWidgetId),
572
 
                                      (timezonesEnabled || allDay) ? gStartTimezone : kDefaultTimezone);
 
579
        gStartTime = cal.jsDateToDateTime(getElementValue(startWidgetId),
 
580
                                          (timezonesEnabled || allDay) ? gStartTimezone : kDefaultTimezone);
573
581
        if (timezonesEnabled || allDay) {
574
582
            gStartTime = gStartTime.getInTimezone(kDefaultTimezone);
575
583
        }
589
597
                    timezone = gStartTimezone;
590
598
                }
591
599
            }
592
 
            gEndTime = jsDateToDateTime(getElementValue(endWidgetId),
593
 
                                        (timezonesEnabled || allDay) ? timezone : kDefaultTimezone);
 
600
            gEndTime = cal.jsDateToDateTime(getElementValue(endWidgetId),
 
601
                                            (timezonesEnabled || allDay) ? timezone : kDefaultTimezone);
594
602
            if (timezonesEnabled || allDay) {
595
603
                gEndTime = gEndTime.getInTimezone(kDefaultTimezone);
596
604
            }
630
638
    updateTimezone();
631
639
 
632
640
    if (warning) {
 
641
        gWarning = true;
633
642
        var callback = function func() {
634
643
            var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
635
644
                                .getService(Components.interfaces.nsIPromptService);
637
646
                null,
638
647
                document.title,
639
648
                calGetString("calendar", "warningEndBeforeStart"));
 
649
                gWarning = false;
640
650
        }
641
651
        setTimeout(callback, 1);
642
652
    }
699
709
    setElementValue(aDatePickerId, getElementValue(aDatePickerId));
700
710
 
701
711
    // first of all disable the datetime picker if we don't have a date
702
 
    var hasDate = getElementValue(aCheckboxId, "checked");
 
712
    let hasDate = getElementValue(aCheckboxId, "checked");
703
713
    setElementValue(aDatePickerId, !hasDate, "disabled");
704
714
 
705
715
    // create a new datetime object if date is now checked for the first time
706
716
    if (hasDate && !aDateTime.isValid()) {
707
 
        var date = jsDateToDateTime(getElementValue(aDatePickerId), calendarDefaultTimezone());
708
 
        aDateTime.setDateTime(date);
 
717
        let dt = cal.jsDateToDateTime(getElementValue(aDatePickerId), cal.calendarDefaultTimezone());
 
718
        aDateTime.setDateTime(dt);
709
719
    } else if (!hasDate && aDateTime.isValid()) {
710
720
        aDateTime.setDateTime(null);
711
721
    }
712
722
 
713
723
    // calculate the duration if possible
714
 
    var hasEntryDate = getElementValue("todo-has-entrydate", "checked");
715
 
    var hasDueDate = getElementValue("todo-has-duedate", "checked");
 
724
    let hasEntryDate = getElementValue("todo-has-entrydate", "checked");
 
725
    let hasDueDate = getElementValue("todo-has-duedate", "checked");
716
726
    if (hasEntryDate && hasDueDate) {
717
 
        var start = jsDateToDateTime(getElementValue("todo-entrydate"));
718
 
        var end = jsDateToDateTime(getElementValue("todo-duedate"));
 
727
        let start = cal.jsDateToDateTime(getElementValue("todo-entrydate"));
 
728
        let end = cal.jsDateToDateTime(getElementValue("todo-duedate"));
719
729
        gItemDuration = end.subtractDate(start);
720
730
    } else {
721
731
        gItemDuration = null;
935
945
 
936
946
    if (item.status == "COMPLETED" && isToDo(item)) {
937
947
        var elementValue = getElementValue("completed-date-picker");
938
 
        item.completedDate = jsDateToDateTime(elementValue);
 
948
        item.completedDate = cal.jsDateToDateTime(elementValue);
939
949
    }
940
950
 
941
951
    saveReminder(item);
1062
1072
    var startDate;
1063
1073
    var endDate;
1064
1074
    if (isEvent(window.calendarItem)) {
1065
 
        startDate = jsDateToDateTime(getElementValue("event-starttime"));
1066
 
        endDate = jsDateToDateTime(getElementValue("event-endtime"));
 
1075
        startDate = cal.jsDateToDateTime(getElementValue("event-starttime"));
 
1076
        endDate = cal.jsDateToDateTime(getElementValue("event-endtime"));
1067
1077
 
1068
1078
        var menuItem = document.getElementById('options-timezone-menuitem');
1069
1079
        if (menuItem.getAttribute('checked') == 'true') {
1103
1113
        }
1104
1114
    } else {
1105
1115
        startDate = getElementValue("todo-has-entrydate", "checked") ?
1106
 
            jsDateToDateTime(getElementValue("todo-entrydate")) : null;
 
1116
            cal.jsDateToDateTime(getElementValue("todo-entrydate")) : null;
1107
1117
        endDate = getElementValue("todo-has-duedate", "checked") ?
1108
 
            jsDateToDateTime(getElementValue("todo-duedate")) : null;
 
1118
            cal.jsDateToDateTime(getElementValue("todo-duedate")) : null;
1109
1119
    }
1110
1120
 
1111
1121
    if (endDate && startDate && endDate.compare(startDate) == -1) {
2462
2472
    // confirmed (i.e. not followed by a click, a tab or enter keys pressure).
2463
2473
    document.documentElement.focus();
2464
2474
 
 
2475
    // Don't save if a warning dialog about a wrong input date must be showed.
 
2476
    if (gWarning) {
 
2477
        return;
 
2478
    }
 
2479
 
2465
2480
    let originalItem = window.calendarItem;
2466
2481
    let item = saveItem();
2467
2482
    let calendar = getCurrentCalendar();
3138
3153
 
3139
3154
        let startDate = getElementValue(event ? "event-starttime" : "todo-entrydate");
3140
3155
        let endDate = getElementValue(event ? "event-endtime" : "todo-duedate");
3141
 
        startDate = jsDateToDateTime(startDate, kDefaultTimezone);
3142
 
        endDate = jsDateToDateTime(endDate, kDefaultTimezone);
 
3156
        startDate = cal.jsDateToDateTime(startDate, kDefaultTimezone);
 
3157
        endDate = cal.jsDateToDateTime(endDate, kDefaultTimezone);
3143
3158
 
3144
3159
        let allDay = getElementValue("event-all-day", "checked");
3145
 
        let detailsString = recurrenceRule2String(
3146
 
            recurrenceInfo, startDate, endDate, allDay);
 
3160
        let detailsString = recurrenceRule2String(recurrenceInfo, startDate,
 
3161
                                                  endDate, allDay);
 
3162
 
 
3163
        if (!detailsString) {
 
3164
            detailsString = cal.calGetString("calendar-event-dialog", "ruleTooComplex");
 
3165
        }
3147
3166
 
3148
3167
        // Now display the string...
3149
 
        if (detailsString) {
3150
 
            let lines = detailsString.split("\n");
3151
 
            repeatDetails.removeAttribute("collapsed");
3152
 
            while (repeatDetails.childNodes.length > lines.length) {
3153
 
                repeatDetails.removeChild(repeatDetails.lastChild);
3154
 
            }
3155
 
            let numChilds = repeatDetails.childNodes.length;
3156
 
            for (let i = 0; i < lines.length; i++) {
3157
 
                if (i >= numChilds) {
3158
 
                    var newNode = repeatDetails.childNodes[0]
3159
 
                                               .cloneNode(true);
3160
 
                    repeatDetails.appendChild(newNode);
3161
 
                }
3162
 
                repeatDetails.childNodes[i].value = lines[i];
3163
 
                repeatDetails.childNodes[i].setAttribute("tooltiptext",
3164
 
                                                         detailsString);
3165
 
            }
 
3168
        let lines = detailsString.split("\n");
 
3169
        repeatDetails.removeAttribute("collapsed");
 
3170
        while (repeatDetails.childNodes.length > lines.length) {
 
3171
            repeatDetails.removeChild(repeatDetails.lastChild);
 
3172
        }
 
3173
        let numChilds = repeatDetails.childNodes.length;
 
3174
        for (let i = 0; i < lines.length; i++) {
 
3175
            if (i >= numChilds) {
 
3176
                var newNode = repeatDetails.childNodes[0]
 
3177
                                           .cloneNode(true);
 
3178
                repeatDetails.appendChild(newNode);
 
3179
            }
 
3180
            repeatDetails.childNodes[i].value = lines[i];
 
3181
            repeatDetails.childNodes[i].setAttribute("tooltiptext",
 
3182
                                                     detailsString);
3166
3183
        }
3167
3184
    } else {
3168
3185
        let repeatDetails = document.getElementById("repeat-details");