From 44afb443abfeb687b8c0910af93367fef1845504 Mon Sep 17 00:00:00 2001 From: Dan Seripap Date: Fri, 8 Jan 2016 20:35:49 -0500 Subject: [PATCH 1/3] Compressed and mangled --- package.json | 2 +- src/public/main.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 703431e..59c8dfa 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "devDependencies": {}, "scripts": { "test": "echo \"Error: no test specified\" && exit 1", - "jsbuild": "uglifyjs src/js/main.js -o src/public/main.js" + "jsbuild": "uglifyjs src/js/main.js --compress --mangle -o src/public/main.js" }, "author": "Daniel Seripap", "license": "ISC" diff --git a/src/public/main.js b/src/public/main.js index 24ea1ea..e55b34c 100644 --- a/src/public/main.js +++ b/src/public/main.js @@ -1 +1 @@ -var fs=window.RequestFileSystem||window.webkitRequestFileSystem;$(function(){var isActive=false;var newMessages=0;var FADE_TIME=150;var TYPING_TIMER_LENGTH=400;var COLORS=["#e21400","#91580f","#f8a700","#f78b00","#58dc00","#287b00","#a8f07a","#4ae8c4","#3b88eb","#3824aa","#a700ff","#d300e7"];window.favicon=new Favico({animation:"pop",type:"rectangle"});var $window=$(window);var $usernameInput=$(".usernameInput");var $messages=$(".messages");var $inputMessage=$(".inputMessage");var $key=$("#key");var $genKey=$("#new_key");var $chatPage=$(".chat.page");var key=CryptoJS.SHA3(Math.random().toString(36).substring(7)).toString();$key.val(key);var username;var connected=false;var typing=false;var lastTypingTime;var $currentInput=$usernameInput.focus();var clipboard=new Clipboard(".copyable");var roomId=window.location.pathname.length?window.location.pathname:null;if(!roomId)return;var socket=io(roomId);$("#roomIdKey").text(roomId.replace("/",""));function addParticipantsMessage(data){var message="";if(data.numUsers===1){message+="There's 1 participant"}else{message+="There are "+data.numUsers+" participants"}log(message)}function setUsername(){username=window.username;if(!fs){console.log("no fs")}else{fs(window.TEMPORARY,100,log.bind(log,"WARNING: Your browser is not in incognito mode!"),log.bind(log,"Your browser is in incognito mode."))}if(username){$chatPage.show();$currentInput=$inputMessage.focus();socket.emit("add user",username)}}function sendMessage(){var message=$inputMessage.val();message=cleanInput(message);if(message&&connected){$inputMessage.val("");addChatMessage({username:username,message:message});socket.emit("new message",encrypt(message))}}function encrypt(text){return CryptoJS.AES.encrypt(text,$key.val()).toString()}function decrypt(text){return CryptoJS.AES.decrypt(text,$key.val()).toString(CryptoJS.enc.Utf8)||text}function log(message,options){var html=options&&options.html===true||false;var $el;if(html){$el=$("
  • ").addClass("log").html(message)}else{$el=$("
  • ").addClass("log").text(message)}addMessageElement($el,options)}function addChatMessage(data,options){var $typingMessages=getTypingMessages(data);options=options||{};if($typingMessages.length!==0){options.fade=false;$typingMessages.remove()}var $usernameDiv=$('').text(data.username).css("color",getUsernameColor(data.username));var $messageBodyDiv=$('').text(data.message);var typingClass=data.typing?"typing":"";var $messageDiv=$('
  • ').data("username",data.username).addClass(typingClass).append($usernameDiv,$messageBodyDiv);addMessageElement($messageDiv,options)}function addChatTyping(data){data.typing=true;data.message="is typing";addChatMessage(data)}function removeChatTyping(data){getTypingMessages(data).fadeOut(function(){$(this).remove()})}function addMessageElement(el,options){var $el=$(el);if(!options){options={}}if(typeof options.fade==="undefined"){options.fade=true}if(typeof options.prepend==="undefined"){options.prepend=false}if(options.fade){$el.hide().fadeIn(FADE_TIME)}if(options.prepend){$messages.prepend($el)}else{$messages.append($el)}$messages[0].scrollTop=$messages[0].scrollHeight}function cleanInput(input){return $("
    ").text(input).text()}function updateTyping(){if(connected){if(!typing){typing=true;socket.emit("typing")}lastTypingTime=(new Date).getTime();setTimeout(function(){var typingTimer=(new Date).getTime();var timeDiff=typingTimer-lastTypingTime;if(timeDiff>=TYPING_TIMER_LENGTH&&typing){socket.emit("stop typing");typing=false}},TYPING_TIMER_LENGTH)}}function getTypingMessages(data){return $(".typing.message").filter(function(i){return $(this).data("username")===data.username})}function getUsernameColor(username){var hash=7;for(var i=0;iCopy link to share';log(message,{prepend:true,html:true});message="This chatroom is destroyed after all participants exit. Chat history is client side only and not persistent.";log(message);addParticipantsMessage(data)});socket.on("new message",function(data){if(!isActive){newMessages++;favicon.badge(newMessages)}data.message=decrypt(data.message);addChatMessage(data)});socket.on("user joined",function(data){log(data.username+" joined");addParticipantsMessage(data)});socket.on("user left",function(data){log(data.username+" left");addParticipantsMessage(data);removeChatTyping(data)});socket.on("typing",function(data){addChatTyping(data)});socket.on("stop typing",function(data){removeChatTyping(data)});socket.on("first",function(){$(".modal").modal("show")});setUsername();$("span.key-btn").click(function(){$("#key-modal").modal("show")});window.onfocus=function(){isActive=true;newMessages=0;favicon.reset()};window.onblur=function(){isActive=false};clipboard.on("success",function(e){$(e.trigger).tooltip({title:"Copied!",trigger:"manual",placement:"auto"});$(e.trigger).tooltip("show");setTimeout(function(){$(e.trigger).tooltip("hide")},2e3)})}); \ No newline at end of file +var fs=window.RequestFileSystem||window.webkitRequestFileSystem;$(function(){function n(n){var e="";e+=1===n.numUsers?"There's 1 participant":"There are "+n.numUsers+" participants",a(e)}function e(){M=window.username,fs?fs(window.TEMPORARY,100,a.bind(a,"WARNING: Your browser is not in incognito mode!"),a.bind(a,"Your browser is in incognito mode.")):console.log("no fs"),M&&(T.show(),F=C.focus(),H.emit("add user",M))}function t(){var n=C.val();n=f(n),n&&I&&(C.val(""),s({username:M,message:n}),H.emit("new message",o(n)))}function o(n){return CryptoJS.AES.encrypt(n,k.val()).toString()}function i(n){return CryptoJS.AES.decrypt(n,k.val()).toString(CryptoJS.enc.Utf8)||n}function a(n,e){var t,o=e&&e.html===!0||!1;t=o?$("
  • ").addClass("log").html(n):$("
  • ").addClass("log").text(n),u(t,e)}function s(n,e){var t=d(n);e=e||{},0!==t.length&&(e.fade=!1,t.remove());var o=$('').text(n.username).css("color",l(n.username)),i=$('').text(n.message),a=n.typing?"typing":"",s=$('
  • ').data("username",n.username).addClass(a).append(o,i);u(s,e)}function r(n){n.typing=!0,n.message="is typing",s(n)}function c(n){d(n).fadeOut(function(){$(this).remove()})}function u(n,e){var t=$(n);e||(e={}),"undefined"==typeof e.fade&&(e.fade=!0),"undefined"==typeof e.prepend&&(e.prepend=!1),e.fade&&t.hide().fadeIn(y),e.prepend?S.prepend(t):S.append(t),S[0].scrollTop=S[0].scrollHeight}function f(n){return $("
    ").text(n).text()}function p(){I&&(J||(J=!0,H.emit("typing")),R=(new Date).getTime(),setTimeout(function(){var n=(new Date).getTime(),e=n-R;e>=h&&J&&(H.emit("stop typing"),J=!1)},h))}function d(n){return $(".typing.message").filter(function(e){return $(this).data("username")===n.username})}function l(n){for(var e=7,t=0;tCopy link to share';a(t,{prepend:!0,html:!0}),t="This chatroom is destroyed after all participants exit. Chat history is client side only and not persistent.",a(t),n(e)}),H.on("new message",function(n){m||(g++,favicon.badge(g)),n.message=i(n.message),s(n)}),H.on("user joined",function(e){a(e.username+" joined"),n(e)}),H.on("user left",function(e){a(e.username+" left"),n(e),c(e)}),H.on("typing",function(n){r(n)}),H.on("stop typing",function(n){c(n)}),H.on("first",function(){$(".modal").modal("show")}),e(),$("span.key-btn").click(function(){$("#key-modal").modal("show")}),window.onfocus=function(){m=!0,g=0,favicon.reset()},window.onblur=function(){m=!1},D.on("success",function(n){$(n.trigger).tooltip({title:"Copied!",trigger:"manual",placement:"auto"}),$(n.trigger).tooltip("show"),setTimeout(function(){$(n.trigger).tooltip("hide")},2e3)})}}); \ No newline at end of file From 35dc549e3da521ab07ff6623f225ea63689ab8c3 Mon Sep 17 00:00:00 2001 From: Dan Seripap Date: Fri, 8 Jan 2016 20:44:00 -0500 Subject: [PATCH 2/3] Remove key --- src/js/main.js | 5 +++++ src/views/index.mustache | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/js/main.js b/src/js/main.js index dc5cdf0..3568943 100644 --- a/src/js/main.js +++ b/src/js/main.js @@ -23,6 +23,7 @@ $(function() { var $inputMessage = $('.inputMessage'); // Input message input box var $key = $('#key'); var $genKey = $('#new_key'); + var $removeKey = $('#remove_key'); var $chatPage = $('.chat.page'); // The chatroom page @@ -260,6 +261,10 @@ $(function() { $key.val(key); }); + $removeKey.click(function(() { + $key.val(''); + }); + // Socket events // Whenever the server emits 'login', log the login message diff --git a/src/views/index.mustache b/src/views/index.mustache index eedc48d..8e7b7d0 100644 --- a/src/views/index.mustache +++ b/src/views/index.mustache @@ -33,7 +33,11 @@