Added mobile-flavoured filtering buttons
[flowspy] / static / js / engage.itoggle-min.js
1 /*---------------\r
2  * jQuery iToggle Plugin by Engage Interactive\r
3  * Examples and documentation at: http://labs.engageinteractive.co.uk/itoggle/\r
4  * Copyright (c) 2009 Engage Interactive\r
5  * Version: 1.0 (10-JUN-2009)\r
6  * Dual licensed under the MIT and GPL licenses:\r
7  * http://www.opensource.org/licenses/mit-license.php\r
8  * http://www.gnu.org/licenses/gpl.html\r
9  * Requires: jQuery v1.3 or later\r
10 ---------------*/\r
11 \r
12 (function($){\r
13         $.fn.iToggle = function(options) {\r
14                 \r
15                 clickEnabled = true;\r
16                 \r
17                 var defaults = {\r
18                         type: 'checkbox',\r
19                         keepLabel: true,\r
20                         easing: false,\r
21                         speed: 200,\r
22                         onClick: function(){},\r
23                         onClickOn: function(){},\r
24                         onClickOff: function(){},\r
25                         onSlide: function(){},\r
26                         onSlideOn: function(){},\r
27                         onSlideOff: function(){}\r
28                 },\r
29                 settings = $.extend({}, defaults, options);\r
30                 \r
31                 this.each(function(){\r
32                         var $this = $(this);\r
33                         if($this.attr('tagName') == 'INPUT'){\r
34                                 var id=$this.attr('id');\r
35                                 label(settings.keepLabel, id);\r
36                                 $this.addClass('iT_checkbox').before('<label class="itoggle" for="'+id+'"><span></span></label>');\r
37                                 if($this.attr('checked')){\r
38                                         $this.prev('label').addClass('iTon');\r
39                                 }else{\r
40                                         $this.prev('label').addClass('iToff');\r
41                                 }\r
42                         }else{\r
43                                 $this.children('input:'+settings.type).each(function(){\r
44                                         var id = $(this).attr('id');\r
45                                         label(settings.keepLabel, id);\r
46                                         $(this).addClass('iT_checkbox').before('<label class="itoggle" for="'+id+'"><span></span></label>');\r
47                                         if($(this).attr('checked')){\r
48                                                 $(this).prev('label').addClass('iTon');\r
49                                         }else{\r
50                                                 $(this).prev('label').addClass('iToff');\r
51                                         }\r
52                                         if(settings.type == 'radio'){\r
53                                                 $(this).prev('label').addClass('iT_radio');\r
54                                         }\r
55                                 });\r
56                         }\r
57                 });\r
58                 \r
59                 function label(e, id){\r
60                         if(e == true){\r
61                                 if(settings.type == 'radio'){\r
62                                         $('label[for='+id+']').addClass('ilabel_radio');\r
63                                 }else{\r
64                                         $('label[for='+id+']').addClass('ilabel');\r
65                                 }\r
66                         }else{\r
67                                 $('label[for='+id+']').remove();\r
68                         }\r
69                 }\r
70 \r
71                 $('label.itoggle').click(function(){\r
72                         if(clickEnabled == true){\r
73                                 clickEnabled = false;\r
74                                 if($(this).hasClass('iT_radio')){\r
75                                         if($(this).hasClass('iTon')){\r
76                                                 clickEnabled = true;\r
77                                         }else{\r
78                                                 slide($(this), true);\r
79                                         }\r
80                                 }else{\r
81                                         slide($(this));\r
82                                 }\r
83                         }\r
84                         return false;\r
85                 });\r
86                 $('label.ilabel').click(function(){\r
87                         if(clickEnabled == true){\r
88                                 clickEnabled = false;\r
89                                 slide($(this).next('label.itoggle'));\r
90                         }\r
91                         return false;\r
92                 });\r
93                 \r
94                 function slide($object, radio){\r
95                         settings.onClick.call($object); //Generic click callback for click at any state\r
96                         h=$object.innerHeight();\r
97                         t=$object.attr('for');\r
98                         if($object.hasClass('iTon')){\r
99                                 settings.onClickOff.call($object); //Click that turns the toggle to off position\r
100                                 $object.animate({backgroundPosition:'100% -'+h+'px'}, settings.speed, settings.easing, function(){\r
101                                         $object.removeClass('iTon').addClass('iToff');\r
102                                         clickEnabled = true;\r
103                                         settings.onSlide.call(this); //Generic callback after the slide has finnished\r
104                                         settings.onSlideOff.call(this); //Callback after the slide turns the toggle off\r
105                                 });\r
106                                 $('input#'+t).removeAttr('checked');\r
107                         }else{\r
108                                 settings.onClickOn.call($object);\r
109                                 $object.animate({backgroundPosition:'0% -'+h+'px'}, settings.speed, settings.easing, function(){\r
110                                         $object.removeClass('iToff').addClass('iTon');\r
111                                         clickEnabled = true;\r
112                                         settings.onSlide.call(this); //Generic callback after the slide has finnished\r
113                                         settings.onSlideOn.call(this); //Callback after the slide turns the toggle on\r
114                                 });\r
115                                 $('input#'+t).attr('checked','checked');\r
116                         }\r
117                         if(radio == true){\r
118                                 name = $('#'+t).attr('name');\r
119                                 slide($object.siblings('label[for]'));\r
120                         }\r
121                 }\r
122 \r
123         };\r
124 })(jQuery);