Bug 1280898 - Set up eslint for calendar files - enable quotes rule. r=MakeMyDay
authoreslint <eslint@bugzilla.kewis.ch>
Fri, 08 Jul 2016 14:05:19 +0200
changeset 25993 3d474ac6379c7c7278e3d41fb40437d95b9f7470
parent 25992 9bb63b34413f5bb8e13d909962b80a5181866d6b
child 25994 ff506e40c3a28846acd5313c8c93fe45bf30db8f
push id1771
push userclokep@gmail.com
push dateMon, 14 Nov 2016 17:47:53 +0000
treeherdercomm-beta@399ae9d71595 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersMakeMyDay
bugs1280898
Bug 1280898 - Set up eslint for calendar files - enable quotes rule. r=MakeMyDay MozReview-Commit-ID: HCcoCsa0u71
calendar/.eslintrc
calendar/base/backend/icaljs/calICSService.js
calendar/base/backend/icaljs/calRecurrenceRule.js
calendar/base/content/agenda-listbox.js
calendar/base/content/agenda-listbox.xml
calendar/base/content/calendar-base-view.xml
calendar/base/content/calendar-chrome-startup.js
calendar/base/content/calendar-clipboard.js
calendar/base/content/calendar-common-sets.js
calendar/base/content/calendar-daypicker.xml
calendar/base/content/calendar-invitations-manager.js
calendar/base/content/calendar-item-editing.js
calendar/base/content/calendar-month-view.xml
calendar/base/content/calendar-multiday-view.xml
calendar/base/content/calendar-task-editing.js
calendar/base/content/calendar-task-tree.js
calendar/base/content/calendar-task-tree.xml
calendar/base/content/calendar-task-view.js
calendar/base/content/calendar-unifinder.js
calendar/base/content/calendar-view-core.xml
calendar/base/content/calendar-views.js
calendar/base/content/dialogs/calendar-dialog-utils.js
calendar/base/content/dialogs/calendar-event-dialog-attendees.js
calendar/base/content/dialogs/calendar-event-dialog-attendees.xml
calendar/base/content/dialogs/calendar-event-dialog-freebusy.xml
calendar/base/content/dialogs/calendar-event-dialog-recurrence.js
calendar/base/content/dialogs/calendar-print-dialog.js
calendar/base/content/dialogs/calendar-properties-dialog.js
calendar/base/content/import-export.js
calendar/base/content/preferences/editCategory.js
calendar/base/content/today-pane.js
calendar/base/content/widgets/calendar-alarm-widget.xml
calendar/base/content/widgets/calendar-list-tree.xml
calendar/base/content/widgets/minimonth.xml
calendar/base/modules/calPrintUtils.jsm
calendar/base/modules/calRecurrenceUtils.jsm
calendar/base/modules/calUtils.jsm
calendar/base/modules/calXMLUtils.jsm
calendar/base/src/calCalendarManager.js
calendar/base/src/calIcsParser.js
calendar/base/src/calIcsSerializer.js
calendar/base/src/calTimezoneService.js
calendar/base/src/calTransactionManager.js
calendar/base/src/calUtils.js
calendar/import-export/calHtmlExport.js
calendar/import-export/calIcsImportExport.js
calendar/import-export/calMonthGridPrinter.js
calendar/import-export/calOutlookCSVImportExport.js
calendar/import-export/calWeekPrinter.js
calendar/itip/calItipEmailTransport.js
calendar/lightning/components/lightningTextCalendarConverter.js
calendar/lightning/content/html-item-editing/react-code.js
calendar/lightning/content/imip-bar.js
calendar/lightning/content/lightning-item-iframe.js
calendar/lightning/content/messenger-overlay-sidebar.js
calendar/lightning/modules/ltnInvitationUtils.jsm
calendar/providers/caldav/calDavCalendar.js
calendar/providers/caldav/calDavRequestHandlers.js
calendar/providers/ics/calICSCalendar.js
calendar/providers/storage/calStorageHelpers.jsm
calendar/providers/storage/calStorageUpgrade.jsm
calendar/providers/wcap/calWcapSession.js
calendar/resources/content/calendarCreation.js
calendar/resources/content/datetimepickers/datetimepickers.xml
calendar/resources/content/mouseoverPreviews.js
calendar/resources/content/publish.js
calendar/test/mozmill/eventDialog/testEventDialog.js
calendar/test/mozmill/eventDialog/testEventDialogModificationPrompt.js
calendar/test/mozmill/recurrence/testWeeklyWithExceptionRecurrence.js
calendar/test/mozmill/recurrenceRotated/testWeeklyWithExceptionRecurrence.js
calendar/test/mozmill/shared-modules/calendar-utils.js
calendar/test/mozmill/shared-modules/timezone-utils.js
calendar/test/mozmill/testBasicFunctionality.js
calendar/test/mozmill/testLocalICS.js
calendar/test/mozmill/testTodayPane.js
calendar/test/mozmill/views/testDayView.js
calendar/test/mozmill/views/testMonthView.js
calendar/test/mozmill/views/testMultiweekView.js
calendar/test/mozmill/views/testTaskView.js
calendar/test/mozmill/views/testWeekView.js
calendar/test/unit/head_consts.js
calendar/test/unit/test_attendee.js
calendar/test/unit/test_bug1204255.js
calendar/test/unit/test_bug1209399.js
calendar/test/unit/test_calutils.js
--- a/calendar/.eslintrc
+++ b/calendar/.eslintrc
@@ -355,16 +355,19 @@
 
     // Operators always before the line break
     "operator-linebreak": [2, "after", { "overrides": { ":": "before", "?": "ignore"}}],
 
     // Restricts the use of parentheses to only where they are necessary
     // Disabled for now since this also removes parens around assignments, e.g. let foo = bar == baz
     // "no-extra-parens": [2, "all", { "conditionalAssign": false, "returnAssign": false, "nestedBinaryExpressions": false }],
 
+    // Double quotes should be used.
+    "quotes": [2, "double", { "avoidEscape": true }],
+
     // Will enable these rules later
     "block-spacing": 0,
     "no-lonely-if": 0,
     "computed-property-spacing": 0,
 
     // The following rules will not be enabled currently, but are kept here for
     // easier updates in the future.
     "no-else-return": 0,
