1
var xmlhttp = new XMLHttpRequest ();
2
var parser = new DOMParser ();
6
var input_box = document.getElementById ("searchinput");
7
input_box.addEventListener ("keypress", InputKeypressHandler, false);
12
var input_box = document.getElementById ("searchinput");
13
input_box.addEventListener ("keypress", InputKeypressHandler, false);
16
function InputKeypressHandler (evt)
18
if (evt.which == 13) {
19
evt.stopPropagation ();
30
var query_str = document.getElementById ("searchinput").value;
31
//alert ("Searching for '" + query_str + "'");
32
if (query_str.length == 0) {
34
} else if (query_str == '42') {
35
window.location = "http://en.wikipedia.org/wiki/The_Answer_to_Life,_the_Universe,_and_Everything";
37
} else if (query_str == '4u7h0rz') {
38
window.location = "http://svn.gnome.org/viewvc/beagle/trunk/beagle/AUTHORS?view=markup";
42
var req_string = '<?xml version="1.0" encoding="utf-8"?> <RequestWrapper xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Message xsi:type="Query"> <IsIndexListener>false</IsIndexListener> <Parts> <Part xsi:type="QueryPart_Human"> <Logic>Required</Logic> <QueryString>type:WebHistory OR type:Bookmark</QueryString> </Part><Part xsi:type="QueryPart_Human"> <Logic>Required</Logic> <QueryString>' + query_str + '</QueryString> </Part> </Parts> <QueryDomain>Local System</QueryDomain> <MaxHits>20</MaxHits> </Message> </RequestWrapper> ';
44
xmlhttp.onreadystatechange = state_change_search;
45
xmlhttp.onerror = error_handler;
46
// If cross-site problem occurs,
47
// http://blog.dirolf.com/2007/06/enabling-cross-domain-ajax-in-firefox.html
48
xmlhttp.open ("POST", "http://localhost:4000/", true);
49
//XHR binary charset opt by mgran 2006 [http://mgran.blogspot.com]
50
xmlhttp.overrideMimeType ('text/txt; charset=utf-8'); // if charset is changed, need to handle bom
51
//xmlhttp.overrideMimeType('text/txt; charset=x-user-defined');
52
xmlhttp.send (req_string);
53
document.getElementById ("searchinput").disabled = true;
58
function error_handler (e)
60
var result_list = document.getElementById ("resultlist");
62
result_list.innerHTML = "<html:b>Error!</html:b><html:br />Beagle service needs to be running with the web interface enabled.<html:br /><html:a href='http://beagle-project.org/Beagle_Webinterface' onclick='return openlink(\"http://beagle-project.org/Beagle_Webinterface\");'>Beagle Webinterface</html:a>";
63
document.getElementById ("searchinput").disabled = false;
66
function state_change_search ()
68
if (xmlhttp.readyState == 4)
72
function HandleResults ()
74
if (xmlhttp.status != 200) {
79
document.getElementById ("searchinput").disabled = false;
81
//dump("Response:\n");
82
//dump(xmlhttp.responseText);
84
res = xmlhttp.responseText;
86
// if charset is x-user-defined split by \uF7FF
87
// if charset is utf-8, split by FFFD
88
// And dont ask me why!
89
var responses = res.split ('\uFFFD');
91
var result_str = "<html:ul>";
95
// Process hit xml nodes with xsl and append with javascript
96
for (var i = 0; i < responses.length; ++i) {
97
if (responses [i].length <= 0) {
101
var response_dom = parser.parseFromString (responses [i], "text/xml");
102
var msg_node = response_dom.getElementsByTagName ("Message") [0];
103
if (msg_node.getAttributeNS ('http://www.w3.org/2001/XMLSchema-instance', 'type') != 'HitsAddedResponse')
106
var hits = msg_node.getElementsByTagName ("Hit");
107
no_result &= (hits.length == 0);
109
for (var j = 0; j < hits.length; ++j) {
110
var uri = hits [j].getAttribute ("Uri");
111
uri = EscapeAmpersand (uri); // XHTML gotcha
113
var identifier = null;
114
var bookmark = false;
116
var properties = hits [j].getElementsByTagName ("Property");
117
for (var k = 0; k < properties.length; ++k) {
118
var key = properties [k].getAttribute ("Key");
120
if (key == "beagle:HitType" && (properties [k].getAttribute ("Value") == "Bookmark")) {
125
if (key == "dc:title") {
126
title = properties [k].getAttribute ("Value");
127
//title = reduce (title, 40, "..."); // FIXME
131
if (key == "dc:identifier")
132
identifier = properties [k].getAttribute ("Value");
139
title = uri.substr (0, 40) + "...";
141
//dump (uri + "," + title + "\n");
142
result_str += "<html:li>";
145
result_str += "<html:span>B</html:span>";
147
result_str += "<html:a href='";
149
result_str += "' onclick='return openlink(\"";
151
result_str += "\");'>";
153
result_str += "</html:a></html:li>";
158
result_str = "<html:b>No web pages found.</html:b>";
160
result_str += "</html:ul>";
164
var result_list = document.getElementById ("resultlist");
165
result_list.innerHTML = result_str;
168
// From http://sastools.com/b2/post/79394063
169
function reduce(str,l,p)
171
var words=str.split(" ");
172
var numWords=words.length;
175
for(w=0; w<numwords; ++w)
187
return output.join(" ")+p;
190
function openlink (link)
192
var mainWindow = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
193
.getInterface(Components.interfaces.nsIWebNavigation)
194
.QueryInterface(Components.interfaces.nsIDocShellTreeItem)
196
.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
197
.getInterface(Components.interfaces.nsIDOMWindow);
199
var browser = mainWindow.getBrowser ();
200
browser.selectedTab = browser.addTab (link);
205
function EscapeAmpersand (url)
207
return url.replace (/&/g, "&");