spree_slider 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (126) hide show
  1. data/.gitignore +11 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +13 -0
  4. data/Gemfile.lock +210 -0
  5. data/LICENSE +26 -0
  6. data/README.textile +43 -0
  7. data/Rakefile +1 -0
  8. data/Versionfile +10 -0
  9. data/app/controllers/spree/admin/slides_controller.rb +8 -0
  10. data/app/models/spree/slide.rb +4 -0
  11. data/app/overrides/add_slider_to_layout.rb +8 -0
  12. data/app/overrides/add_slides_to_admin_configurations_menu.rb +9 -0
  13. data/app/overrides/add_slides_to_admin_configurations_sidebar_menu.rb +7 -0
  14. data/app/views/spree/admin/slides/_form.html.erb +21 -0
  15. data/app/views/spree/admin/slides/edit.html.erb +10 -0
  16. data/app/views/spree/admin/slides/index.html.erb +35 -0
  17. data/app/views/spree/admin/slides/new.html.erb +9 -0
  18. data/app/views/spree/admin/slides/show.html.erb +41 -0
  19. data/app/views/spree/home/index.html.erb +14 -0
  20. data/config/locales/en.yml +5 -0
  21. data/config/routes.rb +5 -0
  22. data/db/migrate/20120222184238_create_slides.rb +16 -0
  23. data/lib/generators/spree_slider/install_anything_generator.rb +30 -0
  24. data/lib/generators/spree_slider/install_nivo_generator.rb +34 -0
  25. data/lib/generators/spree_slider/templates/anything_slider.html.erb +26 -0
  26. data/lib/generators/spree_slider/templates/nivo_slider.html.erb +38 -0
  27. data/lib/spree_slider/engine.rb +23 -0
  28. data/lib/spree_slider.rb +2 -0
  29. data/script/rails +5 -0
  30. data/spec/spec_helper.rb +32 -0
  31. data/spree_slider.gemspec +26 -0
  32. data/vendor/assets/anything-slider/README.textile +13 -0
  33. data/vendor/assets/anything-slider/css/anythingslider-ie.css +45 -0
  34. data/vendor/assets/anything-slider/css/anythingslider.css +204 -0
  35. data/vendor/assets/anything-slider/css/theme-construction.css +142 -0
  36. data/vendor/assets/anything-slider/css/theme-cs-portfolio.css +148 -0
  37. data/vendor/assets/anything-slider/css/theme-metallic.css +146 -0
  38. data/vendor/assets/anything-slider/css/theme-minimalist-round.css +144 -0
  39. data/vendor/assets/anything-slider/css/theme-minimalist-square.css +144 -0
  40. data/vendor/assets/anything-slider/demos/colorbox/border.png +0 -0
  41. data/vendor/assets/anything-slider/demos/colorbox/colorbox.css +62 -0
  42. data/vendor/assets/anything-slider/demos/colorbox/controls.png +0 -0
  43. data/vendor/assets/anything-slider/demos/colorbox/internet_explorer/borderBottomCenter.png +0 -0
  44. data/vendor/assets/anything-slider/demos/colorbox/internet_explorer/borderBottomLeft.png +0 -0
  45. data/vendor/assets/anything-slider/demos/colorbox/internet_explorer/borderBottomRight.png +0 -0
  46. data/vendor/assets/anything-slider/demos/colorbox/internet_explorer/borderMiddleLeft.png +0 -0
  47. data/vendor/assets/anything-slider/demos/colorbox/internet_explorer/borderMiddleRight.png +0 -0
  48. data/vendor/assets/anything-slider/demos/colorbox/internet_explorer/borderTopCenter.png +0 -0
  49. data/vendor/assets/anything-slider/demos/colorbox/internet_explorer/borderTopLeft.png +0 -0
  50. data/vendor/assets/anything-slider/demos/colorbox/internet_explorer/borderTopRight.png +0 -0
  51. data/vendor/assets/anything-slider/demos/colorbox/jquery.colorbox-min.js +4 -0
  52. data/vendor/assets/anything-slider/demos/colorbox/jquery.colorbox.js +769 -0
  53. data/vendor/assets/anything-slider/demos/colorbox/loading.gif +0 -0
  54. data/vendor/assets/anything-slider/demos/colorbox/loading_background.png +0 -0
  55. data/vendor/assets/anything-slider/demos/colorbox/overlay.png +0 -0
  56. data/vendor/assets/anything-slider/demos/css/page.css +148 -0
  57. data/vendor/assets/anything-slider/demos/images/251356.jpg +0 -0
  58. data/vendor/assets/anything-slider/demos/images/apple-touch-icon.png +0 -0
  59. data/vendor/assets/anything-slider/demos/images/favicon.ico +0 -0
  60. data/vendor/assets/anything-slider/demos/images/slide-civil-1.jpg +0 -0
  61. data/vendor/assets/anything-slider/demos/images/slide-civil-2.jpg +0 -0
  62. data/vendor/assets/anything-slider/demos/images/slide-env-1.jpg +0 -0
  63. data/vendor/assets/anything-slider/demos/images/slide-env-2.jpg +0 -0
  64. data/vendor/assets/anything-slider/demos/images/slide-tele-1.jpg +0 -0
  65. data/vendor/assets/anything-slider/demos/images/slide-tele-2.jpg +0 -0
  66. data/vendor/assets/anything-slider/demos/images/th-slide-civil-1.jpg +0 -0
  67. data/vendor/assets/anything-slider/demos/images/th-slide-civil-2.jpg +0 -0
  68. data/vendor/assets/anything-slider/demos/images/th-slide-env-1.jpg +0 -0
  69. data/vendor/assets/anything-slider/demos/images/th-slide-env-2.jpg +0 -0
  70. data/vendor/assets/anything-slider/demos/js/demo.js +132 -0
  71. data/vendor/assets/anything-slider/demos/video/movie.mp4 +0 -0
  72. data/vendor/assets/anything-slider/demos/video/movie.ogg +0 -0
  73. data/vendor/assets/anything-slider/demos/video/movie.webm +0 -0
  74. data/vendor/assets/anything-slider/demos.html +740 -0
  75. data/vendor/assets/anything-slider/expand.html +97 -0
  76. data/vendor/assets/anything-slider/images/arrows-metallic.png +0 -0
  77. data/vendor/assets/anything-slider/images/arrows-minimalist.png +0 -0
  78. data/vendor/assets/anything-slider/images/construction.gif +0 -0
  79. data/vendor/assets/anything-slider/images/cs-portfolio.png +0 -0
  80. data/vendor/assets/anything-slider/images/default.png +0 -0
  81. data/vendor/assets/anything-slider/index.html +470 -0
  82. data/vendor/assets/anything-slider/js/jquery.anythingslider.fx.js +165 -0
  83. data/vendor/assets/anything-slider/js/jquery.anythingslider.fx.min.js +6 -0
  84. data/vendor/assets/anything-slider/js/jquery.anythingslider.js +791 -0
  85. data/vendor/assets/anything-slider/js/jquery.anythingslider.min.js +7 -0
  86. data/vendor/assets/anything-slider/js/jquery.anythingslider.video.js +367 -0
  87. data/vendor/assets/anything-slider/js/jquery.anythingslider.video.min.js +8 -0
  88. data/vendor/assets/anything-slider/js/jquery.easing.1.2.js +140 -0
  89. data/vendor/assets/anything-slider/js/jquery.min.js +18 -0
  90. data/vendor/assets/anything-slider/js/swfobject.js +4 -0
  91. data/vendor/assets/anything-slider/license.txt +165 -0
  92. data/vendor/assets/anything-slider/simple.html +79 -0
  93. data/vendor/assets/anything-slider/video.html +341 -0
  94. data/vendor/assets/nivo-slider/README +1 -0
  95. data/vendor/assets/nivo-slider/demo/demo.html +39 -0
  96. data/vendor/assets/nivo-slider/demo/images/dev7logo.png +0 -0
  97. data/vendor/assets/nivo-slider/demo/images/nemo.jpg +0 -0
  98. data/vendor/assets/nivo-slider/demo/images/toystory.jpg +0 -0
  99. data/vendor/assets/nivo-slider/demo/images/up.jpg +0 -0
  100. data/vendor/assets/nivo-slider/demo/images/walle.jpg +0 -0
  101. data/vendor/assets/nivo-slider/demo/scripts/jquery-1.6.1.min.js +18 -0
  102. data/vendor/assets/nivo-slider/demo/style.css +100 -0
  103. data/vendor/assets/nivo-slider/jquery.nivo.slider.js +685 -0
  104. data/vendor/assets/nivo-slider/jquery.nivo.slider.pack.js +67 -0
  105. data/vendor/assets/nivo-slider/license.txt +22 -0
  106. data/vendor/assets/nivo-slider/nivo-slider.css +89 -0
  107. data/vendor/assets/nivo-slider/themes/default/arrows.png +0 -0
  108. data/vendor/assets/nivo-slider/themes/default/bullets.png +0 -0
  109. data/vendor/assets/nivo-slider/themes/default/default.css +74 -0
  110. data/vendor/assets/nivo-slider/themes/default/loading.gif +0 -0
  111. data/vendor/assets/nivo-slider/themes/orman/arrows.png +0 -0
  112. data/vendor/assets/nivo-slider/themes/orman/bullets.png +0 -0
  113. data/vendor/assets/nivo-slider/themes/orman/loading.gif +0 -0
  114. data/vendor/assets/nivo-slider/themes/orman/orman.css +98 -0
  115. data/vendor/assets/nivo-slider/themes/orman/readme.txt +1 -0
  116. data/vendor/assets/nivo-slider/themes/orman/ribbon.png +0 -0
  117. data/vendor/assets/nivo-slider/themes/orman/slider.png +0 -0
  118. data/vendor/assets/nivo-slider/themes/pascal/bullets.png +0 -0
  119. data/vendor/assets/nivo-slider/themes/pascal/controlnav.png +0 -0
  120. data/vendor/assets/nivo-slider/themes/pascal/featured.png +0 -0
  121. data/vendor/assets/nivo-slider/themes/pascal/loading.gif +0 -0
  122. data/vendor/assets/nivo-slider/themes/pascal/pascal.css +102 -0
  123. data/vendor/assets/nivo-slider/themes/pascal/readme.txt +1 -0
  124. data/vendor/assets/nivo-slider/themes/pascal/ribbon.png +0 -0
  125. data/vendor/assets/nivo-slider/themes/pascal/slider.png +0 -0
  126. metadata +236 -0
