123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458 |
- (function(){
- var debug = false;
- // ***************************************************************************
- // Socket.io events
- // ***************************************************************************
-
- var socket = io.connect(window.location.host);
- // Connection established
- socket.on('connected', function (data) {
- console.log(data);
- // Get users connected to mainroom
- socket.emit('getUsersInRoom', {'room':'Lobby'});
- if (debug) {
- // Subscription to rooms
- socket.emit('subscribe', {'username':'sergio', 'rooms':['sampleroom']});
- // Send sample message to room
- socket.emit('newMessage', {'room':'sampleroom', 'msg':'Hellooooooo!'});
- // Auto-disconnect after 10 minutes
- setInterval(function() {
- socket.emit('unsubscribe', {'rooms':['sampleroom']});
- socket.disconnect();
- }, 600000);
- }
- });
- // Disconnected from server
- socket.on('disconnect', function (data) {
- var info = {'room':'Lobby', 'username':'Radio-bot', 'msg':'---- Lost connection ----'};
- addBotMessage(info);
- });
-
- // Reconnected to server
- socket.on('reconnect', function (data) {
- var info = {'room':'Lobby', 'username':'Radio-bot', 'msg':'---- Reconnected ----'};
- addBotMessage(info);
- });
- // Subscription to room confirmed
- socket.on('subscriptionConfirmed', function(data) {
- // Create room space in interface
- if (!roomExists(data.room)) {
- addRoomTab(data.room);
- addRoom(data.room);
- }
- // Close modal if opened
- $('#modal_joinroom').modal('hide');
- });
- // Unsubscription to room confirmed
- socket.on('unsubscriptionConfirmed', function(data) {
- // Remove room space in interface
- if (roomExists(data.room)) {
- removeRoomTab(data.room);
- removeRoom(data.room);
- }
- });
- // User joins room
- socket.on('userJoinsRoom', function(data) {
- console.log("userJoinsRoom: %s", JSON.stringify(data));
- // Log join in conversation
- addMessage(data);
-
- // Add user to connected users list
- addUser(data);
- });
- // User leaves room
- socket.on('userLeavesRoom', function(data) {
- console.log("userLeavesRoom: %s", JSON.stringify(data));
- // Log leave in conversation
- addMessage(data);
- // Remove user from connected users list
- removeUser(data);
- });
- // Message received
- socket.on('newMessage', function (data) {
- console.log("newMessage: %s", JSON.stringify(data));
- addMessage(data);
- // Scroll down room messages
- var room_messages = '#'+data.room+' #room_messages';
- $(room_messages).animate({
- scrollTop: $(room_messages).height()
- }, 300);
- });
- // Users in room received
- socket.on('usersInRoom', function(data) {
- console.log('usersInRoom: %s', JSON.stringify(data));
- _.each(data.users, function(user) {
- addUser(user);
- });
- });
- // User nickname updated
- socket.on('userNicknameUpdated', function(data) {
- console.log("userNicknameUpdated: %s", JSON.stringify(data));
- updateNickname(data);
- msg = '----- ' + data.oldUsername + ' is now ' + data.newUsername + ' -----';
- var info = {'room':data.room, 'username':'Radio-bot', 'msg':msg};
- addBotMessage(info);
- });
- // ***************************************************************************
- // Templates and helpers
- // ***************************************************************************
-
- var templates = {};
- var getTemplate = function(path, callback) {
- var source;
- var template;
-
- // Check first if we've the template cached
- if (_.has(templates, path)) {
- if (callback) callback(templates[path]);
- // If not we get and compile it
- } else {
- $.ajax({
- url: path,
- success: function(data) {
- source = data;
- template = Handlebars.compile(source);
- // Store compiled template in cache
- templates[path] = template;
- if (callback) callback(template);
- }
- });
- }
- }
- // Add room tab
- var addRoomTab = function(room) {
- getTemplate('js/templates/room_tab.handlebars', function(template) {
- $('#rooms_tabs').append(template({'room':room}));
- });
- };
- // Remove room tab
- var removeRoomTab = function(room) {
- var tab_id = "#"+room+"_tab";
- $(tab_id).remove();
- };
- // Add room
- var addRoom = function(room) {
- getTemplate('js/templates/room.handlebars', function(template) {
- $('#rooms').append(template({'room':room}));
-
- // Toogle to created room
- var newroomtab = '[href="#'+room+'"]';
- $(newroomtab).click();
- // Get users connected to room
- socket.emit('getUsersInRoom', {'room':room});
- });
- };
-
- // Remove room
- var removeRoom = function(room) {
- var room_id = "#"+room;
- $(room_id).remove();
- };
- // Add message to room
- var addMessage = function(msg) {
- getTemplate('js/templates/message.handlebars', function(template) {
- var room_messages = '#'+msg.room+' #room_messages';
- $(room_messages).append(template(msg));
- });
- };
-
- // Robot Add message to room
- var addBotMessage = function(msg) {
- getTemplate('js/templates/message-bot.handlebars', function(template) {
- var room_messages = '#'+msg.room+' #room_messages';
- $(room_messages).append(template(msg));
- });
- };
-
- // Add user to connected users list
- var addUser = function(user) {
- getTemplate('js/templates/user.handlebars', function(template) {
- var room_users = '#'+user.room+' #room_users';
- // Add only if it doesn't exist in the room
- var user_badge = '#'+user.room+' #'+user.id;
- if (!($(user_badge).length)) {
- $(room_users).append(template(user));
- }
- });
- }
- // Remove user from connected users list
- var removeUser = function(user) {
- var user_badge = '#'+user.room+' #'+user.id;
- $(user_badge).remove();
- };
- // Check if room exists
- var roomExists = function(room) {
- var room_selector = '#'+room;
- if ($(room_selector).length) {
- return true;
- } elseĀ {
- return false;
- }
- };
- // Get current room
- var getCurrentRoom = function() {
- return $('li[id$="_tab"][class="active"]').text();
- };
- // Get message text from input field
- var getMessageText = function() {
- var text = $('#message_text').val();
- $('#message_text').val("");
- return text;
- };
- // Get room name from input field
- var getRoomName = function() {
- var name = $('#room_name').val().trim();
- $('#room_name').val("");
- return name;
- };
- // Get nickname from input field
- var getNickname = function() {
- var nickname = $('#nickname').val();
- $('#nickname').val("");
- return nickname;
- };
- // Update nickname in badges
- var updateNickname = function(data) {
- var badges = '#'+data.room+' #'+data.id;
- $(badges).text(data.newUsername);
- };
- // ***************************************************************************
- // Events
- // ***************************************************************************
- // Send new message
- $('#b_send_message').click(function(eventObject) {
- eventObject.preventDefault();
- if ($('#message_text').val() != "") {
- socket.emit('newMessage', {'room':getCurrentRoom(), 'msg':getMessageText()});
- }
- });
- // Join new room
- $('#b_join_room').click(function(eventObject) {
- var roomName = getRoomName();
- if (roomName) {
- eventObject.preventDefault();
- socket.emit('subscribe', {'rooms':[roomName]});
- // Added error class if empty room name
- } else {
- $('#room_name').addClass('error');
- }
- });
- // Leave current room
- $('#b_leave_room').click(function(eventObject) {
- eventObject.preventDefault();
- var currentRoom = getCurrentRoom();
- if (currentRoom != 'Lobby') {
- socket.emit('unsubscribe', {'rooms':[getCurrentRoom()]});
- // Toogle to MainRoom
- $('[href="#Lobby"]').click();
- } else {
- console.log('Cannot leave Lobby, sorry');
- }
- });
- // Remove error style to hide modal
- $('#modal_joinroom').on('hidden.bs.modal', function (e) {
- if ($('#room_name').hasClass('error')) {
- $('#room_name').removeClass('error');
- }
- });
- // Set nickname
- $('#b_set_nickname').click(function(eventObject) {
- eventObject.preventDefault();
- socket.emit('setNickname', {'username':getNickname()});
- // Close modal if opened
- $('#modal_setnick').modal('hide');
- });
- })();
- /**** Radio Functions ****/
- /* Last-fm API */
- (function( $ ) {
- $.fn.lfmr = function(options){
- var urla = "https://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user=windhamdavid&api_key=e12ea1d0253898ee9a93edfe42ffdeab&format=json&limit=100";
- var tracks = [];
- function isLoadedr (recentElement) {
- for (var i = 0; i < tracks.length; i++){
- var markup = $("<li class='list-group-item'>" + tracks[i].artist + " - <span class='artist'>" + tracks[i].title + " : " + tracks[i].album + "</li>");
- recentElement.append(markup);
- }
- }
- return this.each(function(){
- var $this = $(this);
- $.getJSON( urla, function(data){
- $(data.recenttracks.track).each(function(){
- tracks.push ({
- artist: this.artist["#text"],
- title: this.name,
- album: this.album["#text"]
- });
- });
- isLoadedr($this);
- });
- });
- };
-
- $('.recent').lfmr();
-
- $.fn.lfya = function(options){
- var urla = "https://ws.audioscrobbler.com/2.0/?method=user.gettopartists&user=windhamdavid&api_key=e12ea1d0253898ee9a93edfe42ffdeab&period=12month&format=json&limit=100";
- var artists = [];
- function isLoadeda (artistElement) {
- for (var i = 0; i < artists.length; i++){
- var markup = $("<li class='list-group-item'>" + artists[i].aname + "<span class='badge'>" + artists[i].played + "</span></li>");
- artistElement.append(markup);
- }
- }
- return this.each(function(){
- var $this = $(this);
- $.getJSON( urla, function(data){
- $(data.topartists.artist).each(function(){
- artists.push ({
- aname: this.name,
- played: this.playcount
- });
- });
- isLoadeda($this);
- });
- });
- };
-
- $('.artists').lfya();
-
- $.fn.lfyt = function(options){
- var urla = "https://ws.audioscrobbler.com/2.0/?method=user.gettoptracks&user=windhamdavid&api_key=e12ea1d0253898ee9a93edfe42ffdeab&period=12month&format=json&limit=100";
- var tracks = [];
- function isLoadedt (tracksElement) {
- for (var i = 0; i < tracks.length; i++){
- var markup = $("<li class='list-group-item'>" + tracks[i].artist + " - <span class='artist'>" + tracks[i].title + "</span><span class='badge'>" + tracks[i].played + "</span></li>");
- tracksElement.append(markup);
- }
- }
- return this.each(function(){
- var $this = $(this);
- $.getJSON( urla, function(data){
- $(data.toptracks.track).each(function(){
- tracks.push ({
- title: this.name,
- artist: this.artist.name,
- played: this.playcount,
- });
- });
- isLoadedt($this);
- });
- });
- };
-
- $('.tracks').lfyt();
-
- })( jQuery );
- amplitude_config = {
- // amplitude_songs: []
- "amplitude_songs": [{
- "url": "http://stream.davidawindham.com:8008/stream",
- "live": true
- }],
- "amplitude_volume": 90
- }
- function get_radio_tower() {return 'img/radio.gif';}
- function get_radio_none() {return 'img/none.svg';}
- function get_radio_eq() {return 'img/eq.gif';}
- function get_radio_eq_none() {return 'img/none.svg';}
- var interval = null;
- $(document).ready(function() {
- interval = setInterval(radioTitle,30000); // every 30 seconds
- });
- function radioTitle() {
- $('#radio').attr('src', get_radio_none()).fadeIn(300);
- $('#eq').attr('src', get_radio_eq_none()).fadeIn(300);
- var url = 'http://stream.davidawindham.com/status2.xsl';
- var mountpoint = '/stream';
- $.ajax({ type: 'GET',
- url: url,
- async: true,
- jsonpCallback: 'parseMusic',
- contentType: "application/json",
- dataType: 'jsonp',
- success: function (json) {
- $('#track').text(json[mountpoint].title);
- $('#listeners').text(json[mountpoint].listeners);
- $('#peak-listeners').text(json[mountpoint].peak_listeners);
- $('#bitrate').text(json[mountpoint].bitrate);
- $('#radio').attr('src', get_radio_tower()).fadeIn(300);
- $('#eq').attr('src', get_radio_eq()).fadeIn(300);
- },
- error: function(e){
- console.error('cannot connect to stream');
- $('#connection-error').modal('show');
- clearInterval(interval);
- $('#radio').attr('src', get_radio_none()).fadeIn(300);
- $('#eq').attr('src', get_radio_eq_none()).fadeIn(300);
- }
- });
- }
- $(document).ready(function() {
- function spectrum() {
- var randomColor = Math.floor(Math.random()*16777215).toString(16);
- $("span#user-label").css({ backgroundColor: '#' + randomColor });
- };
- $('ul.nav-tabs a').tooltip();
-
- });
|