Monday, November 08, 2010 at 12:04 AM.
system.verbs.builtins.mainResponder.search.server.renderResultCallbacks.googleClone
on googleClone (adrinfo, ranking) {
<<Changes
<<8/11/02; 2:05:13 AM by JES
<<Created. A clone of the Google search result look/feel.
local (pta = html.getPageTableAddress ());
local (flIncludeSiteName = true);
if defined (pta^.flIncludeSiteNameInSearchResults) {
flIncludeSiteName = pta^.flIncludeSiteNameInSearchResults};
if not defined (pta^.lastSearchResultUrl) {
pta^.lastSearchResultUrl = ""};
if not defined (pta^.searchString) {
local (t); new (tableType, @t);
webserver.parseArgs (pta^.searchArgs, @t);
pta^.searchString = t.q};
local (htext);
on add (s) {
htext = htext + (s + "\r");};
local (urlForDisplay = adrinfo^.url);
bundle { //clean urlForDisplay
urlForDisplay = string.delete (urlForDisplay, 1, 7);
if urlForDisplay endswith "/index.html" {
urlForDisplay = string.mid (urlForDisplay, 1, sizeOf (urlForDisplay) - 10)}
else {
if urlForDisplay endswith "/default" {
urlForDisplay = string.mid (urlForDisplay, 1, sizeOf (urlForDisplay) - 7)}
else {
if urlForDisplay endswith "/default.html" {
urlForDisplay = string.mid (urlForDisplay, 1, sizeOf (urlForDisplay) - 12)}
else {
if urlForDisplay endswith "/index" {
urlForDisplay = string.mid (urlForDisplay, 1, sizeOf (urlForDisplay) - 5)}}}}};
local (flIndent = false);
if (urlForDisplay beginswith pta^.lastSearchResultUrl) {
flIndent = true}
else {
pta^.lastSearchResultUrl = urlForDisplay};
if flIndent {
add ("<tr><td style=\"padding-left:30px; padding-bottom:8px;\">")}
else {
add ("<tr><td style=\"padding-bottom:8px;\">")};
local (title = adrinfo^.title);
if flIncludeSiteName {
if defined (adrinfo^.sitename) {
if sizeOf (adrinfo^.sitename) > 0 {
if string.lower (adrinfo^.sitename) != string.lower (title) {
title = adrinfo^.sitename + ": " + title}}}};
bundle { //embolden search terms in the title
local (words = string.replaceAll (pta^.searchString, "\"", ""));
local (ctwords = string.countFields (words, " "));
local (lowertitle = string.lower (title));
for i = 1 to ctwords {
local (lowerword = string.lower (string.nthField (words, " ", i)));
lowertitle = string.replaceAll (lowertitle, lowerword, "<b>" + lowerword + "</b>")};
local (ct = sizeOf (lowertitle) - 3);
for i = 1 to ct {
if lowertitle[i] == '<' {
if lowertitle[i+1] == 'b' {
title = string.insert ("<b>", title, i)}
else { //closing tag
title = string.insert ("</b>", title, i)}}}};
add (html.getLink (title, adrinfo^.url) + "<br />");
local (lastline = urlForDisplay);
if defined (adrinfo^.text) { //add snippet
local (ct = sizeOf (adrinfo^.text));
if ct > 0 {
add (string.replaceAll (mainResponder.search.server.getSnippet (adrinfo^.text, pta^.searchString), "://", ":\\//") + "<br />");
lastline = lastline + (" - " + string.megabyteString (ct));}};
lastline = lastline + " - " + date.shortString (adrinfo^.lastModDate);
add ("<font color=\"#008000\" size=\"-1\" class=\"small\">" + lastline + "</font>");
if flIndent {
add ("</td></tr>")}
else {
add ("</td></tr>")};
return (htext)}
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.