3
this.ctl = $('acl_manager');
6
var sel = $('acl__user').getElementsByTagName('select')[0];
8
addEvent(sel,'change',acl.userselhandler);
9
addEvent($('acl__tree'),'click',acl.treehandler);
10
addEvent($('acl__user').getElementsByTagName('input')[1],'click',acl.loadinfo);
2
* ACL Manager AJAX enhancements
4
* @author Andreas Gohr <andi@splitbrain.org>
8
* Initialize the object and attach the event handlers
13
//FIXME only one underscore!!
14
if (jQuery('#acl_manager').length === 0) {
18
jQuery('#acl__user select').change(dw_acl.userselhandler);
19
jQuery('#acl__user input[type=submit]').click(dw_acl.loadinfo);
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');
28
DOKU_BASE + 'lib/plugins/acl/ajax.php',
29
jQuery.extend(dw_acl.parseatt($clicky.parent().find('a')[0].search),
31
current_ns: $frm.find('input[name=ns]').val(),
32
current_id: $frm.find('input[name=id]').val()}),
38
toggle_display: function ($clicky, opening) {
40
DOKU_BASE + 'lib/images/' +
41
(opening ? 'minus' : 'plus') + '.gif');
43
$tree.delegate('a', 'click', dw_acl.treehandler);
15
47
* Handle user dropdown
49
* Hides or shows the user/group entry box depending on what was selected in the
17
userselhandler: function(e){
52
userselhandler: function () {
18
53
// make entry field visible/invisible
19
if(this.value == '__g__' || this.value == '__u__'){
20
$('acl__user').getElementsByTagName('input')[0].style.display = ''; //acl_w
21
$('acl__user').getElementsByTagName('input')[1].style.display = ''; //submit
23
$('acl__user').getElementsByTagName('input')[0].style.display = 'none';
24
$('acl__user').getElementsByTagName('input')[1].style.display = 'none';
54
jQuery('#acl__user input').toggle(this.value === '__g__' ||
55
this.value === '__u__');
31
60
* Load the current permission info and edit form
33
* @param frm - Form element with needed data
37
var frm = $('acl__detail').getElementsByTagName('form')[0];
39
// prepare an AJAX call
40
var ajax = new sack(DOKU_BASE + 'lib/plugins/acl/ajax.php');
41
ajax.AjaxFailedAlert = '';
42
ajax.encodeURIString = false;
43
if(ajax.failed) return true;
47
data[0] = ajax.encVar('ns',frm.elements['ns'].value);
48
data[1] = ajax.encVar('id',frm.elements['id'].value);
49
data[2] = ajax.encVar('acl_t',frm.elements['acl_t'].value);
50
data[3] = ajax.encVar('acl_w',frm.elements['acl_w'].value);
51
data[4] = ajax.encVar('sectok',frm.elements['sectok'].value);
52
data[5] = ajax.encVar('ajax','info');
54
ajax.elementObj = $('acl__info');
56
ajax.runAJAX(data.join('&'));
62
loadinfo: function () {
64
.html('<img src="'+DOKU_BASE+'lib/images/throbber.gif" alt="..." />')
66
DOKU_BASE + 'lib/plugins/acl/ajax.php',
67
jQuery('#acl__detail form').serialize() + '&ajax=info'
77
* htmlspecialchars equivalent
79
* @todo put in gloabl scripts lib?
82
str = str.replace(/&/g,"&");
83
str = str.replace(/\"/g,""");
84
str = str.replace(/\'/g,"'");
85
str = str.replace(/</g,"<");
86
str = str.replace(/>/g,">");
92
* Open or close a subtree using AJAX
94
* @author Andreas Gohr <andi@splitbrain.org>
96
treetoggle: function(clicky){
97
var listitem = clicky.parentNode.parentNode;
99
// if already open, close by removing the sublist
100
var sublists = listitem.getElementsByTagName('ul');
102
listitem.removeChild(sublists[0]);
103
clicky.src = DOKU_BASE+'lib/images/plus.gif';
108
// get the enclosed link (is always the first one)
109
var link = listitem.getElementsByTagName('a')[0];
111
// prepare an AJAX call to fetch the subtree
112
var ajax = new sack(DOKU_BASE + 'lib/plugins/acl/ajax.php');
113
ajax.AjaxFailedAlert = '';
114
ajax.encodeURIString = false;
115
if(ajax.failed) return true;
118
var ul = document.createElement('ul');
119
listitem.appendChild(ul);
120
ajax.elementObj = ul;
121
ajax.setVar('ajax', 'tree');
122
var frm = $('acl__detail').getElementsByTagName('form')[0];
123
ajax.setVar('current_ns', encodeURIComponent(frm.elements['ns'].value));
124
ajax.setVar('current_id', encodeURIComponent(frm.elements['id'].value));
125
ajax.runAJAX(link.search.substr(1));
126
clicky.src = DOKU_BASE+'lib/images/minus.gif';
131
* Handles all clicks in the tree, dispatching the right action based on the
134
treehandler: function(e){
135
if(e.target.src){ // is it an image?
136
acl.treetoggle(e.target);
137
} else if(e.target.href){ // is it a link?
91
* Handles clicks to the tree nodes
93
treehandler: function () {
138
98
// remove highlighting
139
var obj = getElementsByClass('cur',$('acl__tree'),'a');
140
for(var i=0; i<obj.length; i++){
141
obj[i].className = obj[i].className.replace(/ cur/,'');
99
jQuery('#acl__tree a.cur').removeClass('cur');
144
101
// add new highlighting
145
e.target.className += ' cur';
102
$link.addClass('cur');
147
104
// set new page to detail form
148
var frm = $('acl__detail').getElementsByTagName('form')[0];
149
if(e.target.className.search(/wikilink1/) > -1){
150
frm.elements['ns'].value = '';
151
frm.elements['id'].value = acl.hsc(acl.parseatt(e.target.search)['id']);
152
}else if(e.target.className.search(/idx_dir/) > -1){
153
frm.elements['ns'].value = acl.hsc(acl.parseatt(e.target.search)['ns']);
154
frm.elements['id'].value = '';
105
$frm = jQuery('#acl__detail form');
106
if ($link.hasClass('wikilink1')) {
107
$frm.find('input[name=ns]').val('');
108
$frm.find('input[name=id]').val(dw_acl.parseatt($link[0].search).id);
109
} else if ($link.hasClass('idx_dir')) {
110
$frm.find('input[name=ns]').val(dw_acl.parseatt($link[0].search).ns);
111
$frm.find('input[name=id]').val('');
167
addInitEvent(acl.init);
122
init: DEPRECATED_WRAP(dw_acl.init, dw_acl),
123
userselhandler: DEPRECATED_WRAP(dw_acl.userselhandler, dw_acl),
124
loadinfo: DEPRECATED_WRAP(dw_acl.loadinfo, dw_acl),
125
parseatt: DEPRECATED_WRAP(dw_acl.parseatt, dw_acl),
126
treehandler: DEPRECATED_WRAP(dw_acl.treehandler, dw_acl)