prawda/falsz questions
[redakcja.git] / redakcja / static / edumed / js / edumed.coffee
index 84fb91f..771e7c7 100644 (file)
@@ -44,7 +44,7 @@ class Excercise extends Binding
     @show_score(score)
 
   get_value_list: (elem, data_key, numbers) ->
-    vl = $(elem).data(data_key).split(/[ ,]+/).map($.trim) #.map((x) -> parseInt(x))
+    vl = $(elem).attr("data-" + data_key).split(/[ ,]+/).map($.trim) #.map((x) -> parseInt(x))
     if numbers
       vl = vl.map((x) -> parseInt(x))
     return vl
@@ -72,10 +72,14 @@ class Wybor extends Excercise
   check_question: (question) ->
     all = 0
     good = 0
-    solution = @get_value_list(question, 'solution', true)
+    solution = @get_value_list(question, 'solution')
     $(".question-piece", question).each (i, qpiece) =>
-      piece_no = parseInt $(qpiece).attr 'data-no'
-      should_be_checked = solution.indexOf(piece_no) >= 0
+      piece_no = $(qpiece).attr 'data-no'
+      piece_name = $(qpiece).attr 'data-name'
+      if piece_name
+        should_be_checked = solution.indexOf(piece_name) >= 0
+      else
+        should_be_checked = solution.indexOf(piece_no) >= 0
       is_checked = $("input", qpiece).is(":checked")
 
       if should_be_checked
@@ -226,15 +230,17 @@ class Przyporzadkuj extends Excercise
       $(".draggable", question).draggable($.extend({}, draggable_opts,
         helper_opts))
 
-      $(".predicate .droppable", question).droppable
+      $(".predicate .droppable", question).parent().droppable
         accept: (draggable) ->
           $draggable = $(draggable)
           if not $draggable.is(".draggable")
+            console.log('not draggable?')
             return false
           $predicate = $(this)
 
           for added in $predicate.find("li")
             if $(added).text() == $draggable.text()
+              console.log('already here:' + $draggable.text())
               return false
           return true
 
@@ -242,12 +248,14 @@ class Przyporzadkuj extends Excercise
           added = ui.draggable.clone()
 
           added.attr('style', '')
-          $(ev.target).append(added)
+          $(ev.target).find(".droppable").append(added)
           added.draggable(draggable_opts)
 
           if not @multiple or ui.draggable.closest(".predicate").length > 0
             ui.draggable.remove()
 
+      $(".predicate .droppable", question).sortable
+        items: "> li"
 
       $(".subject", question).droppable
         accept: ".draggable"
@@ -297,9 +305,34 @@ class Przyporzadkuj extends Excercise
       return [count, all]
 
 
+class PrawdaFalsz extends Excercise
+  constructor: (element) ->
+    super element
 
+    for qp in $(".question-piece", @element)
+      $(".true", qp).click (ev) ->
+        ev.preventDefault()
+        $(this).closest(".question-piece").data("value", "true")
+        $(this).addClass('chosen').siblings('a').removeClass('chosen')
+      $(".false", qp).click (ev) ->
+        ev.preventDefault()
+        $(this).closest(".question-piece").data("value", "false")
+        $(this).addClass('chosen').siblings('a').removeClass('chosen')
+
+
+  check_question: ->
+    all = 0
+    good = 0
+    for qp in $(".question-piece", @element)
+      if $(qp).data("solution").toString() == $(qp).data("value")
+        good += 1
+        @piece_correct qp
+      else
+        @piece_incorrect qp
 
+      all += 1
 
+    return [good, all]
 
 ##########
 
@@ -310,6 +343,7 @@ excercise = (ele) ->
     luki: Luki
     zastap: Zastap
     przyporzadkuj: Przyporzadkuj
+    prawdafalsz: PrawdaFalsz
 
 
   cls = es[$(ele).attr('data-type')]