]> git.example.dev Git - binbsis50.git/commitdiff
fixed url for github button and updated jQuery
authorLuigi Pinca <luigipinca@gmail.com>
Thu, 16 Aug 2012 18:13:23 +0000 (20:13 +0200)
committerLuigi Pinca <luigipinca@gmail.com>
Thu, 16 Aug 2012 18:13:23 +0000 (20:13 +0200)
package.json
public/static/css/style.css
public/static/images/sprites.png
public/static/js/home.js
public/static/js/room.js
views/footer.jade
views/header.jade

index 4af33bd52616fbcbf952a4e6c228bf7a9d8aecbd..7213e955fe9e2238fc59dce2a6a28cf34f835817 100644 (file)
@@ -1,11 +1,11 @@
 {
   "dependencies": {
     "async": "0.1.x",
-    "canvas": "0.12.x",
+    "canvas": "0.13.x",
     "connect": "1.9.x",
     "connect-redis": "1.4.x",
     "express": "2.5.x",
-    "jade": "0.26.x",
+    "jade": "0.27.x",
     "nodemailer": "0.3.x",
     "redis": "0.7.x",
     "redis-url": "0.1.x",
@@ -19,5 +19,5 @@
     "start": "app.js"
   },
   "subdomain": "binb",
-  "version": "0.3.2-16"
+  "version": "0.3.2-17"
 }
\ No newline at end of file
index 18d5adfdbade2ff3e931491e826f6043a90f2789..adb4d6d92ea3d892a64fff5cca1b5677e018c391 100644 (file)
@@ -84,7 +84,7 @@ input {
 .modal-footer {
     text-align: left;
 }
-.modal-footer .btn {
+.modal-footer .btn, #total-tracks, #tracks a, #nodejitsu-logo, .footer-info {
     float: right;
 }
 .thumbnails {
@@ -214,7 +214,6 @@ input {
     display: inline-block;
 }
 #total-tracks {
-    float: right;
     color: #BFBFBF;
     margin-top: 34px;
 }
@@ -598,7 +597,6 @@ input {
     margin-top: 11px;
 }
 #tracks a {
-    float:right;
     display:block;
     width:24px;
     height:24px;
@@ -623,11 +621,11 @@ footer {
 }
 #footer-inner {
     border-top:1px solid white;
-    padding-top:5px;
+    padding:5px 20px 0 20px;
     margin-bottom:30px;
 }
 #copy {
-    margin: 0 20px 0 20px;
+    margin-right: 20px;
 }
 #facebook-button {
     width:90px;
@@ -636,10 +634,18 @@ footer {
 #twitter-button, #github-button {
     width:100px;
 }
-#copy, #footer-right {
+#copy, .footer-info {
     line-height:20px;
 }
-#footer-right {
-    float:right;
-    margin-right:20px;
+.footer-info {
+    white-space: pre-wrap;
+}
+#nodejitsu-logo {
+    display: block;
+    width: 84px;
+    height: 20px;
+    background: url('/static/images/sprites.png') no-repeat 0 -208px;
+}
+#nodejitsu-logo:hover {
+    background: url('/static/images/sprites.png') no-repeat 0 -228px;
 }
index 1c94c731643c2a85e3247b2af2914be6f214d194..e0906810c575a693ac5ba4fd6d35fc1bfa04fc7b 100644 (file)
Binary files a/public/static/images/sprites.png and b/public/static/images/sprites.png differ
index fcc92a5b8338ee894ac7eb029f3e9b8e60bb22e3..23b060b3929dfbdceffbecd200efe6c92736a056 100644 (file)
@@ -16,7 +16,7 @@ $(function() {
             }
         });
     });
