right-rails 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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(",")));
|