PageRenderTime 53ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 1ms

/catalog/view/javascript/jquery/nivo-slider/jquery.nivo.slider.js

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