/* * bootstrap-filestyle * doc: http://markusslima.github.io/bootstrap-filestyle/ * github: https://github.com/markusslima/bootstrap-filestyle * * Copyright (c) 2017 Markus Vinicius da Silva Lima * Version 2.0.0 * Licensed under the MIT license. */ (function($) { "use strict"; var nextId = 0; var Filestyle = function(element, options) { this.options = options; this.$elementFilestyle = []; this.$element = $(element); }; Filestyle.prototype = { clear : function() { this.$element.val(''); this.$elementFilestyle.find(':text').val(''); this.$elementFilestyle.find('.badge').remove(); }, destroy : function() { this.$element.removeAttr('style').removeData('filestyle'); this.$elementFilestyle.remove(); }, disabled : function(value) { if (value === true || value === false) { this.options.disabled = value; this.$element.prop('disabled', this.options.disabled); this.$elementFilestyle.find('label').prop('disabled', this.options.disabled); if (this.options.disabled) this.$elementFilestyle.find('label').css('opacity', '0.65'); else this.$elementFilestyle.find('label').css('opacity', '1'); } else { return this.options.disabled; } }, buttonBefore : function(value) { if (value === true) { if (!this.options.buttonBefore) { this.options.buttonBefore = value; if (this.options.input) { this.$elementFilestyle.remove(); this.constructor(); this.pushNameFiles(); } } } else if (value === false) { if (this.options.buttonBefore) { this.options.buttonBefore = value; if (this.options.input) { this.$elementFilestyle.remove(); this.constructor(); this.pushNameFiles(); } } } else { return this.options.buttonBefore; } }, input : function(value) { if (value === true) { if (!this.options.input) { this.options.input = value; if (this.options.buttonBefore) { this.$elementFilestyle.append(this.htmlInput()); } else { this.$elementFilestyle.prepend(this.htmlInput()); } this.pushNameFiles(); this.$elementFilestyle.find('.group-span-filestyle').addClass('input-group-btn'); } } else if (value === false) { if (this.options.input) { this.options.input = value; this.$elementFilestyle.find(':text').remove(); this.$elementFilestyle.find('.group-span-filestyle').removeClass('input-group-btn'); } } else { return this.options.input; } }, size : function(value) { if (value !== undefined) { this.options.size = value; var btn = this.$elementFilestyle.find('label'), input = this.$elementFilestyle.find('input'); btn.removeClass('btn-lg btn-sm'); input.removeClass('form-control-lg form-control-sm'); if (this.options.size != 'nr') { btn.addClass('btn-' + this.options.size); input.addClass('form-control-' + this.options.size); } } else { return this.options.size; } }, placeholder : function(value) { if (value !== undefined) { this.options.placeholder = value; this.$elementFilestyle.find('input').attr('placeholder', value); } else { return this.options.placeholder; } }, text : function(value) { if (value !== undefined) { this.options.text = value; this.$elementFilestyle.find('label .text').html(this.options.text); } else { return this.options.text; } }, btnClass : function(value) { if (value !== undefined) { this.options.btnClass = value; this.$elementFilestyle.find('label').attr({ 'class' : 'btn ' + this.options.btnClass + ' btn-' + this.options.size }); } else { return this.options.btnClass; } }, badge : function(value) { if (value === true) { this.options.badge = value; var files = this.pushNameFiles(); this.$elementFilestyle.find('label').append('
'); } else if (value === false) { this.options.badge = value; this.$elementFilestyle.find('.badge').remove(); } else { return this.options.badge; } }, badgeName : function(value) { if (value !== undefined) { this.options.badgeName = value; this.$elementFilestyle.find('.badge').attr({ 'class' : 'badge ' + this.options.badgeName }); } else { return this.options.badgeName; } }, htmlIcon : function(value) { if (value !== undefined) { this.options.htmlIcon = value; } return this.options.htmlIcon; }, htmlInput : function() { if (this.options.input) { return ' '; } else { return ''; } }, // puts the name of the input files // return files pushNameFiles : function() { var content = '', files = []; if (this.$element[0].files === undefined) { files[0] = { 'name' : this.$element[0] && this.$element[0].value }; } else { files = this.$element[0].files; } for (var i = 0; i < files.length; i++) { content += files[i].name.split("\\").pop() + ', '; } if (content !== '') { this.$elementFilestyle.find(':text').val(content.replace(/\, $/g, '')); } else { this.$elementFilestyle.find(':text').val(''); } return files; }, constructor : function() { var _self = this, html = '', id = _self.$element.attr('id'), files = [], btn = '', $label; if (id === '' || !id) { id = 'filestyle-' + nextId; _self.$element.attr({ 'id' : id }); nextId++; } btn = ' '; html = _self.options.buttonBefore ? btn + _self.htmlInput() : _self.htmlInput() + btn; _self.$elementFilestyle = $('