1
0

5 Commits

12 changed files with 433 additions and 5485 deletions

5
app.js
View File

@ -2,16 +2,15 @@ var server = require("./server");
var router = require("./route"); var router = require("./route");
var requestHandlers = require("./requestHandlers"); var requestHandlers = require("./requestHandlers");
var debug = server.debugMode(); var debug = false; // todo move this to configfile
var handle = {} var handle = {}
handle["/"] = requestHandlers.sendInterface; handle["/"] = requestHandlers.sendInterface;
handle["/interface"] = requestHandlers.sendInterface; handle["/interface"] = requestHandlers.sendInterface;
handle["/sprite/emoji.css"] = requestHandlers.sendEmojiCss;
handle["/sprite/emoji.png"] = requestHandlers.sendEmojiPng;
handle["/js/jquery-1.12.1.min"] = requestHandlers.sendJquery; handle["/js/jquery-1.12.1.min"] = requestHandlers.sendJquery;
handle["/js/jquery-ui.js"] = requestHandlers.sendJqueryUI; handle["/js/jquery-ui.js"] = requestHandlers.sendJqueryUI;
handle["/css/bootstrap.min.css"] = requestHandlers.sendBootstrap; handle["/css/bootstrap.min.css"] = requestHandlers.sendBootstrap;
handle["/sprite/emoji.ttf"] = requestHandlers.sendEmojiTtf;
handle["/clear"] = requestHandlers.sendClear; handle["/clear"] = requestHandlers.sendClear;
if(server.demoMode()){ if(server.demoMode()){

View File

@ -1,20 +1,32 @@
<!DOCTYPE html> <!DOCTYPE html>
<meta charset="UTF-8">
<html> <html>
<head> <head>
<meta charset="UTF-8">
<title>SMS Board</title> <title>SMS Board</title>
<link rel='stylesheet' href='sprite/emoji.css' > <link rel='stylesheet' href='sprite/emoji.css' >
<link rel="stylesheet" href="/css/bootstrap.min.css" /> <link rel="stylesheet" href="/css/bootstrap.min.css" />
<script src="/js/jquery-1.12.1.min"></script> <script src="/js/jquery-1.12.1.min"></script>
<script src="/js/jquery-ui.js"></script> <script src="/js/jquery-ui.js"></script>
<script src="/socket.io/socket.io.js"></script> <script src="/socket.io/socket.io.js">
</script>
<style> <style>
/* Sticky footer styles /* Sticky footer styles
-------------------------------------------------- */ -------------------------------------------------- */
html, body { @import url('https://fonts.googleapis.com/css?family=Noto+Sans');
@font-face {
font-family: 'Emoji';
src: url('/sprite/emoji.ttf') format('truetype');
}
html,
body {
height: 100%; height: 100%;
font-family: 'Noto Sans', sans-serif;
/* The html and body elements cannot have any padding or margin. */ /* The html and body elements cannot have any padding or margin. */
} }
/* Wrapper for page content to push down footer */ /* Wrapper for page content to push down footer */
#wrap { #wrap {
min-height: 100%; min-height: 100%;
@ -24,6 +36,7 @@
/* Pad bottom by footer height */ /* Pad bottom by footer height */
padding: 0 0 60px; padding: 0 0 60px;
} }
/* Set the fixed height of the footer here */ /* Set the fixed height of the footer here */
#footer { #footer {
height: 100px; height: 100px;
@ -31,7 +44,13 @@
bottom: 0; bottom: 0;
width: 100%; width: 100%;
} }
h1 {
font-family: 'Emoji', 'Noto Sans', sans-serif;
}
</style> </style>
<script> <script>
const toDisplay = 4; //define the number of messages to show const toDisplay = 4; //define the number of messages to show
var iosocket; var iosocket;
@ -59,13 +78,19 @@
} }
} }
function initSocketIO() {
function initSocketIO()
{
iosocket = io.connect(); iosocket = io.connect();
iosocket.on('clientrefresh', function() { iosocket.on('clientrefresh', function() {
location.reload(); location.reload();
}); });
iosocket.on('connect', function() { iosocket.on('connect', function() {
iosocket.on('debugMessage', function(message) { iosocket.on('debugMessage', function(message) {
alert(message); alert(message);
}); });
@ -75,13 +100,13 @@
$( "span.number" ).html(mynumber); $( "span.number" ).html(mynumber);
}); });
iosocket.on('newMessage', function(time,number,message,color) { iosocket.on('newMessage', function(time,number,message,color) {
var censoredNumber = number.substring(0,3) + "********" +number.substring(number.length - 3, number.length); var censoredNumber = number.substring(0,3) + "********" +number.substring(number.length - 3, number.length);
var messages = document.getElementById('messagesBody'); var messages = document.getElementById('messagesBody');
var newDiv = document.createElement('div'); newDiv = document.createElement('div');
var newH1 = document.createElement('h1'); var newH1 = document.createElement('h1');
var newP = document.createElement('p'); var newP = document.createElement('p');
newH1.innerHTML = message; newH1.innerHTML = message;
newP.innerHTML = "by "+censoredNumber+" at "+time; newP.innerHTML = "by "+censoredNumber+" at "+time;
newDiv.style.backgroundColor = getColor(color); //need this on both for some browsers (especially safari) to recognize... newDiv.style.backgroundColor = getColor(color); //need this on both for some browsers (especially safari) to recognize...
@ -89,9 +114,10 @@
newDiv.className="jumbotron"; newDiv.className="jumbotron";
newDiv.appendChild(newH1); newDiv.appendChild(newH1);
newDiv.appendChild(newP); newDiv.appendChild(newP);
currentMessageCount++;
if(currentMessageCount > toDisplay) { currentMessageCount++;
if(currentMessageCount > toDisplay)
{
//Remove the top div //Remove the top div
$('#messagesBody').find('div').first().slideUp(function() { $('#messagesBody').find('div').first().slideUp(function() {
$(this).remove(); $(this).remove();
@ -101,13 +127,16 @@
}else{ }else{
document.getElementById('messagesBody').appendChild(newDiv); document.getElementById('messagesBody').appendChild(newDiv);
} }
});
});
};
function initButton() { });
});
}
function initButton()
{
$("#check").button(); $("#check").button();
}; }
window.onload = function() { window.onload = function() {
initSocketIO(); initSocketIO();
@ -115,19 +144,25 @@
iosocket.emit('getConfig'); iosocket.emit('getConfig');
}; };
$(document).ready(function() { $(document).ready(function() {
$('#check').click(function() { $('#check').click(function() {
iosocket.emit('sendAT',toggleVal); iosocket.emit('sendAT',toggleVal);
}); });
}); });
</script> </script>
</head> </head>
<body style="/*background-color: #D4D4D4;*/"> <body style="/*background-color: #D4D4D4;*/">
<div style="text-align:center;" > <div style="text-align:center;" >
<h2>Send an SMS with a message to <span class="number" style="color:#3399ff;"></span></h2> <h2>Send an SMS with a message to <span class="number" style="color:#3399ff;"></span></h2>
<div id="wrap"> <div id="wrap">
<div id="messagesBody"></div> <div id="messagesBody">
</div>
<br> <br>
<br> <br>
<div style="display:none;" id="btnHolder"> <div style="display:none;" id="btnHolder">
@ -136,9 +171,9 @@
<div id="debugOut"> </div> <div id="debugOut"> </div>
</div> </div>
</div> </div>
<div id="footer"> <!-- <div id="footer">
<h2 style="display: none;">Send an SMS with a message to <span class="number" style="color:#3399ff;"></span></h2> <h2>Send an SMS with a message to <span class="number" style="color:#3399ff;"></span></h2>
</div>
</div> </div>
-->
</body> </body>
</html> </html>

