Renamed duplicate-slots.js to prepare for changes.
Patch by: Lennard de Rijk
Reviewed by: to-be-reviewed
--- a/app/soc/content/js/duplicate-slots-090324.js Mon Mar 30 19:46:41 2009 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,181 +0,0 @@
-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() {
-
- // 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;
- 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("<strong> Done!</strong>");
- $("#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;
-
- // Here Ajax call is handled
- setTimeout(function() {
- $.ajax({
- cache:false,
- mode: "sync",
- type: "POST",
- timeout: 1000000,
- dataType: "json",
- url: "/program/assigned_proposals/"+url_to_query+"?limit="+OFFSET_LENGTH+"&offset="+current_offset+"&_="+(new Date().getTime()),
- 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("<strong class='error'> Error encountered, try again</strong>");
- });
- }
- }
- });
- current_offset+=OFFSET_LENGTH;
- if (current_offset<NUMBER_OF_ORGS) {
- setTimeout(arguments.callee,1);
- }
- },1);
- // This prevent page reloading after each ajax call
- return false;
- }
-
- // private function to load a JSON and pushing the data to the
- // private global variables
- function loadSingleJSONData(data) {
- if (data) {
- // pushing org details
- for (var org_key in data.data.orgs) {
- orgs_details[org_key] = data.data.orgs[org_key];
- }
- // pushing proposals
- $(data.data.proposals).each(
- function(intIndex, proposal) {
- // if this student_key is not yet present
- if (assigned_proposals[proposal.student_key]==undefined) {
- // create the object and insert general info
- assigned_proposals[proposal.student_key] = {};
- assigned_proposals[proposal.student_key].name = proposal.student_name;
- assigned_proposals[proposal.student_key].contact = proposal.student_contact;
- assigned_proposals[proposal.student_key].proposals = new Array();
- }
- // anyway, push the accepted proposals
- assigned_proposals[proposal.student_key].proposals.push(
- {
- "org_key" : proposal.org_key,
- "proposal_key" : proposal.key_name,
- "proposal_title": proposal.proposal_title
- }
- );
- }
- );
- }
- }
-
- // private function to generate the JSON to send for caching and calling
- // the actual function that will print the data
- function printDuplicatesAndSendJSON() {
- // JSON skeleton that need to be sent to the server
- var to_json = {
- "data": {
- "orgs" : orgs_details,
- "students": {}
- }
- }
- // for every student...
- for (var student_key in assigned_proposals) {
- var accepted_proposals = assigned_proposals[student_key].proposals.length;
- // if accepted proposal are less than 2, then ignore and continue the iteration
- if (accepted_proposals<2) continue;
- var student = assigned_proposals[student_key];
- // push this student to the caching JSON
- to_json.data.students[student_key] = student;
- var proposals = student.proposals;
- // call the function that prints the output html
- this.showDuplicatesHtml(orgs_details,student,student_key,proposals);
- }
- if (html_string=="") {
- $("#div_duplicate_slots").html("<strong>No duplicate slots found</strong>");
- }
- // 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==='') {
- html_string='<ul>';
- }
- html_string+= '<li>Student: <strong><a href="/student/show/'+student_key+'">'+student.name+'</a></strong> (<a href="mailto:'+student.contact+'">'+student.contact+'</a>)';
- html_string+='<ul>';
- $(proposals).each(
- function (intIndex, proposal) {
- html_string+='<li>Organization: <a href="/org/show/'+proposal.org_key+'">'+orgs_details[proposal.org_key].name+'</a>, admin: '+orgs_details[proposal.org_key].admin_name+' (<a href="mailto:'+orgs_details[proposal.org_key].admin_email+'">'+orgs_details[proposal.org_key].admin_email+'</a>)</li>';
- html_string+='<ul><li>Proposal: <a href="/student_proposal/show/'+proposal.proposal_key+'">'+proposal.proposal_title+'</a></li></ul>';
- }
- );
- html_string+='</ul></li>';
- html_string+='</ul>';
- $("#div_duplicate_slots").html(html_string);
- }
-}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/app/soc/content/js/duplicate-slots-090330.js Mon Mar 30 21:12:44 2009 +0000
@@ -0,0 +1,181 @@
+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() {
+
+ // 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;
+ 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("<strong> Done!</strong>");
+ $("#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;
+
+ // Here Ajax call is handled
+ setTimeout(function() {
+ $.ajax({
+ cache:false,
+ mode: "sync",
+ type: "POST",
+ timeout: 1000000,
+ dataType: "json",
+ url: "/program/assigned_proposals/"+url_to_query+"?limit="+OFFSET_LENGTH+"&offset="+current_offset+"&_="+(new Date().getTime()),
+ 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("<strong class='error'> Error encountered, try again</strong>");
+ });
+ }
+ }
+ });
+ current_offset+=OFFSET_LENGTH;
+ if (current_offset<NUMBER_OF_ORGS) {
+ setTimeout(arguments.callee,1);
+ }
+ },1);
+ // This prevent page reloading after each ajax call
+ return false;
+ }
+
+ // private function to load a JSON and pushing the data to the
+ // private global variables
+ function loadSingleJSONData(data) {
+ if (data) {
+ // pushing org details
+ for (var org_key in data.data.orgs) {
+ orgs_details[org_key] = data.data.orgs[org_key];
+ }
+ // pushing proposals
+ $(data.data.proposals).each(
+ function(intIndex, proposal) {
+ // if this student_key is not yet present
+ if (assigned_proposals[proposal.student_key]==undefined) {
+ // create the object and insert general info
+ assigned_proposals[proposal.student_key] = {};
+ assigned_proposals[proposal.student_key].name = proposal.student_name;
+ assigned_proposals[proposal.student_key].contact = proposal.student_contact;
+ assigned_proposals[proposal.student_key].proposals = new Array();
+ }
+ // anyway, push the accepted proposals
+ assigned_proposals[proposal.student_key].proposals.push(
+ {
+ "org_key" : proposal.org_key,
+ "proposal_key" : proposal.key_name,
+ "proposal_title": proposal.proposal_title
+ }
+ );
+ }
+ );
+ }
+ }
+
+ // private function to generate the JSON to send for caching and calling
+ // the actual function that will print the data
+ function printDuplicatesAndSendJSON() {
+ // JSON skeleton that need to be sent to the server
+ var to_json = {
+ "data": {
+ "orgs" : orgs_details,
+ "students": {}
+ }
+ }
+ // for every student...
+ for (var student_key in assigned_proposals) {
+ var accepted_proposals = assigned_proposals[student_key].proposals.length;
+ // if accepted proposal are less than 2, then ignore and continue the iteration
+ if (accepted_proposals<2) continue;
+ var student = assigned_proposals[student_key];
+ // push this student to the caching JSON
+ to_json.data.students[student_key] = student;
+ var proposals = student.proposals;
+ // call the function that prints the output html
+ this.showDuplicatesHtml(orgs_details,student,student_key,proposals);
+ }
+ if (html_string=="") {
+ $("#div_duplicate_slots").html("<strong>No duplicate slots found</strong>");
+ }
+ // 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==='') {
+ html_string='<ul>';
+ }
+ html_string+= '<li>Student: <strong><a href="/student/show/'+student_key+'">'+student.name+'</a></strong> (<a href="mailto:'+student.contact+'">'+student.contact+'</a>)';
+ html_string+='<ul>';
+ $(proposals).each(
+ function (intIndex, proposal) {
+ html_string+='<li>Organization: <a href="/org/show/'+proposal.org_key+'">'+orgs_details[proposal.org_key].name+'</a>, admin: '+orgs_details[proposal.org_key].admin_name+' (<a href="mailto:'+orgs_details[proposal.org_key].admin_email+'">'+orgs_details[proposal.org_key].admin_email+'</a>)</li>';
+ html_string+='<ul><li>Proposal: <a href="/student_proposal/show/'+proposal.proposal_key+'">'+proposal.proposal_title+'</a></li></ul>';
+ }
+ );
+ html_string+='</ul></li>';
+ html_string+='</ul>';
+ $("#div_duplicate_slots").html(html_string);
+ }
+}
--- a/app/soc/templates/soc/base.html Mon Mar 30 19:46:41 2009 +0000
+++ b/app/soc/templates/soc/base.html Mon Mar 30 21:12:44 2009 +0000
@@ -103,7 +103,7 @@
<script type="text/javascript" src="/soc/content/js/slot-allocator-090320.js"></script>
{% endif %}
{% if uses_duplicates %}
- <script type="text/javascript" src="/soc/content/js/duplicate-slots-090324.js"></script>
+ <script type="text/javascript" src="/soc/content/js/duplicate-slots-090330.js"></script>
{% endif %}
</head>
{% endblock %}