PHP Cross Reference of WordPress Subversion HEAD |
| [ Index ] [ Classes ] [ Functions ] [ Variables ] [ Constants ] |
[Summary view] [Print] [Text view]
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);
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated Thu Dec 6 06:47:08 2007 for RedAlt XRefs | Cross-referenced by PHPXref 0.6 and RedAlt |