muck-commerce 0.2.6 → 0.2.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) hide show
  1. data/VERSION +1 -1
  2. data/lib/active_record/acts/muck_order_transaction.rb +1 -0
  3. data/muck-commerce.gemspec +26 -4
  4. data/test/rails_root/Gemfile +47 -0
  5. data/test/rails_root/config/boot.rb +14 -0
  6. data/test/rails_root/config/environment.rb +0 -21
  7. data/test/rails_root/config/preinitializer.rb +20 -0
  8. data/test/rails_root/public/javascripts/jquery/fg.menu.js +517 -0
  9. data/test/rails_root/public/javascripts/jquery/jquery.easing.js +45 -71
  10. data/test/rails_root/public/javascripts/jquery/jquery.form.js +45 -30
  11. data/test/rails_root/public/javascripts/jquery/jquery.timers.js +138 -0
  12. data/test/rails_root/public/javascripts/muck-src.js +147 -0
  13. data/test/rails_root/public/javascripts/muck.js +7 -89
  14. data/test/rails_root/public/javascripts/muck_admin.js +13 -0
  15. data/test/rails_root/public/stylesheets/admin.css +12 -0
  16. data/test/rails_root/public/stylesheets/fgmenu/fg.menu.css +114 -0
  17. data/test/rails_root/public/stylesheets/flick/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  18. data/test/rails_root/public/stylesheets/flick/images/ui-bg_flat_0_eeeeee_40x100.png +0 -0
  19. data/test/rails_root/public/stylesheets/flick/images/ui-bg_flat_55_ffffff_40x100.png +0 -0
  20. data/test/rails_root/public/stylesheets/flick/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  21. data/test/rails_root/public/stylesheets/flick/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  22. data/test/rails_root/public/stylesheets/flick/images/ui-bg_highlight-soft_100_f6f6f6_1x100.png +0 -0
  23. data/test/rails_root/public/stylesheets/flick/images/ui-bg_highlight-soft_25_0073ea_1x100.png +0 -0
  24. data/test/rails_root/public/stylesheets/flick/images/ui-bg_highlight-soft_50_dddddd_1x100.png +0 -0
  25. data/test/rails_root/public/stylesheets/flick/images/ui-icons_0073ea_256x240.png +0 -0
  26. data/test/rails_root/public/stylesheets/flick/images/ui-icons_454545_256x240.png +0 -0
  27. data/test/rails_root/public/stylesheets/flick/images/ui-icons_666666_256x240.png +0 -0
  28. data/test/rails_root/public/stylesheets/flick/images/ui-icons_ff0084_256x240.png +0 -0
  29. data/test/rails_root/public/stylesheets/flick/images/ui-icons_ffffff_256x240.png +0 -0
  30. data/test/rails_root/public/stylesheets/flick/jquery-ui-1.8.1.custom.css +486 -0
  31. metadata +41 -4
@@ -1,72 +1,46 @@
1
- /*
2
- * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
3
- *
4
- * Uses the built in easing capabilities added In jQuery 1.1
5
- * to offer multiple easing options
6
- *
7
- * TERMS OF USE - jQuery Easing
8
- *
9
- * Open source under the BSD License.
10
- *
11
- * Copyright © 2008 George McGinley Smith
12
- * All rights reserved.
13
- *
14
- * Redistribution and use in source and binary forms, with or without modification,
15
- * are permitted provided that the following conditions are met:
16
- *
17
- * Redistributions of source code must retain the above copyright notice, this list of
18
- * conditions and the following disclaimer.
19
- * Redistributions in binary form must reproduce the above copyright notice, this list
20
- * of conditions and the following disclaimer in the documentation and/or other materials
21
- * provided with the distribution.
22
- *
23
- * Neither the name of the author nor the names of contributors may be used to endorse
24
- * or promote products derived from this software without specific prior written permission.
25
- *
26
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
27
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
28
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
31
- * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
32
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
33
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
34
- * OF THE POSSIBILITY OF SUCH DAMAGE.
35
- *
1
+ /* This lib is to support fancybox. The default compressed version causes errors with Rails caching.
2
+ This version is compressed with http://closure-compiler.appspot.com/home
3
+ *
4
+ * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
5
+ *
6
+ * Uses the built in easing capabilities added In jQuery 1.1
7
+ * to offer multiple easing options
8
+ *
9
+ * TERMS OF USE - jQuery Easing
10
+ *
11
+ * Open source under the BSD License.
12
+ *
13
+ * Copyright © 2008 George McGinley Smith
14
+ * All rights reserved.
15
+ *
16
+ * Redistribution and use in source and binary forms, with or without modification,
17
+ * are permitted provided that the following conditions are met:
18
+ *
19
+ * Redistributions of source code must retain the above copyright notice, this list of
20
+ * conditions and the following disclaimer.
21
+ * Redistributions in binary form must reproduce the above copyright notice, this list
22
+ * of conditions and the following disclaimer in the documentation and/or other materials
23
+ * provided with the distribution.
24
+ *
25
+ * Neither the name of the author nor the names of contributors may be used to endorse
26
+ * or promote products derived from this software without specific prior written permission.
27
+ *
28
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
29
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
30
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
31
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
32
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
33
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
34
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
36
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
37
+ *
36
38
  */
