right-rails 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +20 -0
- data/README.textile +50 -0
- data/Rakefile +23 -0
- data/generators/right_rails/right_rails_generator.rb +41 -0
- data/generators/right_rails/templates/iframed.html.erb +10 -0
- data/generators/right_scaffold/right_scaffold_generator.rb +53 -0
- data/generators/right_scaffold/templates/controller.rb +99 -0
- data/generators/right_scaffold/templates/helper.rb +2 -0
- data/generators/right_scaffold/templates/layout.html.erb +18 -0
- data/generators/right_scaffold/templates/style.css +54 -0
- data/generators/right_scaffold/templates/view__form.html.erb +16 -0
- data/generators/right_scaffold/templates/view__item.html.erb +13 -0
- data/generators/right_scaffold/templates/view_edit.html.erb +6 -0
- data/generators/right_scaffold/templates/view_index.html.erb +9 -0
- data/generators/right_scaffold/templates/view_new.html.erb +5 -0
- data/generators/right_scaffold/templates/view_show.html.erb +10 -0
- data/init.rb +12 -0
- data/javascripts/right-autocompleter-src.js +303 -0
- data/javascripts/right-autocompleter.js +9 -0
- data/javascripts/right-behavior-src.js +240 -0
- data/javascripts/right-behavior.js +8 -0
- data/javascripts/right-calendar-src.js +855 -0
- data/javascripts/right-calendar.js +9 -0
- data/javascripts/right-dnd-src.js +555 -0
- data/javascripts/right-dnd.js +9 -0
- data/javascripts/right-effects-src.js +425 -0
- data/javascripts/right-effects.js +6 -0
- data/javascripts/right-events-src.js +369 -0
- data/javascripts/right-events.js +6 -0
- data/javascripts/right-json-src.js +176 -0
- data/javascripts/right-json.js +6 -0
- data/javascripts/right-lightbox-src.js +597 -0
- data/javascripts/right-lightbox.js +9 -0
- data/javascripts/right-rails-src.js +269 -0
- data/javascripts/right-rails.js +9 -0
- data/javascripts/right-rater-src.js +248 -0
- data/javascripts/right-rater.js +9 -0
- data/javascripts/right-selectable-src.js +507 -0
- data/javascripts/right-selectable.js +7 -0
- data/javascripts/right-slider-src.js +291 -0
- data/javascripts/right-slider.js +7 -0
- data/javascripts/right-sortable-src.js +221 -0
- data/javascripts/right-sortable.js +9 -0
- data/javascripts/right-src.js +4939 -0
- data/javascripts/right-tabs-src.js +776 -0
- data/javascripts/right-tabs.js +6 -0
- data/javascripts/right-tooltips-src.js +130 -0
- data/javascripts/right-tooltips.js +9 -0
- data/javascripts/right-ui-i18n-de.js +29 -0
- data/javascripts/right-ui-i18n-en-us.js +11 -0
- data/javascripts/right-ui-i18n-es.js +29 -0
- data/javascripts/right-ui-i18n-fr.js +29 -0
- data/javascripts/right-ui-i18n-jp.js +33 -0
- data/javascripts/right-ui-i18n-ru.js +29 -0
- data/javascripts/right-ui-i18n-uk.js +29 -0
- data/javascripts/right.js +10 -0
- data/lib/right-rails.rb +11 -0
- data/lib/right_rails/controller_extensions.rb +85 -0
- data/lib/right_rails/helpers/basic.rb +111 -0
- data/lib/right_rails/helpers/forms.rb +239 -0
- data/lib/right_rails/helpers/misc.rb +164 -0
- data/lib/right_rails/helpers/rails.rb +166 -0
- data/lib/right_rails/helpers.rb +5 -0
- data/lib/right_rails/java_script_generator.rb +313 -0
- data/lib/right_rails.rb +6 -0
- data/spec/lib/right_rails/controller_extensions_spec.rb +60 -0
- data/spec/lib/right_rails/helpers/basic_spec.rb +74 -0
- data/spec/lib/right_rails/helpers/forms_spec.rb +51 -0
- data/spec/lib/right_rails/helpers/misc_spec.rb +120 -0
- data/spec/lib/right_rails/helpers/rails_spec.rb +149 -0
- data/spec/lib/right_rails/java_script_generator_spec.rb +317 -0
- data/spec/spec.opts +5 -0
- data/spec/spec_helper.rb +15 -0
- metadata +128 -0
@@ -0,0 +1,425 @@
|
|
1
|
+
/**
|
2
|
+
* Additional visual effects module
|
3
|
+
*
|
4
|
+
* Copyright (C) 2008-2009 Nikolay V. Nemshilov aka St. <nemshilov#gma-il>
|
5
|
+
*/
|
6
|
+
if (!self.Fx) throw "RightJS Fx is missing";
|
7
|
+
/**
|
8
|
+
* The basic move visual effect
|
9
|
+
*
|
10
|
+
* @copyright (C) 2009 Nikolay V. Nemshilov aka St.
|
11
|
+
*/
|
12
|
+
Fx.Move = new Class(Fx.Morph, {
|
13
|
+
extend: {
|
14
|
+
Options: Object.merge(Fx.Options, {
|
15
|
+
duration: 'long',
|
16
|
+
position: 'absolute' // <- defines the positions measurment principle, not the element positioning
|
17
|
+
})
|
18
|
+
},
|
19
|
+
|
20
|
+
prepare: function(end_position) {
|
21
|
+
return this.$super(this.getEndPosition(end_position));
|
22
|
+
},
|
23
|
+
|
24
|
+
// moved to a separated method to be able to call it from subclasses
|
25
|
+
getEndPosition: function(end_position) {
|
26
|
+
var position = this.element.getStyle('position'), end_style = {};
|
27
|
+
|
28
|
+
if (position != 'absolute' || position != 'relative') {
|
29
|
+
this.element.style.position = position = position == 'fixed' ? 'absolute' : 'relative';
|
30
|
+
}
|
31
|
+
|
32
|
+
if (end_position.top) end_position.y = end_position.top.toInt();
|
33
|
+
if (end_position.left) end_position.x = end_position.left.toInt();
|
34
|
+
|
35
|
+
// adjusting the end position
|
36
|
+
var cur_position = this.element.position();
|
37
|
+
var par_position = this.getParentPosition();
|
38
|
+
var rel_left = cur_position.x - par_position.x;
|
39
|
+
var rel_top = cur_position.y - par_position.y;
|
40
|
+
|
41
|
+
if (this.options.position == 'relative') {
|
42
|
+
if (position == 'absolute') {
|
43
|
+
if (defined(end_position.x)) end_position.x += cur_position.x;
|
44
|
+
if (defined(end_position.y)) end_position.y += cur_position.x;
|
45
|
+
} else {
|
46
|
+
if (defined(end_position.x)) end_position.x += rel_left;
|
47
|
+
if (defined(end_position.y)) end_position.y += rel_top;
|
48
|
+
}
|
49
|
+
} else if (position == 'relative') {
|
50
|
+
if (defined(end_position.x)) end_position.x += rel_left - cur_position.x;
|
51
|
+
if (defined(end_position.y)) end_position.y += rel_top - cur_position.y;
|
52
|
+
}
|
53
|
+
|
54
|
+
// need this to bypass the other styles from the subclasses
|
55
|
+
for (var key in end_position) {
|
56
|
+
switch (key) {
|
57
|
+
case 'top': case 'left': break;
|
58
|
+
case 'y': end_style.top = end_position.y + 'px'; break;
|
59
|
+
case 'x': end_style.left = end_position.x + 'px'; break;
|
60
|
+
default: end_style[key] = end_position[key];
|
61
|
+
}
|
62
|
+
}
|
63
|
+
|
64
|
+
return end_style;
|
65
|
+
},
|
66
|
+
|
67
|
+
getParentPosition: function() {
|
68
|
+
Fx.Move.Dummy = Fx.Move.Dummy || new Element('div', {style: 'width:0;height:0;visibility:hidden'});
|
69
|
+
this.element.insert(Fx.Move.Dummy, 'before');
|
70
|
+
var position = Fx.Move.Dummy.position();
|
71
|
+
Fx.Move.Dummy.remove();
|
72
|
+
return position;
|
73
|
+
}
|
74
|
+
});
|
75
|
+
/**
|
76
|
+
* Zoom visual effect, graduately zoom and element in or out
|
77
|
+
*
|
78
|
+
* @copyright (C) 2009 Nikolay V. Nemshilov aka St.
|
79
|
+
*/
|
80
|
+
Fx.Zoom = new Class(Fx.Move, {
|
81
|
+
PROPERTIES: $w('width height lineHeight paddingTop paddingRight paddingBottom paddingLeft fontSize borderWidth'),
|
82
|
+
|
83
|
+
extend: {
|
84
|
+
Options: Object.merge(Fx.Move.Options, {
|
85
|
+
position: 'relative', // overriding the Fx.Move default
|
86
|
+
duration: 'normal',
|
87
|
+
from: 'center'
|
88
|
+
})
|
89
|
+
},
|
90
|
+
|
91
|
+
prepare: function(size, additional_styles) {
|
92
|
+
return this.$super(this._getZoomedStyle(size, additional_styles));
|
93
|
+
},
|
94
|
+
|
95
|
+
// private
|
96
|
+
|
97
|
+
// calculates the end zoommed style
|
98
|
+
_getZoomedStyle: function(size, additional_styles) {
|
99
|
+
var proportion = this._getProportion(size);
|
100
|
+
|
101
|
+
return Object.merge(
|
102
|
+
this._getBasicStyle(proportion),
|
103
|
+
this._getEndPosition(proportion),
|
104
|
+
additional_styles || {}
|
105
|
+
);
|
106
|
+
},
|
107
|
+
|
108
|
+
// calculates the zooming proportion
|
109
|
+
_getProportion: function(size) {
|
110
|
+
if (isHash(size)) {
|
111
|
+
var sizes = $E('div').insertTo(
|
112
|
+
$E('div', {style: "visibility:hidden;float:left;height:0;width:0"}).insertTo(document.body)
|
113
|
+
).setStyle(size).sizes();
|
114
|
+
|
115
|
+
if ('height' in size) size = sizes.y / this.element.sizes().y;
|
116
|
+
else size = sizes.x / this.element.sizes().x;
|
117
|
+
} else if (isString(size)) {
|
118
|
+
size = size.endsWith('%') ? size.toFloat() / 100 : size.toFloat();
|
119
|
+
}
|
120
|
+
|
121
|
+
return size;
|
122
|
+
},
|
123
|
+
|
124
|
+
// getting the basic end style
|
125
|
+
_getBasicStyle: function(proportion) {
|
126
|
+
var style = this._getStyle(this.element, this.PROPERTIES);
|
127
|
+
|
128
|
+
this._cleanStyle(style);
|
129
|
+
|
130
|
+
for (var key in style) {
|
131
|
+
if (style[key][0] > 0) {
|
132
|
+
style[key] = (proportion * style[key][0]) + style[key][1];
|
133
|
+
} else {
|
134
|
+
delete(style[key]);
|
135
|
+
}
|
136
|
+
}
|
137
|
+
// preventing the border disappearance
|
138
|
+
if (style.borderWidth && style.borderWidth.toFloat() < 1) {
|
139
|
+
style.borderWidth = '1px';
|
140
|
+
}
|
141
|
+
|
142
|
+
return style;
|
143
|
+
},
|
144
|
+
|
145
|
+
// getting the position adjustments
|
146
|
+
_getEndPosition: function(proportion) {
|
147
|
+
var position = {};
|
148
|
+
var sizes = this.element.sizes();
|
149
|
+
var x_diff = sizes.x * (proportion - 1);
|
150
|
+
var y_diff = sizes.y * (proportion - 1);
|
151
|
+
|
152
|
+
switch (this.options.from.replace('-', ' ').split(' ').sort().join('_')) {
|
153
|
+
case 'top':
|
154
|
+
position.x = - x_diff / 2;
|
155
|
+
break;
|
156
|
+
|
157
|
+
case 'right':
|
158
|
+
position.x = - x_diff;
|
159
|
+
position.y = - y_diff / 2;
|
160
|
+
break;
|
161
|
+
|
162
|
+
case 'bottom':
|
163
|
+
position.x = - x_diff / 2;
|
164
|
+
case 'bottom_left':
|
165
|
+
position.y = - y_diff;
|
166
|
+
break;
|
167
|
+
|
168
|
+
case 'bottom_right':
|
169
|
+
position.y = - y_diff;
|
170
|
+
case 'right_top':
|
171
|
+
position.x = - x_diff;
|
172
|
+
break;
|
173
|
+
|
174
|
+
case 'center':
|
175
|
+
position.x = - x_diff / 2;
|
176
|
+
case 'left':
|
177
|
+
position.y = - y_diff / 2;
|
178
|
+
break;
|
179
|
+
|
180
|
+
default: // left_top or none, do nothing, let the thing expand as is
|
181
|
+
}
|
182
|
+
|
183
|
+
return position;
|
184
|
+
}
|
185
|
+
});
|
186
|
+
/**
|
187
|
+
* Bounce visual effect, slightly moves an element forward and back
|
188
|
+
*
|
189
|
+
* @copyright (C) 2009 Nikolay V. Nemshilov aka St.
|
190
|
+
*/
|
191
|
+
Fx.Bounce = new Class(Fx, {
|
192
|
+
extend: {
|
193
|
+
Options: Object.merge(Fx.Options, {
|
194
|
+
duration: 'short',
|
195
|
+
direction: 'top',
|
196
|
+
value: 16 // the shake distance
|
197
|
+
})
|
198
|
+
},
|
199
|
+
|
200
|
+
prepare: function(value) {
|
201
|
+
value = value || this.options.value;
|
202
|
+
|
203
|
+
var position = this.element.position();
|
204
|
+
var duration = Fx.Durations[this.options.duration] || this.options.duration;
|
205
|
+
var move_options = {duration: duration, position: 'relative'};
|
206
|
+
|
207
|
+
var key = 'y'; // top bounce by default
|
208
|
+
|
209
|
+
switch (this.options.direction) {
|
210
|
+
case 'right':
|
211
|
+
value = -value;
|
212
|
+
case 'left':
|
213
|
+
key = 'x';
|
214
|
+
break;
|
215
|
+
case 'bottom':
|
216
|
+
value = -value;
|
217
|
+
}
|
218
|
+
|
219
|
+
var up_pos = {}, down_pos = {};
|
220
|
+
up_pos[key] = -value;
|
221
|
+
down_pos[key] = value;
|
222
|
+
|
223
|
+
new Fx.Move(this.element, move_options).start(up_pos);
|
224
|
+
new Fx.Move(this.element, move_options).start(down_pos);
|
225
|
+
|
226
|
+
this.finish.bind(this).delay(1);
|
227
|
+
|
228
|
+
return this;
|
229
|
+
}
|
230
|
+
});
|
231
|
+
/**
|
232
|
+
* run out and run in efffects
|
233
|
+
*
|
234
|
+
* Copyright (C) 2009 Nikolay V. Nemshilov aka St.
|
235
|
+
*/
|
236
|
+
Fx.Run = new Class(Fx.Move, {
|
237
|
+
extend: {
|
238
|
+
Options: Object.merge(Fx.Move.Options, {
|
239
|
+
direction: 'left'
|
240
|
+
})
|
241
|
+
},
|
242
|
+
|
243
|
+
prepare: function(how) {
|
244
|
+
var how = how || 'toggle', position = {}, dimensions = this.element.dimensions(), threshold = 80;
|
245
|
+
|
246
|
+
if (how == 'out' || (how == 'toggle' && this.element.visible())) {
|
247
|
+
if (this.options.direction == 'left') {
|
248
|
+
position.x = -dimensions.width - threshold;
|
249
|
+
} else {
|
250
|
+
position.y = -dimensions.height - threshold;
|
251
|
+
}
|
252
|
+
this.onFinish(function() {
|
253
|
+
this.element.hide().setStyle(this.getEndPosition({x: dimensions.left, y: dimensions.top}));
|
254
|
+
})
|
255
|
+
} else {
|
256
|
+
dimensions = this.element.setStyle('visibility: hidden').show().dimensions();
|
257
|
+
var pre_position = {};
|
258
|
+
|
259
|
+
if (this.options.direction == 'left') {
|
260
|
+
pre_position.x = - dimensions.width - threshold;
|
261
|
+
position.x = dimensions.left;
|
262
|
+
} else {
|
263
|
+
pre_position.y = - dimensions.height - threshold;
|
264
|
+
position.y = dimensions.top;
|
265
|
+
}
|
266
|
+
|
267
|
+
this.element.setStyle(this.getEndPosition(pre_position)).setStyle('visibility: visible');
|
268
|
+
}
|
269
|
+
|
270
|
+
return this.$super(position);
|
271
|
+
}
|
272
|
+
});
|
273
|
+
/**
|
274
|
+
* The puff visual effect
|
275
|
+
*
|
276
|
+
* Copyright (C) Nikolay V. Nemshilov aka St.
|
277
|
+
*/
|
278
|
+
Fx.Puff = new Class(Fx.Zoom, {
|
279
|
+
extend: {
|
280
|
+
Options: Object.merge(Fx.Zoom.Options, {
|
281
|
+
size: 1.4 // the end/initial size of the element
|
282
|
+
})
|
283
|
+
},
|
284
|
+
|
285
|
+
// protected
|
286
|
+
|
287
|
+
prepare: function(how) {
|
288
|
+
var how = how || 'toggle', opacity = 0, size = this.options.size;
|
289
|
+
|
290
|
+
if (how == 'out' || (how == 'toggle' && this.element.visible())) {
|
291
|
+
var initial_style = this.getEndPosition(this._getZoomedStyle(1));
|
292
|
+
this.onFinish(function() {
|
293
|
+
initial_style.opacity = 1;
|
294
|
+
this.element.hide().setStyle(initial_style);
|
295
|
+
});
|
296
|
+
|
297
|
+
} else {
|
298
|
+
this.element.setStyle('visibility: visible').show();
|
299
|
+
|
300
|
+
var width = this.element.offsetWidth;
|
301
|
+
var initial_style = this.getEndPosition(this._getZoomedStyle(1));
|
302
|
+
|
303
|
+
this.onFinish(function() {
|
304
|
+
this.element.setStyle(initial_style);
|
305
|
+
});
|
306
|
+
|
307
|
+
this.element.setStyle(Object.merge(
|
308
|
+
this.getEndPosition(this._getZoomedStyle(size)), {
|
309
|
+
opacity: 0,
|
310
|
+
visibility: 'visible'
|
311
|
+
}
|
312
|
+
));
|
313
|
+
|
314
|
+
size = width / this.element.offsetWidth;
|
315
|
+
opacity = 1;
|
316
|
+
}
|
317
|
+
|
318
|
+
|
319
|
+
return this.$super(size, {opacity: opacity});
|
320
|
+
}
|
321
|
+
|
322
|
+
});
|
323
|
+
/**
|
324
|
+
* Handles the to-class and from-class visual effects
|
325
|
+
*
|
326
|
+
* Copyright (C) Nikolay V. Nemshilov aka St.
|
327
|
+
*/
|
328
|
+
Fx.CSS = new Class(Fx.Morph, {
|
329
|
+
// the list of styles to watch
|
330
|
+
STYLES: $w('width height lineHeight opacity borderWidth borderColor padding margin color fontSize backgroundColor marginTop marginLeft marginRight marginBottom top left right bottom'),
|
331
|
+
|
332
|
+
// protected
|
333
|
+
|
334
|
+
prepare: function(add_class, remove_class) {
|
335
|
+
// grabbing the end style
|
336
|
+
var dummy = this._dummy().addClass(add_class||'').removeClass(remove_class||'');
|
337
|
+
var style = this._getStyle(dummy, this.STYLES);
|
338
|
+
dummy.remove();
|
339
|
+
|
340
|
+
// Opera 10 has some trash in the borderWidth style if it was not set
|
341
|
+
if (Browser.Opera && !/^\d+[a-z]+/.test(style.borderWidth))
|
342
|
+
delete(style.borderWidth);
|
343
|
+
|
344
|
+
// wiring the classes add/remove on-finish
|
345
|
+
if (add_class) this.onFinish(this.element.addClass.bind(this.element, add_class));
|
346
|
+
if (remove_class) this.onFinish(this.element.removeClass.bind(this.element, remove_class));
|
347
|
+
|
348
|
+
return this.$super(style);
|
349
|
+
}
|
350
|
+
});
|
351
|
+
/**
|
352
|
+
* Element shortcuts for the additional effects
|
353
|
+
*
|
354
|
+
* @copyright (C) 2009 Nikolay V. Nemshilov aka St.
|
355
|
+
*/
|
356
|
+
Element.addMethods({
|
357
|
+
/**
|
358
|
+
* The move visual effect shortcut
|
359
|
+
*
|
360
|
+
* @param Object end position x/y or top/left
|
361
|
+
* @param Object fx options
|
362
|
+
* @return Element self
|
363
|
+
*/
|
364
|
+
move: function(position, options) {
|
365
|
+
return this.fx('move', [position, options || {}]); // <- don't replace with arguments
|
366
|
+
},
|
367
|
+
|
368
|
+
/**
|
369
|
+
* The bounce effect shortcut
|
370
|
+
*
|
371
|
+
* @param Number optional bounce size
|
372
|
+
* @param Object fx options
|
373
|
+
* @return Element self
|
374
|
+
*/
|
375
|
+
bounce: function() {
|
376
|
+
return this.fx('bounce', arguments);
|
377
|
+
},
|
378
|
+
|
379
|
+
/**
|
380
|
+
* The zoom effect shortcut
|
381
|
+
*
|
382
|
+
* @param mixed the zooming value, see Fx.Zoom#start options
|
383
|
+
* @param Object fx options
|
384
|
+
* @return Element self
|
385
|
+
*/
|
386
|
+
zoom: function(size, options) {
|
387
|
+
return this.fx('zoom', [size, options || {}]);
|
388
|
+
},
|
389
|
+
|
390
|
+
/**
|
391
|
+
* Initiates the Fx.Run effect
|
392
|
+
*
|
393
|
+
* @param String running direction
|
394
|
+
* @param Object fx options
|
395
|
+
* @return Element self
|
396
|
+
*/
|
397
|
+
run: function() {
|
398
|
+
return this.fx('run', arguments);
|
399
|
+
},
|
400
|
+
|
401
|
+
/**
|
402
|
+
* The puff effect shortcut
|
403
|
+
*
|
404
|
+
* @param String running direction in|out|toggle
|
405
|
+
* @param Object fx options
|
406
|
+
* @return Element self
|
407
|
+
*/
|
408
|
+
puff: function() {
|
409
|
+
return this.fx('puff', arguments);
|
410
|
+
},
|
411
|
+
|
412
|
+
/**
|
413
|
+
* The Fx.Class effect shortcut
|
414
|
+
*
|
415
|
+
* @param String css-class name to add
|
416
|
+
* @param String css-class name to remove
|
417
|
+
* @param Object fx options
|
418
|
+
*/
|
419
|
+
morphToClass: function() {
|
420
|
+
var args = $A(arguments);
|
421
|
+
if (args[0] === null) args[0] = '';
|
422
|
+
|
423
|
+
return this.fx('CSS', args);
|
424
|
+
}
|
425
|
+
});
|
@@ -0,0 +1,6 @@
|
|
1
|
+
/**
|
2
|
+
* Additional visual effects module
|
3
|
+
*
|
4
|
+
* Copyright (C) 2008-2009 Nikolay V. Nemshilov aka St. <nemshilov#gma-il>
|
5
|
+
*/
|
6
|
+
if (!self.Fx) throw "RightJS Fx is missing";eval((function(s,d){for(var i=d.length-1;i>-1;i--)if(d[i])s=s.replace(new RegExp(i,'g'),d[i]);return s})("Fx.23=37 41(Fx.77,{43:{17:29.34(Fx.17,{25:'long',14:'42'})},31:7(e){9 3.44(3.12(e))},12:7(e){11 b=3.5.get96('14'),a={};if(b!='42'||b!='26')3.5.66.14=b=b=='fixed'?'42':'26';if(e.38)e.y=e.38.76();if(e.22)e.x=e.22.76();11 c=3.5.14();11 p=3.40();11 r=c.x-p.x;11 d=c.y-p.y;if(3.20.14=='26'){if(b=='42'){if(30(e.x))e.x+=c.x;if(30(e.y))e.y+=c.x}33{if(30(e.x))e.x+=r;if(30(e.y))e.y+=d}}33 if(b=='26'){if(30(e.x))e.x+=r-c.x;if(30(e.y))e.y+=d-c.y}90(11 k in e)59(k){19 '38':19 '22':24;19 'y':a.38=e.y+'px';24;19 'x':a.22=e.x+'px';24;67:a[k]=e[k]}9 a},40:7(){Fx.23.48=Fx.23.48||37 68('79',{66:'39:0;28:0;21:58'});3.5.insert(Fx.23.48,'be90e');11 p=Fx.23.48.14();Fx.23.48.73();9 p}});Fx.69=37 41(Fx.23,{56:$w('39 28 57 padding98 padding94 padding93 padding97 65 13'),43:{17:29.34(Fx.23.17,{14:'26',25:'normal',86:'75'})},31:7(s,a){9 3.44(3.18(s,a))},18:7(s,a){11 p=3.49(s);9 29.34(3.47(p),3._12(p),a||{})},49:7(s){if(isHash(s)){11 a=$E('79').64($E('79',{66:\"21:58;float:22;28:0;39:0\"}).64(document.body)).15(s).52();if('28' in s)s=a.y/3.5.52().y;33 s=a.x/3.5.52().x}33 if(isString(s))s=s.endsWith('%')?s.53()/100:s.53();9 s},47:7(p){11 s=3.61(3.5,3.56);3._clean96(s);90(11 k in s){if(s[k][0]>0)s[k]=(p*s[k][0])+s[k][1];33 74(s[k])}if(s.13&&s.13.53()<1)s.13='1px';9 s},_12:7(a){11 p={};11 s=3.5.52();11 x=s.x*(a-1);11 y=s.y*(a-1);59(3.20.86.replace('-',' ').split(' ').sort().join('_')){19 '38':p.x=-x/2;24;19 '62':p.x=-x;p.y=-y/2;24;19 '60':p.x=-x/2;19 '60_22':p.y=-y;24;19 '60_62':p.y=-y;19 '62_38':p.x=-x;24;19 '75':p.x=-x/2;19 '22':p.y=-y/2;24;67:}9 p}});Fx.Bounce=37 41(Fx,{43:{17:29.34(Fx.17,{25:'short',27:'38',78:16})},31:7(v){v=v||3.20.78;11 p=3.5.14();11 a=Fx.Durations[3.20.25]||3.20.25;11 m={25:a,14:'26'};11 k='y';59(3.20.27){19 '62':v=-v;19 '22':k='x';24;19 '60':v=-v}11 u={},d={};u[k]=-v;d[k]=v;37 Fx.23(3.5,m).81(u);37 Fx.23(3.5,m).81(d);3.finish.70(3).delay(1);9 3}});Fx.Run=37 41(Fx.23,{43:{17:29.34(Fx.23.17,{27:'22'})},31:7(h){11 h=h||'50',p={},d=3.5.55(),t=80;if(h=='91'||(h=='50'&&3.5.35())){if(3.20.27=='22')p.x=-d.39-t;33 p.y=-d.28-t;3.32(7(){3.5.88().15(3.12({x:d.22,y:d.38}))})}33{d=3.5.15('21: 58').87().55();11 a={};if(3.20.27=='22'){a.x=-d.39-t;p.x=d.22}33{a.y=-d.28-t;p.y=d.38}3.5.15(3.12(a)).15('21: 35')}9 3.44(p)}});Fx.Puff=37 41(Fx.69,{43:{17:29.34(Fx.69.17,{84:1.4})},31:7(h){11 h=h||'50',o=0,s=3.20.84;if(h=='91'||(h=='50'&&3.5.35())){11 i=3.12(3.18(1));3.32(7(){i.46=1;3.5.88().15(i)})}33{3.5.15('21: 35').87();11 w=3.5.51;11 i=3.12(3.18(1));3.32(7(){3.5.15(i)});3.5.15(29.34(3.12(3.18(s)),{46:0,21:'35'}));s=w/3.5.51;o=1}9 3.44(s,{46:o})}});Fx.92=37 41(Fx.77,{72:$w('39 28 57 46 13 border95 padding margin color 65 background95 margin98 margin97 margin94 margin93 38 22 62 60'),31:7(b,r){11 c=3._dummy().add41(b||'').7341(r||'');11 s=3.61(c,3.72);c.73();if(Browser.Opera&&!/^\\d+[a-z]+/.test(s.13))74(s.13);if(b)3.32(3.5.add41.70(3.5,b));if(r)3.32(3.5.7341.70(3.5,r));9 3.44(s)}});68.addMethods({85:7(p,o){9 3.fx('85',[p,o||{}])},71:7(){9 3.fx('71',36)},83:7(s,o){9 3.fx('83',[s,o||{}])},89:7(){9 3.fx('89',36)},82:7(){9 3.fx('82',36)},morphTo41:7(){11 a=$A(36);if(a[0]===null)a[0]='';9 3.fx('92',a)}});",",,,this,,element,,function,,return,,var,getEndPosition,borderWidth,position,setStyle,,Options,_getZoomedStyle,case,options,visibility,left,Move,break,duration,relative,direction,height,Object,defined,prepare,onFinish,else,merge,visible,arguments,new,top,width,getParentPosition,Class,absolute,extend,$super,_getEndPosition,opacity,_getBasicStyle,Dummy,_getProportion,toggle,offsetWidth,sizes,toFloat,removeClass,dimensions,PROPERTIES,lineHeight,hidden,switch,bottom,_getStyle,right,addClass,insertTo,fontSize,style,default,Element,Zoom,bind,bounce,STYLES,remove,delete,center,toInt,Morph,value,div,,start,puff,zoom,size,move,from,show,hide,run,for,out,CSS,Bottom,Right,Color,Style,Left,Top".split(",")));
|