From 0b7202792ba9961b2b7b9784cd5b285d09fc3417 Mon Sep 17 00:00:00 2001 From: Aliaksandr Buhayeu Date: Wed, 20 May 2015 16:48:25 +0300 Subject: [PATCH] Implement support for multiply SGA elements at one vertical - rewrite change event on fileupload object to prevent recursion of a call stack --- edx_sga/static/js/src/edx_sga.js | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/edx_sga/static/js/src/edx_sga.js b/edx_sga/static/js/src/edx_sga.js index e41890cb..38db877b 100644 --- a/edx_sga/static/js/src/edx_sga.js +++ b/edx_sga/static/js/src/edx_sga.js @@ -27,7 +27,7 @@ function StaffGradedAssignmentXBlock(runtime, element) { var content = $(element).find('#sga-content').html(template(state)); // Set up file upload - $(content).find('.fileupload').fileupload({ + var fileUpload = $(content).find('.fileupload').fileupload({ url: uploadUrl, add: function(e, data) { var do_upload = $(content).find('.upload').html(''); @@ -100,6 +100,8 @@ function StaffGradedAssignmentXBlock(runtime, element) { } } }); + + updateChangeEvent(fileUpload); } function renderStaffGrading(data) { @@ -133,7 +135,7 @@ function StaffGradedAssignmentXBlock(runtime, element) { $(element).find('#grade-info .fileupload').each(function() { var row = $(this).parents("tr"); var url = staffUploadUrl + "?module_id=" + row.data("module_id"); - $(this).fileupload({ + var fileUpload = $(this).fileupload({ url: url, progressall: function(e, data) { var percent = parseInt(data.loaded / data.total * 100, 10); @@ -147,6 +149,8 @@ function StaffGradedAssignmentXBlock(runtime, element) { 3000); } }); + + updateChangeEvent(fileUpload); }); } @@ -204,6 +208,24 @@ function StaffGradedAssignmentXBlock(runtime, element) { }); } + function updateChangeEvent(fileUploadObj) { + fileUploadObj.off('change').on('change', function (e) { + var that = $(this).data('blueimpFileupload'), + data = { + fileInput: $(e.target), + form: $(e.target.form) + }; + + that._getFileInputFiles(data.fileInput).always(function (files) { + data.files = files; + if (that.options.replaceFileInput) { + that._replaceFileInput(data.fileInput); + } + that._onAdd(e, data); + }); + }); + } + $(function($) { // onLoad var block = $(element).find('.sga-block'); var state = block.attr('data-state');