View File

@ -1,27 +1,36 @@
<!DOCTYPE html> <!DOCTYPE html>
<meta charset="UTF-8">
<html> <html>
<head> <head>
<meta charset="UTF-8">
<title>Clear Board</title> <title>Clear Board</title>
<link rel='stylesheet' href='sprite/emoji.css' >
<link rel="stylesheet" href="/css/bootstrap.min.css" /> <link rel="stylesheet" href="/css/bootstrap.min.css" />
<script src="/js/jquery-1.12.1.min"></script> <script src="/js/jquery-1.12.1.min"></script>
<script src="/js/jquery-ui.js"></script> <script src="/js/jquery-ui.js"></script>
<script src="/socket.io/socket.io.js"></script> <script src="/socket.io/socket.io.js"></script>
<script> <script>
var iosocket; var iosocket;
function initSocketIO() {
function initSocketIO()
{
iosocket = io.connect(); iosocket = io.connect();
iosocket.on('connect', function() { iosocket.on('connect', function() {
iosocket.on('debugMessage', function(message) { iosocket.on('debugMessage', function(message) {
alert(message); alert(message);
}); });
}); });
}; }
window.onload = function() { window.onload = function() {
initSocketIO(); initSocketIO();
}; };
$(document).ready(function() { $(document).ready(function() {
$('#clear').click(function() { $('#clear').click(function() {
var number = $('#number').val(); var number = $('#number').val();
@ -32,6 +41,8 @@
iosocket.emit('refreshClients'); iosocket.emit('refreshClients');
}); });
}); });
</script> </script>
</head> </head>
<body> <body>
@ -39,16 +50,13 @@
<div id="wrap"> <div id="wrap">
<div id="btnHolder"> <div id="btnHolder">
<h2>Functions</h2> <h2>Functions</h2>
<input type="number" id="number" value="1" min="1"/> <input type="number" id="number" value="1" min="1"/><label for="number">Number</label><br>
<label for="number">Number</label>
<br>
<input type="button" id="clear" value="clear"/> <input type="button" id="clear" value="clear"/>
<br> <br>
<input type="button" id="refresh" value="refresh"/> <input type="button" id="refresh" value="refresh"/>
<div id="debugOut"> </div> <div id="debugOut"> </div>
</div> </div>
</div> </div>
</div>
</body> </body>
</html> </html>

