source: main/trunk/greenstone3/web/interfaces/oran/js/javascript-global-functions.js@ 25142

Last change on this file since 25142 was 25142, checked in by sjm84, 12 years ago

Added the ability to edit the document directly on the page

File size: 12.5 KB
Line 
1gs.functions = new Array();
2
3gs.functions.ajaxRequest = function()
4{
5 var activexmodes=["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"];
6 if(window.ActiveXObject)
7 {
8 for (var i=0; i<activexmodes.length; i++)
9 {
10 try
11 {
12 return new ActiveXObject(activexmodes[i]);
13 }
14 catch(e){}
15 }
16 }
17 else if (window.XMLHttpRequest)
18 {
19 return new XMLHttpRequest();
20 }
21 else
22 {
23 return false
24 }
25}
26
27gs.functions.getElementsByClassName = function(cl)
28{
29 var nodes = new Array();
30 var classRegEx = new RegExp('\\b'+cl+'\\b');
31 var allElems = document.getElementsByTagName('*');
32
33 for (var i = 0; i < allElems.length; i++)
34 {
35 var classes = allElems[i].className;
36 if (classRegEx.test(classes))
37 {
38 nodes.push(allElems[i]);
39 }
40 }
41 return nodes;
42};
43
44gs.functions.makeToggle = function(buttons, divs)
45{
46 var buttonArray = (buttons.length) ? buttons : [buttons];
47 var divArray = (divs.length) ? divs : [divs];
48
49 for(var i = 0; i < buttonArray.length; i++)
50 {
51 buttonArray[i].onclick = function()
52 {
53 for(var j = 0; j < divArray.length; j++)
54 {
55 if(divArray[j].style.display == "none")
56 {
57 divArray[j].style.display = "block";
58 }
59 else
60 {
61 divArray[j].style.display = "none";
62 }
63 }
64
65 for(var j = 0; j < buttonArray.length; j++)
66 {
67 if(buttonArray[j].getAttribute("src") == gs.imageURLs.collapse)
68 {
69 buttonArray[j].setAttribute("src", gs.imageURLs.expand);
70 }
71 else if(buttonArray[j].getAttribute("src") == gs.imageURLs.expand)
72 {
73 buttonArray[j].setAttribute("src", gs.imageURLs.collapse);
74 }
75 }
76 };
77 }
78}
79
80gs.functions.buildCollections = function(collections, finalFunction)
81{
82 if(!collections || collections.length == 0)
83 {
84 console.log("List of collections to build is empty");
85 return;
86 }
87
88 var counter = 0;
89 var buildFunction = function()
90 {
91 var ajax = new gs.functions.ajaxRequest();
92 ajax.open("GET", _baseURL + "?a=g&rt=r&ro=1&s=BuildCollection&s1.collection=" + collections[counter]);
93 ajax.onreadystatechange = function()
94 {
95 if(ajax.readyState == 4 && ajax.status == 200)
96 {
97 var text = ajax.responseText;
98 var xml = validateXML(text);
99
100 if(!xml || checkForErrors(xml))
101 {
102 console.log("Could not build collection -> " + collections[counter] + ", aborting");
103 return;
104 }
105
106 var status = xml.getElementsByTagName("status")[0];
107 var pid = status.getAttribute("pid");
108
109 startCheckLoop(pid, "BuildCollection", function()
110 {
111 var localAjax = new gs.functions.ajaxRequest();
112 localAjax.open("GET", _baseURL + "?a=g&rt=r&ro=1&s=ActivateCollection&s1.collection=" + collections[counter], true);
113 localAjax.onreadystatechange = function()
114 {
115 if(localAjax.readyState == 4 && localAjax.status == 200)
116 {
117 var localText = localAjax.responseText;
118 var localXML = validateXML(localText);
119
120 if(!xml || checkForErrors(xml))
121 {
122 console.log("Could not activate collection -> " + collections[counter] + ", aborting");
123 return;
124 }
125
126 var localStatus = localXML.getElementsByTagName("status")[0];
127 if(localStatus)
128 {
129 var localPID = localStatus.getAttribute("pid");
130 startCheckLoop(localPID, "ActivateCollection", function()
131 {
132 if (++counter == _collections.length)
133 {
134 //Run this function once we are done building all the collections
135 if(finalFunction){finalFunction();}
136 }
137 else
138 {
139 buildFunction();
140 }
141 });
142 }
143 }
144 }
145 localAjax.send();
146 });
147 }
148 }
149 ajax.send();
150 }
151 buildFunction();
152}
153
154function startCheckLoop(pid, serverFunction, callbackFunction)
155{
156 var ajaxFunction = function()
157 {
158 var ajax = new gs.functions.ajaxRequest();
159 ajax.open("GET", _baseURL + "?a=g&rt=s&ro=1&s=" + serverFunction + "&s1.pid=" + pid, true);
160 ajax.onreadystatechange = function()
161 {
162 if(ajax.readyState == 4 && ajax.status == 200)
163 {
164 var text = ajax.responseText;
165 var xml = validateXML(text);
166
167 if(!xml || checkForErrors(xml))
168 {
169 console.log("Could not check status of " + serverFunction + ", there was an error in the XML, aborting");
170 return;
171 }
172
173 var status = xml.getElementsByTagName("status")[0];
174 var code = status.getAttribute("code");
175
176 if (code == COMPLETED || code == SUCCESS)
177 {
178 callbackFunction();
179 }
180 else if (code == HALTED || code == ERROR)
181 {
182 console.log("Could not check status of " + serverFunction + ", there was an error on the server, aborting");
183 }
184 else
185 {
186 setTimeout(ajaxFunction, 1000);
187 }
188 }
189 }
190 ajax.send();
191 }
192 ajaxFunction();
193}
194
195function callMetadataServer(callingFunction, url, responseFunction)
196{
197 var ajax = new gs.functions.ajaxRequest();
198 ajax.open("GET", url, true);
199 ajax.onreadystatechange = function()
200 {
201 if(ajax.readyState == 4 && ajax.status == 200)
202 {
203 console.log("(" + callingFunction + ") Response received from server: " + ajax.responseText);
204
205 if(responseFunction != null)
206 {
207 responseFunction(ajax.responseText);
208 }
209 }
210 else if(ajax.readyState == 4)
211 {
212 console.log("(" + callingFunction + ") Failed");
213 }
214 }
215 ajax.send();
216}
217
218/*************************
219* SET METADATA FUNCTIONS *
220*************************/
221
222gs.functions.setImportMetadata = function(collection, site, documentID, metadataName, metadataValue, prevMetadataValue, metamode, responseFunction)
223{
224 callMetadataServer("setImportMetadata", "cgi-bin/metadata-server.pl?a=set-import-metadata&c=" + collection + "&site=" + site + "&d=" + documentID + "&metaname=" + metadataName + "&metavalue=" + metadataValue + "&prevmetavalue=" + prevMetadataValue + "&metamode=" + metamode, responseFunction);
225}
226
227gs.functions.setArchivesMetadata = function(collection, site, documentID, metadataName, metadataPosition, metadataValue, prevMetadataValue, metamode, responseFunction)
228{
229 if(metadataPosition != null)
230 {
231 callMetadataServer("setArchivesMetadata", "cgi-bin/metadata-server.pl?a=set-archives-metadata&c=" + collection + "&site=" + site + "&d=" + documentID + "&metaname=" + metadataName + "&metapos=" + metadataPosition + "&metavalue=" + metadataValue + "&metamode=" + metamode, responseFunction);
232 }
233 else if(prevMetadataValue != null)
234 {
235 callMetadataServer("setArchivesMetadata", "cgi-bin/metadata-server.pl?a=set-archives-metadata&c=" + collection + "&site=" + site + "&d=" + documentID + "&metaname=" + metadataName + "&metavalue=" + metadataValue + "&prevmetavalue=" + prevMetadataValue + "&metamode=" + metamode, responseFunction);
236 }
237 else
238 {
239 callMetadataServer("setArchivesMetadata", "cgi-bin/metadata-server.pl?a=set-archives-metadata&c=" + collection + "&site=" + site + "&d=" + documentID + "&metaname=" + metadataName + "&metavalue=" + metadataValue + "&metamode=" + metamode, responseFunction);
240 }
241}
242
243gs.functions.setIndexMetadata = function(collection, site, documentID, metadataName, metadataPosition, metadataValue, prevMetadataValue, metamode, responseFunction)
244{
245 if(metadataPosition != null)
246 {
247 callMetadataServer("setIndexMetadata", "cgi-bin/metadata-server.pl?a=set-metadata&c=" + collection + "&site=" + site + "&d=" + documentID + "&metaname=" + metadataName + "&metapos=" + metadataPosition + "&metavalue=" + metadataValue + "&metamode=" + metamode, responseFunction);
248 }
249 else if(prevMetadataValue != null)
250 {
251 callMetadataServer("setIndexMetadata", "cgi-bin/metadata-server.pl?a=set-metadata&c=" + collection + "&site=" + site + "&d=" + documentID + "&metaname=" + metadataName + "&metavalue=" + metadataValue + "&prevmetavalue=" + prevMetadataValue + "&metamode=" + metamode, responseFunction);
252 }
253}
254
255gs.functions.setMetadata = function(collection, site, documentID, metadataName, metadataValue, metamode, responseFunction)
256{
257 var nameArray = ["setImportMetadata", "setArchivesMetadata", "setIndexMetadata"];
258 var functionArray = ["set-import-metadata", "set-archives-metadata", "set-metadata"];
259
260 for(var i = 0; i < nameArray.length; i++)
261 {
262 callMetadataServer(nameArray[i], "cgi-bin/metadata-server.pl?a=" + functionArray[i] + "&c=" + collection + "&site=" + site + "&d=" + documentID + "&metaname=" + metadataName + "&metavalue=" + metadataValue + "&metamode=" + metamode, responseFunction);
263 }
264}
265
266/*************************
267* GET METADATA FUNCTIONS *
268*************************/
269
270gs.functions.getImportMetadata = function(collection, site, documentID, metadataName, responseFunction)
271{
272 var url = "cgi-bin/metadata-server.pl?a=get-import-metadata&c=" + collection + "&site=" + site + "&d=" + documentID + "&metaname=" + metadataName;
273 callMetadataServer("getImportMetadata", url, function(responseText)
274 {
275 var metadata = new GSMetadata(collection, site, documentID, metadataName, null, responseText);
276 if(responseFunction != null)
277 {
278 responseFunction(metadata);
279 }
280 });
281}
282
283gs.functions.getArchivesMetadata = function(collection, site, documentID, metadataName, metadataPosition, responseFunction)
284{
285 var url = "cgi-bin/metadata-server.pl?a=get-archives-metadata&c=" + collection + "&site=" + site + "&d=" + documentID + "&metaname=" + metadataName;
286 if(metadataPosition != null)
287 {
288 url += "&metapos=" + metadataPosition;
289 }
290
291 callMetadataServer("getArchivesMetadata", url, function(responseText)
292 {
293 var metadata = new GSMetadata(collection, site, documentID, metadataName, metadataPosition, responseText);
294 if(responseFunction != null)
295 {
296 responseFunction(metadata);
297 }
298 });
299}
300
301gs.functions.getIndexMetadata = function(collection, site, documentID, metadataName, metadataPosition, responseFunction)
302{
303 var url = "cgi-bin/metadata-server.pl?a=get-metadata&c=" + collection + "&site=" + site + "&d=" + documentID + "&metaname=" + metadataName;
304 if(metadataPosition != null)
305 {
306 url += "&metapos=" + metadataPosition;
307 }
308
309 callMetadataServer("getIndexMetadata", url, function(responseText)
310 {
311 var metadata = new GSMetadata(collection, site, documentID, metadataName, metadataPosition, responseText);
312
313 if(responseFunction != null)
314 {
315 responseFunction(metadata);
316 }
317 });
318}
319
320/****************************
321* REMOVE METADATA FUNCTIONS *
322****************************/
323
324gs.functions.removeImportMetadata = function(collection, site, documentID, metadataName, metadataValue, responseFunction)
325{
326 callMetadataServer("removeImportMetadata", "cgi-bin/metadata-server.pl?a=remove-import-metadata&c=" + collection + "&site=" + site + "&d=" + documentID + "&metaname=" + metadataName + "&metavalue=" + metadataValue, responseFunction);
327}
328
329gs.functions.removeArchivesMetadata = function(collection, site, documentID, metadataName, metadataPosition, metadataValue, responseFunction)
330{
331 if(metadataPosition != null)
332 {
333 callMetadataServer("removeArchiveMetadata", "cgi-bin/metadata-server.pl?a=remove-archives-metadata&c=" + collection + "&site=" + site + "&d=" + documentID + "&metaname=" + metadataName + "&metapos=" + metadataPosition, responseFunction);
334 }
335 else if(metadataValue != null)
336 {
337 callMetadataServer("removeArchiveMetadata", "cgi-bin/metadata-server.pl?a=remove-archives-metadata&c=" + collection + "&site=" + site + "&d=" + documentID + "&metaname=" + metadataName + "&metavalue=" + metadataValue, responseFunction);
338 }
339}
340
341gs.functions.removeIndexMetadata = function(collection, site, documentID, metadataName, metadataPosition, metadataValue, responseFunction)
342{
343 if(metadataPosition != null)
344 {
345 callMetadataServer("removeIndexMetadata", "cgi-bin/metadata-server.pl?a=remove-metadata&c=" + collection + "&site=" + site + "&d=" + documentID + "&metaname=" + metadataName + "&metapos=" + metadataPosition, responseFunction);
346 }
347 else if(metadataValue != null)
348 {
349 callMetadataServer("removeIndexMetadata", "cgi-bin/metadata-server.pl?a=remove-metadata&c=" + collection + "&site=" + site + "&d=" + documentID + "&metaname=" + metadataName + "&metavalue=" + metadataValue, responseFunction);
350 }
351}
352
353gs.functions.removeMetadata = function(collection, site, documentID, metadataName, metadataValue, responseFunction)
354{
355 var nameArray = ["removeImportMetadata", "removeArchivesMetadata", "removeIndexMetadata"];
356 var functionArray = ["remove-import-metadata", "remove-archives-metadata", "remove-metadata"];
357
358 for(var i = 0; i < nameArray.length; i++)
359 {
360 callMetadataServer(nameArray[i], "cgi-bin/metadata-server.pl?a=" + functionArray[i] + "&c=" + collection + "&site=" + site + "&d=" + documentID + "&metaname=" + metadataName + "&metavalue=" + metadataValue, responseFunction);
361 }
362}
Note: See TracBrowser for help on using the repository browser.