1/** 2 * ACL Manager AJAX enhancements 3 * 4 * @author Andreas Gohr <andi@splitbrain.org> 5 */ 6var dw_acl = { 7 /** 8 * Initialize the object and attach the event handlers 9 */ 10 init: function () { 11 var $tree; 12 13 //FIXME only one underscore!! 14 if (jQuery('#acl_manager').length === 0) { 15 return; 16 } 17 18 jQuery('#acl__user select').change(dw_acl.userselhandler); 19 jQuery('#acl__user input[type=submit]').click(dw_acl.loadinfo); 20 21 $tree = jQuery('#acl__tree'); 22 $tree.dw_tree({toggle_selector: 'img', 23 load_data: function (show_sublist, $clicky) { 24 // get the enclosed link and the edit form 25 var $frm = jQuery('#acl__detail form'); 26 27 jQuery.post( 28 DOKU_BASE + 'lib/plugins/acl/ajax.php', 29 jQuery.extend(dw_acl.parseatt($clicky.parent().find('a')[0].search), 30 {ajax: 'tree', 31 current_ns: $frm.find('input[name=ns]').val(), 32 current_id: $frm.find('input[name=id]').val()}), 33 show_sublist, 34 'html' 35 ); 36 }, 37 38 toggle_display: function ($clicky, opening) { 39 $clicky.attr('src', 40 DOKU_BASE + 'lib/images/' + 41 (opening ? 'minus' : 'plus') + '.gif'); 42 }}); 43 $tree.delegate('a', 'click', dw_acl.treehandler); 44 }, 45 46 /** 47 * Handle user dropdown 48 * 49 * Hides or shows the user/group entry box depending on what was selected in the 50 * dropdown element 51 */ 52 userselhandler: function () { 53 // make entry field visible/invisible 54 jQuery('#acl__user input').toggle(this.value === '__g__' || 55 this.value === '__u__'); 56 dw_acl.loadinfo(); 57 }, 58 59 /** 60 * Load the current permission info and edit form 61 */ 62 loadinfo: function () { 63 jQuery('#acl__info') 64 .attr('role', 'alert') 65 .html('<img src="'+DOKU_BASE+'lib/images/throbber.gif" alt="..." />') 66 .load( 67 DOKU_BASE + 'lib/plugins/acl/ajax.php', 68 jQuery('#acl__detail form').serialize() + '&ajax=info' 69 ); 70 return false; 71 }, 72 73 /** 74 * parse URL attributes into a associative array 75 * 76 * @todo put into global script lib? 77 */ 78 parseatt: function (str) { 79 if (str[0] === '?') { 80 str = str.substr(1); 81 } 82 var attributes = {}; 83 var all = str.split('&'); 84 for (var i = 0; i < all.length; i++) { 85 var att = all[i].split('='); 86 attributes[att[0]] = decodeURIComponent(att[1]); 87 } 88 return attributes; 89 }, 90 91 /** 92 * Handles clicks to the tree nodes 93 */ 94 treehandler: function () { 95 var $link, $frm; 96 97 $link = jQuery(this); 98 99 // remove highlighting 100 jQuery('#acl__tree a.cur').removeClass('cur'); 101 102 // add new highlighting 103 $link.addClass('cur'); 104 105 // set new page to detail form 106 $frm = jQuery('#acl__detail form'); 107 if ($link.hasClass('wikilink1')) { 108 $frm.find('input[name=ns]').val(''); 109 $frm.find('input[name=id]').val(dw_acl.parseatt($link[0].search).id); 110 } else if ($link.hasClass('idx_dir')) { 111 $frm.find('input[name=ns]').val(dw_acl.parseatt($link[0].search).ns); 112 $frm.find('input[name=id]').val(''); 113 } 114 dw_acl.loadinfo(); 115 116 return false; 117 } 118}; 119 120jQuery(dw_acl.init); 121