source: documentation/trunk/packages/dokuwiki-2011-05-25a/lib/plugins/acl/script.js@ 30098

Last change on this file since 30098 was 25027, checked in by jmt12, 12 years ago

Adding the packages directory, and within it a configured version of dokuwiki all ready to run

File size: 5.3 KB
Line 
1acl = {
2 init: function(){
3 this.ctl = $('acl_manager');
4 if(!this.ctl) return;
5
6 var sel = $('acl__user').getElementsByTagName('select')[0];
7
8 addEvent(sel,'change',acl.userselhandler);
9 addEvent($('acl__tree'),'click',acl.treehandler);
10 addEvent($('acl__user').getElementsByTagName('input')[1],'click',acl.loadinfo);
11 },
12
13
14 /**
15 * Handle user dropdown
16 */
17 userselhandler: function(e){
18 // 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
22 }else{
23 $('acl__user').getElementsByTagName('input')[0].style.display = 'none';
24 $('acl__user').getElementsByTagName('input')[1].style.display = 'none';
25 }
26
27 acl.loadinfo();
28 },
29
30 /**
31 * Load the current permission info and edit form
32 *
33 * @param frm - Form element with needed data
34 */
35 loadinfo: function(){
36 // get form
37 var frm = $('acl__detail').getElementsByTagName('form')[0];
38
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;
44
45 // prepare data
46 var data = Array();
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');
53
54 ajax.elementObj = $('acl__info');
55
56 ajax.runAJAX(data.join('&'));
57 return false;
58 },
59
60 /**
61 * parse URL attributes into a associative array
62 *
63 * @todo put into global script lib?
64 */
65 parseatt: function(str){
66 if(str[0] == '?') str = str.substr(1);
67 var attributes = {};
68 var all = str.split('&');
69 for(var i=0; i<all.length; i++){
70 var att = all[i].split('=');
71 attributes[att[0]] = decodeURIComponent(att[1]);
72 }
73 return attributes;
74 },
75
76 /**
77 * htmlspecialchars equivalent
78 *
79 * @todo put in gloabl scripts lib?
80 */
81 hsc: function(str) {
82 str = str.replace(/&/g,"&amp;");
83 str = str.replace(/\"/g,"&quot;");
84 str = str.replace(/\'/g,"&#039;");
85 str = str.replace(/</g,"&lt;");
86 str = str.replace(/>/g,"&gt;");
87 return str;
88 },
89
90
91 /**
92 * Open or close a subtree using AJAX
93 *
94 * @author Andreas Gohr <[email protected]>
95 */
96 treetoggle: function(clicky){
97 var listitem = clicky.parentNode.parentNode;
98
99 // if already open, close by removing the sublist
100 var sublists = listitem.getElementsByTagName('ul');
101 if(sublists.length){
102 listitem.removeChild(sublists[0]);
103 clicky.src = DOKU_BASE+'lib/images/plus.gif';
104 clicky.alt = '+';
105 return false;
106 }
107
108 // get the enclosed link (is always the first one)
109 var link = listitem.getElementsByTagName('a')[0];
110
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;
116
117 //prepare the new ul
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';
127 return false;
128 },
129
130 /**
131 * Handles all clicks in the tree, dispatching the right action based on the
132 * clicked element
133 */
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?
138 // 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/,'');
142 }
143
144 // add new highlighting
145 e.target.className += ' cur';
146
147 // 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 = '';
155 }
156
157 acl.loadinfo();
158 }
159
160 e.stopPropagation();
161 e.preventDefault();
162 return false;
163 }
164
165};
166
167addInitEvent(acl.init);
Note: See TracBrowser for help on using the repository browser.