/* ***** 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 (Original Author) * Ben Goodger * Daniel Matejka * Eric Pollmann * Ray Whitmer * Peter Annema * Blake Ross * Joe Hewitt * Jan Varga * Karsten Duesterloh * * 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 = "Search"; if (banner) text += banner + "
"; // add a and a
just in case text += target; text += "
" 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 }