fixes #50 - summary page progress on saves

This commit is contained in:
Mark Moser 2016-08-10 10:38:20 -05:00
parent 76bb21a150
commit 2c7948903d
6 changed files with 34 additions and 16 deletions

View File

@ -1,5 +1,5 @@
function updateResults(elem) { function updateResults(elem) {
if ($(elem).length ===0){return false;}; if ($(elem).length ===0){return false;}
var resultsContainer = $(elem).find('[data-id="results"]')[0]; var resultsContainer = $(elem).find('[data-id="results"]')[0];
var codeHtml = $(elem).find('.code-html')[0].value.trim(); var codeHtml = $(elem).find('.code-html')[0].value.trim();

View File

@ -32,11 +32,22 @@ function updateLocalValues($form){
}); });
} }
function updateProgress(data) {
$(".progress-bar").attr('aria-valuenow', data.progress)
.attr('style','width: '+ data.progress +'%;')
.find('span').text(data.progress + '%');
if(data.can_submit === true){
$('#summary-submit').find('.error').remove();
$('#summary-submit').find('.submit-button').prop('disabled', false);
}
}
function prepareAjax($form) { function prepareAjax($form) {
$form.on("ajax:success", function(e, data){ $form.on("ajax:success", function(e, data){
$form.prepend('<div class="success">' + data.message + '</div>'); $form.prepend('<div class="success">' + data.message + '</div>');
disableForm($form); disableForm($form);
updateLocalValues($form); updateLocalValues($form);
updateProgress(data);
}).on("ajax:error", function(e, xhr) { }).on("ajax:error", function(e, xhr) {
if (xhr.status === 400){ if (xhr.status === 400){
$form.prepend('<div class="error">' + xhr.responseJSON.join('<br>') + '</div>'); $form.prepend('<div class="error">' + xhr.responseJSON.join('<br>') + '</div>');

View File

@ -29,6 +29,10 @@ label {
font-weight: 300; font-weight: 300;
} }
form.btn-center {
text-align: center;
}
#{$all-text-inputs} { #{$all-text-inputs} {
display: block; display: block;
font-size: $base-font-size; font-size: $base-font-size;

View File

@ -11,9 +11,10 @@ class QuizController < ApplicationController
def update_answer def update_answer
@answer = prep_answer answer_params[:question_id] @answer = prep_answer answer_params[:question_id]
prep_status
send "process_#{prep_question(answer_params[:question_id]).input_type}" send "process_#{prep_question(answer_params[:question_id]).input_type}"
route_remote and return if request.xhr? route_answer_xhr and return if request.xhr?
route_answer route_answer_html
end end
def summary def summary
@ -21,11 +22,10 @@ class QuizController < ApplicationController
redirect_to :question and return unless prep_status.current_question_id.nil? redirect_to :question and return unless prep_status.current_question_id.nil?
end end
def update_summary def submit_summary
prep_status
not_completed_error = 'You must complete all questions to submit your test.' not_completed_error = 'You must complete all questions to submit your test.'
record_error = 'There was a problem with your submission. Please try again later.' record_error = 'There was a problem with your submission. Please try again later.'
redirect_to :summary, flash: { error: not_completed_error } and return unless @status.can_submit redirect_to :summary, flash: { error: not_completed_error } and return unless prep_status.can_submit
redirect_to :thankyou and return if current_candidate.complete! redirect_to :thankyou and return if current_candidate.complete!
redirect_to :summary, flash: { error: record_error } redirect_to :summary, flash: { error: record_error }
end end
@ -62,9 +62,8 @@ class QuizController < ApplicationController
answer answer
end end
def route_answer def route_answer_html
if @answer.errors.present? if @answer.errors.present?
prep_status
prep_question answer_params[:question_id] prep_question answer_params[:question_id]
flash[:error] = answer_params[:question_id].to_i flash[:error] = answer_params[:question_id].to_i
render :question render :question
@ -75,11 +74,16 @@ class QuizController < ApplicationController
end end
end end
def route_remote def route_answer_xhr
if @answer.errors.present? if @answer.errors.present?
render json: @answer.errors["answer"].to_json, status: 400 render json: @answer.errors["answer"].to_json, status: 400
else else
render json: { message: "Your answer has been updated successfully!" }.to_json results = {
message: "Your answer has been updated successfully!",
can_submit: prep_status.can_submit,
progress: prep_status.progress
}
render json: results.to_json
end end
end end

View File

@ -43,11 +43,10 @@
<% end %> <% end %>
<% end %> <% end %>
<% if @status.can_submit %> <%= form_tag post_summary_path, id: 'summary-submit', class: "btn-center" do %>
<%= form_tag post_summary_path, class: "btn-container-right" do %> <% unless @status.can_submit %>
<input type="submit" class="submit-button" value="Submit all answers" name="submit" /> <div class="error">Sorry, you must answer all questions before you can submit.</div>
<% end %> <% end %>
<% else %> <%= submit_tag "Submit all answers", {class: 'submit-button', disabled: !@status.can_submit } %>
<div class="error">Sorry, you must answer all questions before you can submit.</div>
<% end %> <% end %>
</main> </main>

View File

@ -9,7 +9,7 @@ Rails.application.routes.draw do
post "/question(/:answer_id)", to: "quiz#update_answer", as: :post_answer post "/question(/:answer_id)", to: "quiz#update_answer", as: :post_answer
get "/question(/:question_id)", to: "quiz#question", as: :question get "/question(/:question_id)", to: "quiz#question", as: :question
post "/summary", to: "quiz#update_summary", as: :post_summary post "/summary", to: "quiz#submit_summary", as: :post_summary
get "/summary", to: "quiz#summary", as: :summary get "/summary", to: "quiz#summary", as: :summary
get "/review/logout", to: "review#logout", as: :review_logout get "/review/logout", to: "review#logout", as: :review_logout