diff --git a/static/app/scripts/app.js b/static/app/scripts/app.js
index 3afd477..019f652 100644
--- a/static/app/scripts/app.js
+++ b/static/app/scripts/app.js
@@ -3,17 +3,43 @@ function format_results(results) {
return nunjucks.render('search_results.html', {'results':results});
}
-function set_field_state(field_element, state) {
- var ok_span = '';
+function set_field_state(field_element, state, help_text) {
+ if(!help_text) {
+ help_text = '';
+ }
+ var help_span = ''+ help_text +'';
+ var state_to_icon = {
+ success: 'ok',
+ warning: 'warning-sign',
+ error: 'remove'
+ };
+ var feedback_span = '';
+ var css_class = 'has-'+state;
var form_group = field_element.parent();
- if(state === 'valid') {
- form_group.addClass('has-success has-feedback');
- if(!form_group.find('.form-control-feedback').length) {
- form_group.append(ok_span); // Only add once
+ form_group.removeClass('has-success has-warning has-error has-feedback'); // reset
+ if(['success', 'warning', 'error'].indexOf(state) !== -1) {
+ form_group.addClass(css_class +' has-feedback');
+ /* Feedback icon */
+ var feedback_el = form_group.find('.form-control-feedback');
+ if (!feedback_el.length) {
+ // add
+ form_group.append(feedback_span);
+ } else {
+ // Update
+ feedback_el.removeClass('glyphicon-ok glypicon-warning-sign glyphicon-remove');
+ feedback_el.addClass('glyphicon-'+state_to_icon[state]);
}
- } else {
- form_group.removeClass('has-success has-feedback');
+ /* Help text */
+ var help_text_el = form_group.find('.help-block');
+ if(!help_text_el.length) {
+ form_group.append(help_span);
+ } else {
+ help_text_el.text(help_text);
+ }
+ }
+ else {
form_group.find('.form-control-feedback').remove();
+ form_group.find('.help-block').remove();
}
}
@@ -42,9 +68,9 @@ function validate_form() {
var cardno_val = _dom.cardNumber.val();
var cardno_invalid = validate_cardnumber(cardno_val);
if(cardno_invalid) {
+ set_field_state(_dom.cardNumber, 'error', cardno_invalid);
errors.push(cardno_invalid);
}
- console.log(cardno_invalid);
if(errors.length === 0) {
_dom.registerButton.removeAttr('disabled');
@@ -92,8 +118,8 @@ $(document).ready(function(){
}
});
});
- /* Phonenumber as you type */
+ /* Phone number as you type */
_dom.phoneNumber.on('keyup', function() {
var val = _dom.phoneNumber.val().trim();
if(val.length === 0) {
@@ -102,12 +128,13 @@ $(document).ready(function(){
}
$.getJSON(urls.insidePhoneNumberApi, {q: val}, function(data) {
if(data.meta && data.meta.num_results == 1) {
- set_field_state(_dom.phoneNumber, 'valid');
+ set_field_state(_dom.phoneNumber, 'success');
} else {
set_field_state(_dom.phoneNumber, '');
}
});
});
+ /* Card number as you type */
_dom.cardNumber.on('keyup', function() {
if(!validate_form('cardNumber')) {
return;
@@ -115,8 +142,18 @@ $(document).ready(function(){
/* cardnumber should be in the database */
var val = _dom.cardNumber.val().trim();
$.getJSON(urls.insideCardNumber, {q: val}, function(data) {
- if(data.result === 'valid') {
- set_field_state(_dom.cardNumber, 'valid');
+ if(data.error) {
+ set_field_state(_dom.cardNumber, 'error', data.error);
+ return;
+ }
+ if(!data.valid) {
+ set_field_state(_dom.cardNumber, 'error', 'Cannot find card number in database.');
+ }
+ else if(data.user !== null && data.valid) {
+ set_field_state(_dom.cardNumber, 'warning', 'Card number belongs to existing user');
+ }
+ else if(data.user === null && data.valid) {
+ set_field_state(_dom.cardNumber, 'success');
} else {
set_field_state(_dom.cardNumber, '');
}
@@ -132,10 +169,10 @@ $(document).ready(function(){
_dom.phoneNumber.val(number);
});
- /* Default state disabled */
+ /* Initial state disabled */
_dom.registerButton.attr('disabled','disabled');
- /* Focus */
+ /* Initial focus */
if(_dom.usernameField) {
_dom.usernameField.focus();
}
diff --git a/static/dist/scripts/app.js b/static/dist/scripts/app.js
index 3afd477..019f652 100644
--- a/static/dist/scripts/app.js
+++ b/static/dist/scripts/app.js
@@ -3,17 +3,43 @@ function format_results(results) {
return nunjucks.render('search_results.html', {'results':results});
}
-function set_field_state(field_element, state) {
- var ok_span = '';
+function set_field_state(field_element, state, help_text) {
+ if(!help_text) {
+ help_text = '';
+ }
+ var help_span = ''+ help_text +'';
+ var state_to_icon = {
+ success: 'ok',
+ warning: 'warning-sign',
+ error: 'remove'
+ };
+ var feedback_span = '';
+ var css_class = 'has-'+state;
var form_group = field_element.parent();
- if(state === 'valid') {
- form_group.addClass('has-success has-feedback');
- if(!form_group.find('.form-control-feedback').length) {
- form_group.append(ok_span); // Only add once
+ form_group.removeClass('has-success has-warning has-error has-feedback'); // reset
+ if(['success', 'warning', 'error'].indexOf(state) !== -1) {
+ form_group.addClass(css_class +' has-feedback');
+ /* Feedback icon */
+ var feedback_el = form_group.find('.form-control-feedback');
+ if (!feedback_el.length) {
+ // add
+ form_group.append(feedback_span);
+ } else {
+ // Update
+ feedback_el.removeClass('glyphicon-ok glypicon-warning-sign glyphicon-remove');
+ feedback_el.addClass('glyphicon-'+state_to_icon[state]);
}
- } else {
- form_group.removeClass('has-success has-feedback');
+ /* Help text */
+ var help_text_el = form_group.find('.help-block');
+ if(!help_text_el.length) {
+ form_group.append(help_span);
+ } else {
+ help_text_el.text(help_text);
+ }
+ }
+ else {
form_group.find('.form-control-feedback').remove();
+ form_group.find('.help-block').remove();
}
}
@@ -42,9 +68,9 @@ function validate_form() {
var cardno_val = _dom.cardNumber.val();
var cardno_invalid = validate_cardnumber(cardno_val);
if(cardno_invalid) {
+ set_field_state(_dom.cardNumber, 'error', cardno_invalid);
errors.push(cardno_invalid);
}
- console.log(cardno_invalid);
if(errors.length === 0) {
_dom.registerButton.removeAttr('disabled');
@@ -92,8 +118,8 @@ $(document).ready(function(){
}
});
});
- /* Phonenumber as you type */
+ /* Phone number as you type */
_dom.phoneNumber.on('keyup', function() {
var val = _dom.phoneNumber.val().trim();
if(val.length === 0) {
@@ -102,12 +128,13 @@ $(document).ready(function(){
}
$.getJSON(urls.insidePhoneNumberApi, {q: val}, function(data) {
if(data.meta && data.meta.num_results == 1) {
- set_field_state(_dom.phoneNumber, 'valid');
+ set_field_state(_dom.phoneNumber, 'success');
} else {
set_field_state(_dom.phoneNumber, '');
}
});
});
+ /* Card number as you type */
_dom.cardNumber.on('keyup', function() {
if(!validate_form('cardNumber')) {
return;
@@ -115,8 +142,18 @@ $(document).ready(function(){
/* cardnumber should be in the database */
var val = _dom.cardNumber.val().trim();
$.getJSON(urls.insideCardNumber, {q: val}, function(data) {
- if(data.result === 'valid') {
- set_field_state(_dom.cardNumber, 'valid');
+ if(data.error) {
+ set_field_state(_dom.cardNumber, 'error', data.error);
+ return;
+ }
+ if(!data.valid) {
+ set_field_state(_dom.cardNumber, 'error', 'Cannot find card number in database.');
+ }
+ else if(data.user !== null && data.valid) {
+ set_field_state(_dom.cardNumber, 'warning', 'Card number belongs to existing user');
+ }
+ else if(data.user === null && data.valid) {
+ set_field_state(_dom.cardNumber, 'success');
} else {
set_field_state(_dom.cardNumber, '');
}
@@ -132,10 +169,10 @@ $(document).ready(function(){
_dom.phoneNumber.val(number);
});
- /* Default state disabled */
+ /* Initial state disabled */
_dom.registerButton.attr('disabled','disabled');
- /* Focus */
+ /* Initial focus */
if(_dom.usernameField) {
_dom.usernameField.focus();
}