rails 2.1.2 → 2.2.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rails might be problematic. Click here for more details.

Files changed (221) hide show
  1. data/CHANGELOG +27 -3
  2. data/Rakefile +70 -10
  3. data/bin/about +0 -0
  4. data/bin/console +0 -0
  5. data/bin/destroy +0 -0
  6. data/bin/generate +0 -0
  7. data/bin/performance/benchmarker +0 -0
  8. data/bin/performance/profiler +0 -0
  9. data/bin/performance/request +0 -0
  10. data/bin/plugin +0 -0
  11. data/bin/process/inspector +0 -0
  12. data/bin/process/reaper +0 -0
  13. data/bin/process/spawner +0 -0
  14. data/bin/runner +0 -0
  15. data/bin/server +0 -0
  16. data/config.ru +17 -0
  17. data/configs/apache.conf +0 -0
  18. data/configs/databases/ibm_db.yml +62 -0
  19. data/configs/databases/mysql.yml +3 -0
  20. data/configs/databases/postgresql.yml +3 -0
  21. data/configs/databases/sqlite2.yml +3 -0
  22. data/configs/databases/sqlite3.yml +3 -0
  23. data/configs/locales/en.yml +5 -0
  24. data/dispatches/dispatch.fcgi +1 -1
  25. data/dispatches/dispatch.rb +2 -2
  26. data/dispatches/gateway.cgi +2 -2
  27. data/doc/README_FOR_APP +5 -2
  28. data/doc/guides/html/2_2_release_notes.html +1185 -0
  29. data/doc/guides/html/actioncontroller_basics.html +1270 -0
  30. data/doc/guides/html/activerecord_validations_callbacks.html +749 -0
  31. data/doc/guides/html/association_basics.html +2585 -0
  32. data/doc/guides/html/authors.html +240 -0
  33. data/doc/guides/html/benchmarking_and_profiling.html +1018 -0
  34. data/doc/guides/html/caching_with_rails.html +583 -0
  35. data/doc/guides/html/command_line.html +434 -0
  36. data/doc/guides/html/configuring.html +438 -0
  37. data/doc/guides/html/creating_plugins.html +1594 -0
  38. data/doc/guides/html/debugging_rails_applications.html +1175 -0
  39. data/doc/guides/html/finders.html +1090 -0
  40. data/doc/guides/html/form_helpers.html +638 -0
  41. data/doc/guides/html/getting_started_with_rails.html +2066 -0
  42. data/doc/guides/html/index.html +349 -0
  43. data/doc/guides/html/layouts_and_rendering.html +1406 -0
  44. data/doc/guides/html/migrations.html +921 -0
  45. data/doc/guides/html/routing_outside_in.html +2213 -0
  46. data/doc/guides/html/security.html +1346 -0
  47. data/doc/guides/html/testing_rails_applications.html +1859 -0
  48. data/doc/guides/source/2_2_release_notes.txt +435 -0
  49. data/doc/guides/source/actioncontroller_basics/changelog.txt +5 -0
  50. data/doc/guides/source/actioncontroller_basics/cookies.txt +34 -0
  51. data/doc/guides/source/actioncontroller_basics/csrf.txt +32 -0
  52. data/doc/guides/source/actioncontroller_basics/filters.txt +119 -0
  53. data/doc/guides/source/actioncontroller_basics/http_auth.txt +24 -0
  54. data/doc/guides/source/actioncontroller_basics/index.txt +40 -0
  55. data/doc/guides/source/actioncontroller_basics/introduction.txt +9 -0
  56. data/doc/guides/source/actioncontroller_basics/methods.txt +39 -0
  57. data/doc/guides/source/actioncontroller_basics/parameter_filtering.txt +14 -0
  58. data/doc/guides/source/actioncontroller_basics/params.txt +93 -0
  59. data/doc/guides/source/actioncontroller_basics/request_response_objects.txt +43 -0
  60. data/doc/guides/source/actioncontroller_basics/rescue.txt +67 -0
  61. data/doc/guides/source/actioncontroller_basics/session.txt +187 -0
  62. data/doc/guides/source/actioncontroller_basics/streaming.txt +91 -0
  63. data/doc/guides/source/actioncontroller_basics/verification.txt +40 -0
  64. data/doc/guides/source/active_record_basics.txt +181 -0
  65. data/doc/guides/source/activerecord_validations_callbacks.txt +404 -0
  66. data/doc/guides/source/association_basics.txt +1840 -0
  67. data/doc/guides/source/authors.txt +39 -0
  68. data/doc/guides/source/benchmarking_and_profiling/appendix.txt +95 -0
  69. data/doc/guides/source/benchmarking_and_profiling/digging_deeper.txt +105 -0
  70. data/doc/guides/source/benchmarking_and_profiling/edge_rails_features.txt +185 -0
  71. data/doc/guides/source/benchmarking_and_profiling/gameplan.txt +27 -0
  72. data/doc/guides/source/benchmarking_and_profiling/index.txt +242 -0
  73. data/doc/guides/source/benchmarking_and_profiling/rubyprof.txt +179 -0
  74. data/doc/guides/source/benchmarking_and_profiling/statistics.txt +57 -0
  75. data/doc/guides/source/caching_with_rails.txt +367 -0
  76. data/doc/guides/source/command_line.txt +147 -0
  77. data/doc/guides/source/configuring.txt +225 -0
  78. data/doc/guides/source/creating_plugins/acts_as_yaffle.txt +191 -0
  79. data/doc/guides/source/creating_plugins/appendix.txt +46 -0
  80. data/doc/guides/source/creating_plugins/controllers.txt +59 -0
  81. data/doc/guides/source/creating_plugins/core_ext.txt +123 -0
  82. data/doc/guides/source/creating_plugins/custom_route.txt +69 -0
  83. data/doc/guides/source/creating_plugins/gem.txt +1 -0
  84. data/doc/guides/source/creating_plugins/generator_method.txt +89 -0
  85. data/doc/guides/source/creating_plugins/helpers.txt +51 -0
  86. data/doc/guides/source/creating_plugins/index.txt +52 -0
  87. data/doc/guides/source/creating_plugins/migration_generator.txt +156 -0
  88. data/doc/guides/source/creating_plugins/models.txt +76 -0
  89. data/doc/guides/source/creating_plugins/odds_and_ends.txt +69 -0
  90. data/doc/guides/source/creating_plugins/test_setup.txt +230 -0
  91. data/doc/guides/source/debugging_rails_applications.txt +733 -0
  92. data/doc/guides/source/finders.txt +668 -0
  93. data/doc/guides/source/form_helpers.txt +345 -0
  94. data/doc/guides/source/getting_started_with_rails.txt +1256 -0
  95. data/doc/guides/source/images/belongs_to.png +0 -0
  96. data/doc/guides/source/images/bullet.gif +0 -0
  97. data/doc/guides/source/images/csrf.png +0 -0
  98. data/doc/guides/source/images/habtm.png +0 -0
  99. data/doc/guides/source/images/has_many.png +0 -0
  100. data/doc/guides/source/images/has_many_through.png +0 -0
  101. data/doc/guides/source/images/has_one.png +0 -0
  102. data/doc/guides/source/images/has_one_through.png +0 -0
  103. data/doc/guides/source/images/header_backdrop.png +0 -0
  104. data/doc/guides/source/images/icons/README +5 -0
  105. data/doc/guides/source/images/icons/callouts/1.png +0 -0
  106. data/doc/guides/source/images/icons/callouts/10.png +0 -0
  107. data/doc/guides/source/images/icons/callouts/11.png +0 -0
  108. data/doc/guides/source/images/icons/callouts/12.png +0 -0
  109. data/doc/guides/source/images/icons/callouts/13.png +0 -0
  110. data/doc/guides/source/images/icons/callouts/14.png +0 -0
  111. data/doc/guides/source/images/icons/callouts/15.png +0 -0
  112. data/doc/guides/source/images/icons/callouts/2.png +0 -0
  113. data/doc/guides/source/images/icons/callouts/3.png +0 -0
  114. data/doc/guides/source/images/icons/callouts/4.png +0 -0
  115. data/doc/guides/source/images/icons/callouts/5.png +0 -0
  116. data/doc/guides/source/images/icons/callouts/6.png +0 -0
  117. data/doc/guides/source/images/icons/callouts/7.png +0 -0
  118. data/doc/guides/source/images/icons/callouts/8.png +0 -0
  119. data/doc/guides/source/images/icons/callouts/9.png +0 -0
  120. data/doc/guides/source/images/icons/caution.png +0 -0
  121. data/doc/guides/source/images/icons/example.png +0 -0
  122. data/doc/guides/source/images/icons/home.png +0 -0
  123. data/doc/guides/source/images/icons/important.png +0 -0
  124. data/doc/guides/source/images/icons/next.png +0 -0
  125. data/doc/guides/source/images/icons/note.png +0 -0
  126. data/doc/guides/source/images/icons/prev.png +0 -0
  127. data/doc/guides/source/images/icons/tip.png +0 -0
  128. data/doc/guides/source/images/icons/up.png +0 -0
  129. data/doc/guides/source/images/icons/warning.png +0 -0
  130. data/doc/guides/source/images/polymorphic.png +0 -0
  131. data/doc/guides/source/images/rails_logo_remix.gif +0 -0
  132. data/doc/guides/source/images/ruby_on_rails_by_mike_rundle2.gif +0 -0
  133. data/doc/guides/source/images/session_fixation.png +0 -0
  134. data/doc/guides/source/index.txt +118 -0
  135. data/doc/guides/source/layouts_and_rendering.txt +982 -0
  136. data/doc/guides/source/migrations/anatomy_of_a_migration.txt +85 -0
  137. data/doc/guides/source/migrations/changelog.txt +5 -0
  138. data/doc/guides/source/migrations/creating_a_migration.txt +109 -0
  139. data/doc/guides/source/migrations/foreign_keys.txt +8 -0
  140. data/doc/guides/source/migrations/index.txt +22 -0
  141. data/doc/guides/source/migrations/rakeing_around.txt +111 -0
  142. data/doc/guides/source/migrations/scheming.txt +47 -0
  143. data/doc/guides/source/migrations/using_models_in_migrations.txt +46 -0
  144. data/doc/guides/source/migrations/writing_a_migration.txt +159 -0
  145. data/doc/guides/source/routing_outside_in.txt +986 -0
  146. data/doc/guides/source/security.txt +984 -0
  147. data/doc/guides/source/stylesheets/base.css +358 -0
  148. data/doc/guides/source/stylesheets/forms.css +35 -0
  149. data/doc/guides/source/stylesheets/more.css +82 -0
  150. data/doc/guides/source/templates/guides.html.erb +97 -0
  151. data/doc/guides/source/templates/inline.css +165 -0
  152. data/doc/guides/source/testing_rails_applications.txt +995 -0
  153. data/environments/boot.rb +2 -2
  154. data/environments/environment.rb +9 -1
  155. data/environments/production.rb +3 -1
  156. data/helpers/performance_test.rb +9 -0
  157. data/html/500.html +4 -1
  158. data/html/javascripts/controls.js +72 -72
  159. data/html/javascripts/dragdrop.js +165 -164
  160. data/html/javascripts/effects.js +173 -165
  161. data/html/javascripts/prototype.js +362 -267
  162. data/lib/commands/console.rb +13 -0
  163. data/lib/commands/dbconsole.rb +2 -2
  164. data/lib/commands/ncgi/listener +2 -2
  165. data/lib/commands/ncgi/tracker +2 -2
  166. data/lib/commands/plugin.rb +41 -24
  167. data/lib/commands/process/spawner.rb +4 -4
  168. data/lib/commands/runner.rb +1 -1
  169. data/lib/commands/server.rb +11 -1
  170. data/lib/commands/servers/thin.rb +25 -0
  171. data/lib/fcgi_handler.rb +1 -3
  172. data/lib/initializer.rb +162 -39
  173. data/lib/performance_test_help.rb +5 -0
  174. data/lib/rails/gem_builder.rb +3 -3
  175. data/lib/rails/gem_dependency.rb +155 -33
  176. data/lib/rails/mongrel_server/commands.rb +1 -1
  177. data/lib/rails/plugin.rb +10 -2
  178. data/lib/rails/rack.rb +6 -0
  179. data/lib/rails/rack/logger.rb +28 -0
  180. data/lib/rails/rack/static.rb +35 -0
  181. data/lib/rails/vendor_gem_source_index.rb +140 -0
  182. data/lib/rails/version.rb +1 -1
  183. data/lib/rails_generator/commands.rb +10 -16
  184. data/lib/rails_generator/generated_attribute.rb +4 -0
  185. data/lib/rails_generator/generators/applications/app/app_generator.rb +9 -3
  186. data/lib/rails_generator/generators/components/controller/controller_generator.rb +1 -1
  187. data/lib/rails_generator/generators/components/controller/templates/functional_test.rb +1 -1
  188. data/lib/rails_generator/generators/components/integration_test/integration_test_generator.rb +1 -1
  189. data/lib/rails_generator/generators/components/integration_test/templates/integration_test.rb +2 -2
  190. data/lib/rails_generator/generators/components/mailer/mailer_generator.rb +1 -1
  191. data/lib/rails_generator/generators/components/mailer/templates/unit_test.rb +2 -3
  192. data/lib/rails_generator/generators/components/model/model_generator.rb +1 -1
  193. data/lib/rails_generator/generators/components/model/templates/model.rb +3 -0
  194. data/lib/rails_generator/generators/components/model/templates/unit_test.rb +1 -1
  195. data/lib/rails_generator/generators/components/observer/observer_generator.rb +1 -1
  196. data/lib/rails_generator/generators/components/observer/templates/unit_test.rb +1 -1
  197. data/lib/rails_generator/generators/components/performance_test/USAGE +8 -0
  198. data/lib/rails_generator/generators/components/performance_test/performance_test_generator.rb +16 -0
  199. data/lib/rails_generator/generators/components/performance_test/templates/performance_test.rb +9 -0
  200. data/lib/rails_generator/generators/components/plugin/plugin_generator.rb +11 -11
  201. data/lib/rails_generator/generators/components/plugin/templates/Rakefile +1 -0
  202. data/lib/rails_generator/generators/components/plugin/templates/test_helper.rb +3 -0
  203. data/lib/rails_generator/generators/components/plugin/templates/unit_test.rb +4 -4
  204. data/lib/rails_generator/generators/components/resource/resource_generator.rb +2 -2
  205. data/lib/rails_generator/generators/components/resource/templates/functional_test.rb +1 -1
  206. data/lib/rails_generator/generators/components/scaffold/USAGE +9 -5
  207. data/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb +10 -3
  208. data/lib/rails_generator/generators/components/scaffold/templates/functional_test.rb +7 -7
  209. data/lib/rails_generator/scripts.rb +1 -1
  210. data/lib/rails_generator/scripts/destroy.rb +6 -7
  211. data/lib/rails_generator/secret_key_generator.rb +5 -147
  212. data/lib/tasks/annotations.rake +8 -11
  213. data/lib/tasks/databases.rake +42 -15
  214. data/lib/tasks/documentation.rake +15 -0
  215. data/lib/tasks/framework.rake +5 -1
  216. data/lib/tasks/gems.rake +24 -8
  217. data/lib/tasks/misc.rake +3 -4
  218. data/lib/tasks/testing.rake +25 -4
  219. data/lib/test_help.rb +1 -2
  220. data/lib/webrick_server.rb +2 -11
  221. metadata +165 -9
