greenstone.org greenstone wiki greenstone trac planet greenstone

root/greenstone3/trunk/web/search.html

http://svn.greenstone.org/greenstone3/trunk/web/search.html
Revision 10695, 8.2 kB (checked in by kjdon, 3 years ago)

Dave's basic AJAX search stuff

  • Property svn:keywords set to Author Date Id Revision
Line 
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
3 <html>
4 <head>
5 <title>AJAX GS3 Search</title>
6 <META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
7 <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
8 <style type="text/css">
9 <!--
10 BODY, P, LI { font-family: sans-serif; }
11 H2 {font-size: 90%;}
12 BUTTON {font-size: 0.8em; margin: 0 1em; color: red;}
13 #searchArea {background-color:white; }
14 #resultArea {background-color:white; padding: 0em 0em;}
15 #resultSummary {font-size: 80%; padding: 0.2 em 0.2em;}
16 #resultSummary P {padding: 0.2em 0.3em;}
17 #query {padding: 0.1em 0.5em; width: 400px; height: 150px; background-color:#d3d3d3;}
18 #timing {float:right; width: 250px; border: thin solid #d3d3d3; padding: 0.2em 0.2em; display: none;}
19 #resultList {   list-style-image: none;
20                                                 list-style-type: square;
21                                                 font-size: 85%; padding: 1em 0em 1em 2em;}
22 #resultList LI {padding: 0.3em 0em; }
23 -->
24 </style>
25 <script type="text/javascript" src="xmlextras.js">
26 </script> 
27 <script type="text/javascript" src="gs_ajax_utils.js">
28 </script> 
29 <script type="text/javascript">
30 <!--
31
32 localsiteServerAddress = "/gsdl3/services/localsite";
33 libraryAddress = "/gsdl3/library";
34 function loadAsync(sUri, SOAPMessage, callbackFunction) {
35    var xmlHttp = XmlHttp.create();
36    var async = true;
37    xmlHttp.open("POST", sUri, async);
38    xmlHttp.onreadystatechange = function () {
39       if (xmlHttp.readyState == 4){
40                 var result = xmlHttp.responseText;
41                         //getTitle2(xmlHttp.responseXML, xmlHttp.responseText);
42                         eval(callbackFunction);
43     }     
44    }
45    xmlHttp.setRequestHeader("SOAPAction", " ");
46    xmlHttp.setRequestHeader("Content-Type", "Content-Type: text/xml; charset=utf-8");
47  
48    xmlHttp.send(SOAPMessage);
49 }
50
51
52 function ajaxSearch() {
53
54 searchStartTime = new Date();
55
56 resultList = document.getElementById('resultList');
57 removeAllChildren(resultList);
58 resultSummary = document.getElementById('resultSummary');
59 removeAllChildren(resultSummary);
60
61 /*
62 for (i=0; i < 10; i++) {
63     listElement = document.createElement('li');
64     anchor = document.createElement('a');
65     anchor.setAttribute('href', url);
66     anchor.appendChild(document.createTextNode(  text));
67     listElement.appendChild(anchor);
68     resultList.appendChild(listElement);
69 }
70 */
71
72 queryText = document.getElementById('queryText').value;
73
74 maxdocs = newElementAtt('param', '', new Array('name', 'value'), new Array('maxDocs', '100') ) ;
75 level = newElementAtt('param', '', new Array('name', 'value'), new Array('level', 'Sec') ) ;
76 indexValue = newElementAtt('param', '', new Array('name', 'value'), new Array('index', 'ZZ') ) ;
77 matchMode = newElementAtt('param', '', new Array('name', 'value'), new Array('matchMode', 'some') ) ;
78 query = newElementAtt('param', '', new Array('name', 'value'), new Array('query', queryText) ) ;
79 caseValue = newElementAtt('param', '', new Array('name', 'value'), new Array('case', '1') ) ;
80 sortBy = newElementAtt('param', '', new Array('name', 'value'), new Array('sortBy', '1') ) ;
81 stem = newElementAtt('param', '', new Array('name', 'value'), new Array('stem', '1') ) ;
82
83
84 paramList = newElement('paramList', maxdocs + level + indexValue + matchMode + query + caseValue + sortBy + stem);
85
86 collection = document.getElementById('collectionText').value;
87 request = newElementAtt('request', paramList, new Array('lang', 'to', 'type', 'uid'), new Array('en',collection + '/TextQuery', 'process', '1'  ) );
88 message = newElement('message', request );
89 soapMessage = messageToSOAP(message);
90 loadAsync(localsiteServerAddress, soapMessage, 'getResults(xmlHttp.responseXML)');
91 }
92
93 function getResults(xmlDoc) {
94 idsReturnedTime = new Date();
95     metadataList = xmlDoc.getElementsByTagName('metadata');
96     for (i=0; i < metadataList.length; i++) {
97         metadata = metadataList[i];
98         if (isElement(metadata)) {
99                   nameAtt = metadata.getAttribute('name')
100                 if ( nameAtt == 'numDocsMatched') {
101                         numDocsMatched = getText(metadata);
102                 }
103                 if (nameAtt == 'numDocsReturned') {
104                         numDocsReturned = getText(metadata);
105                 }
106                 if (nameAtt  == 'query') {
107                         query = getText(metadata);
108                 }
109         }
110     }
111    
112     resultSummary = document.getElementById('resultSummary');
113     para = document.createElement('p');
114     para.appendChild(document.createTextNode('Query: ' + query + ' Number of Matching Docs: ' + numDocsMatched + ' Number of returned documents: ' + numDocsReturned));
115     resultSummary.appendChild(para);
116    
117     documentNodeList = xmlDoc.getElementsByTagName('documentNode');
118        
119     for (i=0; i < documentNodeList.length; i++) {
120         documentNode = documentNodeList[i];
121         if (isElement(documentNode)) {
122                 docIDArray[i] = documentNode.getAttribute('nodeID');
123         }
124     }
125    
126     var docsList = '';
127     for (i=0; i < docIDArray.length; i++) {
128         docsList += newElementAtt1('documentNode', '', 'nodeID', docIDArray[i]);
129     }
130        
131     docNodeList = newElement('documentNodeList', docsList);
132         collection = document.getElementById('collectionText').value;
133     param = newElementAtt('param', '', new Array('name', 'value'), new Array('metadata', 'Title') );
134     paramList = newElement('paramList', param);
135         request = newElementAtt('request', paramList + docNodeList, new Array('lang', 'to', 'type', 'uid'), new Array('en',collection + '/DocumentMetadataRetrieve', 'process', '1'  ) );
136     message = newElement('message', request );
137     soapMessage = messageToSOAP(message);
138         //alert(soapMessage);
139     loadAsync(localsiteServerAddress, soapMessage, 'displayResults(xmlHttp.responseXML)');
140 }
141
142
143 function displayResults(xmlDoc) {
144         metadataReturnedTime = new Date();
145         url1 = libraryAddress+'?a=d&d=';
146         url2 = '&c=' + document.getElementById('collectionText').value + '&dt=hierarchy';
147         resultList = document.getElementById('resultList');
148     metadataList = xmlDoc.getElementsByTagName('metadata');
149         //alert('in display results ' + metadataList.length + xmlDoc.xml);
150         for (i=0; i < metadataList.length; i++) {
151                           //alert('in display results ' + i);
152                 metadata = metadataList[i];
153                 if (isElement(metadata)) {
154                         if (metadata.getAttribute('name') == 'Title') {
155                                        
156                           listElement = document.createElement('li');
157                 anchor = document.createElement('a');
158                 anchor.setAttribute('href', url1 + docIDArray[i] + url2);
159                 anchor.appendChild(document.createTextNode(getText(metadata)) );
160                 listElement.appendChild(anchor);
161                 resultList.appendChild(listElement);
162                         }               
163                 }
164         }
165                         finishedTime = new Date();
166                         displayTime();
167                        
168 }
169
170 function displayTime() {
171 searchStart = document.getElementById('searchStart');
172 idsReturned = document.getElementById('idsReturned');
173 metadataReturned = document.getElementById('metadataReturned');
174 //removeAllChildren(searchStart);
175 //searchStart.appendChild(document.createTextNode(searchStartTime.getMilliseconds() + ' ms'))
176 removeAllChildren(idsReturned);
177 idsReturned.appendChild(document.createTextNode(idsReturnedTime.getMilliseconds() - searchStartTime.getMilliseconds()+ ' ms'))
178 removeAllChildren(metadataReturned);
179 metadataReturned.appendChild(document.createTextNode(metadataReturnedTime.getMilliseconds() - idsReturnedTime.getMilliseconds()+ ' ms'))
180 //alert(searchStartTime.getMilliseconds() + ' ' + idsReturnedTime.getMilliseconds() + ' ' + metadataReturnedTime.getMilliseconds() + ' ' + ' ' + finishedTime.getMilliseconds());
181 }
182
183
184 var docIDArray = new Array();
185 var searchStartTime, idsReturnedTime, metadataReturnedTime, finishedTime;
186
187
188
189
190 // -->
191 </script>
192 </head>
193 <body>
194
195
196
197 <div id="searchArea">
198
199 <div id="timing">
200 <p><strong>Timing</strong></p>
201 <table border="0" cellpadding="0" cellspacing="0" summary="">
202 <!-- <tr><td>Search started:</td><td id="searchStart"></td></tr> -->
203 <tr><td>Time to get IDs:</td><td id="idsReturned"></td></tr>
204 <tr><td>Time to get Metadata:</td><td id="metadataReturned"></td></tr>
205 </table>
206 </div> 
207
208 <div id="query"><h2>Search a Greenstone 3 Collection</h2>
209 <form action="">
210 <p><label for="collectionText">GS3 Collection:</label>
211 <input id="collectionText" type="text" value="gs2mgppdemo"/></p>
212
213 <p><input id="queryText" type="text" /><input id="searchButton" type="submit" value="Search" onclick="ajaxSearch();return false;"></input></p>
214
215 </form></div>
216 </div>
217
218 <div id="resultArea">
219 <div id="resultSummary"></div>
220 <ul id="resultList"></ul>
221 </div>
222  
223 </body>
224 </html>
Note: See TracBrowser for help on using the browser.