Commit fbc0c303 by Alan Boudreault

Created a MessageView to avoid code duplication

parent 3a51a93a
// TODO: Split in two files // TODO: Split in two files
var mrqAttemptsTemplate = _.template($('#xblock-mrq-attempts').html()); var mrqAttemptsTemplate = _.template($('#xblock-mrq-attempts').html());
function MessageView(element) {
return {
messageDOM: $('.choice-message', element),
allPopupsDOM: $('.choice-tips, .choice-message', element),
clearPopupEvents: function() {
this.allPopupsDOM.hide();
$('.close', this.allPopupsDOM).off('click');
},
showPopup: function(popupDOM) {
this.clearPopupEvents();
popupDOM.show();
popupDOM.on('click', function() {
this.clearPopupEvents();
});
},
showMessage: function(message) {
if (_.isString(message)) {
this.messageDOM.html(message);
this.showPopup(this.messageDOM);
}
else {
this.showPopup(message); // already a DOM
}
}
}
}
function MCQBlock(runtime, element) { function MCQBlock(runtime, element) {
return { return {
submit: function() { submit: function() {
...@@ -14,7 +41,6 @@ function MCQBlock(runtime, element) { ...@@ -14,7 +41,6 @@ function MCQBlock(runtime, element) {
}, },
handleSubmit: function(result) { handleSubmit: function(result) {
if (result.type == 'rating') { if (result.type == 'rating') {
if (_.size(result.tips) > 0) { if (_.size(result.tips) > 0) {
var tipsDom = $(element).parent().find('.messages'), var tipsDom = $(element).parent().find('.messages'),
...@@ -26,6 +52,7 @@ function MCQBlock(runtime, element) { ...@@ -26,6 +52,7 @@ function MCQBlock(runtime, element) {
} }
else { // choices else { // choices
var messageView = MessageView(element);
var choiceInputs = $('.choice input', element); var choiceInputs = $('.choice input', element);
$.each(choiceInputs, function(index, choiceInput) { $.each(choiceInputs, function(index, choiceInput) {
var choiceInputDOM = $(choiceInput), var choiceInputDOM = $(choiceInput),
...@@ -51,37 +78,20 @@ function MCQBlock(runtime, element) { ...@@ -51,37 +78,20 @@ function MCQBlock(runtime, element) {
choiceTipsCloseDOM = $('.close', choiceTipsDOM); choiceTipsCloseDOM = $('.close', choiceTipsDOM);
choiceResultDOM.off('click').on('click', function() { choiceResultDOM.off('click').on('click', function() {
showPopup(choiceTipsDOM); messageView.showMessage(choiceTipsDOM);
}); });
}); });
var messageDOM = $('.choice-message', element),
allPopupsDOM = $('.choice-tips, .choice-message', element),
clearPopupEvents = function() {
allPopupsDOM.hide();
$('.close', allPopupsDOM).off('click');
},
showPopup = function(popupDOM) {
clearPopupEvents();
popupDOM.show();
popupDOM.on('click', function() {
clearPopupEvents();
});
};
if (_.isNull(result.submission)) { if (_.isNull(result.submission)) {
messageDOM.html('<div class="message-content"><div class="close"></div>' + messageView.showMessage('<div class="message-content"><div class="close"></div>' +
'You have not provided an answer.' + '</div>'); 'You have not provided an answer.' + '</div>');
showPopup(messageDOM);
} }
else if (result.tips) { else if (result.tips) {
var tips = _.find(result.tips, function(obj) { var tips = _.find(result.tips, function(obj) {
return obj.choice == result.submission; return obj.choice == result.submission;
}); });
if (tips) { if (tips) {
messageDOM.html(tips.tips); messageView.showMessage(tips.tips);
showPopup(messageDOM);
} else { } else {
clearPopupEvents(); clearPopupEvents();
} }
...@@ -126,25 +136,11 @@ function MRQBlock(runtime, element) { ...@@ -126,25 +136,11 @@ function MRQBlock(runtime, element) {
}, },
handleSubmit: function(result) { handleSubmit: function(result) {
var messageDOM = $('.choice-message', element), var messageView = MessageView(element);
allPopupsDOM = $('.choice-tips, .choice-message', element),
clearPopupEvents = function() {
allPopupsDOM.hide();
$('.close', allPopupsDOM).off('click');
},
showPopup = function(popupDOM) {
clearPopupEvents();
popupDOM.show();
popupDOM.on('click', function() {
clearPopupEvents();
});
};
if (result.message) { if (result.message) {
messageDOM.html('<div class="message-content"><div class="close"></div>' + messageView.showMessage('<div class="message-content"><div class="close"></div>' +
result.message + '</div>'); result.message + '</div>');
showPopup(messageDOM);
} }
var answers = []; // used in displayAnswers var answers = []; // used in displayAnswers
...@@ -176,11 +172,11 @@ function MRQBlock(runtime, element) { ...@@ -176,11 +172,11 @@ function MRQBlock(runtime, element) {
choiceTipsCloseDOM = $('.close', choiceTipsDOM); choiceTipsCloseDOM = $('.close', choiceTipsDOM);
choiceResultDOM.off('click').on('click', function() { choiceResultDOM.off('click').on('click', function() {
showPopup(choiceTipsDOM); messageView.showMessage(choiceTipsDOM);
}); });
choiceAnswerDOM.off('click').on('click', function() { choiceAnswerDOM.off('click').on('click', function() {
showPopup(choiceTipsDOM); messageView.showMessage(choiceTipsDOM);
}); });
}); });
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment