⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filterlistdialog.js

📁 现在很火的邮件客户端软件thunderbird的源码
💻 JS
📖 第 1 页 / 共 2 页
字号:
/* -*- 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 + -