1/** 2 * ACL Manager AJAX enhancements 3 * 4 * @author Andreas Gohr <andi@splitbrain.org> 5 */ 6acl = { 7 /** 8 * Initialize the object and attach the event handlers 9 */ 10 init: function(){ 11 if(!jQuery('#acl_manager').length) return; //FIXME only one underscore!! 12 13 jQuery('#acl__user select').change(acl.userselhandler); 14 jQuery('#acl__tree').click(acl.treehandler); 15 jQuery('#acl__user input[type=submit]').click(acl.loadinfo); 16 }, 17 18 /** 19 * Handle user dropdown 20 * 21 * Hides or shows the user/group entry box depending on what was selected in the 22 * dropdown element 23 */ 24 userselhandler: function(e){ 25 // make entry field visible/invisible 26 if(this.value == '__g__' || this.value == '__u__'){ 27 jQuery('#acl__user input').show(); 28 }else{ 29 jQuery('#acl__user input').hide(); 30 } 31 acl.loadinfo(); 32 }, 33 34 /** 35 * Load the current permission info and edit form 36 */ 37 loadinfo: function(){ 38 var frm = jQuery('#acl__detail form')[0]; 39 40 jQuery('#acl__info').load( 41 DOKU_BASE + 'lib/plugins/acl/ajax.php', 42 { 43 'ns': frm.elements['ns'].value, 44 'id': frm.elements['id'].value, 45 'acl_t': frm.elements['acl_t'].value, 46 'acl_w': frm.elements['acl_w'].value, 47 'sectok': frm.elements['sectok'].value, 48 'ajax': 'info', 49 } 50 ); 51 return false; 52 }, 53 54 /** 55 * parse URL attributes into a associative array 56 * 57 * @todo put into global script lib? 58 */ 59 parseatt: function(str){ 60 if(str[0] == '?') str = str.substr(1); 61 var attributes = {}; 62 var all = str.split('&'); 63 for(var i=0; i<all.length; i++){ 64 var att = all[i].split('='); 65 attributes[att[0]] = decodeURIComponent(att[1]); 66 } 67 return attributes; 68 }, 69 70 /** 71 * Open or close a subtree using AJAX 72 * 73 * @author Andreas Gohr <andi@splitbrain.org> 74 * @param DOMElement clicky - the plus/minus icon in front of a namespace 75 */ 76 treetoggle: function(clicky){ 77 var listitem = jQuery(clicky).parent().parent(); 78 79 // if already open, close by removing the sublist 80 var sublists = listitem.find('ul'); 81 if(sublists.length){ 82 listitem.remove('ul'); 83 clicky.src = DOKU_BASE+'lib/images/plus.gif'; 84 clicky.alt = '+'; 85 return false; 86 } 87 88 // prepare new ul to load into it via ajax 89 var ul = document.createElement('ul'); 90 listitem[0].appendChild(ul); 91 92 // get the enclosed link and the edit form 93 var link = listitem.find('a')[0]; 94 var frm = jQuery('#acl__detail form')[0]; 95 96 // prepare ajax data 97 var data = acl.parseatt(link.search); 98 data['ajax'] = 'tree'; 99 data['current_ns'] = frm.elements['ns'].value; 100 data['current_id'] = frm.elements['id'].value; 101 102 // run ajax 103 jQuery(ul).load(DOKU_BASE + 'lib/plugins/acl/ajax.php', data); 104 105 clicky.src = DOKU_BASE+'lib/images/minus.gif'; 106 return false; 107 }, 108 109 /** 110 * Handles all clicks in the tree, dispatching the right action based on the 111 * clicked element 112 * 113 * @param Event e The event object that caused the execution 114 */ 115 treehandler: function(e){ 116 if(e.target.src){ // is it an image? 117 acl.treetoggle(e.target); 118 } else if(e.target.href){ // is it a link? 119 // remove highlighting 120 jQuery('#acl__tree a.cur').removeClass('cur'); 121 122 var link = jQuery(e.target); 123 124 // add new highlighting 125 link.addClass('cur'); 126 127 // set new page to detail form 128 var frm = jQuery('#acl__detail form')[0]; 129 if(link.hasClass('wikilink1')){ 130 jQuery('#acl__detail form input[name=ns]').val(''); 131 jQuery('#acl__detail form input[name=id]').val(acl.parseatt(link[0].search)['id']); 132 }else if(link.hasClass('idx_dir')){ 133 jQuery('#acl__detail form input[name=ns]').val(acl.parseatt(link[0].search)['ns']); 134 jQuery('#acl__detail form input[name=id]').val(''); 135 } 136 acl.loadinfo(); 137 } 138 139 e.stopPropagation(); 140 e.preventDefault(); 141 return false; 142 } 143 144}; 145 146jQuery(acl.init); 147