@@ -3,46 +3,46 @@
3
3
  // Justin Palmer (http://encytemedia.com/)
4
4
  // Mark Pilgrim (http://diveintomark.org/)
5
5
  // Martin Bialasinki
6
- //
6
+ //
7
7
  // script.aculo.us is freely distributable under the terms of an MIT-style license.
8
- // For details, see the script.aculo.us web site: http://script.aculo.us/
8
+ // For details, see the script.aculo.us web site: http://script.aculo.us/
9
9
 
10
- // converts rgb() and #xxx to #xxxxxx format,
11
- // returns self (or first argument) if not convertable
12
- String.prototype.parseColor = function() {
10
+ // converts rgb() and #xxx to #xxxxxx format,
11
+ // returns self (or first argument) if not convertable
12
+ String.prototype.parseColor = function() {
13
13
  var color = '#';
14
- if (this.slice(0,4) == 'rgb(') {
15
- var cols = this.slice(4,this.length-1).split(',');
16
- var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);
17
- } else {
18
- if (this.slice(0,1) == '#') {
19
- if (this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();
20
- if (this.length==7) color = this.toLowerCase();
21
- }
22
- }
23
- return (color.length==7 ? color : (arguments[0] || this));
14
+ if (this.slice(0,4) == 'rgb(') {
15
+ var cols = this.slice(4,this.length-1).split(',');
16
+ var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);
17
+ } else {
18
+ if (this.slice(0,1) == '#') {
19
+ if (this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();
20
+ if (this.length==7) color = this.toLowerCase();
21
+ }
22
+ }
23
+ return (color.length==7 ? color : (arguments[0] || this));
24
24
  };
25
25
 
26
26
  /*--------------------------------------------------------------------------*/
27
27
 
28
- Element.collectTextNodes = function(element) {
28
+ Element.collectTextNodes = function(element) {
29
29
  return $A($(element).childNodes).collect( function(node) {
30
- return (node.nodeType==3 ? node.nodeValue :
30
+ return (node.nodeType==3 ? node.nodeValue :
31
31
  (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
32
32
  }).flatten().join('');
33
33
  };
34
34
 
35
- Element.collectTextNodesIgnoreClass = function(element, className) {
35
+ Element.collectTextNodesIgnoreClass = function(element, className) {
36
36
  return $A($(element).childNodes).collect( function(node) {
37
- return (node.nodeType==3 ? node.nodeValue :
38
- ((node.hasChildNodes() && !Element.hasClassName(node,className)) ?
37
+ return (node.nodeType==3 ? node.nodeValue :
38
+ ((node.hasChildNodes() && !Element.hasClassName(node,className)) ?
39
39
  Element.collectTextNodesIgnoreClass(node, className) : ''));
40
40
  }).flatten().join('');
41
41
  };
42
42
 
43
43
  Element.setContentZoom = function(element, percent) {
44
- element = $(element);
45
- element.setStyle({fontSize: (percent/100) + 'em'});
44
+ element = $(element);
45
+ element.setStyle({fontSize: (percent/100) + 'em'});
46
46
  if (Prototype.Browser.WebKit) window.scrollBy(0,0);
47
47
  return element;
48
48
  };
@@ -70,28 +70,23 @@ var Effect = {
70
70
  Transitions: {
71
71
  linear: Prototype.K,
72
72
  sinoidal: function(pos) {
73
- return (-Math.cos(pos*Math.PI)/2) + 0.5;
73
+ return (-Math.cos(pos*Math.PI)/2) + .5;
74
74
  },
75
75
  reverse: function(pos) {
76
76
  return 1-pos;
77
77
  },
78
78
  flicker: function(pos) {
79
- var pos = ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;
79
+ var pos = ((-Math.cos(pos*Math.PI)/4) + .75) + Math.random()/4;
80
80
  return pos > 1 ? 1 : pos;
81
81
  },
82
82
  wobble: function(pos) {
83
- return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;
83
+ return (-Math.cos(pos*Math.PI*(9*pos))/2) + .5;
84
84
  },
85
- pulse: function(pos, pulses) {
86
- pulses = pulses || 5;
87
- return (
88
- ((pos % (1/pulses)) * pulses).round() == 0 ?
89
- ((pos * pulses * 2) - (pos * pulses * 2).floor()) :
90
- 1 - ((pos * pulses * 2) - (pos * pulses * 2).floor())
91
- );
85
+ pulse: function(pos, pulses) {
86
+ return (-Math.cos((pos*((pulses||5)-.5)*2)*Math.PI)/2) + .5;
92
87
  },
93
- spring: function(pos) {
94
- return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6));
88
+ spring: function(pos) {
89
+ return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6));
95
90
  },
96
91
  none: function(pos) {
97
92
  return 0;
@@ -112,14 +107,14 @@ var Effect = {
112
107
  tagifyText: function(element) {
113
108
  var tagifyStyle = 'position:relative';
114
109
  if (Prototype.Browser.IE) tagifyStyle += ';zoom:1';
115
-
110
+
116
111
  element = $(element);
117
112
  $A(element.childNodes).each( function(child) {
118
113
  if (child.nodeType==3) {
119
114
  child.nodeValue.toArray().each( function(character) {
120
115
  element.insertBefore(
121
116
  new Element('span', {style: tagifyStyle}).update(
122
- character == ' ' ? String.fromCharCode(160) : character),
117
+ character == ' ' ? String.fromCharCode(160) : character),
123
118
  child);
124
119
  });
125
120
  Element.remove(child);
@@ -128,13 +123,13 @@ var Effect = {
128
123
  },
129
124
  multiple: function(element, effect) {
130
125
  var elements;
131
- if (((typeof element == 'object') ||
132
- Object.isFunction(element)) &&
126
+ if (((typeof element == 'object') ||
127
+ Object.isFunction(element)) &&
133
128
  (element.length))
134
129
  elements = element;
135
130
  else
136
131
  elements = $(element).childNodes;
137
-
132
+
138
133
  var options = Object.extend({
139
134
  speed: 0.1,
140
135
  delay: 0.0
@@ -156,7 +151,7 @@ var Effect = {
156
151
  var options = Object.extend({
157
152
  queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
158
153
  }, arguments[2] || { });
159
- Effect[element.visible() ?
154
+ Effect[element.visible() ?
160
155
  Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);
161
156
  }
162
157
  };
@@ -168,20 +163,20 @@ Effect.DefaultOptions.transition = Effect.Transitions.sinoidal;
168
163
  Effect.ScopedQueue = Class.create(Enumerable, {
169
164
  initialize: function() {
170
165
  this.effects = [];
171
- this.interval = null;
166
+ this.interval = null;
172
167
  },
173
168
  _each: function(iterator) {
174
169
  this.effects._each(iterator);
175
170
  },
176
171
  add: function(effect) {
177
172
  var timestamp = new Date().getTime();
178
-
179
- var position = Object.isString(effect.options.queue) ?
173
+
174
+ var position = Object.isString(effect.options.queue) ?
180
175
  effect.options.queue : effect.options.queue.position;
181
-
176
+
182
177
  switch(position) {
183
178
  case 'front':
184
- // move unstarted effects after this effect
179
+ // move unstarted effects after this effect
185
180
  this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
186
181
  e.startOn += effect.finishOn;
187
182
  e.finishOn += effect.finishOn;
@@ -195,13 +190,13 @@ Effect.ScopedQueue = Class.create(Enumerable, {
195
190
  timestamp = this.effects.pluck('finishOn').max() || timestamp;
196
191
  break;
197
192
  }
198
-
193
+
199
194
  effect.startOn += timestamp;
200
195
  effect.finishOn += timestamp;
201
196
 
202
197
  if (!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
203
198
  this.effects.push(effect);
204
-
199
+
205
200
  if (!this.interval)
206
201
  this.interval = setInterval(this.loop.bind(this), 15);
207
202
  },
@@ -214,7 +209,7 @@ Effect.ScopedQueue = Class.create(Enumerable, {
214
209
  },
215
210
  loop: function() {
216
211
  var timePos = new Date().getTime();
217
- for(var i=0, len=this.effects.length;i<len;i++)
212
+ for(var i=0, len=this.effects.length;i<len;i++)
218
213
  this.effects[i] && this.effects[i].loop(timePos);
219
214
  }
220
215
  });
@@ -223,7 +218,7 @@ Effect.Queues = {
223
218
  instances: $H(),
224
219
  get: function(queueName) {
225
220
  if (!Object.isString(queueName)) return queueName;
226
-
221
+
227
222
  return this.instances.get(queueName) ||
228
223
  this.instances.set(queueName, new Effect.ScopedQueue());
229
224
  }
@@ -248,23 +243,35 @@ Effect.Base = Class.create({
248
243
  this.fromToDelta = this.options.to-this.options.from;
249
244
  this.totalTime = this.finishOn-this.startOn;
250
245
  this.totalFrames = this.options.fps*this.options.duration;
251
-
252
- eval('this.render = function(pos){ '+
253
- 'if (this.state=="idle"){this.state="running";'+
254
- codeForEvent(this.options,'beforeSetup')+
255
- (this.setup ? 'this.setup();':'')+
256
- codeForEvent(this.options,'afterSetup')+
257
- '};if (this.state=="running"){'+
258
- 'pos=this.options.transition(pos)*'+this.fromToDelta+'+'+this.options.from+';'+
259
- 'this.position=pos;'+
260
- codeForEvent(this.options,'beforeUpdate')+
261
- (this.update ? 'this.update(pos);':'')+
262
- codeForEvent(this.options,'afterUpdate')+
263
- '}}');
264
-
246
+
247
+ this.render = (function() {
248
+ function dispatch(effect, eventName) {
249
+ if (effect.options[eventName + 'Internal'])
250
+ effect.options[eventName + 'Internal'](effect);
251
+ if (effect.options[eventName])
252
+ effect.options[eventName](effect);
253
+ }
254
+
255
+ return function(pos) {
256
+ if (this.state === "idle") {
257
+ this.state = "running";
258
+ dispatch(this, 'beforeSetup');
259
+ if (this.setup) this.setup();
260
+ dispatch(this, 'afterSetup');
261
+ }
262
+ if (this.state === "running") {
263
+ pos = (this.options.transition(pos) * this.fromToDelta) + this.options.from;
264
+ this.position = pos;
265
+ dispatch(this, 'beforeUpdate');
266
+ if (this.update) this.update(pos);
267
+ dispatch(this, 'afterUpdate');
268
+ }
269
+ };
270
+ })();
271
+
265
272
  this.event('beforeStart');
266
273
  if (!this.options.sync)
267
- Effect.Queues.get(Object.isString(this.options.queue) ?
274
+ Effect.Queues.get(Object.isString(this.options.queue) ?
268
275
  'global' : this.options.queue.scope).add(this);
269
276
  },
270
277
  loop: function(timePos) {
@@ -273,9 +280,9 @@ Effect.Base = Class.create({
273
280
  this.render(1.0);
274
281
  this.cancel();
275
282
  this.event('beforeFinish');
276
- if (this.finish) this.finish();
283
+ if (this.finish) this.finish();
277
284
  this.event('afterFinish');
278
- return;
285
+ return;
279
286
  }
280
287
  var pos = (timePos - this.startOn) / this.totalTime,
281
288
  frame = (pos * this.totalFrames).round();
@@ -287,7 +294,7 @@ Effect.Base = Class.create({
287
294
  },
288
295
  cancel: function() {
289
296
  if (!this.options.sync)
290
- Effect.Queues.get(Object.isString(this.options.queue) ?
297
+ Effect.Queues.get(Object.isString(this.options.queue) ?
291
298
  'global' : this.options.queue.scope).remove(this);
292
299
  this.state = 'finished';
293
300
  },
@@ -325,10 +332,10 @@ Effect.Parallel = Class.create(Effect.Base, {
325
332
  Effect.Tween = Class.create(Effect.Base, {
326
333
  initialize: function(object, from, to) {
327
334
  object = Object.isString(object) ? $(object) : object;
328
- var args = $A(arguments), method = args.last(),
335
+ var args = $A(arguments), method = args.last(),
329
336
  options = args.length == 5 ? args[3] : null;
330
337
  this.method = Object.isFunction(method) ? method.bind(object) :
331
- Object.isFunction(object[method]) ? object[method].bind(object) :
338
+ Object.isFunction(object[method]) ? object[method].bind(object) :
332
339
  function(value) { object[method] = value };
333
340
  this.start(Object.extend({ from: from, to: to }, options || { }));
334
341
  },
@@ -392,7 +399,7 @@ Effect.Move = Class.create(Effect.Base, {
392
399
 
393
400
  // for backwards compatibility
394
401
  Effect.MoveBy = function(element, toTop, toLeft) {
395
- return new Effect.Move(element,
402
+ return new Effect.Move(element,
396
403
  Object.extend({ x: toLeft, y: toTop }, arguments[3] || { }));
397
404
  };
398
405
 
@@ -414,15 +421,15 @@ Effect.Scale = Class.create(Effect.Base, {
414
421
  setup: function() {
415
422
  this.restoreAfterFinish = this.options.restoreAfterFinish || false;
416
423
  this.elementPositioning = this.element.getStyle('position');
417
-
424
+
418
425
  this.originalStyle = { };
419
426
  ['top','left','width','height','fontSize'].each( function(k) {
420
427
  this.originalStyle[k] = this.element.style[k];
421
428
  }.bind(this));
422
-
429
+
423
430
  this.originalTop = this.element.offsetTop;
424
431
  this.originalLeft = this.element.offsetLeft;
425
-
432
+
426
433
  var fontSize = this.element.getStyle('font-size') || '100%';
427
434
  ['em','px','%','pt'].each( function(fontSizeType) {
428
435
  if (fontSize.indexOf(fontSizeType)>0) {
@@ -430,9 +437,9 @@ Effect.Scale = Class.create(Effect.Base, {
430
437
  this.fontSizeType = fontSizeType;
431
438
  }
432
439
  }.bind(this));
433
-
440
+
434
441
  this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;
435
-
442
+
436
443
  this.dims = null;
437
444
  if (this.options.scaleMode=='box')
438
445
  this.dims = [this.element.offsetHeight, this.element.offsetWidth];
@@ -507,17 +514,16 @@ Effect.Highlight = Class.create(Effect.Base, {
507
514
 
508
515
  Effect.ScrollTo = function(element) {
509
516
  var options = arguments[1] || { },
510
- scrollOffsets = document.viewport.getScrollOffsets(),
511
- elementOffsets = $(element).cumulativeOffset(),
512
- max = (window.height || document.body.scrollHeight) - document.viewport.getHeight();
517
+ scrollOffsets = document.viewport.getScrollOffsets(),
518
+ elementOffsets = $(element).cumulativeOffset();
513
519
 
514
520
  if (options.offset) elementOffsets[1] += options.offset;
515
521
 
516
522
  return new Effect.Tween(null,
517
523
  scrollOffsets.top,
518
- elementOffsets[1] > max ? max : elementOffsets[1],
524
+ elementOffsets[1],
519
525
  options,
520
- function(p){ scrollTo(scrollOffsets.left, p.round()) }
526
+ function(p){ scrollTo(scrollOffsets.left, p.round()); }
521
527
  );
522
528
  };
523
529
 
@@ -529,9 +535,9 @@ Effect.Fade = function(element) {
529
535
  var options = Object.extend({
530
536
  from: element.getOpacity() || 1.0,
531
537
  to: 0.0,
532
- afterFinishInternal: function(effect) {
538
+ afterFinishInternal: function(effect) {
533
539
  if (effect.options.to!=0) return;
534
- effect.element.hide().setStyle({opacity: oldOpacity});
540
+ effect.element.hide().setStyle({opacity: oldOpacity});
535
541
  }
536
542
  }, arguments[1] || { });
537
543
  return new Effect.Opacity(element,options);
@@ -547,15 +553,15 @@ Effect.Appear = function(element) {
547
553
  effect.element.forceRerendering();
548
554
  },
549
555
  beforeSetup: function(effect) {
550
- effect.element.setOpacity(effect.options.from).show();
556
+ effect.element.setOpacity(effect.options.from).show();
551
557
  }}, arguments[1] || { });
552
558
  return new Effect.Opacity(element,options);
553
559
  };
554
560
 
555
561
  Effect.Puff = function(element) {
556
562
  element = $(element);
557
- var oldStyle = {
558
- opacity: element.getInlineOpacity(),
563
+ var oldStyle = {
564
+ opacity: element.getInlineOpacity(),
559
565
  position: element.getStyle('position'),
560
566
  top: element.style.top,
561
567
  left: element.style.left,
@@ -563,12 +569,12 @@ Effect.Puff = function(element) {
563
569
  height: element.style.height
564
570
  };
565
571
  return new Effect.Parallel(
566
- [ new Effect.Scale(element, 200,
567
- { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }),
568
- new Effect.Opacity(element, { sync: true, to: 0.0 } ) ],
569
- Object.extend({ duration: 1.0,
572
+ [ new Effect.Scale(element, 200,
573
+ { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }),
574
+ new Effect.Opacity(element, { sync: true, to: 0.0 } ) ],
575
+ Object.extend({ duration: 1.0,
570
576
  beforeSetupInternal: function(effect) {
571
- Position.absolutize(effect.effects[0].element)
577
+ Position.absolutize(effect.effects[0].element);
572
578
  },
573
579
  afterFinishInternal: function(effect) {
574
580
  effect.effects[0].element.hide().setStyle(oldStyle); }
@@ -580,12 +586,12 @@ Effect.BlindUp = function(element) {
580
586
  element = $(element);
581
587
  element.makeClipping();
582
588
  return new Effect.Scale(element, 0,
583
- Object.extend({ scaleContent: false,
584
- scaleX: false,
589
+ Object.extend({ scaleContent: false,
590
+ scaleX: false,
585
591
  restoreAfterFinish: true,
586
592
  afterFinishInternal: function(effect) {
587
593
  effect.element.hide().undoClipping();
588
- }
594
+ }
589
595
  }, arguments[1] || { })
590
596
  );
591
597
  };
@@ -593,15 +599,15 @@ Effect.BlindUp = function(element) {
593
599
  Effect.BlindDown = function(element) {
594
600
  element = $(element);
595
601
  var elementDimensions = element.getDimensions();
596
- return new Effect.Scale(element, 100, Object.extend({
597
- scaleContent: false,
602
+ return new Effect.Scale(element, 100, Object.extend({
603
+ scaleContent: false,
598
604
  scaleX: false,
599
605
  scaleFrom: 0,
600
606
  scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
601
607
  restoreAfterFinish: true,
602
608
  afterSetup: function(effect) {
603
- effect.element.makeClipping().setStyle({height: '0px'}).show();
604
- },
609
+ effect.element.makeClipping().setStyle({height: '0px'}).show();
610
+ },
605
611
  afterFinishInternal: function(effect) {
606
612
  effect.element.undoClipping();
607
613
  }
@@ -616,16 +622,16 @@ Effect.SwitchOff = function(element) {
616
622
  from: 0,
617
623
  transition: Effect.Transitions.flicker,
618
624
  afterFinishInternal: function(effect) {
619
- new Effect.Scale(effect.element, 1, {
625
+ new Effect.Scale(effect.element, 1, {
620
626
  duration: 0.3, scaleFromCenter: true,
621
627
  scaleX: false, scaleContent: false, restoreAfterFinish: true,
622
- beforeSetup: function(effect) {
628
+ beforeSetup: function(effect) {
623
629
  effect.element.makePositioned().makeClipping();
624
630
  },
625
631
  afterFinishInternal: function(effect) {
626
632
  effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity});
627
633
  }
628
- })
634
+ });
629
635
  }
630
636
  }, arguments[1] || { }));
631
637
  };
@@ -637,16 +643,16 @@ Effect.DropOut = function(element) {
637
643
  left: element.getStyle('left'),
638
644
  opacity: element.getInlineOpacity() };
639
645
  return new Effect.Parallel(
640
- [ new Effect.Move(element, {x: 0, y: 100, sync: true }),
646
+ [ new Effect.Move(element, {x: 0, y: 100, sync: true }),
641
647
  new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
642
648
  Object.extend(
643
649
  { duration: 0.5,
644
650
  beforeSetup: function(effect) {
645
- effect.effects[0].element.makePositioned();
651
+ effect.effects[0].element.makePositioned();
646
652
  },
647
653
  afterFinishInternal: function(effect) {
648
654
  effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);
649
- }
655
+ }
650
656
  }, arguments[1] || { }));
651
657
  };
652
658
 
@@ -674,7 +680,7 @@ Effect.Shake = function(element) {
674
680
  new Effect.Move(effect.element,
675
681
  { x: -distance, y: 0, duration: split, afterFinishInternal: function(effect) {
676
682
  effect.element.undoPositioned().setStyle(oldStyle);
677
- }}) }}) }}) }}) }}) }});
683
+ }}); }}); }}); }}); }}); }});
678
684
  };
679
685
 
680
686
  Effect.SlideDown = function(element) {
@@ -682,9 +688,9 @@ Effect.SlideDown = function(element) {
682
688
  // SlideDown need to have the content of the element wrapped in a container element with fixed height!
683
689
  var oldInnerBottom = element.down().getStyle('bottom');
684
690
  var elementDimensions = element.getDimensions();
685
- return new Effect.Scale(element, 100, Object.extend({
686
- scaleContent: false,
687
- scaleX: false,
691
+ return new Effect.Scale(element, 100, Object.extend({
692
+ scaleContent: false,
693
+ scaleX: false,
688
694
  scaleFrom: window.opera ? 0 : 1,
689
695
  scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
690
696
  restoreAfterFinish: true,
@@ -692,11 +698,11 @@ Effect.SlideDown = function(element) {
692
698
  effect.element.makePositioned();
693
699
  effect.element.down().makePositioned();
694
700
  if (window.opera) effect.element.setStyle({top: ''});
695
- effect.element.makeClipping().setStyle({height: '0px'}).show();
701
+ effect.element.makeClipping().setStyle({height: '0px'}).show();
696
702
  },
697
703
  afterUpdateInternal: function(effect) {
698
704
  effect.element.down().setStyle({bottom:
699
- (effect.dims[0] - effect.element.clientHeight) + 'px' });
705
+ (effect.dims[0] - effect.element.clientHeight) + 'px' });
700
706
  },
701
707
  afterFinishInternal: function(effect) {
702
708
  effect.element.undoClipping().undoPositioned();
@@ -710,8 +716,8 @@ Effect.SlideUp = function(element) {
710
716
  var oldInnerBottom = element.down().getStyle('bottom');
711
717
  var elementDimensions = element.getDimensions();
712
718
  return new Effect.Scale(element, window.opera ? 0 : 1,
713
- Object.extend({ scaleContent: false,
714
- scaleX: false,
719
+ Object.extend({ scaleContent: false,
720
+ scaleX: false,
715
721
  scaleMode: 'box',
716
722
  scaleFrom: 100,
717
723
  scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
@@ -721,7 +727,7 @@ Effect.SlideUp = function(element) {
721
727
  effect.element.down().makePositioned();
722
728
  if (window.opera) effect.element.setStyle({top: ''});
723
729
  effect.element.makeClipping().show();
724
- },
730
+ },
725
731
  afterUpdateInternal: function(effect) {
726
732
  effect.element.down().setStyle({bottom:
727
733
  (effect.dims[0] - effect.element.clientHeight) + 'px' });
@@ -734,15 +740,15 @@ Effect.SlideUp = function(element) {
734
740
  );
735
741
  };
736
742
 
737
- // Bug in opera makes the TD containing this element expand for a instance after finish
743
+ // Bug in opera makes the TD containing this element expand for a instance after finish
738
744
  Effect.Squish = function(element) {
739
- return new Effect.Scale(element, window.opera ? 1 : 0, {
745
+ return new Effect.Scale(element, window.opera ? 1 : 0, {
740
746
  restoreAfterFinish: true,
741
747
  beforeSetup: function(effect) {
742
- effect.element.makeClipping();
743
- },
748
+ effect.element.makeClipping();
749
+ },
744
750
  afterFinishInternal: function(effect) {
745
- effect.element.hide().undoClipping();
751
+ effect.element.hide().undoClipping();
746
752
  }
747
753
  });
748
754
  };
@@ -762,13 +768,13 @@ Effect.Grow = function(element) {
762
768
  width: element.style.width,
763
769
  opacity: element.getInlineOpacity() };
764
770
 
765
- var dims = element.getDimensions();
771
+ var dims = element.getDimensions();
766
772
  var initialMoveX, initialMoveY;
767
773
  var moveX, moveY;
768
-
774
+
769
775
  switch (options.direction) {
770
776
  case 'top-left':
771
- initialMoveX = initialMoveY = moveX = moveY = 0;
777
+ initialMoveX = initialMoveY = moveX = moveY = 0;
772
778
  break;
773
779
  case 'top-right':
774
780
  initialMoveX = dims.width;
@@ -793,11 +799,11 @@ Effect.Grow = function(element) {
793
799
  moveY = -dims.height / 2;
794
800
  break;
795
801
  }
796
-
802
+
797
803
  return new Effect.Move(element, {
798
804
  x: initialMoveX,
799
805
  y: initialMoveY,
800
- duration: 0.01,
806
+ duration: 0.01,
801
807
  beforeSetup: function(effect) {
802
808
  effect.element.hide().makeClipping().makePositioned();
803
809
  },
@@ -806,17 +812,17 @@ Effect.Grow = function(element) {
806
812
  [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
807
813
  new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
808
814
  new Effect.Scale(effect.element, 100, {
809
- scaleMode: { originalHeight: dims.height, originalWidth: dims.width },
815
+ scaleMode: { originalHeight: dims.height, originalWidth: dims.width },
810
816
  sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
811
817
  ], Object.extend({
812
818
  beforeSetup: function(effect) {
813
- effect.effects[0].element.setStyle({height: '0px'}).show();
819
+ effect.effects[0].element.setStyle({height: '0px'}).show();
814
820
  },
815
821
  afterFinishInternal: function(effect) {
816
- effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle);
822
+ effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle);
817
823
  }
818
824
  }, options)
819
- )
825
+ );
820
826
  }
821
827
  });
822
828
  };
@@ -838,7 +844,7 @@ Effect.Shrink = function(element) {
838
844
 
839
845
  var dims = element.getDimensions();
840
846
  var moveX, moveY;
841
-
847
+
842
848
  switch (options.direction) {
843
849
  case 'top-left':
844
850
  moveX = moveY = 0;
@@ -855,19 +861,19 @@ Effect.Shrink = function(element) {
855
861
  moveX = dims.width;
856
862
  moveY = dims.height;
857
863
  break;
858
- case 'center':
864
+ case 'center':
859
865
  moveX = dims.width / 2;
860
866
  moveY = dims.height / 2;
861
867
  break;
862
868
  }
863
-
869
+
864
870
  return new Effect.Parallel(
865
871
  [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
866
872
  new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
867
873
  new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
868
- ], Object.extend({
874
+ ], Object.extend({
869
875
  beforeStartInternal: function(effect) {
870
- effect.effects[0].element.makePositioned().makeClipping();
876
+ effect.effects[0].element.makePositioned().makeClipping();
871
877
  },
872
878
  afterFinishInternal: function(effect) {
873
879
  effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); }
@@ -877,12 +883,14 @@ Effect.Shrink = function(element) {
877
883
 
878
884
  Effect.Pulsate = function(element) {
879
885
  element = $(element);
880
- var options = arguments[1] || { };
881
- var oldOpacity = element.getInlineOpacity();
882
- var transition = options.transition || Effect.Transitions.sinoidal;
883
- var reverser = function(pos){ return transition(1-Effect.Transitions.pulse(pos, options.pulses)) };
884
- reverser.bind(transition);
885
- return new Effect.Opacity(element,
886
+ var options = arguments[1] || { },
887
+ oldOpacity = element.getInlineOpacity(),
888
+ transition = options.transition || Effect.Transitions.linear,
889
+ reverser = function(pos){
890
+ return 1 - transition((-Math.cos((pos*(options.pulses||5)*2)*Math.PI)/2) + .5);
891
+ };
892
+
893
+ return new Effect.Opacity(element,
886
894
  Object.extend(Object.extend({ duration: 2.0, from: 0,
887
895
  afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
888
896
  }, options), {transition: reverser}));
@@ -896,12 +904,12 @@ Effect.Fold = function(element) {
896
904
  width: element.style.width,
897
905
  height: element.style.height };
898
906
  element.makeClipping();
899
- return new Effect.Scale(element, 5, Object.extend({
907
+ return new Effect.Scale(element, 5, Object.extend({
900
908
  scaleContent: false,
901
909
  scaleX: false,
902
910
  afterFinishInternal: function(effect) {
903
- new Effect.Scale(element, 1, {
904
- scaleContent: false,
911
+ new Effect.Scale(element, 1, {
912
+ scaleContent: false,
905
913
  scaleY: false,
906
914
  afterFinishInternal: function(effect) {
907
915
  effect.element.hide().undoClipping().setStyle(oldStyle);
@@ -916,7 +924,7 @@ Effect.Morph = Class.create(Effect.Base, {
916
924
  var options = Object.extend({
917
925
  style: { }
918
926
  }, arguments[1] || { });
919
-
927
+
920
928
  if (!Object.isString(options.style)) this.style = $H(options.style);
921
929
  else {
922
930
  if (options.style.include(':'))
@@ -934,18 +942,18 @@ Effect.Morph = Class.create(Effect.Base, {
934
942
  effect.transforms.each(function(transform) {
935
943
  effect.element.style[transform.style] = '';
936
944
  });
937
- }
945
+ };
938
946
  }
939
947
  }
940
948
  this.start(options);
941
949
  },
942
-
950
+
943
951
  setup: function(){
944
952
  function parseColor(color){
945
953
  if (!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';
946
954
  color = color.parseColor();
947
955
  return $R(0,2).map(function(i){
948
- return parseInt( color.slice(i*2+1,i*2+3), 16 )
956
+ return parseInt( color.slice(i*2+1,i*2+3), 16 );
949
957
  });
950
958
  }
951
959
  this.transforms = this.style.map(function(pair){
@@ -965,9 +973,9 @@ Effect.Morph = Class.create(Effect.Base, {
965
973
  }
966
974
 
967
975
  var originalValue = this.element.getStyle(property);
968
- return {
969
- style: property.camelize(),
970
- originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0),
976
+ return {
977
+ style: property.camelize(),
978
+ originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0),
971
979
  targetValue: unit=='color' ? parseColor(value) : value,
972
980
  unit: unit
973
981
  };
@@ -978,13 +986,13 @@ Effect.Morph = Class.create(Effect.Base, {
978
986
  transform.unit != 'color' &&
979
987
  (isNaN(transform.originalValue) || isNaN(transform.targetValue))
980
988
  )
981
- )
989
+ );
982
990
  });
983
991
  },
984
992
  update: function(position) {
985
993
  var style = { }, transform, i = this.transforms.length;
986
994
  while(i--)
987
- style[(transform = this.transforms[i]).style] =
995
+ style[(transform = this.transforms[i]).style] =
988
996
  transform.unit=='color' ? '#'+
989
997
  (Math.round(transform.originalValue[0]+
990
998
  (transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart() +
@@ -993,7 +1001,7 @@ Effect.Morph = Class.create(Effect.Base, {
993
1001
  (Math.round(transform.originalValue[2]+
994
1002
  (transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart() :
995
1003
  (transform.originalValue +
996
- (transform.targetValue - transform.originalValue) * position).toFixed(3) +
1004
+ (transform.targetValue - transform.originalValue) * position).toFixed(3) +
997
1005
  (transform.unit === null ? '' : transform.unit);
998
1006
  this.element.setStyle(style, true);
999
1007
  }
@@ -1030,7 +1038,7 @@ Effect.Transform = Class.create({
1030
1038
  });
1031
1039
 
1032
1040
  Element.CSS_PROPERTIES = $w(
1033
- 'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' +
1041
+ 'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' +
1034
1042
  'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +
1035
1043
  'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +
1036
1044
  'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +
@@ -1039,7 +1047,7 @@ Element.CSS_PROPERTIES = $w(
1039
1047
  'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +
1040
1048
  'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +
1041
1049
  'right textIndent top width wordSpacing zIndex');
1042
-
1050
+
1043
1051
  Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;
1044
1052
 
1045
1053
  String.__parseStyleElement = document.createElement('div');
@@ -1051,11 +1059,11 @@ String.prototype.parseStyle = function(){
1051
1059
  String.__parseStyleElement.innerHTML = '<div style="' + this + '"></div>';
1052
1060
  style = String.__parseStyleElement.childNodes[0].style;
1053
1061
  }
1054
-
1062
+
1055
1063
  Element.CSS_PROPERTIES.each(function(property){
1056
- if (style[property]) styleRules.set(property, style[property]);
1064
+ if (style[property]) styleRules.set(property, style[property]);
1057
1065
  });
1058
-
1066
+
1059
1067
  if (Prototype.Browser.IE && this.include('opacity'))
1060
1068
  styleRules.set('opacity', this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]);
1061
1069
 
@@ -1074,14 +1082,14 @@ if (document.defaultView && document.defaultView.getComputedStyle) {
1074
1082
  Element.getStyles = function(element) {
1075
1083
  element = $(element);
1076
1084
  var css = element.currentStyle, styles;
1077
- styles = Element.CSS_PROPERTIES.inject({ }, function(hash, property) {
1078
- hash.set(property, css[property]);
1079
- return hash;
1085
+ styles = Element.CSS_PROPERTIES.inject({ }, function(results, property) {
1086
+ results[property] = css[property];
1087
+ return results;
1080
1088
  });
1081
- if (!styles.opacity) styles.set('opacity', element.getOpacity());
1089
+ if (!styles.opacity) styles.opacity = element.getOpacity();
1082
1090
  return styles;
1083
1091
  };
1084
- };
1092
+ }
1085
1093
 
1086
1094
  Effect.Methods = {
1087
1095
  morph: function(element, style) {
@@ -1090,7 +1098,7 @@ Effect.Methods = {
1090
1098
  return element;
1091
1099
  },
1092
1100
  visualEffect: function(element, effect, options) {
1093
- element = $(element)
1101
+ element = $(element);
1094
1102
  var s = effect.dasherize().camelize(), klass = s.charAt(0).toUpperCase() + s.substring(1);
1095
1103
  new Effect[klass](element, options);
1096
1104
  return element;
@@ -1104,17 +1112,17 @@ Effect.Methods = {
1104
1112
 
1105
1113
  $w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+
1106
1114
  'pulsate shake puff squish switchOff dropOut').each(
1107
- function(effect) {
1115
+ function(effect) {
1108
1116
  Effect.Methods[effect] = function(element, options){
1109
1117
  element = $(element);
1110
1118
  Effect[effect.charAt(0).toUpperCase() + effect.substring(1)](element, options);
1111
1119
  return element;
1112
- }
1120
+ };
1113
1121
  }
1114
1122
  );
1115
1123
 
1116
- $w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each(
1124
+ $w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each(
1117
1125
  function(f) { Effect.Methods[f] = Element[f]; }
1118
1126
  );
1119
1127
 
1120
- Element.addMethods(Effect.Methods);
1128
+ Element.addMethods(Effect.Methods);