Class: HtmlFormRenderer
- Inherits:
-
Object
- Object
- HtmlFormRenderer
- Defined in:
- lib/ruql/renderers/html_form_renderer.rb
Instance Attribute Summary collapse
-
#output ⇒ Object
readonly
Returns the value of attribute output.
Instance Method Summary collapse
-
#initialize(quiz, options = {}) ⇒ HtmlFormRenderer
constructor
A new instance of HtmlFormRenderer.
- #quiz_header ⇒ Object
- #render_answer_for_solutions(answer, raw) ⇒ 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_select_multiple(q, index) ⇒ Object
- #render_with_template ⇒ Object
Constructor Details
#initialize(quiz, options = {}) ⇒ HtmlFormRenderer
Returns a new instance of HtmlFormRenderer.
7 8 9 10 11 12 13 14 15 16 17 |
# File 'lib/ruql/renderers/html_form_renderer.rb', line 7 def initialize(quiz,={}) @css = .delete('c') || .delete('css') @js = .delete('j') || .delete('js') @show_solutions = .delete('s') || .delete('solutions') @template = .delete('t') || .delete('template') #|| #File.join(Gem.loaded_specs['ruql'].full_gem_path, 'templates/htmlform.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/html_form_renderer.rb', line 5 def output @output end |
Instance Method Details
#quiz_header ⇒ Object
182 183 184 185 186 187 188 189 190 191 192 193 |
# File 'lib/ruql/renderers/html_form_renderer.rb', line 182 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) ⇒ Object
142 143 144 145 146 147 148 149 150 151 |
# File 'lib/ruql/renderers/html_form_renderer.rb', line 142 def render_answer_for_solutions(answer,raw) args = {:class => (answer.correct? ? 'correct' : 'incorrect')} @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
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/ruql/renderers/html_form_renderer.rb', line 116 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
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/ruql/renderers/html_form_renderer.rb', line 69 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?) else #if q.raw? then @h.li { |l| l << answer.answer_text } else @h.li answer.answer_text end @h.input(:type => 'radio', :name => 'a', :class => 'select') { |p| p << answer.answer_text p << '</br>' } end end end end self end |
#render_question_text(question, index) ⇒ Object
153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 |
# File 'lib/ruql/renderers/html_form_renderer.rb', line 153 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 @h.input(:type => 'text', :class => 'fillin') if (question.class == FillIn) end end #end end yield # render answers end self end |
#render_questions ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/ruql/renderers/html_form_renderer.rb', line 50 def render_questions render_random_seed @h.form do @h.ol :class => 'questions' do @quiz.questions.each_with_index do |q,i| case q when SelectMultiple then render_select_multiple(q,i) when MultipleChoice, TrueFalse then render_multiple_choice(q,i) when FillIn then render_fill_in(q, i) else raise "Unknown question type: #{q}" end end end @h.input(:type => 'submit', :value => 'Enviar') end end |
#render_quiz ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/ruql/renderers/html_form_renderer.rb', line 19 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 @h.script(:type => 'text/javascript', :src => @js) do end if @js end @h.body do render_questions end end end self end |
#render_random_seed ⇒ Object
195 196 197 |
# File 'lib/ruql/renderers/html_form_renderer.rb', line 195 def render_random_seed @h.comment! "Seed: #{@quiz.seed}" end |
#render_select_multiple(q, index) ⇒ Object
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/ruql/renderers/html_form_renderer.rb', line 93 def render_select_multiple(q,index) render_question_text(q, index) do answers = if 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?) else #if q.raw? then @h.li { |l| l << answer.answer_text } else @h.li answer.answer_text end @h.input(:type => 'checkbox', :name => 'b', :class => 'check') { |p| p << answer.answer_text p << '</br>' } end end end end self end |
#render_with_template ⇒ Object
41 42 43 44 45 46 47 48 |
# File 'lib/ruql/renderers/html_form_renderer.rb', line 41 def render_with_template # local variables that should be in scope in the template quiz = @quiz title = "Quiz" unless @title # the ERB template includes 'yield' where questions should go: output = ERB.new(IO.read(File. @template)).result(binding) @output = output end |