source: main/trunk/greenstone2/web/script/gsajaxapi.js@ 27306

Last change on this file since 27306 was 27281, checked in by ak19, 11 years ago

Preliminary working version of display of existing user comments. Tested and works. Need to optimise it so that we don't repeatedly ask for each username, comment and timestamp from the archives (by calling the new getArchivesMeta function in gsajaxapi), but instead need to be able to ask for all such meta to be returned in an array of triples format.

File size: 13.6 KB
Line 
1
2function GSAjaxAPI(gwcgi,collect)
3{
4 var gwcgi_ = gwcgi;
5 var collect_ = collect;
6
7
8 this.fullDomainURL = function(localURL)
9 {
10 return window.location.protocol+'//'+window.location.host+localURL;
11 }
12
13 this.apiURL = function(apiProg)
14 {
15 //get the location of the cgi program
16 splitpos = gwcgi_.lastIndexOf("/");
17
18 var mdserver;
19 if (splitpos >= 0) {
20 mdserver = gwcgi.substring(0,(splitpos+1)) + apiProg;
21 }
22 else {
23 mdserver = apiProg;
24 }
25
26 return mdserver;
27 }
28
29 this.metadataserverURL = function()
30 {
31 return this.apiURL("metadata-server.pl");
32 }
33
34 this.indexserverURL = function()
35 {
36 return this.apiURL("index-server.pl");
37 }
38
39 this.buildserverURL = function()
40 {
41 return this.apiURL("build-server.pl");
42 }
43
44 this.explodeserverURL = function()
45 {
46 return this.apiURL("explode-server.pl");
47 }
48
49 this.myspaceserverURL = function()
50 {
51 return this.apiURL("myspace-server.pl");
52 }
53
54
55 this.urlGetAsync = function(url,callback)
56 {
57 var xmlHttp;
58 try {
59 // Firefox, Opera 8.0+, Safari
60 xmlHttp=new XMLHttpRequest();
61 }
62 catch (e) {
63 // Internet Explorer
64 try {
65 xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
66 }
67 catch (e) {
68 try {
69 xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
70 }
71 catch (e) {
72 alert("Your browser does not support AJAX!");
73 return false;
74 }
75 }
76 }
77
78 var typeof_callback = typeof(callback);
79 if ((typeof_callback == "string") || (typeof_callback == "number") || (typeof_callback == "boolean")) {
80 var locid = callback;
81
82 xmlHttp.onreadystatechange=function() {
83 if(xmlHttp.readyState==4) {
84 if (locelem != null) {
85 var locelem = document.getElementById(locid);
86
87 locelem.innerHTML = xmlHttp.responseText;
88 }
89 }
90 }
91 }
92 else if (typeof_callback == "function") {
93 xmlHttp.onreadystatechange=function() {
94 if(xmlHttp.readyState==4) {
95 callback(xmlHttp);
96 }
97 }
98 }
99 else {
100 alert("Unrecognized type of callback value: " + typeof_callback);
101 }
102
103 xmlHttp.open("GET",url,true);
104 xmlHttp.send(null);
105 }
106
107
108 this.urlGetSync = function(url)
109 {
110 // alert("url = " + url);
111
112 var xmlHttp;
113 try {
114 // Firefox, Opera 8.0+, Safari
115 xmlHttp=new XMLHttpRequest();
116 }
117 catch (e) {
118 // Internet Explorer
119 try {
120 xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
121 }
122 catch (e) {
123 try {
124 xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
125 }
126 catch (e) {
127 alert("Your browser does not support AJAX!");
128 return false;
129 }
130 }
131 }
132
133 xmlHttp.open("GET",url,false);
134 xmlHttp.send(null);
135
136 // alert("response = '" + xmlHttp.responseText + "'");
137
138 return xmlHttp.responseText;
139 }
140
141 // New, an Ajax Synchronous Post method.
142// http://www.degraeve.com/reference/simple-ajax-example.php
143// Async vs Sync: http://www.w3schools.com/ajax/ajax_xmlhttprequest_send.asp
144// Also:
145// http://stackoverflow.com/questions/6312447/in-an-ajax-post-do-i-need-to-urlencode-parameters-before-sending
146// http://api.jquery.com/jQuery.post/
147// http://www.w3schools.com/ajax/ajax_xmlhttprequest_send.asp
148 this.urlPostSync = function(scriptURL, params) {
149 var xmlHttp=false;
150 try {
151 // Firefox, Opera 8.0+, Safari
152 xmlHttp=new XMLHttpRequest();
153 }
154 catch (e) {
155 // Internet Explorer
156 try {
157 xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
158 }
159 catch (e) {
160 try {
161 xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
162 }
163 catch (e) {
164 alert("Your browser does not support AJAX!");
165 return false;
166 }
167 }
168 }
169
170 // e.g. scriptURL: /greenstone/cgi-bin/metadata-server.pl
171 xmlHttp.open('POST', scriptURL, false); // false means synchronous
172 xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
173
174 // If asynchronous:
175// xmlHttp.onreadystatechange = function() {
176// if (xmlHttp.readyState == 4) {
177// updatepage(xmlHttp.responseText);
178// }
179// }
180
181 xmlHttp.send(params); // needs to be escaped/encoded
182
183 //alert(xmlHttp.responseText); // if synchronous, process xmlHttp.responseText AFTER send() call
184 return xmlHttp.responseText;
185}
186
187 this.setLiveMetadata = function(id,metaname,metavalue)
188 {
189 var mdserver = this.metadataserverURL();
190
191 var url = mdserver + "?a=set-live-metadata";
192 url += "&c="+collect_;
193 url += "&d="+id;
194 url += "&metaname=" + metaname;
195 url += "&metavalue=" + metavalue;
196
197 this.urlGetSync(url);
198 }
199
200 // New
201 // The where parameter can be specified as one or more of: import, archives, index, live
202 // separated by |. If null, it is assumed to be index which is the original default
203 // behaviour of calling set-metadata. E.g. where=import|archives|index
204 this.setMetadata = function(docid,metaname,metapos,metavalue,metamode,where)
205 {
206 var mdserver = this.metadataserverURL();
207
208 var params = "a=set-metadata";
209 if(where != null) {
210 params += "&where=" + where; // if where not specified, meta-server will default to setting index meta
211 //} else {
212 // params += "&where=import|archives|index";
213 }
214 params += "&c="+collect_;
215 params += "&d="+docid;
216 params += "&metaname=" + metaname;
217 if (metapos!=null) {
218 params += "&metapos=" + metapos;
219 }
220 params += "&metavalue=" + metavalue;
221 if (metamode!=null) {
222 params += "&metamode=" + metamode;
223 }
224
225 //this.urlGetSync(mdserver + "?" + params);
226 this.urlPostSync(mdserver,params);
227 }
228
229 // New
230 // The where parameter can be specified as one or more of: import, archives, index, live
231 // separated by |. If null, it is assumed to be index which is the original default
232 // behaviour of calling set-metadata-array). E.g. where=import|archives|index
233 this.setMetadataArray = function(docArray,metamode,where)
234 {
235 docArrayJSON = JSON.stringify(docArray);
236
237 var mdserver = this.metadataserverURL();
238
239 var params = "a=" + escape("set-metadata-array"); //"a=set-metadata-array";
240 if(where != null) {
241 params += "&where=" + escape(where); // if where not specified, meta-server will default to setting index meta
242 //} else {
243 // params += "&where=import|archives|index";
244 }
245 params += "&c="+escape(collect_);
246 params += "&json="+escape(docArrayJSON);
247
248 if (metamode!=null) {
249 params += "&metamode=" + escape(metamode);
250 }
251
252 //this.urlGetSync(mdserver + "?" + params);
253 this.urlPostSync(mdserver,params);
254 }
255
256 // New
257 this.getArchivesMetadata = function(docoid,metaname,metapos)
258 {
259 var mdserver = this.metadataserverURL();
260
261 var url = mdserver + "?a=get-archives-metadata";
262 url += "&c="+collect_;
263 url += "&d="+docoid;
264 url += "&metaname=" + metaname;
265 if (metapos!=null) {
266 url += "&metapos=" + metapos;
267 }
268
269 //alert("In getArchivesMeta. URL: " + url)
270 return this.urlGetSync(url); //Once this works, make it POST
271 }
272
273 this._setMetadata = function(mode,docid,metaname,metapos,metavalue,metamode)
274 {
275 var mdserver = this.metadataserverURL();
276
277 var params = "a=set" + mode + "-metadata";
278 params += "&c="+collect_;
279 params += "&d="+docid;
280 params += "&metaname=" + metaname;
281 if (metapos!=null) {
282 params += "&metapos=" + metapos;
283 }
284 params += "&metavalue=" + metavalue;
285 if (metamode!=null) {
286 params += "&metamode=" + metamode;
287 }
288
289 this.urlGetSync(mdserver + "?" + params);
290 //this.urlPostSync(mdserver,params);
291 }
292
293
294 this._setDocumentArrayMetadata = function(mode,docArray,metamode)
295 {
296 docArrayJSON = JSON.stringify(docArray);
297
298 var mdserver = this.metadataserverURL();
299
300 var params = "a=set" + mode + "-metadata-array";
301 params += "&c="+collect_;
302 params += "&json="+docArrayJSON;
303
304 if (metamode!=null) {
305 params += "&metamode=" + metamode;
306 }
307
308 this.urlGetSync(mdserver + "?" + params);
309
310 }
311
312
313 this.setDocumentMetadata = function(docid,metaname,metapos,metavalue)
314 {
315 // Allow for three param call to function, where metapos is missed out
316 if (metavalue==null) {
317 // 4 param case
318 metavalue = metapos;
319 metapos = null;
320 }
321
322 this._setMetadata("",docid,metaname,metapos,metavalue);
323 this._setMetadata("-archives",docid,metaname,metapos,metavalue,"override");
324
325 }
326
327 this.setDocumentArrayMetadata = function(docArray,metamode)
328 {
329 //showDialog('Greenstone Javascript API','This sequence of changes has been commited into the system.','success', 2);
330
331 this._setDocumentArrayMetadata("",docArray,metamode);
332 this._setDocumentArrayMetadata("-archives",docArray,metamode);
333 }
334
335 this.setNewDocumentMetadata = function(docid,metaname,metavalue)
336 {
337 this._setMetadata("",docid,metaname,null,metavalue);
338 this._setMetadata("-archives",docid,metaname,null,metavalue,"accumulate");
339 }
340
341 this.setImportMetadata = function(docid,metaname,metapos,metavalue)
342 {
343 this._setMetadata("-import",docid,metaname,metapos,metavalue,"override");
344 }
345
346
347 this.explodeDocument = function(docid)
348 {
349 var exserver = this.explodeserverURL();
350
351 var url = exserver + "?a=explode-document";
352 url += "&c="+collect_;
353 url += "&d="+docid;
354
355 this.urlGetSync(url);
356 }
357
358 this.deleteDocument = function(docid,onlyAdd)
359 {
360 var exserver = this.explodeserverURL();
361
362 var url = exserver + "?a=delete-document";
363 url += "&c="+collect_;
364 params += "&onlyadd="+onlyAdd;
365 url += "&d="+docid;
366
367 this.urlGetSync(url);
368 }
369
370 this.deleteDocumentArray = function(docArray,onlyAdd)
371 {
372 docArrayJSON = JSON.stringify(docArray);
373
374 var exserver = this.explodeserverURL();
375
376 var params = "a=delete-document-array";
377 params += "&c="+collect_;
378 params += "&onlyadd="+onlyAdd;
379 params += "&json="+docArrayJSON;
380
381 this.urlGetSync(exserver + "?" + params);
382
383 }
384
385
386 this.cloneDocument = function(docid,toCollect)
387 {
388 var msserver = this.myspaceserverURL();
389
390 var url = msserver + "?a=clone";
391 url += "&c="+collect_;
392 url += "&d="+docid;
393 url += "&toCollect="+toCollect;
394
395 this.urlGetSync(url);
396 }
397
398 // consider name change to reindexDocument
399 this.documentReindex = function(docid)
400 {
401 var mdserver = this.metadataserverURL();
402
403 var url = mdserver + "?a=reindex-document";
404 url += "&c="+collect_;
405 url += "&d="+docid;
406
407 this.urlGetSync(url);
408 }
409
410
411 this.reindexCollection = function(mode,callback)
412 {
413 if (mode==null) {
414 mode = "incremental";
415 }
416
417 var idserver = this.indexserverURL();
418
419 var url = idserver + "?a=" + mode + "-rebuild";
420 url += "&c="+collect_;
421
422 this.urlGetAsync(url,callback);
423 }
424
425
426 this.buildByManifestGeneral = function(hashargs)
427 {
428 var idserver = this.buildserverURL();
429
430 var url = idserver + "?a=build-by-manifest";
431 url += "&c="+collect_;
432
433 if (hashargs["index-files"] != undefined) {
434 url += "&index-files=" + JSON.stringify(hashargs["index-files"]);
435 }
436
437 if (hashargs["reindex-files"] != undefined) {
438 url += "&reindex-files=" + JSON.stringify(hashargs["reindex-files"]);
439 }
440 if (hashargs["delete-OIDs"] != undefined) {
441 url += "&delete-OIDs=" + JSON.stringify(hashargs["delete-OIDs"]);
442 }
443
444 this.urlGetSync(url);
445 }
446
447 this.indexByManifest = function(docidArray)
448 {
449 var hashargs = {};
450 hashargs["index-files"] = docidArray;
451 this.buildByManifestGeneral(hashargs);
452 }
453
454 this.reindexByManifest = function(docidArray)
455 {
456 var hashargs = {};
457 hashargs["reindex-files"] = docidArray;
458 this.buildByManifestGeneral(hashargs);
459 }
460 this.deleteByManifest = function(docidArray)
461 {
462 var hashargs = {};
463 hashargs["delete-OIDs"] = docidArray;
464 this.buildByManifestGeneral(hashargs);
465 }
466
467 this.getLiveMetadata = function(id,metaname)
468 {
469 var mdserver = this.metadataserverURL();
470
471 var url = mdserver + "?a=get-live-metadata";
472 url += "&c="+collect_;
473 url += "&d="+id;
474 url += "&metaname=" + metaname;
475
476 var metavalue = this.urlGetSync(url);
477
478 return metavalue;
479 }
480
481 this.getDocumentMetadata = function(docoid,metaname,metapos)
482 {
483 var mdserver = this.metadataserverURL();
484
485 var url = mdserver + "?a=get-metadata";
486 url += "&c="+collect_;
487 url += "&d="+docoid;
488 url += "&metaname=" + metaname;
489 if (metapos!=null) {
490 url += "&metapos=" + metapos;
491 }
492
493 return this.urlGetSync(url);
494 }
495
496 this.removeLiveMetadata = function(id,metaname)
497 {
498 var mdserver = this.metadataserverURL();
499
500 var url = mdserver + "?a=remove-live-metadata";
501 url += "&c="+collect_;
502 url += "&d="+id;
503 url += "&metaname=" + metaname;
504
505 this.urlGetSync(url);
506 }
507
508 this.removeDocumentMetadata = function(docid,metaname,metapos)
509 {
510 var mdserver = this.metadataserverURL();
511
512 var url = mdserver + "?a=remove-metadata";
513 url += "&c="+collect_;
514 url += "&d="+docid;
515 url += "&metaname=" + metaname;
516 if (metapos!=null) {
517 url += "&metapos=" + metapos;
518 }
519
520 this.urlGetSync(url);
521 }
522
523 return true;
524
525}
Note: See TracBrowser for help on using the repository browser.