%PDF- %PDF-
| Direktori : /home/cargonizer/public_html/admin/assets/plugins/bootstrap-touchspin/ |
| Current File : /home/cargonizer/public_html/admin/assets/plugins/bootstrap-touchspin/bootstrap.touchspin.js |
/*jshint undef: true, unused:true */
/*global jQuery: true */
/*!=========================================================================
* Bootstrap TouchSpin
* v2.5.0
*
* A mobile and touch friendly input spinner component for Bootstrap 3.
*
* https://github.com/istvan-meszaros/bootstrap-touchspin
* http://www.virtuosoft.eu/code/bootstrap-touchspin/
*
* Copyright 2013 István Ujj-Mészáros
*
* Thanks for the contributors:
* Stefan Bauer - https://github.com/sba
* amid2887 - https://github.com/amid2887
*
* 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($) {
"use strict";
$.fn.TouchSpin = function(options) {
var defaults = {
min: 0,
max: 100,
initval: "",
step: 1,
decimals: 0,
stepinterval: 100,
forcestepdivisibility: 'round', // none | floor | round | ceil
stepintervaldelay: 500,
prefix: "",
postfix: "",
prefix_extraclass: "",
postfix_extraclass: "",
booster: true,
boostat: 10,
maxboostedstep: false,
mousewheel: true,
buttondown_class: "btn btn-default",
buttonup_class: "btn btn-default"
};
return this.each(function() {
var settings,
originalinput = $(this),
originalinput_data = originalinput.data(),
container,
elements,
value,
downSpinTimer,
upSpinTimer,
downDelayTimeout,
upDelayTimeout,
spincount = 0,
spinning = false;
init();
function init() {
if (originalinput.data("alreadyinitialized")) {
return;
}
originalinput.data("alreadyinitialized", true);
if (!originalinput.is("input")) {
console.log("Must be an input.");
return;
}
_initSettings();
_setInitval();
_checkValue();
_buildHtml();
_initElements();
_bindEvents();
_bindEventsInterface();
}
function _setInitval() {
if (settings.initval !== "" && originalinput.val() === "") {
originalinput.val(settings.initval);
}
}
function changeSettings(newsettings) {
_updateSettings(newsettings);
_checkValue();
var value = Number(elements.input.val());
elements.input.val(value.toFixed(settings.decimals));
}
function _initSettings() {
settings = $.extend({}, defaults, originalinput_data, options);
}
function _updateSettings(newsettings) {
settings = $.extend({}, settings, newsettings);
}
function _buildHtml() {
var initval = originalinput.val(),
parentelement = originalinput.parent();
if (initval !== "") {
initval = Number(initval).toFixed(settings.decimals);
}
originalinput.data("initvalue", initval).val(initval);
originalinput.addClass("form-control");
$("<style type='text/css'>.bootstrap-touchspin-prefix:empty,.bootstrap-touchspin-postfix:empty{display:none;}</style>").appendTo("head");
if (parentelement.hasClass("input-group")) {
_advanceInputGroup(parentelement);
}
else {
_buildInputGroup();
}
}
function _advanceInputGroup(parentelement) {
parentelement.addClass("bootstrap-touchspin");
var prev = originalinput.prev(),
next = originalinput.next();
var downhtml,
uphtml,
prefixhtml = '<span class="input-group-addon bootstrap-touchspin-prefix">' + settings.prefix + '</span>',
postfixhtml = '<span class="input-group-addon bootstrap-touchspin-postfix">' + settings.postfix + '</span>';
if (prev.hasClass("input-group-btn")) {
downhtml = '<button class="' + settings.buttondown_class + ' bootstrap-touchspin-down" type="button">-</button>',
prev.append(downhtml);
}
else {
downhtml = '<span class="input-group-btn"><button class="' + settings.buttondown_class + ' bootstrap-touchspin-down" type="button">-</button></span>';
$(downhtml).insertBefore(originalinput);
}
if (next.hasClass("input-group-btn")) {
uphtml = '<button class="' + settings.buttonup_class + ' bootstrap-touchspin-up" type="button">+</button>',
next.prepend(uphtml);
}
else {
uphtml = '<span class="input-group-btn"><button class="' + settings.buttonup_class + ' bootstrap-touchspin-up" type="button">+</button></span>';
$(uphtml).insertAfter(originalinput);
}
$(prefixhtml).insertBefore(originalinput);
$(postfixhtml).insertAfter(originalinput);
container = parentelement;
}
function _buildInputGroup() {
var html = '<div class="input-group bootstrap-touchspin"><span class="input-group-btn"><button class="' + settings.buttondown_class + ' bootstrap-touchspin-down" type="button">-</button></span><span class="input-group-addon bootstrap-touchspin-prefix">' + settings.prefix + '</span><span class="input-group-addon bootstrap-touchspin-postfix">' + settings.postfix + '</span><span class="input-group-btn"><button class="' + settings.buttonup_class + ' bootstrap-touchspin-up" type="button">+</button></span></div>';
container = $(html).insertBefore(originalinput);
$(".bootstrap-touchspin-prefix", container).after(originalinput);
if (originalinput.hasClass("input-sm")) {
container.addClass("input-group-sm");
}
else if (originalinput.hasClass("input-lg")) {
container.addClass("input-group-lg");
}
}
function _initElements() {
elements = {
down: $(".bootstrap-touchspin-down", container),
up: $(".bootstrap-touchspin-up", container),
input: $("input", container),
prefix: $(".bootstrap-touchspin-prefix", container).addClass(settings.prefix_extraclass),
postfix: $(".bootstrap-touchspin-postfix", container).addClass(settings.postfix_extraclass)
};
}
function _bindEvents() {
originalinput.on("keydown", function(ev) {
var code = ev.keyCode || ev.which;
if (code === 38) {
if (spinning !== "up") {
upOnce();
startUpSpin();
}
ev.preventDefault();
}
else if (code === 40) {
if (spinning !== "down") {
downOnce();
startDownSpin();
}
ev.preventDefault();
}
});
originalinput.on("keyup", function(ev) {
var code = ev.keyCode || ev.which;
if (code === 38) {
stopSpin();
}
else if (code === 40) {
stopSpin();
}
});
originalinput.on("blur", function() {
_checkValue();
});
elements.down.on("keydown", function(ev) {
var code = ev.keyCode || ev.which;
if (code === 32 || code === 13) {
if (spinning !== "down") {
downOnce();
startDownSpin();
}
ev.preventDefault();
}
});
elements.down.on("keyup", function(ev) {
var code = ev.keyCode || ev.which;
if (code === 32 || code === 13) {
stopSpin();
}
});
elements.up.on("keydown", function(ev) {
var code = ev.keyCode || ev.which;
if (code === 32 || code === 13) {
if (spinning !== "up") {
upOnce();
startUpSpin();
}
ev.preventDefault();
}
});
elements.up.on("keyup", function(ev) {
var code = ev.keyCode || ev.which;
if (code === 32 || code === 13) {
stopSpin();
}
});
elements.down.on("mousedown touchstart", function(ev) {
downOnce();
startDownSpin();
ev.preventDefault();
ev.stopPropagation();
});
elements.up.on("mousedown touchstart", function(ev) {
upOnce();
startUpSpin();
ev.preventDefault();
ev.stopPropagation();
});
elements.up.on("mouseout touchleave touchend touchcancel", function(ev) {
if (!spinning) {
return;
}
ev.stopPropagation();
stopSpin();
});
elements.down.on("mouseout touchleave touchend touchcancel", function(ev) {
if (!spinning) {
return;
}
ev.stopPropagation();
stopSpin();
});
elements.down.on("mousemove touchmove", function(ev) {
if (!spinning) {
return;
}
ev.stopPropagation();
ev.preventDefault();
});
elements.up.on("mousemove touchmove", function(ev) {
if (!spinning) {
return;
}
ev.stopPropagation();
ev.preventDefault();
});
$(document).on("mouseup touchend touchcancel", function(ev) {
if (!spinning) {
return;
}
ev.preventDefault();
stopSpin();
});
$(document).on("mousemove touchmove scroll scrollstart", function(ev) {
if (!spinning) {
return;
}
ev.preventDefault();
stopSpin();
});
if (settings.mousewheel) {
originalinput.on("mousewheel DOMMouseScroll", function(ev) {
var delta = ev.originalEvent.wheelDelta || -ev.originalEvent.detail;
ev.stopPropagation();
ev.preventDefault();
if (delta < 0) {
downOnce();
}
else {
upOnce();
}
});
}
}
function _bindEventsInterface() {
originalinput.on('touchspin.uponce', function() {
stopSpin();
upOnce();
});
originalinput.on('touchspin.downonce', function() {
stopSpin();
downOnce();
});
originalinput.on('touchspin.startupspin', function() {
startUpSpin();
});
originalinput.on('touchspin.startdownspin', function() {
startDownSpin();
});
originalinput.on('touchspin.stopspin', function() {
stopSpin();
});
originalinput.on('touchspin.updatesettings', function(e, newsettings) {
changeSettings(newsettings);
});
}
function _forcestepdivisibility(value) {
switch(settings.forcestepdivisibility) {
case 'round':
return (Math.round(value / settings.step) * settings.step).toFixed(settings.decimals);
break;
case 'floor':
return (Math.floor(value / settings.step) * settings.step).toFixed(settings.decimals);
break;
case 'ceil':
return (Math.ceil(value / settings.step) * settings.step).toFixed(settings.decimals);
break;
default:
return value;
}
}
function _checkValue() {
var val, parsedval, returnval;
val = originalinput.val();
if (val === "") {
return;
}
if (settings.decimals > 0 && val === ".") {
return;
}
parsedval = parseFloat(val);
if (isNaN(parsedval)) {
parsedval = 0;
}
returnval = parsedval;
if (parsedval.toString() !== val) {
returnval = parsedval;
}
if (parsedval < settings.min) {
returnval = settings.min;
}
if (parsedval > settings.max) {
returnval = settings.max;
}
returnval = _forcestepdivisibility(returnval);
if (Number(val).toString() !== returnval.toString()) {
originalinput.val(returnval);
originalinput.trigger("change");
}
}
function _getBoostedStep() {
if (!settings.booster) {
return settings.step;
}
else {
var boosted = Math.pow(2,Math.floor(spincount / settings.boostat)) * settings.step;
if (settings.maxboostedstep) {
if (boosted > settings.maxboostedstep) {
boosted = settings.maxboostedstep;
value = Math.round((value / boosted) * boosted);
}
}
return Math.max(settings.step, boosted);
}
}
function upOnce() {
_checkValue();
value = parseFloat(elements.input.val());
if (isNaN(value)) {
value = 0;
}
var initvalue = value,
boostedstep = _getBoostedStep();
value = value + boostedstep;
if (value > settings.max) {
stopSpin();
value = settings.max;
originalinput.trigger("touchspin.max");
}
elements.input.val(Number(value).toFixed(settings.decimals));
if (initvalue !== value) {
originalinput.trigger("change");
}
}
function downOnce() {
_checkValue();
value = parseFloat(elements.input.val());
if (isNaN(value)) {
value = 0;
}
var initvalue = value,
boostedstep = _getBoostedStep();
value = value - boostedstep;
if (value < settings.min) {
stopSpin();
value = settings.min;
originalinput.trigger("touchspin.min");
}
elements.input.val(value.toFixed(settings.decimals));
if (initvalue !== value) {
originalinput.trigger("change");
}
}
function startDownSpin() {
stopSpin();
spincount = 0;
spinning = "down";
downDelayTimeout = setTimeout(function() {
downSpinTimer = setInterval(function() {
spincount++;
downOnce();
}, settings.stepinterval);
}, settings.stepintervaldelay);
}
function startUpSpin() {
stopSpin();
spincount = 0;
spinning = "up";
upDelayTimeout = setTimeout(function() {
upSpinTimer = setInterval(function() {
spincount++;
upOnce();
}, settings.stepinterval);
}, settings.stepintervaldelay);
}
function stopSpin() {
clearTimeout(downDelayTimeout);
clearTimeout(upDelayTimeout);
clearInterval(downSpinTimer);
clearInterval(upSpinTimer);
spincount = 0;
spinning = false;
}
});
};
})(jQuery);