~ubuntu-branches/ubuntu/quantal/dokuwiki/quantal

« back to all changes in this revision

Viewing changes to lib/plugins/acl/script.js

  • Committer: Package Import Robot
  • Author(s): Tanguy Ortolo
  • Date: 2012-01-26 23:10:28 UTC
  • mfrom: (1.1.14) (19.1.3 experimental)
  • Revision ID: package-import@ubuntu.com-20120126231028-gdcxrxo3j4jqp2de
Tags: 0.0.20120125-1
* New upstream release.
* debian/patches/debianize.diff: updated for the new release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
acl = {
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);
 
1
/**
 
2
 * ACL Manager AJAX enhancements
 
3
 *
 
4
 * @author Andreas Gohr <andi@splitbrain.org>
 
5
 */
 
6
var dw_acl = {
 
7
    /**
 
8
     * Initialize the object and attach the event handlers
 
9
     */
 
10
    init: function () {
 
11
        var $tree;
 
12
 
 
13
        //FIXME only one underscore!!
 
14
        if (jQuery('#acl_manager').length === 0) {
 
15
            return;
 
16
        }
 
17
 
 
18
        jQuery('#acl__user select').change(dw_acl.userselhandler);
 
19
        jQuery('#acl__user input[type=submit]').click(dw_acl.loadinfo);
 
20
 
 
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');
 
26
 
 
27
                           jQuery.post(
 
28
                               DOKU_BASE + 'lib/plugins/acl/ajax.php',
 
29
                               jQuery.extend(dw_acl.parseatt($clicky.parent().find('a')[0].search),
 
30
                                             {ajax: 'tree',
 
31
                                              current_ns: $frm.find('input[name=ns]').val(),
 
32
                                              current_id: $frm.find('input[name=id]').val()}),
 
33
                               show_sublist,
 
34
                               'html'
 
35
                           );
 
36
                       },
 
37
 
 
38
                       toggle_display: function ($clicky, opening) {
 
39
                           $clicky.attr('src',
 
40
                                        DOKU_BASE + 'lib/images/' +
 
41
                                        (opening ? 'minus' : 'plus') + '.gif');
 
42
                       }});
 
43
        $tree.delegate('a', 'click', dw_acl.treehandler);
11
44
    },
12
45
 
13
 
 
14
46
    /**
15
47
     * Handle user dropdown
 
48
     *
 
49
     * Hides or shows the user/group entry box depending on what was selected in the
 
50
     * dropdown element
16
51
     */
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
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();
 
54
        jQuery('#acl__user input').toggle(this.value === '__g__' ||
 
55
                                          this.value === '__u__');
 
56
        dw_acl.loadinfo();
28
57
    },
29
58
 
30
59
    /**
31
60
     * Load the current permission info and edit form
32
 
     *
33
 
     * @param frm - Form element with needed data
34
61
     */
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('&'));
 
62
    loadinfo: function () {
 
63
        jQuery('#acl__info')
 
64
            .html('<img src="'+DOKU_BASE+'lib/images/throbber.gif" alt="..." />')
 
65
            .load(
 
66
                DOKU_BASE + 'lib/plugins/acl/ajax.php',
 
67
                jQuery('#acl__detail form').serialize() + '&ajax=info'
 
68
            );
57
69
        return false;
58
70
    },
59
71
 
62
74
     *
63
75
     * @todo put into global script lib?
64
76
     */
65
 
    parseatt: function(str){
66
 
        if(str[0] == '?') str = str.substr(1);
 
77
    parseatt: function (str) {
 
78
        if (str[0] === '?') {
 
79
            str = str.substr(1);
 
80
        }
67
81
        var attributes = {};
68
82
        var all = str.split('&');
69
 
        for(var i=0; i<all.length; i++){
 
83
        for (var i = 0; i < all.length; i++) {
70
84
            var att = all[i].split('=');
71
85
            attributes[att[0]] = decodeURIComponent(att[1]);
72
86
        }
74
88
    },
75
89
 
76
90
    /**
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 <andi@splitbrain.org>
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?
 
91
     * Handles clicks to the tree nodes
 
92
     */
 
93
    treehandler: function () {
 
94
        var $link, $frm;
 
95
 
 
96
        $link = jQuery(this);
 
97
 
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/,'');
142
 
            }
 
99
            jQuery('#acl__tree a.cur').removeClass('cur');
143
100
 
144
101
            // add new highlighting
145
 
            e.target.className += ' cur';
 
102
        $link.addClass('cur');
146
103
 
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('');
155
112
            }
156
 
 
157
 
            acl.loadinfo();
158
 
        }
159
 
 
160
 
        e.stopPropagation();
161
 
        e.preventDefault();
 
113
        dw_acl.loadinfo();
 
114
 
162
115
        return false;
163
116
    }
164
 
 
165
 
};
166
 
 
167
 
addInitEvent(acl.init);
 
117
};
 
118
 
 
119
jQuery(dw_acl.init);
 
120
 
 
121
var acl = {
 
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)
 
127
};