diff options
Diffstat (limited to 'lib/plugins/acl/script.js')
-rw-r--r-- | lib/plugins/acl/script.js | 204 |
1 files changed, 81 insertions, 123 deletions
diff --git a/lib/plugins/acl/script.js b/lib/plugins/acl/script.js index d5d0371a9..d912a2407 100644 --- a/lib/plugins/acl/script.js +++ b/lib/plugins/acl/script.js @@ -1,59 +1,69 @@ -acl = { - init: function(){ - this.ctl = $('acl_manager'); - if(!this.ctl) return; +/** + * 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; - var sel = $('acl__user').getElementsByTagName('select')[0]; + //FIXME only one underscore!! + if (jQuery('#acl_manager').length === 0) { + return; + } - addEvent(sel,'change',acl.userselhandler); - addEvent($('acl__tree'),'click',acl.treehandler); - addEvent($('acl__user').getElementsByTagName('input')[1],'click',acl.loadinfo); + jQuery('#acl__user select').change(dw_acl.userselhandler); + jQuery('#acl__user input[type=submit]').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/plugins/acl/ajax.php', + jQuery.extend(dw_acl.parseatt($clicky.parent().find('a')[0].search), + {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(e){ + userselhandler: function () { // make entry field visible/invisible - if(this.value == '__g__' || this.value == '__u__'){ - $('acl__user').getElementsByTagName('input')[0].style.display = ''; //acl_w - $('acl__user').getElementsByTagName('input')[1].style.display = ''; //submit - }else{ - $('acl__user').getElementsByTagName('input')[0].style.display = 'none'; - $('acl__user').getElementsByTagName('input')[1].style.display = 'none'; - } - - acl.loadinfo(); + jQuery('#acl__user input').toggle(this.value === '__g__' || + this.value === '__u__'); + dw_acl.loadinfo(); }, /** * Load the current permission info and edit form - * - * @param frm - Form element with needed data */ - loadinfo: function(){ - // get form - var frm = $('acl__detail').getElementsByTagName('form')[0]; - - // prepare an AJAX call - var ajax = new sack(DOKU_BASE + 'lib/plugins/acl/ajax.php'); - ajax.AjaxFailedAlert = ''; - ajax.encodeURIString = false; - if(ajax.failed) return true; - - // prepare data - var data = Array(); - data[0] = ajax.encVar('ns',frm.elements['ns'].value); - data[1] = ajax.encVar('id',frm.elements['id'].value); - data[2] = ajax.encVar('acl_t',frm.elements['acl_t'].value); - data[3] = ajax.encVar('acl_w',frm.elements['acl_w'].value); - data[4] = ajax.encVar('sectok',frm.elements['sectok'].value); - data[5] = ajax.encVar('ajax','info'); - - ajax.elementObj = $('acl__info'); - - ajax.runAJAX(data.join('&')); + loadinfo: function () { + jQuery('#acl__info').load( + DOKU_BASE + 'lib/plugins/acl/ajax.php', + jQuery('#acl__detail form').serialize() + '&ajax=info' + ); return false; }, @@ -62,11 +72,13 @@ acl = { * * @todo put into global script lib? */ - parseatt: function(str){ - if(str[0] == '?') str = str.substr(1); + parseatt: function (str) { + if (str[0] === '?') { + str = str.substr(1); + } var attributes = {}; var all = str.split('&'); - for(var i=0; i<all.length; i++){ + for (var i = 0; i < all.length; i++) { var att = all[i].split('='); attributes[att[0]] = decodeURIComponent(att[1]); } @@ -74,94 +86,40 @@ acl = { }, /** - * htmlspecialchars equivalent - * - * @todo put in gloabl scripts lib? + * Handles clicks to the tree nodes */ - hsc: function(str) { - str = str.replace(/&/g,"&"); - str = str.replace(/\"/g,"""); - str = str.replace(/\'/g,"'"); - str = str.replace(/</g,"<"); - str = str.replace(/>/g,">"); - return str; - }, + treehandler: function () { + var $link, $frm; + $link = jQuery(this); - /** - * Open or close a subtree using AJAX - * - * @author Andreas Gohr <andi@splitbrain.org> - */ - treetoggle: function(clicky){ - var listitem = clicky.parentNode.parentNode; - - // if already open, close by removing the sublist - var sublists = listitem.getElementsByTagName('ul'); - if(sublists.length){ - listitem.removeChild(sublists[0]); - clicky.src = DOKU_BASE+'lib/images/plus.gif'; - clicky.alt = '+'; - return false; - } - - // get the enclosed link (is always the first one) - var link = listitem.getElementsByTagName('a')[0]; - - // prepare an AJAX call to fetch the subtree - var ajax = new sack(DOKU_BASE + 'lib/plugins/acl/ajax.php'); - ajax.AjaxFailedAlert = ''; - ajax.encodeURIString = false; - if(ajax.failed) return true; - - //prepare the new ul - var ul = document.createElement('ul'); - listitem.appendChild(ul); - ajax.elementObj = ul; - ajax.setVar('ajax', 'tree'); - var frm = $('acl__detail').getElementsByTagName('form')[0]; - ajax.setVar('current_ns', encodeURIComponent(frm.elements['ns'].value)); - ajax.setVar('current_id', encodeURIComponent(frm.elements['id'].value)); - ajax.runAJAX(link.search.substr(1)); - clicky.src = DOKU_BASE+'lib/images/minus.gif'; - return false; - }, - - /** - * Handles all clicks in the tree, dispatching the right action based on the - * clicked element - */ - treehandler: function(e){ - if(e.target.src){ // is it an image? - acl.treetoggle(e.target); - } else if(e.target.href){ // is it a link? // remove highlighting - var obj = getElementsByClass('cur',$('acl__tree'),'a'); - for(var i=0; i<obj.length; i++){ - obj[i].className = obj[i].className.replace(/ cur/,''); - } + jQuery('#acl__tree a.cur').removeClass('cur'); // add new highlighting - e.target.className += ' cur'; + $link.addClass('cur'); // set new page to detail form - var frm = $('acl__detail').getElementsByTagName('form')[0]; - if(e.target.className.search(/wikilink1/) > -1){ - frm.elements['ns'].value = ''; - frm.elements['id'].value = acl.hsc(acl.parseatt(e.target.search)['id']); - }else if(e.target.className.search(/idx_dir/) > -1){ - frm.elements['ns'].value = acl.hsc(acl.parseatt(e.target.search)['ns']); - frm.elements['id'].value = ''; + $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(); - acl.loadinfo(); - } - - e.stopPropagation(); - e.preventDefault(); return false; } - }; -addInitEvent(acl.init); +jQuery(dw_acl.init); + +var acl = { + init: DEPRECATED_WRAP(dw_acl.init, dw_acl), + userselhandler: DEPRECATED_WRAP(dw_acl.userselhandler, dw_acl), + loadinfo: DEPRECATED_WRAP(dw_acl.loadinfo, dw_acl), + parseatt: DEPRECATED_WRAP(dw_acl.parseatt, dw_acl), + treehandler: DEPRECATED_WRAP(dw_acl.treehandler, dw_acl) +}; |