PHP Cross Reference of WordPress Subversion HEAD

[ Index ]     [ Classes ]     [ Functions ]     [ Variables ]     [ Constants ]

title

Body

[close]

/wp-includes/js/ -> wp-lists.js (source)

   1  (function($) {
   2  var currentFormEl = false;
   3  var fs = {add:'ajaxAdd',del:'ajaxDel',dim:'ajaxDim',process:'process',recolor:'recolor'};
   4  
   5  wpAjax = {
   6      unserialize: function( s ) {
   7          var r = {}; if ( !s ) { return r; }
   8          var q = s.split('?'); if ( q[1] ) { s = q[1]; }
   9          var pp = s.split('&');
  10          for ( var i in pp ) {
  11              var p = pp[i].split('=');
  12              r[p[0]] = p[1];
  13          }
  14          return r;
  15      },
  16      parseAjaxResponse: function( x, r, e ) { // 1 = good, 0 = strange (bad data?), -1 = you lack permission
  17          var re = $('#' + r).html('');
  18          if ( x && typeof x == 'object' && x.getElementsByTagName('wp_ajax') ) {
  19              var errs = $('wp_error', x);
  20              if ( errs.size() ) {
  21                  var err = '';
  22                  errs.each( function() {
  23                      var code = $(this).attr('code');
  24                      if ( formField = $('wp_error_data[@code="' + code + '"] form-field', x).text() )
  25                          code = formField;
  26                      wpAjax.invalidateForm( $('#' + e + ' :input[@name="' + code + '"]' ).parents('.form-field:first') );
  27                      err += '<p>' + this.firstChild.nodeValue + '</p>';
  28                  } );
  29                  return !re.html( '<div class="error">' + err + '</div>' );
  30              }
  31              return true;
  32          }
  33          if ( isNaN(x) ) { return !re.html('<div class="error"><p>' + x + '</p></div>'); }
  34          x = parseInt(x,10);
  35          if ( -1 == x ) { return !re.html('<div class="error"><p>You do not have permission to do that.</p></div>'); }
  36          else if ( 0 === x ) { return !re.html('<div class="error"><p>AJAX is teh b0rked.</p></div>'); }
  37          return true;
  38      },
  39      invalidateForm: function( jQ ) {
  40          jQ.addClass( 'form-invalid' ).change( function() { $(this).removeClass( 'form-invalid' ); } );
  41      }
  42  };
  43  
  44  var wpList = {
  45      settings: {
  46          url: wpListL10n.url, type: 'POST',
  47          response: 'ajax-response',
  48  
  49          what: '',
  50          alt: 'alternate', altOffset: 0,
  51          addColor: null, delColor: null, dimAddColor: null, dimDelColor: null,
  52  
  53          confirm: null,
  54          addBefore: null, addAfter: null,
  55          delBefore: null, delAfter: null,
  56          dimBefore: null, dimAfter: null
  57      },
  58  
  59      nonce: function(e,s) {
  60          var url = wpAjax.unserialize(e.attr('href'));
  61          return s.nonce || url._ajax_nonce || $('#' + s.element + ' input[@name=_ajax_nonce]').val() || url._wpnonce || $('#' + s.element + ' input[@name=_wpnonce]').val() || 0;
  62      },
  63  
  64      parseClass: function(e,t) {
  65          var c = []; try { c = $(e).attr('class').match(new RegExp(t+':[A-Za-z0-9:_=-]+'))[0].split(':'); } catch(r) {}
  66          return c;
  67      },
  68  
  69      pre: function(e,s,a) {
  70          var bg; var r;
  71          s = $.extend( {}, this.wpList.settings, {
  72              element: null,
  73              nonce: 0
  74          }, s || {} );
  75          if ( $.isFunction( s.confirm ) ) {
  76              if ( 'add' != a ) {
  77                  bg = $('#' + s.element).css('background-color');
  78                  $('#' + s.element).css('background-color', '#FF9966');
  79              }
  80              r = s.confirm.call(this,e,s,a,bg);
  81              if ( 'add' != a ) { $('#' + s.element).css('background-color', bg ); }
  82              if ( !r ) { return false; }
  83          }
  84          return s;
  85      },
  86  
  87      ajaxAdd: function( e, s ) {
  88          var list = this; e = $(e); s = s || {};
  89          var cls = wpList.parseClass(e,'add');
  90          s = $.extend(s, {
  91              element: s.element || cls[2] || e.attr( 'id' ) || null,
  92              addColor: s.addColor || '#' + ( cls[3] || 'FFFF33' )
  93          } );
  94          s = wpList.pre.call( list, e, s, 'add' );
  95          if ( !s ) { return false; }
  96  
  97          if ( !e.is("[@class^=add:" + list.id + ":]") ) { return !wpList.add.call( list, e, s ); }
  98  
  99          if ( !s.element ) { return true; }
 100  
 101          s.action = 'add-' + s.what;
 102  
 103          s.nonce = wpList.nonce(e,s);
 104  
 105          var es = $('#' + s.element + ' :input').not('[@name=_ajax_nonce], [@name=_wpnonce], [@name=action]');
 106          var required = $('#' + s.element + ' .form-required:has(:input[@value=""]), #' + s.element + ' .form-required:input[@value=""]');
 107          if ( required.size() ) {
 108              wpAjax.invalidateForm( required );
 109              return false;
 110          }
 111  
 112          s.data = $.param( $.extend( { _ajax_nonce: s.nonce, action: s.action }, wpAjax.unserialize( cls[4] || '' ) ) );
 113          var formData = $.isFunction(es.fieldSerialize) ? es.fieldSerialize() : es.serialize();
 114          if ( formData ) { s.data += '&' + formData; }
 115  
 116          if ( $.isFunction(s.addBefore) ) {
 117              s = s.addBefore( s );
 118              if ( !s ) { return true; }
 119          }
 120          if ( !s.data.match(/_ajax_nonce=[a-f0-9]+/) ) { return true; }
 121  
 122          s.success = function(r) {
 123              if ( !wpAjax.parseAjaxResponse(r, s.response, s.element) ) { return false; }
 124  
 125              $(s.what + ' response_data', r).each( function() {
 126                  var t = $(this);
 127                  wpList.add.call( list, t.text(), $.extend( {}, s, { // this.firstChild.nodevalue
 128                      pos: t.parent().attr( 'position' ) || 0,
 129                      id: t.parent().attr( 'id' ) || 0,
 130                      oldId: t.parent().attr( 'old_id' ) || null
 131                  } ) );
 132              } );
 133  
 134              if ( $.isFunction(s.addAfter) ) {
 135                  var o = this.complete;
 136                  this.complete = function(x,st) {
 137                      var _s = $.extend( { xml: x, status: st }, s );
 138                      s.addAfter( r, _s );
 139                      if ( $.isFunction(o) ) { o(x,st); }
 140                  };
 141              }
 142              list.wpList.recolor();
 143              wpList.clear.call(list,'#' + s.element);
 144          };
 145  
 146          $.ajax( s );
 147          return false;
 148      },
 149  
 150      ajaxDel: function( e, s ) {
 151          var list = this; e = $(e); s = s || {};
 152          var cls = wpList.parseClass(e,'delete');
 153          s = $.extend(s, {
 154              element: s.element || cls[2] || null,
 155              delColor: s.delColor || '#' + ( cls[3] || 'FF3333' )
 156          } );
 157          s = wpList.pre.call( list, e, s, 'delete' );
 158          if ( !s || !s.element ) { return false; }
 159  
 160          s.action = 'delete-' + s.what;
 161  
 162          s.nonce = wpList.nonce(e,s);
 163  
 164          s.data = $.extend(
 165              { action: s.action, id: s.element.split('-').pop(), _ajax_nonce: s.nonce },
 166              wpAjax.unserialize( cls[4] || '' )
 167          );
 168  
 169          if ( $.isFunction(s.delBefore) ) {
 170              s = s.delBefore( s );
 171              if ( !s ) { return true; }
 172          }
 173          if ( !s.data._ajax_nonce ) { return true; }
 174  
 175          var func = function() { $('#' + s.element).css( 'background-color', '' ).hide(); list.wpList.recolor(); };
 176          var hideTO = -1;
 177          if ( 'none' != s.delColor ) {
 178              Fat.fade_element(s.element,null,700,s.delColor);
 179              hideTO = setTimeout(func, 705);
 180          } else {
 181              func();
 182          }
 183  
 184          s.success = function(r) {
 185              if ( !wpAjax.parseAjaxResponse(r, s.response, s.element) ) {
 186                  clearTimeout(hideTO);
 187                  func = function() { $('#' + s.element).css( 'background-color', '#FF3333' ).show(); list.wpList.recolor(); };
 188                  func(); setTimeout(func, 705); // In case it's still fading
 189                  return false;
 190              }
 191              if ( $.isFunction(s.delAfter) ) {
 192                  var o = this.complete;
 193                  this.complete = function(x,st) {
 194                      var _s = $.extend( { xml: x, status: st }, s );
 195                      s.delAfter( r, _s );
 196                      if ( $.isFunction(o) ) { o(x,st); }
 197                  };
 198              }
 199          };
 200          $.ajax( s );
 201          return false;
 202      },
 203  
 204      ajaxDim: function( e, s ) {
 205          var list = this; e = $(e); s = s || {};
 206          var cls = wpList.parseClass(e,'dim');
 207          s = $.extend(s, {
 208              element: s.element || cls[2] || null,
 209              dimClass: s.dimClass || cls[3] || null,
 210              dimAddColor: s.dimAddColor || '#' + ( cls[4] || 'FFFF33' ),
 211              dimDelColor: s.dimDelColor || '#' + ( cls[5] || 'FF3333' )
 212          } );
 213          s = wpList.pre.call( list, e, s, 'dim' );
 214          if ( !s || !s.element || !s.dimClass ) { return true; }
 215  
 216          s.action = 'dim-' + s.what;
 217  
 218          s.nonce = wpList.nonce(e,s);
 219  
 220          s.data = $.extend(
 221              { action: s.action, id: s.element.split('-').pop(), dimClass: s.dimClass, _ajax_nonce : s.nonce },
 222              wpAjax.unserialize( cls[6] || '' )
 223          );
 224  
 225          if ( $.isFunction(s.dimBefore) ) {
 226              s = s.dimBefore( s );
 227              if ( !s ) { return true; }
 228          }
 229  
 230          if ( !s.data._ajax_nonce ) { return true; }
 231  
 232          var isClass = $('#' + s.element).toggleClass(s.dimClass).is('.' + s.dimClass);
 233          if ( isClass && 'none' != s.dimAddColor ) { Fat.fade_element(s.element,null,700,s.dimAddColor); }
 234          else if ( !isClass && 'none' != s.dimDelColor ) { Fat.fade_element(s.element,null,700,s.dimDelColor); }
 235  
 236          var dimTO = setTimeout( function() { $('#' + s.element).css( 'background-color', '' ); }, 705 );
 237  
 238          s.success = function(r) {
 239              if ( !wpAjax.parseAjaxResponse(r, s.response, s.element) ) {
 240                  clearTimeout(dimTO);
 241                  func = function() { $('#' + s.element).css( 'background-color', '#FF3333' )[isClass?'removeClass':'addClass'](s.dimClass); };
 242                  func(); setTimeout(func, 705);
 243                  return false;
 244              }
 245              if ( $.isFunction(s.dimAfter) ) {
 246                  var o = this.complete;
 247                  this.complete = function(x,st) {
 248                      var _s = $.extend( { xml: x, status: st }, s );
 249                      s.dimAfter( r, _s );
 250                      if ( $.isFunction(o) ) { o(x,st); }
 251                  };
 252              }
 253          };
 254  
 255          $.ajax( s );
 256          return false;
 257      },
 258  
 259      add: function( e, s ) {
 260          list = $(this);
 261          e = $(e);
 262  
 263          var old = false; var next = false;
 264          var _s = { pos: 0, id: 0, oldId: null };
 265          if ( 'string' == typeof s ) { s = { what: s }; }
 266          s = $.extend(_s, this.wpList.settings, s);
 267  
 268          if ( !e.size() || !s.what ) { return false; }
 269          if ( s.oldId ) {
 270              old = $('#' + s.what + '-' + s.oldId);
 271              next = old.next();
 272              old.remove();
 273          }
 274          if ( s.id ) { $('#' + s.what + '-' + s.id).remove(); }
 275  
 276          if ( old && old.size() ) {
 277              if ( next && next.size() ) {
 278                  next.before(e);
 279              } else {
 280                  list.append(e);
 281              }
 282          } else if ( isNaN(s.pos) ) {
 283              var ba = 'after';
 284              if ( '-' == s.pos.substr(0,1) ) {
 285                  s.pos = s.pos.substr(1);
 286                  ba = 'before';
 287              }
 288              var ref = list.find( '#' + s.pos );
 289              if ( 1 === ref.size() ) { ref[ba](e); }
 290              else { list.append(e); }
 291          } else if ( s.pos < 0 ) {
 292              list.prepend(e);
 293          } else {
 294              list.append(e);
 295          }
 296  
 297          if ( s.alt ) {
 298              if ( ( list.children(':visible').index( e[0] ) + s.altOffset ) % 2 ) { e.removeClass( s.alt ); }
 299              else { e.addClass( s.alt ); }
 300          }
 301  
 302          if ( 'none' != s.addColor ) {
 303              var b = e.css( 'background-color' );
 304              if ( b == 'transparent' ) { b = ''; }
 305              Fat.fade_element(e.attr('id'),null,700,s.addColor);
 306              setTimeout( function() {
 307                  var g = e.css( 'background-color', '' ).css( 'background-color' );
 308                  if ( b != g ) { e.css( 'background-color', b ); }
 309              }, 705 );
 310          }
 311          list.each( function() { this.wpList.process( e ); } );
 312          return e;
 313      },
 314  
 315      clear: function(e) {
 316          var list = this;
 317          e = $(e);
 318          if ( list.wpList && e.parents( '#' + list.id ).size() ) { return; }
 319          e.find(':input').each( function() {
 320              var t = this.type.toLowerCase(); var tag = this.tagName.toLowerCase();
 321              if ( 'text' == t || 'password' == t || 'textarea' == tag ) { this.value = ''; }
 322              else if ( 'checkbox' == t || 'radio' == t ) { this.checked = false; }
 323              else if ( 'select' == tag ) { this.selectedIndex = null; }
 324          });
 325      },
 326  
 327      process: function(el) {
 328          var list = this;
 329          var bl = function() { currentFormEl = false; };
 330          var fo = function() { currentFormEl = this; };
 331          var a = $("[@class^=add:" + list.id + ":]", el || null)
 332              .filter('form').submit( function() { return list.wpList.add(this); } ).end()
 333              .not('form').click( function() { return list.wpList.add(this); } ).each( function() {
 334                  var addEl = this;
 335                  var c = wpList.parseClass(this,'add')[2] || addEl.id;
 336                  if ( !c ) { return; }
 337                  var forms = []; var ins = [];
 338                  $('#' + c + ' :input').click( function() { $(this).unbind( 'blur', bl ).unbind( 'focus', fo ).blur( bl ).focus( fo ).focus(); } ).each( function() {
 339                      ins.push(this);
 340                      $.merge(forms,$(this).parents('form'));
 341                      forms = $.unique(forms);
 342                  } );
 343                  $(forms).submit( function() {
 344                      var e = currentFormEl;
 345                      if ( 0 <= $.inArray(e,ins) ) {
 346                          $(addEl).trigger( 'click' );
 347                          $(e).focus();
 348                          return false;
 349                      }
 350                  } );
 351              } );
 352          var d = $("[@class^=delete:" + list.id + ":]", el || null).click( function() { return list.wpList.del(this); } );
 353          var c = $("[@class^=dim:" + list.id + ":]", el || null).click( function() { return list.wpList.dim(this); } );
 354      },
 355  
 356      recolor: function() {
 357          var list = this;
 358          if ( !list.wpList.settings.alt ) { return; }
 359          var items = $('.list-item:visible', list);
 360          if ( !items.size() ) { items = $(list).children(':visible'); }
 361          var eo = [':even',':odd'];
 362          if ( list.wpList.settings.altOffset % 2 ) { eo.reverse(); }
 363          items.filter(eo[0]).addClass(list.wpList.settings.alt).end().filter(eo[1]).removeClass(list.wpList.settings.alt);
 364      },
 365  
 366      init: function() {
 367          var lists = this;
 368          lists.wpList.process = function(a) {
 369              lists.each( function() {
 370                  this.wpList.process(a);
 371              } );
 372          };
 373          lists.wpList.recolor = function() {
 374              lists.each( function() {
 375                  this.wpList.recolor();
 376              } );
 377          };
 378      }
 379  };
 380  
 381  $.fn.wpList = function( settings ) {
 382      this.each( function() {
 383          var _this = this;
 384          this.wpList = { settings: $.extend( {}, wpList.settings, { what: wpList.parseClass(this,'list')[1] || '' }, settings ) };
 385          $.each( fs, function(i,f) { _this.wpList[i] = function( e, s ) { return wpList[f].call( _this, e, s ); }; } );
 386      } );
 387      wpList.init.call(this);
 388      this.wpList.process();
 389      return this;
 390  };
 391  
 392  })(jQuery);


Generated Thu Dec 6 06:47:08 2007 for RedAlt XRefs Cross-referenced by PHPXref 0.6 and RedAlt