-    var socket = io.connect("http://binb.nodejitsu.com/", {'reconnect':false});
+    var socket = io.connect('http://'+window.location.host, {'reconnect':false});
     socket.on("connect", function() {
         socket.emit("getoverview");
         socket.on("overview", function(data) {
index 9f14a4a6a002d934a51a22248e9e624953b21bf5..89a1afc2df2f001018f1fecdb7e7cbe89d03cd88 100644 (file)
     ];
 
     String.prototype.encodeEntities = function() {
-        return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
-    };
-
-    // Exact match version of jQuery :contains selector
-    $.expr[":"].econtains = function(obj, index, meta, stack) {
-        return $(obj).html() === meta[0].replace(/^[\s\S]+:econtains\(([\s\S]+)\)$/, "$1");
+        return this.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
     };
 
     // Prompt for name and send it.
     var joinAnonymously = function(msg) {
         if (/nickname\s*\=/.test(document.cookie) && !msg) {
-            nickname = unescape(document.cookie.replace(/.*nickname\s*\=\s*([^;]*);?.*/, "$1"));
+            nickname = unescape(document.cookie.replace(/.*nickname\s*\=\s*([^;]*);?.*/, '$1'));
             socket.emit('joinanonymously', nickname, roomname);
         }
         else {
 
                 button.click(function() {
                     var val = $.trim(login.val());
-                    if (val !== "") {
+                    if (val !== '') {
                         nickname = val;
                         socket.emit('joinanonymously', nickname, roomname);
                     }
                     else {
-                        var txt = "Nickname can't be empty.";
+                        var txt = 'Nickname can\'t be empty.';
                         invalidNickName('<span class="label label-important">'+txt+'</span>');
                     }
-                    login.val("");
+                    login.val('');
                 });
 
                 login.keyup(function(event) {
 
     // Submitted name was invalid
     var invalidNickName = function(feedback) {
-        joinAnonymously(feedback+"<br/>Try with another one:");
+        joinAnonymously(feedback+'<br/>Try with another one:');
     };
 
     /* Triggered when a logged user tries to join a room from another tab or another browser
     // Successfully joined the room
     var ready = function(usersData, trackscount, loggedin) {
         if (!loggedin && !/nickname\s*\=/.test(document.cookie)) {
-            document.cookie = "nickname="+escape(nickname)+";path=/;";
+            document.cookie = 'nickname='+escape(nickname)+';path=/;';
         }
         
         DOM.modal.modal('hide').empty();
         $('#total-tracks span').text(trackscount);
-        var msg = nickname+" joined the game";
-        var joinspan = $("<span class='join'></span>");
+        var msg = nickname+' joined the game';
+        var joinspan = $('<span class="join"></span>');
         joinspan.text(msg);
         addChatEntry(joinspan);
         updateUsers(usersData);
         DOM.messagebox.keydown(function(event) {
             if (event.keyCode === 13) {
                 var val = $.trim(DOM.messagebox.val());
-                if (val !== "") {
+                if (val !== '') {
                     if (pvtmsgto) {
                         socket.emit('sendchatmsg', val, pvtmsgto);
                     }
                         socket.emit('sendchatmsg', val);
                     }
                 }
-                DOM.messagebox.val("");
+                DOM.messagebox.val('');
             }
         });
 
             switch (event.keyCode) {
                 case 13: // return
                     var guess = $.trim(DOM.guessbox.val());
-                    if (guess !== "") {
+                    if (guess !== '') {
                         socket.emit('guess', guess.toLowerCase());
                         historyvalues.push(guess);
                         if (historyvalues.length > 20) {
                         }
                         historycursor = historyvalues.length;
                     }
-                    DOM.guessbox.val("");
+                    DOM.guessbox.val('');
                     break;
                 case 38: // up-arrow
                     if (historycursor > 0) {
                     }
                     else {
                         historycursor = historyvalues.length;
-                        DOM.guessbox.val("");
+                        DOM.guessbox.val('');
                     }
             }
         });
         socket.on('trackinfo', addTrackInfo);
         socket.on('artistmatched', function() {
             var feedback = amstrings[Math.floor(Math.random()*amstrings.length)];
-            addFeedback(feedback, "correct");
+            addFeedback(feedback, 'correct');
         });
         socket.on('titlematched', function() {
             var feedback = tmstrings[Math.floor(Math.random()*tmstrings.length)];
-            addFeedback(feedback, "correct");
+            addFeedback(feedback, 'correct');
         });
         socket.on('bothmatched', function() {
             var feedback = bmstrings[Math.floor(Math.random()*bmstrings.length)];
-            addFeedback(feedback, "correct");
+            addFeedback(feedback, 'correct');
         });
         socket.on('nomatch', function() {
             var feedback = nmstrings[Math.floor(Math.random()*nmstrings.length)];
-            addFeedback(feedback, "wrong");
+            addFeedback(feedback, 'wrong');
         });
         socket.on('stoptrying', function() {
             addFeedback('You guessed both artist and title. Please wait...');
 
     // A new player has joined the game
     var userJoin = function(username, usersData) {
-        var msg = username+" joined the game";
-        var joinspan = $("<span class='join'></span>");
+        var msg = username+' joined the game';
+        var joinspan = $('<span class="join"></span>');
         joinspan.text(msg);
         addChatEntry(joinspan);
         updateUsers(usersData);
 
     // A player has left the game
     var userLeft = function(username, usersData) {
-        var leftmsg = username+" left the game";
-        var leftspan = $("<span class='left'></span>");
+        var leftmsg = username+' left the game';
+        var leftspan = $('<span class="left"></span>');
         leftspan.text(leftmsg);
         addChatEntry(leftspan);
         updateUsers(usersData);
             }
             
             if (nickname === user.nickname) {
-                username.addClass("you");
+                username.addClass('you');
                 roundpoints = user.roundpoints;
                 DOM.rank.text(i+1);
                 DOM.points.text(user.points);
             if (user.roundpoints > 0) {
                 roundpointsel.text('+'+user.roundpoints);
                 if (user.roundpoints === 1) {
-                    username.addClass("matched");
+                    username.addClass('matched');
                 }
                 else {
                     if (user.roundpoints > 3) {
                         var stand = 7 - user.roundpoints;
-                        roundrank.addClass("round-rank stand"+stand);
+                        roundrank.addClass('round-rank stand'+stand);
                         var gtime = (user.guesstime / 1000).toFixed(1);
-                        guesstime.text(gtime+" s");
+                        guesstime.text(gtime+' s');
                     }
-                    username.addClass("correct");
+                    username.addClass('correct');
                 }
             }
         }
         
         if (!found && pvtmsgto) {
             var width = DOM.recipient.outerWidth(true) + 1;
-            DOM.recipient.css('margin-right','0');
-            DOM.recipient.text("");
-            DOM.messagebox.animate({'width':'+='+width+'px'}, "fast");
+            DOM.recipient.css('margin-right', '0');
+            DOM.recipient.text('');
+            DOM.messagebox.animate({'width':'+='+width+'px'}, 'fast');
             pvtmsgto = null;
             DOM.messagebox.focus();
         }
         if (nickname === usrname) {
             return;
         }
-        DOM.recipient.css('margin-right','4px');
-        DOM.recipient.text("To "+usrname+":");
+        DOM.recipient.css('margin-right', '4px');
+        DOM.recipient.text('To '+usrname+':');
         var width = DOM.recipient.outerWidth(true) + 1;
         DOM.recipient.hide();
-        DOM.messagebox.animate({'width':'-='+width+'px'}, "fast", function() {DOM.recipient.show();});
-        var el = $("span.name:econtains("+usrname.encodeEntities()+")");
-        el.prevAll(".private").show();
+        DOM.messagebox.animate({'width':'-='+width+'px'}, 'fast', function() {
+            DOM.recipient.show();
+        });
+        var el = $('.name').filter(function(index) {
+            return $(this).text() === usrname;
+        });
+        el.prevAll('.private').show();
         el.unbind('click');
         el.click(clearPrivate);
         pvtmsgto = usrname;
 
     var clearPrivate = function() {
         var width = DOM.recipient.outerWidth(true) + 1;
-        DOM.recipient.css('margin-right','0');
-        DOM.recipient.text("");
-        DOM.messagebox.animate({'width':'+='+width+'px'}, "fast");
-        var el = $("span.name:econtains("+pvtmsgto.encodeEntities()+")");
-        el.prevAll(".private").hide();
-        el.unbind("click");
+        DOM.recipient.css('margin-right', '0');
+        DOM.recipient.text('');
+        DOM.messagebox.animate({'width':'+='+width+'px'}, 'fast');
+        var el = $('.name').filter(function(index) {
+            return $(this).text() === pvtmsgto;
+        });
+        el.prevAll('.private').hide();
+        el.unbind('click');
         el.click(function() {
             addPrivate($(this).text());
         });
     // Receive a chat message
     var getChatMessage = function(chatmsg, from, to) {
         var prefix = from;
-        var msgspan = $("<span class='message'></span>");
+        var msgspan = $('<span class="message"></span>');
         if (to) {
             // Private Message
             prefix = (nickname === from) ? '(To '+to+')' : '(From '+prefix+')';
-            msgspan.addClass("private");
+            msgspan.addClass('private');
         }
-        var msg = prefix+": "+chatmsg;
+        var msg = prefix+': '+chatmsg;
         msgspan.html(urlize(msg));
         addChatEntry(msgspan);
     };
 
     var loadTrack = function(previewUrl) {
-        jplayer.jPlayer("mute");
-        jplayer.jPlayer("setMedia", {m4a: previewUrl});
+        jplayer.jPlayer('mute');
+        jplayer.jPlayer('setMedia', {m4a: previewUrl});
     };
 
     // Play a track
     var playTrack = function(data) {
         if (touchplay) {
-            touchplay.removeClass("btn-danger disabled").addClass("btn-success");
+            touchplay.removeClass('btn-danger disabled').addClass('btn-success');
             touchplay.html('<i class="icon-play icon-white"></i> Play');
         }
-        jplayer.jPlayer("unmute");
-        jplayer.jPlayer("play");
+        jplayer.jPlayer('unmute');
+        jplayer.jPlayer('play');
         updateUsers(data.users);
         cassetteAnimation(Date.now()+30000, true);
         if (data.counter === 1) {
             offsetleft = 44 - 24*secleft/30;
             offsetright = 130 - 24*secleft/30;
             DOM.progress.width(width);
-            css = {
-                '-moz-transform' : 'rotate('+deg+'deg)',
-                '-webkit-transform' : 'rotate('+deg+'deg)',
-                '-o-transform' : 'rotate('+deg+'deg)',
-                '-ms-transform' : 'rotate('+deg+'deg)',
-                'transform' : 'rotate('+deg+'deg)'
-            };
-            DOM.cassettewheels.css(css);
+            DOM.cassettewheels.css('transform', 'rotate('+deg+'deg)');
             DOM.tapeleft.css('left', offsetleft+'px');
             DOM.taperight.css('left', offsetright+'px');
         }
             offsetleft = 20 + 24*secleft/5;
             offsetright = 106 + 24*secleft/5;
             DOM.progress.width(width);
-            css = {
-                '-moz-transform' : 'rotate('+deg+'deg)',
-                '-webkit-transform' : 'rotate('+deg+'deg)',
-                '-o-transform' : 'rotate('+deg+'deg)',
-                '-ms-transform' : 'rotate('+deg+'deg)',
-                'transform' : 'rotate('+deg+'deg)'
-            };
-            DOM.cassettewheels.css(css);
+            DOM.cassettewheels.css('transform', 'rotate('+deg+'deg)');
             DOM.tapeleft.css('left', offsetleft+'px');
             DOM.taperight.css('left', offsetright+'px');
         }
     // Add track info
     var addTrackInfo = function(data) {
         if (touchplay) {
-            touchplay.removeClass("btn-success").addClass("btn-danger disabled");
+            touchplay.removeClass('btn-success').addClass('btn-danger disabled');
             touchplay.html('<i class="icon-play icon-white"></i> Wait');
         }
         cassetteAnimation(Date.now()+5000, false);
             , rp = '';
 
         if (data.trackName.length > 45) {
-            titleattr = data.trackName.replace(/"/g, "&quot;");
-            trackname = data.trackName.substring(0,42) + '...';
+            titleattr = data.trackName.replace(/"/g, '&quot;');
+            trackname = data.trackName.substring(0, 42) + '...';
         }
         html += '<div class="title" title="'+titleattr+'">'+trackname+'</div></div>';
 
                 var meantime = "N/A";
                 if (podium[i].guessed !== 0) {
                     meantime = podium[i].totguesstime / podium[i].guessed;
-                    meantime = (meantime / 1000).toFixed(1)+" s";
+                    meantime = (meantime / 1000).toFixed(1)+' s';
                 }
                 html += '<td>'+meantime+'</td></tr>';
             }
     // Let the user know when he/she has disconnected
     var disconnect = function() {
         stopanimation = true;
-        jplayer.jPlayer("stop");
-        var errorspan = $("<span class='error'>ERROR: You have disconnected.</span>");
+        jplayer.jPlayer('stop');
+        var errorspan = $('<span class="error">ERROR: You have disconnected.</span>');
         addChatEntry(errorspan);
         addFeedback('Something wrong happened');
         DOM.users.empty();
 
     // Add a chat entry, whether message, notification, etc.
     var addChatEntry = function(childNode) {
-        var li = $("<li class='entry'></li>");
+        var li = $('<li class="entry"></li>');
         li.append(childNode);
         DOM.chat.append(li);
         DOM.chat[0].scrollTop = DOM.chat[0].scrollHeight;
     };
 
     var hideChat = function() {
-        DOM.togglechat.text("Show chat").unbind('click');
+        DOM.togglechat.text('Show chat').unbind('click');
         DOM.chatwrapper.toggle(300);
-        DOM.tracks.animate({maxHeight:"434px"}, 300);
+        DOM.tracks.animate({maxHeight:'434px'}, 300);
         DOM.togglechat.click(showChat);
     };
 
     var showChat = function() {
-        DOM.togglechat.text("Hide chat").unbind('click');
+        DOM.togglechat.text('Hide chat').unbind('click');
         DOM.chatwrapper.toggle(300);
-        DOM.tracks.animate({maxHeight:"240px"}, 300, function() {
+        DOM.tracks.animate({maxHeight:'240px'}, 300, function() {
             DOM.chat[0].scrollTop = DOM.chat[0].scrollHeight;
         });
         DOM.togglechat.click(hideChat);
                 '<div id="volume-total"></div>'+ // Rail
                 '<div id="volume-current"></div>'+ // Current volume
                 '<div id="volume-handle"></div>'+ // Handle
-            '</div></div>').appendTo("#volume");
+            '</div></div>').appendTo('#volume');
 
         var icon = volumebutton.find('#icon')
             , volumeslider = volumebutton.find('#volume-slider')
         var setVolume = function(volume) {
             handleIcon(volume);
             oldvalue = volume;
-            jplayer.jPlayer("volume", volume);
+            jplayer.jPlayer('volume', volume);
         };
 
         var handleVolumeMove = function(e) {
             var totaloffset = volumetotal.offset()
                 , newy = e.pageY - totaloffset.top
                 , railheight = volumetotal.height()
-                , totalTop = parseInt(volumetotal.css('top').replace(/px/,''),10)
+                , totalTop = parseInt(volumetotal.css('top').replace(/px/, ''), 10)
                 , volume = (railheight - newy) / railheight;
 
             if (newy < 0) {
 
             volumehandle.css('top', totalTop + newy - (volumehandle.height() / 2));
             volumecurrent.height(railheight - newy);
-            volumecurrent.css('top',newy+totalTop);
+            volumecurrent.css('top', newy + totalTop);
 
-            volume = Math.max(0,volume);
-            volume = Math.min(volume,1);
+            volume = Math.max(0, volume);
+            volume = Math.min(volume, 1);
 
             setVolume(volume);
 
             var d = new Date();
             d.setTime(d.getTime() + 31536000000); // One year in milliseconds
-            document.cookie = "volume="+volume+";path=/;expires="+d.toGMTString()+";";
+            document.cookie = 'volume='+volume+';path=/;expires='+d.toGMTString()+';';
         };
 
         var loadFromCookie = function() {
             if (/volume\s*\=/.test(document.cookie)) {
-                var value = document.cookie.replace(/.*volume\s*\=\s*([^;]*);?.*/, "$1");
+                var value = document.cookie.replace(/.*volume\s*\=\s*([^;]*);?.*/, '$1');
                 value = parseFloat(value);
                 positionVolumeHandle(value);
                 setVolume(value);
             if (!clicked) {
                 clicked = true;
                 if (oldvalue !== 0) {
-                    jplayer.jPlayer("volume", 0);
+                    jplayer.jPlayer('volume', 0);
                     positionVolumeHandle(0);
                     handleIcon(0);
                 }
             else {
                 clicked = false;
                 if (oldvalue !== 0) {
-                    jplayer.jPlayer("volume", oldvalue);
+                    jplayer.jPlayer('volume', oldvalue);
                     positionVolumeHandle(oldvalue);
                     handleIcon(oldvalue);
                 }
     // Set up the room.
     $(function() {
         setVariables();
-        DOM.modal.modal({keyboard:false,show:false,backdrop:"static"});
+        DOM.modal.modal({keyboard:false, show:false, backdrop:'static'});
         DOM.togglechat.click(hideChat);
         if ($.browser.mozilla) {
             // Block ESC button in firefox (breaks socket connections).
                 }
             });
         }
-        socket = io.connect("http://binb.nodejitsu.com/", {'reconnect':false});
-        socket.on("connect", function() {
-            jplayer = $("#player").jPlayer({
+        socket = io.connect('http://'+window.location.host, {'reconnect':false});
+        socket.on('connect', function() {
+            jplayer = $('#player').jPlayer({
                 ready: function() {
                     socket.emit('loggedin', function(data) {
                         if (data) {
                         var touchbackdrop = $('<div id="touch-backdrop">'+
                             '<button id="touch-play" class="btn btn-danger disabled">'+
                                 '<i class="icon-play icon-white"></i> Wait'+
-                            '</button></div>').appendTo("#cassette");
+                            '</button></div>').appendTo('#cassette');
                         touchplay = $('#touch-play');
                         touchplay.click(function() {
-                            if (!$(this).hasClass("btn-danger")) {
+                            if (!$(this).hasClass('btn-danger')) {
                                 touchplay = null;
                                 jplayer.jPlayer('play', elapsedtime);
                                 touchbackdrop.remove();
                         });
                     }
                 },
-                swfPath: "/static/swf/",
-                supplied: "m4a",
-                preload: "auto",
+                swfPath: '/static/swf/',
+                supplied: 'm4a',
+                preload: 'auto',
                 volume: 1
             });
         });
         socket.on('alreadyinaroom', alreadyInARoom);
         socket.on('invalidnickname', invalidNickName);
         socket.on('ready', ready);
-        socket.on("disconnect", disconnect);
+        socket.on('disconnect', disconnect);
     });
 })();
index afa53718fff62518e895918ca2c327e5968782ea..2d67ba062f800ca2f17d1cc0c7ced3262c7e27f4 100644 (file)
@@ -6,13 +6,7 @@ footer
         iframe#twitter-button(allowtransparency="true", frameborder="0",
             scrolling="no", src="//platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fbinb.nodejitsu.com")
         iframe#github-button(allowtransparency="true", frameborder="0", scrolling="0", 
-            src="http://markdotto.github.com/github-buttons/github-btn.html?user=lpinca&repo=binb&type=watch&count=true")
-        #footer-right Made with 
-            a(target="_blank", href="http://nodejs.org/") node.js
-            | , 
-            a(target="_blank", href="http://socket.io/") socket.io
-            | ,
-            a(target="_blank", href="http://redis.io/") redis.io
-            | ,
-            a(target="_blank", href="http://nodejitsu.com/") nodejitsu
-            | . Optimized for Google Chrome.
+            src="http://ghbtns.com/github-btn.html?user=lpinca&repo=binb&type=watch&count=true")
+        span.footer-info . Optimized for Google Chrome.
+        a#nodejitsu-logo(target="_blank", href="http://nodejitsu.com/")
+        span.footer-info Powered by 
index 0178479812585ef6d4764f261b1788ed8da590ec..56d25b249263549a89b86e019e5e8c3ba2079d8a 100644 (file)
@@ -7,7 +7,7 @@ head
     meta(name="keywords", content="iTunes, music, quiz, binb, beatquest, realtime, multiplayer, listening, game")
     meta(name="description", content="Simple, realtime, multiplayer, competitive music listening game. Guess the song and prove your music knowledge!")
     meta(name="author", content="Luigi Pinca")
-    script(src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js")
+    script(src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js")
     script
         var _gaq = _gaq || [];
         _gaq.push(['_setAccount', 'UA-29865853-1']);