1acl = { 2 init: function(){ 3 this.ctl = $('acl_manager'); 4 if(!this.ctl) return; 5 6 var sel = $('acl__user').getElementsByTagName('select')[0]; 7 8 addEvent(sel,'change',acl.userselhandler); 9 addEvent($('acl__tree'),'click',acl.treehandler); 10 addEvent($('acl__user').getElementsByTagName('input')[1],'click',acl.loadinfo); 11 }, 12 13 14 /** 15 * Handle user dropdown 16 */ 17 userselhandler: function(e){ 18 // make entry field visible/invisible 19 if(this.value == '__g__' || this.value == '__u__'){ 20 $('acl__user').getElementsByTagName('input')[0].style.display = ''; //acl_w 21 $('acl__user').getElementsByTagName('input')[1].style.display = ''; //submit 22 }else{ 23 $('acl__user').getElementsByTagName('input')[0].style.display = 'none'; 24 $('acl__user').getElementsByTagName('input')[1].style.display = 'none'; 25 } 26 27 acl.loadinfo(); 28 }, 29 30 /** 31 * Load the current permission info and edit form 32 * 33 * @param frm - Form element with needed data 34 */ 35 loadinfo: function(){ 36 // get form 37 var frm = $('acl__detail').getElementsByTagName('form')[0]; 38 39 // prepare an AJAX call 40 var ajax = new sack(DOKU_BASE + 'lib/plugins/acl/ajax.php'); 41 ajax.AjaxFailedAlert = ''; 42 ajax.encodeURIString = false; 43 if(ajax.failed) return true; 44 45 // prepare data 46 var data = Array(); 47 data[0] = ajax.encVar('ns',frm.elements['ns'].value); 48 data[1] = ajax.encVar('id',frm.elements['id'].value); 49 data[2] = ajax.encVar('acl_t',frm.elements['acl_t'].value); 50 data[3] = ajax.encVar('acl_w',frm.elements['acl_w'].value); 51 data[4] = ajax.encVar('sectok',frm.elements['sectok'].value); 52 data[5] = ajax.encVar('ajax','info'); 53 54 ajax.elementObj = $('acl__info'); 55 56 ajax.runAJAX(data.join('&')); 57 return false; 58 }, 59 60 /** 61 * parse URL attributes into a associative array 62 * 63 * @todo put into global script lib? 64 */ 65 parseatt: function(str){ 66 if(str[0] == '?') str = str.substr(1); 67 var attributes = {}; 68 var all = str.split('&'); 69 for(var i=0; i<all.length; i++){ 70 var att = all[i].split('='); 71 attributes[att[0]] = decodeURIComponent(att[1]); 72 } 73 return attributes; 74 }, 75 76 /** 77 * htmlspecialchars equivalent 78 * 79 * @todo put in gloabl scripts lib? 80 */ 81 hsc: function(str) { 82 str = str.replace(/&/g,"&"); 83 str = str.replace(/\"/g,"""); 84 str = str.replace(/\'/g,"'"); 85 str = str.replace(/</g,"<"); 86 str = str.replace(/>/g,">"); 87 return str; 88 }, 89 90 91 /** 92 * Open or close a subtree using AJAX 93 * 94 * @author Andreas Gohr <andi@splitbrain.org> 95 */ 96 treetoggle: function(clicky){ 97 var listitem = clicky.parentNode.parentNode; 98 99 // if already open, close by removing the sublist 100 var sublists = listitem.getElementsByTagName('ul'); 101 if(sublists.length){ 102 listitem.removeChild(sublists[0]); 103 clicky.src = DOKU_BASE+'lib/images/plus.gif'; 104 clicky.alt = '+'; 105 return false; 106 } 107 108 // get the enclosed link (is always the first one) 109 var link = listitem.getElementsByTagName('a')[0]; 110 111 // prepare an AJAX call to fetch the subtree 112 var ajax = new sack(DOKU_BASE + 'lib/plugins/acl/ajax.php'); 113 ajax.AjaxFailedAlert = ''; 114 ajax.encodeURIString = false; 115 if(ajax.failed) return true; 116 117 //prepare the new ul 118 var ul = document.createElement('ul'); 119 listitem.appendChild(ul); 120 ajax.elementObj = ul; 121 ajax.runAJAX(link.search.substr(1)+'&ajax=tree'); 122 clicky.src = DOKU_BASE+'lib/images/minus.gif'; 123 return false; 124 }, 125 126 /** 127 * Handles all clicks in the tree, dispatching the right action based on the 128 * clicked element 129 */ 130 treehandler: function(e){ 131 if(e.target.src){ // is it an image? 132 acl.treetoggle(e.target); 133 } else if(e.target.href){ // is it a link? 134 // remove highlighting 135 var obj = getElementsByClass('cur',$('acl__tree'),'a'); 136 for(var i=0; i<obj.length; i++){ 137 obj[i].className = obj[i].className.replace(/ cur/,''); 138 } 139 140 // add new highlighting 141 e.target.className += ' cur'; 142 143 // set new page to detail form 144 var frm = $('acl__detail').getElementsByTagName('form')[0]; 145 if(e.target.className.search(/wikilink1/) > -1){ 146 frm.elements['ns'].value = ''; 147 frm.elements['id'].value = acl.hsc(acl.parseatt(e.target.search)['id']); 148 }else if(e.target.className.search(/idx_dir/) > -1){ 149 frm.elements['ns'].value = acl.hsc(acl.parseatt(e.target.search)['ns']); 150 frm.elements['id'].value = ''; 151 } 152 153 acl.loadinfo(); 154 } 155 156 e.stopPropagation(); 157 e.preventDefault(); 158 return false; 159 } 160 161}; 162 163addInitEvent(acl.init); 164