abcontactspanel.js

来自「现在很火的邮件客户端软件thunderbird的源码」· JavaScript 代码 · 共 226 行

JS
226
字号
/* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is Mozilla addressbook. * * The Initial Developer of the Original Code is * Seth Spitzer <sspitzer@netscape.com>. * Portions created by the Initial Developer are Copyright (C) 2001 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */var gAddressBookBundle;function GetAbViewListener(){  // the ab panel doesn't care if the total changes, or if the selection changes  return null;}function contactsListDoubleClick(event){  // we only care about button 0 (left click) events  if (event.button != 0)    return;  var contactsTree = document.getElementById("abResultsTree");  var row = contactsTree.treeBoxObject.getRowAt(event.clientX, event.clientY);  if (row == -1 || row > contactsTree.view.rowCount-1 || event.originalTarget.localName != "treechildren")   {    // double clicking on a non valid row should not open the edit filter dialog    return;  }  // ok, go ahead and add the entry  addSelectedAddresses('addr_to');  }function addSelectedAddresses(recipientType){  var cards = GetSelectedAbCards();  var count = cards.length;   for (var i = 0; i < count; i++)   {    // turn each card into a properly formatted address     var address = GenerateAddressFromCard(cards[i]);    if (address != "")      parent.AddRecipient(recipientType, address);       }}var gAddressBookPanelAbListener = {  onItemAdded: function(parentDir, item) {    // will not be called  },  onItemRemoved: function(parentDir, item) {    // will only be called when an addressbook is deleted    try {      var directory = item.QueryInterface(Components.interfaces.nsIAbDirectory);      // check if the item being removed is the directory      // that we are showing in the addressbook sidebar      // if so, select the person addressbook (it can't be removed)      if (directory == GetAbView().directory) {          var abPopup = document.getElementById('addressbookList');          abPopup.value = kPersonalAddressbookURI;          LoadPreviouslySelectedAB();      }     }    catch (ex) {    }  },  onItemPropertyChanged: function(item, property, oldValue, newValue) {    try {      var directory = item.QueryInterface(Components.interfaces.nsIAbDirectory);      // check if the item being changed is the directory      // that we are showing in the addressbook sidebar      if (directory == GetAbView().directory) {          LoadPreviouslySelectedAB();      }    }    catch (ex) {    }  }};// XXX todo// can we combine some common code?  see OnLoadNewMailList()// set popup with address book namesfunction LoadPreviouslySelectedAB(){  var abPopup = document.getElementById('addressbookList');  var value = abPopup.value || kPersonalAddressbookURI;  abPopup.selectedItem = null;  abPopup.value = value;  ChangeDirectoryByURI(abPopup.selectedItem.id);}function AddressBookMenuListChange(){  if (gSearchInput.value && !gSearchInput.showingSearchCriteria)     onEnterInSearchBar();  else   {    var abPopup = document.getElementById('addressbookList');    ChangeDirectoryByURI(abPopup.selectedItem.id);  }}function AbPanelOnComposerClose(){  CloseAbView();  onClearSearch();}function AbPanelOnComposerReOpen(){  SetAbView(GetSelectedDirectory(), true);}function AbPanelLoad() {  InitCommonJS();  gAddressBookBundle = document.getElementById("bundle_addressBook");  LoadPreviouslySelectedAB();  // add a listener, so we can switch directories if  // the current directory is deleted, and change the name if the  // selected directory's name is modified  var addrbookSession = Components.classes["@mozilla.org/addressbook/services/session;1"].getService().QueryInterface(Components.interfaces.nsIAddrBookSession);  // this listener only cares when a directory is removed or modified  addrbookSession.addAddressBookListener(    gAddressBookPanelAbListener,    Components.interfaces.nsIAddrBookSession.directoryRemoved |    Components.interfaces.nsIAddrBookSession.changed);    parent.document.getElementById("msgcomposeWindow").addEventListener('compose-window-close', AbPanelOnComposerClose, true);  parent.document.getElementById("msgcomposeWindow").addEventListener('compose-window-reopen', AbPanelOnComposerReOpen, true);  gSearchInput = document.getElementById("searchInput");}function AbPanelUnload(){  var addrbookSession = Components.classes["@mozilla.org/addressbook/services/session;1"].getService().QueryInterface(Components.interfaces.nsIAddrBookSession);  addrbookSession.removeAddressBookListener(gAddressBookPanelAbListener);  parent.document.getElementById("msgcomposeWindow").removeEventListener('compose-window-close', AbPanelOnComposerClose, true);  parent.document.getElementById("msgcomposeWindow").removeEventListener('compose-window-reopen', AbPanelOnComposerReOpen, true);  CloseAbView();}function AbPanelNewCard() {  goNewCardDialog(abList.selectedItem.getAttribute('id'));}function AbPanelNewList() {  goNewListDialog(abList.selectedItem.getAttribute('id'));}function ResultsPaneSelectionChanged() {  // do nothing for ab panel}function OnClickedCard() {  // do nothing for ab panel}function AbResultsPaneDoubleClick(card) {  // double click for ab panel means "send mail to this person / list"  AbNewMessage();}function UpdateCardView() {  // do nothing for ab panel}function onEnterInSearchBar(){  if (!gQueryURIFormat)     gQueryURIFormat = gPrefs.getComplexValue("mail.addr_book.quicksearchquery.format",                                               Components.interfaces.nsIPrefLocalizedString).data;   var sortColumn = gAbResultsTree.getAttribute("sortCol");  var sortDirection = document.getElementById(sortColumn).getAttribute("sortDirection");  var searchURI = GetSelectedDirectory();  if (gSearchInput.value != "")    searchURI += gQueryURIFormat.replace(/@V/g, encodeURIComponent(gSearchInput.value));  SetAbView(searchURI, true, sortColumn, sortDirection);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?