diff -r fd14daa4b45a -r 7b281ac17abd app/soc/content/js/duplicate-slots-090505.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/soc/content/js/duplicate-slots-090505.js Sat May 09 01:37:21 2009 +0200 @@ -0,0 +1,191 @@ +var duplicateSlots = new function() { + // this variable will contain all the org details, and filled + // incrementally + var orgs_details = {}; + // this variable will contain all student/proposal data details, + // filled incrementally + var assigned_proposals = new Array(); + + // public function to begin iterating load of JSONs and then call printing + // of duplicates + + this.showDuplicatesInit = function() { + + html_string = ''; + // Remember this object for Javascript scoping + var this_object = this; + var NUMBER_OF_ORGS = number_of_orgs; + var OFFSET_LENGTH = offset_length; + // Variables to handle progress bar updating + var ITERATIONS = (number_of_orgs % offset_length)==0 ? Math.floor(number_of_orgs/offset_length) : Math.floor(number_of_orgs/offset_length)+1; + + if (ITERATIONS==0) { + $("#div_duplicate_slots").html("No org slots to process"); + return; + } + + var successful_calls = 0; + + $("#id_button_duplicate_slots").fadeOut("slow", + function() { + $("#duplicates_progress_bar").progressBar(0); + $("#description_done").html(""); + // For every ajax success, bind this function to update user feedback + $(this).bind("ajaxSuccess", function() { + successful_calls++; + var percentage = Math.floor(100 * (successful_calls) / (ITERATIONS)); + $("#duplicates_progress_bar").progressBar(percentage); + $("#description_progressbar").html(" Processed orgs chunk " + (successful_calls) + "/" + ITERATIONS); + // If this is the last call, feedback the user and print the duplicates data + if (successful_calls==ITERATIONS) { + $("#applications_progress_bar").fadeOut("slow", + function() { + $("#duplicates_progress_bar").progressBar(0); + $("#id_button_duplicate_slots").fadeIn("slow"); + } + ); + $("#description_progressbar").html(""); + $("#description_done").html(" Done!"); + $("#duplicates_progress_bar").fadeOut("slow", + function() { + $("#id_button_duplicate_slots").val("Recalculate").fadeIn("slow", + function() { + // Call printing to HTML function with correct scope + printDuplicatesAndSendJSON.call(this_object); + } + ); + } + ); + } + }); + // Call the showDuplicates function for the first time with correct scope + $("#duplicates_progress_bar").fadeIn("slow", showDuplicates.apply(this_object,[url_to_query,OFFSET_LENGTH,NUMBER_OF_ORGS])); + } + ); + } + + function showDuplicates(url_to_query,OFFSET_LENGTH,NUMBER_OF_ORGS) { + var current_offset = 0; + orgs_details = {}; + assigned_proposals = new Array(); + + // Here Ajax call is handled + setTimeout(function() { + $.ajax({ + cache:false, + mode: "sync", + type: "GET", + timeout: 1000000, + dataType: "json", + url: "/program/assigned_proposals/"+url_to_query+"?limit="+OFFSET_LENGTH+"&offset="+current_offset, + success: function (data, textStatus) { + if (data) { + // Load JSON data + loadSingleJSONData(data); + } + }, + error: function(XMLHttpRequest, textStatus, errorThrown) { + // if there is an error return the button and leave a try again message + if (XMLHttpRequest!=undefined) { + $("#id_button_duplicate_slots").fadeIn("slow", function() { + $("#description_done").html(" Error encountered, try again"); + }); + } + } + }); + current_offset+=OFFSET_LENGTH; + if (current_offsetNo duplicate slots found"); + } + // at the end, send the JSON for caching purposes + $.ajax({ + url: location.href, + type: 'POST', + processData: true, + data: {result: JSON.stringify(to_json)}, + contentType: 'application/json', + dataType: 'json', + }); + } + + // public function to output actual HTML out of the data (cached or not) + this.showDuplicatesHtml = function(orgs_details,student,student_key,proposals) { + if (html_string == '') { + $("#div_duplicate_slots").html(''); + html_string=''; + $("#div_duplicate_slots").html(html_string); + } +}