nitro 0.29.0 → 0.30.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/CHANGELOG +410 -0
- data/ProjectInfo +36 -44
- data/README +5 -5
- data/doc/AUTHORS +6 -0
- data/doc/RELEASES +159 -2
- data/lib/glue/sweeper.rb +2 -2
- data/lib/glue/webfile.rb +14 -1
- data/lib/nitro.rb +6 -9
- data/lib/nitro/adapter/mongrel.rb +36 -43
- data/lib/nitro/adapter/scgi.rb +1 -1
- data/lib/nitro/adapter/webrick.rb +96 -24
- data/lib/nitro/caching/actions.rb +2 -1
- data/lib/nitro/caching/fragments.rb +1 -8
- data/lib/nitro/caching/output.rb +14 -4
- data/lib/nitro/cgi.rb +19 -21
- data/lib/nitro/cgi/cookie.rb +5 -1
- data/lib/nitro/cgi/request.rb +20 -4
- data/lib/nitro/compiler.rb +74 -28
- data/lib/nitro/compiler/cleanup.rb +1 -1
- data/lib/nitro/compiler/elements.rb +1 -2
- data/lib/nitro/compiler/localization.rb +1 -1
- data/lib/nitro/compiler/markup.rb +1 -1
- data/lib/nitro/compiler/script.rb +52 -44
- data/lib/nitro/compiler/squeeze.rb +4 -3
- data/lib/nitro/compiler/xslt.rb +7 -6
- data/lib/nitro/context.rb +39 -20
- data/lib/nitro/controller.rb +24 -5
- data/lib/nitro/dispatcher.rb +13 -5
- data/lib/nitro/global.rb +63 -0
- data/lib/nitro/helper/feed.rb +432 -0
- data/lib/nitro/helper/form.rb +11 -3
- data/lib/nitro/helper/form/builder.rb +140 -0
- data/lib/nitro/helper/form/controls.rb +2 -1
- data/lib/nitro/helper/javascript.rb +6 -0
- data/lib/nitro/helper/javascript/morphing.rb +13 -6
- data/lib/nitro/helper/xhtml.rb +42 -6
- data/lib/nitro/helper/xml.rb +3 -0
- data/lib/nitro/part.rb +2 -2
- data/lib/nitro/render.rb +7 -2
- data/lib/nitro/router.rb +57 -16
- data/lib/nitro/scaffolding.rb +29 -20
- data/lib/nitro/server.rb +4 -10
- data/lib/nitro/server/drb.rb +1 -1
- data/lib/nitro/server/runner.rb +10 -0
- data/lib/nitro/session.rb +31 -12
- data/lib/nitro/session/drb.rb +13 -1
- data/lib/nitro/session/file.rb +1 -1
- data/lib/nitro/session/memcached.rb +1 -1
- data/lib/nitro/session/memory.rb +1 -1
- data/lib/nitro/session/og.rb +1 -1
- data/lib/nitro/test/testcase.rb +3 -0
- data/proto/public/error.xhtml +5 -5
- data/proto/public/js/controls.js +2 -2
- data/proto/public/js/dragdrop.js +320 -79
- data/proto/public/js/effects.js +200 -152
- data/proto/public/js/prototype.js +284 -63
- data/proto/public/js/scriptaculous.js +7 -5
- data/proto/public/js/unittest.js +11 -0
- data/proto/public/scaffold/advanced_search.xhtml +30 -0
- data/proto/public/scaffold/list.xhtml +8 -1
- data/proto/public/scaffold/search.xhtml +2 -1
- data/proto/script/scgi_service +1 -1
- data/src/part/admin/controller.rb +1 -1
- data/src/part/admin/skin.rb +1 -1
- data/test/nitro/CONFIG.rb +3 -0
- data/test/nitro/adapter/tc_webrick.rb +1 -1
- data/test/nitro/cgi/tc_cookie.rb +1 -1
- data/test/nitro/cgi/tc_request.rb +5 -5
- data/test/nitro/compiler/tc_client_morpher.rb +47 -0
- data/test/nitro/compiler/tc_compiler.rb +2 -0
- data/test/nitro/helper/tc_feed.rb +138 -0
- data/test/nitro/helper/tc_pager.rb +1 -1
- data/test/nitro/helper/tc_rss.rb +1 -1
- data/test/nitro/helper/tc_table.rb +1 -1
- data/test/nitro/helper/tc_xhtml.rb +1 -1
- data/test/nitro/tc_caching.rb +1 -1
- data/test/nitro/tc_cgi.rb +1 -1
- data/test/nitro/tc_context.rb +1 -1
- data/test/nitro/tc_controller.rb +31 -3
- data/test/nitro/tc_controller_aspect.rb +1 -1
- data/test/nitro/tc_dispatcher.rb +1 -1
- data/test/nitro/tc_element.rb +1 -1
- data/test/nitro/tc_flash.rb +1 -1
- data/test/nitro/tc_helper.rb +1 -1
- data/test/nitro/tc_render.rb +6 -6
- data/test/nitro/tc_router.rb +8 -4
- data/test/nitro/tc_server.rb +1 -3
- data/test/nitro/tc_session.rb +1 -3
- metadata +107 -104
- data/Rakefile +0 -232
- data/lib/nitro/adapter/acgi.rb +0 -237
- data/proto/public/Makefile.acgi +0 -40
- data/proto/public/acgi.c +0 -138
data/proto/public/js/effects.js
CHANGED
@@ -6,8 +6,6 @@
|
|
6
6
|
//
|
7
7
|
// See scriptaculous.js for full license.
|
8
8
|
|
9
|
-
/* ------------- element ext -------------- */
|
10
|
-
|
11
9
|
// converts rgb() and #xxx to #xxxxxx format,
|
12
10
|
// returns self (or first argument) if not convertable
|
13
11
|
String.prototype.parseColor = function() {
|
@@ -24,6 +22,8 @@ String.prototype.parseColor = function() {
|
|
24
22
|
return(color.length==7 ? color : (arguments[0] || this));
|
25
23
|
}
|
26
24
|
|
25
|
+
/*--------------------------------------------------------------------------*/
|
26
|
+
|
27
27
|
Element.collectTextNodes = function(element) {
|
28
28
|
return $A($(element).childNodes).collect( function(node) {
|
29
29
|
return (node.nodeType==3 ? node.nodeValue :
|
@@ -39,14 +39,10 @@ Element.collectTextNodesIgnoreClass = function(element, className) {
|
|
39
39
|
}).flatten().join('');
|
40
40
|
}
|
41
41
|
|
42
|
-
Element.
|
43
|
-
element = $(element);
|
44
|
-
for(k in style) element.style[k.camelize()] = style[k];
|
45
|
-
}
|
46
|
-
|
47
|
-
Element.setContentZoom = function(element, percent) {
|
42
|
+
Element.setContentZoom = function(element, percent) {
|
43
|
+
element = $(element);
|
48
44
|
Element.setStyle(element, {fontSize: (percent/100) + 'em'});
|
49
|
-
if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
|
45
|
+
if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
|
50
46
|
}
|
51
47
|
|
52
48
|
Element.getOpacity = function(element){
|
@@ -73,18 +69,33 @@ Element.setOpacity = function(element, value){
|
|
73
69
|
Element.setStyle(element,
|
74
70
|
{ filter: Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'') +
|
75
71
|
'alpha(opacity='+value*100+')' });
|
76
|
-
}
|
72
|
+
}
|
77
73
|
}
|
78
74
|
|
79
75
|
Element.getInlineOpacity = function(element){
|
80
76
|
return $(element).style.opacity || '';
|
81
77
|
}
|
82
78
|
|
83
|
-
Element.childrenWithClassName = function(element, className) {
|
84
|
-
|
85
|
-
|
79
|
+
Element.childrenWithClassName = function(element, className, findFirst) {
|
80
|
+
var classNameRegExp = new RegExp("(^|\\s)" + className + "(\\s|$)");
|
81
|
+
var results = $A($(element).getElementsByTagName('*'))[findFirst ? 'detect' : 'select']( function(c) {
|
82
|
+
return (c.className && c.className.match(classNameRegExp));
|
83
|
+
});
|
84
|
+
if(!results) results = [];
|
85
|
+
return results;
|
86
86
|
}
|
87
87
|
|
88
|
+
Element.forceRerendering = function(element) {
|
89
|
+
try {
|
90
|
+
element = $(element);
|
91
|
+
var n = document.createTextNode(' ');
|
92
|
+
element.appendChild(n);
|
93
|
+
element.removeChild(n);
|
94
|
+
} catch(e) { }
|
95
|
+
};
|
96
|
+
|
97
|
+
/*--------------------------------------------------------------------------*/
|
98
|
+
|
88
99
|
Array.prototype.call = function() {
|
89
100
|
var args = arguments;
|
90
101
|
this.each(function(f){ f.apply(this, args) });
|
@@ -139,7 +150,7 @@ var Effect = {
|
|
139
150
|
var options = Object.extend({
|
140
151
|
queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
|
141
152
|
}, arguments[2] || {});
|
142
|
-
Effect[
|
153
|
+
Effect[element.visible() ?
|
143
154
|
Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);
|
144
155
|
}
|
145
156
|
};
|
@@ -343,15 +354,15 @@ Object.extend(Object.extend(Effect.Opacity.prototype, Effect.Base.prototype), {
|
|
343
354
|
this.element = $(element);
|
344
355
|
// make this work on IE on elements without 'layout'
|
345
356
|
if(/MSIE/.test(navigator.userAgent) && (!this.element.hasLayout))
|
346
|
-
|
357
|
+
this.element.setStyle({zoom: 1});
|
347
358
|
var options = Object.extend({
|
348
|
-
from:
|
359
|
+
from: this.element.getOpacity() || 0.0,
|
349
360
|
to: 1.0
|
350
361
|
}, arguments[1] || {});
|
351
362
|
this.start(options);
|
352
363
|
},
|
353
364
|
update: function(position) {
|
354
|
-
|
365
|
+
this.element.setOpacity(position);
|
355
366
|
}
|
356
367
|
});
|
357
368
|
|
@@ -371,9 +382,9 @@ Object.extend(Object.extend(Effect.Move.prototype, Effect.Base.prototype), {
|
|
371
382
|
// relative element that does not have top/left explicitly set.
|
372
383
|
// ==> Always set top and left for position relative elements in your stylesheets
|
373
384
|
// (to 0 if you do not need them)
|
374
|
-
|
375
|
-
this.originalLeft = parseFloat(
|
376
|
-
this.originalTop = parseFloat(
|
385
|
+
this.element.makePositioned();
|
386
|
+
this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
|
387
|
+
this.originalTop = parseFloat(this.element.getStyle('top') || '0');
|
377
388
|
if(this.options.mode == 'absolute') {
|
378
389
|
// absolute movement, so we need to calc deltaX and deltaY
|
379
390
|
this.options.x = this.options.x - this.originalLeft;
|
@@ -381,7 +392,7 @@ Object.extend(Object.extend(Effect.Move.prototype, Effect.Base.prototype), {
|
|
381
392
|
}
|
382
393
|
},
|
383
394
|
update: function(position) {
|
384
|
-
|
395
|
+
this.element.setStyle({
|
385
396
|
left: this.options.x * position + this.originalLeft + 'px',
|
386
397
|
top: this.options.y * position + this.originalTop + 'px'
|
387
398
|
});
|
@@ -411,7 +422,7 @@ Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), {
|
|
411
422
|
},
|
412
423
|
setup: function() {
|
413
424
|
this.restoreAfterFinish = this.options.restoreAfterFinish || false;
|
414
|
-
this.elementPositioning =
|
425
|
+
this.elementPositioning = this.element.getStyle('position');
|
415
426
|
|
416
427
|
this.originalStyle = {};
|
417
428
|
['top','left','width','height','fontSize'].each( function(k) {
|
@@ -421,7 +432,7 @@ Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), {
|
|
421
432
|
this.originalTop = this.element.offsetTop;
|
422
433
|
this.originalLeft = this.element.offsetLeft;
|
423
434
|
|
424
|
-
var fontSize =
|
435
|
+
var fontSize = this.element.getStyle('font-size') || '100%';
|
425
436
|
['em','px','%'].each( function(fontSizeType) {
|
426
437
|
if(fontSize.indexOf(fontSizeType)>0) {
|
427
438
|
this.fontSize = parseFloat(fontSize);
|
@@ -443,11 +454,11 @@ Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), {
|
|
443
454
|
update: function(position) {
|
444
455
|
var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
|
445
456
|
if(this.options.scaleContent && this.fontSize)
|
446
|
-
|
457
|
+
this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
|
447
458
|
this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
|
448
459
|
},
|
449
460
|
finish: function(position) {
|
450
|
-
if (this.restoreAfterFinish)
|
461
|
+
if (this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
|
451
462
|
},
|
452
463
|
setDimensions: function(height, width) {
|
453
464
|
var d = {};
|
@@ -464,7 +475,7 @@ Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), {
|
|
464
475
|
if(this.options.scaleX) d.left = -leftd + 'px';
|
465
476
|
}
|
466
477
|
}
|
467
|
-
|
478
|
+
this.element.setStyle(d);
|
468
479
|
}
|
469
480
|
});
|
470
481
|
|
@@ -477,25 +488,25 @@ Object.extend(Object.extend(Effect.Highlight.prototype, Effect.Base.prototype),
|
|
477
488
|
},
|
478
489
|
setup: function() {
|
479
490
|
// Prevent executing on elements not in the layout flow
|
480
|
-
if(
|
491
|
+
if(this.element.getStyle('display')=='none') { this.cancel(); return; }
|
481
492
|
// Disable background image during the effect
|
482
493
|
this.oldStyle = {
|
483
|
-
backgroundImage:
|
484
|
-
|
494
|
+
backgroundImage: this.element.getStyle('background-image') };
|
495
|
+
this.element.setStyle({backgroundImage: 'none'});
|
485
496
|
if(!this.options.endcolor)
|
486
|
-
this.options.endcolor =
|
497
|
+
this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
|
487
498
|
if(!this.options.restorecolor)
|
488
|
-
this.options.restorecolor =
|
499
|
+
this.options.restorecolor = this.element.getStyle('background-color');
|
489
500
|
// init color calculations
|
490
501
|
this._base = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
|
491
502
|
this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
|
492
503
|
},
|
493
504
|
update: function(position) {
|
494
|
-
|
505
|
+
this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
|
495
506
|
return m+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart()); }.bind(this)) });
|
496
507
|
},
|
497
508
|
finish: function() {
|
498
|
-
|
509
|
+
this.element.setStyle(Object.extend(this.oldStyle, {
|
499
510
|
backgroundColor: this.options.restorecolor
|
500
511
|
}));
|
501
512
|
}
|
@@ -529,75 +540,83 @@ Object.extend(Object.extend(Effect.ScrollTo.prototype, Effect.Base.prototype), {
|
|
529
540
|
/* ------------- combination effects ------------- */
|
530
541
|
|
531
542
|
Effect.Fade = function(element) {
|
532
|
-
|
543
|
+
element = $(element);
|
544
|
+
var oldOpacity = element.getInlineOpacity();
|
533
545
|
var options = Object.extend({
|
534
|
-
from:
|
546
|
+
from: element.getOpacity() || 1.0,
|
535
547
|
to: 0.0,
|
536
|
-
afterFinishInternal: function(effect) {
|
548
|
+
afterFinishInternal: function(effect) {
|
537
549
|
if(effect.options.to!=0) return;
|
538
|
-
|
539
|
-
|
540
|
-
}, arguments[1] || {});
|
550
|
+
effect.element.hide();
|
551
|
+
effect.element.setStyle({opacity: oldOpacity});
|
552
|
+
}}, arguments[1] || {});
|
541
553
|
return new Effect.Opacity(element,options);
|
542
554
|
}
|
543
555
|
|
544
556
|
Effect.Appear = function(element) {
|
557
|
+
element = $(element);
|
545
558
|
var options = Object.extend({
|
546
|
-
from: (
|
559
|
+
from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0),
|
547
560
|
to: 1.0,
|
548
|
-
|
549
|
-
|
550
|
-
|
551
|
-
},
|
561
|
+
// force Safari to render floated elements properly
|
562
|
+
afterFinishInternal: function(effect) {
|
563
|
+
effect.element.forceRerendering();
|
564
|
+
},
|
565
|
+
beforeSetup: function(effect) {
|
566
|
+
effect.element.setOpacity(effect.options.from);
|
567
|
+
effect.element.show();
|
568
|
+
}}, arguments[1] || {});
|
552
569
|
return new Effect.Opacity(element,options);
|
553
570
|
}
|
554
571
|
|
555
572
|
Effect.Puff = function(element) {
|
556
573
|
element = $(element);
|
557
|
-
var oldStyle = { opacity:
|
574
|
+
var oldStyle = { opacity: element.getInlineOpacity(), position: element.getStyle('position') };
|
558
575
|
return new Effect.Parallel(
|
559
576
|
[ new Effect.Scale(element, 200,
|
560
577
|
{ sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }),
|
561
578
|
new Effect.Opacity(element, { sync: true, to: 0.0 } ) ],
|
562
579
|
Object.extend({ duration: 1.0,
|
563
|
-
beforeSetupInternal: function(effect) {
|
564
|
-
|
565
|
-
afterFinishInternal: function(effect) {
|
566
|
-
|
567
|
-
|
580
|
+
beforeSetupInternal: function(effect) {
|
581
|
+
effect.effects[0].element.setStyle({position: 'absolute'}); },
|
582
|
+
afterFinishInternal: function(effect) {
|
583
|
+
effect.effects[0].element.hide();
|
584
|
+
effect.effects[0].element.setStyle(oldStyle); }
|
568
585
|
}, arguments[1] || {})
|
569
586
|
);
|
570
587
|
}
|
571
588
|
|
572
589
|
Effect.BlindUp = function(element) {
|
573
590
|
element = $(element);
|
574
|
-
|
591
|
+
element.makeClipping();
|
575
592
|
return new Effect.Scale(element, 0,
|
576
593
|
Object.extend({ scaleContent: false,
|
577
594
|
scaleX: false,
|
578
595
|
restoreAfterFinish: true,
|
579
|
-
afterFinishInternal: function(effect) {
|
580
|
-
|
596
|
+
afterFinishInternal: function(effect) {
|
597
|
+
effect.element.hide();
|
598
|
+
effect.element.undoClipping();
|
599
|
+
}
|
581
600
|
}, arguments[1] || {})
|
582
601
|
);
|
583
602
|
}
|
584
603
|
|
585
604
|
Effect.BlindDown = function(element) {
|
586
605
|
element = $(element);
|
587
|
-
var elementDimensions =
|
606
|
+
var elementDimensions = element.getDimensions();
|
588
607
|
return new Effect.Scale(element, 100,
|
589
608
|
Object.extend({ scaleContent: false,
|
590
609
|
scaleX: false,
|
591
610
|
scaleFrom: 0,
|
592
611
|
scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
|
593
612
|
restoreAfterFinish: true,
|
594
|
-
afterSetup: function(effect) {
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
}
|
613
|
+
afterSetup: function(effect) {
|
614
|
+
effect.element.makeClipping();
|
615
|
+
effect.element.setStyle({height: '0px'});
|
616
|
+
effect.element.show();
|
617
|
+
},
|
599
618
|
afterFinishInternal: function(effect) {
|
600
|
-
|
619
|
+
effect.element.undoClipping();
|
601
620
|
}
|
602
621
|
}, arguments[1] || {})
|
603
622
|
);
|
@@ -605,7 +624,7 @@ Effect.BlindDown = function(element) {
|
|
605
624
|
|
606
625
|
Effect.SwitchOff = function(element) {
|
607
626
|
element = $(element);
|
608
|
-
var oldOpacity =
|
627
|
+
var oldOpacity = element.getInlineOpacity();
|
609
628
|
return new Effect.Appear(element, {
|
610
629
|
duration: 0.4,
|
611
630
|
from: 0,
|
@@ -614,13 +633,16 @@ Effect.SwitchOff = function(element) {
|
|
614
633
|
new Effect.Scale(effect.element, 1, {
|
615
634
|
duration: 0.3, scaleFromCenter: true,
|
616
635
|
scaleX: false, scaleContent: false, restoreAfterFinish: true,
|
617
|
-
beforeSetup: function(effect) {
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
636
|
+
beforeSetup: function(effect) {
|
637
|
+
effect.element.makePositioned();
|
638
|
+
effect.element.makeClipping();
|
639
|
+
},
|
640
|
+
afterFinishInternal: function(effect) {
|
641
|
+
effect.element.hide();
|
642
|
+
effect.element.undoClipping();
|
643
|
+
effect.element.undoPositioned();
|
644
|
+
effect.element.setStyle({opacity: oldOpacity});
|
645
|
+
}
|
624
646
|
})
|
625
647
|
}
|
626
648
|
});
|
@@ -629,27 +651,30 @@ Effect.SwitchOff = function(element) {
|
|
629
651
|
Effect.DropOut = function(element) {
|
630
652
|
element = $(element);
|
631
653
|
var oldStyle = {
|
632
|
-
top:
|
633
|
-
left:
|
634
|
-
opacity:
|
654
|
+
top: element.getStyle('top'),
|
655
|
+
left: element.getStyle('left'),
|
656
|
+
opacity: element.getInlineOpacity() };
|
635
657
|
return new Effect.Parallel(
|
636
658
|
[ new Effect.Move(element, {x: 0, y: 100, sync: true }),
|
637
659
|
new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
|
638
660
|
Object.extend(
|
639
661
|
{ duration: 0.5,
|
640
|
-
beforeSetup: function(effect) {
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
662
|
+
beforeSetup: function(effect) {
|
663
|
+
effect.effects[0].element.makePositioned();
|
664
|
+
},
|
665
|
+
afterFinishInternal: function(effect) {
|
666
|
+
effect.effects[0].element.hide();
|
667
|
+
effect.effects[0].element.undoPositioned();
|
668
|
+
effect.effects[0].element.setStyle(oldStyle);
|
669
|
+
}
|
645
670
|
}, arguments[1] || {}));
|
646
671
|
}
|
647
672
|
|
648
673
|
Effect.Shake = function(element) {
|
649
674
|
element = $(element);
|
650
675
|
var oldStyle = {
|
651
|
-
top:
|
652
|
-
left:
|
676
|
+
top: element.getStyle('top'),
|
677
|
+
left: element.getStyle('left') };
|
653
678
|
return new Effect.Move(element,
|
654
679
|
{ x: 20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
|
655
680
|
new Effect.Move(effect.element,
|
@@ -661,73 +686,75 @@ Effect.Shake = function(element) {
|
|
661
686
|
new Effect.Move(effect.element,
|
662
687
|
{ x: 40, y: 0, duration: 0.1, afterFinishInternal: function(effect) {
|
663
688
|
new Effect.Move(effect.element,
|
664
|
-
{ x: -20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
|
665
|
-
|
666
|
-
|
667
|
-
}}
|
689
|
+
{ x: -20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
|
690
|
+
effect.element.undoPositioned();
|
691
|
+
effect.element.setStyle(oldStyle);
|
692
|
+
}}) }}) }}) }}) }}) }});
|
668
693
|
}
|
669
694
|
|
670
695
|
Effect.SlideDown = function(element) {
|
671
696
|
element = $(element);
|
672
|
-
|
697
|
+
element.cleanWhitespace();
|
673
698
|
// SlideDown need to have the content of the element wrapped in a container element with fixed height!
|
674
|
-
var oldInnerBottom =
|
675
|
-
var elementDimensions =
|
699
|
+
var oldInnerBottom = $(element.firstChild).getStyle('bottom');
|
700
|
+
var elementDimensions = element.getDimensions();
|
676
701
|
return new Effect.Scale(element, 100, Object.extend({
|
677
702
|
scaleContent: false,
|
678
703
|
scaleX: false,
|
679
|
-
scaleFrom: 0,
|
704
|
+
scaleFrom: window.opera ? 0 : 1,
|
680
705
|
scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
|
681
706
|
restoreAfterFinish: true,
|
682
|
-
afterSetup: function(effect) {
|
683
|
-
|
684
|
-
|
685
|
-
if(window.opera)
|
686
|
-
|
687
|
-
|
688
|
-
show(
|
689
|
-
afterUpdateInternal: function(effect) {
|
690
|
-
|
691
|
-
(effect.dims[0] - effect.element.clientHeight) + 'px' });
|
692
|
-
|
693
|
-
|
707
|
+
afterSetup: function(effect) {
|
708
|
+
effect.element.makePositioned();
|
709
|
+
effect.element.firstChild.makePositioned();
|
710
|
+
if(window.opera) effect.element.setStyle({top: ''});
|
711
|
+
effect.element.makeClipping();
|
712
|
+
effect.element.setStyle({height: '0px'});
|
713
|
+
effect.element.show(); },
|
714
|
+
afterUpdateInternal: function(effect) {
|
715
|
+
effect.element.firstChild.setStyle({bottom:
|
716
|
+
(effect.dims[0] - effect.element.clientHeight) + 'px' });
|
717
|
+
},
|
718
|
+
afterFinishInternal: function(effect) {
|
719
|
+
effect.element.undoClipping();
|
694
720
|
// IE will crash if child is undoPositioned first
|
695
721
|
if(/MSIE/.test(navigator.userAgent)){
|
696
|
-
|
697
|
-
|
722
|
+
effect.element.undoPositioned();
|
723
|
+
effect.element.firstChild.undoPositioned();
|
698
724
|
}else{
|
699
|
-
|
700
|
-
|
725
|
+
effect.element.firstChild.undoPositioned();
|
726
|
+
effect.element.undoPositioned();
|
701
727
|
}
|
702
|
-
|
728
|
+
effect.element.firstChild.setStyle({bottom: oldInnerBottom}); }
|
703
729
|
}, arguments[1] || {})
|
704
730
|
);
|
705
731
|
}
|
706
732
|
|
707
733
|
Effect.SlideUp = function(element) {
|
708
734
|
element = $(element);
|
709
|
-
|
710
|
-
var oldInnerBottom =
|
711
|
-
return new Effect.Scale(element, 0,
|
735
|
+
element.cleanWhitespace();
|
736
|
+
var oldInnerBottom = $(element.firstChild).getStyle('bottom');
|
737
|
+
return new Effect.Scale(element, window.opera ? 0 : 1,
|
712
738
|
Object.extend({ scaleContent: false,
|
713
739
|
scaleX: false,
|
714
740
|
scaleMode: 'box',
|
715
741
|
scaleFrom: 100,
|
716
742
|
restoreAfterFinish: true,
|
717
|
-
beforeStartInternal: function(effect) {
|
718
|
-
|
719
|
-
|
720
|
-
if(window.opera)
|
721
|
-
|
722
|
-
show(
|
723
|
-
afterUpdateInternal: function(effect) {
|
724
|
-
|
725
|
-
(effect.dims[0] - effect.element.clientHeight) + 'px' }); }
|
726
|
-
afterFinishInternal: function(effect) {
|
727
|
-
|
728
|
-
|
729
|
-
|
730
|
-
|
743
|
+
beforeStartInternal: function(effect) {
|
744
|
+
effect.element.makePositioned();
|
745
|
+
effect.element.firstChild.makePositioned();
|
746
|
+
if(window.opera) effect.element.setStyle({top: ''});
|
747
|
+
effect.element.makeClipping();
|
748
|
+
effect.element.show(); },
|
749
|
+
afterUpdateInternal: function(effect) {
|
750
|
+
effect.element.firstChild.setStyle({bottom:
|
751
|
+
(effect.dims[0] - effect.element.clientHeight) + 'px' }); },
|
752
|
+
afterFinishInternal: function(effect) {
|
753
|
+
effect.element.hide();
|
754
|
+
effect.element.undoClipping();
|
755
|
+
effect.element.firstChild.undoPositioned();
|
756
|
+
effect.element.undoPositioned();
|
757
|
+
effect.element.setStyle({bottom: oldInnerBottom}); }
|
731
758
|
}, arguments[1] || {})
|
732
759
|
);
|
733
760
|
}
|
@@ -736,11 +763,11 @@ Effect.SlideUp = function(element) {
|
|
736
763
|
Effect.Squish = function(element) {
|
737
764
|
return new Effect.Scale(element, window.opera ? 1 : 0,
|
738
765
|
{ restoreAfterFinish: true,
|
739
|
-
beforeSetup: function(effect) {
|
740
|
-
makeClipping(effect.element); }
|
741
|
-
afterFinishInternal: function(effect) {
|
742
|
-
hide(effect.element);
|
743
|
-
undoClipping(effect.element); }
|
766
|
+
beforeSetup: function(effect) {
|
767
|
+
effect.element.makeClipping(effect.element); },
|
768
|
+
afterFinishInternal: function(effect) {
|
769
|
+
effect.element.hide(effect.element);
|
770
|
+
effect.element.undoClipping(effect.element); }
|
744
771
|
});
|
745
772
|
}
|
746
773
|
|
@@ -757,9 +784,9 @@ Effect.Grow = function(element) {
|
|
757
784
|
left: element.style.left,
|
758
785
|
height: element.style.height,
|
759
786
|
width: element.style.width,
|
760
|
-
opacity:
|
787
|
+
opacity: element.getInlineOpacity() };
|
761
788
|
|
762
|
-
var dims =
|
789
|
+
var dims = element.getDimensions();
|
763
790
|
var initialMoveX, initialMoveY;
|
764
791
|
var moveX, moveY;
|
765
792
|
|
@@ -795,11 +822,11 @@ Effect.Grow = function(element) {
|
|
795
822
|
x: initialMoveX,
|
796
823
|
y: initialMoveY,
|
797
824
|
duration: 0.01,
|
798
|
-
beforeSetup: function(effect) {
|
799
|
-
|
800
|
-
|
801
|
-
|
802
|
-
}
|
825
|
+
beforeSetup: function(effect) {
|
826
|
+
effect.element.hide();
|
827
|
+
effect.element.makeClipping();
|
828
|
+
effect.element.makePositioned();
|
829
|
+
},
|
803
830
|
afterFinishInternal: function(effect) {
|
804
831
|
new Effect.Parallel(
|
805
832
|
[ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
|
@@ -808,12 +835,15 @@ Effect.Grow = function(element) {
|
|
808
835
|
scaleMode: { originalHeight: dims.height, originalWidth: dims.width },
|
809
836
|
sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
|
810
837
|
], Object.extend({
|
811
|
-
beforeSetup: function(effect) {
|
812
|
-
|
813
|
-
|
814
|
-
|
815
|
-
|
816
|
-
|
838
|
+
beforeSetup: function(effect) {
|
839
|
+
effect.effects[0].element.setStyle({height: '0px'});
|
840
|
+
effect.effects[0].element.show();
|
841
|
+
},
|
842
|
+
afterFinishInternal: function(effect) {
|
843
|
+
effect.effects[0].element.undoClipping();
|
844
|
+
effect.effects[0].element.undoPositioned();
|
845
|
+
effect.effects[0].element.setStyle(oldStyle);
|
846
|
+
}
|
817
847
|
}, options)
|
818
848
|
)
|
819
849
|
}
|
@@ -833,9 +863,9 @@ Effect.Shrink = function(element) {
|
|
833
863
|
left: element.style.left,
|
834
864
|
height: element.style.height,
|
835
865
|
width: element.style.width,
|
836
|
-
opacity:
|
866
|
+
opacity: element.getInlineOpacity() };
|
837
867
|
|
838
|
-
var dims =
|
868
|
+
var dims = element.getDimensions();
|
839
869
|
var moveX, moveY;
|
840
870
|
|
841
871
|
switch (options.direction) {
|
@@ -865,11 +895,14 @@ Effect.Shrink = function(element) {
|
|
865
895
|
new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
|
866
896
|
new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
|
867
897
|
], Object.extend({
|
868
|
-
beforeStartInternal: function(effect) {
|
869
|
-
|
870
|
-
|
871
|
-
|
872
|
-
|
898
|
+
beforeStartInternal: function(effect) {
|
899
|
+
effect.effects[0].element.makePositioned();
|
900
|
+
effect.effects[0].element.makeClipping(); },
|
901
|
+
afterFinishInternal: function(effect) {
|
902
|
+
effect.effects[0].element.hide();
|
903
|
+
effect.effects[0].element.undoClipping();
|
904
|
+
effect.effects[0].element.undoPositioned();
|
905
|
+
effect.effects[0].element.setStyle(oldStyle); }
|
873
906
|
}, options)
|
874
907
|
);
|
875
908
|
}
|
@@ -877,13 +910,13 @@ Effect.Shrink = function(element) {
|
|
877
910
|
Effect.Pulsate = function(element) {
|
878
911
|
element = $(element);
|
879
912
|
var options = arguments[1] || {};
|
880
|
-
var oldOpacity =
|
913
|
+
var oldOpacity = element.getInlineOpacity();
|
881
914
|
var transition = options.transition || Effect.Transitions.sinoidal;
|
882
915
|
var reverser = function(pos){ return transition(1-Effect.Transitions.pulse(pos)) };
|
883
916
|
reverser.bind(transition);
|
884
917
|
return new Effect.Opacity(element,
|
885
918
|
Object.extend(Object.extend({ duration: 3.0, from: 0,
|
886
|
-
afterFinishInternal: function(effect) {
|
919
|
+
afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
|
887
920
|
}, options), {transition: reverser}));
|
888
921
|
}
|
889
922
|
|
@@ -902,9 +935,24 @@ Effect.Fold = function(element) {
|
|
902
935
|
new Effect.Scale(element, 1, {
|
903
936
|
scaleContent: false,
|
904
937
|
scaleY: false,
|
905
|
-
afterFinishInternal: function(effect) {
|
906
|
-
|
907
|
-
|
908
|
-
|
938
|
+
afterFinishInternal: function(effect) {
|
939
|
+
effect.element.hide();
|
940
|
+
effect.element.undoClipping();
|
941
|
+
effect.element.setStyle(oldStyle);
|
942
|
+
} });
|
909
943
|
}}, arguments[1] || {}));
|
910
|
-
}
|
944
|
+
};
|
945
|
+
|
946
|
+
['setOpacity','getOpacity','getInlineOpacity','forceRerendering','setContentZoom',
|
947
|
+
'collectTextNodes','collectTextNodesIgnoreClass','childrenWithClassName'].each(
|
948
|
+
function(f) { Element.Methods[f] = Element[f]; }
|
949
|
+
);
|
950
|
+
|
951
|
+
Element.Methods.visualEffect = function(element, effect, options) {
|
952
|
+
s = effect.gsub(/_/, '-').camelize();
|
953
|
+
effect_class = s.charAt(0).toUpperCase() + s.substring(1);
|
954
|
+
new Effect[effect_class](element, options);
|
955
|
+
return $(element);
|
956
|
+
};
|
957
|
+
|
958
|
+
Element.addMethods();
|