[ Index ]

PHP Cross Reference of DokuWiki

title

Body

[close]

/lib/plugins/acl/ -> script.js (source)

   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);
  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('ajax','info');
  52  
  53          ajax.elementObj = $('acl__info');
  54  
  55          ajax.runAJAX(data.join('&'));
  56          return false;
  57      },
  58  
  59      /**
  60       * parse URL attributes into a associative array
  61       *
  62       * @todo put into global script lib?
  63       */
  64      parseatt: function(str){
  65          if(str[0] == '?') str = str.substr(1);
  66          var attributes = {};
  67          var all = str.split('&');
  68          for(var i=0; i<all.length; i++){
  69              var att = all[i].split('=');
  70              attributes[att[0]] = decodeURIComponent(att[1]);
  71          }
  72          return attributes;
  73      },
  74  
  75      /**
  76       * htmlspecialchars equivalent
  77       *
  78       * @todo put in gloabl scripts lib?
  79       */
  80      hsc: function(str) {
  81          str = str.replace(/&/g,"&amp;");
  82          str = str.replace(/\"/g,"&quot;");
  83          str = str.replace(/\'/g,"&#039;");
  84          str = str.replace(/</g,"&lt;");
  85          str = str.replace(/>/g,"&gt;");
  86          return str;
  87      },
  88  
  89  
  90      /**
  91       * Open or close a subtree using AJAX
  92       *
  93       * @author Andreas Gohr <andi@splitbrain.org>
  94       */
  95      treetoggle: function(clicky){
  96          var listitem = clicky.parentNode.parentNode;
  97  
  98          // if already open, close by removing the sublist
  99          var sublists = listitem.getElementsByTagName('ul');
 100          if(sublists.length){
 101              listitem.removeChild(sublists[0]);
 102              clicky.src = DOKU_BASE+'lib/images/plus.gif';
 103              clicky.alt = '+';
 104              return false;
 105          }
 106  
 107          // get the enclosed link (is always the first one)
 108          var link = listitem.getElementsByTagName('a')[0];
 109  
 110          // prepare an AJAX call to fetch the subtree
 111          var ajax = new sack(DOKU_BASE + 'lib/plugins/acl/ajax.php');
 112          ajax.AjaxFailedAlert = '';
 113          ajax.encodeURIString = false;
 114          if(ajax.failed) return true;
 115  
 116          //prepare the new ul
 117          var ul = document.createElement('ul');
 118          listitem.appendChild(ul);
 119          ajax.elementObj = ul;
 120          ajax.runAJAX(link.search.substr(1)+'&ajax=tree');
 121          clicky.src = DOKU_BASE+'lib/images/minus.gif';
 122          return false;
 123      },
 124  
 125      /**
 126       * Handles all clicks in the tree, dispatching the right action based on the
 127       * clicked element
 128       */
 129      treehandler: function(e){
 130          if(e.target.src){ // is it an image?
 131              acl.treetoggle(e.target);
 132          } else if(e.target.href){ // is it a link?
 133              // remove highlighting
 134              var obj = getElementsByClass('cur',$('acl__tree'),'a')[0];
 135              if(obj) obj.className = obj.className.replace(/ cur/,'');
 136  
 137              // add new highlighting
 138              e.target.className += ' cur';
 139  
 140              // set new page to detail form
 141              var frm = $('acl__detail').getElementsByTagName('form')[0];
 142              if(e.target.className.search(/wikilink1/) > -1){
 143                  frm.elements['ns'].value = '';
 144                  frm.elements['id'].value = acl.hsc(acl.parseatt(e.target.search)['id']);
 145              }else if(e.target.className.search(/idx_dir/) > -1){
 146                  frm.elements['ns'].value = acl.hsc(acl.parseatt(e.target.search)['ns']);
 147                  frm.elements['id'].value = '';
 148              }
 149  
 150              acl.loadinfo();
 151          }
 152  
 153          e.stopPropagation();
 154          e.preventDefault();
 155          return false;
 156      }
 157  
 158  };
 159  
 160  addInitEvent(acl.init);


Generated: Tue Dec 2 01:30:01 2008 Cross-referenced by PHPXref 0.7