]> www.average.org Git - mkgallery.git/blob - include/gallery.js
start "new" slideshow functionality
[mkgallery.git] / include / gallery.js
1 /*
2         This is a part of mkgallery.pl suite
3         http://www.average.org/mkgallery/
4
5         Uses mootools (1.2) http://www.mootools.net/
6         Uses slideshow http://www.phatfusion.net/slideshow/
7 */
8
9 /*
10         Slideshow
11 */
12
13 var showWindow = new Class({
14
15         getOptions: function(){
16                 return {
17                         embed: [],
18                         zIndex: 2,
19                         container: document.body,
20                         onClick: $empty,
21                 }
22         },
23
24         initialize: function(name,options){
25                 this.setOptions(this.getOptions(), options)
26
27                 this.options.container = $(this.options.container)
28
29                 this.container = new Element('div').addClass(name).
30                 setProperties({
31                         id: name,
32                         name: name,
33                 }).setStyles({
34                         position: 'absolute',
35                         left: '0px',
36                         top: '0px',
37                         width: '100%',
38                         zIndex: this.options.zIndex,
39                         overflow: 'hidden',
40                         display: 'none'
41                 }).addEvent('click', function(){
42                         this.options.onClick()
43                 }.bind(this)).injectInside(this.options.container);
44
45                 this.embedded = []
46                 this.options.embed.each(function(el){
47                         var sub = new Element('div')
48                         sub.addClass(el).setProperties({
49                                 id: el,
50                                 name: el,
51                         }).injectInside(this.container)
52                         this.embedded.push(sub)
53                 },this)
54
55                 this.position()
56
57                 window.addEvent('resize', this.position.bind(this))
58                 window.addEvent('scroll', this.position.bind(this))
59         },
60
61         position: function(){
62                 if(this.options.container == document.body){
63                         this.h = window.getHeight()
64                         this.s = window.getScrollTop()
65                 }else{
66                         var myCoords = this.options.container.getCoordinates()
67                         this.h = myCoords.height
68                         this.s = myCoords.top
69                 }
70                 this.container.setStyles({
71                         top: this.s+'px',
72                         height: this.h+'px'
73                 })
74         },
75
76         show: function(){
77                 this.container.setStyle('display', 'block')
78         },
79
80         hide: function(){
81                 this.container.setStyle('display', 'none')
82         }
83 })
84 showWindow.implement(new Options)
85
86 var showControls = new Class({
87
88         getOptions: function(){
89                 return {
90                         next: $empty,
91                         prev: $empty,
92                         stop: $empty,
93                         play: $empty,
94                         exit: $empty,
95                 }
96         },
97
98         initialize: function(name,options){
99                 this.setOptions(this.getOptions(), options)
100
101                 this.container = $(name)
102
103                 var buttons = ['prev','stop','play','next','exit','comm']
104                 buttons.each(function(el){
105                         var sub = new Element('div')
106                         if (this.options[el]) {
107                                 sub.addEvent('click', function() {
108                                         this.options[el]()
109                                 }.bind(this))
110                         }
111                         sub.addClass('controlButton').setProperties({
112                                 id: el,
113                                 name: el,
114                         }).injectInside(this.container)
115                 },this)
116         },
117
118 })
119 showControls.implement(new Options)
120
121 /* Make overlay window and start slideshow */
122 function showImage(id,doplay) {
123  var i=rimgs[id]
124  /* alert('show id='+id+' index='+i+' doplay='+doplay) */
125  showwin.show()
126  show.play(i)
127  if (!doplay) {
128   show.stop()
129  }
130  return false
131 }
132
133 /* Stop slideshow and return to index page */
134 function showStop() {
135  show.quit()
136  showwin.hide()
137  /*
138  var img = show.newImage.getElement('img');
139  if(img) {
140   alert('remove element: '+img.get('tag')+'.'+img.get('class')+
141    '#'+img.get('id')+' src='+img.get('src'))
142   img.dispose()
143  }
144
145  img = show.oldImage.getElement('img');
146  if(img) {
147   alert('remove element: '+img.get('tag')+'.'+img.get('class')+
148    '#'+img.get('id')+' src='+img.get('src'))
149   img.dispose()
150  }
151
152  show.imagesHolder.getElements('img').each(function(el){
153   alert('remove element: '+el.get('tag')+'.'+el.get('class')+'#'+el.get('id')+
154    ' src='+el.get('src'))
155   el.dispose()
156  })
157  */
158  return false
159 }
160
161 /* List of lists of img variations. Each image variation is a three-element  */
162 /* array: [width, height, url]. Index of the outer array is the global ID.   */
163 var vimgs=[]
164 /*
165  * [
166  *  [
167  *   [width, height, url]
168  *   ...
169  *  ]
170  *  ...
171  * ]
172 */
173 /* resolve string ID to index */
174 var rimgs=[]
175
176 /* Initialize everything, to be called on domready */
177 function init_gallery() {
178  $$('.conceal').each(function(el){
179   el.setStyle('display', 'none')
180  })
181  $$('a.infoBox').each(function(el){
182   var url=el.get('href')
183   el.set('href',url+'?conceal')
184  })
185  $$('a.showStart').each(function(el){
186   el.addEvent('click', showImage.bind(el,[el.get('id'),1]))
187  })
188  $$('a.showImage').each(function(el){
189   el.addEvent('click', showImage.bind(el,[el.get('id'),0]))
190  })
191  $$('div.varimages').each(function(el,i){
192   rimgs[el.id] = i
193   vimgs[i] = []
194   el.getElements('a').each(function(ael,j){
195    dim = /(\d+)[^\d](\d+)/.exec(ael.text)
196    w = dim[1]
197    h = dim[2]
198    vimgs[i][j]=[w,h,ael.href,el.id,el.title]
199   })
200  })
201    /* debugging output
202  var msg='loaded '+vimgs.length+' image descriptions:'
203  vimgs.each(function(vimg,i){
204   msg+='\nid='+i
205   vimg.each(function(vimg,i){
206    msg+='\n     w='+vimg[0]+' h='+vimg[1]+' url='+vimg[2]
207   })
208  })
209  alert(msg)
210    /* end debugging output */
211
212  var ovlparams = {}
213  ovl = new overlay(ovlparams)
214
215  var iboxparams = {
216   overlay: ovl,
217   showNumbers: false,
218   showControls: true,
219   openFromLink: false,
220   movieWidth: 640,
221   movieHeight: 480,
222   descClassName: 'infoBoxDesc',
223  }
224  ibox = new multiBox('infoBox', iboxparams)
225
226  var winparms = {
227   /* onClick: showStop,  /* temporarily */
228   embed: ['slideshowControls'],
229  }
230  showwin = new showWindow('slideshowContainer',winparms)
231
232  var showparms = {
233   wait: 3000,
234   effect: 'fade',
235   duration: 1000,
236   loop: false, 
237   thumbnails: false,
238   onClick: function(i){alert(i)},
239   comment: 'comm',
240  }
241  show = new slideShow('slideshowContainer',vimgs,showparms)
242
243  var ctlparams = {
244   next: function(){show.next()},
245   prev: function(){show.previous()},
246   stop: function(){show.stop()},
247   play: function(){show.play()},
248   exit: function(){showStop()},
249  }
250  ctl = new showControls('slideshowControls',ctlparams)
251
252  parsedurl = parseUrl(document.URL)
253  /* alert('Anchor: '+parsedurl['anchor']+'\nURL: '+document.URL) */
254  if ($chk(parsedurl['anchor'])){
255   showImage(parsedurl['anchor'],0)
256  }
257 }
258
259 /* Initialization */
260 window.addEvent('domready',init_gallery)