37
-
38
- // t: current time, b: begInnIng value, c: change In value, d: duration
39
- eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('h.i[\'1a\']=h.i[\'z\'];h.O(h.i,{y:\'D\',z:9(x,t,b,c,d){6 h.i[h.i.y](x,t,b,c,d)},17:9(x,t,b,c,d){6 c*(t/=d)*t+b},D:9(x,t,b,c,d){6-c*(t/=d)*(t-2)+b},13:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t+b;6-c/2*((--t)*(t-2)-1)+b},X:9(x,t,b,c,d){6 c*(t/=d)*t*t+b},U:9(x,t,b,c,d){6 c*((t=t/d-1)*t*t+1)+b},R:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t+b;6 c/2*((t-=2)*t*t+2)+b},N:9(x,t,b,c,d){6 c*(t/=d)*t*t*t+b},M:9(x,t,b,c,d){6-c*((t=t/d-1)*t*t*t-1)+b},L:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t*t+b;6-c/2*((t-=2)*t*t*t-2)+b},K:9(x,t,b,c,d){6 c*(t/=d)*t*t*t*t+b},J:9(x,t,b,c,d){6 c*((t=t/d-1)*t*t*t*t+1)+b},I:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t*t*t+b;6 c/2*((t-=2)*t*t*t*t+2)+b},G:9(x,t,b,c,d){6-c*8.C(t/d*(8.g/2))+c+b},15:9(x,t,b,c,d){6 c*8.n(t/d*(8.g/2))+b},12:9(x,t,b,c,d){6-c/2*(8.C(8.g*t/d)-1)+b},Z:9(x,t,b,c,d){6(t==0)?b:c*8.j(2,10*(t/d-1))+b},Y:9(x,t,b,c,d){6(t==d)?b+c:c*(-8.j(2,-10*t/d)+1)+b},W:9(x,t,b,c,d){e(t==0)6 b;e(t==d)6 b+c;e((t/=d/2)<1)6 c/2*8.j(2,10*(t-1))+b;6 c/2*(-8.j(2,-10*--t)+2)+b},V:9(x,t,b,c,d){6-c*(8.o(1-(t/=d)*t)-1)+b},S:9(x,t,b,c,d){6 c*8.o(1-(t=t/d-1)*t)+b},Q:9(x,t,b,c,d){e((t/=d/2)<1)6-c/2*(8.o(1-t*t)-1)+b;6 c/2*(8.o(1-(t-=2)*t)+1)+b},P:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d)==1)6 b+c;e(!p)p=d*.3;e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);6-(a*8.j(2,10*(t-=1))*8.n((t*d-s)*(2*8.g)/p))+b},H:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d)==1)6 b+c;e(!p)p=d*.3;e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);6 a*8.j(2,-10*t)*8.n((t*d-s)*(2*8.g)/p)+c+b},T:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d/2)==2)6 b+c;e(!p)p=d*(.3*1.5);e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);e(t<1)6-.5*(a*8.j(2,10*(t-=1))*8.n((t*d-s)*(2*8.g)/p))+b;6 a*8.j(2,-10*(t-=1))*8.n((t*d-s)*(2*8.g)/p)*.5+c+b},F:9(x,t,b,c,d,s){e(s==u)s=1.l;6 c*(t/=d)*t*((s+1)*t-s)+b},E:9(x,t,b,c,d,s){e(s==u)s=1.l;6 c*((t=t/d-1)*t*((s+1)*t+s)+1)+b},16:9(x,t,b,c,d,s){e(s==u)s=1.l;e((t/=d/2)<1)6 c/2*(t*t*(((s*=(1.B))+1)*t-s))+b;6 c/2*((t-=2)*t*(((s*=(1.B))+1)*t+s)+2)+b},A:9(x,t,b,c,d){6 c-h.i.v(x,d-t,0,c,d)+b},v:9(x,t,b,c,d){e((t/=d)<(1/2.k)){6 c*(7.q*t*t)+b}m e(t<(2/2.k)){6 c*(7.q*(t-=(1.5/2.k))*t+.k)+b}m e(t<(2.5/2.k)){6 c*(7.q*(t-=(2.14/2.k))*t+.11)+b}m{6 c*(7.q*(t-=(2.18/2.k))*t+.19)+b}},1b:9(x,t,b,c,d){e(t<d/2)6 h.i.A(x,t*2,0,c,d)*.5+b;6 h.i.v(x,t*2-d,0,c,d)*.5+c*.5+b}});',62,74,'||||||return||Math|function|||||if|var|PI|jQuery|easing|pow|75|70158|else|sin|sqrt||5625|asin|||undefined|easeOutBounce|abs||def|swing|easeInBounce|525|cos|easeOutQuad|easeOutBack|easeInBack|easeInSine|easeOutElastic|easeInOutQuint|easeOutQuint|easeInQuint|easeInOutQuart|easeOutQuart|easeInQuart|extend|easeInElastic|easeInOutCirc|easeInOutCubic|easeOutCirc|easeInOutElastic|easeOutCubic|easeInCirc|easeInOutExpo|easeInCubic|easeOutExpo|easeInExpo||9375|easeInOutSine|easeInOutQuad|25|easeOutSine|easeInOutBack|easeInQuad|625|984375|jswing|easeInOutBounce'.split('|'),0,{}))
40
-
41
- /*
42
- *
43
- * TERMS OF USE - EASING EQUATIONS
44
- *
45
- * Open source under the BSD License.
46
- *
47
- * Copyright © 2001 Robert Penner
48
- * All rights reserved.
49
- *
50
- * Redistribution and use in source and binary forms, with or without modification,
51
- * are permitted provided that the following conditions are met:
52
- *
53
- * Redistributions of source code must retain the above copyright notice, this list of
54
- * conditions and the following disclaimer.
55
- * Redistributions in binary form must reproduce the above copyright notice, this list
56
- * of conditions and the following disclaimer in the documentation and/or other materials
57
- * provided with the distribution.
58
- *
59
- * Neither the name of the author nor the names of contributors may be used to endorse
60
- * or promote products derived from this software without specific prior written permission.
61
- *
62
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
63
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
64
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
65
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
66
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
67
- * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
68
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
69
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
70
- * OF THE POSSIBILITY OF SUCH DAMAGE.
71
- *
72
- */
39
+ jQuery.easing.jswing=jQuery.easing.swing;
40
+ jQuery.extend(jQuery.easing,{def:"easeOutQuad",swing:function(e,a,c,b,d){return jQuery.easing[jQuery.easing.def](e,a,c,b,d)},easeInQuad:function(e,a,c,b,d){return b*(a/=d)*a+c},easeOutQuad:function(e,a,c,b,d){return-b*(a/=d)*(a-2)+c},easeInOutQuad:function(e,a,c,b,d){if((a/=d/2)<1)return b/2*a*a+c;return-b/2*(--a*(a-2)-1)+c},easeInCubic:function(e,a,c,b,d){return b*(a/=d)*a*a+c},easeOutCubic:function(e,a,c,b,d){return b*((a=a/d-1)*a*a+1)+c},easeInOutCubic:function(e,a,c,b,d){if((a/=d/2)<1)return b/
41
+ 2*a*a*a+c;return b/2*((a-=2)*a*a+2)+c},easeInQuart:function(e,a,c,b,d){return b*(a/=d)*a*a*a+c},easeOutQuart:function(e,a,c,b,d){return-b*((a=a/d-1)*a*a*a-1)+c},easeInOutQuart:function(e,a,c,b,d){if((a/=d/2)<1)return b/2*a*a*a*a+c;return-b/2*((a-=2)*a*a*a-2)+c},easeInQuint:function(e,a,c,b,d){return b*(a/=d)*a*a*a*a+c},easeOutQuint:function(e,a,c,b,d){return b*((a=a/d-1)*a*a*a*a+1)+c},easeInOutQuint:function(e,a,c,b,d){if((a/=d/2)<1)return b/2*a*a*a*a*a+c;return b/2*((a-=2)*a*a*a*a+2)+c},easeInSine:function(e,
42
+ a,c,b,d){return-b*Math.cos(a/d*(Math.PI/2))+b+c},easeOutSine:function(e,a,c,b,d){return b*Math.sin(a/d*(Math.PI/2))+c},easeInOutSine:function(e,a,c,b,d){return-b/2*(Math.cos(Math.PI*a/d)-1)+c},easeInExpo:function(e,a,c,b,d){return a==0?c:b*Math.pow(2,10*(a/d-1))+c},easeOutExpo:function(e,a,c,b,d){return a==d?c+b:b*(-Math.pow(2,-10*a/d)+1)+c},easeInOutExpo:function(e,a,c,b,d){if(a==0)return c;if(a==d)return c+b;if((a/=d/2)<1)return b/2*Math.pow(2,10*(a-1))+c;return b/2*(-Math.pow(2,-10*--a)+2)+c},
43
+ easeInCirc:function(e,a,c,b,d){return-b*(Math.sqrt(1-(a/=d)*a)-1)+c},easeOutCirc:function(e,a,c,b,d){return b*Math.sqrt(1-(a=a/d-1)*a)+c},easeInOutCirc:function(e,a,c,b,d){if((a/=d/2)<1)return-b/2*(Math.sqrt(1-a*a)-1)+c;return b/2*(Math.sqrt(1-(a-=2)*a)+1)+c},easeInElastic:function(e,a,c,b,d){e=1.70158;var f=0,g=b;if(a==0)return c;if((a/=d)==1)return c+b;f||(f=d*0.3);if(g<Math.abs(b)){g=b;e=f/4}else e=f/(2*Math.PI)*Math.asin(b/g);return-(g*Math.pow(2,10*(a-=1))*Math.sin((a*d-e)*2*Math.PI/f))+c},easeOutElastic:function(e,
44
+ a,c,b,d){e=1.70158;var f=0,g=b;if(a==0)return c;if((a/=d)==1)return c+b;f||(f=d*0.3);if(g<Math.abs(b)){g=b;e=f/4}else e=f/(2*Math.PI)*Math.asin(b/g);return g*Math.pow(2,-10*a)*Math.sin((a*d-e)*2*Math.PI/f)+b+c},easeInOutElastic:function(e,a,c,b,d){e=1.70158;var f=0,g=b;if(a==0)return c;if((a/=d/2)==2)return c+b;f||(f=d*0.3*1.5);if(g<Math.abs(b)){g=b;e=f/4}else e=f/(2*Math.PI)*Math.asin(b/g);if(a<1)return-0.5*g*Math.pow(2,10*(a-=1))*Math.sin((a*d-e)*2*Math.PI/f)+c;return g*Math.pow(2,-10*(a-=1))*Math.sin((a*
45
+ d-e)*2*Math.PI/f)*0.5+b+c},easeInBack:function(e,a,c,b,d,f){if(f==undefined)f=1.70158;return b*(a/=d)*a*((f+1)*a-f)+c},easeOutBack:function(e,a,c,b,d,f){if(f==undefined)f=1.70158;return b*((a=a/d-1)*a*((f+1)*a+f)+1)+c},easeInOutBack:function(e,a,c,b,d,f){if(f==undefined)f=1.70158;if((a/=d/2)<1)return b/2*a*a*(((f*=1.525)+1)*a-f)+c;return b/2*((a-=2)*a*(((f*=1.525)+1)*a+f)+2)+c},easeInBounce:function(e,a,c,b,d){return b-jQuery.easing.easeOutBounce(e,d-a,0,b,d)+c},easeOutBounce:function(e,a,c,b,d){return(a/=
46
+ d)<1/2.75?b*7.5625*a*a+c:a<2/2.75?b*(7.5625*(a-=1.5/2.75)*a+0.75)+c:a<2.5/2.75?b*(7.5625*(a-=2.25/2.75)*a+0.9375)+c:b*(7.5625*(a-=2.625/2.75)*a+0.984375)+c},easeInOutBounce:function(e,a,c,b,d){if(a<d/2)return jQuery.easing.easeInBounce(e,a*2,0,b,d)*0.5+c;return jQuery.easing.easeOutBounce(e,a*2-d,0,b,d)*0.5+b*0.5+c}});
@@ -1,7 +1,7 @@
1
- /*
1
+ /*!
2
2
  * jQuery Form Plugin
3
- * version: 2.36 (07-NOV-2009)
4
- * @requires jQuery v1.2.6 or later
3
+ * version: 2.43 (12-MAR-2010)
4
+ * @requires jQuery v1.3.2 or later
5
5
  *
6
6
  * Examples and documentation at: http://malsup.com/jquery/form/
7
7
  * Dual licensed under the MIT and GPL licenses:
@@ -124,15 +124,16 @@ $.fn.ajaxSubmit = function(options) {
124
124
  if (!options.dataType && options.target) {
125
125
  var oldSuccess = options.success || function(){};
126
126
  callbacks.push(function(data) {
127
- $(options.target).html(data).each(oldSuccess, arguments);
127
+ var fn = options.replaceTarget ? 'replaceWith' : 'html';
128
+ $(options.target)[fn](data).each(oldSuccess, arguments);
128
129
  });
129
130
  }
130
131
  else if (options.success)
131
132
  callbacks.push(options.success);
132
133
 
133
- options.success = function(data, status) {
134
+ options.success = function(data, status, xhr) { // jQuery 1.4+ passes xhr as 3rd arg
134
135
  for (var i=0, max=callbacks.length; i < max; i++)
135
- callbacks[i].apply(options, [data, status, $form]);
136
+ callbacks[i].apply(options, [data, status, xhr || $form, $form]);
136
137
  };
137
138
 
138
139
  // are there files to upload?
@@ -177,7 +178,7 @@ $.fn.ajaxSubmit = function(options) {
177
178
  var s = $.extend(true, {}, $.extend(true, {}, $.ajaxSettings), opts);
178
179
 
179
180
  var id = 'jqFormIO' + (new Date().getTime());
180
- var $io = $('<iframe id="' + id + '" name="' + id + '" src="'+ opts.iframeSrc +'" />');
181
+ var $io = $('<iframe id="' + id + '" name="' + id + '" src="'+ opts.iframeSrc +'" onload="(jQuery(this).data(\'form-plugin-onload\'))()" />');
181
182
  var io = $io[0];
182
183
 
183
184
  $io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });
@@ -209,7 +210,7 @@ $.fn.ajaxSubmit = function(options) {
209
210
  if (xhr.aborted)
210
211
  return;
211
212
 
212
- var cbInvoked = 0;
213
+ var cbInvoked = false;
213
214
  var timedOut = 0;
214
215
 
215
216
  // add submitting element to data if we know it
@@ -217,17 +218,17 @@ $.fn.ajaxSubmit = function(options) {
217
218
  if (sub) {
218
219
  var n = sub.name;
219
220
  if (n && !sub.disabled) {
220
- options.extraData = options.extraData || {};
221
- options.extraData[n] = sub.value;
221
+ opts.extraData = opts.extraData || {};
222
+ opts.extraData[n] = sub.value;
222
223
  if (sub.type == "image") {
223
- options.extraData[name+'.x'] = form.clk_x;
224
- options.extraData[name+'.y'] = form.clk_y;
224
+ opts.extraData[n+'.x'] = form.clk_x;
225
+ opts.extraData[n+'.y'] = form.clk_y;
225
226
  }
226
227
  }
227
228
  }
228
229
 
229
230
  // take a breath so that pending repaints get some cpu time before the upload starts
230
- setTimeout(function() {
231
+ function doSubmit() {
231
232
  // make sure form attrs are set
232
233
  var t = $form.attr('target'), a = $form.attr('action');
233
234
 
@@ -239,7 +240,7 @@ $.fn.ajaxSubmit = function(options) {
239
240
  form.setAttribute('action', opts.url);
240
241
 
241
242
  // ie borks in some cases when setting encoding
242
- if (! options.skipEncodingOverride) {
243
+ if (! opts.skipEncodingOverride) {
243
244
  $form.attr({
244
245
  encoding: 'multipart/form-data',
245
246
  enctype: 'multipart/form-data'
@@ -253,15 +254,15 @@ $.fn.ajaxSubmit = function(options) {
253
254
  // add "extra" data to form if provided in options
254
255
  var extraInputs = [];
255
256
  try {
256
- if (options.extraData)
257
- for (var n in options.extraData)
257
+ if (opts.extraData)
258
+ for (var n in opts.extraData)
258
259
  extraInputs.push(
259
- $('<input type="hidden" name="'+n+'" value="'+options.extraData[n]+'" />')
260
+ $('<input type="hidden" name="'+n+'" value="'+opts.extraData[n]+'" />')
260
261
  .appendTo(form)[0]);
261
262
 
262
263
  // add iframe to doc and submit the form
263
264
  $io.appendTo('body');
264
- io.attachEvent ? io.attachEvent('onload', cb) : io.addEventListener('load', cb, false);
265
+ $io.data('form-plugin-onload', cb);
265
266
  form.submit();
266
267
  }
267
268
  finally {
@@ -270,14 +271,18 @@ $.fn.ajaxSubmit = function(options) {
270
271
  t ? form.setAttribute('target', t) : $form.removeAttr('target');
271
272
  $(extraInputs).remove();
272
273
  }
273
- }, 10);
274
+ };
274
275
 
275
- var domCheckCount = 50;
276
+ if (opts.forceSync)
277
+ doSubmit();
278
+ else
279
+ setTimeout(doSubmit, 10); // this lets dom updates render
280
+
281
+ var domCheckCount = 100;
276
282
 
277
283
  function cb() {
278
- if (cbInvoked++) return;
279
-
280
- io.detachEvent ? io.detachEvent('onload', cb) : io.removeEventListener('load', cb, false);
284
+ if (cbInvoked)
285
+ return;
281
286
 
282
287
  var ok = true;
283
288
  try {
@@ -293,14 +298,16 @@ $.fn.ajaxSubmit = function(options) {
293
298
  if (--domCheckCount) {
294
299
  // in some browsers (Opera) the iframe DOM is not always traversable when
295
300
  // the onload callback fires, so we loop a bit to accommodate
296
- cbInvoked = 0;
297
- setTimeout(cb, 100);
301
+ log('requeing onLoad callback, DOM not available');
302
+ setTimeout(cb, 250);
298
303
  return;
299
304
  }
300
- log('Could not access iframe DOM after 50 tries.');
305
+ log('Could not access iframe DOM after 100 tries.');
301
306
  return;
302
307
  }
303
308
 
309
+ log('response detected');
310
+ cbInvoked = true;
304
311
  xhr.responseText = doc.body ? doc.body.innerHTML : null;
305
312
  xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
306
313
  xhr.getResponseHeader = function(header){
@@ -326,7 +333,9 @@ $.fn.ajaxSubmit = function(options) {
326
333
  data = $.httpData(xhr, opts.dataType);
327
334
  }
328
335
  catch(e){
336
+ log('error caught:',e);
329
337
  ok = false;
338
+ xhr.error = e;
330
339
  $.handleError(opts, xhr, 'error', e);
331
340
  }
332
341
 
@@ -341,6 +350,7 @@ $.fn.ajaxSubmit = function(options) {
341
350
 
342
351
  // clean up
343
352
  setTimeout(function() {
353
+ $io.removeData('form-plugin-onload');
344
354
  $io.remove();
345
355
  xhr.responseXML = null;
346
356
  }, 100);
@@ -375,9 +385,9 @@ $.fn.ajaxSubmit = function(options) {
375
385
  * the form itself.
376
386
  */
