source: documentation/trunk/packages/dokuwiki-2011-05-25a/lib/scripts/index.js@ 25027

Last change on this file since 25027 was 25027, checked in by jmt12, 12 years ago

Adding the packages directory, and within it a configured version of dokuwiki all ready to run

File size: 3.5 KB
Line 
1/**
2 * Javascript for index view
3 *
4 * @author Andreas Gohr <[email protected]>
5 */
6
7var index = {
8
9 /**
10 * Delay in ms before showing the throbber.
11 * Used to skip the throbber for fast AJAX calls.
12 */
13 throbber_delay: 500,
14
15 /**
16 * Attach event handlers to all "folders" below the given element
17 *
18 * @author Andreas Gohr <[email protected]>
19 */
20 treeattach: function(obj){
21 if(!obj) return;
22
23 var items = getElementsByClass('idx_dir',obj,'a');
24 for(var i=0; i<items.length; i++){
25 var elem = items[i];
26
27 // attach action to make the link clickable by AJAX
28 addEvent(elem,'click',function(e){ return index.toggle(e,this); });
29
30 // get the listitem the elem belongs to
31 var listitem = elem.parentNode;
32 while (listitem.tagName != 'LI') {
33 listitem = listitem.parentNode;
34 }
35 //when there are uls under this listitem mark this listitem as opened
36 if (listitem.getElementsByTagName('ul').length) {
37 listitem.open = true;
38 }
39 }
40 },
41
42 /**
43 * Open or close a subtree using AJAX
44 * The contents of subtrees are "cached" untill the page is reloaded.
45 * A "loading" indicator is shown only when the AJAX call is slow.
46 *
47 * @author Andreas Gohr <[email protected]>
48 * @author Ben Coburn <[email protected]>
49 */
50 toggle: function(e,clicky){
51 var listitem = clicky.parentNode.parentNode;
52
53 listitem.open = !listitem.open;
54 // listitem.open represents now the action to be done
55
56 // if already open, close by removing the sublist
57 var sublists = listitem.getElementsByTagName('ul');
58 if(!listitem.open){
59 if (sublists.length) {
60 sublists[0].style.display='none';
61 }
62 listitem.className='closed';
63 e.preventDefault();
64 return false;
65 }
66
67 // just show if already loaded
68 if(sublists.length && listitem.open){
69 sublists[0].style.display='';
70 listitem.className='open';
71 e.preventDefault();
72 return false;
73 }
74
75 // prepare an AJAX call to fetch the subtree
76 var ajax = new sack(DOKU_BASE + 'lib/exe/ajax.php');
77 ajax.AjaxFailedAlert = '';
78 ajax.encodeURIString = false;
79 if(ajax.failed) return true;
80
81 //prepare the new ul
82 var ul = document.createElement('ul');
83 ul.className = 'idx';
84 timeout = window.setTimeout(function(){
85 // show the throbber as needed
86 if (listitem.open) {
87 ul.innerHTML = '<li><img src="'+DOKU_BASE+'lib/images/throbber.gif" alt="loading..." title="loading..." /></li>';
88 listitem.appendChild(ul);
89 listitem.className='open';
90 }
91 }, this.throbber_delay);
92 ajax.elementObj = ul;
93 ajax.afterCompletion = function(){
94 window.clearTimeout(timeout);
95 index.treeattach(ul);
96 if (listitem.className!='open') {
97 if (!listitem.open) {
98 ul.style.display='none';
99 }
100 listitem.appendChild(ul);
101 if (listitem.open) {
102 listitem.className='open';
103 }
104 }
105 };
106 ajax.runAJAX(clicky.search.substr(1)+'&call=index');
107 e.preventDefault();
108 return false;
109 }
110};
111
112
113addInitEvent(function(){
114 index.treeattach($('index__tree'));
115});
Note: See TracBrowser for help on using the repository browser.