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 addEvent($('acl__user').getElementsByTagName('input')[1],'keypress',acl.loadinfo); 12 }, 13 14 15 /** 16 * Handle user dropdown 17 */ 18 userselhandler: function(e){ 19 // make entry field visible/invisible 20 if(this.value == '__g__' || this.value == '__u__'){ 21 $('acl__user').getElementsByTagName('input')[0].style.display = ''; //acl_w 22 $('acl__user').getElementsByTagName('input')[1].style.display = ''; //submit 23 }else{ 24 $('acl__user').getElementsByTagName('input')[0].style.display = 'none'; 25 $('acl__user').getElementsByTagName('input')[1].style.display = 'none'; 26 } 27 28 acl.loadinfo(); 29 }, 30 31 /** 32 * Load the current permission info and edit form 33 * 34 * @param frm - Form element with needed data 35 */ 36 loadinfo: function(){ 37 // get form 38 var frm = $('acl__detail').getElementsByTagName('form')[0]; 39 40 // prepare an AJAX call 41 var ajax = new sack(DOKU_BASE + 'lib/plugins/acl/ajax.php'); 42 ajax.AjaxFailedAlert = ''; 43 ajax.encodeURIString = false; 44 if(ajax.failed) return true; 45 46 // prepare data 47 var data = Array(); 48 data[0] = ajax.encVar('ns',frm.elements['ns'].value); 49 data[1] = ajax.encVar('id',frm.elements['id'].value); 50 data[2] = ajax.encVar('acl_t',frm.elements['acl_t'].value); 51 data[3] = ajax.encVar('acl_w',frm.elements['acl_w'].value); 52 data[4] = 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 treehandler: function(e){ 128 if(e.target.href){ // is it a link? 129 // remove highlighting 130 var obj = getElementsByClass('cur',$('acl__tree'),'a')[0]; 131 if(obj) obj.className = obj.className.replace(/ cur/,''); 132 133 // add new highlighting 134 e.target.className += ' cur'; 135 136 // set new page to detail form 137 var frm = $('acl__detail').getElementsByTagName('form')[0]; 138 if(e.target.className.search(/wikilink1/) > -1){ 139 frm.elements['ns'].value = ''; 140 frm.elements['id'].value = acl.hsc(acl.parseatt(e.target.search)['id']); 141 }else if(e.target.className.search(/idx_dir/) > -1){ 142 frm.elements['ns'].value = acl.hsc(acl.parseatt(e.target.search)['ns']); 143 frm.elements['id'].value = ''; 144 } 145 146 acl.loadinfo(); 147 }else if(e.target.src){ // is it an image? 148console.log('its an image'); 149 acl.treetoggle(e.target); 150 } 151 152 e.stopPropagation(); 153 e.preventDefault(); 154 return false; 155 } 156 157}; 158 159addInitEvent(acl.init); 160