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
13 $.fn.iToggle = function(options) {
\r
15 clickEnabled = true;
\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
29 settings = $.extend({}, defaults, options);
\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
40 $this.prev('label').addClass('iToff');
\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
50 $(this).prev('label').addClass('iToff');
\r
52 if(settings.type == 'radio'){
\r
53 $(this).prev('label').addClass('iT_radio');
\r
59 function label(e, id){
\r
61 if(settings.type == 'radio'){
\r
62 $('label[for='+id+']').addClass('ilabel_radio');
\r
64 $('label[for='+id+']').addClass('ilabel');
\r
67 $('label[for='+id+']').remove();
\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
78 slide($(this), true);
\r
86 $('label.ilabel').click(function(){
\r
87 if(clickEnabled == true){
\r
88 clickEnabled = false;
\r
89 slide($(this).next('label.itoggle'));
\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
106 $('input#'+t).removeAttr('checked');
\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
115 $('input#'+t).attr('checked','checked');
\r
118 name = $('#'+t).attr('name');
\r
119 slide($object.siblings('label[for]'));
\r