1acl = { 2 init: function(){ 3 this.ctl = $('auth_manager'); 4 if(!this.ctl) return; 5 6 addEvent($('acl__tree'),'click',acl.treehandler); 7 }, 8 9 10 /** 11 * parse URL attributes into a associative array 12 * 13 * @todo put into global script lib? 14 */ 15 parseatt: function(str){ 16 if(str[0] == '?') str = str.substr(1); 17 var attributes = {}; 18 var all = str.split('&'); 19 for(var i=0; i<all.length; i++){ 20 var att = all[i].split('='); 21 attributes[att[0]] = decodeURIComponent(att[1]); 22 } 23 return attributes; 24 }, 25 26 /** 27 * htmlspecialchars equivalent 28 * 29 * @todo put in gloabl scripts lib? 30 */ 31 hsc: function(str) { 32 str = str.replace(/&/g,"&"); 33 str = str.replace(/\"/g,"""); 34 str = str.replace(/\'/g,"'"); 35 str = str.replace(/</g,"<"); 36 str = str.replace(/>/g,">"); 37 return str; 38 }, 39 40 41 /** 42 * Open or close a subtree using AJAX 43 * 44 * @author Andreas Gohr <andi@splitbrain.org> 45 */ 46 treetoggle: function(clicky){ 47 var listitem = clicky.parentNode.parentNode; 48 49 // if already open, close by removing the sublist 50 var sublists = listitem.getElementsByTagName('ul'); 51 if(sublists.length){ 52 listitem.removeChild(sublists[0]); 53 clicky.src = DOKU_BASE+'lib/images/plus.gif'; 54 clicky.alt = '+'; 55 return false; 56 } 57 58 // get the enclosed link (is always the first one) 59 var link = listitem.getElementsByTagName('a')[0]; 60 61 // prepare an AJAX call to fetch the subtree 62 var ajax = new sack(DOKU_BASE + 'lib/plugins/autlogin/ajax.php'); 63 ajax.AjaxFailedAlert = ''; 64 ajax.encodeURIString = false; 65 if(ajax.failed) return true; 66 67 //prepare the new ul 68 var ul = document.createElement('ul'); 69 listitem.appendChild(ul); 70 ajax.elementObj = ul; 71 ajax.setVar('ajax', 'tree'); 72 var frm = $('auth1__detail').getElementsByTagName('form')[0]; 73 ajax.setVar('current_ns', encodeURIComponent(frm.elements['ns'].value)); 74 ajax.setVar('current_id', encodeURIComponent(frm.elements['id'].value)); 75 ajax.runAJAX(link.search.substr(1)); 76 clicky.src = DOKU_BASE+'lib/images/minus.gif'; 77 return false; 78 }, 79 80 /** 81 * Handles all clicks in the tree, dispatching the right action based on the 82 * clicked element 83 */ 84 treehandler: function(e){ 85 if(e.target.src){ // is it an image? 86 acl.treetoggle(e.target); 87 } else if(e.target.href){ // is it a link? 88 // remove highlighting 89 var obj = getElementsByClass('cur',$('acl__tree'),'a'); 90 for(var i=0; i<obj.length; i++){ 91 obj[i].className = obj[i].className.replace(/ cur/,''); 92 } 93 94 // add new highlighting 95 e.target.className += ' cur'; 96 97 // set new page to detail form 98 var frm = $('auth1__detail').getElementsByTagName('form')[0]; 99 if(e.target.className.search(/wikilink1/) > -1){ 100 frm.elements['ns'].value = ''; 101 frm.elements['id'].value = acl.hsc(acl.parseatt(e.target.search)['id']); 102 }else if(e.target.className.search(/idx_dir/) > -1){ 103 frm.elements['ns'].value = acl.hsc(acl.parseatt(e.target.search)['ns']); 104 frm.elements['id'].value = ''; 105 } 106 var frm2 = $('auth2__detail').getElementsByTagName('form')[0]; 107 if(e.target.className.search(/wikilink1/) > -1){ 108 frm2.elements['ns'].value = ''; 109 frm2.elements['id'].value = acl.hsc(acl.parseatt(e.target.search)['id']); 110 }else if(e.target.className.search(/idx_dir/) > -1){ 111 frm2.elements['ns'].value = acl.hsc(acl.parseatt(e.target.search)['ns']); 112 frm2.elements['id'].value = ''; 113 } 114 var frm3 = $('auth3__detail').getElementsByTagName('form')[0]; 115 if(e.target.className.search(/wikilink1/) > -1){ 116 frm3.elements['ns'].value = ''; 117 frm3.elements['id'].value = acl.hsc(acl.parseatt(e.target.search)['id']); 118 }else if(e.target.className.search(/idx_dir/) > -1){ 119 frm3.elements['ns'].value = acl.hsc(acl.parseatt(e.target.search)['ns']); 120 frm3.elements['id'].value = ''; 121 } 122 123 124 } 125 126 e.stopPropagation(); 127 e.preventDefault(); 128 return false; 129 } 130 131}; 132 133addInitEvent(acl.init); 134