diff options
Diffstat (limited to 'wiki/lib/plugins/acl/script.js')
-rw-r--r-- | wiki/lib/plugins/acl/script.js | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/wiki/lib/plugins/acl/script.js b/wiki/lib/plugins/acl/script.js new file mode 100644 index 0000000..86badff --- /dev/null +++ b/wiki/lib/plugins/acl/script.js @@ -0,0 +1,121 @@ +/** + * ACL Manager AJAX enhancements + * + * @author Andreas Gohr <andi@splitbrain.org> + */ +var dw_acl = { + /** + * Initialize the object and attach the event handlers + */ + init: function () { + var $tree; + + //FIXME only one underscore!! + if (jQuery('#acl_manager').length === 0) { + return; + } + + jQuery('#acl__user select').change(dw_acl.userselhandler); + jQuery('#acl__user button').click(dw_acl.loadinfo); + + $tree = jQuery('#acl__tree'); + $tree.dw_tree({toggle_selector: 'img', + load_data: function (show_sublist, $clicky) { + // get the enclosed link and the edit form + var $frm = jQuery('#acl__detail form'); + + jQuery.post( + DOKU_BASE + 'lib/exe/ajax.php', + jQuery.extend(dw_acl.parseatt($clicky.parent().find('a')[0].search), + {call: 'plugin_acl', + ajax: 'tree', + current_ns: $frm.find('input[name=ns]').val(), + current_id: $frm.find('input[name=id]').val()}), + show_sublist, + 'html' + ); + }, + + toggle_display: function ($clicky, opening) { + $clicky.attr('src', + DOKU_BASE + 'lib/images/' + + (opening ? 'minus' : 'plus') + '.gif'); + }}); + $tree.delegate('a', 'click', dw_acl.treehandler); + }, + + /** + * Handle user dropdown + * + * Hides or shows the user/group entry box depending on what was selected in the + * dropdown element + */ + userselhandler: function () { + // make entry field visible/invisible + jQuery('#acl__user input').toggle(this.value === '__g__' || + this.value === '__u__'); + dw_acl.loadinfo(); + }, + + /** + * Load the current permission info and edit form + */ + loadinfo: function () { + jQuery('#acl__info') + .attr('role', 'alert') + .html('<img src="'+DOKU_BASE+'lib/images/throbber.gif" alt="..." />') + .load( + DOKU_BASE + 'lib/exe/ajax.php', + jQuery('#acl__detail form').serialize() + '&call=plugin_acl&ajax=info' + ); + return false; + }, + + /** + * parse URL attributes into a associative array + * + * @todo put into global script lib? + */ + parseatt: function (str) { + if (str[0] === '?') { + str = str.substr(1); + } + var attributes = {}; + var all = str.split('&'); + for (var i = 0; i < all.length; i++) { + var att = all[i].split('='); + attributes[att[0]] = decodeURIComponent(att[1]); + } + return attributes; + }, + + /** + * Handles clicks to the tree nodes + */ + treehandler: function () { + var $link, $frm; + + $link = jQuery(this); + + // remove highlighting + jQuery('#acl__tree a.cur').removeClass('cur'); + + // add new highlighting + $link.addClass('cur'); + + // set new page to detail form + $frm = jQuery('#acl__detail form'); + if ($link.hasClass('wikilink1')) { + $frm.find('input[name=ns]').val(''); + $frm.find('input[name=id]').val(dw_acl.parseatt($link[0].search).id); + } else if ($link.hasClass('idx_dir')) { + $frm.find('input[name=ns]').val(dw_acl.parseatt($link[0].search).ns); + $frm.find('input[name=id]').val(''); + } + dw_acl.loadinfo(); + + return false; + } +}; + +jQuery(dw_acl.init); |