jam-cloud/web/app/assets/javascripts/findMusician.js

157 lines
4.6 KiB
JavaScript

(function(context,$) {
"use strict";
context.JK = context.JK || {};
context.JK.FindMusicianScreen = function(app) {
var logger = context.JK.logger;
var musicians = {};
var musicianList;
function removeSpinner() {
$('<div[layout-id=findMusician] .content .spinner').remove();
}
function addSpinner() {
removeSpinner();
$('<div[layout-id=findMusician] .content').append('<div class="spinner spinner-large"></div>')
}
function loadMusicians(queryString) {
addSpinner();
// squelch nulls and undefines
queryString = !!queryString ? queryString : "";
$.ajax({
type: "GET",
url: "/api/users?" + queryString,
async: true,
success: afterLoadMusicians,
complete: removeSpinner,
error: app.ajaxError
});
}
function search() {
logger.debug("Searching for musicians...");
clearResults();
var queryString = 'musicians=1&';
// order by
var orderby = $('.musician-order-by').val();
if (orderby !== null && orderby.length() > 0) {
queryString += "orderby=" + orderby + '&';
}
// instrument filter
var instrument = $('.instrument-list').val();
if (instruments !== null && instruments.length() > 0) {
queryString += "instrument=" + instrument;
}
// distance filter
var query_param = $('#musician-query-distance').val();
if (query_param !== null && query_param.length > 0) {
var matches = query_param.match(/(\d)/);
if (0 < matches.length()) {
var distance = matches[0];
query_param = $('#musician-query-center').val();
if (query_param !== null && query_param.length > 0) {
matches = query_param.match(/\\d{5}(-\\d{4})?/);
if (0 < matches.length()) {
var zip = matches[0];
queryString += "zip=" + query_param + '&';
queryString += "distance=" + query_param + '&';
}
}
}
}
loadMusicians(queryString);
}
function refreshDisplay() {
var priorVisible;
}
function afterLoadMusicians(musicianList) {
// display the 'no musicians' banner if appropriate
var $noMusiciansFound = $('#musicians-none-found');
if(musicianList.length == 0) {
$noMusiciansFound.show();
}
else {
$noMusiciansFound.hide();
}
startMusicianLatencyChecks(musicianList);
context.JK.GA.trackFindMusicians(musicianList.length);
}
/**
* Render a single musician line into the table.
* It will be inserted at the appropriate place according to the
* sortScore in musicianLatency.
*/
function renderMusician(musicianId) {
// store musician in the appropriate bucket and increment category counts
var musician = musicians[musicianId];
refreshDisplay();
}
function beforeShow(data) {
context.JK.InstrumentSelectorHelper.render('#find-musician-instrument');
}
function afterShow(data) {
clearResults();
refreshDisplay();
loadMusicians();
}
function clearResults() {
musicians = {};
}
function events() {
$('#musician-keyword-srch').focus(function() {
$(this).val('');
});
$("#musician-keyword-srch").keypress(function(evt) {
if (evt.which === 13) {
evt.preventDefault();
search();
}
});
$('#btn-refresh').on("click", search);
}
/**
* Initialize, providing an instance of the MusicianLatency class.
*/
function initialize(latency) {
var screenBindings = {
'beforeShow': beforeShow,
'afterShow': afterShow
};
app.bindScreen('findMusician', screenBindings);
musicianList = new context.JK.MusicianList(app);
events();
}
this.initialize = initialize;
this.renderMusician = renderMusician;
this.afterShow = afterShow;
// Following exposed for easier testing.
this.setMusician = setMusician;
this.clearResults = clearResults;
this.getCategoryEnum = getCategoryEnum;
return this;
};
})(window,jQuery);