You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							180 lines
						
					
					
						
							5.4 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							180 lines
						
					
					
						
							5.4 KiB
						
					
					
				| /*! ======================================================================== | |
|  * Bootstrap Toggle: bootstrap-toggle.js v2.2.0 | |
|  * http://www.bootstraptoggle.com | |
|  * ======================================================================== | |
|  * Copyright 2014 Min Hur, The New York Times Company | |
|  * Licensed under MIT | |
|  * ======================================================================== */ | |
| 
 | |
| 
 | |
|  +function ($) { | |
|  	'use strict'; | |
| 
 | |
| 	// TOGGLE PUBLIC CLASS DEFINITION | |
| 	// ============================== | |
|  | |
| 	var Toggle = function (element, options) { | |
| 		this.$element  = $(element) | |
| 		this.options   = $.extend({}, this.defaults(), options) | |
| 		this.render() | |
| 	} | |
| 
 | |
| 	Toggle.VERSION  = '2.2.0' | |
| 
 | |
| 	Toggle.DEFAULTS = { | |
| 		on: 'On', | |
| 		off: 'Off', | |
| 		onstyle: 'primary', | |
| 		offstyle: 'default', | |
| 		size: 'normal', | |
| 		style: '', | |
| 		width: null, | |
| 		height: null | |
| 	} | |
| 
 | |
| 	Toggle.prototype.defaults = function() { | |
| 		return { | |
| 			on: this.$element.attr('data-on') || Toggle.DEFAULTS.on, | |
| 			off: this.$element.attr('data-off') || Toggle.DEFAULTS.off, | |
| 			onstyle: this.$element.attr('data-onstyle') || Toggle.DEFAULTS.onstyle, | |
| 			offstyle: this.$element.attr('data-offstyle') || Toggle.DEFAULTS.offstyle, | |
| 			size: this.$element.attr('data-size') || Toggle.DEFAULTS.size, | |
| 			style: this.$element.attr('data-style') || Toggle.DEFAULTS.style, | |
| 			width: this.$element.attr('data-width') || Toggle.DEFAULTS.width, | |
| 			height: this.$element.attr('data-height') || Toggle.DEFAULTS.height | |
| 		} | |
| 	} | |
| 
 | |
| 	Toggle.prototype.render = function () { | |
| 		this._onstyle = 'btn-' + this.options.onstyle | |
| 		this._offstyle = 'btn-' + this.options.offstyle | |
| 		var size = this.options.size === 'large' ? 'btn-lg' | |
| 			: this.options.size === 'small' ? 'btn-sm' | |
| 			: this.options.size === 'mini' ? 'btn-xs' | |
| 			: '' | |
| 		var $toggleOn = $('<label class="btn">').html(this.options.on) | |
| 			.addClass(this._onstyle + ' ' + size) | |
| 		var $toggleOff = $('<label class="btn">').html(this.options.off) | |
| 			.addClass(this._offstyle + ' ' + size + ' active') | |
| 		var $toggleHandle = $('<span class="toggle-handle btn btn-default">') | |
| 			.addClass(size) | |
| 		var $toggleGroup = $('<div class="toggle-group">') | |
| 			.append($toggleOn, $toggleOff, $toggleHandle) | |
| 		var $toggle = $('<div class="toggle btn" data-toggle="toggle">') | |
| 			.addClass( this.$element.prop('checked') ? this._onstyle : this._offstyle+' off' ) | |
| 			.addClass(size).addClass(this.options.style) | |
| 
 | |
| 		this.$element.wrap($toggle) | |
| 		$.extend(this, { | |
| 			$toggle: this.$element.parent(), | |
| 			$toggleOn: $toggleOn, | |
| 			$toggleOff: $toggleOff, | |
| 			$toggleGroup: $toggleGroup | |
| 		}) | |
| 		this.$toggle.append($toggleGroup) | |
| 
 | |
| 		var width = this.options.width || Math.max($toggleOn.outerWidth(), $toggleOff.outerWidth())+($toggleHandle.outerWidth()/2) | |
| 		var height = this.options.height || Math.max($toggleOn.outerHeight(), $toggleOff.outerHeight()) | |
| 		$toggleOn.addClass('toggle-on') | |
| 		$toggleOff.addClass('toggle-off') | |
| 		this.$toggle.css({ width: width, height: height }) | |
| 		if (this.options.height) { | |
| 			$toggleOn.css('line-height', $toggleOn.height() + 'px') | |
| 			$toggleOff.css('line-height', $toggleOff.height() + 'px') | |
| 		} | |
| 		this.update(true) | |
| 		this.trigger(true) | |
| 	} | |
| 
 | |
| 	Toggle.prototype.toggle = function () { | |
| 		if (this.$element.prop('checked')) this.off() | |
| 		else this.on() | |
| 	} | |
| 
 | |
| 	Toggle.prototype.on = function (silent) { | |
| 		if (this.$element.prop('disabled')) return false | |
| 		this.$toggle.removeClass(this._offstyle + ' off').addClass(this._onstyle) | |
| 		this.$element.prop('checked', true) | |
| 		if (!silent) this.trigger() | |
| 	} | |
| 
 | |
| 	Toggle.prototype.off = function (silent) { | |
| 		if (this.$element.prop('disabled')) return false | |
| 		this.$toggle.removeClass(this._onstyle).addClass(this._offstyle + ' off') | |
| 		this.$element.prop('checked', false) | |
| 		if (!silent) this.trigger() | |
| 	} | |
| 
 | |
| 	Toggle.prototype.enable = function () { | |
| 		this.$toggle.removeAttr('disabled') | |
| 		this.$element.prop('disabled', false) | |
| 	} | |
| 
 | |
| 	Toggle.prototype.disable = function () { | |
| 		this.$toggle.attr('disabled', 'disabled') | |
| 		this.$element.prop('disabled', true) | |
| 	} | |
| 
 | |
| 	Toggle.prototype.update = function (silent) { | |
| 		if (this.$element.prop('disabled')) this.disable() | |
| 		else this.enable() | |
| 		if (this.$element.prop('checked')) this.on(silent) | |
| 		else this.off(silent) | |
| 	} | |
| 
 | |
| 	Toggle.prototype.trigger = function (silent) { | |
| 		this.$element.off('change.bs.toggle') | |
| 		if (!silent) this.$element.change() | |
| 		this.$element.on('change.bs.toggle', $.proxy(function() { | |
| 			this.update() | |
| 		}, this)) | |
| 	} | |
| 
 | |
| 	Toggle.prototype.destroy = function() { | |
| 		this.$element.off('change.bs.toggle') | |
| 		this.$toggleGroup.remove() | |
| 		this.$element.removeData('bs.toggle') | |
| 		this.$element.unwrap() | |
| 	} | |
| 
 | |
| 	// TOGGLE PLUGIN DEFINITION | |
| 	// ======================== | |
|  | |
| 	function Plugin(option) { | |
| 		return this.each(function () { | |
| 			var $this   = $(this) | |
| 			var data    = $this.data('bs.toggle') | |
| 			var options = typeof option == 'object' && option | |
| 
 | |
| 			if (!data) $this.data('bs.toggle', (data = new Toggle(this, options))) | |
| 			if (typeof option == 'string' && data[option]) data[option]() | |
| 		}) | |
| 	} | |
| 
 | |
| 	var old = $.fn.bootstrapToggle | |
| 
 | |
| 	$.fn.bootstrapToggle             = Plugin | |
| 	$.fn.bootstrapToggle.Constructor = Toggle | |
| 
 | |
| 	// TOGGLE NO CONFLICT | |
| 	// ================== | |
|  | |
| 	$.fn.toggle.noConflict = function () { | |
| 		$.fn.bootstrapToggle = old | |
| 		return this | |
| 	} | |
| 
 | |
| 	// TOGGLE DATA-API | |
| 	// =============== | |
|  | |
| 	$(function() { | |
| 		$('input[type=checkbox][data-toggle^=toggle]').bootstrapToggle() | |
| 	}) | |
| 
 | |
| 	$(document).on('click.bs.toggle', 'div[data-toggle^=toggle]', function(e) { | |
| 		var $checkbox = $(this).find('input[type=checkbox]') | |
| 		$checkbox.bootstrapToggle('toggle') | |
| 		e.preventDefault() | |
| 	}) | |
| 
 | |
| }(jQuery);
 | |
| 
 |