Skip to content

Commit

Permalink
jQuerify acl plugin JavaScript
Browse files Browse the repository at this point in the history
  • Loading branch information
adrianheine committed Aug 19, 2011
1 parent c5f9274 commit 2b580f7
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 93 deletions.
3 changes: 2 additions & 1 deletion lib/plugins/acl/admin.php
Expand Up @@ -540,7 +540,8 @@ function _html_list_acl($item){


function _html_li_acl($item){
return '<li class="level'.$item['level'].'">';
return '<li class="level' . $item['level'] . ' ' .
($item['open'] ? 'open' : 'closed') . '">';
}


Expand Down
163 changes: 71 additions & 92 deletions lib/plugins/acl/script.js
Expand Up @@ -3,16 +3,44 @@
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
acl = {
var dw_acl = {
/**
* Initialize the object and attach the event handlers
*/
init: function(){
if(!jQuery('#acl_manager').length) return; //FIXME only one underscore!!
init: function () {
var $tree;

jQuery('#acl__user select').change(acl.userselhandler);
jQuery('#acl__tree').click(acl.treehandler);
jQuery('#acl__user input[type=submit]').click(acl.loadinfo);
//FIXME only one underscore!!
if (jQuery('#acl_manager').length === 0) {
return;
}

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);
},

/**
Expand All @@ -21,32 +49,20 @@ acl = {
* 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__'){
jQuery('#acl__user input').show();
}else{
jQuery('#acl__user input').hide();
}
acl.loadinfo();
jQuery('#acl__user input').toggle(this.value === '__g__' ||
this.value === '__u__');
dw_acl.loadinfo();
},

/**
* Load the current permission info and edit form
*/
loadinfo: function(){
var frm = jQuery('#acl__detail form')[0];

loadinfo: function () {
jQuery('#acl__info').load(
DOKU_BASE + 'lib/plugins/acl/ajax.php',
{
'ns': frm.elements['ns'].value,
'id': frm.elements['id'].value,
'acl_t': frm.elements['acl_t'].value,
'acl_w': frm.elements['acl_w'].value,
'sectok': frm.elements['sectok'].value,
'ajax': 'info',
}
jQuery('#acl__detail form').serialize() + '&ajax=info'
);
return false;
},
Expand All @@ -56,91 +72,54 @@ 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]);
}
return attributes;
},

/**
* Open or close a subtree using AJAX
*
* @author Andreas Gohr <andi@splitbrain.org>
* @param DOMElement clicky - the plus/minus icon in front of a namespace
* Handles clicks to the tree nodes
*/
treetoggle: function(clicky){
var listitem = jQuery(clicky).parent().parent();

// if already open, close by removing the sublist
var sublists = listitem.find('ul');
if(sublists.length){
listitem.remove('ul');
clicky.src = DOKU_BASE+'lib/images/plus.gif';
clicky.alt = '+';
return false;
}
treehandler: function () {
var $link, $frm;

// prepare new ul to load into it via ajax
var ul = document.createElement('ul');
listitem[0].appendChild(ul);
$link = jQuery(this);

// get the enclosed link and the edit form
var link = listitem.find('a')[0];
var frm = jQuery('#acl__detail form')[0];
// remove highlighting
jQuery('#acl__tree a.cur').removeClass('cur');

// prepare ajax data
var data = acl.parseatt(link.search);
data['ajax'] = 'tree';
data['current_ns'] = frm.elements['ns'].value;
data['current_id'] = frm.elements['id'].value;
// add new highlighting
$link.addClass('cur');

// run ajax
jQuery(ul).load(DOKU_BASE + 'lib/plugins/acl/ajax.php', data);

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
*
* @param Event e The event object that caused the execution
*/
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
jQuery('#acl__tree a.cur').removeClass('cur');

var link = jQuery(e.target);

// add new highlighting
link.addClass('cur');

// set new page to detail form
var frm = jQuery('#acl__detail form')[0];
if(link.hasClass('wikilink1')){
jQuery('#acl__detail form input[name=ns]').val('');
jQuery('#acl__detail form input[name=id]').val(acl.parseatt(link[0].search)['id']);
}else if(link.hasClass('idx_dir')){
jQuery('#acl__detail form input[name=ns]').val(acl.parseatt(link[0].search)['ns']);
jQuery('#acl__detail form input[name=id]').val('');
}
acl.loadinfo();
// 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();

e.stopPropagation();
e.preventDefault();
return false;
}

};

jQuery(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)
};
1 change: 1 addition & 0 deletions lib/plugins/acl/style.css
Expand Up @@ -22,6 +22,7 @@ div#acl_manager div#acl__tree ul {

div#acl_manager div#acl__tree li {
padding-left: 1em;
list-style-image: none;
}

div#acl_manager div#acl__tree ul img {
Expand Down

0 comments on commit 2b580f7

Please sign in to comment.