(function () {
'use strict';
define(['jquery', 'underscore'], function ($, _) {
var ui = {
uploadButton: '#upload_button',
uploadInputs: 'input.file-upload',
textAreas: '#textboxes textarea.text-upload',
filenameInputs: '#textboxes input[name^=filename]',
textAreaTabsContainer: '#textboxes .tab-content',
textAreaTabs: '#textboxes .tab-content .tab-pane',
tabNavigation: '#textboxes ul.nav',
tabPane: '.tab-pane',
panelBody: '.panel-body'
};
var PrivateFunctions = {
filesForInput: function (input, callback) {
var files = $(input).prop('files');
for (var i = 0; i < files.length; i++) {
callback(files[i]);
}
},
filesForInputs: function (callback) {
_.each($(ui.uploadInputs), function (input) {
this.filesForInput(input, callback);
}, this);
},
checkFileUpload: function (event) {
var totalSize = 0;
var filesCount = 0;
this.filesForInputs(function (file) {
filesCount++;
totalSize += file.size;
});
var uploadButton = $(ui.uploadButton);
if (filesCount > appConfig.maxFilesPerUpload) {
uploadButton.html('Too many files').attr('disabled', true);
} else if (totalSize > appConfig.maxUploadSize) {
uploadButton.html('File(s) too big').attr('disabled', true);
} else {
uploadButton.html('Upload/Paste it!').attr('disabled', false);
}
},
hasNoFiles: function (input) {
return $(input).prop('files').length === 0;
},
appendUploadInput: function (event) {
if (_.any($(ui.uploadInputs), this.hasNoFiles)) { return; }
$(event.target).parent().append($(event.target).clone().val(""), $('
'));
},
hasNoText: function (textArea) {
return !$(textArea).val();
},
setAttributeIndices: function (tab, index) {
tab.attr('id', tab.attr('id').replace(/\d+$/, index));
_.each(tab.find('input,textarea'), function (input) {
var name = $(input).attr('name');
$(input).attr('name', name.replace(/\[\d+\]/, '[' + index + ']'));
});
},
clearValues: function (tab) {
tab.find('input,textarea').val('');
},
tabNavigationItem: function (index) {
var link = $('').attr({
href: '#text-upload-tab-' + index,
}).html('Paste ' + index);
return $('').append(link);
},
appendTextField: function (event) {
if (_.any($(ui.textAreas), this.hasNoText)) { return; }
var newTab = $(ui.textAreaTabs).last().clone();
var index = parseInt(newTab.attr('id').match(/\d+$/)[0]) + 1;
this.setAttributeIndices(newTab, index);
this.clearValues(newTab);
newTab.toggleClass('active', false);
$(ui.textAreaTabsContainer).append(newTab);
$(ui.tabNavigation).append(this.tabNavigationItem(index));
},
setTabHeader: function (event) {
var name = $(event.target).val();
if (_.isEmpty(name)) {
var tabPane = $(event.target).closest(ui.tabPane);
var index = tabPane.attr('id').match(/\d+$/)[0];
name = 'Paste ' + index;
}
$(ui.tabNavigation).find('li.active a').html(name);
},
setupEvents: function () {
if (window.File && window.FileList) {
$(document).on(
'change', ui.uploadInputs,
_.bind(this.checkFileUpload, this)
);
}
$(document).on(
'change', ui.uploadInputs,
_.bind(this.appendUploadInput, this)
);
$(document).on(
'input propertychange', ui.textAreas,
_.bind(this.appendTextField, this)
);
$(document).on(
'input propertychange', ui.filenameInputs,
_.bind(this.setTabHeader, this)
);
}
};
var Uploader = {
initialize: function () {
PrivateFunctions.setupEvents();
$(ui.textAreas).trigger("propertychange");
}
};
return Uploader;
});
})();