fixes #40 - summary noJS messages

This commit is contained in:
Mark Moser 2016-08-04 22:28:20 -05:00
parent 5d906c6ff4
commit 8640effbfc
4 changed files with 32 additions and 26 deletions

View File

@ -7,11 +7,11 @@
return this.each(function(){ return this.each(function(){
var lineHeight = parseInt($(this).css('line-height')); var lineHeight = parseInt($(this).css('line-height'));
var rows = Math.ceil(input / lineHeight); var rows = Math.ceil(input / lineHeight);
rows = rows == 0 ? 1 : rows; rows = rows === 0 ? 1 : rows;
$(this).attr('rows', rows); $(this).attr('rows', rows);
}) });
} };
$('input[type="radio"]').on('change', function() { $('input[type="radio"]').on('change', function() {
var inputName = $(this).attr('name'); var inputName = $(this).attr('name');
@ -40,7 +40,7 @@ var editClickHandler = function(e) {
} }
else if(thisEd.find('input').attr('type') == 'checkbox') { else if(thisEd.find('input').attr('type') == 'checkbox') {
$(thisEd.find('input')).each(function() { $(thisEd.find('input')).each(function() {
if($(this).prop('checked')==true) { if($(this).prop('checked') === true) {
existingValue.push($(this).val()); existingValue.push($(this).val());
} }
}); });
@ -91,7 +91,8 @@ var saveClickHandler = function(e) {
var thisEd = $(e.delegateTarget); var thisEd = $(e.delegateTarget);
var data =[]; var data =[];
var executeQuery; var executeQuery;
var questionId = thisEd.find('.button-edit').attr('data-questionid'); var questionId = thisEd.find('.button-edit').attr('data-questionId');
var answerId = thisEd.find('.button-edit').attr('data-answerId');
if (thisEd.hasClass('live_code-type')) { if (thisEd.hasClass('live_code-type')) {
var htmlAnswer = $(thisEd.find('textarea.code-html')[0]).val(); var htmlAnswer = $(thisEd.find('textarea.code-html')[0]).val();
@ -103,27 +104,28 @@ var saveClickHandler = function(e) {
'css': cssAnswer, 'css': cssAnswer,
'js': jsAnswer 'js': jsAnswer
} }
} };
} else if(thisEd.hasClass('radio-type')) { } else if(thisEd.hasClass('radio-type')) {
$(thisEd.find('input')).each(function() { $(thisEd.find('input')).each(function() {
if($(this).prop('checked')==true) { if($(this).prop('checked') === true) {
data = ({ data = ({
'radio': $(this).val() 'radio': $(this).val()
}) });
} }
}); });
} else if(thisEd.hasClass('checkbox-type')) { } else if(thisEd.hasClass('checkbox-type')) {
data = {'checkbox': []}; data = {'checkbox': []};
$(thisEd.find('input')).each(function() { $(thisEd.find('input')).each(function() {
if($(this).prop('checked')==true) { if($(this).prop('checked') === true) {
data.checkbox.push($(this).val()); data.checkbox.push($(this).val());
} }
}); });
} else { } else {
data = {'text': thisEd.find('textarea').val()}; data = {'text': thisEd.find('textarea').val()};
} }
if(data == '') {
if(data === '') {
$(thisEd).before('<div class="error">Please select or enter a value.</div>'); $(thisEd).before('<div class="error">Please select or enter a value.</div>');
} else { } else {
thisEd.find('textarea:not(.code-answer)').replaceWith('<p class="text-answer answer-container">' + $.trim(thisEd.find('textarea').val()) + '</p>'); thisEd.find('textarea:not(.code-answer)').replaceWith('<p class="text-answer answer-container">' + $.trim(thisEd.find('textarea').val()) + '</p>');
@ -133,7 +135,7 @@ var saveClickHandler = function(e) {
type: "POST", type: "POST",
url: url, url: url,
data: ({ data: ({
'answer': data, 'answer': $.extend(data, {'question_id': questionId, 'answer_id': answerId}),
'submit': true 'submit': true
}), }),
success: function(data){ success: function(data){
@ -143,12 +145,12 @@ var saveClickHandler = function(e) {
executeQuery = false; executeQuery = false;
} }
}).done(function() { }).done(function() {
if(executeQuery == true) { if(executeQuery === true) {
$('.success, .error').remove(); $('.success, .error').remove();
$(thisEd).before('<div class="success">Your answer has been updated successfully!</div>'); $(thisEd).before('<div class="success">Your answer has been updated successfully!</div>');
$(thisEd).find('.code-answer').attr('disabled', true); $(thisEd).find('.code-answer').attr('disabled', true);
} }
if(executeQuery == false) { if(executeQuery === false) {
$('.error, .success').remove(); $('.error, .success').remove();
$(thisEd).before('<div class="error">Oops! There was an error processing your request. Please try again.</div>'); $(thisEd).before('<div class="error">Oops! There was an error processing your request. Please try again.</div>');
} }
@ -167,7 +169,7 @@ $('.answer-block').prop('disabled', true);
// Question events // Question events
$('.answer-sec') $('.answer-sec')
.find('.button-cancel, .button-save').hide().end() .find('.button-cancel, .button-save').hide().end()
// // delegating events // delegating events
.on('click', '.button-edit', editClickHandler) .on('click', '.button-edit', editClickHandler)
.on('click', '.button-cancel', cancelClickHandler) .on('click', '.button-cancel', cancelClickHandler)
.on('click', '.button-save', saveClickHandler); .on('click', '.button-save', saveClickHandler);

View File

@ -1,4 +1,4 @@
<% if flash[:answer_error] == question.question_id %> <% if flash[:answer_error] == question.question_id && answer.present? %>
<% answer.errors.messages[:answer].each do |message| %> <% answer.errors.messages[:answer].each do |message| %>
<div class="error"><%= message %></div> <div class="error"><%= message %></div>
<% end %> <% end %>

View File

@ -11,18 +11,22 @@
Please revisit this page with JavaScript enabled to modify your answer. Please revisit this page with JavaScript enabled to modify your answer.
</div> --> </div> -->
<% unless params[:action] == 'summary' %> <div data-id="live-coder-finish-later">
<div data-id="live-coder-finish-later"> <p class="warning">
<p class="warning"> This is a question where you will be asked to write code, and it utilizes a JavaScript-enabled
This is a question where you will be asked to write code, and it utilizes a JavaScript-enabled environment. It looks like JavaScript is not loaded.
environment. It looks like JavaScript is not loaded. Please check the box below <% unless params[:action] == 'summary' %>
to acknowledge that you agree to come back at a later time to finish answering this question Please check the box below to acknowledge that you agree to come back at a later time to finish
before you can submit the test. answering this question before you can submit the test.
</p> <% else %>
You will need to enable JavaScript and answer this question before you can submit the test.
<% end %>
</p>
<% unless params[:action] == 'summary' %>
<%= form.check_box(:answer, checkbox_html, true, '') %> <%= form.check_box(:answer, checkbox_html, true, '') %>
<%= form.label(option_id, 'I will come back later to finish this code question') %> <%= form.label(option_id, 'I will come back later to finish this code question') %>
</div> <% end %>
<% end %> </div>
<div data-id="live-coder-answer"> <div data-id="live-coder-answer">
<% # answers inserted dynamically via jQuery .load() <% # answers inserted dynamically via jQuery .load()

View File

@ -15,7 +15,7 @@
<h3><%= question.question %></h3> <h3><%= question.question %></h3>
</div> </div>
<div class="answer-buttons"> <div class="answer-buttons">
<a href="<%= question_path(question.question_id) %>" class="tertiary-btn button-edit" data-questionId="<%= question.question_id %>">Edit</a> <a href="<%= question_path(question.question_id) %>" class="tertiary-btn button-edit" data-answerId="<%= question.answer_id %>" data-questionId="<%= question.question_id %>">Edit</a>
<button class="tertiary-btn button-save">Save</button> <button class="tertiary-btn button-save">Save</button>
<button class="tertiary-btn button-cancel">Cancel</button> <button class="tertiary-btn button-cancel">Cancel</button>
</div> </div>