abcommon.js
来自「现在很火的邮件客户端软件thunderbird的源码」· JavaScript 代码 · 共 1,318 行 · 第 1/3 页
JS
1,318 行
else composeFields.to = GetSelectedAddresses(); params.composeFields = composeFields; msgComposeService.OpenComposeWindowWithParams(null, params); } }}function GetOneOrMoreCardsSelected(){ if (!gAbView) return false; return (gAbView.selection.getRangeCount() > 0);}// XXX todo// could this be moved into utilityOverlay.js?function goToggleSplitter( id, elementID ){ var splitter = document.getElementById( id ); var element = document.getElementById( elementID ); if ( splitter ) { var attribValue = splitter.getAttribute("state") ; if ( attribValue == "collapsed" ) { splitter.setAttribute("state", "open" ); if ( element ) element.setAttribute("checked","true") } else { splitter.setAttribute("state", "collapsed"); if ( element ) element.setAttribute("checked","false") } document.persist(id, 'state'); document.persist(elementID, 'checked'); }}// Generate a list of cards from the selected mailing list // and get a comma separated list of card addresses. If the// item selected in the directory pane is not a mailing list,// an empty string is returned. function GetSelectedAddressesFromDirTree() { var addresses = ""; if (dirTree.currentIndex >= 0) { var selectedResource = dirTree.builderView.getResourceAtIndex(dirTree.currentIndex); var mailingListUri = selectedResource.Value; var directory = GetDirectoryFromURI(mailingListUri); if (directory.isMailList) { var listCardsCount = directory.addressLists.Count(); var cards = new Array(listCardsCount); for ( var i = 0; i < listCardsCount; i++ ) { var card = directory.addressLists.GetElementAt(i); card = card.QueryInterface(Components.interfaces.nsIAbCard); cards[i] = card; } addresses = GetAddressesForCards(cards); } } return addresses;}function GetSelectedAddresses(){ var selectedCards = GetSelectedAbCards(); return GetAddressesForCards(selectedCards);}// Generate a comma separated list of addresses from a given// set of cards.function GetAddressesForCards(cards){ var addresses = ""; if (!cards) return addresses; var count = cards.length; if (count > 0) addresses += GenerateAddressFromCard(cards[0]); for (var i = 1; i < count; i++) { var generatedAddress = GenerateAddressFromCard(cards[i]); if (generatedAddress) addresses += "," + generatedAddress; } return addresses;}function GetNumSelectedCards(){ try { var treeSelection = gAbView.selection; return treeSelection.count; } catch (ex) { } // if something went wrong, return 0 for the count. return 0;}// XXX todo// an optimization might be to make this return // the selected ranges, which would be faster// when the user does large selections, but for now, let's keep it simple.function GetSelectedRows(){ var selectedRows = ""; if (!gAbView) return selectedRows; var i,j; var rangeCount = gAbView.selection.getRangeCount(); var current = 0; for (i=0; i < rangeCount; i++) { var start = new Object; var end = new Object; gAbView.selection.getRangeAt(i,start,end); for (j=start.value;j<=end.value;j++) { if (selectedRows) selectedRows += ","; selectedRows += j; } } return selectedRows;}function GetSelectedAbCards(){ var abView = gAbView; // if sidebar is open, and addressbook panel is open and focused, // then use the ab view from sidebar (gCurFrame is from sidebarOverlay.js) const abPanelUrl = "chrome://messenger/content/addressbook/addressbook-panel.xul"; if (document.getElementById("sidebar-box")) { if (gCurFrame && gCurFrame.getAttribute("src") == abPanelUrl && document.commandDispatcher.focusedWindow == gCurFrame.contentDocument.defaultView) { abView = gCurFrame.contentDocument.defaultView.gAbView; } } if (!abView) return null; var cards = new Array(abView.selection.count); var i,j; var count = abView.selection.getRangeCount(); var current = 0; for (i=0; i < count; i++) { var start = new Object; var end = new Object; abView.selection.getRangeAt(i,start,end); for (j=start.value;j<=end.value;j++) { cards[current] = abView.getCardFromRow(j); current++; } } return cards;}function SelectFirstAddressBook(){ dirTree.view.selection.select(0); ChangeDirectoryByURI(GetSelectedDirectory()); gAbResultsTree.focus(); }function SelectFirstCard(){ if (gAbView && gAbView.selection) { gAbView.selection.select(0); }}function DirPaneClick(event){ // we only care about left button events if (event.button != 0) return; // if the user clicks on the header / trecol, do nothing if (event.originalTarget.localName == "treecol") { event.stopPropagation(); return; }}function DirPaneDoubleClick(event){ // we only care about left button events if (event.button != 0) return; var row = dirTree.treeBoxObject.getRowAt(event.clientX, event.clientY); if (row == -1 || row > dirTree.view.rowCount-1) { // double clicking on a non valid row should not open the dir properties dialog return; } if (dirTree && dirTree.view.selection && dirTree.view.selection.count == 1) AbEditSelectedDirectory();}function DirPaneSelectionChange(){ // clear out the search box when changing folders... onClearSearch(); if (dirTree && dirTree.view.selection && dirTree.view.selection.count == 1) { gPreviousDirTreeIndex = dirTree.currentIndex; ChangeDirectoryByURI(GetSelectedDirectory()); }}function GetAbResultsBoxObject(){ if (!gAbResultsTree) gAbResultsTree = document.getElementById('abResultsTree'); return gAbResultsTree.treeBoxObject;}function CloseAbView(){ var boxObject = GetAbResultsBoxObject(); boxObject.view = null; if (gAbView) { gAbView.close(); gAbView = null; }}function SetAbView(uri, searchView, sortColumn, sortDirection){ var actualSortColumn; // make sure sortColumn and sortDirection have non null values before calling gAbView.init if (!sortColumn) sortColumn = kDefaultSortColumn; if (!sortDirection) sortDirection = kDefaultAscending; if (gAbView && gCurDirectory == GetSelectedDirectory()) { // re-init the view actualSortColumn = gAbView.init(uri, searchView, GetAbViewListener(), sortColumn, sortDirection); } else { CloseAbView(); gCurDirectory = GetSelectedDirectory(); gAbView = Components.classes["@mozilla.org/addressbook/abview;1"].createInstance(Components.interfaces.nsIAbView); actualSortColumn = gAbView.init(uri, searchView, GetAbViewListener(), sortColumn, sortDirection); } var boxObject = GetAbResultsBoxObject(); boxObject.view = gAbView.QueryInterface(Components.interfaces.nsITreeView); UpdateSortIndicators(sortColumn, sortDirection); return actualSortColumn;}function GetAbView(){ return gAbView;}// this will return the complete search uri if a quick search is currently being // done. to get the uri of the directory only, use GetSelectedDirectory().function GetAbViewURI(){ if (gAbView) return gAbView.URI; else return null;}function ChangeDirectoryByURI(uri){ if (!uri) uri = kPersonalAddressbookURI; if (gAbView && GetAbViewURI() == uri) return; var sortColumn = gAbResultsTree.getAttribute("sortCol"); var sortDirection = document.getElementById(sortColumn).getAttribute("sortDirection"); var actualSortColumn = SetAbView(uri, false, sortColumn, sortDirection); UpdateSortIndicators(actualSortColumn, sortDirection); // only select the first card if there is a first card if (gAbView && gAbView.getCardFromRow(0)) { SelectFirstCard(); } else { // the selection changes if we were switching directories. ResultsPaneSelectionChanged() } return;}function AbSortAscending(){ var sortColumn = gAbResultsTree.getAttribute("sortCol"); SortAndUpdateIndicators(sortColumn, kDefaultAscending);}function AbSortDescending(){ var sortColumn = gAbResultsTree.getAttribute("sortCol"); SortAndUpdateIndicators(sortColumn, kDefaultDescending);}function SortResultPane(sortColumn){ var sortDirection = kDefaultAscending; if (gAbView) { sortDirection = gAbView.sortDirection; } SortAndUpdateIndicators(sortColumn, sortDirection);}function SortAndUpdateIndicators(sortColumn, sortDirection){ // XXX todo remove once #116341 is fixed if (!sortColumn) return; UpdateSortIndicators(sortColumn, sortDirection); if (gAbView) gAbView.sortBy(sortColumn, sortDirection);}function UpdateSortIndicators(colID, sortDirection){ var sortedColumn; // set the sort indicator on the column we are sorted by if (colID) { sortedColumn = document.getElementById(colID); if (sortedColumn) { sortedColumn.setAttribute("sortDirection",sortDirection); gAbResultsTree.setAttribute("sortCol", colID); } } // remove the sort indicator from all the columns // except the one we are sorted by var currCol = gAbResultsTree.firstChild.firstChild; while (currCol) { if (currCol != sortedColumn && currCol.localName == "treecol") currCol.removeAttribute("sortDirection"); currCol = currCol.nextSibling; }}function InvalidateResultsPane(){ if (gAbResultsTree) gAbResultsTree.treeBoxObject.invalidate();}function AbNewList(abListItem){ goNewListDialog(GetSelectedDirectory());}function goNewListDialog(selectedAB){ window.openDialog("chrome://messenger/content/addressbook/abMailListDialog.xul", "", "chrome,resizable=no,titlebar,modal,centerscreen", {selectedAB:selectedAB});}function goEditListDialog(abURI, abCard, listURI, okCallback){ window.openDialog("chrome://messenger/content/addressbook/abEditListDialog.xul", "", "chrome,resizable=no,titlebar,modal,centerscreen", {abURI:abURI, abCard:abCard, listURI:listURI, okCallback:okCallback});}function goNewCardDialog(selectedAB){ window.openDialog("chrome://messenger/content/addressbook/abNewCardDialog.xul", "", "chrome,resizable=no,titlebar,modal,centerscreen", {selectedAB:selectedAB});}function goEditCardDialog(abURI, card, okCallback){ window.openDialog("chrome://messenger/content/addressbook/abEditCardDialog.xul", "", "chrome,resizable=no,modal,titlebar,centerscreen", {abURI:abURI, card:card, okCallback:okCallback});}function setSortByMenuItemCheckState(id, value){ var menuitem = document.getElementById(id); if (menuitem) { menuitem.setAttribute("checked", value); }}function InitViewSortByMenu(){ var sortColumn = kDefaultSortColumn; var sortDirection = kDefaultAscending; if (gAbView) { sortColumn = gAbView.sortColumn; sortDirection = gAbView.sortDirection;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?