Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Autoría | Ultima modificación | Ver Log |

(function($){
    $.fn.extend({
        inputNumberFormat: function(options) {
            this.defaultOptions = {
                'decimal': 2,
                'decimalAuto': 2,
                'separator': '.',
                'separatorAuthorized': ['.', ',']
            };

            var settings = $.extend({}, this.defaultOptions, options);

            var matchValue = function(value, options) {
                var regexp = "^[0-9]+";

                if(options.decimal) {
                    regexp += "["+options.separatorAuthorized.join("")+"]?[0-9]{0," + options.decimal + "}";
                }

                regexp = new RegExp(regexp + "$");

                return value.match(regexp);
            }

            var formatValue = function(value, options) {
                var formatedValue = value;

                if(!formatedValue) {
                    return formatedValue;
                }

                formatedValue = formatedValue.replace(",", options.separator);

                if(options.decimal && options.decimalAuto) {

                    formatedValue = Math.round(formatedValue*Math.pow(10,options.decimal))/(Math.pow(10,options.decimal))+"";

                    if(formatedValue.indexOf(options.separator) === -1) {
                        formatedValue += options.separator;
                    }

                    var nbDecimalToAdd = options.decimalAuto - formatedValue.split(options.separator)[1].length;
                    for(var i=1; i <= nbDecimalToAdd; i++) {
                        formatedValue += "0";
                    }
                }

                return formatedValue;
            }

            return this.each(function() {
                var $this = $(this);

                $this.on('keypress', function(e) {
                    if(e.ctrlKey) {

                        return;
                    }

                    if(e.key.length > 1) {

                        return;
                    }

                    var options = $.extend({}, settings, $(this).data());

                    var beginVal = $(this).val().substr(0, e.target.selectionStart);
                    var endVal = $(this).val().substr(e.target.selectionEnd, $(this).val().length - 1);
                    var val = beginVal + e.key + endVal;

                    if(!matchValue(val, options)) {

                        e.preventDefault();
                        return;
                    }

                });

                $this.on('blur', function(e) {
                    var options = $.extend({}, settings, $(this).data());

                    $(this).val(formatValue($(this).val(), options));
                });

                $this.on('change', function(e) {
                    var options = $.extend({}, settings, $(this).data());

                    $(this).val(formatValue($(this).val(), options));
                });
            });
        }
    });
})(jQuery);