X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/7c7e68c348f0cdcb41aa76685fe2f519b8300eac..0327b33c1e7816f8a30269f8798bff5e216ccd7c:/redakcja/static/edumed/js/edumed.coffee?ds=sidebyside diff --git a/redakcja/static/edumed/js/edumed.coffee b/redakcja/static/edumed/js/edumed.coffee index 0fd39d9a..14c700ce 100644 --- a/redakcja/static/edumed/js/edumed.coffee +++ b/redakcja/static/edumed/js/edumed.coffee @@ -10,29 +10,36 @@ class EduModule extends Binding constructor: (element) -> super 'edumodule', element - $("[name=teacher-toggle]").change (ev) => - if $(ev.target).is(":checked") - $(".teacher", @element).addClass "show" - else - $(".teacher", @element).removeClass "show" + # $("[name=teacher-toggle]").change (ev) => + # if $(ev.target).is(":checked") + # $(".teacher", @element).addClass "show" + # else + # $(".teacher", @element).removeClass "show" -class Excercise extends Binding +class Exercise extends Binding constructor: (element) -> - super 'excercise', element - # just save the html to reset the excercise - $(@element).data("excercise-html", $(@element).html()) + super 'exercise', element + # just save the html to reset the exercise + $(@element).data("exercise-html", $(@element).html()) - $(".check", @element).click => + $(".check", @element).click (ev) => @check() + $(ev.target).next(".retry").show() + $(ev.target).hide() + $(".retry", @element).click (ev) => + $(".correct, .incorrect", @element).removeClass("correct incorrect") + $(ev.target).prev(".check").show() + $(ev.target).hide() $('.solutions', @element).click => @show_solutions() + $(".comment", @element).show() $('.reset', @element).click => @reset() reset: -> - $(@element).html($(@element).data('excercise-html')) - excercise @element + $(@element).html($(@element).data('exercise-html')) + exercise @element piece_correct: (qpiece) -> $(qpiece).removeClass('incorrect').addClass('correct') @@ -116,7 +123,7 @@ class Excercise extends Binding $($added.data('original')).removeClass('disabled').draggable('enable') $added.remove() - +## XXX co z issortable? dragging: (ismultiple, issortable) -> $(".question", @element).each (i, question) => draggable_opts = @@ -171,7 +178,7 @@ class Excercise extends Binding -class Wybor extends Excercise +class Wybor extends Exercise constructor: (element) -> super element @@ -217,7 +224,7 @@ class Wybor extends Excercise -class Uporzadkuj extends Excercise +class Uporzadkuj extends Exercise constructor: (element) -> super element $('ol, ul', @element).sortable({ items: "> li" }) @@ -256,7 +263,7 @@ class Uporzadkuj extends Excercise # XXX propozycje="1/0" -class Luki extends Excercise +class Luki extends Exercise constructor: (element) -> super element @dragging false, false @@ -281,7 +288,7 @@ class Luki extends Excercise @draggable_move $qp, $(placeholder), false -class Zastap extends Excercise +class Zastap extends Exercise constructor: (element) -> super element $(".paragraph", @element).each (i, par) => @@ -347,7 +354,7 @@ class Zastap extends Excercise $(chld).remove() -class Przyporzadkuj extends Excercise +class Przyporzadkuj extends Exercise is_multiple: -> for qp in $(".question-piece", @element) if $(qp).data('solution').split(/[ ,]+/).length > 1 @@ -367,46 +374,50 @@ class Przyporzadkuj extends Excercise check_question: (question) -> # subjects placed in predicates + minimum = $(question).data("minimum") count = 0 all = 0 - all_multiple = 0 - for qp in $(".predicate .question-piece", question) - pred = $(qp).closest("[data-predicate]") - v = @get_value_optional_list qp, 'solution' - mandatory = v[0] - optional = v[1] - all_multiple += mandatory.length + optional.length - pn = pred.attr('data-predicate') - if mandatory.indexOf(pn) >= 0 or optional.indexOf(pn) >= 0 - count += 1 - @piece_correct qp - else - @piece_incorrect qp - all += 1 + if not minimum + all = $(".subjects .question-piece", question).length + + for pred in $(".predicate [data-predicate]", question) + pn = $(pred).attr('data-predicate') + if minimum? + all += minimum - if @multiple - for qp in $(".subject .question-piece", question) + for qp in $(".question-piece", pred) v = @get_value_optional_list qp, 'solution' mandatory = v[0] optional = v[1] - all_multiple += mandatory.length + optional.length - return [count, all_multiple] - else - return [count, all] + + if mandatory.indexOf(pn) >= 0 or (minimum and optional.indexOf(pn) >= 0) + count += 1 + @piece_correct qp + else + @piece_incorrect qp + + return [count, all] solve_question: (question) -> + minimum = $(question).data("min") + for qp in $(".subject .question-piece", question) v = @get_value_optional_list qp, 'solution' mandatory = v[0] optional = v[1] - for m in mandatory.concat(optional) + + if minimum + draggables = mandatory.count(optional)[0...minimum] + else + draggables = mandatory + for m in draggables $pr = $(".predicate [data-predicate=" + m + "]", question) - $ph = $pr.find ".placeholder" + $ph = $pr.find ".placeholder:visible" @draggable_move $(qp), $ph, @multiple -class PrawdaFalsz extends Excercise +class PrawdaFalsz extends Exercise constructor: (element) -> super element @@ -446,7 +457,7 @@ class PrawdaFalsz extends Excercise ########## -excercise = (ele) -> +exercise = (ele) -> es = wybor: Wybor uporzadkuj: Uporzadkuj @@ -469,5 +480,5 @@ window.edumed = $(document).ready () -> new EduModule($("#book-text")) - $(".excercise").each (i, el) -> - excercise(this) \ No newline at end of file + $(".exercise").each (i, el) -> + exercise(this) \ No newline at end of file