135
demo.html
View File

@ -2,34 +2,43 @@
<html> <html>
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=320, initial-scale=1">
<title>Chat</title> <title>Chat</title>
<script src="/js/jquery-1.12.1.min"></script> <script src="/js/jquery-1.12.1.min"></script>
<script src="/js/jquery-ui.js"></script> <script src="/js/jquery-ui.js"></script>
<script src="/socket.io/socket.io.js"></script> <script src="/socket.io/socket.io.js"></script>
</head>
<script type="text/javascript"> <script type="text/javascript">
var iosocket; var iosocket;
function initSocketIO() { function initSocketIO()
{
iosocket = io.connect(); iosocket = io.connect();
iosocket.on('connect', function() { iosocket.on('connect', function() {
createSystemMessage('[Connected]'); createSystemMessage('[Connected]');
console.log("connect"); console.log("connect");
iosocket.on('debugMessage', function(message) { iosocket.on('debugMessage', function(message) {
alert(message); alert(message);
}); });
iosocket.on('disconnect', function() { iosocket.on('disconnect', function() {
createSystemMessage('[Disconnected]'); createSystemMessage('[Disconnected]');
}); });
}); });
} }
window.onload = function() { window.onload = function() {
initSocketIO(); initSocketIO();
}; };
function createSystemMessage(message) { function createSystemMessage(message) {
var message = document.createTextNode(message); var message = document.createTextNode(message);
@ -59,6 +68,7 @@
chat.appendChild(messageBox); chat.appendChild(messageBox);
} }
function sendMessage() { function sendMessage() {
var user = document.getElementById('user'); var user = document.getElementById('user');
var message = document.getElementById('message'); var message = document.getElementById('message');
@ -77,12 +87,30 @@
if (( e.keyCode == 13 )&&(e.shiftKey === false)) { if (( e.keyCode == 13 )&&(e.shiftKey === false)) {
sendMessage(); sendMessage();
} }
} }
</script> </script>
<body>
<div id="wrapper">
<div id="chat_box" class="content"></div>
<div id="footer">
<div class="content">
<input type="text" id="number" value="+4301234567890" />
<input type="text" id="message" onkeypress="return submitEnter(event)" placeholder="Enter a Test Message! (Or emoji!, google if if you don't know how)" />
<input type="button" id="send_btn" value="Send" onclick="sendMessage()">
</div>
</div>
</div>
</body>
</html>
<style type="text/css"> <style type="text/css">
@import url('https://fonts.googleapis.com/css?family=Noto+Sans');
* { * {
font-family: "Noto Sans", sans-serif; font-family: "Arial";
font-size: 24px; font-size: 24px;
} }
@ -98,7 +126,7 @@
#chat_box { #chat_box {
box-sizing: border-box; box-sizing: border-box;
height: calc(100% - 50px); height: 100%;
overflow: auto; overflow: auto;
padding-bottom: 50px; padding-bottom: 50px;
} }
@ -117,18 +145,14 @@
position: relative; position: relative;
} }
#number { #user { width: 20%; }
width: 20%; #message { width: 68%; }
max-width: 240px;
}
#message {
width: calc(90% - 360px);
}
#send_btn { #send_btn {
width: 120px; width: 10%;
position: relative; position: absolute;
margin: 2px; right: 0;
bottom: 0;
margin: 0;
} }
.content { .content {
@ -145,23 +169,20 @@
input[type="text"] { input[type="text"] {
background-color: #146EA8; background-color: #146EA8;
padding: 3px 10px; padding: 3px 10px;
margin: 2px;
max-width: 92%;
} }
input[type="button"] { input[type="button"] {
background-color: #f39c12; background-color: #f39c12;
border-right: 1px solid #e67e22; border-right: 2px solid #e67e22;
border-bottom: 1px solid #e67e22; border-bottom: 2px solid #e67e22;
min-width: 70px; min-width: 70px;
display: inline-block; display: inline-block;
position: relative;
} }
input[type="button"]:hover { input[type="button"]:hover {
background-color: #e67e22; background-color: #e67e22;
border-right: 1px solid #f39c12; border-right: 2px solid #f39c12;
border-bottom: 1px solid #f39c12; border-bottom: 2px solid #f39c12;
cursor: pointer; cursor: pointer;
} }
@ -173,54 +194,23 @@
font-size: 16px; font-size: 16px;
} }
@media screen and (max-width: 1000px) { @media(max-width: 1000px) {
.content { width: 90%; } .content { width: 90%; }
#send_btn {
position: relative;
}
} }
@media screen and (max-width: 780px) { @media(max-width: 780px) {
#footer { #footer { height: 91px; }
height: 91px; #chat_box { padding-bottom: 91px; }
}
#chat_box { #user { width: 100%; }
padding-bottom: 91px; #message { width: 80%; }
height: calc(100% - 91px);
} }
#number { @media(max-width: 400px) {
width: 100%; #footer { height: 135px; }
} #chat_box { padding-bottom: 135px; }
#message {
min-width: 60%;
}
#send_btn {
position: absolute;
right: 0;
bottom: 3px;
margin: 0;
width: 10%;
}
}
@media screen and (max-width: 400px) { #message { width: 100%; }
#footer {
height: 135px;
}
#chat_box {
padding-bottom: 135px;
height: calc(100% - 135px);
}
#number {
max-width: none;
width: 93%;
}
#message {
width: 93%;
}
#send_btn { #send_btn {
position: relative; position: relative;
margin-top: 3px; margin-top: 3px;
@ -228,18 +218,3 @@
} }
} }
</style> </style>
</head>
<body>
<div id="wrapper">
<div id="chat_box" class="content"></div>
<div id="footer">
<div class="content">
<input type="text" id="number" value="+4301234567890" />
<input type="text" id="message" onkeypress="return submitEnter(event)" placeholder="Enter a Message" />
<input type="button" id="send_btn" value="Send" onclick="sendMessage()">
</div>
</div>
</div>
</body>
</html>

