/* -*- 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.org code. * * The Initial Developer of the Original Code is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 1998 Netscape Communications Corporation. All * Rights Reserved. * * Contributor(s): */ var rootNode = null; var textArc = null; var modeArc = null; var RDF_observer = new Object; var pref = null; function debug(msg) { // uncomment for debugging information // dump(msg+"\n"); } // get the click count pref try { pref = Components.classes["component://netscape/preferences"]; if (pref) pref = pref.getService(); if (pref) pref = pref.QueryInterface(Components.interfaces.nsIPref); } catch(e) { debug("Exception " + e + " trying to get prefs.\n"); } RDF_observer = { OnAssert : function(src, prop, target) { if ((src == rootNode) && (prop == textArc)) { rememberSearchText(target); } else if ((src == rootNode) && (prop == modeArc)) { updateSearchMode(); } }, OnUnassert : function(src, prop, target) { }, OnChange : function(src, prop, old_target, new_target) { if ((src == rootNode) && (prop == textArc)) { rememberSearchText(new_target); } else if ((src == rootNode) && (prop == modeArc)) { updateSearchMode(); } }, OnMove : function(old_src, new_src, prop, target) { } } function rememberSearchText(target) { if (target) target = target.QueryInterface(Components.interfaces.nsIRDFLiteral); if (target) target = target.Value; if (target && (target != "")) { var textNode = document.getElementById("sidebar-search-text"); if (!textNode) return(false); // convert pluses (+) back to spaces target = target.replace(/+/i, " "); textNode.value = unescape(target); } // show the results tab switchTab(0); } function updateSearchMode() { var searchMode = 0; try { if (pref) searchMode = pref.GetIntPref("browser.search.mode"); var categoryBox = document.getElementById("categoryBox"); if (categoryBox) { if (searchMode == 0) { categoryBox.setAttribute("collapsed", "true"); switchTab(0); } else { categoryBox.removeAttribute("collapsed"); switchTab(1); } } } catch(ex) { } return(searchMode); } // Initialize the Search panel: // 1) init the category list // 2) load the search engines associated with this category // 3) initialise the checked state of said engines. function SearchPanelStartup() { bundle = srGetStrBundle( "chrome://communicator/locale/search/search-panel.properties" ); var tree = document.getElementById("Tree"); if (tree) { var rdf = Components.classes["component://netscape/rdf/rdf-service"].getService(); if (rdf) rdf = rdf.QueryInterface(Components.interfaces.nsIRDFService); if (rdf) { rootNode = rdf.GetResource("NC:LastSearchRoot", true); textArc = rdf.GetResource("http://home.netscape.com/NC-rdf#LastText", true); modeArc = rdf.GetResource("http://home.netscape.com/NC-rdf#SearchMode", true); tree.database.AddObserver(RDF_observer); } } var internetSearch = Components.classes["component://netscape/rdf/datasource?name=internetsearch"].getService(); if (internetSearch) internetSearch = internetSearch.QueryInterface(Components.interfaces.nsIInternetSearchService); if (internetSearch) { var catDS = internetSearch.GetCategoryDataSource(); if (catDS) catDS = catDS.QueryInterface(Components.interfaces.nsIRDFDataSource); if (catDS) { var categoryList = document.getElementById("categoryList"); if (categoryList) { categoryList.database.AddDataSource(catDS); var ref = categoryList.getAttribute("ref"); if (ref) categoryList.setAttribute("ref", ref); } var engineTree = document.getElementById("searchengines"); if (engineTree) { engineTree.database.AddDataSource(catDS); var ref = engineTree.getAttribute("ref"); if (ref) engineTree.setAttribute("ref", ref); } } } // try and determine last category name used var lastCategoryName = ""; try { if (pref) lastCategoryName = pref.CopyCharPref( "browser.search.last_search_category" ); if (lastCategoryName != "") { // strip off the prefix if necessary var prefix="NC:SearchCategory?category="; if (lastCategoryName.indexOf(prefix) == 0) { lastCategoryName = lastCategoryName.substr(prefix.length); } } } catch( e ) { debug("Exception in SearchPanelStartup\n"); lastCategoryName = ""; } debug("\nSearchPanelStartup: lastCategoryName = '" + lastCategoryName + "'\n"); // select the appropriate category var categoryList = document.getElementById( "categoryList" ); var categoryPopup = document.getElementById( "categoryPopup" ); if( categoryList && categoryPopup ) { //set to default value 'Web' //hack: hardcoded postion in here replace with a function that finds the entry 'the web' var found = false; for( var i = 0; i < categoryPopup.childNodes.length; i++ ) { if( ( lastCategoryName == "" && categoryPopup.childNodes[i].getAttribute("data") == "NC:SearchEngineRoot" ) || ( categoryPopup.childNodes[i].getAttribute("id") == lastCategoryName ) ) { categoryList.selectedItem = categoryPopup.childNodes[i]; found = true; break; } } if (found == false) { categoryList.selectedItem = categoryPopup.childNodes[0]; } if (( lastCategoryName == "" ) || (lastCategoryName == null)) { lastCategoryName = "NC:SearchEngineRoot"; } if (lastCategoryName != "NC:SearchEngineRoot") { lastCategoryName = "NC:SearchCategory?category=" + lastCategoryName; } var treeNode = document.getElementById("searchengines"); treeNode.setAttribute( "ref", lastCategoryName ); } loadEngines( lastCategoryName ); var searchMode = updateSearchMode(); // if we have search results, show them, otherwise show engines if ((haveSearchResults() == true) || (searchMode == 0)) { switchTab(0); } else { switchTab(1); } } function haveSearchResults() { var resultsTree = document.getElementById("Tree"); if( !resultsTree) return(false); var ds = resultsTree.database; if (!ds) return(false); var rdf = Components.classes["component://netscape/rdf/rdf-service"].getService(); if (rdf) rdf = rdf.QueryInterface(Components.interfaces.nsIRDFService); if (rdf) { var source = rdf.GetResource( "NC:LastSearchRoot", true); var childProperty = rdf.GetResource("http://home.netscape.com/NC-rdf#LastText", true); var target = ds.GetTarget(source, childProperty, true); if (target) target = target.QueryInterface(Components.interfaces.nsIRDFLiteral); if (target) target = target.Value; if (target && target != "") { var textNode = document.getElementById("sidebar-search-text"); if (!textNode) return(false); // convert pluses (+) back to spaces target = target.replace(/+/i, " "); textNode.value = unescape(target); return(true); } } return(false); } function getNumEngines() { var treeNode = document.getElementById("searchengines"); var numChildren = treeNode.childNodes.length; var treeChildrenNode = null; for (var x = 0; x 0) { siteOffset += 3; var endOffset = lastSearchText.indexOf("/", siteOffset); if (endOffset > 0) { lastSearchText = lastSearchText.substr(0, endOffset+1); } } } var bmks = Components.classes["component://netscape/browser/bookmarks-service"].getService(); if (bmks) bmks = bmks.QueryInterface(Components.interfaces.nsIBookmarksService); var textNode = document.getElementById("sidebar-search-text"); if( !textNode ) return(false); var searchTitle = "Search: '" + lastSearchText + "'"; // using " + gSites; if (bmks) bmks.AddBookmark(lastSearchURI, searchTitle, bmks.BOOKMARK_SEARCH_TYPE, null); return(true); } function doCustomize() { window.openDialog("chrome://communicator/content/search/search-editor.xul", "_blank", "centerscreen,chrome,resizable"); } function doEnabling() { var searchButton = document.getElementById("searchbutton"); var sidebarSearchText = document.getElementById("sidebar-search-text"); if ( sidebarSearchText.value == "" ) { // No input, disable search button if enabled. if ( !searchButton.getAttribute("disabled") ) searchButton.setAttribute("disabled","true"); } else { if ( searchButton.getAttribute("disabled") == "true") searchButton.removeAttribute( "disabled"); } }