home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / mozil06.zip / bin / chrome / messenger.jar / content / messenger / threadPane.js < prev    next >
Text File  |  2001-02-14  |  8KB  |  269 lines

  1. /* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  2.  * The contents of this file are subject to the Netscape Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/NPL/
  6.  * 
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  * 
  12.  * The Original Code is Mozilla Communicator client code, released
  13.  * March 31, 1998.
  14.  * 
  15.  * The Initial Developer of the Original Code is Netscape
  16.  * Communications Corporation. Portions created by Netscape are
  17.  * Copyright (C) 1998-1999 Netscape Communications Corporation. All
  18.  * Rights Reserved.
  19.  */
  20.  
  21. var gOldNumSelected = 0;
  22. function ThreadPaneOnClick(event)
  23. {
  24.   var t = event.originalTarget;
  25.  
  26.     if (t.localName != "treecell" &&
  27.         t.localName != "treeitem" &&
  28.         t.localName != "image")
  29.         return;
  30.  
  31.   var targetclass = "";
  32.  
  33.     if (t.localName == "image" && (t.getAttribute('twisty') != 'true'))
  34.       targetclass = t.parentNode.getAttribute('class');
  35.  
  36.     //dump('targetclass = ' + targetclass + '\n');
  37.  
  38.     if(targetclass.indexOf('unreadcol') != -1)
  39.     {
  40.         ToggleMessageRead(t.parentNode.parentNode.parentNode);
  41.     }
  42.     if(targetclass.indexOf('flagcol') != -1)
  43.     {
  44.         ToggleMessageFlagged(t.parentNode.parentNode.parentNode);
  45.     }
  46.     else if (t.getAttribute('twisty') == 'true') {
  47.         // The twisty is nested three below the treeitem:
  48.         // <treeitem>
  49.         //   <treerow>
  50.         //     <treecell>
  51.         //         <titledbutton class="tree-cell-twisty"> <!-- anonymous -->
  52.         var treeitem = t.parentNode.parentNode.parentNode;
  53.         var open = treeitem.getAttribute('open');
  54.         if(open == "true")
  55.         {
  56.             //open all of the children of the treeitem
  57.             msgNavigationService.OpenTreeitemAndDescendants(treeitem);
  58.         }
  59.     }
  60.     else if(event.detail == 2)
  61.     {
  62.         ThreadPaneDoubleClick(t.parentNode.parentNode,true);
  63.     }
  64. }
  65.  
  66. function ThreadPaneDoubleClick(treeitem,isClick)
  67. {
  68.     if(IsSpecialFolderSelected("Drafts"))
  69.     {
  70.         var loadedFolder = GetLoadedMsgFolder();
  71.         var messageArray = GetSelectedMessages();
  72.  
  73.         ComposeMessage(msgComposeType.Draft, msgComposeFormat.Default, loadedFolder, messageArray);
  74.     }
  75.     else if(IsSpecialFolderSelected("Templates"))
  76.     {
  77.         var loadedFolder = GetLoadedMsgFolder();
  78.         var messageArray = GetSelectedMessages();
  79.         ComposeMessage(msgComposeType.Template, msgComposeFormat.Default, loadedFolder, messageArray);
  80.     }
  81.     else if(isClick)
  82.     {
  83.         var messageUri = treeitem.getAttribute("id");
  84.         MsgOpenNewWindowForMessage(messageUri, null);
  85.     }
  86.     else
  87.     {
  88.         var threadTree = GetThreadTree();
  89.         var selectedMessages = threadTree.selectedItems;
  90.         var numMessages = selectedMessages.length;
  91.  
  92.         for(var i = 0; i < numMessages; i++)
  93.         {
  94.             var messageNode = selectedMessages[i];
  95.             var messageUri = messageNode.getAttribute("id");
  96.             if(messageUri)
  97.             {
  98.                 MsgOpenNewWindowForMessage(messageUri, null);
  99.             }
  100.         }
  101.     }
  102. }
  103.  
  104. function ThreadPaneKeyPress(event)
  105. {
  106.   if (event.keyCode == 13)
  107.     ThreadPaneDoubleClick(null,false);
  108.   return;
  109. }
  110.  
  111. function MsgSortByDate()
  112. {
  113.     SortThreadPane('DateColumn', 'http://home.netscape.com/NC-rdf#Date', null, true, null, true);
  114. }
  115.  
  116. function MsgSortBySender()
  117. {
  118.     SortThreadPane('AuthorColumn', 'http://home.netscape.com/NC-rdf#Sender', 'http://home.netscape.com/NC-rdf#Date', true, null, true);
  119. }
  120.  
  121. function MsgSortByRecipient()
  122. {
  123.     SortThreadPane('AuthorColumn', 'http://home.netscape.com/NC-rdf#Recipient', 'http://home.netscape.com/NC-rdf#Date', true, null, true);
  124. }
  125.  
  126. function MsgSortByStatus()
  127. {
  128.     SortThreadPane('StatusColumn', 'http://home.netscape.com/NC-rdf#Status', 'http://home.netscape.com/NC-rdf#Date', true, null, true);
  129. }
  130.  
  131. function MsgSortBySubject()
  132. {
  133.     SortThreadPane('SubjectColumn', 'http://home.netscape.com/NC-rdf#Subject', 'http://home.netscape.com/NC-rdf#Date', true, null, true);
  134. }
  135.  
  136. function MsgSortByFlagged() 
  137. {
  138.     SortThreadPane('FlaggedButtonColumn', 'http://home.netscape.com/NC-rdf#Flagged', 'http://home.netscape.com/NC-rdf#Date', true, null, true);
  139. }
  140.  
  141. function MsgSortByPriority()
  142. {
  143.     SortThreadPane('PriorityColumn', 'http://home.netscape.com/NC-rdf#Priority', 'http://home.netscape.com/NC-rdf#Date',true, null, true);
  144. }
  145.  
  146. function MsgSortBySize() 
  147. {
  148.     SortThreadPane('SizeColumn', 'http://home.netscape.com/NC-rdf#Size', 'http://home.netscape.com/NC-rdf#Date', true, null, true);
  149. }
  150.  
  151. function MsgSortByUnread()
  152. {
  153.     SortThreadPane('UnreadColumn', 'http://home.netscape.com/NC-rdf#TotalUnreadMessages','http://home.netscape.com/NC-rdf#Date', true, null, true);
  154. }
  155.  
  156. function MsgSortByOrderReceived()
  157. {
  158.     SortThreadPane('OrderReceivedColumn', 'http://home.netscape.com/NC-rdf#OrderReceived','http://home.netscape.com/NC-rdf#Date', true, null, true);
  159. }
  160.  
  161. function MsgSortByRead()
  162. {
  163.     SortThreadPane('UnreadButtonColumn', 'http://home.netscape.com/NC-rdf#IsUnread','http://home.netscape.com/NC-rdf#Date', true, null,true);
  164. }
  165.  
  166. function MsgSortByTotal()
  167. {
  168.     SortThreadPane('TotalColumn', 'http://home.netscape.com/NC-rdf#TotalMessages', 'http://home.netscape.com/NC-rdf#Date', true, null, true);
  169. }
  170.  
  171. function MsgSortByThread()
  172. {
  173.     ChangeThreadView()
  174. }
  175.  
  176. function ChangeThreadView()
  177. {
  178.    var folder = GetSelectedFolder();
  179.  
  180.     var threadColumn = document.getElementById('ThreadColumnHeader');
  181.     if(threadColumn)
  182.     {
  183.         var currentView = threadColumn.getAttribute('currentView');
  184.         if(currentView== 'threaded')
  185.         {
  186.             ShowThreads(false);
  187.             if(folder)
  188.                 folder.setAttribute('threaded', "");
  189.             SetTemplateTreeItemOpen(false);
  190.         }
  191.         else if(currentView == 'unthreaded')
  192.         {
  193.               //if we're in unread messages view, don't allow to go into threaded mode because
  194.               //we don't support it.
  195.               if(messageView.viewType == viewShowUnread)
  196.                   return;
  197.  
  198.             ShowThreads(true);
  199.             if(folder)
  200.                 folder.setAttribute('threaded', "true");
  201.         }
  202.         RefreshThreadTreeView();
  203.     }
  204. }
  205.  
  206. function IsSpecialFolderSelected(folderName)
  207. {
  208.     var selectedFolder = GetThreadTreeFolder();
  209.     var id = selectedFolder.getAttribute('ref');
  210.     var folderResource = RDF.GetResource(id);
  211.     if(!folderResource)
  212.         return false;
  213.  
  214.     var db = GetFolderDatasource();
  215.  
  216.     var property =
  217.         RDF.GetResource('http://home.netscape.com/NC-rdf#SpecialFolder');
  218.     if (!property) return false;
  219.     var result = db.GetTarget(folderResource, property , true);
  220.     if (!result) return false;
  221.     result = result.QueryInterface(Components.interfaces.nsIRDFLiteral);
  222.     if (!result) return false;
  223.     if(result.Value == folderName)
  224.         return true;
  225.  
  226.     return false;
  227. }
  228.  
  229. //Called when selection changes in the thread pane.
  230. function ThreadPaneSelectionChange()
  231. {
  232.     var collapsed = IsThreadAndMessagePaneSplitterCollapsed();
  233.  
  234.     if(!collapsed)
  235.     {
  236.         LoadSelectionIntoMessagePane();
  237.         
  238.     }
  239.  
  240.     var tree = GetThreadTree();
  241.     var selectedMessages = tree.selectedItems;
  242.     var numSelected = selectedMessages.length;
  243.     //If the current selected is 1 or 0 then we know that a change has taken place that might
  244.     //cause us to send out threadTree update notifications. We also care about this if the previous
  245.     //numSelected was 0 or 1 because we might be involved in something like a SelectAll where we won't
  246.     //get notified about the change from 0 to 1.
  247.     if(numSelected == 0 || numSelected == 1 || gOldNumSelected == 0 || gOldNumSelected == 1)
  248.     {
  249.         document.commandDispatcher.updateCommands('threadTree-select');
  250.     }
  251.     //Store the current number selected.
  252.     gOldNumSelected = numSelected;
  253. }
  254.  
  255. function GetThreadTree()
  256. {
  257.     if (gThreadTree) return gThreadTree;
  258.     var threadTree = document.getElementById('threadTree');
  259.     gThreadTree = threadTree;
  260.     return threadTree;
  261. }
  262.  
  263. function GetThreadTreeFolder()
  264. {
  265.   var tree = GetThreadTree();
  266.   return tree;
  267. }
  268.  
  269.