source: main/trunk/greenstone3/web/interfaces/oran/js/documentmaker_scripts_util.js@ 25099

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

Store the orignal value of a cell so that we can find it. Also fixed a few things

  • Property svn:executable set to *
File size: 24.1 KB
Line 
1//Some "constants" to match the server constants
2var SUCCESS = 1;
3var ACCEPTED = 2;
4var ERROR = 3;
5var CONTINUING = 10;
6var COMPLETED = 11;
7var HALTED = 12;
8
9function getElementsByClassName(cl, parent)
10{
11 var elemArray = [];
12 var classRegEx = new RegExp("\\b" + cl + "\\b");
13 var elems;
14 if(parent)
15 {
16 elems = parent.getElementsByTagName("*");
17 }
18 else
19 {
20 elems = document.getElementsByTagName("*");
21 }
22
23 for (var i = 0; i < elems.length; i++)
24 {
25 var classeName = elems[i].className;
26 if (classRegEx.test(classeName)) elemArray.push(elems[i]);
27 }
28
29 return elemArray;
30};
31
32function getNextSiblingOfType(elem, type)
33{
34 if(elem == null)
35 {
36 return null;
37 }
38
39 var current = elem.nextSibling;
40 while(current != null)
41 {
42 if(current.nodeName.toLowerCase() == type)
43 {
44 return current;
45 }
46
47 current = current.nextSibling;
48 }
49 return null;
50}
51
52function getPrevSiblingOfType(elem, type)
53{
54 if(elem == null)
55 {
56 return null;
57 }
58
59 var current = elem.previousSibling;
60 while(current != null)
61 {
62 if(current.nodeName.toLowerCase() == type)
63 {
64 return current;
65 }
66
67 current = current.previousSibling;
68 }
69 return null;
70}
71
72function saveTransaction(transaction)
73{
74 console.log(transaction);
75 _transactions.push(transaction);
76}
77
78function undo()
79{
80 if(_undoOperations.length == 0)
81 {
82 return;
83 }
84
85 var undoOp = _undoOperations.pop();
86
87 //Create/Duplicate undo
88 if(undoOp.op == "del")
89 {
90 if(undoOp.srcElem.childList)
91 {
92 removeFromParent(undoOp.srcElem.childList);
93 }
94 if(undoOp.srcElem.parentItem)
95 {
96 undoOp.srcElem.parentItem.menu.newSectionLink.style.display = "inline";
97 undoOp.srcElem.parentItem.childList = null;
98 }
99 removeFromParent(undoOp.srcElem);
100 }
101
102 if(undoOp.op == "delMeta")
103 {
104 if(undoOp.srcElem.childList)
105 {
106 removeFromParent(undoOp.srcElem.childList);
107 }
108 if(undoOp.srcElem.parentItem)
109 {
110 undoOp.srcElem.parentItem.menu.newSectionLink.style.display = "inline";
111 undoOp.srcElem.parentItem.childList = null;
112 }
113 de.doc.unregisterEditSection(undoOp.srcElem);
114 removeFromParent(undoOp.srcElem);
115 }
116
117 //Move undo (mva is move after, mvb is move before, mvi is move into)
118 else if(undoOp.op == "mva" || undoOp.op == "mvb" || undoOp.op == "mvi")
119 {
120 if(undoOp.op == "mvb")
121 {
122 undoOp.refElem.parentNode.insertBefore(undoOp.srcElem, undoOp.refElem);
123 }
124 else if(undoOp.op == "mva")
125 {
126 insertAfter(undoOp.srcElem, undoOp.refElem);
127 }
128 else
129 {
130 undoOp.refElem.removeChild(undoOp.refElem.firstChild);
131 undoOp.refElem.appendChild(undoOp.srcElem);
132 }
133
134 if(undoOp.srcElem.textDiv)
135 {
136 insertAfter(undoOp.srcElem.textDiv, undoOp.srcElem);
137 }
138 if(undoOp.srcElem.childList)
139 {
140 insertAfter(undoOp.srcElem.childList, undoOp.srcElem.textDiv);
141 }
142
143 if(undoOp.srcElem.onmouseout)
144 {
145 //Uncolour the section if it coloured
146 undoOp.srcElem.onmouseout();
147 }
148 updateFromTop();
149 }
150
151 if(undoOp.removeTransaction)
152 {
153 _transactions.pop();
154 }
155}
156
157function addCollectionToBuild(collection)
158{
159 for(var i = 0; i < _collectionsToBuild.length; i++)
160 {
161 if(collection == _collectionsToBuild[i])
162 {
163 return;
164 }
165 }
166 _collectionsToBuild.push(collection);
167}
168
169function save()
170{
171 var changes = de.Changes.getChangedEditableSections();
172
173 for(var i = 0; i < changes.length; i++)
174 {
175 var changedElem = changes[i];
176
177 //Save metadata
178 if(hasClass(changedElem, "metaTableCell"))
179 {
180 //Get document ID
181 var currentElem = changedElem;
182 while((currentElem = currentElem.parentNode).tagName != "TABLE");
183 var docID = currentElem.getAttribute("id").substring(4);
184
185 //Get metadata name
186 var row = changedElem.parentNode;
187 var cells = row.getElementsByTagName("TD");
188 var nameCell = cells[0];
189 var name = nameCell.innerHTML;
190
191 gs.functions.setArchivesMetadata(gs.cgiParams.p_c /*bad*/, "localsite" /*bad*/, docID, name, null, changedElem.innerHTML, changedElem.originalValue, function(){console.log("SAVED ARCHIVES");});
192 changedElem.originalValue = changedElem.innerHTML;
193 addCollectionToBuild(gs.cgiParams.p_c);
194 }
195 //Save content
196 else if(hasClass(changedElem, "renderedText"))
197 {
198 var section = changedElem.parentDiv.parentItem;
199 saveTransaction('{"operation":"setText", "text":"' + changedElem.innerHTML.replace(/"/g, "\\\"").replace(/&/g, "%26") + '", "collection":"' + section.collection + '", "oid":"' + section.nodeID + '"}');
200 addCollectionToBuild(section.collection);
201 }
202 }
203
204 var request = "[";
205 for(var i = 0; i < _transactions.length; i++)
206 {
207 request += _transactions[i];
208 if(i != _transactions.length - 1)
209 {
210 request +=",";
211 }
212 }
213 request += "]";
214
215 var statusID;
216 var ajax = new gs.functions.ajaxRequest();
217 ajax.open("POST", _baseURL, true);
218 ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
219 ajax.onreadystatechange = function()
220 {
221 if(ajax.readyState == 4 && ajax.status == 200)
222 {
223 var text = ajax.responseText;
224 var xml = validateXML(text);
225
226 var errorElems;
227 if(!xml || checkForErrors(xml))
228 {
229 alert("There was an error saving, aborting");
230
231 var saveButton = document.getElementById("saveButton");
232 saveButton.innerHTML = "Save changes";
233 saveButton.disabled = false;
234
235 _statusBar.removeStatus(statusID);
236 return;
237 }
238
239 _statusBar.removeStatus(statusID);
240 buildCollections(_collectionsToBuild);
241 }
242 }
243
244 if(request != "[]")
245 {
246 var saveButton = document.getElementById("saveButton");
247 saveButton.innerHTML = "Saving...";
248 saveButton.disabled = true;
249
250 statusID = _statusBar.addStatus("Modifying archive files...");
251 ajax.send("a=g&rt=r&s=DocumentExecuteTransaction&s1.transactions=" + request);
252 }
253}
254
255function buildCollections(collections)
256{
257 var saveButton = document.getElementById("saveButton");
258 if(!collections || collections.length == 0)
259 {
260 console.log("List of collections to build is empty");
261 saveButton.innerHTML = "Save changes";
262 saveButton.disabled = false;
263 return;
264 }
265
266 var counter = 0;
267 var statusID = 0;
268 var buildFunction = function()
269 {
270 var ajax = new gs.functions.ajaxRequest();
271 ajax.open("GET", _baseURL + "?a=g&rt=r&ro=1&s=BuildCollection&s1.collection=" + collections[counter]);
272 ajax.onreadystatechange = function()
273 {
274 if(ajax.readyState == 4 && ajax.status == 200)
275 {
276 var text = ajax.responseText;
277 var xml = validateXML(text);
278
279 if(!xml || checkForErrors(xml))
280 {
281 alert("Could not build collection -> " + collections[counter] + ", aborting");
282
283 _statusBar.removeStatus(statusID);
284 saveButton.innerHTML = "Save changes";
285 saveButton.disabled = false;
286
287 return;
288 }
289
290 var status = xml.getElementsByTagName("status")[0];
291 var pid = status.getAttribute("pid");
292
293 startCheckLoop(pid, "BuildCollection", statusID, function()
294 {
295 var localAjax = new gs.functions.ajaxRequest();
296 localAjax.open("GET", _baseURL + "?a=g&rt=r&ro=1&s=ActivateCollection&s1.collection=" + collections[counter], true);
297 localAjax.onreadystatechange = function()
298 {
299 if(localAjax.readyState == 4 && localAjax.status == 200)
300 {
301 var localText = localAjax.responseText;
302 var localXML = validateXML(localText);
303
304 if(!xml || checkForErrors(xml))
305 {
306 alert("Could not activate collection -> " + collections[counter] + ", aborting");
307
308 _statusBar.removeStatus(statusID);
309 saveButton.innerHTML = "Save changes";
310 saveButton.disabled = false;
311
312 return;
313 }
314
315 var localStatus = localXML.getElementsByTagName("status")[0];
316 if(localStatus)
317 {
318 var localPID = localStatus.getAttribute("pid");
319 startCheckLoop(localPID, "ActivateCollection", statusID, function()
320 {
321 if(counter == collections.length - 1)
322 {
323 removeCollectionsFromBuildList(collections);
324 }
325 else
326 {
327 counter++;
328 buildFunction();
329 }
330
331 _transactions = new Array();
332
333 _statusBar.removeStatus(statusID);
334 saveButton.innerHTML = "Save changes";
335 saveButton.disabled = false;
336 });
337 }
338 }
339 }
340 _statusBar.changeStatus(statusID, "Activating collection " + collections[counter] + "...");
341 localAjax.send();
342 });
343 }
344 }
345 statusID = _statusBar.addStatus("Building collection " + collections[counter] + "...");
346 ajax.send();
347 }
348 buildFunction();
349}
350
351function startCheckLoop(pid, serverFunction, statusID, callbackFunction)
352{
353 var ajaxFunction = function()
354 {
355 var saveButton = document.getElementById("saveButton");
356
357 var ajax = new gs.functions.ajaxRequest();
358 ajax.open("GET", _baseURL + "?a=g&rt=s&ro=1&s=" + serverFunction + "&s1.pid=" + pid, true);
359 ajax.onreadystatechange = function()
360 {
361 if(ajax.readyState == 4 && ajax.status == 200)
362 {
363 var text = ajax.responseText;
364 var xml = validateXML(text);
365
366 if(!xml || checkForErrors(xml))
367 {
368 alert("Could not check status of " + serverFunction + ", there was an error in the XML, aborting");
369
370 _statusBar.removeStatus(statusID);
371 saveButton.innerHTML = "Save changes";
372 saveButton.disabled = false;
373
374 return;
375 }
376
377 var status = xml.getElementsByTagName("status")[0];
378 var code = status.getAttribute("code");
379
380 if (code == COMPLETED || code == SUCCESS)
381 {
382 callbackFunction();
383 }
384 else if (code == HALTED || code == ERROR)
385 {
386 alert("Could not check status of " + serverFunction + ", there was an error on the server, aborting");
387
388 _statusBar.removeStatus(statusID);
389 saveButton.innerHTML = "Save changes";
390 saveButton.disabled = false;
391 }
392 else
393 {
394 setTimeout(ajaxFunction, 1000);
395 }
396 }
397 }
398 ajax.send();
399 }
400 ajaxFunction();
401}
402
403function removeCollectionsFromBuildList(collections)
404{
405 var tempArray = new Array();
406 for(var i = 0; i < _collectionsToBuild.length; i++)
407 {
408 var found = false;
409 for(var j = 0; j < collections.length; j++)
410 {
411 if(collections[j] == _collectionsToBuild[i])
412 {
413 found = true;
414 break;
415 }
416 }
417
418 if(!found)
419 {
420 tempArray.push(_collectionsToBuild[i]);
421 }
422 }
423 _collectionsToBuild = tempArray;
424}
425
426function checkForErrors(xml)
427{
428 var errorElems = xml.getElementsByTagName("error");
429
430 if(errorElems && errorElems.length > 0)
431 {
432 var errorString = "There was an error saving your changes: ";
433 for(var i = 0; i < errorElems.length; i++)
434 {
435 errorString += " " + errorElems.item(i).firstChild.nodeValue;
436 }
437 alert(errorString);
438 return true;
439 }
440 return false; //No errors
441}
442
443function validateXML(txt)
444{
445 // code for IE
446 if (window.ActiveXObject)
447 {
448 var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
449 xmlDoc.async = "false";
450 xmlDoc.loadXML(document.all(txt).value);
451
452 if(xmlDoc.parseError.errorCode!=0)
453 {
454 txt = "Error Code: " + xmlDoc.parseError.errorCode + "\n";
455 txt = txt + "Error Reason: " + xmlDoc.parseError.reason;
456 txt = txt + "Error Line: " + xmlDoc.parseError.line;
457 console.log(txt);
458 return null;
459 }
460
461 return xmlDoc;
462 }
463 // code for Mozilla, Firefox, Opera, etc.
464 else if (document.implementation.createDocument)
465 {
466 var parser = new DOMParser();
467 var xmlDoc = parser.parseFromString(txt,"text/xml");
468
469 if (xmlDoc.getElementsByTagName("parsererror").length > 0)
470 {
471 console.log("There was an error parsing the XML");
472 return null;
473 }
474
475 return xmlDoc;
476 }
477 else
478 {
479 console.log('Your browser cannot handle XML validation');
480 }
481 return null;
482}
483
484function onVisibleMetadataSetChange()
485{
486 var metadataList = document.getElementById("metadataSetList");
487 var index = metadataList.selectedIndex;
488 var options = metadataList.getElementsByTagName("OPTION");
489 var selectedOption = options[index];
490
491 var selectedSet = selectedOption.innerHTML;
492 changeVisibleMetadata(selectedSet);
493}
494
495function changeVisibleMetadata(metadataSetName)
496{
497 var tables = document.getElementsByTagName("TABLE");
498 for(var i = 0; i < tables.length; i++)
499 {
500 var id = tables[i].getAttribute("id");
501 if(id && id.search(/^meta/) != -1)
502 {
503 var rows = tables[i].getElementsByTagName("TR");
504 for(var j = 0; j < rows.length; j++)
505 {
506 if(metadataSetName == "All")
507 {
508 rows[j].style.display = "table-row";
509 }
510 else
511 {
512 var cells = rows[j].getElementsByTagName("TD");
513 var cellName = cells[0].innerHTML;
514
515 if(cellName.indexOf(".") == -1)
516 {
517 rows[j].style.display = "none";
518 }
519 else
520 {
521 var setName = cellName.substring(0, cellName.lastIndexOf("."));
522 if(setName == metadataSetName)
523 {
524 rows[j].style.display = "table-row";
525 }
526 else
527 {
528 rows[j].style.display = "none";
529 }
530 }
531 }
532 }
533 }
534 }
535}
536
537function asyncRegisterEditSection(cell)
538{
539 //This registering can cause a sizeable delay so we'll thread it (effectively) so the browser is not paused
540 cell.originalValue = cell.innerHTML;
541 setTimeout(function(){de.doc.registerEditSection(cell)}, 0);
542}
543
544function addFunctionalityToTable(table)
545{
546 var rows = table.getElementsByTagName("TR");
547 for(var i = 0; i < rows.length; i++)
548 {
549 var cells = rows[i].getElementsByTagName("TD");
550 var metadataName = cells[0].innerHTML;
551
552 if(metadataName.indexOf(".") != -1)
553 {
554 var metadataSetName = metadataName.substring(0, metadataName.lastIndexOf("."));
555
556 var found = false;
557 for(var j = 0; j < _metadataSetList.length; j++)
558 {
559 if(metadataSetName == _metadataSetList[j])
560 {
561 found = true;
562 break;
563 }
564 }
565
566 if(!found)
567 {
568 _metadataSetList.push(metadataSetName);
569
570 var metadataSetList = document.getElementById("metadataSetList");
571 var newOption = document.createElement("OPTION");
572 newOption.innerHTML = metadataSetName;
573 metadataSetList.appendChild(newOption);
574 }
575 }
576
577 asyncRegisterEditSection(cells[1]);
578
579 addRemoveLinkToRow(rows[i]);
580 }
581
582 var metaNameField = document.createElement("INPUT");
583 metaNameField.setAttribute("type", "text");
584 insertAfter(metaNameField, table);
585
586 var addRowButton = document.createElement("BUTTON");
587 addRowButton.innerHTML = "Add new metadata";
588 addRowButton.onclick = function()
589 {
590 var name = metaNameField.value;
591 if(!name || name == "")
592 {
593 console.log("No value given for new metadata name");
594 return;
595 }
596
597 var newRow = document.createElement("TR");
598 var nameCell = document.createElement("TD");
599 var valueCell = document.createElement("TD");
600 nameCell.setAttribute("class", "metaTableCellName");
601 nameCell.innerHTML = name;
602 valueCell.setAttribute("class", "metaTableCell");
603
604 newRow.appendChild(nameCell);
605 newRow.appendChild(valueCell);
606 addRemoveLinkToRow(newRow);
607 table.appendChild(newRow);
608
609 var undo = new Array();
610 undo.op = "delMeta";
611 undo.srcElem = newRow;
612 undo.removeTransaction = false;
613 _undoOperations.push(undo);
614
615 //Threading this function here probably isn't necessary like the other times it is called
616 de.doc.registerEditSection(valueCell);
617 };
618 insertAfter(addRowButton, metaNameField);
619}
620
621function addRemoveLinkToRow(row)
622{
623 var newCell = document.createElement("TD");
624 var removeLink = document.createElement("A");
625 removeLink.innerHTML = "remove";
626 removeLink.setAttribute("href", "javascript:;");
627 removeLink.onclick = function()
628 {
629 var undo = new Array();
630 var prev = getPrevSiblingOfType(row, "tr");
631 var next = getNextSiblingOfType(row, "tr");
632 var parent = row.parentNode;
633 if(prev)
634 {
635 undo.op = "mva";
636 undo.refElem = prev;
637 }
638 else if(next)
639 {
640 undo.op = "mvb";
641 undo.refElem = next;
642 }
643 else
644 {
645 undo.op = "mvi";
646 undo.refElem = parent;
647 }
648 undo.srcElem = row;
649 undo.removeTransaction = true;
650 _undoOperations.push(undo);
651
652 /*
653 saveTransaction('{"operation":"deleteMetadata", "collection":"' + section.collection + '", "oid":"' + section.nodeID + '"}');
654 addCollectionToBuild(section.collection);
655 */
656
657 _deletedSections.push(row);
658 removeFromParent(row);
659 }
660 newCell.appendChild(removeLink);
661 newCell.setAttribute("class", "metaTableCell");
662 newCell.setAttribute("style", "font-size:0.6em; padding-left: 3px; padding-right: 3px;");
663 row.appendChild(newCell);
664}
665
666function createTopMenuBar()
667{
668 //Create the top menu bar
669 var headerTable = document.createElement("TABLE");
670 var tableBody = document.createElement("TBODY");
671 var row = document.createElement("TR");
672 var newDocCell = document.createElement("TD");
673 var newSecCell = document.createElement("TD");
674 var saveCell = document.createElement("TD");
675 var undoCell = document.createElement("TD");
676 var metadataListCell = document.createElement("TD");
677
678 var metadataListLabel = document.createElement("SPAN");
679 metadataListLabel.innerHTML = "Visible metadata: ";
680 var metadataList = document.createElement("SELECT");
681 metadataList.setAttribute("id", "metadataSetList");
682 metadataList.onchange = onVisibleMetadataSetChange;
683 var allMetadataOption = document.createElement("OPTION");
684 metadataList.appendChild(allMetadataOption);
685 allMetadataOption.innerHTML = "All";
686 metadataListCell.appendChild(metadataListLabel);
687 metadataListCell.appendChild(metadataList);
688
689 metadataListCell.setAttribute("class", "headerTableTD");
690 newDocCell.setAttribute("class", "headerTableTD");
691 newSecCell.setAttribute("class", "headerTableTD");
692 undoCell.setAttribute("class", "headerTableTD");
693 saveCell.setAttribute("class", "headerTableTD");
694
695 headerTable.appendChild(tableBody);
696 tableBody.appendChild(row);
697 row.appendChild(saveCell);
698 row.appendChild(undoCell);
699 row.appendChild(newDocCell);
700 row.appendChild(newSecCell);
701 row.appendChild(metadataListCell);
702
703 //The "Save changes" button
704 var saveButton = document.createElement("BUTTON");
705 saveButton.innerHTML = "Save changes";
706 saveButton.setAttribute("onclick", "save();");
707 saveButton.setAttribute("id", "saveButton");
708 saveCell.appendChild(saveButton);
709
710 //The "Undo" button
711 var undoButton = document.createElement("BUTTON");
712 undoButton.innerHTML = "Undo";
713 undoButton.setAttribute("onclick", "undo();");
714 undoCell.appendChild(undoButton);
715
716 //The "Create new document" button
717 var newDocButton = document.createElement("BUTTON");
718 newDocButton.innerHTML = "Create new document";
719 newDocButton.setAttribute("onclick", "createNewDocumentArea();");
720 newDocCell.appendChild(newDocButton);
721
722 //The "Insert new section" LI
723 var newSecLI = createDraggableNewSection(newSecCell);
724
725 return headerTable;
726}
727
728function getMetadataFromNode(node, name)
729{
730 var currentNode = node.firstChild;
731 while(currentNode != null)
732 {
733 if(currentNode.nodeName == "metadataList")
734 {
735 currentNode = currentNode.firstChild;
736 break;
737 }
738
739 currentNode = currentNode.nextSibling;
740 }
741
742 while(currentNode != null)
743 {
744 if(currentNode.nodeName == "metadata" && currentNode.getAttribute("name") == name)
745 {
746 return currentNode.firstChild.nodeValue;
747 }
748
749 currentNode = currentNode.nextSibling;
750 }
751 return "{UNTITLED}";
752}
753
754function storeMetadata(node, listItem)
755{
756 listItem.metadata = new Array();
757
758 var currentNode = node.firstChild;
759 while(currentNode != null)
760 {
761 if(currentNode.nodeName == "metadataList")
762 {
763 currentNode = currentNode.firstChild;
764 break;
765 }
766
767 currentNode = currentNode.nextSibling;
768 }
769
770 while(currentNode != null)
771 {
772 if(currentNode.nodeName == "metadata")
773 {
774 listItem.metadata[currentNode.getAttribute("name")] = currentNode.firstChild.nodeValue;
775 }
776
777 currentNode = currentNode.nextSibling;
778 }
779}
780
781function hasClass(elem, classVal)
782{
783 if(!elem || !elem.getAttribute("class"))
784 {
785 return false;
786 }
787
788 return (elem.getAttribute("class").search(classVal) != -1)
789}
790
791function getNodeContent(node)
792{
793 var currentNode = node.firstChild;
794 while(currentNode != null)
795 {
796 if(currentNode.nodeName == "nodeContent")
797 {
798 return currentNode.firstChild;
799 }
800
801 currentNode = currentNode.nextSibling;
802 }
803 return null;
804}
805
806function containsDocumentNode(node)
807{
808 var currentNode = node.firstChild;
809 while(currentNode != null)
810 {
811 if(currentNode.nodeName == "documentNode")
812 {
813 return true;
814 }
815
816 currentNode = currentNode.nextSibling;
817 }
818 return false;
819}
820
821function isExpanded(textDiv)
822{
823 if(!textDiv.style.display || textDiv.style.display == "block")
824 {
825 return true;
826 }
827 return false;
828}
829
830function toggleTextDiv(section)
831{
832 var textDiv = section.textDiv;
833 if(textDiv)
834 {
835 if(isExpanded(textDiv))
836 {
837 textDiv.style.display = "none";
838 section.menu.editTextLink.innerHTML = "edit";
839 }
840 else
841 {
842 textDiv.style.display = "block";
843 section.menu.editTextLink.innerHTML = "hide";
844 }
845 }
846}
847
848function updateFromTop()
849{
850 updateRecursive(document.getElementById("dbDiv"), null, null, 0);
851}
852
853function insertAfter(elem, refElem)
854{
855 if(refElem.nextSibling)
856 {
857 refElem.parentNode.insertBefore(elem, refElem.nextSibling);
858 }
859 else
860 {
861 refElem.parentNode.appendChild(elem);
862 }
863}
864
865function removeFromParent(elem)
866{
867 elem.parentNode.removeChild(elem);
868}
869
870function createSectionTitle(text)
871{
872 var textSpan = document.createElement("SPAN");
873 if(text)
874 {
875 textSpan.appendChild(document.createTextNode(" " + text + " "));
876 }
877 else
878 {
879 textSpan.appendChild(document.createTextNode(" [UNTITLED SECTION] "));
880 }
881 return textSpan;
882}
883
884function setMouseOverAndOutFunctions(section)
885{
886 //Colour the list item and display the menu on mouse over
887 section.onmouseover = function(e)
888 {
889 if(this.menu){this.menu.style.display = "inline";}
890 this.style.background = "rgb(255, 200, 0)";
891 };
892 //Uncolour the list item and hide the menu on mouse out
893 section.onmouseout = function(e)
894 {
895 if(this.menu){this.menu.style.display = "none";}
896 this.style.background = "none";
897 };
898}
899
900function createDraggableNewSection(parent)
901{
902 var newSecLI = document.createElement("LI");
903 var newSpan = document.createElement("SPAN");
904 newSpan.innerHTML = "Insert new section ";
905
906 newSecLI.sectionTitle = newSpan;
907 newSecLI.appendChild(newSpan);
908 newSecLI.setAttribute("class", "dragItem newSection");
909 newSecLI.newSection = true;
910 newSecLI.parent = parent;
911 newSecLI.index = -1;
912 new YAHOO.example.DDList(newSecLI);
913 parent.appendChild(newSecLI);
914}
915
916function closeAllOpenContents()
917{
918 for(var i = 0; i < _allContents.length; i++)
919 {
920 if(isExpanded(_allContents[i].textDiv))
921 {
922 toggleTextDiv(_allContents[i]);
923 }
924 }
925 DDM.refreshCache();
926}
927
928//Status Bar class (initialised with new StatusBar(elem);)
929function StatusBar(mainElem)
930{
931 var _statusMap = new Array();
932 var _statusIDCounter = 0;
933 var _mainElem = mainElem;
934 var _activeMessages = 0;
935
936 _mainElem.style.display = "none";
937
938 this.addStatus = function(newStatus)
939 {
940 _mainElem.style.display = "block";
941 var newStatusDiv = document.createElement("DIV");
942 var newStatusSpan = document.createElement("SPAN");
943
944 var workingImage = document.createElement("IMG");
945 workingImage.setAttribute("src", gs.imageURLs.loading);
946 workingImage.setAttribute("height", "16px");
947 workingImage.setAttribute("width", "16px");
948 newStatusDiv.appendChild(workingImage);
949
950 newStatusDiv.appendChild(newStatusSpan);
951 newStatusSpan.innerHTML = " " + newStatus;
952 newStatusDiv.setAttribute("class", "statusMessage");
953 newStatusDiv.span = newStatusSpan;
954
955 _mainElem.appendChild(newStatusDiv);
956 _statusMap["status" + _statusIDCounter] = newStatusDiv;
957 _activeMessages++;
958 return _statusIDCounter++;
959 }
960
961 this.changeStatus = function(id, newStatus)
962 {
963 if(_statusMap["status" + id])
964 {
965 _statusMap["status" + id].span.innerHTML = " " + newStatus;
966 }
967 }
968
969 this.removeStatus = function(id)
970 {
971 if(_statusMap["status" + id])
972 {
973 removeFromParent(_statusMap["status" + id]);
974
975 if(--_activeMessages == 0)
976 {
977 _mainElem.style.display = "none";
978 }
979 }
980 }
981}
982
983/*
984function toggleEdit(e)
985{
986 var mousePos = de.events.getXYInWindowFromEvent(e);
987 var cDesc = de.cursor.getCursorDescAtXY(mousePos.x, mousePos.y, de.events.getEventTarget(e));
988 de.cursor.setCursor(cDesc);
989}
990*/
Note: See TracBrowser for help on using the repository browser.