;(function ($) {
'use strict';
$.fn.fileinput = function (o) {
o = $.extend({
title: 'Attach Resume* (PDF, DOC) (2 MB)',
multipleText: '{0} files',
showMultipleNames: false,
buttonClass: 'btn btn-default',
selectedClass: 'file-selected',
clearButton: '',
complete: function () {}
}, o || {});
this.each(function (i, elem) {
var $input = $(elem), options = $.extend(true, o, dataToOptions($input));
if (typeof $input.attr('data-fileinput-disabled') !== 'undefined') {
return;
}
// set title option from title attribute
var title = options.title;
if (!!$input.attr('title')) {
title = $input.attr('title');
}
// set buttonClass option from class attribute
var buttonClass = options.buttonClass;
if (!!$input.attr('class')) {
buttonClass = $input.attr('class');
}
$input.wrap('');
$input.closest('.fileinput').prepend($('').html(title));
$input.closest('.fileinput').wrap($(''));
if (typeof options.complete === 'function') {
options.complete.call(this);
}
}).promise().done(function () {
// change
$(document).on('change', '.fileinput input[type=file]', function () {
var $input = $(this),
$wrapper = $input.closest('.fileinput-wrapper'),
fileName = $input.val(),
options = $.extend(true, o, dataToOptions($input));
// Remove any previous file names
$wrapper.removeClass(options.selectedClass).find('.fileinput-name').remove();
if (!!$input.prop('files') && $input.prop('files').length > 1) {
if (options.showMultipleNames) {
var names = [];
for (var i = 0, numFiles = $input[0].files.length; i < numFiles; i++) {
names.push($input[0].files[i].name);
}
fileName = names.join(', ');
} else {
fileName = options.multipleText.replace('{0}', $input[0].files.length);
}
} else {
fileName = fileName.substring(fileName.lastIndexOf('\\') + 1, fileName.length);
}
// Don't try to show the name if there is none
if (!fileName) {
return;
}
// Print the fileName aside (right after the the button)
$wrapper.addClass(options.selectedClass)
.append('' + fileName + options.clearButton + '');
});
// clear
$(document).on('click', '.fileinput-clear', function (e) {
e.preventDefault();
var $wrapper = $(this).closest('.fileinput-wrapper'),
$input = $wrapper.find('input[type=file]'),
options = $.extend(true, o, dataToOptions($input));
// clear input by cloning them
$input.replaceWith($input.val('').clone(true));
$wrapper.find('.fileinput-name').remove();
$wrapper.find('input').trigger('change').trigger('input');
$wrapper.removeClass(options.selectedClass);
});
});
// Camelize data-attributes
function dataToOptions(elem) {
function upper(m, l) {
return l.toUpper();
}
var options = {};
var data = elem.data();
for (var key in data) {
if (!data.hasOwnProperty(key)) {
continue;
}
var value = data[key];
if (value === 'yes' || value === 'y') {
value = true;
}
else if (value === 'no' || value === 'n') {
value = false;
}
options[key.replace(/-(\w)/g, upper)] = value;
}
return options;
}
};
})(jQuery);