@@ -0,0 +1,685 @@
1
+ /*
2
+ * jQuery Nivo Slider v2.6
3
+ * http://nivo.dev7studios.com
4
+ *
5
+ * Copyright 2011, Gilbert Pellegrom
6
+ * Free to use and abuse under the MIT license.
7
+ * http://www.opensource.org/licenses/mit-license.php
8
+ *
9
+ * March 2010
10
+ */
11
+
12
+ (function($) {
13
+
14
+ var NivoSlider = function(element, options){
15
+ //Defaults are below
16
+ var settings = $.extend({}, $.fn.nivoSlider.defaults, options);
17
+
18
+ //Useful variables. Play carefully.
19
+ var vars = {
20
+ currentSlide: 0,
21
+ currentImage: '',
22
+ totalSlides: 0,
23
+ randAnim: '',
24
+ running: false,
25
+ paused: false,
26
+ stop: false
27
+ };
28
+
29
+ //Get this slider
30
+ var slider = $(element);
31
+ slider.data('nivo:vars', vars);
32
+ slider.css('position','relative');
33
+ slider.addClass('nivoSlider');
34
+
35
+ //Find our slider children
36
+ var kids = slider.children();
37
+ kids.each(function() {
38
+ var child = $(this);
39
+ var link = '';
40
+ if(!child.is('img')){
41
+ if(child.is('a')){
42
+ child.addClass('nivo-imageLink');
43
+ link = child;
44
+ }
45
+ child = child.find('img:first');
46
+ }
47
+ //Get img width & height
48
+ var childWidth = child.width();
49
+ if(childWidth == 0) childWidth = child.attr('width');
50
+ var childHeight = child.height();
51
+ if(childHeight == 0) childHeight = child.attr('height');
52
+ //Resize the slider
53
+ if(childWidth > slider.width()){
54
+ slider.width(childWidth);
55
+ }
56
+ if(childHeight > slider.height()){
57
+ slider.height(childHeight);
58
+ }
59
+ if(link != ''){
60
+ link.css('display','none');
61
+ }
62
+ child.css('display','none');
63
+ vars.totalSlides++;
64
+ });
65
+
66
+ //Set startSlide
67
+ if(settings.startSlide > 0){
68
+ if(settings.startSlide >= vars.totalSlides) settings.startSlide = vars.totalSlides - 1;
69
+ vars.currentSlide = settings.startSlide;
70
+ }
71
+
72
+ //Get initial image
73
+ if($(kids[vars.currentSlide]).is('img')){
74
+ vars.currentImage = $(kids[vars.currentSlide]);
75
+ } else {
76
+ vars.currentImage = $(kids[vars.currentSlide]).find('img:first');
77
+ }
78
+
79
+ //Show initial link
80
+ if($(kids[vars.currentSlide]).is('a')){
81
+ $(kids[vars.currentSlide]).css('display','block');
82
+ }
83
+
84
+ //Set first background
85
+ slider.css('background','url("'+ vars.currentImage.attr('src') +'") no-repeat');
86
+
87
+ //Create caption
88
+ slider.append(
89
+ $('<div class="nivo-caption"><p></p></div>').css({ display:'none', opacity:settings.captionOpacity })
90
+ );
91
+
92
+ // Process caption function
93
+ var processCaption = function(settings){
94
+ var nivoCaption = $('.nivo-caption', slider);
95
+ if(vars.currentImage.attr('title') != '' && vars.currentImage.attr('title') != undefined){
96
+ var title = vars.currentImage.attr('title');
97
+ if(title.substr(0,1) == '#') title = $(title).html();
98
+
99
+ if(nivoCaption.css('display') == 'block'){
100
+ nivoCaption.find('p').fadeOut(settings.animSpeed, function(){
101
+ $(this).html(title);
102
+ $(this).fadeIn(settings.animSpeed);
103
+ });
104
+ } else {
105
+ nivoCaption.find('p').html(title);
106
+ }
107
+ nivoCaption.fadeIn(settings.animSpeed);
108
+ } else {
109
+ nivoCaption.fadeOut(settings.animSpeed);
110
+ }
111
+ }
112
+
113
+ //Process initial caption
114
+ processCaption(settings);
115
+
116
+ //In the words of Super Mario "let's a go!"
117
+ var timer = 0;
118
+ if(!settings.manualAdvance && kids.length > 1){
119
+ timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
120
+ }
121
+
122
+ //Add Direction nav
123
+ if(settings.directionNav){
124
+ slider.append('<div class="nivo-directionNav"><a class="nivo-prevNav">'+ settings.prevText +'</a><a class="nivo-nextNav">'+ settings.nextText +'</a></div>');
125
+
126
+ //Hide Direction nav
127
+ if(settings.directionNavHide){
128
+ $('.nivo-directionNav', slider).hide();
129
+ slider.hover(function(){
130
+ $('.nivo-directionNav', slider).show();
131
+ }, function(){
132
+ $('.nivo-directionNav', slider).hide();
133
+ });
134
+ }
135
+
136
+ $('a.nivo-prevNav', slider).live('click', function(){
137
+ if(vars.running) return false;
138
+ clearInterval(timer);
139
+ timer = '';
140
+ vars.currentSlide -= 2;
141
+ nivoRun(slider, kids, settings, 'prev');
142
+ });
143
+
144
+ $('a.nivo-nextNav', slider).live('click', function(){
145
+ if(vars.running) return false;
146
+ clearInterval(timer);
147
+ timer = '';
148
+ nivoRun(slider, kids, settings, 'next');
149
+ });
150
+ }
151
+
152
+ //Add Control nav
153
+ if(settings.controlNav){
154
+ var nivoControl = $('<div class="nivo-controlNav"></div>');
155
+ slider.append(nivoControl);
156
+ for(var i = 0; i < kids.length; i++){
157
+ if(settings.controlNavThumbs){
158
+ var child = kids.eq(i);
159
+ if(!child.is('img')){
160
+ child = child.find('img:first');
161
+ }
162
+ if (settings.controlNavThumbsFromRel) {
163
+ nivoControl.append('<a class="nivo-control" rel="'+ i +'"><img src="'+ child.attr('rel') + '" alt="" /></a>');
164
+ } else {
165
+ nivoControl.append('<a class="nivo-control" rel="'+ i +'"><img src="'+ child.attr('src').replace(settings.controlNavThumbsSearch, settings.controlNavThumbsReplace) +'" alt="" /></a>');
166
+ }
167
+ } else {
168
+ nivoControl.append('<a class="nivo-control" rel="'+ i +'">'+ (i + 1) +'</a>');
169
+ }
170
+
171
+ }
172
+ //Set initial active link
173
+ $('.nivo-controlNav a:eq('+ vars.currentSlide +')', slider).addClass('active');
174
+
175
+ $('.nivo-controlNav a', slider).live('click', function(){
176
+ if(vars.running) return false;
177
+ if($(this).hasClass('active')) return false;
178
+ clearInterval(timer);
179
+ timer = '';
180
+ slider.css('background','url("'+ vars.currentImage.attr('src') +'") no-repeat');
181
+ vars.currentSlide = $(this).attr('rel') - 1;
182
+ nivoRun(slider, kids, settings, 'control');
183
+ });
184
+ }
185
+
186
+ //Keyboard Navigation
187
+ if(settings.keyboardNav){
188
+ $(window).keypress(function(event){
189
+ //Left
190
+ if(event.keyCode == '37'){
191
+ if(vars.running) return false;
192
+ clearInterval(timer);
193
+ timer = '';
194
+ vars.currentSlide-=2;
195
+ nivoRun(slider, kids, settings, 'prev');
196
+ }
197
+ //Right
198
+ if(event.keyCode == '39'){
199
+ if(vars.running) return false;
200
+ clearInterval(timer);
201
+ timer = '';
202
+ nivoRun(slider, kids, settings, 'next');
203
+ }
204
+ });
205
+ }
206
+
207
+ //For pauseOnHover setting
208
+ if(settings.pauseOnHover){
209
+ slider.hover(function(){
210
+ vars.paused = true;
211
+ clearInterval(timer);
212
+ timer = '';
213
+ }, function(){
214
+ vars.paused = false;
215
+ //Restart the timer
216
+ if(timer == '' && !settings.manualAdvance){
217
+ timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
218
+ }
219
+ });
220
+ }
221
+
222
+ //Event when Animation finishes
223
+ slider.bind('nivo:animFinished', function(){
224
+ vars.running = false;
225
+ //Hide child links
226
+ $(kids).each(function(){
227
+ if($(this).is('a')){
228
+ $(this).css('display','none');
229
+ }
230
+ });
231
+ //Show current link
232
+ if($(kids[vars.currentSlide]).is('a')){
233
+ $(kids[vars.currentSlide]).css('display','block');
234
+ }
235
+ //Restart the timer
236
+ if(timer == '' && !vars.paused && !settings.manualAdvance){
237
+ timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
238
+ }
239
+ //Trigger the afterChange callback
240
+ settings.afterChange.call(this);
241
+ });
242
+
243
+ // Add slices for slice animations
244
+ var createSlices = function(slider, settings, vars){
245
+ for(var i = 0; i < settings.slices; i++){
246
+ var sliceWidth = Math.round(slider.width()/settings.slices);
247
+ if(i == settings.slices-1){
248
+ slider.append(
249
+ $('<div class="nivo-slice"></div>').css({
250
+ left:(sliceWidth*i)+'px', width:(slider.width()-(sliceWidth*i))+'px',
251
+ height:'0px',
252
+ opacity:'0',
253
+ background: 'url("'+ vars.currentImage.attr('src') +'") no-repeat -'+ ((sliceWidth + (i * sliceWidth)) - sliceWidth) +'px 0%'
254
+ })
255
+ );
256
+ } else {
257
+ slider.append(
258
+ $('<div class="nivo-slice"></div>').css({
259
+ left:(sliceWidth*i)+'px', width:sliceWidth+'px',
260
+ height:'0px',
261
+ opacity:'0',
262
+ background: 'url("'+ vars.currentImage.attr('src') +'") no-repeat -'+ ((sliceWidth + (i * sliceWidth)) - sliceWidth) +'px 0%'
263
+ })
264
+ );
265
+ }
266
+ }
267
+ }
268
+
269
+ // Add boxes for box animations
270
+ var createBoxes = function(slider, settings, vars){
271
+ var boxWidth = Math.round(slider.width()/settings.boxCols);
272
+ var boxHeight = Math.round(slider.height()/settings.boxRows);
273
+
274
+ for(var rows = 0; rows < settings.boxRows; rows++){
275
+ for(var cols = 0; cols < settings.boxCols; cols++){
276
+ if(cols == settings.boxCols-1){
277
+ slider.append(
278
+ $('<div class="nivo-box"></div>').css({
279
+ opacity:0,
280
+ left:(boxWidth*cols)+'px',
281
+ top:(boxHeight*rows)+'px',
282
+ width:(slider.width()-(boxWidth*cols))+'px',
283
+ height:boxHeight+'px',
284
+ background: 'url("'+ vars.currentImage.attr('src') +'") no-repeat -'+ ((boxWidth + (cols * boxWidth)) - boxWidth) +'px -'+ ((boxHeight + (rows * boxHeight)) - boxHeight) +'px'
285
+ })
286
+ );
287
+ } else {
288
+ slider.append(
289
+ $('<div class="nivo-box"></div>').css({
290
+ opacity:0,
291
+ left:(boxWidth*cols)+'px',
292
+ top:(boxHeight*rows)+'px',
293
+ width:boxWidth+'px',
294
+ height:boxHeight+'px',
295
+ background: 'url("'+ vars.currentImage.attr('src') +'") no-repeat -'+ ((boxWidth + (cols * boxWidth)) - boxWidth) +'px -'+ ((boxHeight + (rows * boxHeight)) - boxHeight) +'px'
296
+ })
297
+ );
298
+ }
299
+ }
300
+ }
301
+ }
302
+
303
+ // Private run method
304
+ var nivoRun = function(slider, kids, settings, nudge){
305
+ //Get our vars
306
+ var vars = slider.data('nivo:vars');
307
+
308
+ //Trigger the lastSlide callback
309
+ if(vars && (vars.currentSlide == vars.totalSlides - 1)){
310
+ settings.lastSlide.call(this);
311
+ }
312
+
313
+ // Stop
314
+ if((!vars || vars.stop) && !nudge) return false;
315
+
316
+ //Trigger the beforeChange callback
317
+ settings.beforeChange.call(this);
318
+
319
+ //Set current background before change
320
+ if(!nudge){
321
+ slider.css('background','url("'+ vars.currentImage.attr('src') +'") no-repeat');
322
+ } else {
323
+ if(nudge == 'prev'){
324
+ slider.css('background','url("'+ vars.currentImage.attr('src') +'") no-repeat');
325
+ }
326
+ if(nudge == 'next'){
327
+ slider.css('background','url("'+ vars.currentImage.attr('src') +'") no-repeat');
328
+ }
329
+ }
330
+ vars.currentSlide++;
331
+ //Trigger the slideshowEnd callback
332
+ if(vars.currentSlide == vars.totalSlides){
333
+ vars.currentSlide = 0;
334
+ settings.slideshowEnd.call(this);
335
+ }
336
+ if(vars.currentSlide < 0) vars.currentSlide = (vars.totalSlides - 1);
337
+ //Set vars.currentImage
338
+ if($(kids[vars.currentSlide]).is('img')){
339
+ vars.currentImage = $(kids[vars.currentSlide]);
340
+ } else {
341
+ vars.currentImage = $(kids[vars.currentSlide]).find('img:first');
342
+ }
343
+
344
+ //Set active links
345
+ if(settings.controlNav){
346
+ $('.nivo-controlNav a', slider).removeClass('active');
347
+ $('.nivo-controlNav a:eq('+ vars.currentSlide +')', slider).addClass('active');
348
+ }
349
+
350
+ //Process caption
351
+ processCaption(settings);
352
+
353
+ // Remove any slices from last transition
354
+ $('.nivo-slice', slider).remove();
355
+
356
+ // Remove any boxes from last transition
357
+ $('.nivo-box', slider).remove();
358
+
359
+ if(settings.effect == 'random'){
360
+ var anims = new Array('sliceDownRight','sliceDownLeft','sliceUpRight','sliceUpLeft','sliceUpDown','sliceUpDownLeft','fold','fade',
361
+ 'boxRandom','boxRain','boxRainReverse','boxRainGrow','boxRainGrowReverse');
362
+ vars.randAnim = anims[Math.floor(Math.random()*(anims.length + 1))];
363
+ if(vars.randAnim == undefined) vars.randAnim = 'fade';
364
+ }
365
+
366
+ //Run random effect from specified set (eg: effect:'fold,fade')
367
+ if(settings.effect.indexOf(',') != -1){
368
+ var anims = settings.effect.split(',');
369
+ vars.randAnim = anims[Math.floor(Math.random()*(anims.length))];
370
+ if(vars.randAnim == undefined) vars.randAnim = 'fade';
371
+ }
372
+
373
+ //Run effects
374
+ vars.running = true;
375
+ if(settings.effect == 'sliceDown' || settings.effect == 'sliceDownRight' || vars.randAnim == 'sliceDownRight' ||
376
+ settings.effect == 'sliceDownLeft' || vars.randAnim == 'sliceDownLeft'){
377
+ createSlices(slider, settings, vars);
378
+ var timeBuff = 0;
379
+ var i = 0;
380
+ var slices = $('.nivo-slice', slider);
381
+ if(settings.effect == 'sliceDownLeft' || vars.randAnim == 'sliceDownLeft') slices = $('.nivo-slice', slider)._reverse();
382
+
383
+ slices.each(function(){
384
+ var slice = $(this);
385
+ slice.css({ 'top': '0px' });
386
+ if(i == settings.slices-1){
387
+ setTimeout(function(){
388
+ slice.animate({ height:'100%', opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
389
+ }, (100 + timeBuff));
390
+ } else {
391
+ setTimeout(function(){
392
+ slice.animate({ height:'100%', opacity:'1.0' }, settings.animSpeed);
393
+ }, (100 + timeBuff));
394
+ }
395
+ timeBuff += 50;
396
+ i++;
397
+ });
398
+ }
399
+ else if(settings.effect == 'sliceUp' || settings.effect == 'sliceUpRight' || vars.randAnim == 'sliceUpRight' ||
400
+ settings.effect == 'sliceUpLeft' || vars.randAnim == 'sliceUpLeft'){
401
+ createSlices(slider, settings, vars);
402
+ var timeBuff = 0;
403
+ var i = 0;
404
+ var slices = $('.nivo-slice', slider);
405
+ if(settings.effect == 'sliceUpLeft' || vars.randAnim == 'sliceUpLeft') slices = $('.nivo-slice', slider)._reverse();
406
+
407
+ slices.each(function(){
408
+ var slice = $(this);
409
+ slice.css({ 'bottom': '0px' });
410
+ if(i == settings.slices-1){
411
+ setTimeout(function(){
412
+ slice.animate({ height:'100%', opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
413
+ }, (100 + timeBuff));
414
+ } else {
415
+ setTimeout(function(){
416
+ slice.animate({ height:'100%', opacity:'1.0' }, settings.animSpeed);
417
+ }, (100 + timeBuff));
418
+ }
419
+ timeBuff += 50;
420
+ i++;
421
+ });
422
+ }
423
+ else if(settings.effect == 'sliceUpDown' || settings.effect == 'sliceUpDownRight' || vars.randAnim == 'sliceUpDown' ||
424
+ settings.effect == 'sliceUpDownLeft' || vars.randAnim == 'sliceUpDownLeft'){
425
+ createSlices(slider, settings, vars);
426
+ var timeBuff = 0;
427
+ var i = 0;
428
+ var v = 0;
429
+ var slices = $('.nivo-slice', slider);
430
+ if(settings.effect == 'sliceUpDownLeft' || vars.randAnim == 'sliceUpDownLeft') slices = $('.nivo-slice', slider)._reverse();
431
+
432
+ slices.each(function(){
433
+ var slice = $(this);
434
+ if(i == 0){
435
+ slice.css('top','0px');
436
+ i++;
437
+ } else {
438
+ slice.css('bottom','0px');
439
+ i = 0;
440
+ }
441
+
442
+ if(v == settings.slices-1){
443
+ setTimeout(function(){
444
+ slice.animate({ height:'100%', opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
445
+ }, (100 + timeBuff));
446
+ } else {
447
+ setTimeout(function(){
448
+ slice.animate({ height:'100%', opacity:'1.0' }, settings.animSpeed);
449
+ }, (100 + timeBuff));
450
+ }
451
+ timeBuff += 50;
452
+ v++;
453
+ });
454
+ }
455
+ else if(settings.effect == 'fold' || vars.randAnim == 'fold'){
456
+ createSlices(slider, settings, vars);
457
+ var timeBuff = 0;
458
+ var i = 0;
459
+
460
+ $('.nivo-slice', slider).each(function(){
461
+ var slice = $(this);
462
+ var origWidth = slice.width();
463
+ slice.css({ top:'0px', height:'100%', width:'0px' });
464
+ if(i == settings.slices-1){
465
+ setTimeout(function(){
466
+ slice.animate({ width:origWidth, opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
467
+ }, (100 + timeBuff));
468
+ } else {
469
+ setTimeout(function(){
470
+ slice.animate({ width:origWidth, opacity:'1.0' }, settings.animSpeed);
471
+ }, (100 + timeBuff));
472
+ }
473
+ timeBuff += 50;
474
+ i++;
475
+ });
476
+ }
477
+ else if(settings.effect == 'fade' || vars.randAnim == 'fade'){
478
+ createSlices(slider, settings, vars);
479
+
480
+ var firstSlice = $('.nivo-slice:first', slider);
481
+ firstSlice.css({
482
+ 'height': '100%',
483
+ 'width': slider.width() + 'px'
484
+ });
485
+
486
+ firstSlice.animate({ opacity:'1.0' }, (settings.animSpeed*2), '', function(){ slider.trigger('nivo:animFinished'); });
487
+ }
488
+ else if(settings.effect == 'slideInRight' || vars.randAnim == 'slideInRight'){
489
+ createSlices(slider, settings, vars);
490
+
491
+ var firstSlice = $('.nivo-slice:first', slider);
492
+ firstSlice.css({
493
+ 'height': '100%',
494
+ 'width': '0px',
495
+ 'opacity': '1'
496
+ });
497
+
498
+ firstSlice.animate({ width: slider.width() + 'px' }, (settings.animSpeed*2), '', function(){ slider.trigger('nivo:animFinished'); });
499
+ }
500
+ else if(settings.effect == 'slideInLeft' || vars.randAnim == 'slideInLeft'){
501
+ createSlices(slider, settings, vars);
502
+
503
+ var firstSlice = $('.nivo-slice:first', slider);
504
+ firstSlice.css({
505
+ 'height': '100%',
506
+ 'width': '0px',
507
+ 'opacity': '1',
508
+ 'left': '',
509
+ 'right': '0px'
510
+ });
511
+
512
+ firstSlice.animate({ width: slider.width() + 'px' }, (settings.animSpeed*2), '', function(){
513
+ // Reset positioning
514
+ firstSlice.css({
515
+ 'left': '0px',
516
+ 'right': ''
517
+ });
518
+ slider.trigger('nivo:animFinished');
519
+ });
520
+ }
521
+ else if(settings.effect == 'boxRandom' || vars.randAnim == 'boxRandom'){
522
+ createBoxes(slider, settings, vars);
523
+
524
+ var totalBoxes = settings.boxCols * settings.boxRows;
525
+ var i = 0;
526
+ var timeBuff = 0;
527
+
528
+ var boxes = shuffle($('.nivo-box', slider));
529
+ boxes.each(function(){
530
+ var box = $(this);
531
+ if(i == totalBoxes-1){
532
+ setTimeout(function(){
533
+ box.animate({ opacity:'1' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
534
+ }, (100 + timeBuff));
535
+ } else {
536
+ setTimeout(function(){
537
+ box.animate({ opacity:'1' }, settings.animSpeed);
538
+ }, (100 + timeBuff));
539
+ }
540
+ timeBuff += 20;
541
+ i++;
542
+ });
543
+ }
544
+ else if(settings.effect == 'boxRain' || vars.randAnim == 'boxRain' || settings.effect == 'boxRainReverse' || vars.randAnim == 'boxRainReverse' ||
545
+ settings.effect == 'boxRainGrow' || vars.randAnim == 'boxRainGrow' || settings.effect == 'boxRainGrowReverse' || vars.randAnim == 'boxRainGrowReverse'){
546
+ createBoxes(slider, settings, vars);
547
+
548
+ var totalBoxes = settings.boxCols * settings.boxRows;
549
+ var i = 0;
550
+ var timeBuff = 0;
551
+
552
+ // Split boxes into 2D array
553
+ var rowIndex = 0;
554
+ var colIndex = 0;
555
+ var box2Darr = new Array();
556
+ box2Darr[rowIndex] = new Array();
557
+ var boxes = $('.nivo-box', slider);
558
+ if(settings.effect == 'boxRainReverse' || vars.randAnim == 'boxRainReverse' ||
559
+ settings.effect == 'boxRainGrowReverse' || vars.randAnim == 'boxRainGrowReverse'){
560
+ boxes = $('.nivo-box', slider)._reverse();
561
+ }
562
+ boxes.each(function(){
563
+ box2Darr[rowIndex][colIndex] = $(this);
564
+ colIndex++;
565
+ if(colIndex == settings.boxCols){
566
+ rowIndex++;
567
+ colIndex = 0;
568
+ box2Darr[rowIndex] = new Array();
569
+ }
570
+ });
571
+
572
+ // Run animation
573
+ for(var cols = 0; cols < (settings.boxCols * 2); cols++){
574
+ var prevCol = cols;
575
+ for(var rows = 0; rows < settings.boxRows; rows++){
576
+ if(prevCol >= 0 && prevCol < settings.boxCols){
577
+ /* Due to some weird JS bug with loop vars
578
+ being used in setTimeout, this is wrapped
579
+ with an anonymous function call */
580
+ (function(row, col, time, i, totalBoxes) {
581
+ var box = $(box2Darr[row][col]);
582
+ var w = box.width();
583
+ var h = box.height();
584
+ if(settings.effect == 'boxRainGrow' || vars.randAnim == 'boxRainGrow' ||
585
+ settings.effect == 'boxRainGrowReverse' || vars.randAnim == 'boxRainGrowReverse'){
586
+ box.width(0).height(0);
587
+ }
588
+ if(i == totalBoxes-1){
589
+ setTimeout(function(){
590
+ box.animate({ opacity:'1', width:w, height:h }, settings.animSpeed/1.3, '', function(){ slider.trigger('nivo:animFinished'); });
591
+ }, (100 + time));
592
+ } else {
593
+ setTimeout(function(){
594
+ box.animate({ opacity:'1', width:w, height:h }, settings.animSpeed/1.3);
595
+ }, (100 + time));
596
+ }
597
+ })(rows, prevCol, timeBuff, i, totalBoxes);
598
+ i++;
599
+ }
600
+ prevCol--;
601
+ }
602
+ timeBuff += 100;
603
+ }
604
+ }
605
+ }
606
+
607
+ // Shuffle an array
608
+ var shuffle = function(arr){
609
+ for(var j, x, i = arr.length; i; j = parseInt(Math.random() * i), x = arr[--i], arr[i] = arr[j], arr[j] = x);
610
+ return arr;
611
+ }
612
+
613
+ // For debugging
614
+ var trace = function(msg){
615
+ if (this.console && typeof console.log != "undefined")
616
+ console.log(msg);
617
+ }
618
+
619
+ // Start / Stop
620
+ this.stop = function(){
621
+ if(!$(element).data('nivo:vars').stop){
622
+ $(element).data('nivo:vars').stop = true;
623
+ trace('Stop Slider');
624
+ }
625
+ }
626
+
627
+ this.start = function(){
628
+ if($(element).data('nivo:vars').stop){
629
+ $(element).data('nivo:vars').stop = false;
630
+ trace('Start Slider');
631
+ }
632
+ }
633
+
634
+ //Trigger the afterLoad callback
635
+ settings.afterLoad.call(this);
636
+
637
+ return this;
638
+ };
639
+
640
+ $.fn.nivoSlider = function(options) {
641
+
642
+ return this.each(function(key, value){
643
+ var element = $(this);
644
+ // Return early if this element already has a plugin instance
645
+ if (element.data('nivoslider')) return element.data('nivoslider');
646
+ // Pass options to plugin constructor
647
+ var nivoslider = new NivoSlider(this, options);
648
+ // Store plugin object in this element's data
649
+ element.data('nivoslider', nivoslider);
650
+ });
651
+
652
+ };
653
+
654
+ //Default settings
655
+ $.fn.nivoSlider.defaults = {
656
+ effect: 'random',
657
+ slices: 15,
658
+ boxCols: 8,
659
+ boxRows: 4,
660
+ animSpeed: 500,
661
+ pauseTime: 3000,
662
+ startSlide: 0,
663
+ directionNav: true,
664
+ directionNavHide: true,
665
+ controlNav: true,
666
+ controlNavThumbs: false,
667
+ controlNavThumbsFromRel: false,
668
+ controlNavThumbsSearch: '.jpg',
669
+ controlNavThumbsReplace: '_thumb.jpg',
670
+ keyboardNav: true,
671
+ pauseOnHover: true,
672
+ manualAdvance: false,
673
+ captionOpacity: 0.8,
674
+ prevText: 'Prev',
675
+ nextText: 'Next',
676
+ beforeChange: function(){},
677
+ afterChange: function(){},
678
+ slideshowEnd: function(){},
679
+ lastSlide: function(){},
680
+ afterLoad: function(){}
681
+ };
682
+
683
+ $.fn._reverse = [].reverse;
684
+
685
+ })(jQuery);