Commit f920d2dd2ad3555aff926715ecf932831cfa8385
Committed by
Antonio Terceiro
1 parent
08f5a543
Exists in
master
and in
23 other branches
ActionItem929: changed gallery to picachoose
Showing
15 changed files
with
595 additions
and
848 deletions
Show diff stats
app/controllers/public/content_viewer_controller.rb
app/views/content_viewer/image_gallery.rhtml
| 1 | 1 | <div class="image-gallery"> |
| 2 | - <% if params[:slideshow] %> | |
| 3 | - <p><%= button('', _('View as gallery'), @page.url)%></p> | |
| 4 | - | |
| 5 | - <div id='slideshow' > | |
| 6 | - <% @images.each do |img| %> | |
| 7 | - <%= image_tag(url_for(img.url), :alt => (img.abstract.blank? ? img.name : img.abstract)) if img.image? %> | |
| 8 | - <% end %> | |
| 9 | - </div> | |
| 10 | - | |
| 11 | - <link href="/javascripts/jquery.aslideshow/simple/styles.css" media="screen" rel="stylesheet" type="text/css" /> | |
| 12 | - <script type="text/javascript" src="/javascripts/jquery.aslideshow.js"></script> | |
| 13 | - | |
| 14 | - <script type="text/javascript"> | |
| 15 | - //<![CDATA[ | |
| 16 | - jQuery(document).ready(function(){ | |
| 17 | - jQuery('#slideshow').slideshow({ width: 640, height: 480, playframe: false, play: true, controls : { hide: false }, imgresize:false, effect:false }); | |
| 18 | - }); | |
| 19 | - //]]> | |
| 20 | - </script> | |
| 21 | - | |
| 22 | - <% else %> | |
| 23 | - <p><%= button('', _('View as slideshow'), @page.url.merge(:slideshow => true))%></p> | |
| 2 | + <p><%= button(:slideshow, _('View as slideshow'), @page.url.merge(:slideshow => true))%></p> | |
| 24 | 3 | <ul> |
| 25 | 4 | <% @images.each do |a| %> |
| 26 | 5 | <li class="image-gallery-item"> |
| ... | ... | @@ -29,7 +8,6 @@ |
| 29 | 8 | </li> |
| 30 | 9 | <% end %> |
| 31 | 10 | </ul> |
| 32 | - <% end %> | |
| 33 | 11 | <br style="clear:both" /> |
| 34 | 12 | <%= will_paginate @images, :param_name => 'npage' %> |
| 35 | 13 | </div> | ... | ... |
| ... | ... | @@ -0,0 +1,8 @@ |
| 1 | +<p class='back-button' ><%= button('', _('Back to gallery'), @page.url)%></p> | |
| 2 | +<ul id='slideshow' > | |
| 3 | + <% @images.each do |img| -%> | |
| 4 | + <% if img.image? -%> | |
| 5 | + <li><%= image_tag(url_for(img.url), :title => (img.abstract.blank? ? img.name : img.abstract)) %></li> | |
| 6 | + <% end -%> | |
| 7 | + <% end unless @images.blank? -%> | |
| 8 | +</ul> | ... | ... |
| ... | ... | @@ -0,0 +1,32 @@ |
| 1 | +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" | |
| 2 | + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |
| 3 | +<html> | |
| 4 | + <head> | |
| 5 | + <title><%= | |
| 6 | + (@page ? @page.name + ' - ' : '') + | |
| 7 | + (@profile ? @profile.name + ' - ' : '') + | |
| 8 | + @environment.name + | |
| 9 | + (@category ? "→ #{@category.full_name}" : '') | |
| 10 | + %></title> | |
| 11 | + | |
| 12 | + <%= stylesheet_import "slideshow" %> | |
| 13 | + <%= javascript_include_tag 'jquery-latest', 'sliderjs', 'pikachoose' %> | |
| 14 | + <script language="javascript"> | |
| 15 | + <!-- | |
| 16 | + $(document).ready(function (){ | |
| 17 | + $("#slideshow").PikaChoose(); | |
| 18 | + $("#slideshow").SliderJS({ | |
| 19 | + window_width: 320, | |
| 20 | + window_height: 55, | |
| 21 | + list_width: 832, | |
| 22 | + pikachoose: true, | |
| 23 | + auto_play: false | |
| 24 | + }); | |
| 25 | + }); | |
| 26 | + --> | |
| 27 | + </script> | |
| 28 | + </head> | |
| 29 | + <body> | |
| 30 | + <%= yield %> | |
| 31 | + </body> | |
| 32 | +</html> | ... | ... |
589 Bytes
public/designs/icons/default/style.css
public/javascripts/jquery.aslideshow.js
| ... | ... | @@ -1,645 +0,0 @@ |
| 1 | -/** | |
| 2 | - * jQuery (a)Slideshow plugin | |
| 3 | - * | |
| 4 | - * Copyright (c) 2008 Trent Foley | |
| 5 | - * Dual licensed under the MIT (MIT-LICENSE.txt) | |
| 6 | - * and GPL (GPL-LICENSE.txt) licenses. | |
| 7 | - * | |
| 8 | - * @author Anton Shevchuk AntonShevchuk@gmail.com | |
| 9 | - * @version 0.5.5 | |
| 10 | - */ | |
| 11 | -;(function($) { | |
| 12 | - defaults = { | |
| 13 | - width:320, // width in px | |
| 14 | - height:240, // height in px | |
| 15 | - index:0, // start from frame number N | |
| 16 | - time:3000, // time out beetwen slides | |
| 17 | - title:true, // show title | |
| 18 | - titleshow:false,// always show title | |
| 19 | - panel:true, // show controls panel | |
| 20 | - play:false, // play slideshow | |
| 21 | - loop:true, | |
| 22 | - effect:'fade', // aviable fade, scrollUp/Down/Left/Right, zoom, zoomFade, growX, growY | |
| 23 | - effecttime:1000,// aviable fast,slow,normal and any valid fx speed value | |
| 24 | - filter:true, // remove <br/>, empty <div>, <p> and other stuff | |
| 25 | - nextclick:false, // bind content click next slide | |
| 26 | - playclick:false, // bind content click play/stop | |
| 27 | - playhover:false, // bind content hover play/stop | |
| 28 | - playhoverr:false, // bind content hover stop/play (reverse of playhover) | |
| 29 | - playframe:true, // show frame "Play Now!" | |
| 30 | - fullscreen:false, // in full window size | |
| 31 | - imgresize:false, // resize image to slideshow window | |
| 32 | - imgcenter:true, // set image to center // TODO | |
| 33 | - imgajax:true, // load images from links | |
| 34 | - linkajax:false, // load html from links | |
| 35 | - help:'Plugin homepage: <a href="http://slideshow.hohli.com">(a)Slideshow</a><br/>'+ | |
| 36 | - 'Author homepage: <a href="http://anton.shevchuk.name">Anton Shevchuk</a>', | |
| 37 | - | |
| 38 | - controls :{ // show/hide controls elements | |
| 39 | - 'hide':true, // show controls bar on mouse hover | |
| 40 | - 'first':true, // goto first frame | |
| 41 | - 'prev':true, // goto previouse frame (if it first go to last) | |
| 42 | - 'play':true, // play slideshow | |
| 43 | - 'next':true, // goto next frame (if it last go to first) | |
| 44 | - 'last':true, // goto last frame | |
| 45 | - 'help':true, // show help message | |
| 46 | - 'counter':true // show slide counter | |
| 47 | - } | |
| 48 | - }; | |
| 49 | - /** | |
| 50 | - * Create a new instance of slideshow. | |
| 51 | - * | |
| 52 | - * @classDescription This class creates a new slideshow and manipulate it | |
| 53 | - * | |
| 54 | - * @return {Object} Returns a new slideshow object. | |
| 55 | - * @constructor | |
| 56 | - */ | |
| 57 | - $.fn.slideshow = function(settings) { | |
| 58 | - | |
| 59 | - var _slideshow = this; | |
| 60 | - | |
| 61 | - /* | |
| 62 | - * Construct | |
| 63 | - */ | |
| 64 | - this.each(function(){ | |
| 65 | - | |
| 66 | - var ext = $(this); | |
| 67 | - | |
| 68 | - this.playFlag = false; | |
| 69 | - this.playId = null; | |
| 70 | - this.length = 0; | |
| 71 | - this.inited = new Array(); | |
| 72 | - | |
| 73 | - /** | |
| 74 | - * Build Html | |
| 75 | - * @method | |
| 76 | - */ | |
| 77 | - this.build = function () { | |
| 78 | - var _self = this; | |
| 79 | - | |
| 80 | - ext.wrapInner('<div class="slideshow"><div class="slideshow-content"></div></div>'); | |
| 81 | - ext = ext.find('.slideshow'); | |
| 82 | - | |
| 83 | - // filter content | |
| 84 | - if (this.options.filter) { | |
| 85 | - ext.find('.slideshow-content > br').remove(); | |
| 86 | - ext.find('.slideshow-content > p:empty').remove(); | |
| 87 | - ext.find('.slideshow-content > div:empty').remove(); | |
| 88 | - } | |
| 89 | - | |
| 90 | - | |
| 91 | - // fullscreen | |
| 92 | - if (this.options.fullscreen) { | |
| 93 | - $('body').css({overflow:'hidden', padding:0}); | |
| 94 | - | |
| 95 | - this.options.width = $(window).width(); | |
| 96 | - this.options.height = ($(window).height()>$(document).height())?$(window).height():$(document).height(); | |
| 97 | - | |
| 98 | -// this.options.width = this.options.width; | |
| 99 | -// this.options.height = this.options.height; | |
| 100 | - | |
| 101 | - ext.addClass('slideshow-fullscreen'); | |
| 102 | - } | |
| 103 | - | |
| 104 | - this.length = ext.find('.slideshow-content > *').length; | |
| 105 | - | |
| 106 | - // build title | |
| 107 | - if (this.options.title) { | |
| 108 | - ext.prepend('<div class="slideshow-label-place"><div class="slideshow-label slideshow-opacity"></div></div>'); | |
| 109 | - | |
| 110 | - if (!this.options.titleshow) { | |
| 111 | - ext.find('.slideshow-label-place').hover(function(){ | |
| 112 | - $(this).find('.slideshow-label').fadeIn(); | |
| 113 | - }, function() { | |
| 114 | - $(this).find('.slideshow-label').fadeOut(); | |
| 115 | - }); | |
| 116 | - ext.find('.slideshow-label').hide(); | |
| 117 | - } | |
| 118 | - | |
| 119 | - | |
| 120 | - ext.find('.slideshow-label-place').css('width', this.options.width); | |
| 121 | - } | |
| 122 | - | |
| 123 | - // build panel | |
| 124 | - if (this.options.panel) { | |
| 125 | - ext.append('<div class="slideshow-panel-place"><div class="slideshow-panel slideshow-opacity"></div></div>'); | |
| 126 | - panel = ext.find('.slideshow-panel'); | |
| 127 | - if (this.options.controls.first) | |
| 128 | - panel.append('<a class="first slideshowbutton" href="#first">First</a>'); | |
| 129 | - | |
| 130 | - if (this.options.controls.prev) | |
| 131 | - panel.append('<a class="prev slideshowbutton" href="#prev">Prev</a>'); | |
| 132 | - | |
| 133 | - if (this.options.controls.play) | |
| 134 | - panel.append('<a class="play slideshowbutton" href="#play">Play</a>'); | |
| 135 | - | |
| 136 | - if (this.options.controls.next) | |
| 137 | - panel.append('<a class="next slideshowbutton" href="#next">Next</a>'); | |
| 138 | - | |
| 139 | - if (this.options.controls.last) | |
| 140 | - panel.append('<a class="last slideshowbutton" href="#last">Last</a>'); | |
| 141 | - | |
| 142 | - if (this.options.controls.help) { | |
| 143 | - panel.append('<a class="help slideshowbutton" href="#help">Help</a>'); | |
| 144 | - panel.prepend('<div class="slideshow-help">'+this.options.help+'</div>'); | |
| 145 | - | |
| 146 | -// panel.find('.slideshow-help').css('width', this.options.width - 4 + 'px'); | |
| 147 | - } | |
| 148 | - | |
| 149 | - | |
| 150 | - if (this.options.controls.counter) { | |
| 151 | - panel.append('<span class="counter">'+(this.options.index+1)+' / '+this.length+'</span>'); | |
| 152 | - } | |
| 153 | - | |
| 154 | - if (this.options.controls.hide) { | |
| 155 | - ext.find('.slideshow-panel-place').hover(function(){ | |
| 156 | - $(this).find('.slideshow-panel').fadeIn(); | |
| 157 | - }, function() { | |
| 158 | - $(this).find('.slideshow-panel').fadeOut(); | |
| 159 | - }); | |
| 160 | - panel.hide(); | |
| 161 | - } | |
| 162 | - | |
| 163 | - | |
| 164 | - ext.find('.slideshow-panel-place').css('width', this.options.width); | |
| 165 | - } | |
| 166 | - | |
| 167 | - /** | |
| 168 | - * Set Size Options | |
| 169 | - */ | |
| 170 | - ext.css('width', this.options.width + 'px'); | |
| 171 | -// ext.css('height', this.options.height + 'px'); | |
| 172 | - | |
| 173 | - ext.find('.slideshow-content').css('width', this.options.width); | |
| 174 | - ext.find('.slideshow-content').css('height', this.options.height); | |
| 175 | - | |
| 176 | - /** | |
| 177 | - * Change children styles | |
| 178 | - */ | |
| 179 | - ext.find('.slideshow-content > *').each(function(){ | |
| 180 | - _self._build($(this)); | |
| 181 | - }); | |
| 182 | - | |
| 183 | - // init slide (replace by ajax etc) | |
| 184 | - this.init(this.options.index); | |
| 185 | - | |
| 186 | - // hide all slides | |
| 187 | - ext.find('.slideshow-content > *:not(:eq('+this.options.index+'))').hide(); | |
| 188 | - | |
| 189 | - // show label | |
| 190 | - this.label(); | |
| 191 | - | |
| 192 | - // add playframe | |
| 193 | - if (this.options.playframe) { | |
| 194 | - ext.find('.slideshow-content').append('<div class="slideshow-shadow slideshow-opacity"><div class="slideshow-frame"></div></div>'); | |
| 195 | - } | |
| 196 | - | |
| 197 | - // bind all events | |
| 198 | - this.events(); | |
| 199 | - | |
| 200 | - return true; | |
| 201 | - }; | |
| 202 | - | |
| 203 | - /** | |
| 204 | - * Change CSS for every entity | |
| 205 | - */ | |
| 206 | - this._build = function(el){ | |
| 207 | - el.css({margin :0, | |
| 208 | - position: 'absolute', | |
| 209 | - left: (this.options.width/2 - el.attr('width')/2), | |
| 210 | - top : (this.options.height/2 - el.attr('height')/2), | |
| 211 | - overflow:'hidden' | |
| 212 | - }); | |
| 213 | - | |
| 214 | - if (el.is('img') && this.options.imgresize || el.is(':not(img)')){ | |
| 215 | - el.css({width:'100%',height:'100%'}); | |
| 216 | - } | |
| 217 | - }; | |
| 218 | - | |
| 219 | - /** | |
| 220 | - * Bind Events | |
| 221 | - */ | |
| 222 | - this.events = function() { | |
| 223 | - | |
| 224 | - var _self = this; | |
| 225 | - | |
| 226 | - /** | |
| 227 | - * Go to next slide on content click (optional) | |
| 228 | - */ | |
| 229 | - if (_self.options.nextclick) | |
| 230 | - ext.find('.slideshow-content').click(function(){ | |
| 231 | - _self.stop(); | |
| 232 | - _self.next(); | |
| 233 | - return false; | |
| 234 | - }); | |
| 235 | - | |
| 236 | - /** | |
| 237 | - * Goto first slide button | |
| 238 | - */ | |
| 239 | - if (this.options.controls.first) | |
| 240 | - ext.find('a.first').click(function(){ | |
| 241 | - _self.stop(); | |
| 242 | - _self.goSlide(0); | |
| 243 | - return false; | |
| 244 | - }); | |
| 245 | - | |
| 246 | - /** | |
| 247 | - * Goto previouse slide button | |
| 248 | - */ | |
| 249 | - if (this.options.controls.prev) | |
| 250 | - ext.find('a.prev').click(function(){ | |
| 251 | - _self.stop(); | |
| 252 | - _self.prev(); | |
| 253 | - return false; | |
| 254 | - }); | |
| 255 | - | |
| 256 | - /** | |
| 257 | - * Play slideshow button | |
| 258 | - */ | |
| 259 | - if (this.options.controls.play) | |
| 260 | - ext.find('a.play').click(function(){ | |
| 261 | - if (_self.playFlag) { | |
| 262 | - _self.stop(); | |
| 263 | - } else { | |
| 264 | - _self.play(); | |
| 265 | - } | |
| 266 | - return false; | |
| 267 | - }); | |
| 268 | - | |
| 269 | - /** | |
| 270 | - * Goto next slide button | |
| 271 | - */ | |
| 272 | - if (this.options.controls.next) | |
| 273 | - ext.find('a.next').click(function(){ | |
| 274 | - _self.stop(); | |
| 275 | - _self.next(); | |
| 276 | - return false; | |
| 277 | - }); | |
| 278 | - | |
| 279 | - /** | |
| 280 | - * Goto last slide button | |
| 281 | - */ | |
| 282 | - if (this.options.controls.last) | |
| 283 | - ext.find('a.last').click(function(){ | |
| 284 | - _self.stop(); | |
| 285 | - _self.goSlide(_self.length-1); | |
| 286 | - return false; | |
| 287 | - }); | |
| 288 | - | |
| 289 | - /** | |
| 290 | - * Show help message | |
| 291 | - */ | |
| 292 | - if (this.options.controls.help) | |
| 293 | - ext.find('a.help').click(function(){ | |
| 294 | - _self.stop(); | |
| 295 | - ext.find('.slideshow-help').slideToggle(); | |
| 296 | - return false; | |
| 297 | - }); | |
| 298 | - | |
| 299 | - /** | |
| 300 | - * Show playframe | |
| 301 | - */ | |
| 302 | - if (this.options.playframe) | |
| 303 | - ext.find('.slideshow-frame').click(function(){ | |
| 304 | - ext.find('.slideshow-frame').remove(); | |
| 305 | - ext.find('.slideshow-shadow').remove(); | |
| 306 | - | |
| 307 | - if (_self.options.playclick) | |
| 308 | - setTimeout(function(ms){ _self.play() }, _self.options.time); | |
| 309 | - return false; | |
| 310 | - }); | |
| 311 | - | |
| 312 | - /** | |
| 313 | - * Play/stop on slideshow hover | |
| 314 | - */ | |
| 315 | - if (this.options.playhover) | |
| 316 | - ext.hover(function(){ | |
| 317 | - if (!_self.playFlag) { | |
| 318 | - _self.play(); | |
| 319 | - } | |
| 320 | - }, function(){ | |
| 321 | - if (_self.playFlag) { | |
| 322 | - _self.stop(); | |
| 323 | - } | |
| 324 | - }); | |
| 325 | - | |
| 326 | - | |
| 327 | - /** | |
| 328 | - * Stop/Play on slideshow hover | |
| 329 | - */ | |
| 330 | - if (this.options.playhoverr) | |
| 331 | - ext.hover(function(){ | |
| 332 | - if (_self.playFlag) { | |
| 333 | - _self.stop(); | |
| 334 | - } | |
| 335 | - }, function(){ | |
| 336 | - if (!_self.playFlag) { | |
| 337 | - _self.play(); | |
| 338 | - } | |
| 339 | - }); | |
| 340 | - }; | |
| 341 | - | |
| 342 | - /** | |
| 343 | - * Find and show label of slide | |
| 344 | - * @method | |
| 345 | - */ | |
| 346 | - this.label = function () { | |
| 347 | - if (!this.options.title) return false; | |
| 348 | - | |
| 349 | - label = ''; | |
| 350 | - | |
| 351 | - current = ext.find('.slideshow-content > *:eq('+this.options.index +')'); | |
| 352 | - | |
| 353 | - if (current.attr('alt')) { | |
| 354 | - label = current.attr('alt'); | |
| 355 | - } else if (current.attr('title')) { | |
| 356 | - label = current.attr('title'); | |
| 357 | - }else if (current.find('label:first').length>0) { | |
| 358 | - current.find('label:first').hide(); | |
| 359 | - label = current.find('label:first').html(); | |
| 360 | - } | |
| 361 | - | |
| 362 | - ext.find('.slideshow-label').html(label); | |
| 363 | - }; | |
| 364 | - | |
| 365 | - /** | |
| 366 | - * Goto previous slide | |
| 367 | - * @method | |
| 368 | - */ | |
| 369 | - this.prev = function () { | |
| 370 | - if (this.options.index == 0) { | |
| 371 | - i = (this.length-1); | |
| 372 | - } else { | |
| 373 | - i = this.options.index - 1; | |
| 374 | - } | |
| 375 | - | |
| 376 | - this.goSlide(i); | |
| 377 | - }; | |
| 378 | - | |
| 379 | - | |
| 380 | - /** | |
| 381 | - * Play Slideshow | |
| 382 | - * @method | |
| 383 | - */ | |
| 384 | - this.play = function () { | |
| 385 | - var _self = this; | |
| 386 | - this.playFlag = true; | |
| 387 | - this.playId = setTimeout(function(ms){ _self._play() }, this.options.time); | |
| 388 | - ext.find('a.play').addClass('stop'); | |
| 389 | - }; | |
| 390 | - | |
| 391 | - /** | |
| 392 | - * Play Slideshow | |
| 393 | - * @method | |
| 394 | - */ | |
| 395 | - this._play = function () { | |
| 396 | - var _self = this; | |
| 397 | - this.next(); | |
| 398 | - if (this.playFlag) { | |
| 399 | - if (this.options.index == (this.length-1) && !this.options.loop) { this.stop();return false; } | |
| 400 | - this.playId = setTimeout(function(ms){ _self._play() }, this.options.time); | |
| 401 | - } | |
| 402 | - }; | |
| 403 | - | |
| 404 | - /** | |
| 405 | - * Stop Slideshow | |
| 406 | - * @method | |
| 407 | - */ | |
| 408 | - this.stop = function () { | |
| 409 | - ext.find('a.play').removeClass('stop'); | |
| 410 | - this.playFlag = false; | |
| 411 | - clearTimeout(this.playId); | |
| 412 | - }; | |
| 413 | - | |
| 414 | - /** | |
| 415 | - * Goto next slide | |
| 416 | - * @method | |
| 417 | - */ | |
| 418 | - this.next = function () { | |
| 419 | - if (this.options.index == (this.length-1)) { | |
| 420 | - i = 0; | |
| 421 | - } else { | |
| 422 | - i = this.options.index + 1; | |
| 423 | - } | |
| 424 | - this.goSlide(i); | |
| 425 | - }; | |
| 426 | - | |
| 427 | - /** | |
| 428 | - * Init N-slide | |
| 429 | - * @method | |
| 430 | - * @param {Integer} n | |
| 431 | - */ | |
| 432 | - this.init = function (index) { | |
| 433 | - // initialize only ones | |
| 434 | - for (var i = 0, loopCnt = this.inited.length; i < loopCnt; i++) { | |
| 435 | - if (this.inited[i] === index) { | |
| 436 | - return true; | |
| 437 | - } | |
| 438 | - } | |
| 439 | - | |
| 440 | - // index to inited stack | |
| 441 | - this.inited.push(index); | |
| 442 | - | |
| 443 | - // current slide | |
| 444 | - slide = ext.find('.slideshow-content > *:eq('+index+')'); | |
| 445 | - | |
| 446 | - var _self = this; | |
| 447 | - /** | |
| 448 | - * Replace A to content from HREF | |
| 449 | - */ | |
| 450 | - if (slide.get(0).tagName == 'A') { | |
| 451 | - var href = slide.attr('href'); | |
| 452 | - | |
| 453 | - var title = slide.attr('title'); | |
| 454 | - title = title.replace(/\"/i,'\''); // if you use single quotes for tag attribs | |
| 455 | - | |
| 456 | - var domain = document.domain; | |
| 457 | - domain = domain.replace(/\./i,"\."); // for strong check domain name | |
| 458 | - | |
| 459 | - var reimage = new RegExp("\.(png|gif|jpg|jpeg|svg)$", "i"); | |
| 460 | - var relocal = new RegExp("^((https?:\/\/"+domain+")|(?!http:\/\/))", "i"); | |
| 461 | - | |
| 462 | - | |
| 463 | - if (this.options.imgajax && reimage.test(href)) { | |
| 464 | - slide.replaceWith('<img src="'+href+'" alt="'+title+'"/>'); | |
| 465 | - } else if (this.options.linkajax && relocal.test(href)) { | |
| 466 | - $.get(href, function(data){ | |
| 467 | - slide.replaceWith('<div><label>'+title+'</label>'+data+'</div>'); | |
| 468 | - }); | |
| 469 | - } else { // nothing else | |
| 470 | -// slide.wrap('<p></p>'); | |
| 471 | - } | |
| 472 | - | |
| 473 | - slide = ext.find('.slideshow-content > *:eq('+index+')'); | |
| 474 | - | |
| 475 | - // reset css | |
| 476 | - this._build(slide); | |
| 477 | - } | |
| 478 | - | |
| 479 | - /** | |
| 480 | - * Play/stop on content click (like image and other) | |
| 481 | - */ | |
| 482 | - if (this.options.playclick) | |
| 483 | - $(slide).click(function(){ | |
| 484 | - if (_self.playFlag) { | |
| 485 | - _self.stop(); | |
| 486 | - } else { | |
| 487 | - _self.play(); | |
| 488 | - } | |
| 489 | - return false; | |
| 490 | - }); | |
| 491 | - }; | |
| 492 | - | |
| 493 | - /** | |
| 494 | - * Goto N-slide | |
| 495 | - * @method | |
| 496 | - * @param {Integer} n | |
| 497 | - */ | |
| 498 | - this.goSlide = function (n) { | |
| 499 | - | |
| 500 | - if (this.options.index == n) return; | |
| 501 | - | |
| 502 | - this.init(n); | |
| 503 | - | |
| 504 | - var next = ext.find('.slideshow-content > *:eq('+n+')'); | |
| 505 | - var prev = ext.find('.slideshow-content > *:eq('+this.options.index+')'); | |
| 506 | - | |
| 507 | - // restore next slide after all effects, set z-index = 0 for prev slide | |
| 508 | - prev.css({zIndex:0}); | |
| 509 | - if (this.options.imgresize) { | |
| 510 | - next.css({zIndex:1, top: 0, left: 0, opacity: 1, width: this.options.width, height: this.options.height}); | |
| 511 | - } else { | |
| 512 | - next.css({zIndex:1, top: (this.options.height/2 - next.attr('height')/2), left: (this.options.width/2 - next.attr('width')/2), opacity: 1}); | |
| 513 | - } | |
| 514 | - | |
| 515 | - this.options.index = n; | |
| 516 | - | |
| 517 | - if (this.options.effect == 'random' ) { | |
| 518 | - var r = Math.random(); | |
| 519 | - r = Math.floor(r*12); | |
| 520 | - } else { | |
| 521 | - r = -1; | |
| 522 | - } | |
| 523 | - // effect between slides | |
| 524 | - switch (true) { | |
| 525 | - case (this.options.effect == 'scrollUp' || r == 0): | |
| 526 | - prev.css({width:'100%'}); | |
| 527 | - next.css({top:0, height:0}); | |
| 528 | - | |
| 529 | - prevAni = {height: 0, top:this.options.height}; | |
| 530 | - break; | |
| 531 | - case (this.options.effect == 'scrollDown' || r == 1): | |
| 532 | - prev.css({width:'100%'}); | |
| 533 | - next.css({top:this.options.height,height:0}); | |
| 534 | - | |
| 535 | - prevAni = {height: 0, top:0}; | |
| 536 | - break; | |
| 537 | - case (this.options.effect == 'scrollRight' || r == 2): | |
| 538 | - prev.css({right:0,left:'',height:'100%'}); | |
| 539 | - next.css({right:'',left:0,height:'100%',width:'0%'}); | |
| 540 | - | |
| 541 | - prevAni = {width: 0}; | |
| 542 | - break; | |
| 543 | - case (this.options.effect == 'scrollLeft' || r == 3): | |
| 544 | - prev.css({right:'',left:0,height:'100%'}); | |
| 545 | - next.css({right:0,left:'',height:'100%',width:'0%'}); | |
| 546 | - | |
| 547 | - prevAni = {width: 0}; | |
| 548 | - break; | |
| 549 | - case (this.options.effect == 'growX' || r == 4): | |
| 550 | - next.css({zIndex:2,opacity: 1,left: this.options.width/2, width: '0%', height:'100%'}); | |
| 551 | - | |
| 552 | - prevAni = {opacity: 0.8}; | |
| 553 | - break; | |
| 554 | - | |
| 555 | - case (this.options.effect == 'growY' || r == 5): | |
| 556 | - next.css({opacity: 1,top: this.options.height/2, width:'100%', height: '0%'}); | |
| 557 | - | |
| 558 | - prevAni = {opacity: 0.8}; | |
| 559 | - break; | |
| 560 | - | |
| 561 | - case (this.options.effect == 'zoom' || r == 6): | |
| 562 | - next.css({width: 0, height: 0, top: this.options.height/2, left: this.options.width/2}); | |
| 563 | - | |
| 564 | - prevAni = {width: 0, height: 0, top: this.options.height/2, left: this.options.width/2}; | |
| 565 | - break; | |
| 566 | - | |
| 567 | - case (this.options.effect == 'zoomFade' || r == 7): | |
| 568 | - next.css({zIndex:1, opacity: 0,width: 0, height: 0, top: this.options.height/2, left: this.options.width/2}); | |
| 569 | - | |
| 570 | - prevAni = {opacity: 0, width: 0, height: 0, top: this.options.height/2, left: this.options.width/2}; | |
| 571 | - break; | |
| 572 | - | |
| 573 | - case (this.options.effect == 'zoomTL' || r == 8): | |
| 574 | - next.css({zIndex:1, opacity: 0,width: this.options.width/2, height: this.options.height/2, top:0, left: 0}); | |
| 575 | - | |
| 576 | - prevAni = {opacity: 0, width: 0, height: 0, top: this.options.height, left: this.options.width}; | |
| 577 | - break; | |
| 578 | - case (this.options.effect == 'zoomBR' || r == 9): | |
| 579 | - next.css({zIndex:1, opacity: 0,width: this.options.width/2, height: this.options.height/2, top: this.options.height/2, left: this.options.width/2}); | |
| 580 | - | |
| 581 | - prevAni = {opacity: 0, width: 0, height: 0, top: 0, left: 0}; | |
| 582 | - break; | |
| 583 | - case (this.options.effect == 'fade' || r == 10): | |
| 584 | - default: | |
| 585 | - prev.css({zIndex:0, opacity: 1}); | |
| 586 | - next.css({zIndex:1, opacity: 0}); | |
| 587 | - | |
| 588 | - prevAni = {opacity: 0}; | |
| 589 | - break; | |
| 590 | - } | |
| 591 | - | |
| 592 | - var _self = this; | |
| 593 | - | |
| 594 | - prev.animate(prevAni,this.options.effecttime); | |
| 595 | - | |
| 596 | - // play next slide animation, hide prev slide, update label, update counter | |
| 597 | - next.show().animate({opacity: 1}, this.options.effecttime, function () { prev.hide(); _self.label(); _self.counter(); }); | |
| 598 | - }; | |
| 599 | - | |
| 600 | - /** | |
| 601 | - * Update counter data | |
| 602 | - * @method | |
| 603 | - */ | |
| 604 | - this.counter = function () { | |
| 605 | - if (this.options.controls.counter) | |
| 606 | - ext.find('.slideshow-panel span.counter').html((this.options.index+1) + ' / ' + this.length); | |
| 607 | - | |
| 608 | - }; | |
| 609 | - | |
| 610 | - // Now initialize the slideshow | |
| 611 | - this.options = $.extend({}, defaults, settings); | |
| 612 | - | |
| 613 | - if (typeof(settings) != 'undefined') { | |
| 614 | - if (typeof(settings.controls) != 'undefined') | |
| 615 | - this.options.controls = $.extend({}, defaults.controls, settings.controls); | |
| 616 | - } | |
| 617 | - | |
| 618 | - this.build(); | |
| 619 | - | |
| 620 | - /** | |
| 621 | - * Show slideshow | |
| 622 | - */ | |
| 623 | - ext.show(); | |
| 624 | - | |
| 625 | - /** | |
| 626 | - * Check play option | |
| 627 | - */ | |
| 628 | - if (this.options.play) { | |
| 629 | - this.play(); | |
| 630 | - } | |
| 631 | - | |
| 632 | - return ext; | |
| 633 | - }); | |
| 634 | - | |
| 635 | - /** | |
| 636 | - * external functions - append to $ | |
| 637 | - */ | |
| 638 | - _slideshow.playSlide = function(){ _slideshow.each(function () { this.play(); }) }; | |
| 639 | - _slideshow.stopSlide = function(){ _slideshow.each(function () { this.stop(); }) }; | |
| 640 | - _slideshow.nextSlide = function(){ _slideshow.each(function () { this.next(); }) }; | |
| 641 | - _slideshow.prevSlide = function(){ _slideshow.each(function () { this.prev(); }) }; | |
| 642 | - | |
| 643 | - return this; | |
| 644 | - } | |
| 645 | -})(jQuery); |
public/javascripts/jquery.aslideshow/simple/images/big-play.png
17.3 KB
public/javascripts/jquery.aslideshow/simple/images/buttons.png
4.9 KB
public/javascripts/jquery.aslideshow/simple/styles.css
| ... | ... | @@ -1,180 +0,0 @@ |
| 1 | -.slideshow, .slideshow-label, .slideshow-content, .slideshow-panel { | |
| 2 | - font:12px Verdana, Tahoma, sans-serif; | |
| 3 | -} | |
| 4 | - | |
| 5 | -.slideshow { | |
| 6 | - padding:0; | |
| 7 | - border:0; | |
| 8 | - position:relative; | |
| 9 | - display:none; /* Set to "none" for not preview slideshow content */ | |
| 10 | -} | |
| 11 | - | |
| 12 | -.slideshow-fullscreen { | |
| 13 | - position:absolute; | |
| 14 | - top:0; | |
| 15 | - left:0; | |
| 16 | - padding:0; | |
| 17 | - border:0; | |
| 18 | - overflow:hidden; | |
| 19 | -} | |
| 20 | - | |
| 21 | -.slideshow-label-place { | |
| 22 | - padding:0; | |
| 23 | - position:absolute; | |
| 24 | - top:0px; | |
| 25 | - left:0px; | |
| 26 | - z-index:100; | |
| 27 | - height:30px; | |
| 28 | -} | |
| 29 | - .slideshow-label { | |
| 30 | - z-index:101; | |
| 31 | - color:#fff; | |
| 32 | - width:100%; | |
| 33 | - height:100%; | |
| 34 | - line-height:30px; | |
| 35 | - text-indent:8px; | |
| 36 | - font-weight:bold | |
| 37 | - } | |
| 38 | - | |
| 39 | -.slideshow-panel-place { | |
| 40 | - padding:0; | |
| 41 | - position:absolute; | |
| 42 | - bottom:-29px; | |
| 43 | - left:0px; | |
| 44 | - z-index:100; | |
| 45 | - height:28px; | |
| 46 | -} | |
| 47 | - | |
| 48 | - | |
| 49 | - .slideshow-panel { | |
| 50 | - z-index:101; | |
| 51 | - width:100%; | |
| 52 | - height:100%; | |
| 53 | - } | |
| 54 | - | |
| 55 | - .slideshow-panel a.slideshowbutton { | |
| 56 | - display: block; | |
| 57 | - width:26px; | |
| 58 | - height:26px; | |
| 59 | - float:left; | |
| 60 | - text-indent:-99999%; | |
| 61 | - overflow:hidden; | |
| 62 | - outline: 0; /* @ Firefox, prevent dotted border after click */ | |
| 63 | - background-image:url(images/buttons.png); | |
| 64 | - background-repeat:no-repeat; | |
| 65 | - border:1px solid transparent | |
| 66 | - } | |
| 67 | - | |
| 68 | - .slideshow-panel a.slideshowbutton:hover { | |
| 69 | - border:1px solid #777; | |
| 70 | - } | |
| 71 | - | |
| 72 | - | |
| 73 | - .slideshow-panel a.first { | |
| 74 | - background-position: 0 0 | |
| 75 | - } | |
| 76 | - | |
| 77 | - .slideshow-panel a.prev { | |
| 78 | - background-position: -24px 0 | |
| 79 | - } | |
| 80 | - | |
| 81 | - .slideshow-panel a.play { | |
| 82 | - background-position: -48px 0 | |
| 83 | - } | |
| 84 | - | |
| 85 | - .slideshow-panel a.stop { | |
| 86 | - background-position: -72px 0 | |
| 87 | - } | |
| 88 | - | |
| 89 | - .slideshow-panel a.next { | |
| 90 | - background-position: -96px 0 | |
| 91 | - } | |
| 92 | - | |
| 93 | - .slideshow-panel a.last { | |
| 94 | - background-position: -120px 0 | |
| 95 | - } | |
| 96 | - | |
| 97 | - .slideshow-panel a.help { | |
| 98 | - position:relative; | |
| 99 | - background-position: -144px 0 | |
| 100 | - } | |
| 101 | - | |
| 102 | - .slideshow-panel span.counter { | |
| 103 | - float:right; | |
| 104 | - display: block; | |
| 105 | - /*width:26px;*/ | |
| 106 | - height:26px; | |
| 107 | - line-height:26px; | |
| 108 | - padding:0 4px; | |
| 109 | - color: white; | |
| 110 | - } | |
| 111 | - | |
| 112 | - | |
| 113 | -.slideshow-help { | |
| 114 | - position:absolute; | |
| 115 | - bottom:28px; | |
| 116 | - left:0px; | |
| 117 | - z-index:101; | |
| 118 | - background-color:#ff9; | |
| 119 | - display:none; | |
| 120 | - opacity: 0.9; | |
| 121 | - width:100%; | |
| 122 | -} | |
| 123 | - | |
| 124 | -.slideshow-content { | |
| 125 | - padding:0; | |
| 126 | - background-color:#fff; | |
| 127 | - color:#333; | |
| 128 | - overflow:hidden; | |
| 129 | - position:relative; | |
| 130 | - width:100%; | |
| 131 | - height:100%; | |
| 132 | -} | |
| 133 | - | |
| 134 | - /* Some Content Changes */ | |
| 135 | - .slideshow-content p { | |
| 136 | - padding:0; | |
| 137 | - overflow:auto; | |
| 138 | - } | |
| 139 | - | |
| 140 | -.slideshow-frame { | |
| 141 | - position:absolute; | |
| 142 | - top:0px; | |
| 143 | - left:0px; | |
| 144 | - background:url(images/big-play.png) 50% 50% no-repeat; | |
| 145 | - z-index:201; | |
| 146 | - cursor:pointer; | |
| 147 | - width:100%; | |
| 148 | - height:100%; | |
| 149 | -} | |
| 150 | - | |
| 151 | -.slideshow-shadow{ | |
| 152 | - position:absolute; | |
| 153 | - top:0px; | |
| 154 | - left:0px; | |
| 155 | - z-index:200; | |
| 156 | - width:100%; | |
| 157 | - height:100%; | |
| 158 | -} | |
| 159 | - | |
| 160 | -.slideshow-opacity{ | |
| 161 | - background-color: black; | |
| 162 | -} | |
| 163 | - *:first-child+html .slideshow-opacity, * html .slideshow-opacity { | |
| 164 | - zoom:1; | |
| 165 | - background:#000; | |
| 166 | - filter:alpha(opacity=50); | |
| 167 | - } | |
| 168 | - * html .slideshow-opacity { | |
| 169 | - zoom:1; | |
| 170 | - background:#000; | |
| 171 | - filter:alpha(opacity=50); | |
| 172 | - } | |
| 173 | - | |
| 174 | - *:first-child+html .slideshow-opacity *{ | |
| 175 | - position:relative; | |
| 176 | - } | |
| 177 | - | |
| 178 | - * html .slideshow-opacity *{ | |
| 179 | - position:relative; | |
| 180 | - } |
| ... | ... | @@ -0,0 +1,275 @@ |
| 1 | +/* 1/13/2009 | |
| 2 | + PikaChoose | |
| 3 | + Jquery plugin for photo galleries | |
| 4 | + Copyright (C) 2009 Jeremy Fry | |
| 5 | + | |
| 6 | + This program is free software: you can redistribute it and/or modify | |
| 7 | + it under the terms of the GNU General Public License as published by | |
| 8 | + the Free Software Foundation, either version 3 of the License, or | |
| 9 | + (at your option) any later version. | |
| 10 | + | |
| 11 | + This program is distributed in the hope that it will be useful, | |
| 12 | + but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 | + GNU General Public License for more details. | |
| 15 | + | |
| 16 | + You should have received a copy of the GNU General Public License | |
| 17 | + along with this program. If not, see <http://www.gnu.org/licenses/>. | |
| 18 | +*/ | |
| 19 | + | |
| 20 | + | |
| 21 | +jQuery.iPikaChoose = { | |
| 22 | + build : function(user_options) | |
| 23 | + { | |
| 24 | + var user_options; | |
| 25 | + var defaults = { | |
| 26 | + show_captions: true, | |
| 27 | + slide_enabled: true, | |
| 28 | + auto_play: true, | |
| 29 | + show_prev_next: true, | |
| 30 | + slide_speed: 5000, | |
| 31 | + thumb_width: 50, | |
| 32 | + thumb_height: 42 | |
| 33 | + }; | |
| 34 | + | |
| 35 | + return $(this).each( | |
| 36 | + function() { | |
| 37 | + //bring in options | |
| 38 | + var options = $.extend(defaults, user_options); | |
| 39 | + // grab our images | |
| 40 | + var $images = $(this).children('li').children('img'); | |
| 41 | + //hide the images so the user doesn't see crap | |
| 42 | + $images.fadeOut(1); | |
| 43 | + | |
| 44 | + //save our list for future ref | |
| 45 | + var $ulist = $(this); | |
| 46 | + $images.each(LoadImages); | |
| 47 | + //start building structure | |
| 48 | + $(this).before("<div class='pika_main'></div>"); | |
| 49 | + // houses eveything about the UL | |
| 50 | + var $main_div = $(this).prev(".pika_main"); | |
| 51 | + | |
| 52 | + //add in slideshow elements when appropriate | |
| 53 | + if(options.slide_enabled){ | |
| 54 | + $main_div.append("<div class='pika_play'></div>"); | |
| 55 | + var $play_div = $(this).prev(".pika_main").children(".pika_play"); | |
| 56 | + $play_div.html("<a class='pika_play_button'>Play</a><a class='pika_stop_button'>Stop</a>"); | |
| 57 | + $play_div.fadeOut(1); | |
| 58 | + var $play_anchor = $play_div.children('a:first'); | |
| 59 | + var $stop_anchor = $play_div.children('a:last'); | |
| 60 | + } | |
| 61 | + //this div is used to make image and caption fade together | |
| 62 | + $main_div.append("<div class='pika_subdiv'></div>"); | |
| 63 | + var $sub_div = $main_div.children(".pika_subdiv"); | |
| 64 | + | |
| 65 | + //the main image we'll be using to load | |
| 66 | + $sub_div.append("<img />"); | |
| 67 | + var $main_img = $sub_div.children("img"); | |
| 68 | + | |
| 69 | + //create the caption div when appropriate | |
| 70 | + if(options.show_captions){ | |
| 71 | + $sub_div.append("<div class='pika_caption'></div>"); | |
| 72 | + var $caption_div = $sub_div.children(".pika_caption"); | |
| 73 | + } | |
| 74 | + | |
| 75 | + //navigation div ALWAYS gets created, its refrenced a lot | |
| 76 | + $(this).after("<div class='pika_navigation'></div>"); | |
| 77 | + var $navigation_div = $(this).next(".pika_navigation"); | |
| 78 | + //fill in sub elements | |
| 79 | + $navigation_div.prepend("<a>Previous</a> :: <a>Next</a>"); | |
| 80 | + var $previous_image_anchor = $navigation_div.children('a:first'); | |
| 81 | + var $next_image_anchor = $navigation_div.children('a:last'); | |
| 82 | + | |
| 83 | + //hide the navigation if the user doesn't want it | |
| 84 | + if(!options.show_prev_next){ | |
| 85 | + $navigation_div.css("display","none"); | |
| 86 | + } | |
| 87 | + | |
| 88 | + //$playing triggers the loop for the slideshow | |
| 89 | + var $playing = options.auto_play; | |
| 90 | + | |
| 91 | + $main_img.wrap("<a></a>"); | |
| 92 | + var $main_link = $main_img.parent("a"); | |
| 93 | + | |
| 94 | + function LoadImages(){ | |
| 95 | + $(this).bind("load", function(){ | |
| 96 | + //had to make a seperate function so that the thumbnails wouldn't have problems | |
| 97 | + //from beings resized before loaded, thus not h/w | |
| 98 | + | |
| 99 | + var $w = $(this).width(); | |
| 100 | + var $h = $(this).height(); | |
| 101 | + if($w===0){$w = $(this).attr("width");} | |
| 102 | + if($h===0){$h = $(this).attr("height");} | |
| 103 | + //grab a ratio for image to user defined settings | |
| 104 | + var $rw = options.thumb_width/$w; | |
| 105 | + var $rh = options.thumb_height/$h; | |
| 106 | + | |
| 107 | + //determine which has the smallest ratio (thus needing | |
| 108 | + //to be the side we use to scale so our whole thumb is filled) | |
| 109 | + if($rw<$rh){ | |
| 110 | + //we'll use ratio later to scale and not distort | |
| 111 | + var $ratio = $rh; | |
| 112 | + var $left = (($w*$ratio-options.thumb_width)/2)*-1; | |
| 113 | + $left = Math.round($left); | |
| 114 | + //set images left offset to match | |
| 115 | + $(this).css({left:$left}); | |
| 116 | + }else{ | |
| 117 | + var $ratio = $rw; | |
| 118 | + //you can uncoment this lines to have the vertical picture centered | |
| 119 | + //but usually tall photos have the focal point at the top... | |
| 120 | + //var $top = (($h*$ratio-options.thumb_height)/2)*-1; | |
| 121 | + //var $top = Math.round($top); | |
| 122 | + $top = 0; | |
| 123 | + $(this).css({top:$top}); | |
| 124 | + } | |
| 125 | + //use those ratios to calculate scale | |
| 126 | + var $width = Math.round($w*$ratio); | |
| 127 | + var $height = Math.round($h*$ratio); | |
| 128 | + $(this).css("position","relative"); | |
| 129 | + $(this).width($width).height($height); | |
| 130 | + var imgcss={ | |
| 131 | + width: $width, | |
| 132 | + height: $height | |
| 133 | + }; | |
| 134 | + $(this).css(imgcss); | |
| 135 | + | |
| 136 | + $(this).fadeTo(250,0.4); | |
| 137 | + if($(this).hasClass('pika_first')){ | |
| 138 | + $(this).trigger("click",["auto"]); | |
| 139 | + } | |
| 140 | + }); | |
| 141 | + | |
| 142 | + //clone so the on loads will fire correctly | |
| 143 | + $(this).clone(true).insertAfter(this); | |
| 144 | + | |
| 145 | + $(this).remove(); | |
| 146 | + //reset images to the clones | |
| 147 | + $images = $ulist.children('li').children('img'); | |
| 148 | + } | |
| 149 | + function activate(){ | |
| 150 | + //sets the intial phase for everything | |
| 151 | + | |
| 152 | + //image_click is controls the fading | |
| 153 | + $images.bind("click",image_click); | |
| 154 | + //hiding refrence to slide elements if slide is disabled | |
| 155 | + if(options.slide_enabled){ | |
| 156 | + if(options.auto_play){ | |
| 157 | + $playing = true; | |
| 158 | + $play_anchor.hide(); | |
| 159 | + $stop_anchor.show(); | |
| 160 | + }else{ | |
| 161 | + $play_anchor.show(); | |
| 162 | + $stop_anchor.hide(); | |
| 163 | + } | |
| 164 | + } | |
| 165 | + | |
| 166 | + //resizes and centers thumbs | |
| 167 | + prep_thumbs(); | |
| 168 | + //previous link to go back an image | |
| 169 | + $previous_image_anchor.bind("click",previous_image); | |
| 170 | + //ditto for forward, also the item that gets auto clicked for slideshow | |
| 171 | + $next_image_anchor.bind("click",next_image); | |
| 172 | + }//end activate function | |
| 173 | + | |
| 174 | + | |
| 175 | + function prep_thumbs(){ | |
| 176 | + //now we know the first and last images | |
| 177 | + $images.filter(":last").addClass("pika_last"); | |
| 178 | + $images.filter(":first").addClass("pika_first"); | |
| 179 | + //parse images | |
| 180 | + $images.each(function(){ | |
| 181 | + var licss = { | |
| 182 | + width: options.thumb_width+"px", | |
| 183 | + height: options.thumb_height+"px", | |
| 184 | + "list-style": "none", | |
| 185 | + overflow: "hidden" | |
| 186 | + }; | |
| 187 | + $(this).parent('li').css(licss); | |
| 188 | + $(this).hover( | |
| 189 | + function(){$(this).fadeTo(250,1);}, | |
| 190 | + function(){if(!$(this).hasClass("pika_selected")){$(this).fadeTo(250,0.4);}} | |
| 191 | + ); | |
| 192 | + }); | |
| 193 | + | |
| 194 | + }//end fix thumbs functions | |
| 195 | + function image_click(event, how){ | |
| 196 | + //catch when user clicks on an image Then cancel current slideshow | |
| 197 | + if(how!="auto"){ | |
| 198 | + if(options.slide_enabled){ | |
| 199 | + $stop_anchor.hide(); | |
| 200 | + $play_anchor.show(); | |
| 201 | + $playing=false; | |
| 202 | + } | |
| 203 | + $sub_div.stop(); | |
| 204 | + $sub_div.dequeue(); | |
| 205 | + } | |
| 206 | + //all our image variables | |
| 207 | + var $image_source = $(this).attr("src"); | |
| 208 | + var $image_link = $(this).attr("ref"); | |
| 209 | + var $image_caption = $(this).attr("title"); | |
| 210 | + | |
| 211 | + //fade out the old thumb | |
| 212 | + $images.filter(".pika_selected").fadeTo(250,0.4); | |
| 213 | + $images.filter(".pika_selected").removeClass("pika_selected"); | |
| 214 | + //fade in the new thumb | |
| 215 | + $(this).fadeTo(250,1); | |
| 216 | + $(this).addClass("pika_selected"); | |
| 217 | + //fade the old image out and the new one in | |
| 218 | + $sub_div.fadeTo(500,0.05,function(){ | |
| 219 | + $main_img.attr("src",$image_source); | |
| 220 | + $main_link.attr("href", $image_link); | |
| 221 | + if(options.show_captions){$caption_div.html($image_caption);} | |
| 222 | + }); | |
| 223 | + $sub_div.fadeTo(800,1,function(){ | |
| 224 | + if($playing){ | |
| 225 | + $(this).animate({top:0},options.slide_speed, function(){ | |
| 226 | + //redudency needed here to catch the user clicking on an image during a change. | |
| 227 | + if($playing){$next_image_anchor.trigger("click",["auto"]);} | |
| 228 | + }); | |
| 229 | + } | |
| 230 | + }); | |
| 231 | + }//end image_click function | |
| 232 | + | |
| 233 | + function next_image(event, how){ | |
| 234 | + if($images.filter(".pika_selected").hasClass("pika_last")){ | |
| 235 | + $images.filter(":first").trigger("click",how); | |
| 236 | + }else{ | |
| 237 | + $images.filter(".pika_selected").parent('li').next('li').children('img').trigger("click",how); | |
| 238 | + } | |
| 239 | + }//end next image function | |
| 240 | + | |
| 241 | + function previous_image(event, how){ | |
| 242 | + if($images.filter(".pika_selected").hasClass("pika_first")){ | |
| 243 | + $images.filter(":last").trigger("click",how); | |
| 244 | + }else{ | |
| 245 | + $images.filter(".pika_selected").parent('li').prev('li').children('img').trigger("click",how); | |
| 246 | + } | |
| 247 | + }//end previous image function | |
| 248 | + | |
| 249 | + function play_button(){ | |
| 250 | + $main_div.hover( | |
| 251 | + function(){$play_div.fadeIn(400);}, | |
| 252 | + function(){$play_div.fadeOut(400);} | |
| 253 | + ); | |
| 254 | + $play_anchor.bind("click", function(){ | |
| 255 | + $playing = true; | |
| 256 | + $next_image_anchor.trigger("click",["auto"]); | |
| 257 | + $(this).hide(); | |
| 258 | + $stop_anchor.show(); | |
| 259 | + }); | |
| 260 | + $stop_anchor.bind("click", function(){ | |
| 261 | + $playing = false; | |
| 262 | + $(this).hide(); | |
| 263 | + $play_anchor.show(); | |
| 264 | + }); | |
| 265 | + } | |
| 266 | + if(options.slide_enabled){play_button();} | |
| 267 | + activate(); | |
| 268 | + | |
| 269 | + });//end return this.each | |
| 270 | + }//end build function | |
| 271 | + | |
| 272 | + //activate applies the appropriate actions to all the different parts of the structure. | |
| 273 | + //and loads the sets the first image | |
| 274 | +};//end jquery.ipikachoose | |
| 275 | +jQuery.fn.PikaChoose = jQuery.iPikaChoose.build; | ... | ... |
| ... | ... | @@ -0,0 +1,213 @@ |
| 1 | +/*The easing code was provided by George Smith. Please check out his site | |
| 2 | +as without him this would look really horrible! | |
| 3 | +http://gsgd.co.uk/sandbox/jquery/easing/ | |
| 4 | +*/ | |
| 5 | + | |
| 6 | +jQuery.easing.jswing = jQuery.swing; | |
| 7 | +jQuery.extend( jQuery.easing, | |
| 8 | +{ | |
| 9 | + def: 'easeOutCubic', | |
| 10 | + swing: function (x, t, b, c, d) { | |
| 11 | + return jQuery.easing[jQuery.easing.def](x, t, b, c, d); | |
| 12 | + }, | |
| 13 | + easeOutCubic: function (x, t, b, c, d) { | |
| 14 | + return c*((t=t/d-1)*t*t + 1) + b; | |
| 15 | + } | |
| 16 | +}); | |
| 17 | + | |
| 18 | +/* | |
| 19 | + 12/20/08 | |
| 20 | + SliderJS | |
| 21 | + Jquery plugin for smooth and pretty sliding divs | |
| 22 | + Copyright (C) 2008 Jeremy Fry | |
| 23 | + | |
| 24 | + This program is free software: you can redistribute it and/or modify | |
| 25 | + it under the terms of the GNU General Public License as published by | |
| 26 | + the Free Software Foundation, either version 3 of the License, or | |
| 27 | + (at your option) any later version. | |
| 28 | + | |
| 29 | + This program is distributed in the hope that it will be useful, | |
| 30 | + but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 31 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 32 | + GNU General Public License for more details. | |
| 33 | + | |
| 34 | + You should have received a copy of the GNU General Public License | |
| 35 | + along with this program. If not, see <http://www.gnu.org/licenses/>. | |
| 36 | +*/ | |
| 37 | + | |
| 38 | + | |
| 39 | +jQuery.iSliderJS = { | |
| 40 | + build : function(user_options) | |
| 41 | + { | |
| 42 | + var defaults = { | |
| 43 | + direction:"horizontal", | |
| 44 | + list_width: 6740, | |
| 45 | + window_width: 500, | |
| 46 | + window_height: 350, | |
| 47 | + pikachoose: false | |
| 48 | + }; | |
| 49 | + return $(this).each(function(){ | |
| 50 | + //declare variables. God knows I've missed half of them I'll use | |
| 51 | + var options = $.extend(defaults, user_options); | |
| 52 | + var acceleration = 0; | |
| 53 | + var initx = 0; //intial | |
| 54 | + var inity = 0; | |
| 55 | + var movex = []; | |
| 56 | + var downtime = 0; | |
| 57 | + | |
| 58 | + //wrap the list in a sliderjs div. | |
| 59 | + $(this).wrap("<div class='sliderjs'></div>"); | |
| 60 | + var $sliderul = $(this); | |
| 61 | + var $sliderjs = $(this).parent("<div>"); | |
| 62 | + var divcss = { | |
| 63 | + width: options.window_width+"px", | |
| 64 | + height: options.window_height+"px", | |
| 65 | + overflow:"hidden", | |
| 66 | + position:"relative" | |
| 67 | + }; | |
| 68 | + var ulcss = { | |
| 69 | + position: "relative", | |
| 70 | + width: options.list_width+"px" | |
| 71 | + }; | |
| 72 | + $sliderjs.css(divcss); | |
| 73 | + $sliderul.css(ulcss); | |
| 74 | + //TODO:add a scroll bar and buttons maybe. | |
| 75 | + if($.browser.msie){ | |
| 76 | + //$sliderjs.children().mousedown(function(){ return true;}); | |
| 77 | + $sliderul.children().mousedown(function(){ | |
| 78 | + return false;}); | |
| 79 | + $sliderul.children().children().mousedown(function(){ | |
| 80 | + return false;}); | |
| 81 | + } | |
| 82 | + | |
| 83 | + //mouse fucntions for tosses | |
| 84 | + $sliderjs.bind('selectstart', function() { | |
| 85 | + return false; | |
| 86 | + }); | |
| 87 | + $sliderjs.bind("mousedown", function(e){ | |
| 88 | + $sliderul.stop(); | |
| 89 | + $sliderul.dequeue(); | |
| 90 | + movex.splice(0); | |
| 91 | + initx = e.pageX; | |
| 92 | + var date = new Date(); | |
| 93 | + downtime = date.getTime(); | |
| 94 | + var xlen = 0; | |
| 95 | + var ulinitx = $sliderul.position().left; | |
| 96 | + $().bind("mousemove", function(e){ | |
| 97 | + //track the mouse movements | |
| 98 | + //duplicates cause some issues. Though moving only one direction would | |
| 99 | + //cause this. it tends to be unintentional | |
| 100 | + if(movex[xlen-1]!=e.pageX){ | |
| 101 | + xlen = movex.push(e.pageX); | |
| 102 | + } | |
| 103 | + | |
| 104 | + //keep trimming our array | |
| 105 | + if(xlen>10){ | |
| 106 | + movex.splice(0,6); | |
| 107 | + xlen = movex.push(e.pageX); | |
| 108 | + } | |
| 109 | + | |
| 110 | + //track direction of last three movements. if directions changes reset time | |
| 111 | + if(movex.length>3){ | |
| 112 | + if((movex[xlen-3]>=movex[xlen-2]) &&(movex[xlen-2]>=movex[xlen-1])){ | |
| 113 | + }else if((movex[xlen-3]<=movex[xlen-2]) &&(movex[xlen-2]<=movex[xlen-1])){ | |
| 114 | + }else{ | |
| 115 | + //if we made it here the user has changed direction so now we need to reset the time | |
| 116 | + //downtime = date.getTime(); | |
| 117 | + } | |
| 118 | + } | |
| 119 | + | |
| 120 | + //move the list around well the mouse is pressed | |
| 121 | + var newleft = parseInt(ulinitx, 10)+parseInt((e.pageX-initx)/1.5, 10); | |
| 122 | + if(newleft<((options.list_width*-1)+parseInt(options.window_width, 10)-50)){ | |
| 123 | + newleft=((options.list_width*-1)+parseInt(options.window_width, 10)-50); | |
| 124 | + } | |
| 125 | + if(newleft>50){newleft=50;} | |
| 126 | + //$('.pika_navigation').html(newleft); | |
| 127 | + $sliderul.css("left",newleft+"px"); | |
| 128 | + }); | |
| 129 | + $().bind("mouseup", MeatAndPatatos); | |
| 130 | + return false; | |
| 131 | + }); | |
| 132 | + | |
| 133 | + function Animate(xvalue){ | |
| 134 | + $sliderul.stop(); | |
| 135 | + $sliderul.dequeue(); | |
| 136 | + $sliderul.animate({ | |
| 137 | + left:xvalue+"px" | |
| 138 | + },1500,"easeOutCubic"); | |
| 139 | + } | |
| 140 | + | |
| 141 | + //TODO: find a better name for this func... nevermind I like it | |
| 142 | + function MeatAndPatatos(e){ | |
| 143 | + $().unbind("mousemove"); | |
| 144 | + $().unbind("mouseup", MeatAndPatatos); | |
| 145 | + var date = new Date(); | |
| 146 | + var uptime = date.getTime(); | |
| 147 | + | |
| 148 | + //calculate velocity... did math class just pay off? | |
| 149 | + var velocity = (movex[movex.length-1]*100-movex[movex.length-2]*100)/(uptime-downtime); | |
| 150 | + var distance = movex[movex.length-1]-movex[movex.length-2]; | |
| 151 | + var negative = 1; | |
| 152 | + //they're both negative when they get multiplied together we're going to end up with a positive | |
| 153 | + if(distance<0){ | |
| 154 | + negative = -1; | |
| 155 | + } | |
| 156 | + var ulinitx = $sliderul.position().left; | |
| 157 | + var animateleft = parseInt(ulinitx, 10)+(velocity * distance * negative)/2; | |
| 158 | + if(animateleft<(options.list_width*-1)+parseInt(options.window_width, 10)){ | |
| 159 | + animateleft=(options.list_width*-1)+parseInt(options.window_width, 10); | |
| 160 | + } | |
| 161 | + //alert(animateleft); | |
| 162 | + if(animateleft>0){animateleft=0;} | |
| 163 | + //now that we have velocity figure out the distance to go and the time | |
| 164 | + if(isNaN(animateleft)){}else{ | |
| 165 | + Animate(animateleft); | |
| 166 | + } | |
| 167 | + | |
| 168 | + } | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + function MoveToLi(){ | |
| 173 | + var pos = $(this).parent('li').position(); | |
| 174 | + var width = $(this).css("width").slice(0,-2); | |
| 175 | + var lileft = pos.left; | |
| 176 | + var liright = parseInt(pos.left, 10)+parseInt(width, 10); | |
| 177 | + var ulleft = $sliderul.position().left; | |
| 178 | + //find out if the li is inside the viewable area | |
| 179 | + //first find range of viewable values | |
| 180 | + var low = ulleft*-1; | |
| 181 | + var high = low+options.window_width; | |
| 182 | + //is my li in that? | |
| 183 | + if((lileft>=low)&&(liright<=high)){ | |
| 184 | + //viewable we're gravy | |
| 185 | + return; | |
| 186 | + }else{ | |
| 187 | + //uh oh! not viewable lets slide | |
| 188 | + //find how far outside view we are | |
| 189 | + var slide =0; | |
| 190 | + if(lileft<low){ | |
| 191 | + //i know it seems like we should subtract.. however we have | |
| 192 | + //negatives people! (I'm really writing this for me so I don't change | |
| 193 | + //it later. :( | |
| 194 | + slide = parseInt(lileft, 10)*-1; | |
| 195 | + }else{ | |
| 196 | + slide = ((liright-high)*-1)+parseInt(ulleft, 10); | |
| 197 | + } | |
| 198 | + | |
| 199 | + Animate(slide); | |
| 200 | + } | |
| 201 | + | |
| 202 | + } | |
| 203 | + | |
| 204 | + if(options.pikachoose){ | |
| 205 | + var $lis = $sliderul.children('li'); | |
| 206 | + $lis.children().bind("click", MoveToLi); | |
| 207 | + | |
| 208 | + } | |
| 209 | + }); | |
| 210 | + | |
| 211 | + } | |
| 212 | +}; | |
| 213 | +jQuery.fn.SliderJS = jQuery.iSliderJS.build; | |
| 0 | 214 | \ No newline at end of file | ... | ... |
public/stylesheets/folder.css
| ... | ... | @@ -0,0 +1,54 @@ |
| 1 | +body { | |
| 2 | + background-color:#000; | |
| 3 | + color:white; | |
| 4 | + padding-top:20px; | |
| 5 | + text-align: center; | |
| 6 | +} | |
| 7 | + | |
| 8 | +/* These hieghts and widths should be edited to your images */ | |
| 9 | +ul#slideshow { | |
| 10 | + padding-left: 0; | |
| 11 | + margin: 0 auto; | |
| 12 | +} | |
| 13 | + | |
| 14 | +a, a:link, a:visited { | |
| 15 | + color: #FFF; | |
| 16 | + text-decoration: bold; | |
| 17 | +} | |
| 18 | + | |
| 19 | +.back-button { | |
| 20 | + position: absolute; | |
| 21 | + right: 10px; | |
| 22 | + margin: 0px; | |
| 23 | + top: 3px | |
| 24 | +} | |
| 25 | + | |
| 26 | +.pika_main { | |
| 27 | + width: 680px; | |
| 28 | + height: 510px; | |
| 29 | + padding-right: 20px; | |
| 30 | + margin: 0 auto; | |
| 31 | + overflow: hidden; | |
| 32 | +} | |
| 33 | + | |
| 34 | +#slideshow li { | |
| 35 | + margin: 5px; | |
| 36 | + float: left; | |
| 37 | + border: 2px solid #222; | |
| 38 | +} | |
| 39 | + | |
| 40 | +/* thats all you NEED to edit. But continue if you'd like. */ | |
| 41 | +ul#slideshow li img{position:relative;cursor:pointer;} | |
| 42 | +.pika_main img{border:5px solid #222;} | |
| 43 | +.pika_main{position: relative;margin:0 auto;} | |
| 44 | +.pikachoose li{float:left;position:relative;overflow:hidden;list-style:none;} | |
| 45 | +.pika_play{position:absolute;top:10px;right:20px;z-index:1;} | |
| 46 | +.pika_play a{position:relative;margin-left:auto;cursor:pointer;} | |
| 47 | +.pika_play img{border:none !important;} | |
| 48 | +.pika_caption{width:100%;height:30px;text-align:center;} | |
| 49 | +.pika_navigation a{font-size: 12px;color:white;text-decoration: none;} | |
| 50 | +.pika_navigation a:hover{text-decoration: underline;} | |
| 51 | +.pika_navigation{padding-top:10px;clear:both;text-align:center;} | |
| 52 | + | |
| 53 | +/* SliderJS */ | |
| 54 | +.sliderjs{margin:0 auto;} | ... | ... |
test/functional/content_viewer_controller_test.rb
| ... | ... | @@ -717,4 +717,11 @@ class ContentViewerControllerTest < Test::Unit::TestCase |
| 717 | 717 | assert_template 'view_page' |
| 718 | 718 | end |
| 719 | 719 | |
| 720 | + should 'render slideshow template' do | |
| 721 | + f = Folder.create!(:name => 'gallery', :profile => profile) | |
| 722 | + get :view_page, :profile => profile.identifier, :page => f.explode_path, :slideshow => true | |
| 723 | + | |
| 724 | + assert_template 'slideshow' | |
| 725 | + end | |
| 726 | + | |
| 720 | 727 | end | ... | ... |