55 changed files with 45860 additions and 2 deletions
			
			
		
								
									
										File diff suppressed because it is too large
									
								
							
						
					
								
									
										File diff suppressed because one or more lines are too long
									
								
							
						
					@ -0,0 +1,47 @@ | 
				
			|||||
 | 
					/* | 
				
			||||
 | 
					 * DOM element rendering detection | 
				
			||||
 | 
					 * https://davidwalsh.name/detect-node-insertion | 
				
			||||
 | 
					 */ | 
				
			||||
 | 
					@keyframes chartjs-render-animation { | 
				
			||||
 | 
						from { opacity: 0.99; } | 
				
			||||
 | 
						to { opacity: 1; } | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.chartjs-render-monitor { | 
				
			||||
 | 
						animation: chartjs-render-animation 0.001s; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					/* | 
				
			||||
 | 
					 * DOM element resizing detection | 
				
			||||
 | 
					 * https://github.com/marcj/css-element-queries | 
				
			||||
 | 
					 */ | 
				
			||||
 | 
					.chartjs-size-monitor, | 
				
			||||
 | 
					.chartjs-size-monitor-expand, | 
				
			||||
 | 
					.chartjs-size-monitor-shrink { | 
				
			||||
 | 
						position: absolute; | 
				
			||||
 | 
						direction: ltr; | 
				
			||||
 | 
						left: 0; | 
				
			||||
 | 
						top: 0; | 
				
			||||
 | 
						right: 0; | 
				
			||||
 | 
						bottom: 0; | 
				
			||||
 | 
						overflow: hidden; | 
				
			||||
 | 
						pointer-events: none; | 
				
			||||
 | 
						visibility: hidden; | 
				
			||||
 | 
						z-index: -1; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.chartjs-size-monitor-expand > div { | 
				
			||||
 | 
						position: absolute; | 
				
			||||
 | 
						width: 1000000px; | 
				
			||||
 | 
						height: 1000000px; | 
				
			||||
 | 
						left: 0; | 
				
			||||
 | 
						top: 0; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.chartjs-size-monitor-shrink > div { | 
				
			||||
 | 
						position: absolute; | 
				
			||||
 | 
						width: 200%; | 
				
			||||
 | 
						height: 200%; | 
				
			||||
 | 
						left: 0; | 
				
			||||
 | 
						top: 0; | 
				
			||||
 | 
					} | 
				
			||||
								
									
										File diff suppressed because it is too large
									
								
							
						
					@ -0,0 +1 @@ | 
				
			|||||
 | 
					@keyframes chartjs-render-animation{from{opacity:.99}to{opacity:1}}.chartjs-render-monitor{animation:chartjs-render-animation 1ms}.chartjs-size-monitor,.chartjs-size-monitor-expand,.chartjs-size-monitor-shrink{position:absolute;direction:ltr;left:0;top:0;right:0;bottom:0;overflow:hidden;pointer-events:none;visibility:hidden;z-index:-1}.chartjs-size-monitor-expand>div{position:absolute;width:1000000px;height:1000000px;left:0;top:0}.chartjs-size-monitor-shrink>div{position:absolute;width:200%;height:200%;left:0;top:0} | 
				
			||||
								
									
										File diff suppressed because one or more lines are too long
									
								
							
						
					@ -0,0 +1,37 @@ | 
				
			|||||
 | 
					module.exports = function(grunt) { | 
				
			||||
 | 
						'use strict'; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
						grunt.initConfig({ | 
				
			||||
 | 
							clean: ['dist'], | 
				
			||||
 | 
							uglify: { | 
				
			||||
 | 
								options: { | 
				
			||||
 | 
									preserveComments: 'some', | 
				
			||||
 | 
									sourceMap: true | 
				
			||||
 | 
								}, | 
				
			||||
 | 
								build: { | 
				
			||||
 | 
									expand: true, | 
				
			||||
 | 
									cwd: 'js', | 
				
			||||
 | 
									src: ['**/*.js', ['!**/*.min.js']], | 
				
			||||
 | 
									dest: 'js', | 
				
			||||
 | 
									ext: '.min.js', | 
				
			||||
 | 
								} | 
				
			||||
 | 
							}, | 
				
			||||
 | 
							cssmin: { | 
				
			||||
 | 
								options: { | 
				
			||||
 | 
									keepBreaks: true | 
				
			||||
 | 
								}, | 
				
			||||
 | 
								build: { | 
				
			||||
 | 
									expand: true, | 
				
			||||
 | 
									cwd: 'css', | 
				
			||||
 | 
									src: ['**/*.css', ['!**/*.min.css']], | 
				
			||||
 | 
									dest: 'css', | 
				
			||||
 | 
									ext: '.min.css', | 
				
			||||
 | 
								} | 
				
			||||
 | 
							} | 
				
			||||
 | 
						}); | 
				
			||||
 | 
						grunt.loadNpmTasks('grunt-contrib-clean'); | 
				
			||||
 | 
						grunt.loadNpmTasks('grunt-contrib-uglify'); | 
				
			||||
 | 
						grunt.loadNpmTasks('grunt-contrib-cssmin'); | 
				
			||||
 | 
						grunt.registerTask('default', ['clean', 'uglify', 'cssmin']); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					}; | 
				
			||||
@ -0,0 +1,21 @@ | 
				
			|||||
 | 
					The MIT License (MIT) | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					Copyright (c) 2011-2014 Min Hur, The New York Times Company | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					Permission is hereby granted, free of charge, to any person obtaining a copy | 
				
			||||
 | 
					of this software and associated documentation files (the "Software"), to deal | 
				
			||||
 | 
					in the Software without restriction, including without limitation the rights | 
				
			||||
 | 
					to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | 
				
			||||
 | 
					copies of the Software, and to permit persons to whom the Software is | 
				
			||||
 | 
					furnished to do so, subject to the following conditions: | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					The above copyright notice and this permission notice shall be included in | 
				
			||||
 | 
					all copies or substantial portions of the Software. | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | 
				
			||||
 | 
					IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | 
				
			||||
 | 
					FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | 
				
			||||
 | 
					AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | 
				
			||||
 | 
					LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | 
				
			||||
 | 
					OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | 
				
			||||
 | 
					THE SOFTWARE. | 
				
			||||
@ -0,0 +1,175 @@ | 
				
			|||||
 | 
					# Bootstrap Toggle | 
				
			||||
 | 
					Bootstrap Toggle is a highly flexible Bootstrap plugin that converts checkboxes into toggles. | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					Visit http://www.bootstraptoggle.com for demos. | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					## Getting Started | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					### Installation | 
				
			||||
 | 
					You can [download](https://github.com/minhur/bootstrap-toggle/archive/master.zip) the latest version of Bootstrap Toggle or use CDN to load the library. | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					`Warning` If you are using Bootstrap v2.3.2, use `bootstrap2-toggle.min.js` and `bootstrap2-toggle.min.css` instead. | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					```html | 
				
			||||
 | 
					<link href="https://gitcdn.github.io/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css" rel="stylesheet"> | 
				
			||||
 | 
					<script src="https://gitcdn.github.io/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js"></script> | 
				
			||||
 | 
					``` | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					### Bower Install | 
				
			||||
 | 
					```bash | 
				
			||||
 | 
					bower install bootstrap-toggle | 
				
			||||
 | 
					``` | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					## Usage | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					### Basic example | 
				
			||||
 | 
					Simply add `data-toggle="toggle"` to convert checkboxes into toggles. | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					```html | 
				
			||||
 | 
					<input type="checkbox" checked data-toggle="toggle"> | 
				
			||||
 | 
					``` | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					### Stacked checkboxes | 
				
			||||
 | 
					Refer to Bootstrap Form Controls documentation to create stacked checkboxes. Simply add `data-toggle="toggle"` to convert checkboxes into toggles. | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					```html | 
				
			||||
 | 
					<div class="checkbox"> | 
				
			||||
 | 
					  <label> | 
				
			||||
 | 
					    <input type="checkbox" data-toggle="toggle"> | 
				
			||||
 | 
					    Option one is enabled | 
				
			||||
 | 
					  </label> | 
				
			||||
 | 
					</div> | 
				
			||||
 | 
					<div class="checkbox disabled"> | 
				
			||||
 | 
					  <label> | 
				
			||||
 | 
					    <input type="checkbox" disabled data-toggle="toggle"> | 
				
			||||
 | 
					    Option two is disabled | 
				
			||||
 | 
					  </label> | 
				
			||||
 | 
					</div> | 
				
			||||
 | 
					``` | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					### Inline Checkboxes | 
				
			||||
 | 
					Refer to Bootstrap Form Controls documentation to create inline checkboxes. Simply add `data-toggle="toggle"` to a convert checkboxes into toggles. | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					```html | 
				
			||||
 | 
					<label class="checkbox-inline"> | 
				
			||||
 | 
					  <input type="checkbox" checked data-toggle="toggle"> First | 
				
			||||
 | 
					</label> | 
				
			||||
 | 
					<label class="checkbox-inline"> | 
				
			||||
 | 
					  <input type="checkbox" data-toggle="toggle"> Second | 
				
			||||
 | 
					</label> | 
				
			||||
 | 
					<label class="checkbox-inline"> | 
				
			||||
 | 
					  <input type="checkbox" data-toggle="toggle"> Third | 
				
			||||
 | 
					</label> | 
				
			||||
 | 
					``` | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					## API | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					### Initialize by JavaScript | 
				
			||||
 | 
					Initialize toggles with id `toggle-one` with a single line of JavaScript. | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					```html | 
				
			||||
 | 
					<input id="toggle-one" checked type="checkbox"> | 
				
			||||
 | 
					<script> | 
				
			||||
 | 
					  $(function() { | 
				
			||||
 | 
					    $('#toggle-one').bootstrapToggle(); | 
				
			||||
 | 
					  }) | 
				
			||||
 | 
					</script> | 
				
			||||
 | 
					``` | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					### Options | 
				
			||||
 | 
					Options can be passed via data attributes or JavaScript. For data attributes, append the option name to `data-`, as in `data-on="Enabled"`. | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					```html | 
				
			||||
 | 
					<input type="checkbox" data-toggle="toggle" data-on="Enabled" data-off="Disabled"> | 
				
			||||
 | 
					<input type="checkbox" id="toggle-two"> | 
				
			||||
 | 
					<script> | 
				
			||||
 | 
					  $(function() { | 
				
			||||
 | 
					    $('#toggle-two').bootstrapToggle({ | 
				
			||||
 | 
					      on: 'Enabled', | 
				
			||||
 | 
					      off: 'Disabled' | 
				
			||||
 | 
					    }); | 
				
			||||
 | 
					  }) | 
				
			||||
 | 
					</script> | 
				
			||||
 | 
					``` | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					Name|Type|Default|Description| | 
				
			||||
 | 
					---|---|---|--- | 
				
			||||
 | 
					on|string/html|"On"|Text of the on toggle | 
				
			||||
 | 
					off|string/html|"Off"|Text of the off toggle | 
				
			||||
 | 
					size|string|"normal"|Size of the toggle. Possible values are `large`, `normal`, `small`, `mini`. | 
				
			||||
 | 
					onstyle|string|"primary"|Style of the on toggle. Possible values are `default`, `primary`, `success`, `info`, `warning`, `danger` | 
				
			||||
 | 
					offstyle|string|"default"|Style of the off toggle. Possible values are `default`, `primary`, `success`, `info`, `warning`, `danger` | 
				
			||||
 | 
					style|string| |Appends the value to the class attribute of the toggle. This can be used to apply custom styles. Refer to Custom Styles for reference. | 
				
			||||
 | 
					width|integer|*null*|Sets the width of the toggle. if set to *null*, width will be calculated. | 
				
			||||
 | 
					height|integer|*null*|Sets the height of the toggle. if set to *null*, height will be calculated. | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					### Methods | 
				
			||||
 | 
					Methods can be used to control toggles directly. | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					```html | 
				
			||||
 | 
					<input id="toggle-demo" type="checkbox" data-toggle="toggle"> | 
				
			||||
 | 
					``` | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					Method|Example|Description | 
				
			||||
 | 
					---|---|--- | 
				
			||||
 | 
					initialize|$('#toggle-demo').bootstrapToggle()|Initializes the toggle plugin with options | 
				
			||||
 | 
					destroy|$('#toggle-demo').bootstrapToggle('destroy')|Destroys the toggle | 
				
			||||
 | 
					on|$('#toggle-demo').bootstrapToggle('on')|Sets the toggle to 'On' state | 
				
			||||
 | 
					off|$('#toggle-demo').bootstrapToggle('off')|Sets the toggle to 'Off' state | 
				
			||||
 | 
					toggle|$('#toggle-demo').bootstrapToggle('toggle')|Toggles the state of the toggle | 
				
			||||
 | 
					enable|$('#toggle-demo').bootstrapToggle('enable')|Enables the toggle | 
				
			||||
 | 
					disable|$('#toggle-demo').bootstrapToggle('disable')|Disables the toggle | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					## Events | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					### Event Propagation | 
				
			||||
 | 
					Note All events are propagated to and from input element to the toggle. | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					You should listen to events from the `<input type="checkbox">` directly rather than look for custom events. | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					```html | 
				
			||||
 | 
					<input id="toggle-event" type="checkbox" data-toggle="toggle"> | 
				
			||||
 | 
					<div id="console-event"></div> | 
				
			||||
 | 
					<script> | 
				
			||||
 | 
					  $(function() { | 
				
			||||
 | 
					    $('#toggle-event').change(function() { | 
				
			||||
 | 
					      $('#console-event').html('Toggle: ' + $(this).prop('checked')) | 
				
			||||
 | 
					    }) | 
				
			||||
 | 
					  }) | 
				
			||||
 | 
					</script> | 
				
			||||
 | 
					``` | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					### API vs Input | 
				
			||||
 | 
					This also means that using the API or Input to trigger events will work both ways. | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					```html | 
				
			||||
 | 
					<input id="toggle-trigger" type="checkbox" data-toggle="toggle"> | 
				
			||||
 | 
					<button class="btn btn-success" onclick="toggleOn()">On by API</button> | 
				
			||||
 | 
					<button class="btn btn-danger" onclick="toggleOff()">Off by API</button> | 
				
			||||
 | 
					<button class="btn btn-success" onclick="toggleOnByInput()">On by Input</button> | 
				
			||||
 | 
					<button class="btn btn-danger" onclick="toggleOffByInput()">Off by Input</button> | 
				
			||||
 | 
					<script> | 
				
			||||
 | 
					  function toggleOn() { | 
				
			||||
 | 
					    $('#toggle-trigger').bootstrapToggle('on') | 
				
			||||
 | 
					  } | 
				
			||||
 | 
					  function toggleOff() { | 
				
			||||
 | 
					    $('#toggle-trigger').bootstrapToggle('off')   | 
				
			||||
 | 
					  } | 
				
			||||
 | 
					  function toggleOnByInput() { | 
				
			||||
 | 
					    $('#toggle-trigger').prop('checked', true).change() | 
				
			||||
 | 
					  } | 
				
			||||
 | 
					  function toggleOffByInput() { | 
				
			||||
 | 
					    $('#toggle-trigger').prop('checked', false).change() | 
				
			||||
 | 
					  } | 
				
			||||
 | 
					</script> | 
				
			||||
 | 
					``` | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					### Integration | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					#### [KnockoutJS](http://knockoutjs.com) | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					A binding for knockout is available here: [aAXEe/knockout-bootstrap-toggle](https://github.com/aAXEe/knockout-bootstrap-toggle) | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					## Demos | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					Visit http://www.bootstraptoggle.com for demos. | 
				
			||||
@ -0,0 +1,2 @@ | 
				
			|||||
 | 
					.DS_Store | 
				
			||||
 | 
					node_modules | 
				
			||||
@ -0,0 +1,32 @@ | 
				
			|||||
 | 
					{ | 
				
			||||
 | 
					  "name": "bootstrap-toggle", | 
				
			||||
 | 
					  "description": "Bootstrap Toggle is a highly flexible Bootstrap plugin that converts checkboxes into toggles", | 
				
			||||
 | 
					  "version": "2.2.1", | 
				
			||||
 | 
					  "keywords": [ | 
				
			||||
 | 
					    "bootstrap", | 
				
			||||
 | 
					    "toggle", | 
				
			||||
 | 
					    "bootstrap-toggle", | 
				
			||||
 | 
					    "switch", | 
				
			||||
 | 
					    "bootstrap-switch" | 
				
			||||
 | 
					  ], | 
				
			||||
 | 
					  "homepage": "http://www.bootstraptoggle.com", | 
				
			||||
 | 
					  "repository": { | 
				
			||||
 | 
					    "type": "git", | 
				
			||||
 | 
					    "url": "https://github.com/minhur/bootstrap-toggle.git" | 
				
			||||
 | 
					  }, | 
				
			||||
 | 
					  "license": "MIT", | 
				
			||||
 | 
					  "authors": [ | 
				
			||||
 | 
					    "Min Hur <min.hur@gmail.com>" | 
				
			||||
 | 
					  ], | 
				
			||||
 | 
					  "main": [ | 
				
			||||
 | 
					    "./js/bootstrap-toggle.min.js", | 
				
			||||
 | 
					    "./css/bootstrap-toggle.min.css" | 
				
			||||
 | 
					  ], | 
				
			||||
 | 
					  "ignore": [ | 
				
			||||
 | 
					    "**/.*", | 
				
			||||
 | 
					    "node_modules", | 
				
			||||
 | 
					    "bower_components", | 
				
			||||
 | 
					    "test", | 
				
			||||
 | 
					    "tests" | 
				
			||||
 | 
					  ] | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,83 @@ | 
				
			|||||
 | 
					/*! ======================================================================== | 
				
			||||
 | 
					 * Bootstrap Toggle: bootstrap-toggle.css v2.2.0 | 
				
			||||
 | 
					 * http://www.bootstraptoggle.com | 
				
			||||
 | 
					 * ======================================================================== | 
				
			||||
 | 
					 * Copyright 2014 Min Hur, The New York Times Company | 
				
			||||
 | 
					 * Licensed under MIT | 
				
			||||
 | 
					 * ======================================================================== */ | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.checkbox label .toggle, | 
				
			||||
 | 
					.checkbox-inline .toggle { | 
				
			||||
 | 
						margin-left: -20px; | 
				
			||||
 | 
						margin-right: 5px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.toggle { | 
				
			||||
 | 
						position: relative; | 
				
			||||
 | 
						overflow: hidden; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.toggle input[type="checkbox"] { | 
				
			||||
 | 
						display: none; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.toggle-group { | 
				
			||||
 | 
						position: absolute; | 
				
			||||
 | 
						width: 200%; | 
				
			||||
 | 
						top: 0; | 
				
			||||
 | 
						bottom: 0; | 
				
			||||
 | 
						left: 0; | 
				
			||||
 | 
						transition: left 0.35s; | 
				
			||||
 | 
						-webkit-transition: left 0.35s; | 
				
			||||
 | 
						-moz-user-select: none; | 
				
			||||
 | 
						-webkit-user-select: none; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.toggle.off .toggle-group { | 
				
			||||
 | 
						left: -100%; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.toggle-on { | 
				
			||||
 | 
						position: absolute; | 
				
			||||
 | 
						top: 0; | 
				
			||||
 | 
						bottom: 0; | 
				
			||||
 | 
						left: 0; | 
				
			||||
 | 
						right: 50%; | 
				
			||||
 | 
						margin: 0; | 
				
			||||
 | 
						border: 0; | 
				
			||||
 | 
						border-radius: 0; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.toggle-off { | 
				
			||||
 | 
						position: absolute; | 
				
			||||
 | 
						top: 0; | 
				
			||||
 | 
						bottom: 0; | 
				
			||||
 | 
						left: 50%; | 
				
			||||
 | 
						right: 0; | 
				
			||||
 | 
						margin: 0; | 
				
			||||
 | 
						border: 0; | 
				
			||||
 | 
						border-radius: 0; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.toggle-handle { | 
				
			||||
 | 
						position: relative; | 
				
			||||
 | 
						margin: 0 auto; | 
				
			||||
 | 
						padding-top: 0px; | 
				
			||||
 | 
						padding-bottom: 0px; | 
				
			||||
 | 
						height: 100%; | 
				
			||||
 | 
						width: 0px; | 
				
			||||
 | 
						border-width: 0 1px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.toggle.btn { min-width: 59px; min-height: 34px; } | 
				
			||||
 | 
					.toggle-on.btn { padding-right: 24px; } | 
				
			||||
 | 
					.toggle-off.btn { padding-left: 24px; } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.toggle.btn-lg { min-width: 79px; min-height: 45px; } | 
				
			||||
 | 
					.toggle-on.btn-lg { padding-right: 31px; } | 
				
			||||
 | 
					.toggle-off.btn-lg { padding-left: 31px; } | 
				
			||||
 | 
					.toggle-handle.btn-lg { width: 40px; } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.toggle.btn-sm { min-width: 50px; min-height: 30px;} | 
				
			||||
 | 
					.toggle-on.btn-sm { padding-right: 20px; } | 
				
			||||
 | 
					.toggle-off.btn-sm { padding-left: 20px; } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.toggle.btn-xs { min-width: 35px; min-height: 22px;} | 
				
			||||
 | 
					.toggle-on.btn-xs { padding-right: 12px; } | 
				
			||||
 | 
					.toggle-off.btn-xs { padding-left: 12px; } | 
				
			||||
 | 
					
 | 
				
			||||
@ -0,0 +1,28 @@ | 
				
			|||||
 | 
					/*! ======================================================================== | 
				
			||||
 | 
					 * Bootstrap Toggle: bootstrap-toggle.css v2.2.0 | 
				
			||||
 | 
					 * http://www.bootstraptoggle.com | 
				
			||||
 | 
					 * ======================================================================== | 
				
			||||
 | 
					 * Copyright 2014 Min Hur, The New York Times Company | 
				
			||||
 | 
					 * Licensed under MIT | 
				
			||||
 | 
					 * ======================================================================== */ | 
				
			||||
 | 
					.checkbox label .toggle,.checkbox-inline .toggle{margin-left:-20px;margin-right:5px} | 
				
			||||
 | 
					.toggle{position:relative;overflow:hidden} | 
				
			||||
 | 
					.toggle input[type=checkbox]{display:none} | 
				
			||||
 | 
					.toggle-group{position:absolute;width:200%;top:0;bottom:0;left:0;transition:left .35s;-webkit-transition:left .35s;-moz-user-select:none;-webkit-user-select:none} | 
				
			||||
 | 
					.toggle.off .toggle-group{left:-100%} | 
				
			||||
 | 
					.toggle-on{position:absolute;top:0;bottom:0;left:0;right:50%;margin:0;border:0;border-radius:0} | 
				
			||||
 | 
					.toggle-off{position:absolute;top:0;bottom:0;left:50%;right:0;margin:0;border:0;border-radius:0} | 
				
			||||
 | 
					.toggle-handle{position:relative;margin:0 auto;padding-top:0;padding-bottom:0;height:100%;width:0;border-width:0 1px} | 
				
			||||
 | 
					.toggle.btn{min-width:59px;min-height:34px} | 
				
			||||
 | 
					.toggle-on.btn{padding-right:24px} | 
				
			||||
 | 
					.toggle-off.btn{padding-left:24px} | 
				
			||||
 | 
					.toggle.btn-lg{min-width:79px;min-height:45px} | 
				
			||||
 | 
					.toggle-on.btn-lg{padding-right:31px} | 
				
			||||
 | 
					.toggle-off.btn-lg{padding-left:31px} | 
				
			||||
 | 
					.toggle-handle.btn-lg{width:40px} | 
				
			||||
 | 
					.toggle.btn-sm{min-width:50px;min-height:30px} | 
				
			||||
 | 
					.toggle-on.btn-sm{padding-right:20px} | 
				
			||||
 | 
					.toggle-off.btn-sm{padding-left:20px} | 
				
			||||
 | 
					.toggle.btn-xs{min-width:35px;min-height:22px} | 
				
			||||
 | 
					.toggle-on.btn-xs{padding-right:12px} | 
				
			||||
 | 
					.toggle-off.btn-xs{padding-left:12px} | 
				
			||||
@ -0,0 +1,85 @@ | 
				
			|||||
 | 
					/*! ======================================================================== | 
				
			||||
 | 
					 * Bootstrap Toggle: bootstrap2-toggle.css v2.2.0 | 
				
			||||
 | 
					 * http://www.bootstraptoggle.com | 
				
			||||
 | 
					 * ======================================================================== | 
				
			||||
 | 
					 * Copyright 2014 Min Hur, The New York Times Company | 
				
			||||
 | 
					 * Licensed under MIT | 
				
			||||
 | 
					 * ======================================================================== */ | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					label.checkbox .toggle, | 
				
			||||
 | 
					label.checkbox.inline .toggle { | 
				
			||||
 | 
						margin-left: -20px; | 
				
			||||
 | 
						margin-right: 5px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.toggle { | 
				
			||||
 | 
						min-width: 40px; | 
				
			||||
 | 
						height: 20px; | 
				
			||||
 | 
						position: relative; | 
				
			||||
 | 
						overflow: hidden; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.toggle input[type="checkbox"] { | 
				
			||||
 | 
						display: none; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.toggle-group { | 
				
			||||
 | 
						position: absolute; | 
				
			||||
 | 
						width: 200%; | 
				
			||||
 | 
						top: 0; | 
				
			||||
 | 
						bottom: 0; | 
				
			||||
 | 
						left: 0; | 
				
			||||
 | 
						transition: left 0.35s; | 
				
			||||
 | 
						-webkit-transition: left 0.35s; | 
				
			||||
 | 
						-moz-user-select: none; | 
				
			||||
 | 
						-webkit-user-select: none; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.toggle.off .toggle-group { | 
				
			||||
 | 
						left: -100%; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.toggle-on { | 
				
			||||
 | 
						position: absolute; | 
				
			||||
 | 
						top: 0; | 
				
			||||
 | 
						bottom: 0; | 
				
			||||
 | 
						left: 0; | 
				
			||||
 | 
						right: 50%; | 
				
			||||
 | 
						margin: 0; | 
				
			||||
 | 
						border: 0; | 
				
			||||
 | 
						border-radius: 0; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.toggle-off { | 
				
			||||
 | 
						position: absolute; | 
				
			||||
 | 
						top: 0; | 
				
			||||
 | 
						bottom: 0; | 
				
			||||
 | 
						left: 50%; | 
				
			||||
 | 
						right: 0; | 
				
			||||
 | 
						margin: 0; | 
				
			||||
 | 
						border: 0; | 
				
			||||
 | 
						border-radius: 0; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.toggle-handle { | 
				
			||||
 | 
						position: relative; | 
				
			||||
 | 
						margin: 0 auto; | 
				
			||||
 | 
						padding-top: 0px; | 
				
			||||
 | 
						padding-bottom: 0px; | 
				
			||||
 | 
						height: 100%; | 
				
			||||
 | 
						width: 0px; | 
				
			||||
 | 
						border-width: 0 1px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.toggle-handle.btn-mini { | 
				
			||||
 | 
						top: -1px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.toggle.btn { min-width: 30px; } | 
				
			||||
 | 
					.toggle-on.btn { padding-right: 24px; } | 
				
			||||
 | 
					.toggle-off.btn { padding-left: 24px; } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.toggle.btn-large { min-width: 40px; } | 
				
			||||
 | 
					.toggle-on.btn-large { padding-right: 35px; } | 
				
			||||
 | 
					.toggle-off.btn-large { padding-left: 35px; } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.toggle.btn-small { min-width: 25px; } | 
				
			||||
 | 
					.toggle-on.btn-small { padding-right: 20px; } | 
				
			||||
 | 
					.toggle-off.btn-small { padding-left: 20px; } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.toggle.btn-mini { min-width: 20px; } | 
				
			||||
 | 
					.toggle-on.btn-mini { padding-right: 12px; } | 
				
			||||
 | 
					.toggle-off.btn-mini { padding-left: 12px; } | 
				
			||||
 | 
					
 | 
				
			||||
@ -0,0 +1,28 @@ | 
				
			|||||
 | 
					/*! ======================================================================== | 
				
			||||
 | 
					 * Bootstrap Toggle: bootstrap2-toggle.css v2.2.0 | 
				
			||||
 | 
					 * http://www.bootstraptoggle.com | 
				
			||||
 | 
					 * ======================================================================== | 
				
			||||
 | 
					 * Copyright 2014 Min Hur, The New York Times Company | 
				
			||||
 | 
					 * Licensed under MIT | 
				
			||||
 | 
					 * ======================================================================== */ | 
				
			||||
 | 
					label.checkbox .toggle,label.checkbox.inline .toggle{margin-left:-20px;margin-right:5px} | 
				
			||||
 | 
					.toggle{min-width:40px;height:20px;position:relative;overflow:hidden} | 
				
			||||
 | 
					.toggle input[type=checkbox]{display:none} | 
				
			||||
 | 
					.toggle-group{position:absolute;width:200%;top:0;bottom:0;left:0;transition:left .35s;-webkit-transition:left .35s;-moz-user-select:none;-webkit-user-select:none} | 
				
			||||
 | 
					.toggle.off .toggle-group{left:-100%} | 
				
			||||
 | 
					.toggle-on{position:absolute;top:0;bottom:0;left:0;right:50%;margin:0;border:0;border-radius:0} | 
				
			||||
 | 
					.toggle-off{position:absolute;top:0;bottom:0;left:50%;right:0;margin:0;border:0;border-radius:0} | 
				
			||||
 | 
					.toggle-handle{position:relative;margin:0 auto;padding-top:0;padding-bottom:0;height:100%;width:0;border-width:0 1px} | 
				
			||||
 | 
					.toggle-handle.btn-mini{top:-1px} | 
				
			||||
 | 
					.toggle.btn{min-width:30px} | 
				
			||||
 | 
					.toggle-on.btn{padding-right:24px} | 
				
			||||
 | 
					.toggle-off.btn{padding-left:24px} | 
				
			||||
 | 
					.toggle.btn-large{min-width:40px} | 
				
			||||
 | 
					.toggle-on.btn-large{padding-right:35px} | 
				
			||||
 | 
					.toggle-off.btn-large{padding-left:35px} | 
				
			||||
 | 
					.toggle.btn-small{min-width:25px} | 
				
			||||
 | 
					.toggle-on.btn-small{padding-right:20px} | 
				
			||||
 | 
					.toggle-off.btn-small{padding-left:20px} | 
				
			||||
 | 
					.toggle.btn-mini{min-width:20px} | 
				
			||||
 | 
					.toggle-on.btn-mini{padding-right:12px} | 
				
			||||
 | 
					.toggle-off.btn-mini{padding-left:12px} | 
				
			||||
| 
		 After Width: | Height: | Size: 87 KiB  | 
| 
		 After Width: | Height: | Size: 4.9 KiB  | 
| 
		 After Width: | Height: | Size: 20 KiB  | 
@ -0,0 +1,49 @@ | 
				
			|||||
 | 
					+function ($) { | 
				
			||||
 | 
						'use strict'; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
						$('.example:not(.skip)').each(function() { | 
				
			||||
 | 
							// fetch & encode html
 | 
				
			||||
 | 
							var html = $('<div>').text($(this).html()).html() | 
				
			||||
 | 
							// find number of space/tabs on first line (minus line break)
 | 
				
			||||
 | 
							var count = html.match(/^(\s+)/)[0].length - 1 | 
				
			||||
 | 
							// replace tabs/spaces on each lines with 
 | 
				
			||||
 | 
							var regex = new RegExp('\\n\\s{'+count+'}', 'g') | 
				
			||||
 | 
							var code = html.replace(regex, '\n').replace(/\t/g, '  ').trim() | 
				
			||||
 | 
							// other cleanup
 | 
				
			||||
 | 
							code = code.replace(/=""/g,'') | 
				
			||||
 | 
							// add code block to dom
 | 
				
			||||
 | 
							$(this).after( $('<code class="highlight html">').html(code) ) | 
				
			||||
 | 
						}); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
						$('code.highlight').each(function() { | 
				
			||||
 | 
							hljs.highlightBlock(this) | 
				
			||||
 | 
						}); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					}(jQuery); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					var Demo = function () {} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					Demo.prototype.init = function(selector) { | 
				
			||||
 | 
						$(selector).bootstrapToggle(selector) | 
				
			||||
 | 
					} | 
				
			||||
 | 
					Demo.prototype.destroy = function(selector) { | 
				
			||||
 | 
						$(selector).bootstrapToggle('destroy') | 
				
			||||
 | 
					} | 
				
			||||
 | 
					Demo.prototype.on = function(selector) { | 
				
			||||
 | 
						$(selector).bootstrapToggle('on') | 
				
			||||
 | 
					} | 
				
			||||
 | 
					Demo.prototype.off = function(selector) { | 
				
			||||
 | 
						$(selector).bootstrapToggle('off') | 
				
			||||
 | 
					} | 
				
			||||
 | 
					Demo.prototype.toggle = function(selector) { | 
				
			||||
 | 
						$(selector).bootstrapToggle('toggle') | 
				
			||||
 | 
					} | 
				
			||||
 | 
					Demo.prototype.enable = function(selector) { | 
				
			||||
 | 
						$(selector).bootstrapToggle('enable') | 
				
			||||
 | 
					} | 
				
			||||
 | 
					Demo.prototype.disable = function(selector) { | 
				
			||||
 | 
						$(selector).bootstrapToggle('disable') | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					demo = new Demo() | 
				
			||||
@ -0,0 +1,112 @@ | 
				
			|||||
 | 
					header, footer { | 
				
			||||
 | 
						padding: 20px; | 
				
			||||
 | 
						background-image: url('header.png'); | 
				
			||||
 | 
						background-size: 256px 256px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					footer { | 
				
			||||
 | 
						color: #fff; | 
				
			||||
 | 
						text-align: center; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.nyt-logo { | 
				
			||||
 | 
						max-height: 40px; | 
				
			||||
 | 
						margin-top: 5px; | 
				
			||||
 | 
						margin-right: 5px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					nav.navbar { | 
				
			||||
 | 
						margin-bottom: 10px; | 
				
			||||
 | 
						background-color: #fff; | 
				
			||||
 | 
						border: 0px; | 
				
			||||
 | 
						border-radius: 2px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					#navbar { | 
				
			||||
 | 
						margin: 0px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					#navbar .navbar-nav li iframe { | 
				
			||||
 | 
						margin-top: 15px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					#navbar .navbar-nav li:last-child iframe { | 
				
			||||
 | 
						margin-right: 15px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					@media screen and (max-width: 767px) { | 
				
			||||
 | 
						#navbar .navbar-nav li iframe { | 
				
			||||
 | 
							display: none; | 
				
			||||
 | 
						} | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.mast-head { | 
				
			||||
 | 
						margin: 10px 0; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.mast-head h1 { | 
				
			||||
 | 
						margin-bottom: 15px; | 
				
			||||
 | 
						color: #fff; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					.mast-head p { | 
				
			||||
 | 
						color: #fff; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.mast-links { | 
				
			||||
 | 
						padding-top: 10px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.mast-links > * { | 
				
			||||
 | 
						vertical-align: middle; | 
				
			||||
 | 
						margin-bottom: 10px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.mast-links > .btn { | 
				
			||||
 | 
						margin-right: 30px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					main { | 
				
			||||
 | 
						margin: 10px 20px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					main .container { | 
				
			||||
 | 
						margin-bottom: 40px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					code.hljs { | 
				
			||||
 | 
						border: 1px solid #ccc; | 
				
			||||
 | 
						padding: 1em; | 
				
			||||
 | 
						white-space: pre; | 
				
			||||
 | 
						margin-bottom: 10px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.example { | 
				
			||||
 | 
						position: relative; | 
				
			||||
 | 
						border: 1px solid #ccc; | 
				
			||||
 | 
						padding: 1em 1em 0.5em 1em; | 
				
			||||
 | 
						border-radius: 4px 4px 0 0; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.example:after { | 
				
			||||
 | 
						content: "Example"; | 
				
			||||
 | 
						position: absolute; | 
				
			||||
 | 
						top: 0px; | 
				
			||||
 | 
						right: 0px; | 
				
			||||
 | 
						padding: 3px 7px; | 
				
			||||
 | 
						font-size: 12px; | 
				
			||||
 | 
						font-weight: bold; | 
				
			||||
 | 
						background-color: #f5f5f5; | 
				
			||||
 | 
						border: 1px solid #ccc; | 
				
			||||
 | 
						color: #9da0a4; | 
				
			||||
 | 
						border-radius: 0px 4px 0px 4px; | 
				
			||||
 | 
						border-width: 0px 0px 1px 1px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.example + code.hljs { | 
				
			||||
 | 
						border-top: 0; | 
				
			||||
 | 
						border-radius: 0px 0px 4px 4px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.example > * { | 
				
			||||
 | 
						margin-bottom: 10px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.example > div.toggle { | 
				
			||||
 | 
						margin-right: 10px; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.table-striped code { | 
				
			||||
 | 
						background-color: inherit; | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,449 @@ | 
				
			|||||
 | 
					<!DOCTYPE html> | 
				
			||||
 | 
					<html> | 
				
			||||
 | 
					<head> | 
				
			||||
 | 
						<script> if (window.location.href.indexOf('minhur.github.io') > 0) window.location.replace('http://www.bootstraptoggle.com') </script> | 
				
			||||
 | 
						<meta charset="UTF-8"> | 
				
			||||
 | 
						<meta name="viewport" content="width=device-width, initial-scale=1"> | 
				
			||||
 | 
						<meta name="msvalidate.01" content="3638AEFC99423BA5CB586805286C39AA" /> | 
				
			||||
 | 
						<meta name="description" content="Bootstrap Toggle is a highly flexible Bootstrap plugin that converts checkboxes into toggles." /> | 
				
			||||
 | 
						<meta name="keywords" content="bootstrap, toggle, switch, bootstrap-toggle, bootstrap-switch" /> | 
				
			||||
 | 
						<meta name="author" content="metatags generator"> | 
				
			||||
 | 
						<meta name="robots" content="index, follow"> | 
				
			||||
 | 
						<meta name="revisit-after" content="1 month"> | 
				
			||||
 | 
						<title>Bootstrap Toggle</title> | 
				
			||||
 | 
						<link rel="canonical" href="http://www.bootstraptoggle.com"> | 
				
			||||
 | 
						<link href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.3/styles/github.min.css" rel="stylesheet" > | 
				
			||||
 | 
						<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet"> | 
				
			||||
 | 
						<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet"> | 
				
			||||
 | 
						<link href="css/bootstrap-toggle.css" rel="stylesheet"> | 
				
			||||
 | 
						<link href="doc/stylesheet.css" rel="stylesheet"> | 
				
			||||
 | 
						<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script> | 
				
			||||
 | 
					</head> | 
				
			||||
 | 
					<body> | 
				
			||||
 | 
						<header> | 
				
			||||
 | 
							<nav class="navbar navbar-default container" role="navigation"> | 
				
			||||
 | 
								<div class="container"> | 
				
			||||
 | 
									<div class="navbar-header"> | 
				
			||||
 | 
										<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar"> | 
				
			||||
 | 
											<span class="sr-only">Toggle navigation</span> | 
				
			||||
 | 
											<span class="icon-bar"></span> | 
				
			||||
 | 
											<span class="icon-bar"></span> | 
				
			||||
 | 
											<span class="icon-bar"></span> | 
				
			||||
 | 
										</button> | 
				
			||||
 | 
										<a class="navbar-brand" href="#">Bootstrap Toggle</a> | 
				
			||||
 | 
									</div> | 
				
			||||
 | 
									<div id="navbar" class="collapse navbar-collapse"> | 
				
			||||
 | 
										<ul class="nav navbar-nav navbar-right"> | 
				
			||||
 | 
											<li><a href="#usage">Usage</a></li> | 
				
			||||
 | 
											<li><a href="#api">API</a></li> | 
				
			||||
 | 
											<li><a href="#events">Events</a></li> | 
				
			||||
 | 
											<li><a href="#demos">Demos</a></li> | 
				
			||||
 | 
											<li><a href="https://github.com/minhur/bootstrap-toggle/issues">Issues</a></li> | 
				
			||||
 | 
											<li><a href="https://github.com/minhur/bootstrap-toggle/archive/master.zip">Download</a></li> | 
				
			||||
 | 
											<li> | 
				
			||||
 | 
												<iframe src="https://mdo.github.io/github-buttons/github-btn.html?user=minhur&repo=bootstrap-toggle&type=watch" allowtransparency="true" frameborder="0" scrolling="0" width="62" height="20"></iframe> | 
				
			||||
 | 
											</li> | 
				
			||||
 | 
											<li> | 
				
			||||
 | 
												<iframe src="https://mdo.github.io/github-buttons/github-btn.html?user=minhur&repo=bootstrap-toggle&type=fork" allowtransparency="true" frameborder="0" scrolling="0" width="53" height="20"></iframe> | 
				
			||||
 | 
											</li> | 
				
			||||
 | 
										</ul> | 
				
			||||
 | 
									</div> | 
				
			||||
 | 
								</div> | 
				
			||||
 | 
							</nav> | 
				
			||||
 | 
							<div class="mast-head"> | 
				
			||||
 | 
								<div class="container"> | 
				
			||||
 | 
									<h1>Bootstrap Toggle</h1> | 
				
			||||
 | 
									<p>Bootstrap Toggle is a highly flexible Bootstrap plugin that converts checkboxes into toggles</p> | 
				
			||||
 | 
									<div class="mast-links"> | 
				
			||||
 | 
										<iframe src="https://mdo.github.io/github-buttons/github-btn.html?user=minhur&repo=bootstrap-toggle&type=watch&count=true&size=large" allowtransparency="true" frameborder="0" scrolling="0" width="150" height="30"></iframe> | 
				
			||||
 | 
										<iframe src="https://mdo.github.io/github-buttons/github-btn.html?user=minhur&repo=bootstrap-toggle&type=fork&count=true&size=large" allowtransparency="true" frameborder="0" scrolling="0" width="150" height="30"></iframe> | 
				
			||||
 | 
									</div> | 
				
			||||
 | 
								</div> | 
				
			||||
 | 
							</div> | 
				
			||||
 | 
						</header> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
						<main> | 
				
			||||
 | 
							<div class="container"> | 
				
			||||
 | 
								<h2>Getting Started</h2> | 
				
			||||
 | 
								<hr> | 
				
			||||
 | 
								<h3>Installation</h3> | 
				
			||||
 | 
								<p>You can <a href="https://github.com/minhur/bootstrap-toggle/archive/master.zip">download</a> the latest version of Bootstrap Toggle or use CDN to load the library.</p> | 
				
			||||
 | 
								<p><span class="label label-warning">Warning</span> If you are using Bootstrap v2.3.2, use <code>bootstrap2-toggle.min.js</code> and <code>bootstrap2-toggle.min.css</code> instead.</p> | 
				
			||||
 | 
								<code class="highlight"><link href="https://gitcdn.github.io/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css" rel="stylesheet"> | 
				
			||||
 | 
					<script src="https://gitcdn.github.io/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js"></script></code> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
								<h3>Bower Install</h3> | 
				
			||||
 | 
								<p></p> | 
				
			||||
 | 
								<code class="highlight bash">bower install bootstrap-toggle</code> | 
				
			||||
 | 
							</div> | 
				
			||||
 | 
							<div id="usage" class="container"> | 
				
			||||
 | 
								<h2>Usage</h2> | 
				
			||||
 | 
								<hr> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
								<h3>Basic example</h3> | 
				
			||||
 | 
								<p>Simply add <code>data-toggle="toggle"</code> to convert checkboxes into toggles.</p> | 
				
			||||
 | 
								<div class="example"> | 
				
			||||
 | 
									<input type="checkbox" checked data-toggle="toggle"> | 
				
			||||
 | 
								</div> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
								<h3>Stacked checkboxes</h3> | 
				
			||||
 | 
								<p>Refer to Bootstrap <a href="http://getbootstrap.com/css/#forms-controls" target="_blank">Form Controls</a> documentation to create stacked checkboxes. Simply add <code>data-toggle="toggle"</code> to convert checkboxes into toggles.</p> | 
				
			||||
 | 
								<div class="example"> | 
				
			||||
 | 
									<div class="checkbox"> | 
				
			||||
 | 
										<label> | 
				
			||||
 | 
											<input type="checkbox" data-toggle="toggle"> | 
				
			||||
 | 
											Option one is enabled | 
				
			||||
 | 
										</label> | 
				
			||||
 | 
									</div> | 
				
			||||
 | 
									<div class="checkbox disabled"> | 
				
			||||
 | 
										<label> | 
				
			||||
 | 
											<input type="checkbox" disabled data-toggle="toggle"> | 
				
			||||
 | 
											Option two is disabled | 
				
			||||
 | 
										</label> | 
				
			||||
 | 
									</div> | 
				
			||||
 | 
								</div> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
								<h3>Inline Checkboxes</h3> | 
				
			||||
 | 
								<p>Refer to Bootstrap <a href="http://getbootstrap.com/css/#forms-controls" target="_blank">Form Controls</a> documentation to create inline checkboxes. Simply add <code>data-toggle="toggle"</code> to a convert checkboxes into toggles.</p> | 
				
			||||
 | 
								<div class="example"> | 
				
			||||
 | 
									<label class="checkbox-inline"> | 
				
			||||
 | 
										<input type="checkbox" checked data-toggle="toggle"> First | 
				
			||||
 | 
									</label> | 
				
			||||
 | 
									<label class="checkbox-inline"> | 
				
			||||
 | 
										<input type="checkbox" data-toggle="toggle"> Second | 
				
			||||
 | 
									</label> | 
				
			||||
 | 
									<label class="checkbox-inline"> | 
				
			||||
 | 
										<input type="checkbox" data-toggle="toggle"> Third | 
				
			||||
 | 
									</label> | 
				
			||||
 | 
								</div> | 
				
			||||
 | 
							</div> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
							<div id="api" class="container"> | 
				
			||||
 | 
								<h2>API</h2> | 
				
			||||
 | 
								<hr> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
								<h3>Initialize by JavaScript</h3> | 
				
			||||
 | 
								<p>Initialize toggles with id <code>toggle-one</code> with a single line of JavaScript.</p> | 
				
			||||
 | 
								<div class="example"> | 
				
			||||
 | 
									<input id="toggle-one" checked type="checkbox"> | 
				
			||||
 | 
									<script> | 
				
			||||
 | 
										$(function() { | 
				
			||||
 | 
											$('#toggle-one').bootstrapToggle(); | 
				
			||||
 | 
										}) | 
				
			||||
 | 
									</script> | 
				
			||||
 | 
								</div> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
								<h3>Options</h3> | 
				
			||||
 | 
								<p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-on="Enabled"</code>.</p> | 
				
			||||
 | 
								<div class="example"> | 
				
			||||
 | 
									<input type="checkbox" data-toggle="toggle" data-on="Enabled" data-off="Disabled"> | 
				
			||||
 | 
									<input type="checkbox" id="toggle-two"> | 
				
			||||
 | 
									<script> | 
				
			||||
 | 
										$(function() { | 
				
			||||
 | 
											$('#toggle-two').bootstrapToggle({ | 
				
			||||
 | 
												on: 'Enabled', | 
				
			||||
 | 
												off: 'Disabled' | 
				
			||||
 | 
											}); | 
				
			||||
 | 
										}) | 
				
			||||
 | 
									</script> | 
				
			||||
 | 
								</div> | 
				
			||||
 | 
								<div class="table-responsive"> | 
				
			||||
 | 
									<table class="table table-striped table-condensed"> | 
				
			||||
 | 
									<thead> | 
				
			||||
 | 
									<tr> | 
				
			||||
 | 
										<th>Name</th> | 
				
			||||
 | 
										<th>Type</th> | 
				
			||||
 | 
										<th>Default</th> | 
				
			||||
 | 
										<th>Description</th> | 
				
			||||
 | 
									</tr> | 
				
			||||
 | 
									</thead> | 
				
			||||
 | 
									<tbody> | 
				
			||||
 | 
									<tr> | 
				
			||||
 | 
										<td>on</td> | 
				
			||||
 | 
										<td>string | html</td> | 
				
			||||
 | 
										<td><code>"On"</code></td> | 
				
			||||
 | 
										<td>Text of the <em>on</em> toggle</td> | 
				
			||||
 | 
									</tr> | 
				
			||||
 | 
									<tr> | 
				
			||||
 | 
										<td>off</td> | 
				
			||||
 | 
										<td>string | html</td> | 
				
			||||
 | 
										<td><code>"Off"</code></td> | 
				
			||||
 | 
										<td>Text of the <em>off</em> toggle</td> | 
				
			||||
 | 
									</tr> | 
				
			||||
 | 
									<tr> | 
				
			||||
 | 
										<td>size</td> | 
				
			||||
 | 
										<td>string</td> | 
				
			||||
 | 
										<td><code>"normal"</code></td> | 
				
			||||
 | 
										<td> | 
				
			||||
 | 
											Size of the toggle. Possible values are:<code>large</code>,<code>normal</code>,<code>small</code>,<code>mini</code><br> | 
				
			||||
 | 
											Refer to Bootstrap <a href="http://getbootstrap.com/css/#buttons-sizes" target="_blank">Button Sizes</a> documentation for more information. | 
				
			||||
 | 
										</td> | 
				
			||||
 | 
									</tr> | 
				
			||||
 | 
									<tr> | 
				
			||||
 | 
										<td>onstyle</td> | 
				
			||||
 | 
										<td>string</td> | 
				
			||||
 | 
										<td><code>"primary"</code></td> | 
				
			||||
 | 
										<td> | 
				
			||||
 | 
											Style of the <em>on</em> toggle.<br>Possible values are:<code>default</code>,<code>primary</code>,<code>success</code>,<code>info</code>,<code>warning</code>,<code>danger</code><br> | 
				
			||||
 | 
											Refer to Bootstrap <a href="http://getbootstrap.com/css/#buttons-options" target="_blank">Button Options</a> documentation for more information. | 
				
			||||
 | 
										</td> | 
				
			||||
 | 
									</tr> | 
				
			||||
 | 
									<tr> | 
				
			||||
 | 
										<td>offstyle</td> | 
				
			||||
 | 
										<td>string</td> | 
				
			||||
 | 
										<td><code>"default"</code></td> | 
				
			||||
 | 
										<td> | 
				
			||||
 | 
											Style of the <em>off</em> toggle.<br>Possible values are:<code>default</code>,<code>primary</code>,<code>success</code>,<code>info</code>,<code>warning</code>,<code>danger</code><br> | 
				
			||||
 | 
											Refer to Bootstrap <a href="http://getbootstrap.com/css/#buttons-options" target="_blank">Button Options</a> documentation for more information. | 
				
			||||
 | 
										</td> | 
				
			||||
 | 
									</tr> | 
				
			||||
 | 
									<tr> | 
				
			||||
 | 
										<td>style</td> | 
				
			||||
 | 
										<td>string</td> | 
				
			||||
 | 
										<td></td> | 
				
			||||
 | 
										<td> | 
				
			||||
 | 
											Appends the value to the class attribute of the toggle. This can be used to apply custom styles. Refer to Custom Styles for reference. | 
				
			||||
 | 
										</td> | 
				
			||||
 | 
									</tr> | 
				
			||||
 | 
									<tr> | 
				
			||||
 | 
										<td>width</td> | 
				
			||||
 | 
										<td>integer</td> | 
				
			||||
 | 
										<td><em>null</em></td> | 
				
			||||
 | 
										<td> | 
				
			||||
 | 
											Sets the width of the toggle. if set to <em>null</em>, width will be calculated. | 
				
			||||
 | 
										</td> | 
				
			||||
 | 
									</tr> | 
				
			||||
 | 
									<tr> | 
				
			||||
 | 
										<td>height</td> | 
				
			||||
 | 
										<td>integer</td> | 
				
			||||
 | 
										<td><em>null</em></td> | 
				
			||||
 | 
										<td> | 
				
			||||
 | 
											Sets the height of the toggle. if set to <em>null</em>, height will be calculated. | 
				
			||||
 | 
										</td> | 
				
			||||
 | 
									</tr> | 
				
			||||
 | 
									</tbody> | 
				
			||||
 | 
									</table> | 
				
			||||
 | 
								</div> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
								<h3>Methods</h3> | 
				
			||||
 | 
								<p>Methods can be used to control toggles directly.</p> | 
				
			||||
 | 
								<div class="example"> | 
				
			||||
 | 
									<input id="toggle-demo" type="checkbox" data-toggle="toggle"> | 
				
			||||
 | 
								</div> | 
				
			||||
 | 
								<div class="table-responsive"> | 
				
			||||
 | 
									<table class="table table-striped table-condensed"> | 
				
			||||
 | 
									<thead> | 
				
			||||
 | 
									<tr> | 
				
			||||
 | 
										<th>Method</th> | 
				
			||||
 | 
										<th>Example</th> | 
				
			||||
 | 
										<th>Description</th> | 
				
			||||
 | 
										<th>Demo</th> | 
				
			||||
 | 
									</tr> | 
				
			||||
 | 
									</thead> | 
				
			||||
 | 
									<tbody> | 
				
			||||
 | 
									<tr> | 
				
			||||
 | 
										<td><em>initialize</em></td> | 
				
			||||
 | 
										<td><code>$('#toggle-demo').bootstrapToggle()</code></td> | 
				
			||||
 | 
										<td>Initializes the toggle plugin with options</td> | 
				
			||||
 | 
										<td><button class="btn btn-default btn-xs" onclick="demo.init('#toggle-demo')">Initialize</button></td> | 
				
			||||
 | 
									</tr> | 
				
			||||
 | 
									<tr> | 
				
			||||
 | 
										<td>destroy</td> | 
				
			||||
 | 
										<td><code>$('#toggle-demo').bootstrapToggle('destroy')</code></td> | 
				
			||||
 | 
										<td>Destroys the toggle</td> | 
				
			||||
 | 
										<td><button class="btn btn-default btn-xs" onclick="demo.destroy('#toggle-demo')">Destroy</button></td> | 
				
			||||
 | 
									</tr> | 
				
			||||
 | 
									<tr> | 
				
			||||
 | 
										<td>on</td> | 
				
			||||
 | 
										<td><code>$('#toggle-demo').bootstrapToggle('on')</code></td> | 
				
			||||
 | 
										<td>Sets the toggle to 'On' state</td> | 
				
			||||
 | 
										<td><button class="btn btn-default btn-xs" onclick="demo.on('#toggle-demo')">On</button></td> | 
				
			||||
 | 
									</tr> | 
				
			||||
 | 
									<tr> | 
				
			||||
 | 
										<td>off</td> | 
				
			||||
 | 
										<td><code>$('#toggle-demo').bootstrapToggle('off')</code></td> | 
				
			||||
 | 
										<td>Sets the toggle to 'Off' state</td> | 
				
			||||
 | 
										<td><button class="btn btn-default btn-xs" onclick="demo.off('#toggle-demo')">Off</button></td> | 
				
			||||
 | 
									</tr> | 
				
			||||
 | 
									<tr> | 
				
			||||
 | 
										<td>toggle</td> | 
				
			||||
 | 
										<td><code>$('#toggle-demo').bootstrapToggle('toggle')</code></td> | 
				
			||||
 | 
										<td>Toggles the state of the toggle</td> | 
				
			||||
 | 
										<td><button class="btn btn-default btn-xs" onclick="demo.toggle('#toggle-demo')">Toggle</button></td> | 
				
			||||
 | 
									</tr> | 
				
			||||
 | 
									<tr> | 
				
			||||
 | 
										<td>enable</td> | 
				
			||||
 | 
										<td><code>$('#toggle-demo').bootstrapToggle('enable')</code></td> | 
				
			||||
 | 
										<td>Enables the toggle</td> | 
				
			||||
 | 
										<td><button class="btn btn-default btn-xs" onclick="demo.enable('#toggle-demo')">Enable</button></td> | 
				
			||||
 | 
									</tr> | 
				
			||||
 | 
									<tr> | 
				
			||||
 | 
										<td>disable</td> | 
				
			||||
 | 
										<td><code>$('#toggle-demo').bootstrapToggle('disable')</code></td> | 
				
			||||
 | 
										<td>Disables the toggle</td> | 
				
			||||
 | 
										<td><button class="btn btn-default btn-xs" onclick="demo.disable('#toggle-demo')">Disable</button></td> | 
				
			||||
 | 
									</tr> | 
				
			||||
 | 
									</tbody> | 
				
			||||
 | 
									</table> | 
				
			||||
 | 
								</div> | 
				
			||||
 | 
							</div> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
							<div id="events" class="container"> | 
				
			||||
 | 
								<h2>Events</h2> | 
				
			||||
 | 
								<hr> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
								<h3>Event Propagation</h3> | 
				
			||||
 | 
								<p><span class="label label-primary">Note</span> All events are propagated to and from input element to the toggle. </p> | 
				
			||||
 | 
								<p>You should listen to events from the <code><input type="checkbox"></code> directly rather than look for custom events.</p> | 
				
			||||
 | 
								<div class="example"> | 
				
			||||
 | 
									<input id="toggle-event" type="checkbox" data-toggle="toggle"> | 
				
			||||
 | 
									<div id="console-event"></div> | 
				
			||||
 | 
									<script> | 
				
			||||
 | 
										$(function() { | 
				
			||||
 | 
											$('#toggle-event').change(function() { | 
				
			||||
 | 
												$('#console-event').html('Toggle: ' + $(this).prop('checked')) | 
				
			||||
 | 
											}) | 
				
			||||
 | 
										}) | 
				
			||||
 | 
									</script> | 
				
			||||
 | 
								</div> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
								<h3>API vs Input</h3> | 
				
			||||
 | 
								<p>This also means that using the API or Input to trigger events will work both ways.</p> | 
				
			||||
 | 
								<div class="example"> | 
				
			||||
 | 
									<input id="toggle-trigger" type="checkbox" data-toggle="toggle"> | 
				
			||||
 | 
									<button class="btn btn-success" onclick="toggleOn()">On by API</button> | 
				
			||||
 | 
									<button class="btn btn-danger" onclick="toggleOff()">Off by API</button> | 
				
			||||
 | 
									<button class="btn btn-success" onclick="toggleOnByInput()">On by Input</button> | 
				
			||||
 | 
									<button class="btn btn-danger" onclick="toggleOffByInput()">Off by Input</button> | 
				
			||||
 | 
									<script> | 
				
			||||
 | 
										function toggleOn() { | 
				
			||||
 | 
											$('#toggle-trigger').bootstrapToggle('on') | 
				
			||||
 | 
										} | 
				
			||||
 | 
										function toggleOff() { | 
				
			||||
 | 
											$('#toggle-trigger').bootstrapToggle('off')	 | 
				
			||||
 | 
										} | 
				
			||||
 | 
										function toggleOnByInput() { | 
				
			||||
 | 
											$('#toggle-trigger').prop('checked', true).change() | 
				
			||||
 | 
										} | 
				
			||||
 | 
										function toggleOffByInput() { | 
				
			||||
 | 
											$('#toggle-trigger').prop('checked', false).change() | 
				
			||||
 | 
										} | 
				
			||||
 | 
									</script> | 
				
			||||
 | 
								</div> | 
				
			||||
 | 
							</div> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
							<div id="demos" class="container"> | 
				
			||||
 | 
								<h2>Demos</h2> | 
				
			||||
 | 
								<hr> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
								<h3>Sizes</h3> | 
				
			||||
 | 
								<p>Bootstrap toggle is available in different sizes. Refer to Bootstrap <a href="http://getbootstrap.com/css/#buttons-sizes" target="_blank">Button Sizes</a> documentation for more information.</p> | 
				
			||||
 | 
								<div class="example"> | 
				
			||||
 | 
									<input type="checkbox" checked data-toggle="toggle" data-size="large"> | 
				
			||||
 | 
									<input type="checkbox" checked data-toggle="toggle" data-size="normal"> | 
				
			||||
 | 
									<input type="checkbox" checked data-toggle="toggle" data-size="small"> | 
				
			||||
 | 
									<input type="checkbox" checked data-toggle="toggle" data-size="mini"> | 
				
			||||
 | 
								</div> | 
				
			||||
 | 
								 | 
				
			||||
 | 
								<h3>Custom Sizes</h3> | 
				
			||||
 | 
								<p>Bootstrap toggle can handle custom sizes by <code>data-width</code> and <code>data-height</code> options.</p> | 
				
			||||
 | 
								<div class="example"> | 
				
			||||
 | 
									<input type="checkbox" checked data-toggle="toggle" data-width="100" data-height="75"> | 
				
			||||
 | 
									<input type="checkbox" checked data-toggle="toggle" data-height="75"> | 
				
			||||
 | 
									<input type="checkbox" checked data-toggle="toggle" data-width="100"> | 
				
			||||
 | 
								</div> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
								<h3>Colors</h3> | 
				
			||||
 | 
								<p>Bootstrap Toggle supports various colors. Refer to Bootstrap <a href="http://getbootstrap.com/css/#buttons-options" target="_blank">Button Options</a> documentation for more information.</p> | 
				
			||||
 | 
								<div class="example"> | 
				
			||||
 | 
									<input type="checkbox" checked data-toggle="toggle" data-onstyle="primary"> | 
				
			||||
 | 
									<input type="checkbox" checked data-toggle="toggle" data-onstyle="success"> | 
				
			||||
 | 
									<input type="checkbox" checked data-toggle="toggle" data-onstyle="info"> | 
				
			||||
 | 
									<input type="checkbox" checked data-toggle="toggle" data-onstyle="warning"> | 
				
			||||
 | 
									<input type="checkbox" checked data-toggle="toggle" data-onstyle="danger"> | 
				
			||||
 | 
									<input type="checkbox" checked data-toggle="toggle" data-onstyle="default"> | 
				
			||||
 | 
								</div> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
								<h3>Colors Mix</h3> | 
				
			||||
 | 
								<p>You can style on state as well as the off state.</p> | 
				
			||||
 | 
								<div class="example"> | 
				
			||||
 | 
									<input type="checkbox" checked data-toggle="toggle" data-onstyle="success" data-offstyle="danger"> | 
				
			||||
 | 
									<input type="checkbox" checked data-toggle="toggle" data-onstyle="warning" data-offstyle="info"> | 
				
			||||
 | 
								</div> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
								<h3>Custom Style</h3> | 
				
			||||
 | 
								<p>Customized styles can be applied as easily.</p> | 
				
			||||
 | 
								<div class="example"> | 
				
			||||
 | 
									<style> | 
				
			||||
 | 
										.toggle.ios, .toggle-on.ios, .toggle-off.ios { border-radius: 20px; } | 
				
			||||
 | 
										.toggle.ios .toggle-handle { border-radius: 20px; } | 
				
			||||
 | 
									</style> | 
				
			||||
 | 
									<input type="checkbox" checked data-toggle="toggle" data-style="ios"> | 
				
			||||
 | 
									<style> | 
				
			||||
 | 
										.toggle.android { border-radius: 0px;} | 
				
			||||
 | 
										.toggle.android .toggle-handle { border-radius: 0px; } | 
				
			||||
 | 
									</style> | 
				
			||||
 | 
									<input type="checkbox" checked data-toggle="toggle" data-style="android" data-onstyle="info"> | 
				
			||||
 | 
								</div> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
								<h3>Custom Text</h3> | 
				
			||||
 | 
								<p>The text can be changed easily with attributes or options.</p> | 
				
			||||
 | 
								<div class="example"> | 
				
			||||
 | 
									<input type="checkbox" checked data-toggle="toggle" data-on="Ready" data-off="Not Ready" data-onstyle="success" data-offstyle="danger"> | 
				
			||||
 | 
								</div> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
								<h3>Icons/Html Text</h3> | 
				
			||||
 | 
								<p>You can easily add icons or images since html is supported for on/off text.</p> | 
				
			||||
 | 
								<div class="example"> | 
				
			||||
 | 
									<input type="checkbox" checked data-toggle="toggle" data-on="<i class='fa fa-play'></i> Play" data-off="<i class='fa fa-pause'></i> Pause"> | 
				
			||||
 | 
								</div> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
								<h3>Multiple Lines of Text</h3> | 
				
			||||
 | 
								<p>Toggles with multiple lines will adjust its heights.</p> | 
				
			||||
 | 
								<div class="example"> | 
				
			||||
 | 
									<input type="checkbox" checked data-toggle="toggle" data-on="Hello<br>World" data-off="Goodbye<br>World"> | 
				
			||||
 | 
								</div> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
								<h3>Animation Speed</h3> | 
				
			||||
 | 
								<p>Transition speed can be easily controlled with css <code>transition</code> property on <code>.toggle-group</code>. You can also turn animation off completely.</p> | 
				
			||||
 | 
								<div class="example"> | 
				
			||||
 | 
									<style> | 
				
			||||
 | 
										.slow .toggle-group { transition: left 0.7s; -webkit-transition: left 0.7s; } | 
				
			||||
 | 
										.fast .toggle-group { transition: left 0.1s; -webkit-transition: left 0.1s; } | 
				
			||||
 | 
										.quick .toggle-group { transition: none; -webkit-transition: none; } | 
				
			||||
 | 
									</style> | 
				
			||||
 | 
									<input type="checkbox" checked data-toggle="toggle" data-style="slow"> | 
				
			||||
 | 
									<input type="checkbox" checked data-toggle="toggle" data-class="fast"> | 
				
			||||
 | 
									<input type="checkbox" checked data-toggle="toggle" data-style="quick"> | 
				
			||||
 | 
								</div> | 
				
			||||
 | 
							<div> | 
				
			||||
 | 
						</main> | 
				
			||||
 | 
						<footer> | 
				
			||||
 | 
							<div class="container"> | 
				
			||||
 | 
								<p> | 
				
			||||
 | 
									<img class="nyt-logo" src="doc/nyt.png"> | 
				
			||||
 | 
									<img class="nyt-logo" src="doc/nytdev.svg"> | 
				
			||||
 | 
								</p> | 
				
			||||
 | 
								<p>Designed and built by <a href="https://github.com/minhur" target="_blank">Min Hur</a> for <a href="http://developers.nytimes.com" target="_blank">The New York Times Company</a></p> | 
				
			||||
 | 
								<p>Latest Version: 2.2.0 | Code licensed under MIT</p> | 
				
			||||
 | 
								<p> | 
				
			||||
 | 
									<iframe src="https://mdo.github.io/github-buttons/github-btn.html?user=minhur&repo=bootstrap-toggle&type=watch&count=true" allowtransparency="true" frameborder="0" scrolling="0" width="110" height="20"></iframe> | 
				
			||||
 | 
									<iframe src="https://mdo.github.io/github-buttons/github-btn.html?user=minhur&repo=bootstrap-toggle&type=fork&count=true" allowtransparency="true" frameborder="0" scrolling="0" width="95" height="20"></iframe> | 
				
			||||
 | 
								</p> | 
				
			||||
 | 
							</div> | 
				
			||||
 | 
						</footer> | 
				
			||||
 | 
						<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.3/highlight.min.js"></script> | 
				
			||||
 | 
						<script src="doc/script.js"></script> | 
				
			||||
 | 
						<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script> | 
				
			||||
 | 
						<script src="js/bootstrap-toggle.js"></script> | 
				
			||||
 | 
						<script> | 
				
			||||
 | 
							(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ | 
				
			||||
 | 
							(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), | 
				
			||||
 | 
							m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) | 
				
			||||
 | 
							})(window,document,'script','//www.google-analytics.com/analytics.js','ga'); | 
				
			||||
 | 
							ga('create', 'UA-55669452-1', 'auto'); | 
				
			||||
 | 
							ga('send', 'pageview'); | 
				
			||||
 | 
						</script> | 
				
			||||
 | 
					</body> | 
				
			||||
 | 
					</html> | 
				
			||||
@ -0,0 +1,180 @@ | 
				
			|||||
 | 
					/*! ======================================================================== | 
				
			||||
 | 
					 * 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); | 
				
			||||
@ -0,0 +1,9 @@ | 
				
			|||||
 | 
					/*! ======================================================================== | 
				
			||||
 | 
					 * 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(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.toggle"),f="object"==typeof b&&b;e||d.data("bs.toggle",e=new c(this,f)),"string"==typeof b&&e[b]&&e[b]()})}var c=function(b,c){this.$element=a(b),this.options=a.extend({},this.defaults(),c),this.render()};c.VERSION="2.2.0",c.DEFAULTS={on:"On",off:"Off",onstyle:"primary",offstyle:"default",size:"normal",style:"",width:null,height:null},c.prototype.defaults=function(){return{on:this.$element.attr("data-on")||c.DEFAULTS.on,off:this.$element.attr("data-off")||c.DEFAULTS.off,onstyle:this.$element.attr("data-onstyle")||c.DEFAULTS.onstyle,offstyle:this.$element.attr("data-offstyle")||c.DEFAULTS.offstyle,size:this.$element.attr("data-size")||c.DEFAULTS.size,style:this.$element.attr("data-style")||c.DEFAULTS.style,width:this.$element.attr("data-width")||c.DEFAULTS.width,height:this.$element.attr("data-height")||c.DEFAULTS.height}},c.prototype.render=function(){this._onstyle="btn-"+this.options.onstyle,this._offstyle="btn-"+this.options.offstyle;var b="large"===this.options.size?"btn-lg":"small"===this.options.size?"btn-sm":"mini"===this.options.size?"btn-xs":"",c=a('<label class="btn">').html(this.options.on).addClass(this._onstyle+" "+b),d=a('<label class="btn">').html(this.options.off).addClass(this._offstyle+" "+b+" active"),e=a('<span class="toggle-handle btn btn-default">').addClass(b),f=a('<div class="toggle-group">').append(c,d,e),g=a('<div class="toggle btn" data-toggle="toggle">').addClass(this.$element.prop("checked")?this._onstyle:this._offstyle+" off").addClass(b).addClass(this.options.style);this.$element.wrap(g),a.extend(this,{$toggle:this.$element.parent(),$toggleOn:c,$toggleOff:d,$toggleGroup:f}),this.$toggle.append(f);var h=this.options.width||Math.max(c.outerWidth(),d.outerWidth())+e.outerWidth()/2,i=this.options.height||Math.max(c.outerHeight(),d.outerHeight());c.addClass("toggle-on"),d.addClass("toggle-off"),this.$toggle.css({width:h,height:i}),this.options.height&&(c.css("line-height",c.height()+"px"),d.css("line-height",d.height()+"px")),this.update(!0),this.trigger(!0)},c.prototype.toggle=function(){this.$element.prop("checked")?this.off():this.on()},c.prototype.on=function(a){return this.$element.prop("disabled")?!1:(this.$toggle.removeClass(this._offstyle+" off").addClass(this._onstyle),this.$element.prop("checked",!0),void(a||this.trigger()))},c.prototype.off=function(a){return this.$element.prop("disabled")?!1:(this.$toggle.removeClass(this._onstyle).addClass(this._offstyle+" off"),this.$element.prop("checked",!1),void(a||this.trigger()))},c.prototype.enable=function(){this.$toggle.removeAttr("disabled"),this.$element.prop("disabled",!1)},c.prototype.disable=function(){this.$toggle.attr("disabled","disabled"),this.$element.prop("disabled",!0)},c.prototype.update=function(a){this.$element.prop("disabled")?this.disable():this.enable(),this.$element.prop("checked")?this.on(a):this.off(a)},c.prototype.trigger=function(b){this.$element.off("change.bs.toggle"),b||this.$element.change(),this.$element.on("change.bs.toggle",a.proxy(function(){this.update()},this))},c.prototype.destroy=function(){this.$element.off("change.bs.toggle"),this.$toggleGroup.remove(),this.$element.removeData("bs.toggle"),this.$element.unwrap()};var d=a.fn.bootstrapToggle;a.fn.bootstrapToggle=b,a.fn.bootstrapToggle.Constructor=c,a.fn.toggle.noConflict=function(){return a.fn.bootstrapToggle=d,this},a(function(){a("input[type=checkbox][data-toggle^=toggle]").bootstrapToggle()}),a(document).on("click.bs.toggle","div[data-toggle^=toggle]",function(b){var c=a(this).find("input[type=checkbox]");c.bootstrapToggle("toggle"),b.preventDefault()})}(jQuery); | 
				
			||||
 | 
					//# sourceMappingURL=bootstrap-toggle.min.js.map
 | 
				
			||||
@ -0,0 +1 @@ | 
				
			|||||
 | 
					{"version":3,"file":"bootstrap-toggle.min.js","sources":["bootstrap-toggle.js"],"names":["$","Plugin","option","this","each","$this","data","options","Toggle","element","$element","extend","defaults","render","VERSION","DEFAULTS","on","off","onstyle","offstyle","size","style","width","height","prototype","attr","_onstyle","_offstyle","$toggleOn","html","addClass","$toggleOff","$toggleHandle","$toggleGroup","append","$toggle","prop","wrap","parent","Math","max","outerWidth","outerHeight","css","update","trigger","toggle","silent","removeClass","enable","removeAttr","disable","change","proxy","destroy","remove","removeData","unwrap","old","fn","bootstrapToggle","Constructor","noConflict","document","e","$checkbox","find","preventDefault","jQuery"],"mappings":";;;;;;;CASE,SAAUA,GACV,YAoID,SAASC,GAAOC,GACf,MAAOC,MAAKC,KAAK,WAChB,GAAIC,GAAUL,EAAEG,MACZG,EAAUD,EAAMC,KAAK,aACrBC,EAA2B,gBAAVL,IAAsBA,CAEtCI,IAAMD,EAAMC,KAAK,YAAcA,EAAO,GAAIE,GAAOL,KAAMI,IACvC,gBAAVL,IAAsBI,EAAKJ,IAASI,EAAKJ,OAtItD,GAAIM,GAAS,SAAUC,EAASF,GAC/BJ,KAAKO,SAAYV,EAAES,GACnBN,KAAKI,QAAYP,EAAEW,UAAWR,KAAKS,WAAYL,GAC/CJ,KAAKU,SAGNL,GAAOM,QAAW,QAElBN,EAAOO,UACNC,GAAI,KACJC,IAAK,MACLC,QAAS,UACTC,SAAU,UACVC,KAAM,SACNC,MAAO,GACPC,MAAO,KACPC,OAAQ,MAGTf,EAAOgB,UAAUZ,SAAW,WAC3B,OACCI,GAAIb,KAAKO,SAASe,KAAK,YAAcjB,EAAOO,SAASC,GACrDC,IAAKd,KAAKO,SAASe,KAAK,aAAejB,EAAOO,SAASE,IACvDC,QAASf,KAAKO,SAASe,KAAK,iBAAmBjB,EAAOO,SAASG,QAC/DC,SAAUhB,KAAKO,SAASe,KAAK,kBAAoBjB,EAAOO,SAASI,SACjEC,KAAMjB,KAAKO,SAASe,KAAK,cAAgBjB,EAAOO,SAASK,KACzDC,MAAOlB,KAAKO,SAASe,KAAK,eAAiBjB,EAAOO,SAASM,MAC3DC,MAAOnB,KAAKO,SAASe,KAAK,eAAiBjB,EAAOO,SAASO,MAC3DC,OAAQpB,KAAKO,SAASe,KAAK,gBAAkBjB,EAAOO,SAASQ,SAI/Df,EAAOgB,UAAUX,OAAS,WACzBV,KAAKuB,SAAW,OAASvB,KAAKI,QAAQW,QACtCf,KAAKwB,UAAY,OAASxB,KAAKI,QAAQY,QACvC,IAAIC,GAA6B,UAAtBjB,KAAKI,QAAQa,KAAmB,SAClB,UAAtBjB,KAAKI,QAAQa,KAAmB,SACV,SAAtBjB,KAAKI,QAAQa,KAAkB,SAC/B,GACCQ,EAAY5B,EAAE,uBAAuB6B,KAAK1B,KAAKI,QAAQS,IACzDc,SAAS3B,KAAKuB,SAAW,IAAMN,GAC7BW,EAAa/B,EAAE,uBAAuB6B,KAAK1B,KAAKI,QAAQU,KAC1Da,SAAS3B,KAAKwB,UAAY,IAAMP,EAAO,WACrCY,EAAgBhC,EAAE,gDACpB8B,SAASV,GACPa,EAAejC,EAAE,8BACnBkC,OAAON,EAAWG,EAAYC,GAC5BG,EAAUnC,EAAE,iDACd8B,SAAU3B,KAAKO,SAAS0B,KAAK,WAAajC,KAAKuB,SAAWvB,KAAKwB,UAAU,QACzEG,SAASV,GAAMU,SAAS3B,KAAKI,QAAQc,MAEvClB,MAAKO,SAAS2B,KAAKF,GACnBnC,EAAEW,OAAOR,MACRgC,QAAShC,KAAKO,SAAS4B,SACvBV,UAAWA,EACXG,WAAYA,EACZE,aAAcA,IAEf9B,KAAKgC,QAAQD,OAAOD,EAEpB,IAAIX,GAAQnB,KAAKI,QAAQe,OAASiB,KAAKC,IAAIZ,EAAUa,aAAcV,EAAWU,cAAeT,EAAcS,aAAa,EACpHlB,EAASpB,KAAKI,QAAQgB,QAAUgB,KAAKC,IAAIZ,EAAUc,cAAeX,EAAWW,cACjFd,GAAUE,SAAS,aACnBC,EAAWD,SAAS,cACpB3B,KAAKgC,QAAQQ,KAAMrB,MAAOA,EAAOC,OAAQA,IACrCpB,KAAKI,QAAQgB,SAChBK,EAAUe,IAAI,cAAef,EAAUL,SAAW,MAClDQ,EAAWY,IAAI,cAAeZ,EAAWR,SAAW,OAErDpB,KAAKyC,QAAO,GACZzC,KAAK0C,SAAQ,IAGdrC,EAAOgB,UAAUsB,OAAS,WACrB3C,KAAKO,SAAS0B,KAAK,WAAYjC,KAAKc,MACnCd,KAAKa,MAGXR,EAAOgB,UAAUR,GAAK,SAAU+B,GAC/B,MAAI5C,MAAKO,SAAS0B,KAAK,aAAoB,GAC3CjC,KAAKgC,QAAQa,YAAY7C,KAAKwB,UAAY,QAAQG,SAAS3B,KAAKuB,UAChEvB,KAAKO,SAAS0B,KAAK,WAAW,QACzBW,GAAQ5C,KAAK0C,aAGnBrC,EAAOgB,UAAUP,IAAM,SAAU8B,GAChC,MAAI5C,MAAKO,SAAS0B,KAAK,aAAoB,GAC3CjC,KAAKgC,QAAQa,YAAY7C,KAAKuB,UAAUI,SAAS3B,KAAKwB,UAAY,QAClExB,KAAKO,SAAS0B,KAAK,WAAW,QACzBW,GAAQ5C,KAAK0C,aAGnBrC,EAAOgB,UAAUyB,OAAS,WACzB9C,KAAKgC,QAAQe,WAAW,YACxB/C,KAAKO,SAAS0B,KAAK,YAAY,IAGhC5B,EAAOgB,UAAU2B,QAAU,WAC1BhD,KAAKgC,QAAQV,KAAK,WAAY,YAC9BtB,KAAKO,SAAS0B,KAAK,YAAY,IAGhC5B,EAAOgB,UAAUoB,OAAS,SAAUG,GAC/B5C,KAAKO,SAAS0B,KAAK,YAAajC,KAAKgD,UACpChD,KAAK8C,SACN9C,KAAKO,SAAS0B,KAAK,WAAYjC,KAAKa,GAAG+B,GACtC5C,KAAKc,IAAI8B,IAGfvC,EAAOgB,UAAUqB,QAAU,SAAUE,GACpC5C,KAAKO,SAASO,IAAI,oBACb8B,GAAQ5C,KAAKO,SAAS0C,SAC3BjD,KAAKO,SAASM,GAAG,mBAAoBhB,EAAEqD,MAAM,WAC5ClD,KAAKyC,UACHzC,QAGJK,EAAOgB,UAAU8B,QAAU,WAC1BnD,KAAKO,SAASO,IAAI,oBAClBd,KAAK8B,aAAasB,SAClBpD,KAAKO,SAAS8C,WAAW,aACzBrD,KAAKO,SAAS+C,SAiBf,IAAIC,GAAM1D,EAAE2D,GAAGC,eAEf5D,GAAE2D,GAAGC,gBAA8B3D,EACnCD,EAAE2D,GAAGC,gBAAgBC,YAAcrD,EAKnCR,EAAE2D,GAAGb,OAAOgB,WAAa,WAExB,MADA9D,GAAE2D,GAAGC,gBAAkBF,EAChBvD,MAMRH,EAAE,WACDA,EAAE,6CAA6C4D,oBAGhD5D,EAAE+D,UAAU/C,GAAG,kBAAmB,2BAA4B,SAASgD,GACtE,GAAIC,GAAYjE,EAAEG,MAAM+D,KAAK,uBAC7BD,GAAUL,gBAAgB,UAC1BI,EAAEG,oBAGFC"} | 
				
			||||
@ -0,0 +1,180 @@ | 
				
			|||||
 | 
					/*! ======================================================================== | 
				
			||||
 | 
					 * Bootstrap Toggle: bootstrap2-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-large' | 
				
			||||
 | 
								: this.options.size === 'small' ? 'btn-small' | 
				
			||||
 | 
								: this.options.size === 'mini' ? 'btn-mini' | 
				
			||||
 | 
								: '' | 
				
			||||
 | 
							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.width(), $toggleOff.width())+($toggleHandle.outerWidth()/2) | 
				
			||||
 | 
							var height = this.options.height || Math.max($toggleOn.height(), $toggleOff.height()) | 
				
			||||
 | 
							$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); | 
				
			||||
@ -0,0 +1,9 @@ | 
				
			|||||
 | 
					/*! ======================================================================== | 
				
			||||
 | 
					 * Bootstrap Toggle: bootstrap2-toggle.js v2.2.0 | 
				
			||||
 | 
					 * http://www.bootstraptoggle.com
 | 
				
			||||
 | 
					 * ======================================================================== | 
				
			||||
 | 
					 * Copyright 2014 Min Hur, The New York Times Company | 
				
			||||
 | 
					 * Licensed under MIT | 
				
			||||
 | 
					 * ======================================================================== */ | 
				
			||||
 | 
					+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.toggle"),f="object"==typeof b&&b;e||d.data("bs.toggle",e=new c(this,f)),"string"==typeof b&&e[b]&&e[b]()})}var c=function(b,c){this.$element=a(b),this.options=a.extend({},this.defaults(),c),this.render()};c.VERSION="2.2.0",c.DEFAULTS={on:"On",off:"Off",onstyle:"primary",offstyle:"default",size:"normal",style:"",width:null,height:null},c.prototype.defaults=function(){return{on:this.$element.attr("data-on")||c.DEFAULTS.on,off:this.$element.attr("data-off")||c.DEFAULTS.off,onstyle:this.$element.attr("data-onstyle")||c.DEFAULTS.onstyle,offstyle:this.$element.attr("data-offstyle")||c.DEFAULTS.offstyle,size:this.$element.attr("data-size")||c.DEFAULTS.size,style:this.$element.attr("data-style")||c.DEFAULTS.style,width:this.$element.attr("data-width")||c.DEFAULTS.width,height:this.$element.attr("data-height")||c.DEFAULTS.height}},c.prototype.render=function(){this._onstyle="btn-"+this.options.onstyle,this._offstyle="btn-"+this.options.offstyle;var b="large"===this.options.size?"btn-large":"small"===this.options.size?"btn-small":"mini"===this.options.size?"btn-mini":"",c=a('<label class="btn">').html(this.options.on).addClass(this._onstyle+" "+b),d=a('<label class="btn">').html(this.options.off).addClass(this._offstyle+" "+b+" active"),e=a('<span class="toggle-handle btn btn-default">').addClass(b),f=a('<div class="toggle-group">').append(c,d,e),g=a('<div class="toggle btn" data-toggle="toggle">').addClass(this.$element.prop("checked")?this._onstyle:this._offstyle+" off").addClass(b).addClass(this.options.style);this.$element.wrap(g),a.extend(this,{$toggle:this.$element.parent(),$toggleOn:c,$toggleOff:d,$toggleGroup:f}),this.$toggle.append(f);var h=this.options.width||Math.max(c.width(),d.width())+e.outerWidth()/2,i=this.options.height||Math.max(c.height(),d.height());c.addClass("toggle-on"),d.addClass("toggle-off"),this.$toggle.css({width:h,height:i}),this.options.height&&(c.css("line-height",c.height()+"px"),d.css("line-height",d.height()+"px")),this.update(!0),this.trigger(!0)},c.prototype.toggle=function(){this.$element.prop("checked")?this.off():this.on()},c.prototype.on=function(a){return this.$element.prop("disabled")?!1:(this.$toggle.removeClass(this._offstyle+" off").addClass(this._onstyle),this.$element.prop("checked",!0),void(a||this.trigger()))},c.prototype.off=function(a){return this.$element.prop("disabled")?!1:(this.$toggle.removeClass(this._onstyle).addClass(this._offstyle+" off"),this.$element.prop("checked",!1),void(a||this.trigger()))},c.prototype.enable=function(){this.$toggle.removeAttr("disabled"),this.$element.prop("disabled",!1)},c.prototype.disable=function(){this.$toggle.attr("disabled","disabled"),this.$element.prop("disabled",!0)},c.prototype.update=function(a){this.$element.prop("disabled")?this.disable():this.enable(),this.$element.prop("checked")?this.on(a):this.off(a)},c.prototype.trigger=function(b){this.$element.off("change.bs.toggle"),b||this.$element.change(),this.$element.on("change.bs.toggle",a.proxy(function(){this.update()},this))},c.prototype.destroy=function(){this.$element.off("change.bs.toggle"),this.$toggleGroup.remove(),this.$element.removeData("bs.toggle"),this.$element.unwrap()};var d=a.fn.bootstrapToggle;a.fn.bootstrapToggle=b,a.fn.bootstrapToggle.Constructor=c,a.fn.toggle.noConflict=function(){return a.fn.bootstrapToggle=d,this},a(function(){a("input[type=checkbox][data-toggle^=toggle]").bootstrapToggle()}),a(document).on("click.bs.toggle","div[data-toggle^=toggle]",function(b){var c=a(this).find("input[type=checkbox]");c.bootstrapToggle("toggle"),b.preventDefault()})}(jQuery); | 
				
			||||
 | 
					//# sourceMappingURL=bootstrap2-toggle.min.js.map
 | 
				
			||||
@ -0,0 +1 @@ | 
				
			|||||
 | 
					{"version":3,"file":"bootstrap2-toggle.min.js","sources":["bootstrap2-toggle.js"],"names":["$","Plugin","option","this","each","$this","data","options","Toggle","element","$element","extend","defaults","render","VERSION","DEFAULTS","on","off","onstyle","offstyle","size","style","width","height","prototype","attr","_onstyle","_offstyle","$toggleOn","html","addClass","$toggleOff","$toggleHandle","$toggleGroup","append","$toggle","prop","wrap","parent","Math","max","outerWidth","css","update","trigger","toggle","silent","removeClass","enable","removeAttr","disable","change","proxy","destroy","remove","removeData","unwrap","old","fn","bootstrapToggle","Constructor","noConflict","document","e","$checkbox","find","preventDefault","jQuery"],"mappings":";;;;;;;CASE,SAAUA,GACV,YAoID,SAASC,GAAOC,GACf,MAAOC,MAAKC,KAAK,WAChB,GAAIC,GAAUL,EAAEG,MACZG,EAAUD,EAAMC,KAAK,aACrBC,EAA2B,gBAAVL,IAAsBA,CAEtCI,IAAMD,EAAMC,KAAK,YAAcA,EAAO,GAAIE,GAAOL,KAAMI,IACvC,gBAAVL,IAAsBI,EAAKJ,IAASI,EAAKJ,OAtItD,GAAIM,GAAS,SAAUC,EAASF,GAC/BJ,KAAKO,SAAYV,EAAES,GACnBN,KAAKI,QAAYP,EAAEW,UAAWR,KAAKS,WAAYL,GAC/CJ,KAAKU,SAGNL,GAAOM,QAAW,QAElBN,EAAOO,UACNC,GAAI,KACJC,IAAK,MACLC,QAAS,UACTC,SAAU,UACVC,KAAM,SACNC,MAAO,GACPC,MAAO,KACPC,OAAQ,MAGTf,EAAOgB,UAAUZ,SAAW,WAC3B,OACCI,GAAIb,KAAKO,SAASe,KAAK,YAAcjB,EAAOO,SAASC,GACrDC,IAAKd,KAAKO,SAASe,KAAK,aAAejB,EAAOO,SAASE,IACvDC,QAASf,KAAKO,SAASe,KAAK,iBAAmBjB,EAAOO,SAASG,QAC/DC,SAAUhB,KAAKO,SAASe,KAAK,kBAAoBjB,EAAOO,SAASI,SACjEC,KAAMjB,KAAKO,SAASe,KAAK,cAAgBjB,EAAOO,SAASK,KACzDC,MAAOlB,KAAKO,SAASe,KAAK,eAAiBjB,EAAOO,SAASM,MAC3DC,MAAOnB,KAAKO,SAASe,KAAK,eAAiBjB,EAAOO,SAASO,MAC3DC,OAAQpB,KAAKO,SAASe,KAAK,gBAAkBjB,EAAOO,SAASQ,SAI/Df,EAAOgB,UAAUX,OAAS,WACzBV,KAAKuB,SAAW,OAASvB,KAAKI,QAAQW,QACtCf,KAAKwB,UAAY,OAASxB,KAAKI,QAAQY,QACvC,IAAIC,GAA6B,UAAtBjB,KAAKI,QAAQa,KAAmB,YAClB,UAAtBjB,KAAKI,QAAQa,KAAmB,YACV,SAAtBjB,KAAKI,QAAQa,KAAkB,WAC/B,GACCQ,EAAY5B,EAAE,uBAAuB6B,KAAK1B,KAAKI,QAAQS,IACzDc,SAAS3B,KAAKuB,SAAW,IAAMN,GAC7BW,EAAa/B,EAAE,uBAAuB6B,KAAK1B,KAAKI,QAAQU,KAC1Da,SAAS3B,KAAKwB,UAAY,IAAMP,EAAO,WACrCY,EAAgBhC,EAAE,gDACpB8B,SAASV,GACPa,EAAejC,EAAE,8BACnBkC,OAAON,EAAWG,EAAYC,GAC5BG,EAAUnC,EAAE,iDACd8B,SAAU3B,KAAKO,SAAS0B,KAAK,WAAajC,KAAKuB,SAAWvB,KAAKwB,UAAU,QACzEG,SAASV,GAAMU,SAAS3B,KAAKI,QAAQc,MAEvClB,MAAKO,SAAS2B,KAAKF,GACnBnC,EAAEW,OAAOR,MACRgC,QAAShC,KAAKO,SAAS4B,SACvBV,UAAWA,EACXG,WAAYA,EACZE,aAAcA,IAEf9B,KAAKgC,QAAQD,OAAOD,EAEpB,IAAIX,GAAQnB,KAAKI,QAAQe,OAASiB,KAAKC,IAAIZ,EAAUN,QAASS,EAAWT,SAAUU,EAAcS,aAAa,EAC1GlB,EAASpB,KAAKI,QAAQgB,QAAUgB,KAAKC,IAAIZ,EAAUL,SAAUQ,EAAWR,SAC5EK,GAAUE,SAAS,aACnBC,EAAWD,SAAS,cACpB3B,KAAKgC,QAAQO,KAAMpB,MAAOA,EAAOC,OAAQA,IACrCpB,KAAKI,QAAQgB,SAChBK,EAAUc,IAAI,cAAed,EAAUL,SAAW,MAClDQ,EAAWW,IAAI,cAAeX,EAAWR,SAAW,OAErDpB,KAAKwC,QAAO,GACZxC,KAAKyC,SAAQ,IAGdpC,EAAOgB,UAAUqB,OAAS,WACrB1C,KAAKO,SAAS0B,KAAK,WAAYjC,KAAKc,MACnCd,KAAKa,MAGXR,EAAOgB,UAAUR,GAAK,SAAU8B,GAC/B,MAAI3C,MAAKO,SAAS0B,KAAK,aAAoB,GAC3CjC,KAAKgC,QAAQY,YAAY5C,KAAKwB,UAAY,QAAQG,SAAS3B,KAAKuB,UAChEvB,KAAKO,SAAS0B,KAAK,WAAW,QACzBU,GAAQ3C,KAAKyC,aAGnBpC,EAAOgB,UAAUP,IAAM,SAAU6B,GAChC,MAAI3C,MAAKO,SAAS0B,KAAK,aAAoB,GAC3CjC,KAAKgC,QAAQY,YAAY5C,KAAKuB,UAAUI,SAAS3B,KAAKwB,UAAY,QAClExB,KAAKO,SAAS0B,KAAK,WAAW,QACzBU,GAAQ3C,KAAKyC,aAGnBpC,EAAOgB,UAAUwB,OAAS,WACzB7C,KAAKgC,QAAQc,WAAW,YACxB9C,KAAKO,SAAS0B,KAAK,YAAY,IAGhC5B,EAAOgB,UAAU0B,QAAU,WAC1B/C,KAAKgC,QAAQV,KAAK,WAAY,YAC9BtB,KAAKO,SAAS0B,KAAK,YAAY,IAGhC5B,EAAOgB,UAAUmB,OAAS,SAAUG,GAC/B3C,KAAKO,SAAS0B,KAAK,YAAajC,KAAK+C,UACpC/C,KAAK6C,SACN7C,KAAKO,SAAS0B,KAAK,WAAYjC,KAAKa,GAAG8B,GACtC3C,KAAKc,IAAI6B,IAGftC,EAAOgB,UAAUoB,QAAU,SAAUE,GACpC3C,KAAKO,SAASO,IAAI,oBACb6B,GAAQ3C,KAAKO,SAASyC,SAC3BhD,KAAKO,SAASM,GAAG,mBAAoBhB,EAAEoD,MAAM,WAC5CjD,KAAKwC,UACHxC,QAGJK,EAAOgB,UAAU6B,QAAU,WAC1BlD,KAAKO,SAASO,IAAI,oBAClBd,KAAK8B,aAAaqB,SAClBnD,KAAKO,SAAS6C,WAAW,aACzBpD,KAAKO,SAAS8C,SAiBf,IAAIC,GAAMzD,EAAE0D,GAAGC,eAEf3D,GAAE0D,GAAGC,gBAA8B1D,EACnCD,EAAE0D,GAAGC,gBAAgBC,YAAcpD,EAKnCR,EAAE0D,GAAGb,OAAOgB,WAAa,WAExB,MADA7D,GAAE0D,GAAGC,gBAAkBF,EAChBtD,MAMRH,EAAE,WACDA,EAAE,6CAA6C2D,oBAGhD3D,EAAE8D,UAAU9C,GAAG,kBAAmB,2BAA4B,SAAS+C,GACtE,GAAIC,GAAYhE,EAAEG,MAAM8D,KAAK,uBAC7BD,GAAUL,gBAAgB,UAC1BI,EAAEG,oBAGFC"} | 
				
			||||
@ -0,0 +1,28 @@ | 
				
			|||||
 | 
					{ | 
				
			||||
 | 
					  "name": "bootstrap-toggle", | 
				
			||||
 | 
					  "description": "Bootstrap Toggle is a highly flexible Bootstrap plugin that converts checkboxes into toggles", | 
				
			||||
 | 
					  "version": "2.2.2", | 
				
			||||
 | 
					  "main": "js/bootstrap-toggle.js", | 
				
			||||
 | 
					  "keywords": [ | 
				
			||||
 | 
					    "bootstrap", | 
				
			||||
 | 
					    "toggle", | 
				
			||||
 | 
					    "bootstrap-toggle", | 
				
			||||
 | 
					    "switch", | 
				
			||||
 | 
					    "bootstrap-switch" | 
				
			||||
 | 
					  ], | 
				
			||||
 | 
					  "homepage": "http://www.bootstraptoggle.com", | 
				
			||||
 | 
					  "repository": { | 
				
			||||
 | 
					    "type": "git", | 
				
			||||
 | 
					    "url": "https://github.com/minhur/bootstrap-toggle.git" | 
				
			||||
 | 
					  }, | 
				
			||||
 | 
					  "license": "MIT", | 
				
			||||
 | 
					  "author": "Min Hur <min.hur@gmail.com>", | 
				
			||||
 | 
					  "bugs": { | 
				
			||||
 | 
					    "url": "https://github.com/minhur/bootstrap-toggle/issues" | 
				
			||||
 | 
					  }, | 
				
			||||
 | 
					  "devDependencies": { | 
				
			||||
 | 
					    "grunt-contrib-clean": "^0.6.0", | 
				
			||||
 | 
					    "grunt-contrib-cssmin": "^0.10.0", | 
				
			||||
 | 
					    "grunt-contrib-uglify": "^0.6.0" | 
				
			||||
 | 
					  } | 
				
			||||
 | 
					} | 
				
			||||
								
									
										File diff suppressed because one or more lines are too long
									
								
							
						
					
								
									
										File diff suppressed because one or more lines are too long
									
								
							
						
					
								
									
										File diff suppressed because one or more lines are too long
									
								
							
						
					
								
									
										File diff suppressed because one or more lines are too long
									
								
							
						
					
								
									
										File diff suppressed because one or more lines are too long
									
								
							
						
					
								
									
										File diff suppressed because one or more lines are too long
									
								
							
						
					
								
									
										File diff suppressed because one or more lines are too long
									
								
							
						
					
								
									
										File diff suppressed because one or more lines are too long
									
								
							
						
					
								
									
										File diff suppressed because one or more lines are too long
									
								
							
						
					@ -0,0 +1,21 @@ | 
				
			|||||
 | 
					The MIT License (MIT) | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					Copyright (c) 2017, loading.io | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					Permission is hereby granted, free of charge, to any person obtaining a copy | 
				
			||||
 | 
					of this software and associated documentation files (the "Software"), to deal | 
				
			||||
 | 
					in the Software without restriction, including without limitation the rights | 
				
			||||
 | 
					to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | 
				
			||||
 | 
					copies of the Software, and to permit persons to whom the Software is | 
				
			||||
 | 
					furnished to do so, subject to the following conditions: | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					The above copyright notice and this permission notice shall be included in | 
				
			||||
 | 
					all copies or substantial portions of the Software. | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | 
				
			||||
 | 
					IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | 
				
			||||
 | 
					FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | 
				
			||||
 | 
					AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | 
				
			||||
 | 
					LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | 
				
			||||
 | 
					OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | 
				
			||||
 | 
					THE SOFTWARE. | 
				
			||||
@ -0,0 +1,49 @@ | 
				
			|||||
 | 
					loading-Bar | 
				
			||||
 | 
					============= | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					loading-Bar is a highly flexible, open sourced progress bar library based on SVG. For demo and documentation, check out the official website: [https://loading.io/progress/](https://loading.io/progress/) | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					Example | 
				
			||||
 | 
					============= | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					Usage | 
				
			||||
 | 
					============= | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					download and include the required [JS](https://raw.githubusercontent.com/loadingio/loading-bar/master/dist/loading-bar.js) and [CSS](https://raw.githubusercontent.com/loadingio/loading-bar/master/dist/loading-bar.css) files: | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    <link rel="stylesheet" type="text/css" href="loading-bar.css"/> | 
				
			||||
 | 
					    <script type="text/javascript" src="loading-bar.js"></script> | 
				
			||||
 | 
					    <div class="ldBar"></div> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					Building | 
				
			||||
 | 
					============= | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					### Install prerequisites | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					``` | 
				
			||||
 | 
					sudo npm install -g gulp | 
				
			||||
 | 
					``` | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					### Build | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					``` | 
				
			||||
 | 
					git clone https://github.com/loadingio/loading-bar | 
				
			||||
 | 
					cd loading-bar | 
				
			||||
 | 
					npm install | 
				
			||||
 | 
					gulp | 
				
			||||
 | 
					``` | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					Built files will be written into `./build` directory | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					LICENSE | 
				
			||||
 | 
					============= | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					MIT License | 
				
			||||
@ -0,0 +1,3 @@ | 
				
			|||||
 | 
					build | 
				
			||||
 | 
					.*.swp | 
				
			||||
 | 
					node_modules | 
				
			||||
@ -0,0 +1,24 @@ | 
				
			|||||
 | 
					#!/usr/bin/env bash | 
				
			||||
 | 
					mkdir -p dist | 
				
			||||
 | 
					echo "build src/loading-bar.ls ..." | 
				
			||||
 | 
					./node_modules/.bin/lsc -cbp src/loading-bar.ls > dist/loading-bar-raw.js | 
				
			||||
 | 
					echo "build src/presets.ls ..." | 
				
			||||
 | 
					./node_modules/.bin/lsc -cbp src/presets.ls > dist/presets.js | 
				
			||||
 | 
					echo "build src/loading-bar.styl -> dist/loading-bar.css ..." | 
				
			||||
 | 
					./node_modules/.bin/stylus -p src/loading-bar.styl > dist/loading-bar.css | 
				
			||||
 | 
					echo "bundle loading-bar ..." | 
				
			||||
 | 
					./node_modules/.bin/browserify dist/loading-bar-raw.js > dist/loading-bar.js | 
				
			||||
 | 
					rm -f dist/loading-bar-raw.js | 
				
			||||
 | 
					rm -f dist/presets.js | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					echo "minifying loading-bar.js ..." | 
				
			||||
 | 
					./node_modules/.bin/uglifyjs dist/loading-bar.js > dist/loading-bar.min.js | 
				
			||||
 | 
					echo "minifying loading-bar.css ..." | 
				
			||||
 | 
					./node_modules/.bin/uglifycss dist/loading-bar.css > dist/loading-bar.min.css | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					echo "zip loading-bar.js and loading-bar.css ..." | 
				
			||||
 | 
					rm -f dist/loading-bar.zip | 
				
			||||
 | 
					zip -r dist/loading-bar.zip dist/loading-bar.js dist/loading-bar.css dist/loading-bar.min.js dist/loading-bar.min.css | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					echo "done." | 
				
			||||
 | 
					
 | 
				
			||||
@ -0,0 +1,148 @@ | 
				
			|||||
 | 
					argv = require 'yargs' .argv | 
				
			||||
 | 
					only-compile = false | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					require! <[ watchify gulp browserify glob path fs globby touch gulp-livescript]> | 
				
			||||
 | 
					require! 'prelude-ls': {union, join, keys, map, unique} | 
				
			||||
 | 
					require! 'vinyl-source-stream': source | 
				
			||||
 | 
					require! 'vinyl-buffer': buffer | 
				
			||||
 | 
					require! 'gulp-watch': watch | 
				
			||||
 | 
					require! 'gulp-pug': pug | 
				
			||||
 | 
					require! 'gulp-stylus': stylus | 
				
			||||
 | 
					require! 'node-notifier': notifier | 
				
			||||
 | 
					require! 'gulp-concat': cat | 
				
			||||
 | 
					require! 'gulp-uglify': uglify | 
				
			||||
 | 
					require! 'gulp-flatten': flatten | 
				
			||||
 | 
					require! 'gulp-tap': tap | 
				
			||||
 | 
					require! 'gulp-cached': cache | 
				
			||||
 | 
					require! 'gulp-sourcemaps': sourcemaps | 
				
			||||
 | 
					require! 'browserify-livescript' | 
				
			||||
 | 
					require! 'run-sequence' | 
				
			||||
 | 
					require! 'through2':through | 
				
			||||
 | 
					require! 'optimize-js' | 
				
			||||
 | 
					require! 'gulp-if-else': if-else | 
				
			||||
 | 
					require! 'gulp-rename': rename | 
				
			||||
 | 
					require! 'gulp-zip': zip | 
				
			||||
 | 
					require! 'gulp-remove-files': remove-files | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Build Settings | 
				
			||||
 | 
					notification-enabled = yes | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Project Folder Structure | 
				
			||||
 | 
					src-path = "#{__dirname}/src" | 
				
			||||
 | 
					build-path = "#{__dirname}/build" | 
				
			||||
 | 
					out-dir = argv.out-dir or build-path | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					on-error = (source, msg) -> | 
				
			||||
 | 
					    msg = try | 
				
			||||
 | 
					        msg.to-string! | 
				
			||||
 | 
					    catch | 
				
			||||
 | 
					        "unknown message: #{e}" | 
				
			||||
 | 
					    console-msg = "GULP ERROR: #{source} : #{msg}" | 
				
			||||
 | 
					    console.log console-msg | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					log-info = (source, msg) -> | 
				
			||||
 | 
					    msg = try | 
				
			||||
 | 
					        msg.to-string! | 
				
			||||
 | 
					    catch | 
				
			||||
 | 
					        "unknown message: #{e}" | 
				
			||||
 | 
					    console-msg = "GULP INFO: #{source} : #{msg}" | 
				
			||||
 | 
					    console.log console-msg | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					ls-entry-file = "#{src-path}/loading-bar.ls" | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					for-browserify = | 
				
			||||
 | 
					    "#{src-path}/*.ls" | 
				
			||||
 | 
					    ... | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Organize Tasks | 
				
			||||
 | 
					gulp.task \default, -> | 
				
			||||
 | 
					    do function run-all | 
				
			||||
 | 
					        gulp.start do | 
				
			||||
 | 
					            \lib | 
				
			||||
 | 
					            \browserify | 
				
			||||
 | 
					            \css | 
				
			||||
 | 
					            \zip | 
				
			||||
 | 
					            \compressjs | 
				
			||||
 | 
					            ... | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    watch for-browserify, -> | 
				
			||||
 | 
					        gulp.start \browserify | 
				
			||||
 | 
					    watch ["#{src-path}/*.styl"], -> | 
				
			||||
 | 
					        gulp.start \css | 
				
			||||
 | 
					    watch ["#{src-path}/*.ls"], -> | 
				
			||||
 | 
					        gulp.start \lib | 
				
			||||
 | 
					    watch ["#{out-dir}/*.js", "#{out-dir}/*.css"], -> | 
				
			||||
 | 
					        gulp.start \zip | 
				
			||||
 | 
					    watch ["#{out-dir}/loading-bar.js"], -> | 
				
			||||
 | 
					        gulp.start \compressjs | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					browserify-cache = {} | 
				
			||||
 | 
					bundler = browserify do | 
				
			||||
 | 
					    entries: ls-entry-file | 
				
			||||
 | 
					    debug: true | 
				
			||||
 | 
					    paths: | 
				
			||||
 | 
					        src-path | 
				
			||||
 | 
					        ... | 
				
			||||
 | 
					    extensions: <[ .ls ]> | 
				
			||||
 | 
					    cache: browserify-cache | 
				
			||||
 | 
					    package-cache: {} | 
				
			||||
 | 
					    plugin: | 
				
			||||
 | 
					        watchify unless only-compile | 
				
			||||
 | 
					        ... | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					bundler.transform browserify-livescript | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					first-browserify-done = no | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					function bundle | 
				
			||||
 | 
					    bundler | 
				
			||||
 | 
					        .bundle! | 
				
			||||
 | 
					        .on \error, (err) -> | 
				
			||||
 | 
					            msg = try | 
				
			||||
 | 
					                err.message | 
				
			||||
 | 
					            catch | 
				
			||||
 | 
					                err | 
				
			||||
 | 
					            on-error \browserify, msg | 
				
			||||
 | 
					            @emit \end | 
				
			||||
 | 
					        .pipe source "loading-bar.js" | 
				
			||||
 | 
					        .pipe buffer! | 
				
			||||
 | 
					        #.pipe sourcemaps.init {+load-maps, +large-files} | 
				
			||||
 | 
					        .pipe if-else only-compile, uglify | 
				
			||||
 | 
					        #.pipe rename basename: 'app' | 
				
			||||
 | 
					        #.pipe sourcemaps.write '.' | 
				
			||||
 | 
					        .pipe gulp.dest out-dir | 
				
			||||
 | 
					        .pipe tap (file) -> | 
				
			||||
 | 
					            log-info \browserify, "Browserify finished #{if out-dir isnt build-path then "out-dir: #{out-dir}"}" | 
				
			||||
 | 
					            console.log "------------------------------------------" | 
				
			||||
 | 
					            first-browserify-done := yes | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					gulp.task \browserify, -> | 
				
			||||
 | 
					    bundle! | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					gulp.task \lib, -> | 
				
			||||
 | 
					  gulp.src \src/*.ls | 
				
			||||
 | 
					    .pipe gulp-livescript bare: true | 
				
			||||
 | 
					    .pipe gulp.dest 'lib' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					gulp.task \css, -> | 
				
			||||
 | 
					    gulp.src \src/loading-bar.styl | 
				
			||||
 | 
					        .pipe stylus({compress: true}) | 
				
			||||
 | 
					        .pipe gulp.dest out-dir | 
				
			||||
 | 
					        .pipe tap (file) -> | 
				
			||||
 | 
					            log-info \css, "Stylus -> CSS  finished #{if out-dir isnt build-path then "out-dir: #{out-dir}"}" | 
				
			||||
 | 
					            console.log "------------------------------------------" | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					gulp.task \zip, -> | 
				
			||||
 | 
					    gulp.src ["#out-dir/*.js","#out-dir/*.css", "!build/*.min.*"] | 
				
			||||
 | 
					      .pipe zip("loading-bar.zip") | 
				
			||||
 | 
					      .pipe gulp.dest out-dir | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					gulp.task \compressjs, -> | 
				
			||||
 | 
					    gulp.src ["#out-dir/*.js", "!build/*.min.*"] | 
				
			||||
 | 
					      .pipe uglify! | 
				
			||||
 | 
					      .pipe rename suffix: \.min | 
				
			||||
 | 
					      .pipe gulp.dest out-dir | 
				
			||||
| 
		 After Width: | Height: | Size: 331 KiB  | 
@ -0,0 +1 @@ | 
				
			|||||
 | 
					loading bar | 
				
			||||
@ -0,0 +1,22 @@ | 
				
			|||||
 | 
					var x$; | 
				
			||||
 | 
					x$ = angular.module('loadingio', []); | 
				
			||||
 | 
					x$.directive('ldbar', ['$compile', '$timeout'].concat(function($compile, $timeout){ | 
				
			||||
 | 
					  return { | 
				
			||||
 | 
					    restrict: 'A', | 
				
			||||
 | 
					    scope: { | 
				
			||||
 | 
					      model: '=ngModel', | 
				
			||||
 | 
					      config: '=config' | 
				
			||||
 | 
					    }, | 
				
			||||
 | 
					    link: function(s, e, a, c){ | 
				
			||||
 | 
					      var bar; | 
				
			||||
 | 
					      if (e[0]) { | 
				
			||||
 | 
					        bar = !e[0].ldBar | 
				
			||||
 | 
					          ? new ldBar(e[0], s.config || {}) | 
				
			||||
 | 
					          : e[0].ldBar; | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					      return s.$watch('model', function(n, o){ | 
				
			||||
 | 
					        return bar.set(n); | 
				
			||||
 | 
					      }); | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					  }; | 
				
			||||
 | 
					})); | 
				
			||||
@ -0,0 +1,5 @@ | 
				
			|||||
 | 
					export = ldBar; | 
				
			||||
 | 
					declare class ldBar { | 
				
			||||
 | 
					  constructor(element: any, options: object); | 
				
			||||
 | 
					  set(value: number): void; | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,712 @@ | 
				
			|||||
 | 
					var presets, simpleStr, wrap, slice$ = [].slice, toString$ = {}.toString; | 
				
			||||
 | 
					presets = require('./presets').presets; | 
				
			||||
 | 
					simpleStr = function(arr){ | 
				
			||||
 | 
					  return arr.join(''); | 
				
			||||
 | 
					}; | 
				
			||||
 | 
					wrap = function(content){ | 
				
			||||
 | 
					  return "data:image/svg+xml;base64," + btoa(content); | 
				
			||||
 | 
					}; | 
				
			||||
 | 
					(function(){ | 
				
			||||
 | 
					  var make, handler, ldBar; | 
				
			||||
 | 
					  make = { | 
				
			||||
 | 
					    head: function(viewBox){ | 
				
			||||
 | 
					      return "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n        <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"" + viewBox + "\">"; | 
				
			||||
 | 
					    }, | 
				
			||||
 | 
					    gradient: function(dir, dur){ | 
				
			||||
 | 
					      var colors, ret, len, gx, gy, x, y, i$, i, idx; | 
				
			||||
 | 
					      dir == null && (dir = 45); | 
				
			||||
 | 
					      dur == null && (dur = 1); | 
				
			||||
 | 
					      colors = slice$.call(arguments, 2); | 
				
			||||
 | 
					      ret = [this.head("0 0 100 100")]; | 
				
			||||
 | 
					      len = colors.length * 4 + 1; | 
				
			||||
 | 
					      dir = dir * Math.PI / 180; | 
				
			||||
 | 
					      gx = Math.pow(Math.cos(dir), 2); | 
				
			||||
 | 
					      gy = Math.sqrt(gx - Math.pow(gx, 2)); | 
				
			||||
 | 
					      if (dir > Math.PI * 0.25) { | 
				
			||||
 | 
					        gy = Math.pow(Math.sin(dir), 2); | 
				
			||||
 | 
					        gx = Math.sqrt(gy - Math.pow(gy, 2)); | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					      x = gx * 100; | 
				
			||||
 | 
					      y = gy * 100; | 
				
			||||
 | 
					      ret.push("<defs><linearGradient id=\"gradient\" x1=\"0\" x2=\"" + gx + "\" y1=\"0\" y2=\"" + gy + "\">"); | 
				
			||||
 | 
					      for (i$ = 0; i$ < len; ++i$) { | 
				
			||||
 | 
					        i = i$; | 
				
			||||
 | 
					        idx = i * 100 / (len - 1); | 
				
			||||
 | 
					        ret.push("<stop offset=\"" + idx + "%\" stop-color=\"" + colors[i % colors.length] + "\"/>"); | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					      ret.push("</linearGradient></defs>\n<rect x=\"0\" y=\"0\" width=\"400\" height=\"400\" fill=\"url(#gradient)\">\n<animateTransform attributeName=\"transform\" type=\"translate\" from=\"-" + x + ",-" + y + "\"\nto=\"0,0\" dur=\"" + dur + "s\" repeatCount=\"indefinite\"/></rect></svg>"); | 
				
			||||
 | 
					      return wrap(ret.join("")); | 
				
			||||
 | 
					    }, | 
				
			||||
 | 
					    stripe: function(c1, c2, dur){ | 
				
			||||
 | 
					      var ret, i; | 
				
			||||
 | 
					      c1 == null && (c1 = '#b4b4b4'); | 
				
			||||
 | 
					      c2 == null && (c2 = '#e6e6e6'); | 
				
			||||
 | 
					      dur == null && (dur = 1); | 
				
			||||
 | 
					      ret = [this.head("0 0 100 100")]; | 
				
			||||
 | 
					      ret = ret.concat([ | 
				
			||||
 | 
					        "<rect fill=\"" + c2 + "\" width=\"100\" height=\"100\"/>", "<g><g>", (function(){ | 
				
			||||
 | 
					          var i$, results$ = []; | 
				
			||||
 | 
					          for (i$ = 0; i$ < 13; ++i$) { | 
				
			||||
 | 
					            i = i$; | 
				
			||||
 | 
					            results$.push(("<polygon fill=\"" + c1 + "\" ") + ("points=\"" + (-90 + i * 20) + ",100 " + (-100 + i * 20) + ",") + ("100 " + (-60 + i * 20) + ",0 " + (-50 + i * 20) + ",0 \"/>")); | 
				
			||||
 | 
					          } | 
				
			||||
 | 
					          return results$; | 
				
			||||
 | 
					        }()).join(""), "</g><animateTransform attributeName=\"transform\" type=\"translate\" ", "from=\"0,0\" to=\"20,0\" dur=\"" + dur + "s\" repeatCount=\"indefinite\"/></g></svg>" | 
				
			||||
 | 
					      ].join("")); | 
				
			||||
 | 
					      return wrap(ret); | 
				
			||||
 | 
					    }, | 
				
			||||
 | 
					    bubble: function(c1, c2, count, dur, size, sw){ | 
				
			||||
 | 
					      var ret, i$, i, idx, x, r, d; | 
				
			||||
 | 
					      c1 == null && (c1 = '#39d'); | 
				
			||||
 | 
					      c2 == null && (c2 = '#9cf'); | 
				
			||||
 | 
					      count == null && (count = 15); | 
				
			||||
 | 
					      dur == null && (dur = 1); | 
				
			||||
 | 
					      size == null && (size = 6); | 
				
			||||
 | 
					      sw == null && (sw = 1); | 
				
			||||
 | 
					      ret = [this.head("0 0 200 200"), "<rect x=\"0\" y=\"0\" width=\"200\" height=\"200\" fill=\"" + c1 + "\"/>"]; | 
				
			||||
 | 
					      for (i$ = 0; i$ < count; ++i$) { | 
				
			||||
 | 
					        i = i$; | 
				
			||||
 | 
					        idx = -(i / count) * dur; | 
				
			||||
 | 
					        x = Math.random() * 184 + 8; | 
				
			||||
 | 
					        r = (Math.random() * 0.7 + 0.3) * size; | 
				
			||||
 | 
					        d = dur * (1 + Math.random() * 0.5); | 
				
			||||
 | 
					        ret.push(["<circle cx=\"" + x + "\" cy=\"0\" r=\"" + r + "\" fill=\"none\" stroke=\"" + c2 + "\" stroke-width=\"" + sw + "\">", "<animate attributeName=\"cy\" values=\"190;-10\" times=\"0;1\" ", "dur=\"" + d + "s\" begin=\"" + idx + "s\" repeatCount=\"indefinite\"/>", "</circle>", "<circle cx=\"" + x + "\" cy=\"0\" r=\"" + r + "\" fill=\"none\" stroke=\"" + c2 + "\" stroke-width=\"" + sw + "\">", "<animate attributeName=\"cy\" values=\"390;190\" times=\"0;1\" ", "dur=\"" + d + "s\" begin=\"" + idx + "s\" repeatCount=\"indefinite\"/>", "</circle>"].join("")); | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					      return wrap(ret.join("") + "</svg>"); | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					  }; | 
				
			||||
 | 
					  handler = { | 
				
			||||
 | 
					    queue: {}, | 
				
			||||
 | 
					    running: false, | 
				
			||||
 | 
					    main: function(timestamp){ | 
				
			||||
 | 
					      var keepon, removed, k, ref$, func, ret, this$ = this; | 
				
			||||
 | 
					      keepon = false; | 
				
			||||
 | 
					      removed = []; | 
				
			||||
 | 
					      for (k in ref$ = this.queue) { | 
				
			||||
 | 
					        func = ref$[k]; | 
				
			||||
 | 
					        ret = func(timestamp); | 
				
			||||
 | 
					        if (!ret) { | 
				
			||||
 | 
					          removed.push(func); | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					        keepon = keepon || ret; | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					      for (k in ref$ = this.queue) { | 
				
			||||
 | 
					        func = ref$[k]; | 
				
			||||
 | 
					        if (removed.indexOf(func) >= 0) { | 
				
			||||
 | 
					          delete this.queue[k]; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					      if (keepon) { | 
				
			||||
 | 
					        return requestAnimationFrame(function(it){ | 
				
			||||
 | 
					          return this$.main(it); | 
				
			||||
 | 
					        }); | 
				
			||||
 | 
					      } else { | 
				
			||||
 | 
					        return this.running = false; | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					    }, | 
				
			||||
 | 
					    add: function(key, f){ | 
				
			||||
 | 
					      var this$ = this; | 
				
			||||
 | 
					      if (!this.queue[key]) { | 
				
			||||
 | 
					        this.queue[key] = f; | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					      if (!this.running) { | 
				
			||||
 | 
					        this.running = true; | 
				
			||||
 | 
					        return requestAnimationFrame(function(it){ | 
				
			||||
 | 
					          return this$.main(it); | 
				
			||||
 | 
					        }); | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					  }; | 
				
			||||
 | 
					  window.ldBar = ldBar = function(selector, option){ | 
				
			||||
 | 
					    var xmlns, root, cls, idPrefix, id, domTree, newNode, x$, config, attr, that, isStroke, parseRes, dom, svg, text, group, length, path0, path1, patimg, img, ret, size, this$ = this; | 
				
			||||
 | 
					    option == null && (option = {}); | 
				
			||||
 | 
					    xmlns = { | 
				
			||||
 | 
					      xlink: "http://www.w3.org/1999/xlink" | 
				
			||||
 | 
					    }; | 
				
			||||
 | 
					    root = toString$.call(selector).slice(8, -1) === 'String' ? document.querySelector(selector) : selector; | 
				
			||||
 | 
					    if (!root.ldBar) { | 
				
			||||
 | 
					      root.ldBar = this; | 
				
			||||
 | 
					    } else { | 
				
			||||
 | 
					      return root.ldBar; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					    cls = root.getAttribute('class') || ''; | 
				
			||||
 | 
					    if (!~cls.indexOf('ldBar')) { | 
				
			||||
 | 
					      root.setAttribute('class', cls + " ldBar"); | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					    idPrefix = "ldBar-" + Math.random().toString(16).substring(2); | 
				
			||||
 | 
					    id = { | 
				
			||||
 | 
					      key: idPrefix, | 
				
			||||
 | 
					      clip: idPrefix + "-clip", | 
				
			||||
 | 
					      filter: idPrefix + "-filter", | 
				
			||||
 | 
					      pattern: idPrefix + "-pattern", | 
				
			||||
 | 
					      mask: idPrefix + "-mask", | 
				
			||||
 | 
					      maskPath: idPrefix + "-mask-path" | 
				
			||||
 | 
					    }; | 
				
			||||
 | 
					    domTree = function(n, o){ | 
				
			||||
 | 
					      var k, v; | 
				
			||||
 | 
					      n = newNode(n); | 
				
			||||
 | 
					      for (k in o) { | 
				
			||||
 | 
					        v = o[k]; | 
				
			||||
 | 
					        if (k !== 'attr') { | 
				
			||||
 | 
					          n.appendChild(domTree(k, v || {})); | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					      n.attrs(o.attr || {}); | 
				
			||||
 | 
					      return n; | 
				
			||||
 | 
					    }; | 
				
			||||
 | 
					    newNode = function(n){ | 
				
			||||
 | 
					      return document.createElementNS("http://www.w3.org/2000/svg", n); | 
				
			||||
 | 
					    }; | 
				
			||||
 | 
					    x$ = document.body.__proto__.__proto__.__proto__; | 
				
			||||
 | 
					    x$.text = function(t){ | 
				
			||||
 | 
					      return this.appendChild(document.createTextNode(t)); | 
				
			||||
 | 
					    }; | 
				
			||||
 | 
					    x$.attrs = function(o){ | 
				
			||||
 | 
					      var k, v, ret, results$ = []; | 
				
			||||
 | 
					      for (k in o) { | 
				
			||||
 | 
					        v = o[k]; | 
				
			||||
 | 
					        ret = /([^:]+):([^:]+)/.exec(k); | 
				
			||||
 | 
					        if (!ret || !xmlns[ret[1]]) { | 
				
			||||
 | 
					          results$.push(this.setAttribute(k, v)); | 
				
			||||
 | 
					        } else { | 
				
			||||
 | 
					          results$.push(this.setAttributeNS(xmlns[ret[1]], k, v)); | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					      return results$; | 
				
			||||
 | 
					    }; | 
				
			||||
 | 
					    x$.styles = function(o){ | 
				
			||||
 | 
					      var k, v, results$ = []; | 
				
			||||
 | 
					      for (k in o) { | 
				
			||||
 | 
					        v = o[k]; | 
				
			||||
 | 
					        results$.push(this.style[k] = v); | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					      return results$; | 
				
			||||
 | 
					    }; | 
				
			||||
 | 
					    x$.append = function(n){ | 
				
			||||
 | 
					      var r; | 
				
			||||
 | 
					      return this.appendChild(r = document.createElementNS("http://www.w3.og/2000/svg", n)); | 
				
			||||
 | 
					    }; | 
				
			||||
 | 
					    x$.attr = function(n, v){ | 
				
			||||
 | 
					      if (v != null) { | 
				
			||||
 | 
					        return this.setAttribute(n, v); | 
				
			||||
 | 
					      } else { | 
				
			||||
 | 
					        return this.getAttribute(n); | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					    }; | 
				
			||||
 | 
					    config = { | 
				
			||||
 | 
					      "type": 'stroke', | 
				
			||||
 | 
					      "img": '', | 
				
			||||
 | 
					      "path": 'M10 10L90 10M90 8M90 12', | 
				
			||||
 | 
					      "fill-dir": 'btt', | 
				
			||||
 | 
					      "fill": '#25b', | 
				
			||||
 | 
					      "fill-background": '#ddd', | 
				
			||||
 | 
					      "fill-background-extrude": 3, | 
				
			||||
 | 
					      "pattern-size": null, | 
				
			||||
 | 
					      "stroke-dir": 'normal', | 
				
			||||
 | 
					      "stroke": '#25b', | 
				
			||||
 | 
					      "stroke-width": '3', | 
				
			||||
 | 
					      "stroke-trail": '#ddd', | 
				
			||||
 | 
					      "stroke-trail-width": 0.5, | 
				
			||||
 | 
					      "duration": 1, | 
				
			||||
 | 
					      "easing": 'linear', | 
				
			||||
 | 
					      "value": 0, | 
				
			||||
 | 
					      "img-size": null, | 
				
			||||
 | 
					      "bbox": null, | 
				
			||||
 | 
					      "set-dim": true, | 
				
			||||
 | 
					      "aspect-ratio": "xMidYMid", | 
				
			||||
 | 
					      "transition-in": false, | 
				
			||||
 | 
					      "min": 0, | 
				
			||||
 | 
					      "max": 100, | 
				
			||||
 | 
					      "precision": 0, | 
				
			||||
 | 
					      "padding": undefined | 
				
			||||
 | 
					    }; | 
				
			||||
 | 
					    config["preset"] = root.attr("data-preset") || option["preset"]; | 
				
			||||
 | 
					    if (config.preset != null) { | 
				
			||||
 | 
					      import$(config, presets[config.preset]); | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					    for (attr in config) { | 
				
			||||
 | 
					      if (that = that = root.attr("data-" + attr)) { | 
				
			||||
 | 
					        config[attr] = that; | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					    import$(config, option); | 
				
			||||
 | 
					    if (config.img) { | 
				
			||||
 | 
					      config.path = null; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					    isStroke = config.type === 'stroke'; | 
				
			||||
 | 
					    parseRes = function(v){ | 
				
			||||
 | 
					      var parser, ret; | 
				
			||||
 | 
					      parser = /data:ldbar\/res,([^()]+)\(([^)]+)\)/; | 
				
			||||
 | 
					      ret = parser.exec(v); | 
				
			||||
 | 
					      if (!ret) { | 
				
			||||
 | 
					        return v; | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					      return ret = make[ret[1]].apply(make, ret[2].split(',')); | 
				
			||||
 | 
					    }; | 
				
			||||
 | 
					    config.fill = parseRes(config.fill); | 
				
			||||
 | 
					    config.stroke = parseRes(config.stroke); | 
				
			||||
 | 
					    if (config["set-dim"] === 'false') { | 
				
			||||
 | 
					      config["set-dim"] = false; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					    dom = { | 
				
			||||
 | 
					      attr: { | 
				
			||||
 | 
					        "xmlns:xlink": 'http://www.w3.org/1999/xlink', | 
				
			||||
 | 
					        preserveAspectRatio: config["aspect-ratio"], | 
				
			||||
 | 
					        width: "100%", | 
				
			||||
 | 
					        height: "100%" | 
				
			||||
 | 
					      }, | 
				
			||||
 | 
					      defs: { | 
				
			||||
 | 
					        filter: { | 
				
			||||
 | 
					          attr: { | 
				
			||||
 | 
					            id: id.filter, | 
				
			||||
 | 
					            x: -1, | 
				
			||||
 | 
					            y: -1, | 
				
			||||
 | 
					            width: 3, | 
				
			||||
 | 
					            height: 3 | 
				
			||||
 | 
					          }, | 
				
			||||
 | 
					          feMorphology: { | 
				
			||||
 | 
					            attr: { | 
				
			||||
 | 
					              operator: +config["fill-background-extrude"] >= 0 ? 'dilate' : 'erode', | 
				
			||||
 | 
					              radius: Math.abs(+config["fill-background-extrude"]) | 
				
			||||
 | 
					            } | 
				
			||||
 | 
					          }, | 
				
			||||
 | 
					          feColorMatrix: { | 
				
			||||
 | 
					            attr: { | 
				
			||||
 | 
					              values: '0 0 0 0 1    0 0 0 0 1    0 0 0 0 1    0 0 0 1 0', | 
				
			||||
 | 
					              result: "cm" | 
				
			||||
 | 
					            } | 
				
			||||
 | 
					          } | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        mask: { | 
				
			||||
 | 
					          attr: { | 
				
			||||
 | 
					            id: id.mask | 
				
			||||
 | 
					          }, | 
				
			||||
 | 
					          image: { | 
				
			||||
 | 
					            attr: { | 
				
			||||
 | 
					              "xlink:href": config.img, | 
				
			||||
 | 
					              filter: "url(#" + id.filter + ")", | 
				
			||||
 | 
					              x: 0, | 
				
			||||
 | 
					              y: 0, | 
				
			||||
 | 
					              width: 100, | 
				
			||||
 | 
					              height: 100, | 
				
			||||
 | 
					              preserveAspectRatio: config["aspect-ratio"] | 
				
			||||
 | 
					            } | 
				
			||||
 | 
					          } | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        g: { | 
				
			||||
 | 
					          mask: { | 
				
			||||
 | 
					            attr: { | 
				
			||||
 | 
					              id: id.maskPath | 
				
			||||
 | 
					            }, | 
				
			||||
 | 
					            path: { | 
				
			||||
 | 
					              attr: { | 
				
			||||
 | 
					                d: config.path || "", | 
				
			||||
 | 
					                fill: '#fff', | 
				
			||||
 | 
					                stroke: '#fff', | 
				
			||||
 | 
					                filter: "url(#" + id.filter + ")" | 
				
			||||
 | 
					              } | 
				
			||||
 | 
					            } | 
				
			||||
 | 
					          } | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        clipPath: { | 
				
			||||
 | 
					          attr: { | 
				
			||||
 | 
					            id: id.clip | 
				
			||||
 | 
					          }, | 
				
			||||
 | 
					          rect: { | 
				
			||||
 | 
					            attr: { | 
				
			||||
 | 
					              'class': 'mask', | 
				
			||||
 | 
					              fill: '#000' | 
				
			||||
 | 
					            } | 
				
			||||
 | 
					          } | 
				
			||||
 | 
					        }, | 
				
			||||
 | 
					        pattern: { | 
				
			||||
 | 
					          attr: { | 
				
			||||
 | 
					            id: id.pattern, | 
				
			||||
 | 
					            patternUnits: 'userSpaceOnUse', | 
				
			||||
 | 
					            x: 0, | 
				
			||||
 | 
					            y: 0, | 
				
			||||
 | 
					            width: 300, | 
				
			||||
 | 
					            height: 300 | 
				
			||||
 | 
					          }, | 
				
			||||
 | 
					          image: { | 
				
			||||
 | 
					            attr: { | 
				
			||||
 | 
					              x: 0, | 
				
			||||
 | 
					              y: 0, | 
				
			||||
 | 
					              width: 300, | 
				
			||||
 | 
					              height: 300 | 
				
			||||
 | 
					            } | 
				
			||||
 | 
					          } | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					    }; | 
				
			||||
 | 
					    svg = domTree('svg', dom); | 
				
			||||
 | 
					    text = document.createElement('div'); | 
				
			||||
 | 
					    text.setAttribute('class', 'ldBar-label'); | 
				
			||||
 | 
					    root.appendChild(svg); | 
				
			||||
 | 
					    root.appendChild(text); | 
				
			||||
 | 
					    group = [0, 0]; | 
				
			||||
 | 
					    length = 0; | 
				
			||||
 | 
					    this.fit = function(){ | 
				
			||||
 | 
					      var that, box, d, rect; | 
				
			||||
 | 
					      if (that = config["bbox"]) { | 
				
			||||
 | 
					        box = that.split(' ').map(function(it){ | 
				
			||||
 | 
					          return +it.trim(); | 
				
			||||
 | 
					        }); | 
				
			||||
 | 
					        box = { | 
				
			||||
 | 
					          x: box[0], | 
				
			||||
 | 
					          y: box[1], | 
				
			||||
 | 
					          width: box[2], | 
				
			||||
 | 
					          height: box[3] | 
				
			||||
 | 
					        }; | 
				
			||||
 | 
					      } else { | 
				
			||||
 | 
					        box = group[1].getBBox(); | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					      if (!box || box.width === 0 || box.height === 0) { | 
				
			||||
 | 
					        box = { | 
				
			||||
 | 
					          x: 0, | 
				
			||||
 | 
					          y: 0, | 
				
			||||
 | 
					          width: 100, | 
				
			||||
 | 
					          height: 100 | 
				
			||||
 | 
					        }; | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					      d = Math.max.apply(null, ['stroke-width', 'stroke-trail-width', 'fill-background-extrude'].map(function(it){ | 
				
			||||
 | 
					        return config[it]; | 
				
			||||
 | 
					      })) * 1.5; | 
				
			||||
 | 
					      if (config["padding"] != null) { | 
				
			||||
 | 
					        d = +config["padding"]; | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					      svg.attrs({ | 
				
			||||
 | 
					        viewBox: [box.x - d, box.y - d, box.width + d * 2, box.height + d * 2].join(" ") | 
				
			||||
 | 
					      }); | 
				
			||||
 | 
					      if (config["set-dim"]) { | 
				
			||||
 | 
					        ['width', 'height'].map(function(it){ | 
				
			||||
 | 
					          if (!root.style[it] || this$.fit[it]) { | 
				
			||||
 | 
					            root.style[it] = (box[it] + d * 2) + "px"; | 
				
			||||
 | 
					            return this$.fit[it] = true; | 
				
			||||
 | 
					          } | 
				
			||||
 | 
					        }); | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					      rect = group[0].querySelector('rect'); | 
				
			||||
 | 
					      if (rect) { | 
				
			||||
 | 
					        return rect.attrs({ | 
				
			||||
 | 
					          x: box.x - d, | 
				
			||||
 | 
					          y: box.y - d, | 
				
			||||
 | 
					          width: box.width + d * 2, | 
				
			||||
 | 
					          height: box.height + d * 2 | 
				
			||||
 | 
					        }); | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					    }; | 
				
			||||
 | 
					    if (config.path) { | 
				
			||||
 | 
					      if (isStroke) { | 
				
			||||
 | 
					        group[0] = domTree('g', { | 
				
			||||
 | 
					          path: { | 
				
			||||
 | 
					            attr: { | 
				
			||||
 | 
					              d: config.path, | 
				
			||||
 | 
					              fill: 'none', | 
				
			||||
 | 
					              'class': 'baseline' | 
				
			||||
 | 
					            } | 
				
			||||
 | 
					          } | 
				
			||||
 | 
					        }); | 
				
			||||
 | 
					      } else { | 
				
			||||
 | 
					        group[0] = domTree('g', { | 
				
			||||
 | 
					          rect: { | 
				
			||||
 | 
					            attr: { | 
				
			||||
 | 
					              x: 0, | 
				
			||||
 | 
					              y: 0, | 
				
			||||
 | 
					              width: 100, | 
				
			||||
 | 
					              height: 100, | 
				
			||||
 | 
					              mask: "url(#" + id.maskPath + ")", | 
				
			||||
 | 
					              fill: config["fill-background"], | 
				
			||||
 | 
					              'class': 'frame' | 
				
			||||
 | 
					            } | 
				
			||||
 | 
					          } | 
				
			||||
 | 
					        }); | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					      svg.appendChild(group[0]); | 
				
			||||
 | 
					      group[1] = domTree('g', { | 
				
			||||
 | 
					        path: { | 
				
			||||
 | 
					          attr: { | 
				
			||||
 | 
					            d: config.path, | 
				
			||||
 | 
					            'class': isStroke ? 'mainline' : 'solid', | 
				
			||||
 | 
					            "clip-path": config.type === 'fill' ? "url(#" + id.clip + ")" : '' | 
				
			||||
 | 
					          } | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					      }); | 
				
			||||
 | 
					      svg.appendChild(group[1]); | 
				
			||||
 | 
					      path0 = group[0].querySelector(isStroke ? 'path' : 'rect'); | 
				
			||||
 | 
					      path1 = group[1].querySelector('path'); | 
				
			||||
 | 
					      if (isStroke) { | 
				
			||||
 | 
					        path1.attrs({ | 
				
			||||
 | 
					          fill: 'none' | 
				
			||||
 | 
					        }); | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					      patimg = svg.querySelector('pattern image'); | 
				
			||||
 | 
					      img = new Image(); | 
				
			||||
 | 
					      img.addEventListener('load', function(){ | 
				
			||||
 | 
					        var box, that; | 
				
			||||
 | 
					        box = (that = config["pattern-size"]) | 
				
			||||
 | 
					          ? { | 
				
			||||
 | 
					            width: +that, | 
				
			||||
 | 
					            height: +that | 
				
			||||
 | 
					          } | 
				
			||||
 | 
					          : img.width && img.height | 
				
			||||
 | 
					            ? { | 
				
			||||
 | 
					              width: img.width, | 
				
			||||
 | 
					              height: img.height | 
				
			||||
 | 
					            } | 
				
			||||
 | 
					            : { | 
				
			||||
 | 
					              width: 300, | 
				
			||||
 | 
					              height: 300 | 
				
			||||
 | 
					            }; | 
				
			||||
 | 
					        svg.querySelector('pattern').attrs({ | 
				
			||||
 | 
					          width: box.width, | 
				
			||||
 | 
					          height: box.height | 
				
			||||
 | 
					        }); | 
				
			||||
 | 
					        return patimg.attrs({ | 
				
			||||
 | 
					          width: box.width, | 
				
			||||
 | 
					          height: box.height | 
				
			||||
 | 
					        }); | 
				
			||||
 | 
					      }); | 
				
			||||
 | 
					      if (/.+\..+|^data:/.exec(!isStroke | 
				
			||||
 | 
					        ? config.fill | 
				
			||||
 | 
					        : config.stroke)) { | 
				
			||||
 | 
					        img.src = !isStroke | 
				
			||||
 | 
					          ? config.fill | 
				
			||||
 | 
					          : config.stroke; | 
				
			||||
 | 
					        patimg.attrs({ | 
				
			||||
 | 
					          "xlink:href": img.src | 
				
			||||
 | 
					        }); | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					      if (isStroke) { | 
				
			||||
 | 
					        path0.attrs({ | 
				
			||||
 | 
					          stroke: config["stroke-trail"], | 
				
			||||
 | 
					          "stroke-width": config["stroke-trail-width"] | 
				
			||||
 | 
					        }); | 
				
			||||
 | 
					        path1.attrs({ | 
				
			||||
 | 
					          "stroke-width": config["stroke-width"], | 
				
			||||
 | 
					          stroke: /.+\..+|^data:/.exec(config.stroke) | 
				
			||||
 | 
					            ? "url(#" + id.pattern + ")" | 
				
			||||
 | 
					            : config.stroke | 
				
			||||
 | 
					        }); | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					      if (config.fill && !isStroke) { | 
				
			||||
 | 
					        path1.attrs({ | 
				
			||||
 | 
					          fill: /.+\..+|^data:/.exec(config.fill) | 
				
			||||
 | 
					            ? "url(#" + id.pattern + ")" | 
				
			||||
 | 
					            : config.fill | 
				
			||||
 | 
					        }); | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					      length = path1.getTotalLength(); | 
				
			||||
 | 
					      this.fit(); | 
				
			||||
 | 
					      this.inited = true; | 
				
			||||
 | 
					    } else if (config.img) { | 
				
			||||
 | 
					      if (config["img-size"]) { | 
				
			||||
 | 
					        ret = config["img-size"].split(','); | 
				
			||||
 | 
					        size = { | 
				
			||||
 | 
					          width: +ret[0], | 
				
			||||
 | 
					          height: +ret[1] | 
				
			||||
 | 
					        }; | 
				
			||||
 | 
					      } else { | 
				
			||||
 | 
					        size = { | 
				
			||||
 | 
					          width: 100, | 
				
			||||
 | 
					          height: 100 | 
				
			||||
 | 
					        }; | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					      group[0] = domTree('g', { | 
				
			||||
 | 
					        rect: { | 
				
			||||
 | 
					          attr: { | 
				
			||||
 | 
					            x: 0, | 
				
			||||
 | 
					            y: 0, | 
				
			||||
 | 
					            width: 100, | 
				
			||||
 | 
					            height: 100, | 
				
			||||
 | 
					            mask: "url(#" + id.mask + ")", | 
				
			||||
 | 
					            fill: config["fill-background"] | 
				
			||||
 | 
					          } | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					      }); | 
				
			||||
 | 
					      svg.querySelector('mask image').attrs({ | 
				
			||||
 | 
					        width: size.width, | 
				
			||||
 | 
					        height: size.height | 
				
			||||
 | 
					      }); | 
				
			||||
 | 
					      group[1] = domTree('g', { | 
				
			||||
 | 
					        image: { | 
				
			||||
 | 
					          attr: { | 
				
			||||
 | 
					            width: size.width, | 
				
			||||
 | 
					            height: size.height, | 
				
			||||
 | 
					            x: 0, | 
				
			||||
 | 
					            y: 0, | 
				
			||||
 | 
					            preserveAspectRatio: config["aspect-ratio"], | 
				
			||||
 | 
					            "clip-path": config.type === 'fill' ? "url(#" + id.clip + ")" : '', | 
				
			||||
 | 
					            "xlink:href": config.img, | 
				
			||||
 | 
					            'class': 'solid' | 
				
			||||
 | 
					          } | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					      }); | 
				
			||||
 | 
					      img = new Image(); | 
				
			||||
 | 
					      img.addEventListener('load', function(){ | 
				
			||||
 | 
					        var ret, size; | 
				
			||||
 | 
					        if (config["img-size"]) { | 
				
			||||
 | 
					          ret = config["img-size"].split(','); | 
				
			||||
 | 
					          size = { | 
				
			||||
 | 
					            width: +ret[0], | 
				
			||||
 | 
					            height: +ret[1] | 
				
			||||
 | 
					          }; | 
				
			||||
 | 
					        } else if (img.width && img.height) { | 
				
			||||
 | 
					          size = { | 
				
			||||
 | 
					            width: img.width, | 
				
			||||
 | 
					            height: img.height | 
				
			||||
 | 
					          }; | 
				
			||||
 | 
					        } else { | 
				
			||||
 | 
					          size = { | 
				
			||||
 | 
					            width: 100, | 
				
			||||
 | 
					            height: 100 | 
				
			||||
 | 
					          }; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					        svg.querySelector('mask image').attrs({ | 
				
			||||
 | 
					          width: size.width, | 
				
			||||
 | 
					          height: size.height | 
				
			||||
 | 
					        }); | 
				
			||||
 | 
					        group[1].querySelector('image').attrs({ | 
				
			||||
 | 
					          width: size.width, | 
				
			||||
 | 
					          height: size.height | 
				
			||||
 | 
					        }); | 
				
			||||
 | 
					        this$.fit(); | 
				
			||||
 | 
					        this$.set(undefined, false); | 
				
			||||
 | 
					        return this$.inited = true; | 
				
			||||
 | 
					      }); | 
				
			||||
 | 
					      img.src = config.img; | 
				
			||||
 | 
					      svg.appendChild(group[0]); | 
				
			||||
 | 
					      svg.appendChild(group[1]); | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					    svg.attrs({ | 
				
			||||
 | 
					      width: '100%', | 
				
			||||
 | 
					      height: '100%' | 
				
			||||
 | 
					    }); | 
				
			||||
 | 
					    this.transition = { | 
				
			||||
 | 
					      value: { | 
				
			||||
 | 
					        src: 0, | 
				
			||||
 | 
					        des: 0 | 
				
			||||
 | 
					      }, | 
				
			||||
 | 
					      time: {}, | 
				
			||||
 | 
					      ease: function(t, b, c, d){ | 
				
			||||
 | 
					        t = t / (d * 0.5); | 
				
			||||
 | 
					        if (t < 1) { | 
				
			||||
 | 
					          return c * 0.5 * t * t + b; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					        t = t - 1; | 
				
			||||
 | 
					        return -c * 0.5 * (t * (t - 2) - 1) + b; | 
				
			||||
 | 
					      }, | 
				
			||||
 | 
					      handler: function(time, doTransition){ | 
				
			||||
 | 
					        var ref$, min, max, prec, dv, dt, dur, v, p, node, style, box, dir; | 
				
			||||
 | 
					        doTransition == null && (doTransition = true); | 
				
			||||
 | 
					        if (this.time.src == null) { | 
				
			||||
 | 
					          this.time.src = time; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					        ref$ = [config["min"], config["max"], 1 / config["precision"]], min = ref$[0], max = ref$[1], prec = ref$[2]; | 
				
			||||
 | 
					        ref$ = [this.value.des - this.value.src, (time - this.time.src) * 0.001, +config["duration"] || 1], dv = ref$[0], dt = ref$[1], dur = ref$[2]; | 
				
			||||
 | 
					        v = doTransition | 
				
			||||
 | 
					          ? this.ease(dt, this.value.src, dv, dur) | 
				
			||||
 | 
					          : this.value.des; | 
				
			||||
 | 
					        if (config.precision) { | 
				
			||||
 | 
					          v = Math.round(v * prec) / prec; | 
				
			||||
 | 
					        } else if (doTransition) { | 
				
			||||
 | 
					          v = Math.round(v); | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					        v >= min || (v = min); | 
				
			||||
 | 
					        v <= max || (v = max); | 
				
			||||
 | 
					        text.textContent = v; | 
				
			||||
 | 
					        p = 100.0 * (v - min) / (max - min); | 
				
			||||
 | 
					        if (isStroke) { | 
				
			||||
 | 
					          node = path1; | 
				
			||||
 | 
					          style = { | 
				
			||||
 | 
					            "stroke-dasharray": config["stroke-dir"] === 'reverse' | 
				
			||||
 | 
					              ? "0 " + length * (100 - p) * 0.01 + " " + length * p * 0.01 + " 0" | 
				
			||||
 | 
					              : p * 0.01 * length + " " + ((100 - p) * 0.01 * length + 1) | 
				
			||||
 | 
					          }; | 
				
			||||
 | 
					        } else { | 
				
			||||
 | 
					          box = group[1].getBBox(); | 
				
			||||
 | 
					          dir = config["fill-dir"]; | 
				
			||||
 | 
					          style = dir === 'btt' || !dir | 
				
			||||
 | 
					            ? { | 
				
			||||
 | 
					              y: box.y + box.height * (100 - p) * 0.01, | 
				
			||||
 | 
					              height: box.height * p * 0.01, | 
				
			||||
 | 
					              x: box.x, | 
				
			||||
 | 
					              width: box.width | 
				
			||||
 | 
					            } | 
				
			||||
 | 
					            : dir === 'ttb' | 
				
			||||
 | 
					              ? { | 
				
			||||
 | 
					                y: box.y, | 
				
			||||
 | 
					                height: box.height * p * 0.01, | 
				
			||||
 | 
					                x: box.x, | 
				
			||||
 | 
					                width: box.width | 
				
			||||
 | 
					              } | 
				
			||||
 | 
					              : dir === 'ltr' | 
				
			||||
 | 
					                ? { | 
				
			||||
 | 
					                  y: box.y, | 
				
			||||
 | 
					                  height: box.height, | 
				
			||||
 | 
					                  x: box.x, | 
				
			||||
 | 
					                  width: box.width * p * 0.01 | 
				
			||||
 | 
					                } | 
				
			||||
 | 
					                : dir === 'rtl' ? { | 
				
			||||
 | 
					                  y: box.y, | 
				
			||||
 | 
					                  height: box.height, | 
				
			||||
 | 
					                  x: box.x + box.width * (100 - p) * 0.01, | 
				
			||||
 | 
					                  width: box.width * p * 0.01 | 
				
			||||
 | 
					                } : void 8; | 
				
			||||
 | 
					          node = svg.querySelector('rect'); | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					        node.attrs(style); | 
				
			||||
 | 
					        if (dt >= dur) { | 
				
			||||
 | 
					          delete this.time.src; | 
				
			||||
 | 
					          return false; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					        return true; | 
				
			||||
 | 
					      }, | 
				
			||||
 | 
					      start: function(src, des, doTransition){ | 
				
			||||
 | 
					        var ref$, this$ = this; | 
				
			||||
 | 
					        ref$ = this.value; | 
				
			||||
 | 
					        ref$.src = src; | 
				
			||||
 | 
					        ref$.des = des; | 
				
			||||
 | 
					        !!(root.offsetWidth || root.offsetHeight || root.getClientRects().length); | 
				
			||||
 | 
					        if (!doTransition || !(root.offsetWidth || root.offsetHeight || root.getClientRects().length)) { | 
				
			||||
 | 
					          this.time.src = 0; | 
				
			||||
 | 
					          this.handler(1000, false); | 
				
			||||
 | 
					          return; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					        return handler.add(id.key, function(time){ | 
				
			||||
 | 
					          return this$.handler(time); | 
				
			||||
 | 
					        }); | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					    }; | 
				
			||||
 | 
					    this.set = function(v, doTransition){ | 
				
			||||
 | 
					      var src, des; | 
				
			||||
 | 
					      doTransition == null && (doTransition = true); | 
				
			||||
 | 
					      src = this.value || 0; | 
				
			||||
 | 
					      if (v != null) { | 
				
			||||
 | 
					        this.value = v; | 
				
			||||
 | 
					      } else { | 
				
			||||
 | 
					        v = this.value; | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					      des = this.value; | 
				
			||||
 | 
					      return this.transition.start(src, des, doTransition); | 
				
			||||
 | 
					    }; | 
				
			||||
 | 
					    this.set(+config.value || 0, config["transition-in"]) || false; | 
				
			||||
 | 
					    return this; | 
				
			||||
 | 
					  }; | 
				
			||||
 | 
					  return window.addEventListener('load', function(){ | 
				
			||||
 | 
					    var i$, ref$, len$, node, results$ = []; | 
				
			||||
 | 
					    for (i$ = 0, len$ = (ref$ = document.querySelectorAll('.ldBar')).length; i$ < len$; ++i$) { | 
				
			||||
 | 
					      node = ref$[i$]; | 
				
			||||
 | 
					      if (!node.ldBar) { | 
				
			||||
 | 
					        results$.push(node.ldBar = new ldBar(node)); | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					    return results$; | 
				
			||||
 | 
					  }, false); | 
				
			||||
 | 
					})(); | 
				
			||||
 | 
					module.exports = ldBar; | 
				
			||||
 | 
					function import$(obj, src){ | 
				
			||||
 | 
					  var own = {}.hasOwnProperty; | 
				
			||||
 | 
					  for (var key in src) if (own.call(src, key)) obj[key] = src[key]; | 
				
			||||
 | 
					  return obj; | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,90 @@ | 
				
			|||||
 | 
					var presets, out$ = typeof exports != 'undefined' && exports || this; | 
				
			||||
 | 
					out$.presets = presets = { | 
				
			||||
 | 
					  rainbow: { | 
				
			||||
 | 
					    "type": 'stroke', | 
				
			||||
 | 
					    "path": 'M10 10L90 10', | 
				
			||||
 | 
					    "stroke": 'data:ldbar/res,gradient(0,1,#a551df,#fd51ad,#ff7f82,#ffb874,#ffeb90)', | 
				
			||||
 | 
					    "bbox": "10 10 80 10" | 
				
			||||
 | 
					  }, | 
				
			||||
 | 
					  energy: { | 
				
			||||
 | 
					    "type": 'fill', | 
				
			||||
 | 
					    "path": 'M15 5L85 5A5 5 0 0 1 85 15L15 15A5 5 0 0 1 15 5', | 
				
			||||
 | 
					    "stroke": '#f00', | 
				
			||||
 | 
					    "fill": 'data:ldbar/res,gradient(45,2,#4e9,#8fb,#4e9)', | 
				
			||||
 | 
					    "fill-dir": "ltr", | 
				
			||||
 | 
					    "fill-background": '#444', | 
				
			||||
 | 
					    "fill-background-extrude": 1, | 
				
			||||
 | 
					    "bbox": "10 5 80 10" | 
				
			||||
 | 
					  }, | 
				
			||||
 | 
					  stripe: { | 
				
			||||
 | 
					    "type": 'fill', | 
				
			||||
 | 
					    "path": 'M15 5L85 5A5 5 0 0 1 85 15L15 15A5 5 0 0 1 15 5', | 
				
			||||
 | 
					    "stroke": '#f00', | 
				
			||||
 | 
					    "fill": 'data:ldbar/res,stripe(#25b,#58e,1)', | 
				
			||||
 | 
					    "fill-dir": "ltr", | 
				
			||||
 | 
					    "fill-background": '#ddd', | 
				
			||||
 | 
					    "fill-background-extrude": 1, | 
				
			||||
 | 
					    "bbox": "10 5 80 10" | 
				
			||||
 | 
					  }, | 
				
			||||
 | 
					  text: { | 
				
			||||
 | 
					    "type": 'fill', | 
				
			||||
 | 
					    "img": "data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"70\" height=\"20\" viewBox=\"0 0 70 20\"><text x=\"35\" y=\"10\" text-anchor=\"middle\" dominant-baseline=\"central\" font-family=\"arial\">LOADING</text></svg>", | 
				
			||||
 | 
					    "fill-background-extrude": 1.3, | 
				
			||||
 | 
					    "pattern-size": 100, | 
				
			||||
 | 
					    "fill-dir": "ltr", | 
				
			||||
 | 
					    "img-size": "70,20", | 
				
			||||
 | 
					    "bbox": "0 0 70 20" | 
				
			||||
 | 
					  }, | 
				
			||||
 | 
					  line: { | 
				
			||||
 | 
					    "type": 'stroke', | 
				
			||||
 | 
					    "path": 'M10 10L90 10', | 
				
			||||
 | 
					    "stroke": '#25b', | 
				
			||||
 | 
					    "stroke-width": 3, | 
				
			||||
 | 
					    "stroke-trail": '#ddd', | 
				
			||||
 | 
					    "stroke-trail-width": 1, | 
				
			||||
 | 
					    "bbox": "10 10 80 10" | 
				
			||||
 | 
					  }, | 
				
			||||
 | 
					  fan: { | 
				
			||||
 | 
					    "type": 'stroke', | 
				
			||||
 | 
					    "path": 'M10 90A40 40 0 0 1 90 90', | 
				
			||||
 | 
					    "fill-dir": 'btt', | 
				
			||||
 | 
					    "fill": '#25b', | 
				
			||||
 | 
					    "fill-background": '#ddd', | 
				
			||||
 | 
					    "fill-background-extrude": 3, | 
				
			||||
 | 
					    "stroke-dir": 'normal', | 
				
			||||
 | 
					    "stroke": '#25b', | 
				
			||||
 | 
					    "stroke-width": '3', | 
				
			||||
 | 
					    "stroke-trail": '#ddd', | 
				
			||||
 | 
					    "stroke-trail-width": 0.5, | 
				
			||||
 | 
					    "bbox": "10 50 80 40" | 
				
			||||
 | 
					  }, | 
				
			||||
 | 
					  circle: { | 
				
			||||
 | 
					    "type": 'stroke', | 
				
			||||
 | 
					    "path": 'M50 10A40 40 0 0 1 50 90A40 40 0 0 1 50 10', | 
				
			||||
 | 
					    "fill-dir": 'btt', | 
				
			||||
 | 
					    "fill": '#25b', | 
				
			||||
 | 
					    "fill-background": '#ddd', | 
				
			||||
 | 
					    "fill-background-extrude": 3, | 
				
			||||
 | 
					    "stroke-dir": 'normal', | 
				
			||||
 | 
					    "stroke": '#25b', | 
				
			||||
 | 
					    "stroke-width": '3', | 
				
			||||
 | 
					    "stroke-trail": '#ddd', | 
				
			||||
 | 
					    "stroke-trail-width": 0.5, | 
				
			||||
 | 
					    "bbox": "10 10 80 80" | 
				
			||||
 | 
					  }, | 
				
			||||
 | 
					  bubble: { | 
				
			||||
 | 
					    "type": 'fill', | 
				
			||||
 | 
					    "path": 'M50 10A40 40 0 0 1 50 90A40 40 0 0 1 50 10', | 
				
			||||
 | 
					    "fill-dir": 'btt', | 
				
			||||
 | 
					    "fill": 'data:ldbar/res,bubble(#39d,#cef)', | 
				
			||||
 | 
					    "pattern-size": "150", | 
				
			||||
 | 
					    "fill-background": '#ddd', | 
				
			||||
 | 
					    "fill-background-extrude": 2, | 
				
			||||
 | 
					    "stroke-dir": 'normal', | 
				
			||||
 | 
					    "stroke": '#25b', | 
				
			||||
 | 
					    "stroke-width": '3', | 
				
			||||
 | 
					    "stroke-trail": '#ddd', | 
				
			||||
 | 
					    "stroke-trail-width": 0.5, | 
				
			||||
 | 
					    "bbox": "10 10 80 80" | 
				
			||||
 | 
					  } | 
				
			||||
 | 
					}; | 
				
			||||
								
									
										File diff suppressed because it is too large
									
								
							
						
					@ -0,0 +1,54 @@ | 
				
			|||||
 | 
					{ | 
				
			||||
 | 
					  "name": "@loadingio/loading-bar", | 
				
			||||
 | 
					  "version": "0.1.1", | 
				
			||||
 | 
					  "description": " ====== Progress Bar Library by loading.io ====== ", | 
				
			||||
 | 
					  "main": "lib/loading-bar.js", | 
				
			||||
 | 
					  "scripts": { | 
				
			||||
 | 
					    "test": "echo \"Error: no test specified\" && exit 1" | 
				
			||||
 | 
					  }, | 
				
			||||
 | 
					  "repository": { | 
				
			||||
 | 
					    "type": "git", | 
				
			||||
 | 
					    "url": "git+https://github.com/loadingio/loading-bar.git" | 
				
			||||
 | 
					  }, | 
				
			||||
 | 
					  "keywords": [ | 
				
			||||
 | 
					    "progress-bar" | 
				
			||||
 | 
					  ], | 
				
			||||
 | 
					  "author": "tkirby", | 
				
			||||
 | 
					  "license": "MIT", | 
				
			||||
 | 
					  "bugs": { | 
				
			||||
 | 
					    "url": "https://github.com/loadingio/loading-bar/issues" | 
				
			||||
 | 
					  }, | 
				
			||||
 | 
					  "devDependencies": { | 
				
			||||
 | 
					    "LiveScript": ">=1.2.0", | 
				
			||||
 | 
					    "browserify": "^13.1.1", | 
				
			||||
 | 
					    "browserify-livescript": "git+https://github.com/ceremcem/browserify-livescript.git", | 
				
			||||
 | 
					    "globby": "^6.1.0", | 
				
			||||
 | 
					    "gulp": "^3.9.1", | 
				
			||||
 | 
					    "gulp-cached": "^1.1.1", | 
				
			||||
 | 
					    "gulp-concat": "^2.6.1", | 
				
			||||
 | 
					    "gulp-flatten": "^0.3.1", | 
				
			||||
 | 
					    "gulp-if-else": "^1.0.3", | 
				
			||||
 | 
					    "gulp-pug": "^3.3.0", | 
				
			||||
 | 
					    "gulp-stylus": "^2.6.0", | 
				
			||||
 | 
					    "gulp-rename": "^1.2.2", | 
				
			||||
 | 
					    "gulp-sourcemaps": "^2.6.1", | 
				
			||||
 | 
					    "gulp-tap": "^1.0.1", | 
				
			||||
 | 
					    "gulp-uglify": "^3.0.0", | 
				
			||||
 | 
					    "gulp-watch": "^4.3.11", | 
				
			||||
 | 
					    "node-notifier": "^5.1.2", | 
				
			||||
 | 
					    "optimize-js": "^1.0.3", | 
				
			||||
 | 
					    "run-sequence": "^2.1.0", | 
				
			||||
 | 
					    "touch": "^3.1.0", | 
				
			||||
 | 
					    "vinyl-buffer": "^1.0.0", | 
				
			||||
 | 
					    "vinyl-source-stream": "^1.1.0", | 
				
			||||
 | 
					    "gulp-livescript": "^3.0.1", | 
				
			||||
 | 
					    "gulp-zip": "^4.0.0", | 
				
			||||
 | 
					    "uglify-js": "=3.2.0", | 
				
			||||
 | 
					    "uglifycss": "0.0.29", | 
				
			||||
 | 
					    "watchify": "^3.9.0" | 
				
			||||
 | 
					  }, | 
				
			||||
 | 
					  "homepage": "https://github.com/loadingio/loading-bar#readme", | 
				
			||||
 | 
					  "dependencies": { | 
				
			||||
 | 
					    "gulp-remove-files": "0.0.3" | 
				
			||||
 | 
					  } | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,10 @@ | 
				
			|||||
 | 
					angular.module \loadingio, [] | 
				
			||||
 | 
					  ..directive \ldbar, <[$compile $timeout]> ++ ($compile, $timeout) -> do | 
				
			||||
 | 
					    restrict: \A | 
				
			||||
 | 
					    scope: do | 
				
			||||
 | 
					      model: \=ngModel | 
				
			||||
 | 
					      config: \=config | 
				
			||||
 | 
					    link: (s,e,a,c) -> | 
				
			||||
 | 
					      if e.0 => bar = if !e.0.ldBar => new ldBar(e.0, s.config or {}) else e.0.ldBar | 
				
			||||
 | 
					      s.$watch 'model', (n,o) -> bar.set n | 
				
			||||
 | 
					
 | 
				
			||||
@ -0,0 +1,400 @@ | 
				
			|||||
 | 
					require! "./presets": {presets} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					simple-str = (arr) -> arr.join '' | 
				
			||||
 | 
					wrap = (content) -> "data:image/svg+xml;base64," + btoa(content) | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					do -> | 
				
			||||
 | 
					    make = | 
				
			||||
 | 
					        head: (viewBox) -> """ | 
				
			||||
 | 
					                <?xml version="1.0" encoding="utf-8"?> | 
				
			||||
 | 
					                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="#viewBox"> | 
				
			||||
 | 
					                """ | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        gradient: (dir = 45, dur = 1, ...colors) -> | 
				
			||||
 | 
					            ret = [@head "0 0 100 100"] | 
				
			||||
 | 
					            len = colors.length * 4 + 1 | 
				
			||||
 | 
					            dir = dir * Math.PI / 180 | 
				
			||||
 | 
					            gx = Math.cos(dir) ** 2 | 
				
			||||
 | 
					            gy = Math.sqrt(gx - gx ** 2) | 
				
			||||
 | 
					            if dir > Math.PI * 0.25 => | 
				
			||||
 | 
					                gy = Math.sin(dir) ** 2 | 
				
			||||
 | 
					                gx = Math.sqrt(gy - gy ** 2) | 
				
			||||
 | 
					            x = gx * 100 | 
				
			||||
 | 
					            y = gy * 100 | 
				
			||||
 | 
					            ret.push """<defs><linearGradient id="gradient" x1="0" x2="#gx" y1="0" y2="#gy">""" | 
				
			||||
 | 
					            for i from 0 til len => | 
				
			||||
 | 
					                idx = i * 100 / (len - 1) | 
				
			||||
 | 
					                ret.push """<stop offset="#{idx}%" stop-color="#{colors[i % colors.length]}"/>""" | 
				
			||||
 | 
					            ret.push """ | 
				
			||||
 | 
					                </linearGradient></defs> | 
				
			||||
 | 
					                <rect x="0" y="0" width="400" height="400" fill="url(\#gradient)"> | 
				
			||||
 | 
					                <animateTransform attributeName="transform" type="translate" from="-#x,-#y" | 
				
			||||
 | 
					                to="0,0" dur="#{dur}s" repeatCount="indefinite"/></rect></svg> | 
				
			||||
 | 
					                """ | 
				
			||||
 | 
					            wrap ret.join("") | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        stripe: (c1=\#b4b4b4, c2=\#e6e6e6, dur = 1) -> | 
				
			||||
 | 
					            ret = [@head "0 0 100 100"] | 
				
			||||
 | 
					            ret ++= [ | 
				
			||||
 | 
					                """<rect fill="#c2" width="100" height="100"/>""" | 
				
			||||
 | 
					                """<g><g>""" | 
				
			||||
 | 
					                ["""<polygon fill="#c1" """ + | 
				
			||||
 | 
					                 """points="#{-90 + i * 20},100 #{-100 + i * 20},""" + | 
				
			||||
 | 
					                 """100 #{-60 + i * 20},0 #{-50 + i * 20},0 "/>""" for i from 0 til 13].join("") | 
				
			||||
 | 
					                """</g><animateTransform attributeName="transform" type="translate" """ | 
				
			||||
 | 
					                """from="0,0" to="20,0" dur="#{dur}s" repeatCount="indefinite"/></g></svg>""" | 
				
			||||
 | 
					            ].join("") | 
				
			||||
 | 
					            wrap ret | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        bubble: (c1 = \#39d, c2 = \#9cf, count = 15, dur = 1, size = 6, sw=1) -> | 
				
			||||
 | 
					            ret = [@head("0 0 200 200"), """<rect x="0" y="0" width="200" height="200" fill="#c1"/>"""] | 
				
			||||
 | 
					            for i from 0 til count => | 
				
			||||
 | 
					                idx = -(i / count) * dur | 
				
			||||
 | 
					                x = Math.random! * 184 + 8 | 
				
			||||
 | 
					                r = ( Math.random! * 0.7 + 0.3 ) * size | 
				
			||||
 | 
					                d = dur * (1 + Math.random! * 0.5) | 
				
			||||
 | 
					                ret.push [ | 
				
			||||
 | 
					                    """<circle cx="#x" cy="0" r="#r" fill="none" stroke="#c2" stroke-width="#sw">""" | 
				
			||||
 | 
					                    """<animate attributeName="cy" values="190;-10" times="0;1" """ | 
				
			||||
 | 
					                    """dur="#{d}s" begin="#{idx}s" repeatCount="indefinite"/>""" | 
				
			||||
 | 
					                    """</circle>""" | 
				
			||||
 | 
					                    """<circle cx="#x" cy="0" r="#r" fill="none" stroke="#c2" stroke-width="#sw">""" | 
				
			||||
 | 
					                    """<animate attributeName="cy" values="390;190" times="0;1" """ | 
				
			||||
 | 
					                    """dur="#{d}s" begin="#{idx}s" repeatCount="indefinite"/>""" | 
				
			||||
 | 
					                    """</circle>""" | 
				
			||||
 | 
					                ].join("") | 
				
			||||
 | 
					            wrap(ret.join("") + "</svg>") | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    handler = | 
				
			||||
 | 
					        queue: {} | 
				
			||||
 | 
					        running: false | 
				
			||||
 | 
					        main: (timestamp) -> | 
				
			||||
 | 
					            keepon = false | 
				
			||||
 | 
					            removed = [] | 
				
			||||
 | 
					            for k,func of @queue => | 
				
			||||
 | 
					                ret = func timestamp | 
				
			||||
 | 
					                if !ret => removed.push func | 
				
			||||
 | 
					                keepon = keepon or ret | 
				
			||||
 | 
					            for k,func of @queue => if removed.indexOf(func) >= 0 => delete @queue[k] | 
				
			||||
 | 
					            if keepon => requestAnimationFrame (~> @main it) | 
				
			||||
 | 
					            else @running = false | 
				
			||||
 | 
					        add: (key, f) -> | 
				
			||||
 | 
					            if !@queue[key] => @queue[key] = f | 
				
			||||
 | 
					            if !@running => | 
				
			||||
 | 
					                @running = true | 
				
			||||
 | 
					                requestAnimationFrame (~> @main it) | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    window.ldBar = ldBar = (selector, option = {}) -> | 
				
			||||
 | 
					        xmlns = xlink: "http://www.w3.org/1999/xlink" | 
				
			||||
 | 
					        root = if typeof! selector is \String | 
				
			||||
 | 
					            document.querySelector selector | 
				
			||||
 | 
					        else | 
				
			||||
 | 
					            selector | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        if !root.ldBar => root.ldBar = @ | 
				
			||||
 | 
					        else return root.ldBar | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        cls = root.getAttribute(\class) or '' | 
				
			||||
 | 
					        if !~cls.indexOf('ldBar') => root.setAttribute \class, "#cls ldBar" | 
				
			||||
 | 
					        id-prefix = "ldBar-#{Math.random!toString 16 .substring 2}" | 
				
			||||
 | 
					        id = | 
				
			||||
 | 
					            key: id-prefix | 
				
			||||
 | 
					            clip: "#{id-prefix}-clip" | 
				
			||||
 | 
					            filter: "#{id-prefix}-filter" | 
				
			||||
 | 
					            pattern: "#{id-prefix}-pattern" | 
				
			||||
 | 
					            mask: "#{id-prefix}-mask" | 
				
			||||
 | 
					            mask-path: "#{id-prefix}-mask-path" | 
				
			||||
 | 
					        domTree = (n,o) -> | 
				
			||||
 | 
					            n = newNode n | 
				
			||||
 | 
					            for k,v of o => if k != \attr => n.appendChild domTree(k, v or {}) | 
				
			||||
 | 
					            n.attrs(o.attr or {}) | 
				
			||||
 | 
					            n | 
				
			||||
 | 
					        newNode = (n) -> document.createElementNS "http://www.w3.org/2000/svg", n | 
				
			||||
 | 
					        document.body.__proto__.__proto__.__proto__ | 
				
			||||
 | 
					            ..text = (t) -> @appendChild document.createTextNode(t) | 
				
			||||
 | 
					            ..attrs = (o) -> for k,v of o => | 
				
			||||
 | 
					                ret = /([^:]+):([^:]+)/.exec(k) | 
				
			||||
 | 
					                if !ret or !xmlns[ret.1] => @setAttribute k, v | 
				
			||||
 | 
					                else @setAttributeNS xmlns[ret.1], k, v | 
				
			||||
 | 
					            ..styles = (o) -> for k,v of o => @style[k] = v | 
				
			||||
 | 
					            ..append = (n) -> @appendChild r = document.createElementNS "http://www.w3.og/2000/svg", n | 
				
			||||
 | 
					            ..attr = (n,v) -> if v? => @setAttribute n, v else @getAttribute n | 
				
			||||
 | 
					        config = | 
				
			||||
 | 
					            "type": 'stroke' | 
				
			||||
 | 
					            "img": '' | 
				
			||||
 | 
					            "path": 'M10 10L90 10M90 8M90 12' | 
				
			||||
 | 
					            "fill-dir": \btt | 
				
			||||
 | 
					            "fill": \#25b | 
				
			||||
 | 
					            "fill-background": \#ddd | 
				
			||||
 | 
					            "fill-background-extrude": 3 | 
				
			||||
 | 
					            "pattern-size": null | 
				
			||||
 | 
					            "stroke-dir": \normal | 
				
			||||
 | 
					            "stroke": \#25b | 
				
			||||
 | 
					            "stroke-width": \3 | 
				
			||||
 | 
					            "stroke-trail": \#ddd | 
				
			||||
 | 
					            "stroke-trail-width": 0.5 | 
				
			||||
 | 
					            "duration": 1 | 
				
			||||
 | 
					            "easing": \linear | 
				
			||||
 | 
					            "value": 0 | 
				
			||||
 | 
					            "img-size": null | 
				
			||||
 | 
					            "bbox": null | 
				
			||||
 | 
					            "set-dim": true | 
				
			||||
 | 
					            "aspect-ratio": "xMidYMid" | 
				
			||||
 | 
					            "transition-in": false | 
				
			||||
 | 
					            "min": 0 | 
				
			||||
 | 
					            "max": 100 | 
				
			||||
 | 
					            "precision": 0 | 
				
			||||
 | 
					            "padding": undefined | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        config["preset"] = root.attr("data-preset") or option["preset"] | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        if config.preset? | 
				
			||||
 | 
					            # use the default preset | 
				
			||||
 | 
					            config <<< presets[config.preset] | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        # overwrite if there are arguments passed via data-* attributes | 
				
			||||
 | 
					        for attr of config | 
				
			||||
 | 
					            if that = root.attr "data-#{attr}" | 
				
			||||
 | 
					                config[attr] = that | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        config <<< option | 
				
			||||
 | 
					        if config.img => config.path = null | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        is-stroke = config.type == \stroke | 
				
			||||
 | 
					        parse-res = (v) -> | 
				
			||||
 | 
					            parser = /data:ldbar\/res,([^()]+)\(([^)]+)\)/ | 
				
			||||
 | 
					            ret = parser.exec(v) | 
				
			||||
 | 
					            if !ret => return v | 
				
			||||
 | 
					            ret = make[ret.1].apply make, ret.2.split(\,) | 
				
			||||
 | 
					        config.fill = parse-res config.fill | 
				
			||||
 | 
					        config.stroke = parse-res config.stroke | 
				
			||||
 | 
					        if config["set-dim"] == \false => config["set-dim"] = false | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        dom = | 
				
			||||
 | 
					            attr: | 
				
			||||
 | 
					                "xmlns:xlink": \http://www.w3.org/1999/xlink | 
				
			||||
 | 
					                preserveAspectRatio: config["aspect-ratio"] | 
				
			||||
 | 
					                width: "100%", height: "100%" | 
				
			||||
 | 
					            defs: | 
				
			||||
 | 
					                filter: | 
				
			||||
 | 
					                    attr: id: id.filter, x: -1, y: -1, width: 3, height: 3 | 
				
			||||
 | 
					                    feMorphology: attr: | 
				
			||||
 | 
					                        operator: (if +config["fill-background-extrude"]>=0 => \dilate else \erode) | 
				
			||||
 | 
					                        radius: Math.abs(+config["fill-background-extrude"]) | 
				
			||||
 | 
					                    feColorMatrix: attr: {values: '0 0 0 0 1    0 0 0 0 1    0 0 0 0 1    0 0 0 1 0', result: "cm"} | 
				
			||||
 | 
					                mask: | 
				
			||||
 | 
					                    attr: id: id.mask | 
				
			||||
 | 
					                    image: attr: | 
				
			||||
 | 
					                        "xlink:href": config.img | 
				
			||||
 | 
					                        filter: "url(\##{id.filter})" | 
				
			||||
 | 
					                        x: 0, y: 0, width: 100, height: 100, preserveAspectRatio: config["aspect-ratio"] | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					                g: | 
				
			||||
 | 
					                    mask: | 
				
			||||
 | 
					                        attr: id: id.mask-path | 
				
			||||
 | 
					                        path: attr: | 
				
			||||
 | 
					                            d: config.path or "" | 
				
			||||
 | 
					                            fill: \#fff | 
				
			||||
 | 
					                            stroke: \#fff | 
				
			||||
 | 
					                            filter: "url(\##{id.filter})" | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					                clipPath: | 
				
			||||
 | 
					                    attr: id: id.clip | 
				
			||||
 | 
					                    rect: {attr: class: \mask, fill: \#000} | 
				
			||||
 | 
					                pattern: | 
				
			||||
 | 
					                    attr: | 
				
			||||
 | 
					                        id: id.pattern, patternUnits: \userSpaceOnUse | 
				
			||||
 | 
					                        x:0, y: 0, width: 300, height: 300 | 
				
			||||
 | 
					                    image: attr: x: 0, y: 0, width: 300, height: 300 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        svg = domTree \svg, dom | 
				
			||||
 | 
					        text = document.createElement \div | 
				
			||||
 | 
					        text.setAttribute \class, \ldBar-label | 
				
			||||
 | 
					        root.appendChild svg | 
				
			||||
 | 
					        root.appendChild text | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        group = [0,0] | 
				
			||||
 | 
					        length = 0 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        @fit = ~> | 
				
			||||
 | 
					            if config["bbox"] => | 
				
			||||
 | 
					              box = that.split(' ').map(->+(it.trim!)) | 
				
			||||
 | 
					              box = {x: box.0, y: box.1, width: box.2, height: box.3} | 
				
			||||
 | 
					            else box = group.1.getBBox! | 
				
			||||
 | 
					            if !box or box.width == 0 or box.height == 0 => box = {x: 0, y: 0, width: 100, height: 100} | 
				
			||||
 | 
					            d = (Math.max.apply( | 
				
			||||
 | 
					              null, <[stroke-width stroke-trail-width fill-background-extrude]>.map(->config[it])) | 
				
			||||
 | 
					            ) * 1.5 | 
				
			||||
 | 
					            if config["padding"]? => d = +config["padding"] | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					            svg.attrs viewBox: [box.x - d, box.y - d, box.width + d * 2, box.height + d * 2].join(" ") | 
				
			||||
 | 
					            if config["set-dim"] => <[width height]>.map ~> if !root.style[it] or @fit[it] => | 
				
			||||
 | 
					              root.style[it] = "#{box[it] + d * 2}px" | 
				
			||||
 | 
					              @fit[it] = true | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					            rect = group.0.querySelector \rect | 
				
			||||
 | 
					            if rect => rect.attrs do | 
				
			||||
 | 
					                x: box.x - d, y: box.y - d, width: box.width + d * 2, height: box.height + d * 2 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        if config.path => | 
				
			||||
 | 
					            if is-stroke => | 
				
			||||
 | 
					                group.0 = domTree \g, path: attr: | 
				
			||||
 | 
					                    d: config.path | 
				
			||||
 | 
					                    fill: \none | 
				
			||||
 | 
					                    class: \baseline | 
				
			||||
 | 
					            else | 
				
			||||
 | 
					                group.0 = domTree \g, rect: attr: | 
				
			||||
 | 
					                    x: 0, y: 0, width: 100, height: 100 | 
				
			||||
 | 
					                    mask: "url(\##{id.mask-path})", fill: config["fill-background"] | 
				
			||||
 | 
					                    class: \frame | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					            svg.appendChild group.0 | 
				
			||||
 | 
					            group.1 = domTree \g, path: attr: | 
				
			||||
 | 
					                d: config.path, class: if is-stroke => \mainline else \solid | 
				
			||||
 | 
					                "clip-path": if config.type == \fill => "url(\##{id.clip})" else '' | 
				
			||||
 | 
					            svg.appendChild group.1 | 
				
			||||
 | 
					            path0 = group.0.querySelector (if is-stroke => \path else \rect) | 
				
			||||
 | 
					            path1 = group.1.querySelector \path | 
				
			||||
 | 
					            if is-stroke => path1.attrs fill: \none | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					            patimg = svg.querySelector 'pattern image' | 
				
			||||
 | 
					            img = new Image! | 
				
			||||
 | 
					            img.addEventListener \load, -> | 
				
			||||
 | 
					                box = if config["pattern-size"] => {width: +that, height: +that} | 
				
			||||
 | 
					                else if img.width and img.height => {width: img.width, height: img.height} | 
				
			||||
 | 
					                else {width: 300, height: 300} | 
				
			||||
 | 
					                svg.querySelector \pattern .attrs {width: box.width, height: box.height} | 
				
			||||
 | 
					                patimg.attrs {width: box.width, height: box.height} | 
				
			||||
 | 
					            if /.+\..+|^data:/.exec(if !is-stroke => config.fill else config.stroke) => | 
				
			||||
 | 
					                img.src = if !is-stroke => config.fill else config.stroke | 
				
			||||
 | 
					                patimg.attrs "xlink:href": img.src #if !is-stroke => config.fill else config.stroke | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					            if is-stroke => | 
				
			||||
 | 
					                path0.attrs stroke: config["stroke-trail"], "stroke-width": config["stroke-trail-width"] | 
				
			||||
 | 
					                path1.attrs do | 
				
			||||
 | 
					                    "stroke-width": config["stroke-width"] | 
				
			||||
 | 
					                    stroke: if /.+\..+|^data:/.exec(config.stroke) => "url(\##{id.pattern})" else config.stroke | 
				
			||||
 | 
					            if config.fill and !is-stroke => | 
				
			||||
 | 
					                path1.attrs do | 
				
			||||
 | 
					                    fill: if /.+\..+|^data:/.exec(config.fill) => "url(\##{id.pattern})" else config.fill | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					            length = path1.getTotalLength! | 
				
			||||
 | 
					            @fit! | 
				
			||||
 | 
					            @inited = true | 
				
			||||
 | 
					        else if config.img => | 
				
			||||
 | 
					            if config["img-size"] => | 
				
			||||
 | 
					                ret = config["img-size"].split(\,) | 
				
			||||
 | 
					                size = {width: +ret.0, height: +ret.1} | 
				
			||||
 | 
					            else size = {width: 100, height: 100} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					            group.0 = domTree \g, rect: attr: | 
				
			||||
 | 
					                x: 0, y: 0, width: 100, height: 100, mask: "url(\##{id.mask})", fill: config["fill-background"] | 
				
			||||
 | 
					            svg.querySelector 'mask image' .attrs do | 
				
			||||
 | 
					                width: size.width, height: size.height | 
				
			||||
 | 
					            group.1 = domTree \g, image: attr: | 
				
			||||
 | 
					                width: size.width, height: size.height, x: 0, y: 0, preserveAspectRatio: config["aspect-ratio"] | 
				
			||||
 | 
					                #width: 100, height: 100, x: 0, y: 0, preserveAspectRatio: "xMidYMid" | 
				
			||||
 | 
					                "clip-path": if config.type == \fill => "url(\##{id.clip})" else '' | 
				
			||||
 | 
					                "xlink:href": config.img, class: \solid | 
				
			||||
 | 
					            img = new Image! | 
				
			||||
 | 
					            img.addEventListener \load, ~> | 
				
			||||
 | 
					                if config["img-size"] => | 
				
			||||
 | 
					                    ret = config["img-size"].split(\,) | 
				
			||||
 | 
					                    size = {width: +ret.0, height: +ret.1} | 
				
			||||
 | 
					                else if img.width and img.height => size = {width: img.width, height: img.height} | 
				
			||||
 | 
					                else size = {width: 100, height: 100} | 
				
			||||
 | 
					                svg.querySelector 'mask image' .attrs do | 
				
			||||
 | 
					                    width: size.width, height: size.height | 
				
			||||
 | 
					                group.1.querySelector 'image' .attrs do | 
				
			||||
 | 
					                    width: size.width, height: size.height | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					                @fit! | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					                # image is load, so we set value again. | 
				
			||||
 | 
					                # if we need transition - we have to clean value so it will be treated as 0. | 
				
			||||
 | 
					                v = @value | 
				
			||||
 | 
					                @value = undefined | 
				
			||||
 | 
					                @set v, true | 
				
			||||
 | 
					                @inited = true | 
				
			||||
 | 
					            img.src = config.img | 
				
			||||
 | 
					            svg.appendChild group.0 | 
				
			||||
 | 
					            svg.appendChild group.1 | 
				
			||||
 | 
					        svg.attrs width: \100%, height: \100% #, viewBox: '0 0 100 100' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        @transition = | 
				
			||||
 | 
					            value: | 
				
			||||
 | 
					                src: 0 | 
				
			||||
 | 
					                des: 0 | 
				
			||||
 | 
					            time: {} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					            ease: (t,b,c,d) -> | 
				
			||||
 | 
					                t = t / (d * 0.5) | 
				
			||||
 | 
					                if t < 1 => return c * 0.5 * t * t + b | 
				
			||||
 | 
					                t = t - 1 | 
				
			||||
 | 
					                return -c * 0.5 * (t*(t - 2) - 1) + b | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					            handler: (time, doTransition = true) -> | 
				
			||||
 | 
					                if !@time.src? => @time.src = time | 
				
			||||
 | 
					                [min,max,prec] = [config["min"], config["max"],1/config["precision"]] | 
				
			||||
 | 
					                [dv, dt, dur] = [@value.des - @value.src, (time - @time.src) * 0.001, +config["duration"] or 1] | 
				
			||||
 | 
					                v = if doTransition => @ease(dt, @value.src, dv, dur) else @value.des | 
				
			||||
 | 
					                if config.precision => v = Math.round(v * prec) / prec | 
				
			||||
 | 
					                else if doTransition => v = Math.round(v) | 
				
			||||
 | 
					                v >?= min | 
				
			||||
 | 
					                v <?= max | 
				
			||||
 | 
					                text.textContent = v | 
				
			||||
 | 
					                p = 100.0 * (v - min ) / ( max - min ) | 
				
			||||
 | 
					                if is-stroke => | 
				
			||||
 | 
					                    node = path1 | 
				
			||||
 | 
					                    style = | 
				
			||||
 | 
					                        "stroke-dasharray": ( | 
				
			||||
 | 
					                            if config["stroke-dir"] == \reverse => | 
				
			||||
 | 
					                                "0 #{length * (100 - p) * 0.01} #{length * p * 0.01} 0" | 
				
			||||
 | 
					                            else => "#{p * 0.01 * length} #{(100 - p) * 0.01 * length + 1}" | 
				
			||||
 | 
					                        ) | 
				
			||||
 | 
					                else | 
				
			||||
 | 
					                    box = group.1.getBBox! | 
				
			||||
 | 
					                    dir = config["fill-dir"] | 
				
			||||
 | 
					                    style = if dir == \btt or !dir => do | 
				
			||||
 | 
					                        y: box.y + box.height * (100 - p) * 0.01 | 
				
			||||
 | 
					                        height: box.height * p * 0.01 | 
				
			||||
 | 
					                        x: box.x, width: box.width | 
				
			||||
 | 
					                    else if dir == \ttb => do | 
				
			||||
 | 
					                        y: box.y, height: box.height * p * 0.01 | 
				
			||||
 | 
					                        x: box.x, width: box.width | 
				
			||||
 | 
					                    else if dir == \ltr => do | 
				
			||||
 | 
					                        y: box.y, height: box.height | 
				
			||||
 | 
					                        x: box.x, width: box.width * p * 0.01 | 
				
			||||
 | 
					                    else if dir == \rtl => do | 
				
			||||
 | 
					                        y: box.y, height: box.height | 
				
			||||
 | 
					                        x: box.x + box.width * (100 - p) * 0.01 | 
				
			||||
 | 
					                        width: box.width * p * 0.01 | 
				
			||||
 | 
					                    node = svg.querySelector \rect | 
				
			||||
 | 
					                node.attrs style | 
				
			||||
 | 
					                if dt >= dur => delete @time.src; return false | 
				
			||||
 | 
					                return true | 
				
			||||
 | 
					            start: (src, des, doTransition) -> | 
				
			||||
 | 
					                @value <<< {src, des} | 
				
			||||
 | 
					                !!( root.offsetWidth || root.offsetHeight || root.getClientRects!length ) | 
				
			||||
 | 
					                if !doTransition or !( root.offsetWidth || root.offsetHeight || root.getClientRects!length ) => | 
				
			||||
 | 
					                    @time.src = 0 | 
				
			||||
 | 
					                    @handler 1000, false | 
				
			||||
 | 
					                    return | 
				
			||||
 | 
					                handler.add id.key, (time) ~> return @handler time | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        @set = (v,doTransition = true) -> | 
				
			||||
 | 
					            src = @value or 0 | 
				
			||||
 | 
					            if v? => @value = v else v = @value | 
				
			||||
 | 
					            des = @value | 
				
			||||
 | 
					            @transition.start src, des, doTransition | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        @set (+config.value or 0), config["transition-in"] or false | 
				
			||||
 | 
					        @ | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    window.addEventListener \load, (-> | 
				
			||||
 | 
					        for node in document.querySelectorAll(\.ldBar) => | 
				
			||||
 | 
					          if !node.ldBar => node.ldBar = new ldBar node | 
				
			||||
 | 
					    ), false | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					module.exports = ldBar | 
				
			||||
@ -0,0 +1,19 @@ | 
				
			|||||
 | 
					
 | 
				
			||||
 | 
					transform() | 
				
			||||
 | 
					  -webkit-transform arguments | 
				
			||||
 | 
					  transform arguments | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.ldBar | 
				
			||||
 | 
					  position: relative | 
				
			||||
 | 
					  &.label-center > .ldBar-label | 
				
			||||
 | 
					    position: absolute | 
				
			||||
 | 
					    top: 50% | 
				
			||||
 | 
					    left: 50% | 
				
			||||
 | 
					    transform(translate(-50%,-50%)) | 
				
			||||
 | 
					    text-shadow: 0 0 3px rgba(255,255,255,1) | 
				
			||||
 | 
					.ldBar-label:after | 
				
			||||
 | 
					  content: "%" | 
				
			||||
 | 
					  display: inline | 
				
			||||
 | 
					.ldBar.no-percent | 
				
			||||
 | 
					  .ldBar-label:after | 
				
			||||
 | 
					    content: "" | 
				
			||||
@ -0,0 +1,80 @@ | 
				
			|||||
 | 
					export presets = | 
				
			||||
 | 
					    rainbow: | 
				
			||||
 | 
					        "type": 'stroke' | 
				
			||||
 | 
					        "path": 'M10 10L90 10' | 
				
			||||
 | 
					        "stroke": 'data:ldbar/res,gradient(0,1,#a551df,#fd51ad,#ff7f82,#ffb874,#ffeb90)' | 
				
			||||
 | 
					        "bbox": "10 10 80 10" | 
				
			||||
 | 
					    energy: | 
				
			||||
 | 
					        "type": 'fill' | 
				
			||||
 | 
					        "path": 'M15 5L85 5A5 5 0 0 1 85 15L15 15A5 5 0 0 1 15 5' | 
				
			||||
 | 
					        "stroke": \#f00 | 
				
			||||
 | 
					        "fill": 'data:ldbar/res,gradient(45,2,#4e9,#8fb,#4e9)' | 
				
			||||
 | 
					        "fill-dir": "ltr" | 
				
			||||
 | 
					        "fill-background": \#444 | 
				
			||||
 | 
					        "fill-background-extrude": 1 | 
				
			||||
 | 
					        "bbox": "10 5 80 10" | 
				
			||||
 | 
					    stripe: | 
				
			||||
 | 
					        "type": 'fill' | 
				
			||||
 | 
					        "path": 'M15 5L85 5A5 5 0 0 1 85 15L15 15A5 5 0 0 1 15 5' | 
				
			||||
 | 
					        "stroke": \#f00 | 
				
			||||
 | 
					        "fill": 'data:ldbar/res,stripe(#25b,#58e,1)' | 
				
			||||
 | 
					        "fill-dir": "ltr" | 
				
			||||
 | 
					        "fill-background": \#ddd | 
				
			||||
 | 
					        "fill-background-extrude": 1 | 
				
			||||
 | 
					        "bbox": "10 5 80 10" | 
				
			||||
 | 
					    text: | 
				
			||||
 | 
					        "type": 'fill' | 
				
			||||
 | 
					        "img": """data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="70" height="20" viewBox="0 0 70 20"><text x="35" y="10" text-anchor="middle" dominant-baseline="central" font-family="arial">LOADING</text></svg>""" | 
				
			||||
 | 
					        "fill-background-extrude": 1.3 | 
				
			||||
 | 
					        "pattern-size": 100 | 
				
			||||
 | 
					        "fill-dir": "ltr" | 
				
			||||
 | 
					        "img-size": "70,20" | 
				
			||||
 | 
					        "bbox": "0 0 70 20" | 
				
			||||
 | 
					    line: | 
				
			||||
 | 
					        "type": 'stroke' | 
				
			||||
 | 
					        "path": 'M10 10L90 10' | 
				
			||||
 | 
					        "stroke": \#25b | 
				
			||||
 | 
					        "stroke-width": 3 | 
				
			||||
 | 
					        "stroke-trail": \#ddd | 
				
			||||
 | 
					        "stroke-trail-width": 1 | 
				
			||||
 | 
					        "bbox": "10 10 80 10" | 
				
			||||
 | 
					    fan: | 
				
			||||
 | 
					        "type": 'stroke' | 
				
			||||
 | 
					        "path": 'M10 90A40 40 0 0 1 90 90' | 
				
			||||
 | 
					        "fill-dir": \btt | 
				
			||||
 | 
					        "fill": \#25b | 
				
			||||
 | 
					        "fill-background": \#ddd | 
				
			||||
 | 
					        "fill-background-extrude": 3 | 
				
			||||
 | 
					        "stroke-dir": \normal | 
				
			||||
 | 
					        "stroke": \#25b | 
				
			||||
 | 
					        "stroke-width": \3 | 
				
			||||
 | 
					        "stroke-trail": \#ddd | 
				
			||||
 | 
					        "stroke-trail-width": 0.5 | 
				
			||||
 | 
					        "bbox": "10 50 80 40" | 
				
			||||
 | 
					    circle: | 
				
			||||
 | 
					        "type": 'stroke' | 
				
			||||
 | 
					        "path": 'M50 10A40 40 0 0 1 50 90A40 40 0 0 1 50 10' | 
				
			||||
 | 
					        "fill-dir": \btt | 
				
			||||
 | 
					        "fill": \#25b | 
				
			||||
 | 
					        "fill-background": \#ddd | 
				
			||||
 | 
					        "fill-background-extrude": 3 | 
				
			||||
 | 
					        "stroke-dir": \normal | 
				
			||||
 | 
					        "stroke": \#25b | 
				
			||||
 | 
					        "stroke-width": \3 | 
				
			||||
 | 
					        "stroke-trail": \#ddd | 
				
			||||
 | 
					        "stroke-trail-width": 0.5 | 
				
			||||
 | 
					        "bbox": "10 10 80 80" | 
				
			||||
 | 
					    bubble: | 
				
			||||
 | 
					        "type": 'fill' | 
				
			||||
 | 
					        "path": 'M50 10A40 40 0 0 1 50 90A40 40 0 0 1 50 10' | 
				
			||||
 | 
					        "fill-dir": \btt | 
				
			||||
 | 
					        "fill": 'data:ldbar/res,bubble(#39d,#cef)' | 
				
			||||
 | 
					        "pattern-size": "150" | 
				
			||||
 | 
					        "fill-background": \#ddd | 
				
			||||
 | 
					        "fill-background-extrude": 2 | 
				
			||||
 | 
					        "stroke-dir": \normal | 
				
			||||
 | 
					        "stroke": \#25b | 
				
			||||
 | 
					        "stroke-width": \3 | 
				
			||||
 | 
					        "stroke-trail": \#ddd | 
				
			||||
 | 
					        "stroke-trail-width": 0.5 | 
				
			||||
 | 
					        "bbox": "10 10 80 80" | 
				
			||||
					Loading…
					
					
				
		Reference in new issue