Skip to content

Commit

Permalink
tab advance on the submission page
Browse files Browse the repository at this point in the history
benthemonkey committed Apr 12, 2015
1 parent 34eead0 commit 4d5da1c
Showing 1 changed file with 12 additions and 173 deletions.
185 changes: 12 additions & 173 deletions js/pointsCenter.js
Original file line number Diff line number Diff line change
@@ -4,6 +4,7 @@ define(['jquery', 'moment', 'hogan'], function($, moment, Hogan) {
type = 'Other',
root = '/points',
valid_event_name = false,
tab_pressed = false, // for convenient, fast tab-completion on submission page
slivkanNameExists = function(name) {
if(name.length === 0){
return null;
@@ -38,6 +39,10 @@ define(['jquery', 'moment', 'hogan'], function($, moment, Hogan) {
//needs a delay because typeahead.js seems to not like destroying on focusout
setTimeout(function(target) {
event.data.callback(target.typeahead('destroy').closest('.form-group'));

if(tab_pressed){
target.closest('.form-group').next().find('input').focus();
}
}, 1, target);
}
};
@@ -477,12 +482,17 @@ define(['jquery', 'moment', 'hogan'], function($, moment, Hogan) {

submission = {
init: function() {
//prevent [Enter] from causing form submit
$(window).on('keydown', function(event) {
if(event.keyCode == 13) {
if(event.keyCode == 9){
tab_pressed = true;
}else if(event.keyCode == 13){ //prevent [Enter] from causing form submit
event.preventDefault();
return false;
}
}).on('keyup', function(event) {
if(event.keyCode == 9){
tab_pressed = false;
}
});

$.getJSON(root + '/ajax/getSlivkans.php', function(data) {
@@ -1368,177 +1378,6 @@ define(['jquery', 'moment', 'hogan'], function($, moment, Hogan) {
}
},

updateSlivkans = {
init: function() {
$.getJSON(root + '/ajax/getSlivkans.php', function(data) {
slivkans = data.slivkans;
nicknames = data.nicknames;

//tack on nicknames to slivkans
for(var i=0; i<nicknames.length; i++){
var ind = slivkans.indexOfKey('nu_email', nicknames[i].nu_email);
if(ind !== -1){
slivkans[ind].tokens.push(nicknames[i].nickname);
}
}

submission.appendSlivkanInputs(9);

$('#slivkan-entry-tab') .on('focus', '.slivkan-entry', updateSlivkans.slivkanTypeahead)
.on('typeahead:closed', '.slivkan-entry.tt-query',
{callback: updateSlivkans.validateSlivkanName},
destroyTypeahead);
});

$('#committee').on('change', function(event){
$('#suite').val('');
$('.committee-points').val(0).show();

if(event.target.value.length > 0){
$.getJSON(root + '/ajax/getCommitteeOrSuite.php', {committee: event.target.value}, updateSlivkans.addSlivkans);
}
});

$('#suite').on('change', function(event){
$('#committee').val('');
$('.committee-points').hide();

if(event.target.value.length > 0){
$.getJSON(root + '/ajax/getCommitteeOrSuite.php', {suite: event.target.value}, updateSlivkans.addSlivkans);
}
});

$('#submit').on('click', function(){
var name, pts,
entries = $('#slivkan-entry-tab').find('.slivkan-entry'),
committeePoints = $('.committee-points'),
committee = $('#committee').val(),
suite = $('#suite').val(),
nuEmailArray = [],
committeePointsArray = [];

for(var i=0; i<entries.length; i++){
name = entries.eq(i).val();
if(name.length > 0){
nuEmailArray.push(slivkans[slivkans.indexOfKey('full_name', name)].nu_email);
}

if(committee.length > 0){
pts = committeePoints.eq(i).val();
committeePointsArray.push(pts);
}
}

if(committee.length > 0){
$.post(
root + '/ajax/submitCommitteeOrSuite.php',
{
committee: committee,
slivkans: nuEmailArray,
points: committeePointsArray
},
function(data){
window.alert(data);
}
);
}else if(suite.length > 0){
$.post(
root + '/ajax/submitCommitteeOrSuite.php',
{
suite: suite,
slivkans: nuEmailArray
},
function(data){
window.alert(data);
}
);
}
});
},
slivkanTypeahead: function() {
var target = $(this);

if(target.closest('.slivkan-entry-control').addClass('has-warning').is(':last-child')){
var num_inputs = $('#slivkan-entry-tab').find('.slivkan-entry').length;
if(num_inputs < 20){
submission.appendSlivkanInputs(1);
}
}
if(!target.hasClass('tt-query')){
target.typeahead(typeaheadOpts('slivkans', slivkans)).focus();
}
},
validateSlivkanName: function(entry) {
var valid = true,
slivkan_entry = entry.find('.slivkan-entry'),
name = slivkan_entry.val(),
nickname_ind = nicknames.indexOfKey('nickname', name);

if(nickname_ind != -1){
name = slivkans[slivkans.indexOfKey('nu_email', nicknames[nickname_ind].nu_email)].full_name;
slivkan_entry.val(name);
}

var nameArray = [];

//clear duplicates
$('#slivkan-entry-tab').find('.slivkan-entry').each(function() {
var self = $(this);
if(self.val().length > 0){
if(nameArray.indexOf(self.val()) == -1){
nameArray.push(self.val());
}else{
self.val('');
$('#duplicate-alert').show();
submission.validateSlivkanName(self.parent(), true);
}
}
});

//no names = invalid
if(nameArray.length === 0){ valid = false; }

//update name in case it changed
name = slivkan_entry.val();

entry.removeClass('has-warning');

if(name.length > 0){
if(slivkans.indexOfKey('full_name', name) == -1){ valid=false; }
updateValidity(entry, valid);
}else{
entry.removeClass('has-success has-error');
}

return valid;
},
addSlivkans: function(data) {
var entries = $('#slivkan-entry-tab').find('.slivkan-entry-control'),
len = data.length;

entries.find('.slivkan-entry').val('');

if(entries.length <= len){
submission.appendSlivkanInputs(len - entries.length + 1);
entries = $('#slivkan-entry-tab').find('.slivkan-entry-control');
}

for(var i=0; i<len; i++){
var entry = entries.eq(i),
name = slivkans[slivkans.indexOfKey('nu_email', data[i].nu_email)].full_name;
entry.find('.slivkan-entry').val(name);
if(data[i].committee){
entry.find('.committee-points').val(data[i].committee);
}
updateSlivkans.validateSlivkanName(entry);
}

for(i; i<entries.length; i++){
updateSlivkans.validateSlivkanName(entries.eq(i));
}
}
},

committeeHeadquarters = {
openPopover: null,
init: function() {

0 comments on commit 4d5da1c

Please sign in to comment.