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

📄 filterlistdialog.js

📁 现在很火的邮件客户端软件thunderbird的源码
💻 JS
📖 第 1 页 / 共 2 页
字号:
    if (!filter) return;    var filterList = currentFilterList();    if (!filterList) return;    if (gPromptService) {      if (!gPromptService.confirm(window, null,                                  gFilterBundle.getString("deleteFilterConfirmation")))        return;    }    filterList.removeFilter(filter);    refresh();}function onUp(event){    moveCurrentFilter(nsMsgFilterMotion.up);}function onDown(event){    moveCurrentFilter(nsMsgFilterMotion.down);}function viewLog(){  var uri = gFilterTree.getAttribute("ref");  var server = gRDF.GetResource(uri).QueryInterface(Components.interfaces.nsIMsgFolder).server;  var filterList = currentFilterList();  var args = {filterList: filterList};  window.openDialog("chrome://messenger/content/viewLog.xul", "FilterLog", "chrome,modal,titlebar,resizable,centerscreen", args);}function onFilterClose(){  // make sure to save the filter to disk  var filterList = currentFilterList();  if (filterList)     filterList.saveToDefaultFile();  if (gRunFiltersButton.getAttribute("label") == gRunFiltersButton.getAttribute("stoplabel")) {    var promptTitle = gFilterBundle.getString("promptTitle");    var promptMsg = gFilterBundle.getString("promptMsg");;    var stopButtonLabel = gFilterBundle.getString("stopButtonLabel");    var continueButtonLabel = gFilterBundle.getString("continueButtonLabel");    var result = false;    if (gPromptService)      result = gPromptService.confirmEx(window, promptTitle, promptMsg,               (gPromptService.BUTTON_TITLE_IS_STRING*gPromptService.BUTTON_POS_0) +               (gPromptService.BUTTON_TITLE_IS_STRING*gPromptService.BUTTON_POS_1),               continueButtonLabel, stopButtonLabel, null, null, {value:0});    if (result)      gFilterListMsgWindow.StopUrls();    else      return false;  }  window.close();  return true;}function runSelectedFilters(){  // if run button has "stop" label, do stop.  if (gRunFiltersButton.getAttribute("label") == gRunFiltersButton.getAttribute("stoplabel")) {    gFilterListMsgWindow.StopUrls();    return;  }    var folderURI = gRunFiltersFolderPicker.getAttribute("uri");  var resource = gRDF.GetResource(folderURI);  var msgFolder = resource.QueryInterface(Components.interfaces.nsIMsgFolder);  var filterService = Components.classes["@mozilla.org/messenger/services/filters;1"].getService(Components.interfaces.nsIMsgFilterService);  var filterList = filterService.getTempFilterList(msgFolder);  var folders = Components.classes["@mozilla.org/supports-array;1"].createInstance(Components.interfaces.nsISupportsArray);  folders.AppendElement(msgFolder);  // make sure the tmp filter list uses the real filter list log stream  filterList.logStream = currentFilterList().logStream;  filterList.loggingEnabled = currentFilterList().loggingEnabled;  var sel = gFilterTree.view.selection;  for (var i = 0; i < sel.getRangeCount(); i++) {    var start = {}, end = {};    sel.getRangeAt(i, start, end);    for (var j = start.value; j <= end.value; j++) {      var curFilter = getFilter(j);      if (curFilter)      {        filterList.insertFilterAt(start.value - j, curFilter);      }    }  }  filterService.applyFiltersToFolders(filterList, folders, gFilterListMsgWindow);}function moveCurrentFilter(motion){    var filterList = currentFilterList();    var filter = currentFilter();    if (!filterList || !filter)       return;    filterList.moveFilter(filter, motion);    refresh();}function rebuildFilterTree(uri){  gFilterTree.view.selection.clearSelection();  gFilterTree.removeAttribute("ref");  gFilterTree.setAttribute("ref", uri);}function refresh() {    if (!gFilterTree)       return;    var selectedRes;    // store the selected resource before we rebuild the tree    try {      selectedRes = gFilterTree.currentIndex >= 0 ? gFilterTree.builderView.getResourceAtIndex(gFilterTree.currentIndex) : null;    }    catch (ex) {      dump("ex = " + ex + "\n");      selectedRes = null;    }    rebuildFilterTree(gCurrentServerURI);    // restore selection to the previous selected resource    if (selectedRes) {        var previousSel = gFilterTree.builderView.getIndexOfResource(selectedRes);        if (previousSel >= 0) {            // sometimes the selected element is gone.            gFilterTree.view.selection.select(previousSel);            gFilterTree.treeBoxObject.ensureRowIsVisible(previousSel);        }    }}function updateButtons(){    var numFiltersSelected = gFilterTree.view.selection.count;    var oneFilterSelected = (numFiltersSelected == 1);    var filter = currentFilter();    // "edit" only enabled when one filter selected or if we couldn't parse the filter    gEditButton.disabled = !oneFilterSelected || filter.unparseable;        // "delete" only enabled when one filter selected    gDeleteButton.disabled = !oneFilterSelected;    // we can run multiple filters on a folder    // so only disable this UI if no filters are selected    gRunFiltersFolderPickerLabel.disabled = !numFiltersSelected;    gRunFiltersFolderPicker.disabled = !numFiltersSelected;    gRunFiltersButton.disabled = !numFiltersSelected;    // "up" enabled only if one filter selected, and it's not the first    gReorderUpButton.disabled = !(oneFilterSelected && gFilterTree.currentIndex > 0);    // "down" enabled only if one filter selected, and it's not the last    gReorderDownButton.disabled = !(oneFilterSelected && gFilterTree.currentIndex < gFilterTree.view.rowCount-1);}/**  * get the selected server if it can have filters  */function getSelectedServerForFilters(){    var firstItem = null;    var args = window.arguments;    var selectedFolder = args[0].folder;      if (args && args[0] && selectedFolder)    {        var msgFolder = selectedFolder.QueryInterface(Components.interfaces.nsIMsgFolder);        try        {            var rootFolder = msgFolder.server.rootFolder;            if (rootFolder.isServer)            {                var server = rootFolder.server;                if (server.canHaveFilters)                {                    // for news, select the news folder                    // for everything else, select the folder's server                    firstItem = (server.type == "nntp") ? msgFolder.URI : rootFolder.URI;                }            }        }        catch (ex)        {        }    }    return firstItem;}/** 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.  */function getServerThatCanHaveFilters(){    var firstItem = null;    var accountManager        = Components.classes["@mozilla.org/messenger/account-manager;1"].            getService(Components.interfaces.nsIMsgAccountManager);    var defaultAccount = accountManager.defaultAccount;    var defaultIncomingServer = defaultAccount.incomingServer;    // check to see if default server can have filters    if (defaultIncomingServer.canHaveFilters) {        firstItem = defaultIncomingServer.serverURI;    }    // if it cannot, check all accounts to find a server    // that can have filters    else    {        var allServers = accountManager.allServers;        var numServers = allServers.Count();        var index = 0;        for (index = 0; index < numServers; index++)        {            var currentServer            = allServers.GetElementAt(index).QueryInterface(Components.interfaces.nsIMsgIncomingServer);            if (currentServer.canHaveFilters)            {                firstItem = currentServer.serverURI;                break;            }        }    }    return firstItem;}function onFilterClick(event){    // we only care about button 0 (left click) events    if (event.button != 0)      return;        var row = {}, col = {}, childElt = {};    var filterTree = document.getElementById("filterTree");    filterTree.treeBoxObject.getCellAt(event.clientX, event.clientY, row, col, childElt);    if (row.value == -1 || row.value > filterTree.view.rowCount-1 || event.originalTarget.localName != "treechildren") {      if (event.originalTarget.localName == "treecol") {         // clicking on the name column in the filter list should not sort        event.stopPropagation();      }      return;    }            if (col.value.id == "activeColumn") {      toggleFilter(filterTree.builderView.getResourceAtIndex(row.value));    }}function onFilterDoubleClick(event){    // we only care about button 0 (left click) events    if (event.button != 0)      return;    var row = {}, col = {}, childElt = {};    var filterTree = document.getElementById("filterTree");    filterTree.treeBoxObject.getCellAt(event.clientX, event.clientY, row, col, childElt);    if (row.value == -1 || row.value > filterTree.view.rowCount-1 || event.originalTarget.localName != "treechildren") {      // double clicking on a non valid row should not open the edit filter dialog      return;    }    // if the cell is in a "cycler" column (the enabled column)    // don't open the edit filter dialog with the selected filter    if (!col.value.cycler)      onEditFilter();}function onFilterTreeKeyPress(event){  // for now, only do something on space key  if (event.keyCode != 0)    return;  var rangeCount = gFilterTree.view.selection.getRangeCount();  for (var i = 0; i < rangeCount; ++i) {    var start = {}, end = {};    gFilterTree.view.selection.getRangeAt(i, start, end);    for (var k = start.value; k <= end.value; ++k) {      toggleFilter(gFilterTree.builderView.getResourceAtIndex(k));    }  }}function doHelpButton(){  openHelp("mail-filters");}/**  * For a given server folder, get the uri for the first folder. For imap  * and pop it's INBOX and it's the very first group for news accounts.  */function getFirstFolderURI(msgFolder){  // Sanity check.  if (! msgFolder.isServer)    return msgFolder.URI;  try {    // Find Inbox for imap and pop    if (msgFolder.server.type != "nntp")    {      var outNumFolders = new Object();      var inboxFolder = msgFolder.getFoldersWithFlag(MSG_FOLDER_FLAG_INBOX, 1, outNumFolders);      if (inboxFolder)        return inboxFolder.URI;      else        // If inbox does not exist then use the server uri as default.        return msgFolder.URI;    }    else      // XXX TODO: For news, we should find the 1st group/folder off the news groups. For now use server uri.      return msgFolder.URI;  }  catch (ex) {    dump(ex + "\n");  }  return msgFolder.URI;}function GetPromptService(){  try {    return Components.classes["@mozilla.org/embedcomp/prompt-service;1"]                     .getService(Components.interfaces.nsIPromptService);  }  catch (e) {    return null;  }}

⌨️ 快捷键说明

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