1 | (function($) {
|
---|
2 | var fs = {add:'ajaxAdd',del:'ajaxDel',dim:'ajaxDim',process:'process',recolor:'recolor'}, wpList;
|
---|
3 |
|
---|
4 | wpList = {
|
---|
5 | settings: {
|
---|
6 | url: wpListL10n.url, type: 'POST',
|
---|
7 | response: 'ajax-response',
|
---|
8 |
|
---|
9 | what: '',
|
---|
10 | alt: 'alternate', altOffset: 0,
|
---|
11 | addColor: null, delColor: null, dimAddColor: null, dimDelColor: null,
|
---|
12 |
|
---|
13 | confirm: null,
|
---|
14 | addBefore: null, addAfter: null,
|
---|
15 | delBefore: null, delAfter: null,
|
---|
16 | dimBefore: null, dimAfter: null
|
---|
17 | },
|
---|
18 |
|
---|
19 | nonce: function(e,s) {
|
---|
20 | var url = wpAjax.unserialize(e.attr('href'));
|
---|
21 | return s.nonce || url._ajax_nonce || $('#' + s.element + ' input[name=_ajax_nonce]').val() || url._wpnonce || $('#' + s.element + ' input[name=_wpnonce]').val() || 0;
|
---|
22 | },
|
---|
23 |
|
---|
24 | parseClass: function(e,t) {
|
---|
25 | var c = [], cl;
|
---|
26 | try {
|
---|
27 | cl = $(e).attr('class') || '';
|
---|
28 | cl = cl.match(new RegExp(t+':[\\S]+'));
|
---|
29 | if ( cl ) { c = cl[0].split(':'); }
|
---|
30 | } catch(r) {}
|
---|
31 | return c;
|
---|
32 | },
|
---|
33 |
|
---|
34 | pre: function(e,s,a) {
|
---|
35 | var bg, r;
|
---|
36 | s = $.extend( {}, this.wpList.settings, {
|
---|
37 | element: null,
|
---|
38 | nonce: 0,
|
---|
39 | target: e.get(0)
|
---|
40 | }, s || {} );
|
---|
41 | if ( $.isFunction( s.confirm ) ) {
|
---|
42 | if ( 'add' != a ) {
|
---|
43 | bg = $('#' + s.element).css('backgroundColor');
|
---|
44 | $('#' + s.element).css('backgroundColor', '#FF9966');
|
---|
45 | }
|
---|
46 | r = s.confirm.call(this,e,s,a,bg);
|
---|
47 | if ( 'add' != a ) { $('#' + s.element).css('backgroundColor', bg ); }
|
---|
48 | if ( !r ) { return false; }
|
---|
49 | }
|
---|
50 | return s;
|
---|
51 | },
|
---|
52 |
|
---|
53 | ajaxAdd: function( e, s ) {
|
---|
54 | e = $(e);
|
---|
55 | s = s || {};
|
---|
56 | var list = this, cls = wpList.parseClass(e,'add'), es, valid, formData;
|
---|
57 | s = wpList.pre.call( list, e, s, 'add' );
|
---|
58 |
|
---|
59 | s.element = cls[2] || e.attr( 'id' ) || s.element || null;
|
---|
60 | if ( cls[3] ) { s.addColor = '#' + cls[3]; }
|
---|
61 | else { s.addColor = s.addColor || '#FFFF33'; }
|
---|
62 |
|
---|
63 | if ( !s ) { return false; }
|
---|
64 |
|
---|
65 | if ( !e.is("[class^=add:" + list.id + ":]") ) { return !wpList.add.call( list, e, s ); }
|
---|
66 |
|
---|
67 | if ( !s.element ) { return true; }
|
---|
68 |
|
---|
69 | s.action = 'add-' + s.what;
|
---|
70 |
|
---|
71 | s.nonce = wpList.nonce(e,s);
|
---|
72 |
|
---|
73 | es = $('#' + s.element + ' :input').not('[name=_ajax_nonce], [name=_wpnonce], [name=action]');
|
---|
74 | valid = wpAjax.validateForm( '#' + s.element );
|
---|
75 | if ( !valid ) { return false; }
|
---|
76 |
|
---|
77 | s.data = $.param( $.extend( { _ajax_nonce: s.nonce, action: s.action }, wpAjax.unserialize( cls[4] || '' ) ) );
|
---|
78 | formData = $.isFunction(es.fieldSerialize) ? es.fieldSerialize() : es.serialize();
|
---|
79 | if ( formData ) { s.data += '&' + formData; }
|
---|
80 |
|
---|
81 | if ( $.isFunction(s.addBefore) ) {
|
---|
82 | s = s.addBefore( s );
|
---|
83 | if ( !s ) { return true; }
|
---|
84 | }
|
---|
85 | if ( !s.data.match(/_ajax_nonce=[a-f0-9]+/) ) { return true; }
|
---|
86 |
|
---|
87 | s.success = function(r) {
|
---|
88 | var res = wpAjax.parseAjaxResponse(r, s.response, s.element), o;
|
---|
89 | if ( !res || res.errors ) { return false; }
|
---|
90 |
|
---|
91 | if ( true === res ) { return true; }
|
---|
92 |
|
---|
93 | jQuery.each( res.responses, function() {
|
---|
94 | wpList.add.call( list, this.data, $.extend( {}, s, { // this.firstChild.nodevalue
|
---|
95 | pos: this.position || 0,
|
---|
96 | id: this.id || 0,
|
---|
97 | oldId: this.oldId || null
|
---|
98 | } ) );
|
---|
99 | } );
|
---|
100 |
|
---|
101 | if ( $.isFunction(s.addAfter) ) {
|
---|
102 | o = this.complete;
|
---|
103 | this.complete = function(x,st) {
|
---|
104 | var _s = $.extend( { xml: x, status: st, parsed: res }, s );
|
---|
105 | s.addAfter( r, _s );
|
---|
106 | if ( $.isFunction(o) ) { o(x,st); }
|
---|
107 | };
|
---|
108 | }
|
---|
109 | list.wpList.recolor();
|
---|
110 | wpList.clear.call(list,'#' + s.element);
|
---|
111 | };
|
---|
112 |
|
---|
113 | $.ajax( s );
|
---|
114 | return false;
|
---|
115 | },
|
---|
116 |
|
---|
117 | ajaxDel: function( e, s ) {
|
---|
118 | e = $(e); s = s || {};
|
---|
119 | var list = this, cls = wpList.parseClass(e,'delete'), element, anim;
|
---|
120 | s = wpList.pre.call( list, e, s, 'delete' );
|
---|
121 |
|
---|
122 | s.element = cls[2] || s.element || null;
|
---|
123 | if ( cls[3] ) { s.delColor = '#' + cls[3]; }
|
---|
124 | else { s.delColor = s.delColor || '#FF3333'; }
|
---|
125 |
|
---|
126 | if ( !s || !s.element ) { return false; }
|
---|
127 |
|
---|
128 | s.action = 'delete-' + s.what;
|
---|
129 |
|
---|
130 | s.nonce = wpList.nonce(e,s);
|
---|
131 |
|
---|
132 | s.data = $.extend(
|
---|
133 | { action: s.action, id: s.element.split('-').pop(), _ajax_nonce: s.nonce },
|
---|
134 | wpAjax.unserialize( cls[4] || '' )
|
---|
135 | );
|
---|
136 |
|
---|
137 | if ( $.isFunction(s.delBefore) ) {
|
---|
138 | s = s.delBefore( s );
|
---|
139 | if ( !s ) { return true; }
|
---|
140 | }
|
---|
141 | if ( !s.data._ajax_nonce ) { return true; }
|
---|
142 |
|
---|
143 | element = $('#' + s.element);
|
---|
144 |
|
---|
145 | if ( 'none' != s.delColor ) {
|
---|
146 | anim = 'slideUp';
|
---|
147 | if ( element.css( 'display' ).match(/table/) )
|
---|
148 | anim = 'fadeOut'; // Can't slideup table rows and other table elements. Known jQuery bug
|
---|
149 | element
|
---|
150 | .animate( { backgroundColor: s.delColor }, 'fast' )[anim]( 'fast' )
|
---|
151 | .queue( function() { list.wpList.recolor(); $(this).dequeue(); } );
|
---|
152 | } else {
|
---|
153 | list.wpList.recolor();
|
---|
154 | }
|
---|
155 |
|
---|
156 | s.success = function(r) {
|
---|
157 | var res = wpAjax.parseAjaxResponse(r, s.response, s.element), o;
|
---|
158 | if ( !res || res.errors ) {
|
---|
159 | element.stop().stop().css( 'backgroundColor', '#FF3333' ).show().queue( function() { list.wpList.recolor(); $(this).dequeue(); } );
|
---|
160 | return false;
|
---|
161 | }
|
---|
162 | if ( $.isFunction(s.delAfter) ) {
|
---|
163 | o = this.complete;
|
---|
164 | this.complete = function(x,st) {
|
---|
165 | element.queue( function() {
|
---|
166 | var _s = $.extend( { xml: x, status: st, parsed: res }, s );
|
---|
167 | s.delAfter( r, _s );
|
---|
168 | if ( $.isFunction(o) ) { o(x,st); }
|
---|
169 | } ).dequeue();
|
---|
170 | };
|
---|
171 | }
|
---|
172 | };
|
---|
173 | $.ajax( s );
|
---|
174 | return false;
|
---|
175 | },
|
---|
176 |
|
---|
177 | ajaxDim: function( e, s ) {
|
---|
178 | if ( $(e).parent().css('display') == 'none' ) // Prevent hidden links from being clicked by hotkeys
|
---|
179 | return false;
|
---|
180 | e = $(e); s = s || {};
|
---|
181 | var list = this, cls = wpList.parseClass(e,'dim'), element, isClass, color, dimColor;
|
---|
182 | s = wpList.pre.call( list, e, s, 'dim' );
|
---|
183 |
|
---|
184 | s.element = cls[2] || s.element || null;
|
---|
185 | s.dimClass = cls[3] || s.dimClass || null;
|
---|
186 | if ( cls[4] ) { s.dimAddColor = '#' + cls[4]; }
|
---|
187 | else { s.dimAddColor = s.dimAddColor || '#FFFF33'; }
|
---|
188 | if ( cls[5] ) { s.dimDelColor = '#' + cls[5]; }
|
---|
189 | else { s.dimDelColor = s.dimDelColor || '#FF3333'; }
|
---|
190 |
|
---|
191 | if ( !s || !s.element || !s.dimClass ) { return true; }
|
---|
192 |
|
---|
193 | s.action = 'dim-' + s.what;
|
---|
194 |
|
---|
195 | s.nonce = wpList.nonce(e,s);
|
---|
196 |
|
---|
197 | s.data = $.extend(
|
---|
198 | { action: s.action, id: s.element.split('-').pop(), dimClass: s.dimClass, _ajax_nonce : s.nonce },
|
---|
199 | wpAjax.unserialize( cls[6] || '' )
|
---|
200 | );
|
---|
201 |
|
---|
202 | if ( $.isFunction(s.dimBefore) ) {
|
---|
203 | s = s.dimBefore( s );
|
---|
204 | if ( !s ) { return true; }
|
---|
205 | }
|
---|
206 |
|
---|
207 | element = $('#' + s.element);
|
---|
208 | isClass = element.toggleClass(s.dimClass).is('.' + s.dimClass);
|
---|
209 | color = wpList.getColor( element );
|
---|
210 | element.toggleClass( s.dimClass )
|
---|
211 | dimColor = isClass ? s.dimAddColor : s.dimDelColor;
|
---|
212 | if ( 'none' != dimColor ) {
|
---|
213 | element
|
---|
214 | .animate( { backgroundColor: dimColor }, 'fast' )
|
---|
215 | .queue( function() { element.toggleClass(s.dimClass); $(this).dequeue(); } )
|
---|
216 | .animate( { backgroundColor: color }, { complete: function() { $(this).css( 'backgroundColor', '' ); } } );
|
---|
217 | }
|
---|
218 |
|
---|
219 | if ( !s.data._ajax_nonce ) { return true; }
|
---|
220 |
|
---|
221 | s.success = function(r) {
|
---|
222 | var res = wpAjax.parseAjaxResponse(r, s.response, s.element), o;
|
---|
223 | if ( !res || res.errors ) {
|
---|
224 | element.stop().stop().css( 'backgroundColor', '#FF3333' )[isClass?'removeClass':'addClass'](s.dimClass).show().queue( function() { list.wpList.recolor(); $(this).dequeue(); } );
|
---|
225 | return false;
|
---|
226 | }
|
---|
227 | if ( $.isFunction(s.dimAfter) ) {
|
---|
228 | o = this.complete;
|
---|
229 | this.complete = function(x,st) {
|
---|
230 | element.queue( function() {
|
---|
231 | var _s = $.extend( { xml: x, status: st, parsed: res }, s );
|
---|
232 | s.dimAfter( r, _s );
|
---|
233 | if ( $.isFunction(o) ) { o(x,st); }
|
---|
234 | } ).dequeue();
|
---|
235 | };
|
---|
236 | }
|
---|
237 | };
|
---|
238 |
|
---|
239 | $.ajax( s );
|
---|
240 | return false;
|
---|
241 | },
|
---|
242 |
|
---|
243 | // From jquery.color.js: jQuery Color Animation by John Resig
|
---|
244 | getColor: function( el ) {
|
---|
245 | if ( el.constructor == Object )
|
---|
246 | el = el.get(0);
|
---|
247 | var elem = el, color, rgbaTrans = new RegExp( "rgba\\(\\s*0,\\s*0,\\s*0,\\s*0\\s*\\)", "i" );
|
---|
248 | do {
|
---|
249 | color = jQuery.curCSS(elem, 'backgroundColor');
|
---|
250 | if ( color != '' && color != 'transparent' && !color.match(rgbaTrans) || jQuery.nodeName(elem, "body") )
|
---|
251 | break;
|
---|
252 | } while ( elem = elem.parentNode );
|
---|
253 | return color || '#ffffff';
|
---|
254 | },
|
---|
255 |
|
---|
256 | add: function( e, s ) {
|
---|
257 | e = $(e);
|
---|
258 |
|
---|
259 | var list = $(this), old = false, _s = { pos: 0, id: 0, oldId: null }, ba, ref, color;
|
---|
260 | if ( 'string' == typeof s ) { s = { what: s }; }
|
---|
261 | s = $.extend(_s, this.wpList.settings, s);
|
---|
262 | if ( !e.size() || !s.what ) { return false; }
|
---|
263 | if ( s.oldId ) { old = $('#' + s.what + '-' + s.oldId); }
|
---|
264 | if ( s.id && ( s.id != s.oldId || !old || !old.size() ) ) { $('#' + s.what + '-' + s.id).remove(); }
|
---|
265 |
|
---|
266 | if ( old && old.size() ) {
|
---|
267 | old.before(e);
|
---|
268 | old.remove();
|
---|
269 | } else if ( isNaN(s.pos) ) {
|
---|
270 | ba = 'after';
|
---|
271 | if ( '-' == s.pos.substr(0,1) ) {
|
---|
272 | s.pos = s.pos.substr(1);
|
---|
273 | ba = 'before';
|
---|
274 | }
|
---|
275 | ref = list.find( '#' + s.pos );
|
---|
276 | if ( 1 === ref.size() ) { ref[ba](e); }
|
---|
277 | else { list.append(e); }
|
---|
278 | } else if ( s.pos < 0 ) {
|
---|
279 | list.prepend(e);
|
---|
280 | } else {
|
---|
281 | list.append(e);
|
---|
282 | }
|
---|
283 |
|
---|
284 | if ( s.alt ) {
|
---|
285 | if ( ( list.children(':visible').index( e[0] ) + s.altOffset ) % 2 ) { e.removeClass( s.alt ); }
|
---|
286 | else { e.addClass( s.alt ); }
|
---|
287 | }
|
---|
288 |
|
---|
289 | if ( 'none' != s.addColor ) {
|
---|
290 | color = wpList.getColor( e );
|
---|
291 | e.css( 'backgroundColor', s.addColor ).animate( { backgroundColor: color }, { complete: function() { $(this).css( 'backgroundColor', '' ); } } );
|
---|
292 | }
|
---|
293 | list.each( function() { this.wpList.process( e ); } );
|
---|
294 | return e;
|
---|
295 | },
|
---|
296 |
|
---|
297 | clear: function(e) {
|
---|
298 | var list = this, t, tag;
|
---|
299 | e = $(e);
|
---|
300 | if ( list.wpList && e.parents( '#' + list.id ).size() ) { return; }
|
---|
301 | e.find(':input').each( function() {
|
---|
302 | if ( $(this).parents('.form-no-clear').size() )
|
---|
303 | return;
|
---|
304 | t = this.type.toLowerCase();
|
---|
305 | tag = this.tagName.toLowerCase();
|
---|
306 | if ( 'text' == t || 'password' == t || 'textarea' == tag ) { this.value = ''; }
|
---|
307 | else if ( 'checkbox' == t || 'radio' == t ) { this.checked = false; }
|
---|
308 | else if ( 'select' == tag ) { this.selectedIndex = null; }
|
---|
309 | });
|
---|
310 | },
|
---|
311 |
|
---|
312 | process: function(el) {
|
---|
313 | var list = this;
|
---|
314 | $("[class^=add:" + list.id + ":]", el || null)
|
---|
315 | .filter('form').submit( function() { return list.wpList.add(this); } ).end()
|
---|
316 | .not('form').click( function() { return list.wpList.add(this); } );
|
---|
317 | $("[class^=delete:" + list.id + ":]", el || null).click( function() { return list.wpList.del(this); } );
|
---|
318 | $("[class^=dim:" + list.id + ":]", el || null).click( function() { return list.wpList.dim(this); } );
|
---|
319 | },
|
---|
320 |
|
---|
321 | recolor: function() {
|
---|
322 | var list = this, items, eo;
|
---|
323 | if ( !list.wpList.settings.alt ) { return; }
|
---|
324 | items = $('.list-item:visible', list);
|
---|
325 | if ( !items.size() ) { items = $(list).children(':visible'); }
|
---|
326 | eo = [':even',':odd'];
|
---|
327 | if ( list.wpList.settings.altOffset % 2 ) { eo.reverse(); }
|
---|
328 | items.filter(eo[0]).addClass(list.wpList.settings.alt).end().filter(eo[1]).removeClass(list.wpList.settings.alt);
|
---|
329 | },
|
---|
330 |
|
---|
331 | init: function() {
|
---|
332 | var lists = this;
|
---|
333 | lists.wpList.process = function(a) {
|
---|
334 | lists.each( function() {
|
---|
335 | this.wpList.process(a);
|
---|
336 | } );
|
---|
337 | };
|
---|
338 | lists.wpList.recolor = function() {
|
---|
339 | lists.each( function() {
|
---|
340 | this.wpList.recolor();
|
---|
341 | } );
|
---|
342 | };
|
---|
343 | }
|
---|
344 | };
|
---|
345 |
|
---|
346 | $.fn.wpList = function( settings ) {
|
---|
347 | this.each( function() {
|
---|
348 | var _this = this;
|
---|
349 | this.wpList = { settings: $.extend( {}, wpList.settings, { what: wpList.parseClass(this,'list')[1] || '' }, settings ) };
|
---|
350 | $.each( fs, function(i,f) { _this.wpList[i] = function( e, s ) { return wpList[f].call( _this, e, s ); }; } );
|
---|
351 | } );
|
---|
352 | wpList.init.call(this);
|
---|
353 | this.wpList.process();
|
---|
354 | return this;
|
---|
355 | };
|
---|
356 |
|
---|
357 | })(jQuery);
|
---|