Blame view

js/fancyBox/source/helpers/jquery.fancybox-buttons.js 2.97 KB
bf807468   Alex Savenko   first commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
   /*!
   * Buttons helper for fancyBox
   * version: 1.0.5 (Mon, 15 Oct 2012)
   * @requires fancyBox v2.0 or later
   *
   * Usage:
   *     $(".fancybox").fancybox({
   *         helpers : {
   *             buttons: {
   *                 position : 'top'
   *             }
   *         }
   *     });
   *
   */
  (function ($) {
  	//Shortcut for fancyBox object
  	var F = $.fancybox;
  
  	//Add helper object
  	F.helpers.buttons = {
  		defaults : {
  			skipSingle : false, // disables if gallery contains single image
  			position   : 'top', // 'top' or 'bottom'
  			tpl        : '<div id="fancybox-buttons"><ul><li><a class="btnPrev" title="Previous" href="javascript:;"></a></li><li><a class="btnPlay" title="Start slideshow" href="javascript:;"></a></li><li><a class="btnNext" title="Next" href="javascript:;"></a></li><li><a class="btnToggle" title="Toggle size" href="javascript:;"></a></li><li><a class="btnClose" title="Close" href="javascript:;"></a></li></ul></div>'
  		},
  
  		list : null,
  		buttons: null,
  
  		beforeLoad: function (opts, obj) {
  			//Remove self if gallery do not have at least two items
  
  			if (opts.skipSingle && obj.group.length < 2) {
  				obj.helpers.buttons = false;
  				obj.closeBtn = true;
  
  				return;
  			}
  
  			//Increase top margin to give space for buttons
  			obj.margin[ opts.position === 'bottom' ? 2 : 0 ] += 30;
  		},
  
  		onPlayStart: function () {
  			if (this.buttons) {
  				this.buttons.play.attr('title', 'Pause slideshow').addClass('btnPlayOn');
  			}
  		},
  
  		onPlayEnd: function () {
  			if (this.buttons) {
  				this.buttons.play.attr('title', 'Start slideshow').removeClass('btnPlayOn');
  			}
  		},
  
  		afterShow: function (opts, obj) {
  			var buttons = this.buttons;
  
  			if (!buttons) {
  				this.list = $(opts.tpl).addClass(opts.position).appendTo('body');
  
  				buttons = {
  					prev   : this.list.find('.btnPrev').click( F.prev ),
  					next   : this.list.find('.btnNext').click( F.next ),
  					play   : this.list.find('.btnPlay').click( F.play ),
  					toggle : this.list.find('.btnToggle').click( F.toggle ),
  					close  : this.list.find('.btnClose').click( F.close )
  				}
  			}
  
  			//Prev
  			if (obj.index > 0 || obj.loop) {
  				buttons.prev.removeClass('btnDisabled');
  			} else {
  				buttons.prev.addClass('btnDisabled');
  			}
  
  			//Next / Play
  			if (obj.loop || obj.index < obj.group.length - 1) {
  				buttons.next.removeClass('btnDisabled');
  				buttons.play.removeClass('btnDisabled');
  
  			} else {
  				buttons.next.addClass('btnDisabled');
  				buttons.play.addClass('btnDisabled');
  			}
  
  			this.buttons = buttons;
  
  			this.onUpdate(opts, obj);
  		},
  
  		onUpdate: function (opts, obj) {
  			var toggle;
  
  			if (!this.buttons) {
  				return;
  			}
  
  			toggle = this.buttons.toggle.removeClass('btnDisabled btnToggleOn');
  
  			//Size toggle button
  			if (obj.canShrink) {
  				toggle.addClass('btnToggleOn');
  
  			} else if (!obj.canExpand) {
  				toggle.addClass('btnDisabled');
  			}
  		},
  
  		beforeClose: function () {
  			if (this.list) {
  				this.list.remove();
  			}
  
  			this.list    = null;
  			this.buttons = null;
  		}
  	};
  
  }(jQuery));