(function($) {
var AccessibleUpload = function(element, options) {
this.accessibleUpload = $(element);
// Default module configuration
this.defaults = {
labels: {
selectedFileCount: 'files selected'
}
};
// Merge default classes with window.project.classes
this.classes = $.extend(true, this.defaults.classes, (window.project ? window.project.classes : {}));
// Merge default labels with window.project.labels
this.labels = $.extend(true, this.defaults.labels, (window.project ? window.project.labels : {}));
// Merge default config with custom config
this.config = $.extend(true, this.defaults, options || {});
this.init();
};
$.extend(AccessibleUpload.prototype, {
// Component initialization
init: function(options) {
var holder = this._createFilenameHolder(this);
$(holder).insertAfter(this.accessibleUpload);
this.accessibleUpload.next('.lbo-aif').on('click', 'button', {
input: this
}, $.proxy(this._fileRemove, this));
this.accessibleUpload.on('change.lbo-aif', '', {
holder: holder
}, $.proxy(this._change, this));
this.accessibleUpload.change($.proxy(function() {
this.accessibleUpload.trigger('change.aif');
}, this));
},
destroy: function() {
this.accessibleUpload.next('.aif').remove();
this.accessibleUpload.unbind('.aif');
},
_createFilenameHolder: function(input) {
return '';
},
_change: function(event) {
var label = '';
if (this.title) {
label = '' + this.title + '';
}
var filename = this._getFilename($(event.currentTarget));
this.accessibleUpload.hide();
if (this.accessibleUpload.next('.lbo-aif').find('button').length === 0) {
this.accessibleUpload.next('.lbo-aif').append('');
}
this.accessibleUpload.next('.lbo-aif')
.show()
.find('.lbo-aif-filename')
.html(label + ' ' + filename)
.attr('tabindex', 0)
.focus();
},
_getFilename: function(input) {
if (input.prop('files').length > 1) {
return input.prop('files').length + ' ' + this.labels.selectedFileCount;
}
else {
filename = input.val().split('\\');
return filename.pop();
}
},
_fileRemove: function(event) {
event.preventDefault();
this.accessibleUpload.next('.lbo-aif').remove();
var clone = $(event.data.input.accessibleUpload).clone();
$(event.data.input.accessibleUpload).replaceWith(clone);
clone.show()
.focus()
.accessibleUpload();
return false;
}
});
$.fn.accessibleUpload = function(options) {
return this.each(function() {
var element = $(this);
// Return early if this element already has a plugin instance
if (element.data('accessibleUpload')) return;
// pass options to plugin constructor
var accessibleUpload = new AccessibleUpload(this, options);
// Store plugin object in this element's data
element.data('accessibleUpload', accessibleUpload);
});
};
})(jQuery);