corrade-nucleus-nucleons – Blame information for rev 20

Subversion Repositories:
Rev:
Rev Author Line No. Line
20 office 1 /*! ========================================================================
2 * Bootstrap Toggle: bootstrap2-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-large'
52 : this.options.size === 'small' ? 'btn-small'
53 : this.options.size === 'mini' ? 'btn-mini'
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.width(), $toggleOff.width())+($toggleHandle.outerWidth()/2)
77 var height = this.options.height || Math.max($toggleOn.height(), $toggleOff.height())
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);