270 lines
7.6 KiB
JavaScript
270 lines
7.6 KiB
JavaScript
(function (context, $) {
|
|
|
|
"use strict";
|
|
|
|
context.JK = context.JK || {};
|
|
context.JK.FindSessionScreen = function(app) {
|
|
var CATEGORY = {
|
|
ACTIVE: {index: 0, id: "table#sessions-active"},
|
|
SCHEDULED: {index: 1, id: "table#sessions-scheduled"}
|
|
};
|
|
|
|
var $dateFilter = $("#session-date-filter");
|
|
|
|
var logger = context.JK.logger;
|
|
var rest = context.JK.Rest();
|
|
var sessionList;
|
|
var currentQuery = defaultQuery();
|
|
var currentPage = 0;
|
|
var LIMIT = 50;
|
|
var $next = null;
|
|
var $scroller = null;
|
|
var $noMoreSessions = null;
|
|
|
|
function defaultQuery() {
|
|
return {offset:currentPage * LIMIT, limit:LIMIT, page:currentPage};
|
|
}
|
|
// for unit tests
|
|
function getCategoryEnum() {
|
|
return CATEGORY;
|
|
}
|
|
|
|
function removeSpinner($selector) {
|
|
$('div[layout-id=findSession] .content .spinner').remove();// remove any existing spinners
|
|
}
|
|
|
|
function addSpinner($selector) {
|
|
removeSpinner();
|
|
$selector.append('<div class="spinner spinner-large"></div>')
|
|
}
|
|
|
|
function loadSessions() {
|
|
addSpinner($('#sessions-active'));
|
|
addSpinner($('#sessions-scheduled'));
|
|
|
|
// get active sessions
|
|
rest.findActiveSessions(currentQuery)
|
|
.done(function(sessions) {
|
|
$.each(sessions, function(i, session) {
|
|
logger.debug('Rendering session ID = ' + session.id);
|
|
sessionList.renderActiveSession(session, $(CATEGORY.ACTIVE.id));
|
|
});
|
|
|
|
afterLoadSessions(sessions, $(CATEGORY.ACTIVE.id), $('#no-active-sessions'));
|
|
})
|
|
.fail(function(xhr, textStatus, errorMessage) {
|
|
if (xhr.status === 404) {
|
|
// swallow 404
|
|
}
|
|
else {
|
|
app.ajaxError(xhr, textStatus, errorMessage);
|
|
}
|
|
})
|
|
.always(function() {
|
|
removeSpinner($('#sessions-active'));
|
|
});
|
|
|
|
// get scheduled sessions
|
|
rest.findInactiveSessions(currentQuery)
|
|
.done(function(sessions) {
|
|
$.each(sessions, function(i, session) {
|
|
logger.debug('Rendering session ID = ' + session.id);
|
|
sessionList.renderInactiveSession(session, $(CATEGORY.SCHEDULED.id));
|
|
});
|
|
afterLoadSessions(sessions, $(CATEGORY.SCHEDULED.id), $('#no-scheduled-sessions'));
|
|
})
|
|
.fail(function(xhr, textStatus, errorMessage) {
|
|
if (xhr.status === 404) {
|
|
// swallow 404
|
|
}
|
|
else {
|
|
app.ajaxError(xhr, textStatus, errorMessage);
|
|
}
|
|
})
|
|
.always(function() {
|
|
removeSpinner($('#sessions-scheduled'));
|
|
});
|
|
}
|
|
|
|
function buildQuery() {
|
|
currentQuery = defaultQuery();
|
|
|
|
// genre filter
|
|
var genres = context.JK.GenreSelectorHelper.getSelectedGenres('#find-session-genre');
|
|
if (genres !== null && genres.length > 0) {
|
|
currentQuery.genres = genres.join(',');
|
|
}
|
|
|
|
// date filter
|
|
|
|
|
|
// language filter
|
|
|
|
|
|
// keyword filter
|
|
var keyword = $('#session-keyword-srch').val();
|
|
if (keyword !== null && keyword.length > 0 && keyword !== 'Search by Keyword') {
|
|
currentQuery.keyword = $('#session-keyword-srch').val();
|
|
}
|
|
|
|
// always set client ID (required on server)
|
|
currentQuery.client_id = context.JK.clientId;
|
|
|
|
return currentQuery;
|
|
}
|
|
|
|
function search() {
|
|
logger.debug("Searching for sessions...");
|
|
clearResults();
|
|
buildQuery();
|
|
loadSessions();
|
|
}
|
|
|
|
function afterLoadSessions(sessionList, $headerSelector, $noSessionsMsgSelector) {
|
|
|
|
if (sessionList.length == 0) {
|
|
$headerSelector.hide();
|
|
$noSessionsMsgSelector.show();
|
|
}
|
|
else {
|
|
$headerSelector.show();
|
|
$noSessionsMsgSelector.hide();
|
|
}
|
|
|
|
context.JK.GA.trackFindSessions(sessionList.length);
|
|
}
|
|
|
|
function beforeShow(data) {
|
|
context.JK.GenreSelectorHelper.render('#find-session-genre');
|
|
}
|
|
|
|
function afterShow(data) {
|
|
if(!context.JK.JamServer.connected) {
|
|
app.notifyAlert("Not Connected", 'To create or join a session, you must be connected to the server.');
|
|
window.location = '/client#/home'
|
|
return;
|
|
}
|
|
|
|
clearResults();
|
|
buildQuery();
|
|
loadSessions();
|
|
context.JK.guardAgainstBrowser(app);
|
|
}
|
|
|
|
function clearResults() {
|
|
currentPage = 0;
|
|
$noMoreSessions.hide();
|
|
$scroller.infinitescroll('resume');
|
|
$('table#sessions-active').children(':not(:first-child)').remove();
|
|
$('table#sessions-scheduled').children(':not(:first-child)').remove();
|
|
}
|
|
|
|
// function registerInfiniteScroll() {
|
|
|
|
// if(gon.use_cached_session_scores) {
|
|
|
|
// $scroller.infinitescroll({
|
|
|
|
// behavior: 'local',
|
|
// navSelector: '#findSession .btn-next-wrapper',
|
|
// nextSelector: '#findSession .btn-next',
|
|
// binder: $scroller,
|
|
// dataType: 'json',
|
|
// appendCallback: false,
|
|
// debug: true,
|
|
// prefill: false,
|
|
// bufferPx:100,
|
|
// loading: {
|
|
// msg: $('<div class="infinite-scroll-loader">Loading ...</div>'),
|
|
// img: '/assets/shared/spinner.gif'
|
|
// },
|
|
// path: function(page) {
|
|
// return '/api/sessions/nindex/' + app.clientId + '?' + $.param(buildQuery());
|
|
// }
|
|
// },function(json, opts) {
|
|
// // Get current page
|
|
// //currentPage = opts.state.currPage;
|
|
// // Do something with JSON data, create DOM elements, etc ..
|
|
// afterLoadScoredSessions(json);
|
|
// });
|
|
// }
|
|
// }
|
|
|
|
function events() {
|
|
|
|
$('#session-keyword-srch').focus(function () {
|
|
$(this).val('');
|
|
});
|
|
|
|
$("#session-keyword-srch").keypress(function (evt) {
|
|
if (evt.which === 13) {
|
|
evt.preventDefault();
|
|
search();
|
|
}
|
|
});
|
|
|
|
$('#btn-refresh').on("click", search);
|
|
|
|
$(document).on("rsvpSubmitEvent", function() {
|
|
$('#btn-refresh').trigger('click');
|
|
});
|
|
}
|
|
|
|
function initialize() {
|
|
|
|
var screenBindings = {
|
|
'beforeShow': beforeShow,
|
|
'afterShow': afterShow
|
|
};
|
|
app.bindScreen('findSession', screenBindings);
|
|
|
|
sessionList = new context.JK.SessionList(app);
|
|
|
|
$next = $('#findSession .btn-next')
|
|
$scroller = $('#findSession .content-body-scroller');
|
|
$noMoreSessions = $('#end-of-session-list');
|
|
|
|
$dateFilter.datepicker({
|
|
dateFormat: "D d MM yy",
|
|
onSelect: toggleDate
|
|
}
|
|
);
|
|
|
|
context.JK.dropdown($('#session-language-filter'));
|
|
|
|
events();
|
|
}
|
|
|
|
function toggleDate() {
|
|
var selectedDate = new Date($dateFilter.val());
|
|
var currentDate = new Date();
|
|
var startIndex = 0;
|
|
|
|
if (currentDate.getYear() == selectedDate.getYear() &&
|
|
currentDate.getMonth() == selectedDate.getMonth() &&
|
|
currentDate.getDate() == selectedDate.getDate()) {
|
|
|
|
var timeString = getFormattedTime(currentDate, true);
|
|
startIndex = defaultTimeArray.indexOf(timeString);
|
|
}
|
|
|
|
// var $startTimeList = $('#start-time-list');
|
|
// $startTimeList.empty();
|
|
// for (var i = startIndex; i < defaultTimeArray.length; i++) {
|
|
// var strTime = defaultTimeArray[i];
|
|
// $startTimeList.append($('<option value="' + strTime + '" class="label">' + strTime +'</option>'));
|
|
// }
|
|
}
|
|
|
|
this.initialize = initialize;
|
|
this.afterShow = afterShow;
|
|
|
|
// Following exposed for easier testing.
|
|
// this.setSession = setSession;
|
|
this.clearResults = clearResults;
|
|
this.getCategoryEnum = getCategoryEnum;
|
|
|
|
return this;
|
|
};
|
|
|
|
})(window, jQuery); |