diff options
author | Prabhu Ramachandran | 2014-07-03 18:06:26 +0530 |
---|---|---|
committer | Prabhu Ramachandran | 2014-07-03 18:06:26 +0530 |
commit | befad018f2e59389e92eaa109c6968bea30d06f9 (patch) | |
tree | df02d9de7fdd1596c0be1268bdd9148a2f0f15cb /testapp/static/exam/js/question_paper_creation.js | |
parent | ba6308eb5dfe391305f5466fba00be46a4755f7e (diff) | |
parent | 2d04f8cce5c5cf610b401ed37f796bd2034c07e9 (diff) | |
download | online_test-befad018f2e59389e92eaa109c6968bea30d06f9.tar.gz online_test-befad018f2e59389e92eaa109c6968bea30d06f9.tar.bz2 online_test-befad018f2e59389e92eaa109c6968bea30d06f9.zip |
Merge pull request #32 from prathamesh920/question_paper_creation_interface
Question paper creation interface
Diffstat (limited to 'testapp/static/exam/js/question_paper_creation.js')
-rw-r--r-- | testapp/static/exam/js/question_paper_creation.js | 237 |
1 files changed, 237 insertions, 0 deletions
diff --git a/testapp/static/exam/js/question_paper_creation.js b/testapp/static/exam/js/question_paper_creation.js new file mode 100644 index 0000000..a144540 --- /dev/null +++ b/testapp/static/exam/js/question_paper_creation.js @@ -0,0 +1,237 @@ +$(document).ready(function(){ + /* selectors for the 3 step tabs*/ + $fixed_tab = $("#fixed-tab"); + $random_tab = $("#random-tab"); + $finish_tab = $("#finish-tab"); + + $question_type = $("#id_question_type"); + $marks = $("#id_marks"); + + $total_marks = $("#total_marks"); + /* ajax requsts on selectors change */ + $question_type.change(function() { + $.ajax({ + url: "/exam/ajax/questionpaper/marks/", + type: "POST", + data: { + question_type: $question_type.val() + }, + dataType: "html", + success: function(output) { + $marks.html(output); + } + }); + }); + + $marks.change(function() { + var fixed_question_list = []; + var fixed_inputs = $("input[name=fixed]"); + var random_question_list = []; + var random_inputs = $("input[name=random]"); + for(var i = 0; i < fixed_inputs.length; i++){ + fixed_question_list.push($(fixed_inputs[i]).val()); + } + for(var i = 0; i < random_inputs.length; i++){ + random_question_list.push($(random_inputs[i]).val()); + } + $.ajax({ + url: "/exam/ajax/questionpaper/questions/", + type: "POST", + data: { + question_type: $question_type.val(), + marks: $marks.val(), + fixed_list: fixed_question_list, + random_list: random_question_list + }, + dataType: "html", + success: function(output) { + if($fixed_tab.hasClass("active")) { + var questions = $(output).filter("#questions").html(); + $("#fixed-available").html(questions); + } else if($random_tab.hasClass("active")) { + var questions = $(output).filter("#questions").html(); + var numbers = $(output).filter("#num").html(); + $("#random-available").html(questions); + $("#number-wrapper").html(numbers); + } + } + }); + }); + + /* adding fixed questions */ + $("#add-fixed").click(function(e) { + var count = 0; + var selected = []; + var html = ""; + var $element; + var total_marks = parseFloat($total_marks.text()); + var marks_per = parseFloat($marks.val()) + $("#fixed-available input:checkbox").each(function(index, element) { + if($(this).attr("checked")) { + qid = $(this).attr("data-qid"); + if(!$(this).hasClass("ignore")) { + selected.push(qid); + $element = $("<div class='qcard'></div>"); + html += "<li>" + $(this).next().html() + "</li>"; + count++; + } + } + }); + html = "<ul>" + html + "</ul>"; + selected = selected.join(","); + var $input = $("<input type='hidden'>"); + $input.attr({ + value: selected, + name: "fixed" + }); + $remove = $("<a href='#' class='remove' data-num="+count+" data-marks = "+marks_per +">×</div>"); + $element.html(count + " question(s) added").append(html).append($input).append($remove); + $("#fixed-added").prepend($element); + total_marks = total_marks + count * marks_per; + $total_marks.text(total_marks) + e.preventDefault(); + }); + + /* adding random questions */ + $("#add-random").click(function(e) { + $numbers = $("#numbers"); + random_number = $numbers.val() + if($numbers.val()) { + $numbers.removeClass("red-alert"); + var count = 0; + var selected = []; + var html = ""; + var $element; + var total_marks = parseFloat($total_marks.text()); + var marks_per = parseFloat($marks.val()) + $("#random-available input:checkbox").each(function(index, element) { + if($(this).attr("checked")) { + qid = $(this).attr("data-qid"); + if(!$(this).hasClass("ignore")) { + selected.push(qid); + $element = $("<div class='qcard'></div>"); + html += "<li>" + $(this).next().html() + "</li>"; + count++; + } + } + }); + html = "<ul>" + html + "</ul>"; + selected = selected.join(","); + var $input_random = $("<input type='hidden'>"); + $input_random.attr({ + value: selected, + name: "random" + }); + var $input_number = $("<input type='hidden'>"); + $input_number.attr({ + value: $numbers.val(), + name: "number" + }); + $remove = $("<a href='#' class='remove' data-num="+random_number+" data-marks = "+marks_per +">×</div>"); + $element.html(random_number + " question(s) will be selected from " + count + " question(s)").append(html).append($input_random).append($input_number).append($remove); + $("#random-added").prepend($element); + total_marks = total_marks + random_number * marks_per; + $total_marks.text(total_marks) + } else { + $numbers.addClass("red-alert"); + } + e.preventDefault(); + }); + + /* removing added questions */ + $(".qcard .remove").live("click", function(e) { + var marks_per = $(this).attr('data-marks'); + var num_question = $(this).attr('data-num'); + var sub_marks = marks_per*num_question; + var total_marks = parseFloat($total_marks.text()); + total_marks = total_marks - sub_marks; + $total_marks.text(total_marks); + + $(this).parent().slideUp("normal", function(){ $(this).remove(); }); + e.preventDefault(); + }); + + /* showing/hiding selectors on tab click */ + $(".tabs li").click(function() { + if($(this).attr("id") == "finish-tab") { + $("#selectors").hide(); + } else { + $question_type.val('select'); + $marks.val('select') + $("#selectors").show(); + } + }); + /* check all questions on checked*/ + $("#checkall").live("click", function(){ + if($(this).attr("checked")) { + if($("#fixed-tab").hasClass("active")) { + $("#fixed-available input:checkbox").each(function(index, element) { + $(this).attr('checked','checked'); + }); + } + else { + $("#random-available input:checkbox").each(function(index, element) { + $(this).attr('checked','checked'); + }); + } + } + else { + if($("#fixed-tab").hasClass("active")) { + $("#fixed-available input:checkbox").each(function(index, element) { + $(this).removeAttr('checked'); + }); + } + else { + $("#random-available input:checkbox").each(function(index, element) { + $(this).removeAttr('checked'); + }); + } + } + }); + + /* show preview on preview click */ + $("#preview").click(function(){ + questions = getQuestions() + if(questions.trim() == ""){ + $('#modal_body').html("No questions selected"); + } + else { + $('#modal_body').html(questions); + } + $("#myModal").modal('show'); + }); + + /* tab change on next or previous button click */ + $("#fixed-next").click(function(){ + $("#random").click(); + }); + $("#random-next").click(function(){ + $("#finished").click(); + }); + + $("#random-prev").click(function(){ + $("#fixed").click(); + }); + + $("#finish-prev").click(function(){ + $("#random").click(); + }); + + /* Check at least one question is present before saving */ + $('#save').click(function(){ + questions = getQuestions(); + if(questions.trim() == ""){ + $("#modalSave").modal("show"); + } + else { + document.forms["frm"].submit(); + } + }); + + /* Fetch selected questions */ + function getQuestions(){ + var fixed_div = $("#fixed-added").html(); + var random_div = $("#random-added").html(); + return fixed_div+random_div; + } +}); //document |