gecko-dev/mailnews/base/resources/content/searchBar.js
sspitzer%netscape.com 018d22cbdc fix for #129961. Enter in ab quick search textbox should search immediately.
also, remove duplicate code.
r=shliang, sr=bienvenu, a=asa
2002-03-15 05:26:15 +00:00

247 lines
6.6 KiB
JavaScript

/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
* The contents of this file are subject to the Netscape 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/NPL/
*
* 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 Netscape are
* Copyright (C) 1998-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Original Author:
* Navin Gupta <naving@netscape.com>
*
* Contributor(s):
*
*/
var gSearchSession;
var gSearchTimer = null;
var gViewSearchListener;
var gNumOfSearchHits = 0;
var gSearchBundle;
var gStatusBar = null;
var gSearchInProgress = false;
var gSearchCriteria = null;
var gSearchInput = null;
var gClearButton = null;
// nsIMsgSearchNotify object
var gSearchNotificationListener =
{
onSearchHit: function(header, folder)
{
gNumOfSearchHits++;
},
onSearchDone: function(status)
{
var statusMsg;
// if there are no hits, it means no matches were found in the search.
if (gNumOfSearchHits == 0) {
statusMsg = gSearchBundle.getString("searchFailureMessage");
}
else
{
if (gNumOfSearchHits == 1)
statusMsg = gSearchBundle.getString("searchSuccessMessage");
else
statusMsg = gSearchBundle.getFormattedString("searchSuccessMessages", [gNumOfSearchHits]);
gNumOfSearchHits = 0;
}
statusFeedback.showProgress(0);
statusFeedback.showStatusString(statusMsg);
gStatusBar.setAttribute("mode","normal");
gSearchInProgress = false;
},
onNewSearch: function()
{
statusFeedback.showProgress(0);
statusFeedback.showStatusString(gSearchBundle.getString("searchingMessage"));
gStatusBar.setAttribute("mode","undetermined");
gSearchInProgress = true;
}
}
function getDocumentElements()
{
gSearchBundle = document.getElementById("bundle_search");
gStatusBar = document.getElementById('statusbar-icon');
gSearchCriteria =document.getElementById('searchCriteria');
gClearButton = document.getElementById('clearButton');
GetSearchInput();
}
function addListeners()
{
gViewSearchListener = gDBView.QueryInterface(Components.interfaces.nsIMsgSearchNotify);
gSearchSession.registerListener(gViewSearchListener);
}
function removeListeners()
{
gSearchSession.unregisterListener(gViewSearchListener);
}
function onEnterInSearchBar()
{
if (!gDBView)
return;
if (!gSearchSession)
{
getDocumentElements();
var searchSessionContractID = "@mozilla.org/messenger/searchSession;1";
gSearchSession = Components.classes[searchSessionContractID].createInstance(Components.interfaces.nsIMsgSearchSession);
initializeGlobalListeners();
}
else
{
if (gSearchInProgress)
{
onSearchStop();
gSearchInProgress = false;
}
removeListeners();
}
if (gSearchInput.value == "")
{
var searchView = gDBView.isSearchView;
if (searchView)
{
statusFeedback.showStatusString("");
disableQuickSearchClearButton();
gDBView.reloadFolderAfterQuickSearch(); // that should have initialized gDBView
}
return;
}
else
gClearButton.setAttribute("disabled", false); //coming into search enable clear button
ClearThreadPaneSelection();
ClearMessagePane();
addListeners();
onSearch();
}
function initializeGlobalListeners()
{
gSearchSession.addFolderListener(folderListener);
// Setup the javascript object as a listener on the search results
gSearchSession.registerListener(gSearchNotificationListener);
}
function removeGlobalListeners()
{
removeListeners();
gSearchSession.removeFolderListener(folderListener);
gSearchSession.unregisterListener(gSearchNotificationListener);
}
function onSearch()
{
var outlinerView = gDBView.QueryInterface(Components.interfaces.nsIOutlinerView);
if (outlinerView)
{
var outliner = GetThreadOutliner();
outliner.boxObject.QueryInterface(Components.interfaces.nsIOutlinerBoxObject).view = outlinerView;
}
createSearchTerms();
gDBView.searchSession = gSearchSession;
try
{
gSearchSession.search(msgWindow);
}
catch(ex)
{
dump("Search Exception\n");
}
}
function createSearchTerms()
{
var nsMsgSearchScope = Components.interfaces.nsMsgSearchScope;
var nsMsgSearchAttrib = Components.interfaces.nsMsgSearchAttrib;
var nsMsgSearchOp = Components.interfaces.nsMsgSearchOp;
gSearchSession.clearScopes();
var searchTerms = gSearchSession.searchTerms;
var searchTermsArray = searchTerms.QueryInterface(Components.interfaces.nsISupportsArray);
searchTermsArray.Clear();
gSearchSession.addScopeTerm(nsMsgSearchScope.offlineMail, GetThreadPaneFolder());
var term = gSearchSession.createTerm();
var value = term.value;
if (value)
value.str = gSearchInput.value;
gSearchSession.addSearchTerm(nsMsgSearchAttrib.Subject, nsMsgSearchOp.Contains, value, false, null);
var isSender = new String;
isSender = gSearchCriteria.getAttribute("value");
if (isSender.search("Sender") != -1)
gSearchSession.addSearchTerm(nsMsgSearchAttrib.Sender, nsMsgSearchOp.Contains, value, false, null);
else
gSearchSession.addSearchTerm(nsMsgSearchAttrib.ToOrCC, nsMsgSearchOp.Contains, value, false, null);
}
function onAdvancedSearch()
{
MsgSearchMessages();
}
function onSearchStop()
{
gSearchSession.interruptSearch();
}
function onSearchKeyPress(event)
{
// 13 == return
if (event && event.keyCode == 13)
onSearchInput(true);
}
function onSearchInput(returnKeyHit)
{
if (gSearchTimer) {
clearTimeout(gSearchTimer);
gSearchTimer = null;
}
// only select the text when the return key was hit
if (returnKeyHit) {
GetSearchInput();
gSearchInput.select();
onEnterInSearchBar();
}
else {
gSearchTimer = setTimeout("onEnterInSearchBar();", 800);
}
}
function onClearSearch()
{
if (gSearchInput)
gSearchInput.value =""; //on input does not get fired for some reason
onSearchInput(true);
}
function disableQuickSearchClearButton()
{
if (gClearButton)
gClearButton.setAttribute("disabled", true); //going out of search disable clear button
}