define(function (require) { var Marionette = require('backbone.marionette') , _ = require('underscore') , Plupload = require('plupload') , handlebars = require('handlebars'); // Include the file-upload.html var uploadTpl = require('hbs!file-upload'); return Marionette.ItemView.extend({ className: "file-uploader", template: uploadTpl, uploader: null, options: {}, successMessage: 'File uploaded successfully', ui: { message: '.message', fileList: '#filelist', browseButton: '#file-select', uploadButton: '#file-upload', progressContainer: '.progress', progressBar: '.progress .bar' }, events: { 'click #file-upload': 'startUpload' }, initialize: function(options) { if(options) { this.options = options; this.successMessage = options.successMessage || this.successMessage; } }, onRender: function() { this.ui.progressContainer.hide(); var defaults = { runtimes : 'gears,html5,flash,silverlight,browserplus', browse_button : this.ui.browseButton.get(0), container : this.el, multi_selection: false, max_file_size : '10mb', filters : [ {title : "CSV files", extensions : "csv"} ], resize : {width : 320, height : 240, quality : 90} }; this.uploader = new Plupload.Uploader(_.defaults(this.options, defaults)); this.uploader.init(); this.uploader.bind('FilesAdded', _.bind(this.filesAdded, this)); this.uploader.bind('UploadProgress', _.bind(this.uploadProgress, this)); this.uploader.bind('FileUploaded', _.bind(this.fileUploaded, this)); this.uploader.bind('Error', _.bind(this.handleUploadErrors, this)); }, startUpload: function(e) { e.preventDefault(); this.uploader.start(); this.ui.progressContainer.show(); }, filesAdded: function(up, files) { var html = ""; $.each(files, function(i, file) { html += '