| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767 | /**  * bootstrap-switch - Turn checkboxes and radio buttons into toggle switches.  *  * @version v3.4.0  * @homepage https://bttstrp.github.io/bootstrap-switch  * @author Mattia Larentis <mattia@larentis.eu> (http://larentis.eu)  * @license MIT  */(function (global, factory) {  if (typeof define === "function" && define.amd) {    define(['jquery'], factory);  } else if (typeof exports !== "undefined") {    factory(require('jquery'));  } else {    var mod = {      exports: {}    };    factory(global.jquery);    global.bootstrapSwitch = mod.exports;  }})(this, function (_jquery) {  'use strict';  var _jquery2 = _interopRequireDefault(_jquery);  function _interopRequireDefault(obj) {    return obj && obj.__esModule ? obj : {      default: obj    };  }  var _extends = Object.assign || function (target) {    for (var i = 1; i < arguments.length; i++) {      var source = arguments[i];      for (var key in source) {        if (Object.prototype.hasOwnProperty.call(source, key)) {          target[key] = source[key];        }      }    }    return target;  };  function _classCallCheck(instance, Constructor) {    if (!(instance instanceof Constructor)) {      throw new TypeError("Cannot call a class as a function");    }  }  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;    };  }();  var $ = _jquery2.default || window.jQuery || window.$;  function getClasses(options, id) {    var state = options.state,        size = options.size,        disabled = options.disabled,        readonly = options.readonly,        indeterminate = options.indeterminate,        inverse = options.inverse;    return [state ? 'on' : 'off', size, disabled ? 'disabled' : undefined, readonly ? 'readonly' : undefined, indeterminate ? 'indeterminate' : undefined, inverse ? 'inverse' : undefined, id ? 'id-' + id : undefined].filter(function (v) {      return v == null;    });  }  function prvgetElementOptions() {    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')    };  }  function prvwidth() {    var _this = this;    var $handles = this.$on.add(this.$off).add(this.$label).css('width', '');    var handleWidth = this.options.handleWidth === 'auto' ? Math.round(Math.max(this.$on.width(), this.$off.width())) : this.options.handleWidth;    $handles.width(handleWidth);    this.$label.width(function (index, width) {      if (_this.options.labelWidth !== 'auto') {        return _this.options.labelWidth;      }      if (width < handleWidth) {        return handleWidth;      }      return width;    });    this.privateHandleWidth = this.$on.outerWidth();    this.privateLabelWidth = this.$label.outerWidth();    this.$container.width(this.privateHandleWidth * 2 + this.privateLabelWidth);    return this.$wrapper.width(this.privateHandleWidth + this.privateLabelWidth);  }  function prvcontainerPosition() {    var _this2 = this;    var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.ope;    this.$container.css('margin-left', function () {      var values = [0, '-' + _this2.privateHandleWidth + 'px'];      if (_this2.options.indeterminate) {        return '-' + _this2.privateHandleWidth / 2 + 'px';      }      if (state) {        if (_this2.options.inverse) {          return values[1];        }        return values[0];      }      if (_this2.options.inverse) {        return values[0];      }      return values[1];    });  }  function prvgetClass(name) {    return this.options.baseClass + '-' + name;  }  function prvinit() {    var _this3 = this;    var init = function init() {      _this3.setPrevOptions();      prvwidth.call(_this3);      prvcontainerPosition.call(_this3);      setTimeout(function () {        return _this3.options.animate && _this3.$wrapper.addClass(prvgetClass.call(_this3, 'animate'));      }, 50);    };    if (this.$wrapper.is(':visible')) {      init();      return;    }    var initInterval = window.setInterval(function () {      return _this3.$wrapper.is(':visible') && (init() || true) && window.clearInterval(initInterval);    }, 50);  }  function prvelementHandlers() {    var _this4 = this;    return this.$element.on({      'setPreviousOptions.bootstrapSwitch': function setPreviousOptionsBootstrapSwitch() {        return _this4.setPrevOptions();      },      'previousState.bootstrapSwitch': function previousStateBootstrapSwitch() {        _this4.options = _this4.prevOptions;        if (_this4.options.indeterminate) {          _this4.$wrapper.addClass(prvgetClass.call(_this4, 'indeterminate'));        }        _this4.$element.prop('checked', _this4.options.state).trigger('change.bootstrapSwitch', true);      },      'change.bootstrapSwitch': function changeBootstrapSwitch(event, skip) {        event.preventDefault();        event.stopImmediatePropagation();        var state = _this4.$element.is(':checked');        prvcontainerPosition.call(_this4, state);        if (state === _this4.options.state) {          return;        }        _this4.options.state = state;        _this4.$wrapper.toggleClass(prvgetClass.call(_this4, 'off')).toggleClass(prvgetClass.call(_this4, 'on'));        if (!skip) {          if (_this4.$element.is(':radio')) {            $('[name="' + _this4.$element.attr('name') + '"]').not(_this4.$element).prop('checked', false).trigger('change.bootstrapSwitch', true);          }          _this4.$element.trigger('switchChange.bootstrapSwitch', [state]);        }      },      'focus.bootstrapSwitch': function focusBootstrapSwitch(event) {        event.preventDefault();        _this4.$wrapper.addClass(prvgetClass.call(_this4, 'focused'));      },      'blur.bootstrapSwitch': function blurBootstrapSwitch(event) {        event.preventDefault();        _this4.$wrapper.removeClass(prvgetClass.call(_this4, 'focused'));      },      'keydown.bootstrapSwitch': function keydownBootstrapSwitch(event) {        if (!event.which || _this4.options.disabled || _this4.options.readonly) {          return;        }        if (event.which === 37 || event.which === 39) {          event.preventDefault();          event.stopImmediatePropagation();          _this4.state(event.which === 39);        }      }    });  }  function prvhandleHandlers() {    var _this5 = this;    this.$on.on('click.bootstrapSwitch', function (event) {      event.preventDefault();      event.stopPropagation();      _this5.state(false);      return _this5.$element.trigger('focus.bootstrapSwitch');    });    return this.$off.on('click.bootstrapSwitch', function (event) {      event.preventDefault();      event.stopPropagation();      _this5.state(true);      return _this5.$element.trigger('focus.bootstrapSwitch');    });  }  function prvlabelHandlers() {    var _this6 = this;    var dragStart = void 0;    var dragEnd = void 0;    var handlers = {      click: function click(event) {        event.stopPropagation();      },      'mousedown.bootstrapSwitch touchstart.bootstrapSwitch': function mousedownBootstrapSwitchTouchstartBootstrapSwitch(event) {        if (dragStart || _this6.options.disabled || _this6.options.readonly) {          return;        }        event.preventDefault();        event.stopPropagation();        dragStart = (event.pageX || event.originalEvent.touches[0].pageX) - parseInt(_this6.$container.css('margin-left'), 10);        if (_this6.options.animate) {          _this6.$wrapper.removeClass(prvgetClass.call(_this6, 'animate'));        }        _this6.$element.trigger('focus.bootstrapSwitch');      },      'mousemove.bootstrapSwitch touchmove.bootstrapSwitch': function mousemoveBootstrapSwitchTouchmoveBootstrapSwitch(event) {        if (dragStart == null) {          return;        }        var difference = (event.pageX || event.originalEvent.touches[0].pageX) - dragStart;        event.preventDefault();        if (difference < -_this6.privateHandleWidth || difference > 0) {          return;        }        dragEnd = difference;        _this6.$container.css('margin-left', dragEnd + 'px');      },      'mouseup.bootstrapSwitch touchend.bootstrapSwitch': function mouseupBootstrapSwitchTouchendBootstrapSwitch(event) {        if (!dragStart) {          return;        }        event.preventDefault();        if (_this6.options.animate) {          _this6.$wrapper.addClass(prvgetClass.call(_this6, 'animate'));        }        if (dragEnd) {          var state = dragEnd > -(_this6.privateHandleWidth / 2);          dragEnd = false;          _this6.state(_this6.options.inverse ? !state : state);        } else {          _this6.state(!_this6.options.state);        }        dragStart = false;      },      'mouseleave.bootstrapSwitch': function mouseleaveBootstrapSwitch() {        _this6.$label.trigger('mouseup.bootstrapSwitch');      }    };    this.$label.on(handlers);  }  function prvexternalLabelHandler() {    var _this7 = this;    var $externalLabel = this.$element.closest('label');    $externalLabel.on('click', function (event) {      event.preventDefault();      event.stopImmediatePropagation();      if (event.target === $externalLabel[0]) {        _this7.toggleState();      }    });  }  function prvformHandler() {    function isBootstrapSwitch() {      return $(this).data('bootstrap-switch');    }    function performReset() {      return $(this).bootstrapSwitch('state', this.checked);    }    var $form = this.$element.closest('form');    if ($form.data('bootstrap-switch')) {      return;    }    $form.on('reset.bootstrapSwitch', function () {      window.setTimeout(function () {        $form.find('input').filter(isBootstrapSwitch).each(performReset);      }, 1);    }).data('bootstrap-switch', true);  }  function prvgetClasses(classes) {    var _this8 = this;    if (!$.isArray(classes)) {      return [prvgetClass.call(this, classes)];    }    return classes.map(function (v) {      return prvgetClass.call(_this8, v);    });  }  var BootstrapSwitch = function () {    function BootstrapSwitch(element) {      var _this9 = this;      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};      _classCallCheck(this, BootstrapSwitch);      this.$element = $(element);      this.options = $.extend({}, $.fn.bootstrapSwitch.defaults, prvgetElementOptions.call(this), options);      this.prevOptions = {};      this.$wrapper = $('<div>', {        class: function _class() {          return getClasses(_this9.options, _this9.$element.attr('id')).map(function (v) {            return prvgetClass.call(_this9, v);          }).concat([_this9.options.baseClass], prvgetClasses.call(_this9, _this9.options.wrapperClass)).join(' ');        }      });      this.$container = $('<div>', { class: prvgetClass.call(this, 'container') });      this.$on = $('<span>', {        html: this.options.onText,        class: prvgetClass.call(this, 'handle-on') + ' ' + prvgetClass.call(this, this.options.onColor)      });      this.$off = $('<span>', {        html: this.options.offText,        class: prvgetClass.call(this, 'handle-off') + ' ' + prvgetClass.call(this, this.options.offColor)      });      this.$label = $('<span>', {        html: this.options.labelText,        class: prvgetClass.call(this, 'label')      });      this.$element.on('init.bootstrapSwitch', function () {        return _this9.options.onInit(element);      });      this.$element.on('switchChange.bootstrapSwitch', function () {        for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {          args[_key] = arguments[_key];        }        var changeState = _this9.options.onSwitchChange.apply(element, args);        if (changeState === false) {          if (_this9.$element.is(':radio')) {            $('[name="' + _this9.$element.attr('name') + '"]').trigger('previousState.bootstrapSwitch', true);          } else {            _this9.$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);      if (this.options.indeterminate) {        this.$element.prop('indeterminate', true);      }      prvinit.call(this);      prvelementHandlers.call(this);      prvhandleHandlers.call(this);      prvlabelHandlers.call(this);      prvformHandler.call(this);      prvexternalLabelHandler.call(this);      this.$element.trigger('init.bootstrapSwitch', this.options.state);    }    _createClass(BootstrapSwitch, [{      key: 'setPrevOptions',      value: function setPrevOptions() {        this.prevOptions = _extends({}, this.options);      }    }, {      key: 'state',      value: function state(value, skip) {        if (typeof value === 'undefined') {          return this.options.state;        }        if (this.options.disabled || this.options.readonly || 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');        } else {          this.$element.trigger('setPreviousOptions.bootstrapSwitch');        }        if (this.options.indeterminate) {          this.indeterminate(false);        }        this.$element.prop('checked', Boolean(value)).trigger('change.bootstrapSwitch', skip);        return this.$element;      }    }, {      key: 'toggleState',      value: function toggleState(skip) {        if (this.options.disabled || this.options.readonly) {          return this.$element;        }        if (this.options.indeterminate) {          this.indeterminate(false);          return this.state(true);        }        return this.$element.prop('checked', !this.options.state).trigger('change.bootstrapSwitch', skip);      }    }, {      key: 'size',      value: function size(value) {        if (typeof value === 'undefined') {          return this.options.size;        }        if (this.options.size != null) {          this.$wrapper.removeClass(prvgetClass.call(this, this.options.size));        }        if (value) {          this.$wrapper.addClass(prvgetClass.call(this, value));        }        prvwidth.call(this);        prvcontainerPosition.call(this);        this.options.size = value;        return this.$element;      }    }, {      key: 'animate',      value: function animate(value) {        if (typeof value === 'undefined') {          return this.options.animate;        }        if (this.options.animate === Boolean(value)) {          return this.$element;        }        return this.toggleAnimate();      }    }, {      key: 'toggleAnimate',      value: function toggleAnimate() {        this.options.animate = !this.options.animate;        this.$wrapper.toggleClass(prvgetClass.call(this, 'animate'));        return this.$element;      }    }, {      key: 'disabled',      value: function disabled(value) {        if (typeof value === 'undefined') {          return this.options.disabled;        }        if (this.options.disabled === Boolean(value)) {          return this.$element;        }        return this.toggleDisabled();      }    }, {      key: 'toggleDisabled',      value: function toggleDisabled() {        this.options.disabled = !this.options.disabled;        this.$element.prop('disabled', this.options.disabled);        this.$wrapper.toggleClass(prvgetClass.call(this, 'disabled'));        return this.$element;      }    }, {      key: 'readonly',      value: function readonly(value) {        if (typeof value === 'undefined') {          return this.options.readonly;        }        if (this.options.readonly === Boolean(value)) {          return this.$element;        }        return this.toggleReadonly();      }    }, {      key: 'toggleReadonly',      value: function toggleReadonly() {        this.options.readonly = !this.options.readonly;        this.$element.prop('readonly', this.options.readonly);        this.$wrapper.toggleClass(prvgetClass.call(this, 'readonly'));        return this.$element;      }    }, {      key: 'indeterminate',      value: function indeterminate(value) {        if (typeof value === 'undefined') {          return this.options.indeterminate;        }        if (this.options.indeterminate === Boolean(value)) {          return this.$element;        }        return this.toggleIndeterminate();      }    }, {      key: 'toggleIndeterminate',      value: function toggleIndeterminate() {        this.options.indeterminate = !this.options.indeterminate;        this.$element.prop('indeterminate', this.options.indeterminate);        this.$wrapper.toggleClass(prvgetClass.call(this, 'indeterminate'));        prvcontainerPosition.call(this);        return this.$element;      }    }, {      key: 'inverse',      value: function inverse(value) {        if (typeof value === 'undefined') {          return this.options.inverse;        }        if (this.options.inverse === Boolean(value)) {          return this.$element;        }        return this.toggleInverse();      }    }, {      key: 'toggleInverse',      value: function toggleInverse() {        this.$wrapper.toggleClass(prvgetClass.call(this, '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;      }    }, {      key: 'onColor',      value: function onColor(value) {        if (typeof value === 'undefined') {          return this.options.onColor;        }        if (this.options.onColor) {          this.$on.removeClass(prvgetClass.call(this, this.options.onColor));        }        this.$on.addClass(prvgetClass.call(this, value));        this.options.onColor = value;        return this.$element;      }    }, {      key: 'offColor',      value: function offColor(value) {        if (typeof value === 'undefined') {          return this.options.offColor;        }        if (this.options.offColor) {          this.$off.removeClass(prvgetClass.call(this, this.options.offColor));        }        this.$off.addClass(prvgetClass.call(this, value));        this.options.offColor = value;        return this.$element;      }    }, {      key: 'onText',      value: function onText(value) {        if (typeof value === 'undefined') {          return this.options.onText;        }        this.$on.html(value);        prvwidth.call(this);        prvcontainerPosition.call(this);        this.options.onText = value;        return this.$element;      }    }, {      key: 'offText',      value: function offText(value) {        if (typeof value === 'undefined') {          return this.options.offText;        }        this.$off.html(value);        prvwidth.call(this);        prvcontainerPosition.call(this);        this.options.offText = value;        return this.$element;      }    }, {      key: 'labelText',      value: function labelText(value) {        if (typeof value === 'undefined') {          return this.options.labelText;        }        this.$label.html(value);        prvwidth.call(this);        this.options.labelText = value;        return this.$element;      }    }, {      key: 'handleWidth',      value: function handleWidth(value) {        if (typeof value === 'undefined') {          return this.options.handleWidth;        }        this.options.handleWidth = value;        prvwidth.call(this);        prvcontainerPosition.call(this);        return this.$element;      }    }, {      key: 'labelWidth',      value: function labelWidth(value) {        if (typeof value === 'undefined') {          return this.options.labelWidth;        }        this.options.labelWidth = value;        prvwidth.call(this);        prvcontainerPosition.call(this);        return this.$element;      }    }, {      key: 'baseClass',      value: function baseClass() {        return this.options.baseClass;      }    }, {      key: 'wrapperClass',      value: function wrapperClass(value) {        if (typeof value === 'undefined') {          return this.options.wrapperClass;        }        var wrapperClass = value || $.fn.bootstrapSwitch.defaults.wrapperClass;        this.$wrapper.removeClass(prvgetClasses.call(this, this.options.wrapperClass).join(' '));        this.$wrapper.addClass(prvgetClasses.call(this, wrapperClass).join(' '));        this.options.wrapperClass = wrapperClass;        return this.$element;      }    }, {      key: 'radioAllOff',      value: function radioAllOff(value) {        if (typeof value === 'undefined') {          return this.options.radioAllOff;        }        var val = Boolean(value);        if (this.options.radioAllOff === val) {          return this.$element;        }        this.options.radioAllOff = val;        return this.$element;      }    }, {      key: 'onInit',      value: function onInit(value) {        if (typeof value === 'undefined') {          return this.options.onInit;        }        this.options.onInit = value || $.fn.bootstrapSwitch.defaults.onInit;        return this.$element;      }    }, {      key: 'onSwitchChange',      value: function onSwitchChange(value) {        if (typeof value === 'undefined') {          return this.options.onSwitchChange;        }        this.options.onSwitchChange = value || $.fn.bootstrapSwitch.defaults.onSwitchChange;        return this.$element;      }    }, {      key: 'destroy',      value: function destroy() {        var $form = this.$element.closest('form');        if ($form.length) {          $form.off('reset.bootstrapSwitch').removeData('bootstrap-switch');        }        this.$container.children().not(this.$element).remove();        this.$element.unwrap().unwrap().off('.bootstrapSwitch').removeData('bootstrap-switch');        return this.$element;      }    }]);    return BootstrapSwitch;  }();  function bootstrapSwitch(option) {    for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {      args[_key2 - 1] = arguments[_key2];    }    function reducer(ret, next) {      var $this = $(next);      var existingData = $this.data('bootstrap-switch');      var data = existingData || new BootstrapSwitch(next, option);      if (!existingData) {        $this.data('bootstrap-switch', data);      }      if (typeof option === 'string') {        return data[option].apply(data, args);      }      return ret;    }    return Array.prototype.reduce.call(this, reducer, this);  }  $.fn.bootstrapSwitch = bootstrapSwitch;  $.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: ' ',    handleWidth: 'auto',    labelWidth: 'auto',    baseClass: 'bootstrap-switch',    wrapperClass: 'wrapper',    onInit: function onInit() {},    onSwitchChange: function onSwitchChange() {}  };});
 |