377
387
  $.fn.ajaxForm = function(options) {
378
- return this.ajaxFormUnbind().bind('submit.form-plugin', function() {
388
+ return this.ajaxFormUnbind().bind('submit.form-plugin', function(e) {
389
+ e.preventDefault();
379
390
  $(this).ajaxSubmit(options);
380
- return false;
381
391
  }).bind('click.form-plugin', function(e) {
382
392
  var target = e.target;
383
393
  var $el = $(target);
@@ -653,8 +663,13 @@ $.fn.selected = function(select) {
653
663
  // helper fn for console logging
654
664
  // set $.fn.ajaxSubmit.debug to true to enable debug logging
655
665
  function log() {
656
- if ($.fn.ajaxSubmit.debug && window.console && window.console.log)
657
- window.console.log('[jquery.form] ' + Array.prototype.join.call(arguments,''));
666
+ if ($.fn.ajaxSubmit.debug) {
667
+ var msg = '[jquery.form] ' + Array.prototype.join.call(arguments,'');
668
+ if (window.console && window.console.log)
669
+ window.console.log(msg);
670
+ else if (window.opera && window.opera.postError)
671
+ window.opera.postError(msg);
672
+ }
658
673
  };
659
674
 
660
675
  })(jQuery);
@@ -0,0 +1,138 @@
1
+ /**
2
+ * jQuery.timers - Timer abstractions for jQuery
3
+ * Written by Blair Mitchelmore (blair DOT mitchelmore AT gmail DOT com)
4
+ * Licensed under the WTFPL (http://sam.zoy.org/wtfpl/).
5
+ * Date: 2009/10/16
6
+ *
7
+ * @author Blair Mitchelmore
8
+ * @version 1.2
9
+ *
10
+ **/
11
+
12
+ jQuery.fn.extend({
13
+ everyTime: function(interval, label, fn, times) {
14
+ return this.each(function() {
15
+ jQuery.timer.add(this, interval, label, fn, times);
16
+ });
17
+ },
18
+ oneTime: function(interval, label, fn) {
19
+ return this.each(function() {
20
+ jQuery.timer.add(this, interval, label, fn, 1);
21
+ });
22
+ },
23
+ stopTime: function(label, fn) {
24
+ return this.each(function() {
25
+ jQuery.timer.remove(this, label, fn);
26
+ });
27
+ }
28
+ });
29
+
30
+ jQuery.extend({
31
+ timer: {
32
+ global: [],
33
+ guid: 1,
34
+ dataKey: "jQuery.timer",
35
+ regex: /^([0-9]+(?:\.[0-9]*)?)\s*(.*s)?$/,
36
+ powers: {
37
+ // Yeah this is major overkill...
38
+ 'ms': 1,
39
+ 'cs': 10,
40
+ 'ds': 100,
41
+ 's': 1000,
42
+ 'das': 10000,
43
+ 'hs': 100000,
44
+ 'ks': 1000000
45
+ },
46
+ timeParse: function(value) {
47
+ if (value == undefined || value == null)
48
+ return null;
49
+ var result = this.regex.exec(jQuery.trim(value.toString()));
50
+ if (result[2]) {
51
+ var num = parseFloat(result[1]);
52
+ var mult = this.powers[result[2]] || 1;
53
+ return num * mult;
54
+ } else {
55
+ return value;
56
+ }
57
+ },
58
+ add: function(element, interval, label, fn, times) {
59
+ var counter = 0;
60
+
61
+ if (jQuery.isFunction(label)) {
62
+ if (!times)
63
+ times = fn;
64
+ fn = label;
65
+ label = interval;
66
+ }
67
+
68
+ interval = jQuery.timer.timeParse(interval);
69
+
70
+ if (typeof interval != 'number' || isNaN(interval) || interval < 0)
71
+ return;
72
+
73
+ if (typeof times != 'number' || isNaN(times) || times < 0)
74
+ times = 0;
75
+
76
+ times = times || 0;
77
+
78
+ var timers = jQuery.data(element, this.dataKey) || jQuery.data(element, this.dataKey, {});
79
+
80
+ if (!timers[label])
81
+ timers[label] = {};
82
+
83
+ fn.timerID = fn.timerID || this.guid++;
84
+
85
+ var handler = function() {
86
+ if ((++counter > times && times !== 0) || fn.call(element, counter) === false)
87
+ jQuery.timer.remove(element, label, fn);
88
+ };
89
+
90
+ handler.timerID = fn.timerID;
91
+
92
+ if (!timers[label][fn.timerID])
93
+ timers[label][fn.timerID] = window.setInterval(handler,interval);
94
+
95
+ this.global.push( element );
96
+
97
+ },
98
+ remove: function(element, label, fn) {
99
+ var timers = jQuery.data(element, this.dataKey), ret;
100
+
101
+ if ( timers ) {
102
+
103
+ if (!label) {
104
+ for ( label in timers )
105
+ this.remove(element, label, fn);
106
+ } else if ( timers[label] ) {
107
+ if ( fn ) {
108
+ if ( fn.timerID ) {
109
+ window.clearInterval(timers[label][fn.timerID]);
110
+ delete timers[label][fn.timerID];
111
+ }
112
+ } else {
113
+ for ( var fn in timers[label] ) {
114
+ window.clearInterval(timers[label][fn]);
115
+ delete timers[label][fn];
116
+ }
117
+ }
118
+
119
+ for ( ret in timers[label] ) break;
120
+ if ( !ret ) {
121
+ ret = null;
122
+ delete timers[label];
123
+ }
124
+ }
125
+
126
+ for ( ret in timers ) break;
127
+ if ( !ret )
128
+ jQuery.removeData(element, this.dataKey);
129
+ }
130
+ }
131
+ }
132
+ });
133
+
134
+ jQuery(window).bind("unload", function() {
135
+ jQuery.each(jQuery.timer.global, function(index, item) {
136
+ jQuery.timer.remove(item);
137
+ });
138
+ });
@@ -0,0 +1,147 @@
1
+ // compress with http://closure-compiler.appspot.com/home
2
+ //jQuery.noConflict();
3
+ jQuery(document).ajaxSend(function(event, request, settings) {
4
+ add_headers(request);
5
+ if (settings.type.toUpperCase() == 'GET' || typeof(AUTH_TOKEN) == "undefined") return; // for details see: http://www.justinball.com/2009/07/08/jquery-ajax-get-in-firefox-post-in-internet-explorer/
6
+ // settings.data is a serialized string like "foo=bar&baz=boink" (or null)
7
+ settings.data = settings.data || "";
8
+ if (typeof(AUTH_TOKEN) != "undefined")
9
+ settings.data += (settings.data ? "&" : "") + "authenticity_token=" + encodeURIComponent(AUTH_TOKEN);
10
+ });
11
+
12
+ function apply_ajax_forms() {
13
+ jQuery('form.ajax').ajaxForm({
14
+ dataType: 'script',
15
+ beforeSend: add_headers
16
+ });
17
+ jQuery('form.ajax').append('<input type="hidden" name="format" value="js" />');
18
+ }
19
+
20
+ function add_headers(xhr){
21
+ xhr.setRequestHeader("Accept", "text/javascript");
22
+ xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
23
+ }
24
+
25
+ jQuery(document).ready(function() {
26
+
27
+ jQuery('a.ajax-delete').live('click', function() {
28
+ var title = jQuery(this).attr('title');
29
+ var do_delete = true;
30
+ if(title.length > 0){
31
+ do_delete = confirm(title);
32
+ }
33
+ if (do_delete){
34
+ jQuery.post(this.href, { _method: 'delete', format: 'js' }, null, "script");
35
+ }
36
+ return false;
37
+ });
38
+
39
+ jQuery('a.ajax-update').live('click', function() {
40
+ jQuery.post(this.href, { _method: 'put', format: 'js' }, null, "script");
41
+ return false;
42
+ });
43
+
44
+ jQuery(".submit-form").click(function() {
45
+ jQuery(this).parent('form').submit();
46
+ });
47
+
48
+ apply_ajax_forms();
49
+
50
+ jQuery('a.dialog-pop').live('click', function() {
51
+ var d = jQuery('<div class="dialog"></div>').appendTo("body");
52
+ d.dialog({ modal: true, autoOpen: false, width: 'auto', title: jQuery(this).attr('title') });
53
+ d.load(jQuery(this).attr('href'), '', function(){
54
+ d.dialog("open");
55
+ apply_ajax_forms();
56
+ });
57
+ return false;
58
+ });
59
+
60
+ jQuery(".submit-delete").live('click', function() {
61
+ jQuery(this).parents('.delete-container').fadeOut();
62
+ var form = jQuery(this).parents('form');
63
+ jQuery.post(form.attr('action') + '.json', form.serialize(),
64
+ function(data){
65
+ var json = eval('(' + data + ')');
66
+ if(!json.success){
67
+ jQuery.jGrowl.info(json.message);
68
+ }
69
+ });
70
+ return false;
71
+ });
72
+
73
+ jQuery(".submit-delete-js").live('click', function() {
74
+ jQuery(this).parents('.delete-container').fadeOut();
75
+ var form = jQuery(this).parents('form');
76
+ jQuery.post(form.attr('action') + '.js', form.serialize(),
77
+ function(data){
78
+ });
79
+ return false;
80
+ });
81
+
82
+ jQuery(document).ready(function() {
83
+ jQuery('.waiting').hide();
84
+ jQuery(".wait-button").live('click', function() {
85
+ jQuery(this).siblings('.waiting').show();
86
+ jQuery(this).hide();
87
+ });
88
+ });
89
+
90
+ });
91
+
92
+ // String list methods. These are handy for dealing with comma delimited lists
93
+ // in text boxes such as a list of emails or tags.
94
+ // Given a comma delimited string add a new item if it isn't in the string
95
+ function add_to_list(items_string, new_item){
96
+ var items = split_list(items_string);
97
+ var add = true;
98
+ for(i=0;i<items.length;i++){
99
+ if(items[i] == new_item){ add = false; }
100
+ }
101
+ if(add){
102
+ items.push(new_item);
103
+ }
104
+ return items.join(', ');
105
+ }
106
+
107
+ // Given a comma delimited list remove an item from the string
108
+ function remove_from_list(items_string, remove_item){
109
+ var items = split_list(items_string);
110
+ var cleaned = [];
111
+ for(i=0;i<items.length;i++){
112
+ if(items[i] != remove_item){
113
+ cleaned.push(items[i]);
114
+ }
115
+ }
116
+ return cleaned.join(', ');
117
+ }
118
+
119
+ // Split a string on commas
120
+ function split_list(items_string){
121
+ if(undefined != items_string && items_string.length > 0){
122
+ var items = items_string.split(',');
123
+ } else {
124
+ var items = [];
125
+ }
126
+ var cleaned = [];
127
+ for(i=0;i<items.length;i++){
128
+ var cleaned_item = jQuery.trim(items[i]);
129
+ if(cleaned_item.length > 0){
130
+ cleaned.push(cleaned_item);
131
+ }
132
+ }
133
+ return cleaned;
134
+ }
135
+
136
+ function isEncodedHtml(str) {
137
+ if(str.search(/&amp;/g) != -1 || str.search(/&lt;/g) != -1 || str.search(/&gt;/g) != -1)
138
+ return true;
139
+ else
140
+ return false;
141
+ };
142
+
143
+ function decodeHtml(str){
144
+ if(isEncodedHtml(str))
145
+ return str.replace(/&amp;/g, '&').replace(/&lt;/g, '<').replace(/&gt;/g, '>');
146
+ return str;
147
+ }