View File

@ -4,7 +4,7 @@
"description": "A SMS Messageboard built using node and express", "description": "A SMS Messageboard built using node and express",
"main": "app.js", "main": "app.js",
"dependencies": { "dependencies": {
"emojize": "^0.2.0", "async": "^2.0.0-rc.6",
"lowdb": "^0.12.5", "lowdb": "^0.12.5",
"serialport": "^4.0.5", "serialport": "^4.0.5",
"socket.io": "^1.4.8" "socket.io": "^1.4.8"

View File

@ -12,20 +12,6 @@ function sendInterface(response) {
response.end(html); response.end(html);
} }
function sendEmojiCss(response) {
console.log("Request handler 'Emojicss' was called.");
response.writeHead(200, {"Content-Type": "text/css"});
var html = fs.readFileSync(__dirname + "/served/emoji.css")
response.end(html);
}
function sendEmojiPng(response) {
console.log("Request handler 'Emojipng' was called.");
response.writeHead(200, {"Content-Type": "image/png"});
var html = fs.readFileSync(__dirname + "/served/emoji.png")
response.end(html);
}
function sendBootstrap(response) { function sendBootstrap(response) {
console.log("Request handler 'css' was called."); console.log("Request handler 'css' was called.");
response.writeHead(200, {"Content-Type": "text/css"}); response.writeHead(200, {"Content-Type": "text/css"});
@ -61,13 +47,19 @@ function sendDemo(response) {
response.end(html); response.end(html);
} }
function sendEmojiTtf(response) {
console.log("Request handler 'EmojiTtf' was called.");
response.writeHead(200, {"Content-Type": "font/ttf"});
var html = fs.readFileSync(__dirname + "/served/NotoColorEmoji.ttf")
response.end(html);
}
exports.sendClear = sendClear; exports.sendClear = sendClear;
exports.sendDemo = sendDemo; exports.sendDemo = sendDemo;
exports.sendEmojiTtf = sendEmojiTtf;
exports.sendBootstrap = sendBootstrap; exports.sendBootstrap = sendBootstrap;
exports.sendJqueryUI = sendJqueryUI; exports.sendJqueryUI = sendJqueryUI;
exports.sendJquery = sendJquery; exports.sendJquery = sendJquery;
exports.sendEmojiPng = sendEmojiPng;
exports.sendEmojiCss = sendEmojiCss;
exports.sendInterface = sendInterface; exports.sendInterface = sendInterface;

View File

@ -21,10 +21,6 @@
{ {
"param": "demoMode", "param": "demoMode",
"value": true "value": true
},
{
"param": "debugMode",
"value": false
} }
] ]
} }

