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

273 lines
7.0 KiB
JavaScript

/**
* Common utility functions.
*/
(function (context, $) {
"use strict";
context.JK = context.JK || {};
var profileUtils = {};
context.JK.ProfileUtils = profileUtils;
// genre types
var PROFILE_GENRE_TYPE = 'profile';
var VIRTUAL_BAND_GENRE_TYPE = 'virtual_band';
var TRADITIONAL_BAND_GENRE_TYPE = 'traditional_band';
var PAID_SESSION_GENRE_TYPE = 'paid_sessions';
var FREE_SESSION_GENRE_TYPE = 'free_sessions';
var COWRITING_GENRE_TYPE = 'cowriting';
// performance sample types
profileUtils.SAMPLE_TYPES = {
JAMKAZAM: {description: "jamkazam"},
SOUNDCLOUD: {description: "soundcloud"},
YOUTUBE: {description: "youtube"}
};
// online presence types
profileUtils.ONLINE_PRESENCE_TYPES = {
SOUNDCLOUD: {description: "soundcloud"},
REVERBNATION: {description: "reverbnation"},
BANDCAMP: {description: "bandcamp"},
FANDALISM: {description: "fandalism"},
YOUTUBE: {description: "youtube"},
FACEBOOK: {description: "facebook"},
TWITTER: {description: "twitter"}
};
var USER_TYPE = 'JamRuby::User';
profileUtils.skillLevelMap = {
"1": "Amateur",
"2": "Professional"
};
profileUtils.gigMap = {
"": "not specified",
"0": "zero",
"1": "under 10",
"2": "10 to 50",
"3": "50 to 100",
"4": "over 100"
};
profileUtils.studioMap = {
"0": "zero",
"1": "under 10",
"2": "10 to 50",
"3": "50 to 100",
"4": "over 100"
};
profileUtils.cowritingPurposeMap = {
"1": "just for fun",
"2": "sell music"
};
profileUtils.bandCommitmentMap = {
"1": "infrequent",
"2": "once a week",
"3": "2-3 times a week",
"4": "4+ times a week"
}
function buildGenreList(genres) {
var list = '';
for (var i=0; i < genres.length; i++) {
list = list.concat(genres[i].genre_id);
if (i !== genres.length - 1) {
list = list.concat(', ');
}
}
return list;
}
// Initialize standard profile help bubbles (topics stored as attributes on element):
profileUtils.initializeHelpBubbles = function(parentElement) {
$(".help", parentElement).each(function( index ) {
context.JK.helpBubble($(this), $(this).attr("help-topic"), {}, {})
})
}
// profile genres
profileUtils.profileGenres = function(genres) {
var matches = $.grep(genres, function(g) {
return g.player_type === USER_TYPE && g.genre_type === PROFILE_GENRE_TYPE;
});
return matches;
}
profileUtils.profileGenreList = function(genres) {
var matches = profileUtils.profileGenres(genres);
return buildGenreList(matches);
}
// virtual band genres
profileUtils.virtualBandGenres = function(genres) {
var matches = [];
if (genres) {
matches = $.grep(genres, function(g) {
return g.player_type === USER_TYPE && g.genre_type === VIRTUAL_BAND_GENRE_TYPE;
});
}
return matches;
}
profileUtils.virtualBandGenreList = function(genres) {
var matches = profileUtils.virtualBandGenres(genres);
return buildGenreList(matches);
}
// traditional band genres
profileUtils.traditionalBandGenres = function(genres) {
var matches = [];
if (genres) {
matches = $.grep(genres, function(g) {
return g.player_type === USER_TYPE && g.genre_type === TRADITIONAL_BAND_GENRE_TYPE;
});
}
return matches;
}
profileUtils.traditionalBandGenreList = function(genres) {
var matches = profileUtils.traditionalBandGenres(genres);
return buildGenreList(matches);
}
// paid session genres
profileUtils.paidSessionGenres = function(genres) {
var matches = [];
if (genres) {
matches = $.grep(genres, function(g) {
return g.player_type === USER_TYPE && g.genre_type === PAID_SESSION_GENRE_TYPE;
});
}
return matches;
}
profileUtils.paidSessionGenreList = function(genres) {
var matches = profileUtils.paidSessionGenres(genres);
return buildGenreList(matches);
}
// free session genres
profileUtils.freeSessionGenres = function(genres) {
var matches = [];
if (genres) {
matches = $.grep(genres, function(g) {
return g.player_type === USER_TYPE && g.genre_type === FREE_SESSION_GENRE_TYPE;
});
}
return matches;
}
profileUtils.freeSessionGenreList = function(genres) {
var matches = profileUtils.freeSessionGenres(genres);
return buildGenreList(matches);
}
// cowriting genres
profileUtils.cowritingGenres = function(genres) {
var matches = [];
if (genres) {
matches = $.grep(genres, function(g) {
return g.player_type === USER_TYPE && g.genre_type === COWRITING_GENRE_TYPE;
});
}
return matches;
}
profileUtils.cowritingGenreList = function(genres) {
var matches = profileUtils.cowritingGenres(genres);
return buildGenreList(matches);
}
profileUtils.jamkazamSamples = function(samples) {
var matches = $.grep(samples, function(s) {
return s.service_type === profileUtils.SAMPLE_TYPES.JAMKAZAM.description;
});
return matches;
}
profileUtils.soundCloudSamples = function(samples) {
var matches = $.grep(samples, function(s) {
return s.service_type === profileUtils.SAMPLE_TYPES.SOUNDCLOUD.description;
});
return matches;
}
profileUtils.youTubeSamples = function(samples) {
var matches = $.grep(samples, function(s) {
return s.service_type === profileUtils.SAMPLE_TYPES.YOUTUBE.description;
});
return matches;
}
profileUtils.soundCloudPresences = function(presences) {
var matches = $.grep(presences, function(p) {
return p.service_type === profileUtils.ONLINE_PRESENCE_TYPES.SOUNDCLOUD.description;
});
return matches;
}
profileUtils.reverbNationPresences = function(presences) {
var matches = $.grep(presences, function(p) {
return p.service_type === profileUtils.ONLINE_PRESENCE_TYPES.REVERBNATION.description;
});
return matches;
}
profileUtils.bandCampPresences = function(presences) {
var matches = $.grep(presences, function(p) {
return p.service_type === profileUtils.ONLINE_PRESENCE_TYPES.BANDCAMP.description;
});
return matches;
}
profileUtils.fandalismPresences = function(presences) {
var matches = $.grep(presences, function(p) {
return p.service_type === profileUtils.ONLINE_PRESENCE_TYPES.FANDALISM.description;
});
return matches;
}
profileUtils.youTubePresences = function(presences) {
var matches = $.grep(presences, function(p) {
return p.service_type === profileUtils.ONLINE_PRESENCE_TYPES.YOUTUBE.description;
});
return matches;
}
profileUtils.facebookPresences = function(presences) {
var matches = $.grep(presences, function(p) {
return p.service_type === profileUtils.ONLINE_PRESENCE_TYPES.FACEBOOK.description;
});
return matches;
}
profileUtils.twitterPresences = function(presences) {
var matches = $.grep(presences, function(p) {
return p.service_type === profileUtils.ONLINE_PRESENCE_TYPES.TWITTER.description;
});
return matches;
}
})(window, jQuery);