!import
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
1 //@line 40 "/home/visbrero/mnt/roisin/rev_control/hg/mozilla/mail/base/content/mail3PaneWindowCommands.js"
2
3 var gMessengerBundle = document.getElementById("bundle_messenger");
4
5 // Controller object for folder pane
6 var FolderPaneController =
7 {
supportsCommand
(16 calls, 108 incl. v-uS, 108 excl. v-uS)
Called By: XULCommandDispatcher:getControllerForCommand (16 calls, 108 v-uS)
8 supportsCommand: function(command)
9 {
10 switch ( command )
11 {
12 case "cmd_delete":
13 case "button_delete":
14 case "button_compact":
15 //case "cmd_selectAll": the folder pane currently only handles single selection
16 case "cmd_cut":
17 case "cmd_copy":
18 case "cmd_paste":
19 return true;
20
21 default:
22 return false;
23 }
24 },
25
isCommandEnabled
(3 calls, 6490 incl. v-uS, 302 excl. v-uS)
Called: msgMail3PaneWindow.js:GetFolderAttribute (9 calls, 1717 v-uS)
Object:getRangeAt (3 calls, 126 v-uS)
XULTreeBuilder:selection (3 calls, 34 v-uS)
msgMail3PaneWindow.js:GetFolderResource (3 calls, 556 v-uS)
msgMail3PaneWindow.js:GetFolderTree (3 calls, 21 v-uS)
tree.xml:!import (3 calls, 379 v-uS)
mail3PaneWindowCommands.js:isCommandEnabled (2 calls, 1422 v-uS)
globalOverlay.js:goSetMenuValue (1 calls, 237 v-uS)
mailWindowOverlay.js:IsCompactFolderEnabled (1 calls, 1691 v-uS)
Called By: XPCWrappedNative_NoHelper:isCommandEnabled (3 calls, 6490 v-uS)
26 isCommandEnabled: function(command)
27 {
28 switch ( command )
29 {
30 case "cmd_cut":
31 case "cmd_copy":
32 case "cmd_paste":
33 return false;
34 case "cmd_delete":
35 case "button_delete":
36 case "button_compact":
37 if ( command == "cmd_delete" )
38 goSetMenuValue(command, 'valueFolder');
39 var folderTree = GetFolderTree();
40 var startIndex = {};
41 var endIndex = {};
42 folderTree.view.selection.getRangeAt(0, startIndex, endIndex);
43 if (startIndex.value >= 0) {
44 var canDeleteThisFolder;
45 var specialFolder = null;
46 var isServer = null;
47 var serverType = null;
48 try {
49 var folderResource = GetFolderResource(folderTree, startIndex.value);
50 specialFolder = GetFolderAttribute(folderTree, folderResource, "SpecialFolder");
51 isServer = GetFolderAttribute(folderTree, folderResource, "IsServer") == "true";
52 serverType = GetFolderAttribute(folderTree, folderResource, "ServerType");
53 if (serverType == "nntp") {
54 if ( command == "cmd_delete" ) {
55 goSetMenuValue(command, 'valueNewsgroup');
56 goSetAccessKey(command, 'valueNewsgroupAccessKey');
57 }
58 }
59 }
60 catch (ex) {
61 //dump("specialFolder failure: " + ex + "\n");
62 }
63 if (specialFolder == "Inbox" || specialFolder == "Trash" || specialFolder == "Drafts" ||
64 specialFolder == "Sent" || specialFolder == "Templates" || specialFolder == "Unsent Messages" ||
65 (specialFolder == "Junk" && !CanRenameDeleteJunkMail(GetSelectedFolderURI())) || isServer)
66 canDeleteThisFolder = false;
67 else
68 canDeleteThisFolder = true;
69 return (command != "button_compact") ?
70 canDeleteThisFolder && isCommandEnabled(command) :
71 !isServer && IsCompactFolderEnabled();
72 }
73 else
74 return false;
75 default:
76 return false;
77 }
78 },
79
doCommand
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
80 doCommand: function(command)
81 {
82 // if the user invoked a key short cut then it is possible that we got here for a command which is
83 // really disabled. kick out if the command should be disabled.
84 if (!this.isCommandEnabled(command)) return;
85
86 switch ( command )
87 {
88 case "cmd_delete":
89 case "button_delete":
90 MsgDeleteFolder();
91 break;
92 case "button_compact":
93 MsgCompactFolder(false);
94 break;
95 }
96 },
97
onEvent
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
98 onEvent: function(event)
99 {
100 }
101 };
102
103 // DefaultController object (handles commands when one of the trees does not have focus)
104 var DefaultController =
105 {
supportsCommand
(13 calls, 92 incl. v-uS, 92 excl. v-uS)
Called By: XULCommandDispatcher:getControllerForCommand (13 calls, 92 v-uS)
106 supportsCommand: function(command)
107 {
108
109 switch ( command )
110 {
111 case "cmd_createFilterFromPopup":
112 case "cmd_close":
113 case "cmd_reply":
114 case "button_reply":
115 case "cmd_replySender":
116 case "cmd_replyGroup":
117 case "cmd_replyall":
118 case "button_replyall":
119 case "cmd_forward":
120 case "button_forward":
121 case "cmd_forwardInline":
122 case "cmd_forwardAttachment":
123 case "cmd_editAsNew":
124 case "cmd_createFilterFromMenu":
125 case "cmd_delete":
126 case "button_delete":
127 case "button_junk":
128 case "cmd_shiftDelete":
129 case "cmd_nextMsg":
130 case "button_next":
131 case "button_previous":
132 case "cmd_nextUnreadMsg":
133 case "cmd_nextFlaggedMsg":
134 case "cmd_nextUnreadThread":
135 case "cmd_previousMsg":
136 case "cmd_previousUnreadMsg":
137 case "cmd_previousFlaggedMsg":
138 case "button_goForward":
139 case "button_goBack":
140 case "cmd_goForward":
141 case "cmd_goBack":
142 case "cmd_goStartPage":
143 case "cmd_viewAllMsgs":
144 case "cmd_viewUnreadMsgs":
145 case "cmd_viewThreadsWithUnread":
146 case "cmd_viewWatchedThreadsWithUnread":
147 case "cmd_viewIgnoredThreads":
148 case "cmd_undo":
149 case "cmd_redo":
150 case "cmd_expandAllThreads":
151 case "cmd_collapseAllThreads":
152 case "cmd_renameFolder":
153 case "cmd_sendUnsentMsgs":
154 case "cmd_openMessage":
155 case "button_print":
156 case "cmd_print":
157 case "cmd_printpreview":
158 case "cmd_printSetup":
159 case "cmd_saveAsFile":
160 case "cmd_saveAsTemplate":
161 case "cmd_properties":
162 case "cmd_viewPageSource":
163 case "cmd_setFolderCharset":
164 case "cmd_reload":
165 case "button_getNewMessages":
166 case "cmd_getNewMessages":
167 case "cmd_getMsgsForAuthAccounts":
168 case "cmd_getNextNMessages":
169 case "cmd_find":
170 case "cmd_findAgain":
171 case "cmd_findPrevious":
172 case "cmd_search":
173 case "button_mark":
174 case "cmd_tag":
175 case "cmd_markAsRead":
176 case "cmd_markAllRead":
177 case "cmd_markThreadAsRead":
178 case "cmd_markReadByDate":
179 case "cmd_markAsFlagged":
180 case "cmd_markAsJunk":
181 case "cmd_markAsNotJunk":
182 case "cmd_recalculateJunkScore":
183 case "cmd_applyFilters":
184 case "cmd_runJunkControls":
185 case "cmd_deleteJunk":
186 case "button_file":
187 case "cmd_file":
188 case "cmd_emptyTrash":
189 case "cmd_compactFolder":
190 case "button_compact":
191 case "cmd_settingsOffline":
192 case "cmd_close":
193 case "cmd_selectAll":
194 case "cmd_selectThread":
195 case "cmd_moveToFolderAgain":
196 return true;
197 case "cmd_downloadFlagged":
198 case "cmd_downloadSelected":
199 case "cmd_synchronizeOffline":
200 return MailOfflineMgr.isOnline();
201
202 case "cmd_watchThread":
203 case "cmd_killThread":
204 return(isNewsURI(GetFirstSelectedMessage()));
205
206 default:
207 return false;
208 }
209 },
210
isCommandEnabled
(13 calls, 2833 incl. v-uS, 588 excl. v-uS)
Called: Object:Object (26 calls, 163 v-uS)
mail3PaneWindowCommands.js:GetNumSelectedMessages (7 calls, 184 v-uS)
Object:getCommandStatus (5 calls, 169 v-uS)
Object:navigateStatus (2 calls, 59 v-uS)
mail3PaneWindowCommands.js:IsCanSearchMessagesEnabled (1 calls, 787 v-uS)
mail3PaneWindowCommands.js:IsViewNavigationItemEnabled (1 calls, 638 v-uS)
mailWindowOverlay.js:IsGetNewMessagesEnabled (1 calls, 6 v-uS)
mailWindowOverlay.js:UpdateJunkToolbarButton (1 calls, 235 v-uS)
Called By: XPCWrappedNative_NoHelper:isCommandEnabled (13 calls, 2833 v-uS)
211 isCommandEnabled: function(command)
212 {
213 var enabled = new Object();
214 enabled.value = false;
215 var checkStatus = new Object();
216
217 switch ( command )
218 {
219 case "cmd_delete":
220 UpdateDeleteCommand();
221 // fall through
222 case "button_delete":
223 if (gDBView)
224 gDBView.getCommandStatus(nsMsgViewCommandType.deleteMsg, enabled, checkStatus);
225 return enabled.value;
226 case "cmd_shiftDelete":
227 if (gDBView)
228 gDBView.getCommandStatus(nsMsgViewCommandType.deleteNoTrash, enabled, checkStatus);
229 return enabled.value;
230 case "button_junk":
231 UpdateJunkToolbarButton();
232 if (gDBView)
233 gDBView.getCommandStatus(nsMsgViewCommandType.junk, enabled, checkStatus);
234 return enabled.value;
235 case "cmd_killThread":
236 return GetNumSelectedMessages() > 0;
237 case "cmd_watchThread":
238 if (gDBView)
239 gDBView.getCommandStatus(nsMsgViewCommandType.toggleThreadWatched, enabled, checkStatus);
240 return enabled.value;
241 case "cmd_createFilterFromPopup":
242 case "cmd_createFilterFromMenu":
243 var loadedFolder = GetLoadedMsgFolder();
244 if (!(loadedFolder && loadedFolder.server.canHaveFilters))
245 return false; // else fall thru
246 case "cmd_saveAsFile":
247 case "cmd_saveAsTemplate":
248 if (GetNumSelectedMessages() > 1)
249 return false; // else fall thru
250 case "cmd_reply":
251 case "button_reply":
252 case "cmd_replySender":
253 case "cmd_replyGroup":
254 case "cmd_replyall":
255 case "button_replyall":
256 case "cmd_forward":
257 case "button_forward":
258 case "cmd_forwardInline":
259 case "cmd_forwardAttachment":
260 case "cmd_editAsNew":
261 case "cmd_openMessage":
262 case "button_print":
263 case "cmd_print":
264 case "cmd_viewPageSource":
265 case "cmd_reload":
266 if (GetNumSelectedMessages() > 0)
267 {
268 if (gDBView)
269 {
270 gDBView.getCommandStatus(nsMsgViewCommandType.cmdRequiringMsgBody, enabled, checkStatus);
271 return enabled.value;
272 }
273 }
274 return false;
275 case "cmd_printpreview":
276 if ( GetNumSelectedMessages() == 1 && gDBView)
277 {
278 gDBView.getCommandStatus(nsMsgViewCommandType.cmdRequiringMsgBody, enabled, checkStatus);
279 return enabled.value;
280 }
281 return false;
282 case "cmd_printSetup":
283 return true;
284 case "cmd_markAsFlagged":
285 case "button_file":
286 case "cmd_file":
287 return (GetNumSelectedMessages() > 0 );
288 case "cmd_markAsJunk":
289 case "cmd_markAsNotJunk":
290 // can't do news on junk yet.
291 return (GetNumSelectedMessages() > 0 && !isNewsURI(GetFirstSelectedMessage()));
292 case "cmd_recalculateJunkScore":
293 if (GetNumSelectedMessages() > 0)
294 gDBView.getCommandStatus(nsMsgViewCommandType.runJunkControls, enabled, checkStatus);
295 return enabled.value;
296 case "cmd_applyFilters":
297 if (gDBView)
298 gDBView.getCommandStatus(nsMsgViewCommandType.applyFilters, enabled, checkStatus);
299 return enabled.value;
300 case "cmd_runJunkControls":
301 if (gDBView)
302 gDBView.getCommandStatus(nsMsgViewCommandType.runJunkControls, enabled, checkStatus);
303 return enabled.value;
304 case "cmd_deleteJunk":
305 if (gDBView)
306 gDBView.getCommandStatus(nsMsgViewCommandType.deleteJunk, enabled, checkStatus);
307 return enabled.value;
308 case "button_mark":
309 case "cmd_tag":
310 case "cmd_markAsRead":
311 case "cmd_markThreadAsRead":
312 return GetNumSelectedMessages() > 0;
313 case "button_previous":
314 case "button_next":
315 return IsViewNavigationItemEnabled();
316 case "cmd_nextMsg":
317 case "cmd_nextUnreadMsg":
318 case "cmd_nextUnreadThread":
319 case "cmd_previousMsg":
320 case "cmd_previousUnreadMsg":
321 return IsViewNavigationItemEnabled();
322 case "button_goForward":
323 case "button_goBack":
324 case "cmd_goForward":
325 case "cmd_goBack":
326 if (gDBView)
327 enabled.value = gDBView.navigateStatus((command == "cmd_goBack" || command == "button_goBack") ? nsMsgNavigationType.back : nsMsgNavigationType.forward);
328 return enabled.value;
329 case "cmd_goStartPage":
330 return pref.getBoolPref("mailnews.start_page.enabled") && !IsMessagePaneCollapsed();
331 case "cmd_markAllRead":
332 case "cmd_markReadByDate":
333 return IsFolderSelected();
334 case "cmd_find":
335 case "cmd_findAgain":
336 case "cmd_findPrevious":
337 return IsMessageDisplayedInMessagePane();
338 break;
339 case "cmd_search":
340 return IsCanSearchMessagesEnabled();
341 case "cmd_selectAll":
342 return gDBView != null;
343 // these are enabled on when we are in threaded mode
344 case "cmd_selectThread":
345 if (GetNumSelectedMessages() <= 0) return false;
346 case "cmd_expandAllThreads":
347 case "cmd_collapseAllThreads":
348 if (!gDBView || !gDBView.supportsThreading)
349 return false;
350 return (gDBView.viewFlags & nsMsgViewFlagsType.kThreadedDisplay);
351 case "cmd_nextFlaggedMsg":
352 case "cmd_previousFlaggedMsg":
353 return IsViewNavigationItemEnabled();
354 case "cmd_viewAllMsgs":
355 case "cmd_viewUnreadMsgs":
356 case "cmd_viewThreadsWithUnread":
357 case "cmd_viewWatchedThreadsWithUnread":
358 case "cmd_viewIgnoredThreads":
359 return gDBView;
360 case "cmd_stop":
361 return true;
362 case "cmd_undo":
363 case "cmd_redo":
364 return SetupUndoRedoCommand(command);
365 case "cmd_renameFolder":
366 return IsRenameFolderEnabled();
367 case "cmd_sendUnsentMsgs":
368 return IsSendUnsentMsgsEnabled(null);
369 case "cmd_properties":
370 return IsPropertiesEnabled(command);
371 case "button_getNewMessages":
372 case "cmd_getNewMessages":
373 case "cmd_getMsgsForAuthAccounts":
374 return IsGetNewMessagesEnabled();
375 case "cmd_getNextNMessages":
376 return IsGetNextNMessagesEnabled();
377 case "cmd_emptyTrash":
378 return IsEmptyTrashEnabled();
379 case "button_compact":
380 case "cmd_compactFolder":
381 return IsCompactFolderEnabled();
382 case "cmd_setFolderCharset":
383 return IsFolderCharsetEnabled();
384 case "cmd_close":
385 return true;
386 case "cmd_downloadFlagged":
387 return(IsFolderSelected() && MailOfflineMgr.isOnline());
388 case "cmd_downloadSelected":
389 return (IsFolderSelected() && MailOfflineMgr.isOnline() && GetNumSelectedMessages() > 0);
390 case "cmd_synchronizeOffline":
391 return MailOfflineMgr.isOnline() && IsAccountOfflineEnabled();
392 case "cmd_settingsOffline":
393 return IsAccountOfflineEnabled();
394 case "cmd_moveToFolderAgain":
395 return (pref.getCharPref("mail.last_msg_movecopy_target_uri") && GetNumSelectedMessages() > 0);
396 default:
397 return false;
398 }
399 return false;
400 },
401
doCommand
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
402 doCommand: function(command)
403 {
404 // if the user invoked a key short cut then it is possible that we got here for a command which is
405 // really disabled. kick out if the command should be disabled.
406 if (!this.isCommandEnabled(command)) return;
407
408 switch ( command )
409 {
410 case "cmd_close":
411 CloseMailWindow();
412 break;
413 case "button_getNewMessages":
414 case "cmd_getNewMessages":
415 MsgGetMessage();
416 break;
417 case "cmd_getMsgsForAuthAccounts":
418 MsgGetMessagesForAllAuthenticatedAccounts();
419 break;
420 case "cmd_getNextNMessages":
421 MsgGetNextNMessages();
422 break;
423 case "cmd_reply":
424 MsgReplyMessage(null);
425 break;
426 case "cmd_replySender":
427 MsgReplySender(null);
428 break;
429 case "cmd_replyGroup":
430 MsgReplyGroup(null);
431 break;
432 case "cmd_replyall":
433 MsgReplyToAllMessage(null);
434 break;
435 case "cmd_forward":
436 MsgForwardMessage(null);
437 break;
438 case "cmd_forwardInline":
439 MsgForwardAsInline(null);
440 break;
441 case "cmd_forwardAttachment":
442 MsgForwardAsAttachment(null);
443 break;
444 case "cmd_editAsNew":
445 MsgEditMessageAsNew();
446 break;
447 case "cmd_createFilterFromMenu":
448 MsgCreateFilter();
449 break;
450 case "cmd_createFilterFromPopup":
451 break;// This does nothing because the createfilter is invoked from the popupnode oncommand.
452 case "button_delete":
453 case "cmd_delete":
454 // if the user deletes a message before its mark as read timer goes off, we should mark it as read
455 // this ensures that we clear the biff indicator from the system tray when the user deletes the new message
456 if (gMarkViewedMessageAsReadTimer)
457 MarkCurrentMessageAsRead();
458 SetNextMessageAfterDelete();
459 gDBView.doCommand(nsMsgViewCommandType.deleteMsg);
460 break;
461 case "cmd_shiftDelete":
462 if (gMarkViewedMessageAsReadTimer)
463 MarkCurrentMessageAsRead();
464 SetNextMessageAfterDelete();
465 gDBView.doCommand(nsMsgViewCommandType.deleteNoTrash);
466 break;
467 case "cmd_killThread":
468 /* kill thread kills the thread and then does a next unread */
469 GoNextMessage(nsMsgNavigationType.toggleThreadKilled, true);
470 break;
471 case "cmd_watchThread":
472 gDBView.doCommand(nsMsgViewCommandType.toggleThreadWatched);
473 break;
474 case "button_next":
475 case "cmd_nextUnreadMsg":
476 MsgNextUnreadMessage();
477 break;
478 case "cmd_nextUnreadThread":
479 MsgNextUnreadThread();
480 break;
481 case "cmd_nextMsg":
482 MsgNextMessage();
483 break;
484 case "cmd_nextFlaggedMsg":
485 MsgNextFlaggedMessage();
486 break;
487 case "cmd_previousMsg":
488 MsgPreviousMessage();
489 break;
490 case "button_previous":
491 case "cmd_previousUnreadMsg":
492 MsgPreviousUnreadMessage();
493 break;
494 case "cmd_previousFlaggedMsg":
495 MsgPreviousFlaggedMessage();
496 break;
497 case "button_goForward":
498 case "cmd_goForward":
499 MsgGoForward();
500 break;
501 case "button_goBack":
502 case "cmd_goBack":
503 MsgGoBack();
504 break;
505 case "cmd_goStartPage":
506 HideMessageHeaderPane();
507 loadStartPage();
508 break;
509 case "cmd_viewAllMsgs":
510 case "cmd_viewThreadsWithUnread":
511 case "cmd_viewWatchedThreadsWithUnread":
512 case "cmd_viewUnreadMsgs":
513 case "cmd_viewIgnoredThreads":
514 SwitchView(command);
515 break;
516 case "cmd_undo":
517 messenger.undo(msgWindow);
518 break;
519 case "cmd_redo":
520 messenger.redo(msgWindow);
521 break;
522 case "cmd_expandAllThreads":
523 gDBView.doCommand(nsMsgViewCommandType.expandAll);
524 break;
525 case "cmd_collapseAllThreads":
526 gDBView.doCommand(nsMsgViewCommandType.collapseAll);
527 break;
528 case "cmd_renameFolder":
529 MsgRenameFolder();
530 return;
531 case "cmd_sendUnsentMsgs":
532 MsgSendUnsentMsgs();
533 return;
534 case "cmd_openMessage":
535 MsgOpenSelectedMessages();
536 return;
537 case "cmd_printSetup":
538 PrintUtils.showPageSetup();
539 return;
540 case "cmd_print":
541 PrintEnginePrint();
542 return;
543 case "cmd_printpreview":
544 PrintEnginePrintPreview();
545 return;
546 case "cmd_saveAsFile":
547 MsgSaveAsFile();
548 return;
549 case "cmd_saveAsTemplate":
550 MsgSaveAsTemplate();
551 return;
552 case "cmd_viewPageSource":
553 MsgViewPageSource();
554 return;
555 case "cmd_setFolderCharset":
556 MsgFolderProperties();
557 return;
558 case "cmd_reload":
559 MsgReload();
560 return;
561 case "cmd_find":
562 // make sure the message pane has focus before we start a find since we only support searching
563 // within the message body. Do it here and not in MsgFind() which can be called from standalone where we don't want to set focus
564 SetFocusMessagePane();
565 MsgFind();
566 return;
567 case "cmd_findAgain":
568 // make sure the message pane has focus before we start a find since we only support searching
569 // within the message body. Do it here and not in MsgFind() which can be called from standalone where we don't want to set focus
570 SetFocusMessagePane();
571 MsgFindAgain(false);
572 return;
573 case "cmd_findPrevious":
574 // make sure the message pane has focus before we start a find since we only support searching
575 // within the message body. Do it here and not in MsgFind() which can be called from standalone where we don't want to set focus
576 SetFocusMessagePane();
577 MsgFindAgain(true);
578 return;
579 case "cmd_markReadByDate":
580 MsgMarkReadByDate();
581 return;
582 case "cmd_properties":
583 MsgFolderProperties();
584 return;
585 case "cmd_search":
586 MsgSearchMessages();
587 return;
588 case "button_mark":
589 case "cmd_markAsRead":
590 MsgMarkMsgAsRead(null);
591 return;
592 case "cmd_markThreadAsRead":
593 MsgMarkThreadAsRead();
594 return;
595 case "cmd_markAllRead":
596 gDBView.doCommand(nsMsgViewCommandType.markAllRead);
597 return;
598 case "button_junk":
599 MsgJunk();
600 return;
601 case "cmd_stop":
602 MsgStop();
603 return;
604 case "cmd_markAsFlagged":
605 MsgMarkAsFlagged(null);
606 return;
607 case "cmd_markAsJunk":
608 JunkSelectedMessages(true);
609 return;
610 case "cmd_markAsNotJunk":
611 JunkSelectedMessages(false);
612 return;
613 case "cmd_recalculateJunkScore":
614 analyzeMessagesForJunk();
615 return;
616 case "cmd_applyFilters":
617 MsgApplyFilters(null);
618 return;
619 case "cmd_runJunkControls":
620 filterFolderForJunk();
621 return;
622 case "cmd_deleteJunk":
623 deleteJunkInFolder();
624 return;
625 case "cmd_emptyTrash":
626 MsgEmptyTrash();
627 return;
628 case "cmd_compactFolder":
629 MsgCompactFolder(true);
630 return;
631 case "button_compact":
632 MsgCompactFolder(false);
633 return;
634 case "cmd_downloadFlagged":
635 MsgDownloadFlagged();
636 break;
637 case "cmd_downloadSelected":
638 MsgDownloadSelected();
639 break;
640 case "cmd_synchronizeOffline":
641 MsgSynchronizeOffline();
642 break;
643 case "cmd_settingsOffline":
644 MailOfflineMgr.openOfflineAccountSettings();
645 break;
646 case "cmd_moveToFolderAgain":
647 var folderId = pref.getCharPref("mail.last_msg_movecopy_target_uri");
648 if (pref.getBoolPref("mail.last_msg_movecopy_was_move"))
649 MsgMoveMessage(folderId);
650 else
651 MsgCopyMessage(folderId);
652 break;
653 case "cmd_selectAll":
654 // move the focus so the user can delete the newly selected messages, not the folder
655 SetFocusThreadPane();
656 // if in threaded mode, the view will expand all before selecting all
657 gDBView.doCommand(nsMsgViewCommandType.selectAll)
658 if (gDBView.numSelected != 1) {
659 setTitleFromFolder(gDBView.msgFolder,null);
660 ClearMessagePane();
661 }
662 break;
663 case "cmd_selectThread":
664 gDBView.doCommand(nsMsgViewCommandType.selectThread);
665 break;
666 }
667 },
668
onEvent
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
669 onEvent: function(event)
670 {
671 // on blur events set the menu item texts back to the normal values
672 if ( event == 'blur' )
673 {
674 goSetMenuValue('cmd_undo', 'valueDefault');
675 goSetMenuValue('cmd_redo', 'valueDefault');
676 }
677 }
678 };
679
GetNumSelectedMessages
(8 calls, 216 incl. v-uS, 133 excl. v-uS)
Called: XPCWrappedNative_NoHelper:numSelected (8 calls, 82 v-uS)
Called By: mail3PaneWindowCommands.js:isCommandEnabled (7 calls, 184 v-uS)
commandglue.js:UpdateStatusMessageCounts (1 calls, 31 v-uS)
680 function GetNumSelectedMessages()
681 {
682 try {
683 return gDBView.numSelected;
684 }
685 catch (ex) {
686 return 0;
687 }
688 }
689
690 var gLastFocusedElement=null;
691
FocusRingUpdate_Mail
(2 calls, 31428 incl. v-uS, 92 excl. v-uS)
Called: ChromeWindow:removeAttribute (1 calls, 48 v-uS)
ChromeWindow:setAttribute (1 calls, 74 v-uS)
commandglue.js:UpdateMailToolbar (1 calls, 15192 v-uS)
mail3PaneWindowCommands.js:FocusRingUpdate_Mail (1 calls, 15698 v-uS)
mail3PaneWindowCommands.js:WhichPaneHasFocus (1 calls, 321 v-uS)
Called By: mail3PaneWindowCommands.js:FocusRingUpdate_Mail (1 calls, 15698 v-uS)
692 function FocusRingUpdate_Mail()
693 {
694 // WhichPaneHasFocus() uses on top.document.commandDispatcher.focusedElement
695 // to determine which pane has focus
696 // if the focusedElement is null, we're here on a blur.
697 // nsFocusController::Blur() calls nsFocusController::SetFocusedElement(null),
698 // which will update any commands listening for "focus".
699 // we really only care about nsFocusController::Focus() happens,
700 // which calls nsFocusController::SetFocusedElement(element)
701 var currentFocusedElement = WhichPaneHasFocus();
702
703 if (currentFocusedElement != gLastFocusedElement) {
704 if (currentFocusedElement)
705 currentFocusedElement.setAttribute("focusring", "true");
706
707 if (gLastFocusedElement)
708 gLastFocusedElement.removeAttribute("focusring");
709
710 gLastFocusedElement = currentFocusedElement;
711
712 // since we just changed the pane with focus we need to update the toolbar to reflect this
713 // XXX TODO
714 // can we optimize
715 // and just update cmd_delete and button_delete?
716 UpdateMailToolbar("focus");
717 }
718 }
719
WhichPaneHasFocus
(1 calls, 321 incl. v-uS, 142 excl. v-uS)
Called: ChromeWindow:top (2 calls, 28 v-uS)
XULDocument:commandDispatcher (2 calls, 24 v-uS)
XULCommandDispatcher:focusedElement (1 calls, 18 v-uS)
XULCommandDispatcher:focusedWindow (1 calls, 29 v-uS)
msgMail3PaneWindow.js:GetFolderTree (1 calls, 7 v-uS)
msgMail3PaneWindow.js:GetMessagePane (1 calls, 7 v-uS)
msgMail3PaneWindow.js:GetMessagePaneFrame (1 calls, 52 v-uS)
threadPane.js:GetThreadTree (1 calls, 8 v-uS)
Called By: mail3PaneWindowCommands.js:FocusRingUpdate_Mail (1 calls, 321 v-uS)
720 function WhichPaneHasFocus()
721 {
722 var threadTree = GetThreadTree();
723 var folderTree = GetFolderTree();
724 var messagePane = GetMessagePane();
725
726 if (top.document.commandDispatcher.focusedWindow == GetMessagePaneFrame())
727 return messagePane;
728
729 var currentNode = top.document.commandDispatcher.focusedElement;
730 while (currentNode) {
731 if (currentNode === threadTree ||
732 currentNode === folderTree ||
733 currentNode === messagePane)
734 return currentNode;
735
736 currentNode = currentNode.parentNode;
737 }
738
739 return null;
740 }
741
SetupCommandUpdateHandlers
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
742 function SetupCommandUpdateHandlers()
743 {
744 var widget;
745
746 // folder pane
747 widget = GetFolderTree();
748 if ( widget )
749 widget.controllers.appendController(FolderPaneController);
750
751 top.controllers.insertControllerAt(0, DefaultController);
752 }
753
IsSendUnsentMsgsEnabled
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
754 function IsSendUnsentMsgsEnabled(folderResource)
755 {
756 var identity;
757
758 if (messenger.sendingUnsentMsgs) // if we're currently sending unsent msgs, disable this cmd.
759 return false;
760 try {
761 if (folderResource) {
762 // if folderResource is non-null, it is
763 // resource for the "Unsent Messages" folder
764 // we're here because we've done a right click on the "Unsent Messages"
765 // folder (context menu)
766 var msgFolder = folderResource.QueryInterface(Components.interfaces.nsIMsgFolder);
767 return (msgFolder.getTotalMessages(false) > 0);
768 }
769 else {
770 var folders = GetSelectedMsgFolders();
771 if (folders.length > 0) {
772 identity = getIdentityForServer(folders[0].server);
773 }
774 }
775 }
776 catch (ex) {
777 dump("ex = " + ex + "\n");
778 identity = null;
779 }
780
781 try {
782 if (!identity) {
783 var am = Components.classes["@mozilla.org/messenger/account-manager;1"].getService(Components.interfaces.nsIMsgAccountManager);
784 identity = am.defaultAccount.defaultIdentity;
785 }
786
787 var msgSendlater = Components.classes["@mozilla.org/messengercompose/sendlater;1"].getService(Components.interfaces.nsIMsgSendLater);
788 var unsentMsgsFolder = msgSendlater.getUnsentMessagesFolder(identity);
789 return (unsentMsgsFolder.getTotalMessages(false) > 0);
790 }
791 catch (ex) {
792 dump("ex = " + ex + "\n");
793 }
794 return false;
795 }
796
IsRenameFolderEnabled
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
797 function IsRenameFolderEnabled()
798 {
799 var folderTree = GetFolderTree();
800 var selection = folderTree.view.selection;
801 if (selection.count == 1)
802 {
803 var startIndex = {};
804 var endIndex = {};
805 selection.getRangeAt(0, startIndex, endIndex);
806 var folderResource = GetFolderResource(folderTree, startIndex.value);
807 var canRename = GetFolderAttribute(folderTree, folderResource, "CanRename") == "true";
808 return canRename && isCommandEnabled("cmd_renameFolder");
809 }
810 else
811 return false;
812 }
813
IsCanSearchMessagesEnabled
(1 calls, 787 incl. v-uS, 43 excl. v-uS)
Called: XPCWrappedNative_NoHelper:canSearchMessages (1 calls, 9 v-uS)
commandglue.js:GetServer (1 calls, 292 v-uS)
widgetglue.js:GetSelectedFolderURI (1 calls, 441 v-uS)
Called By: mail3PaneWindowCommands.js:isCommandEnabled (1 calls, 787 v-uS)
814 function IsCanSearchMessagesEnabled()
815 {
816 var folderURI = GetSelectedFolderURI();
817 if (!folderURI)
818 return false;
819 var server = GetServer(folderURI);
820 return server.canSearchMessages;
821 }
IsFolderCharsetEnabled
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
822 function IsFolderCharsetEnabled()
823 {
824 return IsFolderSelected();
825 }
826
IsPropertiesEnabled
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
827 function IsPropertiesEnabled(command)
828 {
829 try
830 {
831 var folderTree = GetFolderTree();
832 var folderResource = GetSelectedFolderResource();
833
834 // when servers are selected
835 // it should be "Edit | Properties..."
836 if (GetFolderAttribute(folderTree, folderResource, "IsServer") == "true")
837 goSetMenuValue(command, "valueGeneric");
838 else
839 goSetMenuValue(command, isNewsURI(folderResource.Value) ? "valueNewsgroup" : "valueFolder");
840 }
841 catch (ex)
842 {
843 // properties menu failure
844 }
845
846 var selection = folderTree.view.selection;
847 return (selection.count == 1);
848 }
849
IsViewNavigationItemEnabled
(1 calls, 638 incl. v-uS, 16 excl. v-uS)
Called: mail3PaneWindowCommands.js:IsFolderSelected (1 calls, 622 v-uS)
Called By: mail3PaneWindowCommands.js:isCommandEnabled (1 calls, 638 v-uS)
850 function IsViewNavigationItemEnabled()
851 {
852 return IsFolderSelected();
853 }
854
IsFolderSelected
(1 calls, 622 incl. v-uS, 72 excl. v-uS)
Called: ChromeWindow:getRangeAt (1 calls, 27 v-uS)
TreeSelection:count (1 calls, 9 v-uS)
XULTreeBuilder:selection (1 calls, 11 v-uS)
msgMail3PaneWindow.js:GetFolderAttribute (1 calls, 189 v-uS)
msgMail3PaneWindow.js:GetFolderResource (1 calls, 184 v-uS)
msgMail3PaneWindow.js:GetFolderTree (1 calls, 7 v-uS)
tree.xml:!import (1 calls, 120 v-uS)
Called By: mail3PaneWindowCommands.js:IsViewNavigationItemEnabled (1 calls, 622 v-uS)
855 function IsFolderSelected()
856 {
857 var folderTree = GetFolderTree();
858 var selection = folderTree.view.selection;
859 if (selection.count == 1)
860 {
861 var startIndex = {};
862 var endIndex = {};
863 selection.getRangeAt(0, startIndex, endIndex);
864 var folderResource = GetFolderResource(folderTree, startIndex.value);
865 return GetFolderAttribute(folderTree, folderResource, "IsServer") != "true";
866 }
867 else
868 return false;
869 }
870
IsMessageDisplayedInMessagePane
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
871 function IsMessageDisplayedInMessagePane()
872 {
873 return (!IsMessagePaneCollapsed() && (GetNumSelectedMessages() > 0));
874 }
875
MsgDeleteFolder
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
876 function MsgDeleteFolder()
877 {
878 var folderTree = GetFolderTree();
879 var selectedFolders = GetSelectedMsgFolders();
880 for (var i = 0; i < selectedFolders.length; i++)
881 {
882 var selectedFolder = selectedFolders[i];
883 var folderResource = selectedFolder.QueryInterface(Components.interfaces.nsIRDFResource);
884 var specialFolder = GetFolderAttribute(folderTree, folderResource, "SpecialFolder");
885 if (specialFolder != "Inbox" && specialFolder != "Trash")
886 {
887 var parentResource;
888
889 var folder = selectedFolder.QueryInterface(Components.interfaces.nsIMsgFolder);
890 if (folder.flags & MSG_FOLDER_FLAG_VIRTUAL)
891 {
892 if (gCurrentVirtualFolderUri == folderResource.Value)
893 gCurrentVirtualFolderUri = null;
894 parentResource = selectedFolder.parent.QueryInterface(Components.interfaces.nsIRDFResource);
895 messenger.deleteFolders(GetFolderDatasource(), parentResource, folderResource);
896 continue;
897 }
898 var protocolInfo = Components.classes["@mozilla.org/messenger/protocol/info;1?type=" + selectedFolder.server.type].getService(Components.interfaces.nsIMsgProtocolInfo);
899
900 // do not allow deletion of special folders on imap accounts
901 if ((specialFolder == "Sent" ||
902 specialFolder == "Drafts" ||
903 specialFolder == "Templates" ||
904 (specialFolder == "Junk" && !CanRenameDeleteJunkMail(GetSelectedFolderURI()))) &&
905 !protocolInfo.specialFoldersDeletionAllowed)
906 {
907 var errorMessage = gMessengerBundle.getFormattedString("specialFolderDeletionErr",
908 [specialFolder]);
909 var specialFolderDeletionErrTitle = gMessengerBundle.getString("specialFolderDeletionErrTitle");
910 var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
911 .getService(Components.interfaces.nsIPromptService);
912
913 promptService.alert(window, specialFolderDeletionErrTitle, errorMessage);
914 continue;
915 }
916 else if (isNewsURI(folderResource.Value))
917 {
918 var unsubscribe = ConfirmUnsubscribe(selectedFolder);
919 if (unsubscribe)
920 UnSubscribe(selectedFolder);
921 }
922 else
923 {
924 parentResource = selectedFolder.parent.QueryInterface(Components.interfaces.nsIRDFResource);
925 messenger.deleteFolders(GetFolderDatasource(), parentResource, folderResource);
926 }
927 }
928 }
929 }
930
SetFocusThreadPaneIfNotOnMessagePane
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
931 function SetFocusThreadPaneIfNotOnMessagePane()
932 {
933 var focusedElement = WhichPaneHasFocus();
934
935 if((focusedElement != GetThreadTree()) &&
936 (focusedElement != GetMessagePane()))
937 SetFocusThreadPane();
938 }
939
940 // 3pane related commands. Need to go in own file. Putting here for the moment.
MsgNextMessage
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
941 function MsgNextMessage()
942 {
943 GoNextMessage(nsMsgNavigationType.nextMessage, false );
944 }
945
MsgNextUnreadMessage
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
946 function MsgNextUnreadMessage()
947 {
948 GoNextMessage(nsMsgNavigationType.nextUnreadMessage, true);
949 }
MsgNextFlaggedMessage
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
950 function MsgNextFlaggedMessage()
951 {
952 GoNextMessage(nsMsgNavigationType.nextFlagged, true);
953 }
954
MsgNextUnreadThread
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
955 function MsgNextUnreadThread()
956 {
957 GoNextMessage(nsMsgNavigationType.nextUnreadThread, true);
958 }
959
MsgPreviousMessage
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
960 function MsgPreviousMessage()
961 {
962 GoNextMessage(nsMsgNavigationType.previousMessage, false);
963 }
964
MsgPreviousUnreadMessage
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
965 function MsgPreviousUnreadMessage()
966 {
967 GoNextMessage(nsMsgNavigationType.previousUnreadMessage, true);
968 }
969
MsgPreviousFlaggedMessage
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
970 function MsgPreviousFlaggedMessage()
971 {
972 GoNextMessage(nsMsgNavigationType.previousFlagged, true);
973 }
974
MsgGoForward
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
975 function MsgGoForward()
976 {
977 GoNextMessage(nsMsgNavigationType.forward, true);
978 }
979
MsgGoBack
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
980 function MsgGoBack()
981 {
982 GoNextMessage(nsMsgNavigationType.back, true);
983 }
984
GetFolderNameFromUri
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
985 function GetFolderNameFromUri(uri, tree)
986 {
987 var folderResource = RDF.GetResource(uri);
988
989 var db = tree.database;
990
991 var nameProperty = RDF.GetResource('http://home.netscape.com/NC-rdf#Name');
992
993 var nameResult;
994 try {
995 nameResult = db.GetTarget(folderResource, nameProperty , true);
996 }
997 catch (ex) {
998 return "";
999 }
1000
1001 nameResult = nameResult.QueryInterface(Components.interfaces.nsIRDFLiteral);
1002 return nameResult.Value;
1003 }
1004
SwitchPaneFocus
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
1005 function SwitchPaneFocus(event)
1006 {
1007 var folderTree = GetFolderTree();
1008 var threadTree = GetThreadTree();
1009 var messagePane = GetMessagePane();
1010
1011 var focusedElement = WhichPaneHasFocus();
1012 if (focusedElement == null) // focus not on one of the main three panes (probably toolbar)
1013 focusedElement = threadTree; // treat as if on thread tree
1014
1015 if (event && event.shiftKey)
1016 {
1017 // Reverse traversal: Message -> Thread -> Folder -> Message
1018 if (focusedElement == threadTree && !IsFolderPaneCollapsed())
1019 folderTree.focus();
1020 else if (focusedElement != messagePane && !IsMessagePaneCollapsed())
1021 SetFocusMessagePane();
1022 else
1023 threadTree.focus();
1024 }
1025 else
1026 {
1027 // Forward traversal: Folder -> Thread -> Message -> Folder
1028 if (focusedElement == threadTree && !IsMessagePaneCollapsed())
1029 SetFocusMessagePane();
1030 else if (focusedElement != folderTree && !IsFolderPaneCollapsed())
1031 folderTree.focus();
1032 else
1033 threadTree.focus();
1034 }
1035 }
1036
SetFocusThreadPane
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
1037 function SetFocusThreadPane()
1038 {
1039 var threadTree = GetThreadTree();
1040 threadTree.focus();
1041 }
1042
SetFocusMessagePane
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
1043 function SetFocusMessagePane()
1044 {
1045 // messagePaneFrame.focus() fails to blur the currently focused element
1046 document.commandDispatcher.advanceFocusIntoSubtree(GetMessagePane());
1047 }
1048
isCommandEnabled
(3 calls, 2123 incl. v-uS, 72 excl. v-uS)
Called: ChromeWindow:isCommandEnabled (3 calls, 83 v-uS)
msgMail3PaneWindow.js:GetSelectedMsgFolders (3 calls, 1966 v-uS)
Called By: mail3PaneWindowCommands.js:isCommandEnabled (2 calls, 1422 v-uS)
mailWindowOverlay.js:IsCompactFolderEnabled (1 calls, 700 v-uS)
1049 function isCommandEnabled(cmd)
1050 {
1051 var selectedFolders = GetSelectedMsgFolders();
1052 var numFolders = selectedFolders.length;
1053 if(numFolders !=1)
1054 return false;
1055
1056 var folder = selectedFolders[0];
1057 if (!folder)
1058 return false;
1059 else
1060 return folder.isCommandEnabled(cmd);
1061
1062 }
1063
1064 //
1065 // This function checks if the configured junk mail can be renamed or deleted.
1066 //
CanRenameDeleteJunkMail
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
1067 function CanRenameDeleteJunkMail(aFolderUri)
1068 {
1069 if (!aFolderUri)
1070 return false;
1071
1072 // Go through junk mail settings for all servers and see if the folder is set/used by anyone.
1073 try
1074 {
1075 var allServers = accountManager.allServers;
1076
1077 for (var i=0;i<allServers.Count();i++)
1078 {
1079 var currentServer = allServers.GetElementAt(i).QueryInterface(Components.interfaces.nsIMsgIncomingServer);
1080 var settings = currentServer.spamSettings;
1081 // If junk mail control or move junk mail to folder option is disabled then
1082 // allow the folder to be removed/renamed since the folder is not used in this case.
1083 if (!settings.level || !settings.moveOnSpam)
1084 continue;
1085 if (settings.spamFolderURI == aFolderUri)
1086 return false;
1087 }
1088 }
1089 catch(ex)
1090 {
1091 dump("Can't get all servers\n");
1092 }
1093 return true;
1094 }