Subversion Repositories bacoAlunos

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1329 jmachado 1
/*! ========================================================================
2
 * Bootstrap Toggle: bootstrap-toggle.js v2.2.0
3
 * http://www.bootstraptoggle.com
4
 * ========================================================================
5
 * Copyright 2014 Min Hur, The New York Times Company
6
 * Licensed under MIT
7
 * ======================================================================== */
8
 
9
 
10
 +function ($) {
11
        'use strict';
12
 
13
        // TOGGLE PUBLIC CLASS DEFINITION
14
        // ==============================
15
 
16
        var Toggle = function (element, options) {
17
                this.$element  = $(element)
18
                this.options   = $.extend({}, this.defaults(), options)
19
                this.render()
20
        }
21
 
22
        Toggle.VERSION  = '2.2.0'
23
 
24
        Toggle.DEFAULTS = {
25
                on: 'On',
26
                off: 'Off',
27
                onstyle: 'primary',
28
                offstyle: 'default',
29
                size: 'normal',
30
                style: '',
31
                width: null,
32
                height: null
33
        }
34
 
35
        Toggle.prototype.defaults = function() {
36
                return {
37
                        on: this.$element.attr('data-on') || Toggle.DEFAULTS.on,
38
                        off: this.$element.attr('data-off') || Toggle.DEFAULTS.off,
39
                        onstyle: this.$element.attr('data-onstyle') || Toggle.DEFAULTS.onstyle,
40
                        offstyle: this.$element.attr('data-offstyle') || Toggle.DEFAULTS.offstyle,
41
                        size: this.$element.attr('data-size') || Toggle.DEFAULTS.size,
42
                        style: this.$element.attr('data-style') || Toggle.DEFAULTS.style,
43
                        width: this.$element.attr('data-width') || Toggle.DEFAULTS.width,
44
                        height: this.$element.attr('data-height') || Toggle.DEFAULTS.height
45
                }
46
        }
47
 
48
        Toggle.prototype.render = function () {
49
                this._onstyle = 'btn-' + this.options.onstyle
50
                this._offstyle = 'btn-' + this.options.offstyle
51
                var size = this.options.size === 'large' ? 'btn-lg'
52
                        : this.options.size === 'small' ? 'btn-sm'
53
                        : this.options.size === 'mini' ? 'btn-xs'
54
                        : ''
55
                var $toggleOn = $('<label class="btn">').html(this.options.on)
56
                        .addClass(this._onstyle + ' ' + size)
57
                var $toggleOff = $('<label class="btn">').html(this.options.off)
58
                        .addClass(this._offstyle + ' ' + size + ' active')
59
                var $toggleHandle = $('<span class="toggle-handle btn btn-default">')
60
                        .addClass(size)
61
                var $toggleGroup = $('<div class="toggle-group">')
62
                        .append($toggleOn, $toggleOff, $toggleHandle)
63
                var $toggle = $('<div class="toggle btn" data-toggle="toggle">')
64
                        .addClass( this.$element.prop('checked') ? this._onstyle : this._offstyle+' off' )
65
                        .addClass(size).addClass(this.options.style)
66
 
67
                this.$element.wrap($toggle)
68
                $.extend(this, {
69
                        $toggle: this.$element.parent(),
70
                        $toggleOn: $toggleOn,
71
                        $toggleOff: $toggleOff,
72
                        $toggleGroup: $toggleGroup
73
                })
74
                this.$toggle.append($toggleGroup)
75
 
76
                var width = this.options.width || Math.max($toggleOn.outerWidth(), $toggleOff.outerWidth())+($toggleHandle.outerWidth()/2)
77
                var height = this.options.height || Math.max($toggleOn.outerHeight(), $toggleOff.outerHeight())
78
                $toggleOn.addClass('toggle-on')
79
                $toggleOff.addClass('toggle-off')
80
                this.$toggle.css({ width: width, height: height })
81
                if (this.options.height) {
82
                        $toggleOn.css('line-height', $toggleOn.height() + 'px')
83
                        $toggleOff.css('line-height', $toggleOff.height() + 'px')
84
                }
85
                this.update(true)
86
                this.trigger(true)
87
        }
88
 
89
        Toggle.prototype.toggle = function () {
90
                if (this.$element.prop('checked')) this.off()
91
                else this.on()
92
        }
93
 
94
        Toggle.prototype.on = function (silent) {
95
                if (this.$element.prop('disabled')) return false
96
                this.$toggle.removeClass(this._offstyle + ' off').addClass(this._onstyle)
97
                this.$element.prop('checked', true)
98
                if (!silent) this.trigger()
99
        }
100
 
101
        Toggle.prototype.off = function (silent) {
102
                if (this.$element.prop('disabled')) return false
103
                this.$toggle.removeClass(this._onstyle).addClass(this._offstyle + ' off')
104
                this.$element.prop('checked', false)
105
                if (!silent) this.trigger()
106
        }
107
 
108
        Toggle.prototype.enable = function () {
109
                this.$toggle.removeAttr('disabled')
110
                this.$element.prop('disabled', false)
111
        }
112
 
113
        Toggle.prototype.disable = function () {
114
                this.$toggle.attr('disabled', 'disabled')
115
                this.$element.prop('disabled', true)
116
        }
117
 
118
        Toggle.prototype.update = function (silent) {
119
                if (this.$element.prop('disabled')) this.disable()
120
                else this.enable()
121
                if (this.$element.prop('checked')) this.on(silent)
122
                else this.off(silent)
123
        }
124
 
125
        Toggle.prototype.trigger = function (silent) {
126
                this.$element.off('change.bs.toggle')
127
                if (!silent) this.$element.change()
128
                this.$element.on('change.bs.toggle', $.proxy(function() {
129
                        this.update()
130
                }, this))
131
        }
132
 
133
        Toggle.prototype.destroy = function() {
134
                this.$element.off('change.bs.toggle')
135
                this.$toggleGroup.remove()
136
                this.$element.removeData('bs.toggle')
137
                this.$element.unwrap()
138
        }
139
 
140
        // TOGGLE PLUGIN DEFINITION
141
        // ========================
142
 
143
        function Plugin(option) {
144
                return this.each(function () {
145
                        var $this   = $(this)
146
                        var data    = $this.data('bs.toggle')
147
                        var options = typeof option == 'object' && option
148
 
149
                        if (!data) $this.data('bs.toggle', (data = new Toggle(this, options)))
150
                        if (typeof option == 'string' && data[option]) data[option]()
151
                })
152
        }
153
 
154
        var old = $.fn.bootstrapToggle
155
 
156
        $.fn.bootstrapToggle             = Plugin
157
        $.fn.bootstrapToggle.Constructor = Toggle
158
 
159
        // TOGGLE NO CONFLICT
160
        // ==================
161
 
162
        $.fn.toggle.noConflict = function () {
163
                $.fn.bootstrapToggle = old
164
                return this
165
        }
166
 
167
        // TOGGLE DATA-API
168
        // ===============
169
 
170
        $(function() {
171
                $('input[type=checkbox][data-toggle^=toggle]').bootstrapToggle()
172
        })
173
 
174
        $(document).on('click.bs.toggle', 'div[data-toggle^=toggle]', function(e) {
175
                var $checkbox = $(this).find('input[type=checkbox]')
176
                $checkbox.bootstrapToggle('toggle')
177
                e.preventDefault()
178
        })
179
 
180
}(jQuery);