|
44 | 44 | 'Friday' |
45 | 45 | ]; |
46 | 46 |
|
| 47 | +var divlist = []; |
| 48 | + |
47 | 49 | var lastfrag; |
48 | 50 | var lastheight; |
49 | 51 | var lastwidth; |
50 | 52 |
|
| 53 | +setInterval("animate()",50); |
| 54 | + |
51 | 55 | function draw_calendar() |
52 | 56 | { |
53 | 57 | window.setTimeout("draw_calendar()",1000); |
|
123 | 127 |
|
124 | 128 | for (i = 0; i < num_days; i++) |
125 | 129 | { |
| 130 | + //----------------------------------------------------------------- |
| 131 | + // Draw weekday name |
| 132 | + //----------------------------------------------------------------- |
126 | 133 | var e = document.createElement("div"); |
127 | 134 |
|
128 | 135 | e.style.border="solid"; |
|
154 | 161 | e.appendChild(div); |
155 | 162 | body.appendChild(e); |
156 | 163 |
|
| 164 | + //----------------------------------------------------------------- |
| 165 | + // Draw weekday column border |
157 | 166 | //----------------------------------------------------------------- |
158 | 167 | e = document.createElement("div"); |
159 | 168 |
|
|
180 | 189 | body.appendChild(e); |
181 | 190 | } |
182 | 191 |
|
| 192 | + //----------------------------------------------------------------- |
| 193 | + // Draw a block for each meeting |
| 194 | + //----------------------------------------------------------------- |
| 195 | + var resize_func = function(div,t,l,w,h,to_fit) |
| 196 | + { return function(){resize(div,t,l,w,h,to_fit);} } |
183 | 197 |
|
184 | 198 | for (i = 0; i < items.length; i++) |
185 | 199 | { |
|
194 | 208 | var sess_width = day_width / sessions[items[i].time_id]; |
195 | 209 | var sess_height = ((end_time - start_time) * minute_height) |
196 | 210 | - 2 * (padding + border); |
197 | | - var sess_left = ((items[i].day - start_day) * day_width |
198 | | - + sess_width * used[items[i].time_id]); |
| 211 | + var day_left = ((items[i].day - start_day) * day_width); |
| 212 | + var sess_left = day_left + sess_width * used[items[i].time_id]; |
199 | 213 | var sess_top = ((start_time - day_start) * minute_height) + header_height; |
200 | 214 |
|
201 | 215 | sess_width = sess_width - 2 * (padding + border); |
|
230 | 244 | e.style.padding=padding; |
231 | 245 | e.style.fontFamily="sans-serif"; |
232 | 246 | e.style.fontSize="8pt"; |
| 247 | + e.id=i; |
| 248 | + |
| 249 | + e.onmouseover=resize_func(e,sess_top,day_left, |
| 250 | + day_width-2*(padding+border), |
| 251 | + sess_height, true); |
| 252 | + |
| 253 | + e.onmouseout=resize_func(e,sess_top,sess_left,sess_width,sess_height,false); |
233 | 254 |
|
234 | 255 | var div = document.createElement("div"); |
235 | 256 | div.appendChild(document.createTextNode(items[i].time)); |
|
252 | 273 | div.appendChild(italics); |
253 | 274 |
|
254 | 275 | e.appendChild(div); |
| 276 | + |
255 | 277 | body.appendChild(e); |
256 | 278 |
|
| 279 | + e=undefined; |
| 280 | + |
257 | 281 | } |
258 | 282 | } |
259 | 283 |
|
|
262 | 286 | lastfrag = window.location.hash; |
263 | 287 | } |
264 | 288 |
|
| 289 | +function resize(div,t2,l2,w2,h2,to_fit) |
| 290 | +{ |
| 291 | + // Move the element to the front |
| 292 | + document.body.removeChild(div); |
| 293 | + document.body.appendChild(div); |
| 294 | + |
| 295 | + div.t2 = t2; |
| 296 | + div.l2 = l2; |
| 297 | + div.w2 = w2; |
| 298 | + div.h2 = h2; |
| 299 | + div.to_fit = to_fit; |
| 300 | + div.percent = 0; |
| 301 | + divlist.push(div); |
| 302 | +} |
| 303 | + |
| 304 | +function animate() |
| 305 | +{ |
| 306 | + var i; |
| 307 | + for (i = divlist.length - 1; i >= 0; i--) |
| 308 | + { |
| 309 | + var div = divlist[i]; |
| 310 | + if (div.percent < 100) |
| 311 | + { |
| 312 | + div.percent += 5; |
| 313 | + var t1 = parseFloat(div.style.top.replace("px","")); |
| 314 | + var l1 = parseFloat(div.style.left.replace("px","")); |
| 315 | + var w1 = parseFloat(div.style.width.replace("px","")); |
| 316 | + var h1 = parseFloat(div.style.height.replace("px","")); |
| 317 | + |
| 318 | + div.style.top = wavg(t1,div.t2,div.percent); |
| 319 | + div.style.left = wavg(l1,div.l2,div.percent); |
| 320 | + div.style.width = wavg(w1,div.w2,div.percent); |
| 321 | + div.style.height = wavg(h1,div.h2,div.percent); |
| 322 | + |
| 323 | + if (t1 == div.t2 && l1 == div.l2 && |
| 324 | + w1 == div.w2 && h1 == div.h2) { div.percent = 100; } |
| 325 | + |
| 326 | + } |
| 327 | + else |
| 328 | + { |
| 329 | + if (div.to_fit) |
| 330 | + { |
| 331 | + var tmp = div.style.height; |
| 332 | + div.style.removeProperty("height"); |
| 333 | + if (div.h2 < div.clientHeight) |
| 334 | + { |
| 335 | + div.h2 = div.clientHeight; |
| 336 | + div.percent = 0; |
| 337 | + } |
| 338 | + else |
| 339 | + { |
| 340 | + divlist.remove(i); |
| 341 | + } |
| 342 | + div.style.height = tmp; |
| 343 | + } |
| 344 | + else |
| 345 | + { |
| 346 | + divlist.remove(i); |
| 347 | + } |
| 348 | + } |
| 349 | + } |
| 350 | + |
| 351 | +} |
| 352 | + |
| 353 | +function wavg(x1,x2,percent) |
| 354 | +{ |
| 355 | + var res = x2 * (percent / 100) + x1 * ((100 - percent) / 100); |
| 356 | + return res; |
| 357 | +} |
| 358 | + |
| 359 | +// Array Remove - By John Resig (MIT Licensed) |
| 360 | +Array.prototype.remove = function(from, to) { |
| 361 | + var rest = this.slice((to || from) + 1 || this.length); |
| 362 | + this.length = from < 0 ? this.length + from : from; |
| 363 | + return this.push.apply(this, rest); |
| 364 | +}; |
| 365 | + |
265 | 366 | </script> |
266 | 367 | </head> |
267 | 368 | <body onload="draw_calendar()" onresize="draw_calendar()" id="body"> |
|
0 commit comments