[ Index ]

WordPress Source Cross Reference

title

Body

[close]

/wp-admin/ -> list-manipulation-js.php (source)

   1  <?php
   2  require_once ('admin.php');
   3  header('Content-type: text/javascript; charset=' . get_settings('blog_charset'), true);
   4  ?>
   5  addLoadEvent(function(){theList=new listMan();});
   6  function deleteSomething(what,id,message,obj){if(!obj)obj=theList;if(!message)message="<?php printf(__('Are you sure you want to delete this %s?'),"'+what+'"); ?>";if(confirm(message))return obj.ajaxDelete(what,id);else return false;}
   7  function dimSomething(what,id,dimClass,obj){if(!obj)obj=theList;return obj.ajaxDimmer(what,id,dimClass);}
   8  
   9  function WPAjax(file, responseEl){//class WPAjax extends sack
  10      this.getResponseElement=function(r){var p=document.getElementById(r+'-p');if(!p){p=document.createElement('span');p.id=r+'-p';document.getElementById(r).appendChild(p);}this.myResponseElement=p;    }
  11      this.parseAjaxResponse=function(){
  12          if(isNaN(this.response)){this.myResponseElement.innerHTML='<div class="error"><p>'+this.response+'</p></div>';return false;}
  13          this.response=parseInt(this.response,10);
  14          if(-1==this.response){this.myResponseElement.innerHTML="<div class='error'><p><?php _e("You don't have permission to do that."); ?></p></div>";return false;}
  15          else if(0==this.response){this.myResponseElement.innerHTML="<div class='error'><p><?php _e("Something odd happened. Try refreshing the page? Either that or what you tried to change never existed in the first place."); ?></p></div>";return false;}
  16          return true;
  17      }
  18      this.parseAjaxResponseXML=function(){
  19          if(this.responseXML&&typeof this.responseXML=='object')return true;
  20          if(isNaN(this.response)){this.myResponseElement.innerHTML='<div class="error"><p>'+this.response+'</p></div>';return false;}
  21          var r=parseInt(this.response,10);
  22          if(-1==r){this.myResponseElement.innerHTML="<div class='error'><p><?php _e("You don't have permission to do that."); ?></p></div>";}
  23          else if(0==r){this.myResponseElement.innerHTML="<div class='error'><p><?php _e("Invalid Entry."); ?></p></div>";}
  24          return false;
  25      }
  26      this.init(file,responseEl);
  27  }    WPAjax.prototype=new sack;
  28      WPAjax.prototype.init=function(f,r){
  29          this.encVar('cookie', document.cookie);
  30          this.requestFile=f;this.getResponseElement(r);this.method='POST';
  31          this.onLoading=function(){this.myResponseElement.innerHTML="<?php _e('Sending Data...'); ?>";};
  32          this.onLoaded=function(){this.myResponseElement.innerHTML="<?php _e('Data Sent...'); ?>";};
  33          this.onInteractive=function(){this.myResponseElement.innerHTML="<?php _e('Processing Data...'); ?>";};
  34      }
  35  
  36  function listMan(theListId){
  37      this.theList=null;
  38      this.ajaxRespEl=null;
  39      this.inputData='';this.clearInputs=new Array();this.showLink=1;
  40      this.topAdder=0;this.alt='alternate';this.recolorPos;this.reg_color='#FFFFFF';this.alt_color='#F1F1F1';
  41      this.addComplete=null;this.delComplete=null;this.dimComplete=null;
  42      var listType;var listItems;
  43      self.aTrap=0;
  44  
  45      this.ajaxAdder=function(what,where,update){//for TR, server must wrap TR in TABLE TBODY. this.makeEl cleans it
  46          if(self.aTrap)return;self.aTrap=1;setTimeout('aTrap=0',300);
  47          this.ajaxAdd=new WPAjax('admin-ajax.php',this.ajaxRespEl?this.ajaxRespEl:'ajax-response');
  48          if(this.ajaxAdd.failed)return true;
  49          this.grabInputs(where);
  50          var tempObj=this;
  51          this.ajaxAdd.onCompletion=function(){
  52              if(!this.parseAjaxResponseXML())return;
  53              var newItems=this.responseXML.getElementsByTagName(what);
  54              if(tempObj.topAdder)tempObj.recolorPos=0;
  55              if(newItems){for (c=0;c<newItems.length;c++){
  56                  var id=parseInt(getNodeValue(newItems[c],'id'),10);
  57                  var exists=document.getElementById(what+'-'+id);
  58                  if(exists)tempObj.replaceListItem(exists.id,getNodeValue(newItems[c],'newitem'),newItems.length,update);
  59                  else tempObj.addListItem(getNodeValue(newItems[c],'newitem'),newItems.length);
  60              }}
  61              tempObj.inputData='';
  62              if(tempObj.showLink){this.myResponseElement.innerHTML='<div id="jumplink" class="updated fade"><p><a href="#'+what+'-'+id+'"><?php _e('Jump to new item'); ?></a></p></div>';}
  63              else this.myResponseElement.innerHTML='';
  64              for(var i=0;i<tempObj.clearInputs.length;i++){try{var theI=document.getElementById(tempObj.clearInputs[i]);if(theI.tagName.match(/select/i))theI.selectedIndex=0;else theI.value='';}catch(e){}}
  65              if(tempObj.addComplete&&typeof tempObj.addComplete=='function')tempObj.addComplete(what,where,update);
  66              tempObj.recolorList(tempObj.recolorPos,1000);
  67          }
  68          this.ajaxAdd.runAJAX('action='+(update?'update-':'add-')+what+this.inputData);
  69          return false;
  70      }
  71      this.ajaxUpdater=function(what,where){return this.ajaxAdder(what,where,true);}
  72      this.ajaxDelete=function(what,id){
  73          if(self.aTrap)return;self.aTrap=1;setTimeout('aTrap=0',300);
  74          this.ajaxDel=new WPAjax('admin-ajax.php',this.ajaxRespEl?this.ajaxRespEl:'ajax-response');
  75          if(this.ajaxDel.failed)return true;
  76          var tempObj=this;
  77          this.ajaxDel.onCompletion=function(){if(this.parseAjaxResponse()){tempObj.removeListItem(what.replace('-as-spam','')+'-'+id);this.myResponseElement.innerHTML='';if(tempObj.delComplete&&typeof tempObj.delComplete=='function')tempObj.delComplete(what,id);tempObj.recolorList(tempObj.recolorPos,1000)}};
  78          this.ajaxDel.runAJAX('action=delete-'+what+'&id='+id);
  79          return false;
  80      }
  81      this.ajaxDimmer=function(what,id,dimClass){
  82          if(self.aTrap)return;self.aTrap=1;setTimeout('aTrap=0',300);
  83          this.ajaxDim=new WPAjax('admin-ajax.php',this.ajaxRespEl?this.ajaxRespEl:'ajax-response');
  84          if(this.ajaxDim.failed)return true;
  85          var tempObj=this;
  86          this.ajaxDim.onCompletion=function(){if(this.parseAjaxResponse()){tempObj.dimItem(what+'-'+id,dimClass);this.myResponseElement.innerHTML='';if(tempObj.dimComplete&&typeof tempObj.dimComplete=='function')tempObj.dimComplete(what,id,dimClass);}};
  87          this.ajaxDim.runAJAX('action=dim-'+what+'&id='+id);
  88          return false;
  89      }
  90      this.makeEl=function(h){var fakeItem=document.createElement('div');fakeItem.innerHTML=h;var r=fakeItem.firstChild;while(r.tagName.match(/(table|tbody)/i)){r=r.firstChild;}return r;}
  91      this.addListItem=function(h,tot){
  92          newItem=this.makeEl(h);
  93          if(this.topAdder){var firstItem=this.theList.getElementsByTagName('table'==listType?'tr':'li')[0];listItems.unshift(newItem.id);this.recolorPos++}
  94          else{listItems.push(newItem.id);this.recolorPos=listItems.length;}
  95          if(this.alt&&!((tot-this.recolorPos)%2))newItem.className+=' '+this.alt;
  96          if(firstItem)firstItem.parentNode.insertBefore(newItem,firstItem);
  97          else this.theList.appendChild(newItem);
  98          Fat.fade_element(newItem.id);
  99      }
 100      this.removeListItem=function(id,noFade){
 101          if(!noFade)Fat.fade_element(id,null,700,'#FF3333');
 102          var theItem=document.getElementById(id);
 103          if(!noFade){var func=encloseFunc(function(a){a.parentNode.removeChild(a);},theItem);setTimeout(func,705);}
 104          else{theItem.parentNode.removeChild(theItem);}
 105          var pos=this.getListPos(id);
 106          listItems.splice(pos,1);
 107      }
 108      this.replaceListItem=function(id,h,tot,update){
 109          if(!update){this.removeListItem(id,true);this.addListItem(h,tot);return;}
 110          var newItem=this.makeEl(h);
 111          var oldItem=document.getElementById(id);
 112          var pos=this.getListPos(oldItem.id,1);if(this.alt&&!(pos%2))newItem.className+=' '+this.alt;
 113          oldItem.parentNode.replaceChild(newItem,oldItem);
 114          Fat.fade_element(newItem.id);
 115      }
 116      this.dimItem=function(id,dimClass,noFade){
 117          var theItem=document.getElementById(id);
 118          if(theItem.className.match(dimClass)){if(!noFade)Fat.fade_element(id,null,700,null);theItem.className=theItem.className.replace(dimClass,'');}
 119          else{if(!noFade)Fat.fade_element(id,null,700,'#FF3333');theItem.className=theItem.className+' '+dimClass;}
 120      }
 121      this.grabInputs=function(elId){//text,password,hidden,textarea,select
 122          var theItem=document.getElementById(elId);
 123          var inputs=new Array();
 124          inputs.push(theItem.getElementsByTagName('input'),theItem.getElementsByTagName('textarea'),theItem.getElementsByTagName('select'));
 125          for(var a=0;a<inputs.length;a++){
 126              for(var i=0;i<inputs[a].length;i++){
 127                  if('action'==inputs[a][i].name)continue;
 128                  if('text'==inputs[a][i].type||'password'==inputs[a][i].type||'hidden'==inputs[a][i].type||inputs[a][i].tagName.match(/textarea/i)){
 129                      this.inputData+='&'+inputs[a][i].name+'='+encodeURIComponent(inputs[a][i].value);if('hidden'!=inputs[a][i].type)this.clearInputs.push(inputs[a][i].id);
 130                  }else if(inputs[a][i].tagName.match(/select/i)){
 131                      this.inputData+='&'+inputs[a][i].name+'='+encodeURIComponent(inputs[a][i].options[inputs[a][i].selectedIndex].value);this.clearInputs.push(inputs[a][i].id);
 132                  }
 133              }    
 134          }
 135      }
 136      this.getListPos=function(id,n){for(var i=0;i<listItems.length;i++){if(id==listItems[i]){var pos=i;break;}}if(!n){if(pos<this.recolorPos)this.recolorPos=pos;}return pos;}
 137      this.getListItems=function(){
 138          if(this.theList)return;
 139          listItems=new Array();
 140          if(theListId){this.theList=document.getElementById(theListId);if(!this.theList)return false;}
 141          else{this.theList=document.getElementById('the-list');if(this.theList)theListId='the-list';}
 142          if(this.theList){
 143              var items=this.theList.getElementsByTagName('tr');listType='table';
 144              if(!items[0]){items=this.theList.getElementsByTagName('li');listType='list';}
 145              for(var i=0;i<items.length;i++){listItems.push(items[i].id);}
 146              this.recolorPos=listItems.length;
 147          }
 148      }
 149      this.recolorList=function(pos,dur){
 150          if(!this.alt)return;if(!pos)pos=0;this.recolorPos=listItems.length;
 151          for(var i=pos;i<listItems.length;i++){var e=document.getElementById(listItems[i]);if(i%2)e.className=e.className.replace(this.alt,'fade-'+this.alt_color.slice(1));else e.className+=' '+this.alt+' fade-'+this.reg_color.slice(1);e.style.backgroundColor='';}
 152          Fat.fade_all(dur);
 153          var func=encloseFunc(function(l){for(var i=0;i<l.length;i++){var e=document.getElementById(l[i]);e.className=e.className.replace(/fade-[a-f0-9]{6}/i,'');}},listItems);
 154          setTimeout(func,dur+5);
 155      }
 156      this.getListItems();
 157  }
 158  //No submit unless eval(code) returns true.
 159  function killSubmit(code,e){if(!e){if(window.event)e=window.event;else return;}var t=e.target?e.target:e.srcElement;if(('text'==t.type&&e.keyCode==13)||('submit'==t.type&&'click'==e.type)){if(!eval(code)){e.returnValue=false;e.cancelBubble=true;return false;}}}
 160  //Pretty func from ALA http://www.alistapart.com/articles/gettingstartedwithajax
 161  function getNodeValue(tree,el){return tree.getElementsByTagName(el)[0].firstChild.nodeValue;}
 162  //Generic but lame JS closure
 163  function encloseFunc(f){var a=arguments[1];return function(){return f(a);}}

Your comment here...

Name: Location:
Comments:


List: Classes | Functions | Variables | Constants | Tables

Generated: Sat Jul 15 11:57:04 2006 Courtesy of Taragana