?? filterlistdialog.js
字號:
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- * ***** 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 Communicator client code, released * March 31, 1998. * * The Initial Developer of the Original Code is * Netscape Communications Corporation. * Portions created by the Initial Developer are Copyright (C) 1998-1999 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Mark Banner <mark@standard8.demon.co.uk> * * Alternatively, the contents of this file may be used under the terms of * either of 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 ***** */const MSG_FOLDER_FLAG_INBOX = 0x1000var gRDF = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService);var gEditButton;var gDeleteButton;var gReorderUpButton;var gReorderDownButton;var gRunFiltersFolderPickerLabel;var gRunFiltersFolderPicker;var gRunFiltersButton;var gFilterBundle;var gPromptService = GetPromptService();var gFilterListMsgWindow = null;var gFilterTree;var gStatusBar;var gStatusText;var gCurrentServerURI = null;var gStatusFeedback = { progressMeterVisible : false, showStatusString: function(status) { gStatusText.setAttribute("value", status); }, startMeteors: function() { // change run button to be a stop button gRunFiltersButton.setAttribute("label", gRunFiltersButton.getAttribute("stoplabel")); gRunFiltersButton.setAttribute("accesskey", gRunFiltersButton.getAttribute("stopaccesskey")); if (!this.progressMeterVisible) { document.getElementById('statusbar-progresspanel').removeAttribute('collapsed'); this.progressMeterVisible = true; } gStatusBar.setAttribute("mode", "undetermined"); }, stopMeteors: function() { try { // change run button to be a stop button gRunFiltersButton.setAttribute("label", gRunFiltersButton.getAttribute("runlabel")); gRunFiltersButton.setAttribute("accesskey", gRunFiltersButton.getAttribute("runaccesskey")); gStatusBar.setAttribute("mode", "normal"); if (this.progressMeterVisible) { document.getElementById('statusbar-progresspanel').collapsed = true; this.progressMeterVisible = true; } } catch (ex) { // can get here if closing window when running filters } }, showProgress: function(percentage) { //dump("XXX progress" + percentage + "\n"); }, closeWindow: function() { }};const nsMsgFilterMotion = Components.interfaces.nsMsgFilterMotion;function onLoad(){ gFilterListMsgWindow = Components.classes["@mozilla.org/messenger/msgwindow;1"].createInstance(Components.interfaces.nsIMsgWindow); gFilterListMsgWindow.statusFeedback = gStatusFeedback; gFilterListMsgWindow.SetDOMWindow(window); gFilterBundle = document.getElementById("bundle_filter"); gFilterTree = document.getElementById("filterTree"); gEditButton = document.getElementById("editButton"); gDeleteButton = document.getElementById("deleteButton"); gReorderUpButton = document.getElementById("reorderUpButton"); gReorderDownButton = document.getElementById("reorderDownButton"); gRunFiltersFolderPickerLabel = document.getElementById("folderPickerPrefix"); gRunFiltersFolderPicker = document.getElementById("runFiltersFolder"); gRunFiltersButton = document.getElementById("runFiltersButton"); gStatusBar = document.getElementById("statusbar-icon"); gStatusText = document.getElementById("statusText"); updateButtons(); // get the selected server if it can have filters. var firstItem = getSelectedServerForFilters(); // if the selected server cannot have filters, get the default server // if the default server cannot have filters, check all accounts // and get a server that can have filters. if (!firstItem) firstItem = getServerThatCanHaveFilters(); if (firstItem) { selectServer(firstItem); } gFilterTree.addEventListener("click",onFilterClick,true);}/*function onCancel(){ var firstItem = getSelectedServerForFilters(); if (!firstItem) firstItem = getServerThatCanHaveFilters(); if (firstItem) { var resource = gRDF.GetResource(firstItem); var msgFolder = resource.QueryInterface(Components.interfaces.nsIMsgFolder); if (msgFolder) { msgFolder.ReleaseDelegate("filter"); msgFolder.setFilterList(null); try { //now find Inbox var outNumFolders = new Object(); var inboxFolder = msgFolder.getFoldersWithFlag(0x1000, 1, outNumFolders); inboxFolder.setFilterList(null); } catch(ex) { dump ("ex " +ex + "\n"); } } } window.close();}*/function onFilterServerClick(selection){ var itemURI = selection.getAttribute('id'); if (!itemURI || itemURI == gCurrentServerURI) return; // Save the current filters to disk before switching because // the dialog may be closed and we'll lose current filters. var filterList = currentFilterList(); if (filterList) filterList.saveToDefaultFile(); selectServer(itemURI);}function CanRunFiltersAfterTheFact(aServer){ // can't manually run news filters yet if (aServer.type == "nntp") return false; // filter after the fact is implement using search // so if you can't search, you can't filter after the fact return aServer.canSearchMessages;}// roots the tree at the specified serverfunction setServer(uri){ if (uri == gCurrentServerURI) return; var resource = gRDF.GetResource(uri); var msgFolder = resource.QueryInterface(Components.interfaces.nsIMsgFolder); //Calling getFilterList will detect any errors in rules.dat, backup the file, and alert the user //we need to do this because gFilterTree.setAttribute will cause rdf to call getFilterList and there is //no way to pass msgWindow in that case. if (msgFolder) msgFolder.getFilterList(gFilterListMsgWindow); // this will get the deferred to account root folder, if server is deferred msgFolder = msgFolder.server.rootMsgFolder; var rootFolderUri = msgFolder.URI; rebuildFilterTree(uri); // root the folder picker to this server gRunFiltersFolderPicker.setAttribute("ref", rootFolderUri); // run filters after the fact not supported by news if (CanRunFiltersAfterTheFact(msgFolder.server)) { gRunFiltersFolderPicker.removeAttribute("hidden"); gRunFiltersButton.removeAttribute("hidden"); gRunFiltersFolderPickerLabel.removeAttribute("hidden"); // for POP3 and IMAP, select the first folder, which is the INBOX gRunFiltersFolderPicker.selectedIndex = 0; } else { gRunFiltersFolderPicker.setAttribute("hidden", "true"); gRunFiltersButton.setAttribute("hidden", "true"); gRunFiltersFolderPickerLabel.setAttribute("hidden", "true"); } // Get the first folder uri for this server. INBOX for // imap and pop accts and 1st news group for news. var firstFolderURI = getFirstFolderURI(msgFolder); SetFolderPicker(firstFolderURI, "runFiltersFolder"); updateButtons(); gCurrentServerURI = uri;}function toggleFilter(aResource){ var filter = aResource.GetDelegate("filter", Components.interfaces.nsIMsgFilter); if (filter.unparseable) { if (gPromptService) gPromptService.alert(window, null, gFilterBundle.getString("cannotEnableFilter")); return; } filter.enabled = !filter.enabled; refresh();}// sets up the menulist and the gFilterTreefunction selectServer(uri){ // update the server menu var serverMenu = document.getElementById("serverMenu"); var resource = gRDF.GetResource(uri); var msgFolder = resource.QueryInterface(Components.interfaces.nsIMsgFolder); // XXX todo // See msgFolderPickerOverlay.js, SetFolderPicker() // why do we have to do this? seems like a hack to work around a bug. // the bug is that the (deep) content isn't there // and so this won't work: // // var menuitems = serverMenu.getElementsByAttribute("id", uri); // serverMenu.selectedItem = menuitems[0]; // // we might need help from a XUL template expert to help out here. // see bug #XXXXXX serverMenu.setAttribute("label", msgFolder.name); serverMenu.setAttribute("uri",uri); setServer(uri);}function getFilter(index){ var filter = gFilterTree.builderView.getResourceAtIndex(index); filter = filter.GetDelegate("filter", Components.interfaces.nsIMsgFilter); return filter;}function currentFilter(){ var currentIndex = gFilterTree.currentIndex; if (currentIndex == -1) return null; var filter; try { filter = getFilter(currentIndex); } catch (ex) { filter = null; } return filter;}function currentFilterList(){ // note, serverUri might be a newsgroup var serverUri = document.getElementById("serverMenu").getAttribute("uri"); var filterList = gRDF.GetResource(serverUri).GetDelegate("filter", Components.interfaces.nsIMsgFilterList); return filterList;}function onFilterSelect(event){ updateButtons();}function onEditFilter() { var selectedFilter = currentFilter(); var curFilterList = currentFilterList(); var args = {filter: selectedFilter, filterList: curFilterList}; window.openDialog("chrome://messenger/content/FilterEditor.xul", "FilterEditor", "chrome,modal,titlebar,resizable,centerscreen", args); if ("refresh" in args && args.refresh) refresh();}function onNewFilter(emailAddress){ var curFilterList = currentFilterList(); var args = {filterList: curFilterList}; window.openDialog("chrome://messenger/content/FilterEditor.xul", "FilterEditor", "chrome,modal,titlebar,resizable,centerscreen", args); if ("refresh" in args && args.refresh) refresh();}function onDeleteFilter(){ var filter = currentFilter();
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -