PageRenderTime 66ms CodeModel.GetById 29ms RepoModel.GetById 0ms app.codeStats 1ms

/Composite.Media.NivoSlider/Composite.Media.NivoSlider/Package/Frontend/Composite/Media/NivoSlider/jquery.nivo.slider.js

#
JavaScript | 681 lines | 522 code | 76 blank | 83 comment | 126 complexity | c5fafa6a95e9b3199a2a46cc512b40fc MD5 | raw file
Possible License(s): LGPL-2.0, MIT, LGPL-2.1, LGPL-3.0
  1. /*
  2. * The contents of this web application are subject to the Mozilla Public License Version
  3. * 1.1 (the "License"); you may not use this web application except in compliance with
  4. * the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/.
  5. *
  6. * Software distributed under the License is distributed on an "AS IS" basis,
  7. * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  8. * for the specific language governing rights and limitations under the License.
  9. *
  10. * The Original Code is owned by and the Initial Developer of the Original Code is
  11. * Composite A/S (Danish business reg.no. 21744409). All Rights Reserved
  12. *
  13. * Section 11 of the License is EXPRESSLY amended to include a provision stating
  14. * that any dispute, including but not limited to disputes related to the enforcement
  15. * of the License, to which Composite A/S as owner of the Original Code, as Initial
  16. * Developer or in any other role, becomes a part to shall be governed by Danish law
  17. * and be initiated before the Copenhagen City Court ("K�benhavns Byret")
  18. */
  19. /*
  20. * jQuery Nivo Slider v3.2
  21. * http://nivo.dev7studios.com
  22. *
  23. * Copyright 2012, Dev7studios
  24. * Free to use and abuse under the MIT license.
  25. * http://www.opensource.org/licenses/mit-license.php
  26. */
  27. (function($) {
  28. var NivoSlider = function(element, options){
  29. // Defaults are below
  30. var settings = $.extend({}, $.fn.nivoSlider.defaults, options);
  31. // Useful variables. Play carefully.
  32. var vars = {
  33. currentSlide: 0,
  34. currentImage: '',
  35. totalSlides: 0,
  36. running: false,
  37. paused: false,
  38. stop: false,
  39. controlNavEl: false
  40. };
  41. // Get this slider
  42. var slider = $(element);
  43. slider.data('nivo:vars', vars).addClass('nivoSlider');
  44. // Find our slider children
  45. var kids = slider.children();
  46. kids.each(function() {
  47. var child = $(this);
  48. var link = '';
  49. if(!child.is('img')){
  50. if(child.is('a')){
  51. child.addClass('nivo-imageLink');
  52. link = child;
  53. }
  54. child = child.find('img:first');
  55. }
  56. // Get img width & height
  57. var childWidth = (childWidth === 0) ? child.attr('width') : child.width(),
  58. childHeight = (childHeight === 0) ? child.attr('height') : child.height();
  59. if(link !== ''){
  60. link.css('display','none');
  61. }
  62. child.css('display','none');
  63. vars.totalSlides++;
  64. });
  65. // If randomStart
  66. if(settings.randomStart){
  67. settings.startSlide = Math.floor(Math.random() * vars.totalSlides);
  68. }
  69. // Set startSlide
  70. if(settings.startSlide > 0){
  71. if(settings.startSlide >= vars.totalSlides) { settings.startSlide = vars.totalSlides - 1; }
  72. vars.currentSlide = settings.startSlide;
  73. }
  74. // Get initial image
  75. if($(kids[vars.currentSlide]).is('img')){
  76. vars.currentImage = $(kids[vars.currentSlide]);
  77. } else {
  78. vars.currentImage = $(kids[vars.currentSlide]).find('img:first');
  79. }
  80. // Show initial link
  81. if($(kids[vars.currentSlide]).is('a')){
  82. $(kids[vars.currentSlide]).css('display','block');
  83. }
  84. // Set first background
  85. var sliderImg = $('<img/>').addClass('nivo-main-image');
  86. sliderImg.attr('src', vars.currentImage.attr('src')).show();
  87. slider.append(sliderImg);
  88. // Detect Window Resize
  89. $(window).resize(function() {
  90. slider.children('img').width(slider.width());
  91. sliderImg.attr('src', vars.currentImage.attr('src'));
  92. sliderImg.stop().height('auto');
  93. $('.nivo-slice').remove();
  94. $('.nivo-box').remove();
  95. });
  96. //Create caption
  97. slider.append($('<div class="nivo-caption"></div>'));
  98. // Process caption function
  99. var processCaption = function(settings){
  100. var nivoCaption = $('.nivo-caption', slider);
  101. if(vars.currentImage.attr('title') != '' && vars.currentImage.attr('title') != undefined){
  102. var title = vars.currentImage.attr('title');
  103. if(title.substr(0,1) == '#') title = $(title).html();
  104. if(nivoCaption.css('display') == 'block'){
  105. setTimeout(function(){
  106. nivoCaption.html(title);
  107. }, settings.animSpeed);
  108. } else {
  109. nivoCaption.html(title);
  110. nivoCaption.stop().fadeIn(settings.animSpeed);
  111. }
  112. } else {
  113. nivoCaption.stop().fadeOut(settings.animSpeed);
  114. }
  115. }
  116. //Process initial caption
  117. processCaption(settings);
  118. // In the words of Super Mario "let's a go!"
  119. var timer = 0;
  120. if(!settings.manualAdvance && kids.length > 1){
  121. timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
  122. }
  123. // Add Direction nav
  124. if(settings.directionNav){
  125. slider.append('<div class="nivo-directionNav"><a class="nivo-prevNav">'+ settings.prevText +'</a><a class="nivo-nextNav">'+ settings.nextText +'</a></div>');
  126. $(slider).on('click', 'a.nivo-prevNav', function(){
  127. if(vars.running) { return false; }
  128. clearInterval(timer);
  129. timer = '';
  130. vars.currentSlide -= 2;
  131. nivoRun(slider, kids, settings, 'prev');
  132. });
  133. $(slider).on('click', 'a.nivo-nextNav', function(){
  134. if(vars.running) { return false; }
  135. clearInterval(timer);
  136. timer = '';
  137. nivoRun(slider, kids, settings, 'next');
  138. });
  139. }
  140. // Add Control nav
  141. if(settings.controlNav){
  142. vars.controlNavEl = $('<div class="nivo-controlNav"></div>');
  143. slider.after(vars.controlNavEl);
  144. for(var i = 0; i < kids.length; i++){
  145. if(settings.controlNavThumbs){
  146. vars.controlNavEl.addClass('nivo-thumbs-enabled');
  147. var child = kids.eq(i);
  148. if(!child.is('img')){
  149. child = child.find('img:first');
  150. }
  151. if(child.attr('data-thumb')) vars.controlNavEl.append('<a class="nivo-control" rel="'+ i +'"><img src="'+ child.attr('data-thumb') +'" alt="" /></a>');
  152. } else {
  153. vars.controlNavEl.append('<a class="nivo-control" rel="'+ i +'">'+ (i + 1) +'</a>');
  154. }
  155. }
  156. //Set initial active link
  157. $('a:eq('+ vars.currentSlide +')', vars.controlNavEl).addClass('active');
  158. $('a', vars.controlNavEl).bind('click', function(){
  159. if(vars.running) return false;
  160. if($(this).hasClass('active')) return false;
  161. clearInterval(timer);
  162. timer = '';
  163. sliderImg.attr('src', vars.currentImage.attr('src'));
  164. vars.currentSlide = $(this).attr('rel') - 1;
  165. nivoRun(slider, kids, settings, 'control');
  166. });
  167. }
  168. //For pauseOnHover setting
  169. if(settings.pauseOnHover){
  170. slider.hover(function(){
  171. vars.paused = true;
  172. clearInterval(timer);
  173. timer = '';
  174. }, function(){
  175. vars.paused = false;
  176. // Restart the timer
  177. if(timer === '' && !settings.manualAdvance){
  178. timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
  179. }
  180. });
  181. }
  182. // Event when Animation finishes
  183. slider.bind('nivo:animFinished', function(){
  184. sliderImg.attr('src', vars.currentImage.attr('src'));
  185. vars.running = false;
  186. // Hide child links
  187. $(kids).each(function(){
  188. if($(this).is('a')){
  189. $(this).css('display','none');
  190. }
  191. });
  192. // Show current link
  193. if($(kids[vars.currentSlide]).is('a')){
  194. $(kids[vars.currentSlide]).css('display','block');
  195. }
  196. // Restart the timer
  197. if(timer === '' && !vars.paused && !settings.manualAdvance){
  198. timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
  199. }
  200. // Trigger the afterChange callback
  201. settings.afterChange.call(this);
  202. });
  203. // Add slices for slice animations
  204. var createSlices = function(slider, settings, vars) {
  205. if($(vars.currentImage).parent().is('a')) $(vars.currentImage).parent().css('display','block');
  206. $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').width(slider.width()).css('visibility', 'hidden').show();
  207. var sliceHeight = ($('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').parent().is('a')) ? $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').parent().height() : $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').height();
  208. for(var i = 0; i < settings.slices; i++){
  209. var sliceWidth = Math.round(slider.width()/settings.slices);
  210. if(i === settings.slices-1){
  211. slider.append(
  212. $('<div class="nivo-slice" name="'+i+'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block !important; top:0; left:-'+ ((sliceWidth + (i * sliceWidth)) - sliceWidth) +'px;" /></div>').css({
  213. left:(sliceWidth*i)+'px',
  214. width:(slider.width()-(sliceWidth*i))+'px',
  215. height:sliceHeight+'px',
  216. opacity:'0',
  217. overflow:'hidden'
  218. })
  219. );
  220. } else {
  221. slider.append(
  222. $('<div class="nivo-slice" name="'+i+'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block !important; top:0; left:-'+ ((sliceWidth + (i * sliceWidth)) - sliceWidth) +'px;" /></div>').css({
  223. left:(sliceWidth*i)+'px',
  224. width:sliceWidth+'px',
  225. height:sliceHeight+'px',
  226. opacity:'0',
  227. overflow:'hidden'
  228. })
  229. );
  230. }
  231. }
  232. $('.nivo-slice', slider).height(sliceHeight);
  233. sliderImg.stop().animate({
  234. height: $(vars.currentImage).height()
  235. }, settings.animSpeed);
  236. };
  237. // Add boxes for box animations
  238. var createBoxes = function(slider, settings, vars){
  239. if($(vars.currentImage).parent().is('a')) $(vars.currentImage).parent().css('display','block');
  240. $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').width(slider.width()).css('visibility', 'hidden').show();
  241. var boxWidth = Math.round(slider.width()/settings.boxCols),
  242. boxHeight = Math.round($('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').height() / settings.boxRows);
  243. for(var rows = 0; rows < settings.boxRows; rows++){
  244. for(var cols = 0; cols < settings.boxCols; cols++){
  245. if(cols === settings.boxCols-1){
  246. slider.append(
  247. $('<div class="nivo-box" name="'+ cols +'" rel="'+ rows +'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block; top:-'+ (boxHeight*rows) +'px; left:-'+ (boxWidth*cols) +'px;" /></div>').css({
  248. opacity:0,
  249. left:(boxWidth*cols)+'px',
  250. top:(boxHeight*rows)+'px',
  251. width:(slider.width()-(boxWidth*cols))+'px'
  252. })
  253. );
  254. $('.nivo-box[name="'+ cols +'"]', slider).height($('.nivo-box[name="'+ cols +'"] img', slider).height()+'px');
  255. } else {
  256. slider.append(
  257. $('<div class="nivo-box" name="'+ cols +'" rel="'+ rows +'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block; top:-'+ (boxHeight*rows) +'px; left:-'+ (boxWidth*cols) +'px;" /></div>').css({
  258. opacity:0,
  259. left:(boxWidth*cols)+'px',
  260. top:(boxHeight*rows)+'px',
  261. width:boxWidth+'px'
  262. })
  263. );
  264. $('.nivo-box[name="'+ cols +'"]', slider).height($('.nivo-box[name="'+ cols +'"] img', slider).height()+'px');
  265. }
  266. }
  267. }
  268. sliderImg.stop().animate({
  269. height: $(vars.currentImage).height()
  270. }, settings.animSpeed);
  271. };
  272. // Private run method
  273. var nivoRun = function(slider, kids, settings, nudge){
  274. // Get our vars
  275. var vars = slider.data('nivo:vars');
  276. // Trigger the lastSlide callback
  277. if(vars && (vars.currentSlide === vars.totalSlides - 1)){
  278. settings.lastSlide.call(this);
  279. }
  280. // Stop
  281. if((!vars || vars.stop) && !nudge) { return false; }
  282. // Trigger the beforeChange callback
  283. settings.beforeChange.call(this);
  284. // Set current background before change
  285. if(!nudge){
  286. sliderImg.attr('src', vars.currentImage.attr('src'));
  287. } else {
  288. if(nudge === 'prev'){
  289. sliderImg.attr('src', vars.currentImage.attr('src'));
  290. }
  291. if(nudge === 'next'){
  292. sliderImg.attr('src', vars.currentImage.attr('src'));
  293. }
  294. }
  295. vars.currentSlide++;
  296. // Trigger the slideshowEnd callback
  297. if(vars.currentSlide === vars.totalSlides){
  298. vars.currentSlide = 0;
  299. settings.slideshowEnd.call(this);
  300. }
  301. if(vars.currentSlide < 0) { vars.currentSlide = (vars.totalSlides - 1); }
  302. // Set vars.currentImage
  303. if($(kids[vars.currentSlide]).is('img')){
  304. vars.currentImage = $(kids[vars.currentSlide]);
  305. } else {
  306. vars.currentImage = $(kids[vars.currentSlide]).find('img:first');
  307. }
  308. // Set active links
  309. if(settings.controlNav){
  310. $('a', vars.controlNavEl).removeClass('active');
  311. $('a:eq('+ vars.currentSlide +')', vars.controlNavEl).addClass('active');
  312. }
  313. // Process caption
  314. processCaption(settings);
  315. // Remove any slices from last transition
  316. $('.nivo-slice', slider).remove();
  317. // Remove any boxes from last transition
  318. $('.nivo-box', slider).remove();
  319. var currentEffect = settings.effect,
  320. anims = '';
  321. // Generate random effect
  322. if(settings.effect === 'random'){
  323. anims = new Array('sliceDownRight','sliceDownLeft','sliceUpRight','sliceUpLeft','sliceUpDown','sliceUpDownLeft','fold','fade',
  324. 'boxRandom','boxRain','boxRainReverse','boxRainGrow','boxRainGrowReverse');
  325. currentEffect = anims[Math.floor(Math.random()*(anims.length + 1))];
  326. if(currentEffect === undefined) { currentEffect = 'fade'; }
  327. }
  328. // Run random effect from specified set (eg: effect:'fold,fade')
  329. if(settings.effect.indexOf(',') !== -1){
  330. anims = settings.effect.split(',');
  331. currentEffect = anims[Math.floor(Math.random()*(anims.length))];
  332. if(currentEffect === undefined) { currentEffect = 'fade'; }
  333. }
  334. // Custom transition as defined by "data-transition" attribute
  335. if(vars.currentImage.attr('data-transition')){
  336. currentEffect = vars.currentImage.attr('data-transition');
  337. }
  338. // Run effects
  339. vars.running = true;
  340. var timeBuff = 0,
  341. i = 0,
  342. slices = '',
  343. firstSlice = '',
  344. totalBoxes = '',
  345. boxes = '';
  346. if(currentEffect === 'sliceDown' || currentEffect === 'sliceDownRight' || currentEffect === 'sliceDownLeft'){
  347. createSlices(slider, settings, vars);
  348. timeBuff = 0;
  349. i = 0;
  350. slices = $('.nivo-slice', slider);
  351. if(currentEffect === 'sliceDownLeft') { slices = $('.nivo-slice', slider)._reverse(); }
  352. slices.each(function(){
  353. var slice = $(this);
  354. slice.css({ 'top': '0px' });
  355. if(i === settings.slices-1){
  356. setTimeout(function(){
  357. slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
  358. }, (100 + timeBuff));
  359. } else {
  360. setTimeout(function(){
  361. slice.animate({opacity:'1.0' }, settings.animSpeed);
  362. }, (100 + timeBuff));
  363. }
  364. timeBuff += 50;
  365. i++;
  366. });
  367. } else if(currentEffect === 'sliceUp' || currentEffect === 'sliceUpRight' || currentEffect === 'sliceUpLeft'){
  368. createSlices(slider, settings, vars);
  369. timeBuff = 0;
  370. i = 0;
  371. slices = $('.nivo-slice', slider);
  372. if(currentEffect === 'sliceUpLeft') { slices = $('.nivo-slice', slider)._reverse(); }
  373. slices.each(function(){
  374. var slice = $(this);
  375. slice.css({ 'bottom': '0px' });
  376. if(i === settings.slices-1){
  377. setTimeout(function(){
  378. slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
  379. }, (100 + timeBuff));
  380. } else {
  381. setTimeout(function(){
  382. slice.animate({opacity:'1.0' }, settings.animSpeed);
  383. }, (100 + timeBuff));
  384. }
  385. timeBuff += 50;
  386. i++;
  387. });
  388. } else if(currentEffect === 'sliceUpDown' || currentEffect === 'sliceUpDownRight' || currentEffect === 'sliceUpDownLeft'){
  389. createSlices(slider, settings, vars);
  390. timeBuff = 0;
  391. i = 0;
  392. var v = 0;
  393. slices = $('.nivo-slice', slider);
  394. if(currentEffect === 'sliceUpDownLeft') { slices = $('.nivo-slice', slider)._reverse(); }
  395. slices.each(function(){
  396. var slice = $(this);
  397. if(i === 0){
  398. slice.css('top','0px');
  399. i++;
  400. } else {
  401. slice.css('bottom','0px');
  402. i = 0;
  403. }
  404. if(v === settings.slices-1){
  405. setTimeout(function(){
  406. slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
  407. }, (100 + timeBuff));
  408. } else {
  409. setTimeout(function(){
  410. slice.animate({opacity:'1.0' }, settings.animSpeed);
  411. }, (100 + timeBuff));
  412. }
  413. timeBuff += 50;
  414. v++;
  415. });
  416. } else if(currentEffect === 'fold'){
  417. createSlices(slider, settings, vars);
  418. timeBuff = 0;
  419. i = 0;
  420. $('.nivo-slice', slider).each(function(){
  421. var slice = $(this);
  422. var origWidth = slice.width();
  423. slice.css({ top:'0px', width:'0px' });
  424. if(i === settings.slices-1){
  425. setTimeout(function(){
  426. slice.animate({ width:origWidth, opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
  427. }, (100 + timeBuff));
  428. } else {
  429. setTimeout(function(){
  430. slice.animate({ width:origWidth, opacity:'1.0' }, settings.animSpeed);
  431. }, (100 + timeBuff));
  432. }
  433. timeBuff += 50;
  434. i++;
  435. });
  436. } else if(currentEffect === 'fade'){
  437. createSlices(slider, settings, vars);
  438. firstSlice = $('.nivo-slice:first', slider);
  439. firstSlice.css({
  440. 'width': slider.width() + 'px'
  441. });
  442. firstSlice.animate({ opacity:'1.0' }, (settings.animSpeed*2), '', function(){ slider.trigger('nivo:animFinished'); });
  443. } else if(currentEffect === 'slideInRight'){
  444. createSlices(slider, settings, vars);
  445. firstSlice = $('.nivo-slice:first', slider);
  446. firstSlice.css({
  447. 'width': '0px',
  448. 'opacity': '1'
  449. });
  450. firstSlice.animate({ width: slider.width() + 'px' }, (settings.animSpeed*2), '', function(){ slider.trigger('nivo:animFinished'); });
  451. } else if(currentEffect === 'slideInLeft'){
  452. createSlices(slider, settings, vars);
  453. firstSlice = $('.nivo-slice:first', slider);
  454. firstSlice.css({
  455. 'width': '0px',
  456. 'opacity': '1',
  457. 'left': '',
  458. 'right': '0px'
  459. });
  460. firstSlice.animate({ width: slider.width() + 'px' }, (settings.animSpeed*2), '', function(){
  461. // Reset positioning
  462. firstSlice.css({
  463. 'left': '0px',
  464. 'right': ''
  465. });
  466. slider.trigger('nivo:animFinished');
  467. });
  468. } else if(currentEffect === 'boxRandom'){
  469. createBoxes(slider, settings, vars);
  470. totalBoxes = settings.boxCols * settings.boxRows;
  471. i = 0;
  472. timeBuff = 0;
  473. boxes = shuffle($('.nivo-box', slider));
  474. boxes.each(function(){
  475. var box = $(this);
  476. if(i === totalBoxes-1){
  477. setTimeout(function(){
  478. box.animate({ opacity:'1' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
  479. }, (100 + timeBuff));
  480. } else {
  481. setTimeout(function(){
  482. box.animate({ opacity:'1' }, settings.animSpeed);
  483. }, (100 + timeBuff));
  484. }
  485. timeBuff += 20;
  486. i++;
  487. });
  488. } else if(currentEffect === 'boxRain' || currentEffect === 'boxRainReverse' || currentEffect === 'boxRainGrow' || currentEffect === 'boxRainGrowReverse'){
  489. createBoxes(slider, settings, vars);
  490. totalBoxes = settings.boxCols * settings.boxRows;
  491. i = 0;
  492. timeBuff = 0;
  493. // Split boxes into 2D array
  494. var rowIndex = 0;
  495. var colIndex = 0;
  496. var box2Darr = [];
  497. box2Darr[rowIndex] = [];
  498. boxes = $('.nivo-box', slider);
  499. if(currentEffect === 'boxRainReverse' || currentEffect === 'boxRainGrowReverse'){
  500. boxes = $('.nivo-box', slider)._reverse();
  501. }
  502. boxes.each(function(){
  503. box2Darr[rowIndex][colIndex] = $(this);
  504. colIndex++;
  505. if(colIndex === settings.boxCols){
  506. rowIndex++;
  507. colIndex = 0;
  508. box2Darr[rowIndex] = [];
  509. }
  510. });
  511. // Run animation
  512. for(var cols = 0; cols < (settings.boxCols * 2); cols++){
  513. var prevCol = cols;
  514. for(var rows = 0; rows < settings.boxRows; rows++){
  515. if(prevCol >= 0 && prevCol < settings.boxCols){
  516. /* Due to some weird JS bug with loop vars
  517. being used in setTimeout, this is wrapped
  518. with an anonymous function call */
  519. (function(row, col, time, i, totalBoxes) {
  520. var box = $(box2Darr[row][col]);
  521. var w = box.width();
  522. var h = box.height();
  523. if(currentEffect === 'boxRainGrow' || currentEffect === 'boxRainGrowReverse'){
  524. box.width(0).height(0);
  525. }
  526. if(i === totalBoxes-1){
  527. setTimeout(function(){
  528. box.animate({ opacity:'1', width:w, height:h }, settings.animSpeed/1.3, '', function(){ slider.trigger('nivo:animFinished'); });
  529. }, (100 + time));
  530. } else {
  531. setTimeout(function(){
  532. box.animate({ opacity:'1', width:w, height:h }, settings.animSpeed/1.3);
  533. }, (100 + time));
  534. }
  535. })(rows, prevCol, timeBuff, i, totalBoxes);
  536. i++;
  537. }
  538. prevCol--;
  539. }
  540. timeBuff += 100;
  541. }
  542. }
  543. };
  544. // Shuffle an array
  545. var shuffle = function(arr){
  546. for(var j, x, i = arr.length; i; j = parseInt(Math.random() * i, 10), x = arr[--i], arr[i] = arr[j], arr[j] = x);
  547. return arr;
  548. };
  549. // For debugging
  550. var trace = function(msg){
  551. if(this.console && typeof console.log !== 'undefined') { console.log(msg); }
  552. };
  553. // Start / Stop
  554. this.stop = function(){
  555. if(!$(element).data('nivo:vars').stop){
  556. $(element).data('nivo:vars').stop = true;
  557. trace('Stop Slider');
  558. }
  559. };
  560. this.start = function(){
  561. if($(element).data('nivo:vars').stop){
  562. $(element).data('nivo:vars').stop = false;
  563. trace('Start Slider');
  564. }
  565. };
  566. // Trigger the afterLoad callback
  567. settings.afterLoad.call(this);
  568. return this;
  569. };
  570. $.fn.nivoSlider = function(options) {
  571. return this.each(function(key, value){
  572. var element = $(this);
  573. // Return early if this element already has a plugin instance
  574. if (element.data('nivoslider')) { return element.data('nivoslider'); }
  575. // Pass options to plugin constructor
  576. var nivoslider = new NivoSlider(this, options);
  577. // Store plugin object in this element's data
  578. element.data('nivoslider', nivoslider);
  579. });
  580. };
  581. //Default settings
  582. $.fn.nivoSlider.defaults = {
  583. effect: 'random',
  584. slices: 15,
  585. boxCols: 8,
  586. boxRows: 4,
  587. animSpeed: 500,
  588. pauseTime: 3000,
  589. startSlide: 0,
  590. directionNav: true,
  591. controlNav: true,
  592. controlNavThumbs: false,
  593. pauseOnHover: true,
  594. manualAdvance: false,
  595. prevText: 'Prev',
  596. nextText: 'Next',
  597. randomStart: false,
  598. beforeChange: function(){},
  599. afterChange: function(){},
  600. slideshowEnd: function(){},
  601. lastSlide: function(){},
  602. afterLoad: function(){}
  603. };
  604. $.fn._reverse = [].reverse;
  605. })(jQuery);