1999-12-29 12:17:41 +03:00
|
|
|
/* -*- 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):
|
|
|
|
*/
|
|
|
|
|
2006-07-27 18:48:28 +04:00
|
|
|
var rootNode = null;
|
|
|
|
var textArc = null;
|
|
|
|
var RDF_observer = new Object;
|
2006-07-27 18:49:02 +04:00
|
|
|
var pref = null;
|
2006-07-27 18:48:48 +04:00
|
|
|
|
|
|
|
// get the click count pref
|
|
|
|
try {
|
|
|
|
pref = Components.classes["component://netscape/preferences"].getService();
|
|
|
|
if( pref )
|
|
|
|
pref = pref.QueryInterface( Components.interfaces.nsIPref );
|
|
|
|
}
|
|
|
|
catch(e) {
|
|
|
|
}
|
2006-07-27 18:48:28 +04:00
|
|
|
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2006-07-27 18:48:34 +04:00
|
|
|
// 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()
|
1999-12-29 12:17:41 +03:00
|
|
|
{
|
2006-07-27 18:48:48 +04:00
|
|
|
bundle = srGetStrBundle( "chrome://search/locale/search-panel.properties" );
|
|
|
|
|
2006-07-27 18:48:28 +04:00
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|
2006-07-27 18:48:34 +04:00
|
|
|
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 = "";
|
|
|
|
}
|
2006-07-27 18:48:59 +04:00
|
|
|
// dump("*** lastCategoryName = " + lastCategoryName + "\n");
|
2006-07-27 18:48:34 +04:00
|
|
|
var categoryList = document.getElementById( "categoryList" );
|
|
|
|
if( categoryList ) {
|
2006-07-27 18:48:48 +04:00
|
|
|
//set to default value 'the web'
|
|
|
|
//hack: hardcoded postion in here replace with a function that finds the entry 'the web'
|
|
|
|
|
2006-07-27 18:48:34 +04:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
}
|
2006-07-27 18:48:51 +04:00
|
|
|
|
2006-07-27 18:48:34 +04:00
|
|
|
if( lastCategoryName == "" )
|
|
|
|
lastCategoryName = "NC:SearchEngineRoot";
|
|
|
|
else
|
|
|
|
lastCategoryName = "NC:SearchCategory?category=" + lastCategoryName;
|
|
|
|
var treeNode = document.getElementById("searchengines");
|
|
|
|
treeNode.setAttribute( "ref", lastCategoryName );
|
|
|
|
}
|
2006-07-27 18:48:35 +04:00
|
|
|
|
2006-07-27 18:48:34 +04:00
|
|
|
loadEngines( lastCategoryName );
|
2006-07-27 18:48:59 +04:00
|
|
|
|
|
|
|
// 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);
|
2006-07-27 18:48:34 +04:00
|
|
|
}
|
|
|
|
|
2006-07-27 18:48:35 +04:00
|
|
|
function getNumEngines()
|
|
|
|
{
|
|
|
|
var treeNode = document.getElementById("searchengines");
|
|
|
|
var numChildren = treeNode.childNodes.length;
|
|
|
|
for (var x = 0; x<numChildren; x++)
|
|
|
|
{
|
|
|
|
if (treeNode.childNodes[x].tagName == "treechildren")
|
|
|
|
{
|
|
|
|
var treeChildrenNode = treeNode.childNodes[x];
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if( !treeChildrenNode )
|
|
|
|
return -1;
|
|
|
|
return treeChildrenNode.childNodes.length;
|
|
|
|
}
|
|
|
|
|
2006-07-27 18:48:34 +04:00
|
|
|
function chooseCategory( aSelectElement )
|
|
|
|
{
|
|
|
|
var category = aSelectElement.options[ aSelectElement.selectedIndex ].getAttribute("id");
|
2006-07-27 18:48:35 +04:00
|
|
|
var pref = Components.classes["component://netscape/preferences"].getService();
|
|
|
|
if( pref )
|
|
|
|
pref = pref.QueryInterface( Components.interfaces.nsIPref );
|
|
|
|
if( !category )
|
|
|
|
category = "";
|
|
|
|
pref.SetCharPref( "browser.search.last_search_category", category );
|
2006-07-27 18:48:34 +04:00
|
|
|
if ( category )
|
|
|
|
category = "NC:SearchCategory?category=" + category;
|
|
|
|
else
|
|
|
|
category = "NC:SearchEngineRoot";
|
|
|
|
var treeNode = document.getElementById("searchengines");
|
|
|
|
if (!treeNode)
|
|
|
|
return false;
|
|
|
|
treeNode.setAttribute( "ref", category );
|
|
|
|
loadEngines( category );
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
function saveEngines( aSelectElement )
|
|
|
|
{
|
|
|
|
var category = aSelectElement.options[ aSelectElement.selectedIndex ].getAttribute("id");
|
|
|
|
if( category )
|
|
|
|
category = "NC:SearchCategory?category=" + category;
|
|
|
|
else
|
|
|
|
category = "NC:SearchEngineRoot";
|
|
|
|
var rdf = Components.classes["component://netscape/rdf/rdf-service"].getService();
|
|
|
|
if (rdf) rdf = rdf.QueryInterface(Components.interfaces.nsIRDFService);
|
|
|
|
if (rdf)
|
|
|
|
{
|
|
|
|
var localStore = rdf.GetDataSource("rdf:local-store");
|
|
|
|
if( !localStore )
|
|
|
|
return false;
|
|
|
|
var treeNode = document.getElementById("searchengines");
|
|
|
|
var numChildren = treeNode.childNodes.length;
|
|
|
|
for (var x = 0; x<numChildren; x++)
|
|
|
|
{
|
|
|
|
if (treeNode.childNodes[x].tagName == "treechildren")
|
|
|
|
{
|
|
|
|
var treeChildrenNode = treeNode.childNodes[x];
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if( !treeChildrenNode )
|
|
|
|
return false;
|
|
|
|
var checkedProperty = rdf.GetResource( "http://home.netscape.com/NC-rdf#checked", true );
|
|
|
|
var categorySRC = rdf.GetResource( category, true );
|
|
|
|
for (var x = 0; x < treeChildrenNode.childNodes.length; x++)
|
|
|
|
{
|
|
|
|
var treeItem = treeChildrenNode.childNodes[x];
|
|
|
|
if( !treeItem )
|
|
|
|
continue;
|
|
|
|
var engineURI = treeItem.getAttribute("id");
|
|
|
|
var engineSRC = rdf.GetResource(engineURI, true);
|
2006-07-27 18:49:03 +04:00
|
|
|
|
|
|
|
var checkbox = treeItem.firstChild.firstChild.firstChild;
|
|
|
|
if( checkbox.checked )
|
2006-07-27 18:48:34 +04:00
|
|
|
localStore.Assert( categorySRC, checkedProperty, engineSRC, true );
|
|
|
|
else
|
|
|
|
localStore.Unassert( categorySRC, checkedProperty, engineSRC, true );
|
|
|
|
}
|
|
|
|
flushableStore = localStore.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource);
|
|
|
|
if (flushableStore)
|
|
|
|
flushableStore.Flush();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// initialise the appropriate engine list, and the checked state of the engines
|
|
|
|
function loadEngines( aCategory )
|
|
|
|
{
|
|
|
|
var rdf = Components.classes["component://netscape/rdf/rdf-service"].getService();
|
|
|
|
if (rdf) rdf = rdf.QueryInterface(Components.interfaces.nsIRDFService);
|
|
|
|
if (rdf)
|
|
|
|
{
|
|
|
|
var localStore = rdf.GetDataSource("rdf:local-store");
|
|
|
|
if (localStore)
|
|
|
|
{
|
|
|
|
var treeNode = document.getElementById("searchengines");
|
|
|
|
var numChildren = treeNode.childNodes.length;
|
|
|
|
for (var x = 0; x<numChildren; x++)
|
|
|
|
{
|
|
|
|
if (treeNode.childNodes[x].tagName == "treechildren")
|
|
|
|
{
|
|
|
|
var treeChildrenNode = treeNode.childNodes[x];
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if( treeChildrenNode )
|
|
|
|
{
|
|
|
|
var numEngines = treeChildrenNode.childNodes.length;
|
|
|
|
var checkedProperty = rdf.GetResource("http://home.netscape.com/NC-rdf#checked", true);
|
|
|
|
var categorySRC = rdf.GetResource( aCategory, true );
|
|
|
|
for (var x = 0; x<numEngines; x++)
|
|
|
|
{
|
|
|
|
var treeItem = treeChildrenNode.childNodes[x];
|
|
|
|
if (!treeItem) continue;
|
|
|
|
var engineURI = treeItem.getAttribute("id");
|
|
|
|
var engineSRC = rdf.GetResource( engineURI, true );
|
|
|
|
var hasAssertion = localStore.HasAssertion( categorySRC, checkedProperty, engineSRC, true );
|
|
|
|
var checkbox = treeItem.firstChild.firstChild.firstChild;
|
2006-07-27 18:48:59 +04:00
|
|
|
// dump("*** hasAssertion = " + hasAssertion + "\n");
|
2006-07-27 18:48:34 +04:00
|
|
|
if ( hasAssertion )
|
|
|
|
{
|
|
|
|
checkbox.checked = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function SearchPanelShutdown()
|
|
|
|
{
|
2006-07-27 18:49:02 +04:00
|
|
|
var tree = document.getElementById("Tree");
|
|
|
|
if (tree)
|
|
|
|
{
|
|
|
|
tree.database.RemoveObserver(RDF_observer);
|
|
|
|
}
|
2006-07-27 18:48:28 +04:00
|
|
|
}
|
|
|
|
|
2006-07-27 18:48:34 +04:00
|
|
|
function doStop()
|
|
|
|
{
|
|
|
|
var isupports = Components.classes["component://netscape/rdf/datasource?name=internetsearch"].getService();
|
|
|
|
if (!isupports)
|
|
|
|
return false;
|
|
|
|
var internetSearchService = isupports.QueryInterface(Components.interfaces.nsIInternetSearchService);
|
|
|
|
if (internetSearchService)
|
|
|
|
internetSearchService.Stop();
|
|
|
|
|
|
|
|
// should stop button press also stop the load of the page in the browser? I think so.
|
|
|
|
var progressNode = parent.document.getElementById("statusbar-icon");
|
|
|
|
var stopButtonNode = document.getElementById("stopbutton");
|
|
|
|
var searchButtonNode = document.getElementById("searchbutton");
|
|
|
|
if( !progressNode || !stopButtonNode || !searchButtonNode )
|
|
|
|
return;
|
|
|
|
progressNode.setAttribute("mode", "normal");
|
|
|
|
stopButtonNode.setAttribute("style", "display: none;");
|
|
|
|
searchButtonNode.setAttribute("style", "display: inherit;");
|
|
|
|
|
|
|
|
// get various services
|
|
|
|
var rdf = Components.classes["component://netscape/rdf/rdf-service"].getService();
|
|
|
|
if (rdf) rdf = rdf.QueryInterface(Components.interfaces.nsIRDFService);
|
|
|
|
|
|
|
|
var internetSearch = Components.classes["component://netscape/rdf/datasource?name=internetsearch"].getService();
|
|
|
|
if (internetSearch) internetSearch = internetSearch.QueryInterface(Components.interfaces.nsIRDFDataSource);
|
2006-07-27 18:48:28 +04:00
|
|
|
|
2006-07-27 18:48:34 +04:00
|
|
|
var sortSetFlag = false;
|
|
|
|
|
|
|
|
// show appropriate column(s)
|
|
|
|
if ((rdf) && (internetSearch))
|
|
|
|
{
|
|
|
|
var resultsTree = top.content.document.getElementById("internetresultstree");
|
|
|
|
if( !resultsTree )
|
|
|
|
return false;
|
|
|
|
var searchURL = resultsTree.getAttribute("ref");
|
|
|
|
if( !searchURL )
|
|
|
|
return false;
|
|
|
|
|
|
|
|
var searchResource = rdf.GetResource(searchURL, true);
|
|
|
|
var priceProperty = rdf.GetResource("http://home.netscape.com/NC-rdf#Price", true);
|
|
|
|
var availabilityProperty = rdf.GetResource("http://home.netscape.com/NC-rdf#Availability", true);
|
|
|
|
var relevanceProperty = rdf.GetResource("http://home.netscape.com/NC-rdf#Relevance", true);
|
|
|
|
var trueProperty = rdf.GetLiteral("true");
|
|
|
|
|
|
|
|
var hasPriceFlag = internetSearch.HasAssertion(searchResource, priceProperty, trueProperty, true);
|
|
|
|
var hasAvailabilityFlag = internetSearch.HasAssertion(searchResource, availabilityProperty, trueProperty, true);
|
|
|
|
var hasRelevanceFlag = internetSearch.HasAssertion(searchResource, relevanceProperty, trueProperty, true);
|
|
|
|
|
|
|
|
if(hasPriceFlag == true)
|
|
|
|
{
|
|
|
|
var colNode = top.content.document.getElementById("PriceColumn");
|
|
|
|
if (colNode)
|
|
|
|
{
|
|
|
|
colNode.removeAttribute("style", "width: 0; visibility: collapse;");
|
|
|
|
if (sortSetFlag == false)
|
|
|
|
{
|
|
|
|
top.content.setInitialSort(colNode, "ascending");
|
|
|
|
sortSetFlag = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (hasAvailabilityFlag == true)
|
|
|
|
{
|
|
|
|
colNode = top.content.document.getElementById("AvailabilityColumn");
|
|
|
|
if (colNode)
|
|
|
|
colNode.removeAttribute("style", "width: 0; visibility: collapse;");
|
|
|
|
}
|
|
|
|
if (hasRelevanceFlag == true)
|
|
|
|
{
|
|
|
|
colNode = top.content.document.getElementById("RelevanceColumn");
|
|
|
|
if (colNode)
|
|
|
|
{
|
|
|
|
colNode.removeAttribute("style", "width: 0; visibility: collapse;");
|
|
|
|
if (sortSetFlag == false)
|
|
|
|
{
|
|
|
|
top.content.setInitialSort(colNode, "descending");
|
|
|
|
sortSetFlag = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (sortSetFlag == false)
|
|
|
|
{
|
2006-07-27 18:48:59 +04:00
|
|
|
colNode = top.content.document.getElementById("PageRankColumn");
|
2006-07-27 18:48:34 +04:00
|
|
|
if (colNode)
|
|
|
|
top.content.setInitialSort(colNode, "ascending");
|
|
|
|
}
|
2006-07-27 18:48:59 +04:00
|
|
|
switchTab(0);
|
2006-07-27 18:48:34 +04:00
|
|
|
}
|
2006-07-27 18:48:28 +04:00
|
|
|
|
|
|
|
function doSearch()
|
2006-07-27 18:48:34 +04:00
|
|
|
{
|
2006-07-27 18:48:51 +04:00
|
|
|
//get click count pref for later
|
|
|
|
//and set tree attribute to cause proper results appearance (like links) to happen
|
|
|
|
//when user set pref to single click
|
|
|
|
try {
|
|
|
|
if( pref ) {
|
|
|
|
var prefvalue = pref.GetBoolPref( "browser.search.use_double_clicks" );
|
2006-07-27 18:48:55 +04:00
|
|
|
var mClickCount = prefvalue ? 2 : 1;
|
2006-07-27 18:48:51 +04:00
|
|
|
}
|
|
|
|
else
|
|
|
|
mClickCount = 1;
|
|
|
|
}
|
|
|
|
catch(e) {
|
|
|
|
mClickCount = 1;
|
|
|
|
}
|
|
|
|
var tree = document.getElementById("Tree");
|
|
|
|
if (mClickCount == 1)
|
|
|
|
tree.setAttribute("singleclick","true");
|
|
|
|
else
|
|
|
|
tree.removeAttribute("singleclick");
|
|
|
|
|
|
|
|
//end insert for single click appearance
|
|
|
|
|
2006-07-27 18:48:34 +04:00
|
|
|
// hide search button
|
|
|
|
var searchButtonNode = document.getElementById("searchbutton");
|
|
|
|
var stopButtonNode = document.getElementById("stopbutton");
|
|
|
|
var progressNode = top.document.getElementById("statusbar-icon");
|
|
|
|
if( !stopButtonNode || !searchButtonNode )
|
|
|
|
return;
|
|
|
|
|
|
|
|
// hide various columns
|
|
|
|
if( parent.content.isMozillaSearchWindow ) {
|
|
|
|
colNode = parent.content.document.getElementById("RelevanceColumn");
|
|
|
|
if (colNode) colNode.setAttribute("style", "width: 0; visibility: collapse;");
|
|
|
|
colNode = parent.content.document.getElementById("PriceColumn");
|
|
|
|
if (colNode) colNode.setAttribute("style", "width: 0; visibility: collapse;");
|
|
|
|
colNode = parent.content.document.getElementById("AvailabilityColumn");
|
|
|
|
if (colNode) colNode.setAttribute("style", "width: 0; visibility: collapse;");
|
|
|
|
}
|
|
|
|
|
|
|
|
// get user text to find
|
|
|
|
var textNode = document.getElementById("sidebar-search-text");
|
|
|
|
if( !textNode )
|
|
|
|
return false;
|
|
|
|
if ( !textNode.value )
|
|
|
|
{
|
2006-07-27 18:48:48 +04:00
|
|
|
alert( bundle.GetStringFromName("enterstringandlocation") );
|
2006-07-27 18:48:34 +04:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
// get selected search engines
|
|
|
|
var treeNode = document.getElementById("searchengines");
|
|
|
|
if (!treeNode) return(false);
|
|
|
|
var numChildren = treeNode.childNodes.length;
|
|
|
|
for (var x = 0; x<numChildren; x++)
|
|
|
|
{
|
|
|
|
if (treeNode.childNodes[x].tagName == "treechildren")
|
|
|
|
{
|
|
|
|
var treeChildrenNode = treeNode.childNodes[x];
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ( !treeChildrenNode )
|
|
|
|
return false;
|
|
|
|
|
|
|
|
var searchURL = "";
|
|
|
|
var foundEngine = false;
|
|
|
|
var engineURIs = [];
|
|
|
|
var numEngines = treeChildrenNode.childNodes.length;
|
|
|
|
|
|
|
|
for (var x = 0; x<numEngines; x++)
|
|
|
|
{
|
|
|
|
var treeItem = treeChildrenNode.childNodes[x];
|
|
|
|
if (!treeItem)
|
|
|
|
continue;
|
2006-07-27 18:49:03 +04:00
|
|
|
|
|
|
|
var checkbox = treeItem.firstChild.firstChild.firstChild;
|
|
|
|
var checkedFlag = checkbox.checked;
|
2006-07-27 18:48:34 +04:00
|
|
|
if ( checkedFlag )
|
|
|
|
{
|
|
|
|
var engineURI = treeItem.getAttribute("id");
|
|
|
|
if (!engineURI) continue;
|
|
|
|
engineURIs[engineURIs.length] = engineURI;
|
|
|
|
foundEngine = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (foundEngine == false)
|
|
|
|
{
|
2006-07-27 18:48:35 +04:00
|
|
|
if( getNumEngines() == 1 ) {
|
|
|
|
// only one engine in this category, check it
|
|
|
|
var treeItem = treeChildrenNode.firstChild;
|
|
|
|
engineURIs[engineURIs.length] = treeItem.getAttribute( "id" );
|
|
|
|
}
|
|
|
|
else {
|
2006-07-27 18:48:59 +04:00
|
|
|
// dump("*** multiple search engines present, selecting the netscape search engine\n");
|
2006-07-27 18:48:48 +04:00
|
|
|
for( var i = 0; i < treeChildrenNode.childNodes.length; i++ )
|
|
|
|
{
|
|
|
|
var currItem = treeChildrenNode.childNodes[i];
|
2006-07-27 18:48:59 +04:00
|
|
|
// dump("*** the current URI is = " + currItem.getAttribute("id") + "\n");
|
2006-07-27 18:48:54 +04:00
|
|
|
if( currItem.getAttribute("id").indexOf("NetscapeSearch.src") != -1 ) {
|
|
|
|
engineURIs[engineURIs.length] = currItem.getAttribute("id");
|
2006-07-27 18:48:48 +04:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2006-07-27 18:48:35 +04:00
|
|
|
}
|
2006-07-27 18:48:34 +04:00
|
|
|
}
|
2006-07-27 18:48:35 +04:00
|
|
|
|
|
|
|
progressNode.setAttribute( "mode", "undetermined" );
|
|
|
|
searchButtonNode.setAttribute("style", "display: none;");
|
|
|
|
stopButtonNode.removeAttribute("style", "display: none;");
|
|
|
|
|
|
|
|
// run the search
|
2006-07-27 18:48:34 +04:00
|
|
|
OpenSearch("internet", false, textNode.value, engineURIs );
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
// check an engine representation in the engine list
|
|
|
|
function doCheck( aNode )
|
|
|
|
{
|
2006-07-27 18:49:03 +04:00
|
|
|
saveEngines( document.getElementById("categoryList") )
|
2006-07-27 18:48:34 +04:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
function checkSearchProgress( aSearchURL )
|
|
|
|
{
|
|
|
|
var activeSearchFlag = false;
|
|
|
|
var resultsTree = top.content.document.getElementById("internetresultstree");
|
|
|
|
var enginesBox = top.content.document.getElementById("engineTabs");
|
|
|
|
if( !resultsTree || !enginesBox )
|
2006-07-27 18:48:59 +04:00
|
|
|
return (activeSearchFlag);
|
2006-07-27 18:48:34 +04:00
|
|
|
var treeref = resultsTree.getAttribute("ref");
|
2006-07-27 18:48:59 +04:00
|
|
|
if( aSearchURL ) {
|
2006-07-27 18:48:34 +04:00
|
|
|
resultsTree.setAttribute( "ref", aSearchURL );
|
|
|
|
treeref = aSearchURL;
|
|
|
|
}
|
|
|
|
|
|
|
|
var ds = resultsTree.database;
|
|
|
|
if ( treeref && ds )
|
|
|
|
{
|
|
|
|
var rdf = Components.classes["component://netscape/rdf/rdf-service"].getService();
|
|
|
|
if (rdf) rdf = rdf.QueryInterface(Components.interfaces.nsIRDFService);
|
|
|
|
if (rdf)
|
|
|
|
{
|
|
|
|
var source = rdf.GetResource( treeref, true);
|
|
|
|
var loadingProperty = rdf.GetResource("http://home.netscape.com/NC-rdf#loading", true);
|
|
|
|
var target = ds.GetTarget(source, loadingProperty, true);
|
|
|
|
if (target) target = target.QueryInterface(Components.interfaces.nsIRDFLiteral);
|
|
|
|
if (target) target = target.Value;
|
|
|
|
if (target == "true")
|
|
|
|
activeSearchFlag = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if( activeSearchFlag )
|
2006-07-27 18:48:59 +04:00
|
|
|
setTimeout("checkSearchProgress(null)", 1000);
|
2006-07-27 18:48:34 +04:00
|
|
|
else {
|
|
|
|
//window.frames["sidebar-content"].doStop();
|
|
|
|
doStop();
|
|
|
|
}
|
2006-07-27 18:48:51 +04:00
|
|
|
|
2006-07-27 18:48:59 +04:00
|
|
|
return(activeSearchFlag);
|
2006-07-27 18:48:34 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
function FOO_doSearch()
|
2006-07-27 18:48:28 +04:00
|
|
|
{
|
|
|
|
var textNode = document.getElementById("sidebar-search-text");
|
|
|
|
if (!textNode) return(false);
|
|
|
|
var text = textNode.value;
|
|
|
|
top.OpenSearch("internet", false, text);
|
|
|
|
return(true);
|
1999-12-29 12:17:41 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
function openURL(event, treeitem, root)
|
|
|
|
{
|
2006-07-27 18:48:55 +04:00
|
|
|
try {
|
2006-07-27 18:48:48 +04:00
|
|
|
if( pref ) {
|
|
|
|
var prefvalue = pref.GetBoolPref( "browser.search.use_double_clicks" );
|
|
|
|
mClickCount = prefvalue ? 2 : 1;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
mClickCount = 1;
|
|
|
|
}
|
|
|
|
catch(e) {
|
|
|
|
mClickCount = 1;
|
2006-07-27 18:48:55 +04:00
|
|
|
}
|
2006-07-27 18:48:48 +04:00
|
|
|
|
2006-07-27 18:48:55 +04:00
|
|
|
if ((event.button != 1) || (event.clickCount != mClickCount))
|
1999-12-29 12:17:41 +03:00
|
|
|
return(false);
|
|
|
|
|
|
|
|
if (treeitem.getAttribute("container") == "true")
|
|
|
|
return(false);
|
|
|
|
|
|
|
|
if (treeitem.getAttribute("type") == "http://home.netscape.com/NC-rdf#BookmarkSeparator")
|
|
|
|
return(false);
|
|
|
|
|
|
|
|
var id = treeitem.getAttribute('id');
|
|
|
|
if (!id)
|
|
|
|
return(false);
|
|
|
|
|
|
|
|
// rjc: add support for anonymous resources; if the node has
|
|
|
|
// a "#URL" property, use it, otherwise default to using the id
|
|
|
|
try
|
|
|
|
{
|
2006-07-27 18:49:01 +04:00
|
|
|
var theRootNode = document.getElementById(root);
|
1999-12-29 12:17:41 +03:00
|
|
|
var ds = null;
|
|
|
|
if (rootNode)
|
|
|
|
{
|
2006-07-27 18:49:01 +04:00
|
|
|
ds = theRootNode.database;
|
1999-12-29 12:17:41 +03:00
|
|
|
}
|
|
|
|
var rdf = Components.classes["component://netscape/rdf/rdf-service"].getService();
|
|
|
|
if (rdf) rdf = rdf.QueryInterface(Components.interfaces.nsIRDFService);
|
|
|
|
if (rdf)
|
|
|
|
{
|
|
|
|
if (ds)
|
|
|
|
{
|
|
|
|
var src = rdf.GetResource(id, true);
|
|
|
|
var prop = rdf.GetResource("http://home.netscape.com/NC-rdf#URL", true);
|
|
|
|
var target = ds.GetTarget(src, prop, true);
|
|
|
|
if (target) target = target.QueryInterface(Components.interfaces.nsIRDFLiteral);
|
|
|
|
if (target) target = target.Value;
|
|
|
|
if (target) id = target;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch(ex)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2006-07-27 18:48:56 +04:00
|
|
|
if ( window.content )
|
|
|
|
window.content.location = id;
|
|
|
|
else {
|
|
|
|
window.openDialog( "chrome://navigator/content/navigator.xul", "_blank", "chrome,all,dialog=no", id );
|
|
|
|
}
|
1999-12-29 12:17:41 +03:00
|
|
|
}
|
2006-07-27 18:48:34 +04:00
|
|
|
|
|
|
|
// this should go somewhere else.
|
|
|
|
function OpenSearch( tabName, forceDialogFlag, aSearchStr, engineURIs )
|
|
|
|
{
|
|
|
|
var searchMode = 0;
|
|
|
|
var searchEngineURI = null;
|
|
|
|
var autoOpenSearchPanel = false;
|
|
|
|
var defaultSearchURL = null;
|
|
|
|
|
|
|
|
try
|
|
|
|
{
|
|
|
|
if( pref ) {
|
|
|
|
searchMode = pref.GetIntPref("browser.search.powermode");
|
|
|
|
autoOpenSearchPanel = pref.GetBoolPref("browser.search.opensidebarsearchpanel");
|
|
|
|
if( !engineURIs )
|
|
|
|
searchEngineURI = pref.CopyCharPref("browser.search.defaultengine");
|
|
|
|
defaultSearchURL = pref.CopyCharPref("browser.search.defaulturl");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch(ex)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( !defaultSearchURL )
|
2006-07-27 18:49:02 +04:00
|
|
|
defaultSearchURL = "http://search.netscape.com/cgi-bin/search?search=";
|
2006-07-27 18:48:34 +04:00
|
|
|
|
|
|
|
if( searchMode == 1 || forceDialogFlag )
|
|
|
|
{
|
|
|
|
// Use a single search dialog
|
|
|
|
var windowManager = getService( "component://netscape/rdf/datasource?name=window-mediator", "nsIWindowMediator" );
|
|
|
|
var searchWindow = windowManager.getMostRecentWindow("search:window");
|
|
|
|
if (searchWindow)
|
|
|
|
{
|
|
|
|
searchWindow.focus();
|
|
|
|
if( searchWindow.loadPage )
|
|
|
|
searchWindow.loadPage( tabName, searchStr );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
top.openDialog("chrome://search/content/search.xul", "SearchWindow", "dialog=no,close,chrome,resizable", tabName, searchStr);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
var searchDS = Components.classes["component://netscape/rdf/datasource?name=internetsearch"].getService();
|
|
|
|
if( searchDS )
|
|
|
|
searchDS = searchDS.QueryInterface( Components.interfaces.nsIInternetSearchService );
|
|
|
|
if( searchDS )
|
|
|
|
{
|
|
|
|
if( !aSearchStr )
|
|
|
|
return false;
|
|
|
|
var escapedSearchStr = escape( aSearchStr );
|
|
|
|
searchDS.RememberLastSearchText( escapedSearchStr );
|
|
|
|
try
|
|
|
|
{
|
|
|
|
if( !engineURIs || ( engineURIs && engineURIs.length <= 1 ) ) {
|
|
|
|
// not called from sidebar or only one engine selected
|
|
|
|
if( engineURIs )
|
2006-07-27 18:49:02 +04:00
|
|
|
{
|
2006-07-27 18:48:34 +04:00
|
|
|
searchEngineURI = engineURIs[0];
|
2006-07-27 18:49:02 +04:00
|
|
|
gURL = "internetsearch:engine=" + searchEngineURI + "&text=" + escapedSearchStr;
|
|
|
|
}
|
2006-07-27 18:48:34 +04:00
|
|
|
// look up the correct search URL format for the given engine
|
|
|
|
var searchURL = searchDS.GetInternetSearchURL( searchEngineURI, escapedSearchStr );
|
|
|
|
if( searchURL )
|
2006-07-27 18:49:02 +04:00
|
|
|
{
|
2006-07-27 18:48:34 +04:00
|
|
|
defaultSearchURL = searchURL;
|
2006-07-27 18:49:02 +04:00
|
|
|
}
|
2006-07-27 18:48:34 +04:00
|
|
|
else
|
2006-07-27 18:49:02 +04:00
|
|
|
{
|
2006-07-27 18:48:34 +04:00
|
|
|
defaultSearchURL = defaultSearchURL + escapedSearchStr;
|
2006-07-27 18:49:02 +04:00
|
|
|
gURL = "";
|
|
|
|
}
|
2006-07-27 18:48:34 +04:00
|
|
|
// load the results page of selected or default engine in the content area
|
|
|
|
if( defaultSearchURL )
|
|
|
|
top.content.location.href = defaultSearchURL;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
// multiple providers
|
|
|
|
searchURL = "";
|
|
|
|
for( var i = 0; i < engineURIs.length; i++ )
|
|
|
|
{
|
|
|
|
if( searchURL == "" )
|
|
|
|
searchURL = "internetsearch:";
|
|
|
|
else
|
|
|
|
searchURL += "&";
|
|
|
|
searchURL += "engine=" + engineURIs[i];
|
|
|
|
}
|
|
|
|
searchURL += ( "&text=" + escapedSearchStr );
|
2006-07-27 18:49:02 +04:00
|
|
|
|
|
|
|
gURL = searchURL;
|
|
|
|
|
2006-07-27 18:48:34 +04:00
|
|
|
top.content.location.href = "chrome://search/content/internetresults.xul";
|
|
|
|
setTimeout("checkSearchProgress('" + searchURL + "')", 1000);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch(ex)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2006-07-27 18:48:35 +04:00
|
|
|
|
|
|
|
function switchTab( aPageIndex )
|
|
|
|
{
|
|
|
|
var deck = document.getElementById( "advancedDeck" );
|
|
|
|
deck.setAttribute( "index", aPageIndex );
|
2006-07-27 18:49:02 +04:00
|
|
|
|
|
|
|
// decide whether to show/hide/enable/disable save search query button
|
|
|
|
if (aPageIndex != 0) return(true);
|
|
|
|
|
|
|
|
var saveQueryButton = document.getElementById("saveQueryButton");
|
|
|
|
if (!saveQueryButton) return(true);
|
|
|
|
|
|
|
|
var resultsTree = document.getElementById("Tree");
|
|
|
|
if( !resultsTree) return(false);
|
|
|
|
var ds = resultsTree.database;
|
|
|
|
if (!ds) return(false);
|
|
|
|
|
|
|
|
var haveSearchRef = 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;
|
|
|
|
var target;
|
|
|
|
|
|
|
|
// look for last search URI
|
|
|
|
childProperty = rdf.GetResource("http://home.netscape.com/NC-rdf#ref", true);
|
|
|
|
target = ds.GetTarget(source, childProperty, true);
|
|
|
|
if (target) target = target.QueryInterface(Components.interfaces.nsIRDFLiteral);
|
|
|
|
if (target) target = target.Value;
|
|
|
|
if (target && target != "")
|
|
|
|
{
|
|
|
|
haveSearchRef = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (haveSearchRef == true)
|
|
|
|
saveQueryButton.removeAttribute("style", "visibility: collapse");
|
|
|
|
else saveQueryButton.setAttribute("style", "visibility: collapse");
|
|
|
|
|
2006-07-27 18:48:59 +04:00
|
|
|
return(true);
|
2006-07-27 18:48:35 +04:00
|
|
|
}
|
2006-07-27 18:49:01 +04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function fillContextMenu(name)
|
|
|
|
{
|
|
|
|
if (!name) return(false);
|
|
|
|
var popupNode = document.getElementById(name);
|
|
|
|
if (!popupNode) return(false);
|
|
|
|
// remove the menu node (which tosses all of its kids);
|
|
|
|
// do this in case any old command nodes are hanging around
|
|
|
|
while (popupNode.childNodes.length)
|
|
|
|
{
|
|
|
|
popupNode.removeChild(popupNode.childNodes[0]);
|
|
|
|
}
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
var target_item = document.popupNode.parentNode.parentNode;
|
|
|
|
if (target_item && target_item.nodeName == "treeitem")
|
|
|
|
{
|
|
|
|
if (target_item.getAttribute('selected') != 'true') {
|
|
|
|
treeNode.selectItem(target_item);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
var select_list = treeNode.selectedItems;
|
|
|
|
|
|
|
|
// perform intersection of commands over selected nodes
|
|
|
|
var cmdArray = new Array();
|
|
|
|
var selectLength = select_list.length;
|
|
|
|
if (selectLength == 0) selectLength = 1;
|
|
|
|
for (var nodeIndex=0; nodeIndex < selectLength; nodeIndex++)
|
|
|
|
{
|
|
|
|
var id = null;
|
|
|
|
|
|
|
|
// if nothing is selected, get commands for the "ref" of the tree root
|
|
|
|
if (select_list.length == 0)
|
|
|
|
{
|
|
|
|
id = treeNode.getAttribute("ref");
|
|
|
|
if (!id) break;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
var node = select_list[nodeIndex];
|
|
|
|
if (!node) break;
|
|
|
|
id = node.getAttribute("id");
|
|
|
|
if (!id) break;
|
|
|
|
}
|
|
|
|
|
|
|
|
var rdfNode = rdf.GetResource(id);
|
|
|
|
if (!rdfNode) break;
|
|
|
|
var cmdEnum = db.GetAllCmds(rdfNode);
|
|
|
|
if (!cmdEnum) break;
|
|
|
|
|
|
|
|
var nextCmdArray = new Array();
|
|
|
|
while (cmdEnum.HasMoreElements())
|
|
|
|
{
|
|
|
|
var cmd = cmdEnum.GetNext();
|
|
|
|
if (!cmd) break;
|
|
|
|
if (nodeIndex == 0)
|
|
|
|
{
|
|
|
|
cmdArray[cmdArray.length] = cmd;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
nextCmdArray[cmdArray.length] = cmd;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (nodeIndex > 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<select_list.length; nodeIndex++)
|
|
|
|
{
|
|
|
|
var node = select_list[nodeIndex];
|
|
|
|
if (!node) break;
|
|
|
|
var uri = node.getAttribute("ref");
|
|
|
|
if ((uri) || (uri == ""))
|
|
|
|
{
|
|
|
|
uri = node.getAttribute("id");
|
|
|
|
}
|
|
|
|
if (!uri) return(false);
|
|
|
|
|
|
|
|
var rdfNode = rdf.GetResource(uri);
|
|
|
|
if (!rdfNode) break;
|
|
|
|
|
|
|
|
// add node into selection array
|
|
|
|
selectionArray.AppendElement(rdfNode);
|
|
|
|
|
|
|
|
// get the parent's URI
|
|
|
|
var parentURI="";
|
|
|
|
var theParent = node;
|
|
|
|
while (theParent)
|
|
|
|
{
|
|
|
|
theParent = theParent.parentNode;
|
|
|
|
|
|
|
|
parentURI = theParent.getAttribute("ref");
|
|
|
|
if ((!parentURI) || (parentURI == ""))
|
|
|
|
{
|
|
|
|
parentURI = theParent.getAttribute("id");
|
|
|
|
}
|
|
|
|
if (parentURI != "") break;
|
|
|
|
}
|
|
|
|
if (parentURI == "") return(false);
|
|
|
|
|
|
|
|
var parentNode = rdf.GetResource(parentURI, true);
|
|
|
|
if (!parentNode) return(false);
|
|
|
|
|
|
|
|
// add parent arc and node into arguments array
|
|
|
|
argumentsArray.AppendElement(parentArc);
|
|
|
|
argumentsArray.AppendElement(parentNode);
|
|
|
|
}
|
|
|
|
|
|
|
|
// do the command
|
|
|
|
compositeDB.DoCommand( selectionArray, cmdResource, argumentsArray );
|
|
|
|
return(true);
|
|
|
|
}
|
2006-07-27 18:49:02 +04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function saveSearch()
|
|
|
|
{
|
|
|
|
var resultsTree = document.getElementById("Tree");
|
|
|
|
if( !resultsTree) return(false);
|
|
|
|
var ds = resultsTree.database;
|
|
|
|
if (!ds) return(false);
|
|
|
|
|
|
|
|
var lastSearchURI="";
|
|
|
|
var lastSearchText="";
|
|
|
|
|
|
|
|
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;
|
|
|
|
var target;
|
|
|
|
|
|
|
|
// look for last search URI
|
|
|
|
childProperty = rdf.GetResource("http://home.netscape.com/NC-rdf#ref", true);
|
|
|
|
target = ds.GetTarget(source, childProperty, true);
|
|
|
|
if (target) target = target.QueryInterface(Components.interfaces.nsIRDFLiteral);
|
|
|
|
if (target) target = target.Value;
|
|
|
|
if (target && target != "")
|
|
|
|
{
|
|
|
|
lastSearchURI = target;
|
|
|
|
}
|
|
|
|
|
|
|
|
// look for last search text
|
|
|
|
childProperty = rdf.GetResource("http://home.netscape.com/NC-rdf#LastText", true);
|
|
|
|
target = ds.GetTarget(source, childProperty, true);
|
|
|
|
if (target) target = target.QueryInterface(Components.interfaces.nsIRDFLiteral);
|
|
|
|
if (target) target = target.Value;
|
|
|
|
if (target && target != "")
|
|
|
|
{
|
|
|
|
lastSearchText = unescape(target);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
dump("Bookmark search Name: '" + lastSearchText + "'\n");
|
|
|
|
dump("Bookmark search URL: '" + lastSearchURI + "'\n");
|
|
|
|
|
|
|
|
if ((lastSearchURI == null) || (lastSearchURI == "")) return(false);
|
|
|
|
if ((lastSearchText == null) || (lastSearchText == "")) return(false);
|
|
|
|
|
|
|
|
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 = "Internet Search: '" + lastSearchText + "'"; // using " + gSites;
|
|
|
|
if (bmks) bmks.AddBookmark(lastSearchURI, searchTitle);
|
|
|
|
|
|
|
|
return(true);
|
|
|
|
}
|