18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
# File 'lib/kitchen/directions/bake_injected_exercise/bake_injected_exercise.rb', line 18
def bake(exercise:, options:)
question_count = exercise.injected_questions.count
context = exercise&.exercise_context
stimulus = exercise&.first("div[data-type='exercise-stimulus']")
if options[:alphabetical_multiparts] && stimulus
question_count = 1
solutions_clipboard = Kitchen::Clipboard.new
questions_clipboard = Kitchen::Clipboard.new
wrapper_id = "#{exercise.injected_questions.first.id}-wrapper"
if options[:list_type] == 'lower-alpha'
alphabet = *('a'..'z')
elsif options[:list_type] == 'upper-alpha'
alphabet = *('A'..'Z')
end
exercise.injected_questions.each_with_index do |question, index|
question.set(:'data-type', 'alphabetical-question-multipart')
problem_letter = if options[:add_brackets]
"(#{alphabet[index]})"
else
"#{alphabet[index]}."
end
solution = question.solution
solution_id = "#{question.id}-solution" if solution.present?
problem_letter_tag = \
if solution.present?
"<a class='problem-letter' href='##{solution_id}'>#{problem_letter}</a>"
else
"<span class='problem-letter'>#{problem_letter}</span>"
end
question.prepend(child:
<<~HTML
<div class="os-problem-container">
#{problem_letter_tag}
<span class='os-divider'> </span>
#{question.stimulus&.cut&.paste}
#{question.stem&.cut&.paste}
</div>
HTML
)
question&.cut(to: questions_clipboard)
next unless solution.present?
solution.replace_children(with:
<<~HTML
<a class='problem-letter' id='#{solution_id}'>#{problem_letter}</a>
<span class='os-divider'> </span>
<div class="os-solution-container">#{question.solution&.children}</div>
HTML
)
solution.set(:'data-type', 'solution-part')
solution.cut(to: solutions_clipboard)
end
stimulus.set(:'data-type', 'question-stimulus')
solution_block = if solutions_clipboard.any?
<<~HTML
<div data-type="question-solution" id='#{wrapper_id}-solution'>
#{solutions_clipboard.paste}
</div>
HTML
end
exercise&.prepend(child:
<<~HTML
<div data-type='exercise-question' id='#{wrapper_id}'>
#{stimulus&.cut&.paste}
#{questions_clipboard.paste}
#{solution_block}
</div>
HTML
)
end
exercise[:'data-question-count'] = question_count
exercise[:'data-is-multipart'] = question_count > 1 ? 'True' : 'False'
return unless context
link = context.first('a').cut
context.replace_children(with: "#{I18n.t(:context_lead_text)}#{link.paste}")
return unless question_count == 1
question = exercise.exercise_question
question.prepend(child: context.cut.paste)
end
|