BIN
served/NotoColorEmoji.ttf Normal file

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 MiB

View File

@ -7,7 +7,6 @@ low = require('lowdb'),
storage = require('lowdb/file-async'), storage = require('lowdb/file-async'),
db = low('db.json', { storage }); db = low('db.json', { storage });
var convert = require('emojize').emojize;
var config = low('config.json', { storage }); var config = low('config.json', { storage });
var socketServer; var socketServer;
var port = config('mainConfig').chain().find({ param: 'port' }).value()['value']; var port = config('mainConfig').chain().find({ param: 'port' }).value()['value'];
@ -23,11 +22,6 @@ module.exports.demoMode = function () {
return config('debug').chain().find({ param: 'demoMode' }).value()['value']; return config('debug').chain().find({ param: 'demoMode' }).value()['value'];
}; };
module.exports.debugMode = function () {
return config('debug').chain().find({ param: 'debugMode' }).value()['value'];
};
// utility function for ucs2 decode // utility function for ucs2 decode
function ucs2Parse(ucs2){ function ucs2Parse(ucs2){
codeArray = ucs2.match(/.{1,4}/g); codeArray = ucs2.match(/.{1,4}/g);
@ -120,7 +114,7 @@ function initSocketIO(httpServer,debug)
var colors = db('messages').chain().takeRight(number).map('color').value(); var colors = db('messages').chain().takeRight(number).map('color').value();
for(var i = 0; i < messages.length; i++){ for(var i = 0; i < messages.length; i++){
socket.emit('newMessage',times[i],numbers[i],convert(messages[i]),colors[i]); socket.emit('newMessage',times[i],numbers[i],messages[i],colors[i]);
} }
}); });
@ -137,7 +131,7 @@ function initSocketIO(httpServer,debug)
var messageRecieved = escapeHtml(message); var messageRecieved = escapeHtml(message);
db('messages').push({ numberString: numberStringRecieved,number: numberRecieved, time: timeRecieved, message: messageRecieved,color: color }); db('messages').push({ numberString: numberStringRecieved,number: numberRecieved, time: timeRecieved, message: messageRecieved,color: color });
//add a new message to the board directly //add a new message to the board directly
socketServer.emit('newMessage', timeRecieved, numberRecieved, convert(messageRecieved),color); socketServer.emit('newMessage', timeRecieved, numberRecieved, messageRecieved,color);
numberStringRecieved = null; numberStringRecieved = null;
numberRecieved = null; numberRecieved = null;
timeRecieved = null; timeRecieved = null;
@ -192,7 +186,7 @@ function serialListener(debug)
var messageRecieved = escapeHtml(ucs2Parse(data)); var messageRecieved = escapeHtml(ucs2Parse(data));
db('messages').push({ numberString: numberStringRecieved,number: numberRecieved, time: timeRecieved, message: messageRecieved,color: color }); db('messages').push({ numberString: numberStringRecieved,number: numberRecieved, time: timeRecieved, message: messageRecieved,color: color });
//add a new message to the board directly //add a new message to the board directly
socketServer.emit('newMessage', timeRecieved, numberRecieved, convert(messageRecieved),color); socketServer.emit('newMessage', timeRecieved, numberRecieved, messageRecieved,color);
numberStringRecieved = null; numberStringRecieved = null;
numberRecieved = null; numberRecieved = null;
timeRecieved = null; timeRecieved = null;