-
Notifications
You must be signed in to change notification settings - Fork 0
/
jmultifile.js
120 lines (105 loc) · 4.86 KB
/
jmultifile.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
(function( $ ){
$.jmultifile = function(element, options) {
var defaults = {
'label' : 'Присоединить файлы (до 10 файлов, jpg,png,doc,docx и др., не более 5Мб каждый)',
'containerClass' : 'form-group col-md-12',
'linkId' : 'file-add-more',
'linkLabel' : 'Добавить еще файл',
'afterInputContainer' : 'p',
'afterInputClass' : 'add_file',
'afterInputText' : 'Выберите файл',
'wrapperFileClass' : 'btn btn-primary btn-file',
'wrapperFileId' : 'file-wrapper',
'wrapperBlockClass' : 'file-block',
'maxSize' : 5,
'maxFile' : 5,
'allowedExt': 'all',
'errorSize' : 'Неверный размер файла! Выберите файл объемом менее 5Мб',
'errorType' : 'Неверный формат файла!'
};
var plugin = this;
plugin.settings = {'emptyBlock':''};
var $element = $(element),
element = element;
plugin.init = function() {
plugin.settings = $.extend({}, defaults, options);
var $wrapperClasses = plugin.settings.wrapperFileClass.split(' ');
var $container = $("<div>", {class: plugin.settings.containerClass});
var $wrapper = $("<div>", {class: plugin.settings.wrapperBlockClass});
var $after = $("<"+plugin.settings.afterInputContainer+">", {class: plugin.settings.afterInputClass}).html(plugin.settings.afterInputText);
var $link = $("<a>", {id: plugin.settings.linkId});
$link.attr('href','#').html(plugin.settings.linkLabel);
$container.append(
$("<label>").html(plugin.settings.label)
).append(
$wrapper.append(
$("<div>", {class: plugin.settings.wrapperFileClass, id: plugin.settings.wrapperFileId})
).append(
$after
)
);
$element.after($container);
$container.after($link);
var $newinput = $element.clone();
$newinput.appendTo('div#'+plugin.settings.wrapperFileId);
$element.remove();
plugin.settings.emptyBlock = $wrapper.clone();
$(document).on('change','div.'+$wrapperClasses.join('.')+' input',plugin.appendFile);
$(document).on('click','a#'+plugin.settings.linkId,plugin.appendBlock);
};
plugin.appendFile = function( ) {
var fileName = $(this).val().split('/').pop().split('\\').pop();
var tmp = fileName.split('.');
var types = null;
var flag = false;
if(plugin.settings.allowedExt!='all'){
types = plugin.settings.allowedExt.split(' ');
}
if(types){
for(var i=0;i<types.length;i++){
if(tmp[1]==types[i]){
flag = true;
}
}
if(flag){
$(this).closest('.'+plugin.settings.wrapperBlockClass).find(plugin.settings.afterInputContainer).text(fileName);
}else{
$(this).closest('.'+plugin.settings.wrapperBlockClass).find(plugin.settings.afterInputContainer).text(plugin.settings.errorType);
$(this).replaceWith($(this).clone());
return;
}
}else{
$(this).closest('.'+plugin.settings.wrapperBlockClass).find(plugin.settings.afterInputContainer).text(fileName);
}
if ( window.FileReader && window.File && window.FileList && window.Blob )
{
var size = $(this)[0].files[0].size;
if(size>plugin.settings.maxSize*1024*1024){
$(this).closest('.'+plugin.settings.wrapperBlockClass).find(plugin.settings.afterInputContainer).text(plugin.settings.errorSize);
$(this).replaceWith($(this).clone());
}
}
};
plugin.appendBlock = function( ) {
var count = $('.'+plugin.settings.wrapperBlockClass).length;
if(count==plugin.settings.maxFile){
return false;
}
if(count==plugin.settings.maxFile-1){
$(this).hide();
}
var block = plugin.settings.emptyBlock.clone().css('clear','both');
$(this).prev().append(block);
return false;
};
plugin.init();
};
$.fn.jmultifile = function(options) {
return this.each(function() {
if (undefined == $(this).data('jmultifile')) {
var plugin = new $.jmultifile(this, options);
$(this).data('jmultifile', plugin);
}
});
};
})( jQuery );