Class: Html5Renderer
- Inherits:
-
Object
- Object
- Html5Renderer
- Defined in:
- lib/ruql/renderers/html5_renderer.rb
Instance Attribute Summary collapse
-
#output ⇒ Object
readonly
Returns the value of attribute output.
Instance Method Summary collapse
-
#initialize(quiz, options = {}) ⇒ Html5Renderer
constructor
A new instance of Html5Renderer.
- #quiz_header ⇒ Object
- #render_answer_for_solutions(answer, raw, is_true_false = nil) ⇒ Object
- #render_fill_in(q, idx) ⇒ Object
- #render_multiple_choice(q, index) ⇒ Object
- #render_question_text(question, index) ⇒ Object
- #render_questions ⇒ Object
- #render_quiz ⇒ Object
- #render_random_seed ⇒ Object
- #render_with_template ⇒ Object
Constructor Details
#initialize(quiz, options = {}) ⇒ Html5Renderer
Returns a new instance of Html5Renderer.
7 8 9 10 11 12 13 14 15 16 |
# File 'lib/ruql/renderers/html5_renderer.rb', line 7 def initialize(quiz,={}) @css = .delete('c') || .delete('css') @show_solutions = .delete('s') || .delete('solutions') @template = .delete('t') || .delete('template') || File.join(Gem.loaded_specs['ruql'].full_gem_path, 'templates/html5.html.erb') @output = '' @quiz = quiz @h = Builder::XmlMarkup.new(:target => @output, :indent => 2) end |
Instance Attribute Details
#output ⇒ Object (readonly)
Returns the value of attribute output.
5 6 7 |
# File 'lib/ruql/renderers/html5_renderer.rb', line 5 def output @output end |
Instance Method Details
#quiz_header ⇒ Object
150 151 152 153 154 155 156 157 158 159 160 161 |
# File 'lib/ruql/renderers/html5_renderer.rb', line 150 def quiz_header @h.div(:id => 'student-name') do @h.p 'Name:' @h.p 'Student ID:' end if @quiz.[:instructions] @h.div :id => 'instructions' do @quiz.[:instructions].each_line { |p| @h.p p } end end self end |
#render_answer_for_solutions(answer, raw, is_true_false = nil) ⇒ Object
107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/ruql/renderers/html5_renderer.rb', line 107 def render_answer_for_solutions(answer,raw,is_true_false = nil) args = {:class => (answer.correct? ? 'correct' : 'incorrect')} if is_true_false answer.answer_text.prepend( answer.correct? ? "CORRECT: " : "INCORRECT: ") end @h.li(args) do if raw then @h.p { |p| p << answer.answer_text } else @h.p answer.answer_text end if answer.has_explanation? if raw then @h.p(:class => 'explanation') { |p| p << answer.explanation } else @h.p(answer.explanation, :class => 'explanation') end end end end |
#render_fill_in(q, idx) ⇒ Object
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 |
# File 'lib/ruql/renderers/html5_renderer.rb', line 81 def render_fill_in(q, idx) render_question_text(q, idx) do if @show_solutions answer = q.answers[0] if answer.has_explanation? if q.raw? then @h.p(:class => 'explanation') { |p| p << answer.explanation } else @h.p(answer.explanation, :class => 'explanation') end end answers = (answer.answer_text.kind_of?(Array) ? answer.answer_text : [answer.answer_text]) @h.ol :class => 'answers' do answers.each do |answer| if answer.kind_of?(Regexp) answer = answer.inspect if !q.case_sensitive answer += 'i' end end @h.li do if q.raw? then @h.p { |p| p << answer } else @h.p answer end end end end end end end |
#render_multiple_choice(q, index) ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/ruql/renderers/html5_renderer.rb', line 61 def render_multiple_choice(q,index) render_question_text(q, index) do answers = if q.class == TrueFalse then q.answers.sort.reverse # True always first elsif q.randomize then q.answers.sort_by { rand } else q.answers end @h.ol :class => 'answers' do answers.each do |answer| if @show_solutions render_answer_for_solutions(answer, q.raw?, q.class == TrueFalse) else if q.raw? then @h.li { |l| l << answer.answer_text } else @h.li answer.answer_text end end end end end self end |
#render_question_text(question, index) ⇒ Object
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 |
# File 'lib/ruql/renderers/html5_renderer.rb', line 122 def render_question_text(question,index) html_args = { :id => "question-#{index}", :class => ['question', question.class.to_s.downcase, (question.multiple ? 'multiple' : '')] .join(' ') } @h.li html_args do @h.div :class => 'text' do qtext = "[#{question.points} point#{'s' if question.points>1}] " << ('Select ALL that apply: ' if question.multiple).to_s << if question.class == FillIn then question.question_text.gsub(/\-+/, '_____________________________') else question.question_text end if question.raw? @h.p { |p| p << qtext } else qtext.each_line do |p| @h.p do |par| par << p # preserves HTML markup end end end end yield # render answers end self end |
#render_questions ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/ruql/renderers/html5_renderer.rb', line 46 def render_questions render_random_seed @h.ol :class => 'questions' do @quiz.questions.each_with_index do |q,i| case q when MultipleChoice, SelectMultiple, TrueFalse then render_multiple_choice(q,i) when FillIn then render_fill_in(q, i) else raise "Unknown question type: #{q}" end end end end |
#render_quiz ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/ruql/renderers/html5_renderer.rb', line 18 def render_quiz if @template render_with_template do render_questions @output end else @h.html do @h.head do @h.title @quiz.title @h.link(:rel => 'stylesheet', :type =>'text/css', :href=>@css) if @css end @h.body do render_questions end end end self end |
#render_random_seed ⇒ Object
163 164 165 |
# File 'lib/ruql/renderers/html5_renderer.rb', line 163 def render_random_seed @h.comment! "Seed: #{@quiz.seed}" end |
#render_with_template ⇒ Object
38 39 40 41 42 43 44 |
# File 'lib/ruql/renderers/html5_renderer.rb', line 38 def render_with_template # local variables that should be in scope in the template quiz = @quiz # the ERB template includes 'yield' where questions should go: output = ERB.new(IO.read(File. @template)).result(binding) @output = output end |