edumed quiz pt 1
[redakcja.git] / redakcja / static / edumed / js / edumed.coffee
1
2 $ = jQuery
3
4 class Binding
5   constructor: (@handler, @element) ->
6     $(@element).data(@handler, this)
7
8
9 class EduModule extends Binding
10   constructor: (element) ->
11     super 'edumodule', element
12
13     $("[name=teacher-toggle]").change (ev) =>
14       if $(ev.target).is(":checked")
15         $(".teacher", @element).addClass "show"
16       else
17         $(".teacher", @element).removeClass "show"
18         
19
20
21 class Excercise extends Binding
22   constructor: (element) ->
23     super 'excercise', element
24
25     $(".check", @element).click =>
26       @check()
27     $('.solutions', @element).click =>
28       @show_solutions()
29
30       
31 class Wybor extends Excercise
32   constructor: (element) ->
33     super element
34
35   check: ->
36     scores = []
37     $(".question").each (i, question) =>
38       scores.push(@check_question question)
39
40     score = [0, 0]
41     $.each scores, (i, s) ->
42       score[0] += s[0]
43       score[1] += s[1]
44     @show_score(score)
45     
46   check_question: (question) ->
47     all = 0
48     good = 0
49     solution = $(question).attr('data-solution').split(',').map($.trim).map((x)->parseInt(x))
50     $(".question-piece", question).each (i, qpiece) =>
51       piece_no = parseInt $(qpiece).attr 'data-no'
52       should_be_checked = solution.indexOf(piece_no) >= 0
53       is_checked = $("input", qpiece).is(":checked")
54       
55       if should_be_checked
56         all += 1
57
58       if is_checked
59         if should_be_checked
60           good += 1
61           @piece_correct qpiece
62         else
63           @piece_incorrect qpiece
64       else
65         $(qpiece).removeClass("correct,incorrect")
66         
67     return [good, all]
68          
69   piece_correct: (qpiece) ->
70     $(qpiece).removeClass('incorrect').addClass('correct')
71
72   piece_incorrect: (qpiece) ->
73     $(qpiece).removeClass('correct').addClass('incorrect')
74     
75   show_solutions: ->
76     
77
78   show_score: (score) ->
79     $(".message", @element).text("Wynik: #{score[0]} / #{score[1]}")
80     
81
82
83 ##########
84
85 excercise = (ele) ->
86   es =
87     'wybor': Wybor
88
89   cls = es[$(ele).attr('data-type')]
90   new cls(ele)
91
92
93 window.edumed =
94   'EduModule': EduModule
95
96
97
98
99 $(document).ready () ->
100   new EduModule($("#book-text"))
101   
102   $(".excercise").each (i, el) ->
103     excercise(this)