a5f2abd5ddea8a5ac0e09e70f800416f76a767b3
[mkgallery.git] / include / show.js
1 /*
2         $Id$
3
4         This is a part of mkgallery.pl suite
5         http://www.average.org/mkgallery/
6
7         Uses mootools (1.2) http://www.mootools.net/
8         Inspired by slideshow http://www.phatfusion.net/slideshow/
9 */
10
11 /*
12         Slideshow
13
14   - On show image: find this and next urls; put in place
15     those that are already here; free unneeded; initiate download of
16     the rest; if needed image is ready then initiate "transitioning", else
17     initiate "loading".
18   - On load complete: if this is the target image, initiate "transitioning".
19   - On "loading": show "loading" image
20   - On "transitioning": hide "loading" image; initiate FX animation to the
21     needed image.
22   - On animation complete: blank previous image; if "playing" then schedule
23     autoswitch to next image in the future.
24   - On autoswitch to next image: if "playing" then switch to next image.
25   - On switch to next image: if next exists, show next image, else show
26     "last image" message.
27   - On switch to prev image: if prev exists, show prev image, else show
28     "first image" message.
29   - On "play": make "playing"; switch to next image.
30   - On "stop": if "playing" cancel autoswitch; break "playing".
31   - On "start show": set up things; set "playing" state; show needed image.
32   - On "stop show": cancel any schedules, hide things.
33   - On resize: recalculate existing image size and position; determine
34     what image is needed; if it is not the one on display then request
35     "show image" for the new image.
36 */
37
38 var Show = new Class({
39
40         getOptions: function(){
41                 return {
42                         cbStart: function(){ alert('show start undefined'); },
43                         cbExit: function(){ alert('show exit undefined'); },
44                 }
45         },
46
47         initialize: function(vimgs, container, controls, options){
48                 this.setOptions(this.getOptions(), options);
49                 this.vimgs = vimgs;
50                 this.container = $(container);
51                 this.controls = controls;
52                 this.controls.registershow(this);
53
54                 window.addEvent('resize', this.resizer.bind(this))
55                 window.addEvent('scroll', this.scroller.bind(this))
56         },
57
58         resizer: function(){
59                 alert('show.resizer called');
60         },
61
62         scroller: function(){
63                 alert('show.scroller called');
64         },
65
66         prev: function(){
67                 this.controls.info(-1,this.vimgs.length,
68                                 '<ref>','prev called');
69         },
70
71         stop: function(){
72                 this.controls.info(0,this.vimgs.length,
73                                 '<ref>','stop called');
74                 this.controls.running(0);
75         },
76
77         play: function(){
78                 this.controls.info(999,this.vimgs.length,
79                                 '<ref>','play called');
80                 this.controls.running(1);
81         },
82
83         next: function(){
84                 this.controls.info(1,this.vimgs.length,
85                                 '<ref>','next called');
86         },
87
88         start: function(id, play){
89                 this.options.cbStart();
90                 /* real job here */
91                 return false; /* tao make it usable from href links */
92         },
93
94         exit: function(){
95                 this.options.cbExit();
96         },
97
98         comm: function(){
99                 alert('show.comm called, do nothing');
100         },
101
102 });
103 Show.implement(new Options);
104 Show.implement(new Events);
105