--- a/calendar/base/backend/icaljs/calICSService.js
+++ b/calendar/base/backend/icaljs/calICSService.js
@@ -157,17 +157,17 @@ calIcalProperty.prototype = {
     removeParameter: function(n) {
         // Again, VALUE needs special handling. Removing the value parameter is
         // kind of like resetting it to the default type. So find out the
         // default type and then set the value parameter to it.
         if (n == "VALUE") {
             let propname = this.innerObject.name.toLowerCase();
             if (propname in ICAL.design.icalendar.property) {
                 let details = ICAL.design.icalendar.property[propname];
-                if ('defaultType' in details) {
+                if ("defaultType" in details) {
                     this.setParameter("VALUE", details.defaultType);
                 }
             }
         } else {
             this.innerObject.removeParameter(n.toLowerCase());
         }
     },
 
--- a/calendar/base/backend/icaljs/calRecurrenceRule.js
+++ b/calendar/base/backend/icaljs/calRecurrenceRule.js
@@ -156,17 +156,17 @@ calRecurrenceRule.prototype = {
                     cal.ERROR("Malformed BYDAY rule\n" + cal.STACK(10));
                     return [];
                 }
                 values[i] = ICAL.Recur.icalDayToNumericDay(match[3]);
                 if (match[2]) {
                     // match[2] is the week number for this value.
                     values[i] += 8 * match[2];
                 }
-                if (match[1] == '-') {
+                if (match[1] == "-") {
                     // Week numbers are counted back from the end of the period.
                     values[i] *= -1;
                 }
             }
         }
 
         if (aCount) {
             aCount.value = values.length;
--- a/calendar/base/content/agenda-listbox.js
+++ b/calendar/base/content/agenda-listbox.js
@@ -186,20 +186,20 @@ function onBlur() {
 agendaListbox.onKeyPress =
 function onKeyPress(aEvent) {
     let listItem = aEvent.target;
     if (listItem.localName == "richlistbox") {
         listItem = listItem.selectedItem;
     }
     switch (aEvent.keyCode) {
         case aEvent.DOM_VK_RETURN:
-            document.getElementById('agenda_edit_event_command').doCommand();
+            document.getElementById("agenda_edit_event_command").doCommand();
             break;
         case aEvent.DOM_VK_DELETE:
-            document.getElementById('agenda_delete_event_command').doCommand();
+            document.getElementById("agenda_delete_event_command").doCommand();
             aEvent.stopPropagation();
             aEvent.preventDefault();
             break;
         case aEvent.DOM_VK_LEFT:
             if (!this.isEventListItem(listItem)) {
                 listItem.getCheckbox().setChecked(false);
             }
             break;
--- a/calendar/base/content/agenda-listbox.xml
+++ b/calendar/base/content/agenda-listbox.xml
@@ -20,17 +20,17 @@
       </property>
     </implementation>
     <handlers>
       <handler event="click" phase="capturing"><![CDATA[
         if (event.detail == 1) {
             agendaListbox.onSelect(this);
         } else if (event.button == 0) {
             // We only care about button 0 doubleclick events
-            document.getElementById('agenda_edit_event_command').doCommand();
+            document.getElementById("agenda_edit_event_command").doCommand();
             event.stopPropagation();
             event.preventDefault();
         }
       ]]></handler>
       <handler event="mouseover"><![CDATA[
          event.stopPropagation();
          onMouseOverItem(event);
       ]]></handler>
--- a/calendar/base/content/calendar-base-view.xml
+++ b/calendar/base/content/calendar-base-view.xml
@@ -239,17 +239,17 @@
         this.tasksInView = (document.getElementById(kTasksInViewCommand)
                                 .getAttribute("checked") == "true");
         this.rotated = (document.getElementById(kOrientation)
                                 .getAttribute("checked") == "true");
         this.showCompleted = (document.getElementById(kShowCompleted)
                                 .getAttribute("checked") == "true");
 
         this.mTimezone = calendarDefaultTimezone();
-        let alarmService = Components.classes['@mozilla.org/calendar/alarm-service;1']
+        let alarmService = Components.classes["@mozilla.org/calendar/alarm-service;1"]
                            .getService(Components.interfaces.calIAlarmService);
         alarmService.addObserver(this.mObserver);
         let self = this;
         this.setAttribute("type", this.type);
         this.mResizeHandler = function resizeHandler() {
             self.onResize(self);
         };
         this.viewBroadcaster.addEventListener(this.getAttribute("type") + "viewresized", this.mResizeHandler, true);
@@ -263,17 +263,17 @@
       ]]></constructor>
 
       <destructor><![CDATA[
         Components.utils.import("resource://gre/modules/Services.jsm");
 
         if (this.mCalendar) {
             this.mCalendar.removeObserver(this.mObserver);
         }
-        let alarmService = Components.classes['@mozilla.org/calendar/alarm-service;1']
+        let alarmService = Components.classes["@mozilla.org/calendar/alarm-service;1"]
                            .getService(Components.interfaces.calIAlarmService);
         alarmService.removeObserver(this.mObserver);
         this.viewBroadcaster.removeEventListener(this.getAttribute("type") + "viewresized", this.mResizeHandler, true);
         Services.prefs.removeObserver("calendar.", this.mPrefObserver);
       ]]></destructor>
 
       <property name="type" readonly="true">
         <getter><![CDATA[
@@ -464,17 +464,17 @@
               onOperationComplete: function(aOpCalendar, aStatus, aOperationType, aId, aDateTime) {
                   this.calView.mLog.info("Refresh complete of calendar " + this.calId);
                   if (this.calView.mPendingRefreshJobs.has(this.calId)) {
                       this.calView.mPendingRefreshJobs.delete(this.calId);
                   }
 
                   if (!this.cancelled) {
                       // Fire event
-                      this.calView.fireEvent('viewloaded', aOperationType);
+                      this.calView.fireEvent("viewloaded", aOperationType);
                   }
               },
 
               onGetResult: function(aOpCalendar, aStatus, aItemType, aDetail, aCount, aItems) {
                   if (this.cancelled || !Components.isSuccessCode(aStatus)) {
                       return;
                   }
 
@@ -573,17 +573,17 @@
           return end;
         ]]></getter>
       </property>
 
       <method name="fireEvent">
         <parameter name="aEventName"/>
         <parameter name="aEventDetail"/>
         <body><![CDATA[
-          let event = document.createEvent('Events');
+          let event = document.createEvent("Events");
           event.initEvent(aEventName, true, false);
           event.detail = aEventDetail;
           this.dispatchEvent(event);
         ]]></body>
       </method>
 
       <method name="removeDropShadows">
         <body><![CDATA[
@@ -775,17 +775,17 @@
                 break;
             case kKE.DOM_VK_PAGE_DOWN:
                 this.moveView(1);
                 break;
         }
       ]]></handler>
       <handler event="wheel"><![CDATA[
         const pixelThreshold = 150;
-        if (event.shiftKey && Preferences.get('calendar.view.mousescroll', true)) {
+        if (event.shiftKey && Preferences.get("calendar.view.mousescroll", true)) {
             if (event.deltaMode == event.DOM_DELTA_LINE) {
                 if (event.deltaY != 0) {
                     deltaView = event.deltaY < 0 ? -1 : 1;
                 }
             } else if (event.deltaMode == event.DOM_DELTA_PIXEL) {
                 this.mPixelScrollDelta += event.deltaY;
                 if (this.mPixelScrollDelta > pixelThreshold) {
                     deltaView = 1;
--- a/calendar/base/content/calendar-chrome-startup.js
+++ b/calendar/base/content/calendar-chrome-startup.js
@@ -83,17 +83,17 @@ function commonFinishCalendar() {
 
 /**
  * Handler function to create |viewtype + "viewresized"| events that are
  * dispatched through the calendarviewBroadcaster.
  *
  * XXX this has nothing to do with startup, needs to go somewhere else.
  */
 function onCalendarViewResize(aEvent) {
-    let event = document.createEvent('Events');
+    let event = document.createEvent("Events");
     event.initEvent(currentView().type + "viewresized", true, false);
     document.getElementById("calendarviewBroadcaster").dispatchEvent(event);
 }
 
 /**
  * TODO: The systemcolors pref observer really only needs to be set up once, so
  * ideally this code should go into a component. This should be taken care of when
  * there are more prefs that need to be observed on a global basis that don't fit
--- a/calendar/base/content/calendar-clipboard.js
+++ b/calendar/base/content/calendar-clipboard.js
@@ -185,16 +185,16 @@ function pasteFromClipboard() {
             for (let item of items) {
                 let newItem = item.clone();
                 // Set new UID to allow multiple paste actions of the same
                 // clipboard content.
                 newItem.id = cal.getUUID();
                 if (offset) {
                     cal.shiftItem(newItem, offset);
                 }
-                doTransaction('add', newItem, destCal, null, null);
+                doTransaction("add", newItem, destCal, null, null);
             }
             endBatchTransaction();
             break;
         default:
             break;
     }
 }
--- a/calendar/base/content/calendar-common-sets.js
+++ b/calendar/base/content/calendar-common-sets.js
@@ -489,17 +489,17 @@ var calendarController = {
 
         calendarController.selected_events_requires_network =
               (selected_events_requires_network == selLength);
         calendarController.selected_events_invitation =
               (selected_events_invitation == selLength);
 
         calendarController.updateCommands();
         calendarController2.updateCommands();
-        document.commandDispatcher.updateCommands('mail-toolbar');
+        document.commandDispatcher.updateCommands("mail-toolbar");
     },
 
     /**
      * Condition Helpers
      */
 
     // These attributes will be set up manually.
     item_selected: false,
@@ -679,20 +679,20 @@ var calendarController2 = {
             // Thunderbird Commands
             case "cmd_cut":
                 return calendarController.selected_items_writable;
             case "cmd_copy":
                 return calendarController.item_selected;
             case "cmd_paste":
                 return canPaste();
             case "cmd_undo":
-                goSetMenuValue(aCommand, 'valueDefault');
+                goSetMenuValue(aCommand, "valueDefault");
                 return canUndo();
             case "cmd_redo":
-                goSetMenuValue(aCommand, 'valueDefault');
+                goSetMenuValue(aCommand, "valueDefault");
                 return canRedo();
             case "button_delete":
             case "cmd_delete":
                 return calendarController.isCommandEnabled("calendar_delete_focused_item_command");
             case "cmd_fullZoomReduce":
             case "cmd_fullZoomEnlarge":
             case "cmd_fullZoomReset":
               return calendarController.isInMode("calendar") &&
@@ -744,17 +744,17 @@ var calendarController2 = {
                 break;
             case "cmd_fullZoomEnlarge":
                 currentView().zoomOut();
                 break;
             case "cmd_fullZoomReset":
                 currentView().zoomReset();
                 break;
             case "cmd_showQuickFilterBar":
-                document.getElementById('task-text-filter-field').select();
+                document.getElementById("task-text-filter-field").select();
                 break;
 
             case "button_delete":
             case "cmd_delete":
                 calendarController.doCommand("calendar_delete_focused_item_command");
                 break;
         }
     }
--- a/calendar/base/content/calendar-daypicker.xml
+++ b/calendar/base/content/calendar-daypicker.xml
@@ -27,18 +27,18 @@
       </xul:hbox>
     </content>
     <implementation>
       <method name="onmodified">
         <parameter name="aEvent"/>
         <body>
           <![CDATA[
             if (aEvent.attrName == "checked") {
-                let event = document.createEvent('Events');
-                event.initEvent('select', true, true);
+                let event = document.createEvent("Events");
+                event.initEvent("select", true, true);
                 this.calendar.dispatchEvent(event);
             }
           ]]>
         </body>
       </method>
       <constructor>
         <![CDATA[
           this.setAttribute("autoCheck", "true");
--- a/calendar/base/content/calendar-invitations-manager.js
+++ b/calendar/base/content/calendar-invitations-manager.js
@@ -305,17 +305,17 @@ InvitationsManager.prototype = {
         };
 
         this.mJobsPending = 0;
         for (let i = 0; i < queue.length; i++) {
             let job = queue[i];
             let oldItem = job.oldItem;
             let newItem = job.newItem;
             switch (job.action) {
-                case 'modify':
+                case "modify":
                     this.mJobsPending++;
                     newItem.calendar.modifyItem(newItem,
                                                 oldItem,
                                                 new operationListener(this, jobQueueFinishedCallBack, oldItem));
                     break;
                 default:
                     break;
             }
--- a/calendar/base/content/calendar-item-editing.js
+++ b/calendar/base/content/calendar-item-editing.js
@@ -226,20 +226,20 @@ function setDefaultItemValues(aItem, aCa
  * @param aForceAllDay  (optional) Make sure the event shown in the dialog is an
  *                                   allday event.
  */
 function createEventWithDialog(calendar, startDate, endDate, summary, event, aForceAllday) {
     let onNewEvent = function(item, opcalendar, originalItem, listener) {
         if (item.id) {
             // If the item already has an id, then this is the result of
             // saving the item without closing, and then saving again.
-            doTransaction('modify', item, opcalendar, originalItem, listener);
+            doTransaction("modify", item, opcalendar, originalItem, listener);
         } else {
             // Otherwise, this is an addition
-            doTransaction('add', item, opcalendar, null, listener);
+            doTransaction("add", item, opcalendar, null, listener);
         }
     };
 
     if (event) {
         if (!event.isMutable) {
             event = event.clone();
         }
         // If the event should be created from a template, then make sure to
@@ -281,20 +281,20 @@ function createEventWithDialog(calendar,
  * @param todo          (optional) A template task to show in the dialog.
  * @param initialDate   (optional) The initial date for new task datepickers
  */
 function createTodoWithDialog(calendar, dueDate, summary, todo, initialDate) {
     let onNewItem = function(item, opcalendar, originalItem, listener) {
         if (item.id) {
             // If the item already has an id, then this is the result of
             // saving the item without closing, and then saving again.
-            doTransaction('modify', item, opcalendar, originalItem, listener);
+            doTransaction("modify", item, opcalendar, originalItem, listener);
         } else {
             // Otherwise, this is an addition
-            doTransaction('add', item, opcalendar, null, listener);
+            doTransaction("add", item, opcalendar, null, listener);
         }
     };
 
     if (todo) {
         // If the todo should be created from a template, then make sure to
         // remove the id so that the item obtains a new id when doing the
         // transaction
         if (todo.id) {
@@ -333,17 +333,17 @@ function modifyEventWithDialog(aItem, jo
     let dlg = cal.findItemWindow(aItem);
     if (dlg) {
         dlg.focus();
         disposeJob(job);
         return;
     }
 
     let onModifyItem = function(item, calendar, originalItem, listener) {
-        doTransaction('modify', item, calendar, originalItem, listener);
+        doTransaction("modify", item, calendar, originalItem, listener);
     };
 
     let item = aItem;
     let response;
     if (aPromptOccurrence !== false) {
         [item, , response] = promptOccurrenceModification(aItem, true, "edit");
     }
 
@@ -474,18 +474,18 @@ function openEventDialog(calendarItem, c
         url = "chrome://calendar/content/calendar-summary-dialog.xul";
         args.inTab = false;
     }
 
     if (args.inTab) {
         // open in a tab, currently the read-only summary dialog is
         // never opened in a tab
         args.url = url;
-        let tabmail = document.getElementById('tabmail');
-        let tabtype = cal.isEvent(args.calendarEvent) ? 'calendarEvent' : 'calendarTask';
+        let tabmail = document.getElementById("tabmail");
+        let tabtype = cal.isEvent(args.calendarEvent) ? "calendarEvent" : "calendarTask";
         tabmail.openTab(tabtype, args);
     } else {
         // open in a window
 
         // reminder: event dialog should not be modal (cf bug 122671)
         let features;
         // keyword "dependent" should not be used (cf bug 752206)
         if (Services.appinfo.OS == "WINNT") {
@@ -713,17 +713,17 @@ function setContextPartstat(value, scope
                 newAttendee.participationStatus = value;
                 if (newAttendee.isOrganizer) {
                     newItem.organizer = newAttendee;
                 } else {
                     newItem.removeAttendee(attendee);
                     newItem.addAttendee(newAttendee);
                 }
 
-                doTransaction('modify', newItem, newItem.calendar, oldItem, null);
+                doTransaction("modify", newItem, newItem.calendar, oldItem, null);
             }
         }
     } catch (e) {
         cal.ERROR("Error setting partstat: " + e);
     } finally {
         endBatchTransaction();
     }
 }
--- a/calendar/base/content/calendar-month-view.xml
+++ b/calendar/base/content/calendar-month-view.xml
@@ -426,17 +426,17 @@
           for (let i = 0; i < 7; i++) {
               let hdr = createXULElement("calendar-day-label");
               this.labeldaybox.appendChild(hdr);
               hdr.weekDay = (i + this.mWeekStartOffset) % 7;
               hdr.shortWeekNames = false;
           }
 
           // Set the preference for displaying the week number
-          this.mShowWeekNumber = Preferences.get('calendar.view-minimonth.showWeekNumber', true);
+          this.mShowWeekNumber = Preferences.get("calendar.view-minimonth.showWeekNumber", true);
       ]]></constructor>
 
       <!-- fields -->
 
       <field name="mDateBoxes">null</field>
       <field name="mSelectedDayBox">null</field>
 
       <field name="mShowDaysOutsideMonth">true</field>
@@ -1107,17 +1107,17 @@
           }
         ]]></body>
       </method>
     </implementation>
 
     <handlers>
       <handler event="wheel"><![CDATA[
         const pixelThreshold = 150;
-        let scrollEnabled = Preferences.get('calendar.view.mousescroll', true);
+        let scrollEnabled = Preferences.get("calendar.view.mousescroll", true);
         if (!event.ctrlKey && !event.shiftKey &&
             !event.altKey && !event.metaKey && scrollEnabled) {
             // In the month view, the only thing that can be scrolled
             // is the month the user is in. calendar-base-view takes care
             // of the shift key, so only move the view when no modifier
             // is pressed.
             let deltaView = 0;
             if (event.deltaMode == event.DOM_DELTA_LINE) {
--- a/calendar/base/content/calendar-multiday-view.xml
+++ b/calendar/base/content/calendar-multiday-view.xml
@@ -3215,19 +3215,19 @@
           let otherorient = (orient == "vertical" ? "horizontal" : "vertical");
 
           if (orient == "horizontal") {
               this.pixelsPerMinute = 1.5;
           } else {
               this.pixelsPerMinute = 0.6;
           }
 
-          let normalelems = ['mainbox', 'timebar'];
-          let otherelems = ['labelbox', 'labeldaybox', 'headertimespacer',
-                            'headerbox', 'headerdaybox', 'scrollbox', 'daybox'];
+          let normalelems = ["mainbox", "timebar"];
+          let otherelems = ["labelbox", "labeldaybox", "headertimespacer",
+                            "headerbox", "headerdaybox", "scrollbox", "daybox"];
 
           for (let id of normalelems) {
               document.getAnonymousElementByAttribute(this, "anonid", id).setAttribute("orient", orient);
           }
           for (let id of otherelems) {
               document.getAnonymousElementByAttribute(this, "anonid", id).setAttribute("orient", otherorient);
           }
 
--- a/calendar/base/content/calendar-task-editing.js
+++ b/calendar/base/content/calendar-task-editing.js
@@ -131,17 +131,17 @@ var taskEdit = {
         if (aEvent.keyCode == Components.interfaces.nsIDOMKeyEvent.DOM_VK_RETURN) {
             let edit = aEvent.target;
             if (edit.value && edit.value.length > 0) {
                 let item = cal.createTodo();
                 setDefaultItemValues(item);
                 item.title = edit.value;
 
                 edit.value = "";
-                doTransaction('add', item, item.calendar, null, null);
+                doTransaction("add", item, item.calendar, null, null);
             }
         }
     },
 
     /**
      * Window load function to set up all quick-add textboxes. The texbox must
      * have the class "task-edit-field".
      */
--- a/calendar/base/content/calendar-task-tree.js
+++ b/calendar/base/content/calendar-task-tree.js
@@ -142,17 +142,17 @@ function contextChangeTaskProgress(aEven
                 case 100:
                     newTask.isCompleted = true;
                     break;
                 default:
                     newTask.status = "IN-PROCESS";
                     newTask.completedDate = null;
                     break;
             }
-            doTransaction('modify', newTask, newTask.calendar, task, null);
+            doTransaction("modify", newTask, newTask.calendar, task, null);
         }
         endBatchTransaction();
     }
 }
 
 /**
  * Handler function to change the calendar of the selected tasks. The targeted
  * menuitem must have "calendar" property that implements calICalendar.
@@ -161,17 +161,17 @@ function contextChangeTaskProgress(aEven
  */
 function contextChangeTaskCalendar(aEvent) {
    startBatchTransaction();
    let tasks = getSelectedTasks(aEvent);
    for (let t = 0; t < tasks.length; t++) {
        let task = tasks[t];
        let newTask = task.clone().QueryInterface(Components.interfaces.calITodo);
        newTask.calendar = aEvent.target.calendar;
-       doTransaction('modify', newTask, newTask.calendar, task, null);
+       doTransaction("modify", newTask, newTask.calendar, task, null);
     }
     endBatchTransaction();
 }
 
 /**
  * Handler function to change the priority of the selected tasks, or of
  * the task loaded in the current tab.
  *
@@ -183,17 +183,17 @@ function contextChangeTaskPriority(aEven
     if (tabType == "calendarTask" || tabType == "calendarEvent") {
         editConfigState({ priority: aPriority });
     } else {
         startBatchTransaction();
         let tasks = getSelectedTasks(aEvent);
         for (let task of tasks) {
             let newTask = task.clone().QueryInterface(Components.interfaces.calITodo);
             newTask.priority = aPriority;
-            doTransaction('modify', newTask, newTask.calendar, task, null);
+            doTransaction("modify", newTask, newTask.calendar, task, null);
         }
         endBatchTransaction();
     }
 }
 
 /**
  * Handler function to postpone the start and due dates of the selected
  * tasks, or of the task loaded in the current tab. ISO 8601 format:
@@ -216,17 +216,17 @@ function contextPostponeTask(aEvent, aDu
     } else {
         startBatchTransaction();
         let tasks = getSelectedTasks(aEvent);
 
         tasks.forEach(function(task) {
             if (task.entryDate || task.dueDate) {
                 let newTask = task.clone();
                 cal.shiftItem(newTask, duration);
-                doTransaction('modify', newTask, newTask.calendar, task, null);
+                doTransaction("modify", newTask, newTask.calendar, task, null);
             }
         });
 
         endBatchTransaction();
     }
 }
 
 /**
--- a/calendar/base/content/calendar-task-tree.xml
+++ b/calendar/base/content/calendar-task-tree.xml
@@ -136,19 +136,19 @@
         branch.addObserver("calendar.", this, false);
 
 
         // we want to make several attributes on the column
         // elements persistent, but unfortunately there's no
         // relyable way with the 'persist' feature.
         // that's why we need to store the necessary bits and
         // pieces at the element this binding is attached to.
-        let names = this.getAttribute("visible-columns").split(' ');
-        let ordinals = this.getAttribute("ordinals").split(' ');
-        let widths = this.getAttribute("widths").split(' ');
+        let names = this.getAttribute("visible-columns").split(" ");
+        let ordinals = this.getAttribute("ordinals").split(" ");
+        let widths = this.getAttribute("widths").split(" ");
         let sorted = this.getAttribute("sort-active");
         let sortDirection = this.getAttribute("sort-direction") || "ascending";
         tree = document.getAnonymousNodes(this)[0];
         let treecols = tree.getElementsByTagNameNS(tree.namespaceURI, "treecol");
         for (let i = 0; i < treecols.length; i++) {
             let content = treecols[i].getAttribute("itemproperty");
             if (names.some(
                 function(element) {
@@ -548,17 +548,17 @@
               if (!task || task.recurrenceInfo || task.calendar.readOnly) {
                   return;
               }
               if (aCol != null) {
                   let content = aCol.element.getAttribute("itemproperty");
                   if (content == "completed") {
                       let newTask = task.clone().QueryInterface(Components.interfaces.calITodo);
                       newTask.isCompleted = !task.completedDate;
-                      doTransaction('modify', newTask, newTask.calendar, task, null);
+                      doTransaction("modify", newTask, newTask.calendar, task, null);
                   }
               }
           },
 
           // Called on the view when a header is clicked.
           cycleHeader: function mTV_cycleHeader(aCol) {
               if (!this.selectedColumn) {
                   this.sortDirection = "ascending";
@@ -585,17 +585,17 @@
               let task = this.binding.mTaskArray[aRow];
               if (!task) {
                   return false;
               }
 
               switch (aCol.element.getAttribute("itemproperty")) {
                   case "title":
                       // return title, or "Untitled" if empty/null
-                      return (task.title ? task.title.replace(/\n/g, ' ') : calGetString("calendar", "eventUntitled"));
+                      return (task.title ? task.title.replace(/\n/g, " ") : calGetString("calendar", "eventUntitled"));
                   case "entryDate":
                       return task.recurrenceInfo ? calGetString("dateFormat", "Repeating") : this._formatDateTime(task.entryDate);
                   case "dueDate":
                       return task.recurrenceInfo ? calGetString("dateFormat", "Repeating") : this._formatDateTime(task.dueDate);
                   case "completedDate":
                       return task.recurrenceInfo ? calGetString("dateFormat", "Repeating") : this._formatDateTime(task.completedDate);
                   case "percentComplete":
                       return (task.percentComplete > 0 ? task.percentComplete + "%" : "");
@@ -746,17 +746,17 @@
               }
           },
 
           onKeyPress: function tTV_onKeyPress(event) {
               const kKE = Components.interfaces.nsIDOMKeyEvent;
               switch (event.keyCode || event.which) {
                   case kKE.DOM_VK_DELETE:
                       document.popupNode = this.binding;
-                      document.getElementById('calendar_delete_todo_command').doCommand();
+                      document.getElementById("calendar_delete_todo_command").doCommand();
                       event.preventDefault();
                       event.stopPropagation();
                       break;
                   case kKE.DOM_VK_SPACE:
                       if (this.tree.currentIndex > -1) {
                           let col = document.getAnonymousElementByAttribute(
                               this.binding, "itemproperty", "completed");
                           this.cycleCell(
@@ -846,18 +846,18 @@
           },
 
           onModifyItem: function tTO_onModifyItem(aNewItem, aOldItem) {
               if ((cal.isToDo(aNewItem) || cal.isToDo(aOldItem))) {
                   this.binding.mTreeView.modifyItems(this.binding.mFilter.getOccurrences(aNewItem),
                                                      this.binding.mFilter.getOccurrences(aOldItem));
 
                   // we also need to notify potential listeners.
-                  let event = document.createEvent('Events');
-                  event.initEvent('select', true, false);
+                  let event = document.createEvent("Events");
+                  event.initEvent("select", true, false);
                   this.binding.dispatchEvent(event);
               }
           },
 
           onDeleteItem: function tTO_onDeleteItem(aDeletedItem) {
               if (cal.isToDo(aDeletedItem)) {
                   this.binding.mTreeView.removeItems(this.binding.mFilter.getOccurrences(aDeletedItem));
               }
--- a/calendar/base/content/calendar-task-view.js
+++ b/calendar/base/content/calendar-task-view.js
@@ -26,17 +26,17 @@ var taskDetailsView = {
             Components.classes["@mozilla.org/calendar/datetime-formatter;1"]
             .getService(Components.interfaces.calIDateTimeFormatter);
 
         let item = document.getElementById("calendar-task-tree").currentTask;
         if (displayElement("calendar-task-details-container", item != null) &&
             displayElement("calendar-task-view-splitter", item != null)) {
             displayElement("calendar-task-details-title-row", true);
             document.getElementById("calendar-task-details-title").textContent =
-                (item.title ? item.title.replace(/\n/g, ' ') : "");
+                (item.title ? item.title.replace(/\n/g, " ") : "");
 
             let organizer = item.organizer;
             if (displayElement("calendar-task-details-organizer-row", organizer != null)) {
                 let name = organizer.commonName;
                 if (!name || name.length <= 0) {
                   if (organizer.id && organizer.id.length) {
                       name = organizer.id;
                       let re = new RegExp("^mailto:(.*)", "i");
@@ -169,17 +169,17 @@ var taskDetailsView = {
                 categoriesMap[cat] = false;
             }
         }
 
         if (categoriesMap.toSource() != "({})") {
             let newItem = item.clone();
             newItem.setCategories(panel.categories.length, panel.categories);
 
-            doTransaction('modify', newItem, newItem.calendar, item, null);
+            doTransaction("modify", newItem, newItem.calendar, item, null);
         }
     }
 };
 
 
 /**
  * Updates the currently applied filter for the task view and refreshes the task
  * tree.
--- a/calendar/base/content/calendar-unifinder.js
+++ b/calendar/base/content/calendar-unifinder.js
@@ -757,17 +757,17 @@ var unifinderTreeView = {
         return null;
     },
 
     getCellText: function uTV_getCellText(row, column) {
         let calendarEvent = this.eventArray[row];
 
         switch (column.element.getAttribute("itemproperty")) {
             case "title":
-                return (calendarEvent.title ? calendarEvent.title.replace(/\n/g, ' ') : "");
+                return (calendarEvent.title ? calendarEvent.title.replace(/\n/g, " ") : "");
             case "startDate":
                 return formatUnifinderEventDateTime(calendarEvent.startDate);
 
             case "endDate":
                 let eventEndDate = calendarEvent.endDate.clone();
                 // XXX reimplement
                 // let eventEndDate = getCurrentNextOrPreviousRecurrence(calendarEvent);
                 if (calendarEvent.startDate.isDate) {
@@ -940,18 +940,18 @@ function focusSearch() {
     document.getElementById("unifinder-search-field").focus();
 }
 
 /**
  * Toggles the hidden state of the unifinder.
  */
 function toggleUnifinder() {
     // Toggle the elements
-    goToggleToolbar('bottom-events-box', 'calendar_show_unifinder_command');
-    goToggleToolbar('calendar-view-splitter');
+    goToggleToolbar("bottom-events-box", "calendar_show_unifinder_command");
+    goToggleToolbar("calendar-view-splitter");
 
     unifinderTreeView.treeElement.view = unifinderTreeView;
 
     // When the unifinder is hidden, refreshEventTree is not called. Make sure
     // the event tree is refreshed now.
     if (!isUnifinderHidden() && gUnifinderNeedsRefresh) {
         gUnifinderNeedsRefresh = false;
         refreshEventTree();
--- a/calendar/base/content/calendar-view-core.xml
+++ b/calendar/base/content/calendar-view-core.xml
@@ -147,17 +147,17 @@
         onget="return document.getAnonymousElementByAttribute(this, 'anonid', 'event-name');"/>
       <property name="eventNameTextbox" readonly="true"
         onget="return document.getAnonymousElementByAttribute(this, 'anonid', 'event-name-textbox');"/>
 
       <method name="setEditableLabel">
         <body><![CDATA[
           let evl = this.eventNameLabel;
           let item = this.mOccurrence;
-          evl.value = (item.title ? item.title.replace(/\n/g, ' ')
+          evl.value = (item.title ? item.title.replace(/\n/g, " ")
                                   : cal.calGetString("calendar", "eventUntitled"));
         ]]></body>
       </method>
 
       <method name="setCSSClasses">
         <body><![CDATA[
           let item = this.mOccurrence;
           this.setAttribute("calendar-uri", item.calendar.uri.spec);
--- a/calendar/base/content/calendar-views.js
+++ b/calendar/base/content/calendar-views.js
@@ -34,17 +34,17 @@ var calendarViewController = {
      * @see calICalendarViewController
      */
     createNewEvent: function(aCalendar, aStartTime, aEndTime, aForceAllday) {
         // if we're given both times, skip the dialog
         if (aStartTime && aEndTime && !aStartTime.isDate && !aEndTime.isDate) {
             let item = cal.createEvent();
             setDefaultItemValues(item, aCalendar, aStartTime, aEndTime);
             item.title = calGetString("calendar", "newEvent");
-            doTransaction('add', item, item.calendar, null, null);
+            doTransaction("add", item, item.calendar, null, null);
         } else {
             createEventWithDialog(aCalendar, aStartTime, null, null, null, aForceAllday);
         }
     },
 
     /**
      * Modifies the given occurrence
      * @see calICalendarViewController
@@ -79,17 +79,17 @@ var calendarViewController = {
                         instance.entryDate = aNewStartTime;
                     }
                     if (aNewEndTime && instance.dueDate) {
                         instance.dueDate = aNewEndTime;
                     }
                 }
             }
 
-            doTransaction('modify', instance, instance.calendar, aOccurrence, null);
+            doTransaction("modify", instance, instance.calendar, aOccurrence, null);
         } else {
             modifyEventWithDialog(aOccurrence, null, true);
         }
     },
 
     /**
      * Deletes the given occurrences
      * @see calICalendarViewController
@@ -147,25 +147,25 @@ var calendarViewController = {
             // delete the whole item.
             if (itemToDelete.parentItem.hashId != itemToDelete.hashId) {
                 let savedItem = getSavedItem(itemToDelete);
                 savedItem.newItem.recurrenceInfo
                          .removeOccurrenceAt(itemToDelete.recurrenceId);
                 // Dont start the transaction yet. Do so later, in case the
                 // parent item gets modified more than once.
             } else {
-                doTransaction('delete', itemToDelete, itemToDelete.calendar, null, null);
+                doTransaction("delete", itemToDelete, itemToDelete.calendar, null, null);
             }
         }
 
         // Now handle recurring events. This makes sure that all occurrences
         // that have been passed are deleted.
         for (let hashVal in recurringItems) {
             let ritem = recurringItems[hashVal];
-            doTransaction('modify',
+            doTransaction("modify",
                           ritem.newItem,
                           ritem.newItem.calendar,
                           ritem.oldItem,
                           null);
         }
         endBatchTransaction();
     }
 };
--- a/calendar/base/content/dialogs/calendar-dialog-utils.js
+++ b/calendar/base/content/dialogs/calendar-dialog-utils.js
@@ -282,17 +282,17 @@ function loadReminders(reminders) {
         return;
     }
 
     if (reminders.length > 1 ||
         !matchCustomReminderToMenuitem(reminders[0])) {
         // If more than one alarm is selected, or we didn't find a matching item
         // above, then select the "custom" item and attach the item's reminders to
         // it.
-        reminderList.value = 'custom';
+        reminderList.value = "custom";
         customItem.reminders = reminders;
     }
 
     // remember the selected index
     gLastAlarmSelection = reminderList.selectedIndex;
 }
 
 /**
@@ -307,17 +307,17 @@ function saveReminder(item) {
     for (let alarm of item.getAlarms({})) {
         oldAlarmMap[alarm.icalString] = true;
     }
 
     // Clear the alarms so we can add our new ones.
     item.clearAlarms();
 
     let reminderList = document.getElementById("item-alarm");
-    if (reminderList.value != 'none') {
+    if (reminderList.value != "none") {
         let menuitem = reminderList.selectedItem;
         let reminders;
 
         if (menuitem.reminders) {
             // Custom reminder entries carry their own reminder object with
             // them. Make sure to clone in case these are the original item's
             // reminders.
 
@@ -409,30 +409,30 @@ function getCurrentCalendar() {
  * @param aSuppressDialogs     If true, controls are updated without prompting
  *                               for changes with the dialog
  */
 function commonUpdateReminder(aSuppressDialogs) {
     // if a custom reminder has been selected, we show the appropriate
     // dialog in order to allow the user to specify the details.
     // the result will be placed in the 'reminder-custom-menuitem' tag.
     let reminderList = document.getElementById("item-alarm");
-    if (reminderList.value == 'custom') {
+    if (reminderList.value == "custom") {
         // Clear the reminder icons first, this will make sure that while the
         // dialog is open the default reminder image is not shown which may
         // confuse users.
         removeChildren("reminder-icon-box");
 
         // show the dialog. This call blocks until the dialog is closed. Don't
         // pop up the dialog if aSuppressDialogs was specified or if this
         // happens during initialization of the dialog
         if (!aSuppressDialogs && reminderList.hasAttribute("last-value")) {
             editReminder();
         }
 
-        if (reminderList.value == 'custom') {
+        if (reminderList.value == "custom") {
             // Only do this if the 'custom' item is still selected. If the edit
             // reminder dialog was canceled then the previously selected
             // menuitem is selected, which may not be the custom menuitem.
 
             // If one or no reminders were selected, we have a chance of mapping
             // them to the existing elements in the dropdown.
             let customItem = reminderList.selectedItem;
             if (customItem.reminders.length == 0) {
@@ -458,17 +458,17 @@ function commonUpdateReminder(aSuppressD
     // the checkbox. the same goes for end related reminder and the due date.
     if (isToDo(window.calendarItem)) {
         // In general, (re-)enable the due/entry checkboxes. This will be
         // changed in case the alarms are related to START/END below.
         enableElementWithLock("todo-has-duedate", "reminder-lock");
         enableElementWithLock("todo-has-entrydate", "reminder-lock");
 
         let menuitem = reminderList.selectedItem;
-        if (menuitem.value != 'none') {
+        if (menuitem.value != "none") {
             // In case a reminder is selected, retrieve the array of alarms from
             // it, or create one from the currently selected menuitem.
             let reminders = menuitem.reminders || [createReminderFromMenuitem(menuitem)];
 
             // If a reminder is related to the entry date...
             if (reminders.some(x => x.related == x.ALARM_RELATED_START)) {
                 // ...automatically check 'has entrydate'.
                 if (!getElementValue("todo-has-entrydate", "checked")) {
--- a/calendar/base/content/dialogs/calendar-event-dialog-attendees.js
+++ b/calendar/base/content/dialogs/calendar-event-dialog-attendees.js
@@ -311,34 +311,34 @@ function updateTimezone() {
         if (startTimezone && endTimezone &&
             (compareObjects(startTimezone, endTimezone) || endTimezone.isUTC)) {
             equalTimezones = true;
         }
 
         let tzStart = document.getElementById("timezone-starttime");
         let tzEnd = document.getElementById("timezone-endtime");
         if (startTimezone != null) {
-            tzStart.removeAttribute('collapsed');
+            tzStart.removeAttribute("collapsed");
             tzStart.value = startTimezone.displayName || startTimezone.tzid;
         } else {
-            tzStart.setAttribute('collapsed', 'true');
+            tzStart.setAttribute("collapsed", "true");
         }
 
         // we never display the second timezone if both are equal
         if (endTimezone != null && !equalTimezones) {
-            tzEnd.removeAttribute('collapsed');
+            tzEnd.removeAttribute("collapsed");
             tzEnd.value = endTimezone.displayName || endTimezone.tzid;
         } else {
-            tzEnd.setAttribute('collapsed', 'true');
+            tzEnd.setAttribute("collapsed", "true");
         }
     } else {
         document.getElementById("timezone-starttime")
-            .setAttribute('collapsed', 'true');
+            .setAttribute("collapsed", "true");
         document.getElementById("timezone-endtime")
-            .setAttribute('collapsed', 'true');
+            .setAttribute("collapsed", "true");
     }
 
     gIgnoreUpdate = false;
 }
 
 /**
  * Updates gStartDate from the start time picker "event-starttime"
  */
@@ -626,34 +626,34 @@ function onChangeCalendar(calendar) {
     gIsInvitation = false;
     calendar = cal.wrapInstance(args.item.calendar, Components.interfaces.calISchedulingSupport);
     if (calendar) {
         gIsInvitation = calendar.isInvitation(args.item);
     }
 
     if (gIsReadOnly || gIsInvitation) {
         document.getElementById("next-slot")
-            .setAttribute('disabled', 'true');
+            .setAttribute("disabled", "true");
         document.getElementById("previous-slot")
-            .setAttribute('disabled', 'true');
+            .setAttribute("disabled", "true");
     }
 
     let freebusy = document.getElementById("freebusy-grid");
     freebusy.onChangeCalendar(calendar);
 }
 
 /**
  * Updates the slot buttons.
  */
 function updateButtons() {
     let previousButton = document.getElementById("previous-slot");
     if (gUndoStack.length > 0) {
-        previousButton.removeAttribute('disabled');
+        previousButton.removeAttribute("disabled");
     } else {
-        previousButton.setAttribute('disabled', 'true');
+        previousButton.setAttribute("disabled", "true");
     }
 }
 
 /**
  * Handler function called to advance to the next slot.
  */
 function onNextSlot() {
     // Store the current setting in the undo-stack.
--- a/calendar/base/content/dialogs/calendar-event-dialog-attendees.xml
+++ b/calendar/base/content/dialogs/calendar-event-dialog-attendees.xml
@@ -193,18 +193,18 @@
           // We always clone the first row. The problem is that the first row
           // could be focused. When we clone that row, we end up with a cloned
           // XUL textbox that has a focused attribute set.  Therefore we think
           // we're focused and don't properly refocus.  The best solution to this
           // would be to clone a template row that didn't really have any presentation,
           // rather than using the real visible first row of the listbox.
           // For now we'll just put in a hack that ensures the focused attribute
           // is never copied when the node is cloned.
-          if (input.getAttribute('focused') != '') {
-              input.removeAttribute('focused');
+          if (input.getAttribute("focused") != "") {
+              input.removeAttribute("focused");
           }
 
           aParentNode.appendChild(newNode);
 
           // the template could have its fields disabled,
           // that's why we need to reset their status.
           input.removeAttribute("disabled");
           userTypeIcon.removeAttribute("disabled");
@@ -238,17 +238,17 @@
           let cn = aAttendee.commonName || "";
           let inputValue = cal.removeMailTo(aAttendee.id || "");
           if (cn.length) {
               // Make the commonName appear in quotes if it contains a
               // character that could confuse the header parser
               if (cn.search(/[,;<>@]/) != -1) {
                   cn = '"' + cn + '"';
               }
-              inputValue = inputValue.length ? cn + ' <' + inputValue + '>' : cn;
+              inputValue = inputValue.length ? cn + " <" + inputValue + ">" : cn;
           }
 
           // trim spaces if any
           inputValue = inputValue.trim();
 
           // don't set value with null, otherwise autocomplete stops working,
           // but make sure attendee and dirty are set
           if (inputValue.length) {
@@ -347,18 +347,18 @@
               // We always clone the first row.  The problem is that the first row
               // could be focused.  When we clone that row, we end up with a cloned
               // XUL textbox that has a focused attribute set.  Therefore we think
               // we're focused and don't properly refocus.  The best solution to this
               // would be to clone a template row that didn't really have any presentation,
               // rather than using the real visible first row of the listbox.
               // For now we'll just put in a hack that ensures the focused attribute
               // is never copied when the node is cloned.
-              if (input.getAttribute('focused') != '') {
-                  input.removeAttribute('focused');
+              if (input.getAttribute("focused") != "") {
+                  input.removeAttribute("focused");
               }
 
               // focus on new input widget
               if (aSetFocus) {
                   this.setFocus(newNode);
               }
           }
           return newNode;
@@ -567,18 +567,18 @@
             let input = document.getAnonymousElementByAttribute(listitem, "anonid", "input");
             input.removeAttribute("disabled");
             input.setAttribute("id", "attendeeCol3#" + rowNumber);
 
             input.attendee = newAttendee;
             input.value = entry;
             input.setAttribute("value", entry);
             input.setAttribute("dirty", "true");
-            if (input.getAttribute('focused') != '') {
-                input.removeAttribute('focused');
+            if (input.getAttribute("focused") != "") {
+                input.removeAttribute("focused");
             }
 
             let roleStatusIcon = document.getAnonymousElementByAttribute(listitem, "anonid", "rolestatus-icon");
             roleStatusIcon.removeAttribute("disabled");
             roleStatusIcon.setAttribute("id", "attendeeCol1#" + rowNumber);
             roleStatusIcon.setAttribute("class", "role-icon");
             roleStatusIcon.setAttribute("role", newAttendee.role);
 
@@ -649,18 +649,18 @@
                   let entry = {
                       dirty: isdirty,
                       calid: email
                   };
                   list.push(entry);
               }
           }
 
-          let event = document.createEvent('Events');
-          event.initEvent('modify', true, false);
+          let event = document.createEvent("Events");
+          event.initEvent("modify", true, false);
           event.details = list;
           this.dispatchEvent(event);
         ]]></body>
       </method>
 
      <method name="updateTooltip">
       <parameter name="targetIcon"/>
       <body><![CDATA[
@@ -717,17 +717,17 @@
         ]]></body>
       </method>
 
       <method name="calcContentHeight">
         <body><![CDATA[
           let listbox =
               document.getAnonymousElementByAttribute(
                   this, "anonid", "listbox");
-          let items = listbox.getElementsByTagNameNS('*', 'listitem');
+          let items = listbox.getElementsByTagNameNS("*", "listitem");
           this.mContentHeight = 0;
           if (items.length > 0) {
               let i = 0;
               do {
                   this.mRowHeight = items[i].boxObject.height;
                   ++i;
               } while (i < items.length && !this.mRowHeight);
               this.mContentHeight = this.mRowHeight * items.length;
@@ -808,17 +808,17 @@
       <!-- This method returns the <xul:listitem> at row numer 'aRow' -->
       <method name="getListItem">
         <parameter name="aRow"/>
         <body><![CDATA[
           let listbox =
               document.getAnonymousElementByAttribute(
                   this, "anonid", "listbox");
           if (listbox && aRow > 0) {
-              let listitems = listbox.getElementsByTagNameNS('*', 'listitem');
+              let listitems = listbox.getElementsByTagNameNS("*", "listitem");
               if (listitems && listitems.length >= aRow) {
                   return listitems[aRow - 1];
               }
           }
           return 0;
         ]]></body>
       </method>
 
@@ -879,17 +879,17 @@
       </method>
 
       <method name="setFocus">
         <parameter name="aRow"/>
         <body><![CDATA[
           let self = this;
           let set_focus = function() {
               let node;
-              if (typeof aRow == 'number') {
+              if (typeof aRow == "number") {
                 node = self.getListItem(aRow);
               } else {
                 node = aRow;
               }
 
               // do we need to scroll in order to see the selected row?
               let listbox =
                   document.getAnonymousElementByAttribute(
@@ -933,17 +933,17 @@
       </method>
 
       <property name="numColumns">
         <getter><![CDATA[
           if (!this.mNumColumns) {
               let listbox =
                   document.getAnonymousElementByAttribute(
                       this, "anonid", "listbox");
-              let listCols = listbox.getElementsByTagNameNS('*', 'listcol');
+              let listCols = listbox.getElementsByTagNameNS("*", "listcol");
               this.mNumColumns = listCols.length;
               if (!this.mNumColumns) {
                   this.mNumColumns = 1;
               }
           }
           return this.mNumColumns;
         ]]></getter>
       </property>
@@ -964,17 +964,17 @@
         <parameter name="noAdvance"/>
         <body><![CDATA[
           function parseHeaderValue(aMsgIAddressObject) {
               if (aMsgIAddressObject.name.match(/[<>@,]/)) {
                   // special handling only needed for a name with a comma which are not already quoted
                   return (aMsgIAddressObject.name.match(/^".*"$/)
                           ? aMsgIAddressObject.name
                           : '"' + aMsgIAddressObject.name + '"'
-                         ) + ' <' + aMsgIAddressObject.email + '>';
+                         ) + " <" + aMsgIAddressObject.email + ">";
               } else {
                   return aMsgIAddressObject.toString();
               }
           }
 
           let arrowLength = 1;
           if (element.value.includes(",") || element.value.match(/^[^"].*[<>@,].*[^"] <.+@.+>$/)) {
               let strippedAddresses = element.value.replace(/.* >> /, "");
@@ -1010,18 +1010,18 @@
                   this.appendNewRow(true);
               } else {
                   let input = this.getInputElement(row);
                   if (input.hasAttribute("disabled")) {
                       return;
                   }
                   this.setFocus(row);
               }
-              let event = document.createEvent('Events');
-              event.initEvent('rowchange', true, false);
+              let event = document.createEvent("Events");
+              event.initEvent("rowchange", true, false);
               event.details = row;
               this.dispatchEvent(event);
           }
         ]]></body>
       </method>
 
       <method name="deleteHit">
         <parameter name="aElement"/>
@@ -1034,18 +1034,18 @@
           let row = this.getRowByInputElement(aElement);
           this.deleteRow(row);
           if (row > 0) {
               row = row - 1;
           }
           this.setFocus(row);
           this.onModify();
 
-          let event = document.createEvent('Events');
-          event.initEvent('rowchange', true, false);
+          let event = document.createEvent("Events");
+          event.initEvent("rowchange", true, false);
           event.details = row;
           this.dispatchEvent(event);
         ]]></body>
       </method>
 
       <method name="deleteRow">
         <parameter name="aRow"/>
         <body><![CDATA[
@@ -1433,18 +1433,18 @@
           this.mMargin -= offset;
 
           // Set the styles based on the calculations above for the 'selection-bar'.
           let style = "width: " + this.mWidth +
                       "px; margin-inline-start: " + this.mMargin +
                       "px; margin-top: " + this.mHeaderHeight + "px;";
           this.mSelectionbar.setAttribute("style", style);
 
-          let event = document.createEvent('Events');
-          event.initEvent('timechange', true, false);
+          let event = document.createEvent("Events");
+          event.initEvent("timechange", true, false);
           event.startDate = this.mStartDate;
           event.endDate = this.mEndDate.clone();
           if (event.endDate.isDate) {
               event.endDate.day--;
           }
           event.endDate.makeImmutable();
           this.dispatchEvent(event);
         ]]></body>
--- a/calendar/base/content/dialogs/calendar-event-dialog-freebusy.xml
+++ b/calendar/base/content/dialogs/calendar-event-dialog-freebusy.xml
@@ -455,18 +455,18 @@
       </method>
 
       <method name="onLoad">
         <body><![CDATA[
             this.initialize();
             let template =
                 document.getAnonymousElementByAttribute(
                     this, "anonid", "template");
-            let event = document.createEvent('Events');
-            event.initEvent('timebar', true, false);
+            let event = document.createEvent("Events");
+            event.initEvent("timebar", true, false);
             event.details = this.contentWidth;
             event.height = template.dayHeight;
             this.dispatchEvent(event);
         ]]></body>
       </method>
 
       <method name="initialize">
         <body><![CDATA[
@@ -1195,18 +1195,18 @@
           // We always clone the first row.  The problem is that the first row
           // could be focused.  When we clone that row, we end up with a cloned
           // XUL textbox that has a focused attribute set.  Therefore we think
           // we're focused and don't properly refocus.  The best solution to this
           // would be to clone a template row that didn't really have any presentation,
           // rather than using the real visible first row of the listbox.
           // For now we'll just put in a hack that ensures the focused attribute
           // is never copied when the node is cloned.
-          if (grid.getAttribute('focused') != '') {
-              grid.removeAttribute('focused');
+          if (grid.getAttribute("focused") != "") {
+              grid.removeAttribute("focused");
           }
         ]]></body>
       </method>
 
       <property name="scroll">
         <setter><![CDATA[
           this.mScrollOffset = val;
           for (let i = 1; i <= this.mMaxFreeBusy; i++) {
@@ -1418,17 +1418,17 @@
       <!-- This method returns the <xul:listitem> at row numer 'aRow' -->
       <method name="getListItem">
         <parameter name="aRow"/>
         <body><![CDATA[
           let listbox =
               document.getAnonymousElementByAttribute(
                   this, "anonid", "listbox");
           if (listbox && aRow > 0) {
-              let listitems = listbox.getElementsByTagNameNS('*', 'listitem');
+              let listitems = listbox.getElementsByTagNameNS("*", "listitem");
               if (listitems && listitems.length >= aRow) {
                   return listitems[aRow - 1];
               }
           }
           return 0;
         ]]></body>
       </method>
 
@@ -1497,17 +1497,17 @@
         ]]></body>
       </method>
 
       <method name="calcContentHeight">
         <body><![CDATA[
           let listbox =
               document.getAnonymousElementByAttribute(
                   this, "anonid", "listbox");
-          let items = listbox.getElementsByTagNameNS('*', 'listitem');
+          let items = listbox.getElementsByTagNameNS("*", "listitem");
           this.mContentHeight = 0;
           if (items.length > 0) {
               let i = 0;
               do {
                   this.mRowHeight = items[i].boxObject.height;
                   ++i;
               } while (i < items.length && !this.mRowHeight);
               this.mContentHeight = this.mRowHeight * items.length;
@@ -1570,17 +1570,17 @@
       </method>
 
       <property name="numColumns">
         <getter><![CDATA[
           if (!this.mNumColumns) {
               let listbox =
                   document.getAnonymousElementByAttribute(
                       this, "anonid", "listbox");
-              let listCols = listbox.getElementsByTagNameNS('*', 'listcol');
+              let listCols = listbox.getElementsByTagNameNS("*", "listcol");
               this.mNumColumns = listCols.length || 1;
           }
           return this.mNumColumns;
         ]]></getter>
       </property>
 
       <method name="initTimeRange">
         <body><![CDATA[
--- a/calendar/base/content/dialogs/calendar-event-dialog-recurrence.js
+++ b/calendar/base/content/dialogs/calendar-event-dialog-recurrence.js
@@ -52,17 +52,17 @@ function onLoad() {
                 rule = cal.wrapInstance(rules[0], Components.interfaces.calIRecurrenceRule);
             }
         } catch (ex) {
             Components.utils.reportError(ex);
         }
     }
     if (!rule) {
         rule = createRecurrenceRule();
-        rule.type = 'DAILY';
+        rule.type = "DAILY";
         rule.interval = 1;
         rule.count = -1;
     }
     initializeControls(rule);
 
     // Update controls
     updateRecurrenceDeck();
 
@@ -476,30 +476,30 @@ function disableOrEnable(item) {
  * Disables all fields that have an attribute that matches the argument and is
  * set to "true".
  *
  * @param aAttributeName    The attribute to search for.
  */
 function disableRecurrenceFields(aAttributeName) {
     let disableElements = document.getElementsByAttribute(aAttributeName, "true");
     for (let i = 0; i < disableElements.length; i++) {
-        disableElements[i].setAttribute('disabled', 'true');
+        disableElements[i].setAttribute("disabled", "true");
     }
 }
 
 /**
  * Enables all fields that have an attribute that matches the argument and is
  * set to "true".
  *
  * @param aAttributeName    The attribute to search for.
  */
 function enableRecurrenceFields(aAttributeName) {
     let enableElements = document.getElementsByAttribute(aAttributeName, "true");
     for (let i = 0; i < enableElements.length; i++) {
-        enableElements[i].removeAttribute('disabled');
+        enableElements[i].removeAttribute("disabled");
     }
 }
 
 /**
  * Split rules into negative and positive rules.
  *
  * XXX This function is duplicate from calendar-dialog-utils.js, which we may
  * want to include in this dialog.
--- a/calendar/base/content/dialogs/calendar-print-dialog.js
+++ b/calendar/base/content/dialogs/calendar-print-dialog.js
@@ -80,25 +80,25 @@ function getPrintSettings(receiverFunc) 
     settings.end = null;
     settings.eventList = [];
     settings.printEvents = document.getElementById("events").checked;
     settings.printTasks = document.getElementById("tasks").checked;
     settings.printCompletedTasks = document.getElementById("completed-tasks").checked;
     settings.printTasksWithNoDueDate = document.getElementById("tasks-with-no-due-date").checked;
     let theView = getCalendarView();
     switch (document.getElementById("view-field").selectedItem.value) {
-    case 'currentView':
-    case '': // just in case
+    case "currentView":
+    case "": // just in case
         settings.start = theView.startDay.clone();
         settings.end = theView.endDay.clone();
         settings.end.day += 1;
         settings.start.isDate = false;
         settings.end.isDate = false;
         break;
-    case 'selected': {
+    case "selected": {
         let selectedItems = theView.getSelectedItems({});
         settings.eventList = selectedItems.filter(function(item) {
             if (cal.isEvent(item) && !settings.printEvents) {
                 return false;
             }
             if (cal.isToDo(item) && !settings.printTasks) {
                 return false;
             }
@@ -113,17 +113,17 @@ function getPrintSettings(receiverFunc) 
                 settings.eventList.push(task);
             }
         }
 
         // We've set the event list above, no need to fetch items below.
         requiresFetch = false;
         break;
     }
-    case 'custom':
+    case "custom":
         // We return the time from the timepickers using the selected
         // timezone, as not doing so in timezones with a positive offset
         // from UTC may cause the printout to include the wrong days.
         let currentTimezone = cal.calendarDefaultTimezone();
         settings.start = cal.jsDateToDateTime(document.getElementById("start-date-picker").value);
         settings.start = settings.start.getInTimezone(currentTimezone);
         settings.end = cal.jsDateToDateTime(document.getElementById("end-date-picker").value);
         settings.end = settings.end.getInTimezone(currentTimezone);
--- a/calendar/base/content/dialogs/calendar-properties-dialog.js
+++ b/calendar/base/content/dialogs/calendar-properties-dialog.js
@@ -14,17 +14,17 @@ var gCalendar;
 
 /**
  * This function gets called when the calendar properties dialog gets opened. To
  * open the window, use an object as argument. The object needs a 'calendar'
  * attribute that passes the calendar in question.
  */
 function onLoad() {
     gCalendar = window.arguments[0].calendar;
-    let calColor = gCalendar.getProperty('color');
+    let calColor = gCalendar.getProperty("color");
 
     document.getElementById("calendar-name").value = gCalendar.name;
     document.getElementById("calendar-color").value = calColor || "#A8C2E1";
     document.getElementById("calendar-uri").value = gCalendar.uri.spec;
     document.getElementById("read-only").checked = gCalendar.readOnly;
 
     // Set up refresh interval
     initRefreshInterval();
@@ -37,17 +37,17 @@ function onLoad() {
         cacheBox.setAttribute("disable-capability", "true");
         cacheBox.hidden = true;
         cacheBox.disabled = true;
     }
     cacheBox.checked = alwaysCache || (canCache && gCalendar.getProperty("cache.enabled"));
 
     // Set up the show alarms row and checkbox
     let suppressAlarmsRow = document.getElementById("calendar-suppressAlarms-row");
-    let suppressAlarms = gCalendar.getProperty('suppressAlarms');
+    let suppressAlarms = gCalendar.getProperty("suppressAlarms");
     document.getElementById("fire-alarms").checked = !suppressAlarms;
 
     suppressAlarmsRow.hidden =
         (gCalendar.getProperty("capabilities.alarms.popup.supported") === false);
 
     // Set up the disabled checkbox
     let calendarDisabled = false;
     if (gCalendar.getProperty("force-disabled")) {
--- a/calendar/base/content/import-export.js
+++ b/calendar/base/content/import-export.js
@@ -27,23 +27,23 @@ function loadEventsFromFile(aCalendar) {
             calGetString("calendar", "filepickerTitleImport"),
             nsIFilePicker.modeOpen);
     fp.defaultExtension = "ics";
 
     // Get a list of importers
     let contractids = [];
     let catman = Components.classes["@mozilla.org/categorymanager;1"]
                            .getService(Components.interfaces.nsICategoryManager);
-    let catenum = catman.enumerateCategory('cal-importers');
+    let catenum = catman.enumerateCategory("cal-importers");
     let currentListLength = 0;
     let defaultCIDIndex = 0;
     while (catenum.hasMoreElements()) {
         let entry = catenum.getNext();
         entry = entry.QueryInterface(Components.interfaces.nsISupportsCString);
-        let contractid = catman.getCategoryEntry('cal-importers', entry);
+        let contractid = catman.getCategoryEntry("cal-importers", entry);
         let importer;
         try {
             importer = Components.classes[contractid]
                                  .getService(Components.interfaces.calIImporter);
         } catch (e) {
             cal.WARN("Could not initialize importer: " + contractid + "\nError: " + e);
             continue;
         }
@@ -223,23 +223,23 @@ function saveEventsToFile(calendarEventA
     }
 
     fp.defaultExtension = "ics";
 
     // Get a list of exporters
     let contractids = [];
     let catman = Components.classes["@mozilla.org/categorymanager;1"]
                            .getService(Components.interfaces.nsICategoryManager);
-    let catenum = catman.enumerateCategory('cal-exporters');
+    let catenum = catman.enumerateCategory("cal-exporters");
     let currentListLength = 0;
     let defaultCIDIndex = 0;
     while (catenum.hasMoreElements()) {
         let entry = catenum.getNext();
         entry = entry.QueryInterface(Components.interfaces.nsISupportsCString);
-        let contractid = catman.getCategoryEntry('cal-exporters', entry);
+        let contractid = catman.getCategoryEntry("cal-exporters", entry);
         let exporter;
         try {
             exporter = Components.classes[contractid]
                                  .getService(Components.interfaces.calIExporter);
         } catch (e) {
             cal.WARN("Could not initialize exporter: " + contractid + "\nError: " + e);
             continue;
         }
--- a/calendar/base/content/preferences/editCategory.js
+++ b/calendar/base/content/preferences/editCategory.js
@@ -44,36 +44,36 @@ function doOK() {
 function categoryNameChanged() {
     let newValue = document.getElementById("categoryName").value;
 
     // The user removed the category name, assign the color automatically again.
     if (newValue == "") {
         customColorSelected = false;
     }
 
-    if (!customColorSelected && document.getElementById('useColor').checked) {
+    if (!customColorSelected && document.getElementById("useColor").checked) {
         // Color is wanted, choose the color based on the category name's hash.
         document.getElementById("categoryColor").value = cal.hashColor(newValue);
     }
 }
 
 /**
  * Handler function to be called when the color picker's color has been changed.
  */
 function colorPickerChanged() {
-    document.getElementById('useColor').checked = true;
+    document.getElementById("useColor").checked = true;
     customColorSelected = true;
 }
 
 /**
  * Handler called when the use color checkbox is toggled.
  */
 function toggleColor() {
-    let useColor = document.getElementById('useColor').checked;
-    let categoryColor = document.getElementById('categoryColor');
+    let useColor = document.getElementById("useColor").checked;
+    let categoryColor = document.getElementById("categoryColor");
 
     if (useColor) {
         categoryColor.setAttribute("type", "color");
         if (toggleColor.lastColor) {
             categoryColor.value = toggleColor.lastColor;
         }
     } else {
         categoryColor.setAttribute("type", "button");
@@ -82,17 +82,17 @@ function toggleColor() {
     }
 }
 
 /**
  * Click handler for the color picker. Turns the button back into a colorpicker
  * when clicked.
  */
 function clickColor() {
-    let categoryColor = document.getElementById('categoryColor');
+    let categoryColor = document.getElementById("categoryColor");
     if (categoryColor.getAttribute("type") == "button") {
         colorPickerChanged();
         toggleColor();
         categoryColor.click();
     }
 }
 
 /**
--- a/calendar/base/content/today-pane.js
+++ b/calendar/base/content/today-pane.js
@@ -126,19 +126,19 @@ var TodayPane = {
                 switchCalendarView("day", true);
             } else if (aEvent.target.id == "currentWeek-label") {
                 switchCalendarView("week", true);
             } else if (aEvent.target.parentNode.id == "monthNameContainer") {
                 switchCalendarView("month", true);
             } else {
                 return;
             }
-            let title = document.getElementById('calendar-tab-button')
-                            .getAttribute('tooltiptext');
-            document.getElementById('tabmail').openTab('calendar', { title: title });
+            let title = document.getElementById("calendar-tab-button")
+                            .getAttribute("tooltiptext");
+            document.getElementById("tabmail").openTab("calendar", { title: title });
             currentView().goToDay(agendaListbox.today.start);
         }
     },
 
     /**
      * Set conditions about start dragging on day-label or start switching
      * with time on navigation buttons.
      */
@@ -243,17 +243,17 @@ var TodayPane = {
             aEvent.type == "mouseout" &&
              element.id != "messengerWindow") {
             return;
         }
         if (TodayPane.minidayTimer) {
             clearTimeout(TodayPane.minidayTimer);
             delete TodayPane.minidayTimer;
             if (TodayPane.switchCounter == 0 && !TodayPane.minidayDrag.session) {
-                let dir = element.getAttribute('dir');
+                let dir = element.getAttribute("dir");
                 TodayPane.advance(parseInt(dir, 10));
             }
         }
         if (element.id == "previous-day-button" ||
              element.id == "next-day-button") {
             TodayPane.switchCounter = 0;
             let button = document.getElementById(element.id);
             button.removeEventListener("mouseout", TodayPane.stopSwitching, false);
@@ -457,18 +457,18 @@ var TodayPane = {
     },
 
     /**
      * Generates the todaypane toggle command when the today-splitter
      * is being collapsed or uncollapsed.
      */
     onCommandTodaySplitter: function onCommandTodaySplitter() {
         let todaypane = document.getElementById("today-pane-panel");
-        let splitterState = document.getElementById('today-splitter').getAttribute("state");
+        let splitterState = document.getElementById("today-splitter").getAttribute("state");
         if (splitterState == "collapsed" && todaypane.isVisible() ||
             splitterState != "collapsed" && !todaypane.isVisible()) {
-              document.getElementById('calendar_toggle_todaypane_command').doCommand();
+              document.getElementById("calendar_toggle_todaypane_command").doCommand();
         }
     }
 };
 
 window.addEventListener("load", TodayPane.onLoad, false);
 window.addEventListener("unload", TodayPane.onUnload, false);
--- a/calendar/base/content/widgets/calendar-alarm-widget.xml
+++ b/calendar/base/content/widgets/calendar-alarm-widget.xml
@@ -164,27 +164,27 @@
       </method>
 
       <method name="showDetails">
         <parameter name="event"/>
         <body><![CDATA[
           if (event.type == "click" ||
               (event.type == "keypress" &&
                event.keyCode == event.DOM_VK_RETURN)) {
-              let detailsEvent = document.createEvent('Events');
-              detailsEvent.initEvent('itemdetails', true, false);
+              let detailsEvent = document.createEvent("Events");
+              detailsEvent.initEvent("itemdetails", true, false);
               this.dispatchEvent(detailsEvent);
           }
         ]]></body>
       </method>
 
       <method name="dismissAlarm">
         <body><![CDATA[
-          let dismissEvent = document.createEvent('Events');
-          dismissEvent.initEvent('dismiss', true, false);
+          let dismissEvent = document.createEvent("Events");
+          dismissEvent.initEvent("dismiss", true, false);
           this.dispatchEvent(dismissEvent);
         ]]></body>
       </method>
     </implementation>
   </binding>
 
   <binding id="calendar-snooze-popup">
     <content ignorekeys="true">
@@ -270,18 +270,18 @@
         unitValue.value = snoozePref;
 
         updateAccessibleName();
       ]]></constructor>
 
       <method name="snoozeAlarm">
         <parameter name="minutes"/>
         <body><![CDATA[
-          let snoozeEvent = document.createEvent('Events');
-          snoozeEvent.initEvent('snooze', true, false);
+          let snoozeEvent = document.createEvent("Events");
+          snoozeEvent.initEvent("snooze", true, false);
           snoozeEvent.detail = minutes;
 
           // The onsnooze attribute is set on the menupopup, this binding is
           // instanciated on the menupopup's arrowscrollbox. Therefore we need
           // to go up one node.
           let handler = this.parentNode.getAttribute("onsnooze");
           let cancel = false;
           if (handler) {
--- a/calendar/base/content/widgets/calendar-list-tree.xml
+++ b/calendar/base/content/widgets/calendar-list-tree.xml
@@ -395,17 +395,17 @@
                 onset="return setBooleanAttribute(this, 'ignoredisabledstate', val);"/>
 
       <method name="sortOrderChanged">
         <parameter name=""/>
         <body><![CDATA[
           if (this.mAddingFromComposite) {
               return;
           }
-          let event = document.createEvent('Events');
+          let event = document.createEvent("Events");
           event.initEvent("SortOrderChanged", true, false);
           event.sortOrder = this.sortOrder;
           this.dispatchEvent(event);
 
           let handler = this.getAttribute("onSortOrderChanged");
           if (handler) {
               // Call the given code in a function
               let func = new Function("event", handler);
--- a/calendar/base/content/widgets/minimonth.xml
+++ b/calendar/base/content/widgets/minimonth.xml
@@ -893,29 +893,29 @@
 
                     if (monthChanged) {
                         this.resetAttributesForDate(day.date);
                     }
                 }
             }
 
             if (monthChanged) {
-                this.fireEvent('monthchange');
+                this.fireEvent("monthchange");
             }
 
             if (this.getAttribute("freebusy") == "true") {
                 this.getItems();
             }
         ]]></body>
       </method>
       <!--Attention - duplicate!!!!-->
       <method name="fireEvent">
         <parameter name="aEventName"/>
         <body><![CDATA[
-            let event = document.createEvent('Events');
+            let event = document.createEvent("Events");
             event.initEvent(aEventName, true, true);
             this.dispatchEvent(event);
         ]]></body>
       </method>
 
       <method name="getBoxForDate">
         <parameter name="aDate"/>
         <body><![CDATA[
@@ -1030,26 +1030,26 @@
             if (this.mIsReadOnly) {
                return;
             }
             if (this.mSelected) {
               this.mSelected.removeAttribute("selected");
             }
             this.mSelected = aDayBox;
             this.value = aDayBox.date;
-            this.fireEvent('select');
+            this.fireEvent("select");
           ]]></body>
       </method>
 
       <method name="update">
         <parameter name="aValue"/>
         <body><![CDATA[
           this.mValue = aValue;
           if (this.mValue) {
-            this.fireEvent('change');
+            this.fireEvent("change");
           }
           this.showMonth(aValue);
         ]]></body>
       </method>
 
       <method name="hidePopupList">
         <body><![CDATA[
           if (!this.mIsReadOnly) {
--- a/calendar/base/modules/calPrintUtils.jsm
+++ b/calendar/base/modules/calPrintUtils.jsm
@@ -33,17 +33,17 @@ cal.print = {
         sheet.insertedCategoryRules = sheet.insertedCategoryRules || {};
 
         for (let category of categories) {
             let prefName = cal.formatStringForCSSRule(category);
             let color = Preferences.get("calendar.category.color." + prefName) || "transparent";
             if (!(prefName in sheet.insertedCategoryRules)) {
                 sheet.insertedCategoryRules[prefName] = true;
                 let ruleAdd = ' .category-color-box[categories~="' + prefName + '"] { ' +
-                              ' border: 2px solid ' + color + '; }' + "\n";
+                              " border: 2px solid " + color + "; }\n";
                 sheet.textContent += ruleAdd;
             }
         }
     },
 
     /**
      * Add calendar styles to the document's "sheet" element. This is needed
      * since the HTML created is serialized, so we can't dynamically set the
@@ -57,18 +57,18 @@ cal.print = {
         let sheet = document.getElementById("sheet");
         let color = calendar.getProperty("color") || "#A8C2E1";
         sheet.insertedCalendarRules = sheet.insertedCalendarRules || {};
 
         if (!(calendar.id in sheet.insertedCalendarRules)) {
             sheet.insertedCalendarRules[calendar.id] = true;
             let formattedId = cal.formatStringForCSSRule(calendar.id);
             let ruleAdd = ' .calendar-color-box[calendar-id="' + formattedId + '"] { ' +
-                          ' background-color: ' + color + '; ' +
-                          ' color: ' + cal.getContrastingTextColor(color) + '; }' + "\n";
+                          " background-color: " + color + "; " +
+                          " color: " + cal.getContrastingTextColor(color) + "; }\n";
             sheet.textContent += ruleAdd;
         }
     },
 
     /**
      * Serializes the given item by setting marked nodes to the item's content.
      * Has some expectations about the DOM document (in CSS-selector-speak), all
      * following nodes MUST exist.
--- a/calendar/base/modules/calRecurrenceUtils.jsm
+++ b/calendar/base/modules/calRecurrenceUtils.jsm
@@ -50,29 +50,29 @@ function recurrenceRule2String(recurrenc
     // set recurrence info. Bail out if there's more
     // than a single rule or something other than a rule.
     recurrenceInfo = recurrenceInfo.clone();
     let rrules = splitRecurrenceRules(recurrenceInfo);
     if (rrules[0].length == 1) {
         let rule = cal.wrapInstance(rrules[0][0], Components.interfaces.calIRecurrenceRule);
         // Currently we allow only for BYDAY, BYMONTHDAY, BYMONTH rules.
         if (rule &&
-            !checkRecurrenceRule(rule, ['BYSECOND',
-                                        'BYMINUTE',
-                                        // 'BYDAY',
-                                        'BYHOUR',
-                                        // 'BYMONTHDAY',
-                                        'BYYEARDAY',
-                                        'BYWEEKNO',
-                                        // 'BYMONTH',
-                                        'BYSETPOS'])) {
+            !checkRecurrenceRule(rule, ["BYSECOND",
+                                        "BYMINUTE",
+                                        // "BYDAY",
+                                        "BYHOUR",
+                                        // "BYMONTHDAY",
+                                        "BYYEARDAY",
+                                        "BYWEEKNO",
+                                        // "BYMONTH",
+                                        "BYSETPOS"])) {
             let dateFormatter = cal.getDateFormatter();
             let ruleString;
-            if (rule.type == 'DAILY') {
-                if (checkRecurrenceRule(rule, ['BYDAY'])) {
+            if (rule.type == "DAILY") {
+                if (checkRecurrenceRule(rule, ["BYDAY"])) {
                     let days = rule.getComponent("BYDAY", {});
                     let weekdays = [2, 3, 4, 5, 6];
                     if (weekdays.length == days.length) {
                         let i;
                         for (i = 0; i < weekdays.length; i++) {
                             if (weekdays[i] != days[i]) {
                                 break;
                             }
@@ -83,49 +83,49 @@ function recurrenceRule2String(recurrenc
                     } else {
                         return null;
                     }
                 } else {
                     let dailyString = getRString("dailyEveryNth");
                     ruleString = PluralForm.get(rule.interval, dailyString)
                                            .replace("#1", rule.interval);
                 }
-            } else if (rule.type == 'WEEKLY') {
+            } else if (rule.type == "WEEKLY") {
                 // weekly recurrence, currently we
                 // support a single 'BYDAY'-rule only.
-                if (checkRecurrenceRule(rule, ['BYDAY'])) {
+                if (checkRecurrenceRule(rule, ["BYDAY"])) {
                     // create a string like 'Monday, Tuesday and Wednesday'
                     let days = rule.getComponent("BYDAY", {});
                     let weekdays = "";
                     // select noun class (grammatical gender) according to the
                     // first day of the list
                     let weeklyString = nounClass("repeatDetailsDay" + days[0], "weeklyNthOn");
                     for (let i = 0; i < days.length; i++) {
                         if (rule.interval == 1) {
                             weekdays += getRString(pluralWeekday("repeatDetailsDay" + days[i]));
                         } else {
                             weekdays += getRString("repeatDetailsDay" + days[i]);
                         }
                         if (days.length > 1 && i == (days.length - 2)) {
-                            weekdays += ' ' + getRString("repeatDetailsAnd") + ' ';
+                            weekdays += " " + getRString("repeatDetailsAnd") + " ";
                         } else if (i < days.length - 1) {
-                            weekdays += ', ';
+                            weekdays += ", ";
                         }
                     }
 
                     weeklyString = getRString(weeklyString, [weekdays]);
                     ruleString = PluralForm.get(rule.interval, weeklyString)
                                            .replace("#2", rule.interval);
                 } else {
                     let weeklyString = getRString("weeklyEveryNth");
                     ruleString = PluralForm.get(rule.interval, weeklyString)
                                            .replace("#1", rule.interval);
                 }
-            } else if (rule.type == 'MONTHLY') {
-                if (checkRecurrenceRule(rule, ['BYDAY'])) {
+            } else if (rule.type == "MONTHLY") {
+                if (checkRecurrenceRule(rule, ["BYDAY"])) {
                     let byday = rule.getComponent("BYDAY", {});
                     if (everyWeekDay(byday)) {
                         // Rule every day of the month.
                         ruleString = getRString("monthlyEveryDayOfNth");
                         ruleString = PluralForm.get(rule.interval, ruleString)
                                                .replace("#2", rule.interval);
                     } else {
                         // For rules with generic number of weekdays with and
@@ -164,25 +164,25 @@ function recurrenceRule2String(recurrenc
                                 let stringOrdinalWeekday = getRString("ordinalWeekdayOrder",
                                                                       [ordinalString, dayString]);
                                 weekdaysString_position += stringOrdinalWeekday + ", ";
                             }
                         }
                         let weekdaysString = weekdaysString_every + weekdaysString_position;
                         weekdaysString = weekdaysString.slice(0, -2)
                                                        .replace(/,(?= [^,]*$)/,
-                                                                ' ' + getRString("repeatDetailsAnd"));
+                                                                " " + getRString("repeatDetailsAnd"));
 
                         let monthlyString = weekdaysString_every ? "monthlyEveryOfEvery" : "monthlyRuleNthOfEvery";
                         monthlyString = nounClass("repeatDetailsDay" + day_of_week(firstDay), monthlyString);
                         monthlyString = getRString(monthlyString, [weekdaysString]);
                         ruleString = PluralForm.get(rule.interval, monthlyString)
                                                .replace("#2", rule.interval);
                     }
-                } else if (checkRecurrenceRule(rule, ['BYMONTHDAY'])) {
+                } else if (checkRecurrenceRule(rule, ["BYMONTHDAY"])) {
                     let component = rule.getComponent("BYMONTHDAY", {});
 
                     // First, find out if the 'BYMONTHDAY' component contains
                     // any elements with a negative value lesser than -1 ("the
                     // last day"). If so we currently don't support any rule
                     if (component.some(function(element, index, array) {
                                            return element < -1;
                                        })) {
@@ -207,62 +207,62 @@ function recurrenceRule2String(recurrenc
                                 }
                                 day_string += dateFormatter.formatDayWithOrdinal(component[i]) + ", ";
                             }
                             if (lastDay) {
                                 day_string += getRString("monthlyLastDay") + ", ";
                             }
                             day_string = day_string.slice(0, -2)
                                                    .replace(/,(?= [^,]*$)/,
-                                                            ' ' + getRString("repeatDetailsAnd"));
+                                                            " " + getRString("repeatDetailsAnd"));
 
                             // Add the word "day" in plural form to the list of days then
                             // compose the final string with the interval of months
                             let monthlyDayString = getRString("monthlyDaysOfNth_day", [day_string]);
                             monthlyDayString = PluralForm.get(component.length, monthlyDayString);
                             let monthlyString = getRString("monthlyDaysOfNth", [monthlyDayString]);
                             ruleString = PluralForm.get(rule.interval, monthlyString)
                                                    .replace("#2", rule.interval);
                         }
                     }
                 } else {
                     let monthlyString = getRString("monthlyDaysOfNth", [startDate.day]);
                     ruleString = PluralForm.get(rule.interval, monthlyString)
                                            .replace("#2", rule.interval);
                 }
-            } else if (rule.type == 'YEARLY') {
+            } else if (rule.type == "YEARLY") {
                 let bymonthday = null;
                 let bymonth = null;
-                if (checkRecurrenceRule(rule, ['BYMONTHDAY'])) {
+                if (checkRecurrenceRule(rule, ["BYMONTHDAY"])) {
                     bymonthday = rule.getComponent("BYMONTHDAY", {});
                 }
-                if (checkRecurrenceRule(rule, ['BYMONTH'])) {
+                if (checkRecurrenceRule(rule, ["BYMONTH"])) {
                     bymonth = rule.getComponent("BYMONTH", {});
                 }
                 if (bymonth && bymonth.length > 1 ||
                     bymonthday && (bymonthday.length > 1 || bymonthday[0] < -1)) {
                     // Don't build a string for a recurrence rule that the UI
                     // currently can't show completely (with more than one month
                     // or than one monthday, or bymonthdays lesser than -1).
                     return getRString("ruleTooComplex");
                 }
 
-                if (checkRecurrenceRule(rule, ['BYMONTHDAY']) &&
-                    (checkRecurrenceRule(rule, ['BYMONTH']) || !checkRecurrenceRule(rule, ['BYDAY']))) {
+                if (checkRecurrenceRule(rule, ["BYMONTHDAY"]) &&
+                    (checkRecurrenceRule(rule, ["BYMONTH"]) || !checkRecurrenceRule(rule, ["BYDAY"]))) {
                     // RRULE:FREQ=YEARLY;BYMONTH=x;BYMONTHDAY=y.
                     // RRULE:FREQ=YEARLY;BYMONTHDAY=x (takes the month from the start date).
                     let monthNumber = bymonth ? bymonth[0] : (startDate.month + 1);
                     let month = getRString("repeatDetailsMonth" + monthNumber);
                     let monthDay = bymonthday[0] == -1 ? getRString("monthlyLastDay")
                                                        : dateFormatter.formatDayWithOrdinal(bymonthday[0]);
                     let yearlyString = getRString("yearlyNthOn", [month, monthDay]);
                     ruleString = PluralForm.get(rule.interval, yearlyString)
                                            .replace("#3", rule.interval);
-                } else if (checkRecurrenceRule(rule, ['BYMONTH']) &&
-                           checkRecurrenceRule(rule, ['BYDAY'])) {
+                } else if (checkRecurrenceRule(rule, ["BYMONTH"]) &&
+                           checkRecurrenceRule(rule, ["BYDAY"])) {
                     // RRULE:FREQ=YEARLY;BYMONTH=x;BYDAY=y1,y2,....
                     let byday = rule.getComponent("BYDAY", {});
                     let month = getRString("repeatDetailsMonth" + bymonth[0]);
                     if (everyWeekDay(byday)) {
                         // Every day of the month.
                         let yearlyString = "yearlyEveryDayOf";
                         yearlyString = getRString(yearlyString, [month]);
                         ruleString = PluralForm.get(rule.interval, yearlyString)
@@ -293,17 +293,17 @@ function recurrenceRule2String(recurrenc
                             return getRString("ruleTooComplex");
                         }
                     } else {
                         // Currently we don't support yearly rules with
                         // more than one BYDAY element or exactly 7 elements
                         // with all the weekdays (the "every day" case).
                         return getRString("ruleTooComplex");
                     }
-                } else if (checkRecurrenceRule(rule, ['BYMONTH'])) {
+                } else if (checkRecurrenceRule(rule, ["BYMONTH"])) {
                     // RRULE:FREQ=YEARLY;BYMONTH=x (takes the day from the start date).
                     let month = getRString("repeatDetailsMonth" + bymonth[0]);
                     let yearlyString = getRString("yearlyNthOn", [month, startDate.day]);
                     ruleString = PluralForm.get(rule.interval, yearlyString)
                                            .replace("#3", rule.interval);
                 } else {
                     let month = getRString("repeatDetailsMonth" + (startDate.month + 1));
                     let yearlyString = getRString("yearlyNthOn", [month, startDate.day]);
--- a/calendar/base/modules/calUtils.jsm
+++ b/calendar/base/modules/calUtils.jsm
@@ -433,17 +433,17 @@ var cal = {
             let email = cal.getAttendeeEmail(aVal, true);
             if (!email.length) {
                 cal.LOG("Dropping invalid recipient for email transport: " + aVal.toString());
             }
             return email;
         };
         return aAttendees.map(cbEmail)
                          .filter(aVal => aVal.length > 0)
-                         .join(', ');
+                         .join(", ");
     },
 
     /**
      * Returns the default transparency to apply for an event depending on whether its an all-day event
      *
      * @param aIsAllDay      If true, the default transparency for all-day events is returned
      */
     getEventDefaultTransparency: function(aIsAllDay) {
--- a/calendar/base/modules/calXMLUtils.jsm
+++ b/calendar/base/modules/calXMLUtils.jsm
@@ -130,17 +130,17 @@ cal.xml.parseString = function(str, docU
  *
  * @param uri       The URI to read.
  * @return          The DOM Document resulting from the file.
  */
 cal.xml.parseFile = function(uri) {
     let req = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"]
                         .createInstance(Components.interfaces.nsIXMLHttpRequest);
 
-    req.open('GET', uri, false);
+    req.open("GET", uri, false);
     req.overrideMimeType("text/xml");
     req.send(null);
     return req.responseXML;
 };
 
 /**
  * Serialize the DOM tree into a string.
  *
--- a/calendar/base/src/calCalendarManager.js
+++ b/calendar/base/src/calCalendarManager.js
@@ -121,17 +121,17 @@ calCalendarManager.prototype = {
                         // from the calendar provider context.
                         let authHeader = channel.getResponseHeader("WWW-Authenticate");
                         let calendar = channel.notificationCallbacks
                                               .getInterface(Components.interfaces.calICalendar);
                         if (calendar && !calendar.getProperty("capabilities.realmrewrite.disabled")) {
                             // The provider may choose to explicitly disable the
                             // rewriting, for example if all calendars on a
                             // domain have the same credentials
-                            let escapedName = calendar.name.replace(/\\/g, '\\\\')
+                            let escapedName = calendar.name.replace(/\\/g, "\\\\")
                                                            .replace(/\"/g, '\\"');
                             authHeader = appendToRealm(authHeader, "(" + escapedName + ")");
                             channel.setResponseHeader("WWW-Authenticate", authHeader, false);
                         }
                     }
                 } catch (e) {
                     if (e.result != Components.results.NS_NOINTERFACE &&
                         e.result != Components.results.NS_ERROR_NOT_AVAILABLE) {
--- a/calendar/base/src/calIcsParser.js
+++ b/calendar/base/src/calIcsParser.js
@@ -27,20 +27,20 @@ calIcsParser.prototype = {
     }),
 
     processIcalComponent: function ip_processIcalComponent(rootComp, aAsyncParsing) {
         let calComp;
         // libical returns the vcalendar component if there is just one vcalendar.
         // If there are multiple vcalendars, it returns an xroot component, with
         // vcalendar children. We need to handle both cases.
         if (rootComp) {
-            if (rootComp.componentType == 'VCALENDAR') {
+            if (rootComp.componentType == "VCALENDAR") {
                 calComp = rootComp;
             } else {
-                calComp = rootComp.getFirstSubcomponent('VCALENDAR');
+                calComp = rootComp.getFirstSubcomponent("VCALENDAR");
             }
         }
 
         if (!calComp) {
             cal.ERROR("Parser Error. Could not find 'VCALENDAR' component: \n" +
                       rootComp + "\nStack: \n" + cal.STACK(10));
         }
 
--- a/calendar/base/src/calIcsSerializer.js
+++ b/calendar/base/src/calIcsSerializer.js
@@ -49,17 +49,17 @@ calIcsSerializer.prototype = {
 
     serializeToStream: function is_serializeToStream(aStream) {
         let str = this.serializeToString();
 
         // Convert the javascript string to an array of bytes, using the
         // UTF8 encoder
         let convStream = Components.classes["@mozilla.org/intl/converter-output-stream;1"]
                                    .createInstance(Components.interfaces.nsIConverterOutputStream);
-        convStream.init(aStream, 'UTF-8', 0, 0x0000);
+        convStream.init(aStream, "UTF-8", 0, 0x0000);
 
         convStream.writeString(str);
         convStream.close();
     },
 
     getIcalComponent: function is_getIcalComponent() {
         let calComp = getIcsService().createIcalComponent("VCALENDAR");
         calSetProdidVersion(calComp);
--- a/calendar/base/src/calTimezoneService.js
+++ b/calendar/base/src/calTimezoneService.js
@@ -98,17 +98,17 @@ calTimezoneService.prototype = {
                         reject(ex);
                     }
                 });
             });
         }
 
         let resNamespace = "calendar";
         // Check for presence of the calendar timezones add-on.
-        let resProtocol = Services.io.getProtocolHandler('resource')
+        let resProtocol = Services.io.getProtocolHandler("resource")
                                   .QueryInterface(Components.interfaces.nsIResProtocolHandler);
         if (resProtocol.hasSubstitution("calendar-timezones")) {
             resNamespace = "calendar-timezones";
         }
 
         fetchJSON("resource://" + resNamespace + "/timezones/zones.json").then((tzData) => {
             for (let tzid of Object.keys(tzData.aliases)) {
                 let data = tzData.aliases[tzid];
--- a/calendar/base/src/calTransactionManager.js
+++ b/calendar/base/src/calTransactionManager.js
@@ -154,20 +154,20 @@ calTransaction.prototype = {
                                        aCount,
                                        aItems);
         }
     },
 
     doTransaction: function cT_doTransaction() {
         this.mIsDoTransaction = true;
         switch (this.mAction) {
-            case 'add':
+            case "add":
                 this.mCalendar.addItem(this.mItem, this);
                 break;
-            case 'modify':
+            case "modify":
                 if (this.mItem.calendar.id != this.mOldItem.calendar.id) {
                     let self = this;
                     let addListener = {
                         onOperationComplete: function cT_onOperationComplete(aCalendar,
                                                                              aStatus,
                                                                              aOperationType,
                                                                              aId,
                                                                              aDetail) {
@@ -181,41 +181,41 @@ calTransaction.prototype = {
                     this.mOldCalendar = this.mOldItem.calendar;
                     this.mCalendar.addItem(this.mItem, addListener);
                 } else {
                     this.mCalendar.modifyItem(cal.itip.prepareSequence(this.mItem, this.mOldItem),
                                               this.mOldItem,
                                               this);
                 }
                 break;
-            case 'delete':
+            case "delete":
                 this.mCalendar.deleteItem(this.mItem, this);
                 break;
             default:
                 throw new Components.Exception("Invalid action specified",
                                                Components.results.NS_ERROR_ILLEGAL_VALUE);
         }
     },
 
     undoTransaction: function cT_undoTransaction() {
         this.mIsDoTransaction = false;
         switch (this.mAction) {
-            case 'add':
+            case "add":
                 this.mCalendar.deleteItem(this.mItem, this);
                 break;
-            case 'modify':
+            case "modify":
                 if (this.mOldItem.calendar.id != this.mItem.calendar.id) {
                     this.mCalendar.deleteItem(this.mItem, this);
                     this.mOldCalendar.addItem(this.mOldItem, this);
                 } else {
                     this.mCalendar.modifyItem(cal.itip.prepareSequence(this.mOldItem, this.mItem),
                                               this.mItem, this);
                 }
                 break;
-            case 'delete':
+            case "delete":
                 this.mCalendar.addItem(this.mItem, this);
                 break;
             default:
                 throw new Components.Exception("Invalid action specified",
                                                Components.results.NS_ERROR_ILLEGAL_VALUE);
         }
     },
 
--- a/calendar/base/src/calUtils.js
+++ b/calendar/base/src/calUtils.js
@@ -710,17 +710,17 @@ function calGetString(aBundleName, aStri
 /**
  * Make a UUID using the UUIDGenerator service available, we'll use that.
  */
 function getUUID() {
     let uuidGen = Components.classes["@mozilla.org/uuid-generator;1"]
                   .getService(Components.interfaces.nsIUUIDGenerator);
     // generate uuids without braces to avoid problems with
     // CalDAV servers that don't support filenames with {}
-    return uuidGen.generateUUID().toString().replace(/[{}]/g, '');
+    return uuidGen.generateUUID().toString().replace(/[{}]/g, "");
 }
 
 /**
  * Due to a bug in js-wrapping, normal == comparison can fail when we
  * have 2 objects.  Use these functions to force them both to get wrapped
  * the same way, allowing for normal comparison.
  */
 
@@ -943,42 +943,42 @@ function LOG(aArg) {
     }
 
     ASSERT(aArg, "Bad log argument.", false);
     let string = aArg;
     // We should just dump() both String objects, and string primitives.
     if (!(aArg instanceof String) && !(typeof aArg == "string")) {
         string = "Logging object...\n";
         for (let prop in aArg) {
-            string += prop + ': ' + aArg[prop] + '\n';
+            string += prop + ": " + aArg[prop] + "\n";
         }
         string += "End object\n";
     }
 
-    dump(string + '\n');
+    dump(string + "\n");
     _log(string, Components.interfaces.nsIScriptError.infoFlag);
 }
 
 /**
  * Dumps a warning to both console and js console.
  *
  * @param aMessage warning message
  */
 function WARN(aMessage) {
-    dump("Warning: " + aMessage + '\n');
+    dump("Warning: " + aMessage + "\n");
     _log(aMessage, Components.interfaces.nsIScriptError.warningFlag);
 }
 
 /**
  * Dumps an error to both console and js console.
  *
  * @param aMessage error message
  */
 function ERROR(aMessage) {
-    dump("Error: " + aMessage + '\n');
+    dump("Error: " + aMessage + "\n");
     _log(aMessage, Components.interfaces.nsIScriptError.errorFlag);
 }
 
 /**
  * Returns a string describing the current js-stack with filename and line
  * numbers.
  *
  * @param aDepth (optional) The number of frames to include. Defaults to 5.
@@ -1008,17 +1008,17 @@ function STACK(aDepth, aSkip) {
  *                    if false, code flow will continue
  *                    may be a result code
  */
 function ASSERT(aCondition, aMessage, aCritical) {
     if (aCondition) {
         return;
     }
 
-    let string = "Assert failed: " + aMessage + '\n' + STACK(0, 1);
+    let string = "Assert failed: " + aMessage + "\n" + STACK(0, 1);
     if (aCritical) {
         throw new Components.Exception(string,
                                        aCritical === true ? Components.results.NS_ERROR_UNEXPECTED : aCritical);
     } else {
         Components.utils.reportError(string);
     }
 }
 
@@ -1866,17 +1866,17 @@ function binaryInsert(itemArray, item, c
  * which means there will be one instance per app. If called as
  * "getCompositeCalendar()" from chrome code, then it will get a window-specific
  * composite calendar, which is often what is wanted
  */
 function getCompositeCalendar() {
     if (getCompositeCalendar.mObject === undefined) {
         getCompositeCalendar.mObject = Components.classes["@mozilla.org/calendar/calendar;1?type=composite"]
                                                  .createInstance(Components.interfaces.calICompositeCalendar);
-        getCompositeCalendar.mObject.prefPrefix = 'calendar-main';
+        getCompositeCalendar.mObject.prefPrefix = "calendar-main";
 
         try {
             if (gCalendarStatusFeedback) {
                 // If we are in a window that has calendar status feedback, set up
                 // our status observer.
                 let chromeWindow = window.QueryInterface(Components.interfaces.nsIDOMChromeWindow);
                 getCompositeCalendar.mObject.setStatusObserver(gCalendarStatusFeedback, chromeWindow);
             }
--- a/calendar/import-export/calHtmlExport.js
+++ b/calendar/import-export/calHtmlExport.js
@@ -24,21 +24,21 @@ calHtmlExporter.prototype = {
         classID: calHtmlExporterClassID,
         contractID: "@mozilla.org/calendar/export;1?type=html",
         classDescription: "Calendar HTML Exporter",
         interfaces: calHtmlExporterInterfaces
     }),
 
     getFileTypes: function getFileTypes(aCount) {
         aCount.value = 1;
-        let wildmat = '*.html; *.htm';
-        let label = cal.calGetString("calendar", 'filterHtml', [wildmat]);
+        let wildmat = "*.html; *.htm";
+        let label = cal.calGetString("calendar", "filterHtml", [wildmat]);
         return [{
             QueryInterface: XPCOMUtils.generateQI([Components.interfaces.calIFileType]),
-            defaultExtension: 'html',
+            defaultExtension: "html",
             extensionFilter: wildmat,
             description: label
         }];
     },
 
     exportToStream: function html_exportToStream(aStream, aCount, aItems, aTitle) {
         let document = cal.xml.parseFile("chrome://calendar-common/skin/printing/calHtmlExport.html");
         let itemContainer = document.getElementById("item-container");
@@ -104,12 +104,12 @@ calHtmlExporter.prototype = {
         }
 
         let templates = document.getElementById("templates");
         templates.remove();
 
         // Convert the javascript string to an array of bytes, using the utf8 encoder
         let convStream = Components.classes["@mozilla.org/intl/converter-output-stream;1"]
                                    .createInstance(Components.interfaces.nsIConverterOutputStream);
-        convStream.init(aStream, 'UTF-8', 0, 0x0000);
+        convStream.init(aStream, "UTF-8", 0, 0x0000);
         convStream.writeString(cal.xml.serializeDOM(document));
     }
 };
--- a/calendar/import-export/calIcsImportExport.js
+++ b/calendar/import-export/calIcsImportExport.js
@@ -9,19 +9,19 @@ Components.utils.import("resource://cale
  * ICS Import and Export Plugin
  */
 
 // Shared functions
 function getIcsFileTypes(aCount) {
     aCount.value = 1;
     return [{
         QueryInterface: XPCOMUtils.generateQI([Components.interfaces.calIFileType]),
-        defaultExtension: 'ics',
-        extensionFilter: '*.ics',
-        description: cal.calGetString("calendar", 'filterIcs', ['*.ics'])
+        defaultExtension: "ics",
+        extensionFilter: "*.ics",
+        description: cal.calGetString("calendar", "filterIcs", ["*.ics"])
     }];
 }
 
 // Importer
 function calIcsImporter() {
     this.wrappedJSObject = this;
 }
 
--- a/calendar/import-export/calMonthGridPrinter.js
+++ b/calendar/import-export/calMonthGridPrinter.js
@@ -98,17 +98,17 @@ calMonthPrinter.prototype = {
         // Remove templates from HTML, no longer needed
         let templates = document.getElementById("templates");
         templates.remove();
 
         // Stream out the resulting HTML
         let html = cal.xml.serializeDOM(document);
         let convStream = Components.classes["@mozilla.org/intl/converter-output-stream;1"]
                                    .createInstance(Components.interfaces.nsIConverterOutputStream);
-        convStream.init(aStream, 'UTF-8', 0, 0x0000);
+        convStream.init(aStream, "UTF-8", 0, 0x0000);
         convStream.writeString(html);
     },
 
     normalizeStartDate: function monthPrint_normalizeStartDate(aStart) {
         // Make sure the start date is really a date.
         let startDate = aStart.clone();
         startDate.isDate = true;
 
--- a/calendar/import-export/calOutlookCSVImportExport.js
+++ b/calendar/import-export/calOutlookCSVImportExport.js
@@ -75,19 +75,19 @@ var localeNl = {
 var locales = [localeEn, localeNl];
 
 // Windows line endings, CSV files with LF only can't be read by Outlook.
 var exportLineEnding = "\r\n";
 
 // Shared functions
 function getOutlookCsvFileTypes(aCount) {
     aCount.value = 1;
-    let wildmat = '*.csv';
-    let label = cal.calGetString("calendar", 'filterOutlookCsv', [wildmat]);
-    return [{ defaultExtension: 'csv',
+    let wildmat = "*.csv";
+    let label = cal.calGetString("calendar", "filterOutlookCsv", [wildmat]);
+    return [{ defaultExtension: "csv",
               extensionFilter: wildmat,
               description: label }];
 }
 
 // Importer
 function calOutlookCSVImporter() {
     this.wrappedJSObject = this;
 }
@@ -432,33 +432,33 @@ calOutlookCSVExporter.prototype = {
         function dateString(aDateTime) { return cal.dateTimeToJsDate(aDateTime).toLocaleFormat(localeEn.dateFormat); }
         function timeString(aDateTime) { return cal.dateTimeToJsDate(aDateTime).toLocaleFormat(localeEn.timeFormat); }
         function txtString(aString) { return aString || ""; }
 
         let str = "";
         let headers = [];
         // Not using a loop here, since we need to be sure the order here matches
         // with the orders the field data is added later on
-        headers.push(localeEn['headTitle']);
-        headers.push(localeEn['headStartDate']);
-        headers.push(localeEn['headStartTime']);
-        headers.push(localeEn['headEndDate']);
-        headers.push(localeEn['headEndTime']);
-        headers.push(localeEn['headAllDayEvent']);
-        headers.push(localeEn['headAlarm']);
-        headers.push(localeEn['headAlarmDate']);
-        headers.push(localeEn['headAlarmTime']);
-        headers.push(localeEn['headCategories']);
-        headers.push(localeEn['headDescription']);
-        headers.push(localeEn['headLocation']);
-        headers.push(localeEn['headPrivate']);
+        headers.push(localeEn["headTitle"]);
+        headers.push(localeEn["headStartDate"]);
+        headers.push(localeEn["headStartTime"]);
+        headers.push(localeEn["headEndDate"]);
+        headers.push(localeEn["headEndTime"]);
+        headers.push(localeEn["headAllDayEvent"]);
+        headers.push(localeEn["headAlarm"]);
+        headers.push(localeEn["headAlarmDate"]);
+        headers.push(localeEn["headAlarmTime"]);
+        headers.push(localeEn["headCategories"]);
+        headers.push(localeEn["headDescription"]);
+        headers.push(localeEn["headLocation"]);
+        headers.push(localeEn["headPrivate"]);
         headers = headers.map(function(v) {
             return '"' + v + '"';
         });
-        str = headers.join(',');
+        str = headers.join(",");
         str += exportLineEnding;
         aStream.write(str, str.length);
 
         for (let item of aItems) {
             if (!cal.isEvent(item)) {
                 // XXX TODO: warn the user (once) that tasks are not supported
                 // (bug 336175)
                 continue;
@@ -482,13 +482,13 @@ calOutlookCSVExporter.prototype = {
             line.push(txtString(item.getProperty("DESCRIPTION")));
             line.push(txtString(item.getProperty("LOCATION")));
             line.push(item.privacy == "PRIVATE" ? localeEn.valueTrue : localeEn.valueFalse);
 
             line = line.map(function(v) {
                 v = String(v).replace(/"/g, '""');
                 return '"' + v + '"';
             });
-            str = line.join(',') + exportLineEnding;
+            str = line.join(",") + exportLineEnding;
             aStream.write(str, str.length);
         }
     }
 };
--- a/calendar/import-export/calWeekPrinter.js
+++ b/calendar/import-export/calWeekPrinter.js
@@ -85,17 +85,17 @@ calWeekPrinter.prototype = {
         // Remove templates from HTML, no longer needed
         let templates = document.getElementById("templates");
         templates.remove();
 
         // Stream out the resulting HTML
         let html = cal.xml.serializeDOM(document);
         let convStream = Components.classes["@mozilla.org/intl/converter-output-stream;1"]
                                    .createInstance(Components.interfaces.nsIConverterOutputStream);
-        convStream.init(aStream, 'UTF-8', 0, 0x0000);
+        convStream.init(aStream, "UTF-8", 0, 0x0000);
         convStream.writeString(html);
     },
 
     setupWeek: function weekPrint_setupWeek(document, startOfWeek, dayTable) {
         const weekdayMap = ["sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday"];
 
         let weekTemplate = document.getElementById("week-template");
         let weekContainer = document.getElementById("week-container");
@@ -105,17 +105,17 @@ calWeekPrinter.prototype = {
         let currentPage = weekTemplate.cloneNode(true);
         currentPage.removeAttribute("id");
         currentPage.item = startOfWeek.clone();
 
         // Set up the week number title
         let weekInfo = cal.getWeekInfoService();
         let dateFormatter = cal.getDateFormatter();
         let weekno = weekInfo.getWeekTitle(startOfWeek);
-        let weekTitle = cal.calGetString("calendar", 'WeekTitle', [weekno]);
+        let weekTitle = cal.calGetString("calendar", "WeekTitle", [weekno]);
         currentPage.querySelector(".week-number").textContent = weekTitle;
 
         // Set up the day boxes
         let endOfWeek = weekInfo.getEndOfWeek(startOfWeek);
         for (let currentDate = startOfWeek.clone(); currentDate.compare(endOfWeek) <= 0; currentDate.day++) {
             let weekday = currentDate.weekday;
             let weekdayName = weekdayMap[weekday];
             let dayOffPrefName = "calendar.week.d" + weekday + weekdayName + "soff";
--- a/calendar/itip/calItipEmailTransport.js
+++ b/calendar/itip/calItipEmailTransport.js
@@ -257,17 +257,17 @@ calItipEmailTransport.prototype = {
                     }
                     return email;
                 };
                 let toMap = aToList.map(cbEmail).filter(v => v.length);
                 if (toMap.length < aToList.length) {
                     // at least one invalid recipient, so we skip sending for this message
                     return false;
                 }
-                let toList = toMap.join(', ');
+                let toList = toMap.join(", ");
                 let composeUtils = Components.classes["@mozilla.org/messengercompose/computils;1"]
                                              .createInstance(Components.interfaces.nsIMsgCompUtils);
                 let messageId = composeUtils.msgGenerateMessageId(identity);
                 let mailFile = this._createTempImipFile(compatMode, toList, aSubject, aBody, aItem, identity, messageId);
                 if (mailFile) {
                     // compose fields for message: from/to etc need to be specified both here and in the file
                     let composeFields = Components.classes["@mozilla.org/messengercompose/composefields;1"]
                                                   .createInstance(Components.interfaces.nsIMsgCompFields);
--- a/calendar/lightning/components/lightningTextCalendarConverter.js
+++ b/calendar/lightning/components/lightningTextCalendarConverter.js
@@ -43,21 +43,21 @@ ltnMimeConverter.prototype = {
                         item = exc;
                     }
                 }
                 event = item;
                 break;
             }
         }
         if (!event) {
-            return '';
+            return "";
         }
 
         let itipItem = null;
-        let msgOverlay = '';
+        let msgOverlay = "";
 
         try {
             itipItem = Components.classes["@mozilla.org/calendar/itip-item;1"]
                                  .createInstance(Components.interfaces.calIItipItem);
             itipItem.init(data);
             let dom = ltn.invitation.createInvitationOverlay(event, itipItem);
             msgOverlay = cal.xml.serializeDOM(dom);
 
--- a/calendar/lightning/content/html-item-editing/react-code.js
+++ b/calendar/lightning/content/html-item-editing/react-code.js
@@ -11,72 +11,72 @@ var gTopComponent = null;
 var Tabstrip = React.createClass({
     handleChange: function(index) {
         // The click handler will update the state with
         // the index of the focused menu entry
         this.props.onInput(this.props.keyprop, index);
     },
     render: function() {
         return React.DOM.ul(
-            { id: 'tabstrip' },
+            { id: "tabstrip" },
             this.props.tabs.map((tab, index) => {
-                let style = (this.props.activeTab == index) ? 'activeTab' : '';
+                let style = (this.props.activeTab == index) ? "activeTab" : "";
                 // The bind() method makes the index
                 // available to the handleChange function:
                 return React.DOM.li({
-                        className: style + ' tab',
-                        key: 'tabkey' + index,
+                        className: style + " tab",
+                        key: "tabkey" + index,
                         onClick: this.handleChange.bind(this, index)
                     },
                     tab
                     );
                 }
             )
         );
     }
 });
 
 var TextField = React.createClass({
     handleChange: function(event) {
         this.props.onInput(this.props.keyprop, event.target.value);
     },
     render: function() {
         return React.DOM.input({
-            type: 'text',
-            // placeholder: 'New Event'
+            type: "text",
+            // placeholder: "New Event"
             value: this.props.value,
             onChange: this.handleChange
         });
     }
 });
 
 var TextArea = React.createClass({
     handleChange: function(event) {
         this.props.onInput(this.props.keyprop, event.target.value);
     },
     render: function() {
         return React.DOM.textarea({
-            type: 'text',
-            // placeholder: 'New Event'
+            type: "text",
+            // placeholder: "New Event"
             value: this.props.value,
             onChange: this.handleChange,
-            placeholder: 'Description',
+            placeholder: "Description",
             rows: 10,
-            id: 'descriptionTextArea'
+            id: "descriptionTextArea"
         });
     }
 });
 
 var Checkbox = React.createClass({
     handleChange: function(event) {
         this.props.onInput(this.props.keyprop, event.target.checked);
     },
     render: function() {
         return React.DOM.input({
-            type: 'checkbox',
+            type: "checkbox",
             checked: this.props.checked,
             onChange: this.handleChange
         });
     }
 });
 
 var Dropdown = React.createClass({
     handleChange: function(event) {
@@ -85,17 +85,17 @@ var Dropdown = React.createClass({
     render: function() {
         return React.DOM.select({
             value: this.props.value,
             onChange: this.handleChange
             },
             this.props.options.map((option, index) => {
                 return React.DOM.option({
                         // could use option[0] here instead of index...
-                        key: this.props.keyprop + 'Option' + index,
+                        key: this.props.keyprop + "Option" + index,
                         onChange: this.handleChange,
                         value: option[0],
                         disabled: this.props.disabled || false
                     },
                     option[1]
                     );
                 }
             )
@@ -104,28 +104,28 @@ var Dropdown = React.createClass({
 });
 
 var Link = React.createClass({
     handleClick: function() {
         this.props.onInput(this.props.value);
     },
     render: function() {
         return React.DOM.a({
-            // href: '',
+            // href: "",
             onClick: this.handleClick
         },
         this.props.value
         );
     }
 });
 
 var DatePicker = React.createClass({
     render: function() {
         return React.DOM.input({
-            type: 'date'
+            type: "date"
         });
     }
 });
 
 var Capsule = React.createClass({
     handleDelete: function() {
         this.props.onDelete(this.props.keyprop, this.props.value);
     },
@@ -146,85 +146,85 @@ var Capsule = React.createClass({
     }
 });
 
 var TopComponent = React.createClass({
     getDefaultProps: function() {
         return {
             // these "initial" props are passed in as props but
             // immediately become state (state can change, props do not)
-            initialTitle: 'New Event',
-            initialLocation: '',
+            initialTitle: "New Event",
+            initialLocation: "",
             initialAllDay: false,
-            initialRepeat: 'none',
-            initialRepeatUntilDate: 'Forever',
+            initialRepeat: "none",
+            initialRepeatUntilDate: "Forever",
             initialReminders: 0,
-            initialDescription: '',
-            initialShowTimeAs: 'OPAQUE',
+            initialDescription: "",
+            initialShowTimeAs: "OPAQUE",
             initialCalendarId: 0,
             initialPrivacy: 0,
             initialStatus: 0,
             initialPriority: 0,
-            initialUrl: '',
+            initialUrl: "",
             initialShowUrl: false,
             initialCategories: [],
             initialCategoriesList: [],
             initialAttachments: {},
 
-            tabs: ['Description', 'More', 'Reminders', 'Attachments', 'Attendees'],
+            tabs: ["Description", "More", "Reminders", "Attachments", "Attendees"],
             calendarList: [
-                [0, 'Home'],
-                [1, 'Work']
+                [0, "Home"],
+                [1, "Work"]
             ],
             privacyList: [
-                ['NONE', 'Not Specified'],
-                ['PUBLIC', 'Public Event'],
-                ['CONFIDENTIAL', 'Show Time and Date Only'],
-                ['PRIVATE', 'Private Event']
+                ["NONE", "Not Specified"],
+                ["PUBLIC", "Public Event"],
+                ["CONFIDENTIAL", "Show Time and Date Only"],
+                ["PRIVATE", "Private Event"]
             ],
             statusList: [
-                ['NONE', 'Not Specified'],
-                ['TENTATIVE', 'Tentative'],
-                ['CONFIRMED', 'Confirmed'],
-                ['CANCELLED', 'Canceled']
+                ["NONE", "Not Specified"],
+                ["TENTATIVE", "Tentative"],
+                ["CONFIRMED", "Confirmed"],
+                ["CANCELLED", "Canceled"]
             ],
             priorityList: [
                 // XXX what about other numbers?
-                [0, 'Not Specified'],
-                [9, 'Low'],
-                [5, 'Normal'],
-                [1, 'High']
+                [0, "Not Specified"],
+                [9, "Low"],
+                [5, "Normal"],
+                [1, "High"]
             ],
             showTimeAsList: [
-                ['OPAQUE', true],
-                ['TRANSPARENT', false]
+                ["OPAQUE", true],
+                ["TRANSPARENT", false]
             ],
             repeatList: [
-                ['none', 'Does Not Repeat'],
-                ['daily', 'Daily'],
-                ['weekly', 'Weekly'],
-                ['every.weekday', 'Every Weekday'],
-                ['bi.weekly', 'Bi-weekly'],
-                ['monthly', 'Monthly'],
-                ['yearly', 'Yearly'],
-                ['custom', 'Custom...']
+                ["none", "Does Not Repeat"],
+                ["daily", "Daily"],
+                ["weekly", "Weekly"],
+                ["every.weekday", "Every Weekday"],
+                ["bi.weekly", "Bi-weekly"],
+                ["monthly", "Monthly"],
+                ["yearly", "Yearly"],
+                ["custom", "Custom..."]
             ],
             remindersList: [
-                [0, 'No Reminder'],
-                [1, '0 Minutes Before'],
-                [2, '5 Minutes Before'],
-                [3, '15 Minutes Before'],
-                [4, '30 Minutes Before'],
-                [5, '1 Hour Before'],
-                [6, '2 Hours Before'],
-                [7, '12 Hours Before'],
-                [8, '1 Day Before'],
-                [9, '2 Days Before'],
-                [10, '1 Week Before'],
-                [11, 'Custom...']
+                [0, "No Reminder"],
+                [1, "0 Minutes Before"],
+                [2, "5 Minutes Before"],
+                [3, "15 Minutes Before"],
+                [4, "30 Minutes Before"],
+                [5, "1 Hour Before"],
+                [6, "2 Hours Before"],
+                [7, "12 Hours Before"],
+                [8, "1 Day Before"],
+                [9, "2 Days Before"],
+                [10, "1 Week Before"],
+                [11, "Custom..."]
             ],
             supportsPriority: false
         };
     },
     getInitialState: function() {
         // all the passed-in props that begin with 'initial' become state
         return {
             title: this.props.initialTitle,
@@ -260,20 +260,20 @@ var TopComponent = React.createClass({
         if (wv != this.state.isWideview) {
             this.setState({ isWideview: wv });
         }
     },
     componentWillMount: function() {
         this.updateWideview();
     },
     componentDidMount: function() {
-        window.addEventListener('resize', this.updateWideview);
+        window.addEventListener("resize", this.updateWideview);
     },
     componentWillUnmount: function() {
-        window.removeEventListener('resize', this.updateWideview);
+        window.removeEventListener("resize", this.updateWideview);
     },
     exportState: function() {
         // Use this to access this component's state from above/outside
         // the react component hierarchy, for example, when saving changes.
         return this.state;
     },
     importState: function(aStateObj) {
         // Use this to impose state changes from above/outside of the
@@ -300,284 +300,284 @@ var TopComponent = React.createClass({
         let index = a.indexOf(aValue);
         a.splice(index, 1);
         this.setState({ aKey: a });
     },
     render: function() {
         // 'key' doesn't seem to work as a prop name (presumably because
         // already used by react?), so using 'keyprop' instead for now.
         let titleDiv = React.DOM.div(
-            { id: 'titleDiv', className: 'box' },
-            'Title ',
+            { id: "titleDiv", className: "box" },
+            "Title ",
             React.createElement(TextField, {
-                keyprop: 'title',
+                keyprop: "title",
                 value: this.state.title,
                 onInput: this.handleSimpleChange
             })
         );
         let locationDiv = React.DOM.div(
-            { id: 'locationDiv', className: 'box' },
-            'Location ',
+            { id: "locationDiv", className: "box" },
+            "Location ",
             React.createElement(TextField, {
-                keyprop: 'location',
+                keyprop: "location",
                 value: this.state.location,
                 onInput: this.handleSimpleChange
             })
         );
         let startDiv = React.DOM.div(
-            { id: 'startDiv', className: 'box' },
-            'Start ',
+            { id: "startDiv", className: "box" },
+            "Start ",
             // React.createElement(DatePicker, { }),
             React.createElement(TextField, {
-                keyprop: 'startDate',
+                keyprop: "startDate",
                 value: this.state.startDate,
                 onInput: this.handleSimpleChange
             }),
             React.createElement(TextField, {
-                keyprop: 'startTime',
+                keyprop: "startTime",
                 value: this.state.startTime,
                 onInput: this.handleSimpleChange
             })
         );
         let endDiv = React.DOM.div(
-            { id: 'endDiv', className: 'box' },
-            'End ',
+            { id: "endDiv", className: "box" },
+            "End ",
             React.createElement(TextField, {
-                keyprop: 'endDate',
+                keyprop: "endDate",
                 value: this.state.endDate,
                 onInput: this.handleSimpleChange
             }),
             React.createElement(TextField, {
-                keyprop: 'endTime',
+                keyprop: "endTime",
                 value: this.state.endTime,
                 onInput: this.handleSimpleChange
             })
             // React.createElement(DatePicker, { }),
         );
         let allDayDiv = React.DOM.div(
-            { id: 'allDayDiv', className: 'box' },
+            { id: "allDayDiv", className: "box" },
             React.createElement(Checkbox, {
-                keyprop: 'allDay',
+                keyprop: "allDay",
                 checked: this.state.allDay,
                 onInput: this.handleSimpleChange
             }),
-            'All day event'
+            "All day event"
         );
         let repeatDiv = React.DOM.div(
-            { id: 'repeatDiv', className: 'box' },
-            'Repeat ',
+            { id: "repeatDiv", className: "box" },
+            "Repeat ",
             React.createElement(Dropdown, {
-                keyprop: 'repeat',
+                keyprop: "repeat",
                 value: this.state.repeat,
                 options: this.props.repeatList,
                 onInput: this.handleSimpleChange
             }),
-            (this.state.repeat != 'none' ? ' Until ' : null),
-            (this.state.repeat!= 'none' ?
+            (this.state.repeat != "none" ? " Until " : null),
+            (this.state.repeat!= "none" ?
                 React.createElement(TextField, {
-                    keyprop: 'repeatUntilDate',
+                    keyprop: "repeatUntilDate",
                     value: this.state.repeatUntilDate,
                     onInput: this.handleSimpleChange
                 })
                 : null)
         );
         let calendarDiv = React.DOM.div(
-            { id: 'calendarDiv', className: 'box' },
-            'Calendar ',
+            { id: "calendarDiv", className: "box" },
+            "Calendar ",
             React.createElement(Dropdown, {
-                keyprop: 'calendarId',
+                keyprop: "calendarId",
                 value: this.state.calendarId,
                 options: this.props.calendarList,
                 onInput: this.handleSimpleChange
             })
         );
         let categoriesCapsules;
         if (this.state.categories) {
             categoriesCapsules =
                 this.state.categories.map((cat, index) => {
                     return React.createElement(Capsule, {
                         // color: this.props.categoryList.color,
                         value: cat,
-                        key: cat + 'key',
-                        keyprop: 'categories',
+                        key: cat + "key",
+                        keyprop: "categories",
                         onDelete: this.onDeleteCapsule
                     });
                 });
         } else {
             categoriesCapsules = null;
         }
         let categoriesDiv = React.DOM.div(
-            { id: 'categoriesDiv', className: 'box' },
-            'Categories ',
+            { id: "categoriesDiv", className: "box" },
+            "Categories ",
             categoriesCapsules,
             React.createElement(Link, {
-                value: 'Add Categories',
+                value: "Add Categories",
                 onInput: this.linkClicked
             })
         );
         let attendeesDiv = React.DOM.div(
-            { id: 'attendeesDiv', className: 'box' },
-            'Attendees ',
+            { id: "attendeesDiv", className: "box" },
+            "Attendees ",
             React.createElement(Link, {
-                value: 'Add Attendees',
+                value: "Add Attendees",
                 onInput: this.linkClicked
             })
         );
         let remindersDiv = React.DOM.div(
-            { id: 'remindersDiv', className: 'box' },
-            'Reminders ',
+            { id: "remindersDiv", className: "box" },
+            "Reminders ",
             React.createElement(Dropdown, {
-                keyprop: 'reminders',
+                keyprop: "reminders",
                 value: this.state.reminders,
                 options: this.props.remindersList,
                 onInput: this.handleSimpleChange
             })
         );
         let attachmentsDiv = React.DOM.div(
-            { id: 'attachmentsDiv', className: 'box' },
-            'Attachments ',
+            { id: "attachmentsDiv", className: "box" },
+            "Attachments ",
             React.createElement(Link, {
-                value: 'Add Attachments',
+                value: "Add Attachments",
                 onInput: this.linkClicked
             })
         );
         let urlDiv = (this.state.showUrl ?
             React.DOM.div(
-            { id: 'urlDiv', className: 'box' },
-            'Event link ',
+            { id: "urlDiv", className: "box" },
+            "Event link ",
             React.createElement(Link, {
                 value: this.state.url,
                 onInput: this.linkClicked
             }))
             : null
         );
 
         let privacyDiv = React.DOM.div(
-            { id: 'privacyDiv', className: 'box' },
-            'Privacy ',
+            { id: "privacyDiv", className: "box" },
+            "Privacy ",
             React.createElement(Dropdown, {
-                keyprop: 'privacy',
+                keyprop: "privacy",
                 value: this.state.privacy,
                 options: this.props.privacyList,
                 onInput: this.handleSimpleChange
             })
         );
         let statusDiv = React.DOM.div(
-            { id: 'statusDiv', className: 'box' },
-            'Status ',
+            { id: "statusDiv", className: "box" },
+            "Status ",
             React.createElement(Dropdown, {
-                keyprop: 'status',
+                keyprop: "status",
                 value: this.state.status,
                 options: this.props.statusList,
                 onInput: this.handleSimpleChange
             })
         );
         let priorityDiv = React.DOM.div(
-            { id: 'priorityDiv', className: 'box' },
-            'Priority ',
+            { id: "priorityDiv", className: "box" },
+            "Priority ",
             React.createElement(Dropdown, {
-                keyprop: 'priority',
+                keyprop: "priority",
                 value: this.state.priority,
                 options: this.props.priorityList,
                 onInput: this.handleSimpleChange,
                 disabled: !this.props.supportsPriority
             })
         );
 
         let tIndex = this.props.showTimeAsList.findIndex(
             (t) => (t[0] == this.state.showTimeAs));
         let showTimeAsDiv = React.DOM.div(
-            { id: 'showTimeAsDiv', className: 'box' },
+            { id: "showTimeAsDiv", className: "box" },
             React.createElement(Checkbox, {
-                keyprop: 'showTimeAs',
+                keyprop: "showTimeAs",
                 checked: (tIndex == -1 ? false : this.props.showTimeAsList[tIndex][1]),
                 onInput: this.handleShowTimeAsChange,
                 options: this.props.showTimeAsList
             }),
-            'Show Time As Busy'
+            "Show Time As Busy"
         );
         let descriptionDiv = React.DOM.div(
-            { id: 'description', value: 'Description' },
+            { id: "description", value: "Description" },
             React.createElement(TextArea, {
-                keyprop: 'description',
+                keyprop: "description",
                 value: this.state.description,
                 onInput: this.handleSimpleChange
             })
         );
 
         if (this.state.isWideview) {
             // wideview
             return React.DOM.div(
-                { id: 'topwrapper' },
+                { id: "topwrapper" },
                 React.DOM.div(
-                    { className: 'wrapper' },
+                    { className: "wrapper" },
                     titleDiv,
                     startDiv,
                     endDiv,
                     allDayDiv,
                     repeatDiv,
                     attendeesDiv,
                     locationDiv,
                     calendarDiv,
                     categoriesDiv,
                     remindersDiv,
                     attachmentsDiv,
                     urlDiv
                     ),
                 descriptionDiv,
                 React.DOM.div(
-                    { className: 'wrapper', id: 'wrapper2' },
+                    { className: "wrapper", id: "wrapper2" },
                     privacyDiv,
                     statusDiv,
                     priorityDiv,
                     showTimeAsDiv
                 )
             );
         } else {
             // narrowview
             let tabpanelChildren = [
                 descriptionDiv,
                 React.DOM.div({
-                        className: 'wrapper',
-                        style: { flexDirection: 'column' },
+                        className: "wrapper",
+                        style: { flexDirection: "column" },
                     },
                     statusDiv,
                     priorityDiv,
                     showTimeAsDiv
                 ),
                 remindersDiv,
                 attachmentsDiv,
                 attendeesDiv
             ];
             let tabpanels = this.props.tabs.map((m, index) => {
                 return React.DOM.div({
-                        className: 'box tabpanel ' + (this.state.activeTab == index ? '' : 'hidden'),
-                        key: 'tabpanelkey ' + index
+                        className: "box tabpanel " + (this.state.activeTab == index ? "" : "hidden"),
+                        key: "tabpanelkey " + index
                     },
                     tabpanelChildren[index]
                 );
             });
-            return React.DOM.div({ id: 'topwrapper' },
-                React.DOM.div({ className: 'wrapper' },
+            return React.DOM.div({ id: "topwrapper" },
+                React.DOM.div({ className: "wrapper" },
                     titleDiv,
                     locationDiv,
                     startDiv,
                     endDiv,
                     allDayDiv,
                     repeatDiv,
                     React.DOM.div(
-                        { style: { flexDirection: 'row', display: 'flex' } },
+                        { style: { flexDirection: "row", display: "flex" } },
                         calendarDiv,
                         privacyDiv
                     ),
                     categoriesDiv,
                     React.createElement(
                         Tabstrip, {
                             tabs: this.props.tabs,
-                            keyprop: 'activeTab',
+                            keyprop: "activeTab",
                             activeTab: this.state.activeTab,
                             onInput: this.handleSimpleChange
                         }),
                     tabpanels,
                     urlDiv
                 )
             );
         }
--- a/calendar/lightning/content/imip-bar.js
+++ b/calendar/lightning/content/imip-bar.js
@@ -255,33 +255,33 @@ var ltnImipBar = {
             !ltnImipBar.foundItems[0] || !ltnImipBar.itipItem) {
             return;
         }
 
         let msgOverlay = ltnImipBar.msgOverlay;
         let diff = cal.itip.compare(ltnImipBar.itipItem.getItemList({})[0], ltnImipBar.foundItems[0]);
         // displaying chnages is only needed if that is enabled, an item already exists and there are
         // differences
-        if (diff != 0 && Preferences.get('calendar.itip.displayInvitationChanges', false)) {
+        if (diff != 0 && Preferences.get("calendar.itip.displayInvitationChanges", false)) {
             let foundOverlay = ltn.invitation.createInvitationOverlay(ltnImipBar.foundItems[0],
                                                                       ltnImipBar.itipItem);
             let serializedOverlay = cal.xml.serializeDOM(foundOverlay);
             let organizerId = ltnImipBar.itipItem.targetCalendar.getProperty("organizerId");
             if (diff == 1) {
                 // this is an update to previously accepted invitation
                 msgOverlay = ltn.invitation.compareInvitationOverlay(serializedOverlay, msgOverlay,
                                                                      organizerId);
             } else {
                 // this is a copy of a previously sent out invitation or a previous revision of a
                 // meanwhile accepted invitation, so we flip comparison order
                 msgOverlay = ltn.invitation.compareInvitationOverlay(msgOverlay, serializedOverlay,
                                                                      organizerId);
             }
         }
-        msgWindow.displayHTMLInMessagePane('', msgOverlay, false);
+        msgWindow.displayHTMLInMessagePane("", msgOverlay, false);
     },
 
     executeAction: function ltnExecAction(partStat, extendResponse) {
         function _execAction(aActionFunc, aItipItem, aWindow, aPartStat) {
             if (cal.itip.promptCalendar(aActionFunc.method, aItipItem, aWindow)) {
                 // filter out fake partstats
                 if (aPartStat.startsWith("X-")) {
                     partstat = "";
@@ -322,17 +322,17 @@ var ltnImipBar = {
                     Components.utils.reportError(exc);
                 }
                 return true;
             }
             return false;
         }
 
         if (partStat == null) {
-            partStat = '';
+            partStat = "";
         }
         if (partStat == "X-SHOWDETAILS") {
             let items = ltnImipBar.foundItems;
             if (items && items.length) {
                 let item = items[0].isMutable ? items[0] : items[0].clone();
                 modifyEventWithDialog(item);
             }
         } else {
--- a/calendar/lightning/content/lightning-item-iframe.js
+++ b/calendar/lightning/content/lightning-item-iframe.js
@@ -396,17 +396,17 @@ function onLoad() {
     eventDialogCalendarObserver.observe(item.calendar);
 
     onLoad.hasLoaded = true;
 }
 // Set a variable to allow or prevent actions before the dialog is done loading.
 onLoad.hasLoaded = false;
 
 function onEventDialogUnload() {
-    if (typeof ToolbarIconColor !== 'undefined') {
+    if (typeof ToolbarIconColor !== "undefined") {
         ToolbarIconColor.uninit();
     }
     Services.obs.removeObserver(eventDialogQuitObserver,
                                 "quit-application-requested");
     eventDialogCalendarObserver.cancel();
 }
 
 /**
@@ -540,17 +540,17 @@ function cancelItem() {
 function loadDialog(aItem) {
     loadDateTime(aItem);
 
     let itemProps;
     if (gNewItemUI) {
         // Properties for initializing the React component/UI.
         itemProps = {
             initialTitle: aItem.title,
-            initialLocation: aItem.getProperty('LOCATION'),
+            initialLocation: aItem.getProperty("LOCATION"),
             initialStartTimezone: gStartTimezone,
             initialEndTimezone: gEndTimezone,
             initialStartTime: gStartTime,
             initialEndTime: gEndTime
         };
     } else {
         setElementValue("item-title", aItem.title);
         setElementValue("item-location", aItem.getProperty("LOCATION"));
@@ -590,17 +590,17 @@ function loadDialog(aItem) {
 
     // Categories
     if (gNewItemUI) {
         // XXX more to do here with localization, see loadCategories.
         itemProps.initialCategoriesList = cal.sortArrayByLocaleCollator(getPrefCategoriesArray());
         itemProps.initialCategories = aItem.getCategories({});
 
         // just to demo capsules component
-        itemProps.initialCategories = ['Some', 'Demo', 'Categories'];
+        itemProps.initialCategories = ["Some", "Demo", "Categories"];
     } else {
         loadCategories(aItem);
     }
 
     // Attachment
     if (!gNewItemUI) {
         loadCloudProviders();
     }
@@ -2574,24 +2574,24 @@ function updateRepeat(aSuppressDialogs, 
             disableElementWithLock("todo-has-entrydate", "repeat-lock");
         }
     }
 
     let repeatMenu = document.getElementById("item-repeat");
     let repeatValue = repeatMenu.selectedItem.getAttribute("value");
     let repeatDeck = document.getElementById("repeat-deck");
 
-    if (repeatValue == 'none') {
+    if (repeatValue == "none") {
         repeatDeck.selectedIndex = -1;
         window.recurrenceInfo = null;
         let item = window.calendarItem;
         if (isToDo(item)) {
             enableElementWithLock("todo-has-entrydate", "repeat-lock");
         }
-    } else if (repeatValue == 'custom') {
+    } else if (repeatValue == "custom") {
         let lastRepeatDeck = repeatDeck.selectedIndex;
         repeatDeck.selectedIndex = 1;
         // the user selected custom repeat pattern. we now need to bring
         // up the appropriate dialog in order to let the user specify the
         // new rule. First of all, retrieve the item we want to specify
         // the custom repeat pattern for.
         let item = window.calendarItem;
 
@@ -2693,36 +2693,36 @@ function updateRepeat(aSuppressDialogs, 
             setElementValue("repeat-until-datepicker", "forever");
         }
 
         repeatDeck.selectedIndex = 0;
 
         let recRule = createRecurrenceRule();
         recRule.interval = 1;
         switch (repeatValue) {
-            case 'daily':
-              recRule.type = 'DAILY';
+            case "daily":
+              recRule.type = "DAILY";
               break;
-            case 'weekly':
-              recRule.type = 'WEEKLY';
+            case "weekly":
+              recRule.type = "WEEKLY";
               break;
-            case 'every.weekday':
-              recRule.type = 'DAILY';
+            case "every.weekday":
+              recRule.type = "DAILY";
               let onDays = [2, 3, 4, 5, 6];
               recRule.setComponent("BYDAY", onDays.length, onDays);
               break;
-            case 'bi.weekly':
-              recRule.type = 'WEEKLY';
+            case "bi.weekly":
+              recRule.type = "WEEKLY";
               recRule.interval = 2;
               break;
-            case 'monthly':
-              recRule.type = 'MONTHLY';
+            case "monthly":
+              recRule.type = "MONTHLY";
               break;
-            case 'yearly':
-              recRule.type = 'YEARLY';
+            case "yearly":
+              recRule.type = "YEARLY";
               break;
         }
 
         setUpEntrydateForTask(item);
         updateUntildateRecRule(recRule);
 
         recurrenceInfo.insertRecurrenceItemAt(recRule, 0);
         window.recurrenceInfo = recurrenceInfo;
@@ -3402,63 +3402,63 @@ function updateDateTime() {
 function updateTimezone() {
     function updateTimezoneElement(aTimezone, aId, aDateTime) {
         let element = document.getElementById(aId);
         if (!element) {
             return;
         }
 
         if (aTimezone) {
-            element.removeAttribute('collapsed');
+            element.removeAttribute("collapsed");
             element.value = aTimezone.displayName || aTimezone.tzid;
             if (!aDateTime || !aDateTime.isValid || gIsReadOnly || aDateTime.isDate) {
-                if (element.hasAttribute('class')) {
-                    element.setAttribute('class-on-enabled',
-                                         element.getAttribute('class'));
-                    element.removeAttribute('class');
+                if (element.hasAttribute("class")) {
+                    element.setAttribute("class-on-enabled",
+                                         element.getAttribute("class"));
+                    element.removeAttribute("class");
                 }
-                if (element.hasAttribute('onclick')) {
-                    element.setAttribute('onclick-on-enabled',
-                                         element.getAttribute('onclick'));
-                    element.removeAttribute('onclick');
+                if (element.hasAttribute("onclick")) {
+                    element.setAttribute("onclick-on-enabled",
+                                         element.getAttribute("onclick"));
+                    element.removeAttribute("onclick");
                 }
-                element.setAttribute('disabled', 'true');
+                element.setAttribute("disabled", "true");
             } else {
-                if (element.hasAttribute('class-on-enabled')) {
-                    element.setAttribute('class',
-                                         element.getAttribute('class-on-enabled'));
-                    element.removeAttribute('class-on-enabled');
+                if (element.hasAttribute("class-on-enabled")) {
+                    element.setAttribute("class",
+                                         element.getAttribute("class-on-enabled"));
+                    element.removeAttribute("class-on-enabled");
                 }
-                if (element.hasAttribute('onclick-on-enabled')) {
-                    element.setAttribute('onclick',
-                                         element.getAttribute('onclick-on-enabled'));
-                    element.removeAttribute('onclick-on-enabled');
+                if (element.hasAttribute("onclick-on-enabled")) {
+                    element.setAttribute("onclick",
+                                         element.getAttribute("onclick-on-enabled"));
+                    element.removeAttribute("onclick-on-enabled");
                 }
-                element.removeAttribute('disabled');
+                element.removeAttribute("disabled");
             }
         } else {
-            element.setAttribute('collapsed', 'true');
+            element.setAttribute("collapsed", "true");
         }
     }
 
     // convert to default timezone if the timezone option
     // is *not* checked, otherwise keep the specific timezone
     // and display the labels in order to modify the timezone.
     if (gTimezonesEnabled) {
         updateTimezoneElement(gStartTimezone,
-                              'timezone-starttime',
+                              "timezone-starttime",
                               gStartTime);
         updateTimezoneElement(gEndTimezone,
-                              'timezone-endtime',
+                              "timezone-endtime",
                               gEndTime);
     } else {
-        document.getElementById('timezone-starttime')
-                .setAttribute('collapsed', 'true');
-        document.getElementById('timezone-endtime')
-                .setAttribute('collapsed', 'true');
+        document.getElementById("timezone-starttime")
+                .setAttribute("collapsed", "true");
+        document.getElementById("timezone-endtime")
+                .setAttribute("collapsed", "true");
     }
 }
 
 /**
  * Updates dialog controls related to item attachments
  */
 function updateAttachment() {
     let hasAttachments = capSupported("attachments");
--- a/calendar/lightning/content/messenger-overlay-sidebar.js
+++ b/calendar/lightning/content/messenger-overlay-sidebar.js
@@ -74,17 +74,17 @@ var calendarTabType = {
             // Since we do strange tab switching logic in ltnSwitch2Calendar,
             // we should store the current tab state ourselves.
             background: (aTab != tabmail.currentTabInfo)
         };
       },
 
       restoreTab: function(aTabmail, aState) {
         aState.title = ltnGetString("lightning", "tabTitleCalendar");
-        aTabmail.openTab('calendar', aState);
+        aTabmail.openTab("calendar", aState);
       },
 
       onTitleChanged: function(aTab) {
         aTab.title = ltnGetString("lightning", "tabTitleCalendar");
       },
 
       supportsCommand: (aCommand, aTab) => calendarController2.supportsCommand(aCommand),
       isCommandEnabled: (aCommand, aTab) => calendarController2.isCommandEnabled(aCommand),
@@ -119,17 +119,17 @@ var calendarTabType = {
             // Since we do strange tab switching logic in ltnSwitch2Task,
             // we should store the current tab state ourselves.
             background: (aTab != tabmail.currentTabInfo)
         };
       },
 
       restoreTab: function(aTabmail, aState) {
         aState.title = ltnGetString("lightning", "tabTitleTasks");
-        aTabmail.openTab('tasks', aState);
+        aTabmail.openTab("tasks", aState);
       },
 
       onTitleChanged: function(aTab) {
         aTab.title = ltnGetString("lightning", "tabTitleTasks");
       },
 
       supportsCommand: (aCommand, aTab) => calendarController2.supportsCommand(aCommand),
       isCommandEnabled: (aCommand, aTab) => calendarController2.isCommandEnabled(aCommand),
@@ -213,17 +213,17 @@ var calendarItemTabType = {
         // the user if they want to save any unsaved changes.
         aTab.allowTabClose = false;
 
         // Put the arguments where they can be accessed easily
         // from the iframe. (window.arguments[0])
         aTab.iframe.contentWindow.arguments = [aArgs];
 
         // activate or de-activate 'Events and Tasks' menu items
-        document.commandDispatcher.updateCommands('calendar_commands');
+        document.commandDispatcher.updateCommands("calendar_commands");
 
         onLoadLightningItemPanel(iframeId, aArgs.url);
 
         this.idNumber += 1;
     },
     /**
      * Saves a tab's state when it is deactivated / hidden.  The opposite of showTab.
      *
@@ -251,17 +251,17 @@ var calendarItemTabType = {
      */
     showTab: function(aTab) {
         // move toolbox into place then load state
         moveEventToolbox(aTab.panel.firstChild);
         Object.assign(gConfig, aTab.itemTabConfig);
         updateItemTabState(gConfig);
 
         // activate or de-activate 'Events and Tasks' menu items
-        document.commandDispatcher.updateCommands('calendar_commands');
+        document.commandDispatcher.updateCommands("calendar_commands");
     },
     /**
      * Called when there is a request to close a tab.  Using aTab.allowTabClose
      * we first prevent the tab from closing so we can prompt the user
      * about saving changes, then we allow the tab to close.
      *
      * @param {Object} aTab  A tab info object
      */
@@ -349,17 +349,17 @@ var calendarItemTabType = {
                     }
                 });
             }
         }
     }
 };
 
 window.addEventListener("load", function(e) {
-    let tabmail = document.getElementById('tabmail');
+    let tabmail = document.getElementById("tabmail");
     tabmail.registerTabType(calendarTabType);
     tabmail.registerTabType(calendarItemTabType);
     tabmail.registerTabMonitor(calendarTabMonitor);
 }, false);
 
 
 function ltnOnLoad(event) {
     // nuke the onload, or we get called every time there's
@@ -615,17 +615,17 @@ function LtnObserveDisplayDeckChange(eve
     }
 
     let id = deck.selectedPanel && deck.selectedPanel.id;
 
     // Switch back to mail mode in case we find that this
     // notification has been fired but we're still in calendar or task mode.
     // Specifically, switch back if we're *not* in mail mode but the notification
     // did *not* come from either the "calendar-view-box" or the "calendar-task-box".
-    if (gCurrentMode != 'mail') {
+    if (gCurrentMode != "mail") {
         if (id != "calendar-view-box" && id != "calendar-task-box") {
             ltnSwitch2Mail();
         }
     }
 }
 
 function ltnFinish() {
     getCalendarManager().removeObserver(gInvitationsCalendarManagerObserver);
@@ -719,70 +719,70 @@ function openInvitationsDialog() {
 
 /**
  * the current mode is set to a string defining the current
  * mode we're in. allowed values are:
  *  - 'mail'
  *  - 'calendar'
  *  - 'task'
  */
-var gCurrentMode = 'mail';
+var gCurrentMode = "mail";
 
 /**
  * ltnSwitch2Mail() switches to the mail mode
  */
 
 function ltnSwitch2Mail() {
-  if (gCurrentMode != 'mail') {
-    gCurrentMode = 'mail';
+  if (gCurrentMode != "mail") {
+    gCurrentMode = "mail";
     document.getElementById("modeBroadcaster").setAttribute("mode", gCurrentMode);
 
-    document.commandDispatcher.updateCommands('calendar_commands');
+    document.commandDispatcher.updateCommands("calendar_commands");
     window.setCursor("auto");
   }
 }
 
 /**
  * ltnSwitch2Calendar() switches to the calendar mode
  */
 
 function ltnSwitch2Calendar() {
-  if (gCurrentMode != 'calendar') {
-    gCurrentMode = 'calendar';
+  if (gCurrentMode != "calendar") {
+    gCurrentMode = "calendar";
     document.getElementById("modeBroadcaster").setAttribute("mode", gCurrentMode);
 
     // display the calendar panel on the display deck
     let deck = document.getElementById("calendarDisplayDeck");
     deck.selectedPanel = document.getElementById("calendar-view-box");
 
     // show the last displayed type of calendar view
     switchToView(gLastShownCalendarView);
 
-    document.commandDispatcher.updateCommands('calendar_commands');
+    document.commandDispatcher.updateCommands("calendar_commands");
     window.setCursor("auto");
 
     // make sure the view is sized correctly
     onCalendarViewResize();
   }
 }
 
 /**
  * ltnSwitch2Task() switches to the task mode
  */
 
 function ltnSwitch2Task() {
-  if (gCurrentMode != 'task') {
-    gCurrentMode = 'task';
+  if (gCurrentMode != "task") {
+    gCurrentMode = "task";
     document.getElementById("modeBroadcaster").setAttribute("mode", gCurrentMode);
 
     // display the task panel on the display deck
     let deck = document.getElementById("calendarDisplayDeck");
     deck.selectedPanel = document.getElementById("calendar-task-box");
 
-    document.commandDispatcher.updateCommands('calendar_commands');
+    document.commandDispatcher.updateCommands("calendar_commands");
     window.setCursor("auto");
   }
 }
 
 var gCalSetupMailContext = {
     popup: function gCalSetupMailContext_popup() {
         let hasSelection = (gFolderDisplay.selectedMessage != null);
         // Disable the convert menu altogether.
@@ -792,17 +792,17 @@ var gCalSetupMailContext = {
 };
 
 // Overwrite the InitMessageMenu function, since we never know in which order
 // the popupshowing event will be processed. This function takes care of
 // disabling the message menu when in calendar or task mode.
 function calInitMessageMenu() {
     calInitMessageMenu.origFunc();
 
-    document.getElementById("markMenu").disabled = (gCurrentMode != 'mail');
+    document.getElementById("markMenu").disabled = (gCurrentMode != "mail");
 }
 calInitMessageMenu.origFunc = InitMessageMenu;
 InitMessageMenu = calInitMessageMenu;
 
 window.addEventListener("load", ltnOnLoad, false);
 
 /**
  * Get the toolbox id for the current tab type.
--- a/calendar/lightning/modules/ltnInvitationUtils.jsm
+++ b/calendar/lightning/modules/ltnInvitationUtils.jsm
@@ -271,136 +271,136 @@ ltn.invitation = {
     compareInvitationOverlay: function(aOldDoc, aNewDoc, aIgnoreId) {
         /**
          * Transforms text node content to formated child nodes. Decorations are defined in imip.css
          * @param {Node}    aToNode text node to change
          * @param {String}  aType   use 'newline' for the same, 'added' or 'removed' for decoration
          * @param {String}  aText   [optional]
          * @param {Boolean} aClear  [optional] for consecutive changes on the same node, set to false
          */
-        function _content2Child(aToNode, aType, aText = '', aClear = true) {
+        function _content2Child(aToNode, aType, aText = "", aClear = true) {
             let nodeDoc = aToNode.ownerDocument;
             if (aClear && aToNode.hasChildNodes()) {
                 aToNode.removeChild(aToNode.firstChild);
             }
-            let n = nodeDoc.createElement(aType.toLowerCase() == 'newline' ? 'br' : 'span');
+            let n = nodeDoc.createElement(aType.toLowerCase() == "newline" ? "br" : "span");
             switch (aType) {
-                case 'added':
-                case 'modified':
-                case 'removed':
+                case "added":
+                case "modified":
+                case "removed":
                     n.className = aType;
-                    if (Preferences.get('calendar.view.useSystemColors', false)) {
-                        n.setAttribute('systemcolors', true);
+                    if (Preferences.get("calendar.view.useSystemColors", false)) {
+                        n.setAttribute("systemcolors", true);
                     }
                     break;
             }
             n.textContent = aText;
             aToNode.appendChild(n);
         }
         /**
          * Extracts attendees from the given document
          * @param   {Node}   aDoc      document to search in
          * @param   {String} aElement  element name as used in _compareElement()
          * @returns {Array}            attendee nodes
          */
         function _getAttendees(aDoc, aElement) {
             let attendees = [];
-            for (let att of aDoc.getElementsByClassName('attendee-name')) {
+            for (let att of aDoc.getElementsByClassName("attendee-name")) {
                 if (!att.parentNode.hidden &&
-                    att.parentNode.parentNode.id == (aElement + '-table')) {
+                    att.parentNode.parentNode.id == (aElement + "-table")) {
                     attendees[att.textContent] = att;
                 }
             }
             return attendees;
         }
         /**
          * Compares both documents for elements related to the given name
          * @param {String} aElement  part of the element id within the html template
          */
         function _compareElement(aElement) {
-            let element = aElement == 'attendee' ? aElement + 's' : aElement;
-            let oldRow = aOldDoc.getElementById('imipHtml-' + element + '-row');
-            let newRow = aNewDoc.getElementById('imipHtml-' + element + '-row');
-            let row = doc.getElementById('imipHtml-' + element + '-row');
-            let oldContent = aOldDoc.getElementById('imipHtml-' + aElement + '-content');
-            let content = doc.getElementById('imipHtml-' + aElement + '-content');
+            let element = aElement == "attendee" ? aElement + "s" : aElement;
+            let oldRow = aOldDoc.getElementById("imipHtml-" + element + "-row");
+            let newRow = aNewDoc.getElementById("imipHtml-" + element + "-row");
+            let row = doc.getElementById("imipHtml-" + element + "-row");
+            let oldContent = aOldDoc.getElementById("imipHtml-" + aElement + "-content");
+            let content = doc.getElementById("imipHtml-" + aElement + "-content");
 
             if (newRow.hidden && !oldRow.hidden) {
                 // element was removed
                 // we only need to check for simple elements here: attendee or organizer row
                 // cannot be removed
                 if (oldContent) {
-                    _content2Child(content, 'removed', oldContent.textContent);
+                    _content2Child(content, "removed", oldContent.textContent);
                     row.hidden = false;
                 }
             } else if (!newRow.hidden && oldRow.hidden) {
                 // the element was added
                 // we only need to check for simple elements here: attendee or organizer row
                 // must have been there before
                 if (content) {
-                    _content2Child(content, 'added', content.textContent);
+                    _content2Child(content, "added", content.textContent);
                 }
             } else if (!newRow.hidden && !oldRow.hidden) {
                 // the element may have been modified
                 if (content) {
                     if (content.textContent != oldContent.textContent) {
-                        _content2Child(content, 'added', content.textContent);
-                        _content2Child(content, 'newline', null, false);
-                        _content2Child(content, 'removed', oldContent.textContent, false);
+                        _content2Child(content, "added", content.textContent);
+                        _content2Child(content, "newline", null, false);
+                        _content2Child(content, "removed", oldContent.textContent, false);
                     }
                 } else {
-                    content = doc.getElementById(aElement + '-table');
-                    oldContent = aOldDoc.getElementById(aElement + '-table');
+                    content = doc.getElementById(aElement + "-table");
+                    oldContent = aOldDoc.getElementById(aElement + "-table");
                     let excludeAddress = cal.removeMailTo(aIgnoreId);
                     if (content && oldContent && !content.isEqualNode(oldContent)) {
                         // extract attendees
                         let attendees = _getAttendees(doc, aElement);
                         let oldAttendees = _getAttendees(aOldDoc, aElement);
                         // decorate newly added attendees
                         for (let att of Object.keys(attendees)) {
                             if (!(att in oldAttendees)) {
-                                _content2Child(attendees[att], 'added', att);
+                                _content2Child(attendees[att], "added", att);
                             }
                         }
                         for (let att of Object.keys(oldAttendees)) {
                             // if att is the user his/herself, who accepted an invitation he/she was
                             // not invited to, we exclude him/her from decoration
                             let notExcluded = excludeAddress == "" ||
                                                !att.includes(excludeAddress);
                             // decorate removed attendees
                             if (!(att in attendees) && notExcluded) {
-                                _content2Child(oldAttendees[att], 'removed', att);
+                                _content2Child(oldAttendees[att], "removed", att);
                                 content.appendChild(oldAttendees[att].parentNode.cloneNode(true));
                             } else if ((att in attendees) && notExcluded) {
                                 // highlight partstat, role or usertype changes
                                 let oldAtts = oldAttendees[att].parentNode
                                                                .getElementsByClassName("itip-icon")[0]
                                                                .attributes;
                                 let newAtts = attendees[att].parentNode
                                                             .getElementsByClassName("itip-icon")[0]
                                                             .attributes;
                                 let hasChanged = function(name) {
                                     return oldAtts.getNamedItem(name).value !=
                                            newAtts.getNamedItem(name).value;
                                 };
                                 if (["role", "partstat", "usertype"].some(hasChanged)) {
-                                    _content2Child(attendees[att], 'modified', att);
+                                    _content2Child(attendees[att], "modified", att);
                                 }
                             }
                         }
                     }
                 }
             }
         }
         aOldDoc = cal.xml.parseString(aOldDoc);
         aNewDoc = cal.xml.parseString(aNewDoc);
         let doc = aNewDoc.cloneNode(true);
         // elements to consider for comparison
-        ['summary', 'location', 'when', 'canceledOccurrences',
-         'modifiedOccurrences', 'organizer', 'attendee'].forEach(_compareElement);
+        ["summary", "location", "when", "canceledOccurrences",
+         "modifiedOccurrences", "organizer", "attendee"].forEach(_compareElement);
         return cal.xml.serializeDOM(doc);
     },
 
     /**
      * Returns the header section for an invitation email.
      * @param   {String}         aMessageId  the message id to use for that email
      * @param   {nsIMsgIdentity} aIdentity   the identity to use for that email
      * @returns {String}                     the source code of the header section of the email
--- a/calendar/providers/caldav/calDavCalendar.js
+++ b/calendar/providers/caldav/calDavCalendar.js
@@ -427,38 +427,38 @@ calDavCalendar.prototype = {
     set uri(aUri) {
         this.mUri = aUri;
 
         return aUri;
     },
 
     get calendarUri() {
         let calUri = this.mUri.clone();
-        let parts = calUri.spec.split('?');
+        let parts = calUri.spec.split("?");
         if (parts.length > 1) {
             calUri.spec = parts.shift();
-            this.mUriParams = '?' + parts.join('?');
+            this.mUriParams = "?" + parts.join("?");
         }
-        if (calUri.spec.charAt(calUri.spec.length - 1) != '/') {
+        if (calUri.spec.charAt(calUri.spec.length - 1) != "/") {
             calUri.spec += "/";
         }
         return calUri;
     },
 
     setCalHomeSet: function caldav_setCalHomeSet(removeLastPathSegment) {
         if (removeLastPathSegment) {
             let calUri = this.mUri.clone();
-            let split1 = calUri.spec.split('?');
+            let split1 = calUri.spec.split("?");
             let baseUrl = split1[0];
-            if (baseUrl.charAt(baseUrl.length - 1) == '/') {
+            if (baseUrl.charAt(baseUrl.length - 1) == "/") {
                 baseUrl = baseUrl.substring(0, baseUrl.length - 2);
             }
-            let split2 = baseUrl.split('/');
+            let split2 = baseUrl.split("/");
             split2.pop();
-            calUri.spec = split2.join('/') + '/';
+            calUri.spec = split2.join("/") + "/";
             this.mCalHomeSet = calUri;
         } else {
             this.mCalHomeSet = this.calendarUri;
         }
     },
 
     mOutboxUrl:  null,
     get outboxUrl() {
@@ -1378,20 +1378,20 @@ calDavCalendar.prototype = {
         if (!this.mCtag || !this.mFirstRefreshDone || this.mHasWebdavSyncSupport) {
             this.getUpdatedItems(this.calendarUri, aChangeLogListener);
             return;
         }
         let thisCalendar = this;
         let queryXml =
             xmlHeader +
             '<D:propfind xmlns:D="DAV:" xmlns:CS="http://calendarserver.org/ns/">' +
-              '<D:prop>' +
-                '<CS:getctag/>' +
-              '</D:prop>' +
-            '</D:propfind>';
+              "<D:prop>" +
+                "<CS:getctag/>" +
+              "</D:prop>" +
+            "</D:propfind>";
 
         if (this.verboseLogging()) {
             cal.LOG("CalDAV: send(" + this.makeUri().spec + "): " + queryXml);
         }
 
         let streamListener = {};
         streamListener.onStreamComplete =
             function safeRefresh_safeRefresh_onStreamComplete(aLoader, aContext, aStatus, aResultLength, aResult) {
@@ -1519,22 +1519,22 @@ calDavCalendar.prototype = {
             webDavSync = new webDavSyncHandler(this, aUri, aChangeLogListener);
             webDavSync.doWebDAVSync();
             return;
         }
 
         let queryXml =
             xmlHeader +
             '<D:propfind xmlns:D="DAV:">' +
-              '<D:prop>' +
-                '<D:getcontenttype/>' +
-                '<D:resourcetype/>' +
-                '<D:getetag/>' +
-              '</D:prop>' +
-            '</D:propfind>';
+              "<D:prop>" +
+                "<D:getcontenttype/>" +
+                "<D:resourcetype/>" +
+                "<D:getetag/>" +
+              "</D:prop>" +
+            "</D:propfind>";
 
         let requestUri = this.makeUri(null, aUri);
         if (this.verboseLogging()) {
             cal.LOG("CalDAV: send(" + requestUri.spec + "): " + queryXml);
         }
 
         this.sendHttpRequest(requestUri, queryXml, MIME_TEXT_XML, null, (channel) => {
             channel.requestMethod = "PROPFIND";
@@ -1683,25 +1683,25 @@ calDavCalendar.prototype = {
         this.ensureTargetCalendar();
 
         let resourceType = kDavResourceTypeNone;
         let thisCalendar = this;
 
         let queryXml =
             xmlHeader +
             '<D:propfind xmlns:D="DAV:" xmlns:CS="http://calendarserver.org/ns/" xmlns:C="urn:ietf:params:xml:ns:caldav">' +
-              '<D:prop>' +
-                '<D:resourcetype/>' +
-                '<D:owner/>' +
-                '<D:current-user-principal/>' +
-                '<D:supported-report-set/>' +
-                '<C:supported-calendar-component-set/>' +
-                '<CS:getctag/>' +
-              '</D:prop>' +
-            '</D:propfind>';
+              "<D:prop>" +
+                "<D:resourcetype/>" +
+                "<D:owner/>" +
+                "<D:current-user-principal/>" +
+                "<D:supported-report-set/>" +
+                "<C:supported-calendar-component-set/>" +
+                "<CS:getctag/>" +
+              "</D:prop>" +
+            "</D:propfind>";
 
         if (this.verboseLogging()) {
             cal.LOG("CalDAV: send: " + queryXml);
         }
         let streamListener = {};
 
         streamListener.onStreamComplete =
             function checkDavResourceType_oSC(aLoader, aContext, aStatus, aResultLength, aResult) {
@@ -2037,20 +2037,20 @@ calDavCalendar.prototype = {
         }
 
         let homeSet = this.makeUri(null, this.mCalHomeSet);
         let thisCalendar = this;
 
         let queryXml =
             xmlHeader +
             '<D:propfind xmlns:D="DAV:">' +
-              '<D:prop>' +
-                '<D:principal-collection-set/>' +
-              '</D:prop>' +
-            '</D:propfind>';
+              "<D:prop>" +
+                "<D:principal-collection-set/>" +
+              "</D:prop>" +
+            "</D:propfind>";
 
         if (this.verboseLogging()) {
             cal.LOG("CalDAV: send: " + homeSet.spec + "\n" + queryXml);
         }
         let streamListener = {};
         streamListener.onStreamComplete =
             function findInOutboxes_oSC(aLoader, aContext, aStatus,
                                          aResultLength, aResult) {
@@ -2134,42 +2134,42 @@ calDavCalendar.prototype = {
 
         // Remove trailing slash, if its there
         let homePath = this.ensureEncodedPath(this.mCalHomeSet.spec.replace(/\/$/, ""));
         let queryXml, queryMethod, queryDepth;
         if (this.mPrincipalUrl) {
             queryXml =
                 xmlHeader +
                 '<D:propfind xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">' +
-                  '<D:prop>' +
-                    '<C:calendar-home-set/>' +
-                    '<C:calendar-user-address-set/>' +
-                    '<C:schedule-inbox-URL/>' +
-                    '<C:schedule-outbox-URL/>' +
-                  '</D:prop>' +
-                '</D:propfind>';
+                  "<D:prop>" +
+                    "<C:calendar-home-set/>" +
+                    "<C:calendar-user-address-set/>" +
+                    "<C:schedule-inbox-URL/>" +
+                    "<C:schedule-outbox-URL/>" +
+                  "</D:prop>" +
+                "</D:propfind>";
             queryMethod = "PROPFIND";
             queryDepth = 0;
         } else {
             queryXml =
                 xmlHeader +
                 '<D:principal-property-search xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">' +
-                '<D:property-search>' +
-                    '<D:prop>' +
-                        '<C:calendar-home-set/>' +
-                    '</D:prop>' +
-                    '<D:match>' + cal.xml.escapeString(homePath) + '</D:match>' +
-                '</D:property-search>' +
-                    '<D:prop>' +
-                        '<C:calendar-home-set/>' +
-                        '<C:calendar-user-address-set/>' +
-                        '<C:schedule-inbox-URL/>' +
-                        '<C:schedule-outbox-URL/>' +
-                    '</D:prop>' +
-                '</D:principal-property-search>';
+                "<D:property-search>" +
+                    "<D:prop>" +
+                        "<C:calendar-home-set/>" +
+                    "</D:prop>" +
+                    "<D:match>" + cal.xml.escapeString(homePath) + "</D:match>" +
+                "</D:property-search>" +
+                    "<D:prop>" +
+                        "<C:calendar-home-set/>" +
+                        "<C:calendar-user-address-set/>" +
+                        "<C:schedule-inbox-URL/>" +
+                        "<C:schedule-outbox-URL/>" +
+                    "</D:prop>" +
+                "</D:principal-property-search>";
             queryMethod = "REPORT";
             queryDepth = 1;
         }
 
         // We want a trailing slash, ensure it.
         let nextNS = aNameSpaceList.pop().replace(/([^\/])$/, "$1/");
         let requestUri = makeURL(this.calendarUri.prePath + this.ensureEncodedPath(nextNS));
 
@@ -2212,17 +2212,17 @@ calDavCalendar.prototype = {
                 let normalized = homeSet.replace(/([^\/])$/, "$1/");
                 let chs = thisCalendar.mCalHomeSet;
                 return normalized == chs.path || normalized == chs.spec;
             }
             function createBoxUrl(path) {
                 let url = thisCalendar.mUri.clone();
                 url.path = thisCalendar.ensureDecodedPath(path);
                 // Make sure the uri has a / at the end, as we do with the calendarUri.
-                if (url.path.charAt(url.path.length - 1) != '/') {
+                if (url.path.charAt(url.path.length - 1) != "/") {
                     url.path += "/";
                 }
                 return url;
             }
 
             // If there are multiple home sets, we need to match the email addresses for scheduling.
             // If there is only one, assume its the right one.
             // TODO with multiple address sets, we should just use the ACL manager.
--- a/calendar/providers/caldav/calDavRequestHandlers.js
+++ b/calendar/providers/caldav/calDavRequestHandlers.js
@@ -329,22 +329,22 @@ webDavSyncHandler.prototype = {
             let syncToken = cal.xml.escapeString(this.calendar.mWebdavSyncToken);
             syncTokenString = "<sync-token>" + syncToken + "</sync-token>";
         }
 
         let queryXml =
           xmlHeader +
           '<sync-collection xmlns="DAV:">' +
             syncTokenString +
-            '<sync-level>1</sync-level>' +
-            '<prop>' +
-              '<getcontenttype/>' +
-              '<getetag/>' +
-            '</prop>' +
-          '</sync-collection>';
+            "<sync-level>1</sync-level>" +
+            "<prop>" +
+              "<getcontenttype/>" +
+              "<getetag/>" +
+            "</prop>" +
+          "</sync-collection>";
 
         let requestUri = this.calendar.makeUri(null, this.baseUri);
 
         if (this.calendar.verboseLogging()) {
             cal.LOG("CalDAV: send(" + requestUri.spec + "): " + queryXml);
         }
         cal.LOG("CalDAV: webdav-sync Token: " + this.calendar.mWebdavSyncToken);
         this.calendar.sendHttpRequest(requestUri, queryXml, MIME_TEXT_XML, null, (channel) => {
@@ -515,17 +515,17 @@ webDavSyncHandler.prototype = {
                     this.tag = aLocalName;
                 }
                 this.currentResponse[this.tag] = "";
                 break;
             case "href":
             case "getetag":
             case "getcontenttype":
             case "sync-token":
-                this.tag = aLocalName.replace(/-/g, '');
+                this.tag = aLocalName.replace(/-/g, "");
                 this.currentResponse[this.tag ] = "";
                 break;
         }
         if (this.calendar.verboseLogging()) {
             this.logXML += "<" + aQName + ">";
         }
     },
 
@@ -697,22 +697,22 @@ multigetSyncHandler.prototype = {
             // encodes it before it is sent to the server
             let locpath = this.calendar.ensureEncodedPath(this.itemsNeedFetching.pop());
             hrefString += "<D:href>" + cal.xml.escapeString(locpath) + "</D:href>";
         }
 
         let queryXml =
           xmlHeader +
           '<C:calendar-multiget xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">' +
-            '<D:prop>' +
-              '<D:getetag/>' +
-              '<C:calendar-data/>' +
-            '</D:prop>' +
+            "<D:prop>" +
+              "<D:getetag/>" +
+              "<C:calendar-data/>" +
+            "</D:prop>" +
             hrefString +
-          '</C:calendar-multiget>';
+          "</C:calendar-multiget>";
 
         let requestUri = this.calendar.makeUri(null, this.baseUri);
         if (this.calendar.verboseLogging()) {
             cal.LOG("CalDAV: send(" + requestUri.spec + "): " + queryXml);
         }
         this.calendar.sendHttpRequest(requestUri, queryXml, MIME_TEXT_XML, null, (channel) => {
             channel.requestMethod = "REPORT";
             channel.setRequestHeader("Depth", "1", false);
@@ -869,17 +869,17 @@ multigetSyncHandler.prototype = {
                 } else {
                     this.tag = aLocalName;
                 }
                 this.currentResponse[this.tag] = "";
                 break;
             case "calendar-data":
             case "href":
             case "getetag":
-                this.tag = aLocalName.replace(/-/g, '');
+                this.tag = aLocalName.replace(/-/g, "");
                 this.currentResponse[this.tag ] = "";
                 break;
         }
         if (this.calendar.verboseLogging()) {
             this.logXML += "<" + aQName + ">";
         }
     },
 
--- a/calendar/providers/ics/calICSCalendar.js
+++ b/calendar/providers/ics/calICSCalendar.js
@@ -134,22 +134,22 @@ calICSCalendar.prototype = {
         switch (aName) {
             case "requiresNetwork":
                 return !this.uri.schemeIs("file");
         }
         return this.__proto__.__proto__.getProperty.apply(this, arguments);
     },
 
     refresh: function calICSCalendar_refresh() {
-        this.queue.push({ action: 'refresh', forceRefresh: false });
+        this.queue.push({ action: "refresh", forceRefresh: false });
         this.processQueue();
     },
 
     forceRefresh: function calICSCalendar_forceRefresh() {
-        this.queue.push({ action: 'refresh', forceRefresh: true });
+        this.queue.push({ action: "refresh", forceRefresh: true });
         this.processQueue();
     },
 
     prepareChannel: function calICSCalendar_prepareChannel(aChannel, aForceRefresh) {
         aChannel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE;
         aChannel.notificationCallbacks = this;
 
         // Allow the hook to do its work, like a performing a quick check to
@@ -458,44 +458,44 @@ calICSCalendar.prototype = {
     // copied code.
     addItem: function(aItem, aListener) {
         this.adoptItem(aItem.clone(), aListener);
     },
     adoptItem: function(aItem, aListener) {
         if (this.readOnly) {
             throw calIErrors.CAL_IS_READONLY;
         }
-        this.queue.push({ action: 'add', item: aItem, listener: aListener });
+        this.queue.push({ action: "add", item: aItem, listener: aListener });
         this.processQueue();
     },
 
     modifyItem: function(aNewItem, aOldItem, aListener) {
         if (this.readOnly) {
             throw calIErrors.CAL_IS_READONLY;
         }
-        this.queue.push({ action: 'modify', oldItem: aOldItem,
+        this.queue.push({ action: "modify", oldItem: aOldItem,
                           newItem: aNewItem, listener: aListener });
         this.processQueue();
     },
 
     deleteItem: function(aItem, aListener) {
         if (this.readOnly) {
             throw calIErrors.CAL_IS_READONLY;
         }
-        this.queue.push({ action: 'delete', item: aItem, listener: aListener });
+        this.queue.push({ action: "delete", item: aItem, listener: aListener });
         this.processQueue();
     },
 
     getItem: function(aId, aListener) {
-        this.queue.push({ action: 'get_item', id: aId, listener: aListener });
+        this.queue.push({ action: "get_item", id: aId, listener: aListener });
         this.processQueue();
     },
 
     getItems: function(aItemFilter, aCount, aRangeStart, aRangeEnd, aListener) {
-        this.queue.push({ action: 'get_items',
+        this.queue.push({ action: "get_items",
                           itemFilter: aItemFilter, count: aCount,
                           rangeStart: aRangeStart, rangeEnd: aRangeEnd,
                           listener: aListener });
         this.processQueue();
     },
 
     processQueue: function() {
         if (this.isLocked()) {
@@ -513,40 +513,40 @@ calICSCalendar.prototype = {
             }
         };
 
         let a;
         let writeICS = false;
         let refreshAction = null;
         while ((a = this.queue.shift())) {
             switch (a.action) {
-                case 'add':
+                case "add":
                     this.mMemoryCalendar.addItem(a.item, new modListener(a));
                     this.mModificationActions.push(a);
                     writeICS = true;
                     break;
-                case 'modify':
+                case "modify":
                     this.mMemoryCalendar.modifyItem(a.newItem, a.oldItem, new modListener(a));
                     this.mModificationActions.push(a);
                     writeICS = true;
                     break;
-                case 'delete':
+                case "delete":
                     this.mMemoryCalendar.deleteItem(a.item, new modListener(a));
                     this.mModificationActions.push(a);
                     writeICS = true;
                     break;
-                case 'get_item':
+                case "get_item":
                     this.mMemoryCalendar.getItem(a.id, a.listener);
                     break;
-                case 'get_items':
+                case "get_items":
                     this.mMemoryCalendar.getItems(a.itemFilter, a.count,
                                                   a.rangeStart, a.rangeEnd,
                                                   a.listener);
                     break;
-                case 'refresh':
+                case "refresh":
                     refreshAction = a;
                     break;
             }
             if (refreshAction) {
                 // break queue processing here and wait for refresh to finish
                 // before processing further operations
                 break;
             }
@@ -635,17 +635,17 @@ calICSCalendar.prototype = {
         // This is a bit messy. createUnique creates an empty file,
         // but we don't use that file. All we want is a filename, to be used
         // in the call to copyTo later. So we create a file, get the filename,
         // and never use the file again, but write over it.
         // Using createUnique anyway, because I don't feel like
         // re-implementing it
         function makeDailyFileName() {
             let dailyBackupFile = backupDir.clone();
-            dailyBackupFile.append(makeName('day'));
+            dailyBackupFile.append(makeName("day"));
             dailyBackupFile.createUnique(CI.nsIFile.NORMAL_FILE_TYPE,
                                          parseInt("0600", 8));
             dailyBackupFileName = dailyBackupFile.leafName;
 
             // Remove the reference to the nsIFile, because we need to
             // write over the file later, and you never know what happens
             // if something still has a reference.
             // Also makes it explicit that we don't need the file itself,
@@ -686,19 +686,19 @@ calICSCalendar.prototype = {
             while (dirEnum.hasMoreElements()) {
                 let file = dirEnum.getNext().QueryInterface(CI.nsIFile);
                 if (file.isFile()) {
                     files.push({ name: file.leafName, lastmodified: file.lastModifiedTime });
                 }
             }
 
             if (doDailyBackup) {
-                purgeBackupsByType(files, 'day');
+                purgeBackupsByType(files, "day");
             } else {
-                purgeBackupsByType(files, 'edit');
+                purgeBackupsByType(files, "edit");
             }
 
             return;
         }
 
         function copyToOverwriting(oldFile, newParentDir, newName) {
             try {
                 let newFile = newParentDir.clone();
@@ -745,37 +745,37 @@ calICSCalendar.prototype = {
             // xpcshell. Don't die, but continue the upload.
             cal.ERROR("[calICSCalendar] Backup failed, no calendarmanager:" + e);
             aCallback.call(this);
             return;
         }
 
         let doInitialBackup = false;
         let initialBackupFile = backupDir.clone();
-        initialBackupFile.append(makeName('initial'));
+        initialBackupFile.append(makeName("initial"));
         if (!initialBackupFile.exists()) {
             doInitialBackup = true;
         }
 
         let doDailyBackup = false;
-        let backupTime = this.getProperty('backup-time2');
+        let backupTime = this.getProperty("backup-time2");
         if (!backupTime ||
             (new Date().getTime() > backupTime + backupDays * 24 * 60 * 60 * 1000)) {
             // It's time do to a daily backup
             doDailyBackup = true;
-            this.setProperty('backup-time2', new Date().getTime());
+            this.setProperty("backup-time2", new Date().getTime());
         }
 
         let dailyBackupFileName;
         if (doDailyBackup) {
             dailyBackupFileName = makeDailyFileName(backupDir);
         }
 
         let backupFile = backupDir.clone();
-        backupFile.append(makeName('edit'));
+        backupFile.append(makeName("edit"));
         backupFile.createUnique(CI.nsIFile.NORMAL_FILE_TYPE, parseInt("0600", 8));
 
         purgeOldBackups();
 
         // Now go download the remote file, and store it somewhere local.
         let channel = Services.io.newChannelFromURI2(this.mUri,
                                                      null,
                                                      Services.scriptSecurityManager.getSystemPrincipal(),
@@ -787,17 +787,17 @@ calICSCalendar.prototype = {
 
         let downloader = Components.classes["@mozilla.org/network/downloader;1"]
                                    .createInstance(CI.nsIDownloader);
 
         let savedthis = this;
         let listener = {
             onDownloadComplete: function(opdownloader, request, ctxt, status, result) {
                 if (doInitialBackup) {
-                    copyToOverwriting(result, backupDir, makeName('initial'));
+                    copyToOverwriting(result, backupDir, makeName("initial"));
                 }
                 if (doDailyBackup) {
                     copyToOverwriting(result, backupDir, dailyBackupFileName);
                 }
 
                 aCallback.call(savedthis);
             }
         };
@@ -977,17 +977,17 @@ httpHooks.prototype = {
     },
 
     onBeforePut: function(aChannel) {
         if (this.mEtag) {
             let httpchannel = aChannel.QueryInterface(Components.interfaces.nsIHttpChannel);
 
             // Apache doesn't work correctly with if-match on a PUT method,
             // so use the webdav header
-            httpchannel.setRequestHeader("If", '([' + this.mEtag + '])', false);
+            httpchannel.setRequestHeader("If", "([" + this.mEtag + "])", false);
         }
         return true;
     },
 
     onAfterPut: function(aChannel, aRespFunc) {
         let httpchannel = aChannel.QueryInterface(Components.interfaces.nsIHttpChannel);
         try {
             this.mEtag = httpchannel.getResponseHeader("ETag");
@@ -1018,20 +1018,20 @@ httpHooks.prototype = {
                     cal.LOG("[calICSCalendar] Failed to fetch channel etag");
                 }
 
                 thisHook.mEtag = icsXPathFirst(multistatus, "/D:propfind/D:response/D:propstat/D:prop/D:getetag");
                 aRespFunc();
             };
             let queryXml =
                 '<D:propfind xmlns:D="DAV:">' +
-                  '<D:prop>' +
-                    '<D:getetag/>' +
-                  '</D:prop>' +
-                '</D:propfind>';
+                  "<D:prop>" +
+                    "<D:getetag/>" +
+                  "</D:prop>" +
+                "</D:propfind>";
 
             let etagChannel = cal.prepHttpChannel(aChannel.URI, queryXml,
                                                   "text/xml; charset=utf-8",
                                                   this);
             etagChannel.setRequestHeader("Depth", "0", false);
             etagChannel.requestMethod = "PROPFIND";
             let streamLoader = Components.classes["@mozilla.org/network/stream-loader;1"]
                                          .createInstance(Components.interfaces
--- a/calendar/providers/storage/calStorageHelpers.jsm
+++ b/calendar/providers/storage/calStorageHelpers.jsm
@@ -82,33 +82,33 @@ function dateToText(d) {
  *
  * @param d     The text to transform.
  * @return      The resulting calIDateTime.
  */
 function textToDate(d) {
     let dval;
     let tz = "UTC";
 
-    if (d[0] == 'Z') {
+    if (d[0] == "Z") {
         let strs = d.substr(2).split(":");
         dval = parseInt(strs[0], 10);
         tz = strs[1].replace(/%:/g, ":").replace(/%%/g, "%");
     } else {
         dval = parseInt(d.substr(2), 10);
     }
 
     let date;
-    if (d[0] == 'U' || d[0] == 'Z') {
+    if (d[0] == "U" || d[0] == "Z") {
         date = newDateTime(dval, tz);
-    } else if (d[0] == 'L') {
+    } else if (d[0] == "L") {
         // is local time
         date = newDateTime(dval, "floating");
     }
 
-    if (d[1] == 'D') {
+    if (d[1] == "D") {
         date.isDate = true;
     }
     return date;
 }
 
 //
 // other helpers
 //
--- a/calendar/providers/storage/calStorageUpgrade.jsm
+++ b/calendar/providers/storage/calStorageUpgrade.jsm
@@ -1369,44 +1369,44 @@ upgrade.v21 = function upgrade_v21(db, v
     beginTransaction(db);
 
     try {
         // The following operation is only important on a live DB, since we are
         // changing only the values on the DB, not the schema itself.
         if (db) {
             // Oh boy, here we go :-)
             // Insert a new row with the following columns...
-            let insertSQL = 'INSERT INTO cal_recurrence ' +
-                            '            (item_id, cal_id, recur_type, recur_index,' +
-                            '             is_negative, dates, end_date, count,' +
-                            '             interval, second, minute, hour, day,' +
-                            '             monthday, yearday, weekno,  month, setpos)' +
+            let insertSQL = "INSERT INTO cal_recurrence " +
+                            "            (item_id, cal_id, recur_type, recur_index," +
+                            "             is_negative, dates, end_date, count," +
+                            "             interval, second, minute, hour, day," +
+                            "             monthday, yearday, weekno,  month, setpos)" +
                             // ... by selecting some columns from the existing table ...
                             '     SELECT item_id, cal_id, "x-date" AS recur_type, ' +
                             // ... like a new recur_index, we need it to be maximum for this item ...
-                            '            (SELECT MAX(recur_index)+1' +
-                            '               FROM cal_recurrence AS rinner ' +
-                            '              WHERE rinner.item_id = router.item_id' +
-                            '                AND rinner.cal_id = router.cal_id) AS recur_index,' +
-                            '            is_negative,' +
+                            "            (SELECT MAX(recur_index)+1" +
+                            "               FROM cal_recurrence AS rinner " +
+                            "              WHERE rinner.item_id = router.item_id" +
+                            "                AND rinner.cal_id = router.cal_id) AS recur_index," +
+                            "            is_negative," +
                             // ... the string until the first comma in the current dates field
                             '            SUBSTR(dates, 0, LENGTH(dates) - LENGTH(LTRIM(dates, REPLACE(dates, ",", ""))) + 1) AS dates,' +
-                            '            end_date, count, interval, second, minute,' +
-                            '            hour, day, monthday, yearday, weekno, month,' +
-                            '            setpos' +
+                            "            end_date, count, interval, second, minute," +
+                            "            hour, day, monthday, yearday, weekno, month," +
+                            "            setpos" +
                             // ... from the recurrence table ...
-                            '       FROM cal_recurrence AS router ' +
+                            "       FROM cal_recurrence AS router " +
                             // ... but only on fields that are x-datesets ...
                             '      WHERE recur_type = "x-dateset" ' +
                             // ... and are not already empty.
                             '        AND dates != ""';
                             dump(insertSQL + "\n");
 
             // Now we need to remove the first segment from the dates field
-            let updateSQL = 'UPDATE cal_recurrence' +
+            let updateSQL = "UPDATE cal_recurrence" +
                             '   SET dates = SUBSTR(dates, LENGTH(dates) - LENGTH(LTRIM(dates, REPLACE(dates, ",", ""))) + 2)' +
                             ' WHERE recur_type = "x-dateset"' +
                             '   AND dates != ""';
 
             // Create the statements
             let insertStmt = createStatement(db, insertSQL);
             let updateStmt = createStatement(db, updateSQL);
 
--- a/calendar/providers/wcap/calWcapSession.js
+++ b/calendar/providers/wcap/calWcapSession.js
@@ -500,20 +500,20 @@ calWcapSession.prototype = {
                     let defaultCal = this_.defaultCalendar;
                     if (defaultCal && cals[defaultCal.calId] && // default calendar is registered
                         getPref("calendar.wcap.subscriptions", true) &&
                         !defaultCal.getProperty("subscriptions_registered")) {
                         let hasSubscriptions = false;
                         // post register subscribed calendars:
                         let list = this_.getUserPreferences("X-NSCP-WCAP-PREF-icsSubscribed");
                         for (let item of list) {
-                            let ar = item.split(',');
+                            let ar = item.split(",");
                             // ',', '$' are not encoded. ',' can be handled here. WTF.
                             for (let a of ar) {
-                                let dollar = a.indexOf('$');
+                                let dollar = a.indexOf("$");
                                 if (dollar >= 0) {
                                     let calId = a.substring(0, dollar);
                                     if (calId != this_.defaultCalId) {
                                         cals[calId] = null;
                                         hasSubscriptions = true;
                                     }
                                 }
                             }
@@ -641,17 +641,17 @@ calWcapSession.prototype = {
                                 }
                             }
                         } catch (exc) { // ignore but log any errors on subscribed calendars:
                             logError(exc, this_);
                         }
                     }
                 };
 
-                let colon = calId.indexOf(':');
+                let colon = calId.indexOf(":");
                 if (colon >= 0) { // searching for secondary calendars doesn't work. WTF.
                     calId = calId.substring(0, colon);
                 }
                 if (!issuedSearchRequests[calId]) {
                     issuedSearchRequests[calId] = true;
                     this.searchForCalendars(calId, calICalendarSearchProvider.HINT_EXACT_MATCH, 20, listener);
                 }
             }
@@ -1016,17 +1016,17 @@ calWcapSession.prototype = {
                         for (let i = 0; i < nodeList.length; ++i) {
                             let node = nodeList.item(i);
                             let fbType = fbTypeMap[node.attributes.getNamedItem("FBTYPE").nodeValue];
                             if (!fbType || (fbType & busyTypes)) {
                                 if (!fbType) {
                                     fbType = calIFreeBusyInterval.UNKNOWN;
                                 }
                                 let str = node.textContent;
-                                let slash = str.indexOf('/');
+                                let slash = str.indexOf("/");
                                 let start = getDatetimeFromIcalString(str.substr(0, slash));
                                 let end = getDatetimeFromIcalString(str.substr(slash + 1));
 
                                 ret.push(new cal.FreeBusyInterval(calId, fbType, start, end));
                             }
                         }
                         request.execRespFunc(null, ret);
                     }
@@ -1115,19 +1115,19 @@ calWcapSession.prototype = {
     onCalendarDeleting: function calWcapSession_onCalendarDeleting(aCalendar) {
     }
 };
 
 function confirmInsecureLogin(uri) {
     if (!confirmInsecureLogin.m_confirmedHttpLogins) {
         confirmInsecureLogin.m_confirmedHttpLogins = {};
         let confirmedHttpLogins = getPref("calendar.wcap.confirmed_http_logins", "");
-        let tuples = confirmedHttpLogins.split(',');
+        let tuples = confirmedHttpLogins.split(",");
         for (let tuple of tuples) {
-            let ar = tuple.split(':');
+            let ar = tuple.split(":");
             confirmInsecureLogin.m_confirmedHttpLogins[ar[0]] = ar[1];
         }
     }
 
     let bConfirmed = false;
 
     let host = uri.hostPort;
     let encodedHost = encodeURIComponent(host);
--- a/calendar/resources/content/calendarCreation.js
+++ b/calendar/resources/content/calendarCreation.js
@@ -97,68 +97,68 @@ function onSelectProvider(type) {
 }
 
 /**
  * Checks if the required information is set so that the wizard can advance. On
  * an error, notifications are shown and the wizard can not be advanced.
  */
 function checkRequired() {
     let canAdvance = true;
-    let curPage = document.getElementById('calendar-wizard').currentPage;
+    let curPage = document.getElementById("calendar-wizard").currentPage;
     if (curPage) {
-        let eList = curPage.getElementsByAttribute('required', 'true');
+        let eList = curPage.getElementsByAttribute("required", "true");
         for (let i = 0; i < eList.length && canAdvance; ++i) {
             canAdvance = (eList[i].value != "");
         }
 
         let notificationbox = document.getElementById("location-notifications");
         if (canAdvance && document.getElementById("calendar-uri").value &&
                 curPage. pageid == "locationPage") {
             // eslint-disable-next-line array-bracket-spacing
             let [reason, ] = parseUri(document.getElementById("calendar-uri").value);
             canAdvance = (reason == errorConstants.SUCCESS);
             setNotification(reason);
         } else {
             notificationbox.removeAllNotifications();
         }
-        document.getElementById('calendar-wizard').canAdvance = canAdvance;
+        document.getElementById("calendar-wizard").canAdvance = canAdvance;
     }
 }
 
 /**
  * Handler function called when the advance button is pressed on the initial
  * wizard page
  */
 function onInitialAdvance() {
-    let type = document.getElementById('calendar-type').selectedItem.value;
-    let page = document.getElementsByAttribute('pageid', 'initialPage')[0];
-    if (type == 'local') {
+    let type = document.getElementById("calendar-type").selectedItem.value;
+    let page = document.getElementsByAttribute("pageid", "initialPage")[0];
+    if (type == "local") {
         prepareCreateCalendar();
-        page.next = 'customizePage';
+        page.next = "customizePage";
     } else {
-        page.next = 'locationPage';
+        page.next = "locationPage";
     }
 }
 
 /**
  * Create the calendar, so that the customize page can already check for
  * calendar capabilities of the provider.
  */
 function prepareCreateCalendar() {
     gCalendar = null;
 
     let provider;
     let url;
     let reason;
-    let type = document.getElementById('calendar-type').selectedItem.value;
-    if (type == 'local') {
-        provider = 'storage';
-        [reason, url] = parseUri('moz-storage-calendar://');
+    let type = document.getElementById("calendar-type").selectedItem.value;
+    if (type == "local") {
+        provider = "storage";
+        [reason, url] = parseUri("moz-storage-calendar://");
     } else {
-        provider = document.getElementById('calendar-format').selectedItem.value;
+        provider = document.getElementById("calendar-format").selectedItem.value;
         [reason, url] = parseUri(document.getElementById("calendar-uri").value);
     }
 
     if (reason != errorConstants.SUCCESS || !url) {
         return false;
     }
 
     try {
@@ -174,24 +174,24 @@ function prepareCreateCalendar() {
 /**
  * The actual process of registering the created calendar.
  */
 function doCreateCalendar() {
     let cal_name = document.getElementById("calendar-name").value;
     let cal_color = document.getElementById("calendar-color").value;
 
     gCalendar.name = cal_name;
-    gCalendar.setProperty('color', cal_color);
+    gCalendar.setProperty("color", cal_color);
     if (!gCalendar.getProperty("cache.always")) {
         gCalendar.setProperty("cache.enabled", gCalendar.getProperty("cache.supported") !== false ?
                                                document.getElementById("cache").checked : false);
     }
 
     if (!document.getElementById("fire-alarms").checked) {
-        gCalendar.setProperty('suppressAlarms', true);
+        gCalendar.setProperty("suppressAlarms", true);
     }
 
     cal.getCalendarManager().registerCalendar(gCalendar);
     return true;
 }
 
 /**
  * Initializes the calendar name from its uri
@@ -224,26 +224,26 @@ function parseUri(aUri) {
         // Test if the entered uri can be parsed.
         uri = makeURL(aUri);
     } catch (ex) {
         return [errorConstants.INVALID_URI, null];
     }
 
     let calManager = cal.getCalendarManager();
     let cals = calManager.getCalendars({});
-    let type = document.getElementById('calendar-type').selectedItem.value;
-    if (type != 'local' && cals.some(c => c.uri.spec == uri.spec)) {
+    let type = document.getElementById("calendar-type").selectedItem.value;
+    if (type != "local" && cals.some(c => c.uri.spec == uri.spec)) {
         // If the calendar is not local, we check if there is already a calendar
         // with the same uri spec. Storage calendars all have the same uri, so
         // we have to specialcase them.
         return [errorConstants.ALREADY_EXISTS, null];
     }
 
     return [errorConstants.SUCCESS, uri];
 }
 
 /**
  * Disables the back button, in case we are far enough that its not possible to
  * undo.
  */
 function setCanRewindFalse() {
-   document.getElementById('calendar-wizard').canRewind = false;
+   document.getElementById("calendar-wizard").canRewind = false;
 }
--- a/calendar/resources/content/datetimepickers/datetimepickers.xml
+++ b/calendar/resources/content/datetimepickers/datetimepickers.xml
@@ -154,43 +154,43 @@
                let offset = (i - today.weekday + 7) % 7;
                today.day = today.day + offset;
                return cal.dateTimeToJsDate(today);
              }
              return null;
            }
 
            // Remove commas
-           val = val.replace(',', '');
+           val = val.replace(",", "");
 
-           if (!val.includes(' ')) {
+           if (!val.includes(" ")) {
              // Just a single word, or a single date.
              return getDateForDay(val);
            }
 
            // Replace month names with numbers
            for (let i in this.mMonthLongNames) {
              if (val.includes(this.mMonthLongNames[i])) {
                let newVal = val.replace(this.mMonthLongNames[i], Number(i) + 1);
-               newVal = newVal.replace(' ', '/');
+               newVal = newVal.replace(" ", "/");
                return this.parseDateTime(newVal);
              }
           }
 
           // Same for short month names
            for (let i in this.mMonthShortNames) {
              if (val.includes(this.mMonthShortNames[i])) {
                let newVal = val.replace(this.mMonthShortNames[i], Number(i) + 1);
-               newVal = newVal.replace(' ', '/');
+               newVal = newVal.replace(" ", "/");
                return this.parseDateTime(newVal);
              }
           }
 
           // Now for the cool 'next' and 'last'
-          let words = val.split(' ');
+          let words = val.split(" ");
           let offset, day;
           for (let word of words) {
             for (let rel of this.mRelationWords) {
               if (word == rel.word) {
                 offset = rel.offset;
                 break;
               }
             }
@@ -615,17 +615,17 @@
                               this.mValue.getMinutes() != aValue.getMinutes();
               }
               this.mValue = aValue;
             }
             // set textBox.value property, not attribute
             this.kTextBox.value = this.formatTime(this.mValue);
 
             if (aValue != null && aRefresh && timeChanged) {
-              let event = document.createEvent('Events');
+              let event = document.createEvent("Events");
               event.initEvent("change", true, true);
               this.dispatchEvent(event);
             }
           ]]>
         </body>
       </method>
 
       <method name="parseTextBoxTime">
@@ -1320,17 +1320,17 @@
 
             let idPrefix = "time-picker-one-minute-box-";
 
             // Everything above assumes that we are showing the one-minute-grid,
             // If not, we need to do these corrections;
             let fiveMinuteBox = document.getAnonymousElementByAttribute(
                                 this, "anonid", "time-picker-five-minute-grid-box");
 
-            if (fiveMinuteBox.getAttribute("hidden") == 'false') {
+            if (fiveMinuteBox.getAttribute("hidden") == "false") {
               aNumber *= 5;
               idPrefix = "time-picker-five-minute-box-";
 
               // If the detailed view was shown before, then mSelectedTime.getMinutes
               // might not be a multiple of 5.
               this.mSelectedTime.setMinutes(this.calcNearestFiveMinutes(this.mSelectedTime));
             }
 
@@ -1577,17 +1577,17 @@
         </body>
       </method>
 
       <method name="fireEvent">
         <parameter name="aEventName"/>
         <parameter name="aDetail"/>
         <body>
           <![CDATA[
-            let event = document.createEvent('Events');
+            let event = document.createEvent("Events");
             event.initEvent(aEventName, true, true);
             event.detail = aDetail;
             this.dispatchEvent(event);
           ]]>
         </body>
       </method>
 
       <!-- Parameter aValue may be a date or a date time. Dates are
@@ -1953,17 +1953,17 @@
             // matches the "p" character so only "m" is matched as ampm suffix.)
             //
             // digitsExpr has 6 captures, so index of first ampmExpr is 1, of last is 8.
             this.parseTimeRegExp =
               new RegExp("(" + ampmExpr + ")?\\s?" + digitsExpr + "(" + ampmExpr + ")?\\s*$");
             this.amRegExp = new RegExp("^(?:" + amExpr + ")$");
             this.pmRegExp = new RegExp("^(?:" + pmExpr + ")$");
             // build time display format that mimics "%x" format without seconds
-            let ampmSep = (pmProbeString.includes(' ') ? " " : "");
+            let ampmSep = (pmProbeString.includes(" ") ? " " : "");
             if (this.ampmIndex == PRE_INDEX) {
               this.kTimeFormatString = "%p" + ampmSep + "%I:%M";
             } else if (this.ampmIndex == POST_INDEX) {
               this.kTimeFormatString = "%I:%M" + ampmSep + "%p";
             } else {
               this.kTimeFormatString = "%H:%M";
             }
           ]]>
--- a/calendar/resources/content/mouseoverPreviews.js
+++ b/calendar/resources/content/mouseoverPreviews.js
@@ -89,21 +89,21 @@ function getPreviewForTask(toDoItem) {
     }
 
     if (toDoItem.priority && toDoItem.priority != 0) {
       let priorityInteger = parseInt(toDoItem.priority, 10);
       let priorityString;
 
       // These cut-offs should match calendar-event-dialog.js
       if (priorityInteger >= 1 && priorityInteger <= 4) {
-           priorityString = calGetString('calendar', 'highPriority'); // high priority
+           priorityString = calGetString("calendar", "highPriority"); // high priority
       } else if (priorityInteger == 5) {
-          priorityString = calGetString('calendar', 'normalPriority'); // normal priority
+          priorityString = calGetString("calendar", "normalPriority"); // normal priority
       } else {
-          priorityString = calGetString('calendar', 'lowPriority'); // low priority
+          priorityString = calGetString("calendar", "lowPriority"); // low priority
       }
       boxAppendLabeledText(vbox, "tooltipPriority", priorityString);
       hasHeader = true;
     }
 
     if (toDoItem.status && toDoItem.status != "NONE") {
       let status = getToDoStatusString(toDoItem);
       boxAppendLabeledText(vbox, "tooltipStatus", status);
@@ -198,38 +198,38 @@ function getPreviewForEvent(aEvent) {
 }
 
 
 /** String for event status: (none), Tentative, Confirmed, or Cancelled **/
 function getEventStatusString(calendarEvent) {
   switch (calendarEvent.status) {
     // Event status value keywords are specified in RFC2445sec4.8.1.11
     case "TENTATIVE":
-      return calGetString('calendar', "statusTentative");
+      return calGetString("calendar", "statusTentative");
     case "CONFIRMED":
-      return calGetString('calendar', "statusConfirmed");
+      return calGetString("calendar", "statusConfirmed");
     case "CANCELLED":
-      return calGetString('calendar', "eventStatusCancelled");
+      return calGetString("calendar", "eventStatusCancelled");
      default:
         return "";
   }
 }
 
 /** String for todo status: (none), NeedsAction, InProcess, Cancelled, or Completed **/
 function getToDoStatusString(iCalToDo) {
   switch (iCalToDo.status) {
     // Todo status keywords are specified in RFC2445sec4.8.1.11
     case "NEEDS-ACTION":
-      return calGetString('calendar', "statusNeedsAction");
+      return calGetString("calendar", "statusNeedsAction");
     case "IN-PROCESS":
-      return calGetString('calendar', "statusInProcess");
+      return calGetString("calendar", "statusInProcess");
     case "CANCELLED":
-      return calGetString('calendar', "todoStatusCancelled");
+      return calGetString("calendar", "todoStatusCancelled");
     case "COMPLETED":
-      return calGetString('calendar', "statusCompleted");
+      return calGetString("calendar", "statusCompleted");
      default:
         return "";
   }
 }
 
 /**
  * PRIVATE: Append a separator, a thin space between header and body.
  *
@@ -305,17 +305,17 @@ function boxInitializeHeaderGrid(box) {
 /**
  * PRIVATE: To headers grid, append a row containing Label: value,
  * where label is localized text for labelProperty.
  * @param box               box containing headers grid
  * @param labelProperty     name of property for localized name of header
  * @param textString        value of header field.
  */
 function boxAppendLabeledText(box, labelProperty, textString) {
-  let labelText = calGetString('calendar', labelProperty);
+  let labelText = calGetString("calendar", labelProperty);
   let rows = box.getElementsByTagNameNS(box.namespaceURI, "rows")[0];
   {
     let row = document.createElement("row");
     {
       row.appendChild(createTooltipHeaderLabel(labelText));
       row.appendChild(createTooltipHeaderDescription(textString));
     }
     rows.appendChild(row);
--- a/calendar/resources/content/publish.js
+++ b/calendar/resources/content/publish.js
@@ -126,32 +126,32 @@ function publishItemArray(aItemArray, aP
     let icsURL = makeURL(aPath);
 
     let channel = Services.io.newChannelFromURI2(icsURL,
                                                  null,
                                                  Services.scriptSecurityManager.getSystemPrincipal(),
                                                  null,
                                                  Components.interfaces.nsILoadInfo.SEC_NORMAL,
                                                  Components.interfaces.nsIContentPolicy.TYPE_OTHER);
-    if (icsURL.schemeIs('webcal')) {
-        icsURL.scheme = 'http';
+    if (icsURL.schemeIs("webcal")) {
+        icsURL.scheme = "http";
     }
-    if (icsURL.schemeIs('webcals')) {
-        icsURL.scheme = 'https';
+    if (icsURL.schemeIs("webcals")) {
+        icsURL.scheme = "https";
     }
 
     switch (icsURL.scheme) {
-        case 'http':
-        case 'https':
+        case "http":
+        case "https":
             channel = channel.QueryInterface(Components.interfaces.nsIHttpChannel);
             break;
-        case 'ftp':
+        case "ftp":
             channel = channel.QueryInterface(Components.interfaces.nsIFTPChannel);
             break;
-        case 'file':
+        case "file":
             channel = channel.QueryInterface(Components.interfaces.nsIFileChannel);
             break;
         default:
             dump("No such scheme\n");
             return;
     }
 
     let uploadChannel = channel.QueryInterface(Components.interfaces.nsIUploadChannel);
@@ -176,17 +176,17 @@ function publishItemArray(aItemArray, aP
 
     uploadChannel.setUploadStream(inputStream,
                                   "text/calendar", -1);
     try {
         channel.asyncOpen(publishingListener, aProgressDialog);
     } catch (e) {
         let props = Services.strings.createBundle("chrome://calendar/locale/calendar.properties");
         Services.prompt.alert(null, calGetString("calendar", "genericErrorTitle"),
-                              props.formatStringFromName('otherPutError', [e.message], 1));
+                              props.formatStringFromName("otherPutError", [e.message], 1));
     }
 }
 
 
 var notificationCallbacks =
 {
     // nsIInterfaceRequestor interface
     getInterface: function(iid, instance) {
@@ -216,19 +216,19 @@ var publishingListener = {
             channel = request.QueryInterface(Components.interfaces.nsIHttpChannel);
             requestSucceeded = channel.requestSucceeded;
         } catch (e) {
             // Don't fail if it is not a http channel, will be handled below
         }
 
         if (channel && !requestSucceeded) {
             Services.prompt.alert(null, calGetString("calendar", "genericErrorTitle"),
-                                  props.formatStringFromName('httpPutError', [channel.responseStatus, channel.responseStatusText], 2));
+                                  props.formatStringFromName("httpPutError", [channel.responseStatus, channel.responseStatusText], 2));
         } else if (!channel && !Components.isSuccessCode(request.status)) {
             // XXX this should be made human-readable.
             Services.prompt.alert(null, calGetString("calendar", "genericErrorTitle"),
-                                  props.formatStringFromName('otherPutError', [request.status.toString(16)], 1));
+                                  props.formatStringFromName("otherPutError", [request.status.toString(16)], 1));
         }
     },
 
     onDataAvailable: function(request, ctxt, inStream, sourceOffset, count) {
     }
 };
--- a/calendar/test/mozmill/eventDialog/testEventDialog.js
+++ b/calendar/test/mozmill/eventDialog/testEventDialog.js
@@ -72,18 +72,18 @@ var testEventDialog = function() {
   if (now.toLocaleTimeString().match(/AM|PM/)) {
     ampm = (hour >= 12 ? " PM" : " AM");
     startHour = startHour % 12;
     if (startHour == 0) {
       startHour = 12;
     }
   }
 
-  let startTime = startHour + ':00' + ampm;
-  let endTime = ((startHour + 1) % 24) + ':00' + ampm;
+  let startTime = startHour + ":00" + ampm;
+  let endTime = ((startHour + 1) % 24) + ":00" + ampm;
   let startTimeInput = new elementslib.Lookup(event.window.document, eventDialog +
     'id("event-grid-startdate-row")/id("event-grid-startdate-picker-box")/' +
     'id("event-starttime")/anon({"anonid":"hbox"})/anon({"anonid":"time-picker"})/' +
     'anon({"class":"timepicker-box-class"})/id("timepicker-text")/' +
     'anon({"class":"menulist-editable-box textbox-input-box"})/anon({"anonid":"input"})'
     );
   event.waitForElement(startTimeInput);
   event.assertValue(startTimeInput, startTime);
@@ -103,17 +103,17 @@ var testEventDialog = function() {
     'anon({"anonid":"input"})'), location);
   event.type(new elementslib.Lookup(event.window.document, eventDialog +
     'id("event-grid-description-row")/id("item-description")/' +
     'anon({"class":"textbox-input-box"})/anon({"anonid":"input"})'),
     desc);
 
   // set category
   let categories = utils.getProperty("chrome://calendar/locale/categories.properties", "categories2");
-  let category = categories.split(',')[4]; // pick 4th value in a comma-separated list
+  let category = categories.split(",")[4]; // pick 4th value in a comma-separated list
   event.select(new elementslib.ID(event.window.document, "item-categories"), null, category);
 
   // repeat daily
   event.click(new elementslib.ID(event.window.document, "repeat-daily-menuitem"));
 
   // add reminder
   event.click(new elementslib.ID(event.window.document, "reminder-5minutes-menuitem"));
 
@@ -253,16 +253,16 @@ function checkTooltip(monthView, row, co
     '/id("messengerWindow")/id("calendar-popupset")/id("itemTooltip")/' +
     '{"class":"tooltipBox"}/{"class":"tooltipHeaderGrid"}/[1]/[0]/[1]');
   controller.assertJS(eventName.getNode().textContent == title);
 
   // check date and time
   // date-time string contains strings formatted in operating system language so check numeric values only
   let dateTime = new elementslib.Lookup(controller.window.document,
     '/id("messengerWindow")/id("calendar-popupset")/id("itemTooltip")/' +
-    '{"class":"tooltipBox"}/{"class":"tooltipHeaderGrid"}/[1]/[2]/[1]').getNode().textContent + '';
+    '{"class":"tooltipBox"}/{"class":"tooltipHeaderGrid"}/[1]/[2]/[1]').getNode().textContent;
   controller.assertJS(dateTime.includes(date) && dateTime.includes(startTime) &&
     dateTime.includes(endTime));
 }
 
 var teardownTest = function(module) {
   calUtils.deleteCalendars(controller, calendar);
 };
--- a/calendar/test/mozmill/eventDialog/testEventDialogModificationPrompt.js
+++ b/calendar/test/mozmill/eventDialog/testEventDialogModificationPrompt.js
@@ -25,17 +25,17 @@ var newlines = [{ title: "title", descri
                 { title: "title", description: "\rtest \\r\r" },
                 { title: "title", description: "\r\ntest \\r\\n\r\n" },
                 { title: "title", description: "\ttest \\t\t" }];
 
 var setupModule = function(module) {
   controller = mozmill.getMail3PaneController();
   calUtils.createCalendar(controller, calendar);
 
-  let categories = prefs.preferences.getPref("calendar.categories.names", "string").split(',');
+  let categories = prefs.preferences.getPref("calendar.categories.names", "string").split(",");
   data[0].category = categories[0];
   data[1].category = categories[1];
 };
 
 // Test that closing an event dialog with no changes does not prompt for save
 var testEventDialogModificationPrompt = function() {
   controller.click(new elementslib.ID(controller.window.document, "calendar-tab-button"));
   calUtils.switchToView(controller, "day");
--- a/calendar/test/mozmill/recurrence/testWeeklyWithExceptionRecurrence.js
+++ b/calendar/test/mozmill/recurrence/testWeeklyWithExceptionRecurrence.js
@@ -257,21 +257,21 @@ function changeRecurrence(recurrence) {
 
 function checkMultiWeekView(view) {
   let startWeek = view == "multiweek" ? 1 : 2;
 
   let path = calUtils.getEventBoxPath(controller, view, calUtils.EVENT_BOX, startWeek, 2, hour);
   controller.assertNodeNotExist(new elementslib.Lookup(controller.window.document, path + eventPath));
   // assert exactly two
   path = calUtils.getEventBoxPath(controller, view, calUtils.EVENT_BOX, startWeek, 3, hour);
-  controller.assertNode(new elementslib.Lookup(controller.window.document, path + '/[0]'));
+  controller.assertNode(new elementslib.Lookup(controller.window.document, path + "/[0]"));
   path = calUtils.getEventBoxPath(controller, view, calUtils.EVENT_BOX, startWeek, 3, hour);
-  controller.assertNode(new elementslib.Lookup(controller.window.document, path + '/[1]'));
+  controller.assertNode(new elementslib.Lookup(controller.window.document, path + "/[1]"));
   path = calUtils.getEventBoxPath(controller, view, calUtils.EVENT_BOX, startWeek, 3, hour);
-  controller.assertNodeNotExist(new elementslib.Lookup(controller.window.document, path + '/[2]'));
+  controller.assertNodeNotExist(new elementslib.Lookup(controller.window.document, path + "/[2]"));
   path = calUtils.getEventBoxPath(controller, view, calUtils.EVENT_BOX, startWeek, 4, hour);
   controller.assertNode(new elementslib.Lookup(controller.window.document, path + eventPath));
   path = calUtils.getEventBoxPath(controller, view, calUtils.EVENT_BOX, startWeek, 5, hour);
   controller.assertNodeNotExist(new elementslib.Lookup(controller.window.document, path + eventPath));
   path = calUtils.getEventBoxPath(controller, view, calUtils.EVENT_BOX, startWeek, 6, hour);
   controller.assertNode(new elementslib.Lookup(controller.window.document, path + eventPath));
   path = calUtils.getEventBoxPath(controller, view, calUtils.EVENT_BOX, startWeek, 7, hour);
   controller.assertNodeNotExist(new elementslib.Lookup(controller.window.document, path + eventPath));
--- a/calendar/test/mozmill/recurrenceRotated/testWeeklyWithExceptionRecurrence.js
+++ b/calendar/test/mozmill/recurrenceRotated/testWeeklyWithExceptionRecurrence.js
@@ -270,21 +270,21 @@ function changeRecurrence(recurrence) {
 
 function checkMultiWeekView(view) {
   let startWeek = view == "multiweek" ? 1 : 2;
 
   let path = calUtils.getEventBoxPath(controller, view, calUtils.EVENT_BOX, startWeek, 2, hour);
   controller.assertNodeNotExist(new elementslib.Lookup(controller.window.document, path + eventPath));
   // assert exactly two
   path = calUtils.getEventBoxPath(controller, view, calUtils.EVENT_BOX, startWeek, 3, hour);
-  controller.assertNode(new elementslib.Lookup(controller.window.document, path + '/[0]'));
+  controller.assertNode(new elementslib.Lookup(controller.window.document, path + "/[0]"));
   path = calUtils.getEventBoxPath(controller, view, calUtils.EVENT_BOX, startWeek, 3, hour);
-  controller.assertNode(new elementslib.Lookup(controller.window.document, path + '/[1]'));
+  controller.assertNode(new elementslib.Lookup(controller.window.document, path + "/[1]"));
   path = calUtils.getEventBoxPath(controller, view, calUtils.EVENT_BOX, startWeek, 3, hour);
-  controller.assertNodeNotExist(new elementslib.Lookup(controller.window.document, path + '/[2]'));
+  controller.assertNodeNotExist(new elementslib.Lookup(controller.window.document, path + "/[2]"));
   path = calUtils.getEventBoxPath(controller, view, calUtils.EVENT_BOX, startWeek, 4, hour);
   controller.assertNode(new elementslib.Lookup(controller.window.document, path + eventPath));
   path = calUtils.getEventBoxPath(controller, view, calUtils.EVENT_BOX, startWeek, 5, hour);
   controller.assertNodeNotExist(new elementslib.Lookup(controller.window.document, path + eventPath));
   path = calUtils.getEventBoxPath(controller, view, calUtils.EVENT_BOX, startWeek, 6, hour);
   controller.assertNode(new elementslib.Lookup(controller.window.document, path + eventPath));
   path = calUtils.getEventBoxPath(controller, view, calUtils.EVENT_BOX, startWeek, 7, hour);
   controller.assertNodeNotExist(new elementslib.Lookup(controller.window.document, path + eventPath));
--- a/calendar/test/mozmill/shared-modules/calendar-utils.js
+++ b/calendar/test/mozmill/shared-modules/calendar-utils.js
@@ -1,19 +1,19 @@
 /* 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/. */
 
 var MODULE_NAME = "calendar-utils";
 var MODULE_REQUIRES = ["window-helpers"];
 
 var os = {};
-Components.utils.import('resource://mozmill/stdlib/os.js', os);
+Components.utils.import("resource://mozmill/stdlib/os.js", os);
 var frame = {};
-Components.utils.import('resource://mozmill/modules/frame.js', frame);
+Components.utils.import("resource://mozmill/modules/frame.js", frame);
 
 var modalDialog = require("test-window-helpers");
 
 var sleep = 500;
 var EVENT_BOX = 0; // Use when you need an event box
 var CANVAS_BOX = 1; // Use when you need a calendar canvas box
 var ALLDAY = 2; // Use when you need an allday canvas or event box
 
@@ -32,17 +32,17 @@ function acceptSendingNotificationMail(c
 }
 
 /**
  *  Add an attachment with url
  *  @param controller - Mozmill window controller
  */
 function handleAddingAttachment(controller, url) {
   modalDialog.plan_for_modal_dialog("commonDialog", function(attachment) {
-    let input = new elementslib.ID(attachment.window.document, 'loginTextbox');
+    let input = new elementslib.ID(attachment.window.document, "loginTextbox");
     attachment.waitForElement(input);
     input.getNode().value = url;
     attachment.click(new elementslib.Lookup(attachment.window.document, '/id("commonDialog")/' +
       'anon({"anonid":"buttons"})/{"dlgtype":"accept"}'));
   });
 
   modalDialog.wait_for_modal_dialog("commonDialog");
 }
@@ -184,32 +184,32 @@ function goToDate(controller, year, mont
       'anon({"anonid":"years-popup"})/[0]/{"value":"' + year + '"}'));
     controller.sleep(500);
   }
 
   if (monthDifference != 0) {
     // pick month
     controller.click(new elementslib.Lookup(controller.window.document, miniMonth +
       'anon({"anonid":"minimonth-header"})/anon({"anonid":"monthheader"})/[' + activeMonth +
-      ']'));
+      "]"));
     controller.waitThenClick(new elementslib.Lookup(controller.window.document, miniMonth +
       'anon({"anonid":"minimonth-header"})/anon({"anonid":"minmonth-popupset"})/' +
       'anon({"anonid":"months-popup"})/[0]/{"index":"' + (month - 1) + '"}'));
     controller.sleep(500);
   }
 
   let lastDayInFirstRow = (new elementslib.Lookup(controller.window.document,
     miniMonth + 'anon({"anonid":"minimonth-calendar"})/[1]/[6]')).getNode().getAttribute("value");
   let positionOfFirst = 7 - lastDayInFirstRow;
   let dateColumn = (positionOfFirst + day - 1) % 7;
   let dateRow = Math.floor((positionOfFirst + day - 1) / 7);
 
   // pick day
   controller.click(new elementslib.Lookup(controller.window.document, miniMonth +
-    'anon({"anonid":"minimonth-calendar"})/[' + (dateRow + 1) + ']/[' + dateColumn + ']'));
+    'anon({"anonid":"minimonth-calendar"})/[' + (dateRow + 1) + "]/[" + dateColumn + "]"));
   controller.sleep(500);
 }
 
 /**
  *  @param controller - main window controller
  *  @param view - day, week, multiweek or month
  *  @param option - bg for creating event, fg for checking
  *  @param row - only used in multiweek and month view, 1-based index of a row
@@ -221,50 +221,50 @@ function getEventBoxPath(controller, vie
   let viewDeck = '/id("messengerWindow")/id("tabmail-container")/id("tabmail")/' +
     'id("tabpanelcontainer")/id("calendarTabPanel")/id("calendarContent")/' +
     'id("calendarDisplayDeck")/id("calendar-view-box")/id("view-deck")';
   let dayView = viewDeck + '/id("day-view")';
   let weekView = viewDeck + '/id("week-view")';
   let multiweekView = viewDeck + '/id("multiweek-view")';
   let monthView = viewDeck + '/id("month-view")';
 
-  let path = '';
+  let path = "";
   switch (view) {
     case "week":
       path += weekView;
       break;
     case "multiweek":
       path += multiweekView;
       break;
     case "month":
       path += monthView;
       break;
     default: path += dayView;
   }
 
   if ((view == "day" || view == "week") && option == ALLDAY) {
     path += '/anon({"anonid":"mainbox"})/anon({"anonid":"headerbox"})/anon({"anonid":"headerdaybox"})';
-    path += '/[' + (column - 1) + ']';
+    path += "/[" + (column - 1) + "]";
 
     return path;
   } else if (view == "day" || view == "week") {
     path += '/anon({"anonid":"mainbox"})/anon({"anonid":"scrollbox"})/anon({"anonid":"daybox"})';
-    path += '/[' + (column - 1) + ']';
+    path += "/[" + (column - 1) + "]";
     path += '/anon({"anonid":"boxstack"})';
 
     if (option == CANVAS_BOX) {
-      path += '/anon({"anonid":"bgbox"})/[' + hour + ']';
+      path += '/anon({"anonid":"bgbox"})/[' + hour + "]";
     } else {
       path += '/anon({"anonid":"topbox"})/{"flex":"1"}/{"flex":"1"}/{"flex":"1"}';
     }
 
     return path;
   } else {
     path += '/anon({"anonid":"mainbox"})/anon({"anonid":"monthgrid"})/' +
-      'anon({"anonid":"monthgridrows"})/[' + (row - 1) + ']/[' + (column - 1) + ']';
+      'anon({"anonid":"monthgridrows"})/[' + (row - 1) + "]/[" + (column - 1) + "]";
 
     if (option == CANVAS_BOX) {
       path += '/anon({"anonid":"day-items"})';
     }
 
     return path;
   }
 }
@@ -430,34 +430,34 @@ function setData(controller, data) {
   controller.sleep(sleep);
 
   // title
   if (data.title != undefined) {
     if (!mac) {
       controller.keypress(new elementslib.Lookup(controller.window.document, dialog +
         'id("event-grid-title-row")/id("item-title")/anon({"class":"textbox-input-box"})/' +
         'anon({"anonid":"input"})'),
-        'a', { ctrlKey: true });
+        "a", { ctrlKey: true });
       controller.type(new elementslib.Lookup(controller.window.document, dialog +
         'id("event-grid-title-row")/id("item-title")/anon({"class":"textbox-input-box"})/' +
         'anon({"anonid":"input"})'),
         data.title);
     } else {
       let titleField = new elementslib.ID(controller.window.document, "item-title");
       titleField.getNode().value = data.title;
     }
   }
 
   // location
   if (data.location != undefined) {
     if (!mac) {
       controller.keypress(new elementslib.Lookup(controller.window.document, dialog +
         'id("event-grid-location-row")/id("item-location")/anon({"class":"textbox-input-box"})/' +
         'anon({"anonid":"input"})'),
-        'a', { ctrlKey: true });
+        "a", { ctrlKey: true });
       controller.type(new elementslib.Lookup(controller.window.document, dialog +
         'id("event-grid-location-row")/id("item-location")/anon({"class":"textbox-input-box"})/' +
         'anon({"anonid":"input"})'),
         data.location);
     } else {
       let locationField = new elementslib.ID(controller.window.document, "item-location");
       locationField.getNode().value = data.location;
     }
@@ -478,64 +478,64 @@ function setData(controller, data) {
   // timezone
   if (data.timezone != undefined) {
     let menuitem = new elementslib.ID(controller.window.document, "options-timezones-menuitem");
     menuitem.getNode().setAttribute("checked", data.timezone);
     controller.click(menuitem);
   }
 
   // startdate
-  if (data.startdate != undefined && data.startdate.constructor.name == 'Date') {
+  if (data.startdate != undefined && data.startdate.constructor.name == "Date") {
     let startdate = dateService.FormatDate("", dateService.dateFormatShort,
       data.startdate.getFullYear(), data.startdate.getMonth() + 1, data.startdate.getDate());
     if (!isEvent) {
       controller.check(new elementslib.ID(controller.window.document, "todo-has-entrydate"), true);
     }
     if (!mac) {
-      controller.keypress(startDateInput, 'a', { ctrlKey: true });
+      controller.keypress(startDateInput, "a", { ctrlKey: true });
       controller.type(startDateInput, startdate);
     } else {
       startDateInput.getNode().value = startdate;
     }
   }
 
   // starttime
-  if (data.starttime != undefined && data.starttime.constructor.name == 'Date') {
+  if (data.starttime != undefined && data.starttime.constructor.name == "Date") {
     let starttime = dateService.FormatTime("", dateService.timeFormatNoSeconds,
       data.starttime.getHours(), data.starttime.getMinutes(), 0);
     if (!mac) {
-      controller.keypress(startTimeInput, 'a', { ctrlKey: true });
+      controller.keypress(startTimeInput, "a", { ctrlKey: true });
       controller.type(startTimeInput, starttime);
     } else {
       startTimeInput.getNode().value = starttime;
       controller.sleep(sleep);
     }
   }
 
   // enddate
-  if (data.enddate != undefined && data.enddate.constructor.name == 'Date') {
+  if (data.enddate != undefined && data.enddate.constructor.name == "Date") {
     let enddate = dateService.FormatDate("", dateService.dateFormatShort,
       data.enddate.getFullYear(), data.enddate.getMonth() + 1, data.enddate.getDate());
     if (!isEvent) {
       controller.check(new elementslib.ID(controller.window.document, "todo-has-duedate"), true);
     }
     if (!mac) {
-      controller.keypress(endDateInput, 'a', { ctrlKey: true });
+      controller.keypress(endDateInput, "a", { ctrlKey: true });
       controller.type(endDateInput, enddate);
     } else {
       endDateInput.getNode().value = enddate;
     }
   }
 
   // endttime
-  if (data.endtime != undefined && data.endtime.constructor.name == 'Date') {
+  if (data.endtime != undefined && data.endtime.constructor.name == "Date") {
     let endtime = dateService.FormatTime("", dateService.timeFormatNoSeconds,
       data.endtime.getHours(), data.endtime.getMinutes(), 0);
     if (!mac) {
-      controller.keypress(endTimeInput, 'a', { ctrlKey: true });
+      controller.keypress(endTimeInput, "a", { ctrlKey: true });
       controller.type(endTimeInput, endtime);
     } else {
       endTimeInput.getNode().value = endtime;
       controller.sleep(sleep);
     }
   }
 
   // recurrence
@@ -550,17 +550,17 @@ function setData(controller, data) {
   }
 
   // description
   if (data.description != undefined) {
     if (!mac) {
       controller.keypress(new elementslib.Lookup(controller.window.document, dialog +
         'id("event-grid-description-row")/id("item-description")/' +
         'anon({"class":"textbox-input-box"})/anon({"anonid":"input"})'),
-        'a', { ctrlKey: true });
+        "a", { ctrlKey: true });
       controller.type(new elementslib.Lookup(controller.window.document, dialog +
         'id("event-grid-description-row")/id("item-description")/' +
         'anon({"class":"textbox-input-box"})/anon({"anonid":"input"})'),
         data.description);
     } else {
       let descField = new elementslib.Lookup(controller.window.document, dialog +
         'id("event-grid-description-row")/id("item-description")/' +
         'anon({"class":"textbox-input-box"})/anon({"anonid":"input"})');
@@ -587,24 +587,24 @@ function setData(controller, data) {
         undefined, data.status.toUpperCase());
       controller.sleep(sleep);
     }
   }
 
   let currentStatus = (new elementslib.ID(controller.window.document, "todo-status")).getNode().value;
 
   // completed on
-  if (data.completed != undefined && data.completed.constructor.name == 'Date' && !isEvent) {
+  if (data.completed != undefined && data.completed.constructor.name == "Date" && !isEvent) {
     let completeddate = dateService.FormatDate("", dateService.dateFormatShort,
       data.completed.getFullYear(), data.completed.getMonth() + 1,
       data.completed.getDate());
 
     if (currentStatus == "COMPLETED") {
       if (!mac) {
-        controller.keypress(completedDateInput, 'a', { ctrlKey: true });
+        controller.keypress(completedDateInput, "a", { ctrlKey: true });
         controller.type(completedDateInput, completeddate);
       } else {
         completedDateInput.getNode().value = completeddate;
       }
     }
   }
 
   // percent complete
--- a/calendar/test/mozmill/shared-modules/timezone-utils.js
+++ b/calendar/test/mozmill/shared-modules/timezone-utils.js
@@ -34,17 +34,17 @@ function verify(controller, dates, timez
     for (let tz = 0; tz < timezones.length; tz++) {
       let found = false;
 
       let correctHour = times[date][tz][0];
       let minutes = times[date][tz][1];
       let day = times[date][tz][2];
 
       let timeNode = (new elementslib.Lookup(controller.window.document,
-                                             timeLine + '[' + correctHour + ']')).getNode();
+                                             timeLine + "[" + correctHour + "]")).getNode();
       let timeY = timeNode.boxObject.y;
       timeY += timeNode.boxObject.height * (minutes / 60);
 
       let stackNode;
       let eventNodes = [];
 
       // same day
       if (day == undefined) {
--- a/calendar/test/mozmill/testBasicFunctionality.js
+++ b/calendar/test/mozmill/testBasicFunctionality.js
@@ -7,17 +7,17 @@ var RELATIVE_ROOT = "./shared-modules";
 var MODULE_REQUIRES = ["calendar-utils", "window-helpers"];
 
 var calUtils = require("shared-modules/calendar-utils");
 var TIMEOUT_MODAL_DIALOG = 30000;
 
 var modalDialog;
 var setupModule = function(module) {
   controller = mozmill.getMail3PaneController();
-  modalDialog = collector.getModule('window-helpers');
+  modalDialog = collector.getModule("window-helpers");
 };
 
 var testSmokeTest = function() {
   let dateService = Components.classes["@mozilla.org/intl/scriptabledateformat;1"]
                               .getService(Components.interfaces.nsIScriptableDateFormat);
   let path = '/id("messengerWindow")/id("tabmail-container")/id("tabmail")/id("tabpanelcontainer")/' +
     'id("calendarTabPanel")/id("calendarContent")/';
 
--- a/calendar/test/mozmill/testLocalICS.js
+++ b/calendar/test/mozmill/testLocalICS.js
@@ -16,21 +16,21 @@ var TIMEOUT_MODAL_DIALOG = 30000;
 var hour = 8;
 var calendar;
 var uri;
 var file;
 var title;
 
 var setupModule = function(module) {
   controller = mozmill.getMail3PaneController();
-  modalDialog = collector.getModule('window-helpers');
+  modalDialog = collector.getModule("window-helpers");
 
   // unique name needed as deleting a calendar only unsubscribes from it
   // and if same file were used on next testrun then previously created event would show up
-  let time = (new Date()).getTime() + '';
+  let time = (new Date()).getTime() + "";
   calendar = time;
   title = time;
 
   file = Services.dirsvc.get("TmpD", Components.interfaces.nsIFile);
   file.append(calendar + ".ics");
   let fileURI = Services.io.newFileURI(file);
   uri = fileURI.prePath + fileURI.path;
 };
--- a/calendar/test/mozmill/testTodayPane.js
+++ b/calendar/test/mozmill/testTodayPane.js
@@ -53,17 +53,17 @@ var testTodayPane = function() {
 
   if (startHour < 8 || startHour > 16) {
     view.scrollToMinute(60 * startHour);
   }
 
   controller.doubleClick(new elementslib.Lookup(controller.window.document, dayView +
     'anon({"anonid":"mainbox"})/anon({"anonid":"scrollbox"})/anon({"anonid":"daybox"})/' +
     '{"class":"calendar-event-column-even"}/anon({"anonid":"boxstack"})/' +
-    'anon({"anonid":"bgbox"})/[' + startHour + ']'), 1, 1);
+    'anon({"anonid":"bgbox"})/[' + startHour + "]"), 1, 1);
   controller.waitFor(function() {return mozmill.utils.getWindows("Calendar:EventDialog").length > 0;}, WAIT_FOR_WINDOW_TIMEOUT);
   let event = new mozmill.controller.MozMillController(mozmill.utils.getWindows("Calendar:EventDialog")[0]);
   let iframe = event.window.document.getElementById("lightning-item-panel-iframe");
   event.waitFor(() => iframe.contentWindow.onLoad && iframe.contentWindow.onLoad.hasLoaded == true);
 
   event.waitForElement(new elementslib.Lookup(iframe.contentDocument, eventName));
   event.type(new elementslib.Lookup(iframe.contentDocument, eventName), "Today's Event");
   event.click(new elementslib.ID(event.window.document, "button-save"));
@@ -237,17 +237,17 @@ var testTodayPane = function() {
 //    || tomorrow.getAttribute("checked") != "true");
   controller.assertJS(!soon.hasAttribute("checked") ||
     soon.getAttribute("checked") != "true");
 };
 
 var getIsoDate = function() {
   let date = new Date();
   let year = date.getFullYear();
-  let month = (date.getMonth() < 9) ? '0' + (date.getMonth() + 1) : (date.getMonth() + 1);
-  let day = (date.getDate() < 10) ? '0' + date.getDate() : date.getDate();
-  let isoDate = year + '' + month + '' + day;
+  let month = (date.getMonth() < 9) ? "0" + (date.getMonth() + 1) : (date.getMonth() + 1);
+  let day = (date.getDate() < 10) ? "0" + date.getDate() : date.getDate();
+  let isoDate = year + "" + month + "" + day;
   return isoDate;
 };
 
 var teardownTest = function(module) {
   calUtils.deleteCalendars(controller, MOZMILL_CALENDAR);
 };
--- a/calendar/test/mozmill/views/testDayView.js
+++ b/calendar/test/mozmill/views/testDayView.js
@@ -65,17 +65,17 @@ var testDayView = function() {
 
   // check that the start time is correct
   let startTimeInput = new elementslib.Lookup(event.window.document, eventDialog +
     'id("event-grid-startdate-row")/id("event-grid-startdate-picker-box")/' +
     'id("event-starttime")/anon({"anonid":"hbox"})/anon({"anonid":"time-picker"})/' +
     'anon({"class":"timepicker-box-class"})/anon({"class":"timepicker-text-class"})/' +
     'anon({"flex":"1"})/anon({"anonid":"input"})');
   event.waitForElement(startTimeInput);
-  event.assertValue(startTimeInput, '8:00');
+  event.assertValue(startTimeInput, "8:00");
   let date = startdate = dateService.FormatDate("", dateService.dateFormatShort,
     2009, 1, 1);
   event.assertValue(new elementslib.Lookup(event.window.document, eventDialog +
     'id("event-grid-startdate-row")/id("event-grid-startdate-picker-box")/' +
     'id("event-starttime")/anon({"anonid":"hbox"})/anon({"anonid":"date-picker"})/' +
     'anon({"flex":"1","id":"hbox","class":"datepicker-box-class"})/' +
     '{"class":"datepicker-text-class"}/anon({"class":"menulist-editable-box textbox-input-box"})/' +
     'anon({"anonid":"input"})'),
--- a/calendar/test/mozmill/views/testMonthView.js
+++ b/calendar/test/mozmill/views/testMonthView.js
@@ -66,17 +66,17 @@ var testMonthView = function() {
     'anon({"anonid":"mainbox"})/anon({"anonid":"monthgrid"})/anon({"anonid":"monthgridrows"})/' +
     '[0]/{"selected":"true"}/anon({"anonid":"day-items"})'));
   controller.waitFor(function() {return mozmill.utils.getWindows("Calendar:EventDialog").length > 0;}, sleep);
   let event = new mozmill.controller.MozMillController(mozmill.utils.getWindows("Calendar:EventDialog")[0]);
 
   // check that the start time is correct
   // next full hour except last hour hour of the day
   let nextHour = (hour == 23) ? hour : (hour + 1) % 24;
-  let startTime = nextHour + ':00'; // next full hour
+  let startTime = nextHour + ":00"; // next full hour
   let startTimeInput = new elementslib.Lookup(event.window.document, eventDialog +
     'id("event-grid-startdate-row")/id("event-grid-startdate-picker-box")/' +
     'id("event-starttime")/anon({"anonid":"hbox"})/anon({"anonid":"time-picker"})/' +
     'anon({"class":"timepicker-box-class"})/anon({"class":"timepicker-text-class"})/' +
     'anon({"flex":"1"})/anon({"anonid":"input"})');
   event.waitForElement(startTimeInput);
   event.assertValue(startTimeInput, startTime);
   let date = dateService.FormatDate("", dateService.dateFormatShort,
--- a/calendar/test/mozmill/views/testMultiweekView.js
+++ b/calendar/test/mozmill/views/testMultiweekView.js
@@ -66,17 +66,17 @@ var testMultiWeekView = function() {
     'anon({"anonid":"mainbox"})/anon({"anonid":"monthgrid"})/anon({"anonid":"monthgridrows"})/' +
     '[0]/{"selected":"true"}/anon({"anonid":"day-items"})'));
   controller.waitFor(function() {return mozmill.utils.getWindows("Calendar:EventDialog").length > 0;}, sleep);
   let event = new mozmill.controller.MozMillController(mozmill.utils.getWindows("Calendar:EventDialog")[0]);
 
   // check that the start time is correct
   // next full hour except last hour hour of the day
   let nextHour = (hour == 23) ? hour : (hour + 1) % 24;
-  let startTime = nextHour + ':00';
+  let startTime = nextHour + ":00";
   let startTimeInput = new elementslib.Lookup(event.window.document, eventDialog +
     'id("event-grid-startdate-row")/id("event-grid-startdate-picker-box")/' +
     'id("event-starttime")/anon({"anonid":"hbox"})/anon({"anonid":"time-picker"})/' +
     'anon({"class":"timepicker-box-class"})/anon({"class":"timepicker-text-class"})/' +
     'anon({"flex":"1"})/anon({"anonid":"input"})');
   event.waitForElement(startTimeInput);
   event.assertValue(startTimeInput, startTime);
   let date = dateService.FormatDate("", dateService.dateFormatShort,
--- a/calendar/test/mozmill/views/testTaskView.js
+++ b/calendar/test/mozmill/views/testTaskView.js
@@ -123,29 +123,29 @@ var testTaskView = function() {
   controller.sleep(sleep);
   let priorityNode = new elementslib.ID(controller.window.document, "calendar-task-details-priority-high");
   controller.assertNotDOMProperty(priorityNode, "hidden");
 
   // verify that tooltip shows status, priority and percent complete
   let toolTipNode = new elementslib.Lookup(controller.window.document, toolTip).getNode();
   toolTipNode.ownerDocument.defaultView.showToolTip(toolTipNode, taskTreeNode.getTaskAtRow(0));
 
-  let toolTipName = new elementslib.Lookup(controller.window.document, toolTipGrid + '[1]/[0]/[1]');
-  let toolTipCalendar = new elementslib.Lookup(controller.window.document, toolTipGrid + '[1]/[1]/[1]');
-  let toolTipPriority = new elementslib.Lookup(controller.window.document, toolTipGrid + '[1]/[2]/[1]');
-  let toolTipStatus = new elementslib.Lookup(controller.window.document, toolTipGrid + '[1]/[3]/[1]');
-  let toolTipComplete = new elementslib.Lookup(controller.window.document, toolTipGrid + '[1]/[4]/[1]');
+  let toolTipName = new elementslib.Lookup(controller.window.document, toolTipGrid + "[1]/[0]/[1]");
+  let toolTipCalendar = new elementslib.Lookup(controller.window.document, toolTipGrid + "[1]/[1]/[1]");
+  let toolTipPriority = new elementslib.Lookup(controller.window.document, toolTipGrid + "[1]/[2]/[1]");
+  let toolTipStatus = new elementslib.Lookup(controller.window.document, toolTipGrid + "[1]/[3]/[1]");
+  let toolTipComplete = new elementslib.Lookup(controller.window.document, toolTipGrid + "[1]/[4]/[1]");
   let priority = utils.getProperty("chrome://calendar/locale/calendar.properties",
     "highPriority");
 
   controller.assertJSProperty(toolTipName, "textContent", title);
   controller.assertJSProperty(toolTipCalendar, "textContent", calendar);
   controller.assertJSProperty(toolTipPriority, "textContent", priority);
   controller.assertJS(toolTipStatus.getNode().textContent.toLowerCase() == status.toLowerCase());
-  controller.assertJSProperty(toolTipComplete, "textContent", percentComplete + '%');
+  controller.assertJSProperty(toolTipComplete, "textContent", percentComplete + "%");
 
   // mark completed, verify
   controller.click(new elementslib.ID(controller.window.document,
                                       "task-actions-markcompleted"));
   controller.sleep(sleep);
 
   status = utils.getProperty("chrome://calendar/locale/calendar.properties",
     "taskDetailsStatusCompleted");
--- a/calendar/test/mozmill/views/testWeekView.js
+++ b/calendar/test/mozmill/views/testWeekView.js
@@ -68,17 +68,17 @@ var testWeekView = function() {
 
   // check that the start time is correct
   let startTimeInput = new elementslib.Lookup(event.window.document, eventDialog +
     'id("event-grid-startdate-row")/id("event-grid-startdate-picker-box")/' +
     'id("event-starttime")/anon({"anonid":"hbox"})/anon({"anonid":"time-picker"})/' +
     'anon({"class":"timepicker-box-class"})/anon({"class":"timepicker-text-class"})/' +
     'anon({"flex":"1"})/anon({"anonid":"input"})');
   event.waitForElement(startTimeInput);
-  event.assertValue(startTimeInput, '8:00');
+  event.assertValue(startTimeInput, "8:00");
   let date = dateService.FormatDate("", dateService.dateFormatShort,
     2009, 1, 1);
   event.assertValue(new elementslib.Lookup(event.window.document, eventDialog +
     'id("event-grid-startdate-row")/id("event-grid-startdate-picker-box")/' +
     'id("event-starttime")/anon({"anonid":"hbox"})/anon({"anonid":"date-picker"})/' +
     'anon({"flex":"1","id":"hbox","class":"datepicker-box-class"})/' +
     '{"class":"datepicker-text-class"}/anon({"class":"menulist-editable-box textbox-input-box"})/' +
     'anon({"anonid":"input"})'),
--- a/calendar/test/unit/head_consts.js
+++ b/calendar/test/unit/head_consts.js
@@ -230,17 +230,17 @@ function do_calendar_startup(callback) {
     let obs = {
       observe: function() {
         Services.obs.removeObserver(this, "calendar-startup-done");
         do_test_finished();
         do_execute_soon(callback);
       }
     };
 
-    let ss = Components.classes['@mozilla.org/calendar/startup-service;1']
+    let ss = Components.classes["@mozilla.org/calendar/startup-service;1"]
                        .getService(Components.interfaces.nsISupports).wrappedJSObject;
 
     if (ss.started) {
         callback();
     } else {
         do_test_pending();
         Services.obs.addObserver(obs, "calendar-startup-done", false);
         if (_profileInitialized) {
--- a/calendar/test/unit/test_attendee.js
+++ b/calendar/test/unit/test_attendee.js
@@ -215,43 +215,43 @@ function test_doubleParameters() {
             }
             ok(parNames.length == aExpected[att_n].param.length,
                "Each parameter has been considered for " + att_n);
         }
     }
 
     // Event with attendees and organizer with one of the parameter duplicated.
     let ics = [
-        'BEGIN:VCALENDAR',
-        'VERSION:2.0',
-        'PRODID:-//Marketcircle Inc.//Daylite 4.0//EN',
-        'BEGIN:VEVENT',
-        'DTSTART:20130529T100000',
-        'DTEND:20130529T110000',
-        'SUMMARY:Summary',
-        'CREATED:20130514T124220Z',
-        'DTSTAMP:20130524T101307Z',
-        'UID:9482DDFA-07B4-44B9-8228-ED4BC17BA278',
-        'SEQUENCE:3',
-        'ORGANIZER;CN=CN_organizer;X-ORACLE-GUID=A5120D71D6193E11E04400144F;',
-        ' X-UW-AVAILABLE-APPOINTMENT-ROLE=OWNER;X-UW-AVAILABLE-APPOINTMENT',
-        ' -ROLE=OWNER:mailto:organizer@example.com',
-        'ATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CUTYPE=INDIVIDUAL;RSVP=TRUE;',
-        ' PARTSTAT=NEEDS-ACTION;X-RECEIVED-DTSTAMP=',
-        ' 20130827T124944Z;CN=CN_attendee1:mailto:attendee1@example.com',
-        'ATTENDEE;ROLE=CHAIR;CN=CN_attendee2;CUTYPE=INDIVIDUAL;',
-        ' PARTSTAT=ACCEPTED;CN=CN_attendee2:mailto:attendee2@example.com',
-        'ATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CUTYPE=RESOURCE;',
-        ' PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CN=CN_attendee3',
-        ' :mailto:attendee3@example.com',
+        "BEGIN:VCALENDAR",
+        "VERSION:2.0",
+        "PRODID:-//Marketcircle Inc.//Daylite 4.0//EN",
+        "BEGIN:VEVENT",
+        "DTSTART:20130529T100000",
+        "DTEND:20130529T110000",
+        "SUMMARY:Summary",
+        "CREATED:20130514T124220Z",
+        "DTSTAMP:20130524T101307Z",
+        "UID:9482DDFA-07B4-44B9-8228-ED4BC17BA278",
+        "SEQUENCE:3",
+        "ORGANIZER;CN=CN_organizer;X-ORACLE-GUID=A5120D71D6193E11E04400144F;",
+        " X-UW-AVAILABLE-APPOINTMENT-ROLE=OWNER;X-UW-AVAILABLE-APPOINTMENT",
+        " -ROLE=OWNER:mailto:organizer@example.com",
+        "ATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CUTYPE=INDIVIDUAL;RSVP=TRUE;",
+        " PARTSTAT=NEEDS-ACTION;X-RECEIVED-DTSTAMP=",
+        " 20130827T124944Z;CN=CN_attendee1:mailto:attendee1@example.com",
+        "ATTENDEE;ROLE=CHAIR;CN=CN_attendee2;CUTYPE=INDIVIDUAL;",
+        " PARTSTAT=ACCEPTED;CN=CN_attendee2:mailto:attendee2@example.com",
+        "ATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CUTYPE=RESOURCE;",
+        " PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CN=CN_attendee3",
+        " :mailto:attendee3@example.com",
         'ATTENDEE;CN="CN_attendee4";PARTSTAT=ACCEPTED;X-RECEIVED-DTSTAMP=',
-        ' 20130827T124944Z;X-RECEIVED-SEQUENCE=0;X-RECEIVED-SEQUENCE=0',
-        ' :mailto:attendee4@example.com',
-        'END:VEVENT',
-        'END:VCALENDAR'
+        " 20130827T124944Z;X-RECEIVED-SEQUENCE=0;X-RECEIVED-SEQUENCE=0",
+        " :mailto:attendee4@example.com",
+        "END:VEVENT",
+        "END:VCALENDAR"
     ].join("\n");
 
     let expectedOrganizer = {
         organizer: {
             param:  ["CN", "X-ORACLE-GUID", "X-UW-AVAILABLE-APPOINTMENT-ROLE"],
             values: ["CN_organizer", "A5120D71D6193E11E04400144F", "OWNER"]
         }
     };
--- a/calendar/test/unit/test_bug1204255.js
+++ b/calendar/test/unit/test_bug1204255.js
@@ -62,25 +62,25 @@ function test_newAttendee() {
         equal(readAttendee.id, test.expected.id);
         equal(readAttendee.participationStatus, test.expected.partstat, "partstat matches for " + test.expected.id);
         equal(readAttendee.commonName, test.expected.cn, "cn matches for " + test.expected.id);
     }
 }
 
 function test_fromICS() {
     let ics = [
-        'BEGIN:VCALENDAR',
-        'PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN',
-        'VERSION:2.0',
-        'BEGIN:VEVENT',
-        'UID:a84c74d1-cfc6-4ddf-9d60-9e4afd8238cf',
-        'SUMMARY:New Event',
-        'DTSTART:20150729T103000Z',
-        'DTEND:20150729T113000Z',
-        'ORGANIZER;RSVP=TRUE;CN=Tester1;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:user1@example.net',
+        "BEGIN:VCALENDAR",
+        "PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN",
+        "VERSION:2.0",
+        "BEGIN:VEVENT",
+        "UID:a84c74d1-cfc6-4ddf-9d60-9e4afd8238cf",
+        "SUMMARY:New Event",
+        "DTSTART:20150729T103000Z",
+        "DTEND:20150729T113000Z",
+        "ORGANIZER;RSVP=TRUE;CN=Tester1;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:user1@example.net",
 
         'ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;CN="NOT PREFIXED";ROLE=REQ-PARTICIPANT:user2@example.net',
         'ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;CN="PREFIXED";ROLE=REQ-PARTICIPANT:mailto:user2@example.net',
 
         'ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;CN="PREFIXED";ROLE=REQ-PARTICIPANT:mailto:user3@example.net',
         'ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;CN="NOT PREFIXED";ROLE=REQ-PARTICIPANT:user3@example.net',
 
         'ATTENDEE;RSVP=TRUE;PARTSTAT=ACCEPTED;CN="PREFIXED";ROLE=REQ-PARTICIPANT:mailto:user4@example.net',
@@ -89,18 +89,18 @@ function test_fromICS() {
         'ATTENDEE;RSVP=TRUE;PARTSTAT=TENTATIVE;CN="NOT PREFIXED";ROLE=REQ-PARTICIPANT:user5@example.net',
         'ATTENDEE;RSVP=TRUE;PARTSTAT=ACCEPTED;CN="PREFIXED";ROLE=REQ-PARTICIPANT:mailto:user5@example.net',
 
         'ATTENDEE;RSVP=TRUE;PARTSTAT=DECLINED;CN="NOT PREFIXED";ROLE=REQ-PARTICIPANT:user6@example.net',
         'ATTENDEE;RSVP=TRUE;PARTSTAT=TENTATIVE;CN="PREFIXED";ROLE=REQ-PARTICIPANT:mailto:user6@example.net',
 
         'ATTENDEE;RSVP=TRUE;PARTSTAT=TENTATIVE;CN="NOT PREFIXED";ROLE=REQ-PARTICIPANT:user7@example.net',
         'ATTENDEE;RSVP=TRUE;PARTSTAT=DECLINED;CN="PREFIXED";ROLE=REQ-PARTICIPANT:mailto:user7@example.net',
-        'END:VEVENT',
-        'END:VCALENDAR'
+        "END:VEVENT",
+        "END:VCALENDAR"
     ].join("\n");
 
     let expected = [
         { id: "mailto:user2@example.net", partstat: "NEEDS-ACTION", cn: "PREFIXED" },
         { id: "mailto:user3@example.net", partstat: "NEEDS-ACTION", cn: "NOT PREFIXED" },
         { id: "mailto:user4@example.net", partstat: "ACCEPTED", cn: "PREFIXED" },
         { id: "mailto:user5@example.net", partstat: "TENTATIVE", cn: "NOT PREFIXED" },
         { id: "mailto:user6@example.net", partstat: "DECLINED", cn: "NOT PREFIXED" },
--- a/calendar/test/unit/test_bug1209399.js
+++ b/calendar/test/unit/test_bug1209399.js
@@ -7,41 +7,41 @@ Components.utils.import("resource://cale
 function run_test() {
     // Test handling for multiple double quotes leading/trailing to attendee CN for bug 1209399
     test_newAttendee();
     test_fromICS();
 }
 
 function test_newAttendee() {
     let data = [{
-        input: { cn: null, id: 'mailto:user1@example.net' },
+        input: { cn: null, id: "mailto:user1@example.net" },
         expected: { cn: null }
     }, {
-        input: { cn: 'Test2', id: 'mailto:user2@example.net' },
-        expected: { cn: 'Test2' }
+        input: { cn: "Test2", id: "mailto:user2@example.net" },
+        expected: { cn: "Test2" }
     }, {
-        input: { cn: '"Test3"', id: 'mailto:user3@example.net' },
-        expected: { cn: 'Test3' }
+        input: { cn: '"Test3"', id: "mailto:user3@example.net" },
+        expected: { cn: "Test3" }
     }, {
-        input: { cn: '""Test4""', id: 'mailto:user4@example.net' },
-        expected: { cn: 'Test4' }
+        input: { cn: '""Test4""', id: "mailto:user4@example.net" },
+        expected: { cn: "Test4" }
     }, {
-        input: { cn: '""Test5"', id: 'mailto:user5@example.net' },
-        expected: { cn: 'Test5' }
+        input: { cn: '""Test5"', id: "mailto:user5@example.net" },
+        expected: { cn: "Test5" }
     }, {
-        input: { cn: '"Test6""', id: 'mailto:user6@example.net' },
-        expected: { cn: 'Test6' }
+        input: { cn: '"Test6""', id: "mailto:user6@example.net" },
+        expected: { cn: "Test6" }
     }, {
-        input: { cn: '', id: 'mailto:user7@example.net' },
-        expected: { cn: '' }
+        input: { cn: "", id: "mailto:user7@example.net" },
+        expected: { cn: "" }
     }, {
-        input: { cn: '""', id: 'mailto:user8@example.net' },
+        input: { cn: '""', id: "mailto:user8@example.net" },
         expected: { cn: null }
     }, {
-        input: { cn: '""""', id: 'mailto:user9@example.net' },
+        input: { cn: '""""', id: "mailto:user9@example.net" },
         expected: { cn: null }
     }];
 
     let i = 0;
     let event = cal.createEvent();
     for (let test of data) {
         i++;
         let attendee = cal.createAttendee();
@@ -52,46 +52,46 @@ function test_newAttendee() {
         let readAttendee = event.getAttendeeById(test.input.id);
         equal(readAttendee.commonName, test.expected.cn,
               "Test #" + i + " for cn matching of " + test.input.id);
     }
 }
 
 function test_fromICS() {
     let ics = [
-        'BEGIN:VCALENDAR',
-        'PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN',
-        'VERSION:2.0',
-        'BEGIN:VEVENT',
-        'UID:a84c74d1-cfc6-4ddf-9d60-9e4afd8238cf',
-        'SUMMARY:New Event',
-        'DTSTART:20150729T103000Z',
-        'DTEND:20150729T113000Z',
-        'ORGANIZER;RSVP=TRUE;CN=Tester1;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:user1@example.net',
+        "BEGIN:VCALENDAR",
+        "PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN",
+        "VERSION:2.0",
+        "BEGIN:VEVENT",
+        "UID:a84c74d1-cfc6-4ddf-9d60-9e4afd8238cf",
+        "SUMMARY:New Event",
+        "DTSTART:20150729T103000Z",
+        "DTEND:20150729T113000Z",
+        "ORGANIZER;RSVP=TRUE;CN=Tester1;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:user1@example.net",
 
-        'ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;CN=Test2;ROLE=REQ-PARTICIPANT:mailto:user2@example.net',
+        "ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;CN=Test2;ROLE=REQ-PARTICIPANT:mailto:user2@example.net",
         'ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;CN="Test3";ROLE=REQ-PARTICIPANT:mailto:user3@example.net',
         'ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;CN=""Test4"";ROLE=REQ-PARTICIPANT:mailto:user4@example.net',
-        'ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;CN=;ROLE=REQ-PARTICIPANT:mailto:user5@example.net',
-        'ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:user6@example.net',
+        "ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;CN=;ROLE=REQ-PARTICIPANT:mailto:user5@example.net",
+        "ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:user6@example.net",
         'ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;CN="";ROLE=REQ-PARTICIPANT:mailto:user7@example.net',
         'ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;CN="""";ROLE=REQ-PARTICIPANT:mailto:user8@example.net',
 
-        'END:VEVENT',
-        'END:VCALENDAR'
+        "END:VEVENT",
+        "END:VCALENDAR"
     ].join("\n");
 
     let expected = [
-        { id: 'mailto:user2@example.net', cn: 'Test2' },
-        { id: 'mailto:user3@example.net', cn: 'Test3' },
-        { id: 'mailto:user4@example.net', cn: '' },
-        { id: 'mailto:user5@example.net', cn: '' },
-        { id: 'mailto:user6@example.net', cn: null },
-        { id: 'mailto:user7@example.net', cn: '' },
-        { id: 'mailto:user8@example.net', cn: '' }
+        { id: "mailto:user2@example.net", cn: "Test2" },
+        { id: "mailto:user3@example.net", cn: "Test3" },
+        { id: "mailto:user4@example.net", cn: "" },
+        { id: "mailto:user5@example.net", cn: "" },
+        { id: "mailto:user6@example.net", cn: null },
+        { id: "mailto:user7@example.net", cn: "" },
+        { id: "mailto:user8@example.net", cn: "" }
     ];
     let event = createEventFromIcalString(ics);
 
     equal(event.getAttendees({}).length, expected.length, "Check test consistency");
     for (let exp of expected) {
         let attendee = event.getAttendeeById(exp.id);
         equal(attendee.commonName, exp.cn, "Test for cn matching of " + exp.id);
     }
--- a/calendar/test/unit/test_calutils.js
+++ b/calendar/test/unit/test_calutils.js
@@ -132,98 +132,98 @@ function removeMailTo_test() {
     }
 }
 
 function resolveDelegation_test() {
     let data = [{
         input: {
             attendee:
                 'ATTENDEE;DELEGATED-FROM="mailto:attendee2@example.net";CN="Attendee 1":mailto:at' +
-                'tendee1@example.net',
+                "tendee1@example.net",
             attendees: [
                 'ATTENDEE;DELEGATED-FROM="mailto:attendee2@example.net";CN="Attendee 1":mailto:at' +
-                'tendee1@example.net',
+                "tendee1@example.net",
                 'ATTENDEE;DELEGATED-TO="mailto:attendee1@example.net";CN="Attendee 2":mailto:atte' +
-                'ndee2@example.net'
+                "ndee2@example.net"
             ]
         },
         expected: {
-            delegatees: '',
-            delegators: 'Attendee 2 <attendee2@example.net>'
+            delegatees: "",
+            delegators: "Attendee 2 <attendee2@example.net>"
         }
     }, {
         input: {
             attendee:
                 'ATTENDEE;DELEGATED-FROM="mailto:attendee2@example.net":mailto:attendee1@example.net',
             attendees: [
                 'ATTENDEE;DELEGATED-FROM="mailto:attendee2@example.net":mailto:attendee1@example.net',
                 'ATTENDEE;DELEGATED-TO="mailto:attendee1@example.net":mailto:attendee2@example.net'
             ]
         },
         expected: {
-            delegatees: '',
-            delegators: 'attendee2@example.net'
+            delegatees: "",
+            delegators: "attendee2@example.net"
         }
     }, {
         input: {
             attendee:
                 'ATTENDEE;DELEGATED-TO="mailto:attendee2@example.net";CN="Attendee 1":mailto:atte' +
-                'ndee1@example.net',
+                "ndee1@example.net",
             attendees: [
                 'ATTENDEE;DELEGATED-TO="mailto:attendee2@example.net";CN="Attendee 1":mailto:atte' +
-                'ndee1@example.net',
+                "ndee1@example.net",
                 'ATTENDEE;DELEGATED-FROM="mailto:attendee1@example.net";CN="Attendee 2":mailto:at' +
-                'tendee2@example.net'
+                "tendee2@example.net"
             ]
         },
         expected: {
-            delegatees: 'Attendee 2 <attendee2@example.net>',
-            delegators: ''
+            delegatees: "Attendee 2 <attendee2@example.net>",
+            delegators: ""
         }
     }, {
         input: {
             attendee:
                 'ATTENDEE;DELEGATED-TO="mailto:attendee2@example.net":mailto:attendee1@example.net',
             attendees: [
                 'ATTENDEE;DELEGATED-TO="mailto:attendee2@example.net":mailto:attendee1@example.net',
                 'ATTENDEE;DELEGATED-FROM="mailto:attendee1@example.net":mailto:attendee2@example.net'
             ]
         },
         expected: {
-            delegatees: 'attendee2@example.net',
-            delegators: ''
+            delegatees: "attendee2@example.net",
+            delegators: ""
         }
     }, {
         input: {
             attendee:
-                'ATTENDEE:mailto:attendee1@example.net',
+                "ATTENDEE:mailto:attendee1@example.net",
             attendees: [
-                'ATTENDEE:mailto:attendee1@example.net',
-                'ATTENDEE:mailto:attendee2@example.net'
+                "ATTENDEE:mailto:attendee1@example.net",
+                "ATTENDEE:mailto:attendee2@example.net"
             ]
         },
         expected: {
-            delegatees: '',
-            delegators: ''
+            delegatees: "",
+            delegators: ""
         }
     }, {
         input: {
             attendee:
                 'ATTENDEE;DELEGATED-FROM="mailto:attendee2@example.net";DELEGATED-TO="mailto:atte' +
                 'ndee3@example.net":mailto:attendee1@example.net',
             attendees: [
                 'ATTENDEE;DELEGATED-FROM="mailto:attendee2@example.net";DELEGATED-TO="mailto:atte' +
                 'ndee3@example.net":mailto:attendee1@example.net',
                 'ATTENDEE;DELEGATED-TO="mailto:attendee1@example.net":mailto:attendee2@example.net',
                 'ATTENDEE;DELEGATED-FROM="mailto:attendee1@example.net":mailto:attendee3@example.net'
             ]
         },
         expected: {
-            delegatees: 'attendee3@example.net',
-            delegators: 'attendee2@example.net'
+            delegatees: "attendee3@example.net",
+            delegators: "attendee2@example.net"
         }
     }];
     let i = 0;
     for (let test of data) {
         i++;
         let attendees = [];
         for (let att of test.input.attendees) {
             let attendee = cal.createAttendee();