X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/ca531bd353bd00ebe786c63df893f7f71167411b..ff191b1dc1ac37864898b775ce973f3900ddda89:/redakcja/static/edumed/js/edumed.coffee diff --git a/redakcja/static/edumed/js/edumed.coffee b/redakcja/static/edumed/js/edumed.coffee index 84fb91f1..2c02cd8d 100644 --- a/redakcja/static/edumed/js/edumed.coffee +++ b/redakcja/static/edumed/js/edumed.coffee @@ -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 @@ -64,6 +64,98 @@ class Excercise extends Binding $(".message", @element).text("Wynik: #{score[0]} / #{score[1]}") + draggable_equal: ($draggable1, $draggable2) -> + return false + + draggable_accept: ($draggable, $droppable) -> + dropped = $droppable.closest("ul, ol").find(".draggable") + for d in dropped + if @draggable_equal $draggable, $(d) + return false + return true + + draggable_dropped: ($draggable) -> + $draggable.append('x') + + dragging: (ismultiple, issortable) -> + $(".question", @element).each (i, question) => + draggable_opts = + revert: 'invalid' + helper: 'clone' + + $(".draggable", question).draggable(draggable_opts) + self = this + $(".placeholder", question).droppable + accept: (draggable) -> + $draggable = $(draggable) + if not $draggable.is(".draggable") + return false + return self.draggable_accept $draggable, $(this) + + drop: (ev, ui) -> + added = $(ui.draggable).clone() + $added = added + $added.data("original", ui.draggable) + if not ismultiple + $(ui.draggable).addClass('disabled').draggable('disable') + + $(ev.target).after(added) + if not $(ev.target).hasClass('multiple') + $(ev.target).hide() + $added.append('x') + $('.remove', added).click (ev) => + $added.prev(".placeholder:not(.multiple)").show() + if not ismultiple + $added.data('original').removeClass('disabled').draggable('enable') + $(added).remove() + + + +# $(".droppable", question).each (i, droppable) => +# $droppable = $(droppable) +# $droppable.droppable +# accept: (draggable) => +# return false +# $draggable = $(draggable) +# if not $draggable.is(".draggable") +# console.log('not draggable?') +# return false + +# for added in $droppable.children(".draggable") +# if @draggable_equal($(added), $draggable) +# console.log('already here:' + $draggable.text()) +# return false + +# return @draggable_accept $draggable + +# drop: (ev, ui) => +# added = ui.draggable.clone() +# # added.attr('style', '') +# $(ev.target).append(added) +# added.draggable(draggable_opts) +# @draggable_dropped added + +# if not @multiple +# $(ui.draggable).draggable("disable") + + + # if issortable + # $(".droppable", question).sortable + # items: "> li" + + # receive: (event, ui) => + # console.log("receive " + $(ui.item).text()) + # if not accept(ui.item, event.target) + # console.log("REVERT") + # $(event.target).sortable('cancel') + + # over: (event, ui) => + # if not accept(ui.item, event.target) + # $(event.target).sortable('disable') + # out: (event, ui) => + # $(event.target).sortable('enable') + + class Wybor extends Excercise constructor: (element) -> super element @@ -72,10 +164,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 @@ -122,12 +218,14 @@ class Uporzadkuj extends Excercise class Luki extends Excercise constructor: (element) -> super element + @dragging false, false check: -> all = 0 correct = 0 - $(".question-piece", @element).each (i, qpiece) => - if $(qpiece).data('solution') == $(qpiece).val() + $(".placeholder + .question-piece", @element).each (i, qpiece) => + $placeholder = $(qpiece).prev(".placeholder") + if $placeholder.data('solution') == $(qpiece).data('no') @piece_correct qpiece correct += 1 else @@ -216,56 +314,11 @@ class Przyporzadkuj extends Excercise @multiple = @is_multiple() - $(".question", @element).each (i, question) => - draggable_opts = - revert: 'invalid' - if @multiple - helper_opts = { helper: "clone" } - else helper_opts = {} - - $(".draggable", question).draggable($.extend({}, draggable_opts, - helper_opts)) - - $(".predicate .droppable", question).droppable - accept: (draggable) -> - $draggable = $(draggable) - if not $draggable.is(".draggable") - return false - $predicate = $(this) - - for added in $predicate.find("li") - if $(added).text() == $draggable.text() - return false - return true - - drop: (ev, ui) => - added = ui.draggable.clone() - - added.attr('style', '') - $(ev.target).append(added) - added.draggable(draggable_opts) - - if not @multiple or ui.draggable.closest(".predicate").length > 0 - ui.draggable.remove() + @dragging @multiple, true + draggable_equal: (d1, d2) -> + return d1.data("no") == d2.data("no") - $(".subject", question).droppable - accept: ".draggable" - drop: (ev, ui) => - # this is to prevent a situation of dragging out and - # dropping back to the same place - if $(ui.draggable).closest(".subject").length > 0 - return - - - added = ui.draggable.clone() - - added.attr('style', '') - if not @multiple - $(ev.target).append(added) - added.draggable($.extend({}, draggable_opts, helper_opts)) - - ui.draggable.remove() check_question: (question) -> # subjects placed in predicates @@ -297,9 +350,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 +388,7 @@ excercise = (ele) -> luki: Luki zastap: Zastap przyporzadkuj: Przyporzadkuj + prawdafalsz: PrawdaFalsz cls = es[$(ele).attr('data-type')]