Emanuele пре 8 година
родитељ
комит
05e5ba4d3d

+ 59 - 6
.gitignore

@@ -1,7 +1,60 @@
-npm-debug.log
-node_modules
-components
-test.html
-.DS_Store
-.idea
+# Logs
+logs
+*.log
+npm-debug.log*
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+
+# nyc test coverage
+.nyc_output
+
+# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+bower_components
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (http://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+node_modules/
+jspm_packages/
+
+# Typescript v1 declaration files
+typings/
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variables file
+.env
+
+# custom
 test/
+test.html

+ 4 - 5
CONTRIBUTING.md

@@ -1,14 +1,13 @@
 Prerequisites:
 
 - Node and NPM
-- Gulp
 
 Flow:
 
-- Checkout `develop` branch
+- Fork the repository and checkout `develop` branch
 - Run `npm install` to get or update the dependencies
-- Run `gulp`. Gulp will run the default task and listen for further files changes
-- Work on the Coffeescript or LESS sources. Gulp will automatically build for you
-- Once completed, submit a Pull Requests. Be sure to target `develop` as destination branch
+- Run `npm start` to build `dist/` and `docs/` directories
+- Change JavaScript or LESS files in `src/` directories
+- Once finished, submit a [Pull Request](https://github.com/nostalgiaz/bootstrap-switch/compare/develop...develop). Remember to target `develop` as destination branch
 
 Thank you.

+ 0 - 1
bower.json

@@ -11,7 +11,6 @@
     "docs",
     "test",
     "CNAME",
-    "coffeelint.json",
     "composer.json",
     "CONTRIBUTING.md",
     "gulpfile.coffee",

+ 0 - 127
coffeelint.json

@@ -1,127 +0,0 @@
-{
-    "coffeescript_error": {
-        "level": "error"
-    },
-    "arrow_spacing": {
-        "name": "arrow_spacing",
-        "level": "ignore"
-    },
-    "no_tabs": {
-        "name": "no_tabs",
-        "level": "error"
-    },
-    "no_trailing_whitespace": {
-        "name": "no_trailing_whitespace",
-        "level": "error",
-        "allowed_in_comments": false,
-        "allowed_in_empty_lines": false
-    },
-    "max_line_length": {
-        "name": "max_line_length",
-        "value": 120,
-        "level": "error",
-        "limitComments": true
-    },
-    "line_endings": {
-        "name": "line_endings",
-        "level": "warn",
-        "value": "unix"
-    },
-    "no_trailing_semicolons": {
-        "name": "no_trailing_semicolons",
-        "level": "error"
-    },
-    "indentation": {
-        "name": "indentation",
-        "value": 2,
-        "level": "error"
-    },
-    "camel_case_classes": {
-        "name": "camel_case_classes",
-        "level": "error"
-    },
-    "colon_assignment_spacing": {
-        "name": "colon_assignment_spacing",
-        "level": "ignore",
-        "spacing": {
-            "left": 0,
-            "right": 0
-        }
-    },
-    "no_implicit_braces": {
-        "name": "no_implicit_braces",
-        "level": "ignore",
-        "strict": true
-    },
-    "no_plusplus": {
-        "name": "no_plusplus",
-        "level": "ignore"
-    },
-    "no_throwing_strings": {
-        "name": "no_throwing_strings",
-        "level": "error"
-    },
-    "no_backticks": {
-        "name": "no_backticks",
-        "level": "error"
-    },
-    "no_implicit_parens": {
-        "name": "no_implicit_parens",
-        "strict": true,
-        "level": "ignore"
-    },
-    "no_empty_param_list": {
-        "name": "no_empty_param_list",
-        "level": "error"
-    },
-    "no_stand_alone_at": {
-        "name": "no_stand_alone_at",
-        "level": "ignore"
-    },
-    "space_operators": {
-        "name": "space_operators",
-        "level": "ignore"
-    },
-    "duplicate_key": {
-        "name": "duplicate_key",
-        "level": "error"
-    },
-    "empty_constructor_needs_parens": {
-        "name": "empty_constructor_needs_parens",
-        "level": "ignore"
-    },
-    "cyclomatic_complexity": {
-        "name": "cyclomatic_complexity",
-        "value": 10,
-        "level": "ignore"
-    },
-    "newlines_after_classes": {
-        "name": "newlines_after_classes",
-        "value": 3,
-        "level": "error"
-    },
-    "no_unnecessary_fat_arrows": {
-        "name": "no_unnecessary_fat_arrows",
-        "level": "error"
-    },
-    "missing_fat_arrows": {
-        "name": "missing_fat_arrows",
-        "level": "ignore"
-    },
-    "non_empty_constructor_needs_parens": {
-        "name": "non_empty_constructor_needs_parens",
-        "level": "ignore"
-    },
-    "no_unnecessary_double_quotes": {
-        "name": "no_unnecessary_double_quotes",
-        "level": "ignore"
-    },
-    "no_debugger": {
-        "name": "no_debugger",
-        "level": "warn"
-    },
-    "no_interpolation_in_single_quotes": {
-        "name": "no_interpolation_in_single_quotes",
-        "level": "ignore"
-    }
-}

+ 553 - 573
dist/js/bootstrap-switch.js

@@ -1,160 +1,120 @@
-/* ========================================================================
- * bootstrap-switch - v3.3.2
- * http://www.bootstrap-switch.org
- * ========================================================================
- * Copyright 2012-2013 Mattia Larentis
- *
- * ========================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================================
- */
-
-(function() {
-  var slice = [].slice;
-
-  (function($, window) {
-    "use strict";
-    var BootstrapSwitch;
-    BootstrapSwitch = (function() {
-      function BootstrapSwitch(element, options) {
-        if (options == null) {
-          options = {};
-        }
-        this.$element = $(element);
-        this.options = $.extend({}, $.fn.bootstrapSwitch.defaults, {
-          state: this.$element.is(":checked"),
-          size: this.$element.data("size"),
-          animate: this.$element.data("animate"),
-          disabled: this.$element.is(":disabled"),
-          readonly: this.$element.is("[readonly]"),
-          indeterminate: this.$element.data("indeterminate"),
-          inverse: this.$element.data("inverse"),
-          radioAllOff: this.$element.data("radio-all-off"),
-          onColor: this.$element.data("on-color"),
-          offColor: this.$element.data("off-color"),
-          onText: this.$element.data("on-text"),
-          offText: this.$element.data("off-text"),
-          labelText: this.$element.data("label-text"),
-          handleWidth: this.$element.data("handle-width"),
-          labelWidth: this.$element.data("label-width"),
-          baseClass: this.$element.data("base-class"),
-          wrapperClass: this.$element.data("wrapper-class")
-        }, options);
-        this.prevOptions = {};
-        this.$wrapper = $("<div>", {
-          "class": (function(_this) {
-            return function() {
-              var classes;
-              classes = ["" + _this.options.baseClass].concat(_this._getClasses(_this.options.wrapperClass));
-              classes.push(_this.options.state ? _this.options.baseClass + "-on" : _this.options.baseClass + "-off");
-              if (_this.options.size != null) {
-                classes.push(_this.options.baseClass + "-" + _this.options.size);
-              }
-              if (_this.options.disabled) {
-                classes.push(_this.options.baseClass + "-disabled");
-              }
-              if (_this.options.readonly) {
-                classes.push(_this.options.baseClass + "-readonly");
-              }
-              if (_this.options.indeterminate) {
-                classes.push(_this.options.baseClass + "-indeterminate");
-              }
-              if (_this.options.inverse) {
-                classes.push(_this.options.baseClass + "-inverse");
-              }
-              if (_this.$element.attr("id")) {
-                classes.push(_this.options.baseClass + "-id-" + (_this.$element.attr("id")));
-              }
-              return classes.join(" ");
-            };
-          })(this)()
-        });
-        this.$container = $("<div>", {
-          "class": this.options.baseClass + "-container"
-        });
-        this.$on = $("<span>", {
-          html: this.options.onText,
-          "class": this.options.baseClass + "-handle-on " + this.options.baseClass + "-" + this.options.onColor
-        });
-        this.$off = $("<span>", {
-          html: this.options.offText,
-          "class": this.options.baseClass + "-handle-off " + this.options.baseClass + "-" + this.options.offColor
-        });
-        this.$label = $("<span>", {
-          html: this.options.labelText,
-          "class": this.options.baseClass + "-label"
-        });
-        this.$element.on("init.bootstrapSwitch", (function(_this) {
-          return function() {
-            return _this.options.onInit.apply(element, arguments);
-          };
-        })(this));
-        this.$element.on("switchChange.bootstrapSwitch", (function(_this) {
-          return function(e) {
-            if (false === _this.options.onSwitchChange.apply(element, arguments)) {
-              if (_this.$element.is(":radio")) {
-                return $("[name='" + (_this.$element.attr('name')) + "']").trigger("previousState.bootstrapSwitch", true);
-              } else {
-                return _this.$element.trigger("previousState.bootstrapSwitch", true);
-              }
-            }
-          };
-        })(this));
-        this.$container = this.$element.wrap(this.$container).parent();
-        this.$wrapper = this.$container.wrap(this.$wrapper).parent();
-        this.$element.before(this.options.inverse ? this.$off : this.$on).before(this.$label).before(this.options.inverse ? this.$on : this.$off);
-        if (this.options.indeterminate) {
-          this.$element.prop("indeterminate", true);
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+(function ($, window) {
+  var BootstrapSwitch = function () {
+    function BootstrapSwitch(element) {
+      var _this = this;
+
+      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+      _classCallCheck(this, BootstrapSwitch);
+
+      this.$element = $(element);
+      this.options = $.extend({}, $.fn.bootstrapSwitch.defaults, this._getElementOptions(), options);
+      this.prevOptions = {};
+      this.$wrapper = $('<div>', {
+        class: function _class() {
+          var classes = [];
+          classes.push(_this.options.state ? 'on' : 'off');
+          if (_this.options.size) {
+            classes.push(_this.options.size);
+          }
+          if (_this.options.disabled) {
+            classes.push('disabled');
+          }
+          if (_this.options.readonly) {
+            classes.push('readonly');
+          }
+          if (_this.options.indeterminate) {
+            classes.push('indeterminate');
+          }
+          if (_this.options.inverse) {
+            classes.push('inverse');
+          }
+          if (_this.$element.attr('id')) {
+            classes.push('id-' + _this.$element.attr('id'));
+          }
+          return classes.map(_this._getClass.bind(_this)).concat([_this.options.baseClass], _this._getClasses(_this.options.wrapperClass)).join(' ');
+        }
+      });
+      this.$container = $('<div>', { class: this._getClass('container') });
+      this.$on = $('<span>', {
+        html: this.options.onText,
+        class: this._getClass('handle-on') + ' ' + this._getClass(this.options.onColor)
+      });
+      this.$off = $('<span>', {
+        html: this.options.offText,
+        class: this._getClass('handle-off') + ' ' + this._getClass(this.options.offColor)
+      });
+      this.$label = $('<span>', {
+        html: this.options.labelText,
+        class: this._getClass('label')
+      });
+
+      this.$element.on('init.bootstrapSwitch', this.options.onInit.bind(this, element));
+      this.$element.on('switchChange.bootstrapSwitch', function () {
+        for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+          args[_key] = arguments[_key];
         }
-        this._init();
-        this._elementHandlers();
-        this._handleHandlers();
-        this._labelHandlers();
-        this._formHandler();
-        this._externalLabelHandler();
-        this.$element.trigger("init.bootstrapSwitch", this.options.state);
-      }
 
-      BootstrapSwitch.prototype._constructor = BootstrapSwitch;
+        if (_this.options.onSwitchChange.apply(element, args) === false) {
+          if (_this.$element.is(':radio')) {
+            $('[name="' + _this.$element.attr('name') + '"]').trigger('previousState.bootstrapSwitch', true);
+          } else {
+            _this.$element.trigger('previousState.bootstrapSwitch', true);
+          }
+        }
+      });
+
+      this.$container = this.$element.wrap(this.$container).parent();
+      this.$wrapper = this.$container.wrap(this.$wrapper).parent();
+      this.$element.before(this.options.inverse ? this.$off : this.$on).before(this.$label).before(this.options.inverse ? this.$on : this.$off);
 
-      BootstrapSwitch.prototype.setPrevOptions = function() {
-        return this.prevOptions = $.extend(true, {}, this.options);
-      };
+      if (this.options.indeterminate) {
+        this.$element.prop('indeterminate', true);
+      }
 
-      BootstrapSwitch.prototype.state = function(value, skip) {
-        if (typeof value === "undefined") {
+      this._init();
+      this._elementHandlers();
+      this._handleHandlers();
+      this._labelHandlers();
+      this._formHandler();
+      this._externalLabelHandler();
+      this.$element.trigger('init.bootstrapSwitch', this.options.state);
+    }
+
+    _createClass(BootstrapSwitch, [{
+      key: 'setPrevOptions',
+      value: function setPrevOptions() {
+        this.prevOptions = Object.assign({}, this.options);
+      }
+    }, {
+      key: 'state',
+      value: function state(value, skip) {
+        if (typeof value === 'undefined') {
           return this.options.state;
         }
-        if (this.options.disabled || this.options.readonly) {
+        if (this.options.disabled || this.options.readonly || this.options.state && !this.options.radioAllOff && this.$element.is(':radio')) {
           return this.$element;
         }
-        if (this.options.state && !this.options.radioAllOff && this.$element.is(":radio")) {
-          return this.$element;
-        }
-        if (this.$element.is(":radio")) {
-          $("[name='" + (this.$element.attr('name')) + "']").trigger("setPreviousOptions.bootstrapSwitch");
+        if (this.$element.is(':radio')) {
+          $('[name="' + this.$element.attr('name') + '"]').trigger('setPreviousOptions.bootstrapSwitch');
         } else {
-          this.$element.trigger("setPreviousOptions.bootstrapSwitch");
+          this.$element.trigger('setPreviousOptions.bootstrapSwitch');
         }
         if (this.options.indeterminate) {
           this.indeterminate(false);
         }
-        value = !!value;
-        this.$element.prop("checked", value).trigger("change.bootstrapSwitch", skip);
+        this.$element.prop('checked', Boolean(value)).trigger('change.bootstrapSwitch', skip);
         return this.$element;
-      };
-
-      BootstrapSwitch.prototype.toggleState = function(skip) {
+      }
+    }, {
+      key: 'toggleState',
+      value: function toggleState(skip) {
         if (this.options.disabled || this.options.readonly) {
           return this.$element;
         }
@@ -162,152 +122,156 @@
           this.indeterminate(false);
           return this.state(true);
         } else {
-          return this.$element.prop("checked", !this.options.state).trigger("change.bootstrapSwitch", skip);
+          return this.$element.prop('checked', !this.options.state).trigger('change.bootstrapSwitch', skip);
         }
-      };
-
-      BootstrapSwitch.prototype.size = function(value) {
-        if (typeof value === "undefined") {
+      }
+    }, {
+      key: 'size',
+      value: function size(value) {
+        if (typeof value === 'undefined') {
           return this.options.size;
         }
         if (this.options.size != null) {
-          this.$wrapper.removeClass(this.options.baseClass + "-" + this.options.size);
+          this.$wrapper.removeClass(this._getClass(this.options.size));
         }
         if (value) {
-          this.$wrapper.addClass(this.options.baseClass + "-" + value);
+          this.$wrapper.addClass(this._getClass(value));
         }
         this._width();
         this._containerPosition();
         this.options.size = value;
         return this.$element;
-      };
-
-      BootstrapSwitch.prototype.animate = function(value) {
-        if (typeof value === "undefined") {
+      }
+    }, {
+      key: 'animate',
+      value: function animate(value) {
+        if (typeof value === 'undefined') {
           return this.options.animate;
         }
-        value = !!value;
-        if (value === this.options.animate) {
+        if (this.options.animate === Boolean(value)) {
           return this.$element;
         }
         return this.toggleAnimate();
-      };
-
-      BootstrapSwitch.prototype.toggleAnimate = function() {
+      }
+    }, {
+      key: 'toggleAnimate',
+      value: function toggleAnimate() {
         this.options.animate = !this.options.animate;
-        this.$wrapper.toggleClass(this.options.baseClass + "-animate");
+        this.$wrapper.toggleClass(this._getClass('animate'));
         return this.$element;
-      };
-
-      BootstrapSwitch.prototype.disabled = function(value) {
-        if (typeof value === "undefined") {
+      }
+    }, {
+      key: 'disabled',
+      value: function disabled(value) {
+        if (typeof value === 'undefined') {
           return this.options.disabled;
         }
-        value = !!value;
-        if (value === this.options.disabled) {
+        if (this.options.disabled === Boolean(value)) {
           return this.$element;
         }
         return this.toggleDisabled();
-      };
-
-      BootstrapSwitch.prototype.toggleDisabled = function() {
+      }
+    }, {
+      key: 'toggleDisabled',
+      value: function toggleDisabled() {
         this.options.disabled = !this.options.disabled;
-        this.$element.prop("disabled", this.options.disabled);
-        this.$wrapper.toggleClass(this.options.baseClass + "-disabled");
+        this.$element.prop('disabled', this.options.disabled);
+        this.$wrapper.toggleClass(this._getClass('disabled'));
         return this.$element;
-      };
-
-      BootstrapSwitch.prototype.readonly = function(value) {
-        if (typeof value === "undefined") {
+      }
+    }, {
+      key: 'readonly',
+      value: function readonly(value) {
+        if (typeof value === 'undefined') {
           return this.options.readonly;
         }
-        value = !!value;
-        if (value === this.options.readonly) {
+        if (this.options.readonly === Boolean(value)) {
           return this.$element;
         }
         return this.toggleReadonly();
-      };
-
-      BootstrapSwitch.prototype.toggleReadonly = function() {
+      }
+    }, {
+      key: 'toggleReadonly',
+      value: function toggleReadonly() {
         this.options.readonly = !this.options.readonly;
-        this.$element.prop("readonly", this.options.readonly);
-        this.$wrapper.toggleClass(this.options.baseClass + "-readonly");
+        this.$element.prop('readonly', this.options.readonly);
+        this.$wrapper.toggleClass(this._getClass('readonly'));
         return this.$element;
-      };
-
-      BootstrapSwitch.prototype.indeterminate = function(value) {
-        if (typeof value === "undefined") {
+      }
+    }, {
+      key: 'indeterminate',
+      value: function indeterminate(value) {
+        if (typeof value === 'undefined') {
           return this.options.indeterminate;
         }
-        value = !!value;
-        if (value === this.options.indeterminate) {
+        if (this.options.indeterminate === Boolean(value)) {
           return this.$element;
         }
         return this.toggleIndeterminate();
-      };
-
-      BootstrapSwitch.prototype.toggleIndeterminate = function() {
+      }
+    }, {
+      key: 'toggleIndeterminate',
+      value: function toggleIndeterminate() {
         this.options.indeterminate = !this.options.indeterminate;
-        this.$element.prop("indeterminate", this.options.indeterminate);
-        this.$wrapper.toggleClass(this.options.baseClass + "-indeterminate");
+        this.$element.prop('indeterminate', this.options.indeterminate);
+        this.$wrapper.toggleClass(this._getClass('indeterminate'));
         this._containerPosition();
         return this.$element;
-      };
-
-      BootstrapSwitch.prototype.inverse = function(value) {
-        if (typeof value === "undefined") {
+      }
+    }, {
+      key: 'inverse',
+      value: function inverse(value) {
+        if (typeof value === 'undefined') {
           return this.options.inverse;
         }
-        value = !!value;
-        if (value === this.options.inverse) {
+        if (this.options.inverse === Boolean(value)) {
           return this.$element;
         }
         return this.toggleInverse();
-      };
-
-      BootstrapSwitch.prototype.toggleInverse = function() {
-        var $off, $on;
-        this.$wrapper.toggleClass(this.options.baseClass + "-inverse");
-        $on = this.$on.clone(true);
-        $off = this.$off.clone(true);
+      }
+    }, {
+      key: 'toggleInverse',
+      value: function toggleInverse() {
+        this.$wrapper.toggleClass(this._getClass('inverse'));
+        var $on = this.$on.clone(true);
+        var $off = this.$off.clone(true);
         this.$on.replaceWith($off);
         this.$off.replaceWith($on);
         this.$on = $off;
         this.$off = $on;
         this.options.inverse = !this.options.inverse;
         return this.$element;
-      };
-
-      BootstrapSwitch.prototype.onColor = function(value) {
-        var color;
-        color = this.options.onColor;
-        if (typeof value === "undefined") {
-          return color;
+      }
+    }, {
+      key: 'onColor',
+      value: function onColor(value) {
+        if (typeof value === 'undefined') {
+          return this.options.onColor;
         }
-        if (color != null) {
-          this.$on.removeClass(this.options.baseClass + "-" + color);
+        if (this.options.onColor) {
+          this.$on.removeClass(this._getClass(this.options.onColor));
         }
-        this.$on.addClass(this.options.baseClass + "-" + value);
+        this.$on.addClass(this._getClass(value));
         this.options.onColor = value;
         return this.$element;
-      };
-
-      BootstrapSwitch.prototype.offColor = function(value) {
-        var color;
-        color = this.options.offColor;
-        if (typeof value === "undefined") {
-          return color;
+      }
+    }, {
+      key: 'offColor',
+      value: function offColor(value) {
+        if (typeof value === 'undefined') {
+          return this.options.offColor;
         }
-        if (color != null) {
-          this.$off.removeClass(this.options.baseClass + "-" + color);
+        if (this.options.offColor) {
+          this.$off.removeClass(this._getClass(this.options.offColor));
         }
-        this.$off.addClass(this.options.baseClass + "-" + value);
+        this.$off.addClass(this._getClass(value));
         this.options.offColor = value;
         return this.$element;
-      };
-
-      BootstrapSwitch.prototype.onText = function(value) {
-        if (typeof value === "undefined") {
+      }
+    }, {
+      key: 'onText',
+      value: function onText(value) {
+        if (typeof value === 'undefined') {
           return this.options.onText;
         }
         this.$on.html(value);
@@ -315,10 +279,11 @@
         this._containerPosition();
         this.options.onText = value;
         return this.$element;
-      };
-
-      BootstrapSwitch.prototype.offText = function(value) {
-        if (typeof value === "undefined") {
+      }
+    }, {
+      key: 'offText',
+      value: function offText(value) {
+        if (typeof value === 'undefined') {
           return this.options.offText;
         }
         this.$off.html(value);
@@ -326,69 +291,76 @@
         this._containerPosition();
         this.options.offText = value;
         return this.$element;
-      };
-
-      BootstrapSwitch.prototype.labelText = function(value) {
-        if (typeof value === "undefined") {
+      }
+    }, {
+      key: 'labelText',
+      value: function labelText(value) {
+        if (typeof value === 'undefined') {
           return this.options.labelText;
         }
         this.$label.html(value);
         this._width();
         this.options.labelText = value;
         return this.$element;
-      };
-
-      BootstrapSwitch.prototype.handleWidth = function(value) {
-        if (typeof value === "undefined") {
+      }
+    }, {
+      key: 'handleWidth',
+      value: function handleWidth(value) {
+        if (typeof value === 'undefined') {
           return this.options.handleWidth;
         }
         this.options.handleWidth = value;
         this._width();
         this._containerPosition();
         return this.$element;
-      };
-
-      BootstrapSwitch.prototype.labelWidth = function(value) {
-        if (typeof value === "undefined") {
+      }
+    }, {
+      key: 'labelWidth',
+      value: function labelWidth(value) {
+        if (typeof value === 'undefined') {
           return this.options.labelWidth;
         }
         this.options.labelWidth = value;
         this._width();
         this._containerPosition();
         return this.$element;
-      };
-
-      BootstrapSwitch.prototype.baseClass = function(value) {
+      }
+    }, {
+      key: 'baseClass',
+      value: function baseClass(value) {
         return this.options.baseClass;
-      };
-
-      BootstrapSwitch.prototype.wrapperClass = function(value) {
-        if (typeof value === "undefined") {
+      }
+    }, {
+      key: 'wrapperClass',
+      value: function wrapperClass(value) {
+        if (typeof value === 'undefined') {
           return this.options.wrapperClass;
         }
         if (!value) {
           value = $.fn.bootstrapSwitch.defaults.wrapperClass;
         }
-        this.$wrapper.removeClass(this._getClasses(this.options.wrapperClass).join(" "));
-        this.$wrapper.addClass(this._getClasses(value).join(" "));
+        this.$wrapper.removeClass(this._getClasses(this.options.wrapperClass).join(' '));
+        this.$wrapper.addClass(this._getClasses(value).join(' '));
         this.options.wrapperClass = value;
         return this.$element;
-      };
-
-      BootstrapSwitch.prototype.radioAllOff = function(value) {
-        if (typeof value === "undefined") {
+      }
+    }, {
+      key: 'radioAllOff',
+      value: function radioAllOff(value) {
+        if (typeof value === 'undefined') {
           return this.options.radioAllOff;
         }
-        value = !!value;
-        if (value === this.options.radioAllOff) {
+        var val = Boolean(value);
+        if (this.options.radioAllOff === val) {
           return this.$element;
         }
-        this.options.radioAllOff = value;
+        this.options.radioAllOff = val;
         return this.$element;
-      };
-
-      BootstrapSwitch.prototype.onInit = function(value) {
-        if (typeof value === "undefined") {
+      }
+    }, {
+      key: 'onInit',
+      value: function onInit(value) {
+        if (typeof value === 'undefined') {
           return this.options.onInit;
         }
         if (!value) {
@@ -396,10 +368,11 @@
         }
         this.options.onInit = value;
         return this.$element;
-      };
-
-      BootstrapSwitch.prototype.onSwitchChange = function(value) {
-        if (typeof value === "undefined") {
+      }
+    }, {
+      key: 'onSwitchChange',
+      value: function onSwitchChange(value) {
+        if (typeof value === 'undefined') {
           return this.options.onSwitchChange;
         }
         if (!value) {
@@ -407,338 +380,345 @@
         }
         this.options.onSwitchChange = value;
         return this.$element;
-      };
-
-      BootstrapSwitch.prototype.destroy = function() {
-        var $form;
-        $form = this.$element.closest("form");
+      }
+    }, {
+      key: 'destroy',
+      value: function destroy() {
+        var $form = this.$element.closest('form');
         if ($form.length) {
-          $form.off("reset.bootstrapSwitch").removeData("bootstrap-switch");
+          $form.off('reset.bootstrapSwitch').removeData('bootstrap-switch');
         }
         this.$container.children().not(this.$element).remove();
-        this.$element.unwrap().unwrap().off(".bootstrapSwitch").removeData("bootstrap-switch");
+        this.$element.unwrap().unwrap().off('.bootstrapSwitch').removeData('bootstrap-switch');
         return this.$element;
-      };
-
-      BootstrapSwitch.prototype._width = function() {
-        var $handles, handleWidth;
-        $handles = this.$on.add(this.$off);
-        $handles.add(this.$label).css("width", "");
-        handleWidth = this.options.handleWidth === "auto" ? Math.round(Math.max(this.$on.width(), this.$off.width())) : this.options.handleWidth;
+      }
+    }, {
+      key: '_getElementOptions',
+      value: function _getElementOptions() {
+        return {
+          state: this.$element.is(':checked'),
+          size: this.$element.data('size'),
+          animate: this.$element.data('animate'),
+          disabled: this.$element.is(':disabled'),
+          readonly: this.$element.is('[readonly]'),
+          indeterminate: this.$element.data('indeterminate'),
+          inverse: this.$element.data('inverse'),
+          radioAllOff: this.$element.data('radio-all-off'),
+          onColor: this.$element.data('on-color'),
+          offColor: this.$element.data('off-color'),
+          onText: this.$element.data('on-text'),
+          offText: this.$element.data('off-text'),
+          labelText: this.$element.data('label-text'),
+          handleWidth: this.$element.data('handle-width'),
+          labelWidth: this.$element.data('label-width'),
+          baseClass: this.$element.data('base-class'),
+          wrapperClass: this.$element.data('wrapper-class')
+        };
+      }
+    }, {
+      key: '_width',
+      value: function _width() {
+        var _this2 = this;
+
+        var $handles = this.$on.add(this.$off).add(this.$label).css('width', '');
+        var handleWidth = void 0;
+        if (this.options.handleWidth === 'auto') {
+          handleWidth = Math.round(Math.max(this.$on.width(), this.$off.width()));
+        } else {
+          handleWidth = this.options.handleWidth;
+        }
         $handles.width(handleWidth);
-        this.$label.width((function(_this) {
-          return function(index, width) {
-            if (_this.options.labelWidth !== "auto") {
-              return _this.options.labelWidth;
-            }
-            if (width < handleWidth) {
-              return handleWidth;
-            } else {
-              return width;
-            }
-          };
-        })(this));
+        this.$label.width(function (index, width) {
+          if (_this2.options.labelWidth !== 'auto') {
+            return _this2.options.labelWidth;
+          }
+          if (width < handleWidth) {
+            return handleWidth;
+          }
+          return width;
+        });
         this._handleWidth = this.$on.outerWidth();
         this._labelWidth = this.$label.outerWidth();
-        this.$container.width((this._handleWidth * 2) + this._labelWidth);
+        this.$container.width(this._handleWidth * 2 + this._labelWidth);
         return this.$wrapper.width(this._handleWidth + this._labelWidth);
-      };
-
-      BootstrapSwitch.prototype._containerPosition = function(state, callback) {
-        if (state == null) {
-          state = this.options.state;
-        }
-        this.$container.css("margin-left", (function(_this) {
-          return function() {
-            var values;
-            values = [0, "-" + _this._handleWidth + "px"];
-            if (_this.options.indeterminate) {
-              return "-" + (_this._handleWidth / 2) + "px";
+      }
+    }, {
+      key: '_containerPosition',
+      value: function _containerPosition() {
+        var _this3 = this;
+
+        var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.options.state;
+        var callback = arguments[1];
+
+        this.$container.css('margin-left', function () {
+          var values = [0, '-' + _this3._handleWidth + 'px'];
+          if (_this3.options.indeterminate) {
+            return '-' + _this3._handleWidth / 2 + 'px';
+          }
+          if (state) {
+            if (_this3.options.inverse) {
+              return values[1];
+            } else {
+              return values[0];
             }
-            if (state) {
-              if (_this.options.inverse) {
-                return values[1];
-              } else {
-                return values[0];
-              }
+          } else {
+            if (_this3.options.inverse) {
+              return values[0];
             } else {
-              if (_this.options.inverse) {
-                return values[0];
-              } else {
-                return values[1];
-              }
+              return values[1];
             }
-          };
-        })(this));
-        if (!callback) {
+          }
+        });
+      }
+    }, {
+      key: '_init',
+      value: function _init() {
+        var _this4 = this;
+
+        var init = function init() {
+          _this4.setPrevOptions();
+          _this4._width();
+          _this4._containerPosition();
+          setTimeout(function () {
+            if (_this4.options.animate) {
+              return _this4.$wrapper.addClass(_this4._getClass('animate'));
+            }
+          }, 50);
+        };
+        if (this.$wrapper.is(':visible')) {
+          init();
           return;
         }
-        return setTimeout(function() {
-          return callback();
+        var initInterval = window.setInterval(function () {
+          if (_this4.$wrapper.is(':visible')) {
+            init();
+            return window.clearInterval(initInterval);
+          }
         }, 50);
-      };
-
-      BootstrapSwitch.prototype._init = function() {
-        var init, initInterval;
-        init = (function(_this) {
-          return function() {
-            _this.setPrevOptions();
-            _this._width();
-            return _this._containerPosition(null, function() {
-              if (_this.options.animate) {
-                return _this.$wrapper.addClass(_this.options.baseClass + "-animate");
-              }
-            });
-          };
-        })(this);
-        if (this.$wrapper.is(":visible")) {
-          return init();
-        }
-        return initInterval = window.setInterval((function(_this) {
-          return function() {
-            if (_this.$wrapper.is(":visible")) {
-              init();
-              return window.clearInterval(initInterval);
-            }
-          };
-        })(this), 50);
-      };
+      }
+    }, {
+      key: '_elementHandlers',
+      value: function _elementHandlers() {
+        var _this5 = this;
 
-      BootstrapSwitch.prototype._elementHandlers = function() {
         return this.$element.on({
-          "setPreviousOptions.bootstrapSwitch": (function(_this) {
-            return function(e) {
-              return _this.setPrevOptions();
-            };
-          })(this),
-          "previousState.bootstrapSwitch": (function(_this) {
-            return function(e) {
-              _this.options = _this.prevOptions;
-              if (_this.options.indeterminate) {
-                _this.$wrapper.addClass(_this.options.baseClass + "-indeterminate");
-              }
-              return _this.$element.prop("checked", _this.options.state).trigger("change.bootstrapSwitch", true);
-            };
-          })(this),
-          "change.bootstrapSwitch": (function(_this) {
-            return function(e, skip) {
-              var state;
-              e.preventDefault();
-              e.stopImmediatePropagation();
-              state = _this.$element.is(":checked");
-              _this._containerPosition(state);
-              if (state === _this.options.state) {
-                return;
-              }
-              _this.options.state = state;
-              _this.$wrapper.toggleClass(_this.options.baseClass + "-off").toggleClass(_this.options.baseClass + "-on");
-              if (!skip) {
-                if (_this.$element.is(":radio")) {
-                  $("[name='" + (_this.$element.attr('name')) + "']").not(_this.$element).prop("checked", false).trigger("change.bootstrapSwitch", true);
-                }
-                return _this.$element.trigger("switchChange.bootstrapSwitch", [state]);
-              }
-            };
-          })(this),
-          "focus.bootstrapSwitch": (function(_this) {
-            return function(e) {
-              e.preventDefault();
-              return _this.$wrapper.addClass(_this.options.baseClass + "-focused");
-            };
-          })(this),
-          "blur.bootstrapSwitch": (function(_this) {
-            return function(e) {
-              e.preventDefault();
-              return _this.$wrapper.removeClass(_this.options.baseClass + "-focused");
-            };
-          })(this),
-          "keydown.bootstrapSwitch": (function(_this) {
-            return function(e) {
-              if (!e.which || _this.options.disabled || _this.options.readonly) {
-                return;
-              }
-              switch (e.which) {
-                case 37:
-                  e.preventDefault();
-                  e.stopImmediatePropagation();
-                  return _this.state(false);
-                case 39:
-                  e.preventDefault();
-                  e.stopImmediatePropagation();
-                  return _this.state(true);
+          'setPreviousOptions.bootstrapSwitch': this.setPrevOptions.bind(this),
+
+          'previousState.bootstrapSwitch': function previousStateBootstrapSwitch() {
+            _this5.options = _this5.prevOptions;
+            if (_this5.options.indeterminate) {
+              _this5.$wrapper.addClass(_this5._getClass('indeterminate'));
+            }
+            _this5.$element.prop('checked', _this5.options.state).trigger('change.bootstrapSwitch', true);
+          },
+
+          'change.bootstrapSwitch': function changeBootstrapSwitch(event, skip) {
+            event.preventDefault();
+            event.stopImmediatePropagation();
+            var state = _this5.$element.is(':checked');
+            _this5._containerPosition(state);
+            if (state === _this5.options.state) {
+              return;
+            }
+            _this5.options.state = state;
+            _this5.$wrapper.toggleClass(_this5._getClass('off')).toggleClass(_this5._getClass('on'));
+            if (!skip) {
+              if (_this5.$element.is(':radio')) {
+                $('[name="' + _this5.$element.attr('name') + '"]').not(_this5.$element).prop('checked', false).trigger('change.bootstrapSwitch', true);
               }
-            };
-          })(this)
-        });
-      };
+              _this5.$element.trigger('switchChange.bootstrapSwitch', [state]);
+            }
+          },
+
+          'focus.bootstrapSwitch': function focusBootstrapSwitch(event) {
+            event.preventDefault();
+            _this5.$wrapper.addClass(_this5._getClass('focused'));
+          },
 
-      BootstrapSwitch.prototype._handleHandlers = function() {
-        this.$on.on("click.bootstrapSwitch", (function(_this) {
-          return function(event) {
+          'blur.bootstrapSwitch': function blurBootstrapSwitch(event) {
             event.preventDefault();
+            _this5.$wrapper.removeClass(_this5._getClass('focused'));
+          },
+
+          'keydown.bootstrapSwitch': function keydownBootstrapSwitch(event) {
+            if (!event.which || _this5.options.disabled || _this5.options.readonly) {
+              return;
+            }
+            if (event.which === 37 || event.which === 39) {
+              event.preventDefault();
+              event.stopImmediatePropagation();
+              _this5.state(event.which === 39);
+            }
+          }
+        });
+      }
+    }, {
+      key: '_handleHandlers',
+      value: function _handleHandlers() {
+        var _this6 = this;
+
+        this.$on.on('click.bootstrapSwitch', function (event) {
+          event.preventDefault();
+          event.stopPropagation();
+          _this6.state(false);
+          return _this6.$element.trigger('focus.bootstrapSwitch');
+        });
+        return this.$off.on('click.bootstrapSwitch', function (event) {
+          event.preventDefault();
+          event.stopPropagation();
+          _this6.state(true);
+          return _this6.$element.trigger('focus.bootstrapSwitch');
+        });
+      }
+    }, {
+      key: '_labelHandlers',
+      value: function _labelHandlers() {
+        var _this7 = this;
+
+        var handlers = {
+          click: function click(event) {
             event.stopPropagation();
-            _this.state(false);
-            return _this.$element.trigger("focus.bootstrapSwitch");
-          };
-        })(this));
-        return this.$off.on("click.bootstrapSwitch", (function(_this) {
-          return function(event) {
+          },
+
+
+          'mousedown.bootstrapSwitch touchstart.bootstrapSwitch': function mousedownBootstrapSwitchTouchstartBootstrapSwitch(event) {
+            if (_this7._dragStart || _this7.options.disabled || _this7.options.readonly) {
+              return;
+            }
             event.preventDefault();
             event.stopPropagation();
-            _this.state(true);
-            return _this.$element.trigger("focus.bootstrapSwitch");
-          };
-        })(this));
-      };
-
-      BootstrapSwitch.prototype._labelHandlers = function() {
-        return this.$label.on({
-          "click": function(e) {
-            return e.stopPropagation();
+            _this7._dragStart = (event.pageX || event.originalEvent.touches[0].pageX) - parseInt(_this7.$container.css('margin-left'), 10);
+            if (_this7.options.animate) {
+              _this7.$wrapper.removeClass(_this7._getClass('animate'));
+            }
+            _this7.$element.trigger('focus.bootstrapSwitch');
           },
-          "mousedown.bootstrapSwitch touchstart.bootstrapSwitch": (function(_this) {
-            return function(e) {
-              if (_this._dragStart || _this.options.disabled || _this.options.readonly) {
-                return;
-              }
-              e.preventDefault();
-              e.stopPropagation();
-              _this._dragStart = (e.pageX || e.originalEvent.touches[0].pageX) - parseInt(_this.$container.css("margin-left"), 10);
-              if (_this.options.animate) {
-                _this.$wrapper.removeClass(_this.options.baseClass + "-animate");
-              }
-              return _this.$element.trigger("focus.bootstrapSwitch");
-            };
-          })(this),
-          "mousemove.bootstrapSwitch touchmove.bootstrapSwitch": (function(_this) {
-            return function(e) {
-              var difference;
-              if (_this._dragStart == null) {
-                return;
-              }
-              e.preventDefault();
-              difference = (e.pageX || e.originalEvent.touches[0].pageX) - _this._dragStart;
-              if (difference < -_this._handleWidth || difference > 0) {
-                return;
-              }
-              _this._dragEnd = difference;
-              return _this.$container.css("margin-left", _this._dragEnd + "px");
-            };
-          })(this),
-          "mouseup.bootstrapSwitch touchend.bootstrapSwitch": (function(_this) {
-            return function(e) {
-              var state;
-              if (!_this._dragStart) {
-                return;
-              }
-              e.preventDefault();
-              if (_this.options.animate) {
-                _this.$wrapper.addClass(_this.options.baseClass + "-animate");
-              }
-              if (_this._dragEnd) {
-                state = _this._dragEnd > -(_this._handleWidth / 2);
-                _this._dragEnd = false;
-                _this.state(_this.options.inverse ? !state : state);
-              } else {
-                _this.state(!_this.options.state);
-              }
-              return _this._dragStart = false;
-            };
-          })(this),
-          "mouseleave.bootstrapSwitch": (function(_this) {
-            return function(e) {
-              return _this.$label.trigger("mouseup.bootstrapSwitch");
-            };
-          })(this)
-        });
-      };
 
-      BootstrapSwitch.prototype._externalLabelHandler = function() {
-        var $externalLabel;
-        $externalLabel = this.$element.closest("label");
-        return $externalLabel.on("click", (function(_this) {
-          return function(event) {
+          'mousemove.bootstrapSwitch touchmove.bootstrapSwitch': function mousemoveBootstrapSwitchTouchmoveBootstrapSwitch(event) {
+            if (_this7._dragStart == null) {
+              return;
+            }
+            var difference = (event.pageX || event.originalEvent.touches[0].pageX) - _this7._dragStart;
             event.preventDefault();
-            event.stopImmediatePropagation();
-            if (event.target === $externalLabel[0]) {
-              return _this.toggleState();
+            if (difference < -_this7._handleWidth || difference > 0) {
+              return;
             }
-          };
-        })(this));
-      };
-
-      BootstrapSwitch.prototype._formHandler = function() {
-        var $form;
-        $form = this.$element.closest("form");
-        if ($form.data("bootstrap-switch")) {
+            _this7._dragEnd = difference;
+            _this7.$container.css('margin-left', _this7._dragEnd + 'px');
+          },
+
+          'mouseup.bootstrapSwitch touchend.bootstrapSwitch': function mouseupBootstrapSwitchTouchendBootstrapSwitch(event) {
+            if (!_this7._dragStart) {
+              return;
+            }
+            event.preventDefault();
+            if (_this7.options.animate) {
+              _this7.$wrapper.addClass(_this7._getClass('animate'));
+            }
+            if (_this7._dragEnd) {
+              var state = _this7._dragEnd > -(_this7._handleWidth / 2);
+              _this7._dragEnd = false;
+              _this7.state(_this7.options.inverse ? !state : state);
+            } else {
+              _this7.state(!_this7.options.state);
+            }
+            _this7._dragStart = false;
+          },
+
+          'mouseleave.bootstrapSwitch': function mouseleaveBootstrapSwitch() {
+            _this7.$label.trigger('mouseup.bootstrapSwitch');
+          }
+        };
+        this.$label.on(handlers);
+      }
+    }, {
+      key: '_externalLabelHandler',
+      value: function _externalLabelHandler() {
+        var _this8 = this;
+
+        var $externalLabel = this.$element.closest('label');
+        $externalLabel.on('click', function (event) {
+          event.preventDefault();
+          event.stopImmediatePropagation();
+          if (event.target === $externalLabel[0]) {
+            _this8.toggleState();
+          }
+        });
+      }
+    }, {
+      key: '_formHandler',
+      value: function _formHandler() {
+        var $form = this.$element.closest('form');
+        if ($form.data('bootstrap-switch')) {
           return;
         }
-        return $form.on("reset.bootstrapSwitch", function() {
-          return window.setTimeout(function() {
-            return $form.find("input").filter(function() {
-              return $(this).data("bootstrap-switch");
-            }).each(function() {
-              return $(this).bootstrapSwitch("state", this.checked);
+        $form.on('reset.bootstrapSwitch', function () {
+          window.setTimeout(function () {
+            $form.find('input').filter(function () {
+              return $(this).data('bootstrap-switch');
+            }).each(function () {
+              return $(this).bootstrapSwitch('state', this.checked);
             });
           }, 1);
-        }).data("bootstrap-switch", true);
-      };
-
-      BootstrapSwitch.prototype._getClasses = function(classes) {
-        var c, cls, i, len;
+        }).data('bootstrap-switch', true);
+      }
+    }, {
+      key: '_getClass',
+      value: function _getClass(name) {
+        return this.options.baseClass + '-' + name;
+      }
+    }, {
+      key: '_getClasses',
+      value: function _getClasses(classes) {
         if (!$.isArray(classes)) {
-          return [this.options.baseClass + "-" + classes];
-        }
-        cls = [];
-        for (i = 0, len = classes.length; i < len; i++) {
-          c = classes[i];
-          cls.push(this.options.baseClass + "-" + c);
-        }
-        return cls;
-      };
-
-      return BootstrapSwitch;
-
-    })();
-    $.fn.bootstrapSwitch = function() {
-      var args, option, ret;
-      option = arguments[0], args = 2 <= arguments.length ? slice.call(arguments, 1) : [];
-      ret = this;
-      this.each(function() {
-        var $this, data;
-        $this = $(this);
-        data = $this.data("bootstrap-switch");
-        if (!data) {
-          $this.data("bootstrap-switch", data = new BootstrapSwitch(this, option));
+          return [this._getClass(classes)];
         }
-        if (typeof option === "string") {
-          return ret = data[option].apply(data, args);
-        }
-      });
-      return ret;
-    };
-    $.fn.bootstrapSwitch.Constructor = BootstrapSwitch;
-    return $.fn.bootstrapSwitch.defaults = {
-      state: true,
-      size: null,
-      animate: true,
-      disabled: false,
-      readonly: false,
-      indeterminate: false,
-      inverse: false,
-      radioAllOff: false,
-      onColor: "primary",
-      offColor: "default",
-      onText: "ON",
-      offText: "OFF",
-      labelText: "&nbsp;",
-      handleWidth: "auto",
-      labelWidth: "auto",
-      baseClass: "bootstrap-switch",
-      wrapperClass: "wrapper",
-      onInit: function() {},
-      onSwitchChange: function() {}
-    };
-  })(window.jQuery, window);
-
-}).call(this);
+        return classes.map(this._getClass.bind(this));
+      }
+    }]);
+
+    return BootstrapSwitch;
+  }();
+
+  $.fn.bootstrapSwitch = function (option) {
+    for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
+      args[_key2 - 1] = arguments[_key2];
+    }
+
+    var ret = this;
+    this.each(function () {
+      var $this = $(this);
+      var data = $this.data('bootstrap-switch');
+      if (!data) {
+        data = new BootstrapSwitch(this, option);
+        $this.data('bootstrap-switch', data);
+      }
+      if (typeof option === 'string') {
+        ret = data[option].apply(data, args);
+      }
+    });
+    return ret;
+  };
+  $.fn.bootstrapSwitch.Constructor = BootstrapSwitch;
+  $.fn.bootstrapSwitch.defaults = {
+    state: true,
+    size: null,
+    animate: true,
+    disabled: false,
+    readonly: false,
+    indeterminate: false,
+    inverse: false,
+    radioAllOff: false,
+    onColor: 'primary',
+    offColor: 'default',
+    onText: 'ON',
+    offText: 'OFF',
+    labelText: '&nbsp',
+    handleWidth: 'auto',
+    labelWidth: 'auto',
+    baseClass: 'bootstrap-switch',
+    wrapperClass: 'wrapper',
+    onInit: function onInit() {},
+    onSwitchChange: function onSwitchChange() {}
+  };
+})(window.jQuery, window);

Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/js/bootstrap-switch.min.js


+ 0 - 25
gulpfile.coffee

@@ -53,31 +53,6 @@ dest =
     fonts: "#{paths.docs}/fonts"
     markup: paths.base
 
-banner = """
-  /* ========================================================================
-   * <%= pkg.name %> - v<%= pkg.version %>
-   * <%= pkg.homepage %>
-   * ========================================================================
-   * Copyright 2012-2013 <%= pkg.author.name %>
-   *
-   * ========================================================================
-   * Licensed under the Apache License, Version 2.0 (the "License");
-   * you may not use this file except in compliance with the License.
-   * You may obtain a copy of the License at
-   *
-   *     http://www.apache.org/licenses/LICENSE-2.0
-   *
-   * Unless required by applicable law or agreed to in writing, software
-   * distributed under the License is distributed on an "AS IS" BASIS,
-   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   * See the License for the specific language governing permissions and
-   * limitations under the License.
-   * ========================================================================
-   */
-
-
-  """
-
 
 # build
 gulp.task 'js', ->

+ 2 - 2
karma.conf.js

@@ -40,7 +40,7 @@ module.exports = function (config) {
     logLevel: config.LOG_INFO,
 
     // enable / disable watching file and executing tests whenever any file changes
-    autoWatch: true,
+    autoWatch: false,
 
     // start these browsers
     // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
@@ -48,7 +48,7 @@ module.exports = function (config) {
 
     // Continuous Integration mode
     // if true, Karma captures browsers, runs the tests and exits
-    singleRun: false,
+    singleRun: true,
 
     // Concurrency level
     // how many browser should be started simultaneous


+ 18 - 26
package.json

@@ -9,21 +9,10 @@
     "js"
   ],
   "homepage": "http://www.bootstrap-switch.org",
-  "author": {
-    "name": "Mattia Larentis",
-    "email": "[email protected]",
-    "url": "http://larentis.eu"
-  },
+  "author": "Mattia Larentis <[email protected]> (http://larentis.eu)",
   "contributors": [
-    {
-      "name": "Emanuele Marchi",
-      "email": "[email protected]",
-      "url": "http://lostcrew.it"
-    },
-    {
-      "name": "Peter Stein",
-      "url": "http://www.bdmdesign.org"
-    }
+    "Emanuele Marchi <[email protected]> (http://lostcrew.it)",
+    "Peter Stein (http://www.bdmdesign.org)"
   ],
   "main": "dist/js/bootstrap-switch.js",
   "peerDependencies": {
@@ -42,6 +31,7 @@
     "babel-polyfill": "^6.22.0",
     "babel-preset-babili": "^0.0.10",
     "babel-preset-env": "^1.1.8",
+    "banner-cli": "^0.10.1",
     "bootstrap": "^3.3.7",
     "jasmine": "^2.5.3",
     "jasmine-core": "^2.5.2",
@@ -58,22 +48,24 @@
     "standard": "^8.6.0"
   },
   "scripts": {
-    "js:dir": "mkdir -p dist/js",
     "js:lint": "standard src/js/**/*.js",
     "js:test": "mkdir -p test && babel -d test src/js && karma start karma.conf.js",
-    "js:base": "babel -o dist/js/bootstrap-switch.js src/js/bootstrap-switch.js",
-    "js:min": "NODE_ENV=production babel -o dist/js/bootstrap-switch.min.js src/js/bootstrap-switch.js",
-    "js": "npm-run-all js:dir js:lint -p js:base js:min -s js:test",
-    "css:dir": "mkdir -p dist/css",
-    "css:bs2:base": "lessc src/less/bootstrap2/build.less dist/css/bootstrap2/bootstrap-switch.css",
-    "css:bs2:min": "lessc --clean-css='--advanced' src/less/bootstrap2/build.less dist/css/bootstrap2/bootstrap-switch.min.css",
-    "css:bs3:base": "lessc src/less/bootstrap3/build.less dist/css/bootstrap3/bootstrap-switch.css",
-    "css:bs3:min": "lessc --clean-css='--advanced' src/less/bootstrap3/build.less dist/css/bootstrap3/bootstrap-switch.min.css",
-    "css": "run-p css:bs2:* css:bs3:*",
+    "js:build:dir": "mkdir -p dist/js",
+    "js:build:base": "babel -o dist/js/bootstrap-switch.js src/js/bootstrap-switch.js",
+    "js:build:min": "NODE_ENV=production babel -o dist/js/bootstrap-switch.min.js src/js/bootstrap-switch.js",
+    "js:build:banner": "banner-cli dist/js/*.js",
+    "js:build": "npm-run-all js:build:dir -p js:build:base js:build:min -s js:build:banner",
+    "js": "run-s js:lint js:test js:build",
+    "css:build:base": "lessc src/less/bootstrap2/build.less dist/css/bootstrap2/bootstrap-switch.css && lessc src/less/bootstrap3/build.less dist/css/bootstrap3/bootstrap-switch.css",
+    "css:build:min": "lessc --clean-css='--advanced' src/less/bootstrap2/build.less dist/css/bootstrap2/bootstrap-switch.min.css && lessc --clean-css='--advanced' src/less/bootstrap3/build.less dist/css/bootstrap3/bootstrap-switch.min.css",
+    "css:build": "run-p css:build:*",
+    "css": "run-s css:build",
     "clean": "rm -rf dist",
-    "build": "run-p js css",
+    "lint": "run-p js:lint",
+    "test": "run-p js:test",
+    "build": "run-p *:build",
     "docs": "",
-    "start": "run-s clean build docs"
+    "start": "run-s clean lint test build docs"
   },
   "npmName": "bootstrap-switch",
   "npmFileMap": [

+ 0 - 553
src/coffee/bootstrap-switch.coffee

@@ -1,553 +0,0 @@
-do ($ = window.jQuery, window) ->
-  "use strict"
-
-  class BootstrapSwitch
-    constructor: (element, options = {}) ->
-      @$element = $ element
-      @options = $.extend {}, $.fn.bootstrapSwitch.defaults,
-        state: @$element.is ":checked"
-        size: @$element.data "size"
-        animate: @$element.data "animate"
-        disabled: @$element.is ":disabled"
-        readonly: @$element.is "[readonly]"
-        indeterminate: @$element.data "indeterminate"
-        inverse: @$element.data "inverse"
-        radioAllOff: @$element.data "radio-all-off"
-        onColor: @$element.data "on-color"
-        offColor: @$element.data "off-color"
-        onText: @$element.data "on-text"
-        offText: @$element.data "off-text"
-        labelText: @$element.data "label-text"
-        handleWidth: @$element.data "handle-width"
-        labelWidth: @$element.data "label-width"
-        baseClass: @$element.data "base-class"
-        wrapperClass: @$element.data "wrapper-class"
-      , options
-      @prevOptions = {}
-      @$wrapper = $ "<div>",
-        class: do =>
-          classes = ["#{@options.baseClass}"].concat @_getClasses @options.wrapperClass
-
-          classes.push if @options.state then "#{@options.baseClass}-on" else "#{@options.baseClass}-off"
-          classes.push "#{@options.baseClass}-#{@options.size}" if @options.size?
-          classes.push "#{@options.baseClass}-disabled" if @options.disabled
-          classes.push "#{@options.baseClass}-readonly" if @options.readonly
-          classes.push "#{@options.baseClass}-indeterminate" if @options.indeterminate
-          classes.push "#{@options.baseClass}-inverse" if @options.inverse
-          classes.push "#{@options.baseClass}-id-#{@$element.attr("id")}" if @$element.attr "id"
-          classes.join " "
-      @$container = $ "<div>",
-        class: "#{@options.baseClass}-container"
-      @$on = $ "<span>",
-        html: @options.onText,
-        class: "#{@options.baseClass}-handle-on #{@options.baseClass}-#{@options.onColor}"
-      @$off = $ "<span>",
-        html: @options.offText,
-        class: "#{@options.baseClass}-handle-off #{@options.baseClass}-#{@options.offColor}"
-      @$label = $ "<span>",
-        html: @options.labelText
-        class: "#{@options.baseClass}-label"
-
-      # set up events
-      @$element.on "init.bootstrapSwitch", => @options.onInit.apply element, arguments
-      @$element.on "switchChange.bootstrapSwitch", (e) =>
-        if false == @options.onSwitchChange.apply element, arguments
-          if @$element.is ":radio"
-            $("[name='#{@$element.attr('name')}']")
-            .trigger "previousState.bootstrapSwitch", true
-          else
-            @$element.trigger "previousState.bootstrapSwitch", true
-
-      # reassign elements after dom modification
-      @$container = @$element.wrap(@$container).parent()
-      @$wrapper = @$container.wrap(@$wrapper).parent()
-
-      # insert handles and label and trigger event
-      @$element
-      .before(if @options.inverse then @$off else @$on)
-      .before(@$label)
-      .before(if @options.inverse then @$on else @$off)
-
-      # indeterminate state
-      @$element.prop "indeterminate", true  if @options.indeterminate
-
-      # normalize handles width and set container position
-      @_init()
-
-      # initialise handlers
-      @_elementHandlers()
-      @_handleHandlers()
-      @_labelHandlers()
-      @_formHandler()
-      @_externalLabelHandler()
-
-      @$element.trigger "init.bootstrapSwitch", @options.state
-
-    _constructor: BootstrapSwitch
-
-    setPrevOptions: ->
-      @prevOptions = $.extend(true, {}, @options)
-
-    state: (value, skip) ->
-      return @options.state  if typeof value is "undefined"
-      return @$element  if @options.disabled or @options.readonly
-      return @$element  if @options.state and not @options.radioAllOff and @$element.is ":radio"
-
-      if @$element.is ":radio"
-        $("[name='#{@$element.attr('name')}']")
-        .trigger "setPreviousOptions.bootstrapSwitch"
-      else
-        @$element.trigger "setPreviousOptions.bootstrapSwitch"
-
-      # remove indeterminate
-      @indeterminate false  if @options.indeterminate
-      value = not not value
-      @$element.prop("checked", value).trigger "change.bootstrapSwitch", skip
-      @$element
-
-    toggleState: (skip) ->
-      return @$element  if @options.disabled or @options.readonly
-
-      if @options.indeterminate
-        @indeterminate false
-        @state true
-      else
-        @$element.prop("checked", not @options.state).trigger "change.bootstrapSwitch", skip
-
-    size: (value) ->
-      return @options.size  if typeof value is "undefined"
-
-      @$wrapper.removeClass "#{@options.baseClass}-#{@options.size}" if @options.size?
-      @$wrapper.addClass "#{@options.baseClass}-#{value}" if value
-      @_width()
-      @_containerPosition()
-      @options.size = value
-      @$element
-
-    animate: (value) ->
-      return @options.animate  if typeof value is "undefined"
-
-      value = not not value
-      return @$element  if value is @options.animate
-
-      @toggleAnimate()
-
-    toggleAnimate: ->
-      @options.animate = not @options.animate
-
-      @$wrapper.toggleClass "#{@options.baseClass}-animate"
-      @$element
-
-    disabled: (value) ->
-      return @options.disabled  if typeof value is "undefined"
-
-      value = not not value
-      return @$element  if value is @options.disabled
-
-      @toggleDisabled()
-
-    toggleDisabled: ->
-      @options.disabled = not @options.disabled
-
-      @$element.prop "disabled", @options.disabled
-      @$wrapper.toggleClass "#{@options.baseClass}-disabled"
-      @$element
-
-    readonly: (value) ->
-      return @options.readonly  if typeof value is "undefined"
-
-      value = not not value
-      return @$element  if value is @options.readonly
-
-      @toggleReadonly()
-
-    toggleReadonly: ->
-      @options.readonly = not @options.readonly
-
-      @$element.prop "readonly", @options.readonly
-      @$wrapper.toggleClass "#{@options.baseClass}-readonly"
-      @$element
-
-    indeterminate: (value) ->
-      return @options.indeterminate  if typeof value is "undefined"
-
-      value = not not value
-      return @$element  if value is @options.indeterminate
-
-      @toggleIndeterminate()
-
-    toggleIndeterminate: ->
-      @options.indeterminate = not @options.indeterminate
-
-      @$element.prop "indeterminate", @options.indeterminate
-      @$wrapper.toggleClass "#{@options.baseClass}-indeterminate"
-      @_containerPosition()
-      @$element
-
-    inverse: (value) ->
-      return @options.inverse  if typeof value is "undefined"
-
-      value = not not value
-      return @$element  if value is @options.inverse
-
-      @toggleInverse()
-
-    toggleInverse: ->
-      @$wrapper.toggleClass "#{@options.baseClass}-inverse"
-      $on = @$on.clone true
-      $off = @$off.clone true
-      @$on.replaceWith $off
-      @$off.replaceWith $on
-      @$on = $off
-      @$off = $on
-      @options.inverse = not @options.inverse
-      @$element
-
-    onColor: (value) ->
-      color = @options.onColor
-
-      return color  if typeof value is "undefined"
-
-      @$on.removeClass "#{@options.baseClass}-#{color}" if color?
-      @$on.addClass "#{@options.baseClass}-#{value}"
-      @options.onColor = value
-      @$element
-
-    offColor: (value) ->
-      color = @options.offColor
-
-      return color  if typeof value is "undefined"
-
-      @$off.removeClass "#{@options.baseClass}-#{color}" if color?
-      @$off.addClass "#{@options.baseClass}-#{value}"
-      @options.offColor = value
-      @$element
-
-    onText: (value) ->
-      return @options.onText  if typeof value is "undefined"
-
-      @$on.html value
-      @_width()
-      @_containerPosition()
-      @options.onText = value
-      @$element
-
-    offText: (value) ->
-      return @options.offText  if typeof value is "undefined"
-
-      @$off.html value
-      @_width()
-      @_containerPosition()
-      @options.offText = value
-      @$element
-
-    labelText: (value) ->
-      return @options.labelText  if typeof value is "undefined"
-
-      @$label.html value
-      @_width()
-      @options.labelText = value
-      @$element
-
-    handleWidth: (value) ->
-      return @options.handleWidth  if typeof value is "undefined"
-
-      @options.handleWidth = value
-      @_width()
-      @_containerPosition()
-      @$element
-
-    labelWidth: (value) ->
-      return @options.labelWidth  if typeof value is "undefined"
-
-      @options.labelWidth = value
-      @_width()
-      @_containerPosition()
-      @$element
-
-    baseClass: (value) ->
-      @options.baseClass
-
-    wrapperClass: (value) ->
-      return @options.wrapperClass  if typeof value is "undefined"
-
-      value = $.fn.bootstrapSwitch.defaults.wrapperClass unless value
-
-      @$wrapper.removeClass @_getClasses(@options.wrapperClass).join " "
-      @$wrapper.addClass @_getClasses(value).join " "
-      @options.wrapperClass = value
-      @$element
-
-    radioAllOff: (value) ->
-      return @options.radioAllOff  if typeof value is "undefined"
-
-      value = not not value
-      return @$element  if value is @options.radioAllOff
-
-      @options.radioAllOff = value
-      @$element
-
-    onInit: (value) ->
-      return @options.onInit  if typeof value is "undefined"
-
-      value = $.fn.bootstrapSwitch.defaults.onInit unless value
-
-      @options.onInit = value
-      @$element
-
-    onSwitchChange: (value) ->
-      return @options.onSwitchChange  if typeof value is "undefined"
-
-      value = $.fn.bootstrapSwitch.defaults.onSwitchChange unless value
-
-      @options.onSwitchChange = value
-      @$element
-
-    destroy: ->
-      $form = @$element.closest "form"
-
-      $form.off("reset.bootstrapSwitch").removeData "bootstrap-switch" if $form.length
-      @$container.children().not(@$element).remove()
-      @$element.unwrap().unwrap().off(".bootstrapSwitch").removeData "bootstrap-switch"
-      @$element
-
-    _width: ->
-      $handles = @$on.add(@$off)
-
-      # remove width from inline style
-      $handles.add(@$label).css("width", "")
-
-      # save handleWidth for further label width calculation check
-      handleWidth = if @options.handleWidth is "auto"
-      then Math.round Math.max @$on.width(), @$off.width()
-      else @options.handleWidth
-
-      # set handles width
-      $handles.width handleWidth
-
-      # set label width
-      @$label.width (index, width) =>
-        return @options.labelWidth  if @options.labelWidth isnt "auto"
-
-        if width < handleWidth then handleWidth else width
-
-      # get handle and label widths
-      @_handleWidth = @$on.outerWidth()
-      @_labelWidth = @$label.outerWidth()
-
-      # set container and wrapper widths
-      @$container.width (@_handleWidth * 2) + @_labelWidth
-      @$wrapper.width @_handleWidth + @_labelWidth
-
-    _containerPosition: (state = @options.state, callback) ->
-      @$container
-      .css "margin-left", =>
-        values = [0, "-#{@_handleWidth}px"]
-
-        return "-#{@_handleWidth / 2}px"  if @options.indeterminate
-
-        if state
-          return  if @options.inverse then values[1] else values[0]
-        else
-          return  if @options.inverse then values[0] else values[1]
-
-      return  unless callback
-
-      setTimeout ->
-        callback()
-      , 50
-
-    _init: ->
-      init = =>
-        @setPrevOptions()
-        @_width()
-        @_containerPosition null, =>
-          @$wrapper.addClass "#{@options.baseClass}-animate"  if @options.animate
-
-      return init()  if @$wrapper.is ":visible"
-
-      initInterval = window.setInterval =>
-        if @$wrapper.is ":visible"
-          init()
-          window.clearInterval initInterval
-      , 50
-
-    _elementHandlers: ->
-      @$element.on
-        "setPreviousOptions.bootstrapSwitch": (e) =>
-          @setPrevOptions()
-
-        "previousState.bootstrapSwitch": (e) =>
-          @options = @prevOptions
-
-          @$wrapper.addClass "#{@options.baseClass}-indeterminate"  if @options.indeterminate
-          @$element.prop("checked", @options.state).trigger "change.bootstrapSwitch", true
-
-        "change.bootstrapSwitch": (e, skip) =>
-          e.preventDefault()
-          e.stopImmediatePropagation()
-
-          state = @$element.is ":checked"
-
-          @_containerPosition state
-          return  if state is @options.state
-
-          @options.state = state
-          @$wrapper.toggleClass("#{@options.baseClass}-off").toggleClass "#{@options.baseClass}-on"
-
-          unless skip
-            if @$element.is ":radio"
-              $("[name='#{@$element.attr('name')}']")
-              .not(@$element)
-              .prop("checked", false)
-              .trigger "change.bootstrapSwitch", true
-
-            @$element.trigger "switchChange.bootstrapSwitch", [state]
-
-        "focus.bootstrapSwitch": (e) =>
-          e.preventDefault()
-          @$wrapper.addClass "#{@options.baseClass}-focused"
-
-        "blur.bootstrapSwitch": (e) =>
-          e.preventDefault()
-          @$wrapper.removeClass "#{@options.baseClass}-focused"
-
-        "keydown.bootstrapSwitch": (e) =>
-          return  if not e.which or @options.disabled or @options.readonly
-
-          switch e.which
-            when 37
-              e.preventDefault()
-              e.stopImmediatePropagation()
-
-              @state false
-            when 39
-              e.preventDefault()
-              e.stopImmediatePropagation()
-
-              @state true
-
-    _handleHandlers: ->
-      @$on.on "click.bootstrapSwitch", (event) =>
-        event.preventDefault()
-        event.stopPropagation()
-
-        @state false
-        @$element.trigger "focus.bootstrapSwitch"
-
-      @$off.on "click.bootstrapSwitch", (event) =>
-        event.preventDefault()
-        event.stopPropagation()
-
-        @state true
-        @$element.trigger "focus.bootstrapSwitch"
-
-    _labelHandlers: ->
-      @$label.on
-        "click": (e) ->
-          e.stopPropagation()
-
-        "mousedown.bootstrapSwitch touchstart.bootstrapSwitch": (e) =>
-          return  if @_dragStart or @options.disabled or @options.readonly
-
-          e.preventDefault()
-          e.stopPropagation()
-
-          @_dragStart = (e.pageX or e.originalEvent.touches[0].pageX) - parseInt @$container.css("margin-left"), 10
-          @$wrapper.removeClass "#{@options.baseClass}-animate"  if @options.animate
-          @$element.trigger "focus.bootstrapSwitch"
-
-        "mousemove.bootstrapSwitch touchmove.bootstrapSwitch": (e) =>
-          return  unless @_dragStart?
-
-          e.preventDefault()
-
-          difference = (e.pageX or e.originalEvent.touches[0].pageX) - @_dragStart
-          return  if difference < -@_handleWidth or difference > 0
-
-          @_dragEnd = difference
-          @$container.css "margin-left", "#{@_dragEnd}px"
-
-        "mouseup.bootstrapSwitch touchend.bootstrapSwitch": (e) =>
-          return  unless @_dragStart
-
-          e.preventDefault()
-
-          @$wrapper.addClass "#{@options.baseClass}-animate"  if @options.animate
-          if @_dragEnd
-            state = @_dragEnd > -(@_handleWidth / 2)
-
-            @_dragEnd = false
-            @state if @options.inverse then not state else state
-          else
-            @state not @options.state
-
-          @_dragStart = false
-
-        "mouseleave.bootstrapSwitch": (e) =>
-          @$label.trigger "mouseup.bootstrapSwitch"
-
-    _externalLabelHandler: ->
-      $externalLabel = @$element.closest("label")
-
-      $externalLabel.on "click", (event) =>
-        event.preventDefault()
-        event.stopImmediatePropagation()
-
-        # reimplement toggle state on external label only if it is not the target
-        @toggleState()  if event.target is $externalLabel[0]
-
-    _formHandler: ->
-      $form = @$element.closest "form"
-
-      return  if $form.data "bootstrap-switch"
-
-      $form
-      .on "reset.bootstrapSwitch", ->
-        window.setTimeout ->
-          $form
-          .find("input")
-          .filter( -> $(@).data "bootstrap-switch")
-          .each -> $(@).bootstrapSwitch "state", @checked
-        , 1
-      .data "bootstrap-switch", true
-
-    _getClasses: (classes) ->
-      return ["#{@options.baseClass}-#{classes}"]  unless $.isArray classes
-
-      cls = []
-      for c in classes
-        cls.push "#{@options.baseClass}-#{c}"
-      cls
-
-  $.fn.bootstrapSwitch = (option, args...) ->
-    ret = @
-    @each ->
-      $this = $ @
-      data = $this.data "bootstrap-switch"
-
-      $this.data "bootstrap-switch", data = new BootstrapSwitch @, option  unless data
-      ret = data[option].apply data, args if typeof option is "string"
-    ret
-
-  $.fn.bootstrapSwitch.Constructor = BootstrapSwitch
-  $.fn.bootstrapSwitch.defaults =
-    state: true
-    size: null
-    animate: true
-    disabled: false
-    readonly: false
-    indeterminate: false
-    inverse: false
-    radioAllOff: false
-    onColor: "primary"
-    offColor: "default"
-    onText: "ON"
-    offText: "OFF"
-    labelText: "&nbsp;"
-    handleWidth: "auto"
-    labelWidth: "auto"
-    baseClass: "bootstrap-switch"
-    wrapperClass: "wrapper"
-    onInit: ->
-    onSwitchChange: ->

+ 0 - 105
src/coffee/bootstrap-switch.tests.coffee

@@ -1,105 +0,0 @@
-describe "Bootstrap Switch:", ->
-
-  beforeEach ->
-    $.support.transition = false
-    $.fx.off = true
-
-  afterEach ->
-    $(".#{$.fn.bootstrapSwitch.defaults.baseClass}").bootstrapSwitch "destroy"
-
-  createCheckbox = ->
-    $("<input>",
-      type: "checkbox"
-      class: "switch"
-    ).appendTo "body"
-
-  createRadio = ->
-    $("<input>",
-      type: "radio"
-      name: "name"
-      class: "switch"
-    ).appendTo "body"
-
-  getOptions = ($element) ->
-    $element.data("bootstrap-switch").options
-
-  it "should set the default options as element options, except state", ->
-    $switch = createCheckbox().prop("checked", true).bootstrapSwitch()
-    expect(getOptions($switch)).toEqual $.fn.bootstrapSwitch.defaults
-
-  it "should override default options with initialization ones", ->
-    $switch = createCheckbox().prop("checked", false).bootstrapSwitch()
-    $switch2 = createCheckbox().bootstrapSwitch state: false
-    expect(getOptions($switch).state).toBe false
-    expect(getOptions($switch2).state).toBe false
-
-  it "should something", ->
-    eventDoc = eventElement = 0
-    $switch = createCheckbox().bootstrapSwitch()
-
-    $(document).on "switchChange.bootstrapSwitch", ":checkbox", (event, state) ->
-      eventDoc++
-
-    $(":checkbox").on "switchChange.bootstrapSwitch", (event, state) ->
-      eventElement++
-
-    $switch.click()
-
-    expect(eventElement).toEqual eventDoc
-    expect(eventElement).toEqual 1
-
-  describe "The Checkbox Bootstrap Switch", ->
-    it "should conserve its state if onSwitchChange returns false", ->
-      $switch = createCheckbox().bootstrapSwitch
-        onSwitchChange:(e, s) ->
-          expect(s).toEqual true
-          false
-      $indeterminateSwitch = createCheckbox().data("indeterminate", true).bootstrapSwitch
-        onSwitchChange:(e, s) ->
-          expect(s).toEqual true
-          false
-
-      $switch.click()
-      $indeterminateSwitch.click()
-
-      expect($switch.bootstrapSwitch('state')).toEqual false
-      expect($indeterminateSwitch.bootstrapSwitch('state')).toEqual false
-
-    it "should change its state if onSwitchChange not returns false", ->
-      $switch = createCheckbox().bootstrapSwitch
-        onSwitchChange:(e, s) -> expect(s).toEqual true
-
-      $switch.click()
-
-      expect($switch.bootstrapSwitch('state')).toEqual true
-
-  describe "The Radio Bootstrap Switch", ->
-    it "should conserve its state if onSwitchChange returns false", ->
-      $radio1 = createRadio().prop("checked", true)
-      $radio2 = createRadio().prop("checked", false)
-      $radio3 = createRadio().prop("checked", false)
-
-      $('[name="name"]').bootstrapSwitch
-        onSwitchChange:(e, s) ->
-          expect(s).toEqual true
-          false
-
-      $radio2.click()
-
-      expect($radio1.bootstrapSwitch('state')).toEqual true
-      expect($radio2.bootstrapSwitch('state')).toEqual false
-      expect($radio3.bootstrapSwitch('state')).toEqual false
-
-    it "should change its state if onSwitchChange not returns false", ->
-      $radio1 = createRadio().prop("checked", true)
-      $radio2 = createRadio().prop("checked", false)
-      $radio3 = createRadio().prop("checked", false)
-
-      $('[name="name"]').bootstrapSwitch
-        onSwitchChange:(e, s) -> expect(s).toEqual true
-
-      $radio2.click()
-
-      expect($radio1.bootstrapSwitch('state')).toEqual false
-      expect($radio2.bootstrapSwitch('state')).toEqual true
-      expect($radio3.bootstrapSwitch('state')).toEqual false

+ 25 - 27
src/js/bootstrap-switch.js

@@ -2,14 +2,13 @@
   class BootstrapSwitch {
     constructor (element, options = {}) {
       this.$element = $(element)
-      this.options = Object.assign(
+      this.options = $.extend(
         {},
         $.fn.bootstrapSwitch.defaults,
         this._getElementOptions(),
         options
       )
       this.prevOptions = {}
-
       this.$wrapper = $('<div>', {
         class: () => {
           const classes = []
@@ -53,8 +52,8 @@
       })
 
       this.$element.on('init.bootstrapSwitch', this.options.onInit.bind(this, element))
-      this.$element.on('switchChange.bootstrapSwitch', event => {
-        if (this.options.onSwitchChange.apply(element, arguments) === false) {
+      this.$element.on('switchChange.bootstrapSwitch', (...args) => {
+        if (this.options.onSwitchChange.apply(element, args) === false) {
           if (this.$element.is(':radio')) {
             $(`[name="${this.$element.attr('name')}"]`).trigger('previousState.bootstrapSwitch', true)
           } else {
@@ -368,13 +367,13 @@
       return this.$wrapper.width(this._handleWidth + this._labelWidth)
     }
 
-    _containerPosition (callback) {
+    _containerPosition (state = this.options.state, callback) {
       this.$container.css('margin-left', () => {
         const values = [0, `-${this._handleWidth}px`]
         if (this.options.indeterminate) {
           return `-${this._handleWidth / 2}px`
         }
-        if (this.options.state) {
+        if (state) {
           if (this.options.inverse) {
             return values[1]
           } else {
@@ -388,23 +387,22 @@
           }
         }
       })
-      if (callback) {
-        setTimeout(callback.bind(this), 50)
-      }
     }
 
     _init () {
       const init = () => {
         this.setPrevOptions()
         this._width()
-        this._containerPosition(null, () => {
+        this._containerPosition()
+        setTimeout(() => {
           if (this.options.animate) {
-            return this.$wrapper.addClass(`${this.options.baseClass}-animate`)
+            return this.$wrapper.addClass(this._getClass('animate'))
           }
-        })
+        }, 50)
       }
       if (this.$wrapper.is(':visible')) {
-        return init()
+        init()
+        return
       }
       const initInterval = window.setInterval(() => {
         if (this.$wrapper.is(':visible')) {
@@ -418,10 +416,10 @@
       return this.$element.on({
         'setPreviousOptions.bootstrapSwitch': this.setPrevOptions.bind(this),
 
-        'previousState.bootstrapSwitch' () {
+        'previousState.bootstrapSwitch': () => {
           this.options = this.prevOptions
           if (this.options.indeterminate) {
-            this.$wrapper.addClass(`${this.options.baseClass}-indeterminate`)
+            this.$wrapper.addClass(this._getClass('indeterminate'))
           }
           this.$element
             .prop('checked', this.options.state)
@@ -438,8 +436,8 @@
           }
           this.options.state = state
           this.$wrapper
-            .toggleClass(`${this.options.baseClass}-off`)
-            .toggleClass(`${this.options.baseClass}-on`)
+            .toggleClass(this._getClass('off'))
+            .toggleClass(this._getClass('on'))
           if (!skip) {
             if (this.$element.is(':radio')) {
               $(`[name="${this.$element.attr('name')}"]`)
@@ -447,21 +445,21 @@
                 .prop('checked', false)
                 .trigger('change.bootstrapSwitch', true)
             }
-            return this.$element.trigger('switchChange.bootstrapSwitch', [state])
+            this.$element.trigger('switchChange.bootstrapSwitch', [state])
           }
         },
 
-        'focus.bootstrapSwitch' (event) {
+        'focus.bootstrapSwitch': event => {
           event.preventDefault()
           this.$wrapper.addClass(this._getClass('focused'))
         },
 
-        'blur.bootstrapSwitch' (event) {
+        'blur.bootstrapSwitch': event => {
           event.preventDefault()
           this.$wrapper.removeClass(this._getClass('focused'))
         },
 
-        'keydown.bootstrapSwitch' (event) {
+        'keydown.bootstrapSwitch': event => {
           if (!event.which || this.options.disabled || this.options.readonly) {
             return
           }
@@ -493,7 +491,7 @@
       const handlers = {
         click (event) { event.stopPropagation() },
 
-        'mousedown.bootstrapSwitch touchstart.bootstrapSwitch' (event) {
+        'mousedown.bootstrapSwitch touchstart.bootstrapSwitch': event => {
           if (this._dragStart || this.options.disabled || this.options.readonly) {
             return
           }
@@ -506,7 +504,7 @@
           this.$element.trigger('focus.bootstrapSwitch')
         },
 
-        'mousemove.bootstrapSwitch touchmove.bootstrapSwitch' (event) {
+        'mousemove.bootstrapSwitch touchmove.bootstrapSwitch': event => {
           if (this._dragStart == null) { return }
           const difference = (event.pageX || event.originalEvent.touches[0].pageX) - this._dragStart
           event.preventDefault()
@@ -515,7 +513,7 @@
           this.$container.css('margin-left', `${this._dragEnd}px`)
         },
 
-        'mouseup.bootstrapSwitch touchend.bootstrapSwitch' (event) {
+        'mouseup.bootstrapSwitch touchend.bootstrapSwitch': event => {
           if (!this._dragStart) { return }
           event.preventDefault()
           if (this.options.animate) {
@@ -531,7 +529,7 @@
           this._dragStart = false
         },
 
-        'mouseleave.bootstrapSwitch' () {
+        'mouseleave.bootstrapSwitch': () => {
           this.$label.trigger('mouseup.bootstrapSwitch')
         }
       }
@@ -611,7 +609,7 @@
     labelWidth: 'auto',
     baseClass: 'bootstrap-switch',
     wrapperClass: 'wrapper',
-    onInit () {},
-    onSwitchChange () {}
+    onInit: () => {},
+    onSwitchChange: () => {}
   }
 })(window.jQuery, window)

+ 11 - 12
src/js/bootstrap-switch.test.js

@@ -1,5 +1,4 @@
-const $ = window.jQuery
-const { describe, beforeEach, afterEach, it, expect } = window
+const { $, describe, beforeEach, afterEach, it, expect } = window
 
 describe('Bootstrap Switch:', function () {
   beforeEach(function () {
@@ -7,13 +6,13 @@ describe('Bootstrap Switch:', function () {
     $.fx.off = true
   })
   afterEach(function () {
-    return $(`.${$.fn.bootstrapSwitch.defaults.baseClass}`).destroy()
+    $(`.${$.fn.bootstrapSwitch.defaults.baseClass}`).bootstrapSwitch('destroy')
   })
 
   function createCheckbox () {
     return $('<input>', {
       type: 'checkbox',
-      'class': 'switch'
+      class: 'switch'
     }).appendTo('body')
   }
 
@@ -21,7 +20,7 @@ describe('Bootstrap Switch:', function () {
     return $('<input>', {
       type: 'radio',
       name: 'name',
-      'class': 'switch'
+      class: 'switch'
     }).appendTo('body')
   }
 
@@ -55,14 +54,14 @@ describe('Bootstrap Switch:', function () {
   describe('The Checkbox Bootstrap Switch', function () {
     it('should conserve its state if onSwitchChange returns false', function () {
       const $switch = createCheckbox().bootstrapSwitch({
-        onSwitchChange: function (e, s) {
-          expect(s).toEqual(true)
+        onSwitchChange: function (event, state) {
+          expect(state).toEqual(true)
           return false
         }
       })
       const $indeterminateSwitch = createCheckbox().data('indeterminate', true).bootstrapSwitch({
-        onSwitchChange: function (e, s) {
-          expect(s).toEqual(true)
+        onSwitchChange: function (event, state) {
+          expect(state).toEqual(true)
           return false
         }
       })
@@ -72,10 +71,10 @@ describe('Bootstrap Switch:', function () {
       expect($indeterminateSwitch.bootstrapSwitch('state')).toEqual(false)
     })
 
-    it('should change its state if onSwitchChange not returns false', function () {
+    it('should change its state if onSwitchChange does not return false', function () {
       const $switch = createCheckbox().bootstrapSwitch({
-        onSwitchChange: function (e, s) {
-          expect(s).toEqual(true)
+        onSwitchChange: function (event, state) {
+          expect(state).toEqual(true)
         }
       })
       $switch.click()

+ 1 - 0
test1

@@ -0,0 +1 @@
+test1

+ 1 - 0
test2

@@ -0,0 +1 @@
+test2

Неке датотеке нису приказане због велике количине промена