app/soc/content/js/org-accept.js
author Lennard de Rijk <ljvderijk@gmail.com>
Mon, 16 Feb 2009 20:38:35 +0000
changeset 1364 b2709805fafe
parent 1356 32d8d83678cd
child 1367 9899e92121b7
permissions -rw-r--r--
Update org bulk accept script. The script now: 1) leaves correctly control to the browser to update the GUI of the progress bar during ajax communication. 2) Displays an error if something went wrong (I've tried in my box stopping the server while doing the requests), and show a retry button to fetch again the list of the applications that are still not accepted and iterate over them again (seems to recover correctly restarting the server after the error in my box) 3) doesn't display any text at the beginning, and the button has the correct CSS class assigned 4) Check if there are applications to accept, if not displays a message stating that there are no orgs to accept. Patch by: Mario Ferraro Reviewed by: Lennard de Rijk
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1356
32d8d83678cd Make various JS methods into their own file
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     1
$(document).ready(function() {
32d8d83678cd Make various JS methods into their own file
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     2
	$("#applications_progress_bar").progressBar({showText: false});
32d8d83678cd Make various JS methods into their own file
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     3
});
32d8d83678cd Make various JS methods into their own file
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     4
1364
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
     5
function acceptOrgInit(bulk_accept_link) {
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
     6
	// get the JSON object with details of every application for bulk acceptance
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
     7
	$.getJSON(bulk_accept_link,
1356
32d8d83678cd Make various JS methods into their own file
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     8
		function(data){
1364
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
     9
			// If there are applications to accept...
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    10
			if (data.nr_applications!=0) {
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    11
				//...then fade out the button, show the progress bar and call the function for acceptance
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    12
				$("#button_accept").fadeOut("slow",
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    13
					function() {
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    14
						$("#applications_progress_bar").progressBar(0);
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    15
						$("#button_accept").val("Bulk accept");
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    16
						$("#description_done").html("");
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    17
						$("#applications_progress_bar").fadeIn("slow", acceptOrgs(data));
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    18
					}
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    19
				);
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    20
			}else {
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    21
				$("#description_done").html("<strong>No organizations to accept</strong>");
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    22
			}
1356
32d8d83678cd Make various JS methods into their own file
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    23
		}
32d8d83678cd Make various JS methods into their own file
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    24
	);
32d8d83678cd Make various JS methods into their own file
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    25
}
32d8d83678cd Make various JS methods into their own file
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    26
1364
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    27
function acceptOrgs(data) {
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    28
	// some global constants
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    29
	var GLOBAL_LINK = data.link;
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    30
	var TOTAL_APPLICATIONS = data.nr_applications;
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    31
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    32
	// some global variables set needed for internal iteration
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    33
	var application_index = 0;
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    34
	// number of iteration is not taken from data.nr_applications
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    35
	// to ensure avoidance of array out of bounds errors
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    36
	var total_index = data.applications.length;
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    37
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    38
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    39
	// call immediately the function for acceptance
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    40
	// real iteration is inside
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    41
	setTimeout(function(){
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    42
		var error_happened = false;
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    43
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    44
		var application = data.applications[application_index];
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    45
		var current_application = application_index+1;
1356
32d8d83678cd Make various JS methods into their own file
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    46
		// regular expression to find a valid scope path inside matching parenthesis
32d8d83678cd Make various JS methods into their own file
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    47
		var re = /\((\w*)\)/;
1364
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    48
		var scope_path = GLOBAL_LINK.match(re)[1];
1356
32d8d83678cd Make various JS methods into their own file
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    49
		// the URL is obtained by using the scope path found in the matching parenthesis
1364
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    50
		var url_to_call = GLOBAL_LINK.replace(re,eval("application."+scope_path));
1356
32d8d83678cd Make various JS methods into their own file
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    51
		// now we can call the URL found
32d8d83678cd Make various JS methods into their own file
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    52
		$.ajax({
32d8d83678cd Make various JS methods into their own file
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    53
			async: false,
1364
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    54
			cache: false,
1356
32d8d83678cd Make various JS methods into their own file
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    55
			url: url_to_call,
32d8d83678cd Make various JS methods into their own file
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    56
			timeout: 10000,
1364
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    57
			success: function(data) {
1356
32d8d83678cd Make various JS methods into their own file
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    58
				if (data) {
32d8d83678cd Make various JS methods into their own file
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    59
					// update progress bar percentage and description
1364
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    60
					var percentage = Math.floor(100 * (current_application) / (TOTAL_APPLICATIONS));
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    61
					$("#description_progressbar").html(" Processed application "+application.name+" ("+(current_application)+"/"+TOTAL_APPLICATIONS+")");
1356
32d8d83678cd Make various JS methods into their own file
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    62
					$("#applications_progress_bar").progressBar(percentage);
32d8d83678cd Make various JS methods into their own file
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    63
				}
1364
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    64
			},
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    65
			error: function(XMLHttpRequest,textStatus,errorThrown) {
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    66
				// if there is an error rename the button to Retry and show an error message
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    67
				error_happened = true;
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    68
				$("#button_accept").val("Retry");
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    69
				$("#button_accept").fadeIn("slow", function() {
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    70
					$("#description_done").html("<strong class='error'> Error encountered, try again</strong>");
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    71
				});
1356
32d8d83678cd Make various JS methods into their own file
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    72
			}
32d8d83678cd Make various JS methods into their own file
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    73
		});
1364
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    74
		// if there were no errors, continue the iteration
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    75
		if (!error_happened) {
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    76
			// prepare for new iteration and then recall this function
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    77
			application_index++;
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    78
			if (application_index<total_index) {
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    79
				setTimeout(arguments.callee,0);
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    80
			}
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    81
			else {
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    82
				// all ok, tell the user we are done
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    83
				$("#applications_progress_bar").fadeOut("slow",
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    84
					function() {
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    85
						$("#applications_progress_bar").progressBar(0);
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    86
						$("#button_accept").fadeIn("slow");
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    87
					}
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    88
				);
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    89
				$("#description_progressbar").html("");
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    90
				$("#description_done").html("<strong>Done!</strong>");
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    91
			}
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    92
		}
b2709805fafe Update org bulk accept script.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1356
diff changeset
    93
	},0);
1356
32d8d83678cd Make various JS methods into their own file
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    94
}