bootstrap-switch.min.js 14 KB

12345678910
  1. /**
  2. * bootstrap-switch - Turn checkboxes and radio buttons into toggle switches.
  3. *
  4. * @version v3.3.3
  5. * @homepage https://bttstrp.github.io/bootstrap-switch
  6. * @author Mattia Larentis <[email protected]> (http://larentis.eu)
  7. * @license Apache-2.0
  8. */
  9. (function(a,b){if('function'==typeof define&&define.amd)define(['jquery'],b);else if('undefined'!=typeof exports)b(require('jquery'));else{b(a.jquery),a.bootstrapSwitch={exports:{}}.exports}})(this,function(a){'use strict';function c(h,j){if(!(h instanceof j))throw new TypeError('Cannot call a class as a function')}var d=function(h){return h&&h.__esModule?h:{default:h}}(a),e=function(){function h(j,k){for(var m,l=0;l<k.length;l++)m=k[l],m.enumerable=m.enumerable||!1,m.configurable=!0,'value'in m&&(m.writable=!0),Object.defineProperty(j,m.key,m)}return function(j,k,l){return k&&h(j.prototype,k),l&&h(j,l),j}}(),f=d.default||window.jQuery||window.$,g=function(){function h(j){var k=this,l=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};c(this,h),this.$element=f(j),this.options=f.extend({},f.fn.bootstrapSwitch.defaults,this._getElementOptions(),l),this.prevOptions={},this.$wrapper=f('<div>',{class:function(){var n=[];return n.push(k.options.state?'on':'off'),k.options.size&&n.push(k.options.size),k.options.disabled&&n.push('disabled'),k.options.readonly&&n.push('readonly'),k.options.indeterminate&&n.push('indeterminate'),k.options.inverse&&n.push('inverse'),k.$element.attr('id')&&n.push('id-'+k.$element.attr('id')),n.map(k._getClass.bind(k)).concat([k.options.baseClass],k._getClasses(k.options.wrapperClass)).join(' ')}}),this.$container=f('<div>',{class:this._getClass('container')}),this.$on=f('<span>',{html:this.options.onText,class:this._getClass('handle-on')+' '+this._getClass(this.options.onColor)}),this.$off=f('<span>',{html:this.options.offText,class:this._getClass('handle-off')+' '+this._getClass(this.options.offColor)}),this.$label=f('<span>',{html:this.options.labelText,class:this._getClass('label')}),this.$element.on('init.bootstrapSwitch',this.options.onInit.bind(this,j)),this.$element.on('switchChange.bootstrapSwitch',function(){for(var m=arguments.length,n=Array(m),o=0;o<m;o++)n[o]=arguments[o];!1===k.options.onSwitchChange.apply(j,n)&&(k.$element.is(':radio')?f('[name="'+k.$element.attr('name')+'"]').trigger('previousState.bootstrapSwitch',!0):k.$element.trigger('previousState.bootstrapSwitch',!0))}),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),this.options.indeterminate&&this.$element.prop('indeterminate',!0),this._init(),this._elementHandlers(),this._handleHandlers(),this._labelHandlers(),this._formHandler(),this._externalLabelHandler(),this.$element.trigger('init.bootstrapSwitch',this.options.state)}return e(h,[{key:'setPrevOptions',value:function(){this.prevOptions=Object.assign({},this.options)}},{key:'state',value:function(k,l){return'undefined'==typeof k?this.options.state:this.options.disabled||this.options.readonly||this.options.state&&!this.options.radioAllOff&&this.$element.is(':radio')?this.$element:(this.$element.is(':radio')?f('[name="'+this.$element.attr('name')+'"]').trigger('setPreviousOptions.bootstrapSwitch'):this.$element.trigger('setPreviousOptions.bootstrapSwitch'),this.options.indeterminate&&this.indeterminate(!1),this.$element.prop('checked',!!k).trigger('change.bootstrapSwitch',l),this.$element)}},{key:'toggleState',value:function(k){return this.options.disabled||this.options.readonly?this.$element:this.options.indeterminate?(this.indeterminate(!1),this.state(!0)):this.$element.prop('checked',!this.options.state).trigger('change.bootstrapSwitch',k)}},{key:'size',value:function(k){return'undefined'==typeof k?this.options.size:(null!=this.options.size&&this.$wrapper.removeClass(this._getClass(this.options.size)),k&&this.$wrapper.addClass(this._getClass(k)),this._width(),this._containerPosition(),this.options.size=k,this.$element)}},{key:'animate',value:function(k){return'undefined'==typeof k?this.options.animate:this.options.animate===!!k?this.$element:this.toggleAnimate()}},{key:'toggleAnimate',value:function(){return this.options.animate=!this.options.animate,this.$wrapper.toggleClass(this._getClass('animate')),this.$element}},{key:'disabled',value:function(k){return'undefined'==typeof k?this.options.disabled:this.options.disabled===!!k?this.$element:this.toggleDisabled()}},{key:'toggleDisabled',value:function(){return this.options.disabled=!this.options.disabled,this.$element.prop('disabled',this.options.disabled),this.$wrapper.toggleClass(this._getClass('disabled')),this.$element}},{key:'readonly',value:function(k){return'undefined'==typeof k?this.options.readonly:this.options.readonly===!!k?this.$element:this.toggleReadonly()}},{key:'toggleReadonly',value:function(){return this.options.readonly=!this.options.readonly,this.$element.prop('readonly',this.options.readonly),this.$wrapper.toggleClass(this._getClass('readonly')),this.$element}},{key:'indeterminate',value:function(k){return'undefined'==typeof k?this.options.indeterminate:this.options.indeterminate===!!k?this.$element:this.toggleIndeterminate()}},{key:'toggleIndeterminate',value:function(){return this.options.indeterminate=!this.options.indeterminate,this.$element.prop('indeterminate',this.options.indeterminate),this.$wrapper.toggleClass(this._getClass('indeterminate')),this._containerPosition(),this.$element}},{key:'inverse',value:function(k){return'undefined'==typeof k?this.options.inverse:this.options.inverse===!!k?this.$element:this.toggleInverse()}},{key:'toggleInverse',value:function(){this.$wrapper.toggleClass(this._getClass('inverse'));var k=this.$on.clone(!0),l=this.$off.clone(!0);return this.$on.replaceWith(l),this.$off.replaceWith(k),this.$on=l,this.$off=k,this.options.inverse=!this.options.inverse,this.$element}},{key:'onColor',value:function(k){return'undefined'==typeof k?this.options.onColor:(this.options.onColor&&this.$on.removeClass(this._getClass(this.options.onColor)),this.$on.addClass(this._getClass(k)),this.options.onColor=k,this.$element)}},{key:'offColor',value:function(k){return'undefined'==typeof k?this.options.offColor:(this.options.offColor&&this.$off.removeClass(this._getClass(this.options.offColor)),this.$off.addClass(this._getClass(k)),this.options.offColor=k,this.$element)}},{key:'onText',value:function(k){return'undefined'==typeof k?this.options.onText:(this.$on.html(k),this._width(),this._containerPosition(),this.options.onText=k,this.$element)}},{key:'offText',value:function(k){return'undefined'==typeof k?this.options.offText:(this.$off.html(k),this._width(),this._containerPosition(),this.options.offText=k,this.$element)}},{key:'labelText',value:function(k){return'undefined'==typeof k?this.options.labelText:(this.$label.html(k),this._width(),this.options.labelText=k,this.$element)}},{key:'handleWidth',value:function(k){return'undefined'==typeof k?this.options.handleWidth:(this.options.handleWidth=k,this._width(),this._containerPosition(),this.$element)}},{key:'labelWidth',value:function(k){return'undefined'==typeof k?this.options.labelWidth:(this.options.labelWidth=k,this._width(),this._containerPosition(),this.$element)}},{key:'baseClass',value:function(){return this.options.baseClass}},{key:'wrapperClass',value:function(k){return'undefined'==typeof k?this.options.wrapperClass:(k||(k=f.fn.bootstrapSwitch.defaults.wrapperClass),this.$wrapper.removeClass(this._getClasses(this.options.wrapperClass).join(' ')),this.$wrapper.addClass(this._getClasses(k).join(' ')),this.options.wrapperClass=k,this.$element)}},{key:'radioAllOff',value:function(k){if('undefined'==typeof k)return this.options.radioAllOff;var l=!!k;return this.options.radioAllOff===l?this.$element:(this.options.radioAllOff=l,this.$element)}},{key:'onInit',value:function(k){return'undefined'==typeof k?this.options.onInit:(k||(k=f.fn.bootstrapSwitch.defaults.onInit),this.options.onInit=k,this.$element)}},{key:'onSwitchChange',value:function(k){return'undefined'==typeof k?this.options.onSwitchChange:(k||(k=f.fn.bootstrapSwitch.defaults.onSwitchChange),this.options.onSwitchChange=k,this.$element)}},{key:'destroy',value:function(){var k=this.$element.closest('form');return k.length&&k.off('reset.bootstrapSwitch').removeData('bootstrap-switch'),this.$container.children().not(this.$element).remove(),this.$element.unwrap().unwrap().off('.bootstrapSwitch').removeData('bootstrap-switch'),this.$element}},{key:'_getElementOptions',value:function(){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(){var k=this,l=this.$on.add(this.$off).add(this.$label).css('width',''),m='auto'===this.options.handleWidth?Math.round(Math.max(this.$on.width(),this.$off.width())):this.options.handleWidth;return l.width(m),this.$label.width(function(n,o){return'auto'===k.options.labelWidth?o<m?m:o:k.options.labelWidth}),this._handleWidth=this.$on.outerWidth(),this._labelWidth=this.$label.outerWidth(),this.$container.width(2*this._handleWidth+this._labelWidth),this.$wrapper.width(this._handleWidth+this._labelWidth)}},{key:'_containerPosition',value:function(){var k=this,l=0<arguments.length&&void 0!==arguments[0]?arguments[0]:this.options.state,m=arguments[1];this.$container.css('margin-left',function(){var n=[0,'-'+k._handleWidth+'px'];return k.options.indeterminate?'-'+k._handleWidth/2+'px':l?k.options.inverse?n[1]:n[0]:k.options.inverse?n[0]:n[1]})}},{key:'_init',value:function(){var k=this,l=function(){k.setPrevOptions(),k._width(),k._containerPosition(),setTimeout(function(){if(k.options.animate)return k.$wrapper.addClass(k._getClass('animate'))},50)};if(this.$wrapper.is(':visible'))return void l();var m=window.setInterval(function(){if(k.$wrapper.is(':visible'))return l(),window.clearInterval(m)},50)}},{key:'_elementHandlers',value:function(){var k=this;return this.$element.on({'setPreviousOptions.bootstrapSwitch':this.setPrevOptions.bind(this),'previousState.bootstrapSwitch':function(){k.options=k.prevOptions,k.options.indeterminate&&k.$wrapper.addClass(k._getClass('indeterminate')),k.$element.prop('checked',k.options.state).trigger('change.bootstrapSwitch',!0)},'change.bootstrapSwitch':function(m,n){m.preventDefault(),m.stopImmediatePropagation();var o=k.$element.is(':checked');k._containerPosition(o),o===k.options.state||(k.options.state=o,k.$wrapper.toggleClass(k._getClass('off')).toggleClass(k._getClass('on')),!n&&(k.$element.is(':radio')&&f('[name="'+k.$element.attr('name')+'"]').not(k.$element).prop('checked',!1).trigger('change.bootstrapSwitch',!0),k.$element.trigger('switchChange.bootstrapSwitch',[o])))},'focus.bootstrapSwitch':function(m){m.preventDefault(),k.$wrapper.addClass(k._getClass('focused'))},'blur.bootstrapSwitch':function(m){m.preventDefault(),k.$wrapper.removeClass(k._getClass('focused'))},'keydown.bootstrapSwitch':function(m){!m.which||k.options.disabled||k.options.readonly||(37===m.which||39===m.which)&&(m.preventDefault(),m.stopImmediatePropagation(),k.state(39===m.which))}})}},{key:'_handleHandlers',value:function(){var k=this;return this.$on.on('click.bootstrapSwitch',function(l){return l.preventDefault(),l.stopPropagation(),k.state(!1),k.$element.trigger('focus.bootstrapSwitch')}),this.$off.on('click.bootstrapSwitch',function(l){return l.preventDefault(),l.stopPropagation(),k.state(!0),k.$element.trigger('focus.bootstrapSwitch')})}},{key:'_labelHandlers',value:function(){var k=this;this.$label.on({click:function(n){n.stopPropagation()},'mousedown.bootstrapSwitch touchstart.bootstrapSwitch':function(n){k._dragStart||k.options.disabled||k.options.readonly||(n.preventDefault(),n.stopPropagation(),k._dragStart=(n.pageX||n.originalEvent.touches[0].pageX)-parseInt(k.$container.css('margin-left'),10),k.options.animate&&k.$wrapper.removeClass(k._getClass('animate')),k.$element.trigger('focus.bootstrapSwitch'))},'mousemove.bootstrapSwitch touchmove.bootstrapSwitch':function(n){if(null!=k._dragStart){var o=(n.pageX||n.originalEvent.touches[0].pageX)-k._dragStart;n.preventDefault(),o<-k._handleWidth||0<o||(k._dragEnd=o,k.$container.css('margin-left',k._dragEnd+'px'))}},'mouseup.bootstrapSwitch touchend.bootstrapSwitch':function(n){if(k._dragStart){if(n.preventDefault(),k.options.animate&&k.$wrapper.addClass(k._getClass('animate')),k._dragEnd){var o=k._dragEnd>-(k._handleWidth/2);k._dragEnd=!1,k.state(k.options.inverse?!o:o)}else k.state(!k.options.state);k._dragStart=!1}},'mouseleave.bootstrapSwitch':function(){k.$label.trigger('mouseup.bootstrapSwitch')}})}},{key:'_externalLabelHandler',value:function(){var k=this,l=this.$element.closest('label');l.on('click',function(m){m.preventDefault(),m.stopImmediatePropagation(),m.target===l[0]&&k.toggleState()})}},{key:'_formHandler',value:function(){var k=this.$element.closest('form');k.data('bootstrap-switch')||k.on('reset.bootstrapSwitch',function(){window.setTimeout(function(){k.find('input').filter(function(){return f(this).data('bootstrap-switch')}).each(function(){return f(this).bootstrapSwitch('state',this.checked)})},1)}).data('bootstrap-switch',!0)}},{key:'_getClass',value:function(k){return this.options.baseClass+'-'+k}},{key:'_getClasses',value:function(k){return f.isArray(k)?k.map(this._getClass.bind(this)):[this._getClass(k)]}}]),h}();f.fn.bootstrapSwitch=function(h){for(var k=arguments.length,l=Array(1<k?k-1:0),m=1;m<k;m++)l[m-1]=arguments[m];return Array.prototype.reduce.call(this,function(n,o){var p=f(o),q=p.data('bootstrap-switch'),r=q||new g(o,h);return q||p.data('bootstrap-switch',r),'string'==typeof h?r[h].apply(r,l):n},this)},f.fn.bootstrapSwitch.Constructor=g,f.fn.bootstrapSwitch.defaults={state:!0,size:null,animate:!0,disabled:!1,readonly:!1,indeterminate:!1,inverse:!1,radioAllOff:!1,onColor:'primary',offColor:'default',onText:'ON',offText:'OFF',labelText:'&nbsp',handleWidth:'auto',labelWidth:'auto',baseClass:'bootstrap-switch',wrapperClass:'wrapper',onInit:function(){},onSwitchChange:function(){}}});