зеркало из https://github.com/mozilla/pjs.git
267 строки
8.8 KiB
JavaScript
267 строки
8.8 KiB
JavaScript
/* ***** BEGIN LICENSE BLOCK *****
|
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
*
|
|
* The contents of this file are subject to the Mozilla 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/MPL/
|
|
*
|
|
* 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 Robert John Churchill.
|
|
* Portions created by the Initial Developer are Copyright (C) 1999
|
|
* the Initial Developer. All Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
* Robert John Churchill <rjc@netscape.com> (Original Author)
|
|
* Ben Goodger <ben@netscape.com>
|
|
* Daniel Matejka <danm@netscape.com>
|
|
* Eric Pollmann <pollmann@netscape.com>
|
|
* Ray Whitmer <rayw@netscape.com>
|
|
* Peter Annema <disttsc@bart.nl>
|
|
* Blake Ross <blakeross@telocity.com>
|
|
* Joe Hewitt <hewitt@netscape.com>
|
|
* Jan Varga <varga@utcruk.sk>
|
|
* Karsten Duesterloh <kd-moz@tprac.de>
|
|
*
|
|
* Alternatively, the contents of this file may be used under the terms of
|
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
* of those above. If you wish to allow use of your version of this file only
|
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
* use your version of this file under the terms of the MPL, indicate your
|
|
* decision by deleting the provisions above and replace them with the notice
|
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
* the provisions above, a recipient may use your version of this file under
|
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
*
|
|
* ***** END LICENSE BLOCK ***** */
|
|
|
|
function searchResultsOpenURL(event)
|
|
{
|
|
var tree = document.getElementById("resultsList");
|
|
var node = tree.contentView.getItemAtIndex(tree.currentIndex);
|
|
|
|
var url = node.id;
|
|
var rdf = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService();
|
|
if (rdf) rdf = rdf.QueryInterface(Components.interfaces.nsIRDFService);
|
|
if (rdf)
|
|
{
|
|
var ds = rdf.GetDataSource("rdf:internetsearch");
|
|
if (ds)
|
|
{
|
|
var src = rdf.GetResource(url, 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) url = target;
|
|
}
|
|
}
|
|
|
|
// Ignore "NC:" urls.
|
|
if (url.substring(0, 3) == "NC:")
|
|
return false;
|
|
|
|
if ("loadURI" in top)
|
|
top.loadURI(url);
|
|
else
|
|
top.content.location.href = url;
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
// Workaround for bug 196057 (double onload event): accept only the first onload event
|
|
// ( This workaround will fix bug 147068 (duplicate search results).
|
|
// Without this fix, xpfe\components\search\src\nsInternetSearchService.cpp will
|
|
// crash when removing the same tree node twice. )
|
|
// If bug 196057 should be fixed eventually, this workaround does no harm -
|
|
// nevertheless it should be removed then
|
|
var gbProcessOnloadEvent = true;
|
|
|
|
function onLoadInternetResults()
|
|
{
|
|
if (gbProcessOnloadEvent)
|
|
{ // forbid other onload events
|
|
gbProcessOnloadEvent = false;
|
|
|
|
// clear any previous results on load
|
|
var iSearch = Components.classes["@mozilla.org/rdf/datasource;1?name=internetsearch"]
|
|
.getService(Components.interfaces.nsIInternetSearchService);
|
|
iSearch.ClearResultSearchSites();
|
|
|
|
// the search URI is passed in as a parameter, so get it and then root the results list
|
|
var searchURI = top.content.location.href;
|
|
if (searchURI) {
|
|
const lastSearchURIPref = "browser.search.lastMultipleSearchURI";
|
|
var offset = searchURI.indexOf("?");
|
|
if (offset > 0) {
|
|
nsPreferences.setUnicharPref(lastSearchURIPref, searchURI); // evil
|
|
searchURI = searchURI.substr(offset+1);
|
|
loadResultsList(searchURI);
|
|
}
|
|
else {
|
|
searchURI = nsPreferences.copyUnicharPref(lastSearchURIPref, "");
|
|
offset = searchURI.indexOf("?");
|
|
if (offset > 0) {
|
|
nsPreferences.setUnicharPref(lastSearchURIPref, searchURI); // evil
|
|
searchURI = searchURI.substr(offset+1);
|
|
loadResultsList(searchURI);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function loadResultsList( aSearchURL )
|
|
{
|
|
var resultsTree = document.getElementById( "resultsList" );
|
|
if (!resultsTree) return false;
|
|
resultsTree.setAttribute("ref", decodeURI(aSearchURL));
|
|
return true;
|
|
}
|
|
|
|
|
|
|
|
function doEngineClick( event, aNode )
|
|
{
|
|
event.target.checked = true;
|
|
|
|
var html = null;
|
|
|
|
var resultsTree = document.getElementById("resultsList");
|
|
var contentArea = document.getElementById("resultsContent");
|
|
var splitter = document.getElementById("results-splitter");
|
|
var engineURI = aNode.id;
|
|
if (engineURI == "allEngines") {
|
|
resultsTree.removeAttribute("hidden");
|
|
splitter.removeAttribute("hidden");
|
|
}
|
|
else
|
|
{
|
|
resultsTree.setAttribute("hidden", "true");
|
|
splitter.setAttribute("hidden", "true");
|
|
try
|
|
{
|
|
var rdf = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService();
|
|
if (rdf) rdf = rdf.QueryInterface(Components.interfaces.nsIRDFService);
|
|
if (rdf)
|
|
{
|
|
var internetSearchStore = rdf.GetDataSource("rdf:internetsearch");
|
|
if (internetSearchStore)
|
|
{
|
|
var src = rdf.GetResource(engineURI, true);
|
|
var htmlProperty = rdf.GetResource("http://home.netscape.com/NC-rdf#HTML", true);
|
|
html = internetSearchStore.GetTarget(src, htmlProperty, true);
|
|
if ( html ) html = html.QueryInterface(Components.interfaces.nsIRDFLiteral);
|
|
if ( html ) html = html.Value;
|
|
}
|
|
}
|
|
}
|
|
catch(ex)
|
|
{
|
|
}
|
|
}
|
|
|
|
if ( html )
|
|
{
|
|
var doc = frames[0].document;
|
|
if (doc)
|
|
{
|
|
doc.open("text/html", "replace");
|
|
doc.writeln( html );
|
|
doc.close();
|
|
}
|
|
}
|
|
else
|
|
frames[0].document.location.href =
|
|
"chrome://communicator/locale/search/default.htm";
|
|
}
|
|
|
|
|
|
|
|
function doResultClick(node)
|
|
{
|
|
var theID = node.id;
|
|
if (!theID) return(false);
|
|
|
|
try
|
|
{
|
|
var rdf = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService();
|
|
if (rdf) rdf = rdf.QueryInterface(Components.interfaces.nsIRDFService);
|
|
if (rdf)
|
|
{
|
|
var internetSearchStore = rdf.GetDataSource("rdf:internetsearch");
|
|
if (internetSearchStore)
|
|
{
|
|
var src = rdf.GetResource(theID, true);
|
|
var urlProperty = rdf.GetResource("http://home.netscape.com/NC-rdf#URL", true);
|
|
var bannerProperty = rdf.GetResource("http://home.netscape.com/NC-rdf#Banner", true);
|
|
var htmlProperty = rdf.GetResource("http://home.netscape.com/NC-rdf#HTML", true);
|
|
|
|
var url = internetSearchStore.GetTarget(src, urlProperty, true);
|
|
if (url) url = url.QueryInterface(Components.interfaces.nsIRDFLiteral);
|
|
if (url) url = url.Value;
|
|
if (url)
|
|
{
|
|
var statusNode = document.getElementById("status-button");
|
|
if (statusNode)
|
|
{
|
|
statusNode.label = url;
|
|
}
|
|
}
|
|
|
|
var banner = internetSearchStore.GetTarget(src, bannerProperty, true);
|
|
if (banner) banner = banner.QueryInterface(Components.interfaces.nsIRDFLiteral);
|
|
if (banner) banner = banner.Value;
|
|
|
|
var target = internetSearchStore.GetTarget(src, htmlProperty, true);
|
|
if (target) target = target.QueryInterface(Components.interfaces.nsIRDFLiteral);
|
|
if (target) target = target.Value;
|
|
if (target)
|
|
{
|
|
var text = "<HTML><HEAD><TITLE>Search</TITLE><BASE TARGET='_top'></HEAD><BODY><FONT POINT-SIZE='9'>";
|
|
|
|
if (banner)
|
|
text += banner + "</A><BR>"; // add a </A> and a <BR> just in case
|
|
text += target;
|
|
text += "</FONT></BODY></HTML>"
|
|
|
|
var doc = frames[0].document;
|
|
doc.open("text/html", "replace");
|
|
doc.writeln(text);
|
|
doc.close();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch(ex)
|
|
{
|
|
}
|
|
return(true);
|
|
}
|
|
|
|
function listSelect(event)
|
|
{
|
|
var tree = document.getElementById("resultsList");
|
|
if (tree.view.selection.count != 1)
|
|
return false;
|
|
var selection = tree.contentView.getItemAtIndex(tree.currentIndex);
|
|
return doResultClick(selection);
|
|
}
|
|
|
|
function listClick(event)
|
|
{ // left double click opens URL
|
|
if (event.detail == 2 && event.button == 0)
|
|
searchResultsOpenURL(event);
|
|
return true; // always allow further click processing
|
|
}
|