/* -*- 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 RDF_observer = new Object; var pref = null; // get the click count pref try { pref = Components.classes["component://netscape/preferences"].getService(); if( pref ) pref = pref.QueryInterface( Components.interfaces.nsIPref ); } catch(e) { } RDF_observer = { OnAssert : function(src, prop, target) { if ((src == rootNode) && (prop == textArc)) { rememberSearchText(target); } }, OnUnassert : function(src, prop, target) { }, OnChange : function(src, prop, old_target, new_target) { if ((src == rootNode) && (prop == textArc)) { rememberSearchText(new_target); } }, OnMove : function(old_src, new_src, prop, target) { } } function rememberSearchText(targetNode) { if (targetNode) targetNode = targetNode.QueryInterface(Components.interfaces.nsIRDFLiteral); if (targetNode) targetNode = targetNode.Value; if (targetNode && (targetNode != "")) { var textNode = document.getElementById("sidebar-search-text"); if (!textNode) return(false); textNode.value = unescape(targetNode); } } // 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://search/locale/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); tree.database.AddObserver(RDF_observer); } } var categoryList = document.getElementById("categoryList"); if (categoryList) { 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) { categoryList.database.AddDataSource(catDS); var ref = categoryList.getAttribute("ref"); if (ref) categoryList.setAttribute("ref", ref); } } } try { var pref = Components.classes["component://netscape/preferences"].getService(); if( pref ) pref = pref.QueryInterface( Components.interfaces.nsIPref ); var lastCategoryName = pref.CopyCharPref( "browser.search.last_search_category" ); } catch( e ) { var lastCategoryName = ""; } // dump("*** lastCategoryName = " + lastCategoryName + "\n"); var categoryList = document.getElementById( "categoryList" ); if( categoryList ) { //set to default value 'the web' //hack: hardcoded postion in here replace with a function that finds the entry 'the web' for( var i = 0; i < categoryList.options.length; i++ ) { if( ( lastCategoryName == "" && categoryList.options[i].value == "NC:SearchEngineRoot" ) || ( categoryList.options[i].getAttribute("id") == lastCategoryName ) ) { categoryList.selectedIndex = i; } } if( lastCategoryName == "" ) lastCategoryName = "NC:SearchEngineRoot"; else lastCategoryName = "NC:SearchCategory?category=" + lastCategoryName; var treeNode = document.getElementById("searchengines"); treeNode.setAttribute( "ref", lastCategoryName ); } loadEngines( lastCategoryName ); // if we have search results, show them, otherwise show engines if (haveSearchResults() == true) 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); textNode.value = unescape(target); return(true); } } return(false); } function getNumEngines() { var treeNode = document.getElementById("searchengines"); var numChildren = treeNode.childNodes.length; for (var x = 0; x 0) { // perform command intersection calculation for (var cmdIndex = 0; cmdIndex < cmdArray.length; cmdIndex++) { var cmdFound = false; for (var nextCmdIndex = 0; nextCmdIndex < nextCmdArray.length; nextCmdIndex++) { if (nextCmdArray[nextCmdIndex] == cmdArray[cmdIndex]) { cmdFound = true; break; } } if (cmdFound == false) { cmdArray[cmdIndex] = null; } } } } // need a resource to ask RDF for each command's name var rdfNameResource = rdf.GetResource("http://home.netscape.com/NC-rdf#Name"); if (!rdfNameResource) return(false); // build up menu items if (cmdArray.length < 1) return(false); for (var cmdIndex = 0; cmdIndex < cmdArray.length; cmdIndex++) { var cmd = cmdArray[cmdIndex]; if (!cmd) continue; var cmdResource = cmd.QueryInterface(Components.interfaces.nsIRDFResource); if (!cmdResource) break; var cmdNameNode = compositeDB.GetTarget(cmdResource, rdfNameResource, true); if (!cmdNameNode) break; cmdNameLiteral = cmdNameNode.QueryInterface(Components.interfaces.nsIRDFLiteral); if (!cmdNameLiteral) break; cmdName = cmdNameLiteral.Value; if (!cmdName) break; var menuItem = document.createElement("menuitem"); menuItem.setAttribute("value", cmdName); popupNode.appendChild(menuItem); // work around bug # 26402 by setting "oncommand" attribute AFTER appending menuitem menuItem.setAttribute("oncommand", "return doContextCmd('" + cmdResource.Value + "');"); } return(true); } function doContextCmd(cmdName) { var treeNode = document.getElementById("Tree"); if (!treeNode) return(false); var db = treeNode.database; if (!db) return(false); var compositeDB = db.QueryInterface(Components.interfaces.nsIRDFDataSource); if (!compositeDB) return(false); var isupports = Components.classes["component://netscape/rdf/rdf-service"].getService(); if (!isupports) return(false); var rdf = isupports.QueryInterface(Components.interfaces.nsIRDFService); if (!rdf) return(false); // need a resource for the command var cmdResource = rdf.GetResource(cmdName); if (!cmdResource) return(false); cmdResource = cmdResource.QueryInterface(Components.interfaces.nsIRDFResource); if (!cmdResource) return(false); // set up selection nsISupportsArray var selectionInstance = Components.classes["component://netscape/supports-array"].createInstance(); var selectionArray = selectionInstance.QueryInterface(Components.interfaces.nsISupportsArray); // set up arguments nsISupportsArray var argumentsInstance = Components.classes["component://netscape/supports-array"].createInstance(); var argumentsArray = argumentsInstance.QueryInterface(Components.interfaces.nsISupportsArray); // get argument (parent) var parentArc = rdf.GetResource("http://home.netscape.com/NC-rdf#parent"); if (!parentArc) return(false); var select_list = treeNode.selectedItems; if (select_list.length < 1) { // if nothing is selected, default to using the "ref" on the root of the tree var uri = treeNode.getAttribute("ref"); if (!uri || uri=="") return(false); var rdfNode = rdf.GetResource(uri); // add node into selection array if (rdfNode) { selectionArray.AppendElement(rdfNode); } } else for (var nodeIndex=0; nodeIndex