/*
* Bootstrap TouchSpin - v4.3.0
* A mobile and touch friendly input spinner component for Bootstrap 3 & 4.
* http://www.virtuosoft.eu/code/bootstrap-touchspin/
*
* Made by István Ujj-Mészáros
* Under Apache License v2.0 License
*/
!(function (o) {
'function' == typeof define && define.amd
? define(['jquery'], o)
: 'object' == typeof module && module.exports
? (module.exports = function (t, n) {
return void 0 === n && (n = 'undefined' != typeof window ? require('jquery') : require('jquery')(t)), o(n), n;
})
: o(jQuery);
})(function (D) {
'use strict';
var N = 0;
D.fn.TouchSpin = function (k) {
var C = {
min: 0,
max: 100,
initval: '',
replacementval: '',
firstclickvalueifempty: null,
step: 1,
decimals: 0,
stepinterval: 100,
forcestepdivisibility: 'round',
stepintervaldelay: 500,
verticalbuttons: !1,
verticalup: '+',
verticaldown: '-',
verticalupclass: '',
verticaldownclass: '',
prefix: '',
postfix: '',
prefix_extraclass: '',
postfix_extraclass: '',
booster: !0,
boostat: 10,
maxboostedstep: !1,
mousewheel: !0,
buttondown_class: 'btn btn-primary',
buttonup_class: 'btn btn-primary',
buttondown_txt: '-',
buttonup_txt: '+',
callback_before_calculation: function (t) {
return t;
},
callback_after_calculation: function (t) {
return t;
}
},
j = {
min: 'min',
max: 'max',
initval: 'init-val',
replacementval: 'replacement-val',
firstclickvalueifempty: 'first-click-value-if-empty',
step: 'step',
decimals: 'decimals',
stepinterval: 'step-interval',
verticalbuttons: 'vertical-buttons',
verticalupclass: 'vertical-up-class',
verticaldownclass: 'vertical-down-class',
forcestepdivisibility: 'force-step-divisibility',
stepintervaldelay: 'step-interval-delay',
prefix: 'prefix',
postfix: 'postfix',
prefix_extraclass: 'prefix-extra-class',
postfix_extraclass: 'postfix-extra-class',
booster: 'booster',
boostat: 'boostat',
maxboostedstep: 'max-boosted-step',
mousewheel: 'mouse-wheel',
buttondown_class: 'button-down-class',
buttonup_class: 'button-up-class',
buttondown_txt: 'button-down-txt',
buttonup_txt: 'button-up-txt'
};
return this.each(function () {
var i,
o,
s,
u,
p,
a,
t,
n,
e,
r,
c = D(this),
l = c.data(),
d = 0,
f = !1;
function b() {
'' === i.prefix && (o = p.prefix.detach()), '' === i.postfix && (s = p.postfix.detach());
}
function h() {
var t, n, o;
'' !== (t = i.callback_before_calculation(c.val()))
? (0 < i.decimals && '.' === t) ||
((n = parseFloat(t)),
isNaN(n) && (n = '' !== i.replacementval ? i.replacementval : 0),
(o = n).toString() !== t && (o = n),
null !== i.min && n < i.min && (o = i.min),
null !== i.max && n > i.max && (o = i.max),
(o = (function (t) {
switch (i.forcestepdivisibility) {
case 'round':
return (Math.round(t / i.step) * i.step).toFixed(i.decimals);
case 'floor':
return (Math.floor(t / i.step) * i.step).toFixed(i.decimals);
case 'ceil':
return (Math.ceil(t / i.step) * i.step).toFixed(i.decimals);
default:
return t.toFixed(i.decimals);
}
})(o)),
Number(t).toString() !== o.toString() && (c.val(o), c.trigger('change')))
: '' !== i.replacementval && (c.val(i.replacementval), c.trigger('change'));
}
function v() {
if (i.booster) {
var t = Math.pow(2, Math.floor(d / i.boostat)) * i.step;
return (
i.maxboostedstep && t > i.maxboostedstep && ((t = i.maxboostedstep), (a = Math.round(a / t) * t)),
Math.max(i.step, t)
);
}
return i.step;
}
function x() {
return 'number' == typeof i.firstclickvalueifempty ? i.firstclickvalueifempty : (i.min + i.max) / 2;
}
function g() {
h();
var t,
n = (a = parseFloat(i.callback_before_calculation(p.input.val())));
isNaN(a) ? (a = x()) : ((t = v()), (a += t)),
null !== i.max && a > i.max && ((a = i.max), c.trigger('touchspin.on.max'), y()),
p.input.val(i.callback_after_calculation(Number(a).toFixed(i.decimals))),
n !== a && c.trigger('change');
}
function m() {
h();
var t,
n = (a = parseFloat(i.callback_before_calculation(p.input.val())));
isNaN(a) ? (a = x()) : ((t = v()), (a -= t)),
null !== i.min && a < i.min && ((a = i.min), c.trigger('touchspin.on.min'), y()),
p.input.val(i.callback_after_calculation(Number(a).toFixed(i.decimals))),
n !== a && c.trigger('change');
}
function w() {
y(),
(d = 0),
(f = 'down'),
c.trigger('touchspin.on.startspin'),
c.trigger('touchspin.on.startdownspin'),
(e = setTimeout(function () {
t = setInterval(function () {
d++, m();
}, i.stepinterval);
}, i.stepintervaldelay));
}
function _() {
y(),
(d = 0),
(f = 'up'),
c.trigger('touchspin.on.startspin'),
c.trigger('touchspin.on.startupspin'),
(r = setTimeout(function () {
n = setInterval(function () {
d++, g();
}, i.stepinterval);
}, i.stepintervaldelay));
}
function y() {
switch ((clearTimeout(e), clearTimeout(r), clearInterval(t), clearInterval(n), f)) {
case 'up':
c.trigger('touchspin.on.stopupspin'), c.trigger('touchspin.on.stopspin');
break;
case 'down':
c.trigger('touchspin.on.stopdownspin'), c.trigger('touchspin.on.stopspin');
}
(d = 0), (f = !1);
}
!(function () {
if (c.data('alreadyinitialized')) return;
if ((c.data('alreadyinitialized', !0), (N += 1), c.data('spinnerid', N), !c.is('input')))
return console.log('Must be an input.');
(i = D.extend(
{},
C,
l,
(function () {
var s = {};
return (
D.each(j, function (t, n) {
var o = 'bts-' + n;
c.is('[data-' + o + ']') && (s[t] = c.data(o));
}),
s
);
})(),
k
)),
'' !== i.initval && '' === c.val() && c.val(i.initval),
h(),
(function () {
var t = c.val(),
n = c.parent();
'' !== t && (t = i.callback_after_calculation(Number(t).toFixed(i.decimals)));
c.data('initvalue', t).val(t),
c.addClass('form-control'),
n.hasClass('input-group')
? (function (t) {
t.addClass('bootstrap-touchspin');
var n,
o,
s = c.prev(),
p = c.next(),
a =
'<span class="input-group-addon bootstrap-touchspin-prefix bootstrap-touchspin-injected"><span class="input-group-text">' +
i.prefix +
'</span></span>',
e =
'<span class="input-group-addon bootstrap-touchspin-postfix bootstrap-touchspin-injected"><span class="input-group-text">' +
i.postfix +
'</span></span>';
s.hasClass('input-group-btn') || s.hasClass('input-group-text')
? ((n =
'<button class="' +
i.buttondown_class +
' bootstrap-touchspin-down bootstrap-touchspin-injected" type="button">' +
i.buttondown_txt +
'</button>'),
s.append(n))
: ((n =
'<span class="input-group-btn bootstrap-touchspin-injected"><button class="' +
i.buttondown_class +
' bootstrap-touchspin-down" type="button">' +
i.buttondown_txt +
'</button></span>'),
D(n).insertBefore(c));
p.hasClass('input-group-btn') || p.hasClass('input-group-text')
? ((o =
'<button class="' +
i.buttonup_class +
' bootstrap-touchspin-up bootstrap-touchspin-injected" type="button">' +
i.buttonup_txt +
'</button>'),
p.text(o))
: ((o =
'<span class="input-group-btn bootstrap-touchspin-injected"><button class="' +
i.buttonup_class +
' bootstrap-touchspin-up" type="button">' +
i.buttonup_txt +
'</button></span>'),
D(o).insertAfter(c));
D(a).insertBefore(c), D(e).insertAfter(c), (u = t);
})(n)
: (function () {
var t,
n = '';
c.hasClass('input-sm') && (n = 'input-group-sm');
c.hasClass('input-lg') && (n = 'input-group-lg');
t = i.verticalbuttons
? '<div class="input-group ' +
n +
' bootstrap-touchspin bootstrap-touchspin-injected"><span class="input-group-addon bootstrap-touchspin-prefix"><span class="input-group-text">' +
i.prefix +
'</span></span><span class="input-group-addon bootstrap-touchspin-postfix"><span class="input-group-text">' +
i.postfix +
'</span></span><span class="input-group-btn-vertical"><button class="' +
i.buttondown_class +
' bootstrap-touchspin-up ' +
i.verticalupclass +
'" type="button">' +
i.verticalup +
'</button><button class="' +
i.buttonup_class +
' bootstrap-touchspin-down ' +
i.verticaldownclass +
'" type="button">' +
i.verticaldown +
'</button></span></div>'
: '<div class="input-group bootstrap-touchspin bootstrap-touchspin-injected"><span class="input-group-btn"><button class="' +
i.buttondown_class +
' bootstrap-touchspin-down" type="button">' +
i.buttondown_txt +
'</button></span><span class="input-group-addon bootstrap-touchspin-prefix"><span class="input-group-text">' +
i.prefix +
'</span></span><span class="input-group-addon bootstrap-touchspin-postfix"><span class="input-group-text">' +
i.postfix +
'</span></span><span class="input-group-btn"><button class="' +
i.buttonup_class +
' bootstrap-touchspin-up" type="button">' +
i.buttonup_txt +
'</button></span></div>';
(u = D(t).insertBefore(c)),
D('.bootstrap-touchspin-prefix', u).after(c),
c.hasClass('input-sm')
? u.addClass('input-group-sm')
: c.hasClass('input-lg') && u.addClass('input-group-lg');
})();
})(),
(p = {
down: D('.bootstrap-touchspin-down', u),
up: D('.bootstrap-touchspin-up', u),
input: D('input', u),
prefix: D('.bootstrap-touchspin-prefix', u).addClass(i.prefix_extraclass),
postfix: D('.bootstrap-touchspin-postfix', u).addClass(i.postfix_extraclass)
}),
b(),
c.on('keydown.touchspin', function (t) {
var n = t.keyCode || t.which;
38 === n
? ('up' !== f && (g(), _()), t.preventDefault())
: 40 === n && ('down' !== f && (m(), w()), t.preventDefault());
}),
c.on('keyup.touchspin', function (t) {
var n = t.keyCode || t.which;
(38 !== n && 40 !== n) || y();
}),
c.on('blur.touchspin', function () {
h(), c.val(i.callback_after_calculation(c.val()));
}),
p.down.on('keydown', function (t) {
var n = t.keyCode || t.which;
(32 !== n && 13 !== n) || ('down' !== f && (m(), w()), t.preventDefault());
}),
p.down.on('keyup.touchspin', function (t) {
var n = t.keyCode || t.which;
(32 !== n && 13 !== n) || y();
}),
p.up.on('keydown.touchspin', function (t) {
var n = t.keyCode || t.which;
(32 !== n && 13 !== n) || ('up' !== f && (g(), _()), t.preventDefault());
}),
p.up.on('keyup.touchspin', function (t) {
var n = t.keyCode || t.which;
(32 !== n && 13 !== n) || y();
}),
p.down.on('mousedown.touchspin', function (t) {
p.down.off('touchstart.touchspin'),
c.is(':disabled') || (m(), w(), t.preventDefault(), t.stopPropagation());
}),
p.down.on('touchstart.touchspin', function (t) {
p.down.off('mousedown.touchspin'), c.is(':disabled') || (m(), w(), t.preventDefault(), t.stopPropagation());
}),
p.up.on('mousedown.touchspin', function (t) {
p.up.off('touchstart.touchspin'), c.is(':disabled') || (g(), _(), t.preventDefault(), t.stopPropagation());
}),
p.up.on('touchstart.touchspin', function (t) {
p.up.off('mousedown.touchspin'), c.is(':disabled') || (g(), _(), t.preventDefault(), t.stopPropagation());
}),
p.up.on(
'mouseup.touchspin mouseout.touchspin touchleave.touchspin touchend.touchspin touchcancel.touchspin',
function (t) {
f && (t.stopPropagation(), y());
}
),
p.down.on(
'mouseup.touchspin mouseout.touchspin touchleave.touchspin touchend.touchspin touchcancel.touchspin',
function (t) {
f && (t.stopPropagation(), y());
}
),
p.down.on('mousemove.touchspin touchmove.touchspin', function (t) {
f && (t.stopPropagation(), t.preventDefault());
}),
p.up.on('mousemove.touchspin touchmove.touchspin', function (t) {
f && (t.stopPropagation(), t.preventDefault());
}),
c.on('mousewheel.touchspin DOMMouseScroll.touchspin', function (t) {
if (i.mousewheel && c.is(':focus')) {
var n = t.originalEvent.wheelDelta || -t.originalEvent.deltaY || -t.originalEvent.detail;
t.stopPropagation(), t.preventDefault(), (n < 0 ? m : g)();
}
}),
c.on('touchspin.destroy', function () {
!(function () {
var t = c.parent();
y(),
c.off('.touchspin'),
t.hasClass('bootstrap-touchspin-injected')
? (c.siblings().remove(), c.unwrap())
: (D('.bootstrap-touchspin-injected', t).remove(), t.removeClass('bootstrap-touchspin'));
c.data('alreadyinitialized', !1);
})();
}),
c.on('touchspin.uponce', function () {
y(), g();
}),
c.on('touchspin.downonce', function () {
y(), m();
}),
c.on('touchspin.startupspin', function () {
_();
}),
c.on('touchspin.startdownspin', function () {
w();
}),
c.on('touchspin.stopspin', function () {
y();
}),
c.on('touchspin.updatesettings', function (t, n) {
!(function (t) {
(function (t) {
if (((i = D.extend({}, i, t)), t.postfix)) {
0 === c.parent().find('.bootstrap-touchspin-postfix').length && s.insertAfter(c),
c.parent().find('.bootstrap-touchspin-postfix .input-group-text').text(t.postfix);
}
if (t.prefix) {
0 === c.parent().find('.bootstrap-touchspin-prefix').length && o.insertBefore(c),
c.parent().find('.bootstrap-touchspin-prefix .input-group-text').text(t.prefix);
}
b();
})(t),
h();
var n = p.input.val();
'' !== n &&
((n = Number(i.callback_before_calculation(p.input.val()))),
p.input.val(i.callback_after_calculation(Number(n).toFixed(i.decimals))));
})(n);
});
})();
});
};
});