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

236 lines
8.4 KiB
JavaScript

(function(context,$) {
"use strict";
context.JK = context.JK || {};
context.JK.SearchResultScreen = function(app) {
var logger = context.JK.logger;
var instrument_logo_map = context.JK.getInstrumentIconMap24();
function initializeSearchNavLinks() {
$('.search-nav').click(function() {
$('.search-nav.active').removeClass('active');
$(this).addClass('active');
setTimeout(search, 100);
context.JK.Sidebar.searchTypeSelection($(this).data('search_text_type'));
});
}
context.JK.SearchResultScreen.searchTypeSelection = function(typeSelection) {
$('.search-nav.active').removeClass('active');
$('.search-result-header a[data-search_text_type='+typeSelection+']').addClass('active');
}
function beforeShow(data) {
var query = data.query;
}
function afterShow(data) {
}
function selectedSearchType() {
var srchtype = $('.search-nav.active').data('search_text_type');
if (srchtype === undefined) {
srchtype = $('#search_text_type').val();
}
return srchtype;
}
function search(evt) {
if (evt) {
evt.stopPropagation();
}
$('#search-results').empty();
var query = $('#search-input').val();
if (query) {
context.location = '#/searchResults/:' + query;
} else {
query = $('#query').html();
}
if (query !== '') {
$('#query').html(query);
query += '&search_text_type='+selectedSearchType();
context.JK.search(query, app, context.JK.SearchResultScreen.onSearchSuccess);
} else {
$('#result-count').html('');
$('#query').html('');
}
return false;
}
function resultDivVisibility(val, isSidebar) {
if (isSidebar) {
$('div[layout=sidebar user-id=' + val.id + '].sidebar-search-connected').hide();
$('div[layout=sidebar user-id=' + val.id + '].sidebar-search-result').show();
} else {
$('div[user-id=' + val.id + '].search-connected').hide();
$('div[user-id=' + val.id + '].search-result').show();
}
}
context.JK.SearchResultScreen.onSearchSuccess = function(response) {
searchResults(response, true);
searchResults(response, false);
}
function searchResults(response, isSidebar) {
var resultCount=0;
var selector, template_name;
selector = isSidebar ? '#sidebar-search-results' : '#search-results';
$(selector).html('');
if (response.search_type === 'musicians') {
resultCount = response.musicians.length;
// TODO: generalize this for each search result type (band, musician, et. al.)
template_name = isSidebar ? "#template-musicians-sidebar-search-result" : "#template-musicians-search-result";
$.each(response.musicians, function(index, val) {
// fill in template for Connect pre-click
var args = {
userId: val.id,
avatar_url: context.JK.resolveAvatarUrl(val.photo_url),
profile_url: "/#/profile/" + val.id,
userName: val.name,
location: val.location,
instruments: getInstrumentHtml(val.instruments)
};
selector = isSidebar ? '#sidebar-search-results' : '#search-results';
$(selector).append(context.JK.fillTemplate($(template_name).html(), args));
// fill in template for Connect post-click
selector = isSidebar ? '#template-sidebar-invitation-sent' : '#template-invitation-sent';
var invitationSentHtml = context.JK.fillTemplate($(selector).html(), {
userId: val.id,
first_name: val.first_name,
profile_url: "/#/profile/" + val.id
});
selector = isSidebar ? '#sidebar-search-results' : '#search-results';
$(selector).append(invitationSentHtml);
// wire up button click handler if search result is not a friend or the current use
if (isSidebar) {
var $sidebar = $('div[layout=sidebar] div[user-id=' + val.id + ']');
if (!val.is_friend && val.id !== context.JK.currentUserId) {
$sidebar.find('.btn-connect-friend').click(sendFriendRequest);
} else {
// hide the button if the search result is already a friend
$sidebar.find('.btn-connect-friend').hide();
}
} else {
if (!val.is_friend && val.id !== context.JK.currentUserId) {
$('div[user-id=' + val.id + ']').find('.btn-connect-friend').click(sendFriendRequest);
} else {
$('div[user-id=' + val.id + ']').find('.btn-connect-friend').hide();
}
}
resultDivVisibility(val, isSidebar);
});
} else if (response.search_type === 'bands') {
resultCount = response.bands.length;
template_name = isSidebar ? "#template-bands-sidebar-search-result" : "#template-bands-search-result";
$.each(response.bands, function(index, val) {
// fill in template for Connect pre-click
var searchResultHtml = context.JK.fillTemplate($(template_name).html(), {
bandId: val.id,
avatar_url: context.JK.resolveAvatarUrl(val.photo_url),
band_url: val.website,
bandName: val.name,
location: val.location
});
selector = isSidebar ? '#sidebar-search-results' : '#search-results';
$(selector).append(searchResultHtml);
resultDivVisibility(val, isSidebar);
});
} else if (response.search_type === 'fans') {
resultCount = response.fans.length;
template_name = isSidebar ? "#template-fans-sidebar-search-result" : "#template-fans-search-result";
$.each(response.fans, function(index, val) {
// fill in template for Connect pre-click
var searchResultHtml = context.JK.fillTemplate($(template_name).html(), {
userId: val.id,
avatar_url: context.JK.resolveAvatarUrl(val.photo_url),
profile_url: "/#/profile/" + val.id,
userName: val.name,
location: val.location
});
selector = isSidebar ? '#sidebar-search-results' : '#search-results';
$(selector).append(searchResultHtml);
resultDivVisibility(val, isSidebar);
});
}
if (isSidebar) {
// show header
$('#sidebar-search-header').show();
// hide panels
$('[layout-panel="contents"]').hide();
$('[layout-panel="contents"]').css({"height": "1px"});
// resize search results area
$('#sidebar-search-results').height(context.JK.Sidebar.getHeight() + 'px');
} else {
$('#result-count').html(resultCount);
if (resultCount === 1) {
$('#result-count').append(" Result for: ");
} else {
$('#result-count').append(" Results for: ");
}
}
};
function friendRequestCallbackSidebar(userId) {
// toggle the pre-click and post-click divs
$('div[layout=sidebar] div[user-id=' + userId + '].sidebar-search-connected').show();
$('div[layout=sidebar] div[user-id=' + userId + '].sidebar-search-result').hide();
}
function friendRequestCallbackSearchResults(userId) {
// toggle the pre-click and post-click divs
$('div[user-id=' + userId + '].search-connected').show();
$('div[user-id=' + userId + '].search-result').hide();
}
function sendFriendRequest(evt) {
evt.stopPropagation();
var userId = $(this).parent().attr('user-id');
if ($(this).closest('#sidebar-search-results')) {
context.JK.sendFriendRequest(app, userId, friendRequestCallbackSidebar);
} else {
context.JK.sendFriendRequest(app, userId, friendRequestCallbackSearchResults);
}
}
function getInstrumentHtml(instruments) {
var instrumentLogoHtml = '';
if (instruments !== undefined) {
for (var i=0; i < instruments.length; i++) {
var inst = '../assets/content/icon_instrument_default24.png';
if (instruments[i].instrument_id in instrument_logo_map) {
inst = instrument_logo_map[instruments[i].instrument_id];
instrumentLogoHtml += '<img src="' + inst + '" width="24" height="24" />&nbsp;';
}
}
}
return instrumentLogoHtml;
}
function events() {
$('#searchForm').submit(search);
}
this.initialize = function() {
var screenBindings = {
'beforeShow': beforeShow,
'afterShow': afterShow
};
app.bindScreen('searchResults', screenBindings);
events();
initializeSearchNavLinks();
};
};
})(window,jQuery);