Browse Source

add tab+space interaction and update documentation

Mattia Larentis 12 years ago
parent
commit
e84402b491
3 changed files with 272 additions and 213 deletions
  1. 247 198
      examples/index.html
  2. 24 14
      static/js/bootstrapSwitch.js
  3. 1 1
      static/sass/bootstrapSwitch.scss

+ 247 - 198
examples/index.html

@@ -4,13 +4,13 @@
     <meta charset="utf-8">
     <title>Bootstrap switch - by Mattia Larentis</title>
     <meta name="author" content="Mattia Larentis">
-    <meta http-equiv="X-UA-Compatible" content="IE=9; IE=8;"/>
-    <link href="http://twitter.github.com/bootstrap/assets/css/bootstrap.css"
-          rel="stylesheet">
-    <link href="../static/stylesheets/bootstrapSwitch.css"
-          rel="stylesheet">
-    <link href="http://twitter.github.com/bootstrap/assets/js/google-code-prettify/prettify.css"
-          rel="stylesheet">
+    <meta http-equiv="X-UA-Compatible" content="IE=9; IE=8;" />
+
+    <link rel="stylesheet" href="http://twitter.github.com/bootstrap/assets/css/bootstrap.css">
+    <link rel="stylesheet" href="../static/stylesheets/bootstrapSwitch.css">
+    <link rel="stylesheet" href="http://twitter.github.com/bootstrap/assets/js/google-code-prettify/prettify.css">
+    <link rel="stylesheet" href="http://twitter.github.com/bootstrap/assets/css/docs.css">
+
     <style>
         .span4, h1 {
             text-align: center;
@@ -26,22 +26,24 @@
     </style>
 </head>
 <body style="padding-top: 50px;">
+
 <a href="https://github.com/nostalgiaz/bootstrap-switch"><img
-        style="position: absolute; top: 0; right: 0; border: 0;"
-        src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png"
-        alt="Fork me on GitHub"></a>
+    style="position: absolute; top: 0; right: 0; border: 0;"
+    src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png"
+    alt="Fork me on GitHub"></a>
 
-<div class="container-fluid">
+<div class="container">
 <div class="row-fluid">
     <div class="span12">
         <h1>Bootstrap switch
-            <small>- by <a href="http://larentis.eu">Mattia Larentis</a></small>
+            <small>- by <a href="http://larentis.eu">Mattia Larentis</a> <a href="https://twitter.com/spiritualguru">(@SpiritualGuru)</a>
+            </small>
         </h1>
     </div>
 </div>
 
 <div class="row-fluid">
-    <div class="span6 offset3" style="text-align: center;">
+    <div class="span8 offset2" style="text-align: center;">
         <iframe src="http://ghbtns.com/github-btn.html?user=nostalgiaz&repo=bootstrap-switch&type=watch&count=true"
                 allowtransparency="true" frameborder="0" scrolling="0" width="170" height="30"></iframe>
         <iframe src="http://ghbtns.com/github-btn.html?user=nostalgiaz&repo=bootstrap-switch&type=fork&count=true"
@@ -53,255 +55,302 @@
 
 <div class="row-fluid">
     <div class="span12">
-        <h3>Large</h3>
-        <hr>
-    </div>
-</div>
-
+        <h3>Size</h3>
+        <div class="bs-docs-example">
+            <div class="switch switch-large">
+                <input type="checkbox" checked />
+            </div>
+
+            <div class="switch">
+                <input type="checkbox" checked />
+            </div>
+
+            <div class="switch switch-small">
+                <input type="checkbox" checked />
+            </div>
+
+            <div class="switch switch-mini">
+                <input type="checkbox" checked />
+            </div>
+        </div>
+        <pre class="prettyprint linenums">
+&lt;div class="switch switch-large">
+    &lt;input type="checkbox" checked />
+&lt;/div>
 
-<div class="row-fluid">
+&lt;div class="switch">
+    &lt;input type="checkbox" checked />
+&lt;/div>
 
-    <div class="span4">
-        <div id="mySwitch" class="switch switch-large" data-on="danger"
-             data-off="warning">
-            <input type="checkbox" checked="checked">
-        </div>
-    </div>
-    <div class="span8">
+&lt;div class="switch switch-small">
+    &lt;input type="checkbox" checked />
+&lt;/div>
 
-        <h4>Html:</h4>
-                <pre class="prettyprint linenums">
-&lt;div id="mySwitch" class="switch switch-large" data-on="danger" data-off="warning">
-    &lt;input type="checkbox" checked="checked">
+&lt;div class="switch switch-mini">
+    &lt;input type="checkbox" checked />
 &lt;/div></pre>
-        <h4>Js:</h4>
-                <pre class="prettyprint linenums">
-$('#mySwitch').on('switch-change', function (e, data) {
-    var $el = $(data.el)
-      , value = data.value;
-    console.log(e, $el, value);
-});</pre>
     </div>
 </div>
+
 <div class="row-fluid">
     <div class="span12">
-        <h3>Normal</h3>
-        <hr>
+        <h3>Colors</h3>
+        <div class="bs-docs-example">
+            <div class="switch" data-on="primary" data-off="info">
+                <input type="checkbox" checked />
+            </div>
+            <div class="switch" data-on="info" data-off="success">
+                <input type="checkbox" checked />
+            </div>
+            <div class="switch" data-on="success" data-off="warning">
+                <input type="checkbox" checked />
+            </div>
+            <div class="switch" data-on="warning" data-off="danger">
+                <input type="checkbox" checked />
+            </div>
+            <div class="switch" data-on="danger" data-off="primary">
+                <input type="checkbox" checked />
+            </div>
+        </div>
+        <pre class="prettyprint linenums">
+&lt;div class="switch" data-on="primary" data-off="info">
+    &lt;input type="checkbox" checked />
+&lt;/div>
+
+&lt;div class="switch" data-on="info" data-off="success">
+    &lt;input type="checkbox" checked />
+&lt;/div>
+
+&lt;div class="switch" data-on="success" data-off="warning">
+    &lt;input type="checkbox" checked />
+&lt;/div>
+
+&lt;div class="switch" data-on="warning" data-off="danger">
+    &lt;input type="checkbox" checked />
+&lt;/div>
+
+&lt;div class="switch" data-on="danger" data-off="primary">
+    &lt;input type="checkbox" checked />
+&lt;/div>
+</pre>
     </div>
 </div>
+
 <div class="row-fluid">
+    <div class="span12">
+        <h3>Animation</h3>
 
-    <div class="span4">
-        <div class="switch" data-animated="false">
-            <input type="checkbox">
+        <div class="bs-docs-example">
+            <div class="switch" data-animated="false">
+                <input type="checkbox" checked />
+            </div>
         </div>
-    </div>
-    <div class="span8">
-
-        <h4>Html:</h4>
-                <pre class="prettyprint linenums">
+        <pre class="prettyprint linenums">
 &lt;div class="switch" data-animated="false">
-    &lt;input type="checkbox">
+    &lt;input type="checkbox" checked />
 &lt;/div></pre>
     </div>
 </div>
+
 <div class="row-fluid">
     <div class="span12">
-        <h3>Small</h3>
-        <hr>
-    </div>
-</div>
-<div class="row-fluid">
+        <h3>Disabled</h3>
 
-    <div class="span4">
-        <div class="switch switch-small">
-            <input type="checkbox" checked="checked" disabled="disabled">
+        <div class="bs-docs-example">
+            <div class="switch">
+                <input type="checkbox" checked disabled />
+            </div>
         </div>
-    </div>
-    <div class="span8">
-
-        <h4>Html:</h4>
-                <pre class="prettyprint linenums">
-&lt;div class="switch switch-small">
-    &lt;input type="checkbox" checked="checked" disabled="disabled">
+        <pre class="prettyprint linenums">
+&lt;div class="switch">
+   &lt;input type="checkbox" checked disabled />
 &lt;/div></pre>
     </div>
 </div>
+
 <div class="row-fluid">
     <div class="span12">
-        <h3>Mini</h3>
-        <hr>
-    </div>
-</div>
-<div class="row-fluid">
+        <h3>Text</h3>
 
-    <div class="span4">
-        <div class="switch switch-mini">
-            <input type="checkbox" checked="checked">
+        <div class="bs-docs-example">
+            <div class="switch" data-on-label="SI" data-off-label="NO">
+                <input type="checkbox" checked />
+            </div>
         </div>
-    </div>
-    <div class="span8">
-
-        <h4>Html:</h4>
-                <pre class="prettyprint linenums">
-&lt;div class="switch switch-mini">
-    &lt;input type="checkbox" checked="checked">
+        <pre class="prettyprint linenums">
+&lt;div class="switch" data-on-label="SI" data-off-label="NO">
+    &lt;input type="checkbox" checked />
 &lt;/div></pre>
     </div>
 </div>
 
-
 <div class="row-fluid">
     <div class="span12">
-        <h3>Toggle State</h3>
-        <hr>
-    </div>
-</div>
-<div class="row-fluid">
+        <h3>HTML text</h3>
 
-    <div class="span4">
-        <div id="toggle-state-switch" class="switch">
-            <input type="checkbox" checked="checked">
+        <div class="bs-docs-example">
+            <div class="switch" data-on-label="<i class='icon-ok icon-white'></i>" data-off-label="<i class='icon-remove'></i>">
+                <input type="checkbox" checked />
+            </div>
         </div>
-        <br>
-        <br>
-
-        <div id="toggle-state-switch-button-on" class="btn btn-primary">ON!</div>
-        <div id="toggle-state-switch-button" class="btn btn-primary">Toggle me!</div>
-        <div id="toggle-state-switch-button-off" class="btn btn-primary">OFF!</div>
-    </div>
-    <div class="span8">
-
-        <h4>Html:</h4>
-<pre class="prettyprint linenums">
-&lt;div id="toggle-state-switch" class="switch">
-    &lt;input type="checkbox" checked="checked">
+        <pre class="prettyprint linenums">
+&lt;div class="switch" data-on-label="&lt;i class='icon-ok icon-white'>&lt;/i>" data-off-label="&lt;i class='icon-remove'>&lt;/i>">
+    &lt;input type="checkbox" checked />
 &lt;/div></pre>
-        <h4>Js:</h4>
-<pre class="prettyprint linenums">
-$('#toggle-state-switch').bootstrapSwitch('toggleState');
-$('#toggle-state-switch').bootstrapSwitch('setState', false); // true || false
-</pre>
     </div>
 </div>
+
 <div class="row-fluid">
     <div class="span12">
-        <h3>Destroy</h3>
-        <hr>
-    </div>
-</div>
-<div class="row-fluid">
+        <h3>Event handler <small>javascript</small></h3>
 
-    <div class="span4">
-        <div id="destroy-switch" class="switch">
-            <input type="checkbox" checked="checked">
+        <div class="bs-docs-example">
+            <div id="mySwitch" class="switch">
+                <input type="checkbox" checked />
+            </div>
         </div>
-        <br>
-        <br>
-        <button id="btn-destroy-switch" class="btn btn-danger">
-            Destroy me!
-        </button>
-    </div>
-    <div class="span8">
-
-        <h4>Html:</h4>
-<pre class="prettyprint linenums">
-&lt;div id="destroy-switch" class="switch">
-    &lt;input type="checkbox" checked="checked">
-&lt;/div></pre>
-        <h4>Js:</h4>
-<pre class="prettyprint linenums">
-$('#destroy-switch').bootstrapSwitch('destroy');
-</pre>
+        <pre class="prettyprint linenums">
+$('#mySwitch').on('switch-change', function (e, data) {
+    var $el = $(data.el)
+      , value = data.value;
+    console.log(e, $el, value);
+});</pre>
     </div>
 </div>
+
 <div class="row-fluid">
     <div class="span12">
-        <h3>Disabled</h3>
-        <hr>
+        <h3>Toggle State <small>javascript</small></h3>
+
+        <div class="bs-docs-example">
+            <div id="toggle-state-switch" class="switch">
+                <input type="checkbox" checked />
+            </div>
+            <br>
+            <br>
+            <div id="toggle-state-switch-button-on" class="btn btn-primary">ON!</div>
+            <div id="toggle-state-switch-button" class="btn btn-primary">Toggle me!</div>
+            <div id="toggle-state-switch-button-off" class="btn btn-primary">OFF!</div>
+        </div>
+        <pre class="prettyprint linenums">
+$('#toggle-state-switch').bootstrapSwitch('toggleState');
+$('#toggle-state-switch').bootstrapSwitch('setState', false); // true || false</pre>
     </div>
 </div>
-<div class="row-fluid">
 
-    <div class="span4">
-        <div id="disable-switch" class="switch">
-            <input type="checkbox" checked="checked">
-        </div>
-        <br>
-        <br>
-        <button id="btn-is-active-switch" class="btn">
-            Is active?
-        </button>
-        <button id="btn-toggle-activation-switch" class="btn">
-            Toggle activation!
-        </button>
-        <button id="btn-disable-switch" class="btn">
-            Disable!
-        </button>
-        <button id="btn-activate-switch" class="btn">
-            Activate!
-        </button>
-    </div>
-    <div class="span8">
 
-        <h4>Html:</h4>
-<pre class="prettyprint linenums">
-&lt;div id="disable-switch" class="switch">
-    &lt;input type="checkbox" checked="checked">
-&lt;/div></pre>
-        <h4>Js:</h4>
-<pre class="prettyprint linenums">
-$('#disable-switch').bootstrapSwitch('isActive');
-$('#disable-switch').bootstrapSwitch('toggleActivation');
-$('#disable-switch').bootstrapSwitch('setActive', false);
-$('#disable-switch').bootstrapSwitch('setActive', true);
-</pre>
-    </div>
-</div>
 <div class="row-fluid">
     <div class="span12">
-        <h3>Label</h3>
-        <hr>
+        <h3>Destroy <small>javascript</small></h3>
+
+        <div class="bs-docs-example">
+            <div id="destroy-switch" class="switch">
+                <input type="checkbox" checked />
+            </div>
+            <br>
+            <br>
+            <button id="btn-destroy-switch" class="btn btn-danger">
+                Destroy me!
+            </button>
+        </div>
+        <pre class="prettyprint linenums">
+$('#destroy-switch').bootstrapSwitch('destroy');</pre>
     </div>
 </div>
-<div class="row-fluid">
 
-    <div class="span4">
-        <div class="switch" data-on-label="SI" data-off-label="NO">
-            <input type="checkbox" checked="checked">
-        </div>
-    </div>
-    <div class="span8">
 
-        <h4>Html:</h4>
-<pre class="prettyprint linenums">
-&lt;div class="switch" data-on-label="SI" data-off-label="NO">
-    &lt;input type="checkbox" checked="checked">
-&lt;/div></pre>
-    </div>
-</div>
 <div class="row-fluid">
     <div class="span12">
-        <h3>HTML Label</h3>
-        <hr>
+        <h3>Disabled <small>javascript</small></h3>
+
+        <div class="bs-docs-example">
+            <div id="disable-switch" class="switch">
+                <input type="checkbox" checked />
+            </div>
+            <br>
+            <br>
+            <button id="btn-is-active-switch" class="btn">
+                Is active?
+            </button>
+            <button id="btn-toggle-activation-switch" class="btn">
+                Toggle activation!
+            </button>
+            <button id="btn-disable-switch" class="btn">
+                Disable!
+            </button>
+            <button id="btn-activate-switch" class="btn">
+                Activate!
+            </button>
+        </div>
+        <pre class="prettyprint linenums">
+$('#disable-switch').bootstrapSwitch('isActive');
+$('#disable-switch').bootstrapSwitch('toggleActivation');
+$('#disable-switch').bootstrapSwitch('setActive', false);  // true || false</pre>
     </div>
 </div>
-<div class="row-fluid">
 
-    <div class="span4">
-        <div class="switch" data-on-label="<i class='icon-ok icon-white'></i>" data-off-label="<i class='icon-remove'></i>">
-            <input type="checkbox" checked="checked">
+<div class="row-fluid">
+    <div class="span12">
+        <h3>Form <small>- try to use tab and space</small></h3>
+
+        <div class="bs-docs-example">
+            <form class="form-horizontal span8 offset2">
+                <div class="control-group">
+                    <label class="control-label" for="inputEmail">Email</label>
+                    <div class="controls">
+                        <input type="text" id="inputEmail" placeholder="Email">
+                    </div>
+                </div>
+
+                <div class="control-group">
+                    <label class="control-label" for="notification1">Notification 1</label>
+
+                    <div class="controls">
+                        <div class="switch" tabindex="0">
+                            <input id="notification1" type="checkbox" />
+                        </div>
+                    </div>
+                </div>
+                <div class="control-group">
+                    <label class="control-label" for="notification1">Notification 2</label>
+
+                    <div class="controls">
+                        <div class="switch" tabindex="0">
+                            <input id="notification2" type="checkbox" />
+                        </div>
+                    </div>
+                </div>
+            </form>
+            <div class="clearfix"></div>
         </div>
-    </div>
-    <div class="span8">
-
-        <h4>Html:</h4>
-<pre class="prettyprint linenums">
-&lt;div class="switch" data-on-label="&lt;i class='icon-ok icon-white'>&lt;/i>" data-off-label="&lt;i class='icon-remove'>&lt;/i>">
-    &lt;input type="checkbox" checked="checked">
-&lt;/div></pre>
+        <pre class="prettyprint linenums">
+&lt;form class="form-horizontal">
+    &lt;div class="control-group">
+        &lt;label class="control-label" for="inputEmail">Email&lt;/label>
+        &lt;div class="controls">
+            &lt;input type="text" id="inputEmail" placeholder="Email">
+        &lt;/div>
+    &lt;/div>
+    &lt;div class="control-group">
+        &lt;label class="control-label" for="notification1">Notification 1&lt;/label>
+        &lt;div class="controls">
+            &lt;div class="switch" tabindex="0">
+                &lt;input id="notification1" type="checkbox" />
+            &lt;/div>
+        &lt;/div>
+    &lt;/div>
+    &lt;div class="control-group">
+        &lt;label class="control-label" for="notification1">Notification 2&lt;/label>
+        &lt;div class="controls">
+            &lt;div class="switch" tabindex="0">
+                &lt;input id="notification2" type="checkbox" />
+            &lt;/div>
+        &lt;/div>
+    &lt;/div>
+&lt;/form></pre>
     </div>
 </div>
+
 <p class="pull-right">
     <a href="https://twitter.com/SpiritualGuru">follow me</a> -
     <a href="http://www.larentis.eu">my site</a>
@@ -315,7 +364,7 @@ $('#disable-switch').bootstrapSwitch('setActive', true);
     window.prettyPrint && prettyPrint();
     $('#mySwitch').on('switch-change', function (e, data) {
         var $el = $(data.el)
-                , value = data.value;
+            , value = data.value;
         console.log(e, $el, value);
     });
 

+ 24 - 14
static/js/bootstrapSwitch.js

@@ -1,5 +1,5 @@
 /* ============================================================
- * bootstrapSwitch v1.1 by Larentis Mattia @spiritualGuru
+ * bootstrapSwitch v1.2 by Larentis Mattia @spiritualGuru
  * http://www.larentis.eu/switch/
  * ============================================================
  * Licensed under the Apache License, Version 2.0
@@ -11,7 +11,7 @@
 
   $.fn['bootstrapSwitch'] = function (method) {
     var methods = {
-      init:function () {
+      init: function () {
         this.each(function () {
             var $element = $(this)
               , $div
@@ -45,7 +45,7 @@
               .addClass(color)
               .html(onLabel);
 
-            color = '';  // reset value
+            color = '';
             if ($element.data('off') !== undefined)
               color = "switch-" + $element.data('off');
 
@@ -65,9 +65,10 @@
             if ($element.data('animated') !== false)
               $div.addClass('switch-animate').data('animated', true);
 
-            $div.append($switchLeft);
-            $div.append($label);
-            $div.append($switchRight);
+            $div
+              .append($switchLeft)
+              .append($label)
+              .append($switchRight);
 
             $element.find('>div').addClass(
               $element.find('input').is(':checked') ? 'switch-on' : 'switch-off'
@@ -80,9 +81,18 @@
               $this.siblings('label').trigger('mousedown').trigger('mouseup').trigger('click');
             };
 
+            $element.on('keydown', function (e) {
+              if (e.keyCode === 32) {
+                e.stopImmediatePropagation();
+                e.preventDefault();
+                changeStatus($(e.target).find('span:first'));
+              }
+            });
+
             $switchLeft.on('click', function (e) {
               changeStatus($(this));
             });
+
             $switchRight.on('click', function (e) {
               changeStatus($(this));
             });
@@ -102,7 +112,7 @@
               if ($element.data('animated') !== false)
                 $element.addClass("switch-animate");
 
-              $element.parent().trigger('switch-change', {'el':$(this), 'value':$(this).is(':checked')})
+              $element.parent().trigger('switch-change', {'el': $(this), 'value': $(this).is(':checked')})
             });
 
             $element.find('label').on('mousedown touchstart', function (e) {
@@ -176,28 +186,28 @@
           }
         );
       },
-      toggleActivation:function () {
+      toggleActivation: function () {
         $(this).toggleClass('deactivate');
       },
-      isActive : function() {
+      isActive: function () {
         return !$(this).hasClass('deactivate');
       },
       setActive: function (active) {
-        if(active)
+        if (active)
           $(this).removeClass('deactivate');
         else $(this).addClass('deactivate');
       },
-      toggleState:function (skipOnChange) {
+      toggleState: function (skipOnChange) {
         var $input = $(this).find('input:checkbox');
         $input.prop('checked', !$input.is(':checked')).trigger('change', skipOnChange);
       },
-      setState:function (value, skipOnChange) {
+      setState: function (value, skipOnChange) {
         $(this).find('input:checkbox').prop('checked', value).trigger('change', skipOnChange);
       },
-      status:function () {
+      status: function () {
         return $(this).find('input:checkbox').is(':checked');
       },
-      destroy:function () {
+      destroy: function () {
         var $div = $(this).find('div')
           , $checkbox;
 

+ 1 - 1
static/sass/bootstrapSwitch.scss

@@ -1,5 +1,5 @@
 /* ============================================================
- * bootstrapSwitch v1.1 by Larentis Mattia @spiritualGuru
+ * bootstrapSwitch v1.2 by Larentis Mattia @spiritualGuru
  * http://www.larentis.eu/switch/
  * ============================================================
  * Licensed under the Apache License, Version 2.0