validador.js 6.92 KB
(function(validador, $, undefined) {

	var videos_url = "";
	var base_url = "";
	var server_backend_url = '';
	var current_task_id = -1;

	function _disableFinishButton() {
		$("#finish-button").off("click");
		$("#finish-button").removeClass("enabled-button");
		$("#finish-button").addClass("disabled-button");
	}

	function _enableFinishButton(task, deferred) {
		$("#finish-button").removeClass("disabled-button");
		$("#finish-button").addClass("enabled-button");
		$("#finish-button").off("click").on("click", function() {
			_readAnswer(task, deferred, false);
		});
	}

	function _hideCommentAvatar() {
		$("#comment-avatar").hide();
		$("#finish-task-container").removeClass("finish-padding-top-adjust");
	}

	function _hideCommentRef() {
		$("#comment-ref").hide();
	}

	function resetComments() {
		$("#comment-avatar textarea").val("")
		$("#comment-ref textarea").val("");
		_hideCommentAvatar();
		_hideCommentRef();
	}

	function _enableLoading() {
		$("#loading-container").show();
		$("#main-container").addClass("mask");
	}

	function _disableLoading() {
		$("#loading-container").hide();
		$("#main-container").removeClass("mask");
	}

	function _handleAvatarRadioClick(el, task, deferred) {
		var is_incorrect_button = $(el).val() == "INCORRECT";
		if (is_incorrect_button) {
			_hideCommentRef();
			$("#comment-avatar").show();
			$("#finish-task-container").addClass("finish-padding-top-adjust");
		} else {
			_hideCommentAvatar();
		}
		var isRefChecked = $("#ref-radio-answers input[type=radio]").is(
				":checked");
		if (isRefChecked) {
			_enableFinishButton(task, deferred);
		} else {
			_disableFinishButton();
		}
	}

	function _handleRefRadioClick(el, task, deferred) {
		var is_incorrect_button = $(el).val() == "INCORRECT";
		if (is_incorrect_button) {
			$("#incorrect-avatar-button").prop("checked", true);
			$("#comment-ref").show();
			_hideCommentAvatar();
		} else {
			var is_avatar_disabled = $("#avatar-radio-answers input[type=radio]").is(":disabled");
			if (is_avatar_disabled) {
				$("#incorrect-avatar-button").prop("checked", false);
			}
			_hideCommentRef();
		}
		$("#avatar-radio-answers input[type=radio]").prop("disabled",
				is_incorrect_button);
		var is_avatar_checked = $("#avatar-radio-answers input[type=radio]").is(
				":checked");
		if (is_avatar_checked) {
			_enableFinishButton(task, deferred);
		} else {
			_disableFinishButton();
		}
	}

	function _setupGUI(task, deferred) {
		resetComments();
		_disableFinishButton();
		$("#avatar-radio-answers input[type=radio]").prop("disabled", false);
		$("#avatar-radio-answers input[type=radio]").prop("checked", false);
		$("#ref-radio-answers input[type=radio]").prop("checked", false);
		$("#avatar-radio-answers input[type=radio]").off("click").on("click",
				function() {
					_handleAvatarRadioClick(this, task, deferred);
				});
		$("#ref-radio-answers input[type=radio]").off("click").on("click",
				function() {
					_handleRefRadioClick(this, task, deferred);
				});
		$("#skip-button").off("click").on("click", function() {
			_readAnswer(task, deferred, true);
		});
	}

	function _readAnswer(task, deferred, has_skipped) {
		var status = "";
		var avatar_answer = $("#avatar-radio-answers input[type=radio]:checked")
				.val();
		var ref_answer = $("#ref-radio-answers input[type=radio]:checked")
				.val();
		if (has_skipped) {
			status = "SKIPPED";
		} else if (ref_answer == "INCORRECT") {
			status = "REF_DISAPPROVED";
		} else if (avatar_answer == "INCORRECT") {
			status = "AVATAR_DISAPPROVED";
		} else {
			status = "AVATAR_APPROVED";
		}
		_submitAnswer(task, deferred, status, has_skipped);
	}

	function _createAnswer(task, status) {
		var answer = {};
		var last_answer = task.info.last_answer;
		var hasLastAnswer = typeof last_answer != "undefined";
		if (hasLastAnswer) {
			answer = last_answer;
		} else {
			answer = {
				"number_of_approval" : 0,
				"number_of_avatar_disapproval" : 0,
				"number_of_ref_disapproval" : 0
			};
		}
		answer["status"] = status;
		answer["comment_avatar"] = "";
		answer["comment_ref"] = "";
		if (status == "AVATAR_APPROVED") {
			answer["number_of_approval"] = answer.number_of_approval + 1;
		} else if (status == "AVATAR_DISAPPROVED") {
			answer["number_of_avatar_disapproval"] = answer.number_of_avatar_disapproval + 1;
			var comment_avatar = $("#comment-avatar textarea").val();
			if (comment_avatar.trim() != "") {
				answer["comment_avatar"] = comment_avatar;
			}
		} else if (status == "REF_DISAPPROVED") {
			answer["number_of_ref_disapproval"] = answer.number_of_ref_disapproval + 1;
			var comment_ref = $("#comment-ref textarea").val();
			if (comment_ref.trim() != "") {
				answer["comment_ref"] = comment_ref;
			}
		}
		return answer;
	}

	function _finishTask(task, deferred, answer) {
		_enableLoading();
		$
				.ajax({
					type : "POST",
					url : server_backend_url + "/finish_task",
					data : {
						"task_id" : task.id,
						"project_id" : task.project_id,
						"number_of_approval" : answer.number_of_approval,
						"number_of_avatar_disapproval" : answer.number_of_avatar_disapproval,
						"number_of_ref_disapproval" : answer.number_of_ref_disapproval
					},
					success : function(response) {
						pybossa.saveTask(task.id, answer).done(function() {
							_disableLoading();
							$("#success").fadeIn(500);
							$("#main-container").hide();
							setTimeout(function() {
								deferred.resolve();
							}, 2000);
						});
					},
					error : function(xhr, textStatus, error) {
						_disableLoading();
						alert(xhr.responseText);
					}
				});

	}

	function _submitAnswer(task, deferred, status, has_skipped) {
		var answer = _createAnswer(task, status);
		if (has_skipped) {
			_saveAnswer(task, deferred, answer);
		} else {
			_finishTask(task, deferred, answer);
		}
	}

	function _saveAnswer(task, deferred, answer) {
		pybossa.saveTask(task.id, answer).done(function() {
			$("#success").fadeIn(500);
			$("#main-container").hide();
			setTimeout(function() {
				deferred.resolve();
			}, 2000);
		});
	}

	function _loadTaskInfo(task) {
		current_task_id = task.id;
		var sign_name = task.info.sign_name;
		var avatar_vid_link = videos_url + sign_name + "_AVATAR.webm";
		var ref_vid_link = videos_url + sign_name + "_REF.webm";
		$(".sign-label").text(sign_name);
		$("#avatar-video").attr("src", avatar_vid_link);
		$("#ref-video").attr("src", ref_vid_link);
	}

	pybossa.presentTask(function(task, deferred) {
		if (!$.isEmptyObject(task) && current_task_id != task.id) {
			_loadTaskInfo(task);
			_setupGUI(task, deferred);
			$("#success").hide();
			$("#main-container").fadeIn(500);
		} else {
			$("#main-container").hide();
			$("#finish").fadeIn(500);
		}
	});

	// Private methods
	function _run(projectname) {
		pybossa.run(projectname);
	}

	// Public methods
	validador.run = function(serverhost, serverbackend, projectname) {
		base_url = serverhost;
		server_backend_url = serverbackend;
		videos_url = base_url + "/videos/";
		_run(projectname);
	};

}(window.validador = window.validador || {}, jQuery));