summaryrefslogtreecommitdiff
path: root/lib/plugins/acl/script.js
diff options
context:
space:
mode:
authorAdrian Lang <mail@adrianlang.de>2011-11-10 15:43:15 +0100
committerAdrian Lang <mail@adrianlang.de>2011-11-10 15:43:15 +0100
commit16a774a8a61756df2d8fb813bfbaed98b42e3e65 (patch)
tree3a48d311e74ccbf4017330cef8af00003b0ddb34 /lib/plugins/acl/script.js
parent662a7b3fcc22d8327026bc1ef161a096683f1580 (diff)
parenta5a71ecfcc1ed6bfca1995b39cd0abe4b8dd9eeb (diff)
downloadrpg-16a774a8a61756df2d8fb813bfbaed98b42e3e65.tar.gz
rpg-16a774a8a61756df2d8fb813bfbaed98b42e3e65.tar.bz2
Merge branch 'master' into stable
Conflicts: doku.php
Diffstat (limited to 'lib/plugins/acl/script.js')
-rw-r--r--lib/plugins/acl/script.js204
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,"&amp;");
- str = str.replace(/\"/g,"&quot;");
- str = str.replace(/\'/g,"&#039;");
- str = str.replace(/</g,"&lt;");
- str = str.replace(/>/g,"&gt;");
- 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)
+};