(function($) {
$.fn.amyuiNumberInput = function(options) {
var c, settings;
if (options == null) {
options = {};
}
settings = $.extend({
prefix: 'ni-'
}, options);
c = function(className) {
return settings.prefix + className;
};
return this.each(function(e) {
var $downBtn, $input, $upBtn, disabled, max, min, step, stepDown, stepUp, wrapper;
$input = $(this);
if ($input.hasClass(c('initialized')) || $input.prop('tagName').toLowerCase() !== 'input') {
return;
}
$input.addClass(c('initialized'));
$input.wrap('
');
wrapper = $input.parent();
if ($input.data('class')) {
wrapper.addClass($input.data('class'));
}
$downBtn = $('').addClass(c('down'));
$upBtn = $('').addClass(c('up'));
wrapper.prepend($downBtn);
wrapper.append($upBtn);
disabled = $input.prop('disabled');
if (disabled) {
wrapper.addClass(c('disabled'));
}
min = typeof $input.prop('min') !== 'undefined' ? parseInt($input.prop('min')) : false;
max = typeof $input.prop('max') !== 'undefined' && (min === false || $input.prop('max') > min) ? parseInt($input.prop('max')) : false;
step = typeof $input.prop('step') !== 'undefined' ? parseInt($input.prop('step')) : 1;
stepUp = function() {
var value;
if ($input.prop('disabled')) {
return;
}
value = parseInt($input.val());
value += step;
if (max !== false && value > max) {
value = max;
}
$input.val(value);
};
stepDown = function() {
var value;
if ($input.prop('disabled')) {
return;
}
value = parseInt($input.val());
value -= step;
if (min !== false && value < min) {
value = min;
}
$input.val(value);
};
$downBtn.on('click', stepDown);
$upBtn.on('click', stepUp);
$input.on('keydown', function(e) {
var w;
w = e.which;
if (w === 38) {
e.preventDefault();
stepUp();
} else if (w === 40) {
e.preventDefault();
stepDown();
}
});
});